From 14e8d7019aec7a55b6be4cb13d486f07bf9d52c5 Mon Sep 17 00:00:00 2001 From: hailin Date: Mon, 23 Feb 2026 06:18:04 -0800 Subject: [PATCH] fix: use dynamic import helper for ESM-only claude-agent-sdk tsc with module=commonjs converts `await import()` to require(), which breaks ESM-only packages. Use Function('return import()') workaround to preserve native dynamic import at runtime. Co-Authored-By: Claude Opus 4.6 --- .../claude-agent-sdk/claude-agent-sdk-engine.ts | 10 +++++++--- 1 file changed, 7 insertions(+), 3 deletions(-) diff --git a/packages/services/agent-service/src/infrastructure/engines/claude-agent-sdk/claude-agent-sdk-engine.ts b/packages/services/agent-service/src/infrastructure/engines/claude-agent-sdk/claude-agent-sdk-engine.ts index d2def58..9bdc502 100644 --- a/packages/services/agent-service/src/infrastructure/engines/claude-agent-sdk/claude-agent-sdk-engine.ts +++ b/packages/services/agent-service/src/infrastructure/engines/claude-agent-sdk/claude-agent-sdk-engine.ts @@ -26,6 +26,10 @@ import { AllowedToolsResolverService } from '../../../domain/services/allowed-to import { TenantContextService } from '@it0/common'; import { ApprovalGate } from './approval-gate'; +// Dynamic import helper that survives tsc commonjs compilation +// (tsc converts `await import()` → require() which breaks ESM-only packages) +const dynamicImport = new Function('specifier', 'return import(specifier)') as (specifier: string) => Promise; + /** Tracks an active SDK session for cancellation and approval resolution. */ interface ActiveSession { abort: AbortController; @@ -92,7 +96,7 @@ export class ClaudeAgentSdkEngine implements AgentEnginePort { }; try { - const { query } = await import('@anthropic-ai/claude-agent-sdk'); + const { query } = await dynamicImport('@anthropic-ai/claude-agent-sdk'); const sdkQuery = query({ prompt: params.prompt, @@ -259,7 +263,7 @@ export class ClaudeAgentSdkEngine implements AgentEnginePort { this.activeSessions.set(sessionId, { abort: abortController, gate, sdkSessionId }); try { - const { query } = await import('@anthropic-ai/claude-agent-sdk'); + const { query } = await dynamicImport('@anthropic-ai/claude-agent-sdk'); const sdkQuery = query({ prompt: message, @@ -303,7 +307,7 @@ export class ClaudeAgentSdkEngine implements AgentEnginePort { async healthCheck(): Promise { try { - await import('@anthropic-ai/claude-agent-sdk'); + await dynamicImport('@anthropic-ai/claude-agent-sdk'); return true; } catch { return false;