صفحه‌ی ۱ از ۵: پیش‌نیازها
این راهنما قدم‌به‌قدم نشان می‌دهد چگونه با حساب خود یک Relay شخصی بسازید: ابتدا اعتبارنامه‌ی اپ را از برنامه‌ای که نصب کرده‌اید برمی‌دارید، سپس با حساب گوگل خود وارد می‌شوید و توکن دریافت می‌کنید، و در پایان با یک کلیک آن را روی Vercel نصب می‌کنید. همه‌ی مراحل فقط در مرورگر شما انجام می‌شود؛ این صفحه چیزی را ذخیره نمی‌کند و هیچ اطلاعاتی به هیچ سروری ارسال نمی‌شود.

پیش‌نیازها

  • یکی از این دو برنامه روی کامپیوتر شما نصب شده باشد: اپ Antigravity یا 9Router. هر کدام را داشته باشید کافی است؛ لازم نیست هر دو را نصب کنید.
  • یک حساب گوگل: حساب رایگان هم کار می‌کند (آزمایش‌شده). بهتر است حساب جداگانه باشد، نه حساب اصلی شما.
  • یک حساب Vercel: ساخت حساب رایگان است.
  • پاورشل ویندوز: برای دستورهای استخراج زیر. نیازی به نصب برنامه‌ی اضافی نیست.
نمونه نصب 9Router با دستور npm در پاورشل
اگر 9Router را هنوز نصب نکرده‌اید، نصب آن با همین یک دستور در پاورشل انجام می‌شود. مقدار نسخه در تصویر فقط نمونه است.
💡 نکته: این راهنما را تا پایان با همان حسابی دنبال کنید که قرار است Relay روی آن کار کند؛ در میانه‌ی راه حساب را تغییر ندهید.

۱ اعتبارنامه‌ی اپ Antigravity

دو مقدار لازم دارید: Client ID و Client Secret. این دو مقدار، رمز شخصی شما نیستند؛ اعتبارنامه‌ی عمومیِ اپ دسکتاپ Antigravity هستند که گوگل همراه خود اپ منتشر کرده است. بسته به اینکه کدام برنامه را دارید، یکی از دو راه زیر را دنبال کنید:

💡 نکته: دستورهای این صفحه به نام کاربری کامپیوتر شما کاری ندارند؛ $env:LOCALAPPDATA و npm root -g خودشان مسیر مخصوص همان کاربر را پیدا می‌کنند، پس روی هر کامپیوتری همین دستورها را بدون تغییر اجرا کنید.

کدام برنامه را دارید؟ یکی را انتخاب کنید تا فقط دستورهای همان برنامه را ببینید:

Antigravity راه الف — از اپ رسمی Antigravity Antigravity

  1. اپ رسمی Antigravity را روی کامپیوتر خود نصب کنید. برای همین استخراج، ورود به اپ لازم نیست؛ مقدارها در خود فایل‌های نصب هستند.
  2. پاورشل را باز کنید و این دستور را اجرا کنید تا فایل‌هایی که مقدار را دارند پیدا شوند:
پاورشل — پیدا کردن فایل‌ها
# در همه‌ی فایل‌های پوشه‌ی نصب Antigravity دنبال عبارت apps.googleusercontent.com می‌گردد
# کلید S یعنی زیرپوشه‌ها را هم بگردد و کلید M یعنی فقط نام فایل‌ها را نشان بدهد، نه خود متن را
findstr /S /M "apps.googleusercontent.com" "$env:LOCALAPPDATA\Programs\antigravity\*"
  1. سپس این اسکریپت را اجرا کنید تا شناسه‌ها و سکرت‌ها به‌صورت مرتب و بدون تکرار چاپ شوند:
پاورشل — استخراج شناسه و سکرت
# پوشه‌ی نصب Antigravity را به‌عنوان ریشه‌ی جستجو انتخاب می‌کند
$root = "$env:LOCALAPPDATA\Programs\antigravity"
# دو لیست خالی می‌سازد: یکی برای شناسه‌ها و یکی برای سکرت‌ها
$ids = @()
$secs = @()
# همه‌ی فایل‌های آن پوشه و زیرپوشه‌هایش را یکی‌یکی بررسی می‌کند
Get-ChildItem -Path $root -Recurse -File | ForEach-Object {
# متن هر فایل را با رمزگذاری لاتین می‌خواند تا کاراکترهای فایل‌های باینری هم درست خوانده شوند
    $text = [System.IO.File]::ReadAllText($_.FullName, [System.Text.Encoding]::GetEncoding(28591))
# شناسه‌های مشتری گوگل را با الگو پیدا می‌کند و به لیست شناسه‌ها اضافه می‌کند
    foreach ($m in [regex]::Matches($text, '[0-9]+-[a-z0-9]+\.apps\.googleusercontent\.com')) { $ids += $m.Value }
# سکرت‌ها را با الگو پیدا می‌کند و به لیست سکرت‌ها اضافه می‌کند
    foreach ($m in [regex]::Matches($text, 'GOCSPX-[A-Za-z0-9_-]{28}')) { $secs += $m.Value }
# پایان بررسی فایل‌ها
}
# شناسه‌ها را مرتب می‌کند و تکراری‌ها را حذف می‌کند
$ids | Sort-Object -Unique
# سکرت‌ها را مرتب می‌کند و تکراری‌ها را حذف می‌کند
$secs | Sort-Object -Unique
نمونه خروجی استخراج از Antigravity: سه شناسه و سه سکرت
نمونه خروجی اسکریپت بالا — مقدارها ساختگی‌اند و فقط شکل خروجی را نشان می‌دهند: سه شناسه در بالا و سه سکرت در پایین. هر جفت را یکی‌یکی امتحان کنید.
  1. دو لیست مشاهده می‌کنید: یکی شناسه‌ها و یکی سکرت‌ها. یکی از هر لیست را بردارید و پایین همین صفحه، در فیلدهای مرحله‌ی ۱، وارد کنید. اگر جفت اول جواب نداد، ترکیب بعدی را امتحان کنید (نکته‌ی زیر را بخوانید).
✅ نکته: فایل‌های خیلی بزرگ را با نوت‌پد باز نکنید؛ هنگ می‌کند. همین اسکریپت بالا کار استخراج را انجام می‌دهد و لازم نیست فایل را باز کنید.

9Router راه ب — از 9Router (اگر نصبش دارید، نیازی به نصب Antigravity نیست) 9Router

  1. اول: در 9Router از بخش Providers یک بار Antigravity را اضافه کنید. پس از این کار، مقدارها در فایل‌های نصب 9Router هستند.
  2. پاورشل را باز کنید و این دو دستور را اجرا کنید تا ابتدا مسیر نصب پیدا شود و سپس فایل‌های حاوی مقدار مشخص شوند:
پاورشل — مسیر نصب و پیدا کردن فایل‌ها
# مسیر پوشه‌ی نصب سراسری 9Router را پیدا می‌کند و در متغیر pkg می‌گذارد
$pkg = Join-Path (npm root -g) "9router"
# در همه‌ی فایل‌های آن پوشه دنبال عبارت apps.googleusercontent.com می‌گردد و فقط نام فایل‌ها را نشان می‌دهد
findstr /S /M "apps.googleusercontent.com" "$pkg\*"
  1. سپس این اسکریپت را اجرا کنید تا شناسه‌ها و سکرت‌ها به‌صورت مرتب و بدون تکرار چاپ شوند:
پاورشل — استخراج شناسه و سکرت
# مسیر پوشه‌ی نصب سراسری 9Router را پیدا می‌کند
$pkg = Join-Path (npm root -g) "9router"
# از داخل آن، پوشه‌ی ساخته‌شده‌ی برنامه را به‌عنوان ریشه‌ی جستجو انتخاب می‌کند
$root = Join-Path $pkg "app\.next-cli-build"
# دو لیست خالی می‌سازد: یکی برای شناسه‌ها و یکی برای سکرت‌ها
$ids = @()
$secs = @()
# همه‌ی فایل‌های آن پوشه و زیرپوشه‌هایش را یکی‌یکی بررسی می‌کند
Get-ChildItem -Path $root -Recurse -File | ForEach-Object {
# متن هر فایل را با رمزگذاری لاتین می‌خواند
    $text = [System.IO.File]::ReadAllText($_.FullName, [System.Text.Encoding]::GetEncoding(28591))
# شناسه‌های مشتری گوگل را پیدا می‌کند و به لیست شناسه‌ها اضافه می‌کند
    foreach ($m in [regex]::Matches($text, '[0-9]+-[a-z0-9]+\.apps\.googleusercontent\.com')) { $ids += $m.Value }
# سکرت‌ها را پیدا می‌کند و به لیست سکرت‌ها اضافه می‌کند
    foreach ($m in [regex]::Matches($text, 'GOCSPX-[A-Za-z0-9_-]{28}')) { $secs += $m.Value }
# پایان بررسی فایل‌ها
}
# شناسه‌ها را مرتب می‌کند و تکراری‌ها را حذف می‌کند
$ids | Sort-Object -Unique
# سکرت‌ها را مرتب می‌کند و تکراری‌ها را حذف می‌کند
$secs | Sort-Object -Unique
نمونه خروجی استخراج از 9Router: سه شناسه و سه سکرت
نمونه خروجی اسکریپت بالا — مقدارها ساختگی‌اند و فقط شکل خروجی را نشان می‌دهند: سه شناسه در بالا و سه سکرت در پایین. هر جفت را یکی‌یکی امتحان کنید.
  1. دو لیست مشاهده می‌کنید: یکی شناسه‌ها و یکی سکرت‌ها. یکی از هر لیست را بردارید و پایین همین صفحه، در فیلدهای مرحله‌ی ۱، وارد کنید. اگر جفت اول جواب نداد، ترکیب بعدی را امتحان کنید.
💡 نکته: اگر از آن پوشه چیزی به دست نیامد، اسکریپت را یک بار روی کل پوشه‌ی نصب 9Router هم امتحان کنید؛ در بعضی نسخه‌ها مقدارها در پوشه‌ی دیگری از همان نصب هستند.
⚠️ از تجربه‌ی ما: چرا جفت درست فوری پیدا نمی‌شود؟
• وقتی اسکریپت را اجرا می‌کنید، دو لیست جدا می‌بینید: یکی شناسه‌ها و یکی سکرت‌ها. این دو لیست از دو کلاینت متفاوت گوگل می‌آیند که هر دو داخل فایل‌های اپ هستند، و اسکریپت هر لیست را جداگانه مرتب می‌کند. پس اینکه شناسه‌ی اول با سکرت اول جفت باشد، فقط یک حدس است، نه یک قاعده.
• تنها راه مطمئن شدن، امتحان کردن است: یک شناسه و یک سکرت را در مرحله‌ی ۱ وارد کنید و مرحله‌ی ۲ را اجرا کنید. اگر توکن برگشت، همان جفت درست است و کار تمام است. اگر خطا آمد، ترکیب بعدی را امتحان کنید. با دو شناسه و دو سکرت، در بدترین حالت فقط ۴ ترکیب وجود دارد، پس خیلی زود به جواب می‌رسید. اگر تعداد دو لیست با هم فرق داشت، تعداد ترکیب‌ها همان ضرب دو تعداد است؛ مثلاً با سه شناسه و سه سکرت، در بدترین حالت ۹ ترکیب وجود دارد.
• یک دام رایج هم هست: گاهی سکرتی که از فایل درمی‌آید، بلندتر از حد واقعی است، چون دنباله‌اش تکه‌ای از داده‌های اطراف آن در فایل است. سکرت واقعی دقیقاً ۲۸ کاراکتر بعد از GOCSPX- است؛ بقیه‌ی رشته را نادیده بگیرید و فقط همان ۲۸ کاراکتر را وارد کنید.
خروجی واقعی یک اجرا: سه شناسه و سه سکرت
خروجی واقعی یک اجرا (مقدارها پوشانده شده‌اند): سه شناسه و سه سکرت — یعنی در بدترین حالت ۹ ترکیب. اگر جفت اول جواب نداد، سراغ ترکیب بعدی بروید.
⚠️ کلاینت شخصی نساز: ساخت اعتبارنامه‌ی شخصی در کنسول گوگل برای این کار جواب نمی‌دهد؛ پروژه‌ی شخصی به سرویس خصوصی Cloud Code دسترسی ندارد و رله خطا می‌دهد. فقط از راه الف یا ب استفاده کنید.

۲ ورود با گوگل

دکمه را بزنید و با همان حسابی که می‌خواهید Relay روی آن کار کند وارد شوید و دسترسی را تایید کنید. حساب رایگان گوگل هم کار می‌کند (آزمایش‌شده) و با اعتبارنامه‌ی رسمی نیازی به اضافه‌کردن تستر نیست. سپس گوگل شما را به یک آدرس localhost می‌فرستد که باز نمی‌شود؛ این طبیعی است. کل آدرس را از نوار آدرس مرورگر کپی کنید و اینجا وارد کنید.

💡 نکته‌ها: کدی که در آدرس است یک‌بارمصرف است و حدود ۱۰ دقیقه اعتبار دارد؛ اگر دیر شد، کافی است دوباره «ورود با گوگل» را بزنید. اگر توکن برنگشت، ابتدا جفت شناسه و سکرت را تغییر دهید. پس از دریافت توکن، مرحله‌ی ۳ همین‌جا باز می‌شود.

رفع اشکال

توکن برنگشت یا خطای ورود آمد

ابتدا نگران نباشید؛ این خطا تقریباً همیشه به این معناست که جفت شناسه و سکرت با هم هماهنگ نیستند، نه اینکه حسابتان مشکلی داشته باشد. دلیل آن این است: در فایل‌های اپ، معمولاً دو شناسه و دو سکرت متفاوت وجود دارد (مربوط به دو کلاینت مختلف گوگل) و فقط یکی از جفت‌ها کلاینت واقعی Antigravity است. دو لیستی که اسکریپت چاپ کرد، هر کدام جداگانه مرتب شده‌اند، پس «اولی با اولی» لزوماً جفت درست نیست؛ فقط وقتی مرحله‌ی ۲ توکن برگرداند، مشخص می‌شود جفت درست را وارد کرده‌اید.

مثال با اسم‌های فرضی (نه کد واقعی): فرض کنید لیست شناسه‌ها این دو مورد است: «شناسه‌ی الف» و «شناسه‌ی ب»، و لیست سکرت‌ها هم این دو مورد است: «سکرت ۱» و «سکرت ۲». پس فقط ۴ ترکیب ممکن است: الف+۱، الف+۲، ب+۱، ب+۲. قاعده‌ی کلی هم همین ضرب است: تعداد ترکیب‌ها برابر است با تعداد شناسه ضربدر تعداد سکرت، پس اگر هر دو لیست ۳ مورد بودند، ۹ ترکیب می‌شود. هر بار یکی را در مرحله‌ی ۱ وارد می‌کنید و «دریافت توکن» را می‌زنید؛ ترکیب‌هایی که جواب نمی‌دهند خطا می‌دهند و رد می‌شوند. همان ترکیبی که توکن برگرداند، جفت درست است و دیگر لازم نیست بقیه را امتحان کنید. اگر همه‌ی ترکیب‌ها را امتحان کردید و هیچ‌کدام توکن نداد، یعنی یا سکرت را ناقص کپی کرده‌اید (سکرت دقیقاً ۲۸ کاراکتر بعد از GOCSPX- است) یا از راه اشتباه استخراج کرده‌اید؛ یک بار دیگر اسکریپت همان راه را اجرا کنید و خروجی را با دقت کپی کنید.

کد منقضی شد (یا خطای کد نامعتبر آمد)

کدی که در آدرس برگشتی است، یک‌بارمصرف است و فقط حدود ۱۰ دقیقه اعتبار دارد؛ یعنی فقط یک بار می‌توان با آن توکن گرفت و پس از ۱۰ دقیقه دیگر معتبر نیست. اگر دیر کردید، یا همان کد را دوبار وارد کردید، این خطا طبیعی است و ربطی به شناسه و سکرت ندارد. راه‌حل آن ساده است: دوباره «ورود با گوگل» را بزنید تا گوگل یک کد تازه بدهد، این بار همان لحظه کل آدرس را کپی کنید و سریع «دریافت توکن» را بزنید. نکته: هر بار که «ورود با گوگل» را می‌زنید، فقط همان کد آخری معتبر است؛ کدهای قبلی خودبه‌خود باطل می‌شوند.

آدرس برگشتی کد نداشت

کل نوار آدرس مرورگر را کپی کنید، نه فقط بخشی از آن. کد بعد از code= می‌آید و تا اولین & ادامه دارد.

پوشه‌ی نصب پیدا نشد

برای 9Router دستور where.exe 9router یا npm root -g مسیر نصب را نشان می‌دهد. برای اپ Antigravity، پوشه‌ی نصب معمولاً زیر %LOCALAPPDATA%\Programs\antigravity است.

بعد از Deploy داشبورد مدل‌ها را نشان نداد

ابتدا مطمئن شوید Deploy کامل شده و وضعیت آن READY است. سپس پسورد داشبورد را به‌درستی وارد کنید. اگر باز هم خطای پروژه مشاهده کردید، توکن را با همان مراحل دوباره بگیرید و متغیرهای محیطی را در Vercel به‌روز کنید و Redeploy بزنید.

به‌روزرسانی رله به نسخه‌ی تازه

داشبورد رله دکمه‌ی «به‌روزرسانی» دارد که نسخه‌ی تازه را از ریپوی اصلی می‌گیرد و در ریپوی شما می‌ریزد. برای اینکه دکمه کار کند، یک بار در متغیرهای محیطی پروژه در Vercel این دو مقدار را بگذارید و یک Redeploy بزنید: GH_SYNC_REPO یعنی ریپوی متصل به همین دیپلوی (مثلاً user/ag-relay، نه ریپوی اصلی) و GH_SYNC_TOKEN یعنی یک توکن گیت‌هاب که فقط به همان یک ریپو دسترسی نوشتن دارد. بعد از آن، از فوتر داشبورد «بررسی به‌روزرسانی» را بزنید و اگر نسخه‌ی تازه بود، «به‌روزرسانی» را تأیید کنید. اگر این دو مقدار را نگذاشته باشید، دکمه می‌گوید آپدیتر تنظیم نشده؛ این خطا نیست، فقط یعنی هنوز تنظیم نشده است.

امنیت

این راهنما طوری ساخته شده که هیچ رازی از مرورگر شما بیرون نمی‌رود، ولی چند راز وجود دارد که خودتان باید مانند رمز حسابتان از آن‌ها محافظت کنید. ابتدا تفاوت آن‌ها را بشناسید:

چه چیزی راز نیست

شناسه و سکرت مرحله‌ی ۱، اعتبارنامه‌ی عمومیِ خود اپ Antigravity هستند؛ همراه فایل‌های نصب منتشر شده‌اند و رمز شخصی شما نیستند. دانستن آن‌ها به‌تنهایی به کسی دسترسی به حسابتان نمی‌دهد.

چه چیزی راز است و چرا

  • توکن گوگل (AG_REFRESH_TOKEN): کلید ورود به سهمیه‌ی Antigravity حساب شماست؛ هر کس آن را داشته باشد می‌تواند با سهمیه‌ی شما مدل صدا بزند. مانند رمز حسابتان نگهش دارید.
  • کلید Relay (RELAY_API_KEY): هر کس این کلید را داشته باشد می‌تواند از رله‌ی شما استفاده کند و سهمیه‌ی شما را مصرف کند.
  • پسورد داشبورد (DASH_PASSWORD): کلید ورود به صفحه‌ی مدیریت رله‌ی شماست.

کجا نگهشان دار

  • فقط در متغیرهای محیطی (Environment Variables) پروژه‌ی Vercel؛ Vercel آن‌ها را رمزنگاری‌شده نگه می‌دارد. هیچ‌وقت آن‌ها را در کد، گیت‌هاب، فایل README یا پیام عمومی ننویسید.
  • این صفحه هیچ مقداری را ذخیره یا ارسال نمی‌کند؛ همه‌ی کارها فقط در مرورگر شما انجام می‌شود. با این حال، پس از پایان نصب، تب را ببندید تا مقادیر از حافظه‌ی موقت مرورگر پاک شوند.
  • حساب گوگلی که برای رله استفاده می‌کنید، بهتر است حساب جداگانه باشد نه حساب اصلی شما؛ این‌طوری اگر روزی رازی لو رفت، فقط همان حساب درگیر است.

حساب پرو و خانواده‌ی گوگل

رله را با حساب اصلی‌تان راه نیندازید؛ یک حساب دوم بسازید. اگر حساب اصلی‌تان Pro دارد، لازم نیست برای حساب دوم هم Pro بخرید: در Google One یک گروه خانواده بسازید، حساب دوم را به آن اضافه کنید و گزینه‌ی «Share Google One with family» را روشن کنید؛ آن‌وقت حساب دوم هم به مزایای هوش مصنوعی پرو، از جمله Antigravity، دسترسی پیدا می‌کند. نکته‌ی مهم: سقف هفتگی Antigravity برای کل خانواده یکی و مشترک است، یعنی حساب دوم سقف جداگانه‌ای نمی‌گیرد و اگر حساب اصلی سقف را مصرف کند، برای حساب دوم چیزی نمی‌ماند. شرط‌ها: همه‌ی اعضا باید در یک کشور باشند، حساب‌ها شخصی باشند (نه کاری یا مدرسه‌ای) و برای Antigravity بالای ۱۸ سال.

اگر چیزی لو رفت، فوری این سه کار را انجام دهید

  1. در حساب گوگل خود دسترسی اپ را قطع کنید: myaccount.google.com → Security → Third-party access و دسترسی مربوط به Antigravity را حذف کن؛ این کار توکن قبلی را باطل می‌کند.
  2. در همین راهنما یک توکن تازه بگیرید و کلید Relay و پسورد داشبورد تازه بسازید.
  3. مقادیر تازه را در Vercel جایگزین کنید و دوباره Deploy بزنید تا مقادیر لو‌رفته دیگر کار نکنند.

هنگام ضبط ویدئو یا اسکرین‌شات

هنگام تدوین، روی توکن، کلید و پسورد را کامل بپوشانید؛ حتی چند فریم لو رفتن کافی است تا کسی آن را بردارد. برای ویدئوی آموزشی امن‌تر است که با یک پروژه‌ی آزمایشی و مقادیر یک‌بارمصرف ضبط کنید و پس از ضبط، آن پروژه را پاک کنید.