@wabot-dev/framework 0.1.0-beta.11 → 0.1.0-beta.13
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/dist/src/ai/claude/ClaudeChatBotAdapter.js +115 -0
- package/dist/src/channels/whatsapp/WhatsApp.js +2 -2
- package/dist/src/channels/whatsapp/WhatsAppSender.js +10 -1
- package/dist/src/channels/whatsapp/WhatsAppSenderByCloudApi.js +3 -9
- package/dist/src/channels/whatsapp/WhatsAppSenderByDevConnection.js +6 -11
- package/dist/src/core/{Persistent.js → Entity.js} +24 -9
- package/dist/src/core/Storable.js +8 -0
- package/dist/src/core/chat/Chat.js +2 -2
- package/dist/src/core/chat/ChatItem.js +2 -2
- package/dist/src/core/user/User.js +2 -2
- package/dist/src/error/CustomError.js +1 -0
- package/dist/src/index.d.ts +250 -181
- package/dist/src/index.js +13 -9
- package/dist/src/node_modules/@anthropic-ai/sdk/_vendor/partial-json-parser/parser.js +221 -0
- package/dist/src/node_modules/@anthropic-ai/sdk/client.js +540 -0
- package/dist/src/node_modules/@anthropic-ai/sdk/core/api-promise.js +74 -0
- package/dist/src/node_modules/@anthropic-ai/sdk/core/error.js +100 -0
- package/dist/src/node_modules/@anthropic-ai/sdk/core/pagination.js +119 -0
- package/dist/src/node_modules/@anthropic-ai/sdk/core/resource.js +8 -0
- package/dist/src/node_modules/@anthropic-ai/sdk/core/streaming.js +283 -0
- package/dist/src/node_modules/@anthropic-ai/sdk/internal/constants.js +16 -0
- package/dist/src/node_modules/@anthropic-ai/sdk/internal/decoders/jsonl.js +37 -0
- package/dist/src/node_modules/@anthropic-ai/sdk/internal/decoders/line.js +110 -0
- package/dist/src/node_modules/@anthropic-ai/sdk/internal/detect-platform.js +159 -0
- package/dist/src/node_modules/@anthropic-ai/sdk/internal/errors.js +37 -0
- package/dist/src/node_modules/@anthropic-ai/sdk/internal/headers.js +71 -0
- package/dist/src/node_modules/@anthropic-ai/sdk/internal/parse.js +53 -0
- package/dist/src/node_modules/@anthropic-ai/sdk/internal/request-options.js +11 -0
- package/dist/src/node_modules/@anthropic-ai/sdk/internal/shims.js +86 -0
- package/dist/src/node_modules/@anthropic-ai/sdk/internal/to-file.js +94 -0
- package/dist/src/node_modules/@anthropic-ai/sdk/internal/tslib.js +14 -0
- package/dist/src/node_modules/@anthropic-ai/sdk/internal/uploads.js +113 -0
- package/dist/src/node_modules/@anthropic-ai/sdk/internal/utils/bytes.js +27 -0
- package/dist/src/node_modules/@anthropic-ai/sdk/internal/utils/env.js +19 -0
- package/dist/src/node_modules/@anthropic-ai/sdk/internal/utils/log.js +82 -0
- package/dist/src/node_modules/@anthropic-ai/sdk/internal/utils/path.js +76 -0
- package/dist/src/node_modules/@anthropic-ai/sdk/internal/utils/sleep.js +4 -0
- package/dist/src/node_modules/@anthropic-ai/sdk/internal/utils/uuid.js +16 -0
- package/dist/src/node_modules/@anthropic-ai/sdk/internal/utils/values.js +48 -0
- package/dist/src/node_modules/@anthropic-ai/sdk/lib/BetaMessageStream.js +588 -0
- package/dist/src/node_modules/@anthropic-ai/sdk/lib/MessageStream.js +582 -0
- package/dist/src/node_modules/@anthropic-ai/sdk/resources/beta/beta.js +19 -0
- package/dist/src/node_modules/@anthropic-ai/sdk/resources/beta/files.js +120 -0
- package/dist/src/node_modules/@anthropic-ai/sdk/resources/beta/messages/batches.js +202 -0
- package/dist/src/node_modules/@anthropic-ai/sdk/resources/beta/messages/messages.js +85 -0
- package/dist/src/node_modules/@anthropic-ai/sdk/resources/beta/models.js +58 -0
- package/dist/src/node_modules/@anthropic-ai/sdk/resources/completions.js +21 -0
- package/dist/src/node_modules/@anthropic-ai/sdk/resources/messages/batches.js +151 -0
- package/dist/src/node_modules/@anthropic-ai/sdk/resources/messages/messages.js +71 -0
- package/dist/src/node_modules/@anthropic-ai/sdk/resources/models.js +43 -0
- package/dist/src/node_modules/@anthropic-ai/sdk/version.js +3 -0
- package/dist/src/pre-made/repository/chat/ram/RamChatRepository.js +1 -1
- package/dist/src/repository/pg/PgCrudRepository.js +2 -2
- package/dist/src/repository/pg/PgRepositoryBase.js +2 -2
- package/dist/src/rest-controller/metadata/@middleware.js +16 -0
- package/dist/src/rest-controller/metadata/RestControllerMetadataStore.js +13 -0
- package/dist/src/rest-controller/runRestControllers.js +30 -22
- package/dist/src/server/prepareChatContainer.js +2 -2
- package/dist/src/validation/metadata/@isModel.js +18 -0
- package/dist/src/validation/validators/validateModel.js +2 -6
- package/package.json +2 -1
|
@@ -0,0 +1,71 @@
|
|
|
1
|
+
import { APIResource } from '../../core/resource.js';
|
|
2
|
+
import { MessageStream } from '../../lib/MessageStream.js';
|
|
3
|
+
import { Batches } from './batches.js';
|
|
4
|
+
import { MODEL_NONSTREAMING_TOKENS } from '../../internal/constants.js';
|
|
5
|
+
|
|
6
|
+
// File generated from our OpenAPI spec by Stainless. See CONTRIBUTING.md for details.
|
|
7
|
+
class Messages extends APIResource {
|
|
8
|
+
constructor() {
|
|
9
|
+
super(...arguments);
|
|
10
|
+
this.batches = new Batches(this._client);
|
|
11
|
+
}
|
|
12
|
+
create(body, options) {
|
|
13
|
+
if (body.model in DEPRECATED_MODELS) {
|
|
14
|
+
console.warn(`The model '${body.model}' is deprecated and will reach end-of-life on ${DEPRECATED_MODELS[body.model]}\nPlease migrate to a newer model. Visit https://docs.anthropic.com/en/docs/resources/model-deprecations for more information.`);
|
|
15
|
+
}
|
|
16
|
+
let timeout = this._client._options.timeout;
|
|
17
|
+
if (!body.stream && timeout == null) {
|
|
18
|
+
const maxNonstreamingTokens = MODEL_NONSTREAMING_TOKENS[body.model] ?? undefined;
|
|
19
|
+
timeout = this._client.calculateNonstreamingTimeout(body.max_tokens, maxNonstreamingTokens);
|
|
20
|
+
}
|
|
21
|
+
return this._client.post('/v1/messages', {
|
|
22
|
+
body,
|
|
23
|
+
timeout: timeout ?? 600000,
|
|
24
|
+
...options,
|
|
25
|
+
stream: body.stream ?? false,
|
|
26
|
+
});
|
|
27
|
+
}
|
|
28
|
+
/**
|
|
29
|
+
* Create a Message stream
|
|
30
|
+
*/
|
|
31
|
+
stream(body, options) {
|
|
32
|
+
return MessageStream.createMessage(this, body, options);
|
|
33
|
+
}
|
|
34
|
+
/**
|
|
35
|
+
* Count the number of tokens in a Message.
|
|
36
|
+
*
|
|
37
|
+
* The Token Count API can be used to count the number of tokens in a Message,
|
|
38
|
+
* including tools, images, and documents, without creating it.
|
|
39
|
+
*
|
|
40
|
+
* Learn more about token counting in our
|
|
41
|
+
* [user guide](/en/docs/build-with-claude/token-counting)
|
|
42
|
+
*
|
|
43
|
+
* @example
|
|
44
|
+
* ```ts
|
|
45
|
+
* const messageTokensCount =
|
|
46
|
+
* await client.messages.countTokens({
|
|
47
|
+
* messages: [{ content: 'string', role: 'user' }],
|
|
48
|
+
* model: 'claude-3-7-sonnet-latest',
|
|
49
|
+
* });
|
|
50
|
+
* ```
|
|
51
|
+
*/
|
|
52
|
+
countTokens(body, options) {
|
|
53
|
+
return this._client.post('/v1/messages/count_tokens', { body, ...options });
|
|
54
|
+
}
|
|
55
|
+
}
|
|
56
|
+
const DEPRECATED_MODELS = {
|
|
57
|
+
'claude-1.3': 'November 6th, 2024',
|
|
58
|
+
'claude-1.3-100k': 'November 6th, 2024',
|
|
59
|
+
'claude-instant-1.1': 'November 6th, 2024',
|
|
60
|
+
'claude-instant-1.1-100k': 'November 6th, 2024',
|
|
61
|
+
'claude-instant-1.2': 'November 6th, 2024',
|
|
62
|
+
'claude-3-sonnet-20240229': 'July 21st, 2025',
|
|
63
|
+
'claude-3-opus-20240229': 'January 5th, 2026',
|
|
64
|
+
'claude-2.1': 'July 21st, 2025',
|
|
65
|
+
'claude-2.0': 'July 21st, 2025',
|
|
66
|
+
'claude-3-5-sonnet-20241022': 'October 22, 2025',
|
|
67
|
+
'claude-3-5-sonnet-20240620': 'October 22, 2025',
|
|
68
|
+
};
|
|
69
|
+
Messages.Batches = Batches;
|
|
70
|
+
|
|
71
|
+
export { Messages };
|
|
@@ -0,0 +1,43 @@
|
|
|
1
|
+
import { APIResource } from '../core/resource.js';
|
|
2
|
+
import { Page } from '../core/pagination.js';
|
|
3
|
+
import { buildHeaders } from '../internal/headers.js';
|
|
4
|
+
import { path } from '../internal/utils/path.js';
|
|
5
|
+
|
|
6
|
+
// File generated from our OpenAPI spec by Stainless. See CONTRIBUTING.md for details.
|
|
7
|
+
class Models extends APIResource {
|
|
8
|
+
/**
|
|
9
|
+
* Get a specific model.
|
|
10
|
+
*
|
|
11
|
+
* The Models API response can be used to determine information about a specific
|
|
12
|
+
* model or resolve a model alias to a model ID.
|
|
13
|
+
*/
|
|
14
|
+
retrieve(modelID, params = {}, options) {
|
|
15
|
+
const { betas } = params ?? {};
|
|
16
|
+
return this._client.get(path `/v1/models/${modelID}`, {
|
|
17
|
+
...options,
|
|
18
|
+
headers: buildHeaders([
|
|
19
|
+
{ ...(betas?.toString() != null ? { 'anthropic-beta': betas?.toString() } : undefined) },
|
|
20
|
+
options?.headers,
|
|
21
|
+
]),
|
|
22
|
+
});
|
|
23
|
+
}
|
|
24
|
+
/**
|
|
25
|
+
* List available models.
|
|
26
|
+
*
|
|
27
|
+
* The Models API response can be used to determine which models are available for
|
|
28
|
+
* use in the API. More recently released models are listed first.
|
|
29
|
+
*/
|
|
30
|
+
list(params = {}, options) {
|
|
31
|
+
const { betas, ...query } = params ?? {};
|
|
32
|
+
return this._client.getAPIList('/v1/models', (Page), {
|
|
33
|
+
query,
|
|
34
|
+
...options,
|
|
35
|
+
headers: buildHeaders([
|
|
36
|
+
{ ...(betas?.toString() != null ? { 'anthropic-beta': betas?.toString() } : undefined) },
|
|
37
|
+
options?.headers,
|
|
38
|
+
]),
|
|
39
|
+
});
|
|
40
|
+
}
|
|
41
|
+
}
|
|
42
|
+
|
|
43
|
+
export { Models };
|
|
@@ -57,10 +57,10 @@ class PgCrudRepository extends PgRepositoryBase {
|
|
|
57
57
|
SET ${this.updates}
|
|
58
58
|
WHERE id = $${this.columnsList.length + 1}
|
|
59
59
|
`;
|
|
60
|
-
await this.exec(sql, [...this.values(item), item.
|
|
60
|
+
await this.exec(sql, [...this.values(item), item.id]);
|
|
61
61
|
}
|
|
62
62
|
async discard(item) {
|
|
63
|
-
const _item = await this.find(item.
|
|
63
|
+
const _item = await this.find(item.id);
|
|
64
64
|
if (!_item) {
|
|
65
65
|
throw new Error('Not found');
|
|
66
66
|
}
|
|
@@ -0,0 +1,16 @@
|
|
|
1
|
+
import { container } from '../../injection/index.js';
|
|
2
|
+
import { RestControllerMetadataStore } from './RestControllerMetadataStore.js';
|
|
3
|
+
|
|
4
|
+
function middleware(middlewareConstructor) {
|
|
5
|
+
return function (target, propertyKey) {
|
|
6
|
+
const functionName = propertyKey.toString();
|
|
7
|
+
const store = container.resolve(RestControllerMetadataStore);
|
|
8
|
+
store.saveMiddlewareMetadata({
|
|
9
|
+
controllerConstructor: target.constructor,
|
|
10
|
+
functionName,
|
|
11
|
+
middlewareConstructor: middlewareConstructor,
|
|
12
|
+
});
|
|
13
|
+
};
|
|
14
|
+
}
|
|
15
|
+
|
|
16
|
+
export { middleware };
|
|
@@ -3,6 +3,7 @@ import { singleton } from 'tsyringe';
|
|
|
3
3
|
|
|
4
4
|
let RestControllerMetadataStore = class RestControllerMetadataStore {
|
|
5
5
|
endPoints = new Map();
|
|
6
|
+
middlewares = new Map();
|
|
6
7
|
restControllers = new Map();
|
|
7
8
|
saveControllerMetadata(controllerMetadata) {
|
|
8
9
|
this.restControllers.set(controllerMetadata.controllerConstructor, controllerMetadata);
|
|
@@ -14,6 +15,17 @@ let RestControllerMetadataStore = class RestControllerMetadataStore {
|
|
|
14
15
|
}
|
|
15
16
|
controllerEndPoints.set(endPointMetadata.functionName, endPointMetadata);
|
|
16
17
|
}
|
|
18
|
+
saveMiddlewareMetadata(middlewareMetadata) {
|
|
19
|
+
let controllerMiddlewares = this.middlewares.get(middlewareMetadata.controllerConstructor);
|
|
20
|
+
if (!controllerMiddlewares) {
|
|
21
|
+
this.middlewares.set(middlewareMetadata.controllerConstructor, (controllerMiddlewares = new Map()));
|
|
22
|
+
}
|
|
23
|
+
let methodMiddlewares = controllerMiddlewares.get(middlewareMetadata.functionName);
|
|
24
|
+
if (!methodMiddlewares) {
|
|
25
|
+
controllerMiddlewares.set(middlewareMetadata.functionName, (methodMiddlewares = []));
|
|
26
|
+
}
|
|
27
|
+
methodMiddlewares.unshift(middlewareMetadata);
|
|
28
|
+
}
|
|
17
29
|
getControllerEndPointsInfo(controllerConstructor) {
|
|
18
30
|
const controller = this.restControllers.get(controllerConstructor);
|
|
19
31
|
if (!controller) {
|
|
@@ -26,6 +38,7 @@ let RestControllerMetadataStore = class RestControllerMetadataStore {
|
|
|
26
38
|
}
|
|
27
39
|
return [...endPoints.values()].map((endPoint) => ({
|
|
28
40
|
...endPoint,
|
|
41
|
+
middlewares: this.middlewares.get(endPoint.controllerConstructor)?.get(endPoint.functionName) ?? [],
|
|
29
42
|
controller: this.restControllers.get(endPoint.controllerConstructor),
|
|
30
43
|
}));
|
|
31
44
|
}
|
|
@@ -10,19 +10,20 @@ import '../channels/socket/SocketChannelConfig.js';
|
|
|
10
10
|
import '../channels/socket/SocketServerProvider.js';
|
|
11
11
|
import '../channels/telegram/TelegramChannel.js';
|
|
12
12
|
import '../channels/whatsapp/WhatsAppChannel.js';
|
|
13
|
+
import '../channels/whatsapp/EnvWhatsAppRepository.js';
|
|
14
|
+
import '../channels/whatsapp/PgWhatsAppRepository.js';
|
|
13
15
|
import '../core/chat/repository/IChatRepository.js';
|
|
14
16
|
import '../core/user/IUserRepository.js';
|
|
15
17
|
import '../channels/whatsapp/WhatsAppReceiverByDevConnection.js';
|
|
16
18
|
import '../channels/whatsapp/WhatsAppReceiverByWebHook.js';
|
|
17
|
-
import '../channels/whatsapp/WhatsAppSenderByDevConnection.js';
|
|
18
19
|
import '../channels/whatsapp/WhatsAppSenderByCloudApi.js';
|
|
19
|
-
import '../channels/whatsapp/
|
|
20
|
-
import '../channels/whatsapp/EnvWhatsAppRepository.js';
|
|
20
|
+
import '../channels/whatsapp/WhatsAppSenderByDevConnection.js';
|
|
21
21
|
import { Logger } from '../logger/Logger.js';
|
|
22
22
|
import '../validation/metadata/ValidationMetadataStore.js';
|
|
23
23
|
import { validate } from '../validation/validate.js';
|
|
24
24
|
import path from 'path';
|
|
25
25
|
import { RestControllerMetadataStore } from './metadata/RestControllerMetadataStore.js';
|
|
26
|
+
import { CustomError } from '../error/CustomError.js';
|
|
26
27
|
|
|
27
28
|
function buildRequest(req) {
|
|
28
29
|
return Object.assign({}, req.body, req.query, req.params);
|
|
@@ -40,42 +41,49 @@ function runRestControllers(controllers, container) {
|
|
|
40
41
|
logger.info(`config ${endPoint.method.toUpperCase()} ${route}`);
|
|
41
42
|
expressApp[method](route, async (req, res) => {
|
|
42
43
|
const requestContainer = container.createChildContainer();
|
|
43
|
-
|
|
44
|
-
|
|
45
|
-
|
|
46
|
-
|
|
47
|
-
const paramType = endPoint.paramsTypes[paramIndex];
|
|
48
|
-
if (defaultArgFound) {
|
|
49
|
-
throw new Error(`Cant determine de parameter ${paramIndex} value`);
|
|
44
|
+
try {
|
|
45
|
+
const middlewares = endPoint.middlewares.map((x) => requestContainer.resolve(x.middlewareConstructor));
|
|
46
|
+
for (const middleware of middlewares) {
|
|
47
|
+
await middleware.handle(req, res, requestContainer);
|
|
50
48
|
}
|
|
51
|
-
|
|
52
|
-
|
|
53
|
-
|
|
54
|
-
|
|
55
|
-
|
|
56
|
-
|
|
49
|
+
const controllerInstance = requestContainer.resolve(endPoint.controllerConstructor);
|
|
50
|
+
const endPointArgs = [];
|
|
51
|
+
let defaultArgFound = false;
|
|
52
|
+
for (let paramIndex = 0; paramIndex < endPoint.paramsTypes.length; paramIndex++) {
|
|
53
|
+
const paramType = endPoint.paramsTypes[paramIndex];
|
|
54
|
+
if (defaultArgFound) {
|
|
55
|
+
throw new Error(`Cant determine de parameter ${paramIndex} value`);
|
|
56
|
+
}
|
|
57
|
+
defaultArgFound = true;
|
|
58
|
+
if (typeof paramType === 'function') {
|
|
59
|
+
const { value, error } = validate(buildRequest(req), paramType);
|
|
60
|
+
if (error) {
|
|
61
|
+
throw new CustomError({ httpCode: 400, message: error.description, info: error });
|
|
62
|
+
}
|
|
63
|
+
endPointArgs.push(value);
|
|
57
64
|
}
|
|
58
|
-
endPointArgs.push(value);
|
|
59
65
|
}
|
|
60
|
-
}
|
|
61
|
-
try {
|
|
62
66
|
const response = await controllerInstance[endPoint.functionName].apply(controllerInstance, endPointArgs);
|
|
63
67
|
res.status(200).json(response);
|
|
64
68
|
}
|
|
65
69
|
catch (err) {
|
|
66
70
|
if (err instanceof Error) {
|
|
67
71
|
const keys = Object.keys(err).filter((key) => !['message', 'stack'].includes(key));
|
|
68
|
-
const info = keys.reduce((acc, key) => {
|
|
72
|
+
const { httpCode, ...info } = keys.reduce((acc, key) => {
|
|
69
73
|
acc[key] = err[key];
|
|
70
74
|
return acc;
|
|
71
75
|
}, {});
|
|
72
|
-
res
|
|
76
|
+
res
|
|
77
|
+
.status(httpCode ?? 500)
|
|
78
|
+
.json({ error: { message: err.message, stack: err.stack, ...info } });
|
|
73
79
|
}
|
|
74
80
|
else {
|
|
75
81
|
res.status(500).json({ error: { message: 'Unknown error' } });
|
|
76
82
|
}
|
|
77
83
|
}
|
|
78
|
-
|
|
84
|
+
finally {
|
|
85
|
+
requestContainer.dispose();
|
|
86
|
+
}
|
|
79
87
|
});
|
|
80
88
|
});
|
|
81
89
|
});
|
|
@@ -19,9 +19,9 @@ async function prepareChatContainer(container, context, mindsetCtor) {
|
|
|
19
19
|
useValue: new MessageContext(context.message, context.chat, context.user),
|
|
20
20
|
});
|
|
21
21
|
const chatRepository = container.resolve(ChatRepository);
|
|
22
|
-
const chatMemory = await chatRepository.findMemory(context.chat.
|
|
22
|
+
const chatMemory = await chatRepository.findMemory(context.chat.id);
|
|
23
23
|
if (!chatMemory) {
|
|
24
|
-
throw new Error('Not found Chat Memory for Chat with Id=' + context.chat.
|
|
24
|
+
throw new Error('Not found Chat Memory for Chat with Id=' + context.chat.id);
|
|
25
25
|
}
|
|
26
26
|
chatContainer.register(ChatMemory, { useValue: chatMemory });
|
|
27
27
|
const chatBotMetadataStore = container.resolve(ChatBotMetadataStore);
|
|
@@ -0,0 +1,18 @@
|
|
|
1
|
+
import { container } from '../../injection/index.js';
|
|
2
|
+
import { validateModel } from '../validators/validateModel.js';
|
|
3
|
+
import { ValidationMetadataStore } from './ValidationMetadataStore.js';
|
|
4
|
+
|
|
5
|
+
function isModel(model) {
|
|
6
|
+
return function (target, propertyKey) {
|
|
7
|
+
const propertyName = propertyKey.toString();
|
|
8
|
+
const store = container.resolve(ValidationMetadataStore);
|
|
9
|
+
store.saveValidatorMetadata({
|
|
10
|
+
modelConstructor: target.constructor,
|
|
11
|
+
propertyName,
|
|
12
|
+
validator: validateModel,
|
|
13
|
+
validatorOptions: store.getModelValidatorsInfo(model),
|
|
14
|
+
});
|
|
15
|
+
};
|
|
16
|
+
}
|
|
17
|
+
|
|
18
|
+
export { isModel };
|
|
@@ -2,11 +2,7 @@ function validateModel(value, info) {
|
|
|
2
2
|
const result = {};
|
|
3
3
|
if (typeof value !== 'object') {
|
|
4
4
|
result.error = {
|
|
5
|
-
|
|
6
|
-
{
|
|
7
|
-
description: `the value should be an object`,
|
|
8
|
-
},
|
|
9
|
-
],
|
|
5
|
+
description: 'the value should be an object',
|
|
10
6
|
properties: [],
|
|
11
7
|
};
|
|
12
8
|
return result;
|
|
@@ -26,7 +22,7 @@ function validateModel(value, info) {
|
|
|
26
22
|
if (propertyValidatorResult.error) {
|
|
27
23
|
let resultError = result.error;
|
|
28
24
|
if (!resultError) {
|
|
29
|
-
resultError = {
|
|
25
|
+
resultError = { description: `Error on properties`, properties: [] };
|
|
30
26
|
result.error = resultError;
|
|
31
27
|
}
|
|
32
28
|
let propertyErrors = resultError.properties.find((x) => x.name === propertyName);
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@wabot-dev/framework",
|
|
3
|
-
"version": "0.1.0-beta.
|
|
3
|
+
"version": "0.1.0-beta.13",
|
|
4
4
|
"description": "Framework for IA Chat Bots",
|
|
5
5
|
"type": "module",
|
|
6
6
|
"main": "dist/src/index.js",
|
|
@@ -35,6 +35,7 @@
|
|
|
35
35
|
"typescript": "5.8.3"
|
|
36
36
|
},
|
|
37
37
|
"peerDependencies": {
|
|
38
|
+
"@anthropic-ai/sdk": "^0.60.0",
|
|
38
39
|
"@types/debug": "^4.1.12",
|
|
39
40
|
"@types/express": "^5.0.1",
|
|
40
41
|
"@types/pg": "^8.11.14",
|