@threaded/ai 1.0.29 → 1.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 (112) hide show
  1. package/README.md +240 -0
  2. package/dist/approval.d.ts +18 -0
  3. package/dist/approval.d.ts.map +1 -0
  4. package/dist/approval.js +35 -0
  5. package/dist/approval.js.map +1 -0
  6. package/dist/composition/compose.d.ts +3 -0
  7. package/dist/composition/compose.d.ts.map +1 -0
  8. package/dist/composition/compose.js +38 -0
  9. package/dist/composition/compose.js.map +1 -0
  10. package/dist/composition/model.d.ts +9 -0
  11. package/dist/composition/model.d.ts.map +1 -0
  12. package/dist/composition/model.js +192 -0
  13. package/dist/composition/model.js.map +1 -0
  14. package/dist/composition/retry.d.ts +6 -0
  15. package/dist/composition/retry.d.ts.map +1 -0
  16. package/dist/composition/retry.js +18 -0
  17. package/dist/composition/retry.js.map +1 -0
  18. package/dist/composition/scope.d.ts +3 -0
  19. package/dist/composition/scope.d.ts.map +1 -0
  20. package/dist/composition/scope.js +83 -0
  21. package/dist/composition/scope.js.map +1 -0
  22. package/dist/composition/tap.d.ts +3 -0
  23. package/dist/composition/tap.d.ts.map +1 -0
  24. package/dist/composition/tap.js +7 -0
  25. package/dist/composition/tap.js.map +1 -0
  26. package/dist/composition/when.d.ts +3 -0
  27. package/dist/composition/when.d.ts.map +1 -0
  28. package/dist/composition/when.js +9 -0
  29. package/dist/composition/when.js.map +1 -0
  30. package/dist/embed.d.ts +16 -0
  31. package/dist/embed.d.ts.map +1 -0
  32. package/dist/embed.js +72 -0
  33. package/dist/embed.js.map +1 -0
  34. package/dist/examples.d.ts +2 -0
  35. package/dist/examples.d.ts.map +1 -0
  36. package/dist/examples.js +6 -0
  37. package/dist/examples.js.map +1 -0
  38. package/dist/helpers.d.ts +17 -0
  39. package/dist/helpers.d.ts.map +1 -0
  40. package/dist/helpers.js +104 -0
  41. package/dist/helpers.js.map +1 -0
  42. package/dist/image-model-schema.d.ts +19 -0
  43. package/dist/image-model-schema.d.ts.map +1 -0
  44. package/dist/image-model-schema.js +103 -0
  45. package/dist/image-model-schema.js.map +1 -0
  46. package/dist/image.d.ts +3 -0
  47. package/dist/image.d.ts.map +1 -0
  48. package/dist/image.js +120 -0
  49. package/dist/image.js.map +1 -0
  50. package/dist/index.d.ts +18 -350
  51. package/dist/index.d.ts.map +1 -0
  52. package/dist/index.js +17 -2061
  53. package/dist/index.js.map +1 -1
  54. package/dist/mcp.d.ts +3 -0
  55. package/dist/mcp.d.ts.map +1 -0
  56. package/dist/mcp.js +29 -0
  57. package/dist/mcp.js.map +1 -0
  58. package/dist/providers/anthropic.d.ts +3 -0
  59. package/dist/providers/anthropic.d.ts.map +1 -0
  60. package/dist/providers/anthropic.js +226 -0
  61. package/dist/providers/anthropic.js.map +1 -0
  62. package/dist/providers/google.d.ts +3 -0
  63. package/dist/providers/google.d.ts.map +1 -0
  64. package/dist/providers/google.js +244 -0
  65. package/dist/providers/google.js.map +1 -0
  66. package/dist/providers/huggingface.d.ts +3 -0
  67. package/dist/providers/huggingface.d.ts.map +1 -0
  68. package/dist/providers/huggingface.js +59 -0
  69. package/dist/providers/huggingface.js.map +1 -0
  70. package/dist/providers/index.d.ts +3 -0
  71. package/dist/providers/index.d.ts.map +1 -0
  72. package/dist/providers/index.js +29 -0
  73. package/dist/providers/index.js.map +1 -0
  74. package/dist/providers/local.d.ts +3 -0
  75. package/dist/providers/local.d.ts.map +1 -0
  76. package/dist/providers/local.js +152 -0
  77. package/dist/providers/local.js.map +1 -0
  78. package/dist/providers/openai.d.ts +3 -0
  79. package/dist/providers/openai.d.ts.map +1 -0
  80. package/dist/providers/openai.js +165 -0
  81. package/dist/providers/openai.js.map +1 -0
  82. package/dist/providers/xai.d.ts +3 -0
  83. package/dist/providers/xai.d.ts.map +1 -0
  84. package/dist/providers/xai.js +161 -0
  85. package/dist/providers/xai.js.map +1 -0
  86. package/dist/schema.d.ts +7 -0
  87. package/dist/schema.d.ts.map +1 -0
  88. package/dist/schema.js +44 -0
  89. package/dist/schema.js.map +1 -0
  90. package/dist/thread.d.ts +25 -0
  91. package/dist/thread.d.ts.map +1 -0
  92. package/dist/thread.js +87 -0
  93. package/dist/thread.js.map +1 -0
  94. package/dist/types.d.ts +193 -0
  95. package/dist/types.d.ts.map +1 -0
  96. package/dist/types.js +8 -0
  97. package/dist/types.js.map +1 -0
  98. package/dist/utils/rateLimited.d.ts +27 -0
  99. package/dist/utils/rateLimited.d.ts.map +1 -0
  100. package/dist/utils/rateLimited.js +74 -0
  101. package/dist/utils/rateLimited.js.map +1 -0
  102. package/dist/utils.d.ts +8 -0
  103. package/dist/utils.d.ts.map +1 -0
  104. package/dist/utils.js +78 -0
  105. package/dist/utils.js.map +1 -0
  106. package/package.json +34 -12
  107. package/.claude/settings.local.json +0 -15
  108. package/.lore +0 -65
  109. package/dist/index.cjs +0 -2137
  110. package/dist/index.cjs.map +0 -1
  111. package/dist/index.d.cts +0 -350
  112. package/tsconfig.json +0 -29
package/dist/image.js ADDED
@@ -0,0 +1,120 @@
1
+ import { getKey, parseModelName } from "./utils";
2
+ const providerKeyEnvVars = {
3
+ openai: "OPENAI_API_KEY",
4
+ xai: "XAI_API_KEY",
5
+ google: "GEMINI_API_KEY",
6
+ };
7
+ const getApiKey = (provider) => {
8
+ try {
9
+ return getKey(provider);
10
+ }
11
+ catch {
12
+ const envVar = providerKeyEnvVars[provider];
13
+ const key = envVar ? process.env[envVar] || "" : "";
14
+ if (!key)
15
+ throw new Error(`No API key found for provider: ${provider}`);
16
+ return key;
17
+ }
18
+ };
19
+ const generateOpenAICompatible = async (endpoint, modelName, prompt, apiKey, config) => {
20
+ const isGptImage = modelName.startsWith("gpt-image");
21
+ const body = {
22
+ model: modelName,
23
+ prompt,
24
+ };
25
+ if (!isGptImage) {
26
+ body.response_format = config?.responseFormat || "b64_json";
27
+ }
28
+ if (config?.n)
29
+ body.n = config.n;
30
+ if (config?.size)
31
+ body.size = config.size;
32
+ if (config?.quality)
33
+ body.quality = config.quality;
34
+ if (config?.style && !isGptImage)
35
+ body.style = config.style;
36
+ if (isGptImage) {
37
+ if (config?.outputFormat)
38
+ body.output_format = config.outputFormat;
39
+ if (config?.outputCompression != null)
40
+ body.output_compression = config.outputCompression;
41
+ if (config?.background)
42
+ body.background = config.background;
43
+ if (config?.moderation)
44
+ body.moderation = config.moderation;
45
+ }
46
+ const response = await fetch(endpoint, {
47
+ method: "POST",
48
+ headers: {
49
+ "Content-Type": "application/json",
50
+ Authorization: `Bearer ${apiKey}`,
51
+ },
52
+ body: JSON.stringify(body),
53
+ });
54
+ if (!response.ok) {
55
+ const error = await response.text();
56
+ throw new Error(`API error: ${error}`);
57
+ }
58
+ const data = (await response.json());
59
+ const image = data.data[0];
60
+ return {
61
+ data: image.b64_json || image.url,
62
+ revisedPrompt: image.revised_prompt,
63
+ };
64
+ };
65
+ const generateGoogle = async (modelName, prompt, apiKey, config) => {
66
+ const endpoint = `https://generativelanguage.googleapis.com/v1beta/models/${modelName}:generateContent`;
67
+ const body = {
68
+ contents: [{ parts: [{ text: prompt }] }],
69
+ generationConfig: {
70
+ responseModalities: ["TEXT", "IMAGE"],
71
+ },
72
+ };
73
+ const imageConfig = {};
74
+ if (config?.aspectRatio)
75
+ imageConfig.aspectRatio = config.aspectRatio;
76
+ if (config?.imageSize)
77
+ imageConfig.imageSize = config.imageSize;
78
+ if (Object.keys(imageConfig).length > 0) {
79
+ body.generationConfig.imageConfig = imageConfig;
80
+ }
81
+ const response = await fetch(endpoint, {
82
+ method: "POST",
83
+ headers: {
84
+ "Content-Type": "application/json",
85
+ "x-goog-api-key": apiKey,
86
+ },
87
+ body: JSON.stringify(body),
88
+ });
89
+ if (!response.ok) {
90
+ const error = await response.text();
91
+ throw new Error(`Google API error: ${error}`);
92
+ }
93
+ const data = (await response.json());
94
+ const parts = data.candidates?.[0]?.content?.parts || [];
95
+ const imagePart = parts.find((p) => p.inlineData);
96
+ const textPart = parts.find((p) => p.text);
97
+ if (!imagePart?.inlineData?.data) {
98
+ throw new Error("No image data in response");
99
+ }
100
+ return {
101
+ data: imagePart.inlineData.data,
102
+ revisedPrompt: textPart?.text,
103
+ };
104
+ };
105
+ export const generateImage = async (model, prompt, config) => {
106
+ const { provider, model: modelName } = parseModelName(model);
107
+ const providerLower = provider.toLowerCase();
108
+ const apiKey = getApiKey(providerLower);
109
+ switch (providerLower) {
110
+ case "openai":
111
+ return generateOpenAICompatible("https://api.openai.com/v1/images/generations", modelName, prompt, apiKey, config);
112
+ case "xai":
113
+ return generateOpenAICompatible("https://api.x.ai/v1/images/generations", modelName, prompt, apiKey, config);
114
+ case "google":
115
+ return generateGoogle(modelName, prompt, apiKey, config);
116
+ default:
117
+ throw new Error(`Unsupported image generation provider: ${provider}`);
118
+ }
119
+ };
120
+ //# sourceMappingURL=image.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"image.js","sourceRoot":"","sources":["../src/image.ts"],"names":[],"mappings":"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"}
package/dist/index.d.ts CHANGED
@@ -1,350 +1,18 @@
1
- import { Client } from '@modelcontextprotocol/sdk/client/index';
2
-
3
- interface Message {
4
- role: "system" | "user" | "assistant" | "tool";
5
- content: string;
6
- tool_call_id?: string;
7
- }
8
- interface ToolCall {
9
- id: string;
10
- function: {
11
- name: string;
12
- arguments: string;
13
- };
14
- }
15
- interface ToolCallResult {
16
- name: string;
17
- inputs: any;
18
- results: any;
19
- }
20
- interface ToolDefinition {
21
- type: "function";
22
- function: {
23
- name: string;
24
- description: string;
25
- parameters: {
26
- type: string;
27
- properties: Record<string, any>;
28
- required?: string[];
29
- };
30
- };
31
- }
32
- interface ToolConfig {
33
- name: string;
34
- description: string;
35
- schema: Record<string, SchemaProperty> | StandardSchema;
36
- execute: (args: any) => Promise<any> | any;
37
- _maxCalls?: number;
38
- }
39
- interface SchemaProperty {
40
- type: "string" | "number" | "boolean" | "array" | "object";
41
- description?: string;
42
- enum?: string[];
43
- optional?: boolean;
44
- items?: SchemaProperty;
45
- properties?: Record<string, SchemaProperty>;
46
- }
47
- interface ToolExecutionConfig {
48
- /** require user approval before executing tools */
49
- requireApproval?: boolean;
50
- /**
51
- * custom callback to handle tool approval, return true to approve
52
- *
53
- * @example
54
- * // simple callback
55
- * approvalCallback: (call) => call.function.name !== 'dangerousTool'
56
- *
57
- * @example
58
- * // event-driven (SSE): server sends approval request, waits for client POST
59
- * approvalCallback: (call) => new Promise((resolve) => {
60
- * pendingApprovals.set(call.id, resolve);
61
- * res.write(`data: ${JSON.stringify({ type: 'approval_needed', call })}\n\n`);
62
- * })
63
- * // then: app.post('/approve/:id', (req) => pendingApprovals.get(id)(req.body.approved))
64
- */
65
- approvalCallback?: (call: ToolCall) => boolean | Promise<boolean>;
66
- /** execute tools in parallel instead of sequentially */
67
- parallel?: boolean;
68
- /** number of times to retry failed tool executions */
69
- retryCount?: number;
70
- /** identifier for approval requests, useful for managing multiple approval flows */
71
- approvalId?: string;
72
- /** execute tools immediately upon approval instead of waiting for all approvals (default: false, only applies when requireApproval is true) */
73
- executeOnApproval?: boolean;
74
- }
75
- type StreamEvent = {
76
- type: 'content';
77
- content: string;
78
- } | {
79
- type: 'tool_calls_ready';
80
- calls: ToolCall[];
81
- } | {
82
- type: 'tool_executing';
83
- call: ToolCall;
84
- } | {
85
- type: 'tool_complete';
86
- call: ToolCall;
87
- result: any;
88
- } | {
89
- type: 'tool_error';
90
- call: ToolCall;
91
- error: string;
92
- } | {
93
- type: 'approval_requested';
94
- call: ToolCall;
95
- requestId: string;
96
- } | {
97
- type: 'usage';
98
- usage: TokenUsage;
99
- };
100
- interface ConversationContext {
101
- history: Message[];
102
- lastRequest?: Message;
103
- lastResponse?: Message & {
104
- tool_calls?: ToolCall[];
105
- };
106
- tools?: ToolDefinition[];
107
- toolExecutors?: Record<string, Function>;
108
- stream?: (event: StreamEvent) => void;
109
- stopReason?: string;
110
- toolCallCounts?: Record<string, number>;
111
- toolLimits?: Record<string, number>;
112
- toolConfig?: ToolExecutionConfig;
113
- abortSignal?: AbortSignal;
114
- usage?: TokenUsage;
115
- }
116
- declare enum Inherit {
117
- Nothing = 0,
118
- Conversation = 1,
119
- Tools = 2,
120
- All = 3
121
- }
122
- interface ScopeConfig {
123
- inherit?: number;
124
- tools?: ToolConfig[];
125
- toolConfig?: ToolExecutionConfig;
126
- system?: string;
127
- silent?: boolean;
128
- until?: (ctx: ConversationContext) => boolean;
129
- stream?: (event: StreamEvent) => void;
130
- }
131
- type StepFunction = (ctx: ConversationContext) => Promise<ConversationContext>;
132
- type ComposedFunction = (ctxOrMessage: ConversationContext | string) => Promise<ConversationContext>;
133
- interface JsonSchema {
134
- name: string;
135
- schema: Record<string, any>;
136
- }
137
- interface StandardSchema {
138
- "~standard": any;
139
- [key: string]: any;
140
- }
141
- interface ProviderConfig {
142
- model: string;
143
- instructions?: string;
144
- schema?: JsonSchema;
145
- apiKey?: string;
146
- baseUrl?: string;
147
- }
148
- interface ParsedModel {
149
- provider: string;
150
- model: string;
151
- }
152
- interface ApiKeys {
153
- openai?: string;
154
- anthropic?: string;
155
- google?: string;
156
- [provider: string]: string | undefined;
157
- }
158
- interface ThreadStore {
159
- get(threadId: string): Promise<Message[]>;
160
- set(threadId: string, messages: Message[]): Promise<void>;
161
- }
162
- interface Thread {
163
- id: string;
164
- store: ThreadStore;
165
- generate(step: StepFunction): Promise<ConversationContext>;
166
- message(content: string, workflow?: StepFunction, options?: {
167
- abortSignal?: AbortSignal;
168
- }): Promise<ConversationContext>;
169
- }
170
- interface RetryOptions {
171
- times?: number;
172
- }
173
- interface ImageConfig {
174
- n?: number;
175
- size?: string;
176
- quality?: "standard" | "hd" | "low" | "medium" | "high" | "auto";
177
- style?: "vivid" | "natural";
178
- responseFormat?: "url" | "b64_json";
179
- aspectRatio?: string;
180
- outputFormat?: "png" | "jpeg" | "webp";
181
- outputCompression?: number;
182
- background?: "transparent" | "opaque" | "auto";
183
- moderation?: "auto" | "low";
184
- imageSize?: "1K" | "2K";
185
- }
186
- interface ImageResult {
187
- data: string;
188
- revisedPrompt?: string;
189
- }
190
- interface TokenUsage {
191
- promptTokens: number;
192
- completionTokens: number;
193
- totalTokens: number;
194
- }
195
-
196
- declare const createMCPTools: (client: Client) => Promise<ToolConfig[]>;
197
-
198
- declare const toolConfigToToolDefinition: (tool: ToolConfig) => ToolDefinition;
199
- declare const parseModelName: (model: string) => ParsedModel;
200
- declare const setKeys: (keys: ApiKeys) => void;
201
- declare const getKey: (provider: string) => string;
202
- declare const maxCalls: (toolConfig: ToolConfig, maxCalls: number) => ToolConfig;
203
- declare const addUsage: (existing: TokenUsage | undefined, promptTokens: number, completionTokens: number, totalTokens: number) => TokenUsage;
204
-
205
- /**
206
- * generates embeddings for text using openai or huggingface models
207
- *
208
- * openai models use the prefix "openai/" (e.g., "openai/text-embedding-3-small")
209
- * all other models use huggingface transformers
210
- *
211
- * @example
212
- * const vector = await embed("openai/text-embedding-3-small", "hello world");
213
- * const vector2 = await embed("Xenova/all-MiniLM-L6-v2", "hello world");
214
- */
215
- declare const embed: (model: string, text: string, config?: {
216
- dimensions?: number;
217
- }) => Promise<number[]>;
218
-
219
- declare const generateImage: (model: string, prompt: string, config?: ImageConfig) => Promise<ImageResult>;
220
-
221
- interface ConfigOption {
222
- values: string[];
223
- default: string;
224
- description: string;
225
- }
226
- interface ModelConfig {
227
- [option: string]: ConfigOption;
228
- }
229
- interface ProviderModels {
230
- [model: string]: ModelConfig;
231
- }
232
- interface ImageModelSchema {
233
- [provider: string]: ProviderModels;
234
- }
235
- declare const IMAGE_MODEL_SCHEMA: ImageModelSchema;
236
- declare const IMAGE_EDIT_MODEL_SCHEMA: ImageModelSchema;
237
- declare function getModelConfig(provider: string, model: string): ModelConfig | null;
238
- declare function getDefaultConfig(provider: string, model: string): Record<string, string>;
239
-
240
- /**
241
- * @example
242
- * // in-memory (default)
243
- * const thread = getOrCreateThread('user-123');
244
- *
245
- * @example
246
- * // sqlite
247
- * const thread = getOrCreateThread('user-123', {
248
- * async get(id) {
249
- * const row = await db.get('SELECT messages FROM threads WHERE id = ?', id);
250
- * return row ? JSON.parse(row.messages) : [];
251
- * },
252
- * async set(id, messages) {
253
- * await db.run(
254
- * 'INSERT OR REPLACE INTO threads (id, messages, updated_at) VALUES (?, ?, ?)',
255
- * id,
256
- * JSON.stringify(messages),
257
- * Date.now()
258
- * );
259
- * }
260
- * });
261
- */
262
- declare const getOrCreateThread: (id: string, store?: ThreadStore) => Thread;
263
-
264
- declare const isStandardSchema: (schema: any) => schema is StandardSchema;
265
- declare const convertStandardSchemaToJsonSchema: (standardSchema: StandardSchema, name?: string) => JsonSchema;
266
- declare const convertMCPSchemaToToolSchema: (mcpSchema: any) => Record<string, SchemaProperty>;
267
- declare function normalizeSchema(schema: JsonSchema | StandardSchema, name?: string): JsonSchema;
268
- declare const convertStandardSchemaToSchemaProperties: (standardSchema: StandardSchema) => Record<string, SchemaProperty>;
269
-
270
- /**
271
- * scope({ until: noToolsCalled() })
272
- */
273
- declare const noToolsCalled: () => (ctx: ConversationContext) => boolean;
274
- declare const everyNMessages: (n: number, step: StepFunction) => StepFunction;
275
- declare const everyNTokens: (n: number, step: StepFunction) => StepFunction;
276
- declare const appendToLastRequest: (content: string) => StepFunction;
277
- /**
278
- * toolNotUsedInNTurns({ toolName: "search_web", times: 10 }, appendToLastRequest("consider using web search..."))
279
- */
280
- declare const toolNotUsedInNTurns: ({ toolName, times }: {
281
- toolName: string;
282
- times: number;
283
- }, step: StepFunction) => StepFunction;
284
- declare const toolWasCalled: (name: string) => (ctx: ConversationContext) => boolean;
285
-
286
- interface ApprovalRequest {
287
- id: string;
288
- toolCall: ToolCall;
289
- approvalId?: string;
290
- }
291
- interface ApprovalResponse {
292
- id: string;
293
- approved: boolean;
294
- reason?: string;
295
- }
296
- declare const generateApprovalToken: () => string;
297
- declare const requestApproval: (toolCall: ToolCall, approvalId?: string) => Promise<ApprovalResponse>;
298
- declare const resolveApproval: (response: ApprovalResponse) => boolean;
299
- declare const onApprovalRequested: (listener: (request: ApprovalRequest) => void) => void;
300
- declare const onApprovalResolved: (listener: (response: ApprovalResponse) => void) => void;
301
- declare const removeApprovalListener: (event: "approvalRequested" | "approvalResolved", listener: (...args: any[]) => void) => void;
302
-
303
- declare const tap: (fn: (ctx: ConversationContext) => Promise<void> | void) => StepFunction;
304
-
305
- declare const when: (condition: (ctx: ConversationContext) => boolean, action: StepFunction) => StepFunction;
306
-
307
- declare const model: ({ model, schema, system, apiKey, baseUrl, }?: {
308
- model?: string;
309
- schema?: JsonSchema | StandardSchema;
310
- system?: string | ((ctx: ConversationContext) => string);
311
- apiKey?: string;
312
- baseUrl?: string;
313
- }) => ComposedFunction;
314
-
315
- /**
316
- * scope({}, retry({ times: 2 }, model(...)))
317
- */
318
- declare const retry: ({ times }: RetryOptions | undefined, step: StepFunction) => StepFunction;
319
-
320
- declare const scope: (config: ScopeConfig, ...steps: StepFunction[]) => StepFunction;
321
-
322
- type RateLimitConfig = {
323
- rps: number;
324
- burst: number;
325
- concurrency: number;
326
- };
327
- /**
328
- * creates a rate limiter that wraps async functions with burst, rate, and concurrency controls
329
- *
330
- * @param config - rate limit configuration
331
- * @param config.rps - maximum requests per second
332
- * @param config.burst - maximum burst size (initial token bucket capacity)
333
- * @param config.concurrency - maximum concurrent in-flight requests
334
- *
335
- * @example
336
- * const limiter = rateLimited({ rps: 10, burst: 20, concurrency: 5 });
337
- *
338
- * const workflow = limiter(
339
- * compose(
340
- * scope({ tools: [searchTool] }, model())
341
- * )
342
- * );
343
- *
344
- * await workflow("hello");
345
- */
346
- declare const rateLimited: (config: RateLimitConfig) => <T extends (...args: any[]) => Promise<any>>(fn: T) => T;
347
-
348
- declare const compose: (...steps: StepFunction[]) => ComposedFunction;
349
-
350
- export { type ApiKeys, type ApprovalRequest, type ApprovalResponse, type ComposedFunction, type ConfigOption, type ConversationContext, IMAGE_EDIT_MODEL_SCHEMA, IMAGE_MODEL_SCHEMA, type ImageConfig, type ImageModelSchema, type ImageResult, Inherit, type JsonSchema, type Message, type ModelConfig, type ParsedModel, type ProviderConfig, type ProviderModels, type RetryOptions, type SchemaProperty, type ScopeConfig, type StandardSchema, type StepFunction, type StreamEvent, type Thread, type ThreadStore, type TokenUsage, type ToolCall, type ToolCallResult, type ToolConfig, type ToolDefinition, type ToolExecutionConfig, addUsage, appendToLastRequest, compose, convertMCPSchemaToToolSchema, convertStandardSchemaToJsonSchema, convertStandardSchemaToSchemaProperties, createMCPTools, embed, everyNMessages, everyNTokens, generateApprovalToken, generateImage, getDefaultConfig, getKey, getModelConfig, getOrCreateThread, isStandardSchema, maxCalls, model, noToolsCalled, normalizeSchema, onApprovalRequested, onApprovalResolved, parseModelName, rateLimited, removeApprovalListener, requestApproval, resolveApproval, retry, scope, setKeys, tap, toolConfigToToolDefinition, toolNotUsedInNTurns, toolWasCalled, when };
1
+ export * from "./mcp";
2
+ export * from "./types";
3
+ export * from "./utils";
4
+ export * from "./embed";
5
+ export * from "./image";
6
+ export * from "./image-model-schema";
7
+ export * from "./thread";
8
+ export * from "./schema";
9
+ export * from "./helpers";
10
+ export * from "./approval";
11
+ export * from "./composition/tap";
12
+ export * from "./composition/when";
13
+ export * from "./composition/model";
14
+ export * from "./composition/retry";
15
+ export * from "./composition/scope";
16
+ export * from "./utils/rateLimited";
17
+ export * from "./composition/compose";
18
+ //# sourceMappingURL=index.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA,cAAc,OAAO,CAAC;AACtB,cAAc,SAAS,CAAC;AACxB,cAAc,SAAS,CAAC;AACxB,cAAc,SAAS,CAAC;AACxB,cAAc,SAAS,CAAC;AACxB,cAAc,sBAAsB,CAAC;AACrC,cAAc,UAAU,CAAC;AACzB,cAAc,UAAU,CAAC;AACzB,cAAc,WAAW,CAAC;AAC1B,cAAc,YAAY,CAAC;AAC3B,cAAc,mBAAmB,CAAC;AAClC,cAAc,oBAAoB,CAAC;AACnC,cAAc,qBAAqB,CAAC;AACpC,cAAc,qBAAqB,CAAC;AACpC,cAAc,qBAAqB,CAAC;AACpC,cAAc,qBAAqB,CAAC;AACpC,cAAc,uBAAuB,CAAC"}