// المحرِّر
Windsurf
حيث تعملان أنت وCascade فعليًا.
لمستخدمي Windsurf
Windsurf هو المحرِّر وCascade هو الوكيل. في المستودع الأحادي، ما يزال الوكيل يحتاج إلى خريطة توضّح أي ملف يهم. تفهرس Maguyva قاعدة الكود لديك وتعيدها عبر MCP (دلاليًا، وAST، ورسم بيانيًا، ونصيًا)، لذا يعيد سؤال «أين تحدث المصادقة» تدفق المصادقة الفعلي، لا سبع نسخ اختبارية وهمية.
خطة Free: 3 مستودعات, حتى 50 ألف سطر مُفهرَس من المستودع، بلا بطاقة.
Windsurf يحرِّر ما تشير إليه. Maguyva تخبر Cascade بالملف الذي يجب الإشارة إليه.أربع قطع. لكل واحدة مهمتها.
// المحرِّر
حيث تعملان أنت وCascade فعليًا.
// السياق اليدوي
السياق اليدوي يفوز، إلى أن يكبر المستودع.
// قاعدة الكود
حقائق تلقائية عن قاعدة الكود عبر MCP.
// من يدفع
الوكلاء لا يدفعون مقابل مقاعد. اطّلع على الأسعار
بيئة التطوير ليست هي المشكلة. Cascade، والإكمال التلقائي عبر Tab، والتحرير متعدد الملفات، و.windsurfrules كلها ممتازة، وأنت بالفعل تستخدمها من أجل:
.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 قبل الالتزامات”. إنه ليس فهرسًا قابلًا للاستعلام عن كل رمز وملف وموقع استدعاء في مستودعك الأحادي.
ليست بديلًا عن Windsurf. طبقة سياق المستودع التي تتصل بدعم MCP في 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.
ثلاث خطوات. خطة Free: 3 مستودعات, حتى 50 ألف سطر مُفهرَس من المستودع، بلا بطاقة.
// step 01
اختر المستودع الأحادي الذي شعرت فيه بأكبر ألم في السياق.
// step 02
// ~/.codeium/windsurf/mcp_config.json
{
"mcpServers": {
"maguyva": {
"serverUrl": "https://maguyva.tools/mcp",
"headers": {
"Authorization": "Bearer <your-key>"
}
}
}
}// step 03
لا تبدأ بشركتك بأكملها. ابدأ بمستودع واحد وسؤال واحد يمكن التحقق منه، مثل «ما الذي يستدعي formatInvoice عبر الحزم؟»