From 8a6d4ff35da4bf272014fbe495e6250061f6ebe9 Mon Sep 17 00:00:00 2001 From: liuxuezhuo Date: Fri, 18 Sep 2026 09:35:30 +0800 Subject: [PATCH 1/2] feat(memory): add an opt-in Qoder CLI memory toggle MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Settings → Safety gains a Memory switch, off by default. When enabled, query options request CLI-native memory so the CLI saves and reloads reusable information across conversations from its shared memory store; toggling the switch restarts the running session once. --- CHANGELOG.md | 7 +++ src/core/types/settings.ts | 6 +++ src/features/settings/settings-tab.ts | 19 ++++++++ .../settings/ui/qoder-settings-tab.ts | 12 ++++++ src/i18n/locales/de.json | 4 ++ src/i18n/locales/en.json | 4 ++ src/i18n/locales/es.json | 4 ++ src/i18n/locales/fr.json | 4 ++ src/i18n/locales/ja.json | 4 ++ src/i18n/locales/ko.json | 4 ++ src/i18n/locales/pt.json | 4 ++ src/i18n/locales/ru.json | 4 ++ src/i18n/locales/zh-CN.json | 4 ++ src/i18n/locales/zh-TW.json | 4 ++ src/i18n/types.ts | 2 + src/qoder/config/settings.ts | 3 ++ .../runtime/qoder-query-options-builder.ts | 8 ++++ src/qoder/runtime/types.ts | 2 + tests/unit/i18n/locales.test.ts | 2 + .../qoder/runtime/qoder-chat-runtime.test.ts | 8 ++++ .../qoder-query-options-builder.test.ts | 43 +++++++++++++++++++ 21 files changed, 152 insertions(+) diff --git a/CHANGELOG.md b/CHANGELOG.md index 1d0c33a..d944b1e 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -11,6 +11,13 @@ version with its date and start a fresh empty `[Unreleased]` above it. ## [Unreleased] +### Added + +- An opt-in Memory toggle in Settings → Safety lets the Qoder CLI save and + reload reusable information across conversations. Memories live in the + Qoder CLI memory directory and are shared with the terminal CLI; toggling + it restarts the running session once. + ## [1.0.12] - 2026-09-20 ### Added diff --git a/src/core/types/settings.ts b/src/core/types/settings.ts index 676e3d9..9da58c9 100644 --- a/src/core/types/settings.ts +++ b/src/core/types/settings.ts @@ -111,6 +111,12 @@ export interface QoderSettings { edition: QoderCliEdition; loadUserSettings: boolean; enableBangBash: boolean; + /** + * Let the CLI generate and consume memory across conversations. Memories + * live in the Qoder CLI memory directory and are shared with the terminal + * CLI. + */ + enableMemory: boolean; discoveredModels: Array<{ value: string; displayName: string; diff --git a/src/features/settings/settings-tab.ts b/src/features/settings/settings-tab.ts index b91770f..a99061f 100644 --- a/src/features/settings/settings-tab.ts +++ b/src/features/settings/settings-tab.ts @@ -259,6 +259,15 @@ export class QoderianSettingTab extends PluginSettingTab { defaultValue: qoderSettings.loadUserSettings, }, }, + { + name: t('settings.enableMemory.name'), + desc: t('settings.enableMemory.desc'), + control: { + type: 'toggle', + key: 'enableMemory', + defaultValue: qoderSettings.enableMemory, + }, + }, ], }, { @@ -392,6 +401,10 @@ export class QoderianSettingTab extends PluginSettingTab { const settingsBag = this.plugin.settings as unknown as Record; return getQoderSettings(settingsBag).loadUserSettings; } + if (key === 'enableMemory') { + const settingsBag = this.plugin.settings as unknown as Record; + return getQoderSettings(settingsBag).enableMemory; + } if (key === 'titleGenerationModel') { return this.plugin.settings.titleGenerationModel || 'auto'; } @@ -417,6 +430,12 @@ export class QoderianSettingTab extends PluginSettingTab { return this.plugin.saveSettings(); } + if (key === 'enableMemory') { + const settingsBag = this.plugin.settings as unknown as Record; + updateQoderSettings(settingsBag, { enableMemory: Boolean(value) }); + return this.plugin.saveSettings(); + } + return this.persistControlValue(key, value); } // Unreachable: Obsidian < 1.13 never calls setControlValue. diff --git a/src/features/settings/ui/qoder-settings-tab.ts b/src/features/settings/ui/qoder-settings-tab.ts index 62268e4..766ed08 100644 --- a/src/features/settings/ui/qoder-settings-tab.ts +++ b/src/features/settings/ui/qoder-settings-tab.ts @@ -338,6 +338,18 @@ export function renderQoderSettingsTab(container: HTMLElement, context: QoderSet }) ); + new Setting(container) + .setName(t('settings.enableMemory.name')) + .setDesc(t('settings.enableMemory.desc')) + .addToggle((toggle) => + toggle + .setValue(qoderSettings.enableMemory) + .onChange(async (value) => { + updateQoderSettings(settingsBag, { enableMemory: value }); + await context.plugin.saveSettings(); + }) + ); + // --- Commands and Skills --- new Setting(container).setName(t('settings.slashCommands.name')).setHeading(); diff --git a/src/i18n/locales/de.json b/src/i18n/locales/de.json index 838963a..5894084 100644 --- a/src/i18n/locales/de.json +++ b/src/i18n/locales/de.json @@ -318,6 +318,10 @@ "name": "Benutzer-Qoder-Einstellungen laden", "desc": "Lädt ~/.qoder/settings.json. Wenn aktiviert, können Benutzer-Qoder-CLI-Berechtigungsregeln den Sicherheitsmodus umgehen." }, + "enableMemory": { + "name": "Gedächtnis", + "desc": "Speichert wiederverwendbare Informationen automatisch und lädt sie über Unterhaltungen hinweg. Die Daten liegen im Gedächtnisverzeichnis der Qoder CLI und werden mit der Terminal-CLI geteilt." + }, "qoderSafeMode": { "name": "Berechtigungen im sicheren Modus", "desc": "Berechtigungsverhalten bei aktiviertem sicheren Modus.", diff --git a/src/i18n/locales/en.json b/src/i18n/locales/en.json index 9062052..085ad38 100644 --- a/src/i18n/locales/en.json +++ b/src/i18n/locales/en.json @@ -318,6 +318,10 @@ "name": "Load user Qoder settings", "desc": "Load ~/.qoder/settings.json. When enabled, user's Qoder CLI permission rules may bypass Safe mode." }, + "enableMemory": { + "name": "Memory", + "desc": "Automatically save and load reusable information across conversations. Memories live in your Qoder CLI memory directory and are shared with the terminal CLI." + }, "qoderSafeMode": { "name": "Safe mode permissions", "desc": "Permission behavior used while the Safe toggle is on.", diff --git a/src/i18n/locales/es.json b/src/i18n/locales/es.json index 12f15ed..3ba1fe0 100644 --- a/src/i18n/locales/es.json +++ b/src/i18n/locales/es.json @@ -318,6 +318,10 @@ "name": "Cargar configuración de usuario Qoder", "desc": "Carga ~/.qoder/settings.json. Cuando está habilitado, las reglas de permisos del usuario pueden eludir el modo seguro." }, + "enableMemory": { + "name": "Memoria", + "desc": "Guarda y carga automáticamente información reutilizable entre conversaciones. Los recuerdos se almacenan en el directorio de memoria de Qoder CLI y se comparten con la CLI de terminal." + }, "qoderSafeMode": { "name": "Permisos del modo seguro", "desc": "Comportamiento de permisos cuando el modo seguro está activado.", diff --git a/src/i18n/locales/fr.json b/src/i18n/locales/fr.json index 2694f62..ebec1a1 100644 --- a/src/i18n/locales/fr.json +++ b/src/i18n/locales/fr.json @@ -318,6 +318,10 @@ "name": "Charger les paramètres utilisateur Qoder", "desc": "Charge ~/.qoder/settings.json. Lorsqu'activé, les règles de permission de l'utilisateur peuvent contourner le mode sécurisé." }, + "enableMemory": { + "name": "Mémoire", + "desc": "Enregistre et charge automatiquement les informations réutilisables entre les conversations. Les mémoires sont stockées dans le répertoire de mémoire de Qoder CLI et partagées avec la CLI du terminal." + }, "qoderSafeMode": { "name": "Autorisations du mode sécurisé", "desc": "Comportement des autorisations lorsque le mode sécurisé est activé.", diff --git a/src/i18n/locales/ja.json b/src/i18n/locales/ja.json index 7e05e2b..28bb768 100644 --- a/src/i18n/locales/ja.json +++ b/src/i18n/locales/ja.json @@ -318,6 +318,10 @@ "name": "ユーザーQoder設定を読み込む", "desc": "~/.qoder/settings.json を読み込みます。有効にすると、ユーザーの Qoder CLI 許可ルールがセキュリティモードをバイパスする可能性があります。" }, + "enableMemory": { + "name": "メモリ", + "desc": "会話をまたいで再利用できる情報を自動的に保存・読み込みします。メモリは Qoder CLI のメモリディレクトリに保存され、ターミナル CLI と共有されます。" + }, "qoderSafeMode": { "name": "セーフモードの権限", "desc": "セーフモードが有効なときに使用する権限動作です。", diff --git a/src/i18n/locales/ko.json b/src/i18n/locales/ko.json index fb7fd8b..d78147c 100644 --- a/src/i18n/locales/ko.json +++ b/src/i18n/locales/ko.json @@ -318,6 +318,10 @@ "name": "사용자 Qoder 설정 로드", "desc": "~/.qoder/settings.json을 로드합니다. 활성화하면 사용자의 Qoder CLI 허용 규칙이 보안 모드를 우회할 수 있습니다." }, + "enableMemory": { + "name": "메모리", + "desc": "대화를 넘어 재사용할 수 있는 정보를 자동으로 저장하고 불러옵니다. 메모리는 Qoder CLI 메모리 디렉터리에 저장되며 터미널 CLI와 공유됩니다." + }, "qoderSafeMode": { "name": "안전 모드 권한", "desc": "안전 모드가 켜져 있을 때 사용할 권한 동작입니다.", diff --git a/src/i18n/locales/pt.json b/src/i18n/locales/pt.json index aa505fd..3ed4671 100644 --- a/src/i18n/locales/pt.json +++ b/src/i18n/locales/pt.json @@ -318,6 +318,10 @@ "name": "Carregar configurações do usuário Qoder", "desc": "Carrega ~/.qoder/settings.json. Quando habilitado, as regras de permissão do usuário podem ignorar o modo seguro." }, + "enableMemory": { + "name": "Memória", + "desc": "Salva e carrega automaticamente informações reutilizáveis entre conversas. As memórias ficam no diretório de memória do Qoder CLI e são compartilhadas com a CLI do terminal." + }, "qoderSafeMode": { "name": "Permissões do modo seguro", "desc": "Comportamento das permissões quando o modo seguro está ativo.", diff --git a/src/i18n/locales/ru.json b/src/i18n/locales/ru.json index 2f14adb..3e0b101 100644 --- a/src/i18n/locales/ru.json +++ b/src/i18n/locales/ru.json @@ -318,6 +318,10 @@ "name": "Загружать пользовательские настройки Qoder", "desc": "Загружает ~/.qoder/settings.json. При включении пользовательские правила разрешений Qoder CLI могут обходить безопасный режим." }, + "enableMemory": { + "name": "Память", + "desc": "Автоматически сохраняет полезную информацию между беседами и загружает её при следующих разговорах. Воспоминания хранятся в каталоге памяти Qoder CLI и используются совместно с терминальным CLI." + }, "qoderSafeMode": { "name": "Разрешения безопасного режима", "desc": "Правила разрешений при включённом безопасном режиме.", diff --git a/src/i18n/locales/zh-CN.json b/src/i18n/locales/zh-CN.json index dc1fd97..27e5e2a 100644 --- a/src/i18n/locales/zh-CN.json +++ b/src/i18n/locales/zh-CN.json @@ -318,6 +318,10 @@ "name": "加载用户 Qoder 设置", "desc": "加载 ~/.qoder/settings.json。启用后,用户的 Qoder CLI 权限规则可能绕过安全模式。" }, + "enableMemory": { + "name": "记忆", + "desc": "自动保存并加载跨会话可复用的信息。记忆存放在 Qoder CLI 的记忆目录中,与终端 CLI 共用。" + }, "qoderSafeMode": { "name": "安全模式权限", "desc": "开启安全模式时使用的权限策略。", diff --git a/src/i18n/locales/zh-TW.json b/src/i18n/locales/zh-TW.json index 0a9b1ac..9253df1 100644 --- a/src/i18n/locales/zh-TW.json +++ b/src/i18n/locales/zh-TW.json @@ -318,6 +318,10 @@ "name": "載入使用者 Qoder 設定", "desc": "載入 ~/.qoder/settings.json。啟用後,使用者的 Qoder CLI 權限規則可能繞過安全模式。" }, + "enableMemory": { + "name": "記憶", + "desc": "自動儲存並載入跨工作階段可重複使用的資訊。記憶存放在 Qoder CLI 的記憶目錄中,與終端 CLI 共用。" + }, "qoderSafeMode": { "name": "安全模式權限", "desc": "開啟安全模式時使用的權限策略。", diff --git a/src/i18n/types.ts b/src/i18n/types.ts index fa42840..e3180b2 100644 --- a/src/i18n/types.ts +++ b/src/i18n/types.ts @@ -307,6 +307,8 @@ export type TranslationKey = | 'settings.safety' | 'settings.loadUserSettings.name' | 'settings.loadUserSettings.desc' + | 'settings.enableMemory.name' + | 'settings.enableMemory.desc' | 'settings.qoderSafeMode.name' | 'settings.qoderSafeMode.desc' | 'settings.qoderSafeMode.modes.acceptEdits' diff --git a/src/qoder/config/settings.ts b/src/qoder/config/settings.ts index 3b0a4a2..ba60f26 100644 --- a/src/qoder/config/settings.ts +++ b/src/qoder/config/settings.ts @@ -44,6 +44,7 @@ export const DEFAULT_QODER_SETTINGS: Readonly = Object.freeze({ edition: 'global', loadUserSettings: true, enableBangBash: false, + enableMemory: false, discoveredModels: [], discoveredAgents: [], lastModel: 'auto', @@ -238,6 +239,8 @@ export function getQoderSettings( ?? DEFAULT_QODER_SETTINGS.loadUserSettings, enableBangBash: (config.enableBangBash as boolean | undefined) ?? DEFAULT_QODER_SETTINGS.enableBangBash, + enableMemory: (config.enableMemory as boolean | undefined) + ?? DEFAULT_QODER_SETTINGS.enableMemory, discoveredModels: normalizeQoderDiscoveredModels(config.discoveredModels), discoveredAgents: normalizeQoderDiscoveredAgents(config.discoveredAgents), lastModel: (config.lastModel as string | undefined) ?? DEFAULT_QODER_SETTINGS.lastModel, diff --git a/src/qoder/runtime/qoder-query-options-builder.ts b/src/qoder/runtime/qoder-query-options-builder.ts index 2029449..c4cdf1f 100644 --- a/src/qoder/runtime/qoder-query-options-builder.ts +++ b/src/qoder/runtime/qoder-query-options-builder.ts @@ -71,6 +71,7 @@ export class QueryOptionsBuilder { // These require restart (cannot be updated dynamically) if (currentConfig.systemPromptKey !== newConfig.systemPromptKey) return true; + if (currentConfig.memoryEnabled !== newConfig.memoryEnabled) return true; if (currentConfig.disallowedToolsKey !== newConfig.disallowedToolsKey) return true; if (currentConfig.mcpServersKey !== newConfig.mcpServersKey) return true; if (currentConfig.pluginsKey !== newConfig.pluginsKey) return true; @@ -118,6 +119,7 @@ export class QueryOptionsBuilder { effortLevel: resolveModelReasoningEffort(runtimeModel, ctx.settings), permissionMode: ctx.settings.permissionMode, sdkPermissionMode, + memoryEnabled: qoderSettings.enableMemory, systemPromptKey: computeSystemPromptKey(systemPromptSettings), disallowedToolsKey, mcpServersKey: '', // Dynamic via setMcpServers, not tracked for restart @@ -278,6 +280,12 @@ export class QueryOptionsBuilder { includePartialMessages: true, }; + if (qoderSettings.enableMemory) { + // CLI-native memory: the CLI writes memories after turns and injects + // them into later turns, using the same store as the terminal CLI. + options.memory = { mode: 'native' }; + } + options.spawnQoderCLIProcess = createCustomSpawnFunction(ctx.enhancedPath); return { options, qoderSettings }; diff --git a/src/qoder/runtime/types.ts b/src/qoder/runtime/types.ts index 0fa9408..951aa20 100644 --- a/src/qoder/runtime/types.ts +++ b/src/qoder/runtime/types.ts @@ -102,6 +102,8 @@ export interface PersistentQueryConfig { effortLevel: EffortLevel; permissionMode: PermissionMode | null; sdkPermissionMode: SDKPermissionMode | null; + /** Memory is a query-launch option, so toggling it restarts the session. */ + memoryEnabled: boolean; systemPromptKey: string; disallowedToolsKey: string; mcpServersKey: string; diff --git a/tests/unit/i18n/locales.test.ts b/tests/unit/i18n/locales.test.ts index 7b574f6..a1e639e 100644 --- a/tests/unit/i18n/locales.test.ts +++ b/tests/unit/i18n/locales.test.ts @@ -74,6 +74,8 @@ const localizedKeys = [ 'settings.enableBangBash.name', 'settings.enableBangBash.desc', 'settings.enableBangBash.validation.noNode', + 'settings.enableMemory.name', + 'settings.enableMemory.desc', 'settings.requireCommandOrControlEnterToSend.name', 'settings.requireCommandOrControlEnterToSend.desc', 'settings.qoderSafeMode.name', diff --git a/tests/unit/qoder/runtime/qoder-chat-runtime.test.ts b/tests/unit/qoder/runtime/qoder-chat-runtime.test.ts index ea1200f..2dcfb61 100644 --- a/tests/unit/qoder/runtime/qoder-chat-runtime.test.ts +++ b/tests/unit/qoder/runtime/qoder-chat-runtime.test.ts @@ -2541,6 +2541,7 @@ describe('QoderChatRuntime', () => { model: 'qoder-3-5-sonnet', effortLevel: 'high', permissionMode: 'ask', + memoryEnabled: false, systemPromptKey: '', disallowedToolsKey: '', mcpServersKey: '{}', @@ -2716,6 +2717,7 @@ describe('QoderChatRuntime', () => { model: 'qoder-3-5-sonnet', effortLevel: 'high', permissionMode: 'ask', + memoryEnabled: false, systemPromptKey: '', disallowedToolsKey: '', mcpServersKey: '{}', @@ -2779,6 +2781,7 @@ describe('QoderChatRuntime', () => { model: 'qoder-3-5-sonnet', effortLevel: 'high', permissionMode: 'ask', + memoryEnabled: false, systemPromptKey: '', disallowedToolsKey: '', mcpServersKey: '{}', @@ -2821,6 +2824,7 @@ describe('QoderChatRuntime', () => { model: 'qoder-3-5-sonnet', effortLevel: 'high', permissionMode: 'ask', + memoryEnabled: false, systemPromptKey: '', disallowedToolsKey: '', mcpServersKey: '{}', @@ -2871,6 +2875,7 @@ describe('QoderChatRuntime', () => { model: 'qoder-3-5-sonnet', effortLevel: 'high', permissionMode: 'ask', + memoryEnabled: false, systemPromptKey: '', disallowedToolsKey: '', mcpServersKey: '{}', @@ -2909,6 +2914,7 @@ describe('QoderChatRuntime', () => { model: 'qoder-3-5-sonnet', effortLevel: 'high', permissionMode: 'ask', + memoryEnabled: false, systemPromptKey: '', disallowedToolsKey: '', mcpServersKey: '{}', @@ -2955,6 +2961,7 @@ describe('QoderChatRuntime', () => { model: 'qoder-3-5-sonnet', effortLevel: 'high', permissionMode: 'ask', + memoryEnabled: false, systemPromptKey: '', disallowedToolsKey: '', mcpServersKey: '{}', @@ -3012,6 +3019,7 @@ describe('QoderChatRuntime', () => { model: 'qoder-3-5-sonnet', effortLevel: 'high', permissionMode: 'ask', + memoryEnabled: false, systemPromptKey: '', disallowedToolsKey: '', mcpServersKey: '{}', diff --git a/tests/unit/qoder/runtime/qoder-query-options-builder.test.ts b/tests/unit/qoder/runtime/qoder-query-options-builder.test.ts index 7cc5a73..0b2a36b 100644 --- a/tests/unit/qoder/runtime/qoder-query-options-builder.test.ts +++ b/tests/unit/qoder/runtime/qoder-query-options-builder.test.ts @@ -156,3 +156,46 @@ describe('QueryOptionsBuilder model policy', () => { }); }); }); + +describe('QueryOptionsBuilder memory', () => { + it('leaves memory off by default on persistent and cold-start queries', () => { + const persistent = QueryOptionsBuilder.buildPersistentQueryOptions( + createContext('default'), + ); + const coldStart = QueryOptionsBuilder.buildColdStartQueryOptions( + createColdStartContext(), + ); + + expect(persistent.memory).toBeUndefined(); + expect(coldStart.memory).toBeUndefined(); + }); + + it('requests CLI-native memory on persistent queries when enabled', () => { + const ctx = createContext('default'); + ctx.settings.qoder.enableMemory = true; + + const options = QueryOptionsBuilder.buildPersistentQueryOptions(ctx); + + expect(options.memory).toEqual({ mode: 'native' }); + }); + + it('carries native memory into chat cold-start queries when enabled', () => { + const ctx = createColdStartContext(); + ctx.settings.qoder.enableMemory = true; + + const options = QueryOptionsBuilder.buildColdStartQueryOptions(ctx); + + expect(options.memory).toEqual({ mode: 'native' }); + }); + + it('restarts the session when the memory setting is toggled', () => { + const off = QueryOptionsBuilder.buildPersistentQueryConfig(createContext('default')); + + const onCtx = createContext('default'); + onCtx.settings.qoder.enableMemory = true; + const on = QueryOptionsBuilder.buildPersistentQueryConfig(onCtx); + + expect(QueryOptionsBuilder.needsRestart(off, on)).toBe(true); + expect(QueryOptionsBuilder.needsRestart(off, off)).toBe(false); + }); +}); From 88c7035ab9767724d9231b55f9ad3c1d548cf85e Mon Sep 17 00:00:00 2001 From: liuxuezhuo Date: Sun, 20 Sep 2026 00:57:56 +0800 Subject: [PATCH 2/2] refactor(settings): move the memory toggle into the experimental group Memory is still settling in as a Qoder CLI feature, so it belongs with the other experimental switch instead of the safety group. Co-authored-by: QoderAI (Qwen 3.8 Max) --- CHANGELOG.md | 4 ++-- src/features/settings/settings-tab.ts | 18 +++++++------- .../settings/ui/qoder-settings-tab.ts | 24 +++++++++---------- 3 files changed, 23 insertions(+), 23 deletions(-) diff --git a/CHANGELOG.md b/CHANGELOG.md index d944b1e..fadbb2c 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -13,8 +13,8 @@ version with its date and start a fresh empty `[Unreleased]` above it. ### Added -- An opt-in Memory toggle in Settings → Safety lets the Qoder CLI save and - reload reusable information across conversations. Memories live in the +- An opt-in Memory toggle in Settings → Experimental lets the Qoder CLI save + and reload reusable information across conversations. Memories live in the Qoder CLI memory directory and are shared with the terminal CLI; toggling it restarts the running session once. diff --git a/src/features/settings/settings-tab.ts b/src/features/settings/settings-tab.ts index a99061f..84aa114 100644 --- a/src/features/settings/settings-tab.ts +++ b/src/features/settings/settings-tab.ts @@ -259,15 +259,6 @@ export class QoderianSettingTab extends PluginSettingTab { defaultValue: qoderSettings.loadUserSettings, }, }, - { - name: t('settings.enableMemory.name'), - desc: t('settings.enableMemory.desc'), - control: { - type: 'toggle', - key: 'enableMemory', - defaultValue: qoderSettings.enableMemory, - }, - }, ], }, { @@ -387,6 +378,15 @@ export class QoderianSettingTab extends PluginSettingTab { return () => { injected?.remove(); }; }, }, + { + name: t('settings.enableMemory.name'), + desc: t('settings.enableMemory.desc'), + control: { + type: 'toggle', + key: 'enableMemory', + defaultValue: qoderSettings.enableMemory, + }, + }, ], }, ]; diff --git a/src/features/settings/ui/qoder-settings-tab.ts b/src/features/settings/ui/qoder-settings-tab.ts index 766ed08..9cdbd3c 100644 --- a/src/features/settings/ui/qoder-settings-tab.ts +++ b/src/features/settings/ui/qoder-settings-tab.ts @@ -338,18 +338,6 @@ export function renderQoderSettingsTab(container: HTMLElement, context: QoderSet }) ); - new Setting(container) - .setName(t('settings.enableMemory.name')) - .setDesc(t('settings.enableMemory.desc')) - .addToggle((toggle) => - toggle - .setValue(qoderSettings.enableMemory) - .onChange(async (value) => { - updateQoderSettings(settingsBag, { enableMemory: value }); - await context.plugin.saveSettings(); - }) - ); - // --- Commands and Skills --- new Setting(container).setName(t('settings.slashCommands.name')).setHeading(); @@ -404,4 +392,16 @@ export function renderQoderSettingsTab(container: HTMLElement, context: QoderSet .setName(t('settings.enableBangBash.name')) .setDesc(t('settings.enableBangBash.desc')); renderBangBashControl(bangBashSetting, container, context); + + new Setting(container) + .setName(t('settings.enableMemory.name')) + .setDesc(t('settings.enableMemory.desc')) + .addToggle((toggle) => + toggle + .setValue(qoderSettings.enableMemory) + .onChange(async (value) => { + updateQoderSettings(settingsBag, { enableMemory: value }); + await context.plugin.saveSettings(); + }) + ); }