عملاً میشه از agentی استفاده کرد که performanceاش به agentهای گرون نزدیکه، با هزینهای که نزدیک به صفره. این ترکیب رو امتحان کردم و کار میکنه.
skill ها: چیزی که واقعاً ارزش داره
یه چیز که در عمل خیلی کاربرد داشت، سیستم skill هست — نه اون چیزی که agent خودش میسازه، بلکه skill هایی که خودت با Claude میسازی و بهش میدی. میتونی یه workflow پیچیده رو یه بار بهدرستی توصیف کنی، بذاریش توی یه skill، و بعد هر بار که Hermes به اون task میرسه، از همون توصیف استفاده کنه. اینطوری دیگه لازم نیست هر بار از اول توضیح بدی.
چیزی که کشف کردم: sudo ندید
یه هشدار جدی: دسترسی sudo بهش ندید.
نه بهخاطر اینکه مشکل امنیتی عجیبی داره — بلکه چون agent وقتی روی یه task پیچیده کار میکنه، ممکنه اشتباه کنه. و اگه sudo داشته باشه، اشتباهش میتونه جبرانناپذیر باشه. از تجربهی مستقیم: یه دیتابیس محلی پاک شد. بعیدترین اتفاق ممکن بود ولی افتاد.
Tier 1 — Subscription: اشتراکهایی که از قبل داری. Claude Code، OpenAI Codex، GitHub Copilot، Cursor. اگه اشتراک داری، 9Router اول از اینها استفاده میکنه.
Tier 2 — Cheap: مدلهایی که API key میخوان ولی ارزونن. GLM به ازای هر میلیون توکن ۰.۶۰ دلار، MiniMax M2.7 به ازای هر میلیون توکن ۰.۲۰ دلار، Kimi با ۹ دلار در ماه. وقتی Tier 1 تموم شد، اینجا میاد.
Tier 3 — FREE: iFlow، Qwen، Kiro، OpenCode. کاملاً رایگان و بدون محدودیت ثابت. آخرین سنگر.
وقتی quota یه provider در Tier 1 تموم میشه، 9Router خودکار به Tier 2 میره. وقتی Tier 2 هم تموم شد، به Tier 3 میره. از نظر tool تو — Cursor، Cline، Claude Code — هیچ اتفاقی نیفتاده. همون endpoint جواب میده.
نصب و راهاندازی
npm install -g 9router
9router
همین. یه dashboard محلی باز میشه که میتونی providerها رو اضافه کنی — OAuth برای اشتراکها، API key برای بقیه. بعد هر tool ای که داری رو به این endpoint اشاره بده:
GET برای درخواستهای read-only ایدهآله، ولی یه محدودیت بزرگ دارد: همه چیز باید توی URL باشد. برای یه فیلتر ساده مثل ?city=Berlin&limit=50 کافیه، ولی وقتی query پیچیده میشود — مثلاً یه فیلتر تو در تو با چند شرط، یا یه کوئری SQL کامل — URL به سرعت به جایی میرسد که دیگر نمیتوان باهاش کار کرد. RFC 9110 فقط توصیه میکند که پیادهسازیها حداقل ۸۰۰۰ بایت URI را پشتیبانی کنند، و این یه کف است، نه یه تضمین. محدودیت واقعی را وقتی کشف میکنی که پشت یه پراکسی یا لود بالانسر قدیمی هستی — و test suiteات آن را نشان نمیدهد.
POST هم یه راهحل دیگر بود، ولی از نظر پروتکل HTTP مشکل داشت.POST نه safe هست و نه idempotent. وقتی connection وسط درخواست قطع میشود، نه client نه هیچ پراکسیای نمیتواند بداند که آیا state روی سرور عوض شده یا نه. در نتیجه هیچچیزی بهطور خودکار retry نمیکنه. علاوه بر این، cache هم برای POST کار نمیکند — هر بار باید به origin برگردد.
یه مشکل ظریفتر هم بود که کمتر بهش توجه میشد: URL ها leak میکنند. request URIها بیشتر از request body توی logها ثبت میشوند. اگه query ات اطلاعات حساسی دارد، الان توی هر access log در طول مسیر است.
QUERY چطور این مشکلها رو حل میکنه
QUERY دقیقاً همان چیزی است که GET و POST هیچکدام نبودند: یه درخواست safe، idempotent و cacheable که بدنه هم دارد.
نه یه display server، بلکه یه protocol: این نکته مهمه. Wayland خودش یه نرمافزار نیست — یه spec هست. GNOME با Mutter، KDE با KWin، Hyprland، Sway — هر کدوم پیادهسازی جدا دارن. این یعنی تجربهی Wayland از یه compositor به compositor دیگه میتونه فرق کنه.
وضعیت واقعی ۲۰۲۶
اگه از GNOME یا KDE Plasma استفاده میکنی، Wayland الان default هست و برای اکثر کارها بدون دردسر کار میکنه. طبق یه survey از ۳۹۲۳ کاربر Arch در ژانویه ۲۰۲۵، ۸۰ درصد روی Wayland بودن. GNOME از نسخهی ۴۹ (۲۰۲۵) X11 session رو کاملاً حذف کرده. KDE Plasma 6.8 که اواخر ۲۰۲۶ یا ۲۰۲۷ میاد هم همین کار رو خواهد کرد.
NVIDIA که قبلاً مشکلسازترین قسمت بود، با driver series 495+ وضعش خیلی بهتر شده. اکثر کاربران NVIDIA الان میتونن Wayland رو بدون دردسر زیادی اجرا کنن — ولی اگه GPU قدیمیه (GTX 1000 series و قدیمیتر)، ممکنه همچنان مشکل داشته باشی.
چه کسی نباید عجله کنه
Wayland برای همه مناسب نیست — حداقل نه الان:
اگه از SSH X forwarding (ssh -X یا ssh -Y) برای باز کردن GUI برنامههای remote استفاده میکنی، Wayland این رو natively پشتیبانی نمیکنه. باید از راهحلهای دیگه مثل RDP یا VNC استفاده کنی.
اگه از ابزارهای automation روی desktop استفاده میکنی — xdotool، wmctrl، AutoKey — اینا روی Wayland کار نمیکنن چون Wayland به appها اجازه نمیده ورودی سیستمیک simulate کنن.
اگه از window manager های سبک مثل i3، openbox، یا fluxbox استفاده میکنی، نسخههای Wayland بعضیهاشون بالغ نیستن. Sway جایگزین i3 روی Wayland هست، ولی feature parity کامل نداره.
اگه از VNC برای remote desktop استفاده میکنی، X11 network transparency همچنان این use case رو راحتتر میکنه.
setup چقدر سخته
برای کاربر معمولی با GNOME یا KDE، عملاً هیچ setup ای لازم نیست — چون اگه لینوکس مدرن نصب کردی، احتمالاً از قبل روی Wayland هستی. چک کردنش سادهست:
echo $XDG_SESSION_TYPE # باید "wayland" برگردونه
اگه X11 هست و میخوای Wayland امتحان کنی، توی login screen (GDM یا SDDM) میتونی session نوع رو عوض کنی — بدون نیاز به نصب چیزی. بعد از login کافیه echo $XDG_SESSION_TYPE بزنی و ببینی.
اگه بخوای برگردی، همون راه رو از login screen برعکس کن.
X11 appها چی میشن
اکثر X11 appها روی Wayland از طریق XWayland کار میکنن — یه X server که بهعنوان یه Wayland client اجرا میشه. در عمل، بیشتر برنامهها بدون تغییر کار میکنن. محدودیتها از همون security model میان: appهایی که global pointer position یا synthetic input نیاز دارن زیر XWayland هم مشکل دارن.
جمعبندی واقعبینانه
Wayland برای اکثر کاربران لینوکس دسکتاپ الان انتخاب بهتریه — نه چون X11 خراب شده، بلکه چون Wayland معماری تمیزتر، امنیت ساختاری بهتر، و پشتیبانی از display مدرن (HiDPI، variable refresh rate) رو از اساس حل میکنه.
ولی اگه workflow ات به X forwarding، GUI automation، یا window manager هایی که Wayland equivalent ندارن وابستهست، X11 هنوز گزینهی درستتره. و این انتخاب هیچ ایرادی نداره — هر دو همزمان در دسترسند و X11 حداقل تا ۲۰۲۸ patch خواهد خورد.
این دستور لیست میده بدون اینکه چیزی رو approve کنه. بعد از اینکه تیکرهایی که بهشون اعتماد داری رو approve کردی:
npm approve-scripts <package-name>
این approve به package.json commit میشه — یعنی میتونی توی PR review کنی و ببینی چه packageای اجرای script گرفته.
یه edge case مهم: npm rebuild هم subject to این block هست. اگه یه package توی allowlist نباشه، npm rebuild <package> بیسروصدا skip میکنه. راهحل:
از npm 12 این کار نمیکنه مگه اینکه --allow-git استفاده کنی.
این تغییر از فوریه ۲۰۲۶ اعلام شده بود. دلیلش اینه که یه Git dependency میتونه یه .npmrc داخل خودش داشته باشه که مسیر اجرایی git رو override کنه — حتی وقتی --ignore-scripts هم گذاشته باشی. خیلی از تیمها فکر میکردن --ignore-scripts محافظشون میکنه، ولی این attack vector کاملاً جدا بود.
اگه از Git dependency برای یه package داخلی استفاده میکنی، بهترین راه اینه که به یه registry مایگریت کنی — GitHub Packages، Nexus، یا Artifactory. اضافه کردن --allow-git به هر CI script، مشکل رو حل نمیکنه، فقط جابهجاش میکنه.
تغییر سوم: remote URL ها block میشن
مشابه Git، اگه package ای داری که از یه URL مستقیم نصب میشه:
remote URL ها unverifiable ان — npm نمیتونه تضمین کنه که اون tarball دستکاری نشده. حل درست اینه که به یه registry بری که integrity check داره.
چطور الان آماده بشی
npm 11.16.0 آخرین نسخهی stable از 11.x هست. اگه upgrade کنی، همهی این blocking ها بهصورت warning نشون داده میشن — نه error. یعنی میتونی قبل از اینکه npm 12 بیاد ببینی چی میشکنه:
بعد از اینکه لیست گرفتی، packageهایی رو که بهشون اعتماد داری approve کن و package.json رو commit کن. یه چیزی که نباید بکنی: همه رو با یه flag blanket approve کنی فقط برای اینکه warningها ساکت بشن — این کل هدف تغییر رو از بین میبره.
کدوم پروژهها بیشترین ریسک رو دارن
پروژههایی که به احتمال بالا مشکل پیدا میکنن:
هر پروژهای که native addon دارد — یعنی packageهایی مثل bcrypt، sharp، canvas، node-sass، یا هر چیزی که به C/C++ compile وابستهست. این packageها برای کار کردن به script اجرا شدن نیاز دارن.
هر پروژهای که Git dependency دارد — معمولاً برای fork های داخلی یا patched نسخهها.
هر پروژهای که از HTTPS tarball برای package های داخلی استفاده میکنه.
اگه از هیچکدوم از اینا استفاده نمیکنی، احتمالاً npm 12 برات transparent باشه.
یه نکته دربارهی پکیج نویسها
اگه خودت package نگهداری میکنی که native build داره، بهترین راه اینه که prebuilt binary بشیپ کنی — با ابزارهایی مثل prebuild، prebuildify، یا node-pre-gyp. packageای که install-time compilation نداره، نمیتونه از این attack vector استفاده بشه. این یه بهبود بلندمدت هست که ارزش وقت گذاشتن داره.
این بزرگترین تغییر امنیتی npm در شانزده سال گذشتهست. ولی فقط یه تغییر configuration نیست — یه تغییر مدل اعتماده. ده سال بود که هر npm install بهمعنای دادن حق اجرای کد دلخواه به همهی چیزی بود که توی dependency tree ات بود. این پیشفرض داشت تغییر میکرد — فقط کمی طول کشید.
محدود کردن دسترسیها — خصوصاً روی فایلسیستم — یه قدم ضروریه نه یه پیشنهاد احتیاطی.
اگر خیلی بیشتر بخواید امنیت رو رعایت کنید میتونید روی یک VM یا VPS رانش کنید و باهاش در ارتباط باشید از جاهایی که ساپورت میکنه (تقریبا همه کاری میشه کرد) ولی شخصا روی سیستمم هست (لینوکس) و تا الان مشکلی نداشتم و مستقیم توی ترمینال باهاش کار میکنم.
چیه و چی نیست
چیه: یه agent محلی قدرتمند برای کارهای پیچیده و طولانی که با راهنمایی درست نتایج خوبی میده. اگه بهش skill های درست بدی و prompt دقیق بنویسی، کارهایی انجام میده که معمولاً از agentهای open-source انتظار نداری. MIT، رایگان، سورس باز.
چی نیست: agent ای که بدون نظارت کار کنه، یا که بهطور خودکار skill بسازه و بهتر بشه — حداقل نه به اون شکلی که توی marketing claim میشه.
مشخصات کلی
Hermes Agent از Nous Research فوریه ۲۰۲۶ منتشر شد و الان روی نسخهی v0.18.2 هست. از یه gateway اجرا میشه و میتونی از Telegram، Discord، Slack، WhatsApp، Signal، و Email باهاش در ارتباط باشی. با هر provider ای کار میکنه — Nous Portal، OpenRouter، Anthropic، OpenAI، یا مدل محلی با Ollama. تا ژوئن ۲۰۲۶ به ۱۸۸ هزار ستارهی GitHub رسیده، NVIDIA هم آن را بهعنوان runtime مرجع برای Nemotron 3 Ultra انتخاب کرده.
# macOS / Linux
curl -fsSL https://hermes-agent.nousresearch.com/install.sh | bash
# یا از طریق pip
pip install hermes-agent && hermes
Desktop app هم برای macOS و Windows مستقیم از سایت قابل دانلود هست.
این endpoint با فرمت OpenAI کاملاً compatible هست، پس هر ابزاری که بتونه با OpenAI کار کنه — Claude Code، Codex، Cursor، Cline، Continue، و بقیه — میتونه از همین endpoint استفاده کنه.
راستی اگر فلگ t- رو به 9router پاس بدی میتونی ترمینال رو ببندی و توی بکگراند کارشو میکنه.
چیزهایی که توی مسیر اضافه شدن
Format Translator: اگه یه tool با فرمت OpenAI کار میکنه ولی میخوای به Anthropic یا Gemini وصل بشی، 9Router فرمت رو وسط راه ترجمه میکنه. نیازی نیست tool ات Anthropic Messages format بلد باشه.
Multi-Account: میتونی چند حساب از یه provider اضافه کنی و 9Router با round-robin بینشون load balance کنه. اگه یه حساب به محدودیت رسید، خودکار به حساب بعدی میره.
RTK Token Saver: خروجی دستوراتی مثل git diff، grep، find و tree رو قبل از فرستادن به مدل فشرده میکنه. ادعای سازنده اینه که ۲۰ تا ۴۰ درصد توکن ورودی کمتر مصرف میشه. این بهصورت پیشفرض فعاله و lossless هست.
Caveman Mode: یه system prompt تزریق میکنه که جوابهای مدل رو کوتاهتر و متراکمتر میکنه. پنج سطح شدت داره. اگه با مدلهایی کار میکنی که verbose جواب میدن و میخوای توکن خروجی کمتر مصرف بشه، این feature کمک میکنه.
MITM Bridge: یه feature پیشرفتهتر که ترافیک IDEهایی مثل GitHub Copilot، Kiro IDE، یا Antigravity رو intercept میکنه و به 9Router هدایت میکنه. این یعنی میتونی از اشتراک IDE هایی که داری برای call کردن هر backend ای که بخوای استفاده کنی. سازنده خودش تاکید کرده که باید policy هر tool رو بررسی کنی قبل از استفاده.
Cloud Sync + Tunnel: اگه بخوای از جای دیگهای غیر از ماشین محلیت به 9Router دسترسی داشته باشی، یه Cloudflare tunnel میتونی راه بندازی.
یه نکته دربارهی provider های رایگان
Tier 3 شامل providerهایی مثل iFlow و Kiro میشه که «unlimited free» هستن. واقعیت اینه که اینها معمولاً quota دارن، ولی reset شون سریعتره یا سقفشون بالاتره از providerهای اصلی. اگه روی پروژههای سنگین کار میکنی، Tier 3 رو آخرین fallback در نظر بگیر، نه ابزار اصلی — چون کیفیت مدلهای رایگان معمولاً پایینتره.
open source و رایگان
9Router با MIT license منتشر شده و سورسش روی GitHub هست. هیچ سرور مرکزیای وجود نداره — همه چیز روی ماشین خودت اجرا میشه. پرداختی برای خود 9Router وجود نداره؛ هزینه فقط مربوط به providerهاییه که انتخاب میکنی.
برای کسی که چند اشتراک AI مختلف داره و هر ماه بخشی از quota هدر میره، یا کسی که وسط کار به rate limit میخوره و باید دستی provider عوض کنه، 9Router یه مشکل واقعی رو حل میکنه.
# در CI: deny کردن warningها
CARGO_BUILD_WARNINGS=deny cargo build
# موقع کار: خاموش کردن موقت warningها
CARGO_BUILD_WARNINGS=allow cargo check
# حالت پیشفرض: نمایش بدون fail کردن
CARGO_BUILD_WARNINGS=warn cargo build
مزیت مهم اینه که این متغیر build cache رو invalidate نمیکنه. یعنی میتونی توی CI deny داشته باشی و همچنان از کش استفاده کنی. میشه با --keep-going هم ترکیبش کرد تا بهجای توقف روی اولین خطا، همهی خطاها و warningها یکجا جمع بشن.
خروجی linker دیگه پنهان نمیشه
rustc وقتی کامپایل میکنه، یه linker رو از طرف کاربر صدا میزنه. تا الان اگه link موفق میشد، هر پیامی که linker داشت پنهان میشد. این رفتار گاهی مشکلساز بود چون warningهای واقعی linker — مثل deprecation warning برای یه optimization flag قدیمی — اصلاً دیده نمیشدن.
از ۱.۹۷، پیامهای linker بهصورت پیشفرض نمایش داده میشن:
warning: linker stderr: ignoring deprecated linker optimization setting '1'
|
= note: `#[warn(linker_messages)]` on by default
تیم Rust پیامهایی که false positive شناختهشده هستن رو فیلتر کرده تا نویز اضافه نداشته باشی. اگه یه پیام میبینی که فکر میکنی false positive هست، میتونی توی Cargo.toml آن را خاموش کنی:
[lints.rust]
linker_messages = "allow"
یه نکته مهم: این lint عمداً از گروه warnings جدا نگه داشته شده. یعنی CARGO_BUILD_WARNINGS=deny روی linker_messages تاثیر نمیذاره — چون خروجی linker از پلتفرمی به پلتفرم دیگه فرق میکنه و نمیشه بهطور قطعی همهشون رو deny کرد.
APIهای جدید stable شده
چند API مرتبط با bit manipulation اضافه شده که برای کدهای سطحپایین کاربردیه:
let x: u32 = 0b1010_1100;
// جدا کردن بیت بالایی
x.isolate_highest_one(); // => 0b1000_0000
// جدا کردن بیت پایینی
x.isolate_lowest_one(); // => 0b0000_0100
// مقدار بیت بالایی
x.highest_one(); // => 0b1000_0000
// مقدار بیت پایینی
x.lowest_one(); // => 0b0000_0100
// تعداد bitهای لازم برای نمایش مقدار
x.bit_width(); // => 8
همهی این methodها روی NonZero<T> هم در دسترسن. char::is_control هم حالا توی contextهای const کار میکنه.
یه تغییر کوچیک برای کاربران WebAssembly
اگه با WebAssembly کار میکنی، یه breaking change هست که از نسخهی ۱.۹۶ شروع شده: Rust دیگه بهطور پیشفرض --allow-undefined به linker پاس نمیده. یعنی symbolهای undefined الان linker error هستن، نه WebAssembly importهای ضمنی. اگه intentional بود، باید صریح تعریفش کنی:
این release از نظر حجم تغییرات زبانی یه نسخهی آروم بود، ولی هر سهی این تغییرها از اون دسته چیزهاییه که بعد از یه مدت کار کردن باهاشون، نفهمیدی چطور قبلاً بدونشون کار میکردی.
توسعهدهندههایی که ثبتنام میکنن ۲۰ دلار اعتبار رایگان میگیرن.
نکتهای که توسعهدهندهها باید بدونن
Meta Model API هم با OpenAI SDK سازگاره هم با Anthropic Messages format. یعنی اگه الان روی یکی از این دوتا کار میکنی، اشتکالپذیری به Muse Spark نیاز به rewrite نداره — فقط base URL رو به api.meta.ai/v1 تغییر بده، key بده، و اسم مدل رو muse-spark-1.1 بذار.
این یه تصمیم توزیعگر هوشمندانهست. یعنی تیمها میتونن Muse Spark رو A/B کنن با مدل فعلیشون بدون اینکه stack رو از نو بسازن.
این هفته برای متا
Muse Spark 1.1 تنها چیزی نبود که این هفته از متا اومد. دو روز قبلش Muse Image و Muse Video هم منتشر شدن — اولین مدلهای تولید تصویر و ویدیوی Superintelligence Labs. ولی Muse Image یه جنجال هم بههمراه آورد: اجازه داد کاربرا روی عکسهای public اینستاگرامی که دیگران گذاشتن افکت AI اعمال کنن، بدون اینکه از صاحب عکس اجازه گرفته بشه. این تصمیم با اعتراض زیادی روبهرو شد.
وضعیت دسترسی
مدل الان توی «Thinking mode» در اپ Meta AI و سایت meta.ai در دسترسه — بدون نیاز به API. برای توسعهدهندهها، Meta Model API بهصورت public preview فعلاً فقط برای آمریکاییاست.
متا گفته این مدل در آینده جای Llama رو توی WhatsApp، Instagram، Facebook، و عینکهای هوشمند متا هم میگیره. مارک زاکربرگ هم برای اولینبار از جولای ۲۰۲۳ روی X پست گذاشت که این مدل «strong agentic and coding model at a very low price» هست. سه سال سکوت روی یه پلتفرم برای اعلام یه مدل AI — این یه نشانه از اینه که داخل متا چقدر به این لانچ اهمیت میدن.
رقابت AI این هفته بهطرز جالبی شلوغ بود. بازار داره به یه سمتی میره که قیمتها پایینتر، context windowها بزرگتر، و تمرکز بیشتر روی کار agentic هست. Muse Spark 1.1 دقیقاً وسط همین جریانه.
همین. دیگه خبری از @typescript/native-preview یا tsgo نیست — اون package برای دوران beta بود. از این به بعد همه چیز از همون typescript package معمولی میاد و با همون tsc اجرا میشه.
برای چک کردن نسخه:
npx tsc --version # باید TypeScript 7.x.x باشه
چی ممکنه بشکنه
TypeScript 7 با TypeScript 6 از نظر تایپچک compatible هست — یعنی کدی که با ۶ compile میشد باید با ۷ هم compile بشه. با این حال، چند تغییر هست که باید بدانی:
--target es5 و formatهای output مثل AMD، UMD و SystemJS حذف شدن. moduleResolution: "node10" (همون قدیمیترها که node مینوشتن) هم نیست. rootDir حالا بهصورت پیشفرض ./ هست نه root پروژه، و types بهصورت پیشفرض آرایهی خالیه.
اگه مستقیم از TypeScript 5 یا قدیمیتر upgrade میکنی — نه ۶ — احتمال مشکل بیشتره چون این deprecationها توی ۶ warning بودن و حالا توی ۷ hard error شدن. توصیه اینه که اگه روی ۵ هستی، اول به ۶ بری و بعد به ۷.
یه چیز مهم که هنوز نیست
API برنامهنویسی TypeScript — همونی که ابزارهایی مثل typescript-eslint، ts-morph، و custom transformerها ازش استفاده میکنن — توی ۷.۰ پایدار نیست. مایکروسافت گفته این API توی نسخهی ۷.۱ که چند ماه دیگه میاد آماده میشه.
یعنی اگه workflowات به این ابزارها وابستهست، فعلاً باید یه سری چیزها رو pinned روی TypeScript 6 نگه داری:
npm install -D @typescript/typescript6 # aliased package برای linting
مایکروسافت یه compatibility package برای این کار منتشر کرده تا بتونی هم ۶ هم ۷ رو side-by-side داشته باشی.
editor
برای VS Code، TypeScript Native Preview extension که قبلاً جداگانه نصب میکردی دیگه لازم نیست — همون typescript package که توی پروژه نصبه، editor هم ازش استفاده میکنه. فقط یه بار VS Code رو restart کن.
اگه روی editor دیگهای کار میکنی (Neovim، Zed، Cursor)، language server protocol یکیه — هر clientی که از tsserver استفاده میکنه خودش سریعتر میشه بدون اینکه config خاصی بخواد.
نظر شخصی
این نوع تغییرات نادره. معمولاً «مهمترین release در سالهای اخیر» یه عبارت overused هست، ولی اینجا واقعاً صدق میکنه — نه بهخاطر یه feature جدید، بلکه بهخاطر اینکه یه چیزی که همه باهاش کنار اومده بودن (کامپایلر کند) یهو یه مقیاس کامل فرق کرده. اگه روی پروژهی بزرگی کار میکنی که تایپچک CI بیشتر از یه دقیقه طول میکشه، آپدیت کردن به ۷ احتمالاً صرفهجویانهترین کاریه که میتونی این هفته انجام بدی.
این موضوع واقعا من رو به شخصه آزار میداد. من سیستمم بد نیست ولی تاپ ناچم نیست و خب لود شدن تایپ اسکریپت برام انقدر کند بود که واقعا ازاردهنده بود. هنوز بررسیش نکردم ولی خب I have a lot of hope
برای CI هم میشه از این استفاده کرد: کافیه پوشهی .next رو بین runها کش کنی. وقتی Turbopack اون دایرکتوری رو اول build پیدا کنه، از کار قبلی استفاده میکنه بهجای اینکه همهچیز رو از صفر compile کنه.
React Compiler با Rust
React Compiler از نسخهی ۱۶.۰ توی Next.js stable بوده، ولی تا الان فقط بهعنوان یه Babel transform اجرا میشد. مشکل اینجا بود که Babel روی پروژههای بزرگ سنگین میشد و build رو کند میکرد.
تیم React یه پورت native از این compiler با Rust نوشته، و تیم Turbopack سریع این رو integrate کرده. نتایج اولیه روی پروژههایی مثل v0 نشون میده که compile time بین ۲۰ تا ۵۰ درصد بهتر میشه. فعلاً experimental هست:
Turbopack حالا از API ای که Vite معروفش کرده پشتیبانی میکنه:
const posts = import.meta.glob('./posts/*.mdx');
این بهجای اینکه مجبور بشی اسم همهی فایلها رو hardcode کنی، هر فایلی که با pattern مطابقت داشته باشه رو import میکنه. نتیجه یه object هست که keyهاش path فایلهاست:
for (const path in posts) {
const post = await posts[path]();
}
میتونی با eager: true همهشون رو بلافاصله import کنی، یا فقط چند export خاص رو بگیری، یا patternهای منفی بگذاری. file watcher هم بهش وصله — اگه فایلی اضافه یا حذف شد، خودش recompile میکنه.
یه نکته: این feature فقط روی Turbopack کار میکنه. اگه هنوز با --webpack build میگیری، اینجا نیست.
HMR سریعتر و runtime کوچیکتر
دو بهبود دیگه که کمتر headline میگیرن ولی در عمل احساس میشن: اول اینکه HMR subscription tracking بهتر شده — با یکی کردن چند subscription در جاهایی که قبلاً جداگانه بودن، dev server cold start روی اپهای پیچیده بیش از ۱۵ درصد سریعتر شده. دوم اینکه runtime code ای که Turbopack به هر route اضافه میکنه کوچیکتر شده — چون حالا فقط کدی که واقعاً استفاده میشه (مثل WebAssembly loader یا worker support) شیپ میشه، نه همهچیز یکجا.
یه feature کوچیکتر هم برای monorepoها اومده: با turbopackLocalPostcssConfig: true میتونی per-package پیکربندی PostCSS داشته باشی بهجای اینکه همه از root config بخوننن.
اگه الان روی Next.js 16.x هستی، این آپدیت شاید مهمترین چیزیه که از نظر DX روزانه حسش میکنی — نه یه feature جدید، بلکه اینکه وقتی ساعتها روی پروژه کار میکنی، IDE و dev server با هم دیگه دعوا نمیکنن سر رم.
پشتیبانی از --target es5 حذف شده. اگه هنوز برای مرورگرهای قدیمی build میگیری، باید از ابزارهای دیگهای مثل Babel استفاده کنی. فرمتهای output مثل AMD، UMD و SystemJS هم حذف شدن. moduleResolution: "node10" (که قبلاً به اسم node هم شناخته میشد) حذف شده و باید به bundler یا node16 تغییر پیدا کنه. --baseUrl و --paths هم رفتار قبلیشون رو ندارن و باید با paths توی tsconfig.json جایگزین بشن.
یه تغییر مهم دیگه اینه که rootDir حالا بهصورت پیشفرض به ./src اشاره میکنه نه root پروژه.
مایکروسافت میگه ۹۵ درصد پروژههای TypeScript 6 بدون تغییر compile میشن. ولی اون ۵ درصد رو باید جدی بگیری — خصوصاً اگه پروژهی قدیمیه یا config پیچیده داره.
API programmatic هنوز آماده نیست
یه محدودیت مهم که باید بدانی: API برنامهنویسی TypeScript — همونی که ابزارهایی مثل ts-jest، ts-node، و eslint-plugin-typescript ازش استفاده میکنن — هنوز در TypeScript 7 پایدار نیست. مایکروسافت گفته این API توی نسخهی ۷.۱ که چند ماه بعد از ۷.۰ stable میاد آماده میشه.
یعنی اگه از این ابزارها استفاده میکنی، باید صبر کنی یا با احتیاط تست کنی.
چطور الان امتحانش کنی
npm install -D typescript@rc
همین. بعد از این:
npx tsc --version # باید v7.0.0-rc باشه
npx tsc --noEmit # تایپچک کل پروژه
tsc داخل typescript@rc همون باینری Go هست. اسم tsgo که توی previewهای ۲۰۲۵ استفاده میشد، حالا فقط برای nightly channel مانده.
برای rollback هم typescript@6 رو کنار داشته باش:
npm install -D typescript@6 # نسخهی قبلی
آیا الان باید به پروداکشن ببریش؟
RC هست، نه stable. مایکروسافت میگه «highly stable» هست و بیش از یه سال pre-release testing داشته، ولی هنوز GA نشده.
برای سرویسهای داخلی و pipeline های CI که فقط type-check میکنن و emit نمیکنن، همین الان میارزه امتحانش کنی. اگه از API برنامهنویسی استفاده میکنی یا workflow پیچیدهای داری، صبر کن stable بیاد — که طبق برنامه اواخر جولای ۲۰۲۶ هست.
این بزرگترین تغییر توی TypeScript از همون اول بود. نه یه feature جدید، نه یه syntax تازه — یه تغییر بنیادی توی اینکه کامپایلر اصلاً چطور کار میکنه. و از اون نوع تغییراتیه که اکثر توسعهدهندهها بدون اینکه بدونن چی عوض شده، فقط حس میکنن IDE یهو خیلی سریعتر شده.
Skills: وقتی داک کافی نیست
Skills برای workflowهای چندمرحلهایاند — جایی که داکها تنها نمیتونن agent رو از اول تا آخر هدایت کنن. سه Skill جدید اضافه شده:
next-dev-loop: به agent دسترسی به dev loop کامل میده — مرورگر، console، network، و درخت React. بعد از هر ویرایش میتونه ببینه صفحه هنوز کار میکنه یا نه.
next-cache-components-adoption: Cache Components رو توی پروژه فعال میکنه و یه feature در یه زمان پیش میره. دو mode داره: incremental که یه PR مکانیکی میسازه و بقیه رو میذاره برای بعد، و direct که همهی routeها رو یهجا روی یه branch تغییر میده.
next-cache-components-optimizer: یه route رو برای instant navigation بهینه میکنه با یه حلقهی observe-fix-iterate روی static shell. قبل و بعد از هر تغییر screenshot میگیره؛ اگه تصاویر یکسان باشن، تغییر rollback میشه.
Agent Browser با React introspection
next-browser که توی ۱۶.۲ اضافه شده بود حالا merge شده توی agent-browser — یه CLI همهمنظوره که فراتر از Next.js هم کار میکنه.
نسخهی ۰.۲۷ یه چیز مهم اضافه کرده: React DevTools introspection. Agentها الان میتونن درخت کامپوننت رو لیست کنن، یه کامپوننت خاص رو inspect کنن، re-renderها رو profile کنن، و ببینن چی یه render رو نگه داشته.
Actionable errors: خطا با دستورالعمل
وقتی Cache Components فعاله، یه await روی سرور یه انتخابه. Instant Insights این انتخاب رو بهعنوان یه error با سه fix مشخص نشون میده: Stream با <Suspense>، Cache با "use cache"، یا Block با export const instant = false.
اما مهمتر از خود error، یه دکمهی «Copy prompt» اضافه شده. این دکمه fix انتخابشده رو بستهبندی میکنه توی یه پرامپت آماده برای agent: شناسایی کد مشکلدار، خوندن داک مربوط، اعمال pattern، و تایید نتیجه توی مرورگر از طریق next-dev-loop.
همین fix menu توی terminal هم هست. next build و next dev هر دو خطاها رو با گزینههای labeled و لینک به بخش مربوطه از داکها output میکنن — یعنی agentهایی که dev overlay ندارن و فقط terminal رو میخونن همون اطلاعات رو میگیرن.
هر error یه صفحهی مجزا روی nextjs.org/docs/messages داره که برای خوندن توسط agentها نوشته شده. هر صفحه همون ساختار رو داره: Patterns، Trade-offs، و Gotchas — یه چیزی که agentها توی اولین تلاش احتمالاً بهش توجه نمیکنن.
MCP server: کوچیکتر و متمرکزتر
MCP server قبلاً یه knowledge base داخلی داشت. با اینکه bundled docs الان همون کار رو میکنه، اون ابزارها حذف شدن. در عوض، دو ابزار جدید اضافه شده: get_compilation_issues برای کل پروژه، و compile_route برای یه route خاص. agentها اغلب next build میزدن فقط برای چک کردن compilation — این ابزارها همون سوال رو از dev server در حال اجرا جواب میدن، خیلی سریعتر.
Docs as Markdown
یه چیز ساده ولی کاربردی: به هر URL از داکهای Next.js یه .md اضافه کن تا نسخهی Markdown صفحه رو بگیری. همین برای صفحههای error هم کار میکنه.
ایندکس کامل روی /docs/llms.txt هست، و /docs/llms-full.txt همهی صفحات رو توی یه فایل bundle میکنه — طبق convention استاندارد llms.txt.
یه قدم به سمت agent-first development
اگه بخوای خیلی ساده بگی چی اضافه شده: Next.js داره سعی میکنه agentها رو مثل یه نوع developer جدید در نظر بگیره — با نیازهای متفاوت. Agent به داکهای بهروز نیاز داره نه training data قدیمی، به خطاهای actionable نیاز داره نه فقط error message، و به یه feedback loop نیاز داره که بتونه بعد از هر تغییر runtime رو چک کنه.
فعلاً هنوز preview هست. اگه میخوای همین الان امتحان کنی:
npm install next@preview
و بعد ببین کدوم بخش از workflow توسعهات واقعاً بهتر میشه — یا نمیشه.
یه مشکل دیگه هم وجود داشت که کمتر بهش توجه میشد: حتی اگه سرور سریع جواب بده، هنوز یه رفتوبرگشت شبکه بین client و سرور داری. Next.js قبلاً این مشکل رو با prefetch کردن لینکها حل میکرد — برای هر لینکی که توی viewport بود، یه request جداگانه میزد. اگه یه sidebar با بیست لینک داشتی، بیست request. اگه به Network tab نگاه میکردی، یه طوفان از requestها میدیدی که به گفتهی خود تیم Next.js «مسخره به نظر میرسید».
توی ۱۶.۳ این رویکرد عوض شده: به جای prefetch کردن بهازای هر لینک، حالا یه shell بهازای هر route prefetch میشه. یعنی اگه بیست لینک داری که همه به /chat/[id] اشاره میکنن، فقط یه بار shell اون route دانلود میشه و کش میشه.
البته اگه بخوای برای یه لینک خاص بیشتر از shell prefetch بشه — مثلاً header یه صفحهی chat — میتونی با <Link prefetch={true}> opt-in کنی. توی اون حالت هم Next.js فقط تا جایی prefetch میکنه که synchronous یا 'use cache' باشه، نه کل route.
Instant Insights: slow navigation بهعنوان error
چیزی که توی این آپدیت جالبه اینه که تیم Next.js تصمیم گرفته navigationهای کند رو توی development mode بهعنوان error نشون بده — نه warning، error. یه پنل جدید به اسم Instant Insights اضافه شده که بهطور خودکار routeهایی که instant نیستن رو پیدا میکنه و نشون میده.
این یعنی میتونی توی CI هم چک کنی که navigationهای instant بودنشون رو از دست ندادن.
یه Navigation Inspector هم اضافه شده که بهت اجازه میده هر navigation رو «pause» کنی و ببینی shell چه شکلیه، قبل از اینکه دادههای واقعی بیان.
چقدر واقعاً فرق میکنه
تیم Next.js گفته که این feature رو روی v0 — اپ داخلی Vercel — قبل از release استفاده کردن. نتیجهای که منتشر کردن نشون میده که navigation time از چند صد میلیثانیه به نزدیک صفر رسیده برای اکثر routeها، بعد از اینکه کار روی routeهای کند رو تموم کردن.
البته این هنوز preview هست و یه سری محدودیتهای شناختهشده هم وجود داره: بعضی routeهای blocking توی Instant Insights گزارش نمیشن، و tooling توی Safari مشکل داره. تیم گفتن که اینها قبل از stable release برطرف میشن.
چطور امتحانش کنی
npm install next@preview
بعدش cacheComponents: true رو به config اضافه کن و ببین کدوم routeهات blocking هستن. اگه میخوای Partial Prefetching هم باشه، partialPrefetching: true رو هم اضافه کن.
یه دمو هم آماده کردن به اسم Next Beats — یه موزیکپلیر که روی Next.js 16.3 ساخته شده و سورسش هم روی GitHub هست — که میتونی ببینی navigationهای instant در عمل چطور به نظر میرسن.
این مسیری که Next.js داره طی میکنه — گرفتن بهترین چیز SPA (navigation ایمدیت) بدون دادن مزایای server-centric — از نظر فنی جالبه. مشکل اصلی که همیشه بود این بود که مجبور بودی یا همهچیز رو client side بکنی تا instant باشه، یا server side بروی و سرعت navigation رو فدا کنی. حالا دیگه این tradeoff اجباری نیست.
این یعنی body خود query است — نه یه resource که باید ذخیره شود، نه یه command. سرور آن را پردازش میکند و نتیجه را برمیگرداند.
مقایسهی سه متد از نظر پروتکل:
ویژگی
GET
QUERY
POST
Safe
آره
آره
❌
Idempotent
آره
آره
❌
Cacheable
آره
آره
محدود
Request body
ندارد
دارد
دارد
یه مکانیزم discovery هم اضافه شده: سرور میتواند با هدر جدید Accept-Query اعلام کند که چه media typeهایی را برای QUERY قبول میکند:
Accept-Query: "application/json", application/sql
کش کردن چطور کار میکنه
QUERY قابل cache است، ولی کمی پیچیدهتر از GET. cache key باید شامل محتوای request هم باشد، نه فقط URI. کش باید ابتدا کل body را بخواند و بعد تصمیم بگیرد آیا قبلاً این درخواست را دیده یا نه.
برای جلوگیری از missهای بیدلیل، cacheها اجازه دارند تفاوتهای بیمعنی را نرمالایز کنند — مثلاً ترتیب فیلدهای JSON. ولی اگه این نرمالایزیشن خیلی aggressive باشد، ممکن است cache جواب اشتباه را برگرداند. این edge case اصلیایه که باید بهش توجه داشت.
چه کسی الان پشتیبانی میکنه
Node.Js از اوایل ۲۰۲۴ متد QUERY را بهصورت native parse میکند، OpenAPI 3.2 میتواند آن را document کند، و Spring یه pull request باز دارد. وضعیت دقیقتر به این شکل است:
Stack
وضعیت (جولای ۲۰۲۶)
Node.js
✅ Native — از Node 21.7.2 و Node 22+
Express
کار میکند، ولی TypeScript type ندارد
Fastify
opt-in با addHttpMethod('QUERY', { hasBody: true })
Go net/http
بدون constant، ولی method string کار میکند
Spring
❌ PR باز دارد، هنوز merge نشده
ASP.NET Core
✅ در .NET 11 Preview 4 پشتیبانی میشود
OpenAPI
✅ از نسخه ۳.۲.۰ (سپتامبر ۲۰۲۵)
curl
با -X QUERY --data و Content-Type
مرورگر (fetch)
قبول میکند، ولی همیشه CORS preflight میزند
یه نکته مهم درباره مرورگر: QUERY یه CORS-safelisted method نیست، پس هر درخواست cross-origin یه preflight میزند. هزینهی این OPTIONS اضافه را باید در نظر بگیری.
الان چطور امتحانش کنی
با curl و Node 22 همین الان میشود یه endpoint کاملاً کارکرد ساخت:
اگه روی Spring هستی، فعلاً باید صبر کنی یا یه servlet filter دستی بنویسی که درخواستهای QUERY را پیش از Spring MVC بگیرد — ولی این یه راهحل موقتی است.
قبل پایانم این واژه هارو هم گفتم توضیح بدم که چی هستند:
Preflight Request: درخواست اولیهای از نوع OPTIONS که مرورگر قبل از ارسال درخواست اصلی در CORS میفرستد تا بررسی کند سرور اجازه دسترسی میدهد یا نه.
Safe Methods: متدهایی که فقط برای خواندن داده استفاده میشوند و نباید هیچ تغییری در state سرور ایجاد کنند؛ مثل GET, HEAD, OPTIONS.
Idempotent Methods: متدهایی که اگر چند بار پشت سر هم اجرا شوند، نتیجه نهایی یکسانی روی سرور دارند؛ مثل GET, PUT, DELETE.
پس باید الان ازش استفاده کنی؟
برای سرویسهای داخلی روی Node، من همین الان استفاده میکنم. parser support وجود دارد، semantics استاندارد شده، و ترافیک داخلی نیازی به نگرانی از CDN یا بلوغ مرورگر ندارد.
برای API عمومی، عجله نکن. endpointهای POST فعلیات را نگه دار و Accept-Query را اضافه کن تا clientها بدانند که QUERY هم پشتیبانی میشود. tooling داره میآید — OpenAPI 3.2 و ASP.NET 11 هر دو آن را میشناسند.
ده یازده سال از اولین draft تا استاندارد شدن طول کشید. HTTP سریع حرکت نمیکند، و دقیقاً به همین خاطر وقتی حرکت میکند ارزش توجه دارد.سرچ کردن با متد POST احتمالاً ظرف چند سال آینده به همان اندازهای که الان X- header استفاده کردن به نظر قدیمی میرسد، legacy به نظر خواهد رسید.
Sonnet 5 واقعاً چقدر فرق دارد
ادعای اصلی آنتروپیک این است که Sonnet 5 به عملکرد Opus 4.8 نزدیک است، ولی با قیمت خیلی پایینتر. در API، نرخ تعارفی تا پایان اوت ۲۰۲۶ برای هر یکمیلیون توکن ورودی دو دلار و خروجی ده دلار است، بعدش به سه و پانزده دلار میرسد. Opus 4.8 روی همین مقیاس پنج و بیستوپنج دلار است. از نظر اعداد، Sonnet 5 روی بنچمارکهای BrowseComp و OSWorld-Verified خیلی به Opus 4.8 نزدیکتر از Sonnet 4.6 است.
تفاوت اصلی در agentic قابلیتهاست: برنامهریزی چندمرحلهای، کنترل مرورگر و ترمینال، و چککردن خودکار خروجی بدون اینکه لازم باشد توی پرامپت بگویی «جوابت رو بررسی کن». اینا قابلیتهایی بودند که قبلاً بیشتر مختص مدلهای Opus بود. از نظر امنیت سایبری هم آنتروپیک میگوید Sonnet 5 هیچوقت روی دادههای تخصصی امنیتی آموزش ندیده، و در تستهایی که با موزیلا انجام شده، روی آسیبپذیریهای شناختهشدهی فایرفاکس هیچ اکسپلویت کاملی تولید نکرده. به همین خاطر هم دولت آمریکا سراغش نیامده.
Fable 5 الان چه وضعیتی دارد
Fable 5 برگشته، ولی نه به همان شکلی که اول لانچ شده بود. دسترسی رایگان روی پلنهای Pro و Max تموم شده — حالا به کردیت نیاز دارد. Anthropic گفته هدفش این است که در آینده Fable رو دوباره بهعنوان بخشی از پلنهای اشتراکی برگرداند، ولی زمان مشخصی نداده.
Mythos 5 هنوز محدود است. آنتروپیک دسترسی رو برای یه سری سازمانهای آمریکایی تاییدشده برقرار کرده و داره فهرست Project Glasswing رو گسترش میدهد، ولی برای عموم در دسترس نیست و ظاهراً تا مدتی هم نخواهد بود.
یه چیز جالب توی این ماجرا این بود که آنتروپیک، آمازون، مایکروسافت و گوگل با هم یه چارچوب مشترک برای رتبهبندی شدت jailbreakها پیشنهاد دادند. این نشان میدهد که وقتی مدلها به این سطح از توانایی میرسند، بحثهای امنیتی دیگر فقط داخلی نیست — صنعت داره سعی میکند یه زبان مشترک برای این مکالمات پیدا کند.
یه نکتهی مهم که باید بدانی: Fable 5 فعلاً فقط از طریق API در دسترس است. اگه انتظار داری توی claude.ai یا Claude Code بروی و از منوی مدلها انتخابش کنی، ناامید میشوی. آنتروپیک گفته که قصد دارد Fable رو دوباره به پلنهای اشتراکی برگرداند، ولی نه الان و نه با زمانبندی مشخص.
یه نظر شخصی که شاید ارزش داشته باشه بشنوی
وسط همهی این سروصداها، یه چیزی هست که کمتر کسی میگوید: Sonnet 4.6 هنوز خیلی خوبه. اگه کارت کد نوشتن، توضیح مفاهیم، خلاصهسازی، یا همین کارهای روزمرهی برنامهنویسیه، Sonnet 4.6 تقریباً همهشان رو راه میاندازد — و مهمتر از اون، رایگانه یا خیلی ارزونتر.
Sonnet 5 و Fable 5 قابلیتهای واقعی دارند، مخصوصاً توی کارهای agentic طولانیمدت که مدل باید خودش چندین مرحله رو مدیریت کند. ولی برای اکثر کارهای روزانهای که یه توسعهدهندهی معمولی باهاشون طرفه، این فاصلهای که بین نسخهها هست توی عمل خیلی کمتر از اعداد بنچمارکهاست. قبل از اینکه بروی کردیت بخری یا پلن رو ارتقا بدی، ارزش داره یه هفته با همان Sonnet 4.6 کار کنی و ببینی کجا واقعاً به دیوار میخوری — اگه اصلاً بخوری.
.env.test
فقط یکی
فایل پایه
.env
:
دسترسی به متغیرها: مرز بین سرور و کلانیت به صورت پیشفرض، تمام متغیرهایی که در فایلهای .env تعریف میکنید فقط و فقط در سمت سرور (Node.js) قابل دسترسی هستن (مثلاً در API روتها یا Server Components). این یک قابلیت امنیتی هستش تا اطلاعات حساس شما به مرورگر کاربر ارسال نشه. اما اگر بخواید از یک متغیر در کامپوننتهای سمت کلایت (Client Components) استفاده کنید، باید این کار رو انجام بدید: کافیه اسم متغیر رو با عبارت NEXT_PUBLIC_ شروع کنید. با این کار، Next.js متوجه میشه که این متغیر حساس نیست و اجازه میده که در سمت کلایت هم بهش دسترسی داشته باشید:
# فقط در سمت سرور دسترسی دارد
ANALYTICS_SECRET_KEY=secret_123
# هم در سرور و هم در کامپوننتهای کلایت دسترسی دارد
NEXT_PUBLIC_API_URL=https://api.codoloper.com
ساخت پوشه Configs برای دسترسی بهتر: صدا زدن مداوم process.env.NEXT_PUBLIC_API_URL در سراسر پروژه، علاوه بر شلوغ کردن کد، دو مشکل اساسی داره: اول اینکه هیچ پیشنهادی (Auto-complete) از سمت ادیتور دریافت نمیکنید و دوم اینکه احتمال غلط املایی بالا میره. برای حل این مشکل مراحل زیر رو انجام بدید: ۱. در ریشه (Root) پروژه یک پوشه به نام configs ایجاد کنید. ۲. داخل اون یک فایل به نام global.ts بسازید. ۳. متغیرهای محیطی رو به صورت جدا در این فایل تعریف و اکسپورت کنید:
حالا هر کجای پروژه که به این متغیرها نیاز داشتید، به جای کار با process.env، خیلی راحت متغیر مورد نظرتون رو ایمپورت میکنید:
import { apiUrl, isProduction} from "@/configs/global";
با این کار کدهای تمیزتری هم دارید. جمعبندی مدیریت هوشمندانه متغیرهای محیطی در Next.js به ما این امکان رو میده که پروژههای امنتر و منعطفتری بسازیم. با درک درست از اولویتبندی فایلهای .env و استفاده از قابلیتهایی مثل پیشوند NEXT_PUBLIC_ و رویکرد Centralized Config، فرآیند توسعه و دیپلوی پروژه آسونتر میشه. نکته مهمِ اینکه: حتماً مطمئن شید که فایلهای با پسوند .local در فایل .gitignore شما قرار دارن تا به اشتباه روی مخازن گیت آپلود نشن! شما در پروژههاتون چطور متغیرها رو مدیریت میکنید؟ آیا تا به حال با چالش لود نشدن متغیرها در سمت کلایت مواجه شدید؟ نظرات و تجربیات خودتون رو در بخش کامنتها با ما در میون بذارید!
نکتهی فنیتر اینجاست: OpenAI میگوید Sol از آستانهی «بحرانی سایبری» تعریفشده در Preparedness Framework خودشان رد نشده. در آزمایشهایی روی Chromium و Firefox، مدل توانسته باگ و قطعات پایهی یک exploit را پیدا کند، اما نتوانسته بهطور خودکار یک زنجیرهی کامل و قابلاجرا بسازد. با این حال، خودشان هم تاکید کردهاند که هیچ بنچمارکی نمیتواند همهی روشهای استفادهی واقعی را پیشبینی کند؛ برای همین کنار قابلیت بالاتر، سیستم ایمنی چندلایه هم گذاشتهاند: محدودیتهای آموزشدیده در خود مدل، کلاسیفایرهای بررسی لحظهای خروجی، و بازبینی در سطح حساب کاربری برای رفتارهای مشکوک تکرارشونده.
قیمت و زمانبندی
برخلاف رفتار همیشگی OpenAI که مدل جدید را معمولاً مستقیم برای همه باز میکند، اینبار فقط از طریق API و Codex، و فقط برای همان گروه محدود تاییدشده در دسترس است. خودشان گفتهاند قصد دارند بهزودی آن را برای کاربران ChatGPT، Codex و API بهطور عمومی منتشر کنند.
قیمتگذاری هم بر اساس هر یکمیلیون توکن مشخص شده: Sol پنج دلار ورودی و سی دلار خروجی، Terra دو و نیم دلار ورودی و پانزده دلار خروجی، و Luna یک دلار ورودی و شش دلار خروجی. یک تغییر کوچک ولی کاربردی هم در کشینگ پرامپت آمده: حالا میتوان نقطهی cache مشخص کرد و حداقل عمر کش به سی دقیقه رسیده، با این تفاوت که نوشتن در کش اینبار ۱.۲۵ برابر نرخ معمولی ورودی هزینه دارد.
اگر شایعات و گزارشهای قبل از انتشار رسمی را هم در نظر بگیری (که در روزهای منتهی به این پیشنمایش زیاد بودند)، رقابت اصلی روی همین نکته است: آنتروپیک بهخاطر همان نوع محدودیت دولتی، فعلاً مدل Mythos-tier خودش را در دسترس عموم ندارد، و OpenAI بهوضوح میخواهد از این فاصله استفاده کند. اینکه این محدودیت چقدر طول میکشد و چه زمانی Sol، Terra و Luna واقعاً به دست همه میرسند، چیزی است که باید منتظرش ماند.