Skip to content

Commit f9e7019

Browse files
luoxuanzaoQoder-AI
andauthored
feat(memory): add an opt-in Qoder CLI memory toggle (#73)
* feat(memory): add an opt-in Qoder CLI memory toggle 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. * 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) <qoder_ai@qoder.com> --------- Co-authored-by: QoderAI (Qwen 3.8 Max) <qoder_ai@qoder.com>
1 parent bc09a91 commit f9e7019

21 files changed

Lines changed: 152 additions & 0 deletions

‎CHANGELOG.md‎

Lines changed: 7 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -11,6 +11,13 @@ version with its date and start a fresh empty `[Unreleased]` above it.
1111

1212
## [Unreleased]
1313

14+
### Added
15+
16+
- An opt-in Memory toggle in Settings → Experimental lets the Qoder CLI save
17+
and reload reusable information across conversations. Memories live in the
18+
Qoder CLI memory directory and are shared with the terminal CLI; toggling
19+
it restarts the running session once.
20+
1421
## [1.0.12] - 2026-09-20
1522

1623
### Added

‎src/core/types/settings.ts‎

Lines changed: 6 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -111,6 +111,12 @@ export interface QoderSettings {
111111
edition: QoderCliEdition;
112112
loadUserSettings: boolean;
113113
enableBangBash: boolean;
114+
/**
115+
* Let the CLI generate and consume memory across conversations. Memories
116+
* live in the Qoder CLI memory directory and are shared with the terminal
117+
* CLI.
118+
*/
119+
enableMemory: boolean;
114120
discoveredModels: Array<{
115121
value: string;
116122
displayName: string;

‎src/features/settings/settings-tab.ts‎

Lines changed: 19 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -378,6 +378,15 @@ export class QoderianSettingTab extends PluginSettingTab {
378378
return () => { injected?.remove(); };
379379
},
380380
},
381+
{
382+
name: t('settings.enableMemory.name'),
383+
desc: t('settings.enableMemory.desc'),
384+
control: {
385+
type: 'toggle',
386+
key: 'enableMemory',
387+
defaultValue: qoderSettings.enableMemory,
388+
},
389+
},
381390
],
382391
},
383392
];
@@ -392,6 +401,10 @@ export class QoderianSettingTab extends PluginSettingTab {
392401
const settingsBag = this.plugin.settings as unknown as Record<string, unknown>;
393402
return getQoderSettings(settingsBag).loadUserSettings;
394403
}
404+
if (key === 'enableMemory') {
405+
const settingsBag = this.plugin.settings as unknown as Record<string, unknown>;
406+
return getQoderSettings(settingsBag).enableMemory;
407+
}
395408
if (key === 'titleGenerationModel') {
396409
return this.plugin.settings.titleGenerationModel || 'auto';
397410
}
@@ -417,6 +430,12 @@ export class QoderianSettingTab extends PluginSettingTab {
417430
return this.plugin.saveSettings();
418431
}
419432

433+
if (key === 'enableMemory') {
434+
const settingsBag = this.plugin.settings as unknown as Record<string, unknown>;
435+
updateQoderSettings(settingsBag, { enableMemory: Boolean(value) });
436+
return this.plugin.saveSettings();
437+
}
438+
420439
return this.persistControlValue(key, value);
421440
}
422441
// Unreachable: Obsidian < 1.13 never calls setControlValue.

‎src/features/settings/ui/qoder-settings-tab.ts‎

Lines changed: 12 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -392,4 +392,16 @@ export function renderQoderSettingsTab(container: HTMLElement, context: QoderSet
392392
.setName(t('settings.enableBangBash.name'))
393393
.setDesc(t('settings.enableBangBash.desc'));
394394
renderBangBashControl(bangBashSetting, container, context);
395+
396+
new Setting(container)
397+
.setName(t('settings.enableMemory.name'))
398+
.setDesc(t('settings.enableMemory.desc'))
399+
.addToggle((toggle) =>
400+
toggle
401+
.setValue(qoderSettings.enableMemory)
402+
.onChange(async (value) => {
403+
updateQoderSettings(settingsBag, { enableMemory: value });
404+
await context.plugin.saveSettings();
405+
})
406+
);
395407
}

‎src/i18n/locales/de.json‎

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -318,6 +318,10 @@
318318
"name": "Benutzer-Qoder-Einstellungen laden",
319319
"desc": "Lädt ~/.qoder/settings.json. Wenn aktiviert, können Benutzer-Qoder-CLI-Berechtigungsregeln den Sicherheitsmodus umgehen."
320320
},
321+
"enableMemory": {
322+
"name": "Gedächtnis",
323+
"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."
324+
},
321325
"qoderSafeMode": {
322326
"name": "Berechtigungen im sicheren Modus",
323327
"desc": "Berechtigungsverhalten bei aktiviertem sicheren Modus.",

‎src/i18n/locales/en.json‎

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -318,6 +318,10 @@
318318
"name": "Load user Qoder settings",
319319
"desc": "Load ~/.qoder/settings.json. When enabled, user's Qoder CLI permission rules may bypass Safe mode."
320320
},
321+
"enableMemory": {
322+
"name": "Memory",
323+
"desc": "Automatically save and load reusable information across conversations. Memories live in your Qoder CLI memory directory and are shared with the terminal CLI."
324+
},
321325
"qoderSafeMode": {
322326
"name": "Safe mode permissions",
323327
"desc": "Permission behavior used while the Safe toggle is on.",

‎src/i18n/locales/es.json‎

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -318,6 +318,10 @@
318318
"name": "Cargar configuración de usuario Qoder",
319319
"desc": "Carga ~/.qoder/settings.json. Cuando está habilitado, las reglas de permisos del usuario pueden eludir el modo seguro."
320320
},
321+
"enableMemory": {
322+
"name": "Memoria",
323+
"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."
324+
},
321325
"qoderSafeMode": {
322326
"name": "Permisos del modo seguro",
323327
"desc": "Comportamiento de permisos cuando el modo seguro está activado.",

‎src/i18n/locales/fr.json‎

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -318,6 +318,10 @@
318318
"name": "Charger les paramètres utilisateur Qoder",
319319
"desc": "Charge ~/.qoder/settings.json. Lorsqu'activé, les règles de permission de l'utilisateur peuvent contourner le mode sécurisé."
320320
},
321+
"enableMemory": {
322+
"name": "Mémoire",
323+
"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."
324+
},
321325
"qoderSafeMode": {
322326
"name": "Autorisations du mode sécurisé",
323327
"desc": "Comportement des autorisations lorsque le mode sécurisé est activé.",

‎src/i18n/locales/ja.json‎

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -318,6 +318,10 @@
318318
"name": "ユーザーQoder設定を読み込む",
319319
"desc": "~/.qoder/settings.json を読み込みます。有効にすると、ユーザーの Qoder CLI 許可ルールがセキュリティモードをバイパスする可能性があります。"
320320
},
321+
"enableMemory": {
322+
"name": "メモリ",
323+
"desc": "会話をまたいで再利用できる情報を自動的に保存・読み込みします。メモリは Qoder CLI のメモリディレクトリに保存され、ターミナル CLI と共有されます。"
324+
},
321325
"qoderSafeMode": {
322326
"name": "セーフモードの権限",
323327
"desc": "セーフモードが有効なときに使用する権限動作です。",

‎src/i18n/locales/ko.json‎

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -318,6 +318,10 @@
318318
"name": "사용자 Qoder 설정 로드",
319319
"desc": "~/.qoder/settings.json을 로드합니다. 활성화하면 사용자의 Qoder CLI 허용 규칙이 보안 모드를 우회할 수 있습니다."
320320
},
321+
"enableMemory": {
322+
"name": "메모리",
323+
"desc": "대화를 넘어 재사용할 수 있는 정보를 자동으로 저장하고 불러옵니다. 메모리는 Qoder CLI 메모리 디렉터리에 저장되며 터미널 CLI와 공유됩니다."
324+
},
321325
"qoderSafeMode": {
322326
"name": "안전 모드 권한",
323327
"desc": "안전 모드가 켜져 있을 때 사용할 권한 동작입니다.",

0 commit comments

Comments
 (0)