diff --git a/README.md b/README.md index 26d1880..f07c5c3 100644 --- a/README.md +++ b/README.md @@ -73,7 +73,7 @@ Pausing is a scheduling decision and does not mark a note as mastered. Paused no AI mastery exams are optional and require a configured model. They generate closed-book questions, grade answers against article-grounded criteria, show reference answers after submission, independently verify qualifying results, and require a delayed recheck before marking a note mastered. Confidence is derived from source-evidence coverage and agreement between the examiner and verifier, not from a model-provided percentage alone. -Every source article uses one longitudinal Markdown mastery record. Failed attempts, retries, and delayed rechecks append new `Attempt N` sections to the same file. The default folder is `Smart Review/Mastery Records`, and missing folders are created automatically. The folder path is relative to the vault root; use `00-Overview/Smart Review/Mastery Records` if you want the records under an existing folder. +Every source article uses one longitudinal Markdown mastery record. Failed attempts, retries, and delayed rechecks append new `Attempt N` sections to the same file. The default folder is `Smart Review/Mastery Records`, and missing folders are created automatically. In settings, choosing a parent folder such as `00-Overview` stores records under `00-Overview/Smart Review/Mastery Records`. ## AI Provider Setup and Network Disclosure diff --git a/README.zh-CN.md b/README.zh-CN.md index 41076c0..5447e43 100644 --- a/README.zh-CN.md +++ b/README.zh-CN.md @@ -73,7 +73,7 @@ Smart Review Center 是插件内置的单一主页面,不需要额外安装 Ma AI 掌握检验是可选能力,需要用户自行配置模型。它会生成保持、辨析、迁移和生成四类闭卷问题,按原文证据评分,提交后显示缺失点和参考答案,并对通过或临界结果执行独立复核。置信度来自原文证据覆盖和两次评分的一致性,不只采用模型自行报告的百分比。第一次通过后还需等待 30 天进行延迟复检。 -每篇源文章只维护一份纵向掌握记录。失败、重试和延迟复检都会向同一 Markdown 文件追加 `Attempt N`。默认目录为 `Smart Review/Mastery Records`,目录不存在时自动创建。该路径相对当前 Vault 根目录;如果希望放在已有目录下,可以写成 `00-总览/Smart Review/Mastery Records`。 +每篇源文章只维护一份纵向掌握记录。失败、重试和延迟复检都会向同一 Markdown 文件追加 `Attempt N`。默认目录为 `Smart Review/Mastery Records`,目录不存在时自动创建。在设置中选择父目录,例如 `00-总览`,记录会保存到 `00-总览/Smart Review/Mastery Records`。 ## AI 模型配置与网络披露 diff --git a/apps/smart-review-plugin/i18n.ts b/apps/smart-review-plugin/i18n.ts index 88b87ab..027e588 100644 --- a/apps/smart-review-plugin/i18n.ts +++ b/apps/smart-review-plugin/i18n.ts @@ -175,8 +175,9 @@ const TRANSLATIONS = { aiExaminerHeading: "AI mastery examiner", aiExaminerDisclosure: "Optional. Only the current article and submitted answers are sent to the selected provider. API keys are stored in this plugin's local data.json and are not encrypted by Obsidian.", masteryRecordsPath: "Mastery records folder", - masteryRecordsPathDesc: "Vault-relative folder. Example: Smart Review/Mastery Records or 00-Overview/Smart Review/Mastery Records. Missing folders are created automatically.", + masteryRecordsPathDesc: "Choose a parent folder for AI mastery records. Smart Review will use a Smart Review/Mastery Records subfolder.", selectFolder: "Choose folder", + selectParentFolder: "Choose parent folder", examinerConnection: "Examiner connection", examinerConnectionDesc: "Generates questions and performs the first evidence-grounded grade.", verifierConnection: "Verifier connection", @@ -423,8 +424,9 @@ const TRANSLATIONS = { aiExaminerHeading: "AI 掌握考官", aiExaminerDisclosure: "可选功能。只会把当前文章和本次回答发送到所选服务商。API Key 保存在插件本地 data.json 中,Obsidian 不会对该文件加密。", masteryRecordsPath: "掌握检验记录目录", - masteryRecordsPathDesc: "相对当前 Vault 根目录的文件夹。例如 Smart Review/Mastery Records 或 00-总览/Smart Review/Mastery Records。目录不存在时自动创建。", + masteryRecordsPathDesc: "选择保存 AI 掌握检验记录的父目录,插件会使用 Smart Review/Mastery Records 子目录。", selectFolder: "选择目录", + selectParentFolder: "选择父目录", examinerConnection: "考官连接", examinerConnectionDesc: "负责生成问题并执行第一次基于原文证据的评分。", verifierConnection: "复核连接", diff --git a/apps/smart-review-plugin/review-center-view.ts b/apps/smart-review-plugin/review-center-view.ts index 3612007..f19cdb7 100644 --- a/apps/smart-review-plugin/review-center-view.ts +++ b/apps/smart-review-plugin/review-center-view.ts @@ -273,7 +273,6 @@ export class ReviewCenterView extends ItemView { const overview = container.createDiv({ cls: "smart-review-lifecycle-overview" }); const heading = overview.createDiv({ cls: "smart-review-lifecycle-heading" }); heading.createEl("h3", { text: t(this.plugin.locale, "lifecycleManagement") }); - heading.createSpan({ cls: "smart-review-lifecycle-caption", text: t(this.plugin.locale, "lifecycleManagementDesc") }); const chips = overview.createDiv({ cls: "smart-review-lifecycle-chips" }); for (const group of groups) { diff --git a/apps/smart-review-plugin/settings.ts b/apps/smart-review-plugin/settings.ts index 7ed8a0c..d947107 100644 --- a/apps/smart-review-plugin/settings.ts +++ b/apps/smart-review-plugin/settings.ts @@ -423,9 +423,9 @@ export class SmartReviewSettingTab extends PluginSettingTab { await this.plugin.saveSettings(); }); }) - .addButton((button) => button.setButtonText(t(locale, "selectFolder")).onClick(() => { - new FolderPickerModal(this.app, t(locale, "selectFolder"), async (folder) => { - this.plugin.settings.masteryRecordsPath = folder.path; + .addButton((button) => button.setButtonText(t(locale, "selectParentFolder")).onClick(() => { + new FolderPickerModal(this.app, t(locale, "selectParentFolder"), async (folder) => { + this.plugin.settings.masteryRecordsPath = buildMasteryRecordsPath(folder.path); await this.plugin.saveSettings(); this.display(); }).open(); @@ -653,6 +653,13 @@ function parsePositiveNumber(value: string, fallback: number): number { return Number.isFinite(parsed) && parsed > 0 ? parsed : fallback; } +function buildMasteryRecordsPath(parentPath: string): string { + const cleaned = parentPath.replace(/^\/+|\/+$/g, ""); + return cleaned.length === 0 + ? DEFAULT_SETTINGS.masteryRecordsPath + : `${cleaned}/${DEFAULT_SETTINGS.masteryRecordsPath}`; +} + class FolderInputSuggest extends AbstractInputSuggest { protected override getSuggestions(query: string): TFolder[] { const normalized = query.trim().toLowerCase();