00:00:00تعمل Cloudflow على شيء يسمى Artifacts، وهو نظام ملفات موزع
00:00:05متوافق مع Git ومصمم للوكلاء (agents) في المقام الأول، ويسمح لك بإنشاء أو نسخ
00:00:10أو حذف آلاف المستودعات برمجياً، بغض النظر عن حجمها، لمهام مثل
00:00:15مراجعات طلبات السحب (PR) المتوازية، وإعادة هيكلة قواعد الكود الكبيرة، ومساحات عمل الوكلاء لكل جلسة.
00:00:20ولكن بما أن هذا مبني فوق كائنات متينة (durable objects)، هل يعني ذلك أنه يجب عليك استخدام JavaScript
00:00:25وأنه لا يمكنك الوصول إلى أوامر shell لتشغيل Git؟
00:00:28اشترك في القناة لنكتشف ذلك!
00:00:33تم تصميم GitHub للبشر، وليس للوكلاء، مما يعني أنهم لا يحتاجون إلى أي من الجوانب
00:00:37الاجتماعية، مثل المتابعين وبدء النقاشات، لكن الوكلاء بارعون جداً في استخدام Git، فهو موجود في
00:00:42بيانات تدريبهم.
00:00:43لذا، قامت Cloudflare ببناء تطبيق Git أساسي بلغة Zig، وقامت بتجميعه إلى Wasm ووضعته على
00:00:49كائن متين (durable object) ليعمل كخادم Git.
00:00:52في هذه الأثناء، يمكن أن يكون العميل نفسه أي شيء تريده، مثل عامل (worker) يستخدم isomorphic Git
00:00:57داخل عامل أو باستخدام بروتوكول Git وحتى عميل HTTP حتى تتمكن من الاتصال
00:01:03به للأشياء التي لا تستخدم JavaScript.
00:01:05الآن للأسف في وقت تسجيل هذا الفيديو، ليس لدي حق الوصول إلى Artifacts لأنه
00:01:10في مرحلة تجريبية خاصة، ولكن هناك الكثير من الوثائق حوله، مما يعني أنني أستطيع إنشاء عرض توضيحي بـ
00:01:15كود من تلك الوثائق وربما عندما يتم إصداره في النسخة التجريبية العامة يمكنك التحقق
00:01:19مما إذا كان الكود الخاص بي يعمل بالفعل.
00:01:20لذا ما سنفعله هو بناء أداة تأخذ قائمة مهام لمستودع معين
00:01:24وتشغل كل هذه المهام بالتوازي عن طريق نسخ المستودع عدة مرات وتشغيل
00:01:29كل مهمة على ملف الأثر (artifact) الخاص بها في مستودع سحابي على كائن متين.
00:01:34لنرى كيف يعمل هذا.
00:01:35لقد بدأت باتباع الوثائق الخاصة بـ Artifacts في دليل البدء للعاملين (workers)،
00:01:39لذا استخدمت هذا الأمر، والنص هنا بعد هذا الأمر هو مجرد اسم المشروع
00:01:44ويمكن أن يكون أي شيء.
00:01:45لذا اتبعت كل هذه الخطوات، والتي انتهت بمنحي كود العامل الأساسي هذا.
00:01:49والعاملون (workers) لـ Artifacts أكثر كفاءة قليلاً من استخدام REST API لأنهم
00:01:53يقومون بعدد أقل من الرحلات ذهاباً وإياباً.
00:01:55بعد ذلك، ستحتاج إلى إضافة روابط Artifacts إلى ملف wrangle.jsonc أو toml الخاص بك،
00:02:00ثم أعد تشغيل الأنواع.
00:02:02تركز الوثائق هنا على إنشاء مستودع جديد، لذا فهي تستخدم رابط Artifacts
00:02:07مع طريقة الإنشاء واسم المستودع.
00:02:09إنه ينشئ الاسم، مما يمنحه الرمز (token) والبعيد (remote).
00:02:13لذا فالبعيد هو موقع الملف (artifact) والرمز أو رمز المصادقة مطلوب أيضاً
00:02:17لمنحك حق الوصول إليه.
00:02:18وبالطبع يمكنك استخدام بروتوكول git باستخدام البعيد والرمز للتفاعل
00:02:22مع ملف الأثر الخاص بك.
00:02:23لكننا سنفعل شيئاً مختلفاً.
00:02:25بدلاً من إنشاء مستودع جديد تماماً في كائن متين لـ Artifacts، سنقوم أولاً
00:02:29بالتحقق مما إذا كان هناك مستودع موجود يسمى baseline.
00:02:31ثم إذا لم يكن موجوداً، فسنقوم باستيراد مستودع git ثم أعطيته
00:02:35اسم baseline وأعدت تلك القيمة هنا.
00:02:39وبالطبع، إذا راجعت وثائق API الخاصة بربط العاملين، فسترى المزيد من
00:02:43المعلمات التي يمكن إضافتها إلى طريقة الاستيراد.
00:02:45ولكن بعد أن أعدنا المستودع الموجود، يمكننا القيام ببعض الأشياء الرائعة جداً
00:02:49به.
00:02:50إليك المهام التي أود القيام بها على المستودع، وبالطبع قمت بترميزها برمجياً (hard coded)
00:02:53ولكن يمكن إضافتها كمدخل أو نوع من واجهة المستخدم.
00:02:56وهنا داخل التصدير الافتراضي للعامل، لدي حزمة Anthropic SDK بالإضافة إلى
00:03:00مستودع baseline الخاص بي.
00:03:02وسأقوم بالدوران خلال جميع المهام وهنا، أقوم بنسخ المستودع بـ
00:03:06هذا الاسم.
00:03:07ثم لدينا هذه الوظيفة، التي سأمر عليها لاحقاً، لكن هذا يشغل المهمة داخل
00:03:10المستودع المنسوخ ويجعل الوكيل يقوم بإجراء التغيير مع إرجاع ملخص الوكيل.
00:03:15لذا آخر شيء قاله الوكيل، وبعد كل حلقة for، أقوم بإرجاع هذه
00:03:19المعلومات.
00:03:20سأقوم بإدراج اسم المهمة، واسم النسخة، والبعيد، والرمز
00:03:23حتى نتمكن من الوصول إليه وقتما نريد لمعرفة ما إذا كان التغيير جيداً وملخص
00:03:27ما تم إنجازه.
00:03:28لذا في الوقت الحالي، لا تمنحك روابط العاملين القدرة على السحب (pull) والالتزام (commit) والدفع (push).
00:03:33لذا في الكود الخاص بي، اضطررت للقيام بذلك باستخدام isomorphic FET ثم استخدام نظام تخزين في الذاكرة
00:03:38لتخزين التغييرات مؤقتاً.
00:03:39لذا بالعودة إلى كود الوكيل، نقوم بإنشاء نظام الملفات الخاص بنا في الذاكرة، ثم لدينا
00:03:43مطالبة نظام تخبر الوكيل بإجراء التغييرات ذات الصلة ثم الالتزام (commit) بـ
00:03:47الكود الخاص بهم.
00:03:48لذا سنقوم باستنساخ المستودع المنسوخ باستخدام البعيد الذي تم توفيره بالإضافة إلى
00:03:51الرمز.
00:03:52ثم نحدد بعض الأدوات، مثل القراءة والكتابة والالتزام (commit).
00:03:55هنا نختار النموذج ونعطي نموذجنا مطالبة نظام، ثم نمرر المهمة
00:03:59كرسالة مستخدم.
00:04:00وبقية الكود هي حلقة الوكيل القياسية الخاصة بك.
00:04:02لذا إذا كان هناك استدعاء للأداة، توقف عن التفكير وقم بتشغيل استدعاء الأداة، في حالتنا، القراءة أو الكتابة
00:04:07أو الالتزام، والذي يحدث أيضاً لدفع الكود بعد الالتزام.
00:04:10وفائدة وجود ملف أثر (artifact) هي أن كل هذا الكود سيتواجد في الكائن المتين،
00:04:14المخزن في قاعدة بيانات SQLite الخاصة بالكائن، وإذا تعطل الكائن المتين، يمكن استرجاع المعلومات
00:04:20من قاعدة بيانات SQLite في أي لحظة إذا عاد للعمل.
00:04:23ثم هنا بالأسفل، نواصل تفكير النموذج بعد استدعاء الأداة قبل إرجاع
00:04:27أحدث رسالة من النموذج.
00:04:29أعلم أنه من الصعب جداً تصور كل هذا يحدث دون أن أكون قادراً
00:04:32على تشغيل الكود، ولكن نأمل أن تتمكن نوعاً ما من رؤية ما يمكن القيام به باستخدام ملفات الأثر (artifacts) و
00:04:37إمكاناتها الكاملة.
00:04:38تخيل لو كان بإمكانك الحصول على واجهة مستخدم لرؤية كل التغييرات التي تحدث في هذه الملفات
00:04:42ويمكنك التواصل مع وكلاء فرديين أو وكيل تنسيق واحد لإجراء تغييرات
00:04:46على المستودعات المختلفة.
00:04:48وبالحديث عن وكيل التنسيق، يمكننا الحصول على عامل واحد يمكنه تنسيق
00:04:52جميع هذه التغييرات التي تحدث ودمجها في المستودع الرئيسي بعد أن يقوم وكيل المراجعة
00:04:56بمراجعة الكود.
00:04:57يمكننا حتى الجمع بين ملفات الأثر (artifacts) والعاملين الديناميكيين حتى يتمكن الوكلاء من تشغيل الكود الذي
00:05:02قاموا بتغييره لمعرفة ما إذا كان يعمل.
00:05:03وإذا لم يكن كود JavaScript، فيمكننا استخدام بيئات Cloudflare الرملية لتشغيل أي لغة
00:05:07نريدها وحتى تشغيل أوامر shell.
00:05:09ناهيك عن وجود خيار متصفح Cloudflare الذي يشغل متصفح puppeteer لـ
00:05:13النموذج لينظر إليه ويرى ما إذا كان الكود الذي تم تنفيذه صحيحاً إذا كان تغييراً في الواجهة الأمامية.
00:05:18بصراحة، لقد استمتعت كثيراً بالتفكير في إمكانيات ملفات الأثر (artifacts)، على الرغم من أنني
00:05:21لا أستطيع تشغيلها بعد.
00:05:22لكن شيئاً واحداً لاحظته هو عدم وجود أمر git diff.
00:05:25إنه غير مكشوف في واجهة برمجة تطبيقات روابط العاملين أو في isomorphic git.
00:05:30لذا ربما الطريقة الوحيدة للقيام بـ git diff هي من خلال بروتوكول git، أو قد يضيفونه في
00:05:35المستقبل.
00:05:36على أي حال، في الوقت الحالي، إذا كنت تريد القيام بذلك دون استخدام بروتوكول git، أعتقد أنه يمكنك استخدام
00:05:40isomorphic git باستخدام git log للعثور على شجرة git للمضي قدماً والمشي أسفل الشجرة لـ
00:05:45مقارنة الاختلافات.
00:05:46بغض النظر، أعتقد أن هذا إصدار رائع جداً من Cloudflare.
00:05:50وعلى الرغم من وجود أدوات نظام ملفات أخرى مثل S3 files و ZeroFS و JuiceFS التي
00:05:55موجودة بالفعل، لا أعتقد أن هذه الخيارات متوافقة مع git، وهي ميزة رائعة جداً
00:05:59وأكثر ملاءمة للوكلاء.
00:06:01وبالحديث عن S3، إذا كنت ترغب في تشغيله محلياً على جهازك، فراجع
00:06:05هذا الفيديو بواسطة جوش الذي يخبرك بالضبط بكيفية القيام بذلك.