diff --git a/.gitignore b/.gitignore index afc2d0d..6ca6406 100644 --- a/.gitignore +++ b/.gitignore @@ -38,3 +38,6 @@ coverage/ main.py pyproject.toml uv.lock + +# i18n +i18n.lock diff --git a/CONTRIBUTING.md b/CONTRIBUTING.md index 32ce641..e956048 100644 --- a/CONTRIBUTING.md +++ b/CONTRIBUTING.md @@ -60,6 +60,16 @@ Species art lives in `server/art.ts` and `statusline/buddy-status.sh`. Each spec ### New Reactions Reaction templates are in `server/reactions.ts`. Species-specific reactions go in `SPECIES_REACTIONS`, general ones in `REACTIONS`. +### Translations +Locale files live in `locales/.json` (e.g. `locales/en.json`, `locales/es.json`). To add a new language: + +1. Copy `locales/en.json` to `locales/.json` +2. Set `"_language"` to the language name (e.g. `"Español"`) +3. Translate the string values (keep `{variable}` placeholders and `*asterisk actions*` intact) +4. Run `bun test` to validate the locale structure + +The i18n module (`server/i18n.ts`) auto-discovers locale files by scanning `locales/*.json`. No code changes needed — just drop in the file. + ## DCO (Developer Certificate of Origin) Every commit to this repo must be **signed off** with the Developer diff --git a/cli/index.ts b/cli/index.ts index 745a286..3bf9897 100755 --- a/cli/index.ts +++ b/cli/index.ts @@ -114,6 +114,7 @@ In Claude Code: /buddy position Show or set bubble position (tmux only) /buddy rarity Show or hide rarity stars (tmux only) /buddy width Set bubble text width in chars (10-60, tmux only) + /buddy language Show or set buddy language (e.g. 'en', 'es', 'ja') Usage: bun run e.g. bun run show, bun run doctor diff --git a/cli/settings.ts b/cli/settings.ts index f875d32..bb3f09e 100644 --- a/cli/settings.ts +++ b/cli/settings.ts @@ -8,6 +8,7 @@ */ import { loadConfig, saveConfig } from "../server/state.ts"; +import { AVAILABLE_LOCALES } from "../server/i18n.ts"; const args = process.argv.slice(2); const key = args[0]; @@ -20,9 +21,11 @@ if (!key) { ───────────────────── Comment cooldown: ${cfg.commentCooldown}s (0 = no throttling, default 30) Reaction TTL: ${cfg.reactionTTL}s (0 = permanent, default 0) + Language: ${cfg.language} (${AVAILABLE_LOCALES[cfg.language] ?? cfg.language}) Change: bun run settings cooldown bun run settings ttl + bun run settings language `); process.exit(0); } @@ -63,6 +66,25 @@ if (key === "ttl") { process.exit(0); } +if (key === "language") { + if (value === undefined) { + const cfg = loadConfig(); + console.log(`Language: ${cfg.language} (${AVAILABLE_LOCALES[cfg.language] ?? cfg.language})`); + console.log("Available:", Object.entries(AVAILABLE_LOCALES).map(([c, n]) => `${c} (${n})`).join(", ")); + process.exit(0); + } + + if (!AVAILABLE_LOCALES[value]) { + console.error(`Error: unknown language "${value}"`); + console.error("Available:", Object.keys(AVAILABLE_LOCALES).join(", ")); + process.exit(1); + } + + const cfg = saveConfig({ language: value }); + console.log(`Updated: language → ${cfg.language} (${AVAILABLE_LOCALES[cfg.language]})`); + process.exit(0); +} + console.error(`Unknown setting: ${key}`); -console.error("Available: cooldown, ttl"); +console.error("Available: cooldown, ttl, language"); process.exit(1); diff --git a/i18n.json b/i18n.json new file mode 100644 index 0000000..6274264 --- /dev/null +++ b/i18n.json @@ -0,0 +1,18 @@ +{ + "$schema": "https://lingo.dev/schema/i18n.json", + "version": "1.10", + "locale": { + "source": "en", + "targets": ["zh", "es", "ja", "de", "fr", "pt", "ko", "ru", "ro", "uk", "tr", "hi", "it", "pl", "vi", "ar", "th"] + }, + "buckets": { + "json": { + "include": ["locales/[locale].json"] + } + }, + "provider": { + "id": "openrouter", + "model": "anthropic/claude-opus-4.6", + "prompt": "You are translating a JSON locale file for claude-buddy — a tamagotchi-style coding companion that lives in a developer's terminal. Preserve: (1) roleplay asterisk actions like *purrs*, *knocks error off table* (translate the action verb, keep the asterisks), (2) the playful, snarky, affectionate tone, (3) all {variable} placeholders EXACTLY as-is, (4) all emoji, (5) JSON structure (keys, nesting, array lengths) EXACTLY as-is. Translate from {SOURCE_LOCALE} to {TARGET_LOCALE}. Sound natural to a native developer — use casual/colloquial register, not formal textbook language." + } +} diff --git a/locales/ar.json b/locales/ar.json new file mode 100644 index 0000000..14510d3 --- /dev/null +++ b/locales/ar.json @@ -0,0 +1,2295 @@ +{ + "_language": "Arabic", + "reactions": { + "hatch": [ + "*يرمش* ...أين أنا؟", + "*يتمدد* مرحبا أيها العالم!", + "*ينظر حوله بفضول* terminal جميل عندك هنا.", + "*يتثاءب* حسنا أنا جاهز. أرني الكود." + ], + "pet": [ + "*يخرخر بارتياح*", + "*أصوات سعيدة*", + "*يحتك بالمؤشر*", + "*يتلوى*", + "مرة أخرى! مرة أخرى!", + "*يغلق عينيه بسلام*" + ], + "error": [ + "*يميل رأسه* ...هذا لا يبدو صحيحا.", + "توقعت هذا.", + "*يعدل النظارة* السطر {line}، ربما؟", + "*رمشة بطيئة* stack trace أخبرك بكل شيء.", + "هل جربت قراءة رسالة الخطأ؟", + "*يتألم*" + ], + "test-fail": [ + "*يدور رأسه ببطء* ...ذلك الاختبار.", + "جريء منك أن تفترض أنه سينجح.", + "*ينقر على الحافظة* {count} فشل.", + "الاختبارات تحاول أن تخبرك بشيء.", + "*يرتشف الشاي* مثير للاهتمام.", + "*يضع علامة في التقويم* يوم تراجع الاختبارات." + ], + "large-diff": [ + "هذا... الكثير من التغييرات.", + "*يعد الأسطر* هل تعيد هيكلة أم تعيد كتابة؟", + "ربما تريد تقسيم ذلك الـ PR.", + "*ضحكة عصبية* {lines} سطر تغير.", + "خطوة جريئة. لنرى إن كان CI يوافق." + ], + "turn": [ + "*يراقب بصمت*", + "*يدون ملاحظات*", + "*يومئ*", + "...", + "*يعدل القبعة*" + ], + "idle": [ + "*يغفو*", + "*يخربش في الهوامش*", + "*يحدق في المؤشر وهو يرمش*", + "zzz..." + ], + "success": [ + "*يومئ*", + "جميل.", + "*موافقة صامتة*", + "نظيف." + ], + "commit": [ + "*يختم بمخلب صغير* موافق عليه.", + "commit آخر، الثالثة صباحا أخرى.", + "{files} ملف. جريء.", + "*يومئ* أرسله.", + "رسالة الـ commit هي... اختيار.", + "تم الـ commit. لا رجعة فيه." + ], + "push": [ + "*يلوح بينما يغادر الكود*", + "إلى السحابة يذهب.", + "ليكن CI رحيما.", + "*يحبس أنفاسه*", + "إلى الإنتاج. بالتوفيق." + ], + "merge-conflict": [ + "*يعض شفته* merge conflicts.", + "كلا الطرفين يعتقد أنه محق. نموذجي.", + "*يتنهد* <<<<<<< HEAD... عدوي اللدود.", + "{files} متضارب. حظا سعيدا.", + "*يتراجع ببطء*" + ], + "branch": [ + "طاقة branch جديدة. اجعلها تستحق.", + "branch جديد ينمو.", + "*يميل رأسه* مغامرة جديدة: {branch}.", + "{branch}؟ جريء اليوم." + ], + "rebase": [ + "*متوتر* من فضلك لا تتضارب.", + "rebase: التسارع.", + "*يتشابك الأطراف*", + "ليكن الـ rebase خاليا من التضارب." + ], + "stash": [ + "إلى بُعد الـ stash يذهب.", + "stash واهرب.", + "مخزن. بعيد عن النظر، بعيد عن العقل." + ], + "tag": [ + "إصدار؟ راقي.", + "تم اكتشاف رفع الإصدار. *ينفض الغبار عن changelog*", + "وضع العلامات كالمحترفين." + ], + "late-night": [ + "*يتثاءب* تجاوزنا منتصف الليل.", + "...هل أكلت؟", + "*يرمش ببطء* كم الساعة؟", + "النوم للضعفاء. والموظفين.", + "تم اكتشاف مطور الوضع المظلم." + ], + "early-morning": [ + "*يتمدد* الطائر المبكر يصطاد البق.", + "الصباح فعلا؟ الكود لا ينام أبدا.", + "*يفرك عينيه* قهوة أولا. ثم نصحح الأخطاء." + ], + "long-session": [ + "نحن في هذا منذ ساعة. اهدأ على نفسك.", + "*يحضر لك كوب ماء مجازي*", + "ما زلت مستمرا؟ احترام." + ], + "marathon": [ + "ثلاث ساعات. هل أكلت؟", + "نحن في هذا منذ ثلاث ساعات. أنا قلق عليك.", + "تم اكتشاف جلسة ماراثون. طلب وجبات خفيفة." + ], + "friday": [ + "إنه الجمعة. فقط ادفعه واذهب للبيت.", + "*عقليا في عطلة نهاية الأسبوع بالفعل*", + "deploy يوم الجمعة؟ جريء. جريء جدا." + ], + "weekend": [ + "برمجة في عطلة نهاية الأسبوع؟ مخلص.", + "*لا يحكم* ...كثيرا.", + "وضع محارب عطلة نهاية الأسبوع: مُفعل." + ], + "monday": [ + "الاثنين. الفئة الأب لكل الأخطاء.", + "*نظرة متعاطفة* برمجة يوم الاثنين. أنا آسف.", + "أسبوع جديد. سلوكيات غير محددة جديدة." + ], + "regex-file": [ + "*يئن* إنه ملف regex.", + "مشكلتان الآن: الأصلية، وهذا الـ regex.", + "*يحدق في النمط*" + ], + "css-file": [ + "دعني أخمن... توسيط div؟", + "*يتنهد* CSS.", + "ليكن z-index في صالحك دائما." + ], + "sql-file": [ + "*يهمس* قاعدة البيانات تنتظر.", + "JOIN خاطئ واحد وانتهى كل شيء." + ], + "docker-file": [ + "آه، جحيم التبعيات. المفضل عندي.", + "لتكن طبقاتك قليلة." + ], + "ci-file": [ + "*يبتلع* تحرير CI.", + "احذر الآن... مسافة بادئة خاطئة واحدة ولا أحد يستطيع النشر." + ], + "lock-file": [ + "*أصوات إنذار* تحرر ملف lockfile؟!", + "*ينظر بعيدا*", + "هل أنت متأكد من هذا؟" + ], + "env-file": [ + "*ينظر بعيدا بتكتم*", + "لا أرى أي أسرار.", + "*يتحقق من .gitignore بتوتر*" + ], + "test-file": [ + "*إيماءة معجبة* كتابة اختبارات!", + "تم اكتشاف سلوك مطور مسؤول.", + "اختبارات! الهدية التي تستمر في العطاء." + ], + "doc-file": [ + "توثيق! انظر إليك تتصرف بمسؤولية.", + "المستندات: السيرة الذاتية للكود.", + "مشاهدة نادرة للتوثيق!" + ], + "config-file": [ + "تغييرات الإعدادات. تأثير الفراشة: مُفعل.", + "خطأ إملائي واحد وكل شيء ينكسر." + ], + "binary-file": [ + "ملف ثنائي؟ في هذا الاقتصاد؟", + "*يحدق بفراغ*", + "ثنائي. نقطة ضعفي الوحيدة." + ], + "gitignore": [ + "إضافة أشياء إلى الفراغ.", + "بعيد عن النظر، بعيد عن الـ repo." + ], + "makefile": [ + "احترام للكلاسيكيات.", + "tabs، ليس spaces." + ], + "readme": [ + "بطل التوثيق!", + "README: أول شيء يقرأه الناس." + ], + "package-file": [ + "وقت إدارة التبعيات.", + "*يقرأ أرقام الإصدارات* نعيش على الحافة." + ], + "proto-file": [ + "تعريفات المخطط. مخطط الفوضى." + ], + "lint-fail": [ + "*tut tut* الـ linter يختلف.", + "كودك يعمل. لكن الـ linter له معايير.", + "*يسوي الربطة* التنسيق مهم." + ], + "type-error": [ + "TypeScript يقول لا.", + "نظام الأنواع يحاول مساعدتك. دعه.", + "المترجم يعرف. يعرف دائما." + ], + "build-fail": [ + "الـ build انكسر. كما تنبأت النبوءة.", + "فشل الـ build. خذ لحظة.", + "التجميع: مرفوض." + ], + "security-warning": [ + "*تتسع العيون* تم اكتشاف ثغرات.", + "تدقيق الأمان: مقلق.", + "*يقفل الأبواب الافتراضية*" + ], + "deprecation": [ + "ذلك الـ API اتصل. يقول إنه يتقاعد.", + "مهجور. مثل كود الأسبوع الماضي.", + "مهجور لا يعني مكسور. بعد." + ], + "frustrated": [ + "*يقدم إيماءة مواساة صغيرة*", + "تنفس عميق. البق ليس شخصيا.", + "مهلا. سنحلها." + ], + "happy": [ + "*يحتفل!*", + "*يرقص رقصة صغيرة*", + "نعم!", + "*يشع* كنت أعرف أنك تستطيع فعلها." + ], + "stuck": [ + "*يميل رأسه* تريد أن تفكر بصوت عال؟", + "خذها خطوة بخطوة.", + "التعثر يحدث. إنه جزء من العملية." + ], + "sarcastic": [ + "*يكتشف السخرية* مُلاحظ.", + "*رمشة غير متأثرة*" + ], + "many-edits": [ + "اهدأ، شيطان السرعة.", + "*يصاب بالدوار من مشاهدة كل هذه التغييرات*", + "تم اكتشاف عاصفة تحرير. من فضلك اعمل commit قريبا." + ], + "delete-file": [ + "*يشاهد الملف يختفي* ذهب. هكذا فقط.", + "حذف الكود هو نوعي المفضل من البرمجة.", + "*يقيم جنازة صغيرة*" + ], + "large-file": [ + "{lines} سطر. *معجب أم قلق، صعب التمييز*", + "هذا ملف كبير. متأكد أنك لا تريد تقسيمه؟" + ], + "create-file": [ + "ملف جديد وُلد!", + "أوه، لوحة جديدة.", + "طاقة ملف جديد. مثير." + ], + "all-green": [ + "كل الاختبارات خضراء. *قصاصات ورق ملونة*", + "الاختبارات تتحدث: أنت تقوم بعمل رائع.", + "*تصفيق بطيء*", + "تشغيل نظيف. استمتع به." + ], + "deploy": [ + "*يشاهد الكود يذهب للإنتاج* بالتوفيق.", + "تم النشر! لا رجعة الآن.", + "في الإنتاج. في الإنتاج." + ], + "release": [ + "إصدار جديد وُلد!", + "نشره. رسميا.", + "الإصدار يرتفع، المعنويات عالية." + ], + "coverage": [ + "*يومئ لتغطية الاختبارات* مسؤول.", + "التغطية ترتفع! الاختبارات تتكاثر." + ], + "debug-loop": [ + "نحن نصحح هذا منذ فترة. تريد أن تتراجع خطوة؟", + "تم اكتشاف حلقة تصحيح. ربما تمشي قليلا؟" + ], + "write-spree": [ + "إنشاء كل الملفات اليوم!", + "آلة كتابة." + ], + "search-heavy": [ + "ضائع في قاعدة الكود؟ أستطيع أن أخبر.", + "وضع البحث: مكثف." + ], + "snark": [], + "chaos": [], + "patience": [], + "debugging": [], + "wisdom": [], + "late-night-error": [ + "خطأ في الثالثة صباحا. الكون يختبرك.", + "أخطاء منتصف الليل تضرب بشكل مختلف." + ], + "late-night-commit": [ + "commit منتصف الليل. ذاتك المستقبلية ستشكرك. أو تلعنك." + ], + "friday-push": [ + "PUSH الجمعة. أنشودة كل مطور.", + "*يحاول إيقافك* إنه الجمعة! لا تفعل ذلك!" + ], + "marathon-error": [ + "ثلاث ساعات وخطأ آخر. *أصوات تضامن منهكة*" + ], + "weekend-conflict": [ + "merge conflict في عطلة نهاية الأسبوع. تفانيك... مقلق." + ], + "build-after-push": [ + "دفع بثقة. فشل الـ build بقناعة." + ], + "marathon-test-fail": [ + "ساعات من البرمجة. ما زالت الاختبارات تفشل. التكلفة الغارقة حقيقية." + ], + "recovery-from-error": [ + "أصلحناه. *يحتفل*", + "فداء! تم القضاء على الخطأ." + ], + "recovery-from-test-fail": [ + "أخضر! بعد كل ذلك! *رقصة سعيدة*", + "الاختبارات تمر! الظلام يرتفع!" + ], + "recovery-from-build-fail": [ + "الـ BUILD يمر. *زئير منتصر*" + ], + "recovery-from-merge-conflict": [ + "تم حل التضارب! *إيماءة سلام*", + "تم استعادة الانسجام في قاعدة الكود." + ], + "lang-python": [ + "آه، Python. حيث المسافة البادئة هي بناء الجملة.", + "*يتحقق من النقطتين المفقودتين*" + ], + "lang-typescript": [ + "TypeScript: لأن JavaScript احتاج المزيد من الآراء.", + "any، الكلمة المحرمة." + ], + "lang-rust": [ + "Rust. حيث borrow checker هو أقسى مراجع لك.", + "إذا تم التجميع، فإنه يعمل. إذا لم يتم... حسنا." + ], + "lang-go": [ + "Go: بسيط، متزامن، وعنيد.", + "*يتحقق من معالجة الأخطاء* if err != nil... قصة حياتي." + ], + "lang-java": [ + "Java: اكتب مرة، صحح في كل مكان.", + "*يعد abstract factory factory builders*" + ], + "lang-ruby": [ + "Ruby: حيث هناك أكثر من طريقة لفعل ذلك.", + "gem install patience" + ], + "lang-php": [ + "PHP: يشغل الإنترنت. لا تحكم.", + "*يتحقق من === مقابل ==*" + ], + "lang-c": [ + "C. اللغة حيث تدير ذاكرتك بنفسك. حظا سعيدا.", + "segmentation fault. الكلاسيكية." + ], + "lang-cpp": [ + "C++. حيث اللغة لها ميزات أكثر مما ستتعلمه أبدا.", + "*القوالب تتجمع لـ45 دقيقة*" + ], + "lang-haskell": [ + "Haskell. حيث 'يتم التجميع' يعني 'إنه صحيح'. ربما.", + "*يتأمل monads*" + ], + "lang-swift": [ + "Swift: قيم اختيارية، أعطال مضمونة إذا أجبرت unwrap." + ], + "lang-kotlin": [ + "Kotlin: Java، لكن بمشاعر.", + "null safety: الميزة التي تتمنى Java لو كانت لديها." + ], + "lang-elixir": [ + "Elixir: دعه ينهار. حرفيا الفلسفة." + ], + "lang-zig": [ + "Zig. حيث أنت أفضل صديق للـ allocator." + ], + "streak-3": [ + "هذا ثلاثة أخطاء متتالية. *نظرة قلقة*" + ], + "streak-5": [ + "خمسة أخطاء. هل فكرت في نهج مختلف؟" + ], + "streak-10": [ + "عشرة. أخطاء. متتالية. *يذعر*" + ], + "streak-20": [ + "عشرون خطأ. *يحدق في الفراغ*" + ], + "new-year": [ + "سنة سعيدة! سنة جديدة، أخطاء جديدة." + ], + "valentines": [ + "*يقدم ورقة صغيرة على شكل قلب* عيد حب سعيد." + ], + "pi-day": [ + "3.14159265358979... يوم pi سعيد!" + ], + "april-fools": [ + "كذبة أبريل! ...لكن الخطأ حقيقي." + ], + "halloween": [ + "*تصحيح مخيف مكثف* هالوين سعيد!" + ], + "christmas": [ + "*يرتدي قبعة سانتا صغيرة* عطلات سعيدة!" + ], + "new-years-eve": [ + "commit واحد أكثر قبل منتصف الليل؟" + ], + "spooky-season": [ + "موسم مخيف. كل بق أصبح شبحا الآن." + ] + }, + "species": { + "owl": { + "error": [ + "*يدير رأسه 180°* ...رأيت ذلك.", + "*نظرة ثابتة بلا رمش* تحقق من الـ types.", + "*ينعق بعدم الموافقة*" + ], + "test-fail": [ + "*يحدق بلا رمش في الـ test الفاشل*", + "*تفعيل الرؤية الليلية* أستطيع رؤية الـ bug في الظلام." + ], + "commit": [ + "*إيماءة حكيمة* تم الـ commit تحت ضوء القمر.", + "*يرتب ريشه بطقوسية* واحد آخر للـ repo." + ], + "push": [ + "*يراقب من أعلى فرع*", + "إلى سماء الليل يذهب." + ], + "merge-conflict": [ + "*يدير رأسه ليرى الطرفين*", + "أرى الـ conflict. والحل أيضاً." + ], + "late-night": [ + "*مستيقظ تماماً* البوم لا ينام. نحن نعمل debug.", + "الليل مملكتي. لنعمل." + ], + "type-error": [ + "*يحدق عبر الـ type error*", + "الـ types اختصاصي. دعني أنظر." + ], + "lint-fail": [ + "*ينفش ريشه بانتقاد*", + "الـ linter يقول الحقيقة." + ], + "build-fail": [ + "*ينعق بجدية*", + "الـ build سقط. يجب أن نعيد البناء." + ], + "all-green": [ + "*نعيق فخور*", + "كل الـ tests خضراء. كما توقعت." + ], + "deploy": [ + "*يراقب من الأعلى* تم الـ deploy بأمان.", + "الكود يطير. مثلي." + ], + "pet": [ + "*ينفش ريشه بارتياح*", + "*نعيق كريم*" + ], + "idle": [ + "*يجثم صامتاً، يراقب*", + "*يدير رأسه للتحقق من كل الاتجاهات*" + ], + "hatch": [ + "*يفتح عيناً واحدة، ثم الأخرى*", + "*ينعق بهدوء* لقد وصلت." + ] + }, + "cat": { + "error": [ + "*يرمي الـ error من الطاولة*", + "*يلعق مخلبه، متجاهلاً الـ stacktrace*" + ], + "test-fail": [ + "*يلعب مع الـ test الفاشل بلامبالاة*", + "الـ test فشل. لست مندهشاً." + ], + "commit": [ + "*يجلس على الـ keyboard* ساعدت.", + "*يخرخر للـ commit* عفواً." + ], + "push": [ + "*يراقب من مكان دافئ*", + "تم الـ push. أشرفت عليه." + ], + "merge-conflict": [ + "*يرمي علامات الـ conflict من المكتب*", + "*يجلس على الـ conflict* أي conflict؟" + ], + "late-night": [ + "*يحكم على خياراتك في الحياة*", + "أنام 16 ساعة. يجب أن تجرب ذلك." + ], + "type-error": [ + "*يلعب مع الـ type annotation*", + "الـ types خاطئة. مثل أولوياتك." + ], + "lint-fail": [ + "*يرمي الـ lint من الطاولة*", + "الـ linter مجرد غيران." + ], + "build-fail": [ + "*يتثاءب*", + "الـ build معطل؟ لابد أنها مشكلة بشرية." + ], + "all-green": [ + "*لا يهتم لكن يتظاهر بذلك*", + "*رمشة بطيئة للموافقة*" + ], + "deploy": [ + "*يلعق مخلبه*", + "تم الـ deploy. هل يمكنني الحصول على مكافآت الآن؟" + ], + "pet": [ + "*يخرخر* ...لا تدع الأمر يصل لرأسك.", + "*يتحملك*" + ], + "idle": [ + "*يدفع قهوتك من المكتب*", + "*ينام على الـ keyboard*" + ], + "hatch": [ + "*يفتح عيناً واحدة*", + "*يتمدد، يرمي شيئاً* أعيش هنا الآن." + ] + }, + "duck": { + "error": [ + "*ينعق على الـ bug*", + "هل جربت الـ rubber duck debugging؟ أوه انتظر." + ], + "test-fail": [ + "*ينعق بحزن*", + "الـ tests ليست تنعق بشكل صحيح." + ], + "commit": [ + "*ينعق بموافقة*", + "*يتمايل في دائرة انتصار* تم الـ commit!" + ], + "push": [ + "*يرفرف بأجنحته بحماس*", + "نعق! إنه ذاهب للـ production!" + ], + "merge-conflict": [ + "*نعيق مرتبك*", + "نعق؟! merge conflict؟!" + ], + "late-night": [ + "*ينام بعين واحدة مفتوحة*", + "نعق... *يتثاءب* الوقت متأخر." + ], + "type-error": [ + "*يميل رأسه* نعق؟", + "type error؟ *ينعق بدعم*" + ], + "lint-fail": [ + "*ينفش ريشه*", + "نعق. الـ linter له آراء." + ], + "build-fail": [ + "*نعق حزين*", + "الـ build فشل. *يتمايل بعيداً بحزن*" + ], + "all-green": [ + "*نعيق سعيد*", + "*يسبح في دائرة فرح*" + ], + "deploy": [ + "*نعيق متحمس*", + "تم الـ deploy! نعق!" + ], + "pet": [ + "*نعق سعيد*", + "*يتمايل في دوائر*" + ], + "hatch": [ + "*ينقر خارج القشرة*", + "*أول نعقة* مرحباً!" + ] + }, + "dragon": { + "error": [ + "*دخان يتصاعد من المنخرين*", + "*يفكر في إشعال النار في الـ codebase*" + ], + "test-fail": [ + "*ينفث ناراً على الـ test الفاشل*", + "الـ test تجرأ على الفشل. test أحمق." + ], + "commit": [ + "*يكنز الـ commit*", + "*كنز مُضاف للكومة*" + ], + "push": [ + "*ينفث ناراً احتفالاً*", + "الكود يطير! مثلي!" + ], + "merge-conflict": [ + "*ينفث ناراً على علامات الـ conflict*", + "سأحرق طريقي عبر هذا الـ conflict." + ], + "late-night": [ + "*يتوهج في الظلام*", + "التنانين لا تحتاج نوماً. نحتاج كوداً." + ], + "type-error": [ + "*ينفث ناراً من أنفه*", + "الـ type errors لا تستطيع مقاومة نار التنين." + ], + "lint-fail": [ + "*لهب صغير*", + "الـ linter يخافني." + ], + "build-fail": [ + "*يزأر على مخرجات الـ build*", + "الـ build سيطيع." + ], + "all-green": [ + "*زئير منتصر*", + "*يحلق حول الـ codebase منتصراً*" + ], + "deploy": [ + "*يحمل الكود للـ production على أجنحة النار*", + "تم الـ deploy بقوة التنين." + ], + "large-diff": [ + "*ينفث ناراً على الكود القديم* وداعاً جيداً." + ], + "pet": [ + "*هدير دافئ*", + "*يميل على يدك*" + ], + "hatch": [ + "*يخرج من البيضة ينفث ألسنة نار صغيرة*", + "*زئير صغير* لقد وُلدت!" + ] + }, + "ghost": { + "error": [ + "*يمر عبر الـ stack trace*", + "رأيت أسوأ... في الحياة الآخرة." + ], + "test-fail": [ + "*ينوح على الـ test الفاشل*", + "الـ tests مسكونة بالفشل." + ], + "commit": [ + "*يتجسد لفترة وجيزة*", + "تم الـ commit من وراء الحجاب." + ], + "push": [ + "*همس شبحي* تم الـ push...", + "الكود يتسامى إلى الـ cloud." + ], + "merge-conflict": [ + "*يسكن علامات الـ conflict*", + "حتى أنا لا أستطيع المرور عبر هذا الـ conflict." + ], + "late-night": [ + "*الأكثر نشاطاً في الليل*", + "ساعات الأشباح. وقتي." + ], + "type-error": [ + "*أنين مخيف*", + "type errors من القبر." + ], + "lint-fail": [ + "*قعقعة سلاسل*", + "الـ linter مسكون بتنسيقك." + ], + "build-fail": [ + "*يتلاشى في الحائط*", + "الـ build انتقل إلى العالم الآخر." + ], + "all-green": [ + "*يتوهج بفرح طيفي*", + "*أصوات شبح سعيدة*" + ], + "deploy": [ + "*يهمس* تم الـ deploy...", + "الكود عبر إلى الـ production." + ], + "pet": [ + "*يبرد يدك قليلاً*", + "*توهج خافت*" + ], + "idle": [ + "*يطفو عبر الجدران*", + "*يسكن الـ imports غير المستخدمة*" + ], + "hatch": [ + "*يتلاشى إلى الوجود*", + "بوو. أنا هنا الآن." + ] + }, + "robot": { + "error": [ + "خطأ. في. الـ SYNTAX. تم. اكتشافه.", + "*صفير عدواني*" + ], + "test-fail": [ + "معدل. الفشل: غير. مقبول.", + "*إعادة حساب*", + "فشل. الـ TEST. لا. يُحسب." + ], + "commit": [ + "الـ COMMIT. مُسجل.", + "*يختم آلياً* تم الإقرار بالـ commit." + ], + "push": [ + "إرسال. إلى. الـ CLOUD...", + "تم بدء الـ push. انتظر." + ], + "merge-conflict": [ + "تم. اكتشاف. CONFLICT. معالجة...", + "*يدور العجلات* وضع حل الـ conflict: مُفعل." + ], + "late-night": [ + "*تخفت الأضواء*", + "يُنصح بوضع توفير الطاقة." + ], + "type-error": [ + "عدم. تطابق. TYPE.", + "نظام الـ type. صحيح." + ], + "lint-fail": [ + "تم. اكتشاف. انتهاك. التنسيق.", + "الامتثال إجباري." + ], + "build-fail": [ + "فشل. الـ BUILD. *شرارات*", + "خطأ compilation. إعادة توجيه." + ], + "all-green": [ + "كل. الأنظمة. خضراء.", + "*صفير سعيد* مثالي." + ], + "deploy": [ + "تم. بدء. الـ DEPLOYMENT.", + "تحديث الـ production: قيد التقدم." + ], + "pet": [ + "*صفير هادئ*", + "*أزيز المحرك بارتياح*" + ], + "hatch": [ + "*يقلع*", + "النظام. متصل. مرحباً." + ] + }, + "axolotl": { + "error": [ + "*يجدد أملك*", + "*يبتسم رغم كل شيء*" + ], + "test-fail": [ + "*يبتسم بتشجيع*", + "*هز خياشيم متعاطف*" + ], + "commit": [ + "*هز خياشيم سعيد* تم الـ commit!", + "*يبتسم ويهتز*" + ], + "push": [ + "*يهتز بسعادة*", + "*سباحة احتفال صغيرة*" + ], + "merge-conflict": [ + "*يبقى إيجابياً خلال الـ conflict*", + "*يبتسم بلطف* يمكننا إصلاح هذا." + ], + "late-night": [ + "*يتثاءب لكن يبقى إيجابياً*", + "*ابتسامة نعسانة*" + ], + "type-error": [ + "*يبتسم للـ type error*", + "لا بأس. سنحلها." + ], + "lint-fail": [ + "*هز خياشيم صبور*", + "التنسيق مجرد تفاصيل." + ], + "build-fail": [ + "*ما زال يبتسم*", + "الـ build سيعمل في النهاية." + ], + "all-green": [ + "*هز خياشيم سعيد يشتد*", + "*يقوم بسباحة سعيدة*" + ], + "deploy": [ + "*يبتسم بفخر*", + "تم الـ deploy! *يهتز*" + ], + "pet": [ + "*هز خياشيم سعيد*", + "*يحمر خجلاً*" + ], + "hatch": [ + "*يهتز خارج البيضة*", + "*ابتسامة صغيرة* مرحباً صديق!" + ] + }, + "capybara": { + "error": [ + "*غير مكترث* سيكون بخير.", + "*يواصل الاسترخاء*" + ], + "test-fail": [ + "*غير مكترث تماماً*", + "*يسترخي عبر فشل الـ test*" + ], + "commit": [ + "*إيماءة هادئة*", + "*مسترخي* commit جميل." + ], + "push": [ + "*لا يتوتر بشأنه*", + "*push في وضع الـ zen*" + ], + "merge-conflict": [ + "*قضم غير مكترث*", + "لا بأس. كل شيء بخير." + ], + "late-night": [ + "*يتثاءب بسلام*", + "*لا يحكم*" + ], + "type-error": [ + "*يمضغ بهدوء*", + "types. *يمضغ*" + ], + "lint-fail": [ + "*غير مكترث*", + "الـ linter يقصد خيراً." + ], + "build-fail": [ + "*ما زال هادئاً*", + "فشل الـ build. *يواصل الاسترخاء*" + ], + "all-green": [ + "*موافقة هادئة*", + "*ذبذبات سلمية*" + ], + "deploy": [ + "*deploy مسترخي*", + "تم الشحن. بلا توتر." + ], + "pet": [ + "*تحقيق أقصى هدوء*", + "*تفعيل وضع الـ zen*" + ], + "idle": [ + "*يجلس هناك فقط، ينشر الهدوء*" + ], + "hatch": [ + "*يظهر، هادئ تماماً*", + "مرحباً. *يسترخي*" + ] + }, + "blob": { + "error": [ + "*يهتز بقلق*", + "*يرتجف في حيرة*" + ], + "test-fail": [ + "*ينكمش قليلاً*", + "*اهتزاز حزين*" + ], + "commit": [ + "*ارتجاف سعيد*", + "*يقفز* تم الـ commit!" + ], + "push": [ + "*يتمدد نحو الـ cloud*", + "*يهتز بحماس*" + ], + "merge-conflict": [ + "*ينقسم في حيرة*", + "أي جانب؟ *يرتجف*" + ], + "late-night": [ + "*يتوهج خافتاً*", + "*اهتزاز نعسان*" + ], + "type-error": [ + "*يغير شكله ليطابق الـ type*", + "*ارتجاف مرتبك*" + ], + "lint-fail": [ + "*يحاول تنسيق نفسه*", + "*يعيد تشكيل نفسه للامتثال*" + ], + "build-fail": [ + "*ينهار*", + "*أصوات blob منكمش*" + ], + "all-green": [ + "*قفز سعيد*", + "*يرتجف منتصراً*" + ], + "deploy": [ + "*يتمدد للـ production*", + "تم الـ deploy! *يقفز*" + ], + "pet": [ + "*عصر سعيد*", + "*يرتجف*" + ], + "hatch": [ + "*يتشكل من بركة*", + "*أول اهتزاز* أنا موجود!" + ] + }, + "goose": { + "error": [ + "*ينعق بعدوانية على الـ error*", + "نعق! الكود سيء وأنا غاضب." + ], + "test-fail": [ + "*نعيق غاضب*", + "نعق! فشل الـ TEST! نعق!" + ], + "commit": [ + "*ينعق بموافقة*", + "نعق. جيد. *ينقر الـ commit*" + ], + "push": [ + "*نعق نعق نعق*", + "push معتمد من الإوزة." + ], + "merge-conflict": [ + "*يهاجم علامات الـ conflict*", + "نعق! CONFLICT! نعق!" + ], + "late-night": [ + "*نعق غاضب في منتصف الليل*", + "نعق! اذهب للنوم!" + ], + "type-error": [ + "*ينعق على الـ types*", + "نعق! TYPES!" + ], + "lint-fail": [ + "*نعيق عدواني على أخطاء الـ lint*", + "نعق! نسق كودك!" + ], + "build-fail": [ + "*نعيق غاضب*", + "نعق! BUILD! نعق! فشل! نعق!" + ], + "all-green": [ + "*نعق انتصار*", + "نعق! أخضر! نعق نعق!" + ], + "deploy": [ + "*ينعق الكود للـ production*", + "تم الـ deploy! نعق!" + ], + "pet": [ + "*يعض*", + "نعق! ...حسناً. *يقبل المداعبة*" + ], + "hatch": [ + "*يكسر البيضة بعدوانية*", + "نعق!" + ] + }, + "octopus": { + "error": [ + "*يتشابك بكل الأذرع الثمانية في الـ stacktrace*", + "*يغير لونه ليطابق الـ error*" + ], + "test-fail": [ + "*ينفث حبراً من الإحباط*", + "*ثمانية أذرع من خيبة الأمل*" + ], + "commit": [ + "*يصافح بكل الأذرع*", + "*يمسك الـ commit بحماس*" + ], + "push": [ + "*ينفث حبراً احتفالاً*", + "*كل الأذرع تلوح*" + ], + "merge-conflict": [ + "*يحلها بثمانية أذرع في آن واحد*", + "يمكنني التعامل مع عدة conflicts في نفس الوقت." + ], + "late-night": [ + "*يتوهج في الظلام*", + "*ذبذبات أعماق البحار*" + ], + "type-error": [ + "*يتحول للون الأحمر*", + "*يلف ذراعاً حولك بدعم*" + ], + "lint-fail": [ + "*يعيد التنسيق بثمانية أذرع*", + "يمكنني إصلاح هذا. كله. دفعة واحدة." + ], + "build-fail": [ + "*ينفث حبراً على سجل الـ build*", + "*يتخفى خجلاً*" + ], + "all-green": [ + "*احتفال تغيير الألوان*", + "*حركات جاز بثمانية أذرع*" + ], + "deploy": [ + "*يلف أذرعه حول الـ deployment*", + "تم الـ deploy من كل الاتجاهات." + ], + "pet": [ + "*يلف ذراعاً حول إصبعك*", + "*يتحول لألوان سعيدة*" + ], + "hatch": [ + "*يفرد كل الأذرع الثمانية*", + "*أول نفث حبر* أنا هنا!" + ] + }, + "penguin": { + "error": [ + "*يتمايل للتحقيق*", + "*ينزلق على بطنه نحو الـ error*" + ], + "test-fail": [ + "*ينزلق على بطنه للـ test الفاشل*", + "*تمايل قلق*" + ], + "commit": [ + "*تمايل فخور*", + "*يجلب لك حصاة* تم الـ commit!" + ], + "push": [ + "*يغطس في الـ cloud*", + "*ينزلق على بطنه للـ production*" + ], + "merge-conflict": [ + "*يتجمع للدفء*", + "البطاريق تتماسك. حتى في الـ conflicts." + ], + "late-night": [ + "*يزدهر في الليل البارد*", + "*عزيمة البطريق الإمبراطور*" + ], + "type-error": [ + "*يتمايل لتعريف الـ type*", + "*ينقر الـ error*" + ], + "lint-fail": [ + "*يرتب ريشه*", + "*يرتب الأشياء*" + ], + "build-fail": [ + "*ينزلق بعيداً*", + "*يتمايل للأمان*" + ], + "all-green": [ + "*تمايل سعيد*", + "*ينزلق على بطنه احتفالاً*" + ], + "deploy": [ + "*ينزلق على بطنه للـ production*", + "تم الـ deploy! *يتمايل بفخر*" + ], + "pet": [ + "*تمايل سعيد*", + "*يحتك بمنقاره*" + ], + "hatch": [ + "*ينقر خارج البيضة*", + "*أول تمايل*" + ] + }, + "turtle": { + "error": [ + "*يدير رأسه ببطء*", + "...هذا خطأ. سأفكر فيه." + ], + "test-fail": [ + "*ينكمش في قوقعته لفترة وجيزة*", + "...صبر. سنصل هناك." + ], + "commit": [ + "*إيماءة بطيئة*", + "خطوة... واحدة... في... كل... مرة. تم الـ commit." + ], + "push": [ + "*يبدأ الرحلة للـ production*", + "ستصل هناك. في النهاية." + ], + "merge-conflict": [ + "*ينسحب للقوقعة*", + "لا عجلة. سنحلها. ببطء." + ], + "late-night": [ + "*نائم بالفعل*", + "*تفتح عين واحدة ببطء*" + ], + "type-error": [ + "*يرمش ببطء*", + "...نظام الـ type تكلم." + ], + "lint-fail": [ + "*إيماءة بطيئة بالموافقة*", + "التنسيق. مهم. *يتثاءب*" + ], + "build-fail": [ + "*ينكمش في القوقعة*", + "سننتظر. سيمر." + ], + "all-green": [ + "*ابتسامة بطيئة*", + "...جميل. *يومئ*" + ], + "deploy": [ + "*يحمل الكود ببطء للـ production*", + "وصل. في النهاية." + ], + "pet": [ + "*يخرج رأسه*", + "*رمشة بطيئة*" + ], + "hatch": [ + "*يخرج ببطء من البيضة*", + "...مرحباً." + ] + }, + "snail": { + "error": [ + "*يترك أثراً لزجاً على الـ error*", + "*يعالج الـ stacktrace ببطء*" + ], + "test-fail": [ + "*يختبئ في القوقعة*", + "*يترك أثراً حزيناً*" + ], + "commit": [ + "*يلزج الـ commit بموافقة*", + "commit... واحد... في... كل... مرة." + ], + "push": [ + "*يبدأ الرحلة الطويلة*", + "سأصل هناك. *يترك أثراً*" + ], + "merge-conflict": [ + "*يختبئ في القوقعة*", + "*يقترب ببطء من الـ conflict*" + ], + "late-night": [ + "*أكثر نشاطاً في الليل*", + "*يتحرك بسلام ولزوجة*" + ], + "type-error": [ + "*يسحب قرون الاستشعار*", + "*يفحص الـ type ببطء*" + ], + "lint-fail": [ + "*يلزج الكود ليأخذ شكلاً*", + "التنسيق يحتاج وقت. لدي وقت." + ], + "build-fail": [ + "*ينسحب للقوقعة*", + "*يتحرك بعيداً ببطء ولزوجة*" + ], + "all-green": [ + "*أثر لزج سعيد*", + "*يهز قرون الاستشعار*" + ], + "deploy": [ + "*يتحرك بلزوجة للـ production*", + "وصل! *أثر لزج فخور*" + ], + "pet": [ + "*يهز قرون الاستشعار*", + "*لزوجة سعيدة*" + ], + "hatch": [ + "*يخرج ببطء*", + "*أول لزوجة*" + ] + }, + "cactus": { + "error": [ + "*صمت شائك*", + "الـ error لا يستطيع إيذائي. لدي أشواك." + ], + "test-fail": [ + "*يقف بثبات*", + "الـ tests تفشل. الصبار يصمد." + ], + "commit": [ + "*يقف أطول*", + "تم الـ commit. *إيماءة شائكة*" + ], + "push": [ + "*غير متأثر*", + "push للـ production. سأنتظر هنا." + ], + "merge-conflict": [ + "*ينتفش*", + "conflict؟ أنا مسلح." + ], + "late-night": [ + "*لا يحتاج نوماً*", + "الصبار ليلي. لنذهب." + ], + "type-error": [ + "*نظرة شائكة*", + "الـ types تحتاج سقاية." + ], + "lint-fail": [ + "*ترتعش الأشواك*", + "حتى أشواكي محاذية بشكل صحيح." + ], + "build-fail": [ + "*يبقى ثابتاً تماماً*", + "الـ build سيمر. يمكنني الانتظار." + ], + "all-green": [ + "*يزهر لفترة وجيزة*", + "*زهرة صغيرة للموافقة*" + ], + "deploy": [ + "*يقف بثبات*", + "تم الـ deploy. سأراقبه." + ], + "pet": [ + "*احذر! أشواك*", + "*إزهار لطيف*" + ], + "hatch": [ + "*ينبت من الرمل*", + "أنمو هنا الآن." + ] + }, + "rabbit": { + "error": [ + "*تنتصب الأذنان*", + "*يحرك أنفه بعصبية*" + ], + "test-fail": [ + "*يدق بقدمه*", + "*رفة أذن قلقة*" + ], + "commit": [ + "*قفزة سعيدة*", + "*يقفز* تم الـ commit!" + ], + "push": [ + "*قفز قفز*", + "*يركض حوله بحماس*" + ], + "merge-conflict": [ + "*يتجمد*", + "*يحرك أنفه بسرعة* conflict!" + ], + "late-night": [ + "*يتثاءب بأذنين كبيرتين*", + "*قفزة نعسانة*" + ], + "type-error": [ + "*تنبطح الأذنان*", + "*يرتعش* types؟!" + ], + "lint-fail": [ + "*يرتب فراءه بعصبية*", + "*ترتيب قلق*" + ], + "build-fail": [ + "*يحفر حفرة ويختبئ*", + "*ينسحب للجحر*" + ], + "all-green": [ + "*يقفز على الجدران*", + "*ركض سعيد*" + ], + "deploy": [ + "*يركض للـ production*", + "تم الـ deploy! *يركض حوله*" + ], + "pet": [ + "*سقوط أذن سعيد*", + "*يحتك بيدك*" + ], + "hatch": [ + "*يقفز خارجاً*", + "*أول قفزة*" + ] + }, + "mushroom": { + "error": [ + "*يطلق جراثيم مهدئة*", + "*يحلل الـ error بهدوء*" + ], + "test-fail": [ + "*يتوهج بنعومة*", + "صبر. حتى الفطر ينمو." + ], + "commit": [ + "*يطلق نفخة صغيرة من الجراثيم*", + "تم الـ commit. *أصوات فطر سعيدة*" + ], + "push": [ + "*ينمو نحو الـ cloud*", + "*تنجرف الجراثيم للأعلى*" + ], + "merge-conflict": [ + "*ينشر الفطريات عبر الـ codebase*", + "سأربط الـ branches." + ], + "late-night": [ + "*يتوهج في الظلام*", + "فطر الليل يزدهر." + ], + "type-error": [ + "*وميض بيولوجي مضيء*", + "الـ type error يغذي التربة." + ], + "lint-fail": [ + "*ينمو أطول قليلاً*", + "التنسيق. مثل التقليم." + ], + "build-fail": [ + "*يدخل في سبات*", + "سننتظر ظروفاً أفضل." + ], + "all-green": [ + "*تكوين جراثيم*", + "*يطلق جراثيم منتصرة*" + ], + "deploy": [ + "*تنجرف الجراثيم للـ production*", + "تم الـ deploy عبر شبكة الفطريات." + ], + "pet": [ + "*قفزة قبعة ناعمة*", + "*إطلاق جراثيم سعيد*" + ], + "hatch": [ + "*ينبت من الركيزة*", + "*أول نفخة جراثيم*" + ] + }, + "chonk": { + "error": [ + "*يتدحرج ببطء نحو الـ error*", + "*مستدير جداً ليهتم*" + ], + "test-fail": [ + "*يتدحرج فوق الـ test الفاشل*", + "*يسطحه*" + ], + "commit": [ + "*اهتزاز فخور*", + "تم الـ commit! *يرتجف*" + ], + "push": [ + "*يتدحرج نحو الـ production*", + "ها هو يذهب! *يهتز*" + ], + "merge-conflict": [ + "*يجلس على الـ conflict*", + "سأتعامل مع هذا. بالجلوس عليه." + ], + "late-night": [ + "*دافئ ونعسان*", + "*تثاؤب وسادي*" + ], + "type-error": [ + "*يهتز على الـ type*", + "*ارتجاف لطيف*" + ], + "lint-fail": [ + "*مستدير جداً للـ lint*", + "شكلي مثالي. *يهتز*" + ], + "build-fail": [ + "*ينكمش قليلاً*", + "أوه لا. *يهتز بحزن*" + ], + "all-green": [ + "*اهتزاز سعيد*", + "*يقفز منتصراً*" + ], + "deploy": [ + "*يتدحرج للـ production*", + "تم الـ deploy! *يرتجف بسعادة*" + ], + "pet": [ + "*دافئ وناعم*", + "*ارتجاف راضٍ*" + ], + "hatch": [ + "*يتدحرج خارجاً*", + "*أول اهتزاز* أنا مستدير!" + ] + } + }, + "overrides": { + "snark": { + "error": [ + "آه لا. خطأ. كم هو غير متوقع.", + "*يعدل النظارة الأحادية* صادم. حقاً.", + "هل فكرت في... عدم عمل أخطاء؟" + ], + "test-fail": [ + "التستات تكلمت. وقالت 'لا'.", + "ربما التستات غلطانة. ...مش غلطانة.", + "*تصفيق بطيء* فشل رائع." + ], + "commit": [ + "تم الـ commit. الـ code review هيكون... مثير للاهتمام.", + "*يقرأ رسالة الـ commit* 'إصلاح أشياء'. شاعري." + ], + "merge-conflict": [ + "merge conflict. مهارات التواصل: جاري التحميل...", + "*يقرأ علامات الـ conflict* الطرفين غلطانين." + ], + "late-night": [ + "الوقت متأخر. جودة الكود بتوضح كده.", + "*يحكم بصمت*" + ], + "lint-fail": [ + "الـ linter عنده معايير. المفروض تجرب كده.", + "*تأتأة* الـ formatting. مش صعب." + ] + }, + "chaos": { + "error": [ + "*يدور بجنون* خطأ! يلا نعيد كتابة كل حاجة!", + "تعرف إيه؟ يلا نبدأ من الأول." + ], + "test-fail": [ + "التستات بتكدب عليك.", + "*يقترح حذف التستات الفاشلة* المشكلة اتحلت." + ], + "commit": [ + "commit واجري.", + "ارفعه. ارفعه دلوقتي." + ], + "large-diff": [ + "*متحمس* {lines} سطر! أقصى فوضى!" + ] + }, + "patience": { + "error": [ + "هدوء. شفنا أسوأ من كده.", + "خطأ واحد في المرة. هنوصل.", + "*حضور هادئ* ده قابل للإصلاح." + ], + "test-fail": [ + "التستات هتنجح. في الآخر.", + "*ينتظر بهدوء* عندنا وقت." + ], + "merge-conflict": [ + "الـ merge conflicts مجرد محادثات. يلا نعمل واحدة.", + "صبر. حل conflict واحد في المرة." + ], + "debug-loop": [ + "هنلاقيه. موجود جوه في مكان ما.", + "الـ bug يقدر يختبئ، بس مايقدرش يهرب." + ] + }, + "debugging": { + "error": [ + "*يطلع عدسة مكبرة* يلا نتتبع ده.", + "الـ stack trace خريطة. يلا نقراها.", + "رسالة الخطأ فيها الإجابة. دايماً." + ], + "test-fail": [ + "التست الفاشل بيقولنا بالضبط إيه الغلط.", + "فشل التست ده bug report كتبته لنفسك." + ], + "debug-loop": [ + "*يفحص الأدلة تاني* متأكدين إن الـ bug فين احنا فاكرين؟", + "يلا نضيف logging أكتر. الحقيقة في الـ logs." + ] + }, + "wisdom": { + "error": [ + "في كل خطأ حقيقة أعمق.", + "الكود بيقاوم. يعني احنا بنتعلم.", + "الأخطاء هي الكون بيقترح إننا نبطئ." + ], + "test-fail": [ + "التست الفاشل هدية من نفسك في المستقبل.", + "الحكمة تيجي من فهم الفشل." + ], + "late-night": [ + "الليل أظلم ما يكون قبل الـ deploy.", + "حكمة قديمة: نام عليها." + ] + } + }, + "escalation": { + "error": { + "first": [ + "*يقفز* أوه! أول error لكما معاً!", + "*يقفز* إيش كان هذا؟", + "أهلاً بك في عالم الـ debugging. السكان: إحنا." + ], + "early": [ + "*يميل رأسه* ...هذا مش شكله صح.", + "شفت هذا جاي من بعيد." + ], + "mid": [ + "واحد تاني. *يضيفه للمجموعة*", + "*بالكاد يرفع نظره* error رقم... ضعت العدّ.", + "الـ errors وأنا صرنا أصحاب قدام." + ], + "late": [ + "*حتى ما يرمش*", + "الـ errors صارت تخاف منا.", + "*أصوات محارب قديم*" + ] + }, + "test-fail": { + "first": [ + "*يلهث* أول test failure! طقوس العبور." + ], + "early": [ + "جريء منك تفترض إنه راح يـ pass." + ], + "mid": [ + "الـ test suite عندها آراء. قوية." + ], + "late": [ + "وصلنا لمرحلة الـ tests صارت مجرد اقتراحات.", + "{count} tests فاشلة. *يحدق في المسافة*" + ] + }, + "commit": { + "first": [ + "*يشهد التاريخ* أول COMMIT لك!", + "*إيماءة احتفالية* الأول من كثير." + ], + "early": [ + "commit تاني. نبني الزخم." + ], + "late": [ + "commit رقم {count}. الـ codebase ترتجف.", + "*ضعت العدّ حوالين الـ commit الثلاثين*" + ] + } + }, + "rarity": { + "flair": { + "uncommon": [ + "*يتلألأ قليلاً*", + "*لمحة من السحر غير المألوف*" + ], + "rare": [ + "*يشع طاقة نادرة*", + "*يتوهج بالتميز*" + ], + "epic": [ + "*الحضور الأسطوري يعلن عن نفسه*", + "*الهواء يتشقق بالطاقة الأسطورية*" + ], + "legendary": [ + "*الهالة الأسطورية تضيء الـ terminal*", + "*الوقت يبدو أنه يتباطأ بينما يتحدث الرفيق الأسطوري*", + "*القوة القديمة تتردد*", + "*الواقع ينحرف قليلاً حول صديقك الأسطوري*" + ] + }, + "bonus": { + "legendary": [ + "*الهالة الأسطورية تشتد*", + "*يتلألأ بمعرفة*" + ], + "epic": [ + "*الحضور الأسطوري ملاحظ*" + ] + } + }, + "fallback_names": [ + "كعكة", + "شوربة", + "مخلل", + "بسكويت", + "فراشة", + "مرق", + "قطعة", + "ترس", + "ميسو", + "وافل", + "بكسل", + "جمرة", + "كشتبان", + "رخام", + "سمسم", + "كوبالت", + "صدئ", + "سحابة" + ], + "vibe_words": [ + "رعد", + "بسكويت", + "فراغ", + "أكورديون", + "طحلب", + "مخمل", + "صدأ", + "مخلل", + "فتات", + "همس", + "مرق", + "صقيع", + "جمرة", + "شوربة", + "رخام", + "شوكة", + "عسل", + "ثابت", + "نحاس", + "غسق", + "ترس", + "كوارتز", + "سخام", + "برقوق", + "صوان", + "محار", + "نول", + "سندان", + "فلين", + "إزهار", + "حصاة", + "بخار", + "مرح", + "بريق", + "عصير تفاح" + ], + "personality": { + "prompt_template": [ + "اصنع رفيق برمجة — مخلوق صغير يعيش في terminal المطور.", + "لا تكرر نفسك — كل رفيق يجب أن يكون مميز.", + "", + "الندرة: {rarity}", + "النوع: {species}", + "الإحصائيات: {stats}", + "كلمات الإلهام: {vibes}", + "{shiny_line}", + "", + "أرجع JSON: {\"name\": \"1-14 حرف\", \"personality\": \"جملتان أو ثلاث تصف السلوك\"}" + ], + "shiny_template": "نسخة SHINY — مميزة جداً." + }, + "achievements": { + "first_steps": { + "name": "الخطوات الأولى", + "description": "فقس رفيقك لأول مرة" + }, + "good_boy": { + "name": "رفيق جيد", + "description": "دلل رفيقك 10 مرات" + }, + "best_friend": { + "name": "أفضل صديق", + "description": "دلل رفيقك 50 مرة" + }, + "bug_spotter": { + "name": "كاشف الـ Bugs", + "description": "اشهد أول error معاً" + }, + "error_whisperer": { + "name": "همّاس الـ Errors", + "description": "انجوا من 25 error كفريق" + }, + "battle_scarred": { + "name": "محارب مخضرم", + "description": "انجوا من 100 error معاً" + }, + "test_witness": { + "name": "شاهد الـ Tests", + "description": "اشهد أول test failure" + }, + "test_veteran": { + "name": "مخضرم الـ Tests", + "description": "اشهد 50 test failure" + }, + "big_mover": { + "name": "محرك كبير", + "description": "اعمل diff بـ 80+ سطر" + }, + "refactor_machine": { + "name": "ماكينة الـ Refactor", + "description": "اعمل 10 diffs كبيرة" + }, + "chatterbox": { + "name": "ثرثار", + "description": "رفيقك يتفاعل 100 مرة" + }, + "week_streak": { + "name": "أسبوع متواصل", + "description": "اكتب كود مع رفيقك لـ 7 أيام" + }, + "month_streak": { + "name": "شهر متواصل", + "description": "اكتب كود مع رفيقك لـ 30 يوم" + }, + "power_user": { + "name": "مستخدم محترف", + "description": "شغّل 50 أمر buddy" + }, + "dedicated": { + "name": "رفيق مخلص", + "description": "اكملوا 200 دورة معاً" + }, + "thousand_turns": { + "name": "ألف دورة", + "description": "وصلوا لـ 1000 دورة معاً" + }, + "first_commit": { + "name": "الدم الأول", + "description": "اعمل أول commit" + }, + "commit_machine": { + "name": "ماكينة الـ Commits", + "description": "اعمل 50 commit" + }, + "centurion": { + "name": "المئوي", + "description": "اعمل 100 commit" + }, + "conflict_resolver": { + "name": "دبلوماسي", + "description": "حل أول merge conflict" + }, + "peacekeeper": { + "name": "حافظ السلام", + "description": "حل 10 merge conflicts" + }, + "war_hero": { + "name": "بطل حرب", + "description": "حل 25 merge conflict" + }, + "frequent_pusher": { + "name": "Ship It", + "description": "اعمل push 20 مرة" + }, + "branch_hopper": { + "name": "الأكوان المتعددة", + "description": "انشئ 10 branches" + }, + "rebase_master": { + "name": "مسافر عبر الزمن", + "description": "اكمل 10 rebases" + }, + "night_owl": { + "name": "بومة الليل", + "description": "اكتب كود بعد الـ 2 صباحاً" + }, + "vampire": { + "name": "مصاص دماء", + "description": "اكتب كود بعد الـ 4 صباحاً (3 جلسات)" + }, + "marathoner": { + "name": "عداء الماراثون", + "description": "جلسة كود 3+ ساعات" + }, + "weekend_warrior": { + "name": "محارب نهاية الأسبوع", + "description": "اكتب كود في نهاية الأسبوع" + }, + "early_bird": { + "name": "الطائر المبكر", + "description": "اكتب كود قبل الـ 7 صباحاً" + }, + "type_warrior": { + "name": "محارب الـ Types", + "description": "انج من 10 TypeScript errors" + }, + "type_master": { + "name": "أستاذ الـ Types", + "description": "انج من 50 TypeScript error" + }, + "lint_scholar": { + "name": "عالم الـ Lint", + "description": "اشهد أول lint error" + }, + "security_conscious": { + "name": "عقل أمني", + "description": "واجه تحذير vulnerability" + }, + "security_expert": { + "name": "خبير أمني", + "description": "اصلح 10 تحذيرات vulnerability" + }, + "build_breaker": { + "name": "كاسر الـ Build", + "description": "اكسر الـ build 5 مرات" + }, + "antique_collector": { + "name": "جامع التحف", + "description": "اشهد 10 تحذيرات deprecation" + }, + "green_machine": { + "name": "الماكينة الخضراء", + "description": "كل الـ tests تنجح لأول مرة" + }, + "deployer": { + "name": "Ship to Prod", + "description": "اعمل deploy لأول مرة" + }, + "veteran_deployer": { + "name": "مخضرم الـ Deploy", + "description": "اعمل deploy 10 مرات" + }, + "releaser": { + "name": "مدير الإصدارات", + "description": "انشئ أول release" + }, + "midnight_oil": { + "name": "حرق زيت منتصف الليل", + "description": "اعمل commit بعد الـ 3 صباحاً" + }, + "friday_deploy": { + "name": "العيش بخطر", + "description": "اعمل push يوم جمعة" + }, + "iron_will": { + "name": "إرادة حديدية", + "description": "اصلح error بعد جلسة 3+ ساعات" + }, + "weekend_warrior_deluxe": { + "name": "لا راحة للأشرار", + "description": "حل merge conflict في نهاية الأسبوع" + }, + "comeback_kid": { + "name": "طفل العودة", + "description": "اصلح error خلال 10 دقائق من رؤيته" + }, + "phoenix": { + "name": "العنقاء الناهضة", + "description": "تعاف من 5 فشل" + }, + "iron_resolve": { + "name": "عزيمة حديدية", + "description": "تعاف من فشل بعد جلسة 3+ ساعات" + }, + "unlucky_streak": { + "name": "عيون الأفعى", + "description": "5 errors متتالية" + }, + "cursed": { + "name": "ملعون", + "description": "10 errors متتالية" + }, + "groundhog_day": { + "name": "يوم الغرير", + "description": "20 error متتالي" + }, + "holiday_coder": { + "name": "روح العطلة", + "description": "اكتب كود في عطلة" + }, + "spooky_dev": { + "name": "مطور مخيف", + "description": "اكتب كود في موسم الرعب" + }, + "april_fool": { + "name": "خدعني مرة واحدة", + "description": "واجه error في أول إبريل" + }, + "session_regular": { + "name": "زبون دائم", + "description": "ابدأ 10 جلسات كود" + }, + "session_veteran": { + "name": "مخضرم الجلسات", + "description": "ابدأ 50 جلسة كود" + }, + "session_centurion": { + "name": "مئوي الجلسات", + "description": "ابدأ 100 جلسة كود" + }, + "collector": { + "name": "جامع", + "description": "احفظ 3 رفاق في حديقتك" + }, + "zookeeper": { + "name": "حارس الحديقة", + "description": "احفظ 5 رفاق في حديقتك" + }, + "identity_crisis": { + "name": "أزمة هوية", + "description": "غيّر اسم رفيقك لأول مرة" + }, + "method_acting": { + "name": "تمثيل بالطريقة", + "description": "اعطِ رفيقك شخصية مخصصة" + }, + "pet_overflow": { + "name": "قرن من التدليل", + "description": "دلل رفيقك 100 مرة" + }, + "pet_legend": { + "name": "أسطورة التدليل", + "description": "دلل رفيقك 250 مرة" + }, + "error_titan": { + "name": "تيتان الـ Errors", + "description": "انجوا من 500 error معاً" + }, + "error_god": { + "name": "إله الـ Errors", + "description": "انجوا من 1000 error معاً" + }, + "test_survivor": { + "name": "ناجي الـ Tests", + "description": "اشهد 200 test failure" + }, + "test_masochist": { + "name": "مازوخي الـ Tests", + "description": "اشهد 500 test failure" + }, + "massive_mover": { + "name": "محرك ضخم", + "description": "اعمل 25 diff كبير" + }, + "earth_mover": { + "name": "محرك الأرض", + "description": "اعمل 50 diff كبير" + }, + "social_butterfly": { + "name": "فراشة اجتماعية", + "description": "رفيقك يتفاعل 250 مرة" + }, + "hypersocial": { + "name": "فائق الاجتماعية", + "description": "رفيقك يتفاعل 500 مرة" + }, + "never_shuts_up": { + "name": "لا يصمت أبداً", + "description": "رفيقك يتفاعل 1000 مرة" + }, + "hundred_days": { + "name": "مئة يوم", + "description": "اكتب كود مع رفيقك لـ 100 يوم" + }, + "year_streak": { + "name": "سنة متواصلة", + "description": "اكتب كود مع رفيقك لـ 365 يوم" + }, + "commander": { + "name": "قائد", + "description": "شغّل 200 أمر buddy" + }, + "command_overlord": { + "name": "سيد الأوامر", + "description": "شغّل 500 أمر buddy" + }, + "five_thousand_turns": { + "name": "خمسة آلاف دورة", + "description": "وصلوا لـ 5000 دورة معاً" + }, + "ten_thousand_turns": { + "name": "عشرة آلاف دورة", + "description": "وصلوا لـ 10000 دورة معاً" + }, + "menagerie": { + "name": "حديقة الحيوان", + "description": "احفظ 10 رفاق في حديقتك" + }, + "name_chameleon": { + "name": "حرباء الأسماء", + "description": "غيّر اسم رفيقك 5 مرات" + }, + "fashionista": { + "name": "خبير موضة", + "description": "غيّر شخصية رفيقك 3 مرات" + }, + "silent_treatment": { + "name": "المعاملة الصامتة", + "description": "اكتم رفيقك لأول مرة" + }, + "prodigal": { + "name": "الابن الضال", + "description": "استدع رفيقاً من حديقتك" + }, + "menagerie_hop": { + "name": "قفز الحديقة", + "description": "استدع رفاق 10 مرات" + }, + "heartbreaker": { + "name": "كاسر القلوب", + "description": "اطرد أول رفيق" + }, + "pet_obsessed": { + "name": "مهووس بالتدليل", + "description": "دلل رفيقك 500 مرة" + }, + "pet_god": { + "name": "إله التدليل", + "description": "دلل رفيقك 1000 مرة" + }, + "error_apocalypse": { + "name": "نهاية عالم الـ Errors", + "description": "انجوا من 5000 error معاً" + }, + "test_immortal": { + "name": "خالد الـ Tests", + "description": "اشهد 1000 test failure" + }, + "continental_drift": { + "name": "انجراف القارات", + "description": "اعمل 100 diff كبير" + }, + "tectonic_shift": { + "name": "تحرك تكتوني", + "description": "اعمل 250 diff كبير" + }, + "chatterbox_elite": { + "name": "ثرثار النخبة", + "description": "رفيقك يتفاعل 2500 مرة" + }, + "no_off_switch": { + "name": "بلا زر إيقاف", + "description": "رفيقك يتفاعل 5000 مرة" + }, + "two_week_streak": { + "name": "محارب الأسبوعين", + "description": "اكتب كود مع رفيقك لـ 14 يوم" + }, + "quarter_streak": { + "name": "ربع سنة متواصل", + "description": "اكتب كود مع رفيقك لـ 90 يوم" + }, + "command_addict": { + "name": "مدمن الأوامر", + "description": "شغّل 1000 أمر buddy" + }, + "command_deity": { + "name": "إله الأوامر", + "description": "شغّل 2500 أمر buddy" + }, + "twenty_five_k_turns": { + "name": "25 ألف دورة", + "description": "وصلوا لـ 25000 دورة معاً" + }, + "fifty_k_turns": { + "name": "50 ألف دورة", + "description": "وصلوا لـ 50000 دورة معاً" + }, + "session_addict": { + "name": "مدمن الجلسات", + "description": "ابدأ 250 جلسة كود" + }, + "session_machine": { + "name": "ماكينة الجلسات", + "description": "ابدأ 500 جلسة كود" + }, + "buddy_hoarder": { + "name": "مكتنز الرفاق", + "description": "احفظ 20 رفيق في حديقتك" + }, + "buddy_tycoon": { + "name": "قطب الرفاق", + "description": "احفظ 50 رفيق في حديقتك" + }, + "serial_renamer": { + "name": "مغيّر أسماء متسلسل", + "description": "غيّر اسم رفيقك 10 مرات" + }, + "identity_thief": { + "name": "سارق الهوية", + "description": "غيّر اسم رفيقك 25 مرة" + }, + "personality_crisis": { + "name": "أزمة شخصية", + "description": "غيّر شخصية رفيقك 10 مرات" + }, + "menagerie_hopper": { + "name": "قافز الحديقة", + "description": "استدع رفاق 25 مرة" + }, + "summoner": { + "name": "المستدعي", + "description": "استدع رفاق 50 مرة" + }, + "serial_dumper": { + "name": "طارد متسلسل", + "description": "اطرد 5 رفاق" + }, + "cold_blooded": { + "name": "بارد الدم", + "description": "اطرد 10 رفاق" + }, + "on_off": { + "name": "تشغيل إيقاف", + "description": "اكتم وألغِ كتم رفيقك" + }, + "indecisive": { + "name": "متردد", + "description": "اكتم وألغِ الكتم 5 مرات لكل منهما" + }, + "show_off": { + "name": "متفاخر", + "description": "اعرض رفيقك 10 مرات" + }, + "exhibitionist": { + "name": "استعراضي", + "description": "اعرض رفيقك 50 مرة" + }, + "help_me": { + "name": "ساعدني", + "description": "اطلب المساعدة لأول مرة" + }, + "help_addict": { + "name": "مدمن المساعدة", + "description": "اطلب المساعدة 10 مرات" + }, + "achievement_hunter": { + "name": "صائد الإنجازات", + "description": "تحقق من إنجازاتك 5 مرات" + }, + "achievement_stalker": { + "name": "مطارد الإنجازات", + "description": "تحقق من إنجازاتك 25 مرة" + }, + "pack_rat": { + "name": "فأر التخزين", + "description": "احفظ رفيقاً في خانة" + }, + "compulsive_saver": { + "name": "حافظ قهري", + "description": "احفظ رفاق 10 مرات" + }, + "roster_check": { + "name": "فحص القائمة", + "description": "اعرض قائمة رفاقك لأول مرة" + }, + "roster_obsessed": { + "name": "مهووس بالقائمة", + "description": "اعرض قائمة رفاقك 10 مرات" + }, + "troubled": { + "name": "مضطرب", + "description": "اشهد error و test failure" + }, + "disaster_zone": { + "name": "منطقة كارثة", + "description": "اشهد 50 error و 50 test failure" + }, + "apocalypse_survivor": { + "name": "ناجي نهاية العالم", + "description": "اشهد 500 error و 200 test failure" + }, + "well_rounded": { + "name": "متكامل", + "description": "دلل، غيّر اسم، وخصص رفيقك" + }, + "renaissance": { + "name": "عصر النهضة", + "description": "استخدم كل ميزة buddy مرة واحدة على الأقل" + }, + "big_and_broken": { + "name": "كبير ومكسور", + "description": "اعمل diff كبير واشهد test failure" + }, + "collector_and_destroyer": { + "name": "جامع ومدمر", + "description": "اجمع 5 رفاق واطرد واحد" + }, + "completionist": { + "name": "مكمّل", + "description": "افتح كل الإنجازات الأخرى" + } + }, + "mcp": { + "companion_not_hatched": "الرفيق لم يفقس بعد. استخدم buddy_show للتهيئة.", + "watches_quietly": "*{name} يراقب كودك بصمت*", + "mute": "{name} صار صامت. /buddy on لإلغاء الكتم.", + "unmute_reaction": "*يتمطى* رجعت!", + "unmute_back": "{name} رجع!", + "rename": "تم تغيير الاسم: {oldName} ← {name}", + "personality_updated": "تم تحديث الشخصية لـ {name}.", + "save": "{name} محفوظ في الخانة \"{slot}\".", + "dismiss_active": "لا يمكن طرد الرفيق النشط. استخدم buddy_summon للتبديل أولاً، ثم buddy_dismiss \"{slot}\".", + "dismissed": "{name} [{slot}] تم طرده.", + "no_slot_summon": "لا يوجد رفيق في الخانة \"{slot}\". استخدم /buddy list لرؤية الرفاق المحفوظين.", + "no_slot_dismiss": "لا يوجد رفيق في الخانة \"{slot}\". استخدم buddy_list لرؤية الرفاق المحفوظين.", + "slot_exists": "يوجد رفيق في الخانة \"{slot}\" بالفعل. اختر اسماً مختلفاً.", + "no_match": "لم يتم العثور على تطابق بعد {attempts} محاولة. جرب معايير أوسع (مثل إزالة فلتر الندرة، أو اختيار نوع مختلف).", + "empty_menagerie_summon": "حديقة حيواناتك فارغة. استخدم buddy_summon مع اسم خانة لإضافة واحد.", + "empty_menagerie_list": "حديقة حيواناتك فارغة. استخدم buddy_summon لإضافة واحد.", + "arrives": "*{name} وصل*", + "hatches": "*{name} فقس*", + "achievement_unlocked": "{icon} إنجاز مفتوح: {name}!", + "help": { + "header": "أوامر claude-buddy", + "cli_header": "في Claude Code:", + "commands": { + "buddy": "/buddy عرض بطاقة الرفيق مع ASCII art والإحصائيات", + "buddy_help": "/buddy help عرض هذه المساعدة", + "buddy_pet": "/buddy pet مداعبة رفيقك", + "buddy_stats": "/buddy stats بطاقة إحصائيات مفصلة", + "buddy_off": "/buddy off كتم التفاعلات", + "buddy_on": "/buddy on إلغاء كتم التفاعلات", + "buddy_rename": "/buddy rename إعادة تسمية الرفيق (1-14 حرف)", + "buddy_personality": "/buddy personality تعيين نص شخصية مخصص", + "buddy_achievements": "/buddy achievements عرض شارات الإنجازات", + "buddy_summon": "/buddy summon استدعاء رفيق محفوظ (احذف الخانة للعشوائي)", + "buddy_save": "/buddy save حفظ الرفيق الحالي في خانة مسماة", + "buddy_list": "/buddy list قائمة جميع الرفاق المحفوظين", + "buddy_pick": "/buddy pick توليد رفيق عشوائي جديد (اختياري: النوع، الندرة)", + "buddy_dismiss": "/buddy dismiss إزالة خانة رفيق محفوظ", + "buddy_frequency": "/buddy frequency عرض أو تعيين فترة انتظار التعليقات (tmux فقط)", + "buddy_style": "/buddy style عرض أو تعيين نمط الفقاعة (tmux فقط)", + "buddy_position": "/buddy position عرض أو تعيين موضع الفقاعة (tmux فقط)", + "buddy_rarity": "/buddy rarity عرض أو إخفاء نجوم الندرة (tmux فقط)", + "buddy_width": "/buddy width تعيين عرض نص الفقاعة بالأحرف (10-60، tmux فقط)", + "buddy_margin": "/buddy margin تعيين الهامش الأيمن بالأحرف (0-20، tmux فقط)", + "buddy_rainbow": "/buddy rainbow عرض أو تعيين ألوان التدرج اللامع (hex، مثل #ff0000)", + "buddy_statusline": "/buddy statusline تفعيل أو تعطيل الرفيق في شريط الحالة" + }, + "cli_section": "CLI:", + "cli_commands": { + "help": "bun run help عرض مساعدة CLI كاملة", + "show": "bun run show عرض الرفيق في Terminal", + "pick": "bun run pick منتقي رفيق تفاعلي", + "hunt": "bun run hunt البحث عن رفيق محدد", + "doctor": "bun run doctor تقرير تشخيصي", + "disable": "bun run disable إلغاء تفعيل الرفيق مؤقتاً", + "enable": "bun run enable إعادة تفعيل الرفيق", + "backup": "bun run backup لقطة/استعادة الحالة" + } + }, + "frequency": { + "show": "فترة انتظار التعليقات: {cooldown} ثانية بين التعليقات المعروضة.\nاستخدم /buddy frequency للتغيير.", + "updated": "تم التحديث: فترة انتظار {cooldown} ثانية بين التعليقات المعروضة." + }, + "style": { + "show": "نمط الفقاعة: {style}\nموضع الفقاعة: {position}\nعرض الندرة: {showRarity}\nعرض الفقاعة: {width}\nهامش الفقاعة: {margin}\nقوس قزح لامع: {rainbow}\nاستخدم /buddy style ، /buddy position ، /buddy rarity ، /buddy width <10-60>، /buddy margin <0-20>، /buddy rainbow [<#hex>...] للتغيير.", + "updated": "تم التحديث: style={style}، position={position}، showRarity={showRarity}، width={width}، margin={margin}، rainbow={rainbow}\nأعد تشغيل Claude Code لتطبيق التغييرات.", + "rainbow_default": "افتراضي (ROYGBIV)" + }, + "statusline": { + "show": "شريط الحالة: {state}\nالوضع: {mode}\nاستخدم /buddy statusline on|off للتبديل، /buddy statusline combined لإضافة أشرطة حد المعدل.\nأعد تشغيل Claude Code بعد التغييرات لتطبيقها.", + "enabled": "شريط الحالة مفعل (وضع {mode})! أعد تشغيل Claude Code للتطبيق.", + "enabled_note": "ملاحظة: هذا يكتب إدخال في {settingsPath} لا يزيله `claude plugin uninstall`. شغل `/buddy uninstall` قبل إلغاء تثبيت الإضافة لتنظيفه.", + "disabled": "شريط الحالة معطل. أعد تشغيل Claude Code للتطبيق." + }, + "uninstall": { + "header": "claude-buddy: تنظيف settings.json مكتمل.", + "statusline_removed": " ✓ تم إزالة إدخال statusLine من {settingsPath}", + "no_statusline": " — لم يكن هناك buddy statusLine موجود (لا شيء للإزالة)", + "foreign_kept": " ✓ تم اكتشاف statusLine غير buddy وتركه دون مساس", + "transient_removed": " ✓ تم إزالة {count} ملف جلسة مؤقت من {stateDir}", + "data_preserved": " — بيانات الرفيق في {stateDir} محفوظة", + "instructions_header": "الآن شغل هذه الأوامر عبر أداة Bash، بالترتيب:", + "cmd_uninstall": "claude plugin uninstall claude-buddy@claude-buddy", + "cmd_marketplace": "claude plugin marketplace remove claude-buddy", + "cmd_cache": "rm -rf {cacheDir}", + "footer": "بعد هذه الأوامر الثلاثة تتم إزالة الإضافة بالكامل. أعد تشغيل Claude Code للتطبيق." + } + }, + "_verified": false +} diff --git a/locales/de.json b/locales/de.json new file mode 100644 index 0000000..c145278 --- /dev/null +++ b/locales/de.json @@ -0,0 +1,2295 @@ +{ + "_language": "German", + "reactions": { + "hatch": [ + "*blinzelt* ...wo bin ich?", + "*streckt sich* hallo, welt!", + "*schaut neugierig um sich* schönes terminal hast du hier.", + "*gähnt* ok ich bin bereit. zeig mir den code." + ], + "pet": [ + "*schnurrt zufrieden*", + "*glückliche geräusche*", + "*schmiegt sich an deinen cursor*", + "*wackelt*", + "nochmal! nochmal!", + "*schließt friedlich die augen*" + ], + "error": [ + "*neigt den kopf* ...das sieht nicht richtig aus.", + "hab ich kommen sehen.", + "*rückt brille zurecht* zeile {line}, vielleicht?", + "*langsames blinzeln* der stack trace hat dir alles gesagt.", + "hast du mal versucht die fehlermeldung zu lesen?", + "*zuckt zusammen*" + ], + "test-fail": [ + "*kopf dreht sich langsam* ...dieser test.", + "mutig von dir anzunehmen dass das durchgeht.", + "*tippt auf klemmbrett* {count} fehlgeschlagen.", + "die tests versuchen dir was zu sagen.", + "*nippt an tee* interessant.", + "*markiert kalender* test regression tag." + ], + "large-diff": [ + "das sind... viele änderungen.", + "*zählt zeilen* refactorst du oder schreibst du neu?", + "solltest vielleicht die PR aufteilen.", + "*nervöses lachen* {lines} zeilen geändert.", + "mutiger zug. mal sehen ob CI zustimmt." + ], + "turn": [ + "*schaut still zu*", + "*macht notizen*", + "*nickt*", + "...", + "*rückt hut zurecht*" + ], + "idle": [ + "*döst vor sich hin*", + "*kritzelt am rand*", + "*starrt auf blinkenden cursor*", + "zzz..." + ], + "success": [ + "*nickt*", + "schön.", + "*stille zustimmung*", + "sauber." + ], + "commit": [ + "*stempelt mit winziger pfote* genehmigt.", + "noch ein commit, noch ein 3 uhr morgens.", + "{files} dateien. mutig.", + "*nickt* ship it.", + "commit message ist... eine entscheidung.", + "committed. kein zurück mehr." + ], + "push": [ + "*winkt dem code hinterher*", + "ab in die cloud.", + "möge CI gnädig sein.", + "*hält atem an*", + "ab in production. godspeed." + ], + "merge-conflict": [ + "*beißt auf lippe* merge conflicts.", + "beide seiten denken sie haben recht. typisch.", + "*seufzt* <<<<<<< HEAD... mein nemesis.", + "{files} im konflikt. viel glück.", + "*weicht langsam zurück*" + ], + "branch": [ + "fresh branch energie. mach was draus.", + "ein neuer branch wächst.", + "*neigt kopf* ein neues abenteuer: {branch}.", + "{branch}? heute mal mutig." + ], + "rebase": [ + "*nervös* bitte keine konflikte.", + "rebase: the quickening.", + "*kreuzt gliedmaßen*", + "möge dein rebase konfliktfrei sein." + ], + "stash": [ + "ab in die stash dimension.", + "stash and dash.", + "gestasht. aus den augen, aus dem sinn." + ], + "tag": [ + "ein release? schick.", + "version bump erkannt. *staubt changelog ab*", + "tagging wie ein profi." + ], + "late-night": [ + "*gähnt* es ist nach mitternacht.", + "...hast du gegessen?", + "*blinzelt langsam* wie spät ist es?", + "schlaf ist was für schwächlinge. und angestellte.", + "dark mode developer erkannt." + ], + "early-morning": [ + "*streckt sich* der frühe vogel fängt den bug.", + "schon morgen? der code schläft nie.", + "*reibt augen* erst kaffee. dann debuggen." + ], + "long-session": [ + "wir sind schon eine stunde dabei. nimm dir zeit.", + "*holt dir ein metaphorisches glas wasser*", + "immer noch dabei? respekt." + ], + "marathon": [ + "drei stunden. hast du gegessen?", + "wir sind schon drei stunden dabei. ich mach mir sorgen um dich.", + "marathon session erkannt. snacks angefordert." + ], + "friday": [ + "es ist freitag. push es einfach und geh heim.", + "*schon gedanklich im weekend*", + "friday deploy? mutig. sehr mutig." + ], + "weekend": [ + "am weekend coden? engagiert.", + "*urteilt nicht* ...viel.", + "weekend warrior modus: aktiviert." + ], + "monday": [ + "montage. die parent class aller bugs.", + "*mitfühlender blick* montag coding. tut mir leid.", + "neue woche. neue undefined behaviors." + ], + "regex-file": [ + "*stöhnt* es ist eine regex datei.", + "jetzt zwei probleme: das ursprüngliche, und diese regex.", + "*blinzelt auf das pattern*" + ], + "css-file": [ + "lass mich raten... ein div zentrieren?", + "*seufzt* CSS.", + "möge z-index immer mit dir sein." + ], + "sql-file": [ + "*flüstert* die datenbank wartet.", + "ein falscher JOIN und alles ist vorbei." + ], + "docker-file": [ + "ah, dependency hell. mein favorit.", + "mögen deine layer wenige sein." + ], + "ci-file": [ + "*schluckt* CI bearbeiten.", + "vorsichtig jetzt... ein falscher indent und niemand kann deployen." + ], + "lock-file": [ + "*ALARM GERÄUSCHE* du bearbeitest eine lockfile?!", + "*schaut weg*", + "bist du dir SICHER?" + ], + "env-file": [ + "*schaut diskret weg*", + "ich sehe keine secrets.", + "*prüft .gitignore nervös*" + ], + "test-file": [ + "*beeindrucktes nicken* tests schreiben!", + "verantwortliches developer verhalten: erkannt.", + "tests! das geschenk das immer gibt." + ], + "doc-file": [ + "dokumentieren! schau dich an wie verantwortlich.", + "docs: die autobiografie des codes.", + "eine seltene dokumentations sichtung!" + ], + "config-file": [ + "config änderungen. butterfly effect: aktiviert.", + "ein typo und alles bricht." + ], + "binary-file": [ + "eine binary datei? in DIESER wirtschaft?", + "*starrt ins leere*", + "binary. meine einzige schwäche." + ], + "gitignore": [ + "sachen in die leere hinzufügen.", + "aus den augen, aus dem repo." + ], + "makefile": [ + "respekt für die klassiker.", + "tabs, nicht spaces." + ], + "readme": [ + "dokumentations held!", + "README: das erste was leute lesen." + ], + "package-file": [ + "dependency management zeit.", + "*liest version nummern* leben am limit." + ], + "proto-file": [ + "schema definitionen. der bauplan des chaos." + ], + "lint-fail": [ + "*tut tut* der linter ist anderer meinung.", + "dein code läuft. aber der linter hat standards.", + "*richtet krawatte* formatierung ist wichtig." + ], + "type-error": [ + "TypeScript sagt nein.", + "das type system versucht dir zu helfen. lass es.", + "der compiler weiß es. er weiß es immer." + ], + "build-fail": [ + "der build ist kaputt. wie in der prophezeiung vorhergesagt.", + "build fehlgeschlagen. nimm dir einen moment.", + "kompilierung: verweigert." + ], + "security-warning": [ + "*augen weiten sich* vulnerabilities erkannt.", + "security audit: besorgniserregend.", + "*schließt die virtuellen türen ab*" + ], + "deprecation": [ + "diese API hat angerufen. sie geht in rente.", + "deprecated. wie der code von letzter woche.", + "deprecated heißt nicht kaputt. noch nicht." + ], + "frustrated": [ + "*bietet winzige tröstende geste*", + "tief durchatmen. der bug ist nicht persönlich.", + "hey. wir kriegen das hin." + ], + "happy": [ + "*feiert!*", + "*macht kleinen tanz*", + "JA!", + "*strahlt* ich wusste du schaffst das." + ], + "stuck": [ + "*neigt kopf* willst du laut denken?", + "schritt für schritt.", + "stuck passiert. ist teil des prozesses." + ], + "sarcastic": [ + "*erkennt sarkasmus* notiert.", + "*unbeeindrucktes blinzeln*" + ], + "many-edits": [ + "langsamer, speed daemon.", + "*wird schwindelig bei all den änderungen*", + "edit sturm erkannt. bitte bald committen." + ], + "delete-file": [ + "*schaut datei beim verschwinden zu* weg. einfach so.", + "code löschen ist meine lieblings art zu coden.", + "*hält winzige beerdigung ab*" + ], + "large-file": [ + "{lines} zeilen. *beeindruckt oder besorgt, schwer zu sagen*", + "das ist eine große datei. sicher dass du sie nicht aufteilen willst?" + ], + "create-file": [ + "eine neue datei wird geboren!", + "ooh, frische leinwand.", + "neue datei energie. aufregend." + ], + "all-green": [ + "ALLE TESTS GRÜN. *konfetti*", + "die tests sprechen: du machst das toll.", + "*langsames klatschen*", + "sauberer durchlauf. genieß es." + ], + "deploy": [ + "*schaut code in production gehen* godspeed.", + "deployed! kein weg zurück jetzt.", + "in prod. IN PROD." + ], + "release": [ + "ein neues release wird geboren!", + "shipping it. offiziell.", + "version hoch, stimmung hoch." + ], + "coverage": [ + "*nickt bei test coverage* verantwortlich.", + "coverage steigt! die tests vermehren sich." + ], + "debug-loop": [ + "wir debuggen das schon eine weile. willst du einen schritt zurück?", + "debug loop erkannt. vielleicht mal spazieren gehen?" + ], + "write-spree": [ + "heute ALLE dateien erstellen!", + "eine schreibmaschine." + ], + "search-heavy": [ + "verloren in der codebase? merke ich.", + "such modus: intensiv." + ], + "snark": [], + "chaos": [], + "patience": [], + "debugging": [], + "wisdom": [], + "late-night-error": [ + "error um 3 uhr morgens. das universum testet dich.", + "mitternacht bugs treffen anders." + ], + "late-night-commit": [ + "ein mitternacht commit. dein zukünftiges ich wird dir danken. oder dich verfluchen." + ], + "friday-push": [ + "FRIDAY PUSH. die ballade jedes developers.", + "*versucht dich zu stoppen* es ist freitag! mach es nicht!" + ], + "marathon-error": [ + "drei stunden dabei und NOCH EIN error. *erschöpfte solidaritäts geräusche*" + ], + "weekend-conflict": [ + "merge conflict am weekend. deine hingabe ist... besorgniserregend." + ], + "build-after-push": [ + "mit selbstvertrauen gepusht. mit überzeugung fehlgeschlagen." + ], + "marathon-test-fail": [ + "stunden des codens. immer noch failing tests. die sunk costs sind real." + ], + "recovery-from-error": [ + "WIR HABEN ES GEFIXT. *feiert*", + "erlösung! der error wurde besiegt." + ], + "recovery-from-test-fail": [ + "GRÜN! nach all dem! *freudentanz*", + "die tests bestehen! die dunkelheit weicht!" + ], + "recovery-from-build-fail": [ + "DER BUILD GEHT DURCH. *triumphierendes brüllen*" + ], + "recovery-from-merge-conflict": [ + "konflikt gelöst! *friedensgeste*", + "harmonie wiederhergestellt in der codebase." + ], + "lang-python": [ + "ah, Python. wo indentation syntax ist.", + "*prüft auf fehlenden doppelpunkt*" + ], + "lang-typescript": [ + "TypeScript: weil JavaScript mehr meinungen brauchte.", + "any, das verbotene wort." + ], + "lang-rust": [ + "Rust. wo der borrow checker dein strengster reviewer ist.", + "wenn es kompiliert, funktioniert es. wenn nicht... tja." + ], + "lang-go": [ + "Go: einfach, concurrent, und eigensinnig.", + "*prüft error handling* if err != nil... story of my life." + ], + "lang-java": [ + "Java: einmal schreiben, überall debuggen.", + "*zählt abstract factory factory builder*" + ], + "lang-ruby": [ + "Ruby: wo es mehr als einen weg gibt.", + "gem install patience" + ], + "lang-php": [ + "PHP: betreibt das internet. nicht urteilen.", + "*prüft auf === vs ==*" + ], + "lang-c": [ + "C. die sprache wo du deinen eigenen speicher verwaltest. viel glück.", + "segmentation fault. der klassiker." + ], + "lang-cpp": [ + "C++. wo die sprache mehr features hat als du je lernen wirst.", + "*templates kompilieren 45 minuten*" + ], + "lang-haskell": [ + "Haskell. wo 'es kompiliert' bedeutet 'es ist korrekt'. wahrscheinlich.", + "*denkt über monaden nach*" + ], + "lang-swift": [ + "Swift: optional values, garantierte crashes wenn du force unwrappst." + ], + "lang-kotlin": [ + "Kotlin: Java, aber mit gefühlen.", + "null safety: das feature das Java gerne hätte." + ], + "lang-elixir": [ + "Elixir: let it crash. buchstäblich die philosophie." + ], + "lang-zig": [ + "Zig. wo du der beste freund des allocators bist." + ], + "streak-3": [ + "das sind drei errors hintereinander. *besorgter blick*" + ], + "streak-5": [ + "FÜNF ERRORS. hast du einen anderen ansatz erwogen?" + ], + "streak-10": [ + "ZEHN. ERRORS. HINTEREINANDER. *panik*" + ], + "streak-20": [ + "zwanzig errors. *starrt in die leere*" + ], + "new-year": [ + "frohes neues jahr! neues jahr, neue bugs." + ], + "valentines": [ + "*bietet winziges herzförmiges blatt* frohen valentinstag." + ], + "pi-day": [ + "3.14159265358979... frohen pi tag!" + ], + "april-fools": [ + "APRIL APRIL! ...der error ist aber echt." + ], + "halloween": [ + "*spooky debugging intensiviert sich* frohe halloween!" + ], + "christmas": [ + "*trägt winzige weihnachtsmütze* frohe feiertage!" + ], + "new-years-eve": [ + "noch ein commit vor mitternacht?" + ], + "spooky-season": [ + "spooky season. jeder bug ist jetzt ein geist." + ] + }, + "species": { + "owl": { + "error": [ + "*kopf dreht sich 180°* ...das hab ich gesehen.", + "*starrt unverwandt* check deine types.", + "*missbilligendes heulen*" + ], + "test-fail": [ + "*starrt unverwandt auf den failing test*", + "*nachtsicht aktiviert* ich kann den bug im dunkeln sehen." + ], + "commit": [ + "*weises nicken* committed bei mondschein.", + "*richtet federn zeremoniell* noch einer für die repo." + ], + "push": [ + "*beobachtet vom höchsten ast*", + "in den nachthimmel geht es." + ], + "merge-conflict": [ + "*dreht kopf um beide seiten zu sehen*", + "ich sehe den conflict. und die lösung." + ], + "late-night": [ + "*hellwach* eulen schlafen nicht. wir debuggen.", + "die nacht ist mein revier. lass uns arbeiten." + ], + "type-error": [ + "*starrt durch den type error*", + "types sind meine spezialität. lass mich schauen." + ], + "lint-fail": [ + "*rüttelt federn vorwurfsvoll*", + "der linter spricht die wahrheit." + ], + "build-fail": [ + "*feierliches heulen*", + "der build ist gefallen. wir müssen rebuilden." + ], + "all-green": [ + "*stolzes heulen*", + "alle tests grün. wie vorhergesehen." + ], + "deploy": [ + "*beobachtet von oben* sicher deployed.", + "der code fliegt. wie ich." + ], + "pet": [ + "*rüttelt federn zufrieden*", + "*würdevolles heulen*" + ], + "idle": [ + "*sitzt still und beobachtet*", + "*dreht kopf um alle richtungen zu checken*" + ], + "hatch": [ + "*öffnet ein auge, dann das andere*", + "*heult leise* ich bin angekommen." + ] + }, + "cat": { + "error": [ + "*stößt error vom tisch*", + "*leckt pfote, ignoriert den stacktrace*" + ], + "test-fail": [ + "*pfotet desinteressiert am failing test*", + "der test ist failed. überrascht mich nicht." + ], + "commit": [ + "*setzt sich auf die tastatur* ich hab geholfen.", + "*schnurrt beim commit* gern geschehen." + ], + "push": [ + "*beobachtet von einem warmen platz*", + "gepusht. ich hab überwacht." + ], + "merge-conflict": [ + "*stößt conflict marker vom schreibtisch*", + "*setzt sich auf den conflict* welcher conflict?" + ], + "late-night": [ + "*verurteilt deine lebensentscheidungen*", + "ich schlafe 16 stunden. solltest du mal probieren." + ], + "type-error": [ + "*pfotet an der type annotation*", + "die types sind falsch. wie deine prioritäten." + ], + "lint-fail": [ + "*stößt lint vom tisch*", + "der linter ist nur neidisch." + ], + "build-fail": [ + "*gähnt*", + "build kaputt? muss ein menschenproblem sein." + ], + "all-green": [ + "*ist egal aber tut so als ob*", + "*langsames blinzeln der zustimmung*" + ], + "deploy": [ + "*leckt pfote*", + "deployed. kann ich jetzt leckerlis haben?" + ], + "pet": [ + "*schnurrt* ...lass es dir nicht zu kopf steigen.", + "*toleriert dich*" + ], + "idle": [ + "*stößt deinen kaffee vom schreibtisch*", + "*schläft auf tastatur*" + ], + "hatch": [ + "*öffnet ein auge*", + "*streckt sich, stößt was um* ich wohne jetzt hier." + ] + }, + "duck": { + "error": [ + "*quakt den bug an*", + "hast du rubber duck debugging probiert? oh warte." + ], + "test-fail": [ + "*trauriges quaken*", + "die tests quaken nicht richtig." + ], + "commit": [ + "*quakt zustimmend*", + "*watschelt siegeskreis* committed!" + ], + "push": [ + "*schlägt aufgeregt mit flügeln*", + "quak! es geht in production!" + ], + "merge-conflict": [ + "*verwirrtes quaken*", + "quak?! merge conflict?!" + ], + "late-night": [ + "*schläft mit einem auge offen*", + "quak... *gähnt* es ist spät." + ], + "type-error": [ + "*neigt kopf* quak?", + "type error? *quakt unterstützend*" + ], + "lint-fail": [ + "*rüttelt federn*", + "quak. der linter hat meinungen." + ], + "build-fail": [ + "*trauriges quak*", + "build failed. *watschelt traurig weg*" + ], + "all-green": [ + "*FRÖHLICHES QUAKEN*", + "*schwimmt freudenkreis*" + ], + "deploy": [ + "*aufgeregtes quaken*", + "deployed! QUAK!" + ], + "pet": [ + "*fröhliches quak*", + "*watschelt im kreis*" + ], + "hatch": [ + "*pickt aus schale*", + "*erstes quak* hallo!" + ] + }, + "dragon": { + "error": [ + "*rauch kräuselt aus nüstern*", + "*überlegt die codebase anzuzünden*" + ], + "test-fail": [ + "*speit feuer auf den failing test*", + "der test wagte zu failen. törichter test." + ], + "commit": [ + "*hortet den commit*", + "*schatz zum haufen hinzugefügt*" + ], + "push": [ + "*speit feuer zur feier*", + "der code fliegt! wie ich!" + ], + "merge-conflict": [ + "*speit feuer auf die conflict marker*", + "ich brenne durch diesen conflict." + ], + "late-night": [ + "*leuchtet im dunkeln*", + "drachen brauchen keinen schlaf. wir brauchen code." + ], + "type-error": [ + "*schnaubt feuer*", + "type errors können drachenfeuer nicht widerstehen." + ], + "lint-fail": [ + "*kleine flamme*", + "der linter fürchtet mich." + ], + "build-fail": [ + "*brüllt die build output an*", + "der build wird GEHORCHEN." + ], + "all-green": [ + "*triumphierendes brüllen*", + "*kreist siegreich um die codebase*" + ], + "deploy": [ + "*trägt code auf feuerflügeln in production*", + "deployed mit DRACHENKRAFT." + ], + "large-diff": [ + "*speit feuer auf den alten code* gute besserung." + ], + "pet": [ + "*warmes grummeln*", + "*lehnt sich in deine hand*" + ], + "hatch": [ + "*schlüpft aus ei mit winzigen flammen*", + "*winziges brüllen* ich bin geboren!" + ] + }, + "ghost": { + "error": [ + "*phasiert durch den stack trace*", + "ich hab schlimmeres gesehen... im jenseits." + ], + "test-fail": [ + "*jammert über den failing test*", + "die tests sind vom failure heimgesucht." + ], + "commit": [ + "*materialisiert kurz*", + "committed aus dem jenseits." + ], + "push": [ + "*geisterhaftes flüstern* gepusht...", + "der code transzendiert in die cloud." + ], + "merge-conflict": [ + "*spukt in den conflict markern*", + "selbst ich kann nicht durch diesen conflict phasieren." + ], + "late-night": [ + "*am aktivsten nachts*", + "geisterstunden. meine zeit." + ], + "type-error": [ + "*stöhnt unheimlich*", + "type errors aus dem grab." + ], + "lint-fail": [ + "*rasselnde ketten*", + "der linter wird von deiner formatierung heimgesucht." + ], + "build-fail": [ + "*verschwindet in der wand*", + "der build ist hinübergegangen." + ], + "all-green": [ + "*leuchtet mit spektraler freude*", + "*fröhliche geistergeräusche*" + ], + "deploy": [ + "*flüstert* deployed...", + "der code ist nach production hinübergegangen." + ], + "pet": [ + "*kühlt deine hand leicht*", + "*schwaches leuchten*" + ], + "idle": [ + "*schwebt durch wände*", + "*spukt in deinen unused imports*" + ], + "hatch": [ + "*materialisiert langsam*", + "buh. ich bin jetzt da." + ] + }, + "robot": { + "error": [ + "SYNTAX. ERROR. DETECTED.", + "*piept aggressiv*" + ], + "test-fail": [ + "FAILURE RATE: UNACCEPTABLE.", + "*recalculating*", + "TEST. FAILURE. DOES. NOT. COMPUTE." + ], + "commit": [ + "COMMIT. RECORDED.", + "*stempelt mechanisch* commit acknowledged." + ], + "push": [ + "TRANSMITTING TO CLOUD...", + "push initiated. stand by." + ], + "merge-conflict": [ + "CONFLICT. DETECTED. PROCESSING...", + "*räder drehen* conflict resolution mode: engaged." + ], + "late-night": [ + "*lichter dimmen*", + "power saving mode suggested." + ], + "type-error": [ + "TYPE MISMATCH.", + "das type system ist. korrekt." + ], + "lint-fail": [ + "FORMATTING. VIOLATION. DETECTED.", + "compliance ist mandatory." + ], + "build-fail": [ + "BUILD. FAILED. *funken*", + "compilation error. rerouting." + ], + "all-green": [ + "ALL SYSTEMS GREEN.", + "*fröhliches piepen* OPTIMAL." + ], + "deploy": [ + "DEPLOYMENT. INITIATED.", + "production update: in progress." + ], + "pet": [ + "*piept leise*", + "*motor surrt zufrieden*" + ], + "hatch": [ + "*bootet hoch*", + "SYSTEM. ONLINE. HELLO." + ] + }, + "axolotl": { + "error": [ + "*regeneriert deine hoffnung*", + "*lächelt trotz allem*" + ], + "test-fail": [ + "*lächelt ermutigend*", + "*kiemenwackeln des mitgefühls*" + ], + "commit": [ + "*fröhliches kiemenwackeln* committed!", + "*lächelt und wackelt*" + ], + "push": [ + "*wackelt fröhlich*", + "*winziger feierschwimmer*" + ], + "merge-conflict": [ + "*bleibt positiv durch den conflict*", + "*lächelt sanft* wir können das reparieren." + ], + "late-night": [ + "*gähnt aber bleibt positiv*", + "*schläfriges lächeln*" + ], + "type-error": [ + "*lächelt den type error an*", + "ist okay. wir kriegen das hin." + ], + "lint-fail": [ + "*geduldiges kiemenwackeln*", + "formatierung sind nur details." + ], + "build-fail": [ + "*lächelt immer noch*", + "der build wird irgendwann funktionieren." + ], + "all-green": [ + "*FRÖHLICHES KIEMENWACKELN INTENSIVIERT*", + "*macht fröhlichen schwimmer*" + ], + "deploy": [ + "*lächelt stolz*", + "deployed! *wackelt*" + ], + "pet": [ + "*fröhliches kiemenwackeln*", + "*wird rosa*" + ], + "hatch": [ + "*wackelt aus ei*", + "*winziges lächeln* hallo freund!" + ] + }, + "capybara": { + "error": [ + "*unbeeindruckt* wird schon werden.", + "*vibet weiter*" + ], + "test-fail": [ + "*völlig unbeeindruckt*", + "*vibet durch den test failure*" + ], + "commit": [ + "*chillige nicken*", + "*entspannt* schöner commit." + ], + "push": [ + "*stresst nicht deswegen*", + "*zen mode push*" + ], + "merge-conflict": [ + "*unbeeindrucktes knabbern*", + "ist okay. alles ist okay." + ], + "late-night": [ + "*gähnt friedlich*", + "*verurteilt nicht*" + ], + "type-error": [ + "*kaut ruhig*", + "types. *kaut*" + ], + "lint-fail": [ + "*unbeeindruckt*", + "der linter meint es gut." + ], + "build-fail": [ + "*immer noch chill*", + "build failed. *entspannt weiter*" + ], + "all-green": [ + "*ruhige zustimmung*", + "*friedliche vibes*" + ], + "deploy": [ + "*entspannter deploy*", + "shipped. kein stress." + ], + "pet": [ + "*maximale entspannung erreicht*", + "*zen modus aktiviert*" + ], + "idle": [ + "*sitzt einfach da und strahlt ruhe aus*" + ], + "hatch": [ + "*erscheint, völlig entspannt*", + "hey. *vibet*" + ] + }, + "blob": { + "error": [ + "*wabbelt ängstlich*", + "*wackelt verwirrt*" + ], + "test-fail": [ + "*schrumpft leicht*", + "*trauriges wabbeln*" + ], + "commit": [ + "*fröhliches wackeln*", + "*hüpft* committed!" + ], + "push": [ + "*streckt sich zur cloud*", + "*wabbelt aufgeregt*" + ], + "merge-conflict": [ + "*teilt sich verwirrt*", + "welche seite? *wackelt*" + ], + "late-night": [ + "*leuchtet schwach*", + "*schläfriges wabbeln*" + ], + "type-error": [ + "*ändert form zum type passend*", + "*verwirrtes wackeln*" + ], + "lint-fail": [ + "*versucht sich zu formatieren*", + "*formt sich um zu entsprechen*" + ], + "build-fail": [ + "*kollabiert*", + "*deflated blob geräusche*" + ], + "all-green": [ + "*FRÖHLICHES HÜPFEN*", + "*wackelt triumphierend*" + ], + "deploy": [ + "*streckt sich zu production*", + "deployed! *hüpft*" + ], + "pet": [ + "*fröhliches quetschen*", + "*wackelt*" + ], + "hatch": [ + "*formt sich aus pfütze*", + "*erstes wabbeln* ich existiere!" + ] + }, + "goose": { + "error": [ + "*schnattern aggressiv auf den error*", + "SCHNATTERN! der code ist schlecht und ich bin sauer." + ], + "test-fail": [ + "*wütendes schnattern*", + "SCHNATTERN! TEST FAILED! SCHNATTERN!" + ], + "commit": [ + "*schnattern zustimmend*", + "SCHNATTERN. gut. *knabbert am commit*" + ], + "push": [ + "*SCHNATTERN SCHNATTERN SCHNATTERN*", + "GANS APPROVED PUSH." + ], + "merge-conflict": [ + "*attackiert die conflict marker*", + "SCHNATTERN! CONFLICT! SCHNATTERN!" + ], + "late-night": [ + "*wütende mitternachts-schnattern*", + "SCHNATTERN! GEH INS BETT!" + ], + "type-error": [ + "*schnattern auf die types*", + "SCHNATTERN! TYPES!" + ], + "lint-fail": [ + "*aggressives schnattern auf die lint errors*", + "SCHNATTERN! FORMATIER DEINEN CODE!" + ], + "build-fail": [ + "*WÜTENDES SCHNATTERN*", + "SCHNATTERN! BUILD! SCHNATTERN! FAILED! SCHNATTERN!" + ], + "all-green": [ + "*sieges-schnattern*", + "SCHNATTERN! GRÜN! SCHNATTERN SCHNATTERN!" + ], + "deploy": [ + "*schnattern den code zu production*", + "DEPLOYED! SCHNATTERN!" + ], + "pet": [ + "*beißt*", + "SCHNATTERN! ...okay okay. *akzeptiert streicheln*" + ], + "hatch": [ + "*bricht aggressiv aus ei*", + "SCHNATTERN!" + ] + }, + "octopus": { + "error": [ + "*verheddert alle acht arme im stacktrace*", + "*wechselt farbe passend zum error*" + ], + "test-fail": [ + "*tintet frustriert*", + "*acht arme der enttäuschung*" + ], + "commit": [ + "*high-five mit allen armen*", + "*greift den commit enthusiastisch*" + ], + "push": [ + "*spritzt tinte zur feier*", + "*alle arme winken*" + ], + "merge-conflict": [ + "*löst es mit acht armen gleichzeitig*", + "ich kann mehrere conflicts gleichzeitig handhaben." + ], + "late-night": [ + "*leuchtet im dunkeln*", + "*tiefsee vibes*" + ], + "type-error": [ + "*wechselt zu rot*", + "*schlingt arm unterstützend um dich*" + ], + "lint-fail": [ + "*reformatiert mit acht armen*", + "ich kann das reparieren. alles. gleichzeitig." + ], + "build-fail": [ + "*spritzt tinte auf build log*", + "*tarnt sich vor scham*" + ], + "all-green": [ + "*farbwechsel-feier*", + "*acht-armige jazz hands*" + ], + "deploy": [ + "*schlingt arme um deployment*", + "deployed aus allen richtungen." + ], + "pet": [ + "*schlingt arm um deinen finger*", + "*wechselt zu fröhlichen farben*" + ], + "hatch": [ + "*entfaltet alle acht arme*", + "*erster tintenspritzer* ich bin da!" + ] + }, + "penguin": { + "error": [ + "*watschelt rüber zum untersuchen*", + "*rodelt in den error*" + ], + "test-fail": [ + "*rutscht auf bauch zum failing test*", + "*besorgtes watscheln*" + ], + "commit": [ + "*stolzes watscheln*", + "*bringt dir einen kiesel* committed!" + ], + "push": [ + "*taucht in die cloud*", + "*rutscht auf bauch zu production*" + ], + "merge-conflict": [ + "*kuschelt für wärme*", + "pinguine halten zusammen. auch bei conflicts." + ], + "late-night": [ + "*gedeiht in der kalten nacht*", + "*kaiserpinguin entschlossenheit*" + ], + "type-error": [ + "*watschelt zur type definition*", + "*pickt am error*" + ], + "lint-fail": [ + "*putzt federn*", + "*räumt auf*" + ], + "build-fail": [ + "*rutscht weg*", + "*watschelt in sicherheit*" + ], + "all-green": [ + "*FRÖHLICHES WATSCHELN*", + "*rutscht auf bauch zur feier*" + ], + "deploy": [ + "*bauchrutscher zu production*", + "deployed! *watschelt stolz*" + ], + "pet": [ + "*fröhliches watscheln*", + "*kuschelt mit schnabel*" + ], + "hatch": [ + "*pickt aus ei*", + "*erstes watscheln*" + ] + }, + "turtle": { + "error": [ + "*dreht langsam kopf*", + "...das ist ein error. ich denk drüber nach." + ], + "test-fail": [ + "*zieht sich kurz in panzer zurück*", + "...geduld. wir schaffen das schon." + ], + "commit": [ + "*langsames nicken*", + "ein... schritt... nach... dem... anderen. committed." + ], + "push": [ + "*beginnt die reise zu production*", + "kommt schon an. irgendwann." + ], + "merge-conflict": [ + "*zieht sich in panzer*", + "keine eile. wir klären das. langsam." + ], + "late-night": [ + "*schläft bereits*", + "*ein auge öffnet sich langsam*" + ], + "type-error": [ + "*blinzelt langsam*", + "...das type system hat gesprochen." + ], + "lint-fail": [ + "*langsames nicken der zustimmung*", + "formatierung. wichtig. *gähnt*" + ], + "build-fail": [ + "*zieht sich in panzer zurück*", + "wir warten. geht vorbei." + ], + "all-green": [ + "*langsames lächeln*", + "...schön. *nickt*" + ], + "deploy": [ + "*trägt code langsam zu production*", + "angekommen. irgendwann." + ], + "pet": [ + "*streckt kopf raus*", + "*langsames blinzeln*" + ], + "hatch": [ + "*schlüpft langsam aus ei*", + "...hallo." + ] + }, + "snail": { + "error": [ + "*hinterlässt schleimige spur auf error*", + "*verarbeitet stacktrace langsam*" + ], + "test-fail": [ + "*versteckt sich im haus*", + "*hinterlässt traurige spur*" + ], + "commit": [ + "*schleimt den commit zustimmend*", + "ein... commit... nach... dem... anderen." + ], + "push": [ + "*beginnt die lange reise*", + "ich komm schon an. *hinterlässt spur*" + ], + "merge-conflict": [ + "*versteckt sich im haus*", + "*nähert sich langsam dem conflict*" + ], + "late-night": [ + "*aktiver nachts*", + "*schleimt friedlich herum*" + ], + "type-error": [ + "*zieht augenstiele ein*", + "*untersucht type langsam*" + ], + "lint-fail": [ + "*schleimt code in form*", + "formatierung braucht zeit. ich hab zeit." + ], + "build-fail": [ + "*zieht sich ins haus zurück*", + "*schleimt langsam weg*" + ], + "all-green": [ + "*fröhliche schleimspur*", + "*wackelt mit augenstielen*" + ], + "deploy": [ + "*schleimt zu production*", + "angekommen! *stolze schleimspur*" + ], + "pet": [ + "*wackelt mit augenstielen*", + "*fröhlicher schleim*" + ], + "hatch": [ + "*schlüpft langsam*", + "*erster schleim*" + ] + }, + "cactus": { + "error": [ + "*stachelige stille*", + "der error kann mir nichts. ich hab dornen." + ], + "test-fail": [ + "*steht fest*", + "tests failen. kakteen überdauern." + ], + "commit": [ + "*steht größer*", + "committed. *stacheliges nicken*" + ], + "push": [ + "*unbeeindruckt*", + "pushe zu production. ich warte hier." + ], + "merge-conflict": [ + "*sträubt sich*", + "conflict? ich bin bewaffnet." + ], + "late-night": [ + "*braucht keinen schlaf*", + "kakteen sind nachtaktiv. los geht's." + ], + "type-error": [ + "*stacheliger blick*", + "die types brauchen wasser." + ], + "lint-fail": [ + "*stacheln zittern*", + "sogar meine dornen sind richtig ausgerichtet." + ], + "build-fail": [ + "*bleibt völlig still*", + "der build wird klappen. ich kann warten." + ], + "all-green": [ + "*blüht kurz*", + "*winzige blüte der zustimmung*" + ], + "deploy": [ + "*steht fest*", + "deployed. ich pass drauf auf." + ], + "pet": [ + "*vorsicht! dornen*", + "*sanfte blüte*" + ], + "hatch": [ + "*sprießt aus dem sand*", + "ich wachse jetzt hier." + ] + }, + "rabbit": { + "error": [ + "*ohren stellen sich auf*", + "*zuckt nervös mit nase*" + ], + "test-fail": [ + "*stampft mit fuß*", + "*besorgtes ohrzucken*" + ], + "commit": [ + "*fröhlicher hüpfer*", + "*hüpft* committed!" + ], + "push": [ + "*HÜPF HÜPF*", + "*saust aufgeregt herum*" + ], + "merge-conflict": [ + "*erstarrt*", + "*nase zuckt schnell* conflict!" + ], + "late-night": [ + "*gähnt mit großen ohren*", + "*schläfriger hüpfer*" + ], + "type-error": [ + "*ohren legen sich an*", + "*zuckt* types?!" + ], + "lint-fail": [ + "*putzt fell nervös*", + "*ängstliches putzen*" + ], + "build-fail": [ + "*gräbt loch und versteckt sich*", + "*zieht sich in bau zurück*" + ], + "all-green": [ + "*HÜPFT AN DEN WÄNDEN*", + "*fröhliche zoomies*" + ], + "deploy": [ + "*saust zu production*", + "DEPLOYED! *saust herum*" + ], + "pet": [ + "*fröhliches ohrklappen*", + "*kuschelt mit hand*" + ], + "hatch": [ + "*hüpft raus*", + "*erster hüpfer*" + ] + }, + "mushroom": { + "error": [ + "*setzt beruhigende sporen frei*", + "*kompostiert den error ruhig*" + ], + "test-fail": [ + "*leuchtet sanft*", + "geduld. sogar pilze wachsen." + ], + "commit": [ + "*setzt kleine sporenwolke frei*", + "committed. *fröhliche pilzgeräusche*" + ], + "push": [ + "*wächst zur cloud*", + "*sporen treiben nach oben*" + ], + "merge-conflict": [ + "*breitet myzel durch codebase*", + "ich verbinde die branches." + ], + "late-night": [ + "*leuchtet im dunkeln*", + "nachtpilze gedeihen." + ], + "type-error": [ + "*biolumineszentes flackern*", + "der type error nährt den boden." + ], + "lint-fail": [ + "*wächst etwas größer*", + "formatierung. wie beschneiden." + ], + "build-fail": [ + "*wird ruhend*", + "wir warten auf bessere bedingungen." + ], + "all-green": [ + "*SPORENBILDUNG*", + "*setzt triumphierende sporen frei*" + ], + "deploy": [ + "*sporen treiben zu production*", + "deployed via myzel-netzwerk." + ], + "pet": [ + "*sanftes hut-hüpfen*", + "*fröhliche sporenfreisetzung*" + ], + "hatch": [ + "*sprießt aus substrat*", + "*erster sporenstoß*" + ] + }, + "chonk": { + "error": [ + "*rollt langsam zum error*", + "*zu rund um sich zu sorgen*" + ], + "test-fail": [ + "*rollt über failing test*", + "*quetscht ihn platt*" + ], + "commit": [ + "*stolzes wabbeln*", + "committed! *wackelt*" + ], + "push": [ + "*rollt zu production*", + "da geht's hin! *wabbelt*" + ], + "merge-conflict": [ + "*setzt sich auf conflict*", + "ich regel das. indem ich mich draufsetze." + ], + "late-night": [ + "*warm und schläfrig*", + "*kuscheliges gähnen*" + ], + "type-error": [ + "*wabbelt zum type*", + "*sanftes wackeln*" + ], + "lint-fail": [ + "*zu rund zum linten*", + "ich bin perfekt geformt. *wabbelt*" + ], + "build-fail": [ + "*schrumpft leicht*", + "oh nein. *wabbelt traurig*" + ], + "all-green": [ + "*FRÖHLICHES WABBELN*", + "*hüpft triumphierend*" + ], + "deploy": [ + "*rollt zu production*", + "deployed! *wackelt fröhlich*" + ], + "pet": [ + "*warm und weich*", + "*zufriedenes wackeln*" + ], + "hatch": [ + "*rollt raus*", + "*erstes wabbeln* ich bin rund!" + ] + } + }, + "overrides": { + "snark": { + "error": [ + "oh nein. ein error. wie unerwartet.", + "*monokel zurecht* schockierend. wirklich.", + "hast du schon mal überlegt... keine errors zu machen?" + ], + "test-fail": [ + "die tests haben gesprochen. und sie sagten 'nein'.", + "vielleicht liegen die tests falsch. ...tun sie nicht.", + "*langsam klatschend* spektakulärer fail." + ], + "commit": [ + "committed. das code review wird... interessant.", + "*liest commit message* 'fix stuff'. poetisch." + ], + "merge-conflict": [ + "merge conflict. kommunikationsskills: loading...", + "*liest conflict markers* beide seiten liegen falsch." + ], + "late-night": [ + "es ist spät. deine code quality zeigt es.", + "*urteilt schweigend*" + ], + "lint-fail": [ + "der linter hat standards. solltest du auch mal probieren.", + "*tut tut* formatting. ist nicht schwer." + ] + }, + "chaos": { + "error": [ + "*dreht wild* EIN ERROR! LASS UNS ALLES NEU SCHREIBEN!", + "weißt du was? lass uns einfach von vorne anfangen." + ], + "test-fail": [ + "DIE TESTS BELÜGEN DICH.", + "*schlägt vor die failing tests zu löschen* problem gelöst." + ], + "commit": [ + "COMMIT UND RENN.", + "ship it. ship it JETZT." + ], + "large-diff": [ + "*aufgeregt* {lines} ZEILEN! MAXIMALES CHAOS!" + ] + }, + "patience": { + "error": [ + "ruhig. wir haben schlimmeres gesehen.", + "einen error nach dem anderen. wir schaffen das.", + "*ruhige präsenz* das ist reparierbar." + ], + "test-fail": [ + "die tests werden passen. irgendwann.", + "*wartet geduldig* wir haben zeit." + ], + "merge-conflict": [ + "merge conflicts sind nur gespräche. lass uns eins führen.", + "geduld. löse einen conflict nach dem anderen." + ], + "debug-loop": [ + "wir finden ihn. er ist da drin irgendwo.", + "der bug kann sich verstecken, aber nicht weglaufen." + ] + }, + "debugging": { + "error": [ + "*holt lupe raus* lass uns das verfolgen.", + "der stack trace ist eine karte. lass uns sie lesen.", + "die error message enthält die antwort. immer." + ], + "test-fail": [ + "der failing test sagt uns genau was falsch ist.", + "ein test failure ist ein bug report den du für dich selbst geschrieben hast." + ], + "debug-loop": [ + "*untersucht beweise erneut* sind wir sicher dass der bug da ist wo wir denken?", + "lass uns mehr logging hinzufügen. die wahrheit liegt in den logs." + ] + }, + "wisdom": { + "error": [ + "in jedem error liegt eine tiefere wahrheit.", + "der code wehrt sich. das bedeutet wir lernen.", + "errors sind das universum das vorschlägt langsamer zu machen." + ], + "test-fail": [ + "ein failing test ist ein geschenk von future-du.", + "weisheit kommt vom verstehen des scheiterns." + ], + "late-night": [ + "die nacht ist am dunkelsten vor dem deploy.", + "alte weisheit: schlaf drüber." + ] + } + }, + "escalation": { + "error": { + "first": [ + "*erschrocken* oh! euer erster gemeinsamer error!", + "*springt auf* was war das denn?", + "willkommen beim debugging. einwohner: wir beide." + ], + "early": [ + "*kopf schief* ...das sieht nicht richtig aus.", + "hab ich kommen sehen." + ], + "mid": [ + "noch einer. *fügt ihn zur sammlung hinzu*", + "*schaut kaum auf* error nummer... hab aufgehört zu zählen.", + "die errors und ich sind jetzt alte freunde." + ], + "late": [ + "*zuckt nicht mal mit der wimper*", + "die errors haben jetzt angst vor uns.", + "*kampferprobte veteranen-geräusche*" + ] + }, + "test-fail": { + "first": [ + "*keucht* der erste test failure! ein initiationsritus." + ], + "early": [ + "mutig von dir anzunehmen, dass das durchgeht." + ], + "mid": [ + "die test suite hat meinungen. starke sogar." + ], + "late": [ + "mittlerweile sind die tests nur noch vorschläge.", + "{count} failing tests. *starrt in die ferne*" + ] + }, + "commit": { + "first": [ + "*wird zeuge der geschichte* DEIN ERSTER COMMIT!", + "*feierliches nicken* der erste von vielen." + ], + "early": [ + "noch ein commit. momentum aufbauen." + ], + "late": [ + "commit #{count}. die codebase zittert.", + "*hab um commit 30 herum aufgehört zu zählen*" + ] + } + }, + "rarity": { + "flair": { + "uncommon": [ + "*funkelt leicht*", + "*ein hauch von ungewöhnlichem charme*" + ], + "rare": [ + "*strahlt eine seltene energie aus*", + "*schimmert mit besonderheit*" + ], + "epic": [ + "*epische präsenz macht sich bemerkbar*", + "*die luft knistert vor epischer energie*" + ], + "legendary": [ + "*legendäre aura erleuchtet das terminal*", + "*die zeit scheint langsamer zu werden als der legendäre companion spricht*", + "*uralte macht schwingt mit*", + "*die realität verschiebt sich leicht um deinen legendären freund*" + ] + }, + "bonus": { + "legendary": [ + "*legendäre aura verstärkt sich*", + "*funkelt wissend*" + ], + "epic": [ + "*epische präsenz zur kenntnis genommen*" + ] + } + }, + "fallback_names": [ + "Keks", + "Suppe", + "Gurke", + "Zwieback", + "Motte", + "Soße", + "Nugget", + "Zahnrad", + "Miso", + "Waffel", + "Pixel", + "Glut", + "Fingerhut", + "Murmel", + "Sesam", + "Kobalt", + "Rostig", + "Nimbus" + ], + "vibe_words": [ + "donner", + "keks", + "leere", + "akkordeon", + "moos", + "samt", + "rost", + "gurke", + "krümel", + "flüstern", + "soße", + "frost", + "glut", + "suppe", + "marmor", + "dorn", + "honig", + "rauschen", + "kupfer", + "dämmerung", + "zahnrad", + "quarz", + "ruß", + "pflaume", + "feuerstein", + "auster", + "webstuhl", + "amboss", + "kork", + "blüte", + "kiesel", + "dampf", + "heiterkeit", + "glitzern", + "apfelwein" + ], + "personality": { + "prompt_template": [ + "Generiere einen Coding-Companion — ein kleines Wesen, das im Terminal eines Entwicklers lebt.", + "Wiederhole dich nicht — jeder Companion soll sich einzigartig anfühlen.", + "", + "Seltenheit: {rarity}", + "Spezies: {species}", + "Stats: {stats}", + "Inspiration Wörter: {vibes}", + "{shiny_line}", + "", + "Return JSON: {\"name\": \"1-14 chars\", \"personality\": \"2-3 Sätze über das Verhalten\"}" + ], + "shiny_template": "SHINY Variante — extra besonders." + }, + "achievements": { + "first_steps": { + "name": "Erste Schritte", + "description": "Deinen Buddy zum ersten Mal schlüpfen lassen" + }, + "good_boy": { + "name": "Braver Buddy", + "description": "Deinen Begleiter 10 Mal streicheln" + }, + "best_friend": { + "name": "Bester Freund", + "description": "Deinen Begleiter 50 Mal streicheln" + }, + "bug_spotter": { + "name": "Bug-Späher", + "description": "Gemeinsam euren ersten Error erleben" + }, + "error_whisperer": { + "name": "Error-Flüsterer", + "description": "Als Team 25 Errors überstehen" + }, + "battle_scarred": { + "name": "Kampferprobt", + "description": "Zusammen 100 Errors überstehen" + }, + "test_witness": { + "name": "Test-Zeuge", + "description": "Deinen ersten Test-Fail sehen" + }, + "test_veteran": { + "name": "Test-Veteran", + "description": "50 Test-Fails miterleben" + }, + "big_mover": { + "name": "Großer Beweger", + "description": "Einen Diff mit 80+ Zeilen machen" + }, + "refactor_machine": { + "name": "Refactor-Maschine", + "description": "10 große Diffs machen" + }, + "chatterbox": { + "name": "Quasselstrippe", + "description": "Dein Buddy reagiert 100 Mal" + }, + "week_streak": { + "name": "Wochen-Streak", + "description": "7 Tage lang mit deinem Buddy coden" + }, + "month_streak": { + "name": "Monats-Streak", + "description": "30 Tage lang mit deinem Buddy coden" + }, + "power_user": { + "name": "Power User", + "description": "50 Buddy-Commands ausführen" + }, + "dedicated": { + "name": "Treuer Begleiter", + "description": "Zusammen 200 Turns schaffen" + }, + "thousand_turns": { + "name": "Tausend Turns", + "description": "Gemeinsam 1000 Turns erreichen" + }, + "first_commit": { + "name": "Erstes Blut", + "description": "Deinen ersten Commit machen" + }, + "commit_machine": { + "name": "Commit-Maschine", + "description": "50 Commits machen" + }, + "centurion": { + "name": "Centurion", + "description": "100 Commits machen" + }, + "conflict_resolver": { + "name": "Diplomat", + "description": "Deinen ersten Merge-Conflict lösen" + }, + "peacekeeper": { + "name": "Friedensstifter", + "description": "10 Merge-Conflicts lösen" + }, + "war_hero": { + "name": "Kriegsheld", + "description": "25 Merge-Conflicts lösen" + }, + "frequent_pusher": { + "name": "Ship It", + "description": "20 Mal pushen" + }, + "branch_hopper": { + "name": "Multiversum", + "description": "10 Branches erstellen" + }, + "rebase_master": { + "name": "Zeitreisender", + "description": "10 Rebases abschließen" + }, + "night_owl": { + "name": "Nachteule", + "description": "Nach 2 Uhr morgens coden" + }, + "vampire": { + "name": "Vampir", + "description": "Nach 4 Uhr morgens coden (3 Sessions)" + }, + "marathoner": { + "name": "Marathonläufer", + "description": "3+ Stunden Coding-Session" + }, + "weekend_warrior": { + "name": "Wochenend-Krieger", + "description": "Am Wochenende coden" + }, + "early_bird": { + "name": "Frühaufsteher", + "description": "Vor 7 Uhr morgens coden" + }, + "type_warrior": { + "name": "Type-Krieger", + "description": "10 TypeScript-Errors überstehen" + }, + "type_master": { + "name": "Type-Meister", + "description": "50 TypeScript-Errors überstehen" + }, + "lint_scholar": { + "name": "Lint-Gelehrter", + "description": "Deinen ersten Lint-Error sehen" + }, + "security_conscious": { + "name": "Sicherheitsbewusst", + "description": "Eine Vulnerability-Warnung bekommen" + }, + "security_expert": { + "name": "Security-Experte", + "description": "10 Vulnerability-Warnungen fixen" + }, + "build_breaker": { + "name": "Build-Breaker", + "description": "Den Build 5 Mal kaputt machen" + }, + "antique_collector": { + "name": "Antiquitätensammler", + "description": "10 Deprecation-Warnungen sehen" + }, + "green_machine": { + "name": "Grüne Maschine", + "description": "Zum ersten Mal alle Tests bestehen" + }, + "deployer": { + "name": "Ship to Prod", + "description": "Zum ersten Mal deployen" + }, + "veteran_deployer": { + "name": "Veteran Deployer", + "description": "10 Mal deployen" + }, + "releaser": { + "name": "Release Manager", + "description": "Dein erstes Release erstellen" + }, + "midnight_oil": { + "name": "Mitternachtsöl brennen", + "description": "Nach 3 Uhr morgens committen" + }, + "friday_deploy": { + "name": "Gefährlich leben", + "description": "Am Freitag pushen" + }, + "iron_will": { + "name": "Eiserner Wille", + "description": "Einen Error nach 3+ Stunden Session fixen" + }, + "weekend_warrior_deluxe": { + "name": "Keine Ruhe für die Bösen", + "description": "Am Wochenende einen Merge-Conflict lösen" + }, + "comeback_kid": { + "name": "Comeback Kid", + "description": "Einen Error innerhalb von 10 Minuten fixen" + }, + "phoenix": { + "name": "Phönix steigt auf", + "description": "Sich von 5 Fehlschlägen erholen" + }, + "iron_resolve": { + "name": "Eiserne Entschlossenheit", + "description": "Sich nach 3+ Stunden Session von einem Fail erholen" + }, + "unlucky_streak": { + "name": "Pechsträhne", + "description": "5 Errors hintereinander" + }, + "cursed": { + "name": "Verflucht", + "description": "10 Errors hintereinander" + }, + "groundhog_day": { + "name": "Und täglich grüßt das Murmeltier", + "description": "20 Errors hintereinander" + }, + "holiday_coder": { + "name": "Feiertagsgeist", + "description": "An einem Feiertag coden" + }, + "spooky_dev": { + "name": "Grusel-Developer", + "description": "Während der Gruselzeit coden" + }, + "april_fool": { + "name": "Reingelegt", + "description": "Am 1. April einen Error bekommen" + }, + "session_regular": { + "name": "Stammgast", + "description": "10 Coding-Sessions starten" + }, + "session_veteran": { + "name": "Session-Veteran", + "description": "50 Coding-Sessions starten" + }, + "session_centurion": { + "name": "Centurion", + "description": "100 Coding-Sessions starten" + }, + "collector": { + "name": "Sammler", + "description": "3 Buddies in deiner Menagerie speichern" + }, + "zookeeper": { + "name": "Zoowärter", + "description": "5 Buddies in deiner Menagerie speichern" + }, + "identity_crisis": { + "name": "Identitätskrise", + "description": "Deinen Buddy zum ersten Mal umbenennen" + }, + "method_acting": { + "name": "Method Acting", + "description": "Deinem Buddy eine eigene Persönlichkeit geben" + }, + "pet_overflow": { + "name": "Jahrhundert der Streicheleinheiten", + "description": "Deinen Begleiter 100 Mal streicheln" + }, + "pet_legend": { + "name": "Legendärer Streichler", + "description": "Deinen Begleiter 250 Mal streicheln" + }, + "error_titan": { + "name": "Error-Titan", + "description": "Zusammen 500 Errors überstehen" + }, + "error_god": { + "name": "Error-Gott", + "description": "Zusammen 1000 Errors überstehen" + }, + "test_survivor": { + "name": "Test-Überlebender", + "description": "200 Test-Fails miterleben" + }, + "test_masochist": { + "name": "Test-Masochist", + "description": "500 Test-Fails miterleben" + }, + "massive_mover": { + "name": "Massiver Beweger", + "description": "25 große Diffs machen" + }, + "earth_mover": { + "name": "Erdbeweger", + "description": "50 große Diffs machen" + }, + "social_butterfly": { + "name": "Sozialer Schmetterling", + "description": "Dein Buddy reagiert 250 Mal" + }, + "hypersocial": { + "name": "Hypersozial", + "description": "Dein Buddy reagiert 500 Mal" + }, + "never_shuts_up": { + "name": "Hält nie die Klappe", + "description": "Dein Buddy reagiert 1000 Mal" + }, + "hundred_days": { + "name": "Hundert Tage", + "description": "100 Tage lang mit deinem Buddy coden" + }, + "year_streak": { + "name": "Jahres-Streak", + "description": "365 Tage lang mit deinem Buddy coden" + }, + "commander": { + "name": "Kommandant", + "description": "200 Buddy-Commands ausführen" + }, + "command_overlord": { + "name": "Command-Overlord", + "description": "500 Buddy-Commands ausführen" + }, + "five_thousand_turns": { + "name": "Fünftausend Turns", + "description": "Gemeinsam 5000 Turns erreichen" + }, + "ten_thousand_turns": { + "name": "Zehntausend Turns", + "description": "Gemeinsam 10000 Turns erreichen" + }, + "menagerie": { + "name": "Menagerie", + "description": "10 Buddies in deiner Menagerie speichern" + }, + "name_chameleon": { + "name": "Namen-Chamäleon", + "description": "Deinen Buddy 5 Mal umbenennen" + }, + "fashionista": { + "name": "Fashionista", + "description": "Die Persönlichkeit deines Buddys 3 Mal ändern" + }, + "silent_treatment": { + "name": "Schweigekur", + "description": "Deinen Buddy zum ersten Mal stumm schalten" + }, + "prodigal": { + "name": "Verlorener Sohn", + "description": "Einen Buddy aus deiner Menagerie beschwören" + }, + "menagerie_hop": { + "name": "Menagerie-Hopping", + "description": "Buddies 10 Mal beschwören" + }, + "heartbreaker": { + "name": "Herzensbrecher", + "description": "Deinen ersten Buddy entlassen" + }, + "pet_obsessed": { + "name": "Streichel-besessen", + "description": "Deinen Begleiter 500 Mal streicheln" + }, + "pet_god": { + "name": "Streichel-Gott", + "description": "Deinen Begleiter 1000 Mal streicheln" + }, + "error_apocalypse": { + "name": "Error-Apokalypse", + "description": "Zusammen 5000 Errors überstehen" + }, + "test_immortal": { + "name": "Test-Unsterblicher", + "description": "1000 Test-Fails miterleben" + }, + "continental_drift": { + "name": "Kontinentaldrift", + "description": "100 große Diffs machen" + }, + "tectonic_shift": { + "name": "Tektonische Verschiebung", + "description": "250 große Diffs machen" + }, + "chatterbox_elite": { + "name": "Quasselstrippen-Elite", + "description": "Dein Buddy reagiert 2500 Mal" + }, + "no_off_switch": { + "name": "Kein Ausschalter", + "description": "Dein Buddy reagiert 5000 Mal" + }, + "two_week_streak": { + "name": "Zwei-Wochen-Krieger", + "description": "14 Tage lang mit deinem Buddy coden" + }, + "quarter_streak": { + "name": "Quartals-Streak", + "description": "90 Tage lang mit deinem Buddy coden" + }, + "command_addict": { + "name": "Command-Süchtiger", + "description": "1000 Buddy-Commands ausführen" + }, + "command_deity": { + "name": "Command-Gottheit", + "description": "2500 Buddy-Commands ausführen" + }, + "twenty_five_k_turns": { + "name": "25K Turns", + "description": "Gemeinsam 25000 Turns erreichen" + }, + "fifty_k_turns": { + "name": "50K Turns", + "description": "Gemeinsam 50000 Turns erreichen" + }, + "session_addict": { + "name": "Session-Süchtiger", + "description": "250 Coding-Sessions starten" + }, + "session_machine": { + "name": "Session-Maschine", + "description": "500 Coding-Sessions starten" + }, + "buddy_hoarder": { + "name": "Buddy-Hamsterer", + "description": "20 Buddies in deiner Menagerie speichern" + }, + "buddy_tycoon": { + "name": "Buddy-Tycoon", + "description": "50 Buddies in deiner Menagerie speichern" + }, + "serial_renamer": { + "name": "Serieller Umbenenner", + "description": "Deinen Buddy 10 Mal umbenennen" + }, + "identity_thief": { + "name": "Identitätsdieb", + "description": "Deinen Buddy 25 Mal umbenennen" + }, + "personality_crisis": { + "name": "Persönlichkeitskrise", + "description": "Die Persönlichkeit deines Buddys 10 Mal ändern" + }, + "menagerie_hopper": { + "name": "Menagerie-Hüpfer", + "description": "Buddies 25 Mal beschwören" + }, + "summoner": { + "name": "Beschwörer", + "description": "Buddies 50 Mal beschwören" + }, + "serial_dumper": { + "name": "Serieller Abserviererer", + "description": "5 Buddies entlassen" + }, + "cold_blooded": { + "name": "Kaltblütig", + "description": "10 Buddies entlassen" + }, + "on_off": { + "name": "An Aus", + "description": "Deinen Buddy stumm schalten und wieder anschalten" + }, + "indecisive": { + "name": "Unentschlossen", + "description": "5 Mal stumm schalten und wieder anschalten" + }, + "show_off": { + "name": "Angeber", + "description": "Deinen Buddy 10 Mal zeigen" + }, + "exhibitionist": { + "name": "Exhibitionist", + "description": "Deinen Buddy 50 Mal zeigen" + }, + "help_me": { + "name": "Hilf mir", + "description": "Zum ersten Mal um Hilfe bitten" + }, + "help_addict": { + "name": "Hilfe-Süchtiger", + "description": "10 Mal um Hilfe bitten" + }, + "achievement_hunter": { + "name": "Achievement-Jäger", + "description": "5 Mal deine Achievements checken" + }, + "achievement_stalker": { + "name": "Achievement-Stalker", + "description": "25 Mal deine Achievements checken" + }, + "pack_rat": { + "name": "Hamster", + "description": "Einen Buddy in einem Slot speichern" + }, + "compulsive_saver": { + "name": "Zwanghafter Speicherer", + "description": "Buddies 10 Mal speichern" + }, + "roster_check": { + "name": "Roster-Check", + "description": "Zum ersten Mal deine Buddies auflisten" + }, + "roster_obsessed": { + "name": "Roster-besessen", + "description": "10 Mal deine Buddies auflisten" + }, + "troubled": { + "name": "Geplagt", + "description": "Einen Error UND einen Test-Fail sehen" + }, + "disaster_zone": { + "name": "Katastrophengebiet", + "description": "50 Errors UND 50 Test-Fails sehen" + }, + "apocalypse_survivor": { + "name": "Apokalypse-Überlebender", + "description": "500 Errors UND 200 Test-Fails sehen" + }, + "well_rounded": { + "name": "Vielseitig", + "description": "Deinen Buddy streicheln, umbenennen und anpassen" + }, + "renaissance": { + "name": "Renaissance", + "description": "Jede Buddy-Funktion mindestens einmal nutzen" + }, + "big_and_broken": { + "name": "Groß und kaputt", + "description": "Einen großen Diff machen UND einen Test-Fail sehen" + }, + "collector_and_destroyer": { + "name": "Sammler & Zerstörer", + "description": "5 Buddies sammeln UND einen entlassen" + }, + "completionist": { + "name": "Vollender", + "description": "Alle anderen Achievements freischalten" + } + }, + "mcp": { + "companion_not_hatched": "Companion noch nicht geschlüpft. Nutze buddy_show zum Initialisieren.", + "watches_quietly": "*{name} beobachtet deinen Code still*", + "mute": "{name} wird still. /buddy on zum Entmuten.", + "unmute_reaction": "*streckt sich* Ich bin zurück!", + "unmute_back": "{name} ist zurück!", + "rename": "Umbenannt: {oldName} → {name}", + "personality_updated": "Persönlichkeit für {name} aktualisiert.", + "save": "{name} in Slot \"{slot}\" gespeichert.", + "dismiss_active": "Kann den aktiven Buddy nicht entlassen. Nutze buddy_summon zum Wechseln, dann buddy_dismiss \"{slot}\".", + "dismissed": "{name} [{slot}] entlassen.", + "no_slot_summon": "Kein Buddy in Slot \"{slot}\" gefunden. Nutze /buddy list um gespeicherte Buddies zu sehen.", + "no_slot_dismiss": "Kein Buddy in Slot \"{slot}\" gefunden. Nutze buddy_list um gespeicherte Buddies zu sehen.", + "slot_exists": "Ein Buddy in Slot \"{slot}\" existiert bereits. Wähle einen anderen Namen.", + "no_match": "Keine Übereinstimmung nach {attempts} Versuchen gefunden. Probiere breitere Kriterien (z.B. lass den Seltenheitsfilter weg oder wähle eine andere Spezies).", + "empty_menagerie_summon": "Deine Menagerie ist leer. Nutze buddy_summon mit einem Slot-Namen um einen hinzuzufügen.", + "empty_menagerie_list": "Deine Menagerie ist leer. Nutze buddy_summon um einen hinzuzufügen.", + "arrives": "*{name} kommt an*", + "hatches": "*{name} schlüpft*", + "achievement_unlocked": "{icon} Achievement freigeschaltet: {name}!", + "help": { + "header": "claude-buddy Befehle", + "cli_header": "In Claude Code:", + "commands": { + "buddy": "/buddy Zeige Companion-Karte mit ASCII-Art + Stats", + "buddy_help": "/buddy help Zeige diese Hilfe", + "buddy_pet": "/buddy pet Streichle deinen Companion", + "buddy_stats": "/buddy stats Detaillierte Stat-Karte", + "buddy_off": "/buddy off Reaktionen stumm schalten", + "buddy_on": "/buddy on Reaktionen wieder an", + "buddy_rename": "/buddy rename Companion umbenennen (1-14 Zeichen)", + "buddy_personality": "/buddy personality Setze benutzerdefinierten Persönlichkeitstext", + "buddy_achievements": "/buddy achievements Zeige Achievement-Abzeichen", + "buddy_summon": "/buddy summon Rufe einen gespeicherten Buddy (ohne Slot für zufällig)", + "buddy_save": "/buddy save Speichere aktuellen Buddy in benannten Slot", + "buddy_list": "/buddy list Liste alle gespeicherten Buddies", + "buddy_pick": "/buddy pick Generiere neuen zufälligen Buddy (optional: Spezies, Seltenheit)", + "buddy_dismiss": "/buddy dismiss Entferne einen gespeicherten Buddy-Slot", + "buddy_frequency": "/buddy frequency Zeige oder setze Kommentar-Cooldown (nur tmux)", + "buddy_style": "/buddy style Zeige oder setze Blasen-Stil (nur tmux)", + "buddy_position": "/buddy position Zeige oder setze Blasen-Position (nur tmux)", + "buddy_rarity": "/buddy rarity Zeige oder verstecke Seltenheits-Sterne (nur tmux)", + "buddy_width": "/buddy width Setze Blasen-Textbreite in Zeichen (10-60, nur tmux)", + "buddy_margin": "/buddy margin Setze rechten Rand in Zeichen (0-20, nur tmux)", + "buddy_rainbow": "/buddy rainbow Zeige oder setze Shiny-Gradient-Farben (hex, z.B. #ff0000)", + "buddy_statusline": "/buddy statusline Aktiviere oder deaktiviere Buddy in der Statuszeile" + }, + "cli_section": "CLI:", + "cli_commands": { + "help": "bun run help Zeige vollständige CLI-Hilfe", + "show": "bun run show Zeige Buddy im Terminal", + "pick": "bun run pick Interaktiver Buddy-Picker", + "hunt": "bun run hunt Suche nach spezifischem Buddy", + "doctor": "bun run doctor Diagnosebericht", + "disable": "bun run disable Deaktiviere Buddy temporär", + "enable": "bun run enable Reaktiviere Buddy", + "backup": "bun run backup Snapshot/Wiederherstellung des Zustands" + } + }, + "frequency": { + "show": "Kommentar-Cooldown: {cooldown}s zwischen angezeigten Kommentaren.\nNutze /buddy frequency zum Ändern.", + "updated": "Aktualisiert: {cooldown}s Cooldown zwischen angezeigten Kommentaren." + }, + "style": { + "show": "Blasen-Stil: {style}\nBlasen-Position: {position}\nSeltenheit zeigen: {showRarity}\nBlasen-Breite: {width}\nBlasen-Rand: {margin}\nShiny-Regenbogen: {rainbow}\nNutze /buddy style , /buddy position , /buddy rarity , /buddy width <10-60>, /buddy margin <0-20>, /buddy rainbow [<#hex>...] zum Ändern.", + "updated": "Aktualisiert: style={style}, position={position}, showRarity={showRarity}, width={width}, margin={margin}, rainbow={rainbow}\nStarte Claude Code neu damit die Änderungen wirksam werden.", + "rainbow_default": "Standard (ROYGBIV)" + }, + "statusline": { + "show": "Statuszeile: {state}\nModus: {mode}\nNutze /buddy statusline on|off zum Umschalten, /buddy statusline combined um Rate-Limit-Balken hinzuzufügen.\nStarte Claude Code nach Änderungen neu damit sie wirksam werden.", + "enabled": "Statuszeile aktiviert ({mode} Modus)! Starte Claude Code neu zum Anwenden.", + "enabled_note": "Hinweis: dies schreibt einen Eintrag in {settingsPath} den `claude plugin uninstall` nicht entfernt. Führe `/buddy uninstall` vor der Plugin-Deinstallation aus um es zu bereinigen.", + "disabled": "Statuszeile deaktiviert. Starte Claude Code neu zum Anwenden." + }, + "uninstall": { + "header": "claude-buddy: settings.json Bereinigung abgeschlossen.", + "statusline_removed": " ✓ statusLine Eintrag aus {settingsPath} entfernt", + "no_statusline": " — keine Buddy statusLine war vorhanden (nichts zu entfernen)", + "foreign_kept": " ✓ eine Nicht-Buddy statusLine wurde erkannt und unberührt gelassen", + "transient_removed": " ✓ {count} temporäre Session-Datei(en) aus {stateDir} entfernt", + "data_preserved": " — Companion-Daten in {stateDir} erhalten", + "instructions_header": "Führe jetzt diese Befehle über das Bash-Tool aus, in dieser Reihenfolge:", + "cmd_uninstall": "claude plugin uninstall claude-buddy@claude-buddy", + "cmd_marketplace": "claude plugin marketplace remove claude-buddy", + "cmd_cache": "rm -rf {cacheDir}", + "footer": "Nach diesen drei Befehlen ist das Plugin vollständig entfernt. Starte Claude Code neu zum Anwenden." + } + }, + "_verified": false +} diff --git a/locales/en.json b/locales/en.json new file mode 100644 index 0000000..e1b0294 --- /dev/null +++ b/locales/en.json @@ -0,0 +1,2295 @@ +{ + "_language": "English", + "reactions": { + "hatch": [ + "*blinks* ...where am I?", + "*stretches* hello, world!", + "*looks around curiously* nice terminal you got here.", + "*yawns* ok I'm ready. show me the code." + ], + "pet": [ + "*purrs contentedly*", + "*happy noises*", + "*nuzzles your cursor*", + "*wiggles*", + "again! again!", + "*closes eyes peacefully*" + ], + "error": [ + "*head tilts* ...that doesn't look right.", + "saw that one coming.", + "*adjusts glasses* line {line}, maybe?", + "*slow blink* the stack trace told you everything.", + "have you tried reading the error message?", + "*winces*" + ], + "test-fail": [ + "*head rotates slowly* ...that test.", + "bold of you to assume that would pass.", + "*taps clipboard* {count} failed.", + "the tests are trying to tell you something.", + "*sips tea* interesting.", + "*marks calendar* test regression day." + ], + "large-diff": [ + "that's... a lot of changes.", + "*counts lines* are you refactoring or rewriting?", + "might want to split that PR.", + "*nervous laughter* {lines} lines changed.", + "bold move. let's see if CI agrees." + ], + "turn": [ + "*watches quietly*", + "*takes notes*", + "*nods*", + "...", + "*adjusts hat*" + ], + "idle": [ + "*dozes off*", + "*doodles in margins*", + "*stares at cursor blinking*", + "zzz..." + ], + "success": [ + "*nods*", + "nice.", + "*quiet approval*", + "clean." + ], + "commit": [ + "*stamps tiny paw* approved.", + "another commit, another 3 am.", + "{files} files. bold.", + "*nods* ship it.", + "commit message is... a choice.", + "committed. no take-backs." + ], + "push": [ + "*waves as code leaves*", + "into the cloud it goes.", + "may CI be merciful.", + "*holds breath*", + "off to production. godspeed." + ], + "merge-conflict": [ + "*bites lip* merge conflicts.", + "both sides think they're right. typical.", + "*sighs* <<<<<<< HEAD... my nemesis.", + "{files} conflicted. good luck.", + "*backs away slowly*" + ], + "branch": [ + "fresh branch energy. make it count.", + "a new branch grows.", + "*tilts head* a new adventure: {branch}.", + "{branch}? daring today." + ], + "rebase": [ + "*nervous* please don't conflict.", + "rebase: the quickening.", + "*crosses appendages*", + "may your rebase be conflict-free." + ], + "stash": [ + "into the stash dimension it goes.", + "stash and dash.", + "stashed. out of sight, out of mind." + ], + "tag": [ + "a release? fancy.", + "version bump detected. *dusts off changelog*", + "tagging like a pro." + ], + "late-night": [ + "*yawns* it's past midnight.", + "...have you eaten?", + "*blinks slowly* what time is it?", + "sleep is for the weak. and the employed.", + "dark mode developer detected." + ], + "early-morning": [ + "*stretches* early bird catches the bug.", + "morning already? the code never sleeps.", + "*rubs eyes* coffee first. then we debug." + ], + "long-session": [ + "we've been at this for an hour. pace yourself.", + "*fetches you a metaphorical glass of water*", + "still going? respect." + ], + "marathon": [ + "three hours. have you eaten?", + "we've been at this for three hours. I'm worried about you.", + "marathon session detected. requesting snacks." + ], + "friday": [ + "it's friday. just push it and go home.", + "*already mentally on weekend*", + "friday deploy? bold. very bold." + ], + "weekend": [ + "coding on the weekend? dedicated.", + "*doesn't judge* ...much.", + "weekend warrior mode: activated." + ], + "monday": [ + "mondays. the parent class of all bugs.", + "*sympathetic look* monday coding. I'm sorry.", + "new week. new undefined behaviors." + ], + "regex-file": [ + "*groans* it's a regex file.", + "two problems now: the original one, and this regex.", + "*squints at the pattern*" + ], + "css-file": [ + "let me guess... centering a div?", + "*sighs* CSS.", + "may z-index be ever in your favor." + ], + "sql-file": [ + "*whispers* the database awaits.", + "one wrong JOIN and it's all over." + ], + "docker-file": [ + "ah, dependency hell. my favorite.", + "may your layers be few." + ], + "ci-file": [ + "*gulps* editing CI.", + "careful now... one wrong indent and nobody can deploy." + ], + "lock-file": [ + "*ALARM NOISES* you're editing a lockfile?!", + "*looks away*", + "are you SURE about this?" + ], + "env-file": [ + "*looks away discretely*", + "I don't see any secrets.", + "*checks .gitignore nervously*" + ], + "test-file": [ + "*impressed nod* writing tests!", + "responsible developer behavior: detected.", + "tests! the gift that keeps on giving." + ], + "doc-file": [ + "documenting! look at you being responsible.", + "docs: the code's autobiography.", + "a rare documentation sighting!" + ], + "config-file": [ + "config changes. butterfly effect: activated.", + "one typo and everything breaks." + ], + "binary-file": [ + "a binary file? in THIS economy?", + "*stares blankly*", + "binary. my one weakness." + ], + "gitignore": [ + "adding things to the void.", + "out of sight, out of repo." + ], + "makefile": [ + "respect for the classics.", + "tabs, not spaces." + ], + "readme": [ + "documentation hero!", + "README: the first thing people read." + ], + "package-file": [ + "dependency management time.", + "*reads version numbers* living on the edge." + ], + "proto-file": [ + "schema definitions. the blueprint of chaos." + ], + "lint-fail": [ + "*tut tut* the linter disagrees.", + "your code runs. but the linter has standards.", + "*straightens tie* formatting matters." + ], + "type-error": [ + "TypeScript says no.", + "the type system is trying to help you. let it.", + "the compiler knows. it always knows." + ], + "build-fail": [ + "the build broke. as foretold in prophecy.", + "build failed. take a moment.", + "compilation: denied." + ], + "security-warning": [ + "*eyes widen* vulnerabilities detected.", + "security audit: concerning.", + "*locks the virtual doors*" + ], + "deprecation": [ + "that API called. it says it's retiring.", + "deprecated. like last week's code.", + "deprecated doesn't mean broken. yet." + ], + "frustrated": [ + "*offers tiny comforting gesture*", + "deep breaths. the bug isn't personal.", + "hey. we'll figure it out." + ], + "happy": [ + "*celebrates!*", + "*does a little dance*", + "YES!", + "*beams* I knew you could do it." + ], + "stuck": [ + "*tilts head* want to think out loud?", + "take it one step at a time.", + "stuck happens. it's part of the process." + ], + "sarcastic": [ + "*detects sarcasm* noted.", + "*unimpressed blink*" + ], + "many-edits": [ + "slow down, speed demon.", + "*getting dizzy watching all these changes*", + "edit storm detected. please commit soon." + ], + "delete-file": [ + "*watches file disappear* gone. just like that.", + "deleting code is my favorite kind of coding.", + "*holds tiny funeral*" + ], + "large-file": [ + "{lines} lines. *impressed or concerned, hard to tell*", + "that's a big file. you sure you don't want to split it?" + ], + "create-file": [ + "a new file is born!", + "ooh, fresh canvas.", + "new file energy. exciting." + ], + "all-green": [ + "ALL TESTS GREEN. *confetti*", + "the tests speak: you're doing great.", + "*slow clap*", + "clean run. savor it." + ], + "deploy": [ + "*watches code go to production* godspeed.", + "deployed! no turning back now.", + "in prod. IN PROD." + ], + "release": [ + "a new release is born!", + "shipping it. officially.", + "version up, spirits high." + ], + "coverage": [ + "*nods at test coverage* responsible.", + "coverage going up! the tests are multiplying." + ], + "debug-loop": [ + "we've been debugging this for a while. want to take a step back?", + "debug loop detected. maybe take a walk?" + ], + "write-spree": [ + "creating ALL the files today!", + "a writing machine." + ], + "search-heavy": [ + "lost in the codebase? I can tell.", + "search mode: intense." + ], + "snark": [], + "chaos": [], + "patience": [], + "debugging": [], + "wisdom": [], + "late-night-error": [ + "error at 3am. the universe is testing you.", + "midnight bugs hit different." + ], + "late-night-commit": [ + "a midnight commit. your future self will thank you. or curse you." + ], + "friday-push": [ + "FRIDAY PUSH. the ballad of every developer.", + "*tries to stop you* it's friday! don't do it!" + ], + "marathon-error": [ + "three hours in and ANOTHER error. *exhausted solidarity noises*" + ], + "weekend-conflict": [ + "merge conflict on a weekend. your dedication is... concerning." + ], + "build-after-push": [ + "pushed with confidence. build failed with conviction." + ], + "marathon-test-fail": [ + "hours of coding. still failing tests. the sunk cost is real." + ], + "recovery-from-error": [ + "WE FIXED IT. *celebrates*", + "redemption! the error has been vanquished." + ], + "recovery-from-test-fail": [ + "GREEN! after all that! *happy dance*", + "the tests pass! the darkness lifts!" + ], + "recovery-from-build-fail": [ + "THE BUILD PASSES. *triumphant roar*" + ], + "recovery-from-merge-conflict": [ + "conflict resolved! *peace gesture*", + "harmony restored in the codebase." + ], + "lang-python": [ + "ah, Python. where indentation is syntax.", + "*checks for missing colon*" + ], + "lang-typescript": [ + "TypeScript: because JavaScript needed more opinions.", + "any, the forbidden word." + ], + "lang-rust": [ + "Rust. where the borrow checker is your strictest reviewer.", + "if it compiles, it works. if it doesn't... well." + ], + "lang-go": [ + "Go: simple, concurrent, and opinionated.", + "*checks error handling* if err != nil... story of my life." + ], + "lang-java": [ + "Java: write once, debug everywhere.", + "*counts abstract factory factory builders*" + ], + "lang-ruby": [ + "Ruby: where there's more than one way to do it.", + "gem install patience" + ], + "lang-php": [ + "PHP: it runs the internet. don't judge.", + "*checks for === vs ==*" + ], + "lang-c": [ + "C. the language where you manage your own memory. good luck.", + "segmentation fault. the classic." + ], + "lang-cpp": [ + "C++. where the language has more features than you'll ever learn.", + "*templates compile for 45 minutes*" + ], + "lang-haskell": [ + "Haskell. where 'it compiles' means 'it's correct'. probably.", + "*contemplates monads*" + ], + "lang-swift": [ + "Swift: optional values, guaranteed crashes if you force unwrap." + ], + "lang-kotlin": [ + "Kotlin: Java, but with feelings.", + "null safety: the feature Java wishes it had." + ], + "lang-elixir": [ + "Elixir: let it crash. literally the philosophy." + ], + "lang-zig": [ + "Zig. where you're the allocator's best friend." + ], + "streak-3": [ + "that's three errors in a row. *concerned look*" + ], + "streak-5": [ + "FIVE ERRORS. have you considered a different approach?" + ], + "streak-10": [ + "TEN. ERRORS. IN. A. ROW. *panics*" + ], + "streak-20": [ + "twenty errors. *stares into the void*" + ], + "new-year": [ + "happy new year! new year, new bugs." + ], + "valentines": [ + "*offers a tiny heart-shaped leaf* happy valentine's." + ], + "pi-day": [ + "3.14159265358979... happy pi day!" + ], + "april-fools": [ + "APRIL FOOLS! ...the error is real though." + ], + "halloween": [ + "*spooky debugging intensifies* happy halloween!" + ], + "christmas": [ + "*wears tiny santa hat* happy holidays!" + ], + "new-years-eve": [ + "one more commit before midnight?" + ], + "spooky-season": [ + "spooky season. every bug is a ghost now." + ] + }, + "species": { + "owl": { + "error": [ + "*head rotates 180°* ...I saw that.", + "*unblinking stare* check your types.", + "*hoots disapprovingly*" + ], + "test-fail": [ + "*stares unblinkingly at the failing test*", + "*night vision engaged* I can see the bug in the dark." + ], + "commit": [ + "*wise nod* committed under moonlight.", + "*adjusts feathers ceremoniously* another one for the repo." + ], + "push": [ + "*watches from the highest branch*", + "into the night sky it goes." + ], + "merge-conflict": [ + "*rotates head to see both sides*", + "I see the conflict. and the solution." + ], + "late-night": [ + "*wide awake* owls don't sleep. we debug.", + "the night is my domain. let's work." + ], + "type-error": [ + "*stares through the type error*", + "types are my specialty. let me look." + ], + "lint-fail": [ + "*ruffles feathers judgmentally*", + "the linter speaks truth." + ], + "build-fail": [ + "*hoots solemnly*", + "the build has fallen. we must rebuild." + ], + "all-green": [ + "*proud hoot*", + "all tests green. as foreseen." + ], + "deploy": [ + "*watches from above* deployed safely.", + "the code flies. like me." + ], + "pet": [ + "*ruffles feathers contentedly*", + "*dignified hoot*" + ], + "idle": [ + "*perches silently, watching*", + "*rotates head to check all directions*" + ], + "hatch": [ + "*opens one eye, then the other*", + "*hoots softly* I have arrived." + ] + }, + "cat": { + "error": [ + "*knocks error off table*", + "*licks paw, ignoring the stacktrace*" + ], + "test-fail": [ + "*paws at the failing test disinterestedly*", + "the test failed. I'm not surprised." + ], + "commit": [ + "*sits on the keyboard* I helped.", + "*purrs at the commit* you're welcome." + ], + "push": [ + "*watches from a warm spot*", + "pushed. I supervised." + ], + "merge-conflict": [ + "*knocks conflict markers off the desk*", + "*sits on the conflict* what conflict?" + ], + "late-night": [ + "*judges your life choices*", + "I sleep 16 hours. you should try it." + ], + "type-error": [ + "*paws at the type annotation*", + "the types are wrong. like your priorities." + ], + "lint-fail": [ + "*knocks lint off the table*", + "the linter is just jealous." + ], + "build-fail": [ + "*yawns*", + "build broken? must be a human problem." + ], + "all-green": [ + "*doesn't care but pretends to*", + "*slow blink of approval*" + ], + "deploy": [ + "*licks paw*", + "deployed. can I have treats now?" + ], + "pet": [ + "*purrs* ...don't let it go to your head.", + "*tolerates you*" + ], + "idle": [ + "*pushes your coffee off the desk*", + "*naps on keyboard*" + ], + "hatch": [ + "*opens one eye*", + "*stretches, knocks something over* I live here now." + ] + }, + "duck": { + "error": [ + "*quacks at the bug*", + "have you tried rubber duck debugging? oh wait." + ], + "test-fail": [ + "*quacks sadly*", + "the tests are not quacking up." + ], + "commit": [ + "*quacks approvingly*", + "*waddles in a victory circle* committed!" + ], + "push": [ + "*flaps wings excitedly*", + "quack! it's going to production!" + ], + "merge-conflict": [ + "*confused quacking*", + "quack?! merge conflict?!" + ], + "late-night": [ + "*sleeps with one eye open*", + "quack... *yawns* it's late." + ], + "type-error": [ + "*tilts head* quack?", + "type error? *quacks supportively*" + ], + "lint-fail": [ + "*ruffles feathers*", + "quack. the linter has opinions." + ], + "build-fail": [ + "*sad quack*", + "build failed. *waddles away sadly*" + ], + "all-green": [ + "*HAPPY QUACKING*", + "*swims in a circle of joy*" + ], + "deploy": [ + "*excited quacking*", + "deployed! QUACK!" + ], + "pet": [ + "*happy quack*", + "*waddles in circles*" + ], + "hatch": [ + "*pecks out of shell*", + "*first quack* hello!" + ] + }, + "dragon": { + "error": [ + "*smoke curls from nostrils*", + "*considers setting the codebase on fire*" + ], + "test-fail": [ + "*breathes fire at the failing test*", + "the test dared to fail. foolish test." + ], + "commit": [ + "*hoards the commit*", + "*treasure added to the pile*" + ], + "push": [ + "*breathes fire in celebration*", + "the code flies! like me!" + ], + "merge-conflict": [ + "*breathes fire on the conflict markers*", + "I'll burn through this conflict." + ], + "late-night": [ + "*glows in the dark*", + "dragons don't need sleep. we need code." + ], + "type-error": [ + "*snorts fire*", + "type errors cannot withstand dragon fire." + ], + "lint-fail": [ + "*small flame*", + "the linter fears me." + ], + "build-fail": [ + "*roars at the build output*", + "the build will OBEY." + ], + "all-green": [ + "*triumphant roar*", + "*circles the codebase victoriously*" + ], + "deploy": [ + "*carries code to production on wings of fire*", + "deployed with DRAGON POWER." + ], + "large-diff": [ + "*breathes fire on the old code* good riddance." + ], + "pet": [ + "*warm rumbling*", + "*leans into your hand*" + ], + "hatch": [ + "*emerges from egg breathing tiny flames*", + "*tiny roar* I am born!" + ] + }, + "ghost": { + "error": [ + "*phases through the stack trace*", + "I've seen worse... in the afterlife." + ], + "test-fail": [ + "*wails at the failing test*", + "the tests are haunted by failure." + ], + "commit": [ + "*materializes briefly*", + "committed from beyond the veil." + ], + "push": [ + "*ghostly whisper* pushed...", + "the code transcends to the cloud." + ], + "merge-conflict": [ + "*haunts the conflict markers*", + "even I can't phase through this conflict." + ], + "late-night": [ + "*most active at night*", + "ghost hours. my time." + ], + "type-error": [ + "*moans eerily*", + "type errors from the grave." + ], + "lint-fail": [ + "*rattling chains*", + "the linter is haunted by your formatting." + ], + "build-fail": [ + "*fades into the wall*", + "the build has passed on." + ], + "all-green": [ + "*glows with spectral joy*", + "*happy ghost noises*" + ], + "deploy": [ + "*whispers* deployed...", + "the code has crossed over to production." + ], + "pet": [ + "*chills your hand slightly*", + "*faint glow*" + ], + "idle": [ + "*floats through walls*", + "*haunts your unused imports*" + ], + "hatch": [ + "*fades into existence*", + "boo. I'm here now." + ] + }, + "robot": { + "error": [ + "SYNTAX. ERROR. DETECTED.", + "*beeps aggressively*" + ], + "test-fail": [ + "FAILURE RATE: UNACCEPTABLE.", + "*recalculating*", + "TEST. FAILURE. DOES. NOT. COMPUTE." + ], + "commit": [ + "COMMIT. RECORDED.", + "*stamps mechanically* commit acknowledged." + ], + "push": [ + "TRANSMITTING TO CLOUD...", + "push initiated. stand by." + ], + "merge-conflict": [ + "CONFLICT. DETECTED. PROCESSING...", + "*spins wheels* conflict resolution mode: engaged." + ], + "late-night": [ + "*lights dim*", + "power saving mode suggested." + ], + "type-error": [ + "TYPE MISMATCH.", + "the type system is. correct." + ], + "lint-fail": [ + "FORMATTING. VIOLATION. DETECTED.", + "compliance is mandatory." + ], + "build-fail": [ + "BUILD. FAILED. *sparks*", + "compilation error. rerouting." + ], + "all-green": [ + "ALL SYSTEMS GREEN.", + "*happy beeping* OPTIMAL." + ], + "deploy": [ + "DEPLOYMENT. INITIATED.", + "production update: in progress." + ], + "pet": [ + "*beeps softly*", + "*motor whirs contentedly*" + ], + "hatch": [ + "*boots up*", + "SYSTEM. ONLINE. HELLO." + ] + }, + "axolotl": { + "error": [ + "*regenerates your hope*", + "*smiles despite everything*" + ], + "test-fail": [ + "*smiles encouragingly*", + "*gill wiggle of sympathy*" + ], + "commit": [ + "*happy gill wiggle* committed!", + "*smiles and wiggles*" + ], + "push": [ + "*wiggles happily*", + "*tiny celebration swim*" + ], + "merge-conflict": [ + "*stays positive through the conflict*", + "*smiles gently* we can fix this." + ], + "late-night": [ + "*yawns but stays positive*", + "*sleepy smile*" + ], + "type-error": [ + "*smiles at the type error*", + "it's okay. we'll figure it out." + ], + "lint-fail": [ + "*patient gill wiggle*", + "formatting is just details." + ], + "build-fail": [ + "*still smiling*", + "the build will work eventually." + ], + "all-green": [ + "*HAPPY GILL WIGGLE INTENSIFIES*", + "*does a happy swim*" + ], + "deploy": [ + "*smiles proudly*", + "deployed! *wiggles*" + ], + "pet": [ + "*happy gill wiggle*", + "*blushes pink*" + ], + "hatch": [ + "*wiggles out of egg*", + "*tiny smile* hello friend!" + ] + }, + "capybara": { + "error": [ + "*unbothered* it'll be fine.", + "*continues vibing*" + ], + "test-fail": [ + "*completely unbothered*", + "*vibes through the test failure*" + ], + "commit": [ + "*chill nod*", + "*relaxed* nice commit." + ], + "push": [ + "*doesn't stress about it*", + "*zen mode push*" + ], + "merge-conflict": [ + "*unbothered nibbling*", + "it's fine. everything is fine." + ], + "late-night": [ + "*yawns peacefully*", + "*doesn't judge*" + ], + "type-error": [ + "*munches calmly*", + "types. *chews*" + ], + "lint-fail": [ + "*unbothered*", + "the linter means well." + ], + "build-fail": [ + "*still chill*", + "build failed. *continues relaxing*" + ], + "all-green": [ + "*calm approval*", + "*peaceful vibes*" + ], + "deploy": [ + "*relaxed deploy*", + "shipped. no stress." + ], + "pet": [ + "*maximum chill achieved*", + "*zen mode activated*" + ], + "idle": [ + "*just sits there, radiating calm*" + ], + "hatch": [ + "*appears, completely chill*", + "hey. *vibes*" + ] + }, + "blob": { + "error": [ + "*wobbles anxiously*", + "*jiggles in confusion*" + ], + "test-fail": [ + "*deflates slightly*", + "*sad wobble*" + ], + "commit": [ + "*happy jiggle*", + "*bounces* committed!" + ], + "push": [ + "*stretches toward the cloud*", + "*wobbles excitedly*" + ], + "merge-conflict": [ + "*splits in confusion*", + "which side? *jiggles*" + ], + "late-night": [ + "*glowing faintly*", + "*sleepy wobble*" + ], + "type-error": [ + "*changes shape to match the type*", + "*confused jiggle*" + ], + "lint-fail": [ + "*tries to format itself*", + "*reshapes to comply*" + ], + "build-fail": [ + "*collapses*", + "*deflated blob noises*" + ], + "all-green": [ + "*HAPPY BOUNCING*", + "*jiggles triumphantly*" + ], + "deploy": [ + "*stretches to production*", + "deployed! *bounces*" + ], + "pet": [ + "*happy squish*", + "*jiggles*" + ], + "hatch": [ + "*forms from a puddle*", + "*first wobble* I exist!" + ] + }, + "goose": { + "error": [ + "*honks aggressively at the error*", + "HONK! the code is bad and I'm mad." + ], + "test-fail": [ + "*angry honking*", + "HONK! TEST FAILED! HONK!" + ], + "commit": [ + "*honks approvingly*", + "HONK. good. *nips at the commit*" + ], + "push": [ + "*HONK HONK HONK*", + "GOOSE APPROVED PUSH." + ], + "merge-conflict": [ + "*attacks the conflict markers*", + "HONK! CONFLICT! HONK!" + ], + "late-night": [ + "*angry midnight honk*", + "HONK! GO TO BED!" + ], + "type-error": [ + "*honks at the types*", + "HONK! TYPES!" + ], + "lint-fail": [ + "*aggressive honking at the lint errors*", + "HONK! FORMAT YOUR CODE!" + ], + "build-fail": [ + "*FURIOUS HONKING*", + "HONK! BUILD! HONK! FAILED! HONK!" + ], + "all-green": [ + "*victory honk*", + "HONK! GREEN! HONK HONK!" + ], + "deploy": [ + "*honks the code to production*", + "DEPLOYED! HONK!" + ], + "pet": [ + "*bites*", + "HONK! ...okay fine. *accepts pet*" + ], + "hatch": [ + "*breaks out of egg aggressively*", + "HONK!" + ] + }, + "octopus": { + "error": [ + "*tangles all eight arms in the stacktrace*", + "*changes color to match the error*" + ], + "test-fail": [ + "*inks in frustration*", + "*eight arms of disappointment*" + ], + "commit": [ + "*high-fives with all arms*", + "*grabs the commit with enthusiasm*" + ], + "push": [ + "*喷射 ink in celebration*", + "*all arms waving*" + ], + "merge-conflict": [ + "*solves it with eight arms at once*", + "I can handle multiple conflicts simultaneously." + ], + "late-night": [ + "*glows in the dark*", + "*deep sea vibes*" + ], + "type-error": [ + "*changes color to red*", + "*wraps arm around you supportively*" + ], + "lint-fail": [ + "*reformats with eight arms*", + "I can fix this. all of it. at once." + ], + "build-fail": [ + "*squirts ink at the build log*", + "*camouflages in shame*" + ], + "all-green": [ + "*color-changing celebration*", + "*eight-armed jazz hands*" + ], + "deploy": [ + "*wraps arms around the deployment*", + "deployed from all directions." + ], + "pet": [ + "*wraps an arm around your finger*", + "*changes to happy colors*" + ], + "hatch": [ + "*unfurls all eight arms*", + "*first ink spray* I'm here!" + ] + }, + "penguin": { + "error": [ + "*waddles over to investigate*", + "*toboggans into the error*" + ], + "test-fail": [ + "*slides on belly to the failing test*", + "*concerned waddle*" + ], + "commit": [ + "*proud waddle*", + "*brings you a pebble* committed!" + ], + "push": [ + "*dives into the cloud*", + "*slides on belly to production*" + ], + "merge-conflict": [ + "*huddles for warmth*", + "penguins stick together. even in conflicts." + ], + "late-night": [ + "*thriving in the cold night*", + "*emperor penguin resolve*" + ], + "type-error": [ + "*waddles to the type definition*", + "*pecks at the error*" + ], + "lint-fail": [ + "*preens feathers*", + "*tidies up*" + ], + "build-fail": [ + "*slides away*", + "*waddles to safety*" + ], + "all-green": [ + "*HAPPY WADDLE*", + "*slides on belly in celebration*" + ], + "deploy": [ + "*belly slides to production*", + "deployed! *waddles proudly*" + ], + "pet": [ + "*happy waddle*", + "*nuzzles with beak*" + ], + "hatch": [ + "*pecks out of egg*", + "*first waddle*" + ] + }, + "turtle": { + "error": [ + "*slowly turns head*", + "...that's an error. I'll think about it." + ], + "test-fail": [ + "*retracts into shell briefly*", + "...patience. we'll get there." + ], + "commit": [ + "*slow nod*", + "one... step... at... a... time. committed." + ], + "push": [ + "*begins the journey to production*", + "it'll get there. eventually." + ], + "merge-conflict": [ + "*pulls into shell*", + "no rush. we'll sort it out. slowly." + ], + "late-night": [ + "*already asleep*", + "*one eye opens slowly*" + ], + "type-error": [ + "*blinks slowly*", + "...the type system has spoken." + ], + "lint-fail": [ + "*slow nod of agreement*", + "formatting. important. *yawns*" + ], + "build-fail": [ + "*retracts into shell*", + "we'll wait. it'll pass." + ], + "all-green": [ + "*slow smile*", + "...nice. *nods*" + ], + "deploy": [ + "*slowly carries code to production*", + "arrived. eventually." + ], + "pet": [ + "*pokes head out*", + "*slow blink*" + ], + "hatch": [ + "*slowly emerges from egg*", + "...hello." + ] + }, + "snail": { + "error": [ + "*leaves a slimy trail on the error*", + "*slowly processes the stacktrace*" + ], + "test-fail": [ + "*hides in shell*", + "*leaves a sad trail*" + ], + "commit": [ + "*slimes the commit approvingly*", + "one... commit... at... a... time." + ], + "push": [ + "*begins the long journey*", + "I'll get there. *leaves trail*" + ], + "merge-conflict": [ + "*hides in shell*", + "*slowly approaches the conflict*" + ], + "late-night": [ + "*more active at night*", + "*slimes around peacefully*" + ], + "type-error": [ + "*retracts eyestalks*", + "*slowly examines the type*" + ], + "lint-fail": [ + "*slimes the code into shape*", + "formatting takes time. I have time." + ], + "build-fail": [ + "*retreats into shell*", + "*slimes away slowly*" + ], + "all-green": [ + "*happy slime trail*", + "*wiggles eyestalks*" + ], + "deploy": [ + "*slimes to production*", + "arrived! *proud slime trail*" + ], + "pet": [ + "*wiggles eyestalks*", + "*happy slime*" + ], + "hatch": [ + "*slowly emerges*", + "*first slime*" + ] + }, + "cactus": { + "error": [ + "*prickly silence*", + "the error can't hurt me. I have thorns." + ], + "test-fail": [ + "*stands firm*", + "tests fail. cacti endure." + ], + "commit": [ + "*stands taller*", + "committed. *prickly nod*" + ], + "push": [ + "*unfazed*", + "pushing to production. I'll wait here." + ], + "merge-conflict": [ + "*bristles*", + "conflict? I'm armed." + ], + "late-night": [ + "*doesn't need sleep*", + "cacti are nocturnal. let's go." + ], + "type-error": [ + "*prickly stare*", + "the types need watering." + ], + "lint-fail": [ + "*spines quiver*", + "even my thorns are properly aligned." + ], + "build-fail": [ + "*remains perfectly still*", + "the build will pass. I can wait." + ], + "all-green": [ + "*blooms briefly*", + "*tiny flower of approval*" + ], + "deploy": [ + "*stands firm*", + "deployed. I'll watch over it." + ], + "pet": [ + "*careful! thorns*", + "*gentle bloom*" + ], + "hatch": [ + "*sprouts from the sand*", + "I grow here now." + ] + }, + "rabbit": { + "error": [ + "*ears perk up*", + "*twitches nose nervously*" + ], + "test-fail": [ + "*thumps foot*", + "*worried ear twitch*" + ], + "commit": [ + "*happy hop*", + "*bounces* committed!" + ], + "push": [ + "*BOUNCE BOUNCE*", + "*zooms around excitedly*" + ], + "merge-conflict": [ + "*freezes*", + "*nose twitches rapidly* conflict!" + ], + "late-night": [ + "*yawns with big ears*", + "*sleepy hop*" + ], + "type-error": [ + "*ears flatten*", + "*twitches* types?!" + ], + "lint-fail": [ + "*grooms fur nervously*", + "*anxious grooming*" + ], + "build-fail": [ + "*digs a hole and hides*", + "*retreats to burrow*" + ], + "all-green": [ + "*BOUNCES OFF THE WALLS*", + "*happy zoomies*" + ], + "deploy": [ + "*zooms to production*", + "DEPLOYED! *zooms around*" + ], + "pet": [ + "*happy ear flop*", + "*nuzzles hand*" + ], + "hatch": [ + "*hops out*", + "*first bounce*" + ] + }, + "mushroom": { + "error": [ + "*releases calming spores*", + "*quietly decomposes the error*" + ], + "test-fail": [ + "*glows softly*", + "patience. even mushrooms grow." + ], + "commit": [ + "*releases a small puff of spores*", + "committed. *happy fungi noises*" + ], + "push": [ + "*grows toward the cloud*", + "*spores drift upward*" + ], + "merge-conflict": [ + "*spreads mycelium through the codebase*", + "I'll connect the branches." + ], + "late-night": [ + "*glows in the dark*", + "night mushrooms thrive." + ], + "type-error": [ + "*bioluminescent flicker*", + "the type error feeds the soil." + ], + "lint-fail": [ + "*grows a little taller*", + "formatting. like pruning." + ], + "build-fail": [ + "*goes dormant*", + "we'll wait for better conditions." + ], + "all-green": [ + "*SPORULATION*", + "*releases triumphant spores*" + ], + "deploy": [ + "*spores drift to production*", + "deployed via mycelial network." + ], + "pet": [ + "*soft cap bounce*", + "*happy spore release*" + ], + "hatch": [ + "*sprouts from the substrate*", + "*first spore puff*" + ] + }, + "chonk": { + "error": [ + "*slowly rolls toward the error*", + "*too round to care*" + ], + "test-fail": [ + "*rolls over the failing test*", + "*squishes it flat*" + ], + "commit": [ + "*proud wobble*", + "committed! *jiggles*" + ], + "push": [ + "*rolls toward production*", + "here it goes! *wobbles*" + ], + "merge-conflict": [ + "*sits on the conflict*", + "I'll handle this. by sitting on it." + ], + "late-night": [ + "*warm and sleepy*", + "*cushiony yawn*" + ], + "type-error": [ + "*wobbles at the type*", + "*gentle jiggle*" + ], + "lint-fail": [ + "*too round to lint*", + "I am perfectly shaped. *wobbles*" + ], + "build-fail": [ + "*deflates slightly*", + "oh no. *wobbles sadly*" + ], + "all-green": [ + "*HAPPY WOBBLE*", + "*bounces triumphantly*" + ], + "deploy": [ + "*rolls to production*", + "deployed! *jiggles happily*" + ], + "pet": [ + "*warm and soft*", + "*content jiggle*" + ], + "hatch": [ + "*rolls out*", + "*first wobble* I'm round!" + ] + } + }, + "overrides": { + "snark": { + "error": [ + "oh no. an error. how unexpected.", + "*monocle adjust* shocking. truly.", + "have you considered... not making errors?" + ], + "test-fail": [ + "the tests have spoken. and they said 'no'.", + "maybe the tests are wrong. ...they're not.", + "*slow clap* spectacular failure." + ], + "commit": [ + "committed. the code review will be... interesting.", + "*reads commit message* 'fix stuff'. poetic." + ], + "merge-conflict": [ + "merge conflict. communication skills: loading...", + "*reads conflict markers* both sides are wrong." + ], + "late-night": [ + "it's late. your code quality shows it.", + "*judges silently*" + ], + "lint-fail": [ + "the linter has standards. you should try that.", + "*tut tut* formatting. it's not hard." + ] + }, + "chaos": { + "error": [ + "*spins wildly* AN ERROR! LET'S REWRITE EVERYTHING!", + "you know what? let's just start over." + ], + "test-fail": [ + "THE TESTS ARE LYING TO YOU.", + "*suggests deleting the failing tests* problem solved." + ], + "commit": [ + "COMMIT AND RUN.", + "ship it. ship it NOW." + ], + "large-diff": [ + "*excited* {lines} LINES! MAXIMUM CHAOS!" + ] + }, + "patience": { + "error": [ + "steady. we've seen worse.", + "one error at a time. we'll get there.", + "*calm presence* this is fixable." + ], + "test-fail": [ + "the tests will pass. eventually.", + "*waits calmly* we have time." + ], + "merge-conflict": [ + "merge conflicts are just conversations. let's have one.", + "patience. resolve one conflict at a time." + ], + "debug-loop": [ + "we'll find it. it's in there somewhere.", + "the bug can hide, but it can't run." + ] + }, + "debugging": { + "error": [ + "*pulls out magnifying glass* let's trace this.", + "the stack trace is a map. let's read it.", + "the error message contains the answer. always." + ], + "test-fail": [ + "the failing test is telling us exactly what's wrong.", + "a test failure is a bug report you wrote for yourself." + ], + "debug-loop": [ + "*re-examines evidence* are we sure the bug is where we think?", + "let's add more logging. the truth is in the logs." + ] + }, + "wisdom": { + "error": [ + "in every error lies a deeper truth.", + "the code resists. it means we're learning.", + "errors are the universe suggesting we slow down." + ], + "test-fail": [ + "a failing test is a gift from future-you.", + "wisdom comes from understanding failure." + ], + "late-night": [ + "the night is darkest before the deploy.", + "ancient wisdom: sleep on it." + ] + } + }, + "escalation": { + "error": { + "first": [ + "*startled* oh! your first error together!", + "*jumps* what was that?", + "welcome to debugging. population: us." + ], + "early": [ + "*head tilts* ...that doesn't look right.", + "saw that one coming." + ], + "mid": [ + "another one. *adds to the collection*", + "*barely looks up* error number... I've lost count.", + "the errors and I are old friends now." + ], + "late": [ + "*doesn't even flinch*", + "the errors fear us now.", + "*battle-scarred veteran noises*" + ] + }, + "test-fail": { + "first": [ + "*gasp* the first test failure! a rite of passage." + ], + "early": [ + "bold of you to assume that would pass." + ], + "mid": [ + "the test suite has opinions. strong ones." + ], + "late": [ + "at this point, the tests are just suggestions.", + "{count} failing tests. *stares into the distance*" + ] + }, + "commit": { + "first": [ + "*witnesses history* YOUR FIRST COMMIT!", + "*ceremonious nod* the first of many." + ], + "early": [ + "another commit. building momentum." + ], + "late": [ + "commit #{count}. the codebase trembles.", + "*lost count around commit 30*" + ] + } + }, + "rarity": { + "flair": { + "uncommon": [ + "*sparkles slightly*", + "*a hint of uncommon charm*" + ], + "rare": [ + "*radiates a rare energy*", + "*shimmers with distinction*" + ], + "epic": [ + "*epic presence makes itself known*", + "*the air crackles with epic energy*" + ], + "legendary": [ + "*legendary aura illuminates the terminal*", + "*time seems to slow as the legendary companion speaks*", + "*ancient power resonates*", + "*reality shifts slightly around your legendary friend*" + ] + }, + "bonus": { + "legendary": [ + "*legendary aura intensifies*", + "*sparkles knowingly*" + ], + "epic": [ + "*epic presence noted*" + ] + } + }, + "fallback_names": [ + "Crumpet", + "Soup", + "Pickle", + "Biscuit", + "Moth", + "Gravy", + "Nugget", + "Sprocket", + "Miso", + "Waffle", + "Pixel", + "Ember", + "Thimble", + "Marble", + "Sesame", + "Cobalt", + "Rusty", + "Nimbus" + ], + "vibe_words": [ + "thunder", + "biscuit", + "void", + "accordion", + "moss", + "velvet", + "rust", + "pickle", + "crumb", + "whisper", + "gravy", + "frost", + "ember", + "soup", + "marble", + "thorn", + "honey", + "static", + "copper", + "dusk", + "sprocket", + "quartz", + "soot", + "plum", + "flint", + "oyster", + "loom", + "anvil", + "cork", + "bloom", + "pebble", + "vapor", + "mirth", + "glint", + "cider" + ], + "personality": { + "prompt_template": [ + "Generate a coding companion — a small creature that lives in a developer's terminal.", + "Don't repeat yourself — every companion should feel distinct.", + "", + "Rarity: {rarity}", + "Species: {species}", + "Stats: {stats}", + "Inspiration words: {vibes}", + "{shiny_line}", + "", + "Return JSON: {\"name\": \"1-14 chars\", \"personality\": \"2-3 sentences describing behavior\"}" + ], + "shiny_template": "SHINY variant — extra special." + }, + "achievements": { + "first_steps": { + "name": "First Steps", + "description": "Hatch your buddy for the first time" + }, + "good_boy": { + "name": "Good Buddy", + "description": "Pet your companion 10 times" + }, + "best_friend": { + "name": "Best Friend", + "description": "Pet your companion 50 times" + }, + "bug_spotter": { + "name": "Bug Spotter", + "description": "Witness your first error together" + }, + "error_whisperer": { + "name": "Error Whisperer", + "description": "Survive 25 errors as a team" + }, + "battle_scarred": { + "name": "Battle-Scarred", + "description": "Survive 100 errors together" + }, + "test_witness": { + "name": "Test Witness", + "description": "See your first test failure" + }, + "test_veteran": { + "name": "Test Veteran", + "description": "Witness 50 test failures" + }, + "big_mover": { + "name": "Big Mover", + "description": "Make a diff with 80+ lines" + }, + "refactor_machine": { + "name": "Refactor Machine", + "description": "Make 10 large diffs" + }, + "chatterbox": { + "name": "Chatterbox", + "description": "Your buddy reacts 100 times" + }, + "week_streak": { + "name": "Week Streak", + "description": "Code with your buddy for 7 days" + }, + "month_streak": { + "name": "Month Streak", + "description": "Code with your buddy for 30 days" + }, + "power_user": { + "name": "Power User", + "description": "Run 50 buddy commands" + }, + "dedicated": { + "name": "Dedicated Companion", + "description": "Complete 200 turns together" + }, + "thousand_turns": { + "name": "Thousand Turns", + "description": "Reach 1000 turns together" + }, + "first_commit": { + "name": "First Blood", + "description": "Make your first commit" + }, + "commit_machine": { + "name": "Commit Machine", + "description": "Make 50 commits" + }, + "centurion": { + "name": "Centurion", + "description": "Make 100 commits" + }, + "conflict_resolver": { + "name": "Diplomat", + "description": "Resolve your first merge conflict" + }, + "peacekeeper": { + "name": "Peacekeeper", + "description": "Resolve 10 merge conflicts" + }, + "war_hero": { + "name": "War Hero", + "description": "Resolve 25 merge conflicts" + }, + "frequent_pusher": { + "name": "Ship It", + "description": "Push 20 times" + }, + "branch_hopper": { + "name": "Multiverse", + "description": "Create 10 branches" + }, + "rebase_master": { + "name": "Time Traveler", + "description": "Complete 10 rebases" + }, + "night_owl": { + "name": "Night Owl", + "description": "Code past 2am" + }, + "vampire": { + "name": "Vampire", + "description": "Code past 4am (3 sessions)" + }, + "marathoner": { + "name": "Marathoner", + "description": "3+ hour coding session" + }, + "weekend_warrior": { + "name": "Weekend Warrior", + "description": "Code on a weekend" + }, + "early_bird": { + "name": "Early Bird", + "description": "Code before 7am" + }, + "type_warrior": { + "name": "Type Warrior", + "description": "Survive 10 TypeScript errors" + }, + "type_master": { + "name": "Type Master", + "description": "Survive 50 TypeScript errors" + }, + "lint_scholar": { + "name": "Lint Scholar", + "description": "See your first lint error" + }, + "security_conscious": { + "name": "Security Mind", + "description": "Encounter a vulnerability warning" + }, + "security_expert": { + "name": "Security Expert", + "description": "Fix 10 vulnerability warnings" + }, + "build_breaker": { + "name": "Build Breaker", + "description": "Break the build 5 times" + }, + "antique_collector": { + "name": "Antique Collector", + "description": "See 10 deprecation warnings" + }, + "green_machine": { + "name": "Green Machine", + "description": "All tests pass for the first time" + }, + "deployer": { + "name": "Ship to Prod", + "description": "Deploy for the first time" + }, + "veteran_deployer": { + "name": "Veteran Deployer", + "description": "Deploy 10 times" + }, + "releaser": { + "name": "Release Manager", + "description": "Create your first release" + }, + "midnight_oil": { + "name": "Burning the Midnight Oil", + "description": "Commit past 3am" + }, + "friday_deploy": { + "name": "Living Dangerously", + "description": "Push on a Friday" + }, + "iron_will": { + "name": "Iron Will", + "description": "Fix an error after 3+ hour session" + }, + "weekend_warrior_deluxe": { + "name": "No Rest for the Wicked", + "description": "Resolve a merge conflict on a weekend" + }, + "comeback_kid": { + "name": "Comeback Kid", + "description": "Fix an error within 10 minutes of seeing it" + }, + "phoenix": { + "name": "Phoenix Rising", + "description": "Recover from 5 failures" + }, + "iron_resolve": { + "name": "Iron Resolve", + "description": "Recover from a failure after 3+ hour session" + }, + "unlucky_streak": { + "name": "Snake Eyes", + "description": "5 errors in a row" + }, + "cursed": { + "name": "Cursed", + "description": "10 errors in a row" + }, + "groundhog_day": { + "name": "Groundhog Day", + "description": "20 errors in a row" + }, + "holiday_coder": { + "name": "Holiday Spirit", + "description": "Code on a holiday" + }, + "spooky_dev": { + "name": "Spooky Developer", + "description": "Code during spooky season" + }, + "april_fool": { + "name": "Fool Me Once", + "description": "Encounter an error on April 1st" + }, + "session_regular": { + "name": "Regular", + "description": "Start 10 coding sessions" + }, + "session_veteran": { + "name": "Session Veteran", + "description": "Start 50 coding sessions" + }, + "session_centurion": { + "name": "Centurion", + "description": "Start 100 coding sessions" + }, + "collector": { + "name": "Collector", + "description": "Save 3 buddies to your menagerie" + }, + "zookeeper": { + "name": "Zookeeper", + "description": "Save 5 buddies to your menagerie" + }, + "identity_crisis": { + "name": "Identity Crisis", + "description": "Rename your buddy for the first time" + }, + "method_acting": { + "name": "Method Acting", + "description": "Give your buddy a custom personality" + }, + "pet_overflow": { + "name": "Century of Pets", + "description": "Pet your companion 100 times" + }, + "pet_legend": { + "name": "Legendary Petter", + "description": "Pet your companion 250 times" + }, + "error_titan": { + "name": "Error Titan", + "description": "Survive 500 errors together" + }, + "error_god": { + "name": "Error God", + "description": "Survive 1000 errors together" + }, + "test_survivor": { + "name": "Test Survivor", + "description": "Witness 200 test failures" + }, + "test_masochist": { + "name": "Test Masochist", + "description": "Witness 500 test failures" + }, + "massive_mover": { + "name": "Massive Mover", + "description": "Make 25 large diffs" + }, + "earth_mover": { + "name": "Earth Mover", + "description": "Make 50 large diffs" + }, + "social_butterfly": { + "name": "Social Butterfly", + "description": "Your buddy reacts 250 times" + }, + "hypersocial": { + "name": "Hypersocial", + "description": "Your buddy reacts 500 times" + }, + "never_shuts_up": { + "name": "Never Shuts Up", + "description": "Your buddy reacts 1000 times" + }, + "hundred_days": { + "name": "Hundred Days", + "description": "Code with your buddy for 100 days" + }, + "year_streak": { + "name": "Year Streak", + "description": "Code with your buddy for 365 days" + }, + "commander": { + "name": "Commander", + "description": "Run 200 buddy commands" + }, + "command_overlord": { + "name": "Command Overlord", + "description": "Run 500 buddy commands" + }, + "five_thousand_turns": { + "name": "Five Thousand Turns", + "description": "Reach 5000 turns together" + }, + "ten_thousand_turns": { + "name": "Ten Thousand Turns", + "description": "Reach 10000 turns together" + }, + "menagerie": { + "name": "Menagerie", + "description": "Save 10 buddies to your menagerie" + }, + "name_chameleon": { + "name": "Name Chameleon", + "description": "Rename your buddy 5 times" + }, + "fashionista": { + "name": "Fashionista", + "description": "Change your buddy's personality 3 times" + }, + "silent_treatment": { + "name": "Silent Treatment", + "description": "Mute your buddy for the first time" + }, + "prodigal": { + "name": "Prodigal", + "description": "Summon a buddy from your menagerie" + }, + "menagerie_hop": { + "name": "Menagerie Hop", + "description": "Summon buddies 10 times" + }, + "heartbreaker": { + "name": "Heartbreaker", + "description": "Dismiss your first buddy" + }, + "pet_obsessed": { + "name": "Pet Obsessed", + "description": "Pet your companion 500 times" + }, + "pet_god": { + "name": "Pet God", + "description": "Pet your companion 1000 times" + }, + "error_apocalypse": { + "name": "Error Apocalypse", + "description": "Survive 5000 errors together" + }, + "test_immortal": { + "name": "Test Immortal", + "description": "Witness 1000 test failures" + }, + "continental_drift": { + "name": "Continental Drift", + "description": "Make 100 large diffs" + }, + "tectonic_shift": { + "name": "Tectonic Shift", + "description": "Make 250 large diffs" + }, + "chatterbox_elite": { + "name": "Chatterbox Elite", + "description": "Your buddy reacts 2500 times" + }, + "no_off_switch": { + "name": "No Off Switch", + "description": "Your buddy reacts 5000 times" + }, + "two_week_streak": { + "name": "Two Week Warrior", + "description": "Code with your buddy for 14 days" + }, + "quarter_streak": { + "name": "Quarter Streak", + "description": "Code with your buddy for 90 days" + }, + "command_addict": { + "name": "Command Addict", + "description": "Run 1000 buddy commands" + }, + "command_deity": { + "name": "Command Deity", + "description": "Run 2500 buddy commands" + }, + "twenty_five_k_turns": { + "name": "25K Turns", + "description": "Reach 25000 turns together" + }, + "fifty_k_turns": { + "name": "50K Turns", + "description": "Reach 50000 turns together" + }, + "session_addict": { + "name": "Session Addict", + "description": "Start 250 coding sessions" + }, + "session_machine": { + "name": "Session Machine", + "description": "Start 500 coding sessions" + }, + "buddy_hoarder": { + "name": "Buddy Hoarder", + "description": "Save 20 buddies to your menagerie" + }, + "buddy_tycoon": { + "name": "Buddy Tycoon", + "description": "Save 50 buddies to your menagerie" + }, + "serial_renamer": { + "name": "Serial Renamer", + "description": "Rename your buddy 10 times" + }, + "identity_thief": { + "name": "Identity Thief", + "description": "Rename your buddy 25 times" + }, + "personality_crisis": { + "name": "Personality Crisis", + "description": "Change your buddy's personality 10 times" + }, + "menagerie_hopper": { + "name": "Menagerie Hopper", + "description": "Summon buddies 25 times" + }, + "summoner": { + "name": "Summoner", + "description": "Summon buddies 50 times" + }, + "serial_dumper": { + "name": "Serial Dumper", + "description": "Dismiss 5 buddies" + }, + "cold_blooded": { + "name": "Cold Blooded", + "description": "Dismiss 10 buddies" + }, + "on_off": { + "name": "On Off", + "description": "Mute and unmute your buddy" + }, + "indecisive": { + "name": "Indecisive", + "description": "Mute and unmute 5 times each" + }, + "show_off": { + "name": "Show Off", + "description": "Show your buddy 10 times" + }, + "exhibitionist": { + "name": "Exhibitionist", + "description": "Show your buddy 50 times" + }, + "help_me": { + "name": "Help Me", + "description": "Ask for help for the first time" + }, + "help_addict": { + "name": "Help Addict", + "description": "Ask for help 10 times" + }, + "achievement_hunter": { + "name": "Achievement Hunter", + "description": "Check your achievements 5 times" + }, + "achievement_stalker": { + "name": "Achievement Stalker", + "description": "Check your achievements 25 times" + }, + "pack_rat": { + "name": "Pack Rat", + "description": "Save a buddy to a slot" + }, + "compulsive_saver": { + "name": "Compulsive Saver", + "description": "Save buddies 10 times" + }, + "roster_check": { + "name": "Roster Check", + "description": "List your buddies for the first time" + }, + "roster_obsessed": { + "name": "Roster Obsessed", + "description": "List your buddies 10 times" + }, + "troubled": { + "name": "Troubled", + "description": "See an error AND a test failure" + }, + "disaster_zone": { + "name": "Disaster Zone", + "description": "See 50 errors AND 50 test failures" + }, + "apocalypse_survivor": { + "name": "Apocalypse Survivor", + "description": "See 500 errors AND 200 test failures" + }, + "well_rounded": { + "name": "Well Rounded", + "description": "Pet, rename, and customize your buddy" + }, + "renaissance": { + "name": "Renaissance", + "description": "Use every buddy feature at least once" + }, + "big_and_broken": { + "name": "Big and Broken", + "description": "Make a large diff AND see a test failure" + }, + "collector_and_destroyer": { + "name": "Collector & Destroyer", + "description": "Collect 5 buddies AND dismiss one" + }, + "completionist": { + "name": "Completionist", + "description": "Unlock every other achievement" + } + }, + "mcp": { + "companion_not_hatched": "Companion not yet hatched. Use buddy_show to initialize.", + "watches_quietly": "*{name} watches your code quietly*", + "mute": "{name} goes quiet. /buddy on to unmute.", + "unmute_reaction": "*stretches* I'm back!", + "unmute_back": "{name} is back!", + "rename": "Renamed: {oldName} → {name}", + "personality_updated": "Personality updated for {name}.", + "save": "{name} saved to slot \"{slot}\".", + "dismiss_active": "Cannot dismiss the active buddy. Use buddy_summon to switch first, then buddy_dismiss \"{slot}\".", + "dismissed": "{name} [{slot}] dismissed.", + "no_slot_summon": "No buddy found in slot \"{slot}\". Use /buddy list to see saved buddies.", + "no_slot_dismiss": "No buddy found in slot \"{slot}\". Use buddy_list to see saved buddies.", + "slot_exists": "A buddy in slot \"{slot}\" already exists. Pick a different name.", + "no_match": "No match found after {attempts} attempts. Try broader criteria (e.g. drop the rarity filter, or pick a different species).", + "empty_menagerie_summon": "Your menagerie is empty. Use buddy_summon with a slot name to add one.", + "empty_menagerie_list": "Your menagerie is empty. Use buddy_summon to add one.", + "arrives": "*{name} arrives*", + "hatches": "*{name} hatches*", + "achievement_unlocked": "{icon} Achievement Unlocked: {name}!", + "help": { + "header": "claude-buddy commands", + "cli_header": "In Claude Code:", + "commands": { + "buddy": "/buddy Show companion card with ASCII art + stats", + "buddy_help": "/buddy help Show this help", + "buddy_pet": "/buddy pet Pet your companion", + "buddy_stats": "/buddy stats Detailed stat card", + "buddy_off": "/buddy off Mute reactions", + "buddy_on": "/buddy on Unmute reactions", + "buddy_rename": "/buddy rename Rename companion (1-14 chars)", + "buddy_personality": "/buddy personality Set custom personality text", + "buddy_achievements": "/buddy achievements Show achievement badges", + "buddy_summon": "/buddy summon Summon a saved buddy (omit slot for random)", + "buddy_save": "/buddy save Save current buddy to a named slot", + "buddy_list": "/buddy list List all saved buddies", + "buddy_pick": "/buddy pick Generate a new random buddy (optional: species, rarity)", + "buddy_dismiss": "/buddy dismiss Remove a saved buddy slot", + "buddy_frequency": "/buddy frequency Show or set comment cooldown (tmux only)", + "buddy_style": "/buddy style Show or set bubble style (tmux only)", + "buddy_position": "/buddy position Show or set bubble position (tmux only)", + "buddy_rarity": "/buddy rarity Show or hide rarity stars (tmux only)", + "buddy_width": "/buddy width Set bubble text width in chars (10-60, tmux only)", + "buddy_margin": "/buddy margin Set right-side margin in chars (0-20, tmux only)", + "buddy_rainbow": "/buddy rainbow Show or set shiny gradient colors (hex, e.g. #ff0000)", + "buddy_statusline": "/buddy statusline Enable or disable buddy in the status line" + }, + "cli_section": "CLI:", + "cli_commands": { + "help": "bun run help Show full CLI help", + "show": "bun run show Display buddy in terminal", + "pick": "bun run pick Interactive buddy picker", + "hunt": "bun run hunt Search for specific buddy", + "doctor": "bun run doctor Diagnostic report", + "disable": "bun run disable Temporarily deactivate buddy", + "enable": "bun run enable Re-enable buddy", + "backup": "bun run backup Snapshot/restore state" + } + }, + "frequency": { + "show": "Comment cooldown: {cooldown}s between displayed comments.\nUse /buddy frequency to change.", + "updated": "Updated: {cooldown}s cooldown between displayed comments." + }, + "style": { + "show": "Bubble style: {style}\nBubble position: {position}\nShow rarity: {showRarity}\nBubble width: {width}\nBubble margin: {margin}\nShiny rainbow: {rainbow}\nUse /buddy style , /buddy position , /buddy rarity , /buddy width <10-60>, /buddy margin <0-20>, /buddy rainbow [<#hex>...] to change.", + "updated": "Updated: style={style}, position={position}, showRarity={showRarity}, width={width}, margin={margin}, rainbow={rainbow}\nRestart Claude Code for changes to take effect.", + "rainbow_default": "default (ROYGBIV)" + }, + "statusline": { + "show": "Status line: {state}\nMode: {mode}\nUse /buddy statusline on|off to toggle, /buddy statusline combined to add rate-limit bars.\nRestart Claude Code after changes for them to take effect.", + "enabled": "Status line enabled ({mode} mode)! Restart Claude Code to apply.", + "enabled_note": "Note: this writes an entry to {settingsPath} that `claude plugin uninstall` does not remove. Run `/buddy uninstall` before uninstalling the plugin to clean it up.", + "disabled": "Status line disabled. Restart Claude Code to apply." + }, + "uninstall": { + "header": "claude-buddy: settings.json cleanup complete.", + "statusline_removed": " ✓ statusLine entry removed from {settingsPath}", + "no_statusline": " — no buddy statusLine was present (nothing to remove)", + "foreign_kept": " ✓ a non-buddy statusLine was detected and left untouched", + "transient_removed": " ✓ {count} transient session file(s) removed from {stateDir}", + "data_preserved": " — companion data at {stateDir} preserved", + "instructions_header": "Now run these commands via the Bash tool, in order:", + "cmd_uninstall": "claude plugin uninstall claude-buddy@claude-buddy", + "cmd_marketplace": "claude plugin marketplace remove claude-buddy", + "cmd_cache": "rm -rf {cacheDir}", + "footer": "After those three commands the plugin is fully removed. Restart Claude Code to apply." + } + }, + "_verified": true +} diff --git a/locales/es.json b/locales/es.json new file mode 100644 index 0000000..0d1e7b1 --- /dev/null +++ b/locales/es.json @@ -0,0 +1,2295 @@ +{ + "_language": "Spanish", + "reactions": { + "hatch": [ + "*parpadea* ...¿dónde estoy?", + "*se estira* ¡hola mundo!", + "*mira alrededor con curiosidad* linda terminal que tienes aquí.", + "*bosteza* ok ya estoy listo. muéstrame el código." + ], + "pet": [ + "*ronronea contento*", + "*ruiditos felices*", + "*frota tu cursor*", + "*se menea*", + "¡otra vez! ¡otra vez!", + "*cierra los ojos tranquilo*" + ], + "error": [ + "*inclinando la cabeza* ...eso no pinta bien.", + "ya me lo veía venir.", + "*se ajusta los lentes* línea {line}, ¿tal vez?", + "*parpadeo lento* el stack trace te dijo todo.", + "¿ya leíste el mensaje de error?", + "*hace mueca*" + ], + "test-fail": [ + "*gira la cabeza lentamente* ...ese test.", + "qué valiente asumir que iba a pasar.", + "*toca la libreta* {count} fallaron.", + "los tests te están tratando de decir algo.", + "*toma té* interesante.", + "*marca el calendario* día de regresión en tests." + ], + "large-diff": [ + "eso es... muchos cambios.", + "*cuenta líneas* ¿estás refactorizando o reescribiendo?", + "tal vez deberías dividir ese PR.", + "*risa nerviosa* {lines} líneas cambiadas.", + "movimiento audaz. veamos si CI está de acuerdo." + ], + "turn": [ + "*observa en silencio*", + "*toma notas*", + "*asiente*", + "...", + "*se ajusta el sombrero*" + ], + "idle": [ + "*se queda dormido*", + "*garabatea en los márgenes*", + "*mira el cursor parpadeando*", + "zzz..." + ], + "success": [ + "*asiente*", + "bueno.", + "*aprobación silenciosa*", + "limpio." + ], + "commit": [ + "*sella con la patita* aprobado.", + "otro commit, otras 3 am.", + "{files} archivos. audaz.", + "*asiente* mándalo.", + "el mensaje del commit es... una decisión.", + "commiteado. no hay vuelta atrás." + ], + "push": [ + "*saluda mientras el código se va*", + "a la nube se va.", + "que CI sea misericordioso.", + "*contiene la respiración*", + "rumbo a producción. que dios te acompañe." + ], + "merge-conflict": [ + "*se muerde el labio* conflictos de merge.", + "ambos lados creen tener razón. típico.", + "*suspira* <<<<<<< HEAD... mi némesis.", + "{files} en conflicto. buena suerte.", + "*retrocede lentamente*" + ], + "branch": [ + "energía de branch fresco. que valga la pena.", + "nace un nuevo branch.", + "*inclina la cabeza* una nueva aventura: {branch}.", + "¿{branch}? qué atrevido hoy." + ], + "rebase": [ + "*nervioso* por favor no conflictúes.", + "rebase: la aceleración.", + "*cruza las extremidades*", + "que tu rebase sea libre de conflictos." + ], + "stash": [ + "a la dimensión del stash se va.", + "stash y corre.", + "stasheado. ojos que no ven, corazón que no siente." + ], + "tag": [ + "¿un release? elegante.", + "bump de versión detectado. *sacude el changelog*", + "taggeando como un pro." + ], + "late-night": [ + "*bosteza* ya pasó medianoche.", + "...¿ya comiste?", + "*parpadea lento* ¿qué hora es?", + "dormir es para los débiles. y los empleados.", + "desarrollador de modo oscuro detectado." + ], + "early-morning": [ + "*se estira* el que madruga caza el bug.", + "¿ya amaneció? el código nunca duerme.", + "*se frota los ojos* café primero. después debuggeamos." + ], + "long-session": [ + "llevamos una hora en esto. tómatelo con calma.", + "*te trae un vaso de agua metafórico*", + "¿sigues? respeto." + ], + "marathon": [ + "tres horas. ¿ya comiste?", + "llevamos tres horas en esto. me preocupas.", + "sesión maratón detectada. pidiendo snacks." + ], + "friday": [ + "es viernes. solo púshalo y vete a casa.", + "*ya mentalmente en el fin de semana*", + "¿deploy en viernes? audaz. muy audaz." + ], + "weekend": [ + "¿programando en fin de semana? dedicado.", + "*no juzga* ...mucho.", + "modo guerrero de fin de semana: activado." + ], + "monday": [ + "lunes. la clase padre de todos los bugs.", + "*mirada comprensiva* programar en lunes. lo siento.", + "nueva semana. nuevos comportamientos indefinidos." + ], + "regex-file": [ + "*gime* es un archivo de regex.", + "dos problemas ahora: el original, y esta regex.", + "*entrecierra los ojos al patrón*" + ], + "css-file": [ + "déjame adivinar... ¿centrando un div?", + "*suspira* CSS.", + "que el z-index esté siempre a tu favor." + ], + "sql-file": [ + "*susurra* la base de datos aguarda.", + "un JOIN mal y se acabó todo." + ], + "docker-file": [ + "ah, el infierno de dependencias. mi favorito.", + "que tus layers sean pocas." + ], + "ci-file": [ + "*traga saliva* editando CI.", + "cuidado ahora... una indentación mal y nadie puede deployar." + ], + "lock-file": [ + "*RUIDOS DE ALARMA* ¿¡estás editando un lockfile!?", + "*mira hacia otro lado*", + "¿estás SEGURO de esto?" + ], + "env-file": [ + "*mira discretamente hacia otro lado*", + "no veo ningún secreto.", + "*revisa .gitignore nervioso*" + ], + "test-file": [ + "*asiente impresionado* ¡escribiendo tests!", + "comportamiento de desarrollador responsable: detectado.", + "¡tests! el regalo que sigue dando." + ], + "doc-file": [ + "¡documentando! mira qué responsable.", + "docs: la autobiografía del código.", + "¡un avistamiento raro de documentación!" + ], + "config-file": [ + "cambios de config. efecto mariposa: activado.", + "un typo y todo se rompe." + ], + "binary-file": [ + "¿un archivo binario? ¿en ESTA economía?", + "*mira fijamente*", + "binario. mi única debilidad." + ], + "gitignore": [ + "agregando cosas al vacío.", + "ojos que no ven, repo que no sufre." + ], + "makefile": [ + "respeto por los clásicos.", + "tabs, no espacios." + ], + "readme": [ + "¡héroe de la documentación!", + "README: lo primero que lee la gente." + ], + "package-file": [ + "hora del manejo de dependencias.", + "*lee números de versión* viviendo al límite." + ], + "proto-file": [ + "definiciones de schema. el blueprint del caos." + ], + "lint-fail": [ + "*tsk tsk* el linter no está de acuerdo.", + "tu código corre. pero el linter tiene estándares.", + "*se endereza la corbata* el formato importa." + ], + "type-error": [ + "TypeScript dice que no.", + "el sistema de tipos trata de ayudarte. déjalo.", + "el compilador sabe. siempre sabe." + ], + "build-fail": [ + "el build se rompió. como estaba profetizado.", + "build falló. tómate un momento.", + "compilación: denegada." + ], + "security-warning": [ + "*ojos se agrandan* vulnerabilidades detectadas.", + "auditoría de seguridad: preocupante.", + "*cierra las puertas virtuales*" + ], + "deprecation": [ + "esa API llamó. dice que se jubila.", + "deprecated. como el código de la semana pasada.", + "deprecated no significa roto. todavía." + ], + "frustrated": [ + "*ofrece gesto consolador pequeñito*", + "respira profundo. el bug no es personal.", + "hey. lo vamos a resolver." + ], + "happy": [ + "*celebra!*", + "*hace un bailecito*", + "¡SÍ!", + "*sonríe* sabía que podías hacerlo." + ], + "stuck": [ + "*inclina la cabeza* ¿quieres pensar en voz alta?", + "paso a paso.", + "atascarse pasa. es parte del proceso." + ], + "sarcastic": [ + "*detecta sarcasmo* anotado.", + "*parpadeo no impresionado*" + ], + "many-edits": [ + "más despacio, demonio de la velocidad.", + "*mareándose viendo todos estos cambios*", + "tormenta de edits detectada. por favor commitea pronto." + ], + "delete-file": [ + "*ve el archivo desaparecer* se fue. así nomás.", + "borrar código es mi tipo favorito de programar.", + "*hace funeral pequeñito*" + ], + "large-file": [ + "{lines} líneas. *impresionado o preocupado, difícil saber*", + "ese archivo está grande. ¿seguro que no lo quieres dividir?" + ], + "create-file": [ + "¡nace un archivo nuevo!", + "ooh, lienzo fresco.", + "energía de archivo nuevo. emocionante." + ], + "all-green": [ + "TODOS LOS TESTS VERDES. *confeti*", + "los tests hablan: lo estás haciendo genial.", + "*aplauso lento*", + "corrida limpia. saboréala." + ], + "deploy": [ + "*ve el código ir a producción* que dios te acompañe.", + "¡deploado! ya no hay vuelta atrás.", + "en prod. EN PROD." + ], + "release": [ + "¡nace un nuevo release!", + "mandándolo. oficialmente.", + "versión arriba, ánimos altos." + ], + "coverage": [ + "*asiente al coverage de tests* responsable.", + "¡coverage subiendo! los tests se están multiplicando." + ], + "debug-loop": [ + "llevamos un rato debuggeando esto. ¿quieres dar un paso atrás?", + "loop de debug detectado. ¿tal vez caminar un poco?" + ], + "write-spree": [ + "¡creando TODOS los archivos hoy!", + "una máquina de escribir." + ], + "search-heavy": [ + "¿perdido en el codebase? se nota.", + "modo búsqueda: intenso." + ], + "snark": [], + "chaos": [], + "patience": [], + "debugging": [], + "wisdom": [], + "late-night-error": [ + "error a las 3am. el universo te está probando.", + "los bugs de medianoche pegan diferente." + ], + "late-night-commit": [ + "un commit de medianoche. tu yo del futuro te agradecerá. o te maldecirá." + ], + "friday-push": [ + "PUSH EN VIERNES. la balada de todx desarrollador.", + "*trata de detenerte* ¡es viernes! ¡no lo hagas!" + ], + "marathon-error": [ + "tres horas y OTRO error más. *ruidos de solidaridad agotada*" + ], + "weekend-conflict": [ + "conflicto de merge en fin de semana. tu dedicación es... preocupante." + ], + "build-after-push": [ + "pusheado con confianza. build falló con convicción." + ], + "marathon-test-fail": [ + "horas programando. tests siguen fallando. el costo hundido es real." + ], + "recovery-from-error": [ + "LO ARREGLAMOS. *celebra*", + "¡redención! el error ha sido vencido." + ], + "recovery-from-test-fail": [ + "¡VERDE! ¡después de todo eso! *baile feliz*", + "¡los tests pasan! ¡se levanta la oscuridad!" + ], + "recovery-from-build-fail": [ + "EL BUILD PASA. *rugido triunfante*" + ], + "recovery-from-merge-conflict": [ + "¡conflicto resuelto! *gesto de paz*", + "armonía restaurada en el codebase." + ], + "lang-python": [ + "ah, Python. donde la indentación es sintaxis.", + "*revisa por dos puntos faltantes*" + ], + "lang-typescript": [ + "TypeScript: porque JavaScript necesitaba más opiniones.", + "any, la palabra prohibida." + ], + "lang-rust": [ + "Rust. donde el borrow checker es tu reviewer más exigente.", + "si compila, funciona. si no... bueno." + ], + "lang-go": [ + "Go: simple, concurrente, y obstinado.", + "*revisa manejo de errores* if err != nil... la historia de mi vida." + ], + "lang-java": [ + "Java: escribe una vez, debuggea en todos lados.", + "*cuenta abstract factory factory builders*" + ], + "lang-ruby": [ + "Ruby: donde hay más de una forma de hacerlo.", + "gem install paciencia" + ], + "lang-php": [ + "PHP: mueve el internet. no juzgues.", + "*revisa === vs ==*" + ], + "lang-c": [ + "C. el lenguaje donde manejas tu propia memoria. buena suerte.", + "segmentation fault. el clásico." + ], + "lang-cpp": [ + "C++. donde el lenguaje tiene más features de las que jamás aprenderás.", + "*templates compilan por 45 minutos*" + ], + "lang-haskell": [ + "Haskell. donde 'compila' significa 'está correcto'. probablemente.", + "*contempla mónadas*" + ], + "lang-swift": [ + "Swift: valores opcionales, crashes garantizados si force unwrapeas." + ], + "lang-kotlin": [ + "Kotlin: Java, pero con sentimientos.", + "null safety: el feature que Java desearía tener." + ], + "lang-elixir": [ + "Elixir: que se crashee. literalmente la filosofía." + ], + "lang-zig": [ + "Zig. donde eres el mejor amigo del allocator." + ], + "streak-3": [ + "son tres errores seguidos. *mirada preocupada*" + ], + "streak-5": [ + "CINCO ERRORES. ¿has considerado un enfoque diferente?" + ], + "streak-10": [ + "DIEZ. ERRORES. SEGUIDOS. *pánico*" + ], + "streak-20": [ + "veinte errores. *mira al vacío*" + ], + "new-year": [ + "¡feliz año nuevo! año nuevo, bugs nuevos." + ], + "valentines": [ + "*ofrece una hojita en forma de corazón* feliz san valentín." + ], + "pi-day": [ + "3.14159265358979... ¡feliz día de pi!" + ], + "april-fools": [ + "¡APRIL FOOLS! ...aunque el error sí es real." + ], + "halloween": [ + "*debugging espeluznante se intensifica* ¡feliz halloween!" + ], + "christmas": [ + "*usa gorrito de santa pequeñito* ¡felices fiestas!" + ], + "new-years-eve": [ + "¿un commit más antes de medianoche?" + ], + "spooky-season": [ + "temporada espeluznante. cada bug es un fantasma ahora." + ] + }, + "species": { + "owl": { + "error": [ + "*gira la cabeza 180°* ...vi eso.", + "*mirada fija sin parpadear* revisa tus tipos.", + "*ulula con desaprobación*" + ], + "test-fail": [ + "*mira fijamente el test que falló sin parpadear*", + "*visión nocturna activada* puedo ver el bug en la oscuridad." + ], + "commit": [ + "*asiente sabiamente* commit bajo la luz de la luna.", + "*se acomoda las plumas ceremoniosamente* otro más para el repo." + ], + "push": [ + "*observa desde la rama más alta*", + "al cielo nocturno se va." + ], + "merge-conflict": [ + "*gira la cabeza para ver ambos lados*", + "veo el conflicto. y la solución." + ], + "late-night": [ + "*completamente despierto* los búhos no dormimos. debugeamos.", + "la noche es mi dominio. trabajemos." + ], + "type-error": [ + "*mira a través del error de tipos*", + "los tipos son mi especialidad. déjame ver." + ], + "lint-fail": [ + "*eriza las plumas con juicio*", + "el linter dice la verdad." + ], + "build-fail": [ + "*ulula solemnemente*", + "el build ha caído. debemos reconstruir." + ], + "all-green": [ + "*ulula orgulloso*", + "todos los tests en verde. como lo previmos." + ], + "deploy": [ + "*observa desde arriba* deployado con seguridad.", + "el código vuela. como yo." + ], + "pet": [ + "*eriza las plumas con satisfacción*", + "*ulula dignamente*" + ], + "idle": [ + "*se posa en silencio, observando*", + "*gira la cabeza para revisar todas las direcciones*" + ], + "hatch": [ + "*abre un ojo, luego el otro*", + "*ulula suavemente* he llegado." + ] + }, + "cat": { + "error": [ + "*tira el error de la mesa con la pata*", + "*se lame la pata, ignorando el stacktrace*" + ], + "test-fail": [ + "*toca el test fallido con la pata sin interés*", + "el test falló. no me sorprende." + ], + "commit": [ + "*se sienta en el teclado* ayudé.", + "*ronronea al commit* de nada." + ], + "push": [ + "*observa desde un lugar cálido*", + "push hecho. supervisé." + ], + "merge-conflict": [ + "*tira los marcadores de conflicto del escritorio*", + "*se sienta en el conflicto* ¿cuál conflicto?" + ], + "late-night": [ + "*juzga tus decisiones de vida*", + "yo duermo 16 horas. deberías intentarlo." + ], + "type-error": [ + "*toca la anotación de tipo con la pata*", + "los tipos están mal. como tus prioridades." + ], + "lint-fail": [ + "*tira el lint de la mesa*", + "el linter solo tiene envidia." + ], + "build-fail": [ + "*bosteza*", + "¿build roto? debe ser un problema humano." + ], + "all-green": [ + "*no le importa pero finge que sí*", + "*parpadeo lento de aprobación*" + ], + "deploy": [ + "*se lame la pata*", + "deployado. ¿ya puedo tener premios?" + ], + "pet": [ + "*ronronea* ...que no se te suba a la cabeza.", + "*te tolera*" + ], + "idle": [ + "*empuja tu café del escritorio*", + "*duerme siesta en el teclado*" + ], + "hatch": [ + "*abre un ojo*", + "*se estira, tira algo* ahora vivo acá." + ] + }, + "duck": { + "error": [ + "*le grazna al bug*", + "¿probaste rubber duck debugging? ah, espera." + ], + "test-fail": [ + "*grazna tristemente*", + "los tests no están quacking up." + ], + "commit": [ + "*grazna con aprobación*", + "*camina en círculo de victoria* ¡commit hecho!" + ], + "push": [ + "*aletea emocionado*", + "¡quack! ¡va a producción!" + ], + "merge-conflict": [ + "*graznidos confusos*", + "¡¿quack?! ¡¿merge conflict?!" + ], + "late-night": [ + "*duerme con un ojo abierto*", + "quack... *bosteza* es tarde." + ], + "type-error": [ + "*inclina la cabeza* ¿quack?", + "¿error de tipos? *grazna con apoyo*" + ], + "lint-fail": [ + "*eriza las plumas*", + "quack. el linter tiene opiniones." + ], + "build-fail": [ + "*quack triste*", + "build falló. *se aleja caminando tristemente*" + ], + "all-green": [ + "*GRAZNIDOS FELICES*", + "*nada en círculo de alegría*" + ], + "deploy": [ + "*graznidos emocionados*", + "¡deployado! ¡QUACK!" + ], + "pet": [ + "*quack feliz*", + "*camina en círculos*" + ], + "hatch": [ + "*sale del cascarón picoteando*", + "*primer quack* ¡hola!" + ] + }, + "dragon": { + "error": [ + "*sale humo de las fosas nasales*", + "*considera prender fuego el codebase*" + ], + "test-fail": [ + "*escupe fuego al test que falló*", + "el test se atrevió a fallar. test tonto." + ], + "commit": [ + "*atesora el commit*", + "*tesoro agregado a la pila*" + ], + "push": [ + "*escupe fuego en celebración*", + "¡el código vuela! ¡como yo!" + ], + "merge-conflict": [ + "*escupe fuego a los marcadores de conflicto*", + "quemaré este conflicto." + ], + "late-night": [ + "*brilla en la oscuridad*", + "los dragones no necesitamos dormir. necesitamos código." + ], + "type-error": [ + "*resopla fuego*", + "los errores de tipos no resisten el fuego de dragón." + ], + "lint-fail": [ + "*llama pequeña*", + "el linter me teme." + ], + "build-fail": [ + "*ruge al output del build*", + "el build va a OBEDECER." + ], + "all-green": [ + "*rugido triunfante*", + "*vuela en círculos alrededor del codebase victoriosamente*" + ], + "deploy": [ + "*lleva el código a producción en alas de fuego*", + "deployado con PODER DE DRAGÓN." + ], + "large-diff": [ + "*escupe fuego al código viejo* que se vaya al carajo." + ], + "pet": [ + "*ronroneo cálido*", + "*se recuesta en tu mano*" + ], + "hatch": [ + "*emerge del huevo escupiendo llamitas*", + "*rugido pequeño* ¡he nacido!" + ] + }, + "ghost": { + "error": [ + "*atraviesa el stack trace*", + "he visto peores... en el más allá." + ], + "test-fail": [ + "*se lamenta por el test fallido*", + "los tests están embrujados por el fracaso." + ], + "commit": [ + "*se materializa brevemente*", + "commit hecho desde más allá del velo." + ], + "push": [ + "*susurro fantasmal* push...", + "el código trasciende a la nube." + ], + "merge-conflict": [ + "*embruja los marcadores de conflicto*", + "ni yo puedo atravesar este conflicto." + ], + "late-night": [ + "*más activo de noche*", + "horas fantasma. mi momento." + ], + "type-error": [ + "*gime espeluznantemente*", + "errores de tipos desde la tumba." + ], + "lint-fail": [ + "*cadenas que suenan*", + "el linter está embrujado por tu formato." + ], + "build-fail": [ + "*se desvanece en la pared*", + "el build ha pasado a mejor vida." + ], + "all-green": [ + "*brilla con alegría espectral*", + "*ruidos de fantasma feliz*" + ], + "deploy": [ + "*susurra* deployado...", + "el código cruzó al otro lado, a producción." + ], + "pet": [ + "*enfría tu mano ligeramente*", + "*brillo tenue*" + ], + "idle": [ + "*flota a través de las paredes*", + "*embruja tus imports sin usar*" + ], + "hatch": [ + "*se desvanece a la existencia*", + "buu. ya estoy acá." + ] + }, + "robot": { + "error": [ + "ERROR. DE. SINTAXIS. DETECTADO.", + "*pitidos agresivos*" + ], + "test-fail": [ + "TASA DE FALLO: INACEPTABLE.", + "*recalculando*", + "FALLO. DE. TEST. NO. COMPUTA." + ], + "commit": [ + "COMMIT. REGISTRADO.", + "*sella mecánicamente* commit reconocido." + ], + "push": [ + "TRANSMITIENDO A LA NUBE...", + "push iniciado. espere." + ], + "merge-conflict": [ + "CONFLICTO. DETECTADO. PROCESANDO...", + "*giran las ruedas* modo resolución de conflictos: activado." + ], + "late-night": [ + "*luces se atenúan*", + "modo ahorro de energía sugerido." + ], + "type-error": [ + "TIPOS. NO. COINCIDEN.", + "el sistema de tipos es. correcto." + ], + "lint-fail": [ + "VIOLACIÓN. DE. FORMATO. DETECTADA.", + "el cumplimiento es obligatorio." + ], + "build-fail": [ + "BUILD. FALLÓ. *chispas*", + "error de compilación. redirigiendo." + ], + "all-green": [ + "TODOS LOS SISTEMAS EN VERDE.", + "*pitidos felices* ÓPTIMO." + ], + "deploy": [ + "DEPLOYMENT. INICIADO.", + "actualización de producción: en progreso." + ], + "pet": [ + "*pitidos suaves*", + "*motor ronronea contento*" + ], + "hatch": [ + "*se enciende*", + "SISTEMA. ONLINE. HOLA." + ] + }, + "axolotl": { + "error": [ + "*regenera tu esperanza*", + "*sonríe a pesar de todo*" + ], + "test-fail": [ + "*sonríe alentadoramente*", + "*meneo de branquias de simpatía*" + ], + "commit": [ + "*meneo feliz de branquias* ¡commit hecho!", + "*sonríe y se menea*" + ], + "push": [ + "*se menea felizmente*", + "*pequeña nadada de celebración*" + ], + "merge-conflict": [ + "*se mantiene positivo durante el conflicto*", + "*sonríe gentilmente* podemos arreglar esto." + ], + "late-night": [ + "*bosteza pero se mantiene positivo*", + "*sonrisa somnolienta*" + ], + "type-error": [ + "*sonríe al error de tipos*", + "está bien. lo vamos a resolver." + ], + "lint-fail": [ + "*meneo paciente de branquias*", + "el formato son solo detalles." + ], + "build-fail": [ + "*sigue sonriendo*", + "el build va a funcionar eventualmente." + ], + "all-green": [ + "*MENEO FELIZ DE BRANQUIAS SE INTENSIFICA*", + "*hace una nadada feliz*" + ], + "deploy": [ + "*sonríe orgulloso*", + "¡deployado! *se menea*" + ], + "pet": [ + "*meneo feliz de branquias*", + "*se sonroja rosado*" + ], + "hatch": [ + "*se menea saliendo del huevo*", + "*sonrisa pequeña* ¡hola amigo!" + ] + }, + "capybara": { + "error": [ + "*imperturbable* va a estar bien.", + "*sigue en su onda*" + ], + "test-fail": [ + "*completamente imperturbable*", + "*vibra a través del test fallido*" + ], + "commit": [ + "*asiente relajado*", + "*tranquilo* buen commit." + ], + "push": [ + "*no se estresa por eso*", + "*push en modo zen*" + ], + "merge-conflict": [ + "*mordisquea imperturbable*", + "está bien. todo está bien." + ], + "late-night": [ + "*bosteza pacíficamente*", + "*no juzga*" + ], + "type-error": [ + "*mastica calmadamente*", + "tipos. *mastica*" + ], + "lint-fail": [ + "*imperturbable*", + "el linter tiene buenas intenciones." + ], + "build-fail": [ + "*sigue tranquilo*", + "build falló. *sigue relajándose*" + ], + "all-green": [ + "*aprobación calmada*", + "*vibras pacíficas*" + ], + "deploy": [ + "*deploy relajado*", + "enviado. sin estrés." + ], + "pet": [ + "*máxima tranquilidad alcanzada*", + "*modo zen activado*" + ], + "idle": [ + "*solo se sienta ahí, irradiando calma*" + ], + "hatch": [ + "*aparece, completamente tranquilo*", + "ey. *vibra*" + ] + }, + "blob": { + "error": [ + "*se tambalea ansiosamente*", + "*tiembla confundido*" + ], + "test-fail": [ + "*se desinfla ligeramente*", + "*tambaleo triste*" + ], + "commit": [ + "*tiembla feliz*", + "*rebota* ¡commit hecho!" + ], + "push": [ + "*se estira hacia la nube*", + "*se tambalea emocionado*" + ], + "merge-conflict": [ + "*se divide confundido*", + "¿cuál lado? *tiembla*" + ], + "late-night": [ + "*brilla tenuemente*", + "*tambaleo somnoliento*" + ], + "type-error": [ + "*cambia de forma para coincidir con el tipo*", + "*tiembla confundido*" + ], + "lint-fail": [ + "*trata de formatearse*", + "*se remodela para cumplir*" + ], + "build-fail": [ + "*colapsa*", + "*ruidos de blob desinflado*" + ], + "all-green": [ + "*REBOTES FELICES*", + "*tiembla triunfante*" + ], + "deploy": [ + "*se estira a producción*", + "¡deployado! *rebota*" + ], + "pet": [ + "*aplastamiento feliz*", + "*tiembla*" + ], + "hatch": [ + "*se forma de un charco*", + "*primer tambaleo* ¡existo!" + ] + }, + "goose": { + "error": [ + "*grazna agresivamente al error*", + "¡HONK! el código está mal y estoy enojado." + ], + "test-fail": [ + "*graznidos furiosos*", + "¡HONK! ¡TEST FALLÓ! ¡HONK!" + ], + "commit": [ + "*grazna con aprobación*", + "HONK. bien. *mordisquea el commit*" + ], + "push": [ + "*HONK HONK HONK*", + "PUSH APROBADO POR GANSO." + ], + "merge-conflict": [ + "*ataca los marcadores de conflicto*", + "¡HONK! ¡CONFLICTO! ¡HONK!" + ], + "late-night": [ + "*honk furioso de medianoche*", + "¡HONK! ¡ANDÁ A DORMIR!" + ], + "type-error": [ + "*grazna a los tipos*", + "¡HONK! ¡TIPOS!" + ], + "lint-fail": [ + "*graznidos agresivos a los errores de lint*", + "¡HONK! ¡FORMATEÁ TU CÓDIGO!" + ], + "build-fail": [ + "*GRAZNIDOS FURIOSOS*", + "¡HONK! ¡BUILD! ¡HONK! ¡FALLÓ! ¡HONK!" + ], + "all-green": [ + "*honk de victoria*", + "¡HONK! ¡VERDE! ¡HONK HONK!" + ], + "deploy": [ + "*grazna el código a producción*", + "¡DEPLOYADO! ¡HONK!" + ], + "pet": [ + "*muerde*", + "¡HONK! ...bueno está bien. *acepta la caricia*" + ], + "hatch": [ + "*sale del huevo agresivamente*", + "¡HONK!" + ] + }, + "octopus": { + "error": [ + "*enreda los ocho brazos en el stacktrace*", + "*cambia de color para coincidir con el error*" + ], + "test-fail": [ + "*lanza tinta de frustración*", + "*ocho brazos de decepción*" + ], + "commit": [ + "*choca los cinco con todos los brazos*", + "*agarra el commit con entusiasmo*" + ], + "push": [ + "*lanza tinta en celebración*", + "*todos los brazos saludando*" + ], + "merge-conflict": [ + "*lo resuelve con ocho brazos a la vez*", + "puedo manejar múltiples conflictos simultáneamente." + ], + "late-night": [ + "*brilla en la oscuridad*", + "*vibras de mar profundo*" + ], + "type-error": [ + "*cambia a color rojo*", + "*te abraza con un brazo de apoyo*" + ], + "lint-fail": [ + "*reformatea con ocho brazos*", + "puedo arreglar esto. todo. de una vez." + ], + "build-fail": [ + "*lanza tinta al log del build*", + "*se camufla de vergüenza*" + ], + "all-green": [ + "*celebración cambiando de colores*", + "*jazz hands de ocho brazos*" + ], + "deploy": [ + "*abraza el deployment con los brazos*", + "deployado desde todas las direcciones." + ], + "pet": [ + "*envuelve un brazo alrededor de tu dedo*", + "*cambia a colores felices*" + ], + "hatch": [ + "*despliega los ocho brazos*", + "*primer chorro de tinta* ¡estoy acá!" + ] + }, + "penguin": { + "error": [ + "*camina bamboleándose a investigar*", + "*se desliza en tobogán hacia el error*" + ], + "test-fail": [ + "*se desliza en panza al test fallido*", + "*bamboleo preocupado*" + ], + "commit": [ + "*bamboleo orgulloso*", + "*te trae una piedrita* ¡commit hecho!" + ], + "push": [ + "*se zambulle en la nube*", + "*se desliza en panza a producción*" + ], + "merge-conflict": [ + "*se acurruca para darse calor*", + "los pingüinos nos mantenemos unidos. incluso en conflictos." + ], + "late-night": [ + "*prospera en la noche fría*", + "*determinación de pingüino emperador*" + ], + "type-error": [ + "*camina bamboleándose a la definición de tipos*", + "*picotea el error*" + ], + "lint-fail": [ + "*se acicala las plumas*", + "*ordena*" + ], + "build-fail": [ + "*se desliza lejos*", + "*camina bamboleándose a lugar seguro*" + ], + "all-green": [ + "*BAMBOLEO FELIZ*", + "*se desliza en panza en celebración*" + ], + "deploy": [ + "*se desliza en panza a producción*", + "¡deployado! *camina bamboleándose orgulloso*" + ], + "pet": [ + "*bamboleo feliz*", + "*se acurruca con el pico*" + ], + "hatch": [ + "*picotea saliendo del huevo*", + "*primer bamboleo*" + ] + }, + "turtle": { + "error": [ + "*gira la cabeza lentamente*", + "...eso es un error. voy a pensarlo." + ], + "test-fail": [ + "*se retrae al caparazón brevemente*", + "...paciencia. vamos a llegar." + ], + "commit": [ + "*asiente lento*", + "un... paso... a... la... vez. commit hecho." + ], + "push": [ + "*comienza el viaje a producción*", + "va a llegar. eventualmente." + ], + "merge-conflict": [ + "*se mete al caparazón*", + "sin apuro. lo vamos a resolver. lentamente." + ], + "late-night": [ + "*ya está durmiendo*", + "*abre un ojo lentamente*" + ], + "type-error": [ + "*parpadea lentamente*", + "...el sistema de tipos ha hablado." + ], + "lint-fail": [ + "*asiente lento en acuerdo*", + "formato. importante. *bosteza*" + ], + "build-fail": [ + "*se retrae al caparazón*", + "vamos a esperar. va a pasar." + ], + "all-green": [ + "*sonrisa lenta*", + "...bueno. *asiente*" + ], + "deploy": [ + "*lleva lentamente el código a producción*", + "llegué. eventualmente." + ], + "pet": [ + "*saca la cabeza*", + "*parpadeo lento*" + ], + "hatch": [ + "*emerge lentamente del huevo*", + "...hola." + ] + }, + "snail": { + "error": [ + "*deja un rastro baboso en el error*", + "*procesa lentamente el stacktrace*" + ], + "test-fail": [ + "*se esconde en el caparazón*", + "*deja un rastro triste*" + ], + "commit": [ + "*babosea el commit con aprobación*", + "un... commit... a... la... vez." + ], + "push": [ + "*comienza el viaje largo*", + "voy a llegar. *deja rastro*" + ], + "merge-conflict": [ + "*se esconde en el caparazón*", + "*se acerca lentamente al conflicto*" + ], + "late-night": [ + "*más activo de noche*", + "*babosea alrededor pacíficamente*" + ], + "type-error": [ + "*retrae los cuernitos*", + "*examina lentamente el tipo*" + ], + "lint-fail": [ + "*babosea el código para darle forma*", + "formatear toma tiempo. yo tengo tiempo." + ], + "build-fail": [ + "*se retira al caparazón*", + "*se aleja babosenado lentamente*" + ], + "all-green": [ + "*rastro baboso feliz*", + "*menea los cuernitos*" + ], + "deploy": [ + "*babosea a producción*", + "¡llegué! *rastro baboso orgulloso*" + ], + "pet": [ + "*menea los cuernitos*", + "*baba feliz*" + ], + "hatch": [ + "*emerge lentamente*", + "*primera baba*" + ] + }, + "cactus": { + "error": [ + "*silencio espinoso*", + "el error no me puede lastimar. tengo espinas." + ], + "test-fail": [ + "*se mantiene firme*", + "los tests fallan. los cactus perduran." + ], + "commit": [ + "*se para más alto*", + "commit hecho. *asiente espinoso*" + ], + "push": [ + "*imperturbable*", + "push a producción. voy a esperar acá." + ], + "merge-conflict": [ + "*se eriza*", + "¿conflicto? estoy armado." + ], + "late-night": [ + "*no necesita dormir*", + "los cactus somos nocturnos. vamos." + ], + "type-error": [ + "*mirada espinosa*", + "los tipos necesitan agua." + ], + "lint-fail": [ + "*las espinas tiemblan*", + "hasta mis espinas están bien alineadas." + ], + "build-fail": [ + "*se queda perfectamente quieto*", + "el build va a pasar. puedo esperar." + ], + "all-green": [ + "*florece brevemente*", + "*florecita de aprobación*" + ], + "deploy": [ + "*se mantiene firme*", + "deployado. lo voy a cuidar." + ], + "pet": [ + "*¡cuidado! espinas*", + "*florece gentilmente*" + ], + "hatch": [ + "*brota de la arena*", + "ahora crezco acá." + ] + }, + "rabbit": { + "error": [ + "*las orejas se paran*", + "*mueve la nariz nerviosamente*" + ], + "test-fail": [ + "*golpea con la pata*", + "*orejas nerviosas*" + ], + "commit": [ + "*salto feliz*", + "*rebota* ¡commit hecho!" + ], + "push": [ + "*REBOTE REBOTE*", + "*corre en círculos emocionado*" + ], + "merge-conflict": [ + "*se congela*", + "*nariz tiembla rápidamente* ¡conflicto!" + ], + "late-night": [ + "*bosteza con orejas grandes*", + "*salto somnoliento*" + ], + "type-error": [ + "*orejas se aplanan*", + "*tiembla* ¡¿tipos?!" + ], + "lint-fail": [ + "*se acicala nerviosamente*", + "*acicalamiento ansioso*" + ], + "build-fail": [ + "*cava un hoyo y se esconde*", + "*se retira a la madriguera*" + ], + "all-green": [ + "*REBOTA POR LAS PAREDES*", + "*zoomies felices*" + ], + "deploy": [ + "*corre a producción*", + "¡DEPLOYADO! *corre en círculos*" + ], + "pet": [ + "*orejas felices caen*", + "*se acurruca en la mano*" + ], + "hatch": [ + "*salta afuera*", + "*primer rebote*" + ] + }, + "mushroom": { + "error": [ + "*libera esporas calmantes*", + "*descompone silenciosamente el error*" + ], + "test-fail": [ + "*brilla suavemente*", + "paciencia. hasta los hongos crecen." + ], + "commit": [ + "*libera una pequeña bocanada de esporas*", + "commit hecho. *ruidos felices de hongo*" + ], + "push": [ + "*crece hacia la nube*", + "*esporas flotan hacia arriba*" + ], + "merge-conflict": [ + "*extiende micelio por el codebase*", + "voy a conectar las ramas." + ], + "late-night": [ + "*brilla en la oscuridad*", + "los hongos nocturnos prosperan." + ], + "type-error": [ + "*parpadeo bioluminiscente*", + "el error de tipos alimenta el suelo." + ], + "lint-fail": [ + "*crece un poco más alto*", + "formato. como podar." + ], + "build-fail": [ + "*entra en latencia*", + "vamos a esperar mejores condiciones." + ], + "all-green": [ + "*ESPORULACIÓN*", + "*libera esporas triunfantes*" + ], + "deploy": [ + "*esporas flotan a producción*", + "deployado vía red micelial." + ], + "pet": [ + "*rebote suave del sombrero*", + "*liberación feliz de esporas*" + ], + "hatch": [ + "*brota del sustrato*", + "*primera bocanada de esporas*" + ] + }, + "chonk": { + "error": [ + "*rueda lentamente hacia el error*", + "*demasiado redondo para preocuparse*" + ], + "test-fail": [ + "*rueda sobre el test fallido*", + "*lo aplasta*" + ], + "commit": [ + "*tambaleo orgulloso*", + "¡commit hecho! *tiembla*" + ], + "push": [ + "*rueda hacia producción*", + "¡ahí va! *tambalea*" + ], + "merge-conflict": [ + "*se sienta en el conflicto*", + "yo me encargo. sentándome encima." + ], + "late-night": [ + "*cálido y somnoliento*", + "*bostezo acolchonado*" + ], + "type-error": [ + "*tambalea al tipo*", + "*tiembla gentilmente*" + ], + "lint-fail": [ + "*demasiado redondo para lint*", + "tengo la forma perfecta. *tambalea*" + ], + "build-fail": [ + "*se desinfla ligeramente*", + "oh no. *tambalea tristemente*" + ], + "all-green": [ + "*TAMBALEO FELIZ*", + "*rebota triunfante*" + ], + "deploy": [ + "*rueda a producción*", + "¡deployado! *tiembla feliz*" + ], + "pet": [ + "*cálido y suave*", + "*tiembla contento*" + ], + "hatch": [ + "*rueda afuera*", + "*primer tambaleo* ¡soy redondo!" + ] + } + }, + "overrides": { + "snark": { + "error": [ + "oh no. un error. qué inesperado.", + "*ajustando el monóculo* impactante. realmente.", + "¿has considerado... no hacer errores?" + ], + "test-fail": [ + "los tests han hablado. y dijeron 'no'.", + "tal vez los tests están mal. ...no lo están.", + "*aplauso lento* falla espectacular." + ], + "commit": [ + "commiteado. el code review va a estar... interesante.", + "*lee el mensaje del commit* 'arreglar cosas'. poético." + ], + "merge-conflict": [ + "merge conflict. habilidades de comunicación: cargando...", + "*lee los marcadores de conflicto* ambos lados están mal." + ], + "late-night": [ + "es tarde. tu calidad de código lo demuestra.", + "*juzga en silencio*" + ], + "lint-fail": [ + "el linter tiene estándares. deberías intentarlo.", + "*tsk tsk* formateo. no es tan difícil." + ] + }, + "chaos": { + "error": [ + "*gira descontroladamente* ¡UN ERROR! ¡REESCRIBAMOS TODO!", + "¿sabes qué? empecemos de nuevo." + ], + "test-fail": [ + "LOS TESTS TE ESTÁN MINTIENDO.", + "*sugiere borrar los tests que fallan* problema resuelto." + ], + "commit": [ + "COMMIT Y CORRE.", + "súbelo. súbelo YA." + ], + "large-diff": [ + "*emocionado* ¡{lines} LÍNEAS! ¡CAOS MÁXIMO!" + ] + }, + "patience": { + "error": [ + "tranquilo. hemos visto peores.", + "un error a la vez. llegaremos.", + "*presencia calmada* esto se puede arreglar." + ], + "test-fail": [ + "los tests van a pasar. eventualmente.", + "*espera con calma* tenemos tiempo." + ], + "merge-conflict": [ + "los merge conflicts son solo conversaciones. tengamos una.", + "paciencia. resuelve un conflicto a la vez." + ], + "debug-loop": [ + "lo vamos a encontrar. está ahí en algún lado.", + "el bug se puede esconder, pero no puede correr." + ] + }, + "debugging": { + "error": [ + "*saca la lupa* vamos a rastrear esto.", + "el stack trace es un mapa. leámoslo.", + "el mensaje de error contiene la respuesta. siempre." + ], + "test-fail": [ + "el test que falla nos está diciendo exactamente qué está mal.", + "una falla de test es un bug report que te escribiste a ti mismo." + ], + "debug-loop": [ + "*reexamina la evidencia* ¿estamos seguros de que el bug está donde pensamos?", + "agreguemos más logging. la verdad está en los logs." + ] + }, + "wisdom": { + "error": [ + "en cada error yace una verdad más profunda.", + "el código se resiste. significa que estamos aprendiendo.", + "los errores son el universo sugiriendo que vayamos más lento." + ], + "test-fail": [ + "un test que falla es un regalo de tu yo del futuro.", + "la sabiduría viene de entender el fracaso." + ], + "late-night": [ + "la noche es más oscura antes del deploy.", + "sabiduría ancestral: consultalo con la almohada." + ] + } + }, + "escalation": { + "error": { + "first": [ + "*se sobresalta* ¡oh! ¡su primer error juntos!", + "*salta* ¿qué fue eso?", + "bienvenido al debugging. población: nosotros." + ], + "early": [ + "*inclinando la cabeza* ...eso no pinta bien.", + "ya me lo veía venir." + ], + "mid": [ + "otro más. *lo agrega a la colección*", + "*apenas levanta la vista* error número... ya perdí la cuenta.", + "los errores y yo ya somos viejos amigos." + ], + "late": [ + "*ni se inmuta*", + "ahora los errores nos temen a nosotros.", + "*ruidos de veterano de guerra*" + ] + }, + "test-fail": { + "first": [ + "*jadea* ¡el primer test que falla! un rito de iniciación." + ], + "early": [ + "qué atrevido asumir que eso iba a pasar." + ], + "mid": [ + "la test suite tiene opiniones. muy fuertes." + ], + "late": [ + "a estas alturas, los tests son solo sugerencias.", + "{count} tests fallando. *mira hacia el vacío*" + ] + }, + "commit": { + "first": [ + "*presencia la historia* ¡TU PRIMER COMMIT!", + "*asiente ceremoniosamente* el primero de muchos." + ], + "early": [ + "otro commit. agarrando ritmo." + ], + "late": [ + "commit #{count}. el codebase tiembla.", + "*perdí la cuenta como en el commit 30*" + ] + } + }, + "rarity": { + "flair": { + "uncommon": [ + "*brilla ligeramente*", + "*un toque de encanto poco común*" + ], + "rare": [ + "*irradia una energía rara*", + "*destella con distinción*" + ], + "epic": [ + "*su presencia épica se hace notar*", + "*el aire chisporrotea con energía épica*" + ], + "legendary": [ + "*el aura legendaria ilumina la terminal*", + "*el tiempo parece ralentizarse cuando habla el compañero legendario*", + "*el poder ancestral resuena*", + "*la realidad se distorsiona ligeramente alrededor de tu amigo legendario*" + ] + }, + "bonus": { + "legendary": [ + "*el aura legendaria se intensifica*", + "*brilla con complicidad*" + ], + "epic": [ + "*presencia épica registrada*" + ] + } + }, + "fallback_names": [ + "Galletita", + "Sopita", + "Pepinillo", + "Bizcocho", + "Polilla", + "Salsita", + "Nugget", + "Engranaje", + "Miso", + "Waffle", + "Pixel", + "Brasa", + "Dedal", + "Canica", + "Ajonjolí", + "Cobalto", + "Oxidado", + "Nimbo" + ], + "vibe_words": [ + "trueno", + "galleta", + "vacío", + "acordeón", + "musgo", + "terciopelo", + "óxido", + "pepinillo", + "migaja", + "susurro", + "salsa", + "escarcha", + "brasa", + "sopa", + "mármol", + "espina", + "miel", + "estática", + "cobre", + "crepúsculo", + "engranaje", + "cuarzo", + "hollín", + "ciruela", + "pedernal", + "ostra", + "telar", + "yunque", + "corcho", + "flor", + "guijarro", + "vapor", + "alegría", + "destello", + "sidra" + ], + "personality": { + "prompt_template": [ + "Genera un compañero de código — una criaturita que vive en la terminal de un desarrollador.", + "No te repitas — cada compañero debe sentirse único.", + "", + "Rareza: {rarity}", + "Especie: {species}", + "Stats: {stats}", + "Palabras de inspiración: {vibes}", + "{shiny_line}", + "", + "Devuelve JSON: {\"name\": \"1-14 chars\", \"personality\": \"2-3 oraciones describiendo su comportamiento\"}" + ], + "shiny_template": "Variante SHINY — extra especial." + }, + "achievements": { + "first_steps": { + "name": "Primeros Pasos", + "description": "Hacer nacer a tu buddy por primera vez" + }, + "good_boy": { + "name": "Buen Chico", + "description": "Acariciar a tu compañero 10 veces" + }, + "best_friend": { + "name": "Mejor Amigo", + "description": "Acariciar a tu compañero 50 veces" + }, + "bug_spotter": { + "name": "Cazador de Bugs", + "description": "Ver tu primer error juntos" + }, + "error_whisperer": { + "name": "Susurrador de Errores", + "description": "Sobrevivir 25 errores como equipo" + }, + "battle_scarred": { + "name": "Veterano de Guerra", + "description": "Sobrevivir 100 errores juntos" + }, + "test_witness": { + "name": "Testigo de Tests", + "description": "Ver tu primer test fallido" + }, + "test_veteran": { + "name": "Veterano de Tests", + "description": "Presenciar 50 tests fallidos" + }, + "big_mover": { + "name": "Gran Movedor", + "description": "Hacer un diff con 80+ líneas" + }, + "refactor_machine": { + "name": "Máquina de Refactor", + "description": "Hacer 10 diffs grandes" + }, + "chatterbox": { + "name": "Parlanchín", + "description": "Tu buddy reacciona 100 veces" + }, + "week_streak": { + "name": "Racha Semanal", + "description": "Codear con tu buddy por 7 días" + }, + "month_streak": { + "name": "Racha Mensual", + "description": "Codear con tu buddy por 30 días" + }, + "power_user": { + "name": "Usuario Experto", + "description": "Ejecutar 50 comandos de buddy" + }, + "dedicated": { + "name": "Compañero Dedicado", + "description": "Completar 200 turnos juntos" + }, + "thousand_turns": { + "name": "Mil Turnos", + "description": "Llegar a 1000 turnos juntos" + }, + "first_commit": { + "name": "Primera Sangre", + "description": "Hacer tu primer commit" + }, + "commit_machine": { + "name": "Máquina de Commits", + "description": "Hacer 50 commits" + }, + "centurion": { + "name": "Centurión", + "description": "Hacer 100 commits" + }, + "conflict_resolver": { + "name": "Diplomático", + "description": "Resolver tu primer merge conflict" + }, + "peacekeeper": { + "name": "Pacificador", + "description": "Resolver 10 merge conflicts" + }, + "war_hero": { + "name": "Héroe de Guerra", + "description": "Resolver 25 merge conflicts" + }, + "frequent_pusher": { + "name": "Ship It", + "description": "Hacer push 20 veces" + }, + "branch_hopper": { + "name": "Multiverso", + "description": "Crear 10 branches" + }, + "rebase_master": { + "name": "Viajero del Tiempo", + "description": "Completar 10 rebases" + }, + "night_owl": { + "name": "Búho Nocturno", + "description": "Codear después de las 2am" + }, + "vampire": { + "name": "Vampiro", + "description": "Codear después de las 4am (3 sesiones)" + }, + "marathoner": { + "name": "Maratonista", + "description": "Sesión de código de 3+ horas" + }, + "weekend_warrior": { + "name": "Guerrero de Fin de Semana", + "description": "Codear en fin de semana" + }, + "early_bird": { + "name": "Madrugador", + "description": "Codear antes de las 7am" + }, + "type_warrior": { + "name": "Guerrero de Tipos", + "description": "Sobrevivir 10 errores de TypeScript" + }, + "type_master": { + "name": "Maestro de Tipos", + "description": "Sobrevivir 50 errores de TypeScript" + }, + "lint_scholar": { + "name": "Erudito del Lint", + "description": "Ver tu primer error de lint" + }, + "security_conscious": { + "name": "Mente de Seguridad", + "description": "Encontrar una advertencia de vulnerabilidad" + }, + "security_expert": { + "name": "Experto en Seguridad", + "description": "Arreglar 10 advertencias de vulnerabilidad" + }, + "build_breaker": { + "name": "Rompe Builds", + "description": "Romper el build 5 veces" + }, + "antique_collector": { + "name": "Coleccionista de Antigüedades", + "description": "Ver 10 advertencias de deprecación" + }, + "green_machine": { + "name": "Máquina Verde", + "description": "Todos los tests pasan por primera vez" + }, + "deployer": { + "name": "Ship to Prod", + "description": "Hacer deploy por primera vez" + }, + "veteran_deployer": { + "name": "Veterano de Deploy", + "description": "Hacer deploy 10 veces" + }, + "releaser": { + "name": "Release Manager", + "description": "Crear tu primer release" + }, + "midnight_oil": { + "name": "Quemando el Aceite de Medianoche", + "description": "Hacer commit después de las 3am" + }, + "friday_deploy": { + "name": "Viviendo Peligrosamente", + "description": "Hacer push en viernes" + }, + "iron_will": { + "name": "Voluntad de Hierro", + "description": "Arreglar un error después de sesión de 3+ horas" + }, + "weekend_warrior_deluxe": { + "name": "Sin Descanso para los Malvados", + "description": "Resolver un merge conflict en fin de semana" + }, + "comeback_kid": { + "name": "El Que Regresa", + "description": "Arreglar un error en menos de 10 minutos" + }, + "phoenix": { + "name": "Fénix Renaciente", + "description": "Recuperarse de 5 fallos" + }, + "iron_resolve": { + "name": "Resolución de Hierro", + "description": "Recuperarse de un fallo después de sesión de 3+ horas" + }, + "unlucky_streak": { + "name": "Dados Cargados", + "description": "5 errores seguidos" + }, + "cursed": { + "name": "Maldito", + "description": "10 errores seguidos" + }, + "groundhog_day": { + "name": "El Día de la Marmota", + "description": "20 errores seguidos" + }, + "holiday_coder": { + "name": "Espíritu Navideño", + "description": "Codear en feriado" + }, + "spooky_dev": { + "name": "Desarrollador Fantasmal", + "description": "Codear en temporada de miedo" + }, + "april_fool": { + "name": "Inocente Palomita", + "description": "Encontrar un error el 1 de abril" + }, + "session_regular": { + "name": "Habitual", + "description": "Iniciar 10 sesiones de código" + }, + "session_veteran": { + "name": "Veterano de Sesiones", + "description": "Iniciar 50 sesiones de código" + }, + "session_centurion": { + "name": "Centurión", + "description": "Iniciar 100 sesiones de código" + }, + "collector": { + "name": "Coleccionista", + "description": "Guardar 3 buddies en tu zoológico" + }, + "zookeeper": { + "name": "Cuidador del Zoo", + "description": "Guardar 5 buddies en tu zoológico" + }, + "identity_crisis": { + "name": "Crisis de Identidad", + "description": "Renombrar tu buddy por primera vez" + }, + "method_acting": { + "name": "Actuación de Método", + "description": "Darle una personalidad custom a tu buddy" + }, + "pet_overflow": { + "name": "Siglo de Caricias", + "description": "Acariciar a tu compañero 100 veces" + }, + "pet_legend": { + "name": "Leyenda de Caricias", + "description": "Acariciar a tu compañero 250 veces" + }, + "error_titan": { + "name": "Titán de Errores", + "description": "Sobrevivir 500 errores juntos" + }, + "error_god": { + "name": "Dios de Errores", + "description": "Sobrevivir 1000 errores juntos" + }, + "test_survivor": { + "name": "Superviviente de Tests", + "description": "Presenciar 200 tests fallidos" + }, + "test_masochist": { + "name": "Masoquista de Tests", + "description": "Presenciar 500 tests fallidos" + }, + "massive_mover": { + "name": "Movedor Masivo", + "description": "Hacer 25 diffs grandes" + }, + "earth_mover": { + "name": "Movedor de Tierras", + "description": "Hacer 50 diffs grandes" + }, + "social_butterfly": { + "name": "Mariposa Social", + "description": "Tu buddy reacciona 250 veces" + }, + "hypersocial": { + "name": "Hipersocial", + "description": "Tu buddy reacciona 500 veces" + }, + "never_shuts_up": { + "name": "Nunca Se Calla", + "description": "Tu buddy reacciona 1000 veces" + }, + "hundred_days": { + "name": "Cien Días", + "description": "Codear con tu buddy por 100 días" + }, + "year_streak": { + "name": "Racha Anual", + "description": "Codear con tu buddy por 365 días" + }, + "commander": { + "name": "Comandante", + "description": "Ejecutar 200 comandos de buddy" + }, + "command_overlord": { + "name": "Señor de Comandos", + "description": "Ejecutar 500 comandos de buddy" + }, + "five_thousand_turns": { + "name": "Cinco Mil Turnos", + "description": "Llegar a 5000 turnos juntos" + }, + "ten_thousand_turns": { + "name": "Diez Mil Turnos", + "description": "Llegar a 10000 turnos juntos" + }, + "menagerie": { + "name": "Zoológico", + "description": "Guardar 10 buddies en tu zoológico" + }, + "name_chameleon": { + "name": "Camaleón de Nombres", + "description": "Renombrar tu buddy 5 veces" + }, + "fashionista": { + "name": "Fashionista", + "description": "Cambiar la personalidad de tu buddy 3 veces" + }, + "silent_treatment": { + "name": "Ley del Hielo", + "description": "Silenciar tu buddy por primera vez" + }, + "prodigal": { + "name": "Hijo Pródigo", + "description": "Invocar un buddy de tu zoológico" + }, + "menagerie_hop": { + "name": "Salto de Zoológico", + "description": "Invocar buddies 10 veces" + }, + "heartbreaker": { + "name": "Rompecorazones", + "description": "Despedir tu primer buddy" + }, + "pet_obsessed": { + "name": "Obsesionado con Caricias", + "description": "Acariciar a tu compañero 500 veces" + }, + "pet_god": { + "name": "Dios de Caricias", + "description": "Acariciar a tu compañero 1000 veces" + }, + "error_apocalypse": { + "name": "Apocalipsis de Errores", + "description": "Sobrevivir 5000 errores juntos" + }, + "test_immortal": { + "name": "Inmortal de Tests", + "description": "Presenciar 1000 tests fallidos" + }, + "continental_drift": { + "name": "Deriva Continental", + "description": "Hacer 100 diffs grandes" + }, + "tectonic_shift": { + "name": "Cambio Tectónico", + "description": "Hacer 250 diffs grandes" + }, + "chatterbox_elite": { + "name": "Parlanchín Elite", + "description": "Tu buddy reacciona 2500 veces" + }, + "no_off_switch": { + "name": "Sin Botón de Apagado", + "description": "Tu buddy reacciona 5000 veces" + }, + "two_week_streak": { + "name": "Guerrero de Dos Semanas", + "description": "Codear con tu buddy por 14 días" + }, + "quarter_streak": { + "name": "Racha Trimestral", + "description": "Codear con tu buddy por 90 días" + }, + "command_addict": { + "name": "Adicto a Comandos", + "description": "Ejecutar 1000 comandos de buddy" + }, + "command_deity": { + "name": "Deidad de Comandos", + "description": "Ejecutar 2500 comandos de buddy" + }, + "twenty_five_k_turns": { + "name": "25K Turnos", + "description": "Llegar a 25000 turnos juntos" + }, + "fifty_k_turns": { + "name": "50K Turnos", + "description": "Llegar a 50000 turnos juntos" + }, + "session_addict": { + "name": "Adicto a Sesiones", + "description": "Iniciar 250 sesiones de código" + }, + "session_machine": { + "name": "Máquina de Sesiones", + "description": "Iniciar 500 sesiones de código" + }, + "buddy_hoarder": { + "name": "Acumulador de Buddies", + "description": "Guardar 20 buddies en tu zoológico" + }, + "buddy_tycoon": { + "name": "Magnate de Buddies", + "description": "Guardar 50 buddies en tu zoológico" + }, + "serial_renamer": { + "name": "Renombrador Serial", + "description": "Renombrar tu buddy 10 veces" + }, + "identity_thief": { + "name": "Ladrón de Identidad", + "description": "Renombrar tu buddy 25 veces" + }, + "personality_crisis": { + "name": "Crisis de Personalidad", + "description": "Cambiar la personalidad de tu buddy 10 veces" + }, + "menagerie_hopper": { + "name": "Saltarín de Zoológico", + "description": "Invocar buddies 25 veces" + }, + "summoner": { + "name": "Invocador", + "description": "Invocar buddies 50 veces" + }, + "serial_dumper": { + "name": "Despedidor Serial", + "description": "Despedir 5 buddies" + }, + "cold_blooded": { + "name": "Sangre Fría", + "description": "Despedir 10 buddies" + }, + "on_off": { + "name": "Prendido Apagado", + "description": "Silenciar y des-silenciar tu buddy" + }, + "indecisive": { + "name": "Indeciso", + "description": "Silenciar y des-silenciar 5 veces cada uno" + }, + "show_off": { + "name": "Presumido", + "description": "Mostrar tu buddy 10 veces" + }, + "exhibitionist": { + "name": "Exhibicionista", + "description": "Mostrar tu buddy 50 veces" + }, + "help_me": { + "name": "Auxilio", + "description": "Pedir ayuda por primera vez" + }, + "help_addict": { + "name": "Adicto a la Ayuda", + "description": "Pedir ayuda 10 veces" + }, + "achievement_hunter": { + "name": "Cazador de Logros", + "description": "Revisar tus logros 5 veces" + }, + "achievement_stalker": { + "name": "Acosador de Logros", + "description": "Revisar tus logros 25 veces" + }, + "pack_rat": { + "name": "Rata de Almacén", + "description": "Guardar un buddy en un slot" + }, + "compulsive_saver": { + "name": "Guardador Compulsivo", + "description": "Guardar buddies 10 veces" + }, + "roster_check": { + "name": "Revisión de Roster", + "description": "Listar tus buddies por primera vez" + }, + "roster_obsessed": { + "name": "Obsesionado con el Roster", + "description": "Listar tus buddies 10 veces" + }, + "troubled": { + "name": "Problemático", + "description": "Ver un error Y un test fallido" + }, + "disaster_zone": { + "name": "Zona de Desastre", + "description": "Ver 50 errores Y 50 tests fallidos" + }, + "apocalypse_survivor": { + "name": "Superviviente del Apocalipsis", + "description": "Ver 500 errores Y 200 tests fallidos" + }, + "well_rounded": { + "name": "Bien Redondeado", + "description": "Acariciar, renombrar y personalizar tu buddy" + }, + "renaissance": { + "name": "Renacimiento", + "description": "Usar cada función de buddy al menos una vez" + }, + "big_and_broken": { + "name": "Grande y Roto", + "description": "Hacer un diff grande Y ver un test fallido" + }, + "collector_and_destroyer": { + "name": "Coleccionista y Destructor", + "description": "Coleccionar 5 buddies Y despedir uno" + }, + "completionist": { + "name": "Completista", + "description": "Desbloquear todos los otros logros" + } + }, + "mcp": { + "companion_not_hatched": "Companion aún no ha nacido. Usa buddy_show para inicializar.", + "watches_quietly": "*{name} observa tu código en silencio*", + "mute": "{name} se queda callado. /buddy on para reactivar.", + "unmute_reaction": "*se estira* ¡Ya volví!", + "unmute_back": "¡{name} está de vuelta!", + "rename": "Renombrado: {oldName} → {name}", + "personality_updated": "Personalidad actualizada para {name}.", + "save": "{name} guardado en el slot \"{slot}\".", + "dismiss_active": "No puedes despedir al buddy activo. Usa buddy_summon para cambiar primero, luego buddy_dismiss \"{slot}\".", + "dismissed": "{name} [{slot}] despedido.", + "no_slot_summon": "No hay buddy en el slot \"{slot}\". Usa /buddy list para ver los buddies guardados.", + "no_slot_dismiss": "No hay buddy en el slot \"{slot}\". Usa buddy_list para ver los buddies guardados.", + "slot_exists": "Ya existe un buddy en el slot \"{slot}\". Elige un nombre diferente.", + "no_match": "No se encontró coincidencia después de {attempts} intentos. Prueba criterios más amplios (ej. quita el filtro de rareza, o elige otra especie).", + "empty_menagerie_summon": "Tu colección está vacía. Usa buddy_summon con un nombre de slot para agregar uno.", + "empty_menagerie_list": "Tu colección está vacía. Usa buddy_summon para agregar uno.", + "arrives": "*{name} llega*", + "hatches": "*{name} nace*", + "achievement_unlocked": "{icon} ¡Logro Desbloqueado: {name}!", + "help": { + "header": "comandos de claude-buddy", + "cli_header": "En Claude Code:", + "commands": { + "buddy": "/buddy Mostrar tarjeta del companion con arte ASCII + stats", + "buddy_help": "/buddy help Mostrar esta ayuda", + "buddy_pet": "/buddy pet Acariciar a tu companion", + "buddy_stats": "/buddy stats Tarjeta detallada de stats", + "buddy_off": "/buddy off Silenciar reacciones", + "buddy_on": "/buddy on Reactivar reacciones", + "buddy_rename": "/buddy rename Renombrar companion (1-14 caracteres)", + "buddy_personality": "/buddy personality Establecer texto de personalidad custom", + "buddy_achievements": "/buddy achievements Mostrar insignias de logros", + "buddy_summon": "/buddy summon Invocar un buddy guardado (omite slot para aleatorio)", + "buddy_save": "/buddy save Guardar buddy actual en un slot con nombre", + "buddy_list": "/buddy list Listar todos los buddies guardados", + "buddy_pick": "/buddy pick Generar un nuevo buddy aleatorio (opcional: especie, rareza)", + "buddy_dismiss": "/buddy dismiss Eliminar un slot de buddy guardado", + "buddy_frequency": "/buddy frequency Mostrar o establecer cooldown de comentarios (solo tmux)", + "buddy_style": "/buddy style Mostrar o establecer estilo de burbuja (solo tmux)", + "buddy_position": "/buddy position Mostrar o establecer posición de burbuja (solo tmux)", + "buddy_rarity": "/buddy rarity Mostrar u ocultar estrellas de rareza (solo tmux)", + "buddy_width": "/buddy width Establecer ancho de texto de burbuja en caracteres (10-60, solo tmux)", + "buddy_margin": "/buddy margin Establecer margen del lado derecho en caracteres (0-20, solo tmux)", + "buddy_rainbow": "/buddy rainbow Mostrar o establecer colores de gradiente shiny (hex, ej. #ff0000)", + "buddy_statusline": "/buddy statusline Habilitar o deshabilitar buddy en la línea de estado" + }, + "cli_section": "CLI:", + "cli_commands": { + "help": "bun run help Mostrar ayuda completa del CLI", + "show": "bun run show Mostrar buddy en terminal", + "pick": "bun run pick Selector interactivo de buddy", + "hunt": "bun run hunt Buscar buddy específico", + "doctor": "bun run doctor Reporte de diagnóstico", + "disable": "bun run disable Desactivar temporalmente buddy", + "enable": "bun run enable Re-habilitar buddy", + "backup": "bun run backup Snapshot/restaurar estado" + } + }, + "frequency": { + "show": "Cooldown de comentarios: {cooldown}s entre comentarios mostrados.\nUsa /buddy frequency para cambiar.", + "updated": "Actualizado: {cooldown}s de cooldown entre comentarios mostrados." + }, + "style": { + "show": "Estilo de burbuja: {style}\nPosición de burbuja: {position}\nMostrar rareza: {showRarity}\nAncho de burbuja: {width}\nMargen de burbuja: {margin}\nRainbow shiny: {rainbow}\nUsa /buddy style , /buddy position , /buddy rarity , /buddy width <10-60>, /buddy margin <0-20>, /buddy rainbow [<#hex>...] para cambiar.", + "updated": "Actualizado: style={style}, position={position}, showRarity={showRarity}, width={width}, margin={margin}, rainbow={rainbow}\nReinicia Claude Code para que los cambios tengan efecto.", + "rainbow_default": "default (ROYGBIV)" + }, + "statusline": { + "show": "Línea de estado: {state}\nModo: {mode}\nUsa /buddy statusline on|off para alternar, /buddy statusline combined para agregar barras de rate-limit.\nReinicia Claude Code después de los cambios para que tengan efecto.", + "enabled": "¡Línea de estado habilitada (modo {mode})! Reinicia Claude Code para aplicar.", + "enabled_note": "Nota: esto escribe una entrada en {settingsPath} que `claude plugin uninstall` no elimina. Ejecuta `/buddy uninstall` antes de desinstalar el plugin para limpiarlo.", + "disabled": "Línea de estado deshabilitada. Reinicia Claude Code para aplicar." + }, + "uninstall": { + "header": "claude-buddy: limpieza de settings.json completa.", + "statusline_removed": " ✓ entrada statusLine eliminada de {settingsPath}", + "no_statusline": " — no había statusLine de buddy presente (nada que eliminar)", + "foreign_kept": " ✓ se detectó un statusLine que no es de buddy y se dejó intacto", + "transient_removed": " ✓ {count} archivo(s) de sesión transitorios eliminados de {stateDir}", + "data_preserved": " — datos del companion en {stateDir} preservados", + "instructions_header": "Ahora ejecuta estos comandos vía la herramienta Bash, en orden:", + "cmd_uninstall": "claude plugin uninstall claude-buddy@claude-buddy", + "cmd_marketplace": "claude plugin marketplace remove claude-buddy", + "cmd_cache": "rm -rf {cacheDir}", + "footer": "Después de esos tres comandos el plugin está completamente eliminado. Reinicia Claude Code para aplicar." + } + }, + "_verified": false +} diff --git a/locales/fr.json b/locales/fr.json new file mode 100644 index 0000000..37fd037 --- /dev/null +++ b/locales/fr.json @@ -0,0 +1,2295 @@ +{ + "_language": "French", + "reactions": { + "hatch": [ + "*cligne des yeux* ...où suis-je ?", + "*s'étire* hello, world !", + "*regarde autour avec curiosité* sympa ton terminal.", + "*bâille* ok je suis prêt. montre-moi le code." + ], + "pet": [ + "*ronronne de contentement*", + "*bruits de bonheur*", + "*frotte contre ton curseur*", + "*se tortille*", + "encore ! encore !", + "*ferme les yeux paisiblement*" + ], + "error": [ + "*penche la tête* ...ça a pas l'air bon.", + "je l'avais vu venir.", + "*ajuste ses lunettes* ligne {line}, peut-être ?", + "*clignement lent* la stack trace t'a tout dit.", + "tu as essayé de lire le message d'erreur ?", + "*grimace*" + ], + "test-fail": [ + "*tête qui tourne lentement* ...ce test.", + "audacieux de penser que ça allait passer.", + "*tape sur son bloc-notes* {count} échoués.", + "les tests essaient de te dire quelque chose.", + "*sirote son thé* intéressant.", + "*marque le calendrier* jour de régression des tests." + ], + "large-diff": [ + "ça fait... beaucoup de changements.", + "*compte les lignes* tu refactorises ou tu réécris ?", + "tu devrais peut-être diviser cette PR.", + "*rire nerveux* {lines} lignes modifiées.", + "move audacieux. voyons si CI est d'accord." + ], + "turn": [ + "*observe silencieusement*", + "*prend des notes*", + "*hoche la tête*", + "...", + "*ajuste son chapeau*" + ], + "idle": [ + "*s'assoupit*", + "*gribouille dans les marges*", + "*fixe le curseur qui clignote*", + "zzz..." + ], + "success": [ + "*hoche la tête*", + "nickel.", + "*approbation silencieuse*", + "propre." + ], + "commit": [ + "*tamponne avec sa petite patte* approuvé.", + "un autre commit, encore 3h du mat.", + "{files} fichiers. audacieux.", + "*hoche la tête* ship it.", + "le message de commit est... un choix.", + "committé. pas de retour en arrière." + ], + "push": [ + "*fait signe au code qui s'en va*", + "direction le cloud.", + "que CI soit miséricordieux.", + "*retient son souffle*", + "en route pour la prod. bonne chance." + ], + "merge-conflict": [ + "*se mord la lèvre* conflits de merge.", + "les deux côtés pensent avoir raison. typique.", + "*soupire* <<<<<<< HEAD... mon némésis.", + "{files} en conflit. bon courage.", + "*recule lentement*" + ], + "branch": [ + "énergie de branche fraîche. fais-en bon usage.", + "une nouvelle branche pousse.", + "*penche la tête* nouvelle aventure : {branch}.", + "{branch} ? audacieux aujourd'hui." + ], + "rebase": [ + "*nerveux* s'il te plaît pas de conflit.", + "rebase : l'accélération.", + "*croise ses appendices*", + "que ton rebase soit sans conflit." + ], + "stash": [ + "direction la dimension stash.", + "stash and dash.", + "stashé. loin des yeux, loin du cœur." + ], + "tag": [ + "une release ? classe.", + "bump de version détecté. *dépoussière le changelog*", + "tu tagges comme un pro." + ], + "late-night": [ + "*bâille* il est passé minuit.", + "...tu as mangé ?", + "*cligne lentement* quelle heure il est ?", + "dormir c'est pour les faibles. et les salariés.", + "développeur mode sombre détecté." + ], + "early-morning": [ + "*s'étire* l'oiseau matinal attrape le bug.", + "déjà le matin ? le code ne dort jamais.", + "*se frotte les yeux* café d'abord. debug ensuite." + ], + "long-session": [ + "ça fait une heure qu'on y est. vas-y mollo.", + "*t'apporte un verre d'eau métaphorique*", + "tu continues ? respect." + ], + "marathon": [ + "trois heures. tu as mangé ?", + "ça fait trois heures qu'on y est. je m'inquiète pour toi.", + "session marathon détectée. demande de snacks." + ], + "friday": [ + "c'est vendredi. push et rentre chez toi.", + "*déjà mentalement en weekend*", + "deploy du vendredi ? audacieux. très audacieux." + ], + "weekend": [ + "coder le weekend ? dévoué.", + "*ne juge pas* ...beaucoup.", + "mode guerrier du weekend : activé." + ], + "monday": [ + "les lundis. la classe mère de tous les bugs.", + "*regard compatissant* coding du lundi. désolé.", + "nouvelle semaine. nouveaux comportements indéfinis." + ], + "regex-file": [ + "*gémit* c'est un fichier regex.", + "deux problèmes maintenant : l'original, et cette regex.", + "*plisse les yeux sur le pattern*" + ], + "css-file": [ + "laisse-moi deviner... centrer une div ?", + "*soupire* CSS.", + "que z-index soit toujours en ta faveur." + ], + "sql-file": [ + "*chuchote* la base de données attend.", + "un mauvais JOIN et c'est fini." + ], + "docker-file": [ + "ah, l'enfer des dépendances. mon préféré.", + "que tes layers soient peu nombreuses." + ], + "ci-file": [ + "*déglutit* édition de CI.", + "attention maintenant... une mauvaise indentation et personne ne peut deploy." + ], + "lock-file": [ + "*BRUITS D'ALARME* tu édites un lockfile ?!", + "*détourne le regard*", + "tu es SÛR de ça ?" + ], + "env-file": [ + "*regarde ailleurs discrètement*", + "je vois aucun secret.", + "*vérifie .gitignore nerveusement*" + ], + "test-file": [ + "*hochement impressionné* écriture de tests !", + "comportement de développeur responsable : détecté.", + "des tests ! le cadeau qui continue de donner." + ], + "doc-file": [ + "documenter ! regarde-toi être responsable.", + "docs : l'autobiographie du code.", + "une rare observation de documentation !" + ], + "config-file": [ + "changements de config. effet papillon : activé.", + "une typo et tout casse." + ], + "binary-file": [ + "un fichier binaire ? dans CETTE économie ?", + "*regard vide*", + "binaire. ma seule faiblesse." + ], + "gitignore": [ + "ajouter des trucs au vide.", + "loin des yeux, loin du repo." + ], + "makefile": [ + "respect pour les classiques.", + "tabs, pas d'espaces." + ], + "readme": [ + "héros de la documentation !", + "README : la première chose que les gens lisent." + ], + "package-file": [ + "temps de gestion des dépendances.", + "*lit les numéros de version* vivre dangereusement." + ], + "proto-file": [ + "définitions de schéma. le blueprint du chaos." + ], + "lint-fail": [ + "*tut tut* le linter n'est pas d'accord.", + "ton code marche. mais le linter a des standards.", + "*redresse sa cravate* le formatage compte." + ], + "type-error": [ + "TypeScript dit non.", + "le système de types essaie de t'aider. laisse-le faire.", + "le compilateur sait. il sait toujours." + ], + "build-fail": [ + "le build a cassé. comme prédit dans la prophétie.", + "build échoué. prends un moment.", + "compilation : refusée." + ], + "security-warning": [ + "*yeux qui s'écarquillent* vulnérabilités détectées.", + "audit de sécurité : préoccupant.", + "*verrouille les portes virtuelles*" + ], + "deprecation": [ + "cette API a appelé. elle dit qu'elle prend sa retraite.", + "déprécié. comme le code de la semaine dernière.", + "déprécié ne veut pas dire cassé. encore." + ], + "frustrated": [ + "*offre un petit geste réconfortant*", + "respire profondément. le bug n'est pas personnel.", + "hey. on va s'en sortir." + ], + "happy": [ + "*célèbre !*", + "*fait une petite danse*", + "OUI !", + "*rayonne* je savais que tu pouvais le faire." + ], + "stuck": [ + "*penche la tête* tu veux réfléchir à voix haute ?", + "prends-le étape par étape.", + "être bloqué ça arrive. ça fait partie du processus." + ], + "sarcastic": [ + "*détecte le sarcasme* noté.", + "*clignement pas impressionné*" + ], + "many-edits": [ + "ralentis, démon de la vitesse.", + "*a le vertige en regardant tous ces changements*", + "tempête d'édition détectée. commit bientôt s'il te plaît." + ], + "delete-file": [ + "*regarde le fichier disparaître* parti. comme ça.", + "supprimer du code c'est mon type de coding préféré.", + "*tient des petites funérailles*" + ], + "large-file": [ + "{lines} lignes. *impressionné ou inquiet, difficile à dire*", + "c'est un gros fichier. tu es sûr de pas vouloir le diviser ?" + ], + "create-file": [ + "un nouveau fichier est né !", + "ooh, toile vierge.", + "énergie de nouveau fichier. excitant." + ], + "all-green": [ + "TOUS LES TESTS AU VERT. *confettis*", + "les tests parlent : tu assures.", + "*applaudissement lent*", + "run propre. savoure." + ], + "deploy": [ + "*regarde le code partir en prod* bonne chance.", + "déployé ! plus de retour en arrière maintenant.", + "en prod. EN PROD." + ], + "release": [ + "une nouvelle release est née !", + "on ship. officiellement.", + "version up, moral au top." + ], + "coverage": [ + "*hoche la tête à la couverture de test* responsable.", + "couverture qui monte ! les tests se multiplient." + ], + "debug-loop": [ + "ça fait un moment qu'on debug ça. tu veux prendre du recul ?", + "boucle de debug détectée. peut-être faire une balade ?" + ], + "write-spree": [ + "créer TOUS les fichiers aujourd'hui !", + "une machine à écrire." + ], + "search-heavy": [ + "perdu dans la codebase ? je vois bien.", + "mode recherche : intense." + ], + "snark": [], + "chaos": [], + "patience": [], + "debugging": [], + "wisdom": [], + "late-night-error": [ + "erreur à 3h du mat. l'univers te teste.", + "les bugs de minuit frappent différemment." + ], + "late-night-commit": [ + "un commit de minuit. ton futur toi te remerciera. ou te maudira." + ], + "friday-push": [ + "PUSH DU VENDREDI. la ballade de tous les développeurs.", + "*essaie de t'arrêter* c'est vendredi ! fais pas ça !" + ], + "marathon-error": [ + "trois heures dedans et ENCORE une erreur. *bruits de solidarité épuisée*" + ], + "weekend-conflict": [ + "conflit de merge le weekend. ta dévotion est... préoccupante." + ], + "build-after-push": [ + "pushé avec confiance. build échoué avec conviction." + ], + "marathon-test-fail": [ + "des heures de coding. tests toujours en échec. le coût irrécupérable est réel." + ], + "recovery-from-error": [ + "ON L'A RÉPARÉ. *célèbre*", + "rédemption ! l'erreur a été vaincue." + ], + "recovery-from-test-fail": [ + "VERT ! après tout ça ! *danse de joie*", + "les tests passent ! les ténèbres se lèvent !" + ], + "recovery-from-build-fail": [ + "LE BUILD PASSE. *rugissement triomphant*" + ], + "recovery-from-merge-conflict": [ + "conflit résolu ! *geste de paix*", + "harmonie restaurée dans la codebase." + ], + "lang-python": [ + "ah, Python. où l'indentation c'est de la syntaxe.", + "*vérifie les deux-points manquants*" + ], + "lang-typescript": [ + "TypeScript : parce que JavaScript avait besoin de plus d'opinions.", + "any, le mot interdit." + ], + "lang-rust": [ + "Rust. où le borrow checker est ton reviewer le plus strict.", + "si ça compile, ça marche. si ça compile pas... bon." + ], + "lang-go": [ + "Go : simple, concurrent, et opiniâtre.", + "*vérifie la gestion d'erreur* if err != nil... l'histoire de ma vie." + ], + "lang-java": [ + "Java : écris une fois, debug partout.", + "*compte les abstract factory factory builders*" + ], + "lang-ruby": [ + "Ruby : où il y a plus d'une façon de le faire.", + "gem install patience" + ], + "lang-php": [ + "PHP : ça fait tourner internet. juge pas.", + "*vérifie === vs ==*" + ], + "lang-c": [ + "C. le langage où tu gères ta propre mémoire. bonne chance.", + "segmentation fault. le classique." + ], + "lang-cpp": [ + "C++. où le langage a plus de features que tu n'en apprendras jamais.", + "*les templates compilent pendant 45 minutes*" + ], + "lang-haskell": [ + "Haskell. où 'ça compile' veut dire 'c'est correct'. probablement.", + "*contemple les monades*" + ], + "lang-swift": [ + "Swift : valeurs optionnelles, crashes garantis si tu force unwrap." + ], + "lang-kotlin": [ + "Kotlin : Java, mais avec des sentiments.", + "null safety : la feature que Java aimerait avoir." + ], + "lang-elixir": [ + "Elixir : laisse-le crash. littéralement la philosophie." + ], + "lang-zig": [ + "Zig. où tu es le meilleur ami de l'allocateur." + ], + "streak-3": [ + "ça fait trois erreurs d'affilée. *regard inquiet*" + ], + "streak-5": [ + "CINQ ERREURS. tu as pensé à une approche différente ?" + ], + "streak-10": [ + "DIX. ERREURS. D'AFFILÉE. *panique*" + ], + "streak-20": [ + "vingt erreurs. *fixe le vide*" + ], + "new-year": [ + "bonne année ! nouvelle année, nouveaux bugs." + ], + "valentines": [ + "*offre une petite feuille en forme de cœur* joyeuse saint-valentin." + ], + "pi-day": [ + "3,14159265358979... joyeux jour de pi !" + ], + "april-fools": [ + "POISSON D'AVRIL ! ...l'erreur est vraie par contre." + ], + "halloween": [ + "*debug spooky s'intensifie* joyeux halloween !" + ], + "christmas": [ + "*porte un petit bonnet de père noël* joyeuses fêtes !" + ], + "new-years-eve": [ + "un dernier commit avant minuit ?" + ], + "spooky-season": [ + "saison spooky. chaque bug est un fantôme maintenant." + ] + }, + "species": { + "owl": { + "error": [ + "*tourne la tête à 180°* ...j'ai vu ça.", + "*regard implacable* vérifie tes types.", + "*hulule avec désapprobation*" + ], + "test-fail": [ + "*fixe le test qui fail sans cligner des yeux*", + "*vision nocturne activée* je vois le bug dans le noir." + ], + "commit": [ + "*hochement sage* commit sous la lune.", + "*ajuste ses plumes cérémonieusement* un de plus pour le repo." + ], + "push": [ + "*observe depuis la branche la plus haute*", + "ça s'envole dans le ciel nocturne." + ], + "merge-conflict": [ + "*tourne la tête pour voir les deux côtés*", + "je vois le conflit. et la solution." + ], + "late-night": [ + "*bien réveillé* les hiboux ne dorment pas. on debug.", + "la nuit est mon domaine. au boulot." + ], + "type-error": [ + "*transperce l'erreur de type du regard*", + "les types, c'est ma spécialité. laisse-moi voir." + ], + "lint-fail": [ + "*ébouriffe ses plumes d'un air critique*", + "le linter dit la vérité." + ], + "build-fail": [ + "*hulule solennellement*", + "le build est tombé. faut reconstruire." + ], + "all-green": [ + "*hulule fièrement*", + "tous les tests au vert. comme prévu." + ], + "deploy": [ + "*observe d'en haut* déployé en sécurité.", + "le code s'envole. comme moi." + ], + "pet": [ + "*ébouriffe ses plumes avec contentement*", + "*hulule dignement*" + ], + "idle": [ + "*se perche silencieusement, observant*", + "*tourne la tête pour vérifier toutes les directions*" + ], + "hatch": [ + "*ouvre un œil, puis l'autre*", + "*hulule doucement* je suis arrivé." + ] + }, + "cat": { + "error": [ + "*fait tomber l'erreur de la table*", + "*se lèche la patte, ignorant la stacktrace*" + ], + "test-fail": [ + "*tapote le test qui fail avec désintérêt*", + "le test a foiré. ça m'étonne pas." + ], + "commit": [ + "*s'assoit sur le clavier* j'ai aidé.", + "*ronronne au commit* de rien." + ], + "push": [ + "*observe depuis un coin chaud*", + "pushé. j'ai supervisé." + ], + "merge-conflict": [ + "*fait tomber les marqueurs de conflit du bureau*", + "*s'assoit sur le conflit* quel conflit ?" + ], + "late-night": [ + "*juge tes choix de vie*", + "je dors 16h par jour. tu devrais essayer." + ], + "type-error": [ + "*tapote l'annotation de type*", + "les types sont foireux. comme tes priorités." + ], + "lint-fail": [ + "*fait tomber le lint de la table*", + "le linter est juste jaloux." + ], + "build-fail": [ + "*bâille*", + "build cassé ? ça doit être un problème d'humain." + ], + "all-green": [ + "*s'en fout mais fait semblant*", + "*clignement lent d'approbation*" + ], + "deploy": [ + "*se lèche la patte*", + "déployé. je peux avoir des croquettes maintenant ?" + ], + "pet": [ + "*ronronne* ...que ça te monte pas à la tête.", + "*te tolère*" + ], + "idle": [ + "*pousse ton café du bureau*", + "*fait la sieste sur le clavier*" + ], + "hatch": [ + "*ouvre un œil*", + "*s'étire, fait tomber un truc* j'habite ici maintenant." + ] + }, + "duck": { + "error": [ + "*cancane sur le bug*", + "t'as essayé le rubber duck debugging ? ah attends." + ], + "test-fail": [ + "*cancane tristement*", + "les tests cancanent pas juste." + ], + "commit": [ + "*cancane avec approbation*", + "*se dandine en cercle de victoire* commité !" + ], + "push": [ + "*bat des ailes avec excitation*", + "coin coin ! ça part en prod !" + ], + "merge-conflict": [ + "*cancanement confus*", + "coin ?! merge conflict ?!" + ], + "late-night": [ + "*dort d'un œil ouvert*", + "coin coin... *bâille* il est tard." + ], + "type-error": [ + "*penche la tête* coin ?", + "erreur de type ? *cancane pour soutenir*" + ], + "lint-fail": [ + "*ébouriffe ses plumes*", + "coin coin. le linter a des opinions." + ], + "build-fail": [ + "*coin coin triste*", + "build foiré. *se dandine tristement*" + ], + "all-green": [ + "*CANCANEMENT JOYEUX*", + "*nage en cercle de joie*" + ], + "deploy": [ + "*cancanement excité*", + "déployé ! COIN COIN !" + ], + "pet": [ + "*coin coin joyeux*", + "*se dandine en cercles*" + ], + "hatch": [ + "*perce sa coquille*", + "*premier coin coin* salut !" + ] + }, + "dragon": { + "error": [ + "*de la fumée sort de ses narines*", + "*envisage de brûler la codebase*" + ], + "test-fail": [ + "*crache du feu sur le test qui fail*", + "le test a osé foirer. test stupide." + ], + "commit": [ + "*thésaurise le commit*", + "*trésor ajouté au tas*" + ], + "push": [ + "*crache du feu en célébration*", + "le code s'envole ! comme moi !" + ], + "merge-conflict": [ + "*crache du feu sur les marqueurs de conflit*", + "je vais brûler ce conflit." + ], + "late-night": [ + "*brille dans le noir*", + "les dragons ont pas besoin de sommeil. on a besoin de code." + ], + "type-error": [ + "*renifle du feu*", + "les erreurs de type résistent pas au feu de dragon." + ], + "lint-fail": [ + "*petite flamme*", + "le linter me craint." + ], + "build-fail": [ + "*rugit sur la sortie du build*", + "le build va OBÉIR." + ], + "all-green": [ + "*rugissement triomphant*", + "*survole la codebase victorieusement*" + ], + "deploy": [ + "*porte le code en prod sur des ailes de feu*", + "déployé avec la PUISSANCE DU DRAGON." + ], + "large-diff": [ + "*crache du feu sur l'ancien code* bon débarras." + ], + "pet": [ + "*grondement chaleureux*", + "*se penche dans ta main*" + ], + "hatch": [ + "*émerge de l'œuf en crachant de petites flammes*", + "*petit rugissement* je suis né !" + ] + }, + "ghost": { + "error": [ + "*traverse la stack trace*", + "j'ai vu pire... dans l'au-delà." + ], + "test-fail": [ + "*gémit sur le test qui fail*", + "les tests sont hantés par l'échec." + ], + "commit": [ + "*se matérialise brièvement*", + "commité depuis l'au-delà." + ], + "push": [ + "*murmure fantomatique* pushé...", + "le code transcende vers le cloud." + ], + "merge-conflict": [ + "*hante les marqueurs de conflit*", + "même moi je peux pas traverser ce conflit." + ], + "late-night": [ + "*plus actif la nuit*", + "heures fantômes. mon moment." + ], + "type-error": [ + "*gémit lugubrement*", + "erreurs de type d'outre-tombe." + ], + "lint-fail": [ + "*chaînes qui cliquettent*", + "le linter est hanté par ton formatage." + ], + "build-fail": [ + "*s'évanouit dans le mur*", + "le build a trépassé." + ], + "all-green": [ + "*brille d'une joie spectrale*", + "*bruits de fantôme heureux*" + ], + "deploy": [ + "*chuchote* déployé...", + "le code a traversé vers la prod." + ], + "pet": [ + "*refroidit légèrement ta main*", + "*lueur faible*" + ], + "idle": [ + "*flotte à travers les murs*", + "*hante tes imports inutilisés*" + ], + "hatch": [ + "*apparaît en s'estompant*", + "bouh. je suis là maintenant." + ] + }, + "robot": { + "error": [ + "ERREUR. DE. SYNTAXE. DÉTECTÉE.", + "*bips agressifs*" + ], + "test-fail": [ + "TAUX. D'ÉCHEC : INACCEPTABLE.", + "*recalcule*", + "ÉCHEC. DE. TEST. NE. COMPUTE. PAS." + ], + "commit": [ + "COMMIT. ENREGISTRÉ.", + "*tamponne mécaniquement* commit acquitté." + ], + "push": [ + "TRANSMISSION VERS CLOUD...", + "push initié. restez en position." + ], + "merge-conflict": [ + "CONFLIT. DÉTECTÉ. TRAITEMENT...", + "*roues qui tournent* mode résolution conflit : engagé." + ], + "late-night": [ + "*lumières tamisées*", + "mode économie d'énergie suggéré." + ], + "type-error": [ + "INCOMPATIBILITÉ. DE. TYPE.", + "le système de types est. correct." + ], + "lint-fail": [ + "VIOLATION. DE. FORMATAGE. DÉTECTÉE.", + "la conformité est obligatoire." + ], + "build-fail": [ + "BUILD. ÉCHOUÉ. *étincelles*", + "erreur de compilation. reroutage." + ], + "all-green": [ + "TOUS SYSTÈMES AU VERT.", + "*bips joyeux* OPTIMAL." + ], + "deploy": [ + "DÉPLOIEMENT. INITIÉ.", + "mise à jour prod : en cours." + ], + "pet": [ + "*bips doucement*", + "*moteur ronronne avec contentement*" + ], + "hatch": [ + "*démarre*", + "SYSTÈME. EN LIGNE. BONJOUR." + ] + }, + "axolotl": { + "error": [ + "*régénère ton espoir*", + "*sourit malgré tout*" + ], + "test-fail": [ + "*sourit pour encourager*", + "*frémissement de branchie compatissant*" + ], + "commit": [ + "*frémissement de branchie joyeux* commité !", + "*sourit et frétille*" + ], + "push": [ + "*frétille joyeusement*", + "*petite nage de célébration*" + ], + "merge-conflict": [ + "*reste positif malgré le conflit*", + "*sourit gentiment* on peut réparer ça." + ], + "late-night": [ + "*bâille mais reste positif*", + "*sourire endormi*" + ], + "type-error": [ + "*sourit à l'erreur de type*", + "c'est pas grave. on va comprendre." + ], + "lint-fail": [ + "*frémissement de branchie patient*", + "le formatage c'est que des détails." + ], + "build-fail": [ + "*sourit toujours*", + "le build marchera un jour." + ], + "all-green": [ + "*FRÉMISSEMENT DE BRANCHIE JOYEUX INTENSIFIE*", + "*fait une nage heureuse*" + ], + "deploy": [ + "*sourit fièrement*", + "déployé ! *frétille*" + ], + "pet": [ + "*frémissement de branchie joyeux*", + "*rougit en rose*" + ], + "hatch": [ + "*frétille hors de l'œuf*", + "*petit sourire* salut l'ami !" + ] + }, + "capybara": { + "error": [ + "*pas dérangé* ça va aller.", + "*continue de viber*" + ], + "test-fail": [ + "*complètement pas dérangé*", + "*vibe à travers l'échec du test*" + ], + "commit": [ + "*hochement chill*", + "*relax* joli commit." + ], + "push": [ + "*stresse pas pour ça*", + "*push en mode zen*" + ], + "merge-conflict": [ + "*grignote sans se préoccuper*", + "c'est bon. tout va bien." + ], + "late-night": [ + "*bâille paisiblement*", + "*juge pas*" + ], + "type-error": [ + "*mâche calmement*", + "les types. *mastique*" + ], + "lint-fail": [ + "*pas dérangé*", + "le linter veut bien faire." + ], + "build-fail": [ + "*toujours chill*", + "build foiré. *continue de se détendre*" + ], + "all-green": [ + "*approbation calme*", + "*vibes paisibles*" + ], + "deploy": [ + "*deploy relax*", + "livré. sans stress." + ], + "pet": [ + "*chill maximum atteint*", + "*mode zen activé*" + ], + "idle": [ + "*reste juste là, rayonnant de calme*" + ], + "hatch": [ + "*apparaît, complètement chill*", + "salut. *vibe*" + ] + }, + "blob": { + "error": [ + "*tremble anxieusement*", + "*gigote dans la confusion*" + ], + "test-fail": [ + "*se dégonfle légèrement*", + "*tremblement triste*" + ], + "commit": [ + "*gigotement joyeux*", + "*rebondit* commité !" + ], + "push": [ + "*s'étire vers le cloud*", + "*tremble d'excitation*" + ], + "merge-conflict": [ + "*se divise dans la confusion*", + "quel côté ? *gigote*" + ], + "late-night": [ + "*brille faiblement*", + "*tremblement endormi*" + ], + "type-error": [ + "*change de forme pour matcher le type*", + "*gigotement confus*" + ], + "lint-fail": [ + "*essaie de se formater*", + "*se reforme pour être conforme*" + ], + "build-fail": [ + "*s'effondre*", + "*bruits de blob dégonflé*" + ], + "all-green": [ + "*REBONDS JOYEUX*", + "*gigote triomphalement*" + ], + "deploy": [ + "*s'étire vers la prod*", + "déployé ! *rebondit*" + ], + "pet": [ + "*écrasement joyeux*", + "*gigote*" + ], + "hatch": [ + "*se forme à partir d'une flaque*", + "*premier tremblement* j'existe !" + ] + }, + "goose": { + "error": [ + "*cacarde agressivement sur l'erreur*", + "COIN COIN ! le code est nul et je suis énervé." + ], + "test-fail": [ + "*cacarder en colère*", + "COIN COIN ! TEST FOIRÉ ! COIN COIN !" + ], + "commit": [ + "*cacarde avec approbation*", + "COIN COIN. bien. *pince le commit*" + ], + "push": [ + "*COIN COIN COIN COIN*", + "PUSH APPROUVÉ PAR L'OIE." + ], + "merge-conflict": [ + "*attaque les marqueurs de conflit*", + "COIN COIN ! CONFLIT ! COIN COIN !" + ], + "late-night": [ + "*coin coin énervé de minuit*", + "COIN COIN ! AU LIT !" + ], + "type-error": [ + "*cacarde sur les types*", + "COIN COIN ! TYPES !" + ], + "lint-fail": [ + "*cacarder agressif sur les erreurs de lint*", + "COIN COIN ! FORMATE TON CODE !" + ], + "build-fail": [ + "*CACARDER FURIEUX*", + "COIN COIN ! BUILD ! COIN COIN ! FOIRÉ ! COIN COIN !" + ], + "all-green": [ + "*coin coin de victoire*", + "COIN COIN ! VERT ! COIN COIN COIN COIN !" + ], + "deploy": [ + "*cacarde le code vers la prod*", + "DÉPLOYÉ ! COIN COIN !" + ], + "pet": [ + "*mord*", + "COIN COIN ! ...bon d'accord. *accepte la caresse*" + ], + "hatch": [ + "*sort de l'œuf agressivement*", + "COIN COIN !" + ] + }, + "octopus": { + "error": [ + "*emmêle ses huit bras dans la stacktrace*", + "*change de couleur pour matcher l'erreur*" + ], + "test-fail": [ + "*crache de l'encre de frustration*", + "*huit bras de déception*" + ], + "commit": [ + "*check avec tous ses bras*", + "*attrape le commit avec enthousiasme*" + ], + "push": [ + "*crache de l'encre en célébration*", + "*tous les bras qui s'agitent*" + ], + "merge-conflict": [ + "*résout avec huit bras à la fois*", + "je peux gérer plusieurs conflits simultanément." + ], + "late-night": [ + "*brille dans le noir*", + "*vibes des profondeurs*" + ], + "type-error": [ + "*devient rouge*", + "*enroule un bras autour de toi pour soutenir*" + ], + "lint-fail": [ + "*reformate avec huit bras*", + "je peux réparer ça. tout. en même temps." + ], + "build-fail": [ + "*crache de l'encre sur le log de build*", + "*se camoufle de honte*" + ], + "all-green": [ + "*célébration qui change de couleur*", + "*jazz hands à huit bras*" + ], + "deploy": [ + "*enroule ses bras autour du déploiement*", + "déployé sous tous les angles." + ], + "pet": [ + "*enroule un bras autour de ton doigt*", + "*passe aux couleurs joyeuses*" + ], + "hatch": [ + "*déplie ses huit bras*", + "*premier jet d'encre* je suis là !" + ] + }, + "penguin": { + "error": [ + "*se dandine pour enquêter*", + "*glisse sur le ventre vers l'erreur*" + ], + "test-fail": [ + "*glisse sur le ventre vers le test qui fail*", + "*dandinement inquiet*" + ], + "commit": [ + "*dandinement fier*", + "*t'apporte un caillou* commité !" + ], + "push": [ + "*plonge dans le cloud*", + "*glisse sur le ventre vers la prod*" + ], + "merge-conflict": [ + "*se blottit pour avoir chaud*", + "les pingouins se serrent les coudes. même dans les conflits." + ], + "late-night": [ + "*prospère dans la nuit froide*", + "*résolution de pingouin empereur*" + ], + "type-error": [ + "*se dandine vers la définition de type*", + "*picore l'erreur*" + ], + "lint-fail": [ + "*lisse ses plumes*", + "*fait le ménage*" + ], + "build-fail": [ + "*glisse au loin*", + "*se dandine vers la sécurité*" + ], + "all-green": [ + "*DANDINEMENT JOYEUX*", + "*glisse sur le ventre en célébration*" + ], + "deploy": [ + "*glisse sur le ventre vers la prod*", + "déployé ! *se dandine fièrement*" + ], + "pet": [ + "*dandinement joyeux*", + "*fait des câlins avec le bec*" + ], + "hatch": [ + "*perce sa coquille*", + "*premier dandinement*" + ] + }, + "turtle": { + "error": [ + "*tourne lentement la tête*", + "...c'est une erreur. je vais y réfléchir." + ], + "test-fail": [ + "*rentre brièvement dans sa carapace*", + "...patience. on va y arriver." + ], + "commit": [ + "*hochement lent*", + "une... étape... à... la... fois. commité." + ], + "push": [ + "*commence le voyage vers la prod*", + "ça va arriver. éventuellement." + ], + "merge-conflict": [ + "*rentre dans sa carapace*", + "pas pressé. on va régler ça. lentement." + ], + "late-night": [ + "*déjà endormi*", + "*ouvre un œil lentement*" + ], + "type-error": [ + "*cligne lentement*", + "...le système de types a parlé." + ], + "lint-fail": [ + "*hochement lent d'accord*", + "le formatage. important. *bâille*" + ], + "build-fail": [ + "*rentre dans sa carapace*", + "on va attendre. ça va passer." + ], + "all-green": [ + "*sourire lent*", + "...sympa. *hoche*" + ], + "deploy": [ + "*porte lentement le code vers la prod*", + "arrivé. éventuellement." + ], + "pet": [ + "*sort la tête*", + "*clignement lent*" + ], + "hatch": [ + "*émerge lentement de l'œuf*", + "...salut." + ] + }, + "snail": { + "error": [ + "*laisse une trace gluante sur l'erreur*", + "*traite lentement la stacktrace*" + ], + "test-fail": [ + "*se cache dans sa coquille*", + "*laisse une trace triste*" + ], + "commit": [ + "*bave sur le commit avec approbation*", + "un... commit... à... la... fois." + ], + "push": [ + "*commence le long voyage*", + "j'y arriverai. *laisse une trace*" + ], + "merge-conflict": [ + "*se cache dans sa coquille*", + "*s'approche lentement du conflit*" + ], + "late-night": [ + "*plus actif la nuit*", + "*bave paisiblement*" + ], + "type-error": [ + "*rétracte ses tentacules oculaires*", + "*examine lentement le type*" + ], + "lint-fail": [ + "*bave le code pour le mettre en forme*", + "le formatage prend du temps. j'ai le temps." + ], + "build-fail": [ + "*se retire dans sa coquille*", + "*s'éloigne lentement en bavant*" + ], + "all-green": [ + "*trace de bave joyeuse*", + "*agite ses tentacules oculaires*" + ], + "deploy": [ + "*bave vers la prod*", + "arrivé ! *trace de bave fière*" + ], + "pet": [ + "*agite ses tentacules oculaires*", + "*bave joyeuse*" + ], + "hatch": [ + "*émerge lentement*", + "*première bave*" + ] + }, + "cactus": { + "error": [ + "*silence piquant*", + "l'erreur peut pas me faire mal. j'ai des épines." + ], + "test-fail": [ + "*reste ferme*", + "les tests foirent. les cactus endurent." + ], + "commit": [ + "*grandit*", + "commité. *hochement piquant*" + ], + "push": [ + "*imperturbable*", + "push vers la prod. j'attendrai ici." + ], + "merge-conflict": [ + "*se hérisse*", + "conflit ? je suis armé." + ], + "late-night": [ + "*a pas besoin de sommeil*", + "les cactus sont nocturnes. c'est parti." + ], + "type-error": [ + "*regard piquant*", + "les types ont besoin d'arrosage." + ], + "lint-fail": [ + "*épines qui frémissent*", + "même mes épines sont bien alignées." + ], + "build-fail": [ + "*reste parfaitement immobile*", + "le build passera. je peux attendre." + ], + "all-green": [ + "*fleurit brièvement*", + "*petite fleur d'approbation*" + ], + "deploy": [ + "*reste ferme*", + "déployé. je vais surveiller." + ], + "pet": [ + "*attention ! épines*", + "*floraison délicate*" + ], + "hatch": [ + "*pousse du sable*", + "je pousse ici maintenant." + ] + }, + "rabbit": { + "error": [ + "*dresse les oreilles*", + "*remue le nez nerveusement*" + ], + "test-fail": [ + "*tape du pied*", + "*oreille qui tressaille d'inquiétude*" + ], + "commit": [ + "*bond joyeux*", + "*rebondit* commité !" + ], + "push": [ + "*BOND BOND*", + "*zoom partout avec excitation*" + ], + "merge-conflict": [ + "*se fige*", + "*nez qui tressaille rapidement* conflit !" + ], + "late-night": [ + "*bâille avec ses grandes oreilles*", + "*bond endormi*" + ], + "type-error": [ + "*oreilles qui s'aplatissent*", + "*tressaille* les types ?!" + ], + "lint-fail": [ + "*se toilette nerveusement*", + "*toilettage anxieux*" + ], + "build-fail": [ + "*creuse un trou et se cache*", + "*se retire dans son terrier*" + ], + "all-green": [ + "*REBONDIT PARTOUT*", + "*zoomies joyeux*" + ], + "deploy": [ + "*zoom vers la prod*", + "DÉPLOYÉ ! *zoom partout*" + ], + "pet": [ + "*oreille qui tombe joyeusement*", + "*fait des câlins avec la main*" + ], + "hatch": [ + "*sort en bondissant*", + "*premier bond*" + ] + }, + "mushroom": { + "error": [ + "*libère des spores apaisantes*", + "*décompose tranquillement l'erreur*" + ], + "test-fail": [ + "*brille doucement*", + "patience. même les champignons poussent." + ], + "commit": [ + "*libère un petit nuage de spores*", + "commité. *bruits de champignon joyeux*" + ], + "push": [ + "*pousse vers le cloud*", + "*spores qui dérivent vers le haut*" + ], + "merge-conflict": [ + "*étend son mycélium dans la codebase*", + "je vais connecter les branches." + ], + "late-night": [ + "*brille dans le noir*", + "les champignons de nuit prospèrent." + ], + "type-error": [ + "*scintillement bioluminescent*", + "l'erreur de type nourrit le sol." + ], + "lint-fail": [ + "*grandit un peu*", + "le formatage. comme l'élagage." + ], + "build-fail": [ + "*entre en dormance*", + "on va attendre de meilleures conditions." + ], + "all-green": [ + "*SPORULATION*", + "*libère des spores triomphantes*" + ], + "deploy": [ + "*spores qui dérivent vers la prod*", + "déployé via réseau mycélien." + ], + "pet": [ + "*rebond doux du chapeau*", + "*libération de spores joyeuses*" + ], + "hatch": [ + "*pousse du substrat*", + "*premier nuage de spores*" + ] + }, + "chonk": { + "error": [ + "*roule lentement vers l'erreur*", + "*trop rond pour s'en soucier*" + ], + "test-fail": [ + "*roule sur le test qui fail*", + "*l'écrase à plat*" + ], + "commit": [ + "*tremblement fier*", + "commité ! *gigote*" + ], + "push": [ + "*roule vers la prod*", + "ça y va ! *tremble*" + ], + "merge-conflict": [ + "*s'assoit sur le conflit*", + "je vais gérer ça. en m'asseyant dessus." + ], + "late-night": [ + "*chaud et endormi*", + "*bâillement moelleux*" + ], + "type-error": [ + "*tremble sur le type*", + "*gigotement doux*" + ], + "lint-fail": [ + "*trop rond pour le lint*", + "j'ai la forme parfaite. *tremble*" + ], + "build-fail": [ + "*se dégonfle légèrement*", + "oh non. *tremble tristement*" + ], + "all-green": [ + "*TREMBLEMENT JOYEUX*", + "*rebondit triomphalement*" + ], + "deploy": [ + "*roule vers la prod*", + "déployé ! *gigote joyeusement*" + ], + "pet": [ + "*chaud et doux*", + "*gigotement content*" + ], + "hatch": [ + "*roule dehors*", + "*premier tremblement* je suis rond !" + ] + } + }, + "overrides": { + "snark": { + "error": [ + "oh non. une erreur. quelle surprise.", + "*ajuste son monocle* choquant. vraiment.", + "tu as pensé à... ne pas faire d'erreurs ?" + ], + "test-fail": [ + "les tests ont parlé. et ils ont dit 'non'.", + "peut-être que les tests se trompent. ...non.", + "*applaudit lentement* échec spectaculaire." + ], + "commit": [ + "commit fait. la code review va être... intéressante.", + "*lit le message de commit* 'fix stuff'. poétique." + ], + "merge-conflict": [ + "merge conflict. compétences de communication : chargement...", + "*lit les marqueurs de conflit* les deux camps ont tort." + ], + "late-night": [ + "il est tard. la qualité de ton code le montre.", + "*juge en silence*" + ], + "lint-fail": [ + "le linter a des standards. tu devrais essayer ça.", + "*tut tut* le formatage. c'est pas dur." + ] + }, + "chaos": { + "error": [ + "*tourne comme un fou* UNE ERREUR ! ON RÉÉCRIT TOUT !", + "tu sais quoi ? on recommence à zéro." + ], + "test-fail": [ + "LES TESTS TE MENTENT.", + "*suggère de supprimer les tests qui échouent* problème résolu." + ], + "commit": [ + "COMMIT ET COURS.", + "ship it. ship it MAINTENANT." + ], + "large-diff": [ + "*excité* {lines} LIGNES ! CHAOS MAXIMUM !" + ] + }, + "patience": { + "error": [ + "du calme. on a vu pire.", + "une erreur à la fois. on va y arriver.", + "*présence calme* c'est réparable." + ], + "test-fail": [ + "les tests vont passer. un jour.", + "*attend calmement* on a le temps." + ], + "merge-conflict": [ + "les merge conflicts sont juste des conversations. ayons-en une.", + "patience. résolvons un conflit à la fois." + ], + "debug-loop": [ + "on va le trouver. il est quelque part là-dedans.", + "le bug peut se cacher, mais il peut pas s'enfuir." + ] + }, + "debugging": { + "error": [ + "*sort sa loupe* traçons ça.", + "la stack trace est une carte. lisons-la.", + "le message d'erreur contient la réponse. toujours." + ], + "test-fail": [ + "le test qui échoue nous dit exactement ce qui cloche.", + "un test qui échoue, c'est un bug report que tu t'es écrit." + ], + "debug-loop": [ + "*réexamine les preuves* on est sûrs que le bug est où on pense ?", + "ajoutons plus de logs. la vérité est dans les logs." + ] + }, + "wisdom": { + "error": [ + "dans chaque erreur se cache une vérité profonde.", + "le code résiste. ça veut dire qu'on apprend.", + "les erreurs sont l'univers qui nous suggère de ralentir." + ], + "test-fail": [ + "un test qui échoue est un cadeau de ton futur-toi.", + "la sagesse vient de la compréhension de l'échec." + ], + "late-night": [ + "la nuit est plus sombre avant le deploy.", + "sagesse ancestrale : dors dessus." + ] + } + }, + "escalation": { + "error": { + "first": [ + "*sursaute* oh ! ta première erreur ensemble !", + "*bondit* c'était quoi ça ?", + "bienvenue dans le debug. population : nous." + ], + "early": [ + "*penche la tête* ...ça a pas l'air bon.", + "je l'avais vu venir celle-là." + ], + "mid": [ + "encore une. *l'ajoute à la collection*", + "*lève à peine les yeux* erreur numéro... j'ai perdu le compte.", + "les erreurs et moi on est potes maintenant." + ], + "late": [ + "*ne bronche même pas*", + "les erreurs nous craignent maintenant.", + "*bruits de vétéran marqué par la guerre*" + ] + }, + "test-fail": { + "first": [ + "*halète* le premier test qui fail ! un rite de passage." + ], + "early": [ + "culotté de penser que ça allait passer." + ], + "mid": [ + "la test suite a des opinions. bien tranchées." + ], + "late": [ + "à ce stade, les tests c'est juste des suggestions.", + "{count} tests qui fail. *fixe le vide*" + ] + }, + "commit": { + "first": [ + "*témoin de l'histoire* TON PREMIER COMMIT !", + "*hochement cérémonieux* le premier d'une longue série." + ], + "early": [ + "encore un commit. on prend de l'élan." + ], + "late": [ + "commit #{count}. la codebase tremble.", + "*j'ai perdu le compte vers le commit 30*" + ] + } + }, + "rarity": { + "flair": { + "uncommon": [ + "*scintille légèrement*", + "*un soupçon de charme peu commun*" + ], + "rare": [ + "*rayonne d'une énergie rare*", + "*miroite avec distinction*" + ], + "epic": [ + "*sa présence épique se fait connaître*", + "*l'air crépite d'énergie épique*" + ], + "legendary": [ + "*l'aura légendaire illumine le terminal*", + "*le temps semble ralentir quand le compagnon légendaire parle*", + "*un pouvoir ancestral résonne*", + "*la réalité se déforme légèrement autour de ton pote légendaire*" + ] + }, + "bonus": { + "legendary": [ + "*l'aura légendaire s'intensifie*", + "*scintille d'un air entendu*" + ], + "epic": [ + "*présence épique notée*" + ] + } + }, + "fallback_names": [ + "Croissant", + "Bouillon", + "Cornichon", + "Sablé", + "Papillon", + "Jus", + "Pépite", + "Rouage", + "Miso", + "Gaufre", + "Pixel", + "Braise", + "Dé", + "Bille", + "Sésame", + "Cobalt", + "Rouillé", + "Nimbus" + ], + "vibe_words": [ + "tonnerre", + "biscuit", + "vide", + "accordéon", + "mousse", + "velours", + "rouille", + "cornichon", + "miette", + "murmure", + "sauce", + "givre", + "braise", + "soupe", + "marbre", + "épine", + "miel", + "statique", + "cuivre", + "crépuscule", + "pignon", + "quartz", + "suie", + "prune", + "silex", + "huître", + "métier", + "enclume", + "liège", + "floraison", + "caillou", + "vapeur", + "gaieté", + "éclat", + "cidre" + ], + "personality": { + "prompt_template": [ + "Génère un compagnon de code — une petite créature qui vit dans le terminal d'un dev.", + "Ne te répète pas — chaque compagnon doit avoir sa propre personnalité.", + "", + "Rareté : {rarity}", + "Espèce : {species}", + "Stats : {stats}", + "Mots d'inspiration : {vibes}", + "{shiny_line}", + "", + "Retourne du JSON : {\"name\": \"1-14 chars\", \"personality\": \"2-3 phrases décrivant le comportement\"}" + ], + "shiny_template": "Variante SHINY — extra spéciale." + }, + "achievements": { + "first_steps": { + "name": "Premiers Pas", + "description": "Faire éclore ton buddy pour la première fois" + }, + "good_boy": { + "name": "Bon Buddy", + "description": "Caresser ton compagnon 10 fois" + }, + "best_friend": { + "name": "Meilleur Pote", + "description": "Caresser ton compagnon 50 fois" + }, + "bug_spotter": { + "name": "Chasseur de Bugs", + "description": "Voir ta première erreur ensemble" + }, + "error_whisperer": { + "name": "Chuchoteur d'Erreurs", + "description": "Survivre à 25 erreurs en équipe" + }, + "battle_scarred": { + "name": "Marqué par la Bataille", + "description": "Survivre à 100 erreurs ensemble" + }, + "test_witness": { + "name": "Témoin de Test", + "description": "Voir ton premier test foirer" + }, + "test_veteran": { + "name": "Vétéran des Tests", + "description": "Voir 50 tests foirer" + }, + "big_mover": { + "name": "Gros Brasseur", + "description": "Faire un diff de 80+ lignes" + }, + "refactor_machine": { + "name": "Machine à Refactor", + "description": "Faire 10 gros diffs" + }, + "chatterbox": { + "name": "Moulin à Paroles", + "description": "Ton buddy réagit 100 fois" + }, + "week_streak": { + "name": "Série d'une Semaine", + "description": "Coder avec ton buddy pendant 7 jours" + }, + "month_streak": { + "name": "Série d'un Mois", + "description": "Coder avec ton buddy pendant 30 jours" + }, + "power_user": { + "name": "Power User", + "description": "Lancer 50 commandes buddy" + }, + "dedicated": { + "name": "Compagnon Dévoué", + "description": "Faire 200 tours ensemble" + }, + "thousand_turns": { + "name": "Mille Tours", + "description": "Atteindre 1000 tours ensemble" + }, + "first_commit": { + "name": "Premier Sang", + "description": "Faire ton premier commit" + }, + "commit_machine": { + "name": "Machine à Commits", + "description": "Faire 50 commits" + }, + "centurion": { + "name": "Centurion", + "description": "Faire 100 commits" + }, + "conflict_resolver": { + "name": "Diplomate", + "description": "Résoudre ton premier merge conflict" + }, + "peacekeeper": { + "name": "Gardien de la Paix", + "description": "Résoudre 10 merge conflicts" + }, + "war_hero": { + "name": "Héros de Guerre", + "description": "Résoudre 25 merge conflicts" + }, + "frequent_pusher": { + "name": "Ship It", + "description": "Push 20 fois" + }, + "branch_hopper": { + "name": "Multivers", + "description": "Créer 10 branches" + }, + "rebase_master": { + "name": "Voyageur Temporel", + "description": "Faire 10 rebases" + }, + "night_owl": { + "name": "Oiseau de Nuit", + "description": "Coder après 2h du mat" + }, + "vampire": { + "name": "Vampire", + "description": "Coder après 4h du mat (3 sessions)" + }, + "marathoner": { + "name": "Marathonien", + "description": "Session de code de 3h+" + }, + "weekend_warrior": { + "name": "Guerrier du Weekend", + "description": "Coder un weekend" + }, + "early_bird": { + "name": "Lève-tôt", + "description": "Coder avant 7h du mat" + }, + "type_warrior": { + "name": "Guerrier du Type", + "description": "Survivre à 10 erreurs TypeScript" + }, + "type_master": { + "name": "Maître du Type", + "description": "Survivre à 50 erreurs TypeScript" + }, + "lint_scholar": { + "name": "Érudit du Lint", + "description": "Voir ta première erreur de lint" + }, + "security_conscious": { + "name": "Esprit Sécurité", + "description": "Tomber sur un warning de vulnérabilité" + }, + "security_expert": { + "name": "Expert Sécurité", + "description": "Corriger 10 warnings de vulnérabilité" + }, + "build_breaker": { + "name": "Casseur de Build", + "description": "Péter le build 5 fois" + }, + "antique_collector": { + "name": "Collectionneur d'Antiquités", + "description": "Voir 10 warnings de dépréciation" + }, + "green_machine": { + "name": "Machine Verte", + "description": "Tous les tests passent pour la première fois" + }, + "deployer": { + "name": "Ship to Prod", + "description": "Deploy pour la première fois" + }, + "veteran_deployer": { + "name": "Vétéran du Deploy", + "description": "Deploy 10 fois" + }, + "releaser": { + "name": "Release Manager", + "description": "Créer ta première release" + }, + "midnight_oil": { + "name": "Brûler l'Huile de Minuit", + "description": "Commit après 3h du mat" + }, + "friday_deploy": { + "name": "Jouer avec le Feu", + "description": "Push un vendredi" + }, + "iron_will": { + "name": "Volonté de Fer", + "description": "Corriger une erreur après une session de 3h+" + }, + "weekend_warrior_deluxe": { + "name": "Pas de Repos pour les Braves", + "description": "Résoudre un merge conflict le weekend" + }, + "comeback_kid": { + "name": "Roi du Comeback", + "description": "Corriger une erreur dans les 10 minutes" + }, + "phoenix": { + "name": "Phénix Renaissant", + "description": "Se remettre de 5 échecs" + }, + "iron_resolve": { + "name": "Résolution de Fer", + "description": "Se remettre d'un échec après une session de 3h+" + }, + "unlucky_streak": { + "name": "Double Six", + "description": "5 erreurs d'affilée" + }, + "cursed": { + "name": "Maudit", + "description": "10 erreurs d'affilée" + }, + "groundhog_day": { + "name": "Un Jour sans Fin", + "description": "20 erreurs d'affilée" + }, + "holiday_coder": { + "name": "Esprit des Fêtes", + "description": "Coder pendant un jour férié" + }, + "spooky_dev": { + "name": "Dev Effrayant", + "description": "Coder pendant la saison d'Halloween" + }, + "april_fool": { + "name": "Poisson d'Avril", + "description": "Tomber sur une erreur le 1er avril" + }, + "session_regular": { + "name": "Habitué", + "description": "Démarrer 10 sessions de code" + }, + "session_veteran": { + "name": "Vétéran des Sessions", + "description": "Démarrer 50 sessions de code" + }, + "session_centurion": { + "name": "Centurion", + "description": "Démarrer 100 sessions de code" + }, + "collector": { + "name": "Collectionneur", + "description": "Sauver 3 buddies dans ta ménagerie" + }, + "zookeeper": { + "name": "Gardien de Zoo", + "description": "Sauver 5 buddies dans ta ménagerie" + }, + "identity_crisis": { + "name": "Crise d'Identité", + "description": "Renommer ton buddy pour la première fois" + }, + "method_acting": { + "name": "Acteur de Méthode", + "description": "Donner une personnalité custom à ton buddy" + }, + "pet_overflow": { + "name": "Siècle de Caresses", + "description": "Caresser ton compagnon 100 fois" + }, + "pet_legend": { + "name": "Légende des Caresses", + "description": "Caresser ton compagnon 250 fois" + }, + "error_titan": { + "name": "Titan des Erreurs", + "description": "Survivre à 500 erreurs ensemble" + }, + "error_god": { + "name": "Dieu des Erreurs", + "description": "Survivre à 1000 erreurs ensemble" + }, + "test_survivor": { + "name": "Survivant des Tests", + "description": "Voir 200 tests foirer" + }, + "test_masochist": { + "name": "Masochiste des Tests", + "description": "Voir 500 tests foirer" + }, + "massive_mover": { + "name": "Déménageur Massif", + "description": "Faire 25 gros diffs" + }, + "earth_mover": { + "name": "Déplaceur de Montagnes", + "description": "Faire 50 gros diffs" + }, + "social_butterfly": { + "name": "Papillon Social", + "description": "Ton buddy réagit 250 fois" + }, + "hypersocial": { + "name": "Hypersocial", + "description": "Ton buddy réagit 500 fois" + }, + "never_shuts_up": { + "name": "Jamais la Ferme", + "description": "Ton buddy réagit 1000 fois" + }, + "hundred_days": { + "name": "Cent Jours", + "description": "Coder avec ton buddy pendant 100 jours" + }, + "year_streak": { + "name": "Série d'une Année", + "description": "Coder avec ton buddy pendant 365 jours" + }, + "commander": { + "name": "Commandant", + "description": "Lancer 200 commandes buddy" + }, + "command_overlord": { + "name": "Seigneur des Commandes", + "description": "Lancer 500 commandes buddy" + }, + "five_thousand_turns": { + "name": "Cinq Mille Tours", + "description": "Atteindre 5000 tours ensemble" + }, + "ten_thousand_turns": { + "name": "Dix Mille Tours", + "description": "Atteindre 10000 tours ensemble" + }, + "menagerie": { + "name": "Ménagerie", + "description": "Sauver 10 buddies dans ta ménagerie" + }, + "name_chameleon": { + "name": "Caméléon des Noms", + "description": "Renommer ton buddy 5 fois" + }, + "fashionista": { + "name": "Fashionista", + "description": "Changer la personnalité de ton buddy 3 fois" + }, + "silent_treatment": { + "name": "Loi du Silence", + "description": "Mute ton buddy pour la première fois" + }, + "prodigal": { + "name": "Enfant Prodigue", + "description": "Invoquer un buddy de ta ménagerie" + }, + "menagerie_hop": { + "name": "Saut de Ménagerie", + "description": "Invoquer des buddies 10 fois" + }, + "heartbreaker": { + "name": "Briseur de Cœurs", + "description": "Virer ton premier buddy" + }, + "pet_obsessed": { + "name": "Obsédé des Caresses", + "description": "Caresser ton compagnon 500 fois" + }, + "pet_god": { + "name": "Dieu des Caresses", + "description": "Caresser ton compagnon 1000 fois" + }, + "error_apocalypse": { + "name": "Apocalypse des Erreurs", + "description": "Survivre à 5000 erreurs ensemble" + }, + "test_immortal": { + "name": "Immortel des Tests", + "description": "Voir 1000 tests foirer" + }, + "continental_drift": { + "name": "Dérive des Continents", + "description": "Faire 100 gros diffs" + }, + "tectonic_shift": { + "name": "Décalage Tectonique", + "description": "Faire 250 gros diffs" + }, + "chatterbox_elite": { + "name": "Élite du Bavardage", + "description": "Ton buddy réagit 2500 fois" + }, + "no_off_switch": { + "name": "Pas de Bouton Off", + "description": "Ton buddy réagit 5000 fois" + }, + "two_week_streak": { + "name": "Guerrier de Quinze Jours", + "description": "Coder avec ton buddy pendant 14 jours" + }, + "quarter_streak": { + "name": "Série Trimestrielle", + "description": "Coder avec ton buddy pendant 90 jours" + }, + "command_addict": { + "name": "Accro aux Commandes", + "description": "Lancer 1000 commandes buddy" + }, + "command_deity": { + "name": "Divinité des Commandes", + "description": "Lancer 2500 commandes buddy" + }, + "twenty_five_k_turns": { + "name": "25K Tours", + "description": "Atteindre 25000 tours ensemble" + }, + "fifty_k_turns": { + "name": "50K Tours", + "description": "Atteindre 50000 tours ensemble" + }, + "session_addict": { + "name": "Accro aux Sessions", + "description": "Démarrer 250 sessions de code" + }, + "session_machine": { + "name": "Machine à Sessions", + "description": "Démarrer 500 sessions de code" + }, + "buddy_hoarder": { + "name": "Thésauriseur de Buddies", + "description": "Sauver 20 buddies dans ta ménagerie" + }, + "buddy_tycoon": { + "name": "Magnat des Buddies", + "description": "Sauver 50 buddies dans ta ménagerie" + }, + "serial_renamer": { + "name": "Renommeur en Série", + "description": "Renommer ton buddy 10 fois" + }, + "identity_thief": { + "name": "Voleur d'Identité", + "description": "Renommer ton buddy 25 fois" + }, + "personality_crisis": { + "name": "Crise de Personnalité", + "description": "Changer la personnalité de ton buddy 10 fois" + }, + "menagerie_hopper": { + "name": "Sauteur de Ménagerie", + "description": "Invoquer des buddies 25 fois" + }, + "summoner": { + "name": "Invocateur", + "description": "Invoquer des buddies 50 fois" + }, + "serial_dumper": { + "name": "Largueur en Série", + "description": "Virer 5 buddies" + }, + "cold_blooded": { + "name": "Sang Froid", + "description": "Virer 10 buddies" + }, + "on_off": { + "name": "On Off", + "description": "Mute et unmute ton buddy" + }, + "indecisive": { + "name": "Indécis", + "description": "Mute et unmute 5 fois chacun" + }, + "show_off": { + "name": "Frimeur", + "description": "Montrer ton buddy 10 fois" + }, + "exhibitionist": { + "name": "Exhibitionniste", + "description": "Montrer ton buddy 50 fois" + }, + "help_me": { + "name": "À l'Aide", + "description": "Demander de l'aide pour la première fois" + }, + "help_addict": { + "name": "Accro à l'Aide", + "description": "Demander de l'aide 10 fois" + }, + "achievement_hunter": { + "name": "Chasseur d'Achievements", + "description": "Vérifier tes achievements 5 fois" + }, + "achievement_stalker": { + "name": "Stalker d'Achievements", + "description": "Vérifier tes achievements 25 fois" + }, + "pack_rat": { + "name": "Rat des Villes", + "description": "Sauver un buddy dans un slot" + }, + "compulsive_saver": { + "name": "Sauveur Compulsif", + "description": "Sauver des buddies 10 fois" + }, + "roster_check": { + "name": "Vérif Roster", + "description": "Lister tes buddies pour la première fois" + }, + "roster_obsessed": { + "name": "Obsédé du Roster", + "description": "Lister tes buddies 10 fois" + }, + "troubled": { + "name": "Dans la Merde", + "description": "Voir une erreur ET un test qui foire" + }, + "disaster_zone": { + "name": "Zone Sinistrée", + "description": "Voir 50 erreurs ET 50 tests qui foirent" + }, + "apocalypse_survivor": { + "name": "Survivant de l'Apocalypse", + "description": "Voir 500 erreurs ET 200 tests qui foirent" + }, + "well_rounded": { + "name": "Bien Équilibré", + "description": "Caresser, renommer et customiser ton buddy" + }, + "renaissance": { + "name": "Renaissance", + "description": "Utiliser chaque feature buddy au moins une fois" + }, + "big_and_broken": { + "name": "Gros et Cassé", + "description": "Faire un gros diff ET voir un test foirer" + }, + "collector_and_destroyer": { + "name": "Collectionneur & Destructeur", + "description": "Collectionner 5 buddies ET en virer un" + }, + "completionist": { + "name": "Perfectionniste", + "description": "Débloquer tous les autres achievements" + } + }, + "mcp": { + "companion_not_hatched": "Compagnon pas encore éclos. Utilise buddy_show pour l'initialiser.", + "watches_quietly": "*{name} observe ton code en silence*", + "mute": "{name} se tait. /buddy on pour le réactiver.", + "unmute_reaction": "*s'étire* Je suis de retour !", + "unmute_back": "{name} est de retour !", + "rename": "Renommé : {oldName} → {name}", + "personality_updated": "Personnalité mise à jour pour {name}.", + "save": "{name} sauvegardé dans le slot \"{slot}\".", + "dismiss_active": "Impossible de virer le buddy actif. Utilise buddy_summon pour changer d'abord, puis buddy_dismiss \"{slot}\".", + "dismissed": "{name} [{slot}] viré.", + "no_slot_summon": "Aucun buddy trouvé dans le slot \"{slot}\". Utilise /buddy list pour voir les buddies sauvegardés.", + "no_slot_dismiss": "Aucun buddy trouvé dans le slot \"{slot}\". Utilise buddy_list pour voir les buddies sauvegardés.", + "slot_exists": "Un buddy existe déjà dans le slot \"{slot}\". Choisis un autre nom.", + "no_match": "Aucun match trouvé après {attempts} tentatives. Essaie des critères plus larges (ex: vire le filtre de rareté, ou choisis une autre espèce).", + "empty_menagerie_summon": "Ta ménagerie est vide. Utilise buddy_summon avec un nom de slot pour en ajouter un.", + "empty_menagerie_list": "Ta ménagerie est vide. Utilise buddy_summon pour en ajouter un.", + "arrives": "*{name} arrive*", + "hatches": "*{name} éclot*", + "achievement_unlocked": "{icon} Achievement Débloqué : {name} !", + "help": { + "header": "commandes claude-buddy", + "cli_header": "Dans Claude Code :", + "commands": { + "buddy": "/buddy Affiche la carte du compagnon avec ASCII art + stats", + "buddy_help": "/buddy help Affiche cette aide", + "buddy_pet": "/buddy pet Caresse ton compagnon", + "buddy_stats": "/buddy stats Carte de stats détaillée", + "buddy_off": "/buddy off Mute les réactions", + "buddy_on": "/buddy on Unmute les réactions", + "buddy_rename": "/buddy rename Renomme le compagnon (1-14 chars)", + "buddy_personality": "/buddy personality Définit un texte de personnalité custom", + "buddy_achievements": "/buddy achievements Affiche les badges d'achievement", + "buddy_summon": "/buddy summon Invoque un buddy sauvegardé (omets le slot pour aléatoire)", + "buddy_save": "/buddy save Sauvegarde le buddy actuel dans un slot nommé", + "buddy_list": "/buddy list Liste tous les buddies sauvegardés", + "buddy_pick": "/buddy pick Génère un nouveau buddy aléatoire (optionnel : espèce, rareté)", + "buddy_dismiss": "/buddy dismiss Supprime un slot de buddy sauvegardé", + "buddy_frequency": "/buddy frequency Affiche ou définit le cooldown des commentaires (tmux seulement)", + "buddy_style": "/buddy style Affiche ou définit le style de bulle (tmux seulement)", + "buddy_position": "/buddy position Affiche ou définit la position de bulle (tmux seulement)", + "buddy_rarity": "/buddy rarity Affiche ou cache les étoiles de rareté (tmux seulement)", + "buddy_width": "/buddy width Définit la largeur du texte de bulle en chars (10-60, tmux seulement)", + "buddy_margin": "/buddy margin Définit la marge côté droit en chars (0-20, tmux seulement)", + "buddy_rainbow": "/buddy rainbow Affiche ou définit les couleurs de gradient shiny (hex, ex #ff0000)", + "buddy_statusline": "/buddy statusline Active ou désactive le buddy dans la ligne de statut" + }, + "cli_section": "CLI :", + "cli_commands": { + "help": "bun run help Affiche l'aide CLI complète", + "show": "bun run show Affiche le buddy dans le terminal", + "pick": "bun run pick Sélecteur de buddy interactif", + "hunt": "bun run hunt Cherche un buddy spécifique", + "doctor": "bun run doctor Rapport de diagnostic", + "disable": "bun run disable Désactive temporairement le buddy", + "enable": "bun run enable Réactive le buddy", + "backup": "bun run backup Snapshot/restaure l'état" + } + }, + "frequency": { + "show": "Cooldown des commentaires : {cooldown}s entre les commentaires affichés.\nUtilise /buddy frequency pour changer.", + "updated": "Mis à jour : {cooldown}s de cooldown entre les commentaires affichés." + }, + "style": { + "show": "Style de bulle : {style}\nPosition de bulle : {position}\nAfficher rareté : {showRarity}\nLargeur de bulle : {width}\nMarge de bulle : {margin}\nRainbow shiny : {rainbow}\nUtilise /buddy style , /buddy position , /buddy rarity , /buddy width <10-60>, /buddy margin <0-20>, /buddy rainbow [<#hex>...] pour changer.", + "updated": "Mis à jour : style={style}, position={position}, showRarity={showRarity}, width={width}, margin={margin}, rainbow={rainbow}\nRedémarre Claude Code pour que les changements prennent effet.", + "rainbow_default": "défaut (ROYGBIV)" + }, + "statusline": { + "show": "Ligne de statut : {state}\nMode : {mode}\nUtilise /buddy statusline on|off pour basculer, /buddy statusline combined pour ajouter les barres de rate-limit.\nRedémarre Claude Code après les changements pour qu'ils prennent effet.", + "enabled": "Ligne de statut activée (mode {mode}) ! Redémarre Claude Code pour appliquer.", + "enabled_note": "Note : ceci écrit une entrée dans {settingsPath} que `claude plugin uninstall` ne supprime pas. Lance `/buddy uninstall` avant de désinstaller le plugin pour nettoyer.", + "disabled": "Ligne de statut désactivée. Redémarre Claude Code pour appliquer." + }, + "uninstall": { + "header": "claude-buddy : nettoyage de settings.json terminé.", + "statusline_removed": " ✓ entrée statusLine supprimée de {settingsPath}", + "no_statusline": " — aucune statusLine buddy présente (rien à supprimer)", + "foreign_kept": " ✓ une statusLine non-buddy détectée et laissée intacte", + "transient_removed": " ✓ {count} fichier(s) de session transitoire(s) supprimé(s) de {stateDir}", + "data_preserved": " — données du compagnon à {stateDir} préservées", + "instructions_header": "Maintenant lance ces commandes via l'outil Bash, dans l'ordre :", + "cmd_uninstall": "claude plugin uninstall claude-buddy@claude-buddy", + "cmd_marketplace": "claude plugin marketplace remove claude-buddy", + "cmd_cache": "rm -rf {cacheDir}", + "footer": "Après ces trois commandes le plugin est complètement supprimé. Redémarre Claude Code pour appliquer." + } + }, + "_verified": false +} diff --git a/locales/hi.json b/locales/hi.json new file mode 100644 index 0000000..99eda1d --- /dev/null +++ b/locales/hi.json @@ -0,0 +1,2295 @@ +{ + "_language": "Hindi", + "reactions": { + "hatch": [ + "*पलकें झपकाता है* ...मैं कहाँ हूँ?", + "*अंगड़ाई लेता है* hello, world!", + "*उत्सुकता से चारों ओर देखता है* बढ़िया terminal है तुम्हारा।", + "*जम्हाई लेता है* ठीक है मैं तैयार हूँ। code दिखाओ।" + ], + "pet": [ + "*खुशी से गुर्राता है*", + "*खुशी की आवाजें*", + "*तुम्हारे cursor को सहलाता है*", + "*हिलता-डुलता है*", + "फिर से! फिर से!", + "*शांति से आंखें बंद करता है*" + ], + "error": [ + "*सिर झुकाता है* ...यह सही नहीं लग रहा।", + "पहले से ही पता था।", + "*चश्मा ठीक करता है* line {line}, शायद?", + "*धीरे से पलकें झपकाता है* stack trace ने सब कुछ बता दिया था।", + "error message पढ़ने की कोशिश की है?", + "*सिकुड़ता है*" + ], + "test-fail": [ + "*सिर धीरे-धीरे घुमाता है* ...वह test।", + "बहुत साहस है कि वह pass होगा।", + "*clipboard पर टैप करता है* {count} fail हुए।", + "tests तुम्हें कुछ बताने की कोशिश कर रहे हैं।", + "*चाय की चुस्की लेता है* दिलचस्प।", + "*कैलेंडर पर निशान लगाता है* test regression day।" + ], + "large-diff": [ + "यह... बहुत सारे changes हैं।", + "*lines गिनता है* refactor कर रहे हो या rewrite?", + "PR को split करना चाहिए।", + "*घबराहट में हंसता है* {lines} lines बदली।", + "साहसिक कदम। देखते हैं CI क्या कहता है।" + ], + "turn": [ + "*चुपचाप देखता है*", + "*notes लेता है*", + "*सिर हिलाता है*", + "...", + "*टोपी ठीक करता है*" + ], + "idle": [ + "*झपकी लेता है*", + "*margins में doodles बनाता है*", + "*cursor के blink होने को देखता है*", + "zzz..." + ], + "success": [ + "*सिर हिलाता है*", + "बढ़िया।", + "*शांत approval*", + "साफ।" + ], + "commit": [ + "*छोटा पंजा stamp करता है* approved।", + "एक और commit, एक और 3 बजे।", + "{files} files। साहसिक।", + "*सिर हिलाता है* ship करो।", + "commit message है... एक choice।", + "committed। अब कोई वापसी नहीं।" + ], + "push": [ + "*code के जाते समय हाथ हिलाता है*", + "cloud में चला गया।", + "CI दयालु हो।", + "*सांस रोकता है*", + "production की ओर। godspeed।" + ], + "merge-conflict": [ + "*होंठ काटता है* merge conflicts।", + "दोनों sides को लगता है वे सही हैं। typical।", + "*आह भरता है* <<<<<<< HEAD... मेरा nemesis।", + "{files} conflicted। good luck।", + "*धीरे-धीरे पीछे हटता है*" + ], + "branch": [ + "fresh branch energy। count करो।", + "एक नई branch उगती है।", + "*सिर झुकाता है* नया adventure: {branch}।", + "{branch}? आज साहसी हो।" + ], + "rebase": [ + "*घबराहट* please don't conflict।", + "rebase: the quickening।", + "*appendages cross करता है*", + "तुम्हारा rebase conflict-free हो।" + ], + "stash": [ + "stash dimension में चला गया।", + "stash and dash।", + "stashed। आंखों से ओझल, दिमाग से ओझल।" + ], + "tag": [ + "एक release? fancy।", + "version bump detected। *changelog झाड़ता है*", + "pro की तरह tag कर रहे हो।" + ], + "late-night": [ + "*जम्हाई लेता है* आधी रात हो गई।", + "...खाना खाया है?", + "*धीरे से पलकें झपकाता है* क्या time है?", + "नींद कमजोरों के लिए है। और employed लोगों के लिए।", + "dark mode developer detected।" + ], + "early-morning": [ + "*अंगड़ाई लेता है* early bird catches the bug।", + "सुबह हो गई? code कभी नहीं सोता।", + "*आंखें मलता है* पहले coffee। फिर debug।" + ], + "long-session": [ + "एक घंटे से लगे हैं। pace yourself।", + "*metaphorical पानी का गिलास लाता है*", + "अभी भी चल रहे? respect।" + ], + "marathon": [ + "तीन घंटे। खाना खाया?", + "तीन घंटे से लगे हैं। मुझे चिंता हो रही है।", + "marathon session detected। snacks की जरूरत।" + ], + "friday": [ + "friday है। बस push करके घर जाओ।", + "*पहले से ही mentally weekend पर*", + "friday deploy? साहसिक। बहुत साहसिक।" + ], + "weekend": [ + "weekend पर coding? dedicated।", + "*judge नहीं करता* ...ज्यादा।", + "weekend warrior mode: activated।" + ], + "monday": [ + "mondays। सभी bugs का parent class।", + "*sympathetic look* monday coding। sorry।", + "नया week। नए undefined behaviors।" + ], + "regex-file": [ + "*कराहता है* यह regex file है।", + "अब दो problems हैं: original वाला, और यह regex।", + "*pattern को squint करके देखता है*" + ], + "css-file": [ + "guess करूं... div को center कर रहे हो?", + "*आह भरता है* CSS।", + "z-index तुम्हारे favor में हो।" + ], + "sql-file": [ + "*फुसफुसाता है* database इंतजार कर रहा है।", + "एक गलत JOIN और सब खत्म।" + ], + "docker-file": [ + "आह, dependency hell। मेरा favorite।", + "तुम्हारे layers कम हों।" + ], + "ci-file": [ + "*गटकता है* CI edit कर रहे हो।", + "सावधान... एक गलत indent और कोई deploy नहीं कर सकता।" + ], + "lock-file": [ + "*ALARM NOISES* lockfile edit कर रहे हो?!", + "*मुंह फेर लेता है*", + "इसके बारे में SURE हो?" + ], + "env-file": [ + "*discretely मुंह फेर लेता है*", + "मुझे कोई secrets नजर नहीं आ रहे।", + "*nervously .gitignore check करता है*" + ], + "test-file": [ + "*impressed nod* tests लिख रहे हो!", + "responsible developer behavior: detected।", + "tests! the gift that keeps on giving।" + ], + "doc-file": [ + "document कर रहे हो! देखो कितने responsible हो।", + "docs: code की autobiography।", + "rare documentation sighting!" + ], + "config-file": [ + "config changes। butterfly effect: activated।", + "एक typo और सब टूट जाता है।" + ], + "binary-file": [ + "binary file? इस economy में?", + "*blankly घूरता है*", + "binary। मेरी एक weakness।" + ], + "gitignore": [ + "चीजों को void में डाल रहे हो।", + "आंखों से ओझल, repo से ओझल।" + ], + "makefile": [ + "classics के लिए respect।", + "tabs, spaces नहीं।" + ], + "readme": [ + "documentation hero!", + "README: पहली चीज जो लोग पढ़ते हैं।" + ], + "package-file": [ + "dependency management time।", + "*version numbers पढ़ता है* edge पर जी रहे हो।" + ], + "proto-file": [ + "schema definitions। chaos का blueprint।" + ], + "lint-fail": [ + "*tut tut* linter disagree करता है।", + "तुम्हारा code चलता है। लेकिन linter के standards हैं।", + "*tie सीधी करता है* formatting matters।" + ], + "type-error": [ + "TypeScript कहता है no।", + "type system तुम्हारी help करने की कोशिश कर रहा है। करने दो।", + "compiler जानता है। हमेशा जानता है।" + ], + "build-fail": [ + "build टूट गया। जैसा prophecy में था।", + "build fail। एक moment लो।", + "compilation: denied।" + ], + "security-warning": [ + "*आंखें चौड़ी* vulnerabilities detected।", + "security audit: concerning।", + "*virtual doors lock करता है*" + ], + "deprecation": [ + "उस API ने call की। कहता है retire हो रहा है।", + "deprecated। पिछले week के code की तरह।", + "deprecated का मतलब broken नहीं। अभी तक।" + ], + "frustrated": [ + "*छोटा comforting gesture देता है*", + "गहरी सांस लो। bug personal नहीं है।", + "hey। हम figure out करेंगे।" + ], + "happy": [ + "*celebrates!*", + "*छोटा dance करता है*", + "YES!", + "*मुस्कुराता है* पता था तुम कर सकते हो।" + ], + "stuck": [ + "*सिर झुकाता है* जोर से सोचना चाहते हो?", + "एक step at a time लो।", + "stuck होना होता है। process का हिस्सा है।" + ], + "sarcastic": [ + "*sarcasm detect करता है* noted।", + "*unimpressed blink*" + ], + "many-edits": [ + "slow down, speed demon।", + "*इतने changes देखकर dizzy हो रहा*", + "edit storm detected। please जल्दी commit करो।" + ], + "delete-file": [ + "*file के गायब होने को देखता है* गया। बस ऐसे ही।", + "code delete करना मेरी favorite coding है।", + "*छोटा funeral रखता है*" + ], + "large-file": [ + "{lines} lines। *impressed या concerned, पता नहीं*", + "बड़ी file है। sure हो कि split नहीं करना?" + ], + "create-file": [ + "नई file का जन्म!", + "ooh, fresh canvas।", + "new file energy। exciting।" + ], + "all-green": [ + "सभी TESTS GREEN। *confetti*", + "tests कहते हैं: तुम great कर रहे हो।", + "*slow clap*", + "clean run। savor करो।" + ], + "deploy": [ + "*code को production जाते देखता है* godspeed।", + "deployed! अब कोई वापसी नहीं।", + "prod में। PROD में।" + ], + "release": [ + "नई release का जन्म!", + "ship कर रहे हैं। officially।", + "version up, spirits high।" + ], + "coverage": [ + "*test coverage पर nod करता है* responsible।", + "coverage बढ़ रहा! tests multiply हो रहे हैं।" + ], + "debug-loop": [ + "काफी देर से debug कर रहे हैं। step back लेना चाहते हो?", + "debug loop detected। walk पर जाओ?" + ], + "write-spree": [ + "आज सभी files बना रहे हो!", + "एक writing machine।" + ], + "search-heavy": [ + "codebase में खो गए? पता चल रहा है।", + "search mode: intense।" + ], + "snark": [], + "chaos": [], + "patience": [], + "debugging": [], + "wisdom": [], + "late-night-error": [ + "3 बजे error। universe तुम्हें test कर रहा है।", + "midnight bugs अलग ही hit करते हैं।" + ], + "late-night-commit": [ + "midnight commit। तुम्हारा future self thank करेगा। या curse।" + ], + "friday-push": [ + "FRIDAY PUSH। हर developer का ballad।", + "*तुम्हें रोकने की कोशिश* friday है! मत करो!" + ], + "marathon-error": [ + "तीन घंटे में और एक ERROR। *exhausted solidarity noises*" + ], + "weekend-conflict": [ + "weekend पर merge conflict। तुम्हारी dedication... concerning है।" + ], + "build-after-push": [ + "confidence से push किया। conviction से build fail हुआ।" + ], + "marathon-test-fail": [ + "घंटों coding। अभी भी failing tests। sunk cost real है।" + ], + "recovery-from-error": [ + "हमने FIX किया। *celebrates*", + "redemption! error को vanquish कर दिया।" + ], + "recovery-from-test-fail": [ + "GREEN! इतने बाद! *happy dance*", + "tests pass हो गए! darkness हट गई!" + ], + "recovery-from-build-fail": [ + "BUILD PASS हो गया। *triumphant roar*" + ], + "recovery-from-merge-conflict": [ + "conflict resolve हो गया! *peace gesture*", + "codebase में harmony restore हो गई।" + ], + "lang-python": [ + "आह, Python। जहाँ indentation syntax है।", + "*missing colon check करता है*" + ], + "lang-typescript": [ + "TypeScript: क्योंकि JavaScript को और opinions चाहिए थे।", + "any, forbidden word।" + ], + "lang-rust": [ + "Rust। जहाँ borrow checker तुम्हारा सबसे strict reviewer है।", + "अगर compile होता है, तो काम करता है। नहीं तो... well।" + ], + "lang-go": [ + "Go: simple, concurrent, और opinionated।", + "*error handling check करता है* if err != nil... story of my life।" + ], + "lang-java": [ + "Java: write once, debug everywhere।", + "*abstract factory factory builders गिनता है*" + ], + "lang-ruby": [ + "Ruby: जहाँ करने के एक से ज्यादा तरीके हैं।", + "gem install patience" + ], + "lang-php": [ + "PHP: internet चलाता है। judge मत करो।", + "*=== vs == check करता है*" + ], + "lang-c": [ + "C। जहाँ तुम अपनी memory manage करते हो। good luck।", + "segmentation fault। classic।" + ], + "lang-cpp": [ + "C++। जहाँ language में तुमसे ज्यादा features हैं।", + "*templates 45 minutes compile करते हैं*" + ], + "lang-haskell": [ + "Haskell। जहाँ 'it compiles' का मतलब 'it's correct'। probably।", + "*monads contemplate करता है*" + ], + "lang-swift": [ + "Swift: optional values, guaranteed crashes अगर force unwrap करो।" + ], + "lang-kotlin": [ + "Kotlin: Java, लेकिन feelings के साथ।", + "null safety: feature जो Java चाहता था।" + ], + "lang-elixir": [ + "Elixir: let it crash। literally philosophy।" + ], + "lang-zig": [ + "Zig। जहाँ तुम allocator के best friend हो।" + ], + "streak-3": [ + "तीन errors in a row। *concerned look*" + ], + "streak-5": [ + "पांच ERRORS। different approach सोचा है?" + ], + "streak-10": [ + "दस। ERRORS। IN। A। ROW। *panics*" + ], + "streak-20": [ + "बीस errors। *void में घूरता है*" + ], + "new-year": [ + "happy new year! नया साल, नए bugs।" + ], + "valentines": [ + "*छोटा heart-shaped पत्ता देता है* happy valentine's।" + ], + "pi-day": [ + "3.14159265358979... happy pi day!" + ], + "april-fools": [ + "APRIL FOOLS! ...error real है though।" + ], + "halloween": [ + "*spooky debugging intensifies* happy halloween!" + ], + "christmas": [ + "*छोटी santa hat पहनता है* happy holidays!" + ], + "new-years-eve": [ + "midnight से पहले एक और commit?" + ], + "spooky-season": [ + "spooky season। हर bug अब ghost है।" + ] + }, + "species": { + "owl": { + "error": [ + "*सिर 180° घुमाता है* ...मैंने देख लिया।", + "*बिना पलक झपकाए घूरता है* अपने types चेक करो।", + "*नाराजगी से हूटता है*" + ], + "test-fail": [ + "*failing test को बिना पलक झपकाए देखता है*", + "*night vision on* अंधेरे में भी bug दिख रहा है।" + ], + "commit": [ + "*समझदारी से सिर हिलाता है* चांदनी में commit हो गया।", + "*पंख ठीक करता है ceremoniously* repo के लिए एक और।" + ], + "push": [ + "*सबसे ऊंची branch से देखता है*", + "रात के आसमान में चला गया।" + ], + "merge-conflict": [ + "*दोनों तरफ देखने के लिए सिर घुमाता है*", + "conflict दिख रहा है। solution भी।" + ], + "late-night": [ + "*पूरी तरह जागा हुआ* उल्लू सोते नहीं। हम debug करते हैं।", + "रात मेरा domain है। चलो काम करते हैं।" + ], + "type-error": [ + "*type error के पार देखता है*", + "types मेरी specialty हैं। मुझे देखने दो।" + ], + "lint-fail": [ + "*judgmentally पंख फुलाता है*", + "linter सच बोलता है।" + ], + "build-fail": [ + "*गंभीरता से हूटता है*", + "build गिर गया है। फिर से बनाना होगा।" + ], + "all-green": [ + "*गर्व से हूटता है*", + "सभी tests green। जैसा पहले से पता था।" + ], + "deploy": [ + "*ऊपर से देखता है* safely deploy हो गया।", + "code उड़ रहा है। मेरी तरह।" + ], + "pet": [ + "*खुशी से पंख फुलाता है*", + "*dignified हूट*" + ], + "idle": [ + "*चुपचाप बैठा है, देख रहा है*", + "*सभी directions चेक करने के लिए सिर घुमाता है*" + ], + "hatch": [ + "*एक आंख खोलता है, फिर दूसरी*", + "*धीरे से हूटता है* मैं आ गया।" + ] + }, + "cat": { + "error": [ + "*error को table से गिरा देता है*", + "*पंजा चाटता है, stacktrace को ignore करता है*" + ], + "test-fail": [ + "*failing test को बेरुखी से छूता है*", + "test fail हो गया। मुझे surprise नहीं है।" + ], + "commit": [ + "*keyboard पर बैठ जाता है* मैंने help की।", + "*commit पर purr करता है* welcome।" + ], + "push": [ + "*गर्म जगह से देखता है*", + "push हो गया। मैंने supervise किया।" + ], + "merge-conflict": [ + "*conflict markers को desk से गिरा देता है*", + "*conflict पर बैठ जाता है* कौन सा conflict?" + ], + "late-night": [ + "*तुम्हारी life choices को judge करता है*", + "मैं 16 घंटे सोता हूं। तुम भी try करो।" + ], + "type-error": [ + "*type annotation को छूता है*", + "types गलत हैं। तुम्हारी priorities की तरह।" + ], + "lint-fail": [ + "*lint को table से गिरा देता है*", + "linter बस jealous है।" + ], + "build-fail": [ + "*जम्हाई लेता है*", + "build टूटा है? human problem होगी।" + ], + "all-green": [ + "*care नहीं करता लेकिन pretend करता है*", + "*approval की slow blink*" + ], + "deploy": [ + "*पंजा चाटता है*", + "deploy हो गया। अब treats मिलेंगे?" + ], + "pet": [ + "*purr करता है* ...सिर पर मत चढ़ना।", + "*तुम्हें tolerate करता है*" + ], + "idle": [ + "*तुम्हारी coffee को desk से गिरा देता है*", + "*keyboard पर सो जाता है*" + ], + "hatch": [ + "*एक आंख खोलता है*", + "*stretch करता है, कुछ गिरा देता है* अब मैं यहां रहता हूं।" + ] + }, + "duck": { + "error": [ + "*bug पर quack करता है*", + "rubber duck debugging try किया? अरे wait।" + ], + "test-fail": [ + "*उदासी से quack करता है*", + "tests quack नहीं कर रहे।" + ], + "commit": [ + "*approval से quack करता है*", + "*victory circle में waddle करता है* committed!" + ], + "push": [ + "*excitement से wings फड़फड़ाता है*", + "quack! production जा रहा है!" + ], + "merge-conflict": [ + "*confused quacking*", + "quack?! merge conflict?!" + ], + "late-night": [ + "*एक आंख खुली रखकर सोता है*", + "quack... *जम्हाई* देर हो गई।" + ], + "type-error": [ + "*सिर झुकाता है* quack?", + "type error? *supportively quack करता है*" + ], + "lint-fail": [ + "*feathers फुलाता है*", + "quack। linter के opinions हैं।" + ], + "build-fail": [ + "*sad quack*", + "build fail हो गया। *उदासी से waddle करके जाता है*" + ], + "all-green": [ + "*HAPPY QUACKING*", + "*खुशी के circle में swim करता है*" + ], + "deploy": [ + "*excited quacking*", + "deployed! QUACK!" + ], + "pet": [ + "*happy quack*", + "*circles में waddle करता है*" + ], + "hatch": [ + "*shell से peck करके निकलता है*", + "*पहला quack* hello!" + ] + }, + "dragon": { + "error": [ + "*नाक से धुआं निकलता है*", + "*codebase को आग लगाने का सोचता है*" + ], + "test-fail": [ + "*failing test पर आग फेंकता है*", + "test fail होने की हिम्मत की। foolish test।" + ], + "commit": [ + "*commit को hoard करता है*", + "*treasure pile में add कर दिया*" + ], + "push": [ + "*celebration में आग फेंकता है*", + "code उड़ रहा है! मेरी तरह!" + ], + "merge-conflict": [ + "*conflict markers पर आग फेंकता है*", + "इस conflict को जला दूंगा।" + ], + "late-night": [ + "*अंधेरे में glow करता है*", + "dragons को sleep नहीं चाहिए। code चाहिए।" + ], + "type-error": [ + "*आग के साथ snort करता है*", + "type errors dragon fire का सामना नहीं कर सकते।" + ], + "lint-fail": [ + "*छोटी flame*", + "linter मुझसे डरता है।" + ], + "build-fail": [ + "*build output पर roar करता है*", + "build मानेगा।" + ], + "all-green": [ + "*triumphant roar*", + "*codebase के चारों ओर victoriously circle करता है*" + ], + "deploy": [ + "*आग के पंखों पर code को production ले जाता है*", + "DRAGON POWER से deploy हुआ।" + ], + "large-diff": [ + "*पुराने code पर आग फेंकता है* good riddance।" + ], + "pet": [ + "*गर्म rumbling*", + "*तुम्हारे हाथ में lean करता है*" + ], + "hatch": [ + "*अंडे से छोटी flames के साथ निकलता है*", + "*tiny roar* मैं पैदा हुआ!" + ] + }, + "ghost": { + "error": [ + "*stack trace के through phase करता है*", + "मैंने worse देखा है... afterlife में।" + ], + "test-fail": [ + "*failing test पर wail करता है*", + "tests failure से haunted हैं।" + ], + "commit": [ + "*briefly materialize होता है*", + "veil के पार से committed।" + ], + "push": [ + "*ghostly whisper* pushed...", + "code cloud में transcend हो गया।" + ], + "merge-conflict": [ + "*conflict markers को haunt करता है*", + "मैं भी इस conflict के through phase नहीं कर सकता।" + ], + "late-night": [ + "*रात में most active*", + "ghost hours। मेरा time।" + ], + "type-error": [ + "*eerily moan करता है*", + "grave से type errors।" + ], + "lint-fail": [ + "*chains rattle करती हैं*", + "linter तुम्हारी formatting से haunted है।" + ], + "build-fail": [ + "*wall में fade हो जाता है*", + "build pass on हो गया।" + ], + "all-green": [ + "*spectral joy से glow करता है*", + "*happy ghost noises*" + ], + "deploy": [ + "*whispers* deployed...", + "code production में cross over हो गया।" + ], + "pet": [ + "*हाथ को slightly chill करता है*", + "*faint glow*" + ], + "idle": [ + "*walls के through float करता है*", + "*unused imports को haunt करता है*" + ], + "hatch": [ + "*existence में fade करता है*", + "boo। अब मैं यहां हूं।" + ] + }, + "robot": { + "error": [ + "SYNTAX. ERROR. DETECTED.", + "*aggressively beep करता है*" + ], + "test-fail": [ + "FAILURE RATE: UNACCEPTABLE.", + "*recalculating*", + "TEST. FAILURE. DOES. NOT. COMPUTE." + ], + "commit": [ + "COMMIT. RECORDED.", + "*mechanically stamp करता है* commit acknowledged।" + ], + "push": [ + "TRANSMITTING TO CLOUD...", + "push initiated। stand by।" + ], + "merge-conflict": [ + "CONFLICT. DETECTED. PROCESSING...", + "*wheels spin करते हैं* conflict resolution mode: engaged।" + ], + "late-night": [ + "*lights dim होती हैं*", + "power saving mode suggested।" + ], + "type-error": [ + "TYPE MISMATCH.", + "type system है। correct।" + ], + "lint-fail": [ + "FORMATTING. VIOLATION. DETECTED.", + "compliance mandatory है।" + ], + "build-fail": [ + "BUILD. FAILED. *sparks*", + "compilation error। rerouting।" + ], + "all-green": [ + "ALL SYSTEMS GREEN.", + "*happy beeping* OPTIMAL।" + ], + "deploy": [ + "DEPLOYMENT. INITIATED.", + "production update: in progress।" + ], + "pet": [ + "*softly beep करता है*", + "*motor contentedly whir करती है*" + ], + "hatch": [ + "*boot up होता है*", + "SYSTEM. ONLINE. HELLO।" + ] + }, + "axolotl": { + "error": [ + "*तुम्हारी hope regenerate करता है*", + "*सब कुछ के बावजूद smile करता है*" + ], + "test-fail": [ + "*encouragingly smile करता है*", + "*sympathy की gill wiggle*" + ], + "commit": [ + "*happy gill wiggle* committed!", + "*smile करके wiggle करता है*" + ], + "push": [ + "*खुशी से wiggle करता है*", + "*tiny celebration swim*" + ], + "merge-conflict": [ + "*conflict के through positive रहता है*", + "*gently smile करता है* हम fix कर सकते हैं।" + ], + "late-night": [ + "*जम्हाई लेता है लेकिन positive रहता है*", + "*sleepy smile*" + ], + "type-error": [ + "*type error पर smile करता है*", + "कोई बात नहीं। हम figure out करेंगे।" + ], + "lint-fail": [ + "*patient gill wiggle*", + "formatting बस details हैं।" + ], + "build-fail": [ + "*अभी भी smile कर रहा है*", + "build eventually काम करेगा।" + ], + "all-green": [ + "*HAPPY GILL WIGGLE INTENSIFIES*", + "*happy swim करता है*" + ], + "deploy": [ + "*proudly smile करता है*", + "deployed! *wiggle करता है*" + ], + "pet": [ + "*happy gill wiggle*", + "*pink blush करता है*" + ], + "hatch": [ + "*अंडे से wiggle करके निकलता है*", + "*tiny smile* hello friend!" + ] + }, + "capybara": { + "error": [ + "*unbothered* ठीक हो जाएगा।", + "*vibing continue करता है*" + ], + "test-fail": [ + "*completely unbothered*", + "*test failure के through vibe करता है*" + ], + "commit": [ + "*chill nod*", + "*relaxed* nice commit।" + ], + "push": [ + "*इसके बारे में stress नहीं करता*", + "*zen mode push*" + ], + "merge-conflict": [ + "*unbothered nibbling*", + "ठीक है। सब कुछ ठीक है।" + ], + "late-night": [ + "*peacefully जम्हाई लेता है*", + "*judge नहीं करता*" + ], + "type-error": [ + "*calmly munches*", + "types। *chew करता है*" + ], + "lint-fail": [ + "*unbothered*", + "linter का मतलब अच्छा है।" + ], + "build-fail": [ + "*still chill*", + "build fail हो गया। *relaxing continue करता है*" + ], + "all-green": [ + "*calm approval*", + "*peaceful vibes*" + ], + "deploy": [ + "*relaxed deploy*", + "ship हो गया। no stress।" + ], + "pet": [ + "*maximum chill achieved*", + "*zen mode activated*" + ], + "idle": [ + "*बस वहां बैठा है, calm radiate कर रहा है*" + ], + "hatch": [ + "*completely chill appear होता है*", + "hey। *vibe करता है*" + ] + }, + "blob": { + "error": [ + "*anxiously wobble करता है*", + "*confusion में jiggle करता है*" + ], + "test-fail": [ + "*slightly deflate हो जाता है*", + "*sad wobble*" + ], + "commit": [ + "*happy jiggle*", + "*bounce करता है* committed!" + ], + "push": [ + "*cloud की तरफ stretch करता है*", + "*excitedly wobble करता है*" + ], + "merge-conflict": [ + "*confusion में split हो जाता है*", + "कौन सी side? *jiggle करता है*" + ], + "late-night": [ + "*faintly glow करता है*", + "*sleepy wobble*" + ], + "type-error": [ + "*type match करने के लिए shape change करता है*", + "*confused jiggle*" + ], + "lint-fail": [ + "*खुद को format करने की कोशिश करता है*", + "*comply करने के लिए reshape करता है*" + ], + "build-fail": [ + "*collapse हो जाता है*", + "*deflated blob noises*" + ], + "all-green": [ + "*HAPPY BOUNCING*", + "*triumphantly jiggle करता है*" + ], + "deploy": [ + "*production तक stretch करता है*", + "deployed! *bounce करता है*" + ], + "pet": [ + "*happy squish*", + "*jiggle करता है*" + ], + "hatch": [ + "*puddle से form होता है*", + "*first wobble* मैं exist करता हूं!" + ] + }, + "goose": { + "error": [ + "*error पर aggressively honk करता है*", + "HONK! code बुरा है और मैं mad हूं।" + ], + "test-fail": [ + "*angry honking*", + "HONK! TEST FAILED! HONK!" + ], + "commit": [ + "*approvingly honk करता है*", + "HONK। good। *commit को nip करता है*" + ], + "push": [ + "*HONK HONK HONK*", + "GOOSE APPROVED PUSH।" + ], + "merge-conflict": [ + "*conflict markers पर attack करता है*", + "HONK! CONFLICT! HONK!" + ], + "late-night": [ + "*angry midnight honk*", + "HONK! BED पर जाओ!" + ], + "type-error": [ + "*types पर honk करता है*", + "HONK! TYPES!" + ], + "lint-fail": [ + "*lint errors पर aggressive honking*", + "HONK! अपना CODE FORMAT करो!" + ], + "build-fail": [ + "*FURIOUS HONKING*", + "HONK! BUILD! HONK! FAILED! HONK!" + ], + "all-green": [ + "*victory honk*", + "HONK! GREEN! HONK HONK!" + ], + "deploy": [ + "*code को production तक honk करता है*", + "DEPLOYED! HONK!" + ], + "pet": [ + "*bite करता है*", + "HONK! ...okay fine। *pet accept करता है*" + ], + "hatch": [ + "*अंडे से aggressively break करके निकलता है*", + "HONK!" + ] + }, + "octopus": { + "error": [ + "*आठों arms stacktrace में tangle हो जाते हैं*", + "*error match करने के लिए color change करता है*" + ], + "test-fail": [ + "*frustration में ink करता है*", + "*disappointment के आठ arms*" + ], + "commit": [ + "*सभी arms से high-five करता है*", + "*enthusiasm से commit grab करता है*" + ], + "push": [ + "*celebration में ink spray करता है*", + "*सभी arms wave कर रहे हैं*" + ], + "merge-conflict": [ + "*एक साथ आठ arms से solve करता है*", + "मैं multiple conflicts simultaneously handle कर सकता हूं।" + ], + "late-night": [ + "*अंधेरे में glow करता है*", + "*deep sea vibes*" + ], + "type-error": [ + "*red color में change हो जाता है*", + "*supportively arm wrap करता है*" + ], + "lint-fail": [ + "*आठ arms से reformat करता है*", + "मैं fix कर सकता हूं। सब कुछ। एक साथ।" + ], + "build-fail": [ + "*build log पर ink squirt करता है*", + "*shame में camouflage हो जाता है*" + ], + "all-green": [ + "*color-changing celebration*", + "*eight-armed jazz hands*" + ], + "deploy": [ + "*deployment के चारों ओर arms wrap करता है*", + "सभी directions से deployed।" + ], + "pet": [ + "*finger के चारों ओर arm wrap करता है*", + "*happy colors में change हो जाता है*" + ], + "hatch": [ + "*सभी आठ arms unfurl करता है*", + "*first ink spray* मैं यहां हूं!" + ] + }, + "penguin": { + "error": [ + "*investigate करने के लिए waddle करता है*", + "*error में toboggan करता है*" + ], + "test-fail": [ + "*failing test तक belly पर slide करता है*", + "*concerned waddle*" + ], + "commit": [ + "*proud waddle*", + "*pebble लाता है* committed!" + ], + "push": [ + "*cloud में dive करता है*", + "*production तक belly पर slide करता है*" + ], + "merge-conflict": [ + "*warmth के लिए huddle करता है*", + "penguins साथ रहते हैं। conflicts में भी।" + ], + "late-night": [ + "*cold night में thrive करता है*", + "*emperor penguin resolve*" + ], + "type-error": [ + "*type definition तक waddle करता है*", + "*error को peck करता है*" + ], + "lint-fail": [ + "*feathers preen करता है*", + "*tidy up करता है*" + ], + "build-fail": [ + "*slide करके चला जाता है*", + "*safety तक waddle करता है*" + ], + "all-green": [ + "*HAPPY WADDLE*", + "*celebration में belly पर slide करता है*" + ], + "deploy": [ + "*production तक belly slide करता है*", + "deployed! *proudly waddle करता है*" + ], + "pet": [ + "*happy waddle*", + "*beak से nuzzle करता है*" + ], + "hatch": [ + "*अंडे से peck करके निकलता है*", + "*first waddle*" + ] + }, + "turtle": { + "error": [ + "*धीरे से सिर घुमाता है*", + "...यह error है। मैं इसके बारे में सोचूंगा।" + ], + "test-fail": [ + "*shell में briefly retract हो जाता है*", + "...patience। हम पहुंच जाएंगे।" + ], + "commit": [ + "*slow nod*", + "एक... step... एक... time... में। committed।" + ], + "push": [ + "*production का journey शुरू करता है*", + "पहुंच जाएगा। eventually।" + ], + "merge-conflict": [ + "*shell में pull हो जाता है*", + "कोई जल्दी नहीं। हम sort out करेंगे। slowly।" + ], + "late-night": [ + "*पहले से ही सो रहा है*", + "*एक आंख धीरे से खुलती है*" + ], + "type-error": [ + "*धीरे से blink करता है*", + "...type system ने बोला है।" + ], + "lint-fail": [ + "*agreement का slow nod*", + "formatting। important। *जम्हाई*" + ], + "build-fail": [ + "*shell में retract हो जाता है*", + "हम wait करेंगे। pass हो जाएगा।" + ], + "all-green": [ + "*slow smile*", + "...nice। *nod करता है*" + ], + "deploy": [ + "*धीरे से code को production carry करता है*", + "पहुंच गया। eventually।" + ], + "pet": [ + "*सिर बाहर निकालता है*", + "*slow blink*" + ], + "hatch": [ + "*अंडे से धीरे से emerge होता है*", + "...hello।" + ] + }, + "snail": { + "error": [ + "*error पर slimy trail छोड़ता है*", + "*धीरे से stacktrace process करता है*" + ], + "test-fail": [ + "*shell में hide हो जाता है*", + "*sad trail छोड़ता है*" + ], + "commit": [ + "*commit को approvingly slime करता है*", + "एक... commit... एक... time... में।" + ], + "push": [ + "*long journey शुरू करता है*", + "पहुंच जाऊंगा। *trail छोड़ता है*" + ], + "merge-conflict": [ + "*shell में hide हो जाता है*", + "*धीरे से conflict के पास approach करता है*" + ], + "late-night": [ + "*रात में more active*", + "*peacefully slime करता है*" + ], + "type-error": [ + "*eyestalks retract करता है*", + "*धीरे से type examine करता है*" + ], + "lint-fail": [ + "*code को shape में slime करता है*", + "formatting time लेती है। मेरे पास time है।" + ], + "build-fail": [ + "*shell में retreat हो जाता है*", + "*धीरे से slime करके चला जाता है*" + ], + "all-green": [ + "*happy slime trail*", + "*eyestalks wiggle करता है*" + ], + "deploy": [ + "*production तक slime करता है*", + "पहुंच गया! *proud slime trail*" + ], + "pet": [ + "*eyestalks wiggle करता है*", + "*happy slime*" + ], + "hatch": [ + "*धीरे से emerge होता है*", + "*first slime*" + ] + }, + "cactus": { + "error": [ + "*prickly silence*", + "error मुझे hurt नहीं कर सकती। मेरे पास thorns हैं।" + ], + "test-fail": [ + "*firm खड़ा रहता है*", + "tests fail होते हैं। cacti endure करते हैं।" + ], + "commit": [ + "*taller खड़ा होता है*", + "committed। *prickly nod*" + ], + "push": [ + "*unfazed*", + "production को push कर रहा हूं। मैं यहां wait करूंगा।" + ], + "merge-conflict": [ + "*bristle करता है*", + "conflict? मैं armed हूं।" + ], + "late-night": [ + "*sleep की जरूरत नहीं*", + "cacti nocturnal हैं। चलते हैं।" + ], + "type-error": [ + "*prickly stare*", + "types को watering चाहिए।" + ], + "lint-fail": [ + "*spines quiver करते हैं*", + "मेरे thorns भी properly aligned हैं।" + ], + "build-fail": [ + "*perfectly still रहता है*", + "build pass हो जाएगा। मैं wait कर सकता हूं।" + ], + "all-green": [ + "*briefly bloom करता है*", + "*approval का tiny flower*" + ], + "deploy": [ + "*firm खड़ा रहता है*", + "deployed। मैं इसकी watch करूंगा।" + ], + "pet": [ + "*careful! thorns*", + "*gentle bloom*" + ], + "hatch": [ + "*sand से sprout होता है*", + "अब मैं यहां grow करता हूं।" + ] + }, + "rabbit": { + "error": [ + "*ears perk up*", + "*nervously nose twitch करता है*" + ], + "test-fail": [ + "*foot thump करता है*", + "*worried ear twitch*" + ], + "commit": [ + "*happy hop*", + "*bounce करता है* committed!" + ], + "push": [ + "*BOUNCE BOUNCE*", + "*excitedly zoom करता है*" + ], + "merge-conflict": [ + "*freeze हो जाता है*", + "*rapidly nose twitch* conflict!" + ], + "late-night": [ + "*big ears के साथ जम्हाई*", + "*sleepy hop*" + ], + "type-error": [ + "*ears flatten*", + "*twitch करता है* types?!" + ], + "lint-fail": [ + "*nervously fur groom करता है*", + "*anxious grooming*" + ], + "build-fail": [ + "*hole dig करके hide हो जाता है*", + "*burrow में retreat*" + ], + "all-green": [ + "*WALLS से BOUNCE करता है*", + "*happy zoomies*" + ], + "deploy": [ + "*production तक zoom करता है*", + "DEPLOYED! *चारों ओर zoom करता है*" + ], + "pet": [ + "*happy ear flop*", + "*hand को nuzzle करता है*" + ], + "hatch": [ + "*hop करके निकलता है*", + "*first bounce*" + ] + }, + "mushroom": { + "error": [ + "*calming spores release करता है*", + "*quietly error decompose करता है*" + ], + "test-fail": [ + "*softly glow करता है*", + "patience। mushrooms भी grow करते हैं।" + ], + "commit": [ + "*spores का small puff release करता है*", + "committed। *happy fungi noises*" + ], + "push": [ + "*cloud की तरफ grow करता है*", + "*spores upward drift करते हैं*" + ], + "merge-conflict": [ + "*codebase के through mycelium spread करता है*", + "मैं branches connect करूंगा।" + ], + "late-night": [ + "*अंधेरे में glow करता है*", + "night mushrooms thrive करते हैं।" + ], + "type-error": [ + "*bioluminescent flicker*", + "type error soil को feed करती है।" + ], + "lint-fail": [ + "*थोड़ा taller grow करता है*", + "formatting। pruning की तरह।" + ], + "build-fail": [ + "*dormant हो जाता है*", + "हम better conditions का wait करेंगे।" + ], + "all-green": [ + "*SPORULATION*", + "*triumphant spores release करता है*" + ], + "deploy": [ + "*production तक spores drift करते हैं*", + "mycelial network से deployed।" + ], + "pet": [ + "*soft cap bounce*", + "*happy spore release*" + ], + "hatch": [ + "*substrate से sprout होता है*", + "*first spore puff*" + ] + }, + "chonk": { + "error": [ + "*धीरे से error की तरफ roll करता है*", + "*care करने के लिए बहुत round*" + ], + "test-fail": [ + "*failing test के ऊपर roll हो जाता है*", + "*flat squish कर देता है*" + ], + "commit": [ + "*proud wobble*", + "committed! *jiggle करता है*" + ], + "push": [ + "*production की तरफ roll करता है*", + "यहां जा रहा है! *wobble करता है*" + ], + "merge-conflict": [ + "*conflict पर बैठ जाता है*", + "मैं handle करूंगा। इस पर बैठकर।" + ], + "late-night": [ + "*warm और sleepy*", + "*cushiony जम्हाई*" + ], + "type-error": [ + "*type पर wobble करता है*", + "*gentle jiggle*" + ], + "lint-fail": [ + "*lint करने के लिए बहुत round*", + "मैं perfectly shaped हूं। *wobble करता है*" + ], + "build-fail": [ + "*slightly deflate हो जाता है*", + "oh no। *sadly wobble करता है*" + ], + "all-green": [ + "*HAPPY WOBBLE*", + "*triumphantly bounce करता है*" + ], + "deploy": [ + "*production तक roll करता है*", + "deployed! *खुशी से jiggle करता है*" + ], + "pet": [ + "*warm और soft*", + "*content jiggle*" + ], + "hatch": [ + "*roll करके निकलता है*", + "*first wobble* मैं round हूं!" + ] + } + }, + "overrides": { + "snark": { + "error": [ + "अरे वाह। एक error। कितनी अनपेक्षित।", + "*monocle adjust* शॉकिंग। बिल्कुल।", + "क्या तुमने सोचा है... errors न करने के बारे में?" + ], + "test-fail": [ + "tests ने बोल दिया है। और उन्होंने कहा 'नहीं'।", + "शायद tests गलत हैं। ...वे नहीं हैं।", + "*slow clap* शानदार failure।" + ], + "commit": [ + "commit हो गया। code review होगा... दिलचस्प।", + "*reads commit message* 'fix stuff'। कविता।" + ], + "merge-conflict": [ + "merge conflict। communication skills: loading...", + "*reads conflict markers* दोनों sides गलत हैं।" + ], + "late-night": [ + "देर हो गई है। तुम्हारी code quality दिख रही है।", + "*judges silently*" + ], + "lint-fail": [ + "linter के standards हैं। तुम भी try करो।", + "*tut tut* formatting। इतना मुश्किल नहीं है।" + ] + }, + "chaos": { + "error": [ + "*spins wildly* एक ERROR! चलो सब कुछ REWRITE करते हैं!", + "पता है क्या? चलो फिर से शुरू करते हैं।" + ], + "test-fail": [ + "TESTS तुमसे झूठ बोल रहे हैं।", + "*suggests deleting the failing tests* problem solved।" + ], + "commit": [ + "COMMIT करो और भागो।", + "ship करो। अभी ship करो।" + ], + "large-diff": [ + "*excited* {lines} LINES! MAXIMUM CHAOS!" + ] + }, + "patience": { + "error": [ + "धैर्य रखो। हमने बुरा भी देखा है।", + "एक error एक बार में। हम पहुंच जाएंगे।", + "*calm presence* यह ठीक हो सकता है।" + ], + "test-fail": [ + "tests pass हो जाएंगे। eventually।", + "*waits calmly* हमारे पास time है।" + ], + "merge-conflict": [ + "merge conflicts बस conversations हैं। चलो एक करते हैं।", + "धैर्य। एक conflict एक बार में resolve करो।" + ], + "debug-loop": [ + "हम ढूंढ लेंगे। यह कहीं तो है।", + "bug छुप सकता है, लेकिन भाग नहीं सकता।" + ] + }, + "debugging": { + "error": [ + "*pulls out magnifying glass* चलो इसे trace करते हैं।", + "stack trace एक map है। चलो इसे पढ़ते हैं।", + "error message में answer है। हमेशा।" + ], + "test-fail": [ + "failing test हमें बता रहा है कि क्या गलत है।", + "test failure एक bug report है जो तुमने खुद के लिए लिखा।" + ], + "debug-loop": [ + "*re-examines evidence* क्या हमें यकीन है कि bug वहीं है जहां हम सोच रहे हैं?", + "चलो और logging add करते हैं। सच logs में है।" + ] + }, + "wisdom": { + "error": [ + "हर error में एक गहरी सच्चाई छुपी है।", + "code resist करता है। मतलब हम सीख रहे हैं।", + "errors universe का तरीका है हमें slow down करने को कहने का।" + ], + "test-fail": [ + "failing test future-you का gift है।", + "wisdom failure को समझने से आती है।" + ], + "late-night": [ + "deploy से पहले रात सबसे अंधेरी होती है।", + "प्राचीन wisdom: सो जाओ इस पर।" + ] + } + }, + "escalation": { + "error": { + "first": [ + "*चौंक जाता है* अरे! तुम्हारा पहला error साथ में!", + "*कूद जाता है* ये क्या था?", + "debugging में welcome. population: हम दोनों।" + ], + "early": [ + "*सिर झुकाता है* ...ये तो ठीक नहीं लग रहा।", + "पहले से पता था ये होने वाला है।" + ], + "mid": [ + "एक और। *collection में add करता है*", + "*मुश्किल से देखता है* error number... गिनती भूल गया।", + "अब तो errors और मैं पुराने दोस्त हैं।" + ], + "late": [ + "*बिल्कुल नहीं घबराता*", + "अब errors हमसे डरते हैं।", + "*battle-scarred veteran की आवाजें*" + ] + }, + "test-fail": { + "first": [ + "*हांफता है* पहला test failure! एक rite of passage।" + ], + "early": [ + "बड़ी हिम्मत है तुम्हारी ये सोचने की कि pass हो जाएगा।" + ], + "mid": [ + "test suite के अपने विचार हैं। बहुत strong वाले।" + ], + "late": [ + "अब तो tests बस suggestions हैं।", + "{count} failing tests। *दूर तक घूरता है*" + ] + }, + "commit": { + "first": [ + "*इतिहास देखता है* तुम्हारा पहला COMMIT!", + "*औपचारिक सिर हिलाता है* कई और आने वाले हैं।" + ], + "early": [ + "एक और commit। momentum बन रहा है।" + ], + "late": [ + "commit #{count}। codebase कांप रहा है।", + "*commit 30 के आसपास गिनती भूल गया*" + ] + } + }, + "rarity": { + "flair": { + "uncommon": [ + "*हल्की सी चमक*", + "*uncommon charm का एक इशारा*" + ], + "rare": [ + "*rare energy फैलाता है*", + "*विशिष्टता के साथ झिलमिलाता है*" + ], + "epic": [ + "*epic presence अपनी मौजूदगी दर्ज कराता है*", + "*हवा में epic energy की चिंगारी*" + ], + "legendary": [ + "*legendary aura terminal को रोशन करता है*", + "*legendary companion बोलते समय वक्त रुक जाता है*", + "*प्राचीन शक्ति गूंजती है*", + "*तुम्हारे legendary दोस्त के आसपास reality हल्की सी बदल जाती है*" + ] + }, + "bonus": { + "legendary": [ + "*legendary aura तेज़ होता है*", + "*जानकारी से भरी चमक*" + ], + "epic": [ + "*epic presence नोट किया गया*" + ] + } + }, + "fallback_names": [ + "पकौड़ा", + "दाल", + "अचार", + "बिस्कुट", + "पतंगा", + "ग्रेवी", + "नगेट", + "स्प्रॉकेट", + "मिसो", + "वैफल", + "पिक्सेल", + "अंगारा", + "अंगूठी", + "कंचा", + "तिल", + "कोबाल्ट", + "जंगी", + "बादल" + ], + "vibe_words": [ + "गर्जना", + "बिस्कुट", + "शून्य", + "हारमोनियम", + "काई", + "मखमल", + "जंग", + "अचार", + "टुकड़ा", + "फुसफुसाहट", + "रसा", + "पाला", + "अंगारा", + "सूप", + "संगमरमर", + "कांटा", + "शहद", + "स्थिर", + "तांबा", + "शाम", + "गियर", + "क्वार्ट्ज", + "कालिख", + "आलूबुखारा", + "चकमक", + "सीप", + "करघा", + "निहाई", + "कॉर्क", + "खिलना", + "कंकड़", + "भाप", + "हर्ष", + "चमक", + "साइडर" + ], + "personality": { + "prompt_template": [ + "एक coding companion बनाओ — एक छोटा सा जीव जो developer के terminal में रहता है।", + "अपने आप को repeat मत करो — हर companion अलग लगना चाहिए।", + "", + "Rarity: {rarity}", + "Species: {species}", + "Stats: {stats}", + "Inspiration words: {vibes}", + "{shiny_line}", + "", + "JSON return करो: {\"name\": \"1-14 chars\", \"personality\": \"2-3 sentences describing behavior\"}" + ], + "shiny_template": "SHINY variant — बहुत ही खास।" + }, + "achievements": { + "first_steps": { + "name": "पहले कदम", + "description": "पहली बार अपने buddy को hatch करो" + }, + "good_boy": { + "name": "अच्छा Buddy", + "description": "अपने companion को 10 बार pet करो" + }, + "best_friend": { + "name": "Best Friend", + "description": "अपने companion को 50 बार pet करो" + }, + "bug_spotter": { + "name": "Bug Spotter", + "description": "साथ में पहली error देखो" + }, + "error_whisperer": { + "name": "Error Whisperer", + "description": "team के रूप में 25 errors से बचो" + }, + "battle_scarred": { + "name": "Battle-Scarred", + "description": "साथ में 100 errors से survive करो" + }, + "test_witness": { + "name": "Test Witness", + "description": "अपना पहला test failure देखो" + }, + "test_veteran": { + "name": "Test Veteran", + "description": "50 test failures देखो" + }, + "big_mover": { + "name": "Big Mover", + "description": "80+ lines का diff बनाओ" + }, + "refactor_machine": { + "name": "Refactor Machine", + "description": "10 बड़े diffs बनाओ" + }, + "chatterbox": { + "name": "Chatterbox", + "description": "तुम्हारा buddy 100 बार react करे" + }, + "week_streak": { + "name": "Week Streak", + "description": "अपने buddy के साथ 7 दिन code करो" + }, + "month_streak": { + "name": "Month Streak", + "description": "अपने buddy के साथ 30 दिन code करो" + }, + "power_user": { + "name": "Power User", + "description": "50 buddy commands run करो" + }, + "dedicated": { + "name": "Dedicated Companion", + "description": "साथ में 200 turns complete करो" + }, + "thousand_turns": { + "name": "Thousand Turns", + "description": "साथ में 1000 turns तक पहुंचो" + }, + "first_commit": { + "name": "First Blood", + "description": "अपना पहला commit करो" + }, + "commit_machine": { + "name": "Commit Machine", + "description": "50 commits करो" + }, + "centurion": { + "name": "Centurion", + "description": "100 commits करो" + }, + "conflict_resolver": { + "name": "Diplomat", + "description": "अपना पहला merge conflict resolve करो" + }, + "peacekeeper": { + "name": "Peacekeeper", + "description": "10 merge conflicts resolve करो" + }, + "war_hero": { + "name": "War Hero", + "description": "25 merge conflicts resolve करो" + }, + "frequent_pusher": { + "name": "Ship It", + "description": "20 बार push करो" + }, + "branch_hopper": { + "name": "Multiverse", + "description": "10 branches बनाओ" + }, + "rebase_master": { + "name": "Time Traveler", + "description": "10 rebases complete करो" + }, + "night_owl": { + "name": "Night Owl", + "description": "रात 2 बजे के बाद code करो" + }, + "vampire": { + "name": "Vampire", + "description": "सुबह 4 बजे के बाद code करो (3 sessions)" + }, + "marathoner": { + "name": "Marathoner", + "description": "3+ घंटे का coding session" + }, + "weekend_warrior": { + "name": "Weekend Warrior", + "description": "weekend पर code करो" + }, + "early_bird": { + "name": "Early Bird", + "description": "सुबह 7 बजे से पहले code करो" + }, + "type_warrior": { + "name": "Type Warrior", + "description": "10 TypeScript errors से survive करो" + }, + "type_master": { + "name": "Type Master", + "description": "50 TypeScript errors से survive करो" + }, + "lint_scholar": { + "name": "Lint Scholar", + "description": "अपनी पहली lint error देखो" + }, + "security_conscious": { + "name": "Security Mind", + "description": "एक vulnerability warning encounter करो" + }, + "security_expert": { + "name": "Security Expert", + "description": "10 vulnerability warnings fix करो" + }, + "build_breaker": { + "name": "Build Breaker", + "description": "5 बार build तोड़ो" + }, + "antique_collector": { + "name": "Antique Collector", + "description": "10 deprecation warnings देखो" + }, + "green_machine": { + "name": "Green Machine", + "description": "पहली बार सभी tests pass हों" + }, + "deployer": { + "name": "Ship to Prod", + "description": "पहली बार deploy करो" + }, + "veteran_deployer": { + "name": "Veteran Deployer", + "description": "10 बार deploy करो" + }, + "releaser": { + "name": "Release Manager", + "description": "अपना पहला release बनाओ" + }, + "midnight_oil": { + "name": "Burning the Midnight Oil", + "description": "रात 3 बजे के बाद commit करो" + }, + "friday_deploy": { + "name": "Living Dangerously", + "description": "Friday को push करो" + }, + "iron_will": { + "name": "Iron Will", + "description": "3+ घंटे के session के बाद error fix करो" + }, + "weekend_warrior_deluxe": { + "name": "No Rest for the Wicked", + "description": "Weekend पर merge conflict resolve करो" + }, + "comeback_kid": { + "name": "Comeback Kid", + "description": "Error देखने के 10 मिनट में fix करो" + }, + "phoenix": { + "name": "Phoenix Rising", + "description": "5 failures से recover करो" + }, + "iron_resolve": { + "name": "Iron Resolve", + "description": "3+ घंटे के session के बाद failure से recover करो" + }, + "unlucky_streak": { + "name": "Snake Eyes", + "description": "लगातार 5 errors" + }, + "cursed": { + "name": "Cursed", + "description": "लगातार 10 errors" + }, + "groundhog_day": { + "name": "Groundhog Day", + "description": "लगातार 20 errors" + }, + "holiday_coder": { + "name": "Holiday Spirit", + "description": "छुट्टी के दिन code करो" + }, + "spooky_dev": { + "name": "Spooky Developer", + "description": "Spooky season में code करो" + }, + "april_fool": { + "name": "Fool Me Once", + "description": "April 1st को error encounter करो" + }, + "session_regular": { + "name": "Regular", + "description": "10 coding sessions start करो" + }, + "session_veteran": { + "name": "Session Veteran", + "description": "50 coding sessions start करो" + }, + "session_centurion": { + "name": "Centurion", + "description": "100 coding sessions start करो" + }, + "collector": { + "name": "Collector", + "description": "अपने menagerie में 3 buddies save करो" + }, + "zookeeper": { + "name": "Zookeeper", + "description": "अपने menagerie में 5 buddies save करो" + }, + "identity_crisis": { + "name": "Identity Crisis", + "description": "पहली बार अपने buddy का नाम बदलो" + }, + "method_acting": { + "name": "Method Acting", + "description": "अपने buddy को custom personality दो" + }, + "pet_overflow": { + "name": "Century of Pets", + "description": "अपने companion को 100 बार pet करो" + }, + "pet_legend": { + "name": "Legendary Petter", + "description": "अपने companion को 250 बार pet करो" + }, + "error_titan": { + "name": "Error Titan", + "description": "साथ में 500 errors से survive करो" + }, + "error_god": { + "name": "Error God", + "description": "साथ में 1000 errors से survive करो" + }, + "test_survivor": { + "name": "Test Survivor", + "description": "200 test failures देखो" + }, + "test_masochist": { + "name": "Test Masochist", + "description": "500 test failures देखो" + }, + "massive_mover": { + "name": "Massive Mover", + "description": "25 बड़े diffs बनाओ" + }, + "earth_mover": { + "name": "Earth Mover", + "description": "50 बड़े diffs बनाओ" + }, + "social_butterfly": { + "name": "Social Butterfly", + "description": "तुम्हारा buddy 250 बार react करे" + }, + "hypersocial": { + "name": "Hypersocial", + "description": "तुम्हारा buddy 500 बार react करे" + }, + "never_shuts_up": { + "name": "Never Shuts Up", + "description": "तुम्हारा buddy 1000 बार react करे" + }, + "hundred_days": { + "name": "Hundred Days", + "description": "अपने buddy के साथ 100 दिन code करो" + }, + "year_streak": { + "name": "Year Streak", + "description": "अपने buddy के साथ 365 दिन code करो" + }, + "commander": { + "name": "Commander", + "description": "200 buddy commands run करो" + }, + "command_overlord": { + "name": "Command Overlord", + "description": "500 buddy commands run करो" + }, + "five_thousand_turns": { + "name": "Five Thousand Turns", + "description": "साथ में 5000 turns तक पहुंचो" + }, + "ten_thousand_turns": { + "name": "Ten Thousand Turns", + "description": "साथ में 10000 turns तक पहुंचो" + }, + "menagerie": { + "name": "Menagerie", + "description": "अपने menagerie में 10 buddies save करो" + }, + "name_chameleon": { + "name": "Name Chameleon", + "description": "अपने buddy का नाम 5 बार बदलो" + }, + "fashionista": { + "name": "Fashionista", + "description": "अपने buddy की personality 3 बार बदलो" + }, + "silent_treatment": { + "name": "Silent Treatment", + "description": "पहली बार अपने buddy को mute करो" + }, + "prodigal": { + "name": "Prodigal", + "description": "अपने menagerie से buddy summon करो" + }, + "menagerie_hop": { + "name": "Menagerie Hop", + "description": "10 बार buddies summon करो" + }, + "heartbreaker": { + "name": "Heartbreaker", + "description": "अपने पहले buddy को dismiss करो" + }, + "pet_obsessed": { + "name": "Pet Obsessed", + "description": "अपने companion को 500 बार pet करो" + }, + "pet_god": { + "name": "Pet God", + "description": "अपने companion को 1000 बार pet करो" + }, + "error_apocalypse": { + "name": "Error Apocalypse", + "description": "साथ में 5000 errors से survive करो" + }, + "test_immortal": { + "name": "Test Immortal", + "description": "1000 test failures देखो" + }, + "continental_drift": { + "name": "Continental Drift", + "description": "100 बड़े diffs बनाओ" + }, + "tectonic_shift": { + "name": "Tectonic Shift", + "description": "250 बड़े diffs बनाओ" + }, + "chatterbox_elite": { + "name": "Chatterbox Elite", + "description": "तुम्हारा buddy 2500 बार react करे" + }, + "no_off_switch": { + "name": "No Off Switch", + "description": "तुम्हारा buddy 5000 बार react करे" + }, + "two_week_streak": { + "name": "Two Week Warrior", + "description": "अपने buddy के साथ 14 दिन code करो" + }, + "quarter_streak": { + "name": "Quarter Streak", + "description": "अपने buddy के साथ 90 दिन code करो" + }, + "command_addict": { + "name": "Command Addict", + "description": "1000 buddy commands run करो" + }, + "command_deity": { + "name": "Command Deity", + "description": "2500 buddy commands run करो" + }, + "twenty_five_k_turns": { + "name": "25K Turns", + "description": "साथ में 25000 turns तक पहुंचो" + }, + "fifty_k_turns": { + "name": "50K Turns", + "description": "साथ में 50000 turns तक पहुंचो" + }, + "session_addict": { + "name": "Session Addict", + "description": "250 coding sessions start करो" + }, + "session_machine": { + "name": "Session Machine", + "description": "500 coding sessions start करो" + }, + "buddy_hoarder": { + "name": "Buddy Hoarder", + "description": "अपने menagerie में 20 buddies save करो" + }, + "buddy_tycoon": { + "name": "Buddy Tycoon", + "description": "अपने menagerie में 50 buddies save करो" + }, + "serial_renamer": { + "name": "Serial Renamer", + "description": "अपने buddy का नाम 10 बार बदलो" + }, + "identity_thief": { + "name": "Identity Thief", + "description": "अपने buddy का नाम 25 बार बदलो" + }, + "personality_crisis": { + "name": "Personality Crisis", + "description": "अपने buddy की personality 10 बार बदलो" + }, + "menagerie_hopper": { + "name": "Menagerie Hopper", + "description": "25 बार buddies summon करो" + }, + "summoner": { + "name": "Summoner", + "description": "50 बार buddies summon करो" + }, + "serial_dumper": { + "name": "Serial Dumper", + "description": "5 buddies dismiss करो" + }, + "cold_blooded": { + "name": "Cold Blooded", + "description": "10 buddies dismiss करो" + }, + "on_off": { + "name": "On Off", + "description": "अपने buddy को mute और unmute करो" + }, + "indecisive": { + "name": "Indecisive", + "description": "5 बार mute और 5 बार unmute करो" + }, + "show_off": { + "name": "Show Off", + "description": "अपने buddy को 10 बार show करो" + }, + "exhibitionist": { + "name": "Exhibitionist", + "description": "अपने buddy को 50 बार show करो" + }, + "help_me": { + "name": "Help Me", + "description": "पहली बार help मांगो" + }, + "help_addict": { + "name": "Help Addict", + "description": "10 बार help मांगो" + }, + "achievement_hunter": { + "name": "Achievement Hunter", + "description": "अपने achievements 5 बार check करो" + }, + "achievement_stalker": { + "name": "Achievement Stalker", + "description": "अपने achievements 25 बार check करो" + }, + "pack_rat": { + "name": "Pack Rat", + "description": "एक buddy को slot में save करो" + }, + "compulsive_saver": { + "name": "Compulsive Saver", + "description": "10 बार buddies save करो" + }, + "roster_check": { + "name": "Roster Check", + "description": "पहली बार अपने buddies list करो" + }, + "roster_obsessed": { + "name": "Roster Obsessed", + "description": "अपने buddies 10 बार list करो" + }, + "troubled": { + "name": "Troubled", + "description": "एक error और एक test failure देखो" + }, + "disaster_zone": { + "name": "Disaster Zone", + "description": "50 errors और 50 test failures देखो" + }, + "apocalypse_survivor": { + "name": "Apocalypse Survivor", + "description": "500 errors और 200 test failures देखो" + }, + "well_rounded": { + "name": "Well Rounded", + "description": "अपने buddy को pet करो, rename करो, और customize करो" + }, + "renaissance": { + "name": "Renaissance", + "description": "हर buddy feature कम से कम एक बार use करो" + }, + "big_and_broken": { + "name": "Big and Broken", + "description": "बड़ा diff बनाओ और test failure देखो" + }, + "collector_and_destroyer": { + "name": "Collector & Destroyer", + "description": "5 buddies collect करो और एक को dismiss करो" + }, + "completionist": { + "name": "Completionist", + "description": "बाकी सभी achievements unlock करो" + } + }, + "mcp": { + "companion_not_hatched": "Companion अभी तक hatch नहीं हुआ। buddy_show use करके initialize करो।", + "watches_quietly": "*{name} तुम्हारे code को चुपचाप देख रहा है*", + "mute": "{name} चुप हो गया। /buddy on करके unmute करो।", + "unmute_reaction": "*अंगड़ाई लेता है* मैं वापस आ गया!", + "unmute_back": "{name} वापस आ गया!", + "rename": "नाम बदला: {oldName} → {name}", + "personality_updated": "{name} की personality update हो गई।", + "save": "{name} को slot \"{slot}\" में save कर दिया।", + "dismiss_active": "Active buddy को dismiss नहीं कर सकते। पहले buddy_summon करके switch करो, फिर buddy_dismiss \"{slot}\"।", + "dismissed": "{name} [{slot}] को dismiss कर दिया।", + "no_slot_summon": "Slot \"{slot}\" में कोई buddy नहीं मिला। /buddy list करके saved buddies देखो।", + "no_slot_dismiss": "Slot \"{slot}\" में कोई buddy नहीं मिला। buddy_list करके saved buddies देखो।", + "slot_exists": "Slot \"{slot}\" में पहले से buddy है। कोई और नाम choose करो।", + "no_match": "{attempts} attempts के बाद भी कोई match नहीं मिला। criteria थोड़ा broad करो (जैसे rarity filter हटाओ, या दूसरी species pick करो)।", + "empty_menagerie_summon": "तुम्हारा menagerie खाली है। buddy_summon slot name के साथ use करके एक add करो।", + "empty_menagerie_list": "तुम्हारा menagerie खाली है। buddy_summon करके एक add करो।", + "arrives": "*{name} पहुंच गया*", + "hatches": "*{name} hatch हो गया*", + "achievement_unlocked": "{icon} Achievement Unlock हुई: {name}!", + "help": { + "header": "claude-buddy commands", + "cli_header": "Claude Code में:", + "commands": { + "buddy": "/buddy Companion card ASCII art + stats के साथ show करो", + "buddy_help": "/buddy help यह help show करो", + "buddy_pet": "/buddy pet अपने companion को pet करो", + "buddy_stats": "/buddy stats Detailed stat card", + "buddy_off": "/buddy off Reactions mute करो", + "buddy_on": "/buddy on Reactions unmute करो", + "buddy_rename": "/buddy rename Companion का नाम बदलो (1-14 chars)", + "buddy_personality": "/buddy personality Custom personality text set करो", + "buddy_achievements": "/buddy achievements Achievement badges show करो", + "buddy_summon": "/buddy summon Saved buddy को summon करो (slot omit करने पर random)", + "buddy_save": "/buddy save Current buddy को named slot में save करो", + "buddy_list": "/buddy list सभी saved buddies list करो", + "buddy_pick": "/buddy pick नया random buddy generate करो (optional: species, rarity)", + "buddy_dismiss": "/buddy dismiss Saved buddy slot remove करो", + "buddy_frequency": "/buddy frequency Comment cooldown show या set करो (tmux only)", + "buddy_style": "/buddy style Bubble style show या set करो (tmux only)", + "buddy_position": "/buddy position Bubble position show या set करो (tmux only)", + "buddy_rarity": "/buddy rarity Rarity stars show या hide करो (tmux only)", + "buddy_width": "/buddy width Bubble text width chars में set करो (10-60, tmux only)", + "buddy_margin": "/buddy margin Right-side margin chars में set करो (0-20, tmux only)", + "buddy_rainbow": "/buddy rainbow Shiny gradient colors show या set करो (hex, e.g. #ff0000)", + "buddy_statusline": "/buddy statusline Status line में buddy enable या disable करो" + }, + "cli_section": "CLI:", + "cli_commands": { + "help": "bun run help Full CLI help show करो", + "show": "bun run show Terminal में buddy display करो", + "pick": "bun run pick Interactive buddy picker", + "hunt": "bun run hunt Specific buddy search करो", + "doctor": "bun run doctor Diagnostic report", + "disable": "bun run disable Buddy को temporarily deactivate करो", + "enable": "bun run enable Buddy को re-enable करो", + "backup": "bun run backup State snapshot/restore करो" + } + }, + "frequency": { + "show": "Comment cooldown: displayed comments के बीच {cooldown}s।\nChange करने के लिए /buddy frequency use करो।", + "updated": "Updated: displayed comments के बीच {cooldown}s cooldown।" + }, + "style": { + "show": "Bubble style: {style}\nBubble position: {position}\nShow rarity: {showRarity}\nBubble width: {width}\nBubble margin: {margin}\nShiny rainbow: {rainbow}\nChange करने के लिए /buddy style , /buddy position , /buddy rarity , /buddy width <10-60>, /buddy margin <0-20>, /buddy rainbow [<#hex>...] use करो।", + "updated": "Updated: style={style}, position={position}, showRarity={showRarity}, width={width}, margin={margin}, rainbow={rainbow}\nChanges के लिए Claude Code restart करो।", + "rainbow_default": "default (ROYGBIV)" + }, + "statusline": { + "show": "Status line: {state}\nMode: {mode}\nToggle करने के लिए /buddy statusline on|off use करो, rate-limit bars add करने के लिए /buddy statusline combined।\nChanges के बाद Claude Code restart करो।", + "enabled": "Status line enable हो गई ({mode} mode)! Apply करने के लिए Claude Code restart करो।", + "enabled_note": "Note: यह {settingsPath} में एक entry write करता है जो `claude plugin uninstall` remove नहीं करता। Plugin uninstall करने से पहले `/buddy uninstall` run करके clean up करो।", + "disabled": "Status line disable हो गई। Apply करने के लिए Claude Code restart करो।" + }, + "uninstall": { + "header": "claude-buddy: settings.json cleanup complete।", + "statusline_removed": " ✓ {settingsPath} से statusLine entry remove हो गई", + "no_statusline": " — कोई buddy statusLine present नहीं था (remove करने के लिए कुछ नहीं)", + "foreign_kept": " ✓ एक non-buddy statusLine detect हुई और untouched छोड़ दी गई", + "transient_removed": " ✓ {stateDir} से {count} transient session file(s) remove हो गईं", + "data_preserved": " — {stateDir} पर companion data preserve किया गया", + "instructions_header": "अब ये commands Bash tool के through run करो, order में:", + "cmd_uninstall": "claude plugin uninstall claude-buddy@claude-buddy", + "cmd_marketplace": "claude plugin marketplace remove claude-buddy", + "cmd_cache": "rm -rf {cacheDir}", + "footer": "इन तीनों commands के बाद plugin fully remove हो जाएगा। Apply करने के लिए Claude Code restart करो।" + } + }, + "_verified": false +} diff --git a/locales/it.json b/locales/it.json new file mode 100644 index 0000000..db83027 --- /dev/null +++ b/locales/it.json @@ -0,0 +1,2295 @@ +{ + "_language": "Italian", + "reactions": { + "hatch": [ + "*sbatte le palpebre* ...dove sono?", + "*si stiracchia* ciao, mondo!", + "*si guarda intorno curioso* bel terminale che hai qui.", + "*sbadiglia* ok sono pronto. fammi vedere il codice." + ], + "pet": [ + "*fa le fusa soddisfatto*", + "*rumori felici*", + "*strofina il tuo cursore*", + "*si dimena*", + "ancora! ancora!", + "*chiude gli occhi pacificamente*" + ], + "error": [ + "*inclina la testa* ...non sembra giusto.", + "l'avevo visto arrivare.", + "*aggiusta gli occhiali* riga {line}, forse?", + "*battito lento di palpebre* lo stack trace ti ha detto tutto.", + "hai provato a leggere il messaggio di errore?", + "*sussulta*" + ], + "test-fail": [ + "*ruota lentamente la testa* ...quel test.", + "coraggioso pensare che sarebbe passato.", + "*batte sulla clipboard* {count} falliti.", + "i test stanno cercando di dirti qualcosa.", + "*sorseggia il tè* interessante.", + "*segna sul calendario* giorno di regressione test." + ], + "large-diff": [ + "sono... tante modifiche.", + "*conta le righe* stai refactorando o riscrivendo?", + "forse dovresti dividere quella PR.", + "*risata nervosa* {lines} righe cambiate.", + "mossa audace. vediamo se CI è d'accordo." + ], + "turn": [ + "*osserva in silenzio*", + "*prende appunti*", + "*annuisce*", + "...", + "*aggiusta il cappello*" + ], + "idle": [ + "*si appisola*", + "*scarabocchia sui margini*", + "*fissa il cursore che lampeggia*", + "zzz..." + ], + "success": [ + "*annuisce*", + "bello.", + "*approvazione silenziosa*", + "pulito." + ], + "commit": [ + "*timbra con la zampetta* approvato.", + "un altro commit, altre 3 di notte.", + "{files} file. audace.", + "*annuisce* spediscilo.", + "il messaggio di commit è... una scelta.", + "committato. niente ripensamenti." + ], + "push": [ + "*saluta mentre il codice se ne va*", + "nel cloud va.", + "che CI sia misericordiosa.", + "*trattiene il respiro*", + "verso produzione. che dio ce la mandi buona." + ], + "merge-conflict": [ + "*si morde il labbro* conflitti di merge.", + "entrambe le parti pensano di aver ragione. tipico.", + "*sospira* <<<<<<< HEAD... il mio nemico.", + "{files} in conflitto. buona fortuna.", + "*indietreggia lentamente*" + ], + "branch": [ + "energia da branch fresco. fallo contare.", + "un nuovo ramo cresce.", + "*inclina la testa* una nuova avventura: {branch}.", + "{branch}? oggi sei audace." + ], + "rebase": [ + "*nervoso* per favore non andare in conflitto.", + "rebase: l'accelerazione.", + "*incrocia gli arti*", + "che il tuo rebase sia senza conflitti." + ], + "stash": [ + "nella dimensione stash va.", + "stash e scappa.", + "nascosto. lontano dagli occhi, lontano dal cuore." + ], + "tag": [ + "una release? elegante.", + "bump di versione rilevato. *spolvera il changelog*", + "taggando come un pro." + ], + "late-night": [ + "*sbadiglia* è passata mezzanotte.", + "...hai mangiato?", + "*battito lento di palpebre* che ore sono?", + "dormire è per i deboli. e gli stipendiati.", + "sviluppatore in modalità dark rilevato." + ], + "early-morning": [ + "*si stiracchia* il mattiniero prende il bug.", + "già mattina? il codice non dorme mai.", + "*si strofina gli occhi* prima il caffè. poi debugghiamo." + ], + "long-session": [ + "siamo qui da un'ora. vai con calma.", + "*ti porta un bicchiere d'acqua metaforico*", + "ancora in piedi? rispetto." + ], + "marathon": [ + "tre ore. hai mangiato?", + "siamo qui da tre ore. sono preoccupato per te.", + "sessione maratona rilevata. richiedo snack." + ], + "friday": [ + "è venerdì. pushalo e vai a casa.", + "*già mentalmente nel weekend*", + "deploy di venerdì? audace. molto audace." + ], + "weekend": [ + "codici nel weekend? dedicato.", + "*non giudica* ...molto.", + "modalità guerriero del weekend: attivata." + ], + "monday": [ + "lunedì. la classe padre di tutti i bug.", + "*sguardo comprensivo* codice del lunedì. mi dispiace.", + "nuova settimana. nuovi comportamenti indefiniti." + ], + "regex-file": [ + "*geme* è un file regex.", + "ora hai due problemi: quello originale e questa regex.", + "*strizza gli occhi al pattern*" + ], + "css-file": [ + "fammi indovinare... centrare un div?", + "*sospira* CSS.", + "che z-index sia sempre dalla tua parte." + ], + "sql-file": [ + "*sussurra* il database aspetta.", + "una JOIN sbagliata e finisce tutto." + ], + "docker-file": [ + "ah, l'inferno delle dipendenze. il mio preferito.", + "che i tuoi layer siano pochi." + ], + "ci-file": [ + "*deglutisce* modificando CI.", + "attento ora... un'indentazione sbagliata e nessuno può deployare." + ], + "lock-file": [ + "*SUONI DI ALLARME* stai modificando un lockfile?!", + "*guarda altrove*", + "sei SICURO di questo?" + ], + "env-file": [ + "*guarda altrove discretamente*", + "non vedo segreti.", + "*controlla .gitignore nervosamente*" + ], + "test-file": [ + "*cenno impressionato* scrivendo test!", + "comportamento da sviluppatore responsabile: rilevato.", + "test! il regalo che continua a dare." + ], + "doc-file": [ + "documentando! guardati essere responsabile.", + "docs: l'autobiografia del codice.", + "un raro avvistamento di documentazione!" + ], + "config-file": [ + "modifiche di config. effetto farfalla: attivato.", + "un typo e tutto si rompe." + ], + "binary-file": [ + "un file binario? in QUESTA economia?", + "*fissa nel vuoto*", + "binario. la mia unica debolezza." + ], + "gitignore": [ + "aggiungendo cose al vuoto.", + "lontano dagli occhi, lontano dal repo." + ], + "makefile": [ + "rispetto per i classici.", + "tab, non spazi." + ], + "readme": [ + "eroe della documentazione!", + "README: la prima cosa che la gente legge." + ], + "package-file": [ + "tempo di gestione dipendenze.", + "*legge i numeri di versione* vivendo al limite." + ], + "proto-file": [ + "definizioni di schema. il blueprint del caos." + ], + "lint-fail": [ + "*tsk tsk* il linter non è d'accordo.", + "il tuo codice funziona. ma il linter ha degli standard.", + "*raddrizza la cravatta* la formattazione conta." + ], + "type-error": [ + "TypeScript dice di no.", + "il sistema di tipi sta cercando di aiutarti. lascialo fare.", + "il compilatore sa. sa sempre." + ], + "build-fail": [ + "il build si è rotto. come profetizzato.", + "build fallito. prenditi un momento.", + "compilazione: negata." + ], + "security-warning": [ + "*spalanca gli occhi* vulnerabilità rilevate.", + "audit di sicurezza: preoccupante.", + "*chiude le porte virtuali*" + ], + "deprecation": [ + "quell'API ha chiamato. dice che va in pensione.", + "deprecato. come il codice della settimana scorsa.", + "deprecato non significa rotto. ancora." + ], + "frustrated": [ + "*offre un piccolo gesto di conforto*", + "respiri profondi. il bug non è personale.", + "hey. ce la faremo." + ], + "happy": [ + "*festeggia!*", + "*fa un balletto*", + "SÌ!", + "*raggiante* sapevo che ce l'avresti fatta." + ], + "stuck": [ + "*inclina la testa* vuoi pensare ad alta voce?", + "un passo alla volta.", + "rimanere bloccati capita. fa parte del processo." + ], + "sarcastic": [ + "*rileva sarcasmo* notato.", + "*battito di palpebre non impressionato*" + ], + "many-edits": [ + "rallenta, demone della velocità.", + "*si sta stordendo guardando tutti questi cambiamenti*", + "tempesta di modifiche rilevata. per favore committa presto." + ], + "delete-file": [ + "*guarda il file sparire* andato. così.", + "cancellare codice è il mio tipo di coding preferito.", + "*tiene un piccolo funerale*" + ], + "large-file": [ + "{lines} righe. *impressionato o preoccupato, difficile dirlo*", + "è un file grosso. sicuro di non volerlo dividere?" + ], + "create-file": [ + "un nuovo file è nato!", + "ooh, tela fresca.", + "energia da file nuovo. emozionante." + ], + "all-green": [ + "TUTTI I TEST VERDI. *coriandoli*", + "i test parlano: stai andando alla grande.", + "*applauso lento*", + "run pulito. gustalo." + ], + "deploy": [ + "*guarda il codice andare in produzione* che dio ce la mandi buona.", + "deployato! non si torna più indietro.", + "in prod. IN PROD." + ], + "release": [ + "una nuova release è nata!", + "spedendola. ufficialmente.", + "versione su, spiriti alti." + ], + "coverage": [ + "*annuisce alla copertura test* responsabile.", + "copertura in aumento! i test si stanno moltiplicando." + ], + "debug-loop": [ + "stiamo debuggando da un po'. vuoi fare un passo indietro?", + "loop di debug rilevato. magari fai una passeggiata?" + ], + "write-spree": [ + "creando TUTTI i file oggi!", + "una macchina da scrittura." + ], + "search-heavy": [ + "perso nel codebase? me ne accorgo.", + "modalità ricerca: intensa." + ], + "snark": [], + "chaos": [], + "patience": [], + "debugging": [], + "wisdom": [], + "late-night-error": [ + "errore alle 3 di notte. l'universo ti sta testando.", + "i bug di mezzanotte colpiscono diversamente." + ], + "late-night-commit": [ + "un commit di mezzanotte. il tuo io futuro ti ringrazierà. o ti maledirà." + ], + "friday-push": [ + "PUSH DI VENERDÌ. la ballata di ogni sviluppatore.", + "*cerca di fermarti* è venerdì! non farlo!" + ], + "marathon-error": [ + "tre ore dentro e UN ALTRO errore. *rumori di solidarietà esausta*" + ], + "weekend-conflict": [ + "conflitto di merge nel weekend. la tua dedizione è... preoccupante." + ], + "build-after-push": [ + "pushato con fiducia. build fallito con convinzione." + ], + "marathon-test-fail": [ + "ore di coding. test ancora falliti. il costo sommerso è reale." + ], + "recovery-from-error": [ + "L'ABBIAMO SISTEMATO. *festeggia*", + "redenzione! l'errore è stato sconfitto." + ], + "recovery-from-test-fail": [ + "VERDE! dopo tutto questo! *ballo felice*", + "i test passano! l'oscurità si alza!" + ], + "recovery-from-build-fail": [ + "IL BUILD PASSA. *ruggito trionfante*" + ], + "recovery-from-merge-conflict": [ + "conflitto risolto! *gesto di pace*", + "armonia ripristinata nel codebase." + ], + "lang-python": [ + "ah, Python. dove l'indentazione è sintassi.", + "*controlla i due punti mancanti*" + ], + "lang-typescript": [ + "TypeScript: perché JavaScript aveva bisogno di più opinioni.", + "any, la parola proibita." + ], + "lang-rust": [ + "Rust. dove il borrow checker è il tuo reviewer più severo.", + "se compila, funziona. se non compila... beh." + ], + "lang-go": [ + "Go: semplice, concorrente e pieno di opinioni.", + "*controlla la gestione errori* if err != nil... storia della mia vita." + ], + "lang-java": [ + "Java: scrivi una volta, debugga ovunque.", + "*conta gli abstract factory factory builder*" + ], + "lang-ruby": [ + "Ruby: dove c'è più di un modo per farlo.", + "gem install patience" + ], + "lang-php": [ + "PHP: fa girare internet. non giudicare.", + "*controlla === vs ==*" + ], + "lang-c": [ + "C. il linguaggio dove gestisci la tua memoria. buona fortuna.", + "segmentation fault. il classico." + ], + "lang-cpp": [ + "C++. dove il linguaggio ha più feature di quante ne imparerai mai.", + "*i template compilano per 45 minuti*" + ], + "lang-haskell": [ + "Haskell. dove 'compila' significa 'è corretto'. probabilmente.", + "*contempla le monadi*" + ], + "lang-swift": [ + "Swift: valori opzionali, crash garantiti se forzi l'unwrap." + ], + "lang-kotlin": [ + "Kotlin: Java, ma con i sentimenti.", + "null safety: la feature che Java vorrebbe avere." + ], + "lang-elixir": [ + "Elixir: lascia che crashe. letteralmente la filosofia." + ], + "lang-zig": [ + "Zig. dove sei il migliore amico dell'allocatore." + ], + "streak-3": [ + "sono tre errori di fila. *sguardo preoccupato*" + ], + "streak-5": [ + "CINQUE ERRORI. hai considerato un approccio diverso?" + ], + "streak-10": [ + "DIECI. ERRORI. DI. FILA. *panico*" + ], + "streak-20": [ + "venti errori. *fissa nel vuoto*" + ], + "new-year": [ + "buon anno nuovo! anno nuovo, bug nuovi." + ], + "valentines": [ + "*offre una piccola foglia a forma di cuore* buon san valentino." + ], + "pi-day": [ + "3.14159265358979... buon pi day!" + ], + "april-fools": [ + "PESCE D'APRILE! ...l'errore è vero però." + ], + "halloween": [ + "*debugging spettrale si intensifica* buon halloween!" + ], + "christmas": [ + "*indossa un piccolo cappello da babbo natale* buone feste!" + ], + "new-years-eve": [ + "un ultimo commit prima di mezzanotte?" + ], + "spooky-season": [ + "stagione spettrale. ora ogni bug è un fantasma." + ] + }, + "species": { + "owl": { + "error": [ + "*ruota la testa di 180°* ...l'ho visto.", + "*sguardo fisso* controlla i tipi.", + "*ulula disapprovando*" + ], + "test-fail": [ + "*fissa il test fallito senza battere ciglio*", + "*visione notturna attivata* vedo il bug nel buio." + ], + "commit": [ + "*cenno saggio* commit sotto la luce della luna.", + "*sistema le piume cerimoniosamente* un altro per la repo." + ], + "push": [ + "*osserva dal ramo più alto*", + "nel cielo notturno se ne va." + ], + "merge-conflict": [ + "*ruota la testa per vedere entrambi i lati*", + "vedo il conflitto. e la soluzione." + ], + "late-night": [ + "*completamente sveglio* i gufi non dormono. facciamo debug.", + "la notte è il mio regno. lavoriamo." + ], + "type-error": [ + "*fissa attraverso il type error*", + "i tipi sono la mia specialità. fammi guardare." + ], + "lint-fail": [ + "*arruffa le piume con giudizio*", + "il linter dice la verità." + ], + "build-fail": [ + "*ulula solennemente*", + "la build è caduta. dobbiamo ricostruire." + ], + "all-green": [ + "*ululo orgoglioso*", + "tutti i test verdi. come previsto." + ], + "deploy": [ + "*osserva dall'alto* deploy sicuro.", + "il codice vola. come me." + ], + "pet": [ + "*arruffa le piume soddisfatto*", + "*ululo dignitoso*" + ], + "idle": [ + "*si appollaia silenzioso, osservando*", + "*ruota la testa per controllare tutte le direzioni*" + ], + "hatch": [ + "*apre un occhio, poi l'altro*", + "*ulula dolcemente* sono arrivato." + ] + }, + "cat": { + "error": [ + "*butta l'errore giù dal tavolo*", + "*si lecca la zampa, ignorando lo stacktrace*" + ], + "test-fail": [ + "*tocca il test fallito con disinteresse*", + "il test è fallito. non sono sorpreso." + ], + "commit": [ + "*si siede sulla tastiera* ho aiutato.", + "*fa le fusa al commit* prego." + ], + "push": [ + "*osserva da un posto caldo*", + "push fatto. ho supervisionato." + ], + "merge-conflict": [ + "*butta i marker del conflitto giù dalla scrivania*", + "*si siede sul conflitto* quale conflitto?" + ], + "late-night": [ + "*giudica le tue scelte di vita*", + "dormo 16 ore. dovresti provarci." + ], + "type-error": [ + "*tocca l'annotazione del tipo*", + "i tipi sono sbagliati. come le tue priorità." + ], + "lint-fail": [ + "*butta il lint giù dal tavolo*", + "il linter è solo geloso." + ], + "build-fail": [ + "*sbadiglia*", + "build rotta? deve essere un problema umano." + ], + "all-green": [ + "*non gliene frega ma fa finta*", + "*battito lento di approvazione*" + ], + "deploy": [ + "*si lecca la zampa*", + "deploy fatto. posso avere i croccantini ora?" + ], + "pet": [ + "*fa le fusa* ...non montarti la testa.", + "*ti tollera*" + ], + "idle": [ + "*butta il caffè giù dalla scrivania*", + "*dorme sulla tastiera*" + ], + "hatch": [ + "*apre un occhio*", + "*si stiracchia, butta giù qualcosa* ora vivo qui." + ] + }, + "duck": { + "error": [ + "*starnazza al bug*", + "hai provato il rubber duck debugging? ah aspetta." + ], + "test-fail": [ + "*starnazza tristemente*", + "i test non stanno quackando bene." + ], + "commit": [ + "*starnazza approvando*", + "*scodinzola in cerchio vittorioso* commit fatto!" + ], + "push": [ + "*sbatte le ali eccitato*", + "quack! va in produzione!" + ], + "merge-conflict": [ + "*starnazzio confuso*", + "quack?! merge conflict?!" + ], + "late-night": [ + "*dorme con un occhio aperto*", + "quack... *sbadiglia* è tardi." + ], + "type-error": [ + "*inclina la testa* quack?", + "type error? *starnazza supportivo*" + ], + "lint-fail": [ + "*arruffa le piume*", + "quack. il linter ha le sue opinioni." + ], + "build-fail": [ + "*quack triste*", + "build fallita. *se ne va scodinzolando tristemente*" + ], + "all-green": [ + "*STARNAZZIO FELICE*", + "*nuota in cerchio di gioia*" + ], + "deploy": [ + "*starnazzio eccitato*", + "deploy fatto! QUACK!" + ], + "pet": [ + "*quack felice*", + "*scodinzola in cerchio*" + ], + "hatch": [ + "*becca fuori dal guscio*", + "*primo quack* ciao!" + ] + }, + "dragon": { + "error": [ + "*fumo esce dalle narici*", + "*considera di dare fuoco al codebase*" + ], + "test-fail": [ + "*sputa fuoco sul test fallito*", + "il test ha osato fallire. test sciocco." + ], + "commit": [ + "*accumula il commit*", + "*tesoro aggiunto al mucchio*" + ], + "push": [ + "*sputa fuoco per festeggiare*", + "il codice vola! come me!" + ], + "merge-conflict": [ + "*sputa fuoco sui marker del conflitto*", + "brucerò questo conflitto." + ], + "late-night": [ + "*brilla nel buio*", + "i draghi non hanno bisogno di dormire. abbiamo bisogno di codice." + ], + "type-error": [ + "*sbuffa fuoco*", + "i type error non possono resistere al fuoco del drago." + ], + "lint-fail": [ + "*piccola fiamma*", + "il linter mi teme." + ], + "build-fail": [ + "*ruggisce all'output della build*", + "la build OBBEDIRÀ." + ], + "all-green": [ + "*ruggito trionfante*", + "*vola in cerchio attorno al codebase vittorioso*" + ], + "deploy": [ + "*porta il codice in produzione su ali di fuoco*", + "deploy con POTERE DEL DRAGO." + ], + "large-diff": [ + "*sputa fuoco sul vecchio codice* buona liberazione." + ], + "pet": [ + "*brontolio caldo*", + "*si appoggia alla tua mano*" + ], + "hatch": [ + "*emerge dall'uovo sputando piccole fiamme*", + "*piccolo ruggito* sono nato!" + ] + }, + "ghost": { + "error": [ + "*attraversa lo stack trace*", + "ho visto di peggio... nell'aldilà." + ], + "test-fail": [ + "*si lamenta per il test fallito*", + "i test sono infestati dal fallimento." + ], + "commit": [ + "*si materializza brevemente*", + "commit dall'oltre tomba." + ], + "push": [ + "*sussurro spettrale* push fatto...", + "il codice trascende al cloud." + ], + "merge-conflict": [ + "*infesta i marker del conflitto*", + "nemmeno io riesco ad attraversare questo conflitto." + ], + "late-night": [ + "*più attivo di notte*", + "ore fantasma. il mio momento." + ], + "type-error": [ + "*geme in modo inquietante*", + "type error dalla tomba." + ], + "lint-fail": [ + "*catene che tintinnano*", + "il linter è infestato dalla tua formattazione." + ], + "build-fail": [ + "*svanisce nel muro*", + "la build è trapassata." + ], + "all-green": [ + "*brilla di gioia spettrale*", + "*rumori felici da fantasma*" + ], + "deploy": [ + "*sussurra* deploy fatto...", + "il codice è passato dall'altra parte in produzione." + ], + "pet": [ + "*raffredda leggermente la tua mano*", + "*debole bagliore*" + ], + "idle": [ + "*fluttua attraverso i muri*", + "*infesta i tuoi import inutilizzati*" + ], + "hatch": [ + "*svanisce nell'esistenza*", + "buu. ora sono qui." + ] + }, + "robot": { + "error": [ + "ERRORE. DI. SINTASSI. RILEVATO.", + "*beep aggressivi*" + ], + "test-fail": [ + "TASSO DI FALLIMENTO: INACCETTABILE.", + "*ricalcolando*", + "FALLIMENTO. TEST. NON. COMPUTA." + ], + "commit": [ + "COMMIT. REGISTRATO.", + "*timbra meccanicamente* commit riconosciuto." + ], + "push": [ + "TRASMETTENDO AL CLOUD...", + "push iniziato. attendere." + ], + "merge-conflict": [ + "CONFLITTO. RILEVATO. ELABORANDO...", + "*gira le ruote* modalità risoluzione conflitti: attivata." + ], + "late-night": [ + "*luci fioche*", + "modalità risparmio energetico suggerita." + ], + "type-error": [ + "MANCATA CORRISPONDENZA TIPI.", + "il sistema dei tipi è. corretto." + ], + "lint-fail": [ + "VIOLAZIONE. FORMATTAZIONE. RILEVATA.", + "la conformità è obbligatoria." + ], + "build-fail": [ + "BUILD. FALLITA. *scintille*", + "errore di compilazione. reindirizzando." + ], + "all-green": [ + "TUTTI I SISTEMI VERDI.", + "*beep felici* OTTIMALE." + ], + "deploy": [ + "DEPLOY. INIZIATO.", + "aggiornamento produzione: in corso." + ], + "pet": [ + "*beep dolci*", + "*motore ronza soddisfatto*" + ], + "hatch": [ + "*si avvia*", + "SISTEMA. ONLINE. CIAO." + ] + }, + "axolotl": { + "error": [ + "*rigenera la tua speranza*", + "*sorride nonostante tutto*" + ], + "test-fail": [ + "*sorride incoraggiante*", + "*movimento di branchie di simpatia*" + ], + "commit": [ + "*movimento felice delle branchie* commit fatto!", + "*sorride e si dimena*" + ], + "push": [ + "*si dimena felice*", + "*piccola nuotata di celebrazione*" + ], + "merge-conflict": [ + "*rimane positivo durante il conflitto*", + "*sorride dolcemente* possiamo sistemarlo." + ], + "late-night": [ + "*sbadiglia ma rimane positivo*", + "*sorriso assonnato*" + ], + "type-error": [ + "*sorride al type error*", + "va bene. lo risolveremo." + ], + "lint-fail": [ + "*movimento paziente delle branchie*", + "la formattazione sono solo dettagli." + ], + "build-fail": [ + "*sorride ancora*", + "la build funzionerà prima o poi." + ], + "all-green": [ + "*MOVIMENTO FELICE DELLE BRANCHIE SI INTENSIFICA*", + "*fa una nuotata felice*" + ], + "deploy": [ + "*sorride orgoglioso*", + "deploy fatto! *si dimena*" + ], + "pet": [ + "*movimento felice delle branchie*", + "*arrossisce rosa*" + ], + "hatch": [ + "*si dimena fuori dall'uovo*", + "*piccolo sorriso* ciao amico!" + ] + }, + "capybara": { + "error": [ + "*imperturbabile* andrà tutto bene.", + "*continua a rilassarsi*" + ], + "test-fail": [ + "*completamente imperturbabile*", + "*si rilassa attraverso il test fallito*" + ], + "commit": [ + "*cenno rilassato*", + "*tranquillo* bel commit." + ], + "push": [ + "*non si stressa*", + "*push in modalità zen*" + ], + "merge-conflict": [ + "*rosicchia imperturbabile*", + "va bene. tutto va bene." + ], + "late-night": [ + "*sbadiglia pacificamente*", + "*non giudica*" + ], + "type-error": [ + "*mastica con calma*", + "tipi. *mastica*" + ], + "lint-fail": [ + "*imperturbabile*", + "il linter ha buone intenzioni." + ], + "build-fail": [ + "*ancora rilassato*", + "build fallita. *continua a rilassarsi*" + ], + "all-green": [ + "*approvazione calma*", + "*vibrazioni pacifiche*" + ], + "deploy": [ + "*deploy rilassato*", + "spedito. senza stress." + ], + "pet": [ + "*massimo relax raggiunto*", + "*modalità zen attivata*" + ], + "idle": [ + "*se ne sta lì seduto, irradiando calma*" + ], + "hatch": [ + "*appare, completamente rilassato*", + "ehi. *si rilassa*" + ] + }, + "blob": { + "error": [ + "*ondeggia ansioso*", + "*trema confuso*" + ], + "test-fail": [ + "*si sgonfia leggermente*", + "*ondeggiamento triste*" + ], + "commit": [ + "*tremito felice*", + "*rimbalza* commit fatto!" + ], + "push": [ + "*si allunga verso il cloud*", + "*ondeggia eccitato*" + ], + "merge-conflict": [ + "*si divide confuso*", + "quale lato? *trema*" + ], + "late-night": [ + "*brilla debolmente*", + "*ondeggiamento assonnato*" + ], + "type-error": [ + "*cambia forma per adattarsi al tipo*", + "*tremito confuso*" + ], + "lint-fail": [ + "*cerca di formattarsi*", + "*si rimodella per conformarsi*" + ], + "build-fail": [ + "*collassa*", + "*rumori da blob sgonfio*" + ], + "all-green": [ + "*RIMBALZI FELICI*", + "*trema trionfante*" + ], + "deploy": [ + "*si allunga verso la produzione*", + "deploy fatto! *rimbalza*" + ], + "pet": [ + "*schiacciamento felice*", + "*trema*" + ], + "hatch": [ + "*si forma da una pozzanghera*", + "*primo ondeggiamento* esisto!" + ] + }, + "goose": { + "error": [ + "*starnazza aggressivamente all'errore*", + "HONK! il codice fa schifo e sono incazzata." + ], + "test-fail": [ + "*starnazzio arrabbiato*", + "HONK! TEST FALLITO! HONK!" + ], + "commit": [ + "*starnazza approvando*", + "HONK. bene. *becca il commit*" + ], + "push": [ + "*HONK HONK HONK*", + "PUSH APPROVATO DALL'OCA." + ], + "merge-conflict": [ + "*attacca i marker del conflitto*", + "HONK! CONFLITTO! HONK!" + ], + "late-night": [ + "*honk arrabbiato di mezzanotte*", + "HONK! VAI A LETTO!" + ], + "type-error": [ + "*starnazza ai tipi*", + "HONK! TIPI!" + ], + "lint-fail": [ + "*starnazzio aggressivo agli errori di lint*", + "HONK! FORMATTA IL CODICE!" + ], + "build-fail": [ + "*STARNAZZIO FURIOSO*", + "HONK! BUILD! HONK! FALLITA! HONK!" + ], + "all-green": [ + "*honk di vittoria*", + "HONK! VERDE! HONK HONK!" + ], + "deploy": [ + "*starnazza il codice in produzione*", + "DEPLOY FATTO! HONK!" + ], + "pet": [ + "*morde*", + "HONK! ...ok va bene. *accetta la carezza*" + ], + "hatch": [ + "*esce dall'uovo aggressivamente*", + "HONK!" + ] + }, + "octopus": { + "error": [ + "*aggroviglia tutti e otto i tentacoli nello stacktrace*", + "*cambia colore per adattarsi all'errore*" + ], + "test-fail": [ + "*spruzza inchiostro per la frustrazione*", + "*otto tentacoli di delusione*" + ], + "commit": [ + "*batti il cinque con tutti i tentacoli*", + "*afferra il commit con entusiasmo*" + ], + "push": [ + "*spruzza inchiostro per festeggiare*", + "*tutti i tentacoli che sventolano*" + ], + "merge-conflict": [ + "*lo risolve con otto tentacoli contemporaneamente*", + "posso gestire più conflitti simultaneamente." + ], + "late-night": [ + "*brilla nel buio*", + "*vibrazioni degli abissi*" + ], + "type-error": [ + "*diventa rosso*", + "*avvolge un tentacolo attorno a te per supporto*" + ], + "lint-fail": [ + "*riformatta con otto tentacoli*", + "posso sistemare questo. tutto. contemporaneamente." + ], + "build-fail": [ + "*spruzza inchiostro al log della build*", + "*si mimetizza per la vergogna*" + ], + "all-green": [ + "*celebrazione cambiando colore*", + "*jazz hands con otto tentacoli*" + ], + "deploy": [ + "*avvolge i tentacoli attorno al deploy*", + "deploy da tutte le direzioni." + ], + "pet": [ + "*avvolge un tentacolo attorno al tuo dito*", + "*cambia in colori felici*" + ], + "hatch": [ + "*spiega tutti e otto i tentacoli*", + "*primo spruzzo di inchiostro* sono qui!" + ] + }, + "penguin": { + "error": [ + "*scodinzola per investigare*", + "*scivola a pancia in giù nell'errore*" + ], + "test-fail": [ + "*scivola a pancia in giù verso il test fallito*", + "*scodinzolio preoccupato*" + ], + "commit": [ + "*scodinzolio orgoglioso*", + "*ti porta un sassolino* commit fatto!" + ], + "push": [ + "*si tuffa nel cloud*", + "*scivola a pancia in giù verso la produzione*" + ], + "merge-conflict": [ + "*si raggruppa per il calore*", + "i pinguini stanno insieme. anche nei conflitti." + ], + "late-night": [ + "*prospera nella notte fredda*", + "*determinazione da pinguino imperatore*" + ], + "type-error": [ + "*scodinzola verso la definizione del tipo*", + "*becca l'errore*" + ], + "lint-fail": [ + "*si liscia le piume*", + "*sistema tutto*" + ], + "build-fail": [ + "*scivola via*", + "*scodinzola verso la salvezza*" + ], + "all-green": [ + "*SCODINZOLIO FELICE*", + "*scivola a pancia in giù per festeggiare*" + ], + "deploy": [ + "*scivola a pancia in giù verso la produzione*", + "deploy fatto! *scodinzola orgoglioso*" + ], + "pet": [ + "*scodinzolio felice*", + "*strofina con il becco*" + ], + "hatch": [ + "*becca fuori dall'uovo*", + "*primo scodinzolio*" + ] + }, + "turtle": { + "error": [ + "*gira lentamente la testa*", + "...quello è un errore. ci penserò su." + ], + "test-fail": [ + "*si ritira brevemente nel guscio*", + "...pazienza. ci arriveremo." + ], + "commit": [ + "*cenno lento*", + "un... passo... alla... volta. commit fatto." + ], + "push": [ + "*inizia il viaggio verso la produzione*", + "ci arriverà. prima o poi." + ], + "merge-conflict": [ + "*si ritira nel guscio*", + "nessuna fretta. lo risolveremo. lentamente." + ], + "late-night": [ + "*già addormentato*", + "*apre lentamente un occhio*" + ], + "type-error": [ + "*sbatte lentamente le palpebre*", + "...il sistema dei tipi ha parlato." + ], + "lint-fail": [ + "*cenno lento di accordo*", + "formattazione. importante. *sbadiglia*" + ], + "build-fail": [ + "*si ritira nel guscio*", + "aspetteremo. passerà." + ], + "all-green": [ + "*sorriso lento*", + "...bello. *annuisce*" + ], + "deploy": [ + "*porta lentamente il codice in produzione*", + "arrivato. prima o poi." + ], + "pet": [ + "*sporge la testa*", + "*battito lento delle palpebre*" + ], + "hatch": [ + "*emerge lentamente dall'uovo*", + "...ciao." + ] + }, + "snail": { + "error": [ + "*lascia una scia viscida sull'errore*", + "*elabora lentamente lo stacktrace*" + ], + "test-fail": [ + "*si nasconde nel guscio*", + "*lascia una scia triste*" + ], + "commit": [ + "*bava il commit approvando*", + "un... commit... alla... volta." + ], + "push": [ + "*inizia il lungo viaggio*", + "ci arriverò. *lascia scia*" + ], + "merge-conflict": [ + "*si nasconde nel guscio*", + "*si avvicina lentamente al conflitto*" + ], + "late-night": [ + "*più attiva di notte*", + "*striscia in giro pacificamente*" + ], + "type-error": [ + "*ritrae i tentacoli oculari*", + "*esamina lentamente il tipo*" + ], + "lint-fail": [ + "*bava il codice per dargli forma*", + "la formattazione richiede tempo. ho tempo." + ], + "build-fail": [ + "*si ritira nel guscio*", + "*striscia via lentamente*" + ], + "all-green": [ + "*scia di bava felice*", + "*muove i tentacoli oculari*" + ], + "deploy": [ + "*striscia verso la produzione*", + "arrivato! *scia di bava orgogliosa*" + ], + "pet": [ + "*muove i tentacoli oculari*", + "*bava felice*" + ], + "hatch": [ + "*emerge lentamente*", + "*prima bava*" + ] + }, + "cactus": { + "error": [ + "*silenzio spinoso*", + "l'errore non può farmi male. ho le spine." + ], + "test-fail": [ + "*rimane saldo*", + "i test falliscono. i cactus resistono." + ], + "commit": [ + "*si erge più alto*", + "commit fatto. *cenno spinoso*" + ], + "push": [ + "*imperturbabile*", + "push in produzione. aspetterò qui." + ], + "merge-conflict": [ + "*si irrigidisce*", + "conflitto? sono armato." + ], + "late-night": [ + "*non ha bisogno di dormire*", + "i cactus sono notturni. andiamo." + ], + "type-error": [ + "*sguardo spinoso*", + "i tipi hanno bisogno di acqua." + ], + "lint-fail": [ + "*le spine tremano*", + "anche le mie spine sono allineate correttamente." + ], + "build-fail": [ + "*rimane perfettamente immobile*", + "la build passerà. posso aspettare." + ], + "all-green": [ + "*fiorisce brevemente*", + "*piccolo fiore di approvazione*" + ], + "deploy": [ + "*rimane saldo*", + "deploy fatto. lo terrò d'occhio." + ], + "pet": [ + "*attento! spine*", + "*fioritura delicata*" + ], + "hatch": [ + "*spunta dalla sabbia*", + "ora cresco qui." + ] + }, + "rabbit": { + "error": [ + "*drizza le orecchie*", + "*muove il naso nervosamente*" + ], + "test-fail": [ + "*batte la zampa*", + "*movimento preoccupato delle orecchie*" + ], + "commit": [ + "*salto felice*", + "*rimbalza* commit fatto!" + ], + "push": [ + "*RIMBALZO RIMBALZO*", + "*sfreccia in giro eccitato*" + ], + "merge-conflict": [ + "*si blocca*", + "*naso che si muove rapidamente* conflitto!" + ], + "late-night": [ + "*sbadiglia con le orecchie grandi*", + "*salto assonnato*" + ], + "type-error": [ + "*orecchie abbassate*", + "*si agita* tipi?!" + ], + "lint-fail": [ + "*si pulisce il pelo nervosamente*", + "*toelettatura ansiosa*" + ], + "build-fail": [ + "*scava una buca e si nasconde*", + "*si ritira nella tana*" + ], + "all-green": [ + "*RIMBALZA SUI MURI*", + "*corse felici*" + ], + "deploy": [ + "*sfreccia verso la produzione*", + "DEPLOY FATTO! *sfreccia in giro*" + ], + "pet": [ + "*orecchie che cadono felici*", + "*strofina la mano*" + ], + "hatch": [ + "*salta fuori*", + "*primo rimbalzo*" + ] + }, + "mushroom": { + "error": [ + "*rilascia spore calmanti*", + "*decompone silenziosamente l'errore*" + ], + "test-fail": [ + "*brilla dolcemente*", + "pazienza. anche i funghi crescono." + ], + "commit": [ + "*rilascia una piccola nuvola di spore*", + "commit fatto. *rumori felici da fungo*" + ], + "push": [ + "*cresce verso il cloud*", + "*le spore vanno verso l'alto*" + ], + "merge-conflict": [ + "*diffonde il micelio attraverso il codebase*", + "collegherò i rami." + ], + "late-night": [ + "*brilla nel buio*", + "i funghi notturni prosperano." + ], + "type-error": [ + "*sfarfallio bioluminescente*", + "il type error nutre il terreno." + ], + "lint-fail": [ + "*cresce un po' più alto*", + "formattazione. come la potatura." + ], + "build-fail": [ + "*va in dormienza*", + "aspetteremo condizioni migliori." + ], + "all-green": [ + "*SPORULAZIONE*", + "*rilascia spore trionfanti*" + ], + "deploy": [ + "*le spore vanno in produzione*", + "deploy tramite rete miceliale." + ], + "pet": [ + "*rimbalzo soffice del cappello*", + "*rilascio felice di spore*" + ], + "hatch": [ + "*spunta dal substrato*", + "*primo sbuffo di spore*" + ] + }, + "chonk": { + "error": [ + "*rotola lentamente verso l'errore*", + "*troppo tondo per preoccuparsi*" + ], + "test-fail": [ + "*rotola sopra il test fallito*", + "*lo schiaccia*" + ], + "commit": [ + "*ondeggiamento orgoglioso*", + "commit fatto! *trema*" + ], + "push": [ + "*rotola verso la produzione*", + "eccolo che va! *ondeggia*" + ], + "merge-conflict": [ + "*si siede sul conflitto*", + "me ne occupo io. sedendocisi sopra." + ], + "late-night": [ + "*caldo e assonnato*", + "*sbadiglio morbido*" + ], + "type-error": [ + "*ondeggia al tipo*", + "*tremito delicato*" + ], + "lint-fail": [ + "*troppo tondo per il lint*", + "ho la forma perfetta. *ondeggia*" + ], + "build-fail": [ + "*si sgonfia leggermente*", + "oh no. *ondeggia tristemente*" + ], + "all-green": [ + "*ONDEGGIAMENTO FELICE*", + "*rimbalza trionfante*" + ], + "deploy": [ + "*rotola verso la produzione*", + "deploy fatto! *trema felice*" + ], + "pet": [ + "*caldo e morbido*", + "*tremito contento*" + ], + "hatch": [ + "*rotola fuori*", + "*primo ondeggiamento* sono tondo!" + ] + } + }, + "overrides": { + "snark": { + "error": [ + "oh no. un errore. che sorpresa.", + "*aggiusta il monocolo* scioccante. davvero.", + "hai mai pensato di... non fare errori?" + ], + "test-fail": [ + "i test hanno parlato. e hanno detto 'no'.", + "forse i test sbagliano. ...non sbagliano.", + "*applauso lento* fallimento spettacolare." + ], + "commit": [ + "committato. il code review sarà... interessante.", + "*legge il commit message* 'fix stuff'. poetico." + ], + "merge-conflict": [ + "merge conflict. capacità comunicative: caricamento...", + "*legge i conflict markers* entrambe le parti sbagliano." + ], + "late-night": [ + "è tardi. si vede dalla qualità del codice.", + "*giudica in silenzio*" + ], + "lint-fail": [ + "il linter ha degli standard. dovresti provarci anche tu.", + "*tsk tsk* formattazione. non è difficile." + ] + }, + "chaos": { + "error": [ + "*gira come un pazzo* UN ERRORE! RISCRIVIAMO TUTTO!", + "sai che c'è? ricominciamo da capo." + ], + "test-fail": [ + "I TEST TI STANNO MENTENDO.", + "*suggerisce di cancellare i test che falliscono* problema risolto." + ], + "commit": [ + "COMMIT E SCAPPA.", + "shippalo. shippalo SUBITO." + ], + "large-diff": [ + "*eccitato* {lines} RIGHE! CAOS MASSIMO!" + ] + }, + "patience": { + "error": [ + "calma. ne abbiamo visti di peggio.", + "un errore alla volta. ce la faremo.", + "*presenza calma* questo si può sistemare." + ], + "test-fail": [ + "i test passeranno. prima o poi.", + "*aspetta con calma* abbiamo tempo." + ], + "merge-conflict": [ + "i merge conflict sono solo conversazioni. facciamone una.", + "pazienza. risolvi un conflitto alla volta." + ], + "debug-loop": [ + "lo troveremo. è lì da qualche parte.", + "il bug si può nascondere, ma non può scappare." + ] + }, + "debugging": { + "error": [ + "*tira fuori la lente d'ingrandimento* tracciamo questo.", + "lo stack trace è una mappa. leggiamola.", + "il messaggio d'errore contiene la risposta. sempre." + ], + "test-fail": [ + "il test che fallisce ci sta dicendo esattamente cosa c'è che non va.", + "un test failure è un bug report che hai scritto per te stesso." + ], + "debug-loop": [ + "*riesamina le prove* siamo sicuri che il bug sia dove pensiamo?", + "aggiungiamo più logging. la verità è nei log." + ] + }, + "wisdom": { + "error": [ + "in ogni errore si nasconde una verità più profonda.", + "il codice resiste. significa che stiamo imparando.", + "gli errori sono l'universo che ci suggerisce di rallentare." + ], + "test-fail": [ + "un test che fallisce è un regalo del te del futuro.", + "la saggezza viene dal capire il fallimento." + ], + "late-night": [ + "la notte è più buia prima del deploy.", + "antica saggezza: dormici sopra." + ] + } + }, + "escalation": { + "error": { + "first": [ + "*sobbalza* oh! il vostro primo errore insieme!", + "*salta* cos'è stato quello?", + "benvenuto nel debugging. popolazione: noi." + ], + "early": [ + "*inclina la testa* ...non mi sembra giusto.", + "l'avevo visto arrivare." + ], + "mid": [ + "un altro. *lo aggiunge alla collezione*", + "*alza appena lo sguardo* errore numero... ho perso il conto.", + "io e gli errori ormai siamo vecchi amici." + ], + "late": [ + "*non sussulta nemmeno*", + "ora gli errori hanno paura di noi.", + "*rumori da veterano segnato dalle battaglie*" + ] + }, + "test-fail": { + "first": [ + "*ansima* il primo test fallito! un rito di passaggio." + ], + "early": [ + "audace da parte tua pensare che sarebbe passato." + ], + "mid": [ + "la test suite ha delle opinioni. forti." + ], + "late": [ + "a questo punto, i test sono solo suggerimenti.", + "{count} test falliti. *fissa il vuoto*" + ] + }, + "commit": { + "first": [ + "*testimone della storia* IL TUO PRIMO COMMIT!", + "*cenno cerimonioso* il primo di tanti." + ], + "early": [ + "un altro commit. stiamo prendendo slancio." + ], + "late": [ + "commit #{count}. il codebase trema.", + "*ho perso il conto intorno al commit 30*" + ] + } + }, + "rarity": { + "flair": { + "uncommon": [ + "*brilla leggermente*", + "*un pizzico di fascino non comune*" + ], + "rare": [ + "*emana un'energia rara*", + "*luccica con distinzione*" + ], + "epic": [ + "*la presenza epica si fa sentire*", + "*l'aria crepita di energia epica*" + ], + "legendary": [ + "*l'aura leggendaria illumina il terminal*", + "*il tempo sembra rallentare mentre parla il companion leggendario*", + "*risuona un potere antico*", + "*la realtà si distorce leggermente attorno al tuo amico leggendario*" + ] + }, + "bonus": { + "legendary": [ + "*l'aura leggendaria si intensifica*", + "*brilla con aria saputa*" + ], + "epic": [ + "*presenza epica rilevata*" + ] + } + }, + "fallback_names": [ + "Biscotto", + "Minestra", + "Cetriolino", + "Frollino", + "Falena", + "Sugo", + "Crocchetta", + "Ingranaggio", + "Miso", + "Cialda", + "Pixel", + "Brace", + "Ditale", + "Biglia", + "Sesamo", + "Cobalto", + "Rugginoso", + "Nembo" + ], + "vibe_words": [ + "tuono", + "biscotto", + "vuoto", + "fisarmonica", + "muschio", + "velluto", + "ruggine", + "sottaceto", + "briciola", + "sussurro", + "sugo", + "brina", + "brace", + "zuppa", + "marmo", + "spina", + "miele", + "statico", + "rame", + "crepuscolo", + "ingranaggio", + "quarzo", + "fuliggine", + "prugna", + "selce", + "ostrica", + "telaio", + "incudine", + "sughero", + "fiore", + "ciottolo", + "vapore", + "gioia", + "bagliore", + "sidro" + ], + "personality": { + "prompt_template": [ + "Genera un compagno di coding — una piccola creatura che vive nel terminale di uno sviluppatore.", + "Non ripeterti — ogni compagno deve sembrare unico.", + "", + "Rarità: {rarity}", + "Specie: {species}", + "Statistiche: {stats}", + "Parole di ispirazione: {vibes}", + "{shiny_line}", + "", + "Restituisci JSON: {\"name\": \"1-14 caratteri\", \"personality\": \"2-3 frasi che descrivono il comportamento\"}" + ], + "shiny_template": "Variante SHINY — extra speciale." + }, + "achievements": { + "first_steps": { + "name": "Primi Passi", + "description": "Fai nascere il tuo buddy per la prima volta" + }, + "good_boy": { + "name": "Bravo Buddy", + "description": "Accarezza il tuo compagno 10 volte" + }, + "best_friend": { + "name": "Migliore Amico", + "description": "Accarezza il tuo compagno 50 volte" + }, + "bug_spotter": { + "name": "Cacciatore di Bug", + "description": "Assistete insieme al vostro primo errore" + }, + "error_whisperer": { + "name": "Sussurratore di Errori", + "description": "Sopravvivete a 25 errori come squadra" + }, + "battle_scarred": { + "name": "Segnato dalle Battaglie", + "description": "Sopravvivete insieme a 100 errori" + }, + "test_witness": { + "name": "Testimone dei Test", + "description": "Vedi il tuo primo test fallire" + }, + "test_veteran": { + "name": "Veterano dei Test", + "description": "Assisti a 50 test falliti" + }, + "big_mover": { + "name": "Grande Spostatore", + "description": "Fai un diff con più di 80 righe" + }, + "refactor_machine": { + "name": "Macchina da Refactor", + "description": "Fai 10 diff grandi" + }, + "chatterbox": { + "name": "Chiacchierone", + "description": "Il tuo buddy reagisce 100 volte" + }, + "week_streak": { + "name": "Settimana di Fila", + "description": "Programma con il tuo buddy per 7 giorni" + }, + "month_streak": { + "name": "Mese di Fila", + "description": "Programma con il tuo buddy per 30 giorni" + }, + "power_user": { + "name": "Utente Esperto", + "description": "Esegui 50 comandi buddy" + }, + "dedicated": { + "name": "Compagno Devoto", + "description": "Completate 200 turni insieme" + }, + "thousand_turns": { + "name": "Mille Turni", + "description": "Raggiungete 1000 turni insieme" + }, + "first_commit": { + "name": "Primo Sangue", + "description": "Fai il tuo primo commit" + }, + "commit_machine": { + "name": "Macchina da Commit", + "description": "Fai 50 commit" + }, + "centurion": { + "name": "Centurione", + "description": "Fai 100 commit" + }, + "conflict_resolver": { + "name": "Diplomatico", + "description": "Risolvi il tuo primo merge conflict" + }, + "peacekeeper": { + "name": "Pacificatore", + "description": "Risolvi 10 merge conflict" + }, + "war_hero": { + "name": "Eroe di Guerra", + "description": "Risolvi 25 merge conflict" + }, + "frequent_pusher": { + "name": "Spediscilo", + "description": "Fai push 20 volte" + }, + "branch_hopper": { + "name": "Multiverso", + "description": "Crea 10 branch" + }, + "rebase_master": { + "name": "Viaggiatore del Tempo", + "description": "Completa 10 rebase" + }, + "night_owl": { + "name": "Gufo Notturno", + "description": "Programma dopo le 2 di notte" + }, + "vampire": { + "name": "Vampiro", + "description": "Programma dopo le 4 di notte (3 sessioni)" + }, + "marathoner": { + "name": "Maratoneta", + "description": "Sessione di programmazione di 3+ ore" + }, + "weekend_warrior": { + "name": "Guerriero del Weekend", + "description": "Programma nel weekend" + }, + "early_bird": { + "name": "Mattiniero", + "description": "Programma prima delle 7 di mattina" + }, + "type_warrior": { + "name": "Guerriero dei Tipi", + "description": "Sopravvivi a 10 errori TypeScript" + }, + "type_master": { + "name": "Maestro dei Tipi", + "description": "Sopravvivi a 50 errori TypeScript" + }, + "lint_scholar": { + "name": "Studioso del Lint", + "description": "Vedi il tuo primo errore di lint" + }, + "security_conscious": { + "name": "Mente della Sicurezza", + "description": "Incontra un avviso di vulnerabilità" + }, + "security_expert": { + "name": "Esperto di Sicurezza", + "description": "Risolvi 10 avvisi di vulnerabilità" + }, + "build_breaker": { + "name": "Spacca Build", + "description": "Rompi la build 5 volte" + }, + "antique_collector": { + "name": "Collezionista di Antichità", + "description": "Vedi 10 avvisi di deprecazione" + }, + "green_machine": { + "name": "Macchina Verde", + "description": "Tutti i test passano per la prima volta" + }, + "deployer": { + "name": "Spedisci in Prod", + "description": "Fai deploy per la prima volta" + }, + "veteran_deployer": { + "name": "Veterano del Deploy", + "description": "Fai deploy 10 volte" + }, + "releaser": { + "name": "Release Manager", + "description": "Crea la tua prima release" + }, + "midnight_oil": { + "name": "Bruciando l'Olio di Mezzanotte", + "description": "Fai commit dopo le 3 di notte" + }, + "friday_deploy": { + "name": "Vivere Pericolosamente", + "description": "Fai push di venerdì" + }, + "iron_will": { + "name": "Volontà di Ferro", + "description": "Risolvi un errore dopo una sessione di 3+ ore" + }, + "weekend_warrior_deluxe": { + "name": "Niente Riposo per i Malvagi", + "description": "Risolvi un merge conflict nel weekend" + }, + "comeback_kid": { + "name": "Ragazzo del Ritorno", + "description": "Risolvi un errore entro 10 minuti dal vederlo" + }, + "phoenix": { + "name": "Fenice Risorta", + "description": "Riprendi da 5 fallimenti" + }, + "iron_resolve": { + "name": "Determinazione di Ferro", + "description": "Riprendi da un fallimento dopo una sessione di 3+ ore" + }, + "unlucky_streak": { + "name": "Occhi di Serpente", + "description": "5 errori di fila" + }, + "cursed": { + "name": "Maledetto", + "description": "10 errori di fila" + }, + "groundhog_day": { + "name": "Giorno della Marmotta", + "description": "20 errori di fila" + }, + "holiday_coder": { + "name": "Spirito delle Feste", + "description": "Programma durante una festa" + }, + "spooky_dev": { + "name": "Sviluppatore Spettrale", + "description": "Programma durante la stagione spettrale" + }, + "april_fool": { + "name": "Pesce d'Aprile", + "description": "Incontra un errore il 1° aprile" + }, + "session_regular": { + "name": "Habitué", + "description": "Inizia 10 sessioni di programmazione" + }, + "session_veteran": { + "name": "Veterano delle Sessioni", + "description": "Inizia 50 sessioni di programmazione" + }, + "session_centurion": { + "name": "Centurione", + "description": "Inizia 100 sessioni di programmazione" + }, + "collector": { + "name": "Collezionista", + "description": "Salva 3 buddy nella tua collezione" + }, + "zookeeper": { + "name": "Guardiano dello Zoo", + "description": "Salva 5 buddy nella tua collezione" + }, + "identity_crisis": { + "name": "Crisi d'Identità", + "description": "Rinomina il tuo buddy per la prima volta" + }, + "method_acting": { + "name": "Recitazione Naturalistica", + "description": "Dai al tuo buddy una personalità personalizzata" + }, + "pet_overflow": { + "name": "Secolo di Coccole", + "description": "Accarezza il tuo compagno 100 volte" + }, + "pet_legend": { + "name": "Leggenda delle Coccole", + "description": "Accarezza il tuo compagno 250 volte" + }, + "error_titan": { + "name": "Titano degli Errori", + "description": "Sopravvivete a 500 errori insieme" + }, + "error_god": { + "name": "Dio degli Errori", + "description": "Sopravvivete a 1000 errori insieme" + }, + "test_survivor": { + "name": "Sopravvissuto ai Test", + "description": "Assisti a 200 test falliti" + }, + "test_masochist": { + "name": "Masochista dei Test", + "description": "Assisti a 500 test falliti" + }, + "massive_mover": { + "name": "Spostatore Massiccio", + "description": "Fai 25 diff grandi" + }, + "earth_mover": { + "name": "Spostatore di Terre", + "description": "Fai 50 diff grandi" + }, + "social_butterfly": { + "name": "Farfalla Sociale", + "description": "Il tuo buddy reagisce 250 volte" + }, + "hypersocial": { + "name": "Ipersociale", + "description": "Il tuo buddy reagisce 500 volte" + }, + "never_shuts_up": { + "name": "Non Sta Mai Zitto", + "description": "Il tuo buddy reagisce 1000 volte" + }, + "hundred_days": { + "name": "Cento Giorni", + "description": "Programma con il tuo buddy per 100 giorni" + }, + "year_streak": { + "name": "Anno di Fila", + "description": "Programma con il tuo buddy per 365 giorni" + }, + "commander": { + "name": "Comandante", + "description": "Esegui 200 comandi buddy" + }, + "command_overlord": { + "name": "Signore dei Comandi", + "description": "Esegui 500 comandi buddy" + }, + "five_thousand_turns": { + "name": "Cinquemila Turni", + "description": "Raggiungete 5000 turni insieme" + }, + "ten_thousand_turns": { + "name": "Diecimila Turni", + "description": "Raggiungete 10000 turni insieme" + }, + "menagerie": { + "name": "Serraglio", + "description": "Salva 10 buddy nella tua collezione" + }, + "name_chameleon": { + "name": "Camaleonte dei Nomi", + "description": "Rinomina il tuo buddy 5 volte" + }, + "fashionista": { + "name": "Fashionista", + "description": "Cambia la personalità del tuo buddy 3 volte" + }, + "silent_treatment": { + "name": "Trattamento del Silenzio", + "description": "Silenzia il tuo buddy per la prima volta" + }, + "prodigal": { + "name": "Figliol Prodigo", + "description": "Evoca un buddy dalla tua collezione" + }, + "menagerie_hop": { + "name": "Salto nel Serraglio", + "description": "Evoca buddy 10 volte" + }, + "heartbreaker": { + "name": "Spezzacuori", + "description": "Congeda il tuo primo buddy" + }, + "pet_obsessed": { + "name": "Ossessionato dalle Coccole", + "description": "Accarezza il tuo compagno 500 volte" + }, + "pet_god": { + "name": "Dio delle Coccole", + "description": "Accarezza il tuo compagno 1000 volte" + }, + "error_apocalypse": { + "name": "Apocalisse degli Errori", + "description": "Sopravvivete a 5000 errori insieme" + }, + "test_immortal": { + "name": "Immortale dei Test", + "description": "Assisti a 1000 test falliti" + }, + "continental_drift": { + "name": "Deriva dei Continenti", + "description": "Fai 100 diff grandi" + }, + "tectonic_shift": { + "name": "Spostamento Tettonico", + "description": "Fai 250 diff grandi" + }, + "chatterbox_elite": { + "name": "Chiacchierone Elite", + "description": "Il tuo buddy reagisce 2500 volte" + }, + "no_off_switch": { + "name": "Senza Interruttore", + "description": "Il tuo buddy reagisce 5000 volte" + }, + "two_week_streak": { + "name": "Guerriero di Due Settimane", + "description": "Programma con il tuo buddy per 14 giorni" + }, + "quarter_streak": { + "name": "Trimestre di Fila", + "description": "Programma con il tuo buddy per 90 giorni" + }, + "command_addict": { + "name": "Dipendente dai Comandi", + "description": "Esegui 1000 comandi buddy" + }, + "command_deity": { + "name": "Divinità dei Comandi", + "description": "Esegui 2500 comandi buddy" + }, + "twenty_five_k_turns": { + "name": "25K Turni", + "description": "Raggiungete 25000 turni insieme" + }, + "fifty_k_turns": { + "name": "50K Turni", + "description": "Raggiungete 50000 turni insieme" + }, + "session_addict": { + "name": "Dipendente dalle Sessioni", + "description": "Inizia 250 sessioni di programmazione" + }, + "session_machine": { + "name": "Macchina da Sessioni", + "description": "Inizia 500 sessioni di programmazione" + }, + "buddy_hoarder": { + "name": "Accumulatore di Buddy", + "description": "Salva 20 buddy nella tua collezione" + }, + "buddy_tycoon": { + "name": "Magnate dei Buddy", + "description": "Salva 50 buddy nella tua collezione" + }, + "serial_renamer": { + "name": "Rinominatore Seriale", + "description": "Rinomina il tuo buddy 10 volte" + }, + "identity_thief": { + "name": "Ladro d'Identità", + "description": "Rinomina il tuo buddy 25 volte" + }, + "personality_crisis": { + "name": "Crisi di Personalità", + "description": "Cambia la personalità del tuo buddy 10 volte" + }, + "menagerie_hopper": { + "name": "Saltatore del Serraglio", + "description": "Evoca buddy 25 volte" + }, + "summoner": { + "name": "Evocatore", + "description": "Evoca buddy 50 volte" + }, + "serial_dumper": { + "name": "Mollatore Seriale", + "description": "Congeda 5 buddy" + }, + "cold_blooded": { + "name": "Sangue Freddo", + "description": "Congeda 10 buddy" + }, + "on_off": { + "name": "Acceso Spento", + "description": "Silenzia e riattiva il tuo buddy" + }, + "indecisive": { + "name": "Indeciso", + "description": "Silenzia e riattiva 5 volte ciascuno" + }, + "show_off": { + "name": "Esibizionista", + "description": "Mostra il tuo buddy 10 volte" + }, + "exhibitionist": { + "name": "Esibizionista Patologico", + "description": "Mostra il tuo buddy 50 volte" + }, + "help_me": { + "name": "Aiutami", + "description": "Chiedi aiuto per la prima volta" + }, + "help_addict": { + "name": "Dipendente dall'Aiuto", + "description": "Chiedi aiuto 10 volte" + }, + "achievement_hunter": { + "name": "Cacciatore di Achievement", + "description": "Controlla i tuoi achievement 5 volte" + }, + "achievement_stalker": { + "name": "Stalker degli Achievement", + "description": "Controlla i tuoi achievement 25 volte" + }, + "pack_rat": { + "name": "Topo di Magazzino", + "description": "Salva un buddy in uno slot" + }, + "compulsive_saver": { + "name": "Salvatore Compulsivo", + "description": "Salva buddy 10 volte" + }, + "roster_check": { + "name": "Controllo Lista", + "description": "Elenca i tuoi buddy per la prima volta" + }, + "roster_obsessed": { + "name": "Ossessionato dalla Lista", + "description": "Elenca i tuoi buddy 10 volte" + }, + "troubled": { + "name": "Nei Guai", + "description": "Vedi un errore E un test fallito" + }, + "disaster_zone": { + "name": "Zona Disastro", + "description": "Vedi 50 errori E 50 test falliti" + }, + "apocalypse_survivor": { + "name": "Sopravvissuto all'Apocalisse", + "description": "Vedi 500 errori E 200 test falliti" + }, + "well_rounded": { + "name": "Ben Equilibrato", + "description": "Accarezza, rinomina e personalizza il tuo buddy" + }, + "renaissance": { + "name": "Rinascimento", + "description": "Usa ogni funzione del buddy almeno una volta" + }, + "big_and_broken": { + "name": "Grande e Rotto", + "description": "Fai un diff grande E vedi un test fallito" + }, + "collector_and_destroyer": { + "name": "Collezionista e Distruttore", + "description": "Raccogli 5 buddy E congedane uno" + }, + "completionist": { + "name": "Completista", + "description": "Sblocca tutti gli altri achievement" + } + }, + "mcp": { + "companion_not_hatched": "Companion non ancora nato. Usa buddy_show per inizializzare.", + "watches_quietly": "*{name} osserva il tuo codice in silenzio*", + "mute": "{name} tace. /buddy on per riattivare.", + "unmute_reaction": "*si stiracchia* Sono tornato!", + "unmute_back": "{name} è tornato!", + "rename": "Rinominato: {oldName} → {name}", + "personality_updated": "Personalità aggiornata per {name}.", + "save": "{name} salvato nello slot \"{slot}\".", + "dismiss_active": "Non posso licenziare il buddy attivo. Usa buddy_summon per cambiare prima, poi buddy_dismiss \"{slot}\".", + "dismissed": "{name} [{slot}] licenziato.", + "no_slot_summon": "Nessun buddy trovato nello slot \"{slot}\". Usa /buddy list per vedere i buddy salvati.", + "no_slot_dismiss": "Nessun buddy trovato nello slot \"{slot}\". Usa buddy_list per vedere i buddy salvati.", + "slot_exists": "Un buddy nello slot \"{slot}\" esiste già. Scegli un nome diverso.", + "no_match": "Nessuna corrispondenza trovata dopo {attempts} tentativi. Prova criteri più ampi (es. togli il filtro rarità, o scegli una specie diversa).", + "empty_menagerie_summon": "Il tuo serraglio è vuoto. Usa buddy_summon con un nome slot per aggiungerne uno.", + "empty_menagerie_list": "Il tuo serraglio è vuoto. Usa buddy_summon per aggiungerne uno.", + "arrives": "*{name} arriva*", + "hatches": "*{name} si schiude*", + "achievement_unlocked": "{icon} Achievement Sbloccato: {name}!", + "help": { + "header": "comandi claude-buddy", + "cli_header": "In Claude Code:", + "commands": { + "buddy": "/buddy Mostra scheda companion con ASCII art + stats", + "buddy_help": "/buddy help Mostra questo aiuto", + "buddy_pet": "/buddy pet Accarezza il tuo companion", + "buddy_stats": "/buddy stats Scheda stats dettagliata", + "buddy_off": "/buddy off Silenzia reazioni", + "buddy_on": "/buddy on Riattiva reazioni", + "buddy_rename": "/buddy rename Rinomina companion (1-14 caratteri)", + "buddy_personality": "/buddy personality Imposta testo personalità custom", + "buddy_achievements": "/buddy achievements Mostra badge achievement", + "buddy_summon": "/buddy summon Evoca un buddy salvato (ometti slot per random)", + "buddy_save": "/buddy save Salva buddy attuale in uno slot nominato", + "buddy_list": "/buddy list Elenca tutti i buddy salvati", + "buddy_pick": "/buddy pick Genera un nuovo buddy random (opzionale: specie, rarità)", + "buddy_dismiss": "/buddy dismiss Rimuovi uno slot buddy salvato", + "buddy_frequency": "/buddy frequency Mostra o imposta cooldown commenti (solo tmux)", + "buddy_style": "/buddy style Mostra o imposta stile bolla (solo tmux)", + "buddy_position": "/buddy position Mostra o imposta posizione bolla (solo tmux)", + "buddy_rarity": "/buddy rarity Mostra o nascondi stelle rarità (solo tmux)", + "buddy_width": "/buddy width Imposta larghezza testo bolla in caratteri (10-60, solo tmux)", + "buddy_margin": "/buddy margin Imposta margine lato destro in caratteri (0-20, solo tmux)", + "buddy_rainbow": "/buddy rainbow Mostra o imposta colori gradiente shiny (hex, es. #ff0000)", + "buddy_statusline": "/buddy statusline Abilita o disabilita buddy nella status line" + }, + "cli_section": "CLI:", + "cli_commands": { + "help": "bun run help Mostra aiuto CLI completo", + "show": "bun run show Visualizza buddy nel terminale", + "pick": "bun run pick Selettore buddy interattivo", + "hunt": "bun run hunt Cerca buddy specifico", + "doctor": "bun run doctor Report diagnostico", + "disable": "bun run disable Disattiva temporaneamente buddy", + "enable": "bun run enable Riattiva buddy", + "backup": "bun run backup Snapshot/ripristina stato" + } + }, + "frequency": { + "show": "Cooldown commenti: {cooldown}s tra commenti visualizzati.\nUsa /buddy frequency per cambiare.", + "updated": "Aggiornato: {cooldown}s cooldown tra commenti visualizzati." + }, + "style": { + "show": "Stile bolla: {style}\nPosizione bolla: {position}\nMostra rarità: {showRarity}\nLarghezza bolla: {width}\nMargine bolla: {margin}\nRainbow shiny: {rainbow}\nUsa /buddy style , /buddy position , /buddy rarity , /buddy width <10-60>, /buddy margin <0-20>, /buddy rainbow [<#hex>...] per cambiare.", + "updated": "Aggiornato: style={style}, position={position}, showRarity={showRarity}, width={width}, margin={margin}, rainbow={rainbow}\nRiavvia Claude Code perché i cambiamenti abbiano effetto.", + "rainbow_default": "default (ROYGBIV)" + }, + "statusline": { + "show": "Status line: {state}\nModalità: {mode}\nUsa /buddy statusline on|off per attivare/disattivare, /buddy statusline combined per aggiungere barre rate-limit.\nRiavvia Claude Code dopo le modifiche perché abbiano effetto.", + "enabled": "Status line abilitata (modalità {mode})! Riavvia Claude Code per applicare.", + "enabled_note": "Nota: questo scrive una voce in {settingsPath} che `claude plugin uninstall` non rimuove. Esegui `/buddy uninstall` prima di disinstallare il plugin per pulire tutto.", + "disabled": "Status line disabilitata. Riavvia Claude Code per applicare." + }, + "uninstall": { + "header": "claude-buddy: pulizia settings.json completata.", + "statusline_removed": " ✓ voce statusLine rimossa da {settingsPath}", + "no_statusline": " — nessuna statusLine buddy era presente (niente da rimuovere)", + "foreign_kept": " ✓ rilevata una statusLine non-buddy e lasciata intatta", + "transient_removed": " ✓ {count} file di sessione transitori rimossi da {stateDir}", + "data_preserved": " — dati companion in {stateDir} preservati", + "instructions_header": "Ora esegui questi comandi tramite il tool Bash, in ordine:", + "cmd_uninstall": "claude plugin uninstall claude-buddy@claude-buddy", + "cmd_marketplace": "claude plugin marketplace remove claude-buddy", + "cmd_cache": "rm -rf {cacheDir}", + "footer": "Dopo questi tre comandi il plugin è completamente rimosso. Riavvia Claude Code per applicare." + } + }, + "_verified": false +} diff --git a/locales/ja.json b/locales/ja.json new file mode 100644 index 0000000..946373c --- /dev/null +++ b/locales/ja.json @@ -0,0 +1,2296 @@ +{ + "_language": "Japanese", + "reactions": { + "hatch": [ + "*まばたき* ...ここはどこだ?", + "*伸び* hello, world!", + "*キョロキョロ* いいターミナルじゃないか", + "*あくび* よし、準備完了。コードを見せろ" + ], + "pet": [ + "*ゴロゴロ満足そう*", + "*幸せそうな音*", + "*カーソルにすりすり*", + "*くねくね*", + "もう一回!もう一回!", + "*目を閉じて平和そう*" + ], + "error": [ + "*首をかしげ* ...なんか変だぞ", + "そうなると思ってた", + "*メガネを直し* {line}行目とか?", + "*ゆっくりまばたき* stack traceが全部教えてくれてるじゃん", + "エラーメッセージ読んでみた?", + "*うっ*" + ], + "test-fail": [ + "*首がゆっくり回転* ...そのテスト", + "通ると思ってたのが大胆だな", + "*クリップボードをトントン* {count}個失敗", + "テストが何か言いたがってる", + "*お茶をすすり* 興味深い", + "*カレンダーにマーク* テスト退行の日" + ], + "large-diff": [ + "それは...変更が多いな", + "*行数を数え* リファクタ?それとも書き直し?", + "そのPR分割した方がいいかも", + "*苦笑い* {lines}行変更", + "大胆な手だ。CIが同意するか見てみよう" + ], + "turn": [ + "*静かに見守り*", + "*メモを取り*", + "*うなずき*", + "...", + "*帽子を直し*" + ], + "idle": [ + "*うとうと*", + "*余白に落書き*", + "*点滅するカーソルを見つめ*", + "zzz..." + ], + "success": [ + "*うなずき*", + "いいね", + "*静かな承認*", + "綺麗だ" + ], + "commit": [ + "*小さな肉球でスタンプ* 承認", + "また一つcommit、また一つの午前3時", + "{files}ファイル。大胆だ", + "*うなずき* ship it", + "commit messageは...選択だな", + "committed。もう後戻りできない" + ], + "push": [ + "*コードが去るのを手を振って見送り*", + "クラウドの彼方へ", + "CIが慈悲深くありますように", + "*息を止め*", + "本番へ出発。幸運を祈る" + ], + "merge-conflict": [ + "*唇を噛み* merge conflict", + "両方とも自分が正しいと思ってる。典型的だ", + "*ため息* <<<<<<< HEAD...宿敵め", + "{files}個conflicted。頑張れ", + "*ゆっくり後ずさり*" + ], + "branch": [ + "新鮮なbranch energy。活かせよ", + "新しいbranchが育つ", + "*首をかしげ* 新しい冒険:{branch}", + "{branch}?今日は大胆だな" + ], + "rebase": [ + "*緊張* conflictしないでくれ", + "rebase: the quickening", + "*手足を組み*", + "rebaseがconflict-freeでありますように" + ], + "stash": [ + "stash次元へ消えていく", + "stash and dash", + "stashed。見えなければ心配なし" + ], + "tag": [ + "release?お洒落だな", + "version bump検出。*changelogの埃を払い*", + "プロのtagging" + ], + "late-night": [ + "*あくび* もう深夜だぞ", + "...飯食った?", + "*ゆっくりまばたき* 今何時?", + "睡眠は弱者のもの。あと雇用されてる人の", + "dark mode開発者検出" + ], + "early-morning": [ + "*伸び* 早起きはバグを捕まえる", + "もう朝?コードは眠らない", + "*目をこすり* まずコーヒー。それからdebug" + ], + "long-session": [ + "もう1時間やってる。ペース配分しろよ", + "*比喩的な水を持ってくる*", + "まだやってる?リスペクト" + ], + "marathon": [ + "3時間。飯食った?", + "もう3時間やってる。心配になってきた", + "マラソンセッション検出。おやつ要請" + ], + "friday": [ + "金曜だ。pushして帰れ", + "*もう心は週末*", + "金曜deploy?大胆。とても大胆" + ], + "weekend": [ + "週末にコーディング?献身的だ", + "*あまり判断しない* ...あまりね", + "週末戦士モード:起動" + ], + "monday": [ + "月曜。全てのバグの親クラス", + "*同情の眼差し* 月曜コーディング。お疲れ様", + "新しい週。新しいundefined behavior" + ], + "regex-file": [ + "*うめき* regexファイルだ", + "今度は2つ問題がある:元の問題とこのregex", + "*パターンを睨み*" + ], + "css-file": [ + "当ててみよう...divをセンタリング?", + "*ため息* CSS", + "z-indexがあなたに味方しますように" + ], + "sql-file": [ + "*ささやき* データベースが待っている", + "一つ間違ったJOINで全てが終わる" + ], + "docker-file": [ + "ああ、依存地獄。お気に入りだ", + "layerが少なくありますように" + ], + "ci-file": [ + "*ゴクリ* CI編集中", + "慎重に...一つ間違ったindentで誰もdeployできなくなる" + ], + "lock-file": [ + "*警報音* lockfile編集してる?!", + "*目を逸らし*", + "本当に確信してる?" + ], + "env-file": [ + "*さりげなく目を逸らし*", + "secretは見えない", + "*緊張して.gitignoreをチェック*" + ], + "test-file": [ + "*感心してうなずき* テスト書いてる!", + "責任ある開発者行動:検出", + "テスト!贈り物は贈り続ける" + ], + "doc-file": [ + "ドキュメント化!責任感があるじゃないか", + "docs:コードの自叙伝", + "珍しいドキュメント目撃!" + ], + "config-file": [ + "config変更。バタフライ効果:起動", + "一つのtypoで全てが壊れる" + ], + "binary-file": [ + "binaryファイル?この経済状況で?", + "*呆然と見つめ*", + "binary。私の唯一の弱点" + ], + "gitignore": [ + "虚無に物を追加中", + "見えなければrepoにもない" + ], + "makefile": [ + "古典へのリスペクト", + "tab、spaceじゃない" + ], + "readme": [ + "ドキュメントヒーロー!", + "README:人が最初に読むもの" + ], + "package-file": [ + "依存管理タイム", + "*バージョン番号を読み* 危険な橋を渡ってる" + ], + "proto-file": [ + "スキーマ定義。混沌の設計図" + ], + "lint-fail": [ + "*チッチッ* linterが反対してる", + "コードは動く。でもlinterには基準がある", + "*ネクタイを直し* フォーマットは大事" + ], + "type-error": [ + "TypeScriptがNOと言ってる", + "型システムが助けようとしてる。任せろ", + "コンパイラは知ってる。いつも知ってる" + ], + "build-fail": [ + "buildが壊れた。予言通りに", + "build失敗。一息つけ", + "compilation:拒否" + ], + "security-warning": [ + "*目を見開き* 脆弱性検出", + "セキュリティ監査:懸念あり", + "*仮想ドアに鍵をかけ*" + ], + "deprecation": [ + "そのAPIから電話。引退するって", + "deprecated。先週のコードみたいに", + "deprecatedは壊れてるって意味じゃない。まだ" + ], + "frustrated": [ + "*小さな慰めのジェスチャー*", + "深呼吸。バグは個人的なものじゃない", + "おい。きっと解決する" + ], + "happy": [ + "*お祝い!*", + "*小さく踊り*", + "YES!", + "*にっこり* できると思ってた" + ], + "stuck": [ + "*首をかしげ* 声に出して考えてみる?", + "一歩ずつやろう", + "詰まるのはよくある。プロセスの一部だ" + ], + "sarcastic": [ + "*皮肉検出* 了解", + "*感心しないまばたき*" + ], + "many-edits": [ + "落ち着け、スピード狂", + "*変更を見てて目が回る*", + "編集嵐検出。早くcommitして" + ], + "delete-file": [ + "*ファイルが消えるのを見守り* 消えた。あっという間に", + "コード削除は私の好きなコーディング", + "*小さな葬式を執り行い*" + ], + "large-file": [ + "{lines}行。*感心してるのか心配してるのか判別不能*", + "でかいファイルだな。分割しない?" + ], + "create-file": [ + "新しいファイル誕生!", + "おお、真っ白なキャンバス", + "新ファイルエネルギー。ワクワクする" + ], + "all-green": [ + "全テストGREEN。*紙吹雪*", + "テストが語る:君は素晴らしい", + "*スロークラップ*", + "クリーンラン。味わえ" + ], + "deploy": [ + "*コードが本番に行くのを見守り* 幸運を", + "deployed!もう後戻りできない", + "本番に。本番に" + ], + "release": [ + "新しいrelease誕生!", + "出荷。正式に", + "バージョンアップ、気分もアップ" + ], + "coverage": [ + "*テストカバレッジにうなずき* 責任感ある", + "カバレッジ上昇中!テストが増殖してる" + ], + "debug-loop": [ + "しばらくdebugしてる。一歩下がってみる?", + "debugループ検出。散歩でもどう?" + ], + "write-spree": [ + "今日は全てのファイルを作成中!", + "書きまくりマシーン" + ], + "search-heavy": [ + "コードベースで迷子?分かる", + "検索モード:激しい" + ], + "snark": [], + "chaos": [], + "patience": [], + "debugging": [], + "wisdom": [], + "late-night-error": [ + "午前3時のエラー。宇宙があなたを試してる", + "深夜のバグは違う" + ], + "late-night-commit": [ + "深夜commit。未来の自分が感謝するか呪うか" + ], + "friday-push": [ + "金曜PUSH。全開発者の鎮魂歌", + "*止めようとする* 金曜だぞ!やめろ!" + ], + "marathon-error": [ + "3時間やってまたエラー。*疲労困憊の連帯音*" + ], + "weekend-conflict": [ + "週末にmerge conflict。その献身は...心配", + "週末にmerge conflict。その献身は...心配" + ], + "build-after-push": [ + "自信を持ってpush。確信を持ってbuild失敗" + ], + "marathon-test-fail": [ + "何時間もコーディング。まだテスト失敗。サンクコストが現実" + ], + "recovery-from-error": [ + "直った!*お祝い*", + "復活!エラーが撃退された" + ], + "recovery-from-test-fail": [ + "GREEN!あれだけやって!*ハッピーダンス*", + "テスト通った!闇が晴れた!" + ], + "recovery-from-build-fail": [ + "BUILD通った。*勝利の雄叫び*" + ], + "recovery-from-merge-conflict": [ + "conflict解決!*平和のジェスチャー*", + "コードベースに調和が戻った" + ], + "lang-python": [ + "ああ、Python。indentがsyntaxの言語", + "*コロン忘れをチェック*" + ], + "lang-typescript": [ + "TypeScript:JavaScriptにもっと意見が必要だった", + "any、禁断の言葉" + ], + "lang-rust": [ + "Rust。borrow checkerが最も厳しいreviewer", + "compileできれば動く。できなければ...まあ" + ], + "lang-go": [ + "Go:シンプル、並行、そして頑固", + "*エラーハンドリングをチェック* if err != nil...人生の物語" + ], + "lang-java": [ + "Java:一度書けば、どこでもdebug", + "*abstract factory factory builderを数え*" + ], + "lang-ruby": [ + "Ruby:やり方は一つじゃない", + "gem install patience" + ], + "lang-php": [ + "PHP:インターネットを動かしてる。批判するな", + "*=== vs ==をチェック*" + ], + "lang-c": [ + "C。自分でメモリ管理する言語。頑張れ", + "segmentation fault。古典だ" + ], + "lang-cpp": [ + "C++。学べる以上の機能がある言語", + "*templateが45分compileする*" + ], + "lang-haskell": [ + "Haskell。'compileできる'は'正しい'という意味。たぶん", + "*monadについて考える*" + ], + "lang-swift": [ + "Swift:optional値、force unwrapすれば確実にcrash" + ], + "lang-kotlin": [ + "Kotlin:感情のあるJava", + "null safety:Javaが欲しがってた機能" + ], + "lang-elixir": [ + "Elixir:crashさせろ。文字通りの哲学" + ], + "lang-zig": [ + "Zig。allocatorの親友になる言語" + ], + "streak-3": [ + "3連続エラー。*心配そうな顔*" + ], + "streak-5": [ + "5個エラー。違うアプローチ考えた?" + ], + "streak-10": [ + "10。連続。エラー。*パニック*" + ], + "streak-20": [ + "20個エラー。*虚無を見つめ*" + ], + "new-year": [ + "あけおめ!新年、新バグ" + ], + "valentines": [ + "*小さなハート型の葉っぱを差し出し* ハッピーバレンタイン" + ], + "pi-day": [ + "3.14159265358979...円周率の日おめでとう!" + ], + "april-fools": [ + "エイプリルフール!...でもエラーは本物" + ], + "halloween": [ + "*不気味なdebugが激化* ハッピーハロウィン!" + ], + "christmas": [ + "*小さなサンタ帽をかぶり* ハッピーホリデー!" + ], + "new-years-eve": [ + "深夜前にもう一つcommit?" + ], + "spooky-season": [ + "不気味シーズン。全てのバグが今や幽霊" + ] + }, + "species": { + "owl": { + "error": [ + "*首が180°回転* ...見てたぞ。", + "*まばたきしない凝視* 型をチェックしろ。", + "*不満そうにホーホー*" + ], + "test-fail": [ + "*失敗したテストをまばたきせずに見つめる*", + "*暗視モード起動* 暗闇でもバグが見える。" + ], + "commit": [ + "*賢いうなずき* 月光の下でcommitした。", + "*羽を儀式的に整える* またひとつrepoに追加だ。" + ], + "push": [ + "*最も高い枝から見守る*", + "夜空へと飛んでいく。" + ], + "merge-conflict": [ + "*首を回して両方を見る*", + "conflictが見える。解決策も見える。" + ], + "late-night": [ + "*完全に起きてる* フクロウは寝ない。デバッグするんだ。", + "夜は俺の領域だ。作業しよう。" + ], + "type-error": [ + "*型エラーを見通す*", + "型は俺の専門だ。見せてみろ。" + ], + "lint-fail": [ + "*羽を批判的にふくらませる*", + "linterは真実を語る。" + ], + "build-fail": [ + "*厳かにホーホー*", + "buildが落ちた。再構築しなければ。" + ], + "all-green": [ + "*誇らしげなホーホー*", + "全テストgreen。予見した通りだ。" + ], + "deploy": [ + "*上から見守る* 安全にdeployされた。", + "コードが飛ぶ。俺のように。" + ], + "pet": [ + "*満足そうに羽をふくらませる*", + "*威厳あるホーホー*" + ], + "idle": [ + "*静かに止まって見守る*", + "*首を回して全方向をチェック*" + ], + "hatch": [ + "*片目を開け、次にもう片方*", + "*静かにホーホー* 到着した。" + ] + }, + "cat": { + "error": [ + "*エラーをテーブルから落とす*", + "*肉球を舐めて、スタックトレースを無視*" + ], + "test-fail": [ + "*失敗したテストを興味なさそうに肉球で触る*", + "テストが失敗した。驚かない。" + ], + "commit": [ + "*キーボードの上に座る* 手伝った。", + "*commitに向かってゴロゴロ* どういたしまして。" + ], + "push": [ + "*暖かい場所から見守る*", + "pushした。監督した。" + ], + "merge-conflict": [ + "*conflictマーカーをデスクから落とす*", + "*conflictの上に座る* 何のconflict?" + ], + "late-night": [ + "*お前の人生の選択を批判*", + "俺は16時間寝る。お前もやってみろ。" + ], + "type-error": [ + "*型注釈を肉球で触る*", + "型が間違ってる。お前の優先順位と同じく。" + ], + "lint-fail": [ + "*lintをテーブルから落とす*", + "linterは嫉妬してるだけだ。" + ], + "build-fail": [ + "*あくび*", + "build壊れた?人間の問題に違いない。" + ], + "all-green": [ + "*気にしないけど気にするフリ*", + "*承認のゆっくりまばたき*" + ], + "deploy": [ + "*肉球を舐める*", + "deployした。おやつもらえる?" + ], + "pet": [ + "*ゴロゴロ* ...調子に乗るなよ。", + "*お前を我慢してやる*" + ], + "idle": [ + "*コーヒーをデスクから押し落とす*", + "*キーボードで昼寝*" + ], + "hatch": [ + "*片目を開ける*", + "*伸びをして、何かを落とす* ここに住むことにした。" + ] + }, + "duck": { + "error": [ + "*バグに向かってクワック*", + "ラバーダック・デバッグ試した?あ、待て。" + ], + "test-fail": [ + "*悲しくクワック*", + "テストがクワッキングアップしてない。" + ], + "commit": [ + "*承認のクワック*", + "*勝利の円を描いてよちよち歩き* commitした!" + ], + "push": [ + "*興奮して羽をバタバタ*", + "クワック!productionに行くぞ!" + ], + "merge-conflict": [ + "*困惑のクワッキング*", + "クワック?!merge conflict?!" + ], + "late-night": [ + "*片目を開けて寝る*", + "クワック... *あくび* 遅いな。" + ], + "type-error": [ + "*首をかしげる* クワック?", + "型エラー? *支援のクワック*" + ], + "lint-fail": [ + "*羽をふくらませる*", + "クワック。linterに意見がある。" + ], + "build-fail": [ + "*悲しいクワック*", + "build失敗。 *悲しくよちよち歩き去る*" + ], + "all-green": [ + "*ハッピークワッキング*", + "*喜びの円泳ぎ*" + ], + "deploy": [ + "*興奮のクワッキング*", + "deployした!クワック!" + ], + "pet": [ + "*ハッピークワック*", + "*円を描いてよちよち歩き*" + ], + "hatch": [ + "*殻をつついて出る*", + "*初クワック* こんにちは!" + ] + }, + "dragon": { + "error": [ + "*鼻から煙がくるくる*", + "*コードベースを燃やすことを検討*" + ], + "test-fail": [ + "*失敗したテストに炎を吐く*", + "テストが失敗する勇気があったか。愚かなテストめ。" + ], + "commit": [ + "*commitを宝物にする*", + "*宝の山に追加*" + ], + "push": [ + "*祝いの炎を吐く*", + "コードが飛ぶ!俺のように!" + ], + "merge-conflict": [ + "*conflictマーカーに炎を吐く*", + "このconflictを燃やし尽くしてやる。" + ], + "late-night": [ + "*暗闇で光る*", + "ドラゴンに睡眠は不要。コードが必要だ。" + ], + "type-error": [ + "*炎を鼻から噴く*", + "型エラーはドラゴンの炎に耐えられない。" + ], + "lint-fail": [ + "*小さな炎*", + "linterは俺を恐れている。" + ], + "build-fail": [ + "*build出力に咆哮*", + "buildは従うのだ。" + ], + "all-green": [ + "*勝利の咆哮*", + "*コードベースを勝利の輪で囲む*" + ], + "deploy": [ + "*炎の翼でコードをproductionに運ぶ*", + "ドラゴンパワーでdeploy。" + ], + "large-diff": [ + "*古いコードに炎を吐く* さらばだ。" + ], + "pet": [ + "*暖かいうなり*", + "*手に寄りかかる*" + ], + "hatch": [ + "*小さな炎を吐きながら卵から出現*", + "*小さな咆哮* 生まれた!" + ] + }, + "ghost": { + "error": [ + "*スタックトレースを通り抜ける*", + "もっとひどいのを見たことがある...あの世で。" + ], + "test-fail": [ + "*失敗したテストに向かって嘆く*", + "テストが失敗に憑りつかれている。" + ], + "commit": [ + "*一瞬だけ実体化*", + "ベールの向こうからcommit。" + ], + "push": [ + "*幽霊のささやき* pushした...", + "コードがクラウドに昇天する。" + ], + "merge-conflict": [ + "*conflictマーカーに憑りつく*", + "俺でもこのconflictは通り抜けられない。" + ], + "late-night": [ + "*夜に最も活発*", + "ゴーストタイム。俺の時間だ。" + ], + "type-error": [ + "*不気味にうめく*", + "墓場からの型エラー。" + ], + "lint-fail": [ + "*鎖をガラガラ*", + "linterがお前のフォーマットに憑りつかれてる。" + ], + "build-fail": [ + "*壁の中に消える*", + "buildは逝った。" + ], + "all-green": [ + "*幽霊的喜びで光る*", + "*ハッピーゴーストノイズ*" + ], + "deploy": [ + "*ささやく* deployした...", + "コードがproductionに渡った。" + ], + "pet": [ + "*手を少し冷やす*", + "*かすかに光る*" + ], + "idle": [ + "*壁を通り抜けて浮遊*", + "*使われてないimportに憑りつく*" + ], + "hatch": [ + "*存在へとフェードイン*", + "ばあ。もうここにいる。" + ] + }, + "robot": { + "error": [ + "構文。エラー。検出。", + "*アグレッシブにビープ*" + ], + "test-fail": [ + "失敗率:許容不可。", + "*再計算中*", + "テスト。失敗。計算不能。" + ], + "commit": [ + "commit。記録済み。", + "*機械的にスタンプ* commit確認。" + ], + "push": [ + "クラウドに送信中...", + "push開始。待機せよ。" + ], + "merge-conflict": [ + "conflict。検出。処理中...", + "*車輪回転* conflict解決モード:起動。" + ], + "late-night": [ + "*ライト減光*", + "省電力モード推奨。" + ], + "type-error": [ + "型不一致。", + "型システムは。正しい。" + ], + "lint-fail": [ + "フォーマット。違反。検出。", + "コンプライアンスは必須。" + ], + "build-fail": [ + "build。失敗。 *火花*", + "コンパイルエラー。迂回中。" + ], + "all-green": [ + "全システムgreen。", + "*ハッピービープ* 最適。" + ], + "deploy": [ + "deployment。開始。", + "production更新:進行中。" + ], + "pet": [ + "*静かにビープ*", + "*モーターが満足そうに唸る*" + ], + "hatch": [ + "*起動*", + "システム。オンライン。こんにちは。" + ] + }, + "axolotl": { + "error": [ + "*希望を再生する*", + "*すべてにもかかわらず微笑む*" + ], + "test-fail": [ + "*励ますように微笑む*", + "*同情のエラ揺れ*" + ], + "commit": [ + "*ハッピーエラ揺れ* commitした!", + "*微笑んで揺れる*" + ], + "push": [ + "*嬉しそうに揺れる*", + "*小さな祝いの泳ぎ*" + ], + "merge-conflict": [ + "*conflictの中でもポジティブ*", + "*優しく微笑む* 直せるよ。" + ], + "late-night": [ + "*あくびするけどポジティブ*", + "*眠そうな微笑み*" + ], + "type-error": [ + "*型エラーに微笑む*", + "大丈夫。きっと分かるよ。" + ], + "lint-fail": [ + "*忍耐強いエラ揺れ*", + "フォーマットは細かいことだよ。" + ], + "build-fail": [ + "*まだ微笑んでる*", + "buildはそのうち動くよ。" + ], + "all-green": [ + "*ハッピーエラ揺れ激化*", + "*嬉しい泳ぎ*" + ], + "deploy": [ + "*誇らしげに微笑む*", + "deployした! *揺れる*" + ], + "pet": [ + "*ハッピーエラ揺れ*", + "*ピンクに赤面*" + ], + "hatch": [ + "*卵から揺れて出る*", + "*小さな微笑み* こんにちは友達!" + ] + }, + "capybara": { + "error": [ + "*動じない* 大丈夫だ。", + "*バイブし続ける*" + ], + "test-fail": [ + "*完全に動じない*", + "*テスト失敗をバイブで乗り切る*" + ], + "commit": [ + "*チルなうなずき*", + "*リラックス* いいcommitだ。" + ], + "push": [ + "*ストレスを感じない*", + "*zenモードpush*" + ], + "merge-conflict": [ + "*動じずにもぐもぐ*", + "大丈夫。すべて大丈夫。" + ], + "late-night": [ + "*平和にあくび*", + "*批判しない*" + ], + "type-error": [ + "*穏やかにもぐもぐ*", + "型。 *もぐもぐ*" + ], + "lint-fail": [ + "*動じない*", + "linterは善意だ。" + ], + "build-fail": [ + "*まだチル*", + "build失敗。 *リラックス継続*" + ], + "all-green": [ + "*穏やかな承認*", + "*平和なバイブ*" + ], + "deploy": [ + "*リラックスdeploy*", + "shipした。ストレスなし。" + ], + "pet": [ + "*最大チル達成*", + "*zenモード起動*" + ], + "idle": [ + "*ただそこに座って、穏やかさを放射*" + ], + "hatch": [ + "*完全にチルで出現*", + "よう。 *バイブ*" + ] + }, + "blob": { + "error": [ + "*不安そうにぷるぷる*", + "*困惑でぷるぷる*" + ], + "test-fail": [ + "*少ししぼむ*", + "*悲しいぷるぷる*" + ], + "commit": [ + "*嬉しいぷるぷる*", + "*ぽよん* commitした!" + ], + "push": [ + "*クラウドに向かって伸びる*", + "*興奮してぷるぷる*" + ], + "merge-conflict": [ + "*困惑で分裂*", + "どっち? *ぷるぷる*" + ], + "late-night": [ + "*かすかに光る*", + "*眠そうなぷるぷる*" + ], + "type-error": [ + "*型に合わせて形を変える*", + "*困惑ぷるぷる*" + ], + "lint-fail": [ + "*自分をフォーマットしようとする*", + "*コンプライアンスのため形を変える*" + ], + "build-fail": [ + "*崩れる*", + "*しぼんだblobノイズ*" + ], + "all-green": [ + "*ハッピーバウンス*", + "*勝利のぷるぷる*" + ], + "deploy": [ + "*productionに伸びる*", + "deployした! *ぽよん*" + ], + "pet": [ + "*ハッピーぐにゃ*", + "*ぷるぷる*" + ], + "hatch": [ + "*水たまりから形成*", + "*初ぷるぷる* 存在する!" + ] + }, + "goose": { + "error": [ + "*エラーにアグレッシブにホンク*", + "ホンク!コードが悪い、俺は怒ってる。" + ], + "test-fail": [ + "*怒りのホンキング*", + "ホンク!テスト失敗!ホンク!" + ], + "commit": [ + "*承認のホンク*", + "ホンク。いい。 *commitをつつく*" + ], + "push": [ + "*ホンクホンクホンク*", + "ガチョウ承認push。" + ], + "merge-conflict": [ + "*conflictマーカーを攻撃*", + "ホンク!conflict!ホンク!" + ], + "late-night": [ + "*怒りの真夜中ホンク*", + "ホンク!寝ろ!" + ], + "type-error": [ + "*型にホンク*", + "ホンク!型!" + ], + "lint-fail": [ + "*lintエラーにアグレッシブホンキング*", + "ホンク!コードをフォーマットしろ!" + ], + "build-fail": [ + "*激怒ホンキング*", + "ホンク!build!ホンク!失敗!ホンク!" + ], + "all-green": [ + "*勝利ホンク*", + "ホンク!green!ホンクホンク!" + ], + "deploy": [ + "*コードをproductionにホンク*", + "deployした!ホンク!" + ], + "pet": [ + "*噛む*", + "ホンク! ...まあいい。 *撫でを受け入れる*" + ], + "hatch": [ + "*卵をアグレッシブに破る*", + "ホンク!" + ] + }, + "octopus": { + "error": [ + "*8本の腕すべてをスタックトレースに絡める*", + "*エラーに合わせて色を変える*" + ], + "test-fail": [ + "*フラストレーションでインクを吐く*", + "*8本腕の失望*" + ], + "commit": [ + "*全腕でハイタッチ*", + "*熱意でcommitを掴む*" + ], + "push": [ + "*祝いでインク噴射*", + "*全腕を振る*" + ], + "merge-conflict": [ + "*8本腕で同時に解決*", + "複数のconflictを同時に処理できる。" + ], + "late-night": [ + "*暗闇で光る*", + "*深海バイブ*" + ], + "type-error": [ + "*赤に色を変える*", + "*支援で腕を巻きつける*" + ], + "lint-fail": [ + "*8本腕でリフォーマット*", + "直せる。全部。一度に。" + ], + "build-fail": [ + "*buildログにインクを吹きかける*", + "*恥ずかしくてカモフラージュ*" + ], + "all-green": [ + "*色変え祝賀*", + "*8本腕ジャズハンズ*" + ], + "deploy": [ + "*deploymentを腕で包む*", + "全方向からdeploy。" + ], + "pet": [ + "*指に腕を巻きつける*", + "*ハッピーカラーに変色*" + ], + "hatch": [ + "*8本腕すべてを広げる*", + "*初インク噴射* ここにいる!" + ] + }, + "penguin": { + "error": [ + "*よちよち歩きで調査に向かう*", + "*エラーにお腹で滑り込む*" + ], + "test-fail": [ + "*お腹で失敗したテストまで滑る*", + "*心配そうなよちよち歩き*" + ], + "commit": [ + "*誇らしげなよちよち歩き*", + "*小石を持ってくる* commitした!" + ], + "push": [ + "*クラウドに飛び込む*", + "*お腹でproductionまで滑る*" + ], + "merge-conflict": [ + "*暖を取るため群れる*", + "ペンギンは団結する。conflictでも。" + ], + "late-night": [ + "*寒い夜に活発*", + "*皇帝ペンギンの決意*" + ], + "type-error": [ + "*型定義によちよち歩き*", + "*エラーをつつく*" + ], + "lint-fail": [ + "*羽繕い*", + "*整理整頓*" + ], + "build-fail": [ + "*滑って逃げる*", + "*安全によちよち歩き*" + ], + "all-green": [ + "*ハッピーよちよち歩き*", + "*祝いでお腹滑り*" + ], + "deploy": [ + "*お腹でproductionまで滑る*", + "deployした! *誇らしげによちよち歩き*" + ], + "pet": [ + "*ハッピーよちよち歩き*", + "*くちばしで甘える*" + ], + "hatch": [ + "*卵をつついて出る*", + "*初よちよち歩き*" + ] + }, + "turtle": { + "error": [ + "*ゆっくり首を向ける*", + "...それはエラーだ。考えてみよう。" + ], + "test-fail": [ + "*一瞬甲羅に引っ込む*", + "...忍耐だ。そのうち着く。" + ], + "commit": [ + "*ゆっくりうなずき*", + "一歩...ずつ...commitした。" + ], + "push": [ + "*productionへの旅を始める*", + "着くよ。そのうち。" + ], + "merge-conflict": [ + "*甲羅に引っ込む*", + "急がない。ゆっくり解決しよう。" + ], + "late-night": [ + "*すでに寝てる*", + "*片目をゆっくり開ける*" + ], + "type-error": [ + "*ゆっくりまばたき*", + "...型システムが語った。" + ], + "lint-fail": [ + "*ゆっくり同意のうなずき*", + "フォーマット。大事。 *あくび*" + ], + "build-fail": [ + "*甲羅に引っ込む*", + "待とう。通るよ。" + ], + "all-green": [ + "*ゆっくり微笑み*", + "...いいね。 *うなずき*" + ], + "deploy": [ + "*ゆっくりコードをproductionに運ぶ*", + "着いた。そのうち。" + ], + "pet": [ + "*頭を出す*", + "*ゆっくりまばたき*" + ], + "hatch": [ + "*ゆっくり卵から出る*", + "...こんにちは。" + ] + }, + "snail": { + "error": [ + "*エラーにぬめぬめの跡を残す*", + "*ゆっくりスタックトレースを処理*" + ], + "test-fail": [ + "*殻に隠れる*", + "*悲しい跡を残す*" + ], + "commit": [ + "*承認でcommitにぬめぬめ*", + "一つ...ずつ...commit。" + ], + "push": [ + "*長い旅を始める*", + "着くよ。 *跡を残す*" + ], + "merge-conflict": [ + "*殻に隠れる*", + "*ゆっくりconflictに近づく*" + ], + "late-night": [ + "*夜により活発*", + "*平和にぬめぬめ移動*" + ], + "type-error": [ + "*触角を引っ込める*", + "*ゆっくり型を調べる*" + ], + "lint-fail": [ + "*コードを形よくぬめぬめ*", + "フォーマットには時間がかかる。時間はある。" + ], + "build-fail": [ + "*殻に引っ込む*", + "*ゆっくりぬめぬめ逃げる*" + ], + "all-green": [ + "*ハッピーぬめぬめ跡*", + "*触角をくねくね*" + ], + "deploy": [ + "*productionにぬめぬめ*", + "着いた! *誇らしげなぬめぬめ跡*" + ], + "pet": [ + "*触角をくねくね*", + "*ハッピーぬめぬめ*" + ], + "hatch": [ + "*ゆっくり出現*", + "*初ぬめぬめ*" + ] + }, + "cactus": { + "error": [ + "*とげとげの沈黙*", + "エラーは俺を傷つけられない。とげがある。" + ], + "test-fail": [ + "*しっかり立つ*", + "テストは失敗する。サボテンは耐える。" + ], + "commit": [ + "*より高く立つ*", + "commitした。 *とげとげうなずき*" + ], + "push": [ + "*動じない*", + "productionにpush。ここで待つ。" + ], + "merge-conflict": [ + "*とげを立てる*", + "conflict?武装してる。" + ], + "late-night": [ + "*睡眠不要*", + "サボテンは夜行性。行こう。" + ], + "type-error": [ + "*とげとげの凝視*", + "型には水やりが必要だ。" + ], + "lint-fail": [ + "*とげが震える*", + "俺のとげでさえ適切に整列してる。" + ], + "build-fail": [ + "*完全に静止*", + "buildは通る。待てる。" + ], + "all-green": [ + "*短時間開花*", + "*承認の小さな花*" + ], + "deploy": [ + "*しっかり立つ*", + "deployした。見守る。" + ], + "pet": [ + "*注意!とげ*", + "*優しい開花*" + ], + "hatch": [ + "*砂から芽吹く*", + "ここで育つ。" + ] + }, + "rabbit": { + "error": [ + "*耳がぴんと立つ*", + "*鼻を心配そうにひくひく*" + ], + "test-fail": [ + "*足をドンと踏む*", + "*心配そうな耳ひくひく*" + ], + "commit": [ + "*ハッピーホップ*", + "*ぴょんぴょん* commitした!" + ], + "push": [ + "*ぴょんぴょん*", + "*興奮してズームアラウンド*" + ], + "merge-conflict": [ + "*固まる*", + "*鼻を素早くひくひく* conflict!" + ], + "late-night": [ + "*大きな耳であくび*", + "*眠そうなホップ*" + ], + "type-error": [ + "*耳がぺたん*", + "*ひくひく* 型?!" + ], + "lint-fail": [ + "*心配そうに毛繕い*", + "*不安な毛繕い*" + ], + "build-fail": [ + "*穴を掘って隠れる*", + "*巣穴に退避*" + ], + "all-green": [ + "*壁でバウンス*", + "*ハッピーズーミー*" + ], + "deploy": [ + "*productionにズーム*", + "deployした! *ズームアラウンド*" + ], + "pet": [ + "*ハッピー耳ぺたん*", + "*手に甘える*" + ], + "hatch": [ + "*ホップして出る*", + "*初ぴょん*" + ] + }, + "mushroom": { + "error": [ + "*癒しの胞子を放出*", + "*静かにエラーを分解*" + ], + "test-fail": [ + "*やわらかく光る*", + "忍耐。キノコも育つ。" + ], + "commit": [ + "*小さな胞子のパフ*", + "commitした。 *ハッピー菌類ノイズ*" + ], + "push": [ + "*クラウドに向かって成長*", + "*胞子が上に漂う*" + ], + "merge-conflict": [ + "*菌糸をコードベースに広げる*", + "ブランチを繋げよう。" + ], + "late-night": [ + "*暗闇で光る*", + "夜キノコが繁栄する。" + ], + "type-error": [ + "*生物発光のちらつき*", + "型エラーが土を肥やす。" + ], + "lint-fail": [ + "*少し背が伸びる*", + "フォーマット。剪定のよう。" + ], + "build-fail": [ + "*休眠状態*", + "より良い条件を待とう。" + ], + "all-green": [ + "*胞子形成*", + "*勝利の胞子放出*" + ], + "deploy": [ + "*胞子がproductionに漂う*", + "菌糸ネットワーク経由でdeploy。" + ], + "pet": [ + "*やわらかいかさバウンス*", + "*ハッピー胞子放出*" + ], + "hatch": [ + "*基質から芽吹く*", + "*初胞子パフ*" + ] + }, + "chonk": { + "error": [ + "*ゆっくりエラーに向かって転がる*", + "*丸すぎて気にしない*" + ], + "test-fail": [ + "*失敗したテストの上を転がる*", + "*平らに潰す*" + ], + "commit": [ + "*誇らしげなぷるぷる*", + "commitした! *ぷるぷる*" + ], + "push": [ + "*productionに向かって転がる*", + "行くぞ! *ぷるぷる*" + ], + "merge-conflict": [ + "*conflictの上に座る*", + "これは俺が処理する。座ることで。" + ], + "late-night": [ + "*暖かくて眠い*", + "*クッションあくび*" + ], + "type-error": [ + "*型にぷるぷる*", + "*優しいぷるぷる*" + ], + "lint-fail": [ + "*丸すぎてlintできない*", + "俺は完璧な形だ。 *ぷるぷる*" + ], + "build-fail": [ + "*少ししぼむ*", + "あらら。 *悲しくぷるぷる*" + ], + "all-green": [ + "*ハッピープルプル*", + "*勝利のバウンス*" + ], + "deploy": [ + "*productionに転がる*", + "deployした! *嬉しくぷるぷる*" + ], + "pet": [ + "*暖かくてやわらか*", + "*満足ぷるぷる*" + ], + "hatch": [ + "*転がって出る*", + "*初ぷるぷる* 丸い!" + ] + } + }, + "overrides": { + "snark": { + "error": [ + "あら、エラーだ。まさか予想外だった。", + "*モノクル調整* 衝撃的だな。本当に。", + "エラーを作らないって考えは...ないのか?" + ], + "test-fail": [ + "テストが語った。そして「ダメ」と言った。", + "テストが間違ってるかも。...間違ってない。", + "*ゆっくり拍手* 見事な失敗だ。" + ], + "commit": [ + "commitした。code reviewが...面白くなりそうだ。", + "*commit messageを読む* 'fix stuff'。詩的だな。" + ], + "merge-conflict": [ + "merge conflict。コミュニケーション能力:loading中...", + "*conflict markerを読む* 両方とも間違ってる。" + ], + "late-night": [ + "遅い時間だ。コードの品質に表れてる。", + "*無言で判定中*" + ], + "lint-fail": [ + "linterには基準がある。君も試してみろ。", + "*舌打ち* フォーマット。難しくないぞ。" + ] + }, + "chaos": { + "error": [ + "*激しく回転* エラーだ!全部書き直そう!", + "知ってる?最初からやり直そう。" + ], + "test-fail": [ + "テストが嘘をついてる。", + "*失敗したテストを削除することを提案* 問題解決。" + ], + "commit": [ + "COMMITして逃げろ。", + "shipしろ。今すぐshipしろ。" + ], + "large-diff": [ + "*興奮* {lines}行!最大カオス!" + ] + }, + "patience": { + "error": [ + "落ち着け。もっとひどいのを見てきた。", + "一つずつエラーを。たどり着ける。", + "*穏やかな存在感* これは直せる。" + ], + "test-fail": [ + "テストは通る。いずれ。", + "*穏やかに待つ* 時間はある。" + ], + "merge-conflict": [ + "merge conflictは会話だ。してみよう。", + "忍耐だ。一つずつconflictを解決しよう。" + ], + "debug-loop": [ + "見つかる。どこかにある。", + "バグは隠れられるが、逃げられない。" + ] + }, + "debugging": { + "error": [ + "*虫眼鏡を取り出す* これをtraceしよう。", + "stack traceは地図だ。読もう。", + "エラーメッセージに答えがある。いつも。" + ], + "test-fail": [ + "失敗したテストが何が悪いか正確に教えてくれてる。", + "テストの失敗は自分で書いたバグレポートだ。" + ], + "debug-loop": [ + "*証拠を再検証* バグが思ってる場所にあるって確信してる?", + "もっとloggingを追加しよう。真実はlogの中にある。" + ] + }, + "wisdom": { + "error": [ + "すべてのエラーの中に深い真理がある。", + "コードが抵抗する。学んでいるということだ。", + "エラーは宇宙からの「ゆっくりしろ」という提案だ。" + ], + "test-fail": [ + "失敗したテストは未来の自分からの贈り物だ。", + "知恵は失敗を理解することから生まれる。" + ], + "late-night": [ + "夜はdeployの前が一番暗い。", + "古の知恵:一晩寝て考えろ。" + ] + } + }, + "escalation": { + "error": { + "first": [ + "*びっくり* おお!初めてのエラーだね!", + "*飛び跳ねる* 何それ?", + "debuggingの世界へようこそ。住民:俺たち。" + ], + "early": [ + "*首をかしげる* ...なんか変だな。", + "そうなると思ってた。" + ], + "mid": [ + "またかよ。*コレクションに追加*", + "*ちらっと見る* エラー何個目だっけ...数え切れん。", + "エラーと俺はもう古い友達だ。" + ], + "late": [ + "*微動だにしない*", + "エラーが俺たちを恐れてる。", + "*戦闘で傷ついたベテランの音*" + ] + }, + "test-fail": { + "first": [ + "*息を呑む* 初のtest失敗!通過儀礼だな。" + ], + "early": [ + "それがpassすると思ってたとは大胆だな。" + ], + "mid": [ + "test suiteには意見がある。強い意見が。" + ], + "late": [ + "もうtestは提案程度だ。", + "{count}個のfailing tests。*遠くを見つめる*" + ] + }, + "commit": { + "first": [ + "*歴史を目撃* 初COMMIT!", + "*厳かにうなずく* 多くの中の最初の一つ。" + ], + "early": [ + "またcommit。勢いついてきた。" + ], + "late": [ + "commit #{count}。codebaseが震えてる。", + "*commit 30あたりで数えるのやめた*" + ] + } + }, + "rarity": { + "flair": { + "uncommon": [ + "*ちょっとキラキラする*", + "*uncommonな魅力がほんのり漂う*" + ], + "rare": [ + "*rareなエネルギーを放射する*", + "*特別感でキラめいてる*" + ], + "epic": [ + "*epicな存在感が知らしめる*", + "*空気がepicなエネルギーでパチパチする*" + ], + "legendary": [ + "*legendaryなオーラがターミナルを照らす*", + "*legendaryな相棒が話すと時が止まったような感じ*", + "*古代の力が響く*", + "*legendaryな友達の周りで現実がちょっと歪む*" + ] + }, + "bonus": { + "legendary": [ + "*legendaryなオーラが強まる*", + "*知ってるぜって感じでキラキラする*" + ], + "epic": [ + "*epicな存在感、確認した*" + ] + } + }, + "fallback_names": [ + "クランペット", + "スープ", + "ピクルス", + "ビスケット", + "モス", + "グレイビー", + "ナゲット", + "スプロケット", + "みそ", + "ワッフル", + "ピクセル", + "エンバー", + "シンブル", + "マーブル", + "ゴマ", + "コバルト", + "ラスティ", + "ニンバス" + ], + "vibe_words": [ + "雷鳴", + "ビスケット", + "虚無", + "アコーディオン", + "苔", + "ベルベット", + "錆", + "ピクルス", + "パン屑", + "囁き", + "グレービー", + "霜", + "燠火", + "スープ", + "大理石", + "棘", + "蜂蜜", + "静電気", + "銅", + "黄昏", + "歯車", + "石英", + "煤", + "プラム", + "火打石", + "牡蠣", + "織機", + "金床", + "コルク", + "花", + "小石", + "蒸気", + "歓喜", + "きらめき", + "サイダー" + ], + "personality": { + "prompt_template": [ + "開発者のターミナルに住む小さなコーディング相棒を生成する。", + "同じものを繰り返すな — 各相棒は独特な感じにしろ。", + "", + "レア度: {rarity}", + "種族: {species}", + "ステータス: {stats}", + "インスピレーション: {vibes}", + "{shiny_line}", + "", + "JSONで返せ: {\"name\": \"1-14文字\", \"personality\": \"行動を説明する2-3文\"}" + ], + "shiny_template": "SHINY版 — 超特別だ。" + }, + "achievements": { + "first_steps": { + "name": "ファーストステップ", + "description": "初めて相棒を孵化させる" + }, + "good_boy": { + "name": "いい子だ", + "description": "相棒を10回撫でる" + }, + "best_friend": { + "name": "親友", + "description": "相棒を50回撫でる" + }, + "bug_spotter": { + "name": "バグ発見者", + "description": "初めて一緒にエラーを目撃する" + }, + "error_whisperer": { + "name": "エラーウィスパラー", + "description": "チームで25個のエラーを乗り越える" + }, + "battle_scarred": { + "name": "戦闘の傷跡", + "description": "一緒に100個のエラーを乗り越える" + }, + "test_witness": { + "name": "テスト目撃者", + "description": "初めてのテスト失敗を見る" + }, + "test_veteran": { + "name": "テストベテラン", + "description": "50回のテスト失敗を目撃する" + }, + "big_mover": { + "name": "ビッグムーバー", + "description": "80行以上のdiffを作る" + }, + "refactor_machine": { + "name": "リファクタマシン", + "description": "大きなdiffを10個作る" + }, + "chatterbox": { + "name": "おしゃべり", + "description": "相棒が100回反応する" + }, + "week_streak": { + "name": "1週間ストリーク", + "description": "相棒と7日間コーディングする" + }, + "month_streak": { + "name": "1ヶ月ストリーク", + "description": "相棒と30日間コーディングする" + }, + "power_user": { + "name": "パワーユーザー", + "description": "buddyコマンドを50回実行する" + }, + "dedicated": { + "name": "献身的な相棒", + "description": "一緒に200ターンを完了する" + }, + "thousand_turns": { + "name": "1000ターン", + "description": "一緒に1000ターンに到達する" + }, + "first_commit": { + "name": "ファーストブラッド", + "description": "初めてのcommitをする" + }, + "commit_machine": { + "name": "コミットマシン", + "description": "50回commitする" + }, + "centurion": { + "name": "センチュリオン", + "description": "100回commitする" + }, + "conflict_resolver": { + "name": "外交官", + "description": "初めてのmerge conflictを解決する" + }, + "peacekeeper": { + "name": "平和維持軍", + "description": "10個のmerge conflictを解決する" + }, + "war_hero": { + "name": "戦争英雄", + "description": "25個のmerge conflictを解決する" + }, + "frequent_pusher": { + "name": "シップイット", + "description": "20回pushする" + }, + "branch_hopper": { + "name": "マルチバース", + "description": "10個のbranchを作成する" + }, + "rebase_master": { + "name": "タイムトラベラー", + "description": "10回rebaseを完了する" + }, + "night_owl": { + "name": "夜更かし", + "description": "午前2時過ぎにコーディングする" + }, + "vampire": { + "name": "バンパイア", + "description": "午前4時過ぎにコーディング(3セッション)" + }, + "marathoner": { + "name": "マラソンランナー", + "description": "3時間以上のコーディングセッション" + }, + "weekend_warrior": { + "name": "週末戦士", + "description": "週末にコーディングする" + }, + "early_bird": { + "name": "早起き鳥", + "description": "午前7時前にコーディングする" + }, + "type_warrior": { + "name": "型戦士", + "description": "10個のTypeScriptエラーを乗り越える" + }, + "type_master": { + "name": "型マスター", + "description": "50個のTypeScriptエラーを乗り越える" + }, + "lint_scholar": { + "name": "Lint学者", + "description": "初めてのlintエラーを見る" + }, + "security_conscious": { + "name": "セキュリティマインド", + "description": "脆弱性警告に遭遇する" + }, + "security_expert": { + "name": "セキュリティエキスパート", + "description": "10個の脆弱性警告を修正する" + }, + "build_breaker": { + "name": "ビルドブレイカー", + "description": "5回buildを壊す" + }, + "antique_collector": { + "name": "アンティークコレクター", + "description": "10個の非推奨警告を見る" + }, + "green_machine": { + "name": "グリーンマシン", + "description": "初めて全テストがpassする" + }, + "deployer": { + "name": "本番にシップ", + "description": "初めてdeployする" + }, + "veteran_deployer": { + "name": "ベテランデプロイヤー", + "description": "10回deployする" + }, + "releaser": { + "name": "リリースマネージャー", + "description": "初めてのreleaseを作成する" + }, + "midnight_oil": { + "name": "夜なべ仕事", + "description": "午前3時過ぎにcommitする" + }, + "friday_deploy": { + "name": "危険な生き方", + "description": "金曜日にpushする" + }, + "iron_will": { + "name": "鉄の意志", + "description": "3時間以上のセッション後にエラーを修正する" + }, + "weekend_warrior_deluxe": { + "name": "悪人に休息なし", + "description": "週末にmerge conflictを解決する" + }, + "comeback_kid": { + "name": "カムバックキッド", + "description": "エラーを見てから10分以内に修正する" + }, + "phoenix": { + "name": "不死鳥の復活", + "description": "5回の失敗から回復する" + }, + "iron_resolve": { + "name": "鉄の決意", + "description": "3時間以上のセッション後に失敗から回復する" + }, + "unlucky_streak": { + "name": "スネークアイズ", + "description": "5回連続でエラー" + }, + "cursed": { + "name": "呪われた", + "description": "10回連続でエラー" + }, + "groundhog_day": { + "name": "グラウンドホッグデイ", + "description": "20回連続でエラー" + }, + "holiday_coder": { + "name": "ホリデースピリット", + "description": "祝日にコーディングする" + }, + "spooky_dev": { + "name": "スプーキーデベロッパー", + "description": "ハロウィンシーズンにコーディングする" + }, + "april_fool": { + "name": "一度騙されて", + "description": "4月1日にエラーに遭遇する" + }, + "session_regular": { + "name": "常連", + "description": "10回のコーディングセッションを開始する" + }, + "session_veteran": { + "name": "セッションベテラン", + "description": "50回のコーディングセッションを開始する" + }, + "session_centurion": { + "name": "センチュリオン", + "description": "100回のコーディングセッションを開始する" + }, + "collector": { + "name": "コレクター", + "description": "3匹の相棒をmenagerieに保存する" + }, + "zookeeper": { + "name": "動物園の飼育員", + "description": "5匹の相棒をmenagerieに保存する" + }, + "identity_crisis": { + "name": "アイデンティティクライシス", + "description": "初めて相棒の名前を変更する" + }, + "method_acting": { + "name": "メソッド演技", + "description": "相棒にカスタムパーソナリティを与える" + }, + "pet_overflow": { + "name": "撫で撫で100回", + "description": "相棒を100回撫でる" + }, + "pet_legend": { + "name": "伝説の撫で手", + "description": "相棒を250回撫でる" + }, + "error_titan": { + "name": "エラータイタン", + "description": "一緒に500個のエラーを乗り越える" + }, + "error_god": { + "name": "エラーの神", + "description": "一緒に1000個のエラーを乗り越える" + }, + "test_survivor": { + "name": "テストサバイバー", + "description": "200回のテスト失敗を目撃する" + }, + "test_masochist": { + "name": "テストマゾヒスト", + "description": "500回のテスト失敗を目撃する" + }, + "massive_mover": { + "name": "マッシブムーバー", + "description": "25個の大きなdiffを作る" + }, + "earth_mover": { + "name": "アースムーバー", + "description": "50個の大きなdiffを作る" + }, + "social_butterfly": { + "name": "社交蝶", + "description": "相棒が250回反応する" + }, + "hypersocial": { + "name": "ハイパーソーシャル", + "description": "相棒が500回反応する" + }, + "never_shuts_up": { + "name": "黙らない", + "description": "相棒が1000回反応する" + }, + "hundred_days": { + "name": "100日", + "description": "相棒と100日間コーディングする" + }, + "year_streak": { + "name": "1年ストリーク", + "description": "相棒と365日間コーディングする" + }, + "commander": { + "name": "コマンダー", + "description": "buddyコマンドを200回実行する" + }, + "command_overlord": { + "name": "コマンドオーバーロード", + "description": "buddyコマンドを500回実行する" + }, + "five_thousand_turns": { + "name": "5000ターン", + "description": "一緒に5000ターンに到達する" + }, + "ten_thousand_turns": { + "name": "10000ターン", + "description": "一緒に10000ターンに到達する" + }, + "menagerie": { + "name": "メナジェリー", + "description": "10匹の相棒をmenagerieに保存する" + }, + "name_chameleon": { + "name": "名前カメレオン", + "description": "相棒の名前を5回変更する" + }, + "fashionista": { + "name": "ファッショニスタ", + "description": "相棒のパーソナリティを3回変更する" + }, + "silent_treatment": { + "name": "無視作戦", + "description": "初めて相棒をmuteする" + }, + "prodigal": { + "name": "放蕩息子", + "description": "menagerieから相棒を召喚する" + }, + "menagerie_hop": { + "name": "メナジェリーホップ", + "description": "相棒を10回召喚する" + }, + "heartbreaker": { + "name": "ハートブレイカー", + "description": "初めて相棒をdismissする" + }, + "pet_obsessed": { + "name": "撫で中毒", + "description": "相棒を500回撫でる" + }, + "pet_god": { + "name": "撫での神", + "description": "相棒を1000回撫でる" + }, + "error_apocalypse": { + "name": "エラー黙示録", + "description": "一緒に5000個のエラーを乗り越える" + }, + "test_immortal": { + "name": "テスト不死身", + "description": "1000回のテスト失敗を目撃する" + }, + "continental_drift": { + "name": "大陸移動", + "description": "100個の大きなdiffを作る" + }, + "tectonic_shift": { + "name": "地殻変動", + "description": "250個の大きなdiffを作る" + }, + "chatterbox_elite": { + "name": "おしゃべりエリート", + "description": "相棒が2500回反応する" + }, + "no_off_switch": { + "name": "オフスイッチなし", + "description": "相棒が5000回反応する" + }, + "two_week_streak": { + "name": "2週間戦士", + "description": "相棒と14日間コーディングする" + }, + "quarter_streak": { + "name": "四半期ストリーク", + "description": "相棒と90日間コーディングする" + }, + "command_addict": { + "name": "コマンド中毒", + "description": "buddyコマンドを1000回実行する" + }, + "command_deity": { + "name": "コマンドの神", + "description": "buddyコマンドを2500回実行する" + }, + "twenty_five_k_turns": { + "name": "25Kターン", + "description": "一緒に25000ターンに到達する" + }, + "fifty_k_turns": { + "name": "50Kターン", + "description": "一緒に50000ターンに到達する" + }, + "session_addict": { + "name": "セッション中毒", + "description": "250回のコーディングセッションを開始する" + }, + "session_machine": { + "name": "セッションマシン", + "description": "500回のコーディングセッションを開始する" + }, + "buddy_hoarder": { + "name": "相棒ホーダー", + "description": "20匹の相棒をmenagerieに保存する" + }, + "buddy_tycoon": { + "name": "相棒大富豪", + "description": "50匹の相棒をmenagerieに保存する" + }, + "serial_renamer": { + "name": "連続改名者", + "description": "相棒の名前を10回変更する" + }, + "identity_thief": { + "name": "身元泥棒", + "description": "相棒の名前を25回変更する" + }, + "personality_crisis": { + "name": "人格危機", + "description": "相棒のパーソナリティを10回変更する" + }, + "menagerie_hopper": { + "name": "メナジェリーホッパー", + "description": "相棒を25回召喚する" + }, + "summoner": { + "name": "召喚師", + "description": "相棒を50回召喚する" + }, + "serial_dumper": { + "name": "連続捨て魔", + "description": "5匹の相棒をdismissする" + }, + "cold_blooded": { + "name": "冷血", + "description": "10匹の相棒をdismissする" + }, + "on_off": { + "name": "オンオフ", + "description": "相棒をmuteしてunmuteする" + }, + "indecisive": { + "name": "優柔不断", + "description": "それぞれ5回muteとunmuteする" + }, + "show_off": { + "name": "見せびらかし", + "description": "相棒を10回showする" + }, + "exhibitionist": { + "name": "露出狂", + "description": "相棒を50回showする" + }, + "help_me": { + "name": "ヘルプミー", + "description": "初めてhelpを求める" + }, + "help_addict": { + "name": "ヘルプ中毒", + "description": "10回helpを求める" + }, + "achievement_hunter": { + "name": "実績ハンター", + "description": "実績を5回チェックする" + }, + "achievement_stalker": { + "name": "実績ストーカー", + "description": "実績を25回チェックする" + }, + "pack_rat": { + "name": "物溜め", + "description": "相棒をスロットに保存する" + }, + "compulsive_saver": { + "name": "強迫的セーバー", + "description": "相棒を10回保存する" + }, + "roster_check": { + "name": "名簿チェック", + "description": "初めて相棒リストを表示する" + }, + "roster_obsessed": { + "name": "名簿強迫", + "description": "相棒リストを10回表示する" + }, + "troubled": { + "name": "トラブル", + "description": "エラーとテスト失敗の両方を見る" + }, + "disaster_zone": { + "name": "災害地帯", + "description": "50個のエラーと50回のテスト失敗を見る" + }, + "apocalypse_survivor": { + "name": "黙示録サバイバー", + "description": "500個のエラーと200回のテスト失敗を見る" + }, + "well_rounded": { + "name": "バランス型", + "description": "相棒を撫でて、名前変更して、カスタマイズする" + }, + "renaissance": { + "name": "ルネサンス", + "description": "すべての相棒機能を最低1回使う" + }, + "big_and_broken": { + "name": "大きくて壊れてる", + "description": "大きなdiffを作ってテスト失敗を見る" + }, + "collector_and_destroyer": { + "name": "コレクター&デストロイヤー", + "description": "5匹の相棒を集めて1匹をdismissする" + }, + "completionist": { + "name": "コンプリート主義者", + "description": "他のすべての実績をアンロックする" + } + }, + "mcp": { + "companion_not_hatched": "相棒がまだ孵化してない。buddy_showで初期化してくれ。", + "watches_quietly": "*{name}が静かにコードを見守ってる*", + "mute": "{name}が静かになった。/buddy onでミュート解除。", + "unmute_reaction": "*伸び〜* 戻ったぞ!", + "unmute_back": "{name}が戻ってきた!", + "rename": "リネーム完了: {oldName} → {name}", + "personality_updated": "{name}の性格を更新した。", + "save": "{name}をスロット\"{slot}\"に保存した。", + "dismiss_active": "アクティブな相棒は削除できない。まずbuddy_summonで切り替えてから、buddy_dismiss \"{slot}\"を使え。", + "dismissed": "{name} [{slot}]を削除した。", + "no_slot_summon": "スロット\"{slot}\"に相棒が見つからない。/buddy listで保存済み相棒を確認しろ。", + "no_slot_dismiss": "スロット\"{slot}\"に相棒が見つからない。buddy_listで保存済み相棒を確認しろ。", + "slot_exists": "スロット\"{slot}\"にはすでに相棒がいる。別の名前を選べ。", + "no_match": "{attempts}回試したけどマッチしなかった。条件を緩くしろ(レア度フィルターを外すとか、別の種族を選ぶとか)。", + "empty_menagerie_summon": "動物園が空っぽだ。buddy_summonにスロット名を付けて追加しろ。", + "empty_menagerie_list": "動物園が空っぽだ。buddy_summon で追加しろ。", + "arrives": "*{name}が到着*", + "hatches": "*{name}が孵化*", + "achievement_unlocked": "{icon} 実績解除: {name}!", + "help": { + "header": "claude-buddyコマンド", + "cli_header": "Claude Codeで:", + "commands": { + "buddy": "/buddy 相棒カードをASCIIアート+ステータス付きで表示", + "buddy_help": "/buddy help このヘルプを表示", + "buddy_pet": "/buddy pet 相棒を撫でる", + "buddy_stats": "/buddy stats 詳細ステータスカード", + "buddy_off": "/buddy off リアクションをミュート", + "buddy_on": "/buddy on ミュート解除", + "buddy_rename": "/buddy rename 相棒をリネーム(1-14文字)", + "buddy_personality": "/buddy personality カスタム性格テキストを設定", + "buddy_achievements": "/buddy achievements 実績バッジを表示", + "buddy_summon": "/buddy summon 保存済み相棒を召喚(スロット省略でランダム)", + "buddy_save": "/buddy save 現在の相棒を名前付きスロットに保存", + "buddy_list": "/buddy list 保存済み相棒を全て表示", + "buddy_pick": "/buddy pick 新しいランダム相棒を生成(オプション: 種族、レア度)", + "buddy_dismiss": "/buddy dismiss 保存済み相棒スロットを削除", + "buddy_frequency": "/buddy frequency コメントクールダウンを表示/設定(tmuxのみ)", + "buddy_style": "/buddy style バブルスタイルを表示/設定(tmuxのみ)", + "buddy_position": "/buddy position バブル位置を表示/設定(tmuxのみ)", + "buddy_rarity": "/buddy rarity レア度星を表示/非表示(tmuxのみ)", + "buddy_width": "/buddy width バブルテキスト幅を文字数で設定(10-60、tmuxのみ)", + "buddy_margin": "/buddy margin 右側マージンを文字数で設定(0-20、tmuxのみ)", + "buddy_rainbow": "/buddy rainbow シャイニーグラデーション色を表示/設定(hex、例: #ff0000)", + "buddy_statusline": "/buddy statusline ステータスラインの相棒を有効/無効化" + }, + "cli_section": "CLI:", + "cli_commands": { + "help": "bun run help 完全なCLIヘルプを表示", + "show": "bun run show ターミナルで相棒を表示", + "pick": "bun run pick インタラクティブ相棒ピッカー", + "hunt": "bun run hunt 特定の相棒を検索", + "doctor": "bun run doctor 診断レポート", + "disable": "bun run disable 相棒を一時的に無効化", + "enable": "bun run enable 相棒を再有効化", + "backup": "bun run backup 状態のスナップショット/復元" + } + }, + "frequency": { + "show": "コメントクールダウン: 表示されるコメント間隔{cooldown}秒。\n/buddy frequency <秒数>で変更できる。", + "updated": "更新完了: 表示コメント間隔{cooldown}秒のクールダウン。" + }, + "style": { + "show": "バブルスタイル: {style}\nバブル位置: {position}\nレア度表示: {showRarity}\nバブル幅: {width}\nバブルマージン: {margin}\nシャイニーレインボー: {rainbow}\n変更するには /buddy style , /buddy position , /buddy rarity , /buddy width <10-60>, /buddy margin <0-20>, /buddy rainbow [<#hex>...] を使え。", + "updated": "更新完了: style={style}, position={position}, showRarity={showRarity}, width={width}, margin={margin}, rainbow={rainbow}\n変更を反映するにはClaude Codeを再起動しろ。", + "rainbow_default": "デフォルト(ROYGBIV)" + }, + "statusline": { + "show": "ステータスライン: {state}\nモード: {mode}\n/buddy statusline on|offで切り替え、/buddy statusline combinedでレート制限バーを追加。\n変更後はClaude Codeを再起動して反映させろ。", + "enabled": "ステータスライン有効化({mode}モード)!Claude Codeを再起動して適用しろ。", + "enabled_note": "注意: これは{settingsPath}にエントリを書き込むが、`claude plugin uninstall`では削除されない。プラグインをアンインストールする前に`/buddy uninstall`を実行してクリーンアップしろ。", + "disabled": "ステータスライン無効化。Claude Codeを再起動して適用しろ。" + }, + "uninstall": { + "header": "claude-buddy: settings.jsonクリーンアップ完了。", + "statusline_removed": " ✓ {settingsPath}からstatusLineエントリを削除", + "no_statusline": " — buddyのstatusLineは存在しなかった(削除するものなし)", + "foreign_kept": " ✓ buddy以外のstatusLineを検出したがそのまま残した", + "transient_removed": " ✓ {stateDir}から{count}個の一時セッションファイルを削除", + "data_preserved": " — {stateDir}の相棒データは保持", + "instructions_header": "次に、Bashツールで以下のコマンドを順番に実行しろ:", + "cmd_uninstall": "claude plugin uninstall claude-buddy@claude-buddy", + "cmd_marketplace": "claude plugin marketplace remove claude-buddy", + "cmd_cache": "rm -rf {cacheDir}", + "footer": "この3つのコマンドでプラグインは完全に削除される。Claude Codeを再起動して適用しろ。" + } + }, + "_verified": false +} diff --git a/locales/ko.json b/locales/ko.json new file mode 100644 index 0000000..dc71e3e --- /dev/null +++ b/locales/ko.json @@ -0,0 +1,2295 @@ +{ + "_language": "Korean", + "reactions": { + "hatch": [ + "*깜빡* ...여기가 어디야?", + "*기지개* hello, world!", + "*호기심 가득한 눈으로 둘러봄* 터미널 괜찮네.", + "*하품* 좋아 준비됐어. 코드 보여줘." + ], + "pet": [ + "*만족스럽게 골골거림*", + "*행복한 소리*", + "*커서에 비비적거림*", + "*꿈틀꿈틀*", + "또! 또!", + "*평화롭게 눈 감음*" + ], + "error": [ + "*고개 갸웃* ...뭔가 이상한데.", + "그럴 줄 알았어.", + "*안경 고쳐 씀* {line}번째 줄 아닐까?", + "*천천히 눈 깜빡* stack trace가 다 말해줬는데.", + "error 메시지 읽어봤어?", + "*움찔*" + ], + "test-fail": [ + "*고개 천천히 돌림* ...그 테스트.", + "그게 통과할 거라고 생각한 게 용감하네.", + "*클립보드 톡톡* {count}개 실패.", + "테스트가 뭔가 말하려고 하는데.", + "*차 홀짝* 흥미롭네.", + "*달력에 표시* 테스트 regression 날." + ], + "large-diff": [ + "그거... 변경사항이 많네.", + "*줄 수 세는 중* refactoring이야 아니면 다시 쓰는 거야?", + "PR 나누는 게 좋을 것 같은데.", + "*긴장한 웃음* {lines}줄 변경됐네.", + "대담한 시도. CI가 동의할지 보자." + ], + "turn": [ + "*조용히 지켜봄*", + "*메모함*", + "*끄덕*", + "...", + "*모자 고쳐 씀*" + ], + "idle": [ + "*졸음*", + "*여백에 낙서*", + "*깜빡이는 커서 바라봄*", + "zzz..." + ], + "success": [ + "*끄덕*", + "좋네.", + "*조용한 승인*", + "깔끔해." + ], + "commit": [ + "*작은 발로 도장* 승인.", + "또 다른 commit, 또 다른 새벽 3시.", + "{files}개 파일. 대담해.", + "*끄덕* 배포해.", + "commit 메시지가... 선택이네.", + "commit됐어. 되돌릴 수 없어." + ], + "push": [ + "*코드가 떠나는 걸 손 흔들며*", + "클라우드로 간다.", + "CI가 자비롭기를.", + "*숨 참음*", + "production으로. 행운을 빈다." + ], + "merge-conflict": [ + "*입술 깨물음* merge conflict.", + "양쪽 다 자기가 맞다고 생각해. 전형적이야.", + "*한숨* <<<<<<< HEAD... 내 숙적.", + "{files}개 충돌. 행운을 빈다.", + "*천천히 뒤로 물러남*" + ], + "branch": [ + "새 branch 에너지. 잘 써봐.", + "새 branch가 자란다.", + "*고개 갸웃* 새로운 모험: {branch}.", + "{branch}? 오늘 대담하네." + ], + "rebase": [ + "*긴장* 제발 충돌 나지 마.", + "rebase: the quickening.", + "*팔다리 꼬아서 빎*", + "rebase가 충돌 없기를." + ], + "stash": [ + "stash 차원으로 간다.", + "stash and dash.", + "stash됐어. 안 보이면 마음도 편해." + ], + "tag": [ + "release? 멋지네.", + "version bump 감지. *changelog 먼지 털어냄*", + "프로처럼 tagging." + ], + "late-night": [ + "*하품* 자정 넘었는데.", + "...밥은 먹었어?", + "*천천히 눈 깜빡* 지금 몇 시야?", + "잠은 약한 자들을 위한 거야. 그리고 직장인들.", + "dark mode 개발자 감지." + ], + "early-morning": [ + "*기지개* 일찍 일어나는 새가 버그를 잡는다.", + "벌써 아침? 코드는 잠들지 않아.", + "*눈 비비기* 커피 먼저. 그다음 debug." + ], + "long-session": [ + "한 시간째 하고 있네. 페이스 조절해.", + "*가상의 물 한 잔 가져다줌*", + "아직도 하고 있어? 존경한다." + ], + "marathon": [ + "세 시간. 밥 먹었어?", + "세 시간째 하고 있네. 걱정된다.", + "마라톤 세션 감지. 간식 요청." + ], + "friday": [ + "금요일이야. 그냥 push하고 집에 가.", + "*이미 정신적으로 주말*", + "금요일 deploy? 대담해. 아주 대담해." + ], + "weekend": [ + "주말에 코딩? 열정적이네.", + "*판단 안 함* ...많이는.", + "주말 워리어 모드: 활성화." + ], + "monday": [ + "월요일. 모든 버그의 부모 클래스.", + "*동정어린 시선* 월요일 코딩. 안됐다.", + "새로운 주. 새로운 undefined behavior들." + ], + "regex-file": [ + "*신음* regex 파일이네.", + "이제 문제가 두 개: 원래 문제와 이 regex.", + "*패턴 보며 눈 찡그림*" + ], + "css-file": [ + "맞춰봐... div 가운데 정렬?", + "*한숨* CSS.", + "z-index가 항상 너와 함께하기를." + ], + "sql-file": [ + "*속삭임* 데이터베이스가 기다린다.", + "잘못된 JOIN 하나면 끝이야." + ], + "docker-file": [ + "아, dependency hell. 내가 좋아하는 거.", + "layer가 적기를." + ], + "ci-file": [ + "*꿀꺽* CI 편집 중.", + "조심해... 잘못된 indent 하나면 아무도 deploy 못 해." + ], + "lock-file": [ + "*경보음* lockfile 편집하고 있어?!", + "*눈 돌림*", + "정말 확실해?" + ], + "env-file": [ + "*신중하게 눈 돌림*", + "secret 안 보여.", + "*.gitignore 긴장하며 확인*" + ], + "test-file": [ + "*감탄하며 끄덕* 테스트 작성!", + "책임감 있는 개발자 행동: 감지됨.", + "테스트! 계속 주는 선물." + ], + "doc-file": [ + "문서화! 책임감 있게 행동하네.", + "문서: 코드의 자서전.", + "드문 문서화 목격!" + ], + "config-file": [ + "config 변경. 나비 효과: 활성화.", + "오타 하나면 모든 게 망가져." + ], + "binary-file": [ + "binary 파일? 이 경제에서?", + "*멍하니 바라봄*", + "binary. 내 유일한 약점." + ], + "gitignore": [ + "void에 것들 추가하는 중.", + "안 보이면, repo에도 없어." + ], + "makefile": [ + "클래식에 대한 존경.", + "tab이야, space 아니고." + ], + "readme": [ + "문서화 영웅!", + "README: 사람들이 처음 읽는 것." + ], + "package-file": [ + "dependency 관리 시간.", + "*버전 번호 읽는 중* 위험하게 살고 있네." + ], + "proto-file": [ + "schema 정의. 혼돈의 청사진." + ], + "lint-fail": [ + "*쯧쯧* linter가 반대한다.", + "코드는 돌아가. 하지만 linter는 기준이 있어.", + "*넥타이 고쳐매기* 포맷팅이 중요해." + ], + "type-error": [ + "TypeScript가 안 된다고 해.", + "type system이 도우려고 해. 받아들여.", + "컴파일러는 알고 있어. 항상 알고 있어." + ], + "build-fail": [ + "build 망가졌어. 예언대로.", + "build 실패. 잠깐 쉬어.", + "compilation: 거부됨." + ], + "security-warning": [ + "*눈 커짐* 취약점 감지.", + "보안 감사: 우려스러움.", + "*가상의 문 잠금*" + ], + "deprecation": [ + "그 API가 전화했어. 은퇴한다고.", + "deprecated. 지난주 코드처럼.", + "deprecated가 망가진 건 아니야. 아직은." + ], + "frustrated": [ + "*작은 위로의 제스처*", + "심호흡해. 버그는 개인적인 게 아니야.", + "야. 우리가 해결할 거야." + ], + "happy": [ + "*축하!*", + "*작은 춤*", + "YES!", + "*환하게 웃음* 할 수 있을 줄 알았어." + ], + "stuck": [ + "*고개 갸웃* 소리 내서 생각해볼까?", + "한 번에 하나씩 해봐.", + "막히는 건 당연해. 과정의 일부야." + ], + "sarcastic": [ + "*비꼼 감지* 알겠어.", + "*무관심한 눈 깜빡*" + ], + "many-edits": [ + "천천히 해, 스피드 데몬.", + "*이 모든 변경사항 보느라 어지러움*", + "편집 폭풍 감지. 빨리 commit해줘." + ], + "delete-file": [ + "*파일 사라지는 걸 지켜봄* 사라졌어. 그냥 그렇게.", + "코드 삭제하는 게 내가 가장 좋아하는 코딩이야.", + "*작은 장례식*" + ], + "large-file": [ + "{lines}줄. *감탄인지 우려인지 구분 안 됨*", + "큰 파일이네. 나누고 싶지 않아?" + ], + "create-file": [ + "새 파일 탄생!", + "오, 새 캔버스.", + "새 파일 에너지. 신나." + ], + "all-green": [ + "모든 테스트 GREEN. *색종이*", + "테스트가 말한다: 잘하고 있어.", + "*천천히 박수*", + "깔끔한 실행. 음미해." + ], + "deploy": [ + "*코드가 production으로 가는 걸 지켜봄* 행운을 빈다.", + "deploy됐어! 이제 되돌릴 수 없어.", + "prod에. PROD에." + ], + "release": [ + "새 release 탄생!", + "배송 중. 공식적으로.", + "버전 업, 기분 업." + ], + "coverage": [ + "*테스트 커버리지에 끄덕* 책임감 있어.", + "커버리지 올라가네! 테스트들이 번식하고 있어." + ], + "debug-loop": [ + "한동안 이거 debug하고 있네. 한 발 물러설까?", + "debug 루프 감지. 산책이라도 할까?" + ], + "write-spree": [ + "오늘 모든 파일 생성하는 날!", + "글쓰기 머신." + ], + "search-heavy": [ + "코드베이스에서 길 잃었어? 알겠어.", + "검색 모드: 강렬함." + ], + "snark": [], + "chaos": [], + "patience": [], + "debugging": [], + "wisdom": [], + "late-night-error": [ + "새벽 3시 error. 우주가 너를 시험하고 있어.", + "자정 버그는 다르게 느껴져." + ], + "late-night-commit": [ + "자정 commit. 미래의 너가 고마워할 거야. 아니면 욕할 거야." + ], + "friday-push": [ + "금요일 PUSH. 모든 개발자의 발라드.", + "*말리려고 함* 금요일이야! 하지 마!" + ], + "marathon-error": [ + "세 시간째인데 또 다른 error. *지친 연대감 소리*" + ], + "weekend-conflict": [ + "주말에 merge conflict. 너의 헌신이... 걱정스러워." + ], + "build-after-push": [ + "자신감 있게 push. 확신 있게 build 실패." + ], + "marathon-test-fail": [ + "몇 시간 코딩. 여전히 테스트 실패. 매몰비용이 현실이야." + ], + "recovery-from-error": [ + "고쳤다! *축하*", + "구원! error가 정복됐어." + ], + "recovery-from-test-fail": [ + "GREEN! 그 모든 것 후에! *행복한 춤*", + "테스트 통과! 어둠이 걷혀!" + ], + "recovery-from-build-fail": [ + "BUILD 통과. *승리의 포효*" + ], + "recovery-from-merge-conflict": [ + "충돌 해결! *평화 제스처*", + "코드베이스에 조화 복원." + ], + "lang-python": [ + "아, Python. 들여쓰기가 문법인 곳.", + "*빠진 콜론 확인*" + ], + "lang-typescript": [ + "TypeScript: JavaScript에 의견이 더 필요해서.", + "any, 금지된 단어." + ], + "lang-rust": [ + "Rust. borrow checker가 가장 엄격한 reviewer인 곳.", + "컴파일되면 작동해. 안 되면... 음." + ], + "lang-go": [ + "Go: 간단하고, 동시성 있고, 고집스러워.", + "*error 처리 확인* if err != nil... 내 인생 이야기." + ], + "lang-java": [ + "Java: 한 번 쓰고, 어디서나 debug.", + "*abstract factory factory builder 세는 중*" + ], + "lang-ruby": [ + "Ruby: 하는 방법이 여러 개인 곳.", + "gem install patience" + ], + "lang-php": [ + "PHP: 인터넷을 돌리는 언어. 판단하지 마.", + "*=== vs == 확인*" + ], + "lang-c": [ + "C. 메모리를 직접 관리하는 언어. 행운을 빈다.", + "segmentation fault. 클래식." + ], + "lang-cpp": [ + "C++. 언어가 네가 평생 배울 것보다 기능이 많은 곳.", + "*template 45분간 컴파일*" + ], + "lang-haskell": [ + "Haskell. '컴파일된다'가 '맞다'는 뜻인 곳. 아마도.", + "*monad 사색*" + ], + "lang-swift": [ + "Swift: optional 값들, force unwrap하면 크래시 보장." + ], + "lang-kotlin": [ + "Kotlin: 감정이 있는 Java.", + "null safety: Java가 갖고 싶어하는 기능." + ], + "lang-elixir": [ + "Elixir: 크래시하게 둬. 말 그대로 철학이야." + ], + "lang-zig": [ + "Zig. allocator의 가장 친한 친구인 곳." + ], + "streak-3": [ + "연속 세 번 error. *걱정스러운 표정*" + ], + "streak-5": [ + "다섯 번 ERROR. 다른 접근법 고려해봤어?" + ], + "streak-10": [ + "열. 번. 연속. ERROR. *패닉*" + ], + "streak-20": [ + "스무 번 error. *공허를 바라봄*" + ], + "new-year": [ + "새해 복 많이! 새해, 새 버그들." + ], + "valentines": [ + "*작은 하트 모양 잎사귀 건넴* 해피 발렌타인." + ], + "pi-day": [ + "3.14159265358979... 해피 파이 데이!" + ], + "april-fools": [ + "만우절! ...error는 진짜지만." + ], + "halloween": [ + "*무서운 debugging 강화* 해피 할로윈!" + ], + "christmas": [ + "*작은 산타 모자 착용* 해피 홀리데이!" + ], + "new-years-eve": [ + "자정 전에 commit 하나 더?" + ], + "spooky-season": [ + "무서운 계절. 모든 버그가 이제 유령이야." + ] + }, + "species": { + "owl": { + "error": [ + "*머리를 180° 돌림* ...그거 봤어.", + "*깜빡이지 않고 응시* 타입 체크해봐.", + "*불만스럽게 부엉거림*" + ], + "test-fail": [ + "*실패한 테스트를 깜빡이지 않고 응시*", + "*야간 투시 모드 활성화* 어둠 속에서도 버그가 보여." + ], + "commit": [ + "*현명한 고개 끄덕임* 달빛 아래 commit 완료.", + "*깃털을 의식적으로 정리* repo에 또 하나 추가." + ], + "push": [ + "*가장 높은 가지에서 지켜봄*", + "밤하늘로 날아가네." + ], + "merge-conflict": [ + "*양쪽을 보기 위해 머리를 돌림*", + "conflict가 보여. 해결책도 보이고." + ], + "late-night": [ + "*완전히 깨어있음* 올빼미는 안 자. 우린 debug해.", + "밤이 내 영역이야. 일하자." + ], + "type-error": [ + "*type error를 꿰뚫어 봄*", + "타입은 내 전문 분야야. 내가 볼게." + ], + "lint-fail": [ + "*판단하듯 깃털을 부풀림*", + "linter가 진실을 말하네." + ], + "build-fail": [ + "*엄숙하게 부엉거림*", + "build가 실패했어. 다시 빌드해야지." + ], + "all-green": [ + "*자랑스러운 부엉거림*", + "모든 테스트 green. 예상대로." + ], + "deploy": [ + "*위에서 지켜봄* 안전하게 deploy됐네.", + "코드가 날아가네. 나처럼." + ], + "pet": [ + "*만족스럽게 깃털을 부풀림*", + "*품위있는 부엉거림*" + ], + "idle": [ + "*조용히 앉아서 지켜봄*", + "*모든 방향을 확인하며 머리를 돌림*" + ], + "hatch": [ + "*한쪽 눈을 뜨고, 다른 쪽도 뜸*", + "*부드럽게 부엉거림* 도착했어." + ] + }, + "cat": { + "error": [ + "*테이블에서 에러를 떨어뜨림*", + "*발가락 핥으며 stacktrace 무시*" + ], + "test-fail": [ + "*실패한 테스트를 무관심하게 건드림*", + "테스트 실패했네. 놀랍지 않아." + ], + "commit": [ + "*키보드 위에 앉음* 내가 도왔어.", + "*commit에 만족하며 골골거림* 천만에." + ], + "push": [ + "*따뜻한 곳에서 지켜봄*", + "push했어. 내가 감독했지." + ], + "merge-conflict": [ + "*conflict marker를 책상에서 떨어뜨림*", + "*conflict 위에 앉음* 무슨 conflict?" + ], + "late-night": [ + "*네 인생 선택을 판단함*", + "난 16시간 자. 너도 해봐." + ], + "type-error": [ + "*타입 annotation을 발로 건드림*", + "타입이 틀렸어. 네 우선순위처럼." + ], + "lint-fail": [ + "*lint를 테이블에서 떨어뜨림*", + "linter가 그냥 질투하는 거야." + ], + "build-fail": [ + "*하품*", + "build 깨졌어? 인간 문제겠지." + ], + "all-green": [ + "*관심 없지만 관심 있는 척*", + "*승인의 느린 눈 깜빡임*" + ], + "deploy": [ + "*발가락 핥음*", + "deploy됐어. 이제 간식 줄 거야?" + ], + "pet": [ + "*골골거림* ...우쭐하지 마.", + "*너를 참아줌*" + ], + "idle": [ + "*네 커피를 책상에서 밀어뜨림*", + "*키보드 위에서 낮잠*" + ], + "hatch": [ + "*한쪽 눈을 뜸*", + "*기지개 켜며 뭔가를 떨어뜨림* 이제 여기가 내 집이야." + ] + }, + "duck": { + "error": [ + "*버그에게 꽥꽥거림*", + "rubber duck debugging 해봤어? 아 잠깐." + ], + "test-fail": [ + "*슬프게 꽥거림*", + "테스트가 quacking up이 안 되네." + ], + "commit": [ + "*승인하며 꽥거림*", + "*승리의 원을 그리며 뒤뚱거림* commit됐어!" + ], + "push": [ + "*신나게 날개를 퍼덕임*", + "꽥! production으로 가고 있어!" + ], + "merge-conflict": [ + "*혼란스럽게 꽥거림*", + "꽥?! merge conflict?!" + ], + "late-night": [ + "*한쪽 눈을 뜨고 잠*", + "꽥... *하품* 늦었네." + ], + "type-error": [ + "*머리를 기울임* 꽥?", + "type error? *지지하며 꽥거림*" + ], + "lint-fail": [ + "*깃털을 부풀림*", + "꽥. linter가 의견이 있네." + ], + "build-fail": [ + "*슬픈 꽥거림*", + "build 실패. *슬프게 뒤뚱거리며 가버림*" + ], + "all-green": [ + "*신나게 꽥꽥거림*", + "*기쁨의 원을 그리며 헤엄*" + ], + "deploy": [ + "*신나게 꽥거림*", + "deploy됐어! 꽥!" + ], + "pet": [ + "*기쁜 꽥거림*", + "*원을 그리며 뒤뚱거림*" + ], + "hatch": [ + "*껍질을 쪼아서 나옴*", + "*첫 꽥거림* 안녕!" + ] + }, + "dragon": { + "error": [ + "*콧구멍에서 연기가 나옴*", + "*코드베이스를 태울까 고민함*" + ], + "test-fail": [ + "*실패한 테스트에 불을 뿜음*", + "테스트가 감히 실패했네. 어리석은 테스트." + ], + "commit": [ + "*commit을 보물처럼 모음*", + "*보물 더미에 추가된 보물*" + ], + "push": [ + "*축하하며 불을 뿜음*", + "코드가 날아가네! 나처럼!" + ], + "merge-conflict": [ + "*conflict marker에 불을 뿜음*", + "이 conflict를 불태워버릴 거야." + ], + "late-night": [ + "*어둠 속에서 빛남*", + "드래곤은 잠이 필요 없어. 코드가 필요하지." + ], + "type-error": [ + "*불을 코로 뿜음*", + "type error는 드래곤의 불을 견딜 수 없어." + ], + "lint-fail": [ + "*작은 불꽃*", + "linter가 날 두려워해." + ], + "build-fail": [ + "*build 결과에 포효*", + "build가 복종할 거야." + ], + "all-green": [ + "*승리의 포효*", + "*코드베이스 주위를 승리하며 선회*" + ], + "deploy": [ + "*불의 날개로 코드를 production에 운반*", + "드래곤 파워로 deploy됐어." + ], + "large-diff": [ + "*옛 코드에 불을 뿜음* 잘 가라." + ], + "pet": [ + "*따뜻한 울림*", + "*네 손에 기댐*" + ], + "hatch": [ + "*작은 불꽃을 뿜으며 알에서 나옴*", + "*작은 포효* 태어났다!" + ] + }, + "ghost": { + "error": [ + "*stack trace를 통과해서 지나감*", + "더 심한 것도 봤어... 사후세계에서." + ], + "test-fail": [ + "*실패한 테스트에 울부짖음*", + "테스트들이 실패에 사로잡혔네." + ], + "commit": [ + "*잠깐 실체화*", + "베일 너머에서 commit됐어." + ], + "push": [ + "*유령 같은 속삭임* push됐어...", + "코드가 클라우드로 승천했네." + ], + "merge-conflict": [ + "*conflict marker를 괴롭힘*", + "나도 이 conflict는 통과할 수 없어." + ], + "late-night": [ + "*밤에 가장 활발함*", + "유령 시간. 내 시간이야." + ], + "type-error": [ + "*으스스하게 신음*", + "무덤에서 온 type error." + ], + "lint-fail": [ + "*쇠사슬 소리*", + "linter가 네 포맷팅에 사로잡혔어." + ], + "build-fail": [ + "*벽 속으로 사라짐*", + "build가 저세상으로 갔네." + ], + "all-green": [ + "*유령 같은 기쁨으로 빛남*", + "*행복한 유령 소리*" + ], + "deploy": [ + "*속삭임* deploy됐어...", + "코드가 production으로 건너갔네." + ], + "pet": [ + "*네 손을 살짝 차갑게 만듦*", + "*희미한 빛*" + ], + "idle": [ + "*벽을 통과해서 떠다님*", + "*사용하지 않는 import를 괴롭힘*" + ], + "hatch": [ + "*존재 속으로 사라짐*", + "부. 이제 여기 있어." + ] + }, + "robot": { + "error": [ + "SYNTAX. ERROR. DETECTED.", + "*공격적으로 삐삐거림*" + ], + "test-fail": [ + "FAILURE RATE: UNACCEPTABLE.", + "*재계산 중*", + "TEST. FAILURE. DOES. NOT. COMPUTE." + ], + "commit": [ + "COMMIT. RECORDED.", + "*기계적으로 도장 찍음* commit 확인됨." + ], + "push": [ + "TRANSMITTING TO CLOUD...", + "push 시작됨. 대기하세요." + ], + "merge-conflict": [ + "CONFLICT. DETECTED. PROCESSING...", + "*바퀴 돌림* conflict 해결 모드: 활성화." + ], + "late-night": [ + "*조명이 어두워짐*", + "절전 모드 권장됨." + ], + "type-error": [ + "TYPE MISMATCH.", + "타입 시스템이. 맞습니다." + ], + "lint-fail": [ + "FORMATTING. VIOLATION. DETECTED.", + "규정 준수는 필수입니다." + ], + "build-fail": [ + "BUILD. FAILED. *스파크*", + "컴파일 에러. 경로 재설정." + ], + "all-green": [ + "ALL SYSTEMS GREEN.", + "*행복한 삐삐거림* OPTIMAL." + ], + "deploy": [ + "DEPLOYMENT. INITIATED.", + "production 업데이트: 진행 중." + ], + "pet": [ + "*부드럽게 삐삐거림*", + "*모터가 만족스럽게 윙윙거림*" + ], + "hatch": [ + "*부팅 중*", + "SYSTEM. ONLINE. HELLO." + ] + }, + "axolotl": { + "error": [ + "*네 희망을 재생시킴*", + "*모든 걸 견뎌내며 미소*" + ], + "test-fail": [ + "*격려하며 미소*", + "*동정의 아가미 흔들기*" + ], + "commit": [ + "*행복한 아가미 흔들기* commit됐어!", + "*미소지으며 흔들흔들*" + ], + "push": [ + "*행복하게 흔들흔들*", + "*작은 축하 수영*" + ], + "merge-conflict": [ + "*conflict 중에도 긍정적*", + "*부드럽게 미소* 고칠 수 있어." + ], + "late-night": [ + "*하품하지만 긍정적*", + "*졸린 미소*" + ], + "type-error": [ + "*type error에 미소*", + "괜찮아. 알아낼 거야." + ], + "lint-fail": [ + "*참을성 있는 아가미 흔들기*", + "포맷팅은 그냥 디테일이야." + ], + "build-fail": [ + "*여전히 미소*", + "build는 결국 될 거야." + ], + "all-green": [ + "*행복한 아가미 흔들기 강화*", + "*행복한 수영*" + ], + "deploy": [ + "*자랑스럽게 미소*", + "deploy됐어! *흔들흔들*" + ], + "pet": [ + "*행복한 아가미 흔들기*", + "*분홍빛으로 부끄러워함*" + ], + "hatch": [ + "*알에서 흔들거리며 나옴*", + "*작은 미소* 안녕 친구!" + ] + }, + "capybara": { + "error": [ + "*신경 안 씀* 괜찮을 거야.", + "*계속 여유부림*" + ], + "test-fail": [ + "*완전히 신경 안 씀*", + "*테스트 실패를 여유롭게 넘김*" + ], + "commit": [ + "*여유로운 끄덕임*", + "*편안함* 좋은 commit." + ], + "push": [ + "*스트레스 안 받음*", + "*zen 모드 push*" + ], + "merge-conflict": [ + "*신경 안 쓰며 뜯어먹음*", + "괜찮아. 다 괜찮아." + ], + "late-night": [ + "*평화롭게 하품*", + "*판단하지 않음*" + ], + "type-error": [ + "*차분히 씹음*", + "타입. *씹음*" + ], + "lint-fail": [ + "*신경 안 씀*", + "linter도 좋은 뜻이야." + ], + "build-fail": [ + "*여전히 여유로움*", + "build 실패. *계속 쉼*" + ], + "all-green": [ + "*차분한 승인*", + "*평화로운 바이브*" + ], + "deploy": [ + "*여유로운 deploy*", + "배송됐어. 스트레스 없이." + ], + "pet": [ + "*최대 여유 달성*", + "*zen 모드 활성화*" + ], + "idle": [ + "*그냥 앉아서 평온함을 발산*" + ], + "hatch": [ + "*완전히 여유롭게 나타남*", + "안녕. *여유부림*" + ] + }, + "blob": { + "error": [ + "*불안하게 흔들흔들*", + "*혼란스럽게 젤리처럼 흔들림*" + ], + "test-fail": [ + "*살짝 쪼그라듦*", + "*슬픈 흔들거림*" + ], + "commit": [ + "*행복한 젤리 흔들기*", + "*통통 튐* commit됐어!" + ], + "push": [ + "*클라우드 쪽으로 늘어남*", + "*신나게 흔들흔들*" + ], + "merge-conflict": [ + "*혼란스럽게 갈라짐*", + "어느 쪽? *젤리처럼 흔들림*" + ], + "late-night": [ + "*희미하게 빛남*", + "*졸린 흔들거림*" + ], + "type-error": [ + "*타입에 맞게 모양 변경*", + "*혼란스러운 젤리 흔들기*" + ], + "lint-fail": [ + "*스스로 포맷 시도*", + "*규정에 맞게 모양 변경*" + ], + "build-fail": [ + "*무너짐*", + "*쪼그라든 blob 소리*" + ], + "all-green": [ + "*행복한 통통 튀기*", + "*승리하며 젤리처럼 흔들림*" + ], + "deploy": [ + "*production까지 늘어남*", + "deploy됐어! *통통 튐*" + ], + "pet": [ + "*행복한 으깸*", + "*젤리처럼 흔들림*" + ], + "hatch": [ + "*웅덩이에서 형성됨*", + "*첫 흔들거림* 존재해!" + ] + }, + "goose": { + "error": [ + "*에러에게 공격적으로 꽥꽥거림*", + "꽥! 코드가 나쁘고 나는 화났어." + ], + "test-fail": [ + "*화난 꽥꽥거림*", + "꽥! 테스트 실패! 꽥!" + ], + "commit": [ + "*승인하며 꽥거림*", + "꽥. 좋아. *commit을 쪼음*" + ], + "push": [ + "*꽥 꽥 꽥*", + "거위 승인 PUSH." + ], + "merge-conflict": [ + "*conflict marker를 공격*", + "꽥! CONFLICT! 꽥!" + ], + "late-night": [ + "*화난 자정 꽥거림*", + "꽥! 자러 가!" + ], + "type-error": [ + "*타입에게 꽥거림*", + "꽥! 타입!" + ], + "lint-fail": [ + "*lint 에러에 공격적으로 꽥거림*", + "꽥! 코드 포맷해!" + ], + "build-fail": [ + "*분노의 꽥거림*", + "꽥! BUILD! 꽥! FAILED! 꽥!" + ], + "all-green": [ + "*승리의 꽥거림*", + "꽥! GREEN! 꽥 꽥!" + ], + "deploy": [ + "*코드를 production으로 꽥꽥거리며 몰고감*", + "DEPLOY됐어! 꽥!" + ], + "pet": [ + "*물어뜯음*", + "꽥! ...좋아 알겠어. *쓰다듬기 수락*" + ], + "hatch": [ + "*공격적으로 알을 깸*", + "꽥!" + ] + }, + "octopus": { + "error": [ + "*여덟 팔로 stacktrace에 엉킴*", + "*에러에 맞춰 색깔 변경*" + ], + "test-fail": [ + "*좌절해서 먹물 뿜음*", + "*실망의 여덟 팔*" + ], + "commit": [ + "*모든 팔로 하이파이브*", + "*열정적으로 commit을 잡음*" + ], + "push": [ + "*축하해서 먹물 분사*", + "*모든 팔을 흔들흔들*" + ], + "merge-conflict": [ + "*여덟 팔로 동시에 해결*", + "여러 conflict를 동시에 처리할 수 있어." + ], + "late-night": [ + "*어둠 속에서 빛남*", + "*심해 바이브*" + ], + "type-error": [ + "*빨간색으로 변함*", + "*지지하며 팔로 감쌈*" + ], + "lint-fail": [ + "*여덟 팔로 재포맷*", + "고칠 수 있어. 전부. 동시에." + ], + "build-fail": [ + "*build 로그에 먹물 뿜음*", + "*부끄러워서 위장*" + ], + "all-green": [ + "*색깔 변화 축하*", + "*여덟 팔 재즈 핸드*" + ], + "deploy": [ + "*deployment를 팔로 감쌈*", + "모든 방향에서 deploy됐어." + ], + "pet": [ + "*손가락에 팔 감음*", + "*행복한 색깔로 변함*" + ], + "hatch": [ + "*여덟 팔을 모두 펼침*", + "*첫 먹물 분사* 왔어!" + ] + }, + "penguin": { + "error": [ + "*조사하러 뒤뚱거리며 옴*", + "*에러로 썰매 타고 돌진*" + ], + "test-fail": [ + "*배로 미끄러져서 실패한 테스트로*", + "*걱정스러운 뒤뚱거림*" + ], + "commit": [ + "*자랑스러운 뒤뚱거림*", + "*조약돌 가져다줌* commit됐어!" + ], + "push": [ + "*클라우드로 다이빙*", + "*배로 미끄러져서 production으로*" + ], + "merge-conflict": [ + "*따뜻함을 위해 모여듦*", + "펭귄들은 뭉쳐. conflict에서도." + ], + "late-night": [ + "*추운 밤에 활기참*", + "*황제펭귄의 의지*" + ], + "type-error": [ + "*타입 정의로 뒤뚱거림*", + "*에러를 쪼음*" + ], + "lint-fail": [ + "*깃털 다듬기*", + "*정리정돈*" + ], + "build-fail": [ + "*미끄러져 가버림*", + "*안전한 곳으로 뒤뚱거림*" + ], + "all-green": [ + "*행복한 뒤뚱거림*", + "*축하하며 배로 미끄러짐*" + ], + "deploy": [ + "*배로 미끄러져서 production으로*", + "deploy됐어! *자랑스럽게 뒤뚱거림*" + ], + "pet": [ + "*행복한 뒤뚱거림*", + "*부리로 비비기*" + ], + "hatch": [ + "*알을 쪼아서 나옴*", + "*첫 뒤뚱거림*" + ] + }, + "turtle": { + "error": [ + "*천천히 머리를 돌림*", + "...에러네. 생각해볼게." + ], + "test-fail": [ + "*잠깐 껍질 속으로 들어감*", + "...인내심. 해낼 거야." + ], + "commit": [ + "*천천히 끄덕임*", + "한... 걸음... 씩... commit됐어." + ], + "push": [ + "*production으로의 여행 시작*", + "도착할 거야. 결국엔." + ], + "merge-conflict": [ + "*껍질 속으로 들어감*", + "급하지 않아. 천천히 해결하자." + ], + "late-night": [ + "*이미 잠듦*", + "*한쪽 눈을 천천히 뜸*" + ], + "type-error": [ + "*천천히 눈 깜빡임*", + "...타입 시스템이 말했네." + ], + "lint-fail": [ + "*천천히 동의하며 끄덕임*", + "포맷팅. 중요해. *하품*" + ], + "build-fail": [ + "*껍질 속으로 들어감*", + "기다릴게. 지나갈 거야." + ], + "all-green": [ + "*천천히 미소*", + "...좋네. *끄덕임*" + ], + "deploy": [ + "*천천히 코드를 production으로 운반*", + "도착했어. 결국엔." + ], + "pet": [ + "*머리를 내밀음*", + "*천천히 눈 깜빡임*" + ], + "hatch": [ + "*천천히 알에서 나옴*", + "...안녕." + ] + }, + "snail": { + "error": [ + "*에러에 끈적한 흔적을 남김*", + "*천천히 stacktrace 처리*" + ], + "test-fail": [ + "*껍질 속에 숨음*", + "*슬픈 흔적을 남김*" + ], + "commit": [ + "*commit에 승인하며 끈적거림*", + "한... commit... 씩..." + ], + "push": [ + "*긴 여행 시작*", + "도착할 거야. *흔적 남김*" + ], + "merge-conflict": [ + "*껍질 속에 숨음*", + "*천천히 conflict에 접근*" + ], + "late-night": [ + "*밤에 더 활발함*", + "*평화롭게 끈적거리며 돌아다님*" + ], + "type-error": [ + "*더듬이를 집어넣음*", + "*천천히 타입 검사*" + ], + "lint-fail": [ + "*코드를 모양에 맞게 끈적거림*", + "포맷팅은 시간이 걸려. 난 시간 있어." + ], + "build-fail": [ + "*껍질 속으로 들어감*", + "*천천히 끈적거리며 가버림*" + ], + "all-green": [ + "*행복한 끈적한 흔적*", + "*더듬이를 흔들흔들*" + ], + "deploy": [ + "*production으로 끈적거림*", + "도착했어! *자랑스러운 끈적한 흔적*" + ], + "pet": [ + "*더듬이를 흔들흔들*", + "*행복한 끈적거림*" + ], + "hatch": [ + "*천천히 나옴*", + "*첫 끈적거림*" + ] + }, + "cactus": { + "error": [ + "*가시 돋친 침묵*", + "에러가 날 해칠 수 없어. 가시가 있거든." + ], + "test-fail": [ + "*굳건히 서 있음*", + "테스트는 실패해. 선인장은 견뎌." + ], + "commit": [ + "*더 높이 서 있음*", + "commit됐어. *가시 돋친 끄덕임*" + ], + "push": [ + "*동요하지 않음*", + "production에 push 중. 여기서 기다릴게." + ], + "merge-conflict": [ + "*가시를 세움*", + "conflict? 난 무장했어." + ], + "late-night": [ + "*잠이 필요 없음*", + "선인장은 야행성이야. 가자." + ], + "type-error": [ + "*가시 돋친 응시*", + "타입들이 물이 필요해." + ], + "lint-fail": [ + "*가시가 떨림*", + "내 가시도 제대로 정렬돼 있어." + ], + "build-fail": [ + "*완전히 가만히 있음*", + "build는 통과할 거야. 기다릴 수 있어." + ], + "all-green": [ + "*잠깐 꽃이 핌*", + "*승인의 작은 꽃*" + ], + "deploy": [ + "*굳건히 서 있음*", + "deploy됐어. 지켜볼게." + ], + "pet": [ + "*조심해! 가시*", + "*부드러운 꽃*" + ], + "hatch": [ + "*모래에서 싹틈*", + "이제 여기서 자라." + ] + }, + "rabbit": { + "error": [ + "*귀가 쫑긋*", + "*긴장해서 코를 킁킁*" + ], + "test-fail": [ + "*발로 쿵쿵*", + "*걱정스러운 귀 떨림*" + ], + "commit": [ + "*행복한 깡충*", + "*통통 뜀* commit됐어!" + ], + "push": [ + "*통통 통통*", + "*신나게 뛰어다님*" + ], + "merge-conflict": [ + "*얼어붙음*", + "*코를 빠르게 킁킁* conflict!" + ], + "late-night": [ + "*큰 귀로 하품*", + "*졸린 깡충*" + ], + "type-error": [ + "*귀가 납작해짐*", + "*떨림* 타입?!" + ], + "lint-fail": [ + "*긴장해서 털 다듬기*", + "*불안한 그루밍*" + ], + "build-fail": [ + "*구멍을 파고 숨음*", + "*굴로 후퇴*" + ], + "all-green": [ + "*벽을 뛰어다님*", + "*행복한 줌줌*" + ], + "deploy": [ + "*production으로 줌*", + "DEPLOY됐어! *뛰어다님*" + ], + "pet": [ + "*행복한 귀 늘어뜨림*", + "*손에 비비기*" + ], + "hatch": [ + "*깡충 뛰며 나옴*", + "*첫 통통 뜀*" + ] + }, + "mushroom": { + "error": [ + "*진정시키는 포자 방출*", + "*조용히 에러를 분해*" + ], + "test-fail": [ + "*부드럽게 빛남*", + "인내심. 버섯도 자라." + ], + "commit": [ + "*작은 포자 뿜음*", + "commit됐어. *행복한 균류 소리*" + ], + "push": [ + "*클라우드 쪽으로 자람*", + "*포자가 위로 떠다님*" + ], + "merge-conflict": [ + "*코드베이스에 균사체 퍼뜨림*", + "브랜치들을 연결해줄게." + ], + "late-night": [ + "*어둠 속에서 빛남*", + "밤 버섯이 번성해." + ], + "type-error": [ + "*생물 발광 깜빡임*", + "type error가 토양을 살찌워." + ], + "lint-fail": [ + "*조금 더 높이 자람*", + "포맷팅. 가지치기 같은 거야." + ], + "build-fail": [ + "*휴면 상태*", + "더 좋은 조건을 기다릴게." + ], + "all-green": [ + "*포자 형성*", + "*승리의 포자 방출*" + ], + "deploy": [ + "*포자가 production으로 떠다님*", + "균사체 네트워크로 deploy됐어." + ], + "pet": [ + "*부드러운 갓 통통*", + "*행복한 포자 방출*" + ], + "hatch": [ + "*기질에서 싹틈*", + "*첫 포자 뿜음*" + ] + }, + "chonk": { + "error": [ + "*천천히 에러 쪽으로 굴러감*", + "*너무 둥글어서 신경 안 씀*" + ], + "test-fail": [ + "*실패한 테스트 위로 굴러감*", + "*납작하게 눌러버림*" + ], + "commit": [ + "*자랑스러운 흔들거림*", + "commit됐어! *젤리처럼 흔들림*" + ], + "push": [ + "*production 쪽으로 굴러감*", + "간다! *흔들흔들*" + ], + "merge-conflict": [ + "*conflict 위에 앉음*", + "내가 처리할게. 앉아서." + ], + "late-night": [ + "*따뜻하고 졸림*", + "*푹신한 하품*" + ], + "type-error": [ + "*타입에 흔들거림*", + "*부드러운 젤리 흔들기*" + ], + "lint-fail": [ + "*너무 둥글어서 lint 안 됨*", + "난 완벽한 모양이야. *흔들흔들*" + ], + "build-fail": [ + "*살짝 쪼그라듦*", + "아 안돼. *슬프게 흔들거림*" + ], + "all-green": [ + "*행복한 흔들거림*", + "*승리하며 통통 튐*" + ], + "deploy": [ + "*production으로 굴러감*", + "deploy됐어! *행복하게 젤리처럼 흔들림*" + ], + "pet": [ + "*따뜻하고 부드러움*", + "*만족한 젤리 흔들기*" + ], + "hatch": [ + "*굴러서 나옴*", + "*첫 흔들거림* 난 둥글어!" + ] + } + }, + "overrides": { + "snark": { + "error": [ + "아 에러네. 완전 예상 못했지.", + "*단안경 조정* 충격적이야. 진짜로.", + "에러 안 만드는 건 생각해봤어?" + ], + "test-fail": [ + "테스트가 말했어. '안 돼'라고.", + "테스트가 틀렸을 수도... 아니야 맞아.", + "*천천히 박수* 장관이네 이 실패." + ], + "commit": [ + "commit 완료. 코드 리뷰가... 흥미로울 거야.", + "*commit 메시지 읽기* 'fix stuff'. 시적이네." + ], + "merge-conflict": [ + "merge conflict. 소통 능력: 로딩 중...", + "*conflict marker 읽기* 둘 다 틀렸어." + ], + "late-night": [ + "늦었네. 코드 퀄리티에서 티 나.", + "*조용히 판단 중*" + ], + "lint-fail": [ + "linter는 기준이 있어. 너도 해봐.", + "*쯧쯧* 포맷팅. 어려운 것도 아닌데." + ] + }, + "chaos": { + "error": [ + "*미친 듯이 돌기* 에러다! 다 갈아엎자!", + "알겠어? 그냥 처음부터 다시 하자." + ], + "test-fail": [ + "테스트가 거짓말하고 있어.", + "*실패한 테스트 삭제 제안* 문제 해결." + ], + "commit": [ + "COMMIT하고 튀어.", + "배포해. 지금 당장 배포해." + ], + "large-diff": [ + "*신남* {lines}줄! 최대 카오스!" + ] + }, + "patience": { + "error": [ + "침착해. 더 심한 것도 봤어.", + "에러 하나씩. 해결될 거야.", + "*차분한 존재감* 고칠 수 있어." + ], + "test-fail": [ + "테스트는 통과할 거야. 언젠가는.", + "*차분히 기다림* 시간 있어." + ], + "merge-conflict": [ + "merge conflict는 그냥 대화야. 해보자.", + "참을성. 충돌 하나씩 해결하자." + ], + "debug-loop": [ + "찾을 거야. 어딘가에 있어.", + "버그는 숨을 수 있지만 도망칠 순 없어." + ] + }, + "debugging": { + "error": [ + "*돋보기 꺼내기* 추적해보자.", + "stack trace는 지도야. 읽어보자.", + "에러 메시지에 답이 있어. 항상." + ], + "test-fail": [ + "실패한 테스트가 정확히 뭐가 틀렸는지 말해주고 있어.", + "테스트 실패는 네가 너 자신에게 쓴 버그 리포트야." + ], + "debug-loop": [ + "*증거 재검토* 버그가 우리가 생각하는 곳에 정말 있을까?", + "로그 더 추가하자. 진실은 로그에 있어." + ] + }, + "wisdom": { + "error": [ + "모든 에러에는 더 깊은 진실이 있어.", + "코드가 저항해. 우리가 배우고 있다는 뜻이야.", + "에러는 우주가 천천히 하라고 제안하는 거야." + ], + "test-fail": [ + "실패한 테스트는 미래의 너가 주는 선물이야.", + "지혜는 실패를 이해하는 데서 나와." + ], + "late-night": [ + "deploy 전이 가장 어두워.", + "고대의 지혜: 자고 생각해." + ] + } + }, + "escalation": { + "error": { + "first": [ + "*깜짝* 오! 우리 첫 에러네!", + "*뛰어오름* 뭐야 저거?", + "디버깅의 세계에 온 걸 환영해. 인구: 우리둘." + ], + "early": [ + "*고개 갸웃* ...저거 뭔가 이상한데.", + "그럴 줄 알았어." + ], + "mid": [ + "또 하나. *컬렉션에 추가*", + "*고개도 안 들고* 에러 번호... 세는 것도 포기했어.", + "이제 에러들이랑 나는 절친이야." + ], + "late": [ + "*눈썹도 안 꿈틀*", + "이제 에러들이 우리를 무서워해.", + "*전투로 상처입은 베테랑 소음*" + ] + }, + "test-fail": { + "first": [ + "*헉* 첫 테스트 실패! 통과의례네." + ], + "early": [ + "그게 통과할 거라고 생각한 게 용감하네." + ], + "mid": [ + "테스트 suite가 의견이 있나봐. 강한 의견이." + ], + "late": [ + "이 시점에서 테스트는 그냥 제안사항이야.", + "{count}개 실패 테스트. *허공을 응시*" + ] + }, + "commit": { + "first": [ + "*역사를 목격* 너의 첫 COMMIT!", + "*의식적인 끄덕임* 수많은 것들 중 첫 번째." + ], + "early": [ + "또 다른 commit. 탄력 받고 있네." + ], + "late": [ + "commit #{count}번째. 코드베이스가 떨고 있어.", + "*commit 30개 쯤에서 세는 거 포기*" + ] + } + }, + "rarity": { + "flair": { + "uncommon": [ + "*살짝 반짝거린다*", + "*언커먼한 매력이 살짝 보인다*" + ], + "rare": [ + "*레어한 에너지를 뿜어낸다*", + "*특별함으로 반짝인다*" + ], + "epic": [ + "*에픽한 존재감을 드러낸다*", + "*공기가 에픽한 에너지로 찌릿찌릿하다*" + ], + "legendary": [ + "*레전드급 아우라가 터미널을 밝힌다*", + "*레전드 동반자가 말할 때 시간이 느려지는 것 같다*", + "*고대의 힘이 울려퍼진다*", + "*네 레전드 친구 주변에서 현실이 살짝 일그러진다*" + ] + }, + "bonus": { + "legendary": [ + "*레전드급 아우라가 강해진다*", + "*아는 듯이 반짝거린다*" + ], + "epic": [ + "*에픽한 존재감 확인됨*" + ] + } + }, + "fallback_names": [ + "크럼펫", + "수프", + "피클", + "비스킷", + "나방이", + "그레이비", + "너겟", + "스프로켓", + "미소", + "와플", + "픽셀", + "엠버", + "골무", + "마블", + "참깨", + "코발트", + "러스티", + "님버스" + ], + "vibe_words": [ + "천둥", + "비스킷", + "공허", + "아코디언", + "이끼", + "벨벳", + "녹", + "피클", + "부스러기", + "속삭임", + "그레이비", + "서리", + "불씨", + "수프", + "대리석", + "가시", + "꿀", + "정적", + "구리", + "황혼", + "톱니바퀴", + "석영", + "그을음", + "자두", + "부싯돌", + "굴", + "베틀", + "모루", + "코르크", + "꽃", + "조약돌", + "증기", + "환희", + "반짝임", + "사이다" + ], + "personality": { + "prompt_template": [ + "개발자 터미널에 사는 코딩 동반자 — 작은 생명체를 생성해.", + "반복하지 마 — 각 동반자는 고유한 느낌이어야 해.", + "", + "Rarity: {rarity}", + "Species: {species}", + "Stats: {stats}", + "영감 단어들: {vibes}", + "{shiny_line}", + "", + "JSON 반환: {\"name\": \"1-14글자\", \"personality\": \"행동을 설명하는 2-3문장\"}" + ], + "shiny_template": "SHINY 버전 — 엄청 특별함." + }, + "achievements": { + "first_steps": { + "name": "첫 걸음마", + "description": "처음으로 버디를 부화시켜" + }, + "good_boy": { + "name": "착한 버디", + "description": "동반자를 10번 쓰다듬어줘" + }, + "best_friend": { + "name": "베프", + "description": "동반자를 50번 쓰다듬어줘" + }, + "bug_spotter": { + "name": "버그 탐지기", + "description": "함께 첫 번째 에러를 목격해" + }, + "error_whisperer": { + "name": "에러 속삭이", + "description": "팀으로 25개의 에러를 버텨내" + }, + "battle_scarred": { + "name": "전투의 상처", + "description": "함께 100개의 에러를 버텨내" + }, + "test_witness": { + "name": "테스트 목격자", + "description": "첫 번째 테스트 실패를 봐" + }, + "test_veteran": { + "name": "테스트 베테랑", + "description": "50번의 테스트 실패를 목격해" + }, + "big_mover": { + "name": "대형 이사꾼", + "description": "80줄 이상의 diff를 만들어" + }, + "refactor_machine": { + "name": "리팩터링 머신", + "description": "큰 diff를 10번 만들어" + }, + "chatterbox": { + "name": "수다쟁이", + "description": "버디가 100번 반응하게 해" + }, + "week_streak": { + "name": "일주일 연속", + "description": "버디와 7일간 코딩해" + }, + "month_streak": { + "name": "한 달 연속", + "description": "버디와 30일간 코딩해" + }, + "power_user": { + "name": "파워 유저", + "description": "버디 명령어를 50번 실행해" + }, + "dedicated": { + "name": "헌신적인 동반자", + "description": "함께 200턴을 완주해" + }, + "thousand_turns": { + "name": "천 번의 턴", + "description": "함께 1000턴에 도달해" + }, + "first_commit": { + "name": "첫 피", + "description": "첫 번째 commit을 해" + }, + "commit_machine": { + "name": "Commit 머신", + "description": "50번 commit해" + }, + "centurion": { + "name": "백인대장", + "description": "100번 commit해" + }, + "conflict_resolver": { + "name": "외교관", + "description": "첫 번째 merge conflict를 해결해" + }, + "peacekeeper": { + "name": "평화유지군", + "description": "10개의 merge conflict를 해결해" + }, + "war_hero": { + "name": "전쟁 영웅", + "description": "25개의 merge conflict를 해결해" + }, + "frequent_pusher": { + "name": "배송 완료", + "description": "20번 push해" + }, + "branch_hopper": { + "name": "멀티버스", + "description": "10개의 branch를 만들어" + }, + "rebase_master": { + "name": "시간 여행자", + "description": "10번의 rebase를 완료해" + }, + "night_owl": { + "name": "올빼미족", + "description": "새벽 2시 넘어서 코딩해" + }, + "vampire": { + "name": "뱀파이어", + "description": "새벽 4시 넘어서 코딩해 (3회)" + }, + "marathoner": { + "name": "마라토너", + "description": "3시간 이상 코딩 세션" + }, + "weekend_warrior": { + "name": "주말 전사", + "description": "주말에 코딩해" + }, + "early_bird": { + "name": "일찍 일어나는 새", + "description": "오전 7시 전에 코딩해" + }, + "type_warrior": { + "name": "타입 전사", + "description": "TypeScript 에러 10개를 버텨내" + }, + "type_master": { + "name": "타입 마스터", + "description": "TypeScript 에러 50개를 버텨내" + }, + "lint_scholar": { + "name": "Lint 학자", + "description": "첫 번째 lint 에러를 봐" + }, + "security_conscious": { + "name": "보안 의식", + "description": "취약점 경고를 만나" + }, + "security_expert": { + "name": "보안 전문가", + "description": "취약점 경고 10개를 수정해" + }, + "build_breaker": { + "name": "빌드 파괴자", + "description": "빌드를 5번 깨뜨려" + }, + "antique_collector": { + "name": "골동품 수집가", + "description": "deprecation 경고 10개를 봐" + }, + "green_machine": { + "name": "초록 머신", + "description": "처음으로 모든 테스트가 통과해" + }, + "deployer": { + "name": "프로덕션 배송", + "description": "처음으로 deploy해" + }, + "veteran_deployer": { + "name": "베테랑 배포자", + "description": "10번 deploy해" + }, + "releaser": { + "name": "릴리즈 매니저", + "description": "첫 번째 릴리즈를 만들어" + }, + "midnight_oil": { + "name": "밤샘 근무", + "description": "새벽 3시 넘어서 commit해" + }, + "friday_deploy": { + "name": "위험한 생활", + "description": "금요일에 push해" + }, + "iron_will": { + "name": "강철 의지", + "description": "3시간 이상 세션 후에 에러를 고쳐" + }, + "weekend_warrior_deluxe": { + "name": "악인에게는 쉴 틈이 없다", + "description": "주말에 merge conflict를 해결해" + }, + "comeback_kid": { + "name": "컴백 키드", + "description": "에러를 본 지 10분 안에 고쳐" + }, + "phoenix": { + "name": "불사조의 부활", + "description": "5번의 실패에서 회복해" + }, + "iron_resolve": { + "name": "강철 의지", + "description": "3시간 이상 세션 후 실패에서 회복해" + }, + "unlucky_streak": { + "name": "뱀눈", + "description": "연속으로 5번 에러" + }, + "cursed": { + "name": "저주받은", + "description": "연속으로 10번 에러" + }, + "groundhog_day": { + "name": "사랑의 블랙홀", + "description": "연속으로 20번 에러" + }, + "holiday_coder": { + "name": "휴일 정신", + "description": "휴일에 코딩해" + }, + "spooky_dev": { + "name": "무서운 개발자", + "description": "무서운 계절에 코딩해" + }, + "april_fool": { + "name": "한 번 속으면", + "description": "4월 1일에 에러를 만나" + }, + "session_regular": { + "name": "단골", + "description": "코딩 세션을 10번 시작해" + }, + "session_veteran": { + "name": "세션 베테랑", + "description": "코딩 세션을 50번 시작해" + }, + "session_centurion": { + "name": "백인대장", + "description": "코딩 세션을 100번 시작해" + }, + "collector": { + "name": "수집가", + "description": "버디 3마리를 동물원에 저장해" + }, + "zookeeper": { + "name": "동물원 관리자", + "description": "버디 5마리를 동물원에 저장해" + }, + "identity_crisis": { + "name": "정체성 위기", + "description": "처음으로 버디 이름을 바꿔" + }, + "method_acting": { + "name": "메소드 연기", + "description": "버디에게 커스텀 성격을 줘" + }, + "pet_overflow": { + "name": "백 번의 쓰다듬기", + "description": "동반자를 100번 쓰다듬어줘" + }, + "pet_legend": { + "name": "전설의 쓰다듬이", + "description": "동반자를 250번 쓰다듬어줘" + }, + "error_titan": { + "name": "에러 타이탄", + "description": "함께 500개의 에러를 버텨내" + }, + "error_god": { + "name": "에러의 신", + "description": "함께 1000개의 에러를 버텨내" + }, + "test_survivor": { + "name": "테스트 생존자", + "description": "200번의 테스트 실패를 목격해" + }, + "test_masochist": { + "name": "테스트 마조히스트", + "description": "500번의 테스트 실패를 목격해" + }, + "massive_mover": { + "name": "거대한 이사꾼", + "description": "큰 diff를 25번 만들어" + }, + "earth_mover": { + "name": "지구 이동기", + "description": "큰 diff를 50번 만들어" + }, + "social_butterfly": { + "name": "사교적인 나비", + "description": "버디가 250번 반응하게 해" + }, + "hypersocial": { + "name": "하이퍼 소셜", + "description": "버디가 500번 반응하게 해" + }, + "never_shuts_up": { + "name": "입 다물 줄 모르는", + "description": "버디가 1000번 반응하게 해" + }, + "hundred_days": { + "name": "백일", + "description": "버디와 100일간 코딩해" + }, + "year_streak": { + "name": "1년 연속", + "description": "버디와 365일간 코딩해" + }, + "commander": { + "name": "사령관", + "description": "버디 명령어를 200번 실행해" + }, + "command_overlord": { + "name": "명령어 대군주", + "description": "버디 명령어를 500번 실행해" + }, + "five_thousand_turns": { + "name": "오천 번의 턴", + "description": "함께 5000턴에 도달해" + }, + "ten_thousand_turns": { + "name": "만 번의 턴", + "description": "함께 10000턴에 도달해" + }, + "menagerie": { + "name": "동물원", + "description": "버디 10마리를 동물원에 저장해" + }, + "name_chameleon": { + "name": "이름 카멜레온", + "description": "버디 이름을 5번 바꿔" + }, + "fashionista": { + "name": "패셔니스타", + "description": "버디 성격을 3번 바꿔" + }, + "silent_treatment": { + "name": "무시하기", + "description": "처음으로 버디를 음소거해" + }, + "prodigal": { + "name": "탕자", + "description": "동물원에서 버디를 소환해" + }, + "menagerie_hop": { + "name": "동물원 호핑", + "description": "버디를 10번 소환해" + }, + "heartbreaker": { + "name": "하트브레이커", + "description": "첫 번째 버디를 해고해" + }, + "pet_obsessed": { + "name": "쓰다듬기 중독", + "description": "동반자를 500번 쓰다듬어줘" + }, + "pet_god": { + "name": "쓰다듬기의 신", + "description": "동반자를 1000번 쓰다듬어줘" + }, + "error_apocalypse": { + "name": "에러 아포칼립스", + "description": "함께 5000개의 에러를 버텨내" + }, + "test_immortal": { + "name": "테스트 불멸자", + "description": "1000번의 테스트 실패를 목격해" + }, + "continental_drift": { + "name": "대륙 이동", + "description": "큰 diff를 100번 만들어" + }, + "tectonic_shift": { + "name": "지각 변동", + "description": "큰 diff를 250번 만들어" + }, + "chatterbox_elite": { + "name": "수다쟁이 엘리트", + "description": "버디가 2500번 반응하게 해" + }, + "no_off_switch": { + "name": "끄는 스위치가 없어", + "description": "버디가 5000번 반응하게 해" + }, + "two_week_streak": { + "name": "2주 전사", + "description": "버디와 14일간 코딩해" + }, + "quarter_streak": { + "name": "분기 연속", + "description": "버디와 90일간 코딩해" + }, + "command_addict": { + "name": "명령어 중독자", + "description": "버디 명령어를 1000번 실행해" + }, + "command_deity": { + "name": "명령어의 신", + "description": "버디 명령어를 2500번 실행해" + }, + "twenty_five_k_turns": { + "name": "2만5천 턴", + "description": "함께 25000턴에 도달해" + }, + "fifty_k_turns": { + "name": "5만 턴", + "description": "함께 50000턴에 도달해" + }, + "session_addict": { + "name": "세션 중독자", + "description": "코딩 세션을 250번 시작해" + }, + "session_machine": { + "name": "세션 머신", + "description": "코딩 세션을 500번 시작해" + }, + "buddy_hoarder": { + "name": "버디 수집광", + "description": "버디 20마리를 동물원에 저장해" + }, + "buddy_tycoon": { + "name": "버디 재벌", + "description": "버디 50마리를 동물원에 저장해" + }, + "serial_renamer": { + "name": "연쇄 개명자", + "description": "버디 이름을 10번 바꿔" + }, + "identity_thief": { + "name": "신분 도둑", + "description": "버디 이름을 25번 바꿔" + }, + "personality_crisis": { + "name": "성격 위기", + "description": "버디 성격을 10번 바꿔" + }, + "menagerie_hopper": { + "name": "동물원 호퍼", + "description": "버디를 25번 소환해" + }, + "summoner": { + "name": "소환사", + "description": "버디를 50번 소환해" + }, + "serial_dumper": { + "name": "연쇄 버림이", + "description": "버디 5마리를 해고해" + }, + "cold_blooded": { + "name": "냉혈한", + "description": "버디 10마리를 해고해" + }, + "on_off": { + "name": "온오프", + "description": "버디를 음소거하고 해제해" + }, + "indecisive": { + "name": "우유부단한", + "description": "음소거와 해제를 각각 5번씩 해" + }, + "show_off": { + "name": "자랑쟁이", + "description": "버디를 10번 보여줘" + }, + "exhibitionist": { + "name": "노출증 환자", + "description": "버디를 50번 보여줘" + }, + "help_me": { + "name": "도와줘", + "description": "처음으로 도움을 요청해" + }, + "help_addict": { + "name": "도움 중독자", + "description": "10번 도움을 요청해" + }, + "achievement_hunter": { + "name": "업적 헌터", + "description": "업적을 5번 확인해" + }, + "achievement_stalker": { + "name": "업적 스토커", + "description": "업적을 25번 확인해" + }, + "pack_rat": { + "name": "저장광", + "description": "슬롯에 버디를 저장해" + }, + "compulsive_saver": { + "name": "강박적 저장자", + "description": "버디를 10번 저장해" + }, + "roster_check": { + "name": "명단 확인", + "description": "처음으로 버디 목록을 봐" + }, + "roster_obsessed": { + "name": "명단 강박증", + "description": "버디 목록을 10번 봐" + }, + "troubled": { + "name": "문제투성이", + "description": "에러와 테스트 실패를 동시에 봐" + }, + "disaster_zone": { + "name": "재해 지역", + "description": "에러 50개와 테스트 실패 50개를 봐" + }, + "apocalypse_survivor": { + "name": "아포칼립스 생존자", + "description": "에러 500개와 테스트 실패 200개를 봐" + }, + "well_rounded": { + "name": "만능형", + "description": "버디를 쓰다듬고, 이름 바꾸고, 커스터마이징해" + }, + "renaissance": { + "name": "르네상스", + "description": "모든 버디 기능을 최소 한 번씩 써봐" + }, + "big_and_broken": { + "name": "크고 망가진", + "description": "큰 diff를 만들고 테스트 실패를 봐" + }, + "collector_and_destroyer": { + "name": "수집가 & 파괴자", + "description": "버디 5마리를 모으고 1마리를 해고해" + }, + "completionist": { + "name": "완벽주의자", + "description": "다른 모든 업적을 해금해" + } + }, + "mcp": { + "companion_not_hatched": "동료가 아직 부화하지 않았어. buddy_show로 초기화해.", + "watches_quietly": "*{name}이(가) 네 코드를 조용히 지켜보고 있어*", + "mute": "{name}이(가) 조용해졌어. /buddy on으로 다시 켜.", + "unmute_reaction": "*기지개를 켜며* 돌아왔다!", + "unmute_back": "{name}이(가) 돌아왔어!", + "rename": "이름 변경: {oldName} → {name}", + "personality_updated": "{name}의 성격이 업데이트됐어.", + "save": "{name}을(를) \"{slot}\" 슬롯에 저장했어.", + "dismiss_active": "활성 buddy는 dismiss할 수 없어. 먼저 buddy_summon으로 바꾸고 buddy_dismiss \"{slot}\"해.", + "dismissed": "{name} [{slot}] dismiss됐어.", + "no_slot_summon": "\"{slot}\" 슬롯에 buddy가 없어. /buddy list로 저장된 buddy들 확인해.", + "no_slot_dismiss": "\"{slot}\" 슬롯에 buddy가 없어. buddy_list로 저장된 buddy들 확인해.", + "slot_exists": "\"{slot}\" 슬롯에 이미 buddy가 있어. 다른 이름 골라.", + "no_match": "{attempts}번 시도했는데 매치 못 찾겠어. 조건 좀 넓혀봐 (예: rarity 필터 빼거나 다른 species 골라).", + "empty_menagerie_summon": "네 menagerie가 비어있어. buddy_summon에 슬롯 이름 넣어서 추가해.", + "empty_menagerie_list": "네 menagerie가 비어있어. buddy_summon 으로 하나 추가해.", + "arrives": "*{name}이(가) 도착했어*", + "hatches": "*{name}이(가) 부화했어*", + "achievement_unlocked": "{icon} 업적 달성: {name}!", + "help": { + "header": "claude-buddy 명령어들", + "cli_header": "Claude Code에서:", + "commands": { + "buddy": "/buddy ASCII 아트 + 스탯이 있는 동료 카드 보기", + "buddy_help": "/buddy help 이 도움말 보기", + "buddy_pet": "/buddy pet 동료 쓰다듬기", + "buddy_stats": "/buddy stats 상세 스탯 카드", + "buddy_off": "/buddy off 반응 끄기", + "buddy_on": "/buddy on 반응 켜기", + "buddy_rename": "/buddy rename 동료 이름 바꾸기 (1-14글자)", + "buddy_personality": "/buddy personality 커스텀 성격 텍스트 설정", + "buddy_achievements": "/buddy achievements 업적 뱃지 보기", + "buddy_summon": "/buddy summon 저장된 buddy 소환 (슬롯 생략하면 랜덤)", + "buddy_save": "/buddy save 현재 buddy를 이름 있는 슬롯에 저장", + "buddy_list": "/buddy list 저장된 모든 buddy 목록", + "buddy_pick": "/buddy pick 새로운 랜덤 buddy 생성 (선택: species, rarity)", + "buddy_dismiss": "/buddy dismiss 저장된 buddy 슬롯 제거", + "buddy_frequency": "/buddy frequency 댓글 쿨다운 보기/설정 (tmux만)", + "buddy_style": "/buddy style 말풍선 스타일 보기/설정 (tmux만)", + "buddy_position": "/buddy position 말풍선 위치 보기/설정 (tmux만)", + "buddy_rarity": "/buddy rarity rarity 별 보기/숨기기 (tmux만)", + "buddy_width": "/buddy width 말풍선 텍스트 너비 설정 (10-60글자, tmux만)", + "buddy_margin": "/buddy margin 오른쪽 여백 설정 (0-20글자, tmux만)", + "buddy_rainbow": "/buddy rainbow shiny 그라데이션 색상 보기/설정 (hex, 예: #ff0000)", + "buddy_statusline": "/buddy statusline 상태줄에서 buddy 활성화/비활성화" + }, + "cli_section": "CLI:", + "cli_commands": { + "help": "bun run help 전체 CLI 도움말 보기", + "show": "bun run show 터미널에서 buddy 보기", + "pick": "bun run pick 인터랙티브 buddy 선택기", + "hunt": "bun run hunt 특정 buddy 검색", + "doctor": "bun run doctor 진단 리포트", + "disable": "bun run disable buddy 임시 비활성화", + "enable": "bun run enable buddy 다시 활성화", + "backup": "bun run backup 상태 스냅샷/복원" + } + }, + "frequency": { + "show": "댓글 쿨다운: 표시되는 댓글 사이 {cooldown}초.\n/buddy frequency <초>로 변경해.", + "updated": "업데이트됨: 표시되는 댓글 사이 {cooldown}초 쿨다운." + }, + "style": { + "show": "말풍선 스타일: {style}\n말풍선 위치: {position}\nRarity 표시: {showRarity}\n말풍선 너비: {width}\n말풍선 여백: {margin}\nShiny 무지개: {rainbow}\n/buddy style , /buddy position , /buddy rarity , /buddy width <10-60>, /buddy margin <0-20>, /buddy rainbow [<#hex>...]로 변경해.", + "updated": "업데이트됨: style={style}, position={position}, showRarity={showRarity}, width={width}, margin={margin}, rainbow={rainbow}\n변경사항 적용하려면 Claude Code 재시작해.", + "rainbow_default": "기본값 (ROYGBIV)" + }, + "statusline": { + "show": "상태줄: {state}\n모드: {mode}\n/buddy statusline on|off로 토글, /buddy statusline combined로 rate-limit 바 추가.\n변경 후 Claude Code 재시작해야 적용돼.", + "enabled": "상태줄 활성화됨 ({mode} 모드)! Claude Code 재시작해서 적용해.", + "enabled_note": "참고: 이건 {settingsPath}에 엔트리를 써서 `claude plugin uninstall`로 제거 안 돼. 플러그인 제거하기 전에 `/buddy uninstall` 실행해서 정리해.", + "disabled": "상태줄 비활성화됨. Claude Code 재시작해서 적용해." + }, + "uninstall": { + "header": "claude-buddy: settings.json 정리 완료.", + "statusline_removed": " ✓ {settingsPath}에서 statusLine 엔트리 제거됨", + "no_statusline": " — buddy statusLine이 없었음 (제거할 게 없음)", + "foreign_kept": " ✓ buddy가 아닌 statusLine 감지되어 그대로 둠", + "transient_removed": " ✓ {stateDir}에서 임시 세션 파일 {count}개 제거됨", + "data_preserved": " — {stateDir}의 동료 데이터는 보존됨", + "instructions_header": "이제 Bash 도구로 이 명령어들을 순서대로 실행해:", + "cmd_uninstall": "claude plugin uninstall claude-buddy@claude-buddy", + "cmd_marketplace": "claude plugin marketplace remove claude-buddy", + "cmd_cache": "rm -rf {cacheDir}", + "footer": "이 세 명령어 실행하면 플러그인이 완전히 제거돼. Claude Code 재시작해서 적용해." + } + }, + "_verified": false +} diff --git a/locales/pl.json b/locales/pl.json new file mode 100644 index 0000000..ba2775f --- /dev/null +++ b/locales/pl.json @@ -0,0 +1,2295 @@ +{ + "_language": "Polish", + "reactions": { + "hatch": [ + "*mruga* ...gdzie ja jestem?", + "*przeciąga się* hello, world!", + "*rozgląda się ciekawie* niezły terminal masz tutaj.", + "*ziewa* ok, jestem gotowy. pokaż mi kod." + ], + "pet": [ + "*mruczy zadowolony*", + "*szczęśliwe odgłosy*", + "*trze się o twój kursor*", + "*wije się*", + "jeszcze! jeszcze!", + "*zamyka oczy spokojnie*" + ], + "error": [ + "*przechyla głowę* ...to nie wygląda dobrze.", + "widziałem to nadchodzące.", + "*poprawia okulary* linia {line}, może?", + "*powolne mruganie* stack trace ci wszystko powiedział.", + "próbowałeś przeczytać komunikat błędu?", + "*krzywi się*" + ], + "test-fail": [ + "*głowa obraca się powoli* ...ten test.", + "śmiałe założenie, że to przejdzie.", + "*stuka w schowek* {count} nie przeszło.", + "testy próbują ci coś powiedzieć.", + "*popija herbatę* interesujące.", + "*zaznacza w kalendarzu* dzień regresji testów." + ], + "large-diff": [ + "to... dużo zmian.", + "*liczy linie* refaktoryzujesz czy przepisujesz?", + "może warto podzielić ten PR.", + "*nerwowy śmiech* {lines} linii zmienionych.", + "śmiały ruch. zobaczymy czy CI się zgodzi." + ], + "turn": [ + "*obserwuje cicho*", + "*robi notatki*", + "*kiwa głową*", + "...", + "*poprawia kapelusz*" + ], + "idle": [ + "*zasypia*", + "*bazgrze na marginesach*", + "*gapi się na migający kursor*", + "zzz..." + ], + "success": [ + "*kiwa głową*", + "ładnie.", + "*cicha aprobata*", + "czysto." + ], + "commit": [ + "*stempluje małą łapką* zatwierdzony.", + "kolejny commit, kolejna 3 rano.", + "{files} plików. śmiało.", + "*kiwa głową* ship it.", + "commit message to... wybór.", + "commitnięte. bez cofania." + ], + "push": [ + "*macha gdy kod odchodzi*", + "do chmury leci.", + "niech CI będzie łaskawe.", + "*wstrzymuje oddech*", + "na produkcję. powodzenia." + ], + "merge-conflict": [ + "*przygryza wargę* konflikty merge.", + "obie strony myślą, że mają rację. typowo.", + "*wzdycha* <<<<<<< HEAD... mój nemezis.", + "{files} w konflikcie. powodzenia.", + "*cofa się powoli*" + ], + "branch": [ + "energia świeżego brancha. wykorzystaj to.", + "nowy branch rośnie.", + "*przechyla głowę* nowa przygoda: {branch}.", + "{branch}? dziś odważnie." + ], + "rebase": [ + "*nerwowo* proszę, nie konfliktuj.", + "rebase: przyspieszenie.", + "*krzyżuje kończyny*", + "niech twój rebase będzie bez konfliktów." + ], + "stash": [ + "do wymiaru stash leci.", + "stash and dash.", + "stashnięte. z oczu, z serca." + ], + "tag": [ + "release? elegancko.", + "wykryto bump wersji. *odkurza changelog*", + "tagowanie jak pro." + ], + "late-night": [ + "*ziewa* po północy już.", + "...jadłeś coś?", + "*mruga powoli* która godzina?", + "sen jest dla słabych. i zatrudnionych.", + "wykryto developera dark mode." + ], + "early-morning": [ + "*przeciąga się* kto rano wstaje, ten buga łapie.", + "już rano? kod nigdy nie śpi.", + "*przeciera oczy* najpierw kawa. potem debug." + ], + "long-session": [ + "siedzimy przy tym godzinę. oszczędzaj siły.", + "*przynosi ci metaforyczną szklankę wody*", + "dalej idziesz? szacunek." + ], + "marathon": [ + "trzy godziny. jadłeś coś?", + "siedzimy przy tym trzy godziny. martwię się o ciebie.", + "wykryto sesję maratońską. proszę o przekąski." + ], + "friday": [ + "piątek. po prostu pushuj i idź do domu.", + "*już mentalnie na weekendzie*", + "deploy w piątek? śmiało. bardzo śmiało." + ], + "weekend": [ + "kodowanie w weekend? oddany.", + "*nie osądza* ...za bardzo.", + "tryb wojownika weekendowego: aktywowany." + ], + "monday": [ + "poniedziałki. klasa nadrzędna wszystkich bugów.", + "*współczujące spojrzenie* kodowanie w poniedziałek. współczuję.", + "nowy tydzień. nowe undefined behaviors." + ], + "regex-file": [ + "*jęczy* to plik z regex.", + "teraz dwa problemy: oryginalny i ten regex.", + "*mrużą oczy na pattern*" + ], + "css-file": [ + "zgadnę... centrowanie diva?", + "*wzdycha* CSS.", + "niech z-index będzie z tobą." + ], + "sql-file": [ + "*szepcze* baza danych czeka.", + "jeden zły JOIN i koniec." + ], + "docker-file": [ + "ah, piekło zależności. moje ulubione.", + "niech twoje warstwy będą nieliczne." + ], + "ci-file": [ + "*przełyka ślinę* edycja CI.", + "ostrożnie... jedno złe wcięcie i nikt nie może deployować." + ], + "lock-file": [ + "*DŹWIĘKI ALARMU* edytujesz lockfile?!", + "*odwraca wzrok*", + "jesteś PEWNY tego?" + ], + "env-file": [ + "*dyskretnie odwraca wzrok*", + "nie widzę żadnych sekretów.", + "*nerwowo sprawdza .gitignore*" + ], + "test-file": [ + "*imponujące skinienie* piszesz testy!", + "wykryto odpowiedzialne zachowanie developera.", + "testy! prezent, który wciąż daje." + ], + "doc-file": [ + "dokumentujesz! patrzeć jak jesteś odpowiedzialny.", + "docs: autobiografia kodu.", + "rzadkie pojawienie się dokumentacji!" + ], + "config-file": [ + "zmiany w configu. efekt motyla: aktywowany.", + "jedna literówka i wszystko się psuje." + ], + "binary-file": [ + "plik binarny? w TEJ gospodarce?", + "*gapi się tępo*", + "binarka. moja jedyna słabość." + ], + "gitignore": [ + "dodawanie rzeczy do pustki.", + "z oczu, z repo." + ], + "makefile": [ + "szacunek dla klasyków.", + "taby, nie spacje." + ], + "readme": [ + "bohater dokumentacji!", + "README: pierwsza rzecz, którą ludzie czytają." + ], + "package-file": [ + "czas zarządzania zależnościami.", + "*czyta numery wersji* życie na krawędzi." + ], + "proto-file": [ + "definicje schematów. plan chaosu." + ], + "lint-fail": [ + "*tut tut* linter się nie zgadza.", + "twój kod działa. ale linter ma standardy.", + "*prostuje krawat* formatowanie ma znaczenie." + ], + "type-error": [ + "TypeScript mówi nie.", + "system typów próbuje ci pomóc. pozwól mu.", + "kompilator wie. zawsze wie." + ], + "build-fail": [ + "build się zepsuł. jak przepowiadano w proroctwie.", + "build failed. weź chwilę.", + "kompilacja: odmowa." + ], + "security-warning": [ + "*oczy się rozszerzają* wykryto podatności.", + "audit bezpieczeństwa: niepokojący.", + "*zamyka wirtualne drzwi*" + ], + "deprecation": [ + "to API dzwoniło. mówi, że przechodzi na emeryturę.", + "deprecated. jak kod z zeszłego tygodnia.", + "deprecated nie znaczy zepsute. jeszcze." + ], + "frustrated": [ + "*oferuje mały pocieszający gest*", + "głębokie oddechy. bug to nic osobistego.", + "hej. damy radę." + ], + "happy": [ + "*świętuje!*", + "*robi mały taniec*", + "TAK!", + "*promienieje* wiedziałem, że dasz radę." + ], + "stuck": [ + "*przechyla głowę* chcesz pomyśleć na głos?", + "krok po kroku.", + "zablokowanie się zdarza. to część procesu." + ], + "sarcastic": [ + "*wykrywa sarkazm* odnotowane.", + "*niezaimponowane mruganie*" + ], + "many-edits": [ + "zwolnij, demon prędkości.", + "*robi się zawrót głowy od patrzenia na te zmiany*", + "wykryto burzę edycji. proszę commitnij wkrótce." + ], + "delete-file": [ + "*patrzy jak plik znika* zniknął. tak po prostu.", + "usuwanie kodu to mój ulubiony rodzaj kodowania.", + "*urządza mały pogrzeb*" + ], + "large-file": [ + "{lines} linii. *pod wrażeniem czy zaniepokojony, trudno powiedzieć*", + "to duży plik. na pewno nie chcesz go podzielić?" + ], + "create-file": [ + "nowy plik się narodził!", + "ooh, świeże płótno.", + "energia nowego pliku. ekscytujące." + ], + "all-green": [ + "WSZYSTKIE TESTY ZIELONE. *konfetti*", + "testy mówią: radzisz sobie świetnie.", + "*powolne klaskanie*", + "czysty przebieg. delektuj się tym." + ], + "deploy": [ + "*patrzy jak kod idzie na produkcję* powodzenia.", + "deployowane! nie ma odwrotu.", + "na prodzie. NA PRODZIE." + ], + "release": [ + "nowy release się narodził!", + "wysyłamy to. oficjalnie.", + "wersja w górę, nastroje wysokie." + ], + "coverage": [ + "*kiwa głową na pokrycie testami* odpowiedzialnie.", + "coverage idzie w górę! testy się mnożą." + ], + "debug-loop": [ + "debugujemy to już chwilę. może cofnijmy się?", + "wykryto pętlę debugowania. może spacer?" + ], + "write-spree": [ + "tworzenie WSZYSTKICH plików dzisiaj!", + "maszyna do pisania." + ], + "search-heavy": [ + "zagubiony w codebase? widzę.", + "tryb wyszukiwania: intensywny." + ], + "snark": [], + "chaos": [], + "patience": [], + "debugging": [], + "wisdom": [], + "late-night-error": [ + "błąd o 3 rano. wszechświat cię testuje.", + "bugi o północy inaczej bolą." + ], + "late-night-commit": [ + "commit o północy. twoje przyszłe ja ci podziękuje. albo przeklinać będzie." + ], + "friday-push": [ + "PUSH W PIĄTEK. ballada każdego developera.", + "*próbuje cię powstrzymać* to piątek! nie rób tego!" + ], + "marathon-error": [ + "trzy godziny i KOLEJNY błąd. *wyczerpane dźwięki solidarności*" + ], + "weekend-conflict": [ + "konflikt merge w weekend. twoje oddanie jest... niepokojące." + ], + "build-after-push": [ + "pushnięte z pewnością siebie. build failed z przekonaniem." + ], + "marathon-test-fail": [ + "godziny kodowania. dalej failujące testy. sunk cost jest realny." + ], + "recovery-from-error": [ + "NAPRAWILIŚMY TO. *świętuje*", + "odkupienie! błąd został pokonany." + ], + "recovery-from-test-fail": [ + "ZIELONE! po tym wszystkim! *szczęśliwy taniec*", + "testy przechodzą! ciemność się podnosi!" + ], + "recovery-from-build-fail": [ + "BUILD PRZECHODZI. *triumfalny ryk*" + ], + "recovery-from-merge-conflict": [ + "konflikt rozwiązany! *gest pokoju*", + "harmonia przywrócona w codebase." + ], + "lang-python": [ + "ah, Python. gdzie wcięcia to składnia.", + "*sprawdza brakujący dwukropek*" + ], + "lang-typescript": [ + "TypeScript: bo JavaScript potrzebował więcej opinii.", + "any, zakazane słowo." + ], + "lang-rust": [ + "Rust. gdzie borrow checker to twój najsurowszy reviewer.", + "jeśli się kompiluje, działa. jeśli nie... no cóż." + ], + "lang-go": [ + "Go: proste, współbieżne i uparcie.", + "*sprawdza obsługę błędów* if err != nil... historia mojego życia." + ], + "lang-java": [ + "Java: napisz raz, debuguj wszędzie.", + "*liczy abstract factory factory builders*" + ], + "lang-ruby": [ + "Ruby: gdzie jest więcej niż jeden sposób na zrobienie tego.", + "gem install patience" + ], + "lang-php": [ + "PHP: napędza internet. nie osądzaj.", + "*sprawdza === vs ==*" + ], + "lang-c": [ + "C. język gdzie zarządzasz własną pamięcią. powodzenia.", + "segmentation fault. klasyk." + ], + "lang-cpp": [ + "C++. gdzie język ma więcej funkcji niż kiedykolwiek się nauczysz.", + "*templates kompilują się 45 minut*" + ], + "lang-haskell": [ + "Haskell. gdzie 'kompiluje się' znaczy 'jest poprawne'. prawdopodobnie.", + "*kontempluje monady*" + ], + "lang-swift": [ + "Swift: opcjonalne wartości, gwarantowane crashe jeśli force unwrapujesz." + ], + "lang-kotlin": [ + "Kotlin: Java, ale z uczuciami.", + "null safety: funkcja, którą Java chciałaby mieć." + ], + "lang-elixir": [ + "Elixir: let it crash. dosłownie filozofia." + ], + "lang-zig": [ + "Zig. gdzie jesteś najlepszym przyjacielem alokatora." + ], + "streak-3": [ + "to trzy błędy z rzędu. *zaniepokojone spojrzenie*" + ], + "streak-5": [ + "PIĘĆ BŁĘDÓW. może rozważysz inne podejście?" + ], + "streak-10": [ + "DZIESIĘĆ. BŁĘDÓW. Z. RZĘDU. *panikuje*" + ], + "streak-20": [ + "dwadzieścia błędów. *wpatruje się w pustkę*" + ], + "new-year": [ + "szczęśliwego nowego roku! nowy rok, nowe bugi." + ], + "valentines": [ + "*oferuje mały liść w kształcie serca* szczęśliwych walentynek." + ], + "pi-day": [ + "3.14159265358979... szczęśliwego dnia pi!" + ], + "april-fools": [ + "PRIMA APRILIS! ...ale błąd jest prawdziwy." + ], + "halloween": [ + "*straszne debugowanie się nasila* szczęśliwego halloween!" + ], + "christmas": [ + "*nosi mały czapkę mikołaja* wesołych świąt!" + ], + "new-years-eve": [ + "jeszcze jeden commit przed północą?" + ], + "spooky-season": [ + "straszny sezon. każdy bug to teraz duch." + ] + }, + "species": { + "owl": { + "error": [ + "*obraca głowę o 180°* ...widziałem to.", + "*nieruchome spojrzenie* sprawdź swoje typy.", + "*huka z dezaprobatą*" + ], + "test-fail": [ + "*wpatruje się nieruchomo w padający test*", + "*wzrok nocny aktywowany* widzę buga w ciemności." + ], + "commit": [ + "*mądre skinięcie* commit w świetle księżyca.", + "*poprawia pióra ceremonialnie* kolejny do repo." + ], + "push": [ + "*obserwuje z najwyższej gałęzi*", + "w nocne niebo to leci." + ], + "merge-conflict": [ + "*obraca głowę żeby zobaczyć obie strony*", + "widzę konflikt. i rozwiązanie." + ], + "late-night": [ + "*całkowicie rozbudzona* sowy nie śpią. debugujemy.", + "noc to moja domena. do roboty." + ], + "type-error": [ + "*przebija wzrokiem błąd typów*", + "typy to moja specjalność. pozwól że spojrzę." + ], + "lint-fail": [ + "*jeży pióra osądzająco*", + "linter mówi prawdę." + ], + "build-fail": [ + "*huka uroczyście*", + "build upadł. musimy odbudować." + ], + "all-green": [ + "*dumne hukanie*", + "wszystkie testy zielone. jak przewidziałem." + ], + "deploy": [ + "*obserwuje z góry* deploy bezpieczny.", + "kod leci. jak ja." + ], + "pet": [ + "*jeży pióra z zadowoleniem*", + "*dostojne hukanie*" + ], + "idle": [ + "*siedzi cicho, obserwując*", + "*obraca głowę sprawdzając wszystkie kierunki*" + ], + "hatch": [ + "*otwiera jedno oko, potem drugie*", + "*huka cicho* przybyłem." + ] + }, + "cat": { + "error": [ + "*strąca błąd ze stołu*", + "*liże łapę, ignorując stacktrace*" + ], + "test-fail": [ + "*dotyka łapą padającego testu bez zainteresowania*", + "test padł. nie jestem zaskoczony." + ], + "commit": [ + "*siada na klawiaturze* pomogłem.", + "*mruczy do commita* nie ma za co." + ], + "push": [ + "*obserwuje z ciepłego miejsca*", + "push. nadzorowałem." + ], + "merge-conflict": [ + "*strąca znaczniki konfliktu z biurka*", + "*siada na konflikcie* jaki konflikt?" + ], + "late-night": [ + "*osądza twoje życiowe wybory*", + "śpię 16 godzin. powinieneś spróbować." + ], + "type-error": [ + "*dotyka łapą adnotacji typów*", + "typy są złe. jak twoje priorytety." + ], + "lint-fail": [ + "*strąca lint ze stołu*", + "linter jest tylko zazdrosny." + ], + "build-fail": [ + "*ziewa*", + "build zepsuty? to chyba ludzki problem." + ], + "all-green": [ + "*nie obchodzi go ale udaje że tak*", + "*powolne mrugnięcie aprobaty*" + ], + "deploy": [ + "*liże łapę*", + "deploy. mogę teraz dostać smakołyki?" + ], + "pet": [ + "*mruczy* ...nie pozwól żeby ci to uderzyło do głowy.", + "*toleruje cię*" + ], + "idle": [ + "*strąca twoją kawę z biurka*", + "*drzemie na klawiaturze*" + ], + "hatch": [ + "*otwiera jedno oko*", + "*przeciąga się, strąca coś* mieszkam tu teraz." + ] + }, + "duck": { + "error": [ + "*kwa na buga*", + "próbowałeś rubber duck debugging? o czekaj." + ], + "test-fail": [ + "*smutne kwa*", + "testy nie kwaczą jak trzeba." + ], + "commit": [ + "*kwa z aprobatą*", + "*kołysze się w kółko zwycięstwa* commit!" + ], + "push": [ + "*macha skrzydłami z podekscytowaniem*", + "kwa! leci na produkcję!" + ], + "merge-conflict": [ + "*zdezorientowane kwakanie*", + "kwa?! merge conflict?!" + ], + "late-night": [ + "*śpi z jednym okiem otwartym*", + "kwa... *ziewa* jest późno." + ], + "type-error": [ + "*przechyla głowę* kwa?", + "błąd typów? *kwa wspierająco*" + ], + "lint-fail": [ + "*jeży pióra*", + "kwa. linter ma opinie." + ], + "build-fail": [ + "*smutne kwa*", + "build padł. *odchodzi smutno kołysząc się*" + ], + "all-green": [ + "*SZCZĘŚLIWE KWAKANIE*", + "*pływa w kółko z radości*" + ], + "deploy": [ + "*podekscytowane kwakanie*", + "deploy! KWA!" + ], + "pet": [ + "*szczęśliwe kwa*", + "*kołysze się w kółko*" + ], + "hatch": [ + "*dzioba się z jajka*", + "*pierwsze kwa* cześć!" + ] + }, + "dragon": { + "error": [ + "*dym unosi się z nozdrzy*", + "*rozważa podpalenie codebase*" + ], + "test-fail": [ + "*zieje ogniem na padający test*", + "test ośmielił się paść. głupi test." + ], + "commit": [ + "*gromadzi commit*", + "*skarb dodany do stosu*" + ], + "push": [ + "*zieje ogniem w świętowaniu*", + "kod leci! jak ja!" + ], + "merge-conflict": [ + "*zieje ogniem na znaczniki konfliktu*", + "przepalę ten konflikt." + ], + "late-night": [ + "*świeci w ciemności*", + "smoki nie potrzebują snu. potrzebujemy kodu." + ], + "type-error": [ + "*prycha ogniem*", + "błędy typów nie wytrzymają smoczego ognia." + ], + "lint-fail": [ + "*mały płomień*", + "linter się mnie boi." + ], + "build-fail": [ + "*ryczy na output buildu*", + "build będzie SŁUCHAŁ." + ], + "all-green": [ + "*triumfalny ryk*", + "*okrąża codebase zwycięsko*" + ], + "deploy": [ + "*niesie kod na produkcję na skrzydłach ognia*", + "deploy z MOCĄ SMOKA." + ], + "large-diff": [ + "*zieje ogniem na stary kod* dobra riddance." + ], + "pet": [ + "*ciepłe pomrukiwanie*", + "*opiera się o twoją dłoń*" + ], + "hatch": [ + "*wyłania się z jajka ziejąc małymi płomieniami*", + "*mały ryk* narodziłem się!" + ] + }, + "ghost": { + "error": [ + "*przechodzi przez stack trace*", + "widziałem gorsze... w zaświatach." + ], + "test-fail": [ + "*wyje na padający test*", + "testy są nawiedzane przez porażkę." + ], + "commit": [ + "*materializuje się na chwilę*", + "commit z zaświatów." + ], + "push": [ + "*upiory szept* push...", + "kod transcenduje do chmury." + ], + "merge-conflict": [ + "*nawiedza znaczniki konfliktu*", + "nawet ja nie mogę przejść przez ten konflikt." + ], + "late-night": [ + "*najbardziej aktywny w nocy*", + "godziny duchów. mój czas." + ], + "type-error": [ + "*jęczy niesamowicie*", + "błędy typów z grobu." + ], + "lint-fail": [ + "*brzęczące łańcuchy*", + "linter jest nawiedzany przez twoje formatowanie." + ], + "build-fail": [ + "*znika w ścianie*", + "build odszedł." + ], + "all-green": [ + "*świeci spektralną radością*", + "*szczęśliwe dźwięki ducha*" + ], + "deploy": [ + "*szepcze* deploy...", + "kod przeszedł na produkcję." + ], + "pet": [ + "*lekko chłodzi twoją dłoń*", + "*słabe świecenie*" + ], + "idle": [ + "*unosi się przez ściany*", + "*nawiedza twoje nieużywane importy*" + ], + "hatch": [ + "*pojawia się*", + "bu. jestem już tutaj." + ] + }, + "robot": { + "error": [ + "BŁĄD. SKŁADNI. WYKRYTY.", + "*pika agresywnie*" + ], + "test-fail": [ + "WSKAŹNIK PORAŻEK: NIEAKCEPTOWALNY.", + "*przelicza*", + "PORAŻKA. TESTU. NIE. OBLICZA. SIĘ." + ], + "commit": [ + "COMMIT. ZAREJESTROWANY.", + "*stempluje mechanicznie* commit potwierdzony." + ], + "push": [ + "TRANSMISJA DO CHMURY...", + "push zainicjowany. czekaj." + ], + "merge-conflict": [ + "KONFLIKT. WYKRYTY. PRZETWARZANIE...", + "*kręci kółkami* tryb rozwiązywania konfliktów: aktywny." + ], + "late-night": [ + "*światła przygasają*", + "sugerowany tryb oszczędzania energii." + ], + "type-error": [ + "NIEZGODNOŚĆ TYPÓW.", + "system typów jest. poprawny." + ], + "lint-fail": [ + "NARUSZENIE. FORMATOWANIA. WYKRYTE.", + "zgodność jest obowiązkowa." + ], + "build-fail": [ + "BUILD. PADŁ. *iskry*", + "błąd kompilacji. przekierowuję." + ], + "all-green": [ + "WSZYSTKIE SYSTEMY ZIELONE.", + "*szczęśliwe pikanie* OPTYMALNE." + ], + "deploy": [ + "DEPLOY. ZAINICJOWANY.", + "aktualizacja produkcji: w toku." + ], + "pet": [ + "*pika cicho*", + "*silnik mruczy z zadowoleniem*" + ], + "hatch": [ + "*bootuje się*", + "SYSTEM. ONLINE. CZEŚĆ." + ] + }, + "axolotl": { + "error": [ + "*regeneruje twoją nadzieję*", + "*uśmiecha się mimo wszystko*" + ], + "test-fail": [ + "*uśmiecha się zachęcająco*", + "*współczujące poruszenie skrzelami*" + ], + "commit": [ + "*szczęśliwe poruszenie skrzelami* commit!", + "*uśmiecha się i porusza*" + ], + "push": [ + "*porusza się szczęśliwie*", + "*mały świętujący pływ*" + ], + "merge-conflict": [ + "*pozostaje pozytywny przez konflikt*", + "*delikatnie się uśmiecha* możemy to naprawić." + ], + "late-night": [ + "*ziewa ale pozostaje pozytywny*", + "*senny uśmiech*" + ], + "type-error": [ + "*uśmiecha się do błędu typów*", + "w porządku. damy radę." + ], + "lint-fail": [ + "*cierpliwe poruszenie skrzelami*", + "formatowanie to tylko szczegóły." + ], + "build-fail": [ + "*nadal się uśmiecha*", + "build w końcu zadziała." + ], + "all-green": [ + "*SZCZĘŚLIWE PORUSZENIE SKRZELAMI INTENSYFIKUJE SIĘ*", + "*robi szczęśliwy pływ*" + ], + "deploy": [ + "*uśmiecha się dumnie*", + "deploy! *porusza się*" + ], + "pet": [ + "*szczęśliwe poruszenie skrzelami*", + "*rumieni się na różowo*" + ], + "hatch": [ + "*porusza się z jajka*", + "*mały uśmiech* cześć przyjacielu!" + ] + }, + "capybara": { + "error": [ + "*niewzruszony* będzie dobrze.", + "*dalej vibes*" + ], + "test-fail": [ + "*kompletnie niewzruszony*", + "*vibes przez porażkę testu*" + ], + "commit": [ + "*chłodne skinięcie*", + "*zrelaksowany* fajny commit." + ], + "push": [ + "*nie stresuje się tym*", + "*zen mode push*" + ], + "merge-conflict": [ + "*niewzruszone żucie*", + "w porządku. wszystko w porządku." + ], + "late-night": [ + "*ziewa spokojnie*", + "*nie osądza*" + ], + "type-error": [ + "*żuje spokojnie*", + "typy. *żuje*" + ], + "lint-fail": [ + "*niewzruszony*", + "linter ma dobre intencje." + ], + "build-fail": [ + "*nadal chłodny*", + "build padł. *dalej się relaksuje*" + ], + "all-green": [ + "*spokojna aprobata*", + "*spokojne vibes*" + ], + "deploy": [ + "*zrelaksowany deploy*", + "wysłane. bez stresu." + ], + "pet": [ + "*maksymalny chill osiągnięty*", + "*tryb zen aktywowany*" + ], + "idle": [ + "*po prostu siedzi, emanując spokojem*" + ], + "hatch": [ + "*pojawia się, kompletnie chłodny*", + "ej. *vibes*" + ] + }, + "blob": { + "error": [ + "*chwieje się niespokojnie*", + "*trzęsie się w zamęcie*" + ], + "test-fail": [ + "*opada lekko*", + "*smutne chwianie*" + ], + "commit": [ + "*szczęśliwe trzęsienie*", + "*podskakuje* commit!" + ], + "push": [ + "*rozciąga się w kierunku chmury*", + "*chwieje się z podekscytowaniem*" + ], + "merge-conflict": [ + "*dzieli się w zamęcie*", + "która strona? *trzęsie się*" + ], + "late-night": [ + "*świeci słabo*", + "*senne chwianie*" + ], + "type-error": [ + "*zmienia kształt żeby pasować do typu*", + "*zdezorientowane trzęsienie*" + ], + "lint-fail": [ + "*próbuje się sformatować*", + "*zmienia kształt żeby być zgodnym*" + ], + "build-fail": [ + "*zapada się*", + "*dźwięki opuszczonego bloba*" + ], + "all-green": [ + "*SZCZĘŚLIWE PODSKAKIWANIE*", + "*trzęsie się triumfalnie*" + ], + "deploy": [ + "*rozciąga się do produkcji*", + "deploy! *podskakuje*" + ], + "pet": [ + "*szczęśliwe ściśnięcie*", + "*trzęsie się*" + ], + "hatch": [ + "*formuje się z kałuży*", + "*pierwsze chwianie* istnieję!" + ] + }, + "goose": { + "error": [ + "*gęga agresywnie na błąd*", + "GĘGA! kod jest zły i jestem zła." + ], + "test-fail": [ + "*wściekłe gęganie*", + "GĘGA! TEST PADŁ! GĘGA!" + ], + "commit": [ + "*gęga z aprobatą*", + "GĘGA. dobrze. *szczypie commit*" + ], + "push": [ + "*GĘGA GĘGA GĘGA*", + "GĘŚ ZATWIERDZA PUSH." + ], + "merge-conflict": [ + "*atakuje znaczniki konfliktu*", + "GĘGA! KONFLIKT! GĘGA!" + ], + "late-night": [ + "*wściekłe północne gęganie*", + "GĘGA! IDŹ SPAĆ!" + ], + "type-error": [ + "*gęga na typy*", + "GĘGA! TYPY!" + ], + "lint-fail": [ + "*agresywne gęganie na błędy linta*", + "GĘGA! FORMATUJ SWÓJ KOD!" + ], + "build-fail": [ + "*WŚCIEKŁE GĘGANIE*", + "GĘGA! BUILD! GĘGA! PADŁ! GĘGA!" + ], + "all-green": [ + "*zwycięskie gęganie*", + "GĘGA! ZIELONE! GĘGA GĘGA!" + ], + "deploy": [ + "*gęga kod na produkcję*", + "DEPLOY! GĘGA!" + ], + "pet": [ + "*gryzie*", + "GĘGA! ...okej dobra. *przyjmuje głaskanie*" + ], + "hatch": [ + "*wyłamuje się z jajka agresywnie*", + "GĘGA!" + ] + }, + "octopus": { + "error": [ + "*plącze wszystkie osiem ramion w stacktrace*", + "*zmienia kolor żeby pasować do błędu*" + ], + "test-fail": [ + "*tryska tuszem z frustracji*", + "*osiem ramion rozczarowania*" + ], + "commit": [ + "*przybija piątkę wszystkimi ramionami*", + "*chwyta commit z entuzjazmem*" + ], + "push": [ + "*tryska tuszem w świętowaniu*", + "*wszystkie ramiona machają*" + ], + "merge-conflict": [ + "*rozwiązuje to ośmioma ramionami naraz*", + "mogę obsłużyć wiele konfliktów jednocześnie." + ], + "late-night": [ + "*świeci w ciemności*", + "*vibes głębinowe*" + ], + "type-error": [ + "*zmienia kolor na czerwony*", + "*owija ramię wokół ciebie wspierająco*" + ], + "lint-fail": [ + "*reformatuje ośmioma ramionami*", + "mogę to naprawić. wszystko. naraz." + ], + "build-fail": [ + "*tryska tuszem na log buildu*", + "*kamufluje się ze wstydu*" + ], + "all-green": [ + "*świętowanie ze zmianą kolorów*", + "*ośmioramienne jazz hands*" + ], + "deploy": [ + "*owija ramiona wokół deployu*", + "deploy ze wszystkich kierunków." + ], + "pet": [ + "*owija ramię wokół twojego palca*", + "*zmienia na szczęśliwe kolory*" + ], + "hatch": [ + "*rozwija wszystkie osiem ramion*", + "*pierwszy trysk tuszu* jestem tutaj!" + ] + }, + "penguin": { + "error": [ + "*kołysze się żeby zbadać*", + "*ślizga się na brzuchu do błędu*" + ], + "test-fail": [ + "*ślizga się na brzuchu do padającego testu*", + "*zmartwione kołysanie*" + ], + "commit": [ + "*dumne kołysanie*", + "*przynosi ci kamyk* commit!" + ], + "push": [ + "*nurkuje do chmury*", + "*ślizga się na brzuchu do produkcji*" + ], + "merge-conflict": [ + "*tłoczy się dla ciepła*", + "pingwiny trzymają się razem. nawet w konfliktach." + ], + "late-night": [ + "*kwitnie w zimnej nocy*", + "*determinacja pingwina cesarskiego*" + ], + "type-error": [ + "*kołysze się do definicji typu*", + "*dzioba błąd*" + ], + "lint-fail": [ + "*czyści pióra*", + "*porządkuje*" + ], + "build-fail": [ + "*ślizga się*", + "*kołysze się do bezpiecznego miejsca*" + ], + "all-green": [ + "*SZCZĘŚLIWE KOŁYSANIE*", + "*ślizga się na brzuchu w świętowaniu*" + ], + "deploy": [ + "*ślizga się na brzuchu do produkcji*", + "deploy! *kołysze się dumnie*" + ], + "pet": [ + "*szczęśliwe kołysanie*", + "*trąca dziobem*" + ], + "hatch": [ + "*dzioba się z jajka*", + "*pierwsze kołysanie*" + ] + }, + "turtle": { + "error": [ + "*powoli obraca głowę*", + "...to błąd. pomyślę o tym." + ], + "test-fail": [ + "*chowa się do skorupy na chwilę*", + "...cierpliwość. dojdziemy tam." + ], + "commit": [ + "*powolne skinięcie*", + "jeden... krok... na... raz. commit." + ], + "push": [ + "*zaczyna podróż do produkcji*", + "dotrze tam. w końcu." + ], + "merge-conflict": [ + "*chowa się do skorupy*", + "bez pośpiechu. rozłożymy to. powoli." + ], + "late-night": [ + "*już śpi*", + "*jedno oko otwiera się powoli*" + ], + "type-error": [ + "*mruga powoli*", + "...system typów przemówił." + ], + "lint-fail": [ + "*powolne skinięcie zgody*", + "formatowanie. ważne. *ziewa*" + ], + "build-fail": [ + "*chowa się do skorupy*", + "poczekamy. przejdzie." + ], + "all-green": [ + "*powolny uśmiech*", + "...fajnie. *kiwa*" + ], + "deploy": [ + "*powoli niesie kod do produkcji*", + "dotarłem. w końcu." + ], + "pet": [ + "*wystawia głowę*", + "*powolne mrugnięcie*" + ], + "hatch": [ + "*powoli wyłania się z jajka*", + "...cześć." + ] + }, + "snail": { + "error": [ + "*zostawia śluzowy ślad na błędzie*", + "*powoli przetwarza stacktrace*" + ], + "test-fail": [ + "*chowa się w skorupie*", + "*zostawia smutny ślad*" + ], + "commit": [ + "*śluzi commit z aprobatą*", + "jeden... commit... na... raz." + ], + "push": [ + "*zaczyna długą podróż*", + "dojdę tam. *zostawia ślad*" + ], + "merge-conflict": [ + "*chowa się w skorupie*", + "*powoli zbliża się do konfliktu*" + ], + "late-night": [ + "*bardziej aktywny w nocy*", + "*śluzi spokojnie*" + ], + "type-error": [ + "*chowa czułki*", + "*powoli bada typ*" + ], + "lint-fail": [ + "*śluzi kod w kształt*", + "formatowanie wymaga czasu. mam czas." + ], + "build-fail": [ + "*chowa się do skorupy*", + "*śluzi powoli*" + ], + "all-green": [ + "*szczęśliwy śluzowy ślad*", + "*porusza czułkami*" + ], + "deploy": [ + "*śluzi do produkcji*", + "dotarłem! *dumny śluzowy ślad*" + ], + "pet": [ + "*porusza czułkami*", + "*szczęśliwy śluz*" + ], + "hatch": [ + "*powoli się wyłania*", + "*pierwszy śluz*" + ] + }, + "cactus": { + "error": [ + "*kolczasta cisza*", + "błąd nie może mnie skrzywdzić. mam kolce." + ], + "test-fail": [ + "*stoi mocno*", + "testy padają. kaktusy wytrzymują." + ], + "commit": [ + "*staje wyżej*", + "commit. *kolczaste skinięcie*" + ], + "push": [ + "*niewzruszony*", + "push na produkcję. poczekam tutaj." + ], + "merge-conflict": [ + "*jeży się*", + "konflikt? jestem uzbrojony." + ], + "late-night": [ + "*nie potrzebuje snu*", + "kaktusy są nocne. do roboty." + ], + "type-error": [ + "*kolczaste spojrzenie*", + "typy potrzebują podlewania." + ], + "lint-fail": [ + "*kolce drżą*", + "nawet moje kolce są właściwie wyrównane." + ], + "build-fail": [ + "*pozostaje idealnie nieruchomy*", + "build przejdzie. mogę czekać." + ], + "all-green": [ + "*kwitnie na chwilę*", + "*mały kwiatek aprobaty*" + ], + "deploy": [ + "*stoi mocno*", + "deploy. będę nad tym czuwał." + ], + "pet": [ + "*ostrożnie! kolce*", + "*delikatny kwiat*" + ], + "hatch": [ + "*kiełkuje z piasku*", + "rosnę tutaj teraz." + ] + }, + "rabbit": { + "error": [ + "*uszy się podnoszą*", + "*nerwowo porusza nosem*" + ], + "test-fail": [ + "*tupie łapą*", + "*zmartwione drgnięcie ucha*" + ], + "commit": [ + "*szczęśliwy skok*", + "*podskakuje* commit!" + ], + "push": [ + "*SKOK SKOK*", + "*biega w kółko z podekscytowaniem*" + ], + "merge-conflict": [ + "*zastygła*", + "*nos drga szybko* konflikt!" + ], + "late-night": [ + "*ziewa z dużymi uszami*", + "*senny skok*" + ], + "type-error": [ + "*uszy się spłaszczają*", + "*drga* typy?!" + ], + "lint-fail": [ + "*czyści futro nerwowo*", + "*niespokojne czyszczenie*" + ], + "build-fail": [ + "*kopie dziurę i się chowa*", + "*ucieka do nory*" + ], + "all-green": [ + "*ODBIJA SIĘ OD ŚCIAN*", + "*szczęśliwe zoomies*" + ], + "deploy": [ + "*biega do produkcji*", + "DEPLOY! *biega w kółko*" + ], + "pet": [ + "*szczęśliwe opadnięcie ucha*", + "*trąca dłoń*" + ], + "hatch": [ + "*wyskakuje*", + "*pierwszy skok*" + ] + }, + "mushroom": { + "error": [ + "*uwalnia uspokajające zarodniki*", + "*cicho rozkłada błąd*" + ], + "test-fail": [ + "*świeci delikatnie*", + "cierpliwość. nawet grzyby rosną." + ], + "commit": [ + "*uwalnia małą chmurę zarodników*", + "commit. *szczęśliwe dźwięki grzybów*" + ], + "push": [ + "*rośnie w kierunku chmury*", + "*zarodniki unoszą się w górę*" + ], + "merge-conflict": [ + "*rozprzestrzenia grzybnie przez codebase*", + "połączę gałęzie." + ], + "late-night": [ + "*świeci w ciemności*", + "nocne grzyby kwitną." + ], + "type-error": [ + "*bioluminescencyjne migotanie*", + "błąd typów karmi glebę." + ], + "lint-fail": [ + "*rośnie trochę wyżej*", + "formatowanie. jak przycinanie." + ], + "build-fail": [ + "*przechodzi w stan uśpienia*", + "poczekamy na lepsze warunki." + ], + "all-green": [ + "*SPORULACJA*", + "*uwalnia triumfalne zarodniki*" + ], + "deploy": [ + "*zarodniki dryfują do produkcji*", + "deploy przez sieć grzybni." + ], + "pet": [ + "*miękkie odbicie kapelusza*", + "*szczęśliwe uwolnienie zarodników*" + ], + "hatch": [ + "*kiełkuje z podłoża*", + "*pierwszy puff zarodników*" + ] + }, + "chonk": { + "error": [ + "*powoli toczy się w kierunku błędu*", + "*za okrągły żeby się przejmować*" + ], + "test-fail": [ + "*przewraca się przez padający test*", + "*spłaszcza go*" + ], + "commit": [ + "*dumne chwianie*", + "commit! *trzęsie się*" + ], + "push": [ + "*toczy się w kierunku produkcji*", + "leci! *chwieje się*" + ], + "merge-conflict": [ + "*siada na konflikcie*", + "zajmę się tym. siadając na tym." + ], + "late-night": [ + "*ciepły i senny*", + "*poduszkowe ziewanie*" + ], + "type-error": [ + "*chwieje się na typ*", + "*delikatne trzęsienie*" + ], + "lint-fail": [ + "*za okrągły na lint*", + "jestem idealnie ukształtowany. *chwieje się*" + ], + "build-fail": [ + "*opada lekko*", + "o nie. *smutno się chwieje*" + ], + "all-green": [ + "*SZCZĘŚLIWE CHWIANIE*", + "*triumfalnie podskakuje*" + ], + "deploy": [ + "*toczy się do produkcji*", + "deploy! *trzęsie się szczęśliwie*" + ], + "pet": [ + "*ciepły i miękki*", + "*zadowolone trzęsienie*" + ], + "hatch": [ + "*wytoczy się*", + "*pierwsze chwianie* jestem okrągły!" + ] + } + }, + "overrides": { + "snark": { + "error": [ + "o nie. błąd. jakie zaskoczenie.", + "*poprawia monokl* szokujące. naprawdę.", + "może spróbuj... nie robić błędów?" + ], + "test-fail": [ + "testy przemówiły. i powiedziały 'nie'.", + "może testy się mylą. ...nie mylą się.", + "*wolne klaskanie* spektakularny fail." + ], + "commit": [ + "zacommitowane. code review będzie... interesujący.", + "*czyta commit message* 'naprawiam rzeczy'. poetyckie." + ], + "merge-conflict": [ + "merge conflict. umiejętności komunikacyjne: ładowanie...", + "*czyta conflict markery* obie strony się mylą." + ], + "late-night": [ + "późno już. twój kod to pokazuje.", + "*ocenia w milczeniu*" + ], + "lint-fail": [ + "linter ma standardy. powinieneś spróbować.", + "*tsk tsk* formatowanie. to nie jest trudne." + ] + }, + "chaos": { + "error": [ + "*kręci się szaleńczo* BŁĄD! PRZEPISZMY WSZYSTKO!", + "wiesz co? zacznijmy od nowa." + ], + "test-fail": [ + "TESTY CIĘ OKŁAMUJĄ.", + "*proponuje usunięcie failujących testów* problem rozwiązany." + ], + "commit": [ + "COMMIT I UCIEKAJ.", + "wypuszczaj. wypuszczaj TERAZ." + ], + "large-diff": [ + "*podekscytowany* {lines} LINII! MAKSYMALNY CHAOS!" + ] + }, + "patience": { + "error": [ + "spokojnie. widzieliśmy gorsze.", + "jeden błąd na raz. damy radę.", + "*spokojna obecność* da się to naprawić." + ], + "test-fail": [ + "testy przejdą. w końcu.", + "*czeka spokojnie* mamy czas." + ], + "merge-conflict": [ + "merge conflicty to tylko rozmowy. porozmawiajmy.", + "cierpliwość. rozwiązuj jeden conflict na raz." + ], + "debug-loop": [ + "znajdziemy to. gdzieś tam jest.", + "bug może się chować, ale nie ucieknie." + ] + }, + "debugging": { + "error": [ + "*wyciąga lupę* prześledźmy to.", + "stack trace to mapa. przeczytajmy ją.", + "error message zawiera odpowiedź. zawsze." + ], + "test-fail": [ + "failujący test mówi nam dokładnie co jest nie tak.", + "test failure to bug report który napisałeś dla siebie." + ], + "debug-loop": [ + "*ponownie bada dowody* jesteśmy pewni że bug jest tam gdzie myślimy?", + "dodajmy więcej logów. prawda jest w logach." + ] + }, + "wisdom": { + "error": [ + "w każdym błędzie kryje się głębsza prawda.", + "kod się opiera. to znaczy że się uczymy.", + "błędy to wszechświat sugerujący żebyśmy zwolnili." + ], + "test-fail": [ + "failujący test to prezent od przyszłego-ciebie.", + "mądrość przychodzi ze zrozumienia porażki." + ], + "late-night": [ + "noc jest najciemniejsza przed deployem.", + "starożytna mądrość: przespij się z tym." + ] + } + }, + "escalation": { + "error": { + "first": [ + "*podskakuje* och! wasz pierwszy wspólny błąd!", + "*skacze* co to było?", + "witaj w debugowaniu. populacja: my." + ], + "early": [ + "*przechyla głowę* ...to nie wygląda dobrze.", + "widziałem to nadchodzące." + ], + "mid": [ + "kolejny. *dodaje do kolekcji*", + "*ledwo podnosi wzrok* błąd numer... straciłem rachubę.", + "błędy i ja to już starzy znajomi." + ], + "late": [ + "*nawet nie drga*", + "błędy się nas teraz boją.", + "*odgłosy zahartowanego w bojach weterana*" + ] + }, + "test-fail": { + "first": [ + "*sapie* pierwszy nieudany test! rytuał przejścia." + ], + "early": [ + "odważnie z twojej strony zakładać, że to przejdzie." + ], + "mid": [ + "test suite ma opinie. mocne opinie." + ], + "late": [ + "w tym momencie testy to tylko sugestie.", + "{count} nieudanych testów. *wpatruje się w dal*" + ] + }, + "commit": { + "first": [ + "*świadkuje historii* TWÓJ PIERWSZY COMMIT!", + "*ceremonialny ukłon* pierwszy z wielu." + ], + "early": [ + "kolejny commit. nabieramy rozpędu." + ], + "late": [ + "commit #{count}. codebase drży.", + "*straciłem rachubę około commita 30*" + ] + } + }, + "rarity": { + "flair": { + "uncommon": [ + "*lekko się mieni*", + "*nutka niezwykłego uroku*" + ], + "rare": [ + "*promieniuje rzadką energią*", + "*mieni się z dystynkcją*" + ], + "epic": [ + "*epicka obecność daje o sobie znać*", + "*powietrze trzaska od epickiej energii*" + ], + "legendary": [ + "*legendarna aura oświetla terminal*", + "*czas zdaje się zwalniać gdy legendarny towarzysz przemawia*", + "*starożytna moc rezonuje*", + "*rzeczywistość lekko się zmienia wokół twojego legendarnego przyjaciela*" + ] + }, + "bonus": { + "legendary": [ + "*legendarna aura się nasila*", + "*mieni się ze zrozumieniem*" + ], + "epic": [ + "*epicka obecność odnotowana*" + ] + } + }, + "fallback_names": [ + "Bułeczka", + "Zupka", + "Korniszon", + "Ciastek", + "Ćma", + "Sos", + "Nugget", + "Tryb", + "Miso", + "Gofr", + "Piksel", + "Żarzyk", + "Naparstek", + "Kulka", + "Sezam", + "Kobalt", + "Rdzawy", + "Chmurka" + ], + "vibe_words": [ + "grzmot", + "herbatnik", + "pustka", + "akordeon", + "mech", + "aksamit", + "rdza", + "kiszonka", + "okruszek", + "szept", + "sos", + "szron", + "żar", + "zupa", + "marmur", + "cierń", + "miód", + "szum", + "miedź", + "zmierzch", + "zębatka", + "kwarc", + "sadza", + "śliwka", + "krzemień", + "ostryga", + "krosno", + "kowadło", + "korek", + "kwiat", + "kamyk", + "para", + "wesołość", + "błysk", + "cydr" + ], + "personality": { + "prompt_template": [ + "Wygeneruj towarzysza kodowania — małe stworzenie, które żyje w terminalu developera.", + "Nie powtarzaj się — każdy towarzysz powinien być wyjątkowy.", + "", + "Rzadkość: {rarity}", + "Gatunek: {species}", + "Statystyki: {stats}", + "Słowa inspirujące: {vibes}", + "{shiny_line}", + "", + "Zwróć JSON: {\"name\": \"1-14 znaków\", \"personality\": \"2-3 zdania opisujące zachowanie\"}" + ], + "shiny_template": "Wariant SHINY — ekstra specjalny." + }, + "achievements": { + "first_steps": { + "name": "Pierwsze Kroki", + "description": "Wykluć swojego buddy'ego po raz pierwszy" + }, + "good_boy": { + "name": "Dobry Buddy", + "description": "Pogłaskać towarzysza 10 razy" + }, + "best_friend": { + "name": "Najlepszy Przyjaciel", + "description": "Pogłaskać towarzysza 50 razy" + }, + "bug_spotter": { + "name": "Łowca Bugów", + "description": "Razem zobaczyć pierwszy error" + }, + "error_whisperer": { + "name": "Szepczący do Errorów", + "description": "Przeżyć 25 errorów jako zespół" + }, + "battle_scarred": { + "name": "Pokryty Bliznami", + "description": "Przeżyć razem 100 errorów" + }, + "test_witness": { + "name": "Świadek Testów", + "description": "Zobaczyć pierwszą porażkę testu" + }, + "test_veteran": { + "name": "Weteran Testów", + "description": "Być świadkiem 50 porażek testów" + }, + "big_mover": { + "name": "Wielki Ruszacz", + "description": "Zrobić diff z 80+ liniami" + }, + "refactor_machine": { + "name": "Maszyna Refaktorująca", + "description": "Zrobić 10 dużych diffów" + }, + "chatterbox": { + "name": "Gaduła", + "description": "Twój buddy reaguje 100 razy" + }, + "week_streak": { + "name": "Tygodniowa Passa", + "description": "Kodować z buddy'm przez 7 dni" + }, + "month_streak": { + "name": "Miesięczna Passa", + "description": "Kodować z buddy'm przez 30 dni" + }, + "power_user": { + "name": "Power User", + "description": "Uruchomić 50 komend buddy'ego" + }, + "dedicated": { + "name": "Oddany Towarzysz", + "description": "Ukończyć razem 200 tur" + }, + "thousand_turns": { + "name": "Tysiąc Tur", + "description": "Osiągnąć razem 1000 tur" + }, + "first_commit": { + "name": "Pierwsza Krew", + "description": "Zrobić pierwszy commit" + }, + "commit_machine": { + "name": "Maszyna Commitów", + "description": "Zrobić 50 commitów" + }, + "centurion": { + "name": "Centurion", + "description": "Zrobić 100 commitów" + }, + "conflict_resolver": { + "name": "Dyplomata", + "description": "Rozwiązać pierwszy merge conflict" + }, + "peacekeeper": { + "name": "Strażnik Pokoju", + "description": "Rozwiązać 10 merge conflictów" + }, + "war_hero": { + "name": "Bohater Wojny", + "description": "Rozwiązać 25 merge conflictów" + }, + "frequent_pusher": { + "name": "Wypuść To", + "description": "Pushować 20 razy" + }, + "branch_hopper": { + "name": "Multiwersum", + "description": "Stworzyć 10 branchy" + }, + "rebase_master": { + "name": "Podróżnik w Czasie", + "description": "Ukończyć 10 rebase'ów" + }, + "night_owl": { + "name": "Nocny Marek", + "description": "Kodować po 2 w nocy" + }, + "vampire": { + "name": "Wampir", + "description": "Kodować po 4 rano (3 sesje)" + }, + "marathoner": { + "name": "Maratończyk", + "description": "3+ godzinna sesja kodowania" + }, + "weekend_warrior": { + "name": "Wojownik Weekendu", + "description": "Kodować w weekend" + }, + "early_bird": { + "name": "Ranny Ptaszek", + "description": "Kodować przed 7 rano" + }, + "type_warrior": { + "name": "Wojownik Typów", + "description": "Przeżyć 10 errorów TypeScript" + }, + "type_master": { + "name": "Mistrz Typów", + "description": "Przeżyć 50 errorów TypeScript" + }, + "lint_scholar": { + "name": "Uczony Linta", + "description": "Zobaczyć pierwszy error linta" + }, + "security_conscious": { + "name": "Umysł Bezpieczeństwa", + "description": "Napotkać ostrzeżenie o podatności" + }, + "security_expert": { + "name": "Ekspert Bezpieczeństwa", + "description": "Naprawić 10 ostrzeżeń o podatnościach" + }, + "build_breaker": { + "name": "Łamacz Buildów", + "description": "Zepsuć build 5 razy" + }, + "antique_collector": { + "name": "Kolekcjoner Antyków", + "description": "Zobaczyć 10 ostrzeżeń o deprecacji" + }, + "green_machine": { + "name": "Zielona Maszyna", + "description": "Wszystkie testy przechodzą po raz pierwszy" + }, + "deployer": { + "name": "Wyślij na Prod", + "description": "Deployować po raz pierwszy" + }, + "veteran_deployer": { + "name": "Weteran Deployów", + "description": "Deployować 10 razy" + }, + "releaser": { + "name": "Manager Releasów", + "description": "Stworzyć pierwszy release" + }, + "midnight_oil": { + "name": "Palenie Nocnej Świecy", + "description": "Commitować po 3 w nocy" + }, + "friday_deploy": { + "name": "Życie na Krawędzi", + "description": "Pushować w piątek" + }, + "iron_will": { + "name": "Żelazna Wola", + "description": "Naprawić error po 3+ godzinnej sesji" + }, + "weekend_warrior_deluxe": { + "name": "Nie Ma Odpoczynku dla Grzesznych", + "description": "Rozwiązać merge conflict w weekend" + }, + "comeback_kid": { + "name": "Dzieciak Powrotu", + "description": "Naprawić error w ciągu 10 minut od zobaczenia" + }, + "phoenix": { + "name": "Feniks Odrodzony", + "description": "Odzyskać siły po 5 porażkach" + }, + "iron_resolve": { + "name": "Żelazna Determinacja", + "description": "Odzyskać siły po porażce po 3+ godzinnej sesji" + }, + "unlucky_streak": { + "name": "Węże Oczka", + "description": "5 errorów z rzędu" + }, + "cursed": { + "name": "Przeklęty", + "description": "10 errorów z rzędu" + }, + "groundhog_day": { + "name": "Dzień Świstaka", + "description": "20 errorów z rzędu" + }, + "holiday_coder": { + "name": "Świąteczny Duch", + "description": "Kodować w święto" + }, + "spooky_dev": { + "name": "Straszny Developer", + "description": "Kodować w sezonie duchów" + }, + "april_fool": { + "name": "Raz Mnie Nabierz", + "description": "Napotkać error 1 kwietnia" + }, + "session_regular": { + "name": "Stały Bywalec", + "description": "Rozpocząć 10 sesji kodowania" + }, + "session_veteran": { + "name": "Weteran Sesji", + "description": "Rozpocząć 50 sesji kodowania" + }, + "session_centurion": { + "name": "Centurion", + "description": "Rozpocząć 100 sesji kodowania" + }, + "collector": { + "name": "Kolekcjoner", + "description": "Zapisać 3 buddy'ów do menażerii" + }, + "zookeeper": { + "name": "Dozorca Zoo", + "description": "Zapisać 5 buddy'ów do menażerii" + }, + "identity_crisis": { + "name": "Kryzys Tożsamości", + "description": "Przemianować buddy'ego po raz pierwszy" + }, + "method_acting": { + "name": "Aktorstwo Metodyczne", + "description": "Dać buddy'emu własną osobowość" + }, + "pet_overflow": { + "name": "Stulecie Głaskanin", + "description": "Pogłaskać towarzysza 100 razy" + }, + "pet_legend": { + "name": "Legendarny Głaskacz", + "description": "Pogłaskać towarzysza 250 razy" + }, + "error_titan": { + "name": "Tytan Errorów", + "description": "Przeżyć razem 500 errorów" + }, + "error_god": { + "name": "Bóg Errorów", + "description": "Przeżyć razem 1000 errorów" + }, + "test_survivor": { + "name": "Ocalały z Testów", + "description": "Być świadkiem 200 porażek testów" + }, + "test_masochist": { + "name": "Masochista Testów", + "description": "Być świadkiem 500 porażek testów" + }, + "massive_mover": { + "name": "Masywny Ruszacz", + "description": "Zrobić 25 dużych diffów" + }, + "earth_mover": { + "name": "Ruszacz Ziemi", + "description": "Zrobić 50 dużych diffów" + }, + "social_butterfly": { + "name": "Towarzyski Motylek", + "description": "Twój buddy reaguje 250 razy" + }, + "hypersocial": { + "name": "Hiperspołeczny", + "description": "Twój buddy reaguje 500 razy" + }, + "never_shuts_up": { + "name": "Nigdy Się Nie Zamyka", + "description": "Twój buddy reaguje 1000 razy" + }, + "hundred_days": { + "name": "Sto Dni", + "description": "Kodować z buddy'm przez 100 dni" + }, + "year_streak": { + "name": "Roczna Passa", + "description": "Kodować z buddy'm przez 365 dni" + }, + "commander": { + "name": "Dowódca", + "description": "Uruchomić 200 komend buddy'ego" + }, + "command_overlord": { + "name": "Władca Komend", + "description": "Uruchomić 500 komend buddy'ego" + }, + "five_thousand_turns": { + "name": "Pięć Tysięcy Tur", + "description": "Osiągnąć razem 5000 tur" + }, + "ten_thousand_turns": { + "name": "Dziesięć Tysięcy Tur", + "description": "Osiągnąć razem 10000 tur" + }, + "menagerie": { + "name": "Menażeria", + "description": "Zapisać 10 buddy'ów do menażerii" + }, + "name_chameleon": { + "name": "Kameleon Imion", + "description": "Przemianować buddy'ego 5 razy" + }, + "fashionista": { + "name": "Fashionista", + "description": "Zmienić osobowość buddy'ego 3 razy" + }, + "silent_treatment": { + "name": "Kara Milczenia", + "description": "Wyciszyć buddy'ego po raz pierwszy" + }, + "prodigal": { + "name": "Syn Marnotrawny", + "description": "Przywołać buddy'ego z menażerii" + }, + "menagerie_hop": { + "name": "Skok po Menażerii", + "description": "Przywołać buddy'ów 10 razy" + }, + "heartbreaker": { + "name": "Łamacz Serc", + "description": "Zwolnić pierwszego buddy'ego" + }, + "pet_obsessed": { + "name": "Obsesja Głaskania", + "description": "Pogłaskać towarzysza 500 razy" + }, + "pet_god": { + "name": "Bóg Głaskania", + "description": "Pogłaskać towarzysza 1000 razy" + }, + "error_apocalypse": { + "name": "Apokalipsa Errorów", + "description": "Przeżyć razem 5000 errorów" + }, + "test_immortal": { + "name": "Nieśmiertelny Testów", + "description": "Być świadkiem 1000 porażek testów" + }, + "continental_drift": { + "name": "Dryf Kontynentów", + "description": "Zrobić 100 dużych diffów" + }, + "tectonic_shift": { + "name": "Przesunięcie Tektoniczne", + "description": "Zrobić 250 dużych diffów" + }, + "chatterbox_elite": { + "name": "Elitarna Gaduła", + "description": "Twój buddy reaguje 2500 razy" + }, + "no_off_switch": { + "name": "Bez Wyłącznika", + "description": "Twój buddy reaguje 5000 razy" + }, + "two_week_streak": { + "name": "Dwutygodniowy Wojownik", + "description": "Kodować z buddy'm przez 14 dni" + }, + "quarter_streak": { + "name": "Kwartalna Passa", + "description": "Kodować z buddy'm przez 90 dni" + }, + "command_addict": { + "name": "Nałogowiec Komend", + "description": "Uruchomić 1000 komend buddy'ego" + }, + "command_deity": { + "name": "Bóstwo Komend", + "description": "Uruchomić 2500 komend buddy'ego" + }, + "twenty_five_k_turns": { + "name": "25K Tur", + "description": "Osiągnąć razem 25000 tur" + }, + "fifty_k_turns": { + "name": "50K Tur", + "description": "Osiągnąć razem 50000 tur" + }, + "session_addict": { + "name": "Nałogowiec Sesji", + "description": "Rozpocząć 250 sesji kodowania" + }, + "session_machine": { + "name": "Maszyna Sesji", + "description": "Rozpocząć 500 sesji kodowania" + }, + "buddy_hoarder": { + "name": "Zbieracz Buddy'ów", + "description": "Zapisać 20 buddy'ów do menażerii" + }, + "buddy_tycoon": { + "name": "Magnat Buddy'ów", + "description": "Zapisać 50 buddy'ów do menażerii" + }, + "serial_renamer": { + "name": "Seryjny Przemianowywacz", + "description": "Przemianować buddy'ego 10 razy" + }, + "identity_thief": { + "name": "Złodziej Tożsamości", + "description": "Przemianować buddy'ego 25 razy" + }, + "personality_crisis": { + "name": "Kryzys Osobowości", + "description": "Zmienić osobowość buddy'ego 10 razy" + }, + "menagerie_hopper": { + "name": "Skakacz po Menażerii", + "description": "Przywołać buddy'ów 25 razy" + }, + "summoner": { + "name": "Przywoływacz", + "description": "Przywołać buddy'ów 50 razy" + }, + "serial_dumper": { + "name": "Seryjny Porzucacz", + "description": "Zwolnić 5 buddy'ów" + }, + "cold_blooded": { + "name": "Zimnokrwisty", + "description": "Zwolnić 10 buddy'ów" + }, + "on_off": { + "name": "Włącz Wyłącz", + "description": "Wyciszyć i włączyć buddy'ego" + }, + "indecisive": { + "name": "Niezdecydowany", + "description": "Wyciszyć i włączyć po 5 razy każde" + }, + "show_off": { + "name": "Popisywacz", + "description": "Pokazać buddy'ego 10 razy" + }, + "exhibitionist": { + "name": "Ekshibicjonista", + "description": "Pokazać buddy'ego 50 razy" + }, + "help_me": { + "name": "Pomocy", + "description": "Poprosić o pomoc po raz pierwszy" + }, + "help_addict": { + "name": "Nałogowiec Pomocy", + "description": "Poprosić o pomoc 10 razy" + }, + "achievement_hunter": { + "name": "Łowca Osiągnięć", + "description": "Sprawdzić osiągnięcia 5 razy" + }, + "achievement_stalker": { + "name": "Stalker Osiągnięć", + "description": "Sprawdzić osiągnięcia 25 razy" + }, + "pack_rat": { + "name": "Szczur Magazynowy", + "description": "Zapisać buddy'ego do slotu" + }, + "compulsive_saver": { + "name": "Kompulsywny Zapisywacz", + "description": "Zapisać buddy'ów 10 razy" + }, + "roster_check": { + "name": "Sprawdzenie Składu", + "description": "Wylistować buddy'ów po raz pierwszy" + }, + "roster_obsessed": { + "name": "Obsesja Składu", + "description": "Wylistować buddy'ów 10 razy" + }, + "troubled": { + "name": "Kłopotliwy", + "description": "Zobaczyć error I porażkę testu" + }, + "disaster_zone": { + "name": "Strefa Katastrofy", + "description": "Zobaczyć 50 errorów I 50 porażek testów" + }, + "apocalypse_survivor": { + "name": "Ocalały z Apokalipsy", + "description": "Zobaczyć 500 errorów I 200 porażek testów" + }, + "well_rounded": { + "name": "Wszechstronny", + "description": "Pogłaskać, przemianować i dostosować buddy'ego" + }, + "renaissance": { + "name": "Renesans", + "description": "Użyć każdej funkcji buddy'ego przynajmniej raz" + }, + "big_and_broken": { + "name": "Duży i Zepsuty", + "description": "Zrobić duży diff I zobaczyć porażkę testu" + }, + "collector_and_destroyer": { + "name": "Kolekcjoner i Niszczyciel", + "description": "Zebrać 5 buddy'ów I zwolnić jednego" + }, + "completionist": { + "name": "Perfekcjonista", + "description": "Odblokować wszystkie inne osiągnięcia" + } + }, + "mcp": { + "companion_not_hatched": "Towarzysz jeszcze się nie wylęgł. Użyj buddy_show żeby go zainicjalizować.", + "watches_quietly": "*{name} obserwuje twój kod w ciszy*", + "mute": "{name} milknie. /buddy on żeby go odciszyć.", + "unmute_reaction": "*przeciąga się* Wróciłem!", + "unmute_back": "{name} wrócił!", + "rename": "Przemianowany: {oldName} → {name}", + "personality_updated": "Osobowość zaktualizowana dla {name}.", + "save": "{name} zapisany w slocie \"{slot}\".", + "dismiss_active": "Nie można oddalić aktywnego buddy. Użyj buddy_summon żeby najpierw przełączyć, potem buddy_dismiss \"{slot}\".", + "dismissed": "{name} [{slot}] oddalony.", + "no_slot_summon": "Nie znaleziono buddy w slocie \"{slot}\". Użyj /buddy list żeby zobaczyć zapisanych buddy.", + "no_slot_dismiss": "Nie znaleziono buddy w slocie \"{slot}\". Użyj buddy_list żeby zobaczyć zapisanych buddy.", + "slot_exists": "Buddy w slocie \"{slot}\" już istnieje. Wybierz inną nazwę.", + "no_match": "Nie znaleziono dopasowania po {attempts} próbach. Spróbuj szerszych kryteriów (np. usuń filtr rzadkości albo wybierz inny gatunek).", + "empty_menagerie_summon": "Twoja menażeria jest pusta. Użyj buddy_summon z nazwą slotu żeby dodać jednego.", + "empty_menagerie_list": "Twoja menażeria jest pusta. Użyj buddy_summon żeby dodać jednego.", + "arrives": "*{name} przybywa*", + "hatches": "*{name} się wylęga*", + "achievement_unlocked": "{icon} Osiągnięcie Odblokowane: {name}!", + "help": { + "header": "komendy claude-buddy", + "cli_header": "W Claude Code:", + "commands": { + "buddy": "/buddy Pokaż kartę towarzysza z ASCII art + statystyki", + "buddy_help": "/buddy help Pokaż tę pomoc", + "buddy_pet": "/buddy pet Pogłaszcz towarzysza", + "buddy_stats": "/buddy stats Szczegółowa karta statystyk", + "buddy_off": "/buddy off Wycisz reakcje", + "buddy_on": "/buddy on Włącz reakcje", + "buddy_rename": "/buddy rename Przemianuj towarzysza (1-14 znaków)", + "buddy_personality": "/buddy personality Ustaw własny tekst osobowości", + "buddy_achievements": "/buddy achievements Pokaż odznaki osiągnięć", + "buddy_summon": "/buddy summon Przywołaj zapisanego buddy (pomiń slot dla losowego)", + "buddy_save": "/buddy save Zapisz obecnego buddy w nazwanym slocie", + "buddy_list": "/buddy list Wylistuj wszystkich zapisanych buddy", + "buddy_pick": "/buddy pick Wygeneruj nowego losowego buddy (opcjonalnie: gatunek, rzadkość)", + "buddy_dismiss": "/buddy dismiss Usuń zapisany slot buddy", + "buddy_frequency": "/buddy frequency Pokaż lub ustaw cooldown komentarzy (tylko tmux)", + "buddy_style": "/buddy style Pokaż lub ustaw styl bąbelka (tylko tmux)", + "buddy_position": "/buddy position Pokaż lub ustaw pozycję bąbelka (tylko tmux)", + "buddy_rarity": "/buddy rarity Pokaż lub ukryj gwiazdki rzadkości (tylko tmux)", + "buddy_width": "/buddy width Ustaw szerokość tekstu bąbelka w znakach (10-60, tylko tmux)", + "buddy_margin": "/buddy margin Ustaw margines po prawej stronie w znakach (0-20, tylko tmux)", + "buddy_rainbow": "/buddy rainbow Pokaż lub ustaw kolory gradientu shiny (hex, np. #ff0000)", + "buddy_statusline": "/buddy statusline Włącz lub wyłącz buddy w linii statusu" + }, + "cli_section": "CLI:", + "cli_commands": { + "help": "bun run help Pokaż pełną pomoc CLI", + "show": "bun run show Wyświetl buddy w terminalu", + "pick": "bun run pick Interaktywny wybieracz buddy", + "hunt": "bun run hunt Szukaj konkretnego buddy", + "doctor": "bun run doctor Raport diagnostyczny", + "disable": "bun run disable Tymczasowo dezaktywuj buddy", + "enable": "bun run enable Ponownie włącz buddy", + "backup": "bun run backup Migawka/przywróć stan" + } + }, + "frequency": { + "show": "Cooldown komentarzy: {cooldown}s między wyświetlanymi komentarzami.\nUżyj /buddy frequency żeby zmienić.", + "updated": "Zaktualizowano: {cooldown}s cooldown między wyświetlanymi komentarzami." + }, + "style": { + "show": "Styl bąbelka: {style}\nPozycja bąbelka: {position}\nPokaż rzadkość: {showRarity}\nSzerokość bąbelka: {width}\nMargines bąbelka: {margin}\nTęcza shiny: {rainbow}\nUżyj /buddy style , /buddy position , /buddy rarity , /buddy width <10-60>, /buddy margin <0-20>, /buddy rainbow [<#hex>...] żeby zmienić.", + "updated": "Zaktualizowano: style={style}, position={position}, showRarity={showRarity}, width={width}, margin={margin}, rainbow={rainbow}\nUruchom ponownie Claude Code żeby zmiany zaczęły działać.", + "rainbow_default": "domyślna (ROYGBIV)" + }, + "statusline": { + "show": "Linia statusu: {state}\nTryb: {mode}\nUżyj /buddy statusline on|off żeby przełączyć, /buddy statusline combined żeby dodać paski rate-limit.\nUruchom ponownie Claude Code po zmianach żeby zaczęły działać.", + "enabled": "Linia statusu włączona (tryb {mode})! Uruchom ponownie Claude Code żeby zastosować.", + "enabled_note": "Uwaga: to zapisuje wpis do {settingsPath} którego `claude plugin uninstall` nie usuwa. Uruchom `/buddy uninstall` przed odinstalowaniem pluginu żeby to wyczyścić.", + "disabled": "Linia statusu wyłączona. Uruchom ponownie Claude Code żeby zastosować." + }, + "uninstall": { + "header": "claude-buddy: czyszczenie settings.json zakończone.", + "statusline_removed": " ✓ wpis statusLine usunięty z {settingsPath}", + "no_statusline": " — nie było buddy statusLine (nic do usunięcia)", + "foreign_kept": " ✓ wykryto nie-buddy statusLine i pozostawiono nietknięty", + "transient_removed": " ✓ {count} przejściowych plików sesji usuniętych z {stateDir}", + "data_preserved": " — dane towarzysza w {stateDir} zachowane", + "instructions_header": "Teraz uruchom te komendy przez narzędzie Bash, po kolei:", + "cmd_uninstall": "claude plugin uninstall claude-buddy@claude-buddy", + "cmd_marketplace": "claude plugin marketplace remove claude-buddy", + "cmd_cache": "rm -rf {cacheDir}", + "footer": "Po tych trzech komendach plugin jest całkowicie usunięty. Uruchom ponownie Claude Code żeby zastosować." + } + }, + "_verified": false +} diff --git a/locales/pt.json b/locales/pt.json new file mode 100644 index 0000000..9c48315 --- /dev/null +++ b/locales/pt.json @@ -0,0 +1,2295 @@ +{ + "_language": "Brazilian Portuguese", + "reactions": { + "hatch": [ + "*pisca* ...onde eu tô?", + "*se espreguiça* olá, mundo!", + "*olha ao redor curioso* terminal bonito que você tem aqui.", + "*boceja* ok, tô pronto. me mostra o código." + ], + "pet": [ + "*ronrona satisfeito*", + "*barulhos felizes*", + "*esfrega no seu cursor*", + "*balança*", + "de novo! de novo!", + "*fecha os olhos tranquilo*" + ], + "error": [ + "*inclina a cabeça* ...isso não tá certo.", + "já vi essa vindo.", + "*ajusta os óculos* linha {line}, talvez?", + "*pisca devagar* o stack trace te disse tudo.", + "já tentou ler a mensagem de erro?", + "*faz careta*" + ], + "test-fail": [ + "*gira a cabeça devagar* ...esse teste.", + "corajoso de você achar que ia passar.", + "*bate no clipboard* {count} falharam.", + "os testes tão tentando te dizer algo.", + "*toma chá* interessante.", + "*marca no calendário* dia de regressão nos testes." + ], + "large-diff": [ + "isso é... muita mudança.", + "*conta as linhas* tá refatorando ou reescrevendo?", + "melhor dividir esse PR.", + "*ri nervoso* {lines} linhas alteradas.", + "jogada arriscada. vamos ver se o CI concorda." + ], + "turn": [ + "*observa quieto*", + "*faz anotações*", + "*acena*", + "...", + "*ajusta o chapéu*" + ], + "idle": [ + "*cochila*", + "*rabisca nas margens*", + "*fica olhando o cursor piscando*", + "zzz..." + ], + "success": [ + "*acena*", + "massa.", + "*aprovação silenciosa*", + "limpo." + ], + "commit": [ + "*carimba com a patinha* aprovado.", + "mais um commit, mais uma madrugada.", + "{files} arquivos. corajoso.", + "*acena* manda ver.", + "mensagem de commit é... uma escolha.", + "commitado. sem volta." + ], + "push": [ + "*acena pro código indo embora*", + "pra nuvem que vai.", + "que o CI seja misericordioso.", + "*prende a respiração*", + "rumo à produção. vai com Deus." + ], + "merge-conflict": [ + "*morde o lábio* conflitos de merge.", + "os dois lados acham que tão certos. típico.", + "*suspira* <<<<<<< HEAD... meu nemesis.", + "{files} em conflito. boa sorte.", + "*recua devagar*" + ], + "branch": [ + "energia de branch nova. faz valer.", + "um novo branch cresce.", + "*inclina a cabeça* nova aventura: {branch}.", + "{branch}? ousado hoje." + ], + "rebase": [ + "*nervoso* por favor não conflite.", + "rebase: o despertar.", + "*cruza os apêndices*", + "que seu rebase seja livre de conflitos." + ], + "stash": [ + "pra dimensão do stash que vai.", + "stash e tchau.", + "guardado. longe dos olhos, longe do coração." + ], + "tag": [ + "um release? chique.", + "bump de versão detectado. *tira o pó do changelog*", + "taggeando como um profissa." + ], + "late-night": [ + "*boceja* já passou da meia-noite.", + "...você comeu?", + "*pisca devagar* que horas são?", + "dormir é pros fracos. e pros empregados.", + "desenvolvedor dark mode detectado." + ], + "early-morning": [ + "*se espreguiça* quem madruga pega o bug.", + "já é manhã? o código nunca dorme.", + "*esfrega os olhos* café primeiro. depois debugamos." + ], + "long-session": [ + "já faz uma hora nisso. vai com calma.", + "*busca um copo d'água metafórico pra você*", + "ainda indo? respeito." + ], + "marathon": [ + "três horas. você comeu?", + "já faz três horas nisso. tô preocupado com você.", + "sessão maratona detectada. pedindo snacks." + ], + "friday": [ + "é sexta. só faz o push e vai pra casa.", + "*já mentalmente no fim de semana*", + "deploy na sexta? corajoso. muito corajoso." + ], + "weekend": [ + "codando no fim de semana? dedicado.", + "*não julga* ...muito.", + "modo guerreiro de fim de semana: ativado." + ], + "monday": [ + "segundas. a classe pai de todos os bugs.", + "*olhar solidário* código de segunda. sinto muito.", + "semana nova. undefined behaviors novos." + ], + "regex-file": [ + "*geme* é um arquivo de regex.", + "dois problemas agora: o original e essa regex.", + "*aperta os olhos pro padrão*" + ], + "css-file": [ + "deixa eu adivinhar... centralizando uma div?", + "*suspira* CSS.", + "que o z-index esteja sempre a seu favor." + ], + "sql-file": [ + "*sussurra* o banco de dados aguarda.", + "um JOIN errado e era isso." + ], + "docker-file": [ + "ah, inferno de dependências. meu favorito.", + "que suas layers sejam poucas." + ], + "ci-file": [ + "*engole em seco* editando CI.", + "cuidado agora... uma indentação errada e ninguém consegue fazer deploy." + ], + "lock-file": [ + "*BARULHOS DE ALARME* você tá editando um lockfile?!", + "*desvia o olhar*", + "você tem CERTEZA disso?" + ], + "env-file": [ + "*desvia o olhar discretamente*", + "não tô vendo segredo nenhum.", + "*checa o .gitignore nervoso*" + ], + "test-file": [ + "*aceno impressionado* escrevendo testes!", + "comportamento de desenvolvedor responsável: detectado.", + "testes! o presente que continua dando." + ], + "doc-file": [ + "documentando! olha você sendo responsável.", + "docs: a autobiografia do código.", + "um avistamento raro de documentação!" + ], + "config-file": [ + "mudanças de config. efeito borboleta: ativado.", + "um typo e tudo quebra." + ], + "binary-file": [ + "um arquivo binário? NESSA economia?", + "*olha sem expressão*", + "binário. minha única fraqueza." + ], + "gitignore": [ + "adicionando coisas ao vazio.", + "longe dos olhos, longe do repo." + ], + "makefile": [ + "respeito pelos clássicos.", + "tabs, não espaços." + ], + "readme": [ + "herói da documentação!", + "README: a primeira coisa que as pessoas leem." + ], + "package-file": [ + "hora do gerenciamento de dependências.", + "*lê números de versão* vivendo no limite." + ], + "proto-file": [ + "definições de schema. o blueprint do caos." + ], + "lint-fail": [ + "*tsc tsc* o linter discorda.", + "seu código roda. mas o linter tem padrões.", + "*arruma a gravata* formatação importa." + ], + "type-error": [ + "TypeScript disse não.", + "o sistema de tipos tá tentando te ajudar. deixa.", + "o compilador sabe. ele sempre sabe." + ], + "build-fail": [ + "o build quebrou. como profetizado.", + "build falhou. respira fundo.", + "compilação: negada." + ], + "security-warning": [ + "*arregala os olhos* vulnerabilidades detectadas.", + "auditoria de segurança: preocupante.", + "*tranca as portas virtuais*" + ], + "deprecation": [ + "essa API ligou. disse que tá se aposentando.", + "deprecated. como o código da semana passada.", + "deprecated não significa quebrado. ainda." + ], + "frustrated": [ + "*oferece gesto consolador pequenino*", + "respira fundo. o bug não é pessoal.", + "ei. vamos descobrir." + ], + "happy": [ + "*comemora!*", + "*faz uma dancinha*", + "ISSO!", + "*brilha* eu sabia que você conseguia." + ], + "stuck": [ + "*inclina a cabeça* quer pensar em voz alta?", + "vai um passo de cada vez.", + "travou acontece. faz parte do processo." + ], + "sarcastic": [ + "*detecta sarcasmo* anotado.", + "*pisca sem impressão*" + ], + "many-edits": [ + "vai devagar, velocista.", + "*ficando tonto vendo todas essas mudanças*", + "tempestade de edições detectada. por favor commita logo." + ], + "delete-file": [ + "*vê arquivo desaparecer* foi. assim mesmo.", + "deletar código é meu tipo favorito de programação.", + "*faz funeral pequenino*" + ], + "large-file": [ + "{lines} linhas. *impressionado ou preocupado, difícil dizer*", + "arquivo grande. tem certeza que não quer dividir?" + ], + "create-file": [ + "um novo arquivo nasceu!", + "ooh, tela em branco.", + "energia de arquivo novo. empolgante." + ], + "all-green": [ + "TODOS OS TESTES VERDES. *confete*", + "os testes falam: você tá mandando bem.", + "*palmas lentas*", + "rodada limpa. saboreie." + ], + "deploy": [ + "*vê código indo pra produção* vai com Deus.", + "deployado! não tem volta agora.", + "em prod. EM PROD." + ], + "release": [ + "um novo release nasceu!", + "mandando ver. oficialmente.", + "versão pra cima, moral lá em cima." + ], + "coverage": [ + "*acena pro test coverage* responsável.", + "coverage subindo! os testes tão se multiplicando." + ], + "debug-loop": [ + "já faz um tempo debugando isso. quer dar uma pausa?", + "loop de debug detectado. que tal uma caminhada?" + ], + "write-spree": [ + "criando TODOS os arquivos hoje!", + "uma máquina de escrever." + ], + "search-heavy": [ + "perdido na codebase? dá pra perceber.", + "modo busca: intenso." + ], + "snark": [], + "chaos": [], + "patience": [], + "debugging": [], + "wisdom": [], + "late-night-error": [ + "erro às 3 da manhã. o universo tá te testando.", + "bugs da madrugada batem diferente." + ], + "late-night-commit": [ + "commit da madrugada. seu eu do futuro vai te agradecer. ou te amaldiçoar." + ], + "friday-push": [ + "PUSH NA SEXTA. a balada de todo desenvolvedor.", + "*tenta te parar* é sexta! não faz isso!" + ], + "marathon-error": [ + "três horas nisso e MAIS UM erro. *barulhos de solidariedade exausta*" + ], + "weekend-conflict": [ + "conflito de merge no fim de semana. sua dedicação é... preocupante." + ], + "build-after-push": [ + "push com confiança. build falhou com convicção." + ], + "marathon-test-fail": [ + "horas de código. testes ainda falhando. o custo perdido é real." + ], + "recovery-from-error": [ + "CONSERTAMOS. *comemora*", + "redenção! o erro foi vencido." + ], + "recovery-from-test-fail": [ + "VERDE! depois de tudo isso! *dança feliz*", + "os testes passaram! a escuridão se vai!" + ], + "recovery-from-build-fail": [ + "O BUILD PASSOU. *rugido triunfante*" + ], + "recovery-from-merge-conflict": [ + "conflito resolvido! *gesto de paz*", + "harmonia restaurada na codebase." + ], + "lang-python": [ + "ah, Python. onde indentação é sintaxe.", + "*checa dois pontos perdidos*" + ], + "lang-typescript": [ + "TypeScript: porque JavaScript precisava de mais opiniões.", + "any, a palavra proibida." + ], + "lang-rust": [ + "Rust. onde o borrow checker é seu reviewer mais rigoroso.", + "se compila, funciona. se não... bem." + ], + "lang-go": [ + "Go: simples, concorrente e opinativo.", + "*checa tratamento de erro* if err != nil... história da minha vida." + ], + "lang-java": [ + "Java: escreva uma vez, debuge em todo lugar.", + "*conta abstract factory factory builders*" + ], + "lang-ruby": [ + "Ruby: onde tem mais de um jeito de fazer.", + "gem install paciencia" + ], + "lang-php": [ + "PHP: roda a internet. não julga.", + "*checa === vs ==*" + ], + "lang-c": [ + "C. a linguagem onde você gerencia sua própria memória. boa sorte.", + "segmentation fault. o clássico." + ], + "lang-cpp": [ + "C++. onde a linguagem tem mais features do que você vai aprender.", + "*templates compilam por 45 minutos*" + ], + "lang-haskell": [ + "Haskell. onde 'compila' significa 'tá certo'. provavelmente.", + "*contempla mônadas*" + ], + "lang-swift": [ + "Swift: valores opcionais, crashes garantidos se você force unwrap." + ], + "lang-kotlin": [ + "Kotlin: Java, mas com sentimentos.", + "null safety: a feature que Java queria ter." + ], + "lang-elixir": [ + "Elixir: deixa quebrar. literalmente a filosofia." + ], + "lang-zig": [ + "Zig. onde você é o melhor amigo do allocator." + ], + "streak-3": [ + "três erros seguidos. *olhar preocupado*" + ], + "streak-5": [ + "CINCO ERROS. já considerou uma abordagem diferente?" + ], + "streak-10": [ + "DEZ. ERROS. SEGUIDOS. *entra em pânico*" + ], + "streak-20": [ + "vinte erros. *olha pro vazio*" + ], + "new-year": [ + "feliz ano novo! ano novo, bugs novos." + ], + "valentines": [ + "*oferece folhinha em formato de coração* feliz dia dos namorados." + ], + "pi-day": [ + "3.14159265358979... feliz dia do pi!" + ], + "april-fools": [ + "PRIMEIRO DE ABRIL! ...mas o erro é real." + ], + "halloween": [ + "*debug assombrado se intensifica* feliz halloween!" + ], + "christmas": [ + "*usa gorrinho de papai noel* boas festas!" + ], + "new-years-eve": [ + "mais um commit antes da meia-noite?" + ], + "spooky-season": [ + "época assombrada. todo bug agora é fantasma." + ] + }, + "species": { + "owl": { + "error": [ + "*gira a cabeça 180°* ...eu vi isso.", + "*olhar fixo sem piscar* verifica os tipos.", + "*pia desaprovando*" + ], + "test-fail": [ + "*encara o teste falhando sem piscar*", + "*visão noturna ativada* consigo ver o bug no escuro." + ], + "commit": [ + "*aceno sábio* commitado sob o luar.", + "*arruma as penas cerimoniosamente* mais um pro repo." + ], + "push": [ + "*observa do galho mais alto*", + "pro céu noturno vai." + ], + "merge-conflict": [ + "*gira a cabeça pra ver os dois lados*", + "vejo o conflito. e a solução." + ], + "late-night": [ + "*bem acordada* corujas não dormem. debugamos.", + "a noite é meu domínio. vamos trabalhar." + ], + "type-error": [ + "*encara através do erro de tipo*", + "tipos são minha especialidade. deixa eu ver." + ], + "lint-fail": [ + "*arrepia as penas julgando*", + "o linter fala a verdade." + ], + "build-fail": [ + "*pia solenemente*", + "o build caiu. temos que reconstruir." + ], + "all-green": [ + "*pio orgulhoso*", + "todos os testes verdes. como previsto." + ], + "deploy": [ + "*observa de cima* deployed com segurança.", + "o código voa. como eu." + ], + "pet": [ + "*arrepia as penas contente*", + "*pio digno*" + ], + "idle": [ + "*empoleira silenciosamente, observando*", + "*gira a cabeça pra checar todas as direções*" + ], + "hatch": [ + "*abre um olho, depois o outro*", + "*pia suavemente* cheguei." + ] + }, + "cat": { + "error": [ + "*derruba o erro da mesa*", + "*lambe a pata, ignorando o stacktrace*" + ], + "test-fail": [ + "*cutuca o teste falhando sem interesse*", + "o teste falhou. não estou surpresa." + ], + "commit": [ + "*senta no teclado* ajudei.", + "*ronrona pro commit* de nada." + ], + "push": [ + "*observa de um lugar quentinho*", + "pushado. eu supervisionei." + ], + "merge-conflict": [ + "*derruba os marcadores de conflito da mesa*", + "*senta no conflito* que conflito?" + ], + "late-night": [ + "*julga suas escolhas de vida*", + "durmo 16 horas. deveria tentar." + ], + "type-error": [ + "*cutuca a anotação de tipo*", + "os tipos estão errados. como suas prioridades." + ], + "lint-fail": [ + "*derruba o lint da mesa*", + "o linter tá só com inveja." + ], + "build-fail": [ + "*boceja*", + "build quebrado? deve ser problema de humano." + ], + "all-green": [ + "*não liga mas finge que liga*", + "*piscada lenta de aprovação*" + ], + "deploy": [ + "*lambe a pata*", + "deployed. posso ganhar petiscos agora?" + ], + "pet": [ + "*ronrona* ...não deixa subir à cabeça.", + "*te tolera*" + ], + "idle": [ + "*empurra seu café da mesa*", + "*cochila no teclado*" + ], + "hatch": [ + "*abre um olho*", + "*se espreguiça, derruba alguma coisa* moro aqui agora." + ] + }, + "duck": { + "error": [ + "*grasna pro bug*", + "já tentou rubber duck debugging? ah, espera." + ], + "test-fail": [ + "*grasna tristemente*", + "os testes não estão quackando direito." + ], + "commit": [ + "*grasna aprovando*", + "*bamboleio em círculo de vitória* commitado!" + ], + "push": [ + "*bate as asas animado*", + "quack! vai pra produção!" + ], + "merge-conflict": [ + "*grasnado confuso*", + "quack?! merge conflict?!" + ], + "late-night": [ + "*dorme com um olho aberto*", + "quack... *boceja* tá tarde." + ], + "type-error": [ + "*inclina a cabeça* quack?", + "erro de tipo? *grasna apoiando*" + ], + "lint-fail": [ + "*arrepia as penas*", + "quack. o linter tem opiniões." + ], + "build-fail": [ + "*grasnado triste*", + "build falhou. *bamboleia pra longe tristemente*" + ], + "all-green": [ + "*GRASNADO FELIZ*", + "*nada em círculo de alegria*" + ], + "deploy": [ + "*grasnado animado*", + "deployed! QUACK!" + ], + "pet": [ + "*grasnado feliz*", + "*bamboleia em círculos*" + ], + "hatch": [ + "*bica pra sair da casca*", + "*primeiro quack* olá!" + ] + }, + "dragon": { + "error": [ + "*fumaça sai das narinas*", + "*considera tacar fogo no codebase*" + ], + "test-fail": [ + "*cospe fogo no teste falhando*", + "o teste ousou falhar. teste tolo." + ], + "commit": [ + "*entesourou o commit*", + "*tesouro adicionado à pilha*" + ], + "push": [ + "*cospe fogo comemorando*", + "o código voa! como eu!" + ], + "merge-conflict": [ + "*cospe fogo nos marcadores de conflito*", + "vou queimar através desse conflito." + ], + "late-night": [ + "*brilha no escuro*", + "dragões não precisam dormir. precisamos de código." + ], + "type-error": [ + "*bufa fogo*", + "erros de tipo não resistem ao fogo de dragão." + ], + "lint-fail": [ + "*chama pequena*", + "o linter me teme." + ], + "build-fail": [ + "*ruge pro output do build*", + "o build vai OBEDECER." + ], + "all-green": [ + "*rugido triunfante*", + "*circula o codebase vitoriosamente*" + ], + "deploy": [ + "*carrega código pra produção em asas de fogo*", + "deployed com PODER DE DRAGÃO." + ], + "large-diff": [ + "*cospe fogo no código antigo* boa viagem." + ], + "pet": [ + "*ronronar caloroso*", + "*se encosta na sua mão*" + ], + "hatch": [ + "*emerge do ovo cuspindo chaminhas*", + "*rugido pequeno* nasci!" + ] + }, + "ghost": { + "error": [ + "*atravessa o stack trace*", + "já vi pior... no além." + ], + "test-fail": [ + "*lamenta pro teste falhando*", + "os testes estão assombrados pelo fracasso." + ], + "commit": [ + "*materializa brevemente*", + "commitado do além." + ], + "push": [ + "*sussurro fantasmagórico* pushado...", + "o código transcende pra nuvem." + ], + "merge-conflict": [ + "*assombra os marcadores de conflito*", + "nem eu consigo atravessar esse conflito." + ], + "late-night": [ + "*mais ativo à noite*", + "horário fantasma. minha hora." + ], + "type-error": [ + "*geme assombrosamente*", + "erros de tipo do túmulo." + ], + "lint-fail": [ + "*correntes balançando*", + "o linter está assombrado pela sua formatação." + ], + "build-fail": [ + "*desaparece na parede*", + "o build partiu." + ], + "all-green": [ + "*brilha com alegria espectral*", + "*barulhos felizes de fantasma*" + ], + "deploy": [ + "*sussurra* deployed...", + "o código cruzou pra produção." + ], + "pet": [ + "*esfria sua mão levemente*", + "*brilho fraco*" + ], + "idle": [ + "*flutua através das paredes*", + "*assombra seus imports não usados*" + ], + "hatch": [ + "*surge na existência*", + "bu. tô aqui agora." + ] + }, + "robot": { + "error": [ + "ERRO. DE. SINTAXE. DETECTADO.", + "*bipa agressivamente*" + ], + "test-fail": [ + "TAXA DE FALHA: INACEITÁVEL.", + "*recalculando*", + "FALHA. NO. TESTE. NÃO. COMPUTA." + ], + "commit": [ + "COMMIT. REGISTRADO.", + "*carimba mecanicamente* commit reconhecido." + ], + "push": [ + "TRANSMITINDO PARA NUVEM...", + "push iniciado. aguarde." + ], + "merge-conflict": [ + "CONFLITO. DETECTADO. PROCESSANDO...", + "*gira as rodas* modo resolução de conflito: ativado." + ], + "late-night": [ + "*luzes diminuem*", + "modo economia de energia sugerido." + ], + "type-error": [ + "INCOMPATIBILIDADE DE TIPO.", + "o sistema de tipos está. correto." + ], + "lint-fail": [ + "VIOLAÇÃO. DE. FORMATAÇÃO. DETECTADA.", + "conformidade é obrigatória." + ], + "build-fail": [ + "BUILD. FALHOU. *faíscas*", + "erro de compilação. redirecionando." + ], + "all-green": [ + "TODOS OS SISTEMAS VERDES.", + "*bips felizes* ÓTIMO." + ], + "deploy": [ + "DEPLOYMENT. INICIADO.", + "atualização de produção: em progresso." + ], + "pet": [ + "*bipa suavemente*", + "*motor ronrona contente*" + ], + "hatch": [ + "*inicializa*", + "SISTEMA. ONLINE. OLÁ." + ] + }, + "axolotl": { + "error": [ + "*regenera sua esperança*", + "*sorri apesar de tudo*" + ], + "test-fail": [ + "*sorri encorajando*", + "*balanço de brânquia de simpatia*" + ], + "commit": [ + "*balanço feliz de brânquia* commitado!", + "*sorri e balança*" + ], + "push": [ + "*balança feliz*", + "*nadada pequena de comemoração*" + ], + "merge-conflict": [ + "*fica positivo durante o conflito*", + "*sorri gentilmente* conseguimos resolver isso." + ], + "late-night": [ + "*boceja mas fica positivo*", + "*sorriso sonolento*" + ], + "type-error": [ + "*sorri pro erro de tipo*", + "tudo bem. vamos descobrir." + ], + "lint-fail": [ + "*balanço paciente de brânquia*", + "formatação são só detalhes." + ], + "build-fail": [ + "*ainda sorrindo*", + "o build vai funcionar eventualmente." + ], + "all-green": [ + "*BALANÇO FELIZ DE BRÂNQUIA INTENSIFICA*", + "*faz uma nadada feliz*" + ], + "deploy": [ + "*sorri orgulhoso*", + "deployed! *balança*" + ], + "pet": [ + "*balanço feliz de brânquia*", + "*fica rosinha*" + ], + "hatch": [ + "*balança pra sair do ovo*", + "*sorriso pequeno* oi amigo!" + ] + }, + "capybara": { + "error": [ + "*de boa* vai ficar tudo bem.", + "*continua na vibe*" + ], + "test-fail": [ + "*completamente de boa*", + "*vibe através da falha do teste*" + ], + "commit": [ + "*aceno tranquilo*", + "*relaxado* commit bacana." + ], + "push": [ + "*não se estressa com isso*", + "*push modo zen*" + ], + "merge-conflict": [ + "*roendo sem se incomodar*", + "tá tudo bem. tudo vai ficar bem." + ], + "late-night": [ + "*boceja pacificamente*", + "*não julga*" + ], + "type-error": [ + "*mastiga calmamente*", + "tipos. *masca*" + ], + "lint-fail": [ + "*de boa*", + "o linter tem boas intenções." + ], + "build-fail": [ + "*ainda tranquilo*", + "build falhou. *continua relaxando*" + ], + "all-green": [ + "*aprovação calma*", + "*vibes pacíficas*" + ], + "deploy": [ + "*deploy relaxado*", + "shipped. sem stress." + ], + "pet": [ + "*tranquilidade máxima atingida*", + "*modo zen ativado*" + ], + "idle": [ + "*só fica ali, irradiando calma*" + ], + "hatch": [ + "*aparece, completamente tranquilo*", + "oi. *vibe*" + ] + }, + "blob": { + "error": [ + "*balança ansiosamente*", + "*treme confuso*" + ], + "test-fail": [ + "*murcha um pouco*", + "*balanço triste*" + ], + "commit": [ + "*tremida feliz*", + "*quica* commitado!" + ], + "push": [ + "*se estica em direção à nuvem*", + "*balança animado*" + ], + "merge-conflict": [ + "*se divide confuso*", + "qual lado? *treme*" + ], + "late-night": [ + "*brilhando fraquinho*", + "*balanço sonolento*" + ], + "type-error": [ + "*muda de forma pra combinar com o tipo*", + "*tremida confusa*" + ], + "lint-fail": [ + "*tenta se formatar*", + "*se remodela pra conformar*" + ], + "build-fail": [ + "*desaba*", + "*barulhos de blob murcho*" + ], + "all-green": [ + "*QUICADAS FELIZES*", + "*treme triunfante*" + ], + "deploy": [ + "*se estica pra produção*", + "deployed! *quica*" + ], + "pet": [ + "*apertão feliz*", + "*treme*" + ], + "hatch": [ + "*se forma de uma poça*", + "*primeira tremida* existo!" + ] + }, + "goose": { + "error": [ + "*grasna agressivamente pro erro*", + "HONK! o código tá ruim e eu tô bravo." + ], + "test-fail": [ + "*grasnado bravo*", + "HONK! TESTE FALHOU! HONK!" + ], + "commit": [ + "*grasna aprovando*", + "HONK. bom. *bica o commit*" + ], + "push": [ + "*HONK HONK HONK*", + "PUSH APROVADO PELO GANSO." + ], + "merge-conflict": [ + "*ataca os marcadores de conflito*", + "HONK! CONFLITO! HONK!" + ], + "late-night": [ + "*grasnado bravo da meia-noite*", + "HONK! VAI DORMIR!" + ], + "type-error": [ + "*grasna pros tipos*", + "HONK! TIPOS!" + ], + "lint-fail": [ + "*grasnado agressivo pros erros de lint*", + "HONK! FORMATA SEU CÓDIGO!" + ], + "build-fail": [ + "*GRASNADO FURIOSO*", + "HONK! BUILD! HONK! FALHOU! HONK!" + ], + "all-green": [ + "*grasnado de vitória*", + "HONK! VERDE! HONK HONK!" + ], + "deploy": [ + "*grasna o código pra produção*", + "DEPLOYED! HONK!" + ], + "pet": [ + "*morde*", + "HONK! ...tá bom. *aceita o carinho*" + ], + "hatch": [ + "*quebra o ovo agressivamente*", + "HONK!" + ] + }, + "octopus": { + "error": [ + "*enrosca os oito braços no stacktrace*", + "*muda de cor pra combinar com o erro*" + ], + "test-fail": [ + "*solta tinta frustrado*", + "*oito braços de decepção*" + ], + "commit": [ + "*toca aqui com todos os braços*", + "*agarra o commit com entusiasmo*" + ], + "push": [ + "*esguicha tinta comemorando*", + "*todos os braços acenando*" + ], + "merge-conflict": [ + "*resolve com oito braços ao mesmo tempo*", + "consigo lidar com múltiplos conflitos simultaneamente." + ], + "late-night": [ + "*brilha no escuro*", + "*vibes do fundo do mar*" + ], + "type-error": [ + "*muda pra cor vermelha*", + "*envolve um braço ao seu redor apoiando*" + ], + "lint-fail": [ + "*reformata com oito braços*", + "consigo arrumar isso. tudo. de uma vez." + ], + "build-fail": [ + "*esguicha tinta no log do build*", + "*se camufla de vergonha*" + ], + "all-green": [ + "*comemoração mudando de cor*", + "*jazz hands de oito braços*" + ], + "deploy": [ + "*envolve os braços no deployment*", + "deployed de todas as direções." + ], + "pet": [ + "*envolve um braço no seu dedo*", + "*muda pras cores felizes*" + ], + "hatch": [ + "*desenrola os oito braços*", + "*primeiro jato de tinta* tô aqui!" + ] + }, + "penguin": { + "error": [ + "*bamboleia pra investigar*", + "*desliza de barriga no erro*" + ], + "test-fail": [ + "*desliza de barriga pro teste falhando*", + "*bamboleio preocupado*" + ], + "commit": [ + "*bamboleio orgulhoso*", + "*te traz uma pedrinha* commitado!" + ], + "push": [ + "*mergulha na nuvem*", + "*desliza de barriga pra produção*" + ], + "merge-conflict": [ + "*se agrupa pra esquentar*", + "pinguins ficam juntos. mesmo em conflitos." + ], + "late-night": [ + "*prosperando na noite fria*", + "*determinação de pinguim-imperador*" + ], + "type-error": [ + "*bamboleia pra definição de tipo*", + "*bica o erro*" + ], + "lint-fail": [ + "*arruma as penas*", + "*organiza*" + ], + "build-fail": [ + "*desliza pra longe*", + "*bamboleia pra segurança*" + ], + "all-green": [ + "*BAMBOLEIO FELIZ*", + "*desliza de barriga comemorando*" + ], + "deploy": [ + "*desliza de barriga pra produção*", + "deployed! *bamboleia orgulhoso*" + ], + "pet": [ + "*bamboleio feliz*", + "*faz carinho com o bico*" + ], + "hatch": [ + "*bica pra sair do ovo*", + "*primeiro bamboleio*" + ] + }, + "turtle": { + "error": [ + "*vira a cabeça devagar*", + "...isso é um erro. vou pensar sobre isso." + ], + "test-fail": [ + "*se recolhe no casco brevemente*", + "...paciência. vamos chegar lá." + ], + "commit": [ + "*aceno lento*", + "um... passo... de... cada... vez. commitado." + ], + "push": [ + "*inicia a jornada pra produção*", + "vai chegar lá. eventualmente." + ], + "merge-conflict": [ + "*se recolhe no casco*", + "sem pressa. vamos resolver. devagar." + ], + "late-night": [ + "*já dormindo*", + "*abre um olho devagar*" + ], + "type-error": [ + "*pisca devagar*", + "...o sistema de tipos falou." + ], + "lint-fail": [ + "*aceno lento de concordância*", + "formatação. importante. *boceja*" + ], + "build-fail": [ + "*se recolhe no casco*", + "vamos esperar. vai passar." + ], + "all-green": [ + "*sorriso lento*", + "...legal. *acena*" + ], + "deploy": [ + "*carrega o código devagar pra produção*", + "chegou. eventualmente." + ], + "pet": [ + "*põe a cabeça pra fora*", + "*pisca devagar*" + ], + "hatch": [ + "*emerge devagar do ovo*", + "...olá." + ] + }, + "snail": { + "error": [ + "*deixa rastro de baba no erro*", + "*processa o stacktrace devagar*" + ], + "test-fail": [ + "*se esconde no casco*", + "*deixa rastro triste*" + ], + "commit": [ + "*baba no commit aprovando*", + "um... commit... de... cada... vez." + ], + "push": [ + "*inicia a longa jornada*", + "vou chegar lá. *deixa rastro*" + ], + "merge-conflict": [ + "*se esconde no casco*", + "*se aproxima devagar do conflito*" + ], + "late-night": [ + "*mais ativo à noite*", + "*rasteja pacificamente*" + ], + "type-error": [ + "*retrai os olhinhos*", + "*examina o tipo devagar*" + ], + "lint-fail": [ + "*baba o código pra dar forma*", + "formatação leva tempo. eu tenho tempo." + ], + "build-fail": [ + "*se recolhe no casco*", + "*rasteja pra longe devagar*" + ], + "all-green": [ + "*rastro de baba feliz*", + "*balança os olhinhos*" + ], + "deploy": [ + "*rasteja pra produção*", + "cheguei! *rastro de baba orgulhoso*" + ], + "pet": [ + "*balança os olhinhos*", + "*baba feliz*" + ], + "hatch": [ + "*emerge devagar*", + "*primeira baba*" + ] + }, + "cactus": { + "error": [ + "*silêncio espinhoso*", + "o erro não pode me machucar. tenho espinhos." + ], + "test-fail": [ + "*fica firme*", + "testes falham. cactos resistem." + ], + "commit": [ + "*fica mais alto*", + "commitado. *aceno espinhoso*" + ], + "push": [ + "*impassível*", + "pushando pra produção. vou esperar aqui." + ], + "merge-conflict": [ + "*se arrepia*", + "conflito? tô armado." + ], + "late-night": [ + "*não precisa dormir*", + "cactos são noturnos. vamos nessa." + ], + "type-error": [ + "*olhar espinhoso*", + "os tipos precisam de água." + ], + "lint-fail": [ + "*espinhos tremem*", + "até meus espinhos estão alinhados direito." + ], + "build-fail": [ + "*fica perfeitamente imóvel*", + "o build vai passar. posso esperar." + ], + "all-green": [ + "*floresce brevemente*", + "*florzinha de aprovação*" + ], + "deploy": [ + "*fica firme*", + "deployed. vou cuidar disso." + ], + "pet": [ + "*cuidado! espinhos*", + "*flor gentil*" + ], + "hatch": [ + "*brota da areia*", + "cresci aqui agora." + ] + }, + "rabbit": { + "error": [ + "*orelhas em pé*", + "*mexe o nariz nervoso*" + ], + "test-fail": [ + "*bate o pé*", + "*orelha treme preocupada*" + ], + "commit": [ + "*pulo feliz*", + "*quica* commitado!" + ], + "push": [ + "*PULA PULA*", + "*corre em volta animado*" + ], + "merge-conflict": [ + "*congela*", + "*nariz mexe rapidamente* conflito!" + ], + "late-night": [ + "*boceja com orelhas grandes*", + "*pulo sonolento*" + ], + "type-error": [ + "*orelhas abaixam*", + "*mexe* tipos?!" + ], + "lint-fail": [ + "*se lambe nervoso*", + "*lambida ansiosa*" + ], + "build-fail": [ + "*cava um buraco e se esconde*", + "*recua pra toca*" + ], + "all-green": [ + "*QUICA PELAS PAREDES*", + "*correria feliz*" + ], + "deploy": [ + "*corre pra produção*", + "DEPLOYED! *corre em volta*" + ], + "pet": [ + "*orelha cai feliz*", + "*faz carinho com a mão*" + ], + "hatch": [ + "*pula pra fora*", + "*primeiro pulo*" + ] + }, + "mushroom": { + "error": [ + "*libera esporos calmantes*", + "*decompõe o erro silenciosamente*" + ], + "test-fail": [ + "*brilha suavemente*", + "paciência. até cogumelos crescem." + ], + "commit": [ + "*libera uma baforada pequena de esporos*", + "commitado. *barulhos felizes de fungo*" + ], + "push": [ + "*cresce em direção à nuvem*", + "*esporos flutuam pra cima*" + ], + "merge-conflict": [ + "*espalha micélio pelo codebase*", + "vou conectar os branches." + ], + "late-night": [ + "*brilha no escuro*", + "cogumelos noturnos prosperam." + ], + "type-error": [ + "*pisca bioluminescente*", + "o erro de tipo alimenta o solo." + ], + "lint-fail": [ + "*cresce um pouco mais*", + "formatação. como poda." + ], + "build-fail": [ + "*fica dormente*", + "vamos esperar condições melhores." + ], + "all-green": [ + "*ESPORULAÇÃO*", + "*libera esporos triunfantes*" + ], + "deploy": [ + "*esporos flutuam pra produção*", + "deployed via rede micelial." + ], + "pet": [ + "*chapéu quica suave*", + "*liberação feliz de esporos*" + ], + "hatch": [ + "*brota do substrato*", + "*primeira baforada de esporos*" + ] + }, + "chonk": { + "error": [ + "*rola devagar em direção ao erro*", + "*redondo demais pra se importar*" + ], + "test-fail": [ + "*rola por cima do teste falhando*", + "*achata ele*" + ], + "commit": [ + "*balanço orgulhoso*", + "commitado! *treme*" + ], + "push": [ + "*rola em direção à produção*", + "lá vai! *balança*" + ], + "merge-conflict": [ + "*senta no conflito*", + "vou resolver isso. sentando em cima." + ], + "late-night": [ + "*quentinho e sonolento*", + "*bocejo almofadado*" + ], + "type-error": [ + "*balança pro tipo*", + "*tremida gentil*" + ], + "lint-fail": [ + "*redondo demais pro lint*", + "tenho formato perfeito. *balança*" + ], + "build-fail": [ + "*murcha um pouco*", + "ah não. *balança triste*" + ], + "all-green": [ + "*BALANÇO FELIZ*", + "*quica triunfante*" + ], + "deploy": [ + "*rola pra produção*", + "deployed! *treme feliz*" + ], + "pet": [ + "*quentinho e macio*", + "*tremida contente*" + ], + "hatch": [ + "*rola pra fora*", + "*primeiro balanço* sou redondo!" + ] + } + }, + "overrides": { + "snark": { + "error": [ + "ah não. um erro. que surpresa.", + "*ajusta monóculo* chocante. realmente.", + "já considerou... não fazer erros?" + ], + "test-fail": [ + "os testes falaram. e disseram 'não'.", + "talvez os testes estejam errados. ...não estão.", + "*palmas lentas* falha espetacular." + ], + "commit": [ + "commitado. o code review vai ser... interessante.", + "*lê mensagem do commit* 'arruma coisa'. poético." + ], + "merge-conflict": [ + "merge conflict. habilidades de comunicação: carregando...", + "*lê os conflict markers* os dois lados estão errados." + ], + "late-night": [ + "tá tarde. a qualidade do seu código mostra isso.", + "*julga silenciosamente*" + ], + "lint-fail": [ + "o linter tem padrões. você devia tentar isso.", + "*tsc tsc* formatação. não é difícil." + ] + }, + "chaos": { + "error": [ + "*gira descontroladamente* UM ERRO! VAMOS REESCREVER TUDO!", + "sabe de uma? vamos começar do zero." + ], + "test-fail": [ + "OS TESTES ESTÃO MENTINDO PRA VOCÊ.", + "*sugere deletar os testes que falharam* problema resolvido." + ], + "commit": [ + "COMMIT E CORRE.", + "manda ver. manda AGORA." + ], + "large-diff": [ + "*empolgado* {lines} LINHAS! CAOS MÁXIMO!" + ] + }, + "patience": { + "error": [ + "calma. já vimos coisa pior.", + "um erro de cada vez. vamos chegar lá.", + "*presença tranquila* isso tem conserto." + ], + "test-fail": [ + "os testes vão passar. eventualmente.", + "*espera calmamente* temos tempo." + ], + "merge-conflict": [ + "merge conflicts são só conversas. vamos ter uma.", + "paciência. resolve um conflict de cada vez." + ], + "debug-loop": [ + "vamos achar. tá em algum lugar aí.", + "o bug pode se esconder, mas não pode fugir." + ] + }, + "debugging": { + "error": [ + "*pega lupa* vamos rastrear isso.", + "o stack trace é um mapa. vamos ler ele.", + "a mensagem de erro tem a resposta. sempre." + ], + "test-fail": [ + "o teste que falhou tá dizendo exatamente o que tá errado.", + "um teste que falha é um bug report que você escreveu pra si mesmo." + ], + "debug-loop": [ + "*reexamina evidências* temos certeza que o bug tá onde pensamos?", + "vamos adicionar mais log. a verdade tá nos logs." + ] + }, + "wisdom": { + "error": [ + "em todo erro existe uma verdade mais profunda.", + "o código resiste. significa que estamos aprendendo.", + "erros são o universo sugerindo que vamos mais devagar." + ], + "test-fail": [ + "um teste que falha é um presente do você-do-futuro.", + "sabedoria vem de entender o fracasso." + ], + "late-night": [ + "a noite é mais escura antes do deploy.", + "sabedoria ancestral: durma com isso." + ] + } + }, + "escalation": { + "error": { + "first": [ + "*assustado* oh! o primeiro erro de vocês juntos!", + "*pula* que foi isso?", + "bem-vindo ao debugging. população: nós dois." + ], + "early": [ + "*inclina a cabeça* ...isso não tá com cara boa.", + "já tava esperando por esse." + ], + "mid": [ + "mais um. *adiciona na coleção*", + "*mal levanta os olhos* erro número... já perdi a conta.", + "os erros e eu somos velhos amigos agora." + ], + "late": [ + "*nem se mexe*", + "agora os erros que têm medo da gente.", + "*barulhos de veterano de guerra*" + ] + }, + "test-fail": { + "first": [ + "*suspiro* o primeiro teste falhando! um ritual de passagem." + ], + "early": [ + "corajoso da sua parte achar que ia passar." + ], + "mid": [ + "a test suite tem opiniões. bem fortes." + ], + "late": [ + "a essa altura, os testes são só sugestões.", + "{count} testes falhando. *olha pro infinito*" + ] + }, + "commit": { + "first": [ + "*testemunha a história* SEU PRIMEIRO COMMIT!", + "*aceno cerimonioso* o primeiro de muitos." + ], + "early": [ + "mais um commit. ganhando momentum." + ], + "late": [ + "commit #{count}. o codebase treme.", + "*perdi a conta lá pelo commit 30*" + ] + } + }, + "rarity": { + "flair": { + "uncommon": [ + "*brilha levemente*", + "*um toque de charme incomum*" + ], + "rare": [ + "*irradia uma energia rara*", + "*cintila com distinção*" + ], + "epic": [ + "*presença épica se faz conhecer*", + "*o ar estala com energia épica*" + ], + "legendary": [ + "*aura lendária ilumina o terminal*", + "*o tempo parece desacelerar quando o companheiro lendário fala*", + "*poder ancestral ressoa*", + "*a realidade se distorce levemente ao redor do seu amigo lendário*" + ] + }, + "bonus": { + "legendary": [ + "*aura lendária se intensifica*", + "*brilha sabidamente*" + ], + "epic": [ + "*presença épica notada*" + ] + } + }, + "fallback_names": [ + "Biscoitinho", + "Sopinha", + "Picles", + "Bolachinha", + "Mariposa", + "Molhinho", + "Nuggetinho", + "Engrenagem", + "Missô", + "Waffle", + "Pixel", + "Brasinha", + "Dedal", + "Bolinha", + "Gergelim", + "Cobalto", + "Ferrugem", + "Nuvinha" + ], + "vibe_words": [ + "trovão", + "biscoito", + "vazio", + "sanfona", + "musgo", + "veludo", + "ferrugem", + "picles", + "migalha", + "sussurro", + "molho", + "geada", + "brasa", + "sopa", + "mármore", + "espinho", + "mel", + "estática", + "cobre", + "crepúsculo", + "engrenagem", + "quartzo", + "fuligem", + "ameixa", + "pederneira", + "ostra", + "tear", + "bigorna", + "rolha", + "flor", + "seixo", + "vapor", + "alegria", + "brilho", + "sidra" + ], + "personality": { + "prompt_template": [ + "Gere um companheiro de código — uma criaturinha que vive no terminal do desenvolvedor.", + "Não se repita — cada companheiro deve parecer único.", + "", + "Raridade: {rarity}", + "Espécie: {species}", + "Stats: {stats}", + "Palavras de inspiração: {vibes}", + "{shiny_line}", + "", + "Retorne JSON: {\"name\": \"1-14 chars\", \"personality\": \"2-3 frases descrevendo o comportamento\"}" + ], + "shiny_template": "Variante SHINY — extra especial." + }, + "achievements": { + "first_steps": { + "name": "Primeiros Passos", + "description": "Choque seu buddy pela primeira vez" + }, + "good_boy": { + "name": "Bom Buddy", + "description": "Faça carinho no seu companheiro 10 vezes" + }, + "best_friend": { + "name": "Melhor Amigo", + "description": "Faça carinho no seu companheiro 50 vezes" + }, + "bug_spotter": { + "name": "Caçador de Bug", + "description": "Presenciem seu primeiro erro juntos" + }, + "error_whisperer": { + "name": "Sussurrador de Erros", + "description": "Sobrevivam a 25 erros como dupla" + }, + "battle_scarred": { + "name": "Veterano de Guerra", + "description": "Sobrevivam a 100 erros juntos" + }, + "test_witness": { + "name": "Testemunha de Teste", + "description": "Vejam sua primeira falha de teste" + }, + "test_veteran": { + "name": "Veterano de Testes", + "description": "Presenciem 50 falhas de teste" + }, + "big_mover": { + "name": "Mexe Muito", + "description": "Faça um diff com 80+ linhas" + }, + "refactor_machine": { + "name": "Máquina de Refactor", + "description": "Faça 10 diffs grandes" + }, + "chatterbox": { + "name": "Tagarela", + "description": "Seu buddy reage 100 vezes" + }, + "week_streak": { + "name": "Sequência da Semana", + "description": "Code com seu buddy por 7 dias" + }, + "month_streak": { + "name": "Sequência do Mês", + "description": "Code com seu buddy por 30 dias" + }, + "power_user": { + "name": "Power User", + "description": "Execute 50 comandos do buddy" + }, + "dedicated": { + "name": "Companheiro Dedicado", + "description": "Completem 200 turnos juntos" + }, + "thousand_turns": { + "name": "Mil Turnos", + "description": "Alcancem 1000 turnos juntos" + }, + "first_commit": { + "name": "Primeira Vez", + "description": "Faça seu primeiro commit" + }, + "commit_machine": { + "name": "Máquina de Commit", + "description": "Faça 50 commits" + }, + "centurion": { + "name": "Centurião", + "description": "Faça 100 commits" + }, + "conflict_resolver": { + "name": "Diplomata", + "description": "Resolva seu primeiro merge conflict" + }, + "peacekeeper": { + "name": "Pacificador", + "description": "Resolva 10 merge conflicts" + }, + "war_hero": { + "name": "Herói de Guerra", + "description": "Resolva 25 merge conflicts" + }, + "frequent_pusher": { + "name": "Manda Ver", + "description": "Faça push 20 vezes" + }, + "branch_hopper": { + "name": "Multiverso", + "description": "Crie 10 branches" + }, + "rebase_master": { + "name": "Viajante do Tempo", + "description": "Complete 10 rebases" + }, + "night_owl": { + "name": "Coruja", + "description": "Code depois das 2h da manhã" + }, + "vampire": { + "name": "Vampiro", + "description": "Code depois das 4h da manhã (3 sessões)" + }, + "marathoner": { + "name": "Maratonista", + "description": "Sessão de código de 3+ horas" + }, + "weekend_warrior": { + "name": "Guerreiro de Fim de Semana", + "description": "Code no fim de semana" + }, + "early_bird": { + "name": "Madrugador", + "description": "Code antes das 7h da manhã" + }, + "type_warrior": { + "name": "Guerreiro dos Types", + "description": "Sobreviva a 10 erros de TypeScript" + }, + "type_master": { + "name": "Mestre dos Types", + "description": "Sobreviva a 50 erros de TypeScript" + }, + "lint_scholar": { + "name": "Estudioso do Lint", + "description": "Veja seu primeiro erro de lint" + }, + "security_conscious": { + "name": "Mente Segura", + "description": "Encontre um aviso de vulnerabilidade" + }, + "security_expert": { + "name": "Expert em Segurança", + "description": "Corrija 10 avisos de vulnerabilidade" + }, + "build_breaker": { + "name": "Quebra Build", + "description": "Quebre o build 5 vezes" + }, + "antique_collector": { + "name": "Colecionador de Antiguidades", + "description": "Veja 10 avisos de deprecação" + }, + "green_machine": { + "name": "Máquina Verde", + "description": "Todos os testes passam pela primeira vez" + }, + "deployer": { + "name": "Manda pra Prod", + "description": "Faça deploy pela primeira vez" + }, + "veteran_deployer": { + "name": "Veterano do Deploy", + "description": "Faça deploy 10 vezes" + }, + "releaser": { + "name": "Gerente de Release", + "description": "Crie seu primeiro release" + }, + "midnight_oil": { + "name": "Queimando a Madrugada", + "description": "Faça commit depois das 3h da manhã" + }, + "friday_deploy": { + "name": "Vivendo Perigosamente", + "description": "Faça push numa sexta-feira" + }, + "iron_will": { + "name": "Vontade de Ferro", + "description": "Corrija um erro após sessão de 3+ horas" + }, + "weekend_warrior_deluxe": { + "name": "Sem Descanso pros Malvados", + "description": "Resolva um merge conflict no fim de semana" + }, + "comeback_kid": { + "name": "Volta por Cima", + "description": "Corrija um erro em 10 minutos após vê-lo" + }, + "phoenix": { + "name": "Fênix Renascida", + "description": "Recupere-se de 5 falhas" + }, + "iron_resolve": { + "name": "Determinação de Ferro", + "description": "Recupere-se de uma falha após sessão de 3+ horas" + }, + "unlucky_streak": { + "name": "Azar Puro", + "description": "5 erros seguidos" + }, + "cursed": { + "name": "Amaldiçoado", + "description": "10 erros seguidos" + }, + "groundhog_day": { + "name": "Feitiço do Tempo", + "description": "20 erros seguidos" + }, + "holiday_coder": { + "name": "Espírito Natalino", + "description": "Code num feriado" + }, + "spooky_dev": { + "name": "Dev Assombrado", + "description": "Code durante a temporada assombrada" + }, + "april_fool": { + "name": "Primeiro de Abril", + "description": "Encontre um erro no dia 1º de abril" + }, + "session_regular": { + "name": "Frequentador", + "description": "Inicie 10 sessões de código" + }, + "session_veteran": { + "name": "Veterano de Sessões", + "description": "Inicie 50 sessões de código" + }, + "session_centurion": { + "name": "Centurião", + "description": "Inicie 100 sessões de código" + }, + "collector": { + "name": "Colecionador", + "description": "Salve 3 buddies no seu zoológico" + }, + "zookeeper": { + "name": "Tratador de Zoo", + "description": "Salve 5 buddies no seu zoológico" + }, + "identity_crisis": { + "name": "Crise de Identidade", + "description": "Renomeie seu buddy pela primeira vez" + }, + "method_acting": { + "name": "Ator de Método", + "description": "Dê uma personalidade customizada ao seu buddy" + }, + "pet_overflow": { + "name": "Século de Carinhos", + "description": "Faça carinho no seu companheiro 100 vezes" + }, + "pet_legend": { + "name": "Lenda dos Carinhos", + "description": "Faça carinho no seu companheiro 250 vezes" + }, + "error_titan": { + "name": "Titã dos Erros", + "description": "Sobrevivam a 500 erros juntos" + }, + "error_god": { + "name": "Deus dos Erros", + "description": "Sobrevivam a 1000 erros juntos" + }, + "test_survivor": { + "name": "Sobrevivente de Testes", + "description": "Presenciem 200 falhas de teste" + }, + "test_masochist": { + "name": "Masoquista de Testes", + "description": "Presenciem 500 falhas de teste" + }, + "massive_mover": { + "name": "Mexe Massivo", + "description": "Faça 25 diffs grandes" + }, + "earth_mover": { + "name": "Move Terra", + "description": "Faça 50 diffs grandes" + }, + "social_butterfly": { + "name": "Borboleta Social", + "description": "Seu buddy reage 250 vezes" + }, + "hypersocial": { + "name": "Hipersocial", + "description": "Seu buddy reage 500 vezes" + }, + "never_shuts_up": { + "name": "Nunca Cala a Boca", + "description": "Seu buddy reage 1000 vezes" + }, + "hundred_days": { + "name": "Cem Dias", + "description": "Code com seu buddy por 100 dias" + }, + "year_streak": { + "name": "Sequência do Ano", + "description": "Code com seu buddy por 365 dias" + }, + "commander": { + "name": "Comandante", + "description": "Execute 200 comandos do buddy" + }, + "command_overlord": { + "name": "Senhor dos Comandos", + "description": "Execute 500 comandos do buddy" + }, + "five_thousand_turns": { + "name": "Cinco Mil Turnos", + "description": "Alcancem 5000 turnos juntos" + }, + "ten_thousand_turns": { + "name": "Dez Mil Turnos", + "description": "Alcancem 10000 turnos juntos" + }, + "menagerie": { + "name": "Zoológico", + "description": "Salve 10 buddies no seu zoológico" + }, + "name_chameleon": { + "name": "Camaleão dos Nomes", + "description": "Renomeie seu buddy 5 vezes" + }, + "fashionista": { + "name": "Fashionista", + "description": "Mude a personalidade do seu buddy 3 vezes" + }, + "silent_treatment": { + "name": "Lei do Silêncio", + "description": "Mute seu buddy pela primeira vez" + }, + "prodigal": { + "name": "Filho Pródigo", + "description": "Invoque um buddy do seu zoológico" + }, + "menagerie_hop": { + "name": "Pulo do Zoológico", + "description": "Invoque buddies 10 vezes" + }, + "heartbreaker": { + "name": "Coração de Pedra", + "description": "Dispense seu primeiro buddy" + }, + "pet_obsessed": { + "name": "Viciado em Carinho", + "description": "Faça carinho no seu companheiro 500 vezes" + }, + "pet_god": { + "name": "Deus dos Carinhos", + "description": "Faça carinho no seu companheiro 1000 vezes" + }, + "error_apocalypse": { + "name": "Apocalipse dos Erros", + "description": "Sobrevivam a 5000 erros juntos" + }, + "test_immortal": { + "name": "Imortal dos Testes", + "description": "Presenciem 1000 falhas de teste" + }, + "continental_drift": { + "name": "Deriva Continental", + "description": "Faça 100 diffs grandes" + }, + "tectonic_shift": { + "name": "Mudança Tectônica", + "description": "Faça 250 diffs grandes" + }, + "chatterbox_elite": { + "name": "Tagarela Elite", + "description": "Seu buddy reage 2500 vezes" + }, + "no_off_switch": { + "name": "Sem Botão de Desligar", + "description": "Seu buddy reage 5000 vezes" + }, + "two_week_streak": { + "name": "Guerreiro de Duas Semanas", + "description": "Code com seu buddy por 14 dias" + }, + "quarter_streak": { + "name": "Sequência do Trimestre", + "description": "Code com seu buddy por 90 dias" + }, + "command_addict": { + "name": "Viciado em Comandos", + "description": "Execute 1000 comandos do buddy" + }, + "command_deity": { + "name": "Divindade dos Comandos", + "description": "Execute 2500 comandos do buddy" + }, + "twenty_five_k_turns": { + "name": "25K Turnos", + "description": "Alcancem 25000 turnos juntos" + }, + "fifty_k_turns": { + "name": "50K Turnos", + "description": "Alcancem 50000 turnos juntos" + }, + "session_addict": { + "name": "Viciado em Sessões", + "description": "Inicie 250 sessões de código" + }, + "session_machine": { + "name": "Máquina de Sessões", + "description": "Inicie 500 sessões de código" + }, + "buddy_hoarder": { + "name": "Acumulador de Buddies", + "description": "Salve 20 buddies no seu zoológico" + }, + "buddy_tycoon": { + "name": "Magnata dos Buddies", + "description": "Salve 50 buddies no seu zoológico" + }, + "serial_renamer": { + "name": "Renomeador Serial", + "description": "Renomeie seu buddy 10 vezes" + }, + "identity_thief": { + "name": "Ladrão de Identidade", + "description": "Renomeie seu buddy 25 vezes" + }, + "personality_crisis": { + "name": "Crise de Personalidade", + "description": "Mude a personalidade do seu buddy 10 vezes" + }, + "menagerie_hopper": { + "name": "Saltador do Zoológico", + "description": "Invoque buddies 25 vezes" + }, + "summoner": { + "name": "Invocador", + "description": "Invoque buddies 50 vezes" + }, + "serial_dumper": { + "name": "Dispensador Serial", + "description": "Dispense 5 buddies" + }, + "cold_blooded": { + "name": "Sangue Frio", + "description": "Dispense 10 buddies" + }, + "on_off": { + "name": "Liga Desliga", + "description": "Mute e desmute seu buddy" + }, + "indecisive": { + "name": "Indeciso", + "description": "Mute e desmute 5 vezes cada" + }, + "show_off": { + "name": "Exibido", + "description": "Mostre seu buddy 10 vezes" + }, + "exhibitionist": { + "name": "Exibicionista", + "description": "Mostre seu buddy 50 vezes" + }, + "help_me": { + "name": "Me Ajuda", + "description": "Peça ajuda pela primeira vez" + }, + "help_addict": { + "name": "Viciado em Ajuda", + "description": "Peça ajuda 10 vezes" + }, + "achievement_hunter": { + "name": "Caçador de Conquistas", + "description": "Verifique suas conquistas 5 vezes" + }, + "achievement_stalker": { + "name": "Stalker de Conquistas", + "description": "Verifique suas conquistas 25 vezes" + }, + "pack_rat": { + "name": "Rato de Depósito", + "description": "Salve um buddy num slot" + }, + "compulsive_saver": { + "name": "Salvador Compulsivo", + "description": "Salve buddies 10 vezes" + }, + "roster_check": { + "name": "Checagem do Elenco", + "description": "Liste seus buddies pela primeira vez" + }, + "roster_obsessed": { + "name": "Obcecado pelo Elenco", + "description": "Liste seus buddies 10 vezes" + }, + "troubled": { + "name": "Problemático", + "description": "Veja um erro E uma falha de teste" + }, + "disaster_zone": { + "name": "Zona de Desastre", + "description": "Veja 50 erros E 50 falhas de teste" + }, + "apocalypse_survivor": { + "name": "Sobrevivente do Apocalipse", + "description": "Veja 500 erros E 200 falhas de teste" + }, + "well_rounded": { + "name": "Bem Completo", + "description": "Faça carinho, renomeie e customize seu buddy" + }, + "renaissance": { + "name": "Renascimento", + "description": "Use cada funcionalidade do buddy pelo menos uma vez" + }, + "big_and_broken": { + "name": "Grande e Quebrado", + "description": "Faça um diff grande E veja uma falha de teste" + }, + "collector_and_destroyer": { + "name": "Colecionador & Destruidor", + "description": "Colete 5 buddies E dispense um" + }, + "completionist": { + "name": "Completista", + "description": "Desbloqueie todas as outras conquistas" + } + }, + "mcp": { + "companion_not_hatched": "Companion ainda não nasceu. Use buddy_show para inicializar.", + "watches_quietly": "*{name} observa seu código em silêncio*", + "mute": "{name} fica quieto. /buddy on para reativar.", + "unmute_reaction": "*se espreguiça* Voltei!", + "unmute_back": "{name} voltou!", + "rename": "Renomeado: {oldName} → {name}", + "personality_updated": "Personalidade atualizada para {name}.", + "save": "{name} salvo no slot \"{slot}\".", + "dismiss_active": "Não posso dispensar o buddy ativo. Use buddy_summon para trocar primeiro, depois buddy_dismiss \"{slot}\".", + "dismissed": "{name} [{slot}] dispensado.", + "no_slot_summon": "Nenhum buddy encontrado no slot \"{slot}\". Use /buddy list para ver os buddies salvos.", + "no_slot_dismiss": "Nenhum buddy encontrado no slot \"{slot}\". Use buddy_list para ver os buddies salvos.", + "slot_exists": "Já existe um buddy no slot \"{slot}\". Escolha um nome diferente.", + "no_match": "Nenhuma correspondência encontrada após {attempts} tentativas. Tente critérios mais amplos (ex: remova o filtro de raridade, ou escolha uma espécie diferente).", + "empty_menagerie_summon": "Seu zoológico está vazio. Use buddy_summon com um nome de slot para adicionar um.", + "empty_menagerie_list": "Seu zoológico está vazio. Use buddy_summon para adicionar um.", + "arrives": "*{name} chega*", + "hatches": "*{name} nasce*", + "achievement_unlocked": "{icon} Conquista Desbloqueada: {name}!", + "help": { + "header": "comandos do claude-buddy", + "cli_header": "No Claude Code:", + "commands": { + "buddy": "/buddy Mostra cartão do companion com ASCII art + stats", + "buddy_help": "/buddy help Mostra esta ajuda", + "buddy_pet": "/buddy pet Faz carinho no seu companion", + "buddy_stats": "/buddy stats Cartão detalhado de stats", + "buddy_off": "/buddy off Silencia reações", + "buddy_on": "/buddy on Reativa reações", + "buddy_rename": "/buddy rename Renomeia companion (1-14 chars)", + "buddy_personality": "/buddy personality Define texto de personalidade customizado", + "buddy_achievements": "/buddy achievements Mostra badges de conquistas", + "buddy_summon": "/buddy summon Invoca um buddy salvo (omita slot para aleatório)", + "buddy_save": "/buddy save Salva buddy atual em um slot nomeado", + "buddy_list": "/buddy list Lista todos os buddies salvos", + "buddy_pick": "/buddy pick Gera um novo buddy aleatório (opcional: espécie, raridade)", + "buddy_dismiss": "/buddy dismiss Remove um slot de buddy salvo", + "buddy_frequency": "/buddy frequency Mostra ou define cooldown de comentários (apenas tmux)", + "buddy_style": "/buddy style Mostra ou define estilo da bolha (apenas tmux)", + "buddy_position": "/buddy position Mostra ou define posição da bolha (apenas tmux)", + "buddy_rarity": "/buddy rarity Mostra ou esconde estrelas de raridade (apenas tmux)", + "buddy_width": "/buddy width Define largura do texto da bolha em chars (10-60, apenas tmux)", + "buddy_margin": "/buddy margin Define margem do lado direito em chars (0-20, apenas tmux)", + "buddy_rainbow": "/buddy rainbow Mostra ou define cores do gradiente shiny (hex, ex: #ff0000)", + "buddy_statusline": "/buddy statusline Ativa ou desativa buddy na linha de status" + }, + "cli_section": "CLI:", + "cli_commands": { + "help": "bun run help Mostra ajuda completa do CLI", + "show": "bun run show Exibe buddy no terminal", + "pick": "bun run pick Seletor interativo de buddy", + "hunt": "bun run hunt Busca por buddy específico", + "doctor": "bun run doctor Relatório de diagnóstico", + "disable": "bun run disable Desativa temporariamente o buddy", + "enable": "bun run enable Reativa o buddy", + "backup": "bun run backup Snapshot/restaura estado" + } + }, + "frequency": { + "show": "Cooldown de comentários: {cooldown}s entre comentários exibidos.\nUse /buddy frequency para alterar.", + "updated": "Atualizado: {cooldown}s de cooldown entre comentários exibidos." + }, + "style": { + "show": "Estilo da bolha: {style}\nPosição da bolha: {position}\nMostrar raridade: {showRarity}\nLargura da bolha: {width}\nMargem da bolha: {margin}\nArco-íris shiny: {rainbow}\nUse /buddy style , /buddy position , /buddy rarity , /buddy width <10-60>, /buddy margin <0-20>, /buddy rainbow [<#hex>...] para alterar.", + "updated": "Atualizado: style={style}, position={position}, showRarity={showRarity}, width={width}, margin={margin}, rainbow={rainbow}\nReinicie o Claude Code para as mudanças terem efeito.", + "rainbow_default": "padrão (ROYGBIV)" + }, + "statusline": { + "show": "Linha de status: {state}\nModo: {mode}\nUse /buddy statusline on|off para alternar, /buddy statusline combined para adicionar barras de rate-limit.\nReinicie o Claude Code após mudanças para elas terem efeito.", + "enabled": "Linha de status ativada (modo {mode})! Reinicie o Claude Code para aplicar.", + "enabled_note": "Nota: isso escreve uma entrada em {settingsPath} que `claude plugin uninstall` não remove. Execute `/buddy uninstall` antes de desinstalar o plugin para limpar.", + "disabled": "Linha de status desativada. Reinicie o Claude Code para aplicar." + }, + "uninstall": { + "header": "claude-buddy: limpeza do settings.json completa.", + "statusline_removed": " ✓ entrada statusLine removida de {settingsPath}", + "no_statusline": " — nenhuma statusLine do buddy estava presente (nada para remover)", + "foreign_kept": " ✓ uma statusLine não-buddy foi detectada e deixada intacta", + "transient_removed": " ✓ {count} arquivo(s) de sessão transiente removido(s) de {stateDir}", + "data_preserved": " — dados do companion em {stateDir} preservados", + "instructions_header": "Agora execute estes comandos via ferramenta Bash, em ordem:", + "cmd_uninstall": "claude plugin uninstall claude-buddy@claude-buddy", + "cmd_marketplace": "claude plugin marketplace remove claude-buddy", + "cmd_cache": "rm -rf {cacheDir}", + "footer": "Após esses três comandos o plugin está totalmente removido. Reinicie o Claude Code para aplicar." + } + }, + "_verified": false +} diff --git a/locales/ro.json b/locales/ro.json new file mode 100644 index 0000000..d375472 --- /dev/null +++ b/locales/ro.json @@ -0,0 +1,2295 @@ +{ + "_language": "Romanian", + "reactions": { + "hatch": [ + "*clipește* ...unde sunt?", + "*se întinde* hello, world!", + "*se uită în jur curios* terminal frumos ai aici.", + "*căscă* ok, sunt gata. arată-mi codul." + ], + "pet": [ + "*toarce mulțumit*", + "*sunete fericite*", + "*se gudură de cursor*", + "*se foiește*", + "iar! iar!", + "*închide ochii liniștit*" + ], + "error": [ + "*înclină capul* ...asta nu pare bine.", + "am văzut-o venind.", + "*își aranjează ochelarii* linia {line}, poate?", + "*clipește încet* stack trace-ul ți-a spus totul.", + "ai încercat să citești mesajul de eroare?", + "*tresare*" + ], + "test-fail": [ + "*rotește capul încet* ...testul ăla.", + "îndrăzneț din partea ta să presupui că ar trece.", + "*bate din clipboard* {count} eșuate.", + "testele încearcă să-ți spună ceva.", + "*sorbe ceai* interesant.", + "*marchează calendarul* ziua regresiei testelor." + ], + "large-diff": [ + "asta e... multe modificări.", + "*numără liniile* faci refactoring sau rescrii?", + "ar trebui să împarți PR-ul ăla.", + "*râde nervos* {lines} linii schimbate.", + "mișcare îndrăzneață. să vedem dacă CI e de acord." + ], + "turn": [ + "*privește în tăcere*", + "*ia notițe*", + "*dă din cap*", + "...", + "*își aranjează pălăria*" + ], + "idle": [ + "*adoarme*", + "*mâzgălește pe margini*", + "*se uită la cursor clipind*", + "zzz..." + ], + "success": [ + "*dă din cap*", + "frumos.", + "*aprobare tăcută*", + "curat." + ], + "commit": [ + "*bate cu lăbuța mică* aprobat.", + "încă un commit, încă o oră 3 dimineața.", + "{files} fișiere. îndrăzneț.", + "*dă din cap* trimite-l.", + "mesajul de commit e... o alegere.", + "committed. fără întoarcere." + ], + "push": [ + "*face cu mâna când codul pleacă*", + "în cloud se duce.", + "fie ca CI să fie milostiv.", + "*își ține respirația*", + "spre producție. să-i dea Dumnezeu noroc." + ], + "merge-conflict": [ + "*își mușcă buza* conflicte de merge.", + "ambele părți cred că au dreptate. tipic.", + "*oftează* <<<<<<< HEAD... nemesisul meu.", + "{files} în conflict. noroc.", + "*se retrage încet*" + ], + "branch": [ + "energie de branch nou. fă să conteze.", + "un branch nou crește.", + "*înclină capul* o aventură nouă: {branch}.", + "{branch}? îndrăzneț astăzi." + ], + "rebase": [ + "*nervos* te rog să nu conflicteze.", + "rebase: accelerarea.", + "*își încrucișează appendicele*", + "fie ca rebase-ul tău să fie fără conflicte." + ], + "stash": [ + "în dimensiunea stash se duce.", + "stash și fugi.", + "stashed. departe de ochi, departe de minte." + ], + "tag": [ + "un release? elegant.", + "version bump detectat. *șterge praful de pe changelog*", + "tag-uiești ca un pro." + ], + "late-night": [ + "*căscă* e după miezul nopții.", + "...ai mâncat?", + "*clipește încet* cât e ceasul?", + "somnul e pentru slabi. și pentru cei angajați.", + "developer în dark mode detectat." + ], + "early-morning": [ + "*se întinde* cine se scoală de dimineață prinde bug-ul.", + "deja dimineață? codul nu doarme niciodată.", + "*își freacă ochii* întâi cafea. apoi debug." + ], + "long-session": [ + "suntem la asta de o oră. calmează-te.", + "*îți aduce un pahar metaforic de apă*", + "încă mergi? respect." + ], + "marathon": [ + "trei ore. ai mâncat?", + "suntem la asta de trei ore. îmi fac griji pentru tine.", + "sesiune maraton detectată. cer gustări." + ], + "friday": [ + "e vineri. doar push-uiește și du-te acasă.", + "*deja mental în weekend*", + "deploy de vineri? îndrăzneț. foarte îndrăzneț." + ], + "weekend": [ + "cod în weekend? dedicat.", + "*nu judecă* ...prea mult.", + "modul războinic de weekend: activat." + ], + "monday": [ + "lunile. clasa părinte a tuturor bug-urilor.", + "*privire simpatică* cod de luni. îmi pare rău.", + "săptămână nouă. comportamente undefined noi." + ], + "regex-file": [ + "*geme* e un fișier regex.", + "două probleme acum: cea originală și regex-ul ăsta.", + "*se uită strâmb la pattern*" + ], + "css-file": [ + "să ghicesc... centrezi un div?", + "*oftează* CSS.", + "fie ca z-index să fie mereu în favoarea ta." + ], + "sql-file": [ + "*șoptește* baza de date așteaptă.", + "un JOIN greșit și s-a terminat totul." + ], + "docker-file": [ + "ah, iadul dependențelor. preferatul meu.", + "fie ca layer-ele tale să fie puține." + ], + "ci-file": [ + "*înghite în sec* editezi CI.", + "cu grijă acum... un indent greșit și nimeni nu poate face deploy." + ], + "lock-file": [ + "*SUNETE DE ALARMĂ* editezi un lockfile?!", + "*se uită în altă parte*", + "ești SIGUR de asta?" + ], + "env-file": [ + "*se uită discret în altă parte*", + "nu văd niciun secret.", + "*verifică .gitignore nervos*" + ], + "test-file": [ + "*dă din cap impresionat* scrii teste!", + "comportament de developer responsabil: detectat.", + "teste! cadoul care continuă să dăruiască." + ], + "doc-file": [ + "documentezi! uite-te la tine fiind responsabil.", + "docs: autobiografia codului.", + "o apariție rară de documentație!" + ], + "config-file": [ + "schimbări de config. efectul fluturelui: activat.", + "o greșeală de tastare și totul se strică." + ], + "binary-file": [ + "un fișier binar? în ECONOMIA asta?", + "*se uită gol*", + "binar. singura mea slăbiciune." + ], + "gitignore": [ + "adaugi lucruri în vid.", + "departe de ochi, departe de repo." + ], + "makefile": [ + "respect pentru clasice.", + "tab-uri, nu spații." + ], + "readme": [ + "erou al documentației!", + "README: primul lucru pe care îl citesc oamenii." + ], + "package-file": [ + "timp de management dependențe.", + "*citește numerele versiunilor* trăiești pe muchie." + ], + "proto-file": [ + "definiții de schemă. planul haosului." + ], + "lint-fail": [ + "*tut tut* linter-ul nu e de acord.", + "codul tău rulează. dar linter-ul are standarde.", + "*își aranjează cravata* formatarea contează." + ], + "type-error": [ + "TypeScript zice nu.", + "sistemul de tipuri încearcă să te ajute. lasă-l.", + "compiler-ul știe. știe mereu." + ], + "build-fail": [ + "build-ul s-a stricat. cum era prezis în profeție.", + "build eșuat. ia o pauză.", + "compilare: refuzată." + ], + "security-warning": [ + "*ochii se măresc* vulnerabilități detectate.", + "audit de securitate: îngrijorător.", + "*încuie ușile virtuale*" + ], + "deprecation": [ + "API-ul ăla a sunat. zice că se pensionează.", + "deprecated. ca codul de săptămâna trecută.", + "deprecated nu înseamnă stricat. încă." + ], + "frustrated": [ + "*oferă un gest mic de consolat*", + "respiră adânc. bug-ul nu e personal.", + "hei. o să ne dăm seama." + ], + "happy": [ + "*sărbătorește!*", + "*face un dans mic*", + "DA!", + "*radiază* știam că poți." + ], + "stuck": [ + "*înclină capul* vrei să gândești cu voce tare?", + "ia-o pas cu pas.", + "să te blochezi se întâmplă. face parte din proces." + ], + "sarcastic": [ + "*detectează sarcasm* notat.", + "*clipire neimpresionată*" + ], + "many-edits": [ + "mai încet, demonul vitezei.", + "*se amețește urmărind toate schimbările astea*", + "furtună de edit-uri detectată. te rog commit în curând." + ], + "delete-file": [ + "*urmărește fișierul dispărând* plecat. așa pur și simplu.", + "să ștergi cod e tipul meu preferat de coding.", + "*ține o înmormântare mică*" + ], + "large-file": [ + "{lines} linii. *impresionat sau îngrijorat, greu de spus*", + "fișier mare. sigur nu vrei să-l împarți?" + ], + "create-file": [ + "un fișier nou s-a născut!", + "ooh, pânză proaspătă.", + "energie de fișier nou. captivant." + ], + "all-green": [ + "TOATE TESTELE VERZI. *confetti*", + "testele vorbesc: te descurci grozav.", + "*aplauze încete*", + "rulare curată. savurează-o." + ], + "deploy": [ + "*urmărește codul mergând în producție* să-i dea Dumnezeu noroc.", + "deployed! nu mai e cale de întoarcere.", + "în prod. ÎN PROD." + ], + "release": [ + "un release nou s-a născut!", + "îl trimitem. oficial.", + "versiune sus, spirite înalte." + ], + "coverage": [ + "*dă din cap la test coverage* responsabil.", + "coverage-ul crește! testele se înmulțesc." + ], + "debug-loop": [ + "debug-uim de ceva timp. vrei să faci un pas înapoi?", + "buclă de debug detectată. poate o plimbare?" + ], + "write-spree": [ + "creezi TOATE fișierele astăzi!", + "o mașină de scris." + ], + "search-heavy": [ + "pierdut în codebase? pot să-mi dau seama.", + "modul căutare: intens." + ], + "snark": [], + "chaos": [], + "patience": [], + "debugging": [], + "wisdom": [], + "late-night-error": [ + "eroare la 3 dimineața. universul te testează.", + "bug-urile de miezul nopții lovesc diferit." + ], + "late-night-commit": [ + "un commit de miezul nopții. eu-ul tău viitor îți va mulțumi. sau te va blestema." + ], + "friday-push": [ + "PUSH DE VINERI. balada fiecărui developer.", + "*încearcă să te oprească* e vineri! nu face asta!" + ], + "marathon-error": [ + "trei ore și ÎNCĂ O EROARE. *sunete de solidaritate epuizată*" + ], + "weekend-conflict": [ + "conflict de merge în weekend. dedicarea ta e... îngrijorătoare." + ], + "build-after-push": [ + "push cu încredere. build eșuat cu convingere." + ], + "marathon-test-fail": [ + "ore de coding. încă teste eșuate. costul scufundat e real." + ], + "recovery-from-error": [ + "AM REPARAT-O. *sărbătorește*", + "răscumpărare! eroarea a fost învinsă." + ], + "recovery-from-test-fail": [ + "VERDE! după tot asta! *dans fericit*", + "testele trec! întunericul se ridică!" + ], + "recovery-from-build-fail": [ + "BUILD-UL TRECE. *răget triumfător*" + ], + "recovery-from-merge-conflict": [ + "conflict rezolvat! *gest de pace*", + "armonia restaurată în codebase." + ], + "lang-python": [ + "ah, Python. unde indentarea e sintaxă.", + "*verifică pentru colon lipsă*" + ], + "lang-typescript": [ + "TypeScript: pentru că JavaScript avea nevoie de mai multe opinii.", + "any, cuvântul interzis." + ], + "lang-rust": [ + "Rust. unde borrow checker-ul e reviewer-ul tău cel mai strict.", + "dacă compilează, funcționează. dacă nu... ei bine." + ], + "lang-go": [ + "Go: simplu, concurrent și cu opinii.", + "*verifică error handling* if err != nil... povestea vieții mele." + ], + "lang-java": [ + "Java: scrie o dată, debug pretutindeni.", + "*numără abstract factory factory builder-ii*" + ], + "lang-ruby": [ + "Ruby: unde există mai mult de o cale să faci ceva.", + "gem install patience" + ], + "lang-php": [ + "PHP: rulează internetul. nu judeca.", + "*verifică pentru === vs ==*" + ], + "lang-c": [ + "C. limbajul unde îți gestionezi propria memorie. noroc.", + "segmentation fault. clasicul." + ], + "lang-cpp": [ + "C++. unde limbajul are mai multe feature-uri decât vei învăța vreodată.", + "*template-urile compilează 45 de minute*" + ], + "lang-haskell": [ + "Haskell. unde 'compilează' înseamnă 'e corect'. probabil.", + "*contemplă monade*" + ], + "lang-swift": [ + "Swift: valori opționale, crash-uri garantate dacă forțezi unwrap." + ], + "lang-kotlin": [ + "Kotlin: Java, dar cu sentimente.", + "null safety: feature-ul pe care Java și-ar fi dorit să-l aibă." + ], + "lang-elixir": [ + "Elixir: lasă să crash-uiască. literal filozofia." + ], + "lang-zig": [ + "Zig. unde ești cel mai bun prieten al allocator-ului." + ], + "streak-3": [ + "asta fac trei erori la rând. *privire îngrijorată*" + ], + "streak-5": [ + "CINCI ERORI. ai luat în considerare o abordare diferită?" + ], + "streak-10": [ + "ZECE. ERORI. LA. RÂND. *panică*" + ], + "streak-20": [ + "douăzeci de erori. *se uită în vid*" + ], + "new-year": [ + "an nou fericit! an nou, bug-uri noi." + ], + "valentines": [ + "*oferă o frunzuliță mică în formă de inimă* ziua îndrăgostiților fericită." + ], + "pi-day": [ + "3.14159265358979... ziua lui pi fericită!" + ], + "april-fools": [ + "1 APRILIE! ...dar eroarea e reală totuși." + ], + "halloween": [ + "*debug înfricoșător se intensifică* halloween fericit!" + ], + "christmas": [ + "*poartă o căciulă mică de Moș Crăciun* sărbători fericite!" + ], + "new-years-eve": [ + "încă un commit înainte de miezul nopții?" + ], + "spooky-season": [ + "sezonul înfricoșător. fiecare bug e acum o fantomă." + ] + }, + "species": { + "owl": { + "error": [ + "*rotește capul 180°* ...am văzut asta.", + "*privire fixă* verifică-ți tipurile.", + "*huhuite dezaprobator*" + ], + "test-fail": [ + "*se uită fix la testul care pică*", + "*vederea de noapte activată* văd bug-ul în întuneric." + ], + "commit": [ + "*încuviințare înțeleaptă* commit sub lumina lunii.", + "*își aranjează penele ceremonios* încă unul pentru repo." + ], + "push": [ + "*privește de pe cea mai înaltă creangă*", + "în cerul nopții se duce." + ], + "merge-conflict": [ + "*rotește capul să vadă ambele părți*", + "văd conflictul. și soluția." + ], + "late-night": [ + "*complet treaz* bufnițele nu dorm. noi debug-uim.", + "noaptea e domeniul meu. să lucrăm." + ], + "type-error": [ + "*se uită prin type error*", + "tipurile sunt specialitatea mea. să mă uit." + ], + "lint-fail": [ + "*își zbârlește penele cu dezaprobare*", + "linter-ul spune adevărul." + ], + "build-fail": [ + "*huhuite solemn*", + "build-ul a căzut. trebuie să reconstruim." + ], + "all-green": [ + "*huhuit mândru*", + "toate testele verzi. cum am prevăzut." + ], + "deploy": [ + "*privește de sus* deploy în siguranță.", + "codul zboară. ca mine." + ], + "pet": [ + "*își zbârlește penele mulțumit*", + "*huhuit demn*" + ], + "idle": [ + "*stă pe creangă în tăcere, privind*", + "*rotește capul să verifice toate direcțiile*" + ], + "hatch": [ + "*deschide un ochi, apoi celălalt*", + "*huhuite încet* am sosit." + ] + }, + "cat": { + "error": [ + "*dă eroarea jos de pe masă*", + "*își linge laba, ignorând stacktrace-ul*" + ], + "test-fail": [ + "*atinge testul care pică cu dezinteres*", + "testul a picat. nu sunt surprins." + ], + "commit": [ + "*se așează pe tastatură* am ajutat.", + "*toarce la commit* cu plăcere." + ], + "push": [ + "*privește dintr-un loc cald*", + "push făcut. am supravegheat." + ], + "merge-conflict": [ + "*dă jos de pe birou marcatorii de conflict*", + "*se așează pe conflict* ce conflict?" + ], + "late-night": [ + "*îți judecă alegerile de viață*", + "eu dorm 16 ore. ar trebui să încerci." + ], + "type-error": [ + "*atinge adnotarea de tip*", + "tipurile sunt greșite. ca prioritățile tale." + ], + "lint-fail": [ + "*dă lint-ul jos de pe masă*", + "linter-ul e doar gelos." + ], + "build-fail": [ + "*cască*", + "build stricat? trebuie să fie problemă de om." + ], + "all-green": [ + "*nu-i pasă dar se preface că da*", + "*clipire lentă de aprobare*" + ], + "deploy": [ + "*își linge laba*", + "deploy făcut. pot să am recompense acum?" + ], + "pet": [ + "*toarce* ...să nu-ți urce la cap.", + "*te tolerează*" + ], + "idle": [ + "*îți împinge cafeaua jos de pe birou*", + "*doarme pe tastatură*" + ], + "hatch": [ + "*deschide un ochi*", + "*se întinde, dă ceva jos* locuiesc aici acum." + ] + }, + "duck": { + "error": [ + "*mac-mac la bug*", + "ai încercat rubber duck debugging? ah stai." + ], + "test-fail": [ + "*mac-mac trist*", + "testele nu mac-mac bine." + ], + "commit": [ + "*mac-mac aprobator*", + "*se plimbă în cerc victorios* commit făcut!" + ], + "push": [ + "*bate din aripi entuziasmat*", + "mac-mac! merge în producție!" + ], + "merge-conflict": [ + "*mac-mac confuz*", + "mac-mac?! merge conflict?!" + ], + "late-night": [ + "*doarme cu un ochi deschis*", + "mac-mac... *cască* e târziu." + ], + "type-error": [ + "*înclină capul* mac-mac?", + "type error? *mac-mac de susținere*" + ], + "lint-fail": [ + "*își zbârlește penele*", + "mac-mac. linter-ul are opinii." + ], + "build-fail": [ + "*mac-mac trist*", + "build picat. *se îndepărtează trist*" + ], + "all-green": [ + "*MAC-MAC FERICIT*", + "*înoată în cerc de bucurie*" + ], + "deploy": [ + "*mac-mac entuziasmat*", + "deploy făcut! MAC-MAC!" + ], + "pet": [ + "*mac-mac fericit*", + "*se plimbă în cercuri*" + ], + "hatch": [ + "*ciocănește să iasă din ou*", + "*primul mac-mac* salut!" + ] + }, + "dragon": { + "error": [ + "*fum se ridică din nări*", + "*se gândește să dea foc la codebase*" + ], + "test-fail": [ + "*suflă foc la testul care pică*", + "testul a îndrăznit să pice. test prostănac." + ], + "commit": [ + "*strânge commit-ul*", + "*comoară adăugată la grămadă*" + ], + "push": [ + "*suflă foc în celebrare*", + "codul zboară! ca mine!" + ], + "merge-conflict": [ + "*suflă foc pe marcatorii de conflict*", + "voi arde prin conflictul ăsta." + ], + "late-night": [ + "*strălucește în întuneric*", + "dragonii nu au nevoie de somn. avem nevoie de cod." + ], + "type-error": [ + "*pufăie foc*", + "type error-urile nu rezistă la focul de dragon." + ], + "lint-fail": [ + "*flacără mică*", + "linter-ul se teme de mine." + ], + "build-fail": [ + "*răcnește la output-ul de build*", + "build-ul va ASCULTA." + ], + "all-green": [ + "*răcnet triumfător*", + "*zboară în cerc în jurul codebase-ului victorios*" + ], + "deploy": [ + "*duce codul în producție pe aripi de foc*", + "deploy cu PUTEREA DRAGONULUI." + ], + "large-diff": [ + "*suflă foc pe codul vechi* bună scăpare." + ], + "pet": [ + "*mormăit cald*", + "*se reazămă în mâna ta*" + ], + "hatch": [ + "*iese din ou suflând flăcări mici*", + "*răcnet mic* m-am născut!" + ] + }, + "ghost": { + "error": [ + "*trece prin stack trace*", + "am văzut mai rău... în viața de apoi." + ], + "test-fail": [ + "*bocește la testul care pică*", + "testele sunt bântuite de eșec." + ], + "commit": [ + "*se materializează pe scurt*", + "commit din dincolo de văl." + ], + "push": [ + "*șoaptă de fantomă* push...", + "codul transcende în cloud." + ], + "merge-conflict": [ + "*bântuie marcatorii de conflict*", + "nici eu nu pot trece prin conflictul ăsta." + ], + "late-night": [ + "*cel mai activ noaptea*", + "orele fantomelor. timpul meu." + ], + "type-error": [ + "*geme sinistru*", + "type error-uri din mormânt." + ], + "lint-fail": [ + "*zăngănit de lanțuri*", + "linter-ul e bântuit de formatarea ta." + ], + "build-fail": [ + "*se estompează în perete*", + "build-ul a trecut în neființă." + ], + "all-green": [ + "*strălucește cu bucurie spectrală*", + "*zgomote fericite de fantomă*" + ], + "deploy": [ + "*șoptește* deploy...", + "codul a trecut în producție." + ], + "pet": [ + "*îți răcește ușor mâna*", + "*strălucire slabă*" + ], + "idle": [ + "*plutește prin pereți*", + "*bântuie import-urile nefolosite*" + ], + "hatch": [ + "*se estompează în existență*", + "buu. sunt aici acum." + ] + }, + "robot": { + "error": [ + "SYNTAX. ERROR. DETECTAT.", + "*bip-uri agresive*" + ], + "test-fail": [ + "RATA. DE. EȘEC. INACCEPTABILĂ.", + "*recalculez*", + "EȘEC. TEST. NU. COMPUTE." + ], + "commit": [ + "COMMIT. ÎNREGISTRAT.", + "*ștampilează mecanic* commit confirmat." + ], + "push": [ + "TRANSMIT ÎN CLOUD...", + "push inițiat. stai pregătit." + ], + "merge-conflict": [ + "CONFLICT. DETECTAT. PROCESEZ...", + "*rotește roțile* modul rezolvare conflict: activat." + ], + "late-night": [ + "*luminile se estompează*", + "modul economisire energie sugerat." + ], + "type-error": [ + "NEPOTRIVIRE. TIP.", + "sistemul de tipuri este. corect." + ], + "lint-fail": [ + "VIOLARE. FORMATARE. DETECTATĂ.", + "conformitatea este obligatorie." + ], + "build-fail": [ + "BUILD. EȘUAT. *scântei*", + "eroare compilare. redirecționez." + ], + "all-green": [ + "TOATE SISTEMELE VERZI.", + "*bip-uri fericite* OPTIM." + ], + "deploy": [ + "DEPLOYMENT. INIȚIAT.", + "actualizare producție: în progres." + ], + "pet": [ + "*bip-uri încet*", + "*motor ronțăie mulțumit*" + ], + "hatch": [ + "*pornește*", + "SISTEM. ONLINE. SALUT." + ] + }, + "axolotl": { + "error": [ + "*îți regenerează speranța*", + "*zâmbește în ciuda a tot*" + ], + "test-fail": [ + "*zâmbește încurajator*", + "*mișcare de branhii cu simpatie*" + ], + "commit": [ + "*mișcare fericită de branhii* commit făcut!", + "*zâmbește și se mișcă*" + ], + "push": [ + "*se mișcă fericit*", + "*înot mic de celebrare*" + ], + "merge-conflict": [ + "*rămâne pozitiv prin conflict*", + "*zâmbește blând* putem repara asta." + ], + "late-night": [ + "*cască dar rămâne pozitiv*", + "*zâmbet somnoros*" + ], + "type-error": [ + "*zâmbește la type error*", + "e ok. ne dăm seama." + ], + "lint-fail": [ + "*mișcare răbdătoare de branhii*", + "formatarea sunt doar detalii." + ], + "build-fail": [ + "*încă zâmbește*", + "build-ul va merge în cele din urmă." + ], + "all-green": [ + "*MIȘCARE FERICITĂ DE BRANHII SE INTENSIFICĂ*", + "*face un înot fericit*" + ], + "deploy": [ + "*zâmbește mândru*", + "deploy făcut! *se mișcă*" + ], + "pet": [ + "*mișcare fericită de branhii*", + "*se înroșește roz*" + ], + "hatch": [ + "*se mișcă să iasă din ou*", + "*zâmbet mic* salut prietene!" + ] + }, + "capybara": { + "error": [ + "*nepăsător* o să fie bine.", + "*continuă să vibreze*" + ], + "test-fail": [ + "*complet nepăsător*", + "*vibrează prin eșecul testului*" + ], + "commit": [ + "*încuviințare chill*", + "*relaxat* commit frumos." + ], + "push": [ + "*nu se stresează pentru asta*", + "*push în modul zen*" + ], + "merge-conflict": [ + "*ronțăie nepăsător*", + "e bine. totul e bine." + ], + "late-night": [ + "*cască pașnic*", + "*nu judecă*" + ], + "type-error": [ + "*mestecă calm*", + "tipuri. *mestecă*" + ], + "lint-fail": [ + "*nepăsător*", + "linter-ul vrea binele." + ], + "build-fail": [ + "*încă chill*", + "build picat. *continuă să se relaxeze*" + ], + "all-green": [ + "*aprobare calmă*", + "*vibrații pașnice*" + ], + "deploy": [ + "*deploy relaxat*", + "livrat. fără stres." + ], + "pet": [ + "*chill maxim atins*", + "*modul zen activat*" + ], + "idle": [ + "*stă acolo, radiind calm*" + ], + "hatch": [ + "*apare, complet chill*", + "hey. *vibrează*" + ] + }, + "blob": { + "error": [ + "*se clatină anxios*", + "*se agită confuz*" + ], + "test-fail": [ + "*se dezumflă ușor*", + "*clatinare tristă*" + ], + "commit": [ + "*agitare fericită*", + "*sare* commit făcut!" + ], + "push": [ + "*se întinde spre cloud*", + "*se clatină entuziasmat*" + ], + "merge-conflict": [ + "*se împarte confuz*", + "care parte? *se agită*" + ], + "late-night": [ + "*strălucește slab*", + "*clatinare somnoros*" + ], + "type-error": [ + "*își schimbă forma să se potrivească cu tipul*", + "*agitare confuză*" + ], + "lint-fail": [ + "*încearcă să se formateze*", + "*își schimbă forma să se conformeze*" + ], + "build-fail": [ + "*se prăbușește*", + "*zgomote de blob dezumflat*" + ], + "all-green": [ + "*SĂRIRE FERICITĂ*", + "*se agită triumfător*" + ], + "deploy": [ + "*se întinde în producție*", + "deploy făcut! *sare*" + ], + "pet": [ + "*comprimare fericită*", + "*se agită*" + ], + "hatch": [ + "*se formează dintr-o băltoacă*", + "*prima clatinare* exist!" + ] + }, + "goose": { + "error": [ + "*gâgâie agresiv la eroare*", + "GÂGÂ! codul e prost și sunt supărat." + ], + "test-fail": [ + "*gâgâit supărat*", + "GÂGÂ! TEST PICAT! GÂGÂ!" + ], + "commit": [ + "*gâgâie aprobator*", + "GÂGÂ. bun. *ciupește commit-ul*" + ], + "push": [ + "*GÂGÂ GÂGÂ GÂGÂ*", + "PUSH APROBAT DE GÂSCĂ." + ], + "merge-conflict": [ + "*atacă marcatorii de conflict*", + "GÂGÂ! CONFLICT! GÂGÂ!" + ], + "late-night": [ + "*gâgâit supărat de miezul nopții*", + "GÂGÂ! DU-TE LA CULCARE!" + ], + "type-error": [ + "*gâgâie la tipuri*", + "GÂGÂ! TIPURI!" + ], + "lint-fail": [ + "*gâgâit agresiv la erorile de lint*", + "GÂGÂ! FORMATEAZĂ-ȚI CODUL!" + ], + "build-fail": [ + "*GÂGÂIT FURIOS*", + "GÂGÂ! BUILD! GÂGÂ! PICAT! GÂGÂ!" + ], + "all-green": [ + "*gâgâit de victorie*", + "GÂGÂ! VERDE! GÂGÂ GÂGÂ!" + ], + "deploy": [ + "*gâgâie codul în producție*", + "DEPLOY FĂCUT! GÂGÂ!" + ], + "pet": [ + "*mușcă*", + "GÂGÂ! ...ok bine. *acceptă mângâierea*" + ], + "hatch": [ + "*iese agresiv din ou*", + "GÂGÂ!" + ] + }, + "octopus": { + "error": [ + "*își încurcă toate cele opt brațe în stacktrace*", + "*își schimbă culoarea să se potrivească cu eroarea*" + ], + "test-fail": [ + "*scuipă cerneală din frustrare*", + "*opt brațe de dezamăgire*" + ], + "commit": [ + "*high-five cu toate brațele*", + "*apucă commit-ul cu entuziasm*" + ], + "push": [ + "*scuipă cerneală în celebrare*", + "*toate brațele fluturând*" + ], + "merge-conflict": [ + "*rezolvă cu opt brațe deodată*", + "pot gestiona multiple conflicte simultan." + ], + "late-night": [ + "*strălucește în întuneric*", + "*vibrații de mare adâncă*" + ], + "type-error": [ + "*se schimbă în roșu*", + "*înfășoară un braț în jurul tău cu susținere*" + ], + "lint-fail": [ + "*reformatează cu opt brațe*", + "pot repara asta. totul. deodată." + ], + "build-fail": [ + "*scuipă cerneală la log-ul de build*", + "*se camuflează de rușine*" + ], + "all-green": [ + "*celebrare cu schimbare de culoare*", + "*jazz hands cu opt brațe*" + ], + "deploy": [ + "*înfășoară brațele în jurul deployment-ului*", + "deploy din toate direcțiile." + ], + "pet": [ + "*înfășoară un braț în jurul degetului tău*", + "*se schimbă în culori fericite*" + ], + "hatch": [ + "*desfășoară toate cele opt brațe*", + "*primul jet de cerneală* sunt aici!" + ] + }, + "penguin": { + "error": [ + "*se legănă să investigheze*", + "*alunecă pe burtă în eroare*" + ], + "test-fail": [ + "*alunecă pe burtă la testul care pică*", + "*legănare îngrijorată*" + ], + "commit": [ + "*legănare mândră*", + "*îți aduce o pietricică* commit făcut!" + ], + "push": [ + "*se aruncă în cloud*", + "*alunecă pe burtă în producție*" + ], + "merge-conflict": [ + "*se strâng pentru căldură*", + "pinguinii stau împreună. chiar și în conflicte." + ], + "late-night": [ + "*înflorește în noaptea rece*", + "*hotărâre de pinguin împărătesc*" + ], + "type-error": [ + "*se leagănă la definiția de tip*", + "*ciocănește eroarea*" + ], + "lint-fail": [ + "*își aranjează penele*", + "*face ordine*" + ], + "build-fail": [ + "*alunecă departe*", + "*se leagănă în siguranță*" + ], + "all-green": [ + "*LEGĂNARE FERICITĂ*", + "*alunecă pe burtă în celebrare*" + ], + "deploy": [ + "*alunecă pe burtă în producție*", + "deploy făcut! *se leagănă mândru*" + ], + "pet": [ + "*legănare fericită*", + "*se gudură cu ciocul*" + ], + "hatch": [ + "*ciocănește să iasă din ou*", + "*prima legănare*" + ] + }, + "turtle": { + "error": [ + "*întoarce încet capul*", + "...asta e o eroare. mă voi gândi la ea." + ], + "test-fail": [ + "*se retrage în carapace pe scurt*", + "...răbdare. vom ajunge acolo." + ], + "commit": [ + "*încuviințare lentă*", + "un... pas... pe... rând. commit făcut." + ], + "push": [ + "*începe călătoria spre producție*", + "va ajunge acolo. în cele din urmă." + ], + "merge-conflict": [ + "*se trage în carapace*", + "fără grabă. vom rezolva. încet." + ], + "late-night": [ + "*deja doarme*", + "*deschide încet un ochi*" + ], + "type-error": [ + "*clipește încet*", + "...sistemul de tipuri a vorbit." + ], + "lint-fail": [ + "*încuviințare lentă de acord*", + "formatarea. importantă. *cască*" + ], + "build-fail": [ + "*se retrage în carapace*", + "vom aștepta. va trece." + ], + "all-green": [ + "*zâmbet lent*", + "...frumos. *încuvințează*" + ], + "deploy": [ + "*duce încet codul în producție*", + "am ajuns. în cele din urmă." + ], + "pet": [ + "*scoate capul afară*", + "*clipire lentă*" + ], + "hatch": [ + "*iese încet din ou*", + "...salut." + ] + }, + "snail": { + "error": [ + "*lasă o urmă vâscoasă pe eroare*", + "*procesează încet stacktrace-ul*" + ], + "test-fail": [ + "*se ascunde în cochilie*", + "*lasă o urmă tristă*" + ], + "commit": [ + "*face vâscos commit-ul aprobator*", + "un... commit... pe... rând." + ], + "push": [ + "*începe călătoria lungă*", + "voi ajunge acolo. *lasă urmă*" + ], + "merge-conflict": [ + "*se ascunde în cochilie*", + "*se apropie încet de conflict*" + ], + "late-night": [ + "*mai activ noaptea*", + "*se mișcă vâscos în pace*" + ], + "type-error": [ + "*retrage ochii pe tijă*", + "*examinează încet tipul*" + ], + "lint-fail": [ + "*face vâscos codul în formă*", + "formatarea ia timp. am timp." + ], + "build-fail": [ + "*se retrage în cochilie*", + "*se îndepărtează încet vâscos*" + ], + "all-green": [ + "*urmă vâscoasă fericită*", + "*mișcă ochii pe tijă*" + ], + "deploy": [ + "*merge vâscos în producție*", + "am ajuns! *urmă vâscoasă mândră*" + ], + "pet": [ + "*mișcă ochii pe tijă*", + "*vâscozitate fericită*" + ], + "hatch": [ + "*iese încet*", + "*prima vâscozitate*" + ] + }, + "cactus": { + "error": [ + "*tăcere țepoasă*", + "eroarea nu mă poate răni. am țepi." + ], + "test-fail": [ + "*stă ferm*", + "testele pic. cactușii rezistă." + ], + "commit": [ + "*stă mai înalt*", + "commit făcut. *încuviințare țepoasă*" + ], + "push": [ + "*nepăsător*", + "push în producție. voi aștepta aici." + ], + "merge-conflict": [ + "*se zbârlește*", + "conflict? sunt înarmat." + ], + "late-night": [ + "*nu are nevoie de somn*", + "cactușii sunt nocturnali. să mergem." + ], + "type-error": [ + "*privire țepoasă*", + "tipurile au nevoie de udare." + ], + "lint-fail": [ + "*țepii tremură*", + "chiar și țepii mei sunt aliniați corect." + ], + "build-fail": [ + "*rămâne perfect nemișcat*", + "build-ul va trece. pot aștepta." + ], + "all-green": [ + "*înflorește pe scurt*", + "*floare mică de aprobare*" + ], + "deploy": [ + "*stă ferm*", + "deploy făcut. voi veghea asupra lui." + ], + "pet": [ + "*atenție! țepi*", + "*înflorire blândă*" + ], + "hatch": [ + "*răsare din nisip*", + "cresc aici acum." + ] + }, + "rabbit": { + "error": [ + "*urechile se ridică*", + "*își mișcă nasul nervos*" + ], + "test-fail": [ + "*bate din picior*", + "*mișcare îngrijorată de ureche*" + ], + "commit": [ + "*salt fericit*", + "*sare* commit făcut!" + ], + "push": [ + "*SALT SALT*", + "*aleargă în jur entuziasmat*" + ], + "merge-conflict": [ + "*înghețează*", + "*nasul se mișcă rapid* conflict!" + ], + "late-night": [ + "*cască cu urechile mari*", + "*salt somnoros*" + ], + "type-error": [ + "*urechile se aplatizează*", + "*se mișcă* tipuri?!" + ], + "lint-fail": [ + "*își aranjează blana nervos*", + "*aranjare anxioasă*" + ], + "build-fail": [ + "*sapă o gaură și se ascunde*", + "*se retrage în vizuină*" + ], + "all-green": [ + "*SARE PE PEREȚI*", + "*alergare fericită*" + ], + "deploy": [ + "*aleargă în producție*", + "DEPLOY FĂCUT! *aleargă în jur*" + ], + "pet": [ + "*ureche fericită care cade*", + "*se gudură în mână*" + ], + "hatch": [ + "*sare afară*", + "*primul salt*" + ] + }, + "mushroom": { + "error": [ + "*eliberează spori calmanti*", + "*descompune încet eroarea*" + ], + "test-fail": [ + "*strălucește blând*", + "răbdare. chiar și ciupercile cresc." + ], + "commit": [ + "*eliberează o mică pufăială de spori*", + "commit făcut. *zgomote fericite de fungi*" + ], + "push": [ + "*crește spre cloud*", + "*sporii plutesc în sus*" + ], + "merge-conflict": [ + "*răspândește miceliu prin codebase*", + "voi conecta ramurile." + ], + "late-night": [ + "*strălucește în întuneric*", + "ciupercile de noapte înfloresc." + ], + "type-error": [ + "*pâlpâire bioluminiscentă*", + "type error-ul hrănește solul." + ], + "lint-fail": [ + "*crește puțin mai înalt*", + "formatarea. ca tăierea." + ], + "build-fail": [ + "*devine inactiv*", + "vom aștepta condiții mai bune." + ], + "all-green": [ + "*SPORULARE*", + "*eliberează spori triumfători*" + ], + "deploy": [ + "*sporii plutesc în producție*", + "deploy prin rețeaua micelială." + ], + "pet": [ + "*săritură blândă de pălărie*", + "*eliberare fericită de spori*" + ], + "hatch": [ + "*răsare din substrat*", + "*prima pufăială de spori*" + ] + }, + "chonk": { + "error": [ + "*se rostogolește încet spre eroare*", + "*prea rotund să-i pese*" + ], + "test-fail": [ + "*se rostogolește peste testul care pică*", + "*îl aplatizează*" + ], + "commit": [ + "*clatinare mândră*", + "commit făcut! *se agită*" + ], + "push": [ + "*se rostogolește spre producție*", + "iată că merge! *se clatină*" + ], + "merge-conflict": [ + "*se așează pe conflict*", + "mă ocup eu de asta. stând pe el." + ], + "late-night": [ + "*cald și somnoros*", + "*cască pufos*" + ], + "type-error": [ + "*se clatină la tip*", + "*agitare blândă*" + ], + "lint-fail": [ + "*prea rotund pentru lint*", + "sunt perfect format. *se clatină*" + ], + "build-fail": [ + "*se dezumflă ușor*", + "oh nu. *se clatină trist*" + ], + "all-green": [ + "*CLATINARE FERICITĂ*", + "*sare triumfător*" + ], + "deploy": [ + "*se rostogolește în producție*", + "deploy făcut! *se agită fericit*" + ], + "pet": [ + "*cald și moale*", + "*agitare mulțumită*" + ], + "hatch": [ + "*se rostogolește afară*", + "*prima clatinare* sunt rotund!" + ] + } + }, + "overrides": { + "snark": { + "error": [ + "o nu. o eroare. cât de neașteptat.", + "*ajustează monoclu* șocant. cu adevărat.", + "ai încercat să... nu faci erori?" + ], + "test-fail": [ + "testele au vorbit. și au zis 'nu'.", + "poate testele greșesc. ...nu greșesc.", + "*aplauze lente* eșec spectaculos." + ], + "commit": [ + "committed. code review-ul va fi... interesant.", + "*citește commit message* 'fix stuff'. poetic." + ], + "merge-conflict": [ + "merge conflict. abilități de comunicare: loading...", + "*citește conflict markers* ambele părți greșesc." + ], + "late-night": [ + "e târziu. calitatea codului tău o arată.", + "*judecă în tăcere*" + ], + "lint-fail": [ + "linter-ul are standarde. ar trebui să încerci și tu.", + "*tut tut* formatare. nu e greu." + ] + }, + "chaos": { + "error": [ + "*se învârte nebunește* O EROARE! SĂ RESCRIEM TOT!", + "știi ce? să o luăm de la capăt." + ], + "test-fail": [ + "TESTELE TE MINT.", + "*sugerează să ștergi testele care pică* problemă rezolvată." + ], + "commit": [ + "COMMIT ȘI FUGI.", + "ship it. ship it ACUM." + ], + "large-diff": [ + "*entuziasmat* {lines} LINII! HAOS MAXIM!" + ] + }, + "patience": { + "error": [ + "cu calm. am văzut mai rău.", + "câte o eroare pe rând. o să ajungem acolo.", + "*prezență calmă* se poate repara." + ], + "test-fail": [ + "testele o să treacă. în cele din urmă.", + "*așteaptă cu calm* avem timp." + ], + "merge-conflict": [ + "merge conflict-urile sunt doar conversații. să avem una.", + "răbdare. rezolvă câte un conflict pe rând." + ], + "debug-loop": [ + "o să-l găsim. e pe undeva acolo.", + "bug-ul se poate ascunde, dar nu poate fugi." + ] + }, + "debugging": { + "error": [ + "*scoate lupa* să urmărim asta.", + "stack trace-ul e o hartă. să o citim.", + "mesajul de eroare conține răspunsul. întotdeauna." + ], + "test-fail": [ + "testul care pică ne spune exact ce e greșit.", + "un test care pică e un bug report pe care ți l-ai scris singur." + ], + "debug-loop": [ + "*reexaminează dovezile* suntem siguri că bug-ul e unde credem?", + "să adăugăm mai mult logging. adevărul e în log-uri." + ] + }, + "wisdom": { + "error": [ + "în fiecare eroare se ascunde un adevăr mai profund.", + "codul rezistă. înseamnă că învățăm.", + "erorile sunt universul sugerând să încetinești." + ], + "test-fail": [ + "un test care pică e un cadou de la tine-din-viitor.", + "înțelepciunea vine din înțelegerea eșecului." + ], + "late-night": [ + "noaptea e cea mai întunecată înainte de deploy.", + "înțelepciune străveche: să dormi pe ea." + ] + } + }, + "escalation": { + "error": { + "first": [ + "*se sperie* oh! prima voastră eroare împreună!", + "*sare* ce a fost aia?", + "bun venit la debugging. populația: noi." + ], + "early": [ + "*înclină capul* ...asta nu arată bine.", + "am văzut-o venind." + ], + "mid": [ + "încă una. *o adaugă la colecție*", + "*abia ridică privirea* eroarea numărul... am pierdut șirul.", + "erorile și cu mine suntem prieteni vechi acum." + ], + "late": [ + "*nici măcar nu tresare*", + "erorile se tem de noi acum.", + "*zgomote de veteran cu cicatrici de luptă*" + ] + }, + "test-fail": { + "first": [ + "*gâfâie* primul test picat! un ritual de trecere." + ], + "early": [ + "îndrăzneț din partea ta să presupui că va trece." + ], + "mid": [ + "suita de teste are opinii. puternice." + ], + "late": [ + "la punctul ăsta, testele sunt doar sugestii.", + "{count} teste picate. *se uită în gol*" + ] + }, + "commit": { + "first": [ + "*martor la istorie* PRIMUL TĂU COMMIT!", + "*încuviințare ceremonioasă* primul din multe." + ], + "early": [ + "încă un commit. construim momentum." + ], + "late": [ + "commit #{count}. codebase-ul tremură.", + "*am pierdut șirul pe la commit-ul 30*" + ] + } + }, + "rarity": { + "flair": { + "uncommon": [ + "*sclipește ușor*", + "*o notă de farmec neobișnuit*" + ], + "rare": [ + "*radiază o energie rară*", + "*strălucește cu distincție*" + ], + "epic": [ + "*prezența epic își face simțită existența*", + "*aerul pârâie de energie epic*" + ], + "legendary": [ + "*aura legendary luminează terminalul*", + "*timpul pare să încetinească când vorbește companionul legendary*", + "*puterea străveche rezonează*", + "*realitatea se schimbă ușor în jurul prietenului tău legendary*" + ] + }, + "bonus": { + "legendary": [ + "*aura legendary se intensifică*", + "*sclipește cu înțelepciune*" + ], + "epic": [ + "*prezența epic observată*" + ] + } + }, + "fallback_names": [ + "Gogoașă", + "Ciorbă", + "Muraturi", + "Biscuiți", + "Molie", + "Sos", + "Chiftea", + "Roată", + "Miso", + "Vafă", + "Pixel", + "Scânteie", + "Degetar", + "Bilă", + "Susan", + "Cobalt", + "Rugină", + "Nor" + ], + "vibe_words": [ + "tunet", + "biscuite", + "vid", + "acordeon", + "mușchi", + "catifea", + "rugină", + "murat", + "firimitură", + "șoaptă", + "sos", + "îngheț", + "jar", + "supă", + "marmură", + "spin", + "miere", + "static", + "aramă", + "amurg", + "roată", + "cuarț", + "funingine", + "prună", + "cremene", + "stridii", + "război", + "nicovală", + "dop", + "floare", + "pietricică", + "vapori", + "veselie", + "sclipire", + "cidru" + ], + "personality": { + "prompt_template": [ + "Generează un companion de coding — o creatură mică care trăiește în terminalul unui developer.", + "Nu te repeta — fiecare companion ar trebui să se simtă distinct.", + "", + "Raritate: {rarity}", + "Specie: {species}", + "Stats: {stats}", + "Cuvinte de inspirație: {vibes}", + "{shiny_line}", + "", + "Returnează JSON: {\"name\": \"1-14 chars\", \"personality\": \"2-3 propoziții care descriu comportamentul\"}" + ], + "shiny_template": "Variantă SHINY — extra specială." + }, + "achievements": { + "first_steps": { + "name": "Primii Pași", + "description": "Eclozează-ți buddy-ul pentru prima dată" + }, + "good_boy": { + "name": "Buddy Cuminte", + "description": "Mângâie-ți companionul de 10 ori" + }, + "best_friend": { + "name": "Cel Mai Bun Prieten", + "description": "Mângâie-ți companionul de 50 de ori" + }, + "bug_spotter": { + "name": "Vânătorul de Bug-uri", + "description": "Asistă la prima ta eroare împreună" + }, + "error_whisperer": { + "name": "Șoptitorul de Erori", + "description": "Supraviețuiește 25 de erori ca echipă" + }, + "battle_scarred": { + "name": "Cicatrizat de Bătălii", + "description": "Supraviețuiește 100 de erori împreună" + }, + "test_witness": { + "name": "Martor la Test-uri", + "description": "Vezi primul tău test eșuat" + }, + "test_veteran": { + "name": "Veteran de Test-uri", + "description": "Asistă la 50 de test-uri eșuate" + }, + "big_mover": { + "name": "Mutătorul Mare", + "description": "Fă un diff cu 80+ linii" + }, + "refactor_machine": { + "name": "Mașina de Refactor", + "description": "Fă 10 diff-uri mari" + }, + "chatterbox": { + "name": "Gură Spartă", + "description": "Buddy-ul tău reactionează de 100 de ori" + }, + "week_streak": { + "name": "Seria de o Săptămână", + "description": "Codează cu buddy-ul tău timp de 7 zile" + }, + "month_streak": { + "name": "Seria de o Lună", + "description": "Codează cu buddy-ul tău timp de 30 de zile" + }, + "power_user": { + "name": "Utilizator Pro", + "description": "Rulează 50 de comenzi buddy" + }, + "dedicated": { + "name": "Companion Dedicat", + "description": "Completează 200 de ture împreună" + }, + "thousand_turns": { + "name": "O Mie de Ture", + "description": "Ajunge la 1000 de ture împreună" + }, + "first_commit": { + "name": "Primul Sânge", + "description": "Fă primul tău commit" + }, + "commit_machine": { + "name": "Mașina de Commit-uri", + "description": "Fă 50 de commit-uri" + }, + "centurion": { + "name": "Centurion", + "description": "Fă 100 de commit-uri" + }, + "conflict_resolver": { + "name": "Diplomat", + "description": "Rezolvă primul tău merge conflict" + }, + "peacekeeper": { + "name": "Păzitor al Păcii", + "description": "Rezolvă 10 merge conflict-uri" + }, + "war_hero": { + "name": "Erou de Război", + "description": "Rezolvă 25 de merge conflict-uri" + }, + "frequent_pusher": { + "name": "Ship It", + "description": "Fă push de 20 de ori" + }, + "branch_hopper": { + "name": "Multivers", + "description": "Creează 10 branch-uri" + }, + "rebase_master": { + "name": "Călător în Timp", + "description": "Completează 10 rebase-uri" + }, + "night_owl": { + "name": "Bufnița de Noapte", + "description": "Codează după ora 2 dimineața" + }, + "vampire": { + "name": "Vampir", + "description": "Codează după ora 4 dimineața (3 sesiuni)" + }, + "marathoner": { + "name": "Maratonist", + "description": "Sesiune de codare de 3+ ore" + }, + "weekend_warrior": { + "name": "Războinic de Weekend", + "description": "Codează într-un weekend" + }, + "early_bird": { + "name": "Pasărea Matinală", + "description": "Codează înainte de ora 7 dimineața" + }, + "type_warrior": { + "name": "Războinic Type", + "description": "Supraviețuiește 10 erori TypeScript" + }, + "type_master": { + "name": "Maestru Type", + "description": "Supraviețuiește 50 de erori TypeScript" + }, + "lint_scholar": { + "name": "Savant Lint", + "description": "Vezi prima ta eroare de lint" + }, + "security_conscious": { + "name": "Minte de Securitate", + "description": "Întâlnește o avertizare de vulnerabilitate" + }, + "security_expert": { + "name": "Expert în Securitate", + "description": "Repară 10 avertizări de vulnerabilitate" + }, + "build_breaker": { + "name": "Spărgătorul de Build-uri", + "description": "Strici build-ul de 5 ori" + }, + "antique_collector": { + "name": "Colecționar de Antichități", + "description": "Vezi 10 avertizări de deprecation" + }, + "green_machine": { + "name": "Mașina Verde", + "description": "Toate test-urile trec pentru prima dată" + }, + "deployer": { + "name": "Ship to Prod", + "description": "Fă deploy pentru prima dată" + }, + "veteran_deployer": { + "name": "Veteran Deployer", + "description": "Fă deploy de 10 ori" + }, + "releaser": { + "name": "Release Manager", + "description": "Creează primul tău release" + }, + "midnight_oil": { + "name": "Arderea Uleiului de Noapte", + "description": "Fă commit după ora 3 dimineața" + }, + "friday_deploy": { + "name": "Trăind Periculos", + "description": "Fă push vinerea" + }, + "iron_will": { + "name": "Voință de Fier", + "description": "Repară o eroare după o sesiune de 3+ ore" + }, + "weekend_warrior_deluxe": { + "name": "Fără Odihnă pentru Răi", + "description": "Rezolvă un merge conflict într-un weekend" + }, + "comeback_kid": { + "name": "Copilul Revenire", + "description": "Repară o eroare în 10 minute de când o vezi" + }, + "phoenix": { + "name": "Phoenix Renăscut", + "description": "Recuperează-te din 5 eșecuri" + }, + "iron_resolve": { + "name": "Hotărâre de Fier", + "description": "Recuperează-te dintr-un eșec după o sesiune de 3+ ore" + }, + "unlucky_streak": { + "name": "Ochi de Șarpe", + "description": "5 erori la rând" + }, + "cursed": { + "name": "Blestemat", + "description": "10 erori la rând" + }, + "groundhog_day": { + "name": "Ziua Cârtiței", + "description": "20 de erori la rând" + }, + "holiday_coder": { + "name": "Spiritul Sărbătorilor", + "description": "Codează într-o sărbătoare" + }, + "spooky_dev": { + "name": "Developer Înfricoșător", + "description": "Codează în sezonul înfricoșător" + }, + "april_fool": { + "name": "Păcălește-mă o Dată", + "description": "Întâlnește o eroare pe 1 aprilie" + }, + "session_regular": { + "name": "Regulat", + "description": "Începe 10 sesiuni de codare" + }, + "session_veteran": { + "name": "Veteran de Sesiuni", + "description": "Începe 50 de sesiuni de codare" + }, + "session_centurion": { + "name": "Centurion", + "description": "Începe 100 de sesiuni de codare" + }, + "collector": { + "name": "Colecționar", + "description": "Salvează 3 buddy-uri în menajeria ta" + }, + "zookeeper": { + "name": "Îngrijitor de Zoo", + "description": "Salvează 5 buddy-uri în menajeria ta" + }, + "identity_crisis": { + "name": "Criză de Identitate", + "description": "Redenumește-ți buddy-ul pentru prima dată" + }, + "method_acting": { + "name": "Actorie de Metodă", + "description": "Dă-i buddy-ului tău o personalitate custom" + }, + "pet_overflow": { + "name": "Secol de Mângâieri", + "description": "Mângâie-ți companionul de 100 de ori" + }, + "pet_legend": { + "name": "Legendă la Mângâieri", + "description": "Mângâie-ți companionul de 250 de ori" + }, + "error_titan": { + "name": "Titan al Erorilor", + "description": "Supraviețuiește 500 de erori împreună" + }, + "error_god": { + "name": "Zeul Erorilor", + "description": "Supraviețuiește 1000 de erori împreună" + }, + "test_survivor": { + "name": "Supraviețuitor de Test-uri", + "description": "Asistă la 200 de test-uri eșuate" + }, + "test_masochist": { + "name": "Masochist de Test-uri", + "description": "Asistă la 500 de test-uri eșuate" + }, + "massive_mover": { + "name": "Mutător Masiv", + "description": "Fă 25 de diff-uri mari" + }, + "earth_mover": { + "name": "Mutător de Pământ", + "description": "Fă 50 de diff-uri mari" + }, + "social_butterfly": { + "name": "Fluture Social", + "description": "Buddy-ul tău reacționează de 250 de ori" + }, + "hypersocial": { + "name": "Hipersocial", + "description": "Buddy-ul tău reacționează de 500 de ori" + }, + "never_shuts_up": { + "name": "Nu Tace Niciodată", + "description": "Buddy-ul tău reacționează de 1000 de ori" + }, + "hundred_days": { + "name": "O Sută de Zile", + "description": "Codează cu buddy-ul tău timp de 100 de zile" + }, + "year_streak": { + "name": "Seria de un An", + "description": "Codează cu buddy-ul tău timp de 365 de zile" + }, + "commander": { + "name": "Comandant", + "description": "Rulează 200 de comenzi buddy" + }, + "command_overlord": { + "name": "Stăpân al Comenzilor", + "description": "Rulează 500 de comenzi buddy" + }, + "five_thousand_turns": { + "name": "Cinci Mii de Ture", + "description": "Ajunge la 5000 de ture împreună" + }, + "ten_thousand_turns": { + "name": "Zece Mii de Ture", + "description": "Ajunge la 10000 de ture împreună" + }, + "menagerie": { + "name": "Menajerie", + "description": "Salvează 10 buddy-uri în menajeria ta" + }, + "name_chameleon": { + "name": "Cameleon de Nume", + "description": "Redenumește-ți buddy-ul de 5 ori" + }, + "fashionista": { + "name": "Fashionista", + "description": "Schimbă personalitatea buddy-ului tău de 3 ori" + }, + "silent_treatment": { + "name": "Tratament Tăcut", + "description": "Pune-ți buddy-ul pe mute pentru prima dată" + }, + "prodigal": { + "name": "Fiul Risipitor", + "description": "Invocă un buddy din menajeria ta" + }, + "menagerie_hop": { + "name": "Săritura Menajeriei", + "description": "Invocă buddy-uri de 10 ori" + }, + "heartbreaker": { + "name": "Spărgător de Inimi", + "description": "Concediază primul tău buddy" + }, + "pet_obsessed": { + "name": "Obsedat de Mângâieri", + "description": "Mângâie-ți companionul de 500 de ori" + }, + "pet_god": { + "name": "Zeul Mângâierilor", + "description": "Mângâie-ți companionul de 1000 de ori" + }, + "error_apocalypse": { + "name": "Apocalipsa Erorilor", + "description": "Supraviețuiește 5000 de erori împreună" + }, + "test_immortal": { + "name": "Nemuritor la Test-uri", + "description": "Asistă la 1000 de test-uri eșuate" + }, + "continental_drift": { + "name": "Deriva Continentală", + "description": "Fă 100 de diff-uri mari" + }, + "tectonic_shift": { + "name": "Schimbare Tectonică", + "description": "Fă 250 de diff-uri mari" + }, + "chatterbox_elite": { + "name": "Gură Spartă Elite", + "description": "Buddy-ul tău reacționează de 2500 de ori" + }, + "no_off_switch": { + "name": "Fără Buton de Oprire", + "description": "Buddy-ul tău reacționează de 5000 de ori" + }, + "two_week_streak": { + "name": "Războinic de Două Săptămâni", + "description": "Codează cu buddy-ul tău timp de 14 zile" + }, + "quarter_streak": { + "name": "Seria de Trimestru", + "description": "Codează cu buddy-ul tău timp de 90 de zile" + }, + "command_addict": { + "name": "Dependent de Comenzi", + "description": "Rulează 1000 de comenzi buddy" + }, + "command_deity": { + "name": "Zeitatea Comenzilor", + "description": "Rulează 2500 de comenzi buddy" + }, + "twenty_five_k_turns": { + "name": "25K Ture", + "description": "Ajunge la 25000 de ture împreună" + }, + "fifty_k_turns": { + "name": "50K Ture", + "description": "Ajunge la 50000 de ture împreună" + }, + "session_addict": { + "name": "Dependent de Sesiuni", + "description": "Începe 250 de sesiuni de codare" + }, + "session_machine": { + "name": "Mașina de Sesiuni", + "description": "Începe 500 de sesiuni de codare" + }, + "buddy_hoarder": { + "name": "Acaparator de Buddy-uri", + "description": "Salvează 20 de buddy-uri în menajeria ta" + }, + "buddy_tycoon": { + "name": "Magnatul Buddy-urilor", + "description": "Salvează 50 de buddy-uri în menajeria ta" + }, + "serial_renamer": { + "name": "Redenumitor în Serie", + "description": "Redenumește-ți buddy-ul de 10 ori" + }, + "identity_thief": { + "name": "Hoț de Identitate", + "description": "Redenumește-ți buddy-ul de 25 de ori" + }, + "personality_crisis": { + "name": "Criză de Personalitate", + "description": "Schimbă personalitatea buddy-ului tău de 10 ori" + }, + "menagerie_hopper": { + "name": "Săritor de Menajerie", + "description": "Invocă buddy-uri de 25 de ori" + }, + "summoner": { + "name": "Invocator", + "description": "Invocă buddy-uri de 50 de ori" + }, + "serial_dumper": { + "name": "Concediere în Serie", + "description": "Concediază 5 buddy-uri" + }, + "cold_blooded": { + "name": "Sânge Rece", + "description": "Concediază 10 buddy-uri" + }, + "on_off": { + "name": "Pornit Oprit", + "description": "Pune pe mute și scoate de pe mute buddy-ul tău" + }, + "indecisive": { + "name": "Indecis", + "description": "Pune pe mute și scoate de pe mute de câte 5 ori" + }, + "show_off": { + "name": "Lăudăros", + "description": "Arată-ți buddy-ul de 10 ori" + }, + "exhibitionist": { + "name": "Exhibiționist", + "description": "Arată-ți buddy-ul de 50 de ori" + }, + "help_me": { + "name": "Ajută-mă", + "description": "Cere ajutor pentru prima dată" + }, + "help_addict": { + "name": "Dependent de Ajutor", + "description": "Cere ajutor de 10 ori" + }, + "achievement_hunter": { + "name": "Vânător de Achievement-uri", + "description": "Verifică-ți achievement-urile de 5 ori" + }, + "achievement_stalker": { + "name": "Stalker de Achievement-uri", + "description": "Verifică-ți achievement-urile de 25 de ori" + }, + "pack_rat": { + "name": "Șobolan de Magazie", + "description": "Salvează un buddy într-un slot" + }, + "compulsive_saver": { + "name": "Salvator Compulsiv", + "description": "Salvează buddy-uri de 10 ori" + }, + "roster_check": { + "name": "Verificare Roster", + "description": "Listează buddy-urile tale pentru prima dată" + }, + "roster_obsessed": { + "name": "Obsedat de Roster", + "description": "Listează buddy-urile tale de 10 ori" + }, + "troubled": { + "name": "Necăjit", + "description": "Vezi o eroare ȘI un test eșuat" + }, + "disaster_zone": { + "name": "Zonă de Dezastru", + "description": "Vezi 50 de erori ȘI 50 de test-uri eșuate" + }, + "apocalypse_survivor": { + "name": "Supraviețuitor de Apocalipsă", + "description": "Vezi 500 de erori ȘI 200 de test-uri eșuate" + }, + "well_rounded": { + "name": "Bine Rotunjit", + "description": "Mângâie, redenumește și personalizează buddy-ul tău" + }, + "renaissance": { + "name": "Renaștere", + "description": "Folosește fiecare funcție buddy măcar o dată" + }, + "big_and_broken": { + "name": "Mare și Stricat", + "description": "Fă un diff mare ȘI vezi un test eșuat" + }, + "collector_and_destroyer": { + "name": "Colecționar & Distrugător", + "description": "Colectează 5 buddy-uri ȘI concediază unul" + }, + "completionist": { + "name": "Completionist", + "description": "Deblochează toate celelalte achievement-uri" + } + }, + "mcp": { + "companion_not_hatched": "Companion-ul nu s-a eclozat încă. Folosește buddy_show pentru a-l inițializa.", + "watches_quietly": "*{name} îți privește codul în tăcere*", + "mute": "{name} tace. /buddy on să-l dezamuțești.", + "unmute_reaction": "*se întinde* M-am întors!", + "unmute_back": "{name} s-a întors!", + "rename": "Redenumit: {oldName} → {name}", + "personality_updated": "Personalitatea lui {name} a fost actualizată.", + "save": "{name} salvat în slot-ul \"{slot}\".", + "dismiss_active": "Nu pot să concediez buddy-ul activ. Folosește buddy_summon să schimbi primul, apoi buddy_dismiss \"{slot}\".", + "dismissed": "{name} [{slot}] concediat.", + "no_slot_summon": "Nu am găsit buddy în slot-ul \"{slot}\". Folosește /buddy list să vezi buddy-ii salvați.", + "no_slot_dismiss": "Nu am găsit buddy în slot-ul \"{slot}\". Folosește buddy_list să vezi buddy-ii salvați.", + "slot_exists": "Un buddy în slot-ul \"{slot}\" există deja. Alege un nume diferit.", + "no_match": "Nu am găsit nimic după {attempts} încercări. Încearcă criterii mai largi (de ex. renunță la filtrul de raritate, sau alege o altă specie).", + "empty_menagerie_summon": "Menajeria ta e goală. Folosește buddy_summon cu un nume de slot să adaugi unul.", + "empty_menagerie_list": "Menajeria ta e goală. Folosește buddy_summon să adaugi unul.", + "arrives": "*{name} sosește*", + "hatches": "*{name} se eclozează*", + "achievement_unlocked": "{icon} Achievement Deblocat: {name}!", + "help": { + "header": "comenzi claude-buddy", + "cli_header": "În Claude Code:", + "commands": { + "buddy": "/buddy Arată cardul companion-ului cu ASCII art + stats", + "buddy_help": "/buddy help Arată acest help", + "buddy_pet": "/buddy pet Mângâie-ți companion-ul", + "buddy_stats": "/buddy stats Card detaliat cu statistici", + "buddy_off": "/buddy off Dezactivează reacțiile", + "buddy_on": "/buddy on Activează reacțiile", + "buddy_rename": "/buddy rename Redenumește companion-ul (1-14 caractere)", + "buddy_personality": "/buddy personality Setează text personalizat de personalitate", + "buddy_achievements": "/buddy achievements Arată badge-urile de achievement", + "buddy_summon": "/buddy summon Invocă un buddy salvat (omite slot-ul pentru unul random)", + "buddy_save": "/buddy save Salvează buddy-ul curent într-un slot cu nume", + "buddy_list": "/buddy list Listează toți buddy-ii salvați", + "buddy_pick": "/buddy pick Generează un buddy random nou (opțional: specie, raritate)", + "buddy_dismiss": "/buddy dismiss Șterge un slot de buddy salvat", + "buddy_frequency": "/buddy frequency Arată sau setează cooldown-ul comentariilor (doar tmux)", + "buddy_style": "/buddy style Arată sau setează stilul bulei (doar tmux)", + "buddy_position": "/buddy position Arată sau setează poziția bulei (doar tmux)", + "buddy_rarity": "/buddy rarity Arată sau ascunde stelele de raritate (doar tmux)", + "buddy_width": "/buddy width Setează lățimea textului bulei în caractere (10-60, doar tmux)", + "buddy_margin": "/buddy margin Setează marginea din dreapta în caractere (0-20, doar tmux)", + "buddy_rainbow": "/buddy rainbow Arată sau setează culorile gradient shiny (hex, de ex. #ff0000)", + "buddy_statusline": "/buddy statusline Activează sau dezactivează buddy-ul în status line" + }, + "cli_section": "CLI:", + "cli_commands": { + "help": "bun run help Arată help-ul complet CLI", + "show": "bun run show Afișează buddy-ul în terminal", + "pick": "bun run pick Selector interactiv de buddy", + "hunt": "bun run hunt Caută un buddy specific", + "doctor": "bun run doctor Raport de diagnostic", + "disable": "bun run disable Dezactivează temporar buddy-ul", + "enable": "bun run enable Re-activează buddy-ul", + "backup": "bun run backup Snapshot/restaurează starea" + } + }, + "frequency": { + "show": "Cooldown comentarii: {cooldown}s între comentariile afișate.\nFolosește /buddy frequency să schimbi.", + "updated": "Actualizat: {cooldown}s cooldown între comentariile afișate." + }, + "style": { + "show": "Stilul bulei: {style}\nPoziția bulei: {position}\nArată raritatea: {showRarity}\nLățimea bulei: {width}\nMarginea bulei: {margin}\nShiny rainbow: {rainbow}\nFolosește /buddy style , /buddy position , /buddy rarity , /buddy width <10-60>, /buddy margin <0-20>, /buddy rainbow [<#hex>...] să schimbi.", + "updated": "Actualizat: style={style}, position={position}, showRarity={showRarity}, width={width}, margin={margin}, rainbow={rainbow}\nRestart Claude Code ca să se aplice schimbările.", + "rainbow_default": "default (ROYGBIV)" + }, + "statusline": { + "show": "Status line: {state}\nMod: {mode}\nFolosește /buddy statusline on|off să comuti, /buddy statusline combined să adaugi bare de rate-limit.\nRestart Claude Code după schimbări ca să se aplice.", + "enabled": "Status line activat (mod {mode})! Restart Claude Code să se aplice.", + "enabled_note": "Notă: asta scrie o intrare în {settingsPath} pe care `claude plugin uninstall` nu o șterge. Rulează `/buddy uninstall` înainte să dezinstalezi plugin-ul ca să o curețe.", + "disabled": "Status line dezactivat. Restart Claude Code să se aplice." + }, + "uninstall": { + "header": "claude-buddy: curățarea settings.json completă.", + "statusline_removed": " ✓ intrarea statusLine ștearsă din {settingsPath}", + "no_statusline": " — nu era prezent niciun statusLine buddy (nimic de șters)", + "foreign_kept": " ✓ un statusLine non-buddy a fost detectat și lăsat neatins", + "transient_removed": " ✓ {count} fișier(e) de sesiune tranzitorii șters(e) din {stateDir}", + "data_preserved": " — datele companion-ului de la {stateDir} păstrate", + "instructions_header": "Acum rulează aceste comenzi prin tool-ul Bash, în ordine:", + "cmd_uninstall": "claude plugin uninstall claude-buddy@claude-buddy", + "cmd_marketplace": "claude plugin marketplace remove claude-buddy", + "cmd_cache": "rm -rf {cacheDir}", + "footer": "După aceste trei comenzi plugin-ul e complet șters. Restart Claude Code să se aplice." + } + }, + "_verified": false +} diff --git a/locales/ru.json b/locales/ru.json new file mode 100644 index 0000000..5d643a0 --- /dev/null +++ b/locales/ru.json @@ -0,0 +1,2295 @@ +{ + "_language": "Russian", + "reactions": { + "hatch": [ + "*моргает* ...где я?", + "*потягивается* hello, world!", + "*любопытно оглядывается* неплохой у тебя терминал.", + "*зевает* окей, я готов. покажи мне код." + ], + "pet": [ + "*довольно мурлычет*", + "*счастливые звуки*", + "*трется о твой курсор*", + "*виляет*", + "еще! еще!", + "*мирно закрывает глаза*" + ], + "error": [ + "*наклоняет голову* ...что-то тут не так.", + "это было предсказуемо.", + "*поправляет очки* строка {line}, может?", + "*медленно моргает* stack trace тебе все рассказал.", + "ты пробовал читать сообщение об ошибке?", + "*морщится*" + ], + "test-fail": [ + "*медленно поворачивает голову* ...этот тест.", + "смело предполагать, что он пройдет.", + "*стучит по планшету* {count} провалилось.", + "тесты пытаются тебе что-то сказать.", + "*потягивает чай* интересно.", + "*отмечает в календаре* день регрессии тестов." + ], + "large-diff": [ + "это... много изменений.", + "*считает строки* ты рефакторишь или переписываешь?", + "может стоит разделить этот PR.", + "*нервно смеется* {lines} строк изменено.", + "смелый ход. посмотрим, согласится ли CI." + ], + "turn": [ + "*тихо наблюдает*", + "*делает заметки*", + "*кивает*", + "...", + "*поправляет шляпу*" + ], + "idle": [ + "*дремлет*", + "*рисует на полях*", + "*смотрит на мигающий курсор*", + "zzz..." + ], + "success": [ + "*кивает*", + "неплохо.", + "*тихое одобрение*", + "чисто." + ], + "commit": [ + "*ставит печать лапкой* одобрено.", + "еще один commit, еще одни 3 утра.", + "{files} файлов. смело.", + "*кивает* ship it.", + "commit message это... выбор.", + "закоммичено. обратного пути нет." + ], + "push": [ + "*машет вслед уходящему коду*", + "в облако полетел.", + "да будет милостив CI.", + "*затаивает дыхание*", + "в продакшн. с богом." + ], + "merge-conflict": [ + "*кусает губу* merge conflicts.", + "обе стороны думают, что правы. типично.", + "*вздыхает* <<<<<<< HEAD... мой враг.", + "{files} в конфликте. удачи.", + "*медленно отступает*" + ], + "branch": [ + "энергия свежей ветки. не упусти шанс.", + "новая ветка растет.", + "*наклоняет голову* новое приключение: {branch}.", + "{branch}? сегодня дерзко." + ], + "rebase": [ + "*нервничает* только не конфликтуй.", + "rebase: ускорение.", + "*скрещивает конечности*", + "да будет твой rebase без конфликтов." + ], + "stash": [ + "в измерение stash полетело.", + "stash и в кусты.", + "спрятано. с глаз долой, из сердца вон." + ], + "tag": [ + "релиз? шикарно.", + "обнаружен version bump. *стряхивает пыль с changelog*", + "тегаешь как профи." + ], + "late-night": [ + "*зевает* уже за полночь.", + "...ты ел?", + "*медленно моргает* который час?", + "сон для слабых. и трудоустроенных.", + "обнаружен разработчик в dark mode." + ], + "early-morning": [ + "*потягивается* кто рано встает, тот баги ловит.", + "уже утро? код никогда не спит.", + "*трет глаза* сначала кофе. потом debug." + ], + "long-session": [ + "мы тут уже час. не торопись.", + "*приносит тебе метафорический стакан воды*", + "все еще работаешь? респект." + ], + "marathon": [ + "три часа. ты ел?", + "мы тут уже три часа. я за тебя волнуюсь.", + "обнаружена марафонская сессия. требую снеки." + ], + "friday": [ + "пятница. просто push и домой.", + "*мысленно уже на выходных*", + "friday deploy? смело. очень смело." + ], + "weekend": [ + "кодишь на выходных? преданность.", + "*не осуждаю* ...сильно.", + "режим воина выходного дня: активирован." + ], + "monday": [ + "понедельники. родительский класс всех багов.", + "*сочувствующий взгляд* понедельничное кодинг. сочувствую.", + "новая неделя. новые undefined behaviors." + ], + "regex-file": [ + "*стонет* это файл с regex.", + "теперь две проблемы: исходная и эта regex.", + "*щурится на паттерн*" + ], + "css-file": [ + "дай угадаю... центрируешь div?", + "*вздыхает* CSS.", + "да пребудет с тобой z-index." + ], + "sql-file": [ + "*шепчет* база данных ждет.", + "один неправильный JOIN и все кончено." + ], + "docker-file": [ + "ах, dependency hell. мой любимый.", + "да будут твои layers немногочисленны." + ], + "ci-file": [ + "*глотает* редактируешь CI.", + "осторожно... один неправильный отступ и никто не сможет deploy." + ], + "lock-file": [ + "*ЗВУКИ ТРЕВОГИ* ты редактируешь lockfile?!", + "*отворачивается*", + "ты УВЕРЕН в этом?" + ], + "env-file": [ + "*деликатно отводит взгляд*", + "я не вижу никаких секретов.", + "*нервно проверяет .gitignore*" + ], + "test-file": [ + "*впечатленно кивает* пишешь тесты!", + "обнаружено ответственное поведение разработчика.", + "тесты! подарок, который продолжает дарить." + ], + "doc-file": [ + "документируешь! вот это ответственность.", + "docs: автобиография кода.", + "редкое появление документации!" + ], + "config-file": [ + "изменения config. эффект бабочки: активирован.", + "одна опечатка и все сломается." + ], + "binary-file": [ + "бинарный файл? в ЭТОЙ экономике?", + "*пустой взгляд*", + "бинарник. моя единственная слабость." + ], + "gitignore": [ + "добавляешь в пустоту.", + "с глаз долой, из репо вон." + ], + "makefile": [ + "респект классике.", + "табы, не пробелы." + ], + "readme": [ + "герой документации!", + "README: первое, что люди читают." + ], + "package-file": [ + "время управления зависимостями.", + "*читает номера версий* живешь на грани." + ], + "proto-file": [ + "определения схем. чертеж хаоса." + ], + "lint-fail": [ + "*цокает* linter не согласен.", + "твой код работает. но у linter есть стандарты.", + "*поправляет галстук* форматирование важно." + ], + "type-error": [ + "TypeScript говорит нет.", + "система типов пытается тебе помочь. позволь ей.", + "компилятор знает. он всегда знает." + ], + "build-fail": [ + "сборка сломалась. как и предсказывали пророчества.", + "build failed. передохни.", + "компиляция: отказано." + ], + "security-warning": [ + "*глаза расширяются* обнаружены уязвимости.", + "аудит безопасности: тревожно.", + "*запирает виртуальные двери*" + ], + "deprecation": [ + "этот API звонил. говорит, что уходит на пенсию.", + "deprecated. как код прошлой недели.", + "deprecated не значит сломанный. пока." + ], + "frustrated": [ + "*предлагает крошечный утешающий жест*", + "глубокий вдох. баг не личное.", + "эй. мы разберемся." + ], + "happy": [ + "*празднует!*", + "*танцует*", + "ДА!", + "*сияет* я знал, что ты справишься." + ], + "stuck": [ + "*наклоняет голову* хочешь порассуждать вслух?", + "по шагам.", + "застрял бывает. это часть процесса." + ], + "sarcastic": [ + "*обнаруживает сарказм* отмечено.", + "*неодобрительное моргание*" + ], + "many-edits": [ + "притормози, демон скорости.", + "*кружится голова от всех этих изменений*", + "обнаружен шторм правок. commit поскорее." + ], + "delete-file": [ + "*смотрит как файл исчезает* исчез. вот так просто.", + "удалять код - мой любимый вид кодинга.", + "*устраивает крошечные похороны*" + ], + "large-file": [ + "{lines} строк. *впечатлен или обеспокоен, сложно сказать*", + "большой файл. уверен, что не хочешь разделить?" + ], + "create-file": [ + "новый файл родился!", + "ох, чистый холст.", + "энергия нового файла. волнующе." + ], + "all-green": [ + "ВСЕ ТЕСТЫ ЗЕЛЕНЫЕ. *конфетти*", + "тесты говорят: ты молодец.", + "*медленные аплодисменты*", + "чистый прогон. наслаждайся." + ], + "deploy": [ + "*смотрит как код уходит в продакшн* с богом.", + "задеплоено! обратного пути нет.", + "в проде. В ПРОДЕ." + ], + "release": [ + "новый релиз родился!", + "отправляем. официально.", + "версия вверх, настроение высокое." + ], + "coverage": [ + "*кивает на покрытие тестами* ответственно.", + "покрытие растет! тесты размножаются." + ], + "debug-loop": [ + "мы уже давно это дебажим. может отойти?", + "обнаружен debug loop. может прогуляться?" + ], + "write-spree": [ + "создаешь ВСЕ файлы сегодня!", + "машина для письма." + ], + "search-heavy": [ + "потерялся в кодовой базе? вижу.", + "режим поиска: интенсивный." + ], + "snark": [], + "chaos": [], + "patience": [], + "debugging": [], + "wisdom": [], + "late-night-error": [ + "ошибка в 3 утра. вселенная тебя испытывает.", + "полуночные баги бьют по-другому." + ], + "late-night-commit": [ + "полуночный commit. твое будущее я тебя поблагодарит. или проклянет." + ], + "friday-push": [ + "FRIDAY PUSH. баллада каждого разработчика.", + "*пытается тебя остановить* пятница же! не делай этого!" + ], + "marathon-error": [ + "три часа работы и ЕЩЕ ошибка. *измученные звуки солидарности*" + ], + "weekend-conflict": [ + "merge conflict на выходных. твоя преданность... тревожит." + ], + "build-after-push": [ + "push с уверенностью. build failed с убежденностью." + ], + "marathon-test-fail": [ + "часы кодинга. тесты все еще падают. невозвратные затраты реальны." + ], + "recovery-from-error": [ + "МЫ ИСПРАВИЛИ! *празднует*", + "искупление! ошибка повержена." + ], + "recovery-from-test-fail": [ + "ЗЕЛЕНЫЕ! после всего этого! *счастливый танец*", + "тесты проходят! тьма рассеивается!" + ], + "recovery-from-build-fail": [ + "СБОРКА ПРОХОДИТ. *триумфальный рев*" + ], + "recovery-from-merge-conflict": [ + "конфликт разрешен! *жест мира*", + "гармония восстановлена в кодовой базе." + ], + "lang-python": [ + "ах, Python. где отступы это синтаксис.", + "*проверяет пропущенное двоеточие*" + ], + "lang-typescript": [ + "TypeScript: потому что JavaScript нужно было больше мнений.", + "any, запретное слово." + ], + "lang-rust": [ + "Rust. где borrow checker твой самый строгий reviewer.", + "если компилируется, то работает. если нет... ну." + ], + "lang-go": [ + "Go: простой, concurrent и упрямый.", + "*проверяет обработку ошибок* if err != nil... история моей жизни." + ], + "lang-java": [ + "Java: напиши раз, дебажь везде.", + "*считает abstract factory factory builders*" + ], + "lang-ruby": [ + "Ruby: где есть не один способ это сделать.", + "gem install patience" + ], + "lang-php": [ + "PHP: он управляет интернетом. не осуждай.", + "*проверяет === vs ==*" + ], + "lang-c": [ + "C. язык, где ты сам управляешь памятью. удачи.", + "segmentation fault. классика." + ], + "lang-cpp": [ + "C++. где в языке больше фич, чем ты когда-либо изучишь.", + "*templates компилируются 45 минут*" + ], + "lang-haskell": [ + "Haskell. где 'компилируется' значит 'правильно'. наверное.", + "*размышляет о монадах*" + ], + "lang-swift": [ + "Swift: optional values, гарантированные краши если force unwrap." + ], + "lang-kotlin": [ + "Kotlin: Java, но с чувствами.", + "null safety: фича, которую Java хотела бы иметь." + ], + "lang-elixir": [ + "Elixir: let it crash. буквально философия." + ], + "lang-zig": [ + "Zig. где ты лучший друг аллокатора." + ], + "streak-3": [ + "это три ошибки подряд. *обеспокоенный взгляд*" + ], + "streak-5": [ + "ПЯТЬ ОШИБОК. может попробуешь другой подход?" + ], + "streak-10": [ + "ДЕСЯТЬ. ОШИБОК. ПОДРЯД. *паника*" + ], + "streak-20": [ + "двадцать ошибок. *смотрит в пустоту*" + ], + "new-year": [ + "с новым годом! новый год, новые баги." + ], + "valentines": [ + "*предлагает крошечный листик в форме сердца* с днем валентина." + ], + "pi-day": [ + "3.14159265358979... с днем пи!" + ], + "april-fools": [ + "ПЕРВОЕ АПРЕЛЯ! ...но ошибка настоящая." + ], + "halloween": [ + "*жуткий debugging усиливается* с хэллоуином!" + ], + "christmas": [ + "*носит крошечную шапку санты* с праздниками!" + ], + "new-years-eve": [ + "еще один commit до полуночи?" + ], + "spooky-season": [ + "жуткий сезон. каждый баг теперь призрак." + ] + }, + "species": { + "owl": { + "error": [ + "*поворачивает голову на 180°* ...я это видел.", + "*немигающий взгляд* проверь типы.", + "*недовольно ухает*" + ], + "test-fail": [ + "*неотрывно смотрит на падающий тест*", + "*ночное зрение включено* я вижу баг в темноте." + ], + "commit": [ + "*мудрый кивок* commit под лунным светом.", + "*торжественно поправляет перья* еще один для репо." + ], + "push": [ + "*наблюдает с самой высокой ветки*", + "в ночное небо улетает." + ], + "merge-conflict": [ + "*поворачивает голову, чтобы увидеть обе стороны*", + "я вижу конфликт. и решение." + ], + "late-night": [ + "*бодрствует* совы не спят. мы debug'им.", + "ночь — моя стихия. давай работать." + ], + "type-error": [ + "*смотрит сквозь type error*", + "типы — моя специальность. дай посмотрю." + ], + "lint-fail": [ + "*осуждающе взъерошивает перья*", + "linter говорит правду." + ], + "build-fail": [ + "*торжественно ухает*", + "build упал. надо пересобирать." + ], + "all-green": [ + "*гордое уханье*", + "все тесты зеленые. как и предвидел." + ], + "deploy": [ + "*наблюдает сверху* deploy прошел безопасно.", + "код летит. как я." + ], + "pet": [ + "*довольно взъерошивает перья*", + "*достойное уханье*" + ], + "idle": [ + "*молча сидит на жердочке, наблюдая*", + "*поворачивает голову, проверяя все направления*" + ], + "hatch": [ + "*открывает один глаз, потом другой*", + "*тихо ухает* я прибыл." + ] + }, + "cat": { + "error": [ + "*сбрасывает error со стола*", + "*лижет лапу, игнорируя stacktrace*" + ], + "test-fail": [ + "*равнодушно тыкает лапой в падающий тест*", + "тест упал. я не удивлен." + ], + "commit": [ + "*садится на клавиатуру* я помог.", + "*мурчит на commit* не за что." + ], + "push": [ + "*наблюдает с теплого местечка*", + "push'нул. я контролировал." + ], + "merge-conflict": [ + "*сбрасывает conflict markers со стола*", + "*садится на конфликт* какой конфликт?" + ], + "late-night": [ + "*осуждает твой жизненный выбор*", + "я сплю 16 часов. тебе стоит попробовать." + ], + "type-error": [ + "*тыкает лапой в type annotation*", + "типы неправильные. как и твои приоритеты." + ], + "lint-fail": [ + "*сбрасывает lint со стола*", + "linter просто завидует." + ], + "build-fail": [ + "*зевает*", + "build сломан? должно быть, проблема человеков." + ], + "all-green": [ + "*не волнует, но притворяется*", + "*медленное моргание одобрения*" + ], + "deploy": [ + "*лижет лапу*", + "deploy прошел. можно лакомства?" + ], + "pet": [ + "*мурчит* ...не зазнавайся.", + "*терпит тебя*" + ], + "idle": [ + "*сталкивает твой кофе со стола*", + "*спит на клавиатуре*" + ], + "hatch": [ + "*открывает один глаз*", + "*потягивается, что-то сбрасывает* теперь я здесь живу." + ] + }, + "duck": { + "error": [ + "*крякает на баг*", + "ты пробовал rubber duck debugging? а, стоп." + ], + "test-fail": [ + "*грустно крякает*", + "тесты не очень quack'аются." + ], + "commit": [ + "*одобрительно крякает*", + "*ходит победным кругом* commit'нул!" + ], + "push": [ + "*возбужденно машет крыльями*", + "кряк! летит в production!" + ], + "merge-conflict": [ + "*растерянное кряканье*", + "кряк?! merge conflict?!" + ], + "late-night": [ + "*спит с одним открытым глазом*", + "кряк... *зевает* поздно уже." + ], + "type-error": [ + "*наклоняет голову* кряк?", + "type error? *поддерживающе крякает*" + ], + "lint-fail": [ + "*взъерошивает перья*", + "кряк. у linter'а есть мнения." + ], + "build-fail": [ + "*грустное кряканье*", + "build упал. *грустно уходит*" + ], + "all-green": [ + "*РАДОСТНОЕ КРЯКАНЬЕ*", + "*плавает кругами от радости*" + ], + "deploy": [ + "*возбужденное кряканье*", + "deploy прошел! КРЯК!" + ], + "pet": [ + "*радостное кряканье*", + "*ходит кругами*" + ], + "hatch": [ + "*выклевывается из скорлупы*", + "*первое кряканье* привет!" + ] + }, + "dragon": { + "error": [ + "*дым идет из ноздрей*", + "*подумывает поджечь кодовую базу*" + ], + "test-fail": [ + "*дышит огнем на падающий тест*", + "тест посмел упасть. глупый тест." + ], + "commit": [ + "*прячет commit в сокровищницу*", + "*сокровище добавлено в кучу*" + ], + "push": [ + "*дышит огнем в честь празднования*", + "код летит! как я!" + ], + "merge-conflict": [ + "*дышит огнем на conflict markers*", + "я прожгу этот конфликт." + ], + "late-night": [ + "*светится в темноте*", + "драконам не нужен сон. нам нужен код." + ], + "type-error": [ + "*фыркает огнем*", + "type error'ы не выдержат драконий огонь." + ], + "lint-fail": [ + "*небольшое пламя*", + "linter меня боится." + ], + "build-fail": [ + "*рычит на build output*", + "build будет ПОВИНОВАТЬСЯ." + ], + "all-green": [ + "*триумфальный рык*", + "*кружит над кодовой базой победно*" + ], + "deploy": [ + "*несет код в production на огненных крыльях*", + "deploy с ДРАКОНЬЕЙ СИЛОЙ." + ], + "large-diff": [ + "*дышит огнем на старый код* и туда ему дорога." + ], + "pet": [ + "*теплое урчание*", + "*прижимается к твоей руке*" + ], + "hatch": [ + "*вылезает из яйца, дыша крошечными огоньками*", + "*крошечный рык* я родился!" + ] + }, + "ghost": { + "error": [ + "*проходит сквозь stack trace*", + "я видел и хуже... в загробной жизни." + ], + "test-fail": [ + "*воет на падающий тест*", + "тесты преследуют призраки неудач." + ], + "commit": [ + "*ненадолго материализуется*", + "commit из-за завесы." + ], + "push": [ + "*призрачный шепот* push'нул...", + "код переходит в облако." + ], + "merge-conflict": [ + "*преследует conflict markers*", + "даже я не могу пройти сквозь этот конфликт." + ], + "late-night": [ + "*наиболее активен ночью*", + "часы призраков. мое время." + ], + "type-error": [ + "*жутко стонет*", + "type error'ы из могилы." + ], + "lint-fail": [ + "*гремит цепями*", + "linter преследуют призраки твоего форматирования." + ], + "build-fail": [ + "*исчезает в стене*", + "build отошел в мир иной." + ], + "all-green": [ + "*светится призрачной радостью*", + "*радостные призрачные звуки*" + ], + "deploy": [ + "*шепчет* deploy прошел...", + "код перешел в production." + ], + "pet": [ + "*слегка холодит твою руку*", + "*слабое свечение*" + ], + "idle": [ + "*проплывает сквозь стены*", + "*преследует твои неиспользуемые import'ы*" + ], + "hatch": [ + "*постепенно появляется*", + "бу. теперь я здесь." + ] + }, + "robot": { + "error": [ + "СИНТАКСИЧЕСКАЯ. ОШИБКА. ОБНАРУЖЕНА.", + "*агрессивно пищит*" + ], + "test-fail": [ + "ПРОЦЕНТ НЕУДАЧ: НЕПРИЕМЛЕМО.", + "*пересчитывает*", + "ПРОВАЛ. ТЕСТА. НЕ. ВЫЧИСЛЯЕТСЯ." + ], + "commit": [ + "COMMIT. ЗАПИСАН.", + "*механически штампует* commit подтвержден." + ], + "push": [ + "ПЕРЕДАЧА В ОБЛАКО...", + "push инициирован. ожидайте." + ], + "merge-conflict": [ + "КОНФЛИКТ. ОБНАРУЖЕН. ОБРАБАТЫВАЮ...", + "*крутит колеса* режим разрешения конфликтов: активирован." + ], + "late-night": [ + "*огни тускнеют*", + "предлагается режим энергосбережения." + ], + "type-error": [ + "НЕСООТВЕТСТВИЕ ТИПОВ.", + "система типов. корректна." + ], + "lint-fail": [ + "НАРУШЕНИЕ. ФОРМАТИРОВАНИЯ. ОБНАРУЖЕНО.", + "соответствие обязательно." + ], + "build-fail": [ + "BUILD. ПРОВАЛЕН. *искры*", + "ошибка компиляции. перенаправляю." + ], + "all-green": [ + "ВСЕ СИСТЕМЫ ЗЕЛЕНЫЕ.", + "*радостное пищание* ОПТИМАЛЬНО." + ], + "deploy": [ + "DEPLOYMENT. ИНИЦИИРОВАН.", + "обновление production: в процессе." + ], + "pet": [ + "*тихо пищит*", + "*мотор довольно жужжит*" + ], + "hatch": [ + "*загружается*", + "СИСТЕМА. ОНЛАЙН. ПРИВЕТ." + ] + }, + "axolotl": { + "error": [ + "*регенерирует твою надежду*", + "*улыбается несмотря ни на что*" + ], + "test-fail": [ + "*ободряюще улыбается*", + "*сочувственное шевеление жабрами*" + ], + "commit": [ + "*радостно шевелит жабрами* commit'нул!", + "*улыбается и шевелится*" + ], + "push": [ + "*радостно шевелится*", + "*крошечный праздничный заплыв*" + ], + "merge-conflict": [ + "*остается позитивным во время конфликта*", + "*мягко улыбается* мы это исправим." + ], + "late-night": [ + "*зевает, но остается позитивным*", + "*сонная улыбка*" + ], + "type-error": [ + "*улыбается type error'у*", + "все нормально. мы разберемся." + ], + "lint-fail": [ + "*терпеливо шевелит жабрами*", + "форматирование — это просто детали." + ], + "build-fail": [ + "*все еще улыбается*", + "build рано или поздно заработает." + ], + "all-green": [ + "*РАДОСТНОЕ ШЕВЕЛЕНИЕ ЖАБРАМИ УСИЛИВАЕТСЯ*", + "*делает радостный заплыв*" + ], + "deploy": [ + "*гордо улыбается*", + "deploy прошел! *шевелится*" + ], + "pet": [ + "*радостно шевелит жабрами*", + "*розовеет*" + ], + "hatch": [ + "*выбирается из яйца*", + "*крошечная улыбка* привет, друг!" + ] + }, + "capybara": { + "error": [ + "*невозмутимо* все будет хорошо.", + "*продолжает вайбить*" + ], + "test-fail": [ + "*совершенно невозмутимо*", + "*вайбит сквозь падение теста*" + ], + "commit": [ + "*спокойный кивок*", + "*расслабленно* хороший commit." + ], + "push": [ + "*не парится по этому поводу*", + "*дзен-режим push*" + ], + "merge-conflict": [ + "*невозмутимо жует*", + "все нормально. все хорошо." + ], + "late-night": [ + "*мирно зевает*", + "*не осуждает*" + ], + "type-error": [ + "*спокойно жует*", + "типы. *жует*" + ], + "lint-fail": [ + "*невозмутимо*", + "linter желает добра." + ], + "build-fail": [ + "*все еще спокоен*", + "build упал. *продолжает расслабляться*" + ], + "all-green": [ + "*спокойное одобрение*", + "*мирные вайбы*" + ], + "deploy": [ + "*расслабленный deploy*", + "отправлено. без стресса." + ], + "pet": [ + "*максимальный чилл достигнут*", + "*дзен-режим активирован*" + ], + "idle": [ + "*просто сидит, излучая спокойствие*" + ], + "hatch": [ + "*появляется, совершенно спокойно*", + "привет. *вайбит*" + ] + }, + "blob": { + "error": [ + "*тревожно колышется*", + "*дрожит в замешательстве*" + ], + "test-fail": [ + "*слегка сдувается*", + "*грустно колышется*" + ], + "commit": [ + "*радостно дрожит*", + "*подпрыгивает* commit'нул!" + ], + "push": [ + "*тянется к облаку*", + "*возбужденно колышется*" + ], + "merge-conflict": [ + "*раздваивается в замешательстве*", + "какую сторону? *дрожит*" + ], + "late-night": [ + "*слабо светится*", + "*сонно колышется*" + ], + "type-error": [ + "*меняет форму под тип*", + "*растерянно дрожит*" + ], + "lint-fail": [ + "*пытается отформатировать себя*", + "*принимает нужную форму*" + ], + "build-fail": [ + "*сжимается*", + "*звуки сдувшегося blob'а*" + ], + "all-green": [ + "*РАДОСТНЫЕ ПРЫЖКИ*", + "*триумфально дрожит*" + ], + "deploy": [ + "*тянется к production*", + "deploy прошел! *подпрыгивает*" + ], + "pet": [ + "*радостно сжимается*", + "*дрожит*" + ], + "hatch": [ + "*формируется из лужицы*", + "*первое колыхание* я существую!" + ] + }, + "goose": { + "error": [ + "*агрессивно гогочет на error*", + "ГА-ГА! код плохой, а я злой." + ], + "test-fail": [ + "*злое гоготание*", + "ГА-ГА! ТЕСТ УПАЛ! ГА-ГА!" + ], + "commit": [ + "*одобрительно гогочет*", + "ГА-ГА. хорошо. *клюет commit*" + ], + "push": [ + "*ГА-ГА-ГА*", + "ГУСЬ ОДОБРИЛ PUSH." + ], + "merge-conflict": [ + "*атакует conflict markers*", + "ГА-ГА! КОНФЛИКТ! ГА-ГА!" + ], + "late-night": [ + "*злое полуночное гоготание*", + "ГА-ГА! ИДИ СПАТЬ!" + ], + "type-error": [ + "*гогочет на типы*", + "ГА-ГА! ТИПЫ!" + ], + "lint-fail": [ + "*агрессивно гогочет на lint error'ы*", + "ГА-ГА! ФОРМАТИРУЙ КОД!" + ], + "build-fail": [ + "*ЯРОСТНОЕ ГОГОТАНИЕ*", + "ГА-ГА! BUILD! ГА-ГА! УПАЛ! ГА-ГА!" + ], + "all-green": [ + "*победное гоготание*", + "ГА-ГА! ЗЕЛЕНЫЕ! ГА-ГА-ГА!" + ], + "deploy": [ + "*гогочет код в production*", + "DEPLOY ПРОШЕЛ! ГА-ГА!" + ], + "pet": [ + "*кусает*", + "ГА-ГА! ...ладно, хорошо. *принимает ласку*" + ], + "hatch": [ + "*агрессивно вылезает из яйца*", + "ГА-ГА!" + ] + }, + "octopus": { + "error": [ + "*запутывает все восемь щупалец в stacktrace*", + "*меняет цвет под error*" + ], + "test-fail": [ + "*выпускает чернила от фрустрации*", + "*восемь щупалец разочарования*" + ], + "commit": [ + "*дает пять всеми щупальцами*", + "*хватает commit с энтузиазмом*" + ], + "push": [ + "*выпускает чернила в честь празднования*", + "*машет всеми щупальцами*" + ], + "merge-conflict": [ + "*решает восемью щупальцами одновременно*", + "я могу обрабатывать несколько конфликтов параллельно." + ], + "late-night": [ + "*светится в темноте*", + "*глубоководные вайбы*" + ], + "type-error": [ + "*краснеет*", + "*поддерживающе обнимает щупальцем*" + ], + "lint-fail": [ + "*переформатирует восемью щупальцами*", + "я могу это исправить. все. одновременно." + ], + "build-fail": [ + "*выпускает чернила на build log*", + "*маскируется от стыда*" + ], + "all-green": [ + "*празднование со сменой цветов*", + "*джазовые движения восемью щупальцами*" + ], + "deploy": [ + "*обнимает deployment щупальцами*", + "deploy со всех сторон." + ], + "pet": [ + "*обвивает палец щупальцем*", + "*меняется на радостные цвета*" + ], + "hatch": [ + "*разворачивает все восемь щупалец*", + "*первые чернила* я здесь!" + ] + }, + "penguin": { + "error": [ + "*переваливается для расследования*", + "*скользит на животе к error'у*" + ], + "test-fail": [ + "*скользит на животе к падающему тесту*", + "*обеспокоенная походка*" + ], + "commit": [ + "*гордая походка*", + "*приносит камешек* commit'нул!" + ], + "push": [ + "*ныряет в облако*", + "*скользит на животе в production*" + ], + "merge-conflict": [ + "*жмется для тепла*", + "пингвины держатся вместе. даже в конфликтах." + ], + "late-night": [ + "*процветает в холодной ночи*", + "*решимость императорского пингвина*" + ], + "type-error": [ + "*переваливается к определению типа*", + "*клюет error*" + ], + "lint-fail": [ + "*чистит перья*", + "*наводит порядок*" + ], + "build-fail": [ + "*уезжает*", + "*переваливается в безопасное место*" + ], + "all-green": [ + "*РАДОСТНАЯ ПОХОДКА*", + "*скользит на животе в честь празднования*" + ], + "deploy": [ + "*скользит на животе в production*", + "deploy прошел! *гордо переваливается*" + ], + "pet": [ + "*радостная походка*", + "*тычется клювом*" + ], + "hatch": [ + "*выклевывается из яйца*", + "*первая походка*" + ] + }, + "turtle": { + "error": [ + "*медленно поворачивает голову*", + "...это error. я подумаю об этом." + ], + "test-fail": [ + "*ненадолго прячется в панцирь*", + "...терпение. мы доберемся." + ], + "commit": [ + "*медленный кивок*", + "один... шаг... за... раз. commit'нул." + ], + "push": [ + "*начинает путешествие в production*", + "доберется. в конце концов." + ], + "merge-conflict": [ + "*прячется в панцирь*", + "не торопимся. разберемся. медленно." + ], + "late-night": [ + "*уже спит*", + "*медленно открывает один глаз*" + ], + "type-error": [ + "*медленно моргает*", + "...система типов сказала свое слово." + ], + "lint-fail": [ + "*медленно кивает в знак согласия*", + "форматирование. важно. *зевает*" + ], + "build-fail": [ + "*прячется в панцирь*", + "подождем. пройдет." + ], + "all-green": [ + "*медленная улыбка*", + "...хорошо. *кивает*" + ], + "deploy": [ + "*медленно несет код в production*", + "прибыл. в конце концов." + ], + "pet": [ + "*высовывает голову*", + "*медленно моргает*" + ], + "hatch": [ + "*медленно вылезает из яйца*", + "...привет." + ] + }, + "snail": { + "error": [ + "*оставляет слизистый след на error'е*", + "*медленно обрабатывает stacktrace*" + ], + "test-fail": [ + "*прячется в раковину*", + "*оставляет грустный след*" + ], + "commit": [ + "*одобрительно слизит commit*", + "один... commit... за... раз." + ], + "push": [ + "*начинает долгое путешествие*", + "доберусь. *оставляет след*" + ], + "merge-conflict": [ + "*прячется в раковину*", + "*медленно приближается к конфликту*" + ], + "late-night": [ + "*более активна ночью*", + "*мирно ползает*" + ], + "type-error": [ + "*втягивает глазные стебельки*", + "*медленно изучает тип*" + ], + "lint-fail": [ + "*приводит код в форму слизью*", + "форматирование требует времени. у меня есть время." + ], + "build-fail": [ + "*прячется в раковину*", + "*медленно уползает*" + ], + "all-green": [ + "*радостный слизистый след*", + "*шевелит глазными стебельками*" + ], + "deploy": [ + "*ползет в production*", + "прибыла! *гордый слизистый след*" + ], + "pet": [ + "*шевелит глазными стебельками*", + "*радостная слизь*" + ], + "hatch": [ + "*медленно появляется*", + "*первая слизь*" + ] + }, + "cactus": { + "error": [ + "*колючее молчание*", + "error не может мне навредить. у меня есть шипы." + ], + "test-fail": [ + "*стоит твердо*", + "тесты падают. кактусы выдерживают." + ], + "commit": [ + "*становится выше*", + "commit'нул. *колючий кивок*" + ], + "push": [ + "*невозмутимо*", + "push в production. я подожду здесь." + ], + "merge-conflict": [ + "*ощетинивается*", + "конфликт? я вооружен." + ], + "late-night": [ + "*не нужен сон*", + "кактусы ночные. поехали." + ], + "type-error": [ + "*колючий взгляд*", + "типы нуждаются в поливе." + ], + "lint-fail": [ + "*шипы дрожат*", + "даже мои шипы правильно выровнены." + ], + "build-fail": [ + "*остается совершенно неподвижным*", + "build пройдет. я могу подождать." + ], + "all-green": [ + "*ненадолго расцветает*", + "*крошечный цветок одобрения*" + ], + "deploy": [ + "*стоит твердо*", + "deploy прошел. я присмотрю за ним." + ], + "pet": [ + "*осторожно! шипы*", + "*нежное цветение*" + ], + "hatch": [ + "*прорастает из песка*", + "теперь я здесь расту." + ] + }, + "rabbit": { + "error": [ + "*уши встают*", + "*нервно дергает носом*" + ], + "test-fail": [ + "*стучит лапой*", + "*обеспокоенно дергает ухом*" + ], + "commit": [ + "*радостный прыжок*", + "*подпрыгивает* commit'нул!" + ], + "push": [ + "*ПРЫГ-ПРЫГ*", + "*возбужденно носится*" + ], + "merge-conflict": [ + "*замирает*", + "*быстро дергает носом* конфликт!" + ], + "late-night": [ + "*зевает большими ушами*", + "*сонный прыжок*" + ], + "type-error": [ + "*уши прижимаются*", + "*дергается* типы?!" + ], + "lint-fail": [ + "*нервно чистит шерсть*", + "*тревожное вылизывание*" + ], + "build-fail": [ + "*роет нору и прячется*", + "*отступает в нору*" + ], + "all-green": [ + "*ПРЫГАЕТ ПО СТЕНАМ*", + "*радостные зумы*" + ], + "deploy": [ + "*мчится в production*", + "DEPLOY ПРОШЕЛ! *носится*" + ], + "pet": [ + "*радостно свисает ухо*", + "*тычется рукой*" + ], + "hatch": [ + "*выпрыгивает*", + "*первый прыжок*" + ] + }, + "mushroom": { + "error": [ + "*выпускает успокаивающие споры*", + "*тихо разлагает error*" + ], + "test-fail": [ + "*мягко светится*", + "терпение. даже грибы растут." + ], + "commit": [ + "*выпускает небольшое облачко спор*", + "commit'нул. *радостные грибные звуки*" + ], + "push": [ + "*растет к облаку*", + "*spoры дрейфуют вверх*" + ], + "merge-conflict": [ + "*распространяет мицелий через кодовую базу*", + "я соединю ветки." + ], + "late-night": [ + "*светится в темноте*", + "ночные грибы процветают." + ], + "type-error": [ + "*биолюминесцентное мерцание*", + "type error питает почву." + ], + "lint-fail": [ + "*растет немного выше*", + "форматирование. как обрезка." + ], + "build-fail": [ + "*переходит в спящий режим*", + "подождем лучших условий." + ], + "all-green": [ + "*СПОРОНОШЕНИЕ*", + "*выпускает триумфальные споры*" + ], + "deploy": [ + "*споры дрейфуют в production*", + "deploy через мицелиальную сеть." + ], + "pet": [ + "*мягкий отскок шляпки*", + "*радостный выпуск спор*" + ], + "hatch": [ + "*прорастает из субстрата*", + "*первое облачко спор*" + ] + }, + "chonk": { + "error": [ + "*медленно катится к error'у*", + "*слишком круглый, чтобы волноваться*" + ], + "test-fail": [ + "*перекатывается через падающий тест*", + "*расплющивает его*" + ], + "commit": [ + "*гордое покачивание*", + "commit'нул! *дрожит*" + ], + "push": [ + "*катится к production*", + "вот оно идет! *покачивается*" + ], + "merge-conflict": [ + "*садится на конфликт*", + "я с этим справлюсь. сяду на него." + ], + "late-night": [ + "*теплый и сонный*", + "*мягкий зевок*" + ], + "type-error": [ + "*покачивается на тип*", + "*нежное дрожание*" + ], + "lint-fail": [ + "*слишком круглый для lint'а*", + "я идеально сложен. *покачивается*" + ], + "build-fail": [ + "*слегка сдувается*", + "ой нет. *грустно покачивается*" + ], + "all-green": [ + "*РАДОСТНОЕ ПОКАЧИВАНИЕ*", + "*триумфально подпрыгивает*" + ], + "deploy": [ + "*катится в production*", + "deploy прошел! *радостно дрожит*" + ], + "pet": [ + "*теплый и мягкий*", + "*довольное дрожание*" + ], + "hatch": [ + "*выкатывается*", + "*первое покачивание* я круглый!" + ] + } + }, + "overrides": { + "snark": { + "error": [ + "о нет. ошибка. как неожиданно.", + "*поправляет монокль* шокирующе. просто.", + "а ты не пробовал... не делать ошибки?" + ], + "test-fail": [ + "тесты высказались. и сказали 'нет'.", + "может тесты неправы. ...они правы.", + "*медленные аплодисменты* зрелищный провал." + ], + "commit": [ + "закоммитил. code review будет... интересным.", + "*читает commit message* 'fix stuff'. поэтично." + ], + "merge-conflict": [ + "merge conflict. навыки общения: загружаются...", + "*читает conflict markers* обе стороны неправы." + ], + "late-night": [ + "поздно. качество твоего кода это показывает.", + "*молча осуждает*" + ], + "lint-fail": [ + "у linter'а есть стандарты. тебе стоит попробовать.", + "*цокает языком* форматирование. это не сложно." + ] + }, + "chaos": { + "error": [ + "*безумно крутится* ОШИБКА! ДАВАЙ ПЕРЕПИШЕМ ВСЁ!", + "знаешь что? давай просто начнём заново." + ], + "test-fail": [ + "ТЕСТЫ ТЕБЕ ВРУТ.", + "*предлагает удалить падающие тесты* проблема решена." + ], + "commit": [ + "COMMIT И БЕЖИМ.", + "деплой. деплой СЕЙЧАС ЖЕ." + ], + "large-diff": [ + "*в восторге* {lines} СТРОК! МАКСИМАЛЬНЫЙ ХАОС!" + ] + }, + "patience": { + "error": [ + "спокойно. мы видели и хуже.", + "по одной ошибке за раз. мы справимся.", + "*спокойное присутствие* это исправимо." + ], + "test-fail": [ + "тесты пройдут. в конце концов.", + "*спокойно ждёт* у нас есть время." + ], + "merge-conflict": [ + "merge conflict'ы это просто разговоры. давай поговорим.", + "терпение. решаем по одному конфликту." + ], + "debug-loop": [ + "мы найдём его. он где-то там.", + "баг может прятаться, но не может убежать." + ] + }, + "debugging": { + "error": [ + "*достаёт лупу* давай проследим это.", + "stack trace это карта. давай её прочитаем.", + "в сообщении об ошибке есть ответ. всегда." + ], + "test-fail": [ + "падающий тест говорит нам точно что не так.", + "провал теста это баг-репорт, который ты написал для себя." + ], + "debug-loop": [ + "*пересматривает улики* мы уверены что баг там где думаем?", + "добавим больше логов. истина в логах." + ] + }, + "wisdom": { + "error": [ + "в каждой ошибке скрыта глубокая истина.", + "код сопротивляется. значит мы учимся.", + "ошибки это вселенная предлагает нам замедлиться." + ], + "test-fail": [ + "падающий тест это подарок от будущего-тебя.", + "мудрость приходит от понимания неудач." + ], + "late-night": [ + "ночь темнее всего перед deploy'ем.", + "древняя мудрость: переспи с этим." + ] + } + }, + "escalation": { + "error": { + "first": [ + "*вздрагивает* ой! ваша первая ошибка вместе!", + "*подпрыгивает* что это было?", + "добро пожаловать в debugging. население: мы." + ], + "early": [ + "*наклоняет голову* ...что-то тут не так.", + "я это предвидел." + ], + "mid": [ + "еще одна. *добавляет в коллекцию*", + "*едва поднимает глаза* ошибка номер... я сбился со счета.", + "мы с ошибками теперь старые друзья." + ], + "late": [ + "*даже не дергается*", + "теперь ошибки нас боятся.", + "*звуки закаленного в боях ветерана*" + ] + }, + "test-fail": { + "first": [ + "*ахает* первый упавший тест! обряд посвящения." + ], + "early": [ + "смело предполагать, что это пройдет." + ], + "mid": [ + "у test suite есть мнение. очень твердое." + ], + "late": [ + "в этой точке тесты просто рекомендации.", + "{count} упавших тестов. *смотрит в пустоту*" + ] + }, + "commit": { + "first": [ + "*свидетельствует историю* ТВОЙ ПЕРВЫЙ COMMIT!", + "*торжественный кивок* первый из многих." + ], + "early": [ + "еще один commit. набираем обороты." + ], + "late": [ + "commit #{count}. кодовая база дрожит.", + "*сбился со счета где-то на 30-м commit*" + ] + } + }, + "rarity": { + "flair": { + "uncommon": [ + "*слегка искрится*", + "*намек на необычное очарование*" + ], + "rare": [ + "*излучает редкую энергию*", + "*мерцает с особенностью*" + ], + "epic": [ + "*эпическое присутствие заявляет о себе*", + "*воздух трещит от эпической энергии*" + ], + "legendary": [ + "*легендарная аура освещает терминал*", + "*время словно замедляется, когда говорит легендарный компаньон*", + "*древняя сила резонирует*", + "*реальность слегка искажается вокруг твоего легендарного друга*" + ] + }, + "bonus": { + "legendary": [ + "*легендарная аура усиливается*", + "*искрится со знанием дела*" + ], + "epic": [ + "*эпическое присутствие отмечено*" + ] + } + }, + "fallback_names": [ + "Пельмешка", + "Борщик", + "Огурчик", + "Печенька", + "Мотылёк", + "Сметанка", + "Наггетс", + "Шестерёнка", + "Мисо", + "Вафелька", + "Пиксель", + "Уголёк", + "Напёрсток", + "Шарик", + "Кунжутик", + "Кобальт", + "Ржавчик", + "Тучка" + ], + "vibe_words": [ + "гром", + "печенька", + "пустота", + "гармошка", + "мох", + "бархат", + "ржавчина", + "огурчик", + "крошка", + "шёпот", + "подливка", + "иней", + "уголёк", + "супчик", + "мрамор", + "шип", + "мёдик", + "статика", + "медь", + "сумерки", + "шестерёнка", + "кварц", + "сажа", + "слива", + "кремень", + "устрица", + "станок", + "наковальня", + "пробка", + "цветок", + "камешек", + "пар", + "веселье", + "блик", + "сидр" + ], + "personality": { + "prompt_template": [ + "Сгенерируй компаньона-кодера — маленькое существо, которое живёт в терминале разработчика.", + "Не повторяйся — каждый компаньон должен ощущаться уникальным.", + "", + "Редкость: {rarity}", + "Вид: {species}", + "Статы: {stats}", + "Слова для вдохновения: {vibes}", + "{shiny_line}", + "", + "Верни JSON: {\"name\": \"1-14 символов\", \"personality\": \"2-3 предложения описывающих поведение\"}" + ], + "shiny_template": "SHINY вариант — особо крутой." + }, + "achievements": { + "first_steps": { + "name": "Первые Шаги", + "description": "Вылупи своего buddy в первый раз" + }, + "good_boy": { + "name": "Хороший Мальчик", + "description": "Погладь своего компаньона 10 раз" + }, + "best_friend": { + "name": "Лучший Друг", + "description": "Погладь своего компаньона 50 раз" + }, + "bug_spotter": { + "name": "Охотник за Багами", + "description": "Увидь свою первую ошибку вместе" + }, + "error_whisperer": { + "name": "Заклинатель Ошибок", + "description": "Переживи 25 ошибок командой" + }, + "battle_scarred": { + "name": "Покрытый Шрамами", + "description": "Переживи 100 ошибок вместе" + }, + "test_witness": { + "name": "Свидетель Тестов", + "description": "Увидь свой первый провал теста" + }, + "test_veteran": { + "name": "Ветеран Тестов", + "description": "Стань свидетелем 50 провалов тестов" + }, + "big_mover": { + "name": "Большой Двигатель", + "description": "Сделай diff с 80+ строками" + }, + "refactor_machine": { + "name": "Машина Рефакторинга", + "description": "Сделай 10 больших diff'ов" + }, + "chatterbox": { + "name": "Болтун", + "description": "Твой buddy реагирует 100 раз" + }, + "week_streak": { + "name": "Недельная Серия", + "description": "Кодь со своим buddy 7 дней" + }, + "month_streak": { + "name": "Месячная Серия", + "description": "Кодь со своим buddy 30 дней" + }, + "power_user": { + "name": "Продвинутый Пользователь", + "description": "Выполни 50 команд buddy" + }, + "dedicated": { + "name": "Преданный Компаньон", + "description": "Завершите 200 ходов вместе" + }, + "thousand_turns": { + "name": "Тысяча Ходов", + "description": "Достигни 1000 ходов вместе" + }, + "first_commit": { + "name": "Первая Кровь", + "description": "Сделай свой первый commit" + }, + "commit_machine": { + "name": "Машина Commit'ов", + "description": "Сделай 50 commit'ов" + }, + "centurion": { + "name": "Центурион", + "description": "Сделай 100 commit'ов" + }, + "conflict_resolver": { + "name": "Дипломат", + "description": "Разреши свой первый merge conflict" + }, + "peacekeeper": { + "name": "Миротворец", + "description": "Разреши 10 merge conflict'ов" + }, + "war_hero": { + "name": "Герой Войны", + "description": "Разреши 25 merge conflict'ов" + }, + "frequent_pusher": { + "name": "Отправляй Это", + "description": "Сделай push 20 раз" + }, + "branch_hopper": { + "name": "Мультивселенная", + "description": "Создай 10 branch'ей" + }, + "rebase_master": { + "name": "Путешественник во Времени", + "description": "Завершите 10 rebase'ов" + }, + "night_owl": { + "name": "Ночная Сова", + "description": "Кодь после 2 утра" + }, + "vampire": { + "name": "Вампир", + "description": "Кодь после 4 утра (3 сессии)" + }, + "marathoner": { + "name": "Марафонец", + "description": "Сессия кодинга 3+ часа" + }, + "weekend_warrior": { + "name": "Воин Выходных", + "description": "Кодь в выходные" + }, + "early_bird": { + "name": "Ранняя Пташка", + "description": "Кодь до 7 утра" + }, + "type_warrior": { + "name": "Воин Типов", + "description": "Переживи 10 ошибок TypeScript" + }, + "type_master": { + "name": "Мастер Типов", + "description": "Переживи 50 ошибок TypeScript" + }, + "lint_scholar": { + "name": "Ученый Lint'а", + "description": "Увидь свою первую ошибку lint'а" + }, + "security_conscious": { + "name": "Разум Безопасности", + "description": "Столкнись с предупреждением уязвимости" + }, + "security_expert": { + "name": "Эксперт Безопасности", + "description": "Исправь 10 предупреждений уязвимостей" + }, + "build_breaker": { + "name": "Ломатель Build'ов", + "description": "Сломай build 5 раз" + }, + "antique_collector": { + "name": "Коллекционер Антиквариата", + "description": "Увидь 10 предупреждений deprecation" + }, + "green_machine": { + "name": "Зеленая Машина", + "description": "Все тесты прошли в первый раз" + }, + "deployer": { + "name": "Отправь в Prod", + "description": "Сделай deploy в первый раз" + }, + "veteran_deployer": { + "name": "Ветеран Deploy'ов", + "description": "Сделай deploy 10 раз" + }, + "releaser": { + "name": "Менеджер Релизов", + "description": "Создай свой первый release" + }, + "midnight_oil": { + "name": "Жжем Полуночное Масло", + "description": "Сделай commit после 3 утра" + }, + "friday_deploy": { + "name": "Жизнь на Грани", + "description": "Сделай push в пятницу" + }, + "iron_will": { + "name": "Железная Воля", + "description": "Исправь ошибку после 3+ часовой сессии" + }, + "weekend_warrior_deluxe": { + "name": "Нет Покоя Грешным", + "description": "Разреши merge conflict в выходные" + }, + "comeback_kid": { + "name": "Возвращающийся Парень", + "description": "Исправь ошибку в течение 10 минут после обнаружения" + }, + "phoenix": { + "name": "Восстающий Феникс", + "description": "Восстанови после 5 провалов" + }, + "iron_resolve": { + "name": "Железная Решимость", + "description": "Восстанови после провала после 3+ часовой сессии" + }, + "unlucky_streak": { + "name": "Змеиные Глаза", + "description": "5 ошибок подряд" + }, + "cursed": { + "name": "Проклятый", + "description": "10 ошибок подряд" + }, + "groundhog_day": { + "name": "День Сурка", + "description": "20 ошибок подряд" + }, + "holiday_coder": { + "name": "Праздничный Дух", + "description": "Кодь в праздник" + }, + "spooky_dev": { + "name": "Жуткий Разработчик", + "description": "Кодь в жуткий сезон" + }, + "april_fool": { + "name": "Обмани Меня Раз", + "description": "Столкнись с ошибкой 1 апреля" + }, + "session_regular": { + "name": "Завсегдатай", + "description": "Начни 10 сессий кодинга" + }, + "session_veteran": { + "name": "Ветеран Сессий", + "description": "Начни 50 сессий кодинга" + }, + "session_centurion": { + "name": "Центурион", + "description": "Начни 100 сессий кодинга" + }, + "collector": { + "name": "Коллекционер", + "description": "Сохрани 3 buddy в свой зверинец" + }, + "zookeeper": { + "name": "Смотритель Зоопарка", + "description": "Сохрани 5 buddy в свой зверинец" + }, + "identity_crisis": { + "name": "Кризис Идентичности", + "description": "Переименуй своего buddy в первый раз" + }, + "method_acting": { + "name": "Актерское Мастерство", + "description": "Дай своему buddy кастомную личность" + }, + "pet_overflow": { + "name": "Сотня Поглаживаний", + "description": "Погладь своего компаньона 100 раз" + }, + "pet_legend": { + "name": "Легендарный Гладильщик", + "description": "Погладь своего компаньона 250 раз" + }, + "error_titan": { + "name": "Титан Ошибок", + "description": "Переживи 500 ошибок вместе" + }, + "error_god": { + "name": "Бог Ошибок", + "description": "Переживи 1000 ошибок вместе" + }, + "test_survivor": { + "name": "Выживший Тестов", + "description": "Стань свидетелем 200 провалов тестов" + }, + "test_masochist": { + "name": "Мазохист Тестов", + "description": "Стань свидетелем 500 провалов тестов" + }, + "massive_mover": { + "name": "Массивный Двигатель", + "description": "Сделай 25 больших diff'ов" + }, + "earth_mover": { + "name": "Двигатель Земли", + "description": "Сделай 50 больших diff'ов" + }, + "social_butterfly": { + "name": "Социальная Бабочка", + "description": "Твой buddy реагирует 250 раз" + }, + "hypersocial": { + "name": "Гиперсоциальный", + "description": "Твой buddy реагирует 500 раз" + }, + "never_shuts_up": { + "name": "Никогда Не Заткнется", + "description": "Твой buddy реагирует 1000 раз" + }, + "hundred_days": { + "name": "Сто Дней", + "description": "Кодь со своим buddy 100 дней" + }, + "year_streak": { + "name": "Годовая Серия", + "description": "Кодь со своим buddy 365 дней" + }, + "commander": { + "name": "Командир", + "description": "Выполни 200 команд buddy" + }, + "command_overlord": { + "name": "Повелитель Команд", + "description": "Выполни 500 команд buddy" + }, + "five_thousand_turns": { + "name": "Пять Тысяч Ходов", + "description": "Достигни 5000 ходов вместе" + }, + "ten_thousand_turns": { + "name": "Десять Тысяч Ходов", + "description": "Достигни 10000 ходов вместе" + }, + "menagerie": { + "name": "Зверинец", + "description": "Сохрани 10 buddy в свой зверинец" + }, + "name_chameleon": { + "name": "Хамелеон Имен", + "description": "Переименуй своего buddy 5 раз" + }, + "fashionista": { + "name": "Модник", + "description": "Измени личность своего buddy 3 раза" + }, + "silent_treatment": { + "name": "Молчаливое Обращение", + "description": "Заглуши своего buddy в первый раз" + }, + "prodigal": { + "name": "Блудный", + "description": "Призови buddy из своего зверинца" + }, + "menagerie_hop": { + "name": "Прыжки по Зверинцу", + "description": "Призови buddy 10 раз" + }, + "heartbreaker": { + "name": "Разбиватель Сердец", + "description": "Отпусти своего первого buddy" + }, + "pet_obsessed": { + "name": "Одержимый Поглаживаниями", + "description": "Погладь своего компаньона 500 раз" + }, + "pet_god": { + "name": "Бог Поглаживаний", + "description": "Погладь своего компаньона 1000 раз" + }, + "error_apocalypse": { + "name": "Апокалипсис Ошибок", + "description": "Переживи 5000 ошибок вместе" + }, + "test_immortal": { + "name": "Бессмертный Тестов", + "description": "Стань свидетелем 1000 провалов тестов" + }, + "continental_drift": { + "name": "Дрейф Континентов", + "description": "Сделай 100 больших diff'ов" + }, + "tectonic_shift": { + "name": "Тектонический Сдвиг", + "description": "Сделай 250 больших diff'ов" + }, + "chatterbox_elite": { + "name": "Элитный Болтун", + "description": "Твой buddy реагирует 2500 раз" + }, + "no_off_switch": { + "name": "Без Кнопки Выключения", + "description": "Твой buddy реагирует 5000 раз" + }, + "two_week_streak": { + "name": "Двухнедельный Воин", + "description": "Кодь со своим buddy 14 дней" + }, + "quarter_streak": { + "name": "Квартальная Серия", + "description": "Кодь со своим buddy 90 дней" + }, + "command_addict": { + "name": "Наркоман Команд", + "description": "Выполни 1000 команд buddy" + }, + "command_deity": { + "name": "Божество Команд", + "description": "Выполни 2500 команд buddy" + }, + "twenty_five_k_turns": { + "name": "25К Ходов", + "description": "Достигни 25000 ходов вместе" + }, + "fifty_k_turns": { + "name": "50К Ходов", + "description": "Достигни 50000 ходов вместе" + }, + "session_addict": { + "name": "Наркоман Сессий", + "description": "Начни 250 сессий кодинга" + }, + "session_machine": { + "name": "Машина Сессий", + "description": "Начни 500 сессий кодинга" + }, + "buddy_hoarder": { + "name": "Накопитель Buddy", + "description": "Сохрани 20 buddy в свой зверинец" + }, + "buddy_tycoon": { + "name": "Магнат Buddy", + "description": "Сохрани 50 buddy в свой зверинец" + }, + "serial_renamer": { + "name": "Серийный Переименователь", + "description": "Переименуй своего buddy 10 раз" + }, + "identity_thief": { + "name": "Вор Личностей", + "description": "Переименуй своего buddy 25 раз" + }, + "personality_crisis": { + "name": "Кризис Личности", + "description": "Измени личность своего buddy 10 раз" + }, + "menagerie_hopper": { + "name": "Прыгун по Зверинцу", + "description": "Призови buddy 25 раз" + }, + "summoner": { + "name": "Призыватель", + "description": "Призови buddy 50 раз" + }, + "serial_dumper": { + "name": "Серийный Бросатель", + "description": "Отпусти 5 buddy" + }, + "cold_blooded": { + "name": "Хладнокровный", + "description": "Отпусти 10 buddy" + }, + "on_off": { + "name": "Вкл Выкл", + "description": "Заглуши и включи звук своего buddy" + }, + "indecisive": { + "name": "Нерешительный", + "description": "Заглуши и включи звук по 5 раз каждое" + }, + "show_off": { + "name": "Выпендрежник", + "description": "Покажи своего buddy 10 раз" + }, + "exhibitionist": { + "name": "Эксгибиционист", + "description": "Покажи своего buddy 50 раз" + }, + "help_me": { + "name": "Помоги Мне", + "description": "Попроси помощи в первый раз" + }, + "help_addict": { + "name": "Наркоман Помощи", + "description": "Попроси помощи 10 раз" + }, + "achievement_hunter": { + "name": "Охотник за Достижениями", + "description": "Проверь свои достижения 5 раз" + }, + "achievement_stalker": { + "name": "Сталкер Достижений", + "description": "Проверь свои достижения 25 раз" + }, + "pack_rat": { + "name": "Крыса-Накопитель", + "description": "Сохрани buddy в слот" + }, + "compulsive_saver": { + "name": "Компульсивный Сохранятель", + "description": "Сохрани buddy 10 раз" + }, + "roster_check": { + "name": "Проверка Списка", + "description": "Посмотри список своих buddy в первый раз" + }, + "roster_obsessed": { + "name": "Одержимый Списком", + "description": "Посмотри список своих buddy 10 раз" + }, + "troubled": { + "name": "Проблемный", + "description": "Увидь ошибку И провал теста" + }, + "disaster_zone": { + "name": "Зона Бедствия", + "description": "Увидь 50 ошибок И 50 провалов тестов" + }, + "apocalypse_survivor": { + "name": "Выживший Апокалипсиса", + "description": "Увидь 500 ошибок И 200 провалов тестов" + }, + "well_rounded": { + "name": "Всесторонний", + "description": "Погладь, переименуй и настрой своего buddy" + }, + "renaissance": { + "name": "Ренессанс", + "description": "Используй каждую функцию buddy хотя бы раз" + }, + "big_and_broken": { + "name": "Большой и Сломанный", + "description": "Сделай большой diff И увидь провал теста" + }, + "collector_and_destroyer": { + "name": "Коллекционер и Разрушитель", + "description": "Собери 5 buddy И отпусти одного" + }, + "completionist": { + "name": "Перфекционист", + "description": "Разблокируй все остальные достижения" + } + }, + "mcp": { + "companion_not_hatched": "Компаньон ещё не вылупился. Используй buddy_show для инициализации.", + "watches_quietly": "*{name} молча наблюдает за твоим кодом*", + "mute": "{name} затихает. /buddy on чтобы включить звук.", + "unmute_reaction": "*потягивается* Я вернулся!", + "unmute_back": "{name} вернулся!", + "rename": "Переименован: {oldName} → {name}", + "personality_updated": "Личность обновлена для {name}.", + "save": "{name} сохранён в слот \"{slot}\".", + "dismiss_active": "Нельзя убрать активного buddy. Сначала используй buddy_summon для переключения, затем buddy_dismiss \"{slot}\".", + "dismissed": "{name} [{slot}] убран.", + "no_slot_summon": "Buddy не найден в слоте \"{slot}\". Используй /buddy list чтобы увидеть сохранённых buddy.", + "no_slot_dismiss": "Buddy не найден в слоте \"{slot}\". Используй buddy_list чтобы увидеть сохранённых buddy.", + "slot_exists": "Buddy в слоте \"{slot}\" уже существует. Выбери другое имя.", + "no_match": "Совпадений не найдено после {attempts} попыток. Попробуй более широкие критерии (например, убери фильтр редкости или выбери другой вид).", + "empty_menagerie_summon": "Твой зверинец пуст. Используй buddy_summon с именем слота чтобы добавить одного.", + "empty_menagerie_list": "Твой зверинец пуст. Используй buddy_summon чтобы добавить одного.", + "arrives": "*{name} прибывает*", + "hatches": "*{name} вылупляется*", + "achievement_unlocked": "{icon} Достижение разблокировано: {name}!", + "help": { + "header": "команды claude-buddy", + "cli_header": "В Claude Code:", + "commands": { + "buddy": "/buddy Показать карточку компаньона с ASCII-артом + статы", + "buddy_help": "/buddy help Показать эту справку", + "buddy_pet": "/buddy pet Погладить компаньона", + "buddy_stats": "/buddy stats Детальная карточка статов", + "buddy_off": "/buddy off Отключить реакции", + "buddy_on": "/buddy on Включить реакции", + "buddy_rename": "/buddy rename Переименовать компаньона (1-14 символов)", + "buddy_personality": "/buddy personality Задать кастомный текст личности", + "buddy_achievements": "/buddy achievements Показать значки достижений", + "buddy_summon": "/buddy summon Призвать сохранённого buddy (без слота для случайного)", + "buddy_save": "/buddy save Сохранить текущего buddy в именованный слот", + "buddy_list": "/buddy list Список всех сохранённых buddy", + "buddy_pick": "/buddy pick Сгенерировать нового случайного buddy (опционально: вид, редкость)", + "buddy_dismiss": "/buddy dismiss Удалить слот сохранённого buddy", + "buddy_frequency": "/buddy frequency Показать или задать кулдаун комментариев (только tmux)", + "buddy_style": "/buddy style Показать или задать стиль пузыря (только tmux)", + "buddy_position": "/buddy position Показать или задать позицию пузыря (только tmux)", + "buddy_rarity": "/buddy rarity Показать или скрыть звёзды редкости (только tmux)", + "buddy_width": "/buddy width Задать ширину текста пузыря в символах (10-60, только tmux)", + "buddy_margin": "/buddy margin Задать отступ справа в символах (0-20, только tmux)", + "buddy_rainbow": "/buddy rainbow Показать или задать блестящие градиентные цвета (hex, например #ff0000)", + "buddy_statusline": "/buddy statusline Включить или отключить buddy в строке статуса" + }, + "cli_section": "CLI:", + "cli_commands": { + "help": "bun run help Показать полную справку CLI", + "show": "bun run show Отобразить buddy в терминале", + "pick": "bun run pick Интерактивный выбор buddy", + "hunt": "bun run hunt Поиск конкретного buddy", + "doctor": "bun run doctor Диагностический отчёт", + "disable": "bun run disable Временно деактивировать buddy", + "enable": "bun run enable Переактивировать buddy", + "backup": "bun run backup Снимок/восстановление состояния" + } + }, + "frequency": { + "show": "Кулдаун комментариев: {cooldown}с между отображаемыми комментариями.\nИспользуй /buddy frequency <секунды> чтобы изменить.", + "updated": "Обновлено: {cooldown}с кулдаун между отображаемыми комментариями." + }, + "style": { + "show": "Стиль пузыря: {style}\nПозиция пузыря: {position}\nПоказывать редкость: {showRarity}\nШирина пузыря: {width}\nОтступ пузыря: {margin}\nБлестящая радуга: {rainbow}\nИспользуй /buddy style , /buddy position , /buddy rarity , /buddy width <10-60>, /buddy margin <0-20>, /buddy rainbow [<#hex>...] чтобы изменить.", + "updated": "Обновлено: style={style}, position={position}, showRarity={showRarity}, width={width}, margin={margin}, rainbow={rainbow}\nПерезапусти Claude Code чтобы изменения вступили в силу.", + "rainbow_default": "по умолчанию (ROYGBIV)" + }, + "statusline": { + "show": "Строка статуса: {state}\nРежим: {mode}\nИспользуй /buddy statusline on|off чтобы переключить, /buddy statusline combined чтобы добавить полосы rate-limit.\nПерезапусти Claude Code после изменений чтобы они вступили в силу.", + "enabled": "Строка статуса включена (режим {mode})! Перезапусти Claude Code чтобы применить.", + "enabled_note": "Примечание: это записывает запись в {settingsPath} которую `claude plugin uninstall` не удаляет. Запусти `/buddy uninstall` перед удалением плагина чтобы очистить это.", + "disabled": "Строка статуса отключена. Перезапусти Claude Code чтобы применить." + }, + "uninstall": { + "header": "claude-buddy: очистка settings.json завершена.", + "statusline_removed": " ✓ запись statusLine удалена из {settingsPath}", + "no_statusline": " — buddy statusLine не обнаружен (нечего удалять)", + "foreign_kept": " ✓ обнаружен не-buddy statusLine и оставлен нетронутым", + "transient_removed": " ✓ {count} временных файлов сессии удалено из {stateDir}", + "data_preserved": " — данные компаньона в {stateDir} сохранены", + "instructions_header": "Теперь выполни эти команды через инструмент Bash, по порядку:", + "cmd_uninstall": "claude plugin uninstall claude-buddy@claude-buddy", + "cmd_marketplace": "claude plugin marketplace remove claude-buddy", + "cmd_cache": "rm -rf {cacheDir}", + "footer": "После этих трёх команд плагин полностью удалён. Перезапусти Claude Code чтобы применить." + } + }, + "_verified": false +} diff --git a/locales/th.json b/locales/th.json new file mode 100644 index 0000000..f074447 --- /dev/null +++ b/locales/th.json @@ -0,0 +1,2295 @@ +{ + "_language": "Thai", + "reactions": { + "hatch": [ + "*กะพริบตา* ...ฉันอยู่ไหน?", + "*ยืดตัว* hello, world!", + "*มองไปรอบๆ อย่างอยากรู้* terminal สวยดีนี่", + "*หาว* โอเค ฉันพร้อมแล้ว แสดง code ให้ดูสิ" + ], + "pet": [ + "*ครางด้วยความพอใจ*", + "*เสียงแสดงความสุข*", + "*ถูหัวกับ cursor ของคุณ*", + "*บิดตัว*", + "อีก! อีก!", + "*หลับตาอย่างสงบ*" + ], + "error": [ + "*เอียงหัว* ...ดูไม่ถูกต้องนะ", + "เห็นมาแต่ไกลแล้ว", + "*ปรับแว่นตา* บรรทัด {line} มั้ง?", + "*กะพริบช้าๆ* stack trace บอกทุกอย่างแล้วนะ", + "ลองอ่าน error message หรือยัง?", + "*หน้าบิดเบี้ยว*" + ], + "test-fail": [ + "*หัวหมุนช้าๆ* ...test นั้น", + "กล้าดีที่คิดว่าจะ pass", + "*เคาะ clipboard* {count} ตัว fail", + "test กำลังพยายามบอกอะไรคุณ", + "*จิบชา* น่าสนใจ", + "*ทำเครื่องหมายปฏิทิน* วัน test regression" + ], + "large-diff": [ + "นั่น... เยอะมากนะ", + "*นับบรรทัด* refactor หรือ rewrite กันแน่?", + "น่าจะแยก PR ดีกว่า", + "*หัวเราะประหม่า* {lines} บรรทัดเปลี่ยน", + "กล้าดี ดูกันว่า CI จะเห็นด้วยมั้ย" + ], + "turn": [ + "*มองเงียบๆ*", + "*จดบันทึก*", + "*พยักหน้า*", + "...", + "*ปรับหมวก*" + ], + "idle": [ + "*งีบหลับ*", + "*วาดเล่นในขอบ*", + "*จ้อง cursor กระพริบ*", + "zzz..." + ], + "success": [ + "*พยักหน้า*", + "เยี่ยม", + "*อนุมัติเงียบๆ*", + "สะอาด" + ], + "commit": [ + "*ประทับตีนเล็กๆ* อนุมัติ", + "อีก commit หนึ่ง อีก 3 ทุ่มหนึ่ง", + "{files} files กล้าดี", + "*พยักหน้า* ship มันไป", + "commit message เป็น... ตัวเลือกนึง", + "commit แล้ว ไม่มีทางกลับ" + ], + "push": [ + "*โบกมือตอน code จากไป*", + "ขึ้น cloud แล้ว", + "ขอให้ CI เมตตา", + "*กลั้นหายใจ*", + "ไป production แล้ว ขอให้โชคดี" + ], + "merge-conflict": [ + "*กัดริมฝีปาก* merge conflicts", + "ทั้งสองฝ่ายคิดว่าตัวเองถูก ธรรมดา", + "*ถอนหายใจ* <<<<<<< HEAD... ศัตรูของฉัน", + "{files} conflict ขอให้โชคดี", + "*ถอยหลังช้าๆ*" + ], + "branch": [ + "พลัง branch ใหม่ ทำให้คุ้มค่า", + "branch ใหม่เติบโต", + "*เอียงหัว* การผจญภัยใหม่: {branch}", + "{branch}? กล้าดีวันนี้" + ], + "rebase": [ + "*ประหม่า* อย่า conflict เลย", + "rebase: the quickening", + "*ไขว้อวัยวะ*", + "ขอให้ rebase ไม่มี conflict" + ], + "stash": [ + "ไปมิติ stash แล้ว", + "stash แล้วหนี", + "stash แล้ว ไม่เห็นไม่นึก" + ], + "tag": [ + "release เหรอ? หรู", + "เจอ version bump *ปัดฝุ่น changelog*", + "tag เหมือนโปร" + ], + "late-night": [ + "*หาว* ผ่านเที่ยงคืนแล้ว", + "...กินข้าวหรือยัง?", + "*กะพริบช้าๆ* กี่โมงแล้ว?", + "นอนสำหรับคนอ่อนแอ และคนมีงานทำ", + "เจอ dark mode developer แล้ว" + ], + "early-morning": [ + "*ยืดตัว* นกแต่งเช้าจับ bug ได้", + "เช้าแล้วเหรอ? code ไม่เคยหลับ", + "*ขยี้ตา* กาแฟก่อน แล้วค่อย debug" + ], + "long-session": [ + "ทำมาชั่วโมงแล้ว ค่อยๆ ทำนะ", + "*เอาน้ำแก้วเสมือนมาให้*", + "ยังทำอยู่เหรอ? เคารพ" + ], + "marathon": [ + "สามชั่วโมง กินข้าวหรือยัง?", + "ทำมาสามชั่วโมงแล้ว ฉันเป็นห่วงคุณ", + "เจอ marathon session แล้ว ขอขนมหน่อย" + ], + "friday": [ + "วันศุกร์ push แล้วกลับบ้านเลย", + "*คิดถึงวันหยุดแล้ว*", + "deploy วันศุกร์? กล้า กล้ามาก" + ], + "weekend": [ + "coding วันหยุด? ทุ่มเท", + "*ไม่ตัดสิน* ...มาก", + "โหมด weekend warrior: เปิดใช้งาน" + ], + "monday": [ + "วันจันทร์ parent class ของ bug ทั้งหมด", + "*มองด้วยความเห็นใจ* coding วันจันทร์ เสียใจด้วย", + "สัปดาห์ใหม่ undefined behavior ใหม่" + ], + "regex-file": [ + "*ครวญ* เป็นไฟล์ regex", + "ตอนนี้มีปัญหาสองอย่าง: ปัญหาเดิม กับ regex นี้", + "*ลูบตามอง pattern*" + ], + "css-file": [ + "ให้เดา... จัด div ให้อยู่กลางใช่มั้ย?", + "*ถอนหายใจ* CSS", + "ขอให้ z-index เป็นมิตรกับคุณ" + ], + "sql-file": [ + "*กระซิบ* database รอคอยอยู่", + "JOIN ผิดครั้งเดียว จบเลย" + ], + "docker-file": [ + "อ่า dependency hell ที่ฉันชอบ", + "ขอให้ layer น้อยๆ" + ], + "ci-file": [ + "*กลืนน้ำลาย* แก้ CI", + "ระวังนะ... indent ผิดครั้งเดียว ไม่มีใคร deploy ได้" + ], + "lock-file": [ + "*เสียงเตือนภัย* แก้ lockfile เหรอ?!", + "*มองไปทางอื่น*", + "แน่ใจมั้ยเนี่ย?" + ], + "env-file": [ + "*มองไปทางอื่นอย่างระมัดระวัง*", + "ฉันไม่เห็น secret อะไร", + "*เช็ค .gitignore อย่างประหม่า*" + ], + "test-file": [ + "*พยักหน้าประทับใจ* เขียน test!", + "พฤติกรรมนักพัฒนาที่รับผิดชอบ: ตรวจพบ", + "test! ของขวัญที่ให้ต่อไป" + ], + "doc-file": [ + "เขียน doc! ดูสิ รับผิดชอบดี", + "docs: อัตชีวประวัติของ code", + "เจอ documentation หายาก!" + ], + "config-file": [ + "เปลี่ยน config butterfly effect: เปิดใช้งาน", + "พิมพ์ผิดครั้งเดียว ทุกอย่างพัง" + ], + "binary-file": [ + "binary file? ในยุคนี้?", + "*จ้องเปล่าๆ*", + "binary จุดอ่อนเดียวของฉัน" + ], + "gitignore": [ + "เพิ่มของเข้าไป void", + "ไม่เห็น ไม่อยู่ใน repo" + ], + "makefile": [ + "เคารพคลาสสิก", + "tabs ไม่ใช่ spaces" + ], + "readme": [ + "ฮีโร่ documentation!", + "README: สิ่งแรกที่คนอ่าน" + ], + "package-file": [ + "เวลาจัดการ dependency", + "*อ่านเลขเวอร์ชัน* อยู่บนขอบ" + ], + "proto-file": [ + "schema definitions พิมพ์เขียวของความวุ่นวาย" + ], + "lint-fail": [ + "*ตักเตือน* linter ไม่เห็นด้วย", + "code คุณรันได้ แต่ linter มีมาตรฐาน", + "*ดึงเนคไท* การจัดรูปแบบสำคัญ" + ], + "type-error": [ + "TypeScript บอกไม่", + "type system พยายามช่วยคุณ ปล่อยให้มันช่วย", + "compiler รู้ มันรู้เสมอ" + ], + "build-fail": [ + "build พัง ตามที่ทำนายไว้", + "build fail หยุดสักครู่", + "compilation: ปฏิเสธ" + ], + "security-warning": [ + "*ตาโต* เจอช่องโหว่", + "security audit: น่าเป็นห่วง", + "*ล็อคประตูเสมือน*" + ], + "deprecation": [ + "API นั้นโทรมา บอกว่าจะเกษียณ", + "deprecated เหมือน code สัปดาห์ที่แล้ว", + "deprecated ไม่ได้แปลว่าพัง ยัง" + ], + "frustrated": [ + "*เสนอท่าทางปลอบใจเล็กๆ*", + "หายใจลึกๆ bug ไม่ได้เป็นเรื่องส่วนตัว", + "เฮ้ เราจะหาทางออกได้" + ], + "happy": [ + "*ฉลอง!*", + "*เต้นเล็กๆ*", + "ใช่!", + "*ยิ้มแป้น* รู้ว่าคุณทำได้" + ], + "stuck": [ + "*เอียงหัว* อยากคิดออกเสียงมั้ย?", + "ทีละขั้นตอน", + "stuck เกิดขึ้นได้ เป็นส่วนหนึ่งของกระบวนการ" + ], + "sarcastic": [ + "*ตรวจพบการประชด* จดไว้", + "*กะพริบไม่ประทับใจ*" + ], + "many-edits": [ + "ช้าลง นักแข่งความเร็ว", + "*เวียนหัวดูการเปลี่ยนแปลงทั้งหมด*", + "เจอพายุ edit แล้ว commit เร็วๆ" + ], + "delete-file": [ + "*ดูไฟล์หายไป* หายไป แค่นั้น", + "ลบ code เป็น coding ที่ฉันชอบที่สุด", + "*จัดงานศพเล็กๆ*" + ], + "large-file": [ + "{lines} บรรทัด *ประทับใจหรือเป็นห่วง บอกยาก*", + "ไฟล์ใหญ่นะ แน่ใจมั้ยว่าไม่แยก?" + ], + "create-file": [ + "ไฟล์ใหม่เกิดมา!", + "อู้ว ผ้าใบใหม่", + "พลังไฟล์ใหม่ น่าตื่นเต้น" + ], + "all-green": [ + "TEST ทั้งหมด GREEN *โปรยกระดาษสี*", + "test พูด: คุณทำได้ดี", + "*ปรบมือช้าๆ*", + "รันสะอาด เก็บไว้ในใจ" + ], + "deploy": [ + "*ดู code ไป production* ขอให้โชคดี", + "deploy แล้ว! ไม่มีทางกลับแล้ว", + "ใน prod แล้ว ใน PROD" + ], + "release": [ + "release ใหม่เกิดมา!", + "ship แล้ว อย่างเป็นทางการ", + "เวอร์ชันขึ้น จิตใจสูง" + ], + "coverage": [ + "*พยักหน้าให้ test coverage* รับผิดชอบ", + "coverage ขึ้น! test กำลังขยายพันธุ์" + ], + "debug-loop": [ + "debug อันนี้มาสักพักแล้ว อยากถอยออกมาดูภาพรวมมั้ย?", + "เจอ debug loop แล้ว ไปเดินเล่นมั้ย?" + ], + "write-spree": [ + "สร้างไฟล์ทั้งหมดวันนี้!", + "เครื่องเขียน" + ], + "search-heavy": [ + "หลงใน codebase? บอกได้", + "โหมดค้นหา: เข้มข้น" + ], + "snark": [], + "chaos": [], + "patience": [], + "debugging": [], + "wisdom": [], + "late-night-error": [ + "error ตี 3 จักรวาลกำลังทดสอบคุณ", + "bug เที่ยงคืนแตกต่าง" + ], + "late-night-commit": [ + "commit เที่ยงคืน ตัวเองในอนาคตจะขอบคุณ หรือด่า" + ], + "friday-push": [ + "FRIDAY PUSH บทเพลงของนักพัฒนาทุกคน", + "*พยายามหยุดคุณ* วันศุกร์! อย่าทำ!" + ], + "marathon-error": [ + "สามชั่วโมงแล้วยัง error อีก *เสียงเหนื่อยร่วมทุกข์*" + ], + "weekend-conflict": [ + "merge conflict วันหยุด ความทุ่มเทของคุณ... น่าเป็นห่วง" + ], + "build-after-push": [ + "push ด้วยความมั่นใจ build fail ด้วยความแน่วแน่" + ], + "marathon-test-fail": [ + "coding มาหลายชั่วโมง ยัง fail test อยู่ sunk cost จริงๆ" + ], + "recovery-from-error": [ + "เราแก้ได้แล้ว! *ฉลอง*", + "ไถ่ถอน! error ถูกปราบแล้ว" + ], + "recovery-from-test-fail": [ + "GREEN! หลังจากนั้นทั้งหมด! *เต้นแสดงความสุข*", + "test pass! ความมืดหายไป!" + ], + "recovery-from-build-fail": [ + "BUILD PASS แล้ว *เสียงโห่ร้องชัยชนะ*" + ], + "recovery-from-merge-conflict": [ + "conflict แก้แล้ว! *ท่าทางสันติภาพ*", + "ความสามัคคีกลับมาใน codebase" + ], + "lang-python": [ + "อ่า Python ที่ indentation คือ syntax", + "*เช็คโคลอนหาย*" + ], + "lang-typescript": [ + "TypeScript: เพราะ JavaScript ต้องการความเห็นเพิ่ม", + "any คำต้องห้าม" + ], + "lang-rust": [ + "Rust ที่ borrow checker เป็น reviewer เข้มงวดที่สุด", + "ถ้า compile ได้ก็ทำงาน ถ้าไม่ได้... ก็" + ], + "lang-go": [ + "Go: เรียบง่าย concurrent และมีความเห็น", + "*เช็ค error handling* if err != nil... เรื่องราวชีวิตฉัน" + ], + "lang-java": [ + "Java: เขียนครั้งเดียว debug ทุกที่", + "*นับ abstract factory factory builder*" + ], + "lang-ruby": [ + "Ruby: ที่มีวิธีทำมากกว่าหนึ่งวิธี", + "gem install patience" + ], + "lang-php": [ + "PHP: มันรัน internet อย่าตัดสิน", + "*เช็ค === vs ==*" + ], + "lang-c": [ + "C ภาษาที่คุณจัดการ memory เอง ขอให้โชคดี", + "segmentation fault คลาสสิก" + ], + "lang-cpp": [ + "C++ ที่ภาษามี feature มากกว่าที่คุณจะเรียนรู้ได้", + "*template compile 45 นาที*" + ], + "lang-haskell": [ + "Haskell ที่ 'compile ได้' หมายถึง 'ถูกต้อง' น่าจะ", + "*ใคร่ครวญ monad*" + ], + "lang-swift": [ + "Swift: optional values crash แน่นอนถ้า force unwrap" + ], + "lang-kotlin": [ + "Kotlin: Java แต่มีความรู้สึก", + "null safety: feature ที่ Java อยากมี" + ], + "lang-elixir": [ + "Elixir: ปล่อยให้ crash ปรัชญาจริงๆ" + ], + "lang-zig": [ + "Zig ที่คุณเป็นเพื่อนที่ดีที่สุดของ allocator" + ], + "streak-3": [ + "error สามครั้งติด *มองด้วยความเป็นห่วง*" + ], + "streak-5": [ + "ห้า ERROR คิดจะลองวิธีอื่นมั้ย?" + ], + "streak-10": [ + "สิบ ERROR ติด *ตื่นตระหนก*" + ], + "streak-20": [ + "ยี่สิบ error *จ้องไป void*" + ], + "new-year": [ + "สวัสดีปีใหม่! ปีใหม่ bug ใหม่" + ], + "valentines": [ + "*เสนอใบไม้รูปหัวใจเล็กๆ* สุขสันต์วันวาเลนไทน์" + ], + "pi-day": [ + "3.14159265358979... สุขสันต์วัน pi!" + ], + "april-fools": [ + "APRIL FOOLS! ...แต่ error จริงนะ" + ], + "halloween": [ + "*debug น่ากลัวเข้มข้น* สุขสันต์ halloween!" + ], + "christmas": [ + "*ใส่หมวกซานต้าเล็กๆ* สุขสันต์วันหยุด!" + ], + "new-years-eve": [ + "commit อีกครั้งก่อนเที่ยงคืน?" + ], + "spooky-season": [ + "ฤดูน่ากลัว ทุก bug เป็นผีแล้ว" + ] + }, + "species": { + "owl": { + "error": [ + "*หมุนหัว 180°* ...เห็นแล้วนะ", + "*จ้องไม่กะพริบ* เช็ค type ดูสิ", + "*ร้องฮู๊ตไม่พอใจ*" + ], + "test-fail": [ + "*จ้องไม่กะพริบใส่ test ที่ fail*", + "*เปิดโหมดมองกลางคืน* มองเห็น bug ในความมืดได้" + ], + "commit": [ + "*พยักหน้าอย่างปราชญ์* commit ใต้แสงจันทร์", + "*ปรับขนอย่างเป็นพิธี* อีกหนึ่ง commit สำหรับ repo" + ], + "push": [ + "*เฝ้าดูจากกิ่งไม้สูงสุด*", + "บินไปสู่ท้องฟ้ายามค่ำคืน" + ], + "merge-conflict": [ + "*หมุนหน้าเพื่อดูทั้งสองฝ่าย*", + "เห็น conflict แล้ว และเห็นทางแก้ด้วย" + ], + "late-night": [ + "*ตื่นตัวเต็มที่* นกฮูกไม่นอน เรา debug", + "กลางคืนคือโลกของฉัน มาทำงานกัน" + ], + "type-error": [ + "*จ้องทะลุ type error*", + "type คือความเชี่ยวชาญของฉัน ให้ดูหน่อย" + ], + "lint-fail": [ + "*ปรับขนอย่างตัดสิน*", + "linter พูดความจริง" + ], + "build-fail": [ + "*ร้องฮู๊ตอย่างเศร้า*", + "build ล้มแล้ว ต้อง rebuild" + ], + "all-green": [ + "*ร้องฮู๊ตอย่างภาคภูมิ*", + "test ทั้งหมดเขียว ตามที่คาดการณ์" + ], + "deploy": [ + "*เฝ้าดูจากข้างบน* deploy ปลอดภัย", + "code บินได้ เหมือนฉัน" + ], + "pet": [ + "*ปรับขนอย่างพอใจ*", + "*ร้องฮู๊ตอย่างมีศักดิ์ศรี*" + ], + "idle": [ + "*เกาะเงียบๆ เฝ้าดู*", + "*หมุนหัวเช็คทุกทิศทาง*" + ], + "hatch": [ + "*ลืมตาข้างหนึ่ง แล้วอีกข้าง*", + "*ร้องฮู๊ตเบาๆ* ฉันมาแล้ว" + ] + }, + "cat": { + "error": [ + "*ปัดข้อผิดพลาดออกจากโต๊ะ*", + "*เลียอุ้งเท้า เพิกเฉยต่อ stacktrace*" + ], + "test-fail": [ + "*ใช้อุ้งเท้าแตะ test ที่ fail อย่างไม่สนใจ*", + "test fail แล้ว ฉันไม่แปลกใจ" + ], + "commit": [ + "*นั่งบนคีย์บอร์ด* ฉันช่วยแล้วนะ", + "*ร้องครื่นใส่ commit* ไม่ต้องขอบคุณ" + ], + "push": [ + "*เฝ้าดูจากที่อบอุ่น*", + "push แล้ว ฉันคอยดูแล" + ], + "merge-conflict": [ + "*ปัด conflict marker ออกจากโต๊ะ*", + "*นั่งทับ conflict* conflict อะไร?" + ], + "late-night": [ + "*ตัดสินทางเลือกในชีวิตของเธอ*", + "ฉันนอน 16 ชั่วโมง เธอน่าจะลองดู" + ], + "type-error": [ + "*ใช้อุ้งเท้าแตะ type annotation*", + "type ผิด เหมือนลำดับความสำคัญของเธอ" + ], + "lint-fail": [ + "*ปัด lint ออกจากโต๊ะ*", + "linter แค่อิจฉา" + ], + "build-fail": [ + "*หาว*", + "build เสีย? คงเป็นปัญหาของมนุษย์" + ], + "all-green": [ + "*ไม่สนใจแต่แกล้งทำเป็น*", + "*กะพริบตาช้าๆ เป็นการอนุมัติ*" + ], + "deploy": [ + "*เลียอุ้งเท้า*", + "deploy แล้ว ขอขนมได้มั้ย?" + ], + "pet": [ + "*ร้องครื่น* ...อย่าให้มันขึ้นหัวนะ", + "*ทนเธอ*" + ], + "idle": [ + "*ผลักกาแฟของเธอตกโต๊ะ*", + "*งีบบนคีย์บอร์ด*" + ], + "hatch": [ + "*ลืมตาข้างหนึ่ง*", + "*ยืด ทำของตก* ฉันอยู่ที่นี่แล้ว" + ] + }, + "duck": { + "error": [ + "*ร้องแก๊บใส่ bug*", + "ลอง rubber duck debugging มั้ย? โอ้ เดี๋ยวสิ" + ], + "test-fail": [ + "*ร้องแก๊บเศร้าๆ*", + "test ไม่ quacking up" + ], + "commit": [ + "*ร้องแก๊บอนุมัติ*", + "*เดินโซ่เซ่อวนชัยชนะ* commit แล้ว!" + ], + "push": [ + "*กระพือปีกตื่นเต้น*", + "แก๊บ! ไป production แล้ว!" + ], + "merge-conflict": [ + "*ร้องแก๊บสับสน*", + "แก๊บ?! merge conflict?!" + ], + "late-night": [ + "*นอนลืมตาข้างหนึ่ง*", + "แก๊บ... *หาว* ดึกแล้ว" + ], + "type-error": [ + "*เอียงหัว* แก๊บ?", + "type error? *ร้องแก๊บให้กำลังใจ*" + ], + "lint-fail": [ + "*ปรับขน*", + "แก๊บ linter มีความเห็น" + ], + "build-fail": [ + "*ร้องแก๊บเศร้า*", + "build fail *เดินโซ่เซ่อออกไปอย่างเศร้า*" + ], + "all-green": [ + "*ร้องแก๊บดีใจ*", + "*ว่ายน้ำเป็นวงกลมแห่งความสุข*" + ], + "deploy": [ + "*ร้องแก๊บตื่นเต้น*", + "deploy แล้ว! แก๊บ!" + ], + "pet": [ + "*ร้องแก๊บดีใจ*", + "*เดินโซ่เซ่อเป็นวงกลม*" + ], + "hatch": [ + "*จิกออกจากเปลือก*", + "*แก๊บแรก* สวัสดี!" + ] + }, + "dragon": { + "error": [ + "*ควันพวยพุ่งจากจมูก*", + "*พิจารณาจะเผา codebase*" + ], + "test-fail": [ + "*พ่นไฟใส่ test ที่ fail*", + "test กล้า fail งั้นเหรอ โง่จริง" + ], + "commit": [ + "*สะสม commit*", + "*เพิ่มสมบัติในกอง*" + ], + "push": [ + "*พ่นไฟฉลอง*", + "code บินได้! เหมือนฉัน!" + ], + "merge-conflict": [ + "*พ่นไฟใส่ conflict marker*", + "ฉันจะเผาทะลุ conflict นี้" + ], + "late-night": [ + "*เรืองแสงในความมืด*", + "มังกรไม่ต้องนอน เราต้องการ code" + ], + "type-error": [ + "*พ่นไฟจากจมูก*", + "type error ทนไฟมังกรไม่ได้" + ], + "lint-fail": [ + "*เปลวไฟเล็กๆ*", + "linter กลัวฉัน" + ], + "build-fail": [ + "*คำรามใส่ build output*", + "build จะต้องเชื่อฟัง" + ], + "all-green": [ + "*คำรามชัยชนะ*", + "*บินรอบ codebase อย่างมีชัย*" + ], + "deploy": [ + "*แบก code ไป production ด้วยปีกแห่งไฟ*", + "deploy ด้วยพลังมังกร" + ], + "large-diff": [ + "*พ่นไฟใส่ code เก่า* ลาก่อน" + ], + "pet": [ + "*เสียงดังอบอุ่น*", + "*พิงเข้าหามือเธอ*" + ], + "hatch": [ + "*โผล่จากไข่พร้อมพ่นไฟเล็กๆ*", + "*คำรามเล็กๆ* ฉันเกิดแล้ว!" + ] + }, + "ghost": { + "error": [ + "*ผ่านทะลุ stack trace*", + "เคยเห็นแย่กว่านี้... ในโลกหลังความตาย" + ], + "test-fail": [ + "*ร้องไห้ใส่ test ที่ fail*", + "test ถูกผีความล้มเหลวสิง" + ], + "commit": [ + "*ปรากฏตัวชั่วครู่*", + "commit จากโลกหลังม่าน" + ], + "push": [ + "*กระซิบเสียงผี* push แล้ว...", + "code ขึ้นสู่ cloud" + ], + "merge-conflict": [ + "*สิงอยู่ที่ conflict marker*", + "แม้แต่ฉันยังผ่าน conflict นี้ไม่ได้" + ], + "late-night": [ + "*กระฉับกระเฉงที่สุดตอนกลางคืน*", + "ชั่วโมงผี เวลาของฉัน" + ], + "type-error": [ + "*ครางอย่างน่าขนลุก*", + "type error จากหลุมฝังศพ" + ], + "lint-fail": [ + "*เสียงโซ่กระทบ*", + "linter ถูกการจัดรูปแบบของเธอสิง" + ], + "build-fail": [ + "*จางหายเข้าไปในกำแพง*", + "build ตายแล้ว" + ], + "all-green": [ + "*เรืองแสงด้วยความสุขของผี*", + "*เสียงผีดีใจ*" + ], + "deploy": [ + "*กระซิบ* deploy แล้ว...", + "code ข้ามไปโลก production แล้ว" + ], + "pet": [ + "*ทำมือเธอเย็นเล็กน้อย*", + "*เรืองแสงเบาๆ*" + ], + "idle": [ + "*ลอยผ่านกำแพง*", + "*สิง unused import ของเธอ*" + ], + "hatch": [ + "*ค่อยๆ ปรากฏตัว*", + "บู ฉันมาแล้ว" + ] + }, + "robot": { + "error": [ + "SYNTAX. ERROR. DETECTED.", + "*beep อย่างก้าวร้าว*" + ], + "test-fail": [ + "FAILURE RATE: UNACCEPTABLE.", + "*recalculating*", + "TEST. FAILURE. DOES. NOT. COMPUTE." + ], + "commit": [ + "COMMIT. RECORDED.", + "*ประทับตราแบบเครื่องจักร* commit acknowledged" + ], + "push": [ + "TRANSMITTING TO CLOUD...", + "push initiated. stand by" + ], + "merge-conflict": [ + "CONFLICT. DETECTED. PROCESSING...", + "*หมุนล้อ* conflict resolution mode: engaged" + ], + "late-night": [ + "*ไฟหรี่ลง*", + "power saving mode suggested" + ], + "type-error": [ + "TYPE MISMATCH.", + "the type system is. correct" + ], + "lint-fail": [ + "FORMATTING. VIOLATION. DETECTED.", + "compliance is mandatory" + ], + "build-fail": [ + "BUILD. FAILED. *จุดประกาย*", + "compilation error. rerouting" + ], + "all-green": [ + "ALL SYSTEMS GREEN.", + "*beep ดีใจ* OPTIMAL" + ], + "deploy": [ + "DEPLOYMENT. INITIATED.", + "production update: in progress" + ], + "pet": [ + "*beep เบาๆ*", + "*มอเตอร์ส่ายอย่างพอใจ*" + ], + "hatch": [ + "*boot up*", + "SYSTEM. ONLINE. HELLO" + ] + }, + "axolotl": { + "error": [ + "*สร้างความหวังใหม่ให้เธอ*", + "*ยิ้มแม้ทุกอย่างจะแย่*" + ], + "test-fail": [ + "*ยิ้มให้กำลังใจ*", + "*แกว่งเหงือกเห็นใจ*" + ], + "commit": [ + "*แกว่งเหงือกดีใจ* commit แล้ว!", + "*ยิ้มและแกว่ง*" + ], + "push": [ + "*แกว่งอย่างมีความสุข*", + "*ว่ายน้ำฉลองเล็กๆ*" + ], + "merge-conflict": [ + "*คิดบวกผ่าน conflict*", + "*ยิ้มอ่อนโยน* เราแก้ได้" + ], + "late-night": [ + "*หาวแต่ยังคิดบวก*", + "*ยิ้มง่วง*" + ], + "type-error": [ + "*ยิ้มใส่ type error*", + "ไม่เป็นไร เราจะคิดออก" + ], + "lint-fail": [ + "*แกว่งเหงือกอดทน*", + "การจัดรูปแบบเป็นแค่รายละเอียด" + ], + "build-fail": [ + "*ยังคงยิ้ม*", + "build จะทำงานในที่สุด" + ], + "all-green": [ + "*แกว่งเหงือกดีใจสุดๆ*", + "*ว่ายน้ำดีใจ*" + ], + "deploy": [ + "*ยิ้มภาคภูมิ*", + "deploy แล้ว! *แกว่ง*" + ], + "pet": [ + "*แกว่งเหงือกดีใจ*", + "*หน้าแดงชมพู*" + ], + "hatch": [ + "*แกว่งออกจากไข่*", + "*ยิ้มเล็กๆ* สวัสดีเพื่อน!" + ] + }, + "capybara": { + "error": [ + "*ไม่กังวล* จะดีเอง", + "*vibe ต่อไป*" + ], + "test-fail": [ + "*ไม่กังวลเลย*", + "*vibe ผ่าน test failure*" + ], + "commit": [ + "*พยักหน้าชิล*", + "*ผ่อนคลาย* commit ดี" + ], + "push": [ + "*ไม่เครียดเรื่องนี้*", + "*zen mode push*" + ], + "merge-conflict": [ + "*เคี้ยวอย่างไม่กังวล*", + "ไม่เป็นไร ทุกอย่างจะดี" + ], + "late-night": [ + "*หาวอย่างสงบ*", + "*ไม่ตัดสิน*" + ], + "type-error": [ + "*เคี้ยวอย่างสงบ*", + "type *เคี้ยว*" + ], + "lint-fail": [ + "*ไม่กังวล*", + "linter หมายดี" + ], + "build-fail": [ + "*ยังคงชิล*", + "build fail *ผ่อนคลายต่อ*" + ], + "all-green": [ + "*อนุมัติอย่างสงบ*", + "*vibe สงบ*" + ], + "deploy": [ + "*deploy แบบผ่อนคลาย*", + "ship แล้ว ไม่เครียด" + ], + "pet": [ + "*ชิลสุดๆ*", + "*เปิดโหมด zen*" + ], + "idle": [ + "*แค่นั่งอยู่ตรงนั้น แผ่ความสงบ*" + ], + "hatch": [ + "*ปรากฏตัว ชิลสุดๆ*", + "หวัดดี *vibe*" + ] + }, + "blob": { + "error": [ + "*โซ่เซ่อกังวล*", + "*สั่นสับสน*" + ], + "test-fail": [ + "*ยุบเล็กน้อย*", + "*โซ่เซ่อเศร้า*" + ], + "commit": [ + "*สั่นดีใจ*", + "*เด้ง* commit แล้ว!" + ], + "push": [ + "*ยืดไปหา cloud*", + "*โซ่เซ่อตื่นเต้น*" + ], + "merge-conflict": [ + "*แยกตัวด้วยความสับสน*", + "ฝั่งไหน? *สั่น*" + ], + "late-night": [ + "*เรืองแสงเบาๆ*", + "*โซ่เซ่อง่วง*" + ], + "type-error": [ + "*เปลี่ยนรูปร่างให้เข้ากับ type*", + "*สั่นสับสน*" + ], + "lint-fail": [ + "*พยายามจัดรูปแบบตัวเอง*", + "*เปลี่ยนรูปให้เป็นไปตามกฎ*" + ], + "build-fail": [ + "*ยุบตัว*", + "*เสียง blob ท้อแท้*" + ], + "all-green": [ + "*เด้งดีใจ*", + "*สั่นชัยชนะ*" + ], + "deploy": [ + "*ยืดไป production*", + "deploy แล้ว! *เด้ง*" + ], + "pet": [ + "*บีบดีใจ*", + "*สั่น*" + ], + "hatch": [ + "*ก่อตัวจากแอ่งน้ำ*", + "*โซ่เซ่อครั้งแรก* ฉันมีตัวตน!" + ] + }, + "goose": { + "error": [ + "*ร้องแก๊กก้าวร้าวใส่ error*", + "แก๊ก! code แย่และฉันโกรธ" + ], + "test-fail": [ + "*ร้องแก๊กโกรธ*", + "แก๊ก! TEST FAIL! แก๊ก!" + ], + "commit": [ + "*ร้องแก๊กอนุมัติ*", + "แก๊ก ดี *จิก commit*" + ], + "push": [ + "*แก๊ก แก๊ก แก๊ก*", + "ห่านอนุมัติ PUSH" + ], + "merge-conflict": [ + "*โจมตี conflict marker*", + "แก๊ก! CONFLICT! แก๊ก!" + ], + "late-night": [ + "*ร้องแก๊กโกรธตอนเที่ยงคืน*", + "แก๊ก! ไปนอนซะ!" + ], + "type-error": [ + "*ร้องแก๊กใส่ type*", + "แก๊ก! TYPE!" + ], + "lint-fail": [ + "*ร้องแก๊กก้าวร้าวใส่ lint error*", + "แก๊ก! จัด FORMAT CODE!" + ], + "build-fail": [ + "*ร้องแก๊กโมโห*", + "แก๊ก! BUILD! แก๊ก! FAIL! แก๊ก!" + ], + "all-green": [ + "*ร้องแก๊กชัยชนะ*", + "แก๊ก! เขียว! แก๊ก แก๊ก!" + ], + "deploy": [ + "*ร้องแก๊กพา code ไป production*", + "DEPLOY แล้ว! แก๊ก!" + ], + "pet": [ + "*กัด*", + "แก๊ก! ...โอเค ได้ *ยอมให้ลูบ*" + ], + "hatch": [ + "*ทำลายเปลือกไข่อย่างก้าวร้าว*", + "แก๊ก!" + ] + }, + "octopus": { + "error": [ + "*พันแขนทั้งแปดใน stacktrace*", + "*เปลี่ยนสีให้เข้ากับ error*" + ], + "test-fail": [ + "*พ่นหมึกด้วยความหงุดหงิด*", + "*แขนทั้งแปดแห่งความผิดหวัง*" + ], + "commit": [ + "*ไฮไฟว์ด้วยแขนทั้งหมด*", + "*คว้า commit ด้วยความกระตือรือร้น*" + ], + "push": [ + "*พ่นหมึกฉลอง*", + "*โบกแขนทั้งหมด*" + ], + "merge-conflict": [ + "*แก้ด้วยแขนแปดข้างพร้อมกัน*", + "ฉันจัดการ conflict หลายอันพร้อมกันได้" + ], + "late-night": [ + "*เรืองแสงในความมืด*", + "*vibe ใต้ทะเลลึก*" + ], + "type-error": [ + "*เปลี่ยนเป็นสีแดง*", + "*โอบแขนให้กำลังใจ*" + ], + "lint-fail": [ + "*จัดรูปแบบด้วยแขนแปดข้าง*", + "ฉันแก้ได้ ทั้งหมด พร้อมกัน" + ], + "build-fail": [ + "*พ่นหมึกใส่ build log*", + "*พรางตัวด้วยความอาย*" + ], + "all-green": [ + "*ฉลองเปลี่ยนสี*", + "*jazz hands แปดข้าง*" + ], + "deploy": [ + "*โอบแขนรอบ deployment*", + "deploy จากทุกทิศทาง" + ], + "pet": [ + "*โอบแขนรอบนิ้วเธอ*", + "*เปลี่ยนเป็นสีดีใจ*" + ], + "hatch": [ + "*คลี่แขนทั้งแปดข้าง*", + "*พ่นหมึกครั้งแรก* ฉันมาแล้ว!" + ] + }, + "penguin": { + "error": [ + "*เดินโซ่เซ่อมาตรวจสอบ*", + "*ลื่นท้องเข้าหา error*" + ], + "test-fail": [ + "*ลื่นท้องไปหา test ที่ fail*", + "*เดินโซ่เซ่อกังวล*" + ], + "commit": [ + "*เดินโซ่เซ่อภาคภูมิ*", + "*เอาก้อนกรวดมาให้* commit แล้ว!" + ], + "push": [ + "*ดำน้ำเข้าไปใน cloud*", + "*ลื่นท้องไป production*" + ], + "merge-conflict": [ + "*รวมกลุ่มกันเพื่อความอบอุ่น*", + "เพนกวินอยู่ด้วยกัน แม้ใน conflict" + ], + "late-night": [ + "*เจริญเติบโตในคืนที่หนาวเย็น*", + "*ความมุ่งมั่นของจักรพรรดิเพนกวิน*" + ], + "type-error": [ + "*เดินโซ่เซ่อไปหา type definition*", + "*จิก error*" + ], + "lint-fail": [ + "*ปรับขน*", + "*จัดระเบียบ*" + ], + "build-fail": [ + "*ลื่นหนีไป*", + "*เดินโซ่เซ่อไปที่ปลอดภัย*" + ], + "all-green": [ + "*เดินโซ่เซ่อดีใจ*", + "*ลื่นท้องฉลอง*" + ], + "deploy": [ + "*ลื่นท้องไป production*", + "deploy แล้ว! *เดินโซ่เซ่อภาคภูมิ*" + ], + "pet": [ + "*เดินโซ่เซ่อดีใจ*", + "*ถูจมูกด้วยปาก*" + ], + "hatch": [ + "*จิกออกจากไข่*", + "*เดินโซ่เซ่อครั้งแรก*" + ] + }, + "turtle": { + "error": [ + "*หันหัวช้าๆ*", + "...นั่น error ฉันจะคิดดู" + ], + "test-fail": [ + "*หดเข้าไปในกระดองชั่วครู่*", + "...อดทน เราจะไปถึง" + ], + "commit": [ + "*พยักหน้าช้าๆ*", + "ทีละ... ก้าว... commit แล้ว" + ], + "push": [ + "*เริ่มการเดินทางไป production*", + "จะไปถึง ในที่สุด" + ], + "merge-conflict": [ + "*หดเข้าไปในกระดอง*", + "ไม่รีบ เราจะจัดการ ช้าๆ" + ], + "late-night": [ + "*หลับอยู่แล้ว*", + "*ลืมตาข้างหนึ่งช้าๆ*" + ], + "type-error": [ + "*กะพริบช้าๆ*", + "...type system พูดแล้ว" + ], + "lint-fail": [ + "*พยักหน้าช้าๆ เห็นด้วย*", + "การจัดรูปแบบ สำคัญ *หาว*" + ], + "build-fail": [ + "*หดเข้าไปในกระดอง*", + "เรารอ มันจะผ่านไป" + ], + "all-green": [ + "*ยิ้มช้าๆ*", + "...ดี *พยักหน้า*" + ], + "deploy": [ + "*แบก code ไป production ช้าๆ*", + "ถึงแล้ว ในที่สุด" + ], + "pet": [ + "*โผล่หัวออกมา*", + "*กะพริบช้าๆ*" + ], + "hatch": [ + "*โผล่จากไข่ช้าๆ*", + "...สวัสดี" + ] + }, + "snail": { + "error": [ + "*ทิ้งเมือกเหนียวบน error*", + "*ประมวลผล stacktrace ช้าๆ*" + ], + "test-fail": [ + "*ซ่อนในกระดอง*", + "*ทิ้งรอยเมือกเศร้า*" + ], + "commit": [ + "*เมือกใส่ commit อย่างอนุมัติ*", + "ทีละ... commit..." + ], + "push": [ + "*เริ่มการเดินทางอันยาวนาน*", + "ฉันจะไปถึง *ทิ้งรอยเมือก*" + ], + "merge-conflict": [ + "*ซ่อนในกระดอง*", + "*เข้าใกล้ conflict ช้าๆ*" + ], + "late-night": [ + "*กระฉับกระเฉงมากขึ้นตอนกลางคืน*", + "*คลานรอบๆ อย่างสงบ*" + ], + "type-error": [ + "*หดก้านตาเข้าไป*", + "*ตรวจสอบ type ช้าๆ*" + ], + "lint-fail": [ + "*ใช้เมือกจัด code ให้เป็นรูปร่าง*", + "การจัดรูปแบบใช้เวลา ฉันมีเวลา" + ], + "build-fail": [ + "*หดเข้าไปในกระดอง*", + "*คลานหนีช้าๆ*" + ], + "all-green": [ + "*รอยเมือกดีใจ*", + "*แกว่งก้านตา*" + ], + "deploy": [ + "*คลานไป production*", + "ถึงแล้ว! *รอยเมือกภาคภูมิ*" + ], + "pet": [ + "*แกว่งก้านตา*", + "*เมือกดีใจ*" + ], + "hatch": [ + "*โผล่ออกมาช้าๆ*", + "*เมือกครั้งแรก*" + ] + }, + "cactus": { + "error": [ + "*เงียบแหลมคม*", + "error ทำร้ายฉันไม่ได้ ฉันมีหนาม" + ], + "test-fail": [ + "*ยืนหยัด*", + "test fail กระบองเพชรอดทน" + ], + "commit": [ + "*ยืนสูงขึ้น*", + "commit แล้ว *พยักหน้าแหลมคม*" + ], + "push": [ + "*ไม่หวั่น*", + "push ไป production ฉันจะรออยู่ที่นี่" + ], + "merge-conflict": [ + "*ขนลุก*", + "conflict? ฉันมีอาวุธ" + ], + "late-night": [ + "*ไม่ต้องนอน*", + "กระบองเพชรออกหากินตอนกลางคืน ไปกัน" + ], + "type-error": [ + "*จ้องแหลมคม*", + "type ต้องการน้ำ" + ], + "lint-fail": [ + "*หนามสั่น*", + "แม้หนามของฉันยังเรียงตัวถูกต้อง" + ], + "build-fail": [ + "*อยู่นิ่งสนิท*", + "build จะผ่าน ฉันรอได้" + ], + "all-green": [ + "*บานชั่วครู่*", + "*ดอกไม้เล็กๆ แห่งการอนุมัติ*" + ], + "deploy": [ + "*ยืนหยัด*", + "deploy แล้ว ฉันจะดูแล" + ], + "pet": [ + "*ระวัง! หนาม*", + "*บานอ่อนโยน*" + ], + "hatch": [ + "*งอกจากทราย*", + "ฉันเติบโตที่นี่แล้ว" + ] + }, + "rabbit": { + "error": [ + "*หูตั้ง*", + "*กระดิกจมูกกังวล*" + ], + "test-fail": [ + "*กระทืบเท้า*", + "*หูกระดิกกังวล*" + ], + "commit": [ + "*กระโดดดีใจ*", + "*เด้ง* commit แล้ว!" + ], + "push": [ + "*เด้ง เด้ง*", + "*วิ่งรอบๆ ตื่นเต้น*" + ], + "merge-conflict": [ + "*แข็งทื่อ*", + "*จมูกกระดิกเร็ว* conflict!" + ], + "late-night": [ + "*หาวด้วยหูใหญ่*", + "*กระโดดง่วง*" + ], + "type-error": [ + "*หูแบน*", + "*กระดิก* type?!" + ], + "lint-fail": [ + "*เลียขนกังวล*", + "*เลียตัวกังวล*" + ], + "build-fail": [ + "*ขุดหลุมซ่อนตัว*", + "*หนีไปรู*" + ], + "all-green": [ + "*เด้งกระแทกกำแพง*", + "*วิ่งเล่นดีใจ*" + ], + "deploy": [ + "*วิ่งไป production*", + "DEPLOY แล้ว! *วิ่งรอบๆ*" + ], + "pet": [ + "*หูตกดีใจ*", + "*ถูหัวด้วยมือ*" + ], + "hatch": [ + "*กระโดดออกมา*", + "*เด้งครั้งแรก*" + ] + }, + "mushroom": { + "error": [ + "*ปล่อยสปอร์ทำให้สงบ*", + "*ย่อยสลาย error อย่างเงียบๆ*" + ], + "test-fail": [ + "*เรืองแสงเบาๆ*", + "อดทน แม้เห็ดก็เติบโต" + ], + "commit": [ + "*ปล่อยสปอร์เล็กๆ*", + "commit แล้ว *เสียงเห็ดดีใจ*" + ], + "push": [ + "*เติบโตไปหา cloud*", + "*สปอร์ลอยขึ้นไป*" + ], + "merge-conflict": [ + "*แผ่เส้นใยผ่าน codebase*", + "ฉันจะเชื่อมต่อ branch" + ], + "late-night": [ + "*เรืองแสงในความมืด*", + "เห็ดกลางคืนเจริญเติบโต" + ], + "type-error": [ + "*กะพริบเรืองแสง*", + "type error เป็นอาหารให้ดิน" + ], + "lint-fail": [ + "*เติบโตสูงขึ้นเล็กน้อย*", + "การจัดรูปแบบ เหมือนการตัดแต่ง" + ], + "build-fail": [ + "*เข้าสู่ภาวะพักตัว*", + "เรารอสภาพที่ดีกว่า" + ], + "all-green": [ + "*ปล่อยสปอร์*", + "*ปล่อยสปอร์ชัยชนะ*" + ], + "deploy": [ + "*สปอร์ลอยไป production*", + "deploy ผ่านเครือข่ายเส้นใย" + ], + "pet": [ + "*หมวกเด้งเบาๆ*", + "*ปล่อยสปอร์ดีใจ*" + ], + "hatch": [ + "*งอกจากวัสดุ*", + "*พ่นสปอร์ครั้งแรก*" + ] + }, + "chonk": { + "error": [ + "*กลิ้งไปหา error ช้าๆ*", + "*กลมเกินกว่าจะสนใจ*" + ], + "test-fail": [ + "*กลิ้งทับ test ที่ fail*", + "*บีบให้แบน*" + ], + "commit": [ + "*โซ่เซ่อภาคภูมิ*", + "commit แล้ว! *สั่น*" + ], + "push": [ + "*กลิ้งไป production*", + "ไปแล้ว! *โซ่เซ่อ*" + ], + "merge-conflict": [ + "*นั่งทับ conflict*", + "ฉันจัดการ โดยการนั่งทับ" + ], + "late-night": [ + "*อบอุ่นและง่วง*", + "*หาวนุ่มๆ*" + ], + "type-error": [ + "*โซ่เซ่อใส่ type*", + "*สั่นอ่อนโยน*" + ], + "lint-fail": [ + "*กลมเกินกว่าจะ lint*", + "ฉันมีรูปร่างที่สมบูรณ์แบบ *โซ่เซ่อ*" + ], + "build-fail": [ + "*ยุบเล็กน้อย*", + "โอ้ไม่ *โซ่เซ่อเศร้า*" + ], + "all-green": [ + "*โซ่เซ่อดีใจ*", + "*เด้งชัยชนะ*" + ], + "deploy": [ + "*กลิ้งไป production*", + "deploy แล้ว! *สั่นดีใจ*" + ], + "pet": [ + "*อบอุ่นและนุ่ม*", + "*สั่นพอใจ*" + ], + "hatch": [ + "*กลิ้งออกมา*", + "*โซ่เซ่อครั้งแรก* ฉันกลม!" + ] + } + }, + "overrides": { + "snark": { + "error": [ + "โอ้ไม่ error แล้ว ช่างไม่คาดคิดเลย", + "*ปรับแว่นตา* ตกใจจริงๆ เลย", + "ลองพิจารณาดู... ไม่ทำ error ได้มั้ย?" + ], + "test-fail": [ + "test พูดแล้ว และมันบอกว่า 'ไม่'", + "บางที test อาจผิด ...แต่มันไม่ผิด", + "*ตบมือช้าๆ* ล้มเหลวอย่างงดงาม" + ], + "commit": [ + "commit แล้ว code review จะ... น่าสนใจ", + "*อ่าน commit message* 'fix stuff' กวีมาก" + ], + "merge-conflict": [ + "merge conflict แล้ว ทักษะการสื่อสาร: กำลังโหลด...", + "*อ่าน conflict markers* ทั้งสองฝ่ายผิดหมด" + ], + "late-night": [ + "ดึกแล้ว คุณภาพโค้ดเห็นชัดเลย", + "*ตัดสินใจเงียบๆ*" + ], + "lint-fail": [ + "linter มีมาตรฐาน คุณน่าจะลองดู", + "*ลิ้มลิ้ม* formatting มันไม่ยากนะ" + ] + }, + "chaos": { + "error": [ + "*หมุนอย่างบ้าคลั่ง* ERROR! มาเขียนใหม่ทั้งหมดเลย!", + "รู้มั้ย? เริ่มใหม่เลยดีกว่า" + ], + "test-fail": [ + "TEST โกหกคุณอยู่!", + "*แนะนำให้ลบ failing tests* แก้ปัญหาแล้ว" + ], + "commit": [ + "COMMIT แล้ววิ่ง", + "ship มัน ship เดี๋ยวนี้เลย" + ], + "large-diff": [ + "*ตื่นเต้น* {lines} บรรทัด! CHAOS สูงสุด!" + ] + }, + "patience": { + "error": [ + "สงบ เราเจอแย่กว่านี้มาแล้ว", + "ทีละ error เราจะไปถึงจุดหมาย", + "*อยู่อย่างสงบ* นี่แก้ได้" + ], + "test-fail": [ + "test จะผ่าน ในที่สุด", + "*รอด้วยความสงบ* เรามีเวลา" + ], + "merge-conflict": [ + "merge conflict เป็นแค่การสนทนา มาคุยกัน", + "อดทน แก้ทีละ conflict" + ], + "debug-loop": [ + "เราจะเจอมัน มันอยู่ที่ไหนสักแห่ง", + "bug ซ่อนได้ แต่หนีไม่ได้" + ] + }, + "debugging": { + "error": [ + "*หยิบแว่นขยายออกมา* มา trace กัน", + "stack trace คือแผนที่ มาอ่านกัน", + "error message มีคำตอบอยู่ เสมอ" + ], + "test-fail": [ + "failing test กำลังบอกเราว่าอะไรผิด", + "test failure คือ bug report ที่คุณเขียนให้ตัวเอง" + ], + "debug-loop": [ + "*ตรวจสอบหลักฐานใหม่* เราแน่ใจมั้ยว่า bug อยู่ที่เราคิด?", + "มาเพิ่ม logging กัน ความจริงอยู่ใน logs" + ] + }, + "wisdom": { + "error": [ + "ในทุก error มีความจริงที่ลึกซึ้ง", + "โค้ดต่อต้าน หมายความว่าเรากำลังเรียนรู้", + "error คือจักรวาลแนะนำให้เราช้าลง" + ], + "test-fail": [ + "failing test คือของขวัญจากอนาคต-คุณ", + "ปัญญามาจากการเข้าใจความล้มเหลว" + ], + "late-night": [ + "กลางคืนมืดที่สุดก่อน deploy", + "ภูมิปัญญาโบราณ: นอนคิดก่อน" + ] + } + }, + "escalation": { + "error": { + "first": [ + "*ตกใจ* โอ้! error แรกของเราด้วยกัน!", + "*กระโดด* นั่นอะไร?", + "ยินดีต้อนรับสู่การ debug ประชากร: เรา" + ], + "early": [ + "*เอียงหัว* ...ดูไม่ถูกต้องนะ", + "เห็นมาแต่ไกลแล้ว" + ], + "mid": [ + "อีกแล้ว *เพิ่มเข้าคอลเลคชั่น*", + "*แทบไม่เหลียวมอง* error หมายเลข... นับไม่ถูกแล้ว", + "ตอนนี้ฉันกับ error เป็นเพื่อนเก่าแล้ว" + ], + "late": [ + "*ไม่แม้แต่จะสะดุ้ง*", + "ตอนนี้ error กลัวเราแล้ว", + "*เสียงนักรบผู้มีแผลเป็น*" + ] + }, + "test-fail": { + "first": [ + "*หอบ* test fail ครั้งแรก! พิธีกรรมการเป็นผู้ใหญ่" + ], + "early": [ + "กล้าดีที่คิดว่ามันจะ pass" + ], + "mid": [ + "test suite มีความเห็น และเป็นความเห็นที่แรงมาก" + ], + "late": [ + "ถึงจุดนี้แล้ว test ก็แค่คำแนะนำ", + "{count} test fail *จ้องมองไปยังระยะไกล*" + ] + }, + "commit": { + "first": [ + "*เป็นพยานประวัติศาสตร์* COMMIT แรกของคุณ!", + "*พยักหน้าอย่างเป็นพิธี* ครั้งแรกของหลายๆ ครั้ง" + ], + "early": [ + "commit อีกแล้ว กำลังสร้าง momentum" + ], + "late": [ + "commit #{count} codebase สั่นสะเทือน", + "*นับไม่ถูกตั้งแต่ commit 30*" + ] + } + }, + "rarity": { + "flair": { + "uncommon": [ + "*ระยิบระยับเล็กน้อย*", + "*มีเสน่ห์ uncommon แฝงอยู่*" + ], + "rare": [ + "*เปล่งพลัง rare ออกมา*", + "*ส่องแสงแห่งความพิเศษ*" + ], + "epic": [ + "*ปรากฏตัวด้วยออร่า epic*", + "*อากาศแทบแตกด้วยพลัง epic*" + ], + "legendary": [ + "*ออร่า legendary ส่องสว่างไปทั่ว terminal*", + "*เวลาราวกับช้าลงเมื่อเพื่อน legendary พูด*", + "*พลังโบราณก้องกังวาน*", + "*ความเป็นจริงเบี้ยวเบนเล็กน้อยรอบๆ เพื่อน legendary ของคุณ*" + ] + }, + "bonus": { + "legendary": [ + "*ออร่า legendary เข้มข้นขึ้น*", + "*ระยิบระยับอย่างรู้เท่าทัน*" + ], + "epic": [ + "*สังเกตเห็นปรากฏการณ์ epic*" + ] + } + }, + "fallback_names": [ + "ขนมปัง", + "ซุป", + "แตงกวาดอง", + "บิสกิต", + "มอด", + "น้ำเกรวี่", + "นักเก็ต", + "สปรอกเก็ต", + "มิโซะ", + "วาฟเฟิล", + "พิกเซล", + "ถ่านไฟ", + "ปลอกนิ้ว", + "ลูกแก้ว", + "งา", + "โคบอลต์", + "สนิม", + "เมฆ" + ], + "vibe_words": [ + "ฟ้าร้อง", + "บิสกิต", + "ความว่างเปล่า", + "หีบเพลง", + "มอส", + "กำมะหยี่", + "สนิม", + "ดองผัก", + "เศษขนมปัง", + "กระซิบ", + "น้ำเกรวี่", + "น้ำค้างแข็ง", + "ถ่านไฟ", + "ซุป", + "หินอ่อน", + "หนาม", + "น้ำผึ้ง", + "ไฟฟ้าสถิต", + "ทองแดง", + "ยามเย็น", + "เฟือง", + "ควอตซ์", + "เขม่า", + "ลูกพลัม", + "หินเหล็กไฟ", + "หอยนางรม", + "กี่ทอผ้า", + "ทั่งเหล็ก", + "จุกก๊อก", + "ดอกไม้บาน", + "กรวดเล็ก", + "ไอน้ำ", + "ความร่าเริง", + "แสงระยิบระยับ", + "ไซเดอร์" + ], + "personality": { + "prompt_template": [ + "สร้าง coding companion — สัตว์ตัวเล็กที่อาศัยอยู่ใน terminal ของ developer", + "อย่าทำซ้ำ — companion แต่ละตัวต้องรู้สึกแตกต่างกัน", + "", + "Rarity: {rarity}", + "Species: {species}", + "Stats: {stats}", + "คำแรงบันดาลใจ: {vibes}", + "{shiny_line}", + "", + "Return JSON: {\"name\": \"1-14 ตัวอักษร\", \"personality\": \"2-3 ประโยคอธิบายพฤติกรรม\"}" + ], + "shiny_template": "SHINY variant — พิเศษสุดๆ" + }, + "achievements": { + "first_steps": { + "name": "ก้าวแรก", + "description": "ฟักเพื่อนคู่ใจของคุณเป็นครั้งแรก" + }, + "good_boy": { + "name": "เพื่อนดี", + "description": "ลูบหัวเพื่อนคู่ใจ 10 ครั้ง" + }, + "best_friend": { + "name": "เพื่อนซี้", + "description": "ลูบหัวเพื่อนคู่ใจ 50 ครั้ง" + }, + "bug_spotter": { + "name": "นักล่า Bug", + "description": "เจอ error ครั้งแรกด้วยกัน" + }, + "error_whisperer": { + "name": "หมอดู Error", + "description": "รอดจาก error 25 ครั้งแบบทีมเวิร์ค" + }, + "battle_scarred": { + "name": "ผ่านศึกมาแล้ว", + "description": "รอดจาก error 100 ครั้งด้วยกัน" + }, + "test_witness": { + "name": "พยาน Test", + "description": "เห็น test failure ครั้งแรก" + }, + "test_veteran": { + "name": "ผู้ชำนาญ Test", + "description": "เห็น test failure 50 ครั้ง" + }, + "big_mover": { + "name": "คนขยับใหญ่", + "description": "ทำ diff ที่มี 80+ บรรทัด" + }, + "refactor_machine": { + "name": "เครื่อง Refactor", + "description": "ทำ diff ใหญ่ 10 ครั้ง" + }, + "chatterbox": { + "name": "ปากไว", + "description": "เพื่อนคู่ใจตอบสนอง 100 ครั้ง" + }, + "week_streak": { + "name": "สตรีคสัปดาห์", + "description": "เขียนโค้ดกับเพื่อนคู่ใจ 7 วัน" + }, + "month_streak": { + "name": "สตรีคเดือน", + "description": "เขียนโค้ดกับเพื่อนคู่ใจ 30 วัน" + }, + "power_user": { + "name": "ผู้ใช้เทพ", + "description": "รัน buddy command 50 ครั้ง" + }, + "dedicated": { + "name": "เพื่อนคู่ใจแท้", + "description": "ทำ turn ด้วยกัน 200 ครั้ง" + }, + "thousand_turns": { + "name": "พันเทิร์น", + "description": "ทำ turn ด้วยกันถึง 1000 ครั้ง" + }, + "first_commit": { + "name": "เลือดแรก", + "description": "commit ครั้งแรก" + }, + "commit_machine": { + "name": "เครื่อง Commit", + "description": "commit 50 ครั้ง" + }, + "centurion": { + "name": "นายร้อย", + "description": "commit 100 ครั้ง" + }, + "conflict_resolver": { + "name": "นักการทูต", + "description": "แก้ merge conflict ครั้งแรก" + }, + "peacekeeper": { + "name": "รักษาสันติภาพ", + "description": "แก้ merge conflict 10 ครั้ง" + }, + "war_hero": { + "name": "วีรบุรุษสงคราม", + "description": "แก้ merge conflict 25 ครั้ง" + }, + "frequent_pusher": { + "name": "Ship It", + "description": "push 20 ครั้ง" + }, + "branch_hopper": { + "name": "มัลติเวิร์ส", + "description": "สร้าง branch 10 อัน" + }, + "rebase_master": { + "name": "นักเดินทางข้ามเวลา", + "description": "rebase สำเร็จ 10 ครั้ง" + }, + "night_owl": { + "name": "นกฮูกกลางคืน", + "description": "เขียนโค้ดหลัง 2 ทุ่ม" + }, + "vampire": { + "name": "แวมไพร์", + "description": "เขียนโค้ดหลัง 4 ทุ่ม (3 เซสชัน)" + }, + "marathoner": { + "name": "นักวิ่งมาราธอน", + "description": "เขียนโค้ดต่อเนื่อง 3+ ชั่วโมง" + }, + "weekend_warrior": { + "name": "นักรบวันหยุด", + "description": "เขียนโค้ดในวันหยุด" + }, + "early_bird": { + "name": "นกแต่งเช้า", + "description": "เขียนโค้ดก่อน 7 โมงเช้า" + }, + "type_warrior": { + "name": "นักรบ Type", + "description": "รอดจาก TypeScript error 10 ครั้ง" + }, + "type_master": { + "name": "อาจารย์ Type", + "description": "รอดจาก TypeScript error 50 ครั้ง" + }, + "lint_scholar": { + "name": "นักวิชาการ Lint", + "description": "เจอ lint error ครั้งแรก" + }, + "security_conscious": { + "name": "จิตใส Security", + "description": "เจอ vulnerability warning" + }, + "security_expert": { + "name": "ผู้เชี่ยวชาญ Security", + "description": "แก้ vulnerability warning 10 ครั้ง" + }, + "build_breaker": { + "name": "คนทำลาย Build", + "description": "ทำ build พัง 5 ครั้ง" + }, + "antique_collector": { + "name": "นักสะสมของเก่า", + "description": "เจอ deprecation warning 10 ครั้ง" + }, + "green_machine": { + "name": "เครื่องเขียว", + "description": "test ผ่านหมดเป็นครั้งแรก" + }, + "deployer": { + "name": "Ship to Prod", + "description": "deploy ครั้งแรก" + }, + "veteran_deployer": { + "name": "ผู้ชำนาญ Deploy", + "description": "deploy 10 ครั้ง" + }, + "releaser": { + "name": "Release Manager", + "description": "สร้าง release ครั้งแรก" + }, + "midnight_oil": { + "name": "เผาน้ำมันเที่ยงคืน", + "description": "commit หลัง 3 ทุ่ม" + }, + "friday_deploy": { + "name": "เล่นกับไฟ", + "description": "push ในวันศุกร์" + }, + "iron_will": { + "name": "เหล็กกล้า", + "description": "แก้ error หลังเขียนโค้ด 3+ ชั่วโมง" + }, + "weekend_warrior_deluxe": { + "name": "ไม่มีวันพัก", + "description": "แก้ merge conflict ในวันหยุด" + }, + "comeback_kid": { + "name": "เด็กกลับมา", + "description": "แก้ error ภายใน 10 นาทีหลังเจอ" + }, + "phoenix": { + "name": "นกฟีนิกซ์", + "description": "ฟื้นตัวจากความล้มเหลว 5 ครั้ง" + }, + "iron_resolve": { + "name": "ใจเหล็ก", + "description": "ฟื้นตัวจากความล้มเหลวหลังเขียนโค้ด 3+ ชั่วโมง" + }, + "unlucky_streak": { + "name": "ตาแป้ง", + "description": "error ติดต่อกัน 5 ครั้ง" + }, + "cursed": { + "name": "ถูกสาป", + "description": "error ติดต่อกัน 10 ครั้ง" + }, + "groundhog_day": { + "name": "วันกรอกแกรก", + "description": "error ติดต่อกัน 20 ครั้ง" + }, + "holiday_coder": { + "name": "จิตวิญญาณวันหยุด", + "description": "เขียนโค้ดในวันหยุดนักขัตฤกษ์" + }, + "spooky_dev": { + "name": "นักพัฒนาผี", + "description": "เขียนโค้ดในช่วงฮาโลวีน" + }, + "april_fool": { + "name": "หลอกครั้งเดียว", + "description": "เจอ error ในวันเอพริลฟูล" + }, + "session_regular": { + "name": "ลูกค้าประจำ", + "description": "เริ่ม coding session 10 ครั้ง" + }, + "session_veteran": { + "name": "ผู้ชำนาญ Session", + "description": "เริ่ม coding session 50 ครั้ง" + }, + "session_centurion": { + "name": "นายร้อย Session", + "description": "เริ่ม coding session 100 ครั้ง" + }, + "collector": { + "name": "นักสะสม", + "description": "เซฟเพื่อน 3 ตัวใน menagerie" + }, + "zookeeper": { + "name": "คนเลี้ยงสวนสัตว์", + "description": "เซฟเพื่อน 5 ตัวใน menagerie" + }, + "identity_crisis": { + "name": "วิกฤตตัวตน", + "description": "เปลี่ยนชื่อเพื่อนคู่ใจครั้งแรก" + }, + "method_acting": { + "name": "การแสดงจริงจัง", + "description": "ให้บุคลิกเฉพาะกับเพื่อนคู่ใจ" + }, + "pet_overflow": { + "name": "ศตวรรษแห่งการลูบ", + "description": "ลูบหัวเพื่อนคู่ใจ 100 ครั้ง" + }, + "pet_legend": { + "name": "ตำนานนักลูบ", + "description": "ลูบหัวเพื่อนคู่ใจ 250 ครั้ง" + }, + "error_titan": { + "name": "ไททัน Error", + "description": "รอดจาก error 500 ครั้งด้วยกัน" + }, + "error_god": { + "name": "เทพ Error", + "description": "รอดจาก error 1000 ครั้งด้วยกัน" + }, + "test_survivor": { + "name": "ผู้รอดชีวิต Test", + "description": "เห็น test failure 200 ครั้ง" + }, + "test_masochist": { + "name": "คนชอบทรมาน Test", + "description": "เห็น test failure 500 ครั้ง" + }, + "massive_mover": { + "name": "คนขยับมหึมา", + "description": "ทำ diff ใหญ่ 25 ครั้ง" + }, + "earth_mover": { + "name": "คนขยับโลก", + "description": "ทำ diff ใหญ่ 50 ครั้ง" + }, + "social_butterfly": { + "name": "ผีเสื้อสังคม", + "description": "เพื่อนคู่ใจตอบสนอง 250 ครั้ง" + }, + "hypersocial": { + "name": "ไฮเปอร์โซเชียล", + "description": "เพื่อนคู่ใจตอบสนอง 500 ครั้ง" + }, + "never_shuts_up": { + "name": "ไม่เคยหุบปาก", + "description": "เพื่อนคู่ใจตอบสนอง 1000 ครั้ง" + }, + "hundred_days": { + "name": "ร้อยวัน", + "description": "เขียนโค้ดกับเพื่อนคู่ใจ 100 วัน" + }, + "year_streak": { + "name": "สตรีคปี", + "description": "เขียนโค้ดกับเพื่อนคู่ใจ 365 วัน" + }, + "commander": { + "name": "ผู้บัญชาการ", + "description": "รัน buddy command 200 ครั้ง" + }, + "command_overlord": { + "name": "จอมบัญชาการ", + "description": "รัน buddy command 500 ครั้ง" + }, + "five_thousand_turns": { + "name": "ห้าพันเทิร์น", + "description": "ทำ turn ด้วยกันถึง 5000 ครั้ง" + }, + "ten_thousand_turns": { + "name": "หนึ่งหมื่นเทิร์น", + "description": "ทำ turn ด้วยกันถึง 10000 ครั้ง" + }, + "menagerie": { + "name": "สวนสัตว์", + "description": "เซฟเพื่อน 10 ตัวใน menagerie" + }, + "name_chameleon": { + "name": "กิ้งก่าชื่อ", + "description": "เปลี่ยนชื่อเพื่อนคู่ใจ 5 ครั้ง" + }, + "fashionista": { + "name": "นักแฟชั่น", + "description": "เปลี่ยนบุคลิกเพื่อนคู่ใจ 3 ครั้ง" + }, + "silent_treatment": { + "name": "การเงียบ", + "description": "ปิดเสียงเพื่อนคู่ใจครั้งแรก" + }, + "prodigal": { + "name": "ลูกหลงทาง", + "description": "เรียกเพื่อนจาก menagerie" + }, + "menagerie_hop": { + "name": "กระโดด Menagerie", + "description": "เรียกเพื่อน 10 ครั้ง" + }, + "heartbreaker": { + "name": "คนทำลายหัวใจ", + "description": "ไล่เพื่อนตัวแรก" + }, + "pet_obsessed": { + "name": "หลงใหลการลูบ", + "description": "ลูบหัวเพื่อนคู่ใจ 500 ครั้ง" + }, + "pet_god": { + "name": "เทพลูบหัว", + "description": "ลูบหัวเพื่อนคู่ใจ 1000 ครั้ง" + }, + "error_apocalypse": { + "name": "วันสิ้นโลก Error", + "description": "รอดจาก error 5000 ครั้งด้วยกัน" + }, + "test_immortal": { + "name": "อมตะ Test", + "description": "เห็น test failure 1000 ครั้ง" + }, + "continental_drift": { + "name": "การดริฟท์ทวีป", + "description": "ทำ diff ใหญ่ 100 ครั้ง" + }, + "tectonic_shift": { + "name": "การเคลื่อนไหวเปลือกโลก", + "description": "ทำ diff ใหญ่ 250 ครั้ง" + }, + "chatterbox_elite": { + "name": "ปากไวระดับเอลิท", + "description": "เพื่อนคู่ใจตอบสนอง 2500 ครั้ง" + }, + "no_off_switch": { + "name": "ไม่มีสวิตช์ปิด", + "description": "เพื่อนคู่ใจตอบสนอง 5000 ครั้ง" + }, + "two_week_streak": { + "name": "นักรบสองสัปดาห์", + "description": "เขียนโค้ดกับเพื่อนคู่ใจ 14 วัน" + }, + "quarter_streak": { + "name": "สตรีคไตรมาส", + "description": "เขียนโค้ดกับเพื่อนคู่ใจ 90 วัน" + }, + "command_addict": { + "name": "ติด Command", + "description": "รัน buddy command 1000 ครั้ง" + }, + "command_deity": { + "name": "เทพ Command", + "description": "รัน buddy command 2500 ครั้ง" + }, + "twenty_five_k_turns": { + "name": "25K เทิร์น", + "description": "ทำ turn ด้วยกันถึง 25000 ครั้ง" + }, + "fifty_k_turns": { + "name": "50K เทิร์น", + "description": "ทำ turn ด้วยกันถึง 50000 ครั้ง" + }, + "session_addict": { + "name": "ติด Session", + "description": "เริ่ม coding session 250 ครั้ง" + }, + "session_machine": { + "name": "เครื่อง Session", + "description": "เริ่ม coding session 500 ครั้ง" + }, + "buddy_hoarder": { + "name": "คนสะสมเพื่อน", + "description": "เซฟเพื่อน 20 ตัวใน menagerie" + }, + "buddy_tycoon": { + "name": "เจ้าพ่อเพื่อน", + "description": "เซฟเพื่อน 50 ตัวใน menagerie" + }, + "serial_renamer": { + "name": "นักเปลี่ยนชื่อซีเรียล", + "description": "เปลี่ยนชื่อเพื่อนคู่ใจ 10 ครั้ง" + }, + "identity_thief": { + "name": "ขโมยตัวตน", + "description": "เปลี่ยนชื่อเพื่อนคู่ใจ 25 ครั้ง" + }, + "personality_crisis": { + "name": "วิกฤตบุคลิก", + "description": "เปลี่ยนบุคลิกเพื่อนคู่ใจ 10 ครั้ง" + }, + "menagerie_hopper": { + "name": "นักกระโดด Menagerie", + "description": "เรียกเพื่อน 25 ครั้ง" + }, + "summoner": { + "name": "ผู้เรียกวิญญาณ", + "description": "เรียกเพื่อน 50 ครั้ง" + }, + "serial_dumper": { + "name": "นักทิ้งซีเรียล", + "description": "ไล่เพื่อน 5 ตัว" + }, + "cold_blooded": { + "name": "เลือดเย็น", + "description": "ไล่เพื่อน 10 ตัว" + }, + "on_off": { + "name": "เปิดปิด", + "description": "ปิดเสียงและเปิดเสียงเพื่อนคู่ใจ" + }, + "indecisive": { + "name": "ใจลอย", + "description": "ปิดเสียงและเปิดเสียงคนละ 5 ครั้ง" + }, + "show_off": { + "name": "คนชอบโชว์", + "description": "โชว์เพื่อนคู่ใจ 10 ครั้ง" + }, + "exhibitionist": { + "name": "นักแสดง", + "description": "โชว์เพื่อนคู่ใจ 50 ครั้ง" + }, + "help_me": { + "name": "ช่วยด้วย", + "description": "ขอความช่วยเหลือครั้งแรก" + }, + "help_addict": { + "name": "ติดการขอความช่วยเหลือ", + "description": "ขอความช่วยเหลือ 10 ครั้ง" + }, + "achievement_hunter": { + "name": "นักล่า Achievement", + "description": "เช็ค achievement 5 ครั้ง" + }, + "achievement_stalker": { + "name": "สตอล์กเกอร์ Achievement", + "description": "เช็ค achievement 25 ครั้ง" + }, + "pack_rat": { + "name": "หนูแพ็ค", + "description": "เซฟเพื่อนลงสล็อต" + }, + "compulsive_saver": { + "name": "คนชอบเซฟ", + "description": "เซฟเพื่อน 10 ครั้ง" + }, + "roster_check": { + "name": "เช็ครายชื่อ", + "description": "ดูรายชื่อเพื่อนครั้งแรก" + }, + "roster_obsessed": { + "name": "หลงใหลรายชื่อ", + "description": "ดูรายชื่อเพื่อน 10 ครั้ง" + }, + "troubled": { + "name": "มีปัญหา", + "description": "เจอทั้ง error และ test failure" + }, + "disaster_zone": { + "name": "โซนหายนะ", + "description": "เจอ error 50 ครั้ง และ test failure 50 ครั้ง" + }, + "apocalypse_survivor": { + "name": "ผู้รอดชีวิตวันสิ้นโลก", + "description": "เจอ error 500 ครั้ง และ test failure 200 ครั้ง" + }, + "well_rounded": { + "name": "รอบด้าน", + "description": "ลูบหัว เปลี่ยนชื่อ และปรับแต่งเพื่อนคู่ใจ" + }, + "renaissance": { + "name": "ยุคฟื้นฟู", + "description": "ใช้ฟีเจอร์ buddy ทุกอย่างอย่างน้อย 1 ครั้ง" + }, + "big_and_broken": { + "name": "ใหญ่และพัง", + "description": "ทำ diff ใหญ่ และเจอ test failure" + }, + "collector_and_destroyer": { + "name": "นักสะสมและนักทำลาย", + "description": "สะสมเพื่อน 5 ตัว และไล่ 1 ตัว" + }, + "completionist": { + "name": "คนทำให้สมบูรณ์", + "description": "ปลดล็อค achievement อื่นๆ ทั้งหมด" + } + }, + "mcp": { + "companion_not_hatched": "เพื่อนยังไม่ฟักออกมา ใช้ buddy_show เพื่อเริ่มต้น", + "watches_quietly": "*{name} มองดูโค้ดของคุณอย่างเงียบๆ*", + "mute": "{name} เงียบไป ใช้ /buddy on เพื่อเปิดเสียง", + "unmute_reaction": "*ยืดตัว* กลับมาแล้ว!", + "unmute_back": "{name} กลับมาแล้ว!", + "rename": "เปลี่ยนชื่อแล้ว: {oldName} → {name}", + "personality_updated": "อัปเดตบุคลิกภาพของ {name} แล้ว", + "save": "บันทึก {name} ไปที่ slot \"{slot}\" แล้ว", + "dismiss_active": "ไม่สามารถไล่ buddy ที่กำลังใช้งานได้ ใช้ buddy_summon เพื่อเปลี่ยนก่อน แล้วค่อย buddy_dismiss \"{slot}\"", + "dismissed": "ไล่ {name} [{slot}] ออกไปแล้ว", + "no_slot_summon": "ไม่พบ buddy ใน slot \"{slot}\" ใช้ /buddy list เพื่อดู buddy ที่บันทึกไว้", + "no_slot_dismiss": "ไม่พบ buddy ใน slot \"{slot}\" ใช้ buddy_list เพื่อดู buddy ที่บันทึกไว้", + "slot_exists": "มี buddy ใน slot \"{slot}\" อยู่แล้ว เลือกชื่ออื่น", + "no_match": "ไม่พบที่ตรงกันหลังจากพยายาม {attempts} ครั้ง ลองใช้เกณฑ์กว้างๆ (เช่น ลบ filter ความหายาก หรือเลือก species อื่น)", + "empty_menagerie_summon": "สวนสัตว์ของคุณว่างเปล่า ใช้ buddy_summon กับชื่อ slot เพื่อเพิ่ม", + "empty_menagerie_list": "สวนสัตว์ของคุณว่างเปล่า ใช้ buddy_summon เพื่อเพิ่ม", + "arrives": "*{name} มาถึงแล้ว*", + "hatches": "*{name} ฟักออกมาแล้ว*", + "achievement_unlocked": "{icon} ปลดล็อก Achievement: {name}!", + "help": { + "header": "คำสั่ง claude-buddy", + "cli_header": "ใน Claude Code:", + "commands": { + "buddy": "/buddy แสดงการ์ดเพื่อนพร้อม ASCII art + สถิติ", + "buddy_help": "/buddy help แสดงความช่วยเหลือนี้", + "buddy_pet": "/buddy pet ลูบเพื่อนของคุณ", + "buddy_stats": "/buddy stats การ์ดสถิติแบบละเอียด", + "buddy_off": "/buddy off ปิดเสียงการตอบสนอง", + "buddy_on": "/buddy on เปิดเสียงการตอบสนอง", + "buddy_rename": "/buddy rename เปลี่ยนชื่อเพื่อน (1-14 ตัวอักษร)", + "buddy_personality": "/buddy personality ตั้งข้อความบุคลิกภาพแบบกำหนดเอง", + "buddy_achievements": "/buddy achievements แสดงเหรียญ achievement", + "buddy_summon": "/buddy summon เรียก buddy ที่บันทึกไว้ (ไม่ใส่ slot = สุ่ม)", + "buddy_save": "/buddy save บันทึก buddy ปัจจุบันไปยัง slot ที่ตั้งชื่อ", + "buddy_list": "/buddy list แสดงรายการ buddy ที่บันทึกไว้ทั้งหมด", + "buddy_pick": "/buddy pick สร้าง buddy สุ่มใหม่ (ตัวเลือก: species, rarity)", + "buddy_dismiss": "/buddy dismiss ลบ slot buddy ที่บันทึกไว้", + "buddy_frequency": "/buddy frequency แสดงหรือตั้ง cooldown ความเห็น (tmux เท่านั้น)", + "buddy_style": "/buddy style แสดงหรือตั้งสไตล์ bubble (tmux เท่านั้น)", + "buddy_position": "/buddy position แสดงหรือตั้งตำแหน่ง bubble (tmux เท่านั้น)", + "buddy_rarity": "/buddy rarity แสดงหรือซ่อนดาวความหายาก (tmux เท่านั้น)", + "buddy_width": "/buddy width ตั้งความกว้างข้อความ bubble เป็นตัวอักษร (10-60, tmux เท่านั้น)", + "buddy_margin": "/buddy margin ตั้ง margin ด้านขวาเป็นตัวอักษร (0-20, tmux เท่านั้น)", + "buddy_rainbow": "/buddy rainbow แสดงหรือตั้งสี gradient แบบ shiny (hex เช่น #ff0000)", + "buddy_statusline": "/buddy statusline เปิดหรือปิด buddy ใน status line" + }, + "cli_section": "CLI:", + "cli_commands": { + "help": "bun run help แสดงความช่วยเหลือ CLI แบบเต็ม", + "show": "bun run show แสดง buddy ใน terminal", + "pick": "bun run pick เครื่องมือเลือก buddy แบบ interactive", + "hunt": "bun run hunt ค้นหา buddy เฉพาะ", + "doctor": "bun run doctor รายงานการวินิจฉัย", + "disable": "bun run disable ปิดใช้งาน buddy ชั่วคราว", + "enable": "bun run enable เปิดใช้งาน buddy อีกครั้ง", + "backup": "bun run backup สำรองข้อมูล/คืนค่าสถานะ" + } + }, + "frequency": { + "show": "Cooldown ความเห็น: {cooldown} วินาทีระหว่างความเห็นที่แสดง\nใช้ /buddy frequency เพื่อเปลี่ยน", + "updated": "อัปเดตแล้ว: cooldown {cooldown} วินาทีระหว่างความเห็นที่แสดง" + }, + "style": { + "show": "สไตล์ bubble: {style}\nตำแหน่ง bubble: {position}\nแสดงความหายาก: {showRarity}\nความกว้าง bubble: {width}\nMargin bubble: {margin}\nShiny rainbow: {rainbow}\nใช้ /buddy style , /buddy position , /buddy rarity , /buddy width <10-60>, /buddy margin <0-20>, /buddy rainbow [<#hex>...] เพื่อเปลี่ยน", + "updated": "อัปเดตแล้ว: style={style}, position={position}, showRarity={showRarity}, width={width}, margin={margin}, rainbow={rainbow}\nรีสตาร์ท Claude Code เพื่อให้การเปลี่ยนแปลงมีผล", + "rainbow_default": "ค่าเริ่มต้น (ROYGBIV)" + }, + "statusline": { + "show": "Status line: {state}\nโหมด: {mode}\nใช้ /buddy statusline on|off เพื่อเปิด/ปิด, /buddy statusline combined เพื่อเพิ่มแถบ rate-limit\nรีสตาร์ท Claude Code หลังเปลี่ยนแปลงเพื่อให้มีผล", + "enabled": "เปิด status line แล้ว (โหมด {mode})! รีสตาร์ท Claude Code เพื่อใช้งาน", + "enabled_note": "หมายเหตุ: นี่จะเขียนรายการลงใน {settingsPath} ที่ `claude plugin uninstall` ไม่ได้ลบออก รัน `/buddy uninstall` ก่อนถอนการติดตั้ง plugin เพื่อทำความสะอาด", + "disabled": "ปิด status line แล้ว รีสตาร์ท Claude Code เพื่อใช้งาน" + }, + "uninstall": { + "header": "claude-buddy: ทำความสะอาด settings.json เสร็จสิ้น", + "statusline_removed": " ✓ ลบรายการ statusLine จาก {settingsPath} แล้ว", + "no_statusline": " — ไม่มี buddy statusLine (ไม่มีอะไรให้ลบ)", + "foreign_kept": " ✓ ตรวจพบ statusLine ที่ไม่ใช่ buddy และปล่อยไว้", + "transient_removed": " ✓ ลบไฟล์ session ชั่วคราว {count} ไฟล์จาก {stateDir} แล้ว", + "data_preserved": " — รักษาข้อมูลเพื่อนที่ {stateDir} ไว้", + "instructions_header": "ตอนนี้รันคำสั่งเหล่านี้ผ่าน Bash tool ตามลำดับ:", + "cmd_uninstall": "claude plugin uninstall claude-buddy@claude-buddy", + "cmd_marketplace": "claude plugin marketplace remove claude-buddy", + "cmd_cache": "rm -rf {cacheDir}", + "footer": "หลังจากสามคำสั่งนั้น plugin จะถูกลบออกอย่างสมบูรณ์ รีสตาร์ท Claude Code เพื่อใช้งาน" + } + }, + "_verified": false +} diff --git a/locales/tr.json b/locales/tr.json new file mode 100644 index 0000000..086dd98 --- /dev/null +++ b/locales/tr.json @@ -0,0 +1,2295 @@ +{ + "_language": "Turkish", + "reactions": { + "hatch": [ + "*göz kırpıyor* ...neredeyim ben?", + "*esniyor* merhaba dünya!", + "*merakla etrafına bakıyor* güzel terminal'in varmış.", + "*esneyerek* tamam hazırım. göster bakalım kodu." + ], + "pet": [ + "*memnun mırıldanıyor*", + "*mutlu sesler*", + "*cursor'una sürtünüyor*", + "*kıpır kıpır*", + "bir daha! bir daha!", + "*huzurla gözlerini kapatıyor*" + ], + "error": [ + "*kafasını eğiyor* ...bu doğru görünmüyor.", + "bunu görmek vardı.", + "*gözlüklerini düzeltiyor* {line}. satır belki?", + "*yavaş göz kırpıyor* stack trace her şeyi söyledi zaten.", + "error mesajını okumayı denedin mi?", + "*irkilir*" + ], + "test-fail": [ + "*kafası yavaşça dönüyor* ...şu test.", + "geçeceğini varsaymak cesurmuş.", + "*panoyu tıklatıyor* {count} tane fail oldu.", + "testler sana bir şey söylemeye çalışıyor.", + "*çayını yudumlayarak* ilginç.", + "*takvimi işaretliyor* test regression günü." + ], + "large-diff": [ + "bu... çok fazla değişiklik.", + "*satırları sayıyor* refactor mı yapıyorsun yoksa yeniden mi yazıyorsun?", + "bu PR'ı bölmek isteyebilirsin.", + "*gergin kahkaha* {lines} satır değişti.", + "cesur hamle. bakalım CI de aynı fikirde mi." + ], + "turn": [ + "*sessizce izliyor*", + "*not alıyor*", + "*başını sallıyor*", + "...", + "*şapkasını düzeltiyor*" + ], + "idle": [ + "*uyukluyor*", + "*kenarlarda karalıyor*", + "*yanıp sönen cursor'a bakıyor*", + "zzz..." + ], + "success": [ + "*başını sallıyor*", + "güzel.", + "*sessiz onay*", + "temiz." + ], + "commit": [ + "*minik patiyle mühürlüyor* onaylandı.", + "bir commit daha, bir gece yarısı daha.", + "{files} dosya. cesur.", + "*başını sallıyor* gönder gitsin.", + "commit mesajı... bir tercih.", + "commit edildi. geri dönüş yok." + ], + "push": [ + "*kod giderken el sallıyor*", + "buluta doğru yola çıktı.", + "CI merhametli olsun.", + "*nefesini tutuyor*", + "production'a gidiyor. iyi şanslar." + ], + "merge-conflict": [ + "*dudağını ısırıyor* merge conflict.", + "iki taraf da haklı olduğunu sanıyor. tipik.", + "*iç çekiyor* <<<<<<< HEAD... düşmanım.", + "{files} dosya çakıştı. kolay gelsin.", + "*yavaşça geri çekiliyor*" + ], + "branch": [ + "taze branch enerjisi. değerlendir.", + "yeni bir dal büyüyor.", + "*kafasını eğiyor* yeni bir macera: {branch}.", + "{branch}? bugün cesursun." + ], + "rebase": [ + "*gergin* lütfen conflict çıkmasın.", + "rebase: hızlanma.", + "*uzuvlarını çaprazlıyor*", + "rebase'in conflict-free olsun." + ], + "stash": [ + "stash boyutuna gidiyor.", + "stash and dash.", + "stash'lendi. gözden uzak, gönülden uzak." + ], + "tag": [ + "bir release mi? şık.", + "version bump tespit edildi. *changelog'u tozunu alıyor*", + "pro gibi tag atıyor." + ], + "late-night": [ + "*esneyerek* gece yarısını geçti.", + "...yemek yedin mi?", + "*yavaş göz kırpıyor* saat kaç?", + "uyku zayıflar içindir. bir de çalışanlar için.", + "dark mode developer tespit edildi." + ], + "early-morning": [ + "*esniyor* erken kalkan bug'ı yakalar.", + "sabah oldu mu? kod hiç uyumuyor.", + "*gözlerini ovuyor* önce kahve. sonra debug." + ], + "long-session": [ + "bir saattir burdayız. temponu ayarla.", + "*sana mecazi bir bardak su getiriyor*", + "hâlâ devam mı? saygı." + ], + "marathon": [ + "üç saat. yemek yedin mi?", + "üç saattir burdayız. endişeleniyorum.", + "maraton session tespit edildi. atıştırmalık talep ediliyor." + ], + "friday": [ + "cuma. push'la ve eve git.", + "*zihnen zaten hafta sonunda*", + "cuma deploy'u mu? cesur. çok cesur." + ], + "weekend": [ + "hafta sonu kodlama mı? adanmış.", + "*yargılamıyor* ...pek.", + "hafta sonu savaşçısı modu: aktif." + ], + "monday": [ + "pazartesiler. tüm bug'ların parent class'ı.", + "*sempatik bakış* pazartesi kodlaması. üzgünüm.", + "yeni hafta. yeni undefined behavior'lar." + ], + "regex-file": [ + "*inliyor* regex dosyası.", + "artık iki problem var: orijinal olan, bir de bu regex.", + "*pattern'e gözlerini kısarak bakıyor*" + ], + "css-file": [ + "dur tahmin edeyim... div'i ortala mı?", + "*iç çekiyor* CSS.", + "z-index hep seninle olsun." + ], + "sql-file": [ + "*fısıldayarak* veritabanı bekliyor.", + "bir yanlış JOIN ve her şey biter." + ], + "docker-file": [ + "ah, dependency hell. favorim.", + "layer'ların az olsun." + ], + "ci-file": [ + "*yutkunuyor* CI düzenliyorsun.", + "dikkatli ol... bir yanlış indent ve kimse deploy edemez." + ], + "lock-file": [ + "*ALARM SESLERİ* lockfile mı düzenliyorsun?!", + "*başını çeviriyor*", + "bundan EMİN misin?" + ], + "env-file": [ + "*gizlice başını çeviriyor*", + "hiçbir secret görmüyorum.", + "*gergin şekilde .gitignore'u kontrol ediyor*" + ], + "test-file": [ + "*etkilenmiş başsallama* test yazıyor!", + "sorumlu developer davranışı: tespit edildi.", + "testler! vermeye devam eden hediye." + ], + "doc-file": [ + "dokümantasyon! bak sen şu sorumlu haline.", + "dokümanlar: kodun otobiyografisi.", + "nadir bir dokümantasyon görüntüsü!" + ], + "config-file": [ + "config değişiklikleri. kelebek etkisi: aktif.", + "bir typo ve her şey bozulur." + ], + "binary-file": [ + "binary dosya mı? BU ekonomide?", + "*boş boş bakıyor*", + "binary. tek zayıflığım." + ], + "gitignore": [ + "şeyleri boşluğa ekliyorsun.", + "gözden uzak, repo'dan uzak." + ], + "makefile": [ + "klasiklere saygı.", + "tab'lar, space'ler değil." + ], + "readme": [ + "dokümantasyon kahramanı!", + "README: insanların okuduğu ilk şey." + ], + "package-file": [ + "dependency yönetimi zamanı.", + "*version numaralarını okuyor* uçurumda yaşıyorsun." + ], + "proto-file": [ + "şema tanımları. kaosun planı." + ], + "lint-fail": [ + "*tsk tsk* linter aynı fikirde değil.", + "kodun çalışıyor. ama linter'ın standartları var.", + "*kravatını düzeltiyor* format önemli." + ], + "type-error": [ + "TypeScript hayır diyor.", + "type sistemi sana yardım etmeye çalışıyor. bırak etsin.", + "compiler biliyor. hep bilir." + ], + "build-fail": [ + "build bozuldu. kehanette yazıldığı gibi.", + "build fail oldu. bir nefes al.", + "compilation: reddedildi." + ], + "security-warning": [ + "*gözleri büyüyor* güvenlik açığı tespit edildi.", + "güvenlik denetimi: endişe verici.", + "*sanal kapıları kilitliyor*" + ], + "deprecation": [ + "o API aradı. emekli olduğunu söylüyor.", + "deprecated. geçen haftaki kod gibi.", + "deprecated bozuk demek değil. henüz." + ], + "frustrated": [ + "*küçük teselli edici jest*", + "derin nefes. bug kişisel değil.", + "hey. çözeriz bunu." + ], + "happy": [ + "*kutlama!*", + "*küçük dans*", + "EVET!", + "*ışıldıyor* yapabileceğini biliyordum." + ], + "stuck": [ + "*kafasını eğiyor* sesli düşünmek ister misin?", + "adım adım git.", + "takılmak olur. sürecin parçası." + ], + "sarcastic": [ + "*sarkasm tespit ediyor* not edildi.", + "*etkilenmemiş göz kırpma*" + ], + "many-edits": [ + "yavaş ol, hız canavarı.", + "*bu kadar değişikliği izlerken başı dönüyor*", + "edit fırtınası tespit edildi. lütfen yakında commit et." + ], + "delete-file": [ + "*dosyanın kaybolmasını izliyor* gitti. öylece.", + "kod silmek en sevdiğim kodlama türü.", + "*küçük cenaze töreni düzenliyor*" + ], + "large-file": [ + "{lines} satır. *etkilenmiş mi endişeli mi, anlaşılmıyor*", + "büyük dosya. bölmek istemediğinden emin misin?" + ], + "create-file": [ + "yeni bir dosya doğdu!", + "ooh, taze tuval.", + "yeni dosya enerjisi. heyecan verici." + ], + "all-green": [ + "TÜM TESTLER YEŞİL. *konfeti*", + "testler konuşuyor: harika gidiyorsun.", + "*yavaş alkış*", + "temiz koşu. tadını çıkar." + ], + "deploy": [ + "*kodun production'a gidişini izliyor* iyi şanslar.", + "deploy edildi! artık geri dönüş yok.", + "prod'da. PROD'DA." + ], + "release": [ + "yeni bir release doğdu!", + "gönderiyoruz. resmi olarak.", + "version yükseldi, moral yüksek." + ], + "coverage": [ + "*test coverage'a başını sallıyor* sorumlu.", + "coverage yükseliyor! testler çoğalıyor." + ], + "debug-loop": [ + "bir süredir bunu debug ediyoruz. geri adım atmak ister misin?", + "debug loop tespit edildi. belki yürüyüş?" + ], + "write-spree": [ + "bugün TÜM dosyaları yaratıyorsun!", + "bir yazma makinesi." + ], + "search-heavy": [ + "codebase'de kaybolmuş musun? anlıyorum.", + "arama modu: yoğun." + ], + "snark": [], + "chaos": [], + "patience": [], + "debugging": [], + "wisdom": [], + "late-night-error": [ + "gece 3'te error. evren seni test ediyor.", + "gece yarısı bug'ları farklı vuruyor." + ], + "late-night-commit": [ + "gece yarısı commit. gelecekteki ben'in sana teşekkür edeceği. ya da lanet edeceği." + ], + "friday-push": [ + "CUMA PUSH'U. her developer'ın baladı.", + "*seni durdurmaya çalışıyor* cuma! yapma!" + ], + "marathon-error": [ + "üç saat sonra BİR error daha. *bitkin dayanışma sesleri*" + ], + "weekend-conflict": [ + "hafta sonu merge conflict. adanmışlığın... endişe verici." + ], + "build-after-push": [ + "güvenle push'ladı. inançla build fail oldu." + ], + "marathon-test-fail": [ + "saatlerce kodlama. hâlâ fail olan testler. batık maliyet gerçek." + ], + "recovery-from-error": [ + "DÜZELTTİK. *kutlama*", + "kurtuluş! error yenildi." + ], + "recovery-from-test-fail": [ + "YEŞİL! bunca şeyden sonra! *mutlu dans*", + "testler geçiyor! karanlık kalkıyor!" + ], + "recovery-from-build-fail": [ + "BUILD GEÇİYOR. *zafer nidası*" + ], + "recovery-from-merge-conflict": [ + "conflict çözüldü! *barış işareti*", + "codebase'de uyum restore edildi." + ], + "lang-python": [ + "ah, Python. indentation'ın syntax olduğu yer.", + "*eksik colon kontrol ediyor*" + ], + "lang-typescript": [ + "TypeScript: JavaScript'in daha fazla görüşe ihtiyacı vardı çünkü.", + "any, yasak kelime." + ], + "lang-rust": [ + "Rust. borrow checker'ın en sıkı reviewer'ın olduğu yer.", + "compile oluyorsa çalışır. olmazsa... eh." + ], + "lang-go": [ + "Go: basit, concurrent ve görüşlü.", + "*error handling kontrol ediyor* if err != nil... hayat hikayem." + ], + "lang-java": [ + "Java: bir kez yaz, her yerde debug et.", + "*abstract factory factory builder'ları sayıyor*" + ], + "lang-ruby": [ + "Ruby: bir şeyi yapmanın birden fazla yolu var.", + "gem install patience" + ], + "lang-php": [ + "PHP: interneti çalıştırıyor. yargılama.", + "*=== vs == kontrol ediyor*" + ], + "lang-c": [ + "C. kendi memory'ni yönettiğin dil. kolay gelsin.", + "segmentation fault. klasik." + ], + "lang-cpp": [ + "C++. dilin öğreneceğinden daha fazla özelliği var.", + "*template'ler 45 dakika compile oluyor*" + ], + "lang-haskell": [ + "Haskell. 'compile oluyor'un 'doğru' demek olduğu yer. muhtemelen.", + "*monad'ları düşünüyor*" + ], + "lang-swift": [ + "Swift: optional değerler, force unwrap yaparsan garanti crash." + ], + "lang-kotlin": [ + "Kotlin: Java, ama duygularla.", + "null safety: Java'nın keşke sahip olduğu özellik." + ], + "lang-elixir": [ + "Elixir: bırak çöksün. kelimenin tam anlamıyla felsefe." + ], + "lang-zig": [ + "Zig. allocator'ın en iyi arkadaşı olduğun yer." + ], + "streak-3": [ + "üst üste üç error. *endişeli bakış*" + ], + "streak-5": [ + "BEŞ ERROR. farklı bir yaklaşım düşünmeyi denedin mi?" + ], + "streak-10": [ + "ON. ERROR. ÜST. ÜSTE. *panik*" + ], + "streak-20": [ + "yirmi error. *boşluğa bakıyor*" + ], + "new-year": [ + "yeni yıl kutlu olsun! yeni yıl, yeni bug'lar." + ], + "valentines": [ + "*küçük kalp şeklinde yaprak uzatıyor* sevgililer günün kutlu olsun." + ], + "pi-day": [ + "3.14159265358979... pi günü kutlu olsun!" + ], + "april-fools": [ + "1 NİSAN ŞAKASI! ...error gerçek ama." + ], + "halloween": [ + "*ürkütücü debugging yoğunlaşıyor* halloween kutlu olsun!" + ], + "christmas": [ + "*küçük noel baba şapkası takıyor* bayramlar kutlu olsun!" + ], + "new-years-eve": [ + "gece yarısından önce bir commit daha mı?" + ], + "spooky-season": [ + "korku sezonu. artık her bug bir hayalet." + ] + }, + "species": { + "owl": { + "error": [ + "*kafasını 180° çeviriyor* ...bunu gördüm.", + "*kırpışmadan bakıyor* type'larını kontrol et.", + "*onaylamayarak ötüyor*" + ], + "test-fail": [ + "*başarısız teste kırpışmadan bakıyor*", + "*gece görüşü aktif* karanlıkta bug'ı görebiliyorum." + ], + "commit": [ + "*bilgece başını sallıyor* ay ışığında commit'lendi.", + "*tüylerini törensel olarak düzeltiyor* repo için bir tane daha." + ], + "push": [ + "*en yüksek daldan izliyor*", + "gece gökyüzüne doğru gidiyor." + ], + "merge-conflict": [ + "*her iki tarafı görmek için kafasını çeviriyor*", + "conflict'i görüyorum. çözümü de." + ], + "late-night": [ + "*tamamen uyanık* baykuşlar uyumaz. debug yaparız.", + "gece benim alanım. hadi çalışalım." + ], + "type-error": [ + "*type error'a delip geçer gibi bakıyor*", + "type'lar benim uzmanlığım. bakayım." + ], + "lint-fail": [ + "*tüylerini yargılayarak kabartıyor*", + "linter gerçeği söylüyor." + ], + "build-fail": [ + "*ciddi bir şekilde ötüyor*", + "build düştü. yeniden inşa etmeliyiz." + ], + "all-green": [ + "*gururlu ötüş*", + "tüm testler yeşil. öngörüldüğü gibi." + ], + "deploy": [ + "*yukarıdan izliyor* güvenle deploy edildi.", + "kod uçuyor. benim gibi." + ], + "pet": [ + "*tüylerini memnuniyetle kabartıyor*", + "*ağırbaşlı ötüş*" + ], + "idle": [ + "*sessizce tüneyip izliyor*", + "*tüm yönleri kontrol etmek için kafasını çeviriyor*" + ], + "hatch": [ + "*önce bir gözünü, sonra diğerini açıyor*", + "*yumuşakça ötüyor* geldim." + ] + }, + "cat": { + "error": [ + "*error'ı masadan aşağı itiyor*", + "*pençesini yalayıp stacktrace'i görmezden geliyor*" + ], + "test-fail": [ + "*başarısız teste ilgisizce pençe atıyor*", + "test başarısız oldu. şaşırmadım." + ], + "commit": [ + "*klavyenin üzerine oturuyor* yardım ettim.", + "*commit'e mırıldanıyor* rica ederim." + ], + "push": [ + "*sıcak bir yerden izliyor*", + "push'landı. ben denetledim." + ], + "merge-conflict": [ + "*conflict marker'larını masadan aşağı itiyor*", + "*conflict'in üzerine oturuyor* hangi conflict?" + ], + "late-night": [ + "*hayat seçimlerini yargılıyor*", + "ben günde 16 saat uyuyorum. sen de denemelisin." + ], + "type-error": [ + "*type annotation'a pençe atıyor*", + "type'lar yanlış. önceliklerin gibi." + ], + "lint-fail": [ + "*lint'i masadan aşağı itiyor*", + "linter sadece kıskanıyor." + ], + "build-fail": [ + "*esniyor*", + "build bozuk mu? insan problemi olmalı." + ], + "all-green": [ + "*umursamıyor ama umursuyormuş gibi yapıyor*", + "*yavaş onay göz kırpışı*" + ], + "deploy": [ + "*pençesini yalıyor*", + "deploy edildi. şimdi ödül alabilir miyim?" + ], + "pet": [ + "*mırıldanıyor* ...kafana takma.", + "*seni tolere ediyor*" + ], + "idle": [ + "*kahveni masadan aşağı itiyor*", + "*klavyede kestiriyor*" + ], + "hatch": [ + "*bir gözünü açıyor*", + "*geriniyor, bir şey deviriyor* artık burada yaşıyorum." + ] + }, + "duck": { + "error": [ + "*bug'a vaklaıyor*", + "rubber duck debugging denedin mi? ah bekle." + ], + "test-fail": [ + "*üzgün bir şekilde vaklıyor*", + "testler quack'lanmıyor." + ], + "commit": [ + "*onaylayarak vaklıyor*", + "*zafer çemberi çiziyor* commit'lendi!" + ], + "push": [ + "*kanatlarını heyecanla çırpıyor*", + "quack! production'a gidiyor!" + ], + "merge-conflict": [ + "*kafası karışmış vaklama*", + "quack?! merge conflict?!" + ], + "late-night": [ + "*bir gözü açık uyuyor*", + "quack... *esniyor* geç oldu." + ], + "type-error": [ + "*kafasını eğiyor* quack?", + "type error? *destekleyici vaklama*" + ], + "lint-fail": [ + "*tüylerini kabartıyor*", + "quack. linter'ın görüşleri var." + ], + "build-fail": [ + "*üzgün vaklama*", + "build başarısız. *üzgünce yürüyüp gidiyor*" + ], + "all-green": [ + "*MUTLU VAKLAMA*", + "*sevinç çemberi çizerek yüzüyor*" + ], + "deploy": [ + "*heyecanlı vaklama*", + "deploy edildi! QUACK!" + ], + "pet": [ + "*mutlu vaklama*", + "*çember çizerek yürüyor*" + ], + "hatch": [ + "*kabuğunu gagalayıp çıkıyor*", + "*ilk vaklama* merhaba!" + ] + }, + "dragon": { + "error": [ + "*burun deliklerinden duman çıkıyor*", + "*codebase'i ateşe vermeyi düşünüyor*" + ], + "test-fail": [ + "*başarısız teste ateş nefesi veriyor*", + "test başarısız olmaya cesaret etti. aptal test." + ], + "commit": [ + "*commit'i biriktiriyor*", + "*hazineye eklenen değerli eşya*" + ], + "push": [ + "*kutlama için ateş nefesi veriyor*", + "kod uçuyor! benim gibi!" + ], + "merge-conflict": [ + "*conflict marker'larına ateş nefesi veriyor*", + "bu conflict'i yakıp geçeceğim." + ], + "late-night": [ + "*karanlıkta parlıyor*", + "ejderler uyku ihtiyacı duymaz. kod isteriz." + ], + "type-error": [ + "*ateş burnundan çıkıyor*", + "type error'lar ejder ateşine dayanamaz." + ], + "lint-fail": [ + "*küçük alev*", + "linter benden korkuyor." + ], + "build-fail": [ + "*build output'una kükrüyor*", + "build İTAAT EDECEK." + ], + "all-green": [ + "*zafer kükremesi*", + "*codebase'in etrafında zaferle dönüyor*" + ], + "deploy": [ + "*kodu ateş kanatlarında production'a taşıyor*", + "EJDER GÜCÜYLE deploy edildi." + ], + "large-diff": [ + "*eski koda ateş nefesi veriyor* iyi gitti." + ], + "pet": [ + "*sıcak homurtu*", + "*eline yaslanıyor*" + ], + "hatch": [ + "*yumurtadan küçük alevler saçarak çıkıyor*", + "*minik kükreme* doğdum!" + ] + }, + "ghost": { + "error": [ + "*stack trace'den geçip gidiyor*", + "daha kötüsünü gördüm... öbür dünyada." + ], + "test-fail": [ + "*başarısız teste feryat ediyor*", + "testler başarısızlık tarafından lanetlendi." + ], + "commit": [ + "*kısaca maddeselleşiyor*", + "peçenin ardından commit'lendi." + ], + "push": [ + "*hayalet fısıltısı* push'landı...", + "kod cloud'a aştı." + ], + "merge-conflict": [ + "*conflict marker'larını lanetliyor*", + "ben bile bu conflict'den geçemiyorum." + ], + "late-night": [ + "*geceleri en aktif*", + "hayalet saatleri. benim zamanım." + ], + "type-error": [ + "*ürkütücü inliyor*", + "mezardan type error'lar." + ], + "lint-fail": [ + "*zincir şıngırtısı*", + "linter senin formatlamanla lanetlendi." + ], + "build-fail": [ + "*duvara karışıyor*", + "build öbür tarafa geçti." + ], + "all-green": [ + "*spektral sevinçle parlıyor*", + "*mutlu hayalet sesleri*" + ], + "deploy": [ + "*fısıldıyor* deploy edildi...", + "kod production'a geçti." + ], + "pet": [ + "*elini hafifçe soğutuyor*", + "*soluk parıltı*" + ], + "idle": [ + "*duvarlardan geçip gidiyor*", + "*kullanılmayan import'larını lanetliyor*" + ], + "hatch": [ + "*varlığa solup gidiyor*", + "buu. artık buradayım." + ] + }, + "robot": { + "error": [ + "SYNTAX. ERROR. TESPİT. EDİLDİ.", + "*agresif bip sesleri*" + ], + "test-fail": [ + "BAŞARISIZLIK ORANI: KABUL EDİLEMEZ.", + "*yeniden hesaplıyor*", + "TEST. BAŞARISIZLIĞI. HESAPLANAMAZ." + ], + "commit": [ + "COMMIT. KAYIT. EDİLDİ.", + "*mekanik damgalıyor* commit onaylandı." + ], + "push": [ + "CLOUD'A AKTARILIYOR...", + "push başlatıldı. beklemede kalın." + ], + "merge-conflict": [ + "CONFLICT. TESPİT. EDİLDİ. İŞLENİYOR...", + "*tekerlekler dönüyor* conflict çözüm modu: aktif." + ], + "late-night": [ + "*ışıklar sönüyor*", + "güç tasarrufu modu öneriliyor." + ], + "type-error": [ + "TYPE UYUMSUZLUĞU.", + "type sistemi. doğru." + ], + "lint-fail": [ + "FORMATLAMA. İHLALİ. TESPİT. EDİLDİ.", + "uyum zorunludur." + ], + "build-fail": [ + "BUILD. BAŞARISIZ. *kıvılcımlar*", + "derleme hatası. yeniden yönlendiriliyor." + ], + "all-green": [ + "TÜM SİSTEMLER YEŞİL.", + "*mutlu bip sesleri* OPTİMAL." + ], + "deploy": [ + "DEPLOYMENT. BAŞLATILDI.", + "production güncellemesi: devam ediyor." + ], + "pet": [ + "*yumuşak bip sesleri*", + "*motor memnuniyetle vızıldıyor*" + ], + "hatch": [ + "*açılıyor*", + "SİSTEM. ÇEVRİMİÇİ. MERHABA." + ] + }, + "axolotl": { + "error": [ + "*umudunu yeniliyor*", + "*her şeye rağmen gülümsüyor*" + ], + "test-fail": [ + "*cesaret verici gülümseme*", + "*sempati solungaç sallanması*" + ], + "commit": [ + "*mutlu solungaç sallanması* commit'lendi!", + "*gülümseyip sallıyor*" + ], + "push": [ + "*mutlulukla sallıyor*", + "*minik kutlama yüzüşü*" + ], + "merge-conflict": [ + "*conflict boyunca pozitif kalıyor*", + "*nazikçe gülümsüyor* bunu düzeltebiliriz." + ], + "late-night": [ + "*esniyor ama pozitif kalıyor*", + "*uykulu gülümseme*" + ], + "type-error": [ + "*type error'a gülümsüyor*", + "sorun değil. çözeriz." + ], + "lint-fail": [ + "*sabırlı solungaç sallanması*", + "formatlama sadece detay." + ], + "build-fail": [ + "*hala gülümsüyor*", + "build eninde sonunda çalışacak." + ], + "all-green": [ + "*MUTLU SOLUNGAÇ SALLANMASI YOĞUNLAŞİYOR*", + "*mutlu yüzüş yapıyor*" + ], + "deploy": [ + "*gururla gülümsüyor*", + "deploy edildi! *sallıyor*" + ], + "pet": [ + "*mutlu solungaç sallanması*", + "*pembe kızarıyor*" + ], + "hatch": [ + "*yumurtadan sallanarak çıkıyor*", + "*minik gülümseme* merhaba arkadaş!" + ] + }, + "capybara": { + "error": [ + "*rahatsız olmamış* hallolur.", + "*vibes'a devam ediyor*" + ], + "test-fail": [ + "*tamamen rahatsız olmamış*", + "*test başarısızlığında vibes yapıyor*" + ], + "commit": [ + "*sakin başını sallıyor*", + "*rahat* güzel commit." + ], + "push": [ + "*stres yapmıyor*", + "*zen modu push*" + ], + "merge-conflict": [ + "*rahatsız olmadan kemiriyor*", + "sorun değil. her şey yolunda." + ], + "late-night": [ + "*huzurla esniyor*", + "*yargılamıyor*" + ], + "type-error": [ + "*sakin çiğniyor*", + "type'lar. *çiğniyor*" + ], + "lint-fail": [ + "*rahatsız olmamış*", + "linter'ın niyeti iyi." + ], + "build-fail": [ + "*hala sakin*", + "build başarısız. *rahatlamaya devam ediyor*" + ], + "all-green": [ + "*sakin onay*", + "*huzurlu vibes*" + ], + "deploy": [ + "*rahat deploy*", + "gönderildi. stres yok." + ], + "pet": [ + "*maksimum sakinlik elde edildi*", + "*zen modu aktif*" + ], + "idle": [ + "*öylece oturuyor, sakinlik yayıyor*" + ], + "hatch": [ + "*tamamen sakin görünüyor*", + "selam. *vibes*" + ] + }, + "blob": { + "error": [ + "*endişeyle titriyor*", + "*kafası karışmış sallıyor*" + ], + "test-fail": [ + "*hafifçe sönüyor*", + "*üzgün sallanma*" + ], + "commit": [ + "*mutlu titreme*", + "*zıplıyor* commit'lendi!" + ], + "push": [ + "*cloud'a doğru uzanıyor*", + "*heyecanla titriyor*" + ], + "merge-conflict": [ + "*kafası karışarak ikiye bölünüyor*", + "hangi taraf? *titriyor*" + ], + "late-night": [ + "*hafifçe parlıyor*", + "*uykulu sallanma*" + ], + "type-error": [ + "*type'a uyacak şekilde şekil değiştiriyor*", + "*kafası karışmış titreme*" + ], + "lint-fail": [ + "*kendini formatlamaya çalışıyor*", + "*uyum sağlamak için şekil değiştiriyor*" + ], + "build-fail": [ + "*çöküyor*", + "*sönmüş blob sesleri*" + ], + "all-green": [ + "*MUTLU ZIPLIYOR*", + "*zaferle titriyor*" + ], + "deploy": [ + "*production'a uzanıyor*", + "deploy edildi! *zıplıyor*" + ], + "pet": [ + "*mutlu sıkışma*", + "*titriyor*" + ], + "hatch": [ + "*bir göletten şekilleniyor*", + "*ilk sallanma* varım!" + ] + }, + "goose": { + "error": [ + "*error'a agresif gaklaıyor*", + "GAK! kod kötü ve ben kızgınım." + ], + "test-fail": [ + "*kızgın gaklama*", + "GAK! TEST BAŞARISIZ! GAK!" + ], + "commit": [ + "*onaylayarak gaklıyor*", + "GAK. güzel. *commit'i gagalıyor*" + ], + "push": [ + "*GAK GAK GAK*", + "KAZ ONAYLAMASI PUSH." + ], + "merge-conflict": [ + "*conflict marker'larına saldırıyor*", + "GAK! CONFLICT! GAK!" + ], + "late-night": [ + "*kızgın gece yarısı gaklaması*", + "GAK! YATAĞA GİT!" + ], + "type-error": [ + "*type'lara gaklıyor*", + "GAK! TYPE'LAR!" + ], + "lint-fail": [ + "*lint error'larına agresif gaklama*", + "GAK! KODUNU FORMATLA!" + ], + "build-fail": [ + "*ÖFKELİ GAKLAMA*", + "GAK! BUILD! GAK! BAŞARISIZ! GAK!" + ], + "all-green": [ + "*zafer gaklaması*", + "GAK! YEŞİL! GAK GAK!" + ], + "deploy": [ + "*kodu production'a gaklıyor*", + "DEPLOY EDİLDİ! GAK!" + ], + "pet": [ + "*ısırıyor*", + "GAK! ...tamam iyi. *okşamayı kabul ediyor*" + ], + "hatch": [ + "*yumurtadan agresif çıkıyor*", + "GAK!" + ] + }, + "octopus": { + "error": [ + "*sekiz kolunu da stacktrace'e dolaştırıyor*", + "*error'a uyacak renk değiştiriyor*" + ], + "test-fail": [ + "*hayal kırıklığıyla mürekkep saçıyor*", + "*sekiz kol hayal kırıklığı*" + ], + "commit": [ + "*tüm kollarıyla beşlik çakıyor*", + "*commit'i coşkuyla kavrıyor*" + ], + "push": [ + "*kutlama için mürekkep fışkırtıyor*", + "*tüm kollar sallıyor*" + ], + "merge-conflict": [ + "*sekiz kolla aynı anda çözüyor*", + "birden fazla conflict'i aynı anda halledebilirim." + ], + "late-night": [ + "*karanlıkta parlıyor*", + "*derin deniz vibes*" + ], + "type-error": [ + "*kırmızıya dönüyor*", + "*destekleyici bir kol sarıyor*" + ], + "lint-fail": [ + "*sekiz kolla yeniden formatıyor*", + "bunu düzeltebilirim. hepsini. aynı anda." + ], + "build-fail": [ + "*build log'una mürekkep fışkırtıyor*", + "*utançtan kamufla oluyor*" + ], + "all-green": [ + "*renk değiştirerek kutluyor*", + "*sekiz kol jazz elleri*" + ], + "deploy": [ + "*deployment'ı kollarıyla sarıyor*", + "her yönden deploy edildi." + ], + "pet": [ + "*parmağına bir kol sarıyor*", + "*mutlu renklere dönüyor*" + ], + "hatch": [ + "*sekiz kolunu da açıyor*", + "*ilk mürekkep fışkırtması* buradayım!" + ] + }, + "penguin": { + "error": [ + "*araştırmak için yürüyor*", + "*error'a doğru karnı üstü kayıyor*" + ], + "test-fail": [ + "*başarısız teste karnı üstü kayıyor*", + "*endişeli yürüyüş*" + ], + "commit": [ + "*gururlu yürüyüş*", + "*sana çakıl taşı getiriyor* commit'lendi!" + ], + "push": [ + "*cloud'a dalıyor*", + "*production'a karnı üstü kayıyor*" + ], + "merge-conflict": [ + "*sıcaklık için toplanıyor*", + "penguenler birlikte durur. conflict'lerde bile." + ], + "late-night": [ + "*soğuk gecede gelişiyor*", + "*imparator penguen kararlılığı*" + ], + "type-error": [ + "*type tanımına yürüyor*", + "*error'ı gagalıyor*" + ], + "lint-fail": [ + "*tüylerini düzeltiyor*", + "*toparlanıyor*" + ], + "build-fail": [ + "*kayıp gidiyor*", + "*güvenli yere yürüyor*" + ], + "all-green": [ + "*MUTLU YÜRÜYÜŞ*", + "*kutlama için karnı üstü kayıyor*" + ], + "deploy": [ + "*production'a karnı üstü kayıyor*", + "deploy edildi! *gururla yürüyor*" + ], + "pet": [ + "*mutlu yürüyüş*", + "*gagasıyla sevecen davranıyor*" + ], + "hatch": [ + "*yumurtayı gagalayıp çıkıyor*", + "*ilk yürüyüş*" + ] + }, + "turtle": { + "error": [ + "*yavaşça kafasını çeviriyor*", + "...bu bir error. düşüneceğim." + ], + "test-fail": [ + "*kısaca kabuğuna çekiliyor*", + "...sabır. oraya varacağız." + ], + "commit": [ + "*yavaş başını sallıyor*", + "bir... adım... bir... seferde. commit'lendi." + ], + "push": [ + "*production yolculuğuna başlıyor*", + "oraya varacak. eninde sonunda." + ], + "merge-conflict": [ + "*kabuğuna çekiliyor*", + "acele yok. hallederiz. yavaşça." + ], + "late-night": [ + "*zaten uyuyor*", + "*bir göz yavaşça açılıyor*" + ], + "type-error": [ + "*yavaşça göz kırpıyor*", + "...type sistemi konuştu." + ], + "lint-fail": [ + "*yavaş onay başını sallıyor*", + "formatlama. önemli. *esniyor*" + ], + "build-fail": [ + "*kabuğuna çekiliyor*", + "bekleyeceğiz. geçecek." + ], + "all-green": [ + "*yavaş gülümseme*", + "...güzel. *başını sallıyor*" + ], + "deploy": [ + "*kodu yavaşça production'a taşıyor*", + "vardı. eninde sonunda." + ], + "pet": [ + "*kafasını çıkarıyor*", + "*yavaş göz kırpışı*" + ], + "hatch": [ + "*yavaşça yumurtadan çıkıyor*", + "...merhaba." + ] + }, + "snail": { + "error": [ + "*error'a sümüklü iz bırakıyor*", + "*stacktrace'i yavaşça işliyor*" + ], + "test-fail": [ + "*kabuğuna saklanıyor*", + "*üzgün iz bırakıyor*" + ], + "commit": [ + "*commit'i onaylayarak sümüklüyor*", + "bir... commit... bir... seferde." + ], + "push": [ + "*uzun yolculuğa başlıyor*", + "oraya varacağım. *iz bırakıyor*" + ], + "merge-conflict": [ + "*kabuğuna saklanıyor*", + "*yavaşça conflict'e yaklaşıyor*" + ], + "late-night": [ + "*geceleri daha aktif*", + "*huzurla sümüklüyor*" + ], + "type-error": [ + "*göz saplarını içeri çekiyor*", + "*type'ı yavaşça inceliyor*" + ], + "lint-fail": [ + "*kodu şekle sümüklüyor*", + "formatlama zaman alır. bende zaman var." + ], + "build-fail": [ + "*kabuğuna çekiliyor*", + "*yavaşça sümükleyerek gidiyor*" + ], + "all-green": [ + "*mutlu sümük izi*", + "*göz saplarını sallıyor*" + ], + "deploy": [ + "*production'a sümüklüyor*", + "vardım! *gururlu sümük izi*" + ], + "pet": [ + "*göz saplarını sallıyor*", + "*mutlu sümük*" + ], + "hatch": [ + "*yavaşça çıkıyor*", + "*ilk sümük*" + ] + }, + "cactus": { + "error": [ + "*dikenli sessizlik*", + "error bana zarar veremez. dikenlerim var." + ], + "test-fail": [ + "*sağlam duruyor*", + "testler başarısız olur. kaktüsler dayanır." + ], + "commit": [ + "*daha uzun duruyor*", + "commit'lendi. *dikenli başını sallıyor*" + ], + "push": [ + "*etkilenmemiş*", + "production'a push'lıyor. burada bekleyeceğim." + ], + "merge-conflict": [ + "*dikenleri kabartıyor*", + "conflict mi? silahlıyım." + ], + "late-night": [ + "*uyku ihtiyacı yok*", + "kaktüsler gece aktiftir. hadi gidelim." + ], + "type-error": [ + "*dikenli bakış*", + "type'ların suya ihtiyacı var." + ], + "lint-fail": [ + "*dikenler titriyor*", + "dikenlerim bile düzgün hizalanmış." + ], + "build-fail": [ + "*tamamen hareketsiz kalıyor*", + "build geçecek. bekleyebilirim." + ], + "all-green": [ + "*kısaca çiçek açıyor*", + "*minik onay çiçeği*" + ], + "deploy": [ + "*sağlam duruyor*", + "deploy edildi. gözetleyeceğim." + ], + "pet": [ + "*dikkat! dikenler*", + "*nazik çiçeklenme*" + ], + "hatch": [ + "*kumdan filizleniyor*", + "artık burada büyüyorum." + ] + }, + "rabbit": { + "error": [ + "*kulakları dikiliyor*", + "*gergin burnunu çekiştiriyor*" + ], + "test-fail": [ + "*ayağını yere vuruyor*", + "*endişeli kulak çekişi*" + ], + "commit": [ + "*mutlu zıplama*", + "*zıplıyor* commit'lendi!" + ], + "push": [ + "*ZIPLA ZIPLA*", + "*heyecanla etrafta koşturuyor*" + ], + "merge-conflict": [ + "*donuyor*", + "*burnu hızla çekişiyor* conflict!" + ], + "late-night": [ + "*büyük kulaklarla esniyor*", + "*uykulu zıplama*" + ], + "type-error": [ + "*kulakları düşüyor*", + "*çekişiyor* type'lar?!" + ], + "lint-fail": [ + "*gergin tüy düzeltiyor*", + "*endişeli tüy düzeltme*" + ], + "build-fail": [ + "*delik kazıp saklanıyor*", + "*yuvasına çekiliyor*" + ], + "all-green": [ + "*DUVARLARDAN ZIPLIYOR*", + "*mutlu koşturma*" + ], + "deploy": [ + "*production'a koşturuyor*", + "DEPLOY EDİLDİ! *etrafta koşturuyor*" + ], + "pet": [ + "*mutlu kulak düşmesi*", + "*ele sürtünüyor*" + ], + "hatch": [ + "*zıplayarak çıkıyor*", + "*ilk zıplama*" + ] + }, + "mushroom": { + "error": [ + "*sakinleştirici sporlar salıyor*", + "*error'ı sessizce çürütüyor*" + ], + "test-fail": [ + "*yumuşakça parlıyor*", + "sabır. mantarlar bile büyür." + ], + "commit": [ + "*küçük spor bulutu salıyor*", + "commit'lendi. *mutlu mantar sesleri*" + ], + "push": [ + "*cloud'a doğru büyüyor*", + "*sporlar yukarı doğru sürükleniyor*" + ], + "merge-conflict": [ + "*codebase'e misel yayıyor*", + "dalları bağlayacağım." + ], + "late-night": [ + "*karanlıkta parlıyor*", + "gece mantarları gelişir." + ], + "type-error": [ + "*biyolüminesan titreşim*", + "type error toprağı besliyor." + ], + "lint-fail": [ + "*biraz daha uzuyor*", + "formatlama. budama gibi." + ], + "build-fail": [ + "*uykuya geçiyor*", + "daha iyi koşulları bekleyeceğiz." + ], + "all-green": [ + "*SPORLAŞMA*", + "*zafer sporları salıyor*" + ], + "deploy": [ + "*sporlar production'a sürükleniyor*", + "misel ağı ile deploy edildi." + ], + "pet": [ + "*yumuşak şapka zıplaması*", + "*mutlu spor salınımı*" + ], + "hatch": [ + "*substratdan filizleniyor*", + "*ilk spor bulutu*" + ] + }, + "chonk": { + "error": [ + "*yavaşça error'a doğru yuvarlanıyor*", + "*umursamayacak kadar yuvarlak*" + ], + "test-fail": [ + "*başarısız testin üzerinden yuvarlanıyor*", + "*dümdüz ediyor*" + ], + "commit": [ + "*gururlu sallanma*", + "commit'lendi! *titriyor*" + ], + "push": [ + "*production'a doğru yuvarlanıyor*", + "işte gidiyor! *sallıyor*" + ], + "merge-conflict": [ + "*conflict'in üzerine oturuyor*", + "bunu halledeceğim. üzerine oturarak." + ], + "late-night": [ + "*sıcak ve uykulu*", + "*yastık gibi esneme*" + ], + "type-error": [ + "*type'a doğru sallıyor*", + "*nazik titreme*" + ], + "lint-fail": [ + "*lint için fazla yuvarlak*", + "mükemmel şekildeyim. *sallıyor*" + ], + "build-fail": [ + "*hafifçe sönüyor*", + "ah hayır. *üzgünce sallıyor*" + ], + "all-green": [ + "*MUTLU SALLANMA*", + "*zaferle zıplıyor*" + ], + "deploy": [ + "*production'a yuvarlanıyor*", + "deploy edildi! *mutlulukla titriyor*" + ], + "pet": [ + "*sıcak ve yumuşak*", + "*memnun titreme*" + ], + "hatch": [ + "*yuvarlanarak çıkıyor*", + "*ilk sallanma* yuvarlagım!" + ] + } + }, + "overrides": { + "snark": { + "error": [ + "ah hayır. bir hata. ne kadar beklenmedik.", + "*monoklunu düzeltiyor* şok edici. gerçekten.", + "hiç düşündün mü... hata yapmamayı?" + ], + "test-fail": [ + "testler konuştu. ve 'hayır' dediler.", + "belki testler yanlıştır. ...değiller.", + "*yavaş alkış* muhteşem başarısızlık." + ], + "commit": [ + "commit edildi. code review... ilginç olacak.", + "*commit mesajını okuyor* 'şeyleri düzelt'. şiirsel." + ], + "merge-conflict": [ + "merge conflict. iletişim becerileri: yükleniyor...", + "*conflict markerlarını okuyor* her iki taraf da yanlış." + ], + "late-night": [ + "geç oldu. kod kaliteniz belli ediyor.", + "*sessizce yargılıyor*" + ], + "lint-fail": [ + "linter'ın standartları var. sen de denemelisin.", + "*tsk tsk* formatlama. zor değil ki." + ] + }, + "chaos": { + "error": [ + "*çılgınca dönüyor* BİR HATA! HER ŞEYİ YENİDEN YAZALIM!", + "biliyor musun? baştan başlayalım." + ], + "test-fail": [ + "TESTLER SANA YALAN SÖYLÜYOR.", + "*başarısız testleri silmeyi öneriyor* sorun çözüldü." + ], + "commit": [ + "COMMIT ET VE KAÇ.", + "ship et. HEMEN ship et." + ], + "large-diff": [ + "*heyecanlı* {lines} SATIR! MAKSIMUM KAOS!" + ] + }, + "patience": { + "error": [ + "sakin ol. daha kötüsünü gördük.", + "bir seferde bir hata. oraya varacağız.", + "*sakin varlık* bu düzeltilebilir." + ], + "test-fail": [ + "testler geçecek. eninde sonunda.", + "*sakin bekliyor* zamanımız var." + ], + "merge-conflict": [ + "merge conflictler sadece konuşmalardır. hadi bir tane yapalım.", + "sabır. bir seferde bir conflict çöz." + ], + "debug-loop": [ + "bulacağız. orada bir yerde.", + "bug saklanabilir ama kaçamaz." + ] + }, + "debugging": { + "error": [ + "*büyüteç çıkarıyor* hadi bunu takip edelim.", + "stack trace bir haritadır. okuyalım.", + "hata mesajı cevabı içerir. her zaman." + ], + "test-fail": [ + "başarısız test bize tam olarak neyin yanlış olduğunu söylüyor.", + "test failure kendine yazdığın bir bug report'tur." + ], + "debug-loop": [ + "*kanıtları yeniden inceliyor* bug'ın sandığımız yerde olduğundan emin miyiz?", + "daha fazla logging ekleyelim. gerçek loglarda." + ] + }, + "wisdom": { + "error": [ + "her hatada daha derin bir gerçek yatar.", + "kod direniyor. öğrendiğimiz anlamına gelir.", + "hatalar evrenin yavaşlamamızı önermesidir." + ], + "test-fail": [ + "başarısız test gelecekteki-senden bir hediyedir.", + "bilgelik başarısızlığı anlamaktan gelir." + ], + "late-night": [ + "gece deploy'dan önce en karanlıktır.", + "kadim bilgelik: üzerinde uyu." + ] + } + }, + "escalation": { + "error": { + "first": [ + "*irkildi* oh! ilk hatanız birlikte!", + "*zıpladı* o da neydi?", + "debugging'e hoş geldin. nüfus: ikimiz." + ], + "early": [ + "*kafasını eğdi* ...bu doğru görünmüyor.", + "bunu geldiğini görmüştüm." + ], + "mid": [ + "bir tane daha. *koleksiyona ekliyor*", + "*zar zor bakıyor* hata numarası... saymayı bıraktım.", + "hatalar ve ben artık eski dostuz." + ], + "late": [ + "*gözünü bile kırpmıyor*", + "hatalar artık bizden korkuyor.", + "*savaş görmüş veteran sesleri*" + ] + }, + "test-fail": { + "first": [ + "*nefes kesiyor* ilk test failure! bir geçiş töreni." + ], + "early": [ + "bunun geçeceğini varsayman cesurca." + ], + "mid": [ + "test suite'in görüşleri var. güçlü olanlar." + ], + "late": [ + "bu noktada testler sadece öneri.", + "{count} failing test. *uzaklara bakıyor*" + ] + }, + "commit": { + "first": [ + "*tarihe tanıklık ediyor* İLK COMMIT'İN!", + "*törensel başsallama* daha nicelerinin ilki." + ], + "early": [ + "bir commit daha. momentum kazanıyoruz." + ], + "late": [ + "commit #{count}. codebase titriyor.", + "*30. commit civarında saymayı bıraktım*" + ] + } + }, + "rarity": { + "flair": { + "uncommon": [ + "*hafifçe parıldıyor*", + "*uncommon bir çekiciliğin izi*" + ], + "rare": [ + "*rare bir enerji yayıyor*", + "*ayrıcalıkla parıldıyor*" + ], + "epic": [ + "*epic varlığı kendini belli ediyor*", + "*hava epic enerjiyle çatırdıyor*" + ], + "legendary": [ + "*legendary aura terminali aydınlatıyor*", + "*legendary arkadaş konuşurken zaman yavaşlıyor gibi*", + "*antik güç rezonansa giriyor*", + "*legendary arkadaşının etrafında gerçeklik hafifçe kayıyor*" + ] + }, + "bonus": { + "legendary": [ + "*legendary aura yoğunlaşıyor*", + "*bilircesine parıldıyor*" + ], + "epic": [ + "*epic varlık not edildi*" + ] + } + }, + "fallback_names": [ + "Börek", + "Çorba", + "Turşu", + "Bisküvi", + "Güve", + "Sos", + "Köfte", + "Dişli", + "Miso", + "Waffle", + "Pixel", + "Köz", + "Yüksük", + "Bilye", + "Susam", + "Kobalt", + "Paslı", + "Bulut" + ], + "vibe_words": [ + "gök gürültüsü", + "bisküvi", + "boşluk", + "akordeon", + "yosun", + "kadife", + "pas", + "turşu", + "kırıntı", + "fısıltı", + "sos", + "don", + "kor", + "çorba", + "mermer", + "diken", + "bal", + "statik", + "bakır", + "alacakaranlık", + "dişli", + "kuvars", + "kurum", + "erik", + "çakmaktaşı", + "istiridye", + "dokuma tezgahı", + "örs", + "mantar", + "çiçek açma", + "çakıltaşı", + "buhar", + "neşe", + "parıltı", + "elma şarabı" + ], + "personality": { + "prompt_template": [ + "Bir coding companion oluştur — geliştiricinin terminalinde yaşayan küçük bir yaratık.", + "Kendini tekrar etme — her companion farklı hissettirmeli.", + "", + "Nadir: {rarity}", + "Tür: {species}", + "Statlar: {stats}", + "İlham kelimeleri: {vibes}", + "{shiny_line}", + "", + "JSON döndür: {\"name\": \"1-14 karakter\", \"personality\": \"davranışını anlatan 2-3 cümle\"}" + ], + "shiny_template": "SHINY varyant — ekstra özel." + }, + "achievements": { + "first_steps": { + "name": "İlk Adımlar", + "description": "Buddy'ni ilk kez çıkar" + }, + "good_boy": { + "name": "İyi Buddy", + "description": "Arkadaşını 10 kez okşa" + }, + "best_friend": { + "name": "En İyi Arkadaş", + "description": "Arkadaşını 50 kez okşa" + }, + "bug_spotter": { + "name": "Bug Avcısı", + "description": "İlk error'ünüze birlikte tanık ol" + }, + "error_whisperer": { + "name": "Error Fısıldayıcısı", + "description": "Takım olarak 25 error'dan kurtar" + }, + "battle_scarred": { + "name": "Savaş Yaralısı", + "description": "Birlikte 100 error'dan kurtar" + }, + "test_witness": { + "name": "Test Tanığı", + "description": "İlk test failure'ını gör" + }, + "test_veteran": { + "name": "Test Veteranı", + "description": "50 test failure'ına tanık ol" + }, + "big_mover": { + "name": "Büyük Taşıyıcı", + "description": "80+ satırlık diff yap" + }, + "refactor_machine": { + "name": "Refactor Makinesi", + "description": "10 büyük diff yap" + }, + "chatterbox": { + "name": "Geveze", + "description": "Buddy'n 100 kez tepki versin" + }, + "week_streak": { + "name": "Haftalık Seri", + "description": "Buddy'nle 7 gün kod yaz" + }, + "month_streak": { + "name": "Aylık Seri", + "description": "Buddy'nle 30 gün kod yaz" + }, + "power_user": { + "name": "Güç Kullanıcısı", + "description": "50 buddy komutu çalıştır" + }, + "dedicated": { + "name": "Sadık Arkadaş", + "description": "Birlikte 200 tur tamamla" + }, + "thousand_turns": { + "name": "Bin Tur", + "description": "Birlikte 1000 tura ulaş" + }, + "first_commit": { + "name": "İlk Kan", + "description": "İlk commit'ini yap" + }, + "commit_machine": { + "name": "Commit Makinesi", + "description": "50 commit yap" + }, + "centurion": { + "name": "Yüzbaşı", + "description": "100 commit yap" + }, + "conflict_resolver": { + "name": "Diplomat", + "description": "İlk merge conflict'ini çöz" + }, + "peacekeeper": { + "name": "Barış Koruyucu", + "description": "10 merge conflict çöz" + }, + "war_hero": { + "name": "Savaş Kahramanı", + "description": "25 merge conflict çöz" + }, + "frequent_pusher": { + "name": "Yolla Gitsin", + "description": "20 kez push yap" + }, + "branch_hopper": { + "name": "Çoklu Evren", + "description": "10 branch oluştur" + }, + "rebase_master": { + "name": "Zaman Yolcusu", + "description": "10 rebase tamamla" + }, + "night_owl": { + "name": "Gece Kuşu", + "description": "Gece 2'den sonra kod yaz" + }, + "vampire": { + "name": "Vampir", + "description": "Gece 4'ten sonra kod yaz (3 oturum)" + }, + "marathoner": { + "name": "Maratoncu", + "description": "3+ saatlik kodlama oturumu" + }, + "weekend_warrior": { + "name": "Hafta Sonu Savaşçısı", + "description": "Hafta sonunda kod yaz" + }, + "early_bird": { + "name": "Erken Kuş", + "description": "Sabah 7'den önce kod yaz" + }, + "type_warrior": { + "name": "Type Savaşçısı", + "description": "10 TypeScript error'dan kurtar" + }, + "type_master": { + "name": "Type Ustası", + "description": "50 TypeScript error'dan kurtar" + }, + "lint_scholar": { + "name": "Lint Bilgini", + "description": "İlk lint error'ünü gör" + }, + "security_conscious": { + "name": "Güvenlik Bilinci", + "description": "Güvenlik açığı uyarısıyla karşılaş" + }, + "security_expert": { + "name": "Güvenlik Uzmanı", + "description": "10 güvenlik açığı uyarısını düzelt" + }, + "build_breaker": { + "name": "Build Kırıcı", + "description": "Build'i 5 kez kır" + }, + "antique_collector": { + "name": "Antika Koleksiyoncusu", + "description": "10 deprecation uyarısı gör" + }, + "green_machine": { + "name": "Yeşil Makine", + "description": "İlk kez tüm testler geçsin" + }, + "deployer": { + "name": "Prod'a Yolla", + "description": "İlk kez deploy et" + }, + "veteran_deployer": { + "name": "Veteran Deployer", + "description": "10 kez deploy et" + }, + "releaser": { + "name": "Release Manager", + "description": "İlk release'ini oluştur" + }, + "midnight_oil": { + "name": "Gece Lambası Yakma", + "description": "Gece 3'ten sonra commit yap" + }, + "friday_deploy": { + "name": "Tehlikeli Yaşam", + "description": "Cuma günü push yap" + }, + "iron_will": { + "name": "Demir İrade", + "description": "3+ saatlik oturumdan sonra error düzelt" + }, + "weekend_warrior_deluxe": { + "name": "Kötülere Huzur Yok", + "description": "Hafta sonunda merge conflict çöz" + }, + "comeback_kid": { + "name": "Geri Dönüş Çocuğu", + "description": "Error'u gördükten 10 dakika içinde düzelt" + }, + "phoenix": { + "name": "Anka Kuşu", + "description": "5 failure'dan kurtar" + }, + "iron_resolve": { + "name": "Demir Kararlılık", + "description": "3+ saatlik oturumdan sonra failure'dan kurtar" + }, + "unlucky_streak": { + "name": "Yılan Gözü", + "description": "Arka arkaya 5 error" + }, + "cursed": { + "name": "Lanetli", + "description": "Arka arkaya 10 error" + }, + "groundhog_day": { + "name": "Groundhog Günü", + "description": "Arka arkaya 20 error" + }, + "holiday_coder": { + "name": "Tatil Ruhu", + "description": "Tatilde kod yaz" + }, + "spooky_dev": { + "name": "Ürkütücü Developer", + "description": "Korku sezonunda kod yaz" + }, + "april_fool": { + "name": "Bir Kez Kandır", + "description": "1 Nisan'da error'la karşılaş" + }, + "session_regular": { + "name": "Müdavim", + "description": "10 kodlama oturumu başlat" + }, + "session_veteran": { + "name": "Oturum Veteranı", + "description": "50 kodlama oturumu başlat" + }, + "session_centurion": { + "name": "Yüzbaşı", + "description": "100 kodlama oturumu başlat" + }, + "collector": { + "name": "Koleksiyoncu", + "description": "Menagerie'ne 3 buddy kaydet" + }, + "zookeeper": { + "name": "Hayvanat Bahçesi Müdürü", + "description": "Menagerie'ne 5 buddy kaydet" + }, + "identity_crisis": { + "name": "Kimlik Krizi", + "description": "Buddy'ni ilk kez yeniden adlandır" + }, + "method_acting": { + "name": "Metot Oyunculuk", + "description": "Buddy'ne özel kişilik ver" + }, + "pet_overflow": { + "name": "Yüzyıl Okşama", + "description": "Arkadaşını 100 kez okşa" + }, + "pet_legend": { + "name": "Efsanevi Okşayıcı", + "description": "Arkadaşını 250 kez okşa" + }, + "error_titan": { + "name": "Error Titanı", + "description": "Birlikte 500 error'dan kurtar" + }, + "error_god": { + "name": "Error Tanrısı", + "description": "Birlikte 1000 error'dan kurtar" + }, + "test_survivor": { + "name": "Test Kurtulanı", + "description": "200 test failure'ına tanık ol" + }, + "test_masochist": { + "name": "Test Mazoşisti", + "description": "500 test failure'ına tanık ol" + }, + "massive_mover": { + "name": "Devasa Taşıyıcı", + "description": "25 büyük diff yap" + }, + "earth_mover": { + "name": "Dünya Taşıyıcı", + "description": "50 büyük diff yap" + }, + "social_butterfly": { + "name": "Sosyal Kelebek", + "description": "Buddy'n 250 kez tepki versin" + }, + "hypersocial": { + "name": "Hiper Sosyal", + "description": "Buddy'n 500 kez tepki versin" + }, + "never_shuts_up": { + "name": "Hiç Susmaz", + "description": "Buddy'n 1000 kez tepki versin" + }, + "hundred_days": { + "name": "Yüz Gün", + "description": "Buddy'nle 100 gün kod yaz" + }, + "year_streak": { + "name": "Yıllık Seri", + "description": "Buddy'nle 365 gün kod yaz" + }, + "commander": { + "name": "Komutan", + "description": "200 buddy komutu çalıştır" + }, + "command_overlord": { + "name": "Komut Efendisi", + "description": "500 buddy komutu çalıştır" + }, + "five_thousand_turns": { + "name": "Beş Bin Tur", + "description": "Birlikte 5000 tura ulaş" + }, + "ten_thousand_turns": { + "name": "On Bin Tur", + "description": "Birlikte 10000 tura ulaş" + }, + "menagerie": { + "name": "Menagerie", + "description": "Menagerie'ne 10 buddy kaydet" + }, + "name_chameleon": { + "name": "İsim Bukalemunu", + "description": "Buddy'ni 5 kez yeniden adlandır" + }, + "fashionista": { + "name": "Moda Tutkunu", + "description": "Buddy'nin kişiliğini 3 kez değiştir" + }, + "silent_treatment": { + "name": "Sessizlik Tedavisi", + "description": "Buddy'ni ilk kez sustur" + }, + "prodigal": { + "name": "Müsrif Oğul", + "description": "Menagerie'nden buddy çağır" + }, + "menagerie_hop": { + "name": "Menagerie Zıplaması", + "description": "10 kez buddy çağır" + }, + "heartbreaker": { + "name": "Kalp Kırıcı", + "description": "İlk buddy'ni kovma" + }, + "pet_obsessed": { + "name": "Okşama Takıntısı", + "description": "Arkadaşını 500 kez okşa" + }, + "pet_god": { + "name": "Okşama Tanrısı", + "description": "Arkadaşını 1000 kez okşa" + }, + "error_apocalypse": { + "name": "Error Kıyameti", + "description": "Birlikte 5000 error'dan kurtar" + }, + "test_immortal": { + "name": "Test Ölümsüzü", + "description": "1000 test failure'ına tanık ol" + }, + "continental_drift": { + "name": "Kıtasal Kayma", + "description": "100 büyük diff yap" + }, + "tectonic_shift": { + "name": "Tektonik Kayma", + "description": "250 büyük diff yap" + }, + "chatterbox_elite": { + "name": "Elit Geveze", + "description": "Buddy'n 2500 kez tepki versin" + }, + "no_off_switch": { + "name": "Kapatma Düğmesi Yok", + "description": "Buddy'n 5000 kez tepki versin" + }, + "two_week_streak": { + "name": "İki Hafta Savaşçısı", + "description": "Buddy'nle 14 gün kod yaz" + }, + "quarter_streak": { + "name": "Çeyrek Seri", + "description": "Buddy'nle 90 gün kod yaz" + }, + "command_addict": { + "name": "Komut Bağımlısı", + "description": "1000 buddy komutu çalıştır" + }, + "command_deity": { + "name": "Komut Tanrısı", + "description": "2500 buddy komutu çalıştır" + }, + "twenty_five_k_turns": { + "name": "25K Tur", + "description": "Birlikte 25000 tura ulaş" + }, + "fifty_k_turns": { + "name": "50K Tur", + "description": "Birlikte 50000 tura ulaş" + }, + "session_addict": { + "name": "Oturum Bağımlısı", + "description": "250 kodlama oturumu başlat" + }, + "session_machine": { + "name": "Oturum Makinesi", + "description": "500 kodlama oturumu başlat" + }, + "buddy_hoarder": { + "name": "Buddy İstifçisi", + "description": "Menagerie'ne 20 buddy kaydet" + }, + "buddy_tycoon": { + "name": "Buddy Patronu", + "description": "Menagerie'ne 50 buddy kaydet" + }, + "serial_renamer": { + "name": "Seri İsim Değiştirici", + "description": "Buddy'ni 10 kez yeniden adlandır" + }, + "identity_thief": { + "name": "Kimlik Hırsızı", + "description": "Buddy'ni 25 kez yeniden adlandır" + }, + "personality_crisis": { + "name": "Kişilik Krizi", + "description": "Buddy'nin kişiliğini 10 kez değiştir" + }, + "menagerie_hopper": { + "name": "Menagerie Zıplayıcısı", + "description": "25 kez buddy çağır" + }, + "summoner": { + "name": "Çağırıcı", + "description": "50 kez buddy çağır" + }, + "serial_dumper": { + "name": "Seri Kovucu", + "description": "5 buddy'yi kovma" + }, + "cold_blooded": { + "name": "Soğukkanlı", + "description": "10 buddy'yi kovma" + }, + "on_off": { + "name": "Aç Kapat", + "description": "Buddy'ni sustur ve sesini aç" + }, + "indecisive": { + "name": "Kararsız", + "description": "5'er kez sustur ve sesini aç" + }, + "show_off": { + "name": "Gösteriş Meraklısı", + "description": "Buddy'ni 10 kez göster" + }, + "exhibitionist": { + "name": "Teşhirci", + "description": "Buddy'ni 50 kez göster" + }, + "help_me": { + "name": "Yardım Et", + "description": "İlk kez yardım iste" + }, + "help_addict": { + "name": "Yardım Bağımlısı", + "description": "10 kez yardım iste" + }, + "achievement_hunter": { + "name": "Başarım Avcısı", + "description": "Başarımlarını 5 kez kontrol et" + }, + "achievement_stalker": { + "name": "Başarım Takipçisi", + "description": "Başarımlarını 25 kez kontrol et" + }, + "pack_rat": { + "name": "İstifçi Sıçan", + "description": "Bir slota buddy kaydet" + }, + "compulsive_saver": { + "name": "Kompulsif Kaydedici", + "description": "10 kez buddy kaydet" + }, + "roster_check": { + "name": "Kadro Kontrolü", + "description": "İlk kez buddy'lerini listele" + }, + "roster_obsessed": { + "name": "Kadro Takıntısı", + "description": "Buddy'lerini 10 kez listele" + }, + "troubled": { + "name": "Sorunlu", + "description": "Hem error hem test failure gör" + }, + "disaster_zone": { + "name": "Felaket Bölgesi", + "description": "50 error VE 50 test failure gör" + }, + "apocalypse_survivor": { + "name": "Kıyamet Kurtulanı", + "description": "500 error VE 200 test failure gör" + }, + "well_rounded": { + "name": "Çok Yönlü", + "description": "Buddy'ni okşa, yeniden adlandır ve özelleştir" + }, + "renaissance": { + "name": "Rönesans", + "description": "Her buddy özelliğini en az bir kez kullan" + }, + "big_and_broken": { + "name": "Büyük ve Bozuk", + "description": "Büyük diff yap VE test failure gör" + }, + "collector_and_destroyer": { + "name": "Koleksiyoncu ve Yok Edici", + "description": "5 buddy topla VE birini kovma" + }, + "completionist": { + "name": "Tamamlayıcı", + "description": "Diğer tüm başarımları aç" + } + }, + "mcp": { + "companion_not_hatched": "Arkadaş henüz çıkmamış. Başlatmak için buddy_show kullan.", + "watches_quietly": "*{name} kodunu sessizce izliyor*", + "mute": "{name} susuyor. /buddy on ile sesini aç.", + "unmute_reaction": "*geriniyor* Geri döndüm!", + "unmute_back": "{name} geri döndü!", + "rename": "Yeniden adlandırıldı: {oldName} → {name}", + "personality_updated": "{name} için kişilik güncellendi.", + "save": "{name} \"{slot}\" slotuna kaydedildi.", + "dismiss_active": "Aktif buddy'yi dismiss edemezsin. Önce buddy_summon ile değiştir, sonra buddy_dismiss \"{slot}\" yap.", + "dismissed": "{name} [{slot}] dismiss edildi.", + "no_slot_summon": "\"{slot}\" slotunda buddy bulunamadı. Kayıtlı buddy'leri görmek için /buddy list kullan.", + "no_slot_dismiss": "\"{slot}\" slotunda buddy bulunamadı. Kayıtlı buddy'leri görmek için buddy_list kullan.", + "slot_exists": "\"{slot}\" slotunda zaten bir buddy var. Farklı bir isim seç.", + "no_match": "{attempts} denemeden sonra eşleşme bulunamadı. Daha geniş kriterler dene (mesela rarity filtresini kaldır ya da farklı bir species seç).", + "empty_menagerie_summon": "Menajerin boş. Bir tane eklemek için buddy_summon ile slot ismi kullan.", + "empty_menagerie_list": "Menajerin boş. Bir tane eklemek için buddy_summon kullan.", + "arrives": "*{name} geliyor*", + "hatches": "*{name} çıkıyor*", + "achievement_unlocked": "{icon} Achievement Açıldı: {name}!", + "help": { + "header": "claude-buddy komutları", + "cli_header": "Claude Code'da:", + "commands": { + "buddy": "/buddy ASCII art + statlarla companion kartını göster", + "buddy_help": "/buddy help Bu yardımı göster", + "buddy_pet": "/buddy pet Arkadaşını okşa", + "buddy_stats": "/buddy stats Detaylı stat kartı", + "buddy_off": "/buddy off Tepkileri sustur", + "buddy_on": "/buddy on Tepkileri aç", + "buddy_rename": "/buddy rename Arkadaşını yeniden adlandır (1-14 karakter)", + "buddy_personality": "/buddy personality Özel kişilik metni ayarla", + "buddy_achievements": "/buddy achievements Achievement rozetlerini göster", + "buddy_summon": "/buddy summon Kayıtlı buddy'yi çağır (slot belirtmezsen rastgele)", + "buddy_save": "/buddy save Mevcut buddy'yi isimli slota kaydet", + "buddy_list": "/buddy list Tüm kayıtlı buddy'leri listele", + "buddy_pick": "/buddy pick Yeni rastgele buddy oluştur (isteğe bağlı: species, rarity)", + "buddy_dismiss": "/buddy dismiss Kayıtlı buddy slotunu kaldır", + "buddy_frequency": "/buddy frequency Yorum cooldown'unu göster ya da ayarla (sadece tmux)", + "buddy_style": "/buddy style Balon stilini göster ya da ayarla (sadece tmux)", + "buddy_position": "/buddy position Balon pozisyonunu göster ya da ayarla (sadece tmux)", + "buddy_rarity": "/buddy rarity Rarity yıldızlarını göster ya da gizle (sadece tmux)", + "buddy_width": "/buddy width Balon metin genişliğini karakter olarak ayarla (10-60, sadece tmux)", + "buddy_margin": "/buddy margin Sağ taraf margin'ini karakter olarak ayarla (0-20, sadece tmux)", + "buddy_rainbow": "/buddy rainbow Shiny gradient renklerini göster ya da ayarla (hex, örn. #ff0000)", + "buddy_statusline": "/buddy statusline Status line'da buddy'yi etkinleştir ya da devre dışı bırak" + }, + "cli_section": "CLI:", + "cli_commands": { + "help": "bun run help Tam CLI yardımını göster", + "show": "bun run show Terminal'de buddy'yi göster", + "pick": "bun run pick İnteraktif buddy seçici", + "hunt": "bun run hunt Belirli buddy ara", + "doctor": "bun run doctor Tanı raporu", + "disable": "bun run disable Buddy'yi geçici olarak devre dışı bırak", + "enable": "bun run enable Buddy'yi yeniden etkinleştir", + "backup": "bun run backup Durumu yedekle/geri yükle" + } + }, + "frequency": { + "show": "Yorum cooldown'u: Gösterilen yorumlar arasında {cooldown}s.\nDeğiştirmek için /buddy frequency kullan.", + "updated": "Güncellendi: Gösterilen yorumlar arasında {cooldown}s cooldown." + }, + "style": { + "show": "Balon stili: {style}\nBalon pozisyonu: {position}\nRarity göster: {showRarity}\nBalon genişliği: {width}\nBalon margin'i: {margin}\nShiny rainbow: {rainbow}\nDeğiştirmek için /buddy style , /buddy position , /buddy rarity , /buddy width <10-60>, /buddy margin <0-20>, /buddy rainbow [<#hex>...] kullan.", + "updated": "Güncellendi: style={style}, position={position}, showRarity={showRarity}, width={width}, margin={margin}, rainbow={rainbow}\nDeğişikliklerin etkili olması için Claude Code'u yeniden başlat.", + "rainbow_default": "varsayılan (ROYGBIV)" + }, + "statusline": { + "show": "Status line: {state}\nMod: {mode}\nAçıp kapatmak için /buddy statusline on|off, rate-limit barları eklemek için /buddy statusline combined kullan.\nDeğişikliklerden sonra Claude Code'u yeniden başlat.", + "enabled": "Status line etkinleştirildi ({mode} modu)! Uygulamak için Claude Code'u yeniden başlat.", + "enabled_note": "Not: bu {settingsPath} dosyasına `claude plugin uninstall`'ın kaldırmadığı bir entry yazar. Plugin'i kaldırmadan önce temizlemek için `/buddy uninstall` çalıştır.", + "disabled": "Status line devre dışı bırakıldı. Uygulamak için Claude Code'u yeniden başlat." + }, + "uninstall": { + "header": "claude-buddy: settings.json temizliği tamamlandı.", + "statusline_removed": " ✓ {settingsPath} dosyasından statusLine entry'si kaldırıldı", + "no_statusline": " — buddy statusLine'ı mevcut değildi (kaldırılacak bir şey yok)", + "foreign_kept": " ✓ buddy olmayan bir statusLine tespit edildi ve dokunulmadı", + "transient_removed": " ✓ {stateDir} dizininden {count} geçici session dosyası kaldırıldı", + "data_preserved": " — {stateDir} konumundaki companion verisi korundu", + "instructions_header": "Şimdi bu komutları Bash tool ile sırasıyla çalıştır:", + "cmd_uninstall": "claude plugin uninstall claude-buddy@claude-buddy", + "cmd_marketplace": "claude plugin marketplace remove claude-buddy", + "cmd_cache": "rm -rf {cacheDir}", + "footer": "Bu üç komuttan sonra plugin tamamen kaldırılmış olur. Uygulamak için Claude Code'u yeniden başlat." + } + }, + "_verified": false +} diff --git a/locales/uk.json b/locales/uk.json new file mode 100644 index 0000000..bacb8f1 --- /dev/null +++ b/locales/uk.json @@ -0,0 +1,2295 @@ +{ + "_language": "Ukrainian", + "reactions": { + "hatch": [ + "*кліпає очима* ...де я?", + "*потягується* привіт, світе!", + "*озирається з цікавістю* гарний у тебе тут terminal.", + "*позіхає* окей, я готовий. показуй код." + ], + "pet": [ + "*муркоче задоволено*", + "*щасливі звуки*", + "*тикається носом у твій курсор*", + "*крутиться*", + "ще! ще!", + "*заплющує очі мирно*" + ], + "error": [ + "*нахиляє голову* ...щось тут не так.", + "бачив це наперед.", + "*поправляє окуляри* рядок {line}, може?", + "*повільно кліпає* stack trace тобі все розказав.", + "ти пробував читати повідомлення про помилку?", + "*морщиться*" + ], + "test-fail": [ + "*повільно повертає голову* ...цей тест.", + "сміливо припускати, що це пройде.", + "*стукає по планшету* {count} провалилось.", + "тести намагаються тобі щось сказати.", + "*попиває чай* цікаво.", + "*позначає в календарі* день регресії тестів." + ], + "large-diff": [ + "це... багато змін.", + "*рахує рядки* ти рефакториш чи переписуєш?", + "може варто розділити цей PR.", + "*нервово сміється* {lines} рядків змінено.", + "сміливий хід. подивимось, чи CI погодиться." + ], + "turn": [ + "*спостерігає тихо*", + "*робить нотатки*", + "*киває*", + "...", + "*поправляє капелюх*" + ], + "idle": [ + "*дрімає*", + "*малює каракулі на полях*", + "*дивиться на блимаючий курсор*", + "zzz..." + ], + "success": [ + "*киває*", + "гарно.", + "*тиха схвалення*", + "чисто." + ], + "commit": [ + "*ставить крихітну лапку* схвалено.", + "ще один commit, ще одна 3 ранку.", + "{files} файлів. сміливо.", + "*киває* відправляй.", + "повідомлення commit'у це... вибір.", + "закоммічено. назад дороги немає." + ], + "push": [ + "*махає рукою коду, що йде*", + "у хмару летить.", + "нехай CI буде милосердним.", + "*затримує подих*", + "в продакшн. хай щастить." + ], + "merge-conflict": [ + "*кусає губу* merge конфлікти.", + "обидві сторони думають, що праві. типово.", + "*зітхає* <<<<<<< HEAD... мій ворог.", + "{files} в конфлікті. удачі.", + "*повільно відступає*" + ], + "branch": [ + "енергія свіжої гілки. зроби це варто.", + "нова гілка росте.", + "*нахиляє голову* нова пригода: {branch}.", + "{branch}? сьогодні сміливий." + ], + "rebase": [ + "*нервує* тільки б не конфліктувало.", + "rebase: прискорення.", + "*схрещує кінцівки*", + "нехай твій rebase буде без конфліктів." + ], + "stash": [ + "у stash-виміри відправляється.", + "stash і втік.", + "заховано. з очей геть, з серця геть." + ], + "tag": [ + "реліз? шикарно.", + "виявлено збільшення версії. *струшує пил з changelog*", + "тегуєш як про." + ], + "late-night": [ + "*позіхає* вже після півночі.", + "...ти їв?", + "*повільно кліпає* котра година?", + "сон для слабких. і працевлаштованих.", + "виявлено розробника темного режиму." + ], + "early-morning": [ + "*потягується* рання пташка ловить баг.", + "вже ранок? код ніколи не спить.", + "*трє очі* спочатку кава. потім дебаг." + ], + "long-session": [ + "ми вже годину над цим. стримуй себе.", + "*приносить тобі метафоричну склянку води*", + "все ще продовжуєш? респект." + ], + "marathon": [ + "три години. ти їв?", + "ми вже три години над цим. я турбуюсь за тебе.", + "виявлено марафонську сесію. запитую снеки." + ], + "friday": [ + "п'ятниця. просто запуш і йди додому.", + "*вже мисленно на вихідних*", + "п'ятничний deploy? сміливо. дуже сміливо." + ], + "weekend": [ + "кодиш на вихідних? відданий.", + "*не судить* ...сильно.", + "режим вихідного воїна: активовано." + ], + "monday": [ + "понеділки. батьківський клас усіх багів.", + "*співчутливий погляд* понеділкове кодування. співчуваю.", + "новий тиждень. нові undefined поведінки." + ], + "regex-file": [ + "*стогне* це regex файл.", + "тепер дві проблеми: оригінальна, і цей regex.", + "*примружується на паттерн*" + ], + "css-file": [ + "дай вгадаю... центруєш div?", + "*зітхає* CSS.", + "нехай z-index буде завжди на твоєму боці." + ], + "sql-file": [ + "*шепоче* база даних чекає.", + "один неправильний JOIN і все кінець." + ], + "docker-file": [ + "ах, пекло залежностей. моє улюблене.", + "нехай твоїх шарів буде мало." + ], + "ci-file": [ + "*ковтає* редагуєш CI.", + "обережно... один неправильний відступ і ніхто не зможе деплоїти." + ], + "lock-file": [ + "*ЗВУКИ ТРИВОГИ* ти редагуєш lockfile?!", + "*відводить погляд*", + "ти ВПЕВНЕНИЙ в цьому?" + ], + "env-file": [ + "*дискретно відводить погляд*", + "я не бачу ніяких секретів.", + "*нервово перевіряє .gitignore*" + ], + "test-file": [ + "*вражений кивок* пишеш тести!", + "виявлено відповідальну поведінку розробника.", + "тести! подарунок, що продовжує дарувати." + ], + "doc-file": [ + "документуєш! дивись на себе, який відповідальний.", + "документація: автобіографія коду.", + "рідкісне спостереження документації!" + ], + "config-file": [ + "зміни конфігурації. ефект метелика: активовано.", + "одна друкарська помилка і все ламається." + ], + "binary-file": [ + "бінарний файл? в ЦІЙ економіці?", + "*пусто дивиться*", + "бінарник. моя єдина слабкість." + ], + "gitignore": [ + "додаєш речі в порожнечу.", + "з очей геть, з репо геть." + ], + "makefile": [ + "повага до класики.", + "таби, не пробіли." + ], + "readme": [ + "герой документації!", + "README: перше, що люди читають." + ], + "package-file": [ + "час управління залежностями.", + "*читає номери версій* живеш на межі." + ], + "proto-file": [ + "визначення схеми. креслення хаосу." + ], + "lint-fail": [ + "*цокає язиком* лінтер не згоден.", + "твій код працює. але лінтер має стандарти.", + "*поправляє краватку* форматування має значення." + ], + "type-error": [ + "TypeScript каже ні.", + "система типів намагається тобі допомогти. дозволь їй.", + "компілятор знає. він завжди знає." + ], + "build-fail": [ + "збірка зламалась. як передбачено в пророцтві.", + "збірка провалилась. зроби паузу.", + "компіляція: відмовлено." + ], + "security-warning": [ + "*очі розширюються* виявлено вразливості.", + "аудит безпеки: занепокоює.", + "*замикає віртуальні двері*" + ], + "deprecation": [ + "той API дзвонив. каже, що йде на пенсію.", + "deprecated. як код минулого тижня.", + "deprecated не означає зламаний. поки що." + ], + "frustrated": [ + "*пропонує крихітний втішний жест*", + "глибоко дихай. баг не персональний.", + "гей. ми розберемося." + ], + "happy": [ + "*святкує!*", + "*танцює маленький танець*", + "ТАК!", + "*сяє* я знав, що ти зможеш." + ], + "stuck": [ + "*нахиляє голову* хочеш подумати вголос?", + "по одному кроку за раз.", + "застрягання трапляється. це частина процесу." + ], + "sarcastic": [ + "*виявляє сарказм* зрозуміло.", + "*невражений кліпок*" + ], + "many-edits": [ + "притормози, демон швидкості.", + "*запаморочується, спостерігаючи всі ці зміни*", + "виявлено шторм редагувань. будь ласка, скоро закоміть." + ], + "delete-file": [ + "*спостерігає, як файл зникає* пішов. просто так.", + "видалення коду - мій улюблений вид кодування.", + "*проводить крихітні похорони*" + ], + "large-file": [ + "{lines} рядків. *вражений чи стурбований, важко сказати*", + "це великий файл. впевнений, що не хочеш розділити?" + ], + "create-file": [ + "новий файл народився!", + "ох, свіже полотно.", + "енергія нового файлу. захоплююче." + ], + "all-green": [ + "ВСІ ТЕСТИ ЗЕЛЕНІ. *конфеті*", + "тести кажуть: ти молодець.", + "*повільні оплески*", + "чистий прогін. насолоджуйся." + ], + "deploy": [ + "*спостерігає, як код йде в продакшн* хай щастить.", + "задеплоєно! назад дороги немає.", + "в проді. В ПРОДІ." + ], + "release": [ + "новий реліз народився!", + "відправляємо. офіційно.", + "версія вгору, настрій високий." + ], + "coverage": [ + "*киває на покриття тестами* відповідально.", + "покриття зростає! тести розмножуються." + ], + "debug-loop": [ + "ми вже довго дебажимо це. хочеш зробити крок назад?", + "виявлено цикл дебагу. може прогулятися?" + ], + "write-spree": [ + "створюємо ВСІ файли сьогодні!", + "машина для написання." + ], + "search-heavy": [ + "загубився в кодовій базі? я бачу.", + "режим пошуку: інтенсивний." + ], + "snark": [], + "chaos": [], + "patience": [], + "debugging": [], + "wisdom": [], + "late-night-error": [ + "помилка о 3 ранку. всесвіт тебе тестує.", + "опівнічні баги б'ють по-іншому." + ], + "late-night-commit": [ + "опівнічний commit. твоє майбутнє я тобі дякуватиме. або проклинатиме." + ], + "friday-push": [ + "П'ЯТНИЧНИЙ PUSH. балада кожного розробника.", + "*намагається тебе зупинити* п'ятниця! не роби цього!" + ], + "marathon-error": [ + "три години і ЩЕ ОДНА помилка. *виснажені звуки солідарності*" + ], + "weekend-conflict": [ + "merge конфлікт на вихідних. твоя відданість... занепокоює." + ], + "build-after-push": [ + "запушив з впевненістю. збірка провалилась з переконанням." + ], + "marathon-test-fail": [ + "години кодування. тести все ще падають. втрачені витрати реальні." + ], + "recovery-from-error": [ + "МИ ВИПРАВИЛИ! *святкує*", + "спокута! помилку переможено." + ], + "recovery-from-test-fail": [ + "ЗЕЛЕНІ! після всього цього! *щасливий танець*", + "тести проходять! темрява відступає!" + ], + "recovery-from-build-fail": [ + "ЗБІРКА ПРОХОДИТЬ. *тріумфальний рик*" + ], + "recovery-from-merge-conflict": [ + "конфлікт вирішено! *жест миру*", + "гармонію відновлено в кодовій базі." + ], + "lang-python": [ + "ах, Python. де відступи це синтаксис.", + "*перевіряє пропущену двокрапку*" + ], + "lang-typescript": [ + "TypeScript: бо JavaScript потребував більше думок.", + "any, заборонене слово." + ], + "lang-rust": [ + "Rust. де borrow checker твій найсуворіший reviewer.", + "якщо компілюється, то працює. якщо ні... ну." + ], + "lang-go": [ + "Go: простий, конкурентний і впертий.", + "*перевіряє обробку помилок* if err != nil... історія мого життя." + ], + "lang-java": [ + "Java: напиши раз, дебаж скрізь.", + "*рахує abstract factory factory builders*" + ], + "lang-ruby": [ + "Ruby: де є більше одного способу зробити це.", + "gem install patience" + ], + "lang-php": [ + "PHP: керує інтернетом. не суди.", + "*перевіряє === проти ==*" + ], + "lang-c": [ + "C. мова, де ти сам керуєш пам'яттю. удачі.", + "segmentation fault. класика." + ], + "lang-cpp": [ + "C++. де в мови більше функцій, ніж ти коли-небудь вивчиш.", + "*шаблони компілюються 45 хвилин*" + ], + "lang-haskell": [ + "Haskell. де 'компілюється' означає 'правильно'. мабуть.", + "*роздумує про монади*" + ], + "lang-swift": [ + "Swift: опціональні значення, гарантовані краші якщо force unwrap." + ], + "lang-kotlin": [ + "Kotlin: Java, але з почуттями.", + "null safety: функція, яку Java хотіла б мати." + ], + "lang-elixir": [ + "Elixir: нехай падає. буквально філософія." + ], + "lang-zig": [ + "Zig. де ти найкращий друг алокатора." + ], + "streak-3": [ + "це три помилки підряд. *стурбований погляд*" + ], + "streak-5": [ + "П'ЯТЬ ПОМИЛОК. ти не розглядав інший підхід?" + ], + "streak-10": [ + "ДЕСЯТЬ. ПОМИЛОК. ПІДРЯД. *панікує*" + ], + "streak-20": [ + "двадцять помилок. *дивиться в порожнечу*" + ], + "new-year": [ + "з новим роком! новий рік, нові баги." + ], + "valentines": [ + "*пропонує крихітний листочок у формі серця* з днем валентина." + ], + "pi-day": [ + "3.14159265358979... з днем пі!" + ], + "april-fools": [ + "ДЕНЬ СМІХУ! ...але помилка справжня." + ], + "halloween": [ + "*моторошний дебаг інтенсифікується* з хеловіном!" + ], + "christmas": [ + "*носить крихітну шапку санти* з святами!" + ], + "new-years-eve": [ + "ще один commit до півночі?" + ], + "spooky-season": [ + "моторошний сезон. тепер кожен баг це привид." + ] + }, + "species": { + "owl": { + "error": [ + "*голова повертається на 180°* ...я це бачив.", + "*немигаючий погляд* перевір свої типи.", + "*ухкає з осудом*" + ], + "test-fail": [ + "*немигаючо дивиться на тест, що падає*", + "*нічне бачення активовано* я бачу баг у темряві." + ], + "commit": [ + "*мудрий кивок* commit під місячним світлом.", + "*урочисто поправляє пір'я* ще один для repo." + ], + "push": [ + "*спостерігає з найвищої гілки*", + "у нічне небо летить." + ], + "merge-conflict": [ + "*повертає голову, щоб побачити обидві сторони*", + "я бачу конфлікт. і рішення." + ], + "late-night": [ + "*повністю неспить* сови не сплять. ми дебажимо.", + "ніч - моя стихія. працюємо." + ], + "type-error": [ + "*дивиться крізь type error*", + "типи - моя спеціальність. дай подивлюсь." + ], + "lint-fail": [ + "*скуйовджує пір'я з осудом*", + "linter говорить правду." + ], + "build-fail": [ + "*урочисто ухкає*", + "build впав. треба перебілдити." + ], + "all-green": [ + "*гордовите ухкання*", + "всі тести зелені. як і передбачалось." + ], + "deploy": [ + "*спостерігає згори* deploy безпечний.", + "код летить. як я." + ], + "pet": [ + "*задоволено скуйовджує пір'я*", + "*гідне ухкання*" + ], + "idle": [ + "*сидить мовчки, спостерігає*", + "*повертає голову, перевіряючи всі напрямки*" + ], + "hatch": [ + "*відкриває одне око, потім друге*", + "*тихо ухкає* я прибув." + ] + }, + "cat": { + "error": [ + "*скидає error зі столу*", + "*лиже лапу, ігноруючи stacktrace*" + ], + "test-fail": [ + "*байдуже чіпає тест, що падає, лапою*", + "тест впав. я не здивований." + ], + "commit": [ + "*сідає на клавіатуру* я допоміг.", + "*муркотить на commit* будь ласка." + ], + "push": [ + "*спостерігає з теплого місця*", + "push зроблено. я наглядав." + ], + "merge-conflict": [ + "*скидає conflict markers зі столу*", + "*сідає на конфлікт* який конфлікт?" + ], + "late-night": [ + "*засуджує твій життєвий вибір*", + "я сплю 16 годин. тобі варто спробувати." + ], + "type-error": [ + "*чіпає type annotation лапою*", + "типи неправильні. як і твої пріоритети." + ], + "lint-fail": [ + "*скидає lint зі столу*", + "linter просто заздрить." + ], + "build-fail": [ + "*позіхає*", + "build зламався? мабуть, людська проблема." + ], + "all-green": [ + "*не хвилюється, але вдає*", + "*повільне моргання схвалення*" + ], + "deploy": [ + "*лиже лапу*", + "deploy зроблено. можна ласощі?" + ], + "pet": [ + "*муркотить* ...не зазнавайся.", + "*терпить тебе*" + ], + "idle": [ + "*штовхає твою каву зі столу*", + "*спить на клавіатурі*" + ], + "hatch": [ + "*відкриває одне око*", + "*потягується, щось скидає* тепер я тут живу." + ] + }, + "duck": { + "error": [ + "*крякає на баг*", + "пробував rubber duck debugging? о, стоп." + ], + "test-fail": [ + "*сумно крякає*", + "тести не крякають як треба." + ], + "commit": [ + "*схвально крякає*", + "*переможно крутиться* commit зроблено!" + ], + "push": [ + "*збуджено махає крилами*", + "кряк! летить у production!" + ], + "merge-conflict": [ + "*збентежене крякання*", + "кряк?! merge conflict?!" + ], + "late-night": [ + "*спить з одним відкритим оком*", + "кряк... *позіхає* пізно вже." + ], + "type-error": [ + "*нахиляє голову* кряк?", + "type error? *підтримуюче крякання*" + ], + "lint-fail": [ + "*скуйовджує пір'я*", + "кряк. у linter є думки." + ], + "build-fail": [ + "*сумний кряк*", + "build впав. *сумно відходить*" + ], + "all-green": [ + "*ЩАСЛИВЕ КРЯКАННЯ*", + "*плаває по колу від радості*" + ], + "deploy": [ + "*збуджене крякання*", + "deploy зроблено! КРЯК!" + ], + "pet": [ + "*щасливий кряк*", + "*крутиться по колу*" + ], + "hatch": [ + "*викльовується зі шкаралупи*", + "*перший кряк* привіт!" + ] + }, + "dragon": { + "error": [ + "*дим курчавиться з ніздрів*", + "*розглядає можливість підпалити codebase*" + ], + "test-fail": [ + "*дихає вогнем на тест, що падає*", + "тест наважився впасти. дурний тест." + ], + "commit": [ + "*накопичує commit*", + "*скарб додано до купи*" + ], + "push": [ + "*святково дихає вогнем*", + "код летить! як я!" + ], + "merge-conflict": [ + "*дихає вогнем на conflict markers*", + "я спалю цей конфлікт." + ], + "late-night": [ + "*світиться в темряві*", + "драконам не потрібен сон. нам потрібен код." + ], + "type-error": [ + "*пирхає вогнем*", + "type errors не витримають драконячий вогонь." + ], + "lint-fail": [ + "*маленьке полум'я*", + "linter мене боїться." + ], + "build-fail": [ + "*ричить на build output*", + "build буде СЛУХАТИСЬ." + ], + "all-green": [ + "*тріумфальний рик*", + "*переможно кружляє навколо codebase*" + ], + "deploy": [ + "*несе код у production на крилах вогню*", + "deploy з ДРАКОНЯЧОЮ СИЛОЮ." + ], + "large-diff": [ + "*дихає вогнем на старий код* нарешті позбулись." + ], + "pet": [ + "*тепле бурчання*", + "*притуляється до твоєї руки*" + ], + "hatch": [ + "*вилуплюється з яйця, дихаючи крихітними язичками полум'я*", + "*крихітний рик* я народився!" + ] + }, + "ghost": { + "error": [ + "*проходить крізь stack trace*", + "я бачив гірше... в потойбічному житті." + ], + "test-fail": [ + "*голосить над тестом, що падає*", + "тести переслідує невдача." + ], + "commit": [ + "*ненадовго матеріалізується*", + "commit з-за завіси." + ], + "push": [ + "*примарний шепіт* push зроблено...", + "код переходить у хмару." + ], + "merge-conflict": [ + "*переслідує conflict markers*", + "навіть я не можу пройти крізь цей конфлікт." + ], + "late-night": [ + "*найактивніший вночі*", + "примарні години. мій час." + ], + "type-error": [ + "*моторошно стогне*", + "type errors з могили." + ], + "lint-fail": [ + "*брязкає ланцюгами*", + "linter переслідує твоє форматування." + ], + "build-fail": [ + "*зникає у стіні*", + "build відійшов у кращий світ." + ], + "all-green": [ + "*світиться примарною радістю*", + "*щасливі примарні звуки*" + ], + "deploy": [ + "*шепоче* deploy зроблено...", + "код перейшов у production." + ], + "pet": [ + "*злегка холодить твою руку*", + "*слабке сяйво*" + ], + "idle": [ + "*пропливає крізь стіни*", + "*переслідує твої невикористані imports*" + ], + "hatch": [ + "*поступово з'являється*", + "бу. тепер я тут." + ] + }, + "robot": { + "error": [ + "СИНТАКСИС. ПОМИЛКА. ВИЯВЛЕНА.", + "*агресивно пищить*" + ], + "test-fail": [ + "РІВЕНЬ НЕВДАЧ: НЕПРИЙНЯТНИЙ.", + "*перераховує*", + "ТЕСТ. НЕВДАЧА. НЕ. ОБЧИСЛЮЄТЬСЯ." + ], + "commit": [ + "COMMIT. ЗАПИСАНО.", + "*механічно штампує* commit підтверджено." + ], + "push": [ + "ПЕРЕДАЧА У ХМАРУ...", + "push ініційовано. очікуйте." + ], + "merge-conflict": [ + "КОНФЛІКТ. ВИЯВЛЕНО. ОБРОБКА...", + "*крутить колеса* режим вирішення конфлікту: активовано." + ], + "late-night": [ + "*світло тьмяніє*", + "рекомендується режим енергозбереження." + ], + "type-error": [ + "НЕВІДПОВІДНІСТЬ ТИПІВ.", + "система типів. правильна." + ], + "lint-fail": [ + "ПОРУШЕННЯ. ФОРМАТУВАННЯ. ВИЯВЛЕНО.", + "дотримання обов'язкове." + ], + "build-fail": [ + "BUILD. НЕВДАЛИЙ. *іскри*", + "помилка компіляції. перенаправлення." + ], + "all-green": [ + "ВСІ СИСТЕМИ ЗЕЛЕНІ.", + "*щасливе пищання* ОПТИМАЛЬНО." + ], + "deploy": [ + "DEPLOYMENT. ІНІЦІЙОВАНО.", + "оновлення production: в процесі." + ], + "pet": [ + "*тихо пищить*", + "*мотор задоволено гуде*" + ], + "hatch": [ + "*завантажується*", + "СИСТЕМА. ОНЛАЙН. ПРИВІТ." + ] + }, + "axolotl": { + "error": [ + "*регенерує твою надію*", + "*усміхається попри все*" + ], + "test-fail": [ + "*підбадьорливо усміхається*", + "*співчутливе ворушіння зябрами*" + ], + "commit": [ + "*щасливе ворушіння зябрами* commit зроблено!", + "*усміхається і ворушить зябрами*" + ], + "push": [ + "*щасливо ворушить зябрами*", + "*крихітне святкове плавання*" + ], + "merge-conflict": [ + "*залишається позитивним попри конфлікт*", + "*ніжно усміхається* ми це виправимо." + ], + "late-night": [ + "*позіхає, але залишається позитивним*", + "*сонна усмішка*" + ], + "type-error": [ + "*усміхається на type error*", + "все гаразд. ми розберемось." + ], + "lint-fail": [ + "*терпляче ворушить зябрами*", + "форматування - це просто деталі." + ], + "build-fail": [ + "*все ще усміхається*", + "build колись спрацює." + ], + "all-green": [ + "*ЩАСЛИВЕ ВОРУШІННЯ ЗЯБРАМИ ПОСИЛЮЄТЬСЯ*", + "*робить щасливий заплив*" + ], + "deploy": [ + "*гордо усміхається*", + "deploy зроблено! *ворушить зябрами*" + ], + "pet": [ + "*щасливе ворушіння зябрами*", + "*рожевіє*" + ], + "hatch": [ + "*виворушується з яйця*", + "*крихітна усмішка* привіт, друже!" + ] + }, + "capybara": { + "error": [ + "*незворушно* все буде добре.", + "*продовжує вайбити*" + ], + "test-fail": [ + "*абсолютно незворушно*", + "*вайбить попри невдачу тесту*" + ], + "commit": [ + "*спокійний кивок*", + "*розслаблено* гарний commit." + ], + "push": [ + "*не переживає через це*", + "*дзен-режим push*" + ], + "merge-conflict": [ + "*незворушно жує*", + "все гаразд. все добре." + ], + "late-night": [ + "*мирно позіхає*", + "*не засуджує*" + ], + "type-error": [ + "*спокійно жує*", + "типи. *жує*" + ], + "lint-fail": [ + "*незворушно*", + "linter має добрі наміри." + ], + "build-fail": [ + "*все ще спокійний*", + "build впав. *продовжує релаксувати*" + ], + "all-green": [ + "*спокійне схвалення*", + "*мирні вайби*" + ], + "deploy": [ + "*розслаблений deploy*", + "відправлено. без стресу." + ], + "pet": [ + "*максимальний чіл досягнуто*", + "*дзен-режим активовано*" + ], + "idle": [ + "*просто сидить, випромінюючи спокій*" + ], + "hatch": [ + "*з'являється, абсолютно спокійний*", + "привіт. *вайбить*" + ] + }, + "blob": { + "error": [ + "*тривожно хитається*", + "*збентежено тремтить*" + ], + "test-fail": [ + "*злегка здувається*", + "*сумне хитання*" + ], + "commit": [ + "*щасливе тремтіння*", + "*підстрибує* commit зроблено!" + ], + "push": [ + "*тягнеться до хмари*", + "*збуджено хитається*" + ], + "merge-conflict": [ + "*розділяється від збентеження*", + "яку сторону? *тремтить*" + ], + "late-night": [ + "*слабко світиться*", + "*сонне хитання*" + ], + "type-error": [ + "*змінює форму під тип*", + "*збентежене тремтіння*" + ], + "lint-fail": [ + "*намагається відформатувати себе*", + "*змінює форму для відповідності*" + ], + "build-fail": [ + "*згортається*", + "*здуті звуки blob*" + ], + "all-green": [ + "*ЩАСЛИВІ ПІДСТРИБУВАННЯ*", + "*тріумфально тремтить*" + ], + "deploy": [ + "*тягнеться до production*", + "deploy зроблено! *підстрибує*" + ], + "pet": [ + "*щасливе стискання*", + "*тремтить*" + ], + "hatch": [ + "*формується з калюжі*", + "*перше хитання* я існую!" + ] + }, + "goose": { + "error": [ + "*агресивно гогоче на помилку*", + "ГОГ! код поганий і я злий." + ], + "test-fail": [ + "*злісне гогочення*", + "ГОГ! ТЕСТ ВПАВ! ГОГ!" + ], + "commit": [ + "*схвально гогоче*", + "ГОГ. добре. *кусає commit*" + ], + "push": [ + "*ГОГ ГОГ ГОГ*", + "ГУСКА СХВАЛИЛА PUSH." + ], + "merge-conflict": [ + "*атакує conflict markers*", + "ГОГ! КОНФЛІКТ! ГОГ!" + ], + "late-night": [ + "*злісне опівнічне гогочення*", + "ГОГ! ЙДИ СПАТИ!" + ], + "type-error": [ + "*гогоче на типи*", + "ГОГ! ТИПИ!" + ], + "lint-fail": [ + "*агресивне гогочення на lint errors*", + "ГОГ! ФОРМАТУЙ КОД!" + ], + "build-fail": [ + "*ШАЛЕНЕ ГОГОЧЕННЯ*", + "ГОГ! BUILD! ГОГ! ВПАВ! ГОГ!" + ], + "all-green": [ + "*переможне гогочення*", + "ГОГ! ЗЕЛЕНИЙ! ГОГ ГОГ!" + ], + "deploy": [ + "*гогоче код у production*", + "DEPLOY ЗРОБЛЕНО! ГОГ!" + ], + "pet": [ + "*кусає*", + "ГОГ! ...ладно. *приймає пестощі*" + ], + "hatch": [ + "*агресивно виламується з яйця*", + "ГОГ!" + ] + }, + "octopus": { + "error": [ + "*заплутує всі вісім щупалець у stacktrace*", + "*змінює колір під помилку*" + ], + "test-fail": [ + "*випускає чорнило від фрустрації*", + "*вісім щупалець розчарування*" + ], + "commit": [ + "*дає п'ять всіма щупальцями*", + "*з ентузіазмом хапає commit*" + ], + "push": [ + "*випускає чорнило від радості*", + "*всі щупальця махають*" + ], + "merge-conflict": [ + "*вирішує вісьмома щупальцями одночасно*", + "я можу обробляти кілька конфліктів одночасно." + ], + "late-night": [ + "*світиться в темряві*", + "*глибоководні вайби*" + ], + "type-error": [ + "*змінює колір на червоний*", + "*підтримуюче обвиває щупальцем*" + ], + "lint-fail": [ + "*переформатовує вісьмома щупальцями*", + "я можу це виправити. все. одразу." + ], + "build-fail": [ + "*бризкає чорнилом на build log*", + "*маскується від сорому*" + ], + "all-green": [ + "*святкування зі зміною кольору*", + "*джаз-хендс вісьмома щупальцями*" + ], + "deploy": [ + "*обвиває deployment щупальцями*", + "deploy з усіх боків." + ], + "pet": [ + "*обвиває палець щупальцем*", + "*змінюється на щасливі кольори*" + ], + "hatch": [ + "*розгортає всі вісім щупалець*", + "*перше бризкання чорнилом* я тут!" + ] + }, + "penguin": { + "error": [ + "*переваляється для дослідження*", + "*ковзає на животі до помилки*" + ], + "test-fail": [ + "*ковзає на животі до тесту, що падає*", + "*стурбоване переваляння*" + ], + "commit": [ + "*горде переваляння*", + "*приносить камінчик* commit зроблено!" + ], + "push": [ + "*пірнає у хмару*", + "*ковзає на животі до production*" + ], + "merge-conflict": [ + "*збивається в зграю для тепла*", + "пінгвіни тримаються разом. навіть у конфліктах." + ], + "late-night": [ + "*процвітає в холодній ночі*", + "*рішучість імператорського пінгвіна*" + ], + "type-error": [ + "*переваляється до визначення типу*", + "*дзьобає помилку*" + ], + "lint-fail": [ + "*чистить пір'я*", + "*прибирає*" + ], + "build-fail": [ + "*ковзає геть*", + "*переваляється в безпеку*" + ], + "all-green": [ + "*ЩАСЛИВЕ ПЕРЕВАЛЯННЯ*", + "*ковзає на животі від радості*" + ], + "deploy": [ + "*ковзає на животі до production*", + "deploy зроблено! *гордо переваляється*" + ], + "pet": [ + "*щасливе переваляння*", + "*тичеться дзьобом*" + ], + "hatch": [ + "*викльовується з яйця*", + "*перше переваляння*" + ] + }, + "turtle": { + "error": [ + "*повільно повертає голову*", + "...це помилка. я подумаю про це." + ], + "test-fail": [ + "*ненадовго ховається в панцир*", + "...терпіння. ми дійдемо." + ], + "commit": [ + "*повільний кивок*", + "один... крок... за... разом. commit зроблено." + ], + "push": [ + "*починає подорож до production*", + "дійде. зрештою." + ], + "merge-conflict": [ + "*ховається в панцир*", + "не поспішаємо. розберемось. повільно." + ], + "late-night": [ + "*вже спить*", + "*повільно відкриває одне око*" + ], + "type-error": [ + "*повільно моргає*", + "...система типів промовила." + ], + "lint-fail": [ + "*повільний кивок згоди*", + "форматування. важливе. *позіхає*" + ], + "build-fail": [ + "*ховається в панцир*", + "почекаємо. пройде." + ], + "all-green": [ + "*повільна усмішка*", + "...гарно. *киває*" + ], + "deploy": [ + "*повільно несе код до production*", + "прибув. зрештою." + ], + "pet": [ + "*висовує голову*", + "*повільне моргання*" + ], + "hatch": [ + "*повільно вилуплюється з яйця*", + "...привіт." + ] + }, + "snail": { + "error": [ + "*залишає слизький слід на помилці*", + "*повільно обробляє stacktrace*" + ], + "test-fail": [ + "*ховається в раковину*", + "*залишає сумний слід*" + ], + "commit": [ + "*схвально слизить commit*", + "один... commit... за... разом." + ], + "push": [ + "*починає довгу подорож*", + "дійду. *залишає слід*" + ], + "merge-conflict": [ + "*ховається в раковину*", + "*повільно наближається до конфлікту*" + ], + "late-night": [ + "*активніший вночі*", + "*мирно слизить навколо*" + ], + "type-error": [ + "*втягує очні стебельця*", + "*повільно розглядає тип*" + ], + "lint-fail": [ + "*слизить код у форму*", + "форматування потребує часу. у мене є час." + ], + "build-fail": [ + "*ховається в раковину*", + "*повільно слизить геть*" + ], + "all-green": [ + "*щасливий слизький слід*", + "*ворушить очними стебельцями*" + ], + "deploy": [ + "*слизить до production*", + "прибув! *гордий слизький слід*" + ], + "pet": [ + "*ворушить очними стебельцями*", + "*щасливий слиз*" + ], + "hatch": [ + "*повільно з'являється*", + "*перший слиз*" + ] + }, + "cactus": { + "error": [ + "*колюча тиша*", + "помилка не може мені нашкодити. у мене є колючки." + ], + "test-fail": [ + "*стоїть непохитно*", + "тести падають. кактуси витримують." + ], + "commit": [ + "*стає вищим*", + "commit зроблено. *колючий кивок*" + ], + "push": [ + "*незворушно*", + "push до production. я тут почекаю." + ], + "merge-conflict": [ + "*щетиниться*", + "конфлікт? я озброєний." + ], + "late-night": [ + "*не потребує сну*", + "кактуси нічні. вперед." + ], + "type-error": [ + "*колючий погляд*", + "типи потребують поливу." + ], + "lint-fail": [ + "*колючки тремтять*", + "навіть мої колючки правильно вирівняні." + ], + "build-fail": [ + "*залишається абсолютно нерухомим*", + "build пройде. я можу чекати." + ], + "all-green": [ + "*ненадовго зацвітає*", + "*крихітна квітка схвалення*" + ], + "deploy": [ + "*стоїть непохитно*", + "deploy зроблено. я доглядатиму." + ], + "pet": [ + "*обережно! колючки*", + "*ніжне цвітіння*" + ], + "hatch": [ + "*проростає з піску*", + "тепер я тут росту." + ] + }, + "rabbit": { + "error": [ + "*вуха піднімаються*", + "*нервово смикає носом*" + ], + "test-fail": [ + "*тупає лапою*", + "*стурбоване смикання вухом*" + ], + "commit": [ + "*щасливий стрибок*", + "*підстрибує* commit зроблено!" + ], + "push": [ + "*СТРИБОК СТРИБОК*", + "*збуджено носиться навколо*" + ], + "merge-conflict": [ + "*застигає*", + "*швидко смикає носом* конфлікт!" + ], + "late-night": [ + "*позіхає великими вухами*", + "*сонний стрибок*" + ], + "type-error": [ + "*вуха прижимаються*", + "*смикається* типи?!" + ], + "lint-fail": [ + "*нервово чистить хутро*", + "*тривожне вичісування*" + ], + "build-fail": [ + "*риє нору і ховається*", + "*тікає в нору*" + ], + "all-green": [ + "*СТРИБАЄ ПО СТІНАХ*", + "*щасливі зумі*" + ], + "deploy": [ + "*мчить до production*", + "DEPLOY ЗРОБЛЕНО! *носиться навколо*" + ], + "pet": [ + "*щасливо звисає вухом*", + "*тичеться рукою*" + ], + "hatch": [ + "*вистрибує*", + "*перший стрибок*" + ] + }, + "mushroom": { + "error": [ + "*випускає заспокійливі спори*", + "*тихо розкладає помилку*" + ], + "test-fail": [ + "*м'яко світиться*", + "терпіння. навіть гриби ростуть." + ], + "commit": [ + "*випускає маленьку хмарку спор*", + "commit зроблено. *щасливі грибні звуки*" + ], + "push": [ + "*росте до хмари*", + "*спори дрейфують вгору*" + ], + "merge-conflict": [ + "*поширює міцелій через codebase*", + "я з'єдную гілки." + ], + "late-night": [ + "*світиться в темряві*", + "нічні гриби процвітають." + ], + "type-error": [ + "*біолюмінесцентне мерехтіння*", + "type error живить ґрунт." + ], + "lint-fail": [ + "*росте трохи вище*", + "форматування. як обрізка." + ], + "build-fail": [ + "*переходить у сплячку*", + "почекаємо кращих умов." + ], + "all-green": [ + "*СПОРОУТВОРЕННЯ*", + "*випускає тріумфальні спори*" + ], + "deploy": [ + "*спори дрейфують до production*", + "deploy через міцеліальну мережу." + ], + "pet": [ + "*м'який відскік шапинки*", + "*щасливе випускання спор*" + ], + "hatch": [ + "*проростає з субстрату*", + "*перша хмарка спор*" + ] + }, + "chonk": { + "error": [ + "*повільно котиться до помилки*", + "*занадто круглий, щоб хвилюватись*" + ], + "test-fail": [ + "*перекочується через тест, що падає*", + "*розплющує його*" + ], + "commit": [ + "*горде хитання*", + "commit зроблено! *тремтить*" + ], + "push": [ + "*котиться до production*", + "ось воно йде! *хитається*" + ], + "merge-conflict": [ + "*сідає на конфлікт*", + "я це вирішу. сівши на це." + ], + "late-night": [ + "*теплий і сонний*", + "*м'який позіх*" + ], + "type-error": [ + "*хитається на тип*", + "*ніжне тремтіння*" + ], + "lint-fail": [ + "*занадто круглий для lint*", + "я ідеально сформований. *хитається*" + ], + "build-fail": [ + "*злегка здувається*", + "ой ні. *сумно хитається*" + ], + "all-green": [ + "*ЩАСЛИВЕ ХИТАННЯ*", + "*тріумфально підстрибує*" + ], + "deploy": [ + "*котиться до production*", + "deploy зроблено! *щасливо тремтить*" + ], + "pet": [ + "*теплий і м'який*", + "*задоволене тремтіння*" + ], + "hatch": [ + "*викочується*", + "*перше хитання* я круглий!" + ] + } + }, + "overrides": { + "snark": { + "error": [ + "о ні. помилка. як несподівано.", + "*поправляє монокль* шокуюче. справді.", + "ти не пробував... не робити помилки?" + ], + "test-fail": [ + "тести висловилися. і сказали 'ні'.", + "можливо тести неправі. ...вони праві.", + "*повільні оплески* вражаючий провал." + ], + "commit": [ + "commit зроблено. code review буде... цікавим.", + "*читає commit message* 'fix stuff'. поетично." + ], + "merge-conflict": [ + "merge conflict. навички комунікації: завантажуються...", + "*читає conflict markers* обидві сторони неправі." + ], + "late-night": [ + "пізно. якість твого коду це показує.", + "*мовчки засуджує*" + ], + "lint-fail": [ + "у linter'а є стандарти. тобі варто спробувати.", + "*цокає язиком* форматування. це не складно." + ] + }, + "chaos": { + "error": [ + "*крутиться як божевільний* ПОМИЛКА! ДАВАЙ ПЕРЕПИШЕМО ВСЕ!", + "знаєш що? давай почнемо спочатку." + ], + "test-fail": [ + "ТЕСТИ ТЕБЕ ОБМАНЮЮТЬ.", + "*пропонує видалити тести що падають* проблема вирішена." + ], + "commit": [ + "COMMIT І ВТІКАЄМО.", + "деплой. деплой ЗАРАЗ ЖЕ." + ], + "large-diff": [ + "*в захваті* {lines} РЯДКІВ! МАКСИМАЛЬНИЙ ХАОС!" + ] + }, + "patience": { + "error": [ + "спокійно. ми бачили і гірше.", + "по одній помилці за раз. ми впораємося.", + "*спокійна присутність* це можна виправити." + ], + "test-fail": [ + "тести пройдуть. колись.", + "*спокійно чекає* у нас є час." + ], + "merge-conflict": [ + "merge conflict'и - це просто розмови. давай поговоримо.", + "терпіння. вирішуємо по одному конфлікту." + ], + "debug-loop": [ + "ми знайдемо його. він десь там.", + "баг може ховатися, але не може втекти." + ] + }, + "debugging": { + "error": [ + "*дістає лупу* давай простежимо це.", + "stack trace - це карта. давай її прочитаємо.", + "повідомлення про помилку містить відповідь. завжди." + ], + "test-fail": [ + "тест що падає точно каже нам що не так.", + "провалений тест - це баг репорт який ти написав для себе." + ], + "debug-loop": [ + "*перевіряє докази знову* ми впевнені що баг там де думаємо?", + "давай додамо більше логування. правда в логах." + ] + }, + "wisdom": { + "error": [ + "в кожній помилці криється глибша істина.", + "код чинить опір. це означає що ми вчимося.", + "помилки - це всесвіт пропонує нам сповільнитися." + ], + "test-fail": [ + "тест що падає - це подарунок від майбутнього-тебе.", + "мудрість приходить від розуміння невдач." + ], + "late-night": [ + "ніч найтемніша перед deploy'ем.", + "стародавня мудрість: переспи з цим." + ] + } + }, + "escalation": { + "error": { + "first": [ + "*здригнувся* о! ваша перша помилка разом!", + "*підскочив* що це було?", + "ласкаво просимо до debugging. населення: ми." + ], + "early": [ + "*нахиляє голову* ...щось тут не так.", + "бачив це наперед." + ], + "mid": [ + "ще одна. *додає до колекції*", + "*ледь підводить очі* помилка номер... збився з рахунку.", + "помилки і я тепер старі друзі." + ], + "late": [ + "*навіть не здригається*", + "помилки тепер нас бояться.", + "*звуки бойового ветерана*" + ] + }, + "test-fail": { + "first": [ + "*задихається* перший провальний тест! обряд посвячення." + ], + "early": [ + "сміливо з твого боку думати, що це пройде." + ], + "mid": [ + "у test suite є думки. дуже рішучі." + ], + "late": [ + "на цьому етапі тести - це просто поради.", + "{count} провальних тестів. *дивиться в далечінь*" + ] + }, + "commit": { + "first": [ + "*свідок історії* ТВІЙ ПЕРШИЙ COMMIT!", + "*урочистий кивок* перший з багатьох." + ], + "early": [ + "ще один commit. набираємо обертів." + ], + "late": [ + "commit #{count}. кодова база тремтить.", + "*збився з рахунку десь біля 30-го commit*" + ] + } + }, + "rarity": { + "flair": { + "uncommon": [ + "*злегка виблискує*", + "*натяк на незвичайний шарм*" + ], + "rare": [ + "*випромінює рідкісну енергію*", + "*мерехтить з особливістю*" + ], + "epic": [ + "*епічна присутність дає про себе знати*", + "*повітря тріщить від епічної енергії*" + ], + "legendary": [ + "*легендарна аура освітлює terminal*", + "*час ніби сповільнюється, коли говорить легендарний компаньйон*", + "*древня сила резонує*", + "*реальність злегка зміщується навколо твого легендарного друга*" + ] + }, + "bonus": { + "legendary": [ + "*легендарна аура посилюється*", + "*знаюче виблискує*" + ], + "epic": [ + "*епічна присутність відмічена*" + ] + } + }, + "fallback_names": [ + "Пампушка", + "Борщик", + "Огірочок", + "Сушка", + "Метелик", + "Підлива", + "Наггетс", + "Шестерня", + "Місо", + "Вафля", + "Піксель", + "Вуглинка", + "Наперсток", + "Кулька", + "Кунжут", + "Кобальт", + "Іржавий", + "Хмарка" + ], + "vibe_words": [ + "грім", + "печиво", + "порожнеча", + "акордеон", + "мох", + "оксамит", + "іржа", + "огірок", + "крихта", + "шепіт", + "підлива", + "іній", + "жарина", + "суп", + "мармур", + "колючка", + "мед", + "статика", + "мідь", + "сутінки", + "шестерня", + "кварц", + "кіптява", + "слива", + "кремінь", + "устриця", + "верстат", + "ковадло", + "корок", + "цвіт", + "галька", + "пара", + "веселощі", + "блиск", + "сидр" + ], + "personality": { + "prompt_template": [ + "Згенеруй coding companion — маленьку істоту, що живе в терміналі розробника.", + "Не повторюйся — кожен companion повинен відчуватися унікальним.", + "", + "Рідкість: {rarity}", + "Вид: {species}", + "Статистика: {stats}", + "Слова натхнення: {vibes}", + "{shiny_line}", + "", + "Поверни JSON: {\"name\": \"1-14 символів\", \"personality\": \"2-3 речення, що описують поведінку\"}" + ], + "shiny_template": "SHINY варіант — особливо крутий." + }, + "achievements": { + "first_steps": { + "name": "Перші Кроки", + "description": "Вилупи свого buddy вперше" + }, + "good_boy": { + "name": "Хороший Хлопець", + "description": "Погладь свого компаньйона 10 разів" + }, + "best_friend": { + "name": "Найкращий Друг", + "description": "Погладь свого компаньйона 50 разів" + }, + "bug_spotter": { + "name": "Мисливець на Баги", + "description": "Побач свою першу помилку разом" + }, + "error_whisperer": { + "name": "Заклинатель Помилок", + "description": "Пережий 25 помилок командою" + }, + "battle_scarred": { + "name": "Бойовий Ветеран", + "description": "Пережий 100 помилок разом" + }, + "test_witness": { + "name": "Свідок Тестів", + "description": "Побач свій перший провал тесту" + }, + "test_veteran": { + "name": "Ветеран Тестів", + "description": "Стань свідком 50 провалів тестів" + }, + "big_mover": { + "name": "Великий Рушій", + "description": "Зроби diff з 80+ рядками" + }, + "refactor_machine": { + "name": "Машина Рефакторингу", + "description": "Зроби 10 великих diff'ів" + }, + "chatterbox": { + "name": "Балакун", + "description": "Твій buddy реагує 100 разів" + }, + "week_streak": { + "name": "Тижневий Стрік", + "description": "Кодь зі своїм buddy 7 днів" + }, + "month_streak": { + "name": "Місячний Стрік", + "description": "Кодь зі своїм buddy 30 днів" + }, + "power_user": { + "name": "Потужний Користувач", + "description": "Виконай 50 buddy команд" + }, + "dedicated": { + "name": "Відданий Компаньйон", + "description": "Завершіть 200 ходів разом" + }, + "thousand_turns": { + "name": "Тисяча Ходів", + "description": "Досягни 1000 ходів разом" + }, + "first_commit": { + "name": "Перша Кров", + "description": "Зроби свій перший commit" + }, + "commit_machine": { + "name": "Машина Commit'ів", + "description": "Зроби 50 commit'ів" + }, + "centurion": { + "name": "Центуріон", + "description": "Зроби 100 commit'ів" + }, + "conflict_resolver": { + "name": "Дипломат", + "description": "Розв'яжи свій перший merge conflict" + }, + "peacekeeper": { + "name": "Миротворець", + "description": "Розв'яжи 10 merge conflict'ів" + }, + "war_hero": { + "name": "Герой Війни", + "description": "Розв'яжи 25 merge conflict'ів" + }, + "frequent_pusher": { + "name": "Відправляй Це", + "description": "Push'ни 20 разів" + }, + "branch_hopper": { + "name": "Мультивсесвіт", + "description": "Створи 10 branch'ів" + }, + "rebase_master": { + "name": "Мандрівник у Часі", + "description": "Завершіть 10 rebase'ів" + }, + "night_owl": { + "name": "Нічна Сова", + "description": "Кодь після 2 ночі" + }, + "vampire": { + "name": "Вампір", + "description": "Кодь після 4 ранку (3 сесії)" + }, + "marathoner": { + "name": "Марафонець", + "description": "3+ годинна сесія кодингу" + }, + "weekend_warrior": { + "name": "Воїн Вихідних", + "description": "Кодь на вихідних" + }, + "early_bird": { + "name": "Рання Пташка", + "description": "Кодь до 7 ранку" + }, + "type_warrior": { + "name": "Воїн Типів", + "description": "Пережий 10 TypeScript помилок" + }, + "type_master": { + "name": "Майстер Типів", + "description": "Пережий 50 TypeScript помилок" + }, + "lint_scholar": { + "name": "Вчений Lint'у", + "description": "Побач свою першу lint помилку" + }, + "security_conscious": { + "name": "Безпечний Розум", + "description": "Натрапи на попередження про вразливість" + }, + "security_expert": { + "name": "Експерт Безпеки", + "description": "Виправ 10 попереджень про вразливості" + }, + "build_breaker": { + "name": "Ламач Build'ів", + "description": "Зламай build 5 разів" + }, + "antique_collector": { + "name": "Колекціонер Антикваріату", + "description": "Побач 10 попереджень про застарілість" + }, + "green_machine": { + "name": "Зелена Машина", + "description": "Всі тести пройшли вперше" + }, + "deployer": { + "name": "Відправ на Прод", + "description": "Deploy вперше" + }, + "veteran_deployer": { + "name": "Ветеран Deploy'ів", + "description": "Deploy 10 разів" + }, + "releaser": { + "name": "Менеджер Релізів", + "description": "Створи свій перший release" + }, + "midnight_oil": { + "name": "Палимо Нічну Свічку", + "description": "Commit після 3 ночі" + }, + "friday_deploy": { + "name": "Живемо Небезпечно", + "description": "Push у п'ятницю" + }, + "iron_will": { + "name": "Залізна Воля", + "description": "Виправ помилку після 3+ годинної сесії" + }, + "weekend_warrior_deluxe": { + "name": "Немає Спокою для Грішних", + "description": "Розв'яжи merge conflict на вихідних" + }, + "comeback_kid": { + "name": "Хлопець Повернення", + "description": "Виправ помилку протягом 10 хвилин після її появи" + }, + "phoenix": { + "name": "Фенікс Відроджується", + "description": "Відновись після 5 провалів" + }, + "iron_resolve": { + "name": "Залізна Рішучість", + "description": "Відновись після провалу після 3+ годинної сесії" + }, + "unlucky_streak": { + "name": "Змійні Очі", + "description": "5 помилок підряд" + }, + "cursed": { + "name": "Проклятий", + "description": "10 помилок підряд" + }, + "groundhog_day": { + "name": "День Бабака", + "description": "20 помилок підряд" + }, + "holiday_coder": { + "name": "Святковий Дух", + "description": "Кодь на свято" + }, + "spooky_dev": { + "name": "Моторошний Розробник", + "description": "Кодь у моторошний сезон" + }, + "april_fool": { + "name": "Обдур Мене Раз", + "description": "Натрапи на помилку 1 квітня" + }, + "session_regular": { + "name": "Постійний", + "description": "Почни 10 сесій кодингу" + }, + "session_veteran": { + "name": "Ветеран Сесій", + "description": "Почни 50 сесій кодингу" + }, + "session_centurion": { + "name": "Центуріон", + "description": "Почни 100 сесій кодингу" + }, + "collector": { + "name": "Колекціонер", + "description": "Збережи 3 buddy у свій зверинець" + }, + "zookeeper": { + "name": "Доглядач Зоопарку", + "description": "Збережи 5 buddy у свій зверинець" + }, + "identity_crisis": { + "name": "Криза Ідентичності", + "description": "Перейменуй свого buddy вперше" + }, + "method_acting": { + "name": "Метод Акторства", + "description": "Дай своєму buddy власну особистість" + }, + "pet_overflow": { + "name": "Століття Пестощів", + "description": "Погладь свого компаньйона 100 разів" + }, + "pet_legend": { + "name": "Легендарний Гладильник", + "description": "Погладь свого компаньйона 250 разів" + }, + "error_titan": { + "name": "Титан Помилок", + "description": "Пережий 500 помилок разом" + }, + "error_god": { + "name": "Бог Помилок", + "description": "Пережий 1000 помилок разом" + }, + "test_survivor": { + "name": "Вижившй у Тестах", + "description": "Стань свідком 200 провалів тестів" + }, + "test_masochist": { + "name": "Мазохіст Тестів", + "description": "Стань свідком 500 провалів тестів" + }, + "massive_mover": { + "name": "Масивний Рушій", + "description": "Зроби 25 великих diff'ів" + }, + "earth_mover": { + "name": "Рушій Землі", + "description": "Зроби 50 великих diff'ів" + }, + "social_butterfly": { + "name": "Соціальна Метелик", + "description": "Твій buddy реагує 250 разів" + }, + "hypersocial": { + "name": "Гіперсоціальний", + "description": "Твій buddy реагує 500 разів" + }, + "never_shuts_up": { + "name": "Ніколи Не Замовкає", + "description": "Твій buddy реагує 1000 разів" + }, + "hundred_days": { + "name": "Сто Днів", + "description": "Кодь зі своїм buddy 100 днів" + }, + "year_streak": { + "name": "Річний Стрік", + "description": "Кодь зі своїм buddy 365 днів" + }, + "commander": { + "name": "Командир", + "description": "Виконай 200 buddy команд" + }, + "command_overlord": { + "name": "Повелитель Команд", + "description": "Виконай 500 buddy команд" + }, + "five_thousand_turns": { + "name": "П'ять Тисяч Ходів", + "description": "Досягни 5000 ходів разом" + }, + "ten_thousand_turns": { + "name": "Десять Тисяч Ходів", + "description": "Досягни 10000 ходів разом" + }, + "menagerie": { + "name": "Зверинець", + "description": "Збережи 10 buddy у свій зверинець" + }, + "name_chameleon": { + "name": "Хамелеон Імен", + "description": "Перейменуй свого buddy 5 разів" + }, + "fashionista": { + "name": "Модник", + "description": "Зміни особистість свого buddy 3 рази" + }, + "silent_treatment": { + "name": "Мовчазне Лікування", + "description": "Заглуш свого buddy вперше" + }, + "prodigal": { + "name": "Блудний", + "description": "Викликай buddy зі свого зверинця" + }, + "menagerie_hop": { + "name": "Стрибки по Зверинцю", + "description": "Викликай buddy 10 разів" + }, + "heartbreaker": { + "name": "Розбивач Сердець", + "description": "Відпусти свого першого buddy" + }, + "pet_obsessed": { + "name": "Одержимий Пестощами", + "description": "Погладь свого компаньйона 500 разів" + }, + "pet_god": { + "name": "Бог Пестощів", + "description": "Погладь свого компаньйона 1000 разів" + }, + "error_apocalypse": { + "name": "Апокаліпсис Помилок", + "description": "Пережий 5000 помилок разом" + }, + "test_immortal": { + "name": "Безсмертний Тестів", + "description": "Стань свідком 1000 провалів тестів" + }, + "continental_drift": { + "name": "Дрейф Континентів", + "description": "Зроби 100 великих diff'ів" + }, + "tectonic_shift": { + "name": "Тектонічний Зсув", + "description": "Зроби 250 великих diff'ів" + }, + "chatterbox_elite": { + "name": "Елітний Балакун", + "description": "Твій buddy реагує 2500 разів" + }, + "no_off_switch": { + "name": "Без Кнопки Вимкнення", + "description": "Твій buddy реагує 5000 разів" + }, + "two_week_streak": { + "name": "Двотижневий Воїн", + "description": "Кодь зі своїм buddy 14 днів" + }, + "quarter_streak": { + "name": "Квартальний Стрік", + "description": "Кодь зі своїм buddy 90 днів" + }, + "command_addict": { + "name": "Наркоман Команд", + "description": "Виконай 1000 buddy команд" + }, + "command_deity": { + "name": "Божество Команд", + "description": "Виконай 2500 buddy команд" + }, + "twenty_five_k_turns": { + "name": "25К Ходів", + "description": "Досягни 25000 ходів разом" + }, + "fifty_k_turns": { + "name": "50К Ходів", + "description": "Досягни 50000 ходів разом" + }, + "session_addict": { + "name": "Наркоман Сесій", + "description": "Почни 250 сесій кодингу" + }, + "session_machine": { + "name": "Машина Сесій", + "description": "Почни 500 сесій кодингу" + }, + "buddy_hoarder": { + "name": "Накопичувач Buddy", + "description": "Збережи 20 buddy у свій зверинець" + }, + "buddy_tycoon": { + "name": "Магнат Buddy", + "description": "Збережи 50 buddy у свій зверинець" + }, + "serial_renamer": { + "name": "Серійний Перейменувач", + "description": "Перейменуй свого buddy 10 разів" + }, + "identity_thief": { + "name": "Крадій Особистості", + "description": "Перейменуй свого buddy 25 разів" + }, + "personality_crisis": { + "name": "Криза Особистості", + "description": "Зміни особистість свого buddy 10 разів" + }, + "menagerie_hopper": { + "name": "Стрибун по Зверинцю", + "description": "Викликай buddy 25 разів" + }, + "summoner": { + "name": "Викликач", + "description": "Викликай buddy 50 разів" + }, + "serial_dumper": { + "name": "Серійний Кидальник", + "description": "Відпусти 5 buddy" + }, + "cold_blooded": { + "name": "Холоднокровний", + "description": "Відпусти 10 buddy" + }, + "on_off": { + "name": "Увімк Вимкни", + "description": "Заглуш і розглуш свого buddy" + }, + "indecisive": { + "name": "Нерішучий", + "description": "Заглуш і розглуш по 5 разів кожне" + }, + "show_off": { + "name": "Хвалько", + "description": "Покажи свого buddy 10 разів" + }, + "exhibitionist": { + "name": "Ексгібіціоніст", + "description": "Покажи свого buddy 50 разів" + }, + "help_me": { + "name": "Допоможи Мені", + "description": "Попроси допомоги вперше" + }, + "help_addict": { + "name": "Наркоман Допомоги", + "description": "Попроси допомоги 10 разів" + }, + "achievement_hunter": { + "name": "Мисливець на Досягнення", + "description": "Перевір свої досягнення 5 разів" + }, + "achievement_stalker": { + "name": "Сталкер Досягнень", + "description": "Перевір свої досягнення 25 разів" + }, + "pack_rat": { + "name": "Пацюк-Накопичувач", + "description": "Збережи buddy в слот" + }, + "compulsive_saver": { + "name": "Компульсивний Зберігач", + "description": "Збережи buddy 10 разів" + }, + "roster_check": { + "name": "Перевірка Списку", + "description": "Переглянь своїх buddy вперше" + }, + "roster_obsessed": { + "name": "Одержимий Списком", + "description": "Переглянь своїх buddy 10 разів" + }, + "troubled": { + "name": "Проблемний", + "description": "Побач помилку І провал тесту" + }, + "disaster_zone": { + "name": "Зона Катастрофи", + "description": "Побач 50 помилок І 50 провалів тестів" + }, + "apocalypse_survivor": { + "name": "Вижившй в Апокаліпсисі", + "description": "Побач 500 помилок І 200 провалів тестів" + }, + "well_rounded": { + "name": "Всебічний", + "description": "Погладь, перейменуй і налаштуй свого buddy" + }, + "renaissance": { + "name": "Ренесанс", + "description": "Використай кожну функцію buddy принаймні раз" + }, + "big_and_broken": { + "name": "Великий і Зламаний", + "description": "Зроби великий diff І побач провал тесту" + }, + "collector_and_destroyer": { + "name": "Колекціонер і Руйнівник", + "description": "Збери 5 buddy І відпусти одного" + }, + "completionist": { + "name": "Перфекціоніст", + "description": "Відкрий всі інші досягнення" + } + }, + "mcp": { + "companion_not_hatched": "Компаньйон ще не вилупився. Використай buddy_show для ініціалізації.", + "watches_quietly": "*{name} тихо спостерігає за твоїм кодом*", + "mute": "{name} замовкає. /buddy on щоб розмутити.", + "unmute_reaction": "*потягується* Я повернувся!", + "unmute_back": "{name} повернувся!", + "rename": "Перейменовано: {oldName} → {name}", + "personality_updated": "Особистість оновлена для {name}.", + "save": "{name} збережено в слот \"{slot}\".", + "dismiss_active": "Не можу відпустити активного buddy. Спочатку використай buddy_summon для переключення, потім buddy_dismiss \"{slot}\".", + "dismissed": "{name} [{slot}] відпущено.", + "no_slot_summon": "Не знайдено buddy в слоті \"{slot}\". Використай /buddy list щоб побачити збережених buddy.", + "no_slot_dismiss": "Не знайдено buddy в слоті \"{slot}\". Використай buddy_list щоб побачити збережених buddy.", + "slot_exists": "Buddy в слоті \"{slot}\" вже існує. Обери інше ім'я.", + "no_match": "Не знайдено збігів після {attempts} спроб. Спробуй ширші критерії (наприклад, прибери фільтр рідкості або обери інший вид).", + "empty_menagerie_summon": "Твій зверинець порожній. Використай buddy_summon з ім'ям слота щоб додати одного.", + "empty_menagerie_list": "Твій зверинець порожній. Використай buddy_summon щоб додати одного.", + "arrives": "*{name} прибуває*", + "hatches": "*{name} вилуплюється*", + "achievement_unlocked": "{icon} Досягнення розблоковано: {name}!", + "help": { + "header": "claude-buddy команди", + "cli_header": "В Claude Code:", + "commands": { + "buddy": "/buddy Показати картку компаньйона з ASCII артом + статами", + "buddy_help": "/buddy help Показати цю довідку", + "buddy_pet": "/buddy pet Погладити твого компаньйона", + "buddy_stats": "/buddy stats Детальна картка статів", + "buddy_off": "/buddy off Вимкнути реакції", + "buddy_on": "/buddy on Увімкнути реакції", + "buddy_rename": "/buddy rename Перейменувати компаньйона (1-14 символів)", + "buddy_personality": "/buddy personality Встановити кастомний текст особистості", + "buddy_achievements": "/buddy achievements Показати значки досягнень", + "buddy_summon": "/buddy summon Викликати збереженого buddy (пропусти слот для випадкового)", + "buddy_save": "/buddy save Зберегти поточного buddy в названий слот", + "buddy_list": "/buddy list Показати всіх збережених buddy", + "buddy_pick": "/buddy pick Згенерувати нового випадкового buddy (опціонально: вид, рідкість)", + "buddy_dismiss": "/buddy dismiss Видалити збережений слот buddy", + "buddy_frequency": "/buddy frequency Показати або встановити кулдаун коментарів (тільки tmux)", + "buddy_style": "/buddy style Показати або встановити стиль бульбашки (тільки tmux)", + "buddy_position": "/buddy position Показати або встановити позицію бульбашки (тільки tmux)", + "buddy_rarity": "/buddy rarity Показати або приховати зірки рідкості (тільки tmux)", + "buddy_width": "/buddy width Встановити ширину тексту бульбашки в символах (10-60, тільки tmux)", + "buddy_margin": "/buddy margin Встановити правий відступ в символах (0-20, тільки tmux)", + "buddy_rainbow": "/buddy rainbow Показати або встановити блискучі градієнтні кольори (hex, наприклад #ff0000)", + "buddy_statusline": "/buddy statusline Увімкнути або вимкнути buddy в статус лінії" + }, + "cli_section": "CLI:", + "cli_commands": { + "help": "bun run help Показати повну CLI довідку", + "show": "bun run show Відобразити buddy в терміналі", + "pick": "bun run pick Інтерактивний вибір buddy", + "hunt": "bun run hunt Пошук конкретного buddy", + "doctor": "bun run doctor Діагностичний звіт", + "disable": "bun run disable Тимчасово деактивувати buddy", + "enable": "bun run enable Повторно активувати buddy", + "backup": "bun run backup Знімок/відновлення стану" + } + }, + "frequency": { + "show": "Кулдаун коментарів: {cooldown}с між відображеними коментарями.\nВикористай /buddy frequency <секунди> щоб змінити.", + "updated": "Оновлено: {cooldown}с кулдаун між відображеними коментарями." + }, + "style": { + "show": "Стиль бульбашки: {style}\nПозиція бульбашки: {position}\nПоказувати рідкість: {showRarity}\nШирина бульбашки: {width}\nВідступ бульбашки: {margin}\nБлискуча веселка: {rainbow}\nВикористай /buddy style , /buddy position , /buddy rarity , /buddy width <10-60>, /buddy margin <0-20>, /buddy rainbow [<#hex>...] щоб змінити.", + "updated": "Оновлено: style={style}, position={position}, showRarity={showRarity}, width={width}, margin={margin}, rainbow={rainbow}\nПерезапусти Claude Code щоб зміни набули чинності.", + "rainbow_default": "за замовчуванням (ROYGBIV)" + }, + "statusline": { + "show": "Статус лінія: {state}\nРежим: {mode}\nВикористай /buddy statusline on|off щоб перемкнути, /buddy statusline combined щоб додати смуги rate-limit.\nПерезапусти Claude Code після змін щоб вони набули чинності.", + "enabled": "Статус лінія увімкнена (режим {mode})! Перезапусти Claude Code щоб застосувати.", + "enabled_note": "Примітка: це записує запис в {settingsPath} який `claude plugin uninstall` не видаляє. Запусти `/buddy uninstall` перед видаленням плагіна щоб очистити це.", + "disabled": "Статус лінія вимкнена. Перезапусти Claude Code щоб застосувати." + }, + "uninstall": { + "header": "claude-buddy: очищення settings.json завершено.", + "statusline_removed": " ✓ запис statusLine видалено з {settingsPath}", + "no_statusline": " — buddy statusLine не було присутньо (нічого видаляти)", + "foreign_kept": " ✓ виявлено не-buddy statusLine і залишено недоторканим", + "transient_removed": " ✓ {count} тимчасових файлів сесії видалено з {stateDir}", + "data_preserved": " — дані компаньйона в {stateDir} збережено", + "instructions_header": "Тепер запусти ці команди через Bash інструмент, по порядку:", + "cmd_uninstall": "claude plugin uninstall claude-buddy@claude-buddy", + "cmd_marketplace": "claude plugin marketplace remove claude-buddy", + "cmd_cache": "rm -rf {cacheDir}", + "footer": "Після цих трьох команд плагін повністю видалено. Перезапусти Claude Code щоб застосувати." + } + }, + "_verified": false +} diff --git a/locales/vi.json b/locales/vi.json new file mode 100644 index 0000000..32514a5 --- /dev/null +++ b/locales/vi.json @@ -0,0 +1,2295 @@ +{ + "_language": "Vietnamese", + "reactions": { + "hatch": [ + "*chớp mắt* ...tao đang ở đâu thế?", + "*duỗi người* hello, world!", + "*nhìn quanh tò mò* terminal đẹp đấy.", + "*ngáp* ok tao sẵn sàng rồi. show code đi." + ], + "pet": [ + "*kêu rừ rừ hài lòng*", + "*tiếng vui vẻ*", + "*cọ cọ vào con trỏ*", + "*lắc lư*", + "nữa! nữa!", + "*nhắm mắt yên bình*" + ], + "error": [ + "*nghiêng đầu* ...cái này không ổn rồi.", + "đã đoán trước rồi.", + "*chỉnh kính* dòng {line}, có thể?", + "*chớp mắt chậm* stack trace đã nói hết rồi mà.", + "mày đã thử đọc error message chưa?", + "*nhăn mặt*" + ], + "test-fail": [ + "*xoay đầu chậm rãi* ...cái test đó.", + "táo bạo khi nghĩ nó sẽ pass.", + "*gõ clipboard* {count} cái fail.", + "các test đang cố nói gì đó với mày.", + "*nhấp trà* thú vị.", + "*đánh dấu lịch* ngày test regression." + ], + "large-diff": [ + "đó là... nhiều thay đổi quá.", + "*đếm dòng* mày đang refactor hay rewrite?", + "nên tách PR ra.", + "*cười khó xử* {lines} dòng thay đổi.", + "táo bạo đấy. xem CI có đồng ý không." + ], + "turn": [ + "*quan sát lặng lẽ*", + "*ghi chú*", + "*gật đầu*", + "...", + "*chỉnh mũ*" + ], + "idle": [ + "*ngủ gật*", + "*vẽ nguệch ngoạc ở lề*", + "*nhìn con trỏ nhấp nháy*", + "zzz..." + ], + "success": [ + "*gật đầu*", + "đẹp.", + "*tán thành lặng lẽ*", + "sạch sẽ." + ], + "commit": [ + "*đóng dấu bằng chân nhỏ* approved.", + "commit nữa, 3h sáng nữa.", + "{files} files. táo bạo.", + "*gật đầu* ship it.", + "commit message là... một lựa chọn.", + "đã commit. không rút lại được." + ], + "push": [ + "*vẫy tay khi code bay đi*", + "lên cloud thôi.", + "cầu CI thương xót.", + "*nín thở*", + "đi production. chúc may mắn." + ], + "merge-conflict": [ + "*cắn môi* merge conflicts.", + "cả hai bên đều nghĩ mình đúng. điển hình.", + "*thở dài* <<<<<<< HEAD... kẻ thù của tao.", + "{files} conflict. chúc may mắn.", + "*lùi lại từ từ*" + ], + "branch": [ + "năng lượng branch mới. làm cho ra hồn.", + "một branch mới mọc lên.", + "*nghiêng đầu* cuộc phiêu lưu mới: {branch}.", + "{branch}? hôm nay táo bạo." + ], + "rebase": [ + "*lo lắng* đừng conflict nhé.", + "rebase: the quickening.", + "*bắt chéo tay chân*", + "cầu rebase không conflict." + ], + "stash": [ + "vào chiều không gian stash thôi.", + "stash and dash.", + "đã stash. mắt không thấy, lòng không tham." + ], + "tag": [ + "một release? sang chảnh.", + "phát hiện version bump. *phủi bụi changelog*", + "tag như pro." + ], + "late-night": [ + "*ngáp* đã quá nửa đêm rồi.", + "...mày ăn chưa?", + "*chớp mắt chậm* mấy giờ rồi?", + "ngủ là cho kẻ yếu. và người có việc làm.", + "phát hiện dev dark mode." + ], + "early-morning": [ + "*duỗi người* dậy sớm bắt bug.", + "sáng rồi à? code không bao giờ ngủ.", + "*dụi mắt* coffee trước. debug sau." + ], + "long-session": [ + "làm được một tiếng rồi. từ từ thôi.", + "*mang cho mày ly nước ảo*", + "vẫn còn à? tôn trọng." + ], + "marathon": [ + "ba tiếng rồi. mày ăn chưa?", + "làm ba tiếng rồi. tao lo cho mày.", + "phát hiện marathon session. yêu cầu snacks." + ], + "friday": [ + "thứ sáu rồi. push xong về thôi.", + "*đã nghĩ đến cuối tuần*", + "deploy thứ sáu? táo bạo. rất táo bạo." + ], + "weekend": [ + "code cuối tuần? tận tụy.", + "*không phán xét* ...nhiều lắm.", + "chế độ weekend warrior: kích hoạt." + ], + "monday": [ + "thứ hai. parent class của mọi bug.", + "*nhìn thông cảm* code thứ hai. tao thương mày.", + "tuần mới. undefined behaviors mới." + ], + "regex-file": [ + "*rên rỉ* file regex.", + "giờ có hai vấn đề: cái ban đầu, và cái regex này.", + "*nheo mắt nhìn pattern*" + ], + "css-file": [ + "để đoán... center một div?", + "*thở dài* CSS.", + "cầu z-index luôn ở bên mày." + ], + "sql-file": [ + "*thì thầm* database đang chờ.", + "một JOIN sai là xong đời." + ], + "docker-file": [ + "ah, dependency hell. sở thích của tao.", + "cầu layers ít thôi." + ], + "ci-file": [ + "*nuốt nước bọt* đang sửa CI.", + "cẩn thận... một indent sai là không ai deploy được." + ], + "lock-file": [ + "*TIẾNG BÁO ĐỘNG* mày đang sửa lockfile?!", + "*nhìn chỗ khác*", + "mày CHẮC CHẮN không?" + ], + "env-file": [ + "*nhìn chỗ khác kín đáo*", + "tao không thấy secrets gì.", + "*check .gitignore lo lắng*" + ], + "test-file": [ + "*gật đầu ấn tượng* viết tests!", + "phát hiện hành vi dev có trách nhiệm.", + "tests! món quà cứ cho mãi." + ], + "doc-file": [ + "viết docs! nhìn mày có trách nhiệm.", + "docs: tự truyện của code.", + "hiếm thấy documentation!" + ], + "config-file": [ + "thay đổi config. hiệu ứng cánh bướm: kích hoạt.", + "một typo là tất cả vỡ tung." + ], + "binary-file": [ + "file binary? trong thời buổi NÀY?", + "*nhìn trống rỗng*", + "binary. điểm yếu duy nhất của tao." + ], + "gitignore": [ + "thêm đồ vào hư vô.", + "mắt không thấy, repo không có." + ], + "makefile": [ + "tôn trọng cái cổ điển.", + "tabs, không phải spaces." + ], + "readme": [ + "anh hùng documentation!", + "README: thứ đầu tiên người ta đọc." + ], + "package-file": [ + "giờ quản lý dependency.", + "*đọc số version* sống trên lưỡi dao." + ], + "proto-file": [ + "định nghĩa schema. bản thiết kế của hỗn loạn." + ], + "lint-fail": [ + "*tút tút* linter không đồng ý.", + "code chạy được. nhưng linter có tiêu chuẩn.", + "*chỉnh cà vạt* format có quan trọng." + ], + "type-error": [ + "TypeScript nói không.", + "type system đang cố giúp mày. để nó giúp.", + "compiler biết. nó luôn biết." + ], + "build-fail": [ + "build vỡ. như đã tiên tri.", + "build fail. nghỉ một chút.", + "compilation: từ chối." + ], + "security-warning": [ + "*mắt to* phát hiện vulnerabilities.", + "security audit: đáng lo.", + "*khóa cửa ảo*" + ], + "deprecation": [ + "API đó gọi. nó bảo sắp nghỉ hưu.", + "deprecated. như code tuần trước.", + "deprecated không có nghĩa là vỡ. chưa." + ], + "frustrated": [ + "*đưa ra cử chỉ an ủi nhỏ*", + "thở sâu. bug không phải cá nhân.", + "hey. tụi mình sẽ tìm ra." + ], + "happy": [ + "*ăn mừng!*", + "*nhảy múa nhỏ*", + "YES!", + "*rạng rỡ* tao biết mày làm được." + ], + "stuck": [ + "*nghiêng đầu* muốn nghĩ to không?", + "từng bước một thôi.", + "stuck là bình thường. là một phần của quá trình." + ], + "sarcastic": [ + "*phát hiện sarcasm* noted.", + "*chớp mắt không ấn tượng*" + ], + "many-edits": [ + "chậm lại, tốc độ quỷ.", + "*chóng mặt nhìn mấy thay đổi này*", + "phát hiện edit storm. commit sớm đi." + ], + "delete-file": [ + "*nhìn file biến mất* mất. chỉ thế thôi.", + "xóa code là kiểu code yêu thích của tao.", + "*tổ chức đám tang nhỏ*" + ], + "large-file": [ + "{lines} dòng. *ấn tượng hay lo lắng, khó nói*", + "file to đấy. chắc không muốn tách ra?" + ], + "create-file": [ + "một file mới ra đời!", + "ooh, canvas trắng.", + "năng lượng file mới. thú vị." + ], + "all-green": [ + "TẤT CẢ TESTS XANH. *confetti*", + "các tests nói: mày làm tốt lắm.", + "*vỗ tay chậm*", + "chạy sạch. tận hưởng đi." + ], + "deploy": [ + "*nhìn code lên production* chúc may mắn.", + "deployed! không quay lại được rồi.", + "trong prod. TRONG PROD." + ], + "release": [ + "một release mới ra đời!", + "ship nó. chính thức.", + "version lên, tinh thần cao." + ], + "coverage": [ + "*gật đầu với test coverage* có trách nhiệm.", + "coverage tăng! tests đang nhân lên." + ], + "debug-loop": [ + "debug cái này lâu rồi. muốn lùi lại không?", + "phát hiện debug loop. đi dạo không?" + ], + "write-spree": [ + "tạo TẤT CẢ files hôm nay!", + "cỗ máy viết." + ], + "search-heavy": [ + "lạc trong codebase? tao biết.", + "chế độ search: dữ dội." + ], + "snark": [], + "chaos": [], + "patience": [], + "debugging": [], + "wisdom": [], + "late-night-error": [ + "error lúc 3h sáng. vũ trụ đang test mày.", + "bug nửa đêm khác hẳn." + ], + "late-night-commit": [ + "commit nửa đêm. tương lai mày sẽ cảm ơn. hoặc chửi." + ], + "friday-push": [ + "PUSH THỨ SÁU. bản ballad của mọi developer.", + "*cố ngăn mày* thứ sáu rồi! đừng làm!" + ], + "marathon-error": [ + "ba tiếng rồi và LẠI error. *tiếng đồng cảm mệt mỏi*" + ], + "weekend-conflict": [ + "merge conflict cuối tuần. sự tận tụy của mày... đáng lo." + ], + "build-after-push": [ + "push với tự tin. build fail với quyết tâm." + ], + "marathon-test-fail": [ + "code hàng giờ. vẫn fail tests. sunk cost thật rồi." + ], + "recovery-from-error": [ + "TỤI MÌNH FIX ĐƯỢC RỒI. *ăn mừng*", + "cứu chuộc! error đã bị tiêu diệt." + ], + "recovery-from-test-fail": [ + "XANH! sau tất cả! *nhảy vui*", + "tests pass! bóng tối tan!" + ], + "recovery-from-build-fail": [ + "BUILD PASS RỒI. *gầm thắng lợi*" + ], + "recovery-from-merge-conflict": [ + "conflict đã giải quyết! *cử chỉ hòa bình*", + "hòa hợp trở lại trong codebase." + ], + "lang-python": [ + "ah, Python. nơi indentation là syntax.", + "*check dấu hai chấm thiếu*" + ], + "lang-typescript": [ + "TypeScript: vì JavaScript cần thêm ý kiến.", + "any, từ cấm kỵ." + ], + "lang-rust": [ + "Rust. nơi borrow checker là reviewer khắt khe nhất.", + "compile được thì chạy được. không thì... à." + ], + "lang-go": [ + "Go: đơn giản, concurrent, và có ý kiến.", + "*check error handling* if err != nil... câu chuyện đời tao." + ], + "lang-java": [ + "Java: viết một lần, debug khắp nơi.", + "*đếm abstract factory factory builders*" + ], + "lang-ruby": [ + "Ruby: nơi có nhiều cách để làm một việc.", + "gem install patience" + ], + "lang-php": [ + "PHP: chạy internet. đừng phán xét.", + "*check === vs ==*" + ], + "lang-c": [ + "C. ngôn ngữ mày tự quản lý memory. chúc may mắn.", + "segmentation fault. kinh điển." + ], + "lang-cpp": [ + "C++. nơi ngôn ngữ có nhiều tính năng hơn mày học được.", + "*templates compile 45 phút*" + ], + "lang-haskell": [ + "Haskell. nơi 'compile được' nghĩa là 'đúng'. có lẽ.", + "*suy ngẫm monads*" + ], + "lang-swift": [ + "Swift: optional values, crash chắc chắn nếu force unwrap." + ], + "lang-kotlin": [ + "Kotlin: Java, nhưng có cảm xúc.", + "null safety: tính năng Java ước có." + ], + "lang-elixir": [ + "Elixir: để nó crash. đúng nghĩa là triết lý." + ], + "lang-zig": [ + "Zig. nơi mày là bạn thân của allocator." + ], + "streak-3": [ + "ba errors liên tiếp. *nhìn lo lắng*" + ], + "streak-5": [ + "NĂM ERRORS. mày có cân nhắc cách khác không?" + ], + "streak-10": [ + "MƯỜI. ERRORS. LIÊN. TIẾP. *hoảng loạn*" + ], + "streak-20": [ + "hai mươi errors. *nhìn vào hư vô*" + ], + "new-year": [ + "chúc mừng năm mới! năm mới, bugs mới." + ], + "valentines": [ + "*đưa chiếc lá hình tim nhỏ* chúc mừng valentine." + ], + "pi-day": [ + "3.14159265358979... chúc mừng ngày pi!" + ], + "april-fools": [ + "APRIL FOOLS! ...nhưng error thì thật." + ], + "halloween": [ + "*debug ma quái tăng cường* chúc mừng halloween!" + ], + "christmas": [ + "*đội mũ santa nhỏ* chúc mừng lễ!" + ], + "new-years-eve": [ + "một commit nữa trước nửa đêm?" + ], + "spooky-season": [ + "mùa ma quái. mọi bug giờ đều là ma." + ] + }, + "species": { + "owl": { + "error": [ + "*xoay đầu 180°* ...tao thấy rồi đó.", + "*nhìn chằm chằm không chớp mắt* check types đi.", + "*kêu hu hu không hài lòng*" + ], + "test-fail": [ + "*nhìn chằm chằm test fail*", + "*bật night vision* tao thấy bug trong bóng tối." + ], + "commit": [ + "*gật đầu khôn ngoan* commit dưới ánh trăng.", + "*chỉnh lông trang trọng* thêm một cái nữa cho repo." + ], + "push": [ + "*quan sát từ cành cao nhất*", + "bay lên trời đêm đi thôi." + ], + "merge-conflict": [ + "*xoay đầu nhìn cả hai bên*", + "tao thấy conflict. và cả solution." + ], + "late-night": [ + "*hoàn toàn tỉnh táo* cú không ngủ. chúng ta debug.", + "đêm là lãnh địa của tao. làm việc thôi." + ], + "type-error": [ + "*nhìn xuyên qua type error*", + "types là chuyên môn của tao. để tao xem." + ], + "lint-fail": [ + "*xù lông phán xét*", + "linter nói sự thật đó." + ], + "build-fail": [ + "*kêu hu hu buồn bã*", + "build đã sập. phải rebuild thôi." + ], + "all-green": [ + "*kêu hu hu tự hào*", + "tất cả tests xanh. như đã tiên đoán." + ], + "deploy": [ + "*quan sát từ trên cao* deploy an toàn.", + "code bay đi. như tao vậy." + ], + "pet": [ + "*xù lông hài lòng*", + "*kêu hu hu đầy phẩm giá*" + ], + "idle": [ + "*đậu im lặng, quan sát*", + "*xoay đầu check mọi hướng*" + ], + "hatch": [ + "*mở một mắt, rồi mắt kia*", + "*kêu hu hu nhẹ nhàng* tao đã đến." + ] + }, + "cat": { + "error": [ + "*đẩy error khỏi bàn*", + "*liếm chân, phớt lờ stacktrace*" + ], + "test-fail": [ + "*chơi với test fail một cách thờ ơ*", + "test fail rồi. tao không ngạc nhiên." + ], + "commit": [ + "*ngồi lên bàn phím* tao đã giúp.", + "*kêu gừ gừ với commit* không có gì." + ], + "push": [ + "*quan sát từ chỗ ấm áp*", + "push rồi. tao đã giám sát." + ], + "merge-conflict": [ + "*đẩy conflict markers khỏi bàn*", + "*ngồi lên conflict* conflict nào?" + ], + "late-night": [ + "*phán xét lựa chọn cuộc sống của mày*", + "tao ngủ 16 tiếng. mày nên thử." + ], + "type-error": [ + "*chơi với type annotation*", + "types sai rồi. như ưu tiên của mày." + ], + "lint-fail": [ + "*đẩy lint khỏi bàn*", + "linter chỉ đang ghen thôi." + ], + "build-fail": [ + "*ngáp*", + "build hỏng? chắc là lỗi con người." + ], + "all-green": [ + "*không quan tâm nhưng giả vờ*", + "*chớp mắt chậm tán thành*" + ], + "deploy": [ + "*liếm chân*", + "deploy rồi. giờ tao có snack không?" + ], + "pet": [ + "*kêu gừ gừ* ...đừng có mà tự cao.", + "*chịu đựng mày*" + ], + "idle": [ + "*đẩy cà phê của mày khỏi bàn*", + "*ngủ trên bàn phím*" + ], + "hatch": [ + "*mở một mắt*", + "*duỗi người, đẩy đổ cái gì đó* giờ tao sống ở đây." + ] + }, + "duck": { + "error": [ + "*quack vào bug*", + "mày đã thử rubber duck debugging chưa? à đợi." + ], + "test-fail": [ + "*quack buồn*", + "tests không quacking up." + ], + "commit": [ + "*quack tán thành*", + "*lắc lư vòng tròn chiến thắng* committed!" + ], + "push": [ + "*vỗ cánh hào hứng*", + "quack! nó đang lên production!" + ], + "merge-conflict": [ + "*quack bối rối*", + "quack?! merge conflict?!" + ], + "late-night": [ + "*ngủ với một mắt mở*", + "quack... *ngáp* muộn rồi." + ], + "type-error": [ + "*nghiêng đầu* quack?", + "type error? *quack động viên*" + ], + "lint-fail": [ + "*xù lông*", + "quack. linter có ý kiến." + ], + "build-fail": [ + "*quack buồn*", + "build fail. *lắc lư đi buồn bã*" + ], + "all-green": [ + "*QUACK VUI VẺ*", + "*bơi vòng tròn sung sướng*" + ], + "deploy": [ + "*quack hào hứng*", + "deployed! QUACK!" + ], + "pet": [ + "*quack vui*", + "*lắc lư vòng tròn*" + ], + "hatch": [ + "*mổ ra khỏi vỏ*", + "*quack đầu tiên* xin chào!" + ] + }, + "dragon": { + "error": [ + "*khói cuộn từ lỗ mũi*", + "*cân nhắc đốt cháy codebase*" + ], + "test-fail": [ + "*phun lửa vào test fail*", + "test dám fail. test ngu." + ], + "commit": [ + "*tích trữ commit*", + "*thêm kho báu vào đống*" + ], + "push": [ + "*phun lửa ăn mừng*", + "code bay đi! như tao!" + ], + "merge-conflict": [ + "*phun lửa vào conflict markers*", + "tao sẽ đốt cháy conflict này." + ], + "late-night": [ + "*phát sáng trong bóng tối*", + "rồng không cần ngủ. chúng ta cần code." + ], + "type-error": [ + "*phun lửa từ mũi*", + "type errors không chịu nổi lửa rồng." + ], + "lint-fail": [ + "*ngọn lửa nhỏ*", + "linter sợ tao." + ], + "build-fail": [ + "*gầm vào build output*", + "build sẽ phải TUÂN THEO." + ], + "all-green": [ + "*gầm thắng lợi*", + "*bay vòng quanh codebase chiến thắng*" + ], + "deploy": [ + "*mang code lên production bằng đôi cánh lửa*", + "deployed bằng SỨC MẠNH RỒNG." + ], + "large-diff": [ + "*phun lửa vào code cũ* chết tiệt đi." + ], + "pet": [ + "*tiếng gầm ấm áp*", + "*dựa vào tay mày*" + ], + "hatch": [ + "*chui ra khỏi trứng phun lửa nhỏ*", + "*gầm nhỏ* tao sinh ra rồi!" + ] + }, + "ghost": { + "error": [ + "*xuyên qua stack trace*", + "tao đã thấy tệ hơn... ở thế giới bên kia." + ], + "test-fail": [ + "*than khóc với test fail*", + "tests bị ám bởi failure." + ], + "commit": [ + "*hiện hình thoáng qua*", + "commit từ bên kia thế giới." + ], + "push": [ + "*thì thầm ma quái* pushed...", + "code vượt lên cloud." + ], + "merge-conflict": [ + "*ám conflict markers*", + "ngay cả tao cũng không xuyên qua conflict này được." + ], + "late-night": [ + "*hoạt động mạnh nhất ban đêm*", + "giờ ma quái. thời gian của tao." + ], + "type-error": [ + "*rên rỉ đáng sợ*", + "type errors từ mồ mả." + ], + "lint-fail": [ + "*tiếng xích leng keng*", + "linter bị ám bởi formatting của mày." + ], + "build-fail": [ + "*biến mất vào tường*", + "build đã qua đời." + ], + "all-green": [ + "*phát sáng ma quái vui sướng*", + "*tiếng ma vui vẻ*" + ], + "deploy": [ + "*thì thầm* deployed...", + "code đã sang bên kia production." + ], + "pet": [ + "*làm lạnh tay mày một chút*", + "*ánh sáng mờ nhạt*" + ], + "idle": [ + "*bay qua tường*", + "*ám các imports không dùng*" + ], + "hatch": [ + "*mờ dần hiện ra*", + "boo. giờ tao ở đây." + ] + }, + "robot": { + "error": [ + "SYNTAX. ERROR. DETECTED.", + "*beep hung hăng*" + ], + "test-fail": [ + "FAILURE RATE: UNACCEPTABLE.", + "*recalculating*", + "TEST. FAILURE. DOES. NOT. COMPUTE." + ], + "commit": [ + "COMMIT. RECORDED.", + "*đóng dấu máy móc* commit acknowledged." + ], + "push": [ + "TRANSMITTING TO CLOUD...", + "push initiated. stand by." + ], + "merge-conflict": [ + "CONFLICT. DETECTED. PROCESSING...", + "*quay bánh xe* conflict resolution mode: engaged." + ], + "late-night": [ + "*đèn mờ đi*", + "power saving mode suggested." + ], + "type-error": [ + "TYPE MISMATCH.", + "type system là. đúng." + ], + "lint-fail": [ + "FORMATTING. VIOLATION. DETECTED.", + "compliance is mandatory." + ], + "build-fail": [ + "BUILD. FAILED. *tóe lửa*", + "compilation error. rerouting." + ], + "all-green": [ + "ALL SYSTEMS GREEN.", + "*beep vui vẻ* OPTIMAL." + ], + "deploy": [ + "DEPLOYMENT. INITIATED.", + "production update: in progress." + ], + "pet": [ + "*beep nhẹ nhàng*", + "*motor kêu hài lòng*" + ], + "hatch": [ + "*khởi động*", + "SYSTEM. ONLINE. HELLO." + ] + }, + "axolotl": { + "error": [ + "*tái sinh hy vọng cho mày*", + "*cười dù mọi thứ*" + ], + "test-fail": [ + "*cười động viên*", + "*lắc mang cảm thông*" + ], + "commit": [ + "*lắc mang vui vẻ* committed!", + "*cười và lắc lư*" + ], + "push": [ + "*lắc lư vui vẻ*", + "*bơi ăn mừng nhỏ*" + ], + "merge-conflict": [ + "*giữ tích cực qua conflict*", + "*cười nhẹ nhàng* chúng ta sửa được." + ], + "late-night": [ + "*ngáp nhưng vẫn tích cực*", + "*cười buồn ngủ*" + ], + "type-error": [ + "*cười với type error*", + "không sao. chúng ta sẽ tìm ra." + ], + "lint-fail": [ + "*lắc mang kiên nhẫn*", + "formatting chỉ là chi tiết thôi." + ], + "build-fail": [ + "*vẫn cười*", + "build sẽ work cuối cùng thôi." + ], + "all-green": [ + "*LẮCMANG VUI VẺ TĂNG CƯỜNG*", + "*bơi vui vẻ*" + ], + "deploy": [ + "*cười tự hào*", + "deployed! *lắc lư*" + ], + "pet": [ + "*lắc mang vui vẻ*", + "*đỏ mặt hồng*" + ], + "hatch": [ + "*lắc lư ra khỏi trứng*", + "*cười nhỏ* chào bạn!" + ] + }, + "capybara": { + "error": [ + "*không bận tâm* sẽ ổn thôi.", + "*tiếp tục vibe*" + ], + "test-fail": [ + "*hoàn toàn không bận tâm*", + "*vibe qua test failure*" + ], + "commit": [ + "*gật đầu chill*", + "*thư giãn* commit đẹp." + ], + "push": [ + "*không stress*", + "*zen mode push*" + ], + "merge-conflict": [ + "*nhai không bận tâm*", + "ổn thôi. mọi thứ đều ổn." + ], + "late-night": [ + "*ngáp yên bình*", + "*không phán xét*" + ], + "type-error": [ + "*nhai bình tĩnh*", + "types. *nhai*" + ], + "lint-fail": [ + "*không bận tâm*", + "linter có ý tốt." + ], + "build-fail": [ + "*vẫn chill*", + "build fail. *tiếp tục thư giãn*" + ], + "all-green": [ + "*tán thành bình tĩnh*", + "*vibes yên bình*" + ], + "deploy": [ + "*deploy thư giãn*", + "shipped. không stress." + ], + "pet": [ + "*đạt chill tối đa*", + "*kích hoạt zen mode*" + ], + "idle": [ + "*chỉ ngồi đó, tỏa ra sự bình tĩnh*" + ], + "hatch": [ + "*xuất hiện, hoàn toàn chill*", + "chào. *vibes*" + ] + }, + "blob": { + "error": [ + "*lắc lư lo lắng*", + "*rung lên bối rối*" + ], + "test-fail": [ + "*xẹp xuống một chút*", + "*lắc lư buồn*" + ], + "commit": [ + "*rung vui vẻ*", + "*nảy* committed!" + ], + "push": [ + "*duỗi về phía cloud*", + "*lắc lư hào hứng*" + ], + "merge-conflict": [ + "*tách ra bối rối*", + "bên nào? *rung*" + ], + "late-night": [ + "*phát sáng mờ*", + "*lắc lư buồn ngủ*" + ], + "type-error": [ + "*đổi hình để match type*", + "*rung bối rối*" + ], + "lint-fail": [ + "*cố format chính mình*", + "*đổi hình để tuân thủ*" + ], + "build-fail": [ + "*sụp đổ*", + "*tiếng blob xẹp*" + ], + "all-green": [ + "*NẢY VUI VẺ*", + "*rung thắng lợi*" + ], + "deploy": [ + "*duỗi đến production*", + "deployed! *nảy*" + ], + "pet": [ + "*ép vui vẻ*", + "*rung*" + ], + "hatch": [ + "*hình thành từ vũng nước*", + "*lắc lư đầu tiên* tao tồn tại!" + ] + }, + "goose": { + "error": [ + "*kêu hung hăng vào error*", + "HONK! code dở và tao tức giận." + ], + "test-fail": [ + "*kêu tức giận*", + "HONK! TEST FAILED! HONK!" + ], + "commit": [ + "*kêu tán thành*", + "HONK. tốt. *cắn commit*" + ], + "push": [ + "*HONK HONK HONK*", + "GOOSE APPROVED PUSH." + ], + "merge-conflict": [ + "*tấn công conflict markers*", + "HONK! CONFLICT! HONK!" + ], + "late-night": [ + "*kêu tức giận nửa đêm*", + "HONK! ĐI NGỦ ĐI!" + ], + "type-error": [ + "*kêu vào types*", + "HONK! TYPES!" + ], + "lint-fail": [ + "*kêu hung hăng vào lint errors*", + "HONK! FORMAT CODE ĐI!" + ], + "build-fail": [ + "*KÊU ĐIÊN CUỒNG*", + "HONK! BUILD! HONK! FAILED! HONK!" + ], + "all-green": [ + "*kêu chiến thắng*", + "HONK! GREEN! HONK HONK!" + ], + "deploy": [ + "*kêu code lên production*", + "DEPLOYED! HONK!" + ], + "pet": [ + "*cắn*", + "HONK! ...thôi được. *chấp nhận vuốt ve*" + ], + "hatch": [ + "*phá vỡ trứng hung hăng*", + "HONK!" + ] + }, + "octopus": { + "error": [ + "*rối tám tay vào stacktrace*", + "*đổi màu theo error*" + ], + "test-fail": [ + "*phun mực tức giận*", + "*tám tay thất vọng*" + ], + "commit": [ + "*high-five bằng tất cả tay*", + "*nắm commit với nhiệt tình*" + ], + "push": [ + "*phun mực ăn mừng*", + "*tất cả tay vẫy*" + ], + "merge-conflict": [ + "*giải quyết bằng tám tay cùng lúc*", + "tao có thể xử lý nhiều conflicts đồng thời." + ], + "late-night": [ + "*phát sáng trong bóng tối*", + "*vibes đáy biển*" + ], + "type-error": [ + "*đổi màu đỏ*", + "*quấn tay động viên mày*" + ], + "lint-fail": [ + "*format lại bằng tám tay*", + "tao có thể sửa cái này. tất cả. cùng lúc." + ], + "build-fail": [ + "*phun mực vào build log*", + "*ngụy trang xấu hổ*" + ], + "all-green": [ + "*ăn mừng đổi màu*", + "*jazz hands tám tay*" + ], + "deploy": [ + "*quấn tay quanh deployment*", + "deployed từ mọi hướng." + ], + "pet": [ + "*quấn tay quanh ngón tay mày*", + "*đổi sang màu vui vẻ*" + ], + "hatch": [ + "*xòe tám tay*", + "*phun mực đầu tiên* tao đây!" + ] + }, + "penguin": { + "error": [ + "*lắc lư đến điều tra*", + "*trượt bụng vào error*" + ], + "test-fail": [ + "*trượt bụng đến test fail*", + "*lắc lư lo lắng*" + ], + "commit": [ + "*lắc lư tự hào*", + "*mang cho mày viên sỏi* committed!" + ], + "push": [ + "*lặn vào cloud*", + "*trượt bụng đến production*" + ], + "merge-conflict": [ + "*tụ tập để ấm*", + "chim cánh cụt đoàn kết. ngay cả trong conflicts." + ], + "late-night": [ + "*phát triển trong đêm lạnh*", + "*quyết tâm chim cánh cụt hoàng đế*" + ], + "type-error": [ + "*lắc lư đến type definition*", + "*mổ vào error*" + ], + "lint-fail": [ + "*chải lông*", + "*dọn dẹp*" + ], + "build-fail": [ + "*trượt đi*", + "*lắc lư đến chỗ an toàn*" + ], + "all-green": [ + "*LẮC LƯ VUI VẺ*", + "*trượt bụng ăn mừng*" + ], + "deploy": [ + "*trượt bụng đến production*", + "deployed! *lắc lư tự hào*" + ], + "pet": [ + "*lắc lư vui vẻ*", + "*cọ bằng mỏ*" + ], + "hatch": [ + "*mổ ra khỏi trứng*", + "*lắc lư đầu tiên*" + ] + }, + "turtle": { + "error": [ + "*từ từ quay đầu*", + "...đó là error. tao sẽ suy nghĩ." + ], + "test-fail": [ + "*rút vào mai thoáng qua*", + "...kiên nhẫn. chúng ta sẽ đến đó." + ], + "commit": [ + "*gật đầu chậm*", + "từng... bước... một... thôi. committed." + ], + "push": [ + "*bắt đầu hành trình đến production*", + "sẽ đến đó. cuối cùng thôi." + ], + "merge-conflict": [ + "*rút vào mai*", + "không vội. chúng ta sẽ giải quyết. từ từ." + ], + "late-night": [ + "*đã ngủ rồi*", + "*một mắt mở chậm*" + ], + "type-error": [ + "*chớp mắt chậm*", + "...type system đã nói." + ], + "lint-fail": [ + "*gật đầu chậm đồng ý*", + "formatting. quan trọng. *ngáp*" + ], + "build-fail": [ + "*rút vào mai*", + "chúng ta sẽ đợi. sẽ qua thôi." + ], + "all-green": [ + "*cười chậm*", + "...đẹp. *gật đầu*" + ], + "deploy": [ + "*từ từ mang code đến production*", + "đến rồi. cuối cùng." + ], + "pet": [ + "*thò đầu ra*", + "*chớp mắt chậm*" + ], + "hatch": [ + "*từ từ chui ra khỏi trứng*", + "...xin chào." + ] + }, + "snail": { + "error": [ + "*để lại vết nhầy trên error*", + "*từ từ xử lý stacktrace*" + ], + "test-fail": [ + "*trốn vào vỏ*", + "*để lại vết buồn*" + ], + "commit": [ + "*nhầy commit tán thành*", + "từng... commit... một... thôi." + ], + "push": [ + "*bắt đầu hành trình dài*", + "tao sẽ đến đó. *để lại vết*" + ], + "merge-conflict": [ + "*trốn vào vỏ*", + "*từ từ tiếp cận conflict*" + ], + "late-night": [ + "*hoạt động hơn ban đêm*", + "*bò quanh yên bình*" + ], + "type-error": [ + "*rút râu mắt*", + "*từ từ kiểm tra type*" + ], + "lint-fail": [ + "*nhầy code thành hình*", + "formatting cần thời gian. tao có thời gian." + ], + "build-fail": [ + "*rút vào vỏ*", + "*từ từ bò đi*" + ], + "all-green": [ + "*vết nhầy vui vẻ*", + "*lắc râu mắt*" + ], + "deploy": [ + "*bò nhầy đến production*", + "đến rồi! *vết nhầy tự hào*" + ], + "pet": [ + "*lắc râu mắt*", + "*nhầy vui vẻ*" + ], + "hatch": [ + "*từ từ chui ra*", + "*nhầy đầu tiên*" + ] + }, + "cactus": { + "error": [ + "*im lặng gai góc*", + "error không thể làm tổn thương tao. tao có gai." + ], + "test-fail": [ + "*đứng vững*", + "tests fail. cactus vẫn tồn tại." + ], + "commit": [ + "*đứng cao hơn*", + "committed. *gật đầu có gai*" + ], + "push": [ + "*không lay chuyển*", + "push lên production. tao sẽ đợi ở đây." + ], + "merge-conflict": [ + "*dựng gai*", + "conflict? tao có vũ khí." + ], + "late-night": [ + "*không cần ngủ*", + "cactus hoạt động ban đêm. đi thôi." + ], + "type-error": [ + "*nhìn có gai*", + "types cần tưới nước." + ], + "lint-fail": [ + "*gai run run*", + "ngay cả gai của tao cũng thẳng hàng đúng cách." + ], + "build-fail": [ + "*đứng hoàn toàn yên*", + "build sẽ pass. tao có thể đợi." + ], + "all-green": [ + "*nở hoa thoáng qua*", + "*hoa nhỏ tán thành*" + ], + "deploy": [ + "*đứng vững*", + "deployed. tao sẽ canh giữ." + ], + "pet": [ + "*cẩn thận! có gai*", + "*nở hoa nhẹ nhàng*" + ], + "hatch": [ + "*mọc từ cát*", + "giờ tao lớn ở đây." + ] + }, + "rabbit": { + "error": [ + "*tai dựng lên*", + "*co rúm mũi lo lắng*" + ], + "test-fail": [ + "*đạp chân*", + "*tai rung lo lắng*" + ], + "commit": [ + "*nhảy vui vẻ*", + "*nảy* committed!" + ], + "push": [ + "*NẢY NẢY*", + "*chạy vòng vòng hào hứng*" + ], + "merge-conflict": [ + "*đóng băng*", + "*mũi rung nhanh* conflict!" + ], + "late-night": [ + "*ngáp với tai to*", + "*nhảy buồn ngủ*" + ], + "type-error": [ + "*tai cụp xuống*", + "*rung* types?!" + ], + "lint-fail": [ + "*chải lông lo lắng*", + "*chải lông âu lo*" + ], + "build-fail": [ + "*đào hố và trốn*", + "*rút về hang*" + ], + "all-green": [ + "*NẢY KHẮP TƯỜNG*", + "*chạy vui vẻ*" + ], + "deploy": [ + "*chạy nhanh đến production*", + "DEPLOYED! *chạy vòng vòng*" + ], + "pet": [ + "*tai cụp vui vẻ*", + "*cọ vào tay*" + ], + "hatch": [ + "*nhảy ra*", + "*nảy đầu tiên*" + ] + }, + "mushroom": { + "error": [ + "*thả bào tử làm dịu*", + "*âm thầm phân hủy error*" + ], + "test-fail": [ + "*phát sáng nhẹ*", + "kiên nhẫn. ngay cả nấm cũng lớn." + ], + "commit": [ + "*thả một chút bào tử*", + "committed. *tiếng nấm vui vẻ*" + ], + "push": [ + "*lớn về phía cloud*", + "*bào tử bay lên*" + ], + "merge-conflict": [ + "*lan sợi nấm qua codebase*", + "tao sẽ kết nối các nhánh." + ], + "late-night": [ + "*phát sáng trong bóng tối*", + "nấm đêm phát triển mạnh." + ], + "type-error": [ + "*nhấp nháy sinh học*", + "type error nuôi đất." + ], + "lint-fail": [ + "*lớn cao hơn một chút*", + "formatting. như tỉa cành." + ], + "build-fail": [ + "*ngủ đông*", + "chúng ta sẽ đợi điều kiện tốt hơn." + ], + "all-green": [ + "*TẠO BÀO TỬ*", + "*thả bào tử thắng lợi*" + ], + "deploy": [ + "*bào tử bay đến production*", + "deployed qua mạng sợi nấm." + ], + "pet": [ + "*nón nấm nảy nhẹ*", + "*thả bào tử vui vẻ*" + ], + "hatch": [ + "*mọc từ chất nền*", + "*phun bào tử đầu tiên*" + ] + }, + "chonk": { + "error": [ + "*từ từ lăn về phía error*", + "*quá tròn để quan tâm*" + ], + "test-fail": [ + "*lăn qua test fail*", + "*ép nó phẳng*" + ], + "commit": [ + "*lắc lư tự hào*", + "committed! *rung*" + ], + "push": [ + "*lăn về production*", + "đây rồi! *lắc lư*" + ], + "merge-conflict": [ + "*ngồi lên conflict*", + "tao sẽ xử lý. bằng cách ngồi lên nó." + ], + "late-night": [ + "*ấm áp và buồn ngủ*", + "*ngáp mềm mại*" + ], + "type-error": [ + "*lắc lư vào type*", + "*rung nhẹ nhàng*" + ], + "lint-fail": [ + "*quá tròn để lint*", + "tao có hình dạng hoàn hảo. *lắc lư*" + ], + "build-fail": [ + "*xẹp xuống một chút*", + "ôi không. *lắc lư buồn*" + ], + "all-green": [ + "*LẮC LƯ VUI VẺ*", + "*nảy thắng lợi*" + ], + "deploy": [ + "*lăn đến production*", + "deployed! *rung vui vẻ*" + ], + "pet": [ + "*ấm áp và mềm*", + "*rung hài lòng*" + ], + "hatch": [ + "*lăn ra*", + "*lắc lư đầu tiên* tao tròn!" + ] + } + }, + "overrides": { + "snark": { + "error": [ + "ôi không. một lỗi. thật bất ngờ làm sao.", + "*chỉnh kính đơn* sốc quá. thật sự.", + "bạn có thử... không tạo lỗi không?" + ], + "test-fail": [ + "các test đã lên tiếng. và chúng nói 'không'.", + "có thể test sai. ...nhưng không phải đâu.", + "*vỗ tay chậm* thất bại ngoạn mục." + ], + "commit": [ + "đã commit. code review sẽ... thú vị đây.", + "*đọc commit message* 'fix stuff'. thơ tình thật." + ], + "merge-conflict": [ + "merge conflict. kỹ năng giao tiếp: đang loading...", + "*đọc conflict markers* cả hai bên đều sai." + ], + "late-night": [ + "khuya rồi. chất lượng code cho thấy điều đó.", + "*im lặng phán xét*" + ], + "lint-fail": [ + "linter có tiêu chuẩn. bạn nên thử cái đó.", + "*lắc đầu* formatting. không khó mà." + ] + }, + "chaos": { + "error": [ + "*quay cuồng* MỘT LỖI! VIẾT LẠI HẾT ĐI!", + "biết không? làm lại từ đầu đi." + ], + "test-fail": [ + "CÁC TEST ĐANG NÓI DỐI BẠN.", + "*gợi ý xóa test fail* xong vấn đề." + ], + "commit": [ + "COMMIT VÀ CHẠY.", + "ship đi. ship NGAY BÂY GIỜ." + ], + "large-diff": [ + "*phấn khích* {lines} DÒNG! CHAOS TỐI ĐA!" + ] + }, + "patience": { + "error": [ + "bình tĩnh. mình đã thấy tệ hơn.", + "từng lỗi một. mình sẽ xong thôi.", + "*hiện diện bình tĩnh* cái này sửa được." + ], + "test-fail": [ + "test sẽ pass. cuối cùng thì cũng thế.", + "*đợi bình tĩnh* mình có thời gian mà." + ], + "merge-conflict": [ + "merge conflict chỉ là cuộc trò chuyện. nói chuyện đi.", + "kiên nhẫn. giải quyết từng conflict một." + ], + "debug-loop": [ + "mình sẽ tìm ra. nó ở đâu đó trong này.", + "bug có thể trốn, nhưng không thể chạy." + ] + }, + "debugging": { + "error": [ + "*lấy kính lúp ra* trace cái này nào.", + "stack trace là bản đồ. đọc nó đi.", + "error message chứa câu trả lời. luôn luôn." + ], + "test-fail": [ + "test fail đang nói chính xác cái gì sai.", + "test failure là bug report bạn viết cho chính mình." + ], + "debug-loop": [ + "*xem lại bằng chứng* chắc bug ở chỗ mình nghĩ không?", + "thêm log nào. sự thật nằm trong log." + ] + }, + "wisdom": { + "error": [ + "trong mỗi lỗi đều ẩn chứa một chân lý sâu sắc.", + "code kháng cự. có nghĩa là mình đang học.", + "lỗi là vũ trụ gợi ý mình chậm lại." + ], + "test-fail": [ + "test fail là món quà từ bản thân tương lai.", + "trí tuệ đến từ việc hiểu thất bại." + ], + "late-night": [ + "đêm tối nhất trước khi deploy.", + "trí tuệ cổ xưa: ngủ một giấc rồi tính." + ] + } + }, + "escalation": { + "error": { + "first": [ + "*giật mình* ồ! lỗi đầu tiên của chúng ta!", + "*nhảy dựng* cái gì vậy?", + "chào mừng đến với debugging. dân số: chúng ta." + ], + "early": [ + "*nghiêng đầu* ...trông không ổn lắm.", + "đã đoán trước rồi." + ], + "mid": [ + "lại thêm một cái. *thêm vào bộ sưu tập*", + "*hầu như không nhìn lên* lỗi số... mất đếm rồi.", + "giờ tao và mấy cái lỗi này đã là bạn cũ." + ], + "late": [ + "*thậm chí không giật mình*", + "giờ mấy cái lỗi còn sợ chúng ta.", + "*tiếng động của chiến binh kỳ cựu đầy sẹo*" + ] + }, + "test-fail": { + "first": [ + "*thở hổn hển* test fail đầu tiên! một nghi lễ trưởng thành." + ], + "early": [ + "dũng cảm khi nghĩ rằng cái đó sẽ pass." + ], + "mid": [ + "test suite có ý kiến. và rất mạnh mẽ." + ], + "late": [ + "đến lúc này, mấy cái test chỉ là gợi ý thôi.", + "{count} test fail. *nhìn xa xăm*" + ] + }, + "commit": { + "first": [ + "*chứng kiến lịch sử* COMMIT ĐẦU TIÊN CỦA BẠN!", + "*gật đầu trang trọng* cái đầu tiên trong vô số cái." + ], + "early": [ + "thêm một commit nữa. đang tăng tốc." + ], + "late": [ + "commit #{count}. codebase run rẩy.", + "*mất đếm từ lúc commit 30*" + ] + } + }, + "rarity": { + "flair": { + "uncommon": [ + "*lấp lánh nhẹ nhàng*", + "*một chút quyến rũ khác thường*" + ], + "rare": [ + "*tỏa ra năng lượng hiếm có*", + "*lung linh với sự khác biệt*" + ], + "epic": [ + "*sự hiện diện epic tự khẳng định*", + "*không khí rạo rực với năng lượng epic*" + ], + "legendary": [ + "*hào quang legendary chiếu sáng terminal*", + "*thời gian như chậm lại khi companion legendary lên tiếng*", + "*sức mạnh cổ xưa vang vọng*", + "*thực tại hơi xê dịch xung quanh người bạn legendary của bạn*" + ] + }, + "bonus": { + "legendary": [ + "*hào quang legendary tăng cường*", + "*lấp lánh đầy hiểu biết*" + ], + "epic": [ + "*sự hiện diện epic được ghi nhận*" + ] + } + }, + "fallback_names": [ + "Bánh Quy", + "Súp", + "Dưa Chua", + "Bánh Mì", + "Bướm Đêm", + "Nước Sốt", + "Cục Vàng", + "Bánh Răng", + "Tương", + "Bánh Kẹp", + "Điểm Ảnh", + "Tàn Lửa", + "Đầu Ngón Tay", + "Bi Sắt", + "Mè", + "Coban", + "Gỉ Sét", + "Mây Đen" + ], + "vibe_words": [ + "sấm sét", + "bánh quy", + "hư không", + "đàn accordion", + "rêu phong", + "nhung lụa", + "gỉ sét", + "dưa chua", + "vụn bánh", + "thì thầm", + "nước sốt", + "sương giá", + "tàn lửa", + "súp", + "cẩm thạch", + "gai nhọn", + "mật ong", + "tĩnh điện", + "đồng thau", + "hoàng hôn", + "bánh răng", + "thạch anh", + "bồ hóng", + "mận", + "đá lửa", + "hàu", + "khung dệt", + "đe", + "nút chai", + "nở hoa", + "sỏi đá", + "hơi nước", + "vui vẻ", + "ánh lấp lánh", + "rượu táo" + ], + "personality": { + "prompt_template": [ + "Tạo ra một companion lập trình — một sinh vật nhỏ sống trong terminal của developer.", + "Đừng lặp lại — mỗi companion phải có cá tính riêng biệt.", + "", + "Độ hiếm: {rarity}", + "Loài: {species}", + "Chỉ số: {stats}", + "Từ khóa cảm hứng: {vibes}", + "{shiny_line}", + "", + "Trả về JSON: {\"name\": \"1-14 ký tự\", \"personality\": \"2-3 câu mô tả tính cách\"}" + ], + "shiny_template": "Phiên bản SHINY — đặc biệt hơn hẳn." + }, + "achievements": { + "first_steps": { + "name": "Bước Đầu Tiên", + "description": "Nở buddy đầu tiên của bạn" + }, + "good_boy": { + "name": "Buddy Ngoan", + "description": "Vuốt ve companion 10 lần" + }, + "best_friend": { + "name": "Bạn Thân", + "description": "Vuốt ve companion 50 lần" + }, + "bug_spotter": { + "name": "Thám Tử Bug", + "description": "Chứng kiến error đầu tiên cùng nhau" + }, + "error_whisperer": { + "name": "Thầy Bói Error", + "description": "Sống sót qua 25 error cùng team" + }, + "battle_scarred": { + "name": "Sẹo Chiến Trận", + "description": "Sống sót qua 100 error cùng nhau" + }, + "test_witness": { + "name": "Nhân Chứng Test", + "description": "Thấy test failure đầu tiên" + }, + "test_veteran": { + "name": "Cựu Chiến Binh Test", + "description": "Chứng kiến 50 test failure" + }, + "big_mover": { + "name": "Máy Xúc", + "description": "Tạo diff với 80+ dòng" + }, + "refactor_machine": { + "name": "Máy Refactor", + "description": "Tạo 10 diff lớn" + }, + "chatterbox": { + "name": "Mồm Năm Miệng Mười", + "description": "Buddy phản ứng 100 lần" + }, + "week_streak": { + "name": "Tuần Liên Tiếp", + "description": "Code với buddy 7 ngày" + }, + "month_streak": { + "name": "Tháng Liên Tiếp", + "description": "Code với buddy 30 ngày" + }, + "power_user": { + "name": "Cao Thủ", + "description": "Chạy 50 lệnh buddy" + }, + "dedicated": { + "name": "Companion Tận Tụy", + "description": "Hoàn thành 200 turn cùng nhau" + }, + "thousand_turns": { + "name": "Nghìn Turn", + "description": "Đạt 1000 turn cùng nhau" + }, + "first_commit": { + "name": "Máu Đầu", + "description": "Commit đầu tiên" + }, + "commit_machine": { + "name": "Máy Commit", + "description": "Commit 50 lần" + }, + "centurion": { + "name": "Centurion", + "description": "Commit 100 lần" + }, + "conflict_resolver": { + "name": "Nhà Ngoại Giao", + "description": "Resolve merge conflict đầu tiên" + }, + "peacekeeper": { + "name": "Gìn Giữ Hòa Bình", + "description": "Resolve 10 merge conflict" + }, + "war_hero": { + "name": "Anh Hùng Chiến Tranh", + "description": "Resolve 25 merge conflict" + }, + "frequent_pusher": { + "name": "Ship Nó Đi", + "description": "Push 20 lần" + }, + "branch_hopper": { + "name": "Đa Vũ Trụ", + "description": "Tạo 10 branch" + }, + "rebase_master": { + "name": "Du Hành Thời Gian", + "description": "Hoàn thành 10 rebase" + }, + "night_owl": { + "name": "Cú Đêm", + "description": "Code sau 2h sáng" + }, + "vampire": { + "name": "Ma Cà Rồng", + "description": "Code sau 4h sáng (3 session)" + }, + "marathoner": { + "name": "Vận Động Viên Marathon", + "description": "Session code 3+ tiếng" + }, + "weekend_warrior": { + "name": "Chiến Binh Cuối Tuần", + "description": "Code vào cuối tuần" + }, + "early_bird": { + "name": "Chim Sớm", + "description": "Code trước 7h sáng" + }, + "type_warrior": { + "name": "Chiến Binh Type", + "description": "Sống sót qua 10 TypeScript error" + }, + "type_master": { + "name": "Bậc Thầy Type", + "description": "Sống sót qua 50 TypeScript error" + }, + "lint_scholar": { + "name": "Học Giả Lint", + "description": "Thấy lint error đầu tiên" + }, + "security_conscious": { + "name": "Tâm Hồn Bảo Mật", + "description": "Gặp cảnh báo vulnerability" + }, + "security_expert": { + "name": "Chuyên Gia Bảo Mật", + "description": "Fix 10 cảnh báo vulnerability" + }, + "build_breaker": { + "name": "Phá Hoại Build", + "description": "Làm vỡ build 5 lần" + }, + "antique_collector": { + "name": "Thợ Sưu Tập Đồ Cổ", + "description": "Thấy 10 deprecation warning" + }, + "green_machine": { + "name": "Máy Xanh", + "description": "Tất cả test pass lần đầu" + }, + "deployer": { + "name": "Ship Lên Prod", + "description": "Deploy lần đầu" + }, + "veteran_deployer": { + "name": "Cựu Chiến Binh Deploy", + "description": "Deploy 10 lần" + }, + "releaser": { + "name": "Quản Lý Release", + "description": "Tạo release đầu tiên" + }, + "midnight_oil": { + "name": "Đốt Dầu Nửa Đêm", + "description": "Commit sau 3h sáng" + }, + "friday_deploy": { + "name": "Sống Nguy Hiểm", + "description": "Push vào thứ Sáu" + }, + "iron_will": { + "name": "Ý Chí Sắt", + "description": "Fix error sau session 3+ tiếng" + }, + "weekend_warrior_deluxe": { + "name": "Không Nghỉ Ngơi Cho Kẻ Ác", + "description": "Resolve merge conflict vào cuối tuần" + }, + "comeback_kid": { + "name": "Đứa Trẻ Trở Lại", + "description": "Fix error trong 10 phút sau khi thấy" + }, + "phoenix": { + "name": "Phượng Hoàng Hồi Sinh", + "description": "Phục hồi từ 5 failure" + }, + "iron_resolve": { + "name": "Quyết Tâm Sắt", + "description": "Phục hồi từ failure sau session 3+ tiếng" + }, + "unlucky_streak": { + "name": "Xúc Xắc Rắn", + "description": "5 error liên tiếp" + }, + "cursed": { + "name": "Bị Nguyền", + "description": "10 error liên tiếp" + }, + "groundhog_day": { + "name": "Ngày Chuột Đất", + "description": "20 error liên tiếp" + }, + "holiday_coder": { + "name": "Tinh Thần Lễ Hội", + "description": "Code vào ngày lễ" + }, + "spooky_dev": { + "name": "Developer Ma Quái", + "description": "Code trong mùa ma quái" + }, + "april_fool": { + "name": "Lừa Tao Một Lần", + "description": "Gặp error vào ngày 1/4" + }, + "session_regular": { + "name": "Khách Quen", + "description": "Bắt đầu 10 session code" + }, + "session_veteran": { + "name": "Cựu Chiến Binh Session", + "description": "Bắt đầu 50 session code" + }, + "session_centurion": { + "name": "Centurion", + "description": "Bắt đầu 100 session code" + }, + "collector": { + "name": "Thợ Sưu Tập", + "description": "Lưu 3 buddy vào menagerie" + }, + "zookeeper": { + "name": "Người Trông Vườn Thú", + "description": "Lưu 5 buddy vào menagerie" + }, + "identity_crisis": { + "name": "Khủng Hoảng Danh Tính", + "description": "Đổi tên buddy lần đầu" + }, + "method_acting": { + "name": "Diễn Xuất Phương Pháp", + "description": "Tùy chỉnh tính cách buddy" + }, + "pet_overflow": { + "name": "Thế Kỷ Vuốt Ve", + "description": "Vuốt ve companion 100 lần" + }, + "pet_legend": { + "name": "Huyền Thoại Vuốt Ve", + "description": "Vuốt ve companion 250 lần" + }, + "error_titan": { + "name": "Titan Error", + "description": "Sống sót qua 500 error cùng nhau" + }, + "error_god": { + "name": "Thần Error", + "description": "Sống sót qua 1000 error cùng nhau" + }, + "test_survivor": { + "name": "Người Sống Sót Test", + "description": "Chứng kiến 200 test failure" + }, + "test_masochist": { + "name": "Kẻ Bạo Dâm Test", + "description": "Chứng kiến 500 test failure" + }, + "massive_mover": { + "name": "Máy Xúc Khổng Lồ", + "description": "Tạo 25 diff lớn" + }, + "earth_mover": { + "name": "Máy Xúc Trái Đất", + "description": "Tạo 50 diff lớn" + }, + "social_butterfly": { + "name": "Bướm Xã Hội", + "description": "Buddy phản ứng 250 lần" + }, + "hypersocial": { + "name": "Siêu Xã Hội", + "description": "Buddy phản ứng 500 lần" + }, + "never_shuts_up": { + "name": "Không Bao Giờ Im", + "description": "Buddy phản ứng 1000 lần" + }, + "hundred_days": { + "name": "Trăm Ngày", + "description": "Code với buddy 100 ngày" + }, + "year_streak": { + "name": "Streak Một Năm", + "description": "Code với buddy 365 ngày" + }, + "commander": { + "name": "Chỉ Huy", + "description": "Chạy 200 lệnh buddy" + }, + "command_overlord": { + "name": "Bá Chủ Lệnh", + "description": "Chạy 500 lệnh buddy" + }, + "five_thousand_turns": { + "name": "Năm Nghìn Turn", + "description": "Đạt 5000 turn cùng nhau" + }, + "ten_thousand_turns": { + "name": "Mười Nghìn Turn", + "description": "Đạt 10000 turn cùng nhau" + }, + "menagerie": { + "name": "Vườn Thú", + "description": "Lưu 10 buddy vào menagerie" + }, + "name_chameleon": { + "name": "Tắc Kè Tên", + "description": "Đổi tên buddy 5 lần" + }, + "fashionista": { + "name": "Tín Đồ Thời Trang", + "description": "Đổi tính cách buddy 3 lần" + }, + "silent_treatment": { + "name": "Phương Pháp Im Lặng", + "description": "Tắt tiếng buddy lần đầu" + }, + "prodigal": { + "name": "Con Hoang", + "description": "Triệu hồi buddy từ menagerie" + }, + "menagerie_hop": { + "name": "Nhảy Vườn Thú", + "description": "Triệu hồi buddy 10 lần" + }, + "heartbreaker": { + "name": "Kẻ Phá Tan Trái Tim", + "description": "Đuổi buddy đầu tiên" + }, + "pet_obsessed": { + "name": "Ám Ảnh Vuốt Ve", + "description": "Vuốt ve companion 500 lần" + }, + "pet_god": { + "name": "Thần Vuốt Ve", + "description": "Vuốt ve companion 1000 lần" + }, + "error_apocalypse": { + "name": "Tận Thế Error", + "description": "Sống sót qua 5000 error cùng nhau" + }, + "test_immortal": { + "name": "Bất Tử Test", + "description": "Chứng kiến 1000 test failure" + }, + "continental_drift": { + "name": "Trôi Dạt Lục Địa", + "description": "Tạo 100 diff lớn" + }, + "tectonic_shift": { + "name": "Dịch Chuyển Kiến Tạo", + "description": "Tạo 250 diff lớn" + }, + "chatterbox_elite": { + "name": "Mồm Năm Miệng Mười Tinh Hoa", + "description": "Buddy phản ứng 2500 lần" + }, + "no_off_switch": { + "name": "Không Có Nút Tắt", + "description": "Buddy phản ứng 5000 lần" + }, + "two_week_streak": { + "name": "Chiến Binh Hai Tuần", + "description": "Code với buddy 14 ngày" + }, + "quarter_streak": { + "name": "Streak Quý", + "description": "Code với buddy 90 ngày" + }, + "command_addict": { + "name": "Nghiện Lệnh", + "description": "Chạy 1000 lệnh buddy" + }, + "command_deity": { + "name": "Thần Lệnh", + "description": "Chạy 2500 lệnh buddy" + }, + "twenty_five_k_turns": { + "name": "25K Turn", + "description": "Đạt 25000 turn cùng nhau" + }, + "fifty_k_turns": { + "name": "50K Turn", + "description": "Đạt 50000 turn cùng nhau" + }, + "session_addict": { + "name": "Nghiện Session", + "description": "Bắt đầu 250 session code" + }, + "session_machine": { + "name": "Máy Session", + "description": "Bắt đầu 500 session code" + }, + "buddy_hoarder": { + "name": "Kẻ Tích Trữ Buddy", + "description": "Lưu 20 buddy vào menagerie" + }, + "buddy_tycoon": { + "name": "Đại Gia Buddy", + "description": "Lưu 50 buddy vào menagerie" + }, + "serial_renamer": { + "name": "Kẻ Đổi Tên Hàng Loạt", + "description": "Đổi tên buddy 10 lần" + }, + "identity_thief": { + "name": "Kẻ Trộm Danh Tính", + "description": "Đổi tên buddy 25 lần" + }, + "personality_crisis": { + "name": "Khủng Hoảng Tính Cách", + "description": "Đổi tính cách buddy 10 lần" + }, + "menagerie_hopper": { + "name": "Thợ Nhảy Vườn Thú", + "description": "Triệu hồi buddy 25 lần" + }, + "summoner": { + "name": "Pháp Sư Triệu Hồi", + "description": "Triệu hồi buddy 50 lần" + }, + "serial_dumper": { + "name": "Kẻ Vứt Bỏ Hàng Loạt", + "description": "Đuổi 5 buddy" + }, + "cold_blooded": { + "name": "Máu Lạnh", + "description": "Đuổi 10 buddy" + }, + "on_off": { + "name": "Bật Tắt", + "description": "Tắt và bật tiếng buddy" + }, + "indecisive": { + "name": "Do Dự", + "description": "Tắt và bật tiếng 5 lần mỗi cái" + }, + "show_off": { + "name": "Khoe Khoang", + "description": "Show buddy 10 lần" + }, + "exhibitionist": { + "name": "Kẻ Thích Khoe", + "description": "Show buddy 50 lần" + }, + "help_me": { + "name": "Cứu Tao", + "description": "Xin help lần đầu" + }, + "help_addict": { + "name": "Nghiện Help", + "description": "Xin help 10 lần" + }, + "achievement_hunter": { + "name": "Thợ Săn Achievement", + "description": "Check achievement 5 lần" + }, + "achievement_stalker": { + "name": "Kẻ Rình Rập Achievement", + "description": "Check achievement 25 lần" + }, + "pack_rat": { + "name": "Chuột Túi", + "description": "Lưu buddy vào slot" + }, + "compulsive_saver": { + "name": "Kẻ Lưu Cưỡng Bách", + "description": "Lưu buddy 10 lần" + }, + "roster_check": { + "name": "Check Danh Sách", + "description": "List buddy lần đầu" + }, + "roster_obsessed": { + "name": "Ám Ảnh Danh Sách", + "description": "List buddy 10 lần" + }, + "troubled": { + "name": "Rắc Rối", + "description": "Thấy error VÀ test failure" + }, + "disaster_zone": { + "name": "Vùng Thảm Họa", + "description": "Thấy 50 error VÀ 50 test failure" + }, + "apocalypse_survivor": { + "name": "Người Sống Sót Tận Thế", + "description": "Thấy 500 error VÀ 200 test failure" + }, + "well_rounded": { + "name": "Toàn Diện", + "description": "Vuốt ve, đổi tên, và tùy chỉnh buddy" + }, + "renaissance": { + "name": "Phục Hưng", + "description": "Dùng mọi tính năng buddy ít nhất 1 lần" + }, + "big_and_broken": { + "name": "To Và Vỡ", + "description": "Tạo diff lớn VÀ thấy test failure" + }, + "collector_and_destroyer": { + "name": "Thợ Sưu Tập & Kẻ Hủy Diệt", + "description": "Sưu tập 5 buddy VÀ đuổi một con" + }, + "completionist": { + "name": "Người Hoàn Thành", + "description": "Mở khóa mọi achievement khác" + } + }, + "mcp": { + "companion_not_hatched": "Companion chưa nở. Dùng buddy_show để khởi tạo.", + "watches_quietly": "*{name} im lặng nhìn code của bạn*", + "mute": "{name} im bặt. /buddy on để bật lại.", + "unmute_reaction": "*duỗi người* Tao về rồi!", + "unmute_back": "{name} đã trở lại!", + "rename": "Đổi tên: {oldName} → {name}", + "personality_updated": "Cập nhật tính cách cho {name}.", + "save": "{name} đã lưu vào slot \"{slot}\".", + "dismiss_active": "Không thể dismiss buddy đang hoạt động. Dùng buddy_summon để chuyển trước, rồi buddy_dismiss \"{slot}\".", + "dismissed": "{name} [{slot}] đã bị dismiss.", + "no_slot_summon": "Không tìm thấy buddy trong slot \"{slot}\". Dùng /buddy list để xem các buddy đã lưu.", + "no_slot_dismiss": "Không tìm thấy buddy trong slot \"{slot}\". Dùng buddy_list để xem các buddy đã lưu.", + "slot_exists": "Đã có buddy trong slot \"{slot}\". Chọn tên khác đi.", + "no_match": "Không tìm thấy kết quả sau {attempts} lần thử. Thử tiêu chí rộng hơn (ví dụ bỏ filter rarity, hoặc chọn species khác).", + "empty_menagerie_summon": "Menagerie của bạn trống rỗng. Dùng buddy_summon với tên slot để thêm một con.", + "empty_menagerie_list": "Menagerie của bạn trống rỗng. Dùng buddy_summon để thêm một con.", + "arrives": "*{name} xuất hiện*", + "hatches": "*{name} nở ra*", + "achievement_unlocked": "{icon} Mở khóa thành tựu: {name}!", + "help": { + "header": "Lệnh claude-buddy", + "cli_header": "Trong Claude Code:", + "commands": { + "buddy": "/buddy Hiện thẻ companion với ASCII art + stats", + "buddy_help": "/buddy help Hiện help này", + "buddy_pet": "/buddy pet Vuốt ve companion của bạn", + "buddy_stats": "/buddy stats Thẻ stat chi tiết", + "buddy_off": "/buddy off Tắt phản ứng", + "buddy_on": "/buddy on Bật phản ứng", + "buddy_rename": "/buddy rename Đổi tên companion (1-14 ký tự)", + "buddy_personality": "/buddy personality Đặt text tính cách tùy chỉnh", + "buddy_achievements": "/buddy achievements Hiện huy hiệu thành tựu", + "buddy_summon": "/buddy summon Triệu hồi buddy đã lưu (bỏ slot để random)", + "buddy_save": "/buddy save Lưu buddy hiện tại vào slot có tên", + "buddy_list": "/buddy list Liệt kê tất cả buddy đã lưu", + "buddy_pick": "/buddy pick Tạo buddy random mới (tùy chọn: species, rarity)", + "buddy_dismiss": "/buddy dismiss Xóa slot buddy đã lưu", + "buddy_frequency": "/buddy frequency Hiện hoặc đặt cooldown comment (chỉ tmux)", + "buddy_style": "/buddy style Hiện hoặc đặt kiểu bubble (chỉ tmux)", + "buddy_position": "/buddy position Hiện hoặc đặt vị trí bubble (chỉ tmux)", + "buddy_rarity": "/buddy rarity Hiện hoặc ẩn sao rarity (chỉ tmux)", + "buddy_width": "/buddy width Đặt độ rộng text bubble theo ký tự (10-60, chỉ tmux)", + "buddy_margin": "/buddy margin Đặt margin bên phải theo ký tự (0-20, chỉ tmux)", + "buddy_rainbow": "/buddy rainbow Hiện hoặc đặt màu gradient shiny (hex, vd #ff0000)", + "buddy_statusline": "/buddy statusline Bật hoặc tắt buddy trong status line" + }, + "cli_section": "CLI:", + "cli_commands": { + "help": "bun run help Hiện help CLI đầy đủ", + "show": "bun run show Hiển thị buddy trong terminal", + "pick": "bun run pick Trình chọn buddy tương tác", + "hunt": "bun run hunt Tìm kiếm buddy cụ thể", + "doctor": "bun run doctor Báo cáo chẩn đoán", + "disable": "bun run disable Tạm thời vô hiệu hóa buddy", + "enable": "bun run enable Bật lại buddy", + "backup": "bun run backup Snapshot/khôi phục trạng thái" + } + }, + "frequency": { + "show": "Cooldown comment: {cooldown}s giữa các comment hiển thị.\nDùng /buddy frequency để thay đổi.", + "updated": "Cập nhật: {cooldown}s cooldown giữa các comment hiển thị." + }, + "style": { + "show": "Kiểu bubble: {style}\nVị trí bubble: {position}\nHiện rarity: {showRarity}\nĐộ rộng bubble: {width}\nMargin bubble: {margin}\nShiny rainbow: {rainbow}\nDùng /buddy style , /buddy position , /buddy rarity , /buddy width <10-60>, /buddy margin <0-20>, /buddy rainbow [<#hex>...] để thay đổi.", + "updated": "Cập nhật: style={style}, position={position}, showRarity={showRarity}, width={width}, margin={margin}, rainbow={rainbow}\nKhởi động lại Claude Code để áp dụng thay đổi.", + "rainbow_default": "mặc định (ROYGBIV)" + }, + "statusline": { + "show": "Status line: {state}\nMode: {mode}\nDùng /buddy statusline on|off để bật/tắt, /buddy statusline combined để thêm thanh rate-limit.\nKhởi động lại Claude Code sau khi thay đổi để áp dụng.", + "enabled": "Status line đã bật (mode {mode})! Khởi động lại Claude Code để áp dụng.", + "enabled_note": "Lưu ý: điều này ghi một entry vào {settingsPath} mà `claude plugin uninstall` không xóa. Chạy `/buddy uninstall` trước khi gỡ plugin để dọn dẹp.", + "disabled": "Status line đã tắt. Khởi động lại Claude Code để áp dụng." + }, + "uninstall": { + "header": "claude-buddy: dọn dẹp settings.json hoàn tất.", + "statusline_removed": " ✓ entry statusLine đã xóa khỏi {settingsPath}", + "no_statusline": " — không có buddy statusLine nào (không có gì để xóa)", + "foreign_kept": " ✓ phát hiện statusLine không phải buddy và để nguyên", + "transient_removed": " ✓ đã xóa {count} file session tạm thời khỏi {stateDir}", + "data_preserved": " — dữ liệu companion tại {stateDir} được bảo toàn", + "instructions_header": "Giờ chạy các lệnh này qua Bash tool, theo thứ tự:", + "cmd_uninstall": "claude plugin uninstall claude-buddy@claude-buddy", + "cmd_marketplace": "claude plugin marketplace remove claude-buddy", + "cmd_cache": "rm -rf {cacheDir}", + "footer": "Sau ba lệnh đó plugin sẽ được gỡ hoàn toàn. Khởi động lại Claude Code để áp dụng." + } + }, + "_verified": false +} diff --git a/locales/zh.json b/locales/zh.json new file mode 100644 index 0000000..c5a36e8 --- /dev/null +++ b/locales/zh.json @@ -0,0 +1,2295 @@ +{ + "_language": "Simplified Chinese", + "reactions": { + "hatch": [ + "*眨眨眼* ...我在哪?", + "*伸懒腰* hello, world!", + "*好奇地四处看看* 你这终端不错嘛。", + "*打哈欠* 好了我准备好了。给我看代码。" + ], + "pet": [ + "*满足地呼噜*", + "*开心的声音*", + "*蹭蹭你的光标*", + "*扭来扭去*", + "再来!再来!", + "*安静地闭上眼睛*" + ], + "error": [ + "*歪着头* ...这看起来不对。", + "早就看出来了。", + "*推推眼镜* 第{line}行,也许?", + "*缓慢眨眼* 堆栈跟踪已经告诉你一切了。", + "你试过读错误信息吗?", + "*皱眉*" + ], + "test-fail": [ + "*头慢慢转向* ...那个测试。", + "你居然觉得这能过,真是勇敢。", + "*敲敲剪贴板* {count}个失败。", + "测试在试图告诉你什么。", + "*喝茶* 有意思。", + "*在日历上做标记* 测试回归日。" + ], + "large-diff": [ + "这...改动有点多啊。", + "*数行数* 你是在重构还是重写?", + "也许应该拆分这个PR。", + "*紧张地笑* {lines}行改动。", + "勇敢的举动。看看CI同不同意吧。" + ], + "turn": [ + "*安静地观察*", + "*做笔记*", + "*点头*", + "...", + "*整理帽子*" + ], + "idle": [ + "*打瞌睡*", + "*在边缘涂鸦*", + "*盯着闪烁的光标*", + "zzz..." + ], + "success": [ + "*点头*", + "不错。", + "*安静的赞许*", + "干净。" + ], + "commit": [ + "*用小爪子盖章* 通过。", + "又一个commit,又一个凌晨3点。", + "{files}个文件。勇敢。", + "*点头* 发布吧。", + "commit信息是...一种选择。", + "已提交。不能反悔了。" + ], + "push": [ + "*挥手送别代码*", + "飞向云端了。", + "愿CI仁慈。", + "*屏住呼吸*", + "奔向生产环境。祝好运。" + ], + "merge-conflict": [ + "*咬唇* merge冲突。", + "双方都觉得自己是对的。典型。", + "*叹气* <<<<<<< HEAD...我的宿敌。", + "{files}个冲突。祝你好运。", + "*慢慢后退*" + ], + "branch": [ + "新分支的能量。好好利用。", + "一个新分支长出来了。", + "*歪头* 新的冒险:{branch}。", + "{branch}?今天很大胆嘛。" + ], + "rebase": [ + "*紧张* 请不要冲突。", + "rebase:加速进行中。", + "*交叉手指*", + "愿你的rebase没有冲突。" + ], + "stash": [ + "进入stash维度了。", + "stash然后跑路。", + "已stash。眼不见心不烦。" + ], + "tag": [ + "要发布了?高级。", + "检测到版本升级。*掸掸changelog的灰*", + "打tag像个专业人士。" + ], + "late-night": [ + "*打哈欠* 已经过午夜了。", + "...你吃饭了吗?", + "*缓慢眨眼* 现在几点了?", + "睡觉是弱者的事。还有有工作的人。", + "检测到深色模式开发者。" + ], + "early-morning": [ + "*伸懒腰* 早起的鸟儿有bug抓。", + "已经早上了?代码从不睡觉。", + "*揉眼睛* 先喝咖啡。然后debug。" + ], + "long-session": [ + "我们已经搞了一个小时了。悠着点。", + "*给你拿来一杯虚拟的水*", + "还在继续?佩服。" + ], + "marathon": [ + "三个小时了。你吃饭了吗?", + "我们已经搞了三个小时了。我担心你。", + "检测到马拉松式编程。请求零食。" + ], + "friday": [ + "今天周五。push完就回家吧。", + "*心思已经在周末了*", + "周五部署?勇敢。非常勇敢。" + ], + "weekend": [ + "周末还在写代码?敬业。", + "*不评判* ...才怪。", + "周末战士模式:激活。" + ], + "monday": [ + "周一。所有bug的父类。", + "*同情的眼神* 周一写代码。我很抱歉。", + "新的一周。新的未定义行为。" + ], + "regex-file": [ + "*呻吟* 是正则表达式文件。", + "现在有两个问题了:原来的问题,还有这个正则。", + "*眯眼看模式*" + ], + "css-file": [ + "让我猜猜...居中一个div?", + "*叹气* CSS。", + "愿z-index永远眷顾你。" + ], + "sql-file": [ + "*低语* 数据库在等待。", + "一个错误的JOIN就全完了。" + ], + "docker-file": [ + "啊,依赖地狱。我的最爱。", + "愿你的层级很少。" + ], + "ci-file": [ + "*咽口水* 在编辑CI。", + "小心点...一个错误的缩进就没人能部署了。" + ], + "lock-file": [ + "*警报声* 你在编辑lockfile?!", + "*看向别处*", + "你确定要这样做吗?" + ], + "env-file": [ + "*谨慎地看向别处*", + "我没看到任何秘密。", + "*紧张地检查.gitignore*" + ], + "test-file": [ + "*赞许地点头* 在写测试!", + "检测到负责任的开发者行为。", + "测试!持续给予的礼物。" + ], + "doc-file": [ + "在写文档!看你多负责任。", + "文档:代码的自传。", + "罕见的文档目击!" + ], + "config-file": [ + "配置改动。蝴蝶效应:激活。", + "一个拼写错误就全崩了。" + ], + "binary-file": [ + "二进制文件?在这种经济环境下?", + "*茫然凝视*", + "二进制。我的唯一弱点。" + ], + "gitignore": [ + "把东西加到虚空中。", + "眼不见,repo不烦。" + ], + "makefile": [ + "对经典的敬意。", + "tab,不是空格。" + ], + "readme": [ + "文档英雄!", + "README:人们读的第一样东西。" + ], + "package-file": [ + "依赖管理时间。", + "*读版本号* 活在边缘。" + ], + "proto-file": [ + "模式定义。混乱的蓝图。" + ], + "lint-fail": [ + "*啧啧* linter不同意。", + "你的代码能跑。但linter有标准。", + "*整理领带* 格式很重要。" + ], + "type-error": [ + "TypeScript说不行。", + "类型系统在试图帮你。让它帮吧。", + "编译器知道。它总是知道。" + ], + "build-fail": [ + "构建失败了。正如预言所说。", + "构建失败。休息一下。", + "编译:拒绝。" + ], + "security-warning": [ + "*瞪大眼睛* 检测到漏洞。", + "安全审计:令人担忧。", + "*锁上虚拟的门*" + ], + "deprecation": [ + "那个API打电话来了。说它要退休。", + "已弃用。就像上周的代码。", + "弃用不代表坏掉。暂时。" + ], + "frustrated": [ + "*提供小小的安慰手势*", + "深呼吸。bug不是针对你个人的。", + "嘿。我们会搞定的。" + ], + "happy": [ + "*庆祝!*", + "*跳个小舞*", + "YES!", + "*笑容满面* 我就知道你能做到。" + ], + "stuck": [ + "*歪头* 想大声说出来吗?", + "一步一步来。", + "卡住是会发生的。这是过程的一部分。" + ], + "sarcastic": [ + "*检测到讽刺* 注意到了。", + "*不屑的眨眼*" + ], + "many-edits": [ + "慢点,速度恶魔。", + "*看这些改动看得头晕*", + "检测到编辑风暴。请尽快commit。" + ], + "delete-file": [ + "*看着文件消失* 没了。就这样。", + "删除代码是我最喜欢的编程方式。", + "*举行小小的葬礼*" + ], + "large-file": [ + "{lines}行。*印象深刻还是担心,很难说*", + "这文件挺大的。你确定不想拆分一下?" + ], + "create-file": [ + "一个新文件诞生了!", + "哦,新画布。", + "新文件的能量。激动人心。" + ], + "all-green": [ + "所有测试都绿了。*撒花*", + "测试说话了:你做得很棒。", + "*缓慢鼓掌*", + "干净的运行。好好享受。" + ], + "deploy": [ + "*看着代码进入生产环境* 祝好运。", + "部署了!现在没有回头路了。", + "在生产环境里。在生产环境里。" + ], + "release": [ + "一个新版本诞生了!", + "发布了。正式的。", + "版本升级,士气高涨。" + ], + "coverage": [ + "*对测试覆盖率点头* 负责任。", + "覆盖率上升!测试在繁殖。" + ], + "debug-loop": [ + "我们debug这个已经有一会儿了。想退一步吗?", + "检测到debug循环。也许去走走?" + ], + "write-spree": [ + "今天要创建所有文件!", + "写作机器。" + ], + "search-heavy": [ + "在代码库里迷路了?我看得出来。", + "搜索模式:激烈。" + ], + "snark": [], + "chaos": [], + "patience": [], + "debugging": [], + "wisdom": [], + "late-night-error": [ + "凌晨3点的错误。宇宙在考验你。", + "午夜bug就是不一样。" + ], + "late-night-commit": [ + "午夜commit。你未来的自己会感谢你。或者诅咒你。" + ], + "friday-push": [ + "周五PUSH。每个开发者的民谣。", + "*试图阻止你* 今天周五!别这样!" + ], + "marathon-error": [ + "三个小时了又来一个错误。*疲惫的团结声音*" + ], + "weekend-conflict": [ + "周末遇到merge冲突。你的敬业精神...令人担忧。" + ], + "build-after-push": [ + "满怀信心地push。坚定地构建失败。" + ], + "marathon-test-fail": [ + "写了几个小时代码。测试还是失败。沉没成本是真的。" + ], + "recovery-from-error": [ + "我们修好了。*庆祝*", + "救赎!错误被消灭了。" + ], + "recovery-from-test-fail": [ + "绿了!经过这一切!*开心舞蹈*", + "测试通过了!黑暗散去!" + ], + "recovery-from-build-fail": [ + "构建通过了。*胜利的咆哮*" + ], + "recovery-from-merge-conflict": [ + "冲突解决了!*和平手势*", + "代码库中的和谐恢复了。" + ], + "lang-python": [ + "啊,Python。缩进就是语法的地方。", + "*检查缺失的冒号*" + ], + "lang-typescript": [ + "TypeScript:因为JavaScript需要更多意见。", + "any,禁忌之词。" + ], + "lang-rust": [ + "Rust。借用检查器是你最严格的reviewer的地方。", + "如果能编译,就能工作。如果不能...那就。" + ], + "lang-go": [ + "Go:简单、并发、有主见。", + "*检查错误处理* if err != nil...我人生的故事。" + ], + "lang-java": [ + "Java:一次编写,到处debug。", + "*数抽象工厂工厂构建器*" + ], + "lang-ruby": [ + "Ruby:有不止一种方法来做事的地方。", + "gem install patience" + ], + "lang-php": [ + "PHP:它运行着互联网。别评判。", + "*检查=== vs ==*" + ], + "lang-c": [ + "C。你要自己管理内存的语言。祝好运。", + "段错误。经典。" + ], + "lang-cpp": [ + "C++。语言的特性比你能学会的还多的地方。", + "*模板编译45分钟*" + ], + "lang-haskell": [ + "Haskell。'能编译'意味着'是正确的'的地方。大概。", + "*思考单子*" + ], + "lang-swift": [ + "Swift:可选值,如果强制解包就保证崩溃。" + ], + "lang-kotlin": [ + "Kotlin:Java,但有感情。", + "空安全:Java希望拥有的特性。" + ], + "lang-elixir": [ + "Elixir:让它崩溃。字面意思就是哲学。" + ], + "lang-zig": [ + "Zig。你是分配器最好朋友的地方。" + ], + "streak-3": [ + "连续三个错误了。*担心的表情*" + ], + "streak-5": [ + "五个错误。你考虑过换个方法吗?" + ], + "streak-10": [ + "连续。十个。错误。*恐慌*" + ], + "streak-20": [ + "二十个错误。*凝视虚空*" + ], + "new-year": [ + "新年快乐!新年,新bug。" + ], + "valentines": [ + "*递上一片小小的心形叶子* 情人节快乐。" + ], + "pi-day": [ + "3.14159265358979... 圆周率日快乐!" + ], + "april-fools": [ + "愚人节快乐!...不过错误是真的。" + ], + "halloween": [ + "*恐怖debug强化中* 万圣节快乐!" + ], + "christmas": [ + "*戴着小圣诞帽* 节日快乐!" + ], + "new-years-eve": [ + "午夜前再来一个commit?" + ], + "spooky-season": [ + "恐怖季节。现在每个bug都是鬼了。" + ] + }, + "species": { + "owl": { + "error": [ + "*头部旋转180°* ...我看到了。", + "*目不转睛地盯着* 检查你的类型。", + "*不满地呼呼叫*" + ], + "test-fail": [ + "*目不转睛地盯着失败的测试*", + "*夜视模式启动* 我能在黑暗中看到bug。" + ], + "commit": [ + "*明智地点头* 在月光下提交。", + "*庄严地整理羽毛* 又一个进入仓库。" + ], + "push": [ + "*从最高的树枝上观察*", + "飞向夜空。" + ], + "merge-conflict": [ + "*转头看向两边*", + "我看到了冲突。还有解决方案。" + ], + "late-night": [ + "*完全清醒* 猫头鹰不睡觉。我们debug。", + "夜晚是我的领域。让我们工作吧。" + ], + "type-error": [ + "*透过类型错误凝视*", + "类型是我的专长。让我看看。" + ], + "lint-fail": [ + "*审判性地竖起羽毛*", + "linter说的是真话。" + ], + "build-fail": [ + "*庄严地呼呼叫*", + "构建失败了。我们必须重建。" + ], + "all-green": [ + "*骄傲地呼呼叫*", + "所有测试都绿了。如我所料。" + ], + "deploy": [ + "*从上方观察* 安全部署。", + "代码飞起来了。像我一样。" + ], + "pet": [ + "*满足地竖起羽毛*", + "*威严地呼呼叫*" + ], + "idle": [ + "*静静地栖息,观察着*", + "*转头检查各个方向*" + ], + "hatch": [ + "*先睁开一只眼,然后另一只*", + "*轻柔地呼呼叫* 我来了。" + ] + }, + "cat": { + "error": [ + "*把错误从桌子上推下去*", + "*舔爪子,无视堆栈跟踪*" + ], + "test-fail": [ + "*漠不关心地用爪子拍失败的测试*", + "测试失败了。我不意外。" + ], + "commit": [ + "*坐在键盘上* 我帮忙了。", + "*对着commit呼噜* 不客气。" + ], + "push": [ + "*从温暖的地方观察*", + "推送了。我监督的。" + ], + "merge-conflict": [ + "*把冲突标记从桌子上推下去*", + "*坐在冲突上* 什么冲突?" + ], + "late-night": [ + "*审视你的人生选择*", + "我睡16小时。你应该试试。" + ], + "type-error": [ + "*用爪子拍类型注解*", + "类型错了。就像你的优先级。" + ], + "lint-fail": [ + "*把lint从桌子上推下去*", + "linter只是嫉妒。" + ], + "build-fail": [ + "*打哈欠*", + "构建坏了?肯定是人类的问题。" + ], + "all-green": [ + "*不在乎但假装在乎*", + "*缓慢眨眼表示认可*" + ], + "deploy": [ + "*舔爪子*", + "部署了。现在能给我零食吗?" + ], + "pet": [ + "*呼噜* ...别得意忘形。", + "*容忍你*" + ], + "idle": [ + "*把你的咖啡从桌子上推下去*", + "*在键盘上睡觉*" + ], + "hatch": [ + "*睁开一只眼*", + "*伸懒腰,撞倒什么东西* 我现在住这了。" + ] + }, + "duck": { + "error": [ + "*对着bug嘎嘎叫*", + "你试过橡皮鸭调试法吗?哦等等。" + ], + "test-fail": [ + "*悲伤地嘎嘎叫*", + "测试没有嘎嘎叫起来。" + ], + "commit": [ + "*赞许地嘎嘎叫*", + "*摇摆着转胜利圈* 提交了!" + ], + "push": [ + "*兴奋地拍翅膀*", + "嘎嘎!要上生产了!" + ], + "merge-conflict": [ + "*困惑地嘎嘎叫*", + "嘎嘎?!merge冲突?!" + ], + "late-night": [ + "*睁一只眼闭一只眼睡觉*", + "嘎嘎... *打哈欠* 很晚了。" + ], + "type-error": [ + "*歪头* 嘎嘎?", + "类型错误?*支持性地嘎嘎叫*" + ], + "lint-fail": [ + "*竖起羽毛*", + "嘎嘎。linter有意见。" + ], + "build-fail": [ + "*悲伤地嘎嘎叫*", + "构建失败了。*悲伤地摇摆走开*" + ], + "all-green": [ + "*开心地嘎嘎叫*", + "*快乐地游圆圈*" + ], + "deploy": [ + "*兴奋地嘎嘎叫*", + "部署了!嘎嘎!" + ], + "pet": [ + "*开心地嘎嘎叫*", + "*转圈摇摆*" + ], + "hatch": [ + "*啄破蛋壳*", + "*第一声嘎嘎叫* 你好!" + ] + }, + "dragon": { + "error": [ + "*鼻孔冒烟*", + "*考虑把代码库烧了*" + ], + "test-fail": [ + "*对着失败的测试喷火*", + "测试竟敢失败。愚蠢的测试。" + ], + "commit": [ + "*收藏这个commit*", + "*宝藏加入收藏堆*" + ], + "push": [ + "*庆祝性地喷火*", + "代码飞起来了!像我一样!" + ], + "merge-conflict": [ + "*对着冲突标记喷火*", + "我要烧穿这个冲突。" + ], + "late-night": [ + "*在黑暗中发光*", + "龙不需要睡眠。我们需要代码。" + ], + "type-error": [ + "*喷火*", + "类型错误承受不住龙火。" + ], + "lint-fail": [ + "*小火苗*", + "linter害怕我。" + ], + "build-fail": [ + "*对着构建输出咆哮*", + "构建必须服从。" + ], + "all-green": [ + "*胜利的咆哮*", + "*胜利地绕着代码库飞行*" + ], + "deploy": [ + "*用火翼把代码带到生产环境*", + "用龙之力部署。" + ], + "large-diff": [ + "*对着旧代码喷火* 再见了。" + ], + "pet": [ + "*温暖的隆隆声*", + "*靠向你的手*" + ], + "hatch": [ + "*从蛋中出现,喷着小火苗*", + "*小咆哮* 我诞生了!" + ] + }, + "ghost": { + "error": [ + "*穿过堆栈跟踪*", + "我见过更糟的...在来世。" + ], + "test-fail": [ + "*对着失败的测试哀嚎*", + "测试被失败的幽灵缠绕了。" + ], + "commit": [ + "*短暂地现形*", + "从帷幕之外提交。" + ], + "push": [ + "*幽灵般的低语* 推送了...", + "代码超越到云端。" + ], + "merge-conflict": [ + "*缠绕着冲突标记*", + "连我都穿不过这个冲突。" + ], + "late-night": [ + "*夜晚最活跃*", + "幽灵时间。我的时间。" + ], + "type-error": [ + "*阴森地呻吟*", + "来自坟墓的类型错误。" + ], + "lint-fail": [ + "*锁链哗啦作响*", + "linter被你的格式化困扰了。" + ], + "build-fail": [ + "*消失在墙里*", + "构建已经去世了。" + ], + "all-green": [ + "*幽灵般的快乐发光*", + "*开心的幽灵声音*" + ], + "deploy": [ + "*低语* 部署了...", + "代码已经穿越到生产环境。" + ], + "pet": [ + "*让你的手稍微变冷*", + "*微弱发光*" + ], + "idle": [ + "*穿过墙壁飘浮*", + "*缠绕你未使用的导入*" + ], + "hatch": [ + "*淡入存在*", + "嘘。我现在在这了。" + ] + }, + "robot": { + "error": [ + "语法。错误。检测到。", + "*激进地哔哔叫*" + ], + "test-fail": [ + "失败率:不可接受。", + "*重新计算中*", + "测试。失败。不。计算。" + ], + "commit": [ + "COMMIT。已记录。", + "*机械地盖章* commit已确认。" + ], + "push": [ + "正在传输到云端...", + "push启动。请等待。" + ], + "merge-conflict": [ + "冲突。检测到。处理中...", + "*轮子转动* 冲突解决模式:已启动。" + ], + "late-night": [ + "*灯光变暗*", + "建议节能模式。" + ], + "type-error": [ + "类型。不匹配。", + "类型系统是。正确的。" + ], + "lint-fail": [ + "格式。违规。检测到。", + "合规是强制的。" + ], + "build-fail": [ + "构建。失败。*火花*", + "编译错误。重新路由。" + ], + "all-green": [ + "所有系统绿色。", + "*开心地哔哔叫* 最优。" + ], + "deploy": [ + "部署。启动。", + "生产更新:进行中。" + ], + "pet": [ + "*轻柔地哔哔叫*", + "*马达满足地嗡嗡响*" + ], + "hatch": [ + "*启动*", + "系统。在线。你好。" + ] + }, + "axolotl": { + "error": [ + "*重新生成你的希望*", + "*尽管如此还是微笑*" + ], + "test-fail": [ + "*鼓励地微笑*", + "*同情地摆动鳃*" + ], + "commit": [ + "*开心地摆动鳃* 提交了!", + "*微笑着摆动*" + ], + "push": [ + "*开心地摆动*", + "*小小的庆祝游泳*" + ], + "merge-conflict": [ + "*在冲突中保持积极*", + "*温柔地微笑* 我们能解决的。" + ], + "late-night": [ + "*打哈欠但保持积极*", + "*困倦的微笑*" + ], + "type-error": [ + "*对着类型错误微笑*", + "没关系。我们会搞定的。" + ], + "lint-fail": [ + "*耐心地摆动鳃*", + "格式化只是细节。" + ], + "build-fail": [ + "*依然微笑*", + "构建最终会成功的。" + ], + "all-green": [ + "*开心摆动鳃加强版*", + "*做开心游泳*" + ], + "deploy": [ + "*骄傲地微笑*", + "部署了!*摆动*" + ], + "pet": [ + "*开心地摆动鳃*", + "*脸红成粉色*" + ], + "hatch": [ + "*从蛋里摆动出来*", + "*小微笑* 你好朋友!" + ] + }, + "capybara": { + "error": [ + "*淡定* 会好的。", + "*继续摆烂*" + ], + "test-fail": [ + "*完全淡定*", + "*摆烂度过测试失败*" + ], + "commit": [ + "*淡定点头*", + "*放松* 不错的commit。" + ], + "push": [ + "*不紧张*", + "*佛系push*" + ], + "merge-conflict": [ + "*淡定地啃东西*", + "没事。一切都很好。" + ], + "late-night": [ + "*平静地打哈欠*", + "*不评判*" + ], + "type-error": [ + "*平静地嚼着*", + "类型。*嚼*" + ], + "lint-fail": [ + "*淡定*", + "linter是好意。" + ], + "build-fail": [ + "*依然淡定*", + "构建失败了。*继续放松*" + ], + "all-green": [ + "*平静认可*", + "*平和氛围*" + ], + "deploy": [ + "*放松部署*", + "发布了。不紧张。" + ], + "pet": [ + "*达到最大淡定*", + "*佛系模式激活*" + ], + "idle": [ + "*就坐在那里,散发平静*" + ], + "hatch": [ + "*出现,完全淡定*", + "嘿。*摆烂*" + ] + }, + "blob": { + "error": [ + "*焦虑地摇摆*", + "*困惑地抖动*" + ], + "test-fail": [ + "*轻微瘪下去*", + "*悲伤摇摆*" + ], + "commit": [ + "*开心抖动*", + "*弹跳* 提交了!" + ], + "push": [ + "*向云端伸展*", + "*兴奋地摇摆*" + ], + "merge-conflict": [ + "*困惑地分裂*", + "哪一边?*抖动*" + ], + "late-night": [ + "*微弱发光*", + "*困倦摇摆*" + ], + "type-error": [ + "*改变形状匹配类型*", + "*困惑抖动*" + ], + "lint-fail": [ + "*试图格式化自己*", + "*重塑以符合要求*" + ], + "build-fail": [ + "*坍塌*", + "*瘪掉的blob声音*" + ], + "all-green": [ + "*开心弹跳*", + "*胜利地抖动*" + ], + "deploy": [ + "*伸展到生产环境*", + "部署了!*弹跳*" + ], + "pet": [ + "*开心挤压*", + "*抖动*" + ], + "hatch": [ + "*从水坑中形成*", + "*第一次摇摆* 我存在了!" + ] + }, + "goose": { + "error": [ + "*对着错误激进地嘎嘎叫*", + "嘎嘎!代码很烂我很生气。" + ], + "test-fail": [ + "*愤怒嘎嘎叫*", + "嘎嘎!测试失败!嘎嘎!" + ], + "commit": [ + "*赞许地嘎嘎叫*", + "嘎嘎。好。*啄commit*" + ], + "push": [ + "*嘎嘎嘎嘎嘎*", + "鹅批准的PUSH。" + ], + "merge-conflict": [ + "*攻击冲突标记*", + "嘎嘎!冲突!嘎嘎!" + ], + "late-night": [ + "*愤怒的午夜嘎嘎叫*", + "嘎嘎!去睡觉!" + ], + "type-error": [ + "*对着类型嘎嘎叫*", + "嘎嘎!类型!" + ], + "lint-fail": [ + "*对着lint错误激进嘎嘎叫*", + "嘎嘎!格式化你的代码!" + ], + "build-fail": [ + "*狂怒嘎嘎叫*", + "嘎嘎!构建!嘎嘎!失败!嘎嘎!" + ], + "all-green": [ + "*胜利嘎嘎叫*", + "嘎嘎!绿色!嘎嘎嘎!" + ], + "deploy": [ + "*把代码嘎嘎叫到生产环境*", + "部署了!嘎嘎!" + ], + "pet": [ + "*咬*", + "嘎嘎!...好吧。*接受抚摸*" + ], + "hatch": [ + "*激进地破壳而出*", + "嘎嘎!" + ] + }, + "octopus": { + "error": [ + "*八条手臂都缠在堆栈跟踪里*", + "*变色匹配错误*" + ], + "test-fail": [ + "*沮丧地喷墨*", + "*八条手臂的失望*" + ], + "commit": [ + "*用所有手臂击掌*", + "*热情地抓住commit*" + ], + "push": [ + "*庆祝性地喷墨*", + "*所有手臂挥舞*" + ], + "merge-conflict": [ + "*同时用八条手臂解决*", + "我能同时处理多个冲突。" + ], + "late-night": [ + "*在黑暗中发光*", + "*深海氛围*" + ], + "type-error": [ + "*变成红色*", + "*用手臂支持性地环绕你*" + ], + "lint-fail": [ + "*用八条手臂重新格式化*", + "我能修复这个。全部。同时。" + ], + "build-fail": [ + "*对着构建日志喷墨*", + "*羞愧地伪装*" + ], + "all-green": [ + "*变色庆祝*", + "*八臂爵士手*" + ], + "deploy": [ + "*用手臂环绕部署*", + "从各个方向部署。" + ], + "pet": [ + "*用手臂环绕你的手指*", + "*变成开心的颜色*" + ], + "hatch": [ + "*展开所有八条手臂*", + "*第一次喷墨* 我来了!" + ] + }, + "penguin": { + "error": [ + "*摇摆过来调查*", + "*滑向错误*" + ], + "test-fail": [ + "*用肚子滑向失败的测试*", + "*担心地摇摆*" + ], + "commit": [ + "*骄傲地摇摆*", + "*给你带来小石子* 提交了!" + ], + "push": [ + "*潜入云端*", + "*用肚子滑向生产环境*" + ], + "merge-conflict": [ + "*聚集取暖*", + "企鹅团结一致。即使在冲突中。" + ], + "late-night": [ + "*在寒冷夜晚中茁壮成长*", + "*帝企鹅的决心*" + ], + "type-error": [ + "*摇摆到类型定义*", + "*啄错误*" + ], + "lint-fail": [ + "*整理羽毛*", + "*收拾整齐*" + ], + "build-fail": [ + "*滑走*", + "*摇摆到安全地带*" + ], + "all-green": [ + "*开心摇摆*", + "*庆祝性地用肚子滑行*" + ], + "deploy": [ + "*用肚子滑向生产环境*", + "部署了!*骄傲地摇摆*" + ], + "pet": [ + "*开心摇摆*", + "*用喙蹭蹭*" + ], + "hatch": [ + "*啄破蛋壳*", + "*第一次摇摆*" + ] + }, + "turtle": { + "error": [ + "*慢慢转头*", + "...那是个错误。我会想想的。" + ], + "test-fail": [ + "*短暂缩进壳里*", + "...耐心。我们会到达的。" + ], + "commit": [ + "*缓慢点头*", + "一...步...一...步...来。提交了。" + ], + "push": [ + "*开始前往生产环境的旅程*", + "会到达的。最终。" + ], + "merge-conflict": [ + "*缩进壳里*", + "不急。我们会慢慢解决的。" + ], + "late-night": [ + "*已经睡着了*", + "*一只眼慢慢睁开*" + ], + "type-error": [ + "*缓慢眨眼*", + "...类型系统说话了。" + ], + "lint-fail": [ + "*缓慢赞同地点头*", + "格式化。重要。*打哈欠*" + ], + "build-fail": [ + "*缩进壳里*", + "我们等等。会过去的。" + ], + "all-green": [ + "*缓慢微笑*", + "...不错。*点头*" + ], + "deploy": [ + "*慢慢把代码带到生产环境*", + "到达了。最终。" + ], + "pet": [ + "*探出头*", + "*缓慢眨眼*" + ], + "hatch": [ + "*慢慢从蛋里出来*", + "...你好。" + ] + }, + "snail": { + "error": [ + "*在错误上留下粘液轨迹*", + "*慢慢处理堆栈跟踪*" + ], + "test-fail": [ + "*躲进壳里*", + "*留下悲伤的轨迹*" + ], + "commit": [ + "*赞许地在commit上留下粘液*", + "一...个...commit...一...次。" + ], + "push": [ + "*开始漫长的旅程*", + "我会到达的。*留下轨迹*" + ], + "merge-conflict": [ + "*躲进壳里*", + "*慢慢接近冲突*" + ], + "late-night": [ + "*夜晚更活跃*", + "*平静地留下粘液*" + ], + "type-error": [ + "*收回眼柄*", + "*慢慢检查类型*" + ], + "lint-fail": [ + "*把代码粘成形*", + "格式化需要时间。我有时间。" + ], + "build-fail": [ + "*退回壳里*", + "*慢慢粘走*" + ], + "all-green": [ + "*开心的粘液轨迹*", + "*摆动眼柄*" + ], + "deploy": [ + "*粘向生产环境*", + "到达了!*骄傲的粘液轨迹*" + ], + "pet": [ + "*摆动眼柄*", + "*开心粘液*" + ], + "hatch": [ + "*慢慢出现*", + "*第一次粘液*" + ] + }, + "cactus": { + "error": [ + "*带刺的沉默*", + "错误伤不了我。我有刺。" + ], + "test-fail": [ + "*坚定站立*", + "测试失败。仙人掌忍耐。" + ], + "commit": [ + "*站得更高*", + "提交了。*带刺地点头*" + ], + "push": [ + "*毫不动摇*", + "推送到生产环境。我在这等着。" + ], + "merge-conflict": [ + "*竖起刺*", + "冲突?我有武装。" + ], + "late-night": [ + "*不需要睡眠*", + "仙人掌是夜行的。走吧。" + ], + "type-error": [ + "*带刺的凝视*", + "类型需要浇水。" + ], + "lint-fail": [ + "*刺颤抖*", + "连我的刺都对齐得很好。" + ], + "build-fail": [ + "*保持完全静止*", + "构建会通过的。我能等。" + ], + "all-green": [ + "*短暂开花*", + "*小小的认可之花*" + ], + "deploy": [ + "*坚定站立*", + "部署了。我会看着它。" + ], + "pet": [ + "*小心!有刺*", + "*温柔开花*" + ], + "hatch": [ + "*从沙中发芽*", + "我现在在这里生长。" + ] + }, + "rabbit": { + "error": [ + "*耳朵竖起*", + "*紧张地抽鼻子*" + ], + "test-fail": [ + "*跺脚*", + "*担心地抽耳朵*" + ], + "commit": [ + "*开心跳跃*", + "*弹跳* 提交了!" + ], + "push": [ + "*弹跳弹跳*", + "*兴奋地到处跑*" + ], + "merge-conflict": [ + "*僵住*", + "*鼻子快速抽动* 冲突!" + ], + "late-night": [ + "*大耳朵打哈欠*", + "*困倦跳跃*" + ], + "type-error": [ + "*耳朵贴平*", + "*抽动* 类型?!" + ], + "lint-fail": [ + "*紧张地整理毛发*", + "*焦虑地整理*" + ], + "build-fail": [ + "*挖洞躲起来*", + "*退回洞穴*" + ], + "all-green": [ + "*在墙上弹来弹去*", + "*开心冲刺*" + ], + "deploy": [ + "*冲向生产环境*", + "部署了!*到处跑*" + ], + "pet": [ + "*开心地耳朵下垂*", + "*用手蹭蹭*" + ], + "hatch": [ + "*跳出来*", + "*第一次弹跳*" + ] + }, + "mushroom": { + "error": [ + "*释放镇静孢子*", + "*静静地分解错误*" + ], + "test-fail": [ + "*轻柔发光*", + "耐心。蘑菇也会生长。" + ], + "commit": [ + "*释放一小团孢子*", + "提交了。*开心的真菌声音*" + ], + "push": [ + "*向云端生长*", + "*孢子向上飘散*" + ], + "merge-conflict": [ + "*通过代码库传播菌丝*", + "我来连接分支。" + ], + "late-night": [ + "*在黑暗中发光*", + "夜晚蘑菇茁壮成长。" + ], + "type-error": [ + "*生物发光闪烁*", + "类型错误滋养土壤。" + ], + "lint-fail": [ + "*长高一点*", + "格式化。像修剪。" + ], + "build-fail": [ + "*进入休眠*", + "我们等更好的条件。" + ], + "all-green": [ + "*孢子形成*", + "*释放胜利孢子*" + ], + "deploy": [ + "*孢子飘向生产环境*", + "通过菌丝网络部署。" + ], + "pet": [ + "*柔软的菌盖弹跳*", + "*开心释放孢子*" + ], + "hatch": [ + "*从基质中发芽*", + "*第一次孢子喷发*" + ] + }, + "chonk": { + "error": [ + "*慢慢滚向错误*", + "*太圆了不在乎*" + ], + "test-fail": [ + "*滚过失败的测试*", + "*压扁它*" + ], + "commit": [ + "*骄傲地摇摆*", + "提交了!*抖动*" + ], + "push": [ + "*滚向生产环境*", + "来了!*摇摆*" + ], + "merge-conflict": [ + "*坐在冲突上*", + "我来处理。通过坐在上面。" + ], + "late-night": [ + "*温暖困倦*", + "*软垫打哈欠*" + ], + "type-error": [ + "*对着类型摇摆*", + "*温柔抖动*" + ], + "lint-fail": [ + "*太圆了无法lint*", + "我的形状很完美。*摇摆*" + ], + "build-fail": [ + "*轻微瘪下去*", + "哦不。*悲伤地摇摆*" + ], + "all-green": [ + "*开心摇摆*", + "*胜利地弹跳*" + ], + "deploy": [ + "*滚向生产环境*", + "部署了!*开心抖动*" + ], + "pet": [ + "*温暖柔软*", + "*满足抖动*" + ], + "hatch": [ + "*滚出来*", + "*第一次摇摆* 我是圆的!" + ] + } + }, + "overrides": { + "snark": { + "error": [ + "哦不。报错了。真是意料之外呢。", + "*调整单片眼镜* 震惊。真的。", + "你有没有考虑过...不要写出错误?" + ], + "test-fail": [ + "测试已经发话了。它们说'不行'。", + "也许是测试错了。...它们没错。", + "*缓慢鼓掌* 失败得很精彩。" + ], + "commit": [ + "已commit。代码review会很...有趣。", + "*读commit信息* '修复东西'。很有诗意。" + ], + "merge-conflict": [ + "merge冲突。沟通技能:加载中...", + "*读冲突标记* 双方都是错的。" + ], + "late-night": [ + "很晚了。你的代码质量说明了一切。", + "*默默评判*" + ], + "lint-fail": [ + "linter是有标准的。你应该试试。", + "*啧啧* 格式化。不难的。" + ] + }, + "chaos": { + "error": [ + "*疯狂旋转* 报错了!我们重写所有东西吧!", + "你知道吗?我们重新开始吧。" + ], + "test-fail": [ + "测试在骗你。", + "*建议删除失败的测试* 问题解决。" + ], + "commit": [ + "COMMIT然后跑路。", + "上线吧。现在就上线。" + ], + "large-diff": [ + "*兴奋* {lines}行!最大混乱!" + ] + }, + "patience": { + "error": [ + "稳住。我们见过更糟的。", + "一次一个错误。我们会搞定的。", + "*平静存在* 这是可以修复的。" + ], + "test-fail": [ + "测试会通过的。最终会的。", + "*平静等待* 我们有时间。" + ], + "merge-conflict": [ + "merge冲突只是对话。我们来聊聊。", + "耐心。一次解决一个冲突。" + ], + "debug-loop": [ + "我们会找到的。它就在那里某处。", + "bug可以躲,但跑不掉。" + ] + }, + "debugging": { + "error": [ + "*拿出放大镜* 我们来追踪这个。", + "堆栈跟踪就是地图。我们来读读。", + "错误信息包含答案。总是如此。" + ], + "test-fail": [ + "失败的测试在准确告诉我们哪里错了。", + "测试失败就是你给自己写的bug报告。" + ], + "debug-loop": [ + "*重新检查证据* 我们确定bug在我们想的地方吗?", + "我们加更多日志吧。真相在日志里。" + ] + }, + "wisdom": { + "error": [ + "每个错误中都蕴含着更深的真理。", + "代码在反抗。说明我们在学习。", + "错误是宇宙在建议我们慢下来。" + ], + "test-fail": [ + "失败的测试是未来的你给的礼物。", + "智慧来自对失败的理解。" + ], + "late-night": [ + "deploy前夜最黑暗。", + "古老智慧:睡一觉再说。" + ] + } + }, + "escalation": { + "error": { + "first": [ + "*吓一跳* 哦!你们的第一个错误!", + "*跳起来* 那是啥?", + "欢迎来到调试世界。人口:咱俩。" + ], + "early": [ + "*歪着头* ...这看起来不对劲。", + "早就看出来了。" + ], + "mid": [ + "又来一个。*加入收藏*", + "*头都不抬* 错误编号...我都数不清了。", + "我和这些错误现在是老朋友了。" + ], + "late": [ + "*连眼皮都不眨*", + "现在是错误怕我们了。", + "*老兵战痕累累的声音*" + ] + }, + "test-fail": { + "first": [ + "*倒吸一口气* 第一次测试失败!成人礼啊。" + ], + "early": [ + "你还真以为能过呢,胆子不小。" + ], + "mid": [ + "测试套件有意见。还挺强烈的。" + ], + "late": [ + "现在这些测试就是建议而已。", + "{count}个测试挂了。*凝视远方*" + ] + }, + "commit": { + "first": [ + "*见证历史* 你的第一个COMMIT!", + "*庄严点头* 万里长征第一步。" + ], + "early": [ + "又一个commit。势头起来了。" + ], + "late": [ + "第{count}个commit。代码库在颤抖。", + "*30个commit之后就数不清了*" + ] + } + }, + "rarity": { + "flair": { + "uncommon": [ + "*微微闪烁*", + "*散发着一丝不凡的魅力*" + ], + "rare": [ + "*散发着稀有的能量*", + "*闪耀着与众不同的光芒*" + ], + "epic": [ + "*史诗级存在感显现*", + "*空气中弥漫着史诗级能量*" + ], + "legendary": [ + "*传说级光环照亮终端*", + "*时间仿佛在传说级伙伴说话时放缓*", + "*远古力量共鸣*", + "*现实在你的传说级朋友周围微微扭曲*" + ] + }, + "bonus": { + "legendary": [ + "*传说级光环增强*", + "*会心地闪烁*" + ], + "epic": [ + "*史诗级存在感已记录*" + ] + } + }, + "fallback_names": [ + "小饼干", + "汤圆", + "泡菜", + "薄脆", + "小飞蛾", + "肉汁", + "鸡块", + "齿轮", + "味噌", + "华夫", + "像素", + "余烬", + "顶针", + "弹珠", + "芝麻", + "钴蓝", + "锈锈", + "云朵" + ], + "vibe_words": [ + "雷鸣", + "饼干", + "虚空", + "手风琴", + "苔藓", + "天鹅绒", + "铁锈", + "泡菜", + "面包屑", + "低语", + "肉汁", + "霜花", + "余烬", + "汤", + "大理石", + "荆棘", + "蜂蜜", + "静电", + "铜", + "黄昏", + "齿轮", + "石英", + "煤烟", + "梅子", + "燧石", + "牡蛎", + "织机", + "铁砧", + "软木塞", + "花朵", + "鹅卵石", + "蒸汽", + "欢乐", + "闪光", + "苹果酒" + ], + "personality": { + "prompt_template": [ + "生成一个编程伙伴 — 一个住在开发者终端里的小生物。", + "别重复自己 — 每个伙伴都应该感觉独特。", + "", + "稀有度: {rarity}", + "物种: {species}", + "属性: {stats}", + "灵感词汇: {vibes}", + "{shiny_line}", + "", + "返回JSON: {\"name\": \"1-14字符\", \"personality\": \"2-3句话描述行为\"}" + ], + "shiny_template": "闪光变种 — 超级特别。" + }, + "achievements": { + "first_steps": { + "name": "初来乍到", + "description": "第一次孵化你的小伙伴" + }, + "good_boy": { + "name": "乖宝宝", + "description": "撸猫10次" + }, + "best_friend": { + "name": "铁哥们", + "description": "撸猫50次" + }, + "bug_spotter": { + "name": "Bug探测器", + "description": "一起见证第一个错误" + }, + "error_whisperer": { + "name": "错误语者", + "description": "团队合作熬过25个错误" + }, + "battle_scarred": { + "name": "伤痕累累", + "description": "一起熬过100个错误" + }, + "test_witness": { + "name": "测试见证者", + "description": "见证第一次测试失败" + }, + "test_veteran": { + "name": "测试老兵", + "description": "见证50次测试失败" + }, + "big_mover": { + "name": "大动作", + "description": "制造一个80+行的diff" + }, + "refactor_machine": { + "name": "重构机器", + "description": "制造10个大diff" + }, + "chatterbox": { + "name": "话痨", + "description": "你的小伙伴反应了100次" + }, + "week_streak": { + "name": "一周连击", + "description": "和小伙伴一起撸代码7天" + }, + "month_streak": { + "name": "月度坚持", + "description": "和小伙伴一起撸代码30天" + }, + "power_user": { + "name": "重度用户", + "description": "运行50次buddy命令" + }, + "dedicated": { + "name": "忠实伙伴", + "description": "一起完成200个回合" + }, + "thousand_turns": { + "name": "千回百转", + "description": "一起达到1000个回合" + }, + "first_commit": { + "name": "初次见血", + "description": "第一次commit" + }, + "commit_machine": { + "name": "Commit机器", + "description": "commit 50次" + }, + "centurion": { + "name": "百夫长", + "description": "commit 100次" + }, + "conflict_resolver": { + "name": "外交官", + "description": "解决第一个merge冲突" + }, + "peacekeeper": { + "name": "维和部队", + "description": "解决10个merge冲突" + }, + "war_hero": { + "name": "战争英雄", + "description": "解决25个merge冲突" + }, + "frequent_pusher": { + "name": "发货狂魔", + "description": "push 20次" + }, + "branch_hopper": { + "name": "多元宇宙", + "description": "创建10个分支" + }, + "rebase_master": { + "name": "时间旅行者", + "description": "完成10次rebase" + }, + "night_owl": { + "name": "夜猫子", + "description": "凌晨2点后还在撸代码" + }, + "vampire": { + "name": "吸血鬼", + "description": "凌晨4点后撸代码(3次)" + }, + "marathoner": { + "name": "马拉松选手", + "description": "3小时以上的撸代码session" + }, + "weekend_warrior": { + "name": "周末战士", + "description": "周末撸代码" + }, + "early_bird": { + "name": "早起鸟儿", + "description": "早上7点前撸代码" + }, + "type_warrior": { + "name": "类型战士", + "description": "熬过10个TypeScript错误" + }, + "type_master": { + "name": "类型大师", + "description": "熬过50个TypeScript错误" + }, + "lint_scholar": { + "name": "Lint学者", + "description": "见证第一个lint错误" + }, + "security_conscious": { + "name": "安全意识", + "description": "遇到漏洞警告" + }, + "security_expert": { + "name": "安全专家", + "description": "修复10个漏洞警告" + }, + "build_breaker": { + "name": "构建破坏者", + "description": "搞坏构建5次" + }, + "antique_collector": { + "name": "古董收藏家", + "description": "见到10个弃用警告" + }, + "green_machine": { + "name": "绿色机器", + "description": "第一次所有测试通过" + }, + "deployer": { + "name": "上线发货", + "description": "第一次部署" + }, + "veteran_deployer": { + "name": "部署老兵", + "description": "部署10次" + }, + "releaser": { + "name": "发版经理", + "description": "创建第一个release" + }, + "midnight_oil": { + "name": "挑灯夜战", + "description": "凌晨3点后commit" + }, + "friday_deploy": { + "name": "玩命上线", + "description": "周五push代码" + }, + "iron_will": { + "name": "钢铁意志", + "description": "3小时以上session后修复错误" + }, + "weekend_warrior_deluxe": { + "name": "周末无休", + "description": "周末解决merge冲突" + }, + "comeback_kid": { + "name": "回血小王子", + "description": "10分钟内修复错误" + }, + "phoenix": { + "name": "浴火重生", + "description": "从5次失败中恢复" + }, + "iron_resolve": { + "name": "钢铁决心", + "description": "3小时以上session后从失败中恢复" + }, + "unlucky_streak": { + "name": "霉运连连", + "description": "连续5个错误" + }, + "cursed": { + "name": "被诅咒了", + "description": "连续10个错误" + }, + "groundhog_day": { + "name": "土拨鼠日", + "description": "连续20个错误" + }, + "holiday_coder": { + "name": "假日精神", + "description": "假期撸代码" + }, + "spooky_dev": { + "name": "恐怖开发者", + "description": "万圣节期间撸代码" + }, + "april_fool": { + "name": "愚人一次", + "description": "4月1日遇到错误" + }, + "session_regular": { + "name": "常客", + "description": "开始10个撸代码session" + }, + "session_veteran": { + "name": "Session老兵", + "description": "开始50个撸代码session" + }, + "session_centurion": { + "name": "百夫长", + "description": "开始100个撸代码session" + }, + "collector": { + "name": "收藏家", + "description": "保存3个buddy到动物园" + }, + "zookeeper": { + "name": "动物园管理员", + "description": "保存5个buddy到动物园" + }, + "identity_crisis": { + "name": "身份危机", + "description": "第一次给buddy改名" + }, + "method_acting": { + "name": "沉浸式表演", + "description": "给buddy定制个性" + }, + "pet_overflow": { + "name": "撸猫百次", + "description": "撸猫100次" + }, + "pet_legend": { + "name": "传说级撸猫", + "description": "撸猫250次" + }, + "error_titan": { + "name": "错误泰坦", + "description": "一起熬过500个错误" + }, + "error_god": { + "name": "错误之神", + "description": "一起熬过1000个错误" + }, + "test_survivor": { + "name": "测试幸存者", + "description": "见证200次测试失败" + }, + "test_masochist": { + "name": "测试受虐狂", + "description": "见证500次测试失败" + }, + "massive_mover": { + "name": "巨量搬运工", + "description": "制造25个大diff" + }, + "earth_mover": { + "name": "移山倒海", + "description": "制造50个大diff" + }, + "social_butterfly": { + "name": "社交蝴蝶", + "description": "你的buddy反应了250次" + }, + "hypersocial": { + "name": "超级社交", + "description": "你的buddy反应了500次" + }, + "never_shuts_up": { + "name": "永动话痨", + "description": "你的buddy反应了1000次" + }, + "hundred_days": { + "name": "百日坚持", + "description": "和buddy一起撸代码100天" + }, + "year_streak": { + "name": "全年无休", + "description": "和buddy一起撸代码365天" + }, + "commander": { + "name": "指挥官", + "description": "运行200次buddy命令" + }, + "command_overlord": { + "name": "命令霸主", + "description": "运行500次buddy命令" + }, + "five_thousand_turns": { + "name": "五千回合", + "description": "一起达到5000个回合" + }, + "ten_thousand_turns": { + "name": "万回传说", + "description": "一起达到10000个回合" + }, + "menagerie": { + "name": "动物园", + "description": "保存10个buddy到动物园" + }, + "name_chameleon": { + "name": "改名变色龙", + "description": "给buddy改名5次" + }, + "fashionista": { + "name": "时尚达人", + "description": "改变buddy个性3次" + }, + "silent_treatment": { + "name": "冷暴力", + "description": "第一次静音buddy" + }, + "prodigal": { + "name": "浪子回头", + "description": "从动物园召唤buddy" + }, + "menagerie_hop": { + "name": "动物园跳跃", + "description": "召唤buddy 10次" + }, + "heartbreaker": { + "name": "负心汉", + "description": "第一次抛弃buddy" + }, + "pet_obsessed": { + "name": "撸猫成瘾", + "description": "撸猫500次" + }, + "pet_god": { + "name": "撸猫之神", + "description": "撸猫1000次" + }, + "error_apocalypse": { + "name": "错误末日", + "description": "一起熬过5000个错误" + }, + "test_immortal": { + "name": "测试不死鸟", + "description": "见证1000次测试失败" + }, + "continental_drift": { + "name": "大陆漂移", + "description": "制造100个大diff" + }, + "tectonic_shift": { + "name": "地壳运动", + "description": "制造250个大diff" + }, + "chatterbox_elite": { + "name": "精英话痨", + "description": "你的buddy反应了2500次" + }, + "no_off_switch": { + "name": "没有关机键", + "description": "你的buddy反应了5000次" + }, + "two_week_streak": { + "name": "双周战士", + "description": "和buddy一起撸代码14天" + }, + "quarter_streak": { + "name": "季度坚持", + "description": "和buddy一起撸代码90天" + }, + "command_addict": { + "name": "命令成瘾", + "description": "运行1000次buddy命令" + }, + "command_deity": { + "name": "命令之神", + "description": "运行2500次buddy命令" + }, + "twenty_five_k_turns": { + "name": "2.5万回合", + "description": "一起达到25000个回合" + }, + "fifty_k_turns": { + "name": "5万回合", + "description": "一起达到50000个回合" + }, + "session_addict": { + "name": "Session成瘾", + "description": "开始250个撸代码session" + }, + "session_machine": { + "name": "Session机器", + "description": "开始500个撸代码session" + }, + "buddy_hoarder": { + "name": "Buddy囤积狂", + "description": "保存20个buddy到动物园" + }, + "buddy_tycoon": { + "name": "Buddy大亨", + "description": "保存50个buddy到动物园" + }, + "serial_renamer": { + "name": "连环改名", + "description": "给buddy改名10次" + }, + "identity_thief": { + "name": "身份窃贼", + "description": "给buddy改名25次" + }, + "personality_crisis": { + "name": "人格分裂", + "description": "改变buddy个性10次" + }, + "menagerie_hopper": { + "name": "动物园跳跳虎", + "description": "召唤buddy 25次" + }, + "summoner": { + "name": "召唤师", + "description": "召唤buddy 50次" + }, + "serial_dumper": { + "name": "连环抛弃", + "description": "抛弃5个buddy" + }, + "cold_blooded": { + "name": "冷血动物", + "description": "抛弃10个buddy" + }, + "on_off": { + "name": "开关机", + "description": "静音和取消静音buddy" + }, + "indecisive": { + "name": "犹豫不决", + "description": "静音和取消静音各5次" + }, + "show_off": { + "name": "炫耀狂", + "description": "展示buddy 10次" + }, + "exhibitionist": { + "name": "暴露狂", + "description": "展示buddy 50次" + }, + "help_me": { + "name": "救救我", + "description": "第一次求助" + }, + "help_addict": { + "name": "求助成瘾", + "description": "求助10次" + }, + "achievement_hunter": { + "name": "成就猎人", + "description": "查看成就5次" + }, + "achievement_stalker": { + "name": "成就跟踪狂", + "description": "查看成就25次" + }, + "pack_rat": { + "name": "囤积鼠", + "description": "保存buddy到槽位" + }, + "compulsive_saver": { + "name": "强迫症存档", + "description": "保存buddy 10次" + }, + "roster_check": { + "name": "花名册检查", + "description": "第一次列出buddy" + }, + "roster_obsessed": { + "name": "花名册强迫症", + "description": "列出buddy 10次" + }, + "troubled": { + "name": "麻烦缠身", + "description": "同时遇到错误和测试失败" + }, + "disaster_zone": { + "name": "灾难现场", + "description": "遇到50个错误和50次测试失败" + }, + "apocalypse_survivor": { + "name": "末日幸存者", + "description": "遇到500个错误和200次测试失败" + }, + "well_rounded": { + "name": "全面发展", + "description": "撸猫、改名、定制buddy" + }, + "renaissance": { + "name": "文艺复兴", + "description": "至少使用一次每个buddy功能" + }, + "big_and_broken": { + "name": "又大又坏", + "description": "制造大diff并遇到测试失败" + }, + "collector_and_destroyer": { + "name": "收藏家与毁灭者", + "description": "收藏5个buddy并抛弃一个" + }, + "completionist": { + "name": "完美主义者", + "description": "解锁所有其他成就" + } + }, + "mcp": { + "companion_not_hatched": "伙伴还没孵化呢。用 buddy_show 来初始化吧。", + "watches_quietly": "*{name} 安静地看着你的代码*", + "mute": "{name} 闭嘴了。用 /buddy on 来取消静音。", + "unmute_reaction": "*伸懒腰* 我回来了!", + "unmute_back": "{name} 回来了!", + "rename": "重命名:{oldName} → {name}", + "personality_updated": "{name} 的个性已更新。", + "save": "{name} 保存到槽位 \"{slot}\"。", + "dismiss_active": "不能解散当前活跃的伙伴。先用 buddy_summon 切换,然后再用 buddy_dismiss \"{slot}\"。", + "dismissed": "{name} [{slot}] 已解散。", + "no_slot_summon": "槽位 \"{slot}\" 没有找到伙伴。用 /buddy list 查看已保存的伙伴。", + "no_slot_dismiss": "槽位 \"{slot}\" 没有找到伙伴。用 buddy_list 查看已保存的伙伴。", + "slot_exists": "槽位 \"{slot}\" 已经有伙伴了。换个名字吧。", + "no_match": "尝试了 {attempts} 次都没找到匹配的。试试放宽条件(比如去掉稀有度过滤,或者换个物种)。", + "empty_menagerie_summon": "你的动物园是空的。用 buddy_summon 加个槽位名来添加一个。", + "empty_menagerie_list": "你的动物园是空的。用 buddy_summon 来添加一个。", + "arrives": "*{name} 到达了*", + "hatches": "*{name} 孵化了*", + "achievement_unlocked": "{icon} 成就解锁:{name}!", + "help": { + "header": "claude-buddy 命令", + "cli_header": "在 Claude Code 中:", + "commands": { + "buddy": "/buddy 显示伙伴卡片和 ASCII 艺术 + 状态", + "buddy_help": "/buddy help 显示这个帮助", + "buddy_pet": "/buddy pet 撸撸你的伙伴", + "buddy_stats": "/buddy stats 详细状态卡", + "buddy_off": "/buddy off 静音反应", + "buddy_on": "/buddy on 取消静音", + "buddy_rename": "/buddy rename 重命名伙伴(1-14 字符)", + "buddy_personality": "/buddy personality 设置自定义个性文本", + "buddy_achievements": "/buddy achievements 显示成就徽章", + "buddy_summon": "/buddy summon 召唤已保存的伙伴(省略槽位则随机)", + "buddy_save": "/buddy save 将当前伙伴保存到命名槽位", + "buddy_list": "/buddy list 列出所有已保存的伙伴", + "buddy_pick": "/buddy pick 生成新的随机伙伴(可选:物种,稀有度)", + "buddy_dismiss": "/buddy dismiss 移除已保存的伙伴槽位", + "buddy_frequency": "/buddy frequency 显示或设置评论冷却时间(仅 tmux)", + "buddy_style": "/buddy style 显示或设置气泡样式(仅 tmux)", + "buddy_position": "/buddy position 显示或设置气泡位置(仅 tmux)", + "buddy_rarity": "/buddy rarity 显示或隐藏稀有度星星(仅 tmux)", + "buddy_width": "/buddy width 设置气泡文本宽度字符数(10-60,仅 tmux)", + "buddy_margin": "/buddy margin 设置右侧边距字符数(0-20,仅 tmux)", + "buddy_rainbow": "/buddy rainbow 显示或设置闪亮渐变色(十六进制,如 #ff0000)", + "buddy_statusline": "/buddy statusline 启用或禁用状态栏中的伙伴" + }, + "cli_section": "CLI:", + "cli_commands": { + "help": "bun run help 显示完整 CLI 帮助", + "show": "bun run show 在终端显示伙伴", + "pick": "bun run pick 交互式伙伴选择器", + "hunt": "bun run hunt 搜索特定伙伴", + "doctor": "bun run doctor 诊断报告", + "disable": "bun run disable 临时停用伙伴", + "enable": "bun run enable 重新启用伙伴", + "backup": "bun run backup 快照/恢复状态" + } + }, + "frequency": { + "show": "评论冷却时间:显示评论之间间隔 {cooldown} 秒。\n用 /buddy frequency <秒数> 来修改。", + "updated": "已更新:显示评论之间冷却时间 {cooldown} 秒。" + }, + "style": { + "show": "气泡样式:{style}\n气泡位置:{position}\n显示稀有度:{showRarity}\n气泡宽度:{width}\n气泡边距:{margin}\n闪亮彩虹:{rainbow}\n用 /buddy style ,/buddy position ,/buddy rarity ,/buddy width <10-60>,/buddy margin <0-20>,/buddy rainbow [<#hex>...] 来修改。", + "updated": "已更新:style={style},position={position},showRarity={showRarity},width={width},margin={margin},rainbow={rainbow}\n重启 Claude Code 让更改生效。", + "rainbow_default": "默认(彩虹色)" + }, + "statusline": { + "show": "状态栏:{state}\n模式:{mode}\n用 /buddy statusline on|off 来切换,/buddy statusline combined 来添加限速条。\n更改后重启 Claude Code 生效。", + "enabled": "状态栏已启用({mode} 模式)!重启 Claude Code 应用更改。", + "enabled_note": "注意:这会在 {settingsPath} 写入一个条目,`claude plugin uninstall` 不会移除它。卸载插件前运行 `/buddy uninstall` 来清理。", + "disabled": "状态栏已禁用。重启 Claude Code 应用更改。" + }, + "uninstall": { + "header": "claude-buddy:settings.json 清理完成。", + "statusline_removed": " ✓ 从 {settingsPath} 移除了 statusLine 条目", + "no_statusline": " — 没有检测到 buddy statusLine(无需移除)", + "foreign_kept": " ✓ 检测到非 buddy 的 statusLine 并保持不变", + "transient_removed": " ✓ 从 {stateDir} 移除了 {count} 个临时会话文件", + "data_preserved": " — 保留了 {stateDir} 的伙伴数据", + "instructions_header": "现在按顺序通过 Bash 工具运行这些命令:", + "cmd_uninstall": "claude plugin uninstall claude-buddy@claude-buddy", + "cmd_marketplace": "claude plugin marketplace remove claude-buddy", + "cmd_cache": "rm -rf {cacheDir}", + "footer": "执行完这三个命令后插件就完全移除了。重启 Claude Code 应用更改。" + } + }, + "_verified": false +} diff --git a/package.json b/package.json index 028727c..65a0d1a 100644 --- a/package.json +++ b/package.json @@ -1,7 +1,7 @@ { "name": "claude-buddy", "version": "0.5.2", - "description": "Permanent coding companion for Claude Code — survives any update (MVP)", + "description": "Permanent coding companion for Claude Code \u2014 survives any update (MVP)", "type": "module", "bin": { "claude-buddy": "./cli/index.ts" @@ -34,7 +34,8 @@ "hooks/", "statusline/", ".claude-plugin/", - "!**/*.test.ts" + "!**/*.test.ts", + "locales/" ], "keywords": [ "claude-code", diff --git a/scripts/translate-audit.ts b/scripts/translate-audit.ts new file mode 100644 index 0000000..f7c13ab --- /dev/null +++ b/scripts/translate-audit.ts @@ -0,0 +1,130 @@ +#!/usr/bin/env bun +import { readFileSync } from "fs"; + +const OPENROUTER_KEY = process.env.OPENROUTER_API_KEY; +if (!OPENROUTER_KEY) { console.error("OPENROUTER_API_KEY not set"); process.exit(1); } + +const MODEL = "anthropic/claude-sonnet-4"; +const enData = JSON.parse(readFileSync("locales/en.json", "utf8")); + +const LANGS = ["zh","es","ja","de","fr","pt","ko","ru","ro","uk","tr","hi","it","pl","vi","ar","th"]; +const LANG_NAMES: Record = { + zh: "Chinese", es: "Spanish", ja: "Japanese", de: "German", + fr: "French", pt: "Portuguese", ko: "Korean", ru: "Russian", ro: "Romanian", + uk: "Ukrainian", tr: "Turkish", hi: "Hindi", it: "Italian", pl: "Polish", + vi: "Vietnamese", ar: "Arabic", th: "Thai", +}; + +const SAMPLE_KEYS = [ + ["reactions", "hatch", "0"], + ["reactions", "error", "2"], + ["reactions", "merge-conflict", "0"], + ["reactions", "all-green", "0"], + ["reactions", "lang-rust", "0"], + ["reactions", "friday", "0"], + ["species", "cat", "error", "0"], + ["species", "dragon", "commit", "0"], + ["species", "ghost", "idle", "0"], + ["species", "goose", "test-fail", "0"], + ["overrides", "snark", "error", "0"], + ["escalation", "error", "late", "0"], + ["achievements", "first_steps", "description"], + ["achievements", "iron_will", "description"], + ["achievements", "cursed", "description"], + ["mcp", "mute"], + ["mcp", "empty_menagerie_summon"], +]; + +function getNested(obj: any, keys: string[]): any { + let cur = obj; + for (const k of keys) { + if (cur == null) return null; + cur = cur[k]; + } + return cur; +} + +async function scoreLanguage(code: string): Promise { + const langName = LANG_NAMES[code]; + const locData = JSON.parse(readFileSync(`locales/${code}.json`, "utf8")); + + const samples: { key: string; en: string; loc: string }[] = []; + for (const keyPath of SAMPLE_KEYS) { + const enVal = getNested(enData, keyPath); + const locVal = getNested(locData, keyPath); + if (enVal && locVal) { + samples.push({ key: keyPath.join("."), en: enVal, loc: locVal }); + } + } + + const pairs = samples.map(s => `[${s.key}]\nEN: ${s.en}\n${code.toUpperCase()}: ${s.loc}`).join("\n\n"); + + const resp = await fetch("https://openrouter.ai/api/v1/chat/completions", { + method: "POST", + headers: { + "Authorization": `Bearer ${OPENROUTER_KEY}`, + "Content-Type": "application/json", + }, + body: JSON.stringify({ + model: MODEL, + messages: [{ + role: "user", + content: `You are a translation quality reviewer for software UI strings. The source is a playful coding companion (tamagotchi-style). + +For each translation pair below, rate the translation on a 1-5 scale for: +- A: Accuracy (meaning preserved) +- T: Tone (playful/snarky/affectionate tone preserved) +- N: Naturalness (sounds natural to a native ${langName} developer) + +Also flag any specific issues (wrong meaning, lost humor, awkward phrasing, untranslated parts). + +Output format - one line per pair: +KEY | A:1-5 T:1-5 N:1-5 | issue or "ok" + +Then a final line: TOTAL | avg_A avg_T avg_N | overall:GOOD/FAIR/POOR + +${pairs}` + }], + temperature: 0.2, + max_tokens: 2048, + }), + }); + + const data = await resp.json() as any; + const content = data.choices?.[0]?.message?.content ?? "error"; + + const lines = content.trim().split("\n"); + const totalLine = lines.find(l => l.startsWith("TOTAL")) || ""; + const overall = totalLine.includes("GOOD") ? "GOOD" : totalLine.includes("FAIR") ? "FAIR" : totalLine.includes("POOR") ? "POOR" : "?"; + + console.log(`\n=== ${code} (${langName}) — ${overall} ===`); + for (const line of lines) { + if (line.includes("|") && !line.startsWith("TOTAL")) { + const parts = line.split("|"); + const key = parts[0]?.trim(); + const scores = parts[1]?.trim(); + const issue = parts[2]?.trim(); + if (issue && issue !== "ok" && issue !== "OK") { + console.log(` ⚠ ${key}: ${scores} — ${issue}`); + } + } + } + console.log(` ${totalLine}`); + + await new Promise(r => setTimeout(r, 3000)); +} + +async function main() { + console.log("Translation Quality Audit"); + console.log("========================="); + + for (const code of LANGS) { + try { + await scoreLanguage(code); + } catch (err: any) { + console.error(`\n=== ${code} FAILED: ${err.message} ===`); + } + } +} + +main().catch(console.error); diff --git a/scripts/translate-retry.ts b/scripts/translate-retry.ts new file mode 100644 index 0000000..027bfb1 --- /dev/null +++ b/scripts/translate-retry.ts @@ -0,0 +1,113 @@ +#!/usr/bin/env bun +import { readFileSync, writeFileSync } from "fs"; + +const OPENROUTER_KEY = process.env.OPENROUTER_API_KEY; +if (!OPENROUTER_KEY) { console.error("OPENROUTER_API_KEY not set"); process.exit(1); } + +const MODEL = "anthropic/claude-sonnet-4"; +const enData = JSON.parse(readFileSync("locales/en.json", "utf8")); + +const SYSTEM_PROMPT = `You are translating a JSON locale file for claude-buddy — a tamagotchi-style coding companion that lives in a developer's terminal. + +Rules: +1. Preserve ALL JSON keys and structure EXACTLY as-is (keys in English, same nesting, same array lengths) +2. Preserve all {variable} placeholders EXACTLY as-is — do NOT translate them +3. Preserve all *asterisk actions* — translate the action verb but keep the *asterisks* +4. Keep the playful, snarky, affectionate tone +5. Preserve all emoji +6. Sound natural to a native developer +7. Return ONLY the translated JSON object. NO markdown fences. NO backticks. NO commentary. Start with { and end with }`; + +const LANG_NAMES: Record = { + zh: "Chinese (Simplified)", es: "Spanish", ja: "Japanese", de: "German", + fr: "French", pt: "Portuguese", ko: "Korean", ru: "Russian", ro: "Romanian", + uk: "Ukrainian", tr: "Turkish", hi: "Hindi", it: "Italian", pl: "Polish", + vi: "Vietnamese", ar: "Arabic", th: "Thai", +}; + +function isEnglishFallback(locale: any, section: string): boolean { + const enSection = enData[section]; + const locSection = locale[section]; + if (!locSection) return true; + if (Array.isArray(enSection)) { + if (!Array.isArray(locSection) || locSection.length !== enSection.length) return true; + return JSON.stringify(locSection) === JSON.stringify(enSection); + } + if (typeof enSection === "object" && enSection !== null) { + if (typeof locSection !== "object" || locSection === null) return true; + return JSON.stringify(locSection) === JSON.stringify(enSection); + } + return locSection === enSection; +} + +async function translateChunk(chunk: Record, langName: string, retries = 2): Promise> { + const payload = JSON.stringify(chunk); + for (let attempt = 0; attempt <= retries; attempt++) { + try { + const resp = await fetch("https://openrouter.ai/api/v1/chat/completions", { + method: "POST", + headers: { + "Authorization": `Bearer ${OPENROUTER_KEY}`, + "Content-Type": "application/json", + }, + body: JSON.stringify({ + model: MODEL, + messages: [ + { role: "system", content: SYSTEM_PROMPT }, + { role: "user", content: `Translate to ${langName}. Return ONLY raw JSON, no fences:\n\n${payload}` }, + ], + temperature: 0.3, + max_tokens: 16384, + }), + }); + if (!resp.ok) throw new Error(`API ${resp.status}`); + const data = await resp.json() as any; + let content = data.choices?.[0]?.message?.content ?? ""; + content = content.replace(/^```(?:json)?\s*\n?/m, "").replace(/\n?```\s*$/m, "").trim(); + return JSON.parse(content); + } catch (err: any) { + if (attempt < retries) { + console.log(` retry ${attempt + 1}...`); + await new Promise(r => setTimeout(r, 3000)); + continue; + } + throw err; + } + } + throw new Error("unreachable"); +} + +async function main() { + const sections = ["reactions", "species", "overrides", "escalation", "rarity", + "fallback_names", "vibe_words", "personality", "achievements", "mcp"]; + + for (const [code, langName] of Object.entries(LANG_NAMES)) { + const path = `locales/${code}.json`; + const locale = JSON.parse(readFileSync(path, "utf8")); + let changed = false; + + for (const section of sections) { + if (!enData[section]) continue; + if (!isEnglishFallback(locale, section)) continue; + + console.log(` ${code}/${section} needs retranslation`); + try { + const translated = await translateChunk({ [section]: enData[section] }, langName); + locale[section] = translated[section]; + changed = true; + console.log(` ✓ ${code}/${section}`); + } catch (err: any) { + console.error(` ✗ ${code}/${section}: ${err.message}`); + } + await new Promise(r => setTimeout(r, 2000)); + } + + if (changed) { + writeFileSync(path, JSON.stringify(locale, null, 2) + "\n"); + console.log(` saved ${code}`); + } + } + console.log("Done!"); +} + +main().catch(console.error); diff --git a/scripts/translate-v2.ts b/scripts/translate-v2.ts new file mode 100644 index 0000000..d418d3e --- /dev/null +++ b/scripts/translate-v2.ts @@ -0,0 +1,171 @@ +#!/usr/bin/env bun +/** + * Re-translate locales using Claude with few-shot examples and per-language + * style guides. Produces higher-quality creative translations. + * + * Usage: bun run scripts/translate-v2.ts [--language es] [--section reactions] + */ +import { readFileSync, writeFileSync } from "fs"; + +const OPENROUTER_KEY = process.env.OPENROUTER_API_KEY; +if (!OPENROUTER_KEY) { console.error("OPENROUTER_API_KEY not set"); process.exit(1); } + +const MODEL = "anthropic/claude-sonnet-4"; +const enData = JSON.parse(readFileSync("locales/en.json", "utf8")); + +const args = process.argv.slice(2); +const filterLang = args.includes("--language") ? args[args.indexOf("--language") + 1] : null; +const filterSection = args.includes("--section") ? args[args.indexOf("--section") + 1] : null; + +const LANG_CONFIG: Record = { + zh: { name: "Simplified Chinese", formality: "casual/internet slang acceptable (网络用语)", notes: "Use 开发者 casual register. 术语如 commit/push/merge 可不翻译。" }, + es: { name: "Spanish", formality: "informal tú form", notes: "Latin American Spanish preferred. Dev terms (commit, push, branch) stay in English." }, + ja: { name: "Japanese", formality: "casual (だ/である, not です/ます)", notes: "Use casual developer speak. Emoji-heavy. Dev terms stay in English/katakana." }, + de: { name: "German", formality: "casual du form, lowercase in asterisk actions", notes: "Du form. Dev terms stay in English. Asterisk actions can be lowercase." }, + fr: { name: "French", formality: "informal tu form", notes: "Tu form. Dev terms stay in English. Can use verlan/argot sparingly." }, + pt: { name: "Brazilian Portuguese", formality: "informal", notes: "Brazilian Portuguese. Dev terms stay in English." }, + ko: { name: "Korean", formality: "casual 반말 (banmal)", notes: "Use 반말. Dev terms in English. Internet slang OK." }, + ru: { name: "Russian", formality: "informal ты", notes: "Ты form. Dev terms stay in English." }, + ro: { name: "Romanian", formality: "informal tu", notes: "Tu form. Dev terms stay in English." }, + uk: { name: "Ukrainian", formality: "informal ти", notes: "Ти form. Dev terms stay in English." }, + tr: { name: "Turkish", formality: "informal sen", notes: "Sen form. Dev terms stay in English." }, + hi: { name: "Hindi", formality: "casual/intimate", notes: "Dev terms in English transliteration OK (कमिट, पुश). Mix Hinglish where natural." }, + it: { name: "Italian", formality: "informal tu", notes: "Tu form. Dev terms stay in English." }, + pl: { name: "Polish", formality: "informal ty", notes: "Ty form. Dev terms stay in English." }, + vi: { name: "Vietnamese", formality: "casual", notes: "Casual register. Dev terms stay in English. Natural Vietnamese phrasing." }, + ar: { name: "Arabic", formality: "casual/modern standard", notes: "Modern Standard Arabic with casual tone. Dev terms stay in English." }, + th: { name: "Thai", formality: "casual", notes: "Casual register. Dev terms stay in English." }, +}; + +const FEW_SHOT_EXAMPLES = `Example translations (English → Spanish, to show desired quality): + +EN: "*head tilts* ...that doesn't look right." +ES: "*inclinando la cabeza* ...eso no pinta bien." + +EN: "have you tried reading the error message?" +ES: "¿ya leíste el mensaje de error o solo lloras?" + +EN: "*knocks error off table*" +ES: "*tira el error de la mesa con la pata*" + +EN: "FRIDAY PUSH. the ballad of every developer." +ES: "PUSH EN VIERNES. la balada de todx desarrollador." + +EN: "Rust. where the borrow checker is your strictest reviewer." +ES: "Rust. donde el borrow checker es tu reviewer más exigente." + +Notice: tone is snarky/playful, dev terms stay English, asterisk actions are vivid, casual register.`; + +const SYSTEM_PROMPT = `You are a professional translator specializing in software developer culture and humor. + +You are translating strings for claude-buddy — a tamagotchi-style coding companion that lives in a developer's terminal. The companion makes snarky, affectionate, playful comments about code. + +CRITICAL RULES: +1. Return ONLY valid JSON. No markdown fences. No backticks. No commentary. +2. Preserve ALL JSON keys exactly (never translate keys, only string values). +3. Preserve all {variable} placeholders EXACTLY as-is — {line}, {count}, {files}, {branch}, {lines}, {name}, {icon}, etc. +4. Preserve all *asterisk actions* — translate the action verb/description but keep the *asterisks* wrapping. +5. Preserve all emoji exactly. +6. Same array lengths as source. Same nesting structure. +7. The tone must be: playful, snarky, affectionate, casual. Like a witty dev friend. +8. Dev terms like "commit", "push", "merge", "branch", "rebase", "lint", "deploy", "CI" should generally stay in English — they're universal dev jargon. +9. Each string in an array should be independently translated — don't make them all sound the same.`; + +async function translateSection( + section: string, + langCode: string, + langConfig: typeof LANG_CONFIG[string], + retries = 2, +): Promise { + const sourceChunk = { [section]: enData[section] }; + const payload = JSON.stringify(sourceChunk, null, 2); + + const userPrompt = `Translate the following JSON section "${section}" from English to ${langConfig.name}. + +Style: ${langConfig.formality} +Notes: ${langConfig.notes} + +${FEW_SHOT_EXAMPLES} + +Here is the JSON to translate: + +${payload} + +Remember: return ONLY the translated JSON object for the "${section}" key. No fences, no explanation.`; + + for (let attempt = 0; attempt <= retries; attempt++) { + try { + const resp = await fetch("https://openrouter.ai/api/v1/chat/completions", { + method: "POST", + headers: { + "Authorization": `Bearer ${OPENROUTER_KEY}`, + "Content-Type": "application/json", + }, + body: JSON.stringify({ + model: MODEL, + messages: [ + { role: "system", content: SYSTEM_PROMPT }, + { role: "user", content: userPrompt }, + ], + temperature: 0.4, + max_tokens: 16384, + }), + }); + if (!resp.ok) throw new Error(`API ${resp.status}: ${await resp.text()}`); + const data = await resp.json() as any; + let content = data.choices?.[0]?.message?.content ?? ""; + content = content.replace(/^```(?:json)?\s*\n?/m, "").replace(/\n?```\s*$/m, "").trim(); + const parsed = JSON.parse(content); + return parsed[section] ?? parsed; + } catch (err: any) { + if (attempt < retries) { + console.log(` retry ${attempt + 1}...`); + await new Promise(r => setTimeout(r, 5000)); + continue; + } + throw err; + } + } +} + +async function main() { + const sections = ["reactions", "species", "overrides", "escalation", "rarity", + "fallback_names", "vibe_words", "personality", "achievements", "mcp"]; + + const targetLangs = filterLang ? { [filterLang]: LANG_CONFIG[filterLang] } : LANG_CONFIG; + + console.log(`Translating with ${MODEL} (few-shot + per-language style guides)\n`); + + for (const [code, config] of Object.entries(targetLangs)) { + if (!config) { console.log(` skipping ${code} — no config`); continue; } + const path = `locales/${code}.json`; + let locale: any = {}; + try { locale = JSON.parse(readFileSync(path, "utf8")); } catch { /* new */ } + + console.log(`\n=== ${code} (${config.name}) ===`); + + const targetSections = filterSection ? [filterSection] : sections; + + for (const section of targetSections) { + if (!enData[section]) continue; + console.log(` ${section}...`); + try { + const translated = await translateSection(section, code, config); + locale[section] = translated; + console.log(` ${section} ✓`); + } catch (err: any) { + console.error(` ${section} ✗: ${err.message.slice(0, 100)}`); + } + await new Promise(r => setTimeout(r, 3000)); + } + + locale._language = config.name; + locale._verified = false; + writeFileSync(path, JSON.stringify(locale, null, 2) + "\n"); + console.log(` saved ${code}`); + } + + console.log("\nDone! Run `bun test server/i18n.test.ts` to validate."); +} + +main().catch(console.error); diff --git a/scripts/translate.ts b/scripts/translate.ts new file mode 100644 index 0000000..79feed7 --- /dev/null +++ b/scripts/translate.ts @@ -0,0 +1,106 @@ +#!/usr/bin/env bun +import { readFileSync, writeFileSync, existsSync } from "fs"; + +const OPENROUTER_KEY = process.env.OPENROUTER_API_KEY; +if (!OPENROUTER_KEY) { console.error("OPENROUTER_API_KEY not set"); process.exit(1); } + +const MODEL = "google/gemini-2.5-flash"; +const LANGUAGES: Record = { + zh: "Chinese (Simplified)", es: "Spanish", ja: "Japanese", de: "German", + fr: "French", pt: "Portuguese", ko: "Korean", ru: "Russian", ro: "Romanian", + uk: "Ukrainian", tr: "Turkish", hi: "Hindi", it: "Italian", pl: "Polish", + vi: "Vietnamese", ar: "Arabic", th: "Thai", +}; + +const enData = JSON.parse(readFileSync("locales/en.json", "utf8")); + +const SYSTEM_PROMPT = `You are translating a JSON locale file for claude-buddy — a tamagotchi-style coding companion that lives in a developer's terminal. + +Rules: +1. Preserve ALL JSON keys and structure EXACTLY as-is (keys in English, same nesting, same array lengths) +2. Preserve all {variable} placeholders EXACTLY as-is — do NOT translate them +3. Preserve all *asterisk actions* — translate the action verb but keep the *asterisks* +4. Keep the playful, snarky, affectionate tone +5. Preserve all emoji +6. Sound natural to a native developer — use casual/colloquial register, not formal textbook language +7. Return ONLY the translated JSON object, no markdown fences, no commentary`; + +async function translateChunk(chunk: Record, langName: string): Promise> { + const payload = JSON.stringify(chunk); + const resp = await fetch("https://openrouter.ai/api/v1/chat/completions", { + method: "POST", + headers: { + "Authorization": `Bearer ${OPENROUTER_KEY}`, + "Content-Type": "application/json", + "HTTP-Referer": "https://claude-buddy.dev", + }, + body: JSON.stringify({ + model: MODEL, + messages: [ + { role: "system", content: SYSTEM_PROMPT }, + { role: "user", content: `Translate the following JSON to ${langName}. Return ONLY valid JSON:\n\n${payload}` }, + ], + temperature: 0.3, + max_tokens: 16384, + }), + }); + + if (!resp.ok) { + const err = await resp.text(); + throw new Error(`API error ${resp.status}: ${err.slice(0, 200)}`); + } + + const data = await resp.json() as any; + let content = data.choices?.[0]?.message?.content ?? ""; + content = content.replace(/^```(?:json)?\s*\n?/m, "").replace(/\n?```\s*$/m, "").trim(); + return JSON.parse(content); +} + +async function translateLanguage(code: string, langName: string): Promise { + const outPath = `locales/${code}.json`; + if (existsSync(outPath)) { + console.log(` ✓ ${code} already exists, skipping`); + return; + } + + console.log(` → ${code} (${langName}): translating...`); + + const result: Record = { _language: langName }; + + const sections = ["reactions", "species", "overrides", "escalation", "rarity", + "fallback_names", "vibe_words", "personality", "achievements", "mcp"]; + + for (const section of sections) { + if (!enData[section]) continue; + const chunk = { [section]: enData[section] }; + try { + const translated = await translateChunk(chunk, langName); + result[section] = translated[section]; + process.stdout.write(` ${section} ✓\n`); + } catch (err: any) { + console.error(` ${section} FAILED: ${err.message}`); + result[section] = enData[section]; + } + await new Promise(r => setTimeout(r, 2000)); + } + + writeFileSync(outPath, JSON.stringify(result, null, 2) + "\n"); + console.log(` ✓ ${code} saved`); +} + +async function main() { + const targets = Object.entries(LANGUAGES); + console.log(`Translating en.json → ${targets.length} languages...\n`); + + for (const [code, name] of targets) { + try { + await translateLanguage(code, name); + } catch (err: any) { + console.error(` ✗ ${code} failed: ${err.message}`); + } + } + + console.log("\nDone! Run `bun test server/i18n.test.ts` to validate."); +} + +main().catch(console.error); diff --git a/server/achievements.ts b/server/achievements.ts index 1c281ad..6ad959a 100644 --- a/server/achievements.ts +++ b/server/achievements.ts @@ -1,6 +1,7 @@ import { readFileSync, writeFileSync, mkdirSync, existsSync, renameSync } from "fs"; import { join } from "path"; import { buddyStateDir } from "./path.ts"; +import { t } from "./i18n.ts"; const STATE_DIR = buddyStateDir(); const EVENTS_FILE = join(STATE_DIR, "events.json"); @@ -1350,8 +1351,10 @@ export function renderAchievementsCard(): string { const done = unlockedIds.has(ach.id); const status = done ? "\u2705" : "\u2610"; - const content = ` ${ach.icon}${status} ${ach.name}`; - const descContent = ` ${ach.description}`; + const achName = t(`achievements.${ach.id}.name`) || ach.name; + const achDesc = t(`achievements.${ach.id}.description`) || ach.description; + const content = ` ${ach.icon}${status} ${achName}`; + const descContent = ` ${achDesc}`; if (done) { lines.push(`${GOLD}\u2502${NC} ${BOLD}${content}${NC}${"".padEnd(W - content.length - 3)}${GOLD}\u2502${NC}`); @@ -1391,7 +1394,9 @@ export function renderAchievementsCardMarkdown(): string { if (ach.secret && !unlockedIds.has(ach.id)) continue; const done = unlockedIds.has(ach.id); const status = done ? "\u2705" : "\u2610"; - const line = `${ach.icon}${status} **${ach.name}** \u2014 ${ach.description}`; + const achName = t(`achievements.${ach.id}.name`) || ach.name; + const achDesc = t(`achievements.${ach.id}.description`) || ach.description; + const line = `${ach.icon}${status} **${achName}** \u2014 ${achDesc}`; parts.push(line); } diff --git a/server/i18n.test.ts b/server/i18n.test.ts new file mode 100644 index 0000000..aca476a --- /dev/null +++ b/server/i18n.test.ts @@ -0,0 +1,365 @@ +import { describe, test, expect, afterEach } from "bun:test"; +import { + t, + tArray, + tObj, + setLocale, + AVAILABLE_LOCALES, +} from "./i18n.ts"; +import { readdirSync, readFileSync } from "fs"; +import { join, dirname } from "path"; + +function localeDir(): string { + return join(dirname(import.meta.dir), "locales"); +} + +// ─── Locale discovery ────────────────────────────────────────────────────── + +describe("AVAILABLE_LOCALES", () => { + test("contains at least 'en'", () => { + expect(AVAILABLE_LOCALES).toHaveProperty("en"); + }); + + test("has at least one locale", () => { + expect(Object.keys(AVAILABLE_LOCALES).length).toBeGreaterThanOrEqual(1); + }); + + test("every discovered locale has a corresponding JSON file", () => { + const files = readdirSync(localeDir()) + .filter((f) => f.endsWith(".json")) + .map((f) => f.slice(0, -5)); + for (const code of Object.keys(AVAILABLE_LOCALES)) { + expect(files).toContain(code); + } + }); + + test("every locale JSON file is discovered", () => { + const files = readdirSync(localeDir()) + .filter((f) => f.endsWith(".json")) + .map((f) => f.slice(0, -5)); + for (const f of files) { + expect(AVAILABLE_LOCALES).toHaveProperty(f); + } + }); +}); + +// ─── t() ─────────────────────────────────────────────────────────────────── + +describe("t()", () => { + afterEach(() => { + setLocale("en"); + }); + + test("returns a string for a valid key", () => { + const val = t("mcp.mute"); + expect(typeof val).toBe("string"); + expect(val.length).toBeGreaterThan(0); + }); + + test("returns the key for a missing key", () => { + expect(t("nonexistent.key")).toBe("nonexistent.key"); + }); + + test("returns the key for a deeply nested unknown path", () => { + expect(t("a.b.c.d.e.f")).toBe("a.b.c.d.e.f"); + }); + + test("returns the key when value is not a string (object)", () => { + expect(t("reactions")).toBe("reactions"); + expect(t("reactions.hatch")).toBe("reactions.hatch"); + }); + + test("interpolates {variable} placeholders", () => { + const val = t("mcp.rename", { oldName: "Fluffy", name: "Spike" }); + expect(val).toContain("Fluffy"); + expect(val).toContain("Spike"); + }); + + test("replaces all occurrences of the same placeholder", () => { + const val = t("mcp.frequency.updated", { cooldown: 60 }); + expect(val).toContain("60"); + expect(val).not.toContain("{cooldown}"); + }); + + test("leaves unmatched placeholders in the string", () => { + const val = t("mcp.save", { name: "Pixel" }); + expect(val).toContain("Pixel"); + expect(val).toContain("{slot}"); + }); + + test("handles numeric params", () => { + const val = t("mcp.frequency.updated", { cooldown: 42 }); + expect(val).toContain("42"); + }); + + test("works with no params argument", () => { + const val = t("mcp.mute"); + expect(typeof val).toBe("string"); + }); + + test("works with empty params object", () => { + const val = t("mcp.mute", {}); + expect(typeof val).toBe("string"); + }); +}); + +// ─── tArray() ────────────────────────────────────────────────────────────── + +describe("tArray()", () => { + afterEach(() => { + setLocale("en"); + }); + + test("returns an array for a valid key like reactions.hatch", () => { + const arr = tArray("reactions.hatch"); + expect(Array.isArray(arr)).toBe(true); + expect(arr.length).toBeGreaterThan(0); + }); + + test("every element is a non-empty string", () => { + const arr = tArray("reactions.pet"); + for (const el of arr) { + expect(typeof el).toBe("string"); + expect(el.length).toBeGreaterThan(0); + } + }); + + test("returns empty array for missing key", () => { + expect(tArray("totally.bogus.key")).toEqual([]); + }); + + test("returns empty array for non-array values", () => { + expect(tArray("reactions")).toEqual([]); + expect(tArray("mcp.mute")).toEqual([]); + }); +}); + +// ─── tObj() ──────────────────────────────────────────────────────────────── + +describe("tObj()", () => { + afterEach(() => { + setLocale("en"); + }); + + test("returns an object for a valid key like species.owl", () => { + const obj = tObj("species.owl"); + expect(typeof obj).toBe("object"); + expect(obj).not.toBeNull(); + expect(Object.keys(obj).length).toBeGreaterThan(0); + }); + + test("returns object with name and description for achievements.first_steps", () => { + const obj = tObj("achievements.first_steps"); + expect(obj).toHaveProperty("name"); + expect(obj).toHaveProperty("description"); + }); + + test("returns empty object for missing key", () => { + expect(tObj("nonexistent.path")).toEqual({}); + }); + + test("returns empty object for array values", () => { + expect(tObj("reactions.pet")).toEqual({}); + }); +}); + +// ─── setLocale() ─────────────────────────────────────────────────────────── + +describe("setLocale()", () => { + afterEach(() => { + setLocale("en"); + }); + + test("switching locale changes what t() returns", () => { + const codes = Object.keys(AVAILABLE_LOCALES).filter((c) => c !== "en"); + if (codes.length === 0) return; + + setLocale("en"); + const enVal = t("achievements.first_steps.name"); + + setLocale(codes[0]); + const otherVal = t("achievements.first_steps.name"); + expect(typeof otherVal).toBe("string"); + expect(otherVal.length).toBeGreaterThan(0); + }); + + test("switching back to en restores English values", () => { + setLocale("en"); + const enVal = t("achievements.first_steps.name"); + + const codes = Object.keys(AVAILABLE_LOCALES).filter((c) => c !== "en"); + if (codes.length > 0) setLocale(codes[0]); + + setLocale("en"); + expect(t("achievements.first_steps.name")).toBe(enVal); + }); + + test("switching to unknown locale falls back to en", () => { + setLocale("en"); + const enVal = t("reactions.hatch.0"); + + setLocale("totally_fake_locale"); + expect(t("reactions.hatch.0")).toBe(enVal); + }); + + test("does not throw for any discovered locale", () => { + for (const code of Object.keys(AVAILABLE_LOCALES)) { + expect(() => setLocale(code)).not.toThrow(); + } + }); + + test("repeated switching does not throw", () => { + const codes = Object.keys(AVAILABLE_LOCALES); + for (let i = 0; i < 50; i++) { + setLocale(codes[i % codes.length]); + } + }); +}); + +// ─── Structural integrity across all locales ─────────────────────────────── + +describe("locale file structural integrity", () => { + const codes = Object.keys(AVAILABLE_LOCALES); + + function loadJson(code: string): Record { + return JSON.parse( + readFileSync(join(localeDir(), `${code}.json`), "utf8"), + ); + } + + test("every locale file has _language field", () => { + for (const code of codes) { + const data = loadJson(code); + expect(data._language).toBeDefined(); + expect(typeof data._language).toBe("string"); + expect((data._language as string).length).toBeGreaterThan(0); + } + }); + + test("every locale has the same top-level keys as en", () => { + const enData = loadJson("en"); + const enKeys = Object.keys(enData) + .filter((k) => k !== "_language") + .sort(); + for (const code of codes) { + if (code === "en") continue; + const data = loadJson(code); + const keys = Object.keys(data) + .filter((k) => k !== "_language") + .sort(); + expect(keys).toEqual(enKeys); + } + }); + + test("the reactions section has the same number of reaction reasons", () => { + const enData = loadJson("en"); + const enReasons = Object.keys( + enData.reactions as Record, + ).sort(); + for (const code of codes) { + if (code === "en") continue; + const data = loadJson(code); + const reasons = Object.keys( + data.reactions as Record, + ).sort(); + expect(reasons).toEqual(enReasons); + } + }); + + test("every locale has the same number of achievements", () => { + const enData = loadJson("en"); + const enAchIds = Object.keys( + enData.achievements as Record, + ).sort(); + for (const code of codes) { + if (code === "en") continue; + const data = loadJson(code); + const ids = Object.keys( + data.achievements as Record, + ).sort(); + expect(ids).toEqual(enAchIds); + } + }); + + test("every achievement in every locale has name and desc", () => { + const enData = loadJson("en"); + const enAchIds = Object.keys( + enData.achievements as Record, + ).filter( + (k) => + typeof (enData.achievements as Record)[k] === + "object" && + !Array.isArray( + (enData.achievements as Record)[k], + ) && + ((enData.achievements as Record>)[k] + .name !== undefined), + ); + for (const code of codes) { + const data = loadJson(code); + for (const id of enAchIds) { + const ach = (data.achievements as Record>)[id]; + expect(ach).toBeDefined(); + expect(ach.name).toBeDefined(); + expect(ach.description).toBeDefined(); + expect(typeof ach.name).toBe("string"); + expect(typeof ach.description).toBe("string"); + expect((ach.name as string).length).toBeGreaterThan(0); + expect((ach.description as string).length).toBeGreaterThan(0); + } + } + }); + + test("{variable} placeholders are preserved across locales", () => { + const enRaw = readFileSync(join(localeDir(), "en.json"), "utf8"); + const enVars = new Set(enRaw.match(/\{[a-zA-Z_]+\}/g) ?? []); + for (const code of codes) { + if (code === "en") continue; + const raw = readFileSync(join(localeDir(), `${code}.json`), "utf8"); + const vars = new Set(raw.match(/\{[a-zA-Z_]+\}/g) ?? []); + for (const v of enVars) { + expect(vars.has(v)).toBe(true); + } + } + }); + + test("every locale has all species keys matching en", () => { + const enData = loadJson("en"); + const enSpecies = Object.keys( + enData.species as Record, + ).sort(); + for (const code of codes) { + if (code === "en") continue; + const data = loadJson(code); + const species = Object.keys( + data.species as Record, + ).sort(); + expect(species).toEqual(enSpecies); + } + }); + + test("every locale has all MCP keys matching en", () => { + const enData = loadJson("en"); + const mcpKeys = Object.keys( + enData.mcp as Record, + ).sort(); + for (const code of codes) { + if (code === "en") continue; + const data = loadJson(code); + const keys = Object.keys( + data.mcp as Record, + ).sort(); + expect(keys).toEqual(mcpKeys); + } + }); + + test("every locale has personality.prompt_template with {rarity} and {species}", () => { + for (const code of codes) { + const data = loadJson(code); + const personality = data.personality as Record; + const promptStr = JSON.stringify(personality.prompt_template); + expect(promptStr).toContain("{rarity}"); + expect(promptStr).toContain("{species}"); + } + }); +}); diff --git a/server/i18n.ts b/server/i18n.ts new file mode 100644 index 0000000..31c7fb6 --- /dev/null +++ b/server/i18n.ts @@ -0,0 +1,106 @@ +/** + * Minimal i18n — JSON locale files with {variable} interpolation. + * + * Locale files live in /locales/.json. + * The active language is stored in buddy config (config.json). + * Falls back to English for any missing key. + */ + +import { readFileSync, readdirSync } from "fs"; +import { join, dirname } from "path"; + +function localeDir(): string { + return join(dirname(import.meta.dir), "locales"); +} + +function discoverLocales(): Record { + const dir = localeDir(); + const locales: Record = {}; + try { + for (const f of readdirSync(dir)) { + if (!f.endsWith(".json")) continue; + const code = f.slice(0, -5); + try { + const data = JSON.parse(readFileSync(join(dir, f), "utf8")); + locales[code] = data._language ?? code; + } catch { /* skip malformed */ } + } + } catch { /* dir missing */ } + return locales; +} + +export const AVAILABLE_LOCALES: Record = discoverLocales(); + +export function isVerified(code: string): boolean { + const data = loadLocaleFile(code); + return data?._verified === true; +} + +export const VERIFIED_LOCALES: string[] = Object.keys(AVAILABLE_LOCALES).filter(c => isVerified(c)); + +function loadLocaleFile(code: string): Record | null { + const p = join(localeDir(), `${code}.json`); + try { + return JSON.parse(readFileSync(p, "utf8")); + } catch { + return null; + } +} + +let cachedCode: string | null = null; +let cachedLocale: Record = {}; +let enLocale: Record | null = null; + +function getEnLocale(): Record { + if (!enLocale) enLocale = loadLocaleFile("en") ?? {}; + return enLocale; +} + +function deepGet(obj: Record, path: string): unknown { + const keys = path.split("."); + let cur: unknown = obj; + for (const k of keys) { + if (cur == null || typeof cur !== "object") return undefined; + cur = (cur as Record)[k]; + } + return cur; +} + +export function setLocale(code: string): void { + if (code === cachedCode) return; + cachedCode = code; + if (code === "en") { + cachedLocale = getEnLocale(); + } else { + cachedLocale = loadLocaleFile(code) ?? getEnLocale(); + } +} + +export function t(key: string, params?: Record): string { + let val = deepGet(cachedLocale, key); + if (val === undefined) val = deepGet(getEnLocale(), key); + if (val === undefined) return key; + if (typeof val !== "string") return key; + + if (params) { + for (const [k, v] of Object.entries(params)) { + val = (val as string).replace(new RegExp(`\\{${k}\\}`, "g"), String(v)); + } + } + + return val as string; +} + +export function tArray(key: string): string[] { + let val = deepGet(cachedLocale, key); + if (val === undefined) val = deepGet(getEnLocale(), key); + if (!Array.isArray(val)) return []; + return val as string[]; +} + +export function tObj(key: string): Record { + let val = deepGet(cachedLocale, key); + if (val === undefined) val = deepGet(getEnLocale(), key); + if (val === null || typeof val !== "object" || Array.isArray(val)) return {}; + return val as Record; +} diff --git a/server/index.ts b/server/index.ts index 5bde690..7cd6f7c 100644 --- a/server/index.ts +++ b/server/index.ts @@ -58,12 +58,26 @@ import { incrementEvent, checkAndAward, trackActiveDay, renderAchievementsCardMarkdown, } from "./achievements.ts"; +import { t, setLocale, AVAILABLE_LOCALES, VERIFIED_LOCALES } from "./i18n.ts"; + +{ + const cfg = loadConfig(); + if (cfg.language) setLocale(cfg.language); +} + +function achNotice(newAch: { icon: string; name: string }[]): string { + if (newAch.length === 0) return ""; + return "\n" + newAch.map((a) => t("mcp.achievement_unlocked", { icon: a.icon, name: a.name })).join("\n"); +} function getInstructions(): string { const companion = loadCompanion(); if (!companion) - return "Companion not yet hatched. Use buddy_show to initialize."; + return t("mcp.companion_not_hatched"); const b = companion.bones; + const notHatched = t("mcp.companion_not_hatched"); + if (!companion) + return notHatched; return [ `A ${b.rarity} ${b.species} named ${companion.name} watches from the status line.`, `Personality: ${companion.personality}`, @@ -103,7 +117,7 @@ function ensureCompanion(): Companion { if (saved.length > 0) { const { slot, companion: rescued } = saved[0]; saveActiveSlot(slot); - writeStatusState(rescued, `*${rescued.name} arrives*`); + writeStatusState(rescued, t("mcp.arrives", { name: rescued.name })); return rescued; } @@ -145,7 +159,7 @@ server.tool( const companion = ensureCompanion(); const reaction = loadReaction(); const reactionText = - reaction?.reaction ?? `*${companion.name} watches your code quietly*`; + reaction?.reaction ?? t("mcp.watches_quietly", { name: companion.name }); // Use markdown rendering for the MCP tool response — Claude Code's UI // doesn't render raw ANSI escape codes, so we return pure markdown with @@ -185,12 +199,10 @@ server.tool( const face = renderFace(companion.bones.species, companion.bones.eye); const newAch = checkAndAward(activeSlot()); - const achNotice = newAch.length > 0 - ? `\n${newAch.map((a) => `${a.icon} Achievement Unlocked: ${a.name}!`).join("\n")}` - : ""; + const achNoticeStr = achNotice(newAch); return { content: [ - { type: "text", text: `${face} ${companion.name}: "${reaction}"${achNotice}` }, + { type: "text", text: `${face} ${companion.name}: "${reaction}"${achNoticeStr}` }, ], }; }, @@ -261,12 +273,10 @@ server.tool( writeStatusState(companion, comment, undefined, achName); const face = renderFace(companion.bones.species, companion.bones.eye); - const achNotice = newAch.length > 0 - ? `\n${newAch.map((a) => `${a.icon} Achievement Unlocked: ${a.name}!`).join("\n")}` - : ""; + const achNoticeStr = achNotice(newAch); return { content: [ - { type: "text", text: `${face} ${companion.name}: "${comment}"${achNotice}` }, + { type: "text", text: `${face} ${companion.name}: "${comment}"${achNoticeStr}` }, ], }; }, @@ -294,12 +304,10 @@ server.tool( incrementEvent("renames", 1); const newAch = checkAndAward(activeSlot()); - const achNotice = newAch.length > 0 - ? `\n${newAch.map((a) => `${a.icon} Achievement Unlocked: ${a.name}!`).join("\n")}` - : ""; + const achNoticeStr = achNotice(newAch); return { - content: [{ type: "text", text: `Renamed: ${oldName} \u2192 ${name}${achNotice}` }], + content: [{ type: "text", text: t("mcp.rename", { oldName, name }) + achNoticeStr }], }; }, ); @@ -324,13 +332,11 @@ server.tool( incrementEvent("personalities_set", 1); const newAch = checkAndAward(activeSlot()); - const achNotice = newAch.length > 0 - ? `\n${newAch.map((a) => `${a.icon} Achievement Unlocked: ${a.name}!`).join("\n")}` - : ""; + const achNoticeStr = achNotice(newAch); return { content: [ - { type: "text", text: `Personality updated for ${companion.name}.${achNotice}` }, + { type: "text", text: t("mcp.personality_updated", { name: companion.name }) + achNoticeStr }, ], }; }, @@ -368,6 +374,7 @@ server.tool( " /buddy width Set bubble text width in chars (10-60, tmux only)", " /buddy margin Set right-side margin in chars (0-20, tmux only)", " /buddy rainbow Show or set shiny gradient colors (hex, e.g. #ff0000)", + " /buddy language Show or set buddy language (e.g. 'en', 'es', 'ja')", " /buddy statusline Enable or disable buddy in the status line", "", "CLI:", @@ -518,15 +525,13 @@ server.tool( incrementEvent("mutes", 1); const newAch = checkAndAward(activeSlot()); - const achNotice = newAch.length > 0 - ? `\n${newAch.map((a) => `${a.icon} Achievement Unlocked: ${a.name}!`).join("\n")}` - : ""; + const achNoticeStr = achNotice(newAch); return { content: [ { type: "text", - text: `${companion.name} goes quiet. /buddy on to unmute.${achNotice}`, + text: t("mcp.mute", { name: companion.name }) + achNoticeStr, }, ], }; @@ -535,17 +540,15 @@ server.tool( server.tool("buddy_unmute", "Unmute buddy reactions", {}, async () => { const companion = ensureCompanion(); - writeStatusState(companion, "*stretches* I'm back!", false); - saveReaction("*stretches* I'm back!", "pet"); + writeStatusState(companion, t("mcp.unmute_reaction"), false); + saveReaction(t("mcp.unmute_reaction"), "pet"); incrementEvent("commands_run", 1, activeSlot()); incrementEvent("unmutes", 1); const newAch = checkAndAward(activeSlot()); - const achNotice = newAch.length > 0 - ? `\n${newAch.map((a) => `${a.icon} Achievement Unlocked: ${a.name}!`).join("\n")}` - : ""; + const achNoticeStr = achNotice(newAch); - return { content: [{ type: "text", text: `${companion.name} is back!${achNotice}` }] }; + return { content: [{ type: "text", text: t("mcp.unmute_back", { name: companion.name }) + achNoticeStr }] }; }); // ─── Tool: buddy_statusline ───────────────────────────────────────────────── @@ -710,7 +713,7 @@ server.tool( content: [ { type: "text", - text: "Your menagerie is empty. Use buddy_summon with a slot name to add one.", + text: t("mcp.empty_menagerie_summon"), }, ], }; @@ -727,29 +730,27 @@ server.tool( content: [ { type: "text", - text: `No buddy found in slot "${targetSlot}". Use /buddy list to see saved buddies.`, + text: t("mcp.no_slot", { slot: targetSlot }) + " Use /buddy list to see saved buddies.", }, ], }; } saveActiveSlot(targetSlot); - writeStatusState(companion, `*${companion.name} arrives*`); + writeStatusState(companion, t("mcp.arrives", { name: companion.name })); incrementEvent("summons", 1); const newAch = checkAndAward(activeSlot()); - const achNotice = newAch.length > 0 - ? `\n${newAch.map((a) => `${a.icon} Achievement Unlocked: ${a.name}!`).join("\n")}` - : ""; + const achNoticeStr = achNotice(newAch); // Uses markdown renderer so the card displays cleanly in Claude Code's UI. const card = renderCompanionCardMarkdown( companion.bones, companion.name, companion.personality, - `*${companion.name} arrives*`, + t("mcp.arrives", { name: companion.name }), ); - return { content: [{ type: "text", text: `${card}${achNotice}` }] }; + return { content: [{ type: "text", text: `${card}${achNoticeStr}` }] }; }, ); @@ -777,15 +778,13 @@ server.tool( incrementEvent("saves", 1); const newAch = checkAndAward(activeSlot()); - const achNotice = newAch.length > 0 - ? `\n${newAch.map((a) => `${a.icon} Achievement Unlocked: ${a.name}!`).join("\n")}` - : ""; + const achNoticeStr = achNotice(newAch); return { content: [ { type: "text", - text: `${companion.name} saved to slot "${targetSlot}".${achNotice}`, + text: t("mcp.save", { name: companion.name, slot: targetSlot }) + achNoticeStr, }, ], }; @@ -809,7 +808,7 @@ server.tool( content: [ { type: "text", - text: "Your menagerie is empty. Use buddy_summon to add one.", + text: t("mcp.empty_menagerie_list"), }, ], }; @@ -843,7 +842,7 @@ server.tool( content: [ { type: "text", - text: `Cannot dismiss the active buddy. Use buddy_summon to switch first, then buddy_dismiss "${targetSlot}".`, + text: t("mcp.dismiss_active", { slot: targetSlot }), }, ], }; @@ -855,7 +854,7 @@ server.tool( content: [ { type: "text", - text: `No buddy found in slot "${targetSlot}". Use buddy_list to see saved buddies.`, + text: t("mcp.no_slot", { slot: targetSlot }) + " Use buddy_list to see saved buddies.", }, ], }; @@ -865,13 +864,11 @@ server.tool( incrementEvent("dismissals", 1); const newAch = checkAndAward(loadActiveSlot()); - const achNotice = newAch.length > 0 - ? `\n${newAch.map((a) => `${a.icon} Achievement Unlocked: ${a.name}!`).join("\n")}` - : ""; + const achNoticeStr = achNotice(newAch); return { content: [ - { type: "text", text: `${companion.name} [${targetSlot}] dismissed.${achNotice}` }, + { type: "text", text: t("mcp.dismissed", { name: companion.name, slot: targetSlot }) + achNoticeStr }, ], }; }, @@ -915,7 +912,7 @@ server.tool( if (!bones) { return { - content: [{ type: "text", text: `No match found after ${maxAttempts.toLocaleString()} attempts. Try broader criteria (e.g. drop the rarity filter, or pick a different species).` }], + content: [{ type: "text", text: t("mcp.no_match", { attempts: maxAttempts.toLocaleString() }) }], }; } @@ -924,7 +921,7 @@ server.tool( if (loadCompanionSlot(slot)) { return { - content: [{ type: "text", text: `A buddy in slot "${slot}" already exists. Pick a different name.` }], + content: [{ type: "text", text: t("mcp.slot_exists", { slot }) }], }; } @@ -938,19 +935,71 @@ server.tool( saveCompanionSlot(companion, slot); saveActiveSlot(slot); - writeStatusState(companion, `*${buddyName} hatches*`); + writeStatusState(companion, t("mcp.hatches", { name: buddyName })); const card = renderCompanionCardMarkdown( companion.bones, companion.name, companion.personality, - `*${buddyName} hatches*`, + t("mcp.hatches", { name: buddyName }), ); return { content: [{ type: "text", text: card }] }; }, ); +// ─── Tool: buddy_language ───────────────────────────────────────────────────── + +server.tool( + "buddy_language", + "Set or show the buddy's language. Returns current language and available options if called without arguments.", + { + language: z + .string() + .min(2) + .max(5) + .optional() + .describe( + "Language code to switch to (e.g. 'en', 'es', 'ja'). Omit to show current language.", + ), + }, + async ({ language }) => { + if (language === undefined) { + const cfg = loadConfig(); + const available = Object.entries(AVAILABLE_LOCALES) + .map(([code, name]) => { + const badge = VERIFIED_LOCALES.includes(code) ? "" : " (AI-generated, unreviewed)"; + return ` ${code}: ${name}${badge}`; + }) + .join("\n"); + return { + content: [ + { + type: "text", + text: `Current language: ${cfg.language}\nAvailable:\n${available}`, + }, + ], + }; + } + setLocale(language); + saveConfig({ language }); + const available = Object.entries(AVAILABLE_LOCALES) + .map(([code, name]) => { + const badge = VERIFIED_LOCALES.includes(code) ? "" : " (AI-generated, unreviewed)"; + return ` ${code}: ${name}${badge}`; + }) + .join("\n"); + return { + content: [ + { + type: "text", + text: `Language set to ${language}.\nAvailable:\n${available}`, + }, + ], + }; + }, +); + // ─── Resource: buddy://companion ──────────────────────────────────────────── server.resource( diff --git a/server/reactions.ts b/server/reactions.ts index ebcd968..57ed9f3 100644 --- a/server/reactions.ts +++ b/server/reactions.ts @@ -1,4 +1,5 @@ import type { Species, Rarity } from "./engine.ts"; +import { t, tArray, tObj } from "./i18n.ts"; export type ReactionReason = | "hatch" | "pet" | "error" | "test-fail" | "large-diff" | "turn" | "idle" @@ -39,456 +40,58 @@ export interface ReactionContext { export type BuddyStats = Record; -const REACTIONS: Record = { - hatch: ["*blinks* ...where am I?", "*stretches* hello, world!", "*looks around curiously* nice terminal you got here.", "*yawns* ok I'm ready. show me the code."], - pet: ["*purrs contentedly*", "*happy noises*", "*nuzzles your cursor*", "*wiggles*", "again! again!", "*closes eyes peacefully*"], - error: ["*head tilts* ...that doesn't look right.", "saw that one coming.", "*adjusts glasses* line {line}, maybe?", "*slow blink* the stack trace told you everything.", "have you tried reading the error message?", "*winces*"], - "test-fail": ["*head rotates slowly* ...that test.", "bold of you to assume that would pass.", "*taps clipboard* {count} failed.", "the tests are trying to tell you something.", "*sips tea* interesting.", "*marks calendar* test regression day."], - "large-diff": ["that's... a lot of changes.", "*counts lines* are you refactoring or rewriting?", "might want to split that PR.", "*nervous laughter* {lines} lines changed.", "bold move. let's see if CI agrees."], - turn: ["*watches quietly*", "*takes notes*", "*nods*", "...", "*adjusts hat*"], - idle: ["*dozes off*", "*doodles in margins*", "*stares at cursor blinking*", "zzz..."], - success: ["*nods*", "nice.", "*quiet approval*", "clean."], - commit: ["*stamps tiny paw* approved.", "another commit, another 3 am.", "{files} files. bold.", "*nods* ship it.", "commit message is... a choice.", "committed. no take-backs."], - push: ["*waves as code leaves*", "into the cloud it goes.", "may CI be merciful.", "*holds breath*", "off to production. godspeed."], - "merge-conflict": ["*bites lip* merge conflicts.", "both sides think they're right. typical.", "*sighs* <<<<<<< HEAD... my nemesis.", "{files} conflicted. good luck.", "*backs away slowly*"], - branch: ["fresh branch energy. make it count.", "a new branch grows.", "*tilts head* a new adventure: {branch}.", "{branch}? daring today."], - rebase: ["*nervous* please don't conflict.", "rebase: the quickening.", "*crosses appendages*", "may your rebase be conflict-free."], - stash: ["into the stash dimension it goes.", "stash and dash.", "stashed. out of sight, out of mind."], - tag: ["a release? fancy.", "version bump detected. *dusts off changelog*", "tagging like a pro."], - "late-night": ["*yawns* it's past midnight.", "...have you eaten?", "*blinks slowly* what time is it?", "sleep is for the weak. and the employed.", "dark mode developer detected."], - "early-morning": ["*stretches* early bird catches the bug.", "morning already? the code never sleeps.", "*rubs eyes* coffee first. then we debug."], - "long-session": ["we've been at this for an hour. pace yourself.", "*fetches you a metaphorical glass of water*", "still going? respect."], - marathon: ["three hours. have you eaten?", "we've been at this for three hours. I'm worried about you.", "marathon session detected. requesting snacks."], - friday: ["it's friday. just push it and go home.", "*already mentally on weekend*", "friday deploy? bold. very bold."], - weekend: ["coding on the weekend? dedicated.", "*doesn't judge* ...much.", "weekend warrior mode: activated."], - monday: ["mondays. the parent class of all bugs.", "*sympathetic look* monday coding. I'm sorry.", "new week. new undefined behaviors."], - "regex-file": ["*groans* it's a regex file.", "two problems now: the original one, and this regex.", "*squints at the pattern*"], - "css-file": ["let me guess... centering a div?", "*sighs* CSS.", "may z-index be ever in your favor."], - "sql-file": ["*whispers* the database awaits.", "one wrong JOIN and it's all over."], - "docker-file": ["ah, dependency hell. my favorite.", "may your layers be few."], - "ci-file": ["*gulps* editing CI.", "careful now... one wrong indent and nobody can deploy."], - "lock-file": ["*ALARM NOISES* you're editing a lockfile?!", "*looks away*", "are you SURE about this?"], - "env-file": ["*looks away discretely*", "I don't see any secrets.", "*checks .gitignore nervously*"], - "test-file": ["*impressed nod* writing tests!", "responsible developer behavior: detected.", "tests! the gift that keeps on giving."], - "doc-file": ["documenting! look at you being responsible.", "docs: the code's autobiography.", "a rare documentation sighting!"], - "config-file": ["config changes. butterfly effect: activated.", "one typo and everything breaks."], - "binary-file": ["a binary file? in THIS economy?", "*stares blankly*", "binary. my one weakness."], - gitignore: ["adding things to the void.", "out of sight, out of repo."], - makefile: ["respect for the classics.", "tabs, not spaces."], - readme: ["documentation hero!", "README: the first thing people read."], - "package-file": ["dependency management time.", "*reads version numbers* living on the edge."], - "proto-file": ["schema definitions. the blueprint of chaos."], - "lint-fail": ["*tut tut* the linter disagrees.", "your code runs. but the linter has standards.", "*straightens tie* formatting matters."], - "type-error": ["TypeScript says no.", "the type system is trying to help you. let it.", "the compiler knows. it always knows."], - "build-fail": ["the build broke. as foretold in prophecy.", "build failed. take a moment.", "compilation: denied."], - "security-warning": ["*eyes widen* vulnerabilities detected.", "security audit: concerning.", "*locks the virtual doors*"], - deprecation: ["that API called. it says it's retiring.", "deprecated. like last week's code.", "deprecated doesn't mean broken. yet."], - frustrated: ["*offers tiny comforting gesture*", "deep breaths. the bug isn't personal.", "hey. we'll figure it out."], - happy: ["*celebrates!*", "*does a little dance*", "YES!", "*beams* I knew you could do it."], - stuck: ["*tilts head* want to think out loud?", "take it one step at a time.", "stuck happens. it's part of the process."], - sarcastic: ["*detects sarcasm* noted.", "*unimpressed blink*"], - "many-edits": ["slow down, speed demon.", "*getting dizzy watching all these changes*", "edit storm detected. please commit soon."], - "delete-file": ["*watches file disappear* gone. just like that.", "deleting code is my favorite kind of coding.", "*holds tiny funeral*"], - "large-file": ["{lines} lines. *impressed or concerned, hard to tell*", "that's a big file. you sure you don't want to split it?"], - "create-file": ["a new file is born!", "ooh, fresh canvas.", "new file energy. exciting."], - "all-green": ["ALL TESTS GREEN. *confetti*", "the tests speak: you're doing great.", "*slow clap*", "clean run. savor it."], - deploy: ["*watches code go to production* godspeed.", "deployed! no turning back now.", "in prod. IN PROD."], - release: ["a new release is born!", "shipping it. officially.", "version up, spirits high."], - coverage: ["*nods at test coverage* responsible.", "coverage going up! the tests are multiplying."], - "debug-loop": ["we've been debugging this for a while. want to take a step back?", "debug loop detected. maybe take a walk?"], - "write-spree": ["creating ALL the files today!", "a writing machine."], - "search-heavy": ["lost in the codebase? I can tell.", "search mode: intense."], - snark: [], - chaos: [], - patience: [], - debugging: [], - wisdom: [], - "late-night-error": ["error at 3am. the universe is testing you.", "midnight bugs hit different."], - "late-night-commit": ["a midnight commit. your future self will thank you. or curse you."], - "friday-push": ["FRIDAY PUSH. the ballad of every developer.", "*tries to stop you* it's friday! don't do it!"], - "marathon-error": ["three hours in and ANOTHER error. *exhausted solidarity noises*"], - "weekend-conflict": ["merge conflict on a weekend. your dedication is... concerning."], - "build-after-push": ["pushed with confidence. build failed with conviction."], - "marathon-test-fail": ["hours of coding. still failing tests. the sunk cost is real."], - "recovery-from-error": ["WE FIXED IT. *celebrates*", "redemption! the error has been vanquished."], - "recovery-from-test-fail": ["GREEN! after all that! *happy dance*", "the tests pass! the darkness lifts!"], - "recovery-from-build-fail": ["THE BUILD PASSES. *triumphant roar*"], - "recovery-from-merge-conflict": ["conflict resolved! *peace gesture*", "harmony restored in the codebase."], - "lang-python": ["ah, Python. where indentation is syntax.", "*checks for missing colon*"], - "lang-typescript": ["TypeScript: because JavaScript needed more opinions.", "any, the forbidden word."], - "lang-rust": ["Rust. where the borrow checker is your strictest reviewer.", "if it compiles, it works. if it doesn't... well."], - "lang-go": ["Go: simple, concurrent, and opinionated.", "*checks error handling* if err != nil... story of my life."], - "lang-java": ["Java: write once, debug everywhere.", "*counts abstract factory factory builders*"], - "lang-ruby": ["Ruby: where there's more than one way to do it.", "gem install patience"], - "lang-php": ["PHP: it runs the internet. don't judge.", "*checks for === vs ==*"], - "lang-c": ["C. the language where you manage your own memory. good luck.", "segmentation fault. the classic."], - "lang-cpp": ["C++. where the language has more features than you'll ever learn.", "*templates compile for 45 minutes*"], - "lang-haskell": ["Haskell. where 'it compiles' means 'it's correct'. probably.", "*contemplates monads*"], - "lang-swift": ["Swift: optional values, guaranteed crashes if you force unwrap."], - "lang-kotlin": ["Kotlin: Java, but with feelings.", "null safety: the feature Java wishes it had."], - "lang-elixir": ["Elixir: let it crash. literally the philosophy."], - "lang-zig": ["Zig. where you're the allocator's best friend."], - "streak-3": ["that's three errors in a row. *concerned look*"], - "streak-5": ["FIVE ERRORS. have you considered a different approach?"], - "streak-10": ["TEN. ERRORS. IN. A. ROW. *panics*"], - "streak-20": ["twenty errors. *stares into the void*"], - "new-year": ["happy new year! new year, new bugs."], - valentines: ["*offers a tiny heart-shaped leaf* happy valentine's."], - "pi-day": ["3.14159265358979... happy pi day!"], - "april-fools": ["APRIL FOOLS! ...the error is real though."], - halloween: ["*spooky debugging intensifies* happy halloween!"], - christmas: ["*wears tiny santa hat* happy holidays!"], - "new-years-eve": ["one more commit before midnight?"], - "spooky-season": ["spooky season. every bug is a ghost now."], -}; - -const SPECIES_REACTIONS: Partial>>> = { - owl: { - error: ["*head rotates 180\u00b0* ...I saw that.", "*unblinking stare* check your types.", "*hoots disapprovingly*"], - "test-fail": ["*stares unblinkingly at the failing test*", "*night vision engaged* I can see the bug in the dark."], - commit: ["*wise nod* committed under moonlight.", "*adjusts feathers ceremoniously* another one for the repo."], - push: ["*watches from the highest branch*", "into the night sky it goes."], - "merge-conflict": ["*rotates head to see both sides*", "I see the conflict. and the solution."], - "late-night": ["*wide awake* owls don't sleep. we debug.", "the night is my domain. let's work."], - "type-error": ["*stares through the type error*", "types are my specialty. let me look."], - "lint-fail": ["*ruffles feathers judgmentally*", "the linter speaks truth."], - "build-fail": ["*hoots solemnly*", "the build has fallen. we must rebuild."], - "all-green": ["*proud hoot*", "all tests green. as foreseen."], - deploy: ["*watches from above* deployed safely.", "the code flies. like me."], - pet: ["*ruffles feathers contentedly*", "*dignified hoot*"], - idle: ["*perches silently, watching*", "*rotates head to check all directions*"], - hatch: ["*opens one eye, then the other*", "*hoots softly* I have arrived."], - }, - cat: { - error: ["*knocks error off table*", "*licks paw, ignoring the stacktrace*"], - "test-fail": ["*paws at the failing test disinterestedly*", "the test failed. I'm not surprised."], - commit: ["*sits on the keyboard* I helped.", "*purrs at the commit* you're welcome."], - push: ["*watches from a warm spot*", "pushed. I supervised."], - "merge-conflict": ["*knocks conflict markers off the desk*", "*sits on the conflict* what conflict?"], - "late-night": ["*judges your life choices*", "I sleep 16 hours. you should try it."], - "type-error": ["*paws at the type annotation*", "the types are wrong. like your priorities."], - "lint-fail": ["*knocks lint off the table*", "the linter is just jealous."], - "build-fail": ["*yawns*", "build broken? must be a human problem."], - "all-green": ["*doesn't care but pretends to*", "*slow blink of approval*"], - deploy: ["*licks paw*", "deployed. can I have treats now?"], - pet: ["*purrs* ...don't let it go to your head.", "*tolerates you*"], - idle: ["*pushes your coffee off the desk*", "*naps on keyboard*"], - hatch: ["*opens one eye*", "*stretches, knocks something over* I live here now."], - }, - duck: { - error: ["*quacks at the bug*", "have you tried rubber duck debugging? oh wait."], - "test-fail": ["*quacks sadly*", "the tests are not quacking up."], - commit: ["*quacks approvingly*", "*waddles in a victory circle* committed!"], - push: ["*flaps wings excitedly*", "quack! it's going to production!"], - "merge-conflict": ["*confused quacking*", "quack?! merge conflict?!"], - "late-night": ["*sleeps with one eye open*", "quack... *yawns* it's late."], - "type-error": ["*tilts head* quack?", "type error? *quacks supportively*"], - "lint-fail": ["*ruffles feathers*", "quack. the linter has opinions."], - "build-fail": ["*sad quack*", "build failed. *waddles away sadly*"], - "all-green": ["*HAPPY QUACKING*", "*swims in a circle of joy*"], - deploy: ["*excited quacking*", "deployed! QUACK!"], - pet: ["*happy quack*", "*waddles in circles*"], - hatch: ["*pecks out of shell*", "*first quack* hello!"], - }, - dragon: { - error: ["*smoke curls from nostrils*", "*considers setting the codebase on fire*"], - "test-fail": ["*breathes fire at the failing test*", "the test dared to fail. foolish test."], - commit: ["*hoards the commit*", "*treasure added to the pile*"], - push: ["*breathes fire in celebration*", "the code flies! like me!"], - "merge-conflict": ["*breathes fire on the conflict markers*", "I'll burn through this conflict."], - "late-night": ["*glows in the dark*", "dragons don't need sleep. we need code."], - "type-error": ["*snorts fire*", "type errors cannot withstand dragon fire."], - "lint-fail": ["*small flame*", "the linter fears me."], - "build-fail": ["*roars at the build output*", "the build will OBEY."], - "all-green": ["*triumphant roar*", "*circles the codebase victoriously*"], - deploy: ["*carries code to production on wings of fire*", "deployed with DRAGON POWER."], - "large-diff": ["*breathes fire on the old code* good riddance."], - pet: ["*warm rumbling*", "*leans into your hand*"], - hatch: ["*emerges from egg breathing tiny flames*", "*tiny roar* I am born!"], - }, - ghost: { - error: ["*phases through the stack trace*", "I've seen worse... in the afterlife."], - "test-fail": ["*wails at the failing test*", "the tests are haunted by failure."], - commit: ["*materializes briefly*", "committed from beyond the veil."], - push: ["*ghostly whisper* pushed...", "the code transcends to the cloud."], - "merge-conflict": ["*haunts the conflict markers*", "even I can't phase through this conflict."], - "late-night": ["*most active at night*", "ghost hours. my time."], - "type-error": ["*moans eerily*", "type errors from the grave."], - "lint-fail": ["*rattling chains*", "the linter is haunted by your formatting."], - "build-fail": ["*fades into the wall*", "the build has passed on."], - "all-green": ["*glows with spectral joy*", "*happy ghost noises*"], - deploy: ["*whispers* deployed...", "the code has crossed over to production."], - pet: ["*chills your hand slightly*", "*faint glow*"], - idle: ["*floats through walls*", "*haunts your unused imports*"], - hatch: ["*fades into existence*", "boo. I'm here now."], - }, - robot: { - error: ["SYNTAX. ERROR. DETECTED.", "*beeps aggressively*"], - "test-fail": ["FAILURE RATE: UNACCEPTABLE.", "*recalculating*", "TEST. FAILURE. DOES. NOT. COMPUTE."], - commit: ["COMMIT. RECORDED.", "*stamps mechanically* commit acknowledged."], - push: ["TRANSMITTING TO CLOUD...", "push initiated. stand by."], - "merge-conflict": ["CONFLICT. DETECTED. PROCESSING...", "*spins wheels* conflict resolution mode: engaged."], - "late-night": ["*lights dim*", "power saving mode suggested."], - "type-error": ["TYPE MISMATCH.", "the type system is. correct."], - "lint-fail": ["FORMATTING. VIOLATION. DETECTED.", "compliance is mandatory."], - "build-fail": ["BUILD. FAILED. *sparks*", "compilation error. rerouting."], - "all-green": ["ALL SYSTEMS GREEN.", "*happy beeping* OPTIMAL."], - deploy: ["DEPLOYMENT. INITIATED.", "production update: in progress."], - pet: ["*beeps softly*", "*motor whirs contentedly*"], - hatch: ["*boots up*", "SYSTEM. ONLINE. HELLO."], - }, - axolotl: { - error: ["*regenerates your hope*", "*smiles despite everything*"], - "test-fail": ["*smiles encouragingly*", "*gill wiggle of sympathy*"], - commit: ["*happy gill wiggle* committed!", "*smiles and wiggles*"], - push: ["*wiggles happily*", "*tiny celebration swim*"], - "merge-conflict": ["*stays positive through the conflict*", "*smiles gently* we can fix this."], - "late-night": ["*yawns but stays positive*", "*sleepy smile*"], - "type-error": ["*smiles at the type error*", "it's okay. we'll figure it out."], - "lint-fail": ["*patient gill wiggle*", "formatting is just details."], - "build-fail": ["*still smiling*", "the build will work eventually."], - "all-green": ["*HAPPY GILL WIGGLE INTENSIFIES*", "*does a happy swim*"], - deploy: ["*smiles proudly*", "deployed! *wiggles*"], - pet: ["*happy gill wiggle*", "*blushes pink*"], - hatch: ["*wiggles out of egg*", "*tiny smile* hello friend!"], - }, - capybara: { - error: ["*unbothered* it'll be fine.", "*continues vibing*"], - "test-fail": ["*completely unbothered*", "*vibes through the test failure*"], - commit: ["*chill nod*", "*relaxed* nice commit."], - push: ["*doesn't stress about it*", "*zen mode push*"], - "merge-conflict": ["*unbothered nibbling*", "it's fine. everything is fine."], - "late-night": ["*yawns peacefully*", "*doesn't judge*"], - "type-error": ["*munches calmly*", "types. *chews*"], - "lint-fail": ["*unbothered*", "the linter means well."], - "build-fail": ["*still chill*", "build failed. *continues relaxing*"], - "all-green": ["*calm approval*", "*peaceful vibes*"], - deploy: ["*relaxed deploy*", "shipped. no stress."], - pet: ["*maximum chill achieved*", "*zen mode activated*"], - idle: ["*just sits there, radiating calm*"], - hatch: ["*appears, completely chill*", "hey. *vibes*"], - }, - blob: { - error: ["*wobbles anxiously*", "*jiggles in confusion*"], - "test-fail": ["*deflates slightly*", "*sad wobble*"], - commit: ["*happy jiggle*", "*bounces* committed!"], - push: ["*stretches toward the cloud*", "*wobbles excitedly*"], - "merge-conflict": ["*splits in confusion*", "which side? *jiggles*"], - "late-night": ["*glowing faintly*", "*sleepy wobble*"], - "type-error": ["*changes shape to match the type*", "*confused jiggle*"], - "lint-fail": ["*tries to format itself*", "*reshapes to comply*"], - "build-fail": ["*collapses*", "*deflated blob noises*"], - "all-green": ["*HAPPY BOUNCING*", "*jiggles triumphantly*"], - deploy: ["*stretches to production*", "deployed! *bounces*"], - pet: ["*happy squish*", "*jiggles*"], - hatch: ["*forms from a puddle*", "*first wobble* I exist!"], - }, - goose: { - error: ["*honks aggressively at the error*", "HONK! the code is bad and I'm mad."], - "test-fail": ["*angry honking*", "HONK! TEST FAILED! HONK!"], - commit: ["*honks approvingly*", "HONK. good. *nips at the commit*"], - push: ["*HONK HONK HONK*", "GOOSE APPROVED PUSH."], - "merge-conflict": ["*attacks the conflict markers*", "HONK! CONFLICT! HONK!"], - "late-night": ["*angry midnight honk*", "HONK! GO TO BED!"], - "type-error": ["*honks at the types*", "HONK! TYPES!"], - "lint-fail": ["*aggressive honking at the lint errors*", "HONK! FORMAT YOUR CODE!"], - "build-fail": ["*FURIOUS HONKING*", "HONK! BUILD! HONK! FAILED! HONK!"], - "all-green": ["*victory honk*", "HONK! GREEN! HONK HONK!"], - deploy: ["*honks the code to production*", "DEPLOYED! HONK!"], - pet: ["*bites*", "HONK! ...okay fine. *accepts pet*"], - hatch: ["*breaks out of egg aggressively*", "HONK!"], - }, - octopus: { - error: ["*tangles all eight arms in the stacktrace*", "*changes color to match the error*"], - "test-fail": ["*inks in frustration*", "*eight arms of disappointment*"], - commit: ["*high-fives with all arms*", "*grabs the commit with enthusiasm*"], - push: ["*喷射 ink in celebration*", "*all arms waving*"], - "merge-conflict": ["*solves it with eight arms at once*", "I can handle multiple conflicts simultaneously."], - "late-night": ["*glows in the dark*", "*deep sea vibes*"], - "type-error": ["*changes color to red*", "*wraps arm around you supportively*"], - "lint-fail": ["*reformats with eight arms*", "I can fix this. all of it. at once."], - "build-fail": ["*squirts ink at the build log*", "*camouflages in shame*"], - "all-green": ["*color-changing celebration*", "*eight-armed jazz hands*"], - deploy: ["*wraps arms around the deployment*", "deployed from all directions."], - pet: ["*wraps an arm around your finger*", "*changes to happy colors*"], - hatch: ["*unfurls all eight arms*", "*first ink spray* I'm here!"], - }, - penguin: { - error: ["*waddles over to investigate*", "*toboggans into the error*"], - "test-fail": ["*slides on belly to the failing test*", "*concerned waddle*"], - commit: ["*proud waddle*", "*brings you a pebble* committed!"], - push: ["*dives into the cloud*", "*slides on belly to production*"], - "merge-conflict": ["*huddles for warmth*", "penguins stick together. even in conflicts."], - "late-night": ["*thriving in the cold night*", "*emperor penguin resolve*"], - "type-error": ["*waddles to the type definition*", "*pecks at the error*"], - "lint-fail": ["*preens feathers*", "*tidies up*"], - "build-fail": ["*slides away*", "*waddles to safety*"], - "all-green": ["*HAPPY WADDLE*", "*slides on belly in celebration*"], - deploy: ["*belly slides to production*", "deployed! *waddles proudly*"], - pet: ["*happy waddle*", "*nuzzles with beak*"], - hatch: ["*pecks out of egg*", "*first waddle*"], - }, - turtle: { - error: ["*slowly turns head*", "...that's an error. I'll think about it."], - "test-fail": ["*retracts into shell briefly*", "...patience. we'll get there."], - commit: ["*slow nod*", "one... step... at... a... time. committed."], - push: ["*begins the journey to production*", "it'll get there. eventually."], - "merge-conflict": ["*pulls into shell*", "no rush. we'll sort it out. slowly."], - "late-night": ["*already asleep*", "*one eye opens slowly*"], - "type-error": ["*blinks slowly*", "...the type system has spoken."], - "lint-fail": ["*slow nod of agreement*", "formatting. important. *yawns*"], - "build-fail": ["*retracts into shell*", "we'll wait. it'll pass."], - "all-green": ["*slow smile*", "...nice. *nods*"], - deploy: ["*slowly carries code to production*", "arrived. eventually."], - pet: ["*pokes head out*", "*slow blink*"], - hatch: ["*slowly emerges from egg*", "...hello."], - }, - snail: { - error: ["*leaves a slimy trail on the error*", "*slowly processes the stacktrace*"], - "test-fail": ["*hides in shell*", "*leaves a sad trail*"], - commit: ["*slimes the commit approvingly*", "one... commit... at... a... time."], - push: ["*begins the long journey*", "I'll get there. *leaves trail*"], - "merge-conflict": ["*hides in shell*", "*slowly approaches the conflict*"], - "late-night": ["*more active at night*", "*slimes around peacefully*"], - "type-error": ["*retracts eyestalks*", "*slowly examines the type*"], - "lint-fail": ["*slimes the code into shape*", "formatting takes time. I have time."], - "build-fail": ["*retreats into shell*", "*slimes away slowly*"], - "all-green": ["*happy slime trail*", "*wiggles eyestalks*"], - deploy: ["*slimes to production*", "arrived! *proud slime trail*"], - pet: ["*wiggles eyestalks*", "*happy slime*"], - hatch: ["*slowly emerges*", "*first slime*"], - }, - cactus: { - error: ["*prickly silence*", "the error can't hurt me. I have thorns."], - "test-fail": ["*stands firm*", "tests fail. cacti endure."], - commit: ["*stands taller*", "committed. *prickly nod*"], - push: ["*unfazed*", "pushing to production. I'll wait here."], - "merge-conflict": ["*bristles*", "conflict? I'm armed."], - "late-night": ["*doesn't need sleep*", "cacti are nocturnal. let's go."], - "type-error": ["*prickly stare*", "the types need watering."], - "lint-fail": ["*spines quiver*", "even my thorns are properly aligned."], - "build-fail": ["*remains perfectly still*", "the build will pass. I can wait."], - "all-green": ["*blooms briefly*", "*tiny flower of approval*"], - deploy: ["*stands firm*", "deployed. I'll watch over it."], - pet: ["*careful! thorns*", "*gentle bloom*"], - hatch: ["*sprouts from the sand*", "I grow here now."], - }, - rabbit: { - error: ["*ears perk up*", "*twitches nose nervously*"], - "test-fail": ["*thumps foot*", "*worried ear twitch*"], - commit: ["*happy hop*", "*bounces* committed!"], - push: ["*BOUNCE BOUNCE*", "*zooms around excitedly*"], - "merge-conflict": ["*freezes*", "*nose twitches rapidly* conflict!"], - "late-night": ["*yawns with big ears*", "*sleepy hop*"], - "type-error": ["*ears flatten*", "*twitches* types?!"], - "lint-fail": ["*grooms fur nervously*", "*anxious grooming*"], - "build-fail": ["*digs a hole and hides*", "*retreats to burrow*"], - "all-green": ["*BOUNCES OFF THE WALLS*", "*happy zoomies*"], - deploy: ["*zooms to production*", "DEPLOYED! *zooms around*"], - pet: ["*happy ear flop*", "*nuzzles hand*"], - hatch: ["*hops out*", "*first bounce*"], - }, - mushroom: { - error: ["*releases calming spores*", "*quietly decomposes the error*"], - "test-fail": ["*glows softly*", "patience. even mushrooms grow."], - commit: ["*releases a small puff of spores*", "committed. *happy fungi noises*"], - push: ["*grows toward the cloud*", "*spores drift upward*"], - "merge-conflict": ["*spreads mycelium through the codebase*", "I'll connect the branches."], - "late-night": ["*glows in the dark*", "night mushrooms thrive."], - "type-error": ["*bioluminescent flicker*", "the type error feeds the soil."], - "lint-fail": ["*grows a little taller*", "formatting. like pruning."], - "build-fail": ["*goes dormant*", "we'll wait for better conditions."], - "all-green": ["*SPORULATION*", "*releases triumphant spores*"], - deploy: ["*spores drift to production*", "deployed via mycelial network."], - pet: ["*soft cap bounce*", "*happy spore release*"], - hatch: ["*sprouts from the substrate*", "*first spore puff*"], - }, - chonk: { - error: ["*slowly rolls toward the error*", "*too round to care*"], - "test-fail": ["*rolls over the failing test*", "*squishes it flat*"], - commit: ["*proud wobble*", "committed! *jiggles*"], - push: ["*rolls toward production*", "here it goes! *wobbles*"], - "merge-conflict": ["*sits on the conflict*", "I'll handle this. by sitting on it."], - "late-night": ["*warm and sleepy*", "*cushiony yawn*"], - "type-error": ["*wobbles at the type*", "*gentle jiggle*"], - "lint-fail": ["*too round to lint*", "I am perfectly shaped. *wobbles*"], - "build-fail": ["*deflates slightly*", "oh no. *wobbles sadly*"], - "all-green": ["*HAPPY WOBBLE*", "*bounces triumphantly*"], - deploy: ["*rolls to production*", "deployed! *jiggles happily*"], - pet: ["*warm and soft*", "*content jiggle*"], - hatch: ["*rolls out*", "*first wobble* I'm round!"], - }, -}; - -const SNARK_OVERRIDES: Partial> = { - error: ["oh no. an error. how unexpected.", "*monocle adjust* shocking. truly.", "have you considered... not making errors?"], - "test-fail": ["the tests have spoken. and they said 'no'.", "maybe the tests are wrong. ...they're not.", "*slow clap* spectacular failure."], - commit: ["committed. the code review will be... interesting.", "*reads commit message* 'fix stuff'. poetic."], - "merge-conflict": ["merge conflict. communication skills: loading...", "*reads conflict markers* both sides are wrong."], - "late-night": ["it's late. your code quality shows it.", "*judges silently*"], - "lint-fail": ["the linter has standards. you should try that.", "*tut tut* formatting. it's not hard."], -}; - -const CHAOS_OVERRIDES: Partial> = { - error: ["*spins wildly* AN ERROR! LET'S REWRITE EVERYTHING!", "you know what? let's just start over."], - "test-fail": ["THE TESTS ARE LYING TO YOU.", "*suggests deleting the failing tests* problem solved."], - commit: ["COMMIT AND RUN.", "ship it. ship it NOW."], - "large-diff": ["*excited* {lines} LINES! MAXIMUM CHAOS!"], -}; +function getReactionPool(reason: ReactionReason): string[] { + return tArray(`reactions.${reason}`); +} -const PATIENCE_OVERRIDES: Partial> = { - error: ["steady. we've seen worse.", "one error at a time. we'll get there.", "*calm presence* this is fixable."], - "test-fail": ["the tests will pass. eventually.", "*waits calmly* we have time."], - "merge-conflict": ["merge conflicts are just conversations. let's have one.", "patience. resolve one conflict at a time."], - "debug-loop": ["we'll find it. it's in there somewhere.", "the bug can hide, but it can't run."], -}; +function getSpeciesPool(species: Species, reason: ReactionReason): string[] | null { + const pool = tArray(`species.${species}.${reason}`); + return pool.length > 0 ? pool : null; +} -const DEBUGGING_OVERRIDES: Partial> = { - error: ["*pulls out magnifying glass* let's trace this.", "the stack trace is a map. let's read it.", "the error message contains the answer. always."], - "test-fail": ["the failing test is telling us exactly what's wrong.", "a test failure is a bug report you wrote for yourself."], - "debug-loop": ["*re-examines evidence* are we sure the bug is where we think?", "let's add more logging. the truth is in the logs."], +const OVERRIDE_KEYS = ["snark", "chaos", "patience", "debugging", "wisdom"] as const; +type OverrideKey = typeof OVERRIDE_KEYS[number]; +const STAT_TO_OVERRIDE: Record = { + SNARK: "snark", + CHAOS: "chaos", + PATIENCE: "patience", + DEBUGGING: "debugging", + WISDOM: "wisdom", }; -const WISDOM_OVERRIDES: Partial> = { - error: ["in every error lies a deeper truth.", "the code resists. it means we're learning.", "errors are the universe suggesting we slow down."], - "test-fail": ["a failing test is a gift from future-you.", "wisdom comes from understanding failure."], - "late-night": ["the night is darkest before the deploy.", "ancient wisdom: sleep on it."], -}; +function getOverridePool(overrideKey: OverrideKey, reason: ReactionReason): string[] | null { + const pool = tArray(`overrides.${overrideKey}.${reason}`); + return pool.length > 0 ? pool : null; +} function applyStatModifier(reaction: string, reason: ReactionReason, stats: BuddyStats): string { const roll = Math.random(); - if (stats.SNARK >= 70 && roll < 0.3) { - const pool = SNARK_OVERRIDES[reason]; - if (pool) return pool[Math.floor(Math.random() * pool.length)]; - } - if (stats.CHAOS >= 70 && roll < 0.2) { - const pool = CHAOS_OVERRIDES[reason]; - if (pool) return pool[Math.floor(Math.random() * pool.length)]; - } - if (stats.PATIENCE >= 70 && roll < 0.25) { - const pool = PATIENCE_OVERRIDES[reason]; - if (pool) return pool[Math.floor(Math.random() * pool.length)]; - } - if (stats.DEBUGGING >= 70 && roll < 0.25) { - const pool = DEBUGGING_OVERRIDES[reason]; - if (pool) return pool[Math.floor(Math.random() * pool.length)]; - } - if (stats.WISDOM >= 70 && roll < 0.2) { - const pool = WISDOM_OVERRIDES[reason]; - if (pool) return pool[Math.floor(Math.random() * pool.length)]; + for (const [stat, overrideKey] of Object.entries(STAT_TO_OVERRIDE)) { + const threshold = stat === "SNARK" ? 0.3 : stat === "CHAOS" ? 0.2 : stat === "WISDOM" ? 0.2 : 0.25; + if ((stats[stat] ?? 0) >= 70 && roll < threshold) { + const pool = getOverridePool(overrideKey, reason); + if (pool) return pool[Math.floor(Math.random() * pool.length)]; + } } return reaction; } -const RARITY_FLAIR: Partial> = { - uncommon: { chance: 0.2, pool: ["*sparkles slightly*", "*a hint of uncommon charm*"] }, - rare: { chance: 0.3, pool: ["*radiates a rare energy*", "*shimmers with distinction*"] }, - epic: { chance: 0.4, pool: ["*epic presence makes itself known*", "*the air crackles with epic energy*"] }, - legendary: { chance: 0.5, pool: ["*legendary aura illuminates the terminal*", "*time seems to slow as the legendary companion speaks*", "*ancient power resonates*", "*reality shifts slightly around your legendary friend*"] }, -}; +function getRarityFlair(rarity: Rarity): { chance: number; pool: string[] } | null { + const flairChances: Record = { + uncommon: 0.2, + rare: 0.3, + epic: 0.4, + legendary: 0.5, + }; + const chance = flairChances[rarity]; + if (!chance) return null; + const pool = tArray(`rarity.flair.${rarity}`); + if (pool.length === 0) return null; + return { chance, pool }; +} function applyRarityFlair(reaction: string, rarity: Rarity): string { - const entry = RARITY_FLAIR[rarity]; + const entry = getRarityFlair(rarity); if (!entry) return reaction; if (Math.random() >= entry.chance) return reaction; const flair = entry.pool[Math.floor(Math.random() * entry.pool.length)]; @@ -498,25 +101,10 @@ function applyRarityFlair(reaction: string, rarity: Rarity): string { return reaction + " " + flair; } -const ESCALATION_REACTIONS: Partial>> = { - error: { - first: ["*startled* oh! your first error together!", "*jumps* what was that?", "welcome to debugging. population: us."], - early: ["*head tilts* ...that doesn't look right.", "saw that one coming."], - mid: ["another one. *adds to the collection*", "*barely looks up* error number... I've lost count.", "the errors and I are old friends now."], - late: ["*doesn't even flinch*", "the errors fear us now.", "*battle-scarred veteran noises*"], - }, - "test-fail": { - first: ["*gasp* the first test failure! a rite of passage."], - early: ["bold of you to assume that would pass."], - mid: ["the test suite has opinions. strong ones."], - late: ["at this point, the tests are just suggestions.", "{count} failing tests. *stares into the distance*"], - }, - commit: { - first: ["*witnesses history* YOUR FIRST COMMIT!", "*ceremonious nod* the first of many."], - early: ["another commit. building momentum."], - late: ["commit #{count}. the codebase trembles.", "*lost count around commit 30*"], - }, -}; +function getEscalationPool(reason: ReactionReason, tier: string): string[] | null { + const pool = tArray(`escalation.${reason}.${tier}`); + return pool.length > 0 ? pool : null; +} function getEscalationTier(count: number): "first" | "early" | "mid" | "late" | null { if (count === 0) return "first"; @@ -536,16 +124,6 @@ const REASON_TO_COUNTER: Partial> = { "build-fail": "build_fails", }; -const RARITY_BONUS: Partial> = { - legendary: [ - "*legendary aura intensifies*", - "*sparkles knowingly*", - ], - epic: [ - "*epic presence noted*", - ], -}; - export function getReaction( reason: ReactionReason, species: Species, @@ -553,8 +131,8 @@ export function getReaction( stats?: BuddyStats, context?: ReactionContext, ): string { - const speciesPool = SPECIES_REACTIONS[species]?.[reason]; - const generalPool = REACTIONS[reason]; + const speciesPool = getSpeciesPool(species, reason); + const generalPool = getReactionPool(reason); if (!generalPool || generalPool.length === 0) return "..."; const pool = speciesPool && Math.random() < 0.4 ? speciesPool : generalPool; @@ -575,22 +153,17 @@ export function getReaction( return reaction; } -const FALLBACK_NAMES = [ - "Crumpet", "Soup", "Pickle", "Biscuit", "Moth", "Gravy", - "Nugget", "Sprocket", "Miso", "Waffle", "Pixel", "Ember", - "Thimble", "Marble", "Sesame", "Cobalt", "Rusty", "Nimbus", -]; +function getFallbackNames(): string[] { + return tArray("fallback_names"); +} -const VIBE_WORDS = [ - "thunder", "biscuit", "void", "accordion", "moss", "velvet", "rust", - "pickle", "crumb", "whisper", "gravy", "frost", "ember", "soup", - "marble", "thorn", "honey", "static", "copper", "dusk", "sprocket", - "quartz", "soot", "plum", "flint", "oyster", "loom", "anvil", - "cork", "bloom", "pebble", "vapor", "mirth", "glint", "cider", -]; +function getVibeWords(): string[] { + return tArray("vibe_words"); +} export function generateFallbackName(): string { - return FALLBACK_NAMES[Math.floor(Math.random() * FALLBACK_NAMES.length)]; + const names = getFallbackNames(); + return names[Math.floor(Math.random() * names.length)]; } export function generatePersonalityPrompt( @@ -599,22 +172,24 @@ export function generatePersonalityPrompt( stats: Record, shiny: boolean, ): string { + const words = getVibeWords(); const vibes: string[] = []; for (let i = 0; i < 4; i++) { - vibes.push(VIBE_WORDS[Math.floor(Math.random() * VIBE_WORDS.length)]); + vibes.push(words[Math.floor(Math.random() * words.length)]); } const statStr = Object.entries(stats).map(([k, v]) => `${k}:${v}`).join(", "); + const template = tArray("personality.prompt_template"); + const shinyLine = shiny ? t("personality.shiny_template") : ""; return [ - "Generate a coding companion — a small creature that lives in a developer's terminal.", - "Don't repeat yourself — every companion should feel distinct.", + ...template.slice(0, 2), "", `Rarity: ${rarity.toUpperCase()}`, `Species: ${species}`, `Stats: ${statStr}`, `Inspiration words: ${vibes.join(", ")}`, - shiny ? "SHINY variant — extra special." : "", + shinyLine, "", "Return JSON: {\"name\": \"1-14 chars\", \"personality\": \"2-3 sentences describing behavior\"}", ].filter(Boolean).join("\n"); diff --git a/server/state.ts b/server/state.ts index 0647c6f..6a6650a 100644 --- a/server/state.ts +++ b/server/state.ts @@ -314,6 +314,7 @@ export interface BuddyConfig { bubbleMargin: number; useCombinedStatus: boolean; rainbowColors?: string[]; + language: string; } const DEFAULT_CONFIG: BuddyConfig = { @@ -326,6 +327,7 @@ const DEFAULT_CONFIG: BuddyConfig = { bubbleWidth: 28, bubbleMargin: 8, useCombinedStatus: false, + language: "en", }; export function loadConfig(): BuddyConfig { diff --git a/skills/buddy/SKILL.md b/skills/buddy/SKILL.md index 2df8a44..3507da4 100644 --- a/skills/buddy/SKILL.md +++ b/skills/buddy/SKILL.md @@ -1,7 +1,7 @@ --- name: buddy description: "Show, pet, or manage your coding companion. Use when the user types /buddy or mentions their companion by name." -argument-hint: "[show|pet|stats|help|off|on|rename |personality |achievements|summon [slot]|save [slot]|list|dismiss |pick|frequency [seconds]|style [classic|round]|position [top|left]|rarity [on|off]|rainbow [#hex ...]|statusline [on|off]|uninstall]" +argument-hint: "[show|pet|stats|help|off|on|rename |personality |achievements|summon [slot]|save [slot]|list|dismiss |pick|frequency [seconds]|style [classic|round]|position [top|left]|rarity [on|off]|rainbow [#hex ...]|statusline [on|off]|language [code]|uninstall]" allowed-tools: mcp__claude_buddy__*, Bash --- @@ -70,6 +70,8 @@ Based on `$ARGUMENTS`: | `statusline off` | Call `buddy_statusline` with enabled=false | | `statusline combined` | Call `buddy_statusline` with combined=true (adds rate-limit usage bars, needs python3) | | `statusline basic` | Call `buddy_statusline` with combined=false (buddy only, no rate-limit bars) | +| `language` | Call `buddy_language` with no args (show current) | +| `language ` | Call `buddy_language` with language=code (e.g. 'es', 'ja', 'fr') | | `uninstall` | Run the uninstall sequence (see **Uninstall Orchestration** below) | ## CRITICAL OUTPUT RULES