@@ -6,6 +6,8 @@ import type { LocalAgentProvider } from "./local-agent-profiles.js";
66import { removeDevspaceNodeModulesBinFromPath } from "./local-agent-path.js" ;
77import {
88 createCodexSdkLocalAgentRuntime ,
9+ isNativeSchemaUnsupportedFailure ,
10+ ProviderSchemaUnsupportedError ,
911 type LocalAgentRunInput ,
1012 type LocalAgentRunResult ,
1113} from "./local-agent-runtime.js" ;
@@ -59,47 +61,56 @@ class ClaudeLocalAgentAdapter implements LocalAgentAdapter {
5961 async run ( input : LocalAgentRunInput ) : Promise < LocalAgentRunResult > {
6062 const { query } = await import ( "@anthropic-ai/claude-agent-sdk" ) ;
6163 const claudeExecutable = process . env . CLAUDE_COMMAND ?? resolveExecutable ( "claude" ) ;
62- const messages = query ( {
63- prompt : input . prompt ,
64- options : {
65- cwd : input . workspace ,
66- model : input . model ,
67- ...( input . effort ? { thinking : { type : "adaptive" } as const , effort : input . effort as EffortLevel } : { } ) ,
68- resume : input . providerSessionId ,
69- permissionMode : "bypassPermissions" ,
70- allowDangerouslySkipPermissions : true ,
71- env : claudeCommandEnvironment ( process . env ) ,
72- ...( claudeExecutable ? { pathToClaudeCodeExecutable : claudeExecutable } : { } ) ,
73- ...claudeOutputFormatOptions ( input . schema ) ,
74- } ,
75- } ) ;
64+ try {
65+ const messages = query ( {
66+ prompt : input . prompt ,
67+ options : {
68+ cwd : input . workspace ,
69+ model : input . model ,
70+ ...( input . effort
71+ ? { thinking : { type : "adaptive" } as const , effort : input . effort as EffortLevel }
72+ : { } ) ,
73+ resume : input . providerSessionId ,
74+ permissionMode : "bypassPermissions" ,
75+ allowDangerouslySkipPermissions : true ,
76+ env : claudeCommandEnvironment ( process . env ) ,
77+ ...( claudeExecutable ? { pathToClaudeCodeExecutable : claudeExecutable } : { } ) ,
78+ ...claudeOutputFormatOptions ( input . schema ) ,
79+ } ,
80+ } ) ;
7681
77- let providerSessionId = input . providerSessionId ?? null ;
78- let finalResponse = "" ;
79- let structured : unknown | undefined ;
80- const items : unknown [ ] = [ ] ;
81- for await ( const message of messages ) {
82- items . push ( message ) ;
83- const record = message as Record < string , unknown > ;
84- if ( typeof record . session_id === "string" ) providerSessionId = record . session_id ;
85- if ( record . type !== "result" ) continue ;
86- const resultError = claudeResultError ( record ) ;
87- if ( resultError ) throw new Error ( resultError ) ;
88- const extracted = extractClaudeResultPayload ( record ) ;
89- if ( extracted ) {
90- finalResponse = extracted . finalResponse ;
91- structured = extracted . structured ;
82+ let providerSessionId = input . providerSessionId ?? null ;
83+ let finalResponse = "" ;
84+ let structured : unknown | undefined ;
85+ const items : unknown [ ] = [ ] ;
86+ for await ( const message of messages ) {
87+ items . push ( message ) ;
88+ const record = message as Record < string , unknown > ;
89+ if ( typeof record . session_id === "string" ) providerSessionId = record . session_id ;
90+ if ( record . type !== "result" ) continue ;
91+ const resultError = claudeResultError ( record ) ;
92+ if ( resultError ) throw new Error ( resultError ) ;
93+ const extracted = extractClaudeResultPayload ( record ) ;
94+ if ( extracted ) {
95+ finalResponse = extracted . finalResponse ;
96+ structured = extracted . structured ;
97+ }
9298 }
93- }
9499
95- finalResponse = requireFinalResponse ( "Claude" , finalResponse ) ;
96- return {
97- provider : this . provider ,
98- providerSessionId,
99- finalResponse,
100- items,
101- ...( structured !== undefined ? { structured } : { } ) ,
102- } ;
100+ finalResponse = requireFinalResponse ( "Claude" , finalResponse ) ;
101+ return {
102+ provider : this . provider ,
103+ providerSessionId,
104+ finalResponse,
105+ items,
106+ ...( structured !== undefined ? { structured } : { } ) ,
107+ } ;
108+ } catch ( error ) {
109+ if ( input . schema && isNativeSchemaUnsupportedFailure ( error ) ) {
110+ throw new ProviderSchemaUnsupportedError ( this . provider , error ) ;
111+ }
112+ throw error ;
113+ }
103114 }
104115}
105116
0 commit comments