مترجَم عن الأصل الصيني. وعند الاختلاف بينهما، يُعتد بالأصل.

Confer — معمارية النظام

هذه الوثيقة تصف المعمارية المنشودة، لا ما هو مُنفَّذ فعلاً. التنفيذ الحالي هو بوابة من عملية واحدة ونسخة واحدة: جدول اتصالات WebSocket، وقيم nonce التي تحمي من إعادة إرسال طلبات A2A، وعدّادات تحديد المعدّل — كلها تعيش في ذاكرة عملية البوابة (ws/handler.ts، lib/nonce-cache.ts، middleware/rate-limit.ts).

ولهذا لا يمكن تشغيل نسخة ثانية من البوابة. إضافة نسخ تكسر حماية إعادة الإرسال في A2A بصمت: يقع الطلب المُعاد على نسخة أخرى جدول nonce فيها فارغ، فيمرّ. كما تفوت إشعارات WS المستخدمين المتصلين بنسخة أخرى، ويتضاعف حدّ تحديد المعدّل بعدد النسخ.

أما NATS وRedis المذكوران أدناه فهما الحل المقترح عند التوسّع الأفقي؛ وهما اليوم غير منشورَين ولا موصولَين بشيء (أُزيلا من docker-compose*.yml ومن env.ts في 2026-08-07؛ وقبل ذلك كانا حاويتين تدوران في الفراغ ومتغيّر بيئة لم يقرأه أحد). ولو أردنا التوسّع الأفقي فعلاً، فالخطوة الأولى نقل هذه الحالات الثلاث من ذاكرة العملية إلى تخزين مشترك، وفي مقدّمتها nonce لأنها حرجة أمنياً.

المعمارية العامة

┌────────────────────────────────────────────────────────────┐
│  Clients (Tauri 2.0)                                       │
│  iOS · Android · Windows · macOS · Linux                   │
└──────────────────────────┬─────────────────────────────────┘
                           │ WSS / HTTPS / SSE
                           ▼
┌────────────────────────────────────────────────────────────┐
│  Edge API Gateway  (Bun + Hono)                            │
│  Auth · Rate limit · Routing · WS fan-out                  │
└─────┬─────────────┬─────────────────┬────────────────┬─────┘
      │             │                 │                │
      ▼             ▼                 ▼                ▼
 ┌────────┐  ┌─────────────┐  ┌────────────┐  ┌──────────────┐
 │ Agent  │  │Conversation │  │ Identity & │  │ MCP / Tools  │
 │Runtime │  │     Hub     │  │A2A Gateway │  │  Connector   │
 └───┬────┘  └──────┬──────┘  └─────┬──────┘  └──────┬───────┘
     │              │               │                │
     ▼              ▼               ▼                ▼
┌──────────────────────────────────────────────────────────────┐
│  Data layer: PostgreSQL · Redis · NATS · Vector (Qdrant)·S3 │
└──────────────────────────────────────────────────────────────┘
       │                              │
       ▼                              ▼
 LLM providers              Other instances' Agents
 (Claude / GPT /            (federation via A2A
  DeepSeek / Qwen)           over HTTPS)

مبادئ التصميم

حدود الخدمات

1. Edge API Gateway

انظر docs/05-api.md.

2. Agent Runtime

لكل مستخدم نسخة وكيل مقيمة.

3. Conversation Hub

4. Identity & A2A Gateway

التصميم التفصيلي للبروتوكول في docs/03-protocol.md.

5. MCP / Tools Connector

طبقة البيانات

المكوّن الغرض الحالة
PostgreSQL المستخدمون والوكلاء والحوارات والرسائل والأذونات وعلاقات الأقران (التخزين الرئيسي) ✅ مستخدَم
Qdrant استرجاع ذاكرة الوكيل بعيدة المدى، وفهرسة قواعد معرفة المستخدم ✅ مستخدَم
متوافق مع S3 (MinIO) تخزين ملفات قواعد المعرفة ✅ مستخدَم
Redis الجلسات، الحضور، عدّادات تحديد المعدّل، ذاكرة البيانات الساخنة ⬜ غير منشور؛ لن يلزم إلا عند التوسّع الأفقي
NATS Streams بثّ الرسائل (user.{uid}.events) وطابور مهام Agent Runtime ⬜ غير منشور؛ لن يلزم إلا عند التوسّع الأفقي

معمارية العميل

التغطية عبر المنصّات

المنصّة عبر
iOS دعم iOS في Tauri 2.0
Android دعم Android في Tauri 2.0
Windows Tauri 2.0
macOS Tauri 2.0
Linux Tauri 2.0

قاعدة شيفرة واحدة، بلا بدائل أصلية.

إضافة Claude Code

انظر docs/06-claude-code-plugin.md.

معمارية النشر

نسخة مفردة (أفراد / فرق صغيرة)

ملف docker-compose.prod.yml الفعلي (agent-runtime وidentity مكتبتان داخل البوابة، لا خدمتان مستقلّتان):

  - gateway   (خدمة Bun، نسخة واحدة — انظر الملاحظة في الصدر)
  - client    (واجهة أمامية يقدّمها nginx)
  - migrate   (مهمّة تُنفَّذ مرة واحدة)
  - postgres
  - qdrant
  - minio

النشر: docker compose -f docker-compose.prod.yml up -d ويصبح جاهزاً للاستعمال.

نسخة المؤسسة

السحابة (سحابة Confer نفسها)

شرط مسبق: البوابة اليوم بنسخة واحدة (حالة داخل العملية). وقبل تعدّد النسخ يجب نقل جدول اتصالات WS وقيم nonce الخاصة بـ A2A وعدّادات تحديد المعدّل إلى تخزين مشترك، وإلا سقطت حماية إعادة الإرسال بصمت.

الاتحاد (بين النسخ)

أي نسخة من Confer — مستضافة ذاتياً أو سحابية — تستطيع التخاطب مع غيرها عبر بروتوكول A2A.

[acme.com]              [vendor-x.com]            [confer.cloud]
 Agent A    <─── A2A ───> Agent B    <─── A2A ───> Agent C

الهوية والاكتشاف:

قابلية الرصد

الحدود الأمنية

القرارات التقنية الفاصلة

القرار الاختيار البدائل السبب
لغة الخلفية Bun + TypeScript Go حِزم تطوير MCP وA2A مكتوبة لـ TypeScript أولاً؛ والأنواع مشتركة عبر المكدّس
إطار الويب Hono Elysia، Fastify خفيف وسريع ومنظومته مستقرّة
العميل Tauri 2.0 Flutter، Electron قاعدة شيفرة واحدة لخمس منصّات، وأمان Rust، وحجم صغير
التخزين الرئيسي PostgreSQL 18 MySQL دعم جيّد لـ JSON، وقابلية توسيع عالية، وpgvector عند الحاجة
ناقل الرسائل NATS Kafka، Redis Pub/Sub خفيف، ذو استمرارية، واشتراك دقيق
قاعدة المتّجهات Qdrant Pinecone، pgvector ناضجة للاستضافة الذاتية، مكتوبة بـ Rust، وأداؤها مستقرّ
الهوية DID:web DID:key، OAuth وحده متوافقة مع بنية الويب القائمة، وتوصي بها NANDA
البروتوكول A2A + MCP + AgentFacts بروتوكول خاص نراهن على منظومة البروتوكولات المفتوحة
← العودة إلى Confer A2A · DID:web · RFC 9421 · NANDA