Nova: پلتفرم داخلی Dropbox برای ایجنتهای کدنویسی
خلاصهٔ کاملتر
دراپباکس توی یه پست وبلاگی توضیح داده که چرا بهجای ابزارهای آفشلف یا راهحلهای تکمنظوره، یه پلتفرم مرکزی برای ایجنتهای کدنویسی ساخته. مهندسهای دراپباکس علاوه بر نوشتن کد، کارهایی مثل رفع خطاهای CI، مدیریت مهاجرتها، و بررسی تستهای ناپایدار (flaky tests) رو هم انجام میدن — کارهایی که تکراریان و تمرکز رو از کارهای عمیقتر میگیرن. ابزارهای خارجی هم با ساختار monorepo بزرگ دراپباکس و زیرساخت Bazel سازگار نبودن.
Nova یه سرویس ابری داخلیه که هر session رو در یه محیط ایزوله با یه snapshot از codebase اجرا میکنه. کاربر یه task میده، میتونه دستورهای validation هم اضافه کنه، و اگه validation شکست بخوره — مثلاً تستی پاس نشه — Nova نتایج رو به ایجنت برمیگردونه و میخواد مشکل رو رفع کنه. این حلقه تا وقتی که تغییر تأیید بشه یا به سقف تلاشها برسه ادامه پیدا میکنه.
یه نمونه ساختار درخواست به Nova اینطوریه:
{
"repo_commit": "<commit-sha>",
"task": "Investigate this CI failure and propose a fix",
"validation_commands": [
"bazel test //path/to:test_target"
],
"continue_on_validation_failure": true,
"max_iterations": 5,
"push_branch": "ai/nova/ci-fix"
}از موفقترین use caseها، ابزار Deflaker برای رفع flaky test هاست. این ابزار نمونههای pass و fail یه تست رو پیدا میکنه، لاگها رو به Nova میفرسته، و ایجنت یه فیکس پیشنهاد میده. فیکس پیشنهادی بعد با اجرای ۱۰۰ بار یا بیشتر تست در CI اعتبارسنجی میشه. اگه تست دوباره ناپایدار باشه، لاگهای جدید با یادداشتهای دوره قبل ترکیب میشن و دور بعدی شروع میشه — تا پنج بار.
Nova برای مهاجرتهای کد هم بهکار میره؛ مثل تبدیل تستهای Enzyme به React Testing Library یا بهروزرسانی تنظیمات mypy. قبلاً یه سیستم جداگانه مبتنی بر Goose این کار رو میکرد، اما تعاملی نبود و شکستها رو نمیشد ریکاور کرد. حالا همه این workflow ها روی Nova اجرا میشن و از session های تعاملی، guardrail های مشترک، و tooling قابل استفاده مجدد بهره میبرن. Nova با RenovateBot هم یکپارچه شده تا ایجنتها بتونن اولین پاس رفع خرابیهای ناشی از بهروزرسانی dependency ها رو بزنن.
یه درس مهمی که تیم دراپباکس گرفته اینه که ارزش واقعی ایجنتها به اندازه خود تولید کد، به پلتفرم اطرافشون بستگی داره. همچنین تأکید میکنن که نباید همه چیز رو داخل حلقه ایجنت گذاشت — برای مثال، trigger کردن CI باید بهصورت دترمینیستیک توسط سیستمهای اطراف انجام بشه، نه توسط خود ایجنت.
نکات کلیدی:
- Nova یه پلتفرم مرکزی داخلیه، نه یه ابزار تکمنظوره
- هر session در محیط ایزوله با snapshot واقعی از codebase اجرا میشه
- حلقه propose → validate → retry ایجنت رو به محیط واقعی build و test گره میزنه
- Deflaker برای flaky test ها و یکپارچگی با RenovateBot برای dependency upgrade ها از use caseهای موفقه
- تصمیمات طراحی مثل محدود کردن هر session به یه branch، workflow رو قابل پیشبینی و قابل اتوماسیون نگه میداره




