@auto-engineer/ai-gateway 0.11.15 → 0.11.17
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.
- package/.turbo/turbo-build.log +1 -1
- package/CHANGELOG.md +8 -0
- package/dist/src/config.d.ts.map +1 -1
- package/dist/src/config.js +0 -2
- package/dist/src/config.js.map +1 -1
- package/dist/src/config.specs.js +1 -2
- package/dist/src/config.specs.js.map +1 -1
- package/dist/src/core/constants.d.ts +7 -0
- package/dist/src/core/constants.d.ts.map +1 -0
- package/dist/src/core/constants.js +8 -0
- package/dist/src/core/constants.js.map +1 -0
- package/dist/src/core/context.d.ts +7 -0
- package/dist/src/core/context.d.ts.map +1 -0
- package/dist/src/core/context.js +106 -0
- package/dist/src/core/context.js.map +1 -0
- package/dist/src/core/generators.d.ts +12 -0
- package/dist/src/core/generators.d.ts.map +1 -0
- package/dist/src/core/generators.js +310 -0
- package/dist/src/core/generators.js.map +1 -0
- package/dist/src/core/index.d.ts +8 -0
- package/dist/src/core/index.d.ts.map +1 -0
- package/dist/src/core/index.js +7 -0
- package/dist/src/core/index.js.map +1 -0
- package/dist/src/core/providers/custom.d.ts +3 -0
- package/dist/src/core/providers/custom.d.ts.map +1 -0
- package/dist/src/core/providers/custom.js +9 -0
- package/dist/src/core/providers/custom.js.map +1 -0
- package/dist/src/core/types.d.ts +73 -0
- package/dist/src/core/types.d.ts.map +1 -0
- package/dist/src/core/types.js +9 -0
- package/dist/src/core/types.js.map +1 -0
- package/dist/src/core/utils/errors.d.ts +3 -0
- package/dist/src/core/utils/errors.d.ts.map +1 -0
- package/dist/src/core/utils/errors.js +82 -0
- package/dist/src/core/utils/errors.js.map +1 -0
- package/dist/src/core/utils/log.d.ts +3 -0
- package/dist/src/core/utils/log.d.ts.map +1 -0
- package/dist/src/core/utils/log.js +52 -0
- package/dist/src/core/utils/log.js.map +1 -0
- package/dist/src/core/utils/validation.d.ts +9 -0
- package/dist/src/core/utils/validation.d.ts.map +1 -0
- package/dist/src/core/utils/validation.js +45 -0
- package/dist/src/core/utils/validation.js.map +1 -0
- package/dist/src/index-custom.specs.js +16 -12
- package/dist/src/index-custom.specs.js.map +1 -1
- package/dist/src/index.d.ts +1 -39
- package/dist/src/index.d.ts.map +1 -1
- package/dist/src/index.js +1 -566
- package/dist/src/index.js.map +1 -1
- package/dist/src/index.specs.js +6 -3
- package/dist/src/index.specs.js.map +1 -1
- package/dist/src/node/config.d.ts +3 -0
- package/dist/src/node/config.d.ts.map +1 -0
- package/dist/src/node/config.js +77 -0
- package/dist/src/node/config.js.map +1 -0
- package/dist/src/node/index.d.ts +11 -0
- package/dist/src/node/index.d.ts.map +1 -0
- package/dist/src/node/index.js +10 -0
- package/dist/src/node/index.js.map +1 -0
- package/dist/src/node/mcp-server.d.ts +50 -0
- package/dist/src/node/mcp-server.d.ts.map +1 -0
- package/dist/src/node/mcp-server.js +176 -0
- package/dist/src/node/mcp-server.js.map +1 -0
- package/dist/src/node/wrappers.d.ts +16 -0
- package/dist/src/node/wrappers.d.ts.map +1 -0
- package/dist/src/node/wrappers.js +100 -0
- package/dist/src/node/wrappers.js.map +1 -0
- package/dist/src/providers/custom.specs.js +1 -1
- package/dist/src/providers/custom.specs.js.map +1 -1
- package/dist/tsconfig.tsbuildinfo +1 -1
- package/package.json +19 -3
- package/src/config.specs.ts +1 -2
- package/src/config.ts +0 -2
- package/src/core/constants.ts +8 -0
- package/src/core/context.ts +106 -0
- package/src/core/generators.ts +424 -0
- package/src/core/index.ts +29 -0
- package/src/core/providers/custom.ts +10 -0
- package/src/core/types.ts +81 -0
- package/src/core/utils/errors.ts +91 -0
- package/src/core/utils/log.ts +65 -0
- package/src/core/utils/validation.ts +69 -0
- package/src/index-custom.specs.ts +16 -12
- package/src/index.specs.ts +7 -4
- package/src/index.ts +1 -756
- package/src/node/config.ts +105 -0
- package/src/node/index.ts +60 -0
- package/src/node/mcp-server.ts +261 -0
- package/src/node/wrappers.ts +136 -0
- package/src/providers/custom.specs.ts +2 -2
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../../src/core/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,UAAU,EAAE,MAAM,SAAS,CAAC;AAYrC,OAAO,EAAE,cAAc,EAAE,MAAM,aAAa,CAAC;AAE7C,OAAO,EAAE,eAAe,EAAE,qBAAqB,EAAE,kBAAkB,EAAE,eAAe,EAAE,QAAQ,EAAE,MAAM,WAAW,CAAC;AAElH,OAAO,EACL,YAAY,EACZ,UAAU,EACV,qBAAqB,EACrB,qBAAqB,EACrB,sBAAsB,EACtB,oBAAoB,EACpB,qBAAqB,GACtB,MAAM,cAAc,CAAC;AAEtB,OAAO,EAAE,oBAAoB,EAAE,MAAM,oBAAoB,CAAC;AAE1D,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAC"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"custom.d.ts","sourceRoot":"","sources":["../../../../src/core/providers/custom.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,oBAAoB,EAAE,MAAM,UAAU,CAAC;AAEhD,wBAAgB,oBAAoB,CAAC,MAAM,EAAE,oBAAoB,2CAMhE"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"custom.js","sourceRoot":"","sources":["../../../../src/core/providers/custom.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,YAAY,EAAE,MAAM,gBAAgB,CAAC;AAG9C,MAAM,UAAU,oBAAoB,CAAC,MAA4B;IAC/D,OAAO,YAAY,CAAC;QAClB,IAAI,EAAE,MAAM,CAAC,IAAI;QACjB,OAAO,EAAE,MAAM,CAAC,OAAO;QACvB,MAAM,EAAE,MAAM,CAAC,MAAM;KACtB,CAAC,CAAC;AACL,CAAC"}
|
|
@@ -0,0 +1,73 @@
|
|
|
1
|
+
import { z } from 'zod';
|
|
2
|
+
export declare enum AIProvider {
|
|
3
|
+
OpenAI = "openai",
|
|
4
|
+
Anthropic = "anthropic",
|
|
5
|
+
Google = "google",
|
|
6
|
+
XAI = "xai",
|
|
7
|
+
Custom = "custom"
|
|
8
|
+
}
|
|
9
|
+
export interface CustomProviderConfig {
|
|
10
|
+
name: string;
|
|
11
|
+
baseUrl: string;
|
|
12
|
+
apiKey: string;
|
|
13
|
+
defaultModel: string;
|
|
14
|
+
}
|
|
15
|
+
export interface AIConfig {
|
|
16
|
+
openai?: {
|
|
17
|
+
apiKey: string;
|
|
18
|
+
};
|
|
19
|
+
anthropic?: {
|
|
20
|
+
apiKey: string;
|
|
21
|
+
};
|
|
22
|
+
google?: {
|
|
23
|
+
apiKey: string;
|
|
24
|
+
};
|
|
25
|
+
xai?: {
|
|
26
|
+
apiKey: string;
|
|
27
|
+
};
|
|
28
|
+
custom?: CustomProviderConfig;
|
|
29
|
+
}
|
|
30
|
+
export interface AIContext {
|
|
31
|
+
config: AIConfig;
|
|
32
|
+
defaultProvider?: AIProvider;
|
|
33
|
+
}
|
|
34
|
+
export interface AIOptions {
|
|
35
|
+
provider?: AIProvider;
|
|
36
|
+
model?: string;
|
|
37
|
+
temperature?: number;
|
|
38
|
+
maxTokens?: number;
|
|
39
|
+
streamCallback?: (token: string) => void;
|
|
40
|
+
includeTools?: boolean;
|
|
41
|
+
}
|
|
42
|
+
export interface StructuredAIOptions<T> extends Omit<AIOptions, 'streamCallback'> {
|
|
43
|
+
schema: z.ZodSchema<T>;
|
|
44
|
+
schemaName?: string;
|
|
45
|
+
schemaDescription?: string;
|
|
46
|
+
}
|
|
47
|
+
export interface StreamStructuredAIOptions<T> extends StructuredAIOptions<T> {
|
|
48
|
+
onPartialObject?: (partialObject: unknown) => void;
|
|
49
|
+
}
|
|
50
|
+
export interface AIToolValidationError extends Error {
|
|
51
|
+
cause?: {
|
|
52
|
+
issues?: unknown[];
|
|
53
|
+
[key: string]: unknown;
|
|
54
|
+
};
|
|
55
|
+
issues?: unknown[];
|
|
56
|
+
errors?: unknown[];
|
|
57
|
+
zodIssues?: unknown[];
|
|
58
|
+
validationDetails?: {
|
|
59
|
+
cause?: {
|
|
60
|
+
issues?: unknown[];
|
|
61
|
+
};
|
|
62
|
+
issues?: unknown[];
|
|
63
|
+
errors?: unknown[];
|
|
64
|
+
};
|
|
65
|
+
schemaDescription?: string;
|
|
66
|
+
[key: string]: unknown;
|
|
67
|
+
}
|
|
68
|
+
export type RegisteredToolForAI = {
|
|
69
|
+
parameters: z.ZodSchema;
|
|
70
|
+
description: string;
|
|
71
|
+
execute?: (args: Record<string, unknown>) => Promise<string>;
|
|
72
|
+
};
|
|
73
|
+
//# sourceMappingURL=types.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../../../src/core/types.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAC;AAExB,oBAAY,UAAU;IACpB,MAAM,WAAW;IACjB,SAAS,cAAc;IACvB,MAAM,WAAW;IACjB,GAAG,QAAQ;IACX,MAAM,WAAW;CAClB;AAED,MAAM,WAAW,oBAAoB;IACnC,IAAI,EAAE,MAAM,CAAC;IACb,OAAO,EAAE,MAAM,CAAC;IAChB,MAAM,EAAE,MAAM,CAAC;IACf,YAAY,EAAE,MAAM,CAAC;CACtB;AAED,MAAM,WAAW,QAAQ;IACvB,MAAM,CAAC,EAAE;QACP,MAAM,EAAE,MAAM,CAAC;KAChB,CAAC;IACF,SAAS,CAAC,EAAE;QACV,MAAM,EAAE,MAAM,CAAC;KAChB,CAAC;IACF,MAAM,CAAC,EAAE;QACP,MAAM,EAAE,MAAM,CAAC;KAChB,CAAC;IACF,GAAG,CAAC,EAAE;QACJ,MAAM,EAAE,MAAM,CAAC;KAChB,CAAC;IACF,MAAM,CAAC,EAAE,oBAAoB,CAAC;CAC/B;AAED,MAAM,WAAW,SAAS;IACxB,MAAM,EAAE,QAAQ,CAAC;IACjB,eAAe,CAAC,EAAE,UAAU,CAAC;CAC9B;AAED,MAAM,WAAW,SAAS;IACxB,QAAQ,CAAC,EAAE,UAAU,CAAC;IACtB,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,cAAc,CAAC,EAAE,CAAC,KAAK,EAAE,MAAM,KAAK,IAAI,CAAC;IACzC,YAAY,CAAC,EAAE,OAAO,CAAC;CACxB;AAED,MAAM,WAAW,mBAAmB,CAAC,CAAC,CAAE,SAAQ,IAAI,CAAC,SAAS,EAAE,gBAAgB,CAAC;IAC/E,MAAM,EAAE,CAAC,CAAC,SAAS,CAAC,CAAC,CAAC,CAAC;IACvB,UAAU,CAAC,EAAE,MAAM,CAAC;IACpB,iBAAiB,CAAC,EAAE,MAAM,CAAC;CAC5B;AAED,MAAM,WAAW,yBAAyB,CAAC,CAAC,CAAE,SAAQ,mBAAmB,CAAC,CAAC,CAAC;IAC1E,eAAe,CAAC,EAAE,CAAC,aAAa,EAAE,OAAO,KAAK,IAAI,CAAC;CACpD;AAED,MAAM,WAAW,qBAAsB,SAAQ,KAAK;IAClD,KAAK,CAAC,EAAE;QACN,MAAM,CAAC,EAAE,OAAO,EAAE,CAAC;QACnB,CAAC,GAAG,EAAE,MAAM,GAAG,OAAO,CAAC;KACxB,CAAC;IACF,MAAM,CAAC,EAAE,OAAO,EAAE,CAAC;IACnB,MAAM,CAAC,EAAE,OAAO,EAAE,CAAC;IACnB,SAAS,CAAC,EAAE,OAAO,EAAE,CAAC;IACtB,iBAAiB,CAAC,EAAE;QAClB,KAAK,CAAC,EAAE;YACN,MAAM,CAAC,EAAE,OAAO,EAAE,CAAC;SACpB,CAAC;QACF,MAAM,CAAC,EAAE,OAAO,EAAE,CAAC;QACnB,MAAM,CAAC,EAAE,OAAO,EAAE,CAAC;KACpB,CAAC;IACF,iBAAiB,CAAC,EAAE,MAAM,CAAC;IAC3B,CAAC,GAAG,EAAE,MAAM,GAAG,OAAO,CAAC;CACxB;AAED,MAAM,MAAM,mBAAmB,GAAG;IAChC,UAAU,EAAE,CAAC,CAAC,SAAS,CAAC;IACxB,WAAW,EAAE,MAAM,CAAC;IACpB,OAAO,CAAC,EAAE,CAAC,IAAI,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,KAAK,OAAO,CAAC,MAAM,CAAC,CAAC;CAC9D,CAAC"}
|
|
@@ -0,0 +1,9 @@
|
|
|
1
|
+
export var AIProvider;
|
|
2
|
+
(function (AIProvider) {
|
|
3
|
+
AIProvider["OpenAI"] = "openai";
|
|
4
|
+
AIProvider["Anthropic"] = "anthropic";
|
|
5
|
+
AIProvider["Google"] = "google";
|
|
6
|
+
AIProvider["XAI"] = "xai";
|
|
7
|
+
AIProvider["Custom"] = "custom";
|
|
8
|
+
})(AIProvider || (AIProvider = {}));
|
|
9
|
+
//# sourceMappingURL=types.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"types.js","sourceRoot":"","sources":["../../../src/core/types.ts"],"names":[],"mappings":"AAEA,MAAM,CAAN,IAAY,UAMX;AAND,WAAY,UAAU;IACpB,+BAAiB,CAAA;IACjB,qCAAuB,CAAA;IACvB,+BAAiB,CAAA;IACjB,yBAAW,CAAA;IACX,+BAAiB,CAAA;AACnB,CAAC,EANW,UAAU,KAAV,UAAU,QAMrB"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"errors.d.ts","sourceRoot":"","sources":["../../../../src/core/utils/errors.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,UAAU,EAAE,MAAM,UAAU,CAAC;AA4EtC,wBAAgB,kBAAkB,CAAC,KAAK,EAAE,OAAO,EAAE,QAAQ,EAAE,UAAU,EAAE,SAAS,EAAE,MAAM,GAAG,IAAI,CAchG"}
|
|
@@ -0,0 +1,82 @@
|
|
|
1
|
+
import { makeLogger } from './log.js';
|
|
2
|
+
const debugError = makeLogger('auto:ai-gateway:error');
|
|
3
|
+
const ERROR_PATTERNS = [
|
|
4
|
+
{
|
|
5
|
+
patterns: ['rate limit', '429'],
|
|
6
|
+
statusCode: 429,
|
|
7
|
+
icon: '⚠️',
|
|
8
|
+
message: 'RATE LIMIT ERROR detected for %s',
|
|
9
|
+
checkRetryAfter: true,
|
|
10
|
+
},
|
|
11
|
+
{
|
|
12
|
+
patterns: ['401', 'unauthorized'],
|
|
13
|
+
statusCode: 401,
|
|
14
|
+
icon: '🔐',
|
|
15
|
+
message: 'AUTHENTICATION ERROR - Check your %s API key',
|
|
16
|
+
},
|
|
17
|
+
{
|
|
18
|
+
patterns: ['quota', 'credits', 'insufficient'],
|
|
19
|
+
icon: '💳',
|
|
20
|
+
message: 'QUOTA/CREDITS ERROR - Insufficient credits for %s',
|
|
21
|
+
},
|
|
22
|
+
{
|
|
23
|
+
patterns: ['model', 'not found'],
|
|
24
|
+
icon: '🤖',
|
|
25
|
+
message: 'MODEL ERROR - Model might not be available for %s',
|
|
26
|
+
},
|
|
27
|
+
{
|
|
28
|
+
patterns: ['timeout', 'timed out'],
|
|
29
|
+
icon: '⏱️',
|
|
30
|
+
message: 'TIMEOUT ERROR - Request timed out for %s',
|
|
31
|
+
},
|
|
32
|
+
{
|
|
33
|
+
patterns: ['ECONNREFUSED', 'ENOTFOUND', 'network'],
|
|
34
|
+
icon: '🌐',
|
|
35
|
+
message: 'NETWORK ERROR - Connection failed to %s',
|
|
36
|
+
},
|
|
37
|
+
];
|
|
38
|
+
function checkErrorType(message, errorAny, provider) {
|
|
39
|
+
for (const errorType of ERROR_PATTERNS) {
|
|
40
|
+
const hasPattern = errorType.patterns.some((pattern) => message.includes(pattern));
|
|
41
|
+
const hasStatusCode = errorType.statusCode !== undefined && errorAny.status === errorType.statusCode;
|
|
42
|
+
if (hasPattern || hasStatusCode) {
|
|
43
|
+
debugError(`${errorType.icon} ${errorType.message}`, provider);
|
|
44
|
+
if (errorType.checkRetryAfter === true && errorAny.retryAfter !== undefined) {
|
|
45
|
+
debugError('Retry after: %s seconds', String(errorAny.retryAfter));
|
|
46
|
+
}
|
|
47
|
+
return;
|
|
48
|
+
}
|
|
49
|
+
}
|
|
50
|
+
}
|
|
51
|
+
function extractErrorDetails(errorAny) {
|
|
52
|
+
if (errorAny.response !== undefined && typeof errorAny.response === 'object' && errorAny.response !== null) {
|
|
53
|
+
const response = errorAny.response;
|
|
54
|
+
debugError('Response status: %s', String(response.status ?? 'unknown'));
|
|
55
|
+
debugError('Response status text: %s', String(response.statusText ?? 'unknown'));
|
|
56
|
+
if (response.data !== undefined) {
|
|
57
|
+
debugError('Response data: %o', response.data);
|
|
58
|
+
}
|
|
59
|
+
}
|
|
60
|
+
if (errorAny.code !== undefined) {
|
|
61
|
+
debugError('Error code: %s', String(errorAny.code));
|
|
62
|
+
}
|
|
63
|
+
if (errorAny.type !== undefined) {
|
|
64
|
+
debugError('Error type: %s', String(errorAny.type));
|
|
65
|
+
}
|
|
66
|
+
}
|
|
67
|
+
export function extractAndLogError(error, provider, operation) {
|
|
68
|
+
debugError('%s failed for provider %s', operation, provider);
|
|
69
|
+
if (error instanceof Error) {
|
|
70
|
+
debugError('Error message: %s', error.message);
|
|
71
|
+
debugError('Error name: %s', error.name);
|
|
72
|
+
debugError('Error stack: %s', error.stack);
|
|
73
|
+
const errorAny = error;
|
|
74
|
+
checkErrorType(error.message, errorAny, provider);
|
|
75
|
+
extractErrorDetails(errorAny);
|
|
76
|
+
debugError('Full error object: %O', error);
|
|
77
|
+
}
|
|
78
|
+
else {
|
|
79
|
+
debugError('Unknown error type: %O', error);
|
|
80
|
+
}
|
|
81
|
+
}
|
|
82
|
+
//# sourceMappingURL=errors.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"errors.js","sourceRoot":"","sources":["../../../../src/core/utils/errors.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"log.d.ts","sourceRoot":"","sources":["../../../../src/core/utils/log.ts"],"names":[],"mappings":"AAAA,MAAM,MAAM,MAAM,GAAG,CAAC,GAAG,IAAI,EAAE,OAAO,EAAE,KAAK,IAAI,CAAC;AAuClD,wBAAgB,UAAU,CAAC,EAAE,EAAE,MAAM,GAAG,MAAM,CAyB7C"}
|
|
@@ -0,0 +1,52 @@
|
|
|
1
|
+
let debugFactory = undefined;
|
|
2
|
+
let debugPromise = null;
|
|
3
|
+
function isNodeEnvironment() {
|
|
4
|
+
if (typeof process === 'undefined')
|
|
5
|
+
return false;
|
|
6
|
+
const proc = process;
|
|
7
|
+
return Boolean(proc.versions?.node);
|
|
8
|
+
}
|
|
9
|
+
function loadDebug() {
|
|
10
|
+
if (!isNodeEnvironment()) {
|
|
11
|
+
debugFactory = null; // permanent no-op on edge
|
|
12
|
+
return Promise.resolve();
|
|
13
|
+
}
|
|
14
|
+
if (debugPromise)
|
|
15
|
+
return debugPromise;
|
|
16
|
+
debugPromise = import('debug')
|
|
17
|
+
.then((mod) => {
|
|
18
|
+
const imported = mod;
|
|
19
|
+
debugFactory = typeof imported === 'function' ? imported : (imported.default ?? null);
|
|
20
|
+
})
|
|
21
|
+
.catch(() => {
|
|
22
|
+
debugFactory = null;
|
|
23
|
+
});
|
|
24
|
+
return debugPromise;
|
|
25
|
+
}
|
|
26
|
+
export function makeLogger(ns) {
|
|
27
|
+
const queue = [];
|
|
28
|
+
let impl = null;
|
|
29
|
+
const MAX_BUFFERED = 100;
|
|
30
|
+
const logger = (...args) => {
|
|
31
|
+
if (impl) {
|
|
32
|
+
impl(...args);
|
|
33
|
+
}
|
|
34
|
+
else if (queue.length < MAX_BUFFERED) {
|
|
35
|
+
queue.push(args);
|
|
36
|
+
}
|
|
37
|
+
};
|
|
38
|
+
void loadDebug().then(() => {
|
|
39
|
+
try {
|
|
40
|
+
impl = debugFactory ? debugFactory(ns) : () => { };
|
|
41
|
+
}
|
|
42
|
+
catch {
|
|
43
|
+
impl = () => { };
|
|
44
|
+
}
|
|
45
|
+
// flush any buffered logs
|
|
46
|
+
for (const args of queue)
|
|
47
|
+
impl(...args);
|
|
48
|
+
queue.length = 0;
|
|
49
|
+
});
|
|
50
|
+
return logger;
|
|
51
|
+
}
|
|
52
|
+
//# sourceMappingURL=log.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"log.js","sourceRoot":"","sources":["../../../../src/core/utils/log.ts"],"names":[],"mappings":"AAWA,IAAI,YAAY,GAAoC,SAAS,CAAC;AAC9D,IAAI,YAAY,GAAyB,IAAI,CAAC;AAE9C,SAAS,iBAAiB;IACxB,IAAI,OAAO,OAAO,KAAK,WAAW;QAAE,OAAO,KAAK,CAAC;IACjD,MAAM,IAAI,GAAG,OAAsB,CAAC;IACpC,OAAO,OAAO,CAAC,IAAI,CAAC,QAAQ,EAAE,IAAI,CAAC,CAAC;AACtC,CAAC;AAED,SAAS,SAAS;IAChB,IAAI,CAAC,iBAAiB,EAAE,EAAE,CAAC;QACzB,YAAY,GAAG,IAAI,CAAC,CAAC,0BAA0B;QAC/C,OAAO,OAAO,CAAC,OAAO,EAAE,CAAC;IAC3B,CAAC;IACD,IAAI,YAAY;QAAE,OAAO,YAAY,CAAC;IAEtC,YAAY,GAAG,MAAM,CAAC,OAAO,CAAC;SAC3B,IAAI,CAAC,CAAC,GAAG,EAAE,EAAE;QACZ,MAAM,QAAQ,GAAG,GAAgD,CAAC;QAClE,YAAY,GAAG,OAAO,QAAQ,KAAK,UAAU,CAAC,CAAC,CAAC,QAAQ,CAAC,CAAC,CAAC,CAAC,QAAQ,CAAC,OAAO,IAAI,IAAI,CAAC,CAAC;IACxF,CAAC,CAAC;SACD,KAAK,CAAC,GAAG,EAAE;QACV,YAAY,GAAG,IAAI,CAAC;IACtB,CAAC,CAAC,CAAC;IAEL,OAAO,YAAY,CAAC;AACtB,CAAC;AAED,MAAM,UAAU,UAAU,CAAC,EAAU;IACnC,MAAM,KAAK,GAAgB,EAAE,CAAC;IAC9B,IAAI,IAAI,GAAkB,IAAI,CAAC;IAC/B,MAAM,YAAY,GAAG,GAAG,CAAC;IAEzB,MAAM,MAAM,GAAW,CAAC,GAAG,IAAe,EAAE,EAAE;QAC5C,IAAI,IAAI,EAAE,CAAC;YACT,IAAI,CAAC,GAAG,IAAI,CAAC,CAAC;QAChB,CAAC;aAAM,IAAI,KAAK,CAAC,MAAM,GAAG,YAAY,EAAE,CAAC;YACvC,KAAK,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;QACnB,CAAC;IACH,CAAC,CAAC;IAEF,KAAK,SAAS,EAAE,CAAC,IAAI,CAAC,GAAG,EAAE;QACzB,IAAI,CAAC;YACH,IAAI,GAAG,YAAY,CAAC,CAAC,CAAC,YAAY,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC,GAAG,EAAE,GAAE,CAAC,CAAC;QACpD,CAAC;QAAC,MAAM,CAAC;YACP,IAAI,GAAG,GAAG,EAAE,GAAE,CAAC,CAAC;QAClB,CAAC;QACD,0BAA0B;QAC1B,KAAK,MAAM,IAAI,IAAI,KAAK;YAAE,IAAI,CAAC,GAAG,IAAI,CAAC,CAAC;QACxC,KAAK,CAAC,MAAM,GAAG,CAAC,CAAC;IACnB,CAAC,CAAC,CAAC;IAEH,OAAO,MAAM,CAAC;AAChB,CAAC"}
|
|
@@ -0,0 +1,9 @@
|
|
|
1
|
+
import { AIToolValidationError } from '../types';
|
|
2
|
+
export declare function getEnhancedPrompt(prompt: string, lastError: AIToolValidationError): string;
|
|
3
|
+
export declare function isSchemaError(error: Error): boolean;
|
|
4
|
+
export declare function enhanceValidationError(error: AIToolValidationError): AIToolValidationError;
|
|
5
|
+
export declare function handleFailedRequest(lastError: AIToolValidationError | undefined, maxRetries: number, attempt: number): {
|
|
6
|
+
shouldRetry: boolean;
|
|
7
|
+
enhancedError?: AIToolValidationError;
|
|
8
|
+
};
|
|
9
|
+
//# sourceMappingURL=validation.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"validation.d.ts","sourceRoot":"","sources":["../../../../src/core/utils/validation.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,qBAAqB,EAAE,MAAM,UAAU,CAAC;AAKjD,wBAAgB,iBAAiB,CAAC,MAAM,EAAE,MAAM,EAAE,SAAS,EAAE,qBAAqB,GAAG,MAAM,CAS1F;AAED,wBAAgB,aAAa,CAAC,KAAK,EAAE,KAAK,GAAG,OAAO,CAMnD;AAED,wBAAgB,sBAAsB,CAAC,KAAK,EAAE,qBAAqB,GAAG,qBAAqB,CAsB1F;AAED,wBAAgB,mBAAmB,CACjC,SAAS,EAAE,qBAAqB,GAAG,SAAS,EAC5C,UAAU,EAAE,MAAM,EAClB,OAAO,EAAE,MAAM,GACd;IAAE,WAAW,EAAE,OAAO,CAAC;IAAC,aAAa,CAAC,EAAE,qBAAqB,CAAA;CAAE,CAgBjE"}
|
|
@@ -0,0 +1,45 @@
|
|
|
1
|
+
import { makeLogger } from './log.js';
|
|
2
|
+
const debugValidation = makeLogger('auto:ai-gateway:validation');
|
|
3
|
+
export function getEnhancedPrompt(prompt, lastError) {
|
|
4
|
+
const errorDetails = lastError.zodIssues
|
|
5
|
+
? JSON.stringify(lastError.zodIssues, null, 2)
|
|
6
|
+
: lastError.validationDetails?.cause?.issues
|
|
7
|
+
? JSON.stringify(lastError.validationDetails.cause.issues, null, 2)
|
|
8
|
+
: lastError.message;
|
|
9
|
+
debugValidation('Enhancing prompt with validation error details: %o', errorDetails);
|
|
10
|
+
return `${prompt}\n\n⚠️ IMPORTANT: Your previous response failed validation with the following errors:\n${errorDetails}\n\nPlease fix these errors and ensure your response EXACTLY matches the required schema structure.`;
|
|
11
|
+
}
|
|
12
|
+
export function isSchemaError(error) {
|
|
13
|
+
return (error.message.includes('response did not match schema') ||
|
|
14
|
+
error.message.includes('TypeValidationError') ||
|
|
15
|
+
error.name === 'AI_TypeValidationError');
|
|
16
|
+
}
|
|
17
|
+
export function enhanceValidationError(error) {
|
|
18
|
+
const enhancedError = new Error(error.message);
|
|
19
|
+
Object.assign(enhancedError, error);
|
|
20
|
+
if (error.cause !== undefined || error.issues !== undefined || error.errors !== undefined) {
|
|
21
|
+
enhancedError.validationDetails = {
|
|
22
|
+
cause: error.cause,
|
|
23
|
+
issues: error.issues,
|
|
24
|
+
errors: error.errors,
|
|
25
|
+
};
|
|
26
|
+
}
|
|
27
|
+
if (error.message.includes('response did not match schema') &&
|
|
28
|
+
'cause' in error &&
|
|
29
|
+
typeof error.cause === 'object' &&
|
|
30
|
+
error.cause !== null &&
|
|
31
|
+
'issues' in error.cause) {
|
|
32
|
+
enhancedError.zodIssues = error.cause.issues;
|
|
33
|
+
}
|
|
34
|
+
return enhancedError;
|
|
35
|
+
}
|
|
36
|
+
export function handleFailedRequest(lastError, maxRetries, attempt) {
|
|
37
|
+
if (!lastError || !isSchemaError(lastError) || attempt >= maxRetries - 1) {
|
|
38
|
+
debugValidation('Not retrying - isLastError: %s, isSchemaError: %s, attempt: %d/%d', !!lastError, lastError ? isSchemaError(lastError) : false, attempt + 1, maxRetries);
|
|
39
|
+
return { shouldRetry: false, enhancedError: lastError };
|
|
40
|
+
}
|
|
41
|
+
debugValidation('Schema validation failed on attempt %d/%d, will retry', attempt + 1, maxRetries);
|
|
42
|
+
const enhancedError = enhanceValidationError(lastError);
|
|
43
|
+
return { shouldRetry: true, enhancedError };
|
|
44
|
+
}
|
|
45
|
+
//# sourceMappingURL=validation.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"validation.js","sourceRoot":"","sources":["../../../../src/core/utils/validation.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,UAAU,EAAE,MAAM,OAAO,CAAC;AAEnC,MAAM,eAAe,GAAG,UAAU,CAAC,4BAA4B,CAAC,CAAC;AAEjE,MAAM,UAAU,iBAAiB,CAAC,MAAc,EAAE,SAAgC;IAChF,MAAM,YAAY,GAAG,SAAS,CAAC,SAAS;QACtC,CAAC,CAAC,IAAI,CAAC,SAAS,CAAC,SAAS,CAAC,SAAS,EAAE,IAAI,EAAE,CAAC,CAAC;QAC9C,CAAC,CAAC,SAAS,CAAC,iBAAiB,EAAE,KAAK,EAAE,MAAM;YAC1C,CAAC,CAAC,IAAI,CAAC,SAAS,CAAC,SAAS,CAAC,iBAAiB,CAAC,KAAK,CAAC,MAAM,EAAE,IAAI,EAAE,CAAC,CAAC;YACnE,CAAC,CAAC,SAAS,CAAC,OAAO,CAAC;IAExB,eAAe,CAAC,oDAAoD,EAAE,YAAY,CAAC,CAAC;IACpF,OAAO,GAAG,MAAM,0FAA0F,YAAY,qGAAqG,CAAC;AAC9N,CAAC;AAED,MAAM,UAAU,aAAa,CAAC,KAAY;IACxC,OAAO,CACL,KAAK,CAAC,OAAO,CAAC,QAAQ,CAAC,+BAA+B,CAAC;QACvD,KAAK,CAAC,OAAO,CAAC,QAAQ,CAAC,qBAAqB,CAAC;QAC7C,KAAK,CAAC,IAAI,KAAK,wBAAwB,CACxC,CAAC;AACJ,CAAC;AAED,MAAM,UAAU,sBAAsB,CAAC,KAA4B;IACjE,MAAM,aAAa,GAAG,IAAI,KAAK,CAAC,KAAK,CAAC,OAAO,CAA0B,CAAC;IACxE,MAAM,CAAC,MAAM,CAAC,aAAa,EAAE,KAAK,CAAC,CAAC;IAEpC,IAAI,KAAK,CAAC,KAAK,KAAK,SAAS,IAAI,KAAK,CAAC,MAAM,KAAK,SAAS,IAAI,KAAK,CAAC,MAAM,KAAK,SAAS,EAAE,CAAC;QAC1F,aAAa,CAAC,iBAAiB,GAAG;YAChC,KAAK,EAAE,KAAK,CAAC,KAAK;YAClB,MAAM,EAAE,KAAK,CAAC,MAAM;YACpB,MAAM,EAAE,KAAK,CAAC,MAAM;SACrB,CAAC;IACJ,CAAC;IAED,IACE,KAAK,CAAC,OAAO,CAAC,QAAQ,CAAC,+BAA+B,CAAC;QACvD,OAAO,IAAI,KAAK;QAChB,OAAO,KAAK,CAAC,KAAK,KAAK,QAAQ;QAC/B,KAAK,CAAC,KAAK,KAAK,IAAI;QACpB,QAAQ,IAAI,KAAK,CAAC,KAAK,EACvB,CAAC;QACD,aAAa,CAAC,SAAS,GAAG,KAAK,CAAC,KAAK,CAAC,MAAmB,CAAC;IAC5D,CAAC;IACD,OAAO,aAAa,CAAC;AACvB,CAAC;AAED,MAAM,UAAU,mBAAmB,CACjC,SAA4C,EAC5C,UAAkB,EAClB,OAAe;IAEf,IAAI,CAAC,SAAS,IAAI,CAAC,aAAa,CAAC,SAAS,CAAC,IAAI,OAAO,IAAI,UAAU,GAAG,CAAC,EAAE,CAAC;QACzE,eAAe,CACb,mEAAmE,EACnE,CAAC,CAAC,SAAS,EACX,SAAS,CAAC,CAAC,CAAC,aAAa,CAAC,SAAS,CAAC,CAAC,CAAC,CAAC,KAAK,EAC5C,OAAO,GAAG,CAAC,EACX,UAAU,CACX,CAAC;QACF,OAAO,EAAE,WAAW,EAAE,KAAK,EAAE,aAAa,EAAE,SAAS,EAAE,CAAC;IAC1D,CAAC;IAED,eAAe,CAAC,uDAAuD,EAAE,OAAO,GAAG,CAAC,EAAE,UAAU,CAAC,CAAC;IAClG,MAAM,aAAa,GAAG,sBAAsB,CAAC,SAAS,CAAC,CAAC;IAExD,OAAO,EAAE,WAAW,EAAE,IAAI,EAAE,aAAa,EAAE,CAAC;AAC9C,CAAC"}
|
|
@@ -1,12 +1,12 @@
|
|
|
1
1
|
import { describe, it, expect, vi, beforeEach, afterEach } from 'vitest';
|
|
2
|
-
import { AIProvider } from './
|
|
3
|
-
import { getAvailableProviders, getDefaultModel, getDefaultAIProvider } from './index.js';
|
|
2
|
+
import { AIProvider } from './core/types.js';
|
|
3
|
+
import { getAvailableProviders, getDefaultModel, getDefaultAIProvider, resetGlobalContext } from './index.js';
|
|
4
4
|
// Mock the config module
|
|
5
|
-
vi.mock('./config', () => ({
|
|
5
|
+
vi.mock('./node/config', () => ({
|
|
6
6
|
configureAIProvider: vi.fn(),
|
|
7
7
|
}));
|
|
8
8
|
// Mock the custom provider
|
|
9
|
-
vi.mock('./providers/custom', () => ({
|
|
9
|
+
vi.mock('./core/providers/custom', () => ({
|
|
10
10
|
createCustomProvider: vi.fn(() => ({
|
|
11
11
|
languageModel: vi.fn(),
|
|
12
12
|
})),
|
|
@@ -17,13 +17,15 @@ describe('Index Integration with Custom Providers', () => {
|
|
|
17
17
|
vi.resetModules();
|
|
18
18
|
process.env = { ...originalEnv };
|
|
19
19
|
vi.clearAllMocks();
|
|
20
|
+
resetGlobalContext();
|
|
20
21
|
});
|
|
21
22
|
afterEach(() => {
|
|
22
23
|
process.env = originalEnv;
|
|
24
|
+
resetGlobalContext();
|
|
23
25
|
});
|
|
24
26
|
describe('getAvailableProviders', () => {
|
|
25
27
|
it('should include custom provider when configured', async () => {
|
|
26
|
-
const { configureAIProvider } = await import('./config.js');
|
|
28
|
+
const { configureAIProvider } = await import('./node/config.js');
|
|
27
29
|
vi.mocked(configureAIProvider).mockReturnValue({
|
|
28
30
|
custom: {
|
|
29
31
|
name: 'litellm',
|
|
@@ -38,7 +40,7 @@ describe('Index Integration with Custom Providers', () => {
|
|
|
38
40
|
expect(providers).toContain(AIProvider.Anthropic);
|
|
39
41
|
});
|
|
40
42
|
it('should not include custom provider when not configured', async () => {
|
|
41
|
-
const { configureAIProvider } = await import('./config.js');
|
|
43
|
+
const { configureAIProvider } = await import('./node/config.js');
|
|
42
44
|
vi.mocked(configureAIProvider).mockReturnValue({
|
|
43
45
|
anthropic: { apiKey: 'sk-anthropic' },
|
|
44
46
|
});
|
|
@@ -47,7 +49,7 @@ describe('Index Integration with Custom Providers', () => {
|
|
|
47
49
|
expect(providers).toContain(AIProvider.Anthropic);
|
|
48
50
|
});
|
|
49
51
|
it('should handle multiple providers including custom', async () => {
|
|
50
|
-
const { configureAIProvider } = await import('./config.js');
|
|
52
|
+
const { configureAIProvider } = await import('./node/config.js');
|
|
51
53
|
vi.mocked(configureAIProvider).mockReturnValue({
|
|
52
54
|
openai: { apiKey: 'sk-openai' },
|
|
53
55
|
anthropic: { apiKey: 'sk-anthropic' },
|
|
@@ -71,7 +73,7 @@ describe('Index Integration with Custom Providers', () => {
|
|
|
71
73
|
});
|
|
72
74
|
describe('getDefaultModel', () => {
|
|
73
75
|
it('should return custom provider default model when provider is Custom', async () => {
|
|
74
|
-
const { configureAIProvider } = await import('./config.js');
|
|
76
|
+
const { configureAIProvider } = await import('./node/config.js');
|
|
75
77
|
vi.mocked(configureAIProvider).mockReturnValue({
|
|
76
78
|
custom: {
|
|
77
79
|
name: 'litellm',
|
|
@@ -84,7 +86,7 @@ describe('Index Integration with Custom Providers', () => {
|
|
|
84
86
|
expect(model).toBe('claude-3-sonnet');
|
|
85
87
|
});
|
|
86
88
|
it('should throw error when custom provider not configured but requested', async () => {
|
|
87
|
-
const { configureAIProvider } = await import('./config.js');
|
|
89
|
+
const { configureAIProvider } = await import('./node/config.js');
|
|
88
90
|
vi.mocked(configureAIProvider).mockReturnValue({
|
|
89
91
|
anthropic: { apiKey: 'sk-anthropic' },
|
|
90
92
|
});
|
|
@@ -92,7 +94,7 @@ describe('Index Integration with Custom Providers', () => {
|
|
|
92
94
|
});
|
|
93
95
|
it('should use environment variable DEFAULT_AI_MODEL for custom provider', async () => {
|
|
94
96
|
process.env.DEFAULT_AI_MODEL = 'env-override-model';
|
|
95
|
-
const { configureAIProvider } = await import('./config.js');
|
|
97
|
+
const { configureAIProvider } = await import('./node/config.js');
|
|
96
98
|
vi.mocked(configureAIProvider).mockReturnValue({
|
|
97
99
|
custom: {
|
|
98
100
|
name: 'custom',
|
|
@@ -106,8 +108,9 @@ describe('Index Integration with Custom Providers', () => {
|
|
|
106
108
|
});
|
|
107
109
|
it('should handle different custom provider models', async () => {
|
|
108
110
|
const testCases = ['gpt-4o', 'claude-3-opus', 'llama3.1:70b', 'mistral-large', 'gemini-1.5-pro'];
|
|
109
|
-
const { configureAIProvider } = await import('./config.js');
|
|
111
|
+
const { configureAIProvider } = await import('./node/config.js');
|
|
110
112
|
testCases.forEach((testModel) => {
|
|
113
|
+
resetGlobalContext();
|
|
111
114
|
vi.mocked(configureAIProvider).mockReturnValue({
|
|
112
115
|
custom: {
|
|
113
116
|
name: 'test',
|
|
@@ -124,7 +127,7 @@ describe('Index Integration with Custom Providers', () => {
|
|
|
124
127
|
describe('getDefaultAIProvider', () => {
|
|
125
128
|
it('should use custom provider as fallback when available', async () => {
|
|
126
129
|
process.env.DEFAULT_AI_PROVIDER = 'nonexistent';
|
|
127
|
-
const { configureAIProvider } = await import('./config.js');
|
|
130
|
+
const { configureAIProvider } = await import('./node/config.js');
|
|
128
131
|
vi.mocked(configureAIProvider).mockReturnValue({
|
|
129
132
|
custom: {
|
|
130
133
|
name: 'custom',
|
|
@@ -151,6 +154,7 @@ describe('Index Integration with Custom Providers', () => {
|
|
|
151
154
|
{ env: 'xai', expected: AIProvider.XAI },
|
|
152
155
|
];
|
|
153
156
|
testCases.forEach(({ env, expected }) => {
|
|
157
|
+
resetGlobalContext();
|
|
154
158
|
process.env.DEFAULT_AI_PROVIDER = env;
|
|
155
159
|
const provider = getDefaultAIProvider();
|
|
156
160
|
expect(provider).toBe(expected);
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index-custom.specs.js","sourceRoot":"","sources":["../../src/index-custom.specs.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,QAAQ,EAAE,EAAE,EAAE,MAAM,EAAE,EAAE,EAAE,UAAU,EAAE,SAAS,EAAE,MAAM,QAAQ,CAAC;AACzE,OAAO,EAAE,UAAU,EAAE,MAAM,
|
|
1
|
+
{"version":3,"file":"index-custom.specs.js","sourceRoot":"","sources":["../../src/index-custom.specs.ts"],"names":[],"mappings":"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"}
|
package/dist/src/index.d.ts
CHANGED
|
@@ -1,40 +1,2 @@
|
|
|
1
|
-
|
|
2
|
-
export { AIProvider } from './constants';
|
|
3
|
-
import { z } from 'zod';
|
|
4
|
-
export interface AIOptions {
|
|
5
|
-
provider?: AIProvider;
|
|
6
|
-
model?: string;
|
|
7
|
-
temperature?: number;
|
|
8
|
-
maxTokens?: number;
|
|
9
|
-
streamCallback?: (token: string) => void;
|
|
10
|
-
includeTools?: boolean;
|
|
11
|
-
}
|
|
12
|
-
export interface StructuredAIOptions<T> extends Omit<AIOptions, 'streamCallback'> {
|
|
13
|
-
schema: z.ZodSchema<T>;
|
|
14
|
-
schemaName?: string;
|
|
15
|
-
schemaDescription?: string;
|
|
16
|
-
}
|
|
17
|
-
export interface StreamStructuredAIOptions<T> extends StructuredAIOptions<T> {
|
|
18
|
-
onPartialObject?: (partialObject: unknown) => void;
|
|
19
|
-
}
|
|
20
|
-
export declare function getDefaultAIProvider(): AIProvider;
|
|
21
|
-
export declare function getDefaultModel(provider: AIProvider): string;
|
|
22
|
-
export declare function generateTextWithAI(prompt: string, options?: AIOptions): Promise<string>;
|
|
23
|
-
export declare function streamTextWithAI(prompt: string, options?: AIOptions): AsyncGenerator<string>;
|
|
24
|
-
/**
|
|
25
|
-
* Generates text using streaming and collects the full response.
|
|
26
|
-
* Optionally calls a stream callback for each token if provided.
|
|
27
|
-
* Always returns the complete collected response.
|
|
28
|
-
*/
|
|
29
|
-
export declare function generateTextStreamingWithAI(prompt: string, options?: AIOptions): Promise<string>;
|
|
30
|
-
export declare function generateTextWithToolsAI(prompt: string, options?: AIOptions): Promise<{
|
|
31
|
-
text: string;
|
|
32
|
-
toolCalls?: unknown[];
|
|
33
|
-
}>;
|
|
34
|
-
export declare function generateTextWithImageAI(text: string, imageBase64: string, options?: AIOptions): Promise<string>;
|
|
35
|
-
export declare function getAvailableProviders(): AIProvider[];
|
|
36
|
-
export declare function generateStructuredDataWithAI<T>(prompt: string, options: StructuredAIOptions<T>): Promise<T>;
|
|
37
|
-
export declare function streamStructuredDataWithAI<T>(prompt: string, options: StreamStructuredAIOptions<T>): Promise<T>;
|
|
38
|
-
export { z };
|
|
39
|
-
export { server as mcpServer, registerTool, registerTools, startServer, isServerStarted, getRegisteredTools, getRegisteredToolsForAI, getToolHandler, getSchemaByName, executeRegisteredTool, type ToolHandler, type RegisteredTool, } from './mcp-server';
|
|
1
|
+
export * from './node/index.js';
|
|
40
2
|
//# sourceMappingURL=index.d.ts.map
|
package/dist/src/index.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/index.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/index.ts"],"names":[],"mappings":"AAAA,cAAc,iBAAiB,CAAC"}
|