orchajs 0.18.0 → 0.19.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/README.md +63 -8
- package/dist/amarsia/metadata.d.ts +0 -1
- package/dist/amarsia/metadata.js +0 -1
- package/dist/amarsia/sync.d.ts +0 -1
- package/dist/amarsia/sync.js +0 -1
- package/dist/cli-agents-template.d.ts +0 -1
- package/dist/cli-agents-template.js +0 -1
- package/dist/cli.d.ts +0 -1
- package/dist/cli.js +0 -1
- package/dist/compiler/build-project.d.ts +0 -1
- package/dist/compiler/build-project.js +0 -1
- package/dist/compiler/compile.d.ts +0 -1
- package/dist/compiler/compile.js +0 -1
- package/dist/env.d.ts +0 -1
- package/dist/env.js +0 -1
- package/dist/errors.d.ts +0 -1
- package/dist/errors.js +0 -1
- package/dist/file-content.d.ts +0 -1
- package/dist/file-content.js +0 -1
- package/dist/index.d.ts +0 -1
- package/dist/index.js +0 -1
- package/dist/integrations/esbuild.d.ts +0 -1
- package/dist/integrations/esbuild.js +0 -1
- package/dist/orcha.d.ts +0 -1
- package/dist/orcha.js +0 -1
- package/dist/playground/public/app.css +0 -1
- package/dist/playground/public/app.js +0 -1
- package/dist/playground/server.d.ts +0 -1
- package/dist/playground/server.js +0 -1
- package/dist/playground/source.d.ts +0 -1
- package/dist/playground/source.js +0 -1
- package/dist/project-loader.d.ts +0 -1
- package/dist/project-loader.js +0 -1
- package/dist/providers/anthropic.d.ts +0 -1
- package/dist/providers/anthropic.js +0 -1
- package/dist/providers/bedrock.d.ts +0 -1
- package/dist/providers/bedrock.js +0 -1
- package/dist/providers/catalog.d.ts +0 -1
- package/dist/providers/catalog.js +0 -1
- package/dist/providers/deepseek.d.ts +0 -1
- package/dist/providers/deepseek.js +0 -1
- package/dist/providers/dispatcher.d.ts +0 -1
- package/dist/providers/dispatcher.js +0 -1
- package/dist/providers/google-gemini.d.ts +0 -1
- package/dist/providers/google-gemini.js +0 -1
- package/dist/providers/google-genai.d.ts +0 -1
- package/dist/providers/google-genai.js +0 -1
- package/dist/providers/index.d.ts +0 -1
- package/dist/providers/index.js +20 -5
- package/dist/providers/openai.d.ts +0 -1
- package/dist/providers/openai.js +0 -1
- package/dist/providers/sse.d.ts +0 -1
- package/dist/providers/sse.js +0 -1
- package/dist/providers/types.d.ts +0 -1
- package/dist/providers/types.js +0 -1
- package/dist/providers/vertex-ai.d.ts +0 -1
- package/dist/providers/vertex-ai.js +0 -1
- package/dist/runtime/actions/context.d.ts +0 -1
- package/dist/runtime/actions/context.js +0 -1
- package/dist/runtime/actions/execute.d.ts +0 -1
- package/dist/runtime/actions/execute.js +14 -2
- package/dist/runtime/actions/native.d.ts +0 -1
- package/dist/runtime/actions/native.js +0 -1
- package/dist/runtime/actions/sandbox.d.ts +0 -1
- package/dist/runtime/actions/sandbox.js +0 -1
- package/dist/runtime/agent.d.ts +0 -1
- package/dist/runtime/agent.js +0 -1
- package/dist/runtime/context.d.ts +0 -1
- package/dist/runtime/context.js +0 -1
- package/dist/runtime/create-orcha.d.ts +0 -1
- package/dist/runtime/create-orcha.js +0 -1
- package/dist/runtime/execution.d.ts +0 -1
- package/dist/runtime/execution.js +0 -1
- package/dist/runtime/session-events.d.ts +0 -1
- package/dist/runtime/session-events.js +0 -1
- package/dist/runtime/structured-output.d.ts +0 -1
- package/dist/runtime/structured-output.js +0 -1
- package/dist/storage/browser-indexeddb.d.ts +0 -1
- package/dist/storage/browser-indexeddb.js +0 -1
- package/dist/storage/create-store.d.ts +0 -1
- package/dist/storage/create-store.js +0 -1
- package/dist/storage/edge-store.d.ts +0 -1
- package/dist/storage/edge-store.js +0 -1
- package/dist/storage/migrate.d.ts +0 -1
- package/dist/storage/migrate.js +0 -1
- package/dist/storage/node-jsonl.d.ts +0 -1
- package/dist/storage/node-jsonl.js +0 -1
- package/dist/storage/node-sqlite.d.ts +0 -1
- package/dist/storage/node-sqlite.js +1 -2
- package/dist/storage/react-native-jsonl.d.ts +0 -1
- package/dist/storage/react-native-jsonl.js +0 -1
- package/dist/testing.d.ts +0 -1
- package/dist/testing.js +0 -1
- package/dist/types.d.ts +0 -1
- package/dist/types.js +0 -1
- package/dist-cjs/amarsia/metadata.js +0 -1
- package/dist-cjs/amarsia/sync.js +0 -1
- package/dist-cjs/cli-agents-template.js +0 -1
- package/dist-cjs/compiler/build-project.js +0 -1
- package/dist-cjs/compiler/compile.js +0 -1
- package/dist-cjs/env.js +0 -1
- package/dist-cjs/errors.js +0 -1
- package/dist-cjs/file-content.js +0 -1
- package/dist-cjs/index.js +0 -1
- package/dist-cjs/integrations/esbuild.js +0 -1
- package/dist-cjs/orcha.js +0 -1
- package/dist-cjs/playground/server.js +0 -1
- package/dist-cjs/playground/source.js +0 -1
- package/dist-cjs/project-loader.js +0 -1
- package/dist-cjs/providers/anthropic.js +0 -1
- package/dist-cjs/providers/bedrock.js +0 -1
- package/dist-cjs/providers/catalog.js +0 -1
- package/dist-cjs/providers/deepseek.js +0 -1
- package/dist-cjs/providers/dispatcher.js +0 -1
- package/dist-cjs/providers/google-gemini.js +0 -1
- package/dist-cjs/providers/google-genai.js +0 -1
- package/dist-cjs/providers/index.js +16 -3
- package/dist-cjs/providers/openai.js +0 -1
- package/dist-cjs/providers/sse.js +0 -1
- package/dist-cjs/providers/types.js +0 -1
- package/dist-cjs/providers/vertex-ai.js +0 -1
- package/dist-cjs/runtime/actions/context.js +0 -1
- package/dist-cjs/runtime/actions/execute.js +16 -2
- package/dist-cjs/runtime/actions/native.js +0 -1
- package/dist-cjs/runtime/actions/sandbox.js +0 -1
- package/dist-cjs/runtime/agent.js +0 -1
- package/dist-cjs/runtime/context.js +0 -1
- package/dist-cjs/runtime/create-orcha.js +0 -1
- package/dist-cjs/runtime/execution.js +0 -1
- package/dist-cjs/runtime/session-events.js +0 -1
- package/dist-cjs/runtime/structured-output.js +0 -1
- package/dist-cjs/storage/browser-indexeddb.js +0 -1
- package/dist-cjs/storage/create-store.js +0 -1
- package/dist-cjs/storage/edge-store.js +0 -1
- package/dist-cjs/storage/migrate.js +0 -1
- package/dist-cjs/storage/node-jsonl.js +0 -1
- package/dist-cjs/storage/node-sqlite.js +1 -2
- package/dist-cjs/storage/react-native-jsonl.js +0 -1
- package/dist-cjs/testing.js +0 -1
- package/dist-cjs/types/google-genai-sdk.d.js +0 -1
- package/dist-cjs/types.js +0 -1
- package/package.json +33 -9
- package/dist/amarsia/metadata.d.ts.map +0 -1
- package/dist/amarsia/metadata.js.map +0 -1
- package/dist/amarsia/sync.d.ts.map +0 -1
- package/dist/amarsia/sync.js.map +0 -1
- package/dist/cli-agents-template.d.ts.map +0 -1
- package/dist/cli-agents-template.js.map +0 -1
- package/dist/cli.d.ts.map +0 -1
- package/dist/cli.js.map +0 -1
- package/dist/compiler/build-project.d.ts.map +0 -1
- package/dist/compiler/build-project.js.map +0 -1
- package/dist/compiler/compile.d.ts.map +0 -1
- package/dist/compiler/compile.js.map +0 -1
- package/dist/env.d.ts.map +0 -1
- package/dist/env.js.map +0 -1
- package/dist/errors.d.ts.map +0 -1
- package/dist/errors.js.map +0 -1
- package/dist/file-content.d.ts.map +0 -1
- package/dist/file-content.js.map +0 -1
- package/dist/index.d.ts.map +0 -1
- package/dist/index.js.map +0 -1
- package/dist/integrations/esbuild.d.ts.map +0 -1
- package/dist/integrations/esbuild.js.map +0 -1
- package/dist/orcha.d.ts.map +0 -1
- package/dist/orcha.js.map +0 -1
- package/dist/playground/public/app.css.map +0 -7
- package/dist/playground/public/app.js.map +0 -7
- package/dist/playground/server.d.ts.map +0 -1
- package/dist/playground/server.js.map +0 -1
- package/dist/playground/source.d.ts.map +0 -1
- package/dist/playground/source.js.map +0 -1
- package/dist/project-loader.d.ts.map +0 -1
- package/dist/project-loader.js.map +0 -1
- package/dist/providers/anthropic.d.ts.map +0 -1
- package/dist/providers/anthropic.js.map +0 -1
- package/dist/providers/bedrock.d.ts.map +0 -1
- package/dist/providers/bedrock.js.map +0 -1
- package/dist/providers/catalog.d.ts.map +0 -1
- package/dist/providers/catalog.js.map +0 -1
- package/dist/providers/deepseek.d.ts.map +0 -1
- package/dist/providers/deepseek.js.map +0 -1
- package/dist/providers/dispatcher.d.ts.map +0 -1
- package/dist/providers/dispatcher.js.map +0 -1
- package/dist/providers/google-gemini.d.ts.map +0 -1
- package/dist/providers/google-gemini.js.map +0 -1
- package/dist/providers/google-genai.d.ts.map +0 -1
- package/dist/providers/google-genai.js.map +0 -1
- package/dist/providers/index.d.ts.map +0 -1
- package/dist/providers/index.js.map +0 -1
- package/dist/providers/openai.d.ts.map +0 -1
- package/dist/providers/openai.js.map +0 -1
- package/dist/providers/sse.d.ts.map +0 -1
- package/dist/providers/sse.js.map +0 -1
- package/dist/providers/types.d.ts.map +0 -1
- package/dist/providers/types.js.map +0 -1
- package/dist/providers/vertex-ai.d.ts.map +0 -1
- package/dist/providers/vertex-ai.js.map +0 -1
- package/dist/runtime/actions/context.d.ts.map +0 -1
- package/dist/runtime/actions/context.js.map +0 -1
- package/dist/runtime/actions/execute.d.ts.map +0 -1
- package/dist/runtime/actions/execute.js.map +0 -1
- package/dist/runtime/actions/native.d.ts.map +0 -1
- package/dist/runtime/actions/native.js.map +0 -1
- package/dist/runtime/actions/sandbox.d.ts.map +0 -1
- package/dist/runtime/actions/sandbox.js.map +0 -1
- package/dist/runtime/agent.d.ts.map +0 -1
- package/dist/runtime/agent.js.map +0 -1
- package/dist/runtime/context.d.ts.map +0 -1
- package/dist/runtime/context.js.map +0 -1
- package/dist/runtime/create-orcha.d.ts.map +0 -1
- package/dist/runtime/create-orcha.js.map +0 -1
- package/dist/runtime/execution.d.ts.map +0 -1
- package/dist/runtime/execution.js.map +0 -1
- package/dist/runtime/session-events.d.ts.map +0 -1
- package/dist/runtime/session-events.js.map +0 -1
- package/dist/runtime/structured-output.d.ts.map +0 -1
- package/dist/runtime/structured-output.js.map +0 -1
- package/dist/storage/browser-indexeddb.d.ts.map +0 -1
- package/dist/storage/browser-indexeddb.js.map +0 -1
- package/dist/storage/create-store.d.ts.map +0 -1
- package/dist/storage/create-store.js.map +0 -1
- package/dist/storage/edge-store.d.ts.map +0 -1
- package/dist/storage/edge-store.js.map +0 -1
- package/dist/storage/migrate.d.ts.map +0 -1
- package/dist/storage/migrate.js.map +0 -1
- package/dist/storage/node-jsonl.d.ts.map +0 -1
- package/dist/storage/node-jsonl.js.map +0 -1
- package/dist/storage/node-sqlite.d.ts.map +0 -1
- package/dist/storage/node-sqlite.js.map +0 -1
- package/dist/storage/react-native-jsonl.d.ts.map +0 -1
- package/dist/storage/react-native-jsonl.js.map +0 -1
- package/dist/testing.d.ts.map +0 -1
- package/dist/testing.js.map +0 -1
- package/dist/types.d.ts.map +0 -1
- package/dist/types.js.map +0 -1
- package/dist-cjs/amarsia/metadata.js.map +0 -7
- package/dist-cjs/amarsia/sync.js.map +0 -7
- package/dist-cjs/cli-agents-template.js.map +0 -7
- package/dist-cjs/compiler/build-project.js.map +0 -7
- package/dist-cjs/compiler/compile.js.map +0 -7
- package/dist-cjs/env.js.map +0 -7
- package/dist-cjs/errors.js.map +0 -7
- package/dist-cjs/file-content.js.map +0 -7
- package/dist-cjs/index.js.map +0 -7
- package/dist-cjs/integrations/esbuild.js.map +0 -7
- package/dist-cjs/orcha.js.map +0 -7
- package/dist-cjs/playground/server.js.map +0 -7
- package/dist-cjs/playground/source.js.map +0 -7
- package/dist-cjs/project-loader.js.map +0 -7
- package/dist-cjs/providers/anthropic.js.map +0 -7
- package/dist-cjs/providers/bedrock.js.map +0 -7
- package/dist-cjs/providers/catalog.js.map +0 -7
- package/dist-cjs/providers/deepseek.js.map +0 -7
- package/dist-cjs/providers/dispatcher.js.map +0 -7
- package/dist-cjs/providers/google-gemini.js.map +0 -7
- package/dist-cjs/providers/google-genai.js.map +0 -7
- package/dist-cjs/providers/index.js.map +0 -7
- package/dist-cjs/providers/openai.js.map +0 -7
- package/dist-cjs/providers/sse.js.map +0 -7
- package/dist-cjs/providers/types.js.map +0 -7
- package/dist-cjs/providers/vertex-ai.js.map +0 -7
- package/dist-cjs/runtime/actions/context.js.map +0 -7
- package/dist-cjs/runtime/actions/execute.js.map +0 -7
- package/dist-cjs/runtime/actions/native.js.map +0 -7
- package/dist-cjs/runtime/actions/sandbox.js.map +0 -7
- package/dist-cjs/runtime/agent.js.map +0 -7
- package/dist-cjs/runtime/context.js.map +0 -7
- package/dist-cjs/runtime/create-orcha.js.map +0 -7
- package/dist-cjs/runtime/execution.js.map +0 -7
- package/dist-cjs/runtime/session-events.js.map +0 -7
- package/dist-cjs/runtime/structured-output.js.map +0 -7
- package/dist-cjs/storage/browser-indexeddb.js.map +0 -7
- package/dist-cjs/storage/create-store.js.map +0 -7
- package/dist-cjs/storage/edge-store.js.map +0 -7
- package/dist-cjs/storage/migrate.js.map +0 -7
- package/dist-cjs/storage/node-jsonl.js.map +0 -7
- package/dist-cjs/storage/node-sqlite.js.map +0 -7
- package/dist-cjs/storage/react-native-jsonl.js.map +0 -7
- package/dist-cjs/testing.js.map +0 -7
- package/dist-cjs/types/google-genai-sdk.d.js.map +0 -7
- package/dist-cjs/types.js.map +0 -7
|
@@ -1,7 +0,0 @@
|
|
|
1
|
-
{
|
|
2
|
-
"version": 3,
|
|
3
|
-
"sources": ["../../src/providers/bedrock.ts"],
|
|
4
|
-
"sourcesContent": ["import {\n BedrockRuntimeClient,\n ConverseStreamCommand,\n type ContentBlock,\n type ConverseStreamCommandInput,\n type ConverseStreamOutput,\n type DocumentFormat,\n type Message,\n type TokenUsage,\n} from \"@aws-sdk/client-bedrock-runtime\";\nimport { createHash } from \"crypto\";\nimport { basename, extname } from \"path\";\nimport { OrchaError } from \"../errors.js\";\nimport { readLocalFileContent } from \"../file-content.js\";\nimport { parseStructuredOutput } from \"../runtime/structured-output.js\";\nimport type {\n BedrockProviderConfiguration,\n MessageContent,\n ProviderConfiguration,\n} from \"../types.js\";\nimport type {\n ProviderAdapter,\n ProviderAssistantBlock,\n ProviderMessage,\n ProviderRequest,\n ProviderResponse,\n ProviderStopReason,\n ProviderToolCall,\n} from \"./types.js\";\n\ninterface PartialTextBlock {\n type: \"text\";\n text: string;\n}\n\ninterface PartialReasoningBlock {\n type: \"reasoning\";\n text: string;\n signature?: string;\n redactedContent?: Uint8Array;\n}\n\ninterface PartialToolCall {\n type: \"tool_call\";\n callId: string;\n name: string;\n input: string;\n}\n\ntype PartialBlock =\n | PartialTextBlock\n | PartialReasoningBlock\n | PartialToolCall;\n\ntype BedrockDocument =\n | null\n | boolean\n | number\n | string\n | BedrockDocument[]\n | { [key: string]: BedrockDocument };\n\ninterface CollectedBedrockResponse {\n requestId?: string;\n blocks: ProviderAssistantBlock[];\n stopReason?: string;\n usage?: TokenUsage;\n}\n\nexport interface BedrockContentClient {\n send(\n command: ConverseStreamCommand,\n options?: { abortSignal?: AbortSignal },\n ): Promise<{\n stream?: AsyncIterable<ConverseStreamOutput>;\n $metadata: { requestId?: string };\n }>;\n}\n\nexport const bedrockProvider: ProviderAdapter = {\n name: \"bedrock\",\n generate: generateBedrock,\n};\n\nasync function generateBedrock(\n configuration: ProviderConfiguration,\n request: ProviderRequest,\n): Promise<ProviderResponse> {\n const bedrockConfiguration = validateConfiguration(configuration);\n if (request.outputType === \"image\" || request.outputType === \"audio\") {\n throw new OrchaError(\n \"unsupported_provider_capability\",\n `Amazon Bedrock Converse does not support \"${request.outputType}\" as a direct agent output.`,\n );\n }\n\n const client = new BedrockRuntimeClient({\n region: bedrockConfiguration.region,\n ...(bedrockConfiguration.baseUrl\n ? { endpoint: bedrockConfiguration.baseUrl }\n : {}),\n ...(bedrockConfiguration.credentials\n ? { credentials: bedrockConfiguration.credentials }\n : {}),\n });\n return generateBedrockContent(client, request);\n}\n\nexport async function generateBedrockContent(\n client: BedrockContentClient,\n request: ProviderRequest,\n): Promise<ProviderResponse> {\n const input: ConverseStreamCommandInput = {\n modelId: request.model,\n system: [{ text: systemPrompt(request) }],\n messages: await toBedrockMessages(request.messages),\n ...(request.maxTokens\n ? { inferenceConfig: { maxTokens: request.maxTokens } }\n : {}),\n };\n\n if (request.tools.length > 0) {\n input.toolConfig = {\n tools: request.tools.map((tool) => ({\n toolSpec: {\n name: tool.name,\n description: tool.description,\n inputSchema: {\n json: toBedrockDocument(tool.parameters),\n },\n },\n })),\n };\n }\n if (request.reasoningLevel && isAnthropicModel(request.model)) {\n input.additionalModelRequestFields = {\n thinking: { type: \"adaptive\" },\n output_config: { effort: request.reasoningLevel },\n };\n }\n\n const response = await client.send(\n new ConverseStreamCommand(input),\n { abortSignal: request.signal },\n );\n if (!response.stream) {\n throw new Error(\"Amazon Bedrock returned no response stream.\");\n }\n\n const collected = await collectBedrockStream(\n response.stream,\n request,\n response.$metadata.requestId,\n request.publishOutput,\n );\n return toProviderResponse(request, collected);\n}\n\nfunction validateConfiguration(\n configuration: ProviderConfiguration,\n): BedrockProviderConfiguration {\n if (\n !(\"region\" in configuration) ||\n typeof configuration.region !== \"string\" ||\n !configuration.region.trim()\n ) {\n throw new Error(\n 'Missing AWS region in orcha.init({ providers: { bedrock: { region: \"...\" } } }).',\n );\n }\n if (\n configuration.credentials &&\n (!configuration.credentials.accessKeyId.trim() ||\n !configuration.credentials.secretAccessKey.trim())\n ) {\n throw new Error(\n \"Bedrock credentials require accessKeyId and secretAccessKey.\",\n );\n }\n return configuration;\n}\n\nfunction systemPrompt(request: ProviderRequest): string {\n if (request.outputType !== \"json\") {\n return request.systemPrompt;\n }\n return `${request.systemPrompt}\\n\\nReturn only valid JSON matching this JSON Schema:\\n${JSON.stringify(request.outputSchema ?? {})}`;\n}\n\nasync function toBedrockMessages(\n messages: ProviderMessage[],\n): Promise<Message[]> {\n const output: Message[] = [];\n for (const message of messages) {\n if (message.role === \"user\") {\n output.push({\n role: \"user\",\n content:\n typeof message.content === \"string\"\n ? [{ text: message.content }]\n : await Promise.all(\n message.content.map(toBedrockUserBlock),\n ),\n });\n continue;\n }\n if (message.role === \"tool\") {\n output.push({\n role: \"user\",\n content: message.results.map((result) => ({\n toolResult: {\n toolUseId: result.callId,\n content: [\n { json: toBedrockDocument(result.output) },\n ],\n ...(result.isError ? { status: \"error\" as const } : {}),\n },\n })),\n });\n continue;\n }\n\n output.push({\n role: \"assistant\",\n content: message.content.map((block) =>\n toBedrockAssistantBlock(\n block,\n message.provider === \"bedrock\",\n ),\n ),\n });\n }\n return output;\n}\n\nasync function toBedrockUserBlock(\n block: MessageContent,\n): Promise<ContentBlock> {\n if (block.type === \"text\") {\n return { text: block.text };\n }\n if (block.type === \"file\") {\n const file = await readLocalFileContent(block);\n return toBedrockBinaryBlock(\n file.bytes,\n block.mimeType,\n file.fileName,\n );\n }\n if (\n block.type === \"image\" ||\n block.type === \"url\"\n ) {\n const response = await fetch(block.fileUri);\n if (!response.ok) {\n throw new Error(\n `Could not load Bedrock file input: HTTP ${response.status}.`,\n );\n }\n return toBedrockBinaryBlock(\n new Uint8Array(await response.arrayBuffer()),\n block.mimeType,\n fileNameFromUri(block.fileUri),\n );\n }\n throw new OrchaError(\n \"unsupported_content_type\",\n `Amazon Bedrock does not support Orcha content type \"${block.type}\" with MIME type \"${block.mimeType}\".`,\n );\n}\n\nfunction toBedrockBinaryBlock(\n bytes: Uint8Array,\n mimeType: string,\n fileName: string,\n): ContentBlock {\n if (mimeType.startsWith(\"image/\")) {\n return {\n image: {\n format: imageFormat(mimeType),\n source: {\n bytes,\n },\n },\n };\n }\n const format = documentFormat(fileName, mimeType);\n if (format) {\n return {\n document: {\n format,\n name: safeBedrockDocumentName(fileName),\n source: { bytes },\n },\n };\n }\n throw new OrchaError(\n \"unsupported_content_type\",\n `Amazon Bedrock does not support file MIME type \"${mimeType}\".`,\n );\n}\n\nfunction documentFormat(\n fileName: string,\n mimeType: string,\n): DocumentFormat | undefined {\n const extension = extname(fileName).slice(1).toLowerCase();\n if (\n [\"csv\", \"doc\", \"docx\", \"html\", \"md\", \"pdf\", \"txt\", \"xls\", \"xlsx\"].includes(\n extension,\n )\n ) {\n return extension as DocumentFormat;\n }\n if (mimeType === \"application/pdf\") return \"pdf\";\n if (mimeType === \"application/msword\") return \"doc\";\n if (\n mimeType ===\n \"application/vnd.openxmlformats-officedocument.wordprocessingml.document\"\n ) return \"docx\";\n if (mimeType === \"application/vnd.ms-excel\") return \"xls\";\n if (\n mimeType ===\n \"application/vnd.openxmlformats-officedocument.spreadsheetml.sheet\"\n ) return \"xlsx\";\n if (mimeType === \"text/csv\") return \"csv\";\n if (mimeType === \"text/html\") return \"html\";\n if (mimeType === \"text/markdown\") return \"md\";\n if (mimeType === \"text/plain\") return \"txt\";\n return undefined;\n}\n\nfunction safeBedrockDocumentName(fileName: string): string {\n const name = basename(fileName, extname(fileName))\n .replace(/[^A-Za-z0-9()[\\] -]/g, \" \")\n .replace(/\\s+/g, \" \")\n .trim();\n return name || \"document\";\n}\n\nfunction fileNameFromUri(uri: string): string {\n try {\n return basename(new URL(uri).pathname) || \"document\";\n } catch {\n return basename(uri) || \"document\";\n }\n}\n\nfunction imageFormat(\n mimeType: string,\n): \"png\" | \"jpeg\" | \"gif\" | \"webp\" {\n const subtype = mimeType.toLowerCase().split(\";\")[0]?.split(\"/\")[1];\n if (\n subtype === \"png\" ||\n subtype === \"jpeg\" ||\n subtype === \"gif\" ||\n subtype === \"webp\"\n ) {\n return subtype;\n }\n if (subtype === \"jpg\") {\n return \"jpeg\";\n }\n throw new OrchaError(\n \"unsupported_content_type\",\n `Amazon Bedrock does not support image MIME type \"${mimeType}\".`,\n );\n}\n\nfunction toBedrockAssistantBlock(\n block: ProviderAssistantBlock,\n replayBedrockState: boolean,\n): ContentBlock {\n if (block.type === \"text\") {\n return { text: block.text };\n }\n if (block.type === \"tool_call\") {\n return {\n toolUse: {\n toolUseId: block.callId,\n name: block.name,\n input: toBedrockDocument(block.arguments),\n },\n };\n }\n if (!replayBedrockState) {\n return { text: block.text };\n }\n if (!block.text && block.replay?.opaqueData) {\n return {\n reasoningContent: {\n redactedContent: Uint8Array.from(\n Buffer.from(block.replay.opaqueData, \"base64\"),\n ),\n },\n };\n }\n return {\n reasoningContent: {\n reasoningText: {\n text: block.text,\n ...(block.replay?.opaqueData\n ? { signature: block.replay.opaqueData }\n : {}),\n },\n },\n };\n}\n\nasync function collectBedrockStream(\n stream: AsyncIterable<ConverseStreamOutput>,\n request: ProviderRequest,\n requestId?: string,\n publishOutput?: (output: string) => void,\n): Promise<CollectedBedrockResponse> {\n const blocks = new Map<number, PartialBlock>();\n let stopReason: string | undefined;\n let usage: TokenUsage | undefined;\n let cumulativeText = \"\";\n\n for await (const event of stream) {\n throwStreamError(event);\n\n const start = event.contentBlockStart;\n if (start?.start?.toolUse) {\n blocks.set(start.contentBlockIndex ?? blocks.size, {\n type: \"tool_call\",\n callId: start.start.toolUse.toolUseId ?? \"\",\n name: start.start.toolUse.name ?? \"\",\n input: \"\",\n });\n }\n\n const deltaEvent = event.contentBlockDelta;\n const delta = deltaEvent?.delta;\n const index = deltaEvent?.contentBlockIndex ?? blocks.size;\n if (delta?.text !== undefined) {\n const block = getPartialTextBlock(blocks, index);\n block.text += delta.text;\n cumulativeText += delta.text;\n publishOutput?.(cumulativeText);\n }\n if (delta?.toolUse?.input !== undefined) {\n const block = blocks.get(index);\n if (!block || block.type !== \"tool_call\") {\n throw new Error(\n `Amazon Bedrock streamed tool input before tool start at block ${index}.`,\n );\n }\n block.input += delta.toolUse.input;\n }\n if (delta?.reasoningContent) {\n const block = getPartialReasoningBlock(blocks, index);\n if (delta.reasoningContent.text !== undefined) {\n block.text += delta.reasoningContent.text;\n }\n if (delta.reasoningContent.signature !== undefined) {\n block.signature = delta.reasoningContent.signature;\n }\n if (delta.reasoningContent.redactedContent !== undefined) {\n block.redactedContent =\n delta.reasoningContent.redactedContent;\n }\n }\n if (event.messageStop?.stopReason) {\n stopReason = event.messageStop.stopReason;\n }\n if (event.metadata?.usage) {\n usage = event.metadata.usage;\n }\n }\n\n return {\n requestId,\n blocks: [...blocks.entries()]\n .sort(([left], [right]) => left - right)\n .map(([, block]) => normalizeBlock(block, request, requestId)),\n stopReason,\n usage,\n };\n}\n\nfunction getPartialTextBlock(\n blocks: Map<number, PartialBlock>,\n index: number,\n): PartialTextBlock {\n const existing = blocks.get(index);\n if (existing?.type === \"text\") {\n return existing;\n }\n const block: PartialTextBlock = { type: \"text\", text: \"\" };\n blocks.set(index, block);\n return block;\n}\n\nfunction getPartialReasoningBlock(\n blocks: Map<number, PartialBlock>,\n index: number,\n): PartialReasoningBlock {\n const existing = blocks.get(index);\n if (existing?.type === \"reasoning\") {\n return existing;\n }\n const block: PartialReasoningBlock = {\n type: \"reasoning\",\n text: \"\",\n };\n blocks.set(index, block);\n return block;\n}\n\nfunction normalizeBlock(\n block: PartialBlock,\n request: ProviderRequest,\n requestId?: string,\n): ProviderAssistantBlock {\n if (block.type === \"text\") {\n return block;\n }\n if (block.type === \"tool_call\") {\n return {\n type: \"tool_call\",\n callId: block.callId,\n name: block.name,\n arguments: parseToolInput(\n block.input,\n block.name,\n request,\n requestId,\n ),\n };\n }\n if (block.redactedContent) {\n return {\n type: \"reasoning\",\n text: \"\",\n replay: {\n opaqueData: Buffer.from(\n block.redactedContent,\n ).toString(\"base64\"),\n },\n };\n }\n return {\n type: \"reasoning\",\n text: block.text,\n ...(block.signature\n ? { replay: { opaqueData: block.signature } }\n : {}),\n };\n}\n\nfunction parseToolInput(\n input: string,\n name: string,\n request: ProviderRequest,\n requestId?: string,\n): Record<string, unknown> {\n if (!input) {\n return {};\n }\n let parsed: unknown;\n try {\n parsed = JSON.parse(input);\n } catch (error) {\n throw invalidToolInputError({\n input,\n name,\n request,\n requestId,\n reason: error instanceof Error ? error.message : \"Invalid JSON.\",\n });\n }\n if (isRecord(parsed)) {\n return parsed;\n }\n throw invalidToolInputError({\n input,\n name,\n request,\n requestId,\n reason: \"The decoded value was not a JSON object.\",\n });\n}\n\nfunction invalidToolInputError(options: {\n input: string;\n name: string;\n request: ProviderRequest;\n requestId?: string;\n reason: string;\n}): OrchaError {\n const tool = options.request.tools.find(\n (candidate) => candidate.name === options.name,\n );\n const expectedSchema = tool?.parameters ?? {\n type: \"object\",\n };\n const previewLimit = 1_000;\n const receivedStart =\n options.input.length > previewLimit\n ? `${options.input.slice(0, previewLimit)}\u2026`\n : options.input;\n const receivedEnd =\n options.input.length > previewLimit\n ? `\u2026${options.input.slice(-previewLimit)}`\n : options.input;\n const receivedSha256 = createHash(\"sha256\")\n .update(options.input)\n .digest(\"hex\");\n const requestReference = options.requestId\n ? ` Bedrock request ID: ${options.requestId}.`\n : \"\";\n return new OrchaError(\n \"provider_error\",\n [\n `Amazon Bedrock model \"${options.request.model}\" generated invalid arguments for tool \"${options.name}\".`,\n `Expected a JSON object matching ${JSON.stringify(expectedSchema)}.`,\n `Received ${options.input.length} characters. Start: ${JSON.stringify(receivedStart)}. End: ${JSON.stringify(receivedEnd)}.`,\n `JSON decoding failed: ${options.reason}`,\n \"These arguments were generated by the model after Orcha sent the tool definition; they were not accepted application input.\",\n \"Retry the run. If the received payload appears to be valid JSON, report a possible Orcha stream-decoding issue at https://github.com/Amarsia/orcha/issues.\",\n requestReference,\n ].join(\" \"),\n {\n retryable: true,\n details: {\n provider: \"bedrock\",\n model: options.request.model,\n tool: options.name,\n sentToolDefinition: tool\n ? {\n toolSpec: {\n name: tool.name,\n description: tool.description,\n inputSchema: {\n json: toBedrockDocument(tool.parameters),\n },\n },\n }\n : {\n toolSpec: {\n name: options.name,\n inputSchema: {\n json: toBedrockDocument(expectedSchema),\n },\n },\n },\n expectedSchema,\n receivedLength: options.input.length,\n receivedStart,\n receivedEnd,\n receivedSha256,\n decodeError: options.reason,\n ...(options.requestId ? { requestId: options.requestId } : {}),\n issueUrl: \"https://github.com/Amarsia/orcha/issues\",\n },\n },\n );\n}\n\nfunction toProviderResponse(\n request: ProviderRequest,\n response: CollectedBedrockResponse,\n): ProviderResponse {\n const textOutput = response.blocks\n .filter(\n (block): block is PartialTextBlock =>\n block.type === \"text\",\n )\n .map((block) => block.text)\n .join(\"\");\n const toolCalls = response.blocks.filter(\n (block): block is ProviderToolCall =>\n block.type === \"tool_call\",\n );\n const stopReason = normalizeStopReason(response.stopReason);\n return {\n output:\n request.outputType === \"json\" &&\n toolCalls.length === 0 &&\n stopReason !== \"max_tokens\"\n ? parseStructuredOutput(\n textOutput,\n request.outputSchema ?? {},\n )\n : textOutput,\n responseId: response.requestId,\n stopReason,\n content: response.blocks,\n toolCalls,\n usage: {\n inputTokens: response.usage?.inputTokens ?? 0,\n outputTokens: response.usage?.outputTokens ?? 0,\n reasoningTokens: null,\n cacheReadTokens:\n response.usage?.cacheReadInputTokens ?? 0,\n cacheWriteTokens:\n response.usage?.cacheWriteInputTokens ?? 0,\n },\n };\n}\n\nfunction normalizeStopReason(\n reason: string | undefined,\n): ProviderStopReason | undefined {\n if (!reason) {\n return undefined;\n }\n if (reason === \"end_turn\" || reason === \"stop_sequence\") {\n return \"end_turn\";\n }\n if (reason === \"tool_use\") {\n return \"tool_call\";\n }\n if (\n reason === \"max_tokens\" ||\n reason === \"model_context_window_exceeded\"\n ) {\n return \"max_tokens\";\n }\n if (\n reason === \"content_filtered\" ||\n reason === \"guardrail_intervened\"\n ) {\n return \"content_filter\";\n }\n return \"unknown\";\n}\n\nfunction throwStreamError(event: ConverseStreamOutput): void {\n const error =\n event.internalServerException ??\n event.modelStreamErrorException ??\n event.validationException ??\n event.throttlingException ??\n event.serviceUnavailableException;\n if (error) {\n throw new Error(\n error.message ?? \"Amazon Bedrock streaming request failed.\",\n );\n }\n}\n\nfunction isAnthropicModel(model: string): boolean {\n const normalized = model.toLowerCase();\n return (\n normalized.includes(\"anthropic.\") ||\n normalized.includes(\"claude\")\n );\n}\n\nfunction toBedrockDocument(value: unknown): BedrockDocument {\n if (value === undefined || value === null) {\n return null;\n }\n if (\n typeof value === \"string\" ||\n typeof value === \"boolean\"\n ) {\n return value;\n }\n if (typeof value === \"number\") {\n if (!Number.isFinite(value)) {\n throw new Error(\n \"Amazon Bedrock document values must contain finite numbers.\",\n );\n }\n return value;\n }\n if (Array.isArray(value)) {\n return value.map(toBedrockDocument);\n }\n if (isRecord(value)) {\n return Object.fromEntries(\n Object.entries(value).map(([key, item]) => [\n key,\n toBedrockDocument(item),\n ]),\n );\n }\n throw new Error(\n `Amazon Bedrock cannot serialize a ${typeof value} document value.`,\n );\n}\n\nfunction isRecord(\n value: unknown,\n): value is Record<string, unknown> {\n return (\n typeof value === \"object\" &&\n value !== null &&\n !Array.isArray(value)\n );\n}\n"],
|
|
5
|
-
"mappings": "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",
|
|
6
|
-
"names": []
|
|
7
|
-
}
|
|
@@ -1,7 +0,0 @@
|
|
|
1
|
-
{
|
|
2
|
-
"version": 3,
|
|
3
|
-
"sources": ["../../src/providers/catalog.ts"],
|
|
4
|
-
"sourcesContent": ["import type { ProviderName } from \"../types.js\";\n\nexport interface BuiltInProviderDescriptor {\n moduleFile: string;\n exportName: string;\n}\n\nexport const builtInProviderCatalog = {\n anthropic: {\n moduleFile: \"anthropic.js\",\n exportName: \"anthropicProvider\",\n },\n bedrock: {\n moduleFile: \"bedrock.js\",\n exportName: \"bedrockProvider\",\n },\n deepseek: {\n moduleFile: \"deepseek.js\",\n exportName: \"deepSeekProvider\",\n },\n googlegenai: {\n moduleFile: \"google-genai.js\",\n exportName: \"googleGenAIProvider\",\n },\n openai: {\n moduleFile: \"openai.js\",\n exportName: \"openAIProvider\",\n },\n vertexai: {\n moduleFile: \"vertex-ai.js\",\n exportName: \"vertexAIProvider\",\n },\n} as const satisfies Partial<\n Record<ProviderName, BuiltInProviderDescriptor>\n>;\n\nexport function isBuiltInProvider(\n name: string,\n): name is keyof typeof builtInProviderCatalog {\n return Object.hasOwn(builtInProviderCatalog, name);\n}\n"],
|
|
5
|
-
"mappings": ";;;;;;;;;;;;;;;;;;;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAOO,MAAM,yBAAyB;AAAA,EACpC,WAAW;AAAA,IACT,YAAY;AAAA,IACZ,YAAY;AAAA,EACd;AAAA,EACA,SAAS;AAAA,IACP,YAAY;AAAA,IACZ,YAAY;AAAA,EACd;AAAA,EACA,UAAU;AAAA,IACR,YAAY;AAAA,IACZ,YAAY;AAAA,EACd;AAAA,EACA,aAAa;AAAA,IACX,YAAY;AAAA,IACZ,YAAY;AAAA,EACd;AAAA,EACA,QAAQ;AAAA,IACN,YAAY;AAAA,IACZ,YAAY;AAAA,EACd;AAAA,EACA,UAAU;AAAA,IACR,YAAY;AAAA,IACZ,YAAY;AAAA,EACd;AACF;AAIO,SAAS,kBACd,MAC6C;AAC7C,SAAO,OAAO,OAAO,wBAAwB,IAAI;AACnD;",
|
|
6
|
-
"names": []
|
|
7
|
-
}
|
|
@@ -1,7 +0,0 @@
|
|
|
1
|
-
{
|
|
2
|
-
"version": 3,
|
|
3
|
-
"sources": ["../../src/providers/deepseek.ts"],
|
|
4
|
-
"sourcesContent": ["import { OrchaError } from \"../errors.js\";\nimport { parseStructuredOutput } from \"../runtime/structured-output.js\";\nimport type {\n MessageContent,\n ProviderConfiguration,\n Usage,\n} from \"../types.js\";\nimport { readServerSentEvents } from \"./sse.js\";\nimport type {\n ProviderAdapter,\n ProviderAssistantBlock,\n ProviderMessage,\n ProviderRequest,\n ProviderResponse,\n ProviderStopReason,\n ProviderToolCall,\n} from \"./types.js\";\n\ninterface DeepSeekStreamChunk {\n id?: string;\n choices?: Array<{\n delta?: {\n content?: string | null;\n reasoning_content?: string | null;\n tool_calls?: Array<{\n index?: number;\n id?: string;\n type?: string;\n function?: {\n name?: string;\n arguments?: string;\n };\n }>;\n };\n finish_reason?: string | null;\n }>;\n usage?: DeepSeekUsage | null;\n error?: {\n message?: string;\n };\n}\n\ninterface DeepSeekUsage {\n prompt_tokens?: number;\n completion_tokens?: number;\n prompt_cache_hit_tokens?: number;\n completion_tokens_details?: {\n reasoning_tokens?: number;\n };\n}\n\ninterface PartialToolCall {\n id?: string;\n name: string;\n arguments: string;\n}\n\ninterface CollectedDeepSeekResponse {\n id?: string;\n content: string;\n reasoningContent: string;\n toolCalls: PartialToolCall[];\n finishReason?: string | null;\n usage?: DeepSeekUsage;\n}\n\nexport const deepSeekProvider: ProviderAdapter = {\n name: \"deepseek\",\n generate: generateDeepSeek,\n};\n\nasync function generateDeepSeek(\n configuration: ProviderConfiguration,\n request: ProviderRequest,\n): Promise<ProviderResponse> {\n if (!configuration.apiKey?.trim()) {\n throw new Error(\n 'Missing DeepSeek API key in orcha.init({ providers: { deepseek: \"...\" } }).',\n );\n }\n if (request.outputType === \"image\" || request.outputType === \"audio\") {\n throw new OrchaError(\n \"unsupported_provider_capability\",\n `DeepSeek does not support \"${request.outputType}\" agent output.`,\n );\n }\n\n const body: Record<string, unknown> = {\n model: request.model,\n messages: [\n {\n role: \"system\",\n content: systemPrompt(request),\n },\n ...toDeepSeekMessages(request.messages),\n ],\n stream: true,\n stream_options: {\n include_usage: true,\n },\n ...(request.maxTokens ? { max_tokens: request.maxTokens } : {}),\n };\n if (request.tools.length > 0) {\n body.tools = request.tools.map((tool) => ({\n type: \"function\",\n function: {\n name: tool.name,\n description: tool.description,\n parameters: tool.parameters,\n },\n }));\n }\n if (request.outputType === \"json\") {\n body.response_format = { type: \"json_object\" };\n }\n if (request.reasoningLevel) {\n body.thinking = { type: \"enabled\" };\n body.reasoning_effort = request.reasoningLevel;\n }\n\n const response = await fetch(\n `${configuration.baseUrl ?? \"https://api.deepseek.com\"}/chat/completions`,\n {\n method: \"POST\",\n headers: {\n \"content-type\": \"application/json\",\n authorization: `Bearer ${configuration.apiKey}`,\n },\n body: JSON.stringify(body),\n signal: request.signal,\n },\n );\n\n if (!response.ok) {\n const error = (await response.json()) as DeepSeekStreamChunk;\n throw new Error(\n error.error?.message ??\n `DeepSeek request failed with HTTP ${response.status}.`,\n );\n }\n\n const collected = await collectDeepSeekStream(\n response,\n request.publishOutput,\n );\n return toProviderResponse(request, collected);\n}\n\nfunction systemPrompt(request: ProviderRequest): string {\n if (request.outputType !== \"json\") {\n return request.systemPrompt;\n }\n return `${request.systemPrompt}\\n\\nReturn only valid JSON matching this JSON Schema:\\n${JSON.stringify(request.outputSchema ?? {})}`;\n}\n\nfunction toDeepSeekMessages(messages: ProviderMessage[]): unknown[] {\n const output: unknown[] = [];\n\n for (const message of messages) {\n if (message.role === \"user\") {\n output.push({\n role: \"user\",\n content:\n typeof message.content === \"string\"\n ? message.content\n : textOnlyContent(message.content),\n });\n continue;\n }\n if (message.role === \"tool\") {\n for (const result of message.results) {\n output.push({\n role: \"tool\",\n tool_call_id: result.callId,\n content: JSON.stringify(result.output ?? null),\n });\n }\n continue;\n }\n\n const text: string[] = [];\n const reasoning: string[] = [];\n const toolCalls: unknown[] = [];\n for (const block of message.content) {\n if (block.type === \"text\") {\n text.push(block.text);\n } else if (block.type === \"reasoning\") {\n if (message.provider === \"deepseek\") {\n reasoning.push(block.text);\n } else if (block.text) {\n text.push(block.text);\n }\n } else {\n toolCalls.push({\n id: block.callId,\n type: \"function\",\n function: {\n name: block.name,\n arguments: JSON.stringify(block.arguments),\n },\n });\n }\n }\n output.push({\n role: \"assistant\",\n content: text.join(\"\"),\n ...(reasoning.length > 0\n ? { reasoning_content: reasoning.join(\"\") }\n : {}),\n ...(toolCalls.length > 0 ? { tool_calls: toolCalls } : {}),\n });\n }\n\n return output;\n}\n\nfunction textOnlyContent(content: MessageContent[]): string {\n const text: string[] = [];\n for (const block of content) {\n if (block.type !== \"text\") {\n throw new OrchaError(\n \"unsupported_content_type\",\n `DeepSeek does not support \"${block.type}\" message content.`,\n );\n }\n text.push(block.text);\n }\n return text.join(\"\");\n}\n\nasync function collectDeepSeekStream(\n response: Response,\n publishOutput?: (output: string) => void,\n): Promise<CollectedDeepSeekResponse> {\n const collected: CollectedDeepSeekResponse = {\n content: \"\",\n reasoningContent: \"\",\n toolCalls: [],\n };\n\n for await (const event of readServerSentEvents(response)) {\n const chunk = event as DeepSeekStreamChunk;\n if (chunk.error) {\n throw new Error(\n chunk.error.message ?? \"DeepSeek streaming request failed.\",\n );\n }\n collected.id = chunk.id ?? collected.id;\n collected.usage = chunk.usage ?? collected.usage;\n const choice = chunk.choices?.[0];\n collected.finishReason =\n choice?.finish_reason ?? collected.finishReason;\n const delta = choice?.delta;\n\n if (typeof delta?.reasoning_content === \"string\") {\n collected.reasoningContent += delta.reasoning_content;\n }\n if (typeof delta?.content === \"string\") {\n collected.content += delta.content;\n publishOutput?.(collected.content);\n }\n for (const toolCall of delta?.tool_calls ?? []) {\n const index = toolCall.index;\n if (index === undefined) {\n throw new Error(\n \"DeepSeek streamed a tool call without an index.\",\n );\n }\n const partial = collected.toolCalls[index] ?? {\n name: \"\",\n arguments: \"\",\n };\n partial.id = toolCall.id ?? partial.id;\n partial.name += toolCall.function?.name ?? \"\";\n partial.arguments += toolCall.function?.arguments ?? \"\";\n collected.toolCalls[index] = partial;\n }\n }\n\n if (collected.finishReason === \"insufficient_system_resource\") {\n throw new Error(\n \"DeepSeek stopped because inference capacity was unavailable.\",\n );\n }\n return collected;\n}\n\nfunction toProviderResponse(\n request: ProviderRequest,\n response: CollectedDeepSeekResponse,\n): ProviderResponse {\n const content: ProviderAssistantBlock[] = [];\n if (response.reasoningContent) {\n content.push({\n type: \"reasoning\",\n text: response.reasoningContent,\n });\n }\n if (response.content) {\n content.push({\n type: \"text\",\n text: response.content,\n });\n }\n\n for (const call of response.toolCalls) {\n if (!call.id || !call.name) {\n throw new Error(\n \"DeepSeek returned an incomplete function call.\",\n );\n }\n content.push({\n type: \"tool_call\",\n callId: call.id,\n name: call.name,\n arguments: parseToolArguments(call.arguments, call.name),\n });\n }\n\n const toolCalls = content.filter(\n (block): block is ProviderToolCall => block.type === \"tool_call\",\n );\n const stopReason = normalizeStopReason(response.finishReason, toolCalls);\n const output =\n request.outputType === \"json\" &&\n toolCalls.length === 0 &&\n stopReason !== \"max_tokens\"\n ? parseStructuredOutput(\n response.content,\n request.outputSchema ?? {},\n )\n : response.content;\n\n return {\n output,\n responseId: response.id,\n stopReason,\n content,\n toolCalls,\n usage: normalizeUsage(response.usage),\n };\n}\n\nfunction parseToolArguments(\n value: string,\n toolName: string,\n): Record<string, unknown> {\n let parsed: unknown;\n try {\n parsed = JSON.parse(value || \"{}\");\n } catch (error) {\n throw new Error(\n `DeepSeek returned invalid arguments for tool \"${toolName}\".`,\n { cause: error },\n );\n }\n if (!isRecord(parsed)) {\n throw new Error(\n `DeepSeek returned non-object arguments for tool \"${toolName}\".`,\n );\n }\n return parsed;\n}\n\nfunction normalizeStopReason(\n reason: string | null | undefined,\n toolCalls: ProviderToolCall[],\n): ProviderStopReason | undefined {\n if (toolCalls.length > 0 || reason === \"tool_calls\") {\n return \"tool_call\";\n }\n if (reason === \"stop\") {\n return \"end_turn\";\n }\n if (reason === \"length\") {\n return \"max_tokens\";\n }\n if (reason === \"content_filter\") {\n return \"content_filter\";\n }\n return reason === undefined || reason === null ? undefined : \"unknown\";\n}\n\nfunction normalizeUsage(usage: DeepSeekUsage | undefined): Usage {\n return {\n inputTokens: usage?.prompt_tokens ?? 0,\n outputTokens: usage?.completion_tokens ?? 0,\n reasoningTokens:\n usage?.completion_tokens_details?.reasoning_tokens ?? null,\n cacheReadTokens: usage?.prompt_cache_hit_tokens ?? 0,\n cacheWriteTokens: 0,\n };\n}\n\nfunction isRecord(value: unknown): value is Record<string, unknown> {\n return typeof value === \"object\" && value !== null && !Array.isArray(value);\n}\n"],
|
|
5
|
-
"mappings": "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",
|
|
6
|
-
"names": []
|
|
7
|
-
}
|
|
@@ -1,7 +0,0 @@
|
|
|
1
|
-
{
|
|
2
|
-
"version": 3,
|
|
3
|
-
"sources": ["../../src/providers/dispatcher.ts"],
|
|
4
|
-
"sourcesContent": ["import { OrchaError } from \"../errors.js\";\nimport type { ProviderName } from \"../types.js\";\nimport type {\n ProviderAdapter,\n ProviderResponseGenerator,\n} from \"./types.js\";\n\nexport type ProviderAdapterRegistry = Partial<\n Record<ProviderName, ProviderAdapter>\n>;\n\nexport function createProviderResponseGenerator(\n providers: ProviderAdapterRegistry,\n): ProviderResponseGenerator {\n return async (name, configuration, request) => {\n const provider = providers[name];\n if (!provider) {\n throw new OrchaError(\n \"provider_error\",\n `Provider \"${name}\" is not included in this Orcha runtime.`,\n );\n }\n return provider.generate(configuration, request);\n };\n}\n"],
|
|
5
|
-
"mappings": ";;;;;;;;;;;;;;;;;;;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,oBAA2B;AAWpB,SAAS,gCACd,WAC2B;AAC3B,SAAO,OAAO,MAAM,eAAe,YAAY;AAC7C,UAAM,WAAW,UAAU,IAAI;AAC/B,QAAI,CAAC,UAAU;AACb,YAAM,IAAI;AAAA,QACR;AAAA,QACA,aAAa,IAAI;AAAA,MACnB;AAAA,IACF;AACA,WAAO,SAAS,SAAS,eAAe,OAAO;AAAA,EACjD;AACF;",
|
|
6
|
-
"names": []
|
|
7
|
-
}
|
|
@@ -1,7 +0,0 @@
|
|
|
1
|
-
{
|
|
2
|
-
"version": 3,
|
|
3
|
-
"sources": ["../../src/providers/google-gemini.ts"],
|
|
4
|
-
"sourcesContent": ["import { OrchaError } from \"../errors.js\";\nimport { readLocalFileContent } from \"../file-content.js\";\nimport { parseStructuredOutput } from \"../runtime/structured-output.js\";\nimport type {\n MessageContent,\n ProviderName,\n Usage,\n} from \"../types.js\";\nimport type {\n ProviderAssistantBlock,\n ProviderMessage,\n ProviderRequest,\n ProviderResponse,\n ProviderStopReason,\n ProviderTextBlock,\n ProviderToolCall,\n} from \"./types.js\";\n\ninterface GooglePart {\n text?: string;\n thought?: boolean;\n thoughtSignature?: string;\n inlineData?: {\n mimeType: string;\n data: string;\n };\n fileData?: {\n mimeType: string;\n fileUri: string;\n };\n functionCall?: {\n id?: string;\n name?: string;\n args?: Record<string, unknown>;\n };\n functionResponse?: {\n id?: string;\n name: string;\n response: Record<string, unknown>;\n };\n}\n\ninterface GoogleContent {\n role: string;\n parts: GooglePart[];\n}\n\ninterface GoogleGenerateContentConfig {\n systemInstruction: string;\n maxOutputTokens?: number;\n tools?: Array<{\n functionDeclarations: Array<{\n name: string;\n description: string;\n parametersJsonSchema: Record<string, unknown>;\n }>;\n }>;\n responseMimeType?: string;\n responseJsonSchema?: Record<string, unknown>;\n thinkingConfig?: {\n includeThoughts: boolean;\n thinkingLevel?: string;\n };\n}\n\ninterface GoogleGenerateContentResponse {\n responseId?: string;\n candidates?: Array<{\n finishReason?: string;\n content?: {\n parts?: GooglePart[];\n };\n }>;\n promptFeedback?: {\n blockReason?: string;\n };\n usageMetadata?: {\n promptTokenCount?: number;\n candidatesTokenCount?: number;\n thoughtsTokenCount?: number;\n cachedContentTokenCount?: number;\n };\n}\n\nexport interface GoogleContentClient {\n models: {\n generateContentStream(parameters: {\n model: string;\n contents: GoogleContent[];\n config: GoogleGenerateContentConfig;\n }): Promise<AsyncGenerator<GoogleGenerateContentResponse>>;\n };\n}\n\nexport function toGoogleContentClient(client: unknown): GoogleContentClient {\n if (\n typeof client !== \"object\" ||\n client === null ||\n !(\"models\" in client) ||\n typeof client.models !== \"object\" ||\n client.models === null ||\n !(\"generateContentStream\" in client.models) ||\n typeof client.models.generateContentStream !== \"function\"\n ) {\n throw new Error(\n \"The installed @google/genai package does not expose a compatible client.\",\n );\n }\n return client as GoogleContentClient;\n}\n\ninterface CollectedGoogleResponse {\n responseId?: string;\n finishReason?: string;\n promptBlockReason?: string;\n parts: GooglePart[];\n usage?: GoogleGenerateContentResponse[\"usageMetadata\"];\n}\n\nexport async function generateGoogleContent(\n client: GoogleContentClient,\n request: ProviderRequest,\n provider: \"googlegenai\" | \"vertexai\",\n): Promise<ProviderResponse> {\n request.signal?.throwIfAborted();\n if (request.outputType === \"image\" || request.outputType === \"audio\") {\n throw new OrchaError(\n \"unsupported_provider_capability\",\n `Google Gemini does not support \"${request.outputType}\" as a direct agent output.`,\n );\n }\n\n const config: GoogleGenerateContentConfig = {\n systemInstruction: request.systemPrompt,\n ...(request.maxTokens\n ? { maxOutputTokens: request.maxTokens }\n : {}),\n };\n if (request.tools.length > 0) {\n config.tools = [\n {\n functionDeclarations: request.tools.map((tool) => ({\n name: tool.name,\n description: tool.description,\n parametersJsonSchema: tool.parameters,\n })),\n },\n ];\n }\n if (request.outputType === \"json\") {\n config.responseMimeType = \"application/json\";\n config.responseJsonSchema = request.outputSchema ?? {};\n }\n config.thinkingConfig = {\n includeThoughts: true,\n };\n if (request.reasoningLevel) {\n config.thinkingConfig.thinkingLevel = request.reasoningLevel;\n }\n\n const stream = await client.models.generateContentStream({\n model: request.model,\n contents: await toGoogleContents(request.messages, provider),\n config,\n });\n const abort = (): void => {\n void stream.return(undefined);\n };\n request.signal?.addEventListener(\"abort\", abort, { once: true });\n try {\n const response = await collectGoogleStream(\n stream,\n request.publishOutput,\n request.signal,\n );\n request.signal?.throwIfAborted();\n return toProviderResponse(request, response);\n } finally {\n request.signal?.removeEventListener(\"abort\", abort);\n }\n}\n\nasync function collectGoogleStream(\n stream: AsyncGenerator<GoogleGenerateContentResponse>,\n publishOutput?: (output: string) => void,\n signal?: AbortSignal,\n): Promise<CollectedGoogleResponse> {\n const collected: CollectedGoogleResponse = { parts: [] };\n let cumulativeText = \"\";\n\n for await (const chunk of stream) {\n signal?.throwIfAborted();\n collected.responseId = chunk.responseId ?? collected.responseId;\n collected.usage = chunk.usageMetadata ?? collected.usage;\n collected.promptBlockReason =\n chunk.promptFeedback?.blockReason ?? collected.promptBlockReason;\n const candidate = chunk.candidates?.[0];\n collected.finishReason =\n candidate?.finishReason ?? collected.finishReason;\n\n for (const part of candidate?.content?.parts ?? []) {\n collected.parts.push(part);\n if (\n typeof part.text === \"string\" &&\n part.text &&\n part.thought !== true\n ) {\n cumulativeText += part.text;\n publishOutput?.(cumulativeText);\n }\n }\n }\n return collected;\n}\n\nfunction toProviderResponse(\n request: ProviderRequest,\n response: CollectedGoogleResponse,\n): ProviderResponse {\n const content: ProviderAssistantBlock[] = [];\n let toolCallIndex = 0;\n\n for (const part of response.parts) {\n if (part.functionCall) {\n const call = part.functionCall;\n if (!call.name) {\n throw new Error(\"Google Gemini returned a function call without a name.\");\n }\n const providerCallId = call.id;\n content.push({\n type: \"tool_call\",\n callId:\n providerCallId ??\n `${response.responseId ?? crypto.randomUUID()}:${toolCallIndex}`,\n name: call.name,\n arguments: call.args ?? {},\n ...(providerCallId || part.thoughtSignature\n ? {\n replay: {\n ...(providerCallId\n ? { providerId: providerCallId }\n : {}),\n ...(part.thoughtSignature\n ? { opaqueData: part.thoughtSignature }\n : {}),\n },\n }\n : {}),\n });\n toolCallIndex += 1;\n continue;\n }\n if (typeof part.text === \"string\") {\n appendGoogleTextPart(content, part);\n continue;\n }\n throw new Error(\"Google Gemini returned an unsupported response part.\");\n }\n\n const toolCalls = content.filter(\n (block): block is ProviderToolCall => block.type === \"tool_call\",\n );\n const textOutput = content\n .filter(\n (block): block is ProviderTextBlock => block.type === \"text\",\n )\n .map((block) => block.text)\n .join(\"\");\n const stopReason = normalizeStopReason(\n response.finishReason,\n toolCalls.length > 0,\n response.promptBlockReason !== undefined,\n );\n const output =\n request.outputType === \"json\" &&\n toolCalls.length === 0 &&\n stopReason !== \"max_tokens\"\n ? parseStructuredOutput(textOutput, request.outputSchema ?? {})\n : textOutput;\n\n return {\n output,\n responseId: response.responseId,\n stopReason,\n content,\n toolCalls,\n usage: normalizeUsage(response.usage),\n };\n}\n\nfunction appendGoogleTextPart(\n content: ProviderAssistantBlock[],\n part: GooglePart,\n): void {\n const text = part.text ?? \"\";\n if (part.thought === true) {\n const previous = content.at(-1);\n if (previous?.type === \"reasoning\") {\n previous.text += text;\n if (part.thoughtSignature) {\n previous.replay = {\n ...previous.replay,\n opaqueData: part.thoughtSignature,\n };\n }\n return;\n }\n content.push({\n type: \"reasoning\",\n text,\n ...(part.thoughtSignature\n ? { replay: { opaqueData: part.thoughtSignature } }\n : {}),\n });\n return;\n }\n\n const previous = content.at(-1);\n if (previous?.type === \"text\") {\n previous.text += text;\n return;\n }\n content.push({ type: \"text\", text });\n}\n\nasync function toGoogleContents(\n messages: ProviderMessage[],\n provider: \"googlegenai\" | \"vertexai\",\n): Promise<GoogleContent[]> {\n const contents: GoogleContent[] = [];\n const previousCalls = new Map<\n string,\n {\n name: string;\n providerCallId?: string;\n }\n >();\n\n for (const message of messages) {\n if (message.role === \"user\") {\n contents.push({\n role: \"user\",\n parts:\n typeof message.content === \"string\"\n ? [{ text: message.content }]\n : await Promise.all(\n message.content.map(toGoogleUserPart),\n ),\n });\n continue;\n }\n if (message.role === \"assistant\") {\n const parts = message.content.map((block) => {\n if (block.type === \"tool_call\") {\n previousCalls.set(block.callId, {\n name: block.name,\n providerCallId:\n message.provider === provider\n ? block.replay?.providerId\n : undefined,\n });\n }\n return toGoogleAssistantPart(\n block,\n message.provider,\n provider,\n );\n });\n contents.push({ role: \"model\", parts });\n continue;\n }\n\n contents.push({\n role: \"user\",\n parts: message.results.map((result) => {\n const call = previousCalls.get(result.callId);\n if (!call) {\n throw new Error(\n `Google Gemini could not match tool result \"${result.callId}\" to a prior function call.`,\n );\n }\n return {\n functionResponse: {\n name: call.name,\n ...(call.providerCallId\n ? { id: call.providerCallId }\n : {}),\n response: normalizeFunctionResponse(\n result.output,\n result.isError,\n ),\n },\n };\n }),\n });\n }\n return contents;\n}\n\nasync function toGoogleUserPart(\n content: MessageContent,\n): Promise<GooglePart> {\n if (content.type === \"text\") {\n return { text: content.text };\n }\n if (content.type === \"file\") {\n const file = await readLocalFileContent(content);\n return {\n inlineData: {\n mimeType: content.mimeType,\n data: file.base64,\n },\n };\n }\n if (\n content.type === \"url\" &&\n /^https?:\\/\\//i.test(content.fileUri) &&\n !isGoogleFileUri(content.fileUri)\n ) {\n const response = await fetch(content.fileUri);\n if (!response.ok) {\n throw new OrchaError(\n \"invalid_input\",\n `Could not load Google Gemini file URL: HTTP ${response.status}.`,\n );\n }\n return {\n inlineData: {\n mimeType: content.mimeType,\n data: Buffer.from(await response.arrayBuffer()).toString(\"base64\"),\n },\n };\n }\n if (!isGoogleFileUri(content.fileUri)) {\n throw new OrchaError(\n \"unsupported_content_type\",\n \"Google Gemini requires media to use a Gemini Files API URI, a Google Cloud Storage URI, or an inline data URI.\",\n );\n }\n if (content.fileUri.startsWith(\"data:\")) {\n const parsed = parseDataUri(content.fileUri);\n return {\n inlineData: {\n mimeType: parsed.mimeType || content.mimeType,\n data: parsed.data,\n },\n };\n }\n return {\n fileData: {\n mimeType: content.mimeType,\n fileUri: content.fileUri,\n },\n };\n}\n\nfunction toGoogleAssistantPart(\n block: ProviderAssistantBlock,\n messageProvider: ProviderName | undefined,\n currentProvider: \"googlegenai\" | \"vertexai\",\n): GooglePart {\n if (block.type === \"text\") {\n return { text: block.text };\n }\n if (block.type === \"reasoning\") {\n if (messageProvider !== currentProvider) {\n return { text: block.text };\n }\n return {\n text: block.text,\n thought: true,\n ...(block.replay?.opaqueData\n ? { thoughtSignature: block.replay.opaqueData }\n : {}),\n };\n }\n const replay =\n messageProvider === currentProvider ? block.replay : undefined;\n return {\n functionCall: {\n name: block.name,\n args: block.arguments,\n ...(replay?.providerId\n ? { id: replay.providerId }\n : {}),\n },\n ...(replay?.opaqueData\n ? { thoughtSignature: replay.opaqueData }\n : {}),\n };\n}\n\nfunction normalizeFunctionResponse(\n output: unknown,\n isError: boolean | undefined,\n): Record<string, unknown> {\n if (isError) {\n return { error: output };\n }\n return isRecord(output) ? output : { output: output ?? null };\n}\n\nfunction normalizeStopReason(\n reason: string | undefined,\n hasToolCalls: boolean,\n promptBlocked: boolean,\n): ProviderStopReason | undefined {\n if (promptBlocked) {\n return \"content_filter\";\n }\n if (hasToolCalls) {\n return \"tool_call\";\n }\n if (reason === \"STOP\") {\n return \"end_turn\";\n }\n if (reason === \"MAX_TOKENS\") {\n return \"max_tokens\";\n }\n if (\n reason === \"SAFETY\" ||\n reason === \"RECITATION\" ||\n reason === \"BLOCKLIST\" ||\n reason === \"PROHIBITED_CONTENT\" ||\n reason === \"SPII\" ||\n reason === \"IMAGE_SAFETY\" ||\n reason === \"IMAGE_PROHIBITED_CONTENT\"\n ) {\n return \"content_filter\";\n }\n return reason === undefined ? undefined : \"unknown\";\n}\n\nfunction normalizeUsage(\n usage: GoogleGenerateContentResponse[\"usageMetadata\"],\n): Usage {\n return {\n inputTokens: usage?.promptTokenCount ?? 0,\n outputTokens: usage?.candidatesTokenCount ?? 0,\n reasoningTokens: usage?.thoughtsTokenCount ?? null,\n cacheReadTokens: usage?.cachedContentTokenCount ?? 0,\n cacheWriteTokens: 0,\n };\n}\n\nfunction isGoogleFileUri(uri: string): boolean {\n return (\n uri.startsWith(\"data:\") ||\n uri.startsWith(\"gs://\") ||\n uri.startsWith(\"https://generativelanguage.googleapis.com/\")\n );\n}\n\nfunction parseDataUri(uri: string): {\n mimeType: string;\n data: string;\n} {\n const match = /^data:([^;,]+)?;base64,(.+)$/s.exec(uri);\n if (!match) {\n throw new OrchaError(\n \"unsupported_content_type\",\n \"Google Gemini inline media must be a base64-encoded data URI.\",\n );\n }\n return {\n mimeType: match[1] ?? \"\",\n data: match[2],\n };\n}\n\nfunction isRecord(value: unknown): value is Record<string, unknown> {\n return typeof value === \"object\" && value !== null && !Array.isArray(value);\n}\n"],
|
|
5
|
-
"mappings": "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",
|
|
6
|
-
"names": ["previous"]
|
|
7
|
-
}
|
|
@@ -1,7 +0,0 @@
|
|
|
1
|
-
{
|
|
2
|
-
"version": 3,
|
|
3
|
-
"sources": ["../../src/providers/google-genai.ts"],
|
|
4
|
-
"sourcesContent": ["import { GoogleGenAI } from \"@google/genai/web\";\nimport type { ProviderConfiguration } from \"../types.js\";\nimport {\n generateGoogleContent,\n toGoogleContentClient,\n} from \"./google-gemini.js\";\nimport type {\n ProviderAdapter,\n ProviderRequest,\n ProviderResponse,\n} from \"./types.js\";\n\nexport const googleGenAIProvider: ProviderAdapter = {\n name: \"googlegenai\",\n generate: generateGoogleGenAI,\n};\n\nasync function generateGoogleGenAI(\n configuration: ProviderConfiguration,\n request: ProviderRequest,\n): Promise<ProviderResponse> {\n if (!configuration.apiKey?.trim()) {\n throw new Error(\n 'Missing Google GenAI API key in orcha.init({ providers: { googlegenai: \"...\" } }).',\n );\n }\n\n const client = new GoogleGenAI({\n apiKey: configuration.apiKey,\n ...(configuration.baseUrl\n ? { httpOptions: { baseUrl: configuration.baseUrl } }\n : {}),\n });\n return generateGoogleContent(\n toGoogleContentClient(client),\n request,\n \"googlegenai\",\n );\n}\n"],
|
|
5
|
-
"mappings": ";;;;;;;;;;;;;;;;;;;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,iBAA4B;AAE5B,2BAGO;AAOA,MAAM,sBAAuC;AAAA,EAClD,MAAM;AAAA,EACN,UAAU;AACZ;AAEA,eAAe,oBACb,eACA,SAC2B;AAC3B,MAAI,CAAC,cAAc,QAAQ,KAAK,GAAG;AACjC,UAAM,IAAI;AAAA,MACR;AAAA,IACF;AAAA,EACF;AAEA,QAAM,SAAS,IAAI,uBAAY;AAAA,IAC7B,QAAQ,cAAc;AAAA,IACtB,GAAI,cAAc,UACd,EAAE,aAAa,EAAE,SAAS,cAAc,QAAQ,EAAE,IAClD,CAAC;AAAA,EACP,CAAC;AACD,aAAO;AAAA,QACL,4CAAsB,MAAM;AAAA,IAC5B;AAAA,IACA;AAAA,EACF;AACF;",
|
|
6
|
-
"names": []
|
|
7
|
-
}
|
|
@@ -1,7 +0,0 @@
|
|
|
1
|
-
{
|
|
2
|
-
"version": 3,
|
|
3
|
-
"sources": ["../../src/providers/index.ts"],
|
|
4
|
-
"sourcesContent": ["import { OrchaError } from \"../errors.js\";\nimport type { ProviderName } from \"../types.js\";\nimport {\n builtInProviderCatalog,\n isBuiltInProvider,\n} from \"./catalog.js\";\nimport type {\n ProviderAdapter,\n ProviderResponseGenerator,\n} from \"./types.js\";\n\nexport { isBuiltInProvider } from \"./catalog.js\";\n\nconst loadedProviders = new Map<\n ProviderName,\n Promise<ProviderAdapter>\n>();\n\nexport const generateProviderResponse: ProviderResponseGenerator =\n async (name, configuration, request) => {\n const provider = await loadProvider(name);\n return provider.generate(configuration, request);\n };\n\nfunction loadProvider(name: ProviderName): Promise<ProviderAdapter> {\n const existing = loadedProviders.get(name);\n if (existing) {\n return existing;\n }\n if (!isBuiltInProvider(name)) {\n throw new OrchaError(\n \"provider_error\",\n `Provider \"${name}\" is not implemented by this version of OrchaJS.`,\n );\n }\n\n const descriptor = builtInProviderCatalog[name];\n const loading = import(`./${descriptor.moduleFile}`)\n .then((module) => {\n const provider: unknown = module[descriptor.exportName];\n if (!isProviderAdapter(provider) || provider.name !== name) {\n throw new Error(\n `Provider module \"${descriptor.moduleFile}\" does not export \"${descriptor.exportName}\".`,\n );\n }\n return provider;\n })\n .catch((error: unknown) => {\n loadedProviders.delete(name);\n if (\n (name === \"googlegenai\" || name === \"vertexai\") &&\n error instanceof Error &&\n error.message.includes(\"@google/genai\")\n ) {\n throw new OrchaError(\n \"provider_error\",\n `Provider \"${name}\" requires Node.js 20 or newer and the optional \"@google/genai\" package.`,\n { cause: error },\n );\n }\n throw error;\n });\n loadedProviders.set(name, loading);\n return loading;\n}\n\nfunction isProviderAdapter(value: unknown): value is ProviderAdapter {\n return (\n typeof value === \"object\" &&\n value !== null &&\n \"name\" in value &&\n \"generate\" in value &&\n typeof value.generate === \"function\"\n );\n}\n"],
|
|
5
|
-
"mappings": ";;;;;;;;;;;;;;;;;;;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,oBAA2B;AAE3B,qBAGO;AAMP,IAAAA,kBAAkC;AAElC,MAAM,kBAAkB,oBAAI,IAG1B;AAEK,MAAM,2BACX,OAAO,MAAM,eAAe,YAAY;AACtC,QAAM,WAAW,MAAM,aAAa,IAAI;AACxC,SAAO,SAAS,SAAS,eAAe,OAAO;AACjD;AAEF,SAAS,aAAa,MAA8C;AAClE,QAAM,WAAW,gBAAgB,IAAI,IAAI;AACzC,MAAI,UAAU;AACZ,WAAO;AAAA,EACT;AACA,MAAI,KAAC,kCAAkB,IAAI,GAAG;AAC5B,UAAM,IAAI;AAAA,MACR;AAAA,MACA,aAAa,IAAI;AAAA,IACnB;AAAA,EACF;AAEA,QAAM,aAAa,sCAAuB,IAAI;AAC9C,QAAM,UAAU,OAAO,KAAK,WAAW,UAAU,IAC9C,KAAK,CAACC,YAAW;AAChB,UAAM,WAAoBA,QAAO,WAAW,UAAU;AACtD,QAAI,CAAC,kBAAkB,QAAQ,KAAK,SAAS,SAAS,MAAM;AAC1D,YAAM,IAAI;AAAA,QACR,oBAAoB,WAAW,UAAU,sBAAsB,WAAW,UAAU;AAAA,MACtF;AAAA,IACF;AACA,WAAO;AAAA,EACT,CAAC,EACA,MAAM,CAAC,UAAmB;AACzB,oBAAgB,OAAO,IAAI;AAC3B,SACG,SAAS,iBAAiB,SAAS,eACpC,iBAAiB,SACjB,MAAM,QAAQ,SAAS,eAAe,GACtC;AACA,YAAM,IAAI;AAAA,QACR;AAAA,QACA,aAAa,IAAI;AAAA,QACjB,EAAE,OAAO,MAAM;AAAA,MACjB;AAAA,IACF;AACA,UAAM;AAAA,EACR,CAAC;AACH,kBAAgB,IAAI,MAAM,OAAO;AACjC,SAAO;AACT;AAEA,SAAS,kBAAkB,OAA0C;AACnE,SACE,OAAO,UAAU,YACjB,UAAU,QACV,UAAU,SACV,cAAc,SACd,OAAO,MAAM,aAAa;AAE9B;",
|
|
6
|
-
"names": ["import_catalog", "module"]
|
|
7
|
-
}
|
|
@@ -1,7 +0,0 @@
|
|
|
1
|
-
{
|
|
2
|
-
"version": 3,
|
|
3
|
-
"sources": ["../../src/providers/openai.ts"],
|
|
4
|
-
"sourcesContent": ["import { OrchaError } from \"../errors.js\";\nimport { readLocalFileContent } from \"../file-content.js\";\nimport { parseStructuredOutput } from \"../runtime/structured-output.js\";\nimport type {\n MessageContent,\n ProviderConfiguration,\n Usage,\n} from \"../types.js\";\nimport { readServerSentEvents } from \"./sse.js\";\nimport type {\n ProviderAdapter,\n ProviderAssistantBlock,\n ProviderMessage,\n ProviderRequest,\n ProviderResponse,\n ProviderStopReason,\n ProviderToolCall,\n} from \"./types.js\";\n\ninterface OpenAIResponse {\n id?: string;\n status?: \"completed\" | \"failed\" | \"incomplete\" | \"in_progress\";\n output?: OpenAIOutputItem[];\n output_text?: string;\n incomplete_details?: {\n reason?: string;\n } | null;\n usage?: {\n input_tokens?: number;\n output_tokens?: number;\n input_tokens_details?: {\n cached_tokens?: number;\n };\n output_tokens_details?: {\n reasoning_tokens?: number;\n };\n };\n error?: {\n message?: string;\n } | null;\n}\n\ninterface OpenAIOutputItem {\n type?: string;\n id?: string;\n role?: string;\n status?: string;\n content?: Array<Record<string, unknown>>;\n call_id?: string;\n name?: string;\n arguments?: string;\n summary?: Array<Record<string, unknown>>;\n encrypted_content?: string | null;\n}\n\nexport const openAIProvider: ProviderAdapter = {\n name: \"openai\",\n generate: generateOpenAI,\n};\n\nasync function generateOpenAI(\n configuration: ProviderConfiguration,\n request: ProviderRequest,\n): Promise<ProviderResponse> {\n if (!configuration.apiKey?.trim()) {\n throw new Error(\n 'Missing OpenAI API key in orcha.init({ providers: { openai: \"...\" } }).',\n );\n }\n if (request.outputType === \"image\" || request.outputType === \"audio\") {\n throw new OrchaError(\n \"unsupported_provider_capability\",\n `OpenAI Responses does not support \"${request.outputType}\" as a direct agent output.`,\n );\n }\n\n const body: Record<string, unknown> = {\n model: request.model,\n instructions: request.systemPrompt,\n input: await toOpenAIInput(request.messages),\n ...(request.maxTokens\n ? { max_output_tokens: request.maxTokens }\n : {}),\n ...(request.publishOutput ? { stream: true } : {}),\n };\n if (request.tools.length > 0) {\n body.tools = request.tools.map((tool) => ({\n type: \"function\",\n name: tool.name,\n description: tool.description,\n parameters: tool.parameters,\n }));\n }\n if (request.outputType === \"json\") {\n body.text = {\n format: {\n type: \"json_schema\",\n name: \"orcha_output\",\n schema: request.outputSchema ?? {},\n strict: true,\n },\n };\n }\n const reasoning: Record<string, unknown> = {\n summary: \"auto\",\n };\n if (request.reasoningLevel) {\n reasoning.effort = request.reasoningLevel;\n }\n body.reasoning = reasoning;\n body.include = [\"reasoning.encrypted_content\"];\n\n const response = await fetch(\n `${configuration.baseUrl ?? \"https://api.openai.com\"}/v1/responses`,\n {\n method: \"POST\",\n headers: {\n \"content-type\": \"application/json\",\n authorization: `Bearer ${configuration.apiKey}`,\n },\n body: JSON.stringify(body),\n signal: request.signal,\n },\n );\n\n if (!response.ok) {\n const errorBody = (await response.json()) as OpenAIResponse;\n throw new Error(\n errorBody.error?.message ??\n `OpenAI request failed with HTTP ${response.status}.`,\n );\n }\n\n const responseBody = response.headers\n .get(\"content-type\")\n ?.includes(\"text/event-stream\")\n ? await readOpenAIStream(response, request.publishOutput)\n : ((await response.json()) as OpenAIResponse);\n return toProviderResponse(request, responseBody);\n}\n\nasync function toOpenAIInput(\n messages: ProviderMessage[],\n): Promise<unknown[]> {\n const input: unknown[] = [];\n for (const message of messages) {\n if (message.role === \"user\") {\n input.push({\n role: \"user\",\n content:\n typeof message.content === \"string\"\n ? message.content\n : await Promise.all(\n message.content.map(toOpenAIUserContent),\n ),\n });\n continue;\n }\n if (message.role === \"tool\") {\n for (const result of message.results) {\n input.push({\n type: \"function_call_output\",\n call_id: result.callId,\n output: JSON.stringify(result.output ?? null),\n });\n }\n continue;\n }\n for (const block of message.content) {\n if (block.type === \"text\") {\n input.push({\n role: \"assistant\",\n content: [{ type: \"output_text\", text: block.text }],\n });\n } else if (block.type === \"tool_call\") {\n input.push({\n type: \"function_call\",\n call_id: block.callId,\n name: block.name,\n arguments: JSON.stringify(block.arguments),\n });\n } else if (\n message.provider === \"openai\" &&\n block.replay?.providerId\n ) {\n input.push({\n type: \"reasoning\",\n id: block.replay.providerId,\n summary: block.text\n ? [{ type: \"summary_text\", text: block.text }]\n : [],\n ...(block.replay.opaqueData\n ? { encrypted_content: block.replay.opaqueData }\n : {}),\n });\n } else if (block.text) {\n input.push({\n role: \"assistant\",\n content: [{ type: \"output_text\", text: block.text }],\n });\n }\n }\n }\n return input;\n}\n\nasync function toOpenAIUserContent(\n content: MessageContent,\n): Promise<unknown> {\n if (content.type === \"text\") {\n return { type: \"input_text\", text: content.text };\n }\n if (content.type === \"file\") {\n const file = await readLocalFileContent(content);\n if (content.mimeType.startsWith(\"image/\")) {\n return {\n type: \"input_image\",\n image_url: file.dataUri,\n detail: \"auto\",\n };\n }\n return {\n type: \"input_file\",\n file_data: file.dataUri,\n filename: file.fileName,\n };\n }\n if (content.type === \"image\") {\n return {\n type: \"input_image\",\n image_url: content.fileUri,\n detail: \"auto\",\n };\n }\n if (content.type === \"url\") {\n return {\n type: \"input_file\",\n file_url: content.fileUri,\n };\n }\n throw new OrchaError(\n \"unsupported_content_type\",\n `OpenAI Responses does not support ${content.type} content from a URI.`,\n );\n}\n\nasync function readOpenAIStream(\n response: Response,\n publishOutput?: (output: string) => void,\n): Promise<OpenAIResponse> {\n let cumulativeText = \"\";\n let completedResponse: OpenAIResponse | undefined;\n\n for await (const event of readServerSentEvents(response)) {\n if (\n event.type === \"response.output_text.delta\" &&\n typeof event.delta === \"string\"\n ) {\n cumulativeText += event.delta;\n publishOutput?.(cumulativeText);\n continue;\n }\n if (\n event.type === \"response.completed\" ||\n event.type === \"response.incomplete\"\n ) {\n if (!isRecord(event.response)) {\n throw new Error(\"OpenAI returned an invalid terminal stream event.\");\n }\n completedResponse = event.response as OpenAIResponse;\n continue;\n }\n if (event.type === \"response.failed\" || event.type === \"error\") {\n const error = isRecord(event.error) ? event.error : event;\n throw new Error(\n typeof error.message === \"string\"\n ? error.message\n : \"OpenAI streaming request failed.\",\n );\n }\n }\n\n if (!completedResponse) {\n throw new Error(\n \"OpenAI streaming response ended without a terminal response.\",\n );\n }\n return completedResponse;\n}\n\nfunction toProviderResponse(\n request: ProviderRequest,\n response: OpenAIResponse,\n): ProviderResponse {\n if (response.status === \"failed\") {\n throw new Error(\n response.error?.message ?? \"OpenAI failed to generate a response.\",\n );\n }\n if (\n response.status === \"incomplete\" &&\n response.incomplete_details?.reason !== \"max_output_tokens\"\n ) {\n throw new Error(\n `OpenAI returned an incomplete response: ${\n response.incomplete_details?.reason ?? \"unknown reason\"\n }.`,\n );\n }\n\n const content: ProviderAssistantBlock[] = [];\n let refused = false;\n for (const item of response.output ?? []) {\n if (item.type === \"message\") {\n for (const part of item.content ?? []) {\n if (\n part.type === \"output_text\" &&\n typeof part.text === \"string\"\n ) {\n content.push({ type: \"text\", text: part.text });\n } else if (\n part.type === \"refusal\" &&\n typeof part.refusal === \"string\"\n ) {\n refused = true;\n content.push({ type: \"text\", text: part.refusal });\n }\n }\n continue;\n }\n if (\n item.type === \"function_call\" &&\n typeof item.call_id === \"string\" &&\n typeof item.name === \"string\" &&\n typeof item.arguments === \"string\"\n ) {\n content.push({\n type: \"tool_call\",\n callId: item.call_id,\n name: item.name,\n arguments: parseFunctionArguments(item.arguments, item.name),\n });\n continue;\n }\n if (item.type === \"reasoning\" && typeof item.id === \"string\") {\n const reasoningText = [...(item.content ?? []), ...(item.summary ?? [])]\n .filter(\n (part) =>\n (part.type === \"reasoning_text\" ||\n part.type === \"summary_text\") &&\n typeof part.text === \"string\",\n )\n .map((part) => part.text as string)\n .join(\"\");\n content.push({\n type: \"reasoning\",\n text: reasoningText,\n replay: {\n providerId: item.id,\n ...(typeof item.encrypted_content === \"string\"\n ? { opaqueData: item.encrypted_content }\n : {}),\n },\n });\n continue;\n }\n throw new Error(\n `OpenAI returned unsupported output item \"${String(item.type)}\".`,\n );\n }\n\n const toolCalls = content.filter(\n (block): block is ProviderToolCall => block.type === \"tool_call\",\n );\n const textOutput =\n response.output_text ??\n content\n .filter((block) => block.type === \"text\")\n .map((block) => block.text)\n .join(\"\");\n const stopReason = normalizeStopReason(response, toolCalls, refused);\n const output =\n request.outputType === \"json\" &&\n toolCalls.length === 0 &&\n stopReason !== \"max_tokens\"\n ? parseStructuredOutput(textOutput, request.outputSchema ?? {})\n : textOutput;\n if (textOutput) {\n request.publishOutput?.(textOutput);\n }\n\n return {\n output,\n responseId: response.id,\n stopReason,\n content,\n toolCalls,\n usage: normalizeUsage(response.usage),\n };\n}\n\nfunction parseFunctionArguments(\n argumentsJson: string,\n name: string,\n): Record<string, unknown> {\n let parsed: unknown;\n try {\n parsed = JSON.parse(argumentsJson);\n } catch (error) {\n throw new Error(`OpenAI returned invalid arguments for tool \"${name}\".`, {\n cause: error,\n });\n }\n if (!isRecord(parsed)) {\n throw new Error(`OpenAI returned non-object arguments for tool \"${name}\".`);\n }\n return parsed;\n}\n\nfunction normalizeStopReason(\n response: OpenAIResponse,\n toolCalls: ProviderToolCall[],\n refused: boolean,\n): ProviderStopReason {\n if (refused) {\n return \"content_filter\";\n }\n if (toolCalls.length > 0) {\n return \"tool_call\";\n }\n if (response.status === \"incomplete\") {\n return response.incomplete_details?.reason === \"max_output_tokens\"\n ? \"max_tokens\"\n : \"unknown\";\n }\n return response.status === \"completed\" ? \"end_turn\" : \"unknown\";\n}\n\nfunction normalizeUsage(usage: OpenAIResponse[\"usage\"]): Usage {\n return {\n inputTokens: usage?.input_tokens ?? 0,\n outputTokens: usage?.output_tokens ?? 0,\n reasoningTokens:\n usage?.output_tokens_details?.reasoning_tokens ?? null,\n cacheReadTokens: usage?.input_tokens_details?.cached_tokens ?? 0,\n cacheWriteTokens: 0,\n };\n}\n\nfunction isRecord(value: unknown): value is Record<string, unknown> {\n return typeof value === \"object\" && value !== null && !Array.isArray(value);\n}\n"],
|
|
5
|
-
"mappings": "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",
|
|
6
|
-
"names": []
|
|
7
|
-
}
|
|
@@ -1,7 +0,0 @@
|
|
|
1
|
-
{
|
|
2
|
-
"version": 3,
|
|
3
|
-
"sources": ["../../src/providers/sse.ts"],
|
|
4
|
-
"sourcesContent": ["export async function* readServerSentEvents(\n response: Response,\n): AsyncGenerator<Record<string, unknown>> {\n if (!response.body) {\n throw new Error(\"Provider returned an empty streaming response.\");\n }\n\n const reader = response.body.getReader();\n const decoder = new TextDecoder();\n let buffer = \"\";\n let dataLines: string[] = [];\n\n const processLine = (\n line: string,\n ): Record<string, unknown> | undefined => {\n const normalized = line.endsWith(\"\\r\") ? line.slice(0, -1) : line;\n if (normalized) {\n if (normalized.startsWith(\"data:\")) {\n dataLines.push(normalized.slice(5).trimStart());\n }\n return undefined;\n }\n if (dataLines.length === 0) {\n return undefined;\n }\n const data = dataLines.join(\"\\n\");\n dataLines = [];\n return data === \"[DONE]\"\n ? undefined\n : (JSON.parse(data) as Record<string, unknown>);\n };\n\n try {\n while (true) {\n const { done, value } = await reader.read();\n buffer += decoder.decode(value, { stream: !done });\n let newlineIndex = buffer.indexOf(\"\\n\");\n while (newlineIndex >= 0) {\n const event = processLine(buffer.slice(0, newlineIndex));\n if (event) {\n yield event;\n }\n buffer = buffer.slice(newlineIndex + 1);\n newlineIndex = buffer.indexOf(\"\\n\");\n }\n if (done) {\n break;\n }\n }\n if (buffer) {\n const event = processLine(buffer);\n if (event) {\n yield event;\n }\n }\n const finalEvent = processLine(\"\");\n if (finalEvent) {\n yield finalEvent;\n }\n } finally {\n reader.releaseLock();\n }\n}\n"],
|
|
5
|
-
"mappings": ";;;;;;;;;;;;;;;;;;;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,gBAAuB,qBACrB,UACyC;AACzC,MAAI,CAAC,SAAS,MAAM;AAClB,UAAM,IAAI,MAAM,gDAAgD;AAAA,EAClE;AAEA,QAAM,SAAS,SAAS,KAAK,UAAU;AACvC,QAAM,UAAU,IAAI,YAAY;AAChC,MAAI,SAAS;AACb,MAAI,YAAsB,CAAC;AAE3B,QAAM,cAAc,CAClB,SACwC;AACxC,UAAM,aAAa,KAAK,SAAS,IAAI,IAAI,KAAK,MAAM,GAAG,EAAE,IAAI;AAC7D,QAAI,YAAY;AACd,UAAI,WAAW,WAAW,OAAO,GAAG;AAClC,kBAAU,KAAK,WAAW,MAAM,CAAC,EAAE,UAAU,CAAC;AAAA,MAChD;AACA,aAAO;AAAA,IACT;AACA,QAAI,UAAU,WAAW,GAAG;AAC1B,aAAO;AAAA,IACT;AACA,UAAM,OAAO,UAAU,KAAK,IAAI;AAChC,gBAAY,CAAC;AACb,WAAO,SAAS,WACZ,SACC,KAAK,MAAM,IAAI;AAAA,EACtB;AAEA,MAAI;AACF,WAAO,MAAM;AACX,YAAM,EAAE,MAAM,MAAM,IAAI,MAAM,OAAO,KAAK;AAC1C,gBAAU,QAAQ,OAAO,OAAO,EAAE,QAAQ,CAAC,KAAK,CAAC;AACjD,UAAI,eAAe,OAAO,QAAQ,IAAI;AACtC,aAAO,gBAAgB,GAAG;AACxB,cAAM,QAAQ,YAAY,OAAO,MAAM,GAAG,YAAY,CAAC;AACvD,YAAI,OAAO;AACT,gBAAM;AAAA,QACR;AACA,iBAAS,OAAO,MAAM,eAAe,CAAC;AACtC,uBAAe,OAAO,QAAQ,IAAI;AAAA,MACpC;AACA,UAAI,MAAM;AACR;AAAA,MACF;AAAA,IACF;AACA,QAAI,QAAQ;AACV,YAAM,QAAQ,YAAY,MAAM;AAChC,UAAI,OAAO;AACT,cAAM;AAAA,MACR;AAAA,IACF;AACA,UAAM,aAAa,YAAY,EAAE;AACjC,QAAI,YAAY;AACd,YAAM;AAAA,IACR;AAAA,EACF,UAAE;AACA,WAAO,YAAY;AAAA,EACrB;AACF;",
|
|
6
|
-
"names": []
|
|
7
|
-
}
|
|
@@ -1,7 +0,0 @@
|
|
|
1
|
-
{
|
|
2
|
-
"version": 3,
|
|
3
|
-
"sources": ["../../src/providers/types.ts"],
|
|
4
|
-
"sourcesContent": ["import type {\n MessageContent,\n ProviderConfiguration,\n ProviderName,\n Usage,\n} from \"../types.js\";\n\nexport interface ProviderTextBlock {\n type: \"text\";\n text: string;\n}\n\n/** Provider-owned state required to replay a normalized block verbatim. */\nexport interface ProviderReplayMetadata {\n providerId?: string;\n opaqueData?: string;\n}\n\nexport interface ProviderReasoningBlock {\n type: \"reasoning\";\n text: string;\n replay?: ProviderReplayMetadata;\n}\n\nexport interface ProviderToolCall {\n type: \"tool_call\";\n callId: string;\n name: string;\n arguments: Record<string, unknown>;\n replay?: ProviderReplayMetadata;\n}\n\nexport type ProviderAssistantBlock =\n | ProviderTextBlock\n | ProviderReasoningBlock\n | ProviderToolCall;\n\nexport interface ProviderToolResult {\n callId: string;\n output: unknown;\n isError?: boolean;\n}\n\nexport type ProviderMessage =\n | {\n role: \"user\";\n content: string | MessageContent[];\n }\n | {\n role: \"assistant\";\n provider?: ProviderName;\n content: ProviderAssistantBlock[];\n }\n | {\n role: \"tool\";\n results: ProviderToolResult[];\n };\n\nexport interface ProviderToolDefinition {\n name: string;\n description: string;\n parameters: Record<string, unknown>;\n}\n\nexport interface ProviderRequest {\n model: string;\n region?: string;\n maxTokens?: number;\n reasoningLevel?: string;\n outputType?: \"text\" | \"json\" | \"image\" | \"audio\";\n outputSchema?: Record<string, unknown>;\n systemPrompt: string;\n messages: ProviderMessage[];\n tools: ProviderToolDefinition[];\n publishOutput?: (output: string) => void;\n signal?: AbortSignal;\n}\n\nexport type ProviderStopReason =\n | \"end_turn\"\n | \"tool_call\"\n | \"max_tokens\"\n | \"content_filter\"\n | \"unknown\";\n\nexport interface ProviderResponse {\n output: unknown;\n responseId?: string;\n stopReason?: ProviderStopReason;\n content: ProviderAssistantBlock[];\n toolCalls: ProviderToolCall[];\n usage: Usage;\n}\n\nexport interface ProviderAdapter {\n readonly name: ProviderName;\n generate(\n configuration: ProviderConfiguration,\n request: ProviderRequest,\n ): Promise<ProviderResponse>;\n}\n\nexport type ProviderResponseGenerator = (\n name: ProviderName,\n configuration: ProviderConfiguration,\n request: ProviderRequest,\n) => Promise<ProviderResponse>;\n"],
|
|
5
|
-
"mappings": ";;;;;;;;;;;;;;;AAAA;AAAA;",
|
|
6
|
-
"names": []
|
|
7
|
-
}
|
|
@@ -1,7 +0,0 @@
|
|
|
1
|
-
{
|
|
2
|
-
"version": 3,
|
|
3
|
-
"sources": ["../../src/providers/vertex-ai.ts"],
|
|
4
|
-
"sourcesContent": ["import { GoogleGenAI } from \"@google/genai/node\";\nimport type { ProviderConfiguration } from \"../types.js\";\nimport {\n generateGoogleContent,\n toGoogleContentClient,\n} from \"./google-gemini.js\";\nimport type {\n ProviderAdapter,\n ProviderRequest,\n ProviderResponse,\n} from \"./types.js\";\n\nexport const vertexAIProvider: ProviderAdapter = {\n name: \"vertexai\",\n generate: generateVertexAI,\n};\n\nasync function generateVertexAI(\n configuration: ProviderConfiguration,\n request: ProviderRequest,\n): Promise<ProviderResponse> {\n if (!configuration.project?.trim()) {\n throw new Error(\n 'Missing Google Cloud project in orcha.init({ providers: { vertexai: { project: \"...\", location: \"...\" } } }).',\n );\n }\n if (!configuration.location?.trim()) {\n throw new Error(\n 'Missing Google Cloud location in orcha.init({ providers: { vertexai: { project: \"...\", location: \"...\" } } }).',\n );\n }\n if (\n configuration.credentials &&\n (!configuration.credentials.clientEmail.trim() ||\n !configuration.credentials.privateKey.trim())\n ) {\n throw new Error(\n \"Vertex AI service-account credentials require non-empty clientEmail and privateKey values.\",\n );\n }\n\n const client = new GoogleGenAI({\n vertexai: true,\n apiVersion: \"v1\",\n project: configuration.project,\n location: configuration.location,\n ...(configuration.credentials\n ? {\n googleAuthOptions: {\n credentials: {\n client_email: configuration.credentials.clientEmail,\n private_key: configuration.credentials.privateKey,\n },\n },\n }\n : {}),\n ...(configuration.baseUrl\n ? { httpOptions: { baseUrl: configuration.baseUrl } }\n : {}),\n });\n return generateGoogleContent(\n toGoogleContentClient(client),\n request,\n \"vertexai\",\n );\n}\n"],
|
|
5
|
-
"mappings": ";;;;;;;;;;;;;;;;;;;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,kBAA4B;AAE5B,2BAGO;AAOA,MAAM,mBAAoC;AAAA,EAC/C,MAAM;AAAA,EACN,UAAU;AACZ;AAEA,eAAe,iBACb,eACA,SAC2B;AAC3B,MAAI,CAAC,cAAc,SAAS,KAAK,GAAG;AAClC,UAAM,IAAI;AAAA,MACR;AAAA,IACF;AAAA,EACF;AACA,MAAI,CAAC,cAAc,UAAU,KAAK,GAAG;AACnC,UAAM,IAAI;AAAA,MACR;AAAA,IACF;AAAA,EACF;AACA,MACE,cAAc,gBACb,CAAC,cAAc,YAAY,YAAY,KAAK,KAC3C,CAAC,cAAc,YAAY,WAAW,KAAK,IAC7C;AACA,UAAM,IAAI;AAAA,MACR;AAAA,IACF;AAAA,EACF;AAEA,QAAM,SAAS,IAAI,wBAAY;AAAA,IAC7B,UAAU;AAAA,IACV,YAAY;AAAA,IACZ,SAAS,cAAc;AAAA,IACvB,UAAU,cAAc;AAAA,IACxB,GAAI,cAAc,cACd;AAAA,MACE,mBAAmB;AAAA,QACjB,aAAa;AAAA,UACX,cAAc,cAAc,YAAY;AAAA,UACxC,aAAa,cAAc,YAAY;AAAA,QACzC;AAAA,MACF;AAAA,IACF,IACA,CAAC;AAAA,IACL,GAAI,cAAc,UACd,EAAE,aAAa,EAAE,SAAS,cAAc,QAAQ,EAAE,IAClD,CAAC;AAAA,EACP,CAAC;AACD,aAAO;AAAA,QACL,4CAAsB,MAAM;AAAA,IAC5B;AAAA,IACA;AAAA,EACF;AACF;",
|
|
6
|
-
"names": []
|
|
7
|
-
}
|
|
@@ -1,7 +0,0 @@
|
|
|
1
|
-
{
|
|
2
|
-
"version": 3,
|
|
3
|
-
"sources": ["../../../src/runtime/actions/context.ts"],
|
|
4
|
-
"sourcesContent": ["import type {\n CompiledActionManifest,\n LocalActionRuntimeConfiguration,\n SessionMetadata,\n} from \"../../types.js\";\n\nexport interface LocalActionContext {\n sessionId: string;\n metadata: SessionMetadata;\n idempotencyKey: string;\n env: Record<string, string>;\n fetch(\n input: string | URL,\n init?: RequestInit,\n ): Promise<Response>;\n log(...values: unknown[]): void;\n}\n\nexport function createLocalActionContext(options: {\n action: CompiledActionManifest;\n configuration: LocalActionRuntimeConfiguration;\n sessionId: string;\n metadata: SessionMetadata;\n idempotencyKey: string;\n}): LocalActionContext {\n const allowedEnvironment = new Set(options.action.permissions?.env ?? []);\n const env = Object.fromEntries(\n Object.entries(options.configuration.env ?? {}).filter(\n (entry): entry is [string, string] =>\n allowedEnvironment.has(entry[0]) &&\n typeof entry[1] === \"string\",\n ),\n );\n\n return Object.freeze({\n sessionId: options.sessionId,\n metadata: Object.freeze({ ...options.metadata }),\n idempotencyKey: options.idempotencyKey,\n env: Object.freeze(env),\n fetch: async (input: string | URL, init?: RequestInit) => {\n const url = new URL(input);\n if (url.protocol !== \"https:\" && url.protocol !== \"http:\") {\n throw new Error(\n `Action \"${options.action.name}\" cannot use protocol \"${url.protocol}\".`,\n );\n }\n if (!isAllowedHost(url.hostname, options.action.permissions?.network ?? [])) {\n throw new Error(\n `Action \"${options.action.name}\" cannot access \"${url.hostname}\".`,\n );\n }\n const timeoutSignal = AbortSignal.timeout(\n options.action.timeoutMs ?? 10_000,\n );\n const response = await fetch(url, {\n ...init,\n redirect: \"manual\",\n signal: init?.signal\n ? combineAbortSignals(init.signal, timeoutSignal)\n : timeoutSignal,\n });\n if (response.status >= 300 && response.status < 400) {\n throw new Error(\n `Action \"${options.action.name}\" network redirects are not allowed.`,\n );\n }\n return response;\n },\n log: (...values: unknown[]) => {\n console.log(`[orcha:${options.action.name}]`, ...values);\n },\n });\n}\n\nfunction combineAbortSignals(\n first: AbortSignal,\n second: AbortSignal,\n): AbortSignal {\n const controller = new AbortController();\n const registrations: Array<{\n signal: AbortSignal;\n listener: () => void;\n }> = [];\n const cleanup = () => {\n for (const { signal, listener } of registrations) {\n signal.removeEventListener(\"abort\", listener);\n }\n };\n const register = (signal: AbortSignal) => {\n const abort = () => controller.abort(signal.reason);\n if (signal.aborted) {\n abort();\n return;\n }\n signal.addEventListener(\"abort\", abort, { once: true });\n registrations.push({ signal, listener: abort });\n };\n\n controller.signal.addEventListener(\"abort\", cleanup, { once: true });\n register(first);\n if (!controller.signal.aborted) {\n register(second);\n }\n return controller.signal;\n}\n\nfunction isAllowedHost(hostname: string, allowedHosts: string[]): boolean {\n return allowedHosts.some((allowed) => {\n if (allowed.startsWith(\"*.\")) {\n const suffix = allowed.slice(1);\n return hostname.endsWith(suffix) && hostname !== suffix.slice(1);\n }\n return hostname === allowed;\n });\n}\n"],
|
|
5
|
-
"mappings": ";;;;;;;;;;;;;;;;;;;AAAA;AAAA;AAAA;AAAA;AAAA;AAkBO,SAAS,yBAAyB,SAMlB;AACrB,QAAM,qBAAqB,IAAI,IAAI,QAAQ,OAAO,aAAa,OAAO,CAAC,CAAC;AACxE,QAAM,MAAM,OAAO;AAAA,IACjB,OAAO,QAAQ,QAAQ,cAAc,OAAO,CAAC,CAAC,EAAE;AAAA,MAC9C,CAAC,UACC,mBAAmB,IAAI,MAAM,CAAC,CAAC,KAC/B,OAAO,MAAM,CAAC,MAAM;AAAA,IACxB;AAAA,EACF;AAEA,SAAO,OAAO,OAAO;AAAA,IACnB,WAAW,QAAQ;AAAA,IACnB,UAAU,OAAO,OAAO,EAAE,GAAG,QAAQ,SAAS,CAAC;AAAA,IAC/C,gBAAgB,QAAQ;AAAA,IACxB,KAAK,OAAO,OAAO,GAAG;AAAA,IACtB,OAAO,OAAO,OAAqB,SAAuB;AACxD,YAAM,MAAM,IAAI,IAAI,KAAK;AACzB,UAAI,IAAI,aAAa,YAAY,IAAI,aAAa,SAAS;AACzD,cAAM,IAAI;AAAA,UACR,WAAW,QAAQ,OAAO,IAAI,0BAA0B,IAAI,QAAQ;AAAA,QACtE;AAAA,MACF;AACA,UAAI,CAAC,cAAc,IAAI,UAAU,QAAQ,OAAO,aAAa,WAAW,CAAC,CAAC,GAAG;AAC3E,cAAM,IAAI;AAAA,UACR,WAAW,QAAQ,OAAO,IAAI,oBAAoB,IAAI,QAAQ;AAAA,QAChE;AAAA,MACF;AACA,YAAM,gBAAgB,YAAY;AAAA,QAChC,QAAQ,OAAO,aAAa;AAAA,MAC9B;AACA,YAAM,WAAW,MAAM,MAAM,KAAK;AAAA,QAChC,GAAG;AAAA,QACH,UAAU;AAAA,QACV,QAAQ,MAAM,SACV,oBAAoB,KAAK,QAAQ,aAAa,IAC9C;AAAA,MACN,CAAC;AACD,UAAI,SAAS,UAAU,OAAO,SAAS,SAAS,KAAK;AACnD,cAAM,IAAI;AAAA,UACR,WAAW,QAAQ,OAAO,IAAI;AAAA,QAChC;AAAA,MACF;AACA,aAAO;AAAA,IACT;AAAA,IACA,KAAK,IAAI,WAAsB;AAC7B,cAAQ,IAAI,UAAU,QAAQ,OAAO,IAAI,KAAK,GAAG,MAAM;AAAA,IACzD;AAAA,EACF,CAAC;AACH;AAEA,SAAS,oBACP,OACA,QACa;AACb,QAAM,aAAa,IAAI,gBAAgB;AACvC,QAAM,gBAGD,CAAC;AACN,QAAM,UAAU,MAAM;AACpB,eAAW,EAAE,QAAQ,SAAS,KAAK,eAAe;AAChD,aAAO,oBAAoB,SAAS,QAAQ;AAAA,IAC9C;AAAA,EACF;AACA,QAAM,WAAW,CAAC,WAAwB;AACxC,UAAM,QAAQ,MAAM,WAAW,MAAM,OAAO,MAAM;AAClD,QAAI,OAAO,SAAS;AAClB,YAAM;AACN;AAAA,IACF;AACA,WAAO,iBAAiB,SAAS,OAAO,EAAE,MAAM,KAAK,CAAC;AACtD,kBAAc,KAAK,EAAE,QAAQ,UAAU,MAAM,CAAC;AAAA,EAChD;AAEA,aAAW,OAAO,iBAAiB,SAAS,SAAS,EAAE,MAAM,KAAK,CAAC;AACnE,WAAS,KAAK;AACd,MAAI,CAAC,WAAW,OAAO,SAAS;AAC9B,aAAS,MAAM;AAAA,EACjB;AACA,SAAO,WAAW;AACpB;AAEA,SAAS,cAAc,UAAkB,cAAiC;AACxE,SAAO,aAAa,KAAK,CAAC,YAAY;AACpC,QAAI,QAAQ,WAAW,IAAI,GAAG;AAC5B,YAAM,SAAS,QAAQ,MAAM,CAAC;AAC9B,aAAO,SAAS,SAAS,MAAM,KAAK,aAAa,OAAO,MAAM,CAAC;AAAA,IACjE;AACA,WAAO,aAAa;AAAA,EACtB,CAAC;AACH;",
|
|
6
|
-
"names": []
|
|
7
|
-
}
|
|
@@ -1,7 +0,0 @@
|
|
|
1
|
-
{
|
|
2
|
-
"version": 3,
|
|
3
|
-
"sources": ["../../../src/runtime/actions/execute.ts"],
|
|
4
|
-
"sourcesContent": ["import type {\n CompiledActionManifest,\n LocalActionRuntimeConfiguration,\n SessionMetadata,\n} from \"../../types.js\";\nimport { createLocalActionContext } from \"./context.js\";\nimport { executeNativeAction } from \"./native.js\";\n\nexport async function executeLocalAction(options: {\n action: CompiledActionManifest;\n parameters: Record<string, unknown>;\n configuration: LocalActionRuntimeConfiguration;\n sessionId: string;\n metadata: SessionMetadata;\n idempotencyKey: string;\n}): Promise<unknown> {\n const context = createLocalActionContext(options);\n if (options.configuration.runtime === \"native\") {\n return executeNativeAction(options.action, options.parameters, context);\n }\n\n if (process.env.ORCHA_INCLUDE_SANDBOX !== \"0\") {\n const { executeSandboxedAction } = await import(\"./sandbox.js\");\n return executeSandboxedAction(\n options.action,\n options.parameters,\n context,\n options.configuration.sandbox,\n );\n }\n\n throw new Error(\n \"The production bundle was built without the QuickJS sandbox.\",\n );\n}\n"],
|
|
5
|
-
"mappings": ";;;;;;;;;;;;;;;;;;;;;;;;;;;;;AAAA;AAAA;AAAA;AAAA;AAAA;AAKA,qBAAyC;AACzC,oBAAoC;AAEpC,eAAsB,mBAAmB,SAOpB;AACnB,QAAM,cAAU,yCAAyB,OAAO;AAChD,MAAI,QAAQ,cAAc,YAAY,UAAU;AAC9C,eAAO,mCAAoB,QAAQ,QAAQ,QAAQ,YAAY,OAAO;AAAA,EACxE;AAEA,MAAI,QAAQ,IAAI,0BAA0B,KAAK;AAC7C,UAAM,EAAE,uBAAuB,IAAI,MAAM,OAAO,cAAc;AAC9D,WAAO;AAAA,MACL,QAAQ;AAAA,MACR,QAAQ;AAAA,MACR;AAAA,MACA,QAAQ,cAAc;AAAA,IACxB;AAAA,EACF;AAEA,QAAM,IAAI;AAAA,IACR;AAAA,EACF;AACF;",
|
|
6
|
-
"names": []
|
|
7
|
-
}
|
|
@@ -1,7 +0,0 @@
|
|
|
1
|
-
{
|
|
2
|
-
"version": 3,
|
|
3
|
-
"sources": ["../../../src/runtime/actions/native.ts"],
|
|
4
|
-
"sourcesContent": ["import { createRequire } from \"module\";\nimport type { CompiledActionManifest } from \"../../types.js\";\nimport type { LocalActionContext } from \"./context.js\";\n\nconst require = createRequire(import.meta.url);\n\ntype LocalActionFunction = (\n parameters: Record<string, unknown>,\n context: LocalActionContext,\n) => unknown | Promise<unknown>;\n\nexport async function executeNativeAction(\n action: CompiledActionManifest,\n parameters: Record<string, unknown>,\n context: LocalActionContext,\n): Promise<unknown> {\n if (!action.source) {\n throw new Error(`Action \"${action.name}\" has no compiled source.`);\n }\n\n const loadAction = new Function(\n \"require\",\n `\"use strict\";\\n${action.source}\\nreturn __orchaActionModule.default;`,\n ) as (require: NodeJS.Require) => unknown;\n const executable = loadAction(require);\n if (typeof executable !== \"function\") {\n throw new Error(\n `Action \"${action.name}\" index.js must export a default function.`,\n );\n }\n\n const execution = Promise.resolve(\n (executable as LocalActionFunction)(parameters, context),\n );\n const timeoutMs = action.timeoutMs ?? 10_000;\n let timeout: ReturnType<typeof setTimeout> | undefined;\n try {\n return await Promise.race([\n execution,\n new Promise<never>((_resolve, reject) => {\n timeout = setTimeout(\n () => reject(new Error(`Action timed out after ${timeoutMs}ms.`)),\n timeoutMs,\n );\n }),\n ]);\n } finally {\n if (timeout) {\n clearTimeout(timeout);\n }\n }\n}\n"],
|
|
5
|
-
"mappings": ";;;;;;;;;;;;;;;;;;;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,oBAA8B;AAI9B,MAAMA,eAAU,6BAAc,oBAAe;AAO7C,eAAsB,oBACpB,QACA,YACA,SACkB;AAClB,MAAI,CAAC,OAAO,QAAQ;AAClB,UAAM,IAAI,MAAM,WAAW,OAAO,IAAI,2BAA2B;AAAA,EACnE;AAEA,QAAM,aAAa,IAAI;AAAA,IACrB;AAAA,IACA;AAAA,EAAkB,OAAO,MAAM;AAAA;AAAA,EACjC;AACA,QAAM,aAAa,WAAWA,QAAO;AACrC,MAAI,OAAO,eAAe,YAAY;AACpC,UAAM,IAAI;AAAA,MACR,WAAW,OAAO,IAAI;AAAA,IACxB;AAAA,EACF;AAEA,QAAM,YAAY,QAAQ;AAAA,IACvB,WAAmC,YAAY,OAAO;AAAA,EACzD;AACA,QAAM,YAAY,OAAO,aAAa;AACtC,MAAI;AACJ,MAAI;AACF,WAAO,MAAM,QAAQ,KAAK;AAAA,MACxB;AAAA,MACA,IAAI,QAAe,CAAC,UAAU,WAAW;AACvC,kBAAU;AAAA,UACR,MAAM,OAAO,IAAI,MAAM,0BAA0B,SAAS,KAAK,CAAC;AAAA,UAChE;AAAA,QACF;AAAA,MACF,CAAC;AAAA,IACH,CAAC;AAAA,EACH,UAAE;AACA,QAAI,SAAS;AACX,mBAAa,OAAO;AAAA,IACtB;AAAA,EACF;AACF;",
|
|
6
|
-
"names": ["require"]
|
|
7
|
-
}
|
|
@@ -1,7 +0,0 @@
|
|
|
1
|
-
{
|
|
2
|
-
"version": 3,
|
|
3
|
-
"sources": ["../../../src/runtime/actions/sandbox.ts"],
|
|
4
|
-
"sourcesContent": ["import { newQuickJSWASMModuleFromVariant } from \"quickjs-emscripten-core\";\nimport type { CompiledActionManifest } from \"../../types.js\";\nimport type { LocalActionContext } from \"./context.js\";\n\nexport async function executeSandboxedAction(\n action: CompiledActionManifest,\n parameters: Record<string, unknown>,\n context: LocalActionContext,\n limits: {\n memoryLimitMb?: number;\n stackLimitKb?: number;\n } = {},\n): Promise<unknown> {\n if (!action.source) {\n throw new Error(`Action \"${action.name}\" has no compiled source.`);\n }\n\n const quickJs = await newQuickJSWASMModuleFromVariant(\n import(\"@jitl/quickjs-singlefile-cjs-release-sync\"),\n );\n const runtime = quickJs.newRuntime();\n const timeoutMs = action.timeoutMs ?? 10_000;\n const deadline = Date.now() + timeoutMs;\n runtime.setMemoryLimit((limits.memoryLimitMb ?? 32) * 1024 * 1024);\n runtime.setMaxStackSize((limits.stackLimitKb ?? 512) * 1024);\n runtime.setInterruptHandler(() => Date.now() > deadline);\n const vm = runtime.newContext();\n\n try {\n const fetchHandle = vm.newFunction(\n \"__orchaFetch\",\n (urlHandle, initHandle) => {\n const url = vm.getString(urlHandle);\n const rawInit = vm.getString(initHandle);\n const init = rawInit ? JSON.parse(rawInit) as RequestInit : undefined;\n const deferred = vm.newPromise();\n void context.fetch(url, init).then(\n async (response) => {\n const body = await response.text();\n const resultHandle = vm.newString(\n JSON.stringify({\n status: response.status,\n statusText: response.statusText,\n headers: Object.fromEntries(response.headers.entries()),\n body,\n }),\n );\n deferred.resolve(resultHandle);\n resultHandle.dispose();\n },\n (error) => {\n const errorHandle = vm.newError(\n error instanceof Error ? error.message : String(error),\n );\n deferred.reject(errorHandle);\n errorHandle.dispose();\n },\n );\n void deferred.settled.then(() => {\n const jobs = runtime.executePendingJobs();\n jobs.dispose();\n });\n return deferred.handle;\n },\n );\n vm.setProp(vm.global, \"__orchaFetch\", fetchHandle);\n fetchHandle.dispose();\n\n const logHandle = vm.newFunction(\"__orchaLog\", (...handles) => {\n context.log(...handles.map((handle) => vm.dump(handle)));\n });\n vm.setProp(vm.global, \"__orchaLog\", logHandle);\n logHandle.dispose();\n\n const source = createSandboxProgram(action, parameters, context);\n const evaluation = vm.evalCode(\n source,\n `${action.name}.js`,\n );\n const promiseHandle = vm.unwrapResult(evaluation);\n try {\n const settledPromise = vm.resolvePromise(promiseHandle);\n const pendingJobs = runtime.executePendingJobs();\n try {\n if (pendingJobs.error) {\n const error = pendingJobs.error.context.dump(pendingJobs.error);\n throw new Error(\n error instanceof Error ? error.message : String(error),\n );\n }\n } finally {\n pendingJobs.dispose();\n }\n const settled = await settledPromise;\n const resultHandle = vm.unwrapResult(settled);\n try {\n const serialized = vm.getString(resultHandle);\n return JSON.parse(serialized);\n } finally {\n resultHandle.dispose();\n }\n } finally {\n promiseHandle.dispose();\n }\n } finally {\n vm.dispose();\n runtime.dispose();\n }\n}\n\nfunction createSandboxProgram(\n action: CompiledActionManifest,\n parameters: Record<string, unknown>,\n context: LocalActionContext,\n): string {\n return [\n action.source,\n `const __parameters = ${JSON.stringify(parameters)};`,\n `const __contextData = ${JSON.stringify({\n sessionId: context.sessionId,\n metadata: context.metadata,\n idempotencyKey: context.idempotencyKey,\n env: context.env,\n })};`,\n \"const __context = Object.freeze({\",\n \" ...__contextData,\",\n \" log: (...values) => __orchaLog(...values),\",\n \" fetch: async (url, init = {}) => {\",\n \" const response = JSON.parse(await __orchaFetch(String(url), JSON.stringify(init)));\",\n \" return Object.freeze({\",\n \" ok: response.status >= 200 && response.status < 300,\",\n \" status: response.status,\",\n \" statusText: response.statusText,\",\n \" headers: Object.freeze(response.headers),\",\n \" text: async () => response.body,\",\n \" json: async () => JSON.parse(response.body),\",\n \" });\",\n \" },\",\n \"});\",\n \"(async () => {\",\n \" const executable = __orchaActionModule.default;\",\n ' if (typeof executable !== \"function\") throw new Error(\"Action must export a default function.\");',\n \" const output = await executable(__parameters, __context);\",\n \" const serialized = JSON.stringify(output);\",\n ' if (serialized === undefined) throw new Error(\"Action output must be JSON serializable.\");',\n \" return serialized;\",\n \"})()\",\n ].join(\"\\n\");\n}\n"],
|
|
5
|
-
"mappings": "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",
|
|
6
|
-
"names": []
|
|
7
|
-
}
|