From 46b4fca133957378aa365ba627e7feeacf0983f8 Mon Sep 17 00:00:00 2001 From: DavertMik Date: Sat, 11 Jul 2026 14:31:01 +0300 Subject: [PATCH] fix: honor --incognito by disabling the experience tracker MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit `explorbot --incognito` ("Run without recording experiences") flowed CLI -> ExplorBot -> Explorer, and Explorer called `new StateManager({ incognito })` — but StateManager's constructor took no parameters, so the flag was silently dropped and the ExperienceTracker was always enabled. Incognito runs read and wrote ./experience like normal runs. Thread `incognito` into the StateManager constructor and pass `{ disabled: options.incognito }` to ExperienceTracker (which already supports `disabled`). Argumentless constructions keep today's enabled behavior via `options.disabled ?? false`. Co-Authored-By: Claude Opus 4.8 --- src/state-manager.ts | 4 ++-- tests/unit/state-manager.test.ts | 9 +++++++++ 2 files changed, 11 insertions(+), 2 deletions(-) diff --git a/src/state-manager.ts b/src/state-manager.ts index b1dba9d..87f3dc2 100644 --- a/src/state-manager.ts +++ b/src/state-manager.ts @@ -87,8 +87,8 @@ export class StateManager { private knowledgeDir: string; private nextStateId = 1; - constructor() { - this.experienceTracker = new ExperienceTracker(); + constructor(options: { incognito?: boolean } = {}) { + this.experienceTracker = new ExperienceTracker({ disabled: options.incognito }); const configParser = ConfigParser.getInstance(); const config = configParser.getConfig(); const configPath = configParser.getConfigPath(); diff --git a/tests/unit/state-manager.test.ts b/tests/unit/state-manager.test.ts index fd3bce7..48cdd80 100644 --- a/tests/unit/state-manager.test.ts +++ b/tests/unit/state-manager.test.ts @@ -40,6 +40,15 @@ describe('StateManager', () => { it('should have zero listeners initially', () => { expect(stateManager.getListenerCount()).toBe(0); }); + + it('disables the experience tracker in incognito mode', () => { + const incognito = new StateManager({ incognito: true }); + expect((incognito.getExperienceTracker() as any).disabled).toBe(true); + }); + + it('leaves the experience tracker enabled by default', () => { + expect((stateManager.getExperienceTracker() as any).disabled).toBe(false); + }); }); describe('updateState', () => {