الإعدادات
المرجع الشامل. كل مفتاح في
kazma.yaml، وكل متغير بيئة، ونموذج التجاوز في ConfigStore، وسجلّ المُزوّدين/النماذج، وملفات الإعدادات الأمنية — كلها قابلة للتتبّع إلى المصدر.
1. مصادر الإعدادات والأسبقية
Section titled “1. مصادر الإعدادات والأسبقية”يحلّ كاظمة الإعدادات من ثلاث طبقات. بالنسبة للدالة العامة ConfigStore.get(key)، يكون الترتيب:
flowchart LR C[In-process cache] -->|miss| DB[(SQLite settings.db)] DB -->|miss / child-merge| YAML[(kazma.yaml)] YAML -->|fallback| DEFAULT[hardcoded default]| # | الطبقة | تتفوّق؟ | ملاحظات |
|---|---|---|---|
| 1 | متغير البيئة | فقط في دوال مساعدة محدّدة (get_kazma_secret، get_or_create_disclosure_key) — وليس في الدالة العامة get(). | مثال KAZMA_SECRET |
| 2 | قاعدة بيانات ConfigStore (kazma-data/settings.db) | نعم لعمليات القراءة وقت التشغيل عبر get(). | تتجاوز قاعدة البيانات ملف YAML. |
| 3 | kazma.yaml | الخط الأساسي عند الإقلاع الأول. | reconcile_from_yaml() يزرع قاعدة البيانات فقط للمفاتيح غير الموجودة مسبقًا. |
| 4 | القيمة الافتراضية المضمّنة | الملاذ الأخير. | مثال gpt-4o-mini، DEFAULT_DANGER_TOOLS. |
أسبقية التجاوز (تفصيليًا)
Section titled “أسبقية التجاوز (تفصيليًا)”ConfigStore.get(key)(config_store.py:471-516): يفحص الـ_cacheداخل العملية أولًا (مع قيمة حراسة_MISSINGللمفاتيح المعروفة بغيابها)، ثم صف قاعدة البيانات المطابق تمامًا، ثم إعادة دمج المفاتيح الفرعية من قاعدة البيانات عبر_collect_prefixed(الصفوف التي يبدأ مفتاحها بـkey.يتم تحويل نقاطها إلى قاموس متداخل)، ثم بحث المفتاح المنقّط في YAML.ConfigStore.set(key, value)يكتب صفًا واحدًا ويمسح الذاكرة المؤقتة لهذا المفتاح (config_store.py:518-536).ConfigStore.batch_set(items)هو الكتابة متعددة المفاتيح الذرّية — عبارة واحدةBEGIN/COMMIT، مع تراجع عند أي فشل (config_store.py:538-568). يُفضّل دائمًا استخدامه للتحديثات متعددة المفاتيح.ConfigStore.transaction()هو@contextmanagerيُعيّن الاتصال الخام للمعاملات متعددة العمليات التي يقودها المُستدعي (config_store.py:572).reconcile_from_yaml()يزرع قاعدة البيانات بقيم أوراقkazma.yamlللمفاتيح غير الموجودة مسبقًا في قاعدة البيانات — لا يتجاوز أبدًا مفاتيح قاعدة البيانات الموجودة (config_store.py:678-685). هذه هي خطوة الإقلاع التي تجعل ConfigStore هي المرجع النهائي.export_yaml()/import_yaml()يقومان بذهابٍ وإياب لتجاوزات قاعدة البيانات المدمجة في YAML (config_store.py:632, 650).reset_all()يحذف جميع صفوف قاعدة البيانات ← يعود إلى الإعدادات الافتراضية في YAML (config_store.py:732).
قاعدة المُفرد (Singleton): استخدم دائمًا
get_config_store()(config_store.py:760)، ولا تستخدم أبدًاConfigStore()مباشرة. عند فشل تهيئة SQLite، يلجأ إلى_InMemoryStoreآمن لمؤشرات الترابط مع إخلاء مبني على TTL (config_store.py:777) — ولن تنجو الإعدادات بعد ذلك عبر إعادة التشغيل.
2. kazma.yaml — مرجع كامل
Section titled “2. kazma.yaml — مرجع كامل”ملف الإعداد الافتراضي الكامل (kazma.yaml) بكل مفتاح ونوع وقيمة افتراضية. تشير أرقام الأسطر إلى الملف المُصدَّر.
agent (الأسطر 1-5)
Section titled “agent (الأسطر 1-5)”| المفتاح | النوع | الافتراضي | الوصف |
|---|---|---|---|
agent.name | string | kazma | اسم عرض البوت. |
agent.version | string | 0.2.0 | ملاحظة: يختلف عن pyproject.toml (0.3.0). غير متزامَن تلقائيًا. |
agent.language | string | ar | لغة الواجهة/العميل. ar ← RTL + العربية؛ en ← الإنجليزية. |
agent.rtl | bool | true | مفتاح RTL الرئيسي. |
models (الأسطر 6-9)
Section titled “models (الأسطر 6-9)”| المفتاح | النوع | الافتراضي | الوصف |
|---|---|---|---|
models.default | string | gpt-4o-mini | معرّف النموذج الافتراضي. |
models.router | string | litellm | نص فقط. يتحكّم في فرع النموذج الاحتياطي في llm_provider.py:336. لا يقوم كاظمة بـ import litellm — بل يعامل LiteLLM كنقطة نهاية بروكسي متوافقة على المنفذ 4000. |
models.fallback | string | gpt-4o-mini | النموذج المستخدم عند إعادة المحاولة إذا كان router == "litellm" وفشل الطلب (llm_provider.py:335-347). |
llm (الأسطر 10-18)
Section titled “llm (الأسطر 10-18)”| المفتاح | النوع | الافتراضي | الوصف |
|---|---|---|---|
llm.base_url | string | https://api.openai.com/v1 | نقطة نهاية متوافقة مع OpenAI. تُضاف /v1 تلقائيًا إن كانت مفقودة (باستثناء Ollama :11434 و LiteLLM :4000). |
llm.api_key | string | '' | اتركه فارغًا ليُحمَّل من البيئة (OPENAI_API_KEY ← KAZMA_API_KEY ← "not-needed" للمحلي). |
llm.model | string | gpt-4o-mini | معرّف النموذج المُرسَل في الحِمل. |
llm.max_tokens | int | 4096 | الحد الأقصى لرموز الإكمال. |
llm.temperature | float | 0.7 | درجة حرارة أخذ العيّنات. |
llm.timeout | float | 60.0 | مهلة كل طلب (بالثواني). |
llm.input_cost_per_1m | float | 0.15 | دولار أمريكي لكل 1 مليون رمز دخل — يُستخدم لحساب التكلفة. |
llm.output_cost_per_1m | float | 0.6 | دولار أمريكي لكل 1 مليون رمز خرج. |
mcp (الأسطر 19-32)
Section titled “mcp (الأسطر 19-32)”| المفتاح | النوع | الافتراضي | الوصف |
|---|---|---|---|
mcp.servers | list | انظر أدناه | تعريفات خوادم MCP. |
mcp.servers[].name | string | — | معرّف الخادم. |
mcp.servers[].transport | string | stdio | إما stdio أو sse. يدعم SSE حقل auth (Bearer/ترويسة مخصّصة). |
mcp.servers[].trust | string | trusted | نص إعداد بسيط — لا يستهلكه أي كود لطبقات الثقة. |
mcp.servers[].command | list | — | argv لتشغيل stdio. |
mcp.ide_server.enabled | bool | true | تفعيل خادم MCP للملفات/IDE داخل العملية. |
mcp.ide_server.root | string | . | جذر مساحة العمل. |
mcp.ide_server.max_file_size | int | 1048576 | حدّ حجم الملف 1 ميغابايت. |
الخادم الافتراضي المُصدَّر:
mcp: servers: - name: filesystem transport: stdio trust: trusted command: [npx, -y, '@modelcontextprotocol/server-filesystem', 'kazma-data/workspace'] ide_server: enabled: true root: . max_file_size: 1048576system_prompt (الأسطر 33-45)
Section titled “system_prompt (الأسطر 33-45)”نص متعدد الأسطر. الإعداد الافتراضي ملائم للعربية: “You are Kazma (كاظمه), an autonomous AI agent framework…” ويوجّه النموذج للردّ بلغة/لهجة المستخدم.
storage (الأسطر 46-49)
Section titled “storage (الأسطر 46-49)”| المفتاح | النوع | الافتراضي | الوصف |
|---|---|---|---|
storage.engine | string | sqlite | محرّك نقطة الحفظ (Checkpointer). |
storage.path | string | kazma-data/checkpoints.db | قاعدة بيانات نقطة حفظ LangGraph. |
storage.vector_dim | int | 1536 | بُعد المتجه المُعلَن. ملاحظة: الـ VectorMemory الفعلي يستخدم all-MiniLM-L6-v2 (384-أبعاد). هذه القيمة معلوماتية ولا تُطبَّق بشكل متّسق. |
memory (الأسطر 50-54)
Section titled “memory (الأسطر 50-54)”| المفتاح | النوع | الافتراضي | الوصف |
|---|---|---|---|
memory.enabled | bool | true | مفتاح الذاكرة الرئيسي. |
memory.max_context_tokens | int | 128000 | نافذة السياق للضغط. يُطلق الضغط عند 80% (= 102,400). |
memory.retrieval_top_k | int | 5 | Top-K لاسترجاع الذاكرة (يُستخدم في خطوة الاسترجاع المقصودة للضغط — راجع الذاكرة و RAG). |
memory.provenance | bool | true | وسم الذكريات ببيانات المصدر الوصفية. |
skills (الأسطر 55-57)
Section titled “skills (الأسطر 55-57)”| المفتاح | النوع | الافتراضي | الوصف |
|---|---|---|---|
skills.path | string | kazma-skills/manifests/ | دليل بيان المهارات. |
skills.auto_discover | bool | true | تحميل البيانات تلقائيًا عند الإقلاع. |
connectors (الأسطر 58-68)
Section titled “connectors (الأسطر 58-68)”| المفتاح | النوع | الافتراضي | متغير البيئة للرمز |
|---|---|---|---|
connectors.telegram.enabled | bool | true | TELEGRAM_BOT_TOKEN |
connectors.discord.enabled | bool | false | DISCORD_BOT_TOKEN |
connectors.slack.enabled | bool | false | SLACK_BOT_TOKEN + SLACK_APP_TOKEN |
gateway (الأسطر 70-79)
Section titled “gateway (الأسطر 70-79)”| المفتاح | النوع | الافتراضي | الوصف |
|---|---|---|---|
gateway.rate_limits.telegram | int | 30 | الطلبات لكل نافذة. |
gateway.rate_limits.discord | int | 5 | الطلبات لكل نافذة. |
gateway.rate_limits.slack | int | 1 | الطلبات لكل نافذة. |
gateway.suggestions.enabled | bool | true | واجهة الاقتراحات للمتابعة. |
gateway.voice.enabled | bool | false | الصوت/تحويل الكلام إلى نص (Telegram فقط). |
gateway.voice.provider | string | openai | واحد من openai، local، groq. |
safety.hitl (الأسطر 81-96)
Section titled “safety.hitl (الأسطر 81-96)”| المفتاح | النوع | الافتراضي | الوصف |
|---|---|---|---|
safety.hitl.enabled | bool | true | مفتاح الموافقة البشرية في الحلقة (HITL) الرئيسي (مسار الرسم البياني). |
safety.hitl.require_approval_for | list | انظر أدناه | الأدوات الخطيرة لمسار الرسم البياني. |
safety.hitl.approval_timeout_seconds | int | 60 | مهلة الرفض التلقائي لنقطة حفظ خط المعالجة. |
safety.hitl.auto_deny_on_timeout | bool | true | رفض المهام المتوقفة تلقائيًا عند انتهاء المهلة. |
الإعداد الافتراضي require_approval_for:
safety: hitl: enabled: true require_approval_for: - file_write - file_delete - shell_exec - code_exec - python_exec - spawn_agent - spawn_agents - schedule_task - cancel_scheduled approval_timeout_seconds: 60 auto_deny_on_timeout: trueيستخدم ناقل السرب قائمة منفصلة وأوسع (
_EXTENDED_DANGERيضيفpython_exec،code_exec،spawn_agent،spawn_agents،schedule_task،cancel_scheduled،run_tests). أمّا مسار MCP فيصنّف ديناميكيًا حسب نمط الاسم. راجع الأمان والسلامة ← قوائم الأدوات الخطيرة.
ui (الأسطر 98-102)
Section titled “ui (الأسطر 98-102)”| المفتاح | النوع | الافتراضي | الوصف |
|---|---|---|---|
ui.host | string | 127.0.0.1 | مضيف الربط. يتحوّل إلى 0.0.0.0 تحت kazma serve فقط إذا كان KAZMA_SECRET مضبوطًا. |
ui.port | int | 8000 | منفذ الربط. |
ui.rtl | bool | true | RTL لواجهة المستخدم. |
ui.title | string | Kazma Dashboard | عنوان الصفحة. |
logging (الأسطر 103-109)
Section titled “logging (الأسطر 103-109)”| المفتاح | النوع | الافتراضي | الوصف |
|---|---|---|---|
logging.level | string | INFO | مستوى التسجيل. |
logging.format | string | json | json أو نصّي. |
logging.langfuse.enabled | bool | false | تتبّع Langfuse. خارطة طريق — الاعتمادية موجودة لكن التكامل غير مُفعّل. |
logging.langfuse.public_key | string | '' | |
logging.langfuse.secret_key | string | '' |
time_travel (الأسطر 111-114)
Section titled “time_travel (الأسطر 111-114)”| المفتاح | النوع | الافتراضي | الوصف |
|---|---|---|---|
time_travel.enabled | bool | true | تفعيل /replay. |
time_travel.max_snapshots | int | 50 | حدّ اللقطات. |
time_travel.db_path | string | kazma-data/snapshots.db | قاعدة بيانات اللقطات. |
swarm (الأسطر 116-127)
Section titled “swarm (الأسطر 116-127)”| المفتاح | النوع | الافتراضي | الوصف |
|---|---|---|---|
swarm.enabled | bool | true | مفتاح السرب الرئيسي. |
swarm.group_chat_id | int | 0 | تُقرأ القيمة الفعلية من متغير البيئة SWARM_CHAT_ID. |
swarm.default_pattern | str | dispatch | النمط الاحتياطي: dispatch | pipeline | consult | fan_out | broadcast. |
swarm.auto_route | bool | true | تفعيل التوجيه الدلالي التلقائي (UnifiedRouter) عندما يكون workers=["auto"]. |
swarm.max_concurrent_tasks | int | 10 (1–100) | أقصى عدد لمهام السرب المتزامنة. |
swarm.max_concurrent | int | 5 | تزامن العمّال لأنماط fan-out / broadcast / consult. |
swarm.orchestrator.name | string | Kazma Orchestrator | اسم عرض المنسّق. |
swarm.orchestrator.profile | string | default | معرّف ملف المنسّق. |
swarm.workers | list | [] | يُملأ وقت التشغيل عبر واجهة الويب / POST /api/swarm/workers. |
swarm.output_target | obj | none | {bot_token, chat_id, platform, enabled} — عند ضبطه، يجب أن يطابق الرمز رمز بوت Telegram النشط. |
pipelines (الأسطر 129-162)
Section titled “pipelines (الأسطر 129-162)”خطّا معالجة معرّفان مسبقًا (قوائم من المراحل، لكلٍّ منها worker، depends_on، system_prompt):
standard— 4 مراحل:researcher(العاملcore) ←refiner(العاملbridge) ←builder(العاملcore) ←validator(العاملbridge).quick— مرحلتان:researcher(العاملcore) ←builder(العاملcore).
3. متغيرات البيئة
Section titled “3. متغيرات البيئة”3.1 موثّقة في .env.example
Section titled “3.1 موثّقة في .env.example”| المتغير | الغرض | الافتراضي |
|---|---|---|
TELEGRAM_BOT_TOKEN | رمز محوّل Telegram. | قيمة مؤقتة |
DISCORD_BOT_TOKEN | رمز محوّل Discord. | فارغ |
SLACK_BOT_TOKEN | رمز بوت Slack. | فارغ |
SLACK_APP_TOKEN | رمز تطبيق Slack (وضع Socket). | فارغ |
OPENAI_API_KEY | مفتاح OpenAI (أيضًا احتياطي عام للنموذج اللغوي الكبير رقم 2). | فارغ |
DEEPSEEK_API_KEY | مُعلَن في .env.example لكن لا يقرأه الكود — اضبط المفتاح عبر قائمة المُزوّدين بدلًا من ذلك. | فارغ |
ANTHROPIC_API_KEY | مُعلَن في .env.example لكن لا يقرأه الكود. | فارغ |
GOOGLE_CLOUD_PROJECT | مشروع GCP لـ Vertex AI (إن لم يتوفّر افتراضي في ADC). | مُعلَّم كتعليق |
SWARM_BOT_TOKEN | رمز بوت مخرجات السرب. | فارغ |
SWARM_CHAT_ID | معرّف محادثة مجموعة السرب (يُغذّي swarm.group_chat_id). | فارغ |
KAZMA_SECRET | السرّ المشترك للموافقة البشرية في الحلقة (HITL)؛ يربط serve بـ 0.0.0.0؛ مصادقة الكتابة في المركز (Hub)؛ kazma hub sign. | مُعلَّم كتعليق |
KAZMA_VECTOR_PATH | دليل ذاكرة المتجهات. | ~/.kazma/vector_memory |
KAZMA_VECTOR_COLLECTION | اسم مجموعة ChromaDB. | agent_memory |
KAZMA_VECTOR_MODEL | نموذج التضمين. | all-MiniLM-L6-v2 |
3.2 تُقرأ في الكود، وليست في .env.example
Section titled “3.2 تُقرأ في الكود، وليست في .env.example”| المتغير | الغرض | الموقع |
|---|---|---|
KAZMA_AUTH_DISABLED | إذا كان true/1/yes، تُعيد get_kazma_secret() القيمة "" (المصادقة معطّلة). | config_store.py:52 |
KAZMA_DISCLOSURE_KEY | مفتاح HMAC للإفصاح؛ يُولَّد تلقائيًا إن لم يُضبط. | config_store.py:95 |
KAZMA_API_KEY | احتياطي مفتاح النموذج اللغوي الكبير رقم 3. | llm_provider.py:142 |
KAZMA_MAX_COST | سقف قاطع التكلفة (الافتراضي $0.50). | cost_breaker.py:42 |
KAZMA_SILENCE_WINDOW | نافذة صمت قاطع التكلفة (الافتراضي 300 ثانية). | cost_breaker.py:44 |
KAZMA_SEMANTIC_CACHE | تفعيل ذاكرة الاستجابات المؤقتة ("true"، معطّل افتراضيًا). | llm_provider.py:212 |
KAZMA_HUB_DB | مسار سجلّ المركز SQLite. | hub/cli.py:109 |
KAZMA_HUB_URL | أساس واجهة برمجة المركز (الافتراضي https://hub.kazma.ai). | hub/cli.py:115 |
KAZMA_PORT | تجاوز منفذ الخادم (الافتراضي 8000). | gateway.py:36 |
HF_HUB_DISABLE_SYMLINKS_WARNING / HF_HUB_DISABLE_TELEMETRY | كتم تتبّع HuggingFace (يُضبطها الـ CLI). | main.py:9-10 |
لا توجد متغيرات بيئة مخصّصة لكل مُزوّد لكلٍّ من DeepSeek/Anthropic/xAI/Groq/Gemini يقرأها
kazma_core. اضبط هذه المُزوّدين عبر قائمة المُزوّدين في ConfigStore أوkazma.yaml.
4. مفاتيح واجهة البرمجة (API)
Section titled “4. مفاتيح واجهة البرمجة (API)”تحلّ LLMProvider._resolve_api_key() (llm_provider.py:136-146) بهذا الترتيب:
self.config.api_key(منLLMConfig)os.getenv("OPENAI_API_KEY")os.getenv("KAZMA_API_KEY")"not-needed"(لخوادم LM Studio/Ollama المحلية)
المفاتيح الوهمية الخاصة بكل مُزوّد للخوادم المحلية (url_utils.py:138-172):
| الخادم | المفتاح الوهمي |
|---|---|
| LM Studio (:1234) | sk-lm-studio-dummy-key |
| Ollama (:11434) | ollama |
| بروكسي LiteLLM (:4000) | sk-litellm-dummy-key |
| localhost أخرى | not-needed |
يستخدم Google Vertex AI بيانات الاعتماد الافتراضية للتطبيق (ADC) فقط — لا مفتاح لواجهة برمجة. تُعيد GeminiProvider._resolve_api_key() القيمة "adc-placeholder" ويُجلب رمز الحامل (Bearer) الفعلي عند كل استدعاء عبر google.auth.default() + credentials.refresh() (google_llm.py:232-252). حلّ المشروع: project_id= الصريح > GOOGLE_CLOUD_PROJECT > google.auth.default() > quota_project_id الخاص بـ ADC > config_default الخاص بـ gcloud.
تُخزَّن المفاتيح لكل مُزوّد في providers.list الخاص بـ ConfigStore (لكل إدخال api_key، base_url، models، …). تُرفَض العناصر النائبة المقنّعة (***) عند الإدراج ما لم يكن مفتاح حقيقي موجودًا مسبقًا (model_registry.py:646-652)؛ وتُقنَّع المفاتيح في جميع عمليات القراءة المرتجعة (_mask_profile).
5. سجلّ النماذج
Section titled “5. سجلّ النماذج”ModelRegistry (model_registry.py:81) هو مفرد (singleton) على مستوى العملية (متغيّر عام بالوحدة _registry، آمن لمؤشرات الترابط عبر threading.RLock()). الاسم البديل للتوافق مع الإصدارات السابقة: UnifiedModelRegistry (السطر 950).
5.1 دورة الحياة
Section titled “5.1 دورة الحياة”| الدالة | الغرض |
|---|---|
initialize_model_registry(config_store) | الإنشاء + إزالة التسلسل + زرع الإعدادات المسبقة. |
get_model_registry() | استرجاع المفرد (يُطلق RuntimeError إن لم يُمهَّد). |
reset_model_registry() | التفكيك. |
5.2 الإعدادات المسبقة للمُزوّدين المدمجين
Section titled “5.2 الإعدادات المسبقة للمُزوّدين المدمجين”من kazma-core/kazma_core/providers.py:13-84:
| المفتاح | اسم العرض | base_url | auth_header |
|---|---|---|---|
openai | OpenAI | https://api.openai.com/v1 | Bearer |
anthropic | Anthropic | https://api.anthropic.com/v1 | x-api-key |
deepseek | DeepSeek | https://api.deepseek.com/v1 | Bearer |
google | Google Gemini | (محسوب لكل مشروع/موقع) | Bearer |
xai | xAI / Grok | https://api.x.ai/v1 | Bearer |
openrouter | OpenRouter | https://openrouter.ai/api/v1 | Bearer |
ollama | Ollama (Local) | http://127.0.0.1:11434/v1 | (لا شيء) |
lm-studio | LM Studio (Local) | http://localhost:1234/v1 | (لا شيء) |
nvidia | NVIDIA NIM | https://integrate.api.nvidia.com/v1 | Bearer |
custom | Custom Endpoint | (فارغ) | Bearer |
الـ GEMINI_MODELS المضمّن (لا يمتلك Vertex AI نقطة نهاية /models ثابتة): gemini-2.5-flash، gemini-2.5-pro، gemini-2.0-flash، gemini-2.0-flash-lite.
المُزوّد المُفعّل افتراضيًا: فقط
enabled=Trueخارج الصندوق (model_registry_store.py:117). يجب إعداد جميع الأخرى قبل الاستخدام. ويُستثنىcustomمن زرع الإعدادات المسبقة.
تحفّظ مصادقة Anthropic: يُصرِّح الإعداد المسبق بـ
auth_header: x-api-key، لكنLLMProvider.chat()يُرسل دائمًاAuthorization: Bearer. لا تُؤثّر ترويسة الإعداد المسبق إلا أثناءdiscover_models(). أمّا للدردشة، فقد يتطلّب Anthropic التوجيه عبر بروكسي متوافق مع OpenAI.
5.3 اكتشاف النماذج
Section titled “5.3 اكتشاف النماذج”تضرب discover_models(provider_name) (model_registry.py:427) في {base_url}{models_endpoint} (الافتراضي /models)، وتحلّل بنية OpenAI {"data":[{"id":...}]}، مع حارس SSRF (kazma_core.security.ssrf.validate_url). تُخزَّن النتائج في _discovered_models.
5.4 مفاتيح ConfigStore (السجلّ)
Section titled “5.4 مفاتيح ConfigStore (السجلّ)”| المفتاح | الغرض |
|---|---|
providers.list | مصفوفة المُزوّدين المخزّنة. |
providers.health.* | صحة كل مُزوّد. |
models.saved.* | ملفات النماذج المحفوظة. |
models.defaults.* | الإعدادات الافتراضية لكل مهمة (chat، code، summarize، translate). |
llm.model, llm.base_url, llm.api_key | احتياطيات قديمة. |
registry.active_provider, registry.active_model, registry.discovered_models | الاختيار النشط + الذاكرة المؤقتة. |
6. مفاتيح retry
Section titled “6. مفاتيح retry”تقرأ مزخرفات إعادة المحاولة المبنية على tenacity التجاوزات من ConfigStore (retry.py:69-86):
| المفتاح | الافتراضي | الوصف |
|---|---|---|
retry.max_attempts | 3 | أقصى عدد لمحاولات الإعادة. |
retry.min_wait | 2 (ث) | أدنى تراجع زمني. |
retry.max_wait | 10 (ث) | أقصى تراجع زمني. |
تُطلق إعادة المحاولة فقط على استثناءات الشبكة/المهلة (
ConnectionError،TimeoutError،asyncio.TimeoutError، httpxTimeoutException/ConnectError/RemoteProtocolError). لا تُعاد أبدًا محاولة أخطاء 4xx (retry.py:107-109). لا يوجد تراجع زمني لـ 429.
7. ملفات الإعدادات الأمنية
Section titled “7. ملفات الإعدادات الأمنية”7.1 kazma-permissions.yaml
Section titled “7.1 kazma-permissions.yaml”قوائم السماح/المنع لخوادم MCP قائمة على الأقسام المؤسسية (أقسام “ALMuhalab”):
divisions: gas_oil: allowed_mcp_servers: [oil-pricing-api, contract-manager, supplier-directory] denied_mcp_servers: [tourism-booking-api, general-inventory-api] tourism: allowed_mcp_servers: [booking-engine, hotel-api, flight-search] denied_mcp_servers: [oil-pricing-api, contract-manager] general_trading: allowed_mcp_servers: [inventory-api, supplier-directory, procurement-api] denied_mcp_servers: [oil-pricing-api, booking-engine]
cross_division_rules: require_explicit_approval: true max_approval_duration_hours: 24 notify_admins: true audit_all_access: true7.2 kazma-security.yaml
Section titled “7.2 kazma-security.yaml”| القسم | الخيارات الرئيسية |
|---|---|
scanning | enabled، interval: "24h"، sources: [osv, github_advisories, nvd]، auto_create_issues، severity_threshold: medium، ignore. |
disclosure | enabled، response_window: "48h"، assessment_window: "7d"، pgp_key_url، encrypted_channels. |
bug_bounty | enabled، min_payout: 50، max_payout: 2000، currency: USD، tiers (critical [500,2000]، high [200,500]، medium [50,200]، low قاعة المشاهير). |
hardening | run_on_startup، fail_on_critical، auto_fix: false، checks (8: secrets_in_logs، input_validation، rbac_enforcement، tls_required، dependency_audit، least_privilege، audit_trail، config_integrity). |
تُصرِّح هذه الملفات بـ موقف سياسة أمنية. أمّا ما إذا كان كل فحص يُطبَّق فعليًا وقت التشغيل فينبغي التحقق منه مقابل مشغّل التحصين قبل الاعتماد عليه في الإنتاج — راجع الأمان والسلامة.
7.3 services.yaml
Section titled “7.3 services.yaml”commands: install: "pip install -e kazma-tui/ -e kazma-core/" test: "python -m pytest kazma-tui/tests/ -v" lint: "python -m ruff check kazma-tui/kazma_tui/" typecheck: "python -m mypy kazma-tui/kazma_tui/"services: {}ملاحظات تدقيق التوثيق
Section titled “ملاحظات تدقيق التوثيق”- انحراف الإصدار:
pyproject.tomlهو0.3.0؛ وagent.versionفيkazma.yamlهو0.2.0؛ ونص--helpفي الـ CLI يطبعv0.2.0. هذه مستقلّة وغير متزامَنة — وهي عيب معروف. storage.vector_dim: 1536لا يطابق نموذج التضمين الفعلي (all-MiniLM-L6-v2= 384-أبعاد). موثَّق كما هو.- يُدرج
.env.exampleكلًا منDEEPSEEK_API_KEY/ANTHROPIC_API_KEYلكن لا يقرؤهما أي كود — أُشير إليه لمنع التباس المستخدم. mcp.servers[].trustهو نص YAML بسيط بلا مستهلك مُطبِّل — وليس طبقة ثقة تشفيرية.