Engineering

سؤال واحد، أربع لغات: ذكاء الشيفرة عبر الحزمة التقنية مع خادم Fantom MCP

قائمة منسدلة في مكوّن Vue، وويبلت Fantom، وأمر SOX عبر UDP، ومتحكّم Sedona. إنها ميزة واحدة وأربع لغات — وحتى الآن، أربع عمليات بحث منفصلة.

Alper Üzmezler· Sep 16, 2026 · 12 دقيقة قراءة

إليك سؤالًا يطرحه مهندس أنظمة التحكّم فعلًا:

«عندما أسحب مكوّنًا إلى اللوحة في محرّر الويب وأضغط حفظ، ما الذي ينتهي به الأمر مُرسَلًا عبر السلك إلى المتحكّم؟»

إنه سؤال منطقي تمامًا. وهو أيضًا، في معظم قواعد الشيفرة، جلسة تنقيب أثري تستغرق ساعتين — لأن الإجابة عليه تعني عبور أربع لغات وثلاث بيئات تشغيل وبروتوكول شبكة، ولا توجد أداة بحث واحدة ترى كل ذلك.

وُلد خادم Fantom MCP من أجل هذا السؤال.

الحزمة التي يعبرها السؤال

محرّر ويب Sandstar هو بيئة برمجة مرئية لإطار عمل Sedona. تسحب المكوّنات إلى لوحة، وتصلها ببعضها، ثم تنشرها على متحكّمات حيّة. وتحت السطح، تنتقل إيماءة مستخدم واحدة عبر حزمة غير متجانسة بحق:

لوحة محرّر ويب Sandstar مخطط عُقد Rete.js · عناصر PrimeVue .vue .ts حزمة Fantom (sweExt) تخدم التطبيق · عرض SkySpark + ويبلت .fan مقبس ويب Sandstar · المنفذ 7070 JSON داخلًا · 17 نوع أمر SOX خارجًا موجِّه SOX عبر DASP / UDP قراءات · كتابات · اشتراكات · نقل ملفات متحكّم Sedona عتاد فعلي حيّ سؤال واحد

أربع لغات، ميزة واحدة. يستطيع grep أن يعثر على السلسلة sox في كلٍّ منها. لكن ما لا يستطيع إخبارك به هو أن معالج writeComp في ويبلت Fantom هو ما يستدعيه مخزن Vue، أو أن تغيير توقيعه يكسر مسار اشتراك يبعد ثلاث طبقات.

ثلاث وعشرون لغة في فهرس واحد

يغطّي سجلّ اللغات في خادم Fantom MCP 23 لغة:

axon · c · cpp · csharp · css · dart · fantom · go · html · java · javascript · json · kotlin · php · polymer · python · ruby · rust · scala · swift · typescript · vue · xeto

axon fantom xeto vue typescript javascript html css java kotlin scala csharp python ruby php go rust swift dart c cpp polymer json vue typescript fantom xeto فهرس واحد. سؤال محرّر الويب يلامس أربعًا منها دفعةً واحدة. تحظى Fantom وAxon وXeto بقواعد tree-sitter مصمّمة خصيصًا.

ثلاثٌ من تلك القواعد النحوية — Fantom وAxon وXeto — كُتبت من أجل هذا المشروع، لأن أيًّا منها لم يكن موجودًا. وهذا مهم للسبب نفسه الذي جعله مهمًّا في خادم Axon MCP: المقطع الذي ينتهي في منتصف كتلة هو مقطع لا يعني شيئًا.

ثلاثة فهارس، لا واحد

البحث الدلالي وحده لا يكفي للإجابة عن سؤال بنيوي. يحتفظ خادم Fantom MCP بثلاثة مخازن ويستخدمها معًا:

  • LanceDB يحتفظ بالمتجهات خلف فهرس ANN. كانت الإصدارات السابقة تجري مسحًا كاملًا للجدول عند كل استعلام؛ وبناء الفهرس التقريبي هو ما نقل الاسترجاع من «ملحوظ» إلى «فوري».
  • LadybugDB (Kuzu) يحتفظ برسم الاستدعاءات الفعلي — عُقد وحواف، مخزّنة بشكل دائم. فـ getCallers وgetCallees وgetCodeImpact وgetCodeNeighbors هي استعلامات رسم بياني، لا عمليات grep تُعاد عند كل طلب.
  • FlexSearch يحتفظ بفهرس كلمات مفتاحية، لأنك أحيانًا تعرف المعرّف فعلًا.

تُدمج نتائج الجانبين المتجهي والمفتاحي عبر دمج الرتب التبادلي (reciprocal rank fusion)، ثم يُعاد ترتيبها اختياريًا بواسطة مُرمِّز متقاطع أو مُعيد ترتيب من OpenRouter. وأيّ منها يعمل، وأين، هو قرار توجيه — نتناوله في تدوينة مستقلة.

كيف يبدو هذا عمليًا

يُشغّل askCodebase حلقة استرجاع فوق الفهرس ويصوغ إجابة موثّقة بالمراجع — والاستشهاد هو بيت القصيد. وبالنسبة لسؤال عابر للّغات، فإن الشكل المفيد للإجابة ليس «إليك فقرة» بقدر ما هو «إليك الدوال الأربع، بأربع لغات، بترتيب الاستدعاء».

للتوضيح فقط — ما يلي هو شكل إجابة عابرة للحزمة، لا نصّ تشغيل بعينه:

  • إجراء مخزن Vue في ملف .ts، يرسل رسالة JSON
  • معالج الويبلت في .fan الذي يستقبلها
  • مدخل الموجِّه الذي يربط تلك الرسالة بأحد أنواع أوامر SOX الـ17
  • مسار الكتابة إلى المكوّن الذي ينتهي على السلك عبر DASP/UDP

يمكنك بعدها استدعاء getCodeImpact على أيٍّ منها لتعرف ما الذي يتحرك أيضًا إن غيّرته. تلك هي الاستعلامة الصعبة حقًا بدون رسم بياني مخزَّن، وهي التي توفّر عليك بعد الظهيرة بأكمله.

السؤال عن كيف وصلت الشيفرة إلى هذه الحال

البنية تجيب عن «ما الذي يستدعي ماذا». وعائلة ثانية من الأدوات تجيب عن «ولماذا هي هكذا»:

  • whatChangedRecently — ما الذي تغيّر في هذا المشروع مؤخرًا
  • getSymbolHistory — كيف تطوّرت دالة بعينها
  • explainSymbolChange — ماذا فعل تغيير معيّن
  • diffIndexRuns — ما الذي رآه الفهرس نفسه بشكل مختلف بين تشغيلين

بالنسبة لقاعدة شيفرة تُصان عبر سنوات وتنتقل بين متكاملي أنظمة، غالبًا ما يكون هذا أثمن من البحث الدلالي. فالشيفرة قابلة للقراءة. أما المنطق وراءها فهو ما رحل مع آخر مهندس.

ولا يزال ينجز الترحيل

غيّر SkySpark 4.0 صيغة الامتدادات. يعيد migrateSkySpark4x كتابة عبارات using، ويحوّل سلاسل Axon، ويولّد ملفات Xeto (lib.trio وfuncs.xeto وlib.xeto)، ويتحقق باستخدام مُصرِّف Fantom، ويضع وسم نسخة احتياطية في Git عند الدخول. ثم ينهيه commitMigration؛ ويتراجع عنه rollbackMigration باستدعاء واحد.

41 أداة MCP إجمالًا، تشمل البحث في التوثيق، والبحث الدلالي في الشيفرة، وتحليل رسم الاستدعاءات، والتاريخ، والتوليد، والترحيل.

الخلاصة الصادقة

لا يجعل خادم Fantom MCP قاعدة شيفرتك أبسط. سيظل محرّر الويب عبارة عن Vue يخاطب Fantom الذي يخاطب SOX عبر UDP، وهذه هي البنية الصحيحة لما يفعله.

ما يتغيّر هو أن الحدود بين تلك الطبقات تكفّ عن كونها جدرانًا أمام أداة البحث. سؤال واحد، يُطرح مرة واحدة، يعبر الأربع جميعًا — ويعود بالدوال، مرتّبة، بأي لغة صادف أن كُتبت بها.


خادم Fantom MCP متاح المصدر على github.com/Project-SandStar/FantomMcpServer. انظر أيضًا صفحة المشروع ومحرّر ويب Sandstar.