Obsidian / مسار بيانات المكون الإضافي للذكاء الاصطناعي
التأكيد بالمواد الرسمية والمصادر الثابتةObsidian×AI الموقع الحالي للمكون الإضافي
ما الذي يمكن القيام به وخطير [2026]
هذه الصفحة مترجمة آليًا من الأصل الياباني. اقرأ الأصل الياباني
أي جزء من دفتر الملاحظات ينتقل من أي وظيفة إلى أين؟ اقرأ النسخة الثابتة من Copilot وSmart Connections وText Generator، وقارن الأجزاء غير المؤكدة من الاتصال الفعلي بتلك التي يمكن فهمها في المادة.
قبل الاختيار، انظر إلى النموذج والسياق والفهرس والوظائف الإضافية
كلمة "الدعم المحلي" وحدها لا تحدد وجهة المكون الإضافي بأكمله. يتم التحقق من مقتطفات من الملاحظات التي تم تمريرها إلى النموذج، ومكان عمل فهرس، والبحث على الويب وخدمات تحويل المستندات، والتشخيص وتأكيد التحديث بشكل منفصل.
- نموذجمزود・نقطة النهاية・وكيل
- السياق المرجعيالاختيارات والمقتطفات والقوالب
- الفهرس والبحثخادم محلي أو خادم آخر
- وظائف إضافيةالويب، تحويل المستندات، التشخيص، التحديث
هذا الرسم البياني هو منظمة لقراءة المواد الرسمية. إنه ليس سجل اتصال فعلي. المقارنة هي تأكيد للمواد والمصادر الثابتة، ولا تشمل تشغيل شاشة التكوين أو تدقيق تشغيل الطلبات ومقدمي الخدمات الفعليين.
أولا وقبل كل شيء، يرجى التحقق من مسار الوظيفة التي تستخدمها في الجدول أدناه. يمثل "source" في الجدول الثوابت والفروع المقروءة من الكود، ويمثل "وصف المصدر" وصف README والدليل.
قارن الإصدارات الثابتة 3 مع الوجهة والإعدادات
| نسخة ثابتة | المسار الموضح في المستند | السياق والفهرس | تأكيد المفاتيح والإعدادات | لا يزال غير مؤكد |
|---|---|---|---|---|
| Copilot 4.0.12 | شرح مقدم الخدمة: المستضاف هو Brevilabs ومزود المؤسسة. Cloud BYOK هي المزود/نقطة النهاية المحددة، و Local BYOK هي نقطة النهاية المحلية. لدى Opencode وClaude وCodex أيضا طرقهم الخاصة. Q03 | تنتقل مقتطفات من الملاحظات المحددة إلى سياق النموذج. فهرس ميو ووجهة البحث محلية/عن بعد في بيئة منفصلة. تحقق من المسار الإضافي للبحث على الويب وتحويل المستندات وسياق المشروع. Q03 / Q05 | المصدر: getter للتحقق من توفر SecretStorage. الثوابت الأولية مثل enableMiyo=false وactiveBackend=opencode. لم يتم تأكيد التخزين الفعلي وواجهة المستخدم الرسومية الحالية. Q07/Q08/Q09 | الامتثال للحمولة الفعلية، وهدف الفهرس، وتخزين المفتاح الطرفي والتشفير، والاحتفاظ بالنسخ الاحتياطي والسياسات غير التعليمية. عادة ما يتم تمييز تحميل ZIP التشخيصي المحدد ذاتيا عن الطلب. |
| اتصالات ذكية 4.7.2 | شرح الموفر: دليل إلى نموذج التضمين المحلي المدمج. يشرح كيفية إنشاء فهرس لا يتطلب مفتاح API. Q10/Q11 | يوضح README أنه ينشئ فهرس Vault بعد التمكين. بعض الإعدادات والنماذج تعتمد خارجيا. لم يتم قراءة مسار البيانات لجميع التكوينات. | المصدر: احصل على أحدث إصدار من GitHub وURL المعطى للدليل الأولي. من شرح التضمين المحلي، لا يمكن تحديد عدم وجود اتصال كامل. Q12 / Q13 | الفهرس الفعلي والحصول على النموذج، والتبعية الكاملة، والاتصال الفعلي والحمولة، والنموذج البديل، وتخزين المفاتيح، والقياس عن بعد/الاستبقاء بشكل عام. |
| مولد النص 0.8.7 | القيمة الأولية للمصدر:OpenAI Chat (Langchain), https://api.openai.com/v1, المفتاح فارغ. يتلقى مزود Ollama مسار القاعدة المحدد. Q15 / Q23 / Q24 | فرع يمكنه الحصول على قيم باستخدام includeClipboard=true. القالب الأولي هو العنوان・starredBlocks・tg_selection. يجب التحقق من القيمة المضمنة في المطالبة الفعلية بشكل منفصل. Q15/Q17 | القيمة الأولية للمصدر:encrypt_keys=false. إذا تعذر تشفيره/غير صالح، فهو فرع يعيد بادئة ثابتة + مفتاح إدخال. حتى لو كان حقل المفتاح العادي فارغا، فلا يمكن تحديد ما إذا كان قد تم تشفيره. Q15 / Q19 / Q20 / Q21 / Q22 | الحمولة الفعلية، واجهة المستخدم الرسومية الحالية، نتائج التشفير الطرفي، التواصل مع جميع الوظائف، جودة الفواتير والاستجابة، والقياس عن بعد/الاحتفاظ بشكل عام. |
BYOK هي طريقة تستخدم مفاتيحها ونقاط النهاية الخاصة بها. " "استخدم مفتاحك الخاص" و"ستبقى المعالجة فقط في المحطة الطرفية" هي شروط مختلفة.
Copilot: حتى إذا اخترت نموذجا، يظل مسار الوظائف الإضافية منفصلا
تنقسم النسخة الثابتة من الدليل إلى وجهات معالجة مستضافة وCloud BYOK و Local BYOK و opencode و Claude و Codex. على سبيل المثال، حتى إذا تم شرح نموذج BYOK المحلي على أنه نقطة نهاية محلية، فقد تشارك خدمة أخرى اعتمادا على سياق المهارة والمشروع المستخدم. Q03
مرجع ملاحظة منفصل ومؤشر ميو
يوضح المستند أن الوكيل يقرأ الملاحظة ويضع الجزء الضروري في موجه النموذج المحدد. " لم يتم شرح سلوك "تحميل Vault بالكامل فقط عن طريق فتح دردشة الوكيل". يحتوي Miyo على اتصال محلي واتصال خادم بعيد، ويتم تحديد الفهرس ووجهة البحث بشكل منفصل. يتناسب المقتطف الموجود في البحث أيضا مع سياق النموذج. فقط باستخدام الفهرس المحلي، لا يمكن القول إن المقتطف لا يمر إلى مزود النموذج. Q03/Q05
معالجة المستندات ليست موحدة. وفقا للوثيقة، تتم معالجة Miyo الخاصة ب Agent Chat بواسطة CLI المحلي، وتستخدم Quick Chat خدمة Miyo وجهة الاتصال، وإذا كانت بعيدة، تتم معالجتها بواسطة هذا الخادم. قد يستخدم سياق المشروع المحفوظ الذي يستخدم الويب ويوتيوب والملفات الثنائية خدمة المشروع المستضاف، وهو طريق مختلف عن اختيار ميو. Q03
وضع المضيف الذاتي لا يضمن حظر الاتصالات
أنه لن يتم تعطيل السحابة حتى في وضع الاستضافة الذاتية. سيبقى الطريق المرسل إلى كلود المحدد، الدستور، النموذج السحابي، مزود البحث، وما إلى ذلك. هذا إعداد لكل وظيفة للتحقق مما إذا كانت الوظيفة التي تريد استخدامها ووجهة المعالجة المقبولة تتطابق. Q04
تتم قراءة المتلق والثابت الأولي والسياسة التشخيصية للمفتاح على أساسها الخاص
نطاق KeychainService المؤكد هو محصل يتحقق من وجود app.secretStorage ويعطي خطأ إذا لم يكن كذلك. إنه ليس نتيجة لحفظ المفتاح فعليا أو سجل للتحقق من تشفير نظام التشغيل. enableMiyo=false، enableMiyoSearchSkill=false، activeBackend=opencode، debugFullFrames=true هي القيم الأولية في المصدر ولا تظهر قيمة الإعدادات التي تم ترحيلها أو واجهة المستخدم الرسومية للقارئ. Q07 / Q08 / Q09
يشرح README المعرّف العشوائي UUID للطلب المستضاف وملف ZIP التشخيصي الذي يختاره القارئ ويرفعه. حذف ZIP بعد 60 أيام، والمعالجة المؤقتة للطلبات المستضافة من دون احتفاظ أو تدريب، هي السياسة التي يشرحها المزود. لم ندقق تشغيل الخوادم الخلفية هنا، ولا يمكن الاستنتاج من debugFullFrames=true وحده أن ZIP التشخيصي يُرسل تلقائيًا. Q02
الاتصالات الذكية: شرح التضمين المحلي وفصل وجود أو عدم وجود جميع الاتصالات
يوضح README أن النموذج المحلي المدمج يفهرس Vault ولا يحتاج إلى مفتاح API. يمكن قراءة ذلك بوصفه شرحًا لآلية العثور على الملاحظات ذات الصلة، لكننا لم نشغّل النموذج ولم نرصد الفهرسة الفعلية أو اتصالات الشبكة في هذه المقارنة. ونتعامل أيضًا مع أوصاف README المتعلقة بالخصوصية والعمل دون اتصال والأجهزة المحمولة باعتبارها ادعاءات من المزوّد. Q10 / Q11
من ناحية أخرى، يحتوي src/main.js الخاص بك على رمز لحجز GET من تأكيد التحديث بعد التهيئة إلى أحدث إصدار من GitHub. يتم تمرير URL من smartconnections.app إلى StoryModal للمستخدم الأول. هذا تأكيد لمسار الرمز المتعلق بالاتصال. تنفيذ StoryModal على الجانب التابع، ومن غير المؤكد ما إذا كان URL قد تم تحميله بالفعل أو ما هي الحمولة التي تم تمريرها. Q12/Q13
تشير بعض النماذج والإعدادات وHTTP وما إلى ذلك إلى الحزم الخارجية المتعلقة بالبيئة الذكية/jsbrains. مع هذا النطاق وحده، لا يمكن تحديد أن "جميع الوظائف موجودة في المحطة الطرفية" و"لا يوجد قياس عن بعد" و"سيتم إرسال الملاحظات دائما". إذا قمت بفصل شرح الفهرس المحلي ورمز تأكيد التحديث والاعتماد غير المؤكد والاتصال الفعلي، فيمكنك رؤية الكائن الإضافي الذي سيتم فحصه. Q14
مولد النص: تحقق من اقتراحات السياق وفروع التخزين الرئيسية
الإعدادات التي يمكنها استرداد الحافظة والمطالبة الفعلية مختلفة
يحتوي الإعداد الأولي للإصدار الثابت على includeClipboard=true، ويحتوي منشئ السياق على فرع يمكنه الحصول على الحافظة إذا كانت القيمة صحيحة. من ناحية أخرى، فإن title وstarredBlocks وtg_selection في القالب الأولي المذكور ليست عناصر نائبة للحافظة. Q15/ Q17
تختلف القيمة التي تم حلها اعتمادا على القالب والواجهة وخيارات السياق ونطاق الاختيار. لا تتعامل مع قائمة القيم المتاحة كقيم في الطلب الفعلي على أنها هي نفسها. لا يؤدي تأكيد الرمز هذا إلى "إرسال الحافظة دائما" أو "يتم إرسال جميع Vault دائما". Q17/Q18
الأحرف الفارغة في حقل المفتاح العادي ليست دليلا على التشفير
القيمة الأولية هي encrypt_keys=false. هناك عملية لإفراغ عمود المفتاح العادي عند الحفظ، وعملية إعداد حقل آخر متعلق بالسر. عندما يكون التشفير غير متاح أو يتم تعطيل encrypt_keys، تقوم getEncryptedKey بإرجاع قيمة تربط البادئة الثابتة ومفتاح الإدخال. حتى لو كان اسم الحقل يحتوي على مشفر/مجزأ، فلا يمكن تحديد أنه وحدات بايت مشفرة في حد ذاته. Q15 / Q19 / Q20 / Q21 / Q22
، لذلك لم يتم تأكيد محتويات التخزين الفعلي وعملية التخزين الآمن لهذه المحطة. قبل مشاركة ملفات التكوين وسجلات التشخيص التي تحتوي على مفاتيح، تحتاج إلى النظر ليس فقط إلى العمود العادي ولكن أيضا إلى القيم الأخرى المحفوظة.
اختر المزود الأولي والمراسلات المحلية بشكل منفصل
المزود الأولي للمصدر هو OpenAI Chat (Langchain)، ونقطة النهاية هي https://api.openai.com/v1. مزود Ollama لديه تطبيق يتلقى مسار القاعدة المحدد. حقيقة وجود مزود متوافق محليا وحده لا يثبت أنه لا توجد وجهة معالجة أو اتصال كامل للوظائف الأخرى. Q15/Q23/Q24
الطلب المرفق، والاقتراحات التلقائية، واقتراحات القطع، وتنفيذ JavaScript متوقفة عند القيمة الأولية المقتبسة. هذه أيضا ليست القياسات الفعلية لواجهة المستخدم الرسومية الحالية. يرجى التحقق من القالب الذي تريد استخدامه والإعدادات المحفوظة في بيئتك. Q15/Q16
حدد الإعدادات للتحقق وفقا لاستخدامك
| ماذا أريد أن أفعل | الهدف الذي سيتم تأكيده | ما لا يمكنك فهمه من خلال هذه المقارنة وحدها |
|---|---|---|
| التعامل مع الملاحظات في النموذج السحابي | نموذج/مزود/نقطة نهاية، اختيار، مقتطف، قالب، وكيل/مهارة مستخدمة | التشغيل والفواتير وجودة الاستجابة للحمولة الفعلية والمزود |
| أريد إنشاء فهرس محليا | وجهة معالجة التضمين/الفهرس، إعدادات الخادم البعيد، نموذج ما بعد المرحلة، الحصول على النموذج والوظائف الإضافية | توقف الاتصال لجميع الوظائف، وجميع الطرق التابعة، والفهرس الفعلي على المحطة |
| أريد أن أعرف نطاق حفظ ومشاركة المفاتيح | الحقول التي سيتم حفظها، والفروع التي لا يمكن تشفيرها، وأين يمكن مشاركة السجلات/التشخيصات/الإعدادات | الامتثال لبايتات التخزين الفعلية والاحتفاظ بالواجهة الخلفية وحذف المحطة الطرفية |
الحالة بعد تغيير الإعدادات ليست نتيجة للقياس الفعلي في هذا الجدول. قبل استخدام دفتر الملاحظات الخاص بك، استخدمه كطريقة قراءة لتحديد الوظائف التي يجب استخدامها والبيانات التي يجب تمريرها إليها.
الأسئلة الشائعة
إذا اخترت طرازا محليا، ألن يتصل المكون الإضافي على الإطلاق؟
هل ترسل الاتصالات الذكية أجهزة الكمبيوتر المحمولة إلى الخارج؟
هل includeClipboard=true في Text Generator يعني أنه يجب إرسال الحافظة؟
إذا كان api_key للبيانات المحفوظة فارغا، فهل المفتاح مشفر؟
هل تقارن هذه المقالة جودة استجابة الذكاء الاصطناعي والرسوم وتشغيل iPhone؟
النسخة المؤكدة والنص الأصلي للأساس
فيما يلي الإصدار الرسمي والالتزام الثابت المسجل في 14:25 UTC في 30 سبتمبر 2026. " إنه الإصدار الذي تم تأكيده في ذلك الوقت، ولا يضمن أحدث إصدار في المستقبل. الحد الأدنى Obsidian هو قيمة البيان. لا يتم استنتاج تشغيل المحطة الفعلية من العلم المتوافق مع الهاتف المحمول.
- Copilot 4.0.12 · الحد الأدنى Obsidian 1.11.4 · الإفراج · الالتزام 8c56781c43
- الاتصالات الذكية 4.7.2 · الحد الأدنى Obsidian 1.8.7 · الإصدار · commit 92e8d56c66
- مولد النص 0.8.7 · الحد الأدنى Obsidian 1.6.0 · الإصدار · التزام 4b9ddf8767
كما تم إصلاح السجل الرسمي لإلزام 2db5da29e67e7600176c8c9450fd1c36c3a6831b. بالنسبة لاقتباس 24 وملف 14 وخط 579، أكدنا أنه يتطابق مع وحدات البايت/SHA256 ونطاق الخط واقتباس الملف الأصلي. إنه فحص لتأكيد إمكانية تكرار النسخة الثابتة من المادة، وهي ليست مصادقة خصوصية وقت التشغيل.
اقرأ الأسعار الثابتة ونطاق التأكيد ل 24 مع JSON
الوصف الرئيسي واقتباس الرمز
النص والرمز الإنجليزي الأصلي يقعان ضمن نطاق الالتزام الثابت. يمكنك المتابعة إلى النص الأصلي ل GitHub من رقم Q على الجدول.
Copilot · docs/copilot-plus-and-self-host.md · Q03
افتح النص الأصلي للالتزام الثابت
75:
76: | Model source | How access works | Who processes the prompt |
77: | --------------------------- | -------------------------------------------------------------- | --------------------------------------------------------------- |
78: | **Copilot-hosted** | Lite, Plus, or included Supporter access | Brevilabs and the enterprise model provider used for that model |
79: | **Cloud BYOK** | Your API key under BYOK | The provider and endpoint you configured |
80: | **Local BYOK** | Ollama, LM Studio, or another local OpenAI-compatible endpoint | Your local endpoint |
81: | **opencode-reported model** | Authentication managed by opencode | The provider behind that opencode model |
82: | **Claude** | Claude Code login or environment | Anthropic under your Claude account |
83: | **Codex** | Codex CLI login through `codex-acp` | OpenAI under your Codex or ChatGPT account |
84:
85: A Claude or ChatGPT subscription is not an API key. Use the Claude or Codex Agent Chat setup for those subscriptions. Use BYOK only when you have API access or an OpenAI-compatible endpoint.
86:
87: ## Understand service data routes
88:
89: The selected model is only one possible route. A feature may call another service for the part of the task you asked it to perform:
90:
91: - A **Copilot-hosted Skill** sends the search query, URL, or document needed by that Skill to Brevilabs.
92: - **Plus document processing** sends the supported document to Copilot's hosted processor.
93: - In **Agent Chat**, **Miyo document processing** runs through the local Miyo CLI, so PDF and EPUB parsing stays on this computer even when search uses a remote Miyo server.
94: - In **Quick Chat**, **Miyo document processing** uses the connected Miyo service. A configured remote Miyo server processes the document there rather than on this computer.
95: - Saved **project context** that needs web, YouTube, or binary-file conversion can use Copilot's hosted project service. The Miyo Document Processor choice does not change that project route.
96: - An agent can read a local note and include relevant text in the prompt sent to the selected model. Opening Agent Chat alone does not upload the whole vault.
97:
98: For a workflow that does not send task content to Brevilabs, use direct Markdown context, local tools or local Miyo, and a local model. Disable Copilot's cloud-backed Skills for every agent you use. Do not add web pages, YouTube links, or binary files as saved project context when their hosted conversion is outside your intended boundary.
99:
100: The [privacy policy](https://www.obsidiancopilot.com/en/privacy) describes how Copilot's hosted requests are processed. Your model provider and Miyo server have their own boundaries and terms.Copilot · docs/copilot-plus-and-self-host.md · Q04
افتح النص الأصلي للالتزام الثابت
103:
104: Supporter and eligible legacy licenses can open **Settings → Copilot → Self-Host** and enable **Self-Host Mode**.
105:
106: When it is on, Copilot:
107:
108: - Lets you supply Firecrawl, Perplexity, Parallel, or Exa credentials for web search.
109: - With OpenCode selected, routes Agent Chat web searches through that selected provider while keeping its API key inside Obsidian. This does not require Obsidian's command line interface.
110: - Disables OpenCode's native web-search and web-fetch tools so they cannot bypass the selected route. Full-page fetching through OpenCode is unavailable until the self-host providers share a supported fetch interface.
111: - Lets you supply a Supadata key for YouTube transcripts.
112: - Directs you to BYOK for local or self-hosted model endpoints.
113: - Flags and sorts cloud agents and models below local or self-hosted choices.
114:
115: It does not disable the cloud. Claude, Codex, Copilot-hosted models, cloud BYOK providers, Firecrawl, Perplexity, Parallel, Exa, and Supadata can still send data to their services when you select them. The warnings make those routes visible so you can decide.
116:
117: You do not need Self-Host Mode to use a local BYOK model or local Miyo. Those are available independently.Copilot · src/services/keychainService.ts · Q09
افتح النص الأصلي للالتزام الثابت
239: /** Whether the OS keychain is available in this Obsidian version. */
240: // DESIGN NOTE — intentionally only checks for the `secretStorage` object,
241: // not individual methods (`getSecret`/`setSecret`/`listSecrets`). Obsidian
242: // ships SecretStorage as a single API surface (1.11.4); there is no
243: // released version where the object exists but methods are missing.
244: // Capability-probing each method would add branching for a partial-API
245: // world that does not exist. If a future review flags this again, point
246: // them at this note.
247: isAvailable(): boolean {
248: return !!this.app.secretStorage;
249: }
250:
251: /** Get the current vault namespace ID. */
252: getVaultId(): string {
253: return this.vaultId;
254: }
255:
256: /**
257: * Set the vault namespace ID from persisted settings.
258: * Reason: called during load to replace the path-derived fallback with the
259: * stable persisted ID, so vault renames don't orphan keychain entries.
260: */
261: setVaultId(id: string): void {
262: this.vaultId = id;
263: }
264:
265: /**
266: * Access SecretStorage with a runtime guard.
267: * Reason: replaces scattered non-null assertions with a single guard
268: * that produces a clear error when keychain is unavailable.
269: */
270: private get storage(): SecretStorage {
271: if (!this.app.secretStorage) {
272: throw new Error("OS keychain (SecretStorage) is not available.");
273: }
274: return this.app.secretStorage;اتصالات ذكية · src/main.js · Q13
افتح النص الأصلي للالتزام الثابت
144: async check_for_updates() {
145: if (await this.is_new_plugin_version(this.manifest.version)) {
146: // console.log("opening release notes modal");
147: try {
148: this.ReleaseNotesView.open(this.app.workspace, this.manifest.version);
149: } catch (error) {
150: console.error('Failed to open ReleaseNotesView', error);
151: }
152: await this.set_last_known_version(this.manifest.version);
153: }
154: window.setTimeout(this.check_for_update.bind(this), 3000);
155: }
156:
157: async check_for_update() {
158: try {
159: const { json: response } = await requestUrl({
160: url: "https://api.github.com/repos/brianpetro/obsidian-smart-connections/releases/latest",
161: method: "GET",
162: headers: {
163: "Content-Type": "application/json",
164: },
165: contentType: "application/json",
166: });
167: const latest_release = response.tag_name;
168: if (latest_release !== this.manifest.version) {
169: if (!this.update_available || this.latest_release_version !== latest_release) {مولد النص · src/default-settings.ts · Q15
افتح النص الأصلي للالتزام الثابت
4: const DEFAULT_SETTINGS: TextGeneratorSettings = {
5: version: pkg.version as any,
6: endpoint: "https://api.openai.com/v1",
7: models: [],
8: api_key: "",
9: encrypt_keys: false,
10: selectedProvider: "OpenAI Chat (Langchain)",
11: max_tokens: 5000,
12: temperature: 0.7,
13: frequency_penalty: 0.5,
14: showStatusBar: true,
15: outputToBlockQuote: false,
16: freeCursorOnStreaming: false,
17: allowJavascriptRun: false,
18: experiment: false,
19: promptsPath: "textgenerator/templates",
20: textGenPath: "textgenerator/",
21: prefix: "\n\n",
22: tgSelectionLimiter: "^\\*\\*\\*",
23: stream: true,
24: context: {
25: customInstructEnabled: true,
26: includeClipboard: true,
27: customInstruct: `Title: {{title}}
28:
29: Starred Blocks: {{starredBlocks}}
30:
31: {{tg_selection}}`,
32:
33: contextTemplate: `Title: {{title}}
34:
35: Starred Blocks: {{starredBlocks}}
36:
37: {{tg_selection}}`,
38: },
39: requestTimeout: 300000,
40: options: {مولد النصوص · src/scope/context-manager.ts · Q17
افتح النص الأصلي للالتزام الثابت
355: {},
356: this.getFrontmatter(this.getMetaData(templatePath)),
357: contextObj.frontmatter
358: );
359:
360: if (contextOptions.includeClipboard)
361: try {
362: blocks["clipboard"] = await this.getClipboard();
363: } catch {
364: // empty
365: }
366:
367: const options = {
368: selection,
369: selections,
370: ...blocks["frontmatter"],
371: ...blocks["headings"],
372: content: ctnt,
373: context,
374: ...blocks,مولد النص · src/main.ts · Q20
افتح النص الأصلي للالتزام الثابت
664: encryptAllKeys() {
665: // check if user have LLMProviderOptionsKeysHashed object (upgrading from older version)
666: this.settings.LLMProviderOptionsKeysHashed ??= {};
667:
668: const keyList: string[] = [];
669:
670: this.settings.api_key_encrypted = this.getEncryptedKey(
671: this.settings.api_key
672: );
673:
674: // get all secret keys
675: Object.entries(this.settings?.LLMProviderOptions).forEach(([key1, l1]) => {
676: if (typeof l1 != "object") return;
677: Object.entries(l1).forEach(([key2, l2]) => {
678: if (key2.toLowerCase().includes("key") && typeof l2 == "string") {
679: keyList.push(`${key1}.${key2}`);
680: }
681: });
682: });
683:
684: keyList.forEach((pth) => {
685: const keyval =
686: (get(this.settings?.LLMProviderOptions, pth) as never as string) || "";
687:
688: const encrypted = this.getEncryptedKey(keyval);
689: this.settings.LLMProviderOptionsKeysHashed[pth] = encrypted;
690: });
691: }
692:
693: removeApikeys(settings: typeof this.settings): typeof this.settings {
694: const LLMProviderOptions = JSON.parse(
695: JSON.stringify(settings?.LLMProviderOptions)
696: ) as typeof this.settings.LLMProviderOptions;
697:
698: // get all secret keys
699: Object.entries(LLMProviderOptions).forEach(([key1, l1]) => {
700: if (typeof l1 != "object") return;
701: Object.entries(l1).forEach(([key2, l2]) => {
702: if (key2.toLowerCase().includes("key") && typeof l2 == "string") {
703: set(LLMProviderOptions, `${key1}.${key2}`, "");
704: }
705: });
706: });
707:
708: return {
709: ...settings,
710: api_key: "",
711: LLMProviderOptions,
712: };مولد النص · src/main.ts · Q21
افتح النص الأصلي للالتزام الثابت
742: getEncryptedKey(apiKey: string) {
743: if (!safeStorage?.isEncryptionAvailable() || !this.settings.encrypt_keys) {
744: return `${DecryptKeyPrefix}${apiKey}`;
745: }
746:
747: return safeStorage.encryptString(apiKey) as Buffer;
748: }
749: مولد النص · src/constants.ts · Q22
افتح النص الأصلي للالتزام الثابت
35: custom_header: true,
36: };
37:
38: export const DecryptKeyPrefix = "__@#key_prefix#@__";
39: ما لم يتم تأكيده في هذه المقارنة
لم نتحقق من تثبيت الإضافة أو تفعيلها أو واجهة إعدادها أو التوليد أو استدعاء النموذج/API أو المفاتيح الفعلية أو حزم الإرسال أو تدقيق شبكة جميع الاعتماديات أو التزام خوادم المزود بسياسات الاحتفاظ والتدريب والحذف. كما لا يشمل النطاق الإدخال والتسليم ووسوم AI في SimpleMemo، أو المزامنة، أو السلوك حسب الجهاز، أو السرعة والإنتاجية، أو أثر الزيارات والاستشهادات عبر AI.
كتب بواسطة SimpleMemo Developer. في المقارنة المادية لهذا الموقع الذي تديره YURIKA, K.K.، فهي ليست الشهادة الرسمية ل Obsidian أو شهادة الخصوصية لكل مكون إضافي. رقم