تخطَّ إلى المحتوى
kazma.
البحث في كاظمه والتوثيق
EN

مصفوفة واجهة API والمسارات

الأسطح الأساسية لتطبيق FastAPI (kazma_ui). المصادقة رفض افتراضي لمسارات /api/* ما لم تُذكر مفتوحة. خطر HITL ينطبق على تنفيذ الأدوات، وليس على كل مسار HTTP.

الطريقةالمسارالمصادقةالوصف
GET/healthمفتوححيوية
GET/health/liveمفتوحالعملية حية
GET/health/readyمفتوحالجاهزية (اختبار DB عند ضبطه)
الطريقةالمسارنطاق المصادقةالوصف
GET/POST/loginصفحة عامةتسجيل دخول متعدد الأوضاع (مستخدم / سر / OIDC)
POST/api/auth/*متفاوتدخول، خروج، جلسة (انظر auth.py، saas_api.py)
GET/api/saas/*مشرف / مشغِّلالمستأجرون، ومستخدمو المنصة (RBAC)
الطريقةالمسارالمصادقةHITLالوصف
POST/api/chat/streamجلسة/سرمقاطعة الرسم البياني عند أدوات الخطورةتدفق دردشة SSE
POST/api/approve/{thread_id}جلسةيستأنف HITL الرسم البيانيالموافقة على أداة خطرة
*عمليات CRUD للجلسات تحت /api/sessions*جلسة—قائمة الخيوط / السجل (session_manager)
الطريقةالمسارالمصادقةHITLالوصف
*/api/ide/*جلسةعبر سجل الأدواتملفات، وapply_patch، وبحث قاعدة الشيفرة، وLSP (GET/POST /lsp)، وتشغيل، وgit، وإرسال السرب (ide_api.py)
GET/ideجلسة—صفحة IDE
الطريقةالمسارالمصادقةالوصف
*/api/swarm/*جلسة (GET) / مشرف (كل ما عداه)العمّال، والإرسال، والمهام، والمقاييس. جدول واحد، kazma_ui/swarm_panel/route_roles.py؛ ويُرفض بـ 409 swarm_single_operator على تثبيت فيه مستخدمو منصة
POST/api/swarm/workers/{name}/circuit-breaker/resetمشرفإغلاق قاطع دائرة عامل الآن (زر Reset على بطاقة العامل، يظهر والقاطع مفتوح أو نصف مفتوح)
GET/api/swarm/approvals/{id}جلسةطلب موافقة واحد من ناقل السرب، للوحة الموافقة في صفحة السرب (الرابط الموجود على كل بطاقة موافقة في الدردشة): الأداة، وحالتها، والاستدعاء كاملًا كما يحفظه سجل البوابة، والبصمة (hash) التي تعرضها البطاقة، ومن قرّر. بوابة موافقة الدردشة لا توجد هنا
POST/api/swarm/approvals/{id}/decideمشرف{"decision": "approve" | "deny"}: يجيب عن الطلب من الويب، وهو القرار المشترك نفسه الذي تتخذه أزرار الدردشة (platform: web). ‏409 not_pending بعد أن يُجاب عنه أو ينتهي
GET/api/swarm/tasks/exportجلسةسجل المهام بصيغة JSON، أو CSV مع ?format=csv (أحدث 1,000 مهمة؛ بمرشحات type وstatus وq مثل قائمة السجل). زر تصدير CSV في سجل المهام
GET/api/swarm/tasks/{id}/streamجلسةتدفق المهمة الحي (swarm_sse): أحداث المهمة حتى الآن، ثم الأحداث الحية حتى تنتهي. وينتهي تدفق المهمة المكتملة دائمًا بـ task_completed ونتيجة المهمة، تُبنى من المهمة المخزّنة حين لا يحتفظ الخادم بأحداثها (بعد إعادة التشغيل).
GET/swarmجلسةصفحة لوحة السرب
*/api/replay/*جلسةالسفر عبر الزمن: خيوط، ولقطات، واستعادة، وتفريع، ومقارنة، ومسح (replay_routes.py)
GET/replayجلسةصفحة لوحة السفر عبر الزمن
*/api/research/*جلسةالبحث: قائمة، وتفصيل، ومقارنة، وتصدير، وأرشفة، وإلغاء أرشفة (research_panel/routes.py). التقرير الذي يسمّيه الطلب مسارٌ داخل مجلد research/reports، ولا يُقرأ غيره
POST/api/research/sessionsجلسةبدء جلسة بحث معمّق (خط أنابيب خلفي)
GET/api/research/sessionsجلسةسرد جلسات البحث الدائمة
GET/api/research/sessions/{id}جلسةحالة الجلسة / السجل / مسار التقرير
GET/api/research/sessions/{id}/streamجلسةتقدم SSE (snapshot / progress / done)
GET/api/research/evalجلسةمعيار هيكلي لـ?path=research/reports/… أو ?session_id=
POST/api/memory/v2/eval/goldenجلسةتشغيل حالات استدعاء الذاكرة الذهبية (نسبة النجاح)
GET/researchجلسةصفحة لوحة البحث (نموذج بدء + تقدم حي)
الطريقةالمسارالمصادقةالوصف
GET/api/system/statusجلسةلوحة صحة الذاكرة + تحقيقات المُضمِّن/الطبقة (build_memory_health)
GET/api/memory/graphجلسةرسم بياني للخصائص بصيغة JSON (nodes/edges)؛ مرشح ?q= اختياري
GET/api/memory/graph/statsجلسةأعداد العقد/الحواف + مسار الخلفية
GET/api/memory/graph/searchجلسةبحث FTS عبر عقد الرسم البياني (?q=&limit=)
POST/api/memory/graph/clearجلسةإبطال ثنائي الزمن لمعتقدات V2 النشطة لمستأجر واحد (?tenant= الافتراضي default؛ لا يوجد وضع لكل المستأجرين). يضع شواهد قبور على مرآة PG، ويحذف حواف Neo4j، ويكتب صف تدقيق graph_clear. الواجهة تؤكد.
*/api/system/memory/*جلسةنسخ احتياطي / استعادة / صيانة لمخازن الذاكرة

محرك V2 المعرفي (/api/memory/v2/*)

Section titled “محرك V2 المعرفي (/api/memory/v2/*)”

مفعَّل عندما تكون memory.v2.use_new_stack صحيحة. كل المسارات تعيد JSON مُشكَّلًا عند الخطأ (لا 500 مكشوف أبدًا)؛ المعاملات غير الرقمية تعطي FastAPI 422.

الطريقةالمسارالمصادقةالوصف
GET/api/memory/v2/healthجلسةلقطة صحة V2 — أعداد المعتقدات النشطة/المُستبدَلة/المؤرشفة، وإحصاءات الحلقات/الكيانات/الإجراءات، وعمق الطابور. تُغذّي شبكة مؤشرات لوحة القيادة (pollV2Health، إيقاع 5s).
GET/api/memory/v2/beliefsجلسةقائمة المعتقدات النشطة. مرشح FTS عبر ?q=، و?limit= (الافتراضي 50، محدود 1–200).
GET/api/memory/v2/beliefs/{id}جلسةتفصيل المعتقد + سلسلة الاستبدال.
POST/api/memory/v2/beliefs/{id}/invalidateجلسةإبطال ناعم لمعتقد واحد (+ حذف حافة Neo4j بأفضل جهد).
POST/api/memory/v2/beliefs/invalidate-batchجلسةإبطال ناعم لعدة معتقدات ({ "ids": [...] }).
PATCH/api/memory/v2/beliefs/{id}جلسةتعديل المشغِّل لثلاثية نشطة: اختياري subject، وpredicate، وobject، وpredicate_type. يضبط extraction_method=user_explicit؛ يمسح التضمين عند تغير المفعول.
GET/api/memory/v2/graphجلسةرسم المعتقدات {nodes, links, stats, groups} للوحة الرسم. ثنائي الزمن + معاملات ترشيح: ?at=<unix_ts> (تمرير نقطة زمنية؛ المعتقدات المُستبدَلة موسومة superseded=true)، و?type= (functional/set/state لـpredicate_type)، و?entity_type= (person/tool/concept/…)، و?limit= (الافتراضي 200)، و?source=neo4j (تحقق اختياري). stats.total_links مقابل stats.links هو فارق التقطيع الظاهر على لافتة الاقتطاع. الثوابت: معرفات عقد فريدة؛ لا عقدة حقيقة افتراضية عندما يساوي نص المفعول معرف كيان؛ لا روابط معلقة؛ عقدة المحور id=user مع name للعرض من entities.user (أغلفة الشخص الذاتية مطوية على المحور)؛ موضوعات مفعول الحمولة تحمل مرساة محور related_to.
GET/api/memory/v2/entitiesجلسةقائمة الكيانات لعمليات /memory. الأعلام: empty، وisolated، وprotected، و**core** (محمي دائمًا، لا يمكن إلغاء حمايته)، و**is_self، وgraph_id** (الأغلفة الذاتية → "user"). الاستعلام: ?q=، و?empty_only=، و?isolated_only=، و?limit=.
POST/api/memory/v2/entities/{id}/protectجلسة{ "protected": true|false }: الكيان المحمي لا يمكن حذفه أو دمجه بعيدًا (Protect / Unprotect في صفحة الذاكرة). الكيانات الجوهرية ترفض false.
POST/api/memory/v2/entities/{id}/renameجلسةإعادة تسمية للعرض فقط ({ "name": "…" }). المعرف ثابت؛ الأسماء المستعارة محفوظة. أغلفة User للذات/الشخص ترفع أيضًا محور entities.user. يعيد hub_synced، وgraph_id.
POST/api/memory/v2/entities/mergeجلسةدمج المصدر في الهدف (إعادة توصيل المعتقدات، واتحاد الأسماء المستعارة).
POST/api/memory/v2/entities/linkجلسةإنشاء حافة معتقد (subject، وpredicate، وobject).
DELETE/api/memory/v2/entities/{id}جلسةحذف غلاف الكيان (محجوب للمعرفات المحمية: user، وassistant، …). ينسخ صفوف entity_merges المطابقة إلى entity_merges_archive قبل إسقاط صفوف السجل الحية (FK).
GET/api/memory/v2/admin/summaryجلسةأعداد لرقاقات العمليات (المعتقدات الحية/المبطلة، والكيانات الفارغة/المعزولة).
GET/POST/api/memory/v2/hygiene/*جلسةمعاينة + تشغيل تطهير الفارغة / إبطال شبه المكررة / الأرشفة.
GET/POST/api/memory/v2/entity-merges*جلسةقائمة الدمج في الحجر الصحي + الموافقة/الرفض.
GET/POST/DELETE/api/memory/v2/graph/groups*جلسةتجميعات للعرض فقط (سرد/إنشاء/حذف/نقل/تدرج). لا تعدّل المعتقدات أبدًا. ويرفض الإنشاء عقدةً لها أمٌّ أصلًا (ويسمّي الجوابُ مسار النقل)؛ وجمّع تحت← على عقدة مُجمّعة ينقلها، والمستوى… يحدد مستوى عقدة مُجمّعة. استطلاع اللوحة يستخدم groups على GET /graph؛ وفض التجميع هو DELETE …/groups/{id}.
GET/api/memory/v2/graph/exportجلسةتصدير JSON أو GraphML عند الطلب (?format=json|graphml).
POST/api/memory/v2/probeجلسةتشغيل جاف للاستدعاء (رقاقات الشرح).
POST/api/memory/v2/federated-searchجلسةبحث موسوم في الذاكرة + قاعدة المعرفة.
POST/api/memory/v2/eval/goldenجلسةحزمة الاستدعاء الذهبية.

الصفحة: GET /memory (HTML إداري). الدليل: الذاكرة وRAG · أفضل مسار للذاكرة.

الطريقةالمسارالمصادقةالوصف
*/api/settings*، تصدير الإعداداتمشرف/مشغِّلواجهة إعدادات مدعومة بـConfigStore
PUT/api/settings/single، /api/settingsمشرفحفظ إعداد واحد، أو عدة إعدادات في معاملة واحدة. يطبّق الاثنان فحوص القيم نفسها (settings_validation): المنطقة الزمنية التي لا يستطيع المجدول حلّها، ومدة الاحتفاظ التي لا يستطيع التنظيف قراءتها، وحدث حالة الخادم الذي لا يرسله Kazma، تُرَدّ كلها بـ 400 ولا يُكتب شيء.
GET/api/settings/system/backupمشرفالنسخة الاحتياطية للإعدادات (YAML): كل إعداد مخزَّن، والمفاتيح كإشارات إلى الخزنة، دون بيانات اعتماد ولا شيء من حالة Kazma الخاصة. الإعداد.
GET/api/settings/export?format=yaml|jsonمشرفالنسخة الاحتياطية نفسها بصيغة YAML أو JSON.
POST/api/settings/system/restore?dry_run=&sections=&expect=مشرفالمحتوى: نسخة احتياطية (YAML أو JSON، 10 ميغابايت على الأكثر). يعيد dry_run=true الخطة (changed وkeys_restored وkeys_to_reenter وrefused وkept وdigest) ولا يكتب شيئًا. ومن دونه تُكتب الخطة؛ ومع expect (قيمة digest من المعاينة) تُرفض الخطة التي تغيّرت منذئذ بـ 409 مع الخطة كما هي الآن. ‏400 لملف ليس نسخة احتياطية، و413 لما يتجاوز 10 ميغابايت، و503 حين تكون الإعدادات محفوظة في الذاكرة (قاعدة البيانات غائبة). ويستعيد sections=agent,providers تلك الأقسام فقط.
GET / POST/api/settings/system/restore/undoمشرف‏GET: ما سيعيده التراجع عن آخر استعادة (available). ‏POST (‏expect= قيمة digest من GET): يعيده؛ ويبقى الإعداد الذي تغيّر مجددًا بعدها والمفتاح الذي أعادته الاستعادة. ‏409 حين لا يوجد ما يُتراجع عنه.
GET/PUT/api/settings/agent/nonstopجلسة / مشرفإعدادات المراقب/تجاوز الفشل/السجل لعدم التوقف والشفاء الذاتي
*مساحات العمل /api/workspaces*جلسةعمليات CRUD لـWorkspaceStore
GET/PUT/api/workspace/extra-rootsجلسةمجلدات خارج مساحة العمل يجوز للوكيل استخدامها دون سؤال (صفحة مساحة العمل). يستبدل PUT القائمة؛ يجب أن يكون الجذر الجديد مسارًا كاملًا لمجلد موجود، لا قرصًا كاملًا ولا مجلدًا يحوي ملفات كاظمه نفسها (ويقول 400 السبب). القراءة الفاشلة تعيد 500، لا قائمة فارغة أبدًا.
GET/api/notifications/turn-completeجلسةمفتاح «الإشعار عند انتهاء مهمة»، وهو القارئ نفسه الذي يستخدمه مرسل Web Push أيضًا

المستندات / ذكاء المستندات

Section titled “المستندات / ذكاء المستندات”

مركَّبة من documents_api.py عند /api/documents/*. نقل نحيف فوق DocumentIngestionService المشترك (لا مسار محلِّل موازٍ). المستأجر والفاعل ومساحة العمل تأتي من الطلب، لا من جسمه أبدًا: المستأجر من وسيط المستأجر (tenant middleware)، والفاعل من اسم الكيان المسجِّل دخوله (operator للسر المشترك المُرسَل في ترويسة، وlocal لطلب بلا بيانات اعتماد)، ومساحة العمل من صف مساحة العمل النشطة. لا يزوّد العملاء أبدًا مسارات خادم موثوقة.

يعود المستند إلى الفاعل الذي استوعبه؛ وكل قراءة، وقراءة مهمة، وإجراء يفحص ACL المستند. والمستند أو المهمة التي لا يستطيع المستدعي قراءتها يُجاب عنها تمامًا كما يُجاب عن غير الموجود (404). على تثبيت بمشغِّل واحد تعمل هذه المسارات وأوامر الدردشة وأدوات الوكيل كلها بوصفها مشغِّل التثبيت (documents.principal، منذ 2026-10-13)، فيرى كلٌّ منها المستندات التي استوعبها الآخرون؛ ومع مستخدمي منصة (وضع تعدد المستخدمين) تعمل هذه المسارات بوصفها كل مستخدم، وترفض الدردشة والوكيل.

الدليل: ذكاء المستندات · العمليات: معالجة المستندات · الأمان: أمان المستندات.

الاستيعاب، والمكتبة، والمهام

Section titled “الاستيعاب، والمكتبة، والمهام”
الطريقةالمسارالمصادقةالوصف
POST/api/documentsجلسةرفع متدفق. الجسم: بايتات الملف؛ واسم الملف في X-Document-Filename (مُرمَّز URL) أو ?filename=؛ واختياريًا X-Idempotency-Key و?force_ocr=1. الحجم المُعلَن، وتفعيل الكتابة، والحد الأدنى للتخزين، والطابور، وحدود المستأجر، ونافذة معدّله، يُجاب عنها كلها قبل قراءة الجسم (انظر الأجوبة أدناه؛ وحصة بايتات المستأجر تُفحص أثناء تخزين الملف)؛ ويُستقبل على الأكثر documents.capacity.max_concurrent_uploads (الافتراضي 4) رفعًا في آن واحد لكل عملية (503 uploads_busy). ويُخزَّن الجسم مؤقتًا تحت جذر التخزين ويُقطع عند documents.intake.max_bytes أو عند طوله المُعلَن (413).
POST/api/documents/importجلسةاستيعاب ملف من مساحة العمل النشطة: {"path": …} (نسبةً إلى مساحة العمل، أو مطلقًا داخلها)؛ وإلا 400 path_outside_workspace
POST/api/documents/generateجلسةتوليد + استيعاب دائم: target_format، وpayload (كائن لا يتجاوز 1 MiB مُسلسَلًا، و413 فوق ذلك؛ والتداخل الأعمق من 32 يعطي 400)، واختياريًا output_name وtitle
GET/api/documentsجلسةالمستندات التي يستطيع المستدعي قراءتها، كلٌّ منها مع حالة أحدث مهمة له
GET/api/documents/healthجلسةجاهزية المحلل/OCR/العارض/مُعدِّل PDF + حالة العامل (تشخيص للقراءة فقط). ومع KAZMA_DOCUMENT_WORKER_ISOLATION=container تكون المحركات هي التي تُبلغ عنها صورة العامل
POST/api/documents/mergeجلسةدمج ملفات PDF لـ document_ids (اثنين على الأقل) في قطعة جديدة
GET/api/documents/{document_id}جلسةالتفصيل (الإصدارات + المهام + القطع)
GET/api/documents/{document_id}/versionsجلسةقائمة الإصدارات
GET/api/documents/{document_id}/contentجلسةالمحتوى المُطبَّع، مُسيَّجًا كبيانات غير موثوقة: ?page= أو ?page_start=&page_end=، وoffset، وmax_chars (الافتراضي 20,000، و200,000 على الأكثر)، مع متابعة (continuation). ‏409 not_ready قبل انتهاء المعالجة
GET/api/documents/{document_id}/artifactsجلسةالقطع المشتقة لمستند
GET/api/documents/artifacts/{artifact_id}/downloadجلسةتنزيل قطعة عبر معرف معتم (404 حين لا يستطيع المستدعي قراءتها)
POST/api/documents/{document_id}/convertجلسةتحويل الإصدار الحالي: target_format، واختياريًا output_name → قطعة جديدة
GET/api/documents/{document_id}/pdf-infoجلسةتقرير PDF هيكلي
POST/api/documents/{document_id}/splitجلسةتقسيم نطاق صفحات: start_page، وend_page، واختياريًا output_name
POST/api/documents/{document_id}/fill-formجلسةملء حقول AcroForm: fields (كائن)، واختياريًا output_name
POST/api/documents/{document_id}/redactجلسةحجب terms (قائمة) حجبًا فيزيائيًا → قطعة جديدة؛ والأصل لا يتغيّر. لا حوار تأكيد على API (الصفحة تسأل أولًا)
POST/api/documents/{document_id}/indexجلسةنشر الإصدار الحالي في المكتبة المعرفية library_id
POST/api/documents/{document_id}/unindexجلسةإزالته من المكتبة library_id
POST/api/documents/searchجلسةالبحث في مكتبة: library_id، وquery، وtop_k (الافتراضي 5، من 1 إلى 50)؛ وتعود النتائج داخل سياج بيانات غير موثوقة
GET/api/documents/jobs/{job_id}جلسةحالة المهمة. ‏404 Job not found لمهمة غير معروفة ولمهمة لا يستطيع المستدعي قراءة مستندها، بالشكل نفسه تمامًا
GET/api/documents/jobs/{job_id}/eventsجلسةسجل أحداث المهمة بالإلحاق فقط (قاعدة 404 نفسها)
POST/api/documents/jobs/{job_id}/cancelجلسةإلغاء تعاوني (قاعدة 404 نفسها؛ و409 لمهمة لم يعد إلغاؤها ممكنًا)
POST/api/documents/jobs/{job_id}/retryجلسةإعادة تشغيل مهمة dead_letter أو rejected بوصفها مهمة جديدة (409 لأي حالة أخرى). تحتاج إذن كتابة على المستند، وتمرّ بالقبول نفسه الذي يمرّ به الرفع (429/503/507)
POST/api/documents/{document_id}/deleteجلسةشاهد قبر: يغادر المستند كل مكتبة معرفية أولًا (والمكتبة التي لا يستطيع مغادرتها توقف الحذف، 500 document_unindex_failed، كي تستطيع إعادة المحاولة إكماله)، ثم تُؤرشف بياناته الوصفية؛ ويستعيد جمع المهملات البايتات لاحقًا. جسم اختياري {"reason": …}
DELETE/api/documents/{document_id}جلسةشاهد القبر نفسه الذي يضعه POST …/delete (تنفيذ واحد)؛ والسبب يُمرَّر في ?reason=

أجوبة تشترك فيها هذه المسارات. المسارات ذات جسم JSON (import، وgenerate، وmerge، وconvert، وsplit، وfill-form، وredact، وindex، وunindex، وsearch، والجسم الاختياري لـ POST /{id}/delete) تقرأ 2 MiB على الأكثر: الطول المُعلَن الذي يتجاوزها يُرفض قبل قراءة بايت واحد، وغير المُعلَن يُقطع (413 request_too_large)؛ وJSON المشوَّه، أو الجسم الذي ليس كائنًا، أو التداخل العميق جدًا، يعطي 422 invalid_json. وسياسة المستندات الحية التي لا يمكن قراءتها أو التي تحمل قيمة محفوظة غير صالحة ترفض الاستدعاء بـ 503 وRetry-After: 30 (document_policy_unavailable). حالة واحدة لكل رمز خطأ على كل مسار (documents_api._STATUS_BY_CODE، منذ 2026-10-13؛ كانت مساعدات المسارات تحتفظ بثلاثة جداول متعارضة): الرفض الذي تسببه حالة الخادم هو 503 مع Retry-After: 30 أينما حدث — الكتابة الدائمة معطَّلة (document_platform_disabled: القراءات ومعلومات PDF والإلغاء تبقى تعمل)، وماسح برمجيات خبيثة مطلوب لا يستطيع العمل (malware_scanner_unavailable، يجيب عنه الرفع قبل قراءة جسمه)، ولا ملف تعريف عامل مسموح به (worker_isolation_*). والرمز الذي لا يسمّيه الجدول يحتفظ بالقيمة الافتراضية لمساره: 400 للاستيعاب ودورة الحياة، و422 لمسارات الإجراءات. وتحمل رفضات الرفع والاستيراد وإعادة المحاولة code؛ وتحمل رفضات 429 و503 و507 أيضًا reason وترويسة Retry-After:

الحالةالرمزمتى
413intake_too_large، quota_exceededتجاوز documents.intake.max_bytes (المُعلَن أو المُستلَم)، أو تجاوز حصة بايتات المستأجر
507storage_fullالمساحة الحرة ناقص الملف الوارد ستنزل تحت documents.capacity.storage_free_floor_bytes
503queue_full، capacity_unavailable، uploads_busyالطابور الدائم عند documents.capacity.max_queued_jobs؛ أو تعذّر إجراء قياس سعة (التخزين، أو الطابور، أو حمل المستأجر، أو مخزن القبول)؛ أو رفوع كثيرة جدًا قيد الاستقبال
429tenant_queue_full، tenant_active_full، rate_limitedحدود المستأجر للمهام في الطابور/النشطة، أو نافذة الملفات/البايتات في الدقيقة الخاصة به
409idempotency_conflict، intake_in_progress، intake_taken_overالمفتاح استُخدم لطلب آخر أو من فاعل آخر؛ أو المفتاح نفسه ما يزال قيد الاستقبال؛ أو استغرق الرفع وقتًا طويلًا حتى انقضى عقد إيجاره وتراجعت عنه عملية أخرى (لم يُحفظ شيء: أرسله مرة أخرى)

حين يكون سرٌّ مضبوطًا، تُحتسب أيضًا مسارات الرفع وimport وgenerate وmerge وconvert وsplit وfill-form وredact وindex وsearch ضمن دلو حد معدل HTTP documents، المحسوب لكل كيان (429 مع Retry-After): 10 طلبات في الدقيقة، ويُسمح للبحث بما يصل إلى 30 في النافذة نفسها؛ والقيمة المحفوظة api.rate_limit.documents_per_minute تحل محل الاثنين.

الطريقةالمسارالمصادقةالوصف
GET/api/documents/ops/metricsجلسةلقطة مقاييس خالية من المحتوى
GET/api/documents/ops/capacityجلسةلقطة الضغط العكسي + degraded_reasons
GET/api/documents/ops/readinessجلسةللقراءة فقط: خلفيات التخزين وصدق تعدد النسخ (jobs_multi_replica، وmetadata_multi_replica؛ وخلفية SQLite المختارة عمدًا ليست متدهورة)، وpolicy (المضبوط مقابل الفعلي، وrestart_required)، وmalware، وworker_isolation (hostile_document_profile، وimage_code_matches)، وstranded_intake_reservations، وrollout، وaccepting_durable_writes. وتكون status بقيمة degraded حين تتراجع خلفية مضبوطة أو حين تسمّي degraded_reasons مشكلة (عزل العامل غير متاح، أو حجوزات استيعاب عالقة، أو صورة عامل قديمة، أو فحص البرمجيات الخبيثة يحجب الاستيعاب)، وبقيمة disabled ما دامت الكتابة الدائمة معطَّلة
GET/api/documents/ops/retentionجلسةعرض حي لسياسة الاحتجاز/GC
GET/api/documents/ops/auditمشرفتدقيق تشغيلي للمستأجر مرقّم بمفتاح الصفحة (?document_id=&event_type=&limit=&before_id=). للمشرف فقط: يسمّي السجل مستندات وفاعلين قد لا يستطيع المستدعي قراءتهم
POST/api/documents/ops/maintenance/dry-runمشرفتقرير تشغيل جاف لـGC
POST/api/documents/ops/maintenance/runمشرفتشغيل GC (الصفحة تُجري دائمًا تشغيلًا جافًا وتؤكد أولًا؛ والمسار لا يشترط ذلك)

صفحة HTML: GET /documents (جلسة). يقرأ تبويب المستندات في TUI ‏GET /api/documents وGET /api/documents/{document_id}/content من الخادم العامل.

البريد الإلكتروني (email_api.py)

Section titled “البريد الإلكتروني (email_api.py)”
الطريقةالمسارالمصادقةالوصف
GET/api/email/statusجلسةالمزوّد النشط، وأوضاع المصادقة، وملخص الإعدادات الجاهزة
GET/api/email/accountsجلسةكل حساب بريد: source بقيم main / settings / env، والاسم، والنوع، والعنوان، وauth (oauth / password / incomplete)، وcalendar، وremovable
POST/api/email/accountsجلسةإضافة حساب آخر يسجّل الدخول بكلمة مرور (alias، وtype، وaddress، وpassword، والمضيفون)؛ يُجرَّب تسجيل الدخول أولًا والفاشل يُرفض (400)
POST/api/email/accounts/{alias}/removeجلسةنسيان حساب أُضيف في الإعدادات (رموزه وكلمة مروره)
GET/api/email/presetsجلسةالإعدادات الجاهزة لمضيفي Gmail/Microsoft IMAP/POP
POST/api/email/protocol/connectجلسةحفظ IMAP/POP لـgmail|microsoft|generic
POST/api/email/protocol/disconnectجلسةمسح البروتوكول + رموز OAuth للمزوّد
POST/api/email/gmail/connectجلسةكلمة مرور تطبيق Gmail → IMAP
POST/api/email/gmail/disconnectجلسةمسح بيانات اعتماد Gmail
POST/api/email/oauth/gmail/clientجلسةحفظ معرف/سر عميل Google OAuth
GET/api/email/oauth/gmail/start · start.jsonجلسةإعادة توجيه OAuth في المتصفح / JSON؛ ?account=<name> يسجّل الدخول بحساب آخر تحت ذلك الاسم
GET/api/email/oauth/gmail/callbackمفتوح (OAuth)تبادل الرموز؛ إعادة توجيه إلى الإعدادات
POST/api/email/oauth/microsoft/clientجلسةحفظ معرف/سر تطبيق Azure
GET/api/email/oauth/microsoft/start · start.jsonجلسةOAuth في المتصفح؛ ?account=<name> لحساب آخر
GET/api/email/oauth/microsoft/callbackمفتوح (OAuth)تبادل الرموز
POST/api/email/oauth/microsoft/device/start · …/pollجلسةتراجع رمز الجهاز؛ الجسم {"account": "<name>"} لحساب آخر
POST/api/email/oauth/microsoft/disconnectجلسةمسح بريد Microsoft: الرموز، وعنوان تسجيل الدخول ونطاقاته (تقويم Outlook يحتفظ بمفتاحه الخاص)
GET/api/calendar/statusجلسةحالة كل تقويم وعنوانه، والمزوّد النشط
GET/api/calendar/oauth/google/start · start.jsonجلسةتسجيل دخول Google Calendar (رد النداء: خاص Gmail)
GET/api/calendar/oauth/microsoft/start.jsonجلسةتسجيل دخول تقويم Outlook للتقويم وحده (رد النداء: خاص Microsoft، purpose=calendar)؛ يُترك البريد كما هو
POST/api/calendar/oauth/microsoft/device/startجلسةالشيء نفسه عبر رمز الجهاز (الاستقصاء بـ/api/email/oauth/microsoft/device/poll)
POST/api/calendar/oauth/google/disconnect · …/microsoft/disconnectجلسةتعطيل ذلك التقويم حتى يُعاد توصيله من البطاقة؛ البريد يبقى متصلًا

عمليات بريد الوكيل تستخدم الأدوات (email_list, …)، وليس مسارات HTTP هذه. الدليل: دمج البريد الإلكتروني.

الطريقةالمسارالمصادقةالوصف
GET/xجلسةصفحة X Studio (المحرِّر + مخطِّط X فقط).
GET/api/x/statusجلسةمُضبوط؟، المعرِّف، الحدود. لا يعيد الأسرار أبدًا.
POST/api/x/previewجلسةتشغيل جاف لسياسة ToU (evaluate_post). لا شبكة، لا سجل.
GET/api/x/draftsجلسةعناصر save_proposal المسطَّحة لصندوق Studio.
GET/api/x/auditجلسةصفوف x_audit.db الحديثة (?action=&limit=).
POST/api/x/postجلسة + CSRFنشر فوري (publish_x_post). نقرة المشغِّل هي الموافقة. اختياري reply_to_id، وproposal_id (النص المخزَّن يتفوق).
POST/api/x/deleteجلسة + CSRFحذف تغريدة حية (delete_x_post). نقرة المشغِّل هي الموافقة.
POST/api/x/credentialsجلسة + CSRFحفظ مفاتيح OAuth 1.0a الأربعة (في الخزنة) + المعرِّف + الحدود.
POST/api/x/testجلسة + CSRFGET /2/users/me بالمفاتيح المخزَّنة.
POST/api/x/disconnectجلسة + CSRFحذف المفاتيح، وتعطيل النشر.
GET/api/x/replyجلسةإعدادات الرد التلقائي + حالة مستطلع الإشارات الحي.
POST/api/x/replyجلسة + CSRFحفظ إعدادات الرد التلقائي؛ يبدأ/يوقف مستطلع الإشارات.
POST/api/x/reply/previewجلسة + CSRFتشغيل جاف لمسودة. لا شيء يُنشر أو يُسجَّل.
GET/api/x/reply/conversationsجلسةسجل الاستدعاء (الأصل + الإشارة + المسودة/السبب).
POST/api/x/reply/pollجلسة + CSRFجلب الإشارات من X الآن (يتجاهل المؤشر العالق).
POST/api/x/reply/approveجلسة + CSRFنشر مسودة محتجزة (أو فشل سلكي).
POST/api/x/reply/denyجلسة + CSRFركن مسودة محتجزة.
POST/api/x/reply/retryجلسة + CSRFإعادة تشغيل استدعاء متخطى/فاشل/قيد الصياغة.
POST/api/x/reply/deleteجلسة + CSRFحذف الرد المنشور على X (إن وُجد) وإسقاط صف السجل.

تغريدات الدردشة ما تزال تمر عبر x_post (HITL دائمًا + proposal_id). الدليل: ناشر X. الإشارات: الرد التلقائي على X.

الطريقةالمسارالمصادقةالوصف
GET/scheduledجلسةصفحة الساعات المختلطة (مهام cron و منشورات X).
GET/api/scheduled/tasksجلسةكل مهام cron (القادمة والمنتهية، كلٌّ منها مع فئة حالتها وactions التي يسمح بها الخادم) وعمليات مخزن نشر X. التعليمات (prompts) ملخصات للعرض؛ والعنوان تسمية destination.
GET/api/scheduled/cron/{job_id}جلسةمهمة واحدة مع تعليمتها كاملة وversion، لحوار التعديل.
POST/api/scheduled/cronجلسة + CSRFحجز مهمة: timing، وprompt، واختياريًا kind (reminder/task) وcapabilities (read/read_write). تنطبق الحدود القصوى، وحدود الطول، ودلو المعدل scheduled.
PUT/api/scheduled/cron/{job_id}جلسة + CSRFتعديل timing و/أو prompt مع expected_version الذي قرأته الاستمارة: 200 rescheduled، و202 edit_pending (أثناء إطلاق)، و409 conflict / not_editable.
DELETE/api/scheduled/cron/{job_id}جلسة + CSRFإلغاء: 200 cancelled، و202 cancel_pending (أثناء إطلاق)، و409 لمهمة منتهية.
POST/api/scheduled/cron/{job_id}/restoreجلسة + CSRFشغّل مرة أخرى: حجز مهمة منتهية من جديد عند timing.
POST/api/scheduled/xجلسة + CSRFحجز منشور X (book_x_post). اختياري reply_to_id، وproposal_id. يجيب بالوقت والحالة المخزَّنين.

تُعاد جدولة منشورات X في هذه الصفحة وتُلغى عبر POST /api/x/queue/{operation_id}/reschedule و.../cancel (مع المراجعة التي قرأتها الصفحة)، وهي المسارات التي يستخدمها X Studio. وكل مسار مُعدِّل يفحص أن الطلب من الأصل نفسه (kazma_ui/same_origin.py). وعلى تثبيت فيه مستخدمو منصة يجيب كل مسار بـ 409 scheduled_single_operator. السلوك: التذكيرات والمهام المجدولة.

رابط كل الساعات في X Studio هو هذه الصفحة. مخطِّط Studio نفسه لـX فقط.

الطريقةالمسارالمصادقةالوصف
خطافات الويبردود نداء Telegram/Discord/Slackأسرار المحوِّلرسائل واردة + أزرار HITL
*/api/gateway/*جلسةحالة/تحكم البوابة من CLI
الطريقةالمسارالمصادقةالوصف
WSمسارات الصوتجلسةroutes_voice_ws.py
*مسارات الفوضىKAZMA_CHAOS_ENABLEDللتطوير فقط
Static/, /chat, /settings, /x, /scheduled, …كوكي/جلسةصفحات HTML

قوائم المسارات الدقيقة تتطور مع المحوِّلات المركَّبة في app.py. لنقاط التوسعة انظر واجهة API ونقاط التوسعة.

الوضعمتى
كوكي / ترويسة سر مشتركمشغِّل وحيد
جلسة ويب معتمةالافتراضي لتعدد المستخدمين
RBAC منصة (مشاهد/مشغِّل/مشرف)واجهات SaaS API
OIDC PKCEدخول SSO
رمز API / JWTبرمجي (حيث يكون مفعَّلًا)

انظر SaaS متعدد المستخدمين ومتغيرات البيئة.