Termhub: أداة التحكم بالطرفيات المدعومة بالذكاء الاصطناعي تعزز أتمتة المهام
أداة Termhub الجديدة تعيد تعريف التفاعل الآلي مع البيئات الطرفية

تُمثل Termhub أداة مبتكرة للتحكم بالطرفيات (terminal) صُممت بالأساس لتتكامل مع تطبيقات الذكاء الاصطناعي. يرتكز تصميمها على تحقيق دورة عمل متكاملة تهدف إلى أتمتة التفاعلات مع البيئة الطرفية بشكل فعال.
تتضمن هذه الدورة الآلية عدة خطوات أساسية: يبدأ الذكاء الاصطناعي بفحص الجلسات الطرفية المفتوحة، ثم يقوم بفتح نافذة أو تبويب جديد عند الضرورة. بعد ذلك، يُطلق أو يستهدف جلسة Codex محددة، ويرسل المهمة المطلوبة إلى تلك الجلسة. وأخيرًا، لا يلتقط الذكاء الاصطناعي سوى المخرجات الجديدة التي تظهر بعد عملية الإرسال، ليعيدها إلى المستخدم مباشرة، ما يوفر كفاءة ملحوظة في سير العمل.
تُعرف الأداة باسم ‘termhub’ ويمكن استدعاؤها اختصارًا بـ ‘thub’. وهي متاحة كحزمة npm تحت الاسم ‘@duo121/termhub’. تدعم الأداة عدة واجهات خلفية (backends)، ففي نظام macOS، تتوافق مع iTerm2 و Terminal، بينما في نظام Windows، تعمل مع Windows Terminal و Command Prompt (CMD).
لتثبيت Termhub، يمكن للمستخدمين الاعتماد على npm عبر الأمر:
`npm install -g @duo121/termhub`
لمستخدمي macOS، تتوفر إمكانية التثبيت عبر Homebrew:
`brew tap duo121/termhub`
`brew install duo121/termhub/termhub`
أو يمكن التثبيت مباشرة من إصدارات GitHub (دون الحاجة إلى npm) بتحميل الملفات المضغوطة المخصصة، مثل `termhub__macos-arm64.tar.gz` أو `termhub__windows-x64.zip`. بعد فك الضغط، يُمكن تفعيل الأداة بتغيير أذونات الملف التنفيذي ثم تشغيله للتحقق من الإصدار:
`chmod +x termhub`
`./termhub –version`
لفهم وظائف الأداة، يوفر `termhub –help` معلومات وافية للقراءة البشرية، بينما يقدم `termhub spec` معلومات قابلة للقراءة آليًا بتنسيق JSON، وهي بمثابة المرجع الحقيقي لعمل الأداة. كلا الأمرين يشتملان الآن على تلميح لـ ‘currentSession’ يمكن نسخه مباشرة إلى الوسم `–session` لتسهيل تسليم المهام إلى الذكاء الاصطناعي.
كما تُقدم Termhub الآن إصدارًا تجريبيًا لحزمة تطوير البرمجيات (SDK) يتيح دمجها في تطبيقات أخرى عبر استيراد `createTermhubClient` من `@duo121/termhub/sdk`. تتيح هذه الحزمة مجموعة من القدرات الأساسية، منها فتح وإغلاق الأهداف الطرفية، والبحث عن جلسات الطرفية وتحديدها، وإرسال نصوص لوحة المفاتيح وأحداث المفاتيح (مثل مفتاح فردي، أو مجموعة مفاتيح، أو تسلسل مفاتيح)، بالإضافة إلى محاكاة النقر بالماوس (mouseClick) على الهدف الطرفي في نظام macOS.
تختلف مستويات الدعم حسب النظام الأساسي: ففي macOS (iTerm2 / Terminal)، يتوفر دعم كامل للوحة المفاتيح والنقر بالماوس. أما في Windows (Windows Terminal / CMD)، فيُدعم التحكم بلوحة المفاتيح فقط، بينما لا تتوفر وظيفة النقر بالماوس حاليًا.
كمثال سريع على استخدام SDK، يمكن إنشاء عميل Termhub لاستهداف iTerm2، ثم فتح تبويب جديد، إرسال أمر مثل “echo hello from sdk”، الضغط على مفتاح “enter”، وأخيرًا التقاط المخرجات الجديدة:
“`javascript
import { createTermhubClient } from “@duo121/termhub/sdk”;
const client = createTermhubClient({ app: “iterm2” });
const opened = await client.open({ scope: “tab” });
await client.send({ session: opened.target.handle, text: “echo hello from sdk” });
await client.press({ session: opened.target.handle, key: “enter” });
const output = await client.capture({ session: opened.target.handle, lines: 20 });
console.log(output.text);
“`
تُوفر الأداة مجموعة من الأوامر الرئيسية، لكل منها وظيفته الخاصة ووسومه الثانوية الشائعة. على سبيل المثال، يستخدم الأمر `open` لفتح نافذة أو تبويب طرفي جديد مع وسوم مثل `–app` و`–window` و`–tab`، بينما يُستخدم `list` لسرد جميع النوافذ والتبويبات والجلسات قيد التشغيل. هناك أيضًا `resolve` و`find` لتحديد جلسة واحدة دقيقة من الأهداف الغامضة، و`send` لإرسال نص والتقاط المخرجات، أو `press` لإرسال أحداث مفاتيح حقيقية. أما `capture` فيُستخدم لقراءة المخرجات المرئية، و`focus` لتركيز نافذة أو جلسة معينة، و`close` لإغلاق تبويب أو نافذة، و`doctor` للتحقق من جاهزية النظام، و`spec` لطباعة العقد بصيغة JSON.
من الضروري دائمًا تحديد هدف واحد دقيق باستخدام `resolve` أو `find` قبل تنفيذ أي أوامر تُحدث تغييرًا في النظام. يُفضل استخدام الوسم `–app` عند تفعيل واجهات خلفية متعددة، ولا تتردد في استخدام `–dry-run` قبل العمليات المحفوفة بالمخاطر. عند استخدام `send`، اعتمد على `–no-enter` فقط إذا كنت تخطط لإرسال مفتاح حقيقي منفصل لاحقًا، وتجنب تمامًا محاكاة الإرسال بإضافة أسطر جديدة حرفيًا داخل وسوم `–text` أو `–stdin`.
يُدعم أمر `press` وضع إدخال واحدًا فقط، سواء كان مفتاحًا فرديًا (`–key`)، أو مجموعة مفاتيح (`–combo` مثل `ctrl+c` أو `cmd+k`)، أو تسلسلًا من المفاتيح (`–sequence` مثل `esc,down*5,enter`). وتتوفر ضوابط إضافية مثل `–repeat` (الذي يُطبق فقط على `–key` و`–combo`) و`–delay` لتحديد فترة التأخير بين أحداث المفاتيح المتكررة أو المتسلسلة.
على سبيل المثال:
`termhub press –session –key enter`
`termhub press –session –combo ctrl+c`
`termhub press –session –sequence “esc,down*3,enter” –delay 60`
تُقدم Termhub الآن دعمًا لحلقة مدمجة لنقاط تحقق الجلسة، ما يُمكّن الذكاء الاصطناعي من التقاط المخرجات الجديدة فقط التي تظهر بعد عملية الإرسال. هذا ما يُعرف بـ ‘حلقة الإرسال والتقاط التغييرات’.
يتجلى سير العمل الأساسي في أمر مثل:
`termhub send –session –text “npm test” –await-output 1200`
آلية العمل بسيطة وفعالة: يخزن أمر `send` نقطة تحقق لتلك الجلسة المحددة قبل كتابة أي إدخال. وعند استخدام `–await-output`، ينتظر الأمر ويعيد فقط المخرجات المتغيرة التي ظهرت بعد عملية الإرسال تلك، مما يضمن التركيز على التحديثات الجديدة. يظل أمر `capture –since-last-send` متاحًا عند الحاجة لخطوة قراءة صريحة ومنفصلة.
فيما يتعلق بالتزامن، تُعد نقاط التحقق هذه محددة بنطاق الجلسة، مما يسمح لوكيلين مختلفين للذكاء الاصطناعي باستخدام جلسات مختلفة بالتوازي دون أي تعارض، ما يعزز مرونة النظام. تُخزن ملفات الحالة افتراضيًا ضمن المسار `~/.termhub/state`.
يُقبل الوسم `–session` بمعرف جلسة أصلي أو بمعرف نطاقي. تجدر الإشارة إلى أن وظائف التركيز والإرسال والتقاط وإغلاق النوافذ في Windows تعتمد على PowerShell وأتمتة واجهة المستخدم. وتُبذل أقصى الجهود في التقاط المخرجات في Windows بناءً على إمكانية الوصول إلى النص المرئي، ما قد يضع بعض القيود.








