newcraw 1.0.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/LICENSE +201 -0
- package/README.md +692 -0
- package/README.zh-CN.md +338 -0
- package/cli-acp.js +82 -0
- package/cli.js +105 -0
- package/dist/REPL-74GZVSMY.js +42 -0
- package/dist/REPL-74GZVSMY.js.map +7 -0
- package/dist/acp-A55ZRIPP.js +1357 -0
- package/dist/acp-A55ZRIPP.js.map +7 -0
- package/dist/agentsValidate-XWFIEHJ2.js +373 -0
- package/dist/agentsValidate-XWFIEHJ2.js.map +7 -0
- package/dist/ask-4ACYU23S.js +126 -0
- package/dist/ask-4ACYU23S.js.map +7 -0
- package/dist/autoUpdater-O2WHHSGP.js +17 -0
- package/dist/autoUpdater-O2WHHSGP.js.map +7 -0
- package/dist/chunk-2UO3BFZH.js +16 -0
- package/dist/chunk-2UO3BFZH.js.map +7 -0
- package/dist/chunk-3C73U2IU.js +2970 -0
- package/dist/chunk-3C73U2IU.js.map +7 -0
- package/dist/chunk-3U5X4VWP.js +2613 -0
- package/dist/chunk-3U5X4VWP.js.map +7 -0
- package/dist/chunk-755HIAI3.js +95 -0
- package/dist/chunk-755HIAI3.js.map +7 -0
- package/dist/chunk-7ZFLZNOW.js +21 -0
- package/dist/chunk-7ZFLZNOW.js.map +7 -0
- package/dist/chunk-A44DGORI.js +49 -0
- package/dist/chunk-A44DGORI.js.map +7 -0
- package/dist/chunk-AXWJI6N5.js +11 -0
- package/dist/chunk-AXWJI6N5.js.map +7 -0
- package/dist/chunk-B26ZUMJI.js +515 -0
- package/dist/chunk-B26ZUMJI.js.map +7 -0
- package/dist/chunk-BHNQGSLO.js +96 -0
- package/dist/chunk-BHNQGSLO.js.map +7 -0
- package/dist/chunk-BUI6KGVA.js +164 -0
- package/dist/chunk-BUI6KGVA.js.map +7 -0
- package/dist/chunk-DY5D4SS7.js +936 -0
- package/dist/chunk-DY5D4SS7.js.map +7 -0
- package/dist/chunk-EENI5HG7.js +498 -0
- package/dist/chunk-EENI5HG7.js.map +7 -0
- package/dist/chunk-EXPWPWA4.js +654 -0
- package/dist/chunk-EXPWPWA4.js.map +7 -0
- package/dist/chunk-FHOCKJOW.js +766 -0
- package/dist/chunk-FHOCKJOW.js.map +7 -0
- package/dist/chunk-GPKVTIYJ.js +191 -0
- package/dist/chunk-GPKVTIYJ.js.map +7 -0
- package/dist/chunk-H5BCUDEN.js +794 -0
- package/dist/chunk-H5BCUDEN.js.map +7 -0
- package/dist/chunk-INJSFEKL.js +47 -0
- package/dist/chunk-INJSFEKL.js.map +7 -0
- package/dist/chunk-JX5ZQYTQ.js +12 -0
- package/dist/chunk-JX5ZQYTQ.js.map +7 -0
- package/dist/chunk-KQSHIOZK.js +24 -0
- package/dist/chunk-KQSHIOZK.js.map +7 -0
- package/dist/chunk-L6WKZEK4.js +1609 -0
- package/dist/chunk-L6WKZEK4.js.map +7 -0
- package/dist/chunk-LC4CL3YJ.js +124 -0
- package/dist/chunk-LC4CL3YJ.js.map +7 -0
- package/dist/chunk-MXSB7IOZ.js +1097 -0
- package/dist/chunk-MXSB7IOZ.js.map +7 -0
- package/dist/chunk-N5OHRWG2.js +249 -0
- package/dist/chunk-N5OHRWG2.js.map +7 -0
- package/dist/chunk-NQE3GGE3.js +19 -0
- package/dist/chunk-NQE3GGE3.js.map +7 -0
- package/dist/chunk-QF6YDTME.js +139 -0
- package/dist/chunk-QF6YDTME.js.map +7 -0
- package/dist/chunk-QTX7AJFQ.js +240 -0
- package/dist/chunk-QTX7AJFQ.js.map +7 -0
- package/dist/chunk-S3ZAJPYZ.js +515 -0
- package/dist/chunk-S3ZAJPYZ.js.map +7 -0
- package/dist/chunk-S5Y5IF2H.js +735 -0
- package/dist/chunk-S5Y5IF2H.js.map +7 -0
- package/dist/chunk-SBE6Y327.js +836 -0
- package/dist/chunk-SBE6Y327.js.map +7 -0
- package/dist/chunk-T25Z3JMG.js +17 -0
- package/dist/chunk-T25Z3JMG.js.map +7 -0
- package/dist/chunk-T6VKT5FR.js +196 -0
- package/dist/chunk-T6VKT5FR.js.map +7 -0
- package/dist/chunk-TSGGSPYD.js +151 -0
- package/dist/chunk-TSGGSPYD.js.map +7 -0
- package/dist/chunk-TY3CCSAT.js +24 -0
- package/dist/chunk-TY3CCSAT.js.map +7 -0
- package/dist/chunk-U224EQOS.js +34 -0
- package/dist/chunk-U224EQOS.js.map +7 -0
- package/dist/chunk-U7S4MEYP.js +95 -0
- package/dist/chunk-U7S4MEYP.js.map +7 -0
- package/dist/chunk-ULVAAZ2U.js +30517 -0
- package/dist/chunk-ULVAAZ2U.js.map +7 -0
- package/dist/chunk-WWLFALT7.js +128 -0
- package/dist/chunk-WWLFALT7.js.map +7 -0
- package/dist/chunk-XJQATPV7.js +23 -0
- package/dist/chunk-XJQATPV7.js.map +7 -0
- package/dist/chunk-XMGUQHMF.js +72 -0
- package/dist/chunk-XMGUQHMF.js.map +7 -0
- package/dist/chunk-XOMW5QTV.js +472 -0
- package/dist/chunk-XOMW5QTV.js.map +7 -0
- package/dist/chunk-Y7VZUSIM.js +1256 -0
- package/dist/chunk-Y7VZUSIM.js.map +7 -0
- package/dist/chunk-YVNBXMIP.js +511 -0
- package/dist/chunk-YVNBXMIP.js.map +7 -0
- package/dist/chunk-YYPJWXSA.js +145 -0
- package/dist/chunk-YYPJWXSA.js.map +7 -0
- package/dist/cli-BW34VKCN.js +3917 -0
- package/dist/cli-BW34VKCN.js.map +7 -0
- package/dist/commands-4CNZZBTE.js +46 -0
- package/dist/commands-4CNZZBTE.js.map +7 -0
- package/dist/config-XKRCXCSS.js +81 -0
- package/dist/config-XKRCXCSS.js.map +7 -0
- package/dist/context-T5CR3RP6.js +30 -0
- package/dist/context-T5CR3RP6.js.map +7 -0
- package/dist/costTracker-2G3ZI2JF.js +19 -0
- package/dist/costTracker-2G3ZI2JF.js.map +7 -0
- package/dist/customCommands-OCUMXZDN.js +25 -0
- package/dist/customCommands-OCUMXZDN.js.map +7 -0
- package/dist/env-DYDNFB4D.js +22 -0
- package/dist/env-DYDNFB4D.js.map +7 -0
- package/dist/index.js +34 -0
- package/dist/index.js.map +7 -0
- package/dist/kodeAgentSessionId-KTGFX2BE.js +13 -0
- package/dist/kodeAgentSessionId-KTGFX2BE.js.map +7 -0
- package/dist/kodeAgentSessionLoad-ZKR2VGHO.js +18 -0
- package/dist/kodeAgentSessionLoad-ZKR2VGHO.js.map +7 -0
- package/dist/kodeAgentSessionResume-NFZCTIBZ.js +16 -0
- package/dist/kodeAgentSessionResume-NFZCTIBZ.js.map +7 -0
- package/dist/kodeAgentStreamJson-VIXFTYL5.js +13 -0
- package/dist/kodeAgentStreamJson-VIXFTYL5.js.map +7 -0
- package/dist/kodeAgentStreamJsonSession-6CKTK6AF.js +131 -0
- package/dist/kodeAgentStreamJsonSession-6CKTK6AF.js.map +7 -0
- package/dist/kodeAgentStructuredStdio-SI5C7AAD.js +10 -0
- package/dist/kodeAgentStructuredStdio-SI5C7AAD.js.map +7 -0
- package/dist/kodeHooks-5RXJRDCY.js +36 -0
- package/dist/kodeHooks-5RXJRDCY.js.map +7 -0
- package/dist/llm-QJA3QMXR.js +3118 -0
- package/dist/llm-QJA3QMXR.js.map +7 -0
- package/dist/llmLazy-VCEV22DK.js +15 -0
- package/dist/llmLazy-VCEV22DK.js.map +7 -0
- package/dist/loader-CKNYMPCZ.js +28 -0
- package/dist/loader-CKNYMPCZ.js.map +7 -0
- package/dist/mcp-2SZTOKZX.js +49 -0
- package/dist/mcp-2SZTOKZX.js.map +7 -0
- package/dist/mentionProcessor-O7NWOH6S.js +211 -0
- package/dist/mentionProcessor-O7NWOH6S.js.map +7 -0
- package/dist/messages-PRKIHXMK.js +65 -0
- package/dist/messages-PRKIHXMK.js.map +7 -0
- package/dist/model-WG6RA25G.js +30 -0
- package/dist/model-WG6RA25G.js.map +7 -0
- package/dist/openai-VQLYFQ6B.js +29 -0
- package/dist/openai-VQLYFQ6B.js.map +7 -0
- package/dist/outputStyles-VQ57E3B6.js +28 -0
- package/dist/outputStyles-VQ57E3B6.js.map +7 -0
- package/dist/package.json +4 -0
- package/dist/pluginRuntime-NWOLU73K.js +218 -0
- package/dist/pluginRuntime-NWOLU73K.js.map +7 -0
- package/dist/pluginValidation-R7B6QQ6T.js +17 -0
- package/dist/pluginValidation-R7B6QQ6T.js.map +7 -0
- package/dist/prompts-W4V4Y67M.js +48 -0
- package/dist/prompts-W4V4Y67M.js.map +7 -0
- package/dist/query-GFFKKURO.js +50 -0
- package/dist/query-GFFKKURO.js.map +7 -0
- package/dist/responsesStreaming-2AIT6GHG.js +10 -0
- package/dist/responsesStreaming-2AIT6GHG.js.map +7 -0
- package/dist/ripgrep-SVBVC46X.js +17 -0
- package/dist/ripgrep-SVBVC46X.js.map +7 -0
- package/dist/skillMarketplace-5Z7Y6FTD.js +37 -0
- package/dist/skillMarketplace-5Z7Y6FTD.js.map +7 -0
- package/dist/state-X3R7BV7A.js +16 -0
- package/dist/state-X3R7BV7A.js.map +7 -0
- package/dist/theme-4VA64EWF.js +14 -0
- package/dist/theme-4VA64EWF.js.map +7 -0
- package/dist/toolPermissionContext-I3IXPVED.js +17 -0
- package/dist/toolPermissionContext-I3IXPVED.js.map +7 -0
- package/dist/toolPermissionSettings-35DJQEKG.js +18 -0
- package/dist/toolPermissionSettings-35DJQEKG.js.map +7 -0
- package/dist/tools-USOBTPOI.js +47 -0
- package/dist/tools-USOBTPOI.js.map +7 -0
- package/dist/userInput-NID2UYXG.js +312 -0
- package/dist/userInput-NID2UYXG.js.map +7 -0
- package/dist/uuid-VA3KVASX.js +9 -0
- package/dist/uuid-VA3KVASX.js.map +7 -0
- package/dist/yoga.wasm +0 -0
- package/package.json +135 -0
- package/scripts/binary-utils.cjs +61 -0
- package/scripts/cli-acp-wrapper.cjs +82 -0
- package/scripts/cli-wrapper.cjs +105 -0
- package/scripts/postinstall.js +144 -0
- package/web/dist/assets/index-COAJqX1Z.css +1 -0
- package/web/dist/assets/index-CzS_4LmC.js +179 -0
- package/web/dist/index.html +14 -0
- package/yoga.wasm +0 -0
|
@@ -0,0 +1,7 @@
|
|
|
1
|
+
{
|
|
2
|
+
"version": 3,
|
|
3
|
+
"sources": ["../src/services/ai/llm.ts", "../src/utils/system/http.ts", "../src/services/system/vcr.ts", "../src/services/ai/adapters/base.ts", "../src/services/ai/adapters/openaiAdapter.ts", "../src/services/ai/adapters/responsesAPI.ts", "../src/services/ai/adapters/chatCompletions.ts", "../src/constants/modelCapabilities.ts", "../src/services/ai/modelAdapterFactory.ts", "../src/services/ai/responseStateManager.ts", "../src/utils/tooling/toolUsePartialJson.ts", "../src/utils/model/openaiMessageConversion.ts"],
|
|
4
|
+
"sourcesContent": ["import '@anthropic-ai/sdk/shims/node'\r\nimport Anthropic, { APIConnectionError, APIError } from '@anthropic-ai/sdk'\r\nimport { StreamingEvent } from './adapters/base'\r\nimport { AnthropicBedrock } from '@anthropic-ai/bedrock-sdk'\r\nimport { AnthropicVertex } from '@anthropic-ai/vertex-sdk'\r\nimport type { BetaUsage } from '@anthropic-ai/sdk/resources/beta/messages/messages.mjs'\r\nimport chalk from 'chalk'\r\nimport { createHash, randomUUID, UUID } from 'crypto'\r\nimport 'dotenv/config'\r\n\r\nimport { addToTotalCost } from '@costTracker'\r\nimport models from '@constants/models'\r\nimport type { AssistantMessage, UserMessage } from '@query'\r\nimport { Tool, getToolDescription } from '@tool'\r\nimport {\r\n getAnthropicApiKey,\r\n getGlobalConfig,\r\n ModelProfile,\r\n} from '@utils/config'\r\nimport { logError } from '@utils/log'\r\nimport { USER_AGENT } from '@utils/system/http'\r\nimport {\r\n createAssistantAPIErrorMessage,\r\n normalizeContentFromAPI,\r\n} from '@utils/messages'\r\nimport { countTokens } from '@utils/model/tokens'\r\nimport { setRequestStatus } from '@utils/session/requestStatus'\r\nimport { withVCR } from '@services/vcr'\r\nimport {\r\n debug as debugLogger,\r\n markPhase,\r\n getCurrentRequest,\r\n logLLMInteraction,\r\n logSystemPromptConstruction,\r\n logErrorWithDiagnosis,\r\n} from '@utils/log/debugLogger'\r\nimport {\r\n MessageContextManager,\r\n createRetentionStrategy,\r\n} from '@utils/session/messageContextManager'\r\nimport { getModelManager } from '@utils/model'\r\nimport { zodToJsonSchema } from 'zod-to-json-schema'\r\nimport type { BetaMessageStream } from '@anthropic-ai/sdk/lib/BetaMessageStream.mjs'\r\nimport { ModelAdapterFactory } from './modelAdapterFactory'\r\nimport { UnifiedRequestParams } from '@newcraw-types/modelCapabilities'\r\nimport { responseStateManager, getConversationId } from './responseStateManager'\r\nimport type { ToolUseContext } from '@tool'\r\nimport type {\r\n Message as APIMessage,\r\n MessageParam,\r\n TextBlockParam,\r\n} from '@anthropic-ai/sdk/resources/index.mjs'\r\nimport { USE_BEDROCK, USE_VERTEX } from '@utils/model'\r\nimport { getCLISyspromptPrefix } from '@constants/prompts'\r\nimport { getVertexRegionForModel } from '@utils/model'\r\nimport OpenAI from 'openai'\r\nimport type { ChatCompletionStream } from 'openai/lib/ChatCompletionStream'\r\nimport { ContentBlock } from '@anthropic-ai/sdk/resources/messages/messages'\r\nimport { nanoid } from 'nanoid'\r\nimport {\r\n getCompletionWithProfile,\r\n getGPT5CompletionWithProfile,\r\n} from './openai'\r\nimport { getReasoningEffort } from '@utils/model/thinking'\r\nimport { parseToolUsePartialJsonOrThrow } from '@utils/tooling/toolUsePartialJson'\r\nimport { convertAnthropicMessagesToOpenAIMessages as convertAnthropicMessagesToOpenAIMessagesUtil } from '@utils/model/openaiMessageConversion'\r\nimport { generateKodeContext, refreshKodeContext } from '@services/newcrawContext'\r\nimport {\r\n API_ERROR_MESSAGE_PREFIX,\r\n CREDIT_BALANCE_TOO_LOW_ERROR_MESSAGE,\r\n INVALID_API_KEY_ERROR_MESSAGE,\r\n MAIN_QUERY_TEMPERATURE,\r\n NO_CONTENT_MESSAGE,\r\n PROMPT_TOO_LONG_ERROR_MESSAGE,\r\n} from './llmConstants'\r\n\r\nfunction isGPT5Model(modelName: string): boolean {\r\n return modelName.startsWith('gpt-5')\r\n}\r\n\r\nfunction getModelConfigForDebug(model: string): {\r\n modelName: string\r\n provider: string\r\n apiKeyStatus: 'configured' | 'missing' | 'invalid'\r\n baseURL?: string\r\n maxTokens?: number\r\n reasoningEffort?: string\r\n isStream?: boolean\r\n temperature?: number\r\n} {\r\n const config = getGlobalConfig()\r\n const modelManager = getModelManager()\r\n\r\n const modelProfile = modelManager.getModel('main')\r\n\r\n let apiKeyStatus: 'configured' | 'missing' | 'invalid' = 'missing'\r\n let baseURL: string | undefined\r\n let maxTokens: number | undefined\r\n let reasoningEffort: string | undefined\r\n\r\n if (modelProfile) {\r\n apiKeyStatus = modelProfile.apiKey ? 'configured' : 'missing'\r\n baseURL = modelProfile.baseURL\r\n maxTokens = modelProfile.maxTokens\r\n reasoningEffort = modelProfile.reasoningEffort\r\n } else {\r\n apiKeyStatus = 'missing'\r\n maxTokens = undefined\r\n reasoningEffort = undefined\r\n }\r\n\r\n return {\r\n modelName: model,\r\n provider: modelProfile?.provider || config.primaryProvider || 'anthropic',\r\n apiKeyStatus,\r\n baseURL,\r\n maxTokens,\r\n reasoningEffort,\r\n isStream: config.stream || false,\r\n temperature: MAIN_QUERY_TEMPERATURE,\r\n }\r\n}\r\n\r\nexport { generateKodeContext, refreshKodeContext }\r\n\r\ninterface StreamResponse extends APIMessage {\r\n ttftMs?: number\r\n}\r\n\r\nexport {\r\n API_ERROR_MESSAGE_PREFIX,\r\n PROMPT_TOO_LONG_ERROR_MESSAGE,\r\n CREDIT_BALANCE_TOO_LOW_ERROR_MESSAGE,\r\n INVALID_API_KEY_ERROR_MESSAGE,\r\n NO_CONTENT_MESSAGE,\r\n MAIN_QUERY_TEMPERATURE,\r\n}\r\nconst PROMPT_CACHING_ENABLED = !process.env.DISABLE_PROMPT_CACHING\r\n\r\nconst HAIKU_COST_PER_MILLION_INPUT_TOKENS = 0.8\r\nconst HAIKU_COST_PER_MILLION_OUTPUT_TOKENS = 4\r\nconst HAIKU_COST_PER_MILLION_PROMPT_CACHE_WRITE_TOKENS = 1\r\nconst HAIKU_COST_PER_MILLION_PROMPT_CACHE_READ_TOKENS = 0.08\r\n\r\nconst SONNET_COST_PER_MILLION_INPUT_TOKENS = 3\r\nconst SONNET_COST_PER_MILLION_OUTPUT_TOKENS = 15\r\nconst SONNET_COST_PER_MILLION_PROMPT_CACHE_WRITE_TOKENS = 3.75\r\nconst SONNET_COST_PER_MILLION_PROMPT_CACHE_READ_TOKENS = 0.3\r\n\r\nconst MAX_RETRIES = process.env.USER_TYPE === 'SWE_BENCH' ? 100 : 10\r\nconst BASE_DELAY_MS = 500\r\n\r\ninterface RetryOptions {\r\n maxRetries?: number\r\n signal?: AbortSignal\r\n}\r\n\r\nfunction abortableDelay(delayMs: number, signal?: AbortSignal): Promise<void> {\r\n return new Promise((resolve, reject) => {\r\n if (signal?.aborted) {\r\n reject(new Error('Request was aborted'))\r\n return\r\n }\r\n\r\n const timeoutId = setTimeout(() => {\r\n resolve()\r\n }, delayMs)\r\n\r\n if (signal) {\r\n const abortHandler = () => {\r\n clearTimeout(timeoutId)\r\n reject(new Error('Request was aborted'))\r\n }\r\n signal.addEventListener('abort', abortHandler, { once: true })\r\n }\r\n })\r\n}\r\n\r\nfunction getRetryDelay(\r\n attempt: number,\r\n retryAfterHeader?: string | null,\r\n): number {\r\n if (retryAfterHeader) {\r\n const seconds = parseInt(retryAfterHeader, 10)\r\n if (!isNaN(seconds)) {\r\n return seconds * 1000\r\n }\r\n }\r\n return Math.min(BASE_DELAY_MS * Math.pow(2, attempt - 1), 32000)\r\n}\r\n\r\nfunction shouldRetry(error: APIError): boolean {\r\n if (error.message?.includes('\"type\":\"overloaded_error\"')) {\r\n return process.env.USER_TYPE === 'SWE_BENCH'\r\n }\r\n\r\n const shouldRetryHeader = error.headers?.['x-should-retry']\r\n\r\n if (shouldRetryHeader === 'true') return true\r\n if (shouldRetryHeader === 'false') return false\r\n\r\n if (error instanceof APIConnectionError) {\r\n return true\r\n }\r\n\r\n if (!error.status) return false\r\n\r\n if (error.status === 408) return true\r\n\r\n if (error.status === 409) return true\r\n\r\n if (error.status === 429) return true\r\n\r\n if (error.status && error.status >= 500) return true\r\n\r\n return false\r\n}\r\n\r\nasync function withRetry<T>(\r\n operation: (attempt: number) => Promise<T>,\r\n options: RetryOptions = {},\r\n): Promise<T> {\r\n const maxRetries = options.maxRetries ?? MAX_RETRIES\r\n let lastError: unknown\r\n\r\n for (let attempt = 1; attempt <= maxRetries + 1; attempt++) {\r\n try {\r\n return await operation(attempt)\r\n } catch (error) {\r\n lastError = error\r\n if (\r\n attempt > maxRetries ||\r\n !(error instanceof APIError) ||\r\n !shouldRetry(error)\r\n ) {\r\n throw error\r\n }\r\n\r\n if (options.signal?.aborted) {\r\n throw new Error('Request cancelled by user')\r\n }\r\n\r\n const retryAfter = error.headers?.['retry-after'] ?? null\r\n const delayMs = getRetryDelay(attempt, retryAfter)\r\n\r\n debugLogger.warn('LLM_API_RETRY', {\r\n name: error.name,\r\n message: error.message,\r\n status: error.status,\r\n attempt,\r\n maxRetries,\r\n delayMs,\r\n })\r\n\r\n try {\r\n await abortableDelay(delayMs, options.signal)\r\n } catch (delayError) {\r\n if (delayError.message === 'Request was aborted') {\r\n throw new Error('Request cancelled by user')\r\n }\r\n throw delayError\r\n }\r\n }\r\n }\r\n\r\n throw lastError\r\n}\r\n\r\nexport async function fetchAnthropicModels(\r\n baseURL: string,\r\n apiKey: string,\r\n): Promise<any[]> {\r\n try {\r\n const modelsURL = baseURL\r\n ? `${baseURL.replace(/\\/+$/, '')}/v1/models`\r\n : 'https://api.anthropic.com/v1/models'\r\n\r\n const response = await fetch(modelsURL, {\r\n method: 'GET',\r\n headers: {\r\n 'x-api-key': apiKey,\r\n 'anthropic-version': '2023-06-01',\r\n 'User-Agent': USER_AGENT,\r\n },\r\n })\r\n\r\n if (!response.ok) {\r\n if (response.status === 401) {\r\n throw new Error(\r\n 'Invalid API key. Please check your Anthropic API key and try again.',\r\n )\r\n } else if (response.status === 403) {\r\n throw new Error(\r\n 'API key does not have permission to access models. Please check your API key permissions.',\r\n )\r\n } else if (response.status === 429) {\r\n throw new Error(\r\n 'Too many requests. Please wait a moment and try again.',\r\n )\r\n } else if (response.status >= 500) {\r\n throw new Error(\r\n 'Anthropic service is temporarily unavailable. Please try again later.',\r\n )\r\n } else {\r\n throw new Error(\r\n `Unable to connect to Anthropic API (${response.status}). Please check your internet connection and API key.`,\r\n )\r\n }\r\n }\r\n\r\n const data = await response.json()\r\n return data.data || []\r\n } catch (error) {\r\n if (\r\n (error instanceof Error && error.message.includes('API key')) ||\r\n (error instanceof Error && error.message.includes('Anthropic'))\r\n ) {\r\n throw error\r\n }\r\n\r\n logError(error)\r\n debugLogger.warn('ANTHROPIC_MODELS_FETCH_FAILED', {\r\n error: error instanceof Error ? error.message : String(error),\r\n })\r\n throw new Error(\r\n 'Unable to connect to Anthropic API. Please check your internet connection and try again.',\r\n )\r\n }\r\n}\r\n\r\nexport async function verifyApiKey(\r\n apiKey: string,\r\n baseURL?: string,\r\n provider?: string,\r\n): Promise<boolean> {\r\n if (!apiKey) {\r\n return false\r\n }\r\n\r\n if (provider && provider !== 'anthropic') {\r\n try {\r\n const headers: Record<string, string> = {\r\n Authorization: `Bearer ${apiKey}`,\r\n 'Content-Type': 'application/json',\r\n }\r\n\r\n if (!baseURL) {\r\n debugLogger.warn('API_VERIFICATION_MISSING_BASE_URL', { provider })\r\n return false\r\n }\r\n\r\n const modelsURL = `${baseURL.replace(/\\/+$/, '')}/models`\r\n\r\n const response = await fetch(modelsURL, {\r\n method: 'GET',\r\n headers,\r\n })\r\n\r\n return response.ok\r\n } catch (error) {\r\n logError(error)\r\n debugLogger.warn('API_VERIFICATION_FAILED', {\r\n provider,\r\n error: error instanceof Error ? error.message : String(error),\r\n })\r\n return false\r\n }\r\n }\r\n\r\n const clientConfig: any = {\r\n apiKey,\r\n dangerouslyAllowBrowser: true,\r\n maxRetries: 3,\r\n defaultHeaders: {\r\n 'User-Agent': USER_AGENT,\r\n },\r\n }\r\n\r\n if (baseURL && (provider === 'anthropic' || provider === 'minimax-coding')) {\r\n clientConfig.baseURL = baseURL\r\n }\r\n\r\n const anthropic = new Anthropic(clientConfig)\r\n\r\n try {\r\n await withRetry(\r\n async () => {\r\n const model = 'claude-sonnet-4-20250514'\r\n const messages: MessageParam[] = [{ role: 'user', content: 'test' }]\r\n await anthropic.messages.create({\r\n model,\r\n max_tokens: 1000,\r\n messages,\r\n temperature: 0,\r\n })\r\n return true\r\n },\r\n { maxRetries: 2 },\r\n )\r\n return true\r\n } catch (error) {\r\n logError(error)\r\n if (\r\n error instanceof Error &&\r\n error.message.includes(\r\n '{\"type\":\"error\",\"error\":{\"type\":\"authentication_error\",\"message\":\"invalid x-api-key\"}}',\r\n )\r\n ) {\r\n return false\r\n }\r\n throw error\r\n }\r\n}\r\n\r\nfunction convertAnthropicMessagesToOpenAIMessages(\r\n messages: (UserMessage | AssistantMessage)[],\r\n): (\r\n | OpenAI.ChatCompletionMessageParam\r\n | OpenAI.ChatCompletionToolMessageParam\r\n)[] {\r\n return convertAnthropicMessagesToOpenAIMessagesUtil(messages as any)\r\n}\r\n\r\nfunction messageReducer(\r\n previous: OpenAI.ChatCompletionMessage,\r\n item: OpenAI.ChatCompletionChunk,\r\n): OpenAI.ChatCompletionMessage {\r\n const reduce = (acc: any, delta: OpenAI.ChatCompletionChunk.Choice.Delta) => {\r\n acc = { ...acc }\r\n for (const [key, value] of Object.entries(delta)) {\r\n if (acc[key] === undefined || acc[key] === null) {\r\n acc[key] = value\r\n if (Array.isArray(acc[key])) {\r\n for (const arr of acc[key]) {\r\n delete arr.index\r\n }\r\n }\r\n } else if (typeof acc[key] === 'string' && typeof value === 'string') {\r\n acc[key] += value\r\n } else if (typeof acc[key] === 'number' && typeof value === 'number') {\r\n acc[key] = value\r\n } else if (Array.isArray(acc[key]) && Array.isArray(value)) {\r\n const accArray = acc[key]\r\n for (let i = 0; i < value.length; i++) {\r\n const { index, ...chunkTool } = value[i]\r\n if (index - accArray.length > 1) {\r\n throw new Error(\r\n `Error: An array has an empty value when tool_calls are constructed. tool_calls: ${accArray}; tool: ${value}`,\r\n )\r\n }\r\n accArray[index] = reduce(accArray[index], chunkTool)\r\n }\r\n } else if (typeof acc[key] === 'object' && typeof value === 'object') {\r\n acc[key] = reduce(acc[key], value)\r\n }\r\n }\r\n return acc\r\n }\r\n\r\n const choice = item.choices?.[0]\r\n if (!choice) {\r\n return previous\r\n }\r\n return reduce(previous, choice.delta) as OpenAI.ChatCompletionMessage\r\n}\r\nasync function handleMessageStream(\r\n stream: ChatCompletionStream,\r\n signal?: AbortSignal,\r\n): Promise<OpenAI.ChatCompletion> {\r\n const streamStartTime = Date.now()\r\n let ttftMs: number | undefined\r\n let chunkCount = 0\r\n let errorCount = 0\r\n\r\n debugLogger.api('OPENAI_STREAM_START', {\r\n streamStartTime: String(streamStartTime),\r\n })\r\n\r\n let message = {} as OpenAI.ChatCompletionMessage\r\n\r\n let id, model, created, object, usage\r\n try {\r\n for await (const chunk of stream) {\r\n if (signal?.aborted) {\r\n debugLogger.flow('OPENAI_STREAM_ABORTED', {\r\n chunkCount,\r\n timestamp: Date.now(),\r\n })\r\n throw new Error('Request was cancelled')\r\n }\r\n\r\n chunkCount++\r\n\r\n try {\r\n if (!id) {\r\n id = chunk.id\r\n debugLogger.api('OPENAI_STREAM_ID_RECEIVED', {\r\n id,\r\n chunkNumber: String(chunkCount),\r\n })\r\n }\r\n if (!model) {\r\n model = chunk.model\r\n debugLogger.api('OPENAI_STREAM_MODEL_RECEIVED', {\r\n model,\r\n chunkNumber: String(chunkCount),\r\n })\r\n }\r\n if (!created) {\r\n created = chunk.created\r\n }\r\n if (!object) {\r\n object = chunk.object\r\n }\r\n if (!usage) {\r\n usage = chunk.usage\r\n }\r\n\r\n message = messageReducer(message, chunk)\r\n\r\n if (chunk?.choices?.[0]?.delta?.content) {\r\n if (!ttftMs) {\r\n ttftMs = Date.now() - streamStartTime\r\n debugLogger.api('OPENAI_STREAM_FIRST_TOKEN', {\r\n ttftMs: String(ttftMs),\r\n chunkNumber: String(chunkCount),\r\n })\r\n }\r\n }\r\n } catch (chunkError) {\r\n errorCount++\r\n debugLogger.error('OPENAI_STREAM_CHUNK_ERROR', {\r\n chunkNumber: String(chunkCount),\r\n errorMessage:\r\n chunkError instanceof Error\r\n ? chunkError.message\r\n : String(chunkError),\r\n errorType:\r\n chunkError instanceof Error\r\n ? chunkError.constructor.name\r\n : typeof chunkError,\r\n })\r\n }\r\n }\r\n\r\n debugLogger.api('OPENAI_STREAM_COMPLETE', {\r\n totalChunks: String(chunkCount),\r\n errorCount: String(errorCount),\r\n totalDuration: String(Date.now() - streamStartTime),\r\n ttftMs: String(ttftMs || 0),\r\n finalMessageId: id || 'undefined',\r\n })\r\n } catch (streamError) {\r\n debugLogger.error('OPENAI_STREAM_FATAL_ERROR', {\r\n totalChunks: String(chunkCount),\r\n errorCount: String(errorCount),\r\n errorMessage:\r\n streamError instanceof Error\r\n ? streamError.message\r\n : String(streamError),\r\n errorType:\r\n streamError instanceof Error\r\n ? streamError.constructor.name\r\n : typeof streamError,\r\n })\r\n throw streamError\r\n }\r\n return {\r\n id,\r\n created,\r\n model,\r\n object,\r\n choices: [\r\n {\r\n index: 0,\r\n message,\r\n finish_reason: 'stop',\r\n logprobs: undefined,\r\n },\r\n ],\r\n usage,\r\n }\r\n}\r\n\r\nfunction convertOpenAIResponseToAnthropic(\r\n response: OpenAI.ChatCompletion,\r\n tools?: Tool[],\r\n) {\r\n let contentBlocks: ContentBlock[] = []\r\n const message = response.choices?.[0]?.message\r\n if (!message) {\r\n return {\r\n role: 'assistant',\r\n content: [],\r\n stop_reason: response.choices?.[0]?.finish_reason,\r\n type: 'message',\r\n usage: response.usage,\r\n }\r\n }\r\n\r\n if (message?.tool_calls) {\r\n for (const toolCall of message.tool_calls) {\r\n const tool = toolCall.function\r\n const toolName = tool?.name\r\n let toolArgs = {}\r\n try {\r\n toolArgs = tool?.arguments ? JSON.parse(tool.arguments) : {}\r\n } catch (e) {\r\n }\r\n\r\n contentBlocks.push({\r\n type: 'tool_use',\r\n input: toolArgs,\r\n name: toolName,\r\n id: toolCall.id?.length > 0 ? toolCall.id : nanoid(),\r\n })\r\n }\r\n }\r\n\r\n if ((message as any).reasoning) {\r\n contentBlocks.push({\r\n type: 'thinking',\r\n thinking: (message as any).reasoning,\r\n signature: '',\r\n })\r\n }\r\n\r\n if ((message as any).reasoning_content) {\r\n contentBlocks.push({\r\n type: 'thinking',\r\n thinking: (message as any).reasoning_content,\r\n signature: '',\r\n })\r\n }\r\n\r\n if (message.content) {\r\n contentBlocks.push({\r\n type: 'text',\r\n text: message?.content,\r\n citations: [],\r\n })\r\n }\r\n\r\n const finalMessage = {\r\n role: 'assistant',\r\n content: contentBlocks,\r\n stop_reason: response.choices?.[0]?.finish_reason,\r\n type: 'message',\r\n usage: response.usage,\r\n }\r\n\r\n return finalMessage\r\n}\r\n\r\nlet anthropicClient: Anthropic | AnthropicBedrock | AnthropicVertex | null =\r\n null\r\n\r\nexport function getAnthropicClient(\r\n model?: string,\r\n): Anthropic | AnthropicBedrock | AnthropicVertex {\r\n const config = getGlobalConfig()\r\n const provider = config.primaryProvider\r\n\r\n if (anthropicClient && provider) {\r\n anthropicClient = null\r\n }\r\n\r\n if (anthropicClient) {\r\n return anthropicClient\r\n }\r\n\r\n const region = getVertexRegionForModel(model)\r\n\r\n const modelManager = getModelManager()\r\n const modelProfile = modelManager.getModel('main')\r\n\r\n const defaultHeaders: { [key: string]: string } = {\r\n 'x-app': 'cli',\r\n 'User-Agent': USER_AGENT,\r\n }\r\n\r\n if (process.env.ANTHROPIC_AUTH_TOKEN) {\r\n defaultHeaders['Authorization'] =\r\n `Bearer ${process.env.ANTHROPIC_AUTH_TOKEN}`\r\n }\r\n\r\n const ARGS = {\r\n defaultHeaders,\r\n maxRetries: 0,\r\n timeout: parseInt(process.env.API_TIMEOUT_MS || String(60 * 1000), 10),\r\n }\r\n if (USE_BEDROCK) {\r\n const client = new AnthropicBedrock(ARGS)\r\n anthropicClient = client\r\n return client\r\n }\r\n if (USE_VERTEX) {\r\n const vertexArgs = {\r\n ...ARGS,\r\n region: region || process.env.CLOUD_ML_REGION || 'us-east5',\r\n }\r\n const client = new AnthropicVertex(vertexArgs)\r\n anthropicClient = client\r\n return client\r\n }\r\n\r\n let apiKey: string\r\n let baseURL: string | undefined\r\n\r\n if (modelProfile) {\r\n apiKey = modelProfile.apiKey || ''\r\n baseURL = modelProfile.baseURL\r\n } else {\r\n apiKey = getAnthropicApiKey()\r\n baseURL = undefined\r\n }\r\n\r\n if (process.env.USER_TYPE === 'ant' && !apiKey && provider === 'anthropic') {\r\n console.error(\r\n chalk.red(\r\n '[ANT-ONLY] Missing API key. Configure an API key in your model profile or environment variables.',\r\n ),\r\n )\r\n }\r\n\r\n const clientConfig = {\r\n apiKey,\r\n dangerouslyAllowBrowser: true,\r\n ...ARGS,\r\n ...(baseURL && { baseURL }),\r\n }\r\n\r\n anthropicClient = new Anthropic(clientConfig)\r\n return anthropicClient\r\n}\r\n\r\nexport function resetAnthropicClient(): void {\r\n anthropicClient = null\r\n}\r\n\r\n\r\nfunction applyCacheControlWithLimits(\r\n systemBlocks: TextBlockParam[],\r\n messageParams: MessageParam[],\r\n): { systemBlocks: TextBlockParam[]; messageParams: MessageParam[] } {\r\n if (!PROMPT_CACHING_ENABLED) {\r\n return { systemBlocks, messageParams }\r\n }\r\n\r\n const maxCacheBlocks = 4\r\n let usedCacheBlocks = 0\r\n\r\n const processedSystemBlocks = systemBlocks.map((block, index) => {\r\n if (usedCacheBlocks < maxCacheBlocks && block.text.length > 1000) {\r\n usedCacheBlocks++\r\n return {\r\n ...block,\r\n cache_control: { type: 'ephemeral' as const },\r\n }\r\n }\r\n const { cache_control, ...blockWithoutCache } = block\r\n return blockWithoutCache\r\n })\r\n\r\n const processedMessageParams = messageParams.map((message, messageIndex) => {\r\n if (Array.isArray(message.content)) {\r\n const processedContent = message.content.map(\r\n (contentBlock, blockIndex) => {\r\n const shouldCache =\r\n usedCacheBlocks < maxCacheBlocks &&\r\n contentBlock.type === 'text' &&\r\n typeof contentBlock.text === 'string' &&\r\n (contentBlock.text.length > 2000 ||\r\n (messageIndex === messageParams.length - 1 &&\r\n blockIndex === message.content.length - 1 &&\r\n contentBlock.text.length > 500))\r\n\r\n if (shouldCache) {\r\n usedCacheBlocks++\r\n return {\r\n ...contentBlock,\r\n cache_control: { type: 'ephemeral' as const },\r\n }\r\n }\r\n\r\n const { cache_control, ...blockWithoutCache } = contentBlock as any\r\n return blockWithoutCache\r\n },\r\n )\r\n\r\n return {\r\n ...message,\r\n content: processedContent,\r\n }\r\n }\r\n\r\n return message\r\n })\r\n\r\n return {\r\n systemBlocks: processedSystemBlocks,\r\n messageParams: processedMessageParams,\r\n }\r\n}\r\n\r\nexport function userMessageToMessageParam(\r\n message: UserMessage,\r\n addCache = false,\r\n): MessageParam {\r\n if (addCache) {\r\n if (typeof message.message.content === 'string') {\r\n return {\r\n role: 'user',\r\n content: [\r\n {\r\n type: 'text',\r\n text: message.message.content,\r\n },\r\n ],\r\n }\r\n } else {\r\n return {\r\n role: 'user',\r\n content: message.message.content.map(_ => ({ ..._ })),\r\n }\r\n }\r\n }\r\n return {\r\n role: 'user',\r\n content: message.message.content,\r\n }\r\n}\r\n\r\nexport function assistantMessageToMessageParam(\r\n message: AssistantMessage,\r\n addCache = false,\r\n): MessageParam {\r\n if (addCache) {\r\n if (typeof message.message.content === 'string') {\r\n return {\r\n role: 'assistant',\r\n content: [\r\n {\r\n type: 'text',\r\n text: message.message.content,\r\n },\r\n ],\r\n }\r\n } else {\r\n return {\r\n role: 'assistant',\r\n content: message.message.content.map(_ => ({ ..._ })),\r\n }\r\n }\r\n }\r\n return {\r\n role: 'assistant',\r\n content: message.message.content,\r\n }\r\n}\r\n\r\nfunction splitSysPromptPrefix(systemPrompt: string[]): string[] {\r\n\r\n const systemPromptFirstBlock = systemPrompt[0] || ''\r\n const systemPromptRest = systemPrompt.slice(1)\r\n return [systemPromptFirstBlock, systemPromptRest.join('\\n')].filter(Boolean)\r\n}\r\n\r\nexport async function queryLLM(\r\n messages: (UserMessage | AssistantMessage)[],\r\n systemPrompt: string[],\r\n maxThinkingTokens: number,\r\n tools: Tool[],\r\n signal: AbortSignal,\r\n options: {\r\n safeMode: boolean\r\n model: string | import('@utils/config').ModelPointerType\r\n prependCLISysprompt: boolean\r\n temperature?: number\r\n maxTokens?: number\r\n stopSequences?: string[]\r\n toolUseContext?: ToolUseContext\r\n __testModelManager?: any\r\n __testQueryLLMWithPromptCaching?: any\r\n },\r\n): Promise<AssistantMessage> {\r\n const modelManager = options.__testModelManager ?? getModelManager()\r\n const modelResolution = modelManager.resolveModelWithInfo(options.model)\r\n\r\n if (!modelResolution.success || !modelResolution.profile) {\r\n const fallbackProfile = modelManager.resolveModel(options.model)\r\n if (!fallbackProfile) {\r\n throw new Error(\r\n modelResolution.error || `Failed to resolve model: ${options.model}`,\r\n )\r\n }\r\n\r\n debugLogger.warn('MODEL_RESOLUTION_FALLBACK', {\r\n inputParam: options.model,\r\n error: modelResolution.error,\r\n fallbackModelName: fallbackProfile.modelName,\r\n fallbackProvider: fallbackProfile.provider,\r\n requestId: getCurrentRequest()?.id,\r\n })\r\n\r\n modelResolution.success = true\r\n modelResolution.profile = fallbackProfile\r\n }\r\n\r\n const modelProfile = modelResolution.profile\r\n const resolvedModel = modelProfile.modelName\r\n\r\n const toolUseContext = options.toolUseContext\r\n if (toolUseContext && !toolUseContext.responseState) {\r\n const conversationId = getConversationId(\r\n toolUseContext.agentId,\r\n toolUseContext.messageId,\r\n )\r\n const previousResponseId =\r\n responseStateManager.getPreviousResponseId(conversationId)\r\n\r\n toolUseContext.responseState = {\r\n previousResponseId,\r\n conversationId,\r\n }\r\n }\r\n\r\n debugLogger.api('MODEL_RESOLVED', {\r\n inputParam: options.model,\r\n resolvedModelName: resolvedModel,\r\n provider: modelProfile.provider,\r\n isPointer: ['main', 'task', 'compact', 'quick'].includes(options.model),\r\n hasResponseState: !!toolUseContext?.responseState,\r\n conversationId: toolUseContext?.responseState?.conversationId,\r\n requestId: getCurrentRequest()?.id,\r\n })\r\n\r\n const currentRequest = getCurrentRequest()\r\n debugLogger.api('LLM_REQUEST_START', {\r\n messageCount: messages.length,\r\n systemPromptLength: systemPrompt.join(' ').length,\r\n toolCount: tools.length,\r\n model: resolvedModel,\r\n originalModelParam: options.model,\r\n requestId: getCurrentRequest()?.id,\r\n })\r\n\r\n markPhase('LLM_CALL')\r\n\r\n try {\r\n const queryFn =\r\n options.__testQueryLLMWithPromptCaching ?? queryLLMWithPromptCaching\r\n const cleanOptions: any = { ...options }\r\n delete cleanOptions.__testModelManager\r\n delete cleanOptions.__testQueryLLMWithPromptCaching\r\n\r\n const runQuery = () =>\r\n queryFn(\r\n messages,\r\n systemPrompt,\r\n maxThinkingTokens,\r\n tools,\r\n signal,\r\n {\r\n ...cleanOptions,\r\n model: resolvedModel,\r\n modelProfile,\r\n toolUseContext,\r\n },\r\n )\r\n\r\n const result = options.__testQueryLLMWithPromptCaching\r\n ? await runQuery()\r\n : await withVCR(messages, runQuery)\r\n\r\n debugLogger.api('LLM_REQUEST_SUCCESS', {\r\n costUSD: result.costUSD,\r\n durationMs: result.durationMs,\r\n responseLength: result.message.content?.length || 0,\r\n requestId: getCurrentRequest()?.id,\r\n })\r\n\r\n if (toolUseContext?.responseState?.conversationId && result.responseId) {\r\n responseStateManager.setPreviousResponseId(\r\n toolUseContext.responseState.conversationId,\r\n result.responseId,\r\n )\r\n\r\n debugLogger.api('RESPONSE_STATE_UPDATED', {\r\n conversationId: toolUseContext.responseState.conversationId,\r\n responseId: result.responseId,\r\n requestId: getCurrentRequest()?.id,\r\n })\r\n }\r\n\r\n return result\r\n } catch (error) {\r\n logErrorWithDiagnosis(\r\n error,\r\n {\r\n messageCount: messages.length,\r\n systemPromptLength: systemPrompt.join(' ').length,\r\n model: options.model,\r\n toolCount: tools.length,\r\n phase: 'LLM_CALL',\r\n },\r\n currentRequest?.id,\r\n )\r\n\r\n throw error\r\n }\r\n}\r\n\r\nexport { formatSystemPromptWithContext } from '@services/systemPrompt'\r\n\r\nasync function queryLLMWithPromptCaching(\r\n messages: (UserMessage | AssistantMessage)[],\r\n systemPrompt: string[],\r\n maxThinkingTokens: number,\r\n tools: Tool[],\r\n signal: AbortSignal,\r\n options: {\r\n safeMode: boolean\r\n model: string\r\n prependCLISysprompt: boolean\r\n temperature?: number\r\n maxTokens?: number\r\n stopSequences?: string[]\r\n modelProfile?: ModelProfile | null\r\n toolUseContext?: ToolUseContext\r\n },\r\n): Promise<AssistantMessage> {\r\n const config = getGlobalConfig()\r\n const modelManager = getModelManager()\r\n const toolUseContext = options.toolUseContext\r\n\r\n const modelProfile = options.modelProfile || modelManager.getModel('main')\r\n let provider: string\r\n\r\n if (modelProfile) {\r\n provider = modelProfile.provider || config.primaryProvider || 'anthropic'\r\n } else {\r\n provider = config.primaryProvider || 'anthropic'\r\n }\r\n\r\n if (\r\n provider === 'anthropic' ||\r\n provider === 'bigdream' ||\r\n provider === 'opendev' ||\r\n provider === 'minimax-coding'\r\n ) {\r\n return queryAnthropicNative(\r\n messages,\r\n systemPrompt,\r\n maxThinkingTokens,\r\n tools,\r\n signal,\r\n { ...options, modelProfile, toolUseContext },\r\n )\r\n }\r\n\r\n return queryOpenAI(messages, systemPrompt, maxThinkingTokens, tools, signal, {\r\n ...options,\r\n modelProfile,\r\n toolUseContext,\r\n })\r\n}\r\n\r\nasync function queryAnthropicNative(\r\n messages: (UserMessage | AssistantMessage)[],\r\n systemPrompt: string[],\r\n maxThinkingTokens: number,\r\n tools: Tool[],\r\n signal: AbortSignal,\r\n options?: {\r\n safeMode: boolean\r\n model: string\r\n prependCLISysprompt: boolean\r\n temperature?: number\r\n maxTokens?: number\r\n stopSequences?: string[]\r\n modelProfile?: ModelProfile | null\r\n toolUseContext?: ToolUseContext\r\n },\r\n): Promise<AssistantMessage> {\r\n const config = getGlobalConfig()\r\n const modelManager = getModelManager()\r\n const toolUseContext = options?.toolUseContext\r\n\r\n const modelProfile = options?.modelProfile || modelManager.getModel('main')\r\n let anthropic: Anthropic | AnthropicBedrock | AnthropicVertex\r\n let model: string\r\n let provider: string\r\n\r\n debugLogger.api('MODEL_CONFIG_ANTHROPIC', {\r\n modelProfileFound: !!modelProfile,\r\n modelProfileId: modelProfile?.modelName,\r\n modelProfileName: modelProfile?.name,\r\n modelProfileModelName: modelProfile?.modelName,\r\n modelProfileProvider: modelProfile?.provider,\r\n modelProfileBaseURL: modelProfile?.baseURL,\r\n modelProfileApiKeyExists: !!modelProfile?.apiKey,\r\n optionsModel: options?.model,\r\n requestId: getCurrentRequest()?.id,\r\n })\r\n\r\n if (modelProfile) {\r\n model = modelProfile.modelName\r\n provider = modelProfile.provider || config.primaryProvider || 'anthropic'\r\n\r\n if (\r\n modelProfile.provider === 'anthropic' ||\r\n modelProfile.provider === 'minimax-coding'\r\n ) {\r\n const clientConfig: any = {\r\n apiKey: modelProfile.apiKey,\r\n dangerouslyAllowBrowser: true,\r\n maxRetries: 0,\r\n timeout: parseInt(process.env.API_TIMEOUT_MS || String(60 * 1000), 10),\r\n defaultHeaders: {\r\n 'x-app': 'cli',\r\n 'User-Agent': USER_AGENT,\r\n },\r\n }\r\n\r\n if (modelProfile.baseURL) {\r\n clientConfig.baseURL = modelProfile.baseURL\r\n }\r\n\r\n anthropic = new Anthropic(clientConfig)\r\n } else {\r\n anthropic = getAnthropicClient(model)\r\n }\r\n } else {\r\n const errorDetails = {\r\n modelProfileExists: !!modelProfile,\r\n modelProfileModelName: modelProfile?.modelName,\r\n requestedModel: options?.model,\r\n requestId: getCurrentRequest()?.id,\r\n }\r\n debugLogger.error('ANTHROPIC_FALLBACK_ERROR', errorDetails)\r\n throw new Error(\r\n `No valid ModelProfile available for Anthropic provider. Please configure model through /model command. Debug: ${JSON.stringify(errorDetails)}`,\r\n )\r\n }\r\n\r\n if (options?.prependCLISysprompt) {\r\n const [firstSyspromptBlock] = splitSysPromptPrefix(systemPrompt)\r\n\r\n systemPrompt = [getCLISyspromptPrefix(), ...systemPrompt]\r\n }\r\n\r\n const system: TextBlockParam[] = splitSysPromptPrefix(systemPrompt).map(\r\n _ => ({\r\n text: _,\r\n type: 'text',\r\n }),\r\n )\r\n\r\n const toolSchemas = await Promise.all(\r\n tools.map(\r\n async tool =>\r\n ({\r\n name: tool.name,\r\n description: getToolDescription(tool),\r\n input_schema:\r\n 'inputJSONSchema' in tool && tool.inputJSONSchema\r\n ? tool.inputJSONSchema\r\n : (zodToJsonSchema(tool.inputSchema as any) as any),\r\n }) as unknown as Anthropic.Beta.Messages.BetaTool,\r\n ),\r\n )\r\n\r\n const anthropicMessages = addCacheBreakpoints(messages)\r\n\r\n const { systemBlocks: processedSystem, messageParams: processedMessages } =\r\n applyCacheControlWithLimits(system, anthropicMessages)\r\n const startIncludingRetries = Date.now()\r\n\r\n logSystemPromptConstruction({\r\n basePrompt: systemPrompt.join('\\n'),\r\n kodeContext: generateKodeContext() || '',\r\n reminders: [],\r\n finalPrompt: systemPrompt.join('\\n'),\r\n })\r\n\r\n let start = Date.now()\r\n let attemptNumber = 0\r\n let response\r\n\r\n try {\r\n response = await withRetry(\r\n async attempt => {\r\n attemptNumber = attempt\r\n start = Date.now()\r\n\r\n const params: Anthropic.Beta.Messages.MessageCreateParams = {\r\n model,\r\n max_tokens:\r\n options?.maxTokens ?? getMaxTokensFromProfile(modelProfile),\r\n messages: processedMessages,\r\n system: processedSystem,\r\n tools: toolSchemas.length > 0 ? toolSchemas : undefined,\r\n tool_choice: toolSchemas.length > 0 ? { type: 'auto' } : undefined,\r\n ...(options?.temperature !== undefined\r\n ? { temperature: options.temperature }\r\n : {}),\r\n ...(options?.stopSequences && options.stopSequences.length > 0\r\n ? { stop_sequences: options.stopSequences }\r\n : {}),\r\n }\r\n\r\n if (maxThinkingTokens > 0) {\r\n ;(params as any).extra_headers = {\r\n 'anthropic-beta': 'max-tokens-3-5-sonnet-2024-07-15',\r\n }\r\n ;(params as any).thinking = { max_tokens: maxThinkingTokens }\r\n }\r\n\r\n debugLogger.api('ANTHROPIC_API_CALL_START_STREAMING', {\r\n endpoint: modelProfile?.baseURL || 'DEFAULT_ANTHROPIC',\r\n model,\r\n provider,\r\n apiKeyConfigured: !!modelProfile?.apiKey,\r\n apiKeyPrefix: modelProfile?.apiKey\r\n ? modelProfile.apiKey.substring(0, 8)\r\n : null,\r\n maxTokens: params.max_tokens,\r\n temperature: options?.temperature ?? MAIN_QUERY_TEMPERATURE,\r\n params: params,\r\n messageCount: params.messages?.length || 0,\r\n streamMode: true,\r\n toolsCount: toolSchemas.length,\r\n thinkingTokens: maxThinkingTokens,\r\n timestamp: new Date().toISOString(),\r\n modelProfileId: modelProfile?.modelName,\r\n modelProfileName: modelProfile?.name,\r\n })\r\n\r\n if (config.stream) {\r\n const stream = await anthropic.beta.messages.create(\r\n {\r\n ...params,\r\n stream: true,\r\n },\r\n {\r\n signal: signal,\r\n },\r\n )\r\n\r\n let finalResponse: any | null = null\r\n let messageStartEvent: any = null\r\n const contentBlocks: any[] = []\r\n const inputJSONBuffers = new Map<number, string>()\r\n let usage: any = null\r\n let stopReason: string | null = null\r\n let stopSequence: string | null = null\r\n let hasMarkedStreaming = false\r\n\r\n for await (const event of stream) {\r\n if (signal.aborted) {\r\n debugLogger.flow('STREAM_ABORTED', {\r\n eventType: event.type,\r\n timestamp: Date.now(),\r\n })\r\n throw new Error('Request was cancelled')\r\n }\r\n\r\n switch (event.type) {\r\n case 'message_start':\r\n messageStartEvent = event\r\n finalResponse = {\r\n ...event.message,\r\n content: [],\r\n }\r\n break\r\n\r\n case 'content_block_start':\r\n contentBlocks[event.index] = { ...event.content_block }\r\n const contentBlockType = (event.content_block as any).type\r\n if (\r\n contentBlockType === 'tool_use' ||\r\n contentBlockType === 'server_tool_use' ||\r\n contentBlockType === 'mcp_tool_use'\r\n ) {\r\n setRequestStatus({\r\n kind: 'tool',\r\n detail: (event.content_block as any).name,\r\n })\r\n inputJSONBuffers.set(event.index, '')\r\n }\r\n break\r\n\r\n case 'content_block_delta':\r\n const blockIndex = event.index\r\n\r\n if (!contentBlocks[blockIndex]) {\r\n contentBlocks[blockIndex] = {\r\n type:\r\n event.delta.type === 'text_delta' ? 'text' : 'tool_use',\r\n text: event.delta.type === 'text_delta' ? '' : undefined,\r\n }\r\n if (event.delta.type === 'input_json_delta') {\r\n inputJSONBuffers.set(blockIndex, '')\r\n }\r\n }\r\n\r\n if (event.delta.type === 'text_delta') {\r\n if (!hasMarkedStreaming) {\r\n setRequestStatus({ kind: 'streaming' })\r\n hasMarkedStreaming = true\r\n }\r\n contentBlocks[blockIndex].text += event.delta.text\r\n } else if (event.delta.type === 'input_json_delta') {\r\n const currentBuffer = inputJSONBuffers.get(blockIndex) || ''\r\n const nextBuffer = currentBuffer + event.delta.partial_json\r\n inputJSONBuffers.set(blockIndex, nextBuffer)\r\n\r\n const trimmed = nextBuffer.trim()\r\n if (trimmed.length === 0) {\r\n contentBlocks[blockIndex].input = {}\r\n break\r\n }\r\n\r\n contentBlocks[blockIndex].input =\r\n parseToolUsePartialJsonOrThrow(nextBuffer) ?? {}\r\n }\r\n break\r\n\r\n case 'message_delta':\r\n if (event.delta.stop_reason)\r\n stopReason = event.delta.stop_reason\r\n if (event.delta.stop_sequence)\r\n stopSequence = event.delta.stop_sequence\r\n if (event.usage) usage = { ...usage, ...event.usage }\r\n break\r\n\r\n case 'content_block_stop':\r\n const stopIndex = event.index\r\n const block = contentBlocks[stopIndex]\r\n\r\n if (\r\n (block?.type === 'tool_use' ||\r\n block?.type === 'server_tool_use' ||\r\n block?.type === 'mcp_tool_use') &&\r\n inputJSONBuffers.has(stopIndex)\r\n ) {\r\n const jsonStr = inputJSONBuffers.get(stopIndex) ?? ''\r\n if (block.input === undefined) {\r\n const trimmed = jsonStr.trim()\r\n if (trimmed.length === 0) {\r\n block.input = {}\r\n } else {\r\n block.input =\r\n parseToolUsePartialJsonOrThrow(jsonStr) ?? {}\r\n }\r\n }\r\n\r\n inputJSONBuffers.delete(stopIndex)\r\n }\r\n break\r\n\r\n case 'message_stop':\r\n inputJSONBuffers.clear()\r\n break\r\n }\r\n\r\n if (event.type === 'message_stop') {\r\n break\r\n }\r\n }\r\n\r\n if (!finalResponse || !messageStartEvent) {\r\n throw new Error('Stream ended without proper message structure')\r\n }\r\n\r\n finalResponse = {\r\n ...messageStartEvent.message,\r\n content: contentBlocks.filter(Boolean),\r\n stop_reason: stopReason,\r\n stop_sequence: stopSequence,\r\n usage: {\r\n ...messageStartEvent.message.usage,\r\n ...usage,\r\n },\r\n }\r\n\r\n return finalResponse\r\n } else {\r\n debugLogger.api('ANTHROPIC_API_CALL_START_NON_STREAMING', {\r\n endpoint: modelProfile?.baseURL || 'DEFAULT_ANTHROPIC',\r\n model,\r\n provider,\r\n apiKeyConfigured: !!modelProfile?.apiKey,\r\n apiKeyPrefix: modelProfile?.apiKey\r\n ? modelProfile.apiKey.substring(0, 8)\r\n : null,\r\n maxTokens: params.max_tokens,\r\n temperature: options?.temperature ?? MAIN_QUERY_TEMPERATURE,\r\n messageCount: params.messages?.length || 0,\r\n streamMode: false,\r\n toolsCount: toolSchemas.length,\r\n thinkingTokens: maxThinkingTokens,\r\n timestamp: new Date().toISOString(),\r\n modelProfileId: modelProfile?.modelName,\r\n modelProfileName: modelProfile?.name,\r\n })\r\n\r\n return await anthropic.beta.messages.create(params, {\r\n signal: signal,\r\n })\r\n }\r\n },\r\n { signal },\r\n )\r\n\r\n debugLogger.api('ANTHROPIC_API_CALL_SUCCESS', {\r\n content: response.content,\r\n })\r\n\r\n const ttftMs = start - Date.now()\r\n const durationMs = Date.now() - startIncludingRetries\r\n\r\n const content = response.content.map((block: ContentBlock) => {\r\n if (block.type === 'text') {\r\n return {\r\n type: 'text' as const,\r\n text: block.text,\r\n }\r\n } else if (block.type === 'tool_use') {\r\n return {\r\n type: 'tool_use' as const,\r\n id: block.id,\r\n name: block.name,\r\n input: block.input,\r\n }\r\n }\r\n return block\r\n })\r\n\r\n const assistantMessage: AssistantMessage = {\r\n message: {\r\n id: response.id,\r\n content,\r\n model: response.model,\r\n role: 'assistant',\r\n stop_reason: response.stop_reason,\r\n stop_sequence: response.stop_sequence,\r\n type: 'message',\r\n usage: response.usage,\r\n },\r\n type: 'assistant',\r\n uuid: nanoid() as UUID,\r\n durationMs,\r\n costUSD: 0,\r\n }\r\n\r\n const systemMessages = system.map(block => ({\r\n role: 'system',\r\n content: block.text,\r\n }))\r\n\r\n logLLMInteraction({\r\n systemPrompt: systemPrompt.join('\\n'),\r\n messages: [...systemMessages, ...anthropicMessages],\r\n response: response,\r\n usage: response.usage\r\n ? {\r\n inputTokens: response.usage.input_tokens,\r\n outputTokens: response.usage.output_tokens,\r\n }\r\n : undefined,\r\n timing: {\r\n start: start,\r\n end: Date.now(),\r\n },\r\n apiFormat: 'anthropic',\r\n })\r\n\r\n const inputTokens = response.usage.input_tokens\r\n const outputTokens = response.usage.output_tokens\r\n const cacheCreationInputTokens =\r\n response.usage.cache_creation_input_tokens ?? 0\r\n const cacheReadInputTokens = response.usage.cache_read_input_tokens ?? 0\r\n\r\n const costUSD =\r\n (inputTokens / 1_000_000) * getModelInputTokenCostUSD(model) +\r\n (outputTokens / 1_000_000) * getModelOutputTokenCostUSD(model) +\r\n (cacheCreationInputTokens / 1_000_000) *\r\n getModelInputTokenCostUSD(model) +\r\n (cacheReadInputTokens / 1_000_000) *\r\n (getModelInputTokenCostUSD(model) * 0.1)\r\n\r\n assistantMessage.costUSD = costUSD\r\n addToTotalCost(costUSD, durationMs)\r\n\r\n return assistantMessage\r\n } catch (error) {\r\n return getAssistantMessageFromError(error)\r\n }\r\n}\r\n\r\nfunction getAssistantMessageFromError(error: unknown): AssistantMessage {\r\n if (error instanceof Error && error.message.includes('prompt is too long')) {\r\n return createAssistantAPIErrorMessage(PROMPT_TOO_LONG_ERROR_MESSAGE)\r\n }\r\n if (\r\n error instanceof Error &&\r\n error.message.includes('Your credit balance is too low')\r\n ) {\r\n return createAssistantAPIErrorMessage(CREDIT_BALANCE_TOO_LOW_ERROR_MESSAGE)\r\n }\r\n if (\r\n error instanceof Error &&\r\n error.message.toLowerCase().includes('x-api-key')\r\n ) {\r\n return createAssistantAPIErrorMessage(INVALID_API_KEY_ERROR_MESSAGE)\r\n }\r\n if (error instanceof Error) {\r\n if (process.env.NODE_ENV === 'development') {\r\n debugLogger.error('ANTHROPIC_API_ERROR', {\r\n message: error.message,\r\n stack: error.stack,\r\n })\r\n }\r\n return createAssistantAPIErrorMessage(\r\n `${API_ERROR_MESSAGE_PREFIX}: ${error.message}`,\r\n )\r\n }\r\n return createAssistantAPIErrorMessage(API_ERROR_MESSAGE_PREFIX)\r\n}\r\n\r\nfunction addCacheBreakpoints(\r\n messages: (UserMessage | AssistantMessage)[],\r\n): MessageParam[] {\r\n return messages.map((msg, index) => {\r\n return msg.type === 'user'\r\n ? userMessageToMessageParam(msg, index > messages.length - 3)\r\n : assistantMessageToMessageParam(msg, index > messages.length - 3)\r\n })\r\n}\r\n\r\nasync function queryOpenAI(\r\n messages: (UserMessage | AssistantMessage)[],\r\n systemPrompt: string[],\r\n maxThinkingTokens: number,\r\n tools: Tool[],\r\n signal: AbortSignal,\r\n options?: {\r\n safeMode: boolean\r\n model: string\r\n prependCLISysprompt: boolean\r\n temperature?: number\r\n maxTokens?: number\r\n stopSequences?: string[]\r\n modelProfile?: ModelProfile | null\r\n toolUseContext?: ToolUseContext\r\n },\r\n): Promise<AssistantMessage> {\r\n const config = getGlobalConfig()\r\n const modelManager = getModelManager()\r\n const toolUseContext = options?.toolUseContext\r\n\r\n const modelProfile = options?.modelProfile || modelManager.getModel('main')\r\n let model: string\r\n\r\n const currentRequest = getCurrentRequest()\r\n debugLogger.api('MODEL_CONFIG_OPENAI', {\r\n modelProfileFound: !!modelProfile,\r\n modelProfileId: modelProfile?.modelName,\r\n modelProfileName: modelProfile?.name,\r\n modelProfileModelName: modelProfile?.modelName,\r\n modelProfileProvider: modelProfile?.provider,\r\n modelProfileBaseURL: modelProfile?.baseURL,\r\n modelProfileApiKeyExists: !!modelProfile?.apiKey,\r\n optionsModel: options?.model,\r\n requestId: getCurrentRequest()?.id,\r\n })\r\n\r\n if (modelProfile) {\r\n model = modelProfile.modelName\r\n } else {\r\n model = options?.model || modelProfile?.modelName || ''\r\n }\r\n if (options?.prependCLISysprompt) {\r\n const [firstSyspromptBlock] = splitSysPromptPrefix(systemPrompt)\r\n\r\n systemPrompt = [getCLISyspromptPrefix() + systemPrompt]\r\n }\r\n\r\n const system: TextBlockParam[] = splitSysPromptPrefix(systemPrompt).map(\r\n _ => ({\r\n ...(PROMPT_CACHING_ENABLED\r\n ? { cache_control: { type: 'ephemeral' } }\r\n : {}),\r\n text: _,\r\n type: 'text',\r\n }),\r\n )\r\n\r\n const toolSchemas = await Promise.all(\r\n tools.map(\r\n async _ =>\r\n ({\r\n type: 'function',\r\n function: {\r\n name: _.name,\r\n description: await _.prompt({\r\n safeMode: options?.safeMode,\r\n }),\r\n parameters:\r\n 'inputJSONSchema' in _ && _.inputJSONSchema\r\n ? _.inputJSONSchema\r\n : (zodToJsonSchema(_.inputSchema as any) as any),\r\n },\r\n }) as OpenAI.ChatCompletionTool,\r\n ),\r\n )\r\n\r\n const openaiSystem = system.map(\r\n s =>\r\n ({\r\n role: 'system',\r\n content: s.text,\r\n }) as OpenAI.ChatCompletionMessageParam,\r\n )\r\n\r\n const openaiMessages = convertAnthropicMessagesToOpenAIMessages(messages)\r\n\r\n logSystemPromptConstruction({\r\n basePrompt: systemPrompt.join('\\n'),\r\n kodeContext: generateKodeContext() || '',\r\n reminders: [],\r\n finalPrompt: systemPrompt.join('\\n'),\r\n })\r\n\r\n let start = Date.now()\r\n\r\n type AdapterExecutionContext = {\r\n adapter: ReturnType<typeof ModelAdapterFactory.createAdapter>\r\n request: any\r\n shouldUseResponses: boolean\r\n }\r\n\r\n type QueryResult = {\r\n assistantMessage: AssistantMessage\r\n rawResponse?: any\r\n apiFormat: 'openai'\r\n }\r\n\r\n let adapterContext: AdapterExecutionContext | null = null\r\n\r\n if (modelProfile && modelProfile.modelName) {\r\n debugLogger.api('CHECKING_ADAPTER_SYSTEM', {\r\n modelProfileName: modelProfile.modelName,\r\n modelName: modelProfile.modelName,\r\n provider: modelProfile.provider,\r\n requestId: getCurrentRequest()?.id,\r\n })\r\n\r\n const USE_NEW_ADAPTER_SYSTEM = process.env.USE_NEW_ADAPTERS !== 'false'\r\n\r\n if (USE_NEW_ADAPTER_SYSTEM) {\r\n const shouldUseResponses =\r\n ModelAdapterFactory.shouldUseResponsesAPI(modelProfile)\r\n\r\n if (shouldUseResponses) {\r\n const adapter = ModelAdapterFactory.createAdapter(modelProfile)\r\n const reasoningEffort = await getReasoningEffort(modelProfile, messages)\r\n\r\n let verbosity: 'low' | 'medium' | 'high' = 'medium'\r\n const modelNameLower = modelProfile.modelName.toLowerCase()\r\n if (modelNameLower.includes('high')) {\r\n verbosity = 'high'\r\n } else if (modelNameLower.includes('low')) {\r\n verbosity = 'low'\r\n }\r\n\r\n const unifiedParams: UnifiedRequestParams = {\r\n messages: openaiMessages,\r\n systemPrompt: openaiSystem.map(s => s.content as string),\r\n tools,\r\n maxTokens:\r\n options?.maxTokens ?? getMaxTokensFromProfile(modelProfile),\r\n stream: config.stream,\r\n reasoningEffort: reasoningEffort as any,\r\n temperature:\r\n options?.temperature ??\r\n (isGPT5Model(model) ? 1 : MAIN_QUERY_TEMPERATURE),\r\n previousResponseId: toolUseContext?.responseState?.previousResponseId,\r\n verbosity,\r\n ...(options?.stopSequences && options.stopSequences.length > 0\r\n ? { stopSequences: options.stopSequences }\r\n : {}),\r\n }\r\n\r\n adapterContext = {\r\n adapter,\r\n request: adapter.createRequest(unifiedParams),\r\n shouldUseResponses: true,\r\n }\r\n }\r\n }\r\n }\r\n\r\n let queryResult: QueryResult\r\n let startIncludingRetries = Date.now()\r\n\r\n try {\r\n queryResult = await withRetry(\r\n async () => {\r\n start = Date.now()\r\n\r\n if (adapterContext) {\r\n if (adapterContext.shouldUseResponses) {\r\n const { callGPT5ResponsesAPI } = await import('./openai')\r\n\r\n const response = await callGPT5ResponsesAPI(\r\n modelProfile,\r\n adapterContext.request,\r\n signal,\r\n )\r\n\r\n const unifiedResponse =\r\n await adapterContext.adapter.parseResponse(response)\r\n\r\n const assistantMessage = buildAssistantMessageFromUnifiedResponse(\r\n unifiedResponse,\r\n start,\r\n )\r\n assistantMessage.message.usage = normalizeUsage(\r\n assistantMessage.message.usage,\r\n )\r\n\r\n return {\r\n assistantMessage,\r\n rawResponse: unifiedResponse,\r\n apiFormat: 'openai',\r\n }\r\n }\r\n\r\n const s = await getCompletionWithProfile(\r\n modelProfile,\r\n adapterContext.request,\r\n 0,\r\n 10,\r\n signal,\r\n )\r\n let finalResponse\r\n if (config.stream) {\r\n finalResponse = await handleMessageStream(\r\n s as ChatCompletionStream,\r\n signal,\r\n )\r\n } else {\r\n finalResponse = s\r\n }\r\n\r\n const message = convertOpenAIResponseToAnthropic(finalResponse, tools)\r\n const assistantMsg: AssistantMessage = {\r\n type: 'assistant',\r\n message: message as any,\r\n costUSD: 0,\r\n durationMs: Date.now() - start,\r\n uuid: `${Date.now()}-${Math.random()\r\n .toString(36)\r\n .substr(2, 9)}` as any,\r\n }\r\n\r\n return {\r\n assistantMessage: assistantMsg,\r\n rawResponse: finalResponse,\r\n apiFormat: 'openai',\r\n }\r\n }\r\n\r\n const maxTokens =\r\n options?.maxTokens ?? getMaxTokensFromProfile(modelProfile)\r\n const isGPT5 = isGPT5Model(model)\r\n\r\n const opts: OpenAI.ChatCompletionCreateParams = {\r\n model,\r\n ...(isGPT5\r\n ? { max_completion_tokens: maxTokens }\r\n : { max_tokens: maxTokens }),\r\n messages: [...openaiSystem, ...openaiMessages],\r\n temperature:\r\n options?.temperature ?? (isGPT5 ? 1 : MAIN_QUERY_TEMPERATURE),\r\n }\r\n if (options?.stopSequences && options.stopSequences.length > 0) {\r\n ;(opts as any).stop = options.stopSequences\r\n }\r\n if (config.stream) {\r\n ;(opts as OpenAI.ChatCompletionCreateParams).stream = true\r\n opts.stream_options = {\r\n include_usage: true,\r\n }\r\n }\r\n\r\n if (toolSchemas.length > 0) {\r\n opts.tools = toolSchemas\r\n opts.tool_choice = 'auto'\r\n }\r\n const reasoningEffort = await getReasoningEffort(modelProfile, messages)\r\n if (reasoningEffort) {\r\n opts.reasoning_effort = reasoningEffort\r\n }\r\n\r\n const completionFunction = isGPT5Model(modelProfile?.modelName || '')\r\n ? getGPT5CompletionWithProfile\r\n : getCompletionWithProfile\r\n const s = await completionFunction(modelProfile, opts, 0, 10, signal)\r\n let finalResponse\r\n if (opts.stream) {\r\n finalResponse = await handleMessageStream(\r\n s as ChatCompletionStream,\r\n signal,\r\n )\r\n } else {\r\n finalResponse = s\r\n }\r\n const message = convertOpenAIResponseToAnthropic(finalResponse, tools)\r\n const assistantMsg: AssistantMessage = {\r\n type: 'assistant',\r\n message: message as any,\r\n costUSD: 0,\r\n durationMs: Date.now() - start,\r\n uuid: `${Date.now()}-${Math.random()\r\n .toString(36)\r\n .substr(2, 9)}` as any,\r\n }\r\n return {\r\n assistantMessage: assistantMsg,\r\n rawResponse: finalResponse,\r\n apiFormat: 'openai',\r\n }\r\n },\r\n { signal },\r\n )\r\n } catch (error) {\r\n logError(error)\r\n return getAssistantMessageFromError(error)\r\n }\r\n\r\n const durationMs = Date.now() - start\r\n const durationMsIncludingRetries = Date.now() - startIncludingRetries\r\n\r\n const assistantMessage = queryResult.assistantMessage\r\n assistantMessage.message.content = normalizeContentFromAPI(\r\n assistantMessage.message.content || [],\r\n )\r\n\r\n const normalizedUsage = normalizeUsage(assistantMessage.message.usage)\r\n assistantMessage.message.usage = normalizedUsage\r\n\r\n const inputTokens = normalizedUsage.input_tokens ?? 0\r\n const outputTokens = normalizedUsage.output_tokens ?? 0\r\n const cacheReadInputTokens = normalizedUsage.cache_read_input_tokens ?? 0\r\n const cacheCreationInputTokens =\r\n normalizedUsage.cache_creation_input_tokens ?? 0\r\n\r\n const costUSD =\r\n (inputTokens / 1_000_000) * SONNET_COST_PER_MILLION_INPUT_TOKENS +\r\n (outputTokens / 1_000_000) * SONNET_COST_PER_MILLION_OUTPUT_TOKENS +\r\n (cacheReadInputTokens / 1_000_000) *\r\n SONNET_COST_PER_MILLION_PROMPT_CACHE_READ_TOKENS +\r\n (cacheCreationInputTokens / 1_000_000) *\r\n SONNET_COST_PER_MILLION_PROMPT_CACHE_WRITE_TOKENS\r\n\r\n addToTotalCost(costUSD, durationMsIncludingRetries)\r\n\r\n logLLMInteraction({\r\n systemPrompt: systemPrompt.join('\\n'),\r\n messages: [...openaiSystem, ...openaiMessages],\r\n response: assistantMessage.message || queryResult.rawResponse,\r\n usage: {\r\n inputTokens,\r\n outputTokens,\r\n },\r\n timing: {\r\n start,\r\n end: Date.now(),\r\n },\r\n apiFormat: queryResult.apiFormat,\r\n })\r\n\r\n assistantMessage.costUSD = costUSD\r\n assistantMessage.durationMs = durationMs\r\n assistantMessage.uuid = assistantMessage.uuid || (randomUUID() as UUID)\r\n\r\n return assistantMessage\r\n}\r\n\r\nfunction getMaxTokensFromProfile(modelProfile: any): number {\r\n return modelProfile?.maxTokens || 8000\r\n}\r\n\r\nfunction buildAssistantMessageFromUnifiedResponse(\r\n unifiedResponse: any,\r\n startTime: number,\r\n): AssistantMessage {\r\n const contentBlocks = [...(unifiedResponse.content || [])]\r\n\r\n if (unifiedResponse.toolCalls && unifiedResponse.toolCalls.length > 0) {\r\n for (const toolCall of unifiedResponse.toolCalls) {\r\n const tool = toolCall.function\r\n const toolName = tool?.name\r\n let toolArgs = {}\r\n try {\r\n toolArgs = tool?.arguments ? JSON.parse(tool.arguments) : {}\r\n } catch (e) {\r\n }\r\n\r\n contentBlocks.push({\r\n type: 'tool_use',\r\n input: toolArgs,\r\n name: toolName,\r\n id: toolCall.id?.length > 0 ? toolCall.id : nanoid(),\r\n })\r\n }\r\n }\r\n\r\n return {\r\n type: 'assistant',\r\n message: {\r\n role: 'assistant',\r\n content: contentBlocks,\r\n usage: {\r\n input_tokens:\r\n unifiedResponse.usage?.promptTokens ??\r\n unifiedResponse.usage?.input_tokens ??\r\n 0,\r\n output_tokens:\r\n unifiedResponse.usage?.completionTokens ??\r\n unifiedResponse.usage?.output_tokens ??\r\n 0,\r\n prompt_tokens:\r\n unifiedResponse.usage?.promptTokens ??\r\n unifiedResponse.usage?.input_tokens ??\r\n 0,\r\n completion_tokens:\r\n unifiedResponse.usage?.completionTokens ??\r\n unifiedResponse.usage?.output_tokens ??\r\n 0,\r\n promptTokens:\r\n unifiedResponse.usage?.promptTokens ??\r\n unifiedResponse.usage?.input_tokens ??\r\n 0,\r\n completionTokens:\r\n unifiedResponse.usage?.completionTokens ??\r\n unifiedResponse.usage?.output_tokens ??\r\n 0,\r\n totalTokens:\r\n unifiedResponse.usage?.totalTokens ??\r\n (unifiedResponse.usage?.promptTokens ??\r\n unifiedResponse.usage?.input_tokens ??\r\n 0) +\r\n (unifiedResponse.usage?.completionTokens ??\r\n unifiedResponse.usage?.output_tokens ??\r\n 0),\r\n },\r\n },\r\n costUSD: 0,\r\n durationMs: Date.now() - startTime,\r\n uuid: `${Date.now()}-${Math.random().toString(36).substr(2, 9)}` as any,\r\n responseId: unifiedResponse.responseId,\r\n }\r\n}\r\n\r\nfunction normalizeUsage(usage?: any) {\r\n if (!usage) {\r\n return {\r\n input_tokens: 0,\r\n output_tokens: 0,\r\n cache_read_input_tokens: 0,\r\n cache_creation_input_tokens: 0,\r\n }\r\n }\r\n\r\n const inputTokens =\r\n usage.input_tokens ?? usage.prompt_tokens ?? usage.inputTokens ?? 0\r\n const outputTokens =\r\n usage.output_tokens ?? usage.completion_tokens ?? usage.outputTokens ?? 0\r\n const cacheReadInputTokens =\r\n usage.cache_read_input_tokens ??\r\n usage.prompt_token_details?.cached_tokens ??\r\n usage.cacheReadInputTokens ??\r\n 0\r\n const cacheCreationInputTokens =\r\n usage.cache_creation_input_tokens ?? usage.cacheCreatedInputTokens ?? 0\r\n\r\n return {\r\n ...usage,\r\n input_tokens: inputTokens,\r\n output_tokens: outputTokens,\r\n cache_read_input_tokens: cacheReadInputTokens,\r\n cache_creation_input_tokens: cacheCreationInputTokens,\r\n }\r\n}\r\n\r\nfunction getModelInputTokenCostUSD(model: string): number {\r\n for (const providerModels of Object.values(models)) {\r\n const modelInfo = providerModels.find((m: any) => m.model === model)\r\n if (modelInfo) {\r\n return modelInfo.input_cost_per_token || 0\r\n }\r\n }\r\n return 0.000003\r\n}\r\n\r\nfunction getModelOutputTokenCostUSD(model: string): number {\r\n for (const providerModels of Object.values(models)) {\r\n const modelInfo = providerModels.find((m: any) => m.model === model)\r\n if (modelInfo) {\r\n return modelInfo.output_cost_per_token || 0\r\n }\r\n }\r\n return 0.000015\r\n}\r\n\r\nexport async function queryModel(\r\n modelPointer: import('@utils/config').ModelPointerType,\r\n messages: (UserMessage | AssistantMessage)[],\r\n systemPrompt: string[] = [],\r\n signal?: AbortSignal,\r\n): Promise<AssistantMessage> {\r\n return queryLLM(\r\n messages,\r\n systemPrompt,\r\n 0,\r\n [],\r\n signal || new AbortController().signal,\r\n {\r\n safeMode: false,\r\n model: modelPointer,\r\n prependCLISysprompt: true,\r\n },\r\n )\r\n}\r\n\r\n\r\nexport async function queryQuick({\r\n systemPrompt = [],\r\n userPrompt,\r\n assistantPrompt,\r\n enablePromptCaching = false,\r\n signal,\r\n}: {\r\n systemPrompt?: string[]\r\n userPrompt: string\r\n assistantPrompt?: string\r\n enablePromptCaching?: boolean\r\n signal?: AbortSignal\r\n}): Promise<AssistantMessage> {\r\n const messages = [\r\n {\r\n message: { role: 'user', content: userPrompt },\r\n type: 'user',\r\n uuid: randomUUID(),\r\n },\r\n ] as (UserMessage | AssistantMessage)[]\r\n\r\n return queryModel('quick', messages, systemPrompt, signal)\r\n}\r\n", "\r\nimport { MACRO } from '@constants/macros'\r\nimport { PRODUCT_COMMAND } from '@constants/product'\r\n\r\nexport const USER_AGENT = `${PRODUCT_COMMAND}/${MACRO.VERSION} (${process.env.USER_TYPE})`\r\n", "import { createHash, type UUID } from 'crypto'\r\nimport { mkdirSync, readFileSync, writeFileSync } from 'fs'\r\nimport { dirname } from 'path'\r\nimport type { AssistantMessage, UserMessage } from '@query'\r\nimport { existsSync } from 'fs'\r\nimport { env } from '@utils/config/env'\r\nimport { getCwd } from '@utils/state'\r\nimport * as path from 'path'\r\nimport { mapValues } from 'lodash-es'\r\nimport type { ContentBlock } from '@anthropic-ai/sdk/resources/index.mjs'\r\n\r\nexport async function withVCR(\r\n messages: (UserMessage | AssistantMessage)[],\r\n f: () => Promise<AssistantMessage>,\r\n): Promise<AssistantMessage> {\r\n if (process.env.NODE_ENV !== 'test') {\r\n return await f()\r\n }\r\n\r\n const dehydratedInput = mapMessages(\r\n messages.map(_ => _.message.content),\r\n dehydrateValue,\r\n )\r\n const filename = `./fixtures/${dehydratedInput.map(_ => createHash('sha1').update(JSON.stringify(_)).digest('hex').slice(0, 6)).join('-')}.json`\r\n\r\n if (existsSync(filename)) {\r\n const cached = JSON.parse(readFileSync(filename, 'utf-8'))\r\n return mapAssistantMessage(cached.output, hydrateValue)\r\n }\r\n\r\n if (env.isCI) {\r\n process.stderr.write(\r\n `Anthropic API fixture missing. Re-run bun test locally, then commit the result. ${JSON.stringify({ input: dehydratedInput }, null, 2)}\\n`,\r\n )\r\n }\r\n\r\n const result = await f()\r\n if (env.isCI) {\r\n return result\r\n }\r\n\r\n if (!existsSync(dirname(filename))) {\r\n mkdirSync(dirname(filename), { recursive: true })\r\n }\r\n writeFileSync(\r\n filename,\r\n JSON.stringify(\r\n {\r\n input: dehydratedInput,\r\n output: mapAssistantMessage(result, dehydrateValue),\r\n },\r\n null,\r\n 2,\r\n ),\r\n )\r\n return result\r\n}\r\n\r\nfunction mapMessages(\r\n messages: (UserMessage | AssistantMessage)['message']['content'][],\r\n f: (s: unknown) => unknown,\r\n): (UserMessage | AssistantMessage)['message']['content'][] {\r\n return messages.map(_ => {\r\n if (typeof _ === 'string') {\r\n return f(_)\r\n }\r\n return _.map(_ => {\r\n switch (_.type) {\r\n case 'tool_result':\r\n if (typeof _.content === 'string') {\r\n return { ..._, content: f(_.content) }\r\n }\r\n if (Array.isArray(_.content)) {\r\n return {\r\n ..._,\r\n content: _.content.map(_ => {\r\n switch (_.type) {\r\n case 'text':\r\n return { ..._, text: f(_.text) }\r\n case 'image':\r\n return _\r\n }\r\n }),\r\n }\r\n }\r\n return _\r\n case 'text':\r\n return { ..._, text: f(_.text) }\r\n case 'tool_use':\r\n return {\r\n ..._,\r\n input: mapValues(_.input as Record<string, unknown>, f),\r\n }\r\n case 'image':\r\n return _\r\n }\r\n })\r\n }) as (UserMessage | AssistantMessage)['message']['content'][]\r\n}\r\n\r\nfunction mapAssistantMessage(\r\n message: AssistantMessage,\r\n f: (s: unknown) => unknown,\r\n): AssistantMessage {\r\n return {\r\n durationMs: 'DURATION' as unknown as number,\r\n costUSD: 'COST' as unknown as number,\r\n uuid: 'UUID' as unknown as UUID,\r\n message: {\r\n ...message.message,\r\n content: message.message.content\r\n .map(_ => {\r\n switch (_.type) {\r\n case 'text':\r\n return {\r\n ..._,\r\n text: f(_.text) as string,\r\n citations: _.citations || [],\r\n }\r\n case 'tool_use':\r\n return {\r\n ..._,\r\n input: mapValues(_.input as Record<string, unknown>, f),\r\n }\r\n default:\r\n return _\r\n }\r\n })\r\n .filter(Boolean) as ContentBlock[],\r\n },\r\n type: 'assistant',\r\n }\r\n}\r\n\r\nfunction dehydrateValue(s: unknown): unknown {\r\n if (typeof s !== 'string') {\r\n return s\r\n }\r\n const s1 = s\r\n .replace(/num_files=\"\\d+\"/g, 'num_files=\"[NUM]\"')\r\n .replace(/duration_ms=\"\\d+\"/g, 'duration_ms=\"[DURATION]\"')\r\n .replace(/cost_usd=\"\\d+\"/g, 'cost_usd=\"[COST]\"')\r\n .replace(/\\//g, path.sep)\r\n .replaceAll(getCwd(), '[CWD]')\r\n if (s1.includes('Files modified by user:')) {\r\n return 'Files modified by user: [FILES]'\r\n }\r\n return s1\r\n}\r\n\r\nfunction hydrateValue(s: unknown): unknown {\r\n if (typeof s !== 'string') {\r\n return s\r\n }\r\n return s\r\n .replaceAll('[NUM]', '1')\r\n .replaceAll('[DURATION]', '100')\r\n .replaceAll('[CWD]', getCwd())\r\n}\r\n", "import {\r\n ModelCapabilities,\r\n UnifiedRequestParams,\r\n UnifiedResponse,\r\n} from '@newcraw-types/modelCapabilities'\r\nimport { ModelProfile } from '@utils/config'\r\nimport { Tool } from '@tool'\r\n\r\ninterface TokenUsage {\r\n input: number\r\n output: number\r\n total?: number\r\n reasoning?: number\r\n}\r\n\r\nexport type StreamingEvent =\r\n | { type: 'message_start'; message: any; responseId: string }\r\n | { type: 'text_delta'; delta: string; responseId: string }\r\n | { type: 'tool_request'; tool: any }\r\n | { type: 'usage'; usage: TokenUsage }\r\n | { type: 'message_stop'; message: any }\r\n | { type: 'error'; error: string }\r\n\r\nfunction normalizeTokens(apiResponse: any): TokenUsage {\r\n if (!apiResponse || typeof apiResponse !== 'object') {\r\n return { input: 0, output: 0 }\r\n }\r\n\r\n const input =\r\n Number(\r\n apiResponse.prompt_tokens ??\r\n apiResponse.input_tokens ??\r\n apiResponse.promptTokens,\r\n ) || 0\r\n const output =\r\n Number(\r\n apiResponse.completion_tokens ??\r\n apiResponse.output_tokens ??\r\n apiResponse.completionTokens,\r\n ) || 0\r\n const total =\r\n Number(apiResponse.total_tokens ?? apiResponse.totalTokens) || undefined\r\n const reasoning =\r\n Number(apiResponse.reasoning_tokens ?? apiResponse.reasoningTokens) ||\r\n undefined\r\n\r\n return {\r\n input,\r\n output,\r\n total: total && total > 0 ? total : undefined,\r\n reasoning: reasoning && reasoning > 0 ? reasoning : undefined,\r\n }\r\n}\r\n\r\nexport { type TokenUsage, normalizeTokens }\r\n\r\nexport abstract class ModelAPIAdapter {\r\n protected cumulativeUsage: TokenUsage = { input: 0, output: 0 }\r\n\r\n constructor(\r\n protected capabilities: ModelCapabilities,\r\n protected modelProfile: ModelProfile,\r\n ) {}\r\n\r\n abstract createRequest(params: UnifiedRequestParams): any\r\n abstract parseResponse(response: any): Promise<UnifiedResponse>\r\n abstract buildTools(tools: Tool[]): any\r\n\r\n async *parseStreamingResponse?(\r\n response: any,\r\n signal?: AbortSignal,\r\n ): AsyncGenerator<StreamingEvent> {\r\n return\r\n yield\r\n }\r\n\r\n protected resetCumulativeUsage(): void {\r\n this.cumulativeUsage = { input: 0, output: 0 }\r\n }\r\n\r\n protected updateCumulativeUsage(usage: TokenUsage): void {\r\n this.cumulativeUsage.input += usage.input\r\n this.cumulativeUsage.output += usage.output\r\n if (usage.total) {\r\n this.cumulativeUsage.total =\r\n (this.cumulativeUsage.total || 0) + usage.total\r\n }\r\n if (usage.reasoning) {\r\n this.cumulativeUsage.reasoning =\r\n (this.cumulativeUsage.reasoning || 0) + usage.reasoning\r\n }\r\n }\r\n\r\n protected getMaxTokensParam(): string {\r\n return this.capabilities.parameters.maxTokensField\r\n }\r\n\r\n protected getTemperature(): number {\r\n if (this.capabilities.parameters.temperatureMode === 'fixed_one') {\r\n return 1\r\n }\r\n if (this.capabilities.parameters.temperatureMode === 'restricted') {\r\n return Math.min(1, 0.7)\r\n }\r\n return 0.7\r\n }\r\n\r\n protected shouldIncludeReasoningEffort(): boolean {\r\n return this.capabilities.parameters.supportsReasoningEffort\r\n }\r\n\r\n protected shouldIncludeVerbosity(): boolean {\r\n return this.capabilities.parameters.supportsVerbosity\r\n }\r\n}\r\n", "import { ModelAPIAdapter, StreamingEvent, normalizeTokens } from './base'\r\nimport {\r\n UnifiedRequestParams,\r\n UnifiedResponse,\r\n ModelCapabilities,\r\n ReasoningStreamingContext,\r\n} from '@newcraw-types/modelCapabilities'\r\nimport { ModelProfile } from '@utils/config'\r\nimport { Tool, getToolDescription } from '@tool'\r\nimport { zodToJsonSchema } from 'zod-to-json-schema'\r\nimport { debug as debugLogger } from '@utils/log/debugLogger'\r\nimport { logError } from '@utils/log'\r\n\r\nexport { normalizeTokens, type StreamingEvent }\r\n\r\nexport abstract class OpenAIAdapter extends ModelAPIAdapter {\r\n constructor(capabilities: ModelCapabilities, modelProfile: ModelProfile) {\r\n super(capabilities, modelProfile)\r\n }\r\n\r\n async parseResponse(response: any): Promise<UnifiedResponse> {\r\n if (response?.body instanceof ReadableStream) {\r\n const { assistantMessage } =\r\n await this.parseStreamingOpenAIResponse(response)\r\n\r\n return {\r\n id: assistantMessage.responseId,\r\n content: assistantMessage.message.content,\r\n toolCalls: assistantMessage.message.content\r\n .filter((block: any) => block.type === 'tool_use')\r\n .map((block: any) => ({\r\n id: block.id,\r\n type: 'function',\r\n function: {\r\n name: block.name,\r\n arguments: JSON.stringify(block.input),\r\n },\r\n })),\r\n usage: this.normalizeUsageForAdapter(assistantMessage.message.usage),\r\n responseId: assistantMessage.responseId,\r\n }\r\n }\r\n\r\n return this.parseNonStreamingResponse(response)\r\n }\r\n\r\n async *parseStreamingResponse(response: any): AsyncGenerator<StreamingEvent> {\r\n const reader = response.body.getReader()\r\n const decoder = new TextDecoder()\r\n let buffer = ''\r\n\r\n let responseId = response.id || `openai_${Date.now()}`\r\n let hasStarted = false\r\n let accumulatedContent = ''\r\n\r\n const reasoningContext: ReasoningStreamingContext = {\r\n thinkOpen: false,\r\n thinkClosed: false,\r\n sawAnySummary: false,\r\n pendingSummaryParagraph: false,\r\n }\r\n\r\n try {\r\n while (true) {\r\n const { done, value } = await reader.read()\r\n if (done) break\r\n\r\n buffer += decoder.decode(value, { stream: true })\r\n const lines = buffer.split('\\n')\r\n buffer = lines.pop() || ''\r\n\r\n for (const line of lines) {\r\n if (line.trim()) {\r\n const parsed = this.parseSSEChunk(line)\r\n if (parsed) {\r\n if (parsed.id) {\r\n responseId = parsed.id\r\n }\r\n\r\n yield* this.processStreamingChunk(\r\n parsed,\r\n responseId,\r\n hasStarted,\r\n accumulatedContent,\r\n reasoningContext,\r\n )\r\n\r\n const stateUpdate = this.updateStreamingState(\r\n parsed,\r\n accumulatedContent,\r\n )\r\n if (stateUpdate.content) accumulatedContent = stateUpdate.content\r\n if (stateUpdate.hasStarted) hasStarted = true\r\n }\r\n }\r\n }\r\n }\r\n } catch (error) {\r\n logError(error)\r\n debugLogger.warn('OPENAI_ADAPTER_STREAM_READ_ERROR', {\r\n error: error instanceof Error ? error.message : String(error),\r\n })\r\n yield {\r\n type: 'error',\r\n error: error instanceof Error ? error.message : String(error),\r\n }\r\n } finally {\r\n reader.releaseLock()\r\n }\r\n\r\n const finalContent = accumulatedContent\r\n ? [{ type: 'text', text: accumulatedContent, citations: [] }]\r\n : [{ type: 'text', text: '', citations: [] }]\r\n\r\n yield {\r\n type: 'message_stop',\r\n message: {\r\n id: responseId,\r\n role: 'assistant',\r\n content: finalContent,\r\n responseId,\r\n },\r\n }\r\n }\r\n\r\n protected parseSSEChunk(line: string): any | null {\r\n if (line.startsWith('data: ')) {\r\n const data = line.slice(6).trim()\r\n if (data === '[DONE]') {\r\n return null\r\n }\r\n if (data) {\r\n try {\r\n return JSON.parse(data)\r\n } catch (error) {\r\n logError(error)\r\n debugLogger.warn('OPENAI_ADAPTER_SSE_PARSE_ERROR', {\r\n error: error instanceof Error ? error.message : String(error),\r\n })\r\n return null\r\n }\r\n }\r\n }\r\n return null\r\n }\r\n\r\n protected handleTextDelta(\r\n delta: string,\r\n responseId: string,\r\n hasStarted: boolean,\r\n ): StreamingEvent[] {\r\n const events: StreamingEvent[] = []\r\n\r\n if (!hasStarted && delta) {\r\n events.push({\r\n type: 'message_start',\r\n message: {\r\n role: 'assistant',\r\n content: [],\r\n },\r\n responseId,\r\n })\r\n }\r\n\r\n if (delta) {\r\n events.push({\r\n type: 'text_delta',\r\n delta,\r\n responseId,\r\n })\r\n }\r\n\r\n return events\r\n }\r\n\r\n protected normalizeUsageForAdapter(usage?: any) {\r\n if (!usage) {\r\n return {\r\n input_tokens: 0,\r\n output_tokens: 0,\r\n promptTokens: 0,\r\n completionTokens: 0,\r\n totalTokens: 0,\r\n reasoningTokens: 0,\r\n }\r\n }\r\n\r\n const inputTokens =\r\n usage.input_tokens ?? usage.prompt_tokens ?? usage.promptTokens ?? 0\r\n const outputTokens =\r\n usage.output_tokens ??\r\n usage.completion_tokens ??\r\n usage.completionTokens ??\r\n 0\r\n\r\n return {\r\n ...usage,\r\n input_tokens: inputTokens,\r\n output_tokens: outputTokens,\r\n promptTokens: inputTokens,\r\n completionTokens: outputTokens,\r\n totalTokens: usage.totalTokens ?? inputTokens + outputTokens,\r\n reasoningTokens: usage.reasoningTokens ?? 0,\r\n }\r\n }\r\n\r\n protected abstract processStreamingChunk(\r\n parsed: any,\r\n responseId: string,\r\n hasStarted: boolean,\r\n accumulatedContent: string,\r\n reasoningContext?: ReasoningStreamingContext,\r\n ): AsyncGenerator<StreamingEvent>\r\n\r\n protected abstract updateStreamingState(\r\n parsed: any,\r\n accumulatedContent: string,\r\n ): { content?: string; hasStarted?: boolean }\r\n\r\n protected abstract parseNonStreamingResponse(response: any): UnifiedResponse\r\n\r\n protected abstract parseStreamingOpenAIResponse(\r\n response: any,\r\n ): Promise<{ assistantMessage: any; rawResponse: any }>\r\n\r\n public buildTools(tools: Tool[]): any[] {\r\n return tools.map(tool => ({\r\n type: 'function',\r\n function: {\r\n name: tool.name,\r\n description: getToolDescription(tool),\r\n parameters: zodToJsonSchema(tool.inputSchema as any) as any,\r\n },\r\n }))\r\n }\r\n}\r\n", "import { OpenAIAdapter, StreamingEvent, normalizeTokens } from './openaiAdapter'\r\nimport {\r\n UnifiedRequestParams,\r\n UnifiedResponse,\r\n ReasoningStreamingContext,\r\n} from '@newcraw-types/modelCapabilities'\r\nimport { Tool, getToolDescription } from '@tool'\r\nimport { zodToJsonSchema } from 'zod-to-json-schema'\r\nimport { processResponsesStream } from './responsesStreaming'\r\nimport { debug as debugLogger } from '@utils/log/debugLogger'\r\nimport { logError } from '@utils/log'\r\n\r\nexport class ResponsesAPIAdapter extends OpenAIAdapter {\r\n createRequest(params: UnifiedRequestParams): any {\r\n const {\r\n messages,\r\n systemPrompt,\r\n tools,\r\n maxTokens,\r\n reasoningEffort,\r\n stopSequences,\r\n } = params\r\n\r\n const request: any = {\r\n model: this.modelProfile.modelName,\r\n input: this.convertMessagesToInput(messages),\r\n instructions: this.buildInstructions(systemPrompt),\r\n }\r\n\r\n const maxTokensField = this.getMaxTokensParam()\r\n request[maxTokensField] = maxTokens\r\n\r\n if (stopSequences && stopSequences.length > 0) {\r\n request.stop = stopSequences\r\n }\r\n\r\n request.stream =\r\n params.stream !== false && this.capabilities.streaming.supported\r\n\r\n const temperature = this.getTemperature()\r\n if (temperature !== undefined) {\r\n request.temperature = temperature\r\n }\r\n\r\n const include: string[] = []\r\n if (\r\n this.capabilities.parameters.supportsReasoningEffort &&\r\n (this.shouldIncludeReasoningEffort() || reasoningEffort)\r\n ) {\r\n include.push('reasoning.encrypted_content')\r\n request.reasoning = {\r\n effort:\r\n reasoningEffort || this.modelProfile.reasoningEffort || 'medium',\r\n }\r\n }\r\n\r\n if (\r\n this.capabilities.parameters.supportsVerbosity &&\r\n this.shouldIncludeVerbosity()\r\n ) {\r\n let defaultVerbosity: 'low' | 'medium' | 'high' = 'medium'\r\n if (params.verbosity) {\r\n defaultVerbosity = params.verbosity\r\n } else {\r\n const modelNameLower = this.modelProfile.modelName.toLowerCase()\r\n if (modelNameLower.includes('high')) {\r\n defaultVerbosity = 'high'\r\n } else if (modelNameLower.includes('low')) {\r\n defaultVerbosity = 'low'\r\n }\r\n }\r\n\r\n request.text = {\r\n verbosity: defaultVerbosity,\r\n }\r\n }\r\n\r\n if (tools && tools.length > 0) {\r\n request.tools = this.buildTools(tools)\r\n }\r\n\r\n request.tool_choice = 'auto'\r\n\r\n if (this.capabilities.toolCalling.supportsParallelCalls) {\r\n request.parallel_tool_calls = true\r\n }\r\n\r\n request.store = false\r\n\r\n if (\r\n params.previousResponseId &&\r\n this.capabilities.stateManagement.supportsPreviousResponseId\r\n ) {\r\n request.previous_response_id = params.previousResponseId\r\n }\r\n\r\n if (include.length > 0) {\r\n request.include = include\r\n }\r\n\r\n return request\r\n }\r\n\r\n buildTools(tools: Tool[]): any[] {\r\n return tools.map(tool => {\r\n let parameters: Record<string, unknown> | undefined =\r\n tool.inputJSONSchema as any\r\n\r\n if (!parameters && tool.inputSchema) {\r\n const isPlainObject = (obj: any): boolean => {\r\n return obj !== null && typeof obj === 'object' && !Array.isArray(obj)\r\n }\r\n\r\n if (\r\n isPlainObject(tool.inputSchema) &&\r\n ('type' in (tool.inputSchema as any) ||\r\n 'properties' in (tool.inputSchema as any))\r\n ) {\r\n parameters = tool.inputSchema as any\r\n } else {\r\n try {\r\n parameters = zodToJsonSchema(tool.inputSchema as any) as any\r\n } catch (error) {\r\n logError(error)\r\n debugLogger.warn('RESPONSES_API_TOOL_SCHEMA_CONVERSION_FAILED', {\r\n toolName: tool.name,\r\n error: error instanceof Error ? error.message : String(error),\r\n })\r\n parameters = { type: 'object', properties: {} }\r\n }\r\n }\r\n }\r\n\r\n return {\r\n type: 'function',\r\n name: tool.name,\r\n description: getToolDescription(tool),\r\n parameters: (parameters as any) || { type: 'object', properties: {} },\r\n }\r\n })\r\n }\r\n\r\n async parseResponse(response: any): Promise<UnifiedResponse> {\r\n if (response?.body instanceof ReadableStream) {\r\n const { assistantMessage } = await processResponsesStream(\r\n this.parseStreamingResponse(response),\r\n Date.now(),\r\n response.id ?? `resp_${Date.now()}`,\r\n )\r\n\r\n const hasToolUseBlocks = assistantMessage.message.content.some(\r\n (block: any) => block.type === 'tool_use',\r\n )\r\n\r\n return {\r\n id: assistantMessage.responseId,\r\n content: assistantMessage.message.content,\r\n toolCalls: hasToolUseBlocks ? [] : [],\r\n usage: this.normalizeUsageForAdapter(assistantMessage.message.usage),\r\n responseId: assistantMessage.responseId,\r\n }\r\n }\r\n\r\n return this.parseNonStreamingResponse(response)\r\n }\r\n\r\n protected parseNonStreamingResponse(response: any): UnifiedResponse {\r\n let content = response.output_text || ''\r\n\r\n let reasoningContent = ''\r\n if (response.output && Array.isArray(response.output)) {\r\n const messageItems = response.output.filter(\r\n item => item.type === 'message',\r\n )\r\n if (messageItems.length > 0) {\r\n content = messageItems\r\n .map(item => {\r\n if (item.content && Array.isArray(item.content)) {\r\n return item.content\r\n .filter(c => c.type === 'text')\r\n .map(c => c.text)\r\n .join('\\n')\r\n }\r\n return item.content || ''\r\n })\r\n .filter(Boolean)\r\n .join('\\n\\n')\r\n }\r\n\r\n const reasoningItems = response.output.filter(\r\n item => item.type === 'reasoning',\r\n )\r\n if (reasoningItems.length > 0) {\r\n reasoningContent = reasoningItems\r\n .map(item => item.content || '')\r\n .filter(Boolean)\r\n .join('\\n\\n')\r\n }\r\n }\r\n\r\n if (reasoningContent) {\r\n const thinkBlock = `\r\n\r\n${reasoningContent}\r\n\r\n`\r\n content = thinkBlock + content\r\n }\r\n\r\n const toolCalls = this.parseToolCalls(response)\r\n\r\n const contentArray = content\r\n ? [{ type: 'text', text: content, citations: [] }]\r\n : [{ type: 'text', text: '', citations: [] }]\r\n\r\n const promptTokens = response.usage?.input_tokens || 0\r\n const completionTokens = response.usage?.output_tokens || 0\r\n const totalTokens =\r\n response.usage?.total_tokens ?? promptTokens + completionTokens\r\n\r\n return {\r\n id: response.id || `resp_${Date.now()}`,\r\n content: contentArray,\r\n toolCalls,\r\n usage: {\r\n promptTokens,\r\n completionTokens,\r\n reasoningTokens:\r\n response.usage?.output_tokens_details?.reasoning_tokens,\r\n },\r\n responseId: response.id,\r\n }\r\n }\r\n\r\n protected async *processStreamingChunk(\r\n parsed: any,\r\n responseId: string,\r\n hasStarted: boolean,\r\n accumulatedContent: string,\r\n reasoningContext?: ReasoningStreamingContext,\r\n ): AsyncGenerator<StreamingEvent> {\r\n if (parsed.type === 'response.reasoning_summary_part.added') {\r\n const partIndex = parsed.summary_index || 0\r\n\r\n if (!reasoningContext?.thinkingContent) {\r\n reasoningContext!.thinkingContent = ''\r\n reasoningContext!.currentPartIndex = -1\r\n }\r\n\r\n reasoningContext!.currentPartIndex = partIndex\r\n\r\n if (partIndex > 0 && reasoningContext!.thinkingContent) {\r\n reasoningContext!.thinkingContent += '\\n\\n'\r\n\r\n yield {\r\n type: 'text_delta',\r\n delta: '\\n\\n',\r\n responseId,\r\n }\r\n }\r\n\r\n return\r\n }\r\n\r\n if (parsed.type === 'response.reasoning_summary_text.delta') {\r\n const delta = parsed.delta || ''\r\n\r\n if (delta && reasoningContext) {\r\n reasoningContext.thinkingContent += delta\r\n\r\n yield {\r\n type: 'text_delta',\r\n delta,\r\n responseId,\r\n }\r\n }\r\n\r\n return\r\n }\r\n\r\n if (parsed.type === 'response.reasoning_text.delta') {\r\n const delta = parsed.delta || ''\r\n\r\n if (delta && reasoningContext) {\r\n reasoningContext.thinkingContent += delta\r\n\r\n yield {\r\n type: 'text_delta',\r\n delta,\r\n responseId,\r\n }\r\n }\r\n\r\n return\r\n }\r\n\r\n if (parsed.type === 'response.output_text.delta') {\r\n const delta = parsed.delta || ''\r\n if (delta) {\r\n const textEvents = this.handleTextDelta(delta, responseId, hasStarted)\r\n for (const event of textEvents) {\r\n yield event\r\n }\r\n }\r\n }\r\n\r\n if (parsed.type === 'response.output_item.done') {\r\n const item = parsed.item || {}\r\n if (item.type === 'function_call') {\r\n const callId = item.call_id || item.id\r\n const name = item.name\r\n const args = item.arguments\r\n\r\n if (\r\n typeof callId === 'string' &&\r\n typeof name === 'string' &&\r\n typeof args === 'string'\r\n ) {\r\n yield {\r\n type: 'tool_request',\r\n tool: {\r\n id: callId,\r\n name: name,\r\n input: args,\r\n },\r\n }\r\n }\r\n }\r\n }\r\n\r\n if (parsed.usage) {\r\n const normalizedUsage = normalizeTokens(parsed.usage)\r\n\r\n if (parsed.usage.output_tokens_details?.reasoning_tokens) {\r\n normalizedUsage.reasoning =\r\n parsed.usage.output_tokens_details.reasoning_tokens\r\n }\r\n\r\n yield {\r\n type: 'usage',\r\n usage: normalizedUsage,\r\n }\r\n }\r\n }\r\n\r\n protected updateStreamingState(\r\n parsed: any,\r\n accumulatedContent: string,\r\n ): { content?: string; hasStarted?: boolean } {\r\n const state: { content?: string; hasStarted?: boolean } = {}\r\n\r\n if (parsed.type === 'response.output_text.delta' && parsed.delta) {\r\n state.content = accumulatedContent + parsed.delta\r\n state.hasStarted = true\r\n }\r\n\r\n return state\r\n }\r\n\r\n\r\n protected async parseStreamingOpenAIResponse(\r\n response: any,\r\n ): Promise<{ assistantMessage: any; rawResponse: any }> {\r\n const { processResponsesStream } = await import('./responsesStreaming')\r\n\r\n return await processResponsesStream(\r\n this.parseStreamingResponse(response),\r\n Date.now(),\r\n response.id ?? `resp_${Date.now()}`,\r\n )\r\n }\r\n\r\n protected normalizeUsageForAdapter(usage?: any) {\r\n const baseUsage = super.normalizeUsageForAdapter(usage)\r\n\r\n return {\r\n ...baseUsage,\r\n reasoningTokens: usage?.output_tokens_details?.reasoning_tokens ?? 0,\r\n }\r\n }\r\n\r\n private convertMessagesToInput(messages: any[]): any[] {\r\n const inputItems = []\r\n\r\n for (const message of messages) {\r\n const role = message.role\r\n\r\n if (role === 'tool') {\r\n const callId = message.tool_call_id || message.id\r\n if (typeof callId === 'string' && callId) {\r\n let content = message.content || ''\r\n if (Array.isArray(content)) {\r\n const texts = []\r\n for (const part of content) {\r\n if (typeof part === 'object' && part !== null) {\r\n const t = part.text || part.content\r\n if (typeof t === 'string' && t) {\r\n texts.push(t)\r\n }\r\n }\r\n }\r\n content = texts.join('\\n')\r\n }\r\n if (typeof content === 'string') {\r\n inputItems.push({\r\n type: 'function_call_output',\r\n call_id: callId,\r\n output: content,\r\n })\r\n }\r\n }\r\n continue\r\n }\r\n\r\n if (role === 'assistant' && Array.isArray(message.tool_calls)) {\r\n for (const tc of message.tool_calls) {\r\n if (typeof tc !== 'object' || tc === null) {\r\n continue\r\n }\r\n const tcType = tc.type || 'function'\r\n if (tcType !== 'function') {\r\n continue\r\n }\r\n const callId = tc.id || tc.call_id\r\n const fn = tc.function\r\n const name = typeof fn === 'object' && fn !== null ? fn.name : null\r\n const args =\r\n typeof fn === 'object' && fn !== null ? fn.arguments : null\r\n\r\n if (\r\n typeof callId === 'string' &&\r\n typeof name === 'string' &&\r\n typeof args === 'string'\r\n ) {\r\n inputItems.push({\r\n type: 'function_call',\r\n name: name,\r\n arguments: args,\r\n call_id: callId,\r\n })\r\n }\r\n }\r\n continue\r\n }\r\n\r\n const content = message.content || ''\r\n const contentItems = []\r\n\r\n if (Array.isArray(content)) {\r\n for (const part of content) {\r\n if (typeof part !== 'object' || part === null) continue\r\n const ptype = part.type\r\n if (ptype === 'text') {\r\n const text = part.text || part.content || ''\r\n if (typeof text === 'string' && text) {\r\n const kind = role === 'assistant' ? 'output_text' : 'input_text'\r\n contentItems.push({ type: kind, text: text })\r\n }\r\n } else if (ptype === 'image_url') {\r\n const image = part.image_url\r\n const url =\r\n typeof image === 'object' && image !== null ? image.url : image\r\n if (typeof url === 'string' && url) {\r\n contentItems.push({ type: 'input_image', image_url: url })\r\n }\r\n }\r\n }\r\n } else if (typeof content === 'string' && content) {\r\n const kind = role === 'assistant' ? 'output_text' : 'input_text'\r\n contentItems.push({ type: kind, text: content })\r\n }\r\n\r\n if (contentItems.length) {\r\n const roleOut = role === 'assistant' ? 'assistant' : 'user'\r\n inputItems.push({\r\n type: 'message',\r\n role: roleOut,\r\n content: contentItems,\r\n })\r\n }\r\n }\r\n\r\n return inputItems\r\n }\r\n\r\n private buildInstructions(systemPrompt: string[]): string {\r\n const systemContent = systemPrompt\r\n .filter(content => content.trim())\r\n .join('\\n\\n')\r\n\r\n return systemContent\r\n }\r\n\r\n private parseToolCalls(response: any): any[] {\r\n if (!response.output || !Array.isArray(response.output)) {\r\n return []\r\n }\r\n\r\n const toolCalls = []\r\n\r\n for (const item of response.output) {\r\n if (item.type === 'function_call') {\r\n const callId = item.call_id || item.id\r\n const name = item.name || ''\r\n const args = item.arguments || '{}'\r\n\r\n if (\r\n typeof callId === 'string' &&\r\n typeof name === 'string' &&\r\n typeof args === 'string'\r\n ) {\r\n toolCalls.push({\r\n id: callId,\r\n type: 'function',\r\n function: {\r\n name: name,\r\n arguments: args,\r\n },\r\n })\r\n }\r\n } else if (item.type === 'tool_call') {\r\n const callId =\r\n item.id || `tool_${Math.random().toString(36).substring(2, 15)}`\r\n toolCalls.push({\r\n id: callId,\r\n type: 'tool_call',\r\n name: item.name,\r\n arguments: item.arguments,\r\n })\r\n }\r\n }\r\n\r\n return toolCalls\r\n }\r\n\r\n private applyReasoningToMessage(\r\n message: any,\r\n reasoningSummaryText: string,\r\n reasoningFullText: string,\r\n ): any {\r\n const rtxtParts = []\r\n if (\r\n typeof reasoningSummaryText === 'string' &&\r\n reasoningSummaryText.trim()\r\n ) {\r\n rtxtParts.push(reasoningSummaryText)\r\n }\r\n if (typeof reasoningFullText === 'string' && reasoningFullText.trim()) {\r\n rtxtParts.push(reasoningFullText)\r\n }\r\n const rtxt = rtxtParts.filter(p => p).join('\\n\\n')\r\n if (rtxt) {\r\n const thinkBlock = `<think>\\n${rtxt}\\n</think>\\n`\r\n const contentText = message.content || ''\r\n message.content =\r\n thinkBlock + (typeof contentText === 'string' ? contentText : '')\r\n }\r\n return message\r\n }\r\n}\r\n", "import { OpenAIAdapter, StreamingEvent, normalizeTokens } from './openaiAdapter'\r\nimport {\r\n UnifiedRequestParams,\r\n UnifiedResponse,\r\n ReasoningStreamingContext,\r\n} from '@newcraw-types/modelCapabilities'\r\nimport { Tool, getToolDescription } from '@tool'\r\nimport { zodToJsonSchema } from 'zod-to-json-schema'\r\nimport { setRequestStatus } from '@utils/session/requestStatus'\r\n\r\nexport class ChatCompletionsAdapter extends OpenAIAdapter {\r\n createRequest(params: UnifiedRequestParams): any {\r\n const { messages, systemPrompt, tools, maxTokens, stream } = params\r\n\r\n const fullMessages = this.buildMessages(systemPrompt, messages)\r\n\r\n const request: any = {\r\n model: this.modelProfile.modelName,\r\n messages: fullMessages,\r\n [this.getMaxTokensParam()]: maxTokens,\r\n temperature: this.getTemperature(),\r\n }\r\n\r\n if (tools && tools.length > 0) {\r\n request.tools = this.buildTools(tools)\r\n request.tool_choice = 'auto'\r\n }\r\n\r\n if (\r\n this.capabilities.parameters.supportsReasoningEffort &&\r\n params.reasoningEffort\r\n ) {\r\n request.reasoning_effort = params.reasoningEffort\r\n }\r\n\r\n if (this.capabilities.parameters.supportsVerbosity && params.verbosity) {\r\n request.verbosity = params.verbosity\r\n }\r\n\r\n if (stream && this.capabilities.streaming.supported) {\r\n request.stream = true\r\n if (this.capabilities.streaming.includesUsage) {\r\n request.stream_options = {\r\n include_usage: true,\r\n }\r\n }\r\n }\r\n\r\n if (this.capabilities.parameters.temperatureMode === 'fixed_one') {\r\n delete request.temperature\r\n }\r\n\r\n if (!this.capabilities.streaming.supported) {\r\n delete request.stream\r\n delete request.stream_options\r\n }\r\n\r\n return request\r\n }\r\n\r\n buildTools(tools: Tool[]): any[] {\r\n return tools.map(tool => ({\r\n type: 'function',\r\n function: {\r\n name: tool.name,\r\n description: getToolDescription(tool),\r\n parameters:\r\n tool.inputJSONSchema ||\r\n (zodToJsonSchema(tool.inputSchema as any) as any),\r\n },\r\n }))\r\n }\r\n\r\n\r\n protected parseNonStreamingResponse(response: any): UnifiedResponse {\r\n if (!response || typeof response !== 'object') {\r\n throw new Error('Invalid response: response must be an object')\r\n }\r\n\r\n const choice = response.choices?.[0]\r\n if (!choice) {\r\n throw new Error('Invalid response: no choices found in response')\r\n }\r\n\r\n const message = choice.message || {}\r\n const content = typeof message.content === 'string' ? message.content : ''\r\n const toolCalls = Array.isArray(message.tool_calls)\r\n ? message.tool_calls\r\n : []\r\n\r\n const usage = response.usage || {}\r\n const promptTokens = Number(usage.prompt_tokens) || 0\r\n const completionTokens = Number(usage.completion_tokens) || 0\r\n\r\n return {\r\n id: response.id || `chatcmpl_${Date.now()}`,\r\n content,\r\n toolCalls,\r\n usage: {\r\n promptTokens,\r\n completionTokens,\r\n },\r\n }\r\n }\r\n\r\n private buildMessages(systemPrompt: string[], messages: any[]): any[] {\r\n const systemMessages = systemPrompt.map(prompt => ({\r\n role: 'system',\r\n content: prompt,\r\n }))\r\n\r\n const normalizedMessages = this.normalizeToolMessages(messages)\r\n\r\n return [...systemMessages, ...normalizedMessages]\r\n }\r\n\r\n private normalizeToolMessages(messages: any[]): any[] {\r\n if (!Array.isArray(messages)) {\r\n return []\r\n }\r\n\r\n return messages.map(msg => {\r\n if (!msg || typeof msg !== 'object') {\r\n return msg\r\n }\r\n\r\n if (msg.role === 'tool') {\r\n if (Array.isArray(msg.content)) {\r\n return {\r\n ...msg,\r\n content:\r\n msg.content\r\n .map(c => c?.text || '')\r\n .filter(Boolean)\r\n .join('\\n\\n') || '(empty content)',\r\n }\r\n } else if (typeof msg.content !== 'string') {\r\n return {\r\n ...msg,\r\n content:\r\n msg.content === null || msg.content === undefined\r\n ? '(empty content)'\r\n : JSON.stringify(msg.content),\r\n }\r\n }\r\n }\r\n return msg\r\n })\r\n }\r\n\r\n protected async *processStreamingChunk(\r\n parsed: any,\r\n responseId: string,\r\n hasStarted: boolean,\r\n accumulatedContent: string,\r\n reasoningContext?: ReasoningStreamingContext,\r\n ): AsyncGenerator<StreamingEvent> {\r\n if (!parsed || typeof parsed !== 'object') {\r\n return\r\n }\r\n\r\n const choice = parsed.choices?.[0]\r\n if (choice?.delta && typeof choice.delta === 'object') {\r\n const delta =\r\n typeof choice.delta.content === 'string' ? choice.delta.content : ''\r\n const reasoningDelta =\r\n typeof choice.delta.reasoning_content === 'string'\r\n ? choice.delta.reasoning_content\r\n : ''\r\n const fullDelta = delta + reasoningDelta\r\n\r\n if (fullDelta) {\r\n const textEvents = this.handleTextDelta(\r\n fullDelta,\r\n responseId,\r\n hasStarted,\r\n )\r\n for (const event of textEvents) {\r\n yield event\r\n }\r\n }\r\n }\r\n\r\n if (choice?.delta?.tool_calls && Array.isArray(choice.delta.tool_calls)) {\r\n for (const toolCall of choice.delta.tool_calls) {\r\n if (toolCall && typeof toolCall === 'object') {\r\n yield {\r\n type: 'tool_request',\r\n tool: {\r\n id: toolCall.id || `tool_${Date.now()}`,\r\n name: toolCall.function?.name || 'unknown',\r\n input: toolCall.function?.arguments || '{}',\r\n },\r\n }\r\n }\r\n }\r\n }\r\n\r\n if (parsed.usage && typeof parsed.usage === 'object') {\r\n const normalizedUsage = normalizeTokens(parsed.usage)\r\n this.updateCumulativeUsage(normalizedUsage)\r\n yield {\r\n type: 'usage',\r\n usage: { ...this.cumulativeUsage },\r\n }\r\n }\r\n }\r\n\r\n protected updateStreamingState(\r\n parsed: any,\r\n accumulatedContent: string,\r\n ): { content?: string; hasStarted?: boolean } {\r\n const state: { content?: string; hasStarted?: boolean } = {}\r\n\r\n const choice = parsed.choices?.[0]\r\n if (choice?.delta) {\r\n const delta = choice.delta.content || ''\r\n const reasoningDelta = choice.delta.reasoning_content || ''\r\n const fullDelta = delta + reasoningDelta\r\n\r\n if (fullDelta) {\r\n state.content = accumulatedContent + fullDelta\r\n state.hasStarted = true\r\n }\r\n }\r\n\r\n return state\r\n }\r\n\r\n protected async parseStreamingOpenAIResponse(\r\n response: any,\r\n signal?: AbortSignal,\r\n ): Promise<{ assistantMessage: any; rawResponse: any }> {\r\n const contentBlocks: any[] = []\r\n const usage: any = {\r\n prompt_tokens: 0,\r\n completion_tokens: 0,\r\n }\r\n\r\n let responseId = response.id || `chatcmpl_${Date.now()}`\r\n const pendingToolCalls: any[] = []\r\n let hasMarkedStreaming = false\r\n\r\n try {\r\n this.resetCumulativeUsage()\r\n\r\n for await (const event of this.parseStreamingResponse(response)) {\r\n if (signal?.aborted) {\r\n throw new Error('Stream aborted by user')\r\n }\r\n\r\n if (event.type === 'message_start') {\r\n responseId = event.responseId || responseId\r\n continue\r\n }\r\n\r\n if (event.type === 'text_delta') {\r\n if (!hasMarkedStreaming) {\r\n setRequestStatus({ kind: 'streaming' })\r\n hasMarkedStreaming = true\r\n }\r\n const last = contentBlocks[contentBlocks.length - 1]\r\n if (!last || last.type !== 'text') {\r\n contentBlocks.push({\r\n type: 'text',\r\n text: event.delta,\r\n citations: [],\r\n })\r\n } else {\r\n last.text += event.delta\r\n }\r\n continue\r\n }\r\n\r\n if (event.type === 'tool_request') {\r\n setRequestStatus({ kind: 'tool', detail: event.tool?.name })\r\n pendingToolCalls.push(event.tool)\r\n continue\r\n }\r\n\r\n if (event.type === 'usage') {\r\n usage.prompt_tokens = event.usage.input\r\n usage.completion_tokens = event.usage.output\r\n usage.totalTokens =\r\n event.usage.total ?? event.usage.input + event.usage.output\r\n usage.promptTokens = event.usage.input\r\n usage.completionTokens = event.usage.output\r\n continue\r\n }\r\n }\r\n } catch (error) {\r\n if (signal?.aborted) {\r\n const assistantMessage = {\r\n type: 'assistant',\r\n message: {\r\n role: 'assistant',\r\n content: contentBlocks,\r\n usage: {\r\n input_tokens: usage.prompt_tokens ?? 0,\r\n output_tokens: usage.completion_tokens ?? 0,\r\n prompt_tokens: usage.prompt_tokens ?? 0,\r\n completion_tokens: usage.completion_tokens ?? 0,\r\n totalTokens:\r\n (usage.prompt_tokens || 0) + (usage.completion_tokens || 0),\r\n },\r\n },\r\n costUSD: 0,\r\n durationMs: Date.now() - Date.now(),\r\n uuid: `${Date.now()}-${Math.random().toString(36).slice(2, 11)}` as any,\r\n responseId,\r\n }\r\n\r\n return {\r\n assistantMessage,\r\n rawResponse: {\r\n id: responseId,\r\n content: contentBlocks,\r\n usage,\r\n aborted: true,\r\n },\r\n }\r\n }\r\n throw error\r\n }\r\n\r\n for (const toolCall of pendingToolCalls) {\r\n let toolArgs = {}\r\n try {\r\n toolArgs = toolCall.input ? JSON.parse(toolCall.input) : {}\r\n } catch {}\r\n\r\n contentBlocks.push({\r\n type: 'tool_use',\r\n id: toolCall.id,\r\n name: toolCall.name,\r\n input: toolArgs,\r\n })\r\n }\r\n\r\n const assistantMessage = {\r\n type: 'assistant',\r\n message: {\r\n role: 'assistant',\r\n content: contentBlocks,\r\n usage: {\r\n input_tokens: usage.prompt_tokens ?? 0,\r\n output_tokens: usage.completion_tokens ?? 0,\r\n prompt_tokens: usage.prompt_tokens ?? 0,\r\n completion_tokens: usage.completion_tokens ?? 0,\r\n totalTokens:\r\n usage.totalTokens ??\r\n (usage.prompt_tokens || 0) + (usage.completion_tokens || 0),\r\n },\r\n },\r\n costUSD: 0,\r\n durationMs: Date.now() - Date.now(),\r\n uuid: `${Date.now()}-${Math.random().toString(36).slice(2, 11)}` as any,\r\n responseId,\r\n }\r\n\r\n return {\r\n assistantMessage,\r\n rawResponse: {\r\n id: responseId,\r\n content: contentBlocks,\r\n usage,\r\n },\r\n }\r\n }\r\n\r\n protected normalizeUsageForAdapter(usage?: any) {\r\n return super.normalizeUsageForAdapter(usage)\r\n }\r\n}\r\n", "import { ModelCapabilities } from '@newcraw-types/modelCapabilities'\r\n\r\nconst GPT5_CAPABILITIES: ModelCapabilities = {\r\n apiArchitecture: {\r\n primary: 'responses_api',\r\n fallback: 'chat_completions',\r\n },\r\n parameters: {\r\n maxTokensField: 'max_output_tokens',\r\n supportsReasoningEffort: true,\r\n supportsVerbosity: true,\r\n temperatureMode: 'fixed_one',\r\n },\r\n toolCalling: {\r\n mode: 'custom_tools',\r\n supportsFreeform: true,\r\n supportsAllowedTools: true,\r\n supportsParallelCalls: true,\r\n },\r\n stateManagement: {\r\n supportsResponseId: true,\r\n supportsConversationChaining: true,\r\n supportsPreviousResponseId: true,\r\n },\r\n streaming: {\r\n supported: true,\r\n includesUsage: true,\r\n },\r\n}\r\n\r\nconst CHAT_COMPLETIONS_CAPABILITIES: ModelCapabilities = {\r\n apiArchitecture: {\r\n primary: 'chat_completions',\r\n },\r\n parameters: {\r\n maxTokensField: 'max_tokens',\r\n supportsReasoningEffort: false,\r\n supportsVerbosity: false,\r\n temperatureMode: 'flexible',\r\n },\r\n toolCalling: {\r\n mode: 'function_calling',\r\n supportsFreeform: false,\r\n supportsAllowedTools: false,\r\n supportsParallelCalls: true,\r\n },\r\n stateManagement: {\r\n supportsResponseId: false,\r\n supportsConversationChaining: false,\r\n supportsPreviousResponseId: false,\r\n },\r\n streaming: {\r\n supported: true,\r\n includesUsage: true,\r\n },\r\n}\r\n\r\nexport const MODEL_CAPABILITIES_REGISTRY: Record<string, ModelCapabilities> = {\r\n 'gpt-5': GPT5_CAPABILITIES,\r\n 'gpt-5-mini': GPT5_CAPABILITIES,\r\n 'gpt-5-nano': GPT5_CAPABILITIES,\r\n 'gpt-5-chat-latest': GPT5_CAPABILITIES,\r\n 'gpt-5-codex': GPT5_CAPABILITIES,\r\n\r\n 'gpt-4o': CHAT_COMPLETIONS_CAPABILITIES,\r\n 'gpt-4o-mini': CHAT_COMPLETIONS_CAPABILITIES,\r\n 'gpt-4-turbo': CHAT_COMPLETIONS_CAPABILITIES,\r\n 'gpt-4': CHAT_COMPLETIONS_CAPABILITIES,\r\n\r\n 'claude-3-5-sonnet-20241022': CHAT_COMPLETIONS_CAPABILITIES,\r\n 'claude-3-5-haiku-20241022': CHAT_COMPLETIONS_CAPABILITIES,\r\n 'claude-3-opus-20240229': CHAT_COMPLETIONS_CAPABILITIES,\r\n\r\n o1: {\r\n ...CHAT_COMPLETIONS_CAPABILITIES,\r\n parameters: {\r\n ...CHAT_COMPLETIONS_CAPABILITIES.parameters,\r\n maxTokensField: 'max_completion_tokens',\r\n temperatureMode: 'fixed_one',\r\n },\r\n },\r\n 'o1-mini': {\r\n ...CHAT_COMPLETIONS_CAPABILITIES,\r\n parameters: {\r\n ...CHAT_COMPLETIONS_CAPABILITIES.parameters,\r\n maxTokensField: 'max_completion_tokens',\r\n temperatureMode: 'fixed_one',\r\n },\r\n },\r\n 'o1-preview': {\r\n ...CHAT_COMPLETIONS_CAPABILITIES,\r\n parameters: {\r\n ...CHAT_COMPLETIONS_CAPABILITIES.parameters,\r\n maxTokensField: 'max_completion_tokens',\r\n temperatureMode: 'fixed_one',\r\n },\r\n },\r\n}\r\n\r\nexport function inferModelCapabilities(\r\n modelName: string,\r\n): ModelCapabilities | null {\r\n if (!modelName) return null\r\n\r\n const lowerName = modelName.toLowerCase()\r\n\r\n if (lowerName.includes('gpt-5') || lowerName.includes('gpt5')) {\r\n return GPT5_CAPABILITIES\r\n }\r\n\r\n if (lowerName.includes('gpt-6') || lowerName.includes('gpt6')) {\r\n return {\r\n ...GPT5_CAPABILITIES,\r\n streaming: { supported: true, includesUsage: true },\r\n }\r\n }\r\n\r\n if (lowerName.includes('glm-5') || lowerName.includes('glm5')) {\r\n return {\r\n ...CHAT_COMPLETIONS_CAPABILITIES,\r\n toolCalling: {\r\n ...CHAT_COMPLETIONS_CAPABILITIES.toolCalling,\r\n supportsAllowedTools: false,\r\n },\r\n }\r\n }\r\n\r\n if (lowerName.startsWith('o1') || lowerName.includes('o1-')) {\r\n return {\r\n ...CHAT_COMPLETIONS_CAPABILITIES,\r\n parameters: {\r\n ...CHAT_COMPLETIONS_CAPABILITIES.parameters,\r\n maxTokensField: 'max_completion_tokens',\r\n temperatureMode: 'fixed_one',\r\n },\r\n }\r\n }\r\n\r\n return null\r\n}\r\n\r\nconst capabilityCache = new Map<string, ModelCapabilities>()\r\n\r\nexport function getModelCapabilities(modelName: string): ModelCapabilities {\r\n if (capabilityCache.has(modelName)) {\r\n return capabilityCache.get(modelName)!\r\n }\r\n\r\n if (MODEL_CAPABILITIES_REGISTRY[modelName]) {\r\n const capabilities = MODEL_CAPABILITIES_REGISTRY[modelName]\r\n capabilityCache.set(modelName, capabilities)\r\n return capabilities\r\n }\r\n\r\n const inferred = inferModelCapabilities(modelName)\r\n if (inferred) {\r\n capabilityCache.set(modelName, inferred)\r\n return inferred\r\n }\r\n\r\n const defaultCapabilities = CHAT_COMPLETIONS_CAPABILITIES\r\n capabilityCache.set(modelName, defaultCapabilities)\r\n return defaultCapabilities\r\n}\r\n", "import { ModelAPIAdapter } from './adapters/base'\r\nimport { ResponsesAPIAdapter } from './adapters/responsesAPI'\r\nimport { ChatCompletionsAdapter } from './adapters/chatCompletions'\r\nimport { getModelCapabilities } from '@constants/modelCapabilities'\r\nimport { ModelProfile, getGlobalConfig } from '@utils/config'\r\nimport { ModelCapabilities } from '@newcraw-types/modelCapabilities'\r\n\r\nexport class ModelAdapterFactory {\r\n static createAdapter(modelProfile: ModelProfile): ModelAPIAdapter {\r\n const capabilities = getModelCapabilities(modelProfile.modelName)\r\n\r\n const apiType = this.determineAPIType(modelProfile, capabilities)\r\n\r\n switch (apiType) {\r\n case 'responses_api':\r\n return new ResponsesAPIAdapter(capabilities, modelProfile)\r\n case 'chat_completions':\r\n default:\r\n return new ChatCompletionsAdapter(capabilities, modelProfile)\r\n }\r\n }\r\n\r\n private static determineAPIType(\r\n modelProfile: ModelProfile,\r\n capabilities: ModelCapabilities,\r\n ): 'responses_api' | 'chat_completions' {\r\n if (capabilities.apiArchitecture.primary !== 'responses_api') {\r\n return 'chat_completions'\r\n }\r\n\r\n const isOfficialOpenAI =\r\n !modelProfile.baseURL || modelProfile.baseURL.includes('api.openai.com')\r\n\r\n if (!isOfficialOpenAI) {\r\n if (capabilities.apiArchitecture.fallback === 'chat_completions') {\r\n return capabilities.apiArchitecture.primary\r\n }\r\n return capabilities.apiArchitecture.primary\r\n }\r\n\r\n\r\n return capabilities.apiArchitecture.primary\r\n }\r\n\r\n static shouldUseResponsesAPI(modelProfile: ModelProfile): boolean {\r\n const capabilities = getModelCapabilities(modelProfile.modelName)\r\n const apiType = this.determineAPIType(modelProfile, capabilities)\r\n return apiType === 'responses_api'\r\n }\r\n}\r\n", "interface ConversationState {\r\n previousResponseId?: string\r\n lastUpdate: number\r\n}\r\n\r\nclass ResponseStateManager {\r\n private conversationStates = new Map<string, ConversationState>()\r\n\r\n private readonly CLEANUP_INTERVAL = 60 * 60 * 1000\r\n\r\n constructor() {\r\n setInterval(() => {\r\n this.cleanup()\r\n }, this.CLEANUP_INTERVAL)\r\n }\r\n\r\n setPreviousResponseId(conversationId: string, responseId: string): void {\r\n this.conversationStates.set(conversationId, {\r\n previousResponseId: responseId,\r\n lastUpdate: Date.now(),\r\n })\r\n }\r\n\r\n getPreviousResponseId(conversationId: string): string | undefined {\r\n const state = this.conversationStates.get(conversationId)\r\n if (state) {\r\n state.lastUpdate = Date.now()\r\n return state.previousResponseId\r\n }\r\n return undefined\r\n }\r\n\r\n clearConversation(conversationId: string): void {\r\n this.conversationStates.delete(conversationId)\r\n }\r\n\r\n clearAll(): void {\r\n this.conversationStates.clear()\r\n }\r\n\r\n private cleanup(): void {\r\n const now = Date.now()\r\n for (const [conversationId, state] of this.conversationStates.entries()) {\r\n if (now - state.lastUpdate > this.CLEANUP_INTERVAL) {\r\n this.conversationStates.delete(conversationId)\r\n }\r\n }\r\n }\r\n\r\n getStateSize(): number {\r\n return this.conversationStates.size\r\n }\r\n}\r\n\r\nexport const responseStateManager = new ResponseStateManager()\r\n\r\nexport function getConversationId(\r\n agentId?: string,\r\n messageId?: string,\r\n): string {\r\n return (\r\n agentId ||\r\n messageId ||\r\n `conv_${Date.now()}_${Math.random().toString(36).substr(2, 9)}`\r\n )\r\n}\r\n", "type PartialJsonToken =\r\n | { type: 'brace'; value: '{' | '}' }\r\n | { type: 'paren'; value: '[' | ']' }\r\n | { type: 'separator'; value: ':' }\r\n | { type: 'delimiter'; value: ',' }\r\n | { type: 'string'; value: string }\r\n | { type: 'number'; value: string }\r\n | { type: 'name'; value: 'true' | 'false' | 'null' }\r\n\r\nfunction tokenizePartialJson(input: string): PartialJsonToken[] {\r\n let index = 0\r\n const tokens: PartialJsonToken[] = []\r\n\r\n while (index < input.length) {\r\n let ch = input[index]\r\n\r\n if (ch === '\\\\') {\r\n index++\r\n continue\r\n }\r\n\r\n if (ch === '{') {\r\n tokens.push({ type: 'brace', value: '{' })\r\n index++\r\n continue\r\n }\r\n if (ch === '}') {\r\n tokens.push({ type: 'brace', value: '}' })\r\n index++\r\n continue\r\n }\r\n if (ch === '[') {\r\n tokens.push({ type: 'paren', value: '[' })\r\n index++\r\n continue\r\n }\r\n if (ch === ']') {\r\n tokens.push({ type: 'paren', value: ']' })\r\n index++\r\n continue\r\n }\r\n if (ch === ':') {\r\n tokens.push({ type: 'separator', value: ':' })\r\n index++\r\n continue\r\n }\r\n if (ch === ',') {\r\n tokens.push({ type: 'delimiter', value: ',' })\r\n index++\r\n continue\r\n }\r\n\r\n if (ch === '\"') {\r\n let value = ''\r\n let incomplete = false\r\n\r\n ch = input[++index]\r\n while (ch !== '\"') {\r\n if (index === input.length) {\r\n incomplete = true\r\n break\r\n }\r\n if (ch === '\\\\') {\r\n if (++index === input.length) {\r\n incomplete = true\r\n break\r\n }\r\n value += ch + input[index]\r\n ch = input[++index]\r\n } else {\r\n value += ch\r\n ch = input[++index]\r\n }\r\n }\r\n\r\n ch = input[++index]\r\n if (!incomplete) tokens.push({ type: 'string', value })\r\n continue\r\n }\r\n\r\n if (ch && /\\s/.test(ch)) {\r\n index++\r\n continue\r\n }\r\n\r\n const digit = /[0-9]/\r\n if ((ch && digit.test(ch)) || ch === '-' || ch === '.') {\r\n let value = ''\r\n if (ch === '-') {\r\n value += ch\r\n ch = input[++index]\r\n }\r\n while ((ch && digit.test(ch)) || ch === '.') {\r\n value += ch\r\n ch = input[++index]\r\n }\r\n tokens.push({ type: 'number', value })\r\n continue\r\n }\r\n\r\n const alpha = /[a-z]/i\r\n if (ch && alpha.test(ch)) {\r\n let value = ''\r\n while (ch && alpha.test(ch)) {\r\n if (index === input.length) break\r\n value += ch\r\n ch = input[++index]\r\n }\r\n\r\n if (value === 'true' || value === 'false' || value === 'null') {\r\n tokens.push({ type: 'name', value })\r\n } else {\r\n index++\r\n }\r\n continue\r\n }\r\n\r\n index++\r\n }\r\n\r\n return tokens\r\n}\r\n\r\nfunction trimTrailingIncompleteTokens(\r\n tokens: PartialJsonToken[],\r\n): PartialJsonToken[] {\r\n if (tokens.length === 0) return tokens\r\n const last = tokens[tokens.length - 1]!\r\n\r\n if (last.type === 'separator') {\r\n return trimTrailingIncompleteTokens(tokens.slice(0, -1))\r\n }\r\n\r\n if (last.type === 'number') {\r\n const lastChar = last.value[last.value.length - 1]\r\n if (lastChar === '.' || lastChar === '-') {\r\n return trimTrailingIncompleteTokens(tokens.slice(0, -1))\r\n }\r\n }\r\n\r\n if (last.type === 'string' || last.type === 'number') {\r\n const previous = tokens[tokens.length - 2]\r\n if (previous?.type === 'delimiter') {\r\n return trimTrailingIncompleteTokens(tokens.slice(0, -1))\r\n }\r\n if (previous?.type === 'brace' && previous.value === '{') {\r\n return trimTrailingIncompleteTokens(tokens.slice(0, -1))\r\n }\r\n }\r\n\r\n if (last.type === 'delimiter') {\r\n return trimTrailingIncompleteTokens(tokens.slice(0, -1))\r\n }\r\n\r\n return tokens\r\n}\r\n\r\nfunction closeOpenBrackets(tokens: PartialJsonToken[]): PartialJsonToken[] {\r\n const missingClosers: Array<'}' | ']'> = []\r\n\r\n for (const token of tokens) {\r\n if (token.type === 'brace') {\r\n if (token.value === '{') missingClosers.push('}')\r\n else missingClosers.splice(missingClosers.lastIndexOf('}'), 1)\r\n continue\r\n }\r\n\r\n if (token.type === 'paren') {\r\n if (token.value === '[') missingClosers.push(']')\r\n else missingClosers.splice(missingClosers.lastIndexOf(']'), 1)\r\n }\r\n }\r\n\r\n if (missingClosers.length > 0) {\r\n missingClosers.reverse()\r\n for (const closer of missingClosers) {\r\n if (closer === '}') tokens.push({ type: 'brace', value: '}' })\r\n else tokens.push({ type: 'paren', value: ']' })\r\n }\r\n }\r\n\r\n return tokens\r\n}\r\n\r\nfunction tokensToJson(tokens: PartialJsonToken[]): string {\r\n let out = ''\r\n for (const token of tokens) {\r\n if (token.type === 'string') out += `\"${token.value}\"`\r\n else out += token.value\r\n }\r\n return out\r\n}\r\n\r\nexport function parseToolUsePartialJson(input: string): unknown {\r\n const tokens = tokenizePartialJson(input)\r\n const trimmed = trimTrailingIncompleteTokens(tokens)\r\n const completed = closeOpenBrackets(trimmed)\r\n return JSON.parse(tokensToJson(completed))\r\n}\r\n\r\nexport function parseToolUsePartialJsonOrThrow(input: string): unknown {\r\n try {\r\n return parseToolUsePartialJson(input)\r\n } catch (error) {\r\n throw new Error(\r\n `Unable to parse tool parameter JSON from model. Please retry your request or adjust your prompt. Error: ${String(error)}. JSON: ${input}`,\r\n )\r\n }\r\n}\r\n", "import OpenAI from 'openai'\r\n\r\ntype AnthropicImageBlock = {\r\n type: 'image'\r\n source:\r\n | { type: 'base64'; media_type: string; data: string }\r\n | { type: 'url'; url: string }\r\n}\r\n\r\ntype AnthropicTextBlock = { type: 'text'; text: string }\r\ntype AnthropicToolUseBlock = {\r\n type: 'tool_use'\r\n id: string\r\n name: string\r\n input: unknown\r\n}\r\ntype AnthropicToolResultBlock = {\r\n type: 'tool_result'\r\n tool_use_id: string\r\n content: unknown\r\n}\r\n\r\ntype AnthropicBlock =\r\n | AnthropicTextBlock\r\n | AnthropicImageBlock\r\n | AnthropicToolUseBlock\r\n | AnthropicToolResultBlock\r\n | { type: string; [key: string]: unknown }\r\n\r\ntype AnthropicLikeMessage = {\r\n message: {\r\n role: 'user' | 'assistant'\r\n content: string | AnthropicBlock[] | AnthropicBlock\r\n }\r\n}\r\n\r\nexport function convertAnthropicMessagesToOpenAIMessages(\r\n messages: AnthropicLikeMessage[],\r\n): (\r\n | OpenAI.ChatCompletionMessageParam\r\n | OpenAI.ChatCompletionToolMessageParam\r\n)[] {\r\n const openaiMessages: any[] = []\r\n\r\n const toolResults: Record<string, OpenAI.ChatCompletionToolMessageParam> = {}\r\n\r\n for (const message of messages) {\r\n const blocks: AnthropicBlock[] = []\r\n if (typeof message.message.content === 'string') {\r\n blocks.push({ type: 'text', text: message.message.content })\r\n } else if (Array.isArray(message.message.content)) {\r\n blocks.push(...message.message.content)\r\n } else if (message.message.content) {\r\n blocks.push(message.message.content)\r\n }\r\n\r\n const role = message.message.role\r\n\r\n const userContentParts: any[] = []\r\n const assistantTextParts: string[] = []\r\n const assistantToolCalls: any[] = []\r\n\r\n for (const block of blocks) {\r\n if (block.type === 'text') {\r\n const text =\r\n typeof (block as any).text === 'string' ? (block as any).text : ''\r\n if (!text) continue\r\n if (role === 'user') {\r\n userContentParts.push({ type: 'text', text })\r\n } else if (role === 'assistant') {\r\n assistantTextParts.push(text)\r\n }\r\n continue\r\n }\r\n\r\n if (block.type === 'image' && role === 'user') {\r\n const source = (block as AnthropicImageBlock).source\r\n if (source?.type === 'base64') {\r\n userContentParts.push({\r\n type: 'image_url',\r\n image_url: {\r\n url: `data:${source.media_type};base64,${source.data}`,\r\n },\r\n })\r\n } else if (source?.type === 'url') {\r\n userContentParts.push({\r\n type: 'image_url',\r\n image_url: { url: source.url },\r\n })\r\n }\r\n continue\r\n }\r\n\r\n if (block.type === 'tool_use') {\r\n assistantToolCalls.push({\r\n type: 'function',\r\n function: {\r\n name: (block as AnthropicToolUseBlock).name,\r\n arguments: JSON.stringify((block as AnthropicToolUseBlock).input),\r\n },\r\n id: (block as AnthropicToolUseBlock).id,\r\n })\r\n continue\r\n }\r\n\r\n if (block.type === 'tool_result') {\r\n const toolUseId = (block as AnthropicToolResultBlock).tool_use_id\r\n const rawToolContent = (block as AnthropicToolResultBlock).content\r\n const toolContent =\r\n typeof rawToolContent === 'string'\r\n ? rawToolContent\r\n : JSON.stringify(rawToolContent)\r\n toolResults[toolUseId] = {\r\n role: 'tool',\r\n content: toolContent,\r\n tool_call_id: toolUseId,\r\n }\r\n continue\r\n }\r\n }\r\n\r\n if (role === 'user') {\r\n if (\r\n userContentParts.length === 1 &&\r\n userContentParts[0]?.type === 'text'\r\n ) {\r\n openaiMessages.push({\r\n role: 'user',\r\n content: userContentParts[0].text,\r\n } as any)\r\n } else if (userContentParts.length > 0) {\r\n openaiMessages.push({ role: 'user', content: userContentParts } as any)\r\n }\r\n continue\r\n }\r\n\r\n if (role === 'assistant') {\r\n const text = assistantTextParts.filter(Boolean).join('\\n')\r\n if (assistantToolCalls.length > 0) {\r\n openaiMessages.push({\r\n role: 'assistant',\r\n content: text ? text : undefined,\r\n tool_calls: assistantToolCalls,\r\n } as any)\r\n continue\r\n }\r\n if (text) {\r\n openaiMessages.push({ role: 'assistant', content: text } as any)\r\n }\r\n }\r\n }\r\n\r\n const finalMessages: any[] = []\r\n\r\n for (const message of openaiMessages) {\r\n finalMessages.push(message)\r\n\r\n if ('tool_calls' in message && message.tool_calls) {\r\n for (const toolCall of message.tool_calls) {\r\n if (toolResults[toolCall.id]) {\r\n finalMessages.push(toolResults[toolCall.id])\r\n }\r\n }\r\n }\r\n }\r\n\r\n return finalMessages\r\n}\r\n"],
|
|
5
|
+
"mappings": "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",
|
|
6
|
+
"names": ["_", "zodToJsonSchema", "zodToJsonSchema", "zodToJsonSchema", "processResponsesStream", "content", "zodToJsonSchema", "zodToJsonSchema", "assistantMessage", "convertAnthropicMessagesToOpenAIMessages", "zodToJsonSchema", "assistantMessage", "s", "finalResponse", "message", "assistantMsg"]
|
|
7
|
+
}
|
|
@@ -0,0 +1,15 @@
|
|
|
1
|
+
import { createRequire as __newcrawCreateRequire } from "node:module";
|
|
2
|
+
const require = __newcrawCreateRequire(import.meta.url);
|
|
3
|
+
import {
|
|
4
|
+
fetchAnthropicModels,
|
|
5
|
+
queryLLM,
|
|
6
|
+
queryQuick,
|
|
7
|
+
verifyApiKey
|
|
8
|
+
} from "./chunk-U224EQOS.js";
|
|
9
|
+
import "./chunk-AXWJI6N5.js";
|
|
10
|
+
export {
|
|
11
|
+
fetchAnthropicModels,
|
|
12
|
+
queryLLM,
|
|
13
|
+
queryQuick,
|
|
14
|
+
verifyApiKey
|
|
15
|
+
};
|
|
@@ -0,0 +1,28 @@
|
|
|
1
|
+
import { createRequire as __newcrawCreateRequire } from "node:module";
|
|
2
|
+
const require = __newcrawCreateRequire(import.meta.url);
|
|
3
|
+
import {
|
|
4
|
+
clearAgentCache,
|
|
5
|
+
getActiveAgents,
|
|
6
|
+
getAgentByType,
|
|
7
|
+
getAllAgents,
|
|
8
|
+
getAvailableAgentTypes,
|
|
9
|
+
setFlagAgentsFromCliJson,
|
|
10
|
+
startAgentWatcher,
|
|
11
|
+
stopAgentWatcher
|
|
12
|
+
} from "./chunk-S5Y5IF2H.js";
|
|
13
|
+
import "./chunk-INJSFEKL.js";
|
|
14
|
+
import "./chunk-2UO3BFZH.js";
|
|
15
|
+
import "./chunk-H5BCUDEN.js";
|
|
16
|
+
import "./chunk-3C73U2IU.js";
|
|
17
|
+
import "./chunk-TSGGSPYD.js";
|
|
18
|
+
import "./chunk-AXWJI6N5.js";
|
|
19
|
+
export {
|
|
20
|
+
clearAgentCache,
|
|
21
|
+
getActiveAgents,
|
|
22
|
+
getAgentByType,
|
|
23
|
+
getAllAgents,
|
|
24
|
+
getAvailableAgentTypes,
|
|
25
|
+
setFlagAgentsFromCliJson,
|
|
26
|
+
startAgentWatcher,
|
|
27
|
+
stopAgentWatcher
|
|
28
|
+
};
|
|
@@ -0,0 +1,49 @@
|
|
|
1
|
+
import { createRequire as __newcrawCreateRequire } from "node:module";
|
|
2
|
+
const require = __newcrawCreateRequire(import.meta.url);
|
|
3
|
+
import {
|
|
4
|
+
addMcpServer,
|
|
5
|
+
ensureConfigScope,
|
|
6
|
+
getClients,
|
|
7
|
+
getClientsForCliMcpConfig,
|
|
8
|
+
getMCPCommands,
|
|
9
|
+
getMCPTools,
|
|
10
|
+
getMcpServer,
|
|
11
|
+
getMcprcServerStatus,
|
|
12
|
+
listMCPServers,
|
|
13
|
+
listPluginMCPServers,
|
|
14
|
+
looksLikeMcpUrl,
|
|
15
|
+
normalizeMcpScopeForCli,
|
|
16
|
+
normalizeMcpTransport,
|
|
17
|
+
parseEnvVars,
|
|
18
|
+
parseMcpHeaders,
|
|
19
|
+
removeMcpServer,
|
|
20
|
+
runCommand
|
|
21
|
+
} from "./chunk-L6WKZEK4.js";
|
|
22
|
+
import "./chunk-YYPJWXSA.js";
|
|
23
|
+
import "./chunk-2UO3BFZH.js";
|
|
24
|
+
import "./chunk-LC4CL3YJ.js";
|
|
25
|
+
import "./chunk-SBE6Y327.js";
|
|
26
|
+
import "./chunk-KQSHIOZK.js";
|
|
27
|
+
import "./chunk-H5BCUDEN.js";
|
|
28
|
+
import "./chunk-3C73U2IU.js";
|
|
29
|
+
import "./chunk-TSGGSPYD.js";
|
|
30
|
+
import "./chunk-AXWJI6N5.js";
|
|
31
|
+
export {
|
|
32
|
+
addMcpServer,
|
|
33
|
+
ensureConfigScope,
|
|
34
|
+
getClients,
|
|
35
|
+
getClientsForCliMcpConfig,
|
|
36
|
+
getMCPCommands,
|
|
37
|
+
getMCPTools,
|
|
38
|
+
getMcpServer,
|
|
39
|
+
getMcprcServerStatus,
|
|
40
|
+
listMCPServers,
|
|
41
|
+
listPluginMCPServers,
|
|
42
|
+
looksLikeMcpUrl,
|
|
43
|
+
normalizeMcpScopeForCli,
|
|
44
|
+
normalizeMcpTransport,
|
|
45
|
+
parseEnvVars,
|
|
46
|
+
parseMcpHeaders,
|
|
47
|
+
removeMcpServer,
|
|
48
|
+
runCommand
|
|
49
|
+
};
|