diff --git a/src/gateway/env.test.ts b/src/gateway/env.test.ts index 29f033db..ae3f2c4b 100644 --- a/src/gateway/env.test.ts +++ b/src/gateway/env.test.ts @@ -91,6 +91,18 @@ describe('buildEnvVars', () => { expect(result.CLAWDBOT_GATEWAY_TOKEN).toBe('my-token'); }); + it('skips gateway token when DEV_MODE is true', () => { + const env = createMockEnv({ DEV_MODE: 'true', MOLTBOT_GATEWAY_TOKEN: 'my-token' }); + const result = buildEnvVars(env); + expect(result.CLAWDBOT_GATEWAY_TOKEN).toBeUndefined(); + }); + + it('skips gateway token when E2E_TEST_MODE is true', () => { + const env = createMockEnv({ E2E_TEST_MODE: 'true', MOLTBOT_GATEWAY_TOKEN: 'my-token' }); + const result = buildEnvVars(env); + expect(result.CLAWDBOT_GATEWAY_TOKEN).toBeUndefined(); + }); + it('includes all channel tokens when set', () => { const env = createMockEnv({ TELEGRAM_BOT_TOKEN: 'tg-token', diff --git a/src/gateway/env.ts b/src/gateway/env.ts index a57e781b..3206e433 100644 --- a/src/gateway/env.ts +++ b/src/gateway/env.ts @@ -44,7 +44,10 @@ export function buildEnvVars(env: MoltbotEnv): Record { envVars.ANTHROPIC_BASE_URL = env.ANTHROPIC_BASE_URL; } // Map MOLTBOT_GATEWAY_TOKEN to CLAWDBOT_GATEWAY_TOKEN (container expects this name) - if (env.MOLTBOT_GATEWAY_TOKEN) envVars.CLAWDBOT_GATEWAY_TOKEN = env.MOLTBOT_GATEWAY_TOKEN; + // Skip in DEV_MODE so local dev uses device pairing / insecure auth flow. + if (env.MOLTBOT_GATEWAY_TOKEN && env.DEV_MODE !== 'true' && env.E2E_TEST_MODE !== 'true') { + envVars.CLAWDBOT_GATEWAY_TOKEN = env.MOLTBOT_GATEWAY_TOKEN; + } if (env.DEV_MODE) envVars.CLAWDBOT_DEV_MODE = env.DEV_MODE; // Pass DEV_MODE as CLAWDBOT_DEV_MODE to container if (env.CLAWDBOT_BIND_MODE) envVars.CLAWDBOT_BIND_MODE = env.CLAWDBOT_BIND_MODE; if (env.TELEGRAM_BOT_TOKEN) envVars.TELEGRAM_BOT_TOKEN = env.TELEGRAM_BOT_TOKEN; diff --git a/src/index.ts b/src/index.ts index ed08910c..40a70a7d 100644 --- a/src/index.ts +++ b/src/index.ts @@ -57,7 +57,8 @@ function validateRequiredEnv(env: MoltbotEnv): string[] { const missing: string[] = []; const isTestMode = env.DEV_MODE === 'true' || env.E2E_TEST_MODE === 'true'; - if (!env.MOLTBOT_GATEWAY_TOKEN) { + // Environment aware validation check + if (!env.DEV_MODE && !env.MOLTBOT_GATEWAY_TOKEN) { missing.push('MOLTBOT_GATEWAY_TOKEN'); }