دوز مباشرة للمحتوى الرئيسي
دروس فالذكاء الاصطناعي

كيفاش تدير إصلاحات ديال Issues وPRs فـGitHub مع RepoPilot بالاعتماد على التحقق

تعلّم كيفاش تثبّت RepoPilot، تهيّأ الاختبارات الموثوقة وسياسات المستودع، تراجع طلبات الدمج، تعاود إنتاج المشاكل، تتحقق من الإصلاحات اللي ولّدها Codex، تسيّر المهام، وباختيارك تنشر الإصلاحات المؤهلة فشكل طلبات دمج مسودة، مع بقاء القرار بيد المشرفين على المستودع.

كيفاش تدير إصلاحات Issues وPRs فـGitHub مع RepoPilot

شنو كيدير RepoPilot

RepoPilot هو كونترولور كتستضيفو نتا للتحسين المتكرر ديال البرمجيات بناءً على التحقق. كيحوّل GitHub Issues اللي اخترتي وطلبات السحب من نفس المستودع لسيرورة مضبوطة كتشمل مراجعة القواعد، توليد الاختبارات، إعادة إنتاج الأعطاب، إصلاح الكود، التحقق المستقل، والنشر الاختياري لفرع الإصلاح وطلب سحب مسودة.

المشروع كيستعمل OpenAI Codex SDK باش يفهم قواعد المستودع، يصمم اختبارات مبنية على المتطلبات، ويقترح تغييرات فالكود ديال الإنتاج. رانر مستقل فـ Docker كينفذ الاختبارات على لقطات مثبتة من المستودع. الكونترولور كينشر النتيجة غير إلا دازو الأدلة والإجراءات المطلوبة حسب الإعدادات.

RepoPilot ما كيدمجش التغييرات وما كينشرهاش أوتوماتيكياً. المسؤولين على الصيانة هما اللي كيختارو الخدمة، كيراجعو الأدلة، وكيبقاو هما أصحاب القرار النهائي فالإدماج.

كيفاش كتكون السيرورة مضبوطة

  1. RepoPilot كيثبت الكوميتات الأساسية وكوميتات الرأس المعنية.
  2. كيحمّل سياسة موثوقة من الفرع الأساسي، بما فيها التوجيهات المناسبة ديال AGENTS.md.
  3. Codex كيراجع التغيير وكيقترح اختبارات أو مرشحين للإصلاح.
  4. الاختبارات المتولدة كتتجمد قبل ما يتصلح كود الإنتاج.
  5. رانر مستقل كينفذ الاختبارات على لقطات مستقلة.
  6. الكونترولور كيتحقق من هويات الاختبارات الثابتة، بصمات الفشل، المسارات المحمية، نتائج السياسة، والحدود المضبوطة.
  7. النتيجة المؤهلة تقدر تتحط ففرع مستقل ويتقدم بها طلب سحب مسودة للمراجعة البشرية.

بالنسبة لطلبات السحب، RepoPilot كيقارن السلوك ديال الفرع الأساسي وفرع الرأس. وبالنسبة للـ Issues، كيطلب الأول خط أساس أصلي ناجح، ومن بعد كيحاول يعاود ينتج العطب المبلغ عليه باختبار جديد متجمد قبل ما يقترح الإصلاح.

المميزات الرئيسية والنطاق الحالي

  • مدخلات مثبتة: بصمات SHA ديال الأساس والرأس، وبصمات العنوان والمحتوى، والتحقق من الحداثة، والإلغاء، كيساعدو يمنعو التحقق باستعمال مدخلات قديمة.
  • قواعد موثوقة ديال المستودع: السياسات الثابتة كتدعم التحقق الحرفي وقواعد الاستدعاء ديال JavaScript أو TypeScript. وملفات AGENTS.md المتداخلة فالفرع الأساسي تقدر توجه المراجعة الدلالية.
  • تنفيذ مستقل للاختبارات: الكونترولور كيفوض التنفيذ لرانر مستقل فـ Docker، وما كيعتمدش غير على تقييم النموذج.
  • أنظمة اختبار متعددة: الإصدار 1.3.0 كيدعم رانر الاختبارات ديال Node، وVitest، وpytest، واختبارات Go، وأدلة JUnit XML المتوافقة.
  • دعم المستودعات المتعددة: الإعدادات تقدر تستعمل مجلدات العمل، وأوامر اختبار متعددة بأسماء، وخدمات مؤقتة للتبعيات.
  • إصلاح مضبوط: يمكن تحديد عدد المحاولات، وإعادات المحاولة، واستدعاءات النموذج، والرموز، وتنفيذات المهام، والمدة الإجمالية للمهمة.
  • تقارير قابلة للتتبع: تقارير JSON ذرية وملخصات Markdown مختصرة كتحافظ على النتائج، ومخرجات الاختبارات، والتصحيحات، والمحاولات، وحالة النشر.
  • استرجاع تشغيلي: أوامر المهام كتدعم الفحص، والإلغاء، والاستئناف، وإعادة التشغيل. وتدفق recover كيتعامل مع البقايا ديال الأعطاب اللي مملوكة للنظام عبر المعاينة والتنظيف المتحقق منو.

التنفيذ الحالي موجه للمستودعات العمومية والنصية اللي فيها حتى لـ 10,000 ملف أو 16 MiB. ما كيوفرش تنفيذ طلبات السحب ديال الفروع المتفرعة، ولا اختبارات المتصفح من البداية للنهاية، ولا لوحة تحكم مستضافة، ولا webhooks، ولا طابور موزع، ولا التثبيت الأوتوماتيكي للتبعيات، ولا الدمج الأوتوماتيكي، ولا النشر.

المتطلبات المسبقة

تقدر تحمّل الإصدار المحمول RepoPilot 1.3.0 لنظام Linux أو Windows أو macOS إلا ما بغيتيش تثبت Node.js. وبالنسبة للتثبيت من المصدر، وجد هاد المتطلبات:

  • Node.js 22، وهو الإصدار الموصى به
  • npm وGit
  • Docker مهيأ باش يشغل حاويات Linux
  • مفتاح OpenAI API ملي كتفعل المراجعة أو تخطيط الاختبارات أو الإصلاح المدعوم بـ Codex
  • رمز GitHub ملي كتحتاج الولوج لـ GitHub أو النشر

استعمل إصدارات متطابقة 1.3.0 ديال الكونترولور وصورة Agent. خاص صور Docker وتبعيات المشروع تكون مجهزة من قبل، حيث حاويات الاختبار ما عندهاش الولوج للشبكة افتراضياً.

ثبت RepoPilot من المصدر

1. ثبت المشروع، تحقق منو، وبنيه

من مستودع RepoPilot اللي درتي ليه clone، ثبت التبعيات المقفولة، شغل فحوصات واختبارات المشروع، وبني الكونترولور:

npm ci
npm run check
npm test
npm run build

اختبارات التطوير ديال RepoPilot كتستعمل واجهات API ووكلاء ورانرات مقلدة وتجهيزات اصطناعية. ما كتستهلكش رصيد النماذج، وما كتطلقش Docker، وما كتكتبش محتوى فـ GitHub.

2. صايب إعداداً محلياً

نسخ إعداد المثال المرفق:

cp repopilot.example.json config.local.json

مستعملو PowerShell يقدرو يستعملو Copy-Item بلاصة cp. عدل config.local.json باش تحدد المستودع المستهدف وأمر اختبار موثوق. خلي هاد الإعداد المحلي خارج لقطات المستودع اللي كتراجع.

إعداد المثال كيعطل مراجعة الوكيل، والإصلاح، والنشر. فعل هاد القدرات كل وحدة بوحدها غير من بعد ما يخدم التحقق المحلي مزيان.

3. بني صورة Codex Agent

بني حاوية Agent ملي بغيتي المراجعة الدلالية أو تخطيط الاختبارات أو الإصلاح المدعوم بـ Codex:

docker build -f Dockerfile.agent -t repopilot-agent:local .

حط OPENAI_API_KEY فبيئة الكونترولور. غير حاوية Agent هي اللي كيوصلها. بيانات اعتماد ChatGPT المكتبي ما كتعاودش تستعمل. وبيانات اعتماد GitHub اللي كتدوز عبر GITHUB_TOKEN أو GH_TOKEN كتبقى فالكونترولور.

شغل أول فحص محلي لطلب سحب

بدا بمقارنة محلية بين فرع أساسي وفرع ديال ميزة:

npm run dev -- check --config config.local.json --repo /path/to/project --base main --head feature

بدّل /path/to/project وmain وfeature بالمستودع المحلي ديالك وبالمراجع ديالك. الأمر المحلي check ما كينشرش التغييرات وما كيعدّلش نسخة المصدر المحلية.

كيفاش RepoPilot كيصنّف الاختبارات المُولَّدة

السيناريوهات المُولَّدة كتتصنّف يا إمّا regression يا إمّا new_behavior. التصنيف الافتراضي هو regression.

  • دليل التراجع: نفس حالة الاختبار المنفَّذة كتدوز فالمراجعة الأساسية وكتفشل فمراجعة الرأس.
  • دليل السلوك الجديد: الحالة كتفشل فالمراجعة الأساسية وكتدوز فمراجعة الرأس، والاختبار المقترح فيه اقتباس حرفي لمتطلب من عنوان طلب الدمج ولا من النص ديالو.
  • المراجعة ضرورية: المراجعتان بجوج كيفشلو، ولا الحالة متخطّاة ولا ناقصة، ولا التنفيذ كيفشل، ولا تغيّر اكتشاف الاختبارات، ولا تبدلات نتائج الاختبارات الأصلية بشكل غير متوقع.

التسمية اللي كيعطيها النموذج ما كتقدرش تتجاوز الأدلة اللي كيقدمها المشغّل. التراجعات خاصها تعاود بنفس هويات الاختبارات الفاشلة وبنفس البصمات قبل ما تولّي مؤهلة للإصلاح التلقائي.

راجع طلبات الدمج بشكل مستمر

مراقب RepoPilot كيتفقّد طلبات الدمج اللي ماشي مسودات واللي جاية من نفس المستودع، وكيستثني فروع الإصلاح التلقائي ديالو. شغّل دورة مراقبة وحدة وانت كتصادق على الإعدادات:

npm run dev -- watch --config config.local.json --once

من بعد ما تتأكد من النتائج، شغّل المراقب باستمرار:

npm run dev -- watch --config config.local.json

النشر اختياري وكيحتاج publish=true. خاص رمز GitHub تكون عندو صلاحيات الكتابة على Contents وPull requests ديال المستودع. النشر كينشئ فروع إصلاح تلقائي منفصلة وطلبات دمج فحالة مسودة؛ وما كيديرش force-push ولا الدمج تلقائياً نهائياً.

قبل النشر، RepoPilot كيعيد التحقق من SHA ديال الالتزام ومن وصف طلب الدمج. يمكن إعادة استعمال فرع إصلاح ولا طلب دمج موجود غير إلا كان الأصل ديالو وشجرة الملفات ديالو مطابقين للنتيجة اللي تم التحقق منها.

عاود إنتاج مشكل فـ GitHub وصلحو

إصلاح المشكل كيتختار بشكل صريح من طرف المسؤول على الصيانة. باش تعالج Issue 123، شغّل:

npm run dev -- fix --issue 123 --config config.local.json

مسار معالجة المشكل كيدوز من ثلاث مراحل رئيسية:

  1. ثبّت خط الأساس: الاختبارات الموجودة خاصها تدوز فالمراجعة المستهدفة المثبّتة.
  2. عاود إنتاج الخلل: RepoPilot كيولّد وكيجمّد اختبار مربوط بوصف المشكل. الاختبار الجديد خاصو يعاود ينتج الفشل اللي تم الإبلاغ عليه.
  3. جرّب الإصلاح وتحقق منو: Codex كيقترح تعويضات فالكود، والمشغّل المستقل كيفحص الاختبار المُولَّد والمجمّد، والمجموعة الأصلية ديال الاختبارات، وسياسة المستودع.

الأدلة غير الكافية ولا غير المستقرة ولا الناقصة كتوقف المسار باش يدوز للمراجعة البشرية. RepoPilot ما كيختارش Issues بشكل مستقل، وما كيحدّدش خارطة طريق للمنتج، وما كيدمجش الإصلاح الناتج.

زِد سياسة موثوقة للمستودع

دير commit للملف .repopilot/policy.json فالفرع الأساسي المستهدف. مثلاً، القاعدة التالية كترفض اختبارات JavaScript وTypeScript المعطّلة:

{
  "rules": [
    {
      "id": "no-disabled-tests",
      "kind": "forbid-call",
      "extensions": [".ts", ".js"],
      "callee": "test.skip",
      "message": "Keep regression tests enabled.",
      "severity": "error"
    }
  ],
  "exceptions": []
}

أنواع القواعد الساكنة المدعومة كتشمل forbiddenText وforbid-call وrequire-call. قواعد الاستدعاء كتفحص الاستدعاءات المباشرة، والاستدعاءات المؤهلة، والوصول لخصائص السلاسل النصية. ما كتحدّدش الأسماء البديلة وما كتديرش تحليلاً على مستوى البرنامج كامل. القواعد الحرفية تقدر حتى هي تطابق التعليقات.

استثناءات السياسة تقدر تحدّد ruleId والمسار الدقيق والسبب والطابع الزمني لانتهاء الصلاحية بتوقيت UTC، ودليل دقيق اختياري. الاستثناءات كتكون موثوقة غير إلا جات من السياسة الأساسية، والاستثناءات اللي سالات الصلاحية ديالها ما كتخبيش النتائج.

إلى تداخلات قواعد مطلوبة مع قواعد ممنوعة، كتتوقف المراجعة. طلبات الدمج اللي كتعدّل ملفات القواعد الموثوقة كتحتاج مراجعة من المسؤول على الصيانة، وما كتقدرش تأذّن بإصلاحاتها الخاصة.

ضبط أدلة الاختبارات بعناية

المبلّغ الافتراضي هو node وكيستعمل node --test. بنِ RepoPilot أولاً باش يكون المبلّغ الموثوق متاحاً. بالنسبة لـ Vitest، ضبّط reporter=vitest واستعمل أمر vitest run صريح داخل صورة موثوقة فيها الاعتماديات مثبّتة الإصدارات.

  • خيارات المبلّغ كتخص المتحكّم وماشي أمر الاختبار غير الموثوق.
  • reporter=command كيجمع المخرجات فقط وما كيقدرش يدعم التحقق ولا النشر.
  • إلى ما حدّدتيش المشغّل، كتنتج مراجعة خاصة بالسياسة فقط، وكتتسجّل الاختبارات بحالة not_run.
  • صفر ديال الاختبارات، أو اختبارات كاملين متخطّيين، أو تقارير غير صالحة، أو هويات اختبارات ناقصة، عمرهم كيتحسبو ناجحين.
  • خدمات الاعتماديات المضبوطة كتستعمل شبكة Docker داخلية مؤقتة.

بالنسبة للاختبارات المُولَّدة اللي فيها exports ما كايناش فالمراجعة الأساسية، تحقّق من هاد exports داخل حالات الاختبار اللي كتتنفّذ. export ناقص ما خاصوش يطيّح استيراداً علوياً قبل ما يتجمع الدليل المنظّم.

تدبير المهام الجارية والمكمّلة

RepoPilot كيخزّن التقارير واللقطات تحت .repopilot-data. كل مهمة كتتوصل بدليل بصيغة JSON وملخّص بصيغة Markdown. التنفيذات المعاودة كتأرشف الأدلة السابقة بأسماء بحال TASK.execution-N.json.

فحص المهام وإلغاؤها

npm run dev -- tasks list --config config.local.json --status running --limit 20 --offset 0
npm run dev -- tasks show TASK_ID --config config.local.json --format markdown
npm run dev -- tasks cancel TASK_ID --config config.local.json

بقاو متاحين عمليات عرض اللائحة، العرض، والإلغاء ديال المهام مادام الكونترولر شاد قفل الكتابة. الإلغاء كينشئ طلب دائم كيتراقب أثناء التحقق والنشر. وما كيقدرش يرجّع تغييرات GitHub اللي تكملات من قبل.

كمّل ولا عاود شغّل الخدمة

npm run dev -- tasks resume TASK_ID --config config.local.json
npm run dev -- tasks rerun TASK_ID --config config.local.json

resume كيخلي نفس هوية المهمة، الإعدادات، والحدود. على حساب الحالة، كيعاد تشغيل التحقق ولا كيكمل النشر ديال مهمة راه متحقق منها. rerun كينشئ مهمة مربوطة باستعمال نفس الـ commits المثبتين والإعدادات الحالية، مع الحفاظ على التقارير القديمة وعلامات الإلغاء.

المهام الدائمة، النهائية، ولا اللي سالاو المحاولات ديالها خاصها إعادة التشغيل. وإعادة التشغيل كتحتاج حتى للمستودع المحلي المسجل ولا Git cache، ومدخلات pull request كيتعاود التحقق منها أثناء إعادة التشغيل.

نصائح تشغيلية متقدمة

استعمل حدود محافظة

ضبط قيم محدودة للمهلة ديال المهمة، وmaxCalls، وmaxAttempts، وmaxTaskExecutions، واستعمال التوكنات. قيمة maxTokens كتحسب انطلاقاً من الاستعمال اللي كيتسجل من بعد كل استدعاء للنموذج، وبهذا يقدر استدعاء واحد يفوتها. ما خاصهاش تعتبر سقفاً صارماً للمصاريف.

فرّق بين أعطاب البيئة

RepoPilot كيصنّف الأعطاب وكيطبق إعادات محدودة على مستوى المراحل للمشاكل البيئية المؤهلة. الاختبارات غير المستقرة، الاكتشاف اللي كيتبدل، ولا الأدلة الناقصة كيوقفو الإصلاح التلقائي بلا ما يتعاملو معاهم كعيوب مؤكدة فالكود.

حافظ على سلسلة الأدلة

خاص مرشحي الإصلاح يحافظو على هويات الاختبارات المولدة ويدوزو الـ base الأصلي، والـ head الأصلي، والحالات المولدة حسب ما كيتطلب سير العمل. الاختبارات الموجودة، والـ manifests، والإعدادات، والسياسات، والمسارات المخفية محميين. فحوصات السياسات الثابتة والدلالية كتعاد من بعد إصلاح أي مرشح.

رجع للخدمة بحذر من بعد التوقف المفاجئ

الإصدار 1.3.0 فيه سير عمل recover باش تعاين وتنقّي بشكل صريح الموارد اللي مملوكة للمهام اللي توقفات بشكل مفاجئ. تأكد باللي العملية القديمة وقفات قبل ما تحيد الأقفال القديمة. الأقفال والموارد القديمة يقدرو يحتاجو فحص يدوي.

فهم حدود الثقة

الكونترولر، والتقارير، والـ runner كيخدمو فالجهاز ديالك ولا عند العامل، ولكن استدعاءات نموذج Codex كتستعمل خدمات OpenAI وكتصيفط نصوص مختارة من المستودع وسياق المهمة. الاستضافة الذاتية ديال RepoPilot ما كتوفّرش استدلالاً محلياً بلا إنترنت.

تنفيذ الاختبارات كيوفر أدلة هندسية، وماشي إثباتاً محمياً ضد التلاعب فمواجهة كود خبيث. الروابط الرمزية، والـ submodules، والملفات الثنائية، والمسارات اللي كتتصادم غير فحالة الأحرف كيتسدّو بأمان. راجع إرشادات الأمان ديال المشروع قبل ما تنفذ مستودعات ما موثوقاش.

الخلاصة

RepoPilot كيجمع بين المراجعة والإصلاح بمساعدة Codex، والمدخلات المثبتة، والاختبارات المجمدة، والتنفيذ المستقل داخل Docker، وسياسة المستودع، وإعادات المحاولة المحدودة، والأدلة الدائمة. بدا بـ check محلي بلا نشر، وتحقق من إعدادات المبلّغ والسياسة ديالك، ومن بعد زِد المراقبة، وإصلاح Issues، ونشر pull requests مسودات غير ملي توصل الأدلة للمعايير ديال الفريق ديالك.