WEBVTT

00:00:00.482 --> 00:00:13.445
أهلًا بك في Getman. في هذا الشرح نتعرّف على استخدامه اليومي… وعلى الطريقة التي يتبادل بها مطوّرو الواجهة الخلفية ومطوّرو الويب، ووكلاء البرمجة لديهم، تغييرات الـ API عبر Git.

00:00:13.796 --> 00:00:21.543
حتى الآن، كان تغيير الواجهة الخلفية يصل إلى فريق الويب في ملف Markdown… وغالبًا بلا أمثلة مُختبَرة.

00:00:21.894 --> 00:00:35.109
مع Getman، يصبح التغيير حزمة تغيير منظّمة، في مستودع Git نفسه الذي يضم الكود: فروق العقد، وأمثلة الطلبات والاستجابات، وملاحظات الترحيل، وأدلة من تشغيلات اختبار حقيقية.

00:00:35.460 --> 00:00:45.628
يقرأ وكلاء البرمجة هذه الحزم ويكتبونها عبر خادم MCP المحلي في Getman. ولا شيء يعمل في السحابة: لا حساب، ولا خادم، ولا اشتراك.

00:00:45.979 --> 00:01:00.493
سنثبّت Getman، ونؤدي أعمال الـ API اليومية، ونرى ما يحفظه في Git، ونربط وكيل برمجة، ثم نتابع تغييرًا حقيقيًا واحدًا من مطوّر الواجهة الخلفية حتى مطوّر الويب. ونختم بحل المشكلات.

00:01:00.843 --> 00:01:13.532
كل ما ستراه حقيقي: واجهة Getman ومحرّكه، وأوامر طرفية فعلية، ووكيل برمجة حقيقي. والبيانات الوحيدة هي Shop API تجريبية صغيرة تعمل على هذا الجهاز.

00:01:14.378 --> 00:01:29.094
أولًا، ثبّت Getman. نزّل النسخة المناسبة لنظامك من إصدار الفريق على GitHub. على Mac، اسحبه إلى Applications. النسخة غير موقّعة بعد، لذلك في المرة الأولى… انقر بالزر الأيمن على Getman واختر Open.

00:01:29.444 --> 00:01:36.860
ولاستخدام سطر الأوامر ووكلاء البرمجة، تحتاج أيضًا إلى Node.js بالإصدار 20 أو أحدث.

00:01:37.210 --> 00:01:50.186
في هذا الشرح نحاكي فريقًا صغيرًا على جهاز واحد. ينشئ هذا السكربت مستودع Git مشتركًا ونسختين منه: واحدة لأليس، مطوّرة الواجهة الخلفية، وواحدة لبوب، الذي يبني تطبيق الويب.

00:01:50.536 --> 00:01:57.483
في الواقع، تتجاوز هذه الخطوة وتستنسخ مستودع فريقك كالمعتاد. لنلقِ نظرة داخل نسخة أليس.

00:01:57.833 --> 00:02:07.214
كود الواجهة الخلفية، وتطبيق الويب، ومجلد getman. هذا المجلد هو مساحة عمل الفريق في Getman، ويُحفظ في Git مثل أي كود آخر.

00:02:07.565 --> 00:02:15.807
تشغّل أليس الـ Shop API. تستمع على المنفذ 4780، ويعيد node تشغيلها كلما تغيّر كودها.

00:02:18.102 --> 00:02:26.828
والآن يفتح بوب Getman لأول مرة. بدلًا من بناء الطلبات يدويًا، يفتح مساحة عمل الفريق: مجلد getman داخل نسخته.

00:02:27.179 --> 00:02:31.153
يحمّل Getman المشروع، وبيئاته، وكل الطلبات المحفوظة.

00:02:31.513 --> 00:02:36.462
على اليسار: المجموعات والمجلدات والطلبات التي يتشاركها الفريق كله.

00:02:36.813 --> 00:02:39.415
وفي الأعلى: المشروع، والبيئة النشطة.

00:02:40.373 --> 00:02:44.552
ويعرض شريط الحالة دائمًا الخادم الذي تذهب إليه طلباتك.

00:02:44.903 --> 00:02:53.531
القيم السرية لا تُحفظ في Git أبدًا. متغير كلمة المرور يصل فارغًا… فيملؤه بوب مرة واحدة، من Environments.

00:02:53.881 --> 00:03:03.680
يكتب كلمة المرور التجريبية. تبقى القيم السرية مخفية، وتُحفظ في التخزين الآمن لهذا الجهاز. وفي تطبيق سطح المكتب، هذا هو keychain النظام.

00:03:07.892 --> 00:03:12.614
لنبدأ العمل اليومي. يفتح بوب طلب Get order من مجلد Orders.

00:03:12.965 --> 00:03:22.581
يستخدم العنوان متغيرات بين قوسين مزدوجين، مثل base_url، ومعامل مسار لرقم الطلب. ثم يضغط Send.

00:03:22.931 --> 00:03:31.891
مئتان، OK. بوب لم يسجّل الدخول أصلًا… ومع ذلك نجح الطلب. هذه هي مصادقة المشروع وهي تعمل.

00:03:32.241 --> 00:03:42.106
الـ Auth في هذا الطلب مضبوط على inherit. المصادقة والترويسات تأتي من المشروع، ثم المجموعة، ثم المجلد، ويمكن لأي مستوى أن يغيّرها.

00:03:42.456 --> 00:03:58.366
في Project settings، قسم Access، يرسل المشروع Bearer token وترويسة X-Client مع كل طلب. وإذا كان الرمز مفقودًا أو مرفوضًا، يشغّل Getman طلب Login أولًا، ويحفظ الرمز الجديد كقيمة سرية، ثم يعيد المحاولة.

00:03:58.716 --> 00:04:06.059
والآن طلب جديد. يضيف بوب Get current user إلى مجلد Orders، ويوجّهه إلى ‎/me.

00:04:06.409 --> 00:04:20.991
لا توجد تحققات بعد، فيفتح Tests. التحققات بلا كود تفحص الحالة، وزمن الاستجابة، وحقول JSON، والترويسات، وأطوال المصفوفات، أو JSON Schema، دون أي سكربت.

00:04:21.341 --> 00:04:30.231
والمستخرجات تأخذ قيمة من الاستجابة وتضعها في متغير، ليستخدمها الطلب التالي في التشغيل. هنا: البريد الإلكتروني للمستخدم.

00:04:30.581 --> 00:04:36.821
ولنرى فشلًا، يتوقع بوب الحالة 201 بدلًا من 200… ويرسل مرة أخرى.

00:04:37.387 --> 00:04:43.737
تبويب Tests في الاستجابة يقول بالضبط ما الخطأ: المتوقَّع 201، والفعلي 200.

00:04:44.087 --> 00:04:47.789
يعيدها إلى 200، ويرسل، ويحفظ بـ Command S.

00:04:48.314 --> 00:04:56.654
البيئات تحدد وجهة الطلبات. يختار بوب Production: يشير العنوان الآن إلى خادم الإنتاج، ويظهر ذلك في شريط الحالة.

00:04:57.004 --> 00:05:04.476
بيئة الإنتاج محمية. إرسال طلب POST، مثل Login، يطلب تأكيدًا أولًا. يلغي بوب، ويعود إلى Local.

00:05:05.321 --> 00:05:15.558
ولتشغيل مجموعة كاملة، استخدم Run collection. يشغّل Getman الطلبات بالترتيب، وينقل المتغيرات من طلب إلى الذي يليه، ويعرض كل تحقّق.

00:05:15.909 --> 00:05:27.773
تحتاج هذا الاستدعاء في كود تطبيق الويب؟ من More ثم Generate code، تحصل على كود Fetch أو Axios، بالمصادقة والترويسات الموروثة. والأسرار تبقى مخفية على الشاشة.

00:05:28.123 --> 00:05:37.287
ويعمل OpenAPI في الاتجاهين. يكتب Export project عقد OpenAPI 3.1، مع تقرير بكل ما استنتجه أو تركه.

00:05:37.638 --> 00:05:44.941
ويقرأ Import ملفات OpenAPI وSwagger، ومجموعات Postman، وأوامر cURL، وملفات HAR.

00:05:47.134 --> 00:05:54.054
ما الذي يُحفظ في Git بالضبط؟ ملفات YAML بسيطة يسهل مراجعتها. هذه بيئة Local من نسخة بوب.

00:05:54.404 --> 00:06:05.329
عنوان الخادم والبريد الإلكتروني مشتركان. أما كلمة المرور والرمز فمعلَّمان كأسرار، وقيمتاهما فارغتان. القيم السرية لا تغادر جهازك أبدًا.

00:06:05.680 --> 00:06:11.143
كل طلب في ملف مستقل، فيُظهر الـ pull request بالضبط أي طلب تغيّر… وكيف.

00:06:11.818 --> 00:06:24.582
يحوي مجلد getman إعدادات المشروع، والبيئات بلا قيم سرية، وملفًا لكل طلب، والعقد الحالي، وحزم التغيير. أما السجل والتبويبات المفتوحة والقيم السرية، فتبقى على جهازك.

00:06:25.503 --> 00:06:31.557
في التطبيق، يبدأ دور Git من عرض Changes. هذه الأيقونة… أو Command Shift G.

00:06:31.908 --> 00:06:40.212
يعرض شريط Git الفرع ونظيره البعيد، وكم commit تتقدّم أو تتأخر، وملفات Getman التي لم تُحفظ في commit بعد.

00:06:40.562 --> 00:06:53.619
Fetch يبحث عن عمل زملائك دون أن يغيّر ملفاتك. وPull يقبل التقديم السريع فقط، ولا يدمج نيابةً عنك أبدًا. وCommit يتيح لك اختيار ملفات Getman، ثم يرسلها Push.

00:06:53.969 --> 00:07:00.518
يخبر بوب Getman أنه المستهلك web. وسيعرض صندوق Inbox التغييرات التي لم يدمجها web بعد.

00:07:01.008 --> 00:07:14.714
Getman يقرأ، وينبّه، ويرفض من تلقاء نفسه… لكن كل عملية Git تحتاج إلى نقرة منك. لا شيء يُرسَل أو يُسحَب وحده. ويبقى الدمج وحل التعارضات في Git، بالأدوات التي تعرفها.

00:07:15.542 --> 00:07:25.366
والآن، وكيل البرمجة. أولًا، ثبّت أداة سطر الأوامر من Project settings، ثم Command line and agents. وهي تتضمن خادم MCP أيضًا.

00:07:25.717 --> 00:07:37.475
يحتوي مستودع الفريق بالفعل على إعداد MCP صغير: يشغّل Claude Code الأمر getman mcp على مجلد getman في المستودع. بلا مسارات مطلقة، فيعمل في كل نسخة.

00:07:37.826 --> 00:07:51.706
تصل الأسرار إلى الوكيل كمتغيرات بيئة اسمها GETMAN_VAR_ يليه اسم المتغير. يصدّر بوب كلمة المرور التجريبية في هذه الطرفية فقط.

00:07:52.056 --> 00:07:54.922
لنسأل Claude Code عمّا يراه عبر Getman.

00:08:01.230 --> 00:08:10.945
اكتشف الوكيل المشروع وبيئاته وطلباته، عبر أدوات Getman. يعرف أن كلمة المرور مضبوطة… لكن الأدوات لا تعيد قيمتها أبدًا.

00:08:11.296 --> 00:08:34.029
هذه هي الأدوات. لا يرى الوكلاء إلا المجلدات التي بدأ بها الخادم، ولا يرون القيم السرية أبدًا. وقبل أي طلب يغيّر البيانات في الإنتاج، يطلب منك Getman الموافقة على ذلك الطلب تحديدًا، داخل تطبيق الوكيل. والوكيل لا يستطيع الموافقة نيابةً عنك. أما وضع Read only فيزيل أدوات الكتابة تمامًا.

00:08:34.858 --> 00:08:45.973
والآن، الحدث الرئيسي: تغيير واحد في الـ API، من الواجهة الخلفية عند أليس إلى تطبيق الويب عند بوب، مع وكيل على كل طرف… وGit بينهما.

00:08:46.324 --> 00:08:49.902
فتحت أليس مساحة عمل الفريق نفسها في Getman لديها.

00:08:51.101 --> 00:09:03.740
هذه المهمة التي تعطيها أليس لوكيلها: أعِد تسمية total إلى total cents، وأضف currency، وحدّث طلب Getman ليطابق ذلك، ثم اجمع التغيير في حزمة وتحقّق منه عبر Getman.

00:09:04.091 --> 00:09:08.335
تشغّل Claude Code في نسختها. راقب أدوات Getman التي يستدعيها.

00:09:19.199 --> 00:09:30.335
عدّل الوكيل الخادم، وفحص الاستجابة الجديدة، وحدّث الطلب، واستدعى create change ثم verify change. وكتب Getman حزمة التغيير… وشغّل الطلب فعليًا.

00:09:30.686 --> 00:09:33.920
في Getman عند أليس، يعرض Changes الحزمة الجديدة.

00:09:35.346 --> 00:09:46.808
لها مرجع ثابت، GT-SHOP-001، والنقطة المتأثرة، وفروق العقد. حُذف total، وأُضيف total cents وcurrency.

00:09:47.159 --> 00:09:59.353
يصنّف Getman الحذف بأنه potentially breaking، لا breaking… لأن مخطط الاستجابة استُنتج من الأمثلة، وهذا دليل ضعيف. وقواعد ذلك موثّقة في Contracts.md.

00:09:59.704 --> 00:10:08.926
وفي الأسفل: ملاحظات الترحيل للمستهلكين، وأدلة من التشغيل الفعلي للوكيل: البيئة، ونسخة العقد، وكل تحقّق.

00:10:09.277 --> 00:10:17.790
المشاركة عبر Git العادي. تحفظ أليس الكود وملفات Getman معًا في commit، ثم ترسلها. Getman لا يفعل ذلك وحده أبدًا.

00:10:18.141 --> 00:10:25.387
ينقر بوب على Fetch. فيجد Getman حزمة تغيير واردة، وملفات الطلبات التي عدّلتها، قبل سحب أي شيء.

00:10:25.738 --> 00:10:33.697
إنها في صندوق Inbox، ومعلَّمة not pulled. يسحب بوب، ويؤكد أن الطلب المعدَّل يمكن أن يحل محل نسخته.

00:10:34.048 --> 00:10:41.831
أصبحت الحزمة كاملة لدى بوب: ما الذي تغيّر، والأمثلة، وملاحظات الترحيل، والأدلة. بلا أي ملف Markdown.

00:10:42.797 --> 00:10:48.009
لكن عميل الويب عنده ما زال يقرأ total… فيفشل اختباره أمام الـ API الجديدة.

00:10:48.360 --> 00:10:51.937
يعطي بوب وكيله مرجع التغيير فقط، وهدفًا واحدًا.

00:11:01.165 --> 00:11:13.106
قرأ الوكيل التغيير عبر MCP، وحدّث العميل واختباره، وشغّل الاختبارات، وأبلغ بأنها verified. ولم يقبل Getman ذلك إلا بعد أن أعاد تشغيل الطلبات على العقد الجديد.

00:11:13.457 --> 00:11:16.021
نجحت اختبارات بوب، فيرسل تغييراته.

00:11:20.773 --> 00:11:26.228
ونعود إلى أليس: Fetch، ثم Pull… والتغيير يقول الآن Integration verified، by web.

00:11:26.991 --> 00:11:36.500
من تغيير في الـ API إلى تكامل مُتحقَّق منه: منظّم، ومُختبَر، ويُشارَك عبر سير عمل Git الذي يستخدمه الفريق أصلًا.

00:11:37.345 --> 00:11:49.345
أخيرًا، أكثر المشكلات التي قد تواجهها. أولًا: قيمة سرية ناقصة. بدون كلمة المرور يفشل تسجيل الدخول، ويخبرك Getman أن طلب الرمز أعاد 401.

00:11:49.696 --> 00:11:59.536
الحل: اضبط القيمة السرية في Environments داخل التطبيق، أو صدّر GETMAN_VAR_password لسطر الأوامر والوكلاء.

00:11:59.887 --> 00:12:05.408
اسم بيئة غير موجود يوقف التشغيل قبل إرسال أي شيء، برمز الخروج 3.

00:12:05.759 --> 00:12:13.783
في بيئة الإنتاج، تُتخطّى الطلبات التي تعدّل البيانات، وينتهي التشغيل بالرمز 4، إلا إذا مرّرت allow mutations عن قصد.

00:12:14.134 --> 00:12:20.788
إذا لم يصل وكيل إلى Getman، شغّل خادم MCP يدويًا. والمجلد الخاطئ يعطيك خطأً واضحًا.

00:12:21.139 --> 00:12:29.683
مشكلة في Git: لنفترض أن دمجًا سيئًا ترك علامات تعارض في ملف تغيير. يكتشفها Validate، ويخبرك كيف تصلحها.

00:12:30.034 --> 00:12:37.265
ويعلّم صندوق Inbox الملف نفسه بأنه يحتاج إلى إصلاح، ويرفض تحميله… فلا يُكتب فوق شيء بصمت.

00:12:37.615 --> 00:12:42.404
أصلحه في Git كالمعتاد. هنا، يستعيد بوب النسخة المحفوظة من الملف.

00:12:42.765 --> 00:12:51.699
وهذه هي القائمة المختصرة. كل ما رأيته في هذا الفيديو، مع الأوامر الدقيقة، موجود في دليل البدء المرفق به. أهلًا بك في الفريق.

