@agentfare/hook 0.1.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 (62) hide show
  1. package/README.md +36 -0
  2. package/dist/fetch-patch.d.ts +13 -0
  3. package/dist/fetch-patch.d.ts.map +1 -0
  4. package/dist/fetch-patch.js +202 -0
  5. package/dist/fetch-patch.js.map +1 -0
  6. package/dist/headers.d.ts +8 -0
  7. package/dist/headers.d.ts.map +1 -0
  8. package/dist/headers.js +36 -0
  9. package/dist/headers.js.map +1 -0
  10. package/dist/index.d.ts +2 -0
  11. package/dist/index.d.ts.map +1 -0
  12. package/dist/index.js +45 -0
  13. package/dist/index.js.map +1 -0
  14. package/dist/protocol/anthropic-to-openai-request.d.ts +36 -0
  15. package/dist/protocol/anthropic-to-openai-request.d.ts.map +1 -0
  16. package/dist/protocol/anthropic-to-openai-request.js +122 -0
  17. package/dist/protocol/anthropic-to-openai-request.js.map +1 -0
  18. package/dist/protocol/anthropic-to-openai.d.ts +2 -0
  19. package/dist/protocol/anthropic-to-openai.d.ts.map +1 -0
  20. package/dist/protocol/anthropic-to-openai.js +51 -0
  21. package/dist/protocol/anthropic-to-openai.js.map +1 -0
  22. package/dist/protocol/openai-to-anthropic-response.d.ts +5 -0
  23. package/dist/protocol/openai-to-anthropic-response.d.ts.map +1 -0
  24. package/dist/protocol/openai-to-anthropic-response.js +57 -0
  25. package/dist/protocol/openai-to-anthropic-response.js.map +1 -0
  26. package/dist/protocol/openai-to-anthropic-sse.d.ts +20 -0
  27. package/dist/protocol/openai-to-anthropic-sse.d.ts.map +1 -0
  28. package/dist/protocol/openai-to-anthropic-sse.js +156 -0
  29. package/dist/protocol/openai-to-anthropic-sse.js.map +1 -0
  30. package/dist/protocol/openai-to-anthropic.d.ts +23 -0
  31. package/dist/protocol/openai-to-anthropic.d.ts.map +1 -0
  32. package/dist/protocol/openai-to-anthropic.js +61 -0
  33. package/dist/protocol/openai-to-anthropic.js.map +1 -0
  34. package/dist/protocol/sse-transform.d.ts +2 -0
  35. package/dist/protocol/sse-transform.d.ts.map +1 -0
  36. package/dist/protocol/sse-transform.js +41 -0
  37. package/dist/protocol/sse-transform.js.map +1 -0
  38. package/dist/protocol/types.d.ts +31 -0
  39. package/dist/protocol/types.d.ts.map +1 -0
  40. package/dist/protocol/types.js +3 -0
  41. package/dist/protocol/types.js.map +1 -0
  42. package/dist/proxy-server.d.ts +7 -0
  43. package/dist/proxy-server.d.ts.map +1 -0
  44. package/dist/proxy-server.js +52 -0
  45. package/dist/proxy-server.js.map +1 -0
  46. package/dist/reentry-guard.d.ts +2 -0
  47. package/dist/reentry-guard.d.ts.map +1 -0
  48. package/dist/reentry-guard.js +9 -0
  49. package/dist/reentry-guard.js.map +1 -0
  50. package/dist/request-handler.d.ts +34 -0
  51. package/dist/request-handler.d.ts.map +1 -0
  52. package/dist/request-handler.js +133 -0
  53. package/dist/request-handler.js.map +1 -0
  54. package/dist/response-handler.d.ts +9 -0
  55. package/dist/response-handler.d.ts.map +1 -0
  56. package/dist/response-handler.js +92 -0
  57. package/dist/response-handler.js.map +1 -0
  58. package/dist/url-detector.d.ts +2 -0
  59. package/dist/url-detector.d.ts.map +1 -0
  60. package/dist/url-detector.js +17 -0
  61. package/dist/url-detector.js.map +1 -0
  62. package/package.json +36 -0
@@ -0,0 +1,57 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.convertOpenAIToAnthropicResponse = convertOpenAIToAnthropicResponse;
4
+ /**
5
+ * Convert an OpenAI chat completion response into Anthropic message format.
6
+ */
7
+ function convertOpenAIToAnthropicResponse(openaiResp, model) {
8
+ const choice = openaiResp.choices?.[0];
9
+ const message = choice?.message;
10
+ const content = [];
11
+ if (message?.content) {
12
+ content.push({ type: "text", text: message.content });
13
+ }
14
+ if (message?.tool_calls && Array.isArray(message.tool_calls)) {
15
+ for (const tc of message.tool_calls) {
16
+ let input = {};
17
+ try {
18
+ input = JSON.parse(tc.function.arguments);
19
+ }
20
+ catch {
21
+ input = {};
22
+ }
23
+ content.push({
24
+ type: "tool_use",
25
+ id: tc.id,
26
+ name: tc.function.name,
27
+ input,
28
+ });
29
+ }
30
+ }
31
+ // If no content blocks at all, add an empty text block
32
+ if (content.length === 0) {
33
+ content.push({ type: "text", text: "" });
34
+ }
35
+ return {
36
+ id: openaiResp.id ?? `msg-${Date.now()}`,
37
+ type: "message",
38
+ role: "assistant",
39
+ model,
40
+ content,
41
+ stop_reason: mapFinishReason(choice?.finish_reason),
42
+ stop_sequence: null,
43
+ usage: {
44
+ input_tokens: openaiResp.usage?.prompt_tokens ?? 0,
45
+ output_tokens: openaiResp.usage?.completion_tokens ?? 0,
46
+ },
47
+ };
48
+ }
49
+ function mapFinishReason(reason) {
50
+ switch (reason) {
51
+ case "stop": return "end_turn";
52
+ case "length": return "max_tokens";
53
+ case "tool_calls": return "tool_use";
54
+ default: return "end_turn";
55
+ }
56
+ }
57
+ //# sourceMappingURL=openai-to-anthropic-response.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"openai-to-anthropic-response.js","sourceRoot":"","sources":["../../src/protocol/openai-to-anthropic-response.ts"],"names":[],"mappings":";;AAGA,4EA6CC;AAhDD;;GAEG;AACH,SAAgB,gCAAgC,CAAC,UAAe,EAAE,KAAa;IAC7E,MAAM,MAAM,GAAG,UAAU,CAAC,OAAO,EAAE,CAAC,CAAC,CAAC,CAAC;IACvC,MAAM,OAAO,GAAG,MAAM,EAAE,OAAO,CAAC;IAEhC,MAAM,OAAO,GAAU,EAAE,CAAC;IAE1B,IAAI,OAAO,EAAE,OAAO,EAAE,CAAC;QACrB,OAAO,CAAC,IAAI,CAAC,EAAE,IAAI,EAAE,MAAM,EAAE,IAAI,EAAE,OAAO,CAAC,OAAO,EAAE,CAAC,CAAC;IACxD,CAAC;IAED,IAAI,OAAO,EAAE,UAAU,IAAI,KAAK,CAAC,OAAO,CAAC,OAAO,CAAC,UAAU,CAAC,EAAE,CAAC;QAC7D,KAAK,MAAM,EAAE,IAAI,OAAO,CAAC,UAAU,EAAE,CAAC;YACpC,IAAI,KAAK,GAAQ,EAAE,CAAC;YACpB,IAAI,CAAC;gBACH,KAAK,GAAG,IAAI,CAAC,KAAK,CAAC,EAAE,CAAC,QAAQ,CAAC,SAAS,CAAC,CAAC;YAC5C,CAAC;YAAC,MAAM,CAAC;gBACP,KAAK,GAAG,EAAE,CAAC;YACb,CAAC;YACD,OAAO,CAAC,IAAI,CAAC;gBACX,IAAI,EAAE,UAAU;gBAChB,EAAE,EAAE,EAAE,CAAC,EAAE;gBACT,IAAI,EAAE,EAAE,CAAC,QAAQ,CAAC,IAAI;gBACtB,KAAK;aACN,CAAC,CAAC;QACL,CAAC;IACH,CAAC;IAED,uDAAuD;IACvD,IAAI,OAAO,CAAC,MAAM,KAAK,CAAC,EAAE,CAAC;QACzB,OAAO,CAAC,IAAI,CAAC,EAAE,IAAI,EAAE,MAAM,EAAE,IAAI,EAAE,EAAE,EAAE,CAAC,CAAC;IAC3C,CAAC;IAED,OAAO;QACL,EAAE,EAAE,UAAU,CAAC,EAAE,IAAI,OAAO,IAAI,CAAC,GAAG,EAAE,EAAE;QACxC,IAAI,EAAE,SAAS;QACf,IAAI,EAAE,WAAW;QACjB,KAAK;QACL,OAAO;QACP,WAAW,EAAE,eAAe,CAAC,MAAM,EAAE,aAAa,CAAC;QACnD,aAAa,EAAE,IAAI;QACnB,KAAK,EAAE;YACL,YAAY,EAAE,UAAU,CAAC,KAAK,EAAE,aAAa,IAAI,CAAC;YAClD,aAAa,EAAE,UAAU,CAAC,KAAK,EAAE,iBAAiB,IAAI,CAAC;SACxD;KACF,CAAC;AACJ,CAAC;AAED,SAAS,eAAe,CAAC,MAA0B;IACjD,QAAQ,MAAM,EAAE,CAAC;QACf,KAAK,MAAM,CAAC,CAAC,OAAO,UAAU,CAAC;QAC/B,KAAK,QAAQ,CAAC,CAAC,OAAO,YAAY,CAAC;QACnC,KAAK,YAAY,CAAC,CAAC,OAAO,UAAU,CAAC;QACrC,OAAO,CAAC,CAAC,OAAO,UAAU,CAAC;IAC7B,CAAC;AACH,CAAC"}
@@ -0,0 +1,20 @@
1
+ /**
2
+ * Convert an OpenAI SSE chunk (chat.completion.chunk) into an Anthropic SSE event.
3
+ *
4
+ * OpenAI streaming emits chunks like:
5
+ * data: {"id":"...","object":"chat.completion.chunk","choices":[{"delta":{"role":"assistant"},...}],...}
6
+ * data: {"id":"...","choices":[{"delta":{"content":"Hello"},...}],...}
7
+ * data: {"id":"...","choices":[{"delta":{},"finish_reason":"stop"}],...}
8
+ * data: [DONE]
9
+ *
10
+ * Anthropic streaming expects:
11
+ * event: message_start data: {"type":"message_start","message":{...}}
12
+ * event: content_block_start data: {"type":"content_block_start","index":0,"content_block":{"type":"text","text":""}}
13
+ * event: content_block_delta data: {"type":"content_block_delta","index":0,"delta":{"type":"text_delta","text":"..."}}
14
+ * event: content_block_stop data: {"type":"content_block_stop","index":0}
15
+ * event: message_delta data: {"type":"message_delta","delta":{"stop_reason":"end_turn"},...}
16
+ * event: message_stop data: {"type":"message_stop"}
17
+ */
18
+ export declare function resetSSEState(): void;
19
+ export declare function convertOpenAISSEToAnthropic(sseChunk: string, model: string): string | null;
20
+ //# sourceMappingURL=openai-to-anthropic-sse.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"openai-to-anthropic-sse.d.ts","sourceRoot":"","sources":["../../src/protocol/openai-to-anthropic-sse.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;GAgBG;AAKH,wBAAgB,aAAa,IAAI,IAAI,CAGpC;AAED,wBAAgB,2BAA2B,CAAC,QAAQ,EAAE,MAAM,EAAE,KAAK,EAAE,MAAM,GAAG,MAAM,GAAG,IAAI,CAsH1F"}
@@ -0,0 +1,156 @@
1
+ "use strict";
2
+ /**
3
+ * Convert an OpenAI SSE chunk (chat.completion.chunk) into an Anthropic SSE event.
4
+ *
5
+ * OpenAI streaming emits chunks like:
6
+ * data: {"id":"...","object":"chat.completion.chunk","choices":[{"delta":{"role":"assistant"},...}],...}
7
+ * data: {"id":"...","choices":[{"delta":{"content":"Hello"},...}],...}
8
+ * data: {"id":"...","choices":[{"delta":{},"finish_reason":"stop"}],...}
9
+ * data: [DONE]
10
+ *
11
+ * Anthropic streaming expects:
12
+ * event: message_start data: {"type":"message_start","message":{...}}
13
+ * event: content_block_start data: {"type":"content_block_start","index":0,"content_block":{"type":"text","text":""}}
14
+ * event: content_block_delta data: {"type":"content_block_delta","index":0,"delta":{"type":"text_delta","text":"..."}}
15
+ * event: content_block_stop data: {"type":"content_block_stop","index":0}
16
+ * event: message_delta data: {"type":"message_delta","delta":{"stop_reason":"end_turn"},...}
17
+ * event: message_stop data: {"type":"message_stop"}
18
+ */
19
+ Object.defineProperty(exports, "__esModule", { value: true });
20
+ exports.resetSSEState = resetSSEState;
21
+ exports.convertOpenAISSEToAnthropic = convertOpenAISSEToAnthropic;
22
+ let state = "idle";
23
+ let msgId = "";
24
+ function resetSSEState() {
25
+ state = "idle";
26
+ msgId = "";
27
+ }
28
+ function convertOpenAISSEToAnthropic(sseChunk, model) {
29
+ const lines = sseChunk.split("\n");
30
+ const results = [];
31
+ for (const line of lines) {
32
+ if (!line.startsWith("data: "))
33
+ continue;
34
+ const dataStr = line.slice(6).trim();
35
+ if (dataStr === "[DONE]") {
36
+ // Emit content_block_stop, message_delta, message_stop
37
+ if (state === "text_block_started") {
38
+ results.push(formatSSE("content_block_stop", { type: "content_block_stop", index: 0 }));
39
+ }
40
+ results.push(formatSSE("message_delta", {
41
+ type: "message_delta",
42
+ delta: { stop_reason: "end_turn", stop_sequence: null },
43
+ usage: { output_tokens: 0 },
44
+ }));
45
+ results.push(formatSSE("message_stop", { type: "message_stop" }));
46
+ state = "idle";
47
+ continue;
48
+ }
49
+ let data;
50
+ try {
51
+ data = JSON.parse(dataStr);
52
+ }
53
+ catch {
54
+ continue;
55
+ }
56
+ const choice = data.choices?.[0];
57
+ if (!choice)
58
+ continue;
59
+ // First chunk with role -> message_start
60
+ if (state === "idle" && choice.delta?.role) {
61
+ msgId = data.id ?? `msg_${Date.now()}`;
62
+ results.push(formatSSE("message_start", {
63
+ type: "message_start",
64
+ message: {
65
+ id: msgId,
66
+ type: "message",
67
+ role: "assistant",
68
+ model,
69
+ content: [],
70
+ stop_reason: null,
71
+ stop_sequence: null,
72
+ usage: { input_tokens: 0, output_tokens: 0 },
73
+ },
74
+ }));
75
+ // Also start a text content block
76
+ results.push(formatSSE("content_block_start", {
77
+ type: "content_block_start",
78
+ index: 0,
79
+ content_block: { type: "text", text: "" },
80
+ }));
81
+ state = "text_block_started";
82
+ }
83
+ // Content delta
84
+ if (choice.delta?.content !== undefined && choice.delta.content !== null) {
85
+ if (state === "idle") {
86
+ // Edge case: content arrived before role — start message first
87
+ msgId = data.id ?? `msg_${Date.now()}`;
88
+ results.push(formatSSE("message_start", {
89
+ type: "message_start",
90
+ message: {
91
+ id: msgId,
92
+ type: "message",
93
+ role: "assistant",
94
+ model,
95
+ content: [],
96
+ stop_reason: null,
97
+ stop_sequence: null,
98
+ usage: { input_tokens: 0, output_tokens: 0 },
99
+ },
100
+ }));
101
+ results.push(formatSSE("content_block_start", {
102
+ type: "content_block_start",
103
+ index: 0,
104
+ content_block: { type: "text", text: "" },
105
+ }));
106
+ state = "text_block_started";
107
+ }
108
+ results.push(formatSSE("content_block_delta", {
109
+ type: "content_block_delta",
110
+ index: 0,
111
+ delta: { type: "text_delta", text: choice.delta.content },
112
+ }));
113
+ }
114
+ // Finish reason
115
+ if (choice.finish_reason) {
116
+ if (state === "text_block_started") {
117
+ results.push(formatSSE("content_block_stop", { type: "content_block_stop", index: 0 }));
118
+ }
119
+ const stopReason = mapFinishReason(choice.finish_reason);
120
+ results.push(formatSSE("message_delta", {
121
+ type: "message_delta",
122
+ delta: { stop_reason: stopReason, stop_sequence: null },
123
+ usage: { output_tokens: 0 },
124
+ }));
125
+ results.push(formatSSE("message_stop", { type: "message_stop" }));
126
+ state = "idle";
127
+ }
128
+ // Tool calls delta — emit as tool_use content blocks
129
+ if (choice.delta?.tool_calls) {
130
+ for (const tc of choice.delta.tool_calls) {
131
+ // Simplified: emit text delta with tool call info as JSON text
132
+ // A full implementation would track partial tool call state
133
+ if (tc.function?.name) {
134
+ results.push(formatSSE("content_block_delta", {
135
+ type: "content_block_delta",
136
+ index: 0,
137
+ delta: { type: "text_delta", text: `[tool_call: ${tc.function.name}]` },
138
+ }));
139
+ }
140
+ }
141
+ }
142
+ }
143
+ return results.length > 0 ? results.join("") : null;
144
+ }
145
+ function formatSSE(event, data) {
146
+ return `event: ${event}\ndata: ${JSON.stringify(data)}\n\n`;
147
+ }
148
+ function mapFinishReason(reason) {
149
+ switch (reason) {
150
+ case "stop": return "end_turn";
151
+ case "length": return "max_tokens";
152
+ case "tool_calls": return "tool_use";
153
+ default: return "end_turn";
154
+ }
155
+ }
156
+ //# sourceMappingURL=openai-to-anthropic-sse.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"openai-to-anthropic-sse.js","sourceRoot":"","sources":["../../src/protocol/openai-to-anthropic-sse.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,23 @@
1
+ import type { OpenAIChatMessage, AnthropicMessage } from "./types.js";
2
+ interface OpenAIRequest {
3
+ model: string;
4
+ messages: OpenAIChatMessage[];
5
+ max_tokens?: number;
6
+ stream?: boolean;
7
+ tools?: any[];
8
+ temperature?: number;
9
+ stop?: string[];
10
+ }
11
+ interface AnthropicRequest {
12
+ model: string;
13
+ max_tokens: number;
14
+ system?: string;
15
+ messages: AnthropicMessage[];
16
+ tools?: any[];
17
+ stream: boolean;
18
+ temperature?: number;
19
+ stop_sequences?: string[];
20
+ }
21
+ export declare function convertOpenAIToAnthropicRequest(openai: OpenAIRequest, targetModelId?: string): AnthropicRequest;
22
+ export {};
23
+ //# sourceMappingURL=openai-to-anthropic.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"openai-to-anthropic.d.ts","sourceRoot":"","sources":["../../src/protocol/openai-to-anthropic.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,iBAAiB,EAAE,gBAAgB,EAAyB,MAAM,YAAY,CAAC;AAE7F,UAAU,aAAa;IACrB,KAAK,EAAE,MAAM,CAAC;IACd,QAAQ,EAAE,iBAAiB,EAAE,CAAC;IAC9B,UAAU,CAAC,EAAE,MAAM,CAAC;IACpB,MAAM,CAAC,EAAE,OAAO,CAAC;IACjB,KAAK,CAAC,EAAE,GAAG,EAAE,CAAC;IACd,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,IAAI,CAAC,EAAE,MAAM,EAAE,CAAC;CACjB;AAED,UAAU,gBAAgB;IACxB,KAAK,EAAE,MAAM,CAAC;IACd,UAAU,EAAE,MAAM,CAAC;IACnB,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,QAAQ,EAAE,gBAAgB,EAAE,CAAC;IAC7B,KAAK,CAAC,EAAE,GAAG,EAAE,CAAC;IACd,MAAM,EAAE,OAAO,CAAC;IAChB,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,cAAc,CAAC,EAAE,MAAM,EAAE,CAAC;CAC3B;AAED,wBAAgB,+BAA+B,CAC7C,MAAM,EAAE,aAAa,EACrB,aAAa,CAAC,EAAE,MAAM,GACrB,gBAAgB,CAuDlB"}
@@ -0,0 +1,61 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.convertOpenAIToAnthropicRequest = convertOpenAIToAnthropicRequest;
4
+ function convertOpenAIToAnthropicRequest(openai, targetModelId) {
5
+ const messages = openai.messages;
6
+ const result = {
7
+ model: targetModelId ?? "claude-sonnet-4-6",
8
+ max_tokens: openai.max_tokens ?? 4096,
9
+ messages: [],
10
+ stream: openai.stream ?? false,
11
+ };
12
+ const systemMsg = messages.find((m) => m.role === "system");
13
+ if (systemMsg)
14
+ result.system = systemMsg.content ?? undefined;
15
+ for (const msg of messages) {
16
+ if (msg.role === "system")
17
+ continue;
18
+ if (msg.role === "user") {
19
+ result.messages.push({ role: "user", content: msg.content ?? "" });
20
+ }
21
+ else if (msg.role === "assistant") {
22
+ const content = [];
23
+ if (msg.content)
24
+ content.push({ type: "text", text: msg.content });
25
+ if (msg.tool_calls) {
26
+ for (const tc of msg.tool_calls) {
27
+ content.push({
28
+ type: "tool_use",
29
+ id: tc.id,
30
+ name: tc.function.name,
31
+ input: JSON.parse(tc.function.arguments),
32
+ });
33
+ }
34
+ }
35
+ result.messages.push({ role: "assistant", content });
36
+ }
37
+ else if (msg.role === "tool") {
38
+ result.messages.push({
39
+ role: "user",
40
+ content: [{
41
+ type: "tool_result",
42
+ tool_use_id: msg.tool_call_id ?? "",
43
+ content: msg.content ?? "",
44
+ }],
45
+ });
46
+ }
47
+ }
48
+ if (openai.tools) {
49
+ result.tools = openai.tools.map((t) => ({
50
+ name: t.function.name,
51
+ description: t.function.description,
52
+ input_schema: t.function.parameters,
53
+ }));
54
+ }
55
+ if (openai.temperature !== undefined)
56
+ result.temperature = openai.temperature;
57
+ if (openai.stop)
58
+ result.stop_sequences = openai.stop;
59
+ return result;
60
+ }
61
+ //# sourceMappingURL=openai-to-anthropic.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"openai-to-anthropic.js","sourceRoot":"","sources":["../../src/protocol/openai-to-anthropic.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,2 @@
1
+ export declare function convertAnthropicSSEToOpenAI(sseChunk: string, model: string): string | null;
2
+ //# sourceMappingURL=sse-transform.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"sse-transform.d.ts","sourceRoot":"","sources":["../../src/protocol/sse-transform.ts"],"names":[],"mappings":"AAAA,wBAAgB,2BAA2B,CAAC,QAAQ,EAAE,MAAM,EAAE,KAAK,EAAE,MAAM,GAAG,MAAM,GAAG,IAAI,CAgC1F"}
@@ -0,0 +1,41 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.convertAnthropicSSEToOpenAI = convertAnthropicSSEToOpenAI;
4
+ function convertAnthropicSSEToOpenAI(sseChunk, model) {
5
+ const lines = sseChunk.split("\n");
6
+ let eventType = "";
7
+ let data = null;
8
+ for (const line of lines) {
9
+ if (line.startsWith("event: "))
10
+ eventType = line.slice(7).trim();
11
+ if (line.startsWith("data: ")) {
12
+ try {
13
+ data = JSON.parse(line.slice(6));
14
+ }
15
+ catch {
16
+ return null;
17
+ }
18
+ }
19
+ }
20
+ if (!data)
21
+ return null;
22
+ switch (data.type) {
23
+ case "message_start": {
24
+ const id = data.message?.id ?? "chatcmpl-agentfare";
25
+ return `data: ${JSON.stringify({ id, object: "chat.completion.chunk", model, choices: [{ index: 0, delta: { role: "assistant" }, finish_reason: null }] })}\n\n`;
26
+ }
27
+ case "content_block_delta": {
28
+ const text = data.delta?.text ?? "";
29
+ return `data: ${JSON.stringify({ id: "chatcmpl-agentfare", object: "chat.completion.chunk", model, choices: [{ index: 0, delta: { content: text }, finish_reason: null }] })}\n\n`;
30
+ }
31
+ case "message_delta": {
32
+ const finishReason = data.delta?.stop_reason === "tool_use" ? "tool_calls" : "stop";
33
+ return `data: ${JSON.stringify({ id: "chatcmpl-agentfare", object: "chat.completion.chunk", model, choices: [{ index: 0, delta: {}, finish_reason: finishReason }] })}\n\n`;
34
+ }
35
+ case "message_stop":
36
+ return "data: [DONE]\n\n";
37
+ default:
38
+ return null;
39
+ }
40
+ }
41
+ //# sourceMappingURL=sse-transform.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"sse-transform.js","sourceRoot":"","sources":["../../src/protocol/sse-transform.ts"],"names":[],"mappings":";;AAAA,kEAgCC;AAhCD,SAAgB,2BAA2B,CAAC,QAAgB,EAAE,KAAa;IACzE,MAAM,KAAK,GAAG,QAAQ,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC;IACnC,IAAI,SAAS,GAAG,EAAE,CAAC;IACnB,IAAI,IAAI,GAAQ,IAAI,CAAC;IAErB,KAAK,MAAM,IAAI,IAAI,KAAK,EAAE,CAAC;QACzB,IAAI,IAAI,CAAC,UAAU,CAAC,SAAS,CAAC;YAAE,SAAS,GAAG,IAAI,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,IAAI,EAAE,CAAC;QACjE,IAAI,IAAI,CAAC,UAAU,CAAC,QAAQ,CAAC,EAAE,CAAC;YAC9B,IAAI,CAAC;gBAAC,IAAI,GAAG,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,CAAC;YAAC,CAAC;YAAC,MAAM,CAAC;gBAAC,OAAO,IAAI,CAAC;YAAC,CAAC;QAClE,CAAC;IACH,CAAC;IAED,IAAI,CAAC,IAAI;QAAE,OAAO,IAAI,CAAC;IAEvB,QAAQ,IAAI,CAAC,IAAI,EAAE,CAAC;QAClB,KAAK,eAAe,CAAC,CAAC,CAAC;YACrB,MAAM,EAAE,GAAG,IAAI,CAAC,OAAO,EAAE,EAAE,IAAI,oBAAoB,CAAC;YACpD,OAAO,SAAS,IAAI,CAAC,SAAS,CAAC,EAAE,EAAE,EAAE,MAAM,EAAE,uBAAuB,EAAE,KAAK,EAAE,OAAO,EAAE,CAAC,EAAE,KAAK,EAAE,CAAC,EAAE,KAAK,EAAE,EAAE,IAAI,EAAE,WAAW,EAAE,EAAE,aAAa,EAAE,IAAI,EAAE,CAAC,EAAE,CAAC,MAAM,CAAC;QACnK,CAAC;QACD,KAAK,qBAAqB,CAAC,CAAC,CAAC;YAC3B,MAAM,IAAI,GAAG,IAAI,CAAC,KAAK,EAAE,IAAI,IAAI,EAAE,CAAC;YACpC,OAAO,SAAS,IAAI,CAAC,SAAS,CAAC,EAAE,EAAE,EAAE,oBAAoB,EAAE,MAAM,EAAE,uBAAuB,EAAE,KAAK,EAAE,OAAO,EAAE,CAAC,EAAE,KAAK,EAAE,CAAC,EAAE,KAAK,EAAE,EAAE,OAAO,EAAE,IAAI,EAAE,EAAE,aAAa,EAAE,IAAI,EAAE,CAAC,EAAE,CAAC,MAAM,CAAC;QACrL,CAAC;QACD,KAAK,eAAe,CAAC,CAAC,CAAC;YACrB,MAAM,YAAY,GAAG,IAAI,CAAC,KAAK,EAAE,WAAW,KAAK,UAAU,CAAC,CAAC,CAAC,YAAY,CAAC,CAAC,CAAC,MAAM,CAAC;YACpF,OAAO,SAAS,IAAI,CAAC,SAAS,CAAC,EAAE,EAAE,EAAE,oBAAoB,EAAE,MAAM,EAAE,uBAAuB,EAAE,KAAK,EAAE,OAAO,EAAE,CAAC,EAAE,KAAK,EAAE,CAAC,EAAE,KAAK,EAAE,EAAE,EAAE,aAAa,EAAE,YAAY,EAAE,CAAC,EAAE,CAAC,MAAM,CAAC;QAC9K,CAAC;QACD,KAAK,cAAc;YACjB,OAAO,kBAAkB,CAAC;QAC5B;YACE,OAAO,IAAI,CAAC;IAChB,CAAC;AACH,CAAC"}
@@ -0,0 +1,31 @@
1
+ export interface OpenAIChatMessage {
2
+ role: "system" | "user" | "assistant" | "tool";
3
+ content: string | null;
4
+ tool_calls?: Array<{
5
+ id: string;
6
+ type: "function";
7
+ function: {
8
+ name: string;
9
+ arguments: string;
10
+ };
11
+ }>;
12
+ tool_call_id?: string;
13
+ }
14
+ export interface AnthropicMessage {
15
+ role: "user" | "assistant";
16
+ content: string | AnthropicContentBlock[];
17
+ }
18
+ export type AnthropicContentBlock = {
19
+ type: "text";
20
+ text: string;
21
+ } | {
22
+ type: "tool_use";
23
+ id: string;
24
+ name: string;
25
+ input: any;
26
+ } | {
27
+ type: "tool_result";
28
+ tool_use_id: string;
29
+ content: string | AnthropicContentBlock[];
30
+ };
31
+ //# sourceMappingURL=types.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../../src/protocol/types.ts"],"names":[],"mappings":"AAAA,MAAM,WAAW,iBAAiB;IAChC,IAAI,EAAE,QAAQ,GAAG,MAAM,GAAG,WAAW,GAAG,MAAM,CAAC;IAC/C,OAAO,EAAE,MAAM,GAAG,IAAI,CAAC;IACvB,UAAU,CAAC,EAAE,KAAK,CAAC;QACjB,EAAE,EAAE,MAAM,CAAC;QACX,IAAI,EAAE,UAAU,CAAC;QACjB,QAAQ,EAAE;YAAE,IAAI,EAAE,MAAM,CAAC;YAAC,SAAS,EAAE,MAAM,CAAA;SAAE,CAAC;KAC/C,CAAC,CAAC;IACH,YAAY,CAAC,EAAE,MAAM,CAAC;CACvB;AAED,MAAM,WAAW,gBAAgB;IAC/B,IAAI,EAAE,MAAM,GAAG,WAAW,CAAC;IAC3B,OAAO,EAAE,MAAM,GAAG,qBAAqB,EAAE,CAAC;CAC3C;AAED,MAAM,MAAM,qBAAqB,GAC7B;IAAE,IAAI,EAAE,MAAM,CAAC;IAAC,IAAI,EAAE,MAAM,CAAA;CAAE,GAC9B;IAAE,IAAI,EAAE,UAAU,CAAC;IAAC,EAAE,EAAE,MAAM,CAAC;IAAC,IAAI,EAAE,MAAM,CAAC;IAAC,KAAK,EAAE,GAAG,CAAA;CAAE,GAC1D;IAAE,IAAI,EAAE,aAAa,CAAC;IAAC,WAAW,EAAE,MAAM,CAAC;IAAC,OAAO,EAAE,MAAM,GAAG,qBAAqB,EAAE,CAAA;CAAE,CAAC"}
@@ -0,0 +1,3 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ //# sourceMappingURL=types.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"types.js","sourceRoot":"","sources":["../../src/protocol/types.ts"],"names":[],"mappings":""}
@@ -0,0 +1,7 @@
1
+ import * as http from "node:http";
2
+ export interface ProxyServerOptions {
3
+ port: number;
4
+ targetUpstream?: string;
5
+ }
6
+ export declare function startProxyServer(options: ProxyServerOptions): http.Server;
7
+ //# sourceMappingURL=proxy-server.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"proxy-server.d.ts","sourceRoot":"","sources":["../src/proxy-server.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,IAAI,MAAM,WAAW,CAAC;AAElC,MAAM,WAAW,kBAAkB;IACjC,IAAI,EAAE,MAAM,CAAC;IACb,cAAc,CAAC,EAAE,MAAM,CAAC;CACzB;AAED,wBAAgB,gBAAgB,CAAC,OAAO,EAAE,kBAAkB,GAAG,IAAI,CAAC,MAAM,CAezE"}
@@ -0,0 +1,52 @@
1
+ "use strict";
2
+ var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
3
+ if (k2 === undefined) k2 = k;
4
+ var desc = Object.getOwnPropertyDescriptor(m, k);
5
+ if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) {
6
+ desc = { enumerable: true, get: function() { return m[k]; } };
7
+ }
8
+ Object.defineProperty(o, k2, desc);
9
+ }) : (function(o, m, k, k2) {
10
+ if (k2 === undefined) k2 = k;
11
+ o[k2] = m[k];
12
+ }));
13
+ var __setModuleDefault = (this && this.__setModuleDefault) || (Object.create ? (function(o, v) {
14
+ Object.defineProperty(o, "default", { enumerable: true, value: v });
15
+ }) : function(o, v) {
16
+ o["default"] = v;
17
+ });
18
+ var __importStar = (this && this.__importStar) || (function () {
19
+ var ownKeys = function(o) {
20
+ ownKeys = Object.getOwnPropertyNames || function (o) {
21
+ var ar = [];
22
+ for (var k in o) if (Object.prototype.hasOwnProperty.call(o, k)) ar[ar.length] = k;
23
+ return ar;
24
+ };
25
+ return ownKeys(o);
26
+ };
27
+ return function (mod) {
28
+ if (mod && mod.__esModule) return mod;
29
+ var result = {};
30
+ if (mod != null) for (var k = ownKeys(mod), i = 0; i < k.length; i++) if (k[i] !== "default") __createBinding(result, mod, k[i]);
31
+ __setModuleDefault(result, mod);
32
+ return result;
33
+ };
34
+ })();
35
+ Object.defineProperty(exports, "__esModule", { value: true });
36
+ exports.startProxyServer = startProxyServer;
37
+ const http = __importStar(require("node:http"));
38
+ function startProxyServer(options) {
39
+ const server = http.createServer((_req, res) => {
40
+ res.writeHead(501, { "Content-Type": "application/json" });
41
+ res.end(JSON.stringify({
42
+ status: "not_implemented",
43
+ message: "Proxy server mode is not yet available",
44
+ }));
45
+ });
46
+ console.warn("[AgentFare] WARNING: startProxyServer is not yet functional");
47
+ server.listen(options.port, () => {
48
+ console.log(`[AgentFare] Proxy server started on port ${options.port} (stub mode)`);
49
+ });
50
+ return server;
51
+ }
52
+ //# sourceMappingURL=proxy-server.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"proxy-server.js","sourceRoot":"","sources":["../src/proxy-server.ts"],"names":[],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AAOA,4CAeC;AAtBD,gDAAkC;AAOlC,SAAgB,gBAAgB,CAAC,OAA2B;IAC1D,MAAM,MAAM,GAAG,IAAI,CAAC,YAAY,CAAC,CAAC,IAAI,EAAE,GAAG,EAAE,EAAE;QAC7C,GAAG,CAAC,SAAS,CAAC,GAAG,EAAE,EAAE,cAAc,EAAE,kBAAkB,EAAE,CAAC,CAAC;QAC3D,GAAG,CAAC,GAAG,CAAC,IAAI,CAAC,SAAS,CAAC;YACrB,MAAM,EAAE,iBAAiB;YACzB,OAAO,EAAE,wCAAwC;SAClD,CAAC,CAAC,CAAC;IACN,CAAC,CAAC,CAAC;IAEH,OAAO,CAAC,IAAI,CAAC,6DAA6D,CAAC,CAAC;IAC5E,MAAM,CAAC,MAAM,CAAC,OAAO,CAAC,IAAI,EAAE,GAAG,EAAE;QAC/B,OAAO,CAAC,GAAG,CAAC,4CAA4C,OAAO,CAAC,IAAI,cAAc,CAAC,CAAC;IACtF,CAAC,CAAC,CAAC;IAEH,OAAO,MAAM,CAAC;AAChB,CAAC"}
@@ -0,0 +1,2 @@
1
+ export { isInternalRequest, makeInternalHeaders } from "./headers.js";
2
+ //# sourceMappingURL=reentry-guard.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"reentry-guard.d.ts","sourceRoot":"","sources":["../src/reentry-guard.ts"],"names":[],"mappings":"AAEA,OAAO,EAAE,iBAAiB,EAAE,mBAAmB,EAAE,MAAM,cAAc,CAAC"}
@@ -0,0 +1,9 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.makeInternalHeaders = exports.isInternalRequest = void 0;
4
+ // ISSUE-064: re-export from headers.ts (single implementation)
5
+ // Kept as a re-export shim for backward compatibility with existing imports.
6
+ var headers_js_1 = require("./headers.js");
7
+ Object.defineProperty(exports, "isInternalRequest", { enumerable: true, get: function () { return headers_js_1.isInternalRequest; } });
8
+ Object.defineProperty(exports, "makeInternalHeaders", { enumerable: true, get: function () { return headers_js_1.makeInternalHeaders; } });
9
+ //# sourceMappingURL=reentry-guard.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"reentry-guard.js","sourceRoot":"","sources":["../src/reentry-guard.ts"],"names":[],"mappings":";;;AAAA,+DAA+D;AAC/D,6EAA6E;AAC7E,2CAAsE;AAA7D,+GAAA,iBAAiB,OAAA;AAAE,iHAAA,mBAAmB,OAAA"}
@@ -0,0 +1,34 @@
1
+ import type { ModelRegistry, ModelEntry } from "@agentfare/models";
2
+ import type { AgentFareConfig, StepAnalysis, RoutingDecision, Message } from "@agentfare/core";
3
+ export interface HandleResult {
4
+ decision: RoutingDecision;
5
+ modifiedBody: string;
6
+ analysis: StepAnalysis;
7
+ sessionId: string;
8
+ }
9
+ interface RouteCacheLike {
10
+ get(key: string): StepAnalysis | null;
11
+ set(key: string, analysis: StepAnalysis): void;
12
+ }
13
+ type LLMAnalyzerFn = (messages: Message[], fetchFn: typeof globalThis.fetch, url: string, modelId: string, apiKey: string) => Promise<StepAnalysis | null>;
14
+ type SelectAnalyzerModelFn = (registry: ModelRegistry) => ModelEntry | null;
15
+ export declare class RequestHandler {
16
+ private config;
17
+ private registry;
18
+ private router;
19
+ private cache;
20
+ private llmAnalyzer;
21
+ private selectAnalyzerModelFn;
22
+ private getOriginalFetchFn;
23
+ constructor(config: AgentFareConfig, registry: ModelRegistry);
24
+ /** Task 12-13 call this to inject L2/L3 capabilities */
25
+ injectL2L3(deps: {
26
+ cache: RouteCacheLike;
27
+ analyzeWithLLM: LLMAnalyzerFn;
28
+ selectAnalyzerModel: SelectAnalyzerModelFn;
29
+ getOriginalFetch: () => typeof globalThis.fetch;
30
+ }): void;
31
+ handle(url: string, bodyStr: string, headers: Record<string, string>): Promise<HandleResult | null>;
32
+ }
33
+ export {};
34
+ //# sourceMappingURL=request-handler.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"request-handler.d.ts","sourceRoot":"","sources":["../src/request-handler.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,aAAa,EAAE,UAAU,EAAE,MAAM,mBAAmB,CAAC;AAEnE,OAAO,KAAK,EAAE,eAAe,EAAE,YAAY,EAAE,eAAe,EAAE,OAAO,EAAE,MAAM,iBAAiB,CAAC;AAI/F,MAAM,WAAW,YAAY;IAC3B,QAAQ,EAAE,eAAe,CAAC;IAC1B,YAAY,EAAE,MAAM,CAAC;IACrB,QAAQ,EAAE,YAAY,CAAC;IACvB,SAAS,EAAE,MAAM,CAAC;CACnB;AAGD,UAAU,cAAc;IACtB,GAAG,CAAC,GAAG,EAAE,MAAM,GAAG,YAAY,GAAG,IAAI,CAAC;IACtC,GAAG,CAAC,GAAG,EAAE,MAAM,EAAE,QAAQ,EAAE,YAAY,GAAG,IAAI,CAAC;CAChD;AAED,KAAK,aAAa,GAAG,CAAC,QAAQ,EAAE,OAAO,EAAE,EAAE,OAAO,EAAE,OAAO,UAAU,CAAC,KAAK,EAAE,GAAG,EAAE,MAAM,EAAE,OAAO,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,KAAK,OAAO,CAAC,YAAY,GAAG,IAAI,CAAC,CAAC;AAE3J,KAAK,qBAAqB,GAAG,CAAC,QAAQ,EAAE,aAAa,KAAK,UAAU,GAAG,IAAI,CAAC;AAE5E,qBAAa,cAAc;IAQvB,OAAO,CAAC,MAAM;IACd,OAAO,CAAC,QAAQ;IARlB,OAAO,CAAC,MAAM,CAAS;IACvB,OAAO,CAAC,KAAK,CAA+B;IAC5C,OAAO,CAAC,WAAW,CAA8B;IACjD,OAAO,CAAC,qBAAqB,CAAsC;IACnE,OAAO,CAAC,kBAAkB,CAAgD;gBAGhE,MAAM,EAAE,eAAe,EACvB,QAAQ,EAAE,aAAa;IAKjC,wDAAwD;IACxD,UAAU,CAAC,IAAI,EAAE;QACf,KAAK,EAAE,cAAc,CAAC;QACtB,cAAc,EAAE,aAAa,CAAC;QAC9B,mBAAmB,EAAE,qBAAqB,CAAC;QAC3C,gBAAgB,EAAE,MAAM,OAAO,UAAU,CAAC,KAAK,CAAC;KACjD,GAAG,IAAI;IAOF,MAAM,CACV,GAAG,EAAE,MAAM,EACX,OAAO,EAAE,MAAM,EACf,OAAO,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,GAC9B,OAAO,CAAC,YAAY,GAAG,IAAI,CAAC;CA6GhC"}