@ank1015/providers 0.0.1

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 (99) hide show
  1. package/README.md +453 -0
  2. package/biome.json +43 -0
  3. package/dist/agent/agent-loop.d.ts +5 -0
  4. package/dist/agent/agent-loop.d.ts.map +1 -0
  5. package/dist/agent/agent-loop.js +219 -0
  6. package/dist/agent/agent-loop.js.map +1 -0
  7. package/dist/agent/types.d.ts +67 -0
  8. package/dist/agent/types.d.ts.map +1 -0
  9. package/dist/agent/types.js +3 -0
  10. package/dist/agent/types.js.map +1 -0
  11. package/dist/index.d.ts +10 -0
  12. package/dist/index.d.ts.map +1 -0
  13. package/dist/index.js +29 -0
  14. package/dist/index.js.map +1 -0
  15. package/dist/models.d.ts +3 -0
  16. package/dist/models.d.ts.map +1 -0
  17. package/dist/models.generated.d.ts +247 -0
  18. package/dist/models.generated.d.ts.map +1 -0
  19. package/dist/models.generated.js +315 -0
  20. package/dist/models.generated.js.map +1 -0
  21. package/dist/models.js +41 -0
  22. package/dist/models.js.map +1 -0
  23. package/dist/providers/convert.d.ts +6 -0
  24. package/dist/providers/convert.d.ts.map +1 -0
  25. package/dist/providers/convert.js +207 -0
  26. package/dist/providers/convert.js.map +1 -0
  27. package/dist/providers/google.d.ts +26 -0
  28. package/dist/providers/google.d.ts.map +1 -0
  29. package/dist/providers/google.js +434 -0
  30. package/dist/providers/google.js.map +1 -0
  31. package/dist/providers/openai.d.ts +17 -0
  32. package/dist/providers/openai.d.ts.map +1 -0
  33. package/dist/providers/openai.js +396 -0
  34. package/dist/providers/openai.js.map +1 -0
  35. package/dist/stream.d.ts +4 -0
  36. package/dist/stream.d.ts.map +1 -0
  37. package/dist/stream.js +40 -0
  38. package/dist/stream.js.map +1 -0
  39. package/dist/test-google-agent-loop.d.ts +2 -0
  40. package/dist/test-google-agent-loop.d.ts.map +1 -0
  41. package/dist/test-google-agent-loop.js +186 -0
  42. package/dist/test-google-agent-loop.js.map +1 -0
  43. package/dist/test-google.d.ts +2 -0
  44. package/dist/test-google.d.ts.map +1 -0
  45. package/dist/test-google.js +41 -0
  46. package/dist/test-google.js.map +1 -0
  47. package/dist/types.d.ts +187 -0
  48. package/dist/types.d.ts.map +1 -0
  49. package/dist/types.js +10 -0
  50. package/dist/types.js.map +1 -0
  51. package/dist/utils/event-stream.d.ts +16 -0
  52. package/dist/utils/event-stream.d.ts.map +1 -0
  53. package/dist/utils/event-stream.js +61 -0
  54. package/dist/utils/event-stream.js.map +1 -0
  55. package/dist/utils/json-parse.d.ts +9 -0
  56. package/dist/utils/json-parse.d.ts.map +1 -0
  57. package/dist/utils/json-parse.js +32 -0
  58. package/dist/utils/json-parse.js.map +1 -0
  59. package/dist/utils/sanitize-unicode.d.ts +22 -0
  60. package/dist/utils/sanitize-unicode.d.ts.map +1 -0
  61. package/dist/utils/sanitize-unicode.js +29 -0
  62. package/dist/utils/sanitize-unicode.js.map +1 -0
  63. package/dist/utils/validation.d.ts +11 -0
  64. package/dist/utils/validation.d.ts.map +1 -0
  65. package/dist/utils/validation.js +61 -0
  66. package/dist/utils/validation.js.map +1 -0
  67. package/package.json +33 -0
  68. package/src/agent/agent-loop.ts +275 -0
  69. package/src/agent/types.ts +80 -0
  70. package/src/index.ts +72 -0
  71. package/src/models.generated.ts +314 -0
  72. package/src/models.ts +45 -0
  73. package/src/providers/convert.ts +222 -0
  74. package/src/providers/google.ts +496 -0
  75. package/src/providers/openai.ts +437 -0
  76. package/src/stream.ts +60 -0
  77. package/src/types.ts +198 -0
  78. package/src/utils/event-stream.ts +60 -0
  79. package/src/utils/json-parse.ts +28 -0
  80. package/src/utils/sanitize-unicode.ts +25 -0
  81. package/src/utils/validation.ts +69 -0
  82. package/test/core/agent-loop.test.ts +958 -0
  83. package/test/core/stream.test.ts +409 -0
  84. package/test/data/red-circle.png +0 -0
  85. package/test/data/superintelligentwill.pdf +0 -0
  86. package/test/edge-cases/general.test.ts +565 -0
  87. package/test/integration/e2e.test.ts +530 -0
  88. package/test/models/cost.test.ts +499 -0
  89. package/test/models/registry.test.ts +298 -0
  90. package/test/providers/convert.test.ts +846 -0
  91. package/test/providers/google-schema.test.ts +666 -0
  92. package/test/providers/google-stream.test.ts +369 -0
  93. package/test/providers/openai-stream.test.ts +251 -0
  94. package/test/utils/event-stream.test.ts +289 -0
  95. package/test/utils/json-parse.test.ts +344 -0
  96. package/test/utils/sanitize-unicode.test.ts +329 -0
  97. package/test/utils/validation.test.ts +614 -0
  98. package/tsconfig.json +21 -0
  99. package/vitest.config.ts +9 -0
@@ -0,0 +1 @@
1
+ {"version":3,"file":"test-google-agent-loop.js","sourceRoot":"","sources":["../src/test-google-agent-loop.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,2 @@
1
+ export {};
2
+ //# sourceMappingURL=test-google.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"test-google.d.ts","sourceRoot":"","sources":["../src/test-google.ts"],"names":[],"mappings":""}
@@ -0,0 +1,41 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ const google_1 = require("./providers/google");
4
+ const models_generated_1 = require("./models.generated");
5
+ const genai_1 = require("@google/genai");
6
+ const fs_1 = require("fs");
7
+ const typebox_1 = require("@sinclair/typebox");
8
+ const schema = typebox_1.Type.Object({
9
+ sign: typebox_1.Type.String({ description: "An astrological sign like Taurus or Aquarius" }),
10
+ });
11
+ const getHoroscope = {
12
+ name: "get_horoscope",
13
+ description: "Get today's horoscope for an astrological sign.",
14
+ parameters: schema
15
+ };
16
+ const main = async () => {
17
+ const context = {
18
+ systemPrompt: 'Be a helpful assistant',
19
+ messages: [{
20
+ role: 'user',
21
+ content: [{
22
+ type: 'text',
23
+ content: 'What is my horoscope? I am an Aquarius. Use the tool'
24
+ }],
25
+ timestamp: 0
26
+ }],
27
+ tools: [getHoroscope]
28
+ };
29
+ const stream = (0, google_1.streamGoogle)(models_generated_1.MODELS.google["gemini-3-pro-preview"], context, {
30
+ thinkingConfig: {
31
+ thinkingLevel: genai_1.ThinkingLevel.LOW
32
+ }
33
+ });
34
+ for await (const chunk of stream) {
35
+ (0, fs_1.appendFileSync)('/Users/notacoder/Desktop/frontier-agents/providers/assistant.txt', JSON.stringify(chunk, null, 2) + '\n');
36
+ }
37
+ const finalResp = await stream.result();
38
+ (0, fs_1.appendFileSync)('/Users/notacoder/Desktop/frontier-agents/providers/finalResp.txt', JSON.stringify(finalResp, null, 2) + '\n');
39
+ };
40
+ main();
41
+ //# sourceMappingURL=test-google.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"test-google.js","sourceRoot":"","sources":["../src/test-google.ts"],"names":[],"mappings":";;AAAA,+CAAkD;AAClD,yDAA0C;AAE1C,yCAA8C;AAC9C,2BAAoC;AACpC,+CAAyC;AAEzC,MAAM,MAAM,GAAG,cAAI,CAAC,MAAM,CAAC;IAC1B,IAAI,EAAE,cAAI,CAAC,MAAM,CAAC,EAAE,WAAW,EAAE,8CAA8C,EAAE,CAAC;CAClF,CAAC,CAAC;AAEH,MAAM,YAAY,GAAS;IACvB,IAAI,EAAE,eAAe;IACrB,WAAW,EAAE,iDAAiD;IAC9D,UAAU,EAAE,MAAM;CACrB,CAAA;AAED,MAAM,IAAI,GAAG,KAAK,IAAI,EAAE;IAEpB,MAAM,OAAO,GAAY;QACrB,YAAY,EAAE,wBAAwB;QACtC,QAAQ,EAAE,CAAC;gBACP,IAAI,EAAE,MAAM;gBACZ,OAAO,EAAE,CAAC;wBACN,IAAI,EAAE,MAAM;wBACZ,OAAO,EAAE,sDAAsD;qBAClE,CAAC;gBACF,SAAS,EAAE,CAAC;aACf,CAAC;QACF,KAAK,EAAE,CAAC,YAAY,CAAC;KACxB,CAAA;IAED,MAAM,MAAM,GAAG,IAAA,qBAAY,EACvB,yBAAM,CAAC,MAAM,CAAC,sBAAsB,CAAC,EACrC,OAAO,EACP;QACI,cAAc,EAAE;YACZ,aAAa,EAAE,qBAAa,CAAC,GAAG;SACnC;KACJ,CACJ,CAAA;IAED,IAAI,KAAK,EAAE,MAAM,KAAK,IAAI,MAAM,EAAC,CAAC;QAC9B,IAAA,mBAAc,EAAC,kEAAkE,EAAE,IAAI,CAAC,SAAS,CAAC,KAAK,EAAE,IAAI,EAAE,CAAC,CAAC,GAAG,IAAI,CAAC,CAAC;IAC9H,CAAC;IAED,MAAM,SAAS,GAAG,MAAM,MAAM,CAAC,MAAM,EAAE,CAAC;IACxC,IAAA,mBAAc,EAAC,kEAAkE,EAAE,IAAI,CAAC,SAAS,CAAC,SAAS,EAAE,IAAI,EAAE,CAAC,CAAC,GAAG,IAAI,CAAC,CAAC;AAClI,CAAC,CAAA;AAED,IAAI,EAAE,CAAA"}
@@ -0,0 +1,187 @@
1
+ import { Response } from "openai/resources/responses/responses.js";
2
+ import type { TSchema } from "@sinclair/typebox";
3
+ import { OpenAIProviderOptions } from "./providers/openai";
4
+ import { AssistantMessageEventStream } from "./utils/event-stream";
5
+ import { GoogleProviderOptions } from "./providers/google";
6
+ import type { GenerateContentResponse } from "@google/genai";
7
+ export type Api = 'openai' | 'google';
8
+ export interface Model<TApi extends Api> {
9
+ id: string;
10
+ name: string;
11
+ api: TApi;
12
+ baseUrl: string;
13
+ reasoning: boolean;
14
+ input: ("text" | "image" | "file")[];
15
+ cost: {
16
+ input: number;
17
+ output: number;
18
+ cacheRead: number;
19
+ cacheWrite: number;
20
+ };
21
+ contextWindow: number;
22
+ maxTokens: number;
23
+ headers?: Record<string, string>;
24
+ }
25
+ export interface UserMessage {
26
+ role: "user";
27
+ timestamp: number;
28
+ content: (UserTextContent | UserImageContent | UserFileContent)[];
29
+ }
30
+ export interface ToolResultMessage<TDetails = any> {
31
+ role: "toolResult";
32
+ toolName: string;
33
+ toolCallId?: string;
34
+ content: (UserTextContent | UserImageContent | UserFileContent)[];
35
+ details?: TDetails;
36
+ isError: boolean;
37
+ error?: {
38
+ message: string;
39
+ name?: string;
40
+ stack?: string;
41
+ };
42
+ timestamp: number;
43
+ }
44
+ export interface UserImageContent {
45
+ type: "image";
46
+ data: string;
47
+ mimeType: string;
48
+ }
49
+ export interface UserFileContent {
50
+ type: "file";
51
+ data: string;
52
+ mimeType: string;
53
+ }
54
+ export interface UserTextContent {
55
+ type: 'text';
56
+ content: string;
57
+ }
58
+ export interface NativeOpenAIMessage {
59
+ role: "assistant";
60
+ _provider: 'openai';
61
+ message: Response;
62
+ }
63
+ export interface NativeGoogleMessage {
64
+ role: "assistant";
65
+ _provider: 'google';
66
+ message: GenerateContentResponse;
67
+ }
68
+ export type NativeAssistantMessage = NativeOpenAIMessage | NativeGoogleMessage;
69
+ export type Message = UserMessage | NativeAssistantMessage | ToolResultMessage;
70
+ export interface Tool<TParameters extends TSchema = TSchema, TName extends string = string> {
71
+ name: TName;
72
+ description: string;
73
+ parameters: TParameters;
74
+ }
75
+ export type ToolName<TTool extends Tool> = TTool["name"];
76
+ export type ToolNames<TTools extends readonly Tool[]> = TTools[number]["name"];
77
+ export declare function defineTool<TParameters extends TSchema, TName extends string>(tool: Tool<TParameters, TName>): Tool<TParameters, TName>;
78
+ export interface Context<TTools extends readonly Tool[] = readonly Tool[]> {
79
+ messages: Message[];
80
+ systemPrompt?: string;
81
+ tools?: TTools;
82
+ }
83
+ export interface Usage {
84
+ input: number;
85
+ output: number;
86
+ cacheRead: number;
87
+ cacheWrite: number;
88
+ totalTokens: number;
89
+ cost: {
90
+ input: number;
91
+ output: number;
92
+ cacheRead: number;
93
+ cacheWrite: number;
94
+ total: number;
95
+ };
96
+ }
97
+ export type StopReason = "stop" | "length" | "toolUse" | "error" | "aborted";
98
+ export interface AssistantMessage {
99
+ role: "assistant";
100
+ content: (AssistantTextContent | AssistantThinkingContent | AssistantToolCall | AbstractedImageContent)[];
101
+ api: Api;
102
+ model: string;
103
+ usage: Usage;
104
+ stopReason: StopReason;
105
+ errorMessage?: string;
106
+ timestamp: number;
107
+ }
108
+ export interface AssistantTextContent {
109
+ type: 'text';
110
+ text: string;
111
+ }
112
+ export interface AssistantThinkingContent {
113
+ type: 'thinking';
114
+ thinking: string;
115
+ }
116
+ export interface AssistantToolCall {
117
+ type: "toolCall";
118
+ name: string;
119
+ arguments: Record<string, any>;
120
+ id?: string;
121
+ }
122
+ export interface AbstractedImageContent {
123
+ type: "image";
124
+ data: string;
125
+ mimeType: string;
126
+ }
127
+ export type AssistantMessageEvent = {
128
+ type: "start";
129
+ partial: AssistantMessage;
130
+ } | {
131
+ type: "text_start";
132
+ contentIndex: number;
133
+ partial: AssistantMessage;
134
+ } | {
135
+ type: "text_delta";
136
+ contentIndex: number;
137
+ delta: string;
138
+ partial: AssistantMessage;
139
+ } | {
140
+ type: "text_end";
141
+ contentIndex: number;
142
+ content: string;
143
+ partial: AssistantMessage;
144
+ } | {
145
+ type: "thinking_start";
146
+ contentIndex: number;
147
+ partial: AssistantMessage;
148
+ } | {
149
+ type: "thinking_delta";
150
+ contentIndex: number;
151
+ delta: string;
152
+ partial: AssistantMessage;
153
+ } | {
154
+ type: "thinking_end";
155
+ contentIndex: number;
156
+ content: string;
157
+ partial: AssistantMessage;
158
+ } | {
159
+ type: "toolcall_start";
160
+ contentIndex: number;
161
+ partial: AssistantMessage;
162
+ } | {
163
+ type: "toolcall_delta";
164
+ contentIndex: number;
165
+ delta: string;
166
+ partial: AssistantMessage;
167
+ } | {
168
+ type: "toolcall_end";
169
+ contentIndex: number;
170
+ toolCall: AssistantToolCall;
171
+ partial: AssistantMessage;
172
+ } | {
173
+ type: "done";
174
+ reason: Extract<StopReason, "stop" | "length" | "toolUse">;
175
+ message: AssistantMessage;
176
+ } | {
177
+ type: "error";
178
+ reason: Extract<StopReason, "aborted" | "error">;
179
+ error: AssistantMessage;
180
+ };
181
+ export interface ApiOptionsMap {
182
+ "openai": OpenAIProviderOptions;
183
+ "google": GoogleProviderOptions;
184
+ }
185
+ export type OptionsForApi<TApi extends Api> = ApiOptionsMap[TApi];
186
+ export type StreamFunction<TApi extends Api> = (model: Model<TApi>, context: Context, options: OptionsForApi<TApi>) => AssistantMessageEventStream;
187
+ //# sourceMappingURL=types.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../src/types.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,QAAQ,EAAE,MAAM,yCAAyC,CAAC;AACnE,OAAO,KAAK,EAAE,OAAO,EAAE,MAAM,mBAAmB,CAAC;AACjD,OAAO,EAAE,qBAAqB,EAAE,MAAM,oBAAoB,CAAC;AAC3D,OAAO,EAAE,2BAA2B,EAAE,MAAM,sBAAsB,CAAC;AACnE,OAAO,EAAE,qBAAqB,EAAE,MAAM,oBAAoB,CAAC;AAC3D,OAAO,KAAK,EAAE,uBAAuB,EAAE,MAAM,eAAe,CAAC;AAE7D,MAAM,MAAM,GAAG,GAAG,QAAQ,GAAG,QAAQ,CAAA;AAErC,MAAM,WAAW,KAAK,CAAC,IAAI,SAAS,GAAG;IACtC,EAAE,EAAE,MAAM,CAAC;IACX,IAAI,EAAE,MAAM,CAAC;IACb,GAAG,EAAE,IAAI,CAAC;IACV,OAAO,EAAE,MAAM,CAAC;IAChB,SAAS,EAAE,OAAO,CAAC;IACnB,KAAK,EAAE,CAAC,MAAM,GAAG,OAAO,GAAG,MAAM,CAAC,EAAE,CAAC;IACrC,IAAI,EAAE;QACL,KAAK,EAAE,MAAM,CAAC;QACd,MAAM,EAAE,MAAM,CAAC;QACf,SAAS,EAAE,MAAM,CAAC;QAClB,UAAU,EAAE,MAAM,CAAC;KACnB,CAAC;IACF,aAAa,EAAE,MAAM,CAAC;IACtB,SAAS,EAAE,MAAM,CAAC;IAClB,OAAO,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;CACjC;AAKD,MAAM,WAAW,WAAW;IACxB,IAAI,EAAE,MAAM,CAAA;IACZ,SAAS,EAAE,MAAM,CAAC;IAClB,OAAO,EAAE,CAAC,eAAe,GAAG,gBAAgB,GAAG,eAAe,CAAC,EAAE,CAAA;CACpE;AAED,MAAM,WAAW,iBAAiB,CAAC,QAAQ,GAAG,GAAG;IAChD,IAAI,EAAE,YAAY,CAAC;IACnB,QAAQ,EAAE,MAAM,CAAC;IACjB,UAAU,CAAC,EAAE,MAAM,CAAC;IACjB,OAAO,EAAE,CAAC,eAAe,GAAG,gBAAgB,GAAG,eAAe,CAAC,EAAE,CAAC;IACrE,OAAO,CAAC,EAAE,QAAQ,CAAC;IACnB,OAAO,EAAE,OAAO,CAAC;IACjB,KAAK,CAAC,EAAE;QACP,OAAO,EAAE,MAAM,CAAC;QAChB,IAAI,CAAC,EAAE,MAAM,CAAC;QACd,KAAK,CAAC,EAAE,MAAM,CAAC;KACf,CAAC;IACF,SAAS,EAAE,MAAM,CAAC;CAClB;AAED,MAAM,WAAW,gBAAgB;IAC7B,IAAI,EAAE,OAAO,CAAA;IAChB,IAAI,EAAE,MAAM,CAAC;IACb,QAAQ,EAAE,MAAM,CAAC;CACjB;AAED,MAAM,WAAW,eAAe;IAC5B,IAAI,EAAE,MAAM,CAAA;IACf,IAAI,EAAE,MAAM,CAAC;IACb,QAAQ,EAAE,MAAM,CAAC;CACjB;AAED,MAAM,WAAW,eAAe;IAC5B,IAAI,EAAE,MAAM,CAAA;IACZ,OAAO,EAAE,MAAM,CAAA;CAClB;AAID,MAAM,WAAW,mBAAmB;IACnC,IAAI,EAAE,WAAW,CAAA;IACd,SAAS,EAAE,QAAQ,CAAA;IACnB,OAAO,EAAE,QAAQ,CAAA;CACpB;AAED,MAAM,WAAW,mBAAmB;IACnC,IAAI,EAAE,WAAW,CAAA;IACd,SAAS,EAAE,QAAQ,CAAA;IACnB,OAAO,EAAE,uBAAuB,CAAA;CACnC;AAED,MAAM,MAAM,sBAAsB,GAAG,mBAAmB,GAAG,mBAAmB,CAAC;AAI/E,MAAM,MAAM,OAAO,GAAG,WAAW,GAAG,sBAAsB,GAAG,iBAAiB,CAAA;AAE9E,MAAM,WAAW,IAAI,CAAC,WAAW,SAAS,OAAO,GAAG,OAAO,EAAE,KAAK,SAAS,MAAM,GAAG,MAAM;IACzF,IAAI,EAAE,KAAK,CAAC;IACZ,WAAW,EAAE,MAAM,CAAC;IACpB,UAAU,EAAE,WAAW,CAAC;CACxB;AAGD,MAAM,MAAM,QAAQ,CAAC,KAAK,SAAS,IAAI,IAAI,KAAK,CAAC,MAAM,CAAC,CAAC;AACzD,MAAM,MAAM,SAAS,CAAC,MAAM,SAAS,SAAS,IAAI,EAAE,IAAI,MAAM,CAAC,MAAM,CAAC,CAAC,MAAM,CAAC,CAAC;AAK/E,wBAAgB,UAAU,CAAC,WAAW,SAAS,OAAO,EAAE,KAAK,SAAS,MAAM,EAC3E,IAAI,EAAE,IAAI,CAAC,WAAW,EAAE,KAAK,CAAC,GAC5B,IAAI,CAAC,WAAW,EAAE,KAAK,CAAC,CAE1B;AAED,MAAM,WAAW,OAAO,CAAC,MAAM,SAAS,SAAS,IAAI,EAAE,GAAG,SAAS,IAAI,EAAE;IACxE,QAAQ,EAAE,OAAO,EAAE,CAAA;IACnB,YAAY,CAAC,EAAE,MAAM,CAAC;IACtB,KAAK,CAAC,EAAE,MAAM,CAAA;CACd;AAID,MAAM,WAAW,KAAK;IACrB,KAAK,EAAE,MAAM,CAAC;IACd,MAAM,EAAE,MAAM,CAAC;IACf,SAAS,EAAE,MAAM,CAAC;IAClB,UAAU,EAAE,MAAM,CAAC;IACnB,WAAW,EAAE,MAAM,CAAC;IACpB,IAAI,EAAE;QACL,KAAK,EAAE,MAAM,CAAC;QACd,MAAM,EAAE,MAAM,CAAC;QACf,SAAS,EAAE,MAAM,CAAC;QAClB,UAAU,EAAE,MAAM,CAAC;QACnB,KAAK,EAAE,MAAM,CAAC;KACd,CAAC;CACF;AAED,MAAM,MAAM,UAAU,GAAG,MAAM,GAAG,QAAQ,GAAG,SAAS,GAAG,OAAO,GAAG,SAAS,CAAC;AAG7E,MAAM,WAAW,gBAAgB;IAChC,IAAI,EAAE,WAAW,CAAC;IAClB,OAAO,EAAE,CAAC,oBAAoB,GAAG,wBAAwB,GAAG,iBAAiB,GAAG,sBAAsB,CAAC,EAAE,CAAC;IAC1G,GAAG,EAAE,GAAG,CAAC;IACT,KAAK,EAAE,MAAM,CAAC;IACd,KAAK,EAAE,KAAK,CAAC;IACb,UAAU,EAAE,UAAU,CAAC;IACvB,YAAY,CAAC,EAAE,MAAM,CAAC;IACtB,SAAS,EAAE,MAAM,CAAC;CAClB;AAED,MAAM,WAAW,oBAAoB;IACjC,IAAI,EAAE,MAAM,CAAA;IACZ,IAAI,EAAE,MAAM,CAAA;CACf;AAED,MAAM,WAAW,wBAAwB;IACrC,IAAI,EAAE,UAAU,CAAA;IAChB,QAAQ,EAAE,MAAM,CAAA;CACnB;AAED,MAAM,WAAW,iBAAiB;IACjC,IAAI,EAAE,UAAU,CAAC;IACd,IAAI,EAAE,MAAM,CAAA;IACf,SAAS,EAAE,MAAM,CAAC,MAAM,EAAE,GAAG,CAAC,CAAC;IAC/B,EAAE,CAAC,EAAE,MAAM,CAAA;CACX;AAED,MAAM,WAAW,sBAAsB;IACtC,IAAI,EAAE,OAAO,CAAC;IACd,IAAI,EAAE,MAAM,CAAC;IACb,QAAQ,EAAE,MAAM,CAAC;CACjB;AAED,MAAM,MAAM,qBAAqB,GAC9B;IAAE,IAAI,EAAE,OAAO,CAAC;IAAC,OAAO,EAAE,gBAAgB,CAAA;CAAE,GAC5C;IAAE,IAAI,EAAE,YAAY,CAAC;IAAC,YAAY,EAAE,MAAM,CAAC;IAAC,OAAO,EAAE,gBAAgB,CAAA;CAAE,GACvE;IAAE,IAAI,EAAE,YAAY,CAAC;IAAC,YAAY,EAAE,MAAM,CAAC;IAAC,KAAK,EAAE,MAAM,CAAC;IAAC,OAAO,EAAE,gBAAgB,CAAA;CAAE,GACtF;IAAE,IAAI,EAAE,UAAU,CAAC;IAAC,YAAY,EAAE,MAAM,CAAC;IAAC,OAAO,EAAE,MAAM,CAAC;IAAC,OAAO,EAAE,gBAAgB,CAAA;CAAE,GACtF;IAAE,IAAI,EAAE,gBAAgB,CAAC;IAAC,YAAY,EAAE,MAAM,CAAC;IAAC,OAAO,EAAE,gBAAgB,CAAA;CAAE,GAC3E;IAAE,IAAI,EAAE,gBAAgB,CAAC;IAAC,YAAY,EAAE,MAAM,CAAC;IAAC,KAAK,EAAE,MAAM,CAAC;IAAC,OAAO,EAAE,gBAAgB,CAAA;CAAE,GAC1F;IAAE,IAAI,EAAE,cAAc,CAAC;IAAC,YAAY,EAAE,MAAM,CAAC;IAAC,OAAO,EAAE,MAAM,CAAC;IAAC,OAAO,EAAE,gBAAgB,CAAA;CAAE,GAC1F;IAAE,IAAI,EAAE,gBAAgB,CAAC;IAAC,YAAY,EAAE,MAAM,CAAC;IAAC,OAAO,EAAE,gBAAgB,CAAA;CAAE,GAC3E;IAAE,IAAI,EAAE,gBAAgB,CAAC;IAAC,YAAY,EAAE,MAAM,CAAC;IAAC,KAAK,EAAE,MAAM,CAAC;IAAC,OAAO,EAAE,gBAAgB,CAAA;CAAE,GAC1F;IAAE,IAAI,EAAE,cAAc,CAAC;IAAC,YAAY,EAAE,MAAM,CAAC;IAAC,QAAQ,EAAE,iBAAiB,CAAC;IAAC,OAAO,EAAE,gBAAgB,CAAA;CAAE,GACtG;IAAE,IAAI,EAAE,MAAM,CAAC;IAAC,MAAM,EAAE,OAAO,CAAC,UAAU,EAAE,MAAM,GAAG,QAAQ,GAAG,SAAS,CAAC,CAAC;IAAC,OAAO,EAAE,gBAAgB,CAAA;CAAE,GACvG;IAAE,IAAI,EAAE,OAAO,CAAC;IAAC,MAAM,EAAE,OAAO,CAAC,UAAU,EAAE,SAAS,GAAG,OAAO,CAAC,CAAC;IAAC,KAAK,EAAE,gBAAgB,CAAA;CAAE,CAAC;AAMhG,MAAM,WAAW,aAAa;IAC7B,QAAQ,EAAE,qBAAqB,CAAC;IAChC,QAAQ,EAAE,qBAAqB,CAAC;CAChC;AAED,MAAM,MAAM,aAAa,CAAC,IAAI,SAAS,GAAG,IAAI,aAAa,CAAC,IAAI,CAAC,CAAC;AAGlE,MAAM,MAAM,cAAc,CAAC,IAAI,SAAS,GAAG,IAAI,CAC9C,KAAK,EAAE,KAAK,CAAC,IAAI,CAAC,EAClB,OAAO,EAAE,OAAO,EAChB,OAAO,EAAE,aAAa,CAAC,IAAI,CAAC,KACxB,2BAA2B,CAAC"}
package/dist/types.js ADDED
@@ -0,0 +1,10 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.defineTool = defineTool;
4
+ // Helper function to create a tool with better type inference
5
+ // Use 'as const' on the tool array for best autocomplete:
6
+ // const tools = [defineTool({ name: "calculator", ... }), ...] as const
7
+ function defineTool(tool) {
8
+ return tool;
9
+ }
10
+ //# sourceMappingURL=types.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"types.js","sourceRoot":"","sources":["../src/types.ts"],"names":[],"mappings":";;AAqGA,gCAIC;AAPD,8DAA8D;AAC9D,0DAA0D;AAC1D,wEAAwE;AACxE,SAAgB,UAAU,CACzB,IAA8B;IAE9B,OAAO,IAAI,CAAC;AACb,CAAC"}
@@ -0,0 +1,16 @@
1
+ import { NativeAssistantMessage, AssistantMessageEvent } from "../types";
2
+ export declare class EventStream<T, R = T> implements AsyncIterable<T> {
3
+ private queue;
4
+ private waiting;
5
+ private done;
6
+ private finalResultPromise;
7
+ private resolveFinalResult;
8
+ constructor();
9
+ push(event: T): void;
10
+ end(result: R): void;
11
+ [Symbol.asyncIterator](): AsyncIterator<T>;
12
+ result(): Promise<R>;
13
+ }
14
+ export declare class AssistantMessageEventStream extends EventStream<AssistantMessageEvent, NativeAssistantMessage> {
15
+ }
16
+ //# sourceMappingURL=event-stream.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"event-stream.d.ts","sourceRoot":"","sources":["../../src/utils/event-stream.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,sBAAsB,EAAE,qBAAqB,EAAE,MAAM,UAAU,CAAC;AAGzE,qBAAa,WAAW,CAAC,CAAC,EAAE,CAAC,GAAG,CAAC,CAAE,YAAW,aAAa,CAAC,CAAC,CAAC;IAC7D,OAAO,CAAC,KAAK,CAAW;IACxB,OAAO,CAAC,OAAO,CAA8C;IAC7D,OAAO,CAAC,IAAI,CAAS;IACrB,OAAO,CAAC,kBAAkB,CAAa;IACvC,OAAO,CAAC,kBAAkB,CAAuB;;IAQjD,IAAI,CAAC,KAAK,EAAE,CAAC,GAAG,IAAI;IAYpB,GAAG,CAAC,MAAM,EAAE,CAAC,GAAG,IAAI;IAYb,CAAC,MAAM,CAAC,aAAa,CAAC,IAAI,aAAa,CAAC,CAAC,CAAC;IAcjD,MAAM,IAAI,OAAO,CAAC,CAAC,CAAC;CAGpB;AAED,qBAAa,2BAA4B,SAAQ,WAAW,CAAC,qBAAqB,EAAE,sBAAsB,CAAC;CAAG"}
@@ -0,0 +1,61 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.AssistantMessageEventStream = exports.EventStream = void 0;
4
+ // Generic event stream class for async iteration
5
+ class EventStream {
6
+ constructor() {
7
+ this.queue = [];
8
+ this.waiting = [];
9
+ this.done = false;
10
+ this.finalResultPromise = new Promise((resolve) => {
11
+ this.resolveFinalResult = resolve;
12
+ });
13
+ }
14
+ push(event) {
15
+ if (this.done)
16
+ return;
17
+ // Deliver to waiting consumer or queue it
18
+ const waiter = this.waiting.shift();
19
+ if (waiter) {
20
+ waiter({ value: event, done: false });
21
+ }
22
+ else {
23
+ this.queue.push(event);
24
+ }
25
+ }
26
+ end(result) {
27
+ this.done = true;
28
+ // Always resolve the final result to prevent deadlock
29
+ this.resolveFinalResult(result);
30
+ // Notify all waiting consumers that we're done
31
+ while (this.waiting.length > 0) {
32
+ const waiter = this.waiting.shift();
33
+ // When done is true, value type is the return type (void for async generators)
34
+ waiter({ done: true, value: undefined });
35
+ }
36
+ }
37
+ async *[Symbol.asyncIterator]() {
38
+ while (true) {
39
+ if (this.queue.length > 0) {
40
+ yield this.queue.shift();
41
+ }
42
+ else if (this.done) {
43
+ return;
44
+ }
45
+ else {
46
+ const result = await new Promise((resolve) => this.waiting.push(resolve));
47
+ if (result.done)
48
+ return;
49
+ yield result.value;
50
+ }
51
+ }
52
+ }
53
+ result() {
54
+ return this.finalResultPromise;
55
+ }
56
+ }
57
+ exports.EventStream = EventStream;
58
+ class AssistantMessageEventStream extends EventStream {
59
+ }
60
+ exports.AssistantMessageEventStream = AssistantMessageEventStream;
61
+ //# sourceMappingURL=event-stream.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"event-stream.js","sourceRoot":"","sources":["../../src/utils/event-stream.ts"],"names":[],"mappings":";;;AAEA,iDAAiD;AACjD,MAAa,WAAW;IAOvB;QANQ,UAAK,GAAQ,EAAE,CAAC;QAChB,YAAO,GAA2C,EAAE,CAAC;QACrD,SAAI,GAAG,KAAK,CAAC;QAKpB,IAAI,CAAC,kBAAkB,GAAG,IAAI,OAAO,CAAC,CAAC,OAAO,EAAE,EAAE;YACjD,IAAI,CAAC,kBAAkB,GAAG,OAAO,CAAC;QACnC,CAAC,CAAC,CAAC;IACJ,CAAC;IAED,IAAI,CAAC,KAAQ;QACZ,IAAI,IAAI,CAAC,IAAI;YAAE,OAAO;QAEtB,0CAA0C;QAC1C,MAAM,MAAM,GAAG,IAAI,CAAC,OAAO,CAAC,KAAK,EAAE,CAAC;QACpC,IAAI,MAAM,EAAE,CAAC;YACZ,MAAM,CAAC,EAAE,KAAK,EAAE,KAAK,EAAE,IAAI,EAAE,KAAK,EAAE,CAAC,CAAC;QACvC,CAAC;aAAM,CAAC;YACP,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC;QACxB,CAAC;IACF,CAAC;IAED,GAAG,CAAC,MAAS;QACZ,IAAI,CAAC,IAAI,GAAG,IAAI,CAAC;QACjB,sDAAsD;QACtD,IAAI,CAAC,kBAAkB,CAAC,MAAM,CAAC,CAAC;QAChC,+CAA+C;QAC/C,OAAO,IAAI,CAAC,OAAO,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;YAChC,MAAM,MAAM,GAAG,IAAI,CAAC,OAAO,CAAC,KAAK,EAAG,CAAC;YACrC,+EAA+E;YAC/E,MAAM,CAAC,EAAE,IAAI,EAAE,IAAI,EAAE,KAAK,EAAE,SAAU,EAAE,CAAC,CAAC;QAC3C,CAAC;IACF,CAAC;IAED,KAAK,CAAC,CAAC,CAAC,MAAM,CAAC,aAAa,CAAC;QAC5B,OAAO,IAAI,EAAE,CAAC;YACb,IAAI,IAAI,CAAC,KAAK,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;gBAC3B,MAAM,IAAI,CAAC,KAAK,CAAC,KAAK,EAAG,CAAC;YAC3B,CAAC;iBAAM,IAAI,IAAI,CAAC,IAAI,EAAE,CAAC;gBACtB,OAAO;YACR,CAAC;iBAAM,CAAC;gBACP,MAAM,MAAM,GAAG,MAAM,IAAI,OAAO,CAAoB,CAAC,OAAO,EAAE,EAAE,CAAC,IAAI,CAAC,OAAO,CAAC,IAAI,CAAC,OAAO,CAAC,CAAC,CAAC;gBAC7F,IAAI,MAAM,CAAC,IAAI;oBAAE,OAAO;gBACxB,MAAM,MAAM,CAAC,KAAK,CAAC;YACpB,CAAC;QACF,CAAC;IACF,CAAC;IAED,MAAM;QACL,OAAO,IAAI,CAAC,kBAAkB,CAAC;IAChC,CAAC;CACD;AAtDD,kCAsDC;AAED,MAAa,2BAA4B,SAAQ,WAA0D;CAAG;AAA9G,kEAA8G"}
@@ -0,0 +1,9 @@
1
+ /**
2
+ * Attempts to parse potentially incomplete JSON during streaming.
3
+ * Always returns a valid object, even if the JSON is incomplete.
4
+ *
5
+ * @param partialJson The partial JSON string from streaming
6
+ * @returns Parsed object or empty object if parsing fails
7
+ */
8
+ export declare function parseStreamingJson<T = any>(partialJson: string | undefined): T;
9
+ //# sourceMappingURL=json-parse.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"json-parse.d.ts","sourceRoot":"","sources":["../../src/utils/json-parse.ts"],"names":[],"mappings":"AAEA;;;;;;GAMG;AACH,wBAAgB,kBAAkB,CAAC,CAAC,GAAG,GAAG,EAAE,WAAW,EAAE,MAAM,GAAG,SAAS,GAAG,CAAC,CAkB9E"}
@@ -0,0 +1,32 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.parseStreamingJson = parseStreamingJson;
4
+ const partial_json_1 = require("partial-json");
5
+ /**
6
+ * Attempts to parse potentially incomplete JSON during streaming.
7
+ * Always returns a valid object, even if the JSON is incomplete.
8
+ *
9
+ * @param partialJson The partial JSON string from streaming
10
+ * @returns Parsed object or empty object if parsing fails
11
+ */
12
+ function parseStreamingJson(partialJson) {
13
+ if (!partialJson || partialJson.trim() === "") {
14
+ return {};
15
+ }
16
+ // Try standard parsing first (fastest for complete JSON)
17
+ try {
18
+ return JSON.parse(partialJson);
19
+ }
20
+ catch {
21
+ // Try partial-json for incomplete JSON
22
+ try {
23
+ const result = (0, partial_json_1.parse)(partialJson);
24
+ return (result ?? {});
25
+ }
26
+ catch {
27
+ // If all parsing fails, return empty object
28
+ return {};
29
+ }
30
+ }
31
+ }
32
+ //# sourceMappingURL=json-parse.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"json-parse.js","sourceRoot":"","sources":["../../src/utils/json-parse.ts"],"names":[],"mappings":";;AASA,gDAkBC;AA3BD,+CAAqD;AAErD;;;;;;GAMG;AACH,SAAgB,kBAAkB,CAAU,WAA+B;IAC1E,IAAI,CAAC,WAAW,IAAI,WAAW,CAAC,IAAI,EAAE,KAAK,EAAE,EAAE,CAAC;QAC/C,OAAO,EAAO,CAAC;IAChB,CAAC;IAED,yDAAyD;IACzD,IAAI,CAAC;QACJ,OAAO,IAAI,CAAC,KAAK,CAAC,WAAW,CAAM,CAAC;IACrC,CAAC;IAAC,MAAM,CAAC;QACR,uCAAuC;QACvC,IAAI,CAAC;YACJ,MAAM,MAAM,GAAG,IAAA,oBAAY,EAAC,WAAW,CAAC,CAAC;YACzC,OAAO,CAAC,MAAM,IAAI,EAAE,CAAM,CAAC;QAC5B,CAAC;QAAC,MAAM,CAAC;YACR,4CAA4C;YAC5C,OAAO,EAAO,CAAC;QAChB,CAAC;IACF,CAAC;AACF,CAAC"}
@@ -0,0 +1,22 @@
1
+ /**
2
+ * Removes unpaired Unicode surrogate characters from a string.
3
+ *
4
+ * Unpaired surrogates (high surrogates 0xD800-0xDBFF without matching low surrogates 0xDC00-0xDFFF,
5
+ * or vice versa) cause JSON serialization errors in many API providers.
6
+ *
7
+ * Valid emoji and other characters outside the Basic Multilingual Plane use properly paired
8
+ * surrogates and will NOT be affected by this function.
9
+ *
10
+ * @param text - The text to sanitize
11
+ * @returns The sanitized text with unpaired surrogates removed
12
+ *
13
+ * @example
14
+ * // Valid emoji (properly paired surrogates) are preserved
15
+ * sanitizeSurrogates("Hello 🙈 World") // => "Hello 🙈 World"
16
+ *
17
+ * // Unpaired high surrogate is removed
18
+ * const unpaired = String.fromCharCode(0xD83D); // high surrogate without low
19
+ * sanitizeSurrogates(`Text ${unpaired} here`) // => "Text here"
20
+ */
21
+ export declare function sanitizeSurrogates(text: string): string;
22
+ //# sourceMappingURL=sanitize-unicode.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"sanitize-unicode.d.ts","sourceRoot":"","sources":["../../src/utils/sanitize-unicode.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;GAmBG;AACH,wBAAgB,kBAAkB,CAAC,IAAI,EAAE,MAAM,GAAG,MAAM,CAIvD"}
@@ -0,0 +1,29 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.sanitizeSurrogates = sanitizeSurrogates;
4
+ /**
5
+ * Removes unpaired Unicode surrogate characters from a string.
6
+ *
7
+ * Unpaired surrogates (high surrogates 0xD800-0xDBFF without matching low surrogates 0xDC00-0xDFFF,
8
+ * or vice versa) cause JSON serialization errors in many API providers.
9
+ *
10
+ * Valid emoji and other characters outside the Basic Multilingual Plane use properly paired
11
+ * surrogates and will NOT be affected by this function.
12
+ *
13
+ * @param text - The text to sanitize
14
+ * @returns The sanitized text with unpaired surrogates removed
15
+ *
16
+ * @example
17
+ * // Valid emoji (properly paired surrogates) are preserved
18
+ * sanitizeSurrogates("Hello 🙈 World") // => "Hello 🙈 World"
19
+ *
20
+ * // Unpaired high surrogate is removed
21
+ * const unpaired = String.fromCharCode(0xD83D); // high surrogate without low
22
+ * sanitizeSurrogates(`Text ${unpaired} here`) // => "Text here"
23
+ */
24
+ function sanitizeSurrogates(text) {
25
+ // Replace unpaired high surrogates (0xD800-0xDBFF not followed by low surrogate)
26
+ // Replace unpaired low surrogates (0xDC00-0xDFFF not preceded by high surrogate)
27
+ return text.replace(/[\uD800-\uDBFF](?![\uDC00-\uDFFF])|(?<![\uD800-\uDBFF])[\uDC00-\uDFFF]/g, "");
28
+ }
29
+ //# sourceMappingURL=sanitize-unicode.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"sanitize-unicode.js","sourceRoot":"","sources":["../../src/utils/sanitize-unicode.ts"],"names":[],"mappings":";;AAoBA,gDAIC;AAxBD;;;;;;;;;;;;;;;;;;;GAmBG;AACH,SAAgB,kBAAkB,CAAC,IAAY;IAC9C,iFAAiF;IACjF,iFAAiF;IACjF,OAAO,IAAI,CAAC,OAAO,CAAC,yEAAyE,EAAE,EAAE,CAAC,CAAC;AACpG,CAAC"}
@@ -0,0 +1,11 @@
1
+ import type { Tool, AssistantToolCall } from "../types.js";
2
+ import type { TSchema, Static } from "@sinclair/typebox";
3
+ /**
4
+ * Validates tool call arguments against the tool's TypeBox schema
5
+ * @param tool The tool definition with TypeBox schema
6
+ * @param toolCall The tool call from the LLM
7
+ * @returns The validated arguments with proper typing
8
+ * @throws Error with formatted message if validation fails
9
+ */
10
+ export declare function validateToolArguments<TParameters extends TSchema>(tool: Tool<TParameters>, toolCall: AssistantToolCall): Static<TParameters>;
11
+ //# sourceMappingURL=validation.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"validation.d.ts","sourceRoot":"","sources":["../../src/utils/validation.ts"],"names":[],"mappings":"AAOA,OAAO,KAAK,EAAE,IAAI,EAAE,iBAAiB,EAAE,MAAM,aAAa,CAAC;AAC3D,OAAO,KAAK,EAAE,OAAO,EAAE,MAAM,EAAE,MAAM,mBAAmB,CAAC;AAsBzD;;;;;;GAMG;AACH,wBAAgB,qBAAqB,CAAC,WAAW,SAAS,OAAO,EAChE,IAAI,EAAE,IAAI,CAAC,WAAW,CAAC,EACvB,QAAQ,EAAE,iBAAiB,GACzB,MAAM,CAAC,WAAW,CAAC,CA4BrB"}
@@ -0,0 +1,61 @@
1
+ "use strict";
2
+ var __importDefault = (this && this.__importDefault) || function (mod) {
3
+ return (mod && mod.__esModule) ? mod : { "default": mod };
4
+ };
5
+ Object.defineProperty(exports, "__esModule", { value: true });
6
+ exports.validateToolArguments = validateToolArguments;
7
+ const ajv_1 = __importDefault(require("ajv"));
8
+ const ajv_formats_1 = __importDefault(require("ajv-formats"));
9
+ // Handle both default and named exports
10
+ const Ajv = ajv_1.default.default || ajv_1.default;
11
+ const addFormats = ajv_formats_1.default.default || ajv_formats_1.default;
12
+ // Detect if we're in a browser extension environment with strict CSP
13
+ // Chrome extensions with Manifest V3 don't allow eval/Function constructor
14
+ const isBrowserExtension = typeof globalThis !== "undefined" && globalThis.chrome?.runtime?.id !== undefined;
15
+ // Create a singleton AJV instance with formats (only if not in browser extension)
16
+ // AJV requires 'unsafe-eval' CSP which is not allowed in Manifest V3
17
+ let ajv = null;
18
+ if (!isBrowserExtension) {
19
+ try {
20
+ ajv = new Ajv({
21
+ allErrors: true,
22
+ strict: false,
23
+ });
24
+ addFormats(ajv);
25
+ }
26
+ catch (e) {
27
+ // AJV initialization failed (likely CSP restriction)
28
+ console.warn("AJV validation disabled due to CSP restrictions");
29
+ }
30
+ }
31
+ /**
32
+ * Validates tool call arguments against the tool's TypeBox schema
33
+ * @param tool The tool definition with TypeBox schema
34
+ * @param toolCall The tool call from the LLM
35
+ * @returns The validated arguments with proper typing
36
+ * @throws Error with formatted message if validation fails
37
+ */
38
+ function validateToolArguments(tool, toolCall) {
39
+ // Skip validation in browser extension environment (CSP restrictions prevent AJV from working)
40
+ if (!ajv || isBrowserExtension) {
41
+ // Trust the LLM's output without validation
42
+ // Browser extensions can't use AJV due to Manifest V3 CSP restrictions
43
+ return toolCall.arguments;
44
+ }
45
+ // Compile the schema
46
+ const validate = ajv.compile(tool.parameters);
47
+ // Validate the arguments
48
+ if (validate(toolCall.arguments)) {
49
+ return toolCall.arguments;
50
+ }
51
+ // Format validation errors nicely
52
+ const errors = validate.errors
53
+ ?.map((err) => {
54
+ const path = err.instancePath ? err.instancePath.substring(1) : err.params.missingProperty || "root";
55
+ return ` - ${path}: ${err.message}`;
56
+ })
57
+ .join("\n") || "Unknown validation error";
58
+ const errorMessage = `Validation failed for tool "${toolCall.name}":\n${errors}\n\nReceived arguments:\n${JSON.stringify(toolCall.arguments, null, 2)}`;
59
+ throw new Error(errorMessage);
60
+ }
61
+ //# sourceMappingURL=validation.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"validation.js","sourceRoot":"","sources":["../../src/utils/validation.ts"],"names":[],"mappings":";;;;;AAqCA,sDA+BC;AApED,8CAA4B;AAC5B,8DAA2C;AAE3C,wCAAwC;AACxC,MAAM,GAAG,GAAI,aAAiB,CAAC,OAAO,IAAI,aAAS,CAAC;AACpD,MAAM,UAAU,GAAI,qBAAwB,CAAC,OAAO,IAAI,qBAAgB,CAAC;AAKzE,qEAAqE;AACrE,2EAA2E;AAC3E,MAAM,kBAAkB,GAAG,OAAO,UAAU,KAAK,WAAW,IAAK,UAAkB,CAAC,MAAM,EAAE,OAAO,EAAE,EAAE,KAAK,SAAS,CAAC;AAEtH,kFAAkF;AAClF,qEAAqE;AACrE,IAAI,GAAG,GAAQ,IAAI,CAAC;AACpB,IAAI,CAAC,kBAAkB,EAAE,CAAC;IACzB,IAAI,CAAC;QACJ,GAAG,GAAG,IAAI,GAAG,CAAC;YACb,SAAS,EAAE,IAAI;YACf,MAAM,EAAE,KAAK;SACb,CAAC,CAAC;QACH,UAAU,CAAC,GAAG,CAAC,CAAC;IACjB,CAAC;IAAC,OAAO,CAAC,EAAE,CAAC;QACZ,qDAAqD;QACrD,OAAO,CAAC,IAAI,CAAC,iDAAiD,CAAC,CAAC;IACjE,CAAC;AACF,CAAC;AAED;;;;;;GAMG;AACH,SAAgB,qBAAqB,CACpC,IAAuB,EACvB,QAA2B;IAE3B,+FAA+F;IAC/F,IAAI,CAAC,GAAG,IAAI,kBAAkB,EAAE,CAAC;QAChC,4CAA4C;QAC5C,uEAAuE;QACvE,OAAO,QAAQ,CAAC,SAAgC,CAAC;IAClD,CAAC;IAED,qBAAqB;IACrB,MAAM,QAAQ,GAAG,GAAG,CAAC,OAAO,CAAC,IAAI,CAAC,UAAU,CAAC,CAAC;IAE9C,yBAAyB;IACzB,IAAI,QAAQ,CAAC,QAAQ,CAAC,SAAS,CAAC,EAAE,CAAC;QAClC,OAAO,QAAQ,CAAC,SAAgC,CAAC;IAClD,CAAC;IAED,kCAAkC;IAClC,MAAM,MAAM,GACX,QAAQ,CAAC,MAAM;QACd,EAAE,GAAG,CAAC,CAAC,GAAQ,EAAE,EAAE;QAClB,MAAM,IAAI,GAAG,GAAG,CAAC,YAAY,CAAC,CAAC,CAAC,GAAG,CAAC,YAAY,CAAC,SAAS,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,MAAM,CAAC,eAAe,IAAI,MAAM,CAAC;QACrG,OAAO,OAAO,IAAI,KAAK,GAAG,CAAC,OAAO,EAAE,CAAC;IACtC,CAAC,CAAC;SACD,IAAI,CAAC,IAAI,CAAC,IAAI,0BAA0B,CAAC;IAE5C,MAAM,YAAY,GAAG,+BAA+B,QAAQ,CAAC,IAAI,OAAO,MAAM,4BAA4B,IAAI,CAAC,SAAS,CAAC,QAAQ,CAAC,SAAS,EAAE,IAAI,EAAE,CAAC,CAAC,EAAE,CAAC;IAExJ,MAAM,IAAI,KAAK,CAAC,YAAY,CAAC,CAAC;AAC/B,CAAC"}
package/package.json ADDED
@@ -0,0 +1,33 @@
1
+ {
2
+ "name": "@ank1015/providers",
3
+ "version": "0.0.1",
4
+ "description": "LLM providers",
5
+ "main": "dist/index.js",
6
+ "types": "dist/index.d.ts",
7
+ "scripts": {
8
+ "build": "tsc",
9
+ "dev": "tsc --watch",
10
+ "start": "node dist/index.js",
11
+ "clean": "rm -rf dist",
12
+ "check": "biome check --write . && tsc --noEmit",
13
+ "test": "vitest --run"
14
+ },
15
+ "keywords": [],
16
+ "author": "",
17
+ "license": "MIT",
18
+ "dependencies": {
19
+ "@anthropic-ai/sdk": "^0.71.0",
20
+ "@biomejs/biome": "^2.3.8",
21
+ "@google/genai": "^1.30.0",
22
+ "@sinclair/typebox": "^0.34.41",
23
+ "ajv": "^8.17.1",
24
+ "ajv-formats": "^3.0.1",
25
+ "openai": "^6.9.1",
26
+ "partial-json": "^0.1.7",
27
+ "typescript": "^5.9.3"
28
+ },
29
+ "devDependencies": {
30
+ "@types/node": "^24.10.1",
31
+ "vitest": "^4.0.14"
32
+ }
33
+ }