ACP مصفوفة الاختبار والدعم

ACP ثنائي الاتجاه. يجب أن يحافظ اختبار التوافق التشغيلي المفيد على اتصال واحد مفتوحًا بينما تصل الإشعارات والطلبات المتداخلة؛ إذ إن سلسلة من JSON المنفصلة لا يمكنها إثبات سلوك الجلسة.

الاختبارات التي تم التحقق منها

تتصل حزمة adk-acp بـ SDK الرسمي Client إلى ADK-Rust SDK Agent عبر ناقل في الذاكرة وتختبر:

initialize
  → session/new
  → session/prompt
  ← session/update
  ← PromptResponse(end_turn)
  → session/close
  → session/list
  → session/resume
  → session/close
  → session/delete

تغطي اختبارات منفصلة إلغاء الجلسة، وإلغاء الطلبات والاسترداد بين JSON-RPC، وتعيين الأحداث، وقوائم أذونات الرفض أولًا، ومعرّفات الخيارات الغامضة، والاختيارات المصطنعة، ولوكاء القرار البشري، وسلوك السماح مرة واحدة للاستدعاء الدقيق، والتحقق من صحة إعدادات MCP، ومخرجات التصحيح المنزوعة الأسرار. تضيف المرحلة 2 اختبارات ترتيب إعادة التشغيل لـ session/load (تطابق session/update المعاد تشغيلها الترتيب الزمني للأحداث المخزنة)، واختبارات تعيين المطالبات متعددة الوسائط ورفضها (تُقبل الصور والصوت؛ ويُرفض المحتوى غير المعلن)، واختبارات approve/deny/cancel لجسر أذونات الخادم (يُطابق الإلغاء الرفض، مع الربط بواسطة معرّف استدعاء الدالة)، واختبارات موثوقية العميل التي تثبت ظهور واجهتي ToolCallUpdate وUsageUpdate دون إرجاع سطح النص الخاص بالوكيل. تضيف المرحلة 3 اختبارات وضع الجلسة وخيارات الإعدادات (تسجل set_mode / set_config_option القيم المعلنة وترفض غير المعروفة منها، وتستمر عملية الاختيار عبر session/load)، واختبار عزل session/fork (يكون سجل الشعبة مساويًا لسجل المصدر ويظل المصدر دون تغيير)، واختبارات تفعيل الأوامر المتاحة ومعلومات الجلسة (لا تُرسل التحديثات إلا عندما يعلن الوكيل عن الأوامر أو يسجل عنوانًا)، واختبار دقة القدرات الذي يؤكد أن القدرات المعلنة تطابق تمامًا المعالجات المسجلة وتعيينات المحتوى الممكّنة — بما في ذلك أن الأوضاع وخيارات الإعدادات لا تُعلن إلا عند وجود موفر SessionControls.

تبدأ بوابة دورة حياة MCP الحية طفل MCP حقيقيًا عبر stdio، وتكمل المصافحة، وتكتشف أدواته من خلال نفس McpToolset المستخدم بواسطة جلسات ACP.

تشغيل البوابات

cargo test -p adk-acp --all-features
cargo test -p adk-agent --test tool_confirmation_tests
cargo test -p adk-tool --features mcp --test mcp_server_lifecycle_integration_tests test_tool_aggregation -- --ignored --exact

cargo test --manifest-path examples/acp_client_host/Cargo.toml
cargo check --manifest-path examples/acp_kiro/Cargo.toml
cargo check --manifest-path examples/acp_server/Cargo.toml
cargo test --manifest-path examples/acp_full_protocol/Cargo.toml

بوابة acp_full_protocol هي شبكة الأمان القابلة للتشغيل في المرحلة 2: API-key، Runner-backed AcpServer يُدار عبر SDK الرسمي خلال قناة داخل العملية، مع التحقق من سطح المرحلة 2 الكامل باتجاه الخادم (مطالبات الموارد المضمّنة والصور/الصوت، وجسر الأذونات، وترتيب إعادة التشغيل لـ session/load، وإظهار UsageUpdate / ToolCallUpdate) دون عملية فرعية أو بيانات اعتماد النموذج.

الدعم الحالي

المنطقةالحالةملاحظات
بروتوكول الأسلاك المستقر v1مُطبَّقRust الرسمي SDK 1.2؛ يتم التفاوض على إصدار البروتوكول بشكل منفصل
نقل عميل stdio المحليمُطبَّقجلسات لمرة واحدة، وبثّية، ومستمرة
أذونات العميلمُنفَّذالرفض افتراضيًا، المطابقة الدلالية، معرّفات غير شفافة، سياسة متزامنة أو غير متزامنة
استدعاءات نظام الملفات للعميلمُنفَّذ APIيُعلَن عن القراءة والكتابة بشكل مستقل
استدعاءات الطرفية للعميلمُنفَّذ APIسمة كاملة لإنشاء/إخراج/انتظار/قتل/تحرير
MCP المقدَّمة من العميلمُنفَّذمطلوب stdio؛ مع إمكانات HTTP/SSE محكومة بالقدرات
ADK-Rust ACP serverمُنفَّذجديد، prompt، تحميل، تحديث، إلغاء، إغلاق، قائمة، استئناف، تفريع، set_mode، set_config_option، حذف
تحميل جلسة الخادم + إعادة التشغيلمُنفَّذيعيد تنشيط جلسة محفوظة ويعيد تشغيل الأحداث المخزنة بالترتيب الزمني؛ load_session مُعلَن
تفريع جلسة الخادممُنفَّذينسخ السجل والحالة ذات الصلة إلى معرّف جلسة جديد، مع ترك المصدر دون تغيير؛ fork مُعلَن
أوضاع جلسة الخادم + خيارات الإعدادمُنفَّذمحكوم من المزوّد عبر SessionControls؛ يتم التحقق من set_mode / set_config_option وتُحفظ عبر التحميل/الاستئناف/التفريع؛ لا يُعلَن إلا عند التصريح بها
الأوامر المتاحة للخادم + معلومات الجلسةمُنفَّذيُرسل عند التفعيل عندما يعلن الوكيل عن الأوامر أو يسجّل عنوانًا؛ وإلا فلا شيء
تحديثات خطة الخادمغير نشطتوجد مطابقة Plan SessionUpdate لكنها تظل خاملة حتى يطرح ADK بدائية الخطة عناصر الخطة
جلسة الخادم MCPمُنفَّذstdio، لكل جلسة، بدء تشغيل وإيقاف محدودان
مطالبات النص وروابط المواردمُنفَّذتُربط عبر وحدة المحتوى المشتركة
المطالبات متعددة الوسائط (صورة، صوت)مُنفَّذمُعيَّنة إلى Part::InlineData؛ تم الإعلان عن image/audio؛ ويتم رفض المحتوى غير المُعلَن
مطالبات الموارد المضمَّنةمُنفَّذمُعيَّنة إلى Part::EmbeddedResource؛ تم الإعلان عن embedded_context
موافقة أداة ADK من الخادم إلى ACPمُنفَّذيتم ربط ToolConfirmationRequest بـ session/request_permission؛ allow → approve، وdeny/cancel → deny، مع الارتباط بواسطة معرّف استدعاء الدالة
دقة تحديث الأداة والاستخدام لدى العميلمُنفَّذOutputChunk::ToolUpdate وOutputChunk::Usage يعرضان External_Agent الخاص بـ ToolCallUpdate/UsageUpdate؛ نص agent غير مُغيَّر
محتوى المطالبة الغني للعميلمُنفَّذprompt_agent_content_with_policy ينقل محتوى ADK غير النصي باعتباره كتلة ACP المطابقة
ACP HTTP/WebSocket عن بُعدغير مُعلَنالتنفيذ المستقر هو stdio المحلي
ميزات البروتوكول التجريبيةغير مُعلَنأضِفها فقط بعد التنفيذ واختبارات التشغيل البيني

اختبار المحرر اليدوي

قم ببناء examples/acp_server، ثم اضبط عميل ACP لبدء ذلك الملف الثنائي مع مسار بيان مطلق وبيانات اعتماد النموذج. تحقّق مما يلي:

  1. تعرض استجابة التهيئة إصدار البروتوكول 1؛
  2. تقبل جلسة جديدة دليل المشروع المطلق المقصود؛
  3. يظهر النص كتحديثات حيّة قبل الاستجابة النهائية؛
  4. تبدأ أداة القراءة وتظهر الإكمالات في العميل؛
  5. يؤدي الإلغاء إلى إغلاق الجولة دون إغلاق الاتصال؛
  6. تنجح مطالبة لاحقة في الجلسة نفسها؛
  7. يحافظ الإغلاق والاستئناف على السجل عندما تكون خدمة الجلسة دائمة.

لا تستخدم echo | cargo run لهذا الاختبار. كل أنبوب يبدأ عملية مختلفة ولا يمكنه الحفاظ على الاتصال أو الجلسة.