تخطَّ إلى المحتوى

لمستخدمي Windsurf

Windsurf يحرِّر الملف.
Maguyva ترى المستودع.

‏Windsurf هو المحرِّر وCascade هو الوكيل. في المستودع الأحادي، ما يزال الوكيل يحتاج إلى خريطة توضّح أي ملف يهم. تفهرس Maguyva قاعدة الكود لديك وتعيدها عبر MCP (دلاليًا، وAST، ورسم بيانيًا، ونصيًا)، لذا يعيد سؤال «أين تحدث المصادقة» تدفق المصادقة الفعلي، لا سبع نسخ اختبارية وهمية.

خطة Free: 3 مستودعات, حتى 50 ألف سطر مُفهرَس من المستودع، بلا بطاقة.

Windsurf يحرِّر ما تشير إليه. Maguyva تخبر Cascade بالملف الذي يجب الإشارة إليه.

ما تقوم به كل طبقة

أربع قطع. لكل واحدة مهمتها.

‏// المحرِّر

Windsurf

حيث تعملان أنت وCascade فعليًا.

‏// السياق اليدوي

إشارات @ + ‏.windsurfrules

السياق اليدوي يفوز، إلى أن يكبر المستودع.

‏// قاعدة الكود

Maguyva

حقائق تلقائية عن قاعدة الكود عبر MCP.

Windsurf هو المحرِّر. استخدمه.

بيئة التطوير ليست هي المشكلة. Cascade، والإكمال التلقائي عبر Tab، والتحرير متعدد الملفات، و.windsurfrules كلها ممتازة، وأنت بالفعل تستخدمها من أجل:

  • الاقتراحات المضمَّنة وتحريرات Cascade في الملف المفتوح.
  • التحرير متعدد الملفات حين يكون التغيير محليًا.
  • .windsurfrules لأعراف المستودع وضوابط الأسلوب.
  • إشارات @ لسحب ملف محدَّد إلى السياق.

واصل فعل ذلك. لا شيء منه يختفي.

لكن في مستودع أحادي حقيقي (TypeScript بتبعيات مساحة العمل، وخدمات Python، وحزم مختلطة) ينهار سياق الوكيل بمجرد أن يخرج الملف المعني عن رادار Cascade بالفعل.

إصلاحات يدوية جرّبتها من قبل، وأين تتعطّل

أربعة إصلاحات يدوية، مقترنة بنمط تعطّلها. اليسار = ما تفعله اليوم. اليمين = أين يتعطّل.

// the fix

‏// أشِر إلى الملفات

تُشير بـ@ إلى الملفات الثلاثة التي تظن أنها مهمة. يحرِّر Cascade بدقة داخلها.

// where it breaks

‏// الإشارة تخمين

يعمل هذا حين تعرف مسبقًا أي الملفات معنيّة. الغاية الكاملة من أدوات السياق هي إظهار الملفات التي لم تكن تعرف أن تشير إليها.

// the fix

‏// الصق المقتطفات

تلصق 200 سطر من حزمة أخرى في Cascade لتمنحه سياقًا كافيًا.

// where it breaks

‏// الكود المُلصَق يصبح قديمًا

المقتطف الذي ألصقته الساعة 9 صباحًا لا يعكس عملية rebase التي أنجزها زميلك الساعة 11 صباحًا. Cascade يحرِّر على نسخة وهمية من الحزمة.

// the fix

‏// اكتب وثيقة سياق

تكتب ملف .windsurfrules أو وثيقة معمارية بصيغة markdown. تكون صحيحة اليوم.

// where it breaks

‏// الوثائق تنحرف أسرع من الكود

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

// the fix

‏// أبقِ ملفات القواعد

تضيف .windsurfrules للتسمية والـlint وأوامر البناء. ممتاز للسلوك.

// where it breaks

‏// القواعد ≠ الفهرس

.windsurfrules هو المكان الصحيح لـ“شغِّل دائمًا pnpm tsc -b قبل الالتزامات”. إنه ليس فهرسًا قابلًا للاستعلام عن كل رمز وملف وموقع استدعاء في مستودعك الأحادي.

Maguyva هي الطبقة التي تكمن تحت

ليست بديلًا عن Windsurf. طبقة سياق المستودع التي تتصل بدعم MCP في Cascade.

  • دلالي + AST + رسم بياني + نصي بحث بالمعنى، أو البنية، أو التبعية، أو النص الحرفي. كل نتيجة تُرجع مسار ملف ورقم سطر.
  • عابر للحزم افتراضيًا مواقع الاستدعاء والمستوردون عبر كل حزمة في المستودع الأحادي، لا الحزمة التي يفتحها Cascade فقط.
  • واعٍ بالفرع ترى Maguyva نسخة الكود التي يحرِّرها Cascade.
  • مكمِّلة لا منافِسة.windsurfrules تواصل أداء مهمتها. إشارات @ تواصل أداء مهمتها. Maguyva تسدّ الثغرة التي لا تسدّانها.

Cascade يحرِّر الملف الذي تشير إليه.

Maguyva تخبر الوكيل بالملف الذي يجب الإشارة إليه.

ثلاثة تدفقات عمل في المستودع الأحادي

عابر للحزم، وعابر للغات. مؤسَّس على الرسم البياني الفعلي للاستدعاءات، لا على grep الخاصة بـCascade.

// workflow 01

إيجاد تدفق المصادقة عبر الحزم، بلا الإشارة إلى أي شيء

cascade> أين تحدث المصادقة في هذا المستودع الأحادي؟

graph::query("authentication flow")
  packages/web/src/auth/session.ts:42       middleware
  packages/api/src/auth/jwt.ts:88           token verify
  packages/shared/src/auth/types.ts:12      AuthContext
  packages/admin/src/auth/admin-only.ts:31  rbac gate

 4 نقاط دخول عبر 4 حزم، مرتَّبة حسب كثافة مواقع الاستدعاء.
[exit 0]

لم تُشِر إلى ملف. لم تلصق مقتطفًا. لدى Cascade الملفات الأربعة المهمة، بالترتيب الصحيح، ويمكنه إجراء تعديل مؤسَّس.

// workflow 02

إيجاد التنفيذ الحقيقي، لا البديل الاختباري

cascade> كيف تتعامل normalizePhoneNumber مع E.164؟

semantic::query("normalize phone E.164")
  packages/shared/util/phone.ts:88     normalizePhoneNumber()  ← التنفيذ الحقيقي
  packages/api/test/phone.spec.ts:14   jest.mock(...)          ← بديل اختباري
[exit 0]

الأسماء تكذب. المحاكيات تحجب الكود الحقيقي. تُرتِّب Maguyva التنفيذ الحقيقي فوق محاكي الاختبار، عبر كل حزمة.

// workflow 03

تحقّق من نطاق التأثير قبل إعادة الهيكلة

cascade> ما الذي يستدعي QueueDispatcher.publish عبر المستودع الأحادي؟

graph::callers(QueueDispatcher.publish)
  3 في packages/billing/*
  1 في packages/audit/*
  1 في packages/notifications/*
  1 في services/python-worker/*  ← عابر للغات عبر بديل gRPC
[exit 0]

عابر للحزم، وعابر للغات عندما يكون لديك مستودع متعدد اللغات، تظهر مواقع الاستدعاء ضمن السياق. الفرق مؤسَّس على مستوردين حقيقيين، لا على grep الخاصة بـCascade.

الإعداد مع Windsurf

ثلاث خطوات. خطة Free: 3 مستودعات, حتى 50 ألف سطر مُفهرَس من المستودع، بلا بطاقة.

  1. // step 01

    افهرس مستودعًا على maguyva.ai

    اختر المستودع الأحادي الذي شعرت فيه بأكبر ألم في السياق.

  2. // step 02

    أضف Maguyva كخادم MCP في Windsurf

    // ~/.codeium/windsurf/mcp_config.json
    {
      "mcpServers": {
        "maguyva": {
          "serverUrl": "https://maguyva.tools/mcp",
          "headers": {
            "Authorization": "Bearer <your-key>"
          }
        }
      }
    }
  3. // step 03

    اطرح سؤالًا واحدًا تعرف إجابته مسبقًا

    لا تبدأ بشركتك بأكملها. ابدأ بمستودع واحد وسؤال واحد يمكن التحقق منه، مثل «ما الذي يستدعي formatInvoice عبر الحزم؟»