Cypress tap নামে একটি বিটা ফিচার রিলিজ করেছে যা AI-চালিত কোডিং এজেন্টদের একটি লাইভ Cypress টেস্ট সেশনে যুক্ত হতে সাহায্য করে, DOM স্ন্যাপশট এবং কমান্ড লগ সংগ্রহ করতে পারে এবং সেই ভিজ্যুয়াল তথ্য ব্যবহার করে ত্রুটিগুলো (failures) শনাক্ত করতে পারে। এই টুলটি শুধুমাত্র Cypress 15.21.0 বা তার পরবর্তী ভার্সন, একটি Chromium-ভিত্তিক ব্রাউজার এবং “cypress open” UI-এর সাথে কাজ করে; এটি হেডলেস (headless) মোডে চলে না।

কেন AI এজেন্টদের শুধুমাত্র একটি exit code-এর বেশি প্রয়োজন

বেশিরভাগ AI কোডিং অ্যাসিস্ট্যান্ট Cypress রান করার প্রক্রিয়াকে অন্য যেকোনো কমান্ড-লাইন টুলের মতো বিবেচনা করে: তারা npx cypress run চালায়, প্রসেসের exit status পড়ে এবং টেস্টটি পাস হয়েছে কি না তা সিদ্ধান্ত নেয়। একটি exit code এজেন্টকে জানায় যে কিছু একটা ভুল হয়েছে, কিন্তু এটি কোনো সূত্র দেয় না যে কোনো সিলেক্টর ভুলভাবে টাইপ করা হয়েছে কি না, কোনো পেজ লোড হতে ব্যর্থ হয়েছে কি না, অথবা কোনো ওভারলে (overlay) কোনো বাটনকে আটকে দিয়েছে কি না। বিপরীতে, মানুষ Cypress UI ওপেন করে, ব্রাউজার দেখে, DOM tree পরিদর্শন করে এবং একটি হাইপোথিসিস তৈরির আগে কমান্ড লগ পড়ে।

এই ব্যবধানের কারণে অটোমেটেড ডিবাগিং ভঙ্গুর হয়ে পড়ে। “Element not found” এর পেছনে ডজন ডজন মূল কারণ থাকতে পারে, এবং ভিজ্যুয়াল প্রমাণ ছাড়া একটি AI একই সমাধান বারবার চেষ্টা করতে পারে, যা অন্তহীন লুপ তৈরি করে।

কীভাবে tap এই ব্যবধান পূরণ করে

Tap একটি চলমান Cypress ইনস্ট্যান্সের জন্য একটি টার্মিনাল-ভিত্তিক ইন্টারফেস তৈরি করে। ডেভেলপার যখন open mode-এ Cypress চালু করেন:

npx cypress open --e2e --browser=chrome

এজেন্ট তখন একটি আলাদা শেল থেকে কতগুলো JSON-আউটপুট কমান্ড দিতে পারে:

  • npx cypress tap specs --json – উপলব্ধ spec ফাইলগুলোর তালিকা দেখায়।
  • npx cypress tap run <spec> --json – একটি সিঙ্গেল spec রান শুরু করে।
  • npx cypress tap status --json – টাইমস্ট্যাম্পসহ বর্তমান রানের স্ট্যাটাস প্রদান করে।

যেহেতু স্ট্যাটাস পেলোড-এ একটি startedAt টাইমস্ট্যাম্প থাকে, তাই এজেন্ট নিশ্চিত করতে পারে যে এটি কোনো পুরনো বা শেষ হয়ে যাওয়া রানের পরিবর্তে একদম নতুন রেজাল্ট দেখছে। শুধুমাত্র র (raw) exit code-এর ওপর নির্ভর করা এখন আর যথেষ্ট নয়।

যখন একটি টেস্ট ফেইল করে, এজেন্ট আরও গভীরে অনুসন্ধান করতে পারে:

  • npx cypress tap reporter --json – সামগ্রিক টেস্ট রিপোর্ট সংগ্রহ করে।
  • npx cypress tap command --test-id <ID> --command-id <ID> --json – ত্রুটিপূর্ণ কমান্ডটি সংগ্রহ করে এবং সেই মুহূর্তে অ্যাপের DOM, ARIA tree এবং সংশ্লিষ্ট এলিমেন্ট অ্যাট্রিবিউটগুলোর একটি স্ন্যাপশট প্রদান করে।

সেই স্ন্যাপশট ব্যবহার করে, AI যুক্তি দিয়ে বুঝতে পারে কেন সিলেক্টরটি কাজ করেনি, পেজটি কি তখনও লোড হচ্ছিল, নাকি কোনো মোডাল (modal) টার্গেট এলিমেন্টটিকে ঢেকে রেখেছিল। এরপর এটি কোড পরিবর্তনের প্রস্তাব দিতে পারে, তা প্রয়োগ করতে পারে এবং ফিক্সটি যাচাই করার জন্য পুনরায় একই spec রান করতে পারে।

স্বায়ত্তশাসিত (autonomous) এজেন্টদের জন্য একটি সেফটি পলিসি

লুপটি যাতে অন্তহীন না হয়ে যায়, সেজন্য Cypress টিম একটি সুশৃঙ্খল ওয়ার্কফ্লো সাজেস্ট করেছে:

  1. শুধুমাত্র একটি নির্দিষ্ট spec ফাইল রান করুন।
  2. একটি নির্দিষ্ট ডেডলাইন মেনে tap status পোল (poll) করুন এবং যে রেজাল্টের startedAt শেষ পোল করার সময়ের চেয়ে পুরনো, তা উপেক্ষা করুন।
  3. শুধুমাত্র ফেইল হওয়া টেস্ট এবং ত্রুটিপূর্ণ কমান্ডটি পরিদর্শন করুন।
  4. পরবর্তী রানের আগে মাত্র একটি কোড পরিবর্তনের অনুমতি দিন।
  5. পুনরায় spec রান করুন।
  6. যদি ফলাফল পরিবর্তিত হয়, তবে থেমে যান এবং পর্যালোচনার জন্য একজন মানুষের কাছে বিষয়টি পাঠান।

এজেন্টটির পর্যবেক্ষণ এবং প্রস্তাবিত ফিক্সটি কেন কাজ করবে, সে সম্পর্কে একটি প্রাকৃতিক ভাষার (natural-language) ব্যাখ্যাও তৈরি করা উচিত। শুধুমাত্র টেস্ট পাস করাই যথেষ্ট নয়; AI-কে প্রমাণ করতে হবে যে সে ভিজ্যুয়াল প্রমাণগুলো বুঝতে পেরেছে।

কারা উপকৃত হবেন

যেসব ডেভেলপার কোড জেনারেশনের জন্য ইতিমধ্যে AI অ্যাসিস্ট্যান্টের ওপর নির্ভর করেন, তারা এখন সেই অ্যাসিস্ট্যান্টদের আরও উন্নত ডিবাগিং সুবিধা দিতে পারবেন। এর ফলে ফ্ল্যাকি (flaky) টেস্টগুলোর পেছনে ব্যয় করা সময় কমে আসবে, বিশেষ করে বড় এন্ড-টু-এন্ড (end-to-end) স্যুটগুলোর ক্ষেত্রে যেখানে ম্যানুয়ালি একটি ফেইলর রিক্রিয়েট করতে কয়েক মিনিট সময় লাগতে পারে। যেসব টিম tap গ্রহণ করবে, তারা UI কম্পোনেন্ট সংক্রান্ত পুল রিকোয়েস্টের (pull requests) দ্রুত সমাধান পেতে পারে এবং বারবার ডিবাগিং সেশনের প্রয়োজনীয়তা কমে আসবে।

ঝুঁকি এবং সীমাবদ্ধতা

Tap এখনও বিটা পর্যায়ে রয়েছে, যার মানে এতে বাগ থাকতে পারে, এর কমান্ড সিনট্যাক্স পরিবর্তিত হতে পারে অথবা কোনো নোটিশ ছাড়াই নির্দিষ্ট কিছু কনফিগারেশনের সাপোর্ট বন্ধ হয়ে যেতে পারে। এটি ওপেন UI-এর ওপর নির্ভরশীল হওয়ায় হেডলেস CI পাইপলাইন এতে কাজ করবে না, তাই অটোমেটেড বিল্ডের জন্য টিমগুলোকে আলাদা কৌশল অবলম্বন করতে হবে। যেহেতু এই ফিচারটি লাইভ DOM ডেটা স্ট্রিম করে, তাই এতে কিছুটা পারফরম্যান্স ওভারহেড হতে পারে যা বড় spec-এর গতি কমিয়ে দিতে পারে। সবশেষে, সেফটি পলিসিটি ধরে নেয় যে AI ডেডলাইন মেনে চলবে এবং একটি পরিবর্তনের পর থেমে যাবে; কিন্তু একটি ত্রুটিপূর্ণভাবে ডিজাইন করা এজেন্ট এখনও একটি অন্তহীন লুপে পড়তে পারে বা ভুল ফিক্স প্রয়োগ করতে পারে।

পরবর্তী যা লক্ষ্য রাখা উচিত

  • বেটা ফিডব্যাক সাইকেল – Cypress সম্ভবত প্রাথমিক ব্যবহারকারীদের মতামতের ভিত্তিতে JSON স্কিমা আরও উন্নত করবে এবং আরও সূক্ষ্ম কমান্ড যোগ করবে।
  • CI-এর সাথে ইন্টিগ্রেশন – কমিউনিটি স্ক্রিপ্ট আসার সম্ভাবনা রয়েছে যা সম্ভবত একটি ভার্চুয়াল ডিসপ্লে তৈরি করার মাধ্যমে tap-এর open-mode-এর প্রয়োজনীয়তা এবং headless runner-এর মধ্যে সমন্বয় করবে।
  • AI-এজেন্ট টুলিং – কোডিং অ্যাসিস্ট্যান্ট তৈরি করা ভেন্ডররা tap সাপোর্টকে একটি ডিফল্ট ডিবাগিং মডিউল হিসেবে অন্তর্ভুক্ত করা শুরু করতে পারে, যার ফলে মূলধারার IDE এক্সটেনশনগুলোতে এই ফিচারটি আরও দৃশ্যমান হবে।

আপনি যদি AI-চালিত টেস্ট মেইনটেন্যান্স নিয়ে পরীক্ষা-নিরীক্ষা করেন, তবে একটি ফ্ল্যাকি (flaky) স্পেক-এর ওপর tap ব্যবহার করে দেখতে পারেন এবং দেখুন ভিজ্যুয়াল কনটেক্সট ডিবাগিং সাইকেল কমিয়ে আনে কি না। এই টুলটি মানুষের বিচারবুদ্ধির বিকল্প হবে না, তবে এটি আপনার কোডিং এজেন্টকে এমন একটি দৃষ্টি প্রদান করবে যা আগে তার ছিল না।