@alquimia-ai/tools 2.2.0 → 2.4.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.
Files changed (76) hide show
  1. package/dist/actions/index.d.mts +1 -0
  2. package/dist/actions/index.d.ts +1 -0
  3. package/dist/actions/index.js.map +1 -1
  4. package/dist/actions/index.mjs.map +1 -1
  5. package/dist/actions-B0hfoYRd.d.ts +57 -0
  6. package/dist/actions-CZU_GRy5.d.mts +57 -0
  7. package/dist/adapters/fetch.d.mts +1 -0
  8. package/dist/adapters/fetch.d.ts +1 -0
  9. package/dist/adapters/fetch.js +4 -0
  10. package/dist/adapters/fetch.js.map +1 -1
  11. package/dist/adapters/fetch.mjs +4 -0
  12. package/dist/adapters/fetch.mjs.map +1 -1
  13. package/dist/adapters/index.d.mts +1 -0
  14. package/dist/adapters/index.d.ts +1 -0
  15. package/dist/adapters/index.js.map +1 -1
  16. package/dist/adapters/next.d.mts +1 -0
  17. package/dist/adapters/next.d.ts +1 -0
  18. package/dist/adapters/next.js +4 -0
  19. package/dist/adapters/next.js.map +1 -1
  20. package/dist/adapters/next.mjs +4 -0
  21. package/dist/adapters/next.mjs.map +1 -1
  22. package/dist/genui/index.d.mts +3027 -0
  23. package/dist/genui/index.d.ts +3027 -0
  24. package/dist/genui/index.js +3368 -0
  25. package/dist/genui/index.js.map +1 -0
  26. package/dist/genui/index.mjs +3345 -0
  27. package/dist/genui/index.mjs.map +1 -0
  28. package/dist/hooks/index.d.mts +25 -2
  29. package/dist/hooks/index.d.ts +25 -2
  30. package/dist/hooks/index.js +510 -0
  31. package/dist/hooks/index.js.map +1 -1
  32. package/dist/hooks/index.mjs +511 -1
  33. package/dist/hooks/index.mjs.map +1 -1
  34. package/dist/next/index.d.mts +7 -0
  35. package/dist/next/index.d.ts +7 -0
  36. package/dist/next/index.js +50 -0
  37. package/dist/next/index.js.map +1 -1
  38. package/dist/next/index.mjs +50 -0
  39. package/dist/next/index.mjs.map +1 -1
  40. package/dist/providers/index.d.mts +3 -2
  41. package/dist/providers/index.d.ts +3 -2
  42. package/dist/providers/index.js.map +1 -1
  43. package/dist/providers/index.mjs.map +1 -1
  44. package/dist/proxy.d.mts +2 -0
  45. package/dist/proxy.d.ts +2 -0
  46. package/dist/proxy.js +41 -0
  47. package/dist/proxy.js.map +1 -1
  48. package/dist/proxy.mjs +41 -0
  49. package/dist/proxy.mjs.map +1 -1
  50. package/dist/registry-Bcu_ZYL1.d.mts +19 -0
  51. package/dist/registry-Bcu_ZYL1.d.ts +19 -0
  52. package/dist/sdk/index.d.mts +10 -0
  53. package/dist/sdk/index.d.ts +10 -0
  54. package/dist/sdk/index.js +26 -0
  55. package/dist/sdk/index.js.map +1 -1
  56. package/dist/sdk/index.mjs +26 -0
  57. package/dist/sdk/index.mjs.map +1 -1
  58. package/dist/services/index.d.mts +1 -0
  59. package/dist/services/index.d.ts +1 -0
  60. package/dist/types/index.d.mts +12 -1
  61. package/dist/types/index.d.ts +12 -1
  62. package/dist/types/index.js.map +1 -1
  63. package/dist/types/index.mjs.map +1 -1
  64. package/dist/types-DnfWUE9V.d.mts +56 -0
  65. package/dist/types-DnfWUE9V.d.ts +56 -0
  66. package/dist/{types-CIqszY3g.d.mts → types-Dvu9y4WM.d.mts} +1 -1
  67. package/dist/{types-CIqszY3g.d.ts → types-Dvu9y4WM.d.ts} +1 -1
  68. package/dist/utils/index.d.mts +6 -2
  69. package/dist/utils/index.d.ts +6 -2
  70. package/dist/utils/index.js +4 -0
  71. package/dist/utils/index.js.map +1 -1
  72. package/dist/utils/index.mjs +4 -0
  73. package/dist/utils/index.mjs.map +1 -1
  74. package/dist/worklog/index.d.mts +2 -2
  75. package/dist/worklog/index.d.ts +2 -2
  76. package/package.json +19 -7
@@ -1 +1 @@
1
- {"version":3,"sources":["../../src/next/index.ts","../../src/proxy.ts","../../src/next/actions.ts","../../src/actions/session.action.ts"],"sourcesContent":["import { createAlquimiaProxyHandler, type ProxyConfig } from '../proxy';\n\nexport type { ProxyConfig };\n\nexport {\n handleChatRequest,\n handleStreamRequest,\n type ChatRouteContext,\n type ChatRequestConfig,\n type ChatResponse,\n} from './actions';\n\nexport { initConversation } from '../actions';\n\nexport interface NextJsRouteContext {\n params: Promise<{ path: string[] }>;\n}\n\nexport function createNextJsRouteHandlers(config: ProxyConfig) {\n const handler = createAlquimiaProxyHandler(config);\n\n return {\n /**\n * Use as POST handler in app/api/chat/[...path]/route.ts\n */\n handleInfer: async (request: Request, context: NextJsRouteContext): Promise<Response> => {\n const { path } = await context.params;\n return handler.handleInfer(request, path.join('/'));\n },\n\n /**\n * Use as GET handler in app/api/stream/[...path]/route.ts\n */\n handleStream: async (request: Request, context: NextJsRouteContext): Promise<Response> => {\n const { path } = await context.params;\n return handler.handleStream(request, path.join('/'));\n },\n\n /**\n * Use as POST handler in app/api/blob/upload/route.ts (the runtime's\n * `POST /context/blob/upload`). Identity travels via headers — no path\n * params required.\n */\n handleBlobUpload: async (request: Request): Promise<Response> => {\n return handler.handleBlobUpload(request);\n },\n };\n}\n","export interface ProxyConfig {\n assistantBaseUrl: string;\n apiKey: string;\n inferRoute?: string; // default: 'event/infer'\n streamRoute?: string; // default: 'event/stream'\n blobUploadRoute?: string; // default: 'context/blob/upload'\n}\n\nexport interface AlquimiaProxyHandler {\n handleInfer(request: Request, pathSuffix: string): Promise<Response>;\n handleStream(request: Request, pathSuffix: string): Promise<Response>;\n handleBlobUpload(request: Request): Promise<Response>;\n}\n\nconst IDENTITY_HEADER_NAMES = [\n 'task-id',\n 'parent-task-id',\n 'session-id',\n 'user-id',\n 'assistant-id',\n 'agentspace-id',\n 'channel-id',\n 'depth',\n] as const;\n\nfunction pickIdentityHeaders(request: Request): Record<string, string> {\n const out: Record<string, string> = {};\n for (const name of IDENTITY_HEADER_NAMES) {\n const value = request.headers.get(name);\n if (value) out[name] = value;\n }\n return out;\n}\n\nexport function createAlquimiaProxyHandler(config: ProxyConfig): AlquimiaProxyHandler {\n const baseUrl = config.assistantBaseUrl.replace(/\\/$/, '');\n const inferRoute = config.inferRoute ?? 'event/infer';\n const streamRoute = config.streamRoute ?? 'event/stream';\n const blobUploadRoute = config.blobUploadRoute ?? 'context/blob/upload';\n const authHeader = { Authorization: `Bearer ${config.apiKey}` };\n\n return {\n async handleInfer(request: Request, pathSuffix: string): Promise<Response> {\n try {\n const body = await request.json();\n const url = new URL(request.url);\n const querySuffix = url.searchParams.toString()\n ? `?${url.searchParams.toString()}`\n : '';\n const slug = pathSuffix.replace(/^\\/+|\\/+$/g, '');\n const targetUrl = `${baseUrl}/${inferRoute}/${slug}${querySuffix}`;\n\n\n const response = await fetch(targetUrl, {\n method: 'POST',\n headers: {\n 'Content-Type': 'application/json',\n ...authHeader,\n },\n body: JSON.stringify(body),\n });\n\n if (!response.ok) {\n const errorJson = await response.json().catch(() => ({}));\n console.error('AlquimiaProxy handleInfer error:', {\n status: response.status,\n statusText: response.statusText,\n body: errorJson,\n });\n return new Response(\n JSON.stringify({\n status: response.status,\n statusText: response.statusText,\n ...errorJson,\n }),\n { status: response.status, headers: { 'Content-Type': 'application/json' } }\n );\n }\n\n return new Response(response.body, {\n status: 200,\n headers: {\n 'Access-Control-Allow-Origin': '*',\n 'Access-Control-Allow-Methods': 'POST, OPTIONS',\n 'Access-Control-Allow-Headers': 'Content-Type, Content-Encoding',\n },\n });\n } catch (error) {\n console.error('AlquimiaProxy handleInfer exception:', error);\n return new Response(\n JSON.stringify({ error: 'Failed to forward infer request' }),\n { status: 500, headers: { 'Content-Type': 'application/json' } }\n );\n }\n },\n\n async handleStream(request: Request, pathSuffix: string): Promise<Response> {\n try {\n const targetUrl = `${baseUrl}/${streamRoute}/${pathSuffix}`;\n\n const response = await fetch(targetUrl, {\n headers: { 'Content-Type': 'application/json', ...authHeader },\n });\n\n if (!response.ok) {\n const errorJson = await response.json().catch(() => ({}));\n console.error('AlquimiaProxy handleStream error:', {\n status: response.status,\n statusText: response.statusText,\n body: errorJson,\n });\n return new Response(\n JSON.stringify({\n error: errorJson.message || response.statusText || 'Failed to forward stream',\n ...errorJson,\n }),\n { status: response.status, headers: { 'Content-Type': 'application/json' } }\n );\n }\n\n return new Response(response.body, {\n status: 200,\n headers: {\n 'Content-Type': 'text/event-stream',\n 'Cache-Control': 'no-cache',\n Connection: 'keep-alive',\n },\n });\n } catch (error) {\n console.error('AlquimiaProxy handleStream exception:', error);\n return new Response(\n JSON.stringify({ error: 'Failed to forward stream request' }),\n { status: 500, headers: { 'Content-Type': 'application/json' } }\n );\n }\n },\n\n async handleBlobUpload(request: Request): Promise<Response> {\n try {\n const targetUrl = `${baseUrl}/${blobUploadRoute}`;\n const contentType = request.headers.get('Content-Type') ?? '';\n\n const response = await fetch(targetUrl, {\n method: 'POST',\n headers: {\n ...authHeader,\n ...(contentType && { 'Content-Type': contentType }),\n ...pickIdentityHeaders(request),\n },\n body: request.body,\n duplex: 'half',\n } as RequestInit);\n\n if (!response.ok) {\n return new Response(\n JSON.stringify({ error: 'Failed to upload blob', status: response.status }),\n { status: response.status, headers: { 'Content-Type': 'application/json' } }\n );\n }\n\n const responseText = await response.text();\n return new Response(responseText, {\n status: 200,\n headers: { 'Content-Type': 'application/json' },\n });\n } catch (error) {\n console.error('AlquimiaProxy handleBlobUpload exception:', error);\n return new Response(\n JSON.stringify({ error: 'Failed to forward blob upload request' }),\n { status: 500, headers: { 'Content-Type': 'application/json' } }\n );\n }\n },\n };\n}\n","\"use server\";\nimport { NextResponse } from \"next/server\";\nimport { headers } from \"next/headers\";\n\nexport type ChatRouteContext = {\n params: {\n path: string[];\n };\n};\n\nexport type ChatRequestConfig = {\n assistantBaseUrl: string;\n assistantRoute?: string;\n apiKey: string;\n};\n\nexport type ChatResponse = Response | any;\n\n/**\n * @deprecated Use `createNextJsRouteHandlers()` from `@alquimia-ai/tools/next` instead.\n */\nexport async function handleChatRequest(\n request: Request,\n context: ChatRouteContext,\n config: ChatRequestConfig\n): Promise<ChatResponse> {\n try {\n const headersList = await headers();\n const body = await request.json();\n const routeParams = await context.params;\n const routePath = routeParams.path.join(\"/\");\n const assistantRoute = config.assistantRoute || \"infer\";\n\n const url = new URL(request.url);\n const queryString = url.searchParams.toString();\n const querySuffix = queryString ? `?${queryString}` : '';\n \n const assistantUrl = `${config.assistantBaseUrl}/${assistantRoute}/${routePath}${querySuffix}`;\n\n const response = await fetch(assistantUrl, {\n method: \"POST\",\n headers: {\n \"Content-Type\": \"application/json\",\n Authorization: `Bearer ${config.apiKey}`,\n ...headersList,\n },\n body: JSON.stringify(body),\n });\n\n if (!response.ok) {\n const errorJson = await response.json();\n console.error(\"Chat inference server error:\", {\n status: response.status,\n statusText: response.statusText,\n body: errorJson,\n });\n\n return NextResponse.json(\n {\n status: response.status,\n statusText: response.statusText ||\n \"Failed to forward Chat data\",\n ...errorJson,\n },\n { status: response.status }\n );\n }\n\n return new NextResponse(response.body, {\n status: 200,\n headers: {\n \"Access-Control-Allow-Origin\": \"*\",\n \"Access-Control-Allow-Methods\": \"POST, OPTIONS\",\n \"Access-Control-Allow-Headers\": \"Content-Type, Content-Encoding\",\n },\n });\n } catch (error) {\n return NextResponse.json(\n { error: \"Failed to forward Chat data\" },\n { status: 500 }\n );\n }\n}\n\n/**\n * @deprecated Use `createNextJsRouteHandlers()` from `@alquimia-ai/tools/next` instead.\n */\nexport async function handleStreamRequest(\n request: Request,\n context: ChatRouteContext,\n config: ChatRequestConfig\n): Promise<Response> {\n try {\n const headersList = await headers();\n const routeParams = await context.params;\n const path = routeParams.path.join(\"/\");\n const assistantRoute = config.assistantRoute || \"stream\";\n\n const streamUrl = `${config.assistantBaseUrl}/${assistantRoute}/${path}`;\n\n const response = await fetch(streamUrl, {\n headers: {\n \"Content-Type\": \"application/json\",\n Authorization: `Bearer ${config.apiKey}`,\n ...Object.fromEntries(headersList.entries()),\n },\n });\n\n if (!response.ok) {\n const errorJson = await response.json();\n console.error(\"Stream server error:\", {\n status: response.status,\n statusText: response.statusText,\n body: errorJson,\n });\n\n return new Response(\n JSON.stringify({\n error:\n errorJson.message ||\n response.statusText ||\n \"Failed to forward Stream data\",\n ...errorJson,\n }),\n { status: response.status }\n );\n }\n\n return new Response(response.body, {\n status: 200,\n headers: {\n \"Content-Type\": \"text/event-stream\",\n \"Cache-Control\": \"no-cache\",\n Connection: \"keep-alive\",\n },\n });\n } catch (error) {\n console.error(\"Stream error:\", error);\n return new Response(\n JSON.stringify({ error: \"Failed to forward stream data\" }),\n { status: 500 }\n );\n }\n}\n","\"use server\";\n\nimport { randomUUID } from \"crypto\";\nimport { cookies } from \"next/headers\";\nimport { ConversationsMap } from \"../types/type\";\n\nexport async function initConversation(\n reset?: boolean,\n topicId?: string\n): Promise<string> {\n const cookieStore = await cookies();\n\n if (!topicId) {\n let conversationId = randomUUID().toString();\n const alquimiaSession = cookieStore.get(\"alquimia-session\");\n\n if (!alquimiaSession || reset) {\n cookieStore.set(\"alquimia-session\", conversationId);\n } else {\n conversationId = alquimiaSession.value;\n }\n\n return conversationId;\n }\n\n let conversationsMap: ConversationsMap = {};\n const existingConversations = cookieStore.get(\"alquimia-sessions\");\n\n if (existingConversations) {\n try {\n const decodedValue = decodeURIComponent(existingConversations.value);\n conversationsMap = JSON.parse(decodedValue) as ConversationsMap;\n } catch (e) {\n console.error(\"Error parsing conversations cookie:\", e);\n conversationsMap = {};\n }\n }\n\n if (!conversationsMap[topicId] || reset) {\n conversationsMap[topicId] = randomUUID().toString();\n }\n\n cookieStore.set(\"alquimia-sessions\", JSON.stringify(conversationsMap));\n\n return conversationsMap[topicId];\n}\n"],"mappings":"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","names":["import_headers"]}
1
+ {"version":3,"sources":["../../src/next/index.ts","../../src/proxy.ts","../../src/next/actions.ts","../../src/actions/session.action.ts"],"sourcesContent":["import { createAlquimiaProxyHandler, type ProxyConfig } from '../proxy';\n\nexport type { ProxyConfig };\n\nexport {\n handleChatRequest,\n handleStreamRequest,\n type ChatRouteContext,\n type ChatRequestConfig,\n type ChatResponse,\n} from './actions';\n\nexport { initConversation } from '../actions';\n\nexport interface NextJsRouteContext {\n params: Promise<{ path: string[] }>;\n}\n\nexport function createNextJsRouteHandlers(config: ProxyConfig) {\n const handler = createAlquimiaProxyHandler(config);\n\n return {\n /**\n * Use as POST handler in app/api/chat/[...path]/route.ts\n */\n handleInfer: async (request: Request, context: NextJsRouteContext): Promise<Response> => {\n const { path } = await context.params;\n return handler.handleInfer(request, path.join('/'));\n },\n\n /**\n * Use as GET handler in app/api/stream/[...path]/route.ts\n */\n handleStream: async (request: Request, context: NextJsRouteContext): Promise<Response> => {\n const { path } = await context.params;\n return handler.handleStream(request, path.join('/'));\n },\n\n /**\n * Use as POST handler in app/api/blob/upload/route.ts (the runtime's\n * `POST /context/blob/upload`). Identity travels via headers — no path\n * params required.\n */\n handleBlobUpload: async (request: Request): Promise<Response> => {\n return handler.handleBlobUpload(request);\n },\n\n /**\n * Use as POST handler in app/api/tool-completion/[...path]/route.ts (the\n * runtime's `POST /event/tool-completion`). The pending call is correlated\n * by `control_id` in the body + the `context-metadata` header — no path\n * params required.\n */\n handleToolCompletion: async (request: Request): Promise<Response> => {\n return handler.handleToolCompletion(request);\n },\n };\n}\n","export interface ProxyConfig {\n assistantBaseUrl: string;\n apiKey: string;\n inferRoute?: string; // default: 'event/infer'\n streamRoute?: string; // default: 'event/stream'\n blobUploadRoute?: string; // default: 'context/blob/upload'\n toolCompletionRoute?: string; // default: 'event/tool-completion'\n}\n\nexport interface AlquimiaProxyHandler {\n handleInfer(request: Request, pathSuffix: string): Promise<Response>;\n handleStream(request: Request, pathSuffix: string): Promise<Response>;\n handleBlobUpload(request: Request): Promise<Response>;\n handleToolCompletion(request: Request): Promise<Response>;\n}\n\nconst IDENTITY_HEADER_NAMES = [\n 'task-id',\n 'parent-task-id',\n 'session-id',\n 'user-id',\n 'assistant-id',\n 'agentspace-id',\n 'channel-id',\n 'depth',\n] as const;\n\nfunction pickIdentityHeaders(request: Request): Record<string, string> {\n const out: Record<string, string> = {};\n for (const name of IDENTITY_HEADER_NAMES) {\n const value = request.headers.get(name);\n if (value) out[name] = value;\n }\n return out;\n}\n\nexport function createAlquimiaProxyHandler(config: ProxyConfig): AlquimiaProxyHandler {\n const baseUrl = config.assistantBaseUrl.replace(/\\/$/, '');\n const inferRoute = config.inferRoute ?? 'event/infer';\n const streamRoute = config.streamRoute ?? 'event/stream';\n const blobUploadRoute = config.blobUploadRoute ?? 'context/blob/upload';\n const toolCompletionRoute = config.toolCompletionRoute ?? 'event/tool-completion';\n const authHeader = { Authorization: `Bearer ${config.apiKey}` };\n\n return {\n async handleInfer(request: Request, pathSuffix: string): Promise<Response> {\n try {\n const body = await request.json();\n const url = new URL(request.url);\n const querySuffix = url.searchParams.toString()\n ? `?${url.searchParams.toString()}`\n : '';\n const slug = pathSuffix.replace(/^\\/+|\\/+$/g, '');\n const targetUrl = `${baseUrl}/${inferRoute}/${slug}${querySuffix}`;\n\n\n const response = await fetch(targetUrl, {\n method: 'POST',\n headers: {\n 'Content-Type': 'application/json',\n ...authHeader,\n },\n body: JSON.stringify(body),\n });\n\n if (!response.ok) {\n const errorJson = await response.json().catch(() => ({}));\n console.error('AlquimiaProxy handleInfer error:', {\n status: response.status,\n statusText: response.statusText,\n body: errorJson,\n });\n return new Response(\n JSON.stringify({\n status: response.status,\n statusText: response.statusText,\n ...errorJson,\n }),\n { status: response.status, headers: { 'Content-Type': 'application/json' } }\n );\n }\n\n return new Response(response.body, {\n status: 200,\n headers: {\n 'Access-Control-Allow-Origin': '*',\n 'Access-Control-Allow-Methods': 'POST, OPTIONS',\n 'Access-Control-Allow-Headers': 'Content-Type, Content-Encoding',\n },\n });\n } catch (error) {\n console.error('AlquimiaProxy handleInfer exception:', error);\n return new Response(\n JSON.stringify({ error: 'Failed to forward infer request' }),\n { status: 500, headers: { 'Content-Type': 'application/json' } }\n );\n }\n },\n\n async handleStream(request: Request, pathSuffix: string): Promise<Response> {\n try {\n const targetUrl = `${baseUrl}/${streamRoute}/${pathSuffix}`;\n\n const response = await fetch(targetUrl, {\n headers: { 'Content-Type': 'application/json', ...authHeader },\n });\n\n if (!response.ok) {\n const errorJson = await response.json().catch(() => ({}));\n console.error('AlquimiaProxy handleStream error:', {\n status: response.status,\n statusText: response.statusText,\n body: errorJson,\n });\n return new Response(\n JSON.stringify({\n error: errorJson.message || response.statusText || 'Failed to forward stream',\n ...errorJson,\n }),\n { status: response.status, headers: { 'Content-Type': 'application/json' } }\n );\n }\n\n return new Response(response.body, {\n status: 200,\n headers: {\n 'Content-Type': 'text/event-stream',\n 'Cache-Control': 'no-cache',\n Connection: 'keep-alive',\n },\n });\n } catch (error) {\n console.error('AlquimiaProxy handleStream exception:', error);\n return new Response(\n JSON.stringify({ error: 'Failed to forward stream request' }),\n { status: 500, headers: { 'Content-Type': 'application/json' } }\n );\n }\n },\n\n async handleBlobUpload(request: Request): Promise<Response> {\n try {\n const targetUrl = `${baseUrl}/${blobUploadRoute}`;\n const contentType = request.headers.get('Content-Type') ?? '';\n\n const response = await fetch(targetUrl, {\n method: 'POST',\n headers: {\n ...authHeader,\n ...(contentType && { 'Content-Type': contentType }),\n ...pickIdentityHeaders(request),\n },\n body: request.body,\n duplex: 'half',\n } as RequestInit);\n\n if (!response.ok) {\n return new Response(\n JSON.stringify({ error: 'Failed to upload blob', status: response.status }),\n { status: response.status, headers: { 'Content-Type': 'application/json' } }\n );\n }\n\n const responseText = await response.text();\n return new Response(responseText, {\n status: 200,\n headers: { 'Content-Type': 'application/json' },\n });\n } catch (error) {\n console.error('AlquimiaProxy handleBlobUpload exception:', error);\n return new Response(\n JSON.stringify({ error: 'Failed to forward blob upload request' }),\n { status: 500, headers: { 'Content-Type': 'application/json' } }\n );\n }\n },\n\n async handleToolCompletion(request: Request): Promise<Response> {\n try {\n const body = await request.text();\n const headers: Record<string, string> = {\n 'Content-Type': 'application/json',\n ...authHeader,\n };\n // Forward the runtime's tool-completion correlation headers verbatim\n // (non-hyphenated names, per the runtime OpenAPI). These route the\n // completion to the parked task so the SSE stream resumes.\n const CORRELATION_HEADERS = [\n 'taskid',\n 'parenttaskid',\n 'sessionid',\n 'userid',\n 'assistantid',\n 'agentspaceid',\n 'channelid',\n 'depth',\n ];\n for (const name of CORRELATION_HEADERS) {\n const value = request.headers.get(name);\n if (value) headers[name] = value;\n }\n const trace = request.headers.get('x-trace-parent');\n if (trace) headers['x-trace-parent'] = trace;\n\n const response = await fetch(`${baseUrl}/${toolCompletionRoute}`, {\n method: 'POST',\n headers,\n body,\n });\n\n return new Response(await response.text(), {\n status: response.status,\n headers: { 'Content-Type': 'application/json' },\n });\n } catch (error) {\n console.error('AlquimiaProxy handleToolCompletion exception:', error);\n return new Response(\n JSON.stringify({ error: 'Failed to forward tool-completion request' }),\n { status: 500, headers: { 'Content-Type': 'application/json' } }\n );\n }\n },\n };\n}\n","\"use server\";\nimport { NextResponse } from \"next/server\";\nimport { headers } from \"next/headers\";\n\nexport type ChatRouteContext = {\n params: {\n path: string[];\n };\n};\n\nexport type ChatRequestConfig = {\n assistantBaseUrl: string;\n assistantRoute?: string;\n apiKey: string;\n};\n\nexport type ChatResponse = Response | any;\n\n/**\n * @deprecated Use `createNextJsRouteHandlers()` from `@alquimia-ai/tools/next` instead.\n */\nexport async function handleChatRequest(\n request: Request,\n context: ChatRouteContext,\n config: ChatRequestConfig\n): Promise<ChatResponse> {\n try {\n const headersList = await headers();\n const body = await request.json();\n const routeParams = await context.params;\n const routePath = routeParams.path.join(\"/\");\n const assistantRoute = config.assistantRoute || \"infer\";\n\n const url = new URL(request.url);\n const queryString = url.searchParams.toString();\n const querySuffix = queryString ? `?${queryString}` : '';\n \n const assistantUrl = `${config.assistantBaseUrl}/${assistantRoute}/${routePath}${querySuffix}`;\n\n const response = await fetch(assistantUrl, {\n method: \"POST\",\n headers: {\n \"Content-Type\": \"application/json\",\n Authorization: `Bearer ${config.apiKey}`,\n ...headersList,\n },\n body: JSON.stringify(body),\n });\n\n if (!response.ok) {\n const errorJson = await response.json();\n console.error(\"Chat inference server error:\", {\n status: response.status,\n statusText: response.statusText,\n body: errorJson,\n });\n\n return NextResponse.json(\n {\n status: response.status,\n statusText: response.statusText ||\n \"Failed to forward Chat data\",\n ...errorJson,\n },\n { status: response.status }\n );\n }\n\n return new NextResponse(response.body, {\n status: 200,\n headers: {\n \"Access-Control-Allow-Origin\": \"*\",\n \"Access-Control-Allow-Methods\": \"POST, OPTIONS\",\n \"Access-Control-Allow-Headers\": \"Content-Type, Content-Encoding\",\n },\n });\n } catch (error) {\n return NextResponse.json(\n { error: \"Failed to forward Chat data\" },\n { status: 500 }\n );\n }\n}\n\n/**\n * @deprecated Use `createNextJsRouteHandlers()` from `@alquimia-ai/tools/next` instead.\n */\nexport async function handleStreamRequest(\n request: Request,\n context: ChatRouteContext,\n config: ChatRequestConfig\n): Promise<Response> {\n try {\n const headersList = await headers();\n const routeParams = await context.params;\n const path = routeParams.path.join(\"/\");\n const assistantRoute = config.assistantRoute || \"stream\";\n\n const streamUrl = `${config.assistantBaseUrl}/${assistantRoute}/${path}`;\n\n const response = await fetch(streamUrl, {\n headers: {\n \"Content-Type\": \"application/json\",\n Authorization: `Bearer ${config.apiKey}`,\n ...Object.fromEntries(headersList.entries()),\n },\n });\n\n if (!response.ok) {\n const errorJson = await response.json();\n console.error(\"Stream server error:\", {\n status: response.status,\n statusText: response.statusText,\n body: errorJson,\n });\n\n return new Response(\n JSON.stringify({\n error:\n errorJson.message ||\n response.statusText ||\n \"Failed to forward Stream data\",\n ...errorJson,\n }),\n { status: response.status }\n );\n }\n\n return new Response(response.body, {\n status: 200,\n headers: {\n \"Content-Type\": \"text/event-stream\",\n \"Cache-Control\": \"no-cache\",\n Connection: \"keep-alive\",\n },\n });\n } catch (error) {\n console.error(\"Stream error:\", error);\n return new Response(\n JSON.stringify({ error: \"Failed to forward stream data\" }),\n { status: 500 }\n );\n }\n}\n","\"use server\";\n\nimport { randomUUID } from \"crypto\";\nimport { cookies } from \"next/headers\";\nimport { ConversationsMap } from \"../types/type\";\n\nexport async function initConversation(\n reset?: boolean,\n topicId?: string\n): Promise<string> {\n const cookieStore = await cookies();\n\n if (!topicId) {\n let conversationId = randomUUID().toString();\n const alquimiaSession = cookieStore.get(\"alquimia-session\");\n\n if (!alquimiaSession || reset) {\n cookieStore.set(\"alquimia-session\", conversationId);\n } else {\n conversationId = alquimiaSession.value;\n }\n\n return conversationId;\n }\n\n let conversationsMap: ConversationsMap = {};\n const existingConversations = cookieStore.get(\"alquimia-sessions\");\n\n if (existingConversations) {\n try {\n const decodedValue = decodeURIComponent(existingConversations.value);\n conversationsMap = JSON.parse(decodedValue) as ConversationsMap;\n } catch (e) {\n console.error(\"Error parsing conversations cookie:\", e);\n conversationsMap = {};\n }\n }\n\n if (!conversationsMap[topicId] || reset) {\n conversationsMap[topicId] = randomUUID().toString();\n }\n\n cookieStore.set(\"alquimia-sessions\", JSON.stringify(conversationsMap));\n\n return conversationsMap[topicId];\n}\n"],"mappings":"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","names":["headers","import_headers"]}
@@ -22,6 +22,7 @@ function createAlquimiaProxyHandler(config) {
22
22
  const inferRoute = config.inferRoute ?? "event/infer";
23
23
  const streamRoute = config.streamRoute ?? "event/stream";
24
24
  const blobUploadRoute = config.blobUploadRoute ?? "context/blob/upload";
25
+ const toolCompletionRoute = config.toolCompletionRoute ?? "event/tool-completion";
25
26
  const authHeader = { Authorization: `Bearer ${config.apiKey}` };
26
27
  return {
27
28
  async handleInfer(request, pathSuffix) {
@@ -140,6 +141,46 @@ function createAlquimiaProxyHandler(config) {
140
141
  { status: 500, headers: { "Content-Type": "application/json" } }
141
142
  );
142
143
  }
144
+ },
145
+ async handleToolCompletion(request) {
146
+ try {
147
+ const body = await request.text();
148
+ const headers2 = {
149
+ "Content-Type": "application/json",
150
+ ...authHeader
151
+ };
152
+ const CORRELATION_HEADERS = [
153
+ "taskid",
154
+ "parenttaskid",
155
+ "sessionid",
156
+ "userid",
157
+ "assistantid",
158
+ "agentspaceid",
159
+ "channelid",
160
+ "depth"
161
+ ];
162
+ for (const name of CORRELATION_HEADERS) {
163
+ const value = request.headers.get(name);
164
+ if (value) headers2[name] = value;
165
+ }
166
+ const trace = request.headers.get("x-trace-parent");
167
+ if (trace) headers2["x-trace-parent"] = trace;
168
+ const response = await fetch(`${baseUrl}/${toolCompletionRoute}`, {
169
+ method: "POST",
170
+ headers: headers2,
171
+ body
172
+ });
173
+ return new Response(await response.text(), {
174
+ status: response.status,
175
+ headers: { "Content-Type": "application/json" }
176
+ });
177
+ } catch (error) {
178
+ console.error("AlquimiaProxy handleToolCompletion exception:", error);
179
+ return new Response(
180
+ JSON.stringify({ error: "Failed to forward tool-completion request" }),
181
+ { status: 500, headers: { "Content-Type": "application/json" } }
182
+ );
183
+ }
143
184
  }
144
185
  };
145
186
  }
@@ -302,6 +343,15 @@ function createNextJsRouteHandlers(config) {
302
343
  */
303
344
  handleBlobUpload: async (request) => {
304
345
  return handler.handleBlobUpload(request);
346
+ },
347
+ /**
348
+ * Use as POST handler in app/api/tool-completion/[...path]/route.ts (the
349
+ * runtime's `POST /event/tool-completion`). The pending call is correlated
350
+ * by `control_id` in the body + the `context-metadata` header — no path
351
+ * params required.
352
+ */
353
+ handleToolCompletion: async (request) => {
354
+ return handler.handleToolCompletion(request);
305
355
  }
306
356
  };
307
357
  }
@@ -1 +1 @@
1
- {"version":3,"sources":["../../src/proxy.ts","../../src/next/actions.ts","../../src/actions/session.action.ts","../../src/next/index.ts"],"sourcesContent":["export interface ProxyConfig {\n assistantBaseUrl: string;\n apiKey: string;\n inferRoute?: string; // default: 'event/infer'\n streamRoute?: string; // default: 'event/stream'\n blobUploadRoute?: string; // default: 'context/blob/upload'\n}\n\nexport interface AlquimiaProxyHandler {\n handleInfer(request: Request, pathSuffix: string): Promise<Response>;\n handleStream(request: Request, pathSuffix: string): Promise<Response>;\n handleBlobUpload(request: Request): Promise<Response>;\n}\n\nconst IDENTITY_HEADER_NAMES = [\n 'task-id',\n 'parent-task-id',\n 'session-id',\n 'user-id',\n 'assistant-id',\n 'agentspace-id',\n 'channel-id',\n 'depth',\n] as const;\n\nfunction pickIdentityHeaders(request: Request): Record<string, string> {\n const out: Record<string, string> = {};\n for (const name of IDENTITY_HEADER_NAMES) {\n const value = request.headers.get(name);\n if (value) out[name] = value;\n }\n return out;\n}\n\nexport function createAlquimiaProxyHandler(config: ProxyConfig): AlquimiaProxyHandler {\n const baseUrl = config.assistantBaseUrl.replace(/\\/$/, '');\n const inferRoute = config.inferRoute ?? 'event/infer';\n const streamRoute = config.streamRoute ?? 'event/stream';\n const blobUploadRoute = config.blobUploadRoute ?? 'context/blob/upload';\n const authHeader = { Authorization: `Bearer ${config.apiKey}` };\n\n return {\n async handleInfer(request: Request, pathSuffix: string): Promise<Response> {\n try {\n const body = await request.json();\n const url = new URL(request.url);\n const querySuffix = url.searchParams.toString()\n ? `?${url.searchParams.toString()}`\n : '';\n const slug = pathSuffix.replace(/^\\/+|\\/+$/g, '');\n const targetUrl = `${baseUrl}/${inferRoute}/${slug}${querySuffix}`;\n\n\n const response = await fetch(targetUrl, {\n method: 'POST',\n headers: {\n 'Content-Type': 'application/json',\n ...authHeader,\n },\n body: JSON.stringify(body),\n });\n\n if (!response.ok) {\n const errorJson = await response.json().catch(() => ({}));\n console.error('AlquimiaProxy handleInfer error:', {\n status: response.status,\n statusText: response.statusText,\n body: errorJson,\n });\n return new Response(\n JSON.stringify({\n status: response.status,\n statusText: response.statusText,\n ...errorJson,\n }),\n { status: response.status, headers: { 'Content-Type': 'application/json' } }\n );\n }\n\n return new Response(response.body, {\n status: 200,\n headers: {\n 'Access-Control-Allow-Origin': '*',\n 'Access-Control-Allow-Methods': 'POST, OPTIONS',\n 'Access-Control-Allow-Headers': 'Content-Type, Content-Encoding',\n },\n });\n } catch (error) {\n console.error('AlquimiaProxy handleInfer exception:', error);\n return new Response(\n JSON.stringify({ error: 'Failed to forward infer request' }),\n { status: 500, headers: { 'Content-Type': 'application/json' } }\n );\n }\n },\n\n async handleStream(request: Request, pathSuffix: string): Promise<Response> {\n try {\n const targetUrl = `${baseUrl}/${streamRoute}/${pathSuffix}`;\n\n const response = await fetch(targetUrl, {\n headers: { 'Content-Type': 'application/json', ...authHeader },\n });\n\n if (!response.ok) {\n const errorJson = await response.json().catch(() => ({}));\n console.error('AlquimiaProxy handleStream error:', {\n status: response.status,\n statusText: response.statusText,\n body: errorJson,\n });\n return new Response(\n JSON.stringify({\n error: errorJson.message || response.statusText || 'Failed to forward stream',\n ...errorJson,\n }),\n { status: response.status, headers: { 'Content-Type': 'application/json' } }\n );\n }\n\n return new Response(response.body, {\n status: 200,\n headers: {\n 'Content-Type': 'text/event-stream',\n 'Cache-Control': 'no-cache',\n Connection: 'keep-alive',\n },\n });\n } catch (error) {\n console.error('AlquimiaProxy handleStream exception:', error);\n return new Response(\n JSON.stringify({ error: 'Failed to forward stream request' }),\n { status: 500, headers: { 'Content-Type': 'application/json' } }\n );\n }\n },\n\n async handleBlobUpload(request: Request): Promise<Response> {\n try {\n const targetUrl = `${baseUrl}/${blobUploadRoute}`;\n const contentType = request.headers.get('Content-Type') ?? '';\n\n const response = await fetch(targetUrl, {\n method: 'POST',\n headers: {\n ...authHeader,\n ...(contentType && { 'Content-Type': contentType }),\n ...pickIdentityHeaders(request),\n },\n body: request.body,\n duplex: 'half',\n } as RequestInit);\n\n if (!response.ok) {\n return new Response(\n JSON.stringify({ error: 'Failed to upload blob', status: response.status }),\n { status: response.status, headers: { 'Content-Type': 'application/json' } }\n );\n }\n\n const responseText = await response.text();\n return new Response(responseText, {\n status: 200,\n headers: { 'Content-Type': 'application/json' },\n });\n } catch (error) {\n console.error('AlquimiaProxy handleBlobUpload exception:', error);\n return new Response(\n JSON.stringify({ error: 'Failed to forward blob upload request' }),\n { status: 500, headers: { 'Content-Type': 'application/json' } }\n );\n }\n },\n };\n}\n","\"use server\";\nimport { NextResponse } from \"next/server\";\nimport { headers } from \"next/headers\";\n\nexport type ChatRouteContext = {\n params: {\n path: string[];\n };\n};\n\nexport type ChatRequestConfig = {\n assistantBaseUrl: string;\n assistantRoute?: string;\n apiKey: string;\n};\n\nexport type ChatResponse = Response | any;\n\n/**\n * @deprecated Use `createNextJsRouteHandlers()` from `@alquimia-ai/tools/next` instead.\n */\nexport async function handleChatRequest(\n request: Request,\n context: ChatRouteContext,\n config: ChatRequestConfig\n): Promise<ChatResponse> {\n try {\n const headersList = await headers();\n const body = await request.json();\n const routeParams = await context.params;\n const routePath = routeParams.path.join(\"/\");\n const assistantRoute = config.assistantRoute || \"infer\";\n\n const url = new URL(request.url);\n const queryString = url.searchParams.toString();\n const querySuffix = queryString ? `?${queryString}` : '';\n \n const assistantUrl = `${config.assistantBaseUrl}/${assistantRoute}/${routePath}${querySuffix}`;\n\n const response = await fetch(assistantUrl, {\n method: \"POST\",\n headers: {\n \"Content-Type\": \"application/json\",\n Authorization: `Bearer ${config.apiKey}`,\n ...headersList,\n },\n body: JSON.stringify(body),\n });\n\n if (!response.ok) {\n const errorJson = await response.json();\n console.error(\"Chat inference server error:\", {\n status: response.status,\n statusText: response.statusText,\n body: errorJson,\n });\n\n return NextResponse.json(\n {\n status: response.status,\n statusText: response.statusText ||\n \"Failed to forward Chat data\",\n ...errorJson,\n },\n { status: response.status }\n );\n }\n\n return new NextResponse(response.body, {\n status: 200,\n headers: {\n \"Access-Control-Allow-Origin\": \"*\",\n \"Access-Control-Allow-Methods\": \"POST, OPTIONS\",\n \"Access-Control-Allow-Headers\": \"Content-Type, Content-Encoding\",\n },\n });\n } catch (error) {\n return NextResponse.json(\n { error: \"Failed to forward Chat data\" },\n { status: 500 }\n );\n }\n}\n\n/**\n * @deprecated Use `createNextJsRouteHandlers()` from `@alquimia-ai/tools/next` instead.\n */\nexport async function handleStreamRequest(\n request: Request,\n context: ChatRouteContext,\n config: ChatRequestConfig\n): Promise<Response> {\n try {\n const headersList = await headers();\n const routeParams = await context.params;\n const path = routeParams.path.join(\"/\");\n const assistantRoute = config.assistantRoute || \"stream\";\n\n const streamUrl = `${config.assistantBaseUrl}/${assistantRoute}/${path}`;\n\n const response = await fetch(streamUrl, {\n headers: {\n \"Content-Type\": \"application/json\",\n Authorization: `Bearer ${config.apiKey}`,\n ...Object.fromEntries(headersList.entries()),\n },\n });\n\n if (!response.ok) {\n const errorJson = await response.json();\n console.error(\"Stream server error:\", {\n status: response.status,\n statusText: response.statusText,\n body: errorJson,\n });\n\n return new Response(\n JSON.stringify({\n error:\n errorJson.message ||\n response.statusText ||\n \"Failed to forward Stream data\",\n ...errorJson,\n }),\n { status: response.status }\n );\n }\n\n return new Response(response.body, {\n status: 200,\n headers: {\n \"Content-Type\": \"text/event-stream\",\n \"Cache-Control\": \"no-cache\",\n Connection: \"keep-alive\",\n },\n });\n } catch (error) {\n console.error(\"Stream error:\", error);\n return new Response(\n JSON.stringify({ error: \"Failed to forward stream data\" }),\n { status: 500 }\n );\n }\n}\n","\"use server\";\n\nimport { randomUUID } from \"crypto\";\nimport { cookies } from \"next/headers\";\nimport { ConversationsMap } from \"../types/type\";\n\nexport async function initConversation(\n reset?: boolean,\n topicId?: string\n): Promise<string> {\n const cookieStore = await cookies();\n\n if (!topicId) {\n let conversationId = randomUUID().toString();\n const alquimiaSession = cookieStore.get(\"alquimia-session\");\n\n if (!alquimiaSession || reset) {\n cookieStore.set(\"alquimia-session\", conversationId);\n } else {\n conversationId = alquimiaSession.value;\n }\n\n return conversationId;\n }\n\n let conversationsMap: ConversationsMap = {};\n const existingConversations = cookieStore.get(\"alquimia-sessions\");\n\n if (existingConversations) {\n try {\n const decodedValue = decodeURIComponent(existingConversations.value);\n conversationsMap = JSON.parse(decodedValue) as ConversationsMap;\n } catch (e) {\n console.error(\"Error parsing conversations cookie:\", e);\n conversationsMap = {};\n }\n }\n\n if (!conversationsMap[topicId] || reset) {\n conversationsMap[topicId] = randomUUID().toString();\n }\n\n cookieStore.set(\"alquimia-sessions\", JSON.stringify(conversationsMap));\n\n return conversationsMap[topicId];\n}\n","import { createAlquimiaProxyHandler, type ProxyConfig } from '../proxy';\n\nexport type { ProxyConfig };\n\nexport {\n handleChatRequest,\n handleStreamRequest,\n type ChatRouteContext,\n type ChatRequestConfig,\n type ChatResponse,\n} from './actions';\n\nexport { initConversation } from '../actions';\n\nexport interface NextJsRouteContext {\n params: Promise<{ path: string[] }>;\n}\n\nexport function createNextJsRouteHandlers(config: ProxyConfig) {\n const handler = createAlquimiaProxyHandler(config);\n\n return {\n /**\n * Use as POST handler in app/api/chat/[...path]/route.ts\n */\n handleInfer: async (request: Request, context: NextJsRouteContext): Promise<Response> => {\n const { path } = await context.params;\n return handler.handleInfer(request, path.join('/'));\n },\n\n /**\n * Use as GET handler in app/api/stream/[...path]/route.ts\n */\n handleStream: async (request: Request, context: NextJsRouteContext): Promise<Response> => {\n const { path } = await context.params;\n return handler.handleStream(request, path.join('/'));\n },\n\n /**\n * Use as POST handler in app/api/blob/upload/route.ts (the runtime's\n * `POST /context/blob/upload`). Identity travels via headers — no path\n * params required.\n */\n handleBlobUpload: async (request: Request): Promise<Response> => {\n return handler.handleBlobUpload(request);\n },\n };\n}\n"],"mappings":"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","names":[]}
1
+ {"version":3,"sources":["../../src/proxy.ts","../../src/next/actions.ts","../../src/actions/session.action.ts","../../src/next/index.ts"],"sourcesContent":["export interface ProxyConfig {\n assistantBaseUrl: string;\n apiKey: string;\n inferRoute?: string; // default: 'event/infer'\n streamRoute?: string; // default: 'event/stream'\n blobUploadRoute?: string; // default: 'context/blob/upload'\n toolCompletionRoute?: string; // default: 'event/tool-completion'\n}\n\nexport interface AlquimiaProxyHandler {\n handleInfer(request: Request, pathSuffix: string): Promise<Response>;\n handleStream(request: Request, pathSuffix: string): Promise<Response>;\n handleBlobUpload(request: Request): Promise<Response>;\n handleToolCompletion(request: Request): Promise<Response>;\n}\n\nconst IDENTITY_HEADER_NAMES = [\n 'task-id',\n 'parent-task-id',\n 'session-id',\n 'user-id',\n 'assistant-id',\n 'agentspace-id',\n 'channel-id',\n 'depth',\n] as const;\n\nfunction pickIdentityHeaders(request: Request): Record<string, string> {\n const out: Record<string, string> = {};\n for (const name of IDENTITY_HEADER_NAMES) {\n const value = request.headers.get(name);\n if (value) out[name] = value;\n }\n return out;\n}\n\nexport function createAlquimiaProxyHandler(config: ProxyConfig): AlquimiaProxyHandler {\n const baseUrl = config.assistantBaseUrl.replace(/\\/$/, '');\n const inferRoute = config.inferRoute ?? 'event/infer';\n const streamRoute = config.streamRoute ?? 'event/stream';\n const blobUploadRoute = config.blobUploadRoute ?? 'context/blob/upload';\n const toolCompletionRoute = config.toolCompletionRoute ?? 'event/tool-completion';\n const authHeader = { Authorization: `Bearer ${config.apiKey}` };\n\n return {\n async handleInfer(request: Request, pathSuffix: string): Promise<Response> {\n try {\n const body = await request.json();\n const url = new URL(request.url);\n const querySuffix = url.searchParams.toString()\n ? `?${url.searchParams.toString()}`\n : '';\n const slug = pathSuffix.replace(/^\\/+|\\/+$/g, '');\n const targetUrl = `${baseUrl}/${inferRoute}/${slug}${querySuffix}`;\n\n\n const response = await fetch(targetUrl, {\n method: 'POST',\n headers: {\n 'Content-Type': 'application/json',\n ...authHeader,\n },\n body: JSON.stringify(body),\n });\n\n if (!response.ok) {\n const errorJson = await response.json().catch(() => ({}));\n console.error('AlquimiaProxy handleInfer error:', {\n status: response.status,\n statusText: response.statusText,\n body: errorJson,\n });\n return new Response(\n JSON.stringify({\n status: response.status,\n statusText: response.statusText,\n ...errorJson,\n }),\n { status: response.status, headers: { 'Content-Type': 'application/json' } }\n );\n }\n\n return new Response(response.body, {\n status: 200,\n headers: {\n 'Access-Control-Allow-Origin': '*',\n 'Access-Control-Allow-Methods': 'POST, OPTIONS',\n 'Access-Control-Allow-Headers': 'Content-Type, Content-Encoding',\n },\n });\n } catch (error) {\n console.error('AlquimiaProxy handleInfer exception:', error);\n return new Response(\n JSON.stringify({ error: 'Failed to forward infer request' }),\n { status: 500, headers: { 'Content-Type': 'application/json' } }\n );\n }\n },\n\n async handleStream(request: Request, pathSuffix: string): Promise<Response> {\n try {\n const targetUrl = `${baseUrl}/${streamRoute}/${pathSuffix}`;\n\n const response = await fetch(targetUrl, {\n headers: { 'Content-Type': 'application/json', ...authHeader },\n });\n\n if (!response.ok) {\n const errorJson = await response.json().catch(() => ({}));\n console.error('AlquimiaProxy handleStream error:', {\n status: response.status,\n statusText: response.statusText,\n body: errorJson,\n });\n return new Response(\n JSON.stringify({\n error: errorJson.message || response.statusText || 'Failed to forward stream',\n ...errorJson,\n }),\n { status: response.status, headers: { 'Content-Type': 'application/json' } }\n );\n }\n\n return new Response(response.body, {\n status: 200,\n headers: {\n 'Content-Type': 'text/event-stream',\n 'Cache-Control': 'no-cache',\n Connection: 'keep-alive',\n },\n });\n } catch (error) {\n console.error('AlquimiaProxy handleStream exception:', error);\n return new Response(\n JSON.stringify({ error: 'Failed to forward stream request' }),\n { status: 500, headers: { 'Content-Type': 'application/json' } }\n );\n }\n },\n\n async handleBlobUpload(request: Request): Promise<Response> {\n try {\n const targetUrl = `${baseUrl}/${blobUploadRoute}`;\n const contentType = request.headers.get('Content-Type') ?? '';\n\n const response = await fetch(targetUrl, {\n method: 'POST',\n headers: {\n ...authHeader,\n ...(contentType && { 'Content-Type': contentType }),\n ...pickIdentityHeaders(request),\n },\n body: request.body,\n duplex: 'half',\n } as RequestInit);\n\n if (!response.ok) {\n return new Response(\n JSON.stringify({ error: 'Failed to upload blob', status: response.status }),\n { status: response.status, headers: { 'Content-Type': 'application/json' } }\n );\n }\n\n const responseText = await response.text();\n return new Response(responseText, {\n status: 200,\n headers: { 'Content-Type': 'application/json' },\n });\n } catch (error) {\n console.error('AlquimiaProxy handleBlobUpload exception:', error);\n return new Response(\n JSON.stringify({ error: 'Failed to forward blob upload request' }),\n { status: 500, headers: { 'Content-Type': 'application/json' } }\n );\n }\n },\n\n async handleToolCompletion(request: Request): Promise<Response> {\n try {\n const body = await request.text();\n const headers: Record<string, string> = {\n 'Content-Type': 'application/json',\n ...authHeader,\n };\n // Forward the runtime's tool-completion correlation headers verbatim\n // (non-hyphenated names, per the runtime OpenAPI). These route the\n // completion to the parked task so the SSE stream resumes.\n const CORRELATION_HEADERS = [\n 'taskid',\n 'parenttaskid',\n 'sessionid',\n 'userid',\n 'assistantid',\n 'agentspaceid',\n 'channelid',\n 'depth',\n ];\n for (const name of CORRELATION_HEADERS) {\n const value = request.headers.get(name);\n if (value) headers[name] = value;\n }\n const trace = request.headers.get('x-trace-parent');\n if (trace) headers['x-trace-parent'] = trace;\n\n const response = await fetch(`${baseUrl}/${toolCompletionRoute}`, {\n method: 'POST',\n headers,\n body,\n });\n\n return new Response(await response.text(), {\n status: response.status,\n headers: { 'Content-Type': 'application/json' },\n });\n } catch (error) {\n console.error('AlquimiaProxy handleToolCompletion exception:', error);\n return new Response(\n JSON.stringify({ error: 'Failed to forward tool-completion request' }),\n { status: 500, headers: { 'Content-Type': 'application/json' } }\n );\n }\n },\n };\n}\n","\"use server\";\nimport { NextResponse } from \"next/server\";\nimport { headers } from \"next/headers\";\n\nexport type ChatRouteContext = {\n params: {\n path: string[];\n };\n};\n\nexport type ChatRequestConfig = {\n assistantBaseUrl: string;\n assistantRoute?: string;\n apiKey: string;\n};\n\nexport type ChatResponse = Response | any;\n\n/**\n * @deprecated Use `createNextJsRouteHandlers()` from `@alquimia-ai/tools/next` instead.\n */\nexport async function handleChatRequest(\n request: Request,\n context: ChatRouteContext,\n config: ChatRequestConfig\n): Promise<ChatResponse> {\n try {\n const headersList = await headers();\n const body = await request.json();\n const routeParams = await context.params;\n const routePath = routeParams.path.join(\"/\");\n const assistantRoute = config.assistantRoute || \"infer\";\n\n const url = new URL(request.url);\n const queryString = url.searchParams.toString();\n const querySuffix = queryString ? `?${queryString}` : '';\n \n const assistantUrl = `${config.assistantBaseUrl}/${assistantRoute}/${routePath}${querySuffix}`;\n\n const response = await fetch(assistantUrl, {\n method: \"POST\",\n headers: {\n \"Content-Type\": \"application/json\",\n Authorization: `Bearer ${config.apiKey}`,\n ...headersList,\n },\n body: JSON.stringify(body),\n });\n\n if (!response.ok) {\n const errorJson = await response.json();\n console.error(\"Chat inference server error:\", {\n status: response.status,\n statusText: response.statusText,\n body: errorJson,\n });\n\n return NextResponse.json(\n {\n status: response.status,\n statusText: response.statusText ||\n \"Failed to forward Chat data\",\n ...errorJson,\n },\n { status: response.status }\n );\n }\n\n return new NextResponse(response.body, {\n status: 200,\n headers: {\n \"Access-Control-Allow-Origin\": \"*\",\n \"Access-Control-Allow-Methods\": \"POST, OPTIONS\",\n \"Access-Control-Allow-Headers\": \"Content-Type, Content-Encoding\",\n },\n });\n } catch (error) {\n return NextResponse.json(\n { error: \"Failed to forward Chat data\" },\n { status: 500 }\n );\n }\n}\n\n/**\n * @deprecated Use `createNextJsRouteHandlers()` from `@alquimia-ai/tools/next` instead.\n */\nexport async function handleStreamRequest(\n request: Request,\n context: ChatRouteContext,\n config: ChatRequestConfig\n): Promise<Response> {\n try {\n const headersList = await headers();\n const routeParams = await context.params;\n const path = routeParams.path.join(\"/\");\n const assistantRoute = config.assistantRoute || \"stream\";\n\n const streamUrl = `${config.assistantBaseUrl}/${assistantRoute}/${path}`;\n\n const response = await fetch(streamUrl, {\n headers: {\n \"Content-Type\": \"application/json\",\n Authorization: `Bearer ${config.apiKey}`,\n ...Object.fromEntries(headersList.entries()),\n },\n });\n\n if (!response.ok) {\n const errorJson = await response.json();\n console.error(\"Stream server error:\", {\n status: response.status,\n statusText: response.statusText,\n body: errorJson,\n });\n\n return new Response(\n JSON.stringify({\n error:\n errorJson.message ||\n response.statusText ||\n \"Failed to forward Stream data\",\n ...errorJson,\n }),\n { status: response.status }\n );\n }\n\n return new Response(response.body, {\n status: 200,\n headers: {\n \"Content-Type\": \"text/event-stream\",\n \"Cache-Control\": \"no-cache\",\n Connection: \"keep-alive\",\n },\n });\n } catch (error) {\n console.error(\"Stream error:\", error);\n return new Response(\n JSON.stringify({ error: \"Failed to forward stream data\" }),\n { status: 500 }\n );\n }\n}\n","\"use server\";\n\nimport { randomUUID } from \"crypto\";\nimport { cookies } from \"next/headers\";\nimport { ConversationsMap } from \"../types/type\";\n\nexport async function initConversation(\n reset?: boolean,\n topicId?: string\n): Promise<string> {\n const cookieStore = await cookies();\n\n if (!topicId) {\n let conversationId = randomUUID().toString();\n const alquimiaSession = cookieStore.get(\"alquimia-session\");\n\n if (!alquimiaSession || reset) {\n cookieStore.set(\"alquimia-session\", conversationId);\n } else {\n conversationId = alquimiaSession.value;\n }\n\n return conversationId;\n }\n\n let conversationsMap: ConversationsMap = {};\n const existingConversations = cookieStore.get(\"alquimia-sessions\");\n\n if (existingConversations) {\n try {\n const decodedValue = decodeURIComponent(existingConversations.value);\n conversationsMap = JSON.parse(decodedValue) as ConversationsMap;\n } catch (e) {\n console.error(\"Error parsing conversations cookie:\", e);\n conversationsMap = {};\n }\n }\n\n if (!conversationsMap[topicId] || reset) {\n conversationsMap[topicId] = randomUUID().toString();\n }\n\n cookieStore.set(\"alquimia-sessions\", JSON.stringify(conversationsMap));\n\n return conversationsMap[topicId];\n}\n","import { createAlquimiaProxyHandler, type ProxyConfig } from '../proxy';\n\nexport type { ProxyConfig };\n\nexport {\n handleChatRequest,\n handleStreamRequest,\n type ChatRouteContext,\n type ChatRequestConfig,\n type ChatResponse,\n} from './actions';\n\nexport { initConversation } from '../actions';\n\nexport interface NextJsRouteContext {\n params: Promise<{ path: string[] }>;\n}\n\nexport function createNextJsRouteHandlers(config: ProxyConfig) {\n const handler = createAlquimiaProxyHandler(config);\n\n return {\n /**\n * Use as POST handler in app/api/chat/[...path]/route.ts\n */\n handleInfer: async (request: Request, context: NextJsRouteContext): Promise<Response> => {\n const { path } = await context.params;\n return handler.handleInfer(request, path.join('/'));\n },\n\n /**\n * Use as GET handler in app/api/stream/[...path]/route.ts\n */\n handleStream: async (request: Request, context: NextJsRouteContext): Promise<Response> => {\n const { path } = await context.params;\n return handler.handleStream(request, path.join('/'));\n },\n\n /**\n * Use as POST handler in app/api/blob/upload/route.ts (the runtime's\n * `POST /context/blob/upload`). Identity travels via headers — no path\n * params required.\n */\n handleBlobUpload: async (request: Request): Promise<Response> => {\n return handler.handleBlobUpload(request);\n },\n\n /**\n * Use as POST handler in app/api/tool-completion/[...path]/route.ts (the\n * runtime's `POST /event/tool-completion`). The pending call is correlated\n * by `control_id` in the body + the `context-metadata` header — no path\n * params required.\n */\n handleToolCompletion: async (request: Request): Promise<Response> => {\n return handler.handleToolCompletion(request);\n },\n };\n}\n"],"mappings":"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","names":["headers"]}
@@ -1,8 +1,9 @@
1
- import { W as WhisperProvider, R as RatingsProvider, C as CharacterizationProvider, S as StableDiffusionProvider } from '../providers-0Gi78uNQ.mjs';
1
+ import { R as RatingsProvider, W as WhisperProvider, C as CharacterizationProvider, S as StableDiffusionProvider } from '../providers-0Gi78uNQ.mjs';
2
2
  export { G as GenerativeProvider, L as LoggerProvider } from '../providers-0Gi78uNQ.mjs';
3
- import { TTSResult, RatingData } from '../types/index.mjs';
3
+ import { RatingData, TTSResult } from '../types/index.mjs';
4
4
  import '@elastic/apm-rum';
5
5
  import 'ai';
6
+ import '../types-DnfWUE9V.mjs';
6
7
 
7
8
  declare class AlquimiaWhisperProvider extends WhisperProvider {
8
9
  constructor(config: {
@@ -1,8 +1,9 @@
1
- import { W as WhisperProvider, R as RatingsProvider, C as CharacterizationProvider, S as StableDiffusionProvider } from '../providers-BJTXCtI3.js';
1
+ import { R as RatingsProvider, W as WhisperProvider, C as CharacterizationProvider, S as StableDiffusionProvider } from '../providers-BJTXCtI3.js';
2
2
  export { G as GenerativeProvider, L as LoggerProvider } from '../providers-BJTXCtI3.js';
3
- import { TTSResult, RatingData } from '../types/index.js';
3
+ import { RatingData, TTSResult } from '../types/index.js';
4
4
  import '@elastic/apm-rum';
5
5
  import 'ai';
6
+ import '../types-DnfWUE9V.js';
6
7
 
7
8
  declare class AlquimiaWhisperProvider extends WhisperProvider {
8
9
  constructor(config: {