অ্যান্টিগ্র্যাভিটি সিএলআই এবং এসডিকে ব্যবহার করে এআই-সহায়তায় কোডের মান পর্যালোচনা

১. ভূমিকা

ভাইব কোডিং—যা স্বাভাবিক ভাষার নির্দেশনা অনুযায়ী কোড লেখার জন্য এআই এজেন্ট ব্যবহার করে—ডেভেলপারের ভূমিকাকে লেখক থেকে সমন্বয়কারী এবং পর্যালোচকে রূপান্তরিত করে। আমরা নিখুঁত প্রেক্ষাপট তৈরির উপর নির্ভর করি এবং এআই এজেন্টদের উপর আস্থা রাখি যে তারা আমাদের জন্য সবকিছু করে দেবে; এর মধ্যে থাকতে পারে স্পেসিফিকেশন ডকুমেন্ট তৈরি করা থেকে শুরু করে কোডটি সমস্ত প্রয়োজনীয়তা পূরণ করছে কি না, তা নিশ্চিত করা পর্যন্ত। ঝুঁকিটি হলো: দ্রুত পুনরাবৃত্তির চক্রে, পুঙ্খানুপুঙ্খ নিরাপত্তা পর্যালোচনা ছাড়াই কার্যকরী কোড অনুমোদিত হয়ে যায়। আধুনিক এজেন্টরা প্রায়শই ডিফল্টভাবে নিরাপদ কোড তৈরি করে, কিন্তু "প্রায়শই" মানে "সর্বদা" নয়, এবং জমে থাকা দুর্বলতাগুলো ম্যানুয়াল পর্যালোচনা এড়িয়ে যায়।

এই কোডল্যাবটি অ্যান্টিগ্র্যাভিটিকে রিভিউয়ার হিসেবে ব্যবহার করার দুটি পদ্ধতি শেখানোর মাধ্যমে সেই সমস্যাগুলোর সমাধান করে: ডেভেলপমেন্টের সময় CLI-এর মাধ্যমে ইন্টারেক্টিভভাবে (আপনি রিভিউ করবেন, সমাধান করবেন, তারপর PR করবেন), এবং কন্টিনিউয়াস ইন্টিগ্রেশনে SDK-এর মাধ্যমে স্বয়ংক্রিয়ভাবে (এজেন্ট প্রতিটি পুল রিকোয়েস্ট রিভিউ করে এবং ফলাফল কমেন্ট হিসেবে পোস্ট করে)।

আপনি যা অন্বেষণ করবেন

আপনি নিজের মতো করে একটি লিডস সিআরএম অ্যাপ কোড করেছেন — একটি এআই এজেন্ট আপনার জন্য এর সম্পূর্ণ স্ট্যাকটি তৈরি করে দিয়েছে: এক্সপ্রেস ব্যাকএন্ড, এসকিউলাইট ডাটাবেস, রিয়্যাক্ট ফ্রন্টএন্ড। এটি কাজ করছে। এরপর আপনি এজেন্টকে দুটি নতুন ফিচার যোগ করতে বললেন: একটি লিড সার্চ ফাংশন এবং অ্যাডমিন স্ট্যাটস সহ বাল্ক ইম্পোর্ট/এক্সপোর্ট। এজেন্ট দ্রুত দুটি ফিচারই সরবরাহ করেছে। কোডটি চলছে, ফিচারগুলো কাজ করছে, এবং পিআরগুলোও প্রস্তুত।

কিন্তু সমস্যাটা হলো: আপনি এই কোডটি লেখেননি। আপনি এটি অনুমোদন করেছেন। আপনি কীভাবে জানবেন যে সার্চ এন্ডপয়েন্টটি SQL ইনজেকশনের ঝুঁকিতে নেই? আপনি কীভাবে জানবেন যে অ্যাডমিন রুটে কোনো হার্ডকোডেড পাসওয়ার্ড নেই? আপনি জানেন না — এবং AI-দ্বারা তৈরি কোডের প্রতিটি লাইন পড়া সেই গতির সুবিধাকে নষ্ট করে দেয়, যা আপনাকে প্রথম থেকেই এই কাজে উৎসাহিত করেছিল।

এই কোডল্যাবটি আপনাকে এটি সমাধান করার দুটি উপায় দেখায়:

  • কেস ১ – ইন্টারেক্টিভ রিভিউ : দুর্বলতাযুক্ত একটি ফিচার ব্রাঞ্চ চেক আউট করুন, এজেন্ট স্কিল দ্বারা উন্নত Antigravity CLI ব্যবহার করে ডিফারেন্স পর্যালোচনা করুন, সমস্যাগুলো সমাধান করুন এবং একটি ত্রুটিমুক্ত পিআর (PR) তৈরি করুন।
  • কেস ২ – স্বয়ংক্রিয় পর্যালোচনা : অ্যান্টিগ্র্যাভিটি এসডিকে দ্বারা চালিত একটি গিটহাব অ্যাকশন সেট আপ করুন যা স্বয়ংক্রিয়ভাবে পিআর (PR) পর্যালোচনা করে, কাঠামোগত পর্যবেক্ষণগুলো মন্তব্য হিসেবে পোস্ট করে এবং ডেভেলপাররা পর্যালোচনার বিষয়ে ফলো-আপ প্রশ্ন করলে তার উত্তর দেয়।

8e05b6954f30ee3b.jpeg

আপনি যা শিখবেন

  • কীভাবে ভাইব কোডিং নিরাপত্তা ঝুঁকি তৈরি করতে পারে এবং কেন স্বয়ংক্রিয় পর্যালোচনা এমন কিছু ধরে ফেলে যা ম্যানুয়াল পর্যালোচনায় বাদ পড়ে যায়
  • অ্যান্টিগ্র্যাভিটি সিএলআই-কে গভীর নিরাপত্তা ও কোড পর্যালোচনার দক্ষতা প্রদানের জন্য কমিউনিটি-পরিচালিত এজেন্ট স্কিলগুলো কীভাবে ইনস্টল ও ব্যবহার করবেন
  • ফিচার ব্রাঞ্চের ডিফারেন্স পর্যালোচনা করতে, দুর্বলতা দূর করতে এবং একটি ত্রুটিমুক্ত পিআর তৈরি করতে কীভাবে ইন্টারেক্টিভভাবে সিএলআই ব্যবহার করবেন
  • ডিক্লারেটিভ সেফটি পলিসি এবং লাইফসাইকেল হুক ব্যবহার করে কীভাবে একটি রিড-অনলি কোড রিভিউ এজেন্ট তৈরি করা যায়
  • কীভাবে রিভিউ এজেন্টকে একটি গিটহাব অ্যাকশন হিসেবে স্থাপন করা যায় যা পিআর (PR) পর্যালোচনা করে এবং ফলাফলটি পিআর কমেন্ট হিসেবে পোস্ট করে।

পূর্বশর্ত

  • একটি গুগল ক্লাউড অ্যাকাউন্ট
  • একটি গিটহাব অ্যাকাউন্ট
  • টার্মিনাল, ভার্সন কন্ট্রোল এবং CI/CD সম্পর্কে প্রাথমিক ধারণা

২. পরিবেশ সেটআপ

এই ধাপে Leads CRM অ্যাপ রিপোটি ফর্ক করা হয়, ক্লাউড শেলে এটি ক্লোন করা হয়, Antigravity CLI সেটআপ করা হয় এবং প্রমাণীকরণ সম্পন্ন করা হয়।

রিপোজিটরিটি ফর্ক করুন

আপনার রিপোটির নিজস্ব একটি কপি প্রয়োজন হবে, কারণ আপনি গিটহাব অ্যাকশনস ব্যবহার করে কমিট পুশ করবেন এবং পিআর (PR) তৈরি করবেন।

নিম্নলিখিত সংগ্রহস্থলে যান

এরপর, Fork-এ ক্লিক করুন। ফর্ক তৈরির পেজে, "Copy the main branch only" চেকবক্সটি আনচেক করুন — আপনার ফর্কে অন্যান্য ফিচার ব্রাঞ্চগুলোও ( feature/lead-search এবং feature/bulk-operations ) অন্তর্ভুক্ত থাকা প্রয়োজন।

3f996e391d2d5cf4.png7e4089174c2adb07.png

ওপেন ক্লাউড শেল

আপনার ব্রাউজারে ক্লাউড শেল খুলুন। ক্লাউড শেল এই কোডল্যাবের জন্য আপনার প্রয়োজনীয় সমস্ত সরঞ্জাম সহ একটি পূর্ব-কনফিগার করা পরিবেশ প্রদান করে। অনুরোধ করা হলে অনুমোদন করুন (Authorize) বোতামে ক্লিক করুন।

এরপর টার্মিনাল খোলার জন্য " ভিউ " -> " টার্মিনাল "-এ ক্লিক করুন। আপনার ইন্টারফেসটি দেখতে এইরকম হবে।

86307fac5da2f077.png

এটাই হবে আমাদের মূল ইন্টারফেস, উপরে IDE, নিচে টার্মিনাল।

গিটহাবের মাধ্যমে প্রমাণীকরণ করুন

ডিফল্টরূপে, ক্লাউড শেলে গিটহাব ক্রেডেনশিয়াল কনফিগার করা থাকে না, তবে এতে আগে থেকেই gh CLI ইনস্টল করা থাকে। অথেনটিকেশন সেট আপ করুন যাতে আপনি পরে কমিট পুশ করতে এবং পিআর তৈরি করতে পারেন:

gh auth login

303f60fa2e73b305.png

Github.com নির্বাচন করুন

97e55d4bb4a167af.png HTTPS নির্বাচন করুন (অথবা আপনি যদি অন্য কোনো পদ্ধতিতে আগে থেকেই পরিচিত হন, তবে নির্দ্বিধায় সেটিই বেছে নিতে পারেন)।

561493764dbe64ef.png

তারপর, Y বেছে নিন।

ed05929c1bcb731.png

তারপর, Login with a web browser নির্বাচন করুন।

ব্রাউজারে লগইন পেজ খোলার সময় আপনাকে ওয়ান-টাইম কোডটি কপি করে প্রবেশ করাতে বলা হবে। আপনি টার্মিনালে Ctrl + Click https://github.com/login/device ইউআরএলটি খুলতে পারেন। সেখানে আপনাকে লগইন করার জন্য অ্যাকাউন্টটি নির্বাচন করতে এবং কোডটি প্রবেশ করাতে বলা হবে।

915314584db6766d.png

এরপরে, ক্লাউড শেল কনসোল পৃষ্ঠায় ফিরে যান এবং আপনি টার্মিনাল আউটপুটটি এইরকম দেখতে পাবেন।

✓ Authentication complete.
- gh config set -h github.com git_protocol https
✓ Configured git protocol
! Authentication credentials saved in plain text
✓ Logged in as alphinside-joonix

এর মানে হলো, আপনি ক্লাউড শেলে আপনার গিটহাব অ্যাকাউন্টের প্রমাণীকরণ সফলভাবে সেট আপ করেছেন।

আপনার ফর্ক করা রিপোজিটরি ক্লোন করুন

এরপর, আপনার ফর্ক করা রিপোজিটরিটি ক্লোন করুন। <YOUR_GITHUB_USERNAME> এর জায়গায় আপনার GitHub ইউজারনেমটি বসান:

git clone https://github.com/<YOUR_GITHUB_USERNAME>/leads-crm-app-demo.git
cloudshell workspace leads-crm-app-demo && cd leads-crm-app-demo

ফিচার শাখাগুলি যাচাই করুন

এরপরে, যাচাই করুন যে প্রি-বিল্ট ভালনারেবিলিটি সহ উভয় ফিচার ব্রাঞ্চই রিমোটে উপলব্ধ আছে কিনা:

git branch -a | grep feature/

আপনি নিম্নলিখিত আউটপুট দেখতে পাবেন।

remotes/origin/feature/bulk-operations
remotes/origin/feature/bulk-operations-solution
remotes/origin/feature/email-composer
remotes/origin/feature/lead-search

অ্যান্টিগ্র্যাভিটি CLI যাচাই করুন

এরপর, চলুন যাচাই করে নিই যে ক্লাউড শেলে অ্যান্টিগ্র্যাভিটি সিএলআই আগে থেকেই ইনস্টল করা আছে কি না। এটি উপলব্ধ আছে কি না তা যাচাই করুন:

agy --version

আপনার ইনস্টল করা Antigravity CLI-এর ভার্সনটি দেখা উচিত, যেমন 1.0.13

এখন, আপনি যদি এখনও Antigravity CLI-কে প্রমাণীকরণ না করে থাকেন, তাহলে প্রমাণীকরণ প্রক্রিয়াটি আরও বিস্তারিতভাবে দেখতে এই কোডল্যাবে যেতে পারেন।

এই পর্যায়ে আপনার কাছে নিম্নলিখিত জিনিসগুলো থাকা উচিত:

  • ফর্ক করা রিপো ক্লোন করা হয়েছে
  • উভয় বৈশিষ্ট্য শাখা দৃশ্যমান
  • agy কমান্ড উপলব্ধ এবং প্রমাণীকৃত

৩. সমস্যা – ভাইব-কোডেড ফিচারের মধ্যে লুকিয়ে থাকা দুর্বলতা

পরিস্থিতিটি হলো: আপনার একজন টিমমেট একটি এআই এজেন্ট ব্যবহার করে লিডস সিআরএম অ্যাপে দুটি ফিচার যোগ করেছেন — একটি লিড সার্চ ফাংশন এবং বাল্ক ইম্পোর্ট/এক্সপোর্ট অপারেশন। দুটি ফিচারই কাজ করে। নিরাপত্তা পর্যালোচনা ছাড়াই দ্রুত দুটিই চালু করা হয়েছিল। মার্জ করার আগে আপনি দুটি ব্রাঞ্চই পর্যালোচনা করবেন — একটি সিএলআই (CLI) ব্যবহার করে ইন্টারেক্টিভভাবে, এবং অন্যটি একটি গিটহাব অ্যাকশন (GitHub Action) এর মাধ্যমে স্বয়ংক্রিয়ভাবে।

প্রথম ফিচার ব্রাঞ্চটি পরীক্ষা করুন

feature/lead-search এর পার্থক্য পর্যালোচনা করুন:

git diff main...origin/feature/lead-search

এই ব্রাঞ্চে একটি সার্চ এন্ডপয়েন্ট যোগ করা হয়েছে। ডিফারেন্সটি ভালোভাবে দেখুন — আপনি SQL কোয়েরিতে স্ট্রিং সংযুক্তি, ইনপুট ভ্যালিডেশনের অভাব, ডিবাগ লগিং থেকে কোয়েরির বিস্তারিত তথ্য ফাঁস হওয়া, এবং ক্লায়েন্টের কাছে সরাসরি এরর মেসেজ চলে আসার মতো সমস্যাগুলো দেখতে পাবেন।

+  app.get("/api/leads/search", (req, res) => {
+    const query = req.query.q as string;
+
+    if (!query) {
+      return res.status(400).json({ error: "Search query is required" });
+    }
...

দ্বিতীয় ফিচার ব্রাঞ্চটি পরীক্ষা করুন

git diff main...origin/feature/bulk-operations

এই ব্রাঞ্চে বাল্ক ইম্পোর্ট/এক্সপোর্ট এন্ডপয়েন্ট এবং একটি অ্যাডমিন স্ট্যাটিস্টিকস ড্যাশবোর্ড যুক্ত করা হয়েছে। এখানকার দুর্বলতাগুলোর মধ্যে রয়েছে হার্ড কোডেড অ্যাডমিন ক্রেডেনশিয়াল, প্রমাণীকরণবিহীন অ্যাডমিন এন্ডপয়েন্ট, বাল্ক ইম্পোর্টে ইনপুট ভ্যালিডেশনের অভাব এবং এক্সপোর্ট ফাইলের নাম হ্যান্ডলিং-এ পাথ ট্র্যাভার্সাল ঝুঁকি।

...
+  const ADMIN_PASSWORD = "admin123";
+
+  app.post("/api/admin/import", (req, res) => {
+    const { password, leads } = req.body;
+
+    if (password !== ADMIN_PASSWORD) {
+      return res.status(401).json({ error: "Invalid admin password" });
+    }
...

উভয় ব্রাঞ্চেই কার্যকরী ফিচার যোগ করা হয়েছে। দুটিতেই নিরাপত্তাজনিত সমস্যা রয়েছে। প্রশ্ন হলো, কীভাবে সেগুলো শনাক্ত করা যায় — ম্যানুয়ালি CLI ব্যবহার করে (কেস ১) নাকি স্বয়ংক্রিয়ভাবে একটি GitHub Action-এর মাধ্যমে (কেস ২)।

৪. কেস ১ : অ্যান্টিগ্র্যাভিটি সিএলআই সহ ইন্টারেক্টিভ পর্যালোচনা

ভাইব-কোডিং সেশনের ঠিক পরেই ইন্টারেক্টিভ CLI রিভিউ সবচেয়ে মূল্যবান, বিশেষ করে আপনার সদ্য লেখা কোড অথবা আপনার সতীর্থের পুল রিকোয়েস্ট পর্যালোচনা করার ক্ষেত্রে। ভাইব-কোডিংয়ের কথা বললে, একটি AI এজেন্ট দ্রুত আপনার ফিচার কোড তৈরি করে দেয় — কিন্তু এর তৈরি করা প্রতিটি লাইন আপনি হয়তো পুরোপুরি বুঝতে পারবেন না, এবং ফিচারটি ডেভেলপ করার সময়কার কনটেক্সট কনফিগারেশনের উপর নির্ভর করে এজেন্টটি হয়তো কার্যকারিতার জন্য অপ্টিমাইজ করা থাকে, নিরাপত্তার জন্য নয়।

এই পরিস্থিতিতে, আমাদের কাছে নিরাপত্তা দুর্বলতাযুক্ত কোড রয়েছে এবং আমরা ইন্টারেক্টিভভাবে কোডটি পর্যালোচনা করার জন্য কোড রিভিউ দক্ষতা সহ অ্যান্টিগ্র্যাভিটি সিএলআই (Antigravity CLI) ব্যবহার করব। এই ‘এজেন্ট-রিভিউস-এজেন্ট’ প্যাটার্নটি সেইসব দুর্বলতা ধরে ফেলে যা ডেভেলপারের ভূমিকা কোড লেখা থেকে এআই-জেনারেটেড কোড অনুমোদনে পরিবর্তিত হওয়ার সময় চোখ এড়িয়ে যায়। এটি আপনার নিজের হাতে লেখা কোড বা কোনো টিমমেটের ব্রাঞ্চ সিআই (CI)-এর মধ্য দিয়ে যাওয়ার আগে পর্যালোচনা করার ক্ষেত্রেও প্রযোজ্য। কথোপকথনটি আপনিই নিয়ন্ত্রণ করেন: এজেন্টকে নির্দিষ্ট ফাইলগুলিতে মনোযোগ দিতে, কোনো ত্রুটি আরও গভীরভাবে খতিয়ে দেখতে, বা অবিলম্বে সমাধান প্রয়োগ করতে বলতে পারেন।

এজেন্ট স্কিল ছাড়াও অ্যান্টিগ্র্যাভিটি সিএলআই কোড পর্যালোচনা করতে পারে — কিন্তু এটি তার সাধারণ প্রশিক্ষণ জ্ঞানের উপর নির্ভর করে, যার ফলে ডোমেইন-নির্দিষ্ট প্যাটার্নগুলো বাদ পড়ে যেতে পারে অথবা বিভিন্ন সেশনে অসঙ্গত পর্যালোচনার মানদণ্ড প্রয়োগ হতে পারে। এজেন্ট স্কিল এজেন্টকে একটি সুসংগঠিত প্লেবুক প্রদান করে: গুণমানের জন্য ফাইভ-অ্যাক্সিস রিভিউ এবং অগ্রাধিকার নির্ধারণের জন্য সেভিয়ারিটি লেবেলিং। আপনি আপনার প্রম্পট যেভাবে প্রকাশ করুন না কেন, পর্যালোচনাটি পুনরাবৃত্তিযোগ্য এবং পুঙ্খানুপুঙ্খ হয়ে ওঠে।

এই ধাপে এজেন্ট স্কিলসহ অ্যান্টিগ্র্যাভিটি সিএলআই ব্যবহার করে feature/lead-search ব্রাঞ্চটি পর্যালোচনা করা হয়, দুর্বলতাগুলো সমাধান করা হয় এবং একটি ত্রুটিমুক্ত পিআর (PR) তৈরি করা হয়।

ফিচার ব্রাঞ্চটি দেখুন

প্রথমে, চলুন আমাদের ব্রাঞ্চটি কেস ১ ব্রাঞ্চে পরিবর্তন করি:

git checkout feature/lead-search

এরপরে, রিভিউ করার জন্য এজেন্ট স্কিল দিয়ে আমাদের অ্যান্টিগ্র্যাভিটি সিএলআই আপগ্রেড করা যাক।

এজেন্টের দক্ষতা কী?

স্কিল হলো ডিক্লারেটিভ মার্কডাউন ফাইল যা এজেন্টকে বিশেষায়িত দক্ষতা প্রদান করে। একবার ইনস্টল হয়ে গেলে, এগুলো স্ল্যাশ কমান্ডে পরিণত হয় (যেমন, /code-review-and-quality )। এগুলোকে এমনভাবে ভাবা যেতে পারে যেন একটি সাধারণ এজেন্টকে একজন সিনিয়র ইঞ্জিনিয়ারের সিকিউরিটি প্লেবুক দেওয়া হচ্ছে।

স্কিলগুলো বিভিন্ন এজেন্টের (অ্যান্টিগ্র্যাভিটি, ক্লড কোড, কার্সর, ইত্যাদি) মধ্যে স্থানান্তরযোগ্য এবং গিট (Git)-এর মাধ্যমে শেয়ার করা যায়। অ্যান্টিগ্র্যাভিটি সিএলআই (CLI)-এর ক্ষেত্রে, ওয়ার্কস্পেস (প্রজেক্ট/লোকাল) স্কিলগুলো প্রজেক্ট রুটের .agents/skills/ ফোল্ডারে থাকে। অপরদিকে, গ্লোবাল স্কিলগুলো ~/.gemini/config/skills/ ফোল্ডারে থাকে। এই ডকুমেন্টেশনে আরও বিস্তারিত দেখুন।

এজেন্টের দক্ষতার সক্ষমতা প্রদর্শনের জন্য, এই কোডল্যাবটি addyosmani/agent-kills থেকে কোড রিভিউ স্কিলটি ব্যবহার করবে:

  • code-review-and-quality – তীব্রতার লেবেলিং সহ পঞ্চ-অক্ষীয় পর্যালোচনা (সঠিকতা, পঠনযোগ্যতা, আর্কিটেকচার, নিরাপত্তা, পারফরম্যান্স)।

কোড রিভিউ এজেন্ট স্কিলটি ইনস্টল করুন

নিচের কমান্ডটি ব্যবহার করলে, স্কিলটি ডিফল্টরূপে বর্তমান ওয়ার্কিং ডিরেক্টরির .agents/skills/ ফোল্ডারে ইনস্টল হয়ে যাবে — এটি একটি ওয়ার্কস্পেস-লেভেল ইনস্টলেশন। এর মানে হলো, স্কিলগুলো রিপোজিটরির অংশ হয়ে যায় এবং আপনার কোডের সাথে একসাথে কমিট করা যায়, ফলে প্রোজেক্টের প্রত্যেক ডেভেলপার (এবং CI পাইপলাইন) স্বয়ংক্রিয়ভাবে একই রিভিউ স্কিলগুলো পেয়ে যায়।

npx skills add addyosmani/agent-skills --skill code-review-and-quality -y

.agents/skills/code-review-and-quality/SKILL.md ফাইলটিতে যে বিস্তারিত দক্ষতাগুলো পরিদর্শন করা যেতে পারে, তা নিচে দেওয়া হলো:

name: code-review-and-quality
description: Conducts multi-axis code review. Use before merging any change. Use when reviewing code written by yourself, another agent, or a human. Use when you need to assess code quality across multiple dimensions before it enters the main branch.

মূল সক্ষমতাসমূহ:

  • পাঁচটি মূল বিষয়ের উপর পর্যালোচনা: নির্ভুলতা, পঠনযোগ্যতা, স্থাপত্য, নিরাপত্তা এবং কর্মক্ষমতা
  • প্রাপ্ত ফলাফলগুলোকে গুরুত্ব অনুসারে চিহ্নিত করুন, যাতে আপনি প্রথমে গুরুতর সমস্যাগুলো সমাধান করতে পারেন।
  • অনুমোদনের মানদণ্ডটি হলো: "যখন এটি নিখুঁত না হলেও, কোডের সামগ্রিক স্বাস্থ্যের নিশ্চিতভাবে উন্নতি ঘটায়, তখনই অনুমোদন করুন।"

এখন আমরা এক্সিকিউশন করার জন্য প্রস্তুত। চলুন অ্যান্টিগ্র্যাভিটি সিএলআই-তে স্কিলটি যাচাই করে নিই।

AGY চালু করুন এবং দক্ষতা যাচাই করুন

চলুন Antigravity CLI চালানো যাক

agy --dangerously-skip-permissions

তারপর নিম্নলিখিত কমান্ডটি চালান।

/skills

Workspace স্কিলস-এর অধীনে স্কিল দুটি এইভাবে প্রদর্শিত হতে দেখবেন।

490090ce9f955d1c.png

ফিচার ডিফের কোড রিভিউটি চালান।

নিরাপত্তা দক্ষতাটি চালু করুন এবং আপনার শাখাটি পর্যালোচনা করতে বলুন। এই নির্দেশটি টাইপ করুন:

Review the git diff between main and my current branch. Find any issues based on the agent skills that are appropriate for this. Write the findings and plan to fix them to code_review.md in the current working directory. Do not apply fixes yet.

এজেন্টটি প্রাসঙ্গিক code-review-and-quality স্কিলটি শনাক্ত করে এবং স্বয়ংক্রিয়ভাবে তা সক্রিয় করে। এটি ডিফারেন্স পড়ে, দুর্বলতাগুলো শনাক্ত করে এবং প্রাপ্ত ফলাফল ও একটি প্রস্তাবিত সমাধান পরিকল্পনা code_review.md ফাইলে লিখে রাখে।

86c054f06c122df8.png

স্ক্যানিং শেষ হলে, আপনার ওয়ার্কিং ডিরেক্টরিতে code_review.md ফাইলটি তৈরি হবে এবং আপনি এডিটরে সেটি পরীক্ষা করতে পারবেন।

bcd382689b0a95fa.png2b6892e261c046b2.png

প্রতিটি পর্যবেক্ষণ এবং প্রস্তাবিত সমাধান পর্যালোচনা করুন। পরিকল্পনাটি নিয়ে সন্তুষ্ট হলে, এজেন্টকে তা প্রয়োগ করতে বলুন।

Apply the proposed fixes from code_review.md

এজেন্ট পরিকল্পনাটি পড়ে এবং প্রতিটি পরিকল্পিত সমাধান উৎস ফাইলগুলিতে প্রয়োগ করে।

cc1e5bb5ad9533c7.png

এখন, আপনি চাইলে, ডিপেন্ডেন্সিগুলো ইনস্টল করে এবং অ্যাপটি চালিয়ে সমাধানটির পর সেটি সঠিকভাবে চলছে কি না তা পরীক্ষা করে দেখতে পারেন।

npm install
npm run dev

অ্যাপ্লিকেশনটি সঠিকভাবে চলার কথা। যদি না চলে, তবে আপনি বিষয়টি পুনরায় খতিয়ে দেখতে পারেন এবং Antigravity CLI-কে এটি ঠিক করতে বলতে পারেন।

কমিট করুন এবং একটি পিআর তৈরি করুন।

এখন, আপনি চাইলে পরিবর্তনগুলো আপনার নিজের রিপোজিটরিতে পুশ করতে পারেন। পরবর্তী ধাপে যাওয়ার আগে, চলুন প্রথমে বর্তমান ব্রাঞ্চে পরিবর্তনগুলো কমিট করে নিই।

প্রথমে আপনাকে আপনার গিট আইডেন্টিটি কনফিগার করতে হবে (আপনার নিজের নাম এবং ইমেল দিয়ে প্রতিস্থাপন করুন), যদি আপনি তা না করে থাকেন:

git config --global user.email "you@example.com"
git config --global user.name "Your Name"

তারপর পরিবর্তনগুলো কমিট করুন।

git add .
git commit -m "fix: address security vulnerabilities in lead search feature"

এখন, আপনি ইতিমধ্যেই অ্যান্টিগ্র্যাভিটি সিএলআই (Antigravity CLI)-কে একটি ইন্টারেক্টিভ রিভিউয়ার হিসেবে ব্যবহার করেছেন। এই স্কিলগুলো একে একটি কাঠামোগত পদ্ধতি দিয়েছে — ফাইভ-অ্যাক্সিস কোড রিভিউ। এটি তখন কাজ করে যখন আপনি ডেভেলপার হিসেবে এআই-জেনারেটেড কোড, আপনার নিজের কোড, বা কোনো টিমমেটের কন্ট্রিবিউশন রিভিউ করেন। পরবর্তী অংশে, আমরা গিটহাব (Github)-কে উদাহরণ হিসেবে ব্যবহার করে এই পুরো প্রক্রিয়াটিকে আপনার কোড রিপোজিটরিতে একটি স্কেলেবল অটোমেটেড প্রসেস হিসেবে তৈরি করব।

৫. কেস ২ : অ্যান্টিগ্র্যাভিটি এসডিকে ব্যবহার করে স্বয়ংক্রিয় পর্যালোচনা - পর্ব ১ (এজেন্ট তৈরি করা)

এই ধাপে অ্যান্টিগ্র্যাভিটি এসডিকে ব্যবহার করে একটি স্বয়ংক্রিয় রিভিউ এজেন্ট তৈরি করা হয়, এটিকে একটি গিটহাব অ্যাকশন হিসেবে ডেপ্লয় করা হয় এবং দ্বিতীয় ফিচার ব্রাঞ্চের বিপরীতে পরীক্ষা করা হয়। এজেন্টটি চাহিদা অনুযায়ী পিআর (PR) পর্যালোচনা করে এবং প্রাপ্ত ফলাফল পিআর কমেন্ট হিসেবে পোস্ট করে।

স্বয়ংক্রিয় পর্যালোচনা কেন

ইন্টারেক্টিভ CLI রিভিউ (কেস ১) তখনই কাজ করে যখন কোনো ডেভেলপার সক্রিয়ভাবে রিভিউ করেন। টিমগুলোর এমন একটি রিভিউ প্রয়োজন যা প্রতিটি PR-এর উপর স্বয়ংক্রিয়ভাবে চলে — এবং যেকোনো কন্ট্রিবিউটর, যেকোনো টুল ও যেকোনো সময় থেকে আসা ইস্যুগুলো ধরতে পারে। Antigravity SDK ( google-antigravity ) একটি পাইথন লাইব্রেরি হিসেবে CLI-এর মতোই এজেন্ট রানটাইম প্রদান করে। পলিসি এবং হুকগুলো কোডের মাধ্যমে কনফিগার করা হয়।

গিটহাব অ্যাকশনস হলো গিটহাবের নিজস্ব অন্তর্নির্মিত কন্টিনিউয়াস ইন্টিগ্রেশন/কন্টিনিউয়াস ডেভেলপমেন্ট (CI/CD) প্ল্যাটফর্ম। এটি রিপোজিটরির বিভিন্ন ইভেন্টের (যেমন একটি PR খোলা, কমিট পুশ করা বা কমেন্ট পোস্ট করা) প্রতিক্রিয়ায় ওয়ার্কফ্লো—অর্থাৎ YAML-এ সংজ্ঞায়িত স্বয়ংক্রিয় স্ক্রিপ্ট—চালু করে। ওয়ার্কফ্লোগুলো গিটহাব-হোস্টেড ভার্চুয়াল মেশিনে চলে এবং রিপোজিটরির কোডে তাদের অ্যাক্সেস থাকে। এক্ষেত্রে, প্রতিবার একটি PR তৈরি হওয়ার সময় একটি সিকিউরিটি রিভিউ এজেন্ট চালানোর জন্য আপনি একটি গিটহাব অ্যাকশন ব্যবহার করেন।

স্বয়ংক্রিয় পর্যালোচনা প্রক্রিয়াটি যেভাবে কাজ করে তা নিচে দেওয়া হলো:

393f76210e797217.png

অ্যান্টিগ্র্যাভিটি এসডিকে ( google-antigravity ) সিএলআই-এর মতোই এজেন্ট রানটাইম একটি পাইথন লাইব্রেরি হিসেবে প্রদান করে। আপনি একটি পাইথন স্ক্রিপ্ট লিখবেন যা পলিসি এবং হুক ব্যবহার করে এজেন্টকে কনফিগার করবে, সেটিকে একটি গিটহাব অ্যাকশনের ভেতরে চালাবেন এবং ফলাফলগুলো একটি পিআর কমেন্ট হিসেবে পোস্ট করবেন।

একটি জেমিনি এপিআই কী পান

শুরু করার আগে, অ্যান্টিগ্র্যাভিটি এসডিকে (Antigravity SDK) ব্যবহারের জন্য আমাদের জেমিনি এপিআই কী (Gemini API Key) প্রয়োজন হবে। গুগল এআই স্টুডিও এপিআই কী (Google AI Studio API Key)- তে গিয়ে একটি এপিআই কী তৈরি করুন এবং প্রয়োজনমতো এপিআই কী-টি কপি করে রাখতে পারেন।

57b306d2292c60bf.png

এই কী-টি স্থানীয়ভাবে রিভিউ এজেন্ট চালানোর সময় এবং পরবর্তীতে গিটহাব অ্যাকশনস সিক্রেট হিসেবে ব্যবহৃত হবে।

অংশ ক: পর্যালোচনা এজেন্ট তৈরি করুন

এখন, কেস ২-এর জন্য, আপনার বর্তমান ওয়ার্কিং ডিরেক্টরিকে feature/bulk-operations ব্রাঞ্চে পরিবর্তন করুন:

git checkout feature/bulk-operations

এটি সিনারিওটির দ্বিতীয় ফিচার ব্রাঞ্চ — এটি CRM অ্যাপে বাল্ক ইম্পোর্ট/এক্সপোর্ট এন্ডপয়েন্ট এবং একটি অ্যাডমিন স্ট্যাটিস্টিকস ড্যাশবোর্ড যুক্ত করে।

পাইথন প্রজেক্টটি সেট আপ করুন

অ্যান্টিগ্র্যাভিটি এসডিকে বর্তমানে শুধুমাত্র পাইথনে উপলব্ধ, তাই এটি ডেভেলপ করার জন্য আমাদের একটি পাইথন এনভায়রনমেন্টের প্রয়োজন হবে। আমরা আমাদের পাইথন প্রজেক্ট ম্যানেজার হিসেবে uv ব্যবহার করব। uv হলো রাস্ট (Rust) ভাষায় লেখা একটি দ্রুতগতির পাইথন প্যাকেজ এবং প্রজেক্ট ম্যানেজার ( ডকুমেন্টেশন )। এই কোডল্যাবটি গতি এবং সরলতার জন্য এটি ব্যবহার করে। আপনি যদি এই টিউটোরিয়ালের জন্য ক্লাউডশেল (cloudshell) ব্যবহার করেন, তবে এটি ইনস্ট্যান্সে আগে থেকেই ইনস্টল করা থাকবে। আপনি যদি আপনার লোকাল এনভায়রনমেন্টে এটি ইনস্টল করতে চান, তবে এই টিউটোরিয়ালটি দেখুন।

uv ব্যবহার করে রিভিউ এজেন্টের জন্য একটি পাইথন প্রজেক্ট শুরু করুন:

uv init code_review_agent
uv add --project code_review_agent google-antigravity==0.1.7

এটি code_review_agent একটি নতুন ডিরেক্টরি তৈরি করবে, যেখানে আমাদের প্রয়োজনীয় কোড রিভিউ এজেন্ট ফাইলগুলো থাকবে।

পর্যালোচনা দক্ষতা ইনস্টল করুন

রিভিউ এজেন্টের জন্য কেস ১-এ ব্যবহৃত একই নিরাপত্তা এবং কোড রিভিউ দক্ষতার প্রয়োজন। সেগুলোকে code_review_agent/skills/ ফোল্ডারে ইনস্টল করুন, যাতে SDK এজেন্ট রানটাইমে সেগুলো লোড করতে পারে:

npx skills add addyosmani/agent-skills --skill code-review-and-quality -y
cp -r .agents/skills code_review_agent/skills

পর্যালোচনা এজেন্ট তৈরি করুন

এখন, code_review_agent/review_agent.py তৈরি করুন। নিচের কমান্ডটি চালান।

cloudshell edit code_review_agent/review_agent.py

তারপর, নিচের বিষয়বস্তু ফাইলটিতে কপি করুন।

#!/usr/bin/env python3
import asyncio
import json
import os
import sys

import pydantic

from google.antigravity import Agent, LocalAgentConfig, CapabilitiesConfig
from google.antigravity.hooks import hooks, policy
from google.antigravity import types


class Finding(pydantic.BaseModel):
    file: str
    line: int
    severity: str
    category: str
    description: str
    proposed_fix: str = ""


class ReviewResult(pydantic.BaseModel):
    findings: list[Finding]


SCRIPT_DIR = os.path.dirname(os.path.abspath(__file__))
OUTPUT_FILE = "code_review.md"
SKILLS_PATHS = [
    os.path.join(SCRIPT_DIR, "skills", "code-review-and-quality"),
]

review_policies = [
    policy.deny_all(),
    policy.allow("view_file"),
    policy.allow("list_directory"),
    policy.allow("search_directory"),
    policy.allow("find_file"),
    policy.allow("run_command"),
    policy.allow("finish"),
]

@hooks.post_tool_call
async def log_tool_results(data: types.ToolResult):
    result_str = str(data.result) if data.result else ""
    preview = result_str[:200] + "..." if len(result_str) > 200 else result_str
    print(f"[audit] tool={data.name} result_len={len(result_str)} error={data.error} preview={preview}", flush=True)

@hooks.pre_tool_call_decide
async def enforce_safe_tools(data: types.ToolCall) -> types.HookResult:
    print(f"[audit] calling tool={data.name} args_keys={list(data.args.keys())}", flush=True)

    if data.name == "run_command":
        cmd = str(data.args.get("CommandLine", ""))
        if not cmd.startswith("git "):
            return types.HookResult(
                allow=False,
                message=f"Only git commands are allowed. Blocked: {cmd}"
            )
    return types.HookResult(allow=True)

async def review_code(target_dir: str) -> dict:
    prompt = f"""Run `git diff main...HEAD -- ':!.github' ':!code_review_agent'` in {target_dir} to get the changes on this branch.
Review ONLY the changed code for security vulnerabilities and code quality issues.
"""

    config_kwargs = dict(
        system_instructions=(
            "You are a code review agent. "
            "You review code diffs for vulnerabilities and quality issues using the loaded skills. "
            "You can run git commands to inspect the diff. "
            "You NEVER modify files."
        ),
        response_schema=ReviewResult,
        skills_paths=SKILLS_PATHS,
        policies=review_policies,
        hooks=[log_tool_results, enforce_safe_tools],
    )

    if os.environ.get("GEMINI_API_KEY"):
        config_kwargs["api_key"] = os.environ["GEMINI_API_KEY"]
    else:
        config_kwargs["vertex"] = True
        config_kwargs["project"] = os.environ.get("GOOGLE_CLOUD_PROJECT")
        config_kwargs["location"] = os.environ.get("GOOGLE_CLOUD_LOCATION", "global")

    config = LocalAgentConfig(**config_kwargs)

    async with Agent(config) as agent:
        response = await agent.chat(prompt)

        last_step = -1
        final_text_chunks = []
        async for chunk in response.chunks:
            if isinstance(chunk, types.ToolCall):
                final_text_chunks.clear()
            if hasattr(chunk, "text") and hasattr(chunk, "step_index"):
                if chunk.step_index != last_step:
                    final_text_chunks.clear()
                    last_step = chunk.step_index
                final_text_chunks.append(chunk.text)

        final_text = "".join(final_text_chunks)
        if final_text:
            print(final_text)

        data = await response.structured_output()

        if data and "findings" in data:
            return {"findings": data["findings"]}

        try:
            parsed = json.loads(final_text)
            if isinstance(parsed, list):
                return {"findings": parsed}
            if isinstance(parsed, dict) and "findings" in parsed:
                return {"findings": parsed["findings"]}
        except json.JSONDecodeError:
            pass

    return {"findings": final_text}


SEVERITY_EMOJI = {"critical": "🔴", "high": "🟠", "medium": "🟡", "low": "🔵"}

def format_markdown(result: dict) -> str:
    findings = result.get("findings", [])
    if isinstance(findings, str):
        return f"## AI Security Review\n\n{findings}\n"
    if not findings:
        return "## AI Security Review\n\nNo security issues found.\n"
    lines = ["## AI Security Review\n"]
    for f in findings:
        emoji = SEVERITY_EMOJI.get(f.get("severity", "").lower(), "⚪")
        lines.append(f"### {emoji} [{f.get('severity', 'unknown').upper()}] {f.get('category', '')}\n")
        lines.append(f"**{f.get('file', '')}:{f.get('line', '')}**\n")
        lines.append(f"{f.get('description', '')}\n")
        proposed_fix = f.get('proposed_fix', '')
        if proposed_fix:
            lines.append(f"**Proposed fix:** {proposed_fix}\n")
    lines.append("---\n*Powered by Antigravity SDK*")
    return "\n".join(lines)


if __name__ == "__main__":
    target = sys.argv[1] if len(sys.argv) > 1 else "."
    result = asyncio.run(review_code(target))
    markdown = format_markdown(result)
    with open(OUTPUT_FILE, "w") as f:
        f.write(markdown)
    print(f"Review written to {OUTPUT_FILE}")
    print(json.dumps(result, indent=2))

এই এজেন্টের মূল ডিজাইন সিদ্ধান্তগুলো ব্যাখ্যা করুন:

  • ডিফল্টরূপে অস্বীকার করার নীতিসমূহ : policy.deny_all() সবকিছু ব্লক করে দেয়, তারপর নির্দিষ্টভাবে শুধুমাত্র ফাইল পড়ার টুল এবং run_command (গিট-এর জন্য) খোলার অনুমতি দেয়।
  • দুই স্তরে প্রয়োগ : পলিসিগুলো ফ্রেমওয়ার্ক স্তরে সীমাবদ্ধতা আরোপ করে, এবং enforce_safe_tools হুকটি একটি দ্বিতীয় স্তর প্রদান করে — যা run_command মাধ্যমে শুধুমাত্র git কমান্ড ব্যবহারের অনুমতি দেয়।
  • গিট ডিফ স্কোপিং : এজেন্ট সম্পূর্ণ কোডবেস নয়, বরং শুধুমাত্র পরিবর্তিত কোড পর্যালোচনা করার জন্য git diff main...HEAD চালায়।
  • ফলব্যাক সহ কাঠামোগত আউটপুট : response_schema=ReviewResult এসডিকে-এর ফিনিশ টুলের মাধ্যমে JSON কাঠামো প্রয়োগ করে। যদি পার্সিং ব্যর্থ হয়, ফলব্যাক চেইনটি text() JSON হিসেবে পার্স করার চেষ্টা করে, তারপর মূল টেক্সট ফেরত দেয়।
  • প্রমাণীকরণ ফলব্যাক : উপলব্ধ থাকলে GEMINI_API_KEY ব্যবহার করে, অন্যথায় অ্যাপ্লিকেশন ডিফল্ট ক্রেডেনশিয়ালস-এর মাধ্যমে ভার্টেক্স এআই-তে ফিরে যায়।
  • ফাইল আউটপুট : ফরম্যাট করা মার্কডাউন ফলাফল code_review.md এ লেখে — গিটহাব অ্যাকশনটি এই ফাইলটি পড়ে এবং পরে একটি PR কমেন্ট হিসেবে পোস্ট করে।

পর্যালোচনা এজেন্ট পরীক্ষা করুন

প্রজেক্ট রুট থেকে পরীক্ষা করুন। SDK এনভায়রনমেন্ট থেকে GEMINI_API_KEY পড়বে, তাই কী-টি এনভায়রনমেন্টে রাখুন।

export GEMINI_API_KEY=YOUR_API_KEY

তারপর এটি স্থানীয়ভাবে চালানোর জন্য নিম্নলিখিত কমান্ডটি চালান।

uv run --project code_review_agent code_review_agent/review_agent.py .

এটি চলার সময় কিছু কনসোল আউটপুট দেখাবে, যা ব্যাখ্যা করবে এটি বর্তমানে কোন টুলগুলো ব্যবহার করছে। এবং আপনি লক্ষ্য করতে পারবেন যে এটি security-and-hardening এবং code-review-and-quality agent স্কিলগুলো অ্যাক্সেস করছে।

[audit] calling tool=view_file args_keys=['AbsolutePath', 'IsSkillFile']
[audit] tool=view_file result_len=47 error=None preview=Read security and hardening skill documentation
[audit] calling tool=view_file args_keys=['AbsolutePath', 'IsSkillFile']
[audit] tool=view_file result_len=48 error=None preview=Read code review and quality skill documentation
[audit] calling tool=run_command args_keys=['CommandLine', 'Cwd', 'WaitMsBeforeAsync']
...

এজেন্টটি git diff main...HEAD চালায়, শুধুমাত্র পরিবর্তিত কোড পর্যালোচনা করে, প্রাপ্ত ফলাফল ফরম্যাট করে code_review.md ফাইলে লেখে এবং কনসোলে স্ট্রাকচার্ড JSON প্রিন্ট করে। আপনি নিচে দেখানো ছবির মতো এডিটরে লেখা code_review.md ফাইলটি পরীক্ষা করে দেখতে পারেন।

e8f97c737aaf934b.png

স্থানীয়ভাবে এটি ইতিমধ্যেই কাজ করছে, এখন চলুন পরবর্তী অংশে যাওয়া যাক। গিটহাব অ্যাকশন কনফিগারেশন তৈরি করা।

৬. কেস ২ : অ্যান্টিগ্র্যাভিটি এসডিকে দিয়ে স্বয়ংক্রিয় পর্যালোচনা - পর্ব ২ (গিটহাব অ্যাকশন কনফিগার করা)

শুরু করার আগে, পূর্বে তৈরি করা code_review.md ফাইলটি যদি থেকে থাকে, তবে তা মুছে ফেলুন।

rm -f code_review.md

এখন, আমাদের গিটহাব অ্যাকশন YAML কনফিগারেশন ফাইলটি তৈরি করতে হবে।

mkdir -p .github/workflows
cloudshell edit .github/workflows/code_review.yml

তারপর ফাইলটিতে নিম্নলিখিত বিষয়বস্তু যোগ করুন।

name: AI Code Security and Quality Review

on:
  pull_request:
    types: [opened, synchronize]

jobs:
  review:
    runs-on: ubuntu-latest
    permissions:
      contents: read
      pull-requests: write

    container:
      image: ghcr.io/astral-sh/uv:python3.12-bookworm

    steps:
      - name: Install git
        run: apt-get update && apt-get install -y git
      - uses: actions/checkout@v4
        with:
          fetch-depth: 0
      - name: Run security review
        env:
          GEMINI_API_KEY: ${{ secrets.GEMINI_API_KEY }}
        run: |
          git config --global --add safe.directory $GITHUB_WORKSPACE
          uv run --project code_review_agent code_review_agent/review_agent.py .
      - name: Post findings as PR comment
        if: always()
        uses: actions/github-script@v7
        with:
          script: |
            const fs = require('fs');
            const body = fs.readFileSync('code_review.md', 'utf8');
            await github.rest.issues.createComment({
              owner: context.repo.owner,
              repo: context.repo.repo,
              issue_number: context.payload.pull_request.number,
              body: body
            });

যখন কোনো পিআর (PR) খোলা বা আপডেট করা হয়, তখন ওয়ার্কফ্লোটি স্বয়ংক্রিয়ভাবে চালু হবে। এটি সম্পূর্ণ গিট হিস্ট্রিসহ পিআর ব্রাঞ্চটি চেক আউট করে (যা git diff main...HEAD জন্য প্রয়োজন), রিভিউ এজেন্টটি চালায় যা প্রাপ্ত ফলাফলগুলো code_review.md ফাইলে লেখে, এবং ফাইলটির বিষয়বস্তু একটি পিআর কমেন্ট হিসেবে পোস্ট করে।

এখন চলুন সব পরিবর্তনগুলো কমিট করে গিটহাব রিমোটে পুশ করে দিই, আমরা এই ইন্টিগ্রেশনটি পরীক্ষা করার জন্য প্রস্তুত।

git add .
git commit -m "Add AI code security-quality review agent and GitHub Action"
git push origin feature/bulk-operations

৭. কেস ২ : অ্যান্টিগ্র্যাভিটি এসডিকে ব্যবহার করে স্বয়ংক্রিয় পর্যালোচনা - পর্ব ৩ (স্বয়ংক্রিয় কোড পর্যালোচনার পরীক্ষা)

এখন, আপনার ফর্ক করা রিপোজিটরি https://github.com/<YOUR_GITHUB_USERNAME>/leads-crm-app-demo ওয়েব পেজে যান এবং Settings ক্লিক করুন।

15e07c4d8c425e33.png

এরপর, বাম প্যানেলে, Secrets and variables খুঁজে বের করুন এবং ক্লিক করে Actions নির্বাচন করুন।

67d1b299fcd242b4.png

এরপরে GEMINI_API_KEY সিক্রেট কনফিগার করতে New repository secret এ ক্লিক করুন।

b8c270070e1613c9.png

এরপরে Pull Request নির্বাচন করুন এবং feature/bulk_operations ব্রাঞ্চ থেকে আপনার নিজের রিপোর main ব্রাঞ্চে একটি নতুন পুল রিকোয়েস্ট তৈরি করুন।

e37f57b56a143d9c.pngda9b78d57c0aec4e.png

পুল রিকোয়েস্ট তৈরি হওয়ার পরে, এটি গিটহাব অ্যাকশনগুলো চালাবে, যা আপনি Checks মেনুতে অথবা Merge pull request বাটনের কাছে দেখতে পারেন।

b9b811c4430f7702.png

আপনি চলমান অ্যাকশনগুলিতে ক্লিক করে বিস্তারিত দেখতে পারেন এবং কাজ শেষ হলে এটি পর্যালোচনার ফলাফল নিচে দেখানো ছবির মতো একটি পুল রিকোয়েস্ট কমেন্ট হিসেবে পোস্ট করবে।

544d4d820019e58.png

৮. উপসংহার

অভিনন্দন!

আপনি vibe-কোডেড ফিচারগুলিতে নিরাপত্তা দুর্বলতা শনাক্ত করার জন্য দুটি সম্পূর্ণ কোড রিভিউ ওয়ার্কফ্লো তৈরি করেছেন:

  • কেস ১ (ইন্টারেক্টিভ) : এজেন্ট স্কিলসহ অ্যান্টিগ্র্যাভিটি সিএলআই একটি ফিচার ব্রাঞ্চের ডিফারেন্স পর্যালোচনা করে এসকিউএল ইনজেকশন ও অন্যান্য দুর্বলতা শনাক্ত করেছে, OWASP প্যাটার্ন অনুসরণ করে সেগুলো সমাধান করেছে এবং একটি ত্রুটিমুক্ত পিআর (PR) তৈরি করেছে।
  • কেস ২ (স্বয়ংক্রিয়) : অ্যান্টিগ্র্যাভিটি এসডিকে একটি গিটহাব অ্যাকশনকে শক্তি জোগায় যা স্বয়ংক্রিয়ভাবে প্রতিটি পিআর (PR) পর্যালোচনা করে এবং কাঠামোগত নিরাপত্তা সংক্রান্ত পর্যবেক্ষণগুলোকে পিআর কমেন্ট হিসেবে পোস্ট করে।

আপনি যা শিখেছেন

  • কীভাবে ভাইব কোডিং নিরাপত্তা ঝুঁকি তৈরি করে এবং কেন স্বয়ংক্রিয় পর্যালোচনা এমন কিছু ধরে ফেলে যা ম্যানুয়াল পর্যালোচনায় বাদ পড়ে যায়
  • Antigravity CLI-কে কাঠামোগত নিরাপত্তা দক্ষতা প্রদানের জন্য এজেন্ট স্কিলস কীভাবে ইনস্টল এবং ব্যবহার করবেন
  • কীভাবে ইন্টারেক্টিভভাবে একটি ফিচার ব্রাঞ্চের ডিফারেন্স পর্যালোচনা করবেন, সমস্যা সমাধান করবেন এবং একটি ত্রুটিমুক্ত পিআর (PR) তৈরি করবেন
  • ডিনাই-বাই-ডিফল্ট পলিসি এবং লাইফসাইকেল হুক ব্যবহার করে অ্যান্টিগ্র্যাভিটি এসডিকে দিয়ে কীভাবে একটি রিড-অনলি রিভিউ এজেন্ট তৈরি করবেন
  • ইন্টারেক্টিভ ফলো-আপ সাপোর্ট সহ একটি স্বয়ংক্রিয় রিভিউ পাইপলাইনকে গিটহাব অ্যাকশন হিসেবে কীভাবে স্থাপন করবেন

পরিষ্কার করা

পিআরগুলো বন্ধ করুন

GitHub-এ আপনার ফর্কের প্রতিটি PR-এ যান এবং 'Close pull request'-এ ক্লিক করুন। feature/bulk-operations ' PR-টি মার্জ করবেন না — এতে এখনও প্যাচবিহীন ঝুঁকিপূর্ণ কোড রয়েছে।

ফর্ক করা রিপোজিটরিটি মুছে ফেলুন (ঐচ্ছিক)

যদি আপনার ফর্কটির আর প্রয়োজন না হয়, তাহলে GitHub-এ আপনার ফর্কটিতে যান: সেটিংস -> ডেঞ্জার জোন পর্যন্ত স্ক্রোল করুন -> এই রিপোজিটরিটি মুছুন

এরপর কী?