تخطَّ إلى المحتوى

الإعدادات

المرجع الشامل. كل مفتاح في 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.
3kazma.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) — ولن تنجو الإعدادات بعد ذلك عبر إعادة التشغيل.


ملف الإعداد الافتراضي الكامل (kazma.yaml) بكل مفتاح ونوع وقيمة افتراضية. تشير أرقام الأسطر إلى الملف المُصدَّر.

المفتاحالنوعالافتراضيالوصف
agent.namestringkazmaاسم عرض البوت.
agent.versionstring0.2.0ملاحظة: يختلف عن pyproject.toml (0.3.0). غير متزامَن تلقائيًا.
agent.languagestringarلغة الواجهة/العميل. ar ← RTL + العربية؛ en ← الإنجليزية.
agent.rtlbooltrueمفتاح RTL الرئيسي.
المفتاحالنوعالافتراضيالوصف
models.defaultstringgpt-4o-miniمعرّف النموذج الافتراضي.
models.routerstringlitellmنص فقط. يتحكّم في فرع النموذج الاحتياطي في llm_provider.py:336. لا يقوم كاظمة بـ import litellm — بل يعامل LiteLLM كنقطة نهاية بروكسي متوافقة على المنفذ 4000.
models.fallbackstringgpt-4o-miniالنموذج المستخدم عند إعادة المحاولة إذا كان router == "litellm" وفشل الطلب (llm_provider.py:335-347).
المفتاحالنوعالافتراضيالوصف
llm.base_urlstringhttps://api.openai.com/v1نقطة نهاية متوافقة مع OpenAI. تُضاف /v1 تلقائيًا إن كانت مفقودة (باستثناء Ollama :11434 و LiteLLM :4000).
llm.api_keystring''اتركه فارغًا ليُحمَّل من البيئة (OPENAI_API_KEYKAZMA_API_KEY"not-needed" للمحلي).
llm.modelstringgpt-4o-miniمعرّف النموذج المُرسَل في الحِمل.
llm.max_tokensint4096الحد الأقصى لرموز الإكمال.
llm.temperaturefloat0.7درجة حرارة أخذ العيّنات.
llm.timeoutfloat60.0مهلة كل طلب (بالثواني).
llm.input_cost_per_1mfloat0.15دولار أمريكي لكل 1 مليون رمز دخل — يُستخدم لحساب التكلفة.
llm.output_cost_per_1mfloat0.6دولار أمريكي لكل 1 مليون رمز خرج.
المفتاحالنوعالافتراضيالوصف
mcp.serverslistانظر أدناهتعريفات خوادم MCP.
mcp.servers[].namestringمعرّف الخادم.
mcp.servers[].transportstringstdioإما stdio أو sse. يدعم SSE حقل auth (Bearer/ترويسة مخصّصة).
mcp.servers[].truststringtrustedنص إعداد بسيط — لا يستهلكه أي كود لطبقات الثقة.
mcp.servers[].commandlistargv لتشغيل stdio.
mcp.ide_server.enabledbooltrueتفعيل خادم MCP للملفات/IDE داخل العملية.
mcp.ide_server.rootstring.جذر مساحة العمل.
mcp.ide_server.max_file_sizeint1048576حدّ حجم الملف 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: 1048576

نص متعدد الأسطر. الإعداد الافتراضي ملائم للعربية: “You are Kazma (كاظمه), an autonomous AI agent framework…” ويوجّه النموذج للردّ بلغة/لهجة المستخدم.

المفتاحالنوعالافتراضيالوصف
storage.enginestringsqliteمحرّك نقطة الحفظ (Checkpointer).
storage.pathstringkazma-data/checkpoints.dbقاعدة بيانات نقطة حفظ LangGraph.
storage.vector_dimint1536بُعد المتجه المُعلَن. ملاحظة: الـ VectorMemory الفعلي يستخدم all-MiniLM-L6-v2 (384-أبعاد). هذه القيمة معلوماتية ولا تُطبَّق بشكل متّسق.
المفتاحالنوعالافتراضيالوصف
memory.enabledbooltrueمفتاح الذاكرة الرئيسي.
memory.max_context_tokensint128000نافذة السياق للضغط. يُطلق الضغط عند 80% (= 102,400).
memory.retrieval_top_kint5Top-K لاسترجاع الذاكرة (يُستخدم في خطوة الاسترجاع المقصودة للضغط — راجع الذاكرة و RAG).
memory.provenancebooltrueوسم الذكريات ببيانات المصدر الوصفية.
المفتاحالنوعالافتراضيالوصف
skills.pathstringkazma-skills/manifests/دليل بيان المهارات.
skills.auto_discoverbooltrueتحميل البيانات تلقائيًا عند الإقلاع.
المفتاحالنوعالافتراضيمتغير البيئة للرمز
connectors.telegram.enabledbooltrueTELEGRAM_BOT_TOKEN
connectors.discord.enabledboolfalseDISCORD_BOT_TOKEN
connectors.slack.enabledboolfalseSLACK_BOT_TOKEN + SLACK_APP_TOKEN
المفتاحالنوعالافتراضيالوصف
gateway.rate_limits.telegramint30الطلبات لكل نافذة.
gateway.rate_limits.discordint5الطلبات لكل نافذة.
gateway.rate_limits.slackint1الطلبات لكل نافذة.
gateway.suggestions.enabledbooltrueواجهة الاقتراحات للمتابعة.
gateway.voice.enabledboolfalseالصوت/تحويل الكلام إلى نص (Telegram فقط).
gateway.voice.providerstringopenaiواحد من openai، local، groq.
المفتاحالنوعالافتراضيالوصف
safety.hitl.enabledbooltrueمفتاح الموافقة البشرية في الحلقة (HITL) الرئيسي (مسار الرسم البياني).
safety.hitl.require_approval_forlistانظر أدناهالأدوات الخطيرة لمسار الرسم البياني.
safety.hitl.approval_timeout_secondsint60مهلة الرفض التلقائي لنقطة حفظ خط المعالجة.
safety.hitl.auto_deny_on_timeoutbooltrueرفض المهام المتوقفة تلقائيًا عند انتهاء المهلة.

الإعداد الافتراضي 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.hoststring127.0.0.1مضيف الربط. يتحوّل إلى 0.0.0.0 تحت kazma serve فقط إذا كان KAZMA_SECRET مضبوطًا.
ui.portint8000منفذ الربط.
ui.rtlbooltrueRTL لواجهة المستخدم.
ui.titlestringKazma Dashboardعنوان الصفحة.
المفتاحالنوعالافتراضيالوصف
logging.levelstringINFOمستوى التسجيل.
logging.formatstringjsonjson أو نصّي.
logging.langfuse.enabledboolfalseتتبّع Langfuse. خارطة طريق — الاعتمادية موجودة لكن التكامل غير مُفعّل.
logging.langfuse.public_keystring''
logging.langfuse.secret_keystring''
المفتاحالنوعالافتراضيالوصف
time_travel.enabledbooltrueتفعيل /replay.
time_travel.max_snapshotsint50حدّ اللقطات.
time_travel.db_pathstringkazma-data/snapshots.dbقاعدة بيانات اللقطات.
المفتاحالنوعالافتراضيالوصف
swarm.enabledbooltrueمفتاح السرب الرئيسي.
swarm.group_chat_idint0تُقرأ القيمة الفعلية من متغير البيئة SWARM_CHAT_ID.
swarm.default_patternstrdispatchالنمط الاحتياطي: dispatch | pipeline | consult | fan_out | broadcast.
swarm.auto_routebooltrueتفعيل التوجيه الدلالي التلقائي (UnifiedRouter) عندما يكون workers=["auto"].
swarm.max_concurrent_tasksint10 (1–100)أقصى عدد لمهام السرب المتزامنة.
swarm.max_concurrentint5تزامن العمّال لأنماط fan-out / broadcast / consult.
swarm.orchestrator.namestringKazma Orchestratorاسم عرض المنسّق.
swarm.orchestrator.profilestringdefaultمعرّف ملف المنسّق.
swarm.workerslist[]يُملأ وقت التشغيل عبر واجهة الويب / POST /api/swarm/workers.
swarm.output_targetobjnone{bot_token, chat_id, platform, enabled} — عند ضبطه، يجب أن يطابق الرمز رمز بوت Telegram النشط.

خطّا معالجة معرّفان مسبقًا (قوائم من المراحل، لكلٍّ منها worker، depends_on، system_prompt):

  • standard — 4 مراحل: researcher (العامل core) ← refiner (العامل bridge) ← builder (العامل core) ← validator (العامل bridge).
  • quick — مرحلتان: researcher (العامل core) ← builder (العامل core).

المتغيرالغرضالافتراضي
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) بهذا الترتيب:

  1. self.config.api_key (من LLMConfig)
  2. os.getenv("OPENAI_API_KEY")
  3. os.getenv("KAZMA_API_KEY")
  4. "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).


ModelRegistry (model_registry.py:81) هو مفرد (singleton) على مستوى العملية (متغيّر عام بالوحدة _registry، آمن لمؤشرات الترابط عبر threading.RLock()). الاسم البديل للتوافق مع الإصدارات السابقة: UnifiedModelRegistry (السطر 950).

الدالةالغرض
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_urlauth_header
openaiOpenAIhttps://api.openai.com/v1Bearer
anthropicAnthropichttps://api.anthropic.com/v1x-api-key
deepseekDeepSeekhttps://api.deepseek.com/v1Bearer
googleGoogle Gemini(محسوب لكل مشروع/موقع)Bearer
xaixAI / Grokhttps://api.x.ai/v1Bearer
openrouterOpenRouterhttps://openrouter.ai/api/v1Bearer
ollamaOllama (Local)http://127.0.0.1:11434/v1(لا شيء)
lm-studioLM Studio (Local)http://localhost:1234/v1(لا شيء)
nvidiaNVIDIA NIMhttps://integrate.api.nvidia.com/v1Bearer
customCustom Endpoint(فارغ)Bearer

الـ GEMINI_MODELS المضمّن (لا يمتلك Vertex AI نقطة نهاية /models ثابتة): gemini-2.5-flash، gemini-2.5-pro، gemini-2.0-flash، gemini-2.0-flash-lite.

المُزوّد المُفعّل افتراضيًا: فقط google هو enabled=True خارج الصندوق (model_registry_store.py:117). يجب إعداد جميع الأخرى قبل الاستخدام. ويُستثنى custom من زرع الإعدادات المسبقة.

تحفّظ مصادقة Anthropic: يُصرِّح الإعداد المسبق بـ auth_header: x-api-key، لكن LLMProvider.chat() يُرسل دائمًا Authorization: Bearer. لا تُؤثّر ترويسة الإعداد المسبق إلا أثناء discover_models(). أمّا للدردشة، فقد يتطلّب Anthropic التوجيه عبر بروكسي متوافق مع OpenAI.

تضرب 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الاختيار النشط + الذاكرة المؤقتة.

تقرأ مزخرفات إعادة المحاولة المبنية على tenacity التجاوزات من ConfigStore (retry.py:69-86):

المفتاحالافتراضيالوصف
retry.max_attempts3أقصى عدد لمحاولات الإعادة.
retry.min_wait2 (ث)أدنى تراجع زمني.
retry.max_wait10 (ث)أقصى تراجع زمني.

تُطلق إعادة المحاولة فقط على استثناءات الشبكة/المهلة (ConnectionError، TimeoutError، asyncio.TimeoutError، httpx TimeoutException/ConnectError/RemoteProtocolError). لا تُعاد أبدًا محاولة أخطاء 4xx (retry.py:107-109). لا يوجد تراجع زمني لـ 429.


7. ملفات الإعدادات الأمنية

Section titled “7. ملفات الإعدادات الأمنية”

قوائم السماح/المنع لخوادم 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: true
القسمالخيارات الرئيسية
scanningenabled، interval: "24h"، sources: [osv, github_advisories, nvd]، auto_create_issues، severity_threshold: medium، ignore.
disclosureenabled، response_window: "48h"، assessment_window: "7d"، pgp_key_url، encrypted_channels.
bug_bountyenabled، min_payout: 50، max_payout: 2000، currency: USD، tiers (critical [500,2000]، high [200,500]، medium [50,200]، low قاعة المشاهير).
hardeningrun_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).

تُصرِّح هذه الملفات بـ موقف سياسة أمنية. أمّا ما إذا كان كل فحص يُطبَّق فعليًا وقت التشغيل فينبغي التحقق منه مقابل مشغّل التحصين قبل الاعتماد عليه في الإنتاج — راجع الأمان والسلامة.

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: {}

  • انحراف الإصدار: 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 بسيط بلا مستهلك مُطبِّل — وليس طبقة ثقة تشفيرية.