@a5c-ai/transport-adapter 5.1.1-staging.00ceebd28cf2

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 (82) hide show
  1. package/README.md +54 -0
  2. package/dist/__tests__/codecs.test.d.ts +1 -0
  3. package/dist/__tests__/codecs.test.d.ts.map +1 -0
  4. package/dist/__tests__/codecs.test.js +698 -0
  5. package/dist/__tests__/codecs.test.js.map +1 -0
  6. package/dist/__tests__/openai-engine.test.d.ts +1 -0
  7. package/dist/__tests__/openai-engine.test.d.ts.map +1 -0
  8. package/dist/__tests__/openai-engine.test.js +89 -0
  9. package/dist/__tests__/openai-engine.test.js.map +1 -0
  10. package/dist/bin/adapters-proxy.d.ts +2 -0
  11. package/dist/bin/adapters-proxy.d.ts.map +1 -0
  12. package/dist/bin/adapters-proxy.js +5 -0
  13. package/dist/bin/adapters-proxy.js.map +1 -0
  14. package/dist/bin/adapters-transport-proxy.d.ts +2 -0
  15. package/dist/bin/adapters-transport-proxy.d.ts.map +1 -0
  16. package/dist/bin/adapters-transport-proxy.js +57 -0
  17. package/dist/bin/adapters-transport-proxy.js.map +1 -0
  18. package/dist/codec.d.ts +36 -0
  19. package/dist/codec.d.ts.map +1 -0
  20. package/dist/codec.js +2 -0
  21. package/dist/codec.js.map +1 -0
  22. package/dist/codecs/anthropic.d.ts +12 -0
  23. package/dist/codecs/anthropic.d.ts.map +1 -0
  24. package/dist/codecs/anthropic.js +185 -0
  25. package/dist/codecs/anthropic.js.map +1 -0
  26. package/dist/codecs/bedrock.d.ts +12 -0
  27. package/dist/codecs/bedrock.d.ts.map +1 -0
  28. package/dist/codecs/bedrock.js +175 -0
  29. package/dist/codecs/bedrock.js.map +1 -0
  30. package/dist/codecs/google.d.ts +12 -0
  31. package/dist/codecs/google.d.ts.map +1 -0
  32. package/dist/codecs/google.js +176 -0
  33. package/dist/codecs/google.js.map +1 -0
  34. package/dist/codecs/index.d.ts +30 -0
  35. package/dist/codecs/index.d.ts.map +1 -0
  36. package/dist/codecs/index.js +115 -0
  37. package/dist/codecs/index.js.map +1 -0
  38. package/dist/codecs/openai-chat.d.ts +12 -0
  39. package/dist/codecs/openai-chat.d.ts.map +1 -0
  40. package/dist/codecs/openai-chat.js +191 -0
  41. package/dist/codecs/openai-chat.js.map +1 -0
  42. package/dist/codecs/openai-responses.d.ts +12 -0
  43. package/dist/codecs/openai-responses.d.ts.map +1 -0
  44. package/dist/codecs/openai-responses.js +229 -0
  45. package/dist/codecs/openai-responses.js.map +1 -0
  46. package/dist/config.d.ts +8 -0
  47. package/dist/config.d.ts.map +1 -0
  48. package/dist/config.js +86 -0
  49. package/dist/config.js.map +1 -0
  50. package/dist/engines/anthropic.d.ts +7 -0
  51. package/dist/engines/anthropic.d.ts.map +1 -0
  52. package/dist/engines/anthropic.js +232 -0
  53. package/dist/engines/anthropic.js.map +1 -0
  54. package/dist/engines/google.d.ts +17 -0
  55. package/dist/engines/google.d.ts.map +1 -0
  56. package/dist/engines/google.js +232 -0
  57. package/dist/engines/google.js.map +1 -0
  58. package/dist/engines/index.d.ts +3 -0
  59. package/dist/engines/index.d.ts.map +1 -0
  60. package/dist/engines/index.js +3 -0
  61. package/dist/engines/index.js.map +1 -0
  62. package/dist/engines/openai.d.ts +12 -0
  63. package/dist/engines/openai.d.ts.map +1 -0
  64. package/dist/engines/openai.js +253 -0
  65. package/dist/engines/openai.js.map +1 -0
  66. package/dist/index.d.ts +22 -0
  67. package/dist/index.d.ts.map +1 -0
  68. package/dist/index.js +19 -0
  69. package/dist/index.js.map +1 -0
  70. package/dist/runtime.d.ts +19 -0
  71. package/dist/runtime.d.ts.map +1 -0
  72. package/dist/runtime.js +56 -0
  73. package/dist/runtime.js.map +1 -0
  74. package/dist/server.d.ts +4 -0
  75. package/dist/server.d.ts.map +1 -0
  76. package/dist/server.js +1428 -0
  77. package/dist/server.js.map +1 -0
  78. package/dist/types.d.ts +109 -0
  79. package/dist/types.d.ts.map +1 -0
  80. package/dist/types.js +11 -0
  81. package/dist/types.js.map +1 -0
  82. package/package.json +99 -0
@@ -0,0 +1,191 @@
1
+ import { randomUUID } from 'node:crypto';
2
+ function parseMessageContent(content) {
3
+ if (typeof content === 'string') {
4
+ return content;
5
+ }
6
+ if (Array.isArray(content)) {
7
+ return content
8
+ .map((part) => {
9
+ if (typeof part === 'string') {
10
+ return part;
11
+ }
12
+ if (part &&
13
+ typeof part === 'object' &&
14
+ 'text' in part &&
15
+ typeof part.text === 'string') {
16
+ return part.text;
17
+ }
18
+ return '';
19
+ })
20
+ .filter(Boolean)
21
+ .join(' ');
22
+ }
23
+ return '';
24
+ }
25
+ function normalizeMessages(raw) {
26
+ if (!Array.isArray(raw)) {
27
+ return [];
28
+ }
29
+ return raw.map((entry) => {
30
+ const record = entry;
31
+ const role = typeof record.role === 'string' ? record.role : 'user';
32
+ const content = parseMessageContent(record.content);
33
+ // Preserve tool_calls on assistant messages and tool_call_id on tool messages
34
+ // as rawContent so translateMessagesToOpenAi can reconstruct them.
35
+ if (role === 'assistant' && Array.isArray(record.tool_calls) && record.tool_calls.length > 0) {
36
+ const rawContent = record.tool_calls.map(tc => {
37
+ const fn = tc.function;
38
+ return {
39
+ type: 'tool_use',
40
+ id: String(tc.id ?? ''),
41
+ name: String(fn?.name ?? ''),
42
+ input: fn?.arguments ? (typeof fn.arguments === 'string' ? JSON.parse(fn.arguments) : fn.arguments) : {},
43
+ };
44
+ });
45
+ if (content) {
46
+ rawContent.unshift({ type: 'text', text: content });
47
+ }
48
+ return { role, content, rawContent };
49
+ }
50
+ if (role === 'tool' && record.tool_call_id) {
51
+ const rawContent = [{
52
+ type: 'tool_result',
53
+ tool_use_id: String(record.tool_call_id),
54
+ content: record.content,
55
+ }];
56
+ return { role, content, rawContent };
57
+ }
58
+ return { role, content };
59
+ });
60
+ }
61
+ export class OpenAiChatCodec {
62
+ transportId = 'openai-chat';
63
+ capabilities = {
64
+ supportsTools: true,
65
+ supportsStreaming: true,
66
+ supportsTokenCounting: false,
67
+ costTracking: true,
68
+ toolSchemaFormat: 'openai',
69
+ };
70
+ decodeRequest(body) {
71
+ const messages = normalizeMessages(body.messages);
72
+ const model = typeof body.model === 'string' ? body.model : 'mock-model';
73
+ const stream = body.stream === true;
74
+ return {
75
+ model,
76
+ transport: this.transportId,
77
+ messages,
78
+ tools: Array.isArray(body.tools)
79
+ ? body.tools
80
+ : undefined,
81
+ toolChoice: body.tool_choice ?? undefined,
82
+ stream,
83
+ raw: body,
84
+ };
85
+ }
86
+ encodeResult(result) {
87
+ const message = { role: 'assistant', content: result.text };
88
+ if (result.toolCalls && result.toolCalls.length > 0) {
89
+ message.tool_calls = result.toolCalls.map((tc, i) => ({
90
+ id: tc.id || `call_${i}`,
91
+ type: 'function',
92
+ function: { name: tc.name, arguments: tc.arguments },
93
+ }));
94
+ }
95
+ return {
96
+ id: result.id,
97
+ object: 'chat.completion',
98
+ created: Math.floor(Date.now() / 1000),
99
+ model: result.model,
100
+ choices: [
101
+ {
102
+ index: 0,
103
+ message,
104
+ finish_reason: result.toolCalls?.length ? 'tool_calls' : result.finishReason,
105
+ },
106
+ ],
107
+ usage: {
108
+ prompt_tokens: result.usage.promptTokens,
109
+ completion_tokens: result.usage.completionTokens,
110
+ total_tokens: result.usage.totalTokens,
111
+ },
112
+ };
113
+ }
114
+ encodeStreamChunk(event) {
115
+ const responseId = `chatcmpl_${randomUUID()}`;
116
+ const created = Math.floor(Date.now() / 1000);
117
+ if (event.type === 'text-delta' && event.text) {
118
+ return `data: ${JSON.stringify({
119
+ id: responseId,
120
+ object: 'chat.completion.chunk',
121
+ created,
122
+ model: 'unknown',
123
+ choices: [
124
+ { index: 0, delta: { content: event.text }, finish_reason: null },
125
+ ],
126
+ })}\n\n`;
127
+ }
128
+ if (event.type === 'done') {
129
+ return `data: ${JSON.stringify({
130
+ id: responseId,
131
+ object: 'chat.completion.chunk',
132
+ created,
133
+ model: 'unknown',
134
+ choices: [
135
+ {
136
+ index: 0,
137
+ delta: {},
138
+ finish_reason: event.finishReason ?? 'stop',
139
+ },
140
+ ],
141
+ })}\n\n`;
142
+ }
143
+ return '';
144
+ }
145
+ normalizeTools(tools) {
146
+ const result = [];
147
+ for (const tool of tools) {
148
+ const t = tool;
149
+ if (t.type === 'function' && t.function) {
150
+ result.push({
151
+ name: t.function.name ?? '',
152
+ description: t.function.description,
153
+ parameters: t.function.parameters,
154
+ });
155
+ continue;
156
+ }
157
+ // Fallback: treat as direct function-like object
158
+ const direct = tool;
159
+ if (typeof direct.name === 'string') {
160
+ result.push({
161
+ name: direct.name,
162
+ description: direct.description,
163
+ parameters: direct.parameters,
164
+ });
165
+ }
166
+ }
167
+ return result;
168
+ }
169
+ denormalizeTools(tools) {
170
+ return tools.map((tool) => ({
171
+ type: 'function',
172
+ function: {
173
+ name: tool.name,
174
+ description: tool.description,
175
+ parameters: tool.parameters ?? { type: 'object', properties: {} },
176
+ },
177
+ }));
178
+ }
179
+ extractCostRecord(result) {
180
+ if (!result.usage) {
181
+ return undefined;
182
+ }
183
+ return {
184
+ inputTokens: result.usage.promptTokens,
185
+ outputTokens: result.usage.completionTokens,
186
+ model: result.model,
187
+ provider: 'openai',
188
+ };
189
+ }
190
+ }
191
+ //# sourceMappingURL=openai-chat.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"openai-chat.js","sourceRoot":"","sources":["../../src/codecs/openai-chat.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,12 @@
1
+ import type { CompletionRequest, CompletionResult, CompletionStreamEvent } from '../types.js';
2
+ import type { CodecCapabilities, NormalizedCostRecord, NormalizedToolDefinition, TransportCodec } from '../codec.js';
3
+ export declare class OpenAiResponsesCodec implements TransportCodec {
4
+ readonly transportId = "openai-responses";
5
+ readonly capabilities: CodecCapabilities;
6
+ decodeRequest(body: Record<string, unknown>): CompletionRequest;
7
+ encodeResult(result: CompletionResult): unknown;
8
+ encodeStreamChunk(event: CompletionStreamEvent): string;
9
+ normalizeTools(tools: unknown[]): NormalizedToolDefinition[];
10
+ denormalizeTools(tools: NormalizedToolDefinition[]): unknown[];
11
+ extractCostRecord(result: CompletionResult): NormalizedCostRecord | undefined;
12
+ }
@@ -0,0 +1 @@
1
+ {"version":3,"file":"openai-responses.d.ts","sourceRoot":"","sources":["../../src/codecs/openai-responses.ts"],"names":[],"mappings":"AAEA,OAAO,KAAK,EACV,iBAAiB,EAEjB,gBAAgB,EAChB,qBAAqB,EACtB,MAAM,aAAa,CAAC;AACrB,OAAO,KAAK,EACV,iBAAiB,EACjB,oBAAoB,EACpB,wBAAwB,EACxB,cAAc,EACf,MAAM,aAAa,CAAC;AAwHrB,qBAAa,oBAAqB,YAAW,cAAc;IACzD,QAAQ,CAAC,WAAW,sBAAsB;IAE1C,QAAQ,CAAC,YAAY,EAAE,iBAAiB,CAMtC;IAEF,aAAa,CAAC,IAAI,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,GAAG,iBAAiB;IAgB/D,YAAY,CAAC,MAAM,EAAE,gBAAgB,GAAG,OAAO;IAqB/C,iBAAiB,CAAC,KAAK,EAAE,qBAAqB,GAAG,MAAM;IAqCvD,cAAc,CAAC,KAAK,EAAE,OAAO,EAAE,GAAG,wBAAwB,EAAE;IAwB5D,gBAAgB,CAAC,KAAK,EAAE,wBAAwB,EAAE,GAAG,OAAO,EAAE;IAS9D,iBAAiB,CAAC,MAAM,EAAE,gBAAgB,GAAG,oBAAoB,GAAG,SAAS;CAW9E"}
@@ -0,0 +1,229 @@
1
+ import { randomUUID } from 'node:crypto';
2
+ function textFromInput(input) {
3
+ if (typeof input === 'string') {
4
+ return input;
5
+ }
6
+ if (!Array.isArray(input)) {
7
+ return '';
8
+ }
9
+ return input
10
+ .map((entry) => {
11
+ if (typeof entry === 'string') {
12
+ return entry;
13
+ }
14
+ if (!entry || typeof entry !== 'object') {
15
+ return '';
16
+ }
17
+ const record = entry;
18
+ if (typeof record.text === 'string') {
19
+ return record.text;
20
+ }
21
+ if (Array.isArray(record.content)) {
22
+ return textFromInput(record.content);
23
+ }
24
+ return '';
25
+ })
26
+ .filter(Boolean)
27
+ .join(' ');
28
+ }
29
+ function parseJsonObject(value) {
30
+ if (value && typeof value === 'object' && !Array.isArray(value)) {
31
+ return value;
32
+ }
33
+ if (typeof value !== 'string') {
34
+ return {};
35
+ }
36
+ try {
37
+ const parsed = JSON.parse(value);
38
+ return parsed && typeof parsed === 'object' && !Array.isArray(parsed)
39
+ ? parsed
40
+ : {};
41
+ }
42
+ catch {
43
+ return {};
44
+ }
45
+ }
46
+ function responseInputMessages(input) {
47
+ if (typeof input === 'string') {
48
+ return input ? [{ role: 'user', content: input }] : [];
49
+ }
50
+ if (!Array.isArray(input)) {
51
+ return [];
52
+ }
53
+ const messages = [];
54
+ for (const entry of input) {
55
+ if (typeof entry === 'string') {
56
+ if (entry)
57
+ messages.push({ role: 'user', content: entry });
58
+ continue;
59
+ }
60
+ if (!entry || typeof entry !== 'object') {
61
+ continue;
62
+ }
63
+ const record = entry;
64
+ const type = typeof record.type === 'string' ? record.type : undefined;
65
+ if (type === 'message') {
66
+ const role = typeof record.role === 'string' ? record.role : 'user';
67
+ const content = textFromInput(record.content);
68
+ messages.push({
69
+ role,
70
+ content,
71
+ });
72
+ continue;
73
+ }
74
+ if (type === 'function_call') {
75
+ const callId = String(record.call_id ?? record.id ?? '');
76
+ const name = String(record.name ?? '');
77
+ const rawContent = [{
78
+ type: 'tool_use',
79
+ id: callId,
80
+ name,
81
+ input: parseJsonObject(record.arguments),
82
+ }];
83
+ messages.push({
84
+ role: 'assistant',
85
+ content: '',
86
+ rawContent,
87
+ });
88
+ continue;
89
+ }
90
+ if (type === 'function_call_output') {
91
+ const callId = String(record.call_id ?? record.id ?? '');
92
+ const output = record.output;
93
+ const content = typeof output === 'string' ? output : textFromInput(output);
94
+ messages.push({
95
+ role: 'tool',
96
+ content,
97
+ rawContent: [{
98
+ type: 'tool_result',
99
+ tool_use_id: callId,
100
+ content: output ?? '',
101
+ }],
102
+ });
103
+ continue;
104
+ }
105
+ if (type === 'input_text' && typeof record.text === 'string') {
106
+ messages.push({ role: 'user', content: record.text });
107
+ }
108
+ }
109
+ return messages;
110
+ }
111
+ export class OpenAiResponsesCodec {
112
+ transportId = 'openai-responses';
113
+ capabilities = {
114
+ supportsTools: true,
115
+ supportsStreaming: true,
116
+ supportsTokenCounting: false,
117
+ costTracking: true,
118
+ toolSchemaFormat: 'openai',
119
+ };
120
+ decodeRequest(body) {
121
+ const input = textFromInput(body.input);
122
+ const messages = responseInputMessages(body.input);
123
+ return {
124
+ model: typeof body.model === 'string' ? body.model : 'mock-model',
125
+ transport: this.transportId,
126
+ messages,
127
+ tools: Array.isArray(body.tools) ? body.tools : undefined,
128
+ toolChoice: body.tool_choice ?? body.toolChoice ?? undefined,
129
+ stream: body.stream === true,
130
+ input,
131
+ raw: body,
132
+ };
133
+ }
134
+ encodeResult(result) {
135
+ return {
136
+ id: result.id,
137
+ object: 'response',
138
+ status: 'completed',
139
+ model: result.model,
140
+ output: [
141
+ {
142
+ type: 'message',
143
+ role: 'assistant',
144
+ content: [{ type: 'output_text', text: result.text }],
145
+ },
146
+ ],
147
+ usage: {
148
+ input_tokens: result.usage.promptTokens,
149
+ output_tokens: result.usage.completionTokens,
150
+ total_tokens: result.usage.totalTokens,
151
+ },
152
+ };
153
+ }
154
+ encodeStreamChunk(event) {
155
+ const responseId = `resp_${randomUUID()}`;
156
+ if (event.type === 'text-delta' && event.text) {
157
+ return `event: response.output_text.delta\ndata: ${JSON.stringify({
158
+ type: 'response.output_text.delta',
159
+ output_index: 0,
160
+ content_index: 0,
161
+ delta: event.text,
162
+ })}\n\n`;
163
+ }
164
+ if (event.type === 'tool-call') {
165
+ return `event: response.output_item.added\ndata: ${JSON.stringify({
166
+ type: 'response.output_item.added',
167
+ output_index: 1,
168
+ item: {
169
+ type: 'function_call',
170
+ id: event.id,
171
+ call_id: event.id,
172
+ name: event.name,
173
+ arguments: event.arguments,
174
+ ...event.metadata,
175
+ },
176
+ })}\n\n`;
177
+ }
178
+ if (event.type === 'done') {
179
+ return `event: response.completed\ndata: ${JSON.stringify({
180
+ type: 'response.completed',
181
+ response: { id: responseId, status: 'completed' },
182
+ })}\n\n`;
183
+ }
184
+ return '';
185
+ }
186
+ normalizeTools(tools) {
187
+ const result = [];
188
+ for (const tool of tools) {
189
+ if (!tool || typeof tool !== 'object') {
190
+ continue;
191
+ }
192
+ const record = tool;
193
+ const nested = record.function && typeof record.function === 'object'
194
+ ? record.function
195
+ : record;
196
+ if (typeof nested.name !== 'string') {
197
+ continue;
198
+ }
199
+ result.push({
200
+ name: nested.name,
201
+ description: typeof nested.description === 'string' ? nested.description : undefined,
202
+ parameters: nested.parameters && typeof nested.parameters === 'object'
203
+ ? nested.parameters
204
+ : undefined,
205
+ });
206
+ }
207
+ return result;
208
+ }
209
+ denormalizeTools(tools) {
210
+ return tools.map((tool) => ({
211
+ type: 'function',
212
+ name: tool.name,
213
+ description: tool.description,
214
+ parameters: tool.parameters ?? { type: 'object', properties: {} },
215
+ }));
216
+ }
217
+ extractCostRecord(result) {
218
+ if (!result.usage) {
219
+ return undefined;
220
+ }
221
+ return {
222
+ inputTokens: result.usage.promptTokens,
223
+ outputTokens: result.usage.completionTokens,
224
+ model: result.model,
225
+ provider: 'openai',
226
+ };
227
+ }
228
+ }
229
+ //# sourceMappingURL=openai-responses.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"openai-responses.js","sourceRoot":"","sources":["../../src/codecs/openai-responses.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,8 @@
1
+ import { type ProxyConfig } from './types.js';
2
+ export interface ProxyProcessEnvOptions extends Partial<ProxyConfig> {
3
+ logLevel?: string;
4
+ }
5
+ export declare function createProxyConfig(overrides?: Partial<ProxyConfig>): ProxyConfig;
6
+ export declare function readProxyConfigFromEnv(env?: NodeJS.ProcessEnv): ProxyConfig;
7
+ export declare function createProxyProcessEnv(overrides: Partial<ProxyConfig>, options?: ProxyProcessEnvOptions): Record<string, string>;
8
+ export declare function validateProxyConfig(config: ProxyConfig): string[];
@@ -0,0 +1 @@
1
+ {"version":3,"file":"config.d.ts","sourceRoot":"","sources":["../src/config.ts"],"names":[],"mappings":"AAAA,OAAO,EAAwB,KAAK,WAAW,EAAE,MAAM,YAAY,CAAC;AAMpE,MAAM,WAAW,sBAAuB,SAAQ,OAAO,CAAC,WAAW,CAAC;IAClE,QAAQ,CAAC,EAAE,MAAM,CAAC;CACnB;AAED,wBAAgB,iBAAiB,CAAC,SAAS,GAAE,OAAO,CAAC,WAAW,CAAM,GAAG,WAAW,CAmBnF;AAED,wBAAgB,sBAAsB,CAAC,GAAG,GAAE,MAAM,CAAC,UAAwB,GAAG,WAAW,CAWxF;AAED,wBAAgB,qBAAqB,CAAC,SAAS,EAAE,OAAO,CAAC,WAAW,CAAC,EAAE,OAAO,GAAE,sBAA2B,GAAG,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAkCnI;AAED,wBAAgB,mBAAmB,CAAC,MAAM,EAAE,WAAW,GAAG,MAAM,EAAE,CAmBjE"}
package/dist/config.js ADDED
@@ -0,0 +1,86 @@
1
+ import { SUPPORTED_TRANSPORTS } from './types.js';
2
+ const DEFAULT_HOST = '127.0.0.1';
3
+ const DEFAULT_PORT = 0;
4
+ const DEFAULT_STREAM = true;
5
+ export function createProxyConfig(overrides = {}) {
6
+ const config = {
7
+ targetProvider: '',
8
+ targetModel: '',
9
+ exposedTransport: 'openai-chat',
10
+ authToken: undefined,
11
+ apiBase: undefined,
12
+ host: DEFAULT_HOST,
13
+ port: DEFAULT_PORT,
14
+ stream: DEFAULT_STREAM,
15
+ };
16
+ for (const [key, value] of Object.entries(overrides)) {
17
+ if (value !== undefined) {
18
+ config[key] = value;
19
+ }
20
+ }
21
+ return config;
22
+ }
23
+ export function readProxyConfigFromEnv(env = process.env) {
24
+ return createProxyConfig({
25
+ targetProvider: env.AGENT_MUX_PROXY_TARGET_PROVIDER,
26
+ targetModel: env.AGENT_MUX_PROXY_TARGET_MODEL,
27
+ exposedTransport: env.AGENT_MUX_PROXY_EXPOSED_TRANSPORT,
28
+ authToken: env.AGENT_MUX_PROXY_AUTH_TOKEN,
29
+ apiBase: env.AGENT_MUX_PROXY_API_BASE,
30
+ host: env.AGENT_MUX_PROXY_HOST || DEFAULT_HOST,
31
+ port: env.AGENT_MUX_PROXY_PORT ? Number(env.AGENT_MUX_PROXY_PORT) : DEFAULT_PORT,
32
+ stream: env.AGENT_MUX_PROXY_STREAM ? env.AGENT_MUX_PROXY_STREAM !== 'false' : DEFAULT_STREAM,
33
+ });
34
+ }
35
+ export function createProxyProcessEnv(overrides, options = {}) {
36
+ const config = createProxyConfig({
37
+ ...overrides,
38
+ authToken: options.authToken ?? overrides.authToken,
39
+ apiBase: options.apiBase ?? overrides.apiBase,
40
+ host: options.host ?? overrides.host,
41
+ port: options.port ?? overrides.port,
42
+ stream: options.stream ?? overrides.stream,
43
+ });
44
+ const env = {
45
+ AGENT_MUX_PROXY_TARGET_PROVIDER: config.targetProvider,
46
+ AGENT_MUX_PROXY_TARGET_MODEL: config.targetModel,
47
+ AGENT_MUX_PROXY_EXPOSED_TRANSPORT: config.exposedTransport,
48
+ AGENT_MUX_PROXY_PORT: String(config.port),
49
+ };
50
+ if (config.authToken) {
51
+ env.AGENT_MUX_PROXY_AUTH_TOKEN = config.authToken;
52
+ }
53
+ if (config.apiBase) {
54
+ env.AGENT_MUX_PROXY_API_BASE = config.apiBase;
55
+ }
56
+ if (config.host && config.host !== DEFAULT_HOST) {
57
+ env.AGENT_MUX_PROXY_HOST = config.host;
58
+ }
59
+ if (config.stream !== DEFAULT_STREAM) {
60
+ env.AGENT_MUX_PROXY_STREAM = String(config.stream);
61
+ }
62
+ if (options.logLevel) {
63
+ env.AGENT_MUX_PROXY_LOG_LEVEL = options.logLevel;
64
+ }
65
+ return env;
66
+ }
67
+ export function validateProxyConfig(config) {
68
+ const errors = [];
69
+ if (!config.targetProvider) {
70
+ errors.push('Missing targetProvider');
71
+ }
72
+ if (!config.targetModel) {
73
+ errors.push('Missing targetModel');
74
+ }
75
+ if (!config.exposedTransport) {
76
+ errors.push('Missing exposedTransport');
77
+ }
78
+ else if (!SUPPORTED_TRANSPORTS.includes(config.exposedTransport)) {
79
+ errors.push(`Invalid transport: ${config.exposedTransport}`);
80
+ }
81
+ if (!Number.isFinite(config.port) || config.port < 0) {
82
+ errors.push(`Invalid port: ${config.port}`);
83
+ }
84
+ return errors;
85
+ }
86
+ //# sourceMappingURL=config.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"config.js","sourceRoot":"","sources":["../src/config.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,7 @@
1
+ import type { CompletionEngine } from '../types.js';
2
+ export interface AnthropicCompletionEngineOptions {
3
+ apiBase?: string;
4
+ apiKey: string;
5
+ targetModel: string;
6
+ }
7
+ export declare function createAnthropicCompletionEngine(options: AnthropicCompletionEngineOptions): CompletionEngine;
@@ -0,0 +1 @@
1
+ {"version":3,"file":"anthropic.d.ts","sourceRoot":"","sources":["../../src/engines/anthropic.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EACV,gBAAgB,EAIjB,MAAM,aAAa,CAAC;AAErB,MAAM,WAAW,gCAAgC;IAC/C,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,MAAM,EAAE,MAAM,CAAC;IACf,WAAW,EAAE,MAAM,CAAC;CACrB;AA+ED,wBAAgB,+BAA+B,CAAC,OAAO,EAAE,gCAAgC,GAAG,gBAAgB,CAwK3G"}