From 8513b7a4ecb674ea80e47b7d35d6d81ec81327c5 Mon Sep 17 00:00:00 2001 From: fern-api <115122769+fern-api[bot]@users.noreply.github.com> Date: Tue, 6 May 2025 14:07:10 +0000 Subject: [PATCH 01/10] Release 0.8.21 --- jest.config.mjs | 2 +- package.json | 2 +- reference.md | 239 ++------ src/api/resources/agents/client/Client.ts | 113 ++-- .../agents/client/requests/AgentLogRequest.ts | 53 +- .../agents/client/requests/AgentRequest.ts | 35 +- .../client/requests/AgentsCallRequest.ts | 17 +- .../requests/AgentsCallStreamRequest.ts | 9 +- .../requests/AgentsContinueCallRequest.ts | 27 - .../AgentsContinueCallStreamRequest.ts | 25 - .../client/requests/AgentsContinueRequest.ts | 2 +- .../client/requests/ListAgentsGetRequest.ts | 6 +- .../client/requests/UpdateAgentLogRequest.ts | 15 +- .../client/requests/UpdateAgentRequest.ts | 4 +- .../resources/agents/client/requests/index.ts | 4 +- .../agents/types/AgentLogRequestAgent.ts | 13 + .../agents/types/AgentsCallRequestAgent.ts | 13 + .../types/AgentsCallStreamRequestAgent.ts | 13 + src/api/resources/agents/types/index.ts | 3 + src/api/resources/datasets/client/Client.ts | 54 +- .../client/requests/ListDatasetsGetRequest.ts | 2 +- .../resources/directories/client/Client.ts | 20 +- .../resources/evaluations/client/Client.ts | 56 +- src/api/resources/evaluators/client/Client.ts | 54 +- .../requests/ListEvaluatorsGetRequest.ts | 2 +- src/api/resources/files/client/Client.ts | 39 +- ...dyRetrieveByPathFilesRetrieveByPathPost.ts | 4 + .../requests/ListFilesFilesGetRequest.ts | 10 +- src/api/resources/flows/client/Client.ts | 58 +- .../client/requests/ListFlowsGetRequest.ts | 2 +- src/api/resources/logs/client/Client.ts | 20 +- .../client/requests/ListLogsGetRequest.ts | 6 + src/api/resources/prompts/client/Client.ts | 83 +-- .../client/requests/ListPromptsGetRequest.ts | 2 +- .../client/requests/PromptLogRequest.ts | 9 +- .../client/requests/PromptsCallRequest.ts | 9 +- .../requests/PromptsCallStreamRequest.ts | 9 +- .../prompts/types/PromptLogRequestPrompt.ts | 13 + .../prompts/types/PromptsCallRequestPrompt.ts | 13 + .../types/PromptsCallStreamRequestPrompt.ts | 13 + src/api/resources/prompts/types/index.ts | 3 + src/api/resources/tools/client/Client.ts | 74 +-- .../client/requests/ListToolsGetRequest.ts | 2 +- ...llResponse.ts => AgentContinueResponse.ts} | 4 +- ....ts => AgentContinueResponseToolChoice.ts} | 2 +- ...onse.ts => AgentContinueStreamResponse.ts} | 4 +- ... => AgentContinueStreamResponsePayload.ts} | 2 +- .../types/{ProjectSortBy.ts => FileSortBy.ts} | 4 +- src/api/types/index.ts | 10 +- .../agents/client/requests/AgentLogRequest.ts | 6 +- .../client/requests/AgentsCallRequest.ts | 6 +- .../requests/AgentsCallStreamRequest.ts | 6 +- ...allRequest.ts => AgentsContinueRequest.ts} | 8 +- ...uest.ts => AgentsContinueStreamRequest.ts} | 8 +- .../resources/agents/client/requests/index.ts | 4 +- .../agents/types/AgentLogRequestAgent.ts | 17 + .../agents/types/AgentsCallRequestAgent.ts | 17 + .../types/AgentsCallStreamRequestAgent.ts | 17 + .../resources/agents/types/index.ts | 3 + ...dyRetrieveByPathFilesRetrieveByPathPost.ts | 2 +- .../client/requests/PromptLogRequest.ts | 6 +- .../client/requests/PromptsCallRequest.ts | 6 +- .../requests/PromptsCallStreamRequest.ts | 6 +- .../prompts/types/PromptLogRequestPrompt.ts | 17 + .../prompts/types/PromptsCallRequestPrompt.ts | 17 + .../types/PromptsCallStreamRequestPrompt.ts | 17 + .../resources/prompts/types/index.ts | 3 + ...llResponse.ts => AgentContinueResponse.ts} | 14 +- ....ts => AgentContinueResponseToolChoice.ts} | 8 +- ...onse.ts => AgentContinueStreamResponse.ts} | 14 +- ... => AgentContinueStreamResponsePayload.ts} | 8 +- .../types/{ProjectSortBy.ts => FileSortBy.ts} | 4 +- src/serialization/types/index.ts | 10 +- src/version.ts | 2 +- tests/integration/decorators.test.ts | 502 --------------- tests/integration/evals.test.ts | 577 ------------------ tests/integration/fixtures.ts | 246 -------- yarn.lock | 290 ++++----- 78 files changed, 833 insertions(+), 2186 deletions(-) delete mode 100644 src/api/resources/agents/client/requests/AgentsContinueCallRequest.ts delete mode 100644 src/api/resources/agents/client/requests/AgentsContinueCallStreamRequest.ts create mode 100644 src/api/resources/agents/types/AgentLogRequestAgent.ts create mode 100644 src/api/resources/agents/types/AgentsCallRequestAgent.ts create mode 100644 src/api/resources/agents/types/AgentsCallStreamRequestAgent.ts create mode 100644 src/api/resources/prompts/types/PromptLogRequestPrompt.ts create mode 100644 src/api/resources/prompts/types/PromptsCallRequestPrompt.ts create mode 100644 src/api/resources/prompts/types/PromptsCallStreamRequestPrompt.ts rename src/api/types/{AgentContinueCallResponse.ts => AgentContinueResponse.ts} (97%) rename src/api/types/{AgentContinueCallResponseToolChoice.ts => AgentContinueResponseToolChoice.ts} (86%) rename src/api/types/{AgentContinueCallStreamResponse.ts => AgentContinueStreamResponse.ts} (71%) rename src/api/types/{AgentContinueCallStreamResponsePayload.ts => AgentContinueStreamResponsePayload.ts} (79%) rename src/api/types/{ProjectSortBy.ts => FileSortBy.ts} (66%) rename src/serialization/resources/agents/client/requests/{AgentsContinueCallRequest.ts => AgentsContinueRequest.ts} (82%) rename src/serialization/resources/agents/client/requests/{AgentsContinueCallStreamRequest.ts => AgentsContinueStreamRequest.ts} (80%) create mode 100644 src/serialization/resources/agents/types/AgentLogRequestAgent.ts create mode 100644 src/serialization/resources/agents/types/AgentsCallRequestAgent.ts create mode 100644 src/serialization/resources/agents/types/AgentsCallStreamRequestAgent.ts create mode 100644 src/serialization/resources/prompts/types/PromptLogRequestPrompt.ts create mode 100644 src/serialization/resources/prompts/types/PromptsCallRequestPrompt.ts create mode 100644 src/serialization/resources/prompts/types/PromptsCallStreamRequestPrompt.ts rename src/serialization/types/{AgentContinueCallResponse.ts => AgentContinueResponse.ts} (92%) rename src/serialization/types/{AgentContinueCallResponseToolChoice.ts => AgentContinueResponseToolChoice.ts} (67%) rename src/serialization/types/{AgentContinueCallStreamResponse.ts => AgentContinueStreamResponse.ts} (57%) rename src/serialization/types/{AgentContinueCallStreamResponsePayload.ts => AgentContinueStreamResponsePayload.ts} (67%) rename src/serialization/types/{ProjectSortBy.ts => FileSortBy.ts} (68%) delete mode 100644 tests/integration/decorators.test.ts delete mode 100644 tests/integration/evals.test.ts delete mode 100644 tests/integration/fixtures.ts diff --git a/jest.config.mjs b/jest.config.mjs index 9eb4a4af..c7248211 100644 --- a/jest.config.mjs +++ b/jest.config.mjs @@ -3,6 +3,6 @@ export default { preset: "ts-jest", testEnvironment: "node", moduleNameMapper: { - "^(?!.*node_modules)(.+)\\.js$": "$1", + "(.+)\.js$": "$1", }, }; diff --git a/package.json b/package.json index ceeadcf3..c4d382d5 100644 --- a/package.json +++ b/package.json @@ -1,6 +1,6 @@ { "name": "humanloop", - "version": "0.8.21-beta1", + "version": "0.8.21", "private": false, "repository": "https://github.com/humanloop/humanloop-node", "main": "./index.js", diff --git a/reference.md b/reference.md index afc2e70e..e2a9814b 100644 --- a/reference.md +++ b/reference.md @@ -1342,7 +1342,7 @@ await client.prompts.updateMonitoring("pr_30gco7dx6JDq4200GVOHa", { -
client.prompts.serialize(id, { ...params }) -> void +
client.prompts.serialize(id, { ...params }) -> string
@@ -5883,52 +5883,7 @@ in order to trigger Evaluators.
```typescript -await client.agents.log({ - path: "Banking/Teller Agent", - agent: { - provider: "anthropic", - endpoint: "chat", - model: "claude-3-7-sonnet-latest", - reasoningEffort: 1024, - template: [ - { - role: "system", - content: "You are a helpful digital assistant, helping users navigate our digital banking platform.", - }, - ], - maxIterations: 3, - tools: [ - { - type: "file", - link: { - fileId: "pr_1234567890", - versionId: "prv_1234567890", - }, - onAgentCall: "continue", - }, - { - type: "inline", - jsonSchema: { - name: "stop", - description: "Call this tool when you have finished your task.", - parameters: { - type: "object", - properties: { - output: { - type: "string", - description: "The final output to return to the user.", - }, - }, - additionalProperties: false, - required: ["output"], - }, - strict: true, - }, - onAgentCall: "stop", - }, - ], - }, -}); +await client.agents.log(); ```
@@ -5963,7 +5918,7 @@ await client.agents.log({
-
client.agents.updateLog(id, logId, { ...params }) -> Humanloop.AgentLogResponse +
client.agents.updateLog(id, logId, { ...params }) -> Humanloop.LogResponse
@@ -5993,23 +5948,7 @@ Update the details of a Log with the given ID.
```typescript -await client.agents.updateLog("ag_1234567890", "log_1234567890", { - messages: [ - { - role: "user", - content: "I need to withdraw $1000", - }, - { - role: "assistant", - content: "Of course! Would you like to use your savings or checking account?", - }, - ], - outputMessage: { - role: "assistant", - content: "I'm sorry, I can't help with that.", - }, - logStatus: "complete", -}); +await client.agents.updateLog("id", "log_id"); ```
@@ -6072,21 +6011,18 @@ await client.agents.updateLog("ag_1234567890", "log_1234567890", {
-Call an Agent. The Agent will run on the Humanloop runtime and return a completed Agent Log. - -If the Agent requires a tool call that cannot be ran by Humanloop, execution will halt. To continue, -pass the ID of the incomplete Log and the required tool call to the /agents/continue endpoint. +Call an Agent. -The agent will run for the maximum number of iterations, or until it encounters a stop condition, -according to its configuration. +Calling an Agent calls the model provider before logging +the request, responses and metadata to Humanloop. You can use query parameters `version_id`, or `environment`, to target an existing version of the Agent. Otherwise the default deployed version will be chosen. Instead of targeting an existing version explicitly, you can instead pass in -Agent details in the request body. A new version is created if it does not match -any existing ones. This is helpful in the case where you are storing or deriving -your Agent details in code. +Agent details in the request body. In this case, we will check if the details correspond +to an existing version of the Agent. If they do not, we will create a new version. This is helpful +in the case where you are storing or deriving your Agent details in code.
@@ -6152,21 +6088,18 @@ for await (const item of response) {
-Call an Agent. The Agent will run on the Humanloop runtime and return a completed Agent Log. +Call an Agent. -If the Agent requires a tool call that cannot be ran by Humanloop, execution will halt. To continue, -pass the ID of the incomplete Log and the required tool call to the /agents/continue endpoint. - -The agent will run for the maximum number of iterations, or until it encounters a stop condition, -according to its configuration. +Calling an Agent calls the model provider before logging +the request, responses and metadata to Humanloop. You can use query parameters `version_id`, or `environment`, to target an existing version of the Agent. Otherwise the default deployed version will be chosen. Instead of targeting an existing version explicitly, you can instead pass in -Agent details in the request body. A new version is created if it does not match -any existing ones. This is helpful in the case where you are storing or deriving -your Agent details in code. +Agent details in the request body. In this case, we will check if the details correspond +to an existing version of the Agent. If they do not, we will create a new version. This is helpful +in the case where you are storing or deriving your Agent details in code.
@@ -6182,15 +6115,7 @@ your Agent details in code.
```typescript -await client.agents.call({ - path: "Banking/Teller Agent", - messages: [ - { - role: "user", - content: "I'd like to deposit $1000 to my savings account from my checking account.", - }, - ], -}); +await client.agents.call({}); ```
@@ -6225,7 +6150,7 @@ await client.agents.call({
-
client.agents.continueCallStream({ ...params }) -> core.Stream +
client.agents.continueStream({ ...params }) -> core.Stream
@@ -6239,14 +6164,14 @@ await client.agents.call({ Continue an incomplete Agent call. -This endpoint allows continuing an existing incomplete Agent call, by passing the tool call -requested by the Agent. The Agent will resume processing from where it left off. - -The messages in the request will be appended to the original messages in the Log. You do not -have to provide the previous conversation history. +This endpoint allows continuing an existing incomplete Agent call, using the context +from the previous interaction. The Agent will resume processing from where it left off. The original log must be in an incomplete state to be continued. +The messages in the request will be appended +to the original messages in the log. +
@@ -6261,7 +6186,7 @@ The original log must be in an incomplete state to be continued.
```typescript -const response = await client.agents.continueCallStream({ +const response = await client.agents.continueStream({ logId: "log_id", messages: [ { @@ -6287,7 +6212,7 @@ for await (const item of response) {
-**request:** `Humanloop.AgentsContinueCallStreamRequest` +**request:** `Humanloop.AgentsContinueStreamRequest`
@@ -6306,7 +6231,7 @@ for await (const item of response) {
-
client.agents.continueCall({ ...params }) -> Humanloop.AgentContinueCallResponse +
client.agents.continue({ ...params }) -> Humanloop.AgentContinueResponse
@@ -6320,14 +6245,14 @@ for await (const item of response) { Continue an incomplete Agent call. -This endpoint allows continuing an existing incomplete Agent call, by passing the tool call -requested by the Agent. The Agent will resume processing from where it left off. - -The messages in the request will be appended to the original messages in the Log. You do not -have to provide the previous conversation history. +This endpoint allows continuing an existing incomplete Agent call, using the context +from the previous interaction. The Agent will resume processing from where it left off. The original log must be in an incomplete state to be continued. +The messages in the request will be appended +to the original messages in the log. +
@@ -6342,13 +6267,11 @@ The original log must be in an incomplete state to be continued.
```typescript -await client.agents.continueCall({ - logId: "log_1234567890", +await client.agents.continue({ + logId: "log_id", messages: [ { - role: "tool", - content: '{"type": "checking", "balance": 5200}', - toolCallId: "tc_1234567890", + role: "user", }, ], }); @@ -6367,7 +6290,7 @@ await client.agents.continueCall({
-**request:** `Humanloop.AgentsContinueCallRequest` +**request:** `Humanloop.AgentsContinueRequest`
@@ -6386,7 +6309,7 @@ await client.agents.continueCall({
-
client.agents.list({ ...params }) -> core.Page +
client.agents.list({ ...params }) -> Humanloop.PaginatedDataAgentResponse
@@ -6414,20 +6337,7 @@ Get a list of all Agents.
```typescript -const response = await client.agents.list({ - size: 1, -}); -for await (const item of response) { - console.log(item); -} - -// Or you can manually iterate page-by-page -const page = await client.agents.list({ - size: 1, -}); -while (page.hasNextPage()) { - page = page.getNextPage(); -} +await client.agents.list(); ```
@@ -6498,42 +6408,7 @@ that already exists will result in a 409 Conflict error. ```typescript await client.agents.upsert({ - path: "Banking/Teller Agent", - provider: "anthropic", - endpoint: "chat", - model: "claude-3-7-sonnet-latest", - reasoningEffort: 1024, - template: [ - { - role: "system", - content: "You are a helpful digital assistant, helping users navigate our digital banking platform.", - }, - ], - maxIterations: 3, - tools: [ - { - type: "inline", - jsonSchema: { - name: "stop", - description: "Call this tool when you have finished your task.", - parameters: { - type: "object", - properties: { - output: { - type: "string", - description: "The final output to return to the user.", - }, - }, - additionalProperties: false, - required: ["output"], - }, - strict: true, - }, - onAgentCall: "stop", - }, - ], - versionName: "teller-agent-v1", - versionDescription: "Initial version", + model: "model", }); ``` @@ -6597,7 +6472,7 @@ Delete a version of the Agent.
```typescript -await client.agents.deleteAgentVersion("ag_1234567890", "agv_1234567890"); +await client.agents.deleteAgentVersion("id", "version_id"); ```
@@ -6668,10 +6543,7 @@ Update the name or description of the Agent version.
```typescript -await client.agents.patchAgentVersion("ag_1234567890", "agv_1234567890", { - name: "teller-agent-v2", - description: "Updated version", -}); +await client.agents.patchAgentVersion("id", "version_id", {}); ```
@@ -6753,7 +6625,7 @@ By default, the deployed version of the Agent is returned. Use the query paramet
```typescript -await client.agents.get("ag_1234567890"); +await client.agents.get("id"); ```
@@ -6824,7 +6696,7 @@ Delete the Agent with the given ID.
```typescript -await client.agents.delete("ag_1234567890"); +await client.agents.delete("id"); ```
@@ -6887,9 +6759,7 @@ Move the Agent to a different path or change the name.
```typescript -await client.agents.move("ag_1234567890", { - path: "new directory/new name", -}); +await client.agents.move("id"); ```
@@ -6960,7 +6830,7 @@ Get a list of all the versions of a Agent.
```typescript -await client.agents.listVersions("ag_1234567890"); +await client.agents.listVersions("id"); ```
@@ -7189,7 +7059,7 @@ List all Environments and their deployed versions for the Agent.
```typescript -await client.agents.listEnvironments("ag_1234567890"); +await client.agents.listEnvironments("id"); ```
@@ -7255,22 +7125,7 @@ within the Agent for monitoring purposes.
```typescript -await client.agents.updateMonitoring("ag_1234567890", { - activate: [ - { - evaluatorVersionId: "ev_1234567890", - }, - { - evaluatorId: "ev_2345678901", - environmentId: "env_1234567890", - }, - ], - deactivate: [ - { - evaluatorVersionId: "ev_0987654321", - }, - ], -}); +await client.agents.updateMonitoring("id", {}); ```
@@ -7313,7 +7168,7 @@ await client.agents.updateMonitoring("ag_1234567890", {
-
client.agents.serialize(id, { ...params }) -> void +
client.agents.serialize(id, { ...params }) -> string
diff --git a/src/api/resources/agents/client/Client.ts b/src/api/resources/agents/client/Client.ts index 842af06d..d222a063 100644 --- a/src/api/resources/agents/client/Client.ts +++ b/src/api/resources/agents/client/Client.ts @@ -76,8 +76,8 @@ export class Agents { headers: { "X-Fern-Language": "JavaScript", "X-Fern-SDK-Name": "humanloop", - "X-Fern-SDK-Version": "0.8.21-beta1", - "User-Agent": "humanloop/0.8.21-beta1", + "X-Fern-SDK-Version": "0.8.21", + "User-Agent": "humanloop/0.8.21", "X-Fern-Runtime": core.RUNTIME.type, "X-Fern-Runtime-Version": core.RUNTIME.version, ...(await this._getCustomAuthorizationHeaders()), @@ -168,8 +168,8 @@ export class Agents { headers: { "X-Fern-Language": "JavaScript", "X-Fern-SDK-Name": "humanloop", - "X-Fern-SDK-Version": "0.8.21-beta1", - "User-Agent": "humanloop/0.8.21-beta1", + "X-Fern-SDK-Version": "0.8.21", + "User-Agent": "humanloop/0.8.21", "X-Fern-Runtime": core.RUNTIME.type, "X-Fern-Runtime-Version": core.RUNTIME.version, ...(await this._getCustomAuthorizationHeaders()), @@ -246,7 +246,7 @@ export class Agents { public async callStream( request: Humanloop.AgentsCallStreamRequest, requestOptions?: Agents.RequestOptions, - ): Promise> { + ): Promise> { const { versionId, environment, ..._body } = request; const _queryParams: Record = {}; if (versionId != null) { @@ -268,8 +268,8 @@ export class Agents { headers: { "X-Fern-Language": "JavaScript", "X-Fern-SDK-Name": "humanloop", - "X-Fern-SDK-Version": "0.8.21-beta1", - "User-Agent": "humanloop/0.8.21-beta1", + "X-Fern-SDK-Version": "0.8.21", + "User-Agent": "humanloop/0.8.21", "X-Fern-Runtime": core.RUNTIME.type, "X-Fern-Runtime-Version": core.RUNTIME.version, ...(await this._getCustomAuthorizationHeaders()), @@ -291,7 +291,7 @@ export class Agents { return new core.Stream({ stream: _response.body, parse: async (data) => { - return serializers.AgentContinueCallStreamResponse.parseOrThrow(data, { + return serializers.AgentCallStreamResponse.parseOrThrow(data, { unrecognizedObjectKeys: "passthrough", allowUnrecognizedUnionMembers: true, allowUnrecognizedEnumValues: true, @@ -367,7 +367,7 @@ export class Agents { public async call( request: Humanloop.AgentsCallRequest, requestOptions?: Agents.RequestOptions, - ): Promise { + ): Promise { const { versionId, environment, ..._body } = request; const _queryParams: Record = {}; if (versionId != null) { @@ -389,8 +389,8 @@ export class Agents { headers: { "X-Fern-Language": "JavaScript", "X-Fern-SDK-Name": "humanloop", - "X-Fern-SDK-Version": "0.8.21-beta1", - "User-Agent": "humanloop/0.8.21-beta1", + "X-Fern-SDK-Version": "0.8.21", + "User-Agent": "humanloop/0.8.21", "X-Fern-Runtime": core.RUNTIME.type, "X-Fern-Runtime-Version": core.RUNTIME.version, ...(await this._getCustomAuthorizationHeaders()), @@ -408,7 +408,7 @@ export class Agents { abortSignal: requestOptions?.abortSignal, }); if (_response.ok) { - return serializers.AgentContinueCallResponse.parseOrThrow(_response.body, { + return serializers.AgentCallResponse.parseOrThrow(_response.body, { unrecognizedObjectKeys: "passthrough", allowUnrecognizedUnionMembers: true, allowUnrecognizedEnumValues: true, @@ -464,9 +464,9 @@ export class Agents { * to the original messages in the log. */ public async continueStream( - request: Humanloop.AgentsContinueCallStreamRequest, + request: Humanloop.AgentsContinueStreamRequest, requestOptions?: Agents.RequestOptions, - ): Promise> { + ): Promise> { const _response = await (this._options.fetcher ?? core.fetcher)({ url: urlJoin( (await core.Supplier.get(this._options.baseUrl)) ?? @@ -478,8 +478,8 @@ export class Agents { headers: { "X-Fern-Language": "JavaScript", "X-Fern-SDK-Name": "humanloop", - "X-Fern-SDK-Version": "0.8.21-beta1", - "User-Agent": "humanloop/0.8.21-beta1", + "X-Fern-SDK-Version": "0.8.21", + "User-Agent": "humanloop/0.8.21", "X-Fern-Runtime": core.RUNTIME.type, "X-Fern-Runtime-Version": core.RUNTIME.version, ...(await this._getCustomAuthorizationHeaders()), @@ -488,7 +488,7 @@ export class Agents { contentType: "application/json", requestType: "json", body: { - ...serializers.AgentsContinueCallStreamRequest.jsonOrThrow(request, { unrecognizedObjectKeys: "strip" }), + ...serializers.AgentsContinueStreamRequest.jsonOrThrow(request, { unrecognizedObjectKeys: "strip" }), stream: true, }, responseType: "sse", @@ -500,7 +500,7 @@ export class Agents { return new core.Stream({ stream: _response.body, parse: async (data) => { - return serializers.AgentContinueCallStreamResponse.parseOrThrow(data, { + return serializers.AgentContinueStreamResponse.parseOrThrow(data, { unrecognizedObjectKeys: "passthrough", allowUnrecognizedUnionMembers: true, allowUnrecognizedEnumValues: true, @@ -576,9 +576,9 @@ export class Agents { * }) */ public async continue( - request: Humanloop.AgentsContinueCallRequest, + request: Humanloop.AgentsContinueRequest, requestOptions?: Agents.RequestOptions, - ): Promise { + ): Promise { const _response = await (this._options.fetcher ?? core.fetcher)({ url: urlJoin( (await core.Supplier.get(this._options.baseUrl)) ?? @@ -590,8 +590,8 @@ export class Agents { headers: { "X-Fern-Language": "JavaScript", "X-Fern-SDK-Name": "humanloop", - "X-Fern-SDK-Version": "0.8.21-beta1", - "User-Agent": "humanloop/0.8.21-beta1", + "X-Fern-SDK-Version": "0.8.21", + "User-Agent": "humanloop/0.8.21", "X-Fern-Runtime": core.RUNTIME.type, "X-Fern-Runtime-Version": core.RUNTIME.version, ...(await this._getCustomAuthorizationHeaders()), @@ -600,7 +600,7 @@ export class Agents { contentType: "application/json", requestType: "json", body: { - ...serializers.AgentsContinueCallRequest.jsonOrThrow(request, { unrecognizedObjectKeys: "strip" }), + ...serializers.AgentsContinueRequest.jsonOrThrow(request, { unrecognizedObjectKeys: "strip" }), stream: false, }, timeoutMs: requestOptions?.timeoutInSeconds != null ? requestOptions.timeoutInSeconds * 1000 : 60000, @@ -608,7 +608,7 @@ export class Agents { abortSignal: requestOptions?.abortSignal, }); if (_response.ok) { - return serializers.AgentContinueCallResponse.parseOrThrow(_response.body, { + return serializers.AgentContinueResponse.parseOrThrow(_response.body, { unrecognizedObjectKeys: "passthrough", allowUnrecognizedUnionMembers: true, allowUnrecognizedEnumValues: true, @@ -686,9 +686,7 @@ export class Agents { } if (sortBy != null) { - _queryParams["sort_by"] = serializers.ProjectSortBy.jsonOrThrow(sortBy, { - unrecognizedObjectKeys: "strip", - }); + _queryParams["sort_by"] = serializers.FileSortBy.jsonOrThrow(sortBy, { unrecognizedObjectKeys: "strip" }); } if (order != null) { @@ -706,8 +704,8 @@ export class Agents { headers: { "X-Fern-Language": "JavaScript", "X-Fern-SDK-Name": "humanloop", - "X-Fern-SDK-Version": "0.8.21-beta1", - "User-Agent": "humanloop/0.8.21-beta1", + "X-Fern-SDK-Version": "0.8.21", + "User-Agent": "humanloop/0.8.21", "X-Fern-Runtime": core.RUNTIME.type, "X-Fern-Runtime-Version": core.RUNTIME.version, ...(await this._getCustomAuthorizationHeaders()), @@ -800,8 +798,8 @@ export class Agents { headers: { "X-Fern-Language": "JavaScript", "X-Fern-SDK-Name": "humanloop", - "X-Fern-SDK-Version": "0.8.21-beta1", - "User-Agent": "humanloop/0.8.21-beta1", + "X-Fern-SDK-Version": "0.8.21", + "User-Agent": "humanloop/0.8.21", "X-Fern-Runtime": core.RUNTIME.type, "X-Fern-Runtime-Version": core.RUNTIME.version, ...(await this._getCustomAuthorizationHeaders()), @@ -887,8 +885,8 @@ export class Agents { headers: { "X-Fern-Language": "JavaScript", "X-Fern-SDK-Name": "humanloop", - "X-Fern-SDK-Version": "0.8.21-beta1", - "User-Agent": "humanloop/0.8.21-beta1", + "X-Fern-SDK-Version": "0.8.21", + "User-Agent": "humanloop/0.8.21", "X-Fern-Runtime": core.RUNTIME.type, "X-Fern-Runtime-Version": core.RUNTIME.version, ...(await this._getCustomAuthorizationHeaders()), @@ -971,8 +969,8 @@ export class Agents { headers: { "X-Fern-Language": "JavaScript", "X-Fern-SDK-Name": "humanloop", - "X-Fern-SDK-Version": "0.8.21-beta1", - "User-Agent": "humanloop/0.8.21-beta1", + "X-Fern-SDK-Version": "0.8.21", + "User-Agent": "humanloop/0.8.21", "X-Fern-Runtime": core.RUNTIME.type, "X-Fern-Runtime-Version": core.RUNTIME.version, ...(await this._getCustomAuthorizationHeaders()), @@ -1073,8 +1071,8 @@ export class Agents { headers: { "X-Fern-Language": "JavaScript", "X-Fern-SDK-Name": "humanloop", - "X-Fern-SDK-Version": "0.8.21-beta1", - "User-Agent": "humanloop/0.8.21-beta1", + "X-Fern-SDK-Version": "0.8.21", + "User-Agent": "humanloop/0.8.21", "X-Fern-Runtime": core.RUNTIME.type, "X-Fern-Runtime-Version": core.RUNTIME.version, ...(await this._getCustomAuthorizationHeaders()), @@ -1155,8 +1153,8 @@ export class Agents { headers: { "X-Fern-Language": "JavaScript", "X-Fern-SDK-Name": "humanloop", - "X-Fern-SDK-Version": "0.8.21-beta1", - "User-Agent": "humanloop/0.8.21-beta1", + "X-Fern-SDK-Version": "0.8.21", + "User-Agent": "humanloop/0.8.21", "X-Fern-Runtime": core.RUNTIME.type, "X-Fern-Runtime-Version": core.RUNTIME.version, ...(await this._getCustomAuthorizationHeaders()), @@ -1235,8 +1233,8 @@ export class Agents { headers: { "X-Fern-Language": "JavaScript", "X-Fern-SDK-Name": "humanloop", - "X-Fern-SDK-Version": "0.8.21-beta1", - "User-Agent": "humanloop/0.8.21-beta1", + "X-Fern-SDK-Version": "0.8.21", + "User-Agent": "humanloop/0.8.21", "X-Fern-Runtime": core.RUNTIME.type, "X-Fern-Runtime-Version": core.RUNTIME.version, ...(await this._getCustomAuthorizationHeaders()), @@ -1328,8 +1326,8 @@ export class Agents { headers: { "X-Fern-Language": "JavaScript", "X-Fern-SDK-Name": "humanloop", - "X-Fern-SDK-Version": "0.8.21-beta1", - "User-Agent": "humanloop/0.8.21-beta1", + "X-Fern-SDK-Version": "0.8.21", + "User-Agent": "humanloop/0.8.21", "X-Fern-Runtime": core.RUNTIME.type, "X-Fern-Runtime-Version": core.RUNTIME.version, ...(await this._getCustomAuthorizationHeaders()), @@ -1425,8 +1423,8 @@ export class Agents { headers: { "X-Fern-Language": "JavaScript", "X-Fern-SDK-Name": "humanloop", - "X-Fern-SDK-Version": "0.8.21-beta1", - "User-Agent": "humanloop/0.8.21-beta1", + "X-Fern-SDK-Version": "0.8.21", + "User-Agent": "humanloop/0.8.21", "X-Fern-Runtime": core.RUNTIME.type, "X-Fern-Runtime-Version": core.RUNTIME.version, ...(await this._getCustomAuthorizationHeaders()), @@ -1517,8 +1515,8 @@ export class Agents { headers: { "X-Fern-Language": "JavaScript", "X-Fern-SDK-Name": "humanloop", - "X-Fern-SDK-Version": "0.8.21-beta1", - "User-Agent": "humanloop/0.8.21-beta1", + "X-Fern-SDK-Version": "0.8.21", + "User-Agent": "humanloop/0.8.21", "X-Fern-Runtime": core.RUNTIME.type, "X-Fern-Runtime-Version": core.RUNTIME.version, ...(await this._getCustomAuthorizationHeaders()), @@ -1597,8 +1595,8 @@ export class Agents { headers: { "X-Fern-Language": "JavaScript", "X-Fern-SDK-Name": "humanloop", - "X-Fern-SDK-Version": "0.8.21-beta1", - "User-Agent": "humanloop/0.8.21-beta1", + "X-Fern-SDK-Version": "0.8.21", + "User-Agent": "humanloop/0.8.21", "X-Fern-Runtime": core.RUNTIME.type, "X-Fern-Runtime-Version": core.RUNTIME.version, ...(await this._getCustomAuthorizationHeaders()), @@ -1686,8 +1684,8 @@ export class Agents { headers: { "X-Fern-Language": "JavaScript", "X-Fern-SDK-Name": "humanloop", - "X-Fern-SDK-Version": "0.8.21-beta1", - "User-Agent": "humanloop/0.8.21-beta1", + "X-Fern-SDK-Version": "0.8.21", + "User-Agent": "humanloop/0.8.21", "X-Fern-Runtime": core.RUNTIME.type, "X-Fern-Runtime-Version": core.RUNTIME.version, ...(await this._getCustomAuthorizationHeaders()), @@ -1769,7 +1767,7 @@ export class Agents { id: string, request: Humanloop.SerializeAgentsIdSerializeGetRequest = {}, requestOptions?: Agents.RequestOptions, - ): Promise { + ): Promise { const { versionId, environment } = request; const _queryParams: Record = {}; if (versionId != null) { @@ -1791,8 +1789,8 @@ export class Agents { headers: { "X-Fern-Language": "JavaScript", "X-Fern-SDK-Name": "humanloop", - "X-Fern-SDK-Version": "0.8.21-beta1", - "User-Agent": "humanloop/0.8.21-beta1", + "X-Fern-SDK-Version": "0.8.21", + "User-Agent": "humanloop/0.8.21", "X-Fern-Runtime": core.RUNTIME.type, "X-Fern-Runtime-Version": core.RUNTIME.version, ...(await this._getCustomAuthorizationHeaders()), @@ -1801,12 +1799,13 @@ export class Agents { contentType: "application/json", queryParameters: _queryParams, requestType: "json", + responseType: "text", timeoutMs: requestOptions?.timeoutInSeconds != null ? requestOptions.timeoutInSeconds * 1000 : 60000, maxRetries: requestOptions?.maxRetries, abortSignal: requestOptions?.abortSignal, }); if (_response.ok) { - return _response.body; + return _response.body as string; } if (_response.error.reason === "status-code") { @@ -1875,8 +1874,8 @@ export class Agents { headers: { "X-Fern-Language": "JavaScript", "X-Fern-SDK-Name": "humanloop", - "X-Fern-SDK-Version": "0.8.21-beta1", - "User-Agent": "humanloop/0.8.21-beta1", + "X-Fern-SDK-Version": "0.8.21", + "User-Agent": "humanloop/0.8.21", "X-Fern-Runtime": core.RUNTIME.type, "X-Fern-Runtime-Version": core.RUNTIME.version, ...(await this._getCustomAuthorizationHeaders()), diff --git a/src/api/resources/agents/client/requests/AgentLogRequest.ts b/src/api/resources/agents/client/requests/AgentLogRequest.ts index 5852bf02..9f1f1dcb 100644 --- a/src/api/resources/agents/client/requests/AgentLogRequest.ts +++ b/src/api/resources/agents/client/requests/AgentLogRequest.ts @@ -6,49 +6,7 @@ import * as Humanloop from "../../../../index"; /** * @example - * { - * path: "Banking/Teller Agent", - * agent: { - * provider: "anthropic", - * endpoint: "chat", - * model: "claude-3-7-sonnet-latest", - * reasoningEffort: 1024, - * template: [{ - * role: "system", - * content: "You are a helpful digital assistant, helping users navigate our digital banking platform." - * }], - * maxIterations: 3, - * tools: [{ - * type: "file", - * link: { - * fileId: "pr_1234567890", - * versionId: "prv_1234567890" - * }, - * onAgentCall: "continue" - * }, { - * type: "inline", - * jsonSchema: { - * name: "stop", - * description: "Call this tool when you have finished your task.", - * parameters: { - * "type": "object", - * "properties": { - * "output": { - * "type": "string", - * "description": "The final output to return to the user." - * } - * }, - * "additionalProperties": false, - * "required": [ - * "output" - * ] - * }, - * strict: true - * }, - * onAgentCall: "stop" - * }] - * } - * } + * {} */ export interface AgentLogRequest { /** @@ -89,8 +47,13 @@ export interface AgentLogRequest { * - `{'type': 'function', 'function': {name': }}` forces the model to use the named function. */ toolChoice?: Humanloop.AgentLogRequestToolChoice; - /** Details of your Agent. A new Agent version will be created if the provided details are new. */ - agent?: Humanloop.AgentKernelRequest; + /** + * The Agent configuration to use. Two formats are supported: + * - An object representing the details of the Agent configuration + * - A string representing the raw contents of a .agent file + * A new Agent version will be created if the provided details do not match any existing version. + */ + agent?: Humanloop.AgentLogRequestAgent; /** When the logged event started. */ startTime?: Date; /** When the logged event ended. */ diff --git a/src/api/resources/agents/client/requests/AgentRequest.ts b/src/api/resources/agents/client/requests/AgentRequest.ts index 7dd42f9d..a7106627 100644 --- a/src/api/resources/agents/client/requests/AgentRequest.ts +++ b/src/api/resources/agents/client/requests/AgentRequest.ts @@ -7,40 +7,7 @@ import * as Humanloop from "../../../../index"; /** * @example * { - * path: "Banking/Teller Agent", - * provider: "anthropic", - * endpoint: "chat", - * model: "claude-3-7-sonnet-latest", - * reasoningEffort: 1024, - * template: [{ - * role: "system", - * content: "You are a helpful digital assistant, helping users navigate our digital banking platform." - * }], - * maxIterations: 3, - * tools: [{ - * type: "inline", - * jsonSchema: { - * name: "stop", - * description: "Call this tool when you have finished your task.", - * parameters: { - * "type": "object", - * "properties": { - * "output": { - * "type": "string", - * "description": "The final output to return to the user." - * } - * }, - * "additionalProperties": false, - * "required": [ - * "output" - * ] - * }, - * strict: true - * }, - * onAgentCall: "stop" - * }], - * versionName: "teller-agent-v1", - * versionDescription: "Initial version" + * model: "model" * } */ export interface AgentRequest { diff --git a/src/api/resources/agents/client/requests/AgentsCallRequest.ts b/src/api/resources/agents/client/requests/AgentsCallRequest.ts index 1f554921..2d572dbc 100644 --- a/src/api/resources/agents/client/requests/AgentsCallRequest.ts +++ b/src/api/resources/agents/client/requests/AgentsCallRequest.ts @@ -6,13 +6,7 @@ import * as Humanloop from "../../../../index"; /** * @example - * { - * path: "Banking/Teller Agent", - * messages: [{ - * role: "user", - * content: "I'd like to deposit $1000 to my savings account from my checking account." - * }] - * } + * {} */ export interface AgentsCallRequest { /** @@ -37,8 +31,13 @@ export interface AgentsCallRequest { * - `{'type': 'function', 'function': {name': }}` forces the model to use the named function. */ toolChoice?: Humanloop.AgentsCallRequestToolChoice; - /** Details of your Agent. A new Agent version will be created if the provided details are new. */ - agent?: Humanloop.AgentKernelRequest; + /** + * The Agent configuration to use. Two formats are supported: + * - An object representing the details of the Agent configuration + * - A string representing the raw contents of a .agent file + * A new Agent version will be created if the provided details do not match any existing version. + */ + agent?: Humanloop.AgentsCallRequestAgent; /** The inputs passed to the prompt template. */ inputs?: Record; /** Identifies where the model was called from. */ diff --git a/src/api/resources/agents/client/requests/AgentsCallStreamRequest.ts b/src/api/resources/agents/client/requests/AgentsCallStreamRequest.ts index 46ef71f9..b6d5afed 100644 --- a/src/api/resources/agents/client/requests/AgentsCallStreamRequest.ts +++ b/src/api/resources/agents/client/requests/AgentsCallStreamRequest.ts @@ -31,8 +31,13 @@ export interface AgentsCallStreamRequest { * - `{'type': 'function', 'function': {name': }}` forces the model to use the named function. */ toolChoice?: Humanloop.AgentsCallStreamRequestToolChoice; - /** Details of your Agent. A new Agent version will be created if the provided details are new. */ - agent?: Humanloop.AgentKernelRequest; + /** + * The Agent configuration to use. Two formats are supported: + * - An object representing the details of the Agent configuration + * - A string representing the raw contents of a .agent file + * A new Agent version will be created if the provided details do not match any existing version. + */ + agent?: Humanloop.AgentsCallStreamRequestAgent; /** The inputs passed to the prompt template. */ inputs?: Record; /** Identifies where the model was called from. */ diff --git a/src/api/resources/agents/client/requests/AgentsContinueCallRequest.ts b/src/api/resources/agents/client/requests/AgentsContinueCallRequest.ts deleted file mode 100644 index 8f9049e7..00000000 --- a/src/api/resources/agents/client/requests/AgentsContinueCallRequest.ts +++ /dev/null @@ -1,27 +0,0 @@ -/** - * This file was auto-generated by Fern from our API Definition. - */ - -import * as Humanloop from "../../../../index"; - -/** - * @example - * { - * logId: "log_1234567890", - * messages: [{ - * role: "tool", - * content: "{\"type\": \"checking\", \"balance\": 5200}", - * toolCallId: "tc_1234567890" - * }] - * } - */ -export interface AgentsContinueCallRequest { - /** This identifies the Agent Log to continue. */ - logId: string; - /** The additional messages with which to continue the Agent Log. Often, these should start with the Tool messages with results for the previous Assistant message's tool calls. */ - messages: Humanloop.ChatMessage[]; - /** API keys required by each provider to make API calls. The API keys provided here are not stored by Humanloop. If not specified here, Humanloop will fall back to the key saved to your organization. */ - providerApiKeys?: Humanloop.ProviderApiKeys; - /** If true, populate `trace_children` for the returned Agent Log. Defaults to false. */ - includeTraceChildren?: boolean; -} diff --git a/src/api/resources/agents/client/requests/AgentsContinueCallStreamRequest.ts b/src/api/resources/agents/client/requests/AgentsContinueCallStreamRequest.ts deleted file mode 100644 index e9b1abd9..00000000 --- a/src/api/resources/agents/client/requests/AgentsContinueCallStreamRequest.ts +++ /dev/null @@ -1,25 +0,0 @@ -/** - * This file was auto-generated by Fern from our API Definition. - */ - -import * as Humanloop from "../../../../index"; - -/** - * @example - * { - * logId: "log_id", - * messages: [{ - * role: "user" - * }] - * } - */ -export interface AgentsContinueCallStreamRequest { - /** This identifies the Agent Log to continue. */ - logId: string; - /** The additional messages with which to continue the Agent Log. Often, these should start with the Tool messages with results for the previous Assistant message's tool calls. */ - messages: Humanloop.ChatMessage[]; - /** API keys required by each provider to make API calls. The API keys provided here are not stored by Humanloop. If not specified here, Humanloop will fall back to the key saved to your organization. */ - providerApiKeys?: Humanloop.ProviderApiKeys; - /** If true, populate `trace_children` for the returned Agent Log. Defaults to false. */ - includeTraceChildren?: boolean; -} diff --git a/src/api/resources/agents/client/requests/AgentsContinueRequest.ts b/src/api/resources/agents/client/requests/AgentsContinueRequest.ts index eb9aee76..447fe167 100644 --- a/src/api/resources/agents/client/requests/AgentsContinueRequest.ts +++ b/src/api/resources/agents/client/requests/AgentsContinueRequest.ts @@ -13,7 +13,7 @@ import * as Humanloop from "../../../../index"; * }] * } */ -export interface AgentsContinueCallRequest { +export interface AgentsContinueRequest { /** This identifies the Agent Log to continue. */ logId: string; /** The additional messages with which to continue the Agent Log. Often, these should start with the Tool messages with results for the previous Assistant message's tool calls. */ diff --git a/src/api/resources/agents/client/requests/ListAgentsGetRequest.ts b/src/api/resources/agents/client/requests/ListAgentsGetRequest.ts index 2a81c3f7..e74bb986 100644 --- a/src/api/resources/agents/client/requests/ListAgentsGetRequest.ts +++ b/src/api/resources/agents/client/requests/ListAgentsGetRequest.ts @@ -6,9 +6,7 @@ import * as Humanloop from "../../../../index"; /** * @example - * { - * size: 1 - * } + * {} */ export interface ListAgentsGetRequest { /** @@ -30,7 +28,7 @@ export interface ListAgentsGetRequest { /** * Field to sort Agents by */ - sortBy?: Humanloop.ProjectSortBy; + sortBy?: Humanloop.FileSortBy; /** * Direction to sort by. */ diff --git a/src/api/resources/agents/client/requests/UpdateAgentLogRequest.ts b/src/api/resources/agents/client/requests/UpdateAgentLogRequest.ts index d55a2289..fb5d7d07 100644 --- a/src/api/resources/agents/client/requests/UpdateAgentLogRequest.ts +++ b/src/api/resources/agents/client/requests/UpdateAgentLogRequest.ts @@ -6,20 +6,7 @@ import * as Humanloop from "../../../../index"; /** * @example - * { - * messages: [{ - * role: "user", - * content: "I need to withdraw $1000" - * }, { - * role: "assistant", - * content: "Of course! Would you like to use your savings or checking account?" - * }], - * outputMessage: { - * role: "assistant", - * content: "I'm sorry, I can't help with that." - * }, - * logStatus: "complete" - * } + * {} */ export interface UpdateAgentLogRequest { /** List of chat messages that were used as an input to the Flow. */ diff --git a/src/api/resources/agents/client/requests/UpdateAgentRequest.ts b/src/api/resources/agents/client/requests/UpdateAgentRequest.ts index 0363e61c..3606daed 100644 --- a/src/api/resources/agents/client/requests/UpdateAgentRequest.ts +++ b/src/api/resources/agents/client/requests/UpdateAgentRequest.ts @@ -4,9 +4,7 @@ /** * @example - * { - * path: "new directory/new name" - * } + * {} */ export interface UpdateAgentRequest { /** Path of the Flow including the Flow name, which is used as a unique identifier. */ diff --git a/src/api/resources/agents/client/requests/index.ts b/src/api/resources/agents/client/requests/index.ts index c01b48ec..a1bbe01b 100644 --- a/src/api/resources/agents/client/requests/index.ts +++ b/src/api/resources/agents/client/requests/index.ts @@ -2,8 +2,8 @@ export { type AgentLogRequest } from "./AgentLogRequest"; export { type UpdateAgentLogRequest } from "./UpdateAgentLogRequest"; export { type AgentsCallStreamRequest } from "./AgentsCallStreamRequest"; export { type AgentsCallRequest } from "./AgentsCallRequest"; -export { type AgentsContinueCallStreamRequest } from "./AgentsContinueCallStreamRequest"; -export { type AgentsContinueCallRequest } from "./AgentsContinueCallRequest"; +export { type AgentsContinueStreamRequest } from "./AgentsContinueStreamRequest"; +export { type AgentsContinueRequest } from "./AgentsContinueRequest"; export { type ListAgentsGetRequest } from "./ListAgentsGetRequest"; export { type AgentRequest } from "./AgentRequest"; export { type GetAgentsIdGetRequest } from "./GetAgentsIdGetRequest"; diff --git a/src/api/resources/agents/types/AgentLogRequestAgent.ts b/src/api/resources/agents/types/AgentLogRequestAgent.ts new file mode 100644 index 00000000..05013da2 --- /dev/null +++ b/src/api/resources/agents/types/AgentLogRequestAgent.ts @@ -0,0 +1,13 @@ +/** + * This file was auto-generated by Fern from our API Definition. + */ + +import * as Humanloop from "../../../index"; + +/** + * The Agent configuration to use. Two formats are supported: + * - An object representing the details of the Agent configuration + * - A string representing the raw contents of a .agent file + * A new Agent version will be created if the provided details do not match any existing version. + */ +export type AgentLogRequestAgent = Humanloop.AgentKernelRequest | string; diff --git a/src/api/resources/agents/types/AgentsCallRequestAgent.ts b/src/api/resources/agents/types/AgentsCallRequestAgent.ts new file mode 100644 index 00000000..164f1814 --- /dev/null +++ b/src/api/resources/agents/types/AgentsCallRequestAgent.ts @@ -0,0 +1,13 @@ +/** + * This file was auto-generated by Fern from our API Definition. + */ + +import * as Humanloop from "../../../index"; + +/** + * The Agent configuration to use. Two formats are supported: + * - An object representing the details of the Agent configuration + * - A string representing the raw contents of a .agent file + * A new Agent version will be created if the provided details do not match any existing version. + */ +export type AgentsCallRequestAgent = Humanloop.AgentKernelRequest | string; diff --git a/src/api/resources/agents/types/AgentsCallStreamRequestAgent.ts b/src/api/resources/agents/types/AgentsCallStreamRequestAgent.ts new file mode 100644 index 00000000..86ffc4fc --- /dev/null +++ b/src/api/resources/agents/types/AgentsCallStreamRequestAgent.ts @@ -0,0 +1,13 @@ +/** + * This file was auto-generated by Fern from our API Definition. + */ + +import * as Humanloop from "../../../index"; + +/** + * The Agent configuration to use. Two formats are supported: + * - An object representing the details of the Agent configuration + * - A string representing the raw contents of a .agent file + * A new Agent version will be created if the provided details do not match any existing version. + */ +export type AgentsCallStreamRequestAgent = Humanloop.AgentKernelRequest | string; diff --git a/src/api/resources/agents/types/index.ts b/src/api/resources/agents/types/index.ts index 8a8a004f..1a1043c1 100644 --- a/src/api/resources/agents/types/index.ts +++ b/src/api/resources/agents/types/index.ts @@ -1,6 +1,9 @@ export * from "./AgentLogRequestToolChoice"; +export * from "./AgentLogRequestAgent"; export * from "./AgentsCallStreamRequestToolChoice"; +export * from "./AgentsCallStreamRequestAgent"; export * from "./AgentsCallRequestToolChoice"; +export * from "./AgentsCallRequestAgent"; export * from "./AgentRequestTemplate"; export * from "./AgentRequestStop"; export * from "./AgentRequestReasoningEffort"; diff --git a/src/api/resources/datasets/client/Client.ts b/src/api/resources/datasets/client/Client.ts index cd17b306..140deb82 100644 --- a/src/api/resources/datasets/client/Client.ts +++ b/src/api/resources/datasets/client/Client.ts @@ -89,7 +89,7 @@ export class Datasets { _queryParams["user_filter"] = userFilter; } if (sortBy != null) { - _queryParams["sort_by"] = serializers.ProjectSortBy.jsonOrThrow(sortBy, { + _queryParams["sort_by"] = serializers.FileSortBy.jsonOrThrow(sortBy, { unrecognizedObjectKeys: "strip", }); } @@ -107,8 +107,8 @@ export class Datasets { headers: { "X-Fern-Language": "JavaScript", "X-Fern-SDK-Name": "humanloop", - "X-Fern-SDK-Version": "0.8.21-beta1", - "User-Agent": "humanloop/0.8.21-beta1", + "X-Fern-SDK-Version": "0.8.21", + "User-Agent": "humanloop/0.8.21", "X-Fern-Runtime": core.RUNTIME.type, "X-Fern-Runtime-Version": core.RUNTIME.version, ...(await this._getCustomAuthorizationHeaders()), @@ -275,8 +275,8 @@ export class Datasets { headers: { "X-Fern-Language": "JavaScript", "X-Fern-SDK-Name": "humanloop", - "X-Fern-SDK-Version": "0.8.21-beta1", - "User-Agent": "humanloop/0.8.21-beta1", + "X-Fern-SDK-Version": "0.8.21", + "User-Agent": "humanloop/0.8.21", "X-Fern-Runtime": core.RUNTIME.type, "X-Fern-Runtime-Version": core.RUNTIME.version, ...(await this._getCustomAuthorizationHeaders()), @@ -388,8 +388,8 @@ export class Datasets { headers: { "X-Fern-Language": "JavaScript", "X-Fern-SDK-Name": "humanloop", - "X-Fern-SDK-Version": "0.8.21-beta1", - "User-Agent": "humanloop/0.8.21-beta1", + "X-Fern-SDK-Version": "0.8.21", + "User-Agent": "humanloop/0.8.21", "X-Fern-Runtime": core.RUNTIME.type, "X-Fern-Runtime-Version": core.RUNTIME.version, ...(await this._getCustomAuthorizationHeaders()), @@ -470,8 +470,8 @@ export class Datasets { headers: { "X-Fern-Language": "JavaScript", "X-Fern-SDK-Name": "humanloop", - "X-Fern-SDK-Version": "0.8.21-beta1", - "User-Agent": "humanloop/0.8.21-beta1", + "X-Fern-SDK-Version": "0.8.21", + "User-Agent": "humanloop/0.8.21", "X-Fern-Runtime": core.RUNTIME.type, "X-Fern-Runtime-Version": core.RUNTIME.version, ...(await this._getCustomAuthorizationHeaders()), @@ -550,8 +550,8 @@ export class Datasets { headers: { "X-Fern-Language": "JavaScript", "X-Fern-SDK-Name": "humanloop", - "X-Fern-SDK-Version": "0.8.21-beta1", - "User-Agent": "humanloop/0.8.21-beta1", + "X-Fern-SDK-Version": "0.8.21", + "User-Agent": "humanloop/0.8.21", "X-Fern-Runtime": core.RUNTIME.type, "X-Fern-Runtime-Version": core.RUNTIME.version, ...(await this._getCustomAuthorizationHeaders()), @@ -656,8 +656,8 @@ export class Datasets { headers: { "X-Fern-Language": "JavaScript", "X-Fern-SDK-Name": "humanloop", - "X-Fern-SDK-Version": "0.8.21-beta1", - "User-Agent": "humanloop/0.8.21-beta1", + "X-Fern-SDK-Version": "0.8.21", + "User-Agent": "humanloop/0.8.21", "X-Fern-Runtime": core.RUNTIME.type, "X-Fern-Runtime-Version": core.RUNTIME.version, ...(await this._getCustomAuthorizationHeaders()), @@ -763,8 +763,8 @@ export class Datasets { headers: { "X-Fern-Language": "JavaScript", "X-Fern-SDK-Name": "humanloop", - "X-Fern-SDK-Version": "0.8.21-beta1", - "User-Agent": "humanloop/0.8.21-beta1", + "X-Fern-SDK-Version": "0.8.21", + "User-Agent": "humanloop/0.8.21", "X-Fern-Runtime": core.RUNTIME.type, "X-Fern-Runtime-Version": core.RUNTIME.version, ...(await this._getCustomAuthorizationHeaders()), @@ -850,8 +850,8 @@ export class Datasets { headers: { "X-Fern-Language": "JavaScript", "X-Fern-SDK-Name": "humanloop", - "X-Fern-SDK-Version": "0.8.21-beta1", - "User-Agent": "humanloop/0.8.21-beta1", + "X-Fern-SDK-Version": "0.8.21", + "User-Agent": "humanloop/0.8.21", "X-Fern-Runtime": core.RUNTIME.type, "X-Fern-Runtime-Version": core.RUNTIME.version, ...(await this._getCustomAuthorizationHeaders()), @@ -934,8 +934,8 @@ export class Datasets { headers: { "X-Fern-Language": "JavaScript", "X-Fern-SDK-Name": "humanloop", - "X-Fern-SDK-Version": "0.8.21-beta1", - "User-Agent": "humanloop/0.8.21-beta1", + "X-Fern-SDK-Version": "0.8.21", + "User-Agent": "humanloop/0.8.21", "X-Fern-Runtime": core.RUNTIME.type, "X-Fern-Runtime-Version": core.RUNTIME.version, ...(await this._getCustomAuthorizationHeaders()), @@ -1055,8 +1055,8 @@ export class Datasets { headers: { "X-Fern-Language": "JavaScript", "X-Fern-SDK-Name": "humanloop", - "X-Fern-SDK-Version": "0.8.21-beta1", - "User-Agent": "humanloop/0.8.21-beta1", + "X-Fern-SDK-Version": "0.8.21", + "User-Agent": "humanloop/0.8.21", "X-Fern-Runtime": core.RUNTIME.type, "X-Fern-Runtime-Version": core.RUNTIME.version, ...(await this._getCustomAuthorizationHeaders()), @@ -1155,8 +1155,8 @@ export class Datasets { headers: { "X-Fern-Language": "JavaScript", "X-Fern-SDK-Name": "humanloop", - "X-Fern-SDK-Version": "0.8.21-beta1", - "User-Agent": "humanloop/0.8.21-beta1", + "X-Fern-SDK-Version": "0.8.21", + "User-Agent": "humanloop/0.8.21", "X-Fern-Runtime": core.RUNTIME.type, "X-Fern-Runtime-Version": core.RUNTIME.version, ...(await this._getCustomAuthorizationHeaders()), @@ -1246,8 +1246,8 @@ export class Datasets { headers: { "X-Fern-Language": "JavaScript", "X-Fern-SDK-Name": "humanloop", - "X-Fern-SDK-Version": "0.8.21-beta1", - "User-Agent": "humanloop/0.8.21-beta1", + "X-Fern-SDK-Version": "0.8.21", + "User-Agent": "humanloop/0.8.21", "X-Fern-Runtime": core.RUNTIME.type, "X-Fern-Runtime-Version": core.RUNTIME.version, ...(await this._getCustomAuthorizationHeaders()), @@ -1326,8 +1326,8 @@ export class Datasets { headers: { "X-Fern-Language": "JavaScript", "X-Fern-SDK-Name": "humanloop", - "X-Fern-SDK-Version": "0.8.21-beta1", - "User-Agent": "humanloop/0.8.21-beta1", + "X-Fern-SDK-Version": "0.8.21", + "User-Agent": "humanloop/0.8.21", "X-Fern-Runtime": core.RUNTIME.type, "X-Fern-Runtime-Version": core.RUNTIME.version, ...(await this._getCustomAuthorizationHeaders()), diff --git a/src/api/resources/datasets/client/requests/ListDatasetsGetRequest.ts b/src/api/resources/datasets/client/requests/ListDatasetsGetRequest.ts index c51ad97c..b171bf20 100644 --- a/src/api/resources/datasets/client/requests/ListDatasetsGetRequest.ts +++ b/src/api/resources/datasets/client/requests/ListDatasetsGetRequest.ts @@ -30,7 +30,7 @@ export interface ListDatasetsGetRequest { /** * Field to sort Datasets by */ - sortBy?: Humanloop.ProjectSortBy; + sortBy?: Humanloop.FileSortBy; /** * Direction to sort by. */ diff --git a/src/api/resources/directories/client/Client.ts b/src/api/resources/directories/client/Client.ts index a9e2a6e9..4b587207 100644 --- a/src/api/resources/directories/client/Client.ts +++ b/src/api/resources/directories/client/Client.ts @@ -55,8 +55,8 @@ export class Directories { headers: { "X-Fern-Language": "JavaScript", "X-Fern-SDK-Name": "humanloop", - "X-Fern-SDK-Version": "0.8.21-beta1", - "User-Agent": "humanloop/0.8.21-beta1", + "X-Fern-SDK-Version": "0.8.21", + "User-Agent": "humanloop/0.8.21", "X-Fern-Runtime": core.RUNTIME.type, "X-Fern-Runtime-Version": core.RUNTIME.version, ...(await this._getCustomAuthorizationHeaders()), @@ -139,8 +139,8 @@ export class Directories { headers: { "X-Fern-Language": "JavaScript", "X-Fern-SDK-Name": "humanloop", - "X-Fern-SDK-Version": "0.8.21-beta1", - "User-Agent": "humanloop/0.8.21-beta1", + "X-Fern-SDK-Version": "0.8.21", + "User-Agent": "humanloop/0.8.21", "X-Fern-Runtime": core.RUNTIME.type, "X-Fern-Runtime-Version": core.RUNTIME.version, ...(await this._getCustomAuthorizationHeaders()), @@ -224,8 +224,8 @@ export class Directories { headers: { "X-Fern-Language": "JavaScript", "X-Fern-SDK-Name": "humanloop", - "X-Fern-SDK-Version": "0.8.21-beta1", - "User-Agent": "humanloop/0.8.21-beta1", + "X-Fern-SDK-Version": "0.8.21", + "User-Agent": "humanloop/0.8.21", "X-Fern-Runtime": core.RUNTIME.type, "X-Fern-Runtime-Version": core.RUNTIME.version, ...(await this._getCustomAuthorizationHeaders()), @@ -307,8 +307,8 @@ export class Directories { headers: { "X-Fern-Language": "JavaScript", "X-Fern-SDK-Name": "humanloop", - "X-Fern-SDK-Version": "0.8.21-beta1", - "User-Agent": "humanloop/0.8.21-beta1", + "X-Fern-SDK-Version": "0.8.21", + "User-Agent": "humanloop/0.8.21", "X-Fern-Runtime": core.RUNTIME.type, "X-Fern-Runtime-Version": core.RUNTIME.version, ...(await this._getCustomAuthorizationHeaders()), @@ -387,8 +387,8 @@ export class Directories { headers: { "X-Fern-Language": "JavaScript", "X-Fern-SDK-Name": "humanloop", - "X-Fern-SDK-Version": "0.8.21-beta1", - "User-Agent": "humanloop/0.8.21-beta1", + "X-Fern-SDK-Version": "0.8.21", + "User-Agent": "humanloop/0.8.21", "X-Fern-Runtime": core.RUNTIME.type, "X-Fern-Runtime-Version": core.RUNTIME.version, ...(await this._getCustomAuthorizationHeaders()), diff --git a/src/api/resources/evaluations/client/Client.ts b/src/api/resources/evaluations/client/Client.ts index 93e1d4e1..158e39e2 100644 --- a/src/api/resources/evaluations/client/Client.ts +++ b/src/api/resources/evaluations/client/Client.ts @@ -88,8 +88,8 @@ export class Evaluations { headers: { "X-Fern-Language": "JavaScript", "X-Fern-SDK-Name": "humanloop", - "X-Fern-SDK-Version": "0.8.21-beta1", - "User-Agent": "humanloop/0.8.21-beta1", + "X-Fern-SDK-Version": "0.8.21", + "User-Agent": "humanloop/0.8.21", "X-Fern-Runtime": core.RUNTIME.type, "X-Fern-Runtime-Version": core.RUNTIME.version, ...(await this._getCustomAuthorizationHeaders()), @@ -190,8 +190,8 @@ export class Evaluations { headers: { "X-Fern-Language": "JavaScript", "X-Fern-SDK-Name": "humanloop", - "X-Fern-SDK-Version": "0.8.21-beta1", - "User-Agent": "humanloop/0.8.21-beta1", + "X-Fern-SDK-Version": "0.8.21", + "User-Agent": "humanloop/0.8.21", "X-Fern-Runtime": core.RUNTIME.type, "X-Fern-Runtime-Version": core.RUNTIME.version, ...(await this._getCustomAuthorizationHeaders()), @@ -283,8 +283,8 @@ export class Evaluations { headers: { "X-Fern-Language": "JavaScript", "X-Fern-SDK-Name": "humanloop", - "X-Fern-SDK-Version": "0.8.21-beta1", - "User-Agent": "humanloop/0.8.21-beta1", + "X-Fern-SDK-Version": "0.8.21", + "User-Agent": "humanloop/0.8.21", "X-Fern-Runtime": core.RUNTIME.type, "X-Fern-Runtime-Version": core.RUNTIME.version, ...(await this._getCustomAuthorizationHeaders()), @@ -374,8 +374,8 @@ export class Evaluations { headers: { "X-Fern-Language": "JavaScript", "X-Fern-SDK-Name": "humanloop", - "X-Fern-SDK-Version": "0.8.21-beta1", - "User-Agent": "humanloop/0.8.21-beta1", + "X-Fern-SDK-Version": "0.8.21", + "User-Agent": "humanloop/0.8.21", "X-Fern-Runtime": core.RUNTIME.type, "X-Fern-Runtime-Version": core.RUNTIME.version, ...(await this._getCustomAuthorizationHeaders()), @@ -463,8 +463,8 @@ export class Evaluations { headers: { "X-Fern-Language": "JavaScript", "X-Fern-SDK-Name": "humanloop", - "X-Fern-SDK-Version": "0.8.21-beta1", - "User-Agent": "humanloop/0.8.21-beta1", + "X-Fern-SDK-Version": "0.8.21", + "User-Agent": "humanloop/0.8.21", "X-Fern-Runtime": core.RUNTIME.type, "X-Fern-Runtime-Version": core.RUNTIME.version, ...(await this._getCustomAuthorizationHeaders()), @@ -546,8 +546,8 @@ export class Evaluations { headers: { "X-Fern-Language": "JavaScript", "X-Fern-SDK-Name": "humanloop", - "X-Fern-SDK-Version": "0.8.21-beta1", - "User-Agent": "humanloop/0.8.21-beta1", + "X-Fern-SDK-Version": "0.8.21", + "User-Agent": "humanloop/0.8.21", "X-Fern-Runtime": core.RUNTIME.type, "X-Fern-Runtime-Version": core.RUNTIME.version, ...(await this._getCustomAuthorizationHeaders()), @@ -624,8 +624,8 @@ export class Evaluations { headers: { "X-Fern-Language": "JavaScript", "X-Fern-SDK-Name": "humanloop", - "X-Fern-SDK-Version": "0.8.21-beta1", - "User-Agent": "humanloop/0.8.21-beta1", + "X-Fern-SDK-Version": "0.8.21", + "User-Agent": "humanloop/0.8.21", "X-Fern-Runtime": core.RUNTIME.type, "X-Fern-Runtime-Version": core.RUNTIME.version, ...(await this._getCustomAuthorizationHeaders()), @@ -723,8 +723,8 @@ export class Evaluations { headers: { "X-Fern-Language": "JavaScript", "X-Fern-SDK-Name": "humanloop", - "X-Fern-SDK-Version": "0.8.21-beta1", - "User-Agent": "humanloop/0.8.21-beta1", + "X-Fern-SDK-Version": "0.8.21", + "User-Agent": "humanloop/0.8.21", "X-Fern-Runtime": core.RUNTIME.type, "X-Fern-Runtime-Version": core.RUNTIME.version, ...(await this._getCustomAuthorizationHeaders()), @@ -813,8 +813,8 @@ export class Evaluations { headers: { "X-Fern-Language": "JavaScript", "X-Fern-SDK-Name": "humanloop", - "X-Fern-SDK-Version": "0.8.21-beta1", - "User-Agent": "humanloop/0.8.21-beta1", + "X-Fern-SDK-Version": "0.8.21", + "User-Agent": "humanloop/0.8.21", "X-Fern-Runtime": core.RUNTIME.type, "X-Fern-Runtime-Version": core.RUNTIME.version, ...(await this._getCustomAuthorizationHeaders()), @@ -894,8 +894,8 @@ export class Evaluations { headers: { "X-Fern-Language": "JavaScript", "X-Fern-SDK-Name": "humanloop", - "X-Fern-SDK-Version": "0.8.21-beta1", - "User-Agent": "humanloop/0.8.21-beta1", + "X-Fern-SDK-Version": "0.8.21", + "User-Agent": "humanloop/0.8.21", "X-Fern-Runtime": core.RUNTIME.type, "X-Fern-Runtime-Version": core.RUNTIME.version, ...(await this._getCustomAuthorizationHeaders()), @@ -981,8 +981,8 @@ export class Evaluations { headers: { "X-Fern-Language": "JavaScript", "X-Fern-SDK-Name": "humanloop", - "X-Fern-SDK-Version": "0.8.21-beta1", - "User-Agent": "humanloop/0.8.21-beta1", + "X-Fern-SDK-Version": "0.8.21", + "User-Agent": "humanloop/0.8.21", "X-Fern-Runtime": core.RUNTIME.type, "X-Fern-Runtime-Version": core.RUNTIME.version, ...(await this._getCustomAuthorizationHeaders()), @@ -1074,8 +1074,8 @@ export class Evaluations { headers: { "X-Fern-Language": "JavaScript", "X-Fern-SDK-Name": "humanloop", - "X-Fern-SDK-Version": "0.8.21-beta1", - "User-Agent": "humanloop/0.8.21-beta1", + "X-Fern-SDK-Version": "0.8.21", + "User-Agent": "humanloop/0.8.21", "X-Fern-Runtime": core.RUNTIME.type, "X-Fern-Runtime-Version": core.RUNTIME.version, ...(await this._getCustomAuthorizationHeaders()), @@ -1161,8 +1161,8 @@ export class Evaluations { headers: { "X-Fern-Language": "JavaScript", "X-Fern-SDK-Name": "humanloop", - "X-Fern-SDK-Version": "0.8.21-beta1", - "User-Agent": "humanloop/0.8.21-beta1", + "X-Fern-SDK-Version": "0.8.21", + "User-Agent": "humanloop/0.8.21", "X-Fern-Runtime": core.RUNTIME.type, "X-Fern-Runtime-Version": core.RUNTIME.version, ...(await this._getCustomAuthorizationHeaders()), @@ -1267,8 +1267,8 @@ export class Evaluations { headers: { "X-Fern-Language": "JavaScript", "X-Fern-SDK-Name": "humanloop", - "X-Fern-SDK-Version": "0.8.21-beta1", - "User-Agent": "humanloop/0.8.21-beta1", + "X-Fern-SDK-Version": "0.8.21", + "User-Agent": "humanloop/0.8.21", "X-Fern-Runtime": core.RUNTIME.type, "X-Fern-Runtime-Version": core.RUNTIME.version, ...(await this._getCustomAuthorizationHeaders()), diff --git a/src/api/resources/evaluators/client/Client.ts b/src/api/resources/evaluators/client/Client.ts index c39703a9..4913a258 100644 --- a/src/api/resources/evaluators/client/Client.ts +++ b/src/api/resources/evaluators/client/Client.ts @@ -73,8 +73,8 @@ export class Evaluators { headers: { "X-Fern-Language": "JavaScript", "X-Fern-SDK-Name": "humanloop", - "X-Fern-SDK-Version": "0.8.21-beta1", - "User-Agent": "humanloop/0.8.21-beta1", + "X-Fern-SDK-Version": "0.8.21", + "User-Agent": "humanloop/0.8.21", "X-Fern-Runtime": core.RUNTIME.type, "X-Fern-Runtime-Version": core.RUNTIME.version, ...(await this._getCustomAuthorizationHeaders()), @@ -168,7 +168,7 @@ export class Evaluators { _queryParams["user_filter"] = userFilter; } if (sortBy != null) { - _queryParams["sort_by"] = serializers.ProjectSortBy.jsonOrThrow(sortBy, { + _queryParams["sort_by"] = serializers.FileSortBy.jsonOrThrow(sortBy, { unrecognizedObjectKeys: "strip", }); } @@ -186,8 +186,8 @@ export class Evaluators { headers: { "X-Fern-Language": "JavaScript", "X-Fern-SDK-Name": "humanloop", - "X-Fern-SDK-Version": "0.8.21-beta1", - "User-Agent": "humanloop/0.8.21-beta1", + "X-Fern-SDK-Version": "0.8.21", + "User-Agent": "humanloop/0.8.21", "X-Fern-Runtime": core.RUNTIME.type, "X-Fern-Runtime-Version": core.RUNTIME.version, ...(await this._getCustomAuthorizationHeaders()), @@ -296,8 +296,8 @@ export class Evaluators { headers: { "X-Fern-Language": "JavaScript", "X-Fern-SDK-Name": "humanloop", - "X-Fern-SDK-Version": "0.8.21-beta1", - "User-Agent": "humanloop/0.8.21-beta1", + "X-Fern-SDK-Version": "0.8.21", + "User-Agent": "humanloop/0.8.21", "X-Fern-Runtime": core.RUNTIME.type, "X-Fern-Runtime-Version": core.RUNTIME.version, ...(await this._getCustomAuthorizationHeaders()), @@ -396,8 +396,8 @@ export class Evaluators { headers: { "X-Fern-Language": "JavaScript", "X-Fern-SDK-Name": "humanloop", - "X-Fern-SDK-Version": "0.8.21-beta1", - "User-Agent": "humanloop/0.8.21-beta1", + "X-Fern-SDK-Version": "0.8.21", + "User-Agent": "humanloop/0.8.21", "X-Fern-Runtime": core.RUNTIME.type, "X-Fern-Runtime-Version": core.RUNTIME.version, ...(await this._getCustomAuthorizationHeaders()), @@ -478,8 +478,8 @@ export class Evaluators { headers: { "X-Fern-Language": "JavaScript", "X-Fern-SDK-Name": "humanloop", - "X-Fern-SDK-Version": "0.8.21-beta1", - "User-Agent": "humanloop/0.8.21-beta1", + "X-Fern-SDK-Version": "0.8.21", + "User-Agent": "humanloop/0.8.21", "X-Fern-Runtime": core.RUNTIME.type, "X-Fern-Runtime-Version": core.RUNTIME.version, ...(await this._getCustomAuthorizationHeaders()), @@ -560,8 +560,8 @@ export class Evaluators { headers: { "X-Fern-Language": "JavaScript", "X-Fern-SDK-Name": "humanloop", - "X-Fern-SDK-Version": "0.8.21-beta1", - "User-Agent": "humanloop/0.8.21-beta1", + "X-Fern-SDK-Version": "0.8.21", + "User-Agent": "humanloop/0.8.21", "X-Fern-Runtime": core.RUNTIME.type, "X-Fern-Runtime-Version": core.RUNTIME.version, ...(await this._getCustomAuthorizationHeaders()), @@ -653,8 +653,8 @@ export class Evaluators { headers: { "X-Fern-Language": "JavaScript", "X-Fern-SDK-Name": "humanloop", - "X-Fern-SDK-Version": "0.8.21-beta1", - "User-Agent": "humanloop/0.8.21-beta1", + "X-Fern-SDK-Version": "0.8.21", + "User-Agent": "humanloop/0.8.21", "X-Fern-Runtime": core.RUNTIME.type, "X-Fern-Runtime-Version": core.RUNTIME.version, ...(await this._getCustomAuthorizationHeaders()), @@ -740,8 +740,8 @@ export class Evaluators { headers: { "X-Fern-Language": "JavaScript", "X-Fern-SDK-Name": "humanloop", - "X-Fern-SDK-Version": "0.8.21-beta1", - "User-Agent": "humanloop/0.8.21-beta1", + "X-Fern-SDK-Version": "0.8.21", + "User-Agent": "humanloop/0.8.21", "X-Fern-Runtime": core.RUNTIME.type, "X-Fern-Runtime-Version": core.RUNTIME.version, ...(await this._getCustomAuthorizationHeaders()), @@ -824,8 +824,8 @@ export class Evaluators { headers: { "X-Fern-Language": "JavaScript", "X-Fern-SDK-Name": "humanloop", - "X-Fern-SDK-Version": "0.8.21-beta1", - "User-Agent": "humanloop/0.8.21-beta1", + "X-Fern-SDK-Version": "0.8.21", + "User-Agent": "humanloop/0.8.21", "X-Fern-Runtime": core.RUNTIME.type, "X-Fern-Runtime-Version": core.RUNTIME.version, ...(await this._getCustomAuthorizationHeaders()), @@ -923,8 +923,8 @@ export class Evaluators { headers: { "X-Fern-Language": "JavaScript", "X-Fern-SDK-Name": "humanloop", - "X-Fern-SDK-Version": "0.8.21-beta1", - "User-Agent": "humanloop/0.8.21-beta1", + "X-Fern-SDK-Version": "0.8.21", + "User-Agent": "humanloop/0.8.21", "X-Fern-Runtime": core.RUNTIME.type, "X-Fern-Runtime-Version": core.RUNTIME.version, ...(await this._getCustomAuthorizationHeaders()), @@ -1015,8 +1015,8 @@ export class Evaluators { headers: { "X-Fern-Language": "JavaScript", "X-Fern-SDK-Name": "humanloop", - "X-Fern-SDK-Version": "0.8.21-beta1", - "User-Agent": "humanloop/0.8.21-beta1", + "X-Fern-SDK-Version": "0.8.21", + "User-Agent": "humanloop/0.8.21", "X-Fern-Runtime": core.RUNTIME.type, "X-Fern-Runtime-Version": core.RUNTIME.version, ...(await this._getCustomAuthorizationHeaders()), @@ -1095,8 +1095,8 @@ export class Evaluators { headers: { "X-Fern-Language": "JavaScript", "X-Fern-SDK-Name": "humanloop", - "X-Fern-SDK-Version": "0.8.21-beta1", - "User-Agent": "humanloop/0.8.21-beta1", + "X-Fern-SDK-Version": "0.8.21", + "User-Agent": "humanloop/0.8.21", "X-Fern-Runtime": core.RUNTIME.type, "X-Fern-Runtime-Version": core.RUNTIME.version, ...(await this._getCustomAuthorizationHeaders()), @@ -1186,8 +1186,8 @@ export class Evaluators { headers: { "X-Fern-Language": "JavaScript", "X-Fern-SDK-Name": "humanloop", - "X-Fern-SDK-Version": "0.8.21-beta1", - "User-Agent": "humanloop/0.8.21-beta1", + "X-Fern-SDK-Version": "0.8.21", + "User-Agent": "humanloop/0.8.21", "X-Fern-Runtime": core.RUNTIME.type, "X-Fern-Runtime-Version": core.RUNTIME.version, ...(await this._getCustomAuthorizationHeaders()), diff --git a/src/api/resources/evaluators/client/requests/ListEvaluatorsGetRequest.ts b/src/api/resources/evaluators/client/requests/ListEvaluatorsGetRequest.ts index 676ff433..67c8497e 100644 --- a/src/api/resources/evaluators/client/requests/ListEvaluatorsGetRequest.ts +++ b/src/api/resources/evaluators/client/requests/ListEvaluatorsGetRequest.ts @@ -30,7 +30,7 @@ export interface ListEvaluatorsGetRequest { /** * Field to sort Evaluators by */ - sortBy?: Humanloop.ProjectSortBy; + sortBy?: Humanloop.FileSortBy; /** * Direction to sort by. */ diff --git a/src/api/resources/files/client/Client.ts b/src/api/resources/files/client/Client.ts index 83aa8ff1..d32c1153 100644 --- a/src/api/resources/files/client/Client.ts +++ b/src/api/resources/files/client/Client.ts @@ -48,7 +48,18 @@ export class Files { request: Humanloop.ListFilesFilesGetRequest = {}, requestOptions?: Files.RequestOptions, ): Promise { - const { page, size, name, template, type: type_, environment, sortBy, order } = request; + const { + page, + size, + name, + path, + template, + type: type_, + environment, + sortBy, + order, + includeRawFileContent, + } = request; const _queryParams: Record = {}; if (page != null) { _queryParams["page"] = page.toString(); @@ -62,6 +73,10 @@ export class Files { _queryParams["name"] = name; } + if (path != null) { + _queryParams["path"] = path; + } + if (template != null) { _queryParams["template"] = template.toString(); } @@ -81,15 +96,17 @@ export class Files { } if (sortBy != null) { - _queryParams["sort_by"] = serializers.ProjectSortBy.jsonOrThrow(sortBy, { - unrecognizedObjectKeys: "strip", - }); + _queryParams["sort_by"] = serializers.FileSortBy.jsonOrThrow(sortBy, { unrecognizedObjectKeys: "strip" }); } if (order != null) { _queryParams["order"] = serializers.SortOrder.jsonOrThrow(order, { unrecognizedObjectKeys: "strip" }); } + if (includeRawFileContent != null) { + _queryParams["include_raw_file_content"] = includeRawFileContent.toString(); + } + const _response = await (this._options.fetcher ?? core.fetcher)({ url: urlJoin( (await core.Supplier.get(this._options.baseUrl)) ?? @@ -101,8 +118,8 @@ export class Files { headers: { "X-Fern-Language": "JavaScript", "X-Fern-SDK-Name": "humanloop", - "X-Fern-SDK-Version": "0.8.21-beta1", - "User-Agent": "humanloop/0.8.21-beta1", + "X-Fern-SDK-Version": "0.8.21", + "User-Agent": "humanloop/0.8.21", "X-Fern-Runtime": core.RUNTIME.type, "X-Fern-Runtime-Version": core.RUNTIME.version, ...(await this._getCustomAuthorizationHeaders()), @@ -180,12 +197,16 @@ export class Files { request: Humanloop.BodyRetrieveByPathFilesRetrieveByPathPost, requestOptions?: Files.RequestOptions, ): Promise { - const { environment, ..._body } = request; + const { environment, includeRawFileContent, ..._body } = request; const _queryParams: Record = {}; if (environment != null) { _queryParams["environment"] = environment; } + if (includeRawFileContent != null) { + _queryParams["include_raw_file_content"] = includeRawFileContent.toString(); + } + const _response = await (this._options.fetcher ?? core.fetcher)({ url: urlJoin( (await core.Supplier.get(this._options.baseUrl)) ?? @@ -197,8 +218,8 @@ export class Files { headers: { "X-Fern-Language": "JavaScript", "X-Fern-SDK-Name": "humanloop", - "X-Fern-SDK-Version": "0.8.21-beta1", - "User-Agent": "humanloop/0.8.21-beta1", + "X-Fern-SDK-Version": "0.8.21", + "User-Agent": "humanloop/0.8.21", "X-Fern-Runtime": core.RUNTIME.type, "X-Fern-Runtime-Version": core.RUNTIME.version, ...(await this._getCustomAuthorizationHeaders()), diff --git a/src/api/resources/files/client/requests/BodyRetrieveByPathFilesRetrieveByPathPost.ts b/src/api/resources/files/client/requests/BodyRetrieveByPathFilesRetrieveByPathPost.ts index 7c5c0012..756e769c 100644 --- a/src/api/resources/files/client/requests/BodyRetrieveByPathFilesRetrieveByPathPost.ts +++ b/src/api/resources/files/client/requests/BodyRetrieveByPathFilesRetrieveByPathPost.ts @@ -13,6 +13,10 @@ export interface BodyRetrieveByPathFilesRetrieveByPathPost { * Name of the Environment to retrieve a deployed Version from. */ environment?: string; + /** + * Whether to include the raw file content in the response. Currently only supported for Agents and Prompts. + */ + includeRawFileContent?: boolean; /** Path of the File to retrieve. */ path: string; } diff --git a/src/api/resources/files/client/requests/ListFilesFilesGetRequest.ts b/src/api/resources/files/client/requests/ListFilesFilesGetRequest.ts index 592e4e8b..4fc50bd5 100644 --- a/src/api/resources/files/client/requests/ListFilesFilesGetRequest.ts +++ b/src/api/resources/files/client/requests/ListFilesFilesGetRequest.ts @@ -21,6 +21,10 @@ export interface ListFilesFilesGetRequest { * Case-insensitive filter for file name. */ name?: string; + /** + * Path of the directory to filter for. Returns files in this directory and all its subdirectories. + */ + path?: string; /** * Filter to include only template files. */ @@ -36,9 +40,13 @@ export interface ListFilesFilesGetRequest { /** * Field to sort files by */ - sortBy?: Humanloop.ProjectSortBy; + sortBy?: Humanloop.FileSortBy; /** * Direction to sort by. */ order?: Humanloop.SortOrder; + /** + * Whether to include the raw file content in the response. Currently only supported for Agents and Prompts. + */ + includeRawFileContent?: boolean; } diff --git a/src/api/resources/flows/client/Client.ts b/src/api/resources/flows/client/Client.ts index e548186e..9dbbe18d 100644 --- a/src/api/resources/flows/client/Client.ts +++ b/src/api/resources/flows/client/Client.ts @@ -98,8 +98,8 @@ export class Flows { headers: { "X-Fern-Language": "JavaScript", "X-Fern-SDK-Name": "humanloop", - "X-Fern-SDK-Version": "0.8.21-beta1", - "User-Agent": "humanloop/0.8.21-beta1", + "X-Fern-SDK-Version": "0.8.21", + "User-Agent": "humanloop/0.8.21", "X-Fern-Runtime": core.RUNTIME.type, "X-Fern-Runtime-Version": core.RUNTIME.version, ...(await this._getCustomAuthorizationHeaders()), @@ -198,8 +198,8 @@ export class Flows { headers: { "X-Fern-Language": "JavaScript", "X-Fern-SDK-Name": "humanloop", - "X-Fern-SDK-Version": "0.8.21-beta1", - "User-Agent": "humanloop/0.8.21-beta1", + "X-Fern-SDK-Version": "0.8.21", + "User-Agent": "humanloop/0.8.21", "X-Fern-Runtime": core.RUNTIME.type, "X-Fern-Runtime-Version": core.RUNTIME.version, ...(await this._getCustomAuthorizationHeaders()), @@ -298,8 +298,8 @@ export class Flows { headers: { "X-Fern-Language": "JavaScript", "X-Fern-SDK-Name": "humanloop", - "X-Fern-SDK-Version": "0.8.21-beta1", - "User-Agent": "humanloop/0.8.21-beta1", + "X-Fern-SDK-Version": "0.8.21", + "User-Agent": "humanloop/0.8.21", "X-Fern-Runtime": core.RUNTIME.type, "X-Fern-Runtime-Version": core.RUNTIME.version, ...(await this._getCustomAuthorizationHeaders()), @@ -380,8 +380,8 @@ export class Flows { headers: { "X-Fern-Language": "JavaScript", "X-Fern-SDK-Name": "humanloop", - "X-Fern-SDK-Version": "0.8.21-beta1", - "User-Agent": "humanloop/0.8.21-beta1", + "X-Fern-SDK-Version": "0.8.21", + "User-Agent": "humanloop/0.8.21", "X-Fern-Runtime": core.RUNTIME.type, "X-Fern-Runtime-Version": core.RUNTIME.version, ...(await this._getCustomAuthorizationHeaders()), @@ -462,8 +462,8 @@ export class Flows { headers: { "X-Fern-Language": "JavaScript", "X-Fern-SDK-Name": "humanloop", - "X-Fern-SDK-Version": "0.8.21-beta1", - "User-Agent": "humanloop/0.8.21-beta1", + "X-Fern-SDK-Version": "0.8.21", + "User-Agent": "humanloop/0.8.21", "X-Fern-Runtime": core.RUNTIME.type, "X-Fern-Runtime-Version": core.RUNTIME.version, ...(await this._getCustomAuthorizationHeaders()), @@ -554,7 +554,7 @@ export class Flows { _queryParams["user_filter"] = userFilter; } if (sortBy != null) { - _queryParams["sort_by"] = serializers.ProjectSortBy.jsonOrThrow(sortBy, { + _queryParams["sort_by"] = serializers.FileSortBy.jsonOrThrow(sortBy, { unrecognizedObjectKeys: "strip", }); } @@ -572,8 +572,8 @@ export class Flows { headers: { "X-Fern-Language": "JavaScript", "X-Fern-SDK-Name": "humanloop", - "X-Fern-SDK-Version": "0.8.21-beta1", - "User-Agent": "humanloop/0.8.21-beta1", + "X-Fern-SDK-Version": "0.8.21", + "User-Agent": "humanloop/0.8.21", "X-Fern-Runtime": core.RUNTIME.type, "X-Fern-Runtime-Version": core.RUNTIME.version, ...(await this._getCustomAuthorizationHeaders()), @@ -688,8 +688,8 @@ export class Flows { headers: { "X-Fern-Language": "JavaScript", "X-Fern-SDK-Name": "humanloop", - "X-Fern-SDK-Version": "0.8.21-beta1", - "User-Agent": "humanloop/0.8.21-beta1", + "X-Fern-SDK-Version": "0.8.21", + "User-Agent": "humanloop/0.8.21", "X-Fern-Runtime": core.RUNTIME.type, "X-Fern-Runtime-Version": core.RUNTIME.version, ...(await this._getCustomAuthorizationHeaders()), @@ -781,8 +781,8 @@ export class Flows { headers: { "X-Fern-Language": "JavaScript", "X-Fern-SDK-Name": "humanloop", - "X-Fern-SDK-Version": "0.8.21-beta1", - "User-Agent": "humanloop/0.8.21-beta1", + "X-Fern-SDK-Version": "0.8.21", + "User-Agent": "humanloop/0.8.21", "X-Fern-Runtime": core.RUNTIME.type, "X-Fern-Runtime-Version": core.RUNTIME.version, ...(await this._getCustomAuthorizationHeaders()), @@ -868,8 +868,8 @@ export class Flows { headers: { "X-Fern-Language": "JavaScript", "X-Fern-SDK-Name": "humanloop", - "X-Fern-SDK-Version": "0.8.21-beta1", - "User-Agent": "humanloop/0.8.21-beta1", + "X-Fern-SDK-Version": "0.8.21", + "User-Agent": "humanloop/0.8.21", "X-Fern-Runtime": core.RUNTIME.type, "X-Fern-Runtime-Version": core.RUNTIME.version, ...(await this._getCustomAuthorizationHeaders()), @@ -952,8 +952,8 @@ export class Flows { headers: { "X-Fern-Language": "JavaScript", "X-Fern-SDK-Name": "humanloop", - "X-Fern-SDK-Version": "0.8.21-beta1", - "User-Agent": "humanloop/0.8.21-beta1", + "X-Fern-SDK-Version": "0.8.21", + "User-Agent": "humanloop/0.8.21", "X-Fern-Runtime": core.RUNTIME.type, "X-Fern-Runtime-Version": core.RUNTIME.version, ...(await this._getCustomAuthorizationHeaders()), @@ -1051,8 +1051,8 @@ export class Flows { headers: { "X-Fern-Language": "JavaScript", "X-Fern-SDK-Name": "humanloop", - "X-Fern-SDK-Version": "0.8.21-beta1", - "User-Agent": "humanloop/0.8.21-beta1", + "X-Fern-SDK-Version": "0.8.21", + "User-Agent": "humanloop/0.8.21", "X-Fern-Runtime": core.RUNTIME.type, "X-Fern-Runtime-Version": core.RUNTIME.version, ...(await this._getCustomAuthorizationHeaders()), @@ -1143,8 +1143,8 @@ export class Flows { headers: { "X-Fern-Language": "JavaScript", "X-Fern-SDK-Name": "humanloop", - "X-Fern-SDK-Version": "0.8.21-beta1", - "User-Agent": "humanloop/0.8.21-beta1", + "X-Fern-SDK-Version": "0.8.21", + "User-Agent": "humanloop/0.8.21", "X-Fern-Runtime": core.RUNTIME.type, "X-Fern-Runtime-Version": core.RUNTIME.version, ...(await this._getCustomAuthorizationHeaders()), @@ -1223,8 +1223,8 @@ export class Flows { headers: { "X-Fern-Language": "JavaScript", "X-Fern-SDK-Name": "humanloop", - "X-Fern-SDK-Version": "0.8.21-beta1", - "User-Agent": "humanloop/0.8.21-beta1", + "X-Fern-SDK-Version": "0.8.21", + "User-Agent": "humanloop/0.8.21", "X-Fern-Runtime": core.RUNTIME.type, "X-Fern-Runtime-Version": core.RUNTIME.version, ...(await this._getCustomAuthorizationHeaders()), @@ -1316,8 +1316,8 @@ export class Flows { headers: { "X-Fern-Language": "JavaScript", "X-Fern-SDK-Name": "humanloop", - "X-Fern-SDK-Version": "0.8.21-beta1", - "User-Agent": "humanloop/0.8.21-beta1", + "X-Fern-SDK-Version": "0.8.21", + "User-Agent": "humanloop/0.8.21", "X-Fern-Runtime": core.RUNTIME.type, "X-Fern-Runtime-Version": core.RUNTIME.version, ...(await this._getCustomAuthorizationHeaders()), diff --git a/src/api/resources/flows/client/requests/ListFlowsGetRequest.ts b/src/api/resources/flows/client/requests/ListFlowsGetRequest.ts index e7a219a6..3f93e86e 100644 --- a/src/api/resources/flows/client/requests/ListFlowsGetRequest.ts +++ b/src/api/resources/flows/client/requests/ListFlowsGetRequest.ts @@ -30,7 +30,7 @@ export interface ListFlowsGetRequest { /** * Field to sort Flows by */ - sortBy?: Humanloop.ProjectSortBy; + sortBy?: Humanloop.FileSortBy; /** * Direction to sort by. */ diff --git a/src/api/resources/logs/client/Client.ts b/src/api/resources/logs/client/Client.ts index e8e0dcb3..57d0a957 100644 --- a/src/api/resources/logs/client/Client.ts +++ b/src/api/resources/logs/client/Client.ts @@ -5,8 +5,8 @@ import * as environments from "../../../../environments"; import * as core from "../../../../core"; import * as Humanloop from "../../../index"; -import urlJoin from "url-join"; import * as serializers from "../../../../serialization/index"; +import urlJoin from "url-join"; import * as errors from "../../../../errors/index"; export declare namespace Logs { @@ -69,6 +69,7 @@ export class Logs { page, size, versionId, + versionStatus, id, search, metadataSearch, @@ -90,6 +91,11 @@ export class Logs { if (versionId != null) { _queryParams["version_id"] = versionId; } + if (versionStatus != null) { + _queryParams["version_status"] = serializers.VersionStatus.jsonOrThrow(versionStatus, { + unrecognizedObjectKeys: "strip", + }); + } if (id != null) { if (Array.isArray(id)) { _queryParams["id"] = id.map((item) => item); @@ -136,8 +142,8 @@ export class Logs { headers: { "X-Fern-Language": "JavaScript", "X-Fern-SDK-Name": "humanloop", - "X-Fern-SDK-Version": "0.8.21-beta1", - "User-Agent": "humanloop/0.8.21-beta1", + "X-Fern-SDK-Version": "0.8.21", + "User-Agent": "humanloop/0.8.21", "X-Fern-Runtime": core.RUNTIME.type, "X-Fern-Runtime-Version": core.RUNTIME.version, ...(await this._getCustomAuthorizationHeaders()), @@ -242,8 +248,8 @@ export class Logs { headers: { "X-Fern-Language": "JavaScript", "X-Fern-SDK-Name": "humanloop", - "X-Fern-SDK-Version": "0.8.21-beta1", - "User-Agent": "humanloop/0.8.21-beta1", + "X-Fern-SDK-Version": "0.8.21", + "User-Agent": "humanloop/0.8.21", "X-Fern-Runtime": core.RUNTIME.type, "X-Fern-Runtime-Version": core.RUNTIME.version, ...(await this._getCustomAuthorizationHeaders()), @@ -318,8 +324,8 @@ export class Logs { headers: { "X-Fern-Language": "JavaScript", "X-Fern-SDK-Name": "humanloop", - "X-Fern-SDK-Version": "0.8.21-beta1", - "User-Agent": "humanloop/0.8.21-beta1", + "X-Fern-SDK-Version": "0.8.21", + "User-Agent": "humanloop/0.8.21", "X-Fern-Runtime": core.RUNTIME.type, "X-Fern-Runtime-Version": core.RUNTIME.version, ...(await this._getCustomAuthorizationHeaders()), diff --git a/src/api/resources/logs/client/requests/ListLogsGetRequest.ts b/src/api/resources/logs/client/requests/ListLogsGetRequest.ts index 1b9660c7..d3f8db4c 100644 --- a/src/api/resources/logs/client/requests/ListLogsGetRequest.ts +++ b/src/api/resources/logs/client/requests/ListLogsGetRequest.ts @@ -2,6 +2,8 @@ * This file was auto-generated by Fern from our API Definition. */ +import * as Humanloop from "../../../../index"; + /** * @example * { @@ -26,6 +28,10 @@ export interface ListLogsGetRequest { * If provided, only Logs belonging to the specified Version will be returned. */ versionId?: string; + /** + * If provided, only Logs belonging to Versions with the specified status will be returned. + */ + versionStatus?: Humanloop.VersionStatus; /** * If provided, returns Logs whose IDs contain any of the specified values as substrings. */ diff --git a/src/api/resources/prompts/client/Client.ts b/src/api/resources/prompts/client/Client.ts index 9541f43a..1bb67cbe 100644 --- a/src/api/resources/prompts/client/Client.ts +++ b/src/api/resources/prompts/client/Client.ts @@ -129,8 +129,8 @@ export class Prompts { headers: { "X-Fern-Language": "JavaScript", "X-Fern-SDK-Name": "humanloop", - "X-Fern-SDK-Version": "0.8.21-beta1", - "User-Agent": "humanloop/0.8.21-beta1", + "X-Fern-SDK-Version": "0.8.21", + "User-Agent": "humanloop/0.8.21", "X-Fern-Runtime": core.RUNTIME.type, "X-Fern-Runtime-Version": core.RUNTIME.version, ...(await this._getCustomAuthorizationHeaders()), @@ -221,8 +221,8 @@ export class Prompts { headers: { "X-Fern-Language": "JavaScript", "X-Fern-SDK-Name": "humanloop", - "X-Fern-SDK-Version": "0.8.21-beta1", - "User-Agent": "humanloop/0.8.21-beta1", + "X-Fern-SDK-Version": "0.8.21", + "User-Agent": "humanloop/0.8.21", "X-Fern-Runtime": core.RUNTIME.type, "X-Fern-Runtime-Version": core.RUNTIME.version, ...(await this._getCustomAuthorizationHeaders()), @@ -321,8 +321,8 @@ export class Prompts { headers: { "X-Fern-Language": "JavaScript", "X-Fern-SDK-Name": "humanloop", - "X-Fern-SDK-Version": "0.8.21-beta1", - "User-Agent": "humanloop/0.8.21-beta1", + "X-Fern-SDK-Version": "0.8.21", + "User-Agent": "humanloop/0.8.21", "X-Fern-Runtime": core.RUNTIME.type, "X-Fern-Runtime-Version": core.RUNTIME.version, ...(await this._getCustomAuthorizationHeaders()), @@ -502,8 +502,8 @@ export class Prompts { headers: { "X-Fern-Language": "JavaScript", "X-Fern-SDK-Name": "humanloop", - "X-Fern-SDK-Version": "0.8.21-beta1", - "User-Agent": "humanloop/0.8.21-beta1", + "X-Fern-SDK-Version": "0.8.21", + "User-Agent": "humanloop/0.8.21", "X-Fern-Runtime": core.RUNTIME.type, "X-Fern-Runtime-Version": core.RUNTIME.version, ...(await this._getCustomAuthorizationHeaders()), @@ -600,7 +600,7 @@ export class Prompts { _queryParams["user_filter"] = userFilter; } if (sortBy != null) { - _queryParams["sort_by"] = serializers.ProjectSortBy.jsonOrThrow(sortBy, { + _queryParams["sort_by"] = serializers.FileSortBy.jsonOrThrow(sortBy, { unrecognizedObjectKeys: "strip", }); } @@ -618,8 +618,8 @@ export class Prompts { headers: { "X-Fern-Language": "JavaScript", "X-Fern-SDK-Name": "humanloop", - "X-Fern-SDK-Version": "0.8.21-beta1", - "User-Agent": "humanloop/0.8.21-beta1", + "X-Fern-SDK-Version": "0.8.21", + "User-Agent": "humanloop/0.8.21", "X-Fern-Runtime": core.RUNTIME.type, "X-Fern-Runtime-Version": core.RUNTIME.version, ...(await this._getCustomAuthorizationHeaders()), @@ -731,8 +731,8 @@ export class Prompts { headers: { "X-Fern-Language": "JavaScript", "X-Fern-SDK-Name": "humanloop", - "X-Fern-SDK-Version": "0.8.21-beta1", - "User-Agent": "humanloop/0.8.21-beta1", + "X-Fern-SDK-Version": "0.8.21", + "User-Agent": "humanloop/0.8.21", "X-Fern-Runtime": core.RUNTIME.type, "X-Fern-Runtime-Version": core.RUNTIME.version, ...(await this._getCustomAuthorizationHeaders()), @@ -831,8 +831,8 @@ export class Prompts { headers: { "X-Fern-Language": "JavaScript", "X-Fern-SDK-Name": "humanloop", - "X-Fern-SDK-Version": "0.8.21-beta1", - "User-Agent": "humanloop/0.8.21-beta1", + "X-Fern-SDK-Version": "0.8.21", + "User-Agent": "humanloop/0.8.21", "X-Fern-Runtime": core.RUNTIME.type, "X-Fern-Runtime-Version": core.RUNTIME.version, ...(await this._getCustomAuthorizationHeaders()), @@ -913,8 +913,8 @@ export class Prompts { headers: { "X-Fern-Language": "JavaScript", "X-Fern-SDK-Name": "humanloop", - "X-Fern-SDK-Version": "0.8.21-beta1", - "User-Agent": "humanloop/0.8.21-beta1", + "X-Fern-SDK-Version": "0.8.21", + "User-Agent": "humanloop/0.8.21", "X-Fern-Runtime": core.RUNTIME.type, "X-Fern-Runtime-Version": core.RUNTIME.version, ...(await this._getCustomAuthorizationHeaders()), @@ -995,8 +995,8 @@ export class Prompts { headers: { "X-Fern-Language": "JavaScript", "X-Fern-SDK-Name": "humanloop", - "X-Fern-SDK-Version": "0.8.21-beta1", - "User-Agent": "humanloop/0.8.21-beta1", + "X-Fern-SDK-Version": "0.8.21", + "User-Agent": "humanloop/0.8.21", "X-Fern-Runtime": core.RUNTIME.type, "X-Fern-Runtime-Version": core.RUNTIME.version, ...(await this._getCustomAuthorizationHeaders()), @@ -1099,8 +1099,8 @@ export class Prompts { headers: { "X-Fern-Language": "JavaScript", "X-Fern-SDK-Name": "humanloop", - "X-Fern-SDK-Version": "0.8.21-beta1", - "User-Agent": "humanloop/0.8.21-beta1", + "X-Fern-SDK-Version": "0.8.21", + "User-Agent": "humanloop/0.8.21", "X-Fern-Runtime": core.RUNTIME.type, "X-Fern-Runtime-Version": core.RUNTIME.version, ...(await this._getCustomAuthorizationHeaders()), @@ -1193,8 +1193,8 @@ export class Prompts { headers: { "X-Fern-Language": "JavaScript", "X-Fern-SDK-Name": "humanloop", - "X-Fern-SDK-Version": "0.8.21-beta1", - "User-Agent": "humanloop/0.8.21-beta1", + "X-Fern-SDK-Version": "0.8.21", + "User-Agent": "humanloop/0.8.21", "X-Fern-Runtime": core.RUNTIME.type, "X-Fern-Runtime-Version": core.RUNTIME.version, ...(await this._getCustomAuthorizationHeaders()), @@ -1280,8 +1280,8 @@ export class Prompts { headers: { "X-Fern-Language": "JavaScript", "X-Fern-SDK-Name": "humanloop", - "X-Fern-SDK-Version": "0.8.21-beta1", - "User-Agent": "humanloop/0.8.21-beta1", + "X-Fern-SDK-Version": "0.8.21", + "User-Agent": "humanloop/0.8.21", "X-Fern-Runtime": core.RUNTIME.type, "X-Fern-Runtime-Version": core.RUNTIME.version, ...(await this._getCustomAuthorizationHeaders()), @@ -1364,8 +1364,8 @@ export class Prompts { headers: { "X-Fern-Language": "JavaScript", "X-Fern-SDK-Name": "humanloop", - "X-Fern-SDK-Version": "0.8.21-beta1", - "User-Agent": "humanloop/0.8.21-beta1", + "X-Fern-SDK-Version": "0.8.21", + "User-Agent": "humanloop/0.8.21", "X-Fern-Runtime": core.RUNTIME.type, "X-Fern-Runtime-Version": core.RUNTIME.version, ...(await this._getCustomAuthorizationHeaders()), @@ -1463,8 +1463,8 @@ export class Prompts { headers: { "X-Fern-Language": "JavaScript", "X-Fern-SDK-Name": "humanloop", - "X-Fern-SDK-Version": "0.8.21-beta1", - "User-Agent": "humanloop/0.8.21-beta1", + "X-Fern-SDK-Version": "0.8.21", + "User-Agent": "humanloop/0.8.21", "X-Fern-Runtime": core.RUNTIME.type, "X-Fern-Runtime-Version": core.RUNTIME.version, ...(await this._getCustomAuthorizationHeaders()), @@ -1555,8 +1555,8 @@ export class Prompts { headers: { "X-Fern-Language": "JavaScript", "X-Fern-SDK-Name": "humanloop", - "X-Fern-SDK-Version": "0.8.21-beta1", - "User-Agent": "humanloop/0.8.21-beta1", + "X-Fern-SDK-Version": "0.8.21", + "User-Agent": "humanloop/0.8.21", "X-Fern-Runtime": core.RUNTIME.type, "X-Fern-Runtime-Version": core.RUNTIME.version, ...(await this._getCustomAuthorizationHeaders()), @@ -1635,8 +1635,8 @@ export class Prompts { headers: { "X-Fern-Language": "JavaScript", "X-Fern-SDK-Name": "humanloop", - "X-Fern-SDK-Version": "0.8.21-beta1", - "User-Agent": "humanloop/0.8.21-beta1", + "X-Fern-SDK-Version": "0.8.21", + "User-Agent": "humanloop/0.8.21", "X-Fern-Runtime": core.RUNTIME.type, "X-Fern-Runtime-Version": core.RUNTIME.version, ...(await this._getCustomAuthorizationHeaders()), @@ -1728,8 +1728,8 @@ export class Prompts { headers: { "X-Fern-Language": "JavaScript", "X-Fern-SDK-Name": "humanloop", - "X-Fern-SDK-Version": "0.8.21-beta1", - "User-Agent": "humanloop/0.8.21-beta1", + "X-Fern-SDK-Version": "0.8.21", + "User-Agent": "humanloop/0.8.21", "X-Fern-Runtime": core.RUNTIME.type, "X-Fern-Runtime-Version": core.RUNTIME.version, ...(await this._getCustomAuthorizationHeaders()), @@ -1811,7 +1811,7 @@ export class Prompts { id: string, request: Humanloop.SerializePromptsIdSerializeGetRequest = {}, requestOptions?: Prompts.RequestOptions, - ): Promise { + ): Promise { const { versionId, environment } = request; const _queryParams: Record = {}; if (versionId != null) { @@ -1833,8 +1833,8 @@ export class Prompts { headers: { "X-Fern-Language": "JavaScript", "X-Fern-SDK-Name": "humanloop", - "X-Fern-SDK-Version": "0.8.21-beta1", - "User-Agent": "humanloop/0.8.21-beta1", + "X-Fern-SDK-Version": "0.8.21", + "User-Agent": "humanloop/0.8.21", "X-Fern-Runtime": core.RUNTIME.type, "X-Fern-Runtime-Version": core.RUNTIME.version, ...(await this._getCustomAuthorizationHeaders()), @@ -1843,12 +1843,13 @@ export class Prompts { contentType: "application/json", queryParameters: _queryParams, requestType: "json", + responseType: "text", timeoutMs: requestOptions?.timeoutInSeconds != null ? requestOptions.timeoutInSeconds * 1000 : 60000, maxRetries: requestOptions?.maxRetries, abortSignal: requestOptions?.abortSignal, }); if (_response.ok) { - return _response.body; + return _response.body as string; } if (_response.error.reason === "status-code") { @@ -1917,8 +1918,8 @@ export class Prompts { headers: { "X-Fern-Language": "JavaScript", "X-Fern-SDK-Name": "humanloop", - "X-Fern-SDK-Version": "0.8.21-beta1", - "User-Agent": "humanloop/0.8.21-beta1", + "X-Fern-SDK-Version": "0.8.21", + "User-Agent": "humanloop/0.8.21", "X-Fern-Runtime": core.RUNTIME.type, "X-Fern-Runtime-Version": core.RUNTIME.version, ...(await this._getCustomAuthorizationHeaders()), diff --git a/src/api/resources/prompts/client/requests/ListPromptsGetRequest.ts b/src/api/resources/prompts/client/requests/ListPromptsGetRequest.ts index 0344a789..f681b09d 100644 --- a/src/api/resources/prompts/client/requests/ListPromptsGetRequest.ts +++ b/src/api/resources/prompts/client/requests/ListPromptsGetRequest.ts @@ -30,7 +30,7 @@ export interface ListPromptsGetRequest { /** * Field to sort Prompts by */ - sortBy?: Humanloop.ProjectSortBy; + sortBy?: Humanloop.FileSortBy; /** * Direction to sort by. */ diff --git a/src/api/resources/prompts/client/requests/PromptLogRequest.ts b/src/api/resources/prompts/client/requests/PromptLogRequest.ts index 45a47afd..ab653a25 100644 --- a/src/api/resources/prompts/client/requests/PromptLogRequest.ts +++ b/src/api/resources/prompts/client/requests/PromptLogRequest.ts @@ -75,8 +75,13 @@ export interface PromptLogRequest { * - `{'type': 'function', 'function': {name': }}` forces the model to use the named function. */ toolChoice?: Humanloop.PromptLogRequestToolChoice; - /** Details of your Prompt. A new Prompt version will be created if the provided details are new. */ - prompt?: Humanloop.PromptKernelRequest; + /** + * The Prompt configuration to use. Two formats are supported: + * - An object representing the details of the Prompt configuration + * - A string representing the raw contents of a .prompt file + * A new Prompt version will be created if the provided details do not match any existing version. + */ + prompt?: Humanloop.PromptLogRequestPrompt; /** When the logged event started. */ startTime?: Date; /** When the logged event ended. */ diff --git a/src/api/resources/prompts/client/requests/PromptsCallRequest.ts b/src/api/resources/prompts/client/requests/PromptsCallRequest.ts index 4e1595fc..5f516743 100644 --- a/src/api/resources/prompts/client/requests/PromptsCallRequest.ts +++ b/src/api/resources/prompts/client/requests/PromptsCallRequest.ts @@ -91,8 +91,13 @@ export interface PromptsCallRequest { * - `{'type': 'function', 'function': {name': }}` forces the model to use the named function. */ toolChoice?: Humanloop.PromptsCallRequestToolChoice; - /** Details of your Prompt. A new Prompt version will be created if the provided details are new. */ - prompt?: Humanloop.PromptKernelRequest; + /** + * The Prompt configuration to use. Two formats are supported: + * - An object representing the details of the Prompt configuration + * - A string representing the raw contents of a .prompt file + * A new Prompt version will be created if the provided details do not match any existing version. + */ + prompt?: Humanloop.PromptsCallRequestPrompt; /** The inputs passed to the prompt template. */ inputs?: Record; /** Identifies where the model was called from. */ diff --git a/src/api/resources/prompts/client/requests/PromptsCallStreamRequest.ts b/src/api/resources/prompts/client/requests/PromptsCallStreamRequest.ts index b444e68c..c069dd08 100644 --- a/src/api/resources/prompts/client/requests/PromptsCallStreamRequest.ts +++ b/src/api/resources/prompts/client/requests/PromptsCallStreamRequest.ts @@ -31,8 +31,13 @@ export interface PromptsCallStreamRequest { * - `{'type': 'function', 'function': {name': }}` forces the model to use the named function. */ toolChoice?: Humanloop.PromptsCallStreamRequestToolChoice; - /** Details of your Prompt. A new Prompt version will be created if the provided details are new. */ - prompt?: Humanloop.PromptKernelRequest; + /** + * The Prompt configuration to use. Two formats are supported: + * - An object representing the details of the Prompt configuration + * - A string representing the raw contents of a .prompt file + * A new Prompt version will be created if the provided details do not match any existing version. + */ + prompt?: Humanloop.PromptsCallStreamRequestPrompt; /** The inputs passed to the prompt template. */ inputs?: Record; /** Identifies where the model was called from. */ diff --git a/src/api/resources/prompts/types/PromptLogRequestPrompt.ts b/src/api/resources/prompts/types/PromptLogRequestPrompt.ts new file mode 100644 index 00000000..5c8fe6a8 --- /dev/null +++ b/src/api/resources/prompts/types/PromptLogRequestPrompt.ts @@ -0,0 +1,13 @@ +/** + * This file was auto-generated by Fern from our API Definition. + */ + +import * as Humanloop from "../../../index"; + +/** + * The Prompt configuration to use. Two formats are supported: + * - An object representing the details of the Prompt configuration + * - A string representing the raw contents of a .prompt file + * A new Prompt version will be created if the provided details do not match any existing version. + */ +export type PromptLogRequestPrompt = Humanloop.PromptKernelRequest | string; diff --git a/src/api/resources/prompts/types/PromptsCallRequestPrompt.ts b/src/api/resources/prompts/types/PromptsCallRequestPrompt.ts new file mode 100644 index 00000000..c94ade87 --- /dev/null +++ b/src/api/resources/prompts/types/PromptsCallRequestPrompt.ts @@ -0,0 +1,13 @@ +/** + * This file was auto-generated by Fern from our API Definition. + */ + +import * as Humanloop from "../../../index"; + +/** + * The Prompt configuration to use. Two formats are supported: + * - An object representing the details of the Prompt configuration + * - A string representing the raw contents of a .prompt file + * A new Prompt version will be created if the provided details do not match any existing version. + */ +export type PromptsCallRequestPrompt = Humanloop.PromptKernelRequest | string; diff --git a/src/api/resources/prompts/types/PromptsCallStreamRequestPrompt.ts b/src/api/resources/prompts/types/PromptsCallStreamRequestPrompt.ts new file mode 100644 index 00000000..1dee1331 --- /dev/null +++ b/src/api/resources/prompts/types/PromptsCallStreamRequestPrompt.ts @@ -0,0 +1,13 @@ +/** + * This file was auto-generated by Fern from our API Definition. + */ + +import * as Humanloop from "../../../index"; + +/** + * The Prompt configuration to use. Two formats are supported: + * - An object representing the details of the Prompt configuration + * - A string representing the raw contents of a .prompt file + * A new Prompt version will be created if the provided details do not match any existing version. + */ +export type PromptsCallStreamRequestPrompt = Humanloop.PromptKernelRequest | string; diff --git a/src/api/resources/prompts/types/index.ts b/src/api/resources/prompts/types/index.ts index 8265b2f3..f8045c03 100644 --- a/src/api/resources/prompts/types/index.ts +++ b/src/api/resources/prompts/types/index.ts @@ -1,7 +1,10 @@ export * from "./PromptLogRequestToolChoice"; +export * from "./PromptLogRequestPrompt"; export * from "./PromptLogUpdateRequestToolChoice"; export * from "./PromptsCallStreamRequestToolChoice"; +export * from "./PromptsCallStreamRequestPrompt"; export * from "./PromptsCallRequestToolChoice"; +export * from "./PromptsCallRequestPrompt"; export * from "./PromptRequestTemplate"; export * from "./PromptRequestStop"; export * from "./PromptRequestReasoningEffort"; diff --git a/src/api/resources/tools/client/Client.ts b/src/api/resources/tools/client/Client.ts index c5a81fb5..53f63ace 100644 --- a/src/api/resources/tools/client/Client.ts +++ b/src/api/resources/tools/client/Client.ts @@ -79,8 +79,8 @@ export class Tools { headers: { "X-Fern-Language": "JavaScript", "X-Fern-SDK-Name": "humanloop", - "X-Fern-SDK-Version": "0.8.21-beta1", - "User-Agent": "humanloop/0.8.21-beta1", + "X-Fern-SDK-Version": "0.8.21", + "User-Agent": "humanloop/0.8.21", "X-Fern-Runtime": core.RUNTIME.type, "X-Fern-Runtime-Version": core.RUNTIME.version, ...(await this._getCustomAuthorizationHeaders()), @@ -211,8 +211,8 @@ export class Tools { headers: { "X-Fern-Language": "JavaScript", "X-Fern-SDK-Name": "humanloop", - "X-Fern-SDK-Version": "0.8.21-beta1", - "User-Agent": "humanloop/0.8.21-beta1", + "X-Fern-SDK-Version": "0.8.21", + "User-Agent": "humanloop/0.8.21", "X-Fern-Runtime": core.RUNTIME.type, "X-Fern-Runtime-Version": core.RUNTIME.version, ...(await this._getCustomAuthorizationHeaders()), @@ -303,8 +303,8 @@ export class Tools { headers: { "X-Fern-Language": "JavaScript", "X-Fern-SDK-Name": "humanloop", - "X-Fern-SDK-Version": "0.8.21-beta1", - "User-Agent": "humanloop/0.8.21-beta1", + "X-Fern-SDK-Version": "0.8.21", + "User-Agent": "humanloop/0.8.21", "X-Fern-Runtime": core.RUNTIME.type, "X-Fern-Runtime-Version": core.RUNTIME.version, ...(await this._getCustomAuthorizationHeaders()), @@ -395,7 +395,7 @@ export class Tools { _queryParams["user_filter"] = userFilter; } if (sortBy != null) { - _queryParams["sort_by"] = serializers.ProjectSortBy.jsonOrThrow(sortBy, { + _queryParams["sort_by"] = serializers.FileSortBy.jsonOrThrow(sortBy, { unrecognizedObjectKeys: "strip", }); } @@ -413,8 +413,8 @@ export class Tools { headers: { "X-Fern-Language": "JavaScript", "X-Fern-SDK-Name": "humanloop", - "X-Fern-SDK-Version": "0.8.21-beta1", - "User-Agent": "humanloop/0.8.21-beta1", + "X-Fern-SDK-Version": "0.8.21", + "User-Agent": "humanloop/0.8.21", "X-Fern-Runtime": core.RUNTIME.type, "X-Fern-Runtime-Version": core.RUNTIME.version, ...(await this._getCustomAuthorizationHeaders()), @@ -536,8 +536,8 @@ export class Tools { headers: { "X-Fern-Language": "JavaScript", "X-Fern-SDK-Name": "humanloop", - "X-Fern-SDK-Version": "0.8.21-beta1", - "User-Agent": "humanloop/0.8.21-beta1", + "X-Fern-SDK-Version": "0.8.21", + "User-Agent": "humanloop/0.8.21", "X-Fern-Runtime": core.RUNTIME.type, "X-Fern-Runtime-Version": core.RUNTIME.version, ...(await this._getCustomAuthorizationHeaders()), @@ -636,8 +636,8 @@ export class Tools { headers: { "X-Fern-Language": "JavaScript", "X-Fern-SDK-Name": "humanloop", - "X-Fern-SDK-Version": "0.8.21-beta1", - "User-Agent": "humanloop/0.8.21-beta1", + "X-Fern-SDK-Version": "0.8.21", + "User-Agent": "humanloop/0.8.21", "X-Fern-Runtime": core.RUNTIME.type, "X-Fern-Runtime-Version": core.RUNTIME.version, ...(await this._getCustomAuthorizationHeaders()), @@ -718,8 +718,8 @@ export class Tools { headers: { "X-Fern-Language": "JavaScript", "X-Fern-SDK-Name": "humanloop", - "X-Fern-SDK-Version": "0.8.21-beta1", - "User-Agent": "humanloop/0.8.21-beta1", + "X-Fern-SDK-Version": "0.8.21", + "User-Agent": "humanloop/0.8.21", "X-Fern-Runtime": core.RUNTIME.type, "X-Fern-Runtime-Version": core.RUNTIME.version, ...(await this._getCustomAuthorizationHeaders()), @@ -800,8 +800,8 @@ export class Tools { headers: { "X-Fern-Language": "JavaScript", "X-Fern-SDK-Name": "humanloop", - "X-Fern-SDK-Version": "0.8.21-beta1", - "User-Agent": "humanloop/0.8.21-beta1", + "X-Fern-SDK-Version": "0.8.21", + "User-Agent": "humanloop/0.8.21", "X-Fern-Runtime": core.RUNTIME.type, "X-Fern-Runtime-Version": core.RUNTIME.version, ...(await this._getCustomAuthorizationHeaders()), @@ -893,8 +893,8 @@ export class Tools { headers: { "X-Fern-Language": "JavaScript", "X-Fern-SDK-Name": "humanloop", - "X-Fern-SDK-Version": "0.8.21-beta1", - "User-Agent": "humanloop/0.8.21-beta1", + "X-Fern-SDK-Version": "0.8.21", + "User-Agent": "humanloop/0.8.21", "X-Fern-Runtime": core.RUNTIME.type, "X-Fern-Runtime-Version": core.RUNTIME.version, ...(await this._getCustomAuthorizationHeaders()), @@ -980,8 +980,8 @@ export class Tools { headers: { "X-Fern-Language": "JavaScript", "X-Fern-SDK-Name": "humanloop", - "X-Fern-SDK-Version": "0.8.21-beta1", - "User-Agent": "humanloop/0.8.21-beta1", + "X-Fern-SDK-Version": "0.8.21", + "User-Agent": "humanloop/0.8.21", "X-Fern-Runtime": core.RUNTIME.type, "X-Fern-Runtime-Version": core.RUNTIME.version, ...(await this._getCustomAuthorizationHeaders()), @@ -1064,8 +1064,8 @@ export class Tools { headers: { "X-Fern-Language": "JavaScript", "X-Fern-SDK-Name": "humanloop", - "X-Fern-SDK-Version": "0.8.21-beta1", - "User-Agent": "humanloop/0.8.21-beta1", + "X-Fern-SDK-Version": "0.8.21", + "User-Agent": "humanloop/0.8.21", "X-Fern-Runtime": core.RUNTIME.type, "X-Fern-Runtime-Version": core.RUNTIME.version, ...(await this._getCustomAuthorizationHeaders()), @@ -1163,8 +1163,8 @@ export class Tools { headers: { "X-Fern-Language": "JavaScript", "X-Fern-SDK-Name": "humanloop", - "X-Fern-SDK-Version": "0.8.21-beta1", - "User-Agent": "humanloop/0.8.21-beta1", + "X-Fern-SDK-Version": "0.8.21", + "User-Agent": "humanloop/0.8.21", "X-Fern-Runtime": core.RUNTIME.type, "X-Fern-Runtime-Version": core.RUNTIME.version, ...(await this._getCustomAuthorizationHeaders()), @@ -1255,8 +1255,8 @@ export class Tools { headers: { "X-Fern-Language": "JavaScript", "X-Fern-SDK-Name": "humanloop", - "X-Fern-SDK-Version": "0.8.21-beta1", - "User-Agent": "humanloop/0.8.21-beta1", + "X-Fern-SDK-Version": "0.8.21", + "User-Agent": "humanloop/0.8.21", "X-Fern-Runtime": core.RUNTIME.type, "X-Fern-Runtime-Version": core.RUNTIME.version, ...(await this._getCustomAuthorizationHeaders()), @@ -1335,8 +1335,8 @@ export class Tools { headers: { "X-Fern-Language": "JavaScript", "X-Fern-SDK-Name": "humanloop", - "X-Fern-SDK-Version": "0.8.21-beta1", - "User-Agent": "humanloop/0.8.21-beta1", + "X-Fern-SDK-Version": "0.8.21", + "User-Agent": "humanloop/0.8.21", "X-Fern-Runtime": core.RUNTIME.type, "X-Fern-Runtime-Version": core.RUNTIME.version, ...(await this._getCustomAuthorizationHeaders()), @@ -1428,8 +1428,8 @@ export class Tools { headers: { "X-Fern-Language": "JavaScript", "X-Fern-SDK-Name": "humanloop", - "X-Fern-SDK-Version": "0.8.21-beta1", - "User-Agent": "humanloop/0.8.21-beta1", + "X-Fern-SDK-Version": "0.8.21", + "User-Agent": "humanloop/0.8.21", "X-Fern-Runtime": core.RUNTIME.type, "X-Fern-Runtime-Version": core.RUNTIME.version, ...(await this._getCustomAuthorizationHeaders()), @@ -1513,8 +1513,8 @@ export class Tools { headers: { "X-Fern-Language": "JavaScript", "X-Fern-SDK-Name": "humanloop", - "X-Fern-SDK-Version": "0.8.21-beta1", - "User-Agent": "humanloop/0.8.21-beta1", + "X-Fern-SDK-Version": "0.8.21", + "User-Agent": "humanloop/0.8.21", "X-Fern-Runtime": core.RUNTIME.type, "X-Fern-Runtime-Version": core.RUNTIME.version, ...(await this._getCustomAuthorizationHeaders()), @@ -1604,8 +1604,8 @@ export class Tools { headers: { "X-Fern-Language": "JavaScript", "X-Fern-SDK-Name": "humanloop", - "X-Fern-SDK-Version": "0.8.21-beta1", - "User-Agent": "humanloop/0.8.21-beta1", + "X-Fern-SDK-Version": "0.8.21", + "User-Agent": "humanloop/0.8.21", "X-Fern-Runtime": core.RUNTIME.type, "X-Fern-Runtime-Version": core.RUNTIME.version, ...(await this._getCustomAuthorizationHeaders()), @@ -1693,8 +1693,8 @@ export class Tools { headers: { "X-Fern-Language": "JavaScript", "X-Fern-SDK-Name": "humanloop", - "X-Fern-SDK-Version": "0.8.21-beta1", - "User-Agent": "humanloop/0.8.21-beta1", + "X-Fern-SDK-Version": "0.8.21", + "User-Agent": "humanloop/0.8.21", "X-Fern-Runtime": core.RUNTIME.type, "X-Fern-Runtime-Version": core.RUNTIME.version, ...(await this._getCustomAuthorizationHeaders()), diff --git a/src/api/resources/tools/client/requests/ListToolsGetRequest.ts b/src/api/resources/tools/client/requests/ListToolsGetRequest.ts index 2e5884d5..95c01c87 100644 --- a/src/api/resources/tools/client/requests/ListToolsGetRequest.ts +++ b/src/api/resources/tools/client/requests/ListToolsGetRequest.ts @@ -30,7 +30,7 @@ export interface ListToolsGetRequest { /** * Field to sort Tools by */ - sortBy?: Humanloop.ProjectSortBy; + sortBy?: Humanloop.FileSortBy; /** * Direction to sort by. */ diff --git a/src/api/types/AgentContinueCallResponse.ts b/src/api/types/AgentContinueResponse.ts similarity index 97% rename from src/api/types/AgentContinueCallResponse.ts rename to src/api/types/AgentContinueResponse.ts index 068de3c1..36144c0f 100644 --- a/src/api/types/AgentContinueCallResponse.ts +++ b/src/api/types/AgentContinueResponse.ts @@ -7,7 +7,7 @@ import * as Humanloop from "../index"; /** * Response model for continuing an Agent call. */ -export interface AgentContinueCallResponse { +export interface AgentContinueResponse { /** The message returned by the provider. */ outputMessage?: Humanloop.ChatMessage; /** Number of tokens in the prompt used to generate the output. */ @@ -31,7 +31,7 @@ export interface AgentContinueCallResponse { * - `'required'` means the model must call one or more of the provided tools. * - `{'type': 'function', 'function': {name': }}` forces the model to use the named function. */ - toolChoice?: Humanloop.AgentContinueCallResponseToolChoice; + toolChoice?: Humanloop.AgentContinueResponseToolChoice; /** Agent that generated the Log. */ agent: Humanloop.AgentResponse; /** When the logged event started. */ diff --git a/src/api/types/AgentContinueCallResponseToolChoice.ts b/src/api/types/AgentContinueResponseToolChoice.ts similarity index 86% rename from src/api/types/AgentContinueCallResponseToolChoice.ts rename to src/api/types/AgentContinueResponseToolChoice.ts index 1617acb7..a2ffcef6 100644 --- a/src/api/types/AgentContinueCallResponseToolChoice.ts +++ b/src/api/types/AgentContinueResponseToolChoice.ts @@ -11,4 +11,4 @@ import * as Humanloop from "../index"; * - `'required'` means the model must call one or more of the provided tools. * - `{'type': 'function', 'function': {name': }}` forces the model to use the named function. */ -export type AgentContinueCallResponseToolChoice = "none" | "auto" | "required" | Humanloop.ToolChoice; +export type AgentContinueResponseToolChoice = "none" | "auto" | "required" | Humanloop.ToolChoice; diff --git a/src/api/types/AgentContinueCallStreamResponse.ts b/src/api/types/AgentContinueStreamResponse.ts similarity index 71% rename from src/api/types/AgentContinueCallStreamResponse.ts rename to src/api/types/AgentContinueStreamResponse.ts index 9187b8e5..236f7e80 100644 --- a/src/api/types/AgentContinueCallStreamResponse.ts +++ b/src/api/types/AgentContinueStreamResponse.ts @@ -7,10 +7,10 @@ import * as Humanloop from "../index"; /** * Response model for continuing an Agent call in streaming mode. */ -export interface AgentContinueCallStreamResponse { +export interface AgentContinueStreamResponse { logId: string; message: string; - payload?: Humanloop.AgentContinueCallStreamResponsePayload; + payload?: Humanloop.AgentContinueStreamResponsePayload; type: Humanloop.EventType; createdAt: Date; } diff --git a/src/api/types/AgentContinueCallStreamResponsePayload.ts b/src/api/types/AgentContinueStreamResponsePayload.ts similarity index 79% rename from src/api/types/AgentContinueCallStreamResponsePayload.ts rename to src/api/types/AgentContinueStreamResponsePayload.ts index a92062b5..adbbbf0f 100644 --- a/src/api/types/AgentContinueCallStreamResponsePayload.ts +++ b/src/api/types/AgentContinueStreamResponsePayload.ts @@ -4,7 +4,7 @@ import * as Humanloop from "../index"; -export type AgentContinueCallStreamResponsePayload = +export type AgentContinueStreamResponsePayload = | Humanloop.LogStreamResponse | Humanloop.LogResponse | Humanloop.ToolCall; diff --git a/src/api/types/ProjectSortBy.ts b/src/api/types/FileSortBy.ts similarity index 66% rename from src/api/types/ProjectSortBy.ts rename to src/api/types/FileSortBy.ts index 9b3ed0cb..df2b6d4e 100644 --- a/src/api/types/ProjectSortBy.ts +++ b/src/api/types/FileSortBy.ts @@ -5,8 +5,8 @@ /** * An enumeration. */ -export type ProjectSortBy = "created_at" | "updated_at" | "name"; -export const ProjectSortBy = { +export type FileSortBy = "created_at" | "updated_at" | "name"; +export const FileSortBy = { CreatedAt: "created_at", UpdatedAt: "updated_at", Name: "name", diff --git a/src/api/types/index.ts b/src/api/types/index.ts index 50b0fe8b..e0d3cf35 100644 --- a/src/api/types/index.ts +++ b/src/api/types/index.ts @@ -2,10 +2,10 @@ export * from "./AgentCallResponseToolChoice"; export * from "./AgentCallResponse"; export * from "./AgentCallStreamResponsePayload"; export * from "./AgentCallStreamResponse"; -export * from "./AgentContinueCallResponseToolChoice"; -export * from "./AgentContinueCallResponse"; -export * from "./AgentContinueCallStreamResponsePayload"; -export * from "./AgentContinueCallStreamResponse"; +export * from "./AgentContinueResponseToolChoice"; +export * from "./AgentContinueResponse"; +export * from "./AgentContinueStreamResponsePayload"; +export * from "./AgentContinueStreamResponse"; export * from "./AgentInlineTool"; export * from "./AgentKernelRequestTemplate"; export * from "./AgentKernelRequestStop"; @@ -80,6 +80,7 @@ export * from "./FileEnvironmentVariableRequest"; export * from "./FileId"; export * from "./FilePath"; export * from "./FileRequest"; +export * from "./FileSortBy"; export * from "./FileType"; export * from "./FlowKernelRequest"; export * from "./FlowLogResponse"; @@ -134,7 +135,6 @@ export * from "./PopulateTemplateResponseStop"; export * from "./PopulateTemplateResponseReasoningEffort"; export * from "./PopulateTemplateResponsePopulatedTemplate"; export * from "./PopulateTemplateResponse"; -export * from "./ProjectSortBy"; export * from "./PromptCallLogResponse"; export * from "./PromptCallResponseToolChoice"; export * from "./PromptCallResponse"; diff --git a/src/serialization/resources/agents/client/requests/AgentLogRequest.ts b/src/serialization/resources/agents/client/requests/AgentLogRequest.ts index 84babd7f..2e251af8 100644 --- a/src/serialization/resources/agents/client/requests/AgentLogRequest.ts +++ b/src/serialization/resources/agents/client/requests/AgentLogRequest.ts @@ -7,7 +7,7 @@ import * as Humanloop from "../../../../../api/index"; import * as core from "../../../../../core"; import { ChatMessage } from "../../../../types/ChatMessage"; import { AgentLogRequestToolChoice } from "../../types/AgentLogRequestToolChoice"; -import { AgentKernelRequest } from "../../../../types/AgentKernelRequest"; +import { AgentLogRequestAgent } from "../../types/AgentLogRequestAgent"; import { LogStatus } from "../../../../types/LogStatus"; export const AgentLogRequest: core.serialization.Schema< @@ -26,7 +26,7 @@ export const AgentLogRequest: core.serialization.Schema< finishReason: core.serialization.property("finish_reason", core.serialization.string().optional()), messages: core.serialization.list(ChatMessage).optional(), toolChoice: core.serialization.property("tool_choice", AgentLogRequestToolChoice.optional()), - agent: AgentKernelRequest.optional(), + agent: AgentLogRequestAgent.optional(), startTime: core.serialization.property("start_time", core.serialization.date().optional()), endTime: core.serialization.property("end_time", core.serialization.date().optional()), output: core.serialization.string().optional(), @@ -68,7 +68,7 @@ export declare namespace AgentLogRequest { finish_reason?: string | null; messages?: ChatMessage.Raw[] | null; tool_choice?: AgentLogRequestToolChoice.Raw | null; - agent?: AgentKernelRequest.Raw | null; + agent?: AgentLogRequestAgent.Raw | null; start_time?: string | null; end_time?: string | null; output?: string | null; diff --git a/src/serialization/resources/agents/client/requests/AgentsCallRequest.ts b/src/serialization/resources/agents/client/requests/AgentsCallRequest.ts index a64a7932..e8a18d42 100644 --- a/src/serialization/resources/agents/client/requests/AgentsCallRequest.ts +++ b/src/serialization/resources/agents/client/requests/AgentsCallRequest.ts @@ -7,7 +7,7 @@ import * as Humanloop from "../../../../../api/index"; import * as core from "../../../../../core"; import { ChatMessage } from "../../../../types/ChatMessage"; import { AgentsCallRequestToolChoice } from "../../types/AgentsCallRequestToolChoice"; -import { AgentKernelRequest } from "../../../../types/AgentKernelRequest"; +import { AgentsCallRequestAgent } from "../../types/AgentsCallRequestAgent"; import { LogStatus } from "../../../../types/LogStatus"; import { ProviderApiKeys } from "../../../../types/ProviderApiKeys"; @@ -19,7 +19,7 @@ export const AgentsCallRequest: core.serialization.Schema< id: core.serialization.string().optional(), messages: core.serialization.list(ChatMessage).optional(), toolChoice: core.serialization.property("tool_choice", AgentsCallRequestToolChoice.optional()), - agent: AgentKernelRequest.optional(), + agent: AgentsCallRequestAgent.optional(), inputs: core.serialization.record(core.serialization.string(), core.serialization.unknown()).optional(), source: core.serialization.string().optional(), metadata: core.serialization.record(core.serialization.string(), core.serialization.unknown()).optional(), @@ -46,7 +46,7 @@ export declare namespace AgentsCallRequest { id?: string | null; messages?: ChatMessage.Raw[] | null; tool_choice?: AgentsCallRequestToolChoice.Raw | null; - agent?: AgentKernelRequest.Raw | null; + agent?: AgentsCallRequestAgent.Raw | null; inputs?: Record | null; source?: string | null; metadata?: Record | null; diff --git a/src/serialization/resources/agents/client/requests/AgentsCallStreamRequest.ts b/src/serialization/resources/agents/client/requests/AgentsCallStreamRequest.ts index b0557ace..7ca3e451 100644 --- a/src/serialization/resources/agents/client/requests/AgentsCallStreamRequest.ts +++ b/src/serialization/resources/agents/client/requests/AgentsCallStreamRequest.ts @@ -7,7 +7,7 @@ import * as Humanloop from "../../../../../api/index"; import * as core from "../../../../../core"; import { ChatMessage } from "../../../../types/ChatMessage"; import { AgentsCallStreamRequestToolChoice } from "../../types/AgentsCallStreamRequestToolChoice"; -import { AgentKernelRequest } from "../../../../types/AgentKernelRequest"; +import { AgentsCallStreamRequestAgent } from "../../types/AgentsCallStreamRequestAgent"; import { LogStatus } from "../../../../types/LogStatus"; import { ProviderApiKeys } from "../../../../types/ProviderApiKeys"; @@ -19,7 +19,7 @@ export const AgentsCallStreamRequest: core.serialization.Schema< id: core.serialization.string().optional(), messages: core.serialization.list(ChatMessage).optional(), toolChoice: core.serialization.property("tool_choice", AgentsCallStreamRequestToolChoice.optional()), - agent: AgentKernelRequest.optional(), + agent: AgentsCallStreamRequestAgent.optional(), inputs: core.serialization.record(core.serialization.string(), core.serialization.unknown()).optional(), source: core.serialization.string().optional(), metadata: core.serialization.record(core.serialization.string(), core.serialization.unknown()).optional(), @@ -49,7 +49,7 @@ export declare namespace AgentsCallStreamRequest { id?: string | null; messages?: ChatMessage.Raw[] | null; tool_choice?: AgentsCallStreamRequestToolChoice.Raw | null; - agent?: AgentKernelRequest.Raw | null; + agent?: AgentsCallStreamRequestAgent.Raw | null; inputs?: Record | null; source?: string | null; metadata?: Record | null; diff --git a/src/serialization/resources/agents/client/requests/AgentsContinueCallRequest.ts b/src/serialization/resources/agents/client/requests/AgentsContinueRequest.ts similarity index 82% rename from src/serialization/resources/agents/client/requests/AgentsContinueCallRequest.ts rename to src/serialization/resources/agents/client/requests/AgentsContinueRequest.ts index b5609c63..21c46878 100644 --- a/src/serialization/resources/agents/client/requests/AgentsContinueCallRequest.ts +++ b/src/serialization/resources/agents/client/requests/AgentsContinueRequest.ts @@ -8,9 +8,9 @@ import * as core from "../../../../../core"; import { ChatMessage } from "../../../../types/ChatMessage"; import { ProviderApiKeys } from "../../../../types/ProviderApiKeys"; -export const AgentsContinueCallRequest: core.serialization.Schema< - serializers.AgentsContinueCallRequest.Raw, - Humanloop.AgentsContinueCallRequest +export const AgentsContinueRequest: core.serialization.Schema< + serializers.AgentsContinueRequest.Raw, + Humanloop.AgentsContinueRequest > = core.serialization.object({ logId: core.serialization.property("log_id", core.serialization.string()), messages: core.serialization.list(ChatMessage), @@ -21,7 +21,7 @@ export const AgentsContinueCallRequest: core.serialization.Schema< ), }); -export declare namespace AgentsContinueCallRequest { +export declare namespace AgentsContinueRequest { export interface Raw { log_id: string; messages: ChatMessage.Raw[]; diff --git a/src/serialization/resources/agents/client/requests/AgentsContinueCallStreamRequest.ts b/src/serialization/resources/agents/client/requests/AgentsContinueStreamRequest.ts similarity index 80% rename from src/serialization/resources/agents/client/requests/AgentsContinueCallStreamRequest.ts rename to src/serialization/resources/agents/client/requests/AgentsContinueStreamRequest.ts index ff3c10d8..3d5a7d74 100644 --- a/src/serialization/resources/agents/client/requests/AgentsContinueCallStreamRequest.ts +++ b/src/serialization/resources/agents/client/requests/AgentsContinueStreamRequest.ts @@ -8,9 +8,9 @@ import * as core from "../../../../../core"; import { ChatMessage } from "../../../../types/ChatMessage"; import { ProviderApiKeys } from "../../../../types/ProviderApiKeys"; -export const AgentsContinueCallStreamRequest: core.serialization.Schema< - serializers.AgentsContinueCallStreamRequest.Raw, - Humanloop.AgentsContinueCallStreamRequest +export const AgentsContinueStreamRequest: core.serialization.Schema< + serializers.AgentsContinueStreamRequest.Raw, + Humanloop.AgentsContinueStreamRequest > = core.serialization.object({ logId: core.serialization.property("log_id", core.serialization.string()), messages: core.serialization.list(ChatMessage), @@ -21,7 +21,7 @@ export const AgentsContinueCallStreamRequest: core.serialization.Schema< ), }); -export declare namespace AgentsContinueCallStreamRequest { +export declare namespace AgentsContinueStreamRequest { export interface Raw { log_id: string; messages: ChatMessage.Raw[]; diff --git a/src/serialization/resources/agents/client/requests/index.ts b/src/serialization/resources/agents/client/requests/index.ts index 80a83ab3..107d545f 100644 --- a/src/serialization/resources/agents/client/requests/index.ts +++ b/src/serialization/resources/agents/client/requests/index.ts @@ -2,8 +2,8 @@ export { AgentLogRequest } from "./AgentLogRequest"; export { UpdateAgentLogRequest } from "./UpdateAgentLogRequest"; export { AgentsCallStreamRequest } from "./AgentsCallStreamRequest"; export { AgentsCallRequest } from "./AgentsCallRequest"; -export { AgentsContinueCallStreamRequest } from "./AgentsContinueCallStreamRequest"; -export { AgentsContinueCallRequest } from "./AgentsContinueCallRequest"; +export { AgentsContinueStreamRequest } from "./AgentsContinueStreamRequest"; +export { AgentsContinueRequest } from "./AgentsContinueRequest"; export { AgentRequest } from "./AgentRequest"; export { UpdateAgentRequest } from "./UpdateAgentRequest"; export { BodyDeserializeAgentsDeserializePost } from "./BodyDeserializeAgentsDeserializePost"; diff --git a/src/serialization/resources/agents/types/AgentLogRequestAgent.ts b/src/serialization/resources/agents/types/AgentLogRequestAgent.ts new file mode 100644 index 00000000..f77f6e2e --- /dev/null +++ b/src/serialization/resources/agents/types/AgentLogRequestAgent.ts @@ -0,0 +1,17 @@ +/** + * This file was auto-generated by Fern from our API Definition. + */ + +import * as serializers from "../../../index"; +import * as Humanloop from "../../../../api/index"; +import * as core from "../../../../core"; +import { AgentKernelRequest } from "../../../types/AgentKernelRequest"; + +export const AgentLogRequestAgent: core.serialization.Schema< + serializers.AgentLogRequestAgent.Raw, + Humanloop.AgentLogRequestAgent +> = core.serialization.undiscriminatedUnion([AgentKernelRequest, core.serialization.string()]); + +export declare namespace AgentLogRequestAgent { + export type Raw = AgentKernelRequest.Raw | string; +} diff --git a/src/serialization/resources/agents/types/AgentsCallRequestAgent.ts b/src/serialization/resources/agents/types/AgentsCallRequestAgent.ts new file mode 100644 index 00000000..aabc0c14 --- /dev/null +++ b/src/serialization/resources/agents/types/AgentsCallRequestAgent.ts @@ -0,0 +1,17 @@ +/** + * This file was auto-generated by Fern from our API Definition. + */ + +import * as serializers from "../../../index"; +import * as Humanloop from "../../../../api/index"; +import * as core from "../../../../core"; +import { AgentKernelRequest } from "../../../types/AgentKernelRequest"; + +export const AgentsCallRequestAgent: core.serialization.Schema< + serializers.AgentsCallRequestAgent.Raw, + Humanloop.AgentsCallRequestAgent +> = core.serialization.undiscriminatedUnion([AgentKernelRequest, core.serialization.string()]); + +export declare namespace AgentsCallRequestAgent { + export type Raw = AgentKernelRequest.Raw | string; +} diff --git a/src/serialization/resources/agents/types/AgentsCallStreamRequestAgent.ts b/src/serialization/resources/agents/types/AgentsCallStreamRequestAgent.ts new file mode 100644 index 00000000..61f637db --- /dev/null +++ b/src/serialization/resources/agents/types/AgentsCallStreamRequestAgent.ts @@ -0,0 +1,17 @@ +/** + * This file was auto-generated by Fern from our API Definition. + */ + +import * as serializers from "../../../index"; +import * as Humanloop from "../../../../api/index"; +import * as core from "../../../../core"; +import { AgentKernelRequest } from "../../../types/AgentKernelRequest"; + +export const AgentsCallStreamRequestAgent: core.serialization.Schema< + serializers.AgentsCallStreamRequestAgent.Raw, + Humanloop.AgentsCallStreamRequestAgent +> = core.serialization.undiscriminatedUnion([AgentKernelRequest, core.serialization.string()]); + +export declare namespace AgentsCallStreamRequestAgent { + export type Raw = AgentKernelRequest.Raw | string; +} diff --git a/src/serialization/resources/agents/types/index.ts b/src/serialization/resources/agents/types/index.ts index 8a8a004f..1a1043c1 100644 --- a/src/serialization/resources/agents/types/index.ts +++ b/src/serialization/resources/agents/types/index.ts @@ -1,6 +1,9 @@ export * from "./AgentLogRequestToolChoice"; +export * from "./AgentLogRequestAgent"; export * from "./AgentsCallStreamRequestToolChoice"; +export * from "./AgentsCallStreamRequestAgent"; export * from "./AgentsCallRequestToolChoice"; +export * from "./AgentsCallRequestAgent"; export * from "./AgentRequestTemplate"; export * from "./AgentRequestStop"; export * from "./AgentRequestReasoningEffort"; diff --git a/src/serialization/resources/files/client/requests/BodyRetrieveByPathFilesRetrieveByPathPost.ts b/src/serialization/resources/files/client/requests/BodyRetrieveByPathFilesRetrieveByPathPost.ts index fefe408b..1f712089 100644 --- a/src/serialization/resources/files/client/requests/BodyRetrieveByPathFilesRetrieveByPathPost.ts +++ b/src/serialization/resources/files/client/requests/BodyRetrieveByPathFilesRetrieveByPathPost.ts @@ -8,7 +8,7 @@ import * as core from "../../../../../core"; export const BodyRetrieveByPathFilesRetrieveByPathPost: core.serialization.Schema< serializers.BodyRetrieveByPathFilesRetrieveByPathPost.Raw, - Omit + Omit > = core.serialization.object({ path: core.serialization.string(), }); diff --git a/src/serialization/resources/prompts/client/requests/PromptLogRequest.ts b/src/serialization/resources/prompts/client/requests/PromptLogRequest.ts index 4638bf24..832aef92 100644 --- a/src/serialization/resources/prompts/client/requests/PromptLogRequest.ts +++ b/src/serialization/resources/prompts/client/requests/PromptLogRequest.ts @@ -7,7 +7,7 @@ import * as Humanloop from "../../../../../api/index"; import * as core from "../../../../../core"; import { ChatMessage } from "../../../../types/ChatMessage"; import { PromptLogRequestToolChoice } from "../../types/PromptLogRequestToolChoice"; -import { PromptKernelRequest } from "../../../../types/PromptKernelRequest"; +import { PromptLogRequestPrompt } from "../../types/PromptLogRequestPrompt"; import { LogStatus } from "../../../../types/LogStatus"; export const PromptLogRequest: core.serialization.Schema< @@ -26,7 +26,7 @@ export const PromptLogRequest: core.serialization.Schema< finishReason: core.serialization.property("finish_reason", core.serialization.string().optional()), messages: core.serialization.list(ChatMessage).optional(), toolChoice: core.serialization.property("tool_choice", PromptLogRequestToolChoice.optional()), - prompt: PromptKernelRequest.optional(), + prompt: PromptLogRequestPrompt.optional(), startTime: core.serialization.property("start_time", core.serialization.date().optional()), endTime: core.serialization.property("end_time", core.serialization.date().optional()), output: core.serialization.string().optional(), @@ -68,7 +68,7 @@ export declare namespace PromptLogRequest { finish_reason?: string | null; messages?: ChatMessage.Raw[] | null; tool_choice?: PromptLogRequestToolChoice.Raw | null; - prompt?: PromptKernelRequest.Raw | null; + prompt?: PromptLogRequestPrompt.Raw | null; start_time?: string | null; end_time?: string | null; output?: string | null; diff --git a/src/serialization/resources/prompts/client/requests/PromptsCallRequest.ts b/src/serialization/resources/prompts/client/requests/PromptsCallRequest.ts index 33e757a3..08802ed1 100644 --- a/src/serialization/resources/prompts/client/requests/PromptsCallRequest.ts +++ b/src/serialization/resources/prompts/client/requests/PromptsCallRequest.ts @@ -7,7 +7,7 @@ import * as Humanloop from "../../../../../api/index"; import * as core from "../../../../../core"; import { ChatMessage } from "../../../../types/ChatMessage"; import { PromptsCallRequestToolChoice } from "../../types/PromptsCallRequestToolChoice"; -import { PromptKernelRequest } from "../../../../types/PromptKernelRequest"; +import { PromptsCallRequestPrompt } from "../../types/PromptsCallRequestPrompt"; import { LogStatus } from "../../../../types/LogStatus"; import { ProviderApiKeys } from "../../../../types/ProviderApiKeys"; @@ -19,7 +19,7 @@ export const PromptsCallRequest: core.serialization.Schema< id: core.serialization.string().optional(), messages: core.serialization.list(ChatMessage).optional(), toolChoice: core.serialization.property("tool_choice", PromptsCallRequestToolChoice.optional()), - prompt: PromptKernelRequest.optional(), + prompt: PromptsCallRequestPrompt.optional(), inputs: core.serialization.record(core.serialization.string(), core.serialization.unknown()).optional(), source: core.serialization.string().optional(), metadata: core.serialization.record(core.serialization.string(), core.serialization.unknown()).optional(), @@ -45,7 +45,7 @@ export declare namespace PromptsCallRequest { id?: string | null; messages?: ChatMessage.Raw[] | null; tool_choice?: PromptsCallRequestToolChoice.Raw | null; - prompt?: PromptKernelRequest.Raw | null; + prompt?: PromptsCallRequestPrompt.Raw | null; inputs?: Record | null; source?: string | null; metadata?: Record | null; diff --git a/src/serialization/resources/prompts/client/requests/PromptsCallStreamRequest.ts b/src/serialization/resources/prompts/client/requests/PromptsCallStreamRequest.ts index 905d9169..9a8f9648 100644 --- a/src/serialization/resources/prompts/client/requests/PromptsCallStreamRequest.ts +++ b/src/serialization/resources/prompts/client/requests/PromptsCallStreamRequest.ts @@ -7,7 +7,7 @@ import * as Humanloop from "../../../../../api/index"; import * as core from "../../../../../core"; import { ChatMessage } from "../../../../types/ChatMessage"; import { PromptsCallStreamRequestToolChoice } from "../../types/PromptsCallStreamRequestToolChoice"; -import { PromptKernelRequest } from "../../../../types/PromptKernelRequest"; +import { PromptsCallStreamRequestPrompt } from "../../types/PromptsCallStreamRequestPrompt"; import { LogStatus } from "../../../../types/LogStatus"; import { ProviderApiKeys } from "../../../../types/ProviderApiKeys"; @@ -19,7 +19,7 @@ export const PromptsCallStreamRequest: core.serialization.Schema< id: core.serialization.string().optional(), messages: core.serialization.list(ChatMessage).optional(), toolChoice: core.serialization.property("tool_choice", PromptsCallStreamRequestToolChoice.optional()), - prompt: PromptKernelRequest.optional(), + prompt: PromptsCallStreamRequestPrompt.optional(), inputs: core.serialization.record(core.serialization.string(), core.serialization.unknown()).optional(), source: core.serialization.string().optional(), metadata: core.serialization.record(core.serialization.string(), core.serialization.unknown()).optional(), @@ -48,7 +48,7 @@ export declare namespace PromptsCallStreamRequest { id?: string | null; messages?: ChatMessage.Raw[] | null; tool_choice?: PromptsCallStreamRequestToolChoice.Raw | null; - prompt?: PromptKernelRequest.Raw | null; + prompt?: PromptsCallStreamRequestPrompt.Raw | null; inputs?: Record | null; source?: string | null; metadata?: Record | null; diff --git a/src/serialization/resources/prompts/types/PromptLogRequestPrompt.ts b/src/serialization/resources/prompts/types/PromptLogRequestPrompt.ts new file mode 100644 index 00000000..792f5b7d --- /dev/null +++ b/src/serialization/resources/prompts/types/PromptLogRequestPrompt.ts @@ -0,0 +1,17 @@ +/** + * This file was auto-generated by Fern from our API Definition. + */ + +import * as serializers from "../../../index"; +import * as Humanloop from "../../../../api/index"; +import * as core from "../../../../core"; +import { PromptKernelRequest } from "../../../types/PromptKernelRequest"; + +export const PromptLogRequestPrompt: core.serialization.Schema< + serializers.PromptLogRequestPrompt.Raw, + Humanloop.PromptLogRequestPrompt +> = core.serialization.undiscriminatedUnion([PromptKernelRequest, core.serialization.string()]); + +export declare namespace PromptLogRequestPrompt { + export type Raw = PromptKernelRequest.Raw | string; +} diff --git a/src/serialization/resources/prompts/types/PromptsCallRequestPrompt.ts b/src/serialization/resources/prompts/types/PromptsCallRequestPrompt.ts new file mode 100644 index 00000000..1053bfaf --- /dev/null +++ b/src/serialization/resources/prompts/types/PromptsCallRequestPrompt.ts @@ -0,0 +1,17 @@ +/** + * This file was auto-generated by Fern from our API Definition. + */ + +import * as serializers from "../../../index"; +import * as Humanloop from "../../../../api/index"; +import * as core from "../../../../core"; +import { PromptKernelRequest } from "../../../types/PromptKernelRequest"; + +export const PromptsCallRequestPrompt: core.serialization.Schema< + serializers.PromptsCallRequestPrompt.Raw, + Humanloop.PromptsCallRequestPrompt +> = core.serialization.undiscriminatedUnion([PromptKernelRequest, core.serialization.string()]); + +export declare namespace PromptsCallRequestPrompt { + export type Raw = PromptKernelRequest.Raw | string; +} diff --git a/src/serialization/resources/prompts/types/PromptsCallStreamRequestPrompt.ts b/src/serialization/resources/prompts/types/PromptsCallStreamRequestPrompt.ts new file mode 100644 index 00000000..3c58225f --- /dev/null +++ b/src/serialization/resources/prompts/types/PromptsCallStreamRequestPrompt.ts @@ -0,0 +1,17 @@ +/** + * This file was auto-generated by Fern from our API Definition. + */ + +import * as serializers from "../../../index"; +import * as Humanloop from "../../../../api/index"; +import * as core from "../../../../core"; +import { PromptKernelRequest } from "../../../types/PromptKernelRequest"; + +export const PromptsCallStreamRequestPrompt: core.serialization.Schema< + serializers.PromptsCallStreamRequestPrompt.Raw, + Humanloop.PromptsCallStreamRequestPrompt +> = core.serialization.undiscriminatedUnion([PromptKernelRequest, core.serialization.string()]); + +export declare namespace PromptsCallStreamRequestPrompt { + export type Raw = PromptKernelRequest.Raw | string; +} diff --git a/src/serialization/resources/prompts/types/index.ts b/src/serialization/resources/prompts/types/index.ts index 8265b2f3..f8045c03 100644 --- a/src/serialization/resources/prompts/types/index.ts +++ b/src/serialization/resources/prompts/types/index.ts @@ -1,7 +1,10 @@ export * from "./PromptLogRequestToolChoice"; +export * from "./PromptLogRequestPrompt"; export * from "./PromptLogUpdateRequestToolChoice"; export * from "./PromptsCallStreamRequestToolChoice"; +export * from "./PromptsCallStreamRequestPrompt"; export * from "./PromptsCallRequestToolChoice"; +export * from "./PromptsCallRequestPrompt"; export * from "./PromptRequestTemplate"; export * from "./PromptRequestStop"; export * from "./PromptRequestReasoningEffort"; diff --git a/src/serialization/types/AgentContinueCallResponse.ts b/src/serialization/types/AgentContinueResponse.ts similarity index 92% rename from src/serialization/types/AgentContinueCallResponse.ts rename to src/serialization/types/AgentContinueResponse.ts index 8ed5ff20..af01325c 100644 --- a/src/serialization/types/AgentContinueCallResponse.ts +++ b/src/serialization/types/AgentContinueResponse.ts @@ -6,12 +6,12 @@ import * as serializers from "../index"; import * as Humanloop from "../../api/index"; import * as core from "../../core"; import { ChatMessage } from "./ChatMessage"; -import { AgentContinueCallResponseToolChoice } from "./AgentContinueCallResponseToolChoice"; +import { AgentContinueResponseToolChoice } from "./AgentContinueResponseToolChoice"; import { LogStatus } from "./LogStatus"; -export const AgentContinueCallResponse: core.serialization.ObjectSchema< - serializers.AgentContinueCallResponse.Raw, - Humanloop.AgentContinueCallResponse +export const AgentContinueResponse: core.serialization.ObjectSchema< + serializers.AgentContinueResponse.Raw, + Humanloop.AgentContinueResponse > = core.serialization.object({ outputMessage: core.serialization.property("output_message", ChatMessage.optional()), promptTokens: core.serialization.property("prompt_tokens", core.serialization.number().optional()), @@ -21,7 +21,7 @@ export const AgentContinueCallResponse: core.serialization.ObjectSchema< outputCost: core.serialization.property("output_cost", core.serialization.number().optional()), finishReason: core.serialization.property("finish_reason", core.serialization.string().optional()), messages: core.serialization.list(ChatMessage).optional(), - toolChoice: core.serialization.property("tool_choice", AgentContinueCallResponseToolChoice.optional()), + toolChoice: core.serialization.property("tool_choice", AgentContinueResponseToolChoice.optional()), agent: core.serialization.lazyObject(() => serializers.AgentResponse), startTime: core.serialization.property("start_time", core.serialization.date().optional()), endTime: core.serialization.property("end_time", core.serialization.date().optional()), @@ -63,7 +63,7 @@ export const AgentContinueCallResponse: core.serialization.ObjectSchema< previousAgentMessage: core.serialization.property("previous_agent_message", ChatMessage.optional()), }); -export declare namespace AgentContinueCallResponse { +export declare namespace AgentContinueResponse { export interface Raw { output_message?: ChatMessage.Raw | null; prompt_tokens?: number | null; @@ -73,7 +73,7 @@ export declare namespace AgentContinueCallResponse { output_cost?: number | null; finish_reason?: string | null; messages?: ChatMessage.Raw[] | null; - tool_choice?: AgentContinueCallResponseToolChoice.Raw | null; + tool_choice?: AgentContinueResponseToolChoice.Raw | null; agent: serializers.AgentResponse.Raw; start_time?: string | null; end_time?: string | null; diff --git a/src/serialization/types/AgentContinueCallResponseToolChoice.ts b/src/serialization/types/AgentContinueResponseToolChoice.ts similarity index 67% rename from src/serialization/types/AgentContinueCallResponseToolChoice.ts rename to src/serialization/types/AgentContinueResponseToolChoice.ts index 834f6b27..79eece18 100644 --- a/src/serialization/types/AgentContinueCallResponseToolChoice.ts +++ b/src/serialization/types/AgentContinueResponseToolChoice.ts @@ -7,9 +7,9 @@ import * as Humanloop from "../../api/index"; import * as core from "../../core"; import { ToolChoice } from "./ToolChoice"; -export const AgentContinueCallResponseToolChoice: core.serialization.Schema< - serializers.AgentContinueCallResponseToolChoice.Raw, - Humanloop.AgentContinueCallResponseToolChoice +export const AgentContinueResponseToolChoice: core.serialization.Schema< + serializers.AgentContinueResponseToolChoice.Raw, + Humanloop.AgentContinueResponseToolChoice > = core.serialization.undiscriminatedUnion([ core.serialization.stringLiteral("none"), core.serialization.stringLiteral("auto"), @@ -17,6 +17,6 @@ export const AgentContinueCallResponseToolChoice: core.serialization.Schema< ToolChoice, ]); -export declare namespace AgentContinueCallResponseToolChoice { +export declare namespace AgentContinueResponseToolChoice { export type Raw = "none" | "auto" | "required" | ToolChoice.Raw; } diff --git a/src/serialization/types/AgentContinueCallStreamResponse.ts b/src/serialization/types/AgentContinueStreamResponse.ts similarity index 57% rename from src/serialization/types/AgentContinueCallStreamResponse.ts rename to src/serialization/types/AgentContinueStreamResponse.ts index 369dc502..b10fcb47 100644 --- a/src/serialization/types/AgentContinueCallStreamResponse.ts +++ b/src/serialization/types/AgentContinueStreamResponse.ts @@ -5,25 +5,25 @@ import * as serializers from "../index"; import * as Humanloop from "../../api/index"; import * as core from "../../core"; -import { AgentContinueCallStreamResponsePayload } from "./AgentContinueCallStreamResponsePayload"; +import { AgentContinueStreamResponsePayload } from "./AgentContinueStreamResponsePayload"; import { EventType } from "./EventType"; -export const AgentContinueCallStreamResponse: core.serialization.ObjectSchema< - serializers.AgentContinueCallStreamResponse.Raw, - Humanloop.AgentContinueCallStreamResponse +export const AgentContinueStreamResponse: core.serialization.ObjectSchema< + serializers.AgentContinueStreamResponse.Raw, + Humanloop.AgentContinueStreamResponse > = core.serialization.object({ logId: core.serialization.property("log_id", core.serialization.string()), message: core.serialization.string(), - payload: AgentContinueCallStreamResponsePayload.optional(), + payload: AgentContinueStreamResponsePayload.optional(), type: EventType, createdAt: core.serialization.property("created_at", core.serialization.date()), }); -export declare namespace AgentContinueCallStreamResponse { +export declare namespace AgentContinueStreamResponse { export interface Raw { log_id: string; message: string; - payload?: AgentContinueCallStreamResponsePayload.Raw | null; + payload?: AgentContinueStreamResponsePayload.Raw | null; type: EventType.Raw; created_at: string; } diff --git a/src/serialization/types/AgentContinueCallStreamResponsePayload.ts b/src/serialization/types/AgentContinueStreamResponsePayload.ts similarity index 67% rename from src/serialization/types/AgentContinueCallStreamResponsePayload.ts rename to src/serialization/types/AgentContinueStreamResponsePayload.ts index 1612723e..a43ff575 100644 --- a/src/serialization/types/AgentContinueCallStreamResponsePayload.ts +++ b/src/serialization/types/AgentContinueStreamResponsePayload.ts @@ -8,15 +8,15 @@ import * as core from "../../core"; import { LogStreamResponse } from "./LogStreamResponse"; import { ToolCall } from "./ToolCall"; -export const AgentContinueCallStreamResponsePayload: core.serialization.Schema< - serializers.AgentContinueCallStreamResponsePayload.Raw, - Humanloop.AgentContinueCallStreamResponsePayload +export const AgentContinueStreamResponsePayload: core.serialization.Schema< + serializers.AgentContinueStreamResponsePayload.Raw, + Humanloop.AgentContinueStreamResponsePayload > = core.serialization.undiscriminatedUnion([ LogStreamResponse, core.serialization.lazy(() => serializers.LogResponse), ToolCall, ]); -export declare namespace AgentContinueCallStreamResponsePayload { +export declare namespace AgentContinueStreamResponsePayload { export type Raw = LogStreamResponse.Raw | serializers.LogResponse.Raw | ToolCall.Raw; } diff --git a/src/serialization/types/ProjectSortBy.ts b/src/serialization/types/FileSortBy.ts similarity index 68% rename from src/serialization/types/ProjectSortBy.ts rename to src/serialization/types/FileSortBy.ts index a991f293..ab4986e8 100644 --- a/src/serialization/types/ProjectSortBy.ts +++ b/src/serialization/types/FileSortBy.ts @@ -6,9 +6,9 @@ import * as serializers from "../index"; import * as Humanloop from "../../api/index"; import * as core from "../../core"; -export const ProjectSortBy: core.serialization.Schema = +export const FileSortBy: core.serialization.Schema = core.serialization.enum_(["created_at", "updated_at", "name"]); -export declare namespace ProjectSortBy { +export declare namespace FileSortBy { export type Raw = "created_at" | "updated_at" | "name"; } diff --git a/src/serialization/types/index.ts b/src/serialization/types/index.ts index 50b0fe8b..e0d3cf35 100644 --- a/src/serialization/types/index.ts +++ b/src/serialization/types/index.ts @@ -2,10 +2,10 @@ export * from "./AgentCallResponseToolChoice"; export * from "./AgentCallResponse"; export * from "./AgentCallStreamResponsePayload"; export * from "./AgentCallStreamResponse"; -export * from "./AgentContinueCallResponseToolChoice"; -export * from "./AgentContinueCallResponse"; -export * from "./AgentContinueCallStreamResponsePayload"; -export * from "./AgentContinueCallStreamResponse"; +export * from "./AgentContinueResponseToolChoice"; +export * from "./AgentContinueResponse"; +export * from "./AgentContinueStreamResponsePayload"; +export * from "./AgentContinueStreamResponse"; export * from "./AgentInlineTool"; export * from "./AgentKernelRequestTemplate"; export * from "./AgentKernelRequestStop"; @@ -80,6 +80,7 @@ export * from "./FileEnvironmentVariableRequest"; export * from "./FileId"; export * from "./FilePath"; export * from "./FileRequest"; +export * from "./FileSortBy"; export * from "./FileType"; export * from "./FlowKernelRequest"; export * from "./FlowLogResponse"; @@ -134,7 +135,6 @@ export * from "./PopulateTemplateResponseStop"; export * from "./PopulateTemplateResponseReasoningEffort"; export * from "./PopulateTemplateResponsePopulatedTemplate"; export * from "./PopulateTemplateResponse"; -export * from "./ProjectSortBy"; export * from "./PromptCallLogResponse"; export * from "./PromptCallResponseToolChoice"; export * from "./PromptCallResponse"; diff --git a/src/version.ts b/src/version.ts index e0c1405e..dda381be 100644 --- a/src/version.ts +++ b/src/version.ts @@ -1 +1 @@ -export const SDK_VERSION = "0.8.21-beta1"; +export const SDK_VERSION = "0.8.21"; diff --git a/tests/integration/decorators.test.ts b/tests/integration/decorators.test.ts deleted file mode 100644 index 0cddc948..00000000 --- a/tests/integration/decorators.test.ts +++ /dev/null @@ -1,502 +0,0 @@ -import OpenAI from "openai"; - -import { PromptRequest } from "../../src/api"; -import { HumanloopRuntimeError } from "../../src/error"; -import { - CleanupResources, - TestPrompt, - TestSetup, - cleanupTestEnvironment, - setupTestEnvironment, -} from "./fixtures"; - -// Long timeout per test -jest.setTimeout(30 * 1000); - -// process.stdout.moveCursor is undefined in jest; mocking it since STDOUT is not relevant -if (typeof process.stdout.moveCursor !== "function") { - process.stdout.moveCursor = ( - dx: number, - dy: number, - callback?: () => void, - ): boolean => { - if (callback) callback(); - return true; - }; -} - -/** - * Creates a test prompt in the specified test environment - */ -async function createTestPrompt( - setup: TestSetup, - name: string = "test_prompt", - customConfig?: Partial, -): Promise { - const promptPath = `${setup.sdkTestDir.path}/${name}`; - const config = customConfig - ? { ...setup.testPromptConfig, ...customConfig } - : setup.testPromptConfig; - - const promptResponse = await setup.humanloopClient.prompts.upsert({ - path: promptPath, - ...config, - }); - - return { - id: promptResponse.id, - path: promptPath, - response: promptResponse, - }; -} - -/** - * Creates a base function for LLM calls that can be decorated - */ -function createBaseLLMFunction(setup: TestSetup, model: string = "gpt-4o-mini") { - return async (question: string): Promise => { - const openaiClient = new OpenAI({ apiKey: setup.openaiApiKey }); - - const response = await openaiClient.chat.completions.create({ - model: model, - messages: [{ role: "user", content: question }], - }); - - return response.choices[0].message.content || ""; - }; -} - -/** - * Applies the prompt decorator to a function and tests it - */ -async function testPromptDecorator( - setup: TestSetup, - prompt: TestPrompt, - input: string = "What is the capital of the France?", - expectedSubstring: string = "paris", -): Promise { - // Create the base function - const myPromptBase = createBaseLLMFunction(setup); - - // Apply the higher-order function instead of decorator - const myPrompt = setup.humanloopClient.prompt({ - path: prompt.path, - callable: myPromptBase, - }); - - // Call the decorated function - const result = await myPrompt(input); - if (result) { - expect(result.toLowerCase()).toContain(expectedSubstring.toLowerCase()); - } else { - throw new Error("Expected result to be defined"); - } - - // Wait for 5 seconds for the log to be created - await new Promise((resolve) => setTimeout(resolve, 5000)); -} - -describe("decorators", () => { - it("should create a prompt log when using the decorator", async () => { - let testSetup: TestSetup | undefined = undefined; - let testPrompt: TestPrompt | undefined = undefined; - - try { - testSetup = await setupTestEnvironment("test_prompt_call_decorator"); - // Create test prompt - testPrompt = await createTestPrompt(testSetup); - - // Check initial version count - const promptVersionsResponse = - await testSetup.humanloopClient.prompts.listVersions(testPrompt.id); - expect(promptVersionsResponse.records.length).toBe(1); - - // Test the prompt decorator - await testPromptDecorator(testSetup, testPrompt); - - // Verify a new version was created - const updatedPromptVersionsResponse = - await testSetup.humanloopClient.prompts.listVersions(testPrompt.id); - expect(updatedPromptVersionsResponse.records.length).toBe(2); - - // Verify logs were created - const logsResponse = await testSetup.humanloopClient.logs.list({ - fileId: testPrompt.id, - page: 1, - size: 50, - }); - expect(logsResponse.data.length).toBe(1); - } catch (error) { - // Make sure to clean up if the test fails - const cleanupResources: CleanupResources[] = []; - if (testPrompt) { - cleanupResources.push({ - type: "prompt", - id: testPrompt.id, - }); - } - if (testSetup) { - await cleanupTestEnvironment(testSetup, cleanupResources); - } - throw error; - } - }); - - it("should create logs with proper tracing when using prompt in flow decorator", async () => { - let testSetup: TestSetup | undefined = undefined; - let flowId: string | null = null; - let promptId: string | null = null; - - try { - // Create test flow and prompt paths - testSetup = await setupTestEnvironment("test_flow_decorator"); - const flowPath = `${testSetup.sdkTestDir.path}/test_flow`; - const promptPath = `${testSetup.sdkTestDir.path}/test_prompt`; - - // Create the prompt - const promptResponse = await testSetup.humanloopClient.prompts.upsert({ - path: promptPath, - provider: "openai", - model: "gpt-4o-mini", - temperature: 0, - }); - const promptId = promptResponse.id; - - // Define the flow callable function with the correct type signature - const flowCallable = async (question: { - question: string; - }): Promise => { - const response = await testSetup!.humanloopClient.prompts.call({ - path: promptPath, - messages: [{ role: "user", content: question.question }], - providerApiKeys: { openai: testSetup!.openaiApiKey }, - }); - - const output = response.logs?.[0]?.output; - expect(output).not.toBeNull(); - return output || ""; - }; - - // Apply the flow decorator - const myFlow = testSetup.humanloopClient.flow({ - path: flowPath, - callable: flowCallable, - }); - - // Call the flow with the expected input format - const result = await myFlow({ - question: "What is the capital of the France?", - }); - expect(result?.toLowerCase()).toContain("paris"); - - // Wait for logs to be created - await new Promise((resolve) => setTimeout(resolve, 5000)); - - // Verify prompt logs - const promptRetrieveResponse = - await testSetup.humanloopClient.files.retrieveByPath({ - path: promptPath, - }); - expect(promptRetrieveResponse).not.toBeNull(); - const promptLogsResponse = await testSetup.humanloopClient.logs.list({ - fileId: promptRetrieveResponse.id, - page: 1, - size: 50, - }); - expect(promptLogsResponse.data.length).toBe(1); - const promptLog = promptLogsResponse.data[0]; - - // Verify flow logs - const flowRetrieveResponse = - await testSetup.humanloopClient.files.retrieveByPath({ - path: flowPath, - }); - expect(flowRetrieveResponse).not.toBeNull(); - flowId = flowRetrieveResponse.id; - const flowLogsResponse = await testSetup.humanloopClient.logs.list({ - fileId: flowRetrieveResponse.id, - page: 1, - size: 50, - }); - expect(flowLogsResponse.data.length).toBe(1); - const flowLog = flowLogsResponse.data[0]; - - // Verify tracing between logs - expect(promptLog.traceParentId).toBe(flowLog.id); - } finally { - // Clean up resources - const cleanupResources: CleanupResources[] = []; - if (flowId) { - cleanupResources.push({ - type: "flow", - id: flowId, - }); - } - if (promptId) { - cleanupResources.push({ - type: "prompt", - id: promptId, - }); - } - if (testSetup) { - await cleanupTestEnvironment(testSetup, cleanupResources); - } - } - }); - - it("should log exceptions when using the flow decorator", async () => { - let testSetup: TestSetup | undefined = undefined; - let flowId: string | null = null; - - try { - // Create test flow path - testSetup = await setupTestEnvironment("test_flow_decorator"); - const flowPath = `${testSetup.sdkTestDir.path}/test_flow_log_error`; - - // Define a flow callable that throws an error - const flowCallable = async ({ - question, - }: { - question: string; - }): Promise => { - throw new Error("This is a test exception"); - }; - - // Apply the flow decorator - const myFlow = testSetup.humanloopClient.flow({ - path: flowPath, - callable: flowCallable, - }); - - // Call the flow and expect it to throw - try { - await myFlow({ question: "test" }); - // If we get here, the test should fail - throw new Error("Expected flow to throw an error but it didn't"); - } catch (error) { - // Expected error - expect(error).toBeDefined(); - } - - // Wait for logs to be created - await new Promise((resolve) => setTimeout(resolve, 5000)); - - // Verify flow logs - const flowRetrieveResponse = - await testSetup.humanloopClient.files.retrieveByPath({ - path: flowPath, - }); - expect(flowRetrieveResponse).not.toBeNull(); - flowId = flowRetrieveResponse.id; - - const flowLogsResponse = await testSetup.humanloopClient.logs.list({ - fileId: flowRetrieveResponse.id, - page: 1, - size: 50, - }); - expect(flowLogsResponse.data.length).toBe(1); - - const flowLog = flowLogsResponse.data[0]; - expect(flowLog.error).not.toBeUndefined(); - expect(flowLog.output).toBeUndefined(); - } finally { - if (testSetup) { - await cleanupTestEnvironment( - testSetup, - flowId - ? [ - { - type: "flow", - id: flowId, - }, - ] - : [], - ); - } - } - }); - - it("should populate outputMessage when flow returns chat message format", async () => { - let testSetup: TestSetup | undefined = undefined; - let flowId: string | null = null; - - try { - // Create test flow path - testSetup = await setupTestEnvironment("test_flow_decorator"); - const flowPath = `${testSetup.sdkTestDir.path}/test_flow_log_output_message`; - - // Define a flow callable that returns a chat message format - const flowCallable = async ({ question }: { question: string }) => { - return { - role: "user", - content: question, - }; - }; - - // Apply the flow decorator - const myFlow = testSetup.humanloopClient.flow({ - path: flowPath, - callable: flowCallable, - }); - - // Call the flow and check the returned message - const result = await myFlow({ - question: "What is the capital of the France?", - }); - expect(result?.content.toLowerCase()).toContain("france"); - - // Wait for logs to be created - await new Promise((resolve) => setTimeout(resolve, 5000)); - - // Verify flow logs - const flowRetrieveResponse = - await testSetup.humanloopClient.files.retrieveByPath({ - path: flowPath, - }); - expect(flowRetrieveResponse).not.toBeNull(); - flowId = flowRetrieveResponse.id; - - const flowLogsResponse = await testSetup.humanloopClient.logs.list({ - fileId: flowRetrieveResponse.id, - page: 1, - size: 50, - }); - expect(flowLogsResponse.data.length).toBe(1); - - const flowLog = flowLogsResponse.data[0]; - expect(flowLog.outputMessage).not.toBeUndefined(); - expect(flowLog.output).toBeUndefined(); - expect(flowLog.error).toBeUndefined(); - } finally { - // Clean up resources - if (flowId) { - await testSetup!.humanloopClient.flows.delete(flowId); - } - if (testSetup) { - await cleanupTestEnvironment( - testSetup, - flowId - ? [ - { - type: "flow", - id: flowId, - }, - ] - : [], - ); - } - } - }); - - it("should run evaluations on a flow decorator", async () => { - let testSetup: TestSetup | undefined = undefined; - let flowId: string | null = null; - - try { - // Use fixtures from testSetup - testSetup = await setupTestEnvironment("eval-flow-decorator"); - if (!testSetup.evalDataset || !testSetup.outputNotNullEvaluator) { - throw new Error("Required fixtures are not initialized"); - } - - // Create test flow path - const flowPath = `${testSetup.sdkTestDir.path}/test_flow_evaluate`; - - // Define flow decorated function - const myFlow = testSetup.humanloopClient.flow({ - path: flowPath, - callable: async (inputs: { question: string }) => { - return "paris"; - }, - }); - - // Run evaluation on the flow - await testSetup.humanloopClient.evaluations.run({ - name: "Evaluate Flow Decorator", - file: { - path: flowPath, - callable: myFlow, - type: "flow", - }, - dataset: { - path: testSetup.evalDataset.path, - }, - evaluators: [ - { - path: testSetup.outputNotNullEvaluator.path, - }, - ], - }); - - // Get the flow ID for cleanup - const flowResponse = await testSetup.humanloopClient.files.retrieveByPath({ - path: flowPath, - }); - flowId = flowResponse.id; - } finally { - if (testSetup) { - await cleanupTestEnvironment( - testSetup, - flowId - ? [ - { - type: "flow", - id: flowId, - }, - ] - : [], - ); - } - } - }); - - it("should throw error when using non-existent file ID instead of path", async () => { - // Use fixtures from testSetup - let testSetup: TestSetup | undefined = undefined; - try { - testSetup = await setupTestEnvironment("eval-flow-decorator"); - if (!testSetup.evalDataset || !testSetup.outputNotNullEvaluator) { - throw new Error("Required fixtures are not initialized"); - } - // Define a simple callable - const simpleCallable = (x: any) => x; - - // Expect the evaluation to throw an error with a non-existent file ID - try { - await testSetup.humanloopClient.evaluations.run({ - name: "Evaluate Flow Decorator", - file: { - id: "non-existent-file-id", - type: "flow", - version: { - attributes: { - foo: "bar", - }, - }, - callable: simpleCallable, - }, - dataset: { - path: testSetup.evalDataset.path, - }, - evaluators: [ - { - path: testSetup.outputNotNullEvaluator.path, - }, - ], - }); - - // If we get here, the test should fail - throw new Error("Expected HumanloopRuntimeError but none was thrown"); - } catch (error) { - expect(error).toBeInstanceOf(HumanloopRuntimeError); - expect((error as HumanloopRuntimeError).message).toContain( - "File does not exist on Humanloop. Please provide a `file.path` and a version to create a new version.", - ); - } - } finally { - if (testSetup) { - await cleanupTestEnvironment(testSetup); - } - } - }); -}); diff --git a/tests/integration/evals.test.ts b/tests/integration/evals.test.ts deleted file mode 100644 index 17d8a399..00000000 --- a/tests/integration/evals.test.ts +++ /dev/null @@ -1,577 +0,0 @@ -import { FlowResponse } from "../../src/api"; -import { HumanloopRuntimeError } from "../../src/error"; -import { HumanloopClient } from "../../src/humanloop.client"; -import { - cleanupTestEnvironment, - readEnvironment, - setupTestEnvironment, -} from "./fixtures"; - -// process.stdout.moveCursor is undefined in jest; mocking it since STDOUT is not relevant -if (typeof process.stdout.moveCursor !== "function") { - process.stdout.moveCursor = ( - dx: number, - dy: number, - callback?: () => void, - ): boolean => { - if (callback) callback(); - return true; - }; -} - -// Long timeout per test; evals might take a while to run -jest.setTimeout(30 * 1000); - -interface TestIdentifiers { - id: string; - path: string; -} - -interface TestSetup { - sdkTestDir: TestIdentifiers; - outputNotNullEvaluator: TestIdentifiers; - evalDataset: TestIdentifiers; - evalPrompt: TestIdentifiers; - stagingEnvironmentId: string; -} - -describe("Evals", () => { - let humanloopClient: HumanloopClient; - let openaiApiKey: string; - - beforeAll(async () => { - readEnvironment(); - if (!process.env.HUMANLOOP_API_KEY) { - throw new Error("HUMANLOOP_API_KEY is not set"); - } - if (!process.env.OPENAI_API_KEY) { - throw new Error("OPENAI_API_KEY is not set for integration tests"); - } - openaiApiKey = process.env.OPENAI_API_KEY; - humanloopClient = new HumanloopClient({ - apiKey: process.env.HUMANLOOP_API_KEY, - }); - }); - - it("should be able to import HumanloopClient", async () => { - const client = new HumanloopClient({ apiKey: process.env.HUMANLOOP_API_KEY }); - expect(client).toBeDefined(); - }); - - it("should run evaluation on online files", async () => { - // Setup test-specific environment - const setup = await setupTestEnvironment("online_files"); - - try { - await humanloopClient.evaluations.run({ - file: { - path: setup.evalPrompt.path, - type: "prompt", - }, - dataset: { - path: setup.evalDataset.path, - }, - name: "test_eval_run", - evaluators: [ - { - path: setup.outputNotNullEvaluator.path, - }, - ], - }); - - // Wait for evaluation to complete - await new Promise((resolve) => setTimeout(resolve, 5000)); - - const evalResponse = await humanloopClient.evaluations.list({ - fileId: setup.evalPrompt.id, - }); - expect(evalResponse.data.length).toBe(1); - - const evaluationId = evalResponse.data[0].id; - const runsResponse = - await humanloopClient.evaluations.listRunsForEvaluation(evaluationId); - expect(runsResponse.runs[0].status).toBe("completed"); - } finally { - // Clean up test-specific resources - await cleanupTestEnvironment(setup); - } - }); - - it("should run evaluation with version_id", async () => { - // Setup test-specific environment - const setup = await setupTestEnvironment("version_id"); - - try { - // Create a new prompt version - const newPromptVersionResponse = await humanloopClient.prompts.upsert({ - path: setup.evalPrompt.path, - provider: "openai", - model: "gpt-4o-mini", - temperature: 0, - template: [ - { - role: "system", - content: - "You are a helpful assistant. You must answer the user's question truthfully and at the level of a 5th grader.", - }, - { - role: "user", - content: "{{question}}", - }, - ], - }); - - // Run evaluation with version_id - await humanloopClient.evaluations.run({ - file: { - id: newPromptVersionResponse.id, - versionId: newPromptVersionResponse.versionId, - type: "prompt", - }, - dataset: { - path: setup.evalDataset.path, - }, - name: "test_eval_run", - evaluators: [ - { - path: setup.outputNotNullEvaluator.path, - }, - ], - }); - - // Verify evaluation - const evaluationsResponse = await humanloopClient.evaluations.list({ - fileId: newPromptVersionResponse.id, - }); - expect(evaluationsResponse.data.length).toBe(1); - - const evaluationId = evaluationsResponse.data[0].id; - const runsResponse = - await humanloopClient.evaluations.listRunsForEvaluation(evaluationId); - expect(runsResponse.runs[0].status).toBe("completed"); - if (runsResponse.runs[0].version) { - expect(runsResponse.runs[0].version.versionId).toBe( - newPromptVersionResponse.versionId, - ); - } - - // Verify version is not the default - const response = await humanloopClient.prompts.get( - newPromptVersionResponse.id, - ); - expect(response.versionId).not.toBe(newPromptVersionResponse.versionId); - } finally { - // Clean up test-specific resources - await cleanupTestEnvironment(setup); - } - }); - - it("should run evaluation with environment", async () => { - // Setup test-specific environment - const setup = await setupTestEnvironment("environment"); - - try { - // Create a new prompt version and deploy to staging - const newPromptVersionResponse = await humanloopClient.prompts.upsert({ - path: setup.evalPrompt.path, - provider: "openai", - model: "gpt-4o-mini", - temperature: 0, - template: [ - { - role: "system", - content: - "You are a helpful assistant. You must answer the user's question truthfully and at the level of a 5th grader.", - }, - { - role: "user", - content: "{{question}}", - }, - ], - }); - - await humanloopClient.prompts.setDeployment( - newPromptVersionResponse.id, - setup.stagingEnvironmentId, - { - versionId: newPromptVersionResponse.versionId, - }, - ); - - // Run evaluation with environment - await humanloopClient.evaluations.run({ - file: { - id: newPromptVersionResponse.id, - type: "prompt", - environment: "staging", - }, - dataset: { - path: setup.evalDataset.path, - }, - name: "test_eval_run", - evaluators: [ - { - path: setup.outputNotNullEvaluator.path, - }, - ], - }); - - // Verify evaluation - const evaluationsResponse = await humanloopClient.evaluations.list({ - fileId: newPromptVersionResponse.id, - }); - expect(evaluationsResponse.data.length).toBe(1); - - const evaluationId = evaluationsResponse.data[0].id; - const runsResponse = - await humanloopClient.evaluations.listRunsForEvaluation(evaluationId); - expect(runsResponse.runs[0].status).toBe("completed"); - if (runsResponse.runs[0].version) { - expect(runsResponse.runs[0].version.versionId).toBe( - newPromptVersionResponse.versionId, - ); - } - - const defaultPromptVersionResponse = await humanloopClient.prompts.get( - newPromptVersionResponse.id, - ); - expect(defaultPromptVersionResponse.versionId).not.toBe( - newPromptVersionResponse.versionId, - ); - } finally { - // Clean up test-specific resources - await cleanupTestEnvironment(setup); - } - }); - - it("should fail when using version_id with path", async () => { - // Setup test-specific environment - const setup = await setupTestEnvironment("fail_with_version_id"); - - try { - try { - await humanloopClient.evaluations.run({ - file: { - path: setup.evalPrompt.path, - type: "prompt", - versionId: "will_not_work", - }, - dataset: { - path: setup.evalDataset.path, - }, - name: "test_eval_run", - evaluators: [ - { - path: setup.outputNotNullEvaluator.path, - }, - ], - }); - // If we got here, the test failed - throw new Error("Expected runtime error but none was thrown"); - } catch (error: any) { - if (error instanceof HumanloopRuntimeError) { - expect(error.message).toContain( - "You must provide the `file.id` when addressing a file by version ID or environment", - ); - } else { - throw new Error( - `Expected test to fail for version_id but got ${error}`, - ); - } - } - } finally { - // Clean up test-specific resources - await cleanupTestEnvironment(setup); - } - }); - - it("should fail when using environment with path", async () => { - // Setup test-specific environment - const setup = await setupTestEnvironment("fail_with_environment"); - - try { - await humanloopClient.evaluations.run({ - file: { - path: setup.evalPrompt.path, - type: "prompt", - environment: "staging", - }, - dataset: { - path: setup.evalDataset.path, - }, - name: "test_eval_run", - evaluators: [ - { - path: setup.outputNotNullEvaluator.path, - }, - ], - }); - // If we got here, the test failed - throw new Error("Expected runtime error but none was thrown"); - } catch (error: any) { - if (error instanceof HumanloopRuntimeError) { - expect(error.message).toContain( - "You must provide the `file.id` when addressing a file by version ID or environment", - ); - } else { - throw new Error( - `Expected test to fail for environment but got ${error}`, - ); - } - } finally { - // Clean up test-specific resources - await cleanupTestEnvironment(setup); - } - }); - - it("should run evaluation with version upsert", async () => { - // Setup test-specific environment - const setup = await setupTestEnvironment("version_upsert"); - - try { - await humanloopClient.evaluations.run({ - file: { - path: setup.evalPrompt.path, - type: "prompt", - version: { - provider: "openai", - model: "gpt-4o-mini", - temperature: 1, - template: [ - { - role: "system", - content: - "You are a helpful assistant. You must answer the user's question truthfully and at the level of a 5th grader.", - }, - { - role: "user", - content: "{{question}}", - }, - ], - }, - }, - dataset: { - path: setup.evalDataset.path, - }, - name: "test_eval_run", - evaluators: [ - { - path: setup.outputNotNullEvaluator.path, - }, - ], - }); - - // Verify evaluation - const evaluationsResponse = await humanloopClient.evaluations.list({ - fileId: setup.evalPrompt.id, - }); - expect(evaluationsResponse.data.length).toBe(1); - - const evaluationId = evaluationsResponse.data[0].id; - const runsResponse = - await humanloopClient.evaluations.listRunsForEvaluation(evaluationId); - expect(runsResponse.runs[0].status).toBe("completed"); - - // Verify version upsert - const listPromptVersionsResponse = - await humanloopClient.prompts.listVersions(setup.evalPrompt.id); - expect(listPromptVersionsResponse.records.length).toBe(2); - } finally { - // Clean up test-specific resources - await cleanupTestEnvironment(setup); - } - }); - - it("should fail flow eval without callable", async () => { - // Setup test-specific environment - const setup = await setupTestEnvironment("flow_fail_without_callable"); - - try { - try { - await humanloopClient.evaluations.run({ - file: { - path: "Test Flow", - type: "flow", - version: { - attributes: { - foo: "bar", - }, - }, - }, - dataset: { - path: setup.evalDataset.path, - }, - name: "test_eval_run", - evaluators: [ - { - path: setup.outputNotNullEvaluator.path, - }, - ], - }); - // If we got here, the test failed - fail("Expected runtime error but none was thrown"); - } catch (error: any) { - expect(error.message).toContain( - "You must provide a `callable` for your Flow `file` to run a local eval.", - ); - } - } finally { - // Clean up test-specific resources - await cleanupTestEnvironment(setup); - } - }); - - it("should run flow eval with callable", async () => { - // Setup test-specific environment - const setup = await setupTestEnvironment("flow_with_callable"); - - try { - const flowPath = `${setup.sdkTestDir.path}/Test Flow`; - - // Create flow - const flowResponse = await humanloopClient.flows.upsert({ - path: flowPath, - attributes: { - foo: "bar", - }, - }); - - try { - const flow = await humanloopClient.flows.upsert({ - path: flowPath, - attributes: { - foo: "bar", - }, - }); - - // Run evaluation with flow - await humanloopClient.evaluations.run({ - file: { - id: flow.id, - type: "flow", - callable: ({ question }) => - "It's complicated don't worry about it", - version: { - attributes: { - foo: "bar", - }, - }, - }, - dataset: { - path: setup.evalDataset.path, - }, - name: "test_eval_run", - evaluators: [ - { - path: setup.outputNotNullEvaluator.path, - }, - ], - }); - - // Verify evaluation - const evaluationsResponse = await humanloopClient.evaluations.list({ - fileId: flow.id, - }); - expect(evaluationsResponse.data.length).toBe(1); - - const evaluationId = evaluationsResponse.data[0].id; - const runsResponse = - await humanloopClient.evaluations.listRunsForEvaluation( - evaluationId, - ); - expect(runsResponse.runs[0].status).toBe("completed"); - } finally { - await humanloopClient.flows.delete(flowResponse.id); - } - } finally { - // Clean up test-specific resources - await cleanupTestEnvironment(setup); - } - }); - - it("should not allow evaluating agent with callable", async () => { - // Setup test-specific environment - const setup = await setupTestEnvironment("agent_with_callable"); - - try { - try { - await humanloopClient.evaluations.run({ - file: { - path: "Test Agent", - type: "agent", - callable: (inputs: any) => "bar", - }, - dataset: { - path: setup.evalDataset.path, - }, - name: "test_eval_run", - evaluators: [ - { - path: setup.outputNotNullEvaluator.path, - }, - ], - }); - // If we got here, the test failed - fail("Expected ValueError but none was thrown"); - } catch (error: any) { - expect(error.message).toBe( - "Agent evaluation is only possible on the Humanloop runtime, do not provide a `callable`.", - ); - } - } finally { - // Clean up test-specific resources - await cleanupTestEnvironment(setup); - } - }); - - it("should resolve to default flow version when callable is provided without version", async () => { - // Setup test-specific environment - const setup = await setupTestEnvironment("flow_with_callable_without_version"); - let flowResponse: FlowResponse; - try { - const flowPath = `${setup.sdkTestDir.path}/Test Flow`; - - // Create flow - flowResponse = await humanloopClient.flows.upsert({ - path: flowPath, - attributes: { - foo: "bar", - }, - }); - - // Run evaluation with flow - await humanloopClient.evaluations.run({ - file: { - id: flowResponse.id, - type: "flow", - callable: ({ question }) => "It's complicated don't worry about it", - }, - dataset: { - path: setup.evalDataset.path, - }, - name: "test_eval_run", - evaluators: [ - { - path: setup.outputNotNullEvaluator.path, - }, - ], - }); - - // Verify evaluation - const evaluationsResponse = await humanloopClient.evaluations.list({ - fileId: flowResponse.id, - }); - expect(evaluationsResponse.data.length).toBe(1); - - const evaluationId = evaluationsResponse.data[0].id; - const runsResponse = - await humanloopClient.evaluations.listRunsForEvaluation(evaluationId); - expect(runsResponse.runs[0].status).toBe("completed"); - } finally { - // Clean up test-specific resources - await cleanupTestEnvironment(setup, [ - { id: flowResponse!.id, type: "flow" }, - ]); - } - }); -}); diff --git a/tests/integration/fixtures.ts b/tests/integration/fixtures.ts deleted file mode 100644 index 41ccf486..00000000 --- a/tests/integration/fixtures.ts +++ /dev/null @@ -1,246 +0,0 @@ -import dotenv from "dotenv"; -import { OpenAI } from "openai"; -import { v4 as uuidv4 } from "uuid"; - -import { FileType, PromptRequest, PromptResponse } from "../../src/api"; -import { HumanloopClient } from "../../src/humanloop.client"; - -export interface TestIdentifiers { - id: string; - path: string; -} - -export interface TestPrompt { - id: string; - path: string; - response: PromptResponse; -} - -export interface TestSetup { - sdkTestDir: TestIdentifiers; - testPromptConfig: PromptRequest; - openaiApiKey: string; - humanloopClient: HumanloopClient; - evalDataset: TestIdentifiers; - evalPrompt: TestIdentifiers; - stagingEnvironmentId: string; - outputNotNullEvaluator: TestIdentifiers; -} - -export interface CleanupResources { - type: FileType; - id: string; -} - -export function readEnvironment(): void { - if (![process.env.HUMANLOOP_API_KEY, process.env.OPENAI_API_KEY].every(Boolean)) { - // Testing locally not in CI, running dotenv.config() would override the secrets set for GitHub Action - dotenv.config({}); - } - if (!process.env.HUMANLOOP_API_KEY) { - throw new Error("HUMANLOOP_API_KEY is not set"); - } - if (!process.env.OPENAI_API_KEY) { - throw new Error("OPENAI_API_KEY is not set for integration tests"); - } -} - -export function getSubclient(client: HumanloopClient, type: FileType) { - switch (type) { - case "prompt": - return client.prompts; - case "tool": - return client.tools; - case "flow": - return client.flows; - case "agent": - return client.agents; - case "dataset": - return client.datasets; - case "evaluator": - return client.evaluators; - default: - throw new Error(`Unsupported file type: ${type}`); - } -} - -export async function setupTestEnvironment(testName: string): Promise { - readEnvironment(); - - const openaiApiKey = process.env.OPENAI_API_KEY!; - const humanloopClient = new HumanloopClient({ - apiKey: process.env.HUMANLOOP_API_KEY, - instrumentProviders: { - OpenAI: OpenAI, - }, - }); - - // Create a test directory - const directoryPath = `SDK_TEST_${testName}_${uuidv4()}`; - const response = await humanloopClient.directories.create({ - path: directoryPath, - }); - - const sdkTestDir = { - id: response.id, - path: response.path, - }; - - // Create test prompt config - const testPromptConfig: PromptRequest = { - provider: "openai", - model: "gpt-4o-mini", - temperature: 0.5, - template: [ - { - role: "system", - content: "You are a helpful assistant. Answer concisely.", - }, - { - role: "user", - content: "{{question}}", - }, - ], - }; - - // Create evaluator for testing - const evaluatorPath = `${sdkTestDir.path}/output_not_null_evaluator`; - const evaluatorResponse = await humanloopClient.evaluators.upsert({ - path: evaluatorPath, - spec: { - argumentsType: "target_required", - returnType: "boolean", - code: ` -def output_not_null(log: dict) -> bool: - return log["output"] is not None - `, - evaluatorType: "python", - }, - }); - const outputNotNullEvaluator = { - id: evaluatorResponse.id, - path: evaluatorPath, - }; - - // Create dataset for testing - const datasetPath = `${sdkTestDir.path}/eval_dataset`; - const datasetResponse = await humanloopClient.datasets.upsert({ - path: datasetPath, - datapoints: [ - { - inputs: { question: "What is the capital of the France?" }, - target: { output: "Paris" }, - }, - { - inputs: { question: "What is the capital of the Germany?" }, - target: { output: "Berlin" }, - }, - { - inputs: { question: "What is 2+2?" }, - target: { output: "4" }, - }, - ], - }); - const evalDataset = { - id: datasetResponse.id, - path: datasetResponse.path, - }; - - // Create prompt - const promptPath = `${sdkTestDir.path}/eval_prompt`; - const promptResponse = await humanloopClient.prompts.upsert({ - path: promptPath, - ...(testPromptConfig as PromptRequest), - }); - const evalPrompt = { - id: promptResponse.id, - path: promptResponse.path, - }; - - // Get staging environment ID - const environmentsResponse = await humanloopClient.prompts.listEnvironments( - evalPrompt.id, - ); - let stagingEnvironmentId = ""; - for (const environment of environmentsResponse) { - if (environment.name === "staging") { - stagingEnvironmentId = environment.id; - break; - } - } - if (!stagingEnvironmentId) { - throw new Error("Staging environment not found"); - } - - return { - testPromptConfig, - openaiApiKey, - humanloopClient, - sdkTestDir, - outputNotNullEvaluator, - evalDataset, - evalPrompt, - stagingEnvironmentId, - }; -} - -/** - * Cleans up all test resources - * @param setup The test setup containing the resources - * @param resources Additional resources to clean up - */ -export async function cleanupTestEnvironment( - setup: TestSetup, - resources?: CleanupResources[], -): Promise { - try { - // First clean up any additional resources - if (resources) { - for (const resource of resources) { - const subclient = getSubclient(setup.humanloopClient, resource.type); - if (resource.id) { - await subclient.delete(resource.id); - } - } - } - - // Clean up fixed test resources - if (setup.outputNotNullEvaluator?.id) { - try { - await setup.humanloopClient.evaluators.delete( - setup.outputNotNullEvaluator.id, - ); - } catch (error) { - console.warn( - `Failed to delete evaluator ${setup.outputNotNullEvaluator.id}:`, - error, - ); - } - } - - if (setup.evalDataset?.id) { - try { - await setup.humanloopClient.datasets.delete(setup.evalDataset.id); - } catch (error) { - console.warn( - `Failed to delete dataset ${setup.evalDataset.id}:`, - error, - ); - } - } - - // Finally, clean up the test directory - if (setup.sdkTestDir.id) { - try { - await setup.humanloopClient.directories.delete(setup.sdkTestDir.id); - } catch (error) { - console.warn( - `Failed to delete directory ${setup.sdkTestDir.id}:`, - error, - ); - } - } - } catch (error) { - console.error("Error during cleanup:", error); - } -} diff --git a/yarn.lock b/yarn.lock index d6cee5a6..b93231af 100644 --- a/yarn.lock +++ b/yarn.lock @@ -79,15 +79,15 @@ "@smithy/util-utf8" "^2.0.0" tslib "^2.6.2" -"@aws-sdk/client-cognito-identity@3.799.0": - version "3.799.0" - resolved "https://registry.yarnpkg.com/@aws-sdk/client-cognito-identity/-/client-cognito-identity-3.799.0.tgz#80fd73c4e664427e86026f9a302f6b646d935d46" - integrity sha512-gg1sncxYDpYWetey3v/nw9zSkL/Vj2potpeO9sYWY2brcm8SbGh106I6IM/gX6KnY9Y2Bre8xb+JoZGz6ntcnw== +"@aws-sdk/client-cognito-identity@3.803.0": + version "3.803.0" + resolved "https://registry.yarnpkg.com/@aws-sdk/client-cognito-identity/-/client-cognito-identity-3.803.0.tgz#f3356113d9555806bae029d29c34edfb5ed06fe9" + integrity sha512-VxcFO2AiHQwdWBcSLaPGEOy8c2ZJtRrzKjOuOwpTh4LhFPgrtfPgL66i46h7kLFGx56awq0WBSSvJQBxIdJ1Tw== dependencies: "@aws-crypto/sha256-browser" "5.2.0" "@aws-crypto/sha256-js" "5.2.0" "@aws-sdk/core" "3.799.0" - "@aws-sdk/credential-provider-node" "3.799.0" + "@aws-sdk/credential-provider-node" "3.803.0" "@aws-sdk/middleware-host-header" "3.775.0" "@aws-sdk/middleware-logger" "3.775.0" "@aws-sdk/middleware-recursion-detection" "3.775.0" @@ -104,7 +104,7 @@ "@smithy/invalid-dependency" "^4.0.2" "@smithy/middleware-content-length" "^4.0.2" "@smithy/middleware-endpoint" "^4.1.1" - "@smithy/middleware-retry" "^4.1.1" + "@smithy/middleware-retry" "^4.1.2" "@smithy/middleware-serde" "^4.0.3" "@smithy/middleware-stack" "^4.0.2" "@smithy/node-config-provider" "^4.0.2" @@ -120,19 +120,19 @@ "@smithy/util-defaults-mode-node" "^4.0.9" "@smithy/util-endpoints" "^3.0.2" "@smithy/util-middleware" "^4.0.2" - "@smithy/util-retry" "^4.0.2" + "@smithy/util-retry" "^4.0.3" "@smithy/util-utf8" "^4.0.0" tslib "^2.6.2" "@aws-sdk/client-sagemaker@^3.583.0": - version "3.799.0" - resolved "https://registry.yarnpkg.com/@aws-sdk/client-sagemaker/-/client-sagemaker-3.799.0.tgz#b6b4481f707c7e5d2536fe307e6f341f995a5827" - integrity sha512-So85e7gS7VW64ePgeVJNCxbSMU2tINQk/f3TRe7yKfdxQVvyq53jx88AwJgk2WUZYJxlDgEK6fBDvimzwFKJDA== + version "3.803.0" + resolved "https://registry.yarnpkg.com/@aws-sdk/client-sagemaker/-/client-sagemaker-3.803.0.tgz#a441f53c9d0c6dedad2a5f52b792ea5d08aa8698" + integrity sha512-CC7PTNDzVhCzZufELcB7zFTEwE3pqaLgq/DxNjkuNwD1GTHZ83nhkedzp8pcFUr43lIn6WpDbGGODIZeIKEr3A== dependencies: "@aws-crypto/sha256-browser" "5.2.0" "@aws-crypto/sha256-js" "5.2.0" "@aws-sdk/core" "3.799.0" - "@aws-sdk/credential-provider-node" "3.799.0" + "@aws-sdk/credential-provider-node" "3.803.0" "@aws-sdk/middleware-host-header" "3.775.0" "@aws-sdk/middleware-logger" "3.775.0" "@aws-sdk/middleware-recursion-detection" "3.775.0" @@ -149,7 +149,7 @@ "@smithy/invalid-dependency" "^4.0.2" "@smithy/middleware-content-length" "^4.0.2" "@smithy/middleware-endpoint" "^4.1.1" - "@smithy/middleware-retry" "^4.1.1" + "@smithy/middleware-retry" "^4.1.2" "@smithy/middleware-serde" "^4.0.3" "@smithy/middleware-stack" "^4.0.2" "@smithy/node-config-provider" "^4.0.2" @@ -165,17 +165,17 @@ "@smithy/util-defaults-mode-node" "^4.0.9" "@smithy/util-endpoints" "^3.0.2" "@smithy/util-middleware" "^4.0.2" - "@smithy/util-retry" "^4.0.2" + "@smithy/util-retry" "^4.0.3" "@smithy/util-utf8" "^4.0.0" "@smithy/util-waiter" "^4.0.3" "@types/uuid" "^9.0.1" tslib "^2.6.2" uuid "^9.0.1" -"@aws-sdk/client-sso@3.799.0": - version "3.799.0" - resolved "https://registry.yarnpkg.com/@aws-sdk/client-sso/-/client-sso-3.799.0.tgz#4e1e0831100a93147e9cfb8b29bcee88344effa0" - integrity sha512-/i/LG7AiWPmPxKCA2jnR2zaf7B3HYSTbxaZI21ElIz9wASlNAsKr8CnLY7qb50kOyXiNfQ834S5Q3Gl8dX9o3Q== +"@aws-sdk/client-sso@3.803.0": + version "3.803.0" + resolved "https://registry.yarnpkg.com/@aws-sdk/client-sso/-/client-sso-3.803.0.tgz#16a4611e279694effcbb65d9d65ed1d64c635855" + integrity sha512-TT3BRD1yiL3IGXBKfq560vvEdyOJtJr8bp+R82dD6P0IoS8aFcNtF822BOJy7CqvxksOc3hQKLaPVzE82gE8Ow== dependencies: "@aws-crypto/sha256-browser" "5.2.0" "@aws-crypto/sha256-js" "5.2.0" @@ -196,7 +196,7 @@ "@smithy/invalid-dependency" "^4.0.2" "@smithy/middleware-content-length" "^4.0.2" "@smithy/middleware-endpoint" "^4.1.1" - "@smithy/middleware-retry" "^4.1.1" + "@smithy/middleware-retry" "^4.1.2" "@smithy/middleware-serde" "^4.0.3" "@smithy/middleware-stack" "^4.0.2" "@smithy/node-config-provider" "^4.0.2" @@ -212,7 +212,7 @@ "@smithy/util-defaults-mode-node" "^4.0.9" "@smithy/util-endpoints" "^3.0.2" "@smithy/util-middleware" "^4.0.2" - "@smithy/util-retry" "^4.0.2" + "@smithy/util-retry" "^4.0.3" "@smithy/util-utf8" "^4.0.0" tslib "^2.6.2" @@ -233,12 +233,12 @@ fast-xml-parser "4.4.1" tslib "^2.6.2" -"@aws-sdk/credential-provider-cognito-identity@3.799.0": - version "3.799.0" - resolved "https://registry.yarnpkg.com/@aws-sdk/credential-provider-cognito-identity/-/credential-provider-cognito-identity-3.799.0.tgz#eba1a19bb7bacd37371e2e0dbd3f126145ef9d88" - integrity sha512-qHOqGsvt/z1bvjJRzndW8VaRfbGBhoETZpoRYNbfCbrNH2IRM98KRUlYH1EJ1wFFkT0gUDJr+oIOUCvRlgRW1Q== +"@aws-sdk/credential-provider-cognito-identity@3.803.0": + version "3.803.0" + resolved "https://registry.yarnpkg.com/@aws-sdk/credential-provider-cognito-identity/-/credential-provider-cognito-identity-3.803.0.tgz#3c34f7f32a74833cea9e7ffa1d734abecae08291" + integrity sha512-1lJ3DPu4IBChPG7Fded+6tMGZiaILzg4q00QQzab1SM90DLo95RPOoe9gYQ1B5aDHuzZafil/HQYVdl4gARe7g== dependencies: - "@aws-sdk/client-cognito-identity" "3.799.0" + "@aws-sdk/client-cognito-identity" "3.803.0" "@aws-sdk/types" "3.775.0" "@smithy/property-provider" "^4.0.2" "@smithy/types" "^4.2.0" @@ -271,18 +271,18 @@ "@smithy/util-stream" "^4.2.0" tslib "^2.6.2" -"@aws-sdk/credential-provider-ini@3.799.0": - version "3.799.0" - resolved "https://registry.yarnpkg.com/@aws-sdk/credential-provider-ini/-/credential-provider-ini-3.799.0.tgz#89ed328e40d2bf0c37453c26b1dd74201c61da2c" - integrity sha512-M9ubILFxerqw4QJwk83MnjtZyoA2eNCiea5V+PzZeHlwk2PON/EnawKqy65x9/hMHGoSvvNuby7iMAmPptu7yw== +"@aws-sdk/credential-provider-ini@3.803.0": + version "3.803.0" + resolved "https://registry.yarnpkg.com/@aws-sdk/credential-provider-ini/-/credential-provider-ini-3.803.0.tgz#5f831e53cf475756052aba81b128d66d8ba5a52f" + integrity sha512-XtbFftJex18GobpRWJxg5V7stVwvmV2gdBYW+zRM0YW6NZAR4NP/4vcc9ktM3++BWW5OF4Kvl7Nu7N4mAzRHmw== dependencies: "@aws-sdk/core" "3.799.0" "@aws-sdk/credential-provider-env" "3.799.0" "@aws-sdk/credential-provider-http" "3.799.0" "@aws-sdk/credential-provider-process" "3.799.0" - "@aws-sdk/credential-provider-sso" "3.799.0" - "@aws-sdk/credential-provider-web-identity" "3.799.0" - "@aws-sdk/nested-clients" "3.799.0" + "@aws-sdk/credential-provider-sso" "3.803.0" + "@aws-sdk/credential-provider-web-identity" "3.803.0" + "@aws-sdk/nested-clients" "3.803.0" "@aws-sdk/types" "3.775.0" "@smithy/credential-provider-imds" "^4.0.2" "@smithy/property-provider" "^4.0.2" @@ -290,17 +290,17 @@ "@smithy/types" "^4.2.0" tslib "^2.6.2" -"@aws-sdk/credential-provider-node@3.799.0": - version "3.799.0" - resolved "https://registry.yarnpkg.com/@aws-sdk/credential-provider-node/-/credential-provider-node-3.799.0.tgz#45e646a24f105782dbaf3c55951dbae32ae73074" - integrity sha512-nd9fSJc0wUlgKUkIr2ldJhcIIrzJFS29AGZoyY22J3xih63nNDv61eTGVMsDZzHlV21XzMlPEljTR7axiimckg== +"@aws-sdk/credential-provider-node@3.803.0": + version "3.803.0" + resolved "https://registry.yarnpkg.com/@aws-sdk/credential-provider-node/-/credential-provider-node-3.803.0.tgz#bcfd9638f7f8e8a1b78fc2c58346daf7f67389e2" + integrity sha512-lPdRYbjxwmv7gRqbaEe1Y1Yl5fD4c43AuK3P31eKjf1j41hZEQ0dg9a9KLk7i6ehEoVsxewnJrvbC2pVoYrCmQ== dependencies: "@aws-sdk/credential-provider-env" "3.799.0" "@aws-sdk/credential-provider-http" "3.799.0" - "@aws-sdk/credential-provider-ini" "3.799.0" + "@aws-sdk/credential-provider-ini" "3.803.0" "@aws-sdk/credential-provider-process" "3.799.0" - "@aws-sdk/credential-provider-sso" "3.799.0" - "@aws-sdk/credential-provider-web-identity" "3.799.0" + "@aws-sdk/credential-provider-sso" "3.803.0" + "@aws-sdk/credential-provider-web-identity" "3.803.0" "@aws-sdk/types" "3.775.0" "@smithy/credential-provider-imds" "^4.0.2" "@smithy/property-provider" "^4.0.2" @@ -320,48 +320,48 @@ "@smithy/types" "^4.2.0" tslib "^2.6.2" -"@aws-sdk/credential-provider-sso@3.799.0": - version "3.799.0" - resolved "https://registry.yarnpkg.com/@aws-sdk/credential-provider-sso/-/credential-provider-sso-3.799.0.tgz#535dd1d1abe5f2567551514444f18b79993ac92e" - integrity sha512-lQv27QkNU9FJFZqEf5DIEN3uXEN409Iaym9WJzhOouGtxvTIAWiD23OYh1u8PvBdrordJGS2YddfQvhcmq9akw== +"@aws-sdk/credential-provider-sso@3.803.0": + version "3.803.0" + resolved "https://registry.yarnpkg.com/@aws-sdk/credential-provider-sso/-/credential-provider-sso-3.803.0.tgz#8a0a48a9acaab8f4e5c172427cc476a2f3513aaa" + integrity sha512-HEAcxSHrHxVekGnZqjFrkqdYAf4jFiZIMhuh0jqiqY6A4udEyXy1V623HVcTz/XXj6UBRnyD+zmOmlbzBvkfQg== dependencies: - "@aws-sdk/client-sso" "3.799.0" + "@aws-sdk/client-sso" "3.803.0" "@aws-sdk/core" "3.799.0" - "@aws-sdk/token-providers" "3.799.0" + "@aws-sdk/token-providers" "3.803.0" "@aws-sdk/types" "3.775.0" "@smithy/property-provider" "^4.0.2" "@smithy/shared-ini-file-loader" "^4.0.2" "@smithy/types" "^4.2.0" tslib "^2.6.2" -"@aws-sdk/credential-provider-web-identity@3.799.0": - version "3.799.0" - resolved "https://registry.yarnpkg.com/@aws-sdk/credential-provider-web-identity/-/credential-provider-web-identity-3.799.0.tgz#ddf6c4e6f692289ba9e5db3ba9c63564742e5533" - integrity sha512-8k1i9ut+BEg0QZ+I6UQMxGNR1T8paLmAOAZXU+nLQR0lcxS6lr8v+dqofgzQPuHLBkWNCr1Av1IKeL3bJjgU7g== +"@aws-sdk/credential-provider-web-identity@3.803.0": + version "3.803.0" + resolved "https://registry.yarnpkg.com/@aws-sdk/credential-provider-web-identity/-/credential-provider-web-identity-3.803.0.tgz#9612bd4e2a2bdf2d3826f18b2138f8bd996605bb" + integrity sha512-oChnEpwI25OW4GPvhI1VnXM3IQEkDhESGFZd5JHzJDHyvSF2NU58V86jkJyaa4H4X25IbGaThuulNI5xCOngjw== dependencies: "@aws-sdk/core" "3.799.0" - "@aws-sdk/nested-clients" "3.799.0" + "@aws-sdk/nested-clients" "3.803.0" "@aws-sdk/types" "3.775.0" "@smithy/property-provider" "^4.0.2" "@smithy/types" "^4.2.0" tslib "^2.6.2" "@aws-sdk/credential-providers@^3.583.0": - version "3.799.0" - resolved "https://registry.yarnpkg.com/@aws-sdk/credential-providers/-/credential-providers-3.799.0.tgz#f86cff0bdaef9762b56132977186c4ec1e3249cd" - integrity sha512-Gk10skoEri6zsCPxn34Zpu6Z1B5R3RLwqDw1krNl+B1P749gB6i7XULXZUOotqpum0T0q4euOwAB8XWuTOkKew== + version "3.803.0" + resolved "https://registry.yarnpkg.com/@aws-sdk/credential-providers/-/credential-providers-3.803.0.tgz#3d1d5dc93e156efb88fdee78e42ce103213d1e1c" + integrity sha512-yuN2ZNVgeAKlLWAAwU7SIF0lkgSQEBoehl49x0FEUuk6snRcuO13/zYVrmaCvplx71ET6quPGJsknlaiUWtdwA== dependencies: - "@aws-sdk/client-cognito-identity" "3.799.0" + "@aws-sdk/client-cognito-identity" "3.803.0" "@aws-sdk/core" "3.799.0" - "@aws-sdk/credential-provider-cognito-identity" "3.799.0" + "@aws-sdk/credential-provider-cognito-identity" "3.803.0" "@aws-sdk/credential-provider-env" "3.799.0" "@aws-sdk/credential-provider-http" "3.799.0" - "@aws-sdk/credential-provider-ini" "3.799.0" - "@aws-sdk/credential-provider-node" "3.799.0" + "@aws-sdk/credential-provider-ini" "3.803.0" + "@aws-sdk/credential-provider-node" "3.803.0" "@aws-sdk/credential-provider-process" "3.799.0" - "@aws-sdk/credential-provider-sso" "3.799.0" - "@aws-sdk/credential-provider-web-identity" "3.799.0" - "@aws-sdk/nested-clients" "3.799.0" + "@aws-sdk/credential-provider-sso" "3.803.0" + "@aws-sdk/credential-provider-web-identity" "3.803.0" + "@aws-sdk/nested-clients" "3.803.0" "@aws-sdk/types" "3.775.0" "@smithy/config-resolver" "^4.1.0" "@smithy/core" "^3.3.0" @@ -413,10 +413,10 @@ "@smithy/types" "^4.2.0" tslib "^2.6.2" -"@aws-sdk/nested-clients@3.799.0": - version "3.799.0" - resolved "https://registry.yarnpkg.com/@aws-sdk/nested-clients/-/nested-clients-3.799.0.tgz#a3b223cfa22f809cee28eedea2ce1f30175665f9" - integrity sha512-zILlWh7asrcQG9JYMYgnvEQBfwmWKfED0yWCf3UNAmQcfS9wkCAWCgicNy/y5KvNvEYnHidsU117STtyuUNG5g== +"@aws-sdk/nested-clients@3.803.0": + version "3.803.0" + resolved "https://registry.yarnpkg.com/@aws-sdk/nested-clients/-/nested-clients-3.803.0.tgz#aa5852a9c8b48bcad903ac841952b93ffd0bd3b3" + integrity sha512-wiWiYaFQxK2u37G9IOXuWkHelEbU8ulLxdHpoPf0TSu/1boqLW7fcofuZATAvFcvigQx3oebwO8G4c/mmixTTw== dependencies: "@aws-crypto/sha256-browser" "5.2.0" "@aws-crypto/sha256-js" "5.2.0" @@ -437,7 +437,7 @@ "@smithy/invalid-dependency" "^4.0.2" "@smithy/middleware-content-length" "^4.0.2" "@smithy/middleware-endpoint" "^4.1.1" - "@smithy/middleware-retry" "^4.1.1" + "@smithy/middleware-retry" "^4.1.2" "@smithy/middleware-serde" "^4.0.3" "@smithy/middleware-stack" "^4.0.2" "@smithy/node-config-provider" "^4.0.2" @@ -453,7 +453,7 @@ "@smithy/util-defaults-mode-node" "^4.0.9" "@smithy/util-endpoints" "^3.0.2" "@smithy/util-middleware" "^4.0.2" - "@smithy/util-retry" "^4.0.2" + "@smithy/util-retry" "^4.0.3" "@smithy/util-utf8" "^4.0.0" tslib "^2.6.2" @@ -485,12 +485,12 @@ "@smithy/signature-v4" "^1.0.1" tslib "^2.5.0" -"@aws-sdk/token-providers@3.799.0": - version "3.799.0" - resolved "https://registry.yarnpkg.com/@aws-sdk/token-providers/-/token-providers-3.799.0.tgz#7b2cc6aa5b1a1058490b780ff975de29218ef3a0" - integrity sha512-/8iDjnsJs/D8AhGbDAmdF5oSHzE4jsDsM2RIIxmBAKTZXkaaclQBNX9CmAqLKQmO3IUMZsDH2KENHLVAk/N/mw== +"@aws-sdk/token-providers@3.803.0": + version "3.803.0" + resolved "https://registry.yarnpkg.com/@aws-sdk/token-providers/-/token-providers-3.803.0.tgz#ba0f6b2919521125cf9c280bc3de1135c4e47e25" + integrity sha512-lDbMgVjWWEPT7a6lLaAEPPljwOeLTjPX2sJ7MoDICpQotg4Yd8cQfX3nqScSyLAGSc7Rq/21UPnPoij/E0K3lg== dependencies: - "@aws-sdk/nested-clients" "3.799.0" + "@aws-sdk/nested-clients" "3.803.0" "@aws-sdk/types" "3.775.0" "@smithy/property-provider" "^4.0.2" "@smithy/shared-ini-file-loader" "^4.0.2" @@ -1240,10 +1240,10 @@ "@smithy/util-middleware" "^4.0.2" tslib "^2.6.2" -"@smithy/core@^3.3.0": - version "3.3.0" - resolved "https://registry.yarnpkg.com/@smithy/core/-/core-3.3.0.tgz#a6b141733fa530cb2f9b49a8e70ae98169c92cf0" - integrity sha512-r6gvs5OfRq/w+9unPm7B3po4rmWaGh0CIL/OwHntGGux7+RhOOZLGuurbeMgWV6W55ZuyMTypJLeH0vn/ZRaWQ== +"@smithy/core@^3.3.0", "@smithy/core@^3.3.1": + version "3.3.1" + resolved "https://registry.yarnpkg.com/@smithy/core/-/core-3.3.1.tgz#6119a683f62099158eb193e3745f4ade6de741dd" + integrity sha512-W7AppgQD3fP1aBmo8wWo0id5zeR2/aYRy067vZsDVaa6v/mdhkg6DxXwEVuSPjZl+ZnvWAQbUMCd5ckw38+tHQ== dependencies: "@smithy/middleware-serde" "^4.0.3" "@smithy/protocol-http" "^5.1.0" @@ -1334,12 +1334,12 @@ "@smithy/types" "^4.2.0" tslib "^2.6.2" -"@smithy/middleware-endpoint@^4.1.1": - version "4.1.1" - resolved "https://registry.yarnpkg.com/@smithy/middleware-endpoint/-/middleware-endpoint-4.1.1.tgz#d210cac102a645ea35541c17fda52c73f0b56304" - integrity sha512-z5RmcHxjvScL+LwEDU2mTNCOhgUs4lu5PGdF1K36IPRmUHhNFxNxgenSB7smyDiYD4vdKQ7CAZtG5cUErqib9w== +"@smithy/middleware-endpoint@^4.1.1", "@smithy/middleware-endpoint@^4.1.2": + version "4.1.2" + resolved "https://registry.yarnpkg.com/@smithy/middleware-endpoint/-/middleware-endpoint-4.1.2.tgz#d8ad5e4e439126d7bcc79f0046fc5f9518d8afd8" + integrity sha512-EqOy3xaEGQpsKxLlzYstDRJ8eY90CbyBP4cl+w7r45mE60S8YliyL9AgWsdWcyNiB95E2PMqHBEv67nNl1zLfg== dependencies: - "@smithy/core" "^3.3.0" + "@smithy/core" "^3.3.1" "@smithy/middleware-serde" "^4.0.3" "@smithy/node-config-provider" "^4.0.2" "@smithy/shared-ini-file-loader" "^4.0.2" @@ -1348,18 +1348,18 @@ "@smithy/util-middleware" "^4.0.2" tslib "^2.6.2" -"@smithy/middleware-retry@^4.1.1": - version "4.1.1" - resolved "https://registry.yarnpkg.com/@smithy/middleware-retry/-/middleware-retry-4.1.1.tgz#8c65dec6fca1f4883a10f724f9d6cafea19d0ba4" - integrity sha512-mBJOxn9aUYwcBUPQpKv9ifzrCn4EbhPUFguEZv3jB57YOMh0caS4P8HoLvUeNUI1nx4bIVH2SIbogbDfFI9DUA== +"@smithy/middleware-retry@^4.1.2": + version "4.1.3" + resolved "https://registry.yarnpkg.com/@smithy/middleware-retry/-/middleware-retry-4.1.3.tgz#6d22d21321b2089b4caeb79577a9b40bf4ac6ace" + integrity sha512-AsJtI9KiFoEGAhcEKZyzzPfrszAQGcf4HSYKmenz0WGx/6YNvoPPv4OSGfZTCsDmgPHv4pXzxE+7QV7jcGWNKw== dependencies: "@smithy/node-config-provider" "^4.0.2" "@smithy/protocol-http" "^5.1.0" - "@smithy/service-error-classification" "^4.0.2" - "@smithy/smithy-client" "^4.2.1" + "@smithy/service-error-classification" "^4.0.3" + "@smithy/smithy-client" "^4.2.2" "@smithy/types" "^4.2.0" "@smithy/util-middleware" "^4.0.2" - "@smithy/util-retry" "^4.0.2" + "@smithy/util-retry" "^4.0.3" tslib "^2.6.2" uuid "^9.0.1" @@ -1441,10 +1441,10 @@ "@smithy/types" "^4.2.0" tslib "^2.6.2" -"@smithy/service-error-classification@^4.0.2": - version "4.0.2" - resolved "https://registry.yarnpkg.com/@smithy/service-error-classification/-/service-error-classification-4.0.2.tgz#96740ed8be7ac5ad7d6f296d4ddf3f66444b8dcc" - integrity sha512-LA86xeFpTKn270Hbkixqs5n73S+LVM0/VZco8dqd+JT75Dyx3Lcw/MraL7ybjmz786+160K8rPOmhsq0SocoJQ== +"@smithy/service-error-classification@^4.0.3": + version "4.0.3" + resolved "https://registry.yarnpkg.com/@smithy/service-error-classification/-/service-error-classification-4.0.3.tgz#df43e3ec00a9f2d15415185561d98cd602c8bc67" + integrity sha512-FTbcajmltovWMjj3tksDQdD23b2w6gH+A0DYA1Yz3iSpjDj8fmkwy62UnXcWMy4d5YoMoSyLFHMfkEVEzbiN8Q== dependencies: "@smithy/types" "^4.2.0" @@ -1484,13 +1484,13 @@ "@smithy/util-utf8" "^4.0.0" tslib "^2.6.2" -"@smithy/smithy-client@^4.2.1": - version "4.2.1" - resolved "https://registry.yarnpkg.com/@smithy/smithy-client/-/smithy-client-4.2.1.tgz#21055bc038824de93aee778d040cdf9864e6114d" - integrity sha512-fbniZef60QdsBc4ZY0iyI8xbFHIiC/QRtPi66iE4ufjiE/aaz7AfUXzcWMkpO8r+QhLeNRIfmPchIG+3/QDZ6g== +"@smithy/smithy-client@^4.2.1", "@smithy/smithy-client@^4.2.2": + version "4.2.2" + resolved "https://registry.yarnpkg.com/@smithy/smithy-client/-/smithy-client-4.2.2.tgz#b599c841c376994a3b3019942b1d3f1ecfaf964b" + integrity sha512-3AnHfsMdq9Wg7+3BeR1HuLWI9+DMA/SoHVpCWq6xSsa52ikNd6nlF/wFzdpHyGtVa+Aji6lMgvwOF4sGcVA7SA== dependencies: - "@smithy/core" "^3.3.0" - "@smithy/middleware-endpoint" "^4.1.1" + "@smithy/core" "^3.3.1" + "@smithy/middleware-endpoint" "^4.1.2" "@smithy/middleware-stack" "^4.0.2" "@smithy/protocol-http" "^5.1.0" "@smithy/types" "^4.2.0" @@ -1575,26 +1575,26 @@ tslib "^2.6.2" "@smithy/util-defaults-mode-browser@^4.0.9": - version "4.0.9" - resolved "https://registry.yarnpkg.com/@smithy/util-defaults-mode-browser/-/util-defaults-mode-browser-4.0.9.tgz#b70915229126eee4c1df18cd8f1e8edabade9c41" - integrity sha512-B8j0XsElvyhv6+5hlFf6vFV/uCSyLKcInpeXOGnOImX2mGXshE01RvPoGipTlRpIk53e6UfYj7WdDdgbVfXDZw== + version "4.0.10" + resolved "https://registry.yarnpkg.com/@smithy/util-defaults-mode-browser/-/util-defaults-mode-browser-4.0.10.tgz#50cc8aff3e1881848d574ea777439ff74a465550" + integrity sha512-2k6fgUNOZ1Rn0gEjvGPGrDEINLG8qSBHsN7xlkkbO+fnHJ36BQPDzhFfMmYSDS8AgzoygqQiDOQ+6Hp2vBTUdA== dependencies: "@smithy/property-provider" "^4.0.2" - "@smithy/smithy-client" "^4.2.1" + "@smithy/smithy-client" "^4.2.2" "@smithy/types" "^4.2.0" bowser "^2.11.0" tslib "^2.6.2" "@smithy/util-defaults-mode-node@^4.0.9": - version "4.0.9" - resolved "https://registry.yarnpkg.com/@smithy/util-defaults-mode-node/-/util-defaults-mode-node-4.0.9.tgz#2d50bcb178a214878a86563616a0b3499550a9d2" - integrity sha512-wTDU8P/zdIf9DOpV5qm64HVgGRXvqjqB/fJZTEQbrz3s79JHM/E7XkMm/876Oq+ZLHJQgnXM9QHDo29dlM62eA== + version "4.0.10" + resolved "https://registry.yarnpkg.com/@smithy/util-defaults-mode-node/-/util-defaults-mode-node-4.0.10.tgz#f85b0a12fe3d1bc63e776ee8100d14055a211526" + integrity sha512-2XR1WRglLVmoIFts7bODUTgBdVyvkfKNkydHrlsI5VxW9q3s1hnJCuY+f1OHzvj5ue23q4vydM2fjrMjf2HSdQ== dependencies: "@smithy/config-resolver" "^4.1.0" "@smithy/credential-provider-imds" "^4.0.2" "@smithy/node-config-provider" "^4.0.2" "@smithy/property-provider" "^4.0.2" - "@smithy/smithy-client" "^4.2.1" + "@smithy/smithy-client" "^4.2.2" "@smithy/types" "^4.2.0" tslib "^2.6.2" @@ -1636,12 +1636,12 @@ "@smithy/types" "^4.2.0" tslib "^2.6.2" -"@smithy/util-retry@^4.0.2": - version "4.0.2" - resolved "https://registry.yarnpkg.com/@smithy/util-retry/-/util-retry-4.0.2.tgz#9b64cf460d63555884e641721d19e3c0abff8ee6" - integrity sha512-Qryc+QG+7BCpvjloFLQrmlSd0RsVRHejRXd78jNO3+oREueCjwG1CCEH1vduw/ZkM1U9TztwIKVIi3+8MJScGg== +"@smithy/util-retry@^4.0.3": + version "4.0.3" + resolved "https://registry.yarnpkg.com/@smithy/util-retry/-/util-retry-4.0.3.tgz#42d54b3a100915b61c6f9bee43c966e96139584d" + integrity sha512-DPuYjZQDXmKr/sNvy9Spu8R/ESa2e22wXZzSAY6NkjOLj6spbIje/Aq8rT97iUMdDj0qHMRIe+bTxvlU74d9Ng== dependencies: - "@smithy/service-error-classification" "^4.0.2" + "@smithy/service-error-classification" "^4.0.3" "@smithy/types" "^4.2.0" tslib "^2.6.2" @@ -1887,16 +1887,16 @@ form-data "^4.0.0" "@types/node@*": - version "22.15.3" - resolved "https://registry.yarnpkg.com/@types/node/-/node-22.15.3.tgz#b7fb9396a8ec5b5dfb1345d8ac2502060e9af68b" - integrity sha512-lX7HFZeHf4QG/J7tBZqrCAXwz9J5RD56Y6MpP0eJkka8p+K0RY/yBTW7CYFJ4VGCclxqOLKmiGP5juQc6MKgcw== + version "22.15.12" + resolved "https://registry.yarnpkg.com/@types/node/-/node-22.15.12.tgz#9ce54e51e09536faa94e4ec300c4728ee83bfa85" + integrity sha512-K0fpC/ZVeb8G9rm7bH7vI0KAec4XHEhBam616nVJCV51bKzJ6oA3luG4WdKoaztxe70QaNjS/xBmcDLmr4PiGw== dependencies: undici-types "~6.21.0" "@types/node@^18.11.18", "@types/node@^18.19.70": - version "18.19.87" - resolved "https://registry.yarnpkg.com/@types/node/-/node-18.19.87.tgz#690f000cc51e3c7f48bc00f7e86fac6eb550b709" - integrity sha512-OIAAu6ypnVZHmsHCeJ+7CCSub38QNBS9uceMQeg7K5Ur0Jr+wG9wEOEvvMbhp09pxD5czIUy/jND7s7Tb6Nw7A== + version "18.19.96" + resolved "https://registry.yarnpkg.com/@types/node/-/node-18.19.96.tgz#34b4ecfe4fe864f4e59994d2108cd1659ba37683" + integrity sha512-PzBvgsZ7YdFs/Kng1BSW8IGv68/SPcOxYYhT7luxD7QyzIhFS1xPTpfK3K9eHBa7hVwlW+z8nN0mOd515yaduQ== dependencies: undici-types "~5.26.4" @@ -2306,14 +2306,14 @@ braces@^3.0.3: fill-range "^7.1.1" browserslist@^4.24.0: - version "4.24.4" - resolved "https://registry.yarnpkg.com/browserslist/-/browserslist-4.24.4.tgz#c6b2865a3f08bcb860a0e827389003b9fe686e4b" - integrity sha512-KDi1Ny1gSePi1vm0q4oxSF8b4DR44GF4BbmS2YdhPLOEqd8pDviZOGH/GsmRwoWJ2+5Lr085X7naowMwKHDG1A== + version "4.24.5" + resolved "https://registry.yarnpkg.com/browserslist/-/browserslist-4.24.5.tgz#aa0f5b8560fe81fde84c6dcb38f759bafba0e11b" + integrity sha512-FDToo4Wo82hIdgc1CQ+NQD0hEhmpPjrZ3hiUgwgOG6IuTdlpr8jdjyG24P6cNP1yJpTLzS5OcGgSw0xmDU1/Tw== dependencies: - caniuse-lite "^1.0.30001688" - electron-to-chromium "^1.5.73" + caniuse-lite "^1.0.30001716" + electron-to-chromium "^1.5.149" node-releases "^2.0.19" - update-browserslist-db "^1.1.1" + update-browserslist-db "^1.1.3" bs-logger@^0.2.6: version "0.2.6" @@ -2373,10 +2373,10 @@ camelcase@^6.2.0: resolved "https://registry.yarnpkg.com/camelcase/-/camelcase-6.3.0.tgz#5685b95eb209ac9c0c177467778c9c84df58ba9a" integrity sha512-Gmy6FhYlCY7uOElZUSbxo2UCDH8owEk996gkbrpsgGtrJLM3J7jGxl9Ic7Qwwj4ivOE5AWZWRMecDdF7hqGjFA== -caniuse-lite@^1.0.30001688: - version "1.0.30001716" - resolved "https://registry.yarnpkg.com/caniuse-lite/-/caniuse-lite-1.0.30001716.tgz#39220dfbc58c85d9d4519e7090b656aa11ca4b85" - integrity sha512-49/c1+x3Kwz7ZIWt+4DvK3aMJy9oYXXG6/97JKsnjdCk/6n9vVyWL8NAwVt95Lwt9eigI10Hl782kDfZUUlRXw== +caniuse-lite@^1.0.30001716: + version "1.0.30001717" + resolved "https://registry.yarnpkg.com/caniuse-lite/-/caniuse-lite-1.0.30001717.tgz#5d9fec5ce09796a1893013825510678928aca129" + integrity sha512-auPpttCq6BDEG8ZAuHJIplGw6GODhjw+/11e7IjpnYCxZcW/ONgPs0KVBJ0d1bY3e2+7PRe5RCLyP+PfwVgkYw== chalk@^4.0.0, chalk@^4.0.2, chalk@^4.1.0: version "4.1.2" @@ -2554,9 +2554,9 @@ decimal.js@^10.4.2: integrity sha512-8vDa8Qxvr/+d94hSh5P3IJwI5t8/c0KsMp+g8bNw9cY2icONa5aPfvKeieW1WlG0WQYwwhJ7mjui2xtiePQSXw== dedent@^1.0.0: - version "1.5.3" - resolved "https://registry.yarnpkg.com/dedent/-/dedent-1.5.3.tgz#99aee19eb9bae55a67327717b6e848d0bf777e5a" - integrity sha512-NHQtfOOW68WD8lgypbLA5oT+Bt0xXJhiYvoR6SmmNXZfpzOGXwdKWmcwG8N7PwVVWV3eF/68nmD9BaJSsTBhyQ== + version "1.6.0" + resolved "https://registry.yarnpkg.com/dedent/-/dedent-1.6.0.tgz#79d52d6389b1ffa67d2bcef59ba51847a9d503b2" + integrity sha512-F1Z+5UCFpmQUzJa11agbyPVMbpgT/qA3/SKyJ1jyBgm7dUcUEa8v9JwDkerSQXfakBwFljIxhOJqGkjUwZ9FSA== deepmerge@^4.2.2: version "4.3.1" @@ -2606,10 +2606,10 @@ ejs@^3.1.10: dependencies: jake "^10.8.5" -electron-to-chromium@^1.5.73: - version "1.5.145" - resolved "https://registry.yarnpkg.com/electron-to-chromium/-/electron-to-chromium-1.5.145.tgz#abd50700ac2c809e40a4694584f66711ee937fb6" - integrity sha512-pZ5EcTWRq/055MvSBgoFEyKf2i4apwfoqJbK/ak2jnFq8oHjZ+vzc3AhRcz37Xn+ZJfL58R666FLJx0YOK9yTw== +electron-to-chromium@^1.5.149: + version "1.5.150" + resolved "https://registry.yarnpkg.com/electron-to-chromium/-/electron-to-chromium-1.5.150.tgz#3120bf34453a7a82cb4d9335df20680b2bb40649" + integrity sha512-rOOkP2ZUMx1yL4fCxXQKDHQ8ZXwisb2OycOQVKHgvB3ZI4CvehOd4y2tfnnLDieJ3Zs1RL1Dlp3cMkyIn7nnXA== emittery@^0.13.1: version "0.13.1" @@ -3832,9 +3832,9 @@ onetime@^5.1.2: mimic-fn "^2.1.0" openai@^4.74.0: - version "4.96.2" - resolved "https://registry.yarnpkg.com/openai/-/openai-4.96.2.tgz#a7d360597f273a5f6ed8dd22914e598013022fa4" - integrity sha512-R2XnxvMsizkROr7BV3uNp1q/3skwPZ7fmPjO1bXLnfB4Tu5xKxrT1EVwzjhxn0MZKBKAvOaGWS63jTMN6KrIXA== + version "4.97.0" + resolved "https://registry.yarnpkg.com/openai/-/openai-4.97.0.tgz#4e2e85c79499c1d44b58f97b3a8ec1d6bfe403b3" + integrity sha512-LRoiy0zvEf819ZUEJhgfV8PfsE8G5WpQi4AwA1uCV8SKvvtXQkoWUFkepD6plqyJQRghy2+AEPQ07FrJFKHZ9Q== dependencies: "@types/node" "^18.11.18" "@types/node-fetch" "^2.6.4" @@ -4426,9 +4426,9 @@ type-fest@^0.21.3: integrity sha512-t0rzBq87m3fVcduHDUFhKmyyX+9eo6WQjZvf51Ea/M0Q7+T374Jp1aUiyUl0GKxp8M/OETVHSDvmkyPgvX+X2w== type-fest@^4.39.1: - version "4.40.1" - resolved "https://registry.yarnpkg.com/type-fest/-/type-fest-4.40.1.tgz#d78a09f08dd1081a434dd377967650cfd565401d" - integrity sha512-9YvLNnORDpI+vghLU/Nf+zSv0kL47KbVJ1o3sKgoTefl6i+zebxbiDQWoe/oWWqPhIgQdRZRT1KA9sCPL810SA== + version "4.41.0" + resolved "https://registry.yarnpkg.com/type-fest/-/type-fest-4.41.0.tgz#6ae1c8e5731273c2bf1f58ad39cbae2c91a46c58" + integrity sha512-TeTSQ6H5YHvpqVwBRcnLDCBnDOHWYu7IvGbHT6N8AOymcr9PJGjc1GTtiWZTYg0NCgYwvnYWEkVChQAr9bjfwA== typescript@~5.7.2: version "5.7.3" @@ -4450,7 +4450,7 @@ universalify@^0.2.0: resolved "https://registry.yarnpkg.com/universalify/-/universalify-0.2.0.tgz#6451760566fa857534745ab1dde952d1b1761be0" integrity sha512-CJ1QgKmNg3CwvAv/kOFmtnEN05f0D/cn9QntgNOQlQF9dgvVTHj3t+8JPdjqawCHk7V/KA+fbUqzZ9XWhcqPUg== -update-browserslist-db@^1.1.1: +update-browserslist-db@^1.1.3: version "1.1.3" resolved "https://registry.yarnpkg.com/update-browserslist-db/-/update-browserslist-db-1.1.3.tgz#348377dd245216f9e7060ff50b15a1b740b75420" integrity sha512-UxhIZQ+QInVdunkDAaiazvvT/+fXL5Osr0JZlJulepYu6Jd7qJtDZjlur0emRlT71EN3ScPoE7gvsuIKKNavKw== @@ -4528,9 +4528,9 @@ webpack-sources@^3.2.3: integrity sha512-/DyMEOrDgLKKIG0fmvtz+4dUX/3Ghozwgm6iPp8KRhvn+eQf9+Q7GWxVNMk3+uCPWfdXYC4ExGBckIXdFEfH1w== webpack@^5.97.1: - version "5.99.7" - resolved "https://registry.yarnpkg.com/webpack/-/webpack-5.99.7.tgz#60201c1ca66da046b07d006c2f6e0cc5e8a7bdba" - integrity sha512-CNqKBRMQjwcmKR0idID5va1qlhrqVUKpovi+Ec79ksW8ux7iS1+A6VqzfZXgVYCFRKl7XL5ap3ZoMpwBJxcg0w== + version "5.99.8" + resolved "https://registry.yarnpkg.com/webpack/-/webpack-5.99.8.tgz#dd31a020b7c092d30c4c6d9a4edb95809e7f5946" + integrity sha512-lQ3CPiSTpfOnrEGeXDwoq5hIGzSjmwD72GdfVzF7CQAI7t47rJG9eDWvcEkEn3CUQymAElVvDg3YNTlCYj+qUQ== dependencies: "@types/eslint-scope" "^3.7.7" "@types/estree" "^1.0.6" @@ -4615,9 +4615,9 @@ write-file-atomic@^4.0.2: signal-exit "^3.0.7" ws@^8.11.0: - version "8.18.1" - resolved "https://registry.yarnpkg.com/ws/-/ws-8.18.1.tgz#ea131d3784e1dfdff91adb0a4a116b127515e3cb" - integrity sha512-RKW2aJZMXeMxVpnZ6bck+RswznaxmzdULiBr6KY7XkTnW8uvt0iT9H5DkHUChXrc+uurzwa0rVI16n/Xzjdz1w== + version "8.18.2" + resolved "https://registry.yarnpkg.com/ws/-/ws-8.18.2.tgz#42738b2be57ced85f46154320aabb51ab003705a" + integrity sha512-DMricUmwGZUVr++AEAe2uiVM7UoO9MAVZMDu05UQOaUII0lp+zOzLLU4Xqh/JvTqklB1T4uELaaPBKyjE1r4fQ== xml-name-validator@^4.0.0: version "4.0.0" From 981f9d336b60c04f6dbbc028ad3f6013c0fad0fa Mon Sep 17 00:00:00 2001 From: Ale Pouroullis Date: Tue, 6 May 2025 15:37:22 +0100 Subject: [PATCH 02/10] re-add integration tests that got booted --- .fernignore | 1 + package-lock.json | 8481 ++++++++++++++++++++++++++ src/sync/sync_client.ts | 0 tests/integration/decorators.test.ts | 502 ++ tests/integration/evals.test.ts | 577 ++ tests/integration/fixtures.ts | 246 + 6 files changed, 9807 insertions(+) create mode 100644 package-lock.json create mode 100644 src/sync/sync_client.ts create mode 100644 tests/integration/decorators.test.ts create mode 100644 tests/integration/evals.test.ts create mode 100644 tests/integration/fixtures.ts diff --git a/.fernignore b/.fernignore index 19625584..f02f9dd2 100644 --- a/.fernignore +++ b/.fernignore @@ -15,6 +15,7 @@ src/context.ts # Modified due to issues with OTEL tests/unit/fetcher/stream-wrappers/webpack.test.ts +tests/integration/ # CI Action diff --git a/package-lock.json b/package-lock.json new file mode 100644 index 00000000..0891312b --- /dev/null +++ b/package-lock.json @@ -0,0 +1,8481 @@ +{ + "name": "humanloop", + "version": "0.8.21", + "lockfileVersion": 3, + "requires": true, + "packages": { + "": { + "name": "humanloop", + "version": "0.8.21", + "dependencies": { + "@opentelemetry/api": "<=1.9.0", + "@opentelemetry/resources": "<=2.0.0", + "@opentelemetry/sdk-trace-node": "<=2.0.0", + "@traceloop/ai-semantic-conventions": ">=0.11.6", + "@traceloop/instrumentation-anthropic": ">=0.11.1", + "@traceloop/instrumentation-cohere": ">=0.11.1", + "@traceloop/instrumentation-openai": ">=0.11.3", + "cli-progress": "^3.12.0", + "form-data": "^4.0.0", + "form-data-encoder": "^4.0.2", + "formdata-node": "^6.0.3", + "lodash": "^4.17.21", + "node-fetch": "^2.7.0", + "qs": "^6.13.1", + "readable-stream": "^4.5.2", + "url-join": "4.0.1" + }, + "devDependencies": { + "@anthropic-ai/sdk": "^0.32.1", + "@trivago/prettier-plugin-sort-imports": "^4.3.0", + "@types/cli-progress": "^3.11.6", + "@types/jest": "^29.5.14", + "@types/lodash": "4.14.74", + "@types/node": "^18.19.70", + "@types/node-fetch": "^2.6.12", + "@types/qs": "^6.9.17", + "@types/readable-stream": "^4.0.18", + "@types/url-join": "4.0.1", + "cohere-ai": "^7.15.0", + "dotenv": "^16.4.6", + "jest": "^29.7.0", + "jest-environment-jsdom": "^29.7.0", + "jsonschema": "^1.4.1", + "openai": "^4.74.0", + "prettier": "^3.4.2", + "ts-jest": "^29.1.1", + "ts-loader": "^9.5.1", + "typescript": "~5.7.2", + "webpack": "^5.97.1" + } + }, + "node_modules/@ampproject/remapping": { + "version": "2.3.0", + "resolved": "https://registry.npmjs.org/@ampproject/remapping/-/remapping-2.3.0.tgz", + "integrity": "sha512-30iZtAPgz+LTIYoeivqYo853f02jBYSd5uGnGpkFV0M3xOt9aN73erkgYAmZU43x4VfqcnLxW9Kpg3R5LC4YYw==", + "dev": true, + "license": "Apache-2.0", + "dependencies": { + "@jridgewell/gen-mapping": "^0.3.5", + "@jridgewell/trace-mapping": "^0.3.24" + }, + "engines": { + "node": ">=6.0.0" + } + }, + "node_modules/@anthropic-ai/sdk": { + "version": "0.32.1", + "resolved": "https://registry.npmjs.org/@anthropic-ai/sdk/-/sdk-0.32.1.tgz", + "integrity": "sha512-U9JwTrDvdQ9iWuABVsMLj8nJVwAyQz6QXvgLsVhryhCEPkLsbcP/MXxm+jYcAwLoV8ESbaTTjnD4kuAFa+Hyjg==", + "dev": true, + "license": "MIT", + "dependencies": { + "@types/node": "^18.11.18", + "@types/node-fetch": "^2.6.4", + "abort-controller": "^3.0.0", + "agentkeepalive": "^4.2.1", + "form-data-encoder": "1.7.2", + "formdata-node": "^4.3.2", + "node-fetch": "^2.6.7" + } + }, + "node_modules/@anthropic-ai/sdk/node_modules/form-data-encoder": { + "version": "1.7.2", + "resolved": "https://registry.npmjs.org/form-data-encoder/-/form-data-encoder-1.7.2.tgz", + "integrity": "sha512-qfqtYan3rxrnCk1VYaA4H+Ms9xdpPqvLZa6xmMgFvhO32x7/3J/ExcTd6qpxM0vH2GdMI+poehyBZvqfMTto8A==", + "dev": true, + "license": "MIT" + }, + "node_modules/@anthropic-ai/sdk/node_modules/formdata-node": { + "version": "4.4.1", + "resolved": "https://registry.npmjs.org/formdata-node/-/formdata-node-4.4.1.tgz", + "integrity": "sha512-0iirZp3uVDjVGt9p49aTaqjk84TrglENEDuqfdlZQ1roC9CWlPk6Avf8EEnZNcAqPonwkG35x4n3ww/1THYAeQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "node-domexception": "1.0.0", + "web-streams-polyfill": "4.0.0-beta.3" + }, + "engines": { + "node": ">= 12.20" + } + }, + "node_modules/@aws-crypto/crc32": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/@aws-crypto/crc32/-/crc32-3.0.0.tgz", + "integrity": "sha512-IzSgsrxUcsrejQbPVilIKy16kAT52EwB6zSaI+M3xxIhKh5+aldEyvI+z6erM7TCLB2BJsFrtHjp6/4/sr+3dA==", + "dev": true, + "license": "Apache-2.0", + "dependencies": { + "@aws-crypto/util": "^3.0.0", + "@aws-sdk/types": "^3.222.0", + "tslib": "^1.11.1" + } + }, + "node_modules/@aws-crypto/crc32/node_modules/@aws-crypto/util": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/@aws-crypto/util/-/util-3.0.0.tgz", + "integrity": "sha512-2OJlpeJpCR48CC8r+uKVChzs9Iungj9wkZrl8Z041DWEWvyIHILYKCPNzJghKsivj+S3mLo6BVc7mBNzdxA46w==", + "dev": true, + "license": "Apache-2.0", + "dependencies": { + "@aws-sdk/types": "^3.222.0", + "@aws-sdk/util-utf8-browser": "^3.0.0", + "tslib": "^1.11.1" + } + }, + "node_modules/@aws-crypto/crc32/node_modules/tslib": { + "version": "1.14.1", + "resolved": "https://registry.npmjs.org/tslib/-/tslib-1.14.1.tgz", + "integrity": "sha512-Xni35NKzjgMrwevysHTCArtLDpPvye8zV/0E4EyYn43P7/7qvQwPh9BGkHewbMulVntbigmcT7rdX3BNo9wRJg==", + "dev": true, + "license": "0BSD" + }, + "node_modules/@aws-crypto/sha256-browser": { + "version": "5.2.0", + "resolved": "https://registry.npmjs.org/@aws-crypto/sha256-browser/-/sha256-browser-5.2.0.tgz", + "integrity": "sha512-AXfN/lGotSQwu6HNcEsIASo7kWXZ5HYWvfOmSNKDsEqC4OashTp8alTmaz+F7TC2L083SFv5RdB+qU3Vs1kZqw==", + "dev": true, + "license": "Apache-2.0", + "dependencies": { + "@aws-crypto/sha256-js": "^5.2.0", + "@aws-crypto/supports-web-crypto": "^5.2.0", + "@aws-crypto/util": "^5.2.0", + "@aws-sdk/types": "^3.222.0", + "@aws-sdk/util-locate-window": "^3.0.0", + "@smithy/util-utf8": "^2.0.0", + "tslib": "^2.6.2" + } + }, + "node_modules/@aws-crypto/sha256-browser/node_modules/@smithy/is-array-buffer": { + "version": "2.2.0", + "resolved": "https://registry.npmjs.org/@smithy/is-array-buffer/-/is-array-buffer-2.2.0.tgz", + "integrity": "sha512-GGP3O9QFD24uGeAXYUjwSTXARoqpZykHadOmA8G5vfJPK0/DC67qa//0qvqrJzL1xc8WQWX7/yc7fwudjPHPhA==", + "dev": true, + "license": "Apache-2.0", + "dependencies": { + "tslib": "^2.6.2" + }, + "engines": { + "node": ">=14.0.0" + } + }, + "node_modules/@aws-crypto/sha256-browser/node_modules/@smithy/util-buffer-from": { + "version": "2.2.0", + "resolved": "https://registry.npmjs.org/@smithy/util-buffer-from/-/util-buffer-from-2.2.0.tgz", + "integrity": "sha512-IJdWBbTcMQ6DA0gdNhh/BwrLkDR+ADW5Kr1aZmd4k3DIF6ezMV4R2NIAmT08wQJ3yUK82thHWmC/TnK/wpMMIA==", + "dev": true, + "license": "Apache-2.0", + "dependencies": { + "@smithy/is-array-buffer": "^2.2.0", + "tslib": "^2.6.2" + }, + "engines": { + "node": ">=14.0.0" + } + }, + "node_modules/@aws-crypto/sha256-browser/node_modules/@smithy/util-utf8": { + "version": "2.3.0", + "resolved": "https://registry.npmjs.org/@smithy/util-utf8/-/util-utf8-2.3.0.tgz", + "integrity": "sha512-R8Rdn8Hy72KKcebgLiv8jQcQkXoLMOGGv5uI1/k0l+snqkOzQ1R0ChUBCxWMlBsFMekWjq0wRudIweFs7sKT5A==", + "dev": true, + "license": "Apache-2.0", + "dependencies": { + "@smithy/util-buffer-from": "^2.2.0", + "tslib": "^2.6.2" + }, + "engines": { + "node": ">=14.0.0" + } + }, + "node_modules/@aws-crypto/sha256-js": { + "version": "5.2.0", + "resolved": "https://registry.npmjs.org/@aws-crypto/sha256-js/-/sha256-js-5.2.0.tgz", + "integrity": "sha512-FFQQyu7edu4ufvIZ+OadFpHHOt+eSTBaYaki44c+akjg7qZg9oOQeLlk77F6tSYqjDAFClrHJk9tMf0HdVyOvA==", + "dev": true, + "license": "Apache-2.0", + "dependencies": { + "@aws-crypto/util": "^5.2.0", + "@aws-sdk/types": "^3.222.0", + "tslib": "^2.6.2" + }, + "engines": { + "node": ">=16.0.0" + } + }, + "node_modules/@aws-crypto/supports-web-crypto": { + "version": "5.2.0", + "resolved": "https://registry.npmjs.org/@aws-crypto/supports-web-crypto/-/supports-web-crypto-5.2.0.tgz", + "integrity": "sha512-iAvUotm021kM33eCdNfwIN//F77/IADDSs58i+MDaOqFrVjZo9bAal0NK7HurRuWLLpF1iLX7gbWrjHjeo+YFg==", + "dev": true, + "license": "Apache-2.0", + "dependencies": { + "tslib": "^2.6.2" + } + }, + "node_modules/@aws-crypto/util": { + "version": "5.2.0", + "resolved": "https://registry.npmjs.org/@aws-crypto/util/-/util-5.2.0.tgz", + "integrity": "sha512-4RkU9EsI6ZpBve5fseQlGNUWKMa1RLPQ1dnjnQoe07ldfIzcsGb5hC5W0Dm7u423KWzawlrpbjXBrXCEv9zazQ==", + "dev": true, + "license": "Apache-2.0", + "dependencies": { + "@aws-sdk/types": "^3.222.0", + "@smithy/util-utf8": "^2.0.0", + "tslib": "^2.6.2" + } + }, + "node_modules/@aws-crypto/util/node_modules/@smithy/is-array-buffer": { + "version": "2.2.0", + "resolved": "https://registry.npmjs.org/@smithy/is-array-buffer/-/is-array-buffer-2.2.0.tgz", + "integrity": "sha512-GGP3O9QFD24uGeAXYUjwSTXARoqpZykHadOmA8G5vfJPK0/DC67qa//0qvqrJzL1xc8WQWX7/yc7fwudjPHPhA==", + "dev": true, + "license": "Apache-2.0", + "dependencies": { + "tslib": "^2.6.2" + }, + "engines": { + "node": ">=14.0.0" + } + }, + "node_modules/@aws-crypto/util/node_modules/@smithy/util-buffer-from": { + "version": "2.2.0", + "resolved": "https://registry.npmjs.org/@smithy/util-buffer-from/-/util-buffer-from-2.2.0.tgz", + "integrity": "sha512-IJdWBbTcMQ6DA0gdNhh/BwrLkDR+ADW5Kr1aZmd4k3DIF6ezMV4R2NIAmT08wQJ3yUK82thHWmC/TnK/wpMMIA==", + "dev": true, + "license": "Apache-2.0", + "dependencies": { + "@smithy/is-array-buffer": "^2.2.0", + "tslib": "^2.6.2" + }, + "engines": { + "node": ">=14.0.0" + } + }, + "node_modules/@aws-crypto/util/node_modules/@smithy/util-utf8": { + "version": "2.3.0", + "resolved": "https://registry.npmjs.org/@smithy/util-utf8/-/util-utf8-2.3.0.tgz", + "integrity": "sha512-R8Rdn8Hy72KKcebgLiv8jQcQkXoLMOGGv5uI1/k0l+snqkOzQ1R0ChUBCxWMlBsFMekWjq0wRudIweFs7sKT5A==", + "dev": true, + "license": "Apache-2.0", + "dependencies": { + "@smithy/util-buffer-from": "^2.2.0", + "tslib": "^2.6.2" + }, + "engines": { + "node": ">=14.0.0" + } + }, + "node_modules/@aws-sdk/client-cognito-identity": { + "version": "3.803.0", + "resolved": "https://registry.npmjs.org/@aws-sdk/client-cognito-identity/-/client-cognito-identity-3.803.0.tgz", + "integrity": "sha512-VxcFO2AiHQwdWBcSLaPGEOy8c2ZJtRrzKjOuOwpTh4LhFPgrtfPgL66i46h7kLFGx56awq0WBSSvJQBxIdJ1Tw==", + "dev": true, + "license": "Apache-2.0", + "dependencies": { + "@aws-crypto/sha256-browser": "5.2.0", + "@aws-crypto/sha256-js": "5.2.0", + "@aws-sdk/core": "3.799.0", + "@aws-sdk/credential-provider-node": "3.803.0", + "@aws-sdk/middleware-host-header": "3.775.0", + "@aws-sdk/middleware-logger": "3.775.0", + "@aws-sdk/middleware-recursion-detection": "3.775.0", + "@aws-sdk/middleware-user-agent": "3.799.0", + "@aws-sdk/region-config-resolver": "3.775.0", + "@aws-sdk/types": "3.775.0", + "@aws-sdk/util-endpoints": "3.787.0", + "@aws-sdk/util-user-agent-browser": "3.775.0", + "@aws-sdk/util-user-agent-node": "3.799.0", + "@smithy/config-resolver": "^4.1.0", + "@smithy/core": "^3.3.0", + "@smithy/fetch-http-handler": "^5.0.2", + "@smithy/hash-node": "^4.0.2", + "@smithy/invalid-dependency": "^4.0.2", + "@smithy/middleware-content-length": "^4.0.2", + "@smithy/middleware-endpoint": "^4.1.1", + "@smithy/middleware-retry": "^4.1.2", + "@smithy/middleware-serde": "^4.0.3", + "@smithy/middleware-stack": "^4.0.2", + "@smithy/node-config-provider": "^4.0.2", + "@smithy/node-http-handler": "^4.0.4", + "@smithy/protocol-http": "^5.1.0", + "@smithy/smithy-client": "^4.2.1", + "@smithy/types": "^4.2.0", + "@smithy/url-parser": "^4.0.2", + "@smithy/util-base64": "^4.0.0", + "@smithy/util-body-length-browser": "^4.0.0", + "@smithy/util-body-length-node": "^4.0.0", + "@smithy/util-defaults-mode-browser": "^4.0.9", + "@smithy/util-defaults-mode-node": "^4.0.9", + "@smithy/util-endpoints": "^3.0.2", + "@smithy/util-middleware": "^4.0.2", + "@smithy/util-retry": "^4.0.3", + "@smithy/util-utf8": "^4.0.0", + "tslib": "^2.6.2" + }, + "engines": { + "node": ">=18.0.0" + } + }, + "node_modules/@aws-sdk/client-sagemaker": { + "version": "3.803.0", + "resolved": "https://registry.npmjs.org/@aws-sdk/client-sagemaker/-/client-sagemaker-3.803.0.tgz", + "integrity": "sha512-CC7PTNDzVhCzZufELcB7zFTEwE3pqaLgq/DxNjkuNwD1GTHZ83nhkedzp8pcFUr43lIn6WpDbGGODIZeIKEr3A==", + "dev": true, + "license": "Apache-2.0", + "dependencies": { + "@aws-crypto/sha256-browser": "5.2.0", + "@aws-crypto/sha256-js": "5.2.0", + "@aws-sdk/core": "3.799.0", + "@aws-sdk/credential-provider-node": "3.803.0", + "@aws-sdk/middleware-host-header": "3.775.0", + "@aws-sdk/middleware-logger": "3.775.0", + "@aws-sdk/middleware-recursion-detection": "3.775.0", + "@aws-sdk/middleware-user-agent": "3.799.0", + "@aws-sdk/region-config-resolver": "3.775.0", + "@aws-sdk/types": "3.775.0", + "@aws-sdk/util-endpoints": "3.787.0", + "@aws-sdk/util-user-agent-browser": "3.775.0", + "@aws-sdk/util-user-agent-node": "3.799.0", + "@smithy/config-resolver": "^4.1.0", + "@smithy/core": "^3.3.0", + "@smithy/fetch-http-handler": "^5.0.2", + "@smithy/hash-node": "^4.0.2", + "@smithy/invalid-dependency": "^4.0.2", + "@smithy/middleware-content-length": "^4.0.2", + "@smithy/middleware-endpoint": "^4.1.1", + "@smithy/middleware-retry": "^4.1.2", + "@smithy/middleware-serde": "^4.0.3", + "@smithy/middleware-stack": "^4.0.2", + "@smithy/node-config-provider": "^4.0.2", + "@smithy/node-http-handler": "^4.0.4", + "@smithy/protocol-http": "^5.1.0", + "@smithy/smithy-client": "^4.2.1", + "@smithy/types": "^4.2.0", + "@smithy/url-parser": "^4.0.2", + "@smithy/util-base64": "^4.0.0", + "@smithy/util-body-length-browser": "^4.0.0", + "@smithy/util-body-length-node": "^4.0.0", + "@smithy/util-defaults-mode-browser": "^4.0.9", + "@smithy/util-defaults-mode-node": "^4.0.9", + "@smithy/util-endpoints": "^3.0.2", + "@smithy/util-middleware": "^4.0.2", + "@smithy/util-retry": "^4.0.3", + "@smithy/util-utf8": "^4.0.0", + "@smithy/util-waiter": "^4.0.3", + "@types/uuid": "^9.0.1", + "tslib": "^2.6.2", + "uuid": "^9.0.1" + }, + "engines": { + "node": ">=18.0.0" + } + }, + "node_modules/@aws-sdk/client-sso": { + "version": "3.803.0", + "resolved": "https://registry.npmjs.org/@aws-sdk/client-sso/-/client-sso-3.803.0.tgz", + "integrity": "sha512-TT3BRD1yiL3IGXBKfq560vvEdyOJtJr8bp+R82dD6P0IoS8aFcNtF822BOJy7CqvxksOc3hQKLaPVzE82gE8Ow==", + "dev": true, + "license": "Apache-2.0", + "dependencies": { + "@aws-crypto/sha256-browser": "5.2.0", + "@aws-crypto/sha256-js": "5.2.0", + "@aws-sdk/core": "3.799.0", + "@aws-sdk/middleware-host-header": "3.775.0", + "@aws-sdk/middleware-logger": "3.775.0", + "@aws-sdk/middleware-recursion-detection": "3.775.0", + "@aws-sdk/middleware-user-agent": "3.799.0", + "@aws-sdk/region-config-resolver": "3.775.0", + "@aws-sdk/types": "3.775.0", + "@aws-sdk/util-endpoints": "3.787.0", + "@aws-sdk/util-user-agent-browser": "3.775.0", + "@aws-sdk/util-user-agent-node": "3.799.0", + "@smithy/config-resolver": "^4.1.0", + "@smithy/core": "^3.3.0", + "@smithy/fetch-http-handler": "^5.0.2", + "@smithy/hash-node": "^4.0.2", + "@smithy/invalid-dependency": "^4.0.2", + "@smithy/middleware-content-length": "^4.0.2", + "@smithy/middleware-endpoint": "^4.1.1", + "@smithy/middleware-retry": "^4.1.2", + "@smithy/middleware-serde": "^4.0.3", + "@smithy/middleware-stack": "^4.0.2", + "@smithy/node-config-provider": "^4.0.2", + "@smithy/node-http-handler": "^4.0.4", + "@smithy/protocol-http": "^5.1.0", + "@smithy/smithy-client": "^4.2.1", + "@smithy/types": "^4.2.0", + "@smithy/url-parser": "^4.0.2", + "@smithy/util-base64": "^4.0.0", + "@smithy/util-body-length-browser": "^4.0.0", + "@smithy/util-body-length-node": "^4.0.0", + "@smithy/util-defaults-mode-browser": "^4.0.9", + "@smithy/util-defaults-mode-node": "^4.0.9", + "@smithy/util-endpoints": "^3.0.2", + "@smithy/util-middleware": "^4.0.2", + "@smithy/util-retry": "^4.0.3", + "@smithy/util-utf8": "^4.0.0", + "tslib": "^2.6.2" + }, + "engines": { + "node": ">=18.0.0" + } + }, + "node_modules/@aws-sdk/core": { + "version": "3.799.0", + "resolved": "https://registry.npmjs.org/@aws-sdk/core/-/core-3.799.0.tgz", + "integrity": "sha512-hkKF3Zpc6+H8GI1rlttYVRh9uEE77cqAzLmLpY3iu7sql8cZgPERRBfaFct8p1SaDyrksLNiboD1vKW58mbsYg==", + "dev": true, + "license": "Apache-2.0", + "dependencies": { + "@aws-sdk/types": "3.775.0", + "@smithy/core": "^3.3.0", + "@smithy/node-config-provider": "^4.0.2", + "@smithy/property-provider": "^4.0.2", + "@smithy/protocol-http": "^5.1.0", + "@smithy/signature-v4": "^5.1.0", + "@smithy/smithy-client": "^4.2.1", + "@smithy/types": "^4.2.0", + "@smithy/util-middleware": "^4.0.2", + "fast-xml-parser": "4.4.1", + "tslib": "^2.6.2" + }, + "engines": { + "node": ">=18.0.0" + } + }, + "node_modules/@aws-sdk/credential-provider-cognito-identity": { + "version": "3.803.0", + "resolved": "https://registry.npmjs.org/@aws-sdk/credential-provider-cognito-identity/-/credential-provider-cognito-identity-3.803.0.tgz", + "integrity": "sha512-1lJ3DPu4IBChPG7Fded+6tMGZiaILzg4q00QQzab1SM90DLo95RPOoe9gYQ1B5aDHuzZafil/HQYVdl4gARe7g==", + "dev": true, + "license": "Apache-2.0", + "dependencies": { + "@aws-sdk/client-cognito-identity": "3.803.0", + "@aws-sdk/types": "3.775.0", + "@smithy/property-provider": "^4.0.2", + "@smithy/types": "^4.2.0", + "tslib": "^2.6.2" + }, + "engines": { + "node": ">=18.0.0" + } + }, + "node_modules/@aws-sdk/credential-provider-env": { + "version": "3.799.0", + "resolved": "https://registry.npmjs.org/@aws-sdk/credential-provider-env/-/credential-provider-env-3.799.0.tgz", + "integrity": "sha512-vT/SSWtbUIOW/U21qgEySmmO44SFWIA7WeQPX1OrI8WJ5n7OEI23JWLHjLvHTkYmuZK6z1rPcv7HzRgmuGRibA==", + "dev": true, + "license": "Apache-2.0", + "dependencies": { + "@aws-sdk/core": "3.799.0", + "@aws-sdk/types": "3.775.0", + "@smithy/property-provider": "^4.0.2", + "@smithy/types": "^4.2.0", + "tslib": "^2.6.2" + }, + "engines": { + "node": ">=18.0.0" + } + }, + "node_modules/@aws-sdk/credential-provider-http": { + "version": "3.799.0", + "resolved": "https://registry.npmjs.org/@aws-sdk/credential-provider-http/-/credential-provider-http-3.799.0.tgz", + "integrity": "sha512-2CjBpOWmhaPAExOgHnIB5nOkS5ef+mfRlJ1JC4nsnjAx0nrK4tk0XRE0LYz11P3+ue+a86cU8WTmBo+qjnGxPQ==", + "dev": true, + "license": "Apache-2.0", + "dependencies": { + "@aws-sdk/core": "3.799.0", + "@aws-sdk/types": "3.775.0", + "@smithy/fetch-http-handler": "^5.0.2", + "@smithy/node-http-handler": "^4.0.4", + "@smithy/property-provider": "^4.0.2", + "@smithy/protocol-http": "^5.1.0", + "@smithy/smithy-client": "^4.2.1", + "@smithy/types": "^4.2.0", + "@smithy/util-stream": "^4.2.0", + "tslib": "^2.6.2" + }, + "engines": { + "node": ">=18.0.0" + } + }, + "node_modules/@aws-sdk/credential-provider-ini": { + "version": "3.803.0", + "resolved": "https://registry.npmjs.org/@aws-sdk/credential-provider-ini/-/credential-provider-ini-3.803.0.tgz", + "integrity": "sha512-XtbFftJex18GobpRWJxg5V7stVwvmV2gdBYW+zRM0YW6NZAR4NP/4vcc9ktM3++BWW5OF4Kvl7Nu7N4mAzRHmw==", + "dev": true, + "license": "Apache-2.0", + "dependencies": { + "@aws-sdk/core": "3.799.0", + "@aws-sdk/credential-provider-env": "3.799.0", + "@aws-sdk/credential-provider-http": "3.799.0", + "@aws-sdk/credential-provider-process": "3.799.0", + "@aws-sdk/credential-provider-sso": "3.803.0", + "@aws-sdk/credential-provider-web-identity": "3.803.0", + "@aws-sdk/nested-clients": "3.803.0", + "@aws-sdk/types": "3.775.0", + "@smithy/credential-provider-imds": "^4.0.2", + "@smithy/property-provider": "^4.0.2", + "@smithy/shared-ini-file-loader": "^4.0.2", + "@smithy/types": "^4.2.0", + "tslib": "^2.6.2" + }, + "engines": { + "node": ">=18.0.0" + } + }, + "node_modules/@aws-sdk/credential-provider-node": { + "version": "3.803.0", + "resolved": "https://registry.npmjs.org/@aws-sdk/credential-provider-node/-/credential-provider-node-3.803.0.tgz", + "integrity": "sha512-lPdRYbjxwmv7gRqbaEe1Y1Yl5fD4c43AuK3P31eKjf1j41hZEQ0dg9a9KLk7i6ehEoVsxewnJrvbC2pVoYrCmQ==", + "dev": true, + "license": "Apache-2.0", + "dependencies": { + "@aws-sdk/credential-provider-env": "3.799.0", + "@aws-sdk/credential-provider-http": "3.799.0", + "@aws-sdk/credential-provider-ini": "3.803.0", + "@aws-sdk/credential-provider-process": "3.799.0", + "@aws-sdk/credential-provider-sso": "3.803.0", + "@aws-sdk/credential-provider-web-identity": "3.803.0", + "@aws-sdk/types": "3.775.0", + "@smithy/credential-provider-imds": "^4.0.2", + "@smithy/property-provider": "^4.0.2", + "@smithy/shared-ini-file-loader": "^4.0.2", + "@smithy/types": "^4.2.0", + "tslib": "^2.6.2" + }, + "engines": { + "node": ">=18.0.0" + } + }, + "node_modules/@aws-sdk/credential-provider-process": { + "version": "3.799.0", + "resolved": "https://registry.npmjs.org/@aws-sdk/credential-provider-process/-/credential-provider-process-3.799.0.tgz", + "integrity": "sha512-g8jmNs2k98WNHMYcea1YKA+7ao2Ma4w0P42Dz4YpcI155pQHxHx25RwbOG+rsAKuo3bKwkW53HVE/ZTKhcWFgw==", + "dev": true, + "license": "Apache-2.0", + "dependencies": { + "@aws-sdk/core": "3.799.0", + "@aws-sdk/types": "3.775.0", + "@smithy/property-provider": "^4.0.2", + "@smithy/shared-ini-file-loader": "^4.0.2", + "@smithy/types": "^4.2.0", + "tslib": "^2.6.2" + }, + "engines": { + "node": ">=18.0.0" + } + }, + "node_modules/@aws-sdk/credential-provider-sso": { + "version": "3.803.0", + "resolved": "https://registry.npmjs.org/@aws-sdk/credential-provider-sso/-/credential-provider-sso-3.803.0.tgz", + "integrity": "sha512-HEAcxSHrHxVekGnZqjFrkqdYAf4jFiZIMhuh0jqiqY6A4udEyXy1V623HVcTz/XXj6UBRnyD+zmOmlbzBvkfQg==", + "dev": true, + "license": "Apache-2.0", + "dependencies": { + "@aws-sdk/client-sso": "3.803.0", + "@aws-sdk/core": "3.799.0", + "@aws-sdk/token-providers": "3.803.0", + "@aws-sdk/types": "3.775.0", + "@smithy/property-provider": "^4.0.2", + "@smithy/shared-ini-file-loader": "^4.0.2", + "@smithy/types": "^4.2.0", + "tslib": "^2.6.2" + }, + "engines": { + "node": ">=18.0.0" + } + }, + "node_modules/@aws-sdk/credential-provider-web-identity": { + "version": "3.803.0", + "resolved": "https://registry.npmjs.org/@aws-sdk/credential-provider-web-identity/-/credential-provider-web-identity-3.803.0.tgz", + "integrity": "sha512-oChnEpwI25OW4GPvhI1VnXM3IQEkDhESGFZd5JHzJDHyvSF2NU58V86jkJyaa4H4X25IbGaThuulNI5xCOngjw==", + "dev": true, + "license": "Apache-2.0", + "dependencies": { + "@aws-sdk/core": "3.799.0", + "@aws-sdk/nested-clients": "3.803.0", + "@aws-sdk/types": "3.775.0", + "@smithy/property-provider": "^4.0.2", + "@smithy/types": "^4.2.0", + "tslib": "^2.6.2" + }, + "engines": { + "node": ">=18.0.0" + } + }, + "node_modules/@aws-sdk/credential-providers": { + "version": "3.803.0", + "resolved": "https://registry.npmjs.org/@aws-sdk/credential-providers/-/credential-providers-3.803.0.tgz", + "integrity": "sha512-yuN2ZNVgeAKlLWAAwU7SIF0lkgSQEBoehl49x0FEUuk6snRcuO13/zYVrmaCvplx71ET6quPGJsknlaiUWtdwA==", + "dev": true, + "license": "Apache-2.0", + "dependencies": { + "@aws-sdk/client-cognito-identity": "3.803.0", + "@aws-sdk/core": "3.799.0", + "@aws-sdk/credential-provider-cognito-identity": "3.803.0", + "@aws-sdk/credential-provider-env": "3.799.0", + "@aws-sdk/credential-provider-http": "3.799.0", + "@aws-sdk/credential-provider-ini": "3.803.0", + "@aws-sdk/credential-provider-node": "3.803.0", + "@aws-sdk/credential-provider-process": "3.799.0", + "@aws-sdk/credential-provider-sso": "3.803.0", + "@aws-sdk/credential-provider-web-identity": "3.803.0", + "@aws-sdk/nested-clients": "3.803.0", + "@aws-sdk/types": "3.775.0", + "@smithy/config-resolver": "^4.1.0", + "@smithy/core": "^3.3.0", + "@smithy/credential-provider-imds": "^4.0.2", + "@smithy/node-config-provider": "^4.0.2", + "@smithy/property-provider": "^4.0.2", + "@smithy/types": "^4.2.0", + "tslib": "^2.6.2" + }, + "engines": { + "node": ">=18.0.0" + } + }, + "node_modules/@aws-sdk/middleware-host-header": { + "version": "3.775.0", + "resolved": "https://registry.npmjs.org/@aws-sdk/middleware-host-header/-/middleware-host-header-3.775.0.tgz", + "integrity": "sha512-tkSegM0Z6WMXpLB8oPys/d+umYIocvO298mGvcMCncpRl77L9XkvSLJIFzaHes+o7djAgIduYw8wKIMStFss2w==", + "dev": true, + "license": "Apache-2.0", + "dependencies": { + "@aws-sdk/types": "3.775.0", + "@smithy/protocol-http": "^5.1.0", + "@smithy/types": "^4.2.0", + "tslib": "^2.6.2" + }, + "engines": { + "node": ">=18.0.0" + } + }, + "node_modules/@aws-sdk/middleware-logger": { + "version": "3.775.0", + "resolved": "https://registry.npmjs.org/@aws-sdk/middleware-logger/-/middleware-logger-3.775.0.tgz", + "integrity": "sha512-FaxO1xom4MAoUJsldmR92nT1G6uZxTdNYOFYtdHfd6N2wcNaTuxgjIvqzg5y7QIH9kn58XX/dzf1iTjgqUStZw==", + "dev": true, + "license": "Apache-2.0", + "dependencies": { + "@aws-sdk/types": "3.775.0", + "@smithy/types": "^4.2.0", + "tslib": "^2.6.2" + }, + "engines": { + "node": ">=18.0.0" + } + }, + "node_modules/@aws-sdk/middleware-recursion-detection": { + "version": "3.775.0", + "resolved": "https://registry.npmjs.org/@aws-sdk/middleware-recursion-detection/-/middleware-recursion-detection-3.775.0.tgz", + "integrity": "sha512-GLCzC8D0A0YDG5u3F5U03Vb9j5tcOEFhr8oc6PDk0k0vm5VwtZOE6LvK7hcCSoAB4HXyOUM0sQuXrbaAh9OwXA==", + "dev": true, + "license": "Apache-2.0", + "dependencies": { + "@aws-sdk/types": "3.775.0", + "@smithy/protocol-http": "^5.1.0", + "@smithy/types": "^4.2.0", + "tslib": "^2.6.2" + }, + "engines": { + "node": ">=18.0.0" + } + }, + "node_modules/@aws-sdk/middleware-user-agent": { + "version": "3.799.0", + "resolved": "https://registry.npmjs.org/@aws-sdk/middleware-user-agent/-/middleware-user-agent-3.799.0.tgz", + "integrity": "sha512-TropQZanbOTxa+p+Nl4fWkzlRhgFwDfW+Wb6TR3jZN7IXHNlPpgGFpdrgvBExhW/RBhqr+94OsR8Ou58lp3hhA==", + "dev": true, + "license": "Apache-2.0", + "dependencies": { + "@aws-sdk/core": "3.799.0", + "@aws-sdk/types": "3.775.0", + "@aws-sdk/util-endpoints": "3.787.0", + "@smithy/core": "^3.3.0", + "@smithy/protocol-http": "^5.1.0", + "@smithy/types": "^4.2.0", + "tslib": "^2.6.2" + }, + "engines": { + "node": ">=18.0.0" + } + }, + "node_modules/@aws-sdk/nested-clients": { + "version": "3.803.0", + "resolved": "https://registry.npmjs.org/@aws-sdk/nested-clients/-/nested-clients-3.803.0.tgz", + "integrity": "sha512-wiWiYaFQxK2u37G9IOXuWkHelEbU8ulLxdHpoPf0TSu/1boqLW7fcofuZATAvFcvigQx3oebwO8G4c/mmixTTw==", + "dev": true, + "license": "Apache-2.0", + "dependencies": { + "@aws-crypto/sha256-browser": "5.2.0", + "@aws-crypto/sha256-js": "5.2.0", + "@aws-sdk/core": "3.799.0", + "@aws-sdk/middleware-host-header": "3.775.0", + "@aws-sdk/middleware-logger": "3.775.0", + "@aws-sdk/middleware-recursion-detection": "3.775.0", + "@aws-sdk/middleware-user-agent": "3.799.0", + "@aws-sdk/region-config-resolver": "3.775.0", + "@aws-sdk/types": "3.775.0", + "@aws-sdk/util-endpoints": "3.787.0", + "@aws-sdk/util-user-agent-browser": "3.775.0", + "@aws-sdk/util-user-agent-node": "3.799.0", + "@smithy/config-resolver": "^4.1.0", + "@smithy/core": "^3.3.0", + "@smithy/fetch-http-handler": "^5.0.2", + "@smithy/hash-node": "^4.0.2", + "@smithy/invalid-dependency": "^4.0.2", + "@smithy/middleware-content-length": "^4.0.2", + "@smithy/middleware-endpoint": "^4.1.1", + "@smithy/middleware-retry": "^4.1.2", + "@smithy/middleware-serde": "^4.0.3", + "@smithy/middleware-stack": "^4.0.2", + "@smithy/node-config-provider": "^4.0.2", + "@smithy/node-http-handler": "^4.0.4", + "@smithy/protocol-http": "^5.1.0", + "@smithy/smithy-client": "^4.2.1", + "@smithy/types": "^4.2.0", + "@smithy/url-parser": "^4.0.2", + "@smithy/util-base64": "^4.0.0", + "@smithy/util-body-length-browser": "^4.0.0", + "@smithy/util-body-length-node": "^4.0.0", + "@smithy/util-defaults-mode-browser": "^4.0.9", + "@smithy/util-defaults-mode-node": "^4.0.9", + "@smithy/util-endpoints": "^3.0.2", + "@smithy/util-middleware": "^4.0.2", + "@smithy/util-retry": "^4.0.3", + "@smithy/util-utf8": "^4.0.0", + "tslib": "^2.6.2" + }, + "engines": { + "node": ">=18.0.0" + } + }, + "node_modules/@aws-sdk/protocol-http": { + "version": "3.374.0", + "resolved": "https://registry.npmjs.org/@aws-sdk/protocol-http/-/protocol-http-3.374.0.tgz", + "integrity": "sha512-9WpRUbINdGroV3HiZZIBoJvL2ndoWk39OfwxWs2otxByppJZNN14bg/lvCx5e8ggHUti7IBk5rb0nqQZ4m05pg==", + "deprecated": "This package has moved to @smithy/protocol-http", + "dev": true, + "license": "Apache-2.0", + "dependencies": { + "@smithy/protocol-http": "^1.1.0", + "tslib": "^2.5.0" + }, + "engines": { + "node": ">=14.0.0" + } + }, + "node_modules/@aws-sdk/protocol-http/node_modules/@smithy/protocol-http": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/@smithy/protocol-http/-/protocol-http-1.2.0.tgz", + "integrity": "sha512-GfGfruksi3nXdFok5RhgtOnWe5f6BndzYfmEXISD+5gAGdayFGpjWu5pIqIweTudMtse20bGbc+7MFZXT1Tb8Q==", + "dev": true, + "license": "Apache-2.0", + "dependencies": { + "@smithy/types": "^1.2.0", + "tslib": "^2.5.0" + }, + "engines": { + "node": ">=14.0.0" + } + }, + "node_modules/@aws-sdk/protocol-http/node_modules/@smithy/types": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/@smithy/types/-/types-1.2.0.tgz", + "integrity": "sha512-z1r00TvBqF3dh4aHhya7nz1HhvCg4TRmw51fjMrh5do3h+ngSstt/yKlNbHeb9QxJmFbmN8KEVSWgb1bRvfEoA==", + "dev": true, + "license": "Apache-2.0", + "dependencies": { + "tslib": "^2.5.0" + }, + "engines": { + "node": ">=14.0.0" + } + }, + "node_modules/@aws-sdk/region-config-resolver": { + "version": "3.775.0", + "resolved": "https://registry.npmjs.org/@aws-sdk/region-config-resolver/-/region-config-resolver-3.775.0.tgz", + "integrity": "sha512-40iH3LJjrQS3LKUJAl7Wj0bln7RFPEvUYKFxtP8a+oKFDO0F65F52xZxIJbPn6sHkxWDAnZlGgdjZXM3p2g5wQ==", + "dev": true, + "license": "Apache-2.0", + "dependencies": { + "@aws-sdk/types": "3.775.0", + "@smithy/node-config-provider": "^4.0.2", + "@smithy/types": "^4.2.0", + "@smithy/util-config-provider": "^4.0.0", + "@smithy/util-middleware": "^4.0.2", + "tslib": "^2.6.2" + }, + "engines": { + "node": ">=18.0.0" + } + }, + "node_modules/@aws-sdk/signature-v4": { + "version": "3.374.0", + "resolved": "https://registry.npmjs.org/@aws-sdk/signature-v4/-/signature-v4-3.374.0.tgz", + "integrity": "sha512-2xLJvSdzcZZAg0lsDLUAuSQuihzK0dcxIK7WmfuJeF7DGKJFmp9czQmz5f3qiDz6IDQzvgK1M9vtJSVCslJbyQ==", + "deprecated": "This package has moved to @smithy/signature-v4", + "dev": true, + "license": "Apache-2.0", + "dependencies": { + "@smithy/signature-v4": "^1.0.1", + "tslib": "^2.5.0" + }, + "engines": { + "node": ">=14.0.0" + } + }, + "node_modules/@aws-sdk/signature-v4/node_modules/@smithy/is-array-buffer": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/@smithy/is-array-buffer/-/is-array-buffer-1.1.0.tgz", + "integrity": "sha512-twpQ/n+3OWZJ7Z+xu43MJErmhB/WO/mMTnqR6PwWQShvSJ/emx5d1N59LQZk6ZpTAeuRWrc+eHhkzTp9NFjNRQ==", + "dev": true, + "license": "Apache-2.0", + "dependencies": { + "tslib": "^2.5.0" + }, + "engines": { + "node": ">=14.0.0" + } + }, + "node_modules/@aws-sdk/signature-v4/node_modules/@smithy/signature-v4": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/@smithy/signature-v4/-/signature-v4-1.1.0.tgz", + "integrity": "sha512-fDo3m7YqXBs7neciOePPd/X9LPm5QLlDMdIC4m1H6dgNLnXfLMFNIxEfPyohGA8VW9Wn4X8lygnPSGxDZSmp0Q==", + "dev": true, + "license": "Apache-2.0", + "dependencies": { + "@smithy/eventstream-codec": "^1.1.0", + "@smithy/is-array-buffer": "^1.1.0", + "@smithy/types": "^1.2.0", + "@smithy/util-hex-encoding": "^1.1.0", + "@smithy/util-middleware": "^1.1.0", + "@smithy/util-uri-escape": "^1.1.0", + "@smithy/util-utf8": "^1.1.0", + "tslib": "^2.5.0" + }, + "engines": { + "node": ">=14.0.0" + } + }, + "node_modules/@aws-sdk/signature-v4/node_modules/@smithy/types": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/@smithy/types/-/types-1.2.0.tgz", + "integrity": "sha512-z1r00TvBqF3dh4aHhya7nz1HhvCg4TRmw51fjMrh5do3h+ngSstt/yKlNbHeb9QxJmFbmN8KEVSWgb1bRvfEoA==", + "dev": true, + "license": "Apache-2.0", + "dependencies": { + "tslib": "^2.5.0" + }, + "engines": { + "node": ">=14.0.0" + } + }, + "node_modules/@aws-sdk/signature-v4/node_modules/@smithy/util-buffer-from": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/@smithy/util-buffer-from/-/util-buffer-from-1.1.0.tgz", + "integrity": "sha512-9m6NXE0ww+ra5HKHCHig20T+FAwxBAm7DIdwc/767uGWbRcY720ybgPacQNB96JMOI7xVr/CDa3oMzKmW4a+kw==", + "dev": true, + "license": "Apache-2.0", + "dependencies": { + "@smithy/is-array-buffer": "^1.1.0", + "tslib": "^2.5.0" + }, + "engines": { + "node": ">=14.0.0" + } + }, + "node_modules/@aws-sdk/signature-v4/node_modules/@smithy/util-hex-encoding": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/@smithy/util-hex-encoding/-/util-hex-encoding-1.1.0.tgz", + "integrity": "sha512-7UtIE9eH0u41zpB60Jzr0oNCQ3hMJUabMcKRUVjmyHTXiWDE4vjSqN6qlih7rCNeKGbioS7f/y2Jgym4QZcKFg==", + "dev": true, + "license": "Apache-2.0", + "dependencies": { + "tslib": "^2.5.0" + }, + "engines": { + "node": ">=14.0.0" + } + }, + "node_modules/@aws-sdk/signature-v4/node_modules/@smithy/util-middleware": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/@smithy/util-middleware/-/util-middleware-1.1.0.tgz", + "integrity": "sha512-6hhckcBqVgjWAqLy2vqlPZ3rfxLDhFWEmM7oLh2POGvsi7j0tHkbN7w4DFhuBExVJAbJ/qqxqZdRY6Fu7/OezQ==", + "dev": true, + "license": "Apache-2.0", + "dependencies": { + "tslib": "^2.5.0" + }, + "engines": { + "node": ">=14.0.0" + } + }, + "node_modules/@aws-sdk/signature-v4/node_modules/@smithy/util-uri-escape": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/@smithy/util-uri-escape/-/util-uri-escape-1.1.0.tgz", + "integrity": "sha512-/jL/V1xdVRt5XppwiaEU8Etp5WHZj609n0xMTuehmCqdoOFbId1M+aEeDWZsQ+8JbEB/BJ6ynY2SlYmOaKtt8w==", + "dev": true, + "license": "Apache-2.0", + "dependencies": { + "tslib": "^2.5.0" + }, + "engines": { + "node": ">=14.0.0" + } + }, + "node_modules/@aws-sdk/signature-v4/node_modules/@smithy/util-utf8": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/@smithy/util-utf8/-/util-utf8-1.1.0.tgz", + "integrity": "sha512-p/MYV+JmqmPyjdgyN2UxAeYDj9cBqCjp0C/NsTWnnjoZUVqoeZ6IrW915L9CAKWVECgv9lVQGc4u/yz26/bI1A==", + "dev": true, + "license": "Apache-2.0", + "dependencies": { + "@smithy/util-buffer-from": "^1.1.0", + "tslib": "^2.5.0" + }, + "engines": { + "node": ">=14.0.0" + } + }, + "node_modules/@aws-sdk/token-providers": { + "version": "3.803.0", + "resolved": "https://registry.npmjs.org/@aws-sdk/token-providers/-/token-providers-3.803.0.tgz", + "integrity": "sha512-lDbMgVjWWEPT7a6lLaAEPPljwOeLTjPX2sJ7MoDICpQotg4Yd8cQfX3nqScSyLAGSc7Rq/21UPnPoij/E0K3lg==", + "dev": true, + "license": "Apache-2.0", + "dependencies": { + "@aws-sdk/nested-clients": "3.803.0", + "@aws-sdk/types": "3.775.0", + "@smithy/property-provider": "^4.0.2", + "@smithy/shared-ini-file-loader": "^4.0.2", + "@smithy/types": "^4.2.0", + "tslib": "^2.6.2" + }, + "engines": { + "node": ">=18.0.0" + } + }, + "node_modules/@aws-sdk/types": { + "version": "3.775.0", + "resolved": "https://registry.npmjs.org/@aws-sdk/types/-/types-3.775.0.tgz", + "integrity": "sha512-ZoGKwa4C9fC9Av6bdfqcW6Ix5ot05F/S4VxWR2nHuMv7hzfmAjTOcUiWT7UR4hM/U0whf84VhDtXN/DWAk52KA==", + "dev": true, + "license": "Apache-2.0", + "dependencies": { + "@smithy/types": "^4.2.0", + "tslib": "^2.6.2" + }, + "engines": { + "node": ">=18.0.0" + } + }, + "node_modules/@aws-sdk/util-endpoints": { + "version": "3.787.0", + "resolved": "https://registry.npmjs.org/@aws-sdk/util-endpoints/-/util-endpoints-3.787.0.tgz", + "integrity": "sha512-fd3zkiOkwnbdbN0Xp9TsP5SWrmv0SpT70YEdbb8wAj2DWQwiCmFszaSs+YCvhoCdmlR3Wl9Spu0pGpSAGKeYvQ==", + "dev": true, + "license": "Apache-2.0", + "dependencies": { + "@aws-sdk/types": "3.775.0", + "@smithy/types": "^4.2.0", + "@smithy/util-endpoints": "^3.0.2", + "tslib": "^2.6.2" + }, + "engines": { + "node": ">=18.0.0" + } + }, + "node_modules/@aws-sdk/util-locate-window": { + "version": "3.723.0", + "resolved": "https://registry.npmjs.org/@aws-sdk/util-locate-window/-/util-locate-window-3.723.0.tgz", + "integrity": "sha512-Yf2CS10BqK688DRsrKI/EO6B8ff5J86NXe4C+VCysK7UOgN0l1zOTeTukZ3H8Q9tYYX3oaF1961o8vRkFm7Nmw==", + "dev": true, + "license": "Apache-2.0", + "dependencies": { + "tslib": "^2.6.2" + }, + "engines": { + "node": ">=18.0.0" + } + }, + "node_modules/@aws-sdk/util-user-agent-browser": { + "version": "3.775.0", + "resolved": "https://registry.npmjs.org/@aws-sdk/util-user-agent-browser/-/util-user-agent-browser-3.775.0.tgz", + "integrity": "sha512-txw2wkiJmZKVdDbscK7VBK+u+TJnRtlUjRTLei+elZg2ADhpQxfVAQl436FUeIv6AhB/oRHW6/K/EAGXUSWi0A==", + "dev": true, + "license": "Apache-2.0", + "dependencies": { + "@aws-sdk/types": "3.775.0", + "@smithy/types": "^4.2.0", + "bowser": "^2.11.0", + "tslib": "^2.6.2" + } + }, + "node_modules/@aws-sdk/util-user-agent-node": { + "version": "3.799.0", + "resolved": "https://registry.npmjs.org/@aws-sdk/util-user-agent-node/-/util-user-agent-node-3.799.0.tgz", + "integrity": "sha512-iXBk38RbIWPF5Nq9O4AnktORAzXovSVqWYClvS1qbE7ILsnTLJbagU9HlU25O2iV5COVh1qZkwuP5NHQ2yTEyw==", + "dev": true, + "license": "Apache-2.0", + "dependencies": { + "@aws-sdk/middleware-user-agent": "3.799.0", + "@aws-sdk/types": "3.775.0", + "@smithy/node-config-provider": "^4.0.2", + "@smithy/types": "^4.2.0", + "tslib": "^2.6.2" + }, + "engines": { + "node": ">=18.0.0" + }, + "peerDependencies": { + "aws-crt": ">=1.0.0" + }, + "peerDependenciesMeta": { + "aws-crt": { + "optional": true + } + } + }, + "node_modules/@aws-sdk/util-utf8-browser": { + "version": "3.259.0", + "resolved": "https://registry.npmjs.org/@aws-sdk/util-utf8-browser/-/util-utf8-browser-3.259.0.tgz", + "integrity": "sha512-UvFa/vR+e19XookZF8RzFZBrw2EUkQWxiBW0yYQAhvk3C+QVGl0H3ouca8LDBlBfQKXwmW3huo/59H8rwb1wJw==", + "dev": true, + "license": "Apache-2.0", + "dependencies": { + "tslib": "^2.3.1" + } + }, + "node_modules/@babel/code-frame": { + "version": "7.27.1", + "resolved": "https://registry.npmjs.org/@babel/code-frame/-/code-frame-7.27.1.tgz", + "integrity": "sha512-cjQ7ZlQ0Mv3b47hABuTevyTuYN4i+loJKGeV9flcCgIK37cCXRh+L1bd3iBHlynerhQ7BhCkn2BPbQUL+rGqFg==", + "dev": true, + "license": "MIT", + "dependencies": { + "@babel/helper-validator-identifier": "^7.27.1", + "js-tokens": "^4.0.0", + "picocolors": "^1.1.1" + }, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/compat-data": { + "version": "7.27.1", + "resolved": "https://registry.npmjs.org/@babel/compat-data/-/compat-data-7.27.1.tgz", + "integrity": "sha512-Q+E+rd/yBzNQhXkG+zQnF58e4zoZfBedaxwzPmicKsiK3nt8iJYrSrDbjwFFDGC4f+rPafqRaPH6TsDoSvMf7A==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/core": { + "version": "7.27.1", + "resolved": "https://registry.npmjs.org/@babel/core/-/core-7.27.1.tgz", + "integrity": "sha512-IaaGWsQqfsQWVLqMn9OB92MNN7zukfVA4s7KKAI0KfrrDsZ0yhi5uV4baBuLuN7n3vsZpwP8asPPcVwApxvjBQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "@ampproject/remapping": "^2.2.0", + "@babel/code-frame": "^7.27.1", + "@babel/generator": "^7.27.1", + "@babel/helper-compilation-targets": "^7.27.1", + "@babel/helper-module-transforms": "^7.27.1", + "@babel/helpers": "^7.27.1", + "@babel/parser": "^7.27.1", + "@babel/template": "^7.27.1", + "@babel/traverse": "^7.27.1", + "@babel/types": "^7.27.1", + "convert-source-map": "^2.0.0", + "debug": "^4.1.0", + "gensync": "^1.0.0-beta.2", + "json5": "^2.2.3", + "semver": "^6.3.1" + }, + "engines": { + "node": ">=6.9.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/babel" + } + }, + "node_modules/@babel/core/node_modules/@babel/generator": { + "version": "7.27.1", + "resolved": "https://registry.npmjs.org/@babel/generator/-/generator-7.27.1.tgz", + "integrity": "sha512-UnJfnIpc/+JO0/+KRVQNGU+y5taA5vCbwN8+azkX6beii/ZF+enZJSOKo11ZSzGJjlNfJHfQtmQT8H+9TXPG2w==", + "dev": true, + "license": "MIT", + "dependencies": { + "@babel/parser": "^7.27.1", + "@babel/types": "^7.27.1", + "@jridgewell/gen-mapping": "^0.3.5", + "@jridgewell/trace-mapping": "^0.3.25", + "jsesc": "^3.0.2" + }, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/core/node_modules/@babel/traverse": { + "version": "7.27.1", + "resolved": "https://registry.npmjs.org/@babel/traverse/-/traverse-7.27.1.tgz", + "integrity": "sha512-ZCYtZciz1IWJB4U61UPu4KEaqyfj+r5T1Q5mqPo+IBpcG9kHv30Z0aD8LXPgC1trYa6rK0orRyAhqUgk4MjmEg==", + "dev": true, + "license": "MIT", + "dependencies": { + "@babel/code-frame": "^7.27.1", + "@babel/generator": "^7.27.1", + "@babel/parser": "^7.27.1", + "@babel/template": "^7.27.1", + "@babel/types": "^7.27.1", + "debug": "^4.3.1", + "globals": "^11.1.0" + }, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/core/node_modules/@babel/types": { + "version": "7.27.1", + "resolved": "https://registry.npmjs.org/@babel/types/-/types-7.27.1.tgz", + "integrity": "sha512-+EzkxvLNfiUeKMgy/3luqfsCWFRXLb7U6wNQTk60tovuckwB15B191tJWvpp4HjiQWdJkCxO3Wbvc6jlk3Xb2Q==", + "dev": true, + "license": "MIT", + "dependencies": { + "@babel/helper-string-parser": "^7.27.1", + "@babel/helper-validator-identifier": "^7.27.1" + }, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/core/node_modules/jsesc": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/jsesc/-/jsesc-3.1.0.tgz", + "integrity": "sha512-/sM3dO2FOzXjKQhJuo0Q173wf2KOo8t4I8vHy6lF9poUp7bKT0/NHE8fPX23PwfhnykfqnC2xRxOnVw5XuGIaA==", + "dev": true, + "license": "MIT", + "bin": { + "jsesc": "bin/jsesc" + }, + "engines": { + "node": ">=6" + } + }, + "node_modules/@babel/core/node_modules/semver": { + "version": "6.3.1", + "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.1.tgz", + "integrity": "sha512-BR7VvDCVHO+q2xBEWskxS6DJE1qRnb7DxzUrogb71CWoSficBxYsiAGd+Kl0mmq/MprG9yArRkyrQxTO6XjMzA==", + "dev": true, + "license": "ISC", + "bin": { + "semver": "bin/semver.js" + } + }, + "node_modules/@babel/generator": { + "version": "7.17.7", + "resolved": "https://registry.npmjs.org/@babel/generator/-/generator-7.17.7.tgz", + "integrity": "sha512-oLcVCTeIFadUoArDTwpluncplrYBmTCCZZgXCbgNGvOBBiSDDK3eWO4b/+eOTli5tKv1lg+a5/NAXg+nTcei1w==", + "dev": true, + "license": "MIT", + "dependencies": { + "@babel/types": "^7.17.0", + "jsesc": "^2.5.1", + "source-map": "^0.5.0" + }, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/helper-compilation-targets": { + "version": "7.27.1", + "resolved": "https://registry.npmjs.org/@babel/helper-compilation-targets/-/helper-compilation-targets-7.27.1.tgz", + "integrity": "sha512-2YaDd/Rd9E598B5+WIc8wJPmWETiiJXFYVE60oX8FDohv7rAUU3CQj+A1MgeEmcsk2+dQuEjIe/GDvig0SqL4g==", + "dev": true, + "license": "MIT", + "dependencies": { + "@babel/compat-data": "^7.27.1", + "@babel/helper-validator-option": "^7.27.1", + "browserslist": "^4.24.0", + "lru-cache": "^5.1.1", + "semver": "^6.3.1" + }, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/helper-compilation-targets/node_modules/semver": { + "version": "6.3.1", + "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.1.tgz", + "integrity": "sha512-BR7VvDCVHO+q2xBEWskxS6DJE1qRnb7DxzUrogb71CWoSficBxYsiAGd+Kl0mmq/MprG9yArRkyrQxTO6XjMzA==", + "dev": true, + "license": "ISC", + "bin": { + "semver": "bin/semver.js" + } + }, + "node_modules/@babel/helper-environment-visitor": { + "version": "7.24.7", + "resolved": "https://registry.npmjs.org/@babel/helper-environment-visitor/-/helper-environment-visitor-7.24.7.tgz", + "integrity": "sha512-DoiN84+4Gnd0ncbBOM9AZENV4a5ZiL39HYMyZJGZ/AZEykHYdJw0wW3kdcsh9/Kn+BRXHLkkklZ51ecPKmI1CQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "@babel/types": "^7.24.7" + }, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/helper-environment-visitor/node_modules/@babel/types": { + "version": "7.27.1", + "resolved": "https://registry.npmjs.org/@babel/types/-/types-7.27.1.tgz", + "integrity": "sha512-+EzkxvLNfiUeKMgy/3luqfsCWFRXLb7U6wNQTk60tovuckwB15B191tJWvpp4HjiQWdJkCxO3Wbvc6jlk3Xb2Q==", + "dev": true, + "license": "MIT", + "dependencies": { + "@babel/helper-string-parser": "^7.27.1", + "@babel/helper-validator-identifier": "^7.27.1" + }, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/helper-function-name": { + "version": "7.24.7", + "resolved": "https://registry.npmjs.org/@babel/helper-function-name/-/helper-function-name-7.24.7.tgz", + "integrity": "sha512-FyoJTsj/PEUWu1/TYRiXTIHc8lbw+TDYkZuoE43opPS5TrI7MyONBE1oNvfguEXAD9yhQRrVBnXdXzSLQl9XnA==", + "dev": true, + "license": "MIT", + "dependencies": { + "@babel/template": "^7.24.7", + "@babel/types": "^7.24.7" + }, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/helper-function-name/node_modules/@babel/types": { + "version": "7.27.1", + "resolved": "https://registry.npmjs.org/@babel/types/-/types-7.27.1.tgz", + "integrity": "sha512-+EzkxvLNfiUeKMgy/3luqfsCWFRXLb7U6wNQTk60tovuckwB15B191tJWvpp4HjiQWdJkCxO3Wbvc6jlk3Xb2Q==", + "dev": true, + "license": "MIT", + "dependencies": { + "@babel/helper-string-parser": "^7.27.1", + "@babel/helper-validator-identifier": "^7.27.1" + }, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/helper-hoist-variables": { + "version": "7.24.7", + "resolved": "https://registry.npmjs.org/@babel/helper-hoist-variables/-/helper-hoist-variables-7.24.7.tgz", + "integrity": "sha512-MJJwhkoGy5c4ehfoRyrJ/owKeMl19U54h27YYftT0o2teQ3FJ3nQUf/I3LlJsX4l3qlw7WRXUmiyajvHXoTubQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "@babel/types": "^7.24.7" + }, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/helper-hoist-variables/node_modules/@babel/types": { + "version": "7.27.1", + "resolved": "https://registry.npmjs.org/@babel/types/-/types-7.27.1.tgz", + "integrity": "sha512-+EzkxvLNfiUeKMgy/3luqfsCWFRXLb7U6wNQTk60tovuckwB15B191tJWvpp4HjiQWdJkCxO3Wbvc6jlk3Xb2Q==", + "dev": true, + "license": "MIT", + "dependencies": { + "@babel/helper-string-parser": "^7.27.1", + "@babel/helper-validator-identifier": "^7.27.1" + }, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/helper-module-imports": { + "version": "7.27.1", + "resolved": "https://registry.npmjs.org/@babel/helper-module-imports/-/helper-module-imports-7.27.1.tgz", + "integrity": "sha512-0gSFWUPNXNopqtIPQvlD5WgXYI5GY2kP2cCvoT8kczjbfcfuIljTbcWrulD1CIPIX2gt1wghbDy08yE1p+/r3w==", + "dev": true, + "license": "MIT", + "dependencies": { + "@babel/traverse": "^7.27.1", + "@babel/types": "^7.27.1" + }, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/helper-module-imports/node_modules/@babel/generator": { + "version": "7.27.1", + "resolved": "https://registry.npmjs.org/@babel/generator/-/generator-7.27.1.tgz", + "integrity": "sha512-UnJfnIpc/+JO0/+KRVQNGU+y5taA5vCbwN8+azkX6beii/ZF+enZJSOKo11ZSzGJjlNfJHfQtmQT8H+9TXPG2w==", + "dev": true, + "license": "MIT", + "dependencies": { + "@babel/parser": "^7.27.1", + "@babel/types": "^7.27.1", + "@jridgewell/gen-mapping": "^0.3.5", + "@jridgewell/trace-mapping": "^0.3.25", + "jsesc": "^3.0.2" + }, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/helper-module-imports/node_modules/@babel/traverse": { + "version": "7.27.1", + "resolved": "https://registry.npmjs.org/@babel/traverse/-/traverse-7.27.1.tgz", + "integrity": "sha512-ZCYtZciz1IWJB4U61UPu4KEaqyfj+r5T1Q5mqPo+IBpcG9kHv30Z0aD8LXPgC1trYa6rK0orRyAhqUgk4MjmEg==", + "dev": true, + "license": "MIT", + "dependencies": { + "@babel/code-frame": "^7.27.1", + "@babel/generator": "^7.27.1", + "@babel/parser": "^7.27.1", + "@babel/template": "^7.27.1", + "@babel/types": "^7.27.1", + "debug": "^4.3.1", + "globals": "^11.1.0" + }, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/helper-module-imports/node_modules/@babel/types": { + "version": "7.27.1", + "resolved": "https://registry.npmjs.org/@babel/types/-/types-7.27.1.tgz", + "integrity": "sha512-+EzkxvLNfiUeKMgy/3luqfsCWFRXLb7U6wNQTk60tovuckwB15B191tJWvpp4HjiQWdJkCxO3Wbvc6jlk3Xb2Q==", + "dev": true, + "license": "MIT", + "dependencies": { + "@babel/helper-string-parser": "^7.27.1", + "@babel/helper-validator-identifier": "^7.27.1" + }, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/helper-module-imports/node_modules/jsesc": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/jsesc/-/jsesc-3.1.0.tgz", + "integrity": "sha512-/sM3dO2FOzXjKQhJuo0Q173wf2KOo8t4I8vHy6lF9poUp7bKT0/NHE8fPX23PwfhnykfqnC2xRxOnVw5XuGIaA==", + "dev": true, + "license": "MIT", + "bin": { + "jsesc": "bin/jsesc" + }, + "engines": { + "node": ">=6" + } + }, + "node_modules/@babel/helper-module-transforms": { + "version": "7.27.1", + "resolved": "https://registry.npmjs.org/@babel/helper-module-transforms/-/helper-module-transforms-7.27.1.tgz", + "integrity": "sha512-9yHn519/8KvTU5BjTVEEeIM3w9/2yXNKoD82JifINImhpKkARMJKPP59kLo+BafpdN5zgNeIcS4jsGDmd3l58g==", + "dev": true, + "license": "MIT", + "dependencies": { + "@babel/helper-module-imports": "^7.27.1", + "@babel/helper-validator-identifier": "^7.27.1", + "@babel/traverse": "^7.27.1" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0" + } + }, + "node_modules/@babel/helper-module-transforms/node_modules/@babel/generator": { + "version": "7.27.1", + "resolved": "https://registry.npmjs.org/@babel/generator/-/generator-7.27.1.tgz", + "integrity": "sha512-UnJfnIpc/+JO0/+KRVQNGU+y5taA5vCbwN8+azkX6beii/ZF+enZJSOKo11ZSzGJjlNfJHfQtmQT8H+9TXPG2w==", + "dev": true, + "license": "MIT", + "dependencies": { + "@babel/parser": "^7.27.1", + "@babel/types": "^7.27.1", + "@jridgewell/gen-mapping": "^0.3.5", + "@jridgewell/trace-mapping": "^0.3.25", + "jsesc": "^3.0.2" + }, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/helper-module-transforms/node_modules/@babel/traverse": { + "version": "7.27.1", + "resolved": "https://registry.npmjs.org/@babel/traverse/-/traverse-7.27.1.tgz", + "integrity": "sha512-ZCYtZciz1IWJB4U61UPu4KEaqyfj+r5T1Q5mqPo+IBpcG9kHv30Z0aD8LXPgC1trYa6rK0orRyAhqUgk4MjmEg==", + "dev": true, + "license": "MIT", + "dependencies": { + "@babel/code-frame": "^7.27.1", + "@babel/generator": "^7.27.1", + "@babel/parser": "^7.27.1", + "@babel/template": "^7.27.1", + "@babel/types": "^7.27.1", + "debug": "^4.3.1", + "globals": "^11.1.0" + }, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/helper-module-transforms/node_modules/@babel/types": { + "version": "7.27.1", + "resolved": "https://registry.npmjs.org/@babel/types/-/types-7.27.1.tgz", + "integrity": "sha512-+EzkxvLNfiUeKMgy/3luqfsCWFRXLb7U6wNQTk60tovuckwB15B191tJWvpp4HjiQWdJkCxO3Wbvc6jlk3Xb2Q==", + "dev": true, + "license": "MIT", + "dependencies": { + "@babel/helper-string-parser": "^7.27.1", + "@babel/helper-validator-identifier": "^7.27.1" + }, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/helper-module-transforms/node_modules/jsesc": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/jsesc/-/jsesc-3.1.0.tgz", + "integrity": "sha512-/sM3dO2FOzXjKQhJuo0Q173wf2KOo8t4I8vHy6lF9poUp7bKT0/NHE8fPX23PwfhnykfqnC2xRxOnVw5XuGIaA==", + "dev": true, + "license": "MIT", + "bin": { + "jsesc": "bin/jsesc" + }, + "engines": { + "node": ">=6" + } + }, + "node_modules/@babel/helper-plugin-utils": { + "version": "7.27.1", + "resolved": "https://registry.npmjs.org/@babel/helper-plugin-utils/-/helper-plugin-utils-7.27.1.tgz", + "integrity": "sha512-1gn1Up5YXka3YYAHGKpbideQ5Yjf1tDa9qYcgysz+cNCXukyLl6DjPXhD3VRwSb8c0J9tA4b2+rHEZtc6R0tlw==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/helper-split-export-declaration": { + "version": "7.24.7", + "resolved": "https://registry.npmjs.org/@babel/helper-split-export-declaration/-/helper-split-export-declaration-7.24.7.tgz", + "integrity": "sha512-oy5V7pD+UvfkEATUKvIjvIAH/xCzfsFVw7ygW2SI6NClZzquT+mwdTfgfdbUiceh6iQO0CHtCPsyze/MZ2YbAA==", + "dev": true, + "license": "MIT", + "dependencies": { + "@babel/types": "^7.24.7" + }, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/helper-split-export-declaration/node_modules/@babel/types": { + "version": "7.27.1", + "resolved": "https://registry.npmjs.org/@babel/types/-/types-7.27.1.tgz", + "integrity": "sha512-+EzkxvLNfiUeKMgy/3luqfsCWFRXLb7U6wNQTk60tovuckwB15B191tJWvpp4HjiQWdJkCxO3Wbvc6jlk3Xb2Q==", + "dev": true, + "license": "MIT", + "dependencies": { + "@babel/helper-string-parser": "^7.27.1", + "@babel/helper-validator-identifier": "^7.27.1" + }, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/helper-string-parser": { + "version": "7.27.1", + "resolved": "https://registry.npmjs.org/@babel/helper-string-parser/-/helper-string-parser-7.27.1.tgz", + "integrity": "sha512-qMlSxKbpRlAridDExk92nSobyDdpPijUq2DW6oDnUqd0iOGxmQjyqhMIihI9+zv4LPyZdRje2cavWPbCbWm3eA==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/helper-validator-identifier": { + "version": "7.27.1", + "resolved": "https://registry.npmjs.org/@babel/helper-validator-identifier/-/helper-validator-identifier-7.27.1.tgz", + "integrity": "sha512-D2hP9eA+Sqx1kBZgzxZh0y1trbuU+JoDkiEwqhQ36nodYqJwyEIhPSdMNd7lOm/4io72luTPWH20Yda0xOuUow==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/helper-validator-option": { + "version": "7.27.1", + "resolved": "https://registry.npmjs.org/@babel/helper-validator-option/-/helper-validator-option-7.27.1.tgz", + "integrity": "sha512-YvjJow9FxbhFFKDSuFnVCe2WxXk1zWc22fFePVNEaWJEu8IrZVlda6N0uHwzZrUM1il7NC9Mlp4MaJYbYd9JSg==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/helpers": { + "version": "7.27.1", + "resolved": "https://registry.npmjs.org/@babel/helpers/-/helpers-7.27.1.tgz", + "integrity": "sha512-FCvFTm0sWV8Fxhpp2McP5/W53GPllQ9QeQ7SiqGWjMf/LVG07lFa5+pgK05IRhVwtvafT22KF+ZSnM9I545CvQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "@babel/template": "^7.27.1", + "@babel/types": "^7.27.1" + }, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/helpers/node_modules/@babel/types": { + "version": "7.27.1", + "resolved": "https://registry.npmjs.org/@babel/types/-/types-7.27.1.tgz", + "integrity": "sha512-+EzkxvLNfiUeKMgy/3luqfsCWFRXLb7U6wNQTk60tovuckwB15B191tJWvpp4HjiQWdJkCxO3Wbvc6jlk3Xb2Q==", + "dev": true, + "license": "MIT", + "dependencies": { + "@babel/helper-string-parser": "^7.27.1", + "@babel/helper-validator-identifier": "^7.27.1" + }, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/parser": { + "version": "7.27.1", + "resolved": "https://registry.npmjs.org/@babel/parser/-/parser-7.27.1.tgz", + "integrity": "sha512-I0dZ3ZpCrJ1c04OqlNsQcKiZlsrXf/kkE4FXzID9rIOYICsAbA8mMDzhW/luRNAHdCNt7os/u8wenklZDlUVUQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "@babel/types": "^7.27.1" + }, + "bin": { + "parser": "bin/babel-parser.js" + }, + "engines": { + "node": ">=6.0.0" + } + }, + "node_modules/@babel/parser/node_modules/@babel/types": { + "version": "7.27.1", + "resolved": "https://registry.npmjs.org/@babel/types/-/types-7.27.1.tgz", + "integrity": "sha512-+EzkxvLNfiUeKMgy/3luqfsCWFRXLb7U6wNQTk60tovuckwB15B191tJWvpp4HjiQWdJkCxO3Wbvc6jlk3Xb2Q==", + "dev": true, + "license": "MIT", + "dependencies": { + "@babel/helper-string-parser": "^7.27.1", + "@babel/helper-validator-identifier": "^7.27.1" + }, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/plugin-syntax-async-generators": { + "version": "7.8.4", + "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-async-generators/-/plugin-syntax-async-generators-7.8.4.tgz", + "integrity": "sha512-tycmZxkGfZaxhMRbXlPXuVFpdWlXpir2W4AMhSJgRKzk/eDlIXOhb2LHWoLpDF7TEHylV5zNhykX6KAgHJmTNw==", + "dev": true, + "license": "MIT", + "dependencies": { + "@babel/helper-plugin-utils": "^7.8.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-syntax-bigint": { + "version": "7.8.3", + "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-bigint/-/plugin-syntax-bigint-7.8.3.tgz", + "integrity": "sha512-wnTnFlG+YxQm3vDxpGE57Pj0srRU4sHE/mDkt1qv2YJJSeUAec2ma4WLUnUPeKjyrfntVwe/N6dCXpU+zL3Npg==", + "dev": true, + "license": "MIT", + "dependencies": { + "@babel/helper-plugin-utils": "^7.8.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-syntax-class-properties": { + "version": "7.12.13", + "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-class-properties/-/plugin-syntax-class-properties-7.12.13.tgz", + "integrity": "sha512-fm4idjKla0YahUNgFNLCB0qySdsoPiZP3iQE3rky0mBUtMZ23yDJ9SJdg6dXTSDnulOVqiF3Hgr9nbXvXTQZYA==", + "dev": true, + "license": "MIT", + "dependencies": { + "@babel/helper-plugin-utils": "^7.12.13" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-syntax-class-static-block": { + "version": "7.14.5", + "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-class-static-block/-/plugin-syntax-class-static-block-7.14.5.tgz", + "integrity": "sha512-b+YyPmr6ldyNnM6sqYeMWE+bgJcJpO6yS4QD7ymxgH34GBPNDM/THBh8iunyvKIZztiwLH4CJZ0RxTk9emgpjw==", + "dev": true, + "license": "MIT", + "dependencies": { + "@babel/helper-plugin-utils": "^7.14.5" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-syntax-import-attributes": { + "version": "7.27.1", + "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-import-attributes/-/plugin-syntax-import-attributes-7.27.1.tgz", + "integrity": "sha512-oFT0FrKHgF53f4vOsZGi2Hh3I35PfSmVs4IBFLFj4dnafP+hIWDLg3VyKmUHfLoLHlyxY4C7DGtmHuJgn+IGww==", + "dev": true, + "license": "MIT", + "dependencies": { + "@babel/helper-plugin-utils": "^7.27.1" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-syntax-import-meta": { + "version": "7.10.4", + "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-import-meta/-/plugin-syntax-import-meta-7.10.4.tgz", + "integrity": "sha512-Yqfm+XDx0+Prh3VSeEQCPU81yC+JWZ2pDPFSS4ZdpfZhp4MkFMaDC1UqseovEKwSUpnIL7+vK+Clp7bfh0iD7g==", + "dev": true, + "license": "MIT", + "dependencies": { + "@babel/helper-plugin-utils": "^7.10.4" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-syntax-json-strings": { + "version": "7.8.3", + "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-json-strings/-/plugin-syntax-json-strings-7.8.3.tgz", + "integrity": "sha512-lY6kdGpWHvjoe2vk4WrAapEuBR69EMxZl+RoGRhrFGNYVK8mOPAW8VfbT/ZgrFbXlDNiiaxQnAtgVCZ6jv30EA==", + "dev": true, + "license": "MIT", + "dependencies": { + "@babel/helper-plugin-utils": "^7.8.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-syntax-jsx": { + "version": "7.27.1", + "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-jsx/-/plugin-syntax-jsx-7.27.1.tgz", + "integrity": "sha512-y8YTNIeKoyhGd9O0Jiyzyyqk8gdjnumGTQPsz0xOZOQ2RmkVJeZ1vmmfIvFEKqucBG6axJGBZDE/7iI5suUI/w==", + "dev": true, + "license": "MIT", + "dependencies": { + "@babel/helper-plugin-utils": "^7.27.1" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-syntax-logical-assignment-operators": { + "version": "7.10.4", + "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-logical-assignment-operators/-/plugin-syntax-logical-assignment-operators-7.10.4.tgz", + "integrity": "sha512-d8waShlpFDinQ5MtvGU9xDAOzKH47+FFoney2baFIoMr952hKOLp1HR7VszoZvOsV/4+RRszNY7D17ba0te0ig==", + "dev": true, + "license": "MIT", + "dependencies": { + "@babel/helper-plugin-utils": "^7.10.4" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-syntax-nullish-coalescing-operator": { + "version": "7.8.3", + "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-nullish-coalescing-operator/-/plugin-syntax-nullish-coalescing-operator-7.8.3.tgz", + "integrity": "sha512-aSff4zPII1u2QD7y+F8oDsz19ew4IGEJg9SVW+bqwpwtfFleiQDMdzA/R+UlWDzfnHFCxxleFT0PMIrR36XLNQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "@babel/helper-plugin-utils": "^7.8.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-syntax-numeric-separator": { + "version": "7.10.4", + "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-numeric-separator/-/plugin-syntax-numeric-separator-7.10.4.tgz", + "integrity": "sha512-9H6YdfkcK/uOnY/K7/aA2xpzaAgkQn37yzWUMRK7OaPOqOpGS1+n0H5hxT9AUw9EsSjPW8SVyMJwYRtWs3X3ug==", + "dev": true, + "license": "MIT", + "dependencies": { + "@babel/helper-plugin-utils": "^7.10.4" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-syntax-object-rest-spread": { + "version": "7.8.3", + "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-object-rest-spread/-/plugin-syntax-object-rest-spread-7.8.3.tgz", + "integrity": "sha512-XoqMijGZb9y3y2XskN+P1wUGiVwWZ5JmoDRwx5+3GmEplNyVM2s2Dg8ILFQm8rWM48orGy5YpI5Bl8U1y7ydlA==", + "dev": true, + "license": "MIT", + "dependencies": { + "@babel/helper-plugin-utils": "^7.8.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-syntax-optional-catch-binding": { + "version": "7.8.3", + "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-optional-catch-binding/-/plugin-syntax-optional-catch-binding-7.8.3.tgz", + "integrity": "sha512-6VPD0Pc1lpTqw0aKoeRTMiB+kWhAoT24PA+ksWSBrFtl5SIRVpZlwN3NNPQjehA2E/91FV3RjLWoVTglWcSV3Q==", + "dev": true, + "license": "MIT", + "dependencies": { + "@babel/helper-plugin-utils": "^7.8.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-syntax-optional-chaining": { + "version": "7.8.3", + "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-optional-chaining/-/plugin-syntax-optional-chaining-7.8.3.tgz", + "integrity": "sha512-KoK9ErH1MBlCPxV0VANkXW2/dw4vlbGDrFgz8bmUsBGYkFRcbRwMh6cIJubdPrkxRwuGdtCk0v/wPTKbQgBjkg==", + "dev": true, + "license": "MIT", + "dependencies": { + "@babel/helper-plugin-utils": "^7.8.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-syntax-private-property-in-object": { + "version": "7.14.5", + "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-private-property-in-object/-/plugin-syntax-private-property-in-object-7.14.5.tgz", + "integrity": "sha512-0wVnp9dxJ72ZUJDV27ZfbSj6iHLoytYZmh3rFcxNnvsJF3ktkzLDZPy/mA17HGsaQT3/DQsWYX1f1QGWkCoVUg==", + "dev": true, + "license": "MIT", + "dependencies": { + "@babel/helper-plugin-utils": "^7.14.5" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-syntax-top-level-await": { + "version": "7.14.5", + "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-top-level-await/-/plugin-syntax-top-level-await-7.14.5.tgz", + "integrity": "sha512-hx++upLv5U1rgYfwe1xBQUhRmU41NEvpUvrp8jkrSCdvGSnM5/qdRMtylJ6PG5OFkBaHkbTAKTnd3/YyESRHFw==", + "dev": true, + "license": "MIT", + "dependencies": { + "@babel/helper-plugin-utils": "^7.14.5" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-syntax-typescript": { + "version": "7.27.1", + "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-typescript/-/plugin-syntax-typescript-7.27.1.tgz", + "integrity": "sha512-xfYCBMxveHrRMnAWl1ZlPXOZjzkN82THFvLhQhFXFt81Z5HnN+EtUkZhv/zcKpmT3fzmWZB0ywiBrbC3vogbwQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "@babel/helper-plugin-utils": "^7.27.1" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/template": { + "version": "7.27.1", + "resolved": "https://registry.npmjs.org/@babel/template/-/template-7.27.1.tgz", + "integrity": "sha512-Fyo3ghWMqkHHpHQCoBs2VnYjR4iWFFjguTDEqA5WgZDOrFesVjMhMM2FSqTKSoUSDO1VQtavj8NFpdRBEvJTtg==", + "dev": true, + "license": "MIT", + "dependencies": { + "@babel/code-frame": "^7.27.1", + "@babel/parser": "^7.27.1", + "@babel/types": "^7.27.1" + }, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/template/node_modules/@babel/types": { + "version": "7.27.1", + "resolved": "https://registry.npmjs.org/@babel/types/-/types-7.27.1.tgz", + "integrity": "sha512-+EzkxvLNfiUeKMgy/3luqfsCWFRXLb7U6wNQTk60tovuckwB15B191tJWvpp4HjiQWdJkCxO3Wbvc6jlk3Xb2Q==", + "dev": true, + "license": "MIT", + "dependencies": { + "@babel/helper-string-parser": "^7.27.1", + "@babel/helper-validator-identifier": "^7.27.1" + }, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/traverse": { + "version": "7.23.2", + "resolved": "https://registry.npmjs.org/@babel/traverse/-/traverse-7.23.2.tgz", + "integrity": "sha512-azpe59SQ48qG6nu2CzcMLbxUudtN+dOM9kDbUqGq3HXUJRlo7i8fvPoxQUzYgLZ4cMVmuZgm8vvBpNeRhd6XSw==", + "dev": true, + "license": "MIT", + "dependencies": { + "@babel/code-frame": "^7.22.13", + "@babel/generator": "^7.23.0", + "@babel/helper-environment-visitor": "^7.22.20", + "@babel/helper-function-name": "^7.23.0", + "@babel/helper-hoist-variables": "^7.22.5", + "@babel/helper-split-export-declaration": "^7.22.6", + "@babel/parser": "^7.23.0", + "@babel/types": "^7.23.0", + "debug": "^4.1.0", + "globals": "^11.1.0" + }, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/traverse/node_modules/@babel/generator": { + "version": "7.27.1", + "resolved": "https://registry.npmjs.org/@babel/generator/-/generator-7.27.1.tgz", + "integrity": "sha512-UnJfnIpc/+JO0/+KRVQNGU+y5taA5vCbwN8+azkX6beii/ZF+enZJSOKo11ZSzGJjlNfJHfQtmQT8H+9TXPG2w==", + "dev": true, + "license": "MIT", + "dependencies": { + "@babel/parser": "^7.27.1", + "@babel/types": "^7.27.1", + "@jridgewell/gen-mapping": "^0.3.5", + "@jridgewell/trace-mapping": "^0.3.25", + "jsesc": "^3.0.2" + }, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/traverse/node_modules/@babel/types": { + "version": "7.27.1", + "resolved": "https://registry.npmjs.org/@babel/types/-/types-7.27.1.tgz", + "integrity": "sha512-+EzkxvLNfiUeKMgy/3luqfsCWFRXLb7U6wNQTk60tovuckwB15B191tJWvpp4HjiQWdJkCxO3Wbvc6jlk3Xb2Q==", + "dev": true, + "license": "MIT", + "dependencies": { + "@babel/helper-string-parser": "^7.27.1", + "@babel/helper-validator-identifier": "^7.27.1" + }, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/traverse/node_modules/jsesc": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/jsesc/-/jsesc-3.1.0.tgz", + "integrity": "sha512-/sM3dO2FOzXjKQhJuo0Q173wf2KOo8t4I8vHy6lF9poUp7bKT0/NHE8fPX23PwfhnykfqnC2xRxOnVw5XuGIaA==", + "dev": true, + "license": "MIT", + "bin": { + "jsesc": "bin/jsesc" + }, + "engines": { + "node": ">=6" + } + }, + "node_modules/@babel/types": { + "version": "7.17.0", + "resolved": "https://registry.npmjs.org/@babel/types/-/types-7.17.0.tgz", + "integrity": "sha512-TmKSNO4D5rzhL5bjWFcVHHLETzfQ/AmbKpKPOSjlP0WoHZ6L911fgoOKY4Alp/emzG4cHJdyN49zpgkbXFEHHw==", + "dev": true, + "license": "MIT", + "dependencies": { + "@babel/helper-validator-identifier": "^7.16.7", + "to-fast-properties": "^2.0.0" + }, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@bcoe/v8-coverage": { + "version": "0.2.3", + "resolved": "https://registry.npmjs.org/@bcoe/v8-coverage/-/v8-coverage-0.2.3.tgz", + "integrity": "sha512-0hYQ8SB4Db5zvZB4axdMHGwEaQjkZzFjQiN9LVYvIFB2nSUHW9tYpxWriPrWDASIxiaXax83REcLxuSdnGPZtw==", + "dev": true, + "license": "MIT" + }, + "node_modules/@istanbuljs/load-nyc-config": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/@istanbuljs/load-nyc-config/-/load-nyc-config-1.1.0.tgz", + "integrity": "sha512-VjeHSlIzpv/NyD3N0YuHfXOPDIixcA1q2ZV98wsMqcYlPmv2n3Yb2lYP9XMElnaFVXg5A7YLTeLu6V84uQDjmQ==", + "dev": true, + "license": "ISC", + "dependencies": { + "camelcase": "^5.3.1", + "find-up": "^4.1.0", + "get-package-type": "^0.1.0", + "js-yaml": "^3.13.1", + "resolve-from": "^5.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/@istanbuljs/schema": { + "version": "0.1.3", + "resolved": "https://registry.npmjs.org/@istanbuljs/schema/-/schema-0.1.3.tgz", + "integrity": "sha512-ZXRY4jNvVgSVQ8DL3LTcakaAtXwTVUxE81hslsyD2AtoXW/wVob10HkOJ1X/pAlcI7D+2YoZKg5do8G/w6RYgA==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=8" + } + }, + "node_modules/@jest/console": { + "version": "29.7.0", + "resolved": "https://registry.npmjs.org/@jest/console/-/console-29.7.0.tgz", + "integrity": "sha512-5Ni4CU7XHQi32IJ398EEP4RrB8eV09sXP2ROqD4bksHrnTree52PsxvX8tpL8LvTZ3pFzXyPbNQReSN41CAhOg==", + "dev": true, + "license": "MIT", + "dependencies": { + "@jest/types": "^29.6.3", + "@types/node": "*", + "chalk": "^4.0.0", + "jest-message-util": "^29.7.0", + "jest-util": "^29.7.0", + "slash": "^3.0.0" + }, + "engines": { + "node": "^14.15.0 || ^16.10.0 || >=18.0.0" + } + }, + "node_modules/@jest/core": { + "version": "29.7.0", + "resolved": "https://registry.npmjs.org/@jest/core/-/core-29.7.0.tgz", + "integrity": "sha512-n7aeXWKMnGtDA48y8TLWJPJmLmmZ642Ceo78cYWEpiD7FzDgmNDV/GCVRorPABdXLJZ/9wzzgZAlHjXjxDHGsg==", + "dev": true, + "license": "MIT", + "dependencies": { + "@jest/console": "^29.7.0", + "@jest/reporters": "^29.7.0", + "@jest/test-result": "^29.7.0", + "@jest/transform": "^29.7.0", + "@jest/types": "^29.6.3", + "@types/node": "*", + "ansi-escapes": "^4.2.1", + "chalk": "^4.0.0", + "ci-info": "^3.2.0", + "exit": "^0.1.2", + "graceful-fs": "^4.2.9", + "jest-changed-files": "^29.7.0", + "jest-config": "^29.7.0", + "jest-haste-map": "^29.7.0", + "jest-message-util": "^29.7.0", + "jest-regex-util": "^29.6.3", + "jest-resolve": "^29.7.0", + "jest-resolve-dependencies": "^29.7.0", + "jest-runner": "^29.7.0", + "jest-runtime": "^29.7.0", + "jest-snapshot": "^29.7.0", + "jest-util": "^29.7.0", + "jest-validate": "^29.7.0", + "jest-watcher": "^29.7.0", + "micromatch": "^4.0.4", + "pretty-format": "^29.7.0", + "slash": "^3.0.0", + "strip-ansi": "^6.0.0" + }, + "engines": { + "node": "^14.15.0 || ^16.10.0 || >=18.0.0" + }, + "peerDependencies": { + "node-notifier": "^8.0.1 || ^9.0.0 || ^10.0.0" + }, + "peerDependenciesMeta": { + "node-notifier": { + "optional": true + } + } + }, + "node_modules/@jest/environment": { + "version": "29.7.0", + "resolved": "https://registry.npmjs.org/@jest/environment/-/environment-29.7.0.tgz", + "integrity": "sha512-aQIfHDq33ExsN4jP1NWGXhxgQ/wixs60gDiKO+XVMd8Mn0NWPWgc34ZQDTb2jKaUWQ7MuwoitXAsN2XVXNMpAw==", + "dev": true, + "license": "MIT", + "dependencies": { + "@jest/fake-timers": "^29.7.0", + "@jest/types": "^29.6.3", + "@types/node": "*", + "jest-mock": "^29.7.0" + }, + "engines": { + "node": "^14.15.0 || ^16.10.0 || >=18.0.0" + } + }, + "node_modules/@jest/expect": { + "version": "29.7.0", + "resolved": "https://registry.npmjs.org/@jest/expect/-/expect-29.7.0.tgz", + "integrity": "sha512-8uMeAMycttpva3P1lBHB8VciS9V0XAr3GymPpipdyQXbBcuhkLQOSe8E/p92RyAdToS6ZD1tFkX+CkhoECE0dQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "expect": "^29.7.0", + "jest-snapshot": "^29.7.0" + }, + "engines": { + "node": "^14.15.0 || ^16.10.0 || >=18.0.0" + } + }, + "node_modules/@jest/expect-utils": { + "version": "29.7.0", + "resolved": "https://registry.npmjs.org/@jest/expect-utils/-/expect-utils-29.7.0.tgz", + "integrity": "sha512-GlsNBWiFQFCVi9QVSx7f5AgMeLxe9YCCs5PuP2O2LdjDAA8Jh9eX7lA1Jq/xdXw3Wb3hyvlFNfZIfcRetSzYcA==", + "dev": true, + "license": "MIT", + "dependencies": { + "jest-get-type": "^29.6.3" + }, + "engines": { + "node": "^14.15.0 || ^16.10.0 || >=18.0.0" + } + }, + "node_modules/@jest/fake-timers": { + "version": "29.7.0", + "resolved": "https://registry.npmjs.org/@jest/fake-timers/-/fake-timers-29.7.0.tgz", + "integrity": "sha512-q4DH1Ha4TTFPdxLsqDXK1d3+ioSL7yL5oCMJZgDYm6i+6CygW5E5xVr/D1HdsGxjt1ZWSfUAs9OxSB/BNelWrQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "@jest/types": "^29.6.3", + "@sinonjs/fake-timers": "^10.0.2", + "@types/node": "*", + "jest-message-util": "^29.7.0", + "jest-mock": "^29.7.0", + "jest-util": "^29.7.0" + }, + "engines": { + "node": "^14.15.0 || ^16.10.0 || >=18.0.0" + } + }, + "node_modules/@jest/globals": { + "version": "29.7.0", + "resolved": "https://registry.npmjs.org/@jest/globals/-/globals-29.7.0.tgz", + "integrity": "sha512-mpiz3dutLbkW2MNFubUGUEVLkTGiqW6yLVTA+JbP6fI6J5iL9Y0Nlg8k95pcF8ctKwCS7WVxteBs29hhfAotzQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "@jest/environment": "^29.7.0", + "@jest/expect": "^29.7.0", + "@jest/types": "^29.6.3", + "jest-mock": "^29.7.0" + }, + "engines": { + "node": "^14.15.0 || ^16.10.0 || >=18.0.0" + } + }, + "node_modules/@jest/reporters": { + "version": "29.7.0", + "resolved": "https://registry.npmjs.org/@jest/reporters/-/reporters-29.7.0.tgz", + "integrity": "sha512-DApq0KJbJOEzAFYjHADNNxAE3KbhxQB1y5Kplb5Waqw6zVbuWatSnMjE5gs8FUgEPmNsnZA3NCWl9NG0ia04Pg==", + "dev": true, + "license": "MIT", + "dependencies": { + "@bcoe/v8-coverage": "^0.2.3", + "@jest/console": "^29.7.0", + "@jest/test-result": "^29.7.0", + "@jest/transform": "^29.7.0", + "@jest/types": "^29.6.3", + "@jridgewell/trace-mapping": "^0.3.18", + "@types/node": "*", + "chalk": "^4.0.0", + "collect-v8-coverage": "^1.0.0", + "exit": "^0.1.2", + "glob": "^7.1.3", + "graceful-fs": "^4.2.9", + "istanbul-lib-coverage": "^3.0.0", + "istanbul-lib-instrument": "^6.0.0", + "istanbul-lib-report": "^3.0.0", + "istanbul-lib-source-maps": "^4.0.0", + "istanbul-reports": "^3.1.3", + "jest-message-util": "^29.7.0", + "jest-util": "^29.7.0", + "jest-worker": "^29.7.0", + "slash": "^3.0.0", + "string-length": "^4.0.1", + "strip-ansi": "^6.0.0", + "v8-to-istanbul": "^9.0.1" + }, + "engines": { + "node": "^14.15.0 || ^16.10.0 || >=18.0.0" + }, + "peerDependencies": { + "node-notifier": "^8.0.1 || ^9.0.0 || ^10.0.0" + }, + "peerDependenciesMeta": { + "node-notifier": { + "optional": true + } + } + }, + "node_modules/@jest/schemas": { + "version": "29.6.3", + "resolved": "https://registry.npmjs.org/@jest/schemas/-/schemas-29.6.3.tgz", + "integrity": "sha512-mo5j5X+jIZmJQveBKeS/clAueipV7KgiX1vMgCxam1RNYiqE1w62n0/tJJnHtjW8ZHcQco5gY85jA3mi0L+nSA==", + "dev": true, + "license": "MIT", + "dependencies": { + "@sinclair/typebox": "^0.27.8" + }, + "engines": { + "node": "^14.15.0 || ^16.10.0 || >=18.0.0" + } + }, + "node_modules/@jest/source-map": { + "version": "29.6.3", + "resolved": "https://registry.npmjs.org/@jest/source-map/-/source-map-29.6.3.tgz", + "integrity": "sha512-MHjT95QuipcPrpLM+8JMSzFx6eHp5Bm+4XeFDJlwsvVBjmKNiIAvasGK2fxz2WbGRlnvqehFbh07MMa7n3YJnw==", + "dev": true, + "license": "MIT", + "dependencies": { + "@jridgewell/trace-mapping": "^0.3.18", + "callsites": "^3.0.0", + "graceful-fs": "^4.2.9" + }, + "engines": { + "node": "^14.15.0 || ^16.10.0 || >=18.0.0" + } + }, + "node_modules/@jest/test-result": { + "version": "29.7.0", + "resolved": "https://registry.npmjs.org/@jest/test-result/-/test-result-29.7.0.tgz", + "integrity": "sha512-Fdx+tv6x1zlkJPcWXmMDAG2HBnaR9XPSd5aDWQVsfrZmLVT3lU1cwyxLgRmXR9yrq4NBoEm9BMsfgFzTQAbJYA==", + "dev": true, + "license": "MIT", + "dependencies": { + "@jest/console": "^29.7.0", + "@jest/types": "^29.6.3", + "@types/istanbul-lib-coverage": "^2.0.0", + "collect-v8-coverage": "^1.0.0" + }, + "engines": { + "node": "^14.15.0 || ^16.10.0 || >=18.0.0" + } + }, + "node_modules/@jest/test-sequencer": { + "version": "29.7.0", + "resolved": "https://registry.npmjs.org/@jest/test-sequencer/-/test-sequencer-29.7.0.tgz", + "integrity": "sha512-GQwJ5WZVrKnOJuiYiAF52UNUJXgTZx1NHjFSEB0qEMmSZKAkdMoIzw/Cj6x6NF4AvV23AUqDpFzQkN/eYCYTxw==", + "dev": true, + "license": "MIT", + "dependencies": { + "@jest/test-result": "^29.7.0", + "graceful-fs": "^4.2.9", + "jest-haste-map": "^29.7.0", + "slash": "^3.0.0" + }, + "engines": { + "node": "^14.15.0 || ^16.10.0 || >=18.0.0" + } + }, + "node_modules/@jest/transform": { + "version": "29.7.0", + "resolved": "https://registry.npmjs.org/@jest/transform/-/transform-29.7.0.tgz", + "integrity": "sha512-ok/BTPFzFKVMwO5eOHRrvnBVHdRy9IrsrW1GpMaQ9MCnilNLXQKmAX8s1YXDFaai9xJpac2ySzV0YeRRECr2Vw==", + "dev": true, + "license": "MIT", + "dependencies": { + "@babel/core": "^7.11.6", + "@jest/types": "^29.6.3", + "@jridgewell/trace-mapping": "^0.3.18", + "babel-plugin-istanbul": "^6.1.1", + "chalk": "^4.0.0", + "convert-source-map": "^2.0.0", + "fast-json-stable-stringify": "^2.1.0", + "graceful-fs": "^4.2.9", + "jest-haste-map": "^29.7.0", + "jest-regex-util": "^29.6.3", + "jest-util": "^29.7.0", + "micromatch": "^4.0.4", + "pirates": "^4.0.4", + "slash": "^3.0.0", + "write-file-atomic": "^4.0.2" + }, + "engines": { + "node": "^14.15.0 || ^16.10.0 || >=18.0.0" + } + }, + "node_modules/@jest/types": { + "version": "29.6.3", + "resolved": "https://registry.npmjs.org/@jest/types/-/types-29.6.3.tgz", + "integrity": "sha512-u3UPsIilWKOM3F9CXtrG8LEJmNxwoCQC/XVj4IKYXvvpx7QIi/Kg1LI5uDmDpKlac62NUtX7eLjRh+jVZcLOzw==", + "dev": true, + "license": "MIT", + "dependencies": { + "@jest/schemas": "^29.6.3", + "@types/istanbul-lib-coverage": "^2.0.0", + "@types/istanbul-reports": "^3.0.0", + "@types/node": "*", + "@types/yargs": "^17.0.8", + "chalk": "^4.0.0" + }, + "engines": { + "node": "^14.15.0 || ^16.10.0 || >=18.0.0" + } + }, + "node_modules/@jridgewell/gen-mapping": { + "version": "0.3.8", + "resolved": "https://registry.npmjs.org/@jridgewell/gen-mapping/-/gen-mapping-0.3.8.tgz", + "integrity": "sha512-imAbBGkb+ebQyxKgzv5Hu2nmROxoDOXHh80evxdoXNOrvAnVx7zimzc1Oo5h9RlfV4vPXaE2iM5pOFbvOCClWA==", + "dev": true, + "license": "MIT", + "dependencies": { + "@jridgewell/set-array": "^1.2.1", + "@jridgewell/sourcemap-codec": "^1.4.10", + "@jridgewell/trace-mapping": "^0.3.24" + }, + "engines": { + "node": ">=6.0.0" + } + }, + "node_modules/@jridgewell/resolve-uri": { + "version": "3.1.2", + "resolved": "https://registry.npmjs.org/@jridgewell/resolve-uri/-/resolve-uri-3.1.2.tgz", + "integrity": "sha512-bRISgCIjP20/tbWSPWMEi54QVPRZExkuD9lJL+UIxUKtwVJA8wW1Trb1jMs1RFXo1CBTNZ/5hpC9QvmKWdopKw==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=6.0.0" + } + }, + "node_modules/@jridgewell/set-array": { + "version": "1.2.1", + "resolved": "https://registry.npmjs.org/@jridgewell/set-array/-/set-array-1.2.1.tgz", + "integrity": "sha512-R8gLRTZeyp03ymzP/6Lil/28tGeGEzhx1q2k703KGWRAI1VdvPIXdG70VJc2pAMw3NA6JKL5hhFu1sJX0Mnn/A==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=6.0.0" + } + }, + "node_modules/@jridgewell/source-map": { + "version": "0.3.6", + "resolved": "https://registry.npmjs.org/@jridgewell/source-map/-/source-map-0.3.6.tgz", + "integrity": "sha512-1ZJTZebgqllO79ue2bm3rIGud/bOe0pP5BjSRCRxxYkEZS8STV7zN84UBbiYu7jy+eCKSnVIUgoWWE/tt+shMQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "@jridgewell/gen-mapping": "^0.3.5", + "@jridgewell/trace-mapping": "^0.3.25" + } + }, + "node_modules/@jridgewell/sourcemap-codec": { + "version": "1.5.0", + "resolved": "https://registry.npmjs.org/@jridgewell/sourcemap-codec/-/sourcemap-codec-1.5.0.tgz", + "integrity": "sha512-gv3ZRaISU3fjPAgNsriBRqGWQL6quFx04YMPW/zD8XMLsU32mhCCbfbO6KZFLjvYpCZ8zyDEgqsgf+PwPaM7GQ==", + "dev": true, + "license": "MIT" + }, + "node_modules/@jridgewell/trace-mapping": { + "version": "0.3.25", + "resolved": "https://registry.npmjs.org/@jridgewell/trace-mapping/-/trace-mapping-0.3.25.tgz", + "integrity": "sha512-vNk6aEwybGtawWmy/PzwnGDOjCkLWSD2wqvjGGAgOAwCGWySYXfYoxt00IJkTF+8Lb57DwOb3Aa0o9CApepiYQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "@jridgewell/resolve-uri": "^3.1.0", + "@jridgewell/sourcemap-codec": "^1.4.14" + } + }, + "node_modules/@opentelemetry/api": { + "version": "1.9.0", + "resolved": "https://registry.npmjs.org/@opentelemetry/api/-/api-1.9.0.tgz", + "integrity": "sha512-3giAOQvZiH5F9bMlMiv8+GSPMeqg0dbaeo58/0SlA9sxSqZhnUtxzX9/2FzyhS9sWQf5S0GJE0AKBrFqjpeYcg==", + "license": "Apache-2.0", + "engines": { + "node": ">=8.0.0" + } + }, + "node_modules/@opentelemetry/api-logs": { + "version": "0.56.0", + "resolved": "https://registry.npmjs.org/@opentelemetry/api-logs/-/api-logs-0.56.0.tgz", + "integrity": "sha512-Wr39+94UNNG3Ei9nv3pHd4AJ63gq5nSemMRpCd8fPwDL9rN3vK26lzxfH27mw16XzOSO+TpyQwBAMaLxaPWG0g==", + "license": "Apache-2.0", + "dependencies": { + "@opentelemetry/api": "^1.3.0" + }, + "engines": { + "node": ">=14" + } + }, + "node_modules/@opentelemetry/context-async-hooks": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/@opentelemetry/context-async-hooks/-/context-async-hooks-2.0.0.tgz", + "integrity": "sha512-IEkJGzK1A9v3/EHjXh3s2IiFc6L4jfK+lNgKVgUjeUJQRRhnVFMIO3TAvKwonm9O1HebCuoOt98v8bZW7oVQHA==", + "license": "Apache-2.0", + "engines": { + "node": "^18.19.0 || >=20.6.0" + }, + "peerDependencies": { + "@opentelemetry/api": ">=1.0.0 <1.10.0" + } + }, + "node_modules/@opentelemetry/core": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/@opentelemetry/core/-/core-2.0.0.tgz", + "integrity": "sha512-SLX36allrcnVaPYG3R78F/UZZsBsvbc7lMCLx37LyH5MJ1KAAZ2E3mW9OAD3zGz0G8q/BtoS5VUrjzDydhD6LQ==", + "license": "Apache-2.0", + "dependencies": { + "@opentelemetry/semantic-conventions": "^1.29.0" + }, + "engines": { + "node": "^18.19.0 || >=20.6.0" + }, + "peerDependencies": { + "@opentelemetry/api": ">=1.0.0 <1.10.0" + } + }, + "node_modules/@opentelemetry/instrumentation": { + "version": "0.56.0", + "resolved": "https://registry.npmjs.org/@opentelemetry/instrumentation/-/instrumentation-0.56.0.tgz", + "integrity": "sha512-2KkGBKE+FPXU1F0zKww+stnlUxUTlBvLCiWdP63Z9sqXYeNI/ziNzsxAp4LAdUcTQmXjw1IWgvm5CAb/BHy99w==", + "license": "Apache-2.0", + "dependencies": { + "@opentelemetry/api-logs": "0.56.0", + "@types/shimmer": "^1.2.0", + "import-in-the-middle": "^1.8.1", + "require-in-the-middle": "^7.1.1", + "semver": "^7.5.2", + "shimmer": "^1.2.1" + }, + "engines": { + "node": ">=14" + }, + "peerDependencies": { + "@opentelemetry/api": "^1.3.0" + } + }, + "node_modules/@opentelemetry/resources": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/@opentelemetry/resources/-/resources-2.0.0.tgz", + "integrity": "sha512-rnZr6dML2z4IARI4zPGQV4arDikF/9OXZQzrC01dLmn0CZxU5U5OLd/m1T7YkGRj5UitjeoCtg/zorlgMQcdTg==", + "license": "Apache-2.0", + "dependencies": { + "@opentelemetry/core": "2.0.0", + "@opentelemetry/semantic-conventions": "^1.29.0" + }, + "engines": { + "node": "^18.19.0 || >=20.6.0" + }, + "peerDependencies": { + "@opentelemetry/api": ">=1.3.0 <1.10.0" + } + }, + "node_modules/@opentelemetry/sdk-trace-base": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/@opentelemetry/sdk-trace-base/-/sdk-trace-base-2.0.0.tgz", + "integrity": "sha512-qQnYdX+ZCkonM7tA5iU4fSRsVxbFGml8jbxOgipRGMFHKaXKHQ30js03rTobYjKjIfnOsZSbHKWF0/0v0OQGfw==", + "license": "Apache-2.0", + "dependencies": { + "@opentelemetry/core": "2.0.0", + "@opentelemetry/resources": "2.0.0", + "@opentelemetry/semantic-conventions": "^1.29.0" + }, + "engines": { + "node": "^18.19.0 || >=20.6.0" + }, + "peerDependencies": { + "@opentelemetry/api": ">=1.3.0 <1.10.0" + } + }, + "node_modules/@opentelemetry/sdk-trace-node": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/@opentelemetry/sdk-trace-node/-/sdk-trace-node-2.0.0.tgz", + "integrity": "sha512-omdilCZozUjQwY3uZRBwbaRMJ3p09l4t187Lsdf0dGMye9WKD4NGcpgZRvqhI1dwcH6og+YXQEtoO9Wx3ykilg==", + "license": "Apache-2.0", + "dependencies": { + "@opentelemetry/context-async-hooks": "2.0.0", + "@opentelemetry/core": "2.0.0", + "@opentelemetry/sdk-trace-base": "2.0.0" + }, + "engines": { + "node": "^18.19.0 || >=20.6.0" + }, + "peerDependencies": { + "@opentelemetry/api": ">=1.0.0 <1.10.0" + } + }, + "node_modules/@opentelemetry/semantic-conventions": { + "version": "1.32.0", + "resolved": "https://registry.npmjs.org/@opentelemetry/semantic-conventions/-/semantic-conventions-1.32.0.tgz", + "integrity": "sha512-s0OpmpQFSfMrmedAn9Lhg4KWJELHCU6uU9dtIJ28N8UGhf9Y55im5X8fEzwhwDwiSqN+ZPSNrDJF7ivf/AuRPQ==", + "license": "Apache-2.0", + "engines": { + "node": ">=14" + } + }, + "node_modules/@sinclair/typebox": { + "version": "0.27.8", + "resolved": "https://registry.npmjs.org/@sinclair/typebox/-/typebox-0.27.8.tgz", + "integrity": "sha512-+Fj43pSMwJs4KRrH/938Uf+uAELIgVBmQzg/q1YG10djyfA3TnrU8N8XzqCh/okZdszqBQTZf96idMfE5lnwTA==", + "dev": true, + "license": "MIT" + }, + "node_modules/@sinonjs/commons": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/@sinonjs/commons/-/commons-3.0.1.tgz", + "integrity": "sha512-K3mCHKQ9sVh8o1C9cxkwxaOmXoAMlDxC1mYyHrjqOWEcBjYr76t96zL2zlj5dUGZ3HSw240X1qgH3Mjf1yJWpQ==", + "dev": true, + "license": "BSD-3-Clause", + "dependencies": { + "type-detect": "4.0.8" + } + }, + "node_modules/@sinonjs/fake-timers": { + "version": "10.3.0", + "resolved": "https://registry.npmjs.org/@sinonjs/fake-timers/-/fake-timers-10.3.0.tgz", + "integrity": "sha512-V4BG07kuYSUkTCSBHG8G8TNhM+F19jXFWnQtzj+we8DrkpSBCee9Z3Ms8yiGer/dlmhe35/Xdgyo3/0rQKg7YA==", + "dev": true, + "license": "BSD-3-Clause", + "dependencies": { + "@sinonjs/commons": "^3.0.0" + } + }, + "node_modules/@smithy/abort-controller": { + "version": "4.0.2", + "resolved": "https://registry.npmjs.org/@smithy/abort-controller/-/abort-controller-4.0.2.tgz", + "integrity": "sha512-Sl/78VDtgqKxN2+1qduaVE140XF+Xg+TafkncspwM4jFP/LHr76ZHmIY/y3V1M0mMLNk+Je6IGbzxy23RSToMw==", + "dev": true, + "license": "Apache-2.0", + "dependencies": { + "@smithy/types": "^4.2.0", + "tslib": "^2.6.2" + }, + "engines": { + "node": ">=18.0.0" + } + }, + "node_modules/@smithy/config-resolver": { + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/@smithy/config-resolver/-/config-resolver-4.1.0.tgz", + "integrity": "sha512-8smPlwhga22pwl23fM5ew4T9vfLUCeFXlcqNOCD5M5h8VmNPNUE9j6bQSuRXpDSV11L/E/SwEBQuW8hr6+nS1A==", + "dev": true, + "license": "Apache-2.0", + "dependencies": { + "@smithy/node-config-provider": "^4.0.2", + "@smithy/types": "^4.2.0", + "@smithy/util-config-provider": "^4.0.0", + "@smithy/util-middleware": "^4.0.2", + "tslib": "^2.6.2" + }, + "engines": { + "node": ">=18.0.0" + } + }, + "node_modules/@smithy/core": { + "version": "3.3.1", + "resolved": "https://registry.npmjs.org/@smithy/core/-/core-3.3.1.tgz", + "integrity": "sha512-W7AppgQD3fP1aBmo8wWo0id5zeR2/aYRy067vZsDVaa6v/mdhkg6DxXwEVuSPjZl+ZnvWAQbUMCd5ckw38+tHQ==", + "dev": true, + "license": "Apache-2.0", + "dependencies": { + "@smithy/middleware-serde": "^4.0.3", + "@smithy/protocol-http": "^5.1.0", + "@smithy/types": "^4.2.0", + "@smithy/util-body-length-browser": "^4.0.0", + "@smithy/util-middleware": "^4.0.2", + "@smithy/util-stream": "^4.2.0", + "@smithy/util-utf8": "^4.0.0", + "tslib": "^2.6.2" + }, + "engines": { + "node": ">=18.0.0" + } + }, + "node_modules/@smithy/credential-provider-imds": { + "version": "4.0.2", + "resolved": "https://registry.npmjs.org/@smithy/credential-provider-imds/-/credential-provider-imds-4.0.2.tgz", + "integrity": "sha512-32lVig6jCaWBHnY+OEQ6e6Vnt5vDHaLiydGrwYMW9tPqO688hPGTYRamYJ1EptxEC2rAwJrHWmPoKRBl4iTa8w==", + "dev": true, + "license": "Apache-2.0", + "dependencies": { + "@smithy/node-config-provider": "^4.0.2", + "@smithy/property-provider": "^4.0.2", + "@smithy/types": "^4.2.0", + "@smithy/url-parser": "^4.0.2", + "tslib": "^2.6.2" + }, + "engines": { + "node": ">=18.0.0" + } + }, + "node_modules/@smithy/eventstream-codec": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/@smithy/eventstream-codec/-/eventstream-codec-1.1.0.tgz", + "integrity": "sha512-3tEbUb8t8an226jKB6V/Q2XU/J53lCwCzULuBPEaF4JjSh+FlCMp7TmogE/Aij5J9DwlsZ4VAD/IRDuQ/0ZtMw==", + "dev": true, + "license": "Apache-2.0", + "dependencies": { + "@aws-crypto/crc32": "3.0.0", + "@smithy/types": "^1.2.0", + "@smithy/util-hex-encoding": "^1.1.0", + "tslib": "^2.5.0" + } + }, + "node_modules/@smithy/eventstream-codec/node_modules/@smithy/types": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/@smithy/types/-/types-1.2.0.tgz", + "integrity": "sha512-z1r00TvBqF3dh4aHhya7nz1HhvCg4TRmw51fjMrh5do3h+ngSstt/yKlNbHeb9QxJmFbmN8KEVSWgb1bRvfEoA==", + "dev": true, + "license": "Apache-2.0", + "dependencies": { + "tslib": "^2.5.0" + }, + "engines": { + "node": ">=14.0.0" + } + }, + "node_modules/@smithy/eventstream-codec/node_modules/@smithy/util-hex-encoding": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/@smithy/util-hex-encoding/-/util-hex-encoding-1.1.0.tgz", + "integrity": "sha512-7UtIE9eH0u41zpB60Jzr0oNCQ3hMJUabMcKRUVjmyHTXiWDE4vjSqN6qlih7rCNeKGbioS7f/y2Jgym4QZcKFg==", + "dev": true, + "license": "Apache-2.0", + "dependencies": { + "tslib": "^2.5.0" + }, + "engines": { + "node": ">=14.0.0" + } + }, + "node_modules/@smithy/fetch-http-handler": { + "version": "5.0.2", + "resolved": "https://registry.npmjs.org/@smithy/fetch-http-handler/-/fetch-http-handler-5.0.2.tgz", + "integrity": "sha512-+9Dz8sakS9pe7f2cBocpJXdeVjMopUDLgZs1yWeu7h++WqSbjUYv/JAJwKwXw1HV6gq1jyWjxuyn24E2GhoEcQ==", + "dev": true, + "license": "Apache-2.0", + "dependencies": { + "@smithy/protocol-http": "^5.1.0", + "@smithy/querystring-builder": "^4.0.2", + "@smithy/types": "^4.2.0", + "@smithy/util-base64": "^4.0.0", + "tslib": "^2.6.2" + }, + "engines": { + "node": ">=18.0.0" + } + }, + "node_modules/@smithy/hash-node": { + "version": "4.0.2", + "resolved": "https://registry.npmjs.org/@smithy/hash-node/-/hash-node-4.0.2.tgz", + "integrity": "sha512-VnTpYPnRUE7yVhWozFdlxcYknv9UN7CeOqSrMH+V877v4oqtVYuoqhIhtSjmGPvYrYnAkaM61sLMKHvxL138yg==", + "dev": true, + "license": "Apache-2.0", + "dependencies": { + "@smithy/types": "^4.2.0", + "@smithy/util-buffer-from": "^4.0.0", + "@smithy/util-utf8": "^4.0.0", + "tslib": "^2.6.2" + }, + "engines": { + "node": ">=18.0.0" + } + }, + "node_modules/@smithy/invalid-dependency": { + "version": "4.0.2", + "resolved": "https://registry.npmjs.org/@smithy/invalid-dependency/-/invalid-dependency-4.0.2.tgz", + "integrity": "sha512-GatB4+2DTpgWPday+mnUkoumP54u/MDM/5u44KF9hIu8jF0uafZtQLcdfIKkIcUNuF/fBojpLEHZS/56JqPeXQ==", + "dev": true, + "license": "Apache-2.0", + "dependencies": { + "@smithy/types": "^4.2.0", + "tslib": "^2.6.2" + }, + "engines": { + "node": ">=18.0.0" + } + }, + "node_modules/@smithy/is-array-buffer": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/@smithy/is-array-buffer/-/is-array-buffer-4.0.0.tgz", + "integrity": "sha512-saYhF8ZZNoJDTvJBEWgeBccCg+yvp1CX+ed12yORU3NilJScfc6gfch2oVb4QgxZrGUx3/ZJlb+c/dJbyupxlw==", + "dev": true, + "license": "Apache-2.0", + "dependencies": { + "tslib": "^2.6.2" + }, + "engines": { + "node": ">=18.0.0" + } + }, + "node_modules/@smithy/middleware-content-length": { + "version": "4.0.2", + "resolved": "https://registry.npmjs.org/@smithy/middleware-content-length/-/middleware-content-length-4.0.2.tgz", + "integrity": "sha512-hAfEXm1zU+ELvucxqQ7I8SszwQ4znWMbNv6PLMndN83JJN41EPuS93AIyh2N+gJ6x8QFhzSO6b7q2e6oClDI8A==", + "dev": true, + "license": "Apache-2.0", + "dependencies": { + "@smithy/protocol-http": "^5.1.0", + "@smithy/types": "^4.2.0", + "tslib": "^2.6.2" + }, + "engines": { + "node": ">=18.0.0" + } + }, + "node_modules/@smithy/middleware-endpoint": { + "version": "4.1.2", + "resolved": "https://registry.npmjs.org/@smithy/middleware-endpoint/-/middleware-endpoint-4.1.2.tgz", + "integrity": "sha512-EqOy3xaEGQpsKxLlzYstDRJ8eY90CbyBP4cl+w7r45mE60S8YliyL9AgWsdWcyNiB95E2PMqHBEv67nNl1zLfg==", + "dev": true, + "license": "Apache-2.0", + "dependencies": { + "@smithy/core": "^3.3.1", + "@smithy/middleware-serde": "^4.0.3", + "@smithy/node-config-provider": "^4.0.2", + "@smithy/shared-ini-file-loader": "^4.0.2", + "@smithy/types": "^4.2.0", + "@smithy/url-parser": "^4.0.2", + "@smithy/util-middleware": "^4.0.2", + "tslib": "^2.6.2" + }, + "engines": { + "node": ">=18.0.0" + } + }, + "node_modules/@smithy/middleware-retry": { + "version": "4.1.3", + "resolved": "https://registry.npmjs.org/@smithy/middleware-retry/-/middleware-retry-4.1.3.tgz", + "integrity": "sha512-AsJtI9KiFoEGAhcEKZyzzPfrszAQGcf4HSYKmenz0WGx/6YNvoPPv4OSGfZTCsDmgPHv4pXzxE+7QV7jcGWNKw==", + "dev": true, + "license": "Apache-2.0", + "dependencies": { + "@smithy/node-config-provider": "^4.0.2", + "@smithy/protocol-http": "^5.1.0", + "@smithy/service-error-classification": "^4.0.3", + "@smithy/smithy-client": "^4.2.2", + "@smithy/types": "^4.2.0", + "@smithy/util-middleware": "^4.0.2", + "@smithy/util-retry": "^4.0.3", + "tslib": "^2.6.2", + "uuid": "^9.0.1" + }, + "engines": { + "node": ">=18.0.0" + } + }, + "node_modules/@smithy/middleware-serde": { + "version": "4.0.3", + "resolved": "https://registry.npmjs.org/@smithy/middleware-serde/-/middleware-serde-4.0.3.tgz", + "integrity": "sha512-rfgDVrgLEVMmMn0BI8O+8OVr6vXzjV7HZj57l0QxslhzbvVfikZbVfBVthjLHqib4BW44QhcIgJpvebHlRaC9A==", + "dev": true, + "license": "Apache-2.0", + "dependencies": { + "@smithy/types": "^4.2.0", + "tslib": "^2.6.2" + }, + "engines": { + "node": ">=18.0.0" + } + }, + "node_modules/@smithy/middleware-stack": { + "version": "4.0.2", + "resolved": "https://registry.npmjs.org/@smithy/middleware-stack/-/middleware-stack-4.0.2.tgz", + "integrity": "sha512-eSPVcuJJGVYrFYu2hEq8g8WWdJav3sdrI4o2c6z/rjnYDd3xH9j9E7deZQCzFn4QvGPouLngH3dQ+QVTxv5bOQ==", + "dev": true, + "license": "Apache-2.0", + "dependencies": { + "@smithy/types": "^4.2.0", + "tslib": "^2.6.2" + }, + "engines": { + "node": ">=18.0.0" + } + }, + "node_modules/@smithy/node-config-provider": { + "version": "4.0.2", + "resolved": "https://registry.npmjs.org/@smithy/node-config-provider/-/node-config-provider-4.0.2.tgz", + "integrity": "sha512-WgCkILRZfJwJ4Da92a6t3ozN/zcvYyJGUTmfGbgS/FkCcoCjl7G4FJaCDN1ySdvLvemnQeo25FdkyMSTSwulsw==", + "dev": true, + "license": "Apache-2.0", + "dependencies": { + "@smithy/property-provider": "^4.0.2", + "@smithy/shared-ini-file-loader": "^4.0.2", + "@smithy/types": "^4.2.0", + "tslib": "^2.6.2" + }, + "engines": { + "node": ">=18.0.0" + } + }, + "node_modules/@smithy/node-http-handler": { + "version": "4.0.4", + "resolved": "https://registry.npmjs.org/@smithy/node-http-handler/-/node-http-handler-4.0.4.tgz", + "integrity": "sha512-/mdqabuAT3o/ihBGjL94PUbTSPSRJ0eeVTdgADzow0wRJ0rN4A27EOrtlK56MYiO1fDvlO3jVTCxQtQmK9dZ1g==", + "dev": true, + "license": "Apache-2.0", + "dependencies": { + "@smithy/abort-controller": "^4.0.2", + "@smithy/protocol-http": "^5.1.0", + "@smithy/querystring-builder": "^4.0.2", + "@smithy/types": "^4.2.0", + "tslib": "^2.6.2" + }, + "engines": { + "node": ">=18.0.0" + } + }, + "node_modules/@smithy/property-provider": { + "version": "4.0.2", + "resolved": "https://registry.npmjs.org/@smithy/property-provider/-/property-provider-4.0.2.tgz", + "integrity": "sha512-wNRoQC1uISOuNc2s4hkOYwYllmiyrvVXWMtq+TysNRVQaHm4yoafYQyjN/goYZS+QbYlPIbb/QRjaUZMuzwQ7A==", + "dev": true, + "license": "Apache-2.0", + "dependencies": { + "@smithy/types": "^4.2.0", + "tslib": "^2.6.2" + }, + "engines": { + "node": ">=18.0.0" + } + }, + "node_modules/@smithy/protocol-http": { + "version": "5.1.0", + "resolved": "https://registry.npmjs.org/@smithy/protocol-http/-/protocol-http-5.1.0.tgz", + "integrity": "sha512-KxAOL1nUNw2JTYrtviRRjEnykIDhxc84qMBzxvu1MUfQfHTuBlCG7PA6EdVwqpJjH7glw7FqQoFxUJSyBQgu7g==", + "dev": true, + "license": "Apache-2.0", + "dependencies": { + "@smithy/types": "^4.2.0", + "tslib": "^2.6.2" + }, + "engines": { + "node": ">=18.0.0" + } + }, + "node_modules/@smithy/querystring-builder": { + "version": "4.0.2", + "resolved": "https://registry.npmjs.org/@smithy/querystring-builder/-/querystring-builder-4.0.2.tgz", + "integrity": "sha512-NTOs0FwHw1vimmQM4ebh+wFQvOwkEf/kQL6bSM1Lock+Bv4I89B3hGYoUEPkmvYPkDKyp5UdXJYu+PoTQ3T31Q==", + "dev": true, + "license": "Apache-2.0", + "dependencies": { + "@smithy/types": "^4.2.0", + "@smithy/util-uri-escape": "^4.0.0", + "tslib": "^2.6.2" + }, + "engines": { + "node": ">=18.0.0" + } + }, + "node_modules/@smithy/querystring-parser": { + "version": "4.0.2", + "resolved": "https://registry.npmjs.org/@smithy/querystring-parser/-/querystring-parser-4.0.2.tgz", + "integrity": "sha512-v6w8wnmZcVXjfVLjxw8qF7OwESD9wnpjp0Dqry/Pod0/5vcEA3qxCr+BhbOHlxS8O+29eLpT3aagxXGwIoEk7Q==", + "dev": true, + "license": "Apache-2.0", + "dependencies": { + "@smithy/types": "^4.2.0", + "tslib": "^2.6.2" + }, + "engines": { + "node": ">=18.0.0" + } + }, + "node_modules/@smithy/service-error-classification": { + "version": "4.0.3", + "resolved": "https://registry.npmjs.org/@smithy/service-error-classification/-/service-error-classification-4.0.3.tgz", + "integrity": "sha512-FTbcajmltovWMjj3tksDQdD23b2w6gH+A0DYA1Yz3iSpjDj8fmkwy62UnXcWMy4d5YoMoSyLFHMfkEVEzbiN8Q==", + "dev": true, + "license": "Apache-2.0", + "dependencies": { + "@smithy/types": "^4.2.0" + }, + "engines": { + "node": ">=18.0.0" + } + }, + "node_modules/@smithy/shared-ini-file-loader": { + "version": "4.0.2", + "resolved": "https://registry.npmjs.org/@smithy/shared-ini-file-loader/-/shared-ini-file-loader-4.0.2.tgz", + "integrity": "sha512-J9/gTWBGVuFZ01oVA6vdb4DAjf1XbDhK6sLsu3OS9qmLrS6KB5ygpeHiM3miIbj1qgSJ96GYszXFWv6ErJ8QEw==", + "dev": true, + "license": "Apache-2.0", + "dependencies": { + "@smithy/types": "^4.2.0", + "tslib": "^2.6.2" + }, + "engines": { + "node": ">=18.0.0" + } + }, + "node_modules/@smithy/signature-v4": { + "version": "5.1.0", + "resolved": "https://registry.npmjs.org/@smithy/signature-v4/-/signature-v4-5.1.0.tgz", + "integrity": "sha512-4t5WX60sL3zGJF/CtZsUQTs3UrZEDO2P7pEaElrekbLqkWPYkgqNW1oeiNYC6xXifBnT9dVBOnNQRvOE9riU9w==", + "dev": true, + "license": "Apache-2.0", + "dependencies": { + "@smithy/is-array-buffer": "^4.0.0", + "@smithy/protocol-http": "^5.1.0", + "@smithy/types": "^4.2.0", + "@smithy/util-hex-encoding": "^4.0.0", + "@smithy/util-middleware": "^4.0.2", + "@smithy/util-uri-escape": "^4.0.0", + "@smithy/util-utf8": "^4.0.0", + "tslib": "^2.6.2" + }, + "engines": { + "node": ">=18.0.0" + } + }, + "node_modules/@smithy/smithy-client": { + "version": "4.2.2", + "resolved": "https://registry.npmjs.org/@smithy/smithy-client/-/smithy-client-4.2.2.tgz", + "integrity": "sha512-3AnHfsMdq9Wg7+3BeR1HuLWI9+DMA/SoHVpCWq6xSsa52ikNd6nlF/wFzdpHyGtVa+Aji6lMgvwOF4sGcVA7SA==", + "dev": true, + "license": "Apache-2.0", + "dependencies": { + "@smithy/core": "^3.3.1", + "@smithy/middleware-endpoint": "^4.1.2", + "@smithy/middleware-stack": "^4.0.2", + "@smithy/protocol-http": "^5.1.0", + "@smithy/types": "^4.2.0", + "@smithy/util-stream": "^4.2.0", + "tslib": "^2.6.2" + }, + "engines": { + "node": ">=18.0.0" + } + }, + "node_modules/@smithy/types": { + "version": "4.2.0", + "resolved": "https://registry.npmjs.org/@smithy/types/-/types-4.2.0.tgz", + "integrity": "sha512-7eMk09zQKCO+E/ivsjQv+fDlOupcFUCSC/L2YUPgwhvowVGWbPQHjEFcmjt7QQ4ra5lyowS92SV53Zc6XD4+fg==", + "dev": true, + "license": "Apache-2.0", + "dependencies": { + "tslib": "^2.6.2" + }, + "engines": { + "node": ">=18.0.0" + } + }, + "node_modules/@smithy/url-parser": { + "version": "4.0.2", + "resolved": "https://registry.npmjs.org/@smithy/url-parser/-/url-parser-4.0.2.tgz", + "integrity": "sha512-Bm8n3j2ScqnT+kJaClSVCMeiSenK6jVAzZCNewsYWuZtnBehEz4r2qP0riZySZVfzB+03XZHJeqfmJDkeeSLiQ==", + "dev": true, + "license": "Apache-2.0", + "dependencies": { + "@smithy/querystring-parser": "^4.0.2", + "@smithy/types": "^4.2.0", + "tslib": "^2.6.2" + }, + "engines": { + "node": ">=18.0.0" + } + }, + "node_modules/@smithy/util-base64": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/@smithy/util-base64/-/util-base64-4.0.0.tgz", + "integrity": "sha512-CvHfCmO2mchox9kjrtzoHkWHxjHZzaFojLc8quxXY7WAAMAg43nuxwv95tATVgQFNDwd4M9S1qFzj40Ul41Kmg==", + "dev": true, + "license": "Apache-2.0", + "dependencies": { + "@smithy/util-buffer-from": "^4.0.0", + "@smithy/util-utf8": "^4.0.0", + "tslib": "^2.6.2" + }, + "engines": { + "node": ">=18.0.0" + } + }, + "node_modules/@smithy/util-body-length-browser": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/@smithy/util-body-length-browser/-/util-body-length-browser-4.0.0.tgz", + "integrity": "sha512-sNi3DL0/k64/LO3A256M+m3CDdG6V7WKWHdAiBBMUN8S3hK3aMPhwnPik2A/a2ONN+9doY9UxaLfgqsIRg69QA==", + "dev": true, + "license": "Apache-2.0", + "dependencies": { + "tslib": "^2.6.2" + }, + "engines": { + "node": ">=18.0.0" + } + }, + "node_modules/@smithy/util-body-length-node": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/@smithy/util-body-length-node/-/util-body-length-node-4.0.0.tgz", + "integrity": "sha512-q0iDP3VsZzqJyje8xJWEJCNIu3lktUGVoSy1KB0UWym2CL1siV3artm+u1DFYTLejpsrdGyCSWBdGNjJzfDPjg==", + "dev": true, + "license": "Apache-2.0", + "dependencies": { + "tslib": "^2.6.2" + }, + "engines": { + "node": ">=18.0.0" + } + }, + "node_modules/@smithy/util-buffer-from": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/@smithy/util-buffer-from/-/util-buffer-from-4.0.0.tgz", + "integrity": "sha512-9TOQ7781sZvddgO8nxueKi3+yGvkY35kotA0Y6BWRajAv8jjmigQ1sBwz0UX47pQMYXJPahSKEKYFgt+rXdcug==", + "dev": true, + "license": "Apache-2.0", + "dependencies": { + "@smithy/is-array-buffer": "^4.0.0", + "tslib": "^2.6.2" + }, + "engines": { + "node": ">=18.0.0" + } + }, + "node_modules/@smithy/util-config-provider": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/@smithy/util-config-provider/-/util-config-provider-4.0.0.tgz", + "integrity": "sha512-L1RBVzLyfE8OXH+1hsJ8p+acNUSirQnWQ6/EgpchV88G6zGBTDPdXiiExei6Z1wR2RxYvxY/XLw6AMNCCt8H3w==", + "dev": true, + "license": "Apache-2.0", + "dependencies": { + "tslib": "^2.6.2" + }, + "engines": { + "node": ">=18.0.0" + } + }, + "node_modules/@smithy/util-defaults-mode-browser": { + "version": "4.0.10", + "resolved": "https://registry.npmjs.org/@smithy/util-defaults-mode-browser/-/util-defaults-mode-browser-4.0.10.tgz", + "integrity": "sha512-2k6fgUNOZ1Rn0gEjvGPGrDEINLG8qSBHsN7xlkkbO+fnHJ36BQPDzhFfMmYSDS8AgzoygqQiDOQ+6Hp2vBTUdA==", + "dev": true, + "license": "Apache-2.0", + "dependencies": { + "@smithy/property-provider": "^4.0.2", + "@smithy/smithy-client": "^4.2.2", + "@smithy/types": "^4.2.0", + "bowser": "^2.11.0", + "tslib": "^2.6.2" + }, + "engines": { + "node": ">=18.0.0" + } + }, + "node_modules/@smithy/util-defaults-mode-node": { + "version": "4.0.10", + "resolved": "https://registry.npmjs.org/@smithy/util-defaults-mode-node/-/util-defaults-mode-node-4.0.10.tgz", + "integrity": "sha512-2XR1WRglLVmoIFts7bODUTgBdVyvkfKNkydHrlsI5VxW9q3s1hnJCuY+f1OHzvj5ue23q4vydM2fjrMjf2HSdQ==", + "dev": true, + "license": "Apache-2.0", + "dependencies": { + "@smithy/config-resolver": "^4.1.0", + "@smithy/credential-provider-imds": "^4.0.2", + "@smithy/node-config-provider": "^4.0.2", + "@smithy/property-provider": "^4.0.2", + "@smithy/smithy-client": "^4.2.2", + "@smithy/types": "^4.2.0", + "tslib": "^2.6.2" + }, + "engines": { + "node": ">=18.0.0" + } + }, + "node_modules/@smithy/util-endpoints": { + "version": "3.0.2", + "resolved": "https://registry.npmjs.org/@smithy/util-endpoints/-/util-endpoints-3.0.2.tgz", + "integrity": "sha512-6QSutU5ZyrpNbnd51zRTL7goojlcnuOB55+F9VBD+j8JpRY50IGamsjlycrmpn8PQkmJucFW8A0LSfXj7jjtLQ==", + "dev": true, + "license": "Apache-2.0", + "dependencies": { + "@smithy/node-config-provider": "^4.0.2", + "@smithy/types": "^4.2.0", + "tslib": "^2.6.2" + }, + "engines": { + "node": ">=18.0.0" + } + }, + "node_modules/@smithy/util-hex-encoding": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/@smithy/util-hex-encoding/-/util-hex-encoding-4.0.0.tgz", + "integrity": "sha512-Yk5mLhHtfIgW2W2WQZWSg5kuMZCVbvhFmC7rV4IO2QqnZdbEFPmQnCcGMAX2z/8Qj3B9hYYNjZOhWym+RwhePw==", + "dev": true, + "license": "Apache-2.0", + "dependencies": { + "tslib": "^2.6.2" + }, + "engines": { + "node": ">=18.0.0" + } + }, + "node_modules/@smithy/util-middleware": { + "version": "4.0.2", + "resolved": "https://registry.npmjs.org/@smithy/util-middleware/-/util-middleware-4.0.2.tgz", + "integrity": "sha512-6GDamTGLuBQVAEuQ4yDQ+ti/YINf/MEmIegrEeg7DdB/sld8BX1lqt9RRuIcABOhAGTA50bRbPzErez7SlDtDQ==", + "dev": true, + "license": "Apache-2.0", + "dependencies": { + "@smithy/types": "^4.2.0", + "tslib": "^2.6.2" + }, + "engines": { + "node": ">=18.0.0" + } + }, + "node_modules/@smithy/util-retry": { + "version": "4.0.3", + "resolved": "https://registry.npmjs.org/@smithy/util-retry/-/util-retry-4.0.3.tgz", + "integrity": "sha512-DPuYjZQDXmKr/sNvy9Spu8R/ESa2e22wXZzSAY6NkjOLj6spbIje/Aq8rT97iUMdDj0qHMRIe+bTxvlU74d9Ng==", + "dev": true, + "license": "Apache-2.0", + "dependencies": { + "@smithy/service-error-classification": "^4.0.3", + "@smithy/types": "^4.2.0", + "tslib": "^2.6.2" + }, + "engines": { + "node": ">=18.0.0" + } + }, + "node_modules/@smithy/util-stream": { + "version": "4.2.0", + "resolved": "https://registry.npmjs.org/@smithy/util-stream/-/util-stream-4.2.0.tgz", + "integrity": "sha512-Vj1TtwWnuWqdgQI6YTUF5hQ/0jmFiOYsc51CSMgj7QfyO+RF4EnT2HNjoviNlOOmgzgvf3f5yno+EiC4vrnaWQ==", + "dev": true, + "license": "Apache-2.0", + "dependencies": { + "@smithy/fetch-http-handler": "^5.0.2", + "@smithy/node-http-handler": "^4.0.4", + "@smithy/types": "^4.2.0", + "@smithy/util-base64": "^4.0.0", + "@smithy/util-buffer-from": "^4.0.0", + "@smithy/util-hex-encoding": "^4.0.0", + "@smithy/util-utf8": "^4.0.0", + "tslib": "^2.6.2" + }, + "engines": { + "node": ">=18.0.0" + } + }, + "node_modules/@smithy/util-uri-escape": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/@smithy/util-uri-escape/-/util-uri-escape-4.0.0.tgz", + "integrity": "sha512-77yfbCbQMtgtTylO9itEAdpPXSog3ZxMe09AEhm0dU0NLTalV70ghDZFR+Nfi1C60jnJoh/Re4090/DuZh2Omg==", + "dev": true, + "license": "Apache-2.0", + "dependencies": { + "tslib": "^2.6.2" + }, + "engines": { + "node": ">=18.0.0" + } + }, + "node_modules/@smithy/util-utf8": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/@smithy/util-utf8/-/util-utf8-4.0.0.tgz", + "integrity": "sha512-b+zebfKCfRdgNJDknHCob3O7FpeYQN6ZG6YLExMcasDHsCXlsXCEuiPZeLnJLpwa5dvPetGlnGCiMHuLwGvFow==", + "dev": true, + "license": "Apache-2.0", + "dependencies": { + "@smithy/util-buffer-from": "^4.0.0", + "tslib": "^2.6.2" + }, + "engines": { + "node": ">=18.0.0" + } + }, + "node_modules/@smithy/util-waiter": { + "version": "4.0.3", + "resolved": "https://registry.npmjs.org/@smithy/util-waiter/-/util-waiter-4.0.3.tgz", + "integrity": "sha512-JtaY3FxmD+te+KSI2FJuEcfNC9T/DGGVf551babM7fAaXhjJUt7oSYurH1Devxd2+BOSUACCgt3buinx4UnmEA==", + "dev": true, + "license": "Apache-2.0", + "dependencies": { + "@smithy/abort-controller": "^4.0.2", + "@smithy/types": "^4.2.0", + "tslib": "^2.6.2" + }, + "engines": { + "node": ">=18.0.0" + } + }, + "node_modules/@tootallnate/once": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/@tootallnate/once/-/once-2.0.0.tgz", + "integrity": "sha512-XCuKFP5PS55gnMVu3dty8KPatLqUoy/ZYzDzAGCQ8JNFCkLXzmI7vNHCR+XpbZaMWQK/vQubr7PkYq8g470J/A==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">= 10" + } + }, + "node_modules/@traceloop/ai-semantic-conventions": { + "version": "0.13.0", + "resolved": "https://registry.npmjs.org/@traceloop/ai-semantic-conventions/-/ai-semantic-conventions-0.13.0.tgz", + "integrity": "sha512-6aAbaZkeezijSBnsKpVnc+MBXwG+ByDK70gZCexSykkwkwhWSFdVeoXkWUBeLt+STFQWjK5EQE087qkaVC3o+w==", + "license": "Apache-2.0", + "dependencies": { + "@opentelemetry/api": "^1.9.0" + }, + "engines": { + "node": ">=14" + } + }, + "node_modules/@traceloop/instrumentation-anthropic": { + "version": "0.13.0", + "resolved": "https://registry.npmjs.org/@traceloop/instrumentation-anthropic/-/instrumentation-anthropic-0.13.0.tgz", + "integrity": "sha512-SQIx8nhnWOvPNtpyYxog2W+iUwMGxUXNodfDOOhS093YcBPIIL/2Vf2fzQELyZdJAmz1mQxAgxjrKkHypaeWhQ==", + "license": "Apache-2.0", + "dependencies": { + "@opentelemetry/core": "^1.29.0", + "@opentelemetry/instrumentation": "^0.56.0", + "@opentelemetry/semantic-conventions": "^1.28.0", + "@traceloop/ai-semantic-conventions": "^0.13.0", + "tslib": "^2.8.1" + }, + "engines": { + "node": ">=14" + } + }, + "node_modules/@traceloop/instrumentation-anthropic/node_modules/@opentelemetry/core": { + "version": "1.30.1", + "resolved": "https://registry.npmjs.org/@opentelemetry/core/-/core-1.30.1.tgz", + "integrity": "sha512-OOCM2C/QIURhJMuKaekP3TRBxBKxG/TWWA0TL2J6nXUtDnuCtccy49LUJF8xPFXMX+0LMcxFpCo8M9cGY1W6rQ==", + "license": "Apache-2.0", + "dependencies": { + "@opentelemetry/semantic-conventions": "1.28.0" + }, + "engines": { + "node": ">=14" + }, + "peerDependencies": { + "@opentelemetry/api": ">=1.0.0 <1.10.0" + } + }, + "node_modules/@traceloop/instrumentation-anthropic/node_modules/@opentelemetry/semantic-conventions": { + "version": "1.28.0", + "resolved": "https://registry.npmjs.org/@opentelemetry/semantic-conventions/-/semantic-conventions-1.28.0.tgz", + "integrity": "sha512-lp4qAiMTD4sNWW4DbKLBkfiMZ4jbAboJIGOQr5DvciMRI494OapieI9qiODpOt0XBr1LjIDy1xAGAnVs5supTA==", + "license": "Apache-2.0", + "engines": { + "node": ">=14" + } + }, + "node_modules/@traceloop/instrumentation-cohere": { + "version": "0.13.0", + "resolved": "https://registry.npmjs.org/@traceloop/instrumentation-cohere/-/instrumentation-cohere-0.13.0.tgz", + "integrity": "sha512-hTTHJ+lpeGi7M1rw7hkeQiQX7Z4WGmqz7mZWk1DZ3f8lAMCaTU1JmQCtzNnZMysY7+IdDIrETrmoFDJ+srsHUg==", + "license": "Apache-2.0", + "dependencies": { + "@opentelemetry/core": "^1.29.0", + "@opentelemetry/instrumentation": "^0.56.0", + "@opentelemetry/semantic-conventions": "^1.28.0", + "@traceloop/ai-semantic-conventions": "^0.13.0", + "tslib": "^2.8.1" + }, + "engines": { + "node": ">=14" + } + }, + "node_modules/@traceloop/instrumentation-cohere/node_modules/@opentelemetry/core": { + "version": "1.30.1", + "resolved": "https://registry.npmjs.org/@opentelemetry/core/-/core-1.30.1.tgz", + "integrity": "sha512-OOCM2C/QIURhJMuKaekP3TRBxBKxG/TWWA0TL2J6nXUtDnuCtccy49LUJF8xPFXMX+0LMcxFpCo8M9cGY1W6rQ==", + "license": "Apache-2.0", + "dependencies": { + "@opentelemetry/semantic-conventions": "1.28.0" + }, + "engines": { + "node": ">=14" + }, + "peerDependencies": { + "@opentelemetry/api": ">=1.0.0 <1.10.0" + } + }, + "node_modules/@traceloop/instrumentation-cohere/node_modules/@opentelemetry/semantic-conventions": { + "version": "1.28.0", + "resolved": "https://registry.npmjs.org/@opentelemetry/semantic-conventions/-/semantic-conventions-1.28.0.tgz", + "integrity": "sha512-lp4qAiMTD4sNWW4DbKLBkfiMZ4jbAboJIGOQr5DvciMRI494OapieI9qiODpOt0XBr1LjIDy1xAGAnVs5supTA==", + "license": "Apache-2.0", + "engines": { + "node": ">=14" + } + }, + "node_modules/@traceloop/instrumentation-openai": { + "version": "0.13.0", + "resolved": "https://registry.npmjs.org/@traceloop/instrumentation-openai/-/instrumentation-openai-0.13.0.tgz", + "integrity": "sha512-ql9ML/zV4uHc5RnrpuismJluYiVDo9TXxIMqz1PSe2uFuzt6d7RDil9tbjXbwNlCfeyIEBGY/UJZCuUYneXUdw==", + "license": "Apache-2.0", + "dependencies": { + "@opentelemetry/core": "^1.29.0", + "@opentelemetry/instrumentation": "^0.56.0", + "@opentelemetry/semantic-conventions": "^1.28.0", + "@traceloop/ai-semantic-conventions": "^0.13.0", + "js-tiktoken": "^1.0.15", + "tslib": "^2.8.1" + }, + "engines": { + "node": ">=14" + } + }, + "node_modules/@traceloop/instrumentation-openai/node_modules/@opentelemetry/core": { + "version": "1.30.1", + "resolved": "https://registry.npmjs.org/@opentelemetry/core/-/core-1.30.1.tgz", + "integrity": "sha512-OOCM2C/QIURhJMuKaekP3TRBxBKxG/TWWA0TL2J6nXUtDnuCtccy49LUJF8xPFXMX+0LMcxFpCo8M9cGY1W6rQ==", + "license": "Apache-2.0", + "dependencies": { + "@opentelemetry/semantic-conventions": "1.28.0" + }, + "engines": { + "node": ">=14" + }, + "peerDependencies": { + "@opentelemetry/api": ">=1.0.0 <1.10.0" + } + }, + "node_modules/@traceloop/instrumentation-openai/node_modules/@opentelemetry/semantic-conventions": { + "version": "1.28.0", + "resolved": "https://registry.npmjs.org/@opentelemetry/semantic-conventions/-/semantic-conventions-1.28.0.tgz", + "integrity": "sha512-lp4qAiMTD4sNWW4DbKLBkfiMZ4jbAboJIGOQr5DvciMRI494OapieI9qiODpOt0XBr1LjIDy1xAGAnVs5supTA==", + "license": "Apache-2.0", + "engines": { + "node": ">=14" + } + }, + "node_modules/@trivago/prettier-plugin-sort-imports": { + "version": "4.3.0", + "resolved": "https://registry.npmjs.org/@trivago/prettier-plugin-sort-imports/-/prettier-plugin-sort-imports-4.3.0.tgz", + "integrity": "sha512-r3n0onD3BTOVUNPhR4lhVK4/pABGpbA7bW3eumZnYdKaHkf1qEC+Mag6DPbGNuuh0eG8AaYj+YqmVHSiGslaTQ==", + "dev": true, + "license": "Apache-2.0", + "dependencies": { + "@babel/generator": "7.17.7", + "@babel/parser": "^7.20.5", + "@babel/traverse": "7.23.2", + "@babel/types": "7.17.0", + "javascript-natural-sort": "0.7.1", + "lodash": "^4.17.21" + }, + "peerDependencies": { + "@vue/compiler-sfc": "3.x", + "prettier": "2.x - 3.x" + }, + "peerDependenciesMeta": { + "@vue/compiler-sfc": { + "optional": true + } + } + }, + "node_modules/@types/babel__core": { + "version": "7.20.5", + "resolved": "https://registry.npmjs.org/@types/babel__core/-/babel__core-7.20.5.tgz", + "integrity": "sha512-qoQprZvz5wQFJwMDqeseRXWv3rqMvhgpbXFfVyWhbx9X47POIA6i/+dXefEmZKoAgOaTdaIgNSMqMIU61yRyzA==", + "dev": true, + "license": "MIT", + "dependencies": { + "@babel/parser": "^7.20.7", + "@babel/types": "^7.20.7", + "@types/babel__generator": "*", + "@types/babel__template": "*", + "@types/babel__traverse": "*" + } + }, + "node_modules/@types/babel__core/node_modules/@babel/types": { + "version": "7.27.1", + "resolved": "https://registry.npmjs.org/@babel/types/-/types-7.27.1.tgz", + "integrity": "sha512-+EzkxvLNfiUeKMgy/3luqfsCWFRXLb7U6wNQTk60tovuckwB15B191tJWvpp4HjiQWdJkCxO3Wbvc6jlk3Xb2Q==", + "dev": true, + "license": "MIT", + "dependencies": { + "@babel/helper-string-parser": "^7.27.1", + "@babel/helper-validator-identifier": "^7.27.1" + }, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@types/babel__generator": { + "version": "7.27.0", + "resolved": "https://registry.npmjs.org/@types/babel__generator/-/babel__generator-7.27.0.tgz", + "integrity": "sha512-ufFd2Xi92OAVPYsy+P4n7/U7e68fex0+Ee8gSG9KX7eo084CWiQ4sdxktvdl0bOPupXtVJPY19zk6EwWqUQ8lg==", + "dev": true, + "license": "MIT", + "dependencies": { + "@babel/types": "^7.0.0" + } + }, + "node_modules/@types/babel__template": { + "version": "7.4.4", + "resolved": "https://registry.npmjs.org/@types/babel__template/-/babel__template-7.4.4.tgz", + "integrity": "sha512-h/NUaSyG5EyxBIp8YRxo4RMe2/qQgvyowRwVMzhYhBCONbW8PUsg4lkFMrhgZhUe5z3L3MiLDuvyJ/CaPa2A8A==", + "dev": true, + "license": "MIT", + "dependencies": { + "@babel/parser": "^7.1.0", + "@babel/types": "^7.0.0" + } + }, + "node_modules/@types/babel__traverse": { + "version": "7.20.7", + "resolved": "https://registry.npmjs.org/@types/babel__traverse/-/babel__traverse-7.20.7.tgz", + "integrity": "sha512-dkO5fhS7+/oos4ciWxyEyjWe48zmG6wbCheo/G2ZnHx4fs3EU6YC6UM8rk56gAjNJ9P3MTH2jo5jb92/K6wbng==", + "dev": true, + "license": "MIT", + "dependencies": { + "@babel/types": "^7.20.7" + } + }, + "node_modules/@types/babel__traverse/node_modules/@babel/types": { + "version": "7.27.1", + "resolved": "https://registry.npmjs.org/@babel/types/-/types-7.27.1.tgz", + "integrity": "sha512-+EzkxvLNfiUeKMgy/3luqfsCWFRXLb7U6wNQTk60tovuckwB15B191tJWvpp4HjiQWdJkCxO3Wbvc6jlk3Xb2Q==", + "dev": true, + "license": "MIT", + "dependencies": { + "@babel/helper-string-parser": "^7.27.1", + "@babel/helper-validator-identifier": "^7.27.1" + }, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@types/cli-progress": { + "version": "3.11.6", + "resolved": "https://registry.npmjs.org/@types/cli-progress/-/cli-progress-3.11.6.tgz", + "integrity": "sha512-cE3+jb9WRlu+uOSAugewNpITJDt1VF8dHOopPO4IABFc3SXYL5WE/+PTz/FCdZRRfIujiWW3n3aMbv1eIGVRWA==", + "dev": true, + "license": "MIT", + "dependencies": { + "@types/node": "*" + } + }, + "node_modules/@types/eslint": { + "version": "9.6.1", + "resolved": "https://registry.npmjs.org/@types/eslint/-/eslint-9.6.1.tgz", + "integrity": "sha512-FXx2pKgId/WyYo2jXw63kk7/+TY7u7AziEJxJAnSFzHlqTAS3Ync6SvgYAN/k4/PQpnnVuzoMuVnByKK2qp0ag==", + "dev": true, + "license": "MIT", + "dependencies": { + "@types/estree": "*", + "@types/json-schema": "*" + } + }, + "node_modules/@types/eslint-scope": { + "version": "3.7.7", + "resolved": "https://registry.npmjs.org/@types/eslint-scope/-/eslint-scope-3.7.7.tgz", + "integrity": "sha512-MzMFlSLBqNF2gcHWO0G1vP/YQyfvrxZ0bF+u7mzUdZ1/xK4A4sru+nraZz5i3iEIk1l1uyicaDVTB4QbbEkAYg==", + "dev": true, + "license": "MIT", + "dependencies": { + "@types/eslint": "*", + "@types/estree": "*" + } + }, + "node_modules/@types/estree": { + "version": "1.0.7", + "resolved": "https://registry.npmjs.org/@types/estree/-/estree-1.0.7.tgz", + "integrity": "sha512-w28IoSUCJpidD/TGviZwwMJckNESJZXFu7NBZ5YJ4mEUnNraUn9Pm8HSZm/jDF1pDWYKspWE7oVphigUPRakIQ==", + "dev": true, + "license": "MIT" + }, + "node_modules/@types/graceful-fs": { + "version": "4.1.9", + "resolved": "https://registry.npmjs.org/@types/graceful-fs/-/graceful-fs-4.1.9.tgz", + "integrity": "sha512-olP3sd1qOEe5dXTSaFvQG+02VdRXcdytWLAZsAq1PecU8uqQAhkrnbli7DagjtXKW/Bl7YJbUsa8MPcuc8LHEQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "@types/node": "*" + } + }, + "node_modules/@types/istanbul-lib-coverage": { + "version": "2.0.6", + "resolved": "https://registry.npmjs.org/@types/istanbul-lib-coverage/-/istanbul-lib-coverage-2.0.6.tgz", + "integrity": "sha512-2QF/t/auWm0lsy8XtKVPG19v3sSOQlJe/YHZgfjb/KBBHOGSV+J2q/S671rcq9uTBrLAXmZpqJiaQbMT+zNU1w==", + "dev": true, + "license": "MIT" + }, + "node_modules/@types/istanbul-lib-report": { + "version": "3.0.3", + "resolved": "https://registry.npmjs.org/@types/istanbul-lib-report/-/istanbul-lib-report-3.0.3.tgz", + "integrity": "sha512-NQn7AHQnk/RSLOxrBbGyJM/aVQ+pjj5HCgasFxc0K/KhoATfQ/47AyUl15I2yBUpihjmas+a+VJBOqecrFH+uA==", + "dev": true, + "license": "MIT", + "dependencies": { + "@types/istanbul-lib-coverage": "*" + } + }, + "node_modules/@types/istanbul-reports": { + "version": "3.0.4", + "resolved": "https://registry.npmjs.org/@types/istanbul-reports/-/istanbul-reports-3.0.4.tgz", + "integrity": "sha512-pk2B1NWalF9toCRu6gjBzR69syFjP4Od8WRAX+0mmf9lAjCRicLOWc+ZrxZHx/0XRjotgkF9t6iaMJ+aXcOdZQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "@types/istanbul-lib-report": "*" + } + }, + "node_modules/@types/jest": { + "version": "29.5.14", + "resolved": "https://registry.npmjs.org/@types/jest/-/jest-29.5.14.tgz", + "integrity": "sha512-ZN+4sdnLUbo8EVvVc2ao0GFW6oVrQRPn4K2lglySj7APvSrgzxHiNNK99us4WDMi57xxA2yggblIAMNhXOotLQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "expect": "^29.0.0", + "pretty-format": "^29.0.0" + } + }, + "node_modules/@types/jsdom": { + "version": "20.0.1", + "resolved": "https://registry.npmjs.org/@types/jsdom/-/jsdom-20.0.1.tgz", + "integrity": "sha512-d0r18sZPmMQr1eG35u12FZfhIXNrnsPU/g5wvRKCUf/tOGilKKwYMYGqh33BNR6ba+2gkHw1EUiHoN3mn7E5IQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "@types/node": "*", + "@types/tough-cookie": "*", + "parse5": "^7.0.0" + } + }, + "node_modules/@types/json-schema": { + "version": "7.0.15", + "resolved": "https://registry.npmjs.org/@types/json-schema/-/json-schema-7.0.15.tgz", + "integrity": "sha512-5+fP8P8MFNC+AyZCDxrB2pkZFPGzqQWUzpSeuuVLvm8VMcorNYavBqoFcxK8bQz4Qsbn4oUEEem4wDLfcysGHA==", + "dev": true, + "license": "MIT" + }, + "node_modules/@types/lodash": { + "version": "4.14.74", + "resolved": "https://registry.npmjs.org/@types/lodash/-/lodash-4.14.74.tgz", + "integrity": "sha512-BZknw3E/z3JmCLqQVANcR17okqVTPZdlxvcIz0fJiJVLUCbSH1hK3zs9r634PVSmrzAxN+n/fxlVRiYoArdOIQ==", + "dev": true, + "license": "MIT" + }, + "node_modules/@types/node": { + "version": "18.19.96", + "resolved": "https://registry.npmjs.org/@types/node/-/node-18.19.96.tgz", + "integrity": "sha512-PzBvgsZ7YdFs/Kng1BSW8IGv68/SPcOxYYhT7luxD7QyzIhFS1xPTpfK3K9eHBa7hVwlW+z8nN0mOd515yaduQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "undici-types": "~5.26.4" + } + }, + "node_modules/@types/node-fetch": { + "version": "2.6.12", + "resolved": "https://registry.npmjs.org/@types/node-fetch/-/node-fetch-2.6.12.tgz", + "integrity": "sha512-8nneRWKCg3rMtF69nLQJnOYUcbafYeFSjqkw3jCRLsqkWFlHaoQrr5mXmofFGOx3DKn7UfmBMyov8ySvLRVldA==", + "dev": true, + "license": "MIT", + "dependencies": { + "@types/node": "*", + "form-data": "^4.0.0" + } + }, + "node_modules/@types/qs": { + "version": "6.9.18", + "resolved": "https://registry.npmjs.org/@types/qs/-/qs-6.9.18.tgz", + "integrity": "sha512-kK7dgTYDyGqS+e2Q4aK9X3D7q234CIZ1Bv0q/7Z5IwRDoADNU81xXJK/YVyLbLTZCoIwUoDoffFeF+p/eIklAA==", + "dev": true, + "license": "MIT" + }, + "node_modules/@types/readable-stream": { + "version": "4.0.18", + "resolved": "https://registry.npmjs.org/@types/readable-stream/-/readable-stream-4.0.18.tgz", + "integrity": "sha512-21jK/1j+Wg+7jVw1xnSwy/2Q1VgVjWuFssbYGTREPUBeZ+rqVFl2udq0IkxzPC0ZhOzVceUbyIACFZKLqKEBlA==", + "dev": true, + "license": "MIT", + "dependencies": { + "@types/node": "*", + "safe-buffer": "~5.1.1" + } + }, + "node_modules/@types/shimmer": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/@types/shimmer/-/shimmer-1.2.0.tgz", + "integrity": "sha512-UE7oxhQLLd9gub6JKIAhDq06T0F6FnztwMNRvYgjeQSBeMc1ZG/tA47EwfduvkuQS8apbkM/lpLpWsaCeYsXVg==", + "license": "MIT" + }, + "node_modules/@types/stack-utils": { + "version": "2.0.3", + "resolved": "https://registry.npmjs.org/@types/stack-utils/-/stack-utils-2.0.3.tgz", + "integrity": "sha512-9aEbYZ3TbYMznPdcdr3SmIrLXwC/AKZXQeCf9Pgao5CKb8CyHuEX5jzWPTkvregvhRJHcpRO6BFoGW9ycaOkYw==", + "dev": true, + "license": "MIT" + }, + "node_modules/@types/tough-cookie": { + "version": "4.0.5", + "resolved": "https://registry.npmjs.org/@types/tough-cookie/-/tough-cookie-4.0.5.tgz", + "integrity": "sha512-/Ad8+nIOV7Rl++6f1BdKxFSMgmoqEoYbHRpPcx3JEfv8VRsQe9Z4mCXeJBzxs7mbHY/XOZZuXlRNfhpVPbs6ZA==", + "dev": true, + "license": "MIT" + }, + "node_modules/@types/url-join": { + "version": "4.0.1", + "resolved": "https://registry.npmjs.org/@types/url-join/-/url-join-4.0.1.tgz", + "integrity": "sha512-wDXw9LEEUHyV+7UWy7U315nrJGJ7p1BzaCxDpEoLr789Dk1WDVMMlf3iBfbG2F8NdWnYyFbtTxUn2ZNbm1Q4LQ==", + "dev": true, + "license": "MIT" + }, + "node_modules/@types/uuid": { + "version": "9.0.8", + "resolved": "https://registry.npmjs.org/@types/uuid/-/uuid-9.0.8.tgz", + "integrity": "sha512-jg+97EGIcY9AGHJJRaaPVgetKDsrTgbRjQ5Msgjh/DQKEFl0DtyRr/VCOyD1T2R1MNeWPK/u7JoGhlDZnKBAfA==", + "dev": true, + "license": "MIT" + }, + "node_modules/@types/yargs": { + "version": "17.0.33", + "resolved": "https://registry.npmjs.org/@types/yargs/-/yargs-17.0.33.tgz", + "integrity": "sha512-WpxBCKWPLr4xSsHgz511rFJAM+wS28w2zEO1QDNY5zM/S8ok70NNfztH0xwhqKyaK0OHCbN98LDAZuy1ctxDkA==", + "dev": true, + "license": "MIT", + "dependencies": { + "@types/yargs-parser": "*" + } + }, + "node_modules/@types/yargs-parser": { + "version": "21.0.3", + "resolved": "https://registry.npmjs.org/@types/yargs-parser/-/yargs-parser-21.0.3.tgz", + "integrity": "sha512-I4q9QU9MQv4oEOz4tAHJtNz1cwuLxn2F3xcc2iV5WdqLPpUnj30aUuxt1mAxYTG+oe8CZMV/+6rU4S4gRDzqtQ==", + "dev": true, + "license": "MIT" + }, + "node_modules/@webassemblyjs/ast": { + "version": "1.14.1", + "resolved": "https://registry.npmjs.org/@webassemblyjs/ast/-/ast-1.14.1.tgz", + "integrity": "sha512-nuBEDgQfm1ccRp/8bCQrx1frohyufl4JlbMMZ4P1wpeOfDhF6FQkxZJ1b/e+PLwr6X1Nhw6OLme5usuBWYBvuQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "@webassemblyjs/helper-numbers": "1.13.2", + "@webassemblyjs/helper-wasm-bytecode": "1.13.2" + } + }, + "node_modules/@webassemblyjs/floating-point-hex-parser": { + "version": "1.13.2", + "resolved": "https://registry.npmjs.org/@webassemblyjs/floating-point-hex-parser/-/floating-point-hex-parser-1.13.2.tgz", + "integrity": "sha512-6oXyTOzbKxGH4steLbLNOu71Oj+C8Lg34n6CqRvqfS2O71BxY6ByfMDRhBytzknj9yGUPVJ1qIKhRlAwO1AovA==", + "dev": true, + "license": "MIT" + }, + "node_modules/@webassemblyjs/helper-api-error": { + "version": "1.13.2", + "resolved": "https://registry.npmjs.org/@webassemblyjs/helper-api-error/-/helper-api-error-1.13.2.tgz", + "integrity": "sha512-U56GMYxy4ZQCbDZd6JuvvNV/WFildOjsaWD3Tzzvmw/mas3cXzRJPMjP83JqEsgSbyrmaGjBfDtV7KDXV9UzFQ==", + "dev": true, + "license": "MIT" + }, + "node_modules/@webassemblyjs/helper-buffer": { + "version": "1.14.1", + "resolved": "https://registry.npmjs.org/@webassemblyjs/helper-buffer/-/helper-buffer-1.14.1.tgz", + "integrity": "sha512-jyH7wtcHiKssDtFPRB+iQdxlDf96m0E39yb0k5uJVhFGleZFoNw1c4aeIcVUPPbXUVJ94wwnMOAqUHyzoEPVMA==", + "dev": true, + "license": "MIT" + }, + "node_modules/@webassemblyjs/helper-numbers": { + "version": "1.13.2", + "resolved": "https://registry.npmjs.org/@webassemblyjs/helper-numbers/-/helper-numbers-1.13.2.tgz", + "integrity": "sha512-FE8aCmS5Q6eQYcV3gI35O4J789wlQA+7JrqTTpJqn5emA4U2hvwJmvFRC0HODS+3Ye6WioDklgd6scJ3+PLnEA==", + "dev": true, + "license": "MIT", + "dependencies": { + "@webassemblyjs/floating-point-hex-parser": "1.13.2", + "@webassemblyjs/helper-api-error": "1.13.2", + "@xtuc/long": "4.2.2" + } + }, + "node_modules/@webassemblyjs/helper-wasm-bytecode": { + "version": "1.13.2", + "resolved": "https://registry.npmjs.org/@webassemblyjs/helper-wasm-bytecode/-/helper-wasm-bytecode-1.13.2.tgz", + "integrity": "sha512-3QbLKy93F0EAIXLh0ogEVR6rOubA9AoZ+WRYhNbFyuB70j3dRdwH9g+qXhLAO0kiYGlg3TxDV+I4rQTr/YNXkA==", + "dev": true, + "license": "MIT" + }, + "node_modules/@webassemblyjs/helper-wasm-section": { + "version": "1.14.1", + "resolved": "https://registry.npmjs.org/@webassemblyjs/helper-wasm-section/-/helper-wasm-section-1.14.1.tgz", + "integrity": "sha512-ds5mXEqTJ6oxRoqjhWDU83OgzAYjwsCV8Lo/N+oRsNDmx/ZDpqalmrtgOMkHwxsG0iI//3BwWAErYRHtgn0dZw==", + "dev": true, + "license": "MIT", + "dependencies": { + "@webassemblyjs/ast": "1.14.1", + "@webassemblyjs/helper-buffer": "1.14.1", + "@webassemblyjs/helper-wasm-bytecode": "1.13.2", + "@webassemblyjs/wasm-gen": "1.14.1" + } + }, + "node_modules/@webassemblyjs/ieee754": { + "version": "1.13.2", + "resolved": "https://registry.npmjs.org/@webassemblyjs/ieee754/-/ieee754-1.13.2.tgz", + "integrity": "sha512-4LtOzh58S/5lX4ITKxnAK2USuNEvpdVV9AlgGQb8rJDHaLeHciwG4zlGr0j/SNWlr7x3vO1lDEsuePvtcDNCkw==", + "dev": true, + "license": "MIT", + "dependencies": { + "@xtuc/ieee754": "^1.2.0" + } + }, + "node_modules/@webassemblyjs/leb128": { + "version": "1.13.2", + "resolved": "https://registry.npmjs.org/@webassemblyjs/leb128/-/leb128-1.13.2.tgz", + "integrity": "sha512-Lde1oNoIdzVzdkNEAWZ1dZ5orIbff80YPdHx20mrHwHrVNNTjNr8E3xz9BdpcGqRQbAEa+fkrCb+fRFTl/6sQw==", + "dev": true, + "license": "Apache-2.0", + "dependencies": { + "@xtuc/long": "4.2.2" + } + }, + "node_modules/@webassemblyjs/utf8": { + "version": "1.13.2", + "resolved": "https://registry.npmjs.org/@webassemblyjs/utf8/-/utf8-1.13.2.tgz", + "integrity": "sha512-3NQWGjKTASY1xV5m7Hr0iPeXD9+RDobLll3T9d2AO+g3my8xy5peVyjSag4I50mR1bBSN/Ct12lo+R9tJk0NZQ==", + "dev": true, + "license": "MIT" + }, + "node_modules/@webassemblyjs/wasm-edit": { + "version": "1.14.1", + "resolved": "https://registry.npmjs.org/@webassemblyjs/wasm-edit/-/wasm-edit-1.14.1.tgz", + "integrity": "sha512-RNJUIQH/J8iA/1NzlE4N7KtyZNHi3w7at7hDjvRNm5rcUXa00z1vRz3glZoULfJ5mpvYhLybmVcwcjGrC1pRrQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "@webassemblyjs/ast": "1.14.1", + "@webassemblyjs/helper-buffer": "1.14.1", + "@webassemblyjs/helper-wasm-bytecode": "1.13.2", + "@webassemblyjs/helper-wasm-section": "1.14.1", + "@webassemblyjs/wasm-gen": "1.14.1", + "@webassemblyjs/wasm-opt": "1.14.1", + "@webassemblyjs/wasm-parser": "1.14.1", + "@webassemblyjs/wast-printer": "1.14.1" + } + }, + "node_modules/@webassemblyjs/wasm-gen": { + "version": "1.14.1", + "resolved": "https://registry.npmjs.org/@webassemblyjs/wasm-gen/-/wasm-gen-1.14.1.tgz", + "integrity": "sha512-AmomSIjP8ZbfGQhumkNvgC33AY7qtMCXnN6bL2u2Js4gVCg8fp735aEiMSBbDR7UQIj90n4wKAFUSEd0QN2Ukg==", + "dev": true, + "license": "MIT", + "dependencies": { + "@webassemblyjs/ast": "1.14.1", + "@webassemblyjs/helper-wasm-bytecode": "1.13.2", + "@webassemblyjs/ieee754": "1.13.2", + "@webassemblyjs/leb128": "1.13.2", + "@webassemblyjs/utf8": "1.13.2" + } + }, + "node_modules/@webassemblyjs/wasm-opt": { + "version": "1.14.1", + "resolved": "https://registry.npmjs.org/@webassemblyjs/wasm-opt/-/wasm-opt-1.14.1.tgz", + "integrity": "sha512-PTcKLUNvBqnY2U6E5bdOQcSM+oVP/PmrDY9NzowJjislEjwP/C4an2303MCVS2Mg9d3AJpIGdUFIQQWbPds0Sw==", + "dev": true, + "license": "MIT", + "dependencies": { + "@webassemblyjs/ast": "1.14.1", + "@webassemblyjs/helper-buffer": "1.14.1", + "@webassemblyjs/wasm-gen": "1.14.1", + "@webassemblyjs/wasm-parser": "1.14.1" + } + }, + "node_modules/@webassemblyjs/wasm-parser": { + "version": "1.14.1", + "resolved": "https://registry.npmjs.org/@webassemblyjs/wasm-parser/-/wasm-parser-1.14.1.tgz", + "integrity": "sha512-JLBl+KZ0R5qB7mCnud/yyX08jWFw5MsoalJ1pQ4EdFlgj9VdXKGuENGsiCIjegI1W7p91rUlcB/LB5yRJKNTcQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "@webassemblyjs/ast": "1.14.1", + "@webassemblyjs/helper-api-error": "1.13.2", + "@webassemblyjs/helper-wasm-bytecode": "1.13.2", + "@webassemblyjs/ieee754": "1.13.2", + "@webassemblyjs/leb128": "1.13.2", + "@webassemblyjs/utf8": "1.13.2" + } + }, + "node_modules/@webassemblyjs/wast-printer": { + "version": "1.14.1", + "resolved": "https://registry.npmjs.org/@webassemblyjs/wast-printer/-/wast-printer-1.14.1.tgz", + "integrity": "sha512-kPSSXE6De1XOR820C90RIo2ogvZG+c3KiHzqUoO/F34Y2shGzesfqv7o57xrxovZJH/MetF5UjroJ/R/3isoiw==", + "dev": true, + "license": "MIT", + "dependencies": { + "@webassemblyjs/ast": "1.14.1", + "@xtuc/long": "4.2.2" + } + }, + "node_modules/@xtuc/ieee754": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/@xtuc/ieee754/-/ieee754-1.2.0.tgz", + "integrity": "sha512-DX8nKgqcGwsc0eJSqYt5lwP4DH5FlHnmuWWBRy7X0NcaGR0ZtuyeESgMwTYVEtxmsNGY+qit4QYT/MIYTOTPeA==", + "dev": true, + "license": "BSD-3-Clause" + }, + "node_modules/@xtuc/long": { + "version": "4.2.2", + "resolved": "https://registry.npmjs.org/@xtuc/long/-/long-4.2.2.tgz", + "integrity": "sha512-NuHqBY1PB/D8xU6s/thBgOAiAP7HOYDQ32+BFZILJ8ivkUkAHQnWfn6WhL79Owj1qmUnoN/YPhktdIoucipkAQ==", + "dev": true, + "license": "Apache-2.0" + }, + "node_modules/abab": { + "version": "2.0.6", + "resolved": "https://registry.npmjs.org/abab/-/abab-2.0.6.tgz", + "integrity": "sha512-j2afSsaIENvHZN2B8GOpF566vZ5WVk5opAiMTvWgaQT8DkbOqsTfvNAvHoRGU2zzP8cPoqys+xHTRDWW8L+/BA==", + "deprecated": "Use your platform's native atob() and btoa() methods instead", + "dev": true, + "license": "BSD-3-Clause" + }, + "node_modules/abort-controller": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/abort-controller/-/abort-controller-3.0.0.tgz", + "integrity": "sha512-h8lQ8tacZYnR3vNQTgibj+tODHI5/+l06Au2Pcriv/Gmet0eaj4TwWH41sO9wnHDiQsEj19q0drzdWdeAHtweg==", + "license": "MIT", + "dependencies": { + "event-target-shim": "^5.0.0" + }, + "engines": { + "node": ">=6.5" + } + }, + "node_modules/acorn": { + "version": "8.14.1", + "resolved": "https://registry.npmjs.org/acorn/-/acorn-8.14.1.tgz", + "integrity": "sha512-OvQ/2pUDKmgfCg++xsTX1wGxfTaszcHVcTctW4UJB4hibJx2HXxxO5UmVgyjMa+ZDsiaf5wWLXYpRWMmBI0QHg==", + "license": "MIT", + "bin": { + "acorn": "bin/acorn" + }, + "engines": { + "node": ">=0.4.0" + } + }, + "node_modules/acorn-globals": { + "version": "7.0.1", + "resolved": "https://registry.npmjs.org/acorn-globals/-/acorn-globals-7.0.1.tgz", + "integrity": "sha512-umOSDSDrfHbTNPuNpC2NSnnA3LUrqpevPb4T9jRx4MagXNS0rs+gwiTcAvqCRmsD6utzsrzNt+ebm00SNWiC3Q==", + "dev": true, + "license": "MIT", + "dependencies": { + "acorn": "^8.1.0", + "acorn-walk": "^8.0.2" + } + }, + "node_modules/acorn-import-attributes": { + "version": "1.9.5", + "resolved": "https://registry.npmjs.org/acorn-import-attributes/-/acorn-import-attributes-1.9.5.tgz", + "integrity": "sha512-n02Vykv5uA3eHGM/Z2dQrcD56kL8TyDb2p1+0P83PClMnC/nc+anbQRhIOWnSq4Ke/KvDPrY3C9hDtC/A3eHnQ==", + "license": "MIT", + "peerDependencies": { + "acorn": "^8" + } + }, + "node_modules/acorn-walk": { + "version": "8.3.4", + "resolved": "https://registry.npmjs.org/acorn-walk/-/acorn-walk-8.3.4.tgz", + "integrity": "sha512-ueEepnujpqee2o5aIYnvHU6C0A42MNdsIDeqy5BydrkuC5R1ZuUFnm27EeFJGoEHJQgn3uleRvmTXaJgfXbt4g==", + "dev": true, + "license": "MIT", + "dependencies": { + "acorn": "^8.11.0" + }, + "engines": { + "node": ">=0.4.0" + } + }, + "node_modules/agent-base": { + "version": "6.0.2", + "resolved": "https://registry.npmjs.org/agent-base/-/agent-base-6.0.2.tgz", + "integrity": "sha512-RZNwNclF7+MS/8bDg70amg32dyeZGZxiDuQmZxKLAlQjr3jGyLx+4Kkk58UO7D2QdgFIQCovuSuZESne6RG6XQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "debug": "4" + }, + "engines": { + "node": ">= 6.0.0" + } + }, + "node_modules/agentkeepalive": { + "version": "4.6.0", + "resolved": "https://registry.npmjs.org/agentkeepalive/-/agentkeepalive-4.6.0.tgz", + "integrity": "sha512-kja8j7PjmncONqaTsB8fQ+wE2mSU2DJ9D4XKoJ5PFWIdRMa6SLSN1ff4mOr4jCbfRSsxR4keIiySJU0N9T5hIQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "humanize-ms": "^1.2.1" + }, + "engines": { + "node": ">= 8.0.0" + } + }, + "node_modules/ajv": { + "version": "8.17.1", + "resolved": "https://registry.npmjs.org/ajv/-/ajv-8.17.1.tgz", + "integrity": "sha512-B/gBuNg5SiMTrPkC+A2+cW0RszwxYmn6VYxB/inlBStS5nx6xHIt/ehKRhIMhqusl7a8LjQoZnjCs5vhwxOQ1g==", + "dev": true, + "license": "MIT", + "dependencies": { + "fast-deep-equal": "^3.1.3", + "fast-uri": "^3.0.1", + "json-schema-traverse": "^1.0.0", + "require-from-string": "^2.0.2" + }, + "funding": { + "type": "github", + "url": "https://github.com/sponsors/epoberezkin" + } + }, + "node_modules/ajv-formats": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/ajv-formats/-/ajv-formats-2.1.1.tgz", + "integrity": "sha512-Wx0Kx52hxE7C18hkMEggYlEifqWZtYaRgouJor+WMdPnQyEK13vgEWyVNup7SoeeoLMsr4kf5h6dOW11I15MUA==", + "dev": true, + "license": "MIT", + "dependencies": { + "ajv": "^8.0.0" + }, + "peerDependencies": { + "ajv": "^8.0.0" + }, + "peerDependenciesMeta": { + "ajv": { + "optional": true + } + } + }, + "node_modules/ajv-keywords": { + "version": "5.1.0", + "resolved": "https://registry.npmjs.org/ajv-keywords/-/ajv-keywords-5.1.0.tgz", + "integrity": "sha512-YCS/JNFAUyr5vAuhk1DWm1CBxRHW9LbJ2ozWeemrIqpbsqKjHVxYPyi5GC0rjZIT5JxJ3virVTS8wk4i/Z+krw==", + "dev": true, + "license": "MIT", + "dependencies": { + "fast-deep-equal": "^3.1.3" + }, + "peerDependencies": { + "ajv": "^8.8.2" + } + }, + "node_modules/ansi-escapes": { + "version": "4.3.2", + "resolved": "https://registry.npmjs.org/ansi-escapes/-/ansi-escapes-4.3.2.tgz", + "integrity": "sha512-gKXj5ALrKWQLsYG9jlTRmR/xKluxHV+Z9QEwNIgCfM1/uwPMCuzVVnh5mwTd+OuBZcwSIMbqssNWRm1lE51QaQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "type-fest": "^0.21.3" + }, + "engines": { + "node": ">=8" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/ansi-regex": { + "version": "5.0.1", + "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-5.0.1.tgz", + "integrity": "sha512-quJQXlTSUGL2LH9SUXo8VwsY4soanhgo6LNSm84E1LBcE8s3O0wpdiRzyR9z/ZZJMlMWv37qOOb9pdJlMUEKFQ==", + "license": "MIT", + "engines": { + "node": ">=8" + } + }, + "node_modules/ansi-styles": { + "version": "4.3.0", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", + "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", + "dev": true, + "license": "MIT", + "dependencies": { + "color-convert": "^2.0.1" + }, + "engines": { + "node": ">=8" + }, + "funding": { + "url": "https://github.com/chalk/ansi-styles?sponsor=1" + } + }, + "node_modules/anymatch": { + "version": "3.1.3", + "resolved": "https://registry.npmjs.org/anymatch/-/anymatch-3.1.3.tgz", + "integrity": "sha512-KMReFUr0B4t+D+OBkjR3KYqvocp2XaSzO55UcB6mgQMd3KbcE+mWTyvVV7D/zsdEbNnV6acZUutkiHQXvTr1Rw==", + "dev": true, + "license": "ISC", + "dependencies": { + "normalize-path": "^3.0.0", + "picomatch": "^2.0.4" + }, + "engines": { + "node": ">= 8" + } + }, + "node_modules/argparse": { + "version": "1.0.10", + "resolved": "https://registry.npmjs.org/argparse/-/argparse-1.0.10.tgz", + "integrity": "sha512-o5Roy6tNG4SL/FOkCAN6RzjiakZS25RLYFrcMttJqbdd8BWrnA+fGz57iN5Pb06pvBGvl5gQ0B48dJlslXvoTg==", + "dev": true, + "license": "MIT", + "dependencies": { + "sprintf-js": "~1.0.2" + } + }, + "node_modules/async": { + "version": "3.2.6", + "resolved": "https://registry.npmjs.org/async/-/async-3.2.6.tgz", + "integrity": "sha512-htCUDlxyyCLMgaM3xXg0C0LW2xqfuQ6p05pCEIsXuyQ+a1koYKTuBMzRNwmybfLgvJDMd0r1LTn4+E0Ti6C2AA==", + "dev": true, + "license": "MIT" + }, + "node_modules/asynckit": { + "version": "0.4.0", + "resolved": "https://registry.npmjs.org/asynckit/-/asynckit-0.4.0.tgz", + "integrity": "sha512-Oei9OH4tRh0YqU3GxhX79dM/mwVgvbZJaSNaRk+bshkj0S5cfHcgYakreBjrHwatXKbz+IoIdYLxrKim2MjW0Q==", + "license": "MIT" + }, + "node_modules/babel-jest": { + "version": "29.7.0", + "resolved": "https://registry.npmjs.org/babel-jest/-/babel-jest-29.7.0.tgz", + "integrity": "sha512-BrvGY3xZSwEcCzKvKsCi2GgHqDqsYkOP4/by5xCgIwGXQxIEh+8ew3gmrE1y7XRR6LHZIj6yLYnUi/mm2KXKBg==", + "dev": true, + "license": "MIT", + "dependencies": { + "@jest/transform": "^29.7.0", + "@types/babel__core": "^7.1.14", + "babel-plugin-istanbul": "^6.1.1", + "babel-preset-jest": "^29.6.3", + "chalk": "^4.0.0", + "graceful-fs": "^4.2.9", + "slash": "^3.0.0" + }, + "engines": { + "node": "^14.15.0 || ^16.10.0 || >=18.0.0" + }, + "peerDependencies": { + "@babel/core": "^7.8.0" + } + }, + "node_modules/babel-plugin-istanbul": { + "version": "6.1.1", + "resolved": "https://registry.npmjs.org/babel-plugin-istanbul/-/babel-plugin-istanbul-6.1.1.tgz", + "integrity": "sha512-Y1IQok9821cC9onCx5otgFfRm7Lm+I+wwxOx738M/WLPZ9Q42m4IG5W0FNX8WLL2gYMZo3JkuXIH2DOpWM+qwA==", + "dev": true, + "license": "BSD-3-Clause", + "dependencies": { + "@babel/helper-plugin-utils": "^7.0.0", + "@istanbuljs/load-nyc-config": "^1.0.0", + "@istanbuljs/schema": "^0.1.2", + "istanbul-lib-instrument": "^5.0.4", + "test-exclude": "^6.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/babel-plugin-istanbul/node_modules/istanbul-lib-instrument": { + "version": "5.2.1", + "resolved": "https://registry.npmjs.org/istanbul-lib-instrument/-/istanbul-lib-instrument-5.2.1.tgz", + "integrity": "sha512-pzqtp31nLv/XFOzXGuvhCb8qhjmTVo5vjVk19XE4CRlSWz0KoeJ3bw9XsA7nOp9YBf4qHjwBxkDzKcME/J29Yg==", + "dev": true, + "license": "BSD-3-Clause", + "dependencies": { + "@babel/core": "^7.12.3", + "@babel/parser": "^7.14.7", + "@istanbuljs/schema": "^0.1.2", + "istanbul-lib-coverage": "^3.2.0", + "semver": "^6.3.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/babel-plugin-istanbul/node_modules/semver": { + "version": "6.3.1", + "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.1.tgz", + "integrity": "sha512-BR7VvDCVHO+q2xBEWskxS6DJE1qRnb7DxzUrogb71CWoSficBxYsiAGd+Kl0mmq/MprG9yArRkyrQxTO6XjMzA==", + "dev": true, + "license": "ISC", + "bin": { + "semver": "bin/semver.js" + } + }, + "node_modules/babel-plugin-jest-hoist": { + "version": "29.6.3", + "resolved": "https://registry.npmjs.org/babel-plugin-jest-hoist/-/babel-plugin-jest-hoist-29.6.3.tgz", + "integrity": "sha512-ESAc/RJvGTFEzRwOTT4+lNDk/GNHMkKbNzsvT0qKRfDyyYTskxB5rnU2njIDYVxXCBHHEI1c0YwHob3WaYujOg==", + "dev": true, + "license": "MIT", + "dependencies": { + "@babel/template": "^7.3.3", + "@babel/types": "^7.3.3", + "@types/babel__core": "^7.1.14", + "@types/babel__traverse": "^7.0.6" + }, + "engines": { + "node": "^14.15.0 || ^16.10.0 || >=18.0.0" + } + }, + "node_modules/babel-preset-current-node-syntax": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/babel-preset-current-node-syntax/-/babel-preset-current-node-syntax-1.1.0.tgz", + "integrity": "sha512-ldYss8SbBlWva1bs28q78Ju5Zq1F+8BrqBZZ0VFhLBvhh6lCpC2o3gDJi/5DRLs9FgYZCnmPYIVFU4lRXCkyUw==", + "dev": true, + "license": "MIT", + "dependencies": { + "@babel/plugin-syntax-async-generators": "^7.8.4", + "@babel/plugin-syntax-bigint": "^7.8.3", + "@babel/plugin-syntax-class-properties": "^7.12.13", + "@babel/plugin-syntax-class-static-block": "^7.14.5", + "@babel/plugin-syntax-import-attributes": "^7.24.7", + "@babel/plugin-syntax-import-meta": "^7.10.4", + "@babel/plugin-syntax-json-strings": "^7.8.3", + "@babel/plugin-syntax-logical-assignment-operators": "^7.10.4", + "@babel/plugin-syntax-nullish-coalescing-operator": "^7.8.3", + "@babel/plugin-syntax-numeric-separator": "^7.10.4", + "@babel/plugin-syntax-object-rest-spread": "^7.8.3", + "@babel/plugin-syntax-optional-catch-binding": "^7.8.3", + "@babel/plugin-syntax-optional-chaining": "^7.8.3", + "@babel/plugin-syntax-private-property-in-object": "^7.14.5", + "@babel/plugin-syntax-top-level-await": "^7.14.5" + }, + "peerDependencies": { + "@babel/core": "^7.0.0" + } + }, + "node_modules/babel-preset-jest": { + "version": "29.6.3", + "resolved": "https://registry.npmjs.org/babel-preset-jest/-/babel-preset-jest-29.6.3.tgz", + "integrity": "sha512-0B3bhxR6snWXJZtR/RliHTDPRgn1sNHOR0yVtq/IiQFyuOVjFS+wuio/R4gSNkyYmKmJB4wGZv2NZanmKmTnNA==", + "dev": true, + "license": "MIT", + "dependencies": { + "babel-plugin-jest-hoist": "^29.6.3", + "babel-preset-current-node-syntax": "^1.0.0" + }, + "engines": { + "node": "^14.15.0 || ^16.10.0 || >=18.0.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0" + } + }, + "node_modules/balanced-match": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/balanced-match/-/balanced-match-1.0.2.tgz", + "integrity": "sha512-3oSeUO0TMV67hN1AmbXsK4yaqU7tjiHlbxRDZOpH0KW9+CeX4bRAaX0Anxt0tx2MrpRpWwQaPwIlISEJhYU5Pw==", + "dev": true, + "license": "MIT" + }, + "node_modules/base64-js": { + "version": "1.5.1", + "resolved": "https://registry.npmjs.org/base64-js/-/base64-js-1.5.1.tgz", + "integrity": "sha512-AKpaYlHn8t4SVbOHCy+b5+KKgvR4vrsD8vbvrbiQJps7fKDTkjkDry6ji0rUJjC0kzbNePLwzxq8iypo41qeWA==", + "funding": [ + { + "type": "github", + "url": "https://github.com/sponsors/feross" + }, + { + "type": "patreon", + "url": "https://www.patreon.com/feross" + }, + { + "type": "consulting", + "url": "https://feross.org/support" + } + ], + "license": "MIT" + }, + "node_modules/bowser": { + "version": "2.11.0", + "resolved": "https://registry.npmjs.org/bowser/-/bowser-2.11.0.tgz", + "integrity": "sha512-AlcaJBi/pqqJBIQ8U9Mcpc9i8Aqxn88Skv5d+xBX006BY5u8N3mGLHa5Lgppa7L/HfwgwLgZ6NYs+Ag6uUmJRA==", + "dev": true, + "license": "MIT" + }, + "node_modules/brace-expansion": { + "version": "1.1.11", + "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-1.1.11.tgz", + "integrity": "sha512-iCuPHDFgrHX7H2vEI/5xpz07zSHB00TpugqhmYtVmMO6518mCuRMoOYFldEBl0g187ufozdaHgWKcYFb61qGiA==", + "dev": true, + "license": "MIT", + "dependencies": { + "balanced-match": "^1.0.0", + "concat-map": "0.0.1" + } + }, + "node_modules/braces": { + "version": "3.0.3", + "resolved": "https://registry.npmjs.org/braces/-/braces-3.0.3.tgz", + "integrity": "sha512-yQbXgO/OSZVD2IsiLlro+7Hf6Q18EJrKSEsdoMzKePKXct3gvD8oLcOQdIzGupr5Fj+EDe8gO/lxc1BzfMpxvA==", + "dev": true, + "license": "MIT", + "dependencies": { + "fill-range": "^7.1.1" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/browserslist": { + "version": "4.24.5", + "resolved": "https://registry.npmjs.org/browserslist/-/browserslist-4.24.5.tgz", + "integrity": "sha512-FDToo4Wo82hIdgc1CQ+NQD0hEhmpPjrZ3hiUgwgOG6IuTdlpr8jdjyG24P6cNP1yJpTLzS5OcGgSw0xmDU1/Tw==", + "dev": true, + "funding": [ + { + "type": "opencollective", + "url": "https://opencollective.com/browserslist" + }, + { + "type": "tidelift", + "url": "https://tidelift.com/funding/github/npm/browserslist" + }, + { + "type": "github", + "url": "https://github.com/sponsors/ai" + } + ], + "license": "MIT", + "dependencies": { + "caniuse-lite": "^1.0.30001716", + "electron-to-chromium": "^1.5.149", + "node-releases": "^2.0.19", + "update-browserslist-db": "^1.1.3" + }, + "bin": { + "browserslist": "cli.js" + }, + "engines": { + "node": "^6 || ^7 || ^8 || ^9 || ^10 || ^11 || ^12 || >=13.7" + } + }, + "node_modules/bs-logger": { + "version": "0.2.6", + "resolved": "https://registry.npmjs.org/bs-logger/-/bs-logger-0.2.6.tgz", + "integrity": "sha512-pd8DCoxmbgc7hyPKOvxtqNcjYoOsABPQdcCUjGp3d42VR2CX1ORhk2A87oqqu5R1kk+76nsxZupkmyd+MVtCog==", + "dev": true, + "license": "MIT", + "dependencies": { + "fast-json-stable-stringify": "2.x" + }, + "engines": { + "node": ">= 6" + } + }, + "node_modules/bser": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/bser/-/bser-2.1.1.tgz", + "integrity": "sha512-gQxTNE/GAfIIrmHLUE3oJyp5FO6HRBfhjnw4/wMmA63ZGDJnWBmgY/lyQBpnDUkGmAhbSe39tx2d/iTOAfglwQ==", + "dev": true, + "license": "Apache-2.0", + "dependencies": { + "node-int64": "^0.4.0" + } + }, + "node_modules/buffer": { + "version": "6.0.3", + "resolved": "https://registry.npmjs.org/buffer/-/buffer-6.0.3.tgz", + "integrity": "sha512-FTiCpNxtwiZZHEZbcbTIcZjERVICn9yq/pDFkTl95/AxzD1naBctN7YO68riM/gLSDY7sdrMby8hofADYuuqOA==", + "funding": [ + { + "type": "github", + "url": "https://github.com/sponsors/feross" + }, + { + "type": "patreon", + "url": "https://www.patreon.com/feross" + }, + { + "type": "consulting", + "url": "https://feross.org/support" + } + ], + "license": "MIT", + "dependencies": { + "base64-js": "^1.3.1", + "ieee754": "^1.2.1" + } + }, + "node_modules/buffer-from": { + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/buffer-from/-/buffer-from-1.1.2.tgz", + "integrity": "sha512-E+XQCRwSbaaiChtv6k6Dwgc+bx+Bs6vuKJHHl5kox/BaKbhiXzqQOwK4cO22yElGp2OCmjwVhT3HmxgyPGnJfQ==", + "dev": true, + "license": "MIT" + }, + "node_modules/call-bind-apply-helpers": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/call-bind-apply-helpers/-/call-bind-apply-helpers-1.0.2.tgz", + "integrity": "sha512-Sp1ablJ0ivDkSzjcaJdxEunN5/XvksFJ2sMBFfq6x0ryhQV/2b/KwFe21cMpmHtPOSij8K99/wSfoEuTObmuMQ==", + "license": "MIT", + "dependencies": { + "es-errors": "^1.3.0", + "function-bind": "^1.1.2" + }, + "engines": { + "node": ">= 0.4" + } + }, + "node_modules/call-bound": { + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/call-bound/-/call-bound-1.0.4.tgz", + "integrity": "sha512-+ys997U96po4Kx/ABpBCqhA9EuxJaQWDQg7295H4hBphv3IZg0boBKuwYpt4YXp6MZ5AmZQnU/tyMTlRpaSejg==", + "license": "MIT", + "dependencies": { + "call-bind-apply-helpers": "^1.0.2", + "get-intrinsic": "^1.3.0" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/callsites": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/callsites/-/callsites-3.1.0.tgz", + "integrity": "sha512-P8BjAsXvZS+VIDUI11hHCQEv74YT67YUi5JJFNWIqL235sBmjX4+qx9Muvls5ivyNENctx46xQLQ3aTuE7ssaQ==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=6" + } + }, + "node_modules/camelcase": { + "version": "5.3.1", + "resolved": "https://registry.npmjs.org/camelcase/-/camelcase-5.3.1.tgz", + "integrity": "sha512-L28STB170nwWS63UjtlEOE3dldQApaJXZkOI1uMFfzf3rRuPegHaHesyee+YxQ+W6SvRDQV6UrdOdRiR153wJg==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=6" + } + }, + "node_modules/caniuse-lite": { + "version": "1.0.30001717", + "resolved": "https://registry.npmjs.org/caniuse-lite/-/caniuse-lite-1.0.30001717.tgz", + "integrity": "sha512-auPpttCq6BDEG8ZAuHJIplGw6GODhjw+/11e7IjpnYCxZcW/ONgPs0KVBJ0d1bY3e2+7PRe5RCLyP+PfwVgkYw==", + "dev": true, + "funding": [ + { + "type": "opencollective", + "url": "https://opencollective.com/browserslist" + }, + { + "type": "tidelift", + "url": "https://tidelift.com/funding/github/npm/caniuse-lite" + }, + { + "type": "github", + "url": "https://github.com/sponsors/ai" + } + ], + "license": "CC-BY-4.0" + }, + "node_modules/chalk": { + "version": "4.1.2", + "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.2.tgz", + "integrity": "sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==", + "dev": true, + "license": "MIT", + "dependencies": { + "ansi-styles": "^4.1.0", + "supports-color": "^7.1.0" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/chalk/chalk?sponsor=1" + } + }, + "node_modules/char-regex": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/char-regex/-/char-regex-1.0.2.tgz", + "integrity": "sha512-kWWXztvZ5SBQV+eRgKFeh8q5sLuZY2+8WUIzlxWVTg+oGwY14qylx1KbKzHd8P6ZYkAg0xyIDU9JMHhyJMZ1jw==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=10" + } + }, + "node_modules/chrome-trace-event": { + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/chrome-trace-event/-/chrome-trace-event-1.0.4.tgz", + "integrity": "sha512-rNjApaLzuwaOTjCiT8lSDdGN1APCiqkChLMJxJPWLunPAt5fy8xgU9/jNOchV84wfIxrA0lRQB7oCT8jrn/wrQ==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=6.0" + } + }, + "node_modules/ci-info": { + "version": "3.9.0", + "resolved": "https://registry.npmjs.org/ci-info/-/ci-info-3.9.0.tgz", + "integrity": "sha512-NIxF55hv4nSqQswkAeiOi1r83xy8JldOFDTWiug55KBu9Jnblncd2U6ViHmYgHf01TPZS77NJBhBMKdWj9HQMQ==", + "dev": true, + "funding": [ + { + "type": "github", + "url": "https://github.com/sponsors/sibiraj-s" + } + ], + "license": "MIT", + "engines": { + "node": ">=8" + } + }, + "node_modules/cjs-module-lexer": { + "version": "1.4.3", + "resolved": "https://registry.npmjs.org/cjs-module-lexer/-/cjs-module-lexer-1.4.3.tgz", + "integrity": "sha512-9z8TZaGM1pfswYeXrUpzPrkx8UnWYdhJclsiYMm6x/w5+nN+8Tf/LnAgfLGQCm59qAOxU8WwHEq2vNwF6i4j+Q==", + "license": "MIT" + }, + "node_modules/cli-progress": { + "version": "3.12.0", + "resolved": "https://registry.npmjs.org/cli-progress/-/cli-progress-3.12.0.tgz", + "integrity": "sha512-tRkV3HJ1ASwm19THiiLIXLO7Im7wlTuKnvkYaTkyoAPefqjNg7W7DHKUlGRxy9vxDvbyCYQkQozvptuMkGCg8A==", + "license": "MIT", + "dependencies": { + "string-width": "^4.2.3" + }, + "engines": { + "node": ">=4" + } + }, + "node_modules/cliui": { + "version": "8.0.1", + "resolved": "https://registry.npmjs.org/cliui/-/cliui-8.0.1.tgz", + "integrity": "sha512-BSeNnyus75C4//NQ9gQt1/csTXyo/8Sb+afLAkzAptFuMsod9HFokGNudZpi/oQV73hnVK+sR+5PVRMd+Dr7YQ==", + "dev": true, + "license": "ISC", + "dependencies": { + "string-width": "^4.2.0", + "strip-ansi": "^6.0.1", + "wrap-ansi": "^7.0.0" + }, + "engines": { + "node": ">=12" + } + }, + "node_modules/co": { + "version": "4.6.0", + "resolved": "https://registry.npmjs.org/co/-/co-4.6.0.tgz", + "integrity": "sha512-QVb0dM5HvG+uaxitm8wONl7jltx8dqhfU33DcqtOZcLSVIKSDDLDi7+0LbAKiyI8hD9u42m2YxXSkMGWThaecQ==", + "dev": true, + "license": "MIT", + "engines": { + "iojs": ">= 1.0.0", + "node": ">= 0.12.0" + } + }, + "node_modules/cohere-ai": { + "version": "7.17.1", + "resolved": "https://registry.npmjs.org/cohere-ai/-/cohere-ai-7.17.1.tgz", + "integrity": "sha512-GI/uWVYYGIN3gdjJRlbjEaLJNJVXsUJyOlPqwBWgAmK18kP4CJoErxKwU0aLe3tHHOBcC2RqXe6PmGO0dz7dpQ==", + "dev": true, + "dependencies": { + "@aws-sdk/client-sagemaker": "^3.583.0", + "@aws-sdk/credential-providers": "^3.583.0", + "@aws-sdk/protocol-http": "^3.374.0", + "@aws-sdk/signature-v4": "^3.374.0", + "convict": "^6.2.4", + "form-data": "^4.0.0", + "form-data-encoder": "^4.0.2", + "formdata-node": "^6.0.3", + "js-base64": "3.7.2", + "node-fetch": "2.7.0", + "qs": "6.11.2", + "readable-stream": "^4.5.2", + "url-join": "4.0.1" + } + }, + "node_modules/cohere-ai/node_modules/qs": { + "version": "6.11.2", + "resolved": "https://registry.npmjs.org/qs/-/qs-6.11.2.tgz", + "integrity": "sha512-tDNIz22aBzCDxLtVH++VnTfzxlfeK5CbqohpSqpJgj1Wg/cQbStNAz3NuqCs5vV+pjBsK4x4pN9HlVh7rcYRiA==", + "dev": true, + "license": "BSD-3-Clause", + "dependencies": { + "side-channel": "^1.0.4" + }, + "engines": { + "node": ">=0.6" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/collect-v8-coverage": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/collect-v8-coverage/-/collect-v8-coverage-1.0.2.tgz", + "integrity": "sha512-lHl4d5/ONEbLlJvaJNtsF/Lz+WvB07u2ycqTYbdrq7UypDXailES4valYb2eWiJFxZlVmpGekfqoxQhzyFdT4Q==", + "dev": true, + "license": "MIT" + }, + "node_modules/color-convert": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz", + "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "color-name": "~1.1.4" + }, + "engines": { + "node": ">=7.0.0" + } + }, + "node_modules/color-name": { + "version": "1.1.4", + "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz", + "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==", + "dev": true, + "license": "MIT" + }, + "node_modules/combined-stream": { + "version": "1.0.8", + "resolved": "https://registry.npmjs.org/combined-stream/-/combined-stream-1.0.8.tgz", + "integrity": "sha512-FQN4MRfuJeHf7cBbBMJFXhKSDq+2kAArBlmRBvcvFE5BB1HZKXtSFASDhdlz9zOYwxh8lDdnvmMOe/+5cdoEdg==", + "license": "MIT", + "dependencies": { + "delayed-stream": "~1.0.0" + }, + "engines": { + "node": ">= 0.8" + } + }, + "node_modules/commander": { + "version": "2.20.3", + "resolved": "https://registry.npmjs.org/commander/-/commander-2.20.3.tgz", + "integrity": "sha512-GpVkmM8vF2vQUkj2LvZmD35JxeJOLCwJ9cUkugyk2nuhbv3+mJvpLYYt+0+USMxE+oj+ey/lJEnhZw75x/OMcQ==", + "dev": true, + "license": "MIT" + }, + "node_modules/concat-map": { + "version": "0.0.1", + "resolved": "https://registry.npmjs.org/concat-map/-/concat-map-0.0.1.tgz", + "integrity": "sha512-/Srv4dswyQNBfohGpz9o6Yb3Gz3SrUDqBH5rTuhGR7ahtlbYKnVxw2bCFMRljaA7EXHaXZ8wsHdodFvbkhKmqg==", + "dev": true, + "license": "MIT" + }, + "node_modules/convert-source-map": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/convert-source-map/-/convert-source-map-2.0.0.tgz", + "integrity": "sha512-Kvp459HrV2FEJ1CAsi1Ku+MY3kasH19TFykTz2xWmMeq6bk2NU3XXvfJ+Q61m0xktWwt+1HSYf3JZsTms3aRJg==", + "dev": true, + "license": "MIT" + }, + "node_modules/convict": { + "version": "6.2.4", + "resolved": "https://registry.npmjs.org/convict/-/convict-6.2.4.tgz", + "integrity": "sha512-qN60BAwdMVdofckX7AlohVJ2x9UvjTNoKVXCL2LxFk1l7757EJqf1nySdMkPQer0bt8kQ5lQiyZ9/2NvrFBuwQ==", + "dev": true, + "license": "Apache-2.0", + "dependencies": { + "lodash.clonedeep": "^4.5.0", + "yargs-parser": "^20.2.7" + }, + "engines": { + "node": ">=6" + } + }, + "node_modules/create-jest": { + "version": "29.7.0", + "resolved": "https://registry.npmjs.org/create-jest/-/create-jest-29.7.0.tgz", + "integrity": "sha512-Adz2bdH0Vq3F53KEMJOoftQFutWCukm6J24wbPWRO4k1kMY7gS7ds/uoJkNuV8wDCtWWnuwGcJwpWcih+zEW1Q==", + "dev": true, + "license": "MIT", + "dependencies": { + "@jest/types": "^29.6.3", + "chalk": "^4.0.0", + "exit": "^0.1.2", + "graceful-fs": "^4.2.9", + "jest-config": "^29.7.0", + "jest-util": "^29.7.0", + "prompts": "^2.0.1" + }, + "bin": { + "create-jest": "bin/create-jest.js" + }, + "engines": { + "node": "^14.15.0 || ^16.10.0 || >=18.0.0" + } + }, + "node_modules/cross-spawn": { + "version": "7.0.6", + "resolved": "https://registry.npmjs.org/cross-spawn/-/cross-spawn-7.0.6.tgz", + "integrity": "sha512-uV2QOWP2nWzsy2aMp8aRibhi9dlzF5Hgh5SHaB9OiTGEyDTiJJyx0uy51QXdyWbtAHNua4XJzUKca3OzKUd3vA==", + "dev": true, + "license": "MIT", + "dependencies": { + "path-key": "^3.1.0", + "shebang-command": "^2.0.0", + "which": "^2.0.1" + }, + "engines": { + "node": ">= 8" + } + }, + "node_modules/cssom": { + "version": "0.5.0", + "resolved": "https://registry.npmjs.org/cssom/-/cssom-0.5.0.tgz", + "integrity": "sha512-iKuQcq+NdHqlAcwUY0o/HL69XQrUaQdMjmStJ8JFmUaiiQErlhrmuigkg/CU4E2J0IyUKUrMAgl36TvN67MqTw==", + "dev": true, + "license": "MIT" + }, + "node_modules/cssstyle": { + "version": "2.3.0", + "resolved": "https://registry.npmjs.org/cssstyle/-/cssstyle-2.3.0.tgz", + "integrity": "sha512-AZL67abkUzIuvcHqk7c09cezpGNcxUxU4Ioi/05xHk4DQeTkWmGYftIE6ctU6AEt+Gn4n1lDStOtj7FKycP71A==", + "dev": true, + "license": "MIT", + "dependencies": { + "cssom": "~0.3.6" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/cssstyle/node_modules/cssom": { + "version": "0.3.8", + "resolved": "https://registry.npmjs.org/cssom/-/cssom-0.3.8.tgz", + "integrity": "sha512-b0tGHbfegbhPJpxpiBPU2sCkigAqtM9O121le6bbOlgyV+NyGyCmVfJ6QW9eRjz8CpNfWEOYBIMIGRYkLwsIYg==", + "dev": true, + "license": "MIT" + }, + "node_modules/data-urls": { + "version": "3.0.2", + "resolved": "https://registry.npmjs.org/data-urls/-/data-urls-3.0.2.tgz", + "integrity": "sha512-Jy/tj3ldjZJo63sVAvg6LHt2mHvl4V6AgRAmNDtLdm7faqtsx+aJG42rsyCo9JCoRVKwPFzKlIPx3DIibwSIaQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "abab": "^2.0.6", + "whatwg-mimetype": "^3.0.0", + "whatwg-url": "^11.0.0" + }, + "engines": { + "node": ">=12" + } + }, + "node_modules/debug": { + "version": "4.4.0", + "resolved": "https://registry.npmjs.org/debug/-/debug-4.4.0.tgz", + "integrity": "sha512-6WTZ/IxCY/T6BALoZHaE4ctp9xm+Z5kY/pzYaCHRFeyVhojxlrm+46y68HA6hr0TcwEssoxNiDEUJQjfPZ/RYA==", + "license": "MIT", + "dependencies": { + "ms": "^2.1.3" + }, + "engines": { + "node": ">=6.0" + }, + "peerDependenciesMeta": { + "supports-color": { + "optional": true + } + } + }, + "node_modules/decimal.js": { + "version": "10.5.0", + "resolved": "https://registry.npmjs.org/decimal.js/-/decimal.js-10.5.0.tgz", + "integrity": "sha512-8vDa8Qxvr/+d94hSh5P3IJwI5t8/c0KsMp+g8bNw9cY2icONa5aPfvKeieW1WlG0WQYwwhJ7mjui2xtiePQSXw==", + "dev": true, + "license": "MIT" + }, + "node_modules/dedent": { + "version": "1.6.0", + "resolved": "https://registry.npmjs.org/dedent/-/dedent-1.6.0.tgz", + "integrity": "sha512-F1Z+5UCFpmQUzJa11agbyPVMbpgT/qA3/SKyJ1jyBgm7dUcUEa8v9JwDkerSQXfakBwFljIxhOJqGkjUwZ9FSA==", + "dev": true, + "license": "MIT", + "peerDependencies": { + "babel-plugin-macros": "^3.1.0" + }, + "peerDependenciesMeta": { + "babel-plugin-macros": { + "optional": true + } + } + }, + "node_modules/deepmerge": { + "version": "4.3.1", + "resolved": "https://registry.npmjs.org/deepmerge/-/deepmerge-4.3.1.tgz", + "integrity": "sha512-3sUqbMEc77XqpdNO7FRyRog+eW3ph+GYCbj+rK+uYyRMuwsVy0rMiVtPn+QJlKFvWP/1PYpapqYn0Me2knFn+A==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/delayed-stream": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/delayed-stream/-/delayed-stream-1.0.0.tgz", + "integrity": "sha512-ZySD7Nf91aLB0RxL4KGrKHBXl7Eds1DAmEdcoVawXnLD7SDhpNgtuII2aAkg7a7QS41jxPSZ17p4VdGnMHk3MQ==", + "license": "MIT", + "engines": { + "node": ">=0.4.0" + } + }, + "node_modules/detect-newline": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/detect-newline/-/detect-newline-3.1.0.tgz", + "integrity": "sha512-TLz+x/vEXm/Y7P7wn1EJFNLxYpUD4TgMosxY6fAVJUnJMbupHBOncxyWUG9OpTaH9EBD7uFI5LfEgmMOc54DsA==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=8" + } + }, + "node_modules/diff-sequences": { + "version": "29.6.3", + "resolved": "https://registry.npmjs.org/diff-sequences/-/diff-sequences-29.6.3.tgz", + "integrity": "sha512-EjePK1srD3P08o2j4f0ExnylqRs5B9tJjcp9t1krH2qRi8CCdsYfwe9JgSLurFBWwq4uOlipzfk5fHNvwFKr8Q==", + "dev": true, + "license": "MIT", + "engines": { + "node": "^14.15.0 || ^16.10.0 || >=18.0.0" + } + }, + "node_modules/domexception": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/domexception/-/domexception-4.0.0.tgz", + "integrity": "sha512-A2is4PLG+eeSfoTMA95/s4pvAoSo2mKtiM5jlHkAVewmiO8ISFTFKZjH7UAM1Atli/OT/7JHOrJRJiMKUZKYBw==", + "deprecated": "Use your platform's native DOMException instead", + "dev": true, + "license": "MIT", + "dependencies": { + "webidl-conversions": "^7.0.0" + }, + "engines": { + "node": ">=12" + } + }, + "node_modules/dotenv": { + "version": "16.5.0", + "resolved": "https://registry.npmjs.org/dotenv/-/dotenv-16.5.0.tgz", + "integrity": "sha512-m/C+AwOAr9/W1UOIZUo232ejMNnJAJtYQjUbHoNTBNTJSvqzzDh7vnrei3o3r3m9blf6ZoDkvcw0VmozNRFJxg==", + "dev": true, + "license": "BSD-2-Clause", + "engines": { + "node": ">=12" + }, + "funding": { + "url": "https://dotenvx.com" + } + }, + "node_modules/dunder-proto": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/dunder-proto/-/dunder-proto-1.0.1.tgz", + "integrity": "sha512-KIN/nDJBQRcXw0MLVhZE9iQHmG68qAVIBg9CqmUYjmQIhgij9U5MFvrqkUL5FbtyyzZuOeOt0zdeRe4UY7ct+A==", + "license": "MIT", + "dependencies": { + "call-bind-apply-helpers": "^1.0.1", + "es-errors": "^1.3.0", + "gopd": "^1.2.0" + }, + "engines": { + "node": ">= 0.4" + } + }, + "node_modules/ejs": { + "version": "3.1.10", + "resolved": "https://registry.npmjs.org/ejs/-/ejs-3.1.10.tgz", + "integrity": "sha512-UeJmFfOrAQS8OJWPZ4qtgHyWExa088/MtK5UEyoJGFH67cDEXkZSviOiKRCZ4Xij0zxI3JECgYs3oKx+AizQBA==", + "dev": true, + "license": "Apache-2.0", + "dependencies": { + "jake": "^10.8.5" + }, + "bin": { + "ejs": "bin/cli.js" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/electron-to-chromium": { + "version": "1.5.150", + "resolved": "https://registry.npmjs.org/electron-to-chromium/-/electron-to-chromium-1.5.150.tgz", + "integrity": "sha512-rOOkP2ZUMx1yL4fCxXQKDHQ8ZXwisb2OycOQVKHgvB3ZI4CvehOd4y2tfnnLDieJ3Zs1RL1Dlp3cMkyIn7nnXA==", + "dev": true, + "license": "ISC" + }, + "node_modules/emittery": { + "version": "0.13.1", + "resolved": "https://registry.npmjs.org/emittery/-/emittery-0.13.1.tgz", + "integrity": "sha512-DeWwawk6r5yR9jFgnDKYt4sLS0LmHJJi3ZOnb5/JdbYwj3nW+FxQnHIjhBKz8YLC7oRNPVM9NQ47I3CVx34eqQ==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=12" + }, + "funding": { + "url": "https://github.com/sindresorhus/emittery?sponsor=1" + } + }, + "node_modules/emoji-regex": { + "version": "8.0.0", + "resolved": "https://registry.npmjs.org/emoji-regex/-/emoji-regex-8.0.0.tgz", + "integrity": "sha512-MSjYzcWNOA0ewAHpz0MxpYFvwg6yjy1NG3xteoqz644VCo/RPgnr1/GGt+ic3iJTzQ8Eu3TdM14SawnVUmGE6A==", + "license": "MIT" + }, + "node_modules/enhanced-resolve": { + "version": "5.18.1", + "resolved": "https://registry.npmjs.org/enhanced-resolve/-/enhanced-resolve-5.18.1.tgz", + "integrity": "sha512-ZSW3ma5GkcQBIpwZTSRAI8N71Uuwgs93IezB7mf7R60tC8ZbJideoDNKjHn2O9KIlx6rkGTTEk1xUCK2E1Y2Yg==", + "dev": true, + "license": "MIT", + "dependencies": { + "graceful-fs": "^4.2.4", + "tapable": "^2.2.0" + }, + "engines": { + "node": ">=10.13.0" + } + }, + "node_modules/entities": { + "version": "6.0.0", + "resolved": "https://registry.npmjs.org/entities/-/entities-6.0.0.tgz", + "integrity": "sha512-aKstq2TDOndCn4diEyp9Uq/Flu2i1GlLkc6XIDQSDMuaFE3OPW5OphLCyQ5SpSJZTb4reN+kTcYru5yIfXoRPw==", + "dev": true, + "license": "BSD-2-Clause", + "engines": { + "node": ">=0.12" + }, + "funding": { + "url": "https://github.com/fb55/entities?sponsor=1" + } + }, + "node_modules/error-ex": { + "version": "1.3.2", + "resolved": "https://registry.npmjs.org/error-ex/-/error-ex-1.3.2.tgz", + "integrity": "sha512-7dFHNmqeFSEt2ZBsCriorKnn3Z2pj+fd9kmI6QoWw4//DL+icEBfc0U7qJCisqrTsKTjw4fNFy2pW9OqStD84g==", + "dev": true, + "license": "MIT", + "dependencies": { + "is-arrayish": "^0.2.1" + } + }, + "node_modules/es-define-property": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/es-define-property/-/es-define-property-1.0.1.tgz", + "integrity": "sha512-e3nRfgfUZ4rNGL232gUgX06QNyyez04KdjFrF+LTRoOXmrOgFKDg4BCdsjW8EnT69eqdYGmRpJwiPVYNrCaW3g==", + "license": "MIT", + "engines": { + "node": ">= 0.4" + } + }, + "node_modules/es-errors": { + "version": "1.3.0", + "resolved": "https://registry.npmjs.org/es-errors/-/es-errors-1.3.0.tgz", + "integrity": "sha512-Zf5H2Kxt2xjTvbJvP2ZWLEICxA6j+hAmMzIlypy4xcBg1vKVnx89Wy0GbS+kf5cwCVFFzdCFh2XSCFNULS6csw==", + "license": "MIT", + "engines": { + "node": ">= 0.4" + } + }, + "node_modules/es-module-lexer": { + "version": "1.7.0", + "resolved": "https://registry.npmjs.org/es-module-lexer/-/es-module-lexer-1.7.0.tgz", + "integrity": "sha512-jEQoCwk8hyb2AZziIOLhDqpm5+2ww5uIE6lkO/6jcOCusfk6LhMHpXXfBLXTZ7Ydyt0j4VoUQv6uGNYbdW+kBA==", + "dev": true, + "license": "MIT" + }, + "node_modules/es-object-atoms": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/es-object-atoms/-/es-object-atoms-1.1.1.tgz", + "integrity": "sha512-FGgH2h8zKNim9ljj7dankFPcICIK9Cp5bm+c2gQSYePhpaG5+esrLODihIorn+Pe6FGJzWhXQotPv73jTaldXA==", + "license": "MIT", + "dependencies": { + "es-errors": "^1.3.0" + }, + "engines": { + "node": ">= 0.4" + } + }, + "node_modules/es-set-tostringtag": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/es-set-tostringtag/-/es-set-tostringtag-2.1.0.tgz", + "integrity": "sha512-j6vWzfrGVfyXxge+O0x5sh6cvxAog0a/4Rdd2K36zCMV5eJ+/+tOAngRO8cODMNWbVRdVlmGZQL2YS3yR8bIUA==", + "license": "MIT", + "dependencies": { + "es-errors": "^1.3.0", + "get-intrinsic": "^1.2.6", + "has-tostringtag": "^1.0.2", + "hasown": "^2.0.2" + }, + "engines": { + "node": ">= 0.4" + } + }, + "node_modules/escalade": { + "version": "3.2.0", + "resolved": "https://registry.npmjs.org/escalade/-/escalade-3.2.0.tgz", + "integrity": "sha512-WUj2qlxaQtO4g6Pq5c29GTcWGDyd8itL8zTlipgECz3JesAiiOKotd8JU6otB3PACgG6xkJUyVhboMS+bje/jA==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=6" + } + }, + "node_modules/escape-string-regexp": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-2.0.0.tgz", + "integrity": "sha512-UpzcLCXolUWcNu5HtVMHYdXJjArjsF9C0aNnquZYY4uW/Vu0miy5YoWvbV345HauVvcAUnpRuhMMcqTcGOY2+w==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=8" + } + }, + "node_modules/escodegen": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/escodegen/-/escodegen-2.1.0.tgz", + "integrity": "sha512-2NlIDTwUWJN0mRPQOdtQBzbUHvdGY2P1VXSyU83Q3xKxM7WHX2Ql8dKq782Q9TgQUNOLEzEYu9bzLNj1q88I5w==", + "dev": true, + "license": "BSD-2-Clause", + "dependencies": { + "esprima": "^4.0.1", + "estraverse": "^5.2.0", + "esutils": "^2.0.2" + }, + "bin": { + "escodegen": "bin/escodegen.js", + "esgenerate": "bin/esgenerate.js" + }, + "engines": { + "node": ">=6.0" + }, + "optionalDependencies": { + "source-map": "~0.6.1" + } + }, + "node_modules/escodegen/node_modules/source-map": { + "version": "0.6.1", + "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz", + "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==", + "dev": true, + "license": "BSD-3-Clause", + "optional": true, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/eslint-scope": { + "version": "5.1.1", + "resolved": "https://registry.npmjs.org/eslint-scope/-/eslint-scope-5.1.1.tgz", + "integrity": "sha512-2NxwbF/hZ0KpepYN0cNbo+FN6XoK7GaHlQhgx/hIZl6Va0bF45RQOOwhLIy8lQDbuCiadSLCBnH2CFYquit5bw==", + "dev": true, + "license": "BSD-2-Clause", + "dependencies": { + "esrecurse": "^4.3.0", + "estraverse": "^4.1.1" + }, + "engines": { + "node": ">=8.0.0" + } + }, + "node_modules/eslint-scope/node_modules/estraverse": { + "version": "4.3.0", + "resolved": "https://registry.npmjs.org/estraverse/-/estraverse-4.3.0.tgz", + "integrity": "sha512-39nnKffWz8xN1BU/2c79n9nB9HDzo0niYUqx6xyqUnyoAnQyyWpOTdZEeiCch8BBu515t4wp9ZmgVfVhn9EBpw==", + "dev": true, + "license": "BSD-2-Clause", + "engines": { + "node": ">=4.0" + } + }, + "node_modules/esprima": { + "version": "4.0.1", + "resolved": "https://registry.npmjs.org/esprima/-/esprima-4.0.1.tgz", + "integrity": "sha512-eGuFFw7Upda+g4p+QHvnW0RyTX/SVeJBDM/gCtMARO0cLuT2HcEKnTPvhjV6aGeqrCB/sbNop0Kszm0jsaWU4A==", + "dev": true, + "license": "BSD-2-Clause", + "bin": { + "esparse": "bin/esparse.js", + "esvalidate": "bin/esvalidate.js" + }, + "engines": { + "node": ">=4" + } + }, + "node_modules/esrecurse": { + "version": "4.3.0", + "resolved": "https://registry.npmjs.org/esrecurse/-/esrecurse-4.3.0.tgz", + "integrity": "sha512-KmfKL3b6G+RXvP8N1vr3Tq1kL/oCFgn2NYXEtqP8/L3pKapUA4G8cFVaoF3SU323CD4XypR/ffioHmkti6/Tag==", + "dev": true, + "license": "BSD-2-Clause", + "dependencies": { + "estraverse": "^5.2.0" + }, + "engines": { + "node": ">=4.0" + } + }, + "node_modules/estraverse": { + "version": "5.3.0", + "resolved": "https://registry.npmjs.org/estraverse/-/estraverse-5.3.0.tgz", + "integrity": "sha512-MMdARuVEQziNTeJD8DgMqmhwR11BRQ/cBP+pLtYdSTnf3MIO8fFeiINEbX36ZdNlfU/7A9f3gUw49B3oQsvwBA==", + "dev": true, + "license": "BSD-2-Clause", + "engines": { + "node": ">=4.0" + } + }, + "node_modules/esutils": { + "version": "2.0.3", + "resolved": "https://registry.npmjs.org/esutils/-/esutils-2.0.3.tgz", + "integrity": "sha512-kVscqXk4OCp68SZ0dkgEKVi6/8ij300KBWTJq32P/dYeWTSwK41WyTxalN1eRmA5Z9UU/LX9D7FWSmV9SAYx6g==", + "dev": true, + "license": "BSD-2-Clause", + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/event-target-shim": { + "version": "5.0.1", + "resolved": "https://registry.npmjs.org/event-target-shim/-/event-target-shim-5.0.1.tgz", + "integrity": "sha512-i/2XbnSz/uxRCU6+NdVJgKWDTM427+MqYbkQzD321DuCQJUqOuJKIA0IM2+W2xtYHdKOmZ4dR6fExsd4SXL+WQ==", + "license": "MIT", + "engines": { + "node": ">=6" + } + }, + "node_modules/events": { + "version": "3.3.0", + "resolved": "https://registry.npmjs.org/events/-/events-3.3.0.tgz", + "integrity": "sha512-mQw+2fkQbALzQ7V0MY0IqdnXNOeTtP4r0lN9z7AAawCXgqea7bDii20AYrIBrFd/Hx0M2Ocz6S111CaFkUcb0Q==", + "license": "MIT", + "engines": { + "node": ">=0.8.x" + } + }, + "node_modules/execa": { + "version": "5.1.1", + "resolved": "https://registry.npmjs.org/execa/-/execa-5.1.1.tgz", + "integrity": "sha512-8uSpZZocAZRBAPIEINJj3Lo9HyGitllczc27Eh5YYojjMFMn8yHMDMaUHE2Jqfq05D/wucwI4JGURyXt1vchyg==", + "dev": true, + "license": "MIT", + "dependencies": { + "cross-spawn": "^7.0.3", + "get-stream": "^6.0.0", + "human-signals": "^2.1.0", + "is-stream": "^2.0.0", + "merge-stream": "^2.0.0", + "npm-run-path": "^4.0.1", + "onetime": "^5.1.2", + "signal-exit": "^3.0.3", + "strip-final-newline": "^2.0.0" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sindresorhus/execa?sponsor=1" + } + }, + "node_modules/exit": { + "version": "0.1.2", + "resolved": "https://registry.npmjs.org/exit/-/exit-0.1.2.tgz", + "integrity": "sha512-Zk/eNKV2zbjpKzrsQ+n1G6poVbErQxJ0LBOJXaKZ1EViLzH+hrLu9cdXI4zw9dBQJslwBEpbQ2P1oS7nDxs6jQ==", + "dev": true, + "engines": { + "node": ">= 0.8.0" + } + }, + "node_modules/expect": { + "version": "29.7.0", + "resolved": "https://registry.npmjs.org/expect/-/expect-29.7.0.tgz", + "integrity": "sha512-2Zks0hf1VLFYI1kbh0I5jP3KHHyCHpkfyHBzsSXRFgl/Bg9mWYfMW8oD+PdMPlEwy5HNsR9JutYy6pMeOh61nw==", + "dev": true, + "license": "MIT", + "dependencies": { + "@jest/expect-utils": "^29.7.0", + "jest-get-type": "^29.6.3", + "jest-matcher-utils": "^29.7.0", + "jest-message-util": "^29.7.0", + "jest-util": "^29.7.0" + }, + "engines": { + "node": "^14.15.0 || ^16.10.0 || >=18.0.0" + } + }, + "node_modules/fast-deep-equal": { + "version": "3.1.3", + "resolved": "https://registry.npmjs.org/fast-deep-equal/-/fast-deep-equal-3.1.3.tgz", + "integrity": "sha512-f3qQ9oQy9j2AhBe/H9VC91wLmKBCCU/gDOnKNAYG5hswO7BLKj09Hc5HYNz9cGI++xlpDCIgDaitVs03ATR84Q==", + "dev": true, + "license": "MIT" + }, + "node_modules/fast-json-stable-stringify": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/fast-json-stable-stringify/-/fast-json-stable-stringify-2.1.0.tgz", + "integrity": "sha512-lhd/wF+Lk98HZoTCtlVraHtfh5XYijIjalXck7saUtuanSDyLMxnHhSXEDJqHxD7msR8D0uCmqlkwjCV8xvwHw==", + "dev": true, + "license": "MIT" + }, + "node_modules/fast-uri": { + "version": "3.0.6", + "resolved": "https://registry.npmjs.org/fast-uri/-/fast-uri-3.0.6.tgz", + "integrity": "sha512-Atfo14OibSv5wAp4VWNsFYE1AchQRTv9cBGWET4pZWHzYshFSS9NQI6I57rdKn9croWVMbYFbLhJ+yJvmZIIHw==", + "dev": true, + "funding": [ + { + "type": "github", + "url": "https://github.com/sponsors/fastify" + }, + { + "type": "opencollective", + "url": "https://opencollective.com/fastify" + } + ], + "license": "BSD-3-Clause" + }, + "node_modules/fast-xml-parser": { + "version": "4.4.1", + "resolved": "https://registry.npmjs.org/fast-xml-parser/-/fast-xml-parser-4.4.1.tgz", + "integrity": "sha512-xkjOecfnKGkSsOwtZ5Pz7Us/T6mrbPQrq0nh+aCO5V9nk5NLWmasAHumTKjiPJPWANe+kAZ84Jc8ooJkzZ88Sw==", + "dev": true, + "funding": [ + { + "type": "github", + "url": "https://github.com/sponsors/NaturalIntelligence" + }, + { + "type": "paypal", + "url": "https://paypal.me/naturalintelligence" + } + ], + "license": "MIT", + "dependencies": { + "strnum": "^1.0.5" + }, + "bin": { + "fxparser": "src/cli/cli.js" + } + }, + "node_modules/fb-watchman": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/fb-watchman/-/fb-watchman-2.0.2.tgz", + "integrity": "sha512-p5161BqbuCaSnB8jIbzQHOlpgsPmK5rJVDfDKO91Axs5NC1uu3HRQm6wt9cd9/+GtQQIO53JdGXXoyDpTAsgYA==", + "dev": true, + "license": "Apache-2.0", + "dependencies": { + "bser": "2.1.1" + } + }, + "node_modules/filelist": { + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/filelist/-/filelist-1.0.4.tgz", + "integrity": "sha512-w1cEuf3S+DrLCQL7ET6kz+gmlJdbq9J7yXCSjK/OZCPA+qEN1WyF4ZAf0YYJa4/shHJra2t/d/r8SV4Ji+x+8Q==", + "dev": true, + "license": "Apache-2.0", + "dependencies": { + "minimatch": "^5.0.1" + } + }, + "node_modules/filelist/node_modules/brace-expansion": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-2.0.1.tgz", + "integrity": "sha512-XnAIvQ8eM+kC6aULx6wuQiwVsnzsi9d3WxzV3FpWTGA19F621kwdbsAcFKXgKUHZWsy+mY6iL1sHTxWEFCytDA==", + "dev": true, + "license": "MIT", + "dependencies": { + "balanced-match": "^1.0.0" + } + }, + "node_modules/filelist/node_modules/minimatch": { + "version": "5.1.6", + "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-5.1.6.tgz", + "integrity": "sha512-lKwV/1brpG6mBUFHtb7NUmtABCb2WZZmm2wNiOA5hAb8VdCS4B3dtMWyvcoViccwAW/COERjXLt0zP1zXUN26g==", + "dev": true, + "license": "ISC", + "dependencies": { + "brace-expansion": "^2.0.1" + }, + "engines": { + "node": ">=10" + } + }, + "node_modules/fill-range": { + "version": "7.1.1", + "resolved": "https://registry.npmjs.org/fill-range/-/fill-range-7.1.1.tgz", + "integrity": "sha512-YsGpe3WHLK8ZYi4tWDg2Jy3ebRz2rXowDxnld4bkQB00cc/1Zw9AWnC0i9ztDJitivtQvaI9KaLyKrc+hBW0yg==", + "dev": true, + "license": "MIT", + "dependencies": { + "to-regex-range": "^5.0.1" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/find-up": { + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/find-up/-/find-up-4.1.0.tgz", + "integrity": "sha512-PpOwAdQ/YlXQ2vj8a3h8IipDuYRi3wceVQQGYWxNINccq40Anw7BlsEXCMbt1Zt+OLA6Fq9suIpIWD0OsnISlw==", + "dev": true, + "license": "MIT", + "dependencies": { + "locate-path": "^5.0.0", + "path-exists": "^4.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/form-data": { + "version": "4.0.2", + "resolved": "https://registry.npmjs.org/form-data/-/form-data-4.0.2.tgz", + "integrity": "sha512-hGfm/slu0ZabnNt4oaRZ6uREyfCj6P4fT/n6A1rGV+Z0VdGXjfOhVUpkn6qVQONHGIFwmveGXyDs75+nr6FM8w==", + "license": "MIT", + "dependencies": { + "asynckit": "^0.4.0", + "combined-stream": "^1.0.8", + "es-set-tostringtag": "^2.1.0", + "mime-types": "^2.1.12" + }, + "engines": { + "node": ">= 6" + } + }, + "node_modules/form-data-encoder": { + "version": "4.0.2", + "resolved": "https://registry.npmjs.org/form-data-encoder/-/form-data-encoder-4.0.2.tgz", + "integrity": "sha512-KQVhvhK8ZkWzxKxOr56CPulAhH3dobtuQ4+hNQ+HekH/Wp5gSOafqRAeTphQUJAIk0GBvHZgJ2ZGRWd5kphMuw==", + "license": "MIT", + "engines": { + "node": ">= 18" + } + }, + "node_modules/formdata-node": { + "version": "6.0.3", + "resolved": "https://registry.npmjs.org/formdata-node/-/formdata-node-6.0.3.tgz", + "integrity": "sha512-8e1++BCiTzUno9v5IZ2J6bv4RU+3UKDmqWUQD0MIMVCd9AdhWkO1gw57oo1mNEX1dMq2EGI+FbWz4B92pscSQg==", + "license": "MIT", + "engines": { + "node": ">= 18" + } + }, + "node_modules/fs.realpath": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/fs.realpath/-/fs.realpath-1.0.0.tgz", + "integrity": "sha512-OO0pH2lK6a0hZnAdau5ItzHPI6pUlvI7jMVnxUQRtw4owF2wk8lOSabtGDCTP4Ggrg2MbGnWO9X8K1t4+fGMDw==", + "dev": true, + "license": "ISC" + }, + "node_modules/fsevents": { + "version": "2.3.3", + "resolved": "https://registry.npmjs.org/fsevents/-/fsevents-2.3.3.tgz", + "integrity": "sha512-5xoDfX+fL7faATnagmWPpbFtwh/R77WmMMqqHGS65C3vvB0YHrgF+B1YmZ3441tMj5n63k0212XNoJwzlhffQw==", + "dev": true, + "hasInstallScript": true, + "license": "MIT", + "optional": true, + "os": [ + "darwin" + ], + "engines": { + "node": "^8.16.0 || ^10.6.0 || >=11.0.0" + } + }, + "node_modules/function-bind": { + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/function-bind/-/function-bind-1.1.2.tgz", + "integrity": "sha512-7XHNxH7qX9xG5mIwxkhumTox/MIRNcOgDrxWsMt2pAr23WHp6MrRlN7FBSFpCpr+oVO0F744iUgR82nJMfG2SA==", + "license": "MIT", + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/gensync": { + "version": "1.0.0-beta.2", + "resolved": "https://registry.npmjs.org/gensync/-/gensync-1.0.0-beta.2.tgz", + "integrity": "sha512-3hN7NaskYvMDLQY55gnW3NQ+mesEAepTqlg+VEbj7zzqEMBVNhzcGYYeqFo/TlYz6eQiFcp1HcsCZO+nGgS8zg==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/get-caller-file": { + "version": "2.0.5", + "resolved": "https://registry.npmjs.org/get-caller-file/-/get-caller-file-2.0.5.tgz", + "integrity": "sha512-DyFP3BM/3YHTQOCUL/w0OZHR0lpKeGrxotcHWcqNEdnltqFwXVfhEBQ94eIo34AfQpo0rGki4cyIiftY06h2Fg==", + "dev": true, + "license": "ISC", + "engines": { + "node": "6.* || 8.* || >= 10.*" + } + }, + "node_modules/get-intrinsic": { + "version": "1.3.0", + "resolved": "https://registry.npmjs.org/get-intrinsic/-/get-intrinsic-1.3.0.tgz", + "integrity": "sha512-9fSjSaos/fRIVIp+xSJlE6lfwhES7LNtKaCBIamHsjr2na1BiABJPo0mOjjz8GJDURarmCPGqaiVg5mfjb98CQ==", + "license": "MIT", + "dependencies": { + "call-bind-apply-helpers": "^1.0.2", + "es-define-property": "^1.0.1", + "es-errors": "^1.3.0", + "es-object-atoms": "^1.1.1", + "function-bind": "^1.1.2", + "get-proto": "^1.0.1", + "gopd": "^1.2.0", + "has-symbols": "^1.1.0", + "hasown": "^2.0.2", + "math-intrinsics": "^1.1.0" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/get-package-type": { + "version": "0.1.0", + "resolved": "https://registry.npmjs.org/get-package-type/-/get-package-type-0.1.0.tgz", + "integrity": "sha512-pjzuKtY64GYfWizNAJ0fr9VqttZkNiK2iS430LtIHzjBEr6bX8Am2zm4sW4Ro5wjWW5cAlRL1qAMTcXbjNAO2Q==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=8.0.0" + } + }, + "node_modules/get-proto": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/get-proto/-/get-proto-1.0.1.tgz", + "integrity": "sha512-sTSfBjoXBp89JvIKIefqw7U2CCebsc74kiY6awiGogKtoSGbgjYE/G/+l9sF3MWFPNc9IcoOC4ODfKHfxFmp0g==", + "license": "MIT", + "dependencies": { + "dunder-proto": "^1.0.1", + "es-object-atoms": "^1.0.0" + }, + "engines": { + "node": ">= 0.4" + } + }, + "node_modules/get-stream": { + "version": "6.0.1", + "resolved": "https://registry.npmjs.org/get-stream/-/get-stream-6.0.1.tgz", + "integrity": "sha512-ts6Wi+2j3jQjqi70w5AlN8DFnkSwC+MqmxEzdEALB2qXZYV3X/b1CTfgPLGJNMeAWxdPfU8FO1ms3NUfaHCPYg==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/glob": { + "version": "7.2.3", + "resolved": "https://registry.npmjs.org/glob/-/glob-7.2.3.tgz", + "integrity": "sha512-nFR0zLpU2YCaRxwoCJvL6UvCH2JFyFVIvwTLsIf21AuHlMskA1hhTdk+LlYJtOlYt9v6dvszD2BGRqBL+iQK9Q==", + "deprecated": "Glob versions prior to v9 are no longer supported", + "dev": true, + "license": "ISC", + "dependencies": { + "fs.realpath": "^1.0.0", + "inflight": "^1.0.4", + "inherits": "2", + "minimatch": "^3.1.1", + "once": "^1.3.0", + "path-is-absolute": "^1.0.0" + }, + "engines": { + "node": "*" + }, + "funding": { + "url": "https://github.com/sponsors/isaacs" + } + }, + "node_modules/glob-to-regexp": { + "version": "0.4.1", + "resolved": "https://registry.npmjs.org/glob-to-regexp/-/glob-to-regexp-0.4.1.tgz", + "integrity": "sha512-lkX1HJXwyMcprw/5YUZc2s7DrpAiHB21/V+E1rHUrVNokkvB6bqMzT0VfV6/86ZNabt1k14YOIaT7nDvOX3Iiw==", + "dev": true, + "license": "BSD-2-Clause" + }, + "node_modules/globals": { + "version": "11.12.0", + "resolved": "https://registry.npmjs.org/globals/-/globals-11.12.0.tgz", + "integrity": "sha512-WOBp/EEGUiIsJSp7wcv/y6MO+lV9UoncWqxuFfm8eBwzWNgyfBd6Gz+IeKQ9jCmyhoH99g15M3T+QaVHFjizVA==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=4" + } + }, + "node_modules/gopd": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/gopd/-/gopd-1.2.0.tgz", + "integrity": "sha512-ZUKRh6/kUFoAiTAtTYPZJ3hw9wNxx+BIBOijnlG9PnrJsCcSjs1wyyD6vJpaYtgnzDrKYRSqf3OO6Rfa93xsRg==", + "license": "MIT", + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/graceful-fs": { + "version": "4.2.11", + "resolved": "https://registry.npmjs.org/graceful-fs/-/graceful-fs-4.2.11.tgz", + "integrity": "sha512-RbJ5/jmFcNNCcDV5o9eTnBLJ/HszWV0P73bc+Ff4nS/rJj+YaS6IGyiOL0VoBYX+l1Wrl3k63h/KrH+nhJ0XvQ==", + "dev": true, + "license": "ISC" + }, + "node_modules/has-flag": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz", + "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=8" + } + }, + "node_modules/has-symbols": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/has-symbols/-/has-symbols-1.1.0.tgz", + "integrity": "sha512-1cDNdwJ2Jaohmb3sg4OmKaMBwuC48sYni5HUw2DvsC8LjGTLK9h+eb1X6RyuOHe4hT0ULCW68iomhjUoKUqlPQ==", + "license": "MIT", + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/has-tostringtag": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/has-tostringtag/-/has-tostringtag-1.0.2.tgz", + "integrity": "sha512-NqADB8VjPFLM2V0VvHUewwwsw0ZWBaIdgo+ieHtK3hasLz4qeCRjYcqfB6AQrBggRKppKF8L52/VqdVsO47Dlw==", + "license": "MIT", + "dependencies": { + "has-symbols": "^1.0.3" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/hasown": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/hasown/-/hasown-2.0.2.tgz", + "integrity": "sha512-0hJU9SCPvmMzIBdZFqNPXWa6dqh7WdH0cII9y+CyS8rG3nL48Bclra9HmKhVVUHyPWNH5Y7xDwAB7bfgSjkUMQ==", + "license": "MIT", + "dependencies": { + "function-bind": "^1.1.2" + }, + "engines": { + "node": ">= 0.4" + } + }, + "node_modules/html-encoding-sniffer": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/html-encoding-sniffer/-/html-encoding-sniffer-3.0.0.tgz", + "integrity": "sha512-oWv4T4yJ52iKrufjnyZPkrN0CH3QnrUqdB6In1g5Fe1mia8GmF36gnfNySxoZtxD5+NmYw1EElVXiBk93UeskA==", + "dev": true, + "license": "MIT", + "dependencies": { + "whatwg-encoding": "^2.0.0" + }, + "engines": { + "node": ">=12" + } + }, + "node_modules/html-escaper": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/html-escaper/-/html-escaper-2.0.2.tgz", + "integrity": "sha512-H2iMtd0I4Mt5eYiapRdIDjp+XzelXQ0tFE4JS7YFwFevXXMmOp9myNrUvCg0D6ws8iqkRPBfKHgbwig1SmlLfg==", + "dev": true, + "license": "MIT" + }, + "node_modules/http-proxy-agent": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/http-proxy-agent/-/http-proxy-agent-5.0.0.tgz", + "integrity": "sha512-n2hY8YdoRE1i7r6M0w9DIw5GgZN0G25P8zLCRQ8rjXtTU3vsNFBI/vWK/UIeE6g5MUUz6avwAPXmL6Fy9D/90w==", + "dev": true, + "license": "MIT", + "dependencies": { + "@tootallnate/once": "2", + "agent-base": "6", + "debug": "4" + }, + "engines": { + "node": ">= 6" + } + }, + "node_modules/https-proxy-agent": { + "version": "5.0.1", + "resolved": "https://registry.npmjs.org/https-proxy-agent/-/https-proxy-agent-5.0.1.tgz", + "integrity": "sha512-dFcAjpTQFgoLMzC2VwU+C/CbS7uRL0lWmxDITmqm7C+7F0Odmj6s9l6alZc6AELXhrnggM2CeWSXHGOdX2YtwA==", + "dev": true, + "license": "MIT", + "dependencies": { + "agent-base": "6", + "debug": "4" + }, + "engines": { + "node": ">= 6" + } + }, + "node_modules/human-signals": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/human-signals/-/human-signals-2.1.0.tgz", + "integrity": "sha512-B4FFZ6q/T2jhhksgkbEW3HBvWIfDW85snkQgawt07S7J5QXTk6BkNV+0yAeZrM5QpMAdYlocGoljn0sJ/WQkFw==", + "dev": true, + "license": "Apache-2.0", + "engines": { + "node": ">=10.17.0" + } + }, + "node_modules/humanize-ms": { + "version": "1.2.1", + "resolved": "https://registry.npmjs.org/humanize-ms/-/humanize-ms-1.2.1.tgz", + "integrity": "sha512-Fl70vYtsAFb/C06PTS9dZBo7ihau+Tu/DNCk/OyHhea07S+aeMWpFFkUaXRa8fI+ScZbEI8dfSxwY7gxZ9SAVQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "ms": "^2.0.0" + } + }, + "node_modules/iconv-lite": { + "version": "0.6.3", + "resolved": "https://registry.npmjs.org/iconv-lite/-/iconv-lite-0.6.3.tgz", + "integrity": "sha512-4fCk79wshMdzMp2rH06qWrJE4iolqLhCUH+OiuIgU++RB0+94NlDL81atO7GX55uUKueo0txHNtvEyI6D7WdMw==", + "dev": true, + "license": "MIT", + "dependencies": { + "safer-buffer": ">= 2.1.2 < 3.0.0" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/ieee754": { + "version": "1.2.1", + "resolved": "https://registry.npmjs.org/ieee754/-/ieee754-1.2.1.tgz", + "integrity": "sha512-dcyqhDvX1C46lXZcVqCpK+FtMRQVdIMN6/Df5js2zouUsqG7I6sFxitIC+7KYK29KdXOLHdu9zL4sFnoVQnqaA==", + "funding": [ + { + "type": "github", + "url": "https://github.com/sponsors/feross" + }, + { + "type": "patreon", + "url": "https://www.patreon.com/feross" + }, + { + "type": "consulting", + "url": "https://feross.org/support" + } + ], + "license": "BSD-3-Clause" + }, + "node_modules/import-in-the-middle": { + "version": "1.13.1", + "resolved": "https://registry.npmjs.org/import-in-the-middle/-/import-in-the-middle-1.13.1.tgz", + "integrity": "sha512-k2V9wNm9B+ysuelDTHjI9d5KPc4l8zAZTGqj+pcynvWkypZd857ryzN8jNC7Pg2YZXNMJcHRPpaDyCBbNyVRpA==", + "license": "Apache-2.0", + "dependencies": { + "acorn": "^8.14.0", + "acorn-import-attributes": "^1.9.5", + "cjs-module-lexer": "^1.2.2", + "module-details-from-path": "^1.0.3" + } + }, + "node_modules/import-local": { + "version": "3.2.0", + "resolved": "https://registry.npmjs.org/import-local/-/import-local-3.2.0.tgz", + "integrity": "sha512-2SPlun1JUPWoM6t3F0dw0FkCF/jWY8kttcY4f599GLTSjh2OCuuhdTkJQsEcZzBqbXZGKMK2OqW1oZsjtf/gQA==", + "dev": true, + "license": "MIT", + "dependencies": { + "pkg-dir": "^4.2.0", + "resolve-cwd": "^3.0.0" + }, + "bin": { + "import-local-fixture": "fixtures/cli.js" + }, + "engines": { + "node": ">=8" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/imurmurhash": { + "version": "0.1.4", + "resolved": "https://registry.npmjs.org/imurmurhash/-/imurmurhash-0.1.4.tgz", + "integrity": "sha512-JmXMZ6wuvDmLiHEml9ykzqO6lwFbof0GG4IkcGaENdCRDDmMVnny7s5HsIgHCbaq0w2MyPhDqkhTUgS2LU2PHA==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=0.8.19" + } + }, + "node_modules/inflight": { + "version": "1.0.6", + "resolved": "https://registry.npmjs.org/inflight/-/inflight-1.0.6.tgz", + "integrity": "sha512-k92I/b08q4wvFscXCLvqfsHCrjrF7yiXsQuIVvVE7N82W3+aqpzuUdBbfhWcy/FZR3/4IgflMgKLOsvPDrGCJA==", + "deprecated": "This module is not supported, and leaks memory. Do not use it. Check out lru-cache if you want a good and tested way to coalesce async requests by a key value, which is much more comprehensive and powerful.", + "dev": true, + "license": "ISC", + "dependencies": { + "once": "^1.3.0", + "wrappy": "1" + } + }, + "node_modules/inherits": { + "version": "2.0.4", + "resolved": "https://registry.npmjs.org/inherits/-/inherits-2.0.4.tgz", + "integrity": "sha512-k/vGaX4/Yla3WzyMCvTQOXYeIHvqOKtnqBduzTHpzpQZzAskKMhZ2K+EnBiSM9zGSoIFeMpXKxa4dYeZIQqewQ==", + "dev": true, + "license": "ISC" + }, + "node_modules/is-arrayish": { + "version": "0.2.1", + "resolved": "https://registry.npmjs.org/is-arrayish/-/is-arrayish-0.2.1.tgz", + "integrity": "sha512-zz06S8t0ozoDXMG+ube26zeCTNXcKIPJZJi8hBrF4idCLms4CG9QtK7qBl1boi5ODzFpjswb5JPmHCbMpjaYzg==", + "dev": true, + "license": "MIT" + }, + "node_modules/is-core-module": { + "version": "2.16.1", + "resolved": "https://registry.npmjs.org/is-core-module/-/is-core-module-2.16.1.tgz", + "integrity": "sha512-UfoeMA6fIJ8wTYFEUjelnaGI67v6+N7qXJEvQuIGa99l4xsCruSYOVSQ0uPANn4dAzm8lkYPaKLrrijLq7x23w==", + "license": "MIT", + "dependencies": { + "hasown": "^2.0.2" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/is-fullwidth-code-point": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/is-fullwidth-code-point/-/is-fullwidth-code-point-3.0.0.tgz", + "integrity": "sha512-zymm5+u+sCsSWyD9qNaejV3DFvhCKclKdizYaJUuHA83RLjb7nSuGnddCHGv0hk+KY7BMAlsWeK4Ueg6EV6XQg==", + "license": "MIT", + "engines": { + "node": ">=8" + } + }, + "node_modules/is-generator-fn": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/is-generator-fn/-/is-generator-fn-2.1.0.tgz", + "integrity": "sha512-cTIB4yPYL/Grw0EaSzASzg6bBy9gqCofvWN8okThAYIxKJZC+udlRAmGbM0XLeniEJSs8uEgHPGuHSe1XsOLSQ==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=6" + } + }, + "node_modules/is-number": { + "version": "7.0.0", + "resolved": "https://registry.npmjs.org/is-number/-/is-number-7.0.0.tgz", + "integrity": "sha512-41Cifkg6e8TylSpdtTpeLVMqvSBEVzTttHvERD741+pnZ8ANv0004MRL43QKPDlK9cGvNp6NZWZUBlbGXYxxng==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=0.12.0" + } + }, + "node_modules/is-potential-custom-element-name": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/is-potential-custom-element-name/-/is-potential-custom-element-name-1.0.1.tgz", + "integrity": "sha512-bCYeRA2rVibKZd+s2625gGnGF/t7DSqDs4dP7CrLA1m7jKWz6pps0LpYLJN8Q64HtmPKJ1hrN3nzPNKFEKOUiQ==", + "dev": true, + "license": "MIT" + }, + "node_modules/is-stream": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/is-stream/-/is-stream-2.0.1.tgz", + "integrity": "sha512-hFoiJiTl63nn+kstHGBtewWSKnQLpyb155KHheA1l39uvtO9nWIop1p3udqPcUd/xbF1VLMO4n7OI6p7RbngDg==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=8" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/isexe": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/isexe/-/isexe-2.0.0.tgz", + "integrity": "sha512-RHxMLp9lnKHGHRng9QFhRCMbYAcVpn69smSGcq3f36xjgVVWThj4qqLbTLlq7Ssj8B+fIQ1EuCEGI2lKsyQeIw==", + "dev": true, + "license": "ISC" + }, + "node_modules/istanbul-lib-coverage": { + "version": "3.2.2", + "resolved": "https://registry.npmjs.org/istanbul-lib-coverage/-/istanbul-lib-coverage-3.2.2.tgz", + "integrity": "sha512-O8dpsF+r0WV/8MNRKfnmrtCWhuKjxrq2w+jpzBL5UZKTi2LeVWnWOmWRxFlesJONmc+wLAGvKQZEOanko0LFTg==", + "dev": true, + "license": "BSD-3-Clause", + "engines": { + "node": ">=8" + } + }, + "node_modules/istanbul-lib-instrument": { + "version": "6.0.3", + "resolved": "https://registry.npmjs.org/istanbul-lib-instrument/-/istanbul-lib-instrument-6.0.3.tgz", + "integrity": "sha512-Vtgk7L/R2JHyyGW07spoFlB8/lpjiOLTjMdms6AFMraYt3BaJauod/NGrfnVG/y4Ix1JEuMRPDPEj2ua+zz1/Q==", + "dev": true, + "license": "BSD-3-Clause", + "dependencies": { + "@babel/core": "^7.23.9", + "@babel/parser": "^7.23.9", + "@istanbuljs/schema": "^0.1.3", + "istanbul-lib-coverage": "^3.2.0", + "semver": "^7.5.4" + }, + "engines": { + "node": ">=10" + } + }, + "node_modules/istanbul-lib-report": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/istanbul-lib-report/-/istanbul-lib-report-3.0.1.tgz", + "integrity": "sha512-GCfE1mtsHGOELCU8e/Z7YWzpmybrx/+dSTfLrvY8qRmaY6zXTKWn6WQIjaAFw069icm6GVMNkgu0NzI4iPZUNw==", + "dev": true, + "license": "BSD-3-Clause", + "dependencies": { + "istanbul-lib-coverage": "^3.0.0", + "make-dir": "^4.0.0", + "supports-color": "^7.1.0" + }, + "engines": { + "node": ">=10" + } + }, + "node_modules/istanbul-lib-source-maps": { + "version": "4.0.1", + "resolved": "https://registry.npmjs.org/istanbul-lib-source-maps/-/istanbul-lib-source-maps-4.0.1.tgz", + "integrity": "sha512-n3s8EwkdFIJCG3BPKBYvskgXGoy88ARzvegkitk60NxRdwltLOTaH7CUiMRXvwYorl0Q712iEjcWB+fK/MrWVw==", + "dev": true, + "license": "BSD-3-Clause", + "dependencies": { + "debug": "^4.1.1", + "istanbul-lib-coverage": "^3.0.0", + "source-map": "^0.6.1" + }, + "engines": { + "node": ">=10" + } + }, + "node_modules/istanbul-lib-source-maps/node_modules/source-map": { + "version": "0.6.1", + "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz", + "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==", + "dev": true, + "license": "BSD-3-Clause", + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/istanbul-reports": { + "version": "3.1.7", + "resolved": "https://registry.npmjs.org/istanbul-reports/-/istanbul-reports-3.1.7.tgz", + "integrity": "sha512-BewmUXImeuRk2YY0PVbxgKAysvhRPUQE0h5QRM++nVWyubKGV0l8qQ5op8+B2DOmwSe63Jivj0BjkPQVf8fP5g==", + "dev": true, + "license": "BSD-3-Clause", + "dependencies": { + "html-escaper": "^2.0.0", + "istanbul-lib-report": "^3.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/jake": { + "version": "10.9.2", + "resolved": "https://registry.npmjs.org/jake/-/jake-10.9.2.tgz", + "integrity": "sha512-2P4SQ0HrLQ+fw6llpLnOaGAvN2Zu6778SJMrCUwns4fOoG9ayrTiZk3VV8sCPkVZF8ab0zksVpS8FDY5pRCNBA==", + "dev": true, + "license": "Apache-2.0", + "dependencies": { + "async": "^3.2.3", + "chalk": "^4.0.2", + "filelist": "^1.0.4", + "minimatch": "^3.1.2" + }, + "bin": { + "jake": "bin/cli.js" + }, + "engines": { + "node": ">=10" + } + }, + "node_modules/javascript-natural-sort": { + "version": "0.7.1", + "resolved": "https://registry.npmjs.org/javascript-natural-sort/-/javascript-natural-sort-0.7.1.tgz", + "integrity": "sha512-nO6jcEfZWQXDhOiBtG2KvKyEptz7RVbpGP4vTD2hLBdmNQSsCiicO2Ioinv6UI4y9ukqnBpy+XZ9H6uLNgJTlw==", + "dev": true, + "license": "MIT" + }, + "node_modules/jest": { + "version": "29.7.0", + "resolved": "https://registry.npmjs.org/jest/-/jest-29.7.0.tgz", + "integrity": "sha512-NIy3oAFp9shda19hy4HK0HRTWKtPJmGdnvywu01nOqNC2vZg+Z+fvJDxpMQA88eb2I9EcafcdjYgsDthnYTvGw==", + "dev": true, + "license": "MIT", + "dependencies": { + "@jest/core": "^29.7.0", + "@jest/types": "^29.6.3", + "import-local": "^3.0.2", + "jest-cli": "^29.7.0" + }, + "bin": { + "jest": "bin/jest.js" + }, + "engines": { + "node": "^14.15.0 || ^16.10.0 || >=18.0.0" + }, + "peerDependencies": { + "node-notifier": "^8.0.1 || ^9.0.0 || ^10.0.0" + }, + "peerDependenciesMeta": { + "node-notifier": { + "optional": true + } + } + }, + "node_modules/jest-changed-files": { + "version": "29.7.0", + "resolved": "https://registry.npmjs.org/jest-changed-files/-/jest-changed-files-29.7.0.tgz", + "integrity": "sha512-fEArFiwf1BpQ+4bXSprcDc3/x4HSzL4al2tozwVpDFpsxALjLYdyiIK4e5Vz66GQJIbXJ82+35PtysofptNX2w==", + "dev": true, + "license": "MIT", + "dependencies": { + "execa": "^5.0.0", + "jest-util": "^29.7.0", + "p-limit": "^3.1.0" + }, + "engines": { + "node": "^14.15.0 || ^16.10.0 || >=18.0.0" + } + }, + "node_modules/jest-circus": { + "version": "29.7.0", + "resolved": "https://registry.npmjs.org/jest-circus/-/jest-circus-29.7.0.tgz", + "integrity": "sha512-3E1nCMgipcTkCocFwM90XXQab9bS+GMsjdpmPrlelaxwD93Ad8iVEjX/vvHPdLPnFf+L40u+5+iutRdA1N9myw==", + "dev": true, + "license": "MIT", + "dependencies": { + "@jest/environment": "^29.7.0", + "@jest/expect": "^29.7.0", + "@jest/test-result": "^29.7.0", + "@jest/types": "^29.6.3", + "@types/node": "*", + "chalk": "^4.0.0", + "co": "^4.6.0", + "dedent": "^1.0.0", + "is-generator-fn": "^2.0.0", + "jest-each": "^29.7.0", + "jest-matcher-utils": "^29.7.0", + "jest-message-util": "^29.7.0", + "jest-runtime": "^29.7.0", + "jest-snapshot": "^29.7.0", + "jest-util": "^29.7.0", + "p-limit": "^3.1.0", + "pretty-format": "^29.7.0", + "pure-rand": "^6.0.0", + "slash": "^3.0.0", + "stack-utils": "^2.0.3" + }, + "engines": { + "node": "^14.15.0 || ^16.10.0 || >=18.0.0" + } + }, + "node_modules/jest-cli": { + "version": "29.7.0", + "resolved": "https://registry.npmjs.org/jest-cli/-/jest-cli-29.7.0.tgz", + "integrity": "sha512-OVVobw2IubN/GSYsxETi+gOe7Ka59EFMR/twOU3Jb2GnKKeMGJB5SGUUrEz3SFVmJASUdZUzy83sLNNQ2gZslg==", + "dev": true, + "license": "MIT", + "dependencies": { + "@jest/core": "^29.7.0", + "@jest/test-result": "^29.7.0", + "@jest/types": "^29.6.3", + "chalk": "^4.0.0", + "create-jest": "^29.7.0", + "exit": "^0.1.2", + "import-local": "^3.0.2", + "jest-config": "^29.7.0", + "jest-util": "^29.7.0", + "jest-validate": "^29.7.0", + "yargs": "^17.3.1" + }, + "bin": { + "jest": "bin/jest.js" + }, + "engines": { + "node": "^14.15.0 || ^16.10.0 || >=18.0.0" + }, + "peerDependencies": { + "node-notifier": "^8.0.1 || ^9.0.0 || ^10.0.0" + }, + "peerDependenciesMeta": { + "node-notifier": { + "optional": true + } + } + }, + "node_modules/jest-config": { + "version": "29.7.0", + "resolved": "https://registry.npmjs.org/jest-config/-/jest-config-29.7.0.tgz", + "integrity": "sha512-uXbpfeQ7R6TZBqI3/TxCU4q4ttk3u0PJeC+E0zbfSoSjq6bJ7buBPxzQPL0ifrkY4DNu4JUdk0ImlBUYi840eQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "@babel/core": "^7.11.6", + "@jest/test-sequencer": "^29.7.0", + "@jest/types": "^29.6.3", + "babel-jest": "^29.7.0", + "chalk": "^4.0.0", + "ci-info": "^3.2.0", + "deepmerge": "^4.2.2", + "glob": "^7.1.3", + "graceful-fs": "^4.2.9", + "jest-circus": "^29.7.0", + "jest-environment-node": "^29.7.0", + "jest-get-type": "^29.6.3", + "jest-regex-util": "^29.6.3", + "jest-resolve": "^29.7.0", + "jest-runner": "^29.7.0", + "jest-util": "^29.7.0", + "jest-validate": "^29.7.0", + "micromatch": "^4.0.4", + "parse-json": "^5.2.0", + "pretty-format": "^29.7.0", + "slash": "^3.0.0", + "strip-json-comments": "^3.1.1" + }, + "engines": { + "node": "^14.15.0 || ^16.10.0 || >=18.0.0" + }, + "peerDependencies": { + "@types/node": "*", + "ts-node": ">=9.0.0" + }, + "peerDependenciesMeta": { + "@types/node": { + "optional": true + }, + "ts-node": { + "optional": true + } + } + }, + "node_modules/jest-diff": { + "version": "29.7.0", + "resolved": "https://registry.npmjs.org/jest-diff/-/jest-diff-29.7.0.tgz", + "integrity": "sha512-LMIgiIrhigmPrs03JHpxUh2yISK3vLFPkAodPeo0+BuF7wA2FoQbkEg1u8gBYBThncu7e1oEDUfIXVuTqLRUjw==", + "dev": true, + "license": "MIT", + "dependencies": { + "chalk": "^4.0.0", + "diff-sequences": "^29.6.3", + "jest-get-type": "^29.6.3", + "pretty-format": "^29.7.0" + }, + "engines": { + "node": "^14.15.0 || ^16.10.0 || >=18.0.0" + } + }, + "node_modules/jest-docblock": { + "version": "29.7.0", + "resolved": "https://registry.npmjs.org/jest-docblock/-/jest-docblock-29.7.0.tgz", + "integrity": "sha512-q617Auw3A612guyaFgsbFeYpNP5t2aoUNLwBUbc/0kD1R4t9ixDbyFTHd1nok4epoVFpr7PmeWHrhvuV3XaJ4g==", + "dev": true, + "license": "MIT", + "dependencies": { + "detect-newline": "^3.0.0" + }, + "engines": { + "node": "^14.15.0 || ^16.10.0 || >=18.0.0" + } + }, + "node_modules/jest-each": { + "version": "29.7.0", + "resolved": "https://registry.npmjs.org/jest-each/-/jest-each-29.7.0.tgz", + "integrity": "sha512-gns+Er14+ZrEoC5fhOfYCY1LOHHr0TI+rQUHZS8Ttw2l7gl+80eHc/gFf2Ktkw0+SIACDTeWvpFcv3B04VembQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "@jest/types": "^29.6.3", + "chalk": "^4.0.0", + "jest-get-type": "^29.6.3", + "jest-util": "^29.7.0", + "pretty-format": "^29.7.0" + }, + "engines": { + "node": "^14.15.0 || ^16.10.0 || >=18.0.0" + } + }, + "node_modules/jest-environment-jsdom": { + "version": "29.7.0", + "resolved": "https://registry.npmjs.org/jest-environment-jsdom/-/jest-environment-jsdom-29.7.0.tgz", + "integrity": "sha512-k9iQbsf9OyOfdzWH8HDmrRT0gSIcX+FLNW7IQq94tFX0gynPwqDTW0Ho6iMVNjGz/nb+l/vW3dWM2bbLLpkbXA==", + "dev": true, + "license": "MIT", + "dependencies": { + "@jest/environment": "^29.7.0", + "@jest/fake-timers": "^29.7.0", + "@jest/types": "^29.6.3", + "@types/jsdom": "^20.0.0", + "@types/node": "*", + "jest-mock": "^29.7.0", + "jest-util": "^29.7.0", + "jsdom": "^20.0.0" + }, + "engines": { + "node": "^14.15.0 || ^16.10.0 || >=18.0.0" + }, + "peerDependencies": { + "canvas": "^2.5.0" + }, + "peerDependenciesMeta": { + "canvas": { + "optional": true + } + } + }, + "node_modules/jest-environment-node": { + "version": "29.7.0", + "resolved": "https://registry.npmjs.org/jest-environment-node/-/jest-environment-node-29.7.0.tgz", + "integrity": "sha512-DOSwCRqXirTOyheM+4d5YZOrWcdu0LNZ87ewUoywbcb2XR4wKgqiG8vNeYwhjFMbEkfju7wx2GYH0P2gevGvFw==", + "dev": true, + "license": "MIT", + "dependencies": { + "@jest/environment": "^29.7.0", + "@jest/fake-timers": "^29.7.0", + "@jest/types": "^29.6.3", + "@types/node": "*", + "jest-mock": "^29.7.0", + "jest-util": "^29.7.0" + }, + "engines": { + "node": "^14.15.0 || ^16.10.0 || >=18.0.0" + } + }, + "node_modules/jest-get-type": { + "version": "29.6.3", + "resolved": "https://registry.npmjs.org/jest-get-type/-/jest-get-type-29.6.3.tgz", + "integrity": "sha512-zrteXnqYxfQh7l5FHyL38jL39di8H8rHoecLH3JNxH3BwOrBsNeabdap5e0I23lD4HHI8W5VFBZqG4Eaq5LNcw==", + "dev": true, + "license": "MIT", + "engines": { + "node": "^14.15.0 || ^16.10.0 || >=18.0.0" + } + }, + "node_modules/jest-haste-map": { + "version": "29.7.0", + "resolved": "https://registry.npmjs.org/jest-haste-map/-/jest-haste-map-29.7.0.tgz", + "integrity": "sha512-fP8u2pyfqx0K1rGn1R9pyE0/KTn+G7PxktWidOBTqFPLYX0b9ksaMFkhK5vrS3DVun09pckLdlx90QthlW7AmA==", + "dev": true, + "license": "MIT", + "dependencies": { + "@jest/types": "^29.6.3", + "@types/graceful-fs": "^4.1.3", + "@types/node": "*", + "anymatch": "^3.0.3", + "fb-watchman": "^2.0.0", + "graceful-fs": "^4.2.9", + "jest-regex-util": "^29.6.3", + "jest-util": "^29.7.0", + "jest-worker": "^29.7.0", + "micromatch": "^4.0.4", + "walker": "^1.0.8" + }, + "engines": { + "node": "^14.15.0 || ^16.10.0 || >=18.0.0" + }, + "optionalDependencies": { + "fsevents": "^2.3.2" + } + }, + "node_modules/jest-leak-detector": { + "version": "29.7.0", + "resolved": "https://registry.npmjs.org/jest-leak-detector/-/jest-leak-detector-29.7.0.tgz", + "integrity": "sha512-kYA8IJcSYtST2BY9I+SMC32nDpBT3J2NvWJx8+JCuCdl/CR1I4EKUJROiP8XtCcxqgTTBGJNdbB1A8XRKbTetw==", + "dev": true, + "license": "MIT", + "dependencies": { + "jest-get-type": "^29.6.3", + "pretty-format": "^29.7.0" + }, + "engines": { + "node": "^14.15.0 || ^16.10.0 || >=18.0.0" + } + }, + "node_modules/jest-matcher-utils": { + "version": "29.7.0", + "resolved": "https://registry.npmjs.org/jest-matcher-utils/-/jest-matcher-utils-29.7.0.tgz", + "integrity": "sha512-sBkD+Xi9DtcChsI3L3u0+N0opgPYnCRPtGcQYrgXmR+hmt/fYfWAL0xRXYU8eWOdfuLgBe0YCW3AFtnRLagq/g==", + "dev": true, + "license": "MIT", + "dependencies": { + "chalk": "^4.0.0", + "jest-diff": "^29.7.0", + "jest-get-type": "^29.6.3", + "pretty-format": "^29.7.0" + }, + "engines": { + "node": "^14.15.0 || ^16.10.0 || >=18.0.0" + } + }, + "node_modules/jest-message-util": { + "version": "29.7.0", + "resolved": "https://registry.npmjs.org/jest-message-util/-/jest-message-util-29.7.0.tgz", + "integrity": "sha512-GBEV4GRADeP+qtB2+6u61stea8mGcOT4mCtrYISZwfu9/ISHFJ/5zOMXYbpBE9RsS5+Gb63DW4FgmnKJ79Kf6w==", + "dev": true, + "license": "MIT", + "dependencies": { + "@babel/code-frame": "^7.12.13", + "@jest/types": "^29.6.3", + "@types/stack-utils": "^2.0.0", + "chalk": "^4.0.0", + "graceful-fs": "^4.2.9", + "micromatch": "^4.0.4", + "pretty-format": "^29.7.0", + "slash": "^3.0.0", + "stack-utils": "^2.0.3" + }, + "engines": { + "node": "^14.15.0 || ^16.10.0 || >=18.0.0" + } + }, + "node_modules/jest-mock": { + "version": "29.7.0", + "resolved": "https://registry.npmjs.org/jest-mock/-/jest-mock-29.7.0.tgz", + "integrity": "sha512-ITOMZn+UkYS4ZFh83xYAOzWStloNzJFO2s8DWrE4lhtGD+AorgnbkiKERe4wQVBydIGPx059g6riW5Btp6Llnw==", + "dev": true, + "license": "MIT", + "dependencies": { + "@jest/types": "^29.6.3", + "@types/node": "*", + "jest-util": "^29.7.0" + }, + "engines": { + "node": "^14.15.0 || ^16.10.0 || >=18.0.0" + } + }, + "node_modules/jest-pnp-resolver": { + "version": "1.2.3", + "resolved": "https://registry.npmjs.org/jest-pnp-resolver/-/jest-pnp-resolver-1.2.3.tgz", + "integrity": "sha512-+3NpwQEnRoIBtx4fyhblQDPgJI0H1IEIkX7ShLUjPGA7TtUTvI1oiKi3SR4oBR0hQhQR80l4WAe5RrXBwWMA8w==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=6" + }, + "peerDependencies": { + "jest-resolve": "*" + }, + "peerDependenciesMeta": { + "jest-resolve": { + "optional": true + } + } + }, + "node_modules/jest-regex-util": { + "version": "29.6.3", + "resolved": "https://registry.npmjs.org/jest-regex-util/-/jest-regex-util-29.6.3.tgz", + "integrity": "sha512-KJJBsRCyyLNWCNBOvZyRDnAIfUiRJ8v+hOBQYGn8gDyF3UegwiP4gwRR3/SDa42g1YbVycTidUF3rKjyLFDWbg==", + "dev": true, + "license": "MIT", + "engines": { + "node": "^14.15.0 || ^16.10.0 || >=18.0.0" + } + }, + "node_modules/jest-resolve": { + "version": "29.7.0", + "resolved": "https://registry.npmjs.org/jest-resolve/-/jest-resolve-29.7.0.tgz", + "integrity": "sha512-IOVhZSrg+UvVAshDSDtHyFCCBUl/Q3AAJv8iZ6ZjnZ74xzvwuzLXid9IIIPgTnY62SJjfuupMKZsZQRsCvxEgA==", + "dev": true, + "license": "MIT", + "dependencies": { + "chalk": "^4.0.0", + "graceful-fs": "^4.2.9", + "jest-haste-map": "^29.7.0", + "jest-pnp-resolver": "^1.2.2", + "jest-util": "^29.7.0", + "jest-validate": "^29.7.0", + "resolve": "^1.20.0", + "resolve.exports": "^2.0.0", + "slash": "^3.0.0" + }, + "engines": { + "node": "^14.15.0 || ^16.10.0 || >=18.0.0" + } + }, + "node_modules/jest-resolve-dependencies": { + "version": "29.7.0", + "resolved": "https://registry.npmjs.org/jest-resolve-dependencies/-/jest-resolve-dependencies-29.7.0.tgz", + "integrity": "sha512-un0zD/6qxJ+S0et7WxeI3H5XSe9lTBBR7bOHCHXkKR6luG5mwDDlIzVQ0V5cZCuoTgEdcdwzTghYkTWfubi+nA==", + "dev": true, + "license": "MIT", + "dependencies": { + "jest-regex-util": "^29.6.3", + "jest-snapshot": "^29.7.0" + }, + "engines": { + "node": "^14.15.0 || ^16.10.0 || >=18.0.0" + } + }, + "node_modules/jest-runner": { + "version": "29.7.0", + "resolved": "https://registry.npmjs.org/jest-runner/-/jest-runner-29.7.0.tgz", + "integrity": "sha512-fsc4N6cPCAahybGBfTRcq5wFR6fpLznMg47sY5aDpsoejOcVYFb07AHuSnR0liMcPTgBsA3ZJL6kFOjPdoNipQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "@jest/console": "^29.7.0", + "@jest/environment": "^29.7.0", + "@jest/test-result": "^29.7.0", + "@jest/transform": "^29.7.0", + "@jest/types": "^29.6.3", + "@types/node": "*", + "chalk": "^4.0.0", + "emittery": "^0.13.1", + "graceful-fs": "^4.2.9", + "jest-docblock": "^29.7.0", + "jest-environment-node": "^29.7.0", + "jest-haste-map": "^29.7.0", + "jest-leak-detector": "^29.7.0", + "jest-message-util": "^29.7.0", + "jest-resolve": "^29.7.0", + "jest-runtime": "^29.7.0", + "jest-util": "^29.7.0", + "jest-watcher": "^29.7.0", + "jest-worker": "^29.7.0", + "p-limit": "^3.1.0", + "source-map-support": "0.5.13" + }, + "engines": { + "node": "^14.15.0 || ^16.10.0 || >=18.0.0" + } + }, + "node_modules/jest-runtime": { + "version": "29.7.0", + "resolved": "https://registry.npmjs.org/jest-runtime/-/jest-runtime-29.7.0.tgz", + "integrity": "sha512-gUnLjgwdGqW7B4LvOIkbKs9WGbn+QLqRQQ9juC6HndeDiezIwhDP+mhMwHWCEcfQ5RUXa6OPnFF8BJh5xegwwQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "@jest/environment": "^29.7.0", + "@jest/fake-timers": "^29.7.0", + "@jest/globals": "^29.7.0", + "@jest/source-map": "^29.6.3", + "@jest/test-result": "^29.7.0", + "@jest/transform": "^29.7.0", + "@jest/types": "^29.6.3", + "@types/node": "*", + "chalk": "^4.0.0", + "cjs-module-lexer": "^1.0.0", + "collect-v8-coverage": "^1.0.0", + "glob": "^7.1.3", + "graceful-fs": "^4.2.9", + "jest-haste-map": "^29.7.0", + "jest-message-util": "^29.7.0", + "jest-mock": "^29.7.0", + "jest-regex-util": "^29.6.3", + "jest-resolve": "^29.7.0", + "jest-snapshot": "^29.7.0", + "jest-util": "^29.7.0", + "slash": "^3.0.0", + "strip-bom": "^4.0.0" + }, + "engines": { + "node": "^14.15.0 || ^16.10.0 || >=18.0.0" + } + }, + "node_modules/jest-snapshot": { + "version": "29.7.0", + "resolved": "https://registry.npmjs.org/jest-snapshot/-/jest-snapshot-29.7.0.tgz", + "integrity": "sha512-Rm0BMWtxBcioHr1/OX5YCP8Uov4riHvKPknOGs804Zg9JGZgmIBkbtlxJC/7Z4msKYVbIJtfU+tKb8xlYNfdkw==", + "dev": true, + "license": "MIT", + "dependencies": { + "@babel/core": "^7.11.6", + "@babel/generator": "^7.7.2", + "@babel/plugin-syntax-jsx": "^7.7.2", + "@babel/plugin-syntax-typescript": "^7.7.2", + "@babel/types": "^7.3.3", + "@jest/expect-utils": "^29.7.0", + "@jest/transform": "^29.7.0", + "@jest/types": "^29.6.3", + "babel-preset-current-node-syntax": "^1.0.0", + "chalk": "^4.0.0", + "expect": "^29.7.0", + "graceful-fs": "^4.2.9", + "jest-diff": "^29.7.0", + "jest-get-type": "^29.6.3", + "jest-matcher-utils": "^29.7.0", + "jest-message-util": "^29.7.0", + "jest-util": "^29.7.0", + "natural-compare": "^1.4.0", + "pretty-format": "^29.7.0", + "semver": "^7.5.3" + }, + "engines": { + "node": "^14.15.0 || ^16.10.0 || >=18.0.0" + } + }, + "node_modules/jest-util": { + "version": "29.7.0", + "resolved": "https://registry.npmjs.org/jest-util/-/jest-util-29.7.0.tgz", + "integrity": "sha512-z6EbKajIpqGKU56y5KBUgy1dt1ihhQJgWzUlZHArA/+X2ad7Cb5iF+AK1EWVL/Bo7Rz9uurpqw6SiBCefUbCGA==", + "dev": true, + "license": "MIT", + "dependencies": { + "@jest/types": "^29.6.3", + "@types/node": "*", + "chalk": "^4.0.0", + "ci-info": "^3.2.0", + "graceful-fs": "^4.2.9", + "picomatch": "^2.2.3" + }, + "engines": { + "node": "^14.15.0 || ^16.10.0 || >=18.0.0" + } + }, + "node_modules/jest-validate": { + "version": "29.7.0", + "resolved": "https://registry.npmjs.org/jest-validate/-/jest-validate-29.7.0.tgz", + "integrity": "sha512-ZB7wHqaRGVw/9hST/OuFUReG7M8vKeq0/J2egIGLdvjHCmYqGARhzXmtgi+gVeZ5uXFF219aOc3Ls2yLg27tkw==", + "dev": true, + "license": "MIT", + "dependencies": { + "@jest/types": "^29.6.3", + "camelcase": "^6.2.0", + "chalk": "^4.0.0", + "jest-get-type": "^29.6.3", + "leven": "^3.1.0", + "pretty-format": "^29.7.0" + }, + "engines": { + "node": "^14.15.0 || ^16.10.0 || >=18.0.0" + } + }, + "node_modules/jest-validate/node_modules/camelcase": { + "version": "6.3.0", + "resolved": "https://registry.npmjs.org/camelcase/-/camelcase-6.3.0.tgz", + "integrity": "sha512-Gmy6FhYlCY7uOElZUSbxo2UCDH8owEk996gkbrpsgGtrJLM3J7jGxl9Ic7Qwwj4ivOE5AWZWRMecDdF7hqGjFA==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/jest-watcher": { + "version": "29.7.0", + "resolved": "https://registry.npmjs.org/jest-watcher/-/jest-watcher-29.7.0.tgz", + "integrity": "sha512-49Fg7WXkU3Vl2h6LbLtMQ/HyB6rXSIX7SqvBLQmssRBGN9I0PNvPmAmCWSOY6SOvrjhI/F7/bGAv9RtnsPA03g==", + "dev": true, + "license": "MIT", + "dependencies": { + "@jest/test-result": "^29.7.0", + "@jest/types": "^29.6.3", + "@types/node": "*", + "ansi-escapes": "^4.2.1", + "chalk": "^4.0.0", + "emittery": "^0.13.1", + "jest-util": "^29.7.0", + "string-length": "^4.0.1" + }, + "engines": { + "node": "^14.15.0 || ^16.10.0 || >=18.0.0" + } + }, + "node_modules/jest-worker": { + "version": "29.7.0", + "resolved": "https://registry.npmjs.org/jest-worker/-/jest-worker-29.7.0.tgz", + "integrity": "sha512-eIz2msL/EzL9UFTFFx7jBTkeZfku0yUAyZZZmJ93H2TYEiroIx2PQjEXcwYtYl8zXCxb+PAmA2hLIt/6ZEkPHw==", + "dev": true, + "license": "MIT", + "dependencies": { + "@types/node": "*", + "jest-util": "^29.7.0", + "merge-stream": "^2.0.0", + "supports-color": "^8.0.0" + }, + "engines": { + "node": "^14.15.0 || ^16.10.0 || >=18.0.0" + } + }, + "node_modules/jest-worker/node_modules/supports-color": { + "version": "8.1.1", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-8.1.1.tgz", + "integrity": "sha512-MpUEN2OodtUzxvKQl72cUF7RQ5EiHsGvSsVG0ia9c5RbWGL2CI4C7EpPS8UTBIplnlzZiNuV56w+FuNxy3ty2Q==", + "dev": true, + "license": "MIT", + "dependencies": { + "has-flag": "^4.0.0" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/chalk/supports-color?sponsor=1" + } + }, + "node_modules/js-base64": { + "version": "3.7.2", + "resolved": "https://registry.npmjs.org/js-base64/-/js-base64-3.7.2.tgz", + "integrity": "sha512-NnRs6dsyqUXejqk/yv2aiXlAvOs56sLkX6nUdeaNezI5LFFLlsZjOThmwnrcwh5ZZRwZlCMnVAY3CvhIhoVEKQ==", + "dev": true, + "license": "BSD-3-Clause" + }, + "node_modules/js-tiktoken": { + "version": "1.0.20", + "resolved": "https://registry.npmjs.org/js-tiktoken/-/js-tiktoken-1.0.20.tgz", + "integrity": "sha512-Xlaqhhs8VfCd6Sh7a1cFkZHQbYTLCwVJJWiHVxBYzLPxW0XsoxBy1hitmjkdIjD3Aon5BXLHFwU5O8WUx6HH+A==", + "license": "MIT", + "dependencies": { + "base64-js": "^1.5.1" + } + }, + "node_modules/js-tokens": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/js-tokens/-/js-tokens-4.0.0.tgz", + "integrity": "sha512-RdJUflcE3cUzKiMqQgsCu06FPu9UdIJO0beYbPhHN4k6apgJtifcoCtT9bcxOpYBtpD2kCM6Sbzg4CausW/PKQ==", + "dev": true, + "license": "MIT" + }, + "node_modules/js-yaml": { + "version": "3.14.1", + "resolved": "https://registry.npmjs.org/js-yaml/-/js-yaml-3.14.1.tgz", + "integrity": "sha512-okMH7OXXJ7YrN9Ok3/SXrnu4iX9yOk+25nqX4imS2npuvTYDmo/QEZoqwZkYaIDk3jVvBOTOIEgEhaLOynBS9g==", + "dev": true, + "license": "MIT", + "dependencies": { + "argparse": "^1.0.7", + "esprima": "^4.0.0" + }, + "bin": { + "js-yaml": "bin/js-yaml.js" + } + }, + "node_modules/jsdom": { + "version": "20.0.3", + "resolved": "https://registry.npmjs.org/jsdom/-/jsdom-20.0.3.tgz", + "integrity": "sha512-SYhBvTh89tTfCD/CRdSOm13mOBa42iTaTyfyEWBdKcGdPxPtLFBXuHR8XHb33YNYaP+lLbmSvBTsnoesCNJEsQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "abab": "^2.0.6", + "acorn": "^8.8.1", + "acorn-globals": "^7.0.0", + "cssom": "^0.5.0", + "cssstyle": "^2.3.0", + "data-urls": "^3.0.2", + "decimal.js": "^10.4.2", + "domexception": "^4.0.0", + "escodegen": "^2.0.0", + "form-data": "^4.0.0", + "html-encoding-sniffer": "^3.0.0", + "http-proxy-agent": "^5.0.0", + "https-proxy-agent": "^5.0.1", + "is-potential-custom-element-name": "^1.0.1", + "nwsapi": "^2.2.2", + "parse5": "^7.1.1", + "saxes": "^6.0.0", + "symbol-tree": "^3.2.4", + "tough-cookie": "^4.1.2", + "w3c-xmlserializer": "^4.0.0", + "webidl-conversions": "^7.0.0", + "whatwg-encoding": "^2.0.0", + "whatwg-mimetype": "^3.0.0", + "whatwg-url": "^11.0.0", + "ws": "^8.11.0", + "xml-name-validator": "^4.0.0" + }, + "engines": { + "node": ">=14" + }, + "peerDependencies": { + "canvas": "^2.5.0" + }, + "peerDependenciesMeta": { + "canvas": { + "optional": true + } + } + }, + "node_modules/jsesc": { + "version": "2.5.2", + "resolved": "https://registry.npmjs.org/jsesc/-/jsesc-2.5.2.tgz", + "integrity": "sha512-OYu7XEzjkCQ3C5Ps3QIZsQfNpqoJyZZA99wd9aWd05NCtC5pWOkShK2mkL6HXQR6/Cy2lbNdPlZBpuQHXE63gA==", + "dev": true, + "license": "MIT", + "bin": { + "jsesc": "bin/jsesc" + }, + "engines": { + "node": ">=4" + } + }, + "node_modules/json-parse-even-better-errors": { + "version": "2.3.1", + "resolved": "https://registry.npmjs.org/json-parse-even-better-errors/-/json-parse-even-better-errors-2.3.1.tgz", + "integrity": "sha512-xyFwyhro/JEof6Ghe2iz2NcXoj2sloNsWr/XsERDK/oiPCfaNhl5ONfp+jQdAZRQQ0IJWNzH9zIZF7li91kh2w==", + "dev": true, + "license": "MIT" + }, + "node_modules/json-schema-traverse": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/json-schema-traverse/-/json-schema-traverse-1.0.0.tgz", + "integrity": "sha512-NM8/P9n3XjXhIZn1lLhkFaACTOURQXjWhV4BA/RnOv8xvgqtqpAX9IO4mRQxSx1Rlo4tqzeqb0sOlruaOy3dug==", + "dev": true, + "license": "MIT" + }, + "node_modules/json5": { + "version": "2.2.3", + "resolved": "https://registry.npmjs.org/json5/-/json5-2.2.3.tgz", + "integrity": "sha512-XmOWe7eyHYH14cLdVPoyg+GOH3rYX++KpzrylJwSW98t3Nk+U8XOl8FWKOgwtzdb8lXGf6zYwDUzeHMWfxasyg==", + "dev": true, + "license": "MIT", + "bin": { + "json5": "lib/cli.js" + }, + "engines": { + "node": ">=6" + } + }, + "node_modules/jsonschema": { + "version": "1.5.0", + "resolved": "https://registry.npmjs.org/jsonschema/-/jsonschema-1.5.0.tgz", + "integrity": "sha512-K+A9hhqbn0f3pJX17Q/7H6yQfD/5OXgdrR5UE12gMXCiN9D5Xq2o5mddV2QEcX/bjla99ASsAAQUyMCCRWAEhw==", + "dev": true, + "license": "MIT", + "engines": { + "node": "*" + } + }, + "node_modules/kleur": { + "version": "3.0.3", + "resolved": "https://registry.npmjs.org/kleur/-/kleur-3.0.3.tgz", + "integrity": "sha512-eTIzlVOSUR+JxdDFepEYcBMtZ9Qqdef+rnzWdRZuMbOywu5tO2w2N7rqjoANZ5k9vywhL6Br1VRjUIgTQx4E8w==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=6" + } + }, + "node_modules/leven": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/leven/-/leven-3.1.0.tgz", + "integrity": "sha512-qsda+H8jTaUaN/x5vzW2rzc+8Rw4TAQ/4KjB46IwK5VH+IlVeeeje/EoZRpiXvIqjFgK84QffqPztGI3VBLG1A==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=6" + } + }, + "node_modules/lines-and-columns": { + "version": "1.2.4", + "resolved": "https://registry.npmjs.org/lines-and-columns/-/lines-and-columns-1.2.4.tgz", + "integrity": "sha512-7ylylesZQ/PV29jhEDl3Ufjo6ZX7gCqJr5F7PKrqc93v7fzSymt1BpwEU8nAUXs8qzzvqhbjhK5QZg6Mt/HkBg==", + "dev": true, + "license": "MIT" + }, + "node_modules/loader-runner": { + "version": "4.3.0", + "resolved": "https://registry.npmjs.org/loader-runner/-/loader-runner-4.3.0.tgz", + "integrity": "sha512-3R/1M+yS3j5ou80Me59j7F9IMs4PXs3VqRrm0TU3AbKPxlmpoY1TNscJV/oGJXo8qCatFGTfDbY6W6ipGOYXfg==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=6.11.5" + } + }, + "node_modules/locate-path": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/locate-path/-/locate-path-5.0.0.tgz", + "integrity": "sha512-t7hw9pI+WvuwNJXwk5zVHpyhIqzg2qTlklJOf0mVxGSbe3Fp2VieZcduNYjaLDoy6p9uGpQEGWG87WpMKlNq8g==", + "dev": true, + "license": "MIT", + "dependencies": { + "p-locate": "^4.1.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/lodash": { + "version": "4.17.21", + "resolved": "https://registry.npmjs.org/lodash/-/lodash-4.17.21.tgz", + "integrity": "sha512-v2kDEe57lecTulaDIuNTPy3Ry4gLGJ6Z1O3vE1krgXZNrsQ+LFTGHVxVjcXPs17LhbZVGedAJv8XZ1tvj5FvSg==", + "license": "MIT" + }, + "node_modules/lodash.clonedeep": { + "version": "4.5.0", + "resolved": "https://registry.npmjs.org/lodash.clonedeep/-/lodash.clonedeep-4.5.0.tgz", + "integrity": "sha512-H5ZhCF25riFd9uB5UCkVKo61m3S/xZk1x4wA6yp/L3RFP6Z/eHH1ymQcGLo7J3GMPfm0V/7m1tryHuGVxpqEBQ==", + "dev": true, + "license": "MIT" + }, + "node_modules/lodash.memoize": { + "version": "4.1.2", + "resolved": "https://registry.npmjs.org/lodash.memoize/-/lodash.memoize-4.1.2.tgz", + "integrity": "sha512-t7j+NzmgnQzTAYXcsHYLgimltOV1MXHtlOWf6GjL9Kj8GK5FInw5JotxvbOs+IvV1/Dzo04/fCGfLVs7aXb4Ag==", + "dev": true, + "license": "MIT" + }, + "node_modules/lru-cache": { + "version": "5.1.1", + "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-5.1.1.tgz", + "integrity": "sha512-KpNARQA3Iwv+jTA0utUVVbrh+Jlrr1Fv0e56GGzAFOXN7dk/FviaDW8LHmK52DlcH4WP2n6gI8vN1aesBFgo9w==", + "dev": true, + "license": "ISC", + "dependencies": { + "yallist": "^3.0.2" + } + }, + "node_modules/make-dir": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/make-dir/-/make-dir-4.0.0.tgz", + "integrity": "sha512-hXdUTZYIVOt1Ex//jAQi+wTZZpUpwBj/0QsOzqegb3rGMMeJiSEu5xLHnYfBrRV4RH2+OCSOO95Is/7x1WJ4bw==", + "dev": true, + "license": "MIT", + "dependencies": { + "semver": "^7.5.3" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/make-error": { + "version": "1.3.6", + "resolved": "https://registry.npmjs.org/make-error/-/make-error-1.3.6.tgz", + "integrity": "sha512-s8UhlNe7vPKomQhC1qFelMokr/Sc3AgNbso3n74mVPA5LTZwkB9NlXf4XPamLxJE8h0gh73rM94xvwRT2CVInw==", + "dev": true, + "license": "ISC" + }, + "node_modules/makeerror": { + "version": "1.0.12", + "resolved": "https://registry.npmjs.org/makeerror/-/makeerror-1.0.12.tgz", + "integrity": "sha512-JmqCvUhmt43madlpFzG4BQzG2Z3m6tvQDNKdClZnO3VbIudJYmxsT0FNJMeiB2+JTSlTQTSbU8QdesVmwJcmLg==", + "dev": true, + "license": "BSD-3-Clause", + "dependencies": { + "tmpl": "1.0.5" + } + }, + "node_modules/math-intrinsics": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/math-intrinsics/-/math-intrinsics-1.1.0.tgz", + "integrity": "sha512-/IXtbwEk5HTPyEwyKX6hGkYXxM9nbj64B+ilVJnC/R6B0pH5G4V3b0pVbL7DBj4tkhBAppbQUlf6F6Xl9LHu1g==", + "license": "MIT", + "engines": { + "node": ">= 0.4" + } + }, + "node_modules/merge-stream": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/merge-stream/-/merge-stream-2.0.0.tgz", + "integrity": "sha512-abv/qOcuPfk3URPfDzmZU1LKmuw8kT+0nIHvKrKgFrwifol/doWcdA4ZqsWQ8ENrFKkd67Mfpo/LovbIUsbt3w==", + "dev": true, + "license": "MIT" + }, + "node_modules/micromatch": { + "version": "4.0.8", + "resolved": "https://registry.npmjs.org/micromatch/-/micromatch-4.0.8.tgz", + "integrity": "sha512-PXwfBhYu0hBCPw8Dn0E+WDYb7af3dSLVWKi3HGv84IdF4TyFoC0ysxFd0Goxw7nSv4T/PzEJQxsYsEiFCKo2BA==", + "dev": true, + "license": "MIT", + "dependencies": { + "braces": "^3.0.3", + "picomatch": "^2.3.1" + }, + "engines": { + "node": ">=8.6" + } + }, + "node_modules/mime-db": { + "version": "1.52.0", + "resolved": "https://registry.npmjs.org/mime-db/-/mime-db-1.52.0.tgz", + "integrity": "sha512-sPU4uV7dYlvtWJxwwxHD0PuihVNiE7TyAbQ5SWxDCB9mUYvOgroQOwYQQOKPJ8CIbE+1ETVlOoK1UC2nU3gYvg==", + "license": "MIT", + "engines": { + "node": ">= 0.6" + } + }, + "node_modules/mime-types": { + "version": "2.1.35", + "resolved": "https://registry.npmjs.org/mime-types/-/mime-types-2.1.35.tgz", + "integrity": "sha512-ZDY+bPm5zTTF+YpCrAU9nK0UgICYPT0QtT1NZWFv4s++TNkcgVaT0g6+4R2uI4MjQjzysHB1zxuWL50hzaeXiw==", + "license": "MIT", + "dependencies": { + "mime-db": "1.52.0" + }, + "engines": { + "node": ">= 0.6" + } + }, + "node_modules/mimic-fn": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/mimic-fn/-/mimic-fn-2.1.0.tgz", + "integrity": "sha512-OqbOk5oEQeAZ8WXWydlu9HJjz9WVdEIvamMCcXmuqUYjTknH/sqsWvhQ3vgwKFRR1HpjvNBKQ37nbJgYzGqGcg==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=6" + } + }, + "node_modules/minimatch": { + "version": "3.1.2", + "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-3.1.2.tgz", + "integrity": "sha512-J7p63hRiAjw1NDEww1W7i37+ByIrOWO5XQQAzZ3VOcL0PNybwpfmV/N05zFAzwQ9USyEcX6t3UO+K5aqBQOIHw==", + "dev": true, + "license": "ISC", + "dependencies": { + "brace-expansion": "^1.1.7" + }, + "engines": { + "node": "*" + } + }, + "node_modules/module-details-from-path": { + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/module-details-from-path/-/module-details-from-path-1.0.4.tgz", + "integrity": "sha512-EGWKgxALGMgzvxYF1UyGTy0HXX/2vHLkw6+NvDKW2jypWbHpjQuj4UMcqQWXHERJhVGKikolT06G3bcKe4fi7w==", + "license": "MIT" + }, + "node_modules/ms": { + "version": "2.1.3", + "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.3.tgz", + "integrity": "sha512-6FlzubTLZG3J2a/NVCAleEhjzq5oxgHyaCU9yYXvcLsvoVaHJq/s5xXI6/XXP6tz7R9xAOtHnSO/tXtF3WRTlA==", + "license": "MIT" + }, + "node_modules/natural-compare": { + "version": "1.4.0", + "resolved": "https://registry.npmjs.org/natural-compare/-/natural-compare-1.4.0.tgz", + "integrity": "sha512-OWND8ei3VtNC9h7V60qff3SVobHr996CTwgxubgyQYEpg290h9J0buyECNNJexkFm5sOajh5G116RYA1c8ZMSw==", + "dev": true, + "license": "MIT" + }, + "node_modules/neo-async": { + "version": "2.6.2", + "resolved": "https://registry.npmjs.org/neo-async/-/neo-async-2.6.2.tgz", + "integrity": "sha512-Yd3UES5mWCSqR+qNT93S3UoYUkqAZ9lLg8a7g9rimsWmYGK8cVToA4/sF3RrshdyV3sAGMXVUmpMYOw+dLpOuw==", + "dev": true, + "license": "MIT" + }, + "node_modules/node-domexception": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/node-domexception/-/node-domexception-1.0.0.tgz", + "integrity": "sha512-/jKZoMpw0F8GRwl4/eLROPA3cfcXtLApP0QzLmUT/HuPCZWyB7IY9ZrMeKw2O/nFIqPQB3PVM9aYm0F312AXDQ==", + "deprecated": "Use your platform's native DOMException instead", + "dev": true, + "funding": [ + { + "type": "github", + "url": "https://github.com/sponsors/jimmywarting" + }, + { + "type": "github", + "url": "https://paypal.me/jimmywarting" + } + ], + "license": "MIT", + "engines": { + "node": ">=10.5.0" + } + }, + "node_modules/node-fetch": { + "version": "2.7.0", + "resolved": "https://registry.npmjs.org/node-fetch/-/node-fetch-2.7.0.tgz", + "integrity": "sha512-c4FRfUm/dbcWZ7U+1Wq0AwCyFL+3nt2bEw05wfxSz+DWpWsitgmSgYmy2dQdWyKC1694ELPqMs/YzUSNozLt8A==", + "license": "MIT", + "dependencies": { + "whatwg-url": "^5.0.0" + }, + "engines": { + "node": "4.x || >=6.0.0" + }, + "peerDependencies": { + "encoding": "^0.1.0" + }, + "peerDependenciesMeta": { + "encoding": { + "optional": true + } + } + }, + "node_modules/node-fetch/node_modules/tr46": { + "version": "0.0.3", + "resolved": "https://registry.npmjs.org/tr46/-/tr46-0.0.3.tgz", + "integrity": "sha512-N3WMsuqV66lT30CrXNbEjx4GEwlow3v6rr4mCcv6prnfwhS01rkgyFdjPNBYd9br7LpXV1+Emh01fHnq2Gdgrw==", + "license": "MIT" + }, + "node_modules/node-fetch/node_modules/webidl-conversions": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/webidl-conversions/-/webidl-conversions-3.0.1.tgz", + "integrity": "sha512-2JAn3z8AR6rjK8Sm8orRC0h/bcl/DqL7tRPdGZ4I1CjdF+EaMLmYxBHyXuKL849eucPFhvBoxMsflfOb8kxaeQ==", + "license": "BSD-2-Clause" + }, + "node_modules/node-fetch/node_modules/whatwg-url": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/whatwg-url/-/whatwg-url-5.0.0.tgz", + "integrity": "sha512-saE57nupxk6v3HY35+jzBwYa0rKSy0XR8JSxZPwgLr7ys0IBzhGviA1/TUGJLmSVqs8pb9AnvICXEuOHLprYTw==", + "license": "MIT", + "dependencies": { + "tr46": "~0.0.3", + "webidl-conversions": "^3.0.0" + } + }, + "node_modules/node-int64": { + "version": "0.4.0", + "resolved": "https://registry.npmjs.org/node-int64/-/node-int64-0.4.0.tgz", + "integrity": "sha512-O5lz91xSOeoXP6DulyHfllpq+Eg00MWitZIbtPfoSEvqIHdl5gfcY6hYzDWnj0qD5tz52PI08u9qUvSVeUBeHw==", + "dev": true, + "license": "MIT" + }, + "node_modules/node-releases": { + "version": "2.0.19", + "resolved": "https://registry.npmjs.org/node-releases/-/node-releases-2.0.19.tgz", + "integrity": "sha512-xxOWJsBKtzAq7DY0J+DTzuz58K8e7sJbdgwkbMWQe8UYB6ekmsQ45q0M/tJDsGaZmbC+l7n57UV8Hl5tHxO9uw==", + "dev": true, + "license": "MIT" + }, + "node_modules/normalize-path": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/normalize-path/-/normalize-path-3.0.0.tgz", + "integrity": "sha512-6eZs5Ls3WtCisHWp9S2GUy8dqkpGi4BVSz3GaqiE6ezub0512ESztXUwUB6C6IKbQkY2Pnb/mD4WYojCRwcwLA==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/npm-run-path": { + "version": "4.0.1", + "resolved": "https://registry.npmjs.org/npm-run-path/-/npm-run-path-4.0.1.tgz", + "integrity": "sha512-S48WzZW777zhNIrn7gxOlISNAqi9ZC/uQFnRdbeIHhZhCA6UqpkOT8T1G7BvfdgP4Er8gF4sUbaS0i7QvIfCWw==", + "dev": true, + "license": "MIT", + "dependencies": { + "path-key": "^3.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/nwsapi": { + "version": "2.2.20", + "resolved": "https://registry.npmjs.org/nwsapi/-/nwsapi-2.2.20.tgz", + "integrity": "sha512-/ieB+mDe4MrrKMT8z+mQL8klXydZWGR5Dowt4RAGKbJ3kIGEx3X4ljUo+6V73IXtUPWgfOlU5B9MlGxFO5T+cA==", + "dev": true, + "license": "MIT" + }, + "node_modules/object-inspect": { + "version": "1.13.4", + "resolved": "https://registry.npmjs.org/object-inspect/-/object-inspect-1.13.4.tgz", + "integrity": "sha512-W67iLl4J2EXEGTbfeHCffrjDfitvLANg0UlX3wFUUSTx92KXRFegMHUVgSqE+wvhAbi4WqjGg9czysTV2Epbew==", + "license": "MIT", + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/once": { + "version": "1.4.0", + "resolved": "https://registry.npmjs.org/once/-/once-1.4.0.tgz", + "integrity": "sha512-lNaJgI+2Q5URQBkccEKHTQOPaXdUxnZZElQTZY0MFUAuaEqe1E+Nyvgdz/aIyNi6Z9MzO5dv1H8n58/GELp3+w==", + "dev": true, + "license": "ISC", + "dependencies": { + "wrappy": "1" + } + }, + "node_modules/onetime": { + "version": "5.1.2", + "resolved": "https://registry.npmjs.org/onetime/-/onetime-5.1.2.tgz", + "integrity": "sha512-kbpaSSGJTWdAY5KPVeMOKXSrPtr8C8C7wodJbcsd51jRnmD+GZu8Y0VoU6Dm5Z4vWr0Ig/1NKuWRKf7j5aaYSg==", + "dev": true, + "license": "MIT", + "dependencies": { + "mimic-fn": "^2.1.0" + }, + "engines": { + "node": ">=6" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/openai": { + "version": "4.97.0", + "resolved": "https://registry.npmjs.org/openai/-/openai-4.97.0.tgz", + "integrity": "sha512-LRoiy0zvEf819ZUEJhgfV8PfsE8G5WpQi4AwA1uCV8SKvvtXQkoWUFkepD6plqyJQRghy2+AEPQ07FrJFKHZ9Q==", + "dev": true, + "license": "Apache-2.0", + "dependencies": { + "@types/node": "^18.11.18", + "@types/node-fetch": "^2.6.4", + "abort-controller": "^3.0.0", + "agentkeepalive": "^4.2.1", + "form-data-encoder": "1.7.2", + "formdata-node": "^4.3.2", + "node-fetch": "^2.6.7" + }, + "bin": { + "openai": "bin/cli" + }, + "peerDependencies": { + "ws": "^8.18.0", + "zod": "^3.23.8" + }, + "peerDependenciesMeta": { + "ws": { + "optional": true + }, + "zod": { + "optional": true + } + } + }, + "node_modules/openai/node_modules/form-data-encoder": { + "version": "1.7.2", + "resolved": "https://registry.npmjs.org/form-data-encoder/-/form-data-encoder-1.7.2.tgz", + "integrity": "sha512-qfqtYan3rxrnCk1VYaA4H+Ms9xdpPqvLZa6xmMgFvhO32x7/3J/ExcTd6qpxM0vH2GdMI+poehyBZvqfMTto8A==", + "dev": true, + "license": "MIT" + }, + "node_modules/openai/node_modules/formdata-node": { + "version": "4.4.1", + "resolved": "https://registry.npmjs.org/formdata-node/-/formdata-node-4.4.1.tgz", + "integrity": "sha512-0iirZp3uVDjVGt9p49aTaqjk84TrglENEDuqfdlZQ1roC9CWlPk6Avf8EEnZNcAqPonwkG35x4n3ww/1THYAeQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "node-domexception": "1.0.0", + "web-streams-polyfill": "4.0.0-beta.3" + }, + "engines": { + "node": ">= 12.20" + } + }, + "node_modules/p-limit": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/p-limit/-/p-limit-3.1.0.tgz", + "integrity": "sha512-TYOanM3wGwNGsZN2cVTYPArw454xnXj5qmWF1bEoAc4+cU/ol7GVh7odevjp1FNHduHc3KZMcFduxU5Xc6uJRQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "yocto-queue": "^0.1.0" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/p-locate": { + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/p-locate/-/p-locate-4.1.0.tgz", + "integrity": "sha512-R79ZZ/0wAxKGu3oYMlz8jy/kbhsNrS7SKZ7PxEHBgJ5+F2mtFW2fK2cOtBh1cHYkQsbzFV7I+EoRKe6Yt0oK7A==", + "dev": true, + "license": "MIT", + "dependencies": { + "p-limit": "^2.2.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/p-locate/node_modules/p-limit": { + "version": "2.3.0", + "resolved": "https://registry.npmjs.org/p-limit/-/p-limit-2.3.0.tgz", + "integrity": "sha512-//88mFWSJx8lxCzwdAABTJL2MyWB12+eIY7MDL2SqLmAkeKU9qxRvWuSyTjm3FUmpBEMuFfckAIqEaVGUDxb6w==", + "dev": true, + "license": "MIT", + "dependencies": { + "p-try": "^2.0.0" + }, + "engines": { + "node": ">=6" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/p-try": { + "version": "2.2.0", + "resolved": "https://registry.npmjs.org/p-try/-/p-try-2.2.0.tgz", + "integrity": "sha512-R4nPAVTAU0B9D35/Gk3uJf/7XYbQcyohSKdvAxIRSNghFl4e71hVoGnBNQz9cWaXxO2I10KTC+3jMdvvoKw6dQ==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=6" + } + }, + "node_modules/parse-json": { + "version": "5.2.0", + "resolved": "https://registry.npmjs.org/parse-json/-/parse-json-5.2.0.tgz", + "integrity": "sha512-ayCKvm/phCGxOkYRSCM82iDwct8/EonSEgCSxWxD7ve6jHggsFl4fZVQBPRNgQoKiuV/odhFrGzQXZwbifC8Rg==", + "dev": true, + "license": "MIT", + "dependencies": { + "@babel/code-frame": "^7.0.0", + "error-ex": "^1.3.1", + "json-parse-even-better-errors": "^2.3.0", + "lines-and-columns": "^1.1.6" + }, + "engines": { + "node": ">=8" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/parse5": { + "version": "7.3.0", + "resolved": "https://registry.npmjs.org/parse5/-/parse5-7.3.0.tgz", + "integrity": "sha512-IInvU7fabl34qmi9gY8XOVxhYyMyuH2xUNpb2q8/Y+7552KlejkRvqvD19nMoUW/uQGGbqNpA6Tufu5FL5BZgw==", + "dev": true, + "license": "MIT", + "dependencies": { + "entities": "^6.0.0" + }, + "funding": { + "url": "https://github.com/inikulin/parse5?sponsor=1" + } + }, + "node_modules/path-exists": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/path-exists/-/path-exists-4.0.0.tgz", + "integrity": "sha512-ak9Qy5Q7jYb2Wwcey5Fpvg2KoAc/ZIhLSLOSBmRmygPsGwkVVt0fZa0qrtMz+m6tJTAHfZQ8FnmB4MG4LWy7/w==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=8" + } + }, + "node_modules/path-is-absolute": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/path-is-absolute/-/path-is-absolute-1.0.1.tgz", + "integrity": "sha512-AVbw3UJ2e9bq64vSaS9Am0fje1Pa8pbGqTTsmXfaIiMpnr5DlDhfJOuLj9Sf95ZPVDAUerDfEk88MPmPe7UCQg==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/path-key": { + "version": "3.1.1", + "resolved": "https://registry.npmjs.org/path-key/-/path-key-3.1.1.tgz", + "integrity": "sha512-ojmeN0qd+y0jszEtoY48r0Peq5dwMEkIlCOu6Q5f41lfkswXuKtYrhgoTpLnyIcHm24Uhqx+5Tqm2InSwLhE6Q==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=8" + } + }, + "node_modules/path-parse": { + "version": "1.0.7", + "resolved": "https://registry.npmjs.org/path-parse/-/path-parse-1.0.7.tgz", + "integrity": "sha512-LDJzPVEEEPR+y48z93A0Ed0yXb8pAByGWo/k5YYdYgpY2/2EsOsksJrq7lOHxryrVOn1ejG6oAp8ahvOIQD8sw==", + "license": "MIT" + }, + "node_modules/picocolors": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/picocolors/-/picocolors-1.1.1.tgz", + "integrity": "sha512-xceH2snhtb5M9liqDsmEw56le376mTZkEX/jEb/RxNFyegNul7eNslCXP9FDj/Lcu0X8KEyMceP2ntpaHrDEVA==", + "dev": true, + "license": "ISC" + }, + "node_modules/picomatch": { + "version": "2.3.1", + "resolved": "https://registry.npmjs.org/picomatch/-/picomatch-2.3.1.tgz", + "integrity": "sha512-JU3teHTNjmE2VCGFzuY8EXzCDVwEqB2a8fsIvwaStHhAWJEeVd1o1QD80CU6+ZdEXXSLbSsuLwJjkCBWqRQUVA==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=8.6" + }, + "funding": { + "url": "https://github.com/sponsors/jonschlinkert" + } + }, + "node_modules/pirates": { + "version": "4.0.7", + "resolved": "https://registry.npmjs.org/pirates/-/pirates-4.0.7.tgz", + "integrity": "sha512-TfySrs/5nm8fQJDcBDuUng3VOUKsd7S+zqvbOTiGXHfxX4wK31ard+hoNuvkicM/2YFzlpDgABOevKSsB4G/FA==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">= 6" + } + }, + "node_modules/pkg-dir": { + "version": "4.2.0", + "resolved": "https://registry.npmjs.org/pkg-dir/-/pkg-dir-4.2.0.tgz", + "integrity": "sha512-HRDzbaKjC+AOWVXxAU/x54COGeIv9eb+6CkDSQoNTt4XyWoIJvuPsXizxu/Fr23EiekbtZwmh1IcIG/l/a10GQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "find-up": "^4.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/prettier": { + "version": "3.5.3", + "resolved": "https://registry.npmjs.org/prettier/-/prettier-3.5.3.tgz", + "integrity": "sha512-QQtaxnoDJeAkDvDKWCLiwIXkTgRhwYDEQCghU9Z6q03iyek/rxRh/2lC3HB7P8sWT2xC/y5JDctPLBIGzHKbhw==", + "dev": true, + "license": "MIT", + "bin": { + "prettier": "bin/prettier.cjs" + }, + "engines": { + "node": ">=14" + }, + "funding": { + "url": "https://github.com/prettier/prettier?sponsor=1" + } + }, + "node_modules/pretty-format": { + "version": "29.7.0", + "resolved": "https://registry.npmjs.org/pretty-format/-/pretty-format-29.7.0.tgz", + "integrity": "sha512-Pdlw/oPxN+aXdmM9R00JVC9WVFoCLTKJvDVLgmJ+qAffBMxsV85l/Lu7sNx4zSzPyoL2euImuEwHhOXdEgNFZQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "@jest/schemas": "^29.6.3", + "ansi-styles": "^5.0.0", + "react-is": "^18.0.0" + }, + "engines": { + "node": "^14.15.0 || ^16.10.0 || >=18.0.0" + } + }, + "node_modules/pretty-format/node_modules/ansi-styles": { + "version": "5.2.0", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-5.2.0.tgz", + "integrity": "sha512-Cxwpt2SfTzTtXcfOlzGEee8O+c+MmUgGrNiBcXnuWxuFJHe6a5Hz7qwhwe5OgaSYI0IJvkLqWX1ASG+cJOkEiA==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/chalk/ansi-styles?sponsor=1" + } + }, + "node_modules/process": { + "version": "0.11.10", + "resolved": "https://registry.npmjs.org/process/-/process-0.11.10.tgz", + "integrity": "sha512-cdGef/drWFoydD1JsMzuFf8100nZl+GT+yacc2bEced5f9Rjk4z+WtFUTBu9PhOi9j/jfmBPu0mMEY4wIdAF8A==", + "license": "MIT", + "engines": { + "node": ">= 0.6.0" + } + }, + "node_modules/prompts": { + "version": "2.4.2", + "resolved": "https://registry.npmjs.org/prompts/-/prompts-2.4.2.tgz", + "integrity": "sha512-NxNv/kLguCA7p3jE8oL2aEBsrJWgAakBpgmgK6lpPWV+WuOmY6r2/zbAVnP+T8bQlA0nzHXSJSJW0Hq7ylaD2Q==", + "dev": true, + "license": "MIT", + "dependencies": { + "kleur": "^3.0.3", + "sisteransi": "^1.0.5" + }, + "engines": { + "node": ">= 6" + } + }, + "node_modules/psl": { + "version": "1.15.0", + "resolved": "https://registry.npmjs.org/psl/-/psl-1.15.0.tgz", + "integrity": "sha512-JZd3gMVBAVQkSs6HdNZo9Sdo0LNcQeMNP3CozBJb3JYC/QUYZTnKxP+f8oWRX4rHP5EurWxqAHTSwUCjlNKa1w==", + "dev": true, + "license": "MIT", + "dependencies": { + "punycode": "^2.3.1" + }, + "funding": { + "url": "https://github.com/sponsors/lupomontero" + } + }, + "node_modules/punycode": { + "version": "2.3.1", + "resolved": "https://registry.npmjs.org/punycode/-/punycode-2.3.1.tgz", + "integrity": "sha512-vYt7UD1U9Wg6138shLtLOvdAu+8DsC/ilFtEVHcH+wydcSpNE20AfSOduf6MkRFahL5FY7X1oU7nKVZFtfq8Fg==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=6" + } + }, + "node_modules/pure-rand": { + "version": "6.1.0", + "resolved": "https://registry.npmjs.org/pure-rand/-/pure-rand-6.1.0.tgz", + "integrity": "sha512-bVWawvoZoBYpp6yIoQtQXHZjmz35RSVHnUOTefl8Vcjr8snTPY1wnpSPMWekcFwbxI6gtmT7rSYPFvz71ldiOA==", + "dev": true, + "funding": [ + { + "type": "individual", + "url": "https://github.com/sponsors/dubzzz" + }, + { + "type": "opencollective", + "url": "https://opencollective.com/fast-check" + } + ], + "license": "MIT" + }, + "node_modules/qs": { + "version": "6.14.0", + "resolved": "https://registry.npmjs.org/qs/-/qs-6.14.0.tgz", + "integrity": "sha512-YWWTjgABSKcvs/nWBi9PycY/JiPJqOD4JA6o9Sej2AtvSGarXxKC3OQSk4pAarbdQlKAh5D4FCQkJNkW+GAn3w==", + "license": "BSD-3-Clause", + "dependencies": { + "side-channel": "^1.1.0" + }, + "engines": { + "node": ">=0.6" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/querystringify": { + "version": "2.2.0", + "resolved": "https://registry.npmjs.org/querystringify/-/querystringify-2.2.0.tgz", + "integrity": "sha512-FIqgj2EUvTa7R50u0rGsyTftzjYmv/a3hO345bZNrqabNqjtgiDMgmo4mkUjd+nzU5oF3dClKqFIPUKybUyqoQ==", + "dev": true, + "license": "MIT" + }, + "node_modules/randombytes": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/randombytes/-/randombytes-2.1.0.tgz", + "integrity": "sha512-vYl3iOX+4CKUWuxGi9Ukhie6fsqXqS9FE2Zaic4tNFD2N2QQaXOMFbuKK4QmDHC0JO6B1Zp41J0LpT0oR68amQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "safe-buffer": "^5.1.0" + } + }, + "node_modules/react-is": { + "version": "18.3.1", + "resolved": "https://registry.npmjs.org/react-is/-/react-is-18.3.1.tgz", + "integrity": "sha512-/LLMVyas0ljjAtoYiPqYiL8VWXzUUdThrmU5+n20DZv+a+ClRoevUzw5JxU+Ieh5/c87ytoTBV9G1FiKfNJdmg==", + "dev": true, + "license": "MIT" + }, + "node_modules/readable-stream": { + "version": "4.7.0", + "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-4.7.0.tgz", + "integrity": "sha512-oIGGmcpTLwPga8Bn6/Z75SVaH1z5dUut2ibSyAMVhmUggWpmDn2dapB0n7f8nwaSiRtepAsfJyfXIO5DCVAODg==", + "license": "MIT", + "dependencies": { + "abort-controller": "^3.0.0", + "buffer": "^6.0.3", + "events": "^3.3.0", + "process": "^0.11.10", + "string_decoder": "^1.3.0" + }, + "engines": { + "node": "^12.22.0 || ^14.17.0 || >=16.0.0" + } + }, + "node_modules/require-directory": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/require-directory/-/require-directory-2.1.1.tgz", + "integrity": "sha512-fGxEI7+wsG9xrvdjsrlmL22OMTTiHRwAMroiEeMgq8gzoLC/PQr7RsRDSTLUg/bZAZtF+TVIkHc6/4RIKrui+Q==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/require-from-string": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/require-from-string/-/require-from-string-2.0.2.tgz", + "integrity": "sha512-Xf0nWe6RseziFMu+Ap9biiUbmplq6S9/p+7w7YXP/JBHhrUDDUhwa+vANyubuqfZWTveU//DYVGsDG7RKL/vEw==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/require-in-the-middle": { + "version": "7.5.2", + "resolved": "https://registry.npmjs.org/require-in-the-middle/-/require-in-the-middle-7.5.2.tgz", + "integrity": "sha512-gAZ+kLqBdHarXB64XpAe2VCjB7rIRv+mU8tfRWziHRJ5umKsIHN2tLLv6EtMw7WCdP19S0ERVMldNvxYCHnhSQ==", + "license": "MIT", + "dependencies": { + "debug": "^4.3.5", + "module-details-from-path": "^1.0.3", + "resolve": "^1.22.8" + }, + "engines": { + "node": ">=8.6.0" + } + }, + "node_modules/requires-port": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/requires-port/-/requires-port-1.0.0.tgz", + "integrity": "sha512-KigOCHcocU3XODJxsu8i/j8T9tzT4adHiecwORRQ0ZZFcp7ahwXuRU1m+yuO90C5ZUyGeGfocHDI14M3L3yDAQ==", + "dev": true, + "license": "MIT" + }, + "node_modules/resolve": { + "version": "1.22.10", + "resolved": "https://registry.npmjs.org/resolve/-/resolve-1.22.10.tgz", + "integrity": "sha512-NPRy+/ncIMeDlTAsuqwKIiferiawhefFJtkNSW0qZJEqMEb+qBt/77B/jGeeek+F0uOeN05CDa6HXbbIgtVX4w==", + "license": "MIT", + "dependencies": { + "is-core-module": "^2.16.0", + "path-parse": "^1.0.7", + "supports-preserve-symlinks-flag": "^1.0.0" + }, + "bin": { + "resolve": "bin/resolve" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/resolve-cwd": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/resolve-cwd/-/resolve-cwd-3.0.0.tgz", + "integrity": "sha512-OrZaX2Mb+rJCpH/6CpSqt9xFVpN++x01XnN2ie9g6P5/3xelLAkXWVADpdz1IHD/KFfEXyE6V0U01OQ3UO2rEg==", + "dev": true, + "license": "MIT", + "dependencies": { + "resolve-from": "^5.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/resolve-from": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/resolve-from/-/resolve-from-5.0.0.tgz", + "integrity": "sha512-qYg9KP24dD5qka9J47d0aVky0N+b4fTU89LN9iDnjB5waksiC49rvMB0PrUJQGoTmH50XPiqOvAjDfaijGxYZw==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=8" + } + }, + "node_modules/resolve.exports": { + "version": "2.0.3", + "resolved": "https://registry.npmjs.org/resolve.exports/-/resolve.exports-2.0.3.tgz", + "integrity": "sha512-OcXjMsGdhL4XnbShKpAcSqPMzQoYkYyhbEaeSko47MjRP9NfEQMhZkXL1DoFlt9LWQn4YttrdnV6X2OiyzBi+A==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=10" + } + }, + "node_modules/safe-buffer": { + "version": "5.1.2", + "resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.1.2.tgz", + "integrity": "sha512-Gd2UZBJDkXlY7GbJxfsE8/nvKkUEU1G38c1siN6QP6a9PT9MmHB8GnpscSmMJSoF8LOIrt8ud/wPtojys4G6+g==", + "dev": true, + "license": "MIT" + }, + "node_modules/safer-buffer": { + "version": "2.1.2", + "resolved": "https://registry.npmjs.org/safer-buffer/-/safer-buffer-2.1.2.tgz", + "integrity": "sha512-YZo3K82SD7Riyi0E1EQPojLz7kpepnSQI9IyPbHHg1XXXevb5dJI7tpyN2ADxGcQbHG7vcyRHk0cbwqcQriUtg==", + "dev": true, + "license": "MIT" + }, + "node_modules/saxes": { + "version": "6.0.0", + "resolved": "https://registry.npmjs.org/saxes/-/saxes-6.0.0.tgz", + "integrity": "sha512-xAg7SOnEhrm5zI3puOOKyy1OMcMlIJZYNJY7xLBwSze0UjhPLnWfj2GF2EpT0jmzaJKIWKHLsaSSajf35bcYnA==", + "dev": true, + "license": "ISC", + "dependencies": { + "xmlchars": "^2.2.0" + }, + "engines": { + "node": ">=v12.22.7" + } + }, + "node_modules/schema-utils": { + "version": "4.3.2", + "resolved": "https://registry.npmjs.org/schema-utils/-/schema-utils-4.3.2.tgz", + "integrity": "sha512-Gn/JaSk/Mt9gYubxTtSn/QCV4em9mpAPiR1rqy/Ocu19u/G9J5WWdNoUT4SiV6mFC3y6cxyFcFwdzPM3FgxGAQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "@types/json-schema": "^7.0.9", + "ajv": "^8.9.0", + "ajv-formats": "^2.1.1", + "ajv-keywords": "^5.1.0" + }, + "engines": { + "node": ">= 10.13.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/webpack" + } + }, + "node_modules/semver": { + "version": "7.7.1", + "resolved": "https://registry.npmjs.org/semver/-/semver-7.7.1.tgz", + "integrity": "sha512-hlq8tAfn0m/61p4BVRcPzIGr6LKiMwo4VM6dGi6pt4qcRkmNzTcWq6eCEjEh+qXjkMDvPlOFFSGwQjoEa6gyMA==", + "license": "ISC", + "bin": { + "semver": "bin/semver.js" + }, + "engines": { + "node": ">=10" + } + }, + "node_modules/serialize-javascript": { + "version": "6.0.2", + "resolved": "https://registry.npmjs.org/serialize-javascript/-/serialize-javascript-6.0.2.tgz", + "integrity": "sha512-Saa1xPByTTq2gdeFZYLLo+RFE35NHZkAbqZeWNd3BpzppeVisAqpDjcp8dyf6uIvEqJRd46jemmyA4iFIeVk8g==", + "dev": true, + "license": "BSD-3-Clause", + "dependencies": { + "randombytes": "^2.1.0" + } + }, + "node_modules/shebang-command": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/shebang-command/-/shebang-command-2.0.0.tgz", + "integrity": "sha512-kHxr2zZpYtdmrN1qDjrrX/Z1rR1kG8Dx+gkpK1G4eXmvXswmcE1hTWBWYUzlraYw1/yZp6YuDY77YtvbN0dmDA==", + "dev": true, + "license": "MIT", + "dependencies": { + "shebang-regex": "^3.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/shebang-regex": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/shebang-regex/-/shebang-regex-3.0.0.tgz", + "integrity": "sha512-7++dFhtcx3353uBaq8DDR4NuxBetBzC7ZQOhmTQInHEd6bSrXdiEyzCvG07Z44UYdLShWUyXt5M/yhz8ekcb1A==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=8" + } + }, + "node_modules/shimmer": { + "version": "1.2.1", + "resolved": "https://registry.npmjs.org/shimmer/-/shimmer-1.2.1.tgz", + "integrity": "sha512-sQTKC1Re/rM6XyFM6fIAGHRPVGvyXfgzIDvzoq608vM+jeyVD0Tu1E6Np0Kc2zAIFWIj963V2800iF/9LPieQw==", + "license": "BSD-2-Clause" + }, + "node_modules/side-channel": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/side-channel/-/side-channel-1.1.0.tgz", + "integrity": "sha512-ZX99e6tRweoUXqR+VBrslhda51Nh5MTQwou5tnUDgbtyM0dBgmhEDtWGP/xbKn6hqfPRHujUNwz5fy/wbbhnpw==", + "license": "MIT", + "dependencies": { + "es-errors": "^1.3.0", + "object-inspect": "^1.13.3", + "side-channel-list": "^1.0.0", + "side-channel-map": "^1.0.1", + "side-channel-weakmap": "^1.0.2" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/side-channel-list": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/side-channel-list/-/side-channel-list-1.0.0.tgz", + "integrity": "sha512-FCLHtRD/gnpCiCHEiJLOwdmFP+wzCmDEkc9y7NsYxeF4u7Btsn1ZuwgwJGxImImHicJArLP4R0yX4c2KCrMrTA==", + "license": "MIT", + "dependencies": { + "es-errors": "^1.3.0", + "object-inspect": "^1.13.3" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/side-channel-map": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/side-channel-map/-/side-channel-map-1.0.1.tgz", + "integrity": "sha512-VCjCNfgMsby3tTdo02nbjtM/ewra6jPHmpThenkTYh8pG9ucZ/1P8So4u4FGBek/BjpOVsDCMoLA/iuBKIFXRA==", + "license": "MIT", + "dependencies": { + "call-bound": "^1.0.2", + "es-errors": "^1.3.0", + "get-intrinsic": "^1.2.5", + "object-inspect": "^1.13.3" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/side-channel-weakmap": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/side-channel-weakmap/-/side-channel-weakmap-1.0.2.tgz", + "integrity": "sha512-WPS/HvHQTYnHisLo9McqBHOJk2FkHO/tlpvldyrnem4aeQp4hai3gythswg6p01oSoTl58rcpiFAjF2br2Ak2A==", + "license": "MIT", + "dependencies": { + "call-bound": "^1.0.2", + "es-errors": "^1.3.0", + "get-intrinsic": "^1.2.5", + "object-inspect": "^1.13.3", + "side-channel-map": "^1.0.1" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/signal-exit": { + "version": "3.0.7", + "resolved": "https://registry.npmjs.org/signal-exit/-/signal-exit-3.0.7.tgz", + "integrity": "sha512-wnD2ZE+l+SPC/uoS0vXeE9L1+0wuaMqKlfz9AMUo38JsyLSBWSFcHR1Rri62LZc12vLr1gb3jl7iwQhgwpAbGQ==", + "dev": true, + "license": "ISC" + }, + "node_modules/sisteransi": { + "version": "1.0.5", + "resolved": "https://registry.npmjs.org/sisteransi/-/sisteransi-1.0.5.tgz", + "integrity": "sha512-bLGGlR1QxBcynn2d5YmDX4MGjlZvy2MRBDRNHLJ8VI6l6+9FUiyTFNJ0IveOSP0bcXgVDPRcfGqA0pjaqUpfVg==", + "dev": true, + "license": "MIT" + }, + "node_modules/slash": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/slash/-/slash-3.0.0.tgz", + "integrity": "sha512-g9Q1haeby36OSStwb4ntCGGGaKsaVSjQ68fBxoQcutl5fS1vuY18H3wSt3jFyFtrkx+Kz0V1G85A4MyAdDMi2Q==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=8" + } + }, + "node_modules/source-map": { + "version": "0.5.7", + "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.5.7.tgz", + "integrity": "sha512-LbrmJOMUSdEVxIKvdcJzQC+nQhe8FUZQTXQy6+I75skNgn3OoQ0DZA8YnFa7gp8tqtL3KPf1kmo0R5DoApeSGQ==", + "dev": true, + "license": "BSD-3-Clause", + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/source-map-support": { + "version": "0.5.13", + "resolved": "https://registry.npmjs.org/source-map-support/-/source-map-support-0.5.13.tgz", + "integrity": "sha512-SHSKFHadjVA5oR4PPqhtAVdcBWwRYVd6g6cAXnIbRiIwc2EhPrTuKUBdSLvlEKyIP3GCf89fltvcZiP9MMFA1w==", + "dev": true, + "license": "MIT", + "dependencies": { + "buffer-from": "^1.0.0", + "source-map": "^0.6.0" + } + }, + "node_modules/source-map-support/node_modules/source-map": { + "version": "0.6.1", + "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz", + "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==", + "dev": true, + "license": "BSD-3-Clause", + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/sprintf-js": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/sprintf-js/-/sprintf-js-1.0.3.tgz", + "integrity": "sha512-D9cPgkvLlV3t3IzL0D0YLvGA9Ahk4PcvVwUbN0dSGr1aP0Nrt4AEnTUbuGvquEC0mA64Gqt1fzirlRs5ibXx8g==", + "dev": true, + "license": "BSD-3-Clause" + }, + "node_modules/stack-utils": { + "version": "2.0.6", + "resolved": "https://registry.npmjs.org/stack-utils/-/stack-utils-2.0.6.tgz", + "integrity": "sha512-XlkWvfIm6RmsWtNJx+uqtKLS8eqFbxUg0ZzLXqY0caEy9l7hruX8IpiDnjsLavoBgqCCR71TqWO8MaXYheJ3RQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "escape-string-regexp": "^2.0.0" + }, + "engines": { + "node": ">=10" + } + }, + "node_modules/string_decoder": { + "version": "1.3.0", + "resolved": "https://registry.npmjs.org/string_decoder/-/string_decoder-1.3.0.tgz", + "integrity": "sha512-hkRX8U1WjJFd8LsDJ2yQ/wWWxaopEsABU1XfkM8A+j0+85JAGppt16cr1Whg6KIbb4okU6Mql6BOj+uup/wKeA==", + "license": "MIT", + "dependencies": { + "safe-buffer": "~5.2.0" + } + }, + "node_modules/string_decoder/node_modules/safe-buffer": { + "version": "5.2.1", + "resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.2.1.tgz", + "integrity": "sha512-rp3So07KcdmmKbGvgaNxQSJr7bGVSVk5S9Eq1F+ppbRo70+YeaDxkw5Dd8NPN+GD6bjnYm2VuPuCXmpuYvmCXQ==", + "funding": [ + { + "type": "github", + "url": "https://github.com/sponsors/feross" + }, + { + "type": "patreon", + "url": "https://www.patreon.com/feross" + }, + { + "type": "consulting", + "url": "https://feross.org/support" + } + ], + "license": "MIT" + }, + "node_modules/string-length": { + "version": "4.0.2", + "resolved": "https://registry.npmjs.org/string-length/-/string-length-4.0.2.tgz", + "integrity": "sha512-+l6rNN5fYHNhZZy41RXsYptCjA2Igmq4EG7kZAYFQI1E1VTXarr6ZPXBg6eq7Y6eK4FEhY6AJlyuFIb/v/S0VQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "char-regex": "^1.0.2", + "strip-ansi": "^6.0.0" + }, + "engines": { + "node": ">=10" + } + }, + "node_modules/string-width": { + "version": "4.2.3", + "resolved": "https://registry.npmjs.org/string-width/-/string-width-4.2.3.tgz", + "integrity": "sha512-wKyQRQpjJ0sIp62ErSZdGsjMJWsap5oRNihHhu6G7JVO/9jIB6UyevL+tXuOqrng8j/cxKTWyWUwvSTriiZz/g==", + "license": "MIT", + "dependencies": { + "emoji-regex": "^8.0.0", + "is-fullwidth-code-point": "^3.0.0", + "strip-ansi": "^6.0.1" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/strip-ansi": { + "version": "6.0.1", + "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-6.0.1.tgz", + "integrity": "sha512-Y38VPSHcqkFrCpFnQ9vuSXmquuv5oXOKpGeT6aGrr3o3Gc9AlVa6JBfUSOCnbxGGZF+/0ooI7KrPuUSztUdU5A==", + "license": "MIT", + "dependencies": { + "ansi-regex": "^5.0.1" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/strip-bom": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/strip-bom/-/strip-bom-4.0.0.tgz", + "integrity": "sha512-3xurFv5tEgii33Zi8Jtp55wEIILR9eh34FAW00PZf+JnSsTmV/ioewSgQl97JHvgjoRGwPShsWm+IdrxB35d0w==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=8" + } + }, + "node_modules/strip-final-newline": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/strip-final-newline/-/strip-final-newline-2.0.0.tgz", + "integrity": "sha512-BrpvfNAE3dcvq7ll3xVumzjKjZQ5tI1sEUIKr3Uoks0XUl45St3FlatVqef9prk4jRDzhW6WZg+3bk93y6pLjA==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=6" + } + }, + "node_modules/strip-json-comments": { + "version": "3.1.1", + "resolved": "https://registry.npmjs.org/strip-json-comments/-/strip-json-comments-3.1.1.tgz", + "integrity": "sha512-6fPc+R4ihwqP6N/aIv2f1gMH8lOVtWQHoqC4yK6oSDVVocumAsfCqjkXnqiYMhmMwS/mEHLp7Vehlt3ql6lEig==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=8" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/strnum": { + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/strnum/-/strnum-1.1.2.tgz", + "integrity": "sha512-vrN+B7DBIoTTZjnPNewwhx6cBA/H+IS7rfW68n7XxC1y7uoiGQBxaKzqucGUgavX15dJgiGztLJ8vxuEzwqBdA==", + "dev": true, + "funding": [ + { + "type": "github", + "url": "https://github.com/sponsors/NaturalIntelligence" + } + ], + "license": "MIT" + }, + "node_modules/supports-color": { + "version": "7.2.0", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz", + "integrity": "sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==", + "dev": true, + "license": "MIT", + "dependencies": { + "has-flag": "^4.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/supports-preserve-symlinks-flag": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/supports-preserve-symlinks-flag/-/supports-preserve-symlinks-flag-1.0.0.tgz", + "integrity": "sha512-ot0WnXS9fgdkgIcePe6RHNk1WA8+muPa6cSjeR3V8K27q9BB1rTE3R1p7Hv0z1ZyAc8s6Vvv8DIyWf681MAt0w==", + "license": "MIT", + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/symbol-tree": { + "version": "3.2.4", + "resolved": "https://registry.npmjs.org/symbol-tree/-/symbol-tree-3.2.4.tgz", + "integrity": "sha512-9QNk5KwDF+Bvz+PyObkmSYjI5ksVUYtjW7AU22r2NKcfLJcXp96hkDWU3+XndOsUb+AQ9QhfzfCT2O+CNWT5Tw==", + "dev": true, + "license": "MIT" + }, + "node_modules/tapable": { + "version": "2.2.1", + "resolved": "https://registry.npmjs.org/tapable/-/tapable-2.2.1.tgz", + "integrity": "sha512-GNzQvQTOIP6RyTfE2Qxb8ZVlNmw0n88vp1szwWRimP02mnTsx3Wtn5qRdqY9w2XduFNUgvOwhNnQsjwCp+kqaQ==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=6" + } + }, + "node_modules/terser": { + "version": "5.39.0", + "resolved": "https://registry.npmjs.org/terser/-/terser-5.39.0.tgz", + "integrity": "sha512-LBAhFyLho16harJoWMg/nZsQYgTrg5jXOn2nCYjRUcZZEdE3qa2zb8QEDRUGVZBW4rlazf2fxkg8tztybTaqWw==", + "dev": true, + "license": "BSD-2-Clause", + "dependencies": { + "@jridgewell/source-map": "^0.3.3", + "acorn": "^8.8.2", + "commander": "^2.20.0", + "source-map-support": "~0.5.20" + }, + "bin": { + "terser": "bin/terser" + }, + "engines": { + "node": ">=10" + } + }, + "node_modules/terser-webpack-plugin": { + "version": "5.3.14", + "resolved": "https://registry.npmjs.org/terser-webpack-plugin/-/terser-webpack-plugin-5.3.14.tgz", + "integrity": "sha512-vkZjpUjb6OMS7dhV+tILUW6BhpDR7P2L/aQSAv+Uwk+m8KATX9EccViHTJR2qDtACKPIYndLGCyl3FMo+r2LMw==", + "dev": true, + "license": "MIT", + "dependencies": { + "@jridgewell/trace-mapping": "^0.3.25", + "jest-worker": "^27.4.5", + "schema-utils": "^4.3.0", + "serialize-javascript": "^6.0.2", + "terser": "^5.31.1" + }, + "engines": { + "node": ">= 10.13.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/webpack" + }, + "peerDependencies": { + "webpack": "^5.1.0" + }, + "peerDependenciesMeta": { + "@swc/core": { + "optional": true + }, + "esbuild": { + "optional": true + }, + "uglify-js": { + "optional": true + } + } + }, + "node_modules/terser-webpack-plugin/node_modules/jest-worker": { + "version": "27.5.1", + "resolved": "https://registry.npmjs.org/jest-worker/-/jest-worker-27.5.1.tgz", + "integrity": "sha512-7vuh85V5cdDofPyxn58nrPjBktZo0u9x1g8WtjQol+jZDaE+fhN+cIvTj11GndBnMnyfrUOG1sZQxCdjKh+DKg==", + "dev": true, + "license": "MIT", + "dependencies": { + "@types/node": "*", + "merge-stream": "^2.0.0", + "supports-color": "^8.0.0" + }, + "engines": { + "node": ">= 10.13.0" + } + }, + "node_modules/terser-webpack-plugin/node_modules/supports-color": { + "version": "8.1.1", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-8.1.1.tgz", + "integrity": "sha512-MpUEN2OodtUzxvKQl72cUF7RQ5EiHsGvSsVG0ia9c5RbWGL2CI4C7EpPS8UTBIplnlzZiNuV56w+FuNxy3ty2Q==", + "dev": true, + "license": "MIT", + "dependencies": { + "has-flag": "^4.0.0" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/chalk/supports-color?sponsor=1" + } + }, + "node_modules/terser/node_modules/source-map": { + "version": "0.6.1", + "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz", + "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==", + "dev": true, + "license": "BSD-3-Clause", + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/terser/node_modules/source-map-support": { + "version": "0.5.21", + "resolved": "https://registry.npmjs.org/source-map-support/-/source-map-support-0.5.21.tgz", + "integrity": "sha512-uBHU3L3czsIyYXKX88fdrGovxdSCoTGDRZ6SYXtSRxLZUzHg5P/66Ht6uoUlHu9EZod+inXhKo3qQgwXUT/y1w==", + "dev": true, + "license": "MIT", + "dependencies": { + "buffer-from": "^1.0.0", + "source-map": "^0.6.0" + } + }, + "node_modules/test-exclude": { + "version": "6.0.0", + "resolved": "https://registry.npmjs.org/test-exclude/-/test-exclude-6.0.0.tgz", + "integrity": "sha512-cAGWPIyOHU6zlmg88jwm7VRyXnMN7iV68OGAbYDk/Mh/xC/pzVPlQtY6ngoIH/5/tciuhGfvESU8GrHrcxD56w==", + "dev": true, + "license": "ISC", + "dependencies": { + "@istanbuljs/schema": "^0.1.2", + "glob": "^7.1.4", + "minimatch": "^3.0.4" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/tmpl": { + "version": "1.0.5", + "resolved": "https://registry.npmjs.org/tmpl/-/tmpl-1.0.5.tgz", + "integrity": "sha512-3f0uOEAQwIqGuWW2MVzYg8fV/QNnc/IpuJNG837rLuczAaLVHslWHZQj4IGiEl5Hs3kkbhwL9Ab7Hrsmuj+Smw==", + "dev": true, + "license": "BSD-3-Clause" + }, + "node_modules/to-fast-properties": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/to-fast-properties/-/to-fast-properties-2.0.0.tgz", + "integrity": "sha512-/OaKK0xYrs3DmxRYqL/yDc+FxFUVYhDlXMhRmv3z915w2HF1tnN1omB354j8VUGO/hbRzyD6Y3sA7v7GS/ceog==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=4" + } + }, + "node_modules/to-regex-range": { + "version": "5.0.1", + "resolved": "https://registry.npmjs.org/to-regex-range/-/to-regex-range-5.0.1.tgz", + "integrity": "sha512-65P7iz6X5yEr1cwcgvQxbbIw7Uk3gOy5dIdtZ4rDveLqhrdJP+Li/Hx6tyK0NEb+2GCyneCMJiGqrADCSNk8sQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "is-number": "^7.0.0" + }, + "engines": { + "node": ">=8.0" + } + }, + "node_modules/tough-cookie": { + "version": "4.1.4", + "resolved": "https://registry.npmjs.org/tough-cookie/-/tough-cookie-4.1.4.tgz", + "integrity": "sha512-Loo5UUvLD9ScZ6jh8beX1T6sO1w2/MpCRpEP7V280GKMVUQ0Jzar2U3UJPsrdbziLEMMhu3Ujnq//rhiFuIeag==", + "dev": true, + "license": "BSD-3-Clause", + "dependencies": { + "psl": "^1.1.33", + "punycode": "^2.1.1", + "universalify": "^0.2.0", + "url-parse": "^1.5.3" + }, + "engines": { + "node": ">=6" + } + }, + "node_modules/tr46": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/tr46/-/tr46-3.0.0.tgz", + "integrity": "sha512-l7FvfAHlcmulp8kr+flpQZmVwtu7nfRV7NZujtN0OqES8EL4O4e0qqzL0DC5gAvx/ZC/9lk6rhcUwYvkBnBnYA==", + "dev": true, + "license": "MIT", + "dependencies": { + "punycode": "^2.1.1" + }, + "engines": { + "node": ">=12" + } + }, + "node_modules/ts-jest": { + "version": "29.3.2", + "resolved": "https://registry.npmjs.org/ts-jest/-/ts-jest-29.3.2.tgz", + "integrity": "sha512-bJJkrWc6PjFVz5g2DGCNUo8z7oFEYaz1xP1NpeDU7KNLMWPpEyV8Chbpkn8xjzgRDpQhnGMyvyldoL7h8JXyug==", + "dev": true, + "license": "MIT", + "dependencies": { + "bs-logger": "^0.2.6", + "ejs": "^3.1.10", + "fast-json-stable-stringify": "^2.1.0", + "jest-util": "^29.0.0", + "json5": "^2.2.3", + "lodash.memoize": "^4.1.2", + "make-error": "^1.3.6", + "semver": "^7.7.1", + "type-fest": "^4.39.1", + "yargs-parser": "^21.1.1" + }, + "bin": { + "ts-jest": "cli.js" + }, + "engines": { + "node": "^14.15.0 || ^16.10.0 || ^18.0.0 || >=20.0.0" + }, + "peerDependencies": { + "@babel/core": ">=7.0.0-beta.0 <8", + "@jest/transform": "^29.0.0", + "@jest/types": "^29.0.0", + "babel-jest": "^29.0.0", + "jest": "^29.0.0", + "typescript": ">=4.3 <6" + }, + "peerDependenciesMeta": { + "@babel/core": { + "optional": true + }, + "@jest/transform": { + "optional": true + }, + "@jest/types": { + "optional": true + }, + "babel-jest": { + "optional": true + }, + "esbuild": { + "optional": true + } + } + }, + "node_modules/ts-jest/node_modules/type-fest": { + "version": "4.41.0", + "resolved": "https://registry.npmjs.org/type-fest/-/type-fest-4.41.0.tgz", + "integrity": "sha512-TeTSQ6H5YHvpqVwBRcnLDCBnDOHWYu7IvGbHT6N8AOymcr9PJGjc1GTtiWZTYg0NCgYwvnYWEkVChQAr9bjfwA==", + "dev": true, + "license": "(MIT OR CC0-1.0)", + "engines": { + "node": ">=16" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/ts-jest/node_modules/yargs-parser": { + "version": "21.1.1", + "resolved": "https://registry.npmjs.org/yargs-parser/-/yargs-parser-21.1.1.tgz", + "integrity": "sha512-tVpsJW7DdjecAiFpbIB1e3qxIQsE6NoPc5/eTdrbbIC4h0LVsWhnoa3g+m2HclBIujHzsxZ4VJVA+GUuc2/LBw==", + "dev": true, + "license": "ISC", + "engines": { + "node": ">=12" + } + }, + "node_modules/ts-loader": { + "version": "9.5.2", + "resolved": "https://registry.npmjs.org/ts-loader/-/ts-loader-9.5.2.tgz", + "integrity": "sha512-Qo4piXvOTWcMGIgRiuFa6nHNm+54HbYaZCKqc9eeZCLRy3XqafQgwX2F7mofrbJG3g7EEb+lkiR+z2Lic2s3Zw==", + "dev": true, + "license": "MIT", + "dependencies": { + "chalk": "^4.1.0", + "enhanced-resolve": "^5.0.0", + "micromatch": "^4.0.0", + "semver": "^7.3.4", + "source-map": "^0.7.4" + }, + "engines": { + "node": ">=12.0.0" + }, + "peerDependencies": { + "typescript": "*", + "webpack": "^5.0.0" + } + }, + "node_modules/ts-loader/node_modules/source-map": { + "version": "0.7.4", + "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.7.4.tgz", + "integrity": "sha512-l3BikUxvPOcn5E74dZiq5BGsTb5yEwhaTSzccU6t4sDOH8NWJCstKO5QT2CvtFoK6F0saL7p9xHAqHOlCPJygA==", + "dev": true, + "license": "BSD-3-Clause", + "engines": { + "node": ">= 8" + } + }, + "node_modules/tslib": { + "version": "2.8.1", + "resolved": "https://registry.npmjs.org/tslib/-/tslib-2.8.1.tgz", + "integrity": "sha512-oJFu94HQb+KVduSUQL7wnpmqnfmLsOA/nAh6b6EH0wCEoK0/mPeXU6c3wKDV83MkOuHPRHtSXKKU99IBazS/2w==", + "license": "0BSD" + }, + "node_modules/type-detect": { + "version": "4.0.8", + "resolved": "https://registry.npmjs.org/type-detect/-/type-detect-4.0.8.tgz", + "integrity": "sha512-0fr/mIH1dlO+x7TlcMy+bIDqKPsw/70tVyeHW787goQjhmqaZe10uwLujubK9q9Lg6Fiho1KUKDYz0Z7k7g5/g==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=4" + } + }, + "node_modules/type-fest": { + "version": "0.21.3", + "resolved": "https://registry.npmjs.org/type-fest/-/type-fest-0.21.3.tgz", + "integrity": "sha512-t0rzBq87m3fVcduHDUFhKmyyX+9eo6WQjZvf51Ea/M0Q7+T374Jp1aUiyUl0GKxp8M/OETVHSDvmkyPgvX+X2w==", + "dev": true, + "license": "(MIT OR CC0-1.0)", + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/typescript": { + "version": "5.7.3", + "resolved": "https://registry.npmjs.org/typescript/-/typescript-5.7.3.tgz", + "integrity": "sha512-84MVSjMEHP+FQRPy3pX9sTVV/INIex71s9TL2Gm5FG/WG1SqXeKyZ0k7/blY/4FdOzI12CBy1vGc4og/eus0fw==", + "dev": true, + "license": "Apache-2.0", + "bin": { + "tsc": "bin/tsc", + "tsserver": "bin/tsserver" + }, + "engines": { + "node": ">=14.17" + } + }, + "node_modules/undici-types": { + "version": "5.26.5", + "resolved": "https://registry.npmjs.org/undici-types/-/undici-types-5.26.5.tgz", + "integrity": "sha512-JlCMO+ehdEIKqlFxk6IfVoAUVmgz7cU7zD/h9XZ0qzeosSHmUJVOzSQvvYSYWXkFXC+IfLKSIffhv0sVZup6pA==", + "dev": true, + "license": "MIT" + }, + "node_modules/universalify": { + "version": "0.2.0", + "resolved": "https://registry.npmjs.org/universalify/-/universalify-0.2.0.tgz", + "integrity": "sha512-CJ1QgKmNg3CwvAv/kOFmtnEN05f0D/cn9QntgNOQlQF9dgvVTHj3t+8JPdjqawCHk7V/KA+fbUqzZ9XWhcqPUg==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">= 4.0.0" + } + }, + "node_modules/update-browserslist-db": { + "version": "1.1.3", + "resolved": "https://registry.npmjs.org/update-browserslist-db/-/update-browserslist-db-1.1.3.tgz", + "integrity": "sha512-UxhIZQ+QInVdunkDAaiazvvT/+fXL5Osr0JZlJulepYu6Jd7qJtDZjlur0emRlT71EN3ScPoE7gvsuIKKNavKw==", + "dev": true, + "funding": [ + { + "type": "opencollective", + "url": "https://opencollective.com/browserslist" + }, + { + "type": "tidelift", + "url": "https://tidelift.com/funding/github/npm/browserslist" + }, + { + "type": "github", + "url": "https://github.com/sponsors/ai" + } + ], + "license": "MIT", + "dependencies": { + "escalade": "^3.2.0", + "picocolors": "^1.1.1" + }, + "bin": { + "update-browserslist-db": "cli.js" + }, + "peerDependencies": { + "browserslist": ">= 4.21.0" + } + }, + "node_modules/url-join": { + "version": "4.0.1", + "resolved": "https://registry.npmjs.org/url-join/-/url-join-4.0.1.tgz", + "integrity": "sha512-jk1+QP6ZJqyOiuEI9AEWQfju/nB2Pw466kbA0LEZljHwKeMgd9WrAEgEGxjPDD2+TNbbb37rTyhEfrCXfuKXnA==", + "license": "MIT" + }, + "node_modules/url-parse": { + "version": "1.5.10", + "resolved": "https://registry.npmjs.org/url-parse/-/url-parse-1.5.10.tgz", + "integrity": "sha512-WypcfiRhfeUP9vvF0j6rw0J3hrWrw6iZv3+22h6iRMJ/8z1Tj6XfLP4DsUix5MhMPnXpiHDoKyoZ/bdCkwBCiQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "querystringify": "^2.1.1", + "requires-port": "^1.0.0" + } + }, + "node_modules/uuid": { + "version": "9.0.1", + "resolved": "https://registry.npmjs.org/uuid/-/uuid-9.0.1.tgz", + "integrity": "sha512-b+1eJOlsR9K8HJpow9Ok3fiWOWSIcIzXodvv0rQjVoOVNpWMpxf1wZNpt4y9h10odCNrqnYp1OBzRktckBe3sA==", + "dev": true, + "funding": [ + "https://github.com/sponsors/broofa", + "https://github.com/sponsors/ctavan" + ], + "license": "MIT", + "bin": { + "uuid": "dist/bin/uuid" + } + }, + "node_modules/v8-to-istanbul": { + "version": "9.3.0", + "resolved": "https://registry.npmjs.org/v8-to-istanbul/-/v8-to-istanbul-9.3.0.tgz", + "integrity": "sha512-kiGUalWN+rgBJ/1OHZsBtU4rXZOfj/7rKQxULKlIzwzQSvMJUUNgPwJEEh7gU6xEVxC0ahoOBvN2YI8GH6FNgA==", + "dev": true, + "license": "ISC", + "dependencies": { + "@jridgewell/trace-mapping": "^0.3.12", + "@types/istanbul-lib-coverage": "^2.0.1", + "convert-source-map": "^2.0.0" + }, + "engines": { + "node": ">=10.12.0" + } + }, + "node_modules/w3c-xmlserializer": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/w3c-xmlserializer/-/w3c-xmlserializer-4.0.0.tgz", + "integrity": "sha512-d+BFHzbiCx6zGfz0HyQ6Rg69w9k19nviJspaj4yNscGjrHu94sVP+aRm75yEbCh+r2/yR+7q6hux9LVtbuTGBw==", + "dev": true, + "license": "MIT", + "dependencies": { + "xml-name-validator": "^4.0.0" + }, + "engines": { + "node": ">=14" + } + }, + "node_modules/walker": { + "version": "1.0.8", + "resolved": "https://registry.npmjs.org/walker/-/walker-1.0.8.tgz", + "integrity": "sha512-ts/8E8l5b7kY0vlWLewOkDXMmPdLcVV4GmOQLyxuSswIJsweeFZtAsMF7k1Nszz+TYBQrlYRmzOnr398y1JemQ==", + "dev": true, + "license": "Apache-2.0", + "dependencies": { + "makeerror": "1.0.12" + } + }, + "node_modules/watchpack": { + "version": "2.4.2", + "resolved": "https://registry.npmjs.org/watchpack/-/watchpack-2.4.2.tgz", + "integrity": "sha512-TnbFSbcOCcDgjZ4piURLCbJ3nJhznVh9kw6F6iokjiFPl8ONxe9A6nMDVXDiNbrSfLILs6vB07F7wLBrwPYzJw==", + "dev": true, + "license": "MIT", + "dependencies": { + "glob-to-regexp": "^0.4.1", + "graceful-fs": "^4.1.2" + }, + "engines": { + "node": ">=10.13.0" + } + }, + "node_modules/web-streams-polyfill": { + "version": "4.0.0-beta.3", + "resolved": "https://registry.npmjs.org/web-streams-polyfill/-/web-streams-polyfill-4.0.0-beta.3.tgz", + "integrity": "sha512-QW95TCTaHmsYfHDybGMwO5IJIM93I/6vTRk+daHTWFPhwh+C8Cg7j7XyKrwrj8Ib6vYXe0ocYNrmzY4xAAN6ug==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">= 14" + } + }, + "node_modules/webidl-conversions": { + "version": "7.0.0", + "resolved": "https://registry.npmjs.org/webidl-conversions/-/webidl-conversions-7.0.0.tgz", + "integrity": "sha512-VwddBukDzu71offAQR975unBIGqfKZpM+8ZX6ySk8nYhVoo5CYaZyzt3YBvYtRtO+aoGlqxPg/B87NGVZ/fu6g==", + "dev": true, + "license": "BSD-2-Clause", + "engines": { + "node": ">=12" + } + }, + "node_modules/webpack": { + "version": "5.99.8", + "resolved": "https://registry.npmjs.org/webpack/-/webpack-5.99.8.tgz", + "integrity": "sha512-lQ3CPiSTpfOnrEGeXDwoq5hIGzSjmwD72GdfVzF7CQAI7t47rJG9eDWvcEkEn3CUQymAElVvDg3YNTlCYj+qUQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "@types/eslint-scope": "^3.7.7", + "@types/estree": "^1.0.6", + "@types/json-schema": "^7.0.15", + "@webassemblyjs/ast": "^1.14.1", + "@webassemblyjs/wasm-edit": "^1.14.1", + "@webassemblyjs/wasm-parser": "^1.14.1", + "acorn": "^8.14.0", + "browserslist": "^4.24.0", + "chrome-trace-event": "^1.0.2", + "enhanced-resolve": "^5.17.1", + "es-module-lexer": "^1.2.1", + "eslint-scope": "5.1.1", + "events": "^3.2.0", + "glob-to-regexp": "^0.4.1", + "graceful-fs": "^4.2.11", + "json-parse-even-better-errors": "^2.3.1", + "loader-runner": "^4.2.0", + "mime-types": "^2.1.27", + "neo-async": "^2.6.2", + "schema-utils": "^4.3.2", + "tapable": "^2.1.1", + "terser-webpack-plugin": "^5.3.11", + "watchpack": "^2.4.1", + "webpack-sources": "^3.2.3" + }, + "bin": { + "webpack": "bin/webpack.js" + }, + "engines": { + "node": ">=10.13.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/webpack" + }, + "peerDependenciesMeta": { + "webpack-cli": { + "optional": true + } + } + }, + "node_modules/webpack-sources": { + "version": "3.2.3", + "resolved": "https://registry.npmjs.org/webpack-sources/-/webpack-sources-3.2.3.tgz", + "integrity": "sha512-/DyMEOrDgLKKIG0fmvtz+4dUX/3Ghozwgm6iPp8KRhvn+eQf9+Q7GWxVNMk3+uCPWfdXYC4ExGBckIXdFEfH1w==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=10.13.0" + } + }, + "node_modules/whatwg-encoding": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/whatwg-encoding/-/whatwg-encoding-2.0.0.tgz", + "integrity": "sha512-p41ogyeMUrw3jWclHWTQg1k05DSVXPLcVxRTYsXUk+ZooOCZLcoYgPZ/HL/D/N+uQPOtcp1me1WhBEaX02mhWg==", + "dev": true, + "license": "MIT", + "dependencies": { + "iconv-lite": "0.6.3" + }, + "engines": { + "node": ">=12" + } + }, + "node_modules/whatwg-mimetype": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/whatwg-mimetype/-/whatwg-mimetype-3.0.0.tgz", + "integrity": "sha512-nt+N2dzIutVRxARx1nghPKGv1xHikU7HKdfafKkLNLindmPU/ch3U31NOCGGA/dmPcmb1VlofO0vnKAcsm0o/Q==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=12" + } + }, + "node_modules/whatwg-url": { + "version": "11.0.0", + "resolved": "https://registry.npmjs.org/whatwg-url/-/whatwg-url-11.0.0.tgz", + "integrity": "sha512-RKT8HExMpoYx4igMiVMY83lN6UeITKJlBQ+vR/8ZJ8OCdSiN3RwCq+9gH0+Xzj0+5IrM6i4j/6LuvzbZIQgEcQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "tr46": "^3.0.0", + "webidl-conversions": "^7.0.0" + }, + "engines": { + "node": ">=12" + } + }, + "node_modules/which": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/which/-/which-2.0.2.tgz", + "integrity": "sha512-BLI3Tl1TW3Pvl70l3yq3Y64i+awpwXqsGBYWkkqMtnbXgrMD+yj7rhW0kuEDxzJaYXGjEW5ogapKNMEKNMjibA==", + "dev": true, + "license": "ISC", + "dependencies": { + "isexe": "^2.0.0" + }, + "bin": { + "node-which": "bin/node-which" + }, + "engines": { + "node": ">= 8" + } + }, + "node_modules/wrap-ansi": { + "version": "7.0.0", + "resolved": "https://registry.npmjs.org/wrap-ansi/-/wrap-ansi-7.0.0.tgz", + "integrity": "sha512-YVGIj2kamLSTxw6NsZjoBxfSwsn0ycdesmc4p+Q21c5zPuZ1pl+NfxVdxPtdHvmNVOQ6XSYG4AUtyt/Fi7D16Q==", + "dev": true, + "license": "MIT", + "dependencies": { + "ansi-styles": "^4.0.0", + "string-width": "^4.1.0", + "strip-ansi": "^6.0.0" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/chalk/wrap-ansi?sponsor=1" + } + }, + "node_modules/wrappy": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/wrappy/-/wrappy-1.0.2.tgz", + "integrity": "sha512-l4Sp/DRseor9wL6EvV2+TuQn63dMkPjZ/sp9XkghTEbV9KlPS1xUsZ3u7/IQO4wxtcFB4bgpQPRcR3QCvezPcQ==", + "dev": true, + "license": "ISC" + }, + "node_modules/write-file-atomic": { + "version": "4.0.2", + "resolved": "https://registry.npmjs.org/write-file-atomic/-/write-file-atomic-4.0.2.tgz", + "integrity": "sha512-7KxauUdBmSdWnmpaGFg+ppNjKF8uNLry8LyzjauQDOVONfFLNKrKvQOxZ/VuTIcS/gge/YNahf5RIIQWTSarlg==", + "dev": true, + "license": "ISC", + "dependencies": { + "imurmurhash": "^0.1.4", + "signal-exit": "^3.0.7" + }, + "engines": { + "node": "^12.13.0 || ^14.15.0 || >=16.0.0" + } + }, + "node_modules/ws": { + "version": "8.18.2", + "resolved": "https://registry.npmjs.org/ws/-/ws-8.18.2.tgz", + "integrity": "sha512-DMricUmwGZUVr++AEAe2uiVM7UoO9MAVZMDu05UQOaUII0lp+zOzLLU4Xqh/JvTqklB1T4uELaaPBKyjE1r4fQ==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=10.0.0" + }, + "peerDependencies": { + "bufferutil": "^4.0.1", + "utf-8-validate": ">=5.0.2" + }, + "peerDependenciesMeta": { + "bufferutil": { + "optional": true + }, + "utf-8-validate": { + "optional": true + } + } + }, + "node_modules/xml-name-validator": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/xml-name-validator/-/xml-name-validator-4.0.0.tgz", + "integrity": "sha512-ICP2e+jsHvAj2E2lIHxa5tjXRlKDJo4IdvPvCXbXQGdzSfmSpNVyIKMvoZHjDY9DP0zV17iI85o90vRFXNccRw==", + "dev": true, + "license": "Apache-2.0", + "engines": { + "node": ">=12" + } + }, + "node_modules/xmlchars": { + "version": "2.2.0", + "resolved": "https://registry.npmjs.org/xmlchars/-/xmlchars-2.2.0.tgz", + "integrity": "sha512-JZnDKK8B0RCDw84FNdDAIpZK+JuJw+s7Lz8nksI7SIuU3UXJJslUthsi+uWBUYOwPFwW7W7PRLRfUKpxjtjFCw==", + "dev": true, + "license": "MIT" + }, + "node_modules/y18n": { + "version": "5.0.8", + "resolved": "https://registry.npmjs.org/y18n/-/y18n-5.0.8.tgz", + "integrity": "sha512-0pfFzegeDWJHJIAmTLRP2DwHjdF5s7jo9tuztdQxAhINCdvS+3nGINqPd00AphqJR/0LhANUS6/+7SCb98YOfA==", + "dev": true, + "license": "ISC", + "engines": { + "node": ">=10" + } + }, + "node_modules/yallist": { + "version": "3.1.1", + "resolved": "https://registry.npmjs.org/yallist/-/yallist-3.1.1.tgz", + "integrity": "sha512-a4UGQaWPH59mOXUYnAG2ewncQS4i4F43Tv3JoAM+s2VDAmS9NsK8GpDMLrCHPksFT7h3K6TOoUNn2pb7RoXx4g==", + "dev": true, + "license": "ISC" + }, + "node_modules/yargs": { + "version": "17.7.2", + "resolved": "https://registry.npmjs.org/yargs/-/yargs-17.7.2.tgz", + "integrity": "sha512-7dSzzRQ++CKnNI/krKnYRV7JKKPUXMEh61soaHKg9mrWEhzFWhFnxPxGl+69cD1Ou63C13NUPCnmIcrvqCuM6w==", + "dev": true, + "license": "MIT", + "dependencies": { + "cliui": "^8.0.1", + "escalade": "^3.1.1", + "get-caller-file": "^2.0.5", + "require-directory": "^2.1.1", + "string-width": "^4.2.3", + "y18n": "^5.0.5", + "yargs-parser": "^21.1.1" + }, + "engines": { + "node": ">=12" + } + }, + "node_modules/yargs-parser": { + "version": "20.2.9", + "resolved": "https://registry.npmjs.org/yargs-parser/-/yargs-parser-20.2.9.tgz", + "integrity": "sha512-y11nGElTIV+CT3Zv9t7VKl+Q3hTQoT9a1Qzezhhl6Rp21gJ/IVTW7Z3y9EWXhuUBC2Shnf+DX0antecpAwSP8w==", + "dev": true, + "license": "ISC", + "engines": { + "node": ">=10" + } + }, + "node_modules/yargs/node_modules/yargs-parser": { + "version": "21.1.1", + "resolved": "https://registry.npmjs.org/yargs-parser/-/yargs-parser-21.1.1.tgz", + "integrity": "sha512-tVpsJW7DdjecAiFpbIB1e3qxIQsE6NoPc5/eTdrbbIC4h0LVsWhnoa3g+m2HclBIujHzsxZ4VJVA+GUuc2/LBw==", + "dev": true, + "license": "ISC", + "engines": { + "node": ">=12" + } + }, + "node_modules/yocto-queue": { + "version": "0.1.0", + "resolved": "https://registry.npmjs.org/yocto-queue/-/yocto-queue-0.1.0.tgz", + "integrity": "sha512-rVksvsnNCdJ/ohGc6xgPwyN8eheCxsiLM8mxuE/t/mOVqJewPuO1miLpTHQiRgTKCLexL4MeAFVagts7HmNZ2Q==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + } + } +} diff --git a/src/sync/sync_client.ts b/src/sync/sync_client.ts new file mode 100644 index 00000000..e69de29b diff --git a/tests/integration/decorators.test.ts b/tests/integration/decorators.test.ts new file mode 100644 index 00000000..0cddc948 --- /dev/null +++ b/tests/integration/decorators.test.ts @@ -0,0 +1,502 @@ +import OpenAI from "openai"; + +import { PromptRequest } from "../../src/api"; +import { HumanloopRuntimeError } from "../../src/error"; +import { + CleanupResources, + TestPrompt, + TestSetup, + cleanupTestEnvironment, + setupTestEnvironment, +} from "./fixtures"; + +// Long timeout per test +jest.setTimeout(30 * 1000); + +// process.stdout.moveCursor is undefined in jest; mocking it since STDOUT is not relevant +if (typeof process.stdout.moveCursor !== "function") { + process.stdout.moveCursor = ( + dx: number, + dy: number, + callback?: () => void, + ): boolean => { + if (callback) callback(); + return true; + }; +} + +/** + * Creates a test prompt in the specified test environment + */ +async function createTestPrompt( + setup: TestSetup, + name: string = "test_prompt", + customConfig?: Partial, +): Promise { + const promptPath = `${setup.sdkTestDir.path}/${name}`; + const config = customConfig + ? { ...setup.testPromptConfig, ...customConfig } + : setup.testPromptConfig; + + const promptResponse = await setup.humanloopClient.prompts.upsert({ + path: promptPath, + ...config, + }); + + return { + id: promptResponse.id, + path: promptPath, + response: promptResponse, + }; +} + +/** + * Creates a base function for LLM calls that can be decorated + */ +function createBaseLLMFunction(setup: TestSetup, model: string = "gpt-4o-mini") { + return async (question: string): Promise => { + const openaiClient = new OpenAI({ apiKey: setup.openaiApiKey }); + + const response = await openaiClient.chat.completions.create({ + model: model, + messages: [{ role: "user", content: question }], + }); + + return response.choices[0].message.content || ""; + }; +} + +/** + * Applies the prompt decorator to a function and tests it + */ +async function testPromptDecorator( + setup: TestSetup, + prompt: TestPrompt, + input: string = "What is the capital of the France?", + expectedSubstring: string = "paris", +): Promise { + // Create the base function + const myPromptBase = createBaseLLMFunction(setup); + + // Apply the higher-order function instead of decorator + const myPrompt = setup.humanloopClient.prompt({ + path: prompt.path, + callable: myPromptBase, + }); + + // Call the decorated function + const result = await myPrompt(input); + if (result) { + expect(result.toLowerCase()).toContain(expectedSubstring.toLowerCase()); + } else { + throw new Error("Expected result to be defined"); + } + + // Wait for 5 seconds for the log to be created + await new Promise((resolve) => setTimeout(resolve, 5000)); +} + +describe("decorators", () => { + it("should create a prompt log when using the decorator", async () => { + let testSetup: TestSetup | undefined = undefined; + let testPrompt: TestPrompt | undefined = undefined; + + try { + testSetup = await setupTestEnvironment("test_prompt_call_decorator"); + // Create test prompt + testPrompt = await createTestPrompt(testSetup); + + // Check initial version count + const promptVersionsResponse = + await testSetup.humanloopClient.prompts.listVersions(testPrompt.id); + expect(promptVersionsResponse.records.length).toBe(1); + + // Test the prompt decorator + await testPromptDecorator(testSetup, testPrompt); + + // Verify a new version was created + const updatedPromptVersionsResponse = + await testSetup.humanloopClient.prompts.listVersions(testPrompt.id); + expect(updatedPromptVersionsResponse.records.length).toBe(2); + + // Verify logs were created + const logsResponse = await testSetup.humanloopClient.logs.list({ + fileId: testPrompt.id, + page: 1, + size: 50, + }); + expect(logsResponse.data.length).toBe(1); + } catch (error) { + // Make sure to clean up if the test fails + const cleanupResources: CleanupResources[] = []; + if (testPrompt) { + cleanupResources.push({ + type: "prompt", + id: testPrompt.id, + }); + } + if (testSetup) { + await cleanupTestEnvironment(testSetup, cleanupResources); + } + throw error; + } + }); + + it("should create logs with proper tracing when using prompt in flow decorator", async () => { + let testSetup: TestSetup | undefined = undefined; + let flowId: string | null = null; + let promptId: string | null = null; + + try { + // Create test flow and prompt paths + testSetup = await setupTestEnvironment("test_flow_decorator"); + const flowPath = `${testSetup.sdkTestDir.path}/test_flow`; + const promptPath = `${testSetup.sdkTestDir.path}/test_prompt`; + + // Create the prompt + const promptResponse = await testSetup.humanloopClient.prompts.upsert({ + path: promptPath, + provider: "openai", + model: "gpt-4o-mini", + temperature: 0, + }); + const promptId = promptResponse.id; + + // Define the flow callable function with the correct type signature + const flowCallable = async (question: { + question: string; + }): Promise => { + const response = await testSetup!.humanloopClient.prompts.call({ + path: promptPath, + messages: [{ role: "user", content: question.question }], + providerApiKeys: { openai: testSetup!.openaiApiKey }, + }); + + const output = response.logs?.[0]?.output; + expect(output).not.toBeNull(); + return output || ""; + }; + + // Apply the flow decorator + const myFlow = testSetup.humanloopClient.flow({ + path: flowPath, + callable: flowCallable, + }); + + // Call the flow with the expected input format + const result = await myFlow({ + question: "What is the capital of the France?", + }); + expect(result?.toLowerCase()).toContain("paris"); + + // Wait for logs to be created + await new Promise((resolve) => setTimeout(resolve, 5000)); + + // Verify prompt logs + const promptRetrieveResponse = + await testSetup.humanloopClient.files.retrieveByPath({ + path: promptPath, + }); + expect(promptRetrieveResponse).not.toBeNull(); + const promptLogsResponse = await testSetup.humanloopClient.logs.list({ + fileId: promptRetrieveResponse.id, + page: 1, + size: 50, + }); + expect(promptLogsResponse.data.length).toBe(1); + const promptLog = promptLogsResponse.data[0]; + + // Verify flow logs + const flowRetrieveResponse = + await testSetup.humanloopClient.files.retrieveByPath({ + path: flowPath, + }); + expect(flowRetrieveResponse).not.toBeNull(); + flowId = flowRetrieveResponse.id; + const flowLogsResponse = await testSetup.humanloopClient.logs.list({ + fileId: flowRetrieveResponse.id, + page: 1, + size: 50, + }); + expect(flowLogsResponse.data.length).toBe(1); + const flowLog = flowLogsResponse.data[0]; + + // Verify tracing between logs + expect(promptLog.traceParentId).toBe(flowLog.id); + } finally { + // Clean up resources + const cleanupResources: CleanupResources[] = []; + if (flowId) { + cleanupResources.push({ + type: "flow", + id: flowId, + }); + } + if (promptId) { + cleanupResources.push({ + type: "prompt", + id: promptId, + }); + } + if (testSetup) { + await cleanupTestEnvironment(testSetup, cleanupResources); + } + } + }); + + it("should log exceptions when using the flow decorator", async () => { + let testSetup: TestSetup | undefined = undefined; + let flowId: string | null = null; + + try { + // Create test flow path + testSetup = await setupTestEnvironment("test_flow_decorator"); + const flowPath = `${testSetup.sdkTestDir.path}/test_flow_log_error`; + + // Define a flow callable that throws an error + const flowCallable = async ({ + question, + }: { + question: string; + }): Promise => { + throw new Error("This is a test exception"); + }; + + // Apply the flow decorator + const myFlow = testSetup.humanloopClient.flow({ + path: flowPath, + callable: flowCallable, + }); + + // Call the flow and expect it to throw + try { + await myFlow({ question: "test" }); + // If we get here, the test should fail + throw new Error("Expected flow to throw an error but it didn't"); + } catch (error) { + // Expected error + expect(error).toBeDefined(); + } + + // Wait for logs to be created + await new Promise((resolve) => setTimeout(resolve, 5000)); + + // Verify flow logs + const flowRetrieveResponse = + await testSetup.humanloopClient.files.retrieveByPath({ + path: flowPath, + }); + expect(flowRetrieveResponse).not.toBeNull(); + flowId = flowRetrieveResponse.id; + + const flowLogsResponse = await testSetup.humanloopClient.logs.list({ + fileId: flowRetrieveResponse.id, + page: 1, + size: 50, + }); + expect(flowLogsResponse.data.length).toBe(1); + + const flowLog = flowLogsResponse.data[0]; + expect(flowLog.error).not.toBeUndefined(); + expect(flowLog.output).toBeUndefined(); + } finally { + if (testSetup) { + await cleanupTestEnvironment( + testSetup, + flowId + ? [ + { + type: "flow", + id: flowId, + }, + ] + : [], + ); + } + } + }); + + it("should populate outputMessage when flow returns chat message format", async () => { + let testSetup: TestSetup | undefined = undefined; + let flowId: string | null = null; + + try { + // Create test flow path + testSetup = await setupTestEnvironment("test_flow_decorator"); + const flowPath = `${testSetup.sdkTestDir.path}/test_flow_log_output_message`; + + // Define a flow callable that returns a chat message format + const flowCallable = async ({ question }: { question: string }) => { + return { + role: "user", + content: question, + }; + }; + + // Apply the flow decorator + const myFlow = testSetup.humanloopClient.flow({ + path: flowPath, + callable: flowCallable, + }); + + // Call the flow and check the returned message + const result = await myFlow({ + question: "What is the capital of the France?", + }); + expect(result?.content.toLowerCase()).toContain("france"); + + // Wait for logs to be created + await new Promise((resolve) => setTimeout(resolve, 5000)); + + // Verify flow logs + const flowRetrieveResponse = + await testSetup.humanloopClient.files.retrieveByPath({ + path: flowPath, + }); + expect(flowRetrieveResponse).not.toBeNull(); + flowId = flowRetrieveResponse.id; + + const flowLogsResponse = await testSetup.humanloopClient.logs.list({ + fileId: flowRetrieveResponse.id, + page: 1, + size: 50, + }); + expect(flowLogsResponse.data.length).toBe(1); + + const flowLog = flowLogsResponse.data[0]; + expect(flowLog.outputMessage).not.toBeUndefined(); + expect(flowLog.output).toBeUndefined(); + expect(flowLog.error).toBeUndefined(); + } finally { + // Clean up resources + if (flowId) { + await testSetup!.humanloopClient.flows.delete(flowId); + } + if (testSetup) { + await cleanupTestEnvironment( + testSetup, + flowId + ? [ + { + type: "flow", + id: flowId, + }, + ] + : [], + ); + } + } + }); + + it("should run evaluations on a flow decorator", async () => { + let testSetup: TestSetup | undefined = undefined; + let flowId: string | null = null; + + try { + // Use fixtures from testSetup + testSetup = await setupTestEnvironment("eval-flow-decorator"); + if (!testSetup.evalDataset || !testSetup.outputNotNullEvaluator) { + throw new Error("Required fixtures are not initialized"); + } + + // Create test flow path + const flowPath = `${testSetup.sdkTestDir.path}/test_flow_evaluate`; + + // Define flow decorated function + const myFlow = testSetup.humanloopClient.flow({ + path: flowPath, + callable: async (inputs: { question: string }) => { + return "paris"; + }, + }); + + // Run evaluation on the flow + await testSetup.humanloopClient.evaluations.run({ + name: "Evaluate Flow Decorator", + file: { + path: flowPath, + callable: myFlow, + type: "flow", + }, + dataset: { + path: testSetup.evalDataset.path, + }, + evaluators: [ + { + path: testSetup.outputNotNullEvaluator.path, + }, + ], + }); + + // Get the flow ID for cleanup + const flowResponse = await testSetup.humanloopClient.files.retrieveByPath({ + path: flowPath, + }); + flowId = flowResponse.id; + } finally { + if (testSetup) { + await cleanupTestEnvironment( + testSetup, + flowId + ? [ + { + type: "flow", + id: flowId, + }, + ] + : [], + ); + } + } + }); + + it("should throw error when using non-existent file ID instead of path", async () => { + // Use fixtures from testSetup + let testSetup: TestSetup | undefined = undefined; + try { + testSetup = await setupTestEnvironment("eval-flow-decorator"); + if (!testSetup.evalDataset || !testSetup.outputNotNullEvaluator) { + throw new Error("Required fixtures are not initialized"); + } + // Define a simple callable + const simpleCallable = (x: any) => x; + + // Expect the evaluation to throw an error with a non-existent file ID + try { + await testSetup.humanloopClient.evaluations.run({ + name: "Evaluate Flow Decorator", + file: { + id: "non-existent-file-id", + type: "flow", + version: { + attributes: { + foo: "bar", + }, + }, + callable: simpleCallable, + }, + dataset: { + path: testSetup.evalDataset.path, + }, + evaluators: [ + { + path: testSetup.outputNotNullEvaluator.path, + }, + ], + }); + + // If we get here, the test should fail + throw new Error("Expected HumanloopRuntimeError but none was thrown"); + } catch (error) { + expect(error).toBeInstanceOf(HumanloopRuntimeError); + expect((error as HumanloopRuntimeError).message).toContain( + "File does not exist on Humanloop. Please provide a `file.path` and a version to create a new version.", + ); + } + } finally { + if (testSetup) { + await cleanupTestEnvironment(testSetup); + } + } + }); +}); diff --git a/tests/integration/evals.test.ts b/tests/integration/evals.test.ts new file mode 100644 index 00000000..17d8a399 --- /dev/null +++ b/tests/integration/evals.test.ts @@ -0,0 +1,577 @@ +import { FlowResponse } from "../../src/api"; +import { HumanloopRuntimeError } from "../../src/error"; +import { HumanloopClient } from "../../src/humanloop.client"; +import { + cleanupTestEnvironment, + readEnvironment, + setupTestEnvironment, +} from "./fixtures"; + +// process.stdout.moveCursor is undefined in jest; mocking it since STDOUT is not relevant +if (typeof process.stdout.moveCursor !== "function") { + process.stdout.moveCursor = ( + dx: number, + dy: number, + callback?: () => void, + ): boolean => { + if (callback) callback(); + return true; + }; +} + +// Long timeout per test; evals might take a while to run +jest.setTimeout(30 * 1000); + +interface TestIdentifiers { + id: string; + path: string; +} + +interface TestSetup { + sdkTestDir: TestIdentifiers; + outputNotNullEvaluator: TestIdentifiers; + evalDataset: TestIdentifiers; + evalPrompt: TestIdentifiers; + stagingEnvironmentId: string; +} + +describe("Evals", () => { + let humanloopClient: HumanloopClient; + let openaiApiKey: string; + + beforeAll(async () => { + readEnvironment(); + if (!process.env.HUMANLOOP_API_KEY) { + throw new Error("HUMANLOOP_API_KEY is not set"); + } + if (!process.env.OPENAI_API_KEY) { + throw new Error("OPENAI_API_KEY is not set for integration tests"); + } + openaiApiKey = process.env.OPENAI_API_KEY; + humanloopClient = new HumanloopClient({ + apiKey: process.env.HUMANLOOP_API_KEY, + }); + }); + + it("should be able to import HumanloopClient", async () => { + const client = new HumanloopClient({ apiKey: process.env.HUMANLOOP_API_KEY }); + expect(client).toBeDefined(); + }); + + it("should run evaluation on online files", async () => { + // Setup test-specific environment + const setup = await setupTestEnvironment("online_files"); + + try { + await humanloopClient.evaluations.run({ + file: { + path: setup.evalPrompt.path, + type: "prompt", + }, + dataset: { + path: setup.evalDataset.path, + }, + name: "test_eval_run", + evaluators: [ + { + path: setup.outputNotNullEvaluator.path, + }, + ], + }); + + // Wait for evaluation to complete + await new Promise((resolve) => setTimeout(resolve, 5000)); + + const evalResponse = await humanloopClient.evaluations.list({ + fileId: setup.evalPrompt.id, + }); + expect(evalResponse.data.length).toBe(1); + + const evaluationId = evalResponse.data[0].id; + const runsResponse = + await humanloopClient.evaluations.listRunsForEvaluation(evaluationId); + expect(runsResponse.runs[0].status).toBe("completed"); + } finally { + // Clean up test-specific resources + await cleanupTestEnvironment(setup); + } + }); + + it("should run evaluation with version_id", async () => { + // Setup test-specific environment + const setup = await setupTestEnvironment("version_id"); + + try { + // Create a new prompt version + const newPromptVersionResponse = await humanloopClient.prompts.upsert({ + path: setup.evalPrompt.path, + provider: "openai", + model: "gpt-4o-mini", + temperature: 0, + template: [ + { + role: "system", + content: + "You are a helpful assistant. You must answer the user's question truthfully and at the level of a 5th grader.", + }, + { + role: "user", + content: "{{question}}", + }, + ], + }); + + // Run evaluation with version_id + await humanloopClient.evaluations.run({ + file: { + id: newPromptVersionResponse.id, + versionId: newPromptVersionResponse.versionId, + type: "prompt", + }, + dataset: { + path: setup.evalDataset.path, + }, + name: "test_eval_run", + evaluators: [ + { + path: setup.outputNotNullEvaluator.path, + }, + ], + }); + + // Verify evaluation + const evaluationsResponse = await humanloopClient.evaluations.list({ + fileId: newPromptVersionResponse.id, + }); + expect(evaluationsResponse.data.length).toBe(1); + + const evaluationId = evaluationsResponse.data[0].id; + const runsResponse = + await humanloopClient.evaluations.listRunsForEvaluation(evaluationId); + expect(runsResponse.runs[0].status).toBe("completed"); + if (runsResponse.runs[0].version) { + expect(runsResponse.runs[0].version.versionId).toBe( + newPromptVersionResponse.versionId, + ); + } + + // Verify version is not the default + const response = await humanloopClient.prompts.get( + newPromptVersionResponse.id, + ); + expect(response.versionId).not.toBe(newPromptVersionResponse.versionId); + } finally { + // Clean up test-specific resources + await cleanupTestEnvironment(setup); + } + }); + + it("should run evaluation with environment", async () => { + // Setup test-specific environment + const setup = await setupTestEnvironment("environment"); + + try { + // Create a new prompt version and deploy to staging + const newPromptVersionResponse = await humanloopClient.prompts.upsert({ + path: setup.evalPrompt.path, + provider: "openai", + model: "gpt-4o-mini", + temperature: 0, + template: [ + { + role: "system", + content: + "You are a helpful assistant. You must answer the user's question truthfully and at the level of a 5th grader.", + }, + { + role: "user", + content: "{{question}}", + }, + ], + }); + + await humanloopClient.prompts.setDeployment( + newPromptVersionResponse.id, + setup.stagingEnvironmentId, + { + versionId: newPromptVersionResponse.versionId, + }, + ); + + // Run evaluation with environment + await humanloopClient.evaluations.run({ + file: { + id: newPromptVersionResponse.id, + type: "prompt", + environment: "staging", + }, + dataset: { + path: setup.evalDataset.path, + }, + name: "test_eval_run", + evaluators: [ + { + path: setup.outputNotNullEvaluator.path, + }, + ], + }); + + // Verify evaluation + const evaluationsResponse = await humanloopClient.evaluations.list({ + fileId: newPromptVersionResponse.id, + }); + expect(evaluationsResponse.data.length).toBe(1); + + const evaluationId = evaluationsResponse.data[0].id; + const runsResponse = + await humanloopClient.evaluations.listRunsForEvaluation(evaluationId); + expect(runsResponse.runs[0].status).toBe("completed"); + if (runsResponse.runs[0].version) { + expect(runsResponse.runs[0].version.versionId).toBe( + newPromptVersionResponse.versionId, + ); + } + + const defaultPromptVersionResponse = await humanloopClient.prompts.get( + newPromptVersionResponse.id, + ); + expect(defaultPromptVersionResponse.versionId).not.toBe( + newPromptVersionResponse.versionId, + ); + } finally { + // Clean up test-specific resources + await cleanupTestEnvironment(setup); + } + }); + + it("should fail when using version_id with path", async () => { + // Setup test-specific environment + const setup = await setupTestEnvironment("fail_with_version_id"); + + try { + try { + await humanloopClient.evaluations.run({ + file: { + path: setup.evalPrompt.path, + type: "prompt", + versionId: "will_not_work", + }, + dataset: { + path: setup.evalDataset.path, + }, + name: "test_eval_run", + evaluators: [ + { + path: setup.outputNotNullEvaluator.path, + }, + ], + }); + // If we got here, the test failed + throw new Error("Expected runtime error but none was thrown"); + } catch (error: any) { + if (error instanceof HumanloopRuntimeError) { + expect(error.message).toContain( + "You must provide the `file.id` when addressing a file by version ID or environment", + ); + } else { + throw new Error( + `Expected test to fail for version_id but got ${error}`, + ); + } + } + } finally { + // Clean up test-specific resources + await cleanupTestEnvironment(setup); + } + }); + + it("should fail when using environment with path", async () => { + // Setup test-specific environment + const setup = await setupTestEnvironment("fail_with_environment"); + + try { + await humanloopClient.evaluations.run({ + file: { + path: setup.evalPrompt.path, + type: "prompt", + environment: "staging", + }, + dataset: { + path: setup.evalDataset.path, + }, + name: "test_eval_run", + evaluators: [ + { + path: setup.outputNotNullEvaluator.path, + }, + ], + }); + // If we got here, the test failed + throw new Error("Expected runtime error but none was thrown"); + } catch (error: any) { + if (error instanceof HumanloopRuntimeError) { + expect(error.message).toContain( + "You must provide the `file.id` when addressing a file by version ID or environment", + ); + } else { + throw new Error( + `Expected test to fail for environment but got ${error}`, + ); + } + } finally { + // Clean up test-specific resources + await cleanupTestEnvironment(setup); + } + }); + + it("should run evaluation with version upsert", async () => { + // Setup test-specific environment + const setup = await setupTestEnvironment("version_upsert"); + + try { + await humanloopClient.evaluations.run({ + file: { + path: setup.evalPrompt.path, + type: "prompt", + version: { + provider: "openai", + model: "gpt-4o-mini", + temperature: 1, + template: [ + { + role: "system", + content: + "You are a helpful assistant. You must answer the user's question truthfully and at the level of a 5th grader.", + }, + { + role: "user", + content: "{{question}}", + }, + ], + }, + }, + dataset: { + path: setup.evalDataset.path, + }, + name: "test_eval_run", + evaluators: [ + { + path: setup.outputNotNullEvaluator.path, + }, + ], + }); + + // Verify evaluation + const evaluationsResponse = await humanloopClient.evaluations.list({ + fileId: setup.evalPrompt.id, + }); + expect(evaluationsResponse.data.length).toBe(1); + + const evaluationId = evaluationsResponse.data[0].id; + const runsResponse = + await humanloopClient.evaluations.listRunsForEvaluation(evaluationId); + expect(runsResponse.runs[0].status).toBe("completed"); + + // Verify version upsert + const listPromptVersionsResponse = + await humanloopClient.prompts.listVersions(setup.evalPrompt.id); + expect(listPromptVersionsResponse.records.length).toBe(2); + } finally { + // Clean up test-specific resources + await cleanupTestEnvironment(setup); + } + }); + + it("should fail flow eval without callable", async () => { + // Setup test-specific environment + const setup = await setupTestEnvironment("flow_fail_without_callable"); + + try { + try { + await humanloopClient.evaluations.run({ + file: { + path: "Test Flow", + type: "flow", + version: { + attributes: { + foo: "bar", + }, + }, + }, + dataset: { + path: setup.evalDataset.path, + }, + name: "test_eval_run", + evaluators: [ + { + path: setup.outputNotNullEvaluator.path, + }, + ], + }); + // If we got here, the test failed + fail("Expected runtime error but none was thrown"); + } catch (error: any) { + expect(error.message).toContain( + "You must provide a `callable` for your Flow `file` to run a local eval.", + ); + } + } finally { + // Clean up test-specific resources + await cleanupTestEnvironment(setup); + } + }); + + it("should run flow eval with callable", async () => { + // Setup test-specific environment + const setup = await setupTestEnvironment("flow_with_callable"); + + try { + const flowPath = `${setup.sdkTestDir.path}/Test Flow`; + + // Create flow + const flowResponse = await humanloopClient.flows.upsert({ + path: flowPath, + attributes: { + foo: "bar", + }, + }); + + try { + const flow = await humanloopClient.flows.upsert({ + path: flowPath, + attributes: { + foo: "bar", + }, + }); + + // Run evaluation with flow + await humanloopClient.evaluations.run({ + file: { + id: flow.id, + type: "flow", + callable: ({ question }) => + "It's complicated don't worry about it", + version: { + attributes: { + foo: "bar", + }, + }, + }, + dataset: { + path: setup.evalDataset.path, + }, + name: "test_eval_run", + evaluators: [ + { + path: setup.outputNotNullEvaluator.path, + }, + ], + }); + + // Verify evaluation + const evaluationsResponse = await humanloopClient.evaluations.list({ + fileId: flow.id, + }); + expect(evaluationsResponse.data.length).toBe(1); + + const evaluationId = evaluationsResponse.data[0].id; + const runsResponse = + await humanloopClient.evaluations.listRunsForEvaluation( + evaluationId, + ); + expect(runsResponse.runs[0].status).toBe("completed"); + } finally { + await humanloopClient.flows.delete(flowResponse.id); + } + } finally { + // Clean up test-specific resources + await cleanupTestEnvironment(setup); + } + }); + + it("should not allow evaluating agent with callable", async () => { + // Setup test-specific environment + const setup = await setupTestEnvironment("agent_with_callable"); + + try { + try { + await humanloopClient.evaluations.run({ + file: { + path: "Test Agent", + type: "agent", + callable: (inputs: any) => "bar", + }, + dataset: { + path: setup.evalDataset.path, + }, + name: "test_eval_run", + evaluators: [ + { + path: setup.outputNotNullEvaluator.path, + }, + ], + }); + // If we got here, the test failed + fail("Expected ValueError but none was thrown"); + } catch (error: any) { + expect(error.message).toBe( + "Agent evaluation is only possible on the Humanloop runtime, do not provide a `callable`.", + ); + } + } finally { + // Clean up test-specific resources + await cleanupTestEnvironment(setup); + } + }); + + it("should resolve to default flow version when callable is provided without version", async () => { + // Setup test-specific environment + const setup = await setupTestEnvironment("flow_with_callable_without_version"); + let flowResponse: FlowResponse; + try { + const flowPath = `${setup.sdkTestDir.path}/Test Flow`; + + // Create flow + flowResponse = await humanloopClient.flows.upsert({ + path: flowPath, + attributes: { + foo: "bar", + }, + }); + + // Run evaluation with flow + await humanloopClient.evaluations.run({ + file: { + id: flowResponse.id, + type: "flow", + callable: ({ question }) => "It's complicated don't worry about it", + }, + dataset: { + path: setup.evalDataset.path, + }, + name: "test_eval_run", + evaluators: [ + { + path: setup.outputNotNullEvaluator.path, + }, + ], + }); + + // Verify evaluation + const evaluationsResponse = await humanloopClient.evaluations.list({ + fileId: flowResponse.id, + }); + expect(evaluationsResponse.data.length).toBe(1); + + const evaluationId = evaluationsResponse.data[0].id; + const runsResponse = + await humanloopClient.evaluations.listRunsForEvaluation(evaluationId); + expect(runsResponse.runs[0].status).toBe("completed"); + } finally { + // Clean up test-specific resources + await cleanupTestEnvironment(setup, [ + { id: flowResponse!.id, type: "flow" }, + ]); + } + }); +}); diff --git a/tests/integration/fixtures.ts b/tests/integration/fixtures.ts new file mode 100644 index 00000000..41ccf486 --- /dev/null +++ b/tests/integration/fixtures.ts @@ -0,0 +1,246 @@ +import dotenv from "dotenv"; +import { OpenAI } from "openai"; +import { v4 as uuidv4 } from "uuid"; + +import { FileType, PromptRequest, PromptResponse } from "../../src/api"; +import { HumanloopClient } from "../../src/humanloop.client"; + +export interface TestIdentifiers { + id: string; + path: string; +} + +export interface TestPrompt { + id: string; + path: string; + response: PromptResponse; +} + +export interface TestSetup { + sdkTestDir: TestIdentifiers; + testPromptConfig: PromptRequest; + openaiApiKey: string; + humanloopClient: HumanloopClient; + evalDataset: TestIdentifiers; + evalPrompt: TestIdentifiers; + stagingEnvironmentId: string; + outputNotNullEvaluator: TestIdentifiers; +} + +export interface CleanupResources { + type: FileType; + id: string; +} + +export function readEnvironment(): void { + if (![process.env.HUMANLOOP_API_KEY, process.env.OPENAI_API_KEY].every(Boolean)) { + // Testing locally not in CI, running dotenv.config() would override the secrets set for GitHub Action + dotenv.config({}); + } + if (!process.env.HUMANLOOP_API_KEY) { + throw new Error("HUMANLOOP_API_KEY is not set"); + } + if (!process.env.OPENAI_API_KEY) { + throw new Error("OPENAI_API_KEY is not set for integration tests"); + } +} + +export function getSubclient(client: HumanloopClient, type: FileType) { + switch (type) { + case "prompt": + return client.prompts; + case "tool": + return client.tools; + case "flow": + return client.flows; + case "agent": + return client.agents; + case "dataset": + return client.datasets; + case "evaluator": + return client.evaluators; + default: + throw new Error(`Unsupported file type: ${type}`); + } +} + +export async function setupTestEnvironment(testName: string): Promise { + readEnvironment(); + + const openaiApiKey = process.env.OPENAI_API_KEY!; + const humanloopClient = new HumanloopClient({ + apiKey: process.env.HUMANLOOP_API_KEY, + instrumentProviders: { + OpenAI: OpenAI, + }, + }); + + // Create a test directory + const directoryPath = `SDK_TEST_${testName}_${uuidv4()}`; + const response = await humanloopClient.directories.create({ + path: directoryPath, + }); + + const sdkTestDir = { + id: response.id, + path: response.path, + }; + + // Create test prompt config + const testPromptConfig: PromptRequest = { + provider: "openai", + model: "gpt-4o-mini", + temperature: 0.5, + template: [ + { + role: "system", + content: "You are a helpful assistant. Answer concisely.", + }, + { + role: "user", + content: "{{question}}", + }, + ], + }; + + // Create evaluator for testing + const evaluatorPath = `${sdkTestDir.path}/output_not_null_evaluator`; + const evaluatorResponse = await humanloopClient.evaluators.upsert({ + path: evaluatorPath, + spec: { + argumentsType: "target_required", + returnType: "boolean", + code: ` +def output_not_null(log: dict) -> bool: + return log["output"] is not None + `, + evaluatorType: "python", + }, + }); + const outputNotNullEvaluator = { + id: evaluatorResponse.id, + path: evaluatorPath, + }; + + // Create dataset for testing + const datasetPath = `${sdkTestDir.path}/eval_dataset`; + const datasetResponse = await humanloopClient.datasets.upsert({ + path: datasetPath, + datapoints: [ + { + inputs: { question: "What is the capital of the France?" }, + target: { output: "Paris" }, + }, + { + inputs: { question: "What is the capital of the Germany?" }, + target: { output: "Berlin" }, + }, + { + inputs: { question: "What is 2+2?" }, + target: { output: "4" }, + }, + ], + }); + const evalDataset = { + id: datasetResponse.id, + path: datasetResponse.path, + }; + + // Create prompt + const promptPath = `${sdkTestDir.path}/eval_prompt`; + const promptResponse = await humanloopClient.prompts.upsert({ + path: promptPath, + ...(testPromptConfig as PromptRequest), + }); + const evalPrompt = { + id: promptResponse.id, + path: promptResponse.path, + }; + + // Get staging environment ID + const environmentsResponse = await humanloopClient.prompts.listEnvironments( + evalPrompt.id, + ); + let stagingEnvironmentId = ""; + for (const environment of environmentsResponse) { + if (environment.name === "staging") { + stagingEnvironmentId = environment.id; + break; + } + } + if (!stagingEnvironmentId) { + throw new Error("Staging environment not found"); + } + + return { + testPromptConfig, + openaiApiKey, + humanloopClient, + sdkTestDir, + outputNotNullEvaluator, + evalDataset, + evalPrompt, + stagingEnvironmentId, + }; +} + +/** + * Cleans up all test resources + * @param setup The test setup containing the resources + * @param resources Additional resources to clean up + */ +export async function cleanupTestEnvironment( + setup: TestSetup, + resources?: CleanupResources[], +): Promise { + try { + // First clean up any additional resources + if (resources) { + for (const resource of resources) { + const subclient = getSubclient(setup.humanloopClient, resource.type); + if (resource.id) { + await subclient.delete(resource.id); + } + } + } + + // Clean up fixed test resources + if (setup.outputNotNullEvaluator?.id) { + try { + await setup.humanloopClient.evaluators.delete( + setup.outputNotNullEvaluator.id, + ); + } catch (error) { + console.warn( + `Failed to delete evaluator ${setup.outputNotNullEvaluator.id}:`, + error, + ); + } + } + + if (setup.evalDataset?.id) { + try { + await setup.humanloopClient.datasets.delete(setup.evalDataset.id); + } catch (error) { + console.warn( + `Failed to delete dataset ${setup.evalDataset.id}:`, + error, + ); + } + } + + // Finally, clean up the test directory + if (setup.sdkTestDir.id) { + try { + await setup.humanloopClient.directories.delete(setup.sdkTestDir.id); + } catch (error) { + console.warn( + `Failed to delete directory ${setup.sdkTestDir.id}:`, + error, + ); + } + } + } catch (error) { + console.error("Error during cleanup:", error); + } +} From 8ac8a877c0b5742fe51ae57326f01ff3947772e3 Mon Sep 17 00:00:00 2001 From: Ale Pouroullis Date: Tue, 6 May 2025 17:10:56 +0100 Subject: [PATCH 03/10] Create sync client + LRU cache + pull operation on extended client --- .fernignore | 2 + package.json | 4 +- src/cache/LRUCache.ts | 48 ++++++ src/cache/index.ts | 1 + src/humanloop.client.ts | 43 +++++ src/sync/MetadataHandler.ts | 76 +++++++++ src/sync/SyncClient.ts | 310 ++++++++++++++++++++++++++++++++++++ src/sync/index.ts | 8 + src/sync/sync_client.ts | 0 9 files changed, 490 insertions(+), 2 deletions(-) create mode 100644 src/cache/LRUCache.ts create mode 100644 src/cache/index.ts create mode 100644 src/sync/MetadataHandler.ts create mode 100644 src/sync/SyncClient.ts create mode 100644 src/sync/index.ts delete mode 100644 src/sync/sync_client.ts diff --git a/.fernignore b/.fernignore index f02f9dd2..2686cd67 100644 --- a/.fernignore +++ b/.fernignore @@ -10,6 +10,8 @@ src/humanloop.client.ts src/overload.ts src/error.ts src/context.ts +src/sync +src/cache # Tests diff --git a/package.json b/package.json index c4d382d5..873a46a0 100644 --- a/package.json +++ b/package.json @@ -3,8 +3,8 @@ "version": "0.8.21", "private": false, "repository": "https://github.com/humanloop/humanloop-node", - "main": "./index.js", - "types": "./index.d.ts", + "main": "./dist/index.js", + "types": "./dist/index.d.ts", "scripts": { "format": "prettier . --write --ignore-unknown", "build": "tsc", diff --git a/src/cache/LRUCache.ts b/src/cache/LRUCache.ts new file mode 100644 index 00000000..0398f8ea --- /dev/null +++ b/src/cache/LRUCache.ts @@ -0,0 +1,48 @@ +/** + * LRU Cache implementation + */ +export default class LRUCache { + private cache: Map; + private readonly maxSize: number; + + constructor(maxSize: number) { + this.cache = new Map(); + this.maxSize = maxSize; + } + + get(key: K): V | undefined { + if (!this.cache.has(key)) { + return undefined; + } + + // Get the value + const value = this.cache.get(key); + + // Remove key and re-insert to mark as most recently used + this.cache.delete(key); + this.cache.set(key, value!); + + return value; + } + + set(key: K, value: V): void { + // If key already exists, refresh its position + if (this.cache.has(key)) { + this.cache.delete(key); + } + // If cache is full, remove the least recently used item (first item in the map) + else if (this.cache.size >= this.maxSize) { + const lruKey = this.cache.keys().next().value; + if (lruKey) { + this.cache.delete(lruKey); + } + } + + // Add new key-value pair + this.cache.set(key, value); + } + + clear(): void { + this.cache.clear(); + } +} diff --git a/src/cache/index.ts b/src/cache/index.ts new file mode 100644 index 00000000..d440ec99 --- /dev/null +++ b/src/cache/index.ts @@ -0,0 +1 @@ +export { default as LRUCache } from './LRUCache'; \ No newline at end of file diff --git a/src/humanloop.client.ts b/src/humanloop.client.ts index ac7cb197..ffd74746 100644 --- a/src/humanloop.client.ts +++ b/src/humanloop.client.ts @@ -4,6 +4,7 @@ import { NodeTracerProvider } from "@opentelemetry/sdk-trace-node"; import { AnthropicInstrumentation } from "@traceloop/instrumentation-anthropic"; import { CohereInstrumentation } from "@traceloop/instrumentation-cohere"; import { OpenAIInstrumentation } from "@traceloop/instrumentation-openai"; +import { SyncClient } from "./sync"; import { HumanloopClient as BaseHumanloopClient } from "./Client"; import { ChatMessage } from "./api"; @@ -210,6 +211,7 @@ export class HumanloopClient extends BaseHumanloopClient { Anthropic?: any; CohereAI?: any; }; + protected readonly _syncClient: SyncClient; protected get opentelemetryTracer(): Tracer { return HumanloopTracerSingleton.getInstance({ @@ -254,6 +256,8 @@ export class HumanloopClient extends BaseHumanloopClient { ) { super(_options); + this._syncClient = new SyncClient(this); + this.instrumentProviders = _options.instrumentProviders || {}; this._prompts_overloaded = overloadLog(super.prompts); @@ -560,6 +564,45 @@ ${RESET}`, ); } + /** + * Pull Prompt and Agent files from Humanloop to local filesystem. + * + * This method will: + * 1. Fetch Prompt and Agent files from your Humanloop workspace + * 2. Save them to the local filesystem using the client's files_directory (set during initialization) + * 3. Maintain the same directory structure as in Humanloop + * 4. Add appropriate file extensions (.prompt or .agent) + * + * The path parameter can be used in two ways: + * - If it points to a specific file (e.g. "path/to/file.prompt" or "path/to/file.agent"), only that file will be pulled + * - If it points to a directory (e.g. "path/to/directory"), all Prompt and Agent files in that directory will be pulled + * - If no path is provided, all Prompt and Agent files will be pulled + * + * The operation will overwrite existing files with the latest version from Humanloop + * but will not delete local files that don't exist in the remote workspace. + * + * Currently only supports syncing prompt and agent files. Other file types will be skipped. + * + * The files will be saved with the following structure: + * ``` + * {files_directory}/ + * ├── prompts/ + * │ ├── my_prompt.prompt + * │ └── nested/ + * │ └── another_prompt.prompt + * └── agents/ + * └── my_agent.agent + * ``` + * + * @param path - Optional path to either a specific file (e.g. "path/to/file.prompt") or a directory (e.g. "path/to/directory"). + * If not provided, all Prompt and Agent files will be pulled. + * @param environment - The environment to pull the files from. + * @returns List of successfully processed file paths. + */ + public async pull(path?: string, environment?: string): Promise { + return this._syncClient.pull(path, environment); + } + public get evaluations(): ExtendedEvaluations { return this._evaluations; } diff --git a/src/sync/MetadataHandler.ts b/src/sync/MetadataHandler.ts new file mode 100644 index 00000000..f984cd89 --- /dev/null +++ b/src/sync/MetadataHandler.ts @@ -0,0 +1,76 @@ +import fs from "fs"; +import path from "path"; + +/** + * Interface for operation log entries + */ +interface OperationLog { + operationType: string; + path: string; + environment?: string; + successfulFiles?: string[]; + failedFiles?: string[]; + error?: string; + startTime: number; + endTime: number; + duration: number; +} + +/** + * Parameters for the logOperation method + */ +interface LogOperationParams { + operationType: string; + path: string; + environment?: string; + successfulFiles?: string[]; + failedFiles?: string[]; + error?: string; + startTime: number; +} + +/** + * Handler for managing metadata and operation logs + */ +export default class MetadataHandler { + private baseDir: string; + private metadataDir: string; + private operationsLogPath: string; + + constructor(baseDir: string) { + this.baseDir = baseDir; + this.metadataDir = path.join(baseDir, ".humanloop"); + this.operationsLogPath = path.join(this.metadataDir, "operations.log"); + + // Create metadata directory if it doesn't exist + if (!fs.existsSync(this.metadataDir)) { + fs.mkdirSync(this.metadataDir, { recursive: true }); + } + } + + /** + * Log an operation to the operations log file + */ + public logOperation(params: LogOperationParams): void { + const endTime = Date.now(); + const duration = endTime - params.startTime; + + const logEntry: OperationLog = { + ...params, + endTime, + duration, + }; + + try { + // Create the log file if it doesn't exist + if (!fs.existsSync(this.operationsLogPath)) { + fs.writeFileSync(this.operationsLogPath, ""); + } + + // Append the log entry to the file + fs.appendFileSync(this.operationsLogPath, JSON.stringify(logEntry) + "\n"); + } catch (error) { + console.error(`Error logging operation: ${error}`); + } + } +} diff --git a/src/sync/SyncClient.ts b/src/sync/SyncClient.ts new file mode 100644 index 00000000..e73f558b --- /dev/null +++ b/src/sync/SyncClient.ts @@ -0,0 +1,310 @@ +import { FileType } from "api"; +import fs from "fs"; +import path from "path"; + +import { HumanloopClient as BaseHumanloopClient } from "../Client"; +import LRUCache from "../cache/LRUCache"; +import { HumanloopRuntimeError } from "../error"; +import MetadataHandler from "./MetadataHandler"; + +// Default cache size for file content caching +const DEFAULT_CACHE_SIZE = 100; + +/** + * Internal client for managing synchronization between local filesystem and Humanloop. + */ +export default class SyncClient { + private client: BaseHumanloopClient; + private baseDir: string; + private cacheSize: number; + private fileContentCache: LRUCache; + private metadata: MetadataHandler; + + constructor( + client: BaseHumanloopClient, + baseDir: string = "humanloop", + cacheSize: number = DEFAULT_CACHE_SIZE, + ) { + this.client = client; + this.baseDir = baseDir; + this.cacheSize = cacheSize; + this.fileContentCache = new LRUCache(cacheSize); + this.metadata = new MetadataHandler(this.baseDir); + } + + /** + * Get the raw file content of a file from cache or filesystem. + */ + private getFileContent(path: string, fileType: FileType): string { + const cacheKey = `${path}:${fileType}`; + + // Check if the content is in the cache + const cachedContent = this.fileContentCache.get(cacheKey); + if (cachedContent !== undefined) { + console.debug(`Using cached file content for ${path}.${fileType}`); + return cachedContent; + } + + // If not in cache, get from filesystem + const content = this.getFileContentImpl(path, fileType); + + // Store in cache + this.fileContentCache.set(cacheKey, content); + + return content; + } + + /** + * Implementation of getFileContent without the cache. + */ + private getFileContentImpl(path: string, fileType: FileType): string { + // Construct path to local file + const localPath = this.getFullPath(path, fileType); + + if (!fs.existsSync(localPath)) { + throw new HumanloopRuntimeError(`Local file not found: ${localPath}`); + } + + try { + // Read the raw file content + const fileContent = fs.readFileSync(localPath, "utf8"); + console.debug(`Using local file content from ${localPath}`); + return fileContent; + } catch (error) { + throw new HumanloopRuntimeError( + `Error reading local file ${localPath}: ${error}`, + ); + } + } + + /** + * Clear the LRU cache. + */ + private clearCache(): void { + this.fileContentCache.clear(); + } + + /** + * Normalize the path by: + * 1. Removing any file extensions (.prompt, .agent) + * 2. Converting backslashes to forward slashes + * 3. Removing leading and trailing slashes + * 4. Removing leading and trailing whitespace + * 5. Normalizing multiple consecutive slashes into a single forward slash + */ + private normalizePath(filePath: string): string { + // Remove any file extensions + let normalizedPath = filePath.includes(".") + ? filePath.substring(0, filePath.lastIndexOf(".")) + : filePath; + + // Convert backslashes to forward slashes + normalizedPath = normalizedPath.replace(/\\/g, "/"); + + // Remove leading/trailing whitespace and slashes + normalizedPath = normalizedPath.trim().replace(/^\/+|\/+$/g, ""); + + // Normalize multiple consecutive slashes into a single forward slash + while (normalizedPath.includes("//")) { + normalizedPath = normalizedPath.replace(/\/\//g, "/"); + } + + return normalizedPath; + } + + /** + * Check if the path is a file by checking for .prompt or .agent extension. + */ + private isFile(path: string): boolean { + return path.trim().endsWith(".prompt") || path.trim().endsWith(".agent"); + } + + /** + * Get the full path to a file, including extension. + */ + private getFullPath(filePath: string, fileType: FileType): string { + const normalizedPath = path.join(this.baseDir, filePath); + const directory = path.dirname(normalizedPath); + const fileName = path.basename(normalizedPath); + return path.join(directory, `${fileName}.${fileType}`); + } + + /** + * Save serialized file to local filesystem. + */ + private saveSerializedFile( + serializedContent: string, + filePath: string, + fileType: FileType, + ): void { + try { + // Create full path including baseDir prefix + const fullPath = path.join(this.baseDir, filePath); + const directory = path.dirname(fullPath); + const fileName = path.basename(fullPath); + + // Create directory if it doesn't exist + fs.mkdirSync(directory, { recursive: true }); + + // Add file type extension + const newPath = path.join(directory, `${fileName}.${fileType}`); + + // Write raw file content to file + fs.writeFileSync(newPath, serializedContent); + + // Clear the cache for this file to ensure we get fresh content next time + this.clearCache(); + + console.info(`Syncing ${fileType} ${filePath}`); + } catch (error) { + console.error(`Failed to sync ${fileType} ${filePath}: ${error}`); + throw error; + } + } + + /** + * Pull a specific file from Humanloop to local filesystem. + */ + private async pullFile(path: string, environment?: string): Promise { + const file = await this.client.files.retrieveByPath({ + path, + environment, + includeRawFileContent: true, + }); + + if (file.type !== "prompt" && file.type !== "agent") { + throw new Error(`Unsupported file type: ${file.type}`); + } + + this.saveSerializedFile((file as any).rawFileContent, file.path, file.type); + } + + /** + * Sync Prompt and Agent files from Humanloop to local filesystem. + */ + private async pullDirectory( + path?: string, + environment?: string, + ): Promise { + const successfulFiles: string[] = []; + const failedFiles: string[] = []; + let page = 1; + + while (true) { + try { + const response = await this.client.files.listFiles({ + type: ["prompt", "agent"], + page, + includeRawFileContent: true, + environment, + path, + }); + console.log(response); + + if (response.records.length === 0) { + break; + } + + // Process each file + for (const file of response.records) { + // Skip if not a Prompt or Agent + if (file.type !== "prompt" && file.type !== "agent") { + console.warn(`Skipping unsupported file type: ${file.type}`); + continue; + } + + // Skip if no raw file content + if (!(file as any).rawFileContent) { + console.warn( + `No content found for ${file.type} ${file.id || ""}`, + ); + continue; + } + + try { + this.saveSerializedFile( + (file as any).rawFileContent, + file.path, + file.type, + ); + successfulFiles.push(file.path); + } catch (error) { + failedFiles.push(file.path); + console.error(`Task failed for ${file.path}: ${error}`); + } + } + + page += 1; + } catch (error) { + throw new HumanloopRuntimeError( + `Failed to fetch page ${page}: ${error}`, + ); + } + } + + // Log summary only if we have results + if (successfulFiles.length > 0 || failedFiles.length > 0) { + if (successfulFiles.length > 0) { + console.info(`\nSynced ${successfulFiles.length} files`); + } + if (failedFiles.length > 0) { + console.error(`Failed to sync ${failedFiles.length} files`); + } + } + + return successfulFiles; + } + + /** + * Pull files from Humanloop to local filesystem. + * + * @param path - The path to the file or directory to pull. + * @param environment - The environment to pull the file from. + * @returns An array of successful file paths. + */ + public async pull(path?: string, environment?: string): Promise { + const startTime = Date.now(); + try { + let successfulFiles: string[] = []; + let failedFiles: string[] = []; + + if (!path) { + // Pull all files from the root + successfulFiles = await this.pullDirectory(undefined, environment); + } else { + const normalizedPath = this.normalizePath(path); + if (this.isFile(path)) { + await this.pullFile(normalizedPath, environment); + successfulFiles = [path]; + } else { + successfulFiles = await this.pullDirectory( + normalizedPath, + environment, + ); + } + } + + // Log the successful operation + this.metadata.logOperation({ + operationType: "pull", + path: path || "", // Use empty string if path is undefined + environment, + successfulFiles, + failedFiles, + startTime, + }); + + return successfulFiles; + } catch (error) { + // Log the failed operation + this.metadata.logOperation({ + operationType: "pull", + path: path || "", // Use empty string if path is undefined + environment, + error: String(error), + startTime, + }); + throw error; + } + } +} diff --git a/src/sync/index.ts b/src/sync/index.ts new file mode 100644 index 00000000..8cfc42b5 --- /dev/null +++ b/src/sync/index.ts @@ -0,0 +1,8 @@ +/** + * File synchronization for Humanloop + * + * This module provides sync functionality between Humanloop and the local filesystem. + */ + +export { default as SyncClient } from './SyncClient'; +export { default as MetadataHandler } from './MetadataHandler'; \ No newline at end of file diff --git a/src/sync/sync_client.ts b/src/sync/sync_client.ts deleted file mode 100644 index e69de29b..00000000 From 21c7be13ffa2cf23023c04ffd798564b1b72afb3 Mon Sep 17 00:00:00 2001 From: fern-api <115122769+fern-api[bot]@users.noreply.github.com> Date: Tue, 6 May 2025 16:21:19 +0000 Subject: [PATCH 04/10] Release 0.8.21 --- jest.config.mjs | 2 +- package.json | 2 +- reference.md | 175 +----- src/api/resources/agents/client/Client.ts | 163 ++--- .../agents/client/requests/AgentLogRequest.ts | 53 +- .../agents/client/requests/AgentRequest.ts | 35 +- .../client/requests/AgentsCallRequest.ts | 17 +- .../requests/AgentsCallStreamRequest.ts | 9 +- .../requests/AgentsContinueCallRequest.ts | 6 +- .../client/requests/AgentsContinueRequest.ts | 25 - .../requests/AgentsContinueStreamRequest.ts | 25 - .../client/requests/ListAgentsGetRequest.ts | 6 +- .../client/requests/UpdateAgentLogRequest.ts | 15 +- .../client/requests/UpdateAgentRequest.ts | 4 +- .../agents/types/AgentLogRequestAgent.ts | 13 + .../agents/types/AgentsCallRequestAgent.ts | 13 + .../types/AgentsCallStreamRequestAgent.ts | 13 + src/api/resources/agents/types/index.ts | 3 + src/api/resources/datasets/client/Client.ts | 54 +- .../client/requests/ListDatasetsGetRequest.ts | 2 +- .../resources/directories/client/Client.ts | 20 +- .../resources/evaluations/client/Client.ts | 56 +- src/api/resources/evaluators/client/Client.ts | 54 +- .../requests/ListEvaluatorsGetRequest.ts | 2 +- src/api/resources/files/client/Client.ts | 39 +- ...dyRetrieveByPathFilesRetrieveByPathPost.ts | 4 + .../requests/ListFilesFilesGetRequest.ts | 10 +- src/api/resources/flows/client/Client.ts | 58 +- .../client/requests/ListFlowsGetRequest.ts | 2 +- src/api/resources/logs/client/Client.ts | 12 +- src/api/resources/prompts/client/Client.ts | 83 +-- .../client/requests/ListPromptsGetRequest.ts | 2 +- .../client/requests/PromptLogRequest.ts | 9 +- .../client/requests/PromptsCallRequest.ts | 9 +- .../requests/PromptsCallStreamRequest.ts | 9 +- .../prompts/types/PromptLogRequestPrompt.ts | 13 + .../prompts/types/PromptsCallRequestPrompt.ts | 13 + .../types/PromptsCallStreamRequestPrompt.ts | 13 + src/api/resources/prompts/types/index.ts | 3 + src/api/resources/tools/client/Client.ts | 74 +-- .../client/requests/ListToolsGetRequest.ts | 2 +- src/api/types/AgentResponse.ts | 2 + .../types/{ProjectSortBy.ts => FileSortBy.ts} | 4 +- src/api/types/PopulateTemplateResponse.ts | 2 + src/api/types/PromptResponse.ts | 2 + src/api/types/index.ts | 2 +- .../agents/client/requests/AgentLogRequest.ts | 6 +- .../client/requests/AgentsCallRequest.ts | 6 +- .../requests/AgentsCallStreamRequest.ts | 6 +- .../agents/types/AgentLogRequestAgent.ts | 17 + .../agents/types/AgentsCallRequestAgent.ts | 17 + .../types/AgentsCallStreamRequestAgent.ts | 17 + .../resources/agents/types/index.ts | 3 + ...dyRetrieveByPathFilesRetrieveByPathPost.ts | 2 +- .../client/requests/PromptLogRequest.ts | 6 +- .../client/requests/PromptsCallRequest.ts | 6 +- .../requests/PromptsCallStreamRequest.ts | 6 +- .../prompts/types/PromptLogRequestPrompt.ts | 17 + .../prompts/types/PromptsCallRequestPrompt.ts | 17 + .../types/PromptsCallStreamRequestPrompt.ts | 17 + .../resources/prompts/types/index.ts | 3 + src/serialization/types/AgentResponse.ts | 2 + .../types/{ProjectSortBy.ts => FileSortBy.ts} | 4 +- .../types/PopulateTemplateResponse.ts | 2 + src/serialization/types/PromptResponse.ts | 2 + src/serialization/types/index.ts | 2 +- src/version.ts | 2 +- tests/integration/decorators.test.ts | 502 --------------- tests/integration/evals.test.ts | 577 ------------------ tests/integration/fixtures.ts | 246 -------- yarn.lock | 322 +++++----- 71 files changed, 801 insertions(+), 2140 deletions(-) delete mode 100644 src/api/resources/agents/client/requests/AgentsContinueRequest.ts delete mode 100644 src/api/resources/agents/client/requests/AgentsContinueStreamRequest.ts create mode 100644 src/api/resources/agents/types/AgentLogRequestAgent.ts create mode 100644 src/api/resources/agents/types/AgentsCallRequestAgent.ts create mode 100644 src/api/resources/agents/types/AgentsCallStreamRequestAgent.ts create mode 100644 src/api/resources/prompts/types/PromptLogRequestPrompt.ts create mode 100644 src/api/resources/prompts/types/PromptsCallRequestPrompt.ts create mode 100644 src/api/resources/prompts/types/PromptsCallStreamRequestPrompt.ts rename src/api/types/{ProjectSortBy.ts => FileSortBy.ts} (66%) create mode 100644 src/serialization/resources/agents/types/AgentLogRequestAgent.ts create mode 100644 src/serialization/resources/agents/types/AgentsCallRequestAgent.ts create mode 100644 src/serialization/resources/agents/types/AgentsCallStreamRequestAgent.ts create mode 100644 src/serialization/resources/prompts/types/PromptLogRequestPrompt.ts create mode 100644 src/serialization/resources/prompts/types/PromptsCallRequestPrompt.ts create mode 100644 src/serialization/resources/prompts/types/PromptsCallStreamRequestPrompt.ts rename src/serialization/types/{ProjectSortBy.ts => FileSortBy.ts} (68%) delete mode 100644 tests/integration/decorators.test.ts delete mode 100644 tests/integration/evals.test.ts delete mode 100644 tests/integration/fixtures.ts diff --git a/jest.config.mjs b/jest.config.mjs index 9eb4a4af..c7248211 100644 --- a/jest.config.mjs +++ b/jest.config.mjs @@ -3,6 +3,6 @@ export default { preset: "ts-jest", testEnvironment: "node", moduleNameMapper: { - "^(?!.*node_modules)(.+)\\.js$": "$1", + "(.+)\.js$": "$1", }, }; diff --git a/package.json b/package.json index ceeadcf3..c4d382d5 100644 --- a/package.json +++ b/package.json @@ -1,6 +1,6 @@ { "name": "humanloop", - "version": "0.8.21-beta1", + "version": "0.8.21", "private": false, "repository": "https://github.com/humanloop/humanloop-node", "main": "./index.js", diff --git a/reference.md b/reference.md index afc2e70e..73c1d3c5 100644 --- a/reference.md +++ b/reference.md @@ -1342,7 +1342,7 @@ await client.prompts.updateMonitoring("pr_30gco7dx6JDq4200GVOHa", {
-
client.prompts.serialize(id, { ...params }) -> void +
client.prompts.serialize(id, { ...params }) -> string
@@ -5883,52 +5883,7 @@ in order to trigger Evaluators.
```typescript -await client.agents.log({ - path: "Banking/Teller Agent", - agent: { - provider: "anthropic", - endpoint: "chat", - model: "claude-3-7-sonnet-latest", - reasoningEffort: 1024, - template: [ - { - role: "system", - content: "You are a helpful digital assistant, helping users navigate our digital banking platform.", - }, - ], - maxIterations: 3, - tools: [ - { - type: "file", - link: { - fileId: "pr_1234567890", - versionId: "prv_1234567890", - }, - onAgentCall: "continue", - }, - { - type: "inline", - jsonSchema: { - name: "stop", - description: "Call this tool when you have finished your task.", - parameters: { - type: "object", - properties: { - output: { - type: "string", - description: "The final output to return to the user.", - }, - }, - additionalProperties: false, - required: ["output"], - }, - strict: true, - }, - onAgentCall: "stop", - }, - ], - }, -}); +await client.agents.log(); ```
@@ -5993,23 +5948,7 @@ Update the details of a Log with the given ID.
```typescript -await client.agents.updateLog("ag_1234567890", "log_1234567890", { - messages: [ - { - role: "user", - content: "I need to withdraw $1000", - }, - { - role: "assistant", - content: "Of course! Would you like to use your savings or checking account?", - }, - ], - outputMessage: { - role: "assistant", - content: "I'm sorry, I can't help with that.", - }, - logStatus: "complete", -}); +await client.agents.updateLog("id", "log_id"); ```
@@ -6182,15 +6121,7 @@ your Agent details in code.
```typescript -await client.agents.call({ - path: "Banking/Teller Agent", - messages: [ - { - role: "user", - content: "I'd like to deposit $1000 to my savings account from my checking account.", - }, - ], -}); +await client.agents.call({}); ```
@@ -6343,12 +6274,10 @@ The original log must be in an incomplete state to be continued. ```typescript await client.agents.continueCall({ - logId: "log_1234567890", + logId: "log_id", messages: [ { - role: "tool", - content: '{"type": "checking", "balance": 5200}', - toolCallId: "tc_1234567890", + role: "user", }, ], }); @@ -6386,7 +6315,7 @@ await client.agents.continueCall({
-
client.agents.list({ ...params }) -> core.Page +
client.agents.list({ ...params }) -> Humanloop.PaginatedDataAgentResponse
@@ -6414,20 +6343,7 @@ Get a list of all Agents.
```typescript -const response = await client.agents.list({ - size: 1, -}); -for await (const item of response) { - console.log(item); -} - -// Or you can manually iterate page-by-page -const page = await client.agents.list({ - size: 1, -}); -while (page.hasNextPage()) { - page = page.getNextPage(); -} +await client.agents.list(); ```
@@ -6498,42 +6414,7 @@ that already exists will result in a 409 Conflict error. ```typescript await client.agents.upsert({ - path: "Banking/Teller Agent", - provider: "anthropic", - endpoint: "chat", - model: "claude-3-7-sonnet-latest", - reasoningEffort: 1024, - template: [ - { - role: "system", - content: "You are a helpful digital assistant, helping users navigate our digital banking platform.", - }, - ], - maxIterations: 3, - tools: [ - { - type: "inline", - jsonSchema: { - name: "stop", - description: "Call this tool when you have finished your task.", - parameters: { - type: "object", - properties: { - output: { - type: "string", - description: "The final output to return to the user.", - }, - }, - additionalProperties: false, - required: ["output"], - }, - strict: true, - }, - onAgentCall: "stop", - }, - ], - versionName: "teller-agent-v1", - versionDescription: "Initial version", + model: "model", }); ``` @@ -6597,7 +6478,7 @@ Delete a version of the Agent.
```typescript -await client.agents.deleteAgentVersion("ag_1234567890", "agv_1234567890"); +await client.agents.deleteAgentVersion("id", "version_id"); ```
@@ -6668,10 +6549,7 @@ Update the name or description of the Agent version.
```typescript -await client.agents.patchAgentVersion("ag_1234567890", "agv_1234567890", { - name: "teller-agent-v2", - description: "Updated version", -}); +await client.agents.patchAgentVersion("id", "version_id", {}); ```
@@ -6753,7 +6631,7 @@ By default, the deployed version of the Agent is returned. Use the query paramet
```typescript -await client.agents.get("ag_1234567890"); +await client.agents.get("id"); ```
@@ -6824,7 +6702,7 @@ Delete the Agent with the given ID.
```typescript -await client.agents.delete("ag_1234567890"); +await client.agents.delete("id"); ```
@@ -6887,9 +6765,7 @@ Move the Agent to a different path or change the name.
```typescript -await client.agents.move("ag_1234567890", { - path: "new directory/new name", -}); +await client.agents.move("id"); ```
@@ -6960,7 +6836,7 @@ Get a list of all the versions of a Agent.
```typescript -await client.agents.listVersions("ag_1234567890"); +await client.agents.listVersions("id"); ```
@@ -7189,7 +7065,7 @@ List all Environments and their deployed versions for the Agent.
```typescript -await client.agents.listEnvironments("ag_1234567890"); +await client.agents.listEnvironments("id"); ```
@@ -7255,22 +7131,7 @@ within the Agent for monitoring purposes.
```typescript -await client.agents.updateMonitoring("ag_1234567890", { - activate: [ - { - evaluatorVersionId: "ev_1234567890", - }, - { - evaluatorId: "ev_2345678901", - environmentId: "env_1234567890", - }, - ], - deactivate: [ - { - evaluatorVersionId: "ev_0987654321", - }, - ], -}); +await client.agents.updateMonitoring("id", {}); ```
@@ -7313,7 +7174,7 @@ await client.agents.updateMonitoring("ag_1234567890", {
-
client.agents.serialize(id, { ...params }) -> void +
client.agents.serialize(id, { ...params }) -> string
diff --git a/src/api/resources/agents/client/Client.ts b/src/api/resources/agents/client/Client.ts index 842af06d..253ae2d8 100644 --- a/src/api/resources/agents/client/Client.ts +++ b/src/api/resources/agents/client/Client.ts @@ -76,8 +76,8 @@ export class Agents { headers: { "X-Fern-Language": "JavaScript", "X-Fern-SDK-Name": "humanloop", - "X-Fern-SDK-Version": "0.8.21-beta1", - "User-Agent": "humanloop/0.8.21-beta1", + "X-Fern-SDK-Version": "0.8.21", + "User-Agent": "humanloop/0.8.21", "X-Fern-Runtime": core.RUNTIME.type, "X-Fern-Runtime-Version": core.RUNTIME.version, ...(await this._getCustomAuthorizationHeaders()), @@ -156,7 +156,7 @@ export class Agents { logId: string, request: Humanloop.UpdateAgentLogRequest = {}, requestOptions?: Agents.RequestOptions, - ): Promise { + ): Promise { const _response = await (this._options.fetcher ?? core.fetcher)({ url: urlJoin( (await core.Supplier.get(this._options.baseUrl)) ?? @@ -168,8 +168,8 @@ export class Agents { headers: { "X-Fern-Language": "JavaScript", "X-Fern-SDK-Name": "humanloop", - "X-Fern-SDK-Version": "0.8.21-beta1", - "User-Agent": "humanloop/0.8.21-beta1", + "X-Fern-SDK-Version": "0.8.21", + "User-Agent": "humanloop/0.8.21", "X-Fern-Runtime": core.RUNTIME.type, "X-Fern-Runtime-Version": core.RUNTIME.version, ...(await this._getCustomAuthorizationHeaders()), @@ -183,7 +183,7 @@ export class Agents { abortSignal: requestOptions?.abortSignal, }); if (_response.ok) { - return serializers.LogResponse.parseOrThrow(_response.body, { + return serializers.AgentLogResponse.parseOrThrow(_response.body, { unrecognizedObjectKeys: "passthrough", allowUnrecognizedUnionMembers: true, allowUnrecognizedEnumValues: true, @@ -230,23 +230,26 @@ export class Agents { } /** - * Call an Agent. + * Call an Agent. The Agent will run on the Humanloop runtime and return a completed Agent Log. * - * Calling an Agent calls the model provider before logging - * the request, responses and metadata to Humanloop. + * If the Agent requires a tool call that cannot be ran by Humanloop, execution will halt. To continue, + * pass the ID of the incomplete Log and the required tool call to the /agents/continue endpoint. + * + * The agent will run for the maximum number of iterations, or until it encounters a stop condition, + * according to its configuration. * * You can use query parameters `version_id`, or `environment`, to target * an existing version of the Agent. Otherwise the default deployed version will be chosen. * * Instead of targeting an existing version explicitly, you can instead pass in - * Agent details in the request body. In this case, we will check if the details correspond - * to an existing version of the Agent. If they do not, we will create a new version. This is helpful - * in the case where you are storing or deriving your Agent details in code. + * Agent details in the request body. A new version is created if it does not match + * any existing ones. This is helpful in the case where you are storing or deriving + * your Agent details in code. */ public async callStream( request: Humanloop.AgentsCallStreamRequest, requestOptions?: Agents.RequestOptions, - ): Promise> { + ): Promise> { const { versionId, environment, ..._body } = request; const _queryParams: Record = {}; if (versionId != null) { @@ -268,8 +271,8 @@ export class Agents { headers: { "X-Fern-Language": "JavaScript", "X-Fern-SDK-Name": "humanloop", - "X-Fern-SDK-Version": "0.8.21-beta1", - "User-Agent": "humanloop/0.8.21-beta1", + "X-Fern-SDK-Version": "0.8.21", + "User-Agent": "humanloop/0.8.21", "X-Fern-Runtime": core.RUNTIME.type, "X-Fern-Runtime-Version": core.RUNTIME.version, ...(await this._getCustomAuthorizationHeaders()), @@ -291,7 +294,7 @@ export class Agents { return new core.Stream({ stream: _response.body, parse: async (data) => { - return serializers.AgentContinueCallStreamResponse.parseOrThrow(data, { + return serializers.AgentCallStreamResponse.parseOrThrow(data, { unrecognizedObjectKeys: "passthrough", allowUnrecognizedUnionMembers: true, allowUnrecognizedEnumValues: true, @@ -343,18 +346,21 @@ export class Agents { } /** - * Call an Agent. + * Call an Agent. The Agent will run on the Humanloop runtime and return a completed Agent Log. * - * Calling an Agent calls the model provider before logging - * the request, responses and metadata to Humanloop. + * If the Agent requires a tool call that cannot be ran by Humanloop, execution will halt. To continue, + * pass the ID of the incomplete Log and the required tool call to the /agents/continue endpoint. + * + * The agent will run for the maximum number of iterations, or until it encounters a stop condition, + * according to its configuration. * * You can use query parameters `version_id`, or `environment`, to target * an existing version of the Agent. Otherwise the default deployed version will be chosen. * * Instead of targeting an existing version explicitly, you can instead pass in - * Agent details in the request body. In this case, we will check if the details correspond - * to an existing version of the Agent. If they do not, we will create a new version. This is helpful - * in the case where you are storing or deriving your Agent details in code. + * Agent details in the request body. A new version is created if it does not match + * any existing ones. This is helpful in the case where you are storing or deriving + * your Agent details in code. * * @param {Humanloop.AgentsCallRequest} request * @param {Agents.RequestOptions} requestOptions - Request-specific configuration. @@ -367,7 +373,7 @@ export class Agents { public async call( request: Humanloop.AgentsCallRequest, requestOptions?: Agents.RequestOptions, - ): Promise { + ): Promise { const { versionId, environment, ..._body } = request; const _queryParams: Record = {}; if (versionId != null) { @@ -389,8 +395,8 @@ export class Agents { headers: { "X-Fern-Language": "JavaScript", "X-Fern-SDK-Name": "humanloop", - "X-Fern-SDK-Version": "0.8.21-beta1", - "User-Agent": "humanloop/0.8.21-beta1", + "X-Fern-SDK-Version": "0.8.21", + "User-Agent": "humanloop/0.8.21", "X-Fern-Runtime": core.RUNTIME.type, "X-Fern-Runtime-Version": core.RUNTIME.version, ...(await this._getCustomAuthorizationHeaders()), @@ -408,7 +414,7 @@ export class Agents { abortSignal: requestOptions?.abortSignal, }); if (_response.ok) { - return serializers.AgentContinueCallResponse.parseOrThrow(_response.body, { + return serializers.AgentCallResponse.parseOrThrow(_response.body, { unrecognizedObjectKeys: "passthrough", allowUnrecognizedUnionMembers: true, allowUnrecognizedEnumValues: true, @@ -455,15 +461,15 @@ export class Agents { /** * Continue an incomplete Agent call. * - * This endpoint allows continuing an existing incomplete Agent call, using the context - * from the previous interaction. The Agent will resume processing from where it left off. + * This endpoint allows continuing an existing incomplete Agent call, by passing the tool call + * requested by the Agent. The Agent will resume processing from where it left off. * - * The original log must be in an incomplete state to be continued. + * The messages in the request will be appended to the original messages in the Log. You do not + * have to provide the previous conversation history. * - * The messages in the request will be appended - * to the original messages in the log. + * The original log must be in an incomplete state to be continued. */ - public async continueStream( + public async continueCallStream( request: Humanloop.AgentsContinueCallStreamRequest, requestOptions?: Agents.RequestOptions, ): Promise> { @@ -478,8 +484,8 @@ export class Agents { headers: { "X-Fern-Language": "JavaScript", "X-Fern-SDK-Name": "humanloop", - "X-Fern-SDK-Version": "0.8.21-beta1", - "User-Agent": "humanloop/0.8.21-beta1", + "X-Fern-SDK-Version": "0.8.21", + "User-Agent": "humanloop/0.8.21", "X-Fern-Runtime": core.RUNTIME.type, "X-Fern-Runtime-Version": core.RUNTIME.version, ...(await this._getCustomAuthorizationHeaders()), @@ -488,7 +494,9 @@ export class Agents { contentType: "application/json", requestType: "json", body: { - ...serializers.AgentsContinueCallStreamRequest.jsonOrThrow(request, { unrecognizedObjectKeys: "strip" }), + ...serializers.AgentsContinueCallStreamRequest.jsonOrThrow(request, { + unrecognizedObjectKeys: "strip", + }), stream: true, }, responseType: "sse", @@ -554,28 +562,28 @@ export class Agents { /** * Continue an incomplete Agent call. * - * This endpoint allows continuing an existing incomplete Agent call, using the context - * from the previous interaction. The Agent will resume processing from where it left off. + * This endpoint allows continuing an existing incomplete Agent call, by passing the tool call + * requested by the Agent. The Agent will resume processing from where it left off. * - * The original log must be in an incomplete state to be continued. + * The messages in the request will be appended to the original messages in the Log. You do not + * have to provide the previous conversation history. * - * The messages in the request will be appended - * to the original messages in the log. + * The original log must be in an incomplete state to be continued. * - * @param {Humanloop.AgentsContinueRequest} request + * @param {Humanloop.AgentsContinueCallRequest} request * @param {Agents.RequestOptions} requestOptions - Request-specific configuration. * * @throws {@link Humanloop.UnprocessableEntityError} * * @example - * await client.agents.continue({ + * await client.agents.continueCall({ * logId: "log_id", * messages: [{ * role: "user" * }] * }) */ - public async continue( + public async continueCall( request: Humanloop.AgentsContinueCallRequest, requestOptions?: Agents.RequestOptions, ): Promise { @@ -590,8 +598,8 @@ export class Agents { headers: { "X-Fern-Language": "JavaScript", "X-Fern-SDK-Name": "humanloop", - "X-Fern-SDK-Version": "0.8.21-beta1", - "User-Agent": "humanloop/0.8.21-beta1", + "X-Fern-SDK-Version": "0.8.21", + "User-Agent": "humanloop/0.8.21", "X-Fern-Runtime": core.RUNTIME.type, "X-Fern-Runtime-Version": core.RUNTIME.version, ...(await this._getCustomAuthorizationHeaders()), @@ -686,9 +694,7 @@ export class Agents { } if (sortBy != null) { - _queryParams["sort_by"] = serializers.ProjectSortBy.jsonOrThrow(sortBy, { - unrecognizedObjectKeys: "strip", - }); + _queryParams["sort_by"] = serializers.FileSortBy.jsonOrThrow(sortBy, { unrecognizedObjectKeys: "strip" }); } if (order != null) { @@ -706,8 +712,8 @@ export class Agents { headers: { "X-Fern-Language": "JavaScript", "X-Fern-SDK-Name": "humanloop", - "X-Fern-SDK-Version": "0.8.21-beta1", - "User-Agent": "humanloop/0.8.21-beta1", + "X-Fern-SDK-Version": "0.8.21", + "User-Agent": "humanloop/0.8.21", "X-Fern-Runtime": core.RUNTIME.type, "X-Fern-Runtime-Version": core.RUNTIME.version, ...(await this._getCustomAuthorizationHeaders()), @@ -800,8 +806,8 @@ export class Agents { headers: { "X-Fern-Language": "JavaScript", "X-Fern-SDK-Name": "humanloop", - "X-Fern-SDK-Version": "0.8.21-beta1", - "User-Agent": "humanloop/0.8.21-beta1", + "X-Fern-SDK-Version": "0.8.21", + "User-Agent": "humanloop/0.8.21", "X-Fern-Runtime": core.RUNTIME.type, "X-Fern-Runtime-Version": core.RUNTIME.version, ...(await this._getCustomAuthorizationHeaders()), @@ -887,8 +893,8 @@ export class Agents { headers: { "X-Fern-Language": "JavaScript", "X-Fern-SDK-Name": "humanloop", - "X-Fern-SDK-Version": "0.8.21-beta1", - "User-Agent": "humanloop/0.8.21-beta1", + "X-Fern-SDK-Version": "0.8.21", + "User-Agent": "humanloop/0.8.21", "X-Fern-Runtime": core.RUNTIME.type, "X-Fern-Runtime-Version": core.RUNTIME.version, ...(await this._getCustomAuthorizationHeaders()), @@ -971,8 +977,8 @@ export class Agents { headers: { "X-Fern-Language": "JavaScript", "X-Fern-SDK-Name": "humanloop", - "X-Fern-SDK-Version": "0.8.21-beta1", - "User-Agent": "humanloop/0.8.21-beta1", + "X-Fern-SDK-Version": "0.8.21", + "User-Agent": "humanloop/0.8.21", "X-Fern-Runtime": core.RUNTIME.type, "X-Fern-Runtime-Version": core.RUNTIME.version, ...(await this._getCustomAuthorizationHeaders()), @@ -1073,8 +1079,8 @@ export class Agents { headers: { "X-Fern-Language": "JavaScript", "X-Fern-SDK-Name": "humanloop", - "X-Fern-SDK-Version": "0.8.21-beta1", - "User-Agent": "humanloop/0.8.21-beta1", + "X-Fern-SDK-Version": "0.8.21", + "User-Agent": "humanloop/0.8.21", "X-Fern-Runtime": core.RUNTIME.type, "X-Fern-Runtime-Version": core.RUNTIME.version, ...(await this._getCustomAuthorizationHeaders()), @@ -1155,8 +1161,8 @@ export class Agents { headers: { "X-Fern-Language": "JavaScript", "X-Fern-SDK-Name": "humanloop", - "X-Fern-SDK-Version": "0.8.21-beta1", - "User-Agent": "humanloop/0.8.21-beta1", + "X-Fern-SDK-Version": "0.8.21", + "User-Agent": "humanloop/0.8.21", "X-Fern-Runtime": core.RUNTIME.type, "X-Fern-Runtime-Version": core.RUNTIME.version, ...(await this._getCustomAuthorizationHeaders()), @@ -1235,8 +1241,8 @@ export class Agents { headers: { "X-Fern-Language": "JavaScript", "X-Fern-SDK-Name": "humanloop", - "X-Fern-SDK-Version": "0.8.21-beta1", - "User-Agent": "humanloop/0.8.21-beta1", + "X-Fern-SDK-Version": "0.8.21", + "User-Agent": "humanloop/0.8.21", "X-Fern-Runtime": core.RUNTIME.type, "X-Fern-Runtime-Version": core.RUNTIME.version, ...(await this._getCustomAuthorizationHeaders()), @@ -1328,8 +1334,8 @@ export class Agents { headers: { "X-Fern-Language": "JavaScript", "X-Fern-SDK-Name": "humanloop", - "X-Fern-SDK-Version": "0.8.21-beta1", - "User-Agent": "humanloop/0.8.21-beta1", + "X-Fern-SDK-Version": "0.8.21", + "User-Agent": "humanloop/0.8.21", "X-Fern-Runtime": core.RUNTIME.type, "X-Fern-Runtime-Version": core.RUNTIME.version, ...(await this._getCustomAuthorizationHeaders()), @@ -1425,8 +1431,8 @@ export class Agents { headers: { "X-Fern-Language": "JavaScript", "X-Fern-SDK-Name": "humanloop", - "X-Fern-SDK-Version": "0.8.21-beta1", - "User-Agent": "humanloop/0.8.21-beta1", + "X-Fern-SDK-Version": "0.8.21", + "User-Agent": "humanloop/0.8.21", "X-Fern-Runtime": core.RUNTIME.type, "X-Fern-Runtime-Version": core.RUNTIME.version, ...(await this._getCustomAuthorizationHeaders()), @@ -1517,8 +1523,8 @@ export class Agents { headers: { "X-Fern-Language": "JavaScript", "X-Fern-SDK-Name": "humanloop", - "X-Fern-SDK-Version": "0.8.21-beta1", - "User-Agent": "humanloop/0.8.21-beta1", + "X-Fern-SDK-Version": "0.8.21", + "User-Agent": "humanloop/0.8.21", "X-Fern-Runtime": core.RUNTIME.type, "X-Fern-Runtime-Version": core.RUNTIME.version, ...(await this._getCustomAuthorizationHeaders()), @@ -1597,8 +1603,8 @@ export class Agents { headers: { "X-Fern-Language": "JavaScript", "X-Fern-SDK-Name": "humanloop", - "X-Fern-SDK-Version": "0.8.21-beta1", - "User-Agent": "humanloop/0.8.21-beta1", + "X-Fern-SDK-Version": "0.8.21", + "User-Agent": "humanloop/0.8.21", "X-Fern-Runtime": core.RUNTIME.type, "X-Fern-Runtime-Version": core.RUNTIME.version, ...(await this._getCustomAuthorizationHeaders()), @@ -1686,8 +1692,8 @@ export class Agents { headers: { "X-Fern-Language": "JavaScript", "X-Fern-SDK-Name": "humanloop", - "X-Fern-SDK-Version": "0.8.21-beta1", - "User-Agent": "humanloop/0.8.21-beta1", + "X-Fern-SDK-Version": "0.8.21", + "User-Agent": "humanloop/0.8.21", "X-Fern-Runtime": core.RUNTIME.type, "X-Fern-Runtime-Version": core.RUNTIME.version, ...(await this._getCustomAuthorizationHeaders()), @@ -1769,7 +1775,7 @@ export class Agents { id: string, request: Humanloop.SerializeAgentsIdSerializeGetRequest = {}, requestOptions?: Agents.RequestOptions, - ): Promise { + ): Promise { const { versionId, environment } = request; const _queryParams: Record = {}; if (versionId != null) { @@ -1791,8 +1797,8 @@ export class Agents { headers: { "X-Fern-Language": "JavaScript", "X-Fern-SDK-Name": "humanloop", - "X-Fern-SDK-Version": "0.8.21-beta1", - "User-Agent": "humanloop/0.8.21-beta1", + "X-Fern-SDK-Version": "0.8.21", + "User-Agent": "humanloop/0.8.21", "X-Fern-Runtime": core.RUNTIME.type, "X-Fern-Runtime-Version": core.RUNTIME.version, ...(await this._getCustomAuthorizationHeaders()), @@ -1801,12 +1807,13 @@ export class Agents { contentType: "application/json", queryParameters: _queryParams, requestType: "json", + responseType: "text", timeoutMs: requestOptions?.timeoutInSeconds != null ? requestOptions.timeoutInSeconds * 1000 : 60000, maxRetries: requestOptions?.maxRetries, abortSignal: requestOptions?.abortSignal, }); if (_response.ok) { - return _response.body; + return _response.body as string; } if (_response.error.reason === "status-code") { @@ -1875,8 +1882,8 @@ export class Agents { headers: { "X-Fern-Language": "JavaScript", "X-Fern-SDK-Name": "humanloop", - "X-Fern-SDK-Version": "0.8.21-beta1", - "User-Agent": "humanloop/0.8.21-beta1", + "X-Fern-SDK-Version": "0.8.21", + "User-Agent": "humanloop/0.8.21", "X-Fern-Runtime": core.RUNTIME.type, "X-Fern-Runtime-Version": core.RUNTIME.version, ...(await this._getCustomAuthorizationHeaders()), diff --git a/src/api/resources/agents/client/requests/AgentLogRequest.ts b/src/api/resources/agents/client/requests/AgentLogRequest.ts index 5852bf02..9f1f1dcb 100644 --- a/src/api/resources/agents/client/requests/AgentLogRequest.ts +++ b/src/api/resources/agents/client/requests/AgentLogRequest.ts @@ -6,49 +6,7 @@ import * as Humanloop from "../../../../index"; /** * @example - * { - * path: "Banking/Teller Agent", - * agent: { - * provider: "anthropic", - * endpoint: "chat", - * model: "claude-3-7-sonnet-latest", - * reasoningEffort: 1024, - * template: [{ - * role: "system", - * content: "You are a helpful digital assistant, helping users navigate our digital banking platform." - * }], - * maxIterations: 3, - * tools: [{ - * type: "file", - * link: { - * fileId: "pr_1234567890", - * versionId: "prv_1234567890" - * }, - * onAgentCall: "continue" - * }, { - * type: "inline", - * jsonSchema: { - * name: "stop", - * description: "Call this tool when you have finished your task.", - * parameters: { - * "type": "object", - * "properties": { - * "output": { - * "type": "string", - * "description": "The final output to return to the user." - * } - * }, - * "additionalProperties": false, - * "required": [ - * "output" - * ] - * }, - * strict: true - * }, - * onAgentCall: "stop" - * }] - * } - * } + * {} */ export interface AgentLogRequest { /** @@ -89,8 +47,13 @@ export interface AgentLogRequest { * - `{'type': 'function', 'function': {name': }}` forces the model to use the named function. */ toolChoice?: Humanloop.AgentLogRequestToolChoice; - /** Details of your Agent. A new Agent version will be created if the provided details are new. */ - agent?: Humanloop.AgentKernelRequest; + /** + * The Agent configuration to use. Two formats are supported: + * - An object representing the details of the Agent configuration + * - A string representing the raw contents of a .agent file + * A new Agent version will be created if the provided details do not match any existing version. + */ + agent?: Humanloop.AgentLogRequestAgent; /** When the logged event started. */ startTime?: Date; /** When the logged event ended. */ diff --git a/src/api/resources/agents/client/requests/AgentRequest.ts b/src/api/resources/agents/client/requests/AgentRequest.ts index 7dd42f9d..a7106627 100644 --- a/src/api/resources/agents/client/requests/AgentRequest.ts +++ b/src/api/resources/agents/client/requests/AgentRequest.ts @@ -7,40 +7,7 @@ import * as Humanloop from "../../../../index"; /** * @example * { - * path: "Banking/Teller Agent", - * provider: "anthropic", - * endpoint: "chat", - * model: "claude-3-7-sonnet-latest", - * reasoningEffort: 1024, - * template: [{ - * role: "system", - * content: "You are a helpful digital assistant, helping users navigate our digital banking platform." - * }], - * maxIterations: 3, - * tools: [{ - * type: "inline", - * jsonSchema: { - * name: "stop", - * description: "Call this tool when you have finished your task.", - * parameters: { - * "type": "object", - * "properties": { - * "output": { - * "type": "string", - * "description": "The final output to return to the user." - * } - * }, - * "additionalProperties": false, - * "required": [ - * "output" - * ] - * }, - * strict: true - * }, - * onAgentCall: "stop" - * }], - * versionName: "teller-agent-v1", - * versionDescription: "Initial version" + * model: "model" * } */ export interface AgentRequest { diff --git a/src/api/resources/agents/client/requests/AgentsCallRequest.ts b/src/api/resources/agents/client/requests/AgentsCallRequest.ts index 1f554921..2d572dbc 100644 --- a/src/api/resources/agents/client/requests/AgentsCallRequest.ts +++ b/src/api/resources/agents/client/requests/AgentsCallRequest.ts @@ -6,13 +6,7 @@ import * as Humanloop from "../../../../index"; /** * @example - * { - * path: "Banking/Teller Agent", - * messages: [{ - * role: "user", - * content: "I'd like to deposit $1000 to my savings account from my checking account." - * }] - * } + * {} */ export interface AgentsCallRequest { /** @@ -37,8 +31,13 @@ export interface AgentsCallRequest { * - `{'type': 'function', 'function': {name': }}` forces the model to use the named function. */ toolChoice?: Humanloop.AgentsCallRequestToolChoice; - /** Details of your Agent. A new Agent version will be created if the provided details are new. */ - agent?: Humanloop.AgentKernelRequest; + /** + * The Agent configuration to use. Two formats are supported: + * - An object representing the details of the Agent configuration + * - A string representing the raw contents of a .agent file + * A new Agent version will be created if the provided details do not match any existing version. + */ + agent?: Humanloop.AgentsCallRequestAgent; /** The inputs passed to the prompt template. */ inputs?: Record; /** Identifies where the model was called from. */ diff --git a/src/api/resources/agents/client/requests/AgentsCallStreamRequest.ts b/src/api/resources/agents/client/requests/AgentsCallStreamRequest.ts index 46ef71f9..b6d5afed 100644 --- a/src/api/resources/agents/client/requests/AgentsCallStreamRequest.ts +++ b/src/api/resources/agents/client/requests/AgentsCallStreamRequest.ts @@ -31,8 +31,13 @@ export interface AgentsCallStreamRequest { * - `{'type': 'function', 'function': {name': }}` forces the model to use the named function. */ toolChoice?: Humanloop.AgentsCallStreamRequestToolChoice; - /** Details of your Agent. A new Agent version will be created if the provided details are new. */ - agent?: Humanloop.AgentKernelRequest; + /** + * The Agent configuration to use. Two formats are supported: + * - An object representing the details of the Agent configuration + * - A string representing the raw contents of a .agent file + * A new Agent version will be created if the provided details do not match any existing version. + */ + agent?: Humanloop.AgentsCallStreamRequestAgent; /** The inputs passed to the prompt template. */ inputs?: Record; /** Identifies where the model was called from. */ diff --git a/src/api/resources/agents/client/requests/AgentsContinueCallRequest.ts b/src/api/resources/agents/client/requests/AgentsContinueCallRequest.ts index 8f9049e7..eb9aee76 100644 --- a/src/api/resources/agents/client/requests/AgentsContinueCallRequest.ts +++ b/src/api/resources/agents/client/requests/AgentsContinueCallRequest.ts @@ -7,11 +7,9 @@ import * as Humanloop from "../../../../index"; /** * @example * { - * logId: "log_1234567890", + * logId: "log_id", * messages: [{ - * role: "tool", - * content: "{\"type\": \"checking\", \"balance\": 5200}", - * toolCallId: "tc_1234567890" + * role: "user" * }] * } */ diff --git a/src/api/resources/agents/client/requests/AgentsContinueRequest.ts b/src/api/resources/agents/client/requests/AgentsContinueRequest.ts deleted file mode 100644 index eb9aee76..00000000 --- a/src/api/resources/agents/client/requests/AgentsContinueRequest.ts +++ /dev/null @@ -1,25 +0,0 @@ -/** - * This file was auto-generated by Fern from our API Definition. - */ - -import * as Humanloop from "../../../../index"; - -/** - * @example - * { - * logId: "log_id", - * messages: [{ - * role: "user" - * }] - * } - */ -export interface AgentsContinueCallRequest { - /** This identifies the Agent Log to continue. */ - logId: string; - /** The additional messages with which to continue the Agent Log. Often, these should start with the Tool messages with results for the previous Assistant message's tool calls. */ - messages: Humanloop.ChatMessage[]; - /** API keys required by each provider to make API calls. The API keys provided here are not stored by Humanloop. If not specified here, Humanloop will fall back to the key saved to your organization. */ - providerApiKeys?: Humanloop.ProviderApiKeys; - /** If true, populate `trace_children` for the returned Agent Log. Defaults to false. */ - includeTraceChildren?: boolean; -} diff --git a/src/api/resources/agents/client/requests/AgentsContinueStreamRequest.ts b/src/api/resources/agents/client/requests/AgentsContinueStreamRequest.ts deleted file mode 100644 index f5648052..00000000 --- a/src/api/resources/agents/client/requests/AgentsContinueStreamRequest.ts +++ /dev/null @@ -1,25 +0,0 @@ -/** - * This file was auto-generated by Fern from our API Definition. - */ - -import * as Humanloop from "../../../../index"; - -/** - * @example - * { - * logId: "log_id", - * messages: [{ - * role: "user" - * }] - * } - */ -export interface AgentsContinueStreamRequest { - /** This identifies the Agent Log to continue. */ - logId: string; - /** The additional messages with which to continue the Agent Log. Often, these should start with the Tool messages with results for the previous Assistant message's tool calls. */ - messages: Humanloop.ChatMessage[]; - /** API keys required by each provider to make API calls. The API keys provided here are not stored by Humanloop. If not specified here, Humanloop will fall back to the key saved to your organization. */ - providerApiKeys?: Humanloop.ProviderApiKeys; - /** If true, populate `trace_children` for the returned Agent Log. Defaults to false. */ - includeTraceChildren?: boolean; -} diff --git a/src/api/resources/agents/client/requests/ListAgentsGetRequest.ts b/src/api/resources/agents/client/requests/ListAgentsGetRequest.ts index 2a81c3f7..e74bb986 100644 --- a/src/api/resources/agents/client/requests/ListAgentsGetRequest.ts +++ b/src/api/resources/agents/client/requests/ListAgentsGetRequest.ts @@ -6,9 +6,7 @@ import * as Humanloop from "../../../../index"; /** * @example - * { - * size: 1 - * } + * {} */ export interface ListAgentsGetRequest { /** @@ -30,7 +28,7 @@ export interface ListAgentsGetRequest { /** * Field to sort Agents by */ - sortBy?: Humanloop.ProjectSortBy; + sortBy?: Humanloop.FileSortBy; /** * Direction to sort by. */ diff --git a/src/api/resources/agents/client/requests/UpdateAgentLogRequest.ts b/src/api/resources/agents/client/requests/UpdateAgentLogRequest.ts index d55a2289..fb5d7d07 100644 --- a/src/api/resources/agents/client/requests/UpdateAgentLogRequest.ts +++ b/src/api/resources/agents/client/requests/UpdateAgentLogRequest.ts @@ -6,20 +6,7 @@ import * as Humanloop from "../../../../index"; /** * @example - * { - * messages: [{ - * role: "user", - * content: "I need to withdraw $1000" - * }, { - * role: "assistant", - * content: "Of course! Would you like to use your savings or checking account?" - * }], - * outputMessage: { - * role: "assistant", - * content: "I'm sorry, I can't help with that." - * }, - * logStatus: "complete" - * } + * {} */ export interface UpdateAgentLogRequest { /** List of chat messages that were used as an input to the Flow. */ diff --git a/src/api/resources/agents/client/requests/UpdateAgentRequest.ts b/src/api/resources/agents/client/requests/UpdateAgentRequest.ts index 0363e61c..3606daed 100644 --- a/src/api/resources/agents/client/requests/UpdateAgentRequest.ts +++ b/src/api/resources/agents/client/requests/UpdateAgentRequest.ts @@ -4,9 +4,7 @@ /** * @example - * { - * path: "new directory/new name" - * } + * {} */ export interface UpdateAgentRequest { /** Path of the Flow including the Flow name, which is used as a unique identifier. */ diff --git a/src/api/resources/agents/types/AgentLogRequestAgent.ts b/src/api/resources/agents/types/AgentLogRequestAgent.ts new file mode 100644 index 00000000..05013da2 --- /dev/null +++ b/src/api/resources/agents/types/AgentLogRequestAgent.ts @@ -0,0 +1,13 @@ +/** + * This file was auto-generated by Fern from our API Definition. + */ + +import * as Humanloop from "../../../index"; + +/** + * The Agent configuration to use. Two formats are supported: + * - An object representing the details of the Agent configuration + * - A string representing the raw contents of a .agent file + * A new Agent version will be created if the provided details do not match any existing version. + */ +export type AgentLogRequestAgent = Humanloop.AgentKernelRequest | string; diff --git a/src/api/resources/agents/types/AgentsCallRequestAgent.ts b/src/api/resources/agents/types/AgentsCallRequestAgent.ts new file mode 100644 index 00000000..164f1814 --- /dev/null +++ b/src/api/resources/agents/types/AgentsCallRequestAgent.ts @@ -0,0 +1,13 @@ +/** + * This file was auto-generated by Fern from our API Definition. + */ + +import * as Humanloop from "../../../index"; + +/** + * The Agent configuration to use. Two formats are supported: + * - An object representing the details of the Agent configuration + * - A string representing the raw contents of a .agent file + * A new Agent version will be created if the provided details do not match any existing version. + */ +export type AgentsCallRequestAgent = Humanloop.AgentKernelRequest | string; diff --git a/src/api/resources/agents/types/AgentsCallStreamRequestAgent.ts b/src/api/resources/agents/types/AgentsCallStreamRequestAgent.ts new file mode 100644 index 00000000..86ffc4fc --- /dev/null +++ b/src/api/resources/agents/types/AgentsCallStreamRequestAgent.ts @@ -0,0 +1,13 @@ +/** + * This file was auto-generated by Fern from our API Definition. + */ + +import * as Humanloop from "../../../index"; + +/** + * The Agent configuration to use. Two formats are supported: + * - An object representing the details of the Agent configuration + * - A string representing the raw contents of a .agent file + * A new Agent version will be created if the provided details do not match any existing version. + */ +export type AgentsCallStreamRequestAgent = Humanloop.AgentKernelRequest | string; diff --git a/src/api/resources/agents/types/index.ts b/src/api/resources/agents/types/index.ts index 8a8a004f..1a1043c1 100644 --- a/src/api/resources/agents/types/index.ts +++ b/src/api/resources/agents/types/index.ts @@ -1,6 +1,9 @@ export * from "./AgentLogRequestToolChoice"; +export * from "./AgentLogRequestAgent"; export * from "./AgentsCallStreamRequestToolChoice"; +export * from "./AgentsCallStreamRequestAgent"; export * from "./AgentsCallRequestToolChoice"; +export * from "./AgentsCallRequestAgent"; export * from "./AgentRequestTemplate"; export * from "./AgentRequestStop"; export * from "./AgentRequestReasoningEffort"; diff --git a/src/api/resources/datasets/client/Client.ts b/src/api/resources/datasets/client/Client.ts index cd17b306..140deb82 100644 --- a/src/api/resources/datasets/client/Client.ts +++ b/src/api/resources/datasets/client/Client.ts @@ -89,7 +89,7 @@ export class Datasets { _queryParams["user_filter"] = userFilter; } if (sortBy != null) { - _queryParams["sort_by"] = serializers.ProjectSortBy.jsonOrThrow(sortBy, { + _queryParams["sort_by"] = serializers.FileSortBy.jsonOrThrow(sortBy, { unrecognizedObjectKeys: "strip", }); } @@ -107,8 +107,8 @@ export class Datasets { headers: { "X-Fern-Language": "JavaScript", "X-Fern-SDK-Name": "humanloop", - "X-Fern-SDK-Version": "0.8.21-beta1", - "User-Agent": "humanloop/0.8.21-beta1", + "X-Fern-SDK-Version": "0.8.21", + "User-Agent": "humanloop/0.8.21", "X-Fern-Runtime": core.RUNTIME.type, "X-Fern-Runtime-Version": core.RUNTIME.version, ...(await this._getCustomAuthorizationHeaders()), @@ -275,8 +275,8 @@ export class Datasets { headers: { "X-Fern-Language": "JavaScript", "X-Fern-SDK-Name": "humanloop", - "X-Fern-SDK-Version": "0.8.21-beta1", - "User-Agent": "humanloop/0.8.21-beta1", + "X-Fern-SDK-Version": "0.8.21", + "User-Agent": "humanloop/0.8.21", "X-Fern-Runtime": core.RUNTIME.type, "X-Fern-Runtime-Version": core.RUNTIME.version, ...(await this._getCustomAuthorizationHeaders()), @@ -388,8 +388,8 @@ export class Datasets { headers: { "X-Fern-Language": "JavaScript", "X-Fern-SDK-Name": "humanloop", - "X-Fern-SDK-Version": "0.8.21-beta1", - "User-Agent": "humanloop/0.8.21-beta1", + "X-Fern-SDK-Version": "0.8.21", + "User-Agent": "humanloop/0.8.21", "X-Fern-Runtime": core.RUNTIME.type, "X-Fern-Runtime-Version": core.RUNTIME.version, ...(await this._getCustomAuthorizationHeaders()), @@ -470,8 +470,8 @@ export class Datasets { headers: { "X-Fern-Language": "JavaScript", "X-Fern-SDK-Name": "humanloop", - "X-Fern-SDK-Version": "0.8.21-beta1", - "User-Agent": "humanloop/0.8.21-beta1", + "X-Fern-SDK-Version": "0.8.21", + "User-Agent": "humanloop/0.8.21", "X-Fern-Runtime": core.RUNTIME.type, "X-Fern-Runtime-Version": core.RUNTIME.version, ...(await this._getCustomAuthorizationHeaders()), @@ -550,8 +550,8 @@ export class Datasets { headers: { "X-Fern-Language": "JavaScript", "X-Fern-SDK-Name": "humanloop", - "X-Fern-SDK-Version": "0.8.21-beta1", - "User-Agent": "humanloop/0.8.21-beta1", + "X-Fern-SDK-Version": "0.8.21", + "User-Agent": "humanloop/0.8.21", "X-Fern-Runtime": core.RUNTIME.type, "X-Fern-Runtime-Version": core.RUNTIME.version, ...(await this._getCustomAuthorizationHeaders()), @@ -656,8 +656,8 @@ export class Datasets { headers: { "X-Fern-Language": "JavaScript", "X-Fern-SDK-Name": "humanloop", - "X-Fern-SDK-Version": "0.8.21-beta1", - "User-Agent": "humanloop/0.8.21-beta1", + "X-Fern-SDK-Version": "0.8.21", + "User-Agent": "humanloop/0.8.21", "X-Fern-Runtime": core.RUNTIME.type, "X-Fern-Runtime-Version": core.RUNTIME.version, ...(await this._getCustomAuthorizationHeaders()), @@ -763,8 +763,8 @@ export class Datasets { headers: { "X-Fern-Language": "JavaScript", "X-Fern-SDK-Name": "humanloop", - "X-Fern-SDK-Version": "0.8.21-beta1", - "User-Agent": "humanloop/0.8.21-beta1", + "X-Fern-SDK-Version": "0.8.21", + "User-Agent": "humanloop/0.8.21", "X-Fern-Runtime": core.RUNTIME.type, "X-Fern-Runtime-Version": core.RUNTIME.version, ...(await this._getCustomAuthorizationHeaders()), @@ -850,8 +850,8 @@ export class Datasets { headers: { "X-Fern-Language": "JavaScript", "X-Fern-SDK-Name": "humanloop", - "X-Fern-SDK-Version": "0.8.21-beta1", - "User-Agent": "humanloop/0.8.21-beta1", + "X-Fern-SDK-Version": "0.8.21", + "User-Agent": "humanloop/0.8.21", "X-Fern-Runtime": core.RUNTIME.type, "X-Fern-Runtime-Version": core.RUNTIME.version, ...(await this._getCustomAuthorizationHeaders()), @@ -934,8 +934,8 @@ export class Datasets { headers: { "X-Fern-Language": "JavaScript", "X-Fern-SDK-Name": "humanloop", - "X-Fern-SDK-Version": "0.8.21-beta1", - "User-Agent": "humanloop/0.8.21-beta1", + "X-Fern-SDK-Version": "0.8.21", + "User-Agent": "humanloop/0.8.21", "X-Fern-Runtime": core.RUNTIME.type, "X-Fern-Runtime-Version": core.RUNTIME.version, ...(await this._getCustomAuthorizationHeaders()), @@ -1055,8 +1055,8 @@ export class Datasets { headers: { "X-Fern-Language": "JavaScript", "X-Fern-SDK-Name": "humanloop", - "X-Fern-SDK-Version": "0.8.21-beta1", - "User-Agent": "humanloop/0.8.21-beta1", + "X-Fern-SDK-Version": "0.8.21", + "User-Agent": "humanloop/0.8.21", "X-Fern-Runtime": core.RUNTIME.type, "X-Fern-Runtime-Version": core.RUNTIME.version, ...(await this._getCustomAuthorizationHeaders()), @@ -1155,8 +1155,8 @@ export class Datasets { headers: { "X-Fern-Language": "JavaScript", "X-Fern-SDK-Name": "humanloop", - "X-Fern-SDK-Version": "0.8.21-beta1", - "User-Agent": "humanloop/0.8.21-beta1", + "X-Fern-SDK-Version": "0.8.21", + "User-Agent": "humanloop/0.8.21", "X-Fern-Runtime": core.RUNTIME.type, "X-Fern-Runtime-Version": core.RUNTIME.version, ...(await this._getCustomAuthorizationHeaders()), @@ -1246,8 +1246,8 @@ export class Datasets { headers: { "X-Fern-Language": "JavaScript", "X-Fern-SDK-Name": "humanloop", - "X-Fern-SDK-Version": "0.8.21-beta1", - "User-Agent": "humanloop/0.8.21-beta1", + "X-Fern-SDK-Version": "0.8.21", + "User-Agent": "humanloop/0.8.21", "X-Fern-Runtime": core.RUNTIME.type, "X-Fern-Runtime-Version": core.RUNTIME.version, ...(await this._getCustomAuthorizationHeaders()), @@ -1326,8 +1326,8 @@ export class Datasets { headers: { "X-Fern-Language": "JavaScript", "X-Fern-SDK-Name": "humanloop", - "X-Fern-SDK-Version": "0.8.21-beta1", - "User-Agent": "humanloop/0.8.21-beta1", + "X-Fern-SDK-Version": "0.8.21", + "User-Agent": "humanloop/0.8.21", "X-Fern-Runtime": core.RUNTIME.type, "X-Fern-Runtime-Version": core.RUNTIME.version, ...(await this._getCustomAuthorizationHeaders()), diff --git a/src/api/resources/datasets/client/requests/ListDatasetsGetRequest.ts b/src/api/resources/datasets/client/requests/ListDatasetsGetRequest.ts index c51ad97c..b171bf20 100644 --- a/src/api/resources/datasets/client/requests/ListDatasetsGetRequest.ts +++ b/src/api/resources/datasets/client/requests/ListDatasetsGetRequest.ts @@ -30,7 +30,7 @@ export interface ListDatasetsGetRequest { /** * Field to sort Datasets by */ - sortBy?: Humanloop.ProjectSortBy; + sortBy?: Humanloop.FileSortBy; /** * Direction to sort by. */ diff --git a/src/api/resources/directories/client/Client.ts b/src/api/resources/directories/client/Client.ts index a9e2a6e9..4b587207 100644 --- a/src/api/resources/directories/client/Client.ts +++ b/src/api/resources/directories/client/Client.ts @@ -55,8 +55,8 @@ export class Directories { headers: { "X-Fern-Language": "JavaScript", "X-Fern-SDK-Name": "humanloop", - "X-Fern-SDK-Version": "0.8.21-beta1", - "User-Agent": "humanloop/0.8.21-beta1", + "X-Fern-SDK-Version": "0.8.21", + "User-Agent": "humanloop/0.8.21", "X-Fern-Runtime": core.RUNTIME.type, "X-Fern-Runtime-Version": core.RUNTIME.version, ...(await this._getCustomAuthorizationHeaders()), @@ -139,8 +139,8 @@ export class Directories { headers: { "X-Fern-Language": "JavaScript", "X-Fern-SDK-Name": "humanloop", - "X-Fern-SDK-Version": "0.8.21-beta1", - "User-Agent": "humanloop/0.8.21-beta1", + "X-Fern-SDK-Version": "0.8.21", + "User-Agent": "humanloop/0.8.21", "X-Fern-Runtime": core.RUNTIME.type, "X-Fern-Runtime-Version": core.RUNTIME.version, ...(await this._getCustomAuthorizationHeaders()), @@ -224,8 +224,8 @@ export class Directories { headers: { "X-Fern-Language": "JavaScript", "X-Fern-SDK-Name": "humanloop", - "X-Fern-SDK-Version": "0.8.21-beta1", - "User-Agent": "humanloop/0.8.21-beta1", + "X-Fern-SDK-Version": "0.8.21", + "User-Agent": "humanloop/0.8.21", "X-Fern-Runtime": core.RUNTIME.type, "X-Fern-Runtime-Version": core.RUNTIME.version, ...(await this._getCustomAuthorizationHeaders()), @@ -307,8 +307,8 @@ export class Directories { headers: { "X-Fern-Language": "JavaScript", "X-Fern-SDK-Name": "humanloop", - "X-Fern-SDK-Version": "0.8.21-beta1", - "User-Agent": "humanloop/0.8.21-beta1", + "X-Fern-SDK-Version": "0.8.21", + "User-Agent": "humanloop/0.8.21", "X-Fern-Runtime": core.RUNTIME.type, "X-Fern-Runtime-Version": core.RUNTIME.version, ...(await this._getCustomAuthorizationHeaders()), @@ -387,8 +387,8 @@ export class Directories { headers: { "X-Fern-Language": "JavaScript", "X-Fern-SDK-Name": "humanloop", - "X-Fern-SDK-Version": "0.8.21-beta1", - "User-Agent": "humanloop/0.8.21-beta1", + "X-Fern-SDK-Version": "0.8.21", + "User-Agent": "humanloop/0.8.21", "X-Fern-Runtime": core.RUNTIME.type, "X-Fern-Runtime-Version": core.RUNTIME.version, ...(await this._getCustomAuthorizationHeaders()), diff --git a/src/api/resources/evaluations/client/Client.ts b/src/api/resources/evaluations/client/Client.ts index 93e1d4e1..158e39e2 100644 --- a/src/api/resources/evaluations/client/Client.ts +++ b/src/api/resources/evaluations/client/Client.ts @@ -88,8 +88,8 @@ export class Evaluations { headers: { "X-Fern-Language": "JavaScript", "X-Fern-SDK-Name": "humanloop", - "X-Fern-SDK-Version": "0.8.21-beta1", - "User-Agent": "humanloop/0.8.21-beta1", + "X-Fern-SDK-Version": "0.8.21", + "User-Agent": "humanloop/0.8.21", "X-Fern-Runtime": core.RUNTIME.type, "X-Fern-Runtime-Version": core.RUNTIME.version, ...(await this._getCustomAuthorizationHeaders()), @@ -190,8 +190,8 @@ export class Evaluations { headers: { "X-Fern-Language": "JavaScript", "X-Fern-SDK-Name": "humanloop", - "X-Fern-SDK-Version": "0.8.21-beta1", - "User-Agent": "humanloop/0.8.21-beta1", + "X-Fern-SDK-Version": "0.8.21", + "User-Agent": "humanloop/0.8.21", "X-Fern-Runtime": core.RUNTIME.type, "X-Fern-Runtime-Version": core.RUNTIME.version, ...(await this._getCustomAuthorizationHeaders()), @@ -283,8 +283,8 @@ export class Evaluations { headers: { "X-Fern-Language": "JavaScript", "X-Fern-SDK-Name": "humanloop", - "X-Fern-SDK-Version": "0.8.21-beta1", - "User-Agent": "humanloop/0.8.21-beta1", + "X-Fern-SDK-Version": "0.8.21", + "User-Agent": "humanloop/0.8.21", "X-Fern-Runtime": core.RUNTIME.type, "X-Fern-Runtime-Version": core.RUNTIME.version, ...(await this._getCustomAuthorizationHeaders()), @@ -374,8 +374,8 @@ export class Evaluations { headers: { "X-Fern-Language": "JavaScript", "X-Fern-SDK-Name": "humanloop", - "X-Fern-SDK-Version": "0.8.21-beta1", - "User-Agent": "humanloop/0.8.21-beta1", + "X-Fern-SDK-Version": "0.8.21", + "User-Agent": "humanloop/0.8.21", "X-Fern-Runtime": core.RUNTIME.type, "X-Fern-Runtime-Version": core.RUNTIME.version, ...(await this._getCustomAuthorizationHeaders()), @@ -463,8 +463,8 @@ export class Evaluations { headers: { "X-Fern-Language": "JavaScript", "X-Fern-SDK-Name": "humanloop", - "X-Fern-SDK-Version": "0.8.21-beta1", - "User-Agent": "humanloop/0.8.21-beta1", + "X-Fern-SDK-Version": "0.8.21", + "User-Agent": "humanloop/0.8.21", "X-Fern-Runtime": core.RUNTIME.type, "X-Fern-Runtime-Version": core.RUNTIME.version, ...(await this._getCustomAuthorizationHeaders()), @@ -546,8 +546,8 @@ export class Evaluations { headers: { "X-Fern-Language": "JavaScript", "X-Fern-SDK-Name": "humanloop", - "X-Fern-SDK-Version": "0.8.21-beta1", - "User-Agent": "humanloop/0.8.21-beta1", + "X-Fern-SDK-Version": "0.8.21", + "User-Agent": "humanloop/0.8.21", "X-Fern-Runtime": core.RUNTIME.type, "X-Fern-Runtime-Version": core.RUNTIME.version, ...(await this._getCustomAuthorizationHeaders()), @@ -624,8 +624,8 @@ export class Evaluations { headers: { "X-Fern-Language": "JavaScript", "X-Fern-SDK-Name": "humanloop", - "X-Fern-SDK-Version": "0.8.21-beta1", - "User-Agent": "humanloop/0.8.21-beta1", + "X-Fern-SDK-Version": "0.8.21", + "User-Agent": "humanloop/0.8.21", "X-Fern-Runtime": core.RUNTIME.type, "X-Fern-Runtime-Version": core.RUNTIME.version, ...(await this._getCustomAuthorizationHeaders()), @@ -723,8 +723,8 @@ export class Evaluations { headers: { "X-Fern-Language": "JavaScript", "X-Fern-SDK-Name": "humanloop", - "X-Fern-SDK-Version": "0.8.21-beta1", - "User-Agent": "humanloop/0.8.21-beta1", + "X-Fern-SDK-Version": "0.8.21", + "User-Agent": "humanloop/0.8.21", "X-Fern-Runtime": core.RUNTIME.type, "X-Fern-Runtime-Version": core.RUNTIME.version, ...(await this._getCustomAuthorizationHeaders()), @@ -813,8 +813,8 @@ export class Evaluations { headers: { "X-Fern-Language": "JavaScript", "X-Fern-SDK-Name": "humanloop", - "X-Fern-SDK-Version": "0.8.21-beta1", - "User-Agent": "humanloop/0.8.21-beta1", + "X-Fern-SDK-Version": "0.8.21", + "User-Agent": "humanloop/0.8.21", "X-Fern-Runtime": core.RUNTIME.type, "X-Fern-Runtime-Version": core.RUNTIME.version, ...(await this._getCustomAuthorizationHeaders()), @@ -894,8 +894,8 @@ export class Evaluations { headers: { "X-Fern-Language": "JavaScript", "X-Fern-SDK-Name": "humanloop", - "X-Fern-SDK-Version": "0.8.21-beta1", - "User-Agent": "humanloop/0.8.21-beta1", + "X-Fern-SDK-Version": "0.8.21", + "User-Agent": "humanloop/0.8.21", "X-Fern-Runtime": core.RUNTIME.type, "X-Fern-Runtime-Version": core.RUNTIME.version, ...(await this._getCustomAuthorizationHeaders()), @@ -981,8 +981,8 @@ export class Evaluations { headers: { "X-Fern-Language": "JavaScript", "X-Fern-SDK-Name": "humanloop", - "X-Fern-SDK-Version": "0.8.21-beta1", - "User-Agent": "humanloop/0.8.21-beta1", + "X-Fern-SDK-Version": "0.8.21", + "User-Agent": "humanloop/0.8.21", "X-Fern-Runtime": core.RUNTIME.type, "X-Fern-Runtime-Version": core.RUNTIME.version, ...(await this._getCustomAuthorizationHeaders()), @@ -1074,8 +1074,8 @@ export class Evaluations { headers: { "X-Fern-Language": "JavaScript", "X-Fern-SDK-Name": "humanloop", - "X-Fern-SDK-Version": "0.8.21-beta1", - "User-Agent": "humanloop/0.8.21-beta1", + "X-Fern-SDK-Version": "0.8.21", + "User-Agent": "humanloop/0.8.21", "X-Fern-Runtime": core.RUNTIME.type, "X-Fern-Runtime-Version": core.RUNTIME.version, ...(await this._getCustomAuthorizationHeaders()), @@ -1161,8 +1161,8 @@ export class Evaluations { headers: { "X-Fern-Language": "JavaScript", "X-Fern-SDK-Name": "humanloop", - "X-Fern-SDK-Version": "0.8.21-beta1", - "User-Agent": "humanloop/0.8.21-beta1", + "X-Fern-SDK-Version": "0.8.21", + "User-Agent": "humanloop/0.8.21", "X-Fern-Runtime": core.RUNTIME.type, "X-Fern-Runtime-Version": core.RUNTIME.version, ...(await this._getCustomAuthorizationHeaders()), @@ -1267,8 +1267,8 @@ export class Evaluations { headers: { "X-Fern-Language": "JavaScript", "X-Fern-SDK-Name": "humanloop", - "X-Fern-SDK-Version": "0.8.21-beta1", - "User-Agent": "humanloop/0.8.21-beta1", + "X-Fern-SDK-Version": "0.8.21", + "User-Agent": "humanloop/0.8.21", "X-Fern-Runtime": core.RUNTIME.type, "X-Fern-Runtime-Version": core.RUNTIME.version, ...(await this._getCustomAuthorizationHeaders()), diff --git a/src/api/resources/evaluators/client/Client.ts b/src/api/resources/evaluators/client/Client.ts index c39703a9..4913a258 100644 --- a/src/api/resources/evaluators/client/Client.ts +++ b/src/api/resources/evaluators/client/Client.ts @@ -73,8 +73,8 @@ export class Evaluators { headers: { "X-Fern-Language": "JavaScript", "X-Fern-SDK-Name": "humanloop", - "X-Fern-SDK-Version": "0.8.21-beta1", - "User-Agent": "humanloop/0.8.21-beta1", + "X-Fern-SDK-Version": "0.8.21", + "User-Agent": "humanloop/0.8.21", "X-Fern-Runtime": core.RUNTIME.type, "X-Fern-Runtime-Version": core.RUNTIME.version, ...(await this._getCustomAuthorizationHeaders()), @@ -168,7 +168,7 @@ export class Evaluators { _queryParams["user_filter"] = userFilter; } if (sortBy != null) { - _queryParams["sort_by"] = serializers.ProjectSortBy.jsonOrThrow(sortBy, { + _queryParams["sort_by"] = serializers.FileSortBy.jsonOrThrow(sortBy, { unrecognizedObjectKeys: "strip", }); } @@ -186,8 +186,8 @@ export class Evaluators { headers: { "X-Fern-Language": "JavaScript", "X-Fern-SDK-Name": "humanloop", - "X-Fern-SDK-Version": "0.8.21-beta1", - "User-Agent": "humanloop/0.8.21-beta1", + "X-Fern-SDK-Version": "0.8.21", + "User-Agent": "humanloop/0.8.21", "X-Fern-Runtime": core.RUNTIME.type, "X-Fern-Runtime-Version": core.RUNTIME.version, ...(await this._getCustomAuthorizationHeaders()), @@ -296,8 +296,8 @@ export class Evaluators { headers: { "X-Fern-Language": "JavaScript", "X-Fern-SDK-Name": "humanloop", - "X-Fern-SDK-Version": "0.8.21-beta1", - "User-Agent": "humanloop/0.8.21-beta1", + "X-Fern-SDK-Version": "0.8.21", + "User-Agent": "humanloop/0.8.21", "X-Fern-Runtime": core.RUNTIME.type, "X-Fern-Runtime-Version": core.RUNTIME.version, ...(await this._getCustomAuthorizationHeaders()), @@ -396,8 +396,8 @@ export class Evaluators { headers: { "X-Fern-Language": "JavaScript", "X-Fern-SDK-Name": "humanloop", - "X-Fern-SDK-Version": "0.8.21-beta1", - "User-Agent": "humanloop/0.8.21-beta1", + "X-Fern-SDK-Version": "0.8.21", + "User-Agent": "humanloop/0.8.21", "X-Fern-Runtime": core.RUNTIME.type, "X-Fern-Runtime-Version": core.RUNTIME.version, ...(await this._getCustomAuthorizationHeaders()), @@ -478,8 +478,8 @@ export class Evaluators { headers: { "X-Fern-Language": "JavaScript", "X-Fern-SDK-Name": "humanloop", - "X-Fern-SDK-Version": "0.8.21-beta1", - "User-Agent": "humanloop/0.8.21-beta1", + "X-Fern-SDK-Version": "0.8.21", + "User-Agent": "humanloop/0.8.21", "X-Fern-Runtime": core.RUNTIME.type, "X-Fern-Runtime-Version": core.RUNTIME.version, ...(await this._getCustomAuthorizationHeaders()), @@ -560,8 +560,8 @@ export class Evaluators { headers: { "X-Fern-Language": "JavaScript", "X-Fern-SDK-Name": "humanloop", - "X-Fern-SDK-Version": "0.8.21-beta1", - "User-Agent": "humanloop/0.8.21-beta1", + "X-Fern-SDK-Version": "0.8.21", + "User-Agent": "humanloop/0.8.21", "X-Fern-Runtime": core.RUNTIME.type, "X-Fern-Runtime-Version": core.RUNTIME.version, ...(await this._getCustomAuthorizationHeaders()), @@ -653,8 +653,8 @@ export class Evaluators { headers: { "X-Fern-Language": "JavaScript", "X-Fern-SDK-Name": "humanloop", - "X-Fern-SDK-Version": "0.8.21-beta1", - "User-Agent": "humanloop/0.8.21-beta1", + "X-Fern-SDK-Version": "0.8.21", + "User-Agent": "humanloop/0.8.21", "X-Fern-Runtime": core.RUNTIME.type, "X-Fern-Runtime-Version": core.RUNTIME.version, ...(await this._getCustomAuthorizationHeaders()), @@ -740,8 +740,8 @@ export class Evaluators { headers: { "X-Fern-Language": "JavaScript", "X-Fern-SDK-Name": "humanloop", - "X-Fern-SDK-Version": "0.8.21-beta1", - "User-Agent": "humanloop/0.8.21-beta1", + "X-Fern-SDK-Version": "0.8.21", + "User-Agent": "humanloop/0.8.21", "X-Fern-Runtime": core.RUNTIME.type, "X-Fern-Runtime-Version": core.RUNTIME.version, ...(await this._getCustomAuthorizationHeaders()), @@ -824,8 +824,8 @@ export class Evaluators { headers: { "X-Fern-Language": "JavaScript", "X-Fern-SDK-Name": "humanloop", - "X-Fern-SDK-Version": "0.8.21-beta1", - "User-Agent": "humanloop/0.8.21-beta1", + "X-Fern-SDK-Version": "0.8.21", + "User-Agent": "humanloop/0.8.21", "X-Fern-Runtime": core.RUNTIME.type, "X-Fern-Runtime-Version": core.RUNTIME.version, ...(await this._getCustomAuthorizationHeaders()), @@ -923,8 +923,8 @@ export class Evaluators { headers: { "X-Fern-Language": "JavaScript", "X-Fern-SDK-Name": "humanloop", - "X-Fern-SDK-Version": "0.8.21-beta1", - "User-Agent": "humanloop/0.8.21-beta1", + "X-Fern-SDK-Version": "0.8.21", + "User-Agent": "humanloop/0.8.21", "X-Fern-Runtime": core.RUNTIME.type, "X-Fern-Runtime-Version": core.RUNTIME.version, ...(await this._getCustomAuthorizationHeaders()), @@ -1015,8 +1015,8 @@ export class Evaluators { headers: { "X-Fern-Language": "JavaScript", "X-Fern-SDK-Name": "humanloop", - "X-Fern-SDK-Version": "0.8.21-beta1", - "User-Agent": "humanloop/0.8.21-beta1", + "X-Fern-SDK-Version": "0.8.21", + "User-Agent": "humanloop/0.8.21", "X-Fern-Runtime": core.RUNTIME.type, "X-Fern-Runtime-Version": core.RUNTIME.version, ...(await this._getCustomAuthorizationHeaders()), @@ -1095,8 +1095,8 @@ export class Evaluators { headers: { "X-Fern-Language": "JavaScript", "X-Fern-SDK-Name": "humanloop", - "X-Fern-SDK-Version": "0.8.21-beta1", - "User-Agent": "humanloop/0.8.21-beta1", + "X-Fern-SDK-Version": "0.8.21", + "User-Agent": "humanloop/0.8.21", "X-Fern-Runtime": core.RUNTIME.type, "X-Fern-Runtime-Version": core.RUNTIME.version, ...(await this._getCustomAuthorizationHeaders()), @@ -1186,8 +1186,8 @@ export class Evaluators { headers: { "X-Fern-Language": "JavaScript", "X-Fern-SDK-Name": "humanloop", - "X-Fern-SDK-Version": "0.8.21-beta1", - "User-Agent": "humanloop/0.8.21-beta1", + "X-Fern-SDK-Version": "0.8.21", + "User-Agent": "humanloop/0.8.21", "X-Fern-Runtime": core.RUNTIME.type, "X-Fern-Runtime-Version": core.RUNTIME.version, ...(await this._getCustomAuthorizationHeaders()), diff --git a/src/api/resources/evaluators/client/requests/ListEvaluatorsGetRequest.ts b/src/api/resources/evaluators/client/requests/ListEvaluatorsGetRequest.ts index 676ff433..67c8497e 100644 --- a/src/api/resources/evaluators/client/requests/ListEvaluatorsGetRequest.ts +++ b/src/api/resources/evaluators/client/requests/ListEvaluatorsGetRequest.ts @@ -30,7 +30,7 @@ export interface ListEvaluatorsGetRequest { /** * Field to sort Evaluators by */ - sortBy?: Humanloop.ProjectSortBy; + sortBy?: Humanloop.FileSortBy; /** * Direction to sort by. */ diff --git a/src/api/resources/files/client/Client.ts b/src/api/resources/files/client/Client.ts index 83aa8ff1..d32c1153 100644 --- a/src/api/resources/files/client/Client.ts +++ b/src/api/resources/files/client/Client.ts @@ -48,7 +48,18 @@ export class Files { request: Humanloop.ListFilesFilesGetRequest = {}, requestOptions?: Files.RequestOptions, ): Promise { - const { page, size, name, template, type: type_, environment, sortBy, order } = request; + const { + page, + size, + name, + path, + template, + type: type_, + environment, + sortBy, + order, + includeRawFileContent, + } = request; const _queryParams: Record = {}; if (page != null) { _queryParams["page"] = page.toString(); @@ -62,6 +73,10 @@ export class Files { _queryParams["name"] = name; } + if (path != null) { + _queryParams["path"] = path; + } + if (template != null) { _queryParams["template"] = template.toString(); } @@ -81,15 +96,17 @@ export class Files { } if (sortBy != null) { - _queryParams["sort_by"] = serializers.ProjectSortBy.jsonOrThrow(sortBy, { - unrecognizedObjectKeys: "strip", - }); + _queryParams["sort_by"] = serializers.FileSortBy.jsonOrThrow(sortBy, { unrecognizedObjectKeys: "strip" }); } if (order != null) { _queryParams["order"] = serializers.SortOrder.jsonOrThrow(order, { unrecognizedObjectKeys: "strip" }); } + if (includeRawFileContent != null) { + _queryParams["include_raw_file_content"] = includeRawFileContent.toString(); + } + const _response = await (this._options.fetcher ?? core.fetcher)({ url: urlJoin( (await core.Supplier.get(this._options.baseUrl)) ?? @@ -101,8 +118,8 @@ export class Files { headers: { "X-Fern-Language": "JavaScript", "X-Fern-SDK-Name": "humanloop", - "X-Fern-SDK-Version": "0.8.21-beta1", - "User-Agent": "humanloop/0.8.21-beta1", + "X-Fern-SDK-Version": "0.8.21", + "User-Agent": "humanloop/0.8.21", "X-Fern-Runtime": core.RUNTIME.type, "X-Fern-Runtime-Version": core.RUNTIME.version, ...(await this._getCustomAuthorizationHeaders()), @@ -180,12 +197,16 @@ export class Files { request: Humanloop.BodyRetrieveByPathFilesRetrieveByPathPost, requestOptions?: Files.RequestOptions, ): Promise { - const { environment, ..._body } = request; + const { environment, includeRawFileContent, ..._body } = request; const _queryParams: Record = {}; if (environment != null) { _queryParams["environment"] = environment; } + if (includeRawFileContent != null) { + _queryParams["include_raw_file_content"] = includeRawFileContent.toString(); + } + const _response = await (this._options.fetcher ?? core.fetcher)({ url: urlJoin( (await core.Supplier.get(this._options.baseUrl)) ?? @@ -197,8 +218,8 @@ export class Files { headers: { "X-Fern-Language": "JavaScript", "X-Fern-SDK-Name": "humanloop", - "X-Fern-SDK-Version": "0.8.21-beta1", - "User-Agent": "humanloop/0.8.21-beta1", + "X-Fern-SDK-Version": "0.8.21", + "User-Agent": "humanloop/0.8.21", "X-Fern-Runtime": core.RUNTIME.type, "X-Fern-Runtime-Version": core.RUNTIME.version, ...(await this._getCustomAuthorizationHeaders()), diff --git a/src/api/resources/files/client/requests/BodyRetrieveByPathFilesRetrieveByPathPost.ts b/src/api/resources/files/client/requests/BodyRetrieveByPathFilesRetrieveByPathPost.ts index 7c5c0012..756e769c 100644 --- a/src/api/resources/files/client/requests/BodyRetrieveByPathFilesRetrieveByPathPost.ts +++ b/src/api/resources/files/client/requests/BodyRetrieveByPathFilesRetrieveByPathPost.ts @@ -13,6 +13,10 @@ export interface BodyRetrieveByPathFilesRetrieveByPathPost { * Name of the Environment to retrieve a deployed Version from. */ environment?: string; + /** + * Whether to include the raw file content in the response. Currently only supported for Agents and Prompts. + */ + includeRawFileContent?: boolean; /** Path of the File to retrieve. */ path: string; } diff --git a/src/api/resources/files/client/requests/ListFilesFilesGetRequest.ts b/src/api/resources/files/client/requests/ListFilesFilesGetRequest.ts index 592e4e8b..4fc50bd5 100644 --- a/src/api/resources/files/client/requests/ListFilesFilesGetRequest.ts +++ b/src/api/resources/files/client/requests/ListFilesFilesGetRequest.ts @@ -21,6 +21,10 @@ export interface ListFilesFilesGetRequest { * Case-insensitive filter for file name. */ name?: string; + /** + * Path of the directory to filter for. Returns files in this directory and all its subdirectories. + */ + path?: string; /** * Filter to include only template files. */ @@ -36,9 +40,13 @@ export interface ListFilesFilesGetRequest { /** * Field to sort files by */ - sortBy?: Humanloop.ProjectSortBy; + sortBy?: Humanloop.FileSortBy; /** * Direction to sort by. */ order?: Humanloop.SortOrder; + /** + * Whether to include the raw file content in the response. Currently only supported for Agents and Prompts. + */ + includeRawFileContent?: boolean; } diff --git a/src/api/resources/flows/client/Client.ts b/src/api/resources/flows/client/Client.ts index e548186e..9dbbe18d 100644 --- a/src/api/resources/flows/client/Client.ts +++ b/src/api/resources/flows/client/Client.ts @@ -98,8 +98,8 @@ export class Flows { headers: { "X-Fern-Language": "JavaScript", "X-Fern-SDK-Name": "humanloop", - "X-Fern-SDK-Version": "0.8.21-beta1", - "User-Agent": "humanloop/0.8.21-beta1", + "X-Fern-SDK-Version": "0.8.21", + "User-Agent": "humanloop/0.8.21", "X-Fern-Runtime": core.RUNTIME.type, "X-Fern-Runtime-Version": core.RUNTIME.version, ...(await this._getCustomAuthorizationHeaders()), @@ -198,8 +198,8 @@ export class Flows { headers: { "X-Fern-Language": "JavaScript", "X-Fern-SDK-Name": "humanloop", - "X-Fern-SDK-Version": "0.8.21-beta1", - "User-Agent": "humanloop/0.8.21-beta1", + "X-Fern-SDK-Version": "0.8.21", + "User-Agent": "humanloop/0.8.21", "X-Fern-Runtime": core.RUNTIME.type, "X-Fern-Runtime-Version": core.RUNTIME.version, ...(await this._getCustomAuthorizationHeaders()), @@ -298,8 +298,8 @@ export class Flows { headers: { "X-Fern-Language": "JavaScript", "X-Fern-SDK-Name": "humanloop", - "X-Fern-SDK-Version": "0.8.21-beta1", - "User-Agent": "humanloop/0.8.21-beta1", + "X-Fern-SDK-Version": "0.8.21", + "User-Agent": "humanloop/0.8.21", "X-Fern-Runtime": core.RUNTIME.type, "X-Fern-Runtime-Version": core.RUNTIME.version, ...(await this._getCustomAuthorizationHeaders()), @@ -380,8 +380,8 @@ export class Flows { headers: { "X-Fern-Language": "JavaScript", "X-Fern-SDK-Name": "humanloop", - "X-Fern-SDK-Version": "0.8.21-beta1", - "User-Agent": "humanloop/0.8.21-beta1", + "X-Fern-SDK-Version": "0.8.21", + "User-Agent": "humanloop/0.8.21", "X-Fern-Runtime": core.RUNTIME.type, "X-Fern-Runtime-Version": core.RUNTIME.version, ...(await this._getCustomAuthorizationHeaders()), @@ -462,8 +462,8 @@ export class Flows { headers: { "X-Fern-Language": "JavaScript", "X-Fern-SDK-Name": "humanloop", - "X-Fern-SDK-Version": "0.8.21-beta1", - "User-Agent": "humanloop/0.8.21-beta1", + "X-Fern-SDK-Version": "0.8.21", + "User-Agent": "humanloop/0.8.21", "X-Fern-Runtime": core.RUNTIME.type, "X-Fern-Runtime-Version": core.RUNTIME.version, ...(await this._getCustomAuthorizationHeaders()), @@ -554,7 +554,7 @@ export class Flows { _queryParams["user_filter"] = userFilter; } if (sortBy != null) { - _queryParams["sort_by"] = serializers.ProjectSortBy.jsonOrThrow(sortBy, { + _queryParams["sort_by"] = serializers.FileSortBy.jsonOrThrow(sortBy, { unrecognizedObjectKeys: "strip", }); } @@ -572,8 +572,8 @@ export class Flows { headers: { "X-Fern-Language": "JavaScript", "X-Fern-SDK-Name": "humanloop", - "X-Fern-SDK-Version": "0.8.21-beta1", - "User-Agent": "humanloop/0.8.21-beta1", + "X-Fern-SDK-Version": "0.8.21", + "User-Agent": "humanloop/0.8.21", "X-Fern-Runtime": core.RUNTIME.type, "X-Fern-Runtime-Version": core.RUNTIME.version, ...(await this._getCustomAuthorizationHeaders()), @@ -688,8 +688,8 @@ export class Flows { headers: { "X-Fern-Language": "JavaScript", "X-Fern-SDK-Name": "humanloop", - "X-Fern-SDK-Version": "0.8.21-beta1", - "User-Agent": "humanloop/0.8.21-beta1", + "X-Fern-SDK-Version": "0.8.21", + "User-Agent": "humanloop/0.8.21", "X-Fern-Runtime": core.RUNTIME.type, "X-Fern-Runtime-Version": core.RUNTIME.version, ...(await this._getCustomAuthorizationHeaders()), @@ -781,8 +781,8 @@ export class Flows { headers: { "X-Fern-Language": "JavaScript", "X-Fern-SDK-Name": "humanloop", - "X-Fern-SDK-Version": "0.8.21-beta1", - "User-Agent": "humanloop/0.8.21-beta1", + "X-Fern-SDK-Version": "0.8.21", + "User-Agent": "humanloop/0.8.21", "X-Fern-Runtime": core.RUNTIME.type, "X-Fern-Runtime-Version": core.RUNTIME.version, ...(await this._getCustomAuthorizationHeaders()), @@ -868,8 +868,8 @@ export class Flows { headers: { "X-Fern-Language": "JavaScript", "X-Fern-SDK-Name": "humanloop", - "X-Fern-SDK-Version": "0.8.21-beta1", - "User-Agent": "humanloop/0.8.21-beta1", + "X-Fern-SDK-Version": "0.8.21", + "User-Agent": "humanloop/0.8.21", "X-Fern-Runtime": core.RUNTIME.type, "X-Fern-Runtime-Version": core.RUNTIME.version, ...(await this._getCustomAuthorizationHeaders()), @@ -952,8 +952,8 @@ export class Flows { headers: { "X-Fern-Language": "JavaScript", "X-Fern-SDK-Name": "humanloop", - "X-Fern-SDK-Version": "0.8.21-beta1", - "User-Agent": "humanloop/0.8.21-beta1", + "X-Fern-SDK-Version": "0.8.21", + "User-Agent": "humanloop/0.8.21", "X-Fern-Runtime": core.RUNTIME.type, "X-Fern-Runtime-Version": core.RUNTIME.version, ...(await this._getCustomAuthorizationHeaders()), @@ -1051,8 +1051,8 @@ export class Flows { headers: { "X-Fern-Language": "JavaScript", "X-Fern-SDK-Name": "humanloop", - "X-Fern-SDK-Version": "0.8.21-beta1", - "User-Agent": "humanloop/0.8.21-beta1", + "X-Fern-SDK-Version": "0.8.21", + "User-Agent": "humanloop/0.8.21", "X-Fern-Runtime": core.RUNTIME.type, "X-Fern-Runtime-Version": core.RUNTIME.version, ...(await this._getCustomAuthorizationHeaders()), @@ -1143,8 +1143,8 @@ export class Flows { headers: { "X-Fern-Language": "JavaScript", "X-Fern-SDK-Name": "humanloop", - "X-Fern-SDK-Version": "0.8.21-beta1", - "User-Agent": "humanloop/0.8.21-beta1", + "X-Fern-SDK-Version": "0.8.21", + "User-Agent": "humanloop/0.8.21", "X-Fern-Runtime": core.RUNTIME.type, "X-Fern-Runtime-Version": core.RUNTIME.version, ...(await this._getCustomAuthorizationHeaders()), @@ -1223,8 +1223,8 @@ export class Flows { headers: { "X-Fern-Language": "JavaScript", "X-Fern-SDK-Name": "humanloop", - "X-Fern-SDK-Version": "0.8.21-beta1", - "User-Agent": "humanloop/0.8.21-beta1", + "X-Fern-SDK-Version": "0.8.21", + "User-Agent": "humanloop/0.8.21", "X-Fern-Runtime": core.RUNTIME.type, "X-Fern-Runtime-Version": core.RUNTIME.version, ...(await this._getCustomAuthorizationHeaders()), @@ -1316,8 +1316,8 @@ export class Flows { headers: { "X-Fern-Language": "JavaScript", "X-Fern-SDK-Name": "humanloop", - "X-Fern-SDK-Version": "0.8.21-beta1", - "User-Agent": "humanloop/0.8.21-beta1", + "X-Fern-SDK-Version": "0.8.21", + "User-Agent": "humanloop/0.8.21", "X-Fern-Runtime": core.RUNTIME.type, "X-Fern-Runtime-Version": core.RUNTIME.version, ...(await this._getCustomAuthorizationHeaders()), diff --git a/src/api/resources/flows/client/requests/ListFlowsGetRequest.ts b/src/api/resources/flows/client/requests/ListFlowsGetRequest.ts index e7a219a6..3f93e86e 100644 --- a/src/api/resources/flows/client/requests/ListFlowsGetRequest.ts +++ b/src/api/resources/flows/client/requests/ListFlowsGetRequest.ts @@ -30,7 +30,7 @@ export interface ListFlowsGetRequest { /** * Field to sort Flows by */ - sortBy?: Humanloop.ProjectSortBy; + sortBy?: Humanloop.FileSortBy; /** * Direction to sort by. */ diff --git a/src/api/resources/logs/client/Client.ts b/src/api/resources/logs/client/Client.ts index e8e0dcb3..e0aa3aa5 100644 --- a/src/api/resources/logs/client/Client.ts +++ b/src/api/resources/logs/client/Client.ts @@ -136,8 +136,8 @@ export class Logs { headers: { "X-Fern-Language": "JavaScript", "X-Fern-SDK-Name": "humanloop", - "X-Fern-SDK-Version": "0.8.21-beta1", - "User-Agent": "humanloop/0.8.21-beta1", + "X-Fern-SDK-Version": "0.8.21", + "User-Agent": "humanloop/0.8.21", "X-Fern-Runtime": core.RUNTIME.type, "X-Fern-Runtime-Version": core.RUNTIME.version, ...(await this._getCustomAuthorizationHeaders()), @@ -242,8 +242,8 @@ export class Logs { headers: { "X-Fern-Language": "JavaScript", "X-Fern-SDK-Name": "humanloop", - "X-Fern-SDK-Version": "0.8.21-beta1", - "User-Agent": "humanloop/0.8.21-beta1", + "X-Fern-SDK-Version": "0.8.21", + "User-Agent": "humanloop/0.8.21", "X-Fern-Runtime": core.RUNTIME.type, "X-Fern-Runtime-Version": core.RUNTIME.version, ...(await this._getCustomAuthorizationHeaders()), @@ -318,8 +318,8 @@ export class Logs { headers: { "X-Fern-Language": "JavaScript", "X-Fern-SDK-Name": "humanloop", - "X-Fern-SDK-Version": "0.8.21-beta1", - "User-Agent": "humanloop/0.8.21-beta1", + "X-Fern-SDK-Version": "0.8.21", + "User-Agent": "humanloop/0.8.21", "X-Fern-Runtime": core.RUNTIME.type, "X-Fern-Runtime-Version": core.RUNTIME.version, ...(await this._getCustomAuthorizationHeaders()), diff --git a/src/api/resources/prompts/client/Client.ts b/src/api/resources/prompts/client/Client.ts index 9541f43a..1bb67cbe 100644 --- a/src/api/resources/prompts/client/Client.ts +++ b/src/api/resources/prompts/client/Client.ts @@ -129,8 +129,8 @@ export class Prompts { headers: { "X-Fern-Language": "JavaScript", "X-Fern-SDK-Name": "humanloop", - "X-Fern-SDK-Version": "0.8.21-beta1", - "User-Agent": "humanloop/0.8.21-beta1", + "X-Fern-SDK-Version": "0.8.21", + "User-Agent": "humanloop/0.8.21", "X-Fern-Runtime": core.RUNTIME.type, "X-Fern-Runtime-Version": core.RUNTIME.version, ...(await this._getCustomAuthorizationHeaders()), @@ -221,8 +221,8 @@ export class Prompts { headers: { "X-Fern-Language": "JavaScript", "X-Fern-SDK-Name": "humanloop", - "X-Fern-SDK-Version": "0.8.21-beta1", - "User-Agent": "humanloop/0.8.21-beta1", + "X-Fern-SDK-Version": "0.8.21", + "User-Agent": "humanloop/0.8.21", "X-Fern-Runtime": core.RUNTIME.type, "X-Fern-Runtime-Version": core.RUNTIME.version, ...(await this._getCustomAuthorizationHeaders()), @@ -321,8 +321,8 @@ export class Prompts { headers: { "X-Fern-Language": "JavaScript", "X-Fern-SDK-Name": "humanloop", - "X-Fern-SDK-Version": "0.8.21-beta1", - "User-Agent": "humanloop/0.8.21-beta1", + "X-Fern-SDK-Version": "0.8.21", + "User-Agent": "humanloop/0.8.21", "X-Fern-Runtime": core.RUNTIME.type, "X-Fern-Runtime-Version": core.RUNTIME.version, ...(await this._getCustomAuthorizationHeaders()), @@ -502,8 +502,8 @@ export class Prompts { headers: { "X-Fern-Language": "JavaScript", "X-Fern-SDK-Name": "humanloop", - "X-Fern-SDK-Version": "0.8.21-beta1", - "User-Agent": "humanloop/0.8.21-beta1", + "X-Fern-SDK-Version": "0.8.21", + "User-Agent": "humanloop/0.8.21", "X-Fern-Runtime": core.RUNTIME.type, "X-Fern-Runtime-Version": core.RUNTIME.version, ...(await this._getCustomAuthorizationHeaders()), @@ -600,7 +600,7 @@ export class Prompts { _queryParams["user_filter"] = userFilter; } if (sortBy != null) { - _queryParams["sort_by"] = serializers.ProjectSortBy.jsonOrThrow(sortBy, { + _queryParams["sort_by"] = serializers.FileSortBy.jsonOrThrow(sortBy, { unrecognizedObjectKeys: "strip", }); } @@ -618,8 +618,8 @@ export class Prompts { headers: { "X-Fern-Language": "JavaScript", "X-Fern-SDK-Name": "humanloop", - "X-Fern-SDK-Version": "0.8.21-beta1", - "User-Agent": "humanloop/0.8.21-beta1", + "X-Fern-SDK-Version": "0.8.21", + "User-Agent": "humanloop/0.8.21", "X-Fern-Runtime": core.RUNTIME.type, "X-Fern-Runtime-Version": core.RUNTIME.version, ...(await this._getCustomAuthorizationHeaders()), @@ -731,8 +731,8 @@ export class Prompts { headers: { "X-Fern-Language": "JavaScript", "X-Fern-SDK-Name": "humanloop", - "X-Fern-SDK-Version": "0.8.21-beta1", - "User-Agent": "humanloop/0.8.21-beta1", + "X-Fern-SDK-Version": "0.8.21", + "User-Agent": "humanloop/0.8.21", "X-Fern-Runtime": core.RUNTIME.type, "X-Fern-Runtime-Version": core.RUNTIME.version, ...(await this._getCustomAuthorizationHeaders()), @@ -831,8 +831,8 @@ export class Prompts { headers: { "X-Fern-Language": "JavaScript", "X-Fern-SDK-Name": "humanloop", - "X-Fern-SDK-Version": "0.8.21-beta1", - "User-Agent": "humanloop/0.8.21-beta1", + "X-Fern-SDK-Version": "0.8.21", + "User-Agent": "humanloop/0.8.21", "X-Fern-Runtime": core.RUNTIME.type, "X-Fern-Runtime-Version": core.RUNTIME.version, ...(await this._getCustomAuthorizationHeaders()), @@ -913,8 +913,8 @@ export class Prompts { headers: { "X-Fern-Language": "JavaScript", "X-Fern-SDK-Name": "humanloop", - "X-Fern-SDK-Version": "0.8.21-beta1", - "User-Agent": "humanloop/0.8.21-beta1", + "X-Fern-SDK-Version": "0.8.21", + "User-Agent": "humanloop/0.8.21", "X-Fern-Runtime": core.RUNTIME.type, "X-Fern-Runtime-Version": core.RUNTIME.version, ...(await this._getCustomAuthorizationHeaders()), @@ -995,8 +995,8 @@ export class Prompts { headers: { "X-Fern-Language": "JavaScript", "X-Fern-SDK-Name": "humanloop", - "X-Fern-SDK-Version": "0.8.21-beta1", - "User-Agent": "humanloop/0.8.21-beta1", + "X-Fern-SDK-Version": "0.8.21", + "User-Agent": "humanloop/0.8.21", "X-Fern-Runtime": core.RUNTIME.type, "X-Fern-Runtime-Version": core.RUNTIME.version, ...(await this._getCustomAuthorizationHeaders()), @@ -1099,8 +1099,8 @@ export class Prompts { headers: { "X-Fern-Language": "JavaScript", "X-Fern-SDK-Name": "humanloop", - "X-Fern-SDK-Version": "0.8.21-beta1", - "User-Agent": "humanloop/0.8.21-beta1", + "X-Fern-SDK-Version": "0.8.21", + "User-Agent": "humanloop/0.8.21", "X-Fern-Runtime": core.RUNTIME.type, "X-Fern-Runtime-Version": core.RUNTIME.version, ...(await this._getCustomAuthorizationHeaders()), @@ -1193,8 +1193,8 @@ export class Prompts { headers: { "X-Fern-Language": "JavaScript", "X-Fern-SDK-Name": "humanloop", - "X-Fern-SDK-Version": "0.8.21-beta1", - "User-Agent": "humanloop/0.8.21-beta1", + "X-Fern-SDK-Version": "0.8.21", + "User-Agent": "humanloop/0.8.21", "X-Fern-Runtime": core.RUNTIME.type, "X-Fern-Runtime-Version": core.RUNTIME.version, ...(await this._getCustomAuthorizationHeaders()), @@ -1280,8 +1280,8 @@ export class Prompts { headers: { "X-Fern-Language": "JavaScript", "X-Fern-SDK-Name": "humanloop", - "X-Fern-SDK-Version": "0.8.21-beta1", - "User-Agent": "humanloop/0.8.21-beta1", + "X-Fern-SDK-Version": "0.8.21", + "User-Agent": "humanloop/0.8.21", "X-Fern-Runtime": core.RUNTIME.type, "X-Fern-Runtime-Version": core.RUNTIME.version, ...(await this._getCustomAuthorizationHeaders()), @@ -1364,8 +1364,8 @@ export class Prompts { headers: { "X-Fern-Language": "JavaScript", "X-Fern-SDK-Name": "humanloop", - "X-Fern-SDK-Version": "0.8.21-beta1", - "User-Agent": "humanloop/0.8.21-beta1", + "X-Fern-SDK-Version": "0.8.21", + "User-Agent": "humanloop/0.8.21", "X-Fern-Runtime": core.RUNTIME.type, "X-Fern-Runtime-Version": core.RUNTIME.version, ...(await this._getCustomAuthorizationHeaders()), @@ -1463,8 +1463,8 @@ export class Prompts { headers: { "X-Fern-Language": "JavaScript", "X-Fern-SDK-Name": "humanloop", - "X-Fern-SDK-Version": "0.8.21-beta1", - "User-Agent": "humanloop/0.8.21-beta1", + "X-Fern-SDK-Version": "0.8.21", + "User-Agent": "humanloop/0.8.21", "X-Fern-Runtime": core.RUNTIME.type, "X-Fern-Runtime-Version": core.RUNTIME.version, ...(await this._getCustomAuthorizationHeaders()), @@ -1555,8 +1555,8 @@ export class Prompts { headers: { "X-Fern-Language": "JavaScript", "X-Fern-SDK-Name": "humanloop", - "X-Fern-SDK-Version": "0.8.21-beta1", - "User-Agent": "humanloop/0.8.21-beta1", + "X-Fern-SDK-Version": "0.8.21", + "User-Agent": "humanloop/0.8.21", "X-Fern-Runtime": core.RUNTIME.type, "X-Fern-Runtime-Version": core.RUNTIME.version, ...(await this._getCustomAuthorizationHeaders()), @@ -1635,8 +1635,8 @@ export class Prompts { headers: { "X-Fern-Language": "JavaScript", "X-Fern-SDK-Name": "humanloop", - "X-Fern-SDK-Version": "0.8.21-beta1", - "User-Agent": "humanloop/0.8.21-beta1", + "X-Fern-SDK-Version": "0.8.21", + "User-Agent": "humanloop/0.8.21", "X-Fern-Runtime": core.RUNTIME.type, "X-Fern-Runtime-Version": core.RUNTIME.version, ...(await this._getCustomAuthorizationHeaders()), @@ -1728,8 +1728,8 @@ export class Prompts { headers: { "X-Fern-Language": "JavaScript", "X-Fern-SDK-Name": "humanloop", - "X-Fern-SDK-Version": "0.8.21-beta1", - "User-Agent": "humanloop/0.8.21-beta1", + "X-Fern-SDK-Version": "0.8.21", + "User-Agent": "humanloop/0.8.21", "X-Fern-Runtime": core.RUNTIME.type, "X-Fern-Runtime-Version": core.RUNTIME.version, ...(await this._getCustomAuthorizationHeaders()), @@ -1811,7 +1811,7 @@ export class Prompts { id: string, request: Humanloop.SerializePromptsIdSerializeGetRequest = {}, requestOptions?: Prompts.RequestOptions, - ): Promise { + ): Promise { const { versionId, environment } = request; const _queryParams: Record = {}; if (versionId != null) { @@ -1833,8 +1833,8 @@ export class Prompts { headers: { "X-Fern-Language": "JavaScript", "X-Fern-SDK-Name": "humanloop", - "X-Fern-SDK-Version": "0.8.21-beta1", - "User-Agent": "humanloop/0.8.21-beta1", + "X-Fern-SDK-Version": "0.8.21", + "User-Agent": "humanloop/0.8.21", "X-Fern-Runtime": core.RUNTIME.type, "X-Fern-Runtime-Version": core.RUNTIME.version, ...(await this._getCustomAuthorizationHeaders()), @@ -1843,12 +1843,13 @@ export class Prompts { contentType: "application/json", queryParameters: _queryParams, requestType: "json", + responseType: "text", timeoutMs: requestOptions?.timeoutInSeconds != null ? requestOptions.timeoutInSeconds * 1000 : 60000, maxRetries: requestOptions?.maxRetries, abortSignal: requestOptions?.abortSignal, }); if (_response.ok) { - return _response.body; + return _response.body as string; } if (_response.error.reason === "status-code") { @@ -1917,8 +1918,8 @@ export class Prompts { headers: { "X-Fern-Language": "JavaScript", "X-Fern-SDK-Name": "humanloop", - "X-Fern-SDK-Version": "0.8.21-beta1", - "User-Agent": "humanloop/0.8.21-beta1", + "X-Fern-SDK-Version": "0.8.21", + "User-Agent": "humanloop/0.8.21", "X-Fern-Runtime": core.RUNTIME.type, "X-Fern-Runtime-Version": core.RUNTIME.version, ...(await this._getCustomAuthorizationHeaders()), diff --git a/src/api/resources/prompts/client/requests/ListPromptsGetRequest.ts b/src/api/resources/prompts/client/requests/ListPromptsGetRequest.ts index 0344a789..f681b09d 100644 --- a/src/api/resources/prompts/client/requests/ListPromptsGetRequest.ts +++ b/src/api/resources/prompts/client/requests/ListPromptsGetRequest.ts @@ -30,7 +30,7 @@ export interface ListPromptsGetRequest { /** * Field to sort Prompts by */ - sortBy?: Humanloop.ProjectSortBy; + sortBy?: Humanloop.FileSortBy; /** * Direction to sort by. */ diff --git a/src/api/resources/prompts/client/requests/PromptLogRequest.ts b/src/api/resources/prompts/client/requests/PromptLogRequest.ts index 45a47afd..ab653a25 100644 --- a/src/api/resources/prompts/client/requests/PromptLogRequest.ts +++ b/src/api/resources/prompts/client/requests/PromptLogRequest.ts @@ -75,8 +75,13 @@ export interface PromptLogRequest { * - `{'type': 'function', 'function': {name': }}` forces the model to use the named function. */ toolChoice?: Humanloop.PromptLogRequestToolChoice; - /** Details of your Prompt. A new Prompt version will be created if the provided details are new. */ - prompt?: Humanloop.PromptKernelRequest; + /** + * The Prompt configuration to use. Two formats are supported: + * - An object representing the details of the Prompt configuration + * - A string representing the raw contents of a .prompt file + * A new Prompt version will be created if the provided details do not match any existing version. + */ + prompt?: Humanloop.PromptLogRequestPrompt; /** When the logged event started. */ startTime?: Date; /** When the logged event ended. */ diff --git a/src/api/resources/prompts/client/requests/PromptsCallRequest.ts b/src/api/resources/prompts/client/requests/PromptsCallRequest.ts index 4e1595fc..5f516743 100644 --- a/src/api/resources/prompts/client/requests/PromptsCallRequest.ts +++ b/src/api/resources/prompts/client/requests/PromptsCallRequest.ts @@ -91,8 +91,13 @@ export interface PromptsCallRequest { * - `{'type': 'function', 'function': {name': }}` forces the model to use the named function. */ toolChoice?: Humanloop.PromptsCallRequestToolChoice; - /** Details of your Prompt. A new Prompt version will be created if the provided details are new. */ - prompt?: Humanloop.PromptKernelRequest; + /** + * The Prompt configuration to use. Two formats are supported: + * - An object representing the details of the Prompt configuration + * - A string representing the raw contents of a .prompt file + * A new Prompt version will be created if the provided details do not match any existing version. + */ + prompt?: Humanloop.PromptsCallRequestPrompt; /** The inputs passed to the prompt template. */ inputs?: Record; /** Identifies where the model was called from. */ diff --git a/src/api/resources/prompts/client/requests/PromptsCallStreamRequest.ts b/src/api/resources/prompts/client/requests/PromptsCallStreamRequest.ts index b444e68c..c069dd08 100644 --- a/src/api/resources/prompts/client/requests/PromptsCallStreamRequest.ts +++ b/src/api/resources/prompts/client/requests/PromptsCallStreamRequest.ts @@ -31,8 +31,13 @@ export interface PromptsCallStreamRequest { * - `{'type': 'function', 'function': {name': }}` forces the model to use the named function. */ toolChoice?: Humanloop.PromptsCallStreamRequestToolChoice; - /** Details of your Prompt. A new Prompt version will be created if the provided details are new. */ - prompt?: Humanloop.PromptKernelRequest; + /** + * The Prompt configuration to use. Two formats are supported: + * - An object representing the details of the Prompt configuration + * - A string representing the raw contents of a .prompt file + * A new Prompt version will be created if the provided details do not match any existing version. + */ + prompt?: Humanloop.PromptsCallStreamRequestPrompt; /** The inputs passed to the prompt template. */ inputs?: Record; /** Identifies where the model was called from. */ diff --git a/src/api/resources/prompts/types/PromptLogRequestPrompt.ts b/src/api/resources/prompts/types/PromptLogRequestPrompt.ts new file mode 100644 index 00000000..5c8fe6a8 --- /dev/null +++ b/src/api/resources/prompts/types/PromptLogRequestPrompt.ts @@ -0,0 +1,13 @@ +/** + * This file was auto-generated by Fern from our API Definition. + */ + +import * as Humanloop from "../../../index"; + +/** + * The Prompt configuration to use. Two formats are supported: + * - An object representing the details of the Prompt configuration + * - A string representing the raw contents of a .prompt file + * A new Prompt version will be created if the provided details do not match any existing version. + */ +export type PromptLogRequestPrompt = Humanloop.PromptKernelRequest | string; diff --git a/src/api/resources/prompts/types/PromptsCallRequestPrompt.ts b/src/api/resources/prompts/types/PromptsCallRequestPrompt.ts new file mode 100644 index 00000000..c94ade87 --- /dev/null +++ b/src/api/resources/prompts/types/PromptsCallRequestPrompt.ts @@ -0,0 +1,13 @@ +/** + * This file was auto-generated by Fern from our API Definition. + */ + +import * as Humanloop from "../../../index"; + +/** + * The Prompt configuration to use. Two formats are supported: + * - An object representing the details of the Prompt configuration + * - A string representing the raw contents of a .prompt file + * A new Prompt version will be created if the provided details do not match any existing version. + */ +export type PromptsCallRequestPrompt = Humanloop.PromptKernelRequest | string; diff --git a/src/api/resources/prompts/types/PromptsCallStreamRequestPrompt.ts b/src/api/resources/prompts/types/PromptsCallStreamRequestPrompt.ts new file mode 100644 index 00000000..1dee1331 --- /dev/null +++ b/src/api/resources/prompts/types/PromptsCallStreamRequestPrompt.ts @@ -0,0 +1,13 @@ +/** + * This file was auto-generated by Fern from our API Definition. + */ + +import * as Humanloop from "../../../index"; + +/** + * The Prompt configuration to use. Two formats are supported: + * - An object representing the details of the Prompt configuration + * - A string representing the raw contents of a .prompt file + * A new Prompt version will be created if the provided details do not match any existing version. + */ +export type PromptsCallStreamRequestPrompt = Humanloop.PromptKernelRequest | string; diff --git a/src/api/resources/prompts/types/index.ts b/src/api/resources/prompts/types/index.ts index 8265b2f3..f8045c03 100644 --- a/src/api/resources/prompts/types/index.ts +++ b/src/api/resources/prompts/types/index.ts @@ -1,7 +1,10 @@ export * from "./PromptLogRequestToolChoice"; +export * from "./PromptLogRequestPrompt"; export * from "./PromptLogUpdateRequestToolChoice"; export * from "./PromptsCallStreamRequestToolChoice"; +export * from "./PromptsCallStreamRequestPrompt"; export * from "./PromptsCallRequestToolChoice"; +export * from "./PromptsCallRequestPrompt"; export * from "./PromptRequestTemplate"; export * from "./PromptRequestStop"; export * from "./PromptRequestReasoningEffort"; diff --git a/src/api/resources/tools/client/Client.ts b/src/api/resources/tools/client/Client.ts index c5a81fb5..53f63ace 100644 --- a/src/api/resources/tools/client/Client.ts +++ b/src/api/resources/tools/client/Client.ts @@ -79,8 +79,8 @@ export class Tools { headers: { "X-Fern-Language": "JavaScript", "X-Fern-SDK-Name": "humanloop", - "X-Fern-SDK-Version": "0.8.21-beta1", - "User-Agent": "humanloop/0.8.21-beta1", + "X-Fern-SDK-Version": "0.8.21", + "User-Agent": "humanloop/0.8.21", "X-Fern-Runtime": core.RUNTIME.type, "X-Fern-Runtime-Version": core.RUNTIME.version, ...(await this._getCustomAuthorizationHeaders()), @@ -211,8 +211,8 @@ export class Tools { headers: { "X-Fern-Language": "JavaScript", "X-Fern-SDK-Name": "humanloop", - "X-Fern-SDK-Version": "0.8.21-beta1", - "User-Agent": "humanloop/0.8.21-beta1", + "X-Fern-SDK-Version": "0.8.21", + "User-Agent": "humanloop/0.8.21", "X-Fern-Runtime": core.RUNTIME.type, "X-Fern-Runtime-Version": core.RUNTIME.version, ...(await this._getCustomAuthorizationHeaders()), @@ -303,8 +303,8 @@ export class Tools { headers: { "X-Fern-Language": "JavaScript", "X-Fern-SDK-Name": "humanloop", - "X-Fern-SDK-Version": "0.8.21-beta1", - "User-Agent": "humanloop/0.8.21-beta1", + "X-Fern-SDK-Version": "0.8.21", + "User-Agent": "humanloop/0.8.21", "X-Fern-Runtime": core.RUNTIME.type, "X-Fern-Runtime-Version": core.RUNTIME.version, ...(await this._getCustomAuthorizationHeaders()), @@ -395,7 +395,7 @@ export class Tools { _queryParams["user_filter"] = userFilter; } if (sortBy != null) { - _queryParams["sort_by"] = serializers.ProjectSortBy.jsonOrThrow(sortBy, { + _queryParams["sort_by"] = serializers.FileSortBy.jsonOrThrow(sortBy, { unrecognizedObjectKeys: "strip", }); } @@ -413,8 +413,8 @@ export class Tools { headers: { "X-Fern-Language": "JavaScript", "X-Fern-SDK-Name": "humanloop", - "X-Fern-SDK-Version": "0.8.21-beta1", - "User-Agent": "humanloop/0.8.21-beta1", + "X-Fern-SDK-Version": "0.8.21", + "User-Agent": "humanloop/0.8.21", "X-Fern-Runtime": core.RUNTIME.type, "X-Fern-Runtime-Version": core.RUNTIME.version, ...(await this._getCustomAuthorizationHeaders()), @@ -536,8 +536,8 @@ export class Tools { headers: { "X-Fern-Language": "JavaScript", "X-Fern-SDK-Name": "humanloop", - "X-Fern-SDK-Version": "0.8.21-beta1", - "User-Agent": "humanloop/0.8.21-beta1", + "X-Fern-SDK-Version": "0.8.21", + "User-Agent": "humanloop/0.8.21", "X-Fern-Runtime": core.RUNTIME.type, "X-Fern-Runtime-Version": core.RUNTIME.version, ...(await this._getCustomAuthorizationHeaders()), @@ -636,8 +636,8 @@ export class Tools { headers: { "X-Fern-Language": "JavaScript", "X-Fern-SDK-Name": "humanloop", - "X-Fern-SDK-Version": "0.8.21-beta1", - "User-Agent": "humanloop/0.8.21-beta1", + "X-Fern-SDK-Version": "0.8.21", + "User-Agent": "humanloop/0.8.21", "X-Fern-Runtime": core.RUNTIME.type, "X-Fern-Runtime-Version": core.RUNTIME.version, ...(await this._getCustomAuthorizationHeaders()), @@ -718,8 +718,8 @@ export class Tools { headers: { "X-Fern-Language": "JavaScript", "X-Fern-SDK-Name": "humanloop", - "X-Fern-SDK-Version": "0.8.21-beta1", - "User-Agent": "humanloop/0.8.21-beta1", + "X-Fern-SDK-Version": "0.8.21", + "User-Agent": "humanloop/0.8.21", "X-Fern-Runtime": core.RUNTIME.type, "X-Fern-Runtime-Version": core.RUNTIME.version, ...(await this._getCustomAuthorizationHeaders()), @@ -800,8 +800,8 @@ export class Tools { headers: { "X-Fern-Language": "JavaScript", "X-Fern-SDK-Name": "humanloop", - "X-Fern-SDK-Version": "0.8.21-beta1", - "User-Agent": "humanloop/0.8.21-beta1", + "X-Fern-SDK-Version": "0.8.21", + "User-Agent": "humanloop/0.8.21", "X-Fern-Runtime": core.RUNTIME.type, "X-Fern-Runtime-Version": core.RUNTIME.version, ...(await this._getCustomAuthorizationHeaders()), @@ -893,8 +893,8 @@ export class Tools { headers: { "X-Fern-Language": "JavaScript", "X-Fern-SDK-Name": "humanloop", - "X-Fern-SDK-Version": "0.8.21-beta1", - "User-Agent": "humanloop/0.8.21-beta1", + "X-Fern-SDK-Version": "0.8.21", + "User-Agent": "humanloop/0.8.21", "X-Fern-Runtime": core.RUNTIME.type, "X-Fern-Runtime-Version": core.RUNTIME.version, ...(await this._getCustomAuthorizationHeaders()), @@ -980,8 +980,8 @@ export class Tools { headers: { "X-Fern-Language": "JavaScript", "X-Fern-SDK-Name": "humanloop", - "X-Fern-SDK-Version": "0.8.21-beta1", - "User-Agent": "humanloop/0.8.21-beta1", + "X-Fern-SDK-Version": "0.8.21", + "User-Agent": "humanloop/0.8.21", "X-Fern-Runtime": core.RUNTIME.type, "X-Fern-Runtime-Version": core.RUNTIME.version, ...(await this._getCustomAuthorizationHeaders()), @@ -1064,8 +1064,8 @@ export class Tools { headers: { "X-Fern-Language": "JavaScript", "X-Fern-SDK-Name": "humanloop", - "X-Fern-SDK-Version": "0.8.21-beta1", - "User-Agent": "humanloop/0.8.21-beta1", + "X-Fern-SDK-Version": "0.8.21", + "User-Agent": "humanloop/0.8.21", "X-Fern-Runtime": core.RUNTIME.type, "X-Fern-Runtime-Version": core.RUNTIME.version, ...(await this._getCustomAuthorizationHeaders()), @@ -1163,8 +1163,8 @@ export class Tools { headers: { "X-Fern-Language": "JavaScript", "X-Fern-SDK-Name": "humanloop", - "X-Fern-SDK-Version": "0.8.21-beta1", - "User-Agent": "humanloop/0.8.21-beta1", + "X-Fern-SDK-Version": "0.8.21", + "User-Agent": "humanloop/0.8.21", "X-Fern-Runtime": core.RUNTIME.type, "X-Fern-Runtime-Version": core.RUNTIME.version, ...(await this._getCustomAuthorizationHeaders()), @@ -1255,8 +1255,8 @@ export class Tools { headers: { "X-Fern-Language": "JavaScript", "X-Fern-SDK-Name": "humanloop", - "X-Fern-SDK-Version": "0.8.21-beta1", - "User-Agent": "humanloop/0.8.21-beta1", + "X-Fern-SDK-Version": "0.8.21", + "User-Agent": "humanloop/0.8.21", "X-Fern-Runtime": core.RUNTIME.type, "X-Fern-Runtime-Version": core.RUNTIME.version, ...(await this._getCustomAuthorizationHeaders()), @@ -1335,8 +1335,8 @@ export class Tools { headers: { "X-Fern-Language": "JavaScript", "X-Fern-SDK-Name": "humanloop", - "X-Fern-SDK-Version": "0.8.21-beta1", - "User-Agent": "humanloop/0.8.21-beta1", + "X-Fern-SDK-Version": "0.8.21", + "User-Agent": "humanloop/0.8.21", "X-Fern-Runtime": core.RUNTIME.type, "X-Fern-Runtime-Version": core.RUNTIME.version, ...(await this._getCustomAuthorizationHeaders()), @@ -1428,8 +1428,8 @@ export class Tools { headers: { "X-Fern-Language": "JavaScript", "X-Fern-SDK-Name": "humanloop", - "X-Fern-SDK-Version": "0.8.21-beta1", - "User-Agent": "humanloop/0.8.21-beta1", + "X-Fern-SDK-Version": "0.8.21", + "User-Agent": "humanloop/0.8.21", "X-Fern-Runtime": core.RUNTIME.type, "X-Fern-Runtime-Version": core.RUNTIME.version, ...(await this._getCustomAuthorizationHeaders()), @@ -1513,8 +1513,8 @@ export class Tools { headers: { "X-Fern-Language": "JavaScript", "X-Fern-SDK-Name": "humanloop", - "X-Fern-SDK-Version": "0.8.21-beta1", - "User-Agent": "humanloop/0.8.21-beta1", + "X-Fern-SDK-Version": "0.8.21", + "User-Agent": "humanloop/0.8.21", "X-Fern-Runtime": core.RUNTIME.type, "X-Fern-Runtime-Version": core.RUNTIME.version, ...(await this._getCustomAuthorizationHeaders()), @@ -1604,8 +1604,8 @@ export class Tools { headers: { "X-Fern-Language": "JavaScript", "X-Fern-SDK-Name": "humanloop", - "X-Fern-SDK-Version": "0.8.21-beta1", - "User-Agent": "humanloop/0.8.21-beta1", + "X-Fern-SDK-Version": "0.8.21", + "User-Agent": "humanloop/0.8.21", "X-Fern-Runtime": core.RUNTIME.type, "X-Fern-Runtime-Version": core.RUNTIME.version, ...(await this._getCustomAuthorizationHeaders()), @@ -1693,8 +1693,8 @@ export class Tools { headers: { "X-Fern-Language": "JavaScript", "X-Fern-SDK-Name": "humanloop", - "X-Fern-SDK-Version": "0.8.21-beta1", - "User-Agent": "humanloop/0.8.21-beta1", + "X-Fern-SDK-Version": "0.8.21", + "User-Agent": "humanloop/0.8.21", "X-Fern-Runtime": core.RUNTIME.type, "X-Fern-Runtime-Version": core.RUNTIME.version, ...(await this._getCustomAuthorizationHeaders()), diff --git a/src/api/resources/tools/client/requests/ListToolsGetRequest.ts b/src/api/resources/tools/client/requests/ListToolsGetRequest.ts index 2e5884d5..95c01c87 100644 --- a/src/api/resources/tools/client/requests/ListToolsGetRequest.ts +++ b/src/api/resources/tools/client/requests/ListToolsGetRequest.ts @@ -30,7 +30,7 @@ export interface ListToolsGetRequest { /** * Field to sort Tools by */ - sortBy?: Humanloop.ProjectSortBy; + sortBy?: Humanloop.FileSortBy; /** * Direction to sort by. */ diff --git a/src/api/types/AgentResponse.ts b/src/api/types/AgentResponse.ts index b9251aac..beebd2ed 100644 --- a/src/api/types/AgentResponse.ts +++ b/src/api/types/AgentResponse.ts @@ -100,4 +100,6 @@ export interface AgentResponse { evaluators?: Humanloop.MonitoringEvaluatorResponse[]; /** Aggregation of Evaluator results for the Agent Version. */ evaluatorAggregates?: Humanloop.EvaluatorAggregate[]; + /** The raw content of the Agent. Corresponds to the .agent file. */ + rawFileContent?: string; } diff --git a/src/api/types/ProjectSortBy.ts b/src/api/types/FileSortBy.ts similarity index 66% rename from src/api/types/ProjectSortBy.ts rename to src/api/types/FileSortBy.ts index 9b3ed0cb..df2b6d4e 100644 --- a/src/api/types/ProjectSortBy.ts +++ b/src/api/types/FileSortBy.ts @@ -5,8 +5,8 @@ /** * An enumeration. */ -export type ProjectSortBy = "created_at" | "updated_at" | "name"; -export const ProjectSortBy = { +export type FileSortBy = "created_at" | "updated_at" | "name"; +export const FileSortBy = { CreatedAt: "created_at", UpdatedAt: "updated_at", Name: "name", diff --git a/src/api/types/PopulateTemplateResponse.ts b/src/api/types/PopulateTemplateResponse.ts index c92b9621..f268d97f 100644 --- a/src/api/types/PopulateTemplateResponse.ts +++ b/src/api/types/PopulateTemplateResponse.ts @@ -94,6 +94,8 @@ export interface PopulateTemplateResponse { evaluators?: Humanloop.MonitoringEvaluatorResponse[]; /** Aggregation of Evaluator results for the Prompt Version. */ evaluatorAggregates?: Humanloop.EvaluatorAggregate[]; + /** The raw content of the Prompt. Corresponds to the .prompt file. */ + rawFileContent?: string; /** The template populated with the input values you provided in the request. Returns None if no template exists. */ populatedTemplate?: Humanloop.PopulateTemplateResponsePopulatedTemplate; } diff --git a/src/api/types/PromptResponse.ts b/src/api/types/PromptResponse.ts index beb732f6..bd177e9d 100644 --- a/src/api/types/PromptResponse.ts +++ b/src/api/types/PromptResponse.ts @@ -94,4 +94,6 @@ export interface PromptResponse { evaluators?: Humanloop.MonitoringEvaluatorResponse[]; /** Aggregation of Evaluator results for the Prompt Version. */ evaluatorAggregates?: Humanloop.EvaluatorAggregate[]; + /** The raw content of the Prompt. Corresponds to the .prompt file. */ + rawFileContent?: string; } diff --git a/src/api/types/index.ts b/src/api/types/index.ts index 50b0fe8b..11a2bba7 100644 --- a/src/api/types/index.ts +++ b/src/api/types/index.ts @@ -80,6 +80,7 @@ export * from "./FileEnvironmentVariableRequest"; export * from "./FileId"; export * from "./FilePath"; export * from "./FileRequest"; +export * from "./FileSortBy"; export * from "./FileType"; export * from "./FlowKernelRequest"; export * from "./FlowLogResponse"; @@ -134,7 +135,6 @@ export * from "./PopulateTemplateResponseStop"; export * from "./PopulateTemplateResponseReasoningEffort"; export * from "./PopulateTemplateResponsePopulatedTemplate"; export * from "./PopulateTemplateResponse"; -export * from "./ProjectSortBy"; export * from "./PromptCallLogResponse"; export * from "./PromptCallResponseToolChoice"; export * from "./PromptCallResponse"; diff --git a/src/serialization/resources/agents/client/requests/AgentLogRequest.ts b/src/serialization/resources/agents/client/requests/AgentLogRequest.ts index 84babd7f..2e251af8 100644 --- a/src/serialization/resources/agents/client/requests/AgentLogRequest.ts +++ b/src/serialization/resources/agents/client/requests/AgentLogRequest.ts @@ -7,7 +7,7 @@ import * as Humanloop from "../../../../../api/index"; import * as core from "../../../../../core"; import { ChatMessage } from "../../../../types/ChatMessage"; import { AgentLogRequestToolChoice } from "../../types/AgentLogRequestToolChoice"; -import { AgentKernelRequest } from "../../../../types/AgentKernelRequest"; +import { AgentLogRequestAgent } from "../../types/AgentLogRequestAgent"; import { LogStatus } from "../../../../types/LogStatus"; export const AgentLogRequest: core.serialization.Schema< @@ -26,7 +26,7 @@ export const AgentLogRequest: core.serialization.Schema< finishReason: core.serialization.property("finish_reason", core.serialization.string().optional()), messages: core.serialization.list(ChatMessage).optional(), toolChoice: core.serialization.property("tool_choice", AgentLogRequestToolChoice.optional()), - agent: AgentKernelRequest.optional(), + agent: AgentLogRequestAgent.optional(), startTime: core.serialization.property("start_time", core.serialization.date().optional()), endTime: core.serialization.property("end_time", core.serialization.date().optional()), output: core.serialization.string().optional(), @@ -68,7 +68,7 @@ export declare namespace AgentLogRequest { finish_reason?: string | null; messages?: ChatMessage.Raw[] | null; tool_choice?: AgentLogRequestToolChoice.Raw | null; - agent?: AgentKernelRequest.Raw | null; + agent?: AgentLogRequestAgent.Raw | null; start_time?: string | null; end_time?: string | null; output?: string | null; diff --git a/src/serialization/resources/agents/client/requests/AgentsCallRequest.ts b/src/serialization/resources/agents/client/requests/AgentsCallRequest.ts index a64a7932..e8a18d42 100644 --- a/src/serialization/resources/agents/client/requests/AgentsCallRequest.ts +++ b/src/serialization/resources/agents/client/requests/AgentsCallRequest.ts @@ -7,7 +7,7 @@ import * as Humanloop from "../../../../../api/index"; import * as core from "../../../../../core"; import { ChatMessage } from "../../../../types/ChatMessage"; import { AgentsCallRequestToolChoice } from "../../types/AgentsCallRequestToolChoice"; -import { AgentKernelRequest } from "../../../../types/AgentKernelRequest"; +import { AgentsCallRequestAgent } from "../../types/AgentsCallRequestAgent"; import { LogStatus } from "../../../../types/LogStatus"; import { ProviderApiKeys } from "../../../../types/ProviderApiKeys"; @@ -19,7 +19,7 @@ export const AgentsCallRequest: core.serialization.Schema< id: core.serialization.string().optional(), messages: core.serialization.list(ChatMessage).optional(), toolChoice: core.serialization.property("tool_choice", AgentsCallRequestToolChoice.optional()), - agent: AgentKernelRequest.optional(), + agent: AgentsCallRequestAgent.optional(), inputs: core.serialization.record(core.serialization.string(), core.serialization.unknown()).optional(), source: core.serialization.string().optional(), metadata: core.serialization.record(core.serialization.string(), core.serialization.unknown()).optional(), @@ -46,7 +46,7 @@ export declare namespace AgentsCallRequest { id?: string | null; messages?: ChatMessage.Raw[] | null; tool_choice?: AgentsCallRequestToolChoice.Raw | null; - agent?: AgentKernelRequest.Raw | null; + agent?: AgentsCallRequestAgent.Raw | null; inputs?: Record | null; source?: string | null; metadata?: Record | null; diff --git a/src/serialization/resources/agents/client/requests/AgentsCallStreamRequest.ts b/src/serialization/resources/agents/client/requests/AgentsCallStreamRequest.ts index b0557ace..7ca3e451 100644 --- a/src/serialization/resources/agents/client/requests/AgentsCallStreamRequest.ts +++ b/src/serialization/resources/agents/client/requests/AgentsCallStreamRequest.ts @@ -7,7 +7,7 @@ import * as Humanloop from "../../../../../api/index"; import * as core from "../../../../../core"; import { ChatMessage } from "../../../../types/ChatMessage"; import { AgentsCallStreamRequestToolChoice } from "../../types/AgentsCallStreamRequestToolChoice"; -import { AgentKernelRequest } from "../../../../types/AgentKernelRequest"; +import { AgentsCallStreamRequestAgent } from "../../types/AgentsCallStreamRequestAgent"; import { LogStatus } from "../../../../types/LogStatus"; import { ProviderApiKeys } from "../../../../types/ProviderApiKeys"; @@ -19,7 +19,7 @@ export const AgentsCallStreamRequest: core.serialization.Schema< id: core.serialization.string().optional(), messages: core.serialization.list(ChatMessage).optional(), toolChoice: core.serialization.property("tool_choice", AgentsCallStreamRequestToolChoice.optional()), - agent: AgentKernelRequest.optional(), + agent: AgentsCallStreamRequestAgent.optional(), inputs: core.serialization.record(core.serialization.string(), core.serialization.unknown()).optional(), source: core.serialization.string().optional(), metadata: core.serialization.record(core.serialization.string(), core.serialization.unknown()).optional(), @@ -49,7 +49,7 @@ export declare namespace AgentsCallStreamRequest { id?: string | null; messages?: ChatMessage.Raw[] | null; tool_choice?: AgentsCallStreamRequestToolChoice.Raw | null; - agent?: AgentKernelRequest.Raw | null; + agent?: AgentsCallStreamRequestAgent.Raw | null; inputs?: Record | null; source?: string | null; metadata?: Record | null; diff --git a/src/serialization/resources/agents/types/AgentLogRequestAgent.ts b/src/serialization/resources/agents/types/AgentLogRequestAgent.ts new file mode 100644 index 00000000..f77f6e2e --- /dev/null +++ b/src/serialization/resources/agents/types/AgentLogRequestAgent.ts @@ -0,0 +1,17 @@ +/** + * This file was auto-generated by Fern from our API Definition. + */ + +import * as serializers from "../../../index"; +import * as Humanloop from "../../../../api/index"; +import * as core from "../../../../core"; +import { AgentKernelRequest } from "../../../types/AgentKernelRequest"; + +export const AgentLogRequestAgent: core.serialization.Schema< + serializers.AgentLogRequestAgent.Raw, + Humanloop.AgentLogRequestAgent +> = core.serialization.undiscriminatedUnion([AgentKernelRequest, core.serialization.string()]); + +export declare namespace AgentLogRequestAgent { + export type Raw = AgentKernelRequest.Raw | string; +} diff --git a/src/serialization/resources/agents/types/AgentsCallRequestAgent.ts b/src/serialization/resources/agents/types/AgentsCallRequestAgent.ts new file mode 100644 index 00000000..aabc0c14 --- /dev/null +++ b/src/serialization/resources/agents/types/AgentsCallRequestAgent.ts @@ -0,0 +1,17 @@ +/** + * This file was auto-generated by Fern from our API Definition. + */ + +import * as serializers from "../../../index"; +import * as Humanloop from "../../../../api/index"; +import * as core from "../../../../core"; +import { AgentKernelRequest } from "../../../types/AgentKernelRequest"; + +export const AgentsCallRequestAgent: core.serialization.Schema< + serializers.AgentsCallRequestAgent.Raw, + Humanloop.AgentsCallRequestAgent +> = core.serialization.undiscriminatedUnion([AgentKernelRequest, core.serialization.string()]); + +export declare namespace AgentsCallRequestAgent { + export type Raw = AgentKernelRequest.Raw | string; +} diff --git a/src/serialization/resources/agents/types/AgentsCallStreamRequestAgent.ts b/src/serialization/resources/agents/types/AgentsCallStreamRequestAgent.ts new file mode 100644 index 00000000..61f637db --- /dev/null +++ b/src/serialization/resources/agents/types/AgentsCallStreamRequestAgent.ts @@ -0,0 +1,17 @@ +/** + * This file was auto-generated by Fern from our API Definition. + */ + +import * as serializers from "../../../index"; +import * as Humanloop from "../../../../api/index"; +import * as core from "../../../../core"; +import { AgentKernelRequest } from "../../../types/AgentKernelRequest"; + +export const AgentsCallStreamRequestAgent: core.serialization.Schema< + serializers.AgentsCallStreamRequestAgent.Raw, + Humanloop.AgentsCallStreamRequestAgent +> = core.serialization.undiscriminatedUnion([AgentKernelRequest, core.serialization.string()]); + +export declare namespace AgentsCallStreamRequestAgent { + export type Raw = AgentKernelRequest.Raw | string; +} diff --git a/src/serialization/resources/agents/types/index.ts b/src/serialization/resources/agents/types/index.ts index 8a8a004f..1a1043c1 100644 --- a/src/serialization/resources/agents/types/index.ts +++ b/src/serialization/resources/agents/types/index.ts @@ -1,6 +1,9 @@ export * from "./AgentLogRequestToolChoice"; +export * from "./AgentLogRequestAgent"; export * from "./AgentsCallStreamRequestToolChoice"; +export * from "./AgentsCallStreamRequestAgent"; export * from "./AgentsCallRequestToolChoice"; +export * from "./AgentsCallRequestAgent"; export * from "./AgentRequestTemplate"; export * from "./AgentRequestStop"; export * from "./AgentRequestReasoningEffort"; diff --git a/src/serialization/resources/files/client/requests/BodyRetrieveByPathFilesRetrieveByPathPost.ts b/src/serialization/resources/files/client/requests/BodyRetrieveByPathFilesRetrieveByPathPost.ts index fefe408b..1f712089 100644 --- a/src/serialization/resources/files/client/requests/BodyRetrieveByPathFilesRetrieveByPathPost.ts +++ b/src/serialization/resources/files/client/requests/BodyRetrieveByPathFilesRetrieveByPathPost.ts @@ -8,7 +8,7 @@ import * as core from "../../../../../core"; export const BodyRetrieveByPathFilesRetrieveByPathPost: core.serialization.Schema< serializers.BodyRetrieveByPathFilesRetrieveByPathPost.Raw, - Omit + Omit > = core.serialization.object({ path: core.serialization.string(), }); diff --git a/src/serialization/resources/prompts/client/requests/PromptLogRequest.ts b/src/serialization/resources/prompts/client/requests/PromptLogRequest.ts index 4638bf24..832aef92 100644 --- a/src/serialization/resources/prompts/client/requests/PromptLogRequest.ts +++ b/src/serialization/resources/prompts/client/requests/PromptLogRequest.ts @@ -7,7 +7,7 @@ import * as Humanloop from "../../../../../api/index"; import * as core from "../../../../../core"; import { ChatMessage } from "../../../../types/ChatMessage"; import { PromptLogRequestToolChoice } from "../../types/PromptLogRequestToolChoice"; -import { PromptKernelRequest } from "../../../../types/PromptKernelRequest"; +import { PromptLogRequestPrompt } from "../../types/PromptLogRequestPrompt"; import { LogStatus } from "../../../../types/LogStatus"; export const PromptLogRequest: core.serialization.Schema< @@ -26,7 +26,7 @@ export const PromptLogRequest: core.serialization.Schema< finishReason: core.serialization.property("finish_reason", core.serialization.string().optional()), messages: core.serialization.list(ChatMessage).optional(), toolChoice: core.serialization.property("tool_choice", PromptLogRequestToolChoice.optional()), - prompt: PromptKernelRequest.optional(), + prompt: PromptLogRequestPrompt.optional(), startTime: core.serialization.property("start_time", core.serialization.date().optional()), endTime: core.serialization.property("end_time", core.serialization.date().optional()), output: core.serialization.string().optional(), @@ -68,7 +68,7 @@ export declare namespace PromptLogRequest { finish_reason?: string | null; messages?: ChatMessage.Raw[] | null; tool_choice?: PromptLogRequestToolChoice.Raw | null; - prompt?: PromptKernelRequest.Raw | null; + prompt?: PromptLogRequestPrompt.Raw | null; start_time?: string | null; end_time?: string | null; output?: string | null; diff --git a/src/serialization/resources/prompts/client/requests/PromptsCallRequest.ts b/src/serialization/resources/prompts/client/requests/PromptsCallRequest.ts index 33e757a3..08802ed1 100644 --- a/src/serialization/resources/prompts/client/requests/PromptsCallRequest.ts +++ b/src/serialization/resources/prompts/client/requests/PromptsCallRequest.ts @@ -7,7 +7,7 @@ import * as Humanloop from "../../../../../api/index"; import * as core from "../../../../../core"; import { ChatMessage } from "../../../../types/ChatMessage"; import { PromptsCallRequestToolChoice } from "../../types/PromptsCallRequestToolChoice"; -import { PromptKernelRequest } from "../../../../types/PromptKernelRequest"; +import { PromptsCallRequestPrompt } from "../../types/PromptsCallRequestPrompt"; import { LogStatus } from "../../../../types/LogStatus"; import { ProviderApiKeys } from "../../../../types/ProviderApiKeys"; @@ -19,7 +19,7 @@ export const PromptsCallRequest: core.serialization.Schema< id: core.serialization.string().optional(), messages: core.serialization.list(ChatMessage).optional(), toolChoice: core.serialization.property("tool_choice", PromptsCallRequestToolChoice.optional()), - prompt: PromptKernelRequest.optional(), + prompt: PromptsCallRequestPrompt.optional(), inputs: core.serialization.record(core.serialization.string(), core.serialization.unknown()).optional(), source: core.serialization.string().optional(), metadata: core.serialization.record(core.serialization.string(), core.serialization.unknown()).optional(), @@ -45,7 +45,7 @@ export declare namespace PromptsCallRequest { id?: string | null; messages?: ChatMessage.Raw[] | null; tool_choice?: PromptsCallRequestToolChoice.Raw | null; - prompt?: PromptKernelRequest.Raw | null; + prompt?: PromptsCallRequestPrompt.Raw | null; inputs?: Record | null; source?: string | null; metadata?: Record | null; diff --git a/src/serialization/resources/prompts/client/requests/PromptsCallStreamRequest.ts b/src/serialization/resources/prompts/client/requests/PromptsCallStreamRequest.ts index 905d9169..9a8f9648 100644 --- a/src/serialization/resources/prompts/client/requests/PromptsCallStreamRequest.ts +++ b/src/serialization/resources/prompts/client/requests/PromptsCallStreamRequest.ts @@ -7,7 +7,7 @@ import * as Humanloop from "../../../../../api/index"; import * as core from "../../../../../core"; import { ChatMessage } from "../../../../types/ChatMessage"; import { PromptsCallStreamRequestToolChoice } from "../../types/PromptsCallStreamRequestToolChoice"; -import { PromptKernelRequest } from "../../../../types/PromptKernelRequest"; +import { PromptsCallStreamRequestPrompt } from "../../types/PromptsCallStreamRequestPrompt"; import { LogStatus } from "../../../../types/LogStatus"; import { ProviderApiKeys } from "../../../../types/ProviderApiKeys"; @@ -19,7 +19,7 @@ export const PromptsCallStreamRequest: core.serialization.Schema< id: core.serialization.string().optional(), messages: core.serialization.list(ChatMessage).optional(), toolChoice: core.serialization.property("tool_choice", PromptsCallStreamRequestToolChoice.optional()), - prompt: PromptKernelRequest.optional(), + prompt: PromptsCallStreamRequestPrompt.optional(), inputs: core.serialization.record(core.serialization.string(), core.serialization.unknown()).optional(), source: core.serialization.string().optional(), metadata: core.serialization.record(core.serialization.string(), core.serialization.unknown()).optional(), @@ -48,7 +48,7 @@ export declare namespace PromptsCallStreamRequest { id?: string | null; messages?: ChatMessage.Raw[] | null; tool_choice?: PromptsCallStreamRequestToolChoice.Raw | null; - prompt?: PromptKernelRequest.Raw | null; + prompt?: PromptsCallStreamRequestPrompt.Raw | null; inputs?: Record | null; source?: string | null; metadata?: Record | null; diff --git a/src/serialization/resources/prompts/types/PromptLogRequestPrompt.ts b/src/serialization/resources/prompts/types/PromptLogRequestPrompt.ts new file mode 100644 index 00000000..792f5b7d --- /dev/null +++ b/src/serialization/resources/prompts/types/PromptLogRequestPrompt.ts @@ -0,0 +1,17 @@ +/** + * This file was auto-generated by Fern from our API Definition. + */ + +import * as serializers from "../../../index"; +import * as Humanloop from "../../../../api/index"; +import * as core from "../../../../core"; +import { PromptKernelRequest } from "../../../types/PromptKernelRequest"; + +export const PromptLogRequestPrompt: core.serialization.Schema< + serializers.PromptLogRequestPrompt.Raw, + Humanloop.PromptLogRequestPrompt +> = core.serialization.undiscriminatedUnion([PromptKernelRequest, core.serialization.string()]); + +export declare namespace PromptLogRequestPrompt { + export type Raw = PromptKernelRequest.Raw | string; +} diff --git a/src/serialization/resources/prompts/types/PromptsCallRequestPrompt.ts b/src/serialization/resources/prompts/types/PromptsCallRequestPrompt.ts new file mode 100644 index 00000000..1053bfaf --- /dev/null +++ b/src/serialization/resources/prompts/types/PromptsCallRequestPrompt.ts @@ -0,0 +1,17 @@ +/** + * This file was auto-generated by Fern from our API Definition. + */ + +import * as serializers from "../../../index"; +import * as Humanloop from "../../../../api/index"; +import * as core from "../../../../core"; +import { PromptKernelRequest } from "../../../types/PromptKernelRequest"; + +export const PromptsCallRequestPrompt: core.serialization.Schema< + serializers.PromptsCallRequestPrompt.Raw, + Humanloop.PromptsCallRequestPrompt +> = core.serialization.undiscriminatedUnion([PromptKernelRequest, core.serialization.string()]); + +export declare namespace PromptsCallRequestPrompt { + export type Raw = PromptKernelRequest.Raw | string; +} diff --git a/src/serialization/resources/prompts/types/PromptsCallStreamRequestPrompt.ts b/src/serialization/resources/prompts/types/PromptsCallStreamRequestPrompt.ts new file mode 100644 index 00000000..3c58225f --- /dev/null +++ b/src/serialization/resources/prompts/types/PromptsCallStreamRequestPrompt.ts @@ -0,0 +1,17 @@ +/** + * This file was auto-generated by Fern from our API Definition. + */ + +import * as serializers from "../../../index"; +import * as Humanloop from "../../../../api/index"; +import * as core from "../../../../core"; +import { PromptKernelRequest } from "../../../types/PromptKernelRequest"; + +export const PromptsCallStreamRequestPrompt: core.serialization.Schema< + serializers.PromptsCallStreamRequestPrompt.Raw, + Humanloop.PromptsCallStreamRequestPrompt +> = core.serialization.undiscriminatedUnion([PromptKernelRequest, core.serialization.string()]); + +export declare namespace PromptsCallStreamRequestPrompt { + export type Raw = PromptKernelRequest.Raw | string; +} diff --git a/src/serialization/resources/prompts/types/index.ts b/src/serialization/resources/prompts/types/index.ts index 8265b2f3..f8045c03 100644 --- a/src/serialization/resources/prompts/types/index.ts +++ b/src/serialization/resources/prompts/types/index.ts @@ -1,7 +1,10 @@ export * from "./PromptLogRequestToolChoice"; +export * from "./PromptLogRequestPrompt"; export * from "./PromptLogUpdateRequestToolChoice"; export * from "./PromptsCallStreamRequestToolChoice"; +export * from "./PromptsCallStreamRequestPrompt"; export * from "./PromptsCallRequestToolChoice"; +export * from "./PromptsCallRequestPrompt"; export * from "./PromptRequestTemplate"; export * from "./PromptRequestStop"; export * from "./PromptRequestReasoningEffort"; diff --git a/src/serialization/types/AgentResponse.ts b/src/serialization/types/AgentResponse.ts index f9b96ccf..f99e69dc 100644 --- a/src/serialization/types/AgentResponse.ts +++ b/src/serialization/types/AgentResponse.ts @@ -68,6 +68,7 @@ export const AgentResponse: core.serialization.ObjectSchema = +export const FileSortBy: core.serialization.Schema = core.serialization.enum_(["created_at", "updated_at", "name"]); -export declare namespace ProjectSortBy { +export declare namespace FileSortBy { export type Raw = "created_at" | "updated_at" | "name"; } diff --git a/src/serialization/types/PopulateTemplateResponse.ts b/src/serialization/types/PopulateTemplateResponse.ts index 89574558..ceb42436 100644 --- a/src/serialization/types/PopulateTemplateResponse.ts +++ b/src/serialization/types/PopulateTemplateResponse.ts @@ -72,6 +72,7 @@ export const PopulateTemplateResponse: core.serialization.ObjectSchema< "evaluator_aggregates", core.serialization.list(EvaluatorAggregate).optional(), ), + rawFileContent: core.serialization.property("raw_file_content", core.serialization.string().optional()), populatedTemplate: core.serialization.property( "populated_template", PopulateTemplateResponsePopulatedTemplate.optional(), @@ -120,6 +121,7 @@ export declare namespace PopulateTemplateResponse { inputs: InputResponse.Raw[]; evaluators?: serializers.MonitoringEvaluatorResponse.Raw[] | null; evaluator_aggregates?: EvaluatorAggregate.Raw[] | null; + raw_file_content?: string | null; populated_template?: PopulateTemplateResponsePopulatedTemplate.Raw | null; } } diff --git a/src/serialization/types/PromptResponse.ts b/src/serialization/types/PromptResponse.ts index 04764187..481fa317 100644 --- a/src/serialization/types/PromptResponse.ts +++ b/src/serialization/types/PromptResponse.ts @@ -69,6 +69,7 @@ export const PromptResponse: core.serialization.ObjectSchema void, - ): boolean => { - if (callback) callback(); - return true; - }; -} - -/** - * Creates a test prompt in the specified test environment - */ -async function createTestPrompt( - setup: TestSetup, - name: string = "test_prompt", - customConfig?: Partial, -): Promise { - const promptPath = `${setup.sdkTestDir.path}/${name}`; - const config = customConfig - ? { ...setup.testPromptConfig, ...customConfig } - : setup.testPromptConfig; - - const promptResponse = await setup.humanloopClient.prompts.upsert({ - path: promptPath, - ...config, - }); - - return { - id: promptResponse.id, - path: promptPath, - response: promptResponse, - }; -} - -/** - * Creates a base function for LLM calls that can be decorated - */ -function createBaseLLMFunction(setup: TestSetup, model: string = "gpt-4o-mini") { - return async (question: string): Promise => { - const openaiClient = new OpenAI({ apiKey: setup.openaiApiKey }); - - const response = await openaiClient.chat.completions.create({ - model: model, - messages: [{ role: "user", content: question }], - }); - - return response.choices[0].message.content || ""; - }; -} - -/** - * Applies the prompt decorator to a function and tests it - */ -async function testPromptDecorator( - setup: TestSetup, - prompt: TestPrompt, - input: string = "What is the capital of the France?", - expectedSubstring: string = "paris", -): Promise { - // Create the base function - const myPromptBase = createBaseLLMFunction(setup); - - // Apply the higher-order function instead of decorator - const myPrompt = setup.humanloopClient.prompt({ - path: prompt.path, - callable: myPromptBase, - }); - - // Call the decorated function - const result = await myPrompt(input); - if (result) { - expect(result.toLowerCase()).toContain(expectedSubstring.toLowerCase()); - } else { - throw new Error("Expected result to be defined"); - } - - // Wait for 5 seconds for the log to be created - await new Promise((resolve) => setTimeout(resolve, 5000)); -} - -describe("decorators", () => { - it("should create a prompt log when using the decorator", async () => { - let testSetup: TestSetup | undefined = undefined; - let testPrompt: TestPrompt | undefined = undefined; - - try { - testSetup = await setupTestEnvironment("test_prompt_call_decorator"); - // Create test prompt - testPrompt = await createTestPrompt(testSetup); - - // Check initial version count - const promptVersionsResponse = - await testSetup.humanloopClient.prompts.listVersions(testPrompt.id); - expect(promptVersionsResponse.records.length).toBe(1); - - // Test the prompt decorator - await testPromptDecorator(testSetup, testPrompt); - - // Verify a new version was created - const updatedPromptVersionsResponse = - await testSetup.humanloopClient.prompts.listVersions(testPrompt.id); - expect(updatedPromptVersionsResponse.records.length).toBe(2); - - // Verify logs were created - const logsResponse = await testSetup.humanloopClient.logs.list({ - fileId: testPrompt.id, - page: 1, - size: 50, - }); - expect(logsResponse.data.length).toBe(1); - } catch (error) { - // Make sure to clean up if the test fails - const cleanupResources: CleanupResources[] = []; - if (testPrompt) { - cleanupResources.push({ - type: "prompt", - id: testPrompt.id, - }); - } - if (testSetup) { - await cleanupTestEnvironment(testSetup, cleanupResources); - } - throw error; - } - }); - - it("should create logs with proper tracing when using prompt in flow decorator", async () => { - let testSetup: TestSetup | undefined = undefined; - let flowId: string | null = null; - let promptId: string | null = null; - - try { - // Create test flow and prompt paths - testSetup = await setupTestEnvironment("test_flow_decorator"); - const flowPath = `${testSetup.sdkTestDir.path}/test_flow`; - const promptPath = `${testSetup.sdkTestDir.path}/test_prompt`; - - // Create the prompt - const promptResponse = await testSetup.humanloopClient.prompts.upsert({ - path: promptPath, - provider: "openai", - model: "gpt-4o-mini", - temperature: 0, - }); - const promptId = promptResponse.id; - - // Define the flow callable function with the correct type signature - const flowCallable = async (question: { - question: string; - }): Promise => { - const response = await testSetup!.humanloopClient.prompts.call({ - path: promptPath, - messages: [{ role: "user", content: question.question }], - providerApiKeys: { openai: testSetup!.openaiApiKey }, - }); - - const output = response.logs?.[0]?.output; - expect(output).not.toBeNull(); - return output || ""; - }; - - // Apply the flow decorator - const myFlow = testSetup.humanloopClient.flow({ - path: flowPath, - callable: flowCallable, - }); - - // Call the flow with the expected input format - const result = await myFlow({ - question: "What is the capital of the France?", - }); - expect(result?.toLowerCase()).toContain("paris"); - - // Wait for logs to be created - await new Promise((resolve) => setTimeout(resolve, 5000)); - - // Verify prompt logs - const promptRetrieveResponse = - await testSetup.humanloopClient.files.retrieveByPath({ - path: promptPath, - }); - expect(promptRetrieveResponse).not.toBeNull(); - const promptLogsResponse = await testSetup.humanloopClient.logs.list({ - fileId: promptRetrieveResponse.id, - page: 1, - size: 50, - }); - expect(promptLogsResponse.data.length).toBe(1); - const promptLog = promptLogsResponse.data[0]; - - // Verify flow logs - const flowRetrieveResponse = - await testSetup.humanloopClient.files.retrieveByPath({ - path: flowPath, - }); - expect(flowRetrieveResponse).not.toBeNull(); - flowId = flowRetrieveResponse.id; - const flowLogsResponse = await testSetup.humanloopClient.logs.list({ - fileId: flowRetrieveResponse.id, - page: 1, - size: 50, - }); - expect(flowLogsResponse.data.length).toBe(1); - const flowLog = flowLogsResponse.data[0]; - - // Verify tracing between logs - expect(promptLog.traceParentId).toBe(flowLog.id); - } finally { - // Clean up resources - const cleanupResources: CleanupResources[] = []; - if (flowId) { - cleanupResources.push({ - type: "flow", - id: flowId, - }); - } - if (promptId) { - cleanupResources.push({ - type: "prompt", - id: promptId, - }); - } - if (testSetup) { - await cleanupTestEnvironment(testSetup, cleanupResources); - } - } - }); - - it("should log exceptions when using the flow decorator", async () => { - let testSetup: TestSetup | undefined = undefined; - let flowId: string | null = null; - - try { - // Create test flow path - testSetup = await setupTestEnvironment("test_flow_decorator"); - const flowPath = `${testSetup.sdkTestDir.path}/test_flow_log_error`; - - // Define a flow callable that throws an error - const flowCallable = async ({ - question, - }: { - question: string; - }): Promise => { - throw new Error("This is a test exception"); - }; - - // Apply the flow decorator - const myFlow = testSetup.humanloopClient.flow({ - path: flowPath, - callable: flowCallable, - }); - - // Call the flow and expect it to throw - try { - await myFlow({ question: "test" }); - // If we get here, the test should fail - throw new Error("Expected flow to throw an error but it didn't"); - } catch (error) { - // Expected error - expect(error).toBeDefined(); - } - - // Wait for logs to be created - await new Promise((resolve) => setTimeout(resolve, 5000)); - - // Verify flow logs - const flowRetrieveResponse = - await testSetup.humanloopClient.files.retrieveByPath({ - path: flowPath, - }); - expect(flowRetrieveResponse).not.toBeNull(); - flowId = flowRetrieveResponse.id; - - const flowLogsResponse = await testSetup.humanloopClient.logs.list({ - fileId: flowRetrieveResponse.id, - page: 1, - size: 50, - }); - expect(flowLogsResponse.data.length).toBe(1); - - const flowLog = flowLogsResponse.data[0]; - expect(flowLog.error).not.toBeUndefined(); - expect(flowLog.output).toBeUndefined(); - } finally { - if (testSetup) { - await cleanupTestEnvironment( - testSetup, - flowId - ? [ - { - type: "flow", - id: flowId, - }, - ] - : [], - ); - } - } - }); - - it("should populate outputMessage when flow returns chat message format", async () => { - let testSetup: TestSetup | undefined = undefined; - let flowId: string | null = null; - - try { - // Create test flow path - testSetup = await setupTestEnvironment("test_flow_decorator"); - const flowPath = `${testSetup.sdkTestDir.path}/test_flow_log_output_message`; - - // Define a flow callable that returns a chat message format - const flowCallable = async ({ question }: { question: string }) => { - return { - role: "user", - content: question, - }; - }; - - // Apply the flow decorator - const myFlow = testSetup.humanloopClient.flow({ - path: flowPath, - callable: flowCallable, - }); - - // Call the flow and check the returned message - const result = await myFlow({ - question: "What is the capital of the France?", - }); - expect(result?.content.toLowerCase()).toContain("france"); - - // Wait for logs to be created - await new Promise((resolve) => setTimeout(resolve, 5000)); - - // Verify flow logs - const flowRetrieveResponse = - await testSetup.humanloopClient.files.retrieveByPath({ - path: flowPath, - }); - expect(flowRetrieveResponse).not.toBeNull(); - flowId = flowRetrieveResponse.id; - - const flowLogsResponse = await testSetup.humanloopClient.logs.list({ - fileId: flowRetrieveResponse.id, - page: 1, - size: 50, - }); - expect(flowLogsResponse.data.length).toBe(1); - - const flowLog = flowLogsResponse.data[0]; - expect(flowLog.outputMessage).not.toBeUndefined(); - expect(flowLog.output).toBeUndefined(); - expect(flowLog.error).toBeUndefined(); - } finally { - // Clean up resources - if (flowId) { - await testSetup!.humanloopClient.flows.delete(flowId); - } - if (testSetup) { - await cleanupTestEnvironment( - testSetup, - flowId - ? [ - { - type: "flow", - id: flowId, - }, - ] - : [], - ); - } - } - }); - - it("should run evaluations on a flow decorator", async () => { - let testSetup: TestSetup | undefined = undefined; - let flowId: string | null = null; - - try { - // Use fixtures from testSetup - testSetup = await setupTestEnvironment("eval-flow-decorator"); - if (!testSetup.evalDataset || !testSetup.outputNotNullEvaluator) { - throw new Error("Required fixtures are not initialized"); - } - - // Create test flow path - const flowPath = `${testSetup.sdkTestDir.path}/test_flow_evaluate`; - - // Define flow decorated function - const myFlow = testSetup.humanloopClient.flow({ - path: flowPath, - callable: async (inputs: { question: string }) => { - return "paris"; - }, - }); - - // Run evaluation on the flow - await testSetup.humanloopClient.evaluations.run({ - name: "Evaluate Flow Decorator", - file: { - path: flowPath, - callable: myFlow, - type: "flow", - }, - dataset: { - path: testSetup.evalDataset.path, - }, - evaluators: [ - { - path: testSetup.outputNotNullEvaluator.path, - }, - ], - }); - - // Get the flow ID for cleanup - const flowResponse = await testSetup.humanloopClient.files.retrieveByPath({ - path: flowPath, - }); - flowId = flowResponse.id; - } finally { - if (testSetup) { - await cleanupTestEnvironment( - testSetup, - flowId - ? [ - { - type: "flow", - id: flowId, - }, - ] - : [], - ); - } - } - }); - - it("should throw error when using non-existent file ID instead of path", async () => { - // Use fixtures from testSetup - let testSetup: TestSetup | undefined = undefined; - try { - testSetup = await setupTestEnvironment("eval-flow-decorator"); - if (!testSetup.evalDataset || !testSetup.outputNotNullEvaluator) { - throw new Error("Required fixtures are not initialized"); - } - // Define a simple callable - const simpleCallable = (x: any) => x; - - // Expect the evaluation to throw an error with a non-existent file ID - try { - await testSetup.humanloopClient.evaluations.run({ - name: "Evaluate Flow Decorator", - file: { - id: "non-existent-file-id", - type: "flow", - version: { - attributes: { - foo: "bar", - }, - }, - callable: simpleCallable, - }, - dataset: { - path: testSetup.evalDataset.path, - }, - evaluators: [ - { - path: testSetup.outputNotNullEvaluator.path, - }, - ], - }); - - // If we get here, the test should fail - throw new Error("Expected HumanloopRuntimeError but none was thrown"); - } catch (error) { - expect(error).toBeInstanceOf(HumanloopRuntimeError); - expect((error as HumanloopRuntimeError).message).toContain( - "File does not exist on Humanloop. Please provide a `file.path` and a version to create a new version.", - ); - } - } finally { - if (testSetup) { - await cleanupTestEnvironment(testSetup); - } - } - }); -}); diff --git a/tests/integration/evals.test.ts b/tests/integration/evals.test.ts deleted file mode 100644 index 17d8a399..00000000 --- a/tests/integration/evals.test.ts +++ /dev/null @@ -1,577 +0,0 @@ -import { FlowResponse } from "../../src/api"; -import { HumanloopRuntimeError } from "../../src/error"; -import { HumanloopClient } from "../../src/humanloop.client"; -import { - cleanupTestEnvironment, - readEnvironment, - setupTestEnvironment, -} from "./fixtures"; - -// process.stdout.moveCursor is undefined in jest; mocking it since STDOUT is not relevant -if (typeof process.stdout.moveCursor !== "function") { - process.stdout.moveCursor = ( - dx: number, - dy: number, - callback?: () => void, - ): boolean => { - if (callback) callback(); - return true; - }; -} - -// Long timeout per test; evals might take a while to run -jest.setTimeout(30 * 1000); - -interface TestIdentifiers { - id: string; - path: string; -} - -interface TestSetup { - sdkTestDir: TestIdentifiers; - outputNotNullEvaluator: TestIdentifiers; - evalDataset: TestIdentifiers; - evalPrompt: TestIdentifiers; - stagingEnvironmentId: string; -} - -describe("Evals", () => { - let humanloopClient: HumanloopClient; - let openaiApiKey: string; - - beforeAll(async () => { - readEnvironment(); - if (!process.env.HUMANLOOP_API_KEY) { - throw new Error("HUMANLOOP_API_KEY is not set"); - } - if (!process.env.OPENAI_API_KEY) { - throw new Error("OPENAI_API_KEY is not set for integration tests"); - } - openaiApiKey = process.env.OPENAI_API_KEY; - humanloopClient = new HumanloopClient({ - apiKey: process.env.HUMANLOOP_API_KEY, - }); - }); - - it("should be able to import HumanloopClient", async () => { - const client = new HumanloopClient({ apiKey: process.env.HUMANLOOP_API_KEY }); - expect(client).toBeDefined(); - }); - - it("should run evaluation on online files", async () => { - // Setup test-specific environment - const setup = await setupTestEnvironment("online_files"); - - try { - await humanloopClient.evaluations.run({ - file: { - path: setup.evalPrompt.path, - type: "prompt", - }, - dataset: { - path: setup.evalDataset.path, - }, - name: "test_eval_run", - evaluators: [ - { - path: setup.outputNotNullEvaluator.path, - }, - ], - }); - - // Wait for evaluation to complete - await new Promise((resolve) => setTimeout(resolve, 5000)); - - const evalResponse = await humanloopClient.evaluations.list({ - fileId: setup.evalPrompt.id, - }); - expect(evalResponse.data.length).toBe(1); - - const evaluationId = evalResponse.data[0].id; - const runsResponse = - await humanloopClient.evaluations.listRunsForEvaluation(evaluationId); - expect(runsResponse.runs[0].status).toBe("completed"); - } finally { - // Clean up test-specific resources - await cleanupTestEnvironment(setup); - } - }); - - it("should run evaluation with version_id", async () => { - // Setup test-specific environment - const setup = await setupTestEnvironment("version_id"); - - try { - // Create a new prompt version - const newPromptVersionResponse = await humanloopClient.prompts.upsert({ - path: setup.evalPrompt.path, - provider: "openai", - model: "gpt-4o-mini", - temperature: 0, - template: [ - { - role: "system", - content: - "You are a helpful assistant. You must answer the user's question truthfully and at the level of a 5th grader.", - }, - { - role: "user", - content: "{{question}}", - }, - ], - }); - - // Run evaluation with version_id - await humanloopClient.evaluations.run({ - file: { - id: newPromptVersionResponse.id, - versionId: newPromptVersionResponse.versionId, - type: "prompt", - }, - dataset: { - path: setup.evalDataset.path, - }, - name: "test_eval_run", - evaluators: [ - { - path: setup.outputNotNullEvaluator.path, - }, - ], - }); - - // Verify evaluation - const evaluationsResponse = await humanloopClient.evaluations.list({ - fileId: newPromptVersionResponse.id, - }); - expect(evaluationsResponse.data.length).toBe(1); - - const evaluationId = evaluationsResponse.data[0].id; - const runsResponse = - await humanloopClient.evaluations.listRunsForEvaluation(evaluationId); - expect(runsResponse.runs[0].status).toBe("completed"); - if (runsResponse.runs[0].version) { - expect(runsResponse.runs[0].version.versionId).toBe( - newPromptVersionResponse.versionId, - ); - } - - // Verify version is not the default - const response = await humanloopClient.prompts.get( - newPromptVersionResponse.id, - ); - expect(response.versionId).not.toBe(newPromptVersionResponse.versionId); - } finally { - // Clean up test-specific resources - await cleanupTestEnvironment(setup); - } - }); - - it("should run evaluation with environment", async () => { - // Setup test-specific environment - const setup = await setupTestEnvironment("environment"); - - try { - // Create a new prompt version and deploy to staging - const newPromptVersionResponse = await humanloopClient.prompts.upsert({ - path: setup.evalPrompt.path, - provider: "openai", - model: "gpt-4o-mini", - temperature: 0, - template: [ - { - role: "system", - content: - "You are a helpful assistant. You must answer the user's question truthfully and at the level of a 5th grader.", - }, - { - role: "user", - content: "{{question}}", - }, - ], - }); - - await humanloopClient.prompts.setDeployment( - newPromptVersionResponse.id, - setup.stagingEnvironmentId, - { - versionId: newPromptVersionResponse.versionId, - }, - ); - - // Run evaluation with environment - await humanloopClient.evaluations.run({ - file: { - id: newPromptVersionResponse.id, - type: "prompt", - environment: "staging", - }, - dataset: { - path: setup.evalDataset.path, - }, - name: "test_eval_run", - evaluators: [ - { - path: setup.outputNotNullEvaluator.path, - }, - ], - }); - - // Verify evaluation - const evaluationsResponse = await humanloopClient.evaluations.list({ - fileId: newPromptVersionResponse.id, - }); - expect(evaluationsResponse.data.length).toBe(1); - - const evaluationId = evaluationsResponse.data[0].id; - const runsResponse = - await humanloopClient.evaluations.listRunsForEvaluation(evaluationId); - expect(runsResponse.runs[0].status).toBe("completed"); - if (runsResponse.runs[0].version) { - expect(runsResponse.runs[0].version.versionId).toBe( - newPromptVersionResponse.versionId, - ); - } - - const defaultPromptVersionResponse = await humanloopClient.prompts.get( - newPromptVersionResponse.id, - ); - expect(defaultPromptVersionResponse.versionId).not.toBe( - newPromptVersionResponse.versionId, - ); - } finally { - // Clean up test-specific resources - await cleanupTestEnvironment(setup); - } - }); - - it("should fail when using version_id with path", async () => { - // Setup test-specific environment - const setup = await setupTestEnvironment("fail_with_version_id"); - - try { - try { - await humanloopClient.evaluations.run({ - file: { - path: setup.evalPrompt.path, - type: "prompt", - versionId: "will_not_work", - }, - dataset: { - path: setup.evalDataset.path, - }, - name: "test_eval_run", - evaluators: [ - { - path: setup.outputNotNullEvaluator.path, - }, - ], - }); - // If we got here, the test failed - throw new Error("Expected runtime error but none was thrown"); - } catch (error: any) { - if (error instanceof HumanloopRuntimeError) { - expect(error.message).toContain( - "You must provide the `file.id` when addressing a file by version ID or environment", - ); - } else { - throw new Error( - `Expected test to fail for version_id but got ${error}`, - ); - } - } - } finally { - // Clean up test-specific resources - await cleanupTestEnvironment(setup); - } - }); - - it("should fail when using environment with path", async () => { - // Setup test-specific environment - const setup = await setupTestEnvironment("fail_with_environment"); - - try { - await humanloopClient.evaluations.run({ - file: { - path: setup.evalPrompt.path, - type: "prompt", - environment: "staging", - }, - dataset: { - path: setup.evalDataset.path, - }, - name: "test_eval_run", - evaluators: [ - { - path: setup.outputNotNullEvaluator.path, - }, - ], - }); - // If we got here, the test failed - throw new Error("Expected runtime error but none was thrown"); - } catch (error: any) { - if (error instanceof HumanloopRuntimeError) { - expect(error.message).toContain( - "You must provide the `file.id` when addressing a file by version ID or environment", - ); - } else { - throw new Error( - `Expected test to fail for environment but got ${error}`, - ); - } - } finally { - // Clean up test-specific resources - await cleanupTestEnvironment(setup); - } - }); - - it("should run evaluation with version upsert", async () => { - // Setup test-specific environment - const setup = await setupTestEnvironment("version_upsert"); - - try { - await humanloopClient.evaluations.run({ - file: { - path: setup.evalPrompt.path, - type: "prompt", - version: { - provider: "openai", - model: "gpt-4o-mini", - temperature: 1, - template: [ - { - role: "system", - content: - "You are a helpful assistant. You must answer the user's question truthfully and at the level of a 5th grader.", - }, - { - role: "user", - content: "{{question}}", - }, - ], - }, - }, - dataset: { - path: setup.evalDataset.path, - }, - name: "test_eval_run", - evaluators: [ - { - path: setup.outputNotNullEvaluator.path, - }, - ], - }); - - // Verify evaluation - const evaluationsResponse = await humanloopClient.evaluations.list({ - fileId: setup.evalPrompt.id, - }); - expect(evaluationsResponse.data.length).toBe(1); - - const evaluationId = evaluationsResponse.data[0].id; - const runsResponse = - await humanloopClient.evaluations.listRunsForEvaluation(evaluationId); - expect(runsResponse.runs[0].status).toBe("completed"); - - // Verify version upsert - const listPromptVersionsResponse = - await humanloopClient.prompts.listVersions(setup.evalPrompt.id); - expect(listPromptVersionsResponse.records.length).toBe(2); - } finally { - // Clean up test-specific resources - await cleanupTestEnvironment(setup); - } - }); - - it("should fail flow eval without callable", async () => { - // Setup test-specific environment - const setup = await setupTestEnvironment("flow_fail_without_callable"); - - try { - try { - await humanloopClient.evaluations.run({ - file: { - path: "Test Flow", - type: "flow", - version: { - attributes: { - foo: "bar", - }, - }, - }, - dataset: { - path: setup.evalDataset.path, - }, - name: "test_eval_run", - evaluators: [ - { - path: setup.outputNotNullEvaluator.path, - }, - ], - }); - // If we got here, the test failed - fail("Expected runtime error but none was thrown"); - } catch (error: any) { - expect(error.message).toContain( - "You must provide a `callable` for your Flow `file` to run a local eval.", - ); - } - } finally { - // Clean up test-specific resources - await cleanupTestEnvironment(setup); - } - }); - - it("should run flow eval with callable", async () => { - // Setup test-specific environment - const setup = await setupTestEnvironment("flow_with_callable"); - - try { - const flowPath = `${setup.sdkTestDir.path}/Test Flow`; - - // Create flow - const flowResponse = await humanloopClient.flows.upsert({ - path: flowPath, - attributes: { - foo: "bar", - }, - }); - - try { - const flow = await humanloopClient.flows.upsert({ - path: flowPath, - attributes: { - foo: "bar", - }, - }); - - // Run evaluation with flow - await humanloopClient.evaluations.run({ - file: { - id: flow.id, - type: "flow", - callable: ({ question }) => - "It's complicated don't worry about it", - version: { - attributes: { - foo: "bar", - }, - }, - }, - dataset: { - path: setup.evalDataset.path, - }, - name: "test_eval_run", - evaluators: [ - { - path: setup.outputNotNullEvaluator.path, - }, - ], - }); - - // Verify evaluation - const evaluationsResponse = await humanloopClient.evaluations.list({ - fileId: flow.id, - }); - expect(evaluationsResponse.data.length).toBe(1); - - const evaluationId = evaluationsResponse.data[0].id; - const runsResponse = - await humanloopClient.evaluations.listRunsForEvaluation( - evaluationId, - ); - expect(runsResponse.runs[0].status).toBe("completed"); - } finally { - await humanloopClient.flows.delete(flowResponse.id); - } - } finally { - // Clean up test-specific resources - await cleanupTestEnvironment(setup); - } - }); - - it("should not allow evaluating agent with callable", async () => { - // Setup test-specific environment - const setup = await setupTestEnvironment("agent_with_callable"); - - try { - try { - await humanloopClient.evaluations.run({ - file: { - path: "Test Agent", - type: "agent", - callable: (inputs: any) => "bar", - }, - dataset: { - path: setup.evalDataset.path, - }, - name: "test_eval_run", - evaluators: [ - { - path: setup.outputNotNullEvaluator.path, - }, - ], - }); - // If we got here, the test failed - fail("Expected ValueError but none was thrown"); - } catch (error: any) { - expect(error.message).toBe( - "Agent evaluation is only possible on the Humanloop runtime, do not provide a `callable`.", - ); - } - } finally { - // Clean up test-specific resources - await cleanupTestEnvironment(setup); - } - }); - - it("should resolve to default flow version when callable is provided without version", async () => { - // Setup test-specific environment - const setup = await setupTestEnvironment("flow_with_callable_without_version"); - let flowResponse: FlowResponse; - try { - const flowPath = `${setup.sdkTestDir.path}/Test Flow`; - - // Create flow - flowResponse = await humanloopClient.flows.upsert({ - path: flowPath, - attributes: { - foo: "bar", - }, - }); - - // Run evaluation with flow - await humanloopClient.evaluations.run({ - file: { - id: flowResponse.id, - type: "flow", - callable: ({ question }) => "It's complicated don't worry about it", - }, - dataset: { - path: setup.evalDataset.path, - }, - name: "test_eval_run", - evaluators: [ - { - path: setup.outputNotNullEvaluator.path, - }, - ], - }); - - // Verify evaluation - const evaluationsResponse = await humanloopClient.evaluations.list({ - fileId: flowResponse.id, - }); - expect(evaluationsResponse.data.length).toBe(1); - - const evaluationId = evaluationsResponse.data[0].id; - const runsResponse = - await humanloopClient.evaluations.listRunsForEvaluation(evaluationId); - expect(runsResponse.runs[0].status).toBe("completed"); - } finally { - // Clean up test-specific resources - await cleanupTestEnvironment(setup, [ - { id: flowResponse!.id, type: "flow" }, - ]); - } - }); -}); diff --git a/tests/integration/fixtures.ts b/tests/integration/fixtures.ts deleted file mode 100644 index 41ccf486..00000000 --- a/tests/integration/fixtures.ts +++ /dev/null @@ -1,246 +0,0 @@ -import dotenv from "dotenv"; -import { OpenAI } from "openai"; -import { v4 as uuidv4 } from "uuid"; - -import { FileType, PromptRequest, PromptResponse } from "../../src/api"; -import { HumanloopClient } from "../../src/humanloop.client"; - -export interface TestIdentifiers { - id: string; - path: string; -} - -export interface TestPrompt { - id: string; - path: string; - response: PromptResponse; -} - -export interface TestSetup { - sdkTestDir: TestIdentifiers; - testPromptConfig: PromptRequest; - openaiApiKey: string; - humanloopClient: HumanloopClient; - evalDataset: TestIdentifiers; - evalPrompt: TestIdentifiers; - stagingEnvironmentId: string; - outputNotNullEvaluator: TestIdentifiers; -} - -export interface CleanupResources { - type: FileType; - id: string; -} - -export function readEnvironment(): void { - if (![process.env.HUMANLOOP_API_KEY, process.env.OPENAI_API_KEY].every(Boolean)) { - // Testing locally not in CI, running dotenv.config() would override the secrets set for GitHub Action - dotenv.config({}); - } - if (!process.env.HUMANLOOP_API_KEY) { - throw new Error("HUMANLOOP_API_KEY is not set"); - } - if (!process.env.OPENAI_API_KEY) { - throw new Error("OPENAI_API_KEY is not set for integration tests"); - } -} - -export function getSubclient(client: HumanloopClient, type: FileType) { - switch (type) { - case "prompt": - return client.prompts; - case "tool": - return client.tools; - case "flow": - return client.flows; - case "agent": - return client.agents; - case "dataset": - return client.datasets; - case "evaluator": - return client.evaluators; - default: - throw new Error(`Unsupported file type: ${type}`); - } -} - -export async function setupTestEnvironment(testName: string): Promise { - readEnvironment(); - - const openaiApiKey = process.env.OPENAI_API_KEY!; - const humanloopClient = new HumanloopClient({ - apiKey: process.env.HUMANLOOP_API_KEY, - instrumentProviders: { - OpenAI: OpenAI, - }, - }); - - // Create a test directory - const directoryPath = `SDK_TEST_${testName}_${uuidv4()}`; - const response = await humanloopClient.directories.create({ - path: directoryPath, - }); - - const sdkTestDir = { - id: response.id, - path: response.path, - }; - - // Create test prompt config - const testPromptConfig: PromptRequest = { - provider: "openai", - model: "gpt-4o-mini", - temperature: 0.5, - template: [ - { - role: "system", - content: "You are a helpful assistant. Answer concisely.", - }, - { - role: "user", - content: "{{question}}", - }, - ], - }; - - // Create evaluator for testing - const evaluatorPath = `${sdkTestDir.path}/output_not_null_evaluator`; - const evaluatorResponse = await humanloopClient.evaluators.upsert({ - path: evaluatorPath, - spec: { - argumentsType: "target_required", - returnType: "boolean", - code: ` -def output_not_null(log: dict) -> bool: - return log["output"] is not None - `, - evaluatorType: "python", - }, - }); - const outputNotNullEvaluator = { - id: evaluatorResponse.id, - path: evaluatorPath, - }; - - // Create dataset for testing - const datasetPath = `${sdkTestDir.path}/eval_dataset`; - const datasetResponse = await humanloopClient.datasets.upsert({ - path: datasetPath, - datapoints: [ - { - inputs: { question: "What is the capital of the France?" }, - target: { output: "Paris" }, - }, - { - inputs: { question: "What is the capital of the Germany?" }, - target: { output: "Berlin" }, - }, - { - inputs: { question: "What is 2+2?" }, - target: { output: "4" }, - }, - ], - }); - const evalDataset = { - id: datasetResponse.id, - path: datasetResponse.path, - }; - - // Create prompt - const promptPath = `${sdkTestDir.path}/eval_prompt`; - const promptResponse = await humanloopClient.prompts.upsert({ - path: promptPath, - ...(testPromptConfig as PromptRequest), - }); - const evalPrompt = { - id: promptResponse.id, - path: promptResponse.path, - }; - - // Get staging environment ID - const environmentsResponse = await humanloopClient.prompts.listEnvironments( - evalPrompt.id, - ); - let stagingEnvironmentId = ""; - for (const environment of environmentsResponse) { - if (environment.name === "staging") { - stagingEnvironmentId = environment.id; - break; - } - } - if (!stagingEnvironmentId) { - throw new Error("Staging environment not found"); - } - - return { - testPromptConfig, - openaiApiKey, - humanloopClient, - sdkTestDir, - outputNotNullEvaluator, - evalDataset, - evalPrompt, - stagingEnvironmentId, - }; -} - -/** - * Cleans up all test resources - * @param setup The test setup containing the resources - * @param resources Additional resources to clean up - */ -export async function cleanupTestEnvironment( - setup: TestSetup, - resources?: CleanupResources[], -): Promise { - try { - // First clean up any additional resources - if (resources) { - for (const resource of resources) { - const subclient = getSubclient(setup.humanloopClient, resource.type); - if (resource.id) { - await subclient.delete(resource.id); - } - } - } - - // Clean up fixed test resources - if (setup.outputNotNullEvaluator?.id) { - try { - await setup.humanloopClient.evaluators.delete( - setup.outputNotNullEvaluator.id, - ); - } catch (error) { - console.warn( - `Failed to delete evaluator ${setup.outputNotNullEvaluator.id}:`, - error, - ); - } - } - - if (setup.evalDataset?.id) { - try { - await setup.humanloopClient.datasets.delete(setup.evalDataset.id); - } catch (error) { - console.warn( - `Failed to delete dataset ${setup.evalDataset.id}:`, - error, - ); - } - } - - // Finally, clean up the test directory - if (setup.sdkTestDir.id) { - try { - await setup.humanloopClient.directories.delete(setup.sdkTestDir.id); - } catch (error) { - console.warn( - `Failed to delete directory ${setup.sdkTestDir.id}:`, - error, - ); - } - } - } catch (error) { - console.error("Error during cleanup:", error); - } -} diff --git a/yarn.lock b/yarn.lock index d6cee5a6..3903fef2 100644 --- a/yarn.lock +++ b/yarn.lock @@ -79,15 +79,15 @@ "@smithy/util-utf8" "^2.0.0" tslib "^2.6.2" -"@aws-sdk/client-cognito-identity@3.799.0": - version "3.799.0" - resolved "https://registry.yarnpkg.com/@aws-sdk/client-cognito-identity/-/client-cognito-identity-3.799.0.tgz#80fd73c4e664427e86026f9a302f6b646d935d46" - integrity sha512-gg1sncxYDpYWetey3v/nw9zSkL/Vj2potpeO9sYWY2brcm8SbGh106I6IM/gX6KnY9Y2Bre8xb+JoZGz6ntcnw== +"@aws-sdk/client-cognito-identity@3.803.0": + version "3.803.0" + resolved "https://registry.yarnpkg.com/@aws-sdk/client-cognito-identity/-/client-cognito-identity-3.803.0.tgz#f3356113d9555806bae029d29c34edfb5ed06fe9" + integrity sha512-VxcFO2AiHQwdWBcSLaPGEOy8c2ZJtRrzKjOuOwpTh4LhFPgrtfPgL66i46h7kLFGx56awq0WBSSvJQBxIdJ1Tw== dependencies: "@aws-crypto/sha256-browser" "5.2.0" "@aws-crypto/sha256-js" "5.2.0" "@aws-sdk/core" "3.799.0" - "@aws-sdk/credential-provider-node" "3.799.0" + "@aws-sdk/credential-provider-node" "3.803.0" "@aws-sdk/middleware-host-header" "3.775.0" "@aws-sdk/middleware-logger" "3.775.0" "@aws-sdk/middleware-recursion-detection" "3.775.0" @@ -104,7 +104,7 @@ "@smithy/invalid-dependency" "^4.0.2" "@smithy/middleware-content-length" "^4.0.2" "@smithy/middleware-endpoint" "^4.1.1" - "@smithy/middleware-retry" "^4.1.1" + "@smithy/middleware-retry" "^4.1.2" "@smithy/middleware-serde" "^4.0.3" "@smithy/middleware-stack" "^4.0.2" "@smithy/node-config-provider" "^4.0.2" @@ -120,19 +120,19 @@ "@smithy/util-defaults-mode-node" "^4.0.9" "@smithy/util-endpoints" "^3.0.2" "@smithy/util-middleware" "^4.0.2" - "@smithy/util-retry" "^4.0.2" + "@smithy/util-retry" "^4.0.3" "@smithy/util-utf8" "^4.0.0" tslib "^2.6.2" "@aws-sdk/client-sagemaker@^3.583.0": - version "3.799.0" - resolved "https://registry.yarnpkg.com/@aws-sdk/client-sagemaker/-/client-sagemaker-3.799.0.tgz#b6b4481f707c7e5d2536fe307e6f341f995a5827" - integrity sha512-So85e7gS7VW64ePgeVJNCxbSMU2tINQk/f3TRe7yKfdxQVvyq53jx88AwJgk2WUZYJxlDgEK6fBDvimzwFKJDA== + version "3.803.0" + resolved "https://registry.yarnpkg.com/@aws-sdk/client-sagemaker/-/client-sagemaker-3.803.0.tgz#a441f53c9d0c6dedad2a5f52b792ea5d08aa8698" + integrity sha512-CC7PTNDzVhCzZufELcB7zFTEwE3pqaLgq/DxNjkuNwD1GTHZ83nhkedzp8pcFUr43lIn6WpDbGGODIZeIKEr3A== dependencies: "@aws-crypto/sha256-browser" "5.2.0" "@aws-crypto/sha256-js" "5.2.0" "@aws-sdk/core" "3.799.0" - "@aws-sdk/credential-provider-node" "3.799.0" + "@aws-sdk/credential-provider-node" "3.803.0" "@aws-sdk/middleware-host-header" "3.775.0" "@aws-sdk/middleware-logger" "3.775.0" "@aws-sdk/middleware-recursion-detection" "3.775.0" @@ -149,7 +149,7 @@ "@smithy/invalid-dependency" "^4.0.2" "@smithy/middleware-content-length" "^4.0.2" "@smithy/middleware-endpoint" "^4.1.1" - "@smithy/middleware-retry" "^4.1.1" + "@smithy/middleware-retry" "^4.1.2" "@smithy/middleware-serde" "^4.0.3" "@smithy/middleware-stack" "^4.0.2" "@smithy/node-config-provider" "^4.0.2" @@ -165,17 +165,17 @@ "@smithy/util-defaults-mode-node" "^4.0.9" "@smithy/util-endpoints" "^3.0.2" "@smithy/util-middleware" "^4.0.2" - "@smithy/util-retry" "^4.0.2" + "@smithy/util-retry" "^4.0.3" "@smithy/util-utf8" "^4.0.0" "@smithy/util-waiter" "^4.0.3" "@types/uuid" "^9.0.1" tslib "^2.6.2" uuid "^9.0.1" -"@aws-sdk/client-sso@3.799.0": - version "3.799.0" - resolved "https://registry.yarnpkg.com/@aws-sdk/client-sso/-/client-sso-3.799.0.tgz#4e1e0831100a93147e9cfb8b29bcee88344effa0" - integrity sha512-/i/LG7AiWPmPxKCA2jnR2zaf7B3HYSTbxaZI21ElIz9wASlNAsKr8CnLY7qb50kOyXiNfQ834S5Q3Gl8dX9o3Q== +"@aws-sdk/client-sso@3.803.0": + version "3.803.0" + resolved "https://registry.yarnpkg.com/@aws-sdk/client-sso/-/client-sso-3.803.0.tgz#16a4611e279694effcbb65d9d65ed1d64c635855" + integrity sha512-TT3BRD1yiL3IGXBKfq560vvEdyOJtJr8bp+R82dD6P0IoS8aFcNtF822BOJy7CqvxksOc3hQKLaPVzE82gE8Ow== dependencies: "@aws-crypto/sha256-browser" "5.2.0" "@aws-crypto/sha256-js" "5.2.0" @@ -196,7 +196,7 @@ "@smithy/invalid-dependency" "^4.0.2" "@smithy/middleware-content-length" "^4.0.2" "@smithy/middleware-endpoint" "^4.1.1" - "@smithy/middleware-retry" "^4.1.1" + "@smithy/middleware-retry" "^4.1.2" "@smithy/middleware-serde" "^4.0.3" "@smithy/middleware-stack" "^4.0.2" "@smithy/node-config-provider" "^4.0.2" @@ -212,7 +212,7 @@ "@smithy/util-defaults-mode-node" "^4.0.9" "@smithy/util-endpoints" "^3.0.2" "@smithy/util-middleware" "^4.0.2" - "@smithy/util-retry" "^4.0.2" + "@smithy/util-retry" "^4.0.3" "@smithy/util-utf8" "^4.0.0" tslib "^2.6.2" @@ -233,12 +233,12 @@ fast-xml-parser "4.4.1" tslib "^2.6.2" -"@aws-sdk/credential-provider-cognito-identity@3.799.0": - version "3.799.0" - resolved "https://registry.yarnpkg.com/@aws-sdk/credential-provider-cognito-identity/-/credential-provider-cognito-identity-3.799.0.tgz#eba1a19bb7bacd37371e2e0dbd3f126145ef9d88" - integrity sha512-qHOqGsvt/z1bvjJRzndW8VaRfbGBhoETZpoRYNbfCbrNH2IRM98KRUlYH1EJ1wFFkT0gUDJr+oIOUCvRlgRW1Q== +"@aws-sdk/credential-provider-cognito-identity@3.803.0": + version "3.803.0" + resolved "https://registry.yarnpkg.com/@aws-sdk/credential-provider-cognito-identity/-/credential-provider-cognito-identity-3.803.0.tgz#3c34f7f32a74833cea9e7ffa1d734abecae08291" + integrity sha512-1lJ3DPu4IBChPG7Fded+6tMGZiaILzg4q00QQzab1SM90DLo95RPOoe9gYQ1B5aDHuzZafil/HQYVdl4gARe7g== dependencies: - "@aws-sdk/client-cognito-identity" "3.799.0" + "@aws-sdk/client-cognito-identity" "3.803.0" "@aws-sdk/types" "3.775.0" "@smithy/property-provider" "^4.0.2" "@smithy/types" "^4.2.0" @@ -271,18 +271,18 @@ "@smithy/util-stream" "^4.2.0" tslib "^2.6.2" -"@aws-sdk/credential-provider-ini@3.799.0": - version "3.799.0" - resolved "https://registry.yarnpkg.com/@aws-sdk/credential-provider-ini/-/credential-provider-ini-3.799.0.tgz#89ed328e40d2bf0c37453c26b1dd74201c61da2c" - integrity sha512-M9ubILFxerqw4QJwk83MnjtZyoA2eNCiea5V+PzZeHlwk2PON/EnawKqy65x9/hMHGoSvvNuby7iMAmPptu7yw== +"@aws-sdk/credential-provider-ini@3.803.0": + version "3.803.0" + resolved "https://registry.yarnpkg.com/@aws-sdk/credential-provider-ini/-/credential-provider-ini-3.803.0.tgz#5f831e53cf475756052aba81b128d66d8ba5a52f" + integrity sha512-XtbFftJex18GobpRWJxg5V7stVwvmV2gdBYW+zRM0YW6NZAR4NP/4vcc9ktM3++BWW5OF4Kvl7Nu7N4mAzRHmw== dependencies: "@aws-sdk/core" "3.799.0" "@aws-sdk/credential-provider-env" "3.799.0" "@aws-sdk/credential-provider-http" "3.799.0" "@aws-sdk/credential-provider-process" "3.799.0" - "@aws-sdk/credential-provider-sso" "3.799.0" - "@aws-sdk/credential-provider-web-identity" "3.799.0" - "@aws-sdk/nested-clients" "3.799.0" + "@aws-sdk/credential-provider-sso" "3.803.0" + "@aws-sdk/credential-provider-web-identity" "3.803.0" + "@aws-sdk/nested-clients" "3.803.0" "@aws-sdk/types" "3.775.0" "@smithy/credential-provider-imds" "^4.0.2" "@smithy/property-provider" "^4.0.2" @@ -290,17 +290,17 @@ "@smithy/types" "^4.2.0" tslib "^2.6.2" -"@aws-sdk/credential-provider-node@3.799.0": - version "3.799.0" - resolved "https://registry.yarnpkg.com/@aws-sdk/credential-provider-node/-/credential-provider-node-3.799.0.tgz#45e646a24f105782dbaf3c55951dbae32ae73074" - integrity sha512-nd9fSJc0wUlgKUkIr2ldJhcIIrzJFS29AGZoyY22J3xih63nNDv61eTGVMsDZzHlV21XzMlPEljTR7axiimckg== +"@aws-sdk/credential-provider-node@3.803.0": + version "3.803.0" + resolved "https://registry.yarnpkg.com/@aws-sdk/credential-provider-node/-/credential-provider-node-3.803.0.tgz#bcfd9638f7f8e8a1b78fc2c58346daf7f67389e2" + integrity sha512-lPdRYbjxwmv7gRqbaEe1Y1Yl5fD4c43AuK3P31eKjf1j41hZEQ0dg9a9KLk7i6ehEoVsxewnJrvbC2pVoYrCmQ== dependencies: "@aws-sdk/credential-provider-env" "3.799.0" "@aws-sdk/credential-provider-http" "3.799.0" - "@aws-sdk/credential-provider-ini" "3.799.0" + "@aws-sdk/credential-provider-ini" "3.803.0" "@aws-sdk/credential-provider-process" "3.799.0" - "@aws-sdk/credential-provider-sso" "3.799.0" - "@aws-sdk/credential-provider-web-identity" "3.799.0" + "@aws-sdk/credential-provider-sso" "3.803.0" + "@aws-sdk/credential-provider-web-identity" "3.803.0" "@aws-sdk/types" "3.775.0" "@smithy/credential-provider-imds" "^4.0.2" "@smithy/property-provider" "^4.0.2" @@ -320,48 +320,48 @@ "@smithy/types" "^4.2.0" tslib "^2.6.2" -"@aws-sdk/credential-provider-sso@3.799.0": - version "3.799.0" - resolved "https://registry.yarnpkg.com/@aws-sdk/credential-provider-sso/-/credential-provider-sso-3.799.0.tgz#535dd1d1abe5f2567551514444f18b79993ac92e" - integrity sha512-lQv27QkNU9FJFZqEf5DIEN3uXEN409Iaym9WJzhOouGtxvTIAWiD23OYh1u8PvBdrordJGS2YddfQvhcmq9akw== +"@aws-sdk/credential-provider-sso@3.803.0": + version "3.803.0" + resolved "https://registry.yarnpkg.com/@aws-sdk/credential-provider-sso/-/credential-provider-sso-3.803.0.tgz#8a0a48a9acaab8f4e5c172427cc476a2f3513aaa" + integrity sha512-HEAcxSHrHxVekGnZqjFrkqdYAf4jFiZIMhuh0jqiqY6A4udEyXy1V623HVcTz/XXj6UBRnyD+zmOmlbzBvkfQg== dependencies: - "@aws-sdk/client-sso" "3.799.0" + "@aws-sdk/client-sso" "3.803.0" "@aws-sdk/core" "3.799.0" - "@aws-sdk/token-providers" "3.799.0" + "@aws-sdk/token-providers" "3.803.0" "@aws-sdk/types" "3.775.0" "@smithy/property-provider" "^4.0.2" "@smithy/shared-ini-file-loader" "^4.0.2" "@smithy/types" "^4.2.0" tslib "^2.6.2" -"@aws-sdk/credential-provider-web-identity@3.799.0": - version "3.799.0" - resolved "https://registry.yarnpkg.com/@aws-sdk/credential-provider-web-identity/-/credential-provider-web-identity-3.799.0.tgz#ddf6c4e6f692289ba9e5db3ba9c63564742e5533" - integrity sha512-8k1i9ut+BEg0QZ+I6UQMxGNR1T8paLmAOAZXU+nLQR0lcxS6lr8v+dqofgzQPuHLBkWNCr1Av1IKeL3bJjgU7g== +"@aws-sdk/credential-provider-web-identity@3.803.0": + version "3.803.0" + resolved "https://registry.yarnpkg.com/@aws-sdk/credential-provider-web-identity/-/credential-provider-web-identity-3.803.0.tgz#9612bd4e2a2bdf2d3826f18b2138f8bd996605bb" + integrity sha512-oChnEpwI25OW4GPvhI1VnXM3IQEkDhESGFZd5JHzJDHyvSF2NU58V86jkJyaa4H4X25IbGaThuulNI5xCOngjw== dependencies: "@aws-sdk/core" "3.799.0" - "@aws-sdk/nested-clients" "3.799.0" + "@aws-sdk/nested-clients" "3.803.0" "@aws-sdk/types" "3.775.0" "@smithy/property-provider" "^4.0.2" "@smithy/types" "^4.2.0" tslib "^2.6.2" "@aws-sdk/credential-providers@^3.583.0": - version "3.799.0" - resolved "https://registry.yarnpkg.com/@aws-sdk/credential-providers/-/credential-providers-3.799.0.tgz#f86cff0bdaef9762b56132977186c4ec1e3249cd" - integrity sha512-Gk10skoEri6zsCPxn34Zpu6Z1B5R3RLwqDw1krNl+B1P749gB6i7XULXZUOotqpum0T0q4euOwAB8XWuTOkKew== + version "3.803.0" + resolved "https://registry.yarnpkg.com/@aws-sdk/credential-providers/-/credential-providers-3.803.0.tgz#3d1d5dc93e156efb88fdee78e42ce103213d1e1c" + integrity sha512-yuN2ZNVgeAKlLWAAwU7SIF0lkgSQEBoehl49x0FEUuk6snRcuO13/zYVrmaCvplx71ET6quPGJsknlaiUWtdwA== dependencies: - "@aws-sdk/client-cognito-identity" "3.799.0" + "@aws-sdk/client-cognito-identity" "3.803.0" "@aws-sdk/core" "3.799.0" - "@aws-sdk/credential-provider-cognito-identity" "3.799.0" + "@aws-sdk/credential-provider-cognito-identity" "3.803.0" "@aws-sdk/credential-provider-env" "3.799.0" "@aws-sdk/credential-provider-http" "3.799.0" - "@aws-sdk/credential-provider-ini" "3.799.0" - "@aws-sdk/credential-provider-node" "3.799.0" + "@aws-sdk/credential-provider-ini" "3.803.0" + "@aws-sdk/credential-provider-node" "3.803.0" "@aws-sdk/credential-provider-process" "3.799.0" - "@aws-sdk/credential-provider-sso" "3.799.0" - "@aws-sdk/credential-provider-web-identity" "3.799.0" - "@aws-sdk/nested-clients" "3.799.0" + "@aws-sdk/credential-provider-sso" "3.803.0" + "@aws-sdk/credential-provider-web-identity" "3.803.0" + "@aws-sdk/nested-clients" "3.803.0" "@aws-sdk/types" "3.775.0" "@smithy/config-resolver" "^4.1.0" "@smithy/core" "^3.3.0" @@ -413,10 +413,10 @@ "@smithy/types" "^4.2.0" tslib "^2.6.2" -"@aws-sdk/nested-clients@3.799.0": - version "3.799.0" - resolved "https://registry.yarnpkg.com/@aws-sdk/nested-clients/-/nested-clients-3.799.0.tgz#a3b223cfa22f809cee28eedea2ce1f30175665f9" - integrity sha512-zILlWh7asrcQG9JYMYgnvEQBfwmWKfED0yWCf3UNAmQcfS9wkCAWCgicNy/y5KvNvEYnHidsU117STtyuUNG5g== +"@aws-sdk/nested-clients@3.803.0": + version "3.803.0" + resolved "https://registry.yarnpkg.com/@aws-sdk/nested-clients/-/nested-clients-3.803.0.tgz#aa5852a9c8b48bcad903ac841952b93ffd0bd3b3" + integrity sha512-wiWiYaFQxK2u37G9IOXuWkHelEbU8ulLxdHpoPf0TSu/1boqLW7fcofuZATAvFcvigQx3oebwO8G4c/mmixTTw== dependencies: "@aws-crypto/sha256-browser" "5.2.0" "@aws-crypto/sha256-js" "5.2.0" @@ -437,7 +437,7 @@ "@smithy/invalid-dependency" "^4.0.2" "@smithy/middleware-content-length" "^4.0.2" "@smithy/middleware-endpoint" "^4.1.1" - "@smithy/middleware-retry" "^4.1.1" + "@smithy/middleware-retry" "^4.1.2" "@smithy/middleware-serde" "^4.0.3" "@smithy/middleware-stack" "^4.0.2" "@smithy/node-config-provider" "^4.0.2" @@ -453,7 +453,7 @@ "@smithy/util-defaults-mode-node" "^4.0.9" "@smithy/util-endpoints" "^3.0.2" "@smithy/util-middleware" "^4.0.2" - "@smithy/util-retry" "^4.0.2" + "@smithy/util-retry" "^4.0.3" "@smithy/util-utf8" "^4.0.0" tslib "^2.6.2" @@ -485,12 +485,12 @@ "@smithy/signature-v4" "^1.0.1" tslib "^2.5.0" -"@aws-sdk/token-providers@3.799.0": - version "3.799.0" - resolved "https://registry.yarnpkg.com/@aws-sdk/token-providers/-/token-providers-3.799.0.tgz#7b2cc6aa5b1a1058490b780ff975de29218ef3a0" - integrity sha512-/8iDjnsJs/D8AhGbDAmdF5oSHzE4jsDsM2RIIxmBAKTZXkaaclQBNX9CmAqLKQmO3IUMZsDH2KENHLVAk/N/mw== +"@aws-sdk/token-providers@3.803.0": + version "3.803.0" + resolved "https://registry.yarnpkg.com/@aws-sdk/token-providers/-/token-providers-3.803.0.tgz#ba0f6b2919521125cf9c280bc3de1135c4e47e25" + integrity sha512-lDbMgVjWWEPT7a6lLaAEPPljwOeLTjPX2sJ7MoDICpQotg4Yd8cQfX3nqScSyLAGSc7Rq/21UPnPoij/E0K3lg== dependencies: - "@aws-sdk/nested-clients" "3.799.0" + "@aws-sdk/nested-clients" "3.803.0" "@aws-sdk/types" "3.775.0" "@smithy/property-provider" "^4.0.2" "@smithy/shared-ini-file-loader" "^4.0.2" @@ -559,10 +559,10 @@ js-tokens "^4.0.0" picocolors "^1.1.1" -"@babel/compat-data@^7.27.1": - version "7.27.1" - resolved "https://registry.yarnpkg.com/@babel/compat-data/-/compat-data-7.27.1.tgz#db7cf122745e0a332c44e847ddc4f5e5221a43f6" - integrity sha512-Q+E+rd/yBzNQhXkG+zQnF58e4zoZfBedaxwzPmicKsiK3nt8iJYrSrDbjwFFDGC4f+rPafqRaPH6TsDoSvMf7A== +"@babel/compat-data@^7.27.2": + version "7.27.2" + resolved "https://registry.yarnpkg.com/@babel/compat-data/-/compat-data-7.27.2.tgz#4183f9e642fd84e74e3eea7ffa93a412e3b102c9" + integrity sha512-TUtMJYRPyUb/9aU8f3K0mjmjf6M9N5Woshn2CS6nqJSeJtTtQcpLUXjGt9vbF8ZGff0El99sWkLgzwW3VXnxZQ== "@babel/core@^7.11.6", "@babel/core@^7.12.3", "@babel/core@^7.23.9": version "7.27.1" @@ -606,11 +606,11 @@ jsesc "^3.0.2" "@babel/helper-compilation-targets@^7.27.1": - version "7.27.1" - resolved "https://registry.yarnpkg.com/@babel/helper-compilation-targets/-/helper-compilation-targets-7.27.1.tgz#eac1096c7374f161e4f33fc8ae38f4ddf122087a" - integrity sha512-2YaDd/Rd9E598B5+WIc8wJPmWETiiJXFYVE60oX8FDohv7rAUU3CQj+A1MgeEmcsk2+dQuEjIe/GDvig0SqL4g== + version "7.27.2" + resolved "https://registry.yarnpkg.com/@babel/helper-compilation-targets/-/helper-compilation-targets-7.27.2.tgz#46a0f6efab808d51d29ce96858dd10ce8732733d" + integrity sha512-2+1thGUUWWjLTYTHZWK1n8Yga0ijBz1XAhUXcKy81rd5g6yh7hGqMp45v7cadSbEHc9G3OTv45SyneRN3ps4DQ== dependencies: - "@babel/compat-data" "^7.27.1" + "@babel/compat-data" "^7.27.2" "@babel/helper-validator-option" "^7.27.1" browserslist "^4.24.0" lru-cache "^5.1.1" @@ -690,10 +690,10 @@ "@babel/template" "^7.27.1" "@babel/types" "^7.27.1" -"@babel/parser@^7.1.0", "@babel/parser@^7.14.7", "@babel/parser@^7.20.5", "@babel/parser@^7.20.7", "@babel/parser@^7.23.0", "@babel/parser@^7.23.9", "@babel/parser@^7.27.1": - version "7.27.1" - resolved "https://registry.yarnpkg.com/@babel/parser/-/parser-7.27.1.tgz#c55d5bed74449d1223701f1869b9ee345cc94cc9" - integrity sha512-I0dZ3ZpCrJ1c04OqlNsQcKiZlsrXf/kkE4FXzID9rIOYICsAbA8mMDzhW/luRNAHdCNt7os/u8wenklZDlUVUQ== +"@babel/parser@^7.1.0", "@babel/parser@^7.14.7", "@babel/parser@^7.20.5", "@babel/parser@^7.20.7", "@babel/parser@^7.23.0", "@babel/parser@^7.23.9", "@babel/parser@^7.27.1", "@babel/parser@^7.27.2": + version "7.27.2" + resolved "https://registry.yarnpkg.com/@babel/parser/-/parser-7.27.2.tgz#577518bedb17a2ce4212afd052e01f7df0941127" + integrity sha512-QYLs8299NA7WM/bZAdp+CviYYkVoYXlDW2rzliy3chxd1PQjej7JORuMJDJXJUb9g0TT+B99EwaVLKmX+sPXWw== dependencies: "@babel/types" "^7.27.1" @@ -817,12 +817,12 @@ "@babel/helper-plugin-utils" "^7.27.1" "@babel/template@^7.24.7", "@babel/template@^7.27.1", "@babel/template@^7.3.3": - version "7.27.1" - resolved "https://registry.yarnpkg.com/@babel/template/-/template-7.27.1.tgz#b9e4f55c17a92312774dfbdde1b3c01c547bbae2" - integrity sha512-Fyo3ghWMqkHHpHQCoBs2VnYjR4iWFFjguTDEqA5WgZDOrFesVjMhMM2FSqTKSoUSDO1VQtavj8NFpdRBEvJTtg== + version "7.27.2" + resolved "https://registry.yarnpkg.com/@babel/template/-/template-7.27.2.tgz#fa78ceed3c4e7b63ebf6cb39e5852fca45f6809d" + integrity sha512-LPDZ85aEJyYSd18/DkjNh4/y1ntkE5KwUHWTiqgRxruuZL2F1yuHligVHLvcHY2vMHXttKFpJn6LwfI7cw7ODw== dependencies: "@babel/code-frame" "^7.27.1" - "@babel/parser" "^7.27.1" + "@babel/parser" "^7.27.2" "@babel/types" "^7.27.1" "@babel/traverse@7.23.2": @@ -1240,10 +1240,10 @@ "@smithy/util-middleware" "^4.0.2" tslib "^2.6.2" -"@smithy/core@^3.3.0": - version "3.3.0" - resolved "https://registry.yarnpkg.com/@smithy/core/-/core-3.3.0.tgz#a6b141733fa530cb2f9b49a8e70ae98169c92cf0" - integrity sha512-r6gvs5OfRq/w+9unPm7B3po4rmWaGh0CIL/OwHntGGux7+RhOOZLGuurbeMgWV6W55ZuyMTypJLeH0vn/ZRaWQ== +"@smithy/core@^3.3.0", "@smithy/core@^3.3.1": + version "3.3.1" + resolved "https://registry.yarnpkg.com/@smithy/core/-/core-3.3.1.tgz#6119a683f62099158eb193e3745f4ade6de741dd" + integrity sha512-W7AppgQD3fP1aBmo8wWo0id5zeR2/aYRy067vZsDVaa6v/mdhkg6DxXwEVuSPjZl+ZnvWAQbUMCd5ckw38+tHQ== dependencies: "@smithy/middleware-serde" "^4.0.3" "@smithy/protocol-http" "^5.1.0" @@ -1334,12 +1334,12 @@ "@smithy/types" "^4.2.0" tslib "^2.6.2" -"@smithy/middleware-endpoint@^4.1.1": - version "4.1.1" - resolved "https://registry.yarnpkg.com/@smithy/middleware-endpoint/-/middleware-endpoint-4.1.1.tgz#d210cac102a645ea35541c17fda52c73f0b56304" - integrity sha512-z5RmcHxjvScL+LwEDU2mTNCOhgUs4lu5PGdF1K36IPRmUHhNFxNxgenSB7smyDiYD4vdKQ7CAZtG5cUErqib9w== +"@smithy/middleware-endpoint@^4.1.1", "@smithy/middleware-endpoint@^4.1.2": + version "4.1.2" + resolved "https://registry.yarnpkg.com/@smithy/middleware-endpoint/-/middleware-endpoint-4.1.2.tgz#d8ad5e4e439126d7bcc79f0046fc5f9518d8afd8" + integrity sha512-EqOy3xaEGQpsKxLlzYstDRJ8eY90CbyBP4cl+w7r45mE60S8YliyL9AgWsdWcyNiB95E2PMqHBEv67nNl1zLfg== dependencies: - "@smithy/core" "^3.3.0" + "@smithy/core" "^3.3.1" "@smithy/middleware-serde" "^4.0.3" "@smithy/node-config-provider" "^4.0.2" "@smithy/shared-ini-file-loader" "^4.0.2" @@ -1348,18 +1348,18 @@ "@smithy/util-middleware" "^4.0.2" tslib "^2.6.2" -"@smithy/middleware-retry@^4.1.1": - version "4.1.1" - resolved "https://registry.yarnpkg.com/@smithy/middleware-retry/-/middleware-retry-4.1.1.tgz#8c65dec6fca1f4883a10f724f9d6cafea19d0ba4" - integrity sha512-mBJOxn9aUYwcBUPQpKv9ifzrCn4EbhPUFguEZv3jB57YOMh0caS4P8HoLvUeNUI1nx4bIVH2SIbogbDfFI9DUA== +"@smithy/middleware-retry@^4.1.2": + version "4.1.3" + resolved "https://registry.yarnpkg.com/@smithy/middleware-retry/-/middleware-retry-4.1.3.tgz#6d22d21321b2089b4caeb79577a9b40bf4ac6ace" + integrity sha512-AsJtI9KiFoEGAhcEKZyzzPfrszAQGcf4HSYKmenz0WGx/6YNvoPPv4OSGfZTCsDmgPHv4pXzxE+7QV7jcGWNKw== dependencies: "@smithy/node-config-provider" "^4.0.2" "@smithy/protocol-http" "^5.1.0" - "@smithy/service-error-classification" "^4.0.2" - "@smithy/smithy-client" "^4.2.1" + "@smithy/service-error-classification" "^4.0.3" + "@smithy/smithy-client" "^4.2.2" "@smithy/types" "^4.2.0" "@smithy/util-middleware" "^4.0.2" - "@smithy/util-retry" "^4.0.2" + "@smithy/util-retry" "^4.0.3" tslib "^2.6.2" uuid "^9.0.1" @@ -1441,10 +1441,10 @@ "@smithy/types" "^4.2.0" tslib "^2.6.2" -"@smithy/service-error-classification@^4.0.2": - version "4.0.2" - resolved "https://registry.yarnpkg.com/@smithy/service-error-classification/-/service-error-classification-4.0.2.tgz#96740ed8be7ac5ad7d6f296d4ddf3f66444b8dcc" - integrity sha512-LA86xeFpTKn270Hbkixqs5n73S+LVM0/VZco8dqd+JT75Dyx3Lcw/MraL7ybjmz786+160K8rPOmhsq0SocoJQ== +"@smithy/service-error-classification@^4.0.3": + version "4.0.3" + resolved "https://registry.yarnpkg.com/@smithy/service-error-classification/-/service-error-classification-4.0.3.tgz#df43e3ec00a9f2d15415185561d98cd602c8bc67" + integrity sha512-FTbcajmltovWMjj3tksDQdD23b2w6gH+A0DYA1Yz3iSpjDj8fmkwy62UnXcWMy4d5YoMoSyLFHMfkEVEzbiN8Q== dependencies: "@smithy/types" "^4.2.0" @@ -1484,13 +1484,13 @@ "@smithy/util-utf8" "^4.0.0" tslib "^2.6.2" -"@smithy/smithy-client@^4.2.1": - version "4.2.1" - resolved "https://registry.yarnpkg.com/@smithy/smithy-client/-/smithy-client-4.2.1.tgz#21055bc038824de93aee778d040cdf9864e6114d" - integrity sha512-fbniZef60QdsBc4ZY0iyI8xbFHIiC/QRtPi66iE4ufjiE/aaz7AfUXzcWMkpO8r+QhLeNRIfmPchIG+3/QDZ6g== +"@smithy/smithy-client@^4.2.1", "@smithy/smithy-client@^4.2.2": + version "4.2.2" + resolved "https://registry.yarnpkg.com/@smithy/smithy-client/-/smithy-client-4.2.2.tgz#b599c841c376994a3b3019942b1d3f1ecfaf964b" + integrity sha512-3AnHfsMdq9Wg7+3BeR1HuLWI9+DMA/SoHVpCWq6xSsa52ikNd6nlF/wFzdpHyGtVa+Aji6lMgvwOF4sGcVA7SA== dependencies: - "@smithy/core" "^3.3.0" - "@smithy/middleware-endpoint" "^4.1.1" + "@smithy/core" "^3.3.1" + "@smithy/middleware-endpoint" "^4.1.2" "@smithy/middleware-stack" "^4.0.2" "@smithy/protocol-http" "^5.1.0" "@smithy/types" "^4.2.0" @@ -1575,26 +1575,26 @@ tslib "^2.6.2" "@smithy/util-defaults-mode-browser@^4.0.9": - version "4.0.9" - resolved "https://registry.yarnpkg.com/@smithy/util-defaults-mode-browser/-/util-defaults-mode-browser-4.0.9.tgz#b70915229126eee4c1df18cd8f1e8edabade9c41" - integrity sha512-B8j0XsElvyhv6+5hlFf6vFV/uCSyLKcInpeXOGnOImX2mGXshE01RvPoGipTlRpIk53e6UfYj7WdDdgbVfXDZw== + version "4.0.10" + resolved "https://registry.yarnpkg.com/@smithy/util-defaults-mode-browser/-/util-defaults-mode-browser-4.0.10.tgz#50cc8aff3e1881848d574ea777439ff74a465550" + integrity sha512-2k6fgUNOZ1Rn0gEjvGPGrDEINLG8qSBHsN7xlkkbO+fnHJ36BQPDzhFfMmYSDS8AgzoygqQiDOQ+6Hp2vBTUdA== dependencies: "@smithy/property-provider" "^4.0.2" - "@smithy/smithy-client" "^4.2.1" + "@smithy/smithy-client" "^4.2.2" "@smithy/types" "^4.2.0" bowser "^2.11.0" tslib "^2.6.2" "@smithy/util-defaults-mode-node@^4.0.9": - version "4.0.9" - resolved "https://registry.yarnpkg.com/@smithy/util-defaults-mode-node/-/util-defaults-mode-node-4.0.9.tgz#2d50bcb178a214878a86563616a0b3499550a9d2" - integrity sha512-wTDU8P/zdIf9DOpV5qm64HVgGRXvqjqB/fJZTEQbrz3s79JHM/E7XkMm/876Oq+ZLHJQgnXM9QHDo29dlM62eA== + version "4.0.10" + resolved "https://registry.yarnpkg.com/@smithy/util-defaults-mode-node/-/util-defaults-mode-node-4.0.10.tgz#f85b0a12fe3d1bc63e776ee8100d14055a211526" + integrity sha512-2XR1WRglLVmoIFts7bODUTgBdVyvkfKNkydHrlsI5VxW9q3s1hnJCuY+f1OHzvj5ue23q4vydM2fjrMjf2HSdQ== dependencies: "@smithy/config-resolver" "^4.1.0" "@smithy/credential-provider-imds" "^4.0.2" "@smithy/node-config-provider" "^4.0.2" "@smithy/property-provider" "^4.0.2" - "@smithy/smithy-client" "^4.2.1" + "@smithy/smithy-client" "^4.2.2" "@smithy/types" "^4.2.0" tslib "^2.6.2" @@ -1636,12 +1636,12 @@ "@smithy/types" "^4.2.0" tslib "^2.6.2" -"@smithy/util-retry@^4.0.2": - version "4.0.2" - resolved "https://registry.yarnpkg.com/@smithy/util-retry/-/util-retry-4.0.2.tgz#9b64cf460d63555884e641721d19e3c0abff8ee6" - integrity sha512-Qryc+QG+7BCpvjloFLQrmlSd0RsVRHejRXd78jNO3+oREueCjwG1CCEH1vduw/ZkM1U9TztwIKVIi3+8MJScGg== +"@smithy/util-retry@^4.0.3": + version "4.0.3" + resolved "https://registry.yarnpkg.com/@smithy/util-retry/-/util-retry-4.0.3.tgz#42d54b3a100915b61c6f9bee43c966e96139584d" + integrity sha512-DPuYjZQDXmKr/sNvy9Spu8R/ESa2e22wXZzSAY6NkjOLj6spbIje/Aq8rT97iUMdDj0qHMRIe+bTxvlU74d9Ng== dependencies: - "@smithy/service-error-classification" "^4.0.2" + "@smithy/service-error-classification" "^4.0.3" "@smithy/types" "^4.2.0" tslib "^2.6.2" @@ -1887,16 +1887,16 @@ form-data "^4.0.0" "@types/node@*": - version "22.15.3" - resolved "https://registry.yarnpkg.com/@types/node/-/node-22.15.3.tgz#b7fb9396a8ec5b5dfb1345d8ac2502060e9af68b" - integrity sha512-lX7HFZeHf4QG/J7tBZqrCAXwz9J5RD56Y6MpP0eJkka8p+K0RY/yBTW7CYFJ4VGCclxqOLKmiGP5juQc6MKgcw== + version "22.15.12" + resolved "https://registry.yarnpkg.com/@types/node/-/node-22.15.12.tgz#9ce54e51e09536faa94e4ec300c4728ee83bfa85" + integrity sha512-K0fpC/ZVeb8G9rm7bH7vI0KAec4XHEhBam616nVJCV51bKzJ6oA3luG4WdKoaztxe70QaNjS/xBmcDLmr4PiGw== dependencies: undici-types "~6.21.0" "@types/node@^18.11.18", "@types/node@^18.19.70": - version "18.19.87" - resolved "https://registry.yarnpkg.com/@types/node/-/node-18.19.87.tgz#690f000cc51e3c7f48bc00f7e86fac6eb550b709" - integrity sha512-OIAAu6ypnVZHmsHCeJ+7CCSub38QNBS9uceMQeg7K5Ur0Jr+wG9wEOEvvMbhp09pxD5czIUy/jND7s7Tb6Nw7A== + version "18.19.96" + resolved "https://registry.yarnpkg.com/@types/node/-/node-18.19.96.tgz#34b4ecfe4fe864f4e59994d2108cd1659ba37683" + integrity sha512-PzBvgsZ7YdFs/Kng1BSW8IGv68/SPcOxYYhT7luxD7QyzIhFS1xPTpfK3K9eHBa7hVwlW+z8nN0mOd515yaduQ== dependencies: undici-types "~5.26.4" @@ -2306,14 +2306,14 @@ braces@^3.0.3: fill-range "^7.1.1" browserslist@^4.24.0: - version "4.24.4" - resolved "https://registry.yarnpkg.com/browserslist/-/browserslist-4.24.4.tgz#c6b2865a3f08bcb860a0e827389003b9fe686e4b" - integrity sha512-KDi1Ny1gSePi1vm0q4oxSF8b4DR44GF4BbmS2YdhPLOEqd8pDviZOGH/GsmRwoWJ2+5Lr085X7naowMwKHDG1A== + version "4.24.5" + resolved "https://registry.yarnpkg.com/browserslist/-/browserslist-4.24.5.tgz#aa0f5b8560fe81fde84c6dcb38f759bafba0e11b" + integrity sha512-FDToo4Wo82hIdgc1CQ+NQD0hEhmpPjrZ3hiUgwgOG6IuTdlpr8jdjyG24P6cNP1yJpTLzS5OcGgSw0xmDU1/Tw== dependencies: - caniuse-lite "^1.0.30001688" - electron-to-chromium "^1.5.73" + caniuse-lite "^1.0.30001716" + electron-to-chromium "^1.5.149" node-releases "^2.0.19" - update-browserslist-db "^1.1.1" + update-browserslist-db "^1.1.3" bs-logger@^0.2.6: version "0.2.6" @@ -2373,10 +2373,10 @@ camelcase@^6.2.0: resolved "https://registry.yarnpkg.com/camelcase/-/camelcase-6.3.0.tgz#5685b95eb209ac9c0c177467778c9c84df58ba9a" integrity sha512-Gmy6FhYlCY7uOElZUSbxo2UCDH8owEk996gkbrpsgGtrJLM3J7jGxl9Ic7Qwwj4ivOE5AWZWRMecDdF7hqGjFA== -caniuse-lite@^1.0.30001688: - version "1.0.30001716" - resolved "https://registry.yarnpkg.com/caniuse-lite/-/caniuse-lite-1.0.30001716.tgz#39220dfbc58c85d9d4519e7090b656aa11ca4b85" - integrity sha512-49/c1+x3Kwz7ZIWt+4DvK3aMJy9oYXXG6/97JKsnjdCk/6n9vVyWL8NAwVt95Lwt9eigI10Hl782kDfZUUlRXw== +caniuse-lite@^1.0.30001716: + version "1.0.30001717" + resolved "https://registry.yarnpkg.com/caniuse-lite/-/caniuse-lite-1.0.30001717.tgz#5d9fec5ce09796a1893013825510678928aca129" + integrity sha512-auPpttCq6BDEG8ZAuHJIplGw6GODhjw+/11e7IjpnYCxZcW/ONgPs0KVBJ0d1bY3e2+7PRe5RCLyP+PfwVgkYw== chalk@^4.0.0, chalk@^4.0.2, chalk@^4.1.0: version "4.1.2" @@ -2554,9 +2554,9 @@ decimal.js@^10.4.2: integrity sha512-8vDa8Qxvr/+d94hSh5P3IJwI5t8/c0KsMp+g8bNw9cY2icONa5aPfvKeieW1WlG0WQYwwhJ7mjui2xtiePQSXw== dedent@^1.0.0: - version "1.5.3" - resolved "https://registry.yarnpkg.com/dedent/-/dedent-1.5.3.tgz#99aee19eb9bae55a67327717b6e848d0bf777e5a" - integrity sha512-NHQtfOOW68WD8lgypbLA5oT+Bt0xXJhiYvoR6SmmNXZfpzOGXwdKWmcwG8N7PwVVWV3eF/68nmD9BaJSsTBhyQ== + version "1.6.0" + resolved "https://registry.yarnpkg.com/dedent/-/dedent-1.6.0.tgz#79d52d6389b1ffa67d2bcef59ba51847a9d503b2" + integrity sha512-F1Z+5UCFpmQUzJa11agbyPVMbpgT/qA3/SKyJ1jyBgm7dUcUEa8v9JwDkerSQXfakBwFljIxhOJqGkjUwZ9FSA== deepmerge@^4.2.2: version "4.3.1" @@ -2606,10 +2606,10 @@ ejs@^3.1.10: dependencies: jake "^10.8.5" -electron-to-chromium@^1.5.73: - version "1.5.145" - resolved "https://registry.yarnpkg.com/electron-to-chromium/-/electron-to-chromium-1.5.145.tgz#abd50700ac2c809e40a4694584f66711ee937fb6" - integrity sha512-pZ5EcTWRq/055MvSBgoFEyKf2i4apwfoqJbK/ak2jnFq8oHjZ+vzc3AhRcz37Xn+ZJfL58R666FLJx0YOK9yTw== +electron-to-chromium@^1.5.149: + version "1.5.150" + resolved "https://registry.yarnpkg.com/electron-to-chromium/-/electron-to-chromium-1.5.150.tgz#3120bf34453a7a82cb4d9335df20680b2bb40649" + integrity sha512-rOOkP2ZUMx1yL4fCxXQKDHQ8ZXwisb2OycOQVKHgvB3ZI4CvehOd4y2tfnnLDieJ3Zs1RL1Dlp3cMkyIn7nnXA== emittery@^0.13.1: version "0.13.1" @@ -3832,9 +3832,9 @@ onetime@^5.1.2: mimic-fn "^2.1.0" openai@^4.74.0: - version "4.96.2" - resolved "https://registry.yarnpkg.com/openai/-/openai-4.96.2.tgz#a7d360597f273a5f6ed8dd22914e598013022fa4" - integrity sha512-R2XnxvMsizkROr7BV3uNp1q/3skwPZ7fmPjO1bXLnfB4Tu5xKxrT1EVwzjhxn0MZKBKAvOaGWS63jTMN6KrIXA== + version "4.97.0" + resolved "https://registry.yarnpkg.com/openai/-/openai-4.97.0.tgz#4e2e85c79499c1d44b58f97b3a8ec1d6bfe403b3" + integrity sha512-LRoiy0zvEf819ZUEJhgfV8PfsE8G5WpQi4AwA1uCV8SKvvtXQkoWUFkepD6plqyJQRghy2+AEPQ07FrJFKHZ9Q== dependencies: "@types/node" "^18.11.18" "@types/node-fetch" "^2.6.4" @@ -4426,9 +4426,9 @@ type-fest@^0.21.3: integrity sha512-t0rzBq87m3fVcduHDUFhKmyyX+9eo6WQjZvf51Ea/M0Q7+T374Jp1aUiyUl0GKxp8M/OETVHSDvmkyPgvX+X2w== type-fest@^4.39.1: - version "4.40.1" - resolved "https://registry.yarnpkg.com/type-fest/-/type-fest-4.40.1.tgz#d78a09f08dd1081a434dd377967650cfd565401d" - integrity sha512-9YvLNnORDpI+vghLU/Nf+zSv0kL47KbVJ1o3sKgoTefl6i+zebxbiDQWoe/oWWqPhIgQdRZRT1KA9sCPL810SA== + version "4.41.0" + resolved "https://registry.yarnpkg.com/type-fest/-/type-fest-4.41.0.tgz#6ae1c8e5731273c2bf1f58ad39cbae2c91a46c58" + integrity sha512-TeTSQ6H5YHvpqVwBRcnLDCBnDOHWYu7IvGbHT6N8AOymcr9PJGjc1GTtiWZTYg0NCgYwvnYWEkVChQAr9bjfwA== typescript@~5.7.2: version "5.7.3" @@ -4450,7 +4450,7 @@ universalify@^0.2.0: resolved "https://registry.yarnpkg.com/universalify/-/universalify-0.2.0.tgz#6451760566fa857534745ab1dde952d1b1761be0" integrity sha512-CJ1QgKmNg3CwvAv/kOFmtnEN05f0D/cn9QntgNOQlQF9dgvVTHj3t+8JPdjqawCHk7V/KA+fbUqzZ9XWhcqPUg== -update-browserslist-db@^1.1.1: +update-browserslist-db@^1.1.3: version "1.1.3" resolved "https://registry.yarnpkg.com/update-browserslist-db/-/update-browserslist-db-1.1.3.tgz#348377dd245216f9e7060ff50b15a1b740b75420" integrity sha512-UxhIZQ+QInVdunkDAaiazvvT/+fXL5Osr0JZlJulepYu6Jd7qJtDZjlur0emRlT71EN3ScPoE7gvsuIKKNavKw== @@ -4528,9 +4528,9 @@ webpack-sources@^3.2.3: integrity sha512-/DyMEOrDgLKKIG0fmvtz+4dUX/3Ghozwgm6iPp8KRhvn+eQf9+Q7GWxVNMk3+uCPWfdXYC4ExGBckIXdFEfH1w== webpack@^5.97.1: - version "5.99.7" - resolved "https://registry.yarnpkg.com/webpack/-/webpack-5.99.7.tgz#60201c1ca66da046b07d006c2f6e0cc5e8a7bdba" - integrity sha512-CNqKBRMQjwcmKR0idID5va1qlhrqVUKpovi+Ec79ksW8ux7iS1+A6VqzfZXgVYCFRKl7XL5ap3ZoMpwBJxcg0w== + version "5.99.8" + resolved "https://registry.yarnpkg.com/webpack/-/webpack-5.99.8.tgz#dd31a020b7c092d30c4c6d9a4edb95809e7f5946" + integrity sha512-lQ3CPiSTpfOnrEGeXDwoq5hIGzSjmwD72GdfVzF7CQAI7t47rJG9eDWvcEkEn3CUQymAElVvDg3YNTlCYj+qUQ== dependencies: "@types/eslint-scope" "^3.7.7" "@types/estree" "^1.0.6" @@ -4615,9 +4615,9 @@ write-file-atomic@^4.0.2: signal-exit "^3.0.7" ws@^8.11.0: - version "8.18.1" - resolved "https://registry.yarnpkg.com/ws/-/ws-8.18.1.tgz#ea131d3784e1dfdff91adb0a4a116b127515e3cb" - integrity sha512-RKW2aJZMXeMxVpnZ6bck+RswznaxmzdULiBr6KY7XkTnW8uvt0iT9H5DkHUChXrc+uurzwa0rVI16n/Xzjdz1w== + version "8.18.2" + resolved "https://registry.yarnpkg.com/ws/-/ws-8.18.2.tgz#42738b2be57ced85f46154320aabb51ab003705a" + integrity sha512-DMricUmwGZUVr++AEAe2uiVM7UoO9MAVZMDu05UQOaUII0lp+zOzLLU4Xqh/JvTqklB1T4uELaaPBKyjE1r4fQ== xml-name-validator@^4.0.0: version "4.0.0" From d101fb14f881ff9b266b7f0d0264897ff0d1053c Mon Sep 17 00:00:00 2001 From: Ale Pouroullis Date: Tue, 6 May 2025 17:29:14 +0100 Subject: [PATCH 05/10] Remove dist prefix from main and types entrypoints --- package.json | 4 ++-- src/sync/SyncClient.ts | 10 +++++++--- 2 files changed, 9 insertions(+), 5 deletions(-) diff --git a/package.json b/package.json index 873a46a0..c4d382d5 100644 --- a/package.json +++ b/package.json @@ -3,8 +3,8 @@ "version": "0.8.21", "private": false, "repository": "https://github.com/humanloop/humanloop-node", - "main": "./dist/index.js", - "types": "./dist/index.d.ts", + "main": "./index.js", + "types": "./index.d.ts", "scripts": { "format": "prettier . --write --ignore-unknown", "build": "tsc", diff --git a/src/sync/SyncClient.ts b/src/sync/SyncClient.ts index e73f558b..6322d05d 100644 --- a/src/sync/SyncClient.ts +++ b/src/sync/SyncClient.ts @@ -176,7 +176,11 @@ export default class SyncClient { throw new Error(`Unsupported file type: ${file.type}`); } - this.saveSerializedFile((file as any).rawFileContent, file.path, file.type); + if (!file.rawFileContent) { + throw new Error(`No content found for ${file.type} ${file.id}`); + } + + this.saveSerializedFile(file.rawFileContent, file.path, file.type); } /** @@ -214,7 +218,7 @@ export default class SyncClient { } // Skip if no raw file content - if (!(file as any).rawFileContent) { + if (!file.rawFileContent) { console.warn( `No content found for ${file.type} ${file.id || ""}`, ); @@ -223,7 +227,7 @@ export default class SyncClient { try { this.saveSerializedFile( - (file as any).rawFileContent, + file.rawFileContent, file.path, file.type, ); From 350fef5da620ce043a88b7e95fbb0587760866ac Mon Sep 17 00:00:00 2001 From: Ale Pouroullis Date: Tue, 6 May 2025 17:57:59 +0100 Subject: [PATCH 06/10] Add SyncClientOptions, Logger util; refactor evals/run.ts to use new Logger; create foundations of CLI --- .fernignore | 4 +- package.json | 57 +- src/cli.ts | 70 +++ src/evals/run.ts | 91 ++- src/humanloop.client.ts | 10 +- src/sync/SyncClient.ts | 17 +- src/sync/index.ts | 2 +- src/utils/logger.ts | 68 +++ yarn.lock | 1214 +++++++++++++++++++-------------------- 9 files changed, 839 insertions(+), 694 deletions(-) create mode 100644 src/cli.ts create mode 100644 src/utils/logger.ts diff --git a/.fernignore b/.fernignore index 2686cd67..c27bbc61 100644 --- a/.fernignore +++ b/.fernignore @@ -10,8 +10,10 @@ src/humanloop.client.ts src/overload.ts src/error.ts src/context.ts -src/sync +src/cli.ts src/cache +src/sync +src/utils # Tests diff --git a/package.json b/package.json index c4d382d5..e6da8782 100644 --- a/package.json +++ b/package.json @@ -3,8 +3,8 @@ "version": "0.8.21", "private": false, "repository": "https://github.com/humanloop/humanloop-node", - "main": "./index.js", - "types": "./index.d.ts", + "main": "./dist/index.js", + "types": "./dist/index.d.ts", "scripts": { "format": "prettier . --write --ignore-unknown", "build": "tsc", @@ -12,45 +12,50 @@ "test": "jest" }, "dependencies": { - "url-join": "4.0.1", - "form-data": "^4.0.0", - "formdata-node": "^6.0.3", - "node-fetch": "^2.7.0", - "qs": "^6.13.1", - "readable-stream": "^4.5.2", - "form-data-encoder": "^4.0.2", "@opentelemetry/api": "<=1.9.0", "@opentelemetry/resources": "<=2.0.0", "@opentelemetry/sdk-trace-node": "<=2.0.0", + "@traceloop/ai-semantic-conventions": ">=0.11.6", "@traceloop/instrumentation-anthropic": ">=0.11.1", "@traceloop/instrumentation-cohere": ">=0.11.1", "@traceloop/instrumentation-openai": ">=0.11.3", - "@traceloop/ai-semantic-conventions": ">=0.11.6", + "chalk": "^5.4.1", "cli-progress": "^3.12.0", - "lodash": "^4.17.21" + "commander": "^13.1.0", + "form-data": "^4.0.0", + "form-data-encoder": "^4.0.2", + "formdata-node": "^6.0.3", + "lodash": "^4.17.21", + "node-fetch": "^2.7.0", + "qs": "^6.13.1", + "readable-stream": "^4.5.2", + "url-join": "4.0.1" }, "devDependencies": { - "@types/url-join": "4.0.1", - "@types/qs": "^6.9.17", + "@anthropic-ai/sdk": "^0.32.1", + "@trivago/prettier-plugin-sort-imports": "^4.3.0", + "@types/cli-progress": "^3.11.6", + "@types/jest": "^29.5.14", + "@types/lodash": "4.14.74", + "@types/node": "^18.19.70", "@types/node-fetch": "^2.6.12", + "@types/qs": "^6.9.17", "@types/readable-stream": "^4.0.18", - "webpack": "^5.97.1", - "ts-loader": "^9.5.1", + "@types/url-join": "4.0.1", + "cohere-ai": "^7.15.0", + "dotenv": "^16.5.0", "jest": "^29.7.0", - "@types/jest": "^29.5.14", - "ts-jest": "^29.1.1", "jest-environment-jsdom": "^29.7.0", - "@types/node": "^18.19.70", + "jsonschema": "^1.4.1", + "openai": "^4.74.0", "prettier": "^3.4.2", + "ts-jest": "^29.1.1", + "ts-loader": "^9.5.1", "typescript": "~5.7.2", - "openai": "^4.74.0", - "@anthropic-ai/sdk": "^0.32.1", - "cohere-ai": "^7.15.0", - "dotenv": "^16.4.6", - "jsonschema": "^1.4.1", - "@types/cli-progress": "^3.11.6", - "@types/lodash": "4.14.74", - "@trivago/prettier-plugin-sort-imports": "^4.3.0" + "webpack": "^5.97.1" + }, + "bin": { + "humanloop": "dist/cli.js" }, "browser": { "fs": false, diff --git a/src/cli.ts b/src/cli.ts new file mode 100644 index 00000000..f4f6f2e4 --- /dev/null +++ b/src/cli.ts @@ -0,0 +1,70 @@ +#!/usr/bin/env node +import * as dotenv from "dotenv"; +import chalk from "chalk"; +import { Command } from "commander"; + +import { HumanloopClient } from "./humanloop.client"; + +const { version } = require("../package.json"); + +// Load environment variables +dotenv.config(); + +const program = new Command(); +program + .name("humanloop") + .description("Humanloop CLI for managing sync operations") + .version(version); + +// Common auth options +const addAuthOptions = (command: Command) => + command + .option("--api-key ", "Humanloop API key") + .option("--env-file ", "Path to .env file") + .option("--base-url ", "Base URL for Humanloop API"); + +// Helper to get client +function getClient(options: { + envFile?: string; + apiKey?: string; + baseUrl?: string; + baseDir?: string; +}): HumanloopClient { + if (options.envFile) dotenv.config({ path: options.envFile }); + const apiKey = options.apiKey || process.env.HUMANLOOP_API_KEY; + if (!apiKey) { + console.error( + chalk.red( + "No API key found. Set HUMANLOOP_API_KEY in .env file or use --api-key", + ), + ); + process.exit(1); + } + return new HumanloopClient({ + apiKey, + baseUrl: options.baseUrl, + sync: { baseDir: options.baseDir }, + }); +} + +// Pull command +addAuthOptions( + program + .command("pull") + .description("Pull files from Humanloop to local filesystem") + .option("-p, --path ", "Path to pull (file or directory)") + .option("-e, --environment ", "Environment to pull from") + .option("--base-dir ", "Base directory for synced files", "humanloop"), +).action(async (options) => { + try { + console.log(chalk.blue("Pulling files from Humanloop...")); + const client = getClient(options); + const files = await client.pull(options.path, options.environment); + console.log(chalk.green(`Successfully synced ${files.length} files`)); + } catch (error) { + console.error(chalk.red(`Error: ${error}`)); + process.exit(1); + } +}); + +program.parse(process.argv); diff --git a/src/evals/run.ts b/src/evals/run.ts index 4a618e4b..475795de 100644 --- a/src/evals/run.ts +++ b/src/evals/run.ts @@ -46,6 +46,7 @@ import { } from "../context"; import { HumanloopRuntimeError } from "../error"; import { Humanloop, HumanloopClient } from "../index"; +import { Logger } from "../utils/logger"; import { Dataset, EvalFileType, @@ -58,11 +59,11 @@ import { } from "./types"; // ANSI escape codes for logging colors -const YELLOW = "\x1b[93m"; -const CYAN = "\x1b[96m"; -const GREEN = "\x1b[92m"; -const RED = "\x1b[91m"; -const RESET = "\x1b[0m"; +// const YELLOW = "\x1b[93m"; +// const CYAN = "\x1b[96m"; +// const GREEN = "\x1b[92m"; +// const RED = "\x1b[91m"; +// const RESET = "\x1b[0m"; export async function runEval< I extends Record & { messages?: any[] }, @@ -79,7 +80,7 @@ export async function runEval< concurrency: number = 8, ): Promise { if (concurrency > 32) { - console.log("Warning: Too many parallel workers, capping the number to 32."); + Logger.warn("Warning: Too many parallel workers, capping the number to 32."); } concurrency = Math.min(concurrency, 32); @@ -95,8 +96,8 @@ export async function runEval< try { hlDataset = await upsertDataset({ dataset: dataset, client: client }); } catch (e: any) { - console.error( - `${RED}Error in your \`file\` argument:\n\n${e.constructor.name}: ${e.message}${RESET}`, + Logger.error( + `Error in your \`file\` argument:\n\n${e.constructor.name}: ${e.message}`, ); return []; } @@ -113,8 +114,8 @@ export async function runEval< type: type_, }); } catch (e: any) { - console.error( - `${RED}Error in your \`file\` argument:\n\n${e.constructor.name} ${e.message}${RESET}`, + Logger.error( + `Error in your \`file\` argument:\n\n${e.constructor.name} ${e.message}`, ); return []; } @@ -140,9 +141,7 @@ export async function runEval< } function handleExitSignal(signum: number) { - process.stderr.write( - `\n${RED}Received signal ${signum}, cancelling the Evaluation...${RESET}\n`, - ); + Logger.error(`\nReceived signal ${signum}, cancelling the Evaluation...\n`); cancelEvaluation(); process.exit(signum); } @@ -151,24 +150,22 @@ export async function runEval< process.on("SIGTERM", handleExitSignal); // Header of the CLI report - console.log(`\n${CYAN}Navigate to your Evaluation:${RESET}\n${evaluation.url}\n`); - console.log( - `${CYAN}${type_.charAt(0).toUpperCase() + type_.slice(1)} Version ID: ${ - hlFile.versionId - }${RESET}`, + Logger.info(`\nNavigate to your Evaluation:\n${evaluation.url}\n`); + Logger.info( + `${type_.charAt(0).toUpperCase() + type_.slice(1)} Version ID: ${hlFile.versionId}`, ); - console.log(`${CYAN}Run ID: ${runId}${RESET}`); + Logger.info(`Run ID: ${runId}`); // Generate locally if a file `callable` is provided if (function_ === undefined) { // TODO: trigger run when updated API is available - process.stdout.write( - `${CYAN}\nRunning '${hlFile.name}' ${_.capitalize(hlFile.type)} over the '${hlDataset.name}' Dataset${RESET}\n`, + Logger.info( + `\nRunning '${hlFile.name}' ${_.capitalize(hlFile.type)} over the '${hlDataset.name}' Dataset`, ); } else { // Running the evaluation locally - process.stdout.write( - `${CYAN}\nRunning '${hlFile.name}' ${_.capitalize(hlFile.type)} over the '${hlDataset.name}' Dataset locally...${RESET}\n\n`, + Logger.info( + `\nRunning '${hlFile.name}' ${_.capitalize(hlFile.type)} over the '${hlDataset.name}' Dataset locally...\n`, ); } @@ -275,7 +272,7 @@ export async function runEval< }); // @ts-ignore evaluationContext._callback(log.id); - console.warn( + Logger.warn( `\nYour ${type_}'s callable failed for Datapoint: ${datapoint.id}.\nError: ${errorMessage}`, ); } @@ -312,7 +309,7 @@ export async function runEval< await new Promise((resolve) => setTimeout(resolve, 500)); } } while (stats.status !== "completed"); - console.log(stats.report); + Logger.log(stats.report); const checks: EvaluatorCheck[] = []; if ( @@ -350,7 +347,7 @@ export async function runEval< } } - console.info(`\n${CYAN}View your Evaluation:${RESET}\n${evaluation.url}\n`); + Logger.info(`\nView your Evaluation:\n${evaluation.url}\n`); return checks; } @@ -452,11 +449,9 @@ function fileOrFileInsideHLUtility< } const file_ = { ...innerFile }; if (file_.type === "prompt") { - console.warn( - `${YELLOW}` + - "The @prompt decorator will not spy on provider calls when passed to `evaluations.run()`. " + - "Using the `version` in `file` argument instead.\n" + - `${RESET}`, + Logger.warn( + "The @prompt decorator will not spy on provider calls when passed to `evaluations.run()`. " + + "Using the `version` in `file` argument instead.\n", ); file_.version = file.version; } @@ -478,8 +473,8 @@ function getFileType & { messages?: any[] }, O // Determine the `type` of the `file` to Evaluate - if not `type` provided, default to `flow` try { let type_ = file.type as EvalFileType; - console.info( - `${CYAN}Evaluating your ${type_} function corresponding to \`${file.path || file.id}\` on Humanloop${RESET}\n\n`, + Logger.info( + `Evaluating your ${type_} function corresponding to \`${file.path || file.id}\` on Humanloop\n\n`, ); if (!type_) { type_ = "flow"; @@ -490,9 +485,7 @@ function getFileType & { messages?: any[] }, O }; } catch (error) { const type_ = "flow"; - console.warn( - `${YELLOW}No \`file\` type specified, defaulting to flow.${RESET}\n`, - ); + Logger.warn(`No \`file\` type specified, defaulting to flow.\n`); return { ...file, type: type_, @@ -512,8 +505,8 @@ function getFileCallable & { messages?: any[] "You must provide a `callable` for your Flow `file` to run a local eval.", ); } else { - console.info( - `${CYAN}No \`callable\` provided for your ${_.capitalize(type_)} file - will attempt to generate logs on Humanloop.\n\n${RESET}`, + Logger.info( + `No \`callable\` provided for your ${_.capitalize(type_)} file - will attempt to generate logs on Humanloop.\n\n`, ); } } else if (type_ === "agent") { @@ -644,14 +637,14 @@ async function resolveFile & { message?: any[] "File does not exist on Humanloop. Please provide a `file.path` and a version to create a new version.", ); } - console.log("UPSERTING FILE", JSON.stringify(fileConfig, null, 2)); + Logger.log(`UPSERTING FILE ${JSON.stringify(fileConfig, null, 2)}`); return [await upsertFile(client, fileConfig), callable]; } if (version) { // User responsibility to provide adequate file.version for upserting the file - console.info( - `${CYAN}Upserting a new File version based on \`file.version\`. Will use provided callable for generating Logs.${RESET}\n`, + Logger.info( + `Upserting a new File version based on \`file.version\`. Will use provided callable for generating Logs.\n`, ); try { return [ @@ -1014,7 +1007,7 @@ async function runLocalEvaluators( startTime: startTime, endTime: new Date(), }); - console.warn(`\nEvaluator ${hlEvaluator.path} failed with error ${e}`); + Logger.error(`\nEvaluator ${hlEvaluator.path} failed with error ${e}`); } }, ); @@ -1034,7 +1027,7 @@ function checkEvaluationImprovement( } const latestEvaluatorStatsByPath = getEvaluatorStatsByPath(runStats, evaluation); if (stats.runStats.length == 1) { - console.log(`${YELLOW}⚠️ No previous versions to compare with.${RESET}`); + Logger.warn(`⚠️ No previous versions to compare with.`); return [true, 0, 0]; } @@ -1057,9 +1050,7 @@ function checkEvaluationImprovement( let diff = latestScore - previousScore; // Round to 2 decimal places diff = Math.round(diff * 100) / 100; - console.log( - `${CYAN}Change of [${diff}] for Evaluator ${evaluatorPath}${RESET}`, - ); + Logger.info(`Change of [${diff}] for Evaluator ${evaluatorPath}`); return [diff >= 0, latestScore, diff]; } else { throw Error(`Evaluator ${evaluatorPath} not found in the stats.`); @@ -1126,12 +1117,12 @@ function checkEvaluationThreshold( throw new Error(`Could not find score for Evaluator ${evaluatorPath}`); } if (score >= threshold) { - console.log( - `${GREEN}✅ Latest eval [${score}] above threshold [${threshold}] for Evaluator ${evaluatorPath}.${RESET}`, + Logger.success( + `✅ Latest eval [${score}] above threshold [${threshold}] for Evaluator ${evaluatorPath}.`, ); } else { - console.log( - `${RED}❌ Latest eval [${score}] below threshold [${threshold}] for Evaluator ${evaluatorPath}.${RESET}`, + Logger.error( + `❌ Latest eval [${score}] below threshold [${threshold}] for Evaluator ${evaluatorPath}.`, ); } return score >= threshold; diff --git a/src/humanloop.client.ts b/src/humanloop.client.ts index ffd74746..28c3070e 100644 --- a/src/humanloop.client.ts +++ b/src/humanloop.client.ts @@ -4,7 +4,6 @@ import { NodeTracerProvider } from "@opentelemetry/sdk-trace-node"; import { AnthropicInstrumentation } from "@traceloop/instrumentation-anthropic"; import { CohereInstrumentation } from "@traceloop/instrumentation-cohere"; import { OpenAIInstrumentation } from "@traceloop/instrumentation-openai"; -import { SyncClient } from "./sync"; import { HumanloopClient as BaseHumanloopClient } from "./Client"; import { ChatMessage } from "./api"; @@ -30,6 +29,7 @@ import { import { HumanloopSpanExporter } from "./otel/exporter"; import { HumanloopSpanProcessor } from "./otel/processor"; import { overloadCall, overloadLog } from "./overload"; +import { SyncClient, SyncClientOptions } from "./sync"; import { SDK_VERSION } from "./version"; const RED = "\x1b[91m"; @@ -252,11 +252,12 @@ export class HumanloopClient extends BaseHumanloopClient { Anthropic?: any; CohereAI?: any; }; + sync?: SyncClientOptions; }, ) { super(_options); - this._syncClient = new SyncClient(this); + this._syncClient = new SyncClient(this, _options.sync); this.instrumentProviders = _options.instrumentProviders || {}; @@ -599,7 +600,10 @@ ${RESET}`, * @param environment - The environment to pull the files from. * @returns List of successfully processed file paths. */ - public async pull(path?: string, environment?: string): Promise { + public async pull( + path?: string, + environment?: string, + ): Promise { return this._syncClient.pull(path, environment); } diff --git a/src/sync/SyncClient.ts b/src/sync/SyncClient.ts index 6322d05d..d7e03d3e 100644 --- a/src/sync/SyncClient.ts +++ b/src/sync/SyncClient.ts @@ -10,6 +10,11 @@ import MetadataHandler from "./MetadataHandler"; // Default cache size for file content caching const DEFAULT_CACHE_SIZE = 100; +export interface SyncClientOptions { + baseDir?: string; + cacheSize?: number; +} + /** * Internal client for managing synchronization between local filesystem and Humanloop. */ @@ -22,13 +27,15 @@ export default class SyncClient { constructor( client: BaseHumanloopClient, - baseDir: string = "humanloop", - cacheSize: number = DEFAULT_CACHE_SIZE, + options: SyncClientOptions = { + baseDir: "humanloop", + cacheSize: DEFAULT_CACHE_SIZE, + }, ) { this.client = client; - this.baseDir = baseDir; - this.cacheSize = cacheSize; - this.fileContentCache = new LRUCache(cacheSize); + this.baseDir = options.baseDir || "humanloop"; + this.cacheSize = options.cacheSize || DEFAULT_CACHE_SIZE; + this.fileContentCache = new LRUCache(this.cacheSize); this.metadata = new MetadataHandler(this.baseDir); } diff --git a/src/sync/index.ts b/src/sync/index.ts index 8cfc42b5..f95897c9 100644 --- a/src/sync/index.ts +++ b/src/sync/index.ts @@ -4,5 +4,5 @@ * This module provides sync functionality between Humanloop and the local filesystem. */ -export { default as SyncClient } from './SyncClient'; +export { default as SyncClient, SyncClientOptions } from './SyncClient'; export { default as MetadataHandler } from './MetadataHandler'; \ No newline at end of file diff --git a/src/utils/logger.ts b/src/utils/logger.ts new file mode 100644 index 00000000..662bbbb3 --- /dev/null +++ b/src/utils/logger.ts @@ -0,0 +1,68 @@ +/** + * Logger utility for consistent colored console output across the Humanloop SDK. + */ + +// ANSI escape codes for colors +export const Colors = { + YELLOW: "\x1b[93m", + CYAN: "\x1b[96m", + GREEN: "\x1b[92m", + RED: "\x1b[91m", + RESET: "\x1b[0m", +} as const; + +/** + * Helper class for colored console output + */ +export class Logger { + /** + * Safely converts any value to a string, handling undefined/null + */ + private static toString(value: any): string { + if (value === undefined) return "undefined"; + if (value === null) return "null"; + return String(value); + } + + /** + * Log a warning message in yellow + */ + static warn(message: any): void { + console.warn(`${Colors.YELLOW}${Logger.toString(message)}${Colors.RESET}`); + } + + /** + * Log an info message in cyan + */ + static info(message: any): void { + console.info(`${Colors.CYAN}${Logger.toString(message)}${Colors.RESET}`); + } + + /** + * Log a success message in green + */ + static success(message: any): void { + console.log(`${Colors.GREEN}${Logger.toString(message)}${Colors.RESET}`); + } + + /** + * Log an error message in red + */ + static error(message: any): void { + console.error(`${Colors.RED}${Logger.toString(message)}${Colors.RESET}`); + } + + /** + * Log a plain message without any color + */ + static log(message: any): void { + console.log(Logger.toString(message)); + } + + /** + * Log a message with custom color + */ + static withColor(message: any, color: keyof typeof Colors): void { + console.log(`${Colors[color]}${Logger.toString(message)}${Colors.RESET}`); + } +} diff --git a/yarn.lock b/yarn.lock index 3903fef2..87b31f9d 100644 --- a/yarn.lock +++ b/yarn.lock @@ -4,7 +4,7 @@ "@ampproject/remapping@^2.2.0": version "2.3.0" - resolved "https://registry.yarnpkg.com/@ampproject/remapping/-/remapping-2.3.0.tgz#ed441b6fa600072520ce18b43d2c8cc8caecc7f4" + resolved "https://registry.npmjs.org/@ampproject/remapping/-/remapping-2.3.0.tgz" integrity sha512-30iZtAPgz+LTIYoeivqYo853f02jBYSd5uGnGpkFV0M3xOt9aN73erkgYAmZU43x4VfqcnLxW9Kpg3R5LC4YYw== dependencies: "@jridgewell/gen-mapping" "^0.3.5" @@ -12,7 +12,7 @@ "@anthropic-ai/sdk@^0.32.1": version "0.32.1" - resolved "https://registry.yarnpkg.com/@anthropic-ai/sdk/-/sdk-0.32.1.tgz#d22c8ebae2adccc59d78fb416e89de337ff09014" + resolved "https://registry.npmjs.org/@anthropic-ai/sdk/-/sdk-0.32.1.tgz" integrity sha512-U9JwTrDvdQ9iWuABVsMLj8nJVwAyQz6QXvgLsVhryhCEPkLsbcP/MXxm+jYcAwLoV8ESbaTTjnD4kuAFa+Hyjg== dependencies: "@types/node" "^18.11.18" @@ -25,7 +25,7 @@ "@aws-crypto/crc32@3.0.0": version "3.0.0" - resolved "https://registry.yarnpkg.com/@aws-crypto/crc32/-/crc32-3.0.0.tgz#07300eca214409c33e3ff769cd5697b57fdd38fa" + resolved "https://registry.npmjs.org/@aws-crypto/crc32/-/crc32-3.0.0.tgz" integrity sha512-IzSgsrxUcsrejQbPVilIKy16kAT52EwB6zSaI+M3xxIhKh5+aldEyvI+z6erM7TCLB2BJsFrtHjp6/4/sr+3dA== dependencies: "@aws-crypto/util" "^3.0.0" @@ -34,7 +34,7 @@ "@aws-crypto/sha256-browser@5.2.0": version "5.2.0" - resolved "https://registry.yarnpkg.com/@aws-crypto/sha256-browser/-/sha256-browser-5.2.0.tgz#153895ef1dba6f9fce38af550e0ef58988eb649e" + resolved "https://registry.npmjs.org/@aws-crypto/sha256-browser/-/sha256-browser-5.2.0.tgz" integrity sha512-AXfN/lGotSQwu6HNcEsIASo7kWXZ5HYWvfOmSNKDsEqC4OashTp8alTmaz+F7TC2L083SFv5RdB+qU3Vs1kZqw== dependencies: "@aws-crypto/sha256-js" "^5.2.0" @@ -47,7 +47,7 @@ "@aws-crypto/sha256-js@5.2.0", "@aws-crypto/sha256-js@^5.2.0": version "5.2.0" - resolved "https://registry.yarnpkg.com/@aws-crypto/sha256-js/-/sha256-js-5.2.0.tgz#c4fdb773fdbed9a664fc1a95724e206cf3860042" + resolved "https://registry.npmjs.org/@aws-crypto/sha256-js/-/sha256-js-5.2.0.tgz" integrity sha512-FFQQyu7edu4ufvIZ+OadFpHHOt+eSTBaYaki44c+akjg7qZg9oOQeLlk77F6tSYqjDAFClrHJk9tMf0HdVyOvA== dependencies: "@aws-crypto/util" "^5.2.0" @@ -56,14 +56,14 @@ "@aws-crypto/supports-web-crypto@^5.2.0": version "5.2.0" - resolved "https://registry.yarnpkg.com/@aws-crypto/supports-web-crypto/-/supports-web-crypto-5.2.0.tgz#a1e399af29269be08e695109aa15da0a07b5b5fb" + resolved "https://registry.npmjs.org/@aws-crypto/supports-web-crypto/-/supports-web-crypto-5.2.0.tgz" integrity sha512-iAvUotm021kM33eCdNfwIN//F77/IADDSs58i+MDaOqFrVjZo9bAal0NK7HurRuWLLpF1iLX7gbWrjHjeo+YFg== dependencies: tslib "^2.6.2" "@aws-crypto/util@^3.0.0": version "3.0.0" - resolved "https://registry.yarnpkg.com/@aws-crypto/util/-/util-3.0.0.tgz#1c7ca90c29293f0883468ad48117937f0fe5bfb0" + resolved "https://registry.npmjs.org/@aws-crypto/util/-/util-3.0.0.tgz" integrity sha512-2OJlpeJpCR48CC8r+uKVChzs9Iungj9wkZrl8Z041DWEWvyIHILYKCPNzJghKsivj+S3mLo6BVc7mBNzdxA46w== dependencies: "@aws-sdk/types" "^3.222.0" @@ -72,7 +72,7 @@ "@aws-crypto/util@^5.2.0": version "5.2.0" - resolved "https://registry.yarnpkg.com/@aws-crypto/util/-/util-5.2.0.tgz#71284c9cffe7927ddadac793c14f14886d3876da" + resolved "https://registry.npmjs.org/@aws-crypto/util/-/util-5.2.0.tgz" integrity sha512-4RkU9EsI6ZpBve5fseQlGNUWKMa1RLPQ1dnjnQoe07ldfIzcsGb5hC5W0Dm7u423KWzawlrpbjXBrXCEv9zazQ== dependencies: "@aws-sdk/types" "^3.222.0" @@ -81,7 +81,7 @@ "@aws-sdk/client-cognito-identity@3.803.0": version "3.803.0" - resolved "https://registry.yarnpkg.com/@aws-sdk/client-cognito-identity/-/client-cognito-identity-3.803.0.tgz#f3356113d9555806bae029d29c34edfb5ed06fe9" + resolved "https://registry.npmjs.org/@aws-sdk/client-cognito-identity/-/client-cognito-identity-3.803.0.tgz" integrity sha512-VxcFO2AiHQwdWBcSLaPGEOy8c2ZJtRrzKjOuOwpTh4LhFPgrtfPgL66i46h7kLFGx56awq0WBSSvJQBxIdJ1Tw== dependencies: "@aws-crypto/sha256-browser" "5.2.0" @@ -126,7 +126,7 @@ "@aws-sdk/client-sagemaker@^3.583.0": version "3.803.0" - resolved "https://registry.yarnpkg.com/@aws-sdk/client-sagemaker/-/client-sagemaker-3.803.0.tgz#a441f53c9d0c6dedad2a5f52b792ea5d08aa8698" + resolved "https://registry.npmjs.org/@aws-sdk/client-sagemaker/-/client-sagemaker-3.803.0.tgz" integrity sha512-CC7PTNDzVhCzZufELcB7zFTEwE3pqaLgq/DxNjkuNwD1GTHZ83nhkedzp8pcFUr43lIn6WpDbGGODIZeIKEr3A== dependencies: "@aws-crypto/sha256-browser" "5.2.0" @@ -174,7 +174,7 @@ "@aws-sdk/client-sso@3.803.0": version "3.803.0" - resolved "https://registry.yarnpkg.com/@aws-sdk/client-sso/-/client-sso-3.803.0.tgz#16a4611e279694effcbb65d9d65ed1d64c635855" + resolved "https://registry.npmjs.org/@aws-sdk/client-sso/-/client-sso-3.803.0.tgz" integrity sha512-TT3BRD1yiL3IGXBKfq560vvEdyOJtJr8bp+R82dD6P0IoS8aFcNtF822BOJy7CqvxksOc3hQKLaPVzE82gE8Ow== dependencies: "@aws-crypto/sha256-browser" "5.2.0" @@ -218,7 +218,7 @@ "@aws-sdk/core@3.799.0": version "3.799.0" - resolved "https://registry.yarnpkg.com/@aws-sdk/core/-/core-3.799.0.tgz#383f903ede137df108dcd5f817074515d2b1242e" + resolved "https://registry.npmjs.org/@aws-sdk/core/-/core-3.799.0.tgz" integrity sha512-hkKF3Zpc6+H8GI1rlttYVRh9uEE77cqAzLmLpY3iu7sql8cZgPERRBfaFct8p1SaDyrksLNiboD1vKW58mbsYg== dependencies: "@aws-sdk/types" "3.775.0" @@ -235,7 +235,7 @@ "@aws-sdk/credential-provider-cognito-identity@3.803.0": version "3.803.0" - resolved "https://registry.yarnpkg.com/@aws-sdk/credential-provider-cognito-identity/-/credential-provider-cognito-identity-3.803.0.tgz#3c34f7f32a74833cea9e7ffa1d734abecae08291" + resolved "https://registry.npmjs.org/@aws-sdk/credential-provider-cognito-identity/-/credential-provider-cognito-identity-3.803.0.tgz" integrity sha512-1lJ3DPu4IBChPG7Fded+6tMGZiaILzg4q00QQzab1SM90DLo95RPOoe9gYQ1B5aDHuzZafil/HQYVdl4gARe7g== dependencies: "@aws-sdk/client-cognito-identity" "3.803.0" @@ -246,7 +246,7 @@ "@aws-sdk/credential-provider-env@3.799.0": version "3.799.0" - resolved "https://registry.yarnpkg.com/@aws-sdk/credential-provider-env/-/credential-provider-env-3.799.0.tgz#d933265b54b18ef1232762c318ff0d75bc7785f9" + resolved "https://registry.npmjs.org/@aws-sdk/credential-provider-env/-/credential-provider-env-3.799.0.tgz" integrity sha512-vT/SSWtbUIOW/U21qgEySmmO44SFWIA7WeQPX1OrI8WJ5n7OEI23JWLHjLvHTkYmuZK6z1rPcv7HzRgmuGRibA== dependencies: "@aws-sdk/core" "3.799.0" @@ -257,7 +257,7 @@ "@aws-sdk/credential-provider-http@3.799.0": version "3.799.0" - resolved "https://registry.yarnpkg.com/@aws-sdk/credential-provider-http/-/credential-provider-http-3.799.0.tgz#9286235bb30c4f22fbeac0ecf2fe5e5f99aaa282" + resolved "https://registry.npmjs.org/@aws-sdk/credential-provider-http/-/credential-provider-http-3.799.0.tgz" integrity sha512-2CjBpOWmhaPAExOgHnIB5nOkS5ef+mfRlJ1JC4nsnjAx0nrK4tk0XRE0LYz11P3+ue+a86cU8WTmBo+qjnGxPQ== dependencies: "@aws-sdk/core" "3.799.0" @@ -273,7 +273,7 @@ "@aws-sdk/credential-provider-ini@3.803.0": version "3.803.0" - resolved "https://registry.yarnpkg.com/@aws-sdk/credential-provider-ini/-/credential-provider-ini-3.803.0.tgz#5f831e53cf475756052aba81b128d66d8ba5a52f" + resolved "https://registry.npmjs.org/@aws-sdk/credential-provider-ini/-/credential-provider-ini-3.803.0.tgz" integrity sha512-XtbFftJex18GobpRWJxg5V7stVwvmV2gdBYW+zRM0YW6NZAR4NP/4vcc9ktM3++BWW5OF4Kvl7Nu7N4mAzRHmw== dependencies: "@aws-sdk/core" "3.799.0" @@ -292,7 +292,7 @@ "@aws-sdk/credential-provider-node@3.803.0": version "3.803.0" - resolved "https://registry.yarnpkg.com/@aws-sdk/credential-provider-node/-/credential-provider-node-3.803.0.tgz#bcfd9638f7f8e8a1b78fc2c58346daf7f67389e2" + resolved "https://registry.npmjs.org/@aws-sdk/credential-provider-node/-/credential-provider-node-3.803.0.tgz" integrity sha512-lPdRYbjxwmv7gRqbaEe1Y1Yl5fD4c43AuK3P31eKjf1j41hZEQ0dg9a9KLk7i6ehEoVsxewnJrvbC2pVoYrCmQ== dependencies: "@aws-sdk/credential-provider-env" "3.799.0" @@ -310,7 +310,7 @@ "@aws-sdk/credential-provider-process@3.799.0": version "3.799.0" - resolved "https://registry.yarnpkg.com/@aws-sdk/credential-provider-process/-/credential-provider-process-3.799.0.tgz#34e8b3d7c889bbb87dfe7c171255a8b99a34df25" + resolved "https://registry.npmjs.org/@aws-sdk/credential-provider-process/-/credential-provider-process-3.799.0.tgz" integrity sha512-g8jmNs2k98WNHMYcea1YKA+7ao2Ma4w0P42Dz4YpcI155pQHxHx25RwbOG+rsAKuo3bKwkW53HVE/ZTKhcWFgw== dependencies: "@aws-sdk/core" "3.799.0" @@ -322,7 +322,7 @@ "@aws-sdk/credential-provider-sso@3.803.0": version "3.803.0" - resolved "https://registry.yarnpkg.com/@aws-sdk/credential-provider-sso/-/credential-provider-sso-3.803.0.tgz#8a0a48a9acaab8f4e5c172427cc476a2f3513aaa" + resolved "https://registry.npmjs.org/@aws-sdk/credential-provider-sso/-/credential-provider-sso-3.803.0.tgz" integrity sha512-HEAcxSHrHxVekGnZqjFrkqdYAf4jFiZIMhuh0jqiqY6A4udEyXy1V623HVcTz/XXj6UBRnyD+zmOmlbzBvkfQg== dependencies: "@aws-sdk/client-sso" "3.803.0" @@ -336,7 +336,7 @@ "@aws-sdk/credential-provider-web-identity@3.803.0": version "3.803.0" - resolved "https://registry.yarnpkg.com/@aws-sdk/credential-provider-web-identity/-/credential-provider-web-identity-3.803.0.tgz#9612bd4e2a2bdf2d3826f18b2138f8bd996605bb" + resolved "https://registry.npmjs.org/@aws-sdk/credential-provider-web-identity/-/credential-provider-web-identity-3.803.0.tgz" integrity sha512-oChnEpwI25OW4GPvhI1VnXM3IQEkDhESGFZd5JHzJDHyvSF2NU58V86jkJyaa4H4X25IbGaThuulNI5xCOngjw== dependencies: "@aws-sdk/core" "3.799.0" @@ -348,7 +348,7 @@ "@aws-sdk/credential-providers@^3.583.0": version "3.803.0" - resolved "https://registry.yarnpkg.com/@aws-sdk/credential-providers/-/credential-providers-3.803.0.tgz#3d1d5dc93e156efb88fdee78e42ce103213d1e1c" + resolved "https://registry.npmjs.org/@aws-sdk/credential-providers/-/credential-providers-3.803.0.tgz" integrity sha512-yuN2ZNVgeAKlLWAAwU7SIF0lkgSQEBoehl49x0FEUuk6snRcuO13/zYVrmaCvplx71ET6quPGJsknlaiUWtdwA== dependencies: "@aws-sdk/client-cognito-identity" "3.803.0" @@ -373,7 +373,7 @@ "@aws-sdk/middleware-host-header@3.775.0": version "3.775.0" - resolved "https://registry.yarnpkg.com/@aws-sdk/middleware-host-header/-/middleware-host-header-3.775.0.tgz#1bf8160b8f4f96ba30c19f9baa030a6c9bd5f94d" + resolved "https://registry.npmjs.org/@aws-sdk/middleware-host-header/-/middleware-host-header-3.775.0.tgz" integrity sha512-tkSegM0Z6WMXpLB8oPys/d+umYIocvO298mGvcMCncpRl77L9XkvSLJIFzaHes+o7djAgIduYw8wKIMStFss2w== dependencies: "@aws-sdk/types" "3.775.0" @@ -383,7 +383,7 @@ "@aws-sdk/middleware-logger@3.775.0": version "3.775.0" - resolved "https://registry.yarnpkg.com/@aws-sdk/middleware-logger/-/middleware-logger-3.775.0.tgz#df1909d441cd4bade8d6c7d24c41532808db0e81" + resolved "https://registry.npmjs.org/@aws-sdk/middleware-logger/-/middleware-logger-3.775.0.tgz" integrity sha512-FaxO1xom4MAoUJsldmR92nT1G6uZxTdNYOFYtdHfd6N2wcNaTuxgjIvqzg5y7QIH9kn58XX/dzf1iTjgqUStZw== dependencies: "@aws-sdk/types" "3.775.0" @@ -392,7 +392,7 @@ "@aws-sdk/middleware-recursion-detection@3.775.0": version "3.775.0" - resolved "https://registry.yarnpkg.com/@aws-sdk/middleware-recursion-detection/-/middleware-recursion-detection-3.775.0.tgz#36a40f467754d7c86424d12ef45c05e96ce3475b" + resolved "https://registry.npmjs.org/@aws-sdk/middleware-recursion-detection/-/middleware-recursion-detection-3.775.0.tgz" integrity sha512-GLCzC8D0A0YDG5u3F5U03Vb9j5tcOEFhr8oc6PDk0k0vm5VwtZOE6LvK7hcCSoAB4HXyOUM0sQuXrbaAh9OwXA== dependencies: "@aws-sdk/types" "3.775.0" @@ -402,7 +402,7 @@ "@aws-sdk/middleware-user-agent@3.799.0": version "3.799.0" - resolved "https://registry.yarnpkg.com/@aws-sdk/middleware-user-agent/-/middleware-user-agent-3.799.0.tgz#e120e6e1341bcba5427cee0385172170e4615186" + resolved "https://registry.npmjs.org/@aws-sdk/middleware-user-agent/-/middleware-user-agent-3.799.0.tgz" integrity sha512-TropQZanbOTxa+p+Nl4fWkzlRhgFwDfW+Wb6TR3jZN7IXHNlPpgGFpdrgvBExhW/RBhqr+94OsR8Ou58lp3hhA== dependencies: "@aws-sdk/core" "3.799.0" @@ -415,7 +415,7 @@ "@aws-sdk/nested-clients@3.803.0": version "3.803.0" - resolved "https://registry.yarnpkg.com/@aws-sdk/nested-clients/-/nested-clients-3.803.0.tgz#aa5852a9c8b48bcad903ac841952b93ffd0bd3b3" + resolved "https://registry.npmjs.org/@aws-sdk/nested-clients/-/nested-clients-3.803.0.tgz" integrity sha512-wiWiYaFQxK2u37G9IOXuWkHelEbU8ulLxdHpoPf0TSu/1boqLW7fcofuZATAvFcvigQx3oebwO8G4c/mmixTTw== dependencies: "@aws-crypto/sha256-browser" "5.2.0" @@ -459,7 +459,7 @@ "@aws-sdk/protocol-http@^3.374.0": version "3.374.0" - resolved "https://registry.yarnpkg.com/@aws-sdk/protocol-http/-/protocol-http-3.374.0.tgz#e35e76096b995bbed803897a9f4587d11ca34088" + resolved "https://registry.npmjs.org/@aws-sdk/protocol-http/-/protocol-http-3.374.0.tgz" integrity sha512-9WpRUbINdGroV3HiZZIBoJvL2ndoWk39OfwxWs2otxByppJZNN14bg/lvCx5e8ggHUti7IBk5rb0nqQZ4m05pg== dependencies: "@smithy/protocol-http" "^1.1.0" @@ -467,7 +467,7 @@ "@aws-sdk/region-config-resolver@3.775.0": version "3.775.0" - resolved "https://registry.yarnpkg.com/@aws-sdk/region-config-resolver/-/region-config-resolver-3.775.0.tgz#592b52498e68501fe46480be3dfb185e949d1eab" + resolved "https://registry.npmjs.org/@aws-sdk/region-config-resolver/-/region-config-resolver-3.775.0.tgz" integrity sha512-40iH3LJjrQS3LKUJAl7Wj0bln7RFPEvUYKFxtP8a+oKFDO0F65F52xZxIJbPn6sHkxWDAnZlGgdjZXM3p2g5wQ== dependencies: "@aws-sdk/types" "3.775.0" @@ -479,7 +479,7 @@ "@aws-sdk/signature-v4@^3.374.0": version "3.374.0" - resolved "https://registry.yarnpkg.com/@aws-sdk/signature-v4/-/signature-v4-3.374.0.tgz#bd727f4c392acb81bc667aa4cfceeba608250771" + resolved "https://registry.npmjs.org/@aws-sdk/signature-v4/-/signature-v4-3.374.0.tgz" integrity sha512-2xLJvSdzcZZAg0lsDLUAuSQuihzK0dcxIK7WmfuJeF7DGKJFmp9czQmz5f3qiDz6IDQzvgK1M9vtJSVCslJbyQ== dependencies: "@smithy/signature-v4" "^1.0.1" @@ -487,7 +487,7 @@ "@aws-sdk/token-providers@3.803.0": version "3.803.0" - resolved "https://registry.yarnpkg.com/@aws-sdk/token-providers/-/token-providers-3.803.0.tgz#ba0f6b2919521125cf9c280bc3de1135c4e47e25" + resolved "https://registry.npmjs.org/@aws-sdk/token-providers/-/token-providers-3.803.0.tgz" integrity sha512-lDbMgVjWWEPT7a6lLaAEPPljwOeLTjPX2sJ7MoDICpQotg4Yd8cQfX3nqScSyLAGSc7Rq/21UPnPoij/E0K3lg== dependencies: "@aws-sdk/nested-clients" "3.803.0" @@ -499,7 +499,7 @@ "@aws-sdk/types@3.775.0", "@aws-sdk/types@^3.222.0": version "3.775.0" - resolved "https://registry.yarnpkg.com/@aws-sdk/types/-/types-3.775.0.tgz#09863a9e68c080947db7c3d226d1c56b8f0f5150" + resolved "https://registry.npmjs.org/@aws-sdk/types/-/types-3.775.0.tgz" integrity sha512-ZoGKwa4C9fC9Av6bdfqcW6Ix5ot05F/S4VxWR2nHuMv7hzfmAjTOcUiWT7UR4hM/U0whf84VhDtXN/DWAk52KA== dependencies: "@smithy/types" "^4.2.0" @@ -507,7 +507,7 @@ "@aws-sdk/util-endpoints@3.787.0": version "3.787.0" - resolved "https://registry.yarnpkg.com/@aws-sdk/util-endpoints/-/util-endpoints-3.787.0.tgz#1398f0bd87f19e615ae920c73e16d9d5e5cb76d1" + resolved "https://registry.npmjs.org/@aws-sdk/util-endpoints/-/util-endpoints-3.787.0.tgz" integrity sha512-fd3zkiOkwnbdbN0Xp9TsP5SWrmv0SpT70YEdbb8wAj2DWQwiCmFszaSs+YCvhoCdmlR3Wl9Spu0pGpSAGKeYvQ== dependencies: "@aws-sdk/types" "3.775.0" @@ -517,14 +517,14 @@ "@aws-sdk/util-locate-window@^3.0.0": version "3.723.0" - resolved "https://registry.yarnpkg.com/@aws-sdk/util-locate-window/-/util-locate-window-3.723.0.tgz#174551bfdd2eb36d3c16e7023fd7e7ee96ad0fa9" + resolved "https://registry.npmjs.org/@aws-sdk/util-locate-window/-/util-locate-window-3.723.0.tgz" integrity sha512-Yf2CS10BqK688DRsrKI/EO6B8ff5J86NXe4C+VCysK7UOgN0l1zOTeTukZ3H8Q9tYYX3oaF1961o8vRkFm7Nmw== dependencies: tslib "^2.6.2" "@aws-sdk/util-user-agent-browser@3.775.0": version "3.775.0" - resolved "https://registry.yarnpkg.com/@aws-sdk/util-user-agent-browser/-/util-user-agent-browser-3.775.0.tgz#b69a1a5548ccc6db1acb3ec115967593ece927a1" + resolved "https://registry.npmjs.org/@aws-sdk/util-user-agent-browser/-/util-user-agent-browser-3.775.0.tgz" integrity sha512-txw2wkiJmZKVdDbscK7VBK+u+TJnRtlUjRTLei+elZg2ADhpQxfVAQl436FUeIv6AhB/oRHW6/K/EAGXUSWi0A== dependencies: "@aws-sdk/types" "3.775.0" @@ -534,7 +534,7 @@ "@aws-sdk/util-user-agent-node@3.799.0": version "3.799.0" - resolved "https://registry.yarnpkg.com/@aws-sdk/util-user-agent-node/-/util-user-agent-node-3.799.0.tgz#8d0794add4efc79830143277f5faa27f16531c7a" + resolved "https://registry.npmjs.org/@aws-sdk/util-user-agent-node/-/util-user-agent-node-3.799.0.tgz" integrity sha512-iXBk38RbIWPF5Nq9O4AnktORAzXovSVqWYClvS1qbE7ILsnTLJbagU9HlU25O2iV5COVh1qZkwuP5NHQ2yTEyw== dependencies: "@aws-sdk/middleware-user-agent" "3.799.0" @@ -545,28 +545,28 @@ "@aws-sdk/util-utf8-browser@^3.0.0": version "3.259.0" - resolved "https://registry.yarnpkg.com/@aws-sdk/util-utf8-browser/-/util-utf8-browser-3.259.0.tgz#3275a6f5eb334f96ca76635b961d3c50259fd9ff" + resolved "https://registry.npmjs.org/@aws-sdk/util-utf8-browser/-/util-utf8-browser-3.259.0.tgz" integrity sha512-UvFa/vR+e19XookZF8RzFZBrw2EUkQWxiBW0yYQAhvk3C+QVGl0H3ouca8LDBlBfQKXwmW3huo/59H8rwb1wJw== dependencies: tslib "^2.3.1" "@babel/code-frame@^7.0.0", "@babel/code-frame@^7.12.13", "@babel/code-frame@^7.22.13", "@babel/code-frame@^7.27.1": version "7.27.1" - resolved "https://registry.yarnpkg.com/@babel/code-frame/-/code-frame-7.27.1.tgz#200f715e66d52a23b221a9435534a91cc13ad5be" + resolved "https://registry.npmjs.org/@babel/code-frame/-/code-frame-7.27.1.tgz" integrity sha512-cjQ7ZlQ0Mv3b47hABuTevyTuYN4i+loJKGeV9flcCgIK37cCXRh+L1bd3iBHlynerhQ7BhCkn2BPbQUL+rGqFg== dependencies: "@babel/helper-validator-identifier" "^7.27.1" js-tokens "^4.0.0" picocolors "^1.1.1" -"@babel/compat-data@^7.27.2": - version "7.27.2" - resolved "https://registry.yarnpkg.com/@babel/compat-data/-/compat-data-7.27.2.tgz#4183f9e642fd84e74e3eea7ffa93a412e3b102c9" - integrity sha512-TUtMJYRPyUb/9aU8f3K0mjmjf6M9N5Woshn2CS6nqJSeJtTtQcpLUXjGt9vbF8ZGff0El99sWkLgzwW3VXnxZQ== +"@babel/compat-data@^7.27.1": + version "7.27.1" + resolved "https://registry.npmjs.org/@babel/compat-data/-/compat-data-7.27.1.tgz" + integrity sha512-Q+E+rd/yBzNQhXkG+zQnF58e4zoZfBedaxwzPmicKsiK3nt8iJYrSrDbjwFFDGC4f+rPafqRaPH6TsDoSvMf7A== "@babel/core@^7.11.6", "@babel/core@^7.12.3", "@babel/core@^7.23.9": version "7.27.1" - resolved "https://registry.yarnpkg.com/@babel/core/-/core-7.27.1.tgz#89de51e86bd12246003e3524704c49541b16c3e6" + resolved "https://registry.npmjs.org/@babel/core/-/core-7.27.1.tgz" integrity sha512-IaaGWsQqfsQWVLqMn9OB92MNN7zukfVA4s7KKAI0KfrrDsZ0yhi5uV4baBuLuN7n3vsZpwP8asPPcVwApxvjBQ== dependencies: "@ampproject/remapping" "^2.2.0" @@ -585,18 +585,18 @@ json5 "^2.2.3" semver "^6.3.1" -"@babel/generator@7.17.7": +"@babel/generator@7.17.7", "@babel/generator@^7.7.2": version "7.17.7" - resolved "https://registry.yarnpkg.com/@babel/generator/-/generator-7.17.7.tgz#8da2599beb4a86194a3b24df6c085931d9ee45ad" + resolved "https://registry.npmjs.org/@babel/generator/-/generator-7.17.7.tgz" integrity sha512-oLcVCTeIFadUoArDTwpluncplrYBmTCCZZgXCbgNGvOBBiSDDK3eWO4b/+eOTli5tKv1lg+a5/NAXg+nTcei1w== dependencies: "@babel/types" "^7.17.0" jsesc "^2.5.1" source-map "^0.5.0" -"@babel/generator@^7.23.0", "@babel/generator@^7.27.1", "@babel/generator@^7.7.2": +"@babel/generator@^7.23.0", "@babel/generator@^7.27.1": version "7.27.1" - resolved "https://registry.yarnpkg.com/@babel/generator/-/generator-7.27.1.tgz#862d4fad858f7208edd487c28b58144036b76230" + resolved "https://registry.npmjs.org/@babel/generator/-/generator-7.27.1.tgz" integrity sha512-UnJfnIpc/+JO0/+KRVQNGU+y5taA5vCbwN8+azkX6beii/ZF+enZJSOKo11ZSzGJjlNfJHfQtmQT8H+9TXPG2w== dependencies: "@babel/parser" "^7.27.1" @@ -606,11 +606,11 @@ jsesc "^3.0.2" "@babel/helper-compilation-targets@^7.27.1": - version "7.27.2" - resolved "https://registry.yarnpkg.com/@babel/helper-compilation-targets/-/helper-compilation-targets-7.27.2.tgz#46a0f6efab808d51d29ce96858dd10ce8732733d" - integrity sha512-2+1thGUUWWjLTYTHZWK1n8Yga0ijBz1XAhUXcKy81rd5g6yh7hGqMp45v7cadSbEHc9G3OTv45SyneRN3ps4DQ== + version "7.27.1" + resolved "https://registry.npmjs.org/@babel/helper-compilation-targets/-/helper-compilation-targets-7.27.1.tgz" + integrity sha512-2YaDd/Rd9E598B5+WIc8wJPmWETiiJXFYVE60oX8FDohv7rAUU3CQj+A1MgeEmcsk2+dQuEjIe/GDvig0SqL4g== dependencies: - "@babel/compat-data" "^7.27.2" + "@babel/compat-data" "^7.27.1" "@babel/helper-validator-option" "^7.27.1" browserslist "^4.24.0" lru-cache "^5.1.1" @@ -618,14 +618,14 @@ "@babel/helper-environment-visitor@^7.22.20": version "7.24.7" - resolved "https://registry.yarnpkg.com/@babel/helper-environment-visitor/-/helper-environment-visitor-7.24.7.tgz#4b31ba9551d1f90781ba83491dd59cf9b269f7d9" + resolved "https://registry.npmjs.org/@babel/helper-environment-visitor/-/helper-environment-visitor-7.24.7.tgz" integrity sha512-DoiN84+4Gnd0ncbBOM9AZENV4a5ZiL39HYMyZJGZ/AZEykHYdJw0wW3kdcsh9/Kn+BRXHLkkklZ51ecPKmI1CQ== dependencies: "@babel/types" "^7.24.7" "@babel/helper-function-name@^7.23.0": version "7.24.7" - resolved "https://registry.yarnpkg.com/@babel/helper-function-name/-/helper-function-name-7.24.7.tgz#75f1e1725742f39ac6584ee0b16d94513da38dd2" + resolved "https://registry.npmjs.org/@babel/helper-function-name/-/helper-function-name-7.24.7.tgz" integrity sha512-FyoJTsj/PEUWu1/TYRiXTIHc8lbw+TDYkZuoE43opPS5TrI7MyONBE1oNvfguEXAD9yhQRrVBnXdXzSLQl9XnA== dependencies: "@babel/template" "^7.24.7" @@ -633,14 +633,14 @@ "@babel/helper-hoist-variables@^7.22.5": version "7.24.7" - resolved "https://registry.yarnpkg.com/@babel/helper-hoist-variables/-/helper-hoist-variables-7.24.7.tgz#b4ede1cde2fd89436397f30dc9376ee06b0f25ee" + resolved "https://registry.npmjs.org/@babel/helper-hoist-variables/-/helper-hoist-variables-7.24.7.tgz" integrity sha512-MJJwhkoGy5c4ehfoRyrJ/owKeMl19U54h27YYftT0o2teQ3FJ3nQUf/I3LlJsX4l3qlw7WRXUmiyajvHXoTubQ== dependencies: "@babel/types" "^7.24.7" "@babel/helper-module-imports@^7.27.1": version "7.27.1" - resolved "https://registry.yarnpkg.com/@babel/helper-module-imports/-/helper-module-imports-7.27.1.tgz#7ef769a323e2655e126673bb6d2d6913bbead204" + resolved "https://registry.npmjs.org/@babel/helper-module-imports/-/helper-module-imports-7.27.1.tgz" integrity sha512-0gSFWUPNXNopqtIPQvlD5WgXYI5GY2kP2cCvoT8kczjbfcfuIljTbcWrulD1CIPIX2gt1wghbDy08yE1p+/r3w== dependencies: "@babel/traverse" "^7.27.1" @@ -648,7 +648,7 @@ "@babel/helper-module-transforms@^7.27.1": version "7.27.1" - resolved "https://registry.yarnpkg.com/@babel/helper-module-transforms/-/helper-module-transforms-7.27.1.tgz#e1663b8b71d2de948da5c4fb2a20ca4f3ec27a6f" + resolved "https://registry.npmjs.org/@babel/helper-module-transforms/-/helper-module-transforms-7.27.1.tgz" integrity sha512-9yHn519/8KvTU5BjTVEEeIM3w9/2yXNKoD82JifINImhpKkARMJKPP59kLo+BafpdN5zgNeIcS4jsGDmd3l58g== dependencies: "@babel/helper-module-imports" "^7.27.1" @@ -657,177 +657,177 @@ "@babel/helper-plugin-utils@^7.0.0", "@babel/helper-plugin-utils@^7.10.4", "@babel/helper-plugin-utils@^7.12.13", "@babel/helper-plugin-utils@^7.14.5", "@babel/helper-plugin-utils@^7.27.1", "@babel/helper-plugin-utils@^7.8.0": version "7.27.1" - resolved "https://registry.yarnpkg.com/@babel/helper-plugin-utils/-/helper-plugin-utils-7.27.1.tgz#ddb2f876534ff8013e6c2b299bf4d39b3c51d44c" + resolved "https://registry.npmjs.org/@babel/helper-plugin-utils/-/helper-plugin-utils-7.27.1.tgz" integrity sha512-1gn1Up5YXka3YYAHGKpbideQ5Yjf1tDa9qYcgysz+cNCXukyLl6DjPXhD3VRwSb8c0J9tA4b2+rHEZtc6R0tlw== "@babel/helper-split-export-declaration@^7.22.6": version "7.24.7" - resolved "https://registry.yarnpkg.com/@babel/helper-split-export-declaration/-/helper-split-export-declaration-7.24.7.tgz#83949436890e07fa3d6873c61a96e3bbf692d856" + resolved "https://registry.npmjs.org/@babel/helper-split-export-declaration/-/helper-split-export-declaration-7.24.7.tgz" integrity sha512-oy5V7pD+UvfkEATUKvIjvIAH/xCzfsFVw7ygW2SI6NClZzquT+mwdTfgfdbUiceh6iQO0CHtCPsyze/MZ2YbAA== dependencies: "@babel/types" "^7.24.7" "@babel/helper-string-parser@^7.27.1": version "7.27.1" - resolved "https://registry.yarnpkg.com/@babel/helper-string-parser/-/helper-string-parser-7.27.1.tgz#54da796097ab19ce67ed9f88b47bb2ec49367687" + resolved "https://registry.npmjs.org/@babel/helper-string-parser/-/helper-string-parser-7.27.1.tgz" integrity sha512-qMlSxKbpRlAridDExk92nSobyDdpPijUq2DW6oDnUqd0iOGxmQjyqhMIihI9+zv4LPyZdRje2cavWPbCbWm3eA== "@babel/helper-validator-identifier@^7.16.7", "@babel/helper-validator-identifier@^7.27.1": version "7.27.1" - resolved "https://registry.yarnpkg.com/@babel/helper-validator-identifier/-/helper-validator-identifier-7.27.1.tgz#a7054dcc145a967dd4dc8fee845a57c1316c9df8" + resolved "https://registry.npmjs.org/@babel/helper-validator-identifier/-/helper-validator-identifier-7.27.1.tgz" integrity sha512-D2hP9eA+Sqx1kBZgzxZh0y1trbuU+JoDkiEwqhQ36nodYqJwyEIhPSdMNd7lOm/4io72luTPWH20Yda0xOuUow== "@babel/helper-validator-option@^7.27.1": version "7.27.1" - resolved "https://registry.yarnpkg.com/@babel/helper-validator-option/-/helper-validator-option-7.27.1.tgz#fa52f5b1e7db1ab049445b421c4471303897702f" + resolved "https://registry.npmjs.org/@babel/helper-validator-option/-/helper-validator-option-7.27.1.tgz" integrity sha512-YvjJow9FxbhFFKDSuFnVCe2WxXk1zWc22fFePVNEaWJEu8IrZVlda6N0uHwzZrUM1il7NC9Mlp4MaJYbYd9JSg== "@babel/helpers@^7.27.1": version "7.27.1" - resolved "https://registry.yarnpkg.com/@babel/helpers/-/helpers-7.27.1.tgz#ffc27013038607cdba3288e692c3611c06a18aa4" + resolved "https://registry.npmjs.org/@babel/helpers/-/helpers-7.27.1.tgz" integrity sha512-FCvFTm0sWV8Fxhpp2McP5/W53GPllQ9QeQ7SiqGWjMf/LVG07lFa5+pgK05IRhVwtvafT22KF+ZSnM9I545CvQ== dependencies: "@babel/template" "^7.27.1" "@babel/types" "^7.27.1" -"@babel/parser@^7.1.0", "@babel/parser@^7.14.7", "@babel/parser@^7.20.5", "@babel/parser@^7.20.7", "@babel/parser@^7.23.0", "@babel/parser@^7.23.9", "@babel/parser@^7.27.1", "@babel/parser@^7.27.2": - version "7.27.2" - resolved "https://registry.yarnpkg.com/@babel/parser/-/parser-7.27.2.tgz#577518bedb17a2ce4212afd052e01f7df0941127" - integrity sha512-QYLs8299NA7WM/bZAdp+CviYYkVoYXlDW2rzliy3chxd1PQjej7JORuMJDJXJUb9g0TT+B99EwaVLKmX+sPXWw== +"@babel/parser@^7.1.0", "@babel/parser@^7.14.7", "@babel/parser@^7.20.5", "@babel/parser@^7.20.7", "@babel/parser@^7.23.0", "@babel/parser@^7.23.9", "@babel/parser@^7.27.1": + version "7.27.1" + resolved "https://registry.npmjs.org/@babel/parser/-/parser-7.27.1.tgz" + integrity sha512-I0dZ3ZpCrJ1c04OqlNsQcKiZlsrXf/kkE4FXzID9rIOYICsAbA8mMDzhW/luRNAHdCNt7os/u8wenklZDlUVUQ== dependencies: "@babel/types" "^7.27.1" "@babel/plugin-syntax-async-generators@^7.8.4": version "7.8.4" - resolved "https://registry.yarnpkg.com/@babel/plugin-syntax-async-generators/-/plugin-syntax-async-generators-7.8.4.tgz#a983fb1aeb2ec3f6ed042a210f640e90e786fe0d" + resolved "https://registry.npmjs.org/@babel/plugin-syntax-async-generators/-/plugin-syntax-async-generators-7.8.4.tgz" integrity sha512-tycmZxkGfZaxhMRbXlPXuVFpdWlXpir2W4AMhSJgRKzk/eDlIXOhb2LHWoLpDF7TEHylV5zNhykX6KAgHJmTNw== dependencies: "@babel/helper-plugin-utils" "^7.8.0" "@babel/plugin-syntax-bigint@^7.8.3": version "7.8.3" - resolved "https://registry.yarnpkg.com/@babel/plugin-syntax-bigint/-/plugin-syntax-bigint-7.8.3.tgz#4c9a6f669f5d0cdf1b90a1671e9a146be5300cea" + resolved "https://registry.npmjs.org/@babel/plugin-syntax-bigint/-/plugin-syntax-bigint-7.8.3.tgz" integrity sha512-wnTnFlG+YxQm3vDxpGE57Pj0srRU4sHE/mDkt1qv2YJJSeUAec2ma4WLUnUPeKjyrfntVwe/N6dCXpU+zL3Npg== dependencies: "@babel/helper-plugin-utils" "^7.8.0" "@babel/plugin-syntax-class-properties@^7.12.13": version "7.12.13" - resolved "https://registry.yarnpkg.com/@babel/plugin-syntax-class-properties/-/plugin-syntax-class-properties-7.12.13.tgz#b5c987274c4a3a82b89714796931a6b53544ae10" + resolved "https://registry.npmjs.org/@babel/plugin-syntax-class-properties/-/plugin-syntax-class-properties-7.12.13.tgz" integrity sha512-fm4idjKla0YahUNgFNLCB0qySdsoPiZP3iQE3rky0mBUtMZ23yDJ9SJdg6dXTSDnulOVqiF3Hgr9nbXvXTQZYA== dependencies: "@babel/helper-plugin-utils" "^7.12.13" "@babel/plugin-syntax-class-static-block@^7.14.5": version "7.14.5" - resolved "https://registry.yarnpkg.com/@babel/plugin-syntax-class-static-block/-/plugin-syntax-class-static-block-7.14.5.tgz#195df89b146b4b78b3bf897fd7a257c84659d406" + resolved "https://registry.npmjs.org/@babel/plugin-syntax-class-static-block/-/plugin-syntax-class-static-block-7.14.5.tgz" integrity sha512-b+YyPmr6ldyNnM6sqYeMWE+bgJcJpO6yS4QD7ymxgH34GBPNDM/THBh8iunyvKIZztiwLH4CJZ0RxTk9emgpjw== dependencies: "@babel/helper-plugin-utils" "^7.14.5" "@babel/plugin-syntax-import-attributes@^7.24.7": version "7.27.1" - resolved "https://registry.yarnpkg.com/@babel/plugin-syntax-import-attributes/-/plugin-syntax-import-attributes-7.27.1.tgz#34c017d54496f9b11b61474e7ea3dfd5563ffe07" + resolved "https://registry.npmjs.org/@babel/plugin-syntax-import-attributes/-/plugin-syntax-import-attributes-7.27.1.tgz" integrity sha512-oFT0FrKHgF53f4vOsZGi2Hh3I35PfSmVs4IBFLFj4dnafP+hIWDLg3VyKmUHfLoLHlyxY4C7DGtmHuJgn+IGww== dependencies: "@babel/helper-plugin-utils" "^7.27.1" "@babel/plugin-syntax-import-meta@^7.10.4": version "7.10.4" - resolved "https://registry.yarnpkg.com/@babel/plugin-syntax-import-meta/-/plugin-syntax-import-meta-7.10.4.tgz#ee601348c370fa334d2207be158777496521fd51" + resolved "https://registry.npmjs.org/@babel/plugin-syntax-import-meta/-/plugin-syntax-import-meta-7.10.4.tgz" integrity sha512-Yqfm+XDx0+Prh3VSeEQCPU81yC+JWZ2pDPFSS4ZdpfZhp4MkFMaDC1UqseovEKwSUpnIL7+vK+Clp7bfh0iD7g== dependencies: "@babel/helper-plugin-utils" "^7.10.4" "@babel/plugin-syntax-json-strings@^7.8.3": version "7.8.3" - resolved "https://registry.yarnpkg.com/@babel/plugin-syntax-json-strings/-/plugin-syntax-json-strings-7.8.3.tgz#01ca21b668cd8218c9e640cb6dd88c5412b2c96a" + resolved "https://registry.npmjs.org/@babel/plugin-syntax-json-strings/-/plugin-syntax-json-strings-7.8.3.tgz" integrity sha512-lY6kdGpWHvjoe2vk4WrAapEuBR69EMxZl+RoGRhrFGNYVK8mOPAW8VfbT/ZgrFbXlDNiiaxQnAtgVCZ6jv30EA== dependencies: "@babel/helper-plugin-utils" "^7.8.0" "@babel/plugin-syntax-jsx@^7.7.2": version "7.27.1" - resolved "https://registry.yarnpkg.com/@babel/plugin-syntax-jsx/-/plugin-syntax-jsx-7.27.1.tgz#2f9beb5eff30fa507c5532d107daac7b888fa34c" + resolved "https://registry.npmjs.org/@babel/plugin-syntax-jsx/-/plugin-syntax-jsx-7.27.1.tgz" integrity sha512-y8YTNIeKoyhGd9O0Jiyzyyqk8gdjnumGTQPsz0xOZOQ2RmkVJeZ1vmmfIvFEKqucBG6axJGBZDE/7iI5suUI/w== dependencies: "@babel/helper-plugin-utils" "^7.27.1" "@babel/plugin-syntax-logical-assignment-operators@^7.10.4": version "7.10.4" - resolved "https://registry.yarnpkg.com/@babel/plugin-syntax-logical-assignment-operators/-/plugin-syntax-logical-assignment-operators-7.10.4.tgz#ca91ef46303530448b906652bac2e9fe9941f699" + resolved "https://registry.npmjs.org/@babel/plugin-syntax-logical-assignment-operators/-/plugin-syntax-logical-assignment-operators-7.10.4.tgz" integrity sha512-d8waShlpFDinQ5MtvGU9xDAOzKH47+FFoney2baFIoMr952hKOLp1HR7VszoZvOsV/4+RRszNY7D17ba0te0ig== dependencies: "@babel/helper-plugin-utils" "^7.10.4" "@babel/plugin-syntax-nullish-coalescing-operator@^7.8.3": version "7.8.3" - resolved "https://registry.yarnpkg.com/@babel/plugin-syntax-nullish-coalescing-operator/-/plugin-syntax-nullish-coalescing-operator-7.8.3.tgz#167ed70368886081f74b5c36c65a88c03b66d1a9" + resolved "https://registry.npmjs.org/@babel/plugin-syntax-nullish-coalescing-operator/-/plugin-syntax-nullish-coalescing-operator-7.8.3.tgz" integrity sha512-aSff4zPII1u2QD7y+F8oDsz19ew4IGEJg9SVW+bqwpwtfFleiQDMdzA/R+UlWDzfnHFCxxleFT0PMIrR36XLNQ== dependencies: "@babel/helper-plugin-utils" "^7.8.0" "@babel/plugin-syntax-numeric-separator@^7.10.4": version "7.10.4" - resolved "https://registry.yarnpkg.com/@babel/plugin-syntax-numeric-separator/-/plugin-syntax-numeric-separator-7.10.4.tgz#b9b070b3e33570cd9fd07ba7fa91c0dd37b9af97" + resolved "https://registry.npmjs.org/@babel/plugin-syntax-numeric-separator/-/plugin-syntax-numeric-separator-7.10.4.tgz" integrity sha512-9H6YdfkcK/uOnY/K7/aA2xpzaAgkQn37yzWUMRK7OaPOqOpGS1+n0H5hxT9AUw9EsSjPW8SVyMJwYRtWs3X3ug== dependencies: "@babel/helper-plugin-utils" "^7.10.4" "@babel/plugin-syntax-object-rest-spread@^7.8.3": version "7.8.3" - resolved "https://registry.yarnpkg.com/@babel/plugin-syntax-object-rest-spread/-/plugin-syntax-object-rest-spread-7.8.3.tgz#60e225edcbd98a640332a2e72dd3e66f1af55871" + resolved "https://registry.npmjs.org/@babel/plugin-syntax-object-rest-spread/-/plugin-syntax-object-rest-spread-7.8.3.tgz" integrity sha512-XoqMijGZb9y3y2XskN+P1wUGiVwWZ5JmoDRwx5+3GmEplNyVM2s2Dg8ILFQm8rWM48orGy5YpI5Bl8U1y7ydlA== dependencies: "@babel/helper-plugin-utils" "^7.8.0" "@babel/plugin-syntax-optional-catch-binding@^7.8.3": version "7.8.3" - resolved "https://registry.yarnpkg.com/@babel/plugin-syntax-optional-catch-binding/-/plugin-syntax-optional-catch-binding-7.8.3.tgz#6111a265bcfb020eb9efd0fdfd7d26402b9ed6c1" + resolved "https://registry.npmjs.org/@babel/plugin-syntax-optional-catch-binding/-/plugin-syntax-optional-catch-binding-7.8.3.tgz" integrity sha512-6VPD0Pc1lpTqw0aKoeRTMiB+kWhAoT24PA+ksWSBrFtl5SIRVpZlwN3NNPQjehA2E/91FV3RjLWoVTglWcSV3Q== dependencies: "@babel/helper-plugin-utils" "^7.8.0" "@babel/plugin-syntax-optional-chaining@^7.8.3": version "7.8.3" - resolved "https://registry.yarnpkg.com/@babel/plugin-syntax-optional-chaining/-/plugin-syntax-optional-chaining-7.8.3.tgz#4f69c2ab95167e0180cd5336613f8c5788f7d48a" + resolved "https://registry.npmjs.org/@babel/plugin-syntax-optional-chaining/-/plugin-syntax-optional-chaining-7.8.3.tgz" integrity sha512-KoK9ErH1MBlCPxV0VANkXW2/dw4vlbGDrFgz8bmUsBGYkFRcbRwMh6cIJubdPrkxRwuGdtCk0v/wPTKbQgBjkg== dependencies: "@babel/helper-plugin-utils" "^7.8.0" "@babel/plugin-syntax-private-property-in-object@^7.14.5": version "7.14.5" - resolved "https://registry.yarnpkg.com/@babel/plugin-syntax-private-property-in-object/-/plugin-syntax-private-property-in-object-7.14.5.tgz#0dc6671ec0ea22b6e94a1114f857970cd39de1ad" + resolved "https://registry.npmjs.org/@babel/plugin-syntax-private-property-in-object/-/plugin-syntax-private-property-in-object-7.14.5.tgz" integrity sha512-0wVnp9dxJ72ZUJDV27ZfbSj6iHLoytYZmh3rFcxNnvsJF3ktkzLDZPy/mA17HGsaQT3/DQsWYX1f1QGWkCoVUg== dependencies: "@babel/helper-plugin-utils" "^7.14.5" "@babel/plugin-syntax-top-level-await@^7.14.5": version "7.14.5" - resolved "https://registry.yarnpkg.com/@babel/plugin-syntax-top-level-await/-/plugin-syntax-top-level-await-7.14.5.tgz#c1cfdadc35a646240001f06138247b741c34d94c" + resolved "https://registry.npmjs.org/@babel/plugin-syntax-top-level-await/-/plugin-syntax-top-level-await-7.14.5.tgz" integrity sha512-hx++upLv5U1rgYfwe1xBQUhRmU41NEvpUvrp8jkrSCdvGSnM5/qdRMtylJ6PG5OFkBaHkbTAKTnd3/YyESRHFw== dependencies: "@babel/helper-plugin-utils" "^7.14.5" "@babel/plugin-syntax-typescript@^7.7.2": version "7.27.1" - resolved "https://registry.yarnpkg.com/@babel/plugin-syntax-typescript/-/plugin-syntax-typescript-7.27.1.tgz#5147d29066a793450f220c63fa3a9431b7e6dd18" + resolved "https://registry.npmjs.org/@babel/plugin-syntax-typescript/-/plugin-syntax-typescript-7.27.1.tgz" integrity sha512-xfYCBMxveHrRMnAWl1ZlPXOZjzkN82THFvLhQhFXFt81Z5HnN+EtUkZhv/zcKpmT3fzmWZB0ywiBrbC3vogbwQ== dependencies: "@babel/helper-plugin-utils" "^7.27.1" "@babel/template@^7.24.7", "@babel/template@^7.27.1", "@babel/template@^7.3.3": - version "7.27.2" - resolved "https://registry.yarnpkg.com/@babel/template/-/template-7.27.2.tgz#fa78ceed3c4e7b63ebf6cb39e5852fca45f6809d" - integrity sha512-LPDZ85aEJyYSd18/DkjNh4/y1ntkE5KwUHWTiqgRxruuZL2F1yuHligVHLvcHY2vMHXttKFpJn6LwfI7cw7ODw== + version "7.27.1" + resolved "https://registry.npmjs.org/@babel/template/-/template-7.27.1.tgz" + integrity sha512-Fyo3ghWMqkHHpHQCoBs2VnYjR4iWFFjguTDEqA5WgZDOrFesVjMhMM2FSqTKSoUSDO1VQtavj8NFpdRBEvJTtg== dependencies: "@babel/code-frame" "^7.27.1" - "@babel/parser" "^7.27.2" + "@babel/parser" "^7.27.1" "@babel/types" "^7.27.1" "@babel/traverse@7.23.2": version "7.23.2" - resolved "https://registry.yarnpkg.com/@babel/traverse/-/traverse-7.23.2.tgz#329c7a06735e144a506bdb2cad0268b7f46f4ad8" + resolved "https://registry.npmjs.org/@babel/traverse/-/traverse-7.23.2.tgz" integrity sha512-azpe59SQ48qG6nu2CzcMLbxUudtN+dOM9kDbUqGq3HXUJRlo7i8fvPoxQUzYgLZ4cMVmuZgm8vvBpNeRhd6XSw== dependencies: "@babel/code-frame" "^7.22.13" @@ -843,7 +843,7 @@ "@babel/traverse@^7.27.1": version "7.27.1" - resolved "https://registry.yarnpkg.com/@babel/traverse/-/traverse-7.27.1.tgz#4db772902b133bbddd1c4f7a7ee47761c1b9f291" + resolved "https://registry.npmjs.org/@babel/traverse/-/traverse-7.27.1.tgz" integrity sha512-ZCYtZciz1IWJB4U61UPu4KEaqyfj+r5T1Q5mqPo+IBpcG9kHv30Z0aD8LXPgC1trYa6rK0orRyAhqUgk4MjmEg== dependencies: "@babel/code-frame" "^7.27.1" @@ -854,17 +854,17 @@ debug "^4.3.1" globals "^11.1.0" -"@babel/types@7.17.0": +"@babel/types@7.17.0", "@babel/types@^7.0.0", "@babel/types@^7.17.0", "@babel/types@^7.3.3": version "7.17.0" - resolved "https://registry.yarnpkg.com/@babel/types/-/types-7.17.0.tgz#a826e368bccb6b3d84acd76acad5c0d87342390b" + resolved "https://registry.npmjs.org/@babel/types/-/types-7.17.0.tgz" integrity sha512-TmKSNO4D5rzhL5bjWFcVHHLETzfQ/AmbKpKPOSjlP0WoHZ6L911fgoOKY4Alp/emzG4cHJdyN49zpgkbXFEHHw== dependencies: "@babel/helper-validator-identifier" "^7.16.7" to-fast-properties "^2.0.0" -"@babel/types@^7.0.0", "@babel/types@^7.17.0", "@babel/types@^7.20.7", "@babel/types@^7.23.0", "@babel/types@^7.24.7", "@babel/types@^7.27.1", "@babel/types@^7.3.3": +"@babel/types@^7.20.7", "@babel/types@^7.23.0", "@babel/types@^7.24.7", "@babel/types@^7.27.1": version "7.27.1" - resolved "https://registry.yarnpkg.com/@babel/types/-/types-7.27.1.tgz#9defc53c16fc899e46941fc6901a9eea1c9d8560" + resolved "https://registry.npmjs.org/@babel/types/-/types-7.27.1.tgz" integrity sha512-+EzkxvLNfiUeKMgy/3luqfsCWFRXLb7U6wNQTk60tovuckwB15B191tJWvpp4HjiQWdJkCxO3Wbvc6jlk3Xb2Q== dependencies: "@babel/helper-string-parser" "^7.27.1" @@ -872,12 +872,12 @@ "@bcoe/v8-coverage@^0.2.3": version "0.2.3" - resolved "https://registry.yarnpkg.com/@bcoe/v8-coverage/-/v8-coverage-0.2.3.tgz#75a2e8b51cb758a7553d6804a5932d7aace75c39" + resolved "https://registry.npmjs.org/@bcoe/v8-coverage/-/v8-coverage-0.2.3.tgz" integrity sha512-0hYQ8SB4Db5zvZB4axdMHGwEaQjkZzFjQiN9LVYvIFB2nSUHW9tYpxWriPrWDASIxiaXax83REcLxuSdnGPZtw== "@istanbuljs/load-nyc-config@^1.0.0": version "1.1.0" - resolved "https://registry.yarnpkg.com/@istanbuljs/load-nyc-config/-/load-nyc-config-1.1.0.tgz#fd3db1d59ecf7cf121e80650bb86712f9b55eced" + resolved "https://registry.npmjs.org/@istanbuljs/load-nyc-config/-/load-nyc-config-1.1.0.tgz" integrity sha512-VjeHSlIzpv/NyD3N0YuHfXOPDIixcA1q2ZV98wsMqcYlPmv2n3Yb2lYP9XMElnaFVXg5A7YLTeLu6V84uQDjmQ== dependencies: camelcase "^5.3.1" @@ -888,12 +888,12 @@ "@istanbuljs/schema@^0.1.2", "@istanbuljs/schema@^0.1.3": version "0.1.3" - resolved "https://registry.yarnpkg.com/@istanbuljs/schema/-/schema-0.1.3.tgz#e45e384e4b8ec16bce2fd903af78450f6bf7ec98" + resolved "https://registry.npmjs.org/@istanbuljs/schema/-/schema-0.1.3.tgz" integrity sha512-ZXRY4jNvVgSVQ8DL3LTcakaAtXwTVUxE81hslsyD2AtoXW/wVob10HkOJ1X/pAlcI7D+2YoZKg5do8G/w6RYgA== "@jest/console@^29.7.0": version "29.7.0" - resolved "https://registry.yarnpkg.com/@jest/console/-/console-29.7.0.tgz#cd4822dbdb84529265c5a2bdb529a3c9cc950ffc" + resolved "https://registry.npmjs.org/@jest/console/-/console-29.7.0.tgz" integrity sha512-5Ni4CU7XHQi32IJ398EEP4RrB8eV09sXP2ROqD4bksHrnTree52PsxvX8tpL8LvTZ3pFzXyPbNQReSN41CAhOg== dependencies: "@jest/types" "^29.6.3" @@ -905,7 +905,7 @@ "@jest/core@^29.7.0": version "29.7.0" - resolved "https://registry.yarnpkg.com/@jest/core/-/core-29.7.0.tgz#b6cccc239f30ff36609658c5a5e2291757ce448f" + resolved "https://registry.npmjs.org/@jest/core/-/core-29.7.0.tgz" integrity sha512-n7aeXWKMnGtDA48y8TLWJPJmLmmZ642Ceo78cYWEpiD7FzDgmNDV/GCVRorPABdXLJZ/9wzzgZAlHjXjxDHGsg== dependencies: "@jest/console" "^29.7.0" @@ -939,7 +939,7 @@ "@jest/environment@^29.7.0": version "29.7.0" - resolved "https://registry.yarnpkg.com/@jest/environment/-/environment-29.7.0.tgz#24d61f54ff1f786f3cd4073b4b94416383baf2a7" + resolved "https://registry.npmjs.org/@jest/environment/-/environment-29.7.0.tgz" integrity sha512-aQIfHDq33ExsN4jP1NWGXhxgQ/wixs60gDiKO+XVMd8Mn0NWPWgc34ZQDTb2jKaUWQ7MuwoitXAsN2XVXNMpAw== dependencies: "@jest/fake-timers" "^29.7.0" @@ -949,14 +949,14 @@ "@jest/expect-utils@^29.7.0": version "29.7.0" - resolved "https://registry.yarnpkg.com/@jest/expect-utils/-/expect-utils-29.7.0.tgz#023efe5d26a8a70f21677d0a1afc0f0a44e3a1c6" + resolved "https://registry.npmjs.org/@jest/expect-utils/-/expect-utils-29.7.0.tgz" integrity sha512-GlsNBWiFQFCVi9QVSx7f5AgMeLxe9YCCs5PuP2O2LdjDAA8Jh9eX7lA1Jq/xdXw3Wb3hyvlFNfZIfcRetSzYcA== dependencies: jest-get-type "^29.6.3" "@jest/expect@^29.7.0": version "29.7.0" - resolved "https://registry.yarnpkg.com/@jest/expect/-/expect-29.7.0.tgz#76a3edb0cb753b70dfbfe23283510d3d45432bf2" + resolved "https://registry.npmjs.org/@jest/expect/-/expect-29.7.0.tgz" integrity sha512-8uMeAMycttpva3P1lBHB8VciS9V0XAr3GymPpipdyQXbBcuhkLQOSe8E/p92RyAdToS6ZD1tFkX+CkhoECE0dQ== dependencies: expect "^29.7.0" @@ -964,7 +964,7 @@ "@jest/fake-timers@^29.7.0": version "29.7.0" - resolved "https://registry.yarnpkg.com/@jest/fake-timers/-/fake-timers-29.7.0.tgz#fd91bf1fffb16d7d0d24a426ab1a47a49881a565" + resolved "https://registry.npmjs.org/@jest/fake-timers/-/fake-timers-29.7.0.tgz" integrity sha512-q4DH1Ha4TTFPdxLsqDXK1d3+ioSL7yL5oCMJZgDYm6i+6CygW5E5xVr/D1HdsGxjt1ZWSfUAs9OxSB/BNelWrQ== dependencies: "@jest/types" "^29.6.3" @@ -976,7 +976,7 @@ "@jest/globals@^29.7.0": version "29.7.0" - resolved "https://registry.yarnpkg.com/@jest/globals/-/globals-29.7.0.tgz#8d9290f9ec47ff772607fa864ca1d5a2efae1d4d" + resolved "https://registry.npmjs.org/@jest/globals/-/globals-29.7.0.tgz" integrity sha512-mpiz3dutLbkW2MNFubUGUEVLkTGiqW6yLVTA+JbP6fI6J5iL9Y0Nlg8k95pcF8ctKwCS7WVxteBs29hhfAotzQ== dependencies: "@jest/environment" "^29.7.0" @@ -986,7 +986,7 @@ "@jest/reporters@^29.7.0": version "29.7.0" - resolved "https://registry.yarnpkg.com/@jest/reporters/-/reporters-29.7.0.tgz#04b262ecb3b8faa83b0b3d321623972393e8f4c7" + resolved "https://registry.npmjs.org/@jest/reporters/-/reporters-29.7.0.tgz" integrity sha512-DApq0KJbJOEzAFYjHADNNxAE3KbhxQB1y5Kplb5Waqw6zVbuWatSnMjE5gs8FUgEPmNsnZA3NCWl9NG0ia04Pg== dependencies: "@bcoe/v8-coverage" "^0.2.3" @@ -1016,14 +1016,14 @@ "@jest/schemas@^29.6.3": version "29.6.3" - resolved "https://registry.yarnpkg.com/@jest/schemas/-/schemas-29.6.3.tgz#430b5ce8a4e0044a7e3819663305a7b3091c8e03" + resolved "https://registry.npmjs.org/@jest/schemas/-/schemas-29.6.3.tgz" integrity sha512-mo5j5X+jIZmJQveBKeS/clAueipV7KgiX1vMgCxam1RNYiqE1w62n0/tJJnHtjW8ZHcQco5gY85jA3mi0L+nSA== dependencies: "@sinclair/typebox" "^0.27.8" "@jest/source-map@^29.6.3": version "29.6.3" - resolved "https://registry.yarnpkg.com/@jest/source-map/-/source-map-29.6.3.tgz#d90ba772095cf37a34a5eb9413f1b562a08554c4" + resolved "https://registry.npmjs.org/@jest/source-map/-/source-map-29.6.3.tgz" integrity sha512-MHjT95QuipcPrpLM+8JMSzFx6eHp5Bm+4XeFDJlwsvVBjmKNiIAvasGK2fxz2WbGRlnvqehFbh07MMa7n3YJnw== dependencies: "@jridgewell/trace-mapping" "^0.3.18" @@ -1032,7 +1032,7 @@ "@jest/test-result@^29.7.0": version "29.7.0" - resolved "https://registry.yarnpkg.com/@jest/test-result/-/test-result-29.7.0.tgz#8db9a80aa1a097bb2262572686734baed9b1657c" + resolved "https://registry.npmjs.org/@jest/test-result/-/test-result-29.7.0.tgz" integrity sha512-Fdx+tv6x1zlkJPcWXmMDAG2HBnaR9XPSd5aDWQVsfrZmLVT3lU1cwyxLgRmXR9yrq4NBoEm9BMsfgFzTQAbJYA== dependencies: "@jest/console" "^29.7.0" @@ -1042,7 +1042,7 @@ "@jest/test-sequencer@^29.7.0": version "29.7.0" - resolved "https://registry.yarnpkg.com/@jest/test-sequencer/-/test-sequencer-29.7.0.tgz#6cef977ce1d39834a3aea887a1726628a6f072ce" + resolved "https://registry.npmjs.org/@jest/test-sequencer/-/test-sequencer-29.7.0.tgz" integrity sha512-GQwJ5WZVrKnOJuiYiAF52UNUJXgTZx1NHjFSEB0qEMmSZKAkdMoIzw/Cj6x6NF4AvV23AUqDpFzQkN/eYCYTxw== dependencies: "@jest/test-result" "^29.7.0" @@ -1052,7 +1052,7 @@ "@jest/transform@^29.7.0": version "29.7.0" - resolved "https://registry.yarnpkg.com/@jest/transform/-/transform-29.7.0.tgz#df2dd9c346c7d7768b8a06639994640c642e284c" + resolved "https://registry.npmjs.org/@jest/transform/-/transform-29.7.0.tgz" integrity sha512-ok/BTPFzFKVMwO5eOHRrvnBVHdRy9IrsrW1GpMaQ9MCnilNLXQKmAX8s1YXDFaai9xJpac2ySzV0YeRRECr2Vw== dependencies: "@babel/core" "^7.11.6" @@ -1073,7 +1073,7 @@ "@jest/types@^29.6.3": version "29.6.3" - resolved "https://registry.yarnpkg.com/@jest/types/-/types-29.6.3.tgz#1131f8cf634e7e84c5e77bab12f052af585fba59" + resolved "https://registry.npmjs.org/@jest/types/-/types-29.6.3.tgz" integrity sha512-u3UPsIilWKOM3F9CXtrG8LEJmNxwoCQC/XVj4IKYXvvpx7QIi/Kg1LI5uDmDpKlac62NUtX7eLjRh+jVZcLOzw== dependencies: "@jest/schemas" "^29.6.3" @@ -1085,7 +1085,7 @@ "@jridgewell/gen-mapping@^0.3.5": version "0.3.8" - resolved "https://registry.yarnpkg.com/@jridgewell/gen-mapping/-/gen-mapping-0.3.8.tgz#4f0e06362e01362f823d348f1872b08f666d8142" + resolved "https://registry.npmjs.org/@jridgewell/gen-mapping/-/gen-mapping-0.3.8.tgz" integrity sha512-imAbBGkb+ebQyxKgzv5Hu2nmROxoDOXHh80evxdoXNOrvAnVx7zimzc1Oo5h9RlfV4vPXaE2iM5pOFbvOCClWA== dependencies: "@jridgewell/set-array" "^1.2.1" @@ -1094,17 +1094,17 @@ "@jridgewell/resolve-uri@^3.1.0": version "3.1.2" - resolved "https://registry.yarnpkg.com/@jridgewell/resolve-uri/-/resolve-uri-3.1.2.tgz#7a0ee601f60f99a20c7c7c5ff0c80388c1189bd6" + resolved "https://registry.npmjs.org/@jridgewell/resolve-uri/-/resolve-uri-3.1.2.tgz" integrity sha512-bRISgCIjP20/tbWSPWMEi54QVPRZExkuD9lJL+UIxUKtwVJA8wW1Trb1jMs1RFXo1CBTNZ/5hpC9QvmKWdopKw== "@jridgewell/set-array@^1.2.1": version "1.2.1" - resolved "https://registry.yarnpkg.com/@jridgewell/set-array/-/set-array-1.2.1.tgz#558fb6472ed16a4c850b889530e6b36438c49280" + resolved "https://registry.npmjs.org/@jridgewell/set-array/-/set-array-1.2.1.tgz" integrity sha512-R8gLRTZeyp03ymzP/6Lil/28tGeGEzhx1q2k703KGWRAI1VdvPIXdG70VJc2pAMw3NA6JKL5hhFu1sJX0Mnn/A== "@jridgewell/source-map@^0.3.3": version "0.3.6" - resolved "https://registry.yarnpkg.com/@jridgewell/source-map/-/source-map-0.3.6.tgz#9d71ca886e32502eb9362c9a74a46787c36df81a" + resolved "https://registry.npmjs.org/@jridgewell/source-map/-/source-map-0.3.6.tgz" integrity sha512-1ZJTZebgqllO79ue2bm3rIGud/bOe0pP5BjSRCRxxYkEZS8STV7zN84UBbiYu7jy+eCKSnVIUgoWWE/tt+shMQ== dependencies: "@jridgewell/gen-mapping" "^0.3.5" @@ -1112,12 +1112,12 @@ "@jridgewell/sourcemap-codec@^1.4.10", "@jridgewell/sourcemap-codec@^1.4.14": version "1.5.0" - resolved "https://registry.yarnpkg.com/@jridgewell/sourcemap-codec/-/sourcemap-codec-1.5.0.tgz#3188bcb273a414b0d215fd22a58540b989b9409a" + resolved "https://registry.npmjs.org/@jridgewell/sourcemap-codec/-/sourcemap-codec-1.5.0.tgz" integrity sha512-gv3ZRaISU3fjPAgNsriBRqGWQL6quFx04YMPW/zD8XMLsU32mhCCbfbO6KZFLjvYpCZ8zyDEgqsgf+PwPaM7GQ== "@jridgewell/trace-mapping@^0.3.12", "@jridgewell/trace-mapping@^0.3.18", "@jridgewell/trace-mapping@^0.3.24", "@jridgewell/trace-mapping@^0.3.25": version "0.3.25" - resolved "https://registry.yarnpkg.com/@jridgewell/trace-mapping/-/trace-mapping-0.3.25.tgz#15f190e98895f3fc23276ee14bc76b675c2e50f0" + resolved "https://registry.npmjs.org/@jridgewell/trace-mapping/-/trace-mapping-0.3.25.tgz" integrity sha512-vNk6aEwybGtawWmy/PzwnGDOjCkLWSD2wqvjGGAgOAwCGWySYXfYoxt00IJkTF+8Lb57DwOb3Aa0o9CApepiYQ== dependencies: "@jridgewell/resolve-uri" "^3.1.0" @@ -1125,38 +1125,38 @@ "@opentelemetry/api-logs@0.56.0": version "0.56.0" - resolved "https://registry.yarnpkg.com/@opentelemetry/api-logs/-/api-logs-0.56.0.tgz#68f8c51ca905c260b610c8a3c67d3f9fa3d59a45" + resolved "https://registry.npmjs.org/@opentelemetry/api-logs/-/api-logs-0.56.0.tgz" integrity sha512-Wr39+94UNNG3Ei9nv3pHd4AJ63gq5nSemMRpCd8fPwDL9rN3vK26lzxfH27mw16XzOSO+TpyQwBAMaLxaPWG0g== dependencies: "@opentelemetry/api" "^1.3.0" "@opentelemetry/api@<=1.9.0", "@opentelemetry/api@^1.3.0", "@opentelemetry/api@^1.9.0": version "1.9.0" - resolved "https://registry.yarnpkg.com/@opentelemetry/api/-/api-1.9.0.tgz#d03eba68273dc0f7509e2a3d5cba21eae10379fe" + resolved "https://registry.npmjs.org/@opentelemetry/api/-/api-1.9.0.tgz" integrity sha512-3giAOQvZiH5F9bMlMiv8+GSPMeqg0dbaeo58/0SlA9sxSqZhnUtxzX9/2FzyhS9sWQf5S0GJE0AKBrFqjpeYcg== "@opentelemetry/context-async-hooks@2.0.0": version "2.0.0" - resolved "https://registry.yarnpkg.com/@opentelemetry/context-async-hooks/-/context-async-hooks-2.0.0.tgz#c98a727238ca199cda943780acf6124af8d8cd80" + resolved "https://registry.npmjs.org/@opentelemetry/context-async-hooks/-/context-async-hooks-2.0.0.tgz" integrity sha512-IEkJGzK1A9v3/EHjXh3s2IiFc6L4jfK+lNgKVgUjeUJQRRhnVFMIO3TAvKwonm9O1HebCuoOt98v8bZW7oVQHA== "@opentelemetry/core@2.0.0": version "2.0.0" - resolved "https://registry.yarnpkg.com/@opentelemetry/core/-/core-2.0.0.tgz#37e9f0e9ddec4479b267aca6f32d88757c941b3a" + resolved "https://registry.npmjs.org/@opentelemetry/core/-/core-2.0.0.tgz" integrity sha512-SLX36allrcnVaPYG3R78F/UZZsBsvbc7lMCLx37LyH5MJ1KAAZ2E3mW9OAD3zGz0G8q/BtoS5VUrjzDydhD6LQ== dependencies: "@opentelemetry/semantic-conventions" "^1.29.0" "@opentelemetry/core@^1.29.0": version "1.30.1" - resolved "https://registry.yarnpkg.com/@opentelemetry/core/-/core-1.30.1.tgz#a0b468bb396358df801881709ea38299fc30ab27" + resolved "https://registry.npmjs.org/@opentelemetry/core/-/core-1.30.1.tgz" integrity sha512-OOCM2C/QIURhJMuKaekP3TRBxBKxG/TWWA0TL2J6nXUtDnuCtccy49LUJF8xPFXMX+0LMcxFpCo8M9cGY1W6rQ== dependencies: "@opentelemetry/semantic-conventions" "1.28.0" "@opentelemetry/instrumentation@^0.56.0": version "0.56.0" - resolved "https://registry.yarnpkg.com/@opentelemetry/instrumentation/-/instrumentation-0.56.0.tgz#3330ce16d9235a548efa1019a4a7f01414edd44a" + resolved "https://registry.npmjs.org/@opentelemetry/instrumentation/-/instrumentation-0.56.0.tgz" integrity sha512-2KkGBKE+FPXU1F0zKww+stnlUxUTlBvLCiWdP63Z9sqXYeNI/ziNzsxAp4LAdUcTQmXjw1IWgvm5CAb/BHy99w== dependencies: "@opentelemetry/api-logs" "0.56.0" @@ -1168,7 +1168,7 @@ "@opentelemetry/resources@2.0.0", "@opentelemetry/resources@<=2.0.0": version "2.0.0" - resolved "https://registry.yarnpkg.com/@opentelemetry/resources/-/resources-2.0.0.tgz#15c04794c32b7d0b3c7589225ece6ae9bba25989" + resolved "https://registry.npmjs.org/@opentelemetry/resources/-/resources-2.0.0.tgz" integrity sha512-rnZr6dML2z4IARI4zPGQV4arDikF/9OXZQzrC01dLmn0CZxU5U5OLd/m1T7YkGRj5UitjeoCtg/zorlgMQcdTg== dependencies: "@opentelemetry/core" "2.0.0" @@ -1176,7 +1176,7 @@ "@opentelemetry/sdk-trace-base@2.0.0": version "2.0.0" - resolved "https://registry.yarnpkg.com/@opentelemetry/sdk-trace-base/-/sdk-trace-base-2.0.0.tgz#ebc06ea7537dea62f3882f8236c1234f4faf6b23" + resolved "https://registry.npmjs.org/@opentelemetry/sdk-trace-base/-/sdk-trace-base-2.0.0.tgz" integrity sha512-qQnYdX+ZCkonM7tA5iU4fSRsVxbFGml8jbxOgipRGMFHKaXKHQ30js03rTobYjKjIfnOsZSbHKWF0/0v0OQGfw== dependencies: "@opentelemetry/core" "2.0.0" @@ -1185,45 +1185,45 @@ "@opentelemetry/sdk-trace-node@<=2.0.0": version "2.0.0" - resolved "https://registry.yarnpkg.com/@opentelemetry/sdk-trace-node/-/sdk-trace-node-2.0.0.tgz#ef9f8ab77ccb41a9c9ff272f6bf4bb6999491f5b" + resolved "https://registry.npmjs.org/@opentelemetry/sdk-trace-node/-/sdk-trace-node-2.0.0.tgz" integrity sha512-omdilCZozUjQwY3uZRBwbaRMJ3p09l4t187Lsdf0dGMye9WKD4NGcpgZRvqhI1dwcH6og+YXQEtoO9Wx3ykilg== dependencies: "@opentelemetry/context-async-hooks" "2.0.0" "@opentelemetry/core" "2.0.0" "@opentelemetry/sdk-trace-base" "2.0.0" -"@opentelemetry/semantic-conventions@1.28.0": +"@opentelemetry/semantic-conventions@1.28.0", "@opentelemetry/semantic-conventions@^1.28.0": version "1.28.0" - resolved "https://registry.yarnpkg.com/@opentelemetry/semantic-conventions/-/semantic-conventions-1.28.0.tgz#337fb2bca0453d0726696e745f50064411f646d6" + resolved "https://registry.npmjs.org/@opentelemetry/semantic-conventions/-/semantic-conventions-1.28.0.tgz" integrity sha512-lp4qAiMTD4sNWW4DbKLBkfiMZ4jbAboJIGOQr5DvciMRI494OapieI9qiODpOt0XBr1LjIDy1xAGAnVs5supTA== -"@opentelemetry/semantic-conventions@^1.28.0", "@opentelemetry/semantic-conventions@^1.29.0": +"@opentelemetry/semantic-conventions@^1.29.0": version "1.32.0" - resolved "https://registry.yarnpkg.com/@opentelemetry/semantic-conventions/-/semantic-conventions-1.32.0.tgz#a15e8f78f32388a7e4655e7f539570e40958ca3f" + resolved "https://registry.npmjs.org/@opentelemetry/semantic-conventions/-/semantic-conventions-1.32.0.tgz" integrity sha512-s0OpmpQFSfMrmedAn9Lhg4KWJELHCU6uU9dtIJ28N8UGhf9Y55im5X8fEzwhwDwiSqN+ZPSNrDJF7ivf/AuRPQ== "@sinclair/typebox@^0.27.8": version "0.27.8" - resolved "https://registry.yarnpkg.com/@sinclair/typebox/-/typebox-0.27.8.tgz#6667fac16c436b5434a387a34dedb013198f6e6e" + resolved "https://registry.npmjs.org/@sinclair/typebox/-/typebox-0.27.8.tgz" integrity sha512-+Fj43pSMwJs4KRrH/938Uf+uAELIgVBmQzg/q1YG10djyfA3TnrU8N8XzqCh/okZdszqBQTZf96idMfE5lnwTA== "@sinonjs/commons@^3.0.0": version "3.0.1" - resolved "https://registry.yarnpkg.com/@sinonjs/commons/-/commons-3.0.1.tgz#1029357e44ca901a615585f6d27738dbc89084cd" + resolved "https://registry.npmjs.org/@sinonjs/commons/-/commons-3.0.1.tgz" integrity sha512-K3mCHKQ9sVh8o1C9cxkwxaOmXoAMlDxC1mYyHrjqOWEcBjYr76t96zL2zlj5dUGZ3HSw240X1qgH3Mjf1yJWpQ== dependencies: type-detect "4.0.8" "@sinonjs/fake-timers@^10.0.2": version "10.3.0" - resolved "https://registry.yarnpkg.com/@sinonjs/fake-timers/-/fake-timers-10.3.0.tgz#55fdff1ecab9f354019129daf4df0dd4d923ea66" + resolved "https://registry.npmjs.org/@sinonjs/fake-timers/-/fake-timers-10.3.0.tgz" integrity sha512-V4BG07kuYSUkTCSBHG8G8TNhM+F19jXFWnQtzj+we8DrkpSBCee9Z3Ms8yiGer/dlmhe35/Xdgyo3/0rQKg7YA== dependencies: "@sinonjs/commons" "^3.0.0" "@smithy/abort-controller@^4.0.2": version "4.0.2" - resolved "https://registry.yarnpkg.com/@smithy/abort-controller/-/abort-controller-4.0.2.tgz#36a23e8cc65fc03cacb6afa35dfbfd319c560c6b" + resolved "https://registry.npmjs.org/@smithy/abort-controller/-/abort-controller-4.0.2.tgz" integrity sha512-Sl/78VDtgqKxN2+1qduaVE140XF+Xg+TafkncspwM4jFP/LHr76ZHmIY/y3V1M0mMLNk+Je6IGbzxy23RSToMw== dependencies: "@smithy/types" "^4.2.0" @@ -1231,7 +1231,7 @@ "@smithy/config-resolver@^4.1.0": version "4.1.0" - resolved "https://registry.yarnpkg.com/@smithy/config-resolver/-/config-resolver-4.1.0.tgz#de1043cbd75f05d99798b0fbcfdaf4b89b0f2f41" + resolved "https://registry.npmjs.org/@smithy/config-resolver/-/config-resolver-4.1.0.tgz" integrity sha512-8smPlwhga22pwl23fM5ew4T9vfLUCeFXlcqNOCD5M5h8VmNPNUE9j6bQSuRXpDSV11L/E/SwEBQuW8hr6+nS1A== dependencies: "@smithy/node-config-provider" "^4.0.2" @@ -1242,7 +1242,7 @@ "@smithy/core@^3.3.0", "@smithy/core@^3.3.1": version "3.3.1" - resolved "https://registry.yarnpkg.com/@smithy/core/-/core-3.3.1.tgz#6119a683f62099158eb193e3745f4ade6de741dd" + resolved "https://registry.npmjs.org/@smithy/core/-/core-3.3.1.tgz" integrity sha512-W7AppgQD3fP1aBmo8wWo0id5zeR2/aYRy067vZsDVaa6v/mdhkg6DxXwEVuSPjZl+ZnvWAQbUMCd5ckw38+tHQ== dependencies: "@smithy/middleware-serde" "^4.0.3" @@ -1256,7 +1256,7 @@ "@smithy/credential-provider-imds@^4.0.2": version "4.0.2" - resolved "https://registry.yarnpkg.com/@smithy/credential-provider-imds/-/credential-provider-imds-4.0.2.tgz#1ec34a04842fa69996b151a695b027f0486c69a8" + resolved "https://registry.npmjs.org/@smithy/credential-provider-imds/-/credential-provider-imds-4.0.2.tgz" integrity sha512-32lVig6jCaWBHnY+OEQ6e6Vnt5vDHaLiydGrwYMW9tPqO688hPGTYRamYJ1EptxEC2rAwJrHWmPoKRBl4iTa8w== dependencies: "@smithy/node-config-provider" "^4.0.2" @@ -1267,7 +1267,7 @@ "@smithy/eventstream-codec@^1.1.0": version "1.1.0" - resolved "https://registry.yarnpkg.com/@smithy/eventstream-codec/-/eventstream-codec-1.1.0.tgz#bfe1308ba84ff3db3e79dc1ced8231c52ac0fc36" + resolved "https://registry.npmjs.org/@smithy/eventstream-codec/-/eventstream-codec-1.1.0.tgz" integrity sha512-3tEbUb8t8an226jKB6V/Q2XU/J53lCwCzULuBPEaF4JjSh+FlCMp7TmogE/Aij5J9DwlsZ4VAD/IRDuQ/0ZtMw== dependencies: "@aws-crypto/crc32" "3.0.0" @@ -1277,7 +1277,7 @@ "@smithy/fetch-http-handler@^5.0.2": version "5.0.2" - resolved "https://registry.yarnpkg.com/@smithy/fetch-http-handler/-/fetch-http-handler-5.0.2.tgz#9d3cacf044aa9573ab933f445ab95cddb284813d" + resolved "https://registry.npmjs.org/@smithy/fetch-http-handler/-/fetch-http-handler-5.0.2.tgz" integrity sha512-+9Dz8sakS9pe7f2cBocpJXdeVjMopUDLgZs1yWeu7h++WqSbjUYv/JAJwKwXw1HV6gq1jyWjxuyn24E2GhoEcQ== dependencies: "@smithy/protocol-http" "^5.1.0" @@ -1288,7 +1288,7 @@ "@smithy/hash-node@^4.0.2": version "4.0.2" - resolved "https://registry.yarnpkg.com/@smithy/hash-node/-/hash-node-4.0.2.tgz#a34fe5a33b067d754ca63302b9791778f003e437" + resolved "https://registry.npmjs.org/@smithy/hash-node/-/hash-node-4.0.2.tgz" integrity sha512-VnTpYPnRUE7yVhWozFdlxcYknv9UN7CeOqSrMH+V877v4oqtVYuoqhIhtSjmGPvYrYnAkaM61sLMKHvxL138yg== dependencies: "@smithy/types" "^4.2.0" @@ -1298,7 +1298,7 @@ "@smithy/invalid-dependency@^4.0.2": version "4.0.2" - resolved "https://registry.yarnpkg.com/@smithy/invalid-dependency/-/invalid-dependency-4.0.2.tgz#e9b1c5e407d795f10a03afba90e37bccdc3e38f7" + resolved "https://registry.npmjs.org/@smithy/invalid-dependency/-/invalid-dependency-4.0.2.tgz" integrity sha512-GatB4+2DTpgWPday+mnUkoumP54u/MDM/5u44KF9hIu8jF0uafZtQLcdfIKkIcUNuF/fBojpLEHZS/56JqPeXQ== dependencies: "@smithy/types" "^4.2.0" @@ -1306,28 +1306,28 @@ "@smithy/is-array-buffer@^1.1.0": version "1.1.0" - resolved "https://registry.yarnpkg.com/@smithy/is-array-buffer/-/is-array-buffer-1.1.0.tgz#29948072da2b57575aa9898cda863932e842ab11" + resolved "https://registry.npmjs.org/@smithy/is-array-buffer/-/is-array-buffer-1.1.0.tgz" integrity sha512-twpQ/n+3OWZJ7Z+xu43MJErmhB/WO/mMTnqR6PwWQShvSJ/emx5d1N59LQZk6ZpTAeuRWrc+eHhkzTp9NFjNRQ== dependencies: tslib "^2.5.0" "@smithy/is-array-buffer@^2.2.0": version "2.2.0" - resolved "https://registry.yarnpkg.com/@smithy/is-array-buffer/-/is-array-buffer-2.2.0.tgz#f84f0d9f9a36601a9ca9381688bd1b726fd39111" + resolved "https://registry.npmjs.org/@smithy/is-array-buffer/-/is-array-buffer-2.2.0.tgz" integrity sha512-GGP3O9QFD24uGeAXYUjwSTXARoqpZykHadOmA8G5vfJPK0/DC67qa//0qvqrJzL1xc8WQWX7/yc7fwudjPHPhA== dependencies: tslib "^2.6.2" "@smithy/is-array-buffer@^4.0.0": version "4.0.0" - resolved "https://registry.yarnpkg.com/@smithy/is-array-buffer/-/is-array-buffer-4.0.0.tgz#55a939029321fec462bcc574890075cd63e94206" + resolved "https://registry.npmjs.org/@smithy/is-array-buffer/-/is-array-buffer-4.0.0.tgz" integrity sha512-saYhF8ZZNoJDTvJBEWgeBccCg+yvp1CX+ed12yORU3NilJScfc6gfch2oVb4QgxZrGUx3/ZJlb+c/dJbyupxlw== dependencies: tslib "^2.6.2" "@smithy/middleware-content-length@^4.0.2": version "4.0.2" - resolved "https://registry.yarnpkg.com/@smithy/middleware-content-length/-/middleware-content-length-4.0.2.tgz#ff78658e8047ad7038f58478cf8713ee2f6ef647" + resolved "https://registry.npmjs.org/@smithy/middleware-content-length/-/middleware-content-length-4.0.2.tgz" integrity sha512-hAfEXm1zU+ELvucxqQ7I8SszwQ4znWMbNv6PLMndN83JJN41EPuS93AIyh2N+gJ6x8QFhzSO6b7q2e6oClDI8A== dependencies: "@smithy/protocol-http" "^5.1.0" @@ -1336,7 +1336,7 @@ "@smithy/middleware-endpoint@^4.1.1", "@smithy/middleware-endpoint@^4.1.2": version "4.1.2" - resolved "https://registry.yarnpkg.com/@smithy/middleware-endpoint/-/middleware-endpoint-4.1.2.tgz#d8ad5e4e439126d7bcc79f0046fc5f9518d8afd8" + resolved "https://registry.npmjs.org/@smithy/middleware-endpoint/-/middleware-endpoint-4.1.2.tgz" integrity sha512-EqOy3xaEGQpsKxLlzYstDRJ8eY90CbyBP4cl+w7r45mE60S8YliyL9AgWsdWcyNiB95E2PMqHBEv67nNl1zLfg== dependencies: "@smithy/core" "^3.3.1" @@ -1350,7 +1350,7 @@ "@smithy/middleware-retry@^4.1.2": version "4.1.3" - resolved "https://registry.yarnpkg.com/@smithy/middleware-retry/-/middleware-retry-4.1.3.tgz#6d22d21321b2089b4caeb79577a9b40bf4ac6ace" + resolved "https://registry.npmjs.org/@smithy/middleware-retry/-/middleware-retry-4.1.3.tgz" integrity sha512-AsJtI9KiFoEGAhcEKZyzzPfrszAQGcf4HSYKmenz0WGx/6YNvoPPv4OSGfZTCsDmgPHv4pXzxE+7QV7jcGWNKw== dependencies: "@smithy/node-config-provider" "^4.0.2" @@ -1365,7 +1365,7 @@ "@smithy/middleware-serde@^4.0.3": version "4.0.3" - resolved "https://registry.yarnpkg.com/@smithy/middleware-serde/-/middleware-serde-4.0.3.tgz#b90ef1065ad9dc0b54c561fae73c8a5792d145e3" + resolved "https://registry.npmjs.org/@smithy/middleware-serde/-/middleware-serde-4.0.3.tgz" integrity sha512-rfgDVrgLEVMmMn0BI8O+8OVr6vXzjV7HZj57l0QxslhzbvVfikZbVfBVthjLHqib4BW44QhcIgJpvebHlRaC9A== dependencies: "@smithy/types" "^4.2.0" @@ -1373,7 +1373,7 @@ "@smithy/middleware-stack@^4.0.2": version "4.0.2" - resolved "https://registry.yarnpkg.com/@smithy/middleware-stack/-/middleware-stack-4.0.2.tgz#ca7bc3eedc7c1349e2cf94e0dc92a68d681bef18" + resolved "https://registry.npmjs.org/@smithy/middleware-stack/-/middleware-stack-4.0.2.tgz" integrity sha512-eSPVcuJJGVYrFYu2hEq8g8WWdJav3sdrI4o2c6z/rjnYDd3xH9j9E7deZQCzFn4QvGPouLngH3dQ+QVTxv5bOQ== dependencies: "@smithy/types" "^4.2.0" @@ -1381,7 +1381,7 @@ "@smithy/node-config-provider@^4.0.2": version "4.0.2" - resolved "https://registry.yarnpkg.com/@smithy/node-config-provider/-/node-config-provider-4.0.2.tgz#017ba626828bced0fa588e795246e5468632f3ef" + resolved "https://registry.npmjs.org/@smithy/node-config-provider/-/node-config-provider-4.0.2.tgz" integrity sha512-WgCkILRZfJwJ4Da92a6t3ozN/zcvYyJGUTmfGbgS/FkCcoCjl7G4FJaCDN1ySdvLvemnQeo25FdkyMSTSwulsw== dependencies: "@smithy/property-provider" "^4.0.2" @@ -1391,7 +1391,7 @@ "@smithy/node-http-handler@^4.0.4": version "4.0.4" - resolved "https://registry.yarnpkg.com/@smithy/node-http-handler/-/node-http-handler-4.0.4.tgz#aa583d201c1ee968170b65a07f06d633c214b7a1" + resolved "https://registry.npmjs.org/@smithy/node-http-handler/-/node-http-handler-4.0.4.tgz" integrity sha512-/mdqabuAT3o/ihBGjL94PUbTSPSRJ0eeVTdgADzow0wRJ0rN4A27EOrtlK56MYiO1fDvlO3jVTCxQtQmK9dZ1g== dependencies: "@smithy/abort-controller" "^4.0.2" @@ -1402,7 +1402,7 @@ "@smithy/property-provider@^4.0.2": version "4.0.2" - resolved "https://registry.yarnpkg.com/@smithy/property-provider/-/property-provider-4.0.2.tgz#4572c10415c9d4215f3df1530ba61b0319b17b55" + resolved "https://registry.npmjs.org/@smithy/property-provider/-/property-provider-4.0.2.tgz" integrity sha512-wNRoQC1uISOuNc2s4hkOYwYllmiyrvVXWMtq+TysNRVQaHm4yoafYQyjN/goYZS+QbYlPIbb/QRjaUZMuzwQ7A== dependencies: "@smithy/types" "^4.2.0" @@ -1410,7 +1410,7 @@ "@smithy/protocol-http@^1.1.0": version "1.2.0" - resolved "https://registry.yarnpkg.com/@smithy/protocol-http/-/protocol-http-1.2.0.tgz#a554e4dabb14508f0bc2cdef9c3710e2b294be04" + resolved "https://registry.npmjs.org/@smithy/protocol-http/-/protocol-http-1.2.0.tgz" integrity sha512-GfGfruksi3nXdFok5RhgtOnWe5f6BndzYfmEXISD+5gAGdayFGpjWu5pIqIweTudMtse20bGbc+7MFZXT1Tb8Q== dependencies: "@smithy/types" "^1.2.0" @@ -1418,7 +1418,7 @@ "@smithy/protocol-http@^5.1.0": version "5.1.0" - resolved "https://registry.yarnpkg.com/@smithy/protocol-http/-/protocol-http-5.1.0.tgz#ad34e336a95944785185234bebe2ec8dbe266936" + resolved "https://registry.npmjs.org/@smithy/protocol-http/-/protocol-http-5.1.0.tgz" integrity sha512-KxAOL1nUNw2JTYrtviRRjEnykIDhxc84qMBzxvu1MUfQfHTuBlCG7PA6EdVwqpJjH7glw7FqQoFxUJSyBQgu7g== dependencies: "@smithy/types" "^4.2.0" @@ -1426,7 +1426,7 @@ "@smithy/querystring-builder@^4.0.2": version "4.0.2" - resolved "https://registry.yarnpkg.com/@smithy/querystring-builder/-/querystring-builder-4.0.2.tgz#834cea95bf413ab417bf9c166d60fd80d2cb3016" + resolved "https://registry.npmjs.org/@smithy/querystring-builder/-/querystring-builder-4.0.2.tgz" integrity sha512-NTOs0FwHw1vimmQM4ebh+wFQvOwkEf/kQL6bSM1Lock+Bv4I89B3hGYoUEPkmvYPkDKyp5UdXJYu+PoTQ3T31Q== dependencies: "@smithy/types" "^4.2.0" @@ -1435,7 +1435,7 @@ "@smithy/querystring-parser@^4.0.2": version "4.0.2" - resolved "https://registry.yarnpkg.com/@smithy/querystring-parser/-/querystring-parser-4.0.2.tgz#d80c5afb740e12ad8b4d4f58415e402c69712479" + resolved "https://registry.npmjs.org/@smithy/querystring-parser/-/querystring-parser-4.0.2.tgz" integrity sha512-v6w8wnmZcVXjfVLjxw8qF7OwESD9wnpjp0Dqry/Pod0/5vcEA3qxCr+BhbOHlxS8O+29eLpT3aagxXGwIoEk7Q== dependencies: "@smithy/types" "^4.2.0" @@ -1443,14 +1443,14 @@ "@smithy/service-error-classification@^4.0.3": version "4.0.3" - resolved "https://registry.yarnpkg.com/@smithy/service-error-classification/-/service-error-classification-4.0.3.tgz#df43e3ec00a9f2d15415185561d98cd602c8bc67" + resolved "https://registry.npmjs.org/@smithy/service-error-classification/-/service-error-classification-4.0.3.tgz" integrity sha512-FTbcajmltovWMjj3tksDQdD23b2w6gH+A0DYA1Yz3iSpjDj8fmkwy62UnXcWMy4d5YoMoSyLFHMfkEVEzbiN8Q== dependencies: "@smithy/types" "^4.2.0" "@smithy/shared-ini-file-loader@^4.0.2": version "4.0.2" - resolved "https://registry.yarnpkg.com/@smithy/shared-ini-file-loader/-/shared-ini-file-loader-4.0.2.tgz#15043f0516fe09ff4b22982bc5f644dc701ebae5" + resolved "https://registry.npmjs.org/@smithy/shared-ini-file-loader/-/shared-ini-file-loader-4.0.2.tgz" integrity sha512-J9/gTWBGVuFZ01oVA6vdb4DAjf1XbDhK6sLsu3OS9qmLrS6KB5ygpeHiM3miIbj1qgSJ96GYszXFWv6ErJ8QEw== dependencies: "@smithy/types" "^4.2.0" @@ -1458,7 +1458,7 @@ "@smithy/signature-v4@^1.0.1": version "1.1.0" - resolved "https://registry.yarnpkg.com/@smithy/signature-v4/-/signature-v4-1.1.0.tgz#e85309995c2475d39598a4f56e68b7ed856bdfa6" + resolved "https://registry.npmjs.org/@smithy/signature-v4/-/signature-v4-1.1.0.tgz" integrity sha512-fDo3m7YqXBs7neciOePPd/X9LPm5QLlDMdIC4m1H6dgNLnXfLMFNIxEfPyohGA8VW9Wn4X8lygnPSGxDZSmp0Q== dependencies: "@smithy/eventstream-codec" "^1.1.0" @@ -1472,7 +1472,7 @@ "@smithy/signature-v4@^5.1.0": version "5.1.0" - resolved "https://registry.yarnpkg.com/@smithy/signature-v4/-/signature-v4-5.1.0.tgz#2c56e5b278482b04383d84ea2c07b7f0a8eb8f63" + resolved "https://registry.npmjs.org/@smithy/signature-v4/-/signature-v4-5.1.0.tgz" integrity sha512-4t5WX60sL3zGJF/CtZsUQTs3UrZEDO2P7pEaElrekbLqkWPYkgqNW1oeiNYC6xXifBnT9dVBOnNQRvOE9riU9w== dependencies: "@smithy/is-array-buffer" "^4.0.0" @@ -1486,7 +1486,7 @@ "@smithy/smithy-client@^4.2.1", "@smithy/smithy-client@^4.2.2": version "4.2.2" - resolved "https://registry.yarnpkg.com/@smithy/smithy-client/-/smithy-client-4.2.2.tgz#b599c841c376994a3b3019942b1d3f1ecfaf964b" + resolved "https://registry.npmjs.org/@smithy/smithy-client/-/smithy-client-4.2.2.tgz" integrity sha512-3AnHfsMdq9Wg7+3BeR1HuLWI9+DMA/SoHVpCWq6xSsa52ikNd6nlF/wFzdpHyGtVa+Aji6lMgvwOF4sGcVA7SA== dependencies: "@smithy/core" "^3.3.1" @@ -1499,21 +1499,21 @@ "@smithy/types@^1.2.0": version "1.2.0" - resolved "https://registry.yarnpkg.com/@smithy/types/-/types-1.2.0.tgz#9dc65767b0ee3d6681704fcc67665d6fc9b6a34e" + resolved "https://registry.npmjs.org/@smithy/types/-/types-1.2.0.tgz" integrity sha512-z1r00TvBqF3dh4aHhya7nz1HhvCg4TRmw51fjMrh5do3h+ngSstt/yKlNbHeb9QxJmFbmN8KEVSWgb1bRvfEoA== dependencies: tslib "^2.5.0" "@smithy/types@^4.2.0": version "4.2.0" - resolved "https://registry.yarnpkg.com/@smithy/types/-/types-4.2.0.tgz#e7998984cc54b1acbc32e6d4cf982c712e3d26b6" + resolved "https://registry.npmjs.org/@smithy/types/-/types-4.2.0.tgz" integrity sha512-7eMk09zQKCO+E/ivsjQv+fDlOupcFUCSC/L2YUPgwhvowVGWbPQHjEFcmjt7QQ4ra5lyowS92SV53Zc6XD4+fg== dependencies: tslib "^2.6.2" "@smithy/url-parser@^4.0.2": version "4.0.2" - resolved "https://registry.yarnpkg.com/@smithy/url-parser/-/url-parser-4.0.2.tgz#a316f7d8593ffab796348bc5df96237833880713" + resolved "https://registry.npmjs.org/@smithy/url-parser/-/url-parser-4.0.2.tgz" integrity sha512-Bm8n3j2ScqnT+kJaClSVCMeiSenK6jVAzZCNewsYWuZtnBehEz4r2qP0riZySZVfzB+03XZHJeqfmJDkeeSLiQ== dependencies: "@smithy/querystring-parser" "^4.0.2" @@ -1522,7 +1522,7 @@ "@smithy/util-base64@^4.0.0": version "4.0.0" - resolved "https://registry.yarnpkg.com/@smithy/util-base64/-/util-base64-4.0.0.tgz#8345f1b837e5f636e5f8470c4d1706ae0c6d0358" + resolved "https://registry.npmjs.org/@smithy/util-base64/-/util-base64-4.0.0.tgz" integrity sha512-CvHfCmO2mchox9kjrtzoHkWHxjHZzaFojLc8quxXY7WAAMAg43nuxwv95tATVgQFNDwd4M9S1qFzj40Ul41Kmg== dependencies: "@smithy/util-buffer-from" "^4.0.0" @@ -1531,21 +1531,21 @@ "@smithy/util-body-length-browser@^4.0.0": version "4.0.0" - resolved "https://registry.yarnpkg.com/@smithy/util-body-length-browser/-/util-body-length-browser-4.0.0.tgz#965d19109a4b1e5fe7a43f813522cce718036ded" + resolved "https://registry.npmjs.org/@smithy/util-body-length-browser/-/util-body-length-browser-4.0.0.tgz" integrity sha512-sNi3DL0/k64/LO3A256M+m3CDdG6V7WKWHdAiBBMUN8S3hK3aMPhwnPik2A/a2ONN+9doY9UxaLfgqsIRg69QA== dependencies: tslib "^2.6.2" "@smithy/util-body-length-node@^4.0.0": version "4.0.0" - resolved "https://registry.yarnpkg.com/@smithy/util-body-length-node/-/util-body-length-node-4.0.0.tgz#3db245f6844a9b1e218e30c93305bfe2ffa473b3" + resolved "https://registry.npmjs.org/@smithy/util-body-length-node/-/util-body-length-node-4.0.0.tgz" integrity sha512-q0iDP3VsZzqJyje8xJWEJCNIu3lktUGVoSy1KB0UWym2CL1siV3artm+u1DFYTLejpsrdGyCSWBdGNjJzfDPjg== dependencies: tslib "^2.6.2" "@smithy/util-buffer-from@^1.1.0": version "1.1.0" - resolved "https://registry.yarnpkg.com/@smithy/util-buffer-from/-/util-buffer-from-1.1.0.tgz#a000bd9f95c0e8d5b0edb0112f2a586daa5bed49" + resolved "https://registry.npmjs.org/@smithy/util-buffer-from/-/util-buffer-from-1.1.0.tgz" integrity sha512-9m6NXE0ww+ra5HKHCHig20T+FAwxBAm7DIdwc/767uGWbRcY720ybgPacQNB96JMOI7xVr/CDa3oMzKmW4a+kw== dependencies: "@smithy/is-array-buffer" "^1.1.0" @@ -1553,7 +1553,7 @@ "@smithy/util-buffer-from@^2.2.0": version "2.2.0" - resolved "https://registry.yarnpkg.com/@smithy/util-buffer-from/-/util-buffer-from-2.2.0.tgz#6fc88585165ec73f8681d426d96de5d402021e4b" + resolved "https://registry.npmjs.org/@smithy/util-buffer-from/-/util-buffer-from-2.2.0.tgz" integrity sha512-IJdWBbTcMQ6DA0gdNhh/BwrLkDR+ADW5Kr1aZmd4k3DIF6ezMV4R2NIAmT08wQJ3yUK82thHWmC/TnK/wpMMIA== dependencies: "@smithy/is-array-buffer" "^2.2.0" @@ -1561,7 +1561,7 @@ "@smithy/util-buffer-from@^4.0.0": version "4.0.0" - resolved "https://registry.yarnpkg.com/@smithy/util-buffer-from/-/util-buffer-from-4.0.0.tgz#b23b7deb4f3923e84ef50c8b2c5863d0dbf6c0b9" + resolved "https://registry.npmjs.org/@smithy/util-buffer-from/-/util-buffer-from-4.0.0.tgz" integrity sha512-9TOQ7781sZvddgO8nxueKi3+yGvkY35kotA0Y6BWRajAv8jjmigQ1sBwz0UX47pQMYXJPahSKEKYFgt+rXdcug== dependencies: "@smithy/is-array-buffer" "^4.0.0" @@ -1569,14 +1569,14 @@ "@smithy/util-config-provider@^4.0.0": version "4.0.0" - resolved "https://registry.yarnpkg.com/@smithy/util-config-provider/-/util-config-provider-4.0.0.tgz#e0c7c8124c7fba0b696f78f0bd0ccb060997d45e" + resolved "https://registry.npmjs.org/@smithy/util-config-provider/-/util-config-provider-4.0.0.tgz" integrity sha512-L1RBVzLyfE8OXH+1hsJ8p+acNUSirQnWQ6/EgpchV88G6zGBTDPdXiiExei6Z1wR2RxYvxY/XLw6AMNCCt8H3w== dependencies: tslib "^2.6.2" "@smithy/util-defaults-mode-browser@^4.0.9": version "4.0.10" - resolved "https://registry.yarnpkg.com/@smithy/util-defaults-mode-browser/-/util-defaults-mode-browser-4.0.10.tgz#50cc8aff3e1881848d574ea777439ff74a465550" + resolved "https://registry.npmjs.org/@smithy/util-defaults-mode-browser/-/util-defaults-mode-browser-4.0.10.tgz" integrity sha512-2k6fgUNOZ1Rn0gEjvGPGrDEINLG8qSBHsN7xlkkbO+fnHJ36BQPDzhFfMmYSDS8AgzoygqQiDOQ+6Hp2vBTUdA== dependencies: "@smithy/property-provider" "^4.0.2" @@ -1587,7 +1587,7 @@ "@smithy/util-defaults-mode-node@^4.0.9": version "4.0.10" - resolved "https://registry.yarnpkg.com/@smithy/util-defaults-mode-node/-/util-defaults-mode-node-4.0.10.tgz#f85b0a12fe3d1bc63e776ee8100d14055a211526" + resolved "https://registry.npmjs.org/@smithy/util-defaults-mode-node/-/util-defaults-mode-node-4.0.10.tgz" integrity sha512-2XR1WRglLVmoIFts7bODUTgBdVyvkfKNkydHrlsI5VxW9q3s1hnJCuY+f1OHzvj5ue23q4vydM2fjrMjf2HSdQ== dependencies: "@smithy/config-resolver" "^4.1.0" @@ -1600,7 +1600,7 @@ "@smithy/util-endpoints@^3.0.2": version "3.0.2" - resolved "https://registry.yarnpkg.com/@smithy/util-endpoints/-/util-endpoints-3.0.2.tgz#6933a0d6d4a349523ef71ca9540c9c0b222b559e" + resolved "https://registry.npmjs.org/@smithy/util-endpoints/-/util-endpoints-3.0.2.tgz" integrity sha512-6QSutU5ZyrpNbnd51zRTL7goojlcnuOB55+F9VBD+j8JpRY50IGamsjlycrmpn8PQkmJucFW8A0LSfXj7jjtLQ== dependencies: "@smithy/node-config-provider" "^4.0.2" @@ -1609,28 +1609,28 @@ "@smithy/util-hex-encoding@^1.1.0": version "1.1.0" - resolved "https://registry.yarnpkg.com/@smithy/util-hex-encoding/-/util-hex-encoding-1.1.0.tgz#b5ba919aa076a3fd5e93e368e34ae2b732fa2090" + resolved "https://registry.npmjs.org/@smithy/util-hex-encoding/-/util-hex-encoding-1.1.0.tgz" integrity sha512-7UtIE9eH0u41zpB60Jzr0oNCQ3hMJUabMcKRUVjmyHTXiWDE4vjSqN6qlih7rCNeKGbioS7f/y2Jgym4QZcKFg== dependencies: tslib "^2.5.0" "@smithy/util-hex-encoding@^4.0.0": version "4.0.0" - resolved "https://registry.yarnpkg.com/@smithy/util-hex-encoding/-/util-hex-encoding-4.0.0.tgz#dd449a6452cffb37c5b1807ec2525bb4be551e8d" + resolved "https://registry.npmjs.org/@smithy/util-hex-encoding/-/util-hex-encoding-4.0.0.tgz" integrity sha512-Yk5mLhHtfIgW2W2WQZWSg5kuMZCVbvhFmC7rV4IO2QqnZdbEFPmQnCcGMAX2z/8Qj3B9hYYNjZOhWym+RwhePw== dependencies: tslib "^2.6.2" "@smithy/util-middleware@^1.1.0": version "1.1.0" - resolved "https://registry.yarnpkg.com/@smithy/util-middleware/-/util-middleware-1.1.0.tgz#9f186489437ca2ef753c5e1de2930f76fd1edc14" + resolved "https://registry.npmjs.org/@smithy/util-middleware/-/util-middleware-1.1.0.tgz" integrity sha512-6hhckcBqVgjWAqLy2vqlPZ3rfxLDhFWEmM7oLh2POGvsi7j0tHkbN7w4DFhuBExVJAbJ/qqxqZdRY6Fu7/OezQ== dependencies: tslib "^2.5.0" "@smithy/util-middleware@^4.0.2": version "4.0.2" - resolved "https://registry.yarnpkg.com/@smithy/util-middleware/-/util-middleware-4.0.2.tgz#272f1249664e27068ef0d5f967a233bf7b77962c" + resolved "https://registry.npmjs.org/@smithy/util-middleware/-/util-middleware-4.0.2.tgz" integrity sha512-6GDamTGLuBQVAEuQ4yDQ+ti/YINf/MEmIegrEeg7DdB/sld8BX1lqt9RRuIcABOhAGTA50bRbPzErez7SlDtDQ== dependencies: "@smithy/types" "^4.2.0" @@ -1638,7 +1638,7 @@ "@smithy/util-retry@^4.0.3": version "4.0.3" - resolved "https://registry.yarnpkg.com/@smithy/util-retry/-/util-retry-4.0.3.tgz#42d54b3a100915b61c6f9bee43c966e96139584d" + resolved "https://registry.npmjs.org/@smithy/util-retry/-/util-retry-4.0.3.tgz" integrity sha512-DPuYjZQDXmKr/sNvy9Spu8R/ESa2e22wXZzSAY6NkjOLj6spbIje/Aq8rT97iUMdDj0qHMRIe+bTxvlU74d9Ng== dependencies: "@smithy/service-error-classification" "^4.0.3" @@ -1647,7 +1647,7 @@ "@smithy/util-stream@^4.2.0": version "4.2.0" - resolved "https://registry.yarnpkg.com/@smithy/util-stream/-/util-stream-4.2.0.tgz#85f85516b0042726162bf619caa3358332195652" + resolved "https://registry.npmjs.org/@smithy/util-stream/-/util-stream-4.2.0.tgz" integrity sha512-Vj1TtwWnuWqdgQI6YTUF5hQ/0jmFiOYsc51CSMgj7QfyO+RF4EnT2HNjoviNlOOmgzgvf3f5yno+EiC4vrnaWQ== dependencies: "@smithy/fetch-http-handler" "^5.0.2" @@ -1661,21 +1661,21 @@ "@smithy/util-uri-escape@^1.1.0": version "1.1.0" - resolved "https://registry.yarnpkg.com/@smithy/util-uri-escape/-/util-uri-escape-1.1.0.tgz#a8c5edaf19c0efdb9b51661e840549cf600a1808" + resolved "https://registry.npmjs.org/@smithy/util-uri-escape/-/util-uri-escape-1.1.0.tgz" integrity sha512-/jL/V1xdVRt5XppwiaEU8Etp5WHZj609n0xMTuehmCqdoOFbId1M+aEeDWZsQ+8JbEB/BJ6ynY2SlYmOaKtt8w== dependencies: tslib "^2.5.0" "@smithy/util-uri-escape@^4.0.0": version "4.0.0" - resolved "https://registry.yarnpkg.com/@smithy/util-uri-escape/-/util-uri-escape-4.0.0.tgz#a96c160c76f3552458a44d8081fade519d214737" + resolved "https://registry.npmjs.org/@smithy/util-uri-escape/-/util-uri-escape-4.0.0.tgz" integrity sha512-77yfbCbQMtgtTylO9itEAdpPXSog3ZxMe09AEhm0dU0NLTalV70ghDZFR+Nfi1C60jnJoh/Re4090/DuZh2Omg== dependencies: tslib "^2.6.2" "@smithy/util-utf8@^1.1.0": version "1.1.0" - resolved "https://registry.yarnpkg.com/@smithy/util-utf8/-/util-utf8-1.1.0.tgz#b791ab1e3f694374edfe22811e39dd8424a1be69" + resolved "https://registry.npmjs.org/@smithy/util-utf8/-/util-utf8-1.1.0.tgz" integrity sha512-p/MYV+JmqmPyjdgyN2UxAeYDj9cBqCjp0C/NsTWnnjoZUVqoeZ6IrW915L9CAKWVECgv9lVQGc4u/yz26/bI1A== dependencies: "@smithy/util-buffer-from" "^1.1.0" @@ -1683,7 +1683,7 @@ "@smithy/util-utf8@^2.0.0": version "2.3.0" - resolved "https://registry.yarnpkg.com/@smithy/util-utf8/-/util-utf8-2.3.0.tgz#dd96d7640363259924a214313c3cf16e7dd329c5" + resolved "https://registry.npmjs.org/@smithy/util-utf8/-/util-utf8-2.3.0.tgz" integrity sha512-R8Rdn8Hy72KKcebgLiv8jQcQkXoLMOGGv5uI1/k0l+snqkOzQ1R0ChUBCxWMlBsFMekWjq0wRudIweFs7sKT5A== dependencies: "@smithy/util-buffer-from" "^2.2.0" @@ -1691,7 +1691,7 @@ "@smithy/util-utf8@^4.0.0": version "4.0.0" - resolved "https://registry.yarnpkg.com/@smithy/util-utf8/-/util-utf8-4.0.0.tgz#09ca2d9965e5849e72e347c130f2a29d5c0c863c" + resolved "https://registry.npmjs.org/@smithy/util-utf8/-/util-utf8-4.0.0.tgz" integrity sha512-b+zebfKCfRdgNJDknHCob3O7FpeYQN6ZG6YLExMcasDHsCXlsXCEuiPZeLnJLpwa5dvPetGlnGCiMHuLwGvFow== dependencies: "@smithy/util-buffer-from" "^4.0.0" @@ -1699,7 +1699,7 @@ "@smithy/util-waiter@^4.0.3": version "4.0.3" - resolved "https://registry.yarnpkg.com/@smithy/util-waiter/-/util-waiter-4.0.3.tgz#ec5605ec123493259ccbf1c0b5c1951b3360f43b" + resolved "https://registry.npmjs.org/@smithy/util-waiter/-/util-waiter-4.0.3.tgz" integrity sha512-JtaY3FxmD+te+KSI2FJuEcfNC9T/DGGVf551babM7fAaXhjJUt7oSYurH1Devxd2+BOSUACCgt3buinx4UnmEA== dependencies: "@smithy/abort-controller" "^4.0.2" @@ -1708,19 +1708,19 @@ "@tootallnate/once@2": version "2.0.0" - resolved "https://registry.yarnpkg.com/@tootallnate/once/-/once-2.0.0.tgz#f544a148d3ab35801c1f633a7441fd87c2e484bf" + resolved "https://registry.npmjs.org/@tootallnate/once/-/once-2.0.0.tgz" integrity sha512-XCuKFP5PS55gnMVu3dty8KPatLqUoy/ZYzDzAGCQ8JNFCkLXzmI7vNHCR+XpbZaMWQK/vQubr7PkYq8g470J/A== "@traceloop/ai-semantic-conventions@>=0.11.6", "@traceloop/ai-semantic-conventions@^0.13.0": version "0.13.0" - resolved "https://registry.yarnpkg.com/@traceloop/ai-semantic-conventions/-/ai-semantic-conventions-0.13.0.tgz#8cac4f91e23e110a6024105ec6a28a2ef4878499" + resolved "https://registry.npmjs.org/@traceloop/ai-semantic-conventions/-/ai-semantic-conventions-0.13.0.tgz" integrity sha512-6aAbaZkeezijSBnsKpVnc+MBXwG+ByDK70gZCexSykkwkwhWSFdVeoXkWUBeLt+STFQWjK5EQE087qkaVC3o+w== dependencies: "@opentelemetry/api" "^1.9.0" "@traceloop/instrumentation-anthropic@>=0.11.1": version "0.13.0" - resolved "https://registry.yarnpkg.com/@traceloop/instrumentation-anthropic/-/instrumentation-anthropic-0.13.0.tgz#56da7821d9d1ea3a8ee42c8d52b16f31bf1fd7d9" + resolved "https://registry.npmjs.org/@traceloop/instrumentation-anthropic/-/instrumentation-anthropic-0.13.0.tgz" integrity sha512-SQIx8nhnWOvPNtpyYxog2W+iUwMGxUXNodfDOOhS093YcBPIIL/2Vf2fzQELyZdJAmz1mQxAgxjrKkHypaeWhQ== dependencies: "@opentelemetry/core" "^1.29.0" @@ -1731,7 +1731,7 @@ "@traceloop/instrumentation-cohere@>=0.11.1": version "0.13.0" - resolved "https://registry.yarnpkg.com/@traceloop/instrumentation-cohere/-/instrumentation-cohere-0.13.0.tgz#4f1b3f9707fadfcc7f5ea4345f690a36d73c14be" + resolved "https://registry.npmjs.org/@traceloop/instrumentation-cohere/-/instrumentation-cohere-0.13.0.tgz" integrity sha512-hTTHJ+lpeGi7M1rw7hkeQiQX7Z4WGmqz7mZWk1DZ3f8lAMCaTU1JmQCtzNnZMysY7+IdDIrETrmoFDJ+srsHUg== dependencies: "@opentelemetry/core" "^1.29.0" @@ -1742,7 +1742,7 @@ "@traceloop/instrumentation-openai@>=0.11.3": version "0.13.0" - resolved "https://registry.yarnpkg.com/@traceloop/instrumentation-openai/-/instrumentation-openai-0.13.0.tgz#c2defd89e98059eb6f6e704b349525f6c743e77b" + resolved "https://registry.npmjs.org/@traceloop/instrumentation-openai/-/instrumentation-openai-0.13.0.tgz" integrity sha512-ql9ML/zV4uHc5RnrpuismJluYiVDo9TXxIMqz1PSe2uFuzt6d7RDil9tbjXbwNlCfeyIEBGY/UJZCuUYneXUdw== dependencies: "@opentelemetry/core" "^1.29.0" @@ -1754,7 +1754,7 @@ "@trivago/prettier-plugin-sort-imports@^4.3.0": version "4.3.0" - resolved "https://registry.yarnpkg.com/@trivago/prettier-plugin-sort-imports/-/prettier-plugin-sort-imports-4.3.0.tgz#725f411646b3942193a37041c84e0b2116339789" + resolved "https://registry.npmjs.org/@trivago/prettier-plugin-sort-imports/-/prettier-plugin-sort-imports-4.3.0.tgz" integrity sha512-r3n0onD3BTOVUNPhR4lhVK4/pABGpbA7bW3eumZnYdKaHkf1qEC+Mag6DPbGNuuh0eG8AaYj+YqmVHSiGslaTQ== dependencies: "@babel/generator" "7.17.7" @@ -1766,7 +1766,7 @@ "@types/babel__core@^7.1.14": version "7.20.5" - resolved "https://registry.yarnpkg.com/@types/babel__core/-/babel__core-7.20.5.tgz#3df15f27ba85319caa07ba08d0721889bb39c017" + resolved "https://registry.npmjs.org/@types/babel__core/-/babel__core-7.20.5.tgz" integrity sha512-qoQprZvz5wQFJwMDqeseRXWv3rqMvhgpbXFfVyWhbx9X47POIA6i/+dXefEmZKoAgOaTdaIgNSMqMIU61yRyzA== dependencies: "@babel/parser" "^7.20.7" @@ -1777,14 +1777,14 @@ "@types/babel__generator@*": version "7.27.0" - resolved "https://registry.yarnpkg.com/@types/babel__generator/-/babel__generator-7.27.0.tgz#b5819294c51179957afaec341442f9341e4108a9" + resolved "https://registry.npmjs.org/@types/babel__generator/-/babel__generator-7.27.0.tgz" integrity sha512-ufFd2Xi92OAVPYsy+P4n7/U7e68fex0+Ee8gSG9KX7eo084CWiQ4sdxktvdl0bOPupXtVJPY19zk6EwWqUQ8lg== dependencies: "@babel/types" "^7.0.0" "@types/babel__template@*": version "7.4.4" - resolved "https://registry.yarnpkg.com/@types/babel__template/-/babel__template-7.4.4.tgz#5672513701c1b2199bc6dad636a9d7491586766f" + resolved "https://registry.npmjs.org/@types/babel__template/-/babel__template-7.4.4.tgz" integrity sha512-h/NUaSyG5EyxBIp8YRxo4RMe2/qQgvyowRwVMzhYhBCONbW8PUsg4lkFMrhgZhUe5z3L3MiLDuvyJ/CaPa2A8A== dependencies: "@babel/parser" "^7.1.0" @@ -1792,21 +1792,21 @@ "@types/babel__traverse@*", "@types/babel__traverse@^7.0.6": version "7.20.7" - resolved "https://registry.yarnpkg.com/@types/babel__traverse/-/babel__traverse-7.20.7.tgz#968cdc2366ec3da159f61166428ee40f370e56c2" + resolved "https://registry.npmjs.org/@types/babel__traverse/-/babel__traverse-7.20.7.tgz" integrity sha512-dkO5fhS7+/oos4ciWxyEyjWe48zmG6wbCheo/G2ZnHx4fs3EU6YC6UM8rk56gAjNJ9P3MTH2jo5jb92/K6wbng== dependencies: "@babel/types" "^7.20.7" "@types/cli-progress@^3.11.6": version "3.11.6" - resolved "https://registry.yarnpkg.com/@types/cli-progress/-/cli-progress-3.11.6.tgz#94b334ebe4190f710e51c1bf9b4fedb681fa9e45" + resolved "https://registry.npmjs.org/@types/cli-progress/-/cli-progress-3.11.6.tgz" integrity sha512-cE3+jb9WRlu+uOSAugewNpITJDt1VF8dHOopPO4IABFc3SXYL5WE/+PTz/FCdZRRfIujiWW3n3aMbv1eIGVRWA== dependencies: "@types/node" "*" "@types/eslint-scope@^3.7.7": version "3.7.7" - resolved "https://registry.yarnpkg.com/@types/eslint-scope/-/eslint-scope-3.7.7.tgz#3108bd5f18b0cdb277c867b3dd449c9ed7079ac5" + resolved "https://registry.npmjs.org/@types/eslint-scope/-/eslint-scope-3.7.7.tgz" integrity sha512-MzMFlSLBqNF2gcHWO0G1vP/YQyfvrxZ0bF+u7mzUdZ1/xK4A4sru+nraZz5i3iEIk1l1uyicaDVTB4QbbEkAYg== dependencies: "@types/eslint" "*" @@ -1814,7 +1814,7 @@ "@types/eslint@*": version "9.6.1" - resolved "https://registry.yarnpkg.com/@types/eslint/-/eslint-9.6.1.tgz#d5795ad732ce81715f27f75da913004a56751584" + resolved "https://registry.npmjs.org/@types/eslint/-/eslint-9.6.1.tgz" integrity sha512-FXx2pKgId/WyYo2jXw63kk7/+TY7u7AziEJxJAnSFzHlqTAS3Ync6SvgYAN/k4/PQpnnVuzoMuVnByKK2qp0ag== dependencies: "@types/estree" "*" @@ -1822,38 +1822,38 @@ "@types/estree@*", "@types/estree@^1.0.6": version "1.0.7" - resolved "https://registry.yarnpkg.com/@types/estree/-/estree-1.0.7.tgz#4158d3105276773d5b7695cd4834b1722e4f37a8" + resolved "https://registry.npmjs.org/@types/estree/-/estree-1.0.7.tgz" integrity sha512-w28IoSUCJpidD/TGviZwwMJckNESJZXFu7NBZ5YJ4mEUnNraUn9Pm8HSZm/jDF1pDWYKspWE7oVphigUPRakIQ== "@types/graceful-fs@^4.1.3": version "4.1.9" - resolved "https://registry.yarnpkg.com/@types/graceful-fs/-/graceful-fs-4.1.9.tgz#2a06bc0f68a20ab37b3e36aa238be6abdf49e8b4" + resolved "https://registry.npmjs.org/@types/graceful-fs/-/graceful-fs-4.1.9.tgz" integrity sha512-olP3sd1qOEe5dXTSaFvQG+02VdRXcdytWLAZsAq1PecU8uqQAhkrnbli7DagjtXKW/Bl7YJbUsa8MPcuc8LHEQ== dependencies: "@types/node" "*" "@types/istanbul-lib-coverage@*", "@types/istanbul-lib-coverage@^2.0.0", "@types/istanbul-lib-coverage@^2.0.1": version "2.0.6" - resolved "https://registry.yarnpkg.com/@types/istanbul-lib-coverage/-/istanbul-lib-coverage-2.0.6.tgz#7739c232a1fee9b4d3ce8985f314c0c6d33549d7" + resolved "https://registry.npmjs.org/@types/istanbul-lib-coverage/-/istanbul-lib-coverage-2.0.6.tgz" integrity sha512-2QF/t/auWm0lsy8XtKVPG19v3sSOQlJe/YHZgfjb/KBBHOGSV+J2q/S671rcq9uTBrLAXmZpqJiaQbMT+zNU1w== "@types/istanbul-lib-report@*": version "3.0.3" - resolved "https://registry.yarnpkg.com/@types/istanbul-lib-report/-/istanbul-lib-report-3.0.3.tgz#53047614ae72e19fc0401d872de3ae2b4ce350bf" + resolved "https://registry.npmjs.org/@types/istanbul-lib-report/-/istanbul-lib-report-3.0.3.tgz" integrity sha512-NQn7AHQnk/RSLOxrBbGyJM/aVQ+pjj5HCgasFxc0K/KhoATfQ/47AyUl15I2yBUpihjmas+a+VJBOqecrFH+uA== dependencies: "@types/istanbul-lib-coverage" "*" "@types/istanbul-reports@^3.0.0": version "3.0.4" - resolved "https://registry.yarnpkg.com/@types/istanbul-reports/-/istanbul-reports-3.0.4.tgz#0f03e3d2f670fbdac586e34b433783070cc16f54" + resolved "https://registry.npmjs.org/@types/istanbul-reports/-/istanbul-reports-3.0.4.tgz" integrity sha512-pk2B1NWalF9toCRu6gjBzR69syFjP4Od8WRAX+0mmf9lAjCRicLOWc+ZrxZHx/0XRjotgkF9t6iaMJ+aXcOdZQ== dependencies: "@types/istanbul-lib-report" "*" "@types/jest@^29.5.14": version "29.5.14" - resolved "https://registry.yarnpkg.com/@types/jest/-/jest-29.5.14.tgz#2b910912fa1d6856cadcd0c1f95af7df1d6049e5" + resolved "https://registry.npmjs.org/@types/jest/-/jest-29.5.14.tgz" integrity sha512-ZN+4sdnLUbo8EVvVc2ao0GFW6oVrQRPn4K2lglySj7APvSrgzxHiNNK99us4WDMi57xxA2yggblIAMNhXOotLQ== dependencies: expect "^29.0.0" @@ -1861,7 +1861,7 @@ "@types/jsdom@^20.0.0": version "20.0.1" - resolved "https://registry.yarnpkg.com/@types/jsdom/-/jsdom-20.0.1.tgz#07c14bc19bd2f918c1929541cdaacae894744808" + resolved "https://registry.npmjs.org/@types/jsdom/-/jsdom-20.0.1.tgz" integrity sha512-d0r18sZPmMQr1eG35u12FZfhIXNrnsPU/g5wvRKCUf/tOGilKKwYMYGqh33BNR6ba+2gkHw1EUiHoN3mn7E5IQ== dependencies: "@types/node" "*" @@ -1870,44 +1870,37 @@ "@types/json-schema@*", "@types/json-schema@^7.0.15", "@types/json-schema@^7.0.9": version "7.0.15" - resolved "https://registry.yarnpkg.com/@types/json-schema/-/json-schema-7.0.15.tgz#596a1747233694d50f6ad8a7869fcb6f56cf5841" + resolved "https://registry.npmjs.org/@types/json-schema/-/json-schema-7.0.15.tgz" integrity sha512-5+fP8P8MFNC+AyZCDxrB2pkZFPGzqQWUzpSeuuVLvm8VMcorNYavBqoFcxK8bQz4Qsbn4oUEEem4wDLfcysGHA== "@types/lodash@4.14.74": version "4.14.74" - resolved "https://registry.yarnpkg.com/@types/lodash/-/lodash-4.14.74.tgz#ac3bd8db988e7f7038e5d22bd76a7ba13f876168" + resolved "https://registry.npmjs.org/@types/lodash/-/lodash-4.14.74.tgz" integrity sha512-BZknw3E/z3JmCLqQVANcR17okqVTPZdlxvcIz0fJiJVLUCbSH1hK3zs9r634PVSmrzAxN+n/fxlVRiYoArdOIQ== "@types/node-fetch@^2.6.12", "@types/node-fetch@^2.6.4": version "2.6.12" - resolved "https://registry.yarnpkg.com/@types/node-fetch/-/node-fetch-2.6.12.tgz#8ab5c3ef8330f13100a7479e2cd56d3386830a03" + resolved "https://registry.npmjs.org/@types/node-fetch/-/node-fetch-2.6.12.tgz" integrity sha512-8nneRWKCg3rMtF69nLQJnOYUcbafYeFSjqkw3jCRLsqkWFlHaoQrr5mXmofFGOx3DKn7UfmBMyov8ySvLRVldA== dependencies: "@types/node" "*" form-data "^4.0.0" -"@types/node@*": - version "22.15.12" - resolved "https://registry.yarnpkg.com/@types/node/-/node-22.15.12.tgz#9ce54e51e09536faa94e4ec300c4728ee83bfa85" - integrity sha512-K0fpC/ZVeb8G9rm7bH7vI0KAec4XHEhBam616nVJCV51bKzJ6oA3luG4WdKoaztxe70QaNjS/xBmcDLmr4PiGw== - dependencies: - undici-types "~6.21.0" - -"@types/node@^18.11.18", "@types/node@^18.19.70": +"@types/node@*", "@types/node@^18.11.18", "@types/node@^18.19.70": version "18.19.96" - resolved "https://registry.yarnpkg.com/@types/node/-/node-18.19.96.tgz#34b4ecfe4fe864f4e59994d2108cd1659ba37683" + resolved "https://registry.npmjs.org/@types/node/-/node-18.19.96.tgz" integrity sha512-PzBvgsZ7YdFs/Kng1BSW8IGv68/SPcOxYYhT7luxD7QyzIhFS1xPTpfK3K9eHBa7hVwlW+z8nN0mOd515yaduQ== dependencies: undici-types "~5.26.4" "@types/qs@^6.9.17": version "6.9.18" - resolved "https://registry.yarnpkg.com/@types/qs/-/qs-6.9.18.tgz#877292caa91f7c1b213032b34626505b746624c2" + resolved "https://registry.npmjs.org/@types/qs/-/qs-6.9.18.tgz" integrity sha512-kK7dgTYDyGqS+e2Q4aK9X3D7q234CIZ1Bv0q/7Z5IwRDoADNU81xXJK/YVyLbLTZCoIwUoDoffFeF+p/eIklAA== "@types/readable-stream@^4.0.18": version "4.0.18" - resolved "https://registry.yarnpkg.com/@types/readable-stream/-/readable-stream-4.0.18.tgz#5d8d15d26c776500ce573cae580787d149823bfc" + resolved "https://registry.npmjs.org/@types/readable-stream/-/readable-stream-4.0.18.tgz" integrity sha512-21jK/1j+Wg+7jVw1xnSwy/2Q1VgVjWuFssbYGTREPUBeZ+rqVFl2udq0IkxzPC0ZhOzVceUbyIACFZKLqKEBlA== dependencies: "@types/node" "*" @@ -1915,44 +1908,44 @@ "@types/shimmer@^1.2.0": version "1.2.0" - resolved "https://registry.yarnpkg.com/@types/shimmer/-/shimmer-1.2.0.tgz#9b706af96fa06416828842397a70dfbbf1c14ded" + resolved "https://registry.npmjs.org/@types/shimmer/-/shimmer-1.2.0.tgz" integrity sha512-UE7oxhQLLd9gub6JKIAhDq06T0F6FnztwMNRvYgjeQSBeMc1ZG/tA47EwfduvkuQS8apbkM/lpLpWsaCeYsXVg== "@types/stack-utils@^2.0.0": version "2.0.3" - resolved "https://registry.yarnpkg.com/@types/stack-utils/-/stack-utils-2.0.3.tgz#6209321eb2c1712a7e7466422b8cb1fc0d9dd5d8" + resolved "https://registry.npmjs.org/@types/stack-utils/-/stack-utils-2.0.3.tgz" integrity sha512-9aEbYZ3TbYMznPdcdr3SmIrLXwC/AKZXQeCf9Pgao5CKb8CyHuEX5jzWPTkvregvhRJHcpRO6BFoGW9ycaOkYw== "@types/tough-cookie@*": version "4.0.5" - resolved "https://registry.yarnpkg.com/@types/tough-cookie/-/tough-cookie-4.0.5.tgz#cb6e2a691b70cb177c6e3ae9c1d2e8b2ea8cd304" + resolved "https://registry.npmjs.org/@types/tough-cookie/-/tough-cookie-4.0.5.tgz" integrity sha512-/Ad8+nIOV7Rl++6f1BdKxFSMgmoqEoYbHRpPcx3JEfv8VRsQe9Z4mCXeJBzxs7mbHY/XOZZuXlRNfhpVPbs6ZA== "@types/url-join@4.0.1": version "4.0.1" - resolved "https://registry.yarnpkg.com/@types/url-join/-/url-join-4.0.1.tgz#4989c97f969464647a8586c7252d97b449cdc045" + resolved "https://registry.npmjs.org/@types/url-join/-/url-join-4.0.1.tgz" integrity sha512-wDXw9LEEUHyV+7UWy7U315nrJGJ7p1BzaCxDpEoLr789Dk1WDVMMlf3iBfbG2F8NdWnYyFbtTxUn2ZNbm1Q4LQ== "@types/uuid@^9.0.1": version "9.0.8" - resolved "https://registry.yarnpkg.com/@types/uuid/-/uuid-9.0.8.tgz#7545ba4fc3c003d6c756f651f3bf163d8f0f29ba" + resolved "https://registry.npmjs.org/@types/uuid/-/uuid-9.0.8.tgz" integrity sha512-jg+97EGIcY9AGHJJRaaPVgetKDsrTgbRjQ5Msgjh/DQKEFl0DtyRr/VCOyD1T2R1MNeWPK/u7JoGhlDZnKBAfA== "@types/yargs-parser@*": version "21.0.3" - resolved "https://registry.yarnpkg.com/@types/yargs-parser/-/yargs-parser-21.0.3.tgz#815e30b786d2e8f0dcd85fd5bcf5e1a04d008f15" + resolved "https://registry.npmjs.org/@types/yargs-parser/-/yargs-parser-21.0.3.tgz" integrity sha512-I4q9QU9MQv4oEOz4tAHJtNz1cwuLxn2F3xcc2iV5WdqLPpUnj30aUuxt1mAxYTG+oe8CZMV/+6rU4S4gRDzqtQ== "@types/yargs@^17.0.8": version "17.0.33" - resolved "https://registry.yarnpkg.com/@types/yargs/-/yargs-17.0.33.tgz#8c32303da83eec050a84b3c7ae7b9f922d13e32d" + resolved "https://registry.npmjs.org/@types/yargs/-/yargs-17.0.33.tgz" integrity sha512-WpxBCKWPLr4xSsHgz511rFJAM+wS28w2zEO1QDNY5zM/S8ok70NNfztH0xwhqKyaK0OHCbN98LDAZuy1ctxDkA== dependencies: "@types/yargs-parser" "*" "@webassemblyjs/ast@1.14.1", "@webassemblyjs/ast@^1.14.1": version "1.14.1" - resolved "https://registry.yarnpkg.com/@webassemblyjs/ast/-/ast-1.14.1.tgz#a9f6a07f2b03c95c8d38c4536a1fdfb521ff55b6" + resolved "https://registry.npmjs.org/@webassemblyjs/ast/-/ast-1.14.1.tgz" integrity sha512-nuBEDgQfm1ccRp/8bCQrx1frohyufl4JlbMMZ4P1wpeOfDhF6FQkxZJ1b/e+PLwr6X1Nhw6OLme5usuBWYBvuQ== dependencies: "@webassemblyjs/helper-numbers" "1.13.2" @@ -1960,22 +1953,22 @@ "@webassemblyjs/floating-point-hex-parser@1.13.2": version "1.13.2" - resolved "https://registry.yarnpkg.com/@webassemblyjs/floating-point-hex-parser/-/floating-point-hex-parser-1.13.2.tgz#fcca1eeddb1cc4e7b6eed4fc7956d6813b21b9fb" + resolved "https://registry.npmjs.org/@webassemblyjs/floating-point-hex-parser/-/floating-point-hex-parser-1.13.2.tgz" integrity sha512-6oXyTOzbKxGH4steLbLNOu71Oj+C8Lg34n6CqRvqfS2O71BxY6ByfMDRhBytzknj9yGUPVJ1qIKhRlAwO1AovA== "@webassemblyjs/helper-api-error@1.13.2": version "1.13.2" - resolved "https://registry.yarnpkg.com/@webassemblyjs/helper-api-error/-/helper-api-error-1.13.2.tgz#e0a16152248bc38daee76dd7e21f15c5ef3ab1e7" + resolved "https://registry.npmjs.org/@webassemblyjs/helper-api-error/-/helper-api-error-1.13.2.tgz" integrity sha512-U56GMYxy4ZQCbDZd6JuvvNV/WFildOjsaWD3Tzzvmw/mas3cXzRJPMjP83JqEsgSbyrmaGjBfDtV7KDXV9UzFQ== "@webassemblyjs/helper-buffer@1.14.1": version "1.14.1" - resolved "https://registry.yarnpkg.com/@webassemblyjs/helper-buffer/-/helper-buffer-1.14.1.tgz#822a9bc603166531f7d5df84e67b5bf99b72b96b" + resolved "https://registry.npmjs.org/@webassemblyjs/helper-buffer/-/helper-buffer-1.14.1.tgz" integrity sha512-jyH7wtcHiKssDtFPRB+iQdxlDf96m0E39yb0k5uJVhFGleZFoNw1c4aeIcVUPPbXUVJ94wwnMOAqUHyzoEPVMA== "@webassemblyjs/helper-numbers@1.13.2": version "1.13.2" - resolved "https://registry.yarnpkg.com/@webassemblyjs/helper-numbers/-/helper-numbers-1.13.2.tgz#dbd932548e7119f4b8a7877fd5a8d20e63490b2d" + resolved "https://registry.npmjs.org/@webassemblyjs/helper-numbers/-/helper-numbers-1.13.2.tgz" integrity sha512-FE8aCmS5Q6eQYcV3gI35O4J789wlQA+7JrqTTpJqn5emA4U2hvwJmvFRC0HODS+3Ye6WioDklgd6scJ3+PLnEA== dependencies: "@webassemblyjs/floating-point-hex-parser" "1.13.2" @@ -1984,12 +1977,12 @@ "@webassemblyjs/helper-wasm-bytecode@1.13.2": version "1.13.2" - resolved "https://registry.yarnpkg.com/@webassemblyjs/helper-wasm-bytecode/-/helper-wasm-bytecode-1.13.2.tgz#e556108758f448aae84c850e593ce18a0eb31e0b" + resolved "https://registry.npmjs.org/@webassemblyjs/helper-wasm-bytecode/-/helper-wasm-bytecode-1.13.2.tgz" integrity sha512-3QbLKy93F0EAIXLh0ogEVR6rOubA9AoZ+WRYhNbFyuB70j3dRdwH9g+qXhLAO0kiYGlg3TxDV+I4rQTr/YNXkA== "@webassemblyjs/helper-wasm-section@1.14.1": version "1.14.1" - resolved "https://registry.yarnpkg.com/@webassemblyjs/helper-wasm-section/-/helper-wasm-section-1.14.1.tgz#9629dda9c4430eab54b591053d6dc6f3ba050348" + resolved "https://registry.npmjs.org/@webassemblyjs/helper-wasm-section/-/helper-wasm-section-1.14.1.tgz" integrity sha512-ds5mXEqTJ6oxRoqjhWDU83OgzAYjwsCV8Lo/N+oRsNDmx/ZDpqalmrtgOMkHwxsG0iI//3BwWAErYRHtgn0dZw== dependencies: "@webassemblyjs/ast" "1.14.1" @@ -1999,26 +1992,26 @@ "@webassemblyjs/ieee754@1.13.2": version "1.13.2" - resolved "https://registry.yarnpkg.com/@webassemblyjs/ieee754/-/ieee754-1.13.2.tgz#1c5eaace1d606ada2c7fd7045ea9356c59ee0dba" + resolved "https://registry.npmjs.org/@webassemblyjs/ieee754/-/ieee754-1.13.2.tgz" integrity sha512-4LtOzh58S/5lX4ITKxnAK2USuNEvpdVV9AlgGQb8rJDHaLeHciwG4zlGr0j/SNWlr7x3vO1lDEsuePvtcDNCkw== dependencies: "@xtuc/ieee754" "^1.2.0" "@webassemblyjs/leb128@1.13.2": version "1.13.2" - resolved "https://registry.yarnpkg.com/@webassemblyjs/leb128/-/leb128-1.13.2.tgz#57c5c3deb0105d02ce25fa3fd74f4ebc9fd0bbb0" + resolved "https://registry.npmjs.org/@webassemblyjs/leb128/-/leb128-1.13.2.tgz" integrity sha512-Lde1oNoIdzVzdkNEAWZ1dZ5orIbff80YPdHx20mrHwHrVNNTjNr8E3xz9BdpcGqRQbAEa+fkrCb+fRFTl/6sQw== dependencies: "@xtuc/long" "4.2.2" "@webassemblyjs/utf8@1.13.2": version "1.13.2" - resolved "https://registry.yarnpkg.com/@webassemblyjs/utf8/-/utf8-1.13.2.tgz#917a20e93f71ad5602966c2d685ae0c6c21f60f1" + resolved "https://registry.npmjs.org/@webassemblyjs/utf8/-/utf8-1.13.2.tgz" integrity sha512-3NQWGjKTASY1xV5m7Hr0iPeXD9+RDobLll3T9d2AO+g3my8xy5peVyjSag4I50mR1bBSN/Ct12lo+R9tJk0NZQ== "@webassemblyjs/wasm-edit@^1.14.1": version "1.14.1" - resolved "https://registry.yarnpkg.com/@webassemblyjs/wasm-edit/-/wasm-edit-1.14.1.tgz#ac6689f502219b59198ddec42dcd496b1004d597" + resolved "https://registry.npmjs.org/@webassemblyjs/wasm-edit/-/wasm-edit-1.14.1.tgz" integrity sha512-RNJUIQH/J8iA/1NzlE4N7KtyZNHi3w7at7hDjvRNm5rcUXa00z1vRz3glZoULfJ5mpvYhLybmVcwcjGrC1pRrQ== dependencies: "@webassemblyjs/ast" "1.14.1" @@ -2032,7 +2025,7 @@ "@webassemblyjs/wasm-gen@1.14.1": version "1.14.1" - resolved "https://registry.yarnpkg.com/@webassemblyjs/wasm-gen/-/wasm-gen-1.14.1.tgz#991e7f0c090cb0bb62bbac882076e3d219da9570" + resolved "https://registry.npmjs.org/@webassemblyjs/wasm-gen/-/wasm-gen-1.14.1.tgz" integrity sha512-AmomSIjP8ZbfGQhumkNvgC33AY7qtMCXnN6bL2u2Js4gVCg8fp735aEiMSBbDR7UQIj90n4wKAFUSEd0QN2Ukg== dependencies: "@webassemblyjs/ast" "1.14.1" @@ -2043,7 +2036,7 @@ "@webassemblyjs/wasm-opt@1.14.1": version "1.14.1" - resolved "https://registry.yarnpkg.com/@webassemblyjs/wasm-opt/-/wasm-opt-1.14.1.tgz#e6f71ed7ccae46781c206017d3c14c50efa8106b" + resolved "https://registry.npmjs.org/@webassemblyjs/wasm-opt/-/wasm-opt-1.14.1.tgz" integrity sha512-PTcKLUNvBqnY2U6E5bdOQcSM+oVP/PmrDY9NzowJjislEjwP/C4an2303MCVS2Mg9d3AJpIGdUFIQQWbPds0Sw== dependencies: "@webassemblyjs/ast" "1.14.1" @@ -2053,7 +2046,7 @@ "@webassemblyjs/wasm-parser@1.14.1", "@webassemblyjs/wasm-parser@^1.14.1": version "1.14.1" - resolved "https://registry.yarnpkg.com/@webassemblyjs/wasm-parser/-/wasm-parser-1.14.1.tgz#b3e13f1893605ca78b52c68e54cf6a865f90b9fb" + resolved "https://registry.npmjs.org/@webassemblyjs/wasm-parser/-/wasm-parser-1.14.1.tgz" integrity sha512-JLBl+KZ0R5qB7mCnud/yyX08jWFw5MsoalJ1pQ4EdFlgj9VdXKGuENGsiCIjegI1W7p91rUlcB/LB5yRJKNTcQ== dependencies: "@webassemblyjs/ast" "1.14.1" @@ -2065,7 +2058,7 @@ "@webassemblyjs/wast-printer@1.14.1": version "1.14.1" - resolved "https://registry.yarnpkg.com/@webassemblyjs/wast-printer/-/wast-printer-1.14.1.tgz#3bb3e9638a8ae5fdaf9610e7a06b4d9f9aa6fe07" + resolved "https://registry.npmjs.org/@webassemblyjs/wast-printer/-/wast-printer-1.14.1.tgz" integrity sha512-kPSSXE6De1XOR820C90RIo2ogvZG+c3KiHzqUoO/F34Y2shGzesfqv7o57xrxovZJH/MetF5UjroJ/R/3isoiw== dependencies: "@webassemblyjs/ast" "1.14.1" @@ -2073,29 +2066,29 @@ "@xtuc/ieee754@^1.2.0": version "1.2.0" - resolved "https://registry.yarnpkg.com/@xtuc/ieee754/-/ieee754-1.2.0.tgz#eef014a3145ae477a1cbc00cd1e552336dceb790" + resolved "https://registry.npmjs.org/@xtuc/ieee754/-/ieee754-1.2.0.tgz" integrity sha512-DX8nKgqcGwsc0eJSqYt5lwP4DH5FlHnmuWWBRy7X0NcaGR0ZtuyeESgMwTYVEtxmsNGY+qit4QYT/MIYTOTPeA== "@xtuc/long@4.2.2": version "4.2.2" - resolved "https://registry.yarnpkg.com/@xtuc/long/-/long-4.2.2.tgz#d291c6a4e97989b5c61d9acf396ae4fe133a718d" + resolved "https://registry.npmjs.org/@xtuc/long/-/long-4.2.2.tgz" integrity sha512-NuHqBY1PB/D8xU6s/thBgOAiAP7HOYDQ32+BFZILJ8ivkUkAHQnWfn6WhL79Owj1qmUnoN/YPhktdIoucipkAQ== abab@^2.0.6: version "2.0.6" - resolved "https://registry.yarnpkg.com/abab/-/abab-2.0.6.tgz#41b80f2c871d19686216b82309231cfd3cb3d291" + resolved "https://registry.npmjs.org/abab/-/abab-2.0.6.tgz" integrity sha512-j2afSsaIENvHZN2B8GOpF566vZ5WVk5opAiMTvWgaQT8DkbOqsTfvNAvHoRGU2zzP8cPoqys+xHTRDWW8L+/BA== abort-controller@^3.0.0: version "3.0.0" - resolved "https://registry.yarnpkg.com/abort-controller/-/abort-controller-3.0.0.tgz#eaf54d53b62bae4138e809ca225c8439a6efb392" + resolved "https://registry.npmjs.org/abort-controller/-/abort-controller-3.0.0.tgz" integrity sha512-h8lQ8tacZYnR3vNQTgibj+tODHI5/+l06Au2Pcriv/Gmet0eaj4TwWH41sO9wnHDiQsEj19q0drzdWdeAHtweg== dependencies: event-target-shim "^5.0.0" acorn-globals@^7.0.0: version "7.0.1" - resolved "https://registry.yarnpkg.com/acorn-globals/-/acorn-globals-7.0.1.tgz#0dbf05c44fa7c94332914c02066d5beff62c40c3" + resolved "https://registry.npmjs.org/acorn-globals/-/acorn-globals-7.0.1.tgz" integrity sha512-umOSDSDrfHbTNPuNpC2NSnnA3LUrqpevPb4T9jRx4MagXNS0rs+gwiTcAvqCRmsD6utzsrzNt+ebm00SNWiC3Q== dependencies: acorn "^8.1.0" @@ -2103,52 +2096,52 @@ acorn-globals@^7.0.0: acorn-import-attributes@^1.9.5: version "1.9.5" - resolved "https://registry.yarnpkg.com/acorn-import-attributes/-/acorn-import-attributes-1.9.5.tgz#7eb1557b1ba05ef18b5ed0ec67591bfab04688ef" + resolved "https://registry.npmjs.org/acorn-import-attributes/-/acorn-import-attributes-1.9.5.tgz" integrity sha512-n02Vykv5uA3eHGM/Z2dQrcD56kL8TyDb2p1+0P83PClMnC/nc+anbQRhIOWnSq4Ke/KvDPrY3C9hDtC/A3eHnQ== acorn-walk@^8.0.2: version "8.3.4" - resolved "https://registry.yarnpkg.com/acorn-walk/-/acorn-walk-8.3.4.tgz#794dd169c3977edf4ba4ea47583587c5866236b7" + resolved "https://registry.npmjs.org/acorn-walk/-/acorn-walk-8.3.4.tgz" integrity sha512-ueEepnujpqee2o5aIYnvHU6C0A42MNdsIDeqy5BydrkuC5R1ZuUFnm27EeFJGoEHJQgn3uleRvmTXaJgfXbt4g== dependencies: acorn "^8.11.0" acorn@^8.1.0, acorn@^8.11.0, acorn@^8.14.0, acorn@^8.8.1, acorn@^8.8.2: version "8.14.1" - resolved "https://registry.yarnpkg.com/acorn/-/acorn-8.14.1.tgz#721d5dc10f7d5b5609a891773d47731796935dfb" + resolved "https://registry.npmjs.org/acorn/-/acorn-8.14.1.tgz" integrity sha512-OvQ/2pUDKmgfCg++xsTX1wGxfTaszcHVcTctW4UJB4hibJx2HXxxO5UmVgyjMa+ZDsiaf5wWLXYpRWMmBI0QHg== agent-base@6: version "6.0.2" - resolved "https://registry.yarnpkg.com/agent-base/-/agent-base-6.0.2.tgz#49fff58577cfee3f37176feab4c22e00f86d7f77" + resolved "https://registry.npmjs.org/agent-base/-/agent-base-6.0.2.tgz" integrity sha512-RZNwNclF7+MS/8bDg70amg32dyeZGZxiDuQmZxKLAlQjr3jGyLx+4Kkk58UO7D2QdgFIQCovuSuZESne6RG6XQ== dependencies: debug "4" agentkeepalive@^4.2.1: version "4.6.0" - resolved "https://registry.yarnpkg.com/agentkeepalive/-/agentkeepalive-4.6.0.tgz#35f73e94b3f40bf65f105219c623ad19c136ea6a" + resolved "https://registry.npmjs.org/agentkeepalive/-/agentkeepalive-4.6.0.tgz" integrity sha512-kja8j7PjmncONqaTsB8fQ+wE2mSU2DJ9D4XKoJ5PFWIdRMa6SLSN1ff4mOr4jCbfRSsxR4keIiySJU0N9T5hIQ== dependencies: humanize-ms "^1.2.1" ajv-formats@^2.1.1: version "2.1.1" - resolved "https://registry.yarnpkg.com/ajv-formats/-/ajv-formats-2.1.1.tgz#6e669400659eb74973bbf2e33327180a0996b520" + resolved "https://registry.npmjs.org/ajv-formats/-/ajv-formats-2.1.1.tgz" integrity sha512-Wx0Kx52hxE7C18hkMEggYlEifqWZtYaRgouJor+WMdPnQyEK13vgEWyVNup7SoeeoLMsr4kf5h6dOW11I15MUA== dependencies: ajv "^8.0.0" ajv-keywords@^5.1.0: version "5.1.0" - resolved "https://registry.yarnpkg.com/ajv-keywords/-/ajv-keywords-5.1.0.tgz#69d4d385a4733cdbeab44964a1170a88f87f0e16" + resolved "https://registry.npmjs.org/ajv-keywords/-/ajv-keywords-5.1.0.tgz" integrity sha512-YCS/JNFAUyr5vAuhk1DWm1CBxRHW9LbJ2ozWeemrIqpbsqKjHVxYPyi5GC0rjZIT5JxJ3virVTS8wk4i/Z+krw== dependencies: fast-deep-equal "^3.1.3" ajv@^8.0.0, ajv@^8.9.0: version "8.17.1" - resolved "https://registry.yarnpkg.com/ajv/-/ajv-8.17.1.tgz#37d9a5c776af6bc92d7f4f9510eba4c0a60d11a6" + resolved "https://registry.npmjs.org/ajv/-/ajv-8.17.1.tgz" integrity sha512-B/gBuNg5SiMTrPkC+A2+cW0RszwxYmn6VYxB/inlBStS5nx6xHIt/ehKRhIMhqusl7a8LjQoZnjCs5vhwxOQ1g== dependencies: fast-deep-equal "^3.1.3" @@ -2158,31 +2151,31 @@ ajv@^8.0.0, ajv@^8.9.0: ansi-escapes@^4.2.1: version "4.3.2" - resolved "https://registry.yarnpkg.com/ansi-escapes/-/ansi-escapes-4.3.2.tgz#6b2291d1db7d98b6521d5f1efa42d0f3a9feb65e" + resolved "https://registry.npmjs.org/ansi-escapes/-/ansi-escapes-4.3.2.tgz" integrity sha512-gKXj5ALrKWQLsYG9jlTRmR/xKluxHV+Z9QEwNIgCfM1/uwPMCuzVVnh5mwTd+OuBZcwSIMbqssNWRm1lE51QaQ== dependencies: type-fest "^0.21.3" ansi-regex@^5.0.1: version "5.0.1" - resolved "https://registry.yarnpkg.com/ansi-regex/-/ansi-regex-5.0.1.tgz#082cb2c89c9fe8659a311a53bd6a4dc5301db304" + resolved "https://registry.npmjs.org/ansi-regex/-/ansi-regex-5.0.1.tgz" integrity sha512-quJQXlTSUGL2LH9SUXo8VwsY4soanhgo6LNSm84E1LBcE8s3O0wpdiRzyR9z/ZZJMlMWv37qOOb9pdJlMUEKFQ== ansi-styles@^4.0.0, ansi-styles@^4.1.0: version "4.3.0" - resolved "https://registry.yarnpkg.com/ansi-styles/-/ansi-styles-4.3.0.tgz#edd803628ae71c04c85ae7a0906edad34b648937" + resolved "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz" integrity sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg== dependencies: color-convert "^2.0.1" ansi-styles@^5.0.0: version "5.2.0" - resolved "https://registry.yarnpkg.com/ansi-styles/-/ansi-styles-5.2.0.tgz#07449690ad45777d1924ac2abb2fc8895dba836b" + resolved "https://registry.npmjs.org/ansi-styles/-/ansi-styles-5.2.0.tgz" integrity sha512-Cxwpt2SfTzTtXcfOlzGEee8O+c+MmUgGrNiBcXnuWxuFJHe6a5Hz7qwhwe5OgaSYI0IJvkLqWX1ASG+cJOkEiA== anymatch@^3.0.3: version "3.1.3" - resolved "https://registry.yarnpkg.com/anymatch/-/anymatch-3.1.3.tgz#790c58b19ba1720a84205b57c618d5ad8524973e" + resolved "https://registry.npmjs.org/anymatch/-/anymatch-3.1.3.tgz" integrity sha512-KMReFUr0B4t+D+OBkjR3KYqvocp2XaSzO55UcB6mgQMd3KbcE+mWTyvVV7D/zsdEbNnV6acZUutkiHQXvTr1Rw== dependencies: normalize-path "^3.0.0" @@ -2190,24 +2183,24 @@ anymatch@^3.0.3: argparse@^1.0.7: version "1.0.10" - resolved "https://registry.yarnpkg.com/argparse/-/argparse-1.0.10.tgz#bcd6791ea5ae09725e17e5ad988134cd40b3d911" + resolved "https://registry.npmjs.org/argparse/-/argparse-1.0.10.tgz" integrity sha512-o5Roy6tNG4SL/FOkCAN6RzjiakZS25RLYFrcMttJqbdd8BWrnA+fGz57iN5Pb06pvBGvl5gQ0B48dJlslXvoTg== dependencies: sprintf-js "~1.0.2" async@^3.2.3: version "3.2.6" - resolved "https://registry.yarnpkg.com/async/-/async-3.2.6.tgz#1b0728e14929d51b85b449b7f06e27c1145e38ce" + resolved "https://registry.npmjs.org/async/-/async-3.2.6.tgz" integrity sha512-htCUDlxyyCLMgaM3xXg0C0LW2xqfuQ6p05pCEIsXuyQ+a1koYKTuBMzRNwmybfLgvJDMd0r1LTn4+E0Ti6C2AA== asynckit@^0.4.0: version "0.4.0" - resolved "https://registry.yarnpkg.com/asynckit/-/asynckit-0.4.0.tgz#c79ed97f7f34cb8f2ba1bc9790bcc366474b4b79" + resolved "https://registry.npmjs.org/asynckit/-/asynckit-0.4.0.tgz" integrity sha512-Oei9OH4tRh0YqU3GxhX79dM/mwVgvbZJaSNaRk+bshkj0S5cfHcgYakreBjrHwatXKbz+IoIdYLxrKim2MjW0Q== babel-jest@^29.7.0: version "29.7.0" - resolved "https://registry.yarnpkg.com/babel-jest/-/babel-jest-29.7.0.tgz#f4369919225b684c56085998ac63dbd05be020d5" + resolved "https://registry.npmjs.org/babel-jest/-/babel-jest-29.7.0.tgz" integrity sha512-BrvGY3xZSwEcCzKvKsCi2GgHqDqsYkOP4/by5xCgIwGXQxIEh+8ew3gmrE1y7XRR6LHZIj6yLYnUi/mm2KXKBg== dependencies: "@jest/transform" "^29.7.0" @@ -2220,7 +2213,7 @@ babel-jest@^29.7.0: babel-plugin-istanbul@^6.1.1: version "6.1.1" - resolved "https://registry.yarnpkg.com/babel-plugin-istanbul/-/babel-plugin-istanbul-6.1.1.tgz#fa88ec59232fd9b4e36dbbc540a8ec9a9b47da73" + resolved "https://registry.npmjs.org/babel-plugin-istanbul/-/babel-plugin-istanbul-6.1.1.tgz" integrity sha512-Y1IQok9821cC9onCx5otgFfRm7Lm+I+wwxOx738M/WLPZ9Q42m4IG5W0FNX8WLL2gYMZo3JkuXIH2DOpWM+qwA== dependencies: "@babel/helper-plugin-utils" "^7.0.0" @@ -2231,7 +2224,7 @@ babel-plugin-istanbul@^6.1.1: babel-plugin-jest-hoist@^29.6.3: version "29.6.3" - resolved "https://registry.yarnpkg.com/babel-plugin-jest-hoist/-/babel-plugin-jest-hoist-29.6.3.tgz#aadbe943464182a8922c3c927c3067ff40d24626" + resolved "https://registry.npmjs.org/babel-plugin-jest-hoist/-/babel-plugin-jest-hoist-29.6.3.tgz" integrity sha512-ESAc/RJvGTFEzRwOTT4+lNDk/GNHMkKbNzsvT0qKRfDyyYTskxB5rnU2njIDYVxXCBHHEI1c0YwHob3WaYujOg== dependencies: "@babel/template" "^7.3.3" @@ -2241,7 +2234,7 @@ babel-plugin-jest-hoist@^29.6.3: babel-preset-current-node-syntax@^1.0.0: version "1.1.0" - resolved "https://registry.yarnpkg.com/babel-preset-current-node-syntax/-/babel-preset-current-node-syntax-1.1.0.tgz#9a929eafece419612ef4ae4f60b1862ebad8ef30" + resolved "https://registry.npmjs.org/babel-preset-current-node-syntax/-/babel-preset-current-node-syntax-1.1.0.tgz" integrity sha512-ldYss8SbBlWva1bs28q78Ju5Zq1F+8BrqBZZ0VFhLBvhh6lCpC2o3gDJi/5DRLs9FgYZCnmPYIVFU4lRXCkyUw== dependencies: "@babel/plugin-syntax-async-generators" "^7.8.4" @@ -2262,7 +2255,7 @@ babel-preset-current-node-syntax@^1.0.0: babel-preset-jest@^29.6.3: version "29.6.3" - resolved "https://registry.yarnpkg.com/babel-preset-jest/-/babel-preset-jest-29.6.3.tgz#fa05fa510e7d493896d7b0dd2033601c840f171c" + resolved "https://registry.npmjs.org/babel-preset-jest/-/babel-preset-jest-29.6.3.tgz" integrity sha512-0B3bhxR6snWXJZtR/RliHTDPRgn1sNHOR0yVtq/IiQFyuOVjFS+wuio/R4gSNkyYmKmJB4wGZv2NZanmKmTnNA== dependencies: babel-plugin-jest-hoist "^29.6.3" @@ -2270,22 +2263,22 @@ babel-preset-jest@^29.6.3: balanced-match@^1.0.0: version "1.0.2" - resolved "https://registry.yarnpkg.com/balanced-match/-/balanced-match-1.0.2.tgz#e83e3a7e3f300b34cb9d87f615fa0cbf357690ee" + resolved "https://registry.npmjs.org/balanced-match/-/balanced-match-1.0.2.tgz" integrity sha512-3oSeUO0TMV67hN1AmbXsK4yaqU7tjiHlbxRDZOpH0KW9+CeX4bRAaX0Anxt0tx2MrpRpWwQaPwIlISEJhYU5Pw== base64-js@^1.3.1, base64-js@^1.5.1: version "1.5.1" - resolved "https://registry.yarnpkg.com/base64-js/-/base64-js-1.5.1.tgz#1b1b440160a5bf7ad40b650f095963481903930a" + resolved "https://registry.npmjs.org/base64-js/-/base64-js-1.5.1.tgz" integrity sha512-AKpaYlHn8t4SVbOHCy+b5+KKgvR4vrsD8vbvrbiQJps7fKDTkjkDry6ji0rUJjC0kzbNePLwzxq8iypo41qeWA== bowser@^2.11.0: version "2.11.0" - resolved "https://registry.yarnpkg.com/bowser/-/bowser-2.11.0.tgz#5ca3c35757a7aa5771500c70a73a9f91ef420a8f" + resolved "https://registry.npmjs.org/bowser/-/bowser-2.11.0.tgz" integrity sha512-AlcaJBi/pqqJBIQ8U9Mcpc9i8Aqxn88Skv5d+xBX006BY5u8N3mGLHa5Lgppa7L/HfwgwLgZ6NYs+Ag6uUmJRA== brace-expansion@^1.1.7: version "1.1.11" - resolved "https://registry.yarnpkg.com/brace-expansion/-/brace-expansion-1.1.11.tgz#3c7fcbf529d87226f3d2f52b966ff5271eb441dd" + resolved "https://registry.npmjs.org/brace-expansion/-/brace-expansion-1.1.11.tgz" integrity sha512-iCuPHDFgrHX7H2vEI/5xpz07zSHB00TpugqhmYtVmMO6518mCuRMoOYFldEBl0g187ufozdaHgWKcYFb61qGiA== dependencies: balanced-match "^1.0.0" @@ -2293,21 +2286,21 @@ brace-expansion@^1.1.7: brace-expansion@^2.0.1: version "2.0.1" - resolved "https://registry.yarnpkg.com/brace-expansion/-/brace-expansion-2.0.1.tgz#1edc459e0f0c548486ecf9fc99f2221364b9a0ae" + resolved "https://registry.npmjs.org/brace-expansion/-/brace-expansion-2.0.1.tgz" integrity sha512-XnAIvQ8eM+kC6aULx6wuQiwVsnzsi9d3WxzV3FpWTGA19F621kwdbsAcFKXgKUHZWsy+mY6iL1sHTxWEFCytDA== dependencies: balanced-match "^1.0.0" braces@^3.0.3: version "3.0.3" - resolved "https://registry.yarnpkg.com/braces/-/braces-3.0.3.tgz#490332f40919452272d55a8480adc0c441358789" + resolved "https://registry.npmjs.org/braces/-/braces-3.0.3.tgz" integrity sha512-yQbXgO/OSZVD2IsiLlro+7Hf6Q18EJrKSEsdoMzKePKXct3gvD8oLcOQdIzGupr5Fj+EDe8gO/lxc1BzfMpxvA== dependencies: fill-range "^7.1.1" browserslist@^4.24.0: version "4.24.5" - resolved "https://registry.yarnpkg.com/browserslist/-/browserslist-4.24.5.tgz#aa0f5b8560fe81fde84c6dcb38f759bafba0e11b" + resolved "https://registry.npmjs.org/browserslist/-/browserslist-4.24.5.tgz" integrity sha512-FDToo4Wo82hIdgc1CQ+NQD0hEhmpPjrZ3hiUgwgOG6IuTdlpr8jdjyG24P6cNP1yJpTLzS5OcGgSw0xmDU1/Tw== dependencies: caniuse-lite "^1.0.30001716" @@ -2317,26 +2310,26 @@ browserslist@^4.24.0: bs-logger@^0.2.6: version "0.2.6" - resolved "https://registry.yarnpkg.com/bs-logger/-/bs-logger-0.2.6.tgz#eb7d365307a72cf974cc6cda76b68354ad336bd8" + resolved "https://registry.npmjs.org/bs-logger/-/bs-logger-0.2.6.tgz" integrity sha512-pd8DCoxmbgc7hyPKOvxtqNcjYoOsABPQdcCUjGp3d42VR2CX1ORhk2A87oqqu5R1kk+76nsxZupkmyd+MVtCog== dependencies: fast-json-stable-stringify "2.x" bser@2.1.1: version "2.1.1" - resolved "https://registry.yarnpkg.com/bser/-/bser-2.1.1.tgz#e6787da20ece9d07998533cfd9de6f5c38f4bc05" + resolved "https://registry.npmjs.org/bser/-/bser-2.1.1.tgz" integrity sha512-gQxTNE/GAfIIrmHLUE3oJyp5FO6HRBfhjnw4/wMmA63ZGDJnWBmgY/lyQBpnDUkGmAhbSe39tx2d/iTOAfglwQ== dependencies: node-int64 "^0.4.0" buffer-from@^1.0.0: version "1.1.2" - resolved "https://registry.yarnpkg.com/buffer-from/-/buffer-from-1.1.2.tgz#2b146a6fd72e80b4f55d255f35ed59a3a9a41bd5" + resolved "https://registry.npmjs.org/buffer-from/-/buffer-from-1.1.2.tgz" integrity sha512-E+XQCRwSbaaiChtv6k6Dwgc+bx+Bs6vuKJHHl5kox/BaKbhiXzqQOwK4cO22yElGp2OCmjwVhT3HmxgyPGnJfQ== buffer@^6.0.3: version "6.0.3" - resolved "https://registry.yarnpkg.com/buffer/-/buffer-6.0.3.tgz#2ace578459cc8fbe2a70aaa8f52ee63b6a74c6c6" + resolved "https://registry.npmjs.org/buffer/-/buffer-6.0.3.tgz" integrity sha512-FTiCpNxtwiZZHEZbcbTIcZjERVICn9yq/pDFkTl95/AxzD1naBctN7YO68riM/gLSDY7sdrMby8hofADYuuqOA== dependencies: base64-js "^1.3.1" @@ -2344,7 +2337,7 @@ buffer@^6.0.3: call-bind-apply-helpers@^1.0.1, call-bind-apply-helpers@^1.0.2: version "1.0.2" - resolved "https://registry.yarnpkg.com/call-bind-apply-helpers/-/call-bind-apply-helpers-1.0.2.tgz#4b5428c222be985d79c3d82657479dbe0b59b2d6" + resolved "https://registry.npmjs.org/call-bind-apply-helpers/-/call-bind-apply-helpers-1.0.2.tgz" integrity sha512-Sp1ablJ0ivDkSzjcaJdxEunN5/XvksFJ2sMBFfq6x0ryhQV/2b/KwFe21cMpmHtPOSij8K99/wSfoEuTObmuMQ== dependencies: es-errors "^1.3.0" @@ -2352,7 +2345,7 @@ call-bind-apply-helpers@^1.0.1, call-bind-apply-helpers@^1.0.2: call-bound@^1.0.2: version "1.0.4" - resolved "https://registry.yarnpkg.com/call-bound/-/call-bound-1.0.4.tgz#238de935d2a2a692928c538c7ccfa91067fd062a" + resolved "https://registry.npmjs.org/call-bound/-/call-bound-1.0.4.tgz" integrity sha512-+ys997U96po4Kx/ABpBCqhA9EuxJaQWDQg7295H4hBphv3IZg0boBKuwYpt4YXp6MZ5AmZQnU/tyMTlRpaSejg== dependencies: call-bind-apply-helpers "^1.0.2" @@ -2360,62 +2353,67 @@ call-bound@^1.0.2: callsites@^3.0.0: version "3.1.0" - resolved "https://registry.yarnpkg.com/callsites/-/callsites-3.1.0.tgz#b3630abd8943432f54b3f0519238e33cd7df2f73" + resolved "https://registry.npmjs.org/callsites/-/callsites-3.1.0.tgz" integrity sha512-P8BjAsXvZS+VIDUI11hHCQEv74YT67YUi5JJFNWIqL235sBmjX4+qx9Muvls5ivyNENctx46xQLQ3aTuE7ssaQ== camelcase@^5.3.1: version "5.3.1" - resolved "https://registry.yarnpkg.com/camelcase/-/camelcase-5.3.1.tgz#e3c9b31569e106811df242f715725a1f4c494320" + resolved "https://registry.npmjs.org/camelcase/-/camelcase-5.3.1.tgz" integrity sha512-L28STB170nwWS63UjtlEOE3dldQApaJXZkOI1uMFfzf3rRuPegHaHesyee+YxQ+W6SvRDQV6UrdOdRiR153wJg== camelcase@^6.2.0: version "6.3.0" - resolved "https://registry.yarnpkg.com/camelcase/-/camelcase-6.3.0.tgz#5685b95eb209ac9c0c177467778c9c84df58ba9a" + resolved "https://registry.npmjs.org/camelcase/-/camelcase-6.3.0.tgz" integrity sha512-Gmy6FhYlCY7uOElZUSbxo2UCDH8owEk996gkbrpsgGtrJLM3J7jGxl9Ic7Qwwj4ivOE5AWZWRMecDdF7hqGjFA== caniuse-lite@^1.0.30001716: version "1.0.30001717" - resolved "https://registry.yarnpkg.com/caniuse-lite/-/caniuse-lite-1.0.30001717.tgz#5d9fec5ce09796a1893013825510678928aca129" + resolved "https://registry.npmjs.org/caniuse-lite/-/caniuse-lite-1.0.30001717.tgz" integrity sha512-auPpttCq6BDEG8ZAuHJIplGw6GODhjw+/11e7IjpnYCxZcW/ONgPs0KVBJ0d1bY3e2+7PRe5RCLyP+PfwVgkYw== chalk@^4.0.0, chalk@^4.0.2, chalk@^4.1.0: version "4.1.2" - resolved "https://registry.yarnpkg.com/chalk/-/chalk-4.1.2.tgz#aac4e2b7734a740867aeb16bf02aad556a1e7a01" + resolved "https://registry.npmjs.org/chalk/-/chalk-4.1.2.tgz" integrity sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA== dependencies: ansi-styles "^4.1.0" supports-color "^7.1.0" +chalk@^5.4.1: + version "5.4.1" + resolved "https://registry.yarnpkg.com/chalk/-/chalk-5.4.1.tgz#1b48bf0963ec158dce2aacf69c093ae2dd2092d8" + integrity sha512-zgVZuo2WcZgfUEmsn6eO3kINexW8RAE4maiQ8QNs8CtpPCSyMiYsULR3HQYkm3w8FIA3SberyMJMSldGsW+U3w== + char-regex@^1.0.2: version "1.0.2" - resolved "https://registry.yarnpkg.com/char-regex/-/char-regex-1.0.2.tgz#d744358226217f981ed58f479b1d6bcc29545dcf" + resolved "https://registry.npmjs.org/char-regex/-/char-regex-1.0.2.tgz" integrity sha512-kWWXztvZ5SBQV+eRgKFeh8q5sLuZY2+8WUIzlxWVTg+oGwY14qylx1KbKzHd8P6ZYkAg0xyIDU9JMHhyJMZ1jw== chrome-trace-event@^1.0.2: version "1.0.4" - resolved "https://registry.yarnpkg.com/chrome-trace-event/-/chrome-trace-event-1.0.4.tgz#05bffd7ff928465093314708c93bdfa9bd1f0f5b" + resolved "https://registry.npmjs.org/chrome-trace-event/-/chrome-trace-event-1.0.4.tgz" integrity sha512-rNjApaLzuwaOTjCiT8lSDdGN1APCiqkChLMJxJPWLunPAt5fy8xgU9/jNOchV84wfIxrA0lRQB7oCT8jrn/wrQ== ci-info@^3.2.0: version "3.9.0" - resolved "https://registry.yarnpkg.com/ci-info/-/ci-info-3.9.0.tgz#4279a62028a7b1f262f3473fc9605f5e218c59b4" + resolved "https://registry.npmjs.org/ci-info/-/ci-info-3.9.0.tgz" integrity sha512-NIxF55hv4nSqQswkAeiOi1r83xy8JldOFDTWiug55KBu9Jnblncd2U6ViHmYgHf01TPZS77NJBhBMKdWj9HQMQ== cjs-module-lexer@^1.0.0, cjs-module-lexer@^1.2.2: version "1.4.3" - resolved "https://registry.yarnpkg.com/cjs-module-lexer/-/cjs-module-lexer-1.4.3.tgz#0f79731eb8cfe1ec72acd4066efac9d61991b00d" + resolved "https://registry.npmjs.org/cjs-module-lexer/-/cjs-module-lexer-1.4.3.tgz" integrity sha512-9z8TZaGM1pfswYeXrUpzPrkx8UnWYdhJclsiYMm6x/w5+nN+8Tf/LnAgfLGQCm59qAOxU8WwHEq2vNwF6i4j+Q== cli-progress@^3.12.0: version "3.12.0" - resolved "https://registry.yarnpkg.com/cli-progress/-/cli-progress-3.12.0.tgz#807ee14b66bcc086258e444ad0f19e7d42577942" + resolved "https://registry.npmjs.org/cli-progress/-/cli-progress-3.12.0.tgz" integrity sha512-tRkV3HJ1ASwm19THiiLIXLO7Im7wlTuKnvkYaTkyoAPefqjNg7W7DHKUlGRxy9vxDvbyCYQkQozvptuMkGCg8A== dependencies: string-width "^4.2.3" cliui@^8.0.1: version "8.0.1" - resolved "https://registry.yarnpkg.com/cliui/-/cliui-8.0.1.tgz#0c04b075db02cbfe60dc8e6cf2f5486b1a3608aa" + resolved "https://registry.npmjs.org/cliui/-/cliui-8.0.1.tgz" integrity sha512-BSeNnyus75C4//NQ9gQt1/csTXyo/8Sb+afLAkzAptFuMsod9HFokGNudZpi/oQV73hnVK+sR+5PVRMd+Dr7YQ== dependencies: string-width "^4.2.0" @@ -2424,12 +2422,12 @@ cliui@^8.0.1: co@^4.6.0: version "4.6.0" - resolved "https://registry.yarnpkg.com/co/-/co-4.6.0.tgz#6ea6bdf3d853ae54ccb8e47bfa0bf3f9031fb184" + resolved "https://registry.npmjs.org/co/-/co-4.6.0.tgz" integrity sha512-QVb0dM5HvG+uaxitm8wONl7jltx8dqhfU33DcqtOZcLSVIKSDDLDi7+0LbAKiyI8hD9u42m2YxXSkMGWThaecQ== cohere-ai@^7.15.0: version "7.17.1" - resolved "https://registry.yarnpkg.com/cohere-ai/-/cohere-ai-7.17.1.tgz#1ac5b39394c812cb33d3f8b7d910ad401612cfcd" + resolved "https://registry.npmjs.org/cohere-ai/-/cohere-ai-7.17.1.tgz" integrity sha512-GI/uWVYYGIN3gdjJRlbjEaLJNJVXsUJyOlPqwBWgAmK18kP4CJoErxKwU0aLe3tHHOBcC2RqXe6PmGO0dz7dpQ== dependencies: "@aws-sdk/client-sagemaker" "^3.583.0" @@ -2448,46 +2446,51 @@ cohere-ai@^7.15.0: collect-v8-coverage@^1.0.0: version "1.0.2" - resolved "https://registry.yarnpkg.com/collect-v8-coverage/-/collect-v8-coverage-1.0.2.tgz#c0b29bcd33bcd0779a1344c2136051e6afd3d9e9" + resolved "https://registry.npmjs.org/collect-v8-coverage/-/collect-v8-coverage-1.0.2.tgz" integrity sha512-lHl4d5/ONEbLlJvaJNtsF/Lz+WvB07u2ycqTYbdrq7UypDXailES4valYb2eWiJFxZlVmpGekfqoxQhzyFdT4Q== color-convert@^2.0.1: version "2.0.1" - resolved "https://registry.yarnpkg.com/color-convert/-/color-convert-2.0.1.tgz#72d3a68d598c9bdb3af2ad1e84f21d896abd4de3" + resolved "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz" integrity sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ== dependencies: color-name "~1.1.4" color-name@~1.1.4: version "1.1.4" - resolved "https://registry.yarnpkg.com/color-name/-/color-name-1.1.4.tgz#c2a09a87acbde69543de6f63fa3995c826c536a2" + resolved "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz" integrity sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA== combined-stream@^1.0.8: version "1.0.8" - resolved "https://registry.yarnpkg.com/combined-stream/-/combined-stream-1.0.8.tgz#c3d45a8b34fd730631a110a8a2520682b31d5a7f" + resolved "https://registry.npmjs.org/combined-stream/-/combined-stream-1.0.8.tgz" integrity sha512-FQN4MRfuJeHf7cBbBMJFXhKSDq+2kAArBlmRBvcvFE5BB1HZKXtSFASDhdlz9zOYwxh8lDdnvmMOe/+5cdoEdg== dependencies: delayed-stream "~1.0.0" +commander@^13.1.0: + version "13.1.0" + resolved "https://registry.yarnpkg.com/commander/-/commander-13.1.0.tgz#776167db68c78f38dcce1f9b8d7b8b9a488abf46" + integrity sha512-/rFeCpNJQbhSZjGVwO9RFV3xPqbnERS8MmIQzCtD/zl6gpJuV/bMLuN92oG3F7d8oDEHHRrujSXNUr8fpjntKw== + commander@^2.20.0: version "2.20.3" - resolved "https://registry.yarnpkg.com/commander/-/commander-2.20.3.tgz#fd485e84c03eb4881c20722ba48035e8531aeb33" + resolved "https://registry.npmjs.org/commander/-/commander-2.20.3.tgz" integrity sha512-GpVkmM8vF2vQUkj2LvZmD35JxeJOLCwJ9cUkugyk2nuhbv3+mJvpLYYt+0+USMxE+oj+ey/lJEnhZw75x/OMcQ== concat-map@0.0.1: version "0.0.1" - resolved "https://registry.yarnpkg.com/concat-map/-/concat-map-0.0.1.tgz#d8a96bd77fd68df7793a73036a3ba0d5405d477b" + resolved "https://registry.npmjs.org/concat-map/-/concat-map-0.0.1.tgz" integrity sha512-/Srv4dswyQNBfohGpz9o6Yb3Gz3SrUDqBH5rTuhGR7ahtlbYKnVxw2bCFMRljaA7EXHaXZ8wsHdodFvbkhKmqg== convert-source-map@^2.0.0: version "2.0.0" - resolved "https://registry.yarnpkg.com/convert-source-map/-/convert-source-map-2.0.0.tgz#4b560f649fc4e918dd0ab75cf4961e8bc882d82a" + resolved "https://registry.npmjs.org/convert-source-map/-/convert-source-map-2.0.0.tgz" integrity sha512-Kvp459HrV2FEJ1CAsi1Ku+MY3kasH19TFykTz2xWmMeq6bk2NU3XXvfJ+Q61m0xktWwt+1HSYf3JZsTms3aRJg== convict@^6.2.4: version "6.2.4" - resolved "https://registry.yarnpkg.com/convict/-/convict-6.2.4.tgz#be290672bf6397eec808d3b11fc5f71785b02a4b" + resolved "https://registry.npmjs.org/convict/-/convict-6.2.4.tgz" integrity sha512-qN60BAwdMVdofckX7AlohVJ2x9UvjTNoKVXCL2LxFk1l7757EJqf1nySdMkPQer0bt8kQ5lQiyZ9/2NvrFBuwQ== dependencies: lodash.clonedeep "^4.5.0" @@ -2495,7 +2498,7 @@ convict@^6.2.4: create-jest@^29.7.0: version "29.7.0" - resolved "https://registry.yarnpkg.com/create-jest/-/create-jest-29.7.0.tgz#a355c5b3cb1e1af02ba177fe7afd7feee49a5320" + resolved "https://registry.npmjs.org/create-jest/-/create-jest-29.7.0.tgz" integrity sha512-Adz2bdH0Vq3F53KEMJOoftQFutWCukm6J24wbPWRO4k1kMY7gS7ds/uoJkNuV8wDCtWWnuwGcJwpWcih+zEW1Q== dependencies: "@jest/types" "^29.6.3" @@ -2508,7 +2511,7 @@ create-jest@^29.7.0: cross-spawn@^7.0.3: version "7.0.6" - resolved "https://registry.yarnpkg.com/cross-spawn/-/cross-spawn-7.0.6.tgz#8a58fe78f00dcd70c370451759dfbfaf03e8ee9f" + resolved "https://registry.npmjs.org/cross-spawn/-/cross-spawn-7.0.6.tgz" integrity sha512-uV2QOWP2nWzsy2aMp8aRibhi9dlzF5Hgh5SHaB9OiTGEyDTiJJyx0uy51QXdyWbtAHNua4XJzUKca3OzKUd3vA== dependencies: path-key "^3.1.0" @@ -2517,24 +2520,24 @@ cross-spawn@^7.0.3: cssom@^0.5.0: version "0.5.0" - resolved "https://registry.yarnpkg.com/cssom/-/cssom-0.5.0.tgz#d254fa92cd8b6fbd83811b9fbaed34663cc17c36" + resolved "https://registry.npmjs.org/cssom/-/cssom-0.5.0.tgz" integrity sha512-iKuQcq+NdHqlAcwUY0o/HL69XQrUaQdMjmStJ8JFmUaiiQErlhrmuigkg/CU4E2J0IyUKUrMAgl36TvN67MqTw== cssom@~0.3.6: version "0.3.8" - resolved "https://registry.yarnpkg.com/cssom/-/cssom-0.3.8.tgz#9f1276f5b2b463f2114d3f2c75250af8c1a36f4a" + resolved "https://registry.npmjs.org/cssom/-/cssom-0.3.8.tgz" integrity sha512-b0tGHbfegbhPJpxpiBPU2sCkigAqtM9O121le6bbOlgyV+NyGyCmVfJ6QW9eRjz8CpNfWEOYBIMIGRYkLwsIYg== cssstyle@^2.3.0: version "2.3.0" - resolved "https://registry.yarnpkg.com/cssstyle/-/cssstyle-2.3.0.tgz#ff665a0ddbdc31864b09647f34163443d90b0852" + resolved "https://registry.npmjs.org/cssstyle/-/cssstyle-2.3.0.tgz" integrity sha512-AZL67abkUzIuvcHqk7c09cezpGNcxUxU4Ioi/05xHk4DQeTkWmGYftIE6ctU6AEt+Gn4n1lDStOtj7FKycP71A== dependencies: cssom "~0.3.6" data-urls@^3.0.2: version "3.0.2" - resolved "https://registry.yarnpkg.com/data-urls/-/data-urls-3.0.2.tgz#9cf24a477ae22bcef5cd5f6f0bfbc1d2d3be9143" + resolved "https://registry.npmjs.org/data-urls/-/data-urls-3.0.2.tgz" integrity sha512-Jy/tj3ldjZJo63sVAvg6LHt2mHvl4V6AgRAmNDtLdm7faqtsx+aJG42rsyCo9JCoRVKwPFzKlIPx3DIibwSIaQ== dependencies: abab "^2.0.6" @@ -2543,56 +2546,56 @@ data-urls@^3.0.2: debug@4, debug@^4.1.0, debug@^4.1.1, debug@^4.3.1, debug@^4.3.5: version "4.4.0" - resolved "https://registry.yarnpkg.com/debug/-/debug-4.4.0.tgz#2b3f2aea2ffeb776477460267377dc8710faba8a" + resolved "https://registry.npmjs.org/debug/-/debug-4.4.0.tgz" integrity sha512-6WTZ/IxCY/T6BALoZHaE4ctp9xm+Z5kY/pzYaCHRFeyVhojxlrm+46y68HA6hr0TcwEssoxNiDEUJQjfPZ/RYA== dependencies: ms "^2.1.3" decimal.js@^10.4.2: version "10.5.0" - resolved "https://registry.yarnpkg.com/decimal.js/-/decimal.js-10.5.0.tgz#0f371c7cf6c4898ce0afb09836db73cd82010f22" + resolved "https://registry.npmjs.org/decimal.js/-/decimal.js-10.5.0.tgz" integrity sha512-8vDa8Qxvr/+d94hSh5P3IJwI5t8/c0KsMp+g8bNw9cY2icONa5aPfvKeieW1WlG0WQYwwhJ7mjui2xtiePQSXw== dedent@^1.0.0: version "1.6.0" - resolved "https://registry.yarnpkg.com/dedent/-/dedent-1.6.0.tgz#79d52d6389b1ffa67d2bcef59ba51847a9d503b2" + resolved "https://registry.npmjs.org/dedent/-/dedent-1.6.0.tgz" integrity sha512-F1Z+5UCFpmQUzJa11agbyPVMbpgT/qA3/SKyJ1jyBgm7dUcUEa8v9JwDkerSQXfakBwFljIxhOJqGkjUwZ9FSA== deepmerge@^4.2.2: version "4.3.1" - resolved "https://registry.yarnpkg.com/deepmerge/-/deepmerge-4.3.1.tgz#44b5f2147cd3b00d4b56137685966f26fd25dd4a" + resolved "https://registry.npmjs.org/deepmerge/-/deepmerge-4.3.1.tgz" integrity sha512-3sUqbMEc77XqpdNO7FRyRog+eW3ph+GYCbj+rK+uYyRMuwsVy0rMiVtPn+QJlKFvWP/1PYpapqYn0Me2knFn+A== delayed-stream@~1.0.0: version "1.0.0" - resolved "https://registry.yarnpkg.com/delayed-stream/-/delayed-stream-1.0.0.tgz#df3ae199acadfb7d440aaae0b29e2272b24ec619" + resolved "https://registry.npmjs.org/delayed-stream/-/delayed-stream-1.0.0.tgz" integrity sha512-ZySD7Nf91aLB0RxL4KGrKHBXl7Eds1DAmEdcoVawXnLD7SDhpNgtuII2aAkg7a7QS41jxPSZ17p4VdGnMHk3MQ== detect-newline@^3.0.0: version "3.1.0" - resolved "https://registry.yarnpkg.com/detect-newline/-/detect-newline-3.1.0.tgz#576f5dfc63ae1a192ff192d8ad3af6308991b651" + resolved "https://registry.npmjs.org/detect-newline/-/detect-newline-3.1.0.tgz" integrity sha512-TLz+x/vEXm/Y7P7wn1EJFNLxYpUD4TgMosxY6fAVJUnJMbupHBOncxyWUG9OpTaH9EBD7uFI5LfEgmMOc54DsA== diff-sequences@^29.6.3: version "29.6.3" - resolved "https://registry.yarnpkg.com/diff-sequences/-/diff-sequences-29.6.3.tgz#4deaf894d11407c51efc8418012f9e70b84ea921" + resolved "https://registry.npmjs.org/diff-sequences/-/diff-sequences-29.6.3.tgz" integrity sha512-EjePK1srD3P08o2j4f0ExnylqRs5B9tJjcp9t1krH2qRi8CCdsYfwe9JgSLurFBWwq4uOlipzfk5fHNvwFKr8Q== domexception@^4.0.0: version "4.0.0" - resolved "https://registry.yarnpkg.com/domexception/-/domexception-4.0.0.tgz#4ad1be56ccadc86fc76d033353999a8037d03673" + resolved "https://registry.npmjs.org/domexception/-/domexception-4.0.0.tgz" integrity sha512-A2is4PLG+eeSfoTMA95/s4pvAoSo2mKtiM5jlHkAVewmiO8ISFTFKZjH7UAM1Atli/OT/7JHOrJRJiMKUZKYBw== dependencies: webidl-conversions "^7.0.0" -dotenv@^16.4.6: +dotenv@^16.5.0: version "16.5.0" resolved "https://registry.yarnpkg.com/dotenv/-/dotenv-16.5.0.tgz#092b49f25f808f020050051d1ff258e404c78692" integrity sha512-m/C+AwOAr9/W1UOIZUo232ejMNnJAJtYQjUbHoNTBNTJSvqzzDh7vnrei3o3r3m9blf6ZoDkvcw0VmozNRFJxg== dunder-proto@^1.0.1: version "1.0.1" - resolved "https://registry.yarnpkg.com/dunder-proto/-/dunder-proto-1.0.1.tgz#d7ae667e1dc83482f8b70fd0f6eefc50da30f58a" + resolved "https://registry.npmjs.org/dunder-proto/-/dunder-proto-1.0.1.tgz" integrity sha512-KIN/nDJBQRcXw0MLVhZE9iQHmG68qAVIBg9CqmUYjmQIhgij9U5MFvrqkUL5FbtyyzZuOeOt0zdeRe4UY7ct+A== dependencies: call-bind-apply-helpers "^1.0.1" @@ -2601,29 +2604,29 @@ dunder-proto@^1.0.1: ejs@^3.1.10: version "3.1.10" - resolved "https://registry.yarnpkg.com/ejs/-/ejs-3.1.10.tgz#69ab8358b14e896f80cc39e62087b88500c3ac3b" + resolved "https://registry.npmjs.org/ejs/-/ejs-3.1.10.tgz" integrity sha512-UeJmFfOrAQS8OJWPZ4qtgHyWExa088/MtK5UEyoJGFH67cDEXkZSviOiKRCZ4Xij0zxI3JECgYs3oKx+AizQBA== dependencies: jake "^10.8.5" electron-to-chromium@^1.5.149: version "1.5.150" - resolved "https://registry.yarnpkg.com/electron-to-chromium/-/electron-to-chromium-1.5.150.tgz#3120bf34453a7a82cb4d9335df20680b2bb40649" + resolved "https://registry.npmjs.org/electron-to-chromium/-/electron-to-chromium-1.5.150.tgz" integrity sha512-rOOkP2ZUMx1yL4fCxXQKDHQ8ZXwisb2OycOQVKHgvB3ZI4CvehOd4y2tfnnLDieJ3Zs1RL1Dlp3cMkyIn7nnXA== emittery@^0.13.1: version "0.13.1" - resolved "https://registry.yarnpkg.com/emittery/-/emittery-0.13.1.tgz#c04b8c3457490e0847ae51fced3af52d338e3dad" + resolved "https://registry.npmjs.org/emittery/-/emittery-0.13.1.tgz" integrity sha512-DeWwawk6r5yR9jFgnDKYt4sLS0LmHJJi3ZOnb5/JdbYwj3nW+FxQnHIjhBKz8YLC7oRNPVM9NQ47I3CVx34eqQ== emoji-regex@^8.0.0: version "8.0.0" - resolved "https://registry.yarnpkg.com/emoji-regex/-/emoji-regex-8.0.0.tgz#e818fd69ce5ccfcb404594f842963bf53164cc37" + resolved "https://registry.npmjs.org/emoji-regex/-/emoji-regex-8.0.0.tgz" integrity sha512-MSjYzcWNOA0ewAHpz0MxpYFvwg6yjy1NG3xteoqz644VCo/RPgnr1/GGt+ic3iJTzQ8Eu3TdM14SawnVUmGE6A== enhanced-resolve@^5.0.0, enhanced-resolve@^5.17.1: version "5.18.1" - resolved "https://registry.yarnpkg.com/enhanced-resolve/-/enhanced-resolve-5.18.1.tgz#728ab082f8b7b6836de51f1637aab5d3b9568faf" + resolved "https://registry.npmjs.org/enhanced-resolve/-/enhanced-resolve-5.18.1.tgz" integrity sha512-ZSW3ma5GkcQBIpwZTSRAI8N71Uuwgs93IezB7mf7R60tC8ZbJideoDNKjHn2O9KIlx6rkGTTEk1xUCK2E1Y2Yg== dependencies: graceful-fs "^4.2.4" @@ -2631,41 +2634,41 @@ enhanced-resolve@^5.0.0, enhanced-resolve@^5.17.1: entities@^6.0.0: version "6.0.0" - resolved "https://registry.yarnpkg.com/entities/-/entities-6.0.0.tgz#09c9e29cb79b0a6459a9b9db9efb418ac5bb8e51" + resolved "https://registry.npmjs.org/entities/-/entities-6.0.0.tgz" integrity sha512-aKstq2TDOndCn4diEyp9Uq/Flu2i1GlLkc6XIDQSDMuaFE3OPW5OphLCyQ5SpSJZTb4reN+kTcYru5yIfXoRPw== error-ex@^1.3.1: version "1.3.2" - resolved "https://registry.yarnpkg.com/error-ex/-/error-ex-1.3.2.tgz#b4ac40648107fdcdcfae242f428bea8a14d4f1bf" + resolved "https://registry.npmjs.org/error-ex/-/error-ex-1.3.2.tgz" integrity sha512-7dFHNmqeFSEt2ZBsCriorKnn3Z2pj+fd9kmI6QoWw4//DL+icEBfc0U7qJCisqrTsKTjw4fNFy2pW9OqStD84g== dependencies: is-arrayish "^0.2.1" es-define-property@^1.0.1: version "1.0.1" - resolved "https://registry.yarnpkg.com/es-define-property/-/es-define-property-1.0.1.tgz#983eb2f9a6724e9303f61addf011c72e09e0b0fa" + resolved "https://registry.npmjs.org/es-define-property/-/es-define-property-1.0.1.tgz" integrity sha512-e3nRfgfUZ4rNGL232gUgX06QNyyez04KdjFrF+LTRoOXmrOgFKDg4BCdsjW8EnT69eqdYGmRpJwiPVYNrCaW3g== es-errors@^1.3.0: version "1.3.0" - resolved "https://registry.yarnpkg.com/es-errors/-/es-errors-1.3.0.tgz#05f75a25dab98e4fb1dcd5e1472c0546d5057c8f" + resolved "https://registry.npmjs.org/es-errors/-/es-errors-1.3.0.tgz" integrity sha512-Zf5H2Kxt2xjTvbJvP2ZWLEICxA6j+hAmMzIlypy4xcBg1vKVnx89Wy0GbS+kf5cwCVFFzdCFh2XSCFNULS6csw== es-module-lexer@^1.2.1: version "1.7.0" - resolved "https://registry.yarnpkg.com/es-module-lexer/-/es-module-lexer-1.7.0.tgz#9159601561880a85f2734560a9099b2c31e5372a" + resolved "https://registry.npmjs.org/es-module-lexer/-/es-module-lexer-1.7.0.tgz" integrity sha512-jEQoCwk8hyb2AZziIOLhDqpm5+2ww5uIE6lkO/6jcOCusfk6LhMHpXXfBLXTZ7Ydyt0j4VoUQv6uGNYbdW+kBA== es-object-atoms@^1.0.0, es-object-atoms@^1.1.1: version "1.1.1" - resolved "https://registry.yarnpkg.com/es-object-atoms/-/es-object-atoms-1.1.1.tgz#1c4f2c4837327597ce69d2ca190a7fdd172338c1" + resolved "https://registry.npmjs.org/es-object-atoms/-/es-object-atoms-1.1.1.tgz" integrity sha512-FGgH2h8zKNim9ljj7dankFPcICIK9Cp5bm+c2gQSYePhpaG5+esrLODihIorn+Pe6FGJzWhXQotPv73jTaldXA== dependencies: es-errors "^1.3.0" es-set-tostringtag@^2.1.0: version "2.1.0" - resolved "https://registry.yarnpkg.com/es-set-tostringtag/-/es-set-tostringtag-2.1.0.tgz#f31dbbe0c183b00a6d26eb6325c810c0fd18bd4d" + resolved "https://registry.npmjs.org/es-set-tostringtag/-/es-set-tostringtag-2.1.0.tgz" integrity sha512-j6vWzfrGVfyXxge+O0x5sh6cvxAog0a/4Rdd2K36zCMV5eJ+/+tOAngRO8cODMNWbVRdVlmGZQL2YS3yR8bIUA== dependencies: es-errors "^1.3.0" @@ -2675,17 +2678,17 @@ es-set-tostringtag@^2.1.0: escalade@^3.1.1, escalade@^3.2.0: version "3.2.0" - resolved "https://registry.yarnpkg.com/escalade/-/escalade-3.2.0.tgz#011a3f69856ba189dffa7dc8fcce99d2a87903e5" + resolved "https://registry.npmjs.org/escalade/-/escalade-3.2.0.tgz" integrity sha512-WUj2qlxaQtO4g6Pq5c29GTcWGDyd8itL8zTlipgECz3JesAiiOKotd8JU6otB3PACgG6xkJUyVhboMS+bje/jA== escape-string-regexp@^2.0.0: version "2.0.0" - resolved "https://registry.yarnpkg.com/escape-string-regexp/-/escape-string-regexp-2.0.0.tgz#a30304e99daa32e23b2fd20f51babd07cffca344" + resolved "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-2.0.0.tgz" integrity sha512-UpzcLCXolUWcNu5HtVMHYdXJjArjsF9C0aNnquZYY4uW/Vu0miy5YoWvbV345HauVvcAUnpRuhMMcqTcGOY2+w== escodegen@^2.0.0: version "2.1.0" - resolved "https://registry.yarnpkg.com/escodegen/-/escodegen-2.1.0.tgz#ba93bbb7a43986d29d6041f99f5262da773e2e17" + resolved "https://registry.npmjs.org/escodegen/-/escodegen-2.1.0.tgz" integrity sha512-2NlIDTwUWJN0mRPQOdtQBzbUHvdGY2P1VXSyU83Q3xKxM7WHX2Ql8dKq782Q9TgQUNOLEzEYu9bzLNj1q88I5w== dependencies: esprima "^4.0.1" @@ -2696,7 +2699,7 @@ escodegen@^2.0.0: eslint-scope@5.1.1: version "5.1.1" - resolved "https://registry.yarnpkg.com/eslint-scope/-/eslint-scope-5.1.1.tgz#e786e59a66cb92b3f6c1fb0d508aab174848f48c" + resolved "https://registry.npmjs.org/eslint-scope/-/eslint-scope-5.1.1.tgz" integrity sha512-2NxwbF/hZ0KpepYN0cNbo+FN6XoK7GaHlQhgx/hIZl6Va0bF45RQOOwhLIy8lQDbuCiadSLCBnH2CFYquit5bw== dependencies: esrecurse "^4.3.0" @@ -2704,44 +2707,44 @@ eslint-scope@5.1.1: esprima@^4.0.0, esprima@^4.0.1: version "4.0.1" - resolved "https://registry.yarnpkg.com/esprima/-/esprima-4.0.1.tgz#13b04cdb3e6c5d19df91ab6987a8695619b0aa71" + resolved "https://registry.npmjs.org/esprima/-/esprima-4.0.1.tgz" integrity sha512-eGuFFw7Upda+g4p+QHvnW0RyTX/SVeJBDM/gCtMARO0cLuT2HcEKnTPvhjV6aGeqrCB/sbNop0Kszm0jsaWU4A== esrecurse@^4.3.0: version "4.3.0" - resolved "https://registry.yarnpkg.com/esrecurse/-/esrecurse-4.3.0.tgz#7ad7964d679abb28bee72cec63758b1c5d2c9921" + resolved "https://registry.npmjs.org/esrecurse/-/esrecurse-4.3.0.tgz" integrity sha512-KmfKL3b6G+RXvP8N1vr3Tq1kL/oCFgn2NYXEtqP8/L3pKapUA4G8cFVaoF3SU323CD4XypR/ffioHmkti6/Tag== dependencies: estraverse "^5.2.0" estraverse@^4.1.1: version "4.3.0" - resolved "https://registry.yarnpkg.com/estraverse/-/estraverse-4.3.0.tgz#398ad3f3c5a24948be7725e83d11a7de28cdbd1d" + resolved "https://registry.npmjs.org/estraverse/-/estraverse-4.3.0.tgz" integrity sha512-39nnKffWz8xN1BU/2c79n9nB9HDzo0niYUqx6xyqUnyoAnQyyWpOTdZEeiCch8BBu515t4wp9ZmgVfVhn9EBpw== estraverse@^5.2.0: version "5.3.0" - resolved "https://registry.yarnpkg.com/estraverse/-/estraverse-5.3.0.tgz#2eea5290702f26ab8fe5370370ff86c965d21123" + resolved "https://registry.npmjs.org/estraverse/-/estraverse-5.3.0.tgz" integrity sha512-MMdARuVEQziNTeJD8DgMqmhwR11BRQ/cBP+pLtYdSTnf3MIO8fFeiINEbX36ZdNlfU/7A9f3gUw49B3oQsvwBA== esutils@^2.0.2: version "2.0.3" - resolved "https://registry.yarnpkg.com/esutils/-/esutils-2.0.3.tgz#74d2eb4de0b8da1293711910d50775b9b710ef64" + resolved "https://registry.npmjs.org/esutils/-/esutils-2.0.3.tgz" integrity sha512-kVscqXk4OCp68SZ0dkgEKVi6/8ij300KBWTJq32P/dYeWTSwK41WyTxalN1eRmA5Z9UU/LX9D7FWSmV9SAYx6g== event-target-shim@^5.0.0: version "5.0.1" - resolved "https://registry.yarnpkg.com/event-target-shim/-/event-target-shim-5.0.1.tgz#5d4d3ebdf9583d63a5333ce2deb7480ab2b05789" + resolved "https://registry.npmjs.org/event-target-shim/-/event-target-shim-5.0.1.tgz" integrity sha512-i/2XbnSz/uxRCU6+NdVJgKWDTM427+MqYbkQzD321DuCQJUqOuJKIA0IM2+W2xtYHdKOmZ4dR6fExsd4SXL+WQ== events@^3.2.0, events@^3.3.0: version "3.3.0" - resolved "https://registry.yarnpkg.com/events/-/events-3.3.0.tgz#31a95ad0a924e2d2c419a813aeb2c4e878ea7400" + resolved "https://registry.npmjs.org/events/-/events-3.3.0.tgz" integrity sha512-mQw+2fkQbALzQ7V0MY0IqdnXNOeTtP4r0lN9z7AAawCXgqea7bDii20AYrIBrFd/Hx0M2Ocz6S111CaFkUcb0Q== execa@^5.0.0: version "5.1.1" - resolved "https://registry.yarnpkg.com/execa/-/execa-5.1.1.tgz#f80ad9cbf4298f7bd1d4c9555c21e93741c411dd" + resolved "https://registry.npmjs.org/execa/-/execa-5.1.1.tgz" integrity sha512-8uSpZZocAZRBAPIEINJj3Lo9HyGitllczc27Eh5YYojjMFMn8yHMDMaUHE2Jqfq05D/wucwI4JGURyXt1vchyg== dependencies: cross-spawn "^7.0.3" @@ -2756,12 +2759,12 @@ execa@^5.0.0: exit@^0.1.2: version "0.1.2" - resolved "https://registry.yarnpkg.com/exit/-/exit-0.1.2.tgz#0632638f8d877cc82107d30a0fff1a17cba1cd0c" + resolved "https://registry.npmjs.org/exit/-/exit-0.1.2.tgz" integrity sha512-Zk/eNKV2zbjpKzrsQ+n1G6poVbErQxJ0LBOJXaKZ1EViLzH+hrLu9cdXI4zw9dBQJslwBEpbQ2P1oS7nDxs6jQ== expect@^29.0.0, expect@^29.7.0: version "29.7.0" - resolved "https://registry.yarnpkg.com/expect/-/expect-29.7.0.tgz#578874590dcb3214514084c08115d8aee61e11bc" + resolved "https://registry.npmjs.org/expect/-/expect-29.7.0.tgz" integrity sha512-2Zks0hf1VLFYI1kbh0I5jP3KHHyCHpkfyHBzsSXRFgl/Bg9mWYfMW8oD+PdMPlEwy5HNsR9JutYy6pMeOh61nw== dependencies: "@jest/expect-utils" "^29.7.0" @@ -2772,50 +2775,50 @@ expect@^29.0.0, expect@^29.7.0: fast-deep-equal@^3.1.3: version "3.1.3" - resolved "https://registry.yarnpkg.com/fast-deep-equal/-/fast-deep-equal-3.1.3.tgz#3a7d56b559d6cbc3eb512325244e619a65c6c525" + resolved "https://registry.npmjs.org/fast-deep-equal/-/fast-deep-equal-3.1.3.tgz" integrity sha512-f3qQ9oQy9j2AhBe/H9VC91wLmKBCCU/gDOnKNAYG5hswO7BLKj09Hc5HYNz9cGI++xlpDCIgDaitVs03ATR84Q== fast-json-stable-stringify@2.x, fast-json-stable-stringify@^2.1.0: version "2.1.0" - resolved "https://registry.yarnpkg.com/fast-json-stable-stringify/-/fast-json-stable-stringify-2.1.0.tgz#874bf69c6f404c2b5d99c481341399fd55892633" + resolved "https://registry.npmjs.org/fast-json-stable-stringify/-/fast-json-stable-stringify-2.1.0.tgz" integrity sha512-lhd/wF+Lk98HZoTCtlVraHtfh5XYijIjalXck7saUtuanSDyLMxnHhSXEDJqHxD7msR8D0uCmqlkwjCV8xvwHw== fast-uri@^3.0.1: version "3.0.6" - resolved "https://registry.yarnpkg.com/fast-uri/-/fast-uri-3.0.6.tgz#88f130b77cfaea2378d56bf970dea21257a68748" + resolved "https://registry.npmjs.org/fast-uri/-/fast-uri-3.0.6.tgz" integrity sha512-Atfo14OibSv5wAp4VWNsFYE1AchQRTv9cBGWET4pZWHzYshFSS9NQI6I57rdKn9croWVMbYFbLhJ+yJvmZIIHw== fast-xml-parser@4.4.1: version "4.4.1" - resolved "https://registry.yarnpkg.com/fast-xml-parser/-/fast-xml-parser-4.4.1.tgz#86dbf3f18edf8739326447bcaac31b4ae7f6514f" + resolved "https://registry.npmjs.org/fast-xml-parser/-/fast-xml-parser-4.4.1.tgz" integrity sha512-xkjOecfnKGkSsOwtZ5Pz7Us/T6mrbPQrq0nh+aCO5V9nk5NLWmasAHumTKjiPJPWANe+kAZ84Jc8ooJkzZ88Sw== dependencies: strnum "^1.0.5" fb-watchman@^2.0.0: version "2.0.2" - resolved "https://registry.yarnpkg.com/fb-watchman/-/fb-watchman-2.0.2.tgz#e9524ee6b5c77e9e5001af0f85f3adbb8623255c" + resolved "https://registry.npmjs.org/fb-watchman/-/fb-watchman-2.0.2.tgz" integrity sha512-p5161BqbuCaSnB8jIbzQHOlpgsPmK5rJVDfDKO91Axs5NC1uu3HRQm6wt9cd9/+GtQQIO53JdGXXoyDpTAsgYA== dependencies: bser "2.1.1" filelist@^1.0.4: version "1.0.4" - resolved "https://registry.yarnpkg.com/filelist/-/filelist-1.0.4.tgz#f78978a1e944775ff9e62e744424f215e58352b5" + resolved "https://registry.npmjs.org/filelist/-/filelist-1.0.4.tgz" integrity sha512-w1cEuf3S+DrLCQL7ET6kz+gmlJdbq9J7yXCSjK/OZCPA+qEN1WyF4ZAf0YYJa4/shHJra2t/d/r8SV4Ji+x+8Q== dependencies: minimatch "^5.0.1" fill-range@^7.1.1: version "7.1.1" - resolved "https://registry.yarnpkg.com/fill-range/-/fill-range-7.1.1.tgz#44265d3cac07e3ea7dc247516380643754a05292" + resolved "https://registry.npmjs.org/fill-range/-/fill-range-7.1.1.tgz" integrity sha512-YsGpe3WHLK8ZYi4tWDg2Jy3ebRz2rXowDxnld4bkQB00cc/1Zw9AWnC0i9ztDJitivtQvaI9KaLyKrc+hBW0yg== dependencies: to-regex-range "^5.0.1" find-up@^4.0.0, find-up@^4.1.0: version "4.1.0" - resolved "https://registry.yarnpkg.com/find-up/-/find-up-4.1.0.tgz#97afe7d6cdc0bc5928584b7c8d7b16e8a9aa5d19" + resolved "https://registry.npmjs.org/find-up/-/find-up-4.1.0.tgz" integrity sha512-PpOwAdQ/YlXQ2vj8a3h8IipDuYRi3wceVQQGYWxNINccq40Anw7BlsEXCMbt1Zt+OLA6Fq9suIpIWD0OsnISlw== dependencies: locate-path "^5.0.0" @@ -2823,17 +2826,17 @@ find-up@^4.0.0, find-up@^4.1.0: form-data-encoder@1.7.2: version "1.7.2" - resolved "https://registry.yarnpkg.com/form-data-encoder/-/form-data-encoder-1.7.2.tgz#1f1ae3dccf58ed4690b86d87e4f57c654fbab040" + resolved "https://registry.npmjs.org/form-data-encoder/-/form-data-encoder-1.7.2.tgz" integrity sha512-qfqtYan3rxrnCk1VYaA4H+Ms9xdpPqvLZa6xmMgFvhO32x7/3J/ExcTd6qpxM0vH2GdMI+poehyBZvqfMTto8A== form-data-encoder@^4.0.2: version "4.0.2" - resolved "https://registry.yarnpkg.com/form-data-encoder/-/form-data-encoder-4.0.2.tgz#dd286fd5f9049e8ded1d44ce427f5e29185c7c12" + resolved "https://registry.npmjs.org/form-data-encoder/-/form-data-encoder-4.0.2.tgz" integrity sha512-KQVhvhK8ZkWzxKxOr56CPulAhH3dobtuQ4+hNQ+HekH/Wp5gSOafqRAeTphQUJAIk0GBvHZgJ2ZGRWd5kphMuw== form-data@^4.0.0: version "4.0.2" - resolved "https://registry.yarnpkg.com/form-data/-/form-data-4.0.2.tgz#35cabbdd30c3ce73deb2c42d3c8d3ed9ca51794c" + resolved "https://registry.npmjs.org/form-data/-/form-data-4.0.2.tgz" integrity sha512-hGfm/slu0ZabnNt4oaRZ6uREyfCj6P4fT/n6A1rGV+Z0VdGXjfOhVUpkn6qVQONHGIFwmveGXyDs75+nr6FM8w== dependencies: asynckit "^0.4.0" @@ -2843,7 +2846,7 @@ form-data@^4.0.0: formdata-node@^4.3.2: version "4.4.1" - resolved "https://registry.yarnpkg.com/formdata-node/-/formdata-node-4.4.1.tgz#23f6a5cb9cb55315912cbec4ff7b0f59bbd191e2" + resolved "https://registry.npmjs.org/formdata-node/-/formdata-node-4.4.1.tgz" integrity sha512-0iirZp3uVDjVGt9p49aTaqjk84TrglENEDuqfdlZQ1roC9CWlPk6Avf8EEnZNcAqPonwkG35x4n3ww/1THYAeQ== dependencies: node-domexception "1.0.0" @@ -2851,37 +2854,37 @@ formdata-node@^4.3.2: formdata-node@^6.0.3: version "6.0.3" - resolved "https://registry.yarnpkg.com/formdata-node/-/formdata-node-6.0.3.tgz#48f8e2206ae2befded82af621ef015f08168dc6d" + resolved "https://registry.npmjs.org/formdata-node/-/formdata-node-6.0.3.tgz" integrity sha512-8e1++BCiTzUno9v5IZ2J6bv4RU+3UKDmqWUQD0MIMVCd9AdhWkO1gw57oo1mNEX1dMq2EGI+FbWz4B92pscSQg== fs.realpath@^1.0.0: version "1.0.0" - resolved "https://registry.yarnpkg.com/fs.realpath/-/fs.realpath-1.0.0.tgz#1504ad2523158caa40db4a2787cb01411994ea4f" + resolved "https://registry.npmjs.org/fs.realpath/-/fs.realpath-1.0.0.tgz" integrity sha512-OO0pH2lK6a0hZnAdau5ItzHPI6pUlvI7jMVnxUQRtw4owF2wk8lOSabtGDCTP4Ggrg2MbGnWO9X8K1t4+fGMDw== fsevents@^2.3.2: version "2.3.3" - resolved "https://registry.yarnpkg.com/fsevents/-/fsevents-2.3.3.tgz#cac6407785d03675a2a5e1a5305c697b347d90d6" + resolved "https://registry.npmjs.org/fsevents/-/fsevents-2.3.3.tgz" integrity sha512-5xoDfX+fL7faATnagmWPpbFtwh/R77WmMMqqHGS65C3vvB0YHrgF+B1YmZ3441tMj5n63k0212XNoJwzlhffQw== function-bind@^1.1.2: version "1.1.2" - resolved "https://registry.yarnpkg.com/function-bind/-/function-bind-1.1.2.tgz#2c02d864d97f3ea6c8830c464cbd11ab6eab7a1c" + resolved "https://registry.npmjs.org/function-bind/-/function-bind-1.1.2.tgz" integrity sha512-7XHNxH7qX9xG5mIwxkhumTox/MIRNcOgDrxWsMt2pAr23WHp6MrRlN7FBSFpCpr+oVO0F744iUgR82nJMfG2SA== gensync@^1.0.0-beta.2: version "1.0.0-beta.2" - resolved "https://registry.yarnpkg.com/gensync/-/gensync-1.0.0-beta.2.tgz#32a6ee76c3d7f52d46b2b1ae5d93fea8580a25e0" + resolved "https://registry.npmjs.org/gensync/-/gensync-1.0.0-beta.2.tgz" integrity sha512-3hN7NaskYvMDLQY55gnW3NQ+mesEAepTqlg+VEbj7zzqEMBVNhzcGYYeqFo/TlYz6eQiFcp1HcsCZO+nGgS8zg== get-caller-file@^2.0.5: version "2.0.5" - resolved "https://registry.yarnpkg.com/get-caller-file/-/get-caller-file-2.0.5.tgz#4f94412a82db32f36e3b0b9741f8a97feb031f7e" + resolved "https://registry.npmjs.org/get-caller-file/-/get-caller-file-2.0.5.tgz" integrity sha512-DyFP3BM/3YHTQOCUL/w0OZHR0lpKeGrxotcHWcqNEdnltqFwXVfhEBQ94eIo34AfQpo0rGki4cyIiftY06h2Fg== get-intrinsic@^1.2.5, get-intrinsic@^1.2.6, get-intrinsic@^1.3.0: version "1.3.0" - resolved "https://registry.yarnpkg.com/get-intrinsic/-/get-intrinsic-1.3.0.tgz#743f0e3b6964a93a5491ed1bffaae054d7f98d01" + resolved "https://registry.npmjs.org/get-intrinsic/-/get-intrinsic-1.3.0.tgz" integrity sha512-9fSjSaos/fRIVIp+xSJlE6lfwhES7LNtKaCBIamHsjr2na1BiABJPo0mOjjz8GJDURarmCPGqaiVg5mfjb98CQ== dependencies: call-bind-apply-helpers "^1.0.2" @@ -2897,12 +2900,12 @@ get-intrinsic@^1.2.5, get-intrinsic@^1.2.6, get-intrinsic@^1.3.0: get-package-type@^0.1.0: version "0.1.0" - resolved "https://registry.yarnpkg.com/get-package-type/-/get-package-type-0.1.0.tgz#8de2d803cff44df3bc6c456e6668b36c3926e11a" + resolved "https://registry.npmjs.org/get-package-type/-/get-package-type-0.1.0.tgz" integrity sha512-pjzuKtY64GYfWizNAJ0fr9VqttZkNiK2iS430LtIHzjBEr6bX8Am2zm4sW4Ro5wjWW5cAlRL1qAMTcXbjNAO2Q== get-proto@^1.0.1: version "1.0.1" - resolved "https://registry.yarnpkg.com/get-proto/-/get-proto-1.0.1.tgz#150b3f2743869ef3e851ec0c49d15b1d14d00ee1" + resolved "https://registry.npmjs.org/get-proto/-/get-proto-1.0.1.tgz" integrity sha512-sTSfBjoXBp89JvIKIefqw7U2CCebsc74kiY6awiGogKtoSGbgjYE/G/+l9sF3MWFPNc9IcoOC4ODfKHfxFmp0g== dependencies: dunder-proto "^1.0.1" @@ -2910,17 +2913,17 @@ get-proto@^1.0.1: get-stream@^6.0.0: version "6.0.1" - resolved "https://registry.yarnpkg.com/get-stream/-/get-stream-6.0.1.tgz#a262d8eef67aced57c2852ad6167526a43cbf7b7" + resolved "https://registry.npmjs.org/get-stream/-/get-stream-6.0.1.tgz" integrity sha512-ts6Wi+2j3jQjqi70w5AlN8DFnkSwC+MqmxEzdEALB2qXZYV3X/b1CTfgPLGJNMeAWxdPfU8FO1ms3NUfaHCPYg== glob-to-regexp@^0.4.1: version "0.4.1" - resolved "https://registry.yarnpkg.com/glob-to-regexp/-/glob-to-regexp-0.4.1.tgz#c75297087c851b9a578bd217dd59a92f59fe546e" + resolved "https://registry.npmjs.org/glob-to-regexp/-/glob-to-regexp-0.4.1.tgz" integrity sha512-lkX1HJXwyMcprw/5YUZc2s7DrpAiHB21/V+E1rHUrVNokkvB6bqMzT0VfV6/86ZNabt1k14YOIaT7nDvOX3Iiw== glob@^7.1.3, glob@^7.1.4: version "7.2.3" - resolved "https://registry.yarnpkg.com/glob/-/glob-7.2.3.tgz#b8df0fb802bbfa8e89bd1d938b4e16578ed44f2b" + resolved "https://registry.npmjs.org/glob/-/glob-7.2.3.tgz" integrity sha512-nFR0zLpU2YCaRxwoCJvL6UvCH2JFyFVIvwTLsIf21AuHlMskA1hhTdk+LlYJtOlYt9v6dvszD2BGRqBL+iQK9Q== dependencies: fs.realpath "^1.0.0" @@ -2932,58 +2935,58 @@ glob@^7.1.3, glob@^7.1.4: globals@^11.1.0: version "11.12.0" - resolved "https://registry.yarnpkg.com/globals/-/globals-11.12.0.tgz#ab8795338868a0babd8525758018c2a7eb95c42e" + resolved "https://registry.npmjs.org/globals/-/globals-11.12.0.tgz" integrity sha512-WOBp/EEGUiIsJSp7wcv/y6MO+lV9UoncWqxuFfm8eBwzWNgyfBd6Gz+IeKQ9jCmyhoH99g15M3T+QaVHFjizVA== gopd@^1.2.0: version "1.2.0" - resolved "https://registry.yarnpkg.com/gopd/-/gopd-1.2.0.tgz#89f56b8217bdbc8802bd299df6d7f1081d7e51a1" + resolved "https://registry.npmjs.org/gopd/-/gopd-1.2.0.tgz" integrity sha512-ZUKRh6/kUFoAiTAtTYPZJ3hw9wNxx+BIBOijnlG9PnrJsCcSjs1wyyD6vJpaYtgnzDrKYRSqf3OO6Rfa93xsRg== graceful-fs@^4.1.2, graceful-fs@^4.2.11, graceful-fs@^4.2.4, graceful-fs@^4.2.9: version "4.2.11" - resolved "https://registry.yarnpkg.com/graceful-fs/-/graceful-fs-4.2.11.tgz#4183e4e8bf08bb6e05bbb2f7d2e0c8f712ca40e3" + resolved "https://registry.npmjs.org/graceful-fs/-/graceful-fs-4.2.11.tgz" integrity sha512-RbJ5/jmFcNNCcDV5o9eTnBLJ/HszWV0P73bc+Ff4nS/rJj+YaS6IGyiOL0VoBYX+l1Wrl3k63h/KrH+nhJ0XvQ== has-flag@^4.0.0: version "4.0.0" - resolved "https://registry.yarnpkg.com/has-flag/-/has-flag-4.0.0.tgz#944771fd9c81c81265c4d6941860da06bb59479b" + resolved "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz" integrity sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ== has-symbols@^1.0.3, has-symbols@^1.1.0: version "1.1.0" - resolved "https://registry.yarnpkg.com/has-symbols/-/has-symbols-1.1.0.tgz#fc9c6a783a084951d0b971fe1018de813707a338" + resolved "https://registry.npmjs.org/has-symbols/-/has-symbols-1.1.0.tgz" integrity sha512-1cDNdwJ2Jaohmb3sg4OmKaMBwuC48sYni5HUw2DvsC8LjGTLK9h+eb1X6RyuOHe4hT0ULCW68iomhjUoKUqlPQ== has-tostringtag@^1.0.2: version "1.0.2" - resolved "https://registry.yarnpkg.com/has-tostringtag/-/has-tostringtag-1.0.2.tgz#2cdc42d40bef2e5b4eeab7c01a73c54ce7ab5abc" + resolved "https://registry.npmjs.org/has-tostringtag/-/has-tostringtag-1.0.2.tgz" integrity sha512-NqADB8VjPFLM2V0VvHUewwwsw0ZWBaIdgo+ieHtK3hasLz4qeCRjYcqfB6AQrBggRKppKF8L52/VqdVsO47Dlw== dependencies: has-symbols "^1.0.3" hasown@^2.0.2: version "2.0.2" - resolved "https://registry.yarnpkg.com/hasown/-/hasown-2.0.2.tgz#003eaf91be7adc372e84ec59dc37252cedb80003" + resolved "https://registry.npmjs.org/hasown/-/hasown-2.0.2.tgz" integrity sha512-0hJU9SCPvmMzIBdZFqNPXWa6dqh7WdH0cII9y+CyS8rG3nL48Bclra9HmKhVVUHyPWNH5Y7xDwAB7bfgSjkUMQ== dependencies: function-bind "^1.1.2" html-encoding-sniffer@^3.0.0: version "3.0.0" - resolved "https://registry.yarnpkg.com/html-encoding-sniffer/-/html-encoding-sniffer-3.0.0.tgz#2cb1a8cf0db52414776e5b2a7a04d5dd98158de9" + resolved "https://registry.npmjs.org/html-encoding-sniffer/-/html-encoding-sniffer-3.0.0.tgz" integrity sha512-oWv4T4yJ52iKrufjnyZPkrN0CH3QnrUqdB6In1g5Fe1mia8GmF36gnfNySxoZtxD5+NmYw1EElVXiBk93UeskA== dependencies: whatwg-encoding "^2.0.0" html-escaper@^2.0.0: version "2.0.2" - resolved "https://registry.yarnpkg.com/html-escaper/-/html-escaper-2.0.2.tgz#dfd60027da36a36dfcbe236262c00a5822681453" + resolved "https://registry.npmjs.org/html-escaper/-/html-escaper-2.0.2.tgz" integrity sha512-H2iMtd0I4Mt5eYiapRdIDjp+XzelXQ0tFE4JS7YFwFevXXMmOp9myNrUvCg0D6ws8iqkRPBfKHgbwig1SmlLfg== http-proxy-agent@^5.0.0: version "5.0.0" - resolved "https://registry.yarnpkg.com/http-proxy-agent/-/http-proxy-agent-5.0.0.tgz#5129800203520d434f142bc78ff3c170800f2b43" + resolved "https://registry.npmjs.org/http-proxy-agent/-/http-proxy-agent-5.0.0.tgz" integrity sha512-n2hY8YdoRE1i7r6M0w9DIw5GgZN0G25P8zLCRQ8rjXtTU3vsNFBI/vWK/UIeE6g5MUUz6avwAPXmL6Fy9D/90w== dependencies: "@tootallnate/once" "2" @@ -2992,7 +2995,7 @@ http-proxy-agent@^5.0.0: https-proxy-agent@^5.0.1: version "5.0.1" - resolved "https://registry.yarnpkg.com/https-proxy-agent/-/https-proxy-agent-5.0.1.tgz#c59ef224a04fe8b754f3db0063a25ea30d0005d6" + resolved "https://registry.npmjs.org/https-proxy-agent/-/https-proxy-agent-5.0.1.tgz" integrity sha512-dFcAjpTQFgoLMzC2VwU+C/CbS7uRL0lWmxDITmqm7C+7F0Odmj6s9l6alZc6AELXhrnggM2CeWSXHGOdX2YtwA== dependencies: agent-base "6" @@ -3000,31 +3003,31 @@ https-proxy-agent@^5.0.1: human-signals@^2.1.0: version "2.1.0" - resolved "https://registry.yarnpkg.com/human-signals/-/human-signals-2.1.0.tgz#dc91fcba42e4d06e4abaed33b3e7a3c02f514ea0" + resolved "https://registry.npmjs.org/human-signals/-/human-signals-2.1.0.tgz" integrity sha512-B4FFZ6q/T2jhhksgkbEW3HBvWIfDW85snkQgawt07S7J5QXTk6BkNV+0yAeZrM5QpMAdYlocGoljn0sJ/WQkFw== humanize-ms@^1.2.1: version "1.2.1" - resolved "https://registry.yarnpkg.com/humanize-ms/-/humanize-ms-1.2.1.tgz#c46e3159a293f6b896da29316d8b6fe8bb79bbed" + resolved "https://registry.npmjs.org/humanize-ms/-/humanize-ms-1.2.1.tgz" integrity sha512-Fl70vYtsAFb/C06PTS9dZBo7ihau+Tu/DNCk/OyHhea07S+aeMWpFFkUaXRa8fI+ScZbEI8dfSxwY7gxZ9SAVQ== dependencies: ms "^2.0.0" iconv-lite@0.6.3: version "0.6.3" - resolved "https://registry.yarnpkg.com/iconv-lite/-/iconv-lite-0.6.3.tgz#a52f80bf38da1952eb5c681790719871a1a72501" + resolved "https://registry.npmjs.org/iconv-lite/-/iconv-lite-0.6.3.tgz" integrity sha512-4fCk79wshMdzMp2rH06qWrJE4iolqLhCUH+OiuIgU++RB0+94NlDL81atO7GX55uUKueo0txHNtvEyI6D7WdMw== dependencies: safer-buffer ">= 2.1.2 < 3.0.0" ieee754@^1.2.1: version "1.2.1" - resolved "https://registry.yarnpkg.com/ieee754/-/ieee754-1.2.1.tgz#8eb7a10a63fff25d15a57b001586d177d1b0d352" + resolved "https://registry.npmjs.org/ieee754/-/ieee754-1.2.1.tgz" integrity sha512-dcyqhDvX1C46lXZcVqCpK+FtMRQVdIMN6/Df5js2zouUsqG7I6sFxitIC+7KYK29KdXOLHdu9zL4sFnoVQnqaA== import-in-the-middle@^1.8.1: version "1.13.1" - resolved "https://registry.yarnpkg.com/import-in-the-middle/-/import-in-the-middle-1.13.1.tgz#789651f9e93dd902a5a306f499ab51eb72b03a12" + resolved "https://registry.npmjs.org/import-in-the-middle/-/import-in-the-middle-1.13.1.tgz" integrity sha512-k2V9wNm9B+ysuelDTHjI9d5KPc4l8zAZTGqj+pcynvWkypZd857ryzN8jNC7Pg2YZXNMJcHRPpaDyCBbNyVRpA== dependencies: acorn "^8.14.0" @@ -3034,7 +3037,7 @@ import-in-the-middle@^1.8.1: import-local@^3.0.2: version "3.2.0" - resolved "https://registry.yarnpkg.com/import-local/-/import-local-3.2.0.tgz#c3d5c745798c02a6f8b897726aba5100186ee260" + resolved "https://registry.npmjs.org/import-local/-/import-local-3.2.0.tgz" integrity sha512-2SPlun1JUPWoM6t3F0dw0FkCF/jWY8kttcY4f599GLTSjh2OCuuhdTkJQsEcZzBqbXZGKMK2OqW1oZsjtf/gQA== dependencies: pkg-dir "^4.2.0" @@ -3042,12 +3045,12 @@ import-local@^3.0.2: imurmurhash@^0.1.4: version "0.1.4" - resolved "https://registry.yarnpkg.com/imurmurhash/-/imurmurhash-0.1.4.tgz#9218b9b2b928a238b13dc4fb6b6d576f231453ea" + resolved "https://registry.npmjs.org/imurmurhash/-/imurmurhash-0.1.4.tgz" integrity sha512-JmXMZ6wuvDmLiHEml9ykzqO6lwFbof0GG4IkcGaENdCRDDmMVnny7s5HsIgHCbaq0w2MyPhDqkhTUgS2LU2PHA== inflight@^1.0.4: version "1.0.6" - resolved "https://registry.yarnpkg.com/inflight/-/inflight-1.0.6.tgz#49bd6331d7d02d0c09bc910a1075ba8165b56df9" + resolved "https://registry.npmjs.org/inflight/-/inflight-1.0.6.tgz" integrity sha512-k92I/b08q4wvFscXCLvqfsHCrjrF7yiXsQuIVvVE7N82W3+aqpzuUdBbfhWcy/FZR3/4IgflMgKLOsvPDrGCJA== dependencies: once "^1.3.0" @@ -3055,59 +3058,59 @@ inflight@^1.0.4: inherits@2: version "2.0.4" - resolved "https://registry.yarnpkg.com/inherits/-/inherits-2.0.4.tgz#0fa2c64f932917c3433a0ded55363aae37416b7c" + resolved "https://registry.npmjs.org/inherits/-/inherits-2.0.4.tgz" integrity sha512-k/vGaX4/Yla3WzyMCvTQOXYeIHvqOKtnqBduzTHpzpQZzAskKMhZ2K+EnBiSM9zGSoIFeMpXKxa4dYeZIQqewQ== is-arrayish@^0.2.1: version "0.2.1" - resolved "https://registry.yarnpkg.com/is-arrayish/-/is-arrayish-0.2.1.tgz#77c99840527aa8ecb1a8ba697b80645a7a926a9d" + resolved "https://registry.npmjs.org/is-arrayish/-/is-arrayish-0.2.1.tgz" integrity sha512-zz06S8t0ozoDXMG+ube26zeCTNXcKIPJZJi8hBrF4idCLms4CG9QtK7qBl1boi5ODzFpjswb5JPmHCbMpjaYzg== is-core-module@^2.16.0: version "2.16.1" - resolved "https://registry.yarnpkg.com/is-core-module/-/is-core-module-2.16.1.tgz#2a98801a849f43e2add644fbb6bc6229b19a4ef4" + resolved "https://registry.npmjs.org/is-core-module/-/is-core-module-2.16.1.tgz" integrity sha512-UfoeMA6fIJ8wTYFEUjelnaGI67v6+N7qXJEvQuIGa99l4xsCruSYOVSQ0uPANn4dAzm8lkYPaKLrrijLq7x23w== dependencies: hasown "^2.0.2" is-fullwidth-code-point@^3.0.0: version "3.0.0" - resolved "https://registry.yarnpkg.com/is-fullwidth-code-point/-/is-fullwidth-code-point-3.0.0.tgz#f116f8064fe90b3f7844a38997c0b75051269f1d" + resolved "https://registry.npmjs.org/is-fullwidth-code-point/-/is-fullwidth-code-point-3.0.0.tgz" integrity sha512-zymm5+u+sCsSWyD9qNaejV3DFvhCKclKdizYaJUuHA83RLjb7nSuGnddCHGv0hk+KY7BMAlsWeK4Ueg6EV6XQg== is-generator-fn@^2.0.0: version "2.1.0" - resolved "https://registry.yarnpkg.com/is-generator-fn/-/is-generator-fn-2.1.0.tgz#7d140adc389aaf3011a8f2a2a4cfa6faadffb118" + resolved "https://registry.npmjs.org/is-generator-fn/-/is-generator-fn-2.1.0.tgz" integrity sha512-cTIB4yPYL/Grw0EaSzASzg6bBy9gqCofvWN8okThAYIxKJZC+udlRAmGbM0XLeniEJSs8uEgHPGuHSe1XsOLSQ== is-number@^7.0.0: version "7.0.0" - resolved "https://registry.yarnpkg.com/is-number/-/is-number-7.0.0.tgz#7535345b896734d5f80c4d06c50955527a14f12b" + resolved "https://registry.npmjs.org/is-number/-/is-number-7.0.0.tgz" integrity sha512-41Cifkg6e8TylSpdtTpeLVMqvSBEVzTttHvERD741+pnZ8ANv0004MRL43QKPDlK9cGvNp6NZWZUBlbGXYxxng== is-potential-custom-element-name@^1.0.1: version "1.0.1" - resolved "https://registry.yarnpkg.com/is-potential-custom-element-name/-/is-potential-custom-element-name-1.0.1.tgz#171ed6f19e3ac554394edf78caa05784a45bebb5" + resolved "https://registry.npmjs.org/is-potential-custom-element-name/-/is-potential-custom-element-name-1.0.1.tgz" integrity sha512-bCYeRA2rVibKZd+s2625gGnGF/t7DSqDs4dP7CrLA1m7jKWz6pps0LpYLJN8Q64HtmPKJ1hrN3nzPNKFEKOUiQ== is-stream@^2.0.0: version "2.0.1" - resolved "https://registry.yarnpkg.com/is-stream/-/is-stream-2.0.1.tgz#fac1e3d53b97ad5a9d0ae9cef2389f5810a5c077" + resolved "https://registry.npmjs.org/is-stream/-/is-stream-2.0.1.tgz" integrity sha512-hFoiJiTl63nn+kstHGBtewWSKnQLpyb155KHheA1l39uvtO9nWIop1p3udqPcUd/xbF1VLMO4n7OI6p7RbngDg== isexe@^2.0.0: version "2.0.0" - resolved "https://registry.yarnpkg.com/isexe/-/isexe-2.0.0.tgz#e8fbf374dc556ff8947a10dcb0572d633f2cfa10" + resolved "https://registry.npmjs.org/isexe/-/isexe-2.0.0.tgz" integrity sha512-RHxMLp9lnKHGHRng9QFhRCMbYAcVpn69smSGcq3f36xjgVVWThj4qqLbTLlq7Ssj8B+fIQ1EuCEGI2lKsyQeIw== istanbul-lib-coverage@^3.0.0, istanbul-lib-coverage@^3.2.0: version "3.2.2" - resolved "https://registry.yarnpkg.com/istanbul-lib-coverage/-/istanbul-lib-coverage-3.2.2.tgz#2d166c4b0644d43a39f04bf6c2edd1e585f31756" + resolved "https://registry.npmjs.org/istanbul-lib-coverage/-/istanbul-lib-coverage-3.2.2.tgz" integrity sha512-O8dpsF+r0WV/8MNRKfnmrtCWhuKjxrq2w+jpzBL5UZKTi2LeVWnWOmWRxFlesJONmc+wLAGvKQZEOanko0LFTg== istanbul-lib-instrument@^5.0.4: version "5.2.1" - resolved "https://registry.yarnpkg.com/istanbul-lib-instrument/-/istanbul-lib-instrument-5.2.1.tgz#d10c8885c2125574e1c231cacadf955675e1ce3d" + resolved "https://registry.npmjs.org/istanbul-lib-instrument/-/istanbul-lib-instrument-5.2.1.tgz" integrity sha512-pzqtp31nLv/XFOzXGuvhCb8qhjmTVo5vjVk19XE4CRlSWz0KoeJ3bw9XsA7nOp9YBf4qHjwBxkDzKcME/J29Yg== dependencies: "@babel/core" "^7.12.3" @@ -3118,7 +3121,7 @@ istanbul-lib-instrument@^5.0.4: istanbul-lib-instrument@^6.0.0: version "6.0.3" - resolved "https://registry.yarnpkg.com/istanbul-lib-instrument/-/istanbul-lib-instrument-6.0.3.tgz#fa15401df6c15874bcb2105f773325d78c666765" + resolved "https://registry.npmjs.org/istanbul-lib-instrument/-/istanbul-lib-instrument-6.0.3.tgz" integrity sha512-Vtgk7L/R2JHyyGW07spoFlB8/lpjiOLTjMdms6AFMraYt3BaJauod/NGrfnVG/y4Ix1JEuMRPDPEj2ua+zz1/Q== dependencies: "@babel/core" "^7.23.9" @@ -3129,7 +3132,7 @@ istanbul-lib-instrument@^6.0.0: istanbul-lib-report@^3.0.0: version "3.0.1" - resolved "https://registry.yarnpkg.com/istanbul-lib-report/-/istanbul-lib-report-3.0.1.tgz#908305bac9a5bd175ac6a74489eafd0fc2445a7d" + resolved "https://registry.npmjs.org/istanbul-lib-report/-/istanbul-lib-report-3.0.1.tgz" integrity sha512-GCfE1mtsHGOELCU8e/Z7YWzpmybrx/+dSTfLrvY8qRmaY6zXTKWn6WQIjaAFw069icm6GVMNkgu0NzI4iPZUNw== dependencies: istanbul-lib-coverage "^3.0.0" @@ -3138,7 +3141,7 @@ istanbul-lib-report@^3.0.0: istanbul-lib-source-maps@^4.0.0: version "4.0.1" - resolved "https://registry.yarnpkg.com/istanbul-lib-source-maps/-/istanbul-lib-source-maps-4.0.1.tgz#895f3a709fcfba34c6de5a42939022f3e4358551" + resolved "https://registry.npmjs.org/istanbul-lib-source-maps/-/istanbul-lib-source-maps-4.0.1.tgz" integrity sha512-n3s8EwkdFIJCG3BPKBYvskgXGoy88ARzvegkitk60NxRdwltLOTaH7CUiMRXvwYorl0Q712iEjcWB+fK/MrWVw== dependencies: debug "^4.1.1" @@ -3147,7 +3150,7 @@ istanbul-lib-source-maps@^4.0.0: istanbul-reports@^3.1.3: version "3.1.7" - resolved "https://registry.yarnpkg.com/istanbul-reports/-/istanbul-reports-3.1.7.tgz#daed12b9e1dca518e15c056e1e537e741280fa0b" + resolved "https://registry.npmjs.org/istanbul-reports/-/istanbul-reports-3.1.7.tgz" integrity sha512-BewmUXImeuRk2YY0PVbxgKAysvhRPUQE0h5QRM++nVWyubKGV0l8qQ5op8+B2DOmwSe63Jivj0BjkPQVf8fP5g== dependencies: html-escaper "^2.0.0" @@ -3155,7 +3158,7 @@ istanbul-reports@^3.1.3: jake@^10.8.5: version "10.9.2" - resolved "https://registry.yarnpkg.com/jake/-/jake-10.9.2.tgz#6ae487e6a69afec3a5e167628996b59f35ae2b7f" + resolved "https://registry.npmjs.org/jake/-/jake-10.9.2.tgz" integrity sha512-2P4SQ0HrLQ+fw6llpLnOaGAvN2Zu6778SJMrCUwns4fOoG9ayrTiZk3VV8sCPkVZF8ab0zksVpS8FDY5pRCNBA== dependencies: async "^3.2.3" @@ -3165,12 +3168,12 @@ jake@^10.8.5: javascript-natural-sort@0.7.1: version "0.7.1" - resolved "https://registry.yarnpkg.com/javascript-natural-sort/-/javascript-natural-sort-0.7.1.tgz#f9e2303d4507f6d74355a73664d1440fb5a0ef59" + resolved "https://registry.npmjs.org/javascript-natural-sort/-/javascript-natural-sort-0.7.1.tgz" integrity sha512-nO6jcEfZWQXDhOiBtG2KvKyEptz7RVbpGP4vTD2hLBdmNQSsCiicO2Ioinv6UI4y9ukqnBpy+XZ9H6uLNgJTlw== jest-changed-files@^29.7.0: version "29.7.0" - resolved "https://registry.yarnpkg.com/jest-changed-files/-/jest-changed-files-29.7.0.tgz#1c06d07e77c78e1585d020424dedc10d6e17ac3a" + resolved "https://registry.npmjs.org/jest-changed-files/-/jest-changed-files-29.7.0.tgz" integrity sha512-fEArFiwf1BpQ+4bXSprcDc3/x4HSzL4al2tozwVpDFpsxALjLYdyiIK4e5Vz66GQJIbXJ82+35PtysofptNX2w== dependencies: execa "^5.0.0" @@ -3179,7 +3182,7 @@ jest-changed-files@^29.7.0: jest-circus@^29.7.0: version "29.7.0" - resolved "https://registry.yarnpkg.com/jest-circus/-/jest-circus-29.7.0.tgz#b6817a45fcc835d8b16d5962d0c026473ee3668a" + resolved "https://registry.npmjs.org/jest-circus/-/jest-circus-29.7.0.tgz" integrity sha512-3E1nCMgipcTkCocFwM90XXQab9bS+GMsjdpmPrlelaxwD93Ad8iVEjX/vvHPdLPnFf+L40u+5+iutRdA1N9myw== dependencies: "@jest/environment" "^29.7.0" @@ -3205,7 +3208,7 @@ jest-circus@^29.7.0: jest-cli@^29.7.0: version "29.7.0" - resolved "https://registry.yarnpkg.com/jest-cli/-/jest-cli-29.7.0.tgz#5592c940798e0cae677eec169264f2d839a37995" + resolved "https://registry.npmjs.org/jest-cli/-/jest-cli-29.7.0.tgz" integrity sha512-OVVobw2IubN/GSYsxETi+gOe7Ka59EFMR/twOU3Jb2GnKKeMGJB5SGUUrEz3SFVmJASUdZUzy83sLNNQ2gZslg== dependencies: "@jest/core" "^29.7.0" @@ -3222,7 +3225,7 @@ jest-cli@^29.7.0: jest-config@^29.7.0: version "29.7.0" - resolved "https://registry.yarnpkg.com/jest-config/-/jest-config-29.7.0.tgz#bcbda8806dbcc01b1e316a46bb74085a84b0245f" + resolved "https://registry.npmjs.org/jest-config/-/jest-config-29.7.0.tgz" integrity sha512-uXbpfeQ7R6TZBqI3/TxCU4q4ttk3u0PJeC+E0zbfSoSjq6bJ7buBPxzQPL0ifrkY4DNu4JUdk0ImlBUYi840eQ== dependencies: "@babel/core" "^7.11.6" @@ -3250,7 +3253,7 @@ jest-config@^29.7.0: jest-diff@^29.7.0: version "29.7.0" - resolved "https://registry.yarnpkg.com/jest-diff/-/jest-diff-29.7.0.tgz#017934a66ebb7ecf6f205e84699be10afd70458a" + resolved "https://registry.npmjs.org/jest-diff/-/jest-diff-29.7.0.tgz" integrity sha512-LMIgiIrhigmPrs03JHpxUh2yISK3vLFPkAodPeo0+BuF7wA2FoQbkEg1u8gBYBThncu7e1oEDUfIXVuTqLRUjw== dependencies: chalk "^4.0.0" @@ -3260,14 +3263,14 @@ jest-diff@^29.7.0: jest-docblock@^29.7.0: version "29.7.0" - resolved "https://registry.yarnpkg.com/jest-docblock/-/jest-docblock-29.7.0.tgz#8fddb6adc3cdc955c93e2a87f61cfd350d5d119a" + resolved "https://registry.npmjs.org/jest-docblock/-/jest-docblock-29.7.0.tgz" integrity sha512-q617Auw3A612guyaFgsbFeYpNP5t2aoUNLwBUbc/0kD1R4t9ixDbyFTHd1nok4epoVFpr7PmeWHrhvuV3XaJ4g== dependencies: detect-newline "^3.0.0" jest-each@^29.7.0: version "29.7.0" - resolved "https://registry.yarnpkg.com/jest-each/-/jest-each-29.7.0.tgz#162a9b3f2328bdd991beaabffbb74745e56577d1" + resolved "https://registry.npmjs.org/jest-each/-/jest-each-29.7.0.tgz" integrity sha512-gns+Er14+ZrEoC5fhOfYCY1LOHHr0TI+rQUHZS8Ttw2l7gl+80eHc/gFf2Ktkw0+SIACDTeWvpFcv3B04VembQ== dependencies: "@jest/types" "^29.6.3" @@ -3278,7 +3281,7 @@ jest-each@^29.7.0: jest-environment-jsdom@^29.7.0: version "29.7.0" - resolved "https://registry.yarnpkg.com/jest-environment-jsdom/-/jest-environment-jsdom-29.7.0.tgz#d206fa3551933c3fd519e5dfdb58a0f5139a837f" + resolved "https://registry.npmjs.org/jest-environment-jsdom/-/jest-environment-jsdom-29.7.0.tgz" integrity sha512-k9iQbsf9OyOfdzWH8HDmrRT0gSIcX+FLNW7IQq94tFX0gynPwqDTW0Ho6iMVNjGz/nb+l/vW3dWM2bbLLpkbXA== dependencies: "@jest/environment" "^29.7.0" @@ -3292,7 +3295,7 @@ jest-environment-jsdom@^29.7.0: jest-environment-node@^29.7.0: version "29.7.0" - resolved "https://registry.yarnpkg.com/jest-environment-node/-/jest-environment-node-29.7.0.tgz#0b93e111dda8ec120bc8300e6d1fb9576e164376" + resolved "https://registry.npmjs.org/jest-environment-node/-/jest-environment-node-29.7.0.tgz" integrity sha512-DOSwCRqXirTOyheM+4d5YZOrWcdu0LNZ87ewUoywbcb2XR4wKgqiG8vNeYwhjFMbEkfju7wx2GYH0P2gevGvFw== dependencies: "@jest/environment" "^29.7.0" @@ -3304,12 +3307,12 @@ jest-environment-node@^29.7.0: jest-get-type@^29.6.3: version "29.6.3" - resolved "https://registry.yarnpkg.com/jest-get-type/-/jest-get-type-29.6.3.tgz#36f499fdcea197c1045a127319c0481723908fd1" + resolved "https://registry.npmjs.org/jest-get-type/-/jest-get-type-29.6.3.tgz" integrity sha512-zrteXnqYxfQh7l5FHyL38jL39di8H8rHoecLH3JNxH3BwOrBsNeabdap5e0I23lD4HHI8W5VFBZqG4Eaq5LNcw== jest-haste-map@^29.7.0: version "29.7.0" - resolved "https://registry.yarnpkg.com/jest-haste-map/-/jest-haste-map-29.7.0.tgz#3c2396524482f5a0506376e6c858c3bbcc17b104" + resolved "https://registry.npmjs.org/jest-haste-map/-/jest-haste-map-29.7.0.tgz" integrity sha512-fP8u2pyfqx0K1rGn1R9pyE0/KTn+G7PxktWidOBTqFPLYX0b9ksaMFkhK5vrS3DVun09pckLdlx90QthlW7AmA== dependencies: "@jest/types" "^29.6.3" @@ -3328,7 +3331,7 @@ jest-haste-map@^29.7.0: jest-leak-detector@^29.7.0: version "29.7.0" - resolved "https://registry.yarnpkg.com/jest-leak-detector/-/jest-leak-detector-29.7.0.tgz#5b7ec0dadfdfec0ca383dc9aa016d36b5ea4c728" + resolved "https://registry.npmjs.org/jest-leak-detector/-/jest-leak-detector-29.7.0.tgz" integrity sha512-kYA8IJcSYtST2BY9I+SMC32nDpBT3J2NvWJx8+JCuCdl/CR1I4EKUJROiP8XtCcxqgTTBGJNdbB1A8XRKbTetw== dependencies: jest-get-type "^29.6.3" @@ -3336,7 +3339,7 @@ jest-leak-detector@^29.7.0: jest-matcher-utils@^29.7.0: version "29.7.0" - resolved "https://registry.yarnpkg.com/jest-matcher-utils/-/jest-matcher-utils-29.7.0.tgz#ae8fec79ff249fd592ce80e3ee474e83a6c44f12" + resolved "https://registry.npmjs.org/jest-matcher-utils/-/jest-matcher-utils-29.7.0.tgz" integrity sha512-sBkD+Xi9DtcChsI3L3u0+N0opgPYnCRPtGcQYrgXmR+hmt/fYfWAL0xRXYU8eWOdfuLgBe0YCW3AFtnRLagq/g== dependencies: chalk "^4.0.0" @@ -3346,7 +3349,7 @@ jest-matcher-utils@^29.7.0: jest-message-util@^29.7.0: version "29.7.0" - resolved "https://registry.yarnpkg.com/jest-message-util/-/jest-message-util-29.7.0.tgz#8bc392e204e95dfe7564abbe72a404e28e51f7f3" + resolved "https://registry.npmjs.org/jest-message-util/-/jest-message-util-29.7.0.tgz" integrity sha512-GBEV4GRADeP+qtB2+6u61stea8mGcOT4mCtrYISZwfu9/ISHFJ/5zOMXYbpBE9RsS5+Gb63DW4FgmnKJ79Kf6w== dependencies: "@babel/code-frame" "^7.12.13" @@ -3361,7 +3364,7 @@ jest-message-util@^29.7.0: jest-mock@^29.7.0: version "29.7.0" - resolved "https://registry.yarnpkg.com/jest-mock/-/jest-mock-29.7.0.tgz#4e836cf60e99c6fcfabe9f99d017f3fdd50a6347" + resolved "https://registry.npmjs.org/jest-mock/-/jest-mock-29.7.0.tgz" integrity sha512-ITOMZn+UkYS4ZFh83xYAOzWStloNzJFO2s8DWrE4lhtGD+AorgnbkiKERe4wQVBydIGPx059g6riW5Btp6Llnw== dependencies: "@jest/types" "^29.6.3" @@ -3370,17 +3373,17 @@ jest-mock@^29.7.0: jest-pnp-resolver@^1.2.2: version "1.2.3" - resolved "https://registry.yarnpkg.com/jest-pnp-resolver/-/jest-pnp-resolver-1.2.3.tgz#930b1546164d4ad5937d5540e711d4d38d4cad2e" + resolved "https://registry.npmjs.org/jest-pnp-resolver/-/jest-pnp-resolver-1.2.3.tgz" integrity sha512-+3NpwQEnRoIBtx4fyhblQDPgJI0H1IEIkX7ShLUjPGA7TtUTvI1oiKi3SR4oBR0hQhQR80l4WAe5RrXBwWMA8w== jest-regex-util@^29.6.3: version "29.6.3" - resolved "https://registry.yarnpkg.com/jest-regex-util/-/jest-regex-util-29.6.3.tgz#4a556d9c776af68e1c5f48194f4d0327d24e8a52" + resolved "https://registry.npmjs.org/jest-regex-util/-/jest-regex-util-29.6.3.tgz" integrity sha512-KJJBsRCyyLNWCNBOvZyRDnAIfUiRJ8v+hOBQYGn8gDyF3UegwiP4gwRR3/SDa42g1YbVycTidUF3rKjyLFDWbg== jest-resolve-dependencies@^29.7.0: version "29.7.0" - resolved "https://registry.yarnpkg.com/jest-resolve-dependencies/-/jest-resolve-dependencies-29.7.0.tgz#1b04f2c095f37fc776ff40803dc92921b1e88428" + resolved "https://registry.npmjs.org/jest-resolve-dependencies/-/jest-resolve-dependencies-29.7.0.tgz" integrity sha512-un0zD/6qxJ+S0et7WxeI3H5XSe9lTBBR7bOHCHXkKR6luG5mwDDlIzVQ0V5cZCuoTgEdcdwzTghYkTWfubi+nA== dependencies: jest-regex-util "^29.6.3" @@ -3388,7 +3391,7 @@ jest-resolve-dependencies@^29.7.0: jest-resolve@^29.7.0: version "29.7.0" - resolved "https://registry.yarnpkg.com/jest-resolve/-/jest-resolve-29.7.0.tgz#64d6a8992dd26f635ab0c01e5eef4399c6bcbc30" + resolved "https://registry.npmjs.org/jest-resolve/-/jest-resolve-29.7.0.tgz" integrity sha512-IOVhZSrg+UvVAshDSDtHyFCCBUl/Q3AAJv8iZ6ZjnZ74xzvwuzLXid9IIIPgTnY62SJjfuupMKZsZQRsCvxEgA== dependencies: chalk "^4.0.0" @@ -3403,7 +3406,7 @@ jest-resolve@^29.7.0: jest-runner@^29.7.0: version "29.7.0" - resolved "https://registry.yarnpkg.com/jest-runner/-/jest-runner-29.7.0.tgz#809af072d408a53dcfd2e849a4c976d3132f718e" + resolved "https://registry.npmjs.org/jest-runner/-/jest-runner-29.7.0.tgz" integrity sha512-fsc4N6cPCAahybGBfTRcq5wFR6fpLznMg47sY5aDpsoejOcVYFb07AHuSnR0liMcPTgBsA3ZJL6kFOjPdoNipQ== dependencies: "@jest/console" "^29.7.0" @@ -3430,7 +3433,7 @@ jest-runner@^29.7.0: jest-runtime@^29.7.0: version "29.7.0" - resolved "https://registry.yarnpkg.com/jest-runtime/-/jest-runtime-29.7.0.tgz#efecb3141cf7d3767a3a0cc8f7c9990587d3d817" + resolved "https://registry.npmjs.org/jest-runtime/-/jest-runtime-29.7.0.tgz" integrity sha512-gUnLjgwdGqW7B4LvOIkbKs9WGbn+QLqRQQ9juC6HndeDiezIwhDP+mhMwHWCEcfQ5RUXa6OPnFF8BJh5xegwwQ== dependencies: "@jest/environment" "^29.7.0" @@ -3458,7 +3461,7 @@ jest-runtime@^29.7.0: jest-snapshot@^29.7.0: version "29.7.0" - resolved "https://registry.yarnpkg.com/jest-snapshot/-/jest-snapshot-29.7.0.tgz#c2c574c3f51865da1bb329036778a69bf88a6be5" + resolved "https://registry.npmjs.org/jest-snapshot/-/jest-snapshot-29.7.0.tgz" integrity sha512-Rm0BMWtxBcioHr1/OX5YCP8Uov4riHvKPknOGs804Zg9JGZgmIBkbtlxJC/7Z4msKYVbIJtfU+tKb8xlYNfdkw== dependencies: "@babel/core" "^7.11.6" @@ -3484,7 +3487,7 @@ jest-snapshot@^29.7.0: jest-util@^29.0.0, jest-util@^29.7.0: version "29.7.0" - resolved "https://registry.yarnpkg.com/jest-util/-/jest-util-29.7.0.tgz#23c2b62bfb22be82b44de98055802ff3710fc0bc" + resolved "https://registry.npmjs.org/jest-util/-/jest-util-29.7.0.tgz" integrity sha512-z6EbKajIpqGKU56y5KBUgy1dt1ihhQJgWzUlZHArA/+X2ad7Cb5iF+AK1EWVL/Bo7Rz9uurpqw6SiBCefUbCGA== dependencies: "@jest/types" "^29.6.3" @@ -3496,7 +3499,7 @@ jest-util@^29.0.0, jest-util@^29.7.0: jest-validate@^29.7.0: version "29.7.0" - resolved "https://registry.yarnpkg.com/jest-validate/-/jest-validate-29.7.0.tgz#7bf705511c64da591d46b15fce41400d52147d9c" + resolved "https://registry.npmjs.org/jest-validate/-/jest-validate-29.7.0.tgz" integrity sha512-ZB7wHqaRGVw/9hST/OuFUReG7M8vKeq0/J2egIGLdvjHCmYqGARhzXmtgi+gVeZ5uXFF219aOc3Ls2yLg27tkw== dependencies: "@jest/types" "^29.6.3" @@ -3508,7 +3511,7 @@ jest-validate@^29.7.0: jest-watcher@^29.7.0: version "29.7.0" - resolved "https://registry.yarnpkg.com/jest-watcher/-/jest-watcher-29.7.0.tgz#7810d30d619c3a62093223ce6bb359ca1b28a2f2" + resolved "https://registry.npmjs.org/jest-watcher/-/jest-watcher-29.7.0.tgz" integrity sha512-49Fg7WXkU3Vl2h6LbLtMQ/HyB6rXSIX7SqvBLQmssRBGN9I0PNvPmAmCWSOY6SOvrjhI/F7/bGAv9RtnsPA03g== dependencies: "@jest/test-result" "^29.7.0" @@ -3522,7 +3525,7 @@ jest-watcher@^29.7.0: jest-worker@^27.4.5: version "27.5.1" - resolved "https://registry.yarnpkg.com/jest-worker/-/jest-worker-27.5.1.tgz#8d146f0900e8973b106b6f73cc1e9a8cb86f8db0" + resolved "https://registry.npmjs.org/jest-worker/-/jest-worker-27.5.1.tgz" integrity sha512-7vuh85V5cdDofPyxn58nrPjBktZo0u9x1g8WtjQol+jZDaE+fhN+cIvTj11GndBnMnyfrUOG1sZQxCdjKh+DKg== dependencies: "@types/node" "*" @@ -3531,7 +3534,7 @@ jest-worker@^27.4.5: jest-worker@^29.7.0: version "29.7.0" - resolved "https://registry.yarnpkg.com/jest-worker/-/jest-worker-29.7.0.tgz#acad073acbbaeb7262bd5389e1bcf43e10058d4a" + resolved "https://registry.npmjs.org/jest-worker/-/jest-worker-29.7.0.tgz" integrity sha512-eIz2msL/EzL9UFTFFx7jBTkeZfku0yUAyZZZmJ93H2TYEiroIx2PQjEXcwYtYl8zXCxb+PAmA2hLIt/6ZEkPHw== dependencies: "@types/node" "*" @@ -3541,7 +3544,7 @@ jest-worker@^29.7.0: jest@^29.7.0: version "29.7.0" - resolved "https://registry.yarnpkg.com/jest/-/jest-29.7.0.tgz#994676fc24177f088f1c5e3737f5697204ff2613" + resolved "https://registry.npmjs.org/jest/-/jest-29.7.0.tgz" integrity sha512-NIy3oAFp9shda19hy4HK0HRTWKtPJmGdnvywu01nOqNC2vZg+Z+fvJDxpMQA88eb2I9EcafcdjYgsDthnYTvGw== dependencies: "@jest/core" "^29.7.0" @@ -3551,24 +3554,24 @@ jest@^29.7.0: js-base64@3.7.2: version "3.7.2" - resolved "https://registry.yarnpkg.com/js-base64/-/js-base64-3.7.2.tgz#816d11d81a8aff241603d19ce5761e13e41d7745" + resolved "https://registry.npmjs.org/js-base64/-/js-base64-3.7.2.tgz" integrity sha512-NnRs6dsyqUXejqk/yv2aiXlAvOs56sLkX6nUdeaNezI5LFFLlsZjOThmwnrcwh5ZZRwZlCMnVAY3CvhIhoVEKQ== js-tiktoken@^1.0.15: version "1.0.20" - resolved "https://registry.yarnpkg.com/js-tiktoken/-/js-tiktoken-1.0.20.tgz#fa2733bf147acaf1bdcf9ab8a878e79c581c95f2" + resolved "https://registry.npmjs.org/js-tiktoken/-/js-tiktoken-1.0.20.tgz" integrity sha512-Xlaqhhs8VfCd6Sh7a1cFkZHQbYTLCwVJJWiHVxBYzLPxW0XsoxBy1hitmjkdIjD3Aon5BXLHFwU5O8WUx6HH+A== dependencies: base64-js "^1.5.1" js-tokens@^4.0.0: version "4.0.0" - resolved "https://registry.yarnpkg.com/js-tokens/-/js-tokens-4.0.0.tgz#19203fb59991df98e3a287050d4647cdeaf32499" + resolved "https://registry.npmjs.org/js-tokens/-/js-tokens-4.0.0.tgz" integrity sha512-RdJUflcE3cUzKiMqQgsCu06FPu9UdIJO0beYbPhHN4k6apgJtifcoCtT9bcxOpYBtpD2kCM6Sbzg4CausW/PKQ== js-yaml@^3.13.1: version "3.14.1" - resolved "https://registry.yarnpkg.com/js-yaml/-/js-yaml-3.14.1.tgz#dae812fdb3825fa306609a8717383c50c36a0537" + resolved "https://registry.npmjs.org/js-yaml/-/js-yaml-3.14.1.tgz" integrity sha512-okMH7OXXJ7YrN9Ok3/SXrnu4iX9yOk+25nqX4imS2npuvTYDmo/QEZoqwZkYaIDk3jVvBOTOIEgEhaLOynBS9g== dependencies: argparse "^1.0.7" @@ -3576,7 +3579,7 @@ js-yaml@^3.13.1: jsdom@^20.0.0: version "20.0.3" - resolved "https://registry.yarnpkg.com/jsdom/-/jsdom-20.0.3.tgz#886a41ba1d4726f67a8858028c99489fed6ad4db" + resolved "https://registry.npmjs.org/jsdom/-/jsdom-20.0.3.tgz" integrity sha512-SYhBvTh89tTfCD/CRdSOm13mOBa42iTaTyfyEWBdKcGdPxPtLFBXuHR8XHb33YNYaP+lLbmSvBTsnoesCNJEsQ== dependencies: abab "^2.0.6" @@ -3608,115 +3611,115 @@ jsdom@^20.0.0: jsesc@^2.5.1: version "2.5.2" - resolved "https://registry.yarnpkg.com/jsesc/-/jsesc-2.5.2.tgz#80564d2e483dacf6e8ef209650a67df3f0c283a4" + resolved "https://registry.npmjs.org/jsesc/-/jsesc-2.5.2.tgz" integrity sha512-OYu7XEzjkCQ3C5Ps3QIZsQfNpqoJyZZA99wd9aWd05NCtC5pWOkShK2mkL6HXQR6/Cy2lbNdPlZBpuQHXE63gA== jsesc@^3.0.2: version "3.1.0" - resolved "https://registry.yarnpkg.com/jsesc/-/jsesc-3.1.0.tgz#74d335a234f67ed19907fdadfac7ccf9d409825d" + resolved "https://registry.npmjs.org/jsesc/-/jsesc-3.1.0.tgz" integrity sha512-/sM3dO2FOzXjKQhJuo0Q173wf2KOo8t4I8vHy6lF9poUp7bKT0/NHE8fPX23PwfhnykfqnC2xRxOnVw5XuGIaA== json-parse-even-better-errors@^2.3.0, json-parse-even-better-errors@^2.3.1: version "2.3.1" - resolved "https://registry.yarnpkg.com/json-parse-even-better-errors/-/json-parse-even-better-errors-2.3.1.tgz#7c47805a94319928e05777405dc12e1f7a4ee02d" + resolved "https://registry.npmjs.org/json-parse-even-better-errors/-/json-parse-even-better-errors-2.3.1.tgz" integrity sha512-xyFwyhro/JEof6Ghe2iz2NcXoj2sloNsWr/XsERDK/oiPCfaNhl5ONfp+jQdAZRQQ0IJWNzH9zIZF7li91kh2w== json-schema-traverse@^1.0.0: version "1.0.0" - resolved "https://registry.yarnpkg.com/json-schema-traverse/-/json-schema-traverse-1.0.0.tgz#ae7bcb3656ab77a73ba5c49bf654f38e6b6860e2" + resolved "https://registry.npmjs.org/json-schema-traverse/-/json-schema-traverse-1.0.0.tgz" integrity sha512-NM8/P9n3XjXhIZn1lLhkFaACTOURQXjWhV4BA/RnOv8xvgqtqpAX9IO4mRQxSx1Rlo4tqzeqb0sOlruaOy3dug== json5@^2.2.3: version "2.2.3" - resolved "https://registry.yarnpkg.com/json5/-/json5-2.2.3.tgz#78cd6f1a19bdc12b73db5ad0c61efd66c1e29283" + resolved "https://registry.npmjs.org/json5/-/json5-2.2.3.tgz" integrity sha512-XmOWe7eyHYH14cLdVPoyg+GOH3rYX++KpzrylJwSW98t3Nk+U8XOl8FWKOgwtzdb8lXGf6zYwDUzeHMWfxasyg== jsonschema@^1.4.1: version "1.5.0" - resolved "https://registry.yarnpkg.com/jsonschema/-/jsonschema-1.5.0.tgz#f6aceb1ab9123563dd901d05f81f9d4883d3b7d8" + resolved "https://registry.npmjs.org/jsonschema/-/jsonschema-1.5.0.tgz" integrity sha512-K+A9hhqbn0f3pJX17Q/7H6yQfD/5OXgdrR5UE12gMXCiN9D5Xq2o5mddV2QEcX/bjla99ASsAAQUyMCCRWAEhw== kleur@^3.0.3: version "3.0.3" - resolved "https://registry.yarnpkg.com/kleur/-/kleur-3.0.3.tgz#a79c9ecc86ee1ce3fa6206d1216c501f147fc07e" + resolved "https://registry.npmjs.org/kleur/-/kleur-3.0.3.tgz" integrity sha512-eTIzlVOSUR+JxdDFepEYcBMtZ9Qqdef+rnzWdRZuMbOywu5tO2w2N7rqjoANZ5k9vywhL6Br1VRjUIgTQx4E8w== leven@^3.1.0: version "3.1.0" - resolved "https://registry.yarnpkg.com/leven/-/leven-3.1.0.tgz#77891de834064cccba82ae7842bb6b14a13ed7f2" + resolved "https://registry.npmjs.org/leven/-/leven-3.1.0.tgz" integrity sha512-qsda+H8jTaUaN/x5vzW2rzc+8Rw4TAQ/4KjB46IwK5VH+IlVeeeje/EoZRpiXvIqjFgK84QffqPztGI3VBLG1A== lines-and-columns@^1.1.6: version "1.2.4" - resolved "https://registry.yarnpkg.com/lines-and-columns/-/lines-and-columns-1.2.4.tgz#eca284f75d2965079309dc0ad9255abb2ebc1632" + resolved "https://registry.npmjs.org/lines-and-columns/-/lines-and-columns-1.2.4.tgz" integrity sha512-7ylylesZQ/PV29jhEDl3Ufjo6ZX7gCqJr5F7PKrqc93v7fzSymt1BpwEU8nAUXs8qzzvqhbjhK5QZg6Mt/HkBg== loader-runner@^4.2.0: version "4.3.0" - resolved "https://registry.yarnpkg.com/loader-runner/-/loader-runner-4.3.0.tgz#c1b4a163b99f614830353b16755e7149ac2314e1" + resolved "https://registry.npmjs.org/loader-runner/-/loader-runner-4.3.0.tgz" integrity sha512-3R/1M+yS3j5ou80Me59j7F9IMs4PXs3VqRrm0TU3AbKPxlmpoY1TNscJV/oGJXo8qCatFGTfDbY6W6ipGOYXfg== locate-path@^5.0.0: version "5.0.0" - resolved "https://registry.yarnpkg.com/locate-path/-/locate-path-5.0.0.tgz#1afba396afd676a6d42504d0a67a3a7eb9f62aa0" + resolved "https://registry.npmjs.org/locate-path/-/locate-path-5.0.0.tgz" integrity sha512-t7hw9pI+WvuwNJXwk5zVHpyhIqzg2qTlklJOf0mVxGSbe3Fp2VieZcduNYjaLDoy6p9uGpQEGWG87WpMKlNq8g== dependencies: p-locate "^4.1.0" lodash.clonedeep@^4.5.0: version "4.5.0" - resolved "https://registry.yarnpkg.com/lodash.clonedeep/-/lodash.clonedeep-4.5.0.tgz#e23f3f9c4f8fbdde872529c1071857a086e5ccef" + resolved "https://registry.npmjs.org/lodash.clonedeep/-/lodash.clonedeep-4.5.0.tgz" integrity sha512-H5ZhCF25riFd9uB5UCkVKo61m3S/xZk1x4wA6yp/L3RFP6Z/eHH1ymQcGLo7J3GMPfm0V/7m1tryHuGVxpqEBQ== lodash.memoize@^4.1.2: version "4.1.2" - resolved "https://registry.yarnpkg.com/lodash.memoize/-/lodash.memoize-4.1.2.tgz#bcc6c49a42a2840ed997f323eada5ecd182e0bfe" + resolved "https://registry.npmjs.org/lodash.memoize/-/lodash.memoize-4.1.2.tgz" integrity sha512-t7j+NzmgnQzTAYXcsHYLgimltOV1MXHtlOWf6GjL9Kj8GK5FInw5JotxvbOs+IvV1/Dzo04/fCGfLVs7aXb4Ag== lodash@^4.17.21: version "4.17.21" - resolved "https://registry.yarnpkg.com/lodash/-/lodash-4.17.21.tgz#679591c564c3bffaae8454cf0b3df370c3d6911c" + resolved "https://registry.npmjs.org/lodash/-/lodash-4.17.21.tgz" integrity sha512-v2kDEe57lecTulaDIuNTPy3Ry4gLGJ6Z1O3vE1krgXZNrsQ+LFTGHVxVjcXPs17LhbZVGedAJv8XZ1tvj5FvSg== lru-cache@^5.1.1: version "5.1.1" - resolved "https://registry.yarnpkg.com/lru-cache/-/lru-cache-5.1.1.tgz#1da27e6710271947695daf6848e847f01d84b920" + resolved "https://registry.npmjs.org/lru-cache/-/lru-cache-5.1.1.tgz" integrity sha512-KpNARQA3Iwv+jTA0utUVVbrh+Jlrr1Fv0e56GGzAFOXN7dk/FviaDW8LHmK52DlcH4WP2n6gI8vN1aesBFgo9w== dependencies: yallist "^3.0.2" make-dir@^4.0.0: version "4.0.0" - resolved "https://registry.yarnpkg.com/make-dir/-/make-dir-4.0.0.tgz#c3c2307a771277cd9638305f915c29ae741b614e" + resolved "https://registry.npmjs.org/make-dir/-/make-dir-4.0.0.tgz" integrity sha512-hXdUTZYIVOt1Ex//jAQi+wTZZpUpwBj/0QsOzqegb3rGMMeJiSEu5xLHnYfBrRV4RH2+OCSOO95Is/7x1WJ4bw== dependencies: semver "^7.5.3" make-error@^1.3.6: version "1.3.6" - resolved "https://registry.yarnpkg.com/make-error/-/make-error-1.3.6.tgz#2eb2e37ea9b67c4891f684a1394799af484cf7a2" + resolved "https://registry.npmjs.org/make-error/-/make-error-1.3.6.tgz" integrity sha512-s8UhlNe7vPKomQhC1qFelMokr/Sc3AgNbso3n74mVPA5LTZwkB9NlXf4XPamLxJE8h0gh73rM94xvwRT2CVInw== makeerror@1.0.12: version "1.0.12" - resolved "https://registry.yarnpkg.com/makeerror/-/makeerror-1.0.12.tgz#3e5dd2079a82e812e983cc6610c4a2cb0eaa801a" + resolved "https://registry.npmjs.org/makeerror/-/makeerror-1.0.12.tgz" integrity sha512-JmqCvUhmt43madlpFzG4BQzG2Z3m6tvQDNKdClZnO3VbIudJYmxsT0FNJMeiB2+JTSlTQTSbU8QdesVmwJcmLg== dependencies: tmpl "1.0.5" math-intrinsics@^1.1.0: version "1.1.0" - resolved "https://registry.yarnpkg.com/math-intrinsics/-/math-intrinsics-1.1.0.tgz#a0dd74be81e2aa5c2f27e65ce283605ee4e2b7f9" + resolved "https://registry.npmjs.org/math-intrinsics/-/math-intrinsics-1.1.0.tgz" integrity sha512-/IXtbwEk5HTPyEwyKX6hGkYXxM9nbj64B+ilVJnC/R6B0pH5G4V3b0pVbL7DBj4tkhBAppbQUlf6F6Xl9LHu1g== merge-stream@^2.0.0: version "2.0.0" - resolved "https://registry.yarnpkg.com/merge-stream/-/merge-stream-2.0.0.tgz#52823629a14dd00c9770fb6ad47dc6310f2c1f60" + resolved "https://registry.npmjs.org/merge-stream/-/merge-stream-2.0.0.tgz" integrity sha512-abv/qOcuPfk3URPfDzmZU1LKmuw8kT+0nIHvKrKgFrwifol/doWcdA4ZqsWQ8ENrFKkd67Mfpo/LovbIUsbt3w== micromatch@^4.0.0, micromatch@^4.0.4: version "4.0.8" - resolved "https://registry.yarnpkg.com/micromatch/-/micromatch-4.0.8.tgz#d66fa18f3a47076789320b9b1af32bd86d9fa202" + resolved "https://registry.npmjs.org/micromatch/-/micromatch-4.0.8.tgz" integrity sha512-PXwfBhYu0hBCPw8Dn0E+WDYb7af3dSLVWKi3HGv84IdF4TyFoC0ysxFd0Goxw7nSv4T/PzEJQxsYsEiFCKo2BA== dependencies: braces "^3.0.3" @@ -3724,116 +3727,116 @@ micromatch@^4.0.0, micromatch@^4.0.4: mime-db@1.52.0: version "1.52.0" - resolved "https://registry.yarnpkg.com/mime-db/-/mime-db-1.52.0.tgz#bbabcdc02859f4987301c856e3387ce5ec43bf70" + resolved "https://registry.npmjs.org/mime-db/-/mime-db-1.52.0.tgz" integrity sha512-sPU4uV7dYlvtWJxwwxHD0PuihVNiE7TyAbQ5SWxDCB9mUYvOgroQOwYQQOKPJ8CIbE+1ETVlOoK1UC2nU3gYvg== mime-types@^2.1.12, mime-types@^2.1.27: version "2.1.35" - resolved "https://registry.yarnpkg.com/mime-types/-/mime-types-2.1.35.tgz#381a871b62a734450660ae3deee44813f70d959a" + resolved "https://registry.npmjs.org/mime-types/-/mime-types-2.1.35.tgz" integrity sha512-ZDY+bPm5zTTF+YpCrAU9nK0UgICYPT0QtT1NZWFv4s++TNkcgVaT0g6+4R2uI4MjQjzysHB1zxuWL50hzaeXiw== dependencies: mime-db "1.52.0" mimic-fn@^2.1.0: version "2.1.0" - resolved "https://registry.yarnpkg.com/mimic-fn/-/mimic-fn-2.1.0.tgz#7ed2c2ccccaf84d3ffcb7a69b57711fc2083401b" + resolved "https://registry.npmjs.org/mimic-fn/-/mimic-fn-2.1.0.tgz" integrity sha512-OqbOk5oEQeAZ8WXWydlu9HJjz9WVdEIvamMCcXmuqUYjTknH/sqsWvhQ3vgwKFRR1HpjvNBKQ37nbJgYzGqGcg== minimatch@^3.0.4, minimatch@^3.1.1, minimatch@^3.1.2: version "3.1.2" - resolved "https://registry.yarnpkg.com/minimatch/-/minimatch-3.1.2.tgz#19cd194bfd3e428f049a70817c038d89ab4be35b" + resolved "https://registry.npmjs.org/minimatch/-/minimatch-3.1.2.tgz" integrity sha512-J7p63hRiAjw1NDEww1W7i37+ByIrOWO5XQQAzZ3VOcL0PNybwpfmV/N05zFAzwQ9USyEcX6t3UO+K5aqBQOIHw== dependencies: brace-expansion "^1.1.7" minimatch@^5.0.1: version "5.1.6" - resolved "https://registry.yarnpkg.com/minimatch/-/minimatch-5.1.6.tgz#1cfcb8cf5522ea69952cd2af95ae09477f122a96" + resolved "https://registry.npmjs.org/minimatch/-/minimatch-5.1.6.tgz" integrity sha512-lKwV/1brpG6mBUFHtb7NUmtABCb2WZZmm2wNiOA5hAb8VdCS4B3dtMWyvcoViccwAW/COERjXLt0zP1zXUN26g== dependencies: brace-expansion "^2.0.1" module-details-from-path@^1.0.3: version "1.0.4" - resolved "https://registry.yarnpkg.com/module-details-from-path/-/module-details-from-path-1.0.4.tgz#b662fdcd93f6c83d3f25289da0ce81c8d9685b94" + resolved "https://registry.npmjs.org/module-details-from-path/-/module-details-from-path-1.0.4.tgz" integrity sha512-EGWKgxALGMgzvxYF1UyGTy0HXX/2vHLkw6+NvDKW2jypWbHpjQuj4UMcqQWXHERJhVGKikolT06G3bcKe4fi7w== ms@^2.0.0, ms@^2.1.3: version "2.1.3" - resolved "https://registry.yarnpkg.com/ms/-/ms-2.1.3.tgz#574c8138ce1d2b5861f0b44579dbadd60c6615b2" + resolved "https://registry.npmjs.org/ms/-/ms-2.1.3.tgz" integrity sha512-6FlzubTLZG3J2a/NVCAleEhjzq5oxgHyaCU9yYXvcLsvoVaHJq/s5xXI6/XXP6tz7R9xAOtHnSO/tXtF3WRTlA== natural-compare@^1.4.0: version "1.4.0" - resolved "https://registry.yarnpkg.com/natural-compare/-/natural-compare-1.4.0.tgz#4abebfeed7541f2c27acfb29bdbbd15c8d5ba4f7" + resolved "https://registry.npmjs.org/natural-compare/-/natural-compare-1.4.0.tgz" integrity sha512-OWND8ei3VtNC9h7V60qff3SVobHr996CTwgxubgyQYEpg290h9J0buyECNNJexkFm5sOajh5G116RYA1c8ZMSw== neo-async@^2.6.2: version "2.6.2" - resolved "https://registry.yarnpkg.com/neo-async/-/neo-async-2.6.2.tgz#b4aafb93e3aeb2d8174ca53cf163ab7d7308305f" + resolved "https://registry.npmjs.org/neo-async/-/neo-async-2.6.2.tgz" integrity sha512-Yd3UES5mWCSqR+qNT93S3UoYUkqAZ9lLg8a7g9rimsWmYGK8cVToA4/sF3RrshdyV3sAGMXVUmpMYOw+dLpOuw== node-domexception@1.0.0: version "1.0.0" - resolved "https://registry.yarnpkg.com/node-domexception/-/node-domexception-1.0.0.tgz#6888db46a1f71c0b76b3f7555016b63fe64766e5" + resolved "https://registry.npmjs.org/node-domexception/-/node-domexception-1.0.0.tgz" integrity sha512-/jKZoMpw0F8GRwl4/eLROPA3cfcXtLApP0QzLmUT/HuPCZWyB7IY9ZrMeKw2O/nFIqPQB3PVM9aYm0F312AXDQ== node-fetch@2.7.0, node-fetch@^2.6.7, node-fetch@^2.7.0: version "2.7.0" - resolved "https://registry.yarnpkg.com/node-fetch/-/node-fetch-2.7.0.tgz#d0f0fa6e3e2dc1d27efcd8ad99d550bda94d187d" + resolved "https://registry.npmjs.org/node-fetch/-/node-fetch-2.7.0.tgz" integrity sha512-c4FRfUm/dbcWZ7U+1Wq0AwCyFL+3nt2bEw05wfxSz+DWpWsitgmSgYmy2dQdWyKC1694ELPqMs/YzUSNozLt8A== dependencies: whatwg-url "^5.0.0" node-int64@^0.4.0: version "0.4.0" - resolved "https://registry.yarnpkg.com/node-int64/-/node-int64-0.4.0.tgz#87a9065cdb355d3182d8f94ce11188b825c68a3b" + resolved "https://registry.npmjs.org/node-int64/-/node-int64-0.4.0.tgz" integrity sha512-O5lz91xSOeoXP6DulyHfllpq+Eg00MWitZIbtPfoSEvqIHdl5gfcY6hYzDWnj0qD5tz52PI08u9qUvSVeUBeHw== node-releases@^2.0.19: version "2.0.19" - resolved "https://registry.yarnpkg.com/node-releases/-/node-releases-2.0.19.tgz#9e445a52950951ec4d177d843af370b411caf314" + resolved "https://registry.npmjs.org/node-releases/-/node-releases-2.0.19.tgz" integrity sha512-xxOWJsBKtzAq7DY0J+DTzuz58K8e7sJbdgwkbMWQe8UYB6ekmsQ45q0M/tJDsGaZmbC+l7n57UV8Hl5tHxO9uw== normalize-path@^3.0.0: version "3.0.0" - resolved "https://registry.yarnpkg.com/normalize-path/-/normalize-path-3.0.0.tgz#0dcd69ff23a1c9b11fd0978316644a0388216a65" + resolved "https://registry.npmjs.org/normalize-path/-/normalize-path-3.0.0.tgz" integrity sha512-6eZs5Ls3WtCisHWp9S2GUy8dqkpGi4BVSz3GaqiE6ezub0512ESztXUwUB6C6IKbQkY2Pnb/mD4WYojCRwcwLA== npm-run-path@^4.0.1: version "4.0.1" - resolved "https://registry.yarnpkg.com/npm-run-path/-/npm-run-path-4.0.1.tgz#b7ecd1e5ed53da8e37a55e1c2269e0b97ed748ea" + resolved "https://registry.npmjs.org/npm-run-path/-/npm-run-path-4.0.1.tgz" integrity sha512-S48WzZW777zhNIrn7gxOlISNAqi9ZC/uQFnRdbeIHhZhCA6UqpkOT8T1G7BvfdgP4Er8gF4sUbaS0i7QvIfCWw== dependencies: path-key "^3.0.0" nwsapi@^2.2.2: version "2.2.20" - resolved "https://registry.yarnpkg.com/nwsapi/-/nwsapi-2.2.20.tgz#22e53253c61e7b0e7e93cef42c891154bcca11ef" + resolved "https://registry.npmjs.org/nwsapi/-/nwsapi-2.2.20.tgz" integrity sha512-/ieB+mDe4MrrKMT8z+mQL8klXydZWGR5Dowt4RAGKbJ3kIGEx3X4ljUo+6V73IXtUPWgfOlU5B9MlGxFO5T+cA== object-inspect@^1.13.3: version "1.13.4" - resolved "https://registry.yarnpkg.com/object-inspect/-/object-inspect-1.13.4.tgz#8375265e21bc20d0fa582c22e1b13485d6e00213" + resolved "https://registry.npmjs.org/object-inspect/-/object-inspect-1.13.4.tgz" integrity sha512-W67iLl4J2EXEGTbfeHCffrjDfitvLANg0UlX3wFUUSTx92KXRFegMHUVgSqE+wvhAbi4WqjGg9czysTV2Epbew== once@^1.3.0: version "1.4.0" - resolved "https://registry.yarnpkg.com/once/-/once-1.4.0.tgz#583b1aa775961d4b113ac17d9c50baef9dd76bd1" + resolved "https://registry.npmjs.org/once/-/once-1.4.0.tgz" integrity sha512-lNaJgI+2Q5URQBkccEKHTQOPaXdUxnZZElQTZY0MFUAuaEqe1E+Nyvgdz/aIyNi6Z9MzO5dv1H8n58/GELp3+w== dependencies: wrappy "1" onetime@^5.1.2: version "5.1.2" - resolved "https://registry.yarnpkg.com/onetime/-/onetime-5.1.2.tgz#d0e96ebb56b07476df1dd9c4806e5237985ca45e" + resolved "https://registry.npmjs.org/onetime/-/onetime-5.1.2.tgz" integrity sha512-kbpaSSGJTWdAY5KPVeMOKXSrPtr8C8C7wodJbcsd51jRnmD+GZu8Y0VoU6Dm5Z4vWr0Ig/1NKuWRKf7j5aaYSg== dependencies: mimic-fn "^2.1.0" openai@^4.74.0: version "4.97.0" - resolved "https://registry.yarnpkg.com/openai/-/openai-4.97.0.tgz#4e2e85c79499c1d44b58f97b3a8ec1d6bfe403b3" + resolved "https://registry.npmjs.org/openai/-/openai-4.97.0.tgz" integrity sha512-LRoiy0zvEf819ZUEJhgfV8PfsE8G5WpQi4AwA1uCV8SKvvtXQkoWUFkepD6plqyJQRghy2+AEPQ07FrJFKHZ9Q== dependencies: "@types/node" "^18.11.18" @@ -3846,33 +3849,33 @@ openai@^4.74.0: p-limit@^2.2.0: version "2.3.0" - resolved "https://registry.yarnpkg.com/p-limit/-/p-limit-2.3.0.tgz#3dd33c647a214fdfffd835933eb086da0dc21db1" + resolved "https://registry.npmjs.org/p-limit/-/p-limit-2.3.0.tgz" integrity sha512-//88mFWSJx8lxCzwdAABTJL2MyWB12+eIY7MDL2SqLmAkeKU9qxRvWuSyTjm3FUmpBEMuFfckAIqEaVGUDxb6w== dependencies: p-try "^2.0.0" p-limit@^3.1.0: version "3.1.0" - resolved "https://registry.yarnpkg.com/p-limit/-/p-limit-3.1.0.tgz#e1daccbe78d0d1388ca18c64fea38e3e57e3706b" + resolved "https://registry.npmjs.org/p-limit/-/p-limit-3.1.0.tgz" integrity sha512-TYOanM3wGwNGsZN2cVTYPArw454xnXj5qmWF1bEoAc4+cU/ol7GVh7odevjp1FNHduHc3KZMcFduxU5Xc6uJRQ== dependencies: yocto-queue "^0.1.0" p-locate@^4.1.0: version "4.1.0" - resolved "https://registry.yarnpkg.com/p-locate/-/p-locate-4.1.0.tgz#a3428bb7088b3a60292f66919278b7c297ad4f07" + resolved "https://registry.npmjs.org/p-locate/-/p-locate-4.1.0.tgz" integrity sha512-R79ZZ/0wAxKGu3oYMlz8jy/kbhsNrS7SKZ7PxEHBgJ5+F2mtFW2fK2cOtBh1cHYkQsbzFV7I+EoRKe6Yt0oK7A== dependencies: p-limit "^2.2.0" p-try@^2.0.0: version "2.2.0" - resolved "https://registry.yarnpkg.com/p-try/-/p-try-2.2.0.tgz#cb2868540e313d61de58fafbe35ce9004d5540e6" + resolved "https://registry.npmjs.org/p-try/-/p-try-2.2.0.tgz" integrity sha512-R4nPAVTAU0B9D35/Gk3uJf/7XYbQcyohSKdvAxIRSNghFl4e71hVoGnBNQz9cWaXxO2I10KTC+3jMdvvoKw6dQ== parse-json@^5.2.0: version "5.2.0" - resolved "https://registry.yarnpkg.com/parse-json/-/parse-json-5.2.0.tgz#c76fc66dee54231c962b22bcc8a72cf2f99753cd" + resolved "https://registry.npmjs.org/parse-json/-/parse-json-5.2.0.tgz" integrity sha512-ayCKvm/phCGxOkYRSCM82iDwct8/EonSEgCSxWxD7ve6jHggsFl4fZVQBPRNgQoKiuV/odhFrGzQXZwbifC8Rg== dependencies: "@babel/code-frame" "^7.0.0" @@ -3882,61 +3885,61 @@ parse-json@^5.2.0: parse5@^7.0.0, parse5@^7.1.1: version "7.3.0" - resolved "https://registry.yarnpkg.com/parse5/-/parse5-7.3.0.tgz#d7e224fa72399c7a175099f45fc2ad024b05ec05" + resolved "https://registry.npmjs.org/parse5/-/parse5-7.3.0.tgz" integrity sha512-IInvU7fabl34qmi9gY8XOVxhYyMyuH2xUNpb2q8/Y+7552KlejkRvqvD19nMoUW/uQGGbqNpA6Tufu5FL5BZgw== dependencies: entities "^6.0.0" path-exists@^4.0.0: version "4.0.0" - resolved "https://registry.yarnpkg.com/path-exists/-/path-exists-4.0.0.tgz#513bdbe2d3b95d7762e8c1137efa195c6c61b5b3" + resolved "https://registry.npmjs.org/path-exists/-/path-exists-4.0.0.tgz" integrity sha512-ak9Qy5Q7jYb2Wwcey5Fpvg2KoAc/ZIhLSLOSBmRmygPsGwkVVt0fZa0qrtMz+m6tJTAHfZQ8FnmB4MG4LWy7/w== path-is-absolute@^1.0.0: version "1.0.1" - resolved "https://registry.yarnpkg.com/path-is-absolute/-/path-is-absolute-1.0.1.tgz#174b9268735534ffbc7ace6bf53a5a9e1b5c5f5f" + resolved "https://registry.npmjs.org/path-is-absolute/-/path-is-absolute-1.0.1.tgz" integrity sha512-AVbw3UJ2e9bq64vSaS9Am0fje1Pa8pbGqTTsmXfaIiMpnr5DlDhfJOuLj9Sf95ZPVDAUerDfEk88MPmPe7UCQg== path-key@^3.0.0, path-key@^3.1.0: version "3.1.1" - resolved "https://registry.yarnpkg.com/path-key/-/path-key-3.1.1.tgz#581f6ade658cbba65a0d3380de7753295054f375" + resolved "https://registry.npmjs.org/path-key/-/path-key-3.1.1.tgz" integrity sha512-ojmeN0qd+y0jszEtoY48r0Peq5dwMEkIlCOu6Q5f41lfkswXuKtYrhgoTpLnyIcHm24Uhqx+5Tqm2InSwLhE6Q== path-parse@^1.0.7: version "1.0.7" - resolved "https://registry.yarnpkg.com/path-parse/-/path-parse-1.0.7.tgz#fbc114b60ca42b30d9daf5858e4bd68bbedb6735" + resolved "https://registry.npmjs.org/path-parse/-/path-parse-1.0.7.tgz" integrity sha512-LDJzPVEEEPR+y48z93A0Ed0yXb8pAByGWo/k5YYdYgpY2/2EsOsksJrq7lOHxryrVOn1ejG6oAp8ahvOIQD8sw== picocolors@^1.1.1: version "1.1.1" - resolved "https://registry.yarnpkg.com/picocolors/-/picocolors-1.1.1.tgz#3d321af3eab939b083c8f929a1d12cda81c26b6b" + resolved "https://registry.npmjs.org/picocolors/-/picocolors-1.1.1.tgz" integrity sha512-xceH2snhtb5M9liqDsmEw56le376mTZkEX/jEb/RxNFyegNul7eNslCXP9FDj/Lcu0X8KEyMceP2ntpaHrDEVA== picomatch@^2.0.4, picomatch@^2.2.3, picomatch@^2.3.1: version "2.3.1" - resolved "https://registry.yarnpkg.com/picomatch/-/picomatch-2.3.1.tgz#3ba3833733646d9d3e4995946c1365a67fb07a42" + resolved "https://registry.npmjs.org/picomatch/-/picomatch-2.3.1.tgz" integrity sha512-JU3teHTNjmE2VCGFzuY8EXzCDVwEqB2a8fsIvwaStHhAWJEeVd1o1QD80CU6+ZdEXXSLbSsuLwJjkCBWqRQUVA== pirates@^4.0.4: version "4.0.7" - resolved "https://registry.yarnpkg.com/pirates/-/pirates-4.0.7.tgz#643b4a18c4257c8a65104b73f3049ce9a0a15e22" + resolved "https://registry.npmjs.org/pirates/-/pirates-4.0.7.tgz" integrity sha512-TfySrs/5nm8fQJDcBDuUng3VOUKsd7S+zqvbOTiGXHfxX4wK31ard+hoNuvkicM/2YFzlpDgABOevKSsB4G/FA== pkg-dir@^4.2.0: version "4.2.0" - resolved "https://registry.yarnpkg.com/pkg-dir/-/pkg-dir-4.2.0.tgz#f099133df7ede422e81d1d8448270eeb3e4261f3" + resolved "https://registry.npmjs.org/pkg-dir/-/pkg-dir-4.2.0.tgz" integrity sha512-HRDzbaKjC+AOWVXxAU/x54COGeIv9eb+6CkDSQoNTt4XyWoIJvuPsXizxu/Fr23EiekbtZwmh1IcIG/l/a10GQ== dependencies: find-up "^4.0.0" prettier@^3.4.2: version "3.5.3" - resolved "https://registry.yarnpkg.com/prettier/-/prettier-3.5.3.tgz#4fc2ce0d657e7a02e602549f053b239cb7dfe1b5" + resolved "https://registry.npmjs.org/prettier/-/prettier-3.5.3.tgz" integrity sha512-QQtaxnoDJeAkDvDKWCLiwIXkTgRhwYDEQCghU9Z6q03iyek/rxRh/2lC3HB7P8sWT2xC/y5JDctPLBIGzHKbhw== pretty-format@^29.0.0, pretty-format@^29.7.0: version "29.7.0" - resolved "https://registry.yarnpkg.com/pretty-format/-/pretty-format-29.7.0.tgz#ca42c758310f365bfa71a0bda0a807160b776812" + resolved "https://registry.npmjs.org/pretty-format/-/pretty-format-29.7.0.tgz" integrity sha512-Pdlw/oPxN+aXdmM9R00JVC9WVFoCLTKJvDVLgmJ+qAffBMxsV85l/Lu7sNx4zSzPyoL2euImuEwHhOXdEgNFZQ== dependencies: "@jest/schemas" "^29.6.3" @@ -3945,12 +3948,12 @@ pretty-format@^29.0.0, pretty-format@^29.7.0: process@^0.11.10: version "0.11.10" - resolved "https://registry.yarnpkg.com/process/-/process-0.11.10.tgz#7332300e840161bda3e69a1d1d91a7d4bc16f182" + resolved "https://registry.npmjs.org/process/-/process-0.11.10.tgz" integrity sha512-cdGef/drWFoydD1JsMzuFf8100nZl+GT+yacc2bEced5f9Rjk4z+WtFUTBu9PhOi9j/jfmBPu0mMEY4wIdAF8A== prompts@^2.0.1: version "2.4.2" - resolved "https://registry.yarnpkg.com/prompts/-/prompts-2.4.2.tgz#7b57e73b3a48029ad10ebd44f74b01722a4cb069" + resolved "https://registry.npmjs.org/prompts/-/prompts-2.4.2.tgz" integrity sha512-NxNv/kLguCA7p3jE8oL2aEBsrJWgAakBpgmgK6lpPWV+WuOmY6r2/zbAVnP+T8bQlA0nzHXSJSJW0Hq7ylaD2Q== dependencies: kleur "^3.0.3" @@ -3958,55 +3961,55 @@ prompts@^2.0.1: psl@^1.1.33: version "1.15.0" - resolved "https://registry.yarnpkg.com/psl/-/psl-1.15.0.tgz#bdace31896f1d97cec6a79e8224898ce93d974c6" + resolved "https://registry.npmjs.org/psl/-/psl-1.15.0.tgz" integrity sha512-JZd3gMVBAVQkSs6HdNZo9Sdo0LNcQeMNP3CozBJb3JYC/QUYZTnKxP+f8oWRX4rHP5EurWxqAHTSwUCjlNKa1w== dependencies: punycode "^2.3.1" punycode@^2.1.1, punycode@^2.3.1: version "2.3.1" - resolved "https://registry.yarnpkg.com/punycode/-/punycode-2.3.1.tgz#027422e2faec0b25e1549c3e1bd8309b9133b6e5" + resolved "https://registry.npmjs.org/punycode/-/punycode-2.3.1.tgz" integrity sha512-vYt7UD1U9Wg6138shLtLOvdAu+8DsC/ilFtEVHcH+wydcSpNE20AfSOduf6MkRFahL5FY7X1oU7nKVZFtfq8Fg== pure-rand@^6.0.0: version "6.1.0" - resolved "https://registry.yarnpkg.com/pure-rand/-/pure-rand-6.1.0.tgz#d173cf23258231976ccbdb05247c9787957604f2" + resolved "https://registry.npmjs.org/pure-rand/-/pure-rand-6.1.0.tgz" integrity sha512-bVWawvoZoBYpp6yIoQtQXHZjmz35RSVHnUOTefl8Vcjr8snTPY1wnpSPMWekcFwbxI6gtmT7rSYPFvz71ldiOA== qs@6.11.2: version "6.11.2" - resolved "https://registry.yarnpkg.com/qs/-/qs-6.11.2.tgz#64bea51f12c1f5da1bc01496f48ffcff7c69d7d9" + resolved "https://registry.npmjs.org/qs/-/qs-6.11.2.tgz" integrity sha512-tDNIz22aBzCDxLtVH++VnTfzxlfeK5CbqohpSqpJgj1Wg/cQbStNAz3NuqCs5vV+pjBsK4x4pN9HlVh7rcYRiA== dependencies: side-channel "^1.0.4" qs@^6.13.1: version "6.14.0" - resolved "https://registry.yarnpkg.com/qs/-/qs-6.14.0.tgz#c63fa40680d2c5c941412a0e899c89af60c0a930" + resolved "https://registry.npmjs.org/qs/-/qs-6.14.0.tgz" integrity sha512-YWWTjgABSKcvs/nWBi9PycY/JiPJqOD4JA6o9Sej2AtvSGarXxKC3OQSk4pAarbdQlKAh5D4FCQkJNkW+GAn3w== dependencies: side-channel "^1.1.0" querystringify@^2.1.1: version "2.2.0" - resolved "https://registry.yarnpkg.com/querystringify/-/querystringify-2.2.0.tgz#3345941b4153cb9d082d8eee4cda2016a9aef7f6" + resolved "https://registry.npmjs.org/querystringify/-/querystringify-2.2.0.tgz" integrity sha512-FIqgj2EUvTa7R50u0rGsyTftzjYmv/a3hO345bZNrqabNqjtgiDMgmo4mkUjd+nzU5oF3dClKqFIPUKybUyqoQ== randombytes@^2.1.0: version "2.1.0" - resolved "https://registry.yarnpkg.com/randombytes/-/randombytes-2.1.0.tgz#df6f84372f0270dc65cdf6291349ab7a473d4f2a" + resolved "https://registry.npmjs.org/randombytes/-/randombytes-2.1.0.tgz" integrity sha512-vYl3iOX+4CKUWuxGi9Ukhie6fsqXqS9FE2Zaic4tNFD2N2QQaXOMFbuKK4QmDHC0JO6B1Zp41J0LpT0oR68amQ== dependencies: safe-buffer "^5.1.0" react-is@^18.0.0: version "18.3.1" - resolved "https://registry.yarnpkg.com/react-is/-/react-is-18.3.1.tgz#e83557dc12eae63a99e003a46388b1dcbb44db7e" + resolved "https://registry.npmjs.org/react-is/-/react-is-18.3.1.tgz" integrity sha512-/LLMVyas0ljjAtoYiPqYiL8VWXzUUdThrmU5+n20DZv+a+ClRoevUzw5JxU+Ieh5/c87ytoTBV9G1FiKfNJdmg== readable-stream@^4.5.2: version "4.7.0" - resolved "https://registry.yarnpkg.com/readable-stream/-/readable-stream-4.7.0.tgz#cedbd8a1146c13dfff8dab14068028d58c15ac91" + resolved "https://registry.npmjs.org/readable-stream/-/readable-stream-4.7.0.tgz" integrity sha512-oIGGmcpTLwPga8Bn6/Z75SVaH1z5dUut2ibSyAMVhmUggWpmDn2dapB0n7f8nwaSiRtepAsfJyfXIO5DCVAODg== dependencies: abort-controller "^3.0.0" @@ -4017,17 +4020,17 @@ readable-stream@^4.5.2: require-directory@^2.1.1: version "2.1.1" - resolved "https://registry.yarnpkg.com/require-directory/-/require-directory-2.1.1.tgz#8c64ad5fd30dab1c976e2344ffe7f792a6a6df42" + resolved "https://registry.npmjs.org/require-directory/-/require-directory-2.1.1.tgz" integrity sha512-fGxEI7+wsG9xrvdjsrlmL22OMTTiHRwAMroiEeMgq8gzoLC/PQr7RsRDSTLUg/bZAZtF+TVIkHc6/4RIKrui+Q== require-from-string@^2.0.2: version "2.0.2" - resolved "https://registry.yarnpkg.com/require-from-string/-/require-from-string-2.0.2.tgz#89a7fdd938261267318eafe14f9c32e598c36909" + resolved "https://registry.npmjs.org/require-from-string/-/require-from-string-2.0.2.tgz" integrity sha512-Xf0nWe6RseziFMu+Ap9biiUbmplq6S9/p+7w7YXP/JBHhrUDDUhwa+vANyubuqfZWTveU//DYVGsDG7RKL/vEw== require-in-the-middle@^7.1.1: version "7.5.2" - resolved "https://registry.yarnpkg.com/require-in-the-middle/-/require-in-the-middle-7.5.2.tgz#dc25b148affad42e570cf0e41ba30dc00f1703ec" + resolved "https://registry.npmjs.org/require-in-the-middle/-/require-in-the-middle-7.5.2.tgz" integrity sha512-gAZ+kLqBdHarXB64XpAe2VCjB7rIRv+mU8tfRWziHRJ5umKsIHN2tLLv6EtMw7WCdP19S0ERVMldNvxYCHnhSQ== dependencies: debug "^4.3.5" @@ -4036,60 +4039,60 @@ require-in-the-middle@^7.1.1: requires-port@^1.0.0: version "1.0.0" - resolved "https://registry.yarnpkg.com/requires-port/-/requires-port-1.0.0.tgz#925d2601d39ac485e091cf0da5c6e694dc3dcaff" + resolved "https://registry.npmjs.org/requires-port/-/requires-port-1.0.0.tgz" integrity sha512-KigOCHcocU3XODJxsu8i/j8T9tzT4adHiecwORRQ0ZZFcp7ahwXuRU1m+yuO90C5ZUyGeGfocHDI14M3L3yDAQ== resolve-cwd@^3.0.0: version "3.0.0" - resolved "https://registry.yarnpkg.com/resolve-cwd/-/resolve-cwd-3.0.0.tgz#0f0075f1bb2544766cf73ba6a6e2adfebcb13f2d" + resolved "https://registry.npmjs.org/resolve-cwd/-/resolve-cwd-3.0.0.tgz" integrity sha512-OrZaX2Mb+rJCpH/6CpSqt9xFVpN++x01XnN2ie9g6P5/3xelLAkXWVADpdz1IHD/KFfEXyE6V0U01OQ3UO2rEg== dependencies: resolve-from "^5.0.0" resolve-from@^5.0.0: version "5.0.0" - resolved "https://registry.yarnpkg.com/resolve-from/-/resolve-from-5.0.0.tgz#c35225843df8f776df21c57557bc087e9dfdfc69" + resolved "https://registry.npmjs.org/resolve-from/-/resolve-from-5.0.0.tgz" integrity sha512-qYg9KP24dD5qka9J47d0aVky0N+b4fTU89LN9iDnjB5waksiC49rvMB0PrUJQGoTmH50XPiqOvAjDfaijGxYZw== resolve.exports@^2.0.0: version "2.0.3" - resolved "https://registry.yarnpkg.com/resolve.exports/-/resolve.exports-2.0.3.tgz#41955e6f1b4013b7586f873749a635dea07ebe3f" + resolved "https://registry.npmjs.org/resolve.exports/-/resolve.exports-2.0.3.tgz" integrity sha512-OcXjMsGdhL4XnbShKpAcSqPMzQoYkYyhbEaeSko47MjRP9NfEQMhZkXL1DoFlt9LWQn4YttrdnV6X2OiyzBi+A== resolve@^1.20.0, resolve@^1.22.8: version "1.22.10" - resolved "https://registry.yarnpkg.com/resolve/-/resolve-1.22.10.tgz#b663e83ffb09bbf2386944736baae803029b8b39" + resolved "https://registry.npmjs.org/resolve/-/resolve-1.22.10.tgz" integrity sha512-NPRy+/ncIMeDlTAsuqwKIiferiawhefFJtkNSW0qZJEqMEb+qBt/77B/jGeeek+F0uOeN05CDa6HXbbIgtVX4w== dependencies: is-core-module "^2.16.0" path-parse "^1.0.7" supports-preserve-symlinks-flag "^1.0.0" -safe-buffer@^5.1.0, safe-buffer@~5.2.0: - version "5.2.1" - resolved "https://registry.yarnpkg.com/safe-buffer/-/safe-buffer-5.2.1.tgz#1eaf9fa9bdb1fdd4ec75f58f9cdb4e6b7827eec6" - integrity sha512-rp3So07KcdmmKbGvgaNxQSJr7bGVSVk5S9Eq1F+ppbRo70+YeaDxkw5Dd8NPN+GD6bjnYm2VuPuCXmpuYvmCXQ== - -safe-buffer@~5.1.1: +safe-buffer@^5.1.0, safe-buffer@~5.1.1: version "5.1.2" - resolved "https://registry.yarnpkg.com/safe-buffer/-/safe-buffer-5.1.2.tgz#991ec69d296e0313747d59bdfd2b745c35f8828d" + resolved "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.1.2.tgz" integrity sha512-Gd2UZBJDkXlY7GbJxfsE8/nvKkUEU1G38c1siN6QP6a9PT9MmHB8GnpscSmMJSoF8LOIrt8ud/wPtojys4G6+g== +safe-buffer@~5.2.0: + version "5.2.1" + resolved "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.2.1.tgz" + integrity sha512-rp3So07KcdmmKbGvgaNxQSJr7bGVSVk5S9Eq1F+ppbRo70+YeaDxkw5Dd8NPN+GD6bjnYm2VuPuCXmpuYvmCXQ== + "safer-buffer@>= 2.1.2 < 3.0.0": version "2.1.2" - resolved "https://registry.yarnpkg.com/safer-buffer/-/safer-buffer-2.1.2.tgz#44fa161b0187b9549dd84bb91802f9bd8385cd6a" + resolved "https://registry.npmjs.org/safer-buffer/-/safer-buffer-2.1.2.tgz" integrity sha512-YZo3K82SD7Riyi0E1EQPojLz7kpepnSQI9IyPbHHg1XXXevb5dJI7tpyN2ADxGcQbHG7vcyRHk0cbwqcQriUtg== saxes@^6.0.0: version "6.0.0" - resolved "https://registry.yarnpkg.com/saxes/-/saxes-6.0.0.tgz#fe5b4a4768df4f14a201b1ba6a65c1f3d9988cc5" + resolved "https://registry.npmjs.org/saxes/-/saxes-6.0.0.tgz" integrity sha512-xAg7SOnEhrm5zI3puOOKyy1OMcMlIJZYNJY7xLBwSze0UjhPLnWfj2GF2EpT0jmzaJKIWKHLsaSSajf35bcYnA== dependencies: xmlchars "^2.2.0" schema-utils@^4.3.0, schema-utils@^4.3.2: version "4.3.2" - resolved "https://registry.yarnpkg.com/schema-utils/-/schema-utils-4.3.2.tgz#0c10878bf4a73fd2b1dfd14b9462b26788c806ae" + resolved "https://registry.npmjs.org/schema-utils/-/schema-utils-4.3.2.tgz" integrity sha512-Gn/JaSk/Mt9gYubxTtSn/QCV4em9mpAPiR1rqy/Ocu19u/G9J5WWdNoUT4SiV6mFC3y6cxyFcFwdzPM3FgxGAQ== dependencies: "@types/json-schema" "^7.0.9" @@ -4099,41 +4102,41 @@ schema-utils@^4.3.0, schema-utils@^4.3.2: semver@^6.3.0, semver@^6.3.1: version "6.3.1" - resolved "https://registry.yarnpkg.com/semver/-/semver-6.3.1.tgz#556d2ef8689146e46dcea4bfdd095f3434dffcb4" + resolved "https://registry.npmjs.org/semver/-/semver-6.3.1.tgz" integrity sha512-BR7VvDCVHO+q2xBEWskxS6DJE1qRnb7DxzUrogb71CWoSficBxYsiAGd+Kl0mmq/MprG9yArRkyrQxTO6XjMzA== semver@^7.3.4, semver@^7.5.2, semver@^7.5.3, semver@^7.5.4, semver@^7.7.1: version "7.7.1" - resolved "https://registry.yarnpkg.com/semver/-/semver-7.7.1.tgz#abd5098d82b18c6c81f6074ff2647fd3e7220c9f" + resolved "https://registry.npmjs.org/semver/-/semver-7.7.1.tgz" integrity sha512-hlq8tAfn0m/61p4BVRcPzIGr6LKiMwo4VM6dGi6pt4qcRkmNzTcWq6eCEjEh+qXjkMDvPlOFFSGwQjoEa6gyMA== serialize-javascript@^6.0.2: version "6.0.2" - resolved "https://registry.yarnpkg.com/serialize-javascript/-/serialize-javascript-6.0.2.tgz#defa1e055c83bf6d59ea805d8da862254eb6a6c2" + resolved "https://registry.npmjs.org/serialize-javascript/-/serialize-javascript-6.0.2.tgz" integrity sha512-Saa1xPByTTq2gdeFZYLLo+RFE35NHZkAbqZeWNd3BpzppeVisAqpDjcp8dyf6uIvEqJRd46jemmyA4iFIeVk8g== dependencies: randombytes "^2.1.0" shebang-command@^2.0.0: version "2.0.0" - resolved "https://registry.yarnpkg.com/shebang-command/-/shebang-command-2.0.0.tgz#ccd0af4f8835fbdc265b82461aaf0c36663f34ea" + resolved "https://registry.npmjs.org/shebang-command/-/shebang-command-2.0.0.tgz" integrity sha512-kHxr2zZpYtdmrN1qDjrrX/Z1rR1kG8Dx+gkpK1G4eXmvXswmcE1hTWBWYUzlraYw1/yZp6YuDY77YtvbN0dmDA== dependencies: shebang-regex "^3.0.0" shebang-regex@^3.0.0: version "3.0.0" - resolved "https://registry.yarnpkg.com/shebang-regex/-/shebang-regex-3.0.0.tgz#ae16f1644d873ecad843b0307b143362d4c42172" + resolved "https://registry.npmjs.org/shebang-regex/-/shebang-regex-3.0.0.tgz" integrity sha512-7++dFhtcx3353uBaq8DDR4NuxBetBzC7ZQOhmTQInHEd6bSrXdiEyzCvG07Z44UYdLShWUyXt5M/yhz8ekcb1A== shimmer@^1.2.1: version "1.2.1" - resolved "https://registry.yarnpkg.com/shimmer/-/shimmer-1.2.1.tgz#610859f7de327b587efebf501fb43117f9aff337" + resolved "https://registry.npmjs.org/shimmer/-/shimmer-1.2.1.tgz" integrity sha512-sQTKC1Re/rM6XyFM6fIAGHRPVGvyXfgzIDvzoq608vM+jeyVD0Tu1E6Np0Kc2zAIFWIj963V2800iF/9LPieQw== side-channel-list@^1.0.0: version "1.0.0" - resolved "https://registry.yarnpkg.com/side-channel-list/-/side-channel-list-1.0.0.tgz#10cb5984263115d3b7a0e336591e290a830af8ad" + resolved "https://registry.npmjs.org/side-channel-list/-/side-channel-list-1.0.0.tgz" integrity sha512-FCLHtRD/gnpCiCHEiJLOwdmFP+wzCmDEkc9y7NsYxeF4u7Btsn1ZuwgwJGxImImHicJArLP4R0yX4c2KCrMrTA== dependencies: es-errors "^1.3.0" @@ -4141,7 +4144,7 @@ side-channel-list@^1.0.0: side-channel-map@^1.0.1: version "1.0.1" - resolved "https://registry.yarnpkg.com/side-channel-map/-/side-channel-map-1.0.1.tgz#d6bb6b37902c6fef5174e5f533fab4c732a26f42" + resolved "https://registry.npmjs.org/side-channel-map/-/side-channel-map-1.0.1.tgz" integrity sha512-VCjCNfgMsby3tTdo02nbjtM/ewra6jPHmpThenkTYh8pG9ucZ/1P8So4u4FGBek/BjpOVsDCMoLA/iuBKIFXRA== dependencies: call-bound "^1.0.2" @@ -4151,7 +4154,7 @@ side-channel-map@^1.0.1: side-channel-weakmap@^1.0.2: version "1.0.2" - resolved "https://registry.yarnpkg.com/side-channel-weakmap/-/side-channel-weakmap-1.0.2.tgz#11dda19d5368e40ce9ec2bdc1fb0ecbc0790ecea" + resolved "https://registry.npmjs.org/side-channel-weakmap/-/side-channel-weakmap-1.0.2.tgz" integrity sha512-WPS/HvHQTYnHisLo9McqBHOJk2FkHO/tlpvldyrnem4aeQp4hai3gythswg6p01oSoTl58rcpiFAjF2br2Ak2A== dependencies: call-bound "^1.0.2" @@ -4162,7 +4165,7 @@ side-channel-weakmap@^1.0.2: side-channel@^1.0.4, side-channel@^1.1.0: version "1.1.0" - resolved "https://registry.yarnpkg.com/side-channel/-/side-channel-1.1.0.tgz#c3fcff9c4da932784873335ec9765fa94ff66bc9" + resolved "https://registry.npmjs.org/side-channel/-/side-channel-1.1.0.tgz" integrity sha512-ZX99e6tRweoUXqR+VBrslhda51Nh5MTQwou5tnUDgbtyM0dBgmhEDtWGP/xbKn6hqfPRHujUNwz5fy/wbbhnpw== dependencies: es-errors "^1.3.0" @@ -4173,22 +4176,22 @@ side-channel@^1.0.4, side-channel@^1.1.0: signal-exit@^3.0.3, signal-exit@^3.0.7: version "3.0.7" - resolved "https://registry.yarnpkg.com/signal-exit/-/signal-exit-3.0.7.tgz#a9a1767f8af84155114eaabd73f99273c8f59ad9" + resolved "https://registry.npmjs.org/signal-exit/-/signal-exit-3.0.7.tgz" integrity sha512-wnD2ZE+l+SPC/uoS0vXeE9L1+0wuaMqKlfz9AMUo38JsyLSBWSFcHR1Rri62LZc12vLr1gb3jl7iwQhgwpAbGQ== sisteransi@^1.0.5: version "1.0.5" - resolved "https://registry.yarnpkg.com/sisteransi/-/sisteransi-1.0.5.tgz#134d681297756437cc05ca01370d3a7a571075ed" + resolved "https://registry.npmjs.org/sisteransi/-/sisteransi-1.0.5.tgz" integrity sha512-bLGGlR1QxBcynn2d5YmDX4MGjlZvy2MRBDRNHLJ8VI6l6+9FUiyTFNJ0IveOSP0bcXgVDPRcfGqA0pjaqUpfVg== slash@^3.0.0: version "3.0.0" - resolved "https://registry.yarnpkg.com/slash/-/slash-3.0.0.tgz#6539be870c165adbd5240220dbe361f1bc4d4634" + resolved "https://registry.npmjs.org/slash/-/slash-3.0.0.tgz" integrity sha512-g9Q1haeby36OSStwb4ntCGGGaKsaVSjQ68fBxoQcutl5fS1vuY18H3wSt3jFyFtrkx+Kz0V1G85A4MyAdDMi2Q== source-map-support@0.5.13: version "0.5.13" - resolved "https://registry.yarnpkg.com/source-map-support/-/source-map-support-0.5.13.tgz#31b24a9c2e73c2de85066c0feb7d44767ed52932" + resolved "https://registry.npmjs.org/source-map-support/-/source-map-support-0.5.13.tgz" integrity sha512-SHSKFHadjVA5oR4PPqhtAVdcBWwRYVd6g6cAXnIbRiIwc2EhPrTuKUBdSLvlEKyIP3GCf89fltvcZiP9MMFA1w== dependencies: buffer-from "^1.0.0" @@ -4196,7 +4199,7 @@ source-map-support@0.5.13: source-map-support@~0.5.20: version "0.5.21" - resolved "https://registry.yarnpkg.com/source-map-support/-/source-map-support-0.5.21.tgz#04fe7c7f9e1ed2d662233c28cb2b35b9f63f6e4f" + resolved "https://registry.npmjs.org/source-map-support/-/source-map-support-0.5.21.tgz" integrity sha512-uBHU3L3czsIyYXKX88fdrGovxdSCoTGDRZ6SYXtSRxLZUzHg5P/66Ht6uoUlHu9EZod+inXhKo3qQgwXUT/y1w== dependencies: buffer-from "^1.0.0" @@ -4204,34 +4207,34 @@ source-map-support@~0.5.20: source-map@^0.5.0: version "0.5.7" - resolved "https://registry.yarnpkg.com/source-map/-/source-map-0.5.7.tgz#8a039d2d1021d22d1ea14c80d8ea468ba2ef3fcc" + resolved "https://registry.npmjs.org/source-map/-/source-map-0.5.7.tgz" integrity sha512-LbrmJOMUSdEVxIKvdcJzQC+nQhe8FUZQTXQy6+I75skNgn3OoQ0DZA8YnFa7gp8tqtL3KPf1kmo0R5DoApeSGQ== source-map@^0.6.0, source-map@^0.6.1, source-map@~0.6.1: version "0.6.1" - resolved "https://registry.yarnpkg.com/source-map/-/source-map-0.6.1.tgz#74722af32e9614e9c287a8d0bbde48b5e2f1a263" + resolved "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz" integrity sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g== source-map@^0.7.4: version "0.7.4" - resolved "https://registry.yarnpkg.com/source-map/-/source-map-0.7.4.tgz#a9bbe705c9d8846f4e08ff6765acf0f1b0898656" + resolved "https://registry.npmjs.org/source-map/-/source-map-0.7.4.tgz" integrity sha512-l3BikUxvPOcn5E74dZiq5BGsTb5yEwhaTSzccU6t4sDOH8NWJCstKO5QT2CvtFoK6F0saL7p9xHAqHOlCPJygA== sprintf-js@~1.0.2: version "1.0.3" - resolved "https://registry.yarnpkg.com/sprintf-js/-/sprintf-js-1.0.3.tgz#04e6926f662895354f3dd015203633b857297e2c" + resolved "https://registry.npmjs.org/sprintf-js/-/sprintf-js-1.0.3.tgz" integrity sha512-D9cPgkvLlV3t3IzL0D0YLvGA9Ahk4PcvVwUbN0dSGr1aP0Nrt4AEnTUbuGvquEC0mA64Gqt1fzirlRs5ibXx8g== stack-utils@^2.0.3: version "2.0.6" - resolved "https://registry.yarnpkg.com/stack-utils/-/stack-utils-2.0.6.tgz#aaf0748169c02fc33c8232abccf933f54a1cc34f" + resolved "https://registry.npmjs.org/stack-utils/-/stack-utils-2.0.6.tgz" integrity sha512-XlkWvfIm6RmsWtNJx+uqtKLS8eqFbxUg0ZzLXqY0caEy9l7hruX8IpiDnjsLavoBgqCCR71TqWO8MaXYheJ3RQ== dependencies: escape-string-regexp "^2.0.0" string-length@^4.0.1: version "4.0.2" - resolved "https://registry.yarnpkg.com/string-length/-/string-length-4.0.2.tgz#a8a8dc7bd5c1a82b9b3c8b87e125f66871b6e57a" + resolved "https://registry.npmjs.org/string-length/-/string-length-4.0.2.tgz" integrity sha512-+l6rNN5fYHNhZZy41RXsYptCjA2Igmq4EG7kZAYFQI1E1VTXarr6ZPXBg6eq7Y6eK4FEhY6AJlyuFIb/v/S0VQ== dependencies: char-regex "^1.0.2" @@ -4239,7 +4242,7 @@ string-length@^4.0.1: string-width@^4.1.0, string-width@^4.2.0, string-width@^4.2.3: version "4.2.3" - resolved "https://registry.yarnpkg.com/string-width/-/string-width-4.2.3.tgz#269c7117d27b05ad2e536830a8ec895ef9c6d010" + resolved "https://registry.npmjs.org/string-width/-/string-width-4.2.3.tgz" integrity sha512-wKyQRQpjJ0sIp62ErSZdGsjMJWsap5oRNihHhu6G7JVO/9jIB6UyevL+tXuOqrng8j/cxKTWyWUwvSTriiZz/g== dependencies: emoji-regex "^8.0.0" @@ -4248,70 +4251,70 @@ string-width@^4.1.0, string-width@^4.2.0, string-width@^4.2.3: string_decoder@^1.3.0: version "1.3.0" - resolved "https://registry.yarnpkg.com/string_decoder/-/string_decoder-1.3.0.tgz#42f114594a46cf1a8e30b0a84f56c78c3edac21e" + resolved "https://registry.npmjs.org/string_decoder/-/string_decoder-1.3.0.tgz" integrity sha512-hkRX8U1WjJFd8LsDJ2yQ/wWWxaopEsABU1XfkM8A+j0+85JAGppt16cr1Whg6KIbb4okU6Mql6BOj+uup/wKeA== dependencies: safe-buffer "~5.2.0" strip-ansi@^6.0.0, strip-ansi@^6.0.1: version "6.0.1" - resolved "https://registry.yarnpkg.com/strip-ansi/-/strip-ansi-6.0.1.tgz#9e26c63d30f53443e9489495b2105d37b67a85d9" + resolved "https://registry.npmjs.org/strip-ansi/-/strip-ansi-6.0.1.tgz" integrity sha512-Y38VPSHcqkFrCpFnQ9vuSXmquuv5oXOKpGeT6aGrr3o3Gc9AlVa6JBfUSOCnbxGGZF+/0ooI7KrPuUSztUdU5A== dependencies: ansi-regex "^5.0.1" strip-bom@^4.0.0: version "4.0.0" - resolved "https://registry.yarnpkg.com/strip-bom/-/strip-bom-4.0.0.tgz#9c3505c1db45bcedca3d9cf7a16f5c5aa3901878" + resolved "https://registry.npmjs.org/strip-bom/-/strip-bom-4.0.0.tgz" integrity sha512-3xurFv5tEgii33Zi8Jtp55wEIILR9eh34FAW00PZf+JnSsTmV/ioewSgQl97JHvgjoRGwPShsWm+IdrxB35d0w== strip-final-newline@^2.0.0: version "2.0.0" - resolved "https://registry.yarnpkg.com/strip-final-newline/-/strip-final-newline-2.0.0.tgz#89b852fb2fcbe936f6f4b3187afb0a12c1ab58ad" + resolved "https://registry.npmjs.org/strip-final-newline/-/strip-final-newline-2.0.0.tgz" integrity sha512-BrpvfNAE3dcvq7ll3xVumzjKjZQ5tI1sEUIKr3Uoks0XUl45St3FlatVqef9prk4jRDzhW6WZg+3bk93y6pLjA== strip-json-comments@^3.1.1: version "3.1.1" - resolved "https://registry.yarnpkg.com/strip-json-comments/-/strip-json-comments-3.1.1.tgz#31f1281b3832630434831c310c01cccda8cbe006" + resolved "https://registry.npmjs.org/strip-json-comments/-/strip-json-comments-3.1.1.tgz" integrity sha512-6fPc+R4ihwqP6N/aIv2f1gMH8lOVtWQHoqC4yK6oSDVVocumAsfCqjkXnqiYMhmMwS/mEHLp7Vehlt3ql6lEig== strnum@^1.0.5: version "1.1.2" - resolved "https://registry.yarnpkg.com/strnum/-/strnum-1.1.2.tgz#57bca4fbaa6f271081715dbc9ed7cee5493e28e4" + resolved "https://registry.npmjs.org/strnum/-/strnum-1.1.2.tgz" integrity sha512-vrN+B7DBIoTTZjnPNewwhx6cBA/H+IS7rfW68n7XxC1y7uoiGQBxaKzqucGUgavX15dJgiGztLJ8vxuEzwqBdA== supports-color@^7.1.0: version "7.2.0" - resolved "https://registry.yarnpkg.com/supports-color/-/supports-color-7.2.0.tgz#1b7dcdcb32b8138801b3e478ba6a51caa89648da" + resolved "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz" integrity sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw== dependencies: has-flag "^4.0.0" supports-color@^8.0.0: version "8.1.1" - resolved "https://registry.yarnpkg.com/supports-color/-/supports-color-8.1.1.tgz#cd6fc17e28500cff56c1b86c0a7fd4a54a73005c" + resolved "https://registry.npmjs.org/supports-color/-/supports-color-8.1.1.tgz" integrity sha512-MpUEN2OodtUzxvKQl72cUF7RQ5EiHsGvSsVG0ia9c5RbWGL2CI4C7EpPS8UTBIplnlzZiNuV56w+FuNxy3ty2Q== dependencies: has-flag "^4.0.0" supports-preserve-symlinks-flag@^1.0.0: version "1.0.0" - resolved "https://registry.yarnpkg.com/supports-preserve-symlinks-flag/-/supports-preserve-symlinks-flag-1.0.0.tgz#6eda4bd344a3c94aea376d4cc31bc77311039e09" + resolved "https://registry.npmjs.org/supports-preserve-symlinks-flag/-/supports-preserve-symlinks-flag-1.0.0.tgz" integrity sha512-ot0WnXS9fgdkgIcePe6RHNk1WA8+muPa6cSjeR3V8K27q9BB1rTE3R1p7Hv0z1ZyAc8s6Vvv8DIyWf681MAt0w== symbol-tree@^3.2.4: version "3.2.4" - resolved "https://registry.yarnpkg.com/symbol-tree/-/symbol-tree-3.2.4.tgz#430637d248ba77e078883951fb9aa0eed7c63fa2" + resolved "https://registry.npmjs.org/symbol-tree/-/symbol-tree-3.2.4.tgz" integrity sha512-9QNk5KwDF+Bvz+PyObkmSYjI5ksVUYtjW7AU22r2NKcfLJcXp96hkDWU3+XndOsUb+AQ9QhfzfCT2O+CNWT5Tw== tapable@^2.1.1, tapable@^2.2.0: version "2.2.1" - resolved "https://registry.yarnpkg.com/tapable/-/tapable-2.2.1.tgz#1967a73ef4060a82f12ab96af86d52fdb76eeca0" + resolved "https://registry.npmjs.org/tapable/-/tapable-2.2.1.tgz" integrity sha512-GNzQvQTOIP6RyTfE2Qxb8ZVlNmw0n88vp1szwWRimP02mnTsx3Wtn5qRdqY9w2XduFNUgvOwhNnQsjwCp+kqaQ== terser-webpack-plugin@^5.3.11: version "5.3.14" - resolved "https://registry.yarnpkg.com/terser-webpack-plugin/-/terser-webpack-plugin-5.3.14.tgz#9031d48e57ab27567f02ace85c7d690db66c3e06" + resolved "https://registry.npmjs.org/terser-webpack-plugin/-/terser-webpack-plugin-5.3.14.tgz" integrity sha512-vkZjpUjb6OMS7dhV+tILUW6BhpDR7P2L/aQSAv+Uwk+m8KATX9EccViHTJR2qDtACKPIYndLGCyl3FMo+r2LMw== dependencies: "@jridgewell/trace-mapping" "^0.3.25" @@ -4322,7 +4325,7 @@ terser-webpack-plugin@^5.3.11: terser@^5.31.1: version "5.39.0" - resolved "https://registry.yarnpkg.com/terser/-/terser-5.39.0.tgz#0e82033ed57b3ddf1f96708d123cca717d86ca3a" + resolved "https://registry.npmjs.org/terser/-/terser-5.39.0.tgz" integrity sha512-LBAhFyLho16harJoWMg/nZsQYgTrg5jXOn2nCYjRUcZZEdE3qa2zb8QEDRUGVZBW4rlazf2fxkg8tztybTaqWw== dependencies: "@jridgewell/source-map" "^0.3.3" @@ -4332,7 +4335,7 @@ terser@^5.31.1: test-exclude@^6.0.0: version "6.0.0" - resolved "https://registry.yarnpkg.com/test-exclude/-/test-exclude-6.0.0.tgz#04a8698661d805ea6fa293b6cb9e63ac044ef15e" + resolved "https://registry.npmjs.org/test-exclude/-/test-exclude-6.0.0.tgz" integrity sha512-cAGWPIyOHU6zlmg88jwm7VRyXnMN7iV68OGAbYDk/Mh/xC/pzVPlQtY6ngoIH/5/tciuhGfvESU8GrHrcxD56w== dependencies: "@istanbuljs/schema" "^0.1.2" @@ -4341,24 +4344,24 @@ test-exclude@^6.0.0: tmpl@1.0.5: version "1.0.5" - resolved "https://registry.yarnpkg.com/tmpl/-/tmpl-1.0.5.tgz#8683e0b902bb9c20c4f726e3c0b69f36518c07cc" + resolved "https://registry.npmjs.org/tmpl/-/tmpl-1.0.5.tgz" integrity sha512-3f0uOEAQwIqGuWW2MVzYg8fV/QNnc/IpuJNG837rLuczAaLVHslWHZQj4IGiEl5Hs3kkbhwL9Ab7Hrsmuj+Smw== to-fast-properties@^2.0.0: version "2.0.0" - resolved "https://registry.yarnpkg.com/to-fast-properties/-/to-fast-properties-2.0.0.tgz#dc5e698cbd079265bc73e0377681a4e4e83f616e" + resolved "https://registry.npmjs.org/to-fast-properties/-/to-fast-properties-2.0.0.tgz" integrity sha512-/OaKK0xYrs3DmxRYqL/yDc+FxFUVYhDlXMhRmv3z915w2HF1tnN1omB354j8VUGO/hbRzyD6Y3sA7v7GS/ceog== to-regex-range@^5.0.1: version "5.0.1" - resolved "https://registry.yarnpkg.com/to-regex-range/-/to-regex-range-5.0.1.tgz#1648c44aae7c8d988a326018ed72f5b4dd0392e4" + resolved "https://registry.npmjs.org/to-regex-range/-/to-regex-range-5.0.1.tgz" integrity sha512-65P7iz6X5yEr1cwcgvQxbbIw7Uk3gOy5dIdtZ4rDveLqhrdJP+Li/Hx6tyK0NEb+2GCyneCMJiGqrADCSNk8sQ== dependencies: is-number "^7.0.0" tough-cookie@^4.1.2: version "4.1.4" - resolved "https://registry.yarnpkg.com/tough-cookie/-/tough-cookie-4.1.4.tgz#945f1461b45b5a8c76821c33ea49c3ac192c1b36" + resolved "https://registry.npmjs.org/tough-cookie/-/tough-cookie-4.1.4.tgz" integrity sha512-Loo5UUvLD9ScZ6jh8beX1T6sO1w2/MpCRpEP7V280GKMVUQ0Jzar2U3UJPsrdbziLEMMhu3Ujnq//rhiFuIeag== dependencies: psl "^1.1.33" @@ -4368,19 +4371,19 @@ tough-cookie@^4.1.2: tr46@^3.0.0: version "3.0.0" - resolved "https://registry.yarnpkg.com/tr46/-/tr46-3.0.0.tgz#555c4e297a950617e8eeddef633c87d4d9d6cbf9" + resolved "https://registry.npmjs.org/tr46/-/tr46-3.0.0.tgz" integrity sha512-l7FvfAHlcmulp8kr+flpQZmVwtu7nfRV7NZujtN0OqES8EL4O4e0qqzL0DC5gAvx/ZC/9lk6rhcUwYvkBnBnYA== dependencies: punycode "^2.1.1" tr46@~0.0.3: version "0.0.3" - resolved "https://registry.yarnpkg.com/tr46/-/tr46-0.0.3.tgz#8184fd347dac9cdc185992f3a6622e14b9d9ab6a" + resolved "https://registry.npmjs.org/tr46/-/tr46-0.0.3.tgz" integrity sha512-N3WMsuqV66lT30CrXNbEjx4GEwlow3v6rr4mCcv6prnfwhS01rkgyFdjPNBYd9br7LpXV1+Emh01fHnq2Gdgrw== ts-jest@^29.1.1: version "29.3.2" - resolved "https://registry.yarnpkg.com/ts-jest/-/ts-jest-29.3.2.tgz#0576cdf0a507f811fe73dcd16d135ce89f8156cb" + resolved "https://registry.npmjs.org/ts-jest/-/ts-jest-29.3.2.tgz" integrity sha512-bJJkrWc6PjFVz5g2DGCNUo8z7oFEYaz1xP1NpeDU7KNLMWPpEyV8Chbpkn8xjzgRDpQhnGMyvyldoL7h8JXyug== dependencies: bs-logger "^0.2.6" @@ -4396,7 +4399,7 @@ ts-jest@^29.1.1: ts-loader@^9.5.1: version "9.5.2" - resolved "https://registry.yarnpkg.com/ts-loader/-/ts-loader-9.5.2.tgz#1f3d7f4bb709b487aaa260e8f19b301635d08020" + resolved "https://registry.npmjs.org/ts-loader/-/ts-loader-9.5.2.tgz" integrity sha512-Qo4piXvOTWcMGIgRiuFa6nHNm+54HbYaZCKqc9eeZCLRy3XqafQgwX2F7mofrbJG3g7EEb+lkiR+z2Lic2s3Zw== dependencies: chalk "^4.1.0" @@ -4407,52 +4410,47 @@ ts-loader@^9.5.1: tslib@^1.11.1: version "1.14.1" - resolved "https://registry.yarnpkg.com/tslib/-/tslib-1.14.1.tgz#cf2d38bdc34a134bcaf1091c41f6619e2f672d00" + resolved "https://registry.npmjs.org/tslib/-/tslib-1.14.1.tgz" integrity sha512-Xni35NKzjgMrwevysHTCArtLDpPvye8zV/0E4EyYn43P7/7qvQwPh9BGkHewbMulVntbigmcT7rdX3BNo9wRJg== tslib@^2.3.1, tslib@^2.5.0, tslib@^2.6.2, tslib@^2.8.1: version "2.8.1" - resolved "https://registry.yarnpkg.com/tslib/-/tslib-2.8.1.tgz#612efe4ed235d567e8aba5f2a5fab70280ade83f" + resolved "https://registry.npmjs.org/tslib/-/tslib-2.8.1.tgz" integrity sha512-oJFu94HQb+KVduSUQL7wnpmqnfmLsOA/nAh6b6EH0wCEoK0/mPeXU6c3wKDV83MkOuHPRHtSXKKU99IBazS/2w== type-detect@4.0.8: version "4.0.8" - resolved "https://registry.yarnpkg.com/type-detect/-/type-detect-4.0.8.tgz#7646fb5f18871cfbb7749e69bd39a6388eb7450c" + resolved "https://registry.npmjs.org/type-detect/-/type-detect-4.0.8.tgz" integrity sha512-0fr/mIH1dlO+x7TlcMy+bIDqKPsw/70tVyeHW787goQjhmqaZe10uwLujubK9q9Lg6Fiho1KUKDYz0Z7k7g5/g== type-fest@^0.21.3: version "0.21.3" - resolved "https://registry.yarnpkg.com/type-fest/-/type-fest-0.21.3.tgz#d260a24b0198436e133fa26a524a6d65fa3b2e37" + resolved "https://registry.npmjs.org/type-fest/-/type-fest-0.21.3.tgz" integrity sha512-t0rzBq87m3fVcduHDUFhKmyyX+9eo6WQjZvf51Ea/M0Q7+T374Jp1aUiyUl0GKxp8M/OETVHSDvmkyPgvX+X2w== type-fest@^4.39.1: version "4.41.0" - resolved "https://registry.yarnpkg.com/type-fest/-/type-fest-4.41.0.tgz#6ae1c8e5731273c2bf1f58ad39cbae2c91a46c58" + resolved "https://registry.npmjs.org/type-fest/-/type-fest-4.41.0.tgz" integrity sha512-TeTSQ6H5YHvpqVwBRcnLDCBnDOHWYu7IvGbHT6N8AOymcr9PJGjc1GTtiWZTYg0NCgYwvnYWEkVChQAr9bjfwA== typescript@~5.7.2: version "5.7.3" - resolved "https://registry.yarnpkg.com/typescript/-/typescript-5.7.3.tgz#919b44a7dbb8583a9b856d162be24a54bf80073e" + resolved "https://registry.npmjs.org/typescript/-/typescript-5.7.3.tgz" integrity sha512-84MVSjMEHP+FQRPy3pX9sTVV/INIex71s9TL2Gm5FG/WG1SqXeKyZ0k7/blY/4FdOzI12CBy1vGc4og/eus0fw== undici-types@~5.26.4: version "5.26.5" - resolved "https://registry.yarnpkg.com/undici-types/-/undici-types-5.26.5.tgz#bcd539893d00b56e964fd2657a4866b221a65617" + resolved "https://registry.npmjs.org/undici-types/-/undici-types-5.26.5.tgz" integrity sha512-JlCMO+ehdEIKqlFxk6IfVoAUVmgz7cU7zD/h9XZ0qzeosSHmUJVOzSQvvYSYWXkFXC+IfLKSIffhv0sVZup6pA== -undici-types@~6.21.0: - version "6.21.0" - resolved "https://registry.yarnpkg.com/undici-types/-/undici-types-6.21.0.tgz#691d00af3909be93a7faa13be61b3a5b50ef12cb" - integrity sha512-iwDZqg0QAGrg9Rav5H4n0M64c3mkR59cJ6wQp+7C4nI0gsmExaedaYLNO44eT4AtBBwjbTiGPMlt2Md0T9H9JQ== - universalify@^0.2.0: version "0.2.0" - resolved "https://registry.yarnpkg.com/universalify/-/universalify-0.2.0.tgz#6451760566fa857534745ab1dde952d1b1761be0" + resolved "https://registry.npmjs.org/universalify/-/universalify-0.2.0.tgz" integrity sha512-CJ1QgKmNg3CwvAv/kOFmtnEN05f0D/cn9QntgNOQlQF9dgvVTHj3t+8JPdjqawCHk7V/KA+fbUqzZ9XWhcqPUg== update-browserslist-db@^1.1.3: version "1.1.3" - resolved "https://registry.yarnpkg.com/update-browserslist-db/-/update-browserslist-db-1.1.3.tgz#348377dd245216f9e7060ff50b15a1b740b75420" + resolved "https://registry.npmjs.org/update-browserslist-db/-/update-browserslist-db-1.1.3.tgz" integrity sha512-UxhIZQ+QInVdunkDAaiazvvT/+fXL5Osr0JZlJulepYu6Jd7qJtDZjlur0emRlT71EN3ScPoE7gvsuIKKNavKw== dependencies: escalade "^3.2.0" @@ -4460,12 +4458,12 @@ update-browserslist-db@^1.1.3: url-join@4.0.1: version "4.0.1" - resolved "https://registry.yarnpkg.com/url-join/-/url-join-4.0.1.tgz#b642e21a2646808ffa178c4c5fda39844e12cde7" + resolved "https://registry.npmjs.org/url-join/-/url-join-4.0.1.tgz" integrity sha512-jk1+QP6ZJqyOiuEI9AEWQfju/nB2Pw466kbA0LEZljHwKeMgd9WrAEgEGxjPDD2+TNbbb37rTyhEfrCXfuKXnA== url-parse@^1.5.3: version "1.5.10" - resolved "https://registry.yarnpkg.com/url-parse/-/url-parse-1.5.10.tgz#9d3c2f736c1d75dd3bd2be507dcc111f1e2ea9c1" + resolved "https://registry.npmjs.org/url-parse/-/url-parse-1.5.10.tgz" integrity sha512-WypcfiRhfeUP9vvF0j6rw0J3hrWrw6iZv3+22h6iRMJ/8z1Tj6XfLP4DsUix5MhMPnXpiHDoKyoZ/bdCkwBCiQ== dependencies: querystringify "^2.1.1" @@ -4473,12 +4471,12 @@ url-parse@^1.5.3: uuid@^9.0.1: version "9.0.1" - resolved "https://registry.yarnpkg.com/uuid/-/uuid-9.0.1.tgz#e188d4c8853cc722220392c424cd637f32293f30" + resolved "https://registry.npmjs.org/uuid/-/uuid-9.0.1.tgz" integrity sha512-b+1eJOlsR9K8HJpow9Ok3fiWOWSIcIzXodvv0rQjVoOVNpWMpxf1wZNpt4y9h10odCNrqnYp1OBzRktckBe3sA== v8-to-istanbul@^9.0.1: version "9.3.0" - resolved "https://registry.yarnpkg.com/v8-to-istanbul/-/v8-to-istanbul-9.3.0.tgz#b9572abfa62bd556c16d75fdebc1a411d5ff3175" + resolved "https://registry.npmjs.org/v8-to-istanbul/-/v8-to-istanbul-9.3.0.tgz" integrity sha512-kiGUalWN+rgBJ/1OHZsBtU4rXZOfj/7rKQxULKlIzwzQSvMJUUNgPwJEEh7gU6xEVxC0ahoOBvN2YI8GH6FNgA== dependencies: "@jridgewell/trace-mapping" "^0.3.12" @@ -4487,21 +4485,21 @@ v8-to-istanbul@^9.0.1: w3c-xmlserializer@^4.0.0: version "4.0.0" - resolved "https://registry.yarnpkg.com/w3c-xmlserializer/-/w3c-xmlserializer-4.0.0.tgz#aebdc84920d806222936e3cdce408e32488a3073" + resolved "https://registry.npmjs.org/w3c-xmlserializer/-/w3c-xmlserializer-4.0.0.tgz" integrity sha512-d+BFHzbiCx6zGfz0HyQ6Rg69w9k19nviJspaj4yNscGjrHu94sVP+aRm75yEbCh+r2/yR+7q6hux9LVtbuTGBw== dependencies: xml-name-validator "^4.0.0" walker@^1.0.8: version "1.0.8" - resolved "https://registry.yarnpkg.com/walker/-/walker-1.0.8.tgz#bd498db477afe573dc04185f011d3ab8a8d7653f" + resolved "https://registry.npmjs.org/walker/-/walker-1.0.8.tgz" integrity sha512-ts/8E8l5b7kY0vlWLewOkDXMmPdLcVV4GmOQLyxuSswIJsweeFZtAsMF7k1Nszz+TYBQrlYRmzOnr398y1JemQ== dependencies: makeerror "1.0.12" watchpack@^2.4.1: version "2.4.2" - resolved "https://registry.yarnpkg.com/watchpack/-/watchpack-2.4.2.tgz#2feeaed67412e7c33184e5a79ca738fbd38564da" + resolved "https://registry.npmjs.org/watchpack/-/watchpack-2.4.2.tgz" integrity sha512-TnbFSbcOCcDgjZ4piURLCbJ3nJhznVh9kw6F6iokjiFPl8ONxe9A6nMDVXDiNbrSfLILs6vB07F7wLBrwPYzJw== dependencies: glob-to-regexp "^0.4.1" @@ -4509,27 +4507,27 @@ watchpack@^2.4.1: web-streams-polyfill@4.0.0-beta.3: version "4.0.0-beta.3" - resolved "https://registry.yarnpkg.com/web-streams-polyfill/-/web-streams-polyfill-4.0.0-beta.3.tgz#2898486b74f5156095e473efe989dcf185047a38" + resolved "https://registry.npmjs.org/web-streams-polyfill/-/web-streams-polyfill-4.0.0-beta.3.tgz" integrity sha512-QW95TCTaHmsYfHDybGMwO5IJIM93I/6vTRk+daHTWFPhwh+C8Cg7j7XyKrwrj8Ib6vYXe0ocYNrmzY4xAAN6ug== webidl-conversions@^3.0.0: version "3.0.1" - resolved "https://registry.yarnpkg.com/webidl-conversions/-/webidl-conversions-3.0.1.tgz#24534275e2a7bc6be7bc86611cc16ae0a5654871" + resolved "https://registry.npmjs.org/webidl-conversions/-/webidl-conversions-3.0.1.tgz" integrity sha512-2JAn3z8AR6rjK8Sm8orRC0h/bcl/DqL7tRPdGZ4I1CjdF+EaMLmYxBHyXuKL849eucPFhvBoxMsflfOb8kxaeQ== webidl-conversions@^7.0.0: version "7.0.0" - resolved "https://registry.yarnpkg.com/webidl-conversions/-/webidl-conversions-7.0.0.tgz#256b4e1882be7debbf01d05f0aa2039778ea080a" + resolved "https://registry.npmjs.org/webidl-conversions/-/webidl-conversions-7.0.0.tgz" integrity sha512-VwddBukDzu71offAQR975unBIGqfKZpM+8ZX6ySk8nYhVoo5CYaZyzt3YBvYtRtO+aoGlqxPg/B87NGVZ/fu6g== webpack-sources@^3.2.3: version "3.2.3" - resolved "https://registry.yarnpkg.com/webpack-sources/-/webpack-sources-3.2.3.tgz#2d4daab8451fd4b240cc27055ff6a0c2ccea0cde" + resolved "https://registry.npmjs.org/webpack-sources/-/webpack-sources-3.2.3.tgz" integrity sha512-/DyMEOrDgLKKIG0fmvtz+4dUX/3Ghozwgm6iPp8KRhvn+eQf9+Q7GWxVNMk3+uCPWfdXYC4ExGBckIXdFEfH1w== webpack@^5.97.1: version "5.99.8" - resolved "https://registry.yarnpkg.com/webpack/-/webpack-5.99.8.tgz#dd31a020b7c092d30c4c6d9a4edb95809e7f5946" + resolved "https://registry.npmjs.org/webpack/-/webpack-5.99.8.tgz" integrity sha512-lQ3CPiSTpfOnrEGeXDwoq5hIGzSjmwD72GdfVzF7CQAI7t47rJG9eDWvcEkEn3CUQymAElVvDg3YNTlCYj+qUQ== dependencies: "@types/eslint-scope" "^3.7.7" @@ -4559,19 +4557,19 @@ webpack@^5.97.1: whatwg-encoding@^2.0.0: version "2.0.0" - resolved "https://registry.yarnpkg.com/whatwg-encoding/-/whatwg-encoding-2.0.0.tgz#e7635f597fd87020858626805a2729fa7698ac53" + resolved "https://registry.npmjs.org/whatwg-encoding/-/whatwg-encoding-2.0.0.tgz" integrity sha512-p41ogyeMUrw3jWclHWTQg1k05DSVXPLcVxRTYsXUk+ZooOCZLcoYgPZ/HL/D/N+uQPOtcp1me1WhBEaX02mhWg== dependencies: iconv-lite "0.6.3" whatwg-mimetype@^3.0.0: version "3.0.0" - resolved "https://registry.yarnpkg.com/whatwg-mimetype/-/whatwg-mimetype-3.0.0.tgz#5fa1a7623867ff1af6ca3dc72ad6b8a4208beba7" + resolved "https://registry.npmjs.org/whatwg-mimetype/-/whatwg-mimetype-3.0.0.tgz" integrity sha512-nt+N2dzIutVRxARx1nghPKGv1xHikU7HKdfafKkLNLindmPU/ch3U31NOCGGA/dmPcmb1VlofO0vnKAcsm0o/Q== whatwg-url@^11.0.0: version "11.0.0" - resolved "https://registry.yarnpkg.com/whatwg-url/-/whatwg-url-11.0.0.tgz#0a849eebb5faf2119b901bb76fd795c2848d4018" + resolved "https://registry.npmjs.org/whatwg-url/-/whatwg-url-11.0.0.tgz" integrity sha512-RKT8HExMpoYx4igMiVMY83lN6UeITKJlBQ+vR/8ZJ8OCdSiN3RwCq+9gH0+Xzj0+5IrM6i4j/6LuvzbZIQgEcQ== dependencies: tr46 "^3.0.0" @@ -4579,7 +4577,7 @@ whatwg-url@^11.0.0: whatwg-url@^5.0.0: version "5.0.0" - resolved "https://registry.yarnpkg.com/whatwg-url/-/whatwg-url-5.0.0.tgz#966454e8765462e37644d3626f6742ce8b70965d" + resolved "https://registry.npmjs.org/whatwg-url/-/whatwg-url-5.0.0.tgz" integrity sha512-saE57nupxk6v3HY35+jzBwYa0rKSy0XR8JSxZPwgLr7ys0IBzhGviA1/TUGJLmSVqs8pb9AnvICXEuOHLprYTw== dependencies: tr46 "~0.0.3" @@ -4587,14 +4585,14 @@ whatwg-url@^5.0.0: which@^2.0.1: version "2.0.2" - resolved "https://registry.yarnpkg.com/which/-/which-2.0.2.tgz#7c6a8dd0a636a0327e10b59c9286eee93f3f51b1" + resolved "https://registry.npmjs.org/which/-/which-2.0.2.tgz" integrity sha512-BLI3Tl1TW3Pvl70l3yq3Y64i+awpwXqsGBYWkkqMtnbXgrMD+yj7rhW0kuEDxzJaYXGjEW5ogapKNMEKNMjibA== dependencies: isexe "^2.0.0" wrap-ansi@^7.0.0: version "7.0.0" - resolved "https://registry.yarnpkg.com/wrap-ansi/-/wrap-ansi-7.0.0.tgz#67e145cff510a6a6984bdf1152911d69d2eb9e43" + resolved "https://registry.npmjs.org/wrap-ansi/-/wrap-ansi-7.0.0.tgz" integrity sha512-YVGIj2kamLSTxw6NsZjoBxfSwsn0ycdesmc4p+Q21c5zPuZ1pl+NfxVdxPtdHvmNVOQ6XSYG4AUtyt/Fi7D16Q== dependencies: ansi-styles "^4.0.0" @@ -4603,12 +4601,12 @@ wrap-ansi@^7.0.0: wrappy@1: version "1.0.2" - resolved "https://registry.yarnpkg.com/wrappy/-/wrappy-1.0.2.tgz#b5243d8f3ec1aa35f1364605bc0d1036e30ab69f" + resolved "https://registry.npmjs.org/wrappy/-/wrappy-1.0.2.tgz" integrity sha512-l4Sp/DRseor9wL6EvV2+TuQn63dMkPjZ/sp9XkghTEbV9KlPS1xUsZ3u7/IQO4wxtcFB4bgpQPRcR3QCvezPcQ== write-file-atomic@^4.0.2: version "4.0.2" - resolved "https://registry.yarnpkg.com/write-file-atomic/-/write-file-atomic-4.0.2.tgz#a9df01ae5b77858a027fd2e80768ee433555fcfd" + resolved "https://registry.npmjs.org/write-file-atomic/-/write-file-atomic-4.0.2.tgz" integrity sha512-7KxauUdBmSdWnmpaGFg+ppNjKF8uNLry8LyzjauQDOVONfFLNKrKvQOxZ/VuTIcS/gge/YNahf5RIIQWTSarlg== dependencies: imurmurhash "^0.1.4" @@ -4616,42 +4614,42 @@ write-file-atomic@^4.0.2: ws@^8.11.0: version "8.18.2" - resolved "https://registry.yarnpkg.com/ws/-/ws-8.18.2.tgz#42738b2be57ced85f46154320aabb51ab003705a" + resolved "https://registry.npmjs.org/ws/-/ws-8.18.2.tgz" integrity sha512-DMricUmwGZUVr++AEAe2uiVM7UoO9MAVZMDu05UQOaUII0lp+zOzLLU4Xqh/JvTqklB1T4uELaaPBKyjE1r4fQ== xml-name-validator@^4.0.0: version "4.0.0" - resolved "https://registry.yarnpkg.com/xml-name-validator/-/xml-name-validator-4.0.0.tgz#79a006e2e63149a8600f15430f0a4725d1524835" + resolved "https://registry.npmjs.org/xml-name-validator/-/xml-name-validator-4.0.0.tgz" integrity sha512-ICP2e+jsHvAj2E2lIHxa5tjXRlKDJo4IdvPvCXbXQGdzSfmSpNVyIKMvoZHjDY9DP0zV17iI85o90vRFXNccRw== xmlchars@^2.2.0: version "2.2.0" - resolved "https://registry.yarnpkg.com/xmlchars/-/xmlchars-2.2.0.tgz#060fe1bcb7f9c76fe2a17db86a9bc3ab894210cb" + resolved "https://registry.npmjs.org/xmlchars/-/xmlchars-2.2.0.tgz" integrity sha512-JZnDKK8B0RCDw84FNdDAIpZK+JuJw+s7Lz8nksI7SIuU3UXJJslUthsi+uWBUYOwPFwW7W7PRLRfUKpxjtjFCw== y18n@^5.0.5: version "5.0.8" - resolved "https://registry.yarnpkg.com/y18n/-/y18n-5.0.8.tgz#7f4934d0f7ca8c56f95314939ddcd2dd91ce1d55" + resolved "https://registry.npmjs.org/y18n/-/y18n-5.0.8.tgz" integrity sha512-0pfFzegeDWJHJIAmTLRP2DwHjdF5s7jo9tuztdQxAhINCdvS+3nGINqPd00AphqJR/0LhANUS6/+7SCb98YOfA== yallist@^3.0.2: version "3.1.1" - resolved "https://registry.yarnpkg.com/yallist/-/yallist-3.1.1.tgz#dbb7daf9bfd8bac9ab45ebf602b8cbad0d5d08fd" + resolved "https://registry.npmjs.org/yallist/-/yallist-3.1.1.tgz" integrity sha512-a4UGQaWPH59mOXUYnAG2ewncQS4i4F43Tv3JoAM+s2VDAmS9NsK8GpDMLrCHPksFT7h3K6TOoUNn2pb7RoXx4g== yargs-parser@^20.2.7: version "20.2.9" - resolved "https://registry.yarnpkg.com/yargs-parser/-/yargs-parser-20.2.9.tgz#2eb7dc3b0289718fc295f362753845c41a0c94ee" + resolved "https://registry.npmjs.org/yargs-parser/-/yargs-parser-20.2.9.tgz" integrity sha512-y11nGElTIV+CT3Zv9t7VKl+Q3hTQoT9a1Qzezhhl6Rp21gJ/IVTW7Z3y9EWXhuUBC2Shnf+DX0antecpAwSP8w== yargs-parser@^21.1.1: version "21.1.1" - resolved "https://registry.yarnpkg.com/yargs-parser/-/yargs-parser-21.1.1.tgz#9096bceebf990d21bb31fa9516e0ede294a77d35" + resolved "https://registry.npmjs.org/yargs-parser/-/yargs-parser-21.1.1.tgz" integrity sha512-tVpsJW7DdjecAiFpbIB1e3qxIQsE6NoPc5/eTdrbbIC4h0LVsWhnoa3g+m2HclBIujHzsxZ4VJVA+GUuc2/LBw== yargs@^17.3.1: version "17.7.2" - resolved "https://registry.yarnpkg.com/yargs/-/yargs-17.7.2.tgz#991df39aca675a192b816e1e0363f9d75d2aa269" + resolved "https://registry.npmjs.org/yargs/-/yargs-17.7.2.tgz" integrity sha512-7dSzzRQ++CKnNI/krKnYRV7JKKPUXMEh61soaHKg9mrWEhzFWhFnxPxGl+69cD1Ou63C13NUPCnmIcrvqCuM6w== dependencies: cliui "^8.0.1" @@ -4664,5 +4662,5 @@ yargs@^17.3.1: yocto-queue@^0.1.0: version "0.1.0" - resolved "https://registry.yarnpkg.com/yocto-queue/-/yocto-queue-0.1.0.tgz#0294eb3dee05028d31ee1a5fa2c556a6aaf10a1b" + resolved "https://registry.npmjs.org/yocto-queue/-/yocto-queue-0.1.0.tgz" integrity sha512-rVksvsnNCdJ/ohGc6xgPwyN8eheCxsiLM8mxuE/t/mOVqJewPuO1miLpTHQiRgTKCLexL4MeAFVagts7HmNZ2Q== From ec6e8243bff8f371233ad2f4858bc6ba168db07f Mon Sep 17 00:00:00 2001 From: Ale Pouroullis Date: Tue, 6 May 2025 18:43:03 +0100 Subject: [PATCH 07/10] Remove chalk dependency --- package.json | 3 +-- src/cli.ts | 27 +++++++++++++-------------- yarn.lock | 5 ----- 3 files changed, 14 insertions(+), 21 deletions(-) diff --git a/package.json b/package.json index e6da8782..cd44534b 100644 --- a/package.json +++ b/package.json @@ -19,7 +19,6 @@ "@traceloop/instrumentation-anthropic": ">=0.11.1", "@traceloop/instrumentation-cohere": ">=0.11.1", "@traceloop/instrumentation-openai": ">=0.11.3", - "chalk": "^5.4.1", "cli-progress": "^3.12.0", "commander": "^13.1.0", "form-data": "^4.0.0", @@ -55,7 +54,7 @@ "webpack": "^5.97.1" }, "bin": { - "humanloop": "dist/cli.js" + "humanloop": "./dist/cli.js" }, "browser": { "fs": false, diff --git a/src/cli.ts b/src/cli.ts index f4f6f2e4..1401fba8 100644 --- a/src/cli.ts +++ b/src/cli.ts @@ -1,9 +1,9 @@ #!/usr/bin/env node import * as dotenv from "dotenv"; -import chalk from "chalk"; import { Command } from "commander"; import { HumanloopClient } from "./humanloop.client"; +import { Logger } from "./utils/logger"; const { version } = require("../package.json"); @@ -33,10 +33,8 @@ function getClient(options: { if (options.envFile) dotenv.config({ path: options.envFile }); const apiKey = options.apiKey || process.env.HUMANLOOP_API_KEY; if (!apiKey) { - console.error( - chalk.red( - "No API key found. Set HUMANLOOP_API_KEY in .env file or use --api-key", - ), + Logger.error( + "No API key found. Set HUMANLOOP_API_KEY in .env file or use --api-key", ); process.exit(1); } @@ -56,15 +54,16 @@ addAuthOptions( .option("-e, --environment ", "Environment to pull from") .option("--base-dir ", "Base directory for synced files", "humanloop"), ).action(async (options) => { - try { - console.log(chalk.blue("Pulling files from Humanloop...")); - const client = getClient(options); - const files = await client.pull(options.path, options.environment); - console.log(chalk.green(`Successfully synced ${files.length} files`)); - } catch (error) { - console.error(chalk.red(`Error: ${error}`)); - process.exit(1); - } + Logger.info("Pulling files from Humanloop..."); + // try { + // Logger.info("Pulling files from Humanloop..."); + // const client = getClient(options); + // const files = await client.pull(options.path, options.environment); + // Logger.success(`Successfully synced ${files.length} files`); + // } catch (error) { + // Logger.error(`Error: ${error}`); + // process.exit(1); + // } }); program.parse(process.argv); diff --git a/yarn.lock b/yarn.lock index 87b31f9d..4d99d674 100644 --- a/yarn.lock +++ b/yarn.lock @@ -2379,11 +2379,6 @@ chalk@^4.0.0, chalk@^4.0.2, chalk@^4.1.0: ansi-styles "^4.1.0" supports-color "^7.1.0" -chalk@^5.4.1: - version "5.4.1" - resolved "https://registry.yarnpkg.com/chalk/-/chalk-5.4.1.tgz#1b48bf0963ec158dce2aacf69c093ae2dd2092d8" - integrity sha512-zgVZuo2WcZgfUEmsn6eO3kINexW8RAE4maiQ8QNs8CtpPCSyMiYsULR3HQYkm3w8FIA3SberyMJMSldGsW+U3w== - char-regex@^1.0.2: version "1.0.2" resolved "https://registry.npmjs.org/char-regex/-/char-regex-1.0.2.tgz" From 67f230d2fc59be54ee28bb1e519fafa76bd14201 Mon Sep 17 00:00:00 2001 From: Ale Pouroullis Date: Wed, 7 May 2025 15:54:14 +0100 Subject: [PATCH 08/10] Match SyncClient and MetadataHandler with Python SDK + tests for LRUCache --- src/cache/LRUCache.ts | 2 +- src/sync/MetadataHandler.ts | 142 +++++++++++++----- src/sync/SyncClient.ts | 238 ++++++++++++++++-------------- src/utils/Logger.ts | 106 +++++++++++++ src/utils/index.ts | 1 + src/utils/logger.ts | 68 --------- tests/unit/cache/LRUCache.test.ts | 61 ++++++++ 7 files changed, 403 insertions(+), 215 deletions(-) create mode 100644 src/utils/Logger.ts create mode 100644 src/utils/index.ts delete mode 100644 src/utils/logger.ts create mode 100644 tests/unit/cache/LRUCache.test.ts diff --git a/src/cache/LRUCache.ts b/src/cache/LRUCache.ts index 0398f8ea..30d0877b 100644 --- a/src/cache/LRUCache.ts +++ b/src/cache/LRUCache.ts @@ -17,7 +17,7 @@ export default class LRUCache { // Get the value const value = this.cache.get(key); - + // Remove key and re-insert to mark as most recently used this.cache.delete(key); this.cache.set(key, value!); diff --git a/src/sync/MetadataHandler.ts b/src/sync/MetadataHandler.ts index f984cd89..331ff7ed 100644 --- a/src/sync/MetadataHandler.ts +++ b/src/sync/MetadataHandler.ts @@ -2,18 +2,25 @@ import fs from "fs"; import path from "path"; /** - * Interface for operation log entries + * Interface for operation data */ -interface OperationLog { - operationType: string; +interface OperationData { + timestamp: string; + operation_type: string; path: string; environment?: string; - successfulFiles?: string[]; - failedFiles?: string[]; + successful_files: string[]; + failed_files: string[]; error?: string; - startTime: number; - endTime: number; - duration: number; + duration_ms: number; +} + +/** + * Interface for metadata file structure + */ +interface MetadataFile { + last_operation: OperationData | null; + history: OperationData[]; } /** @@ -30,47 +37,114 @@ interface LogOperationParams { } /** - * Handler for managing metadata and operation logs + * Handles metadata storage and retrieval for sync operations. + * + * This class manages a JSON file that stores the last 5 sync operations + * and maintains a record of the most recent operation with detailed information. */ export default class MetadataHandler { private baseDir: string; - private metadataDir: string; - private operationsLogPath: string; + private metadataFile: string; + private maxHistory: number; - constructor(baseDir: string) { + /** + * Initialize the metadata handler. + * + * @param baseDir Base directory where metadata will be stored + * @param maxHistory Maximum number of operations to keep in history + */ + constructor(baseDir: string, maxHistory: number = 5) { this.baseDir = baseDir; - this.metadataDir = path.join(baseDir, ".humanloop"); - this.operationsLogPath = path.join(this.metadataDir, "operations.log"); + this.metadataFile = path.join(baseDir, ".sync_metadata.json"); + this.maxHistory = maxHistory; + this.ensureMetadataFile(); + } - // Create metadata directory if it doesn't exist - if (!fs.existsSync(this.metadataDir)) { - fs.mkdirSync(this.metadataDir, { recursive: true }); + /** + * Ensure the metadata file exists with proper structure. + */ + private ensureMetadataFile(): void { + if (!fs.existsSync(this.metadataFile)) { + const initialData: MetadataFile = { + last_operation: null, + history: [], + }; + this.writeMetadata(initialData); } } /** - * Log an operation to the operations log file + * Read the current metadata from file. */ - public logOperation(params: LogOperationParams): void { - const endTime = Date.now(); - const duration = endTime - params.startTime; - - const logEntry: OperationLog = { - ...params, - endTime, - duration, - }; + private readMetadata(): MetadataFile { + try { + const data = fs.readFileSync(this.metadataFile, "utf8"); + return JSON.parse(data) as MetadataFile; + } catch (error) { + console.error(`Error reading metadata file: ${error}`); + return { last_operation: null, history: [] }; + } + } + /** + * Write metadata to file. + */ + private writeMetadata(data: MetadataFile): void { try { - // Create the log file if it doesn't exist - if (!fs.existsSync(this.operationsLogPath)) { - fs.writeFileSync(this.operationsLogPath, ""); + // Ensure directory exists + const dir = path.dirname(this.metadataFile); + if (!fs.existsSync(dir)) { + fs.mkdirSync(dir, { recursive: true }); } - - // Append the log entry to the file - fs.appendFileSync(this.operationsLogPath, JSON.stringify(logEntry) + "\n"); + fs.writeFileSync(this.metadataFile, JSON.stringify(data, null, 2)); } catch (error) { - console.error(`Error logging operation: ${error}`); + console.error(`Error writing metadata file: ${error}`); } } + + /** + * Log a sync operation. + */ + public logOperation(params: LogOperationParams): void { + const currentTime = new Date().toISOString(); + const duration = Date.now() - params.startTime; + + const operationData: OperationData = { + timestamp: currentTime, + operation_type: params.operationType, + path: params.path, + environment: params.environment, + successful_files: params.successfulFiles || [], + failed_files: params.failedFiles || [], + error: params.error, + duration_ms: duration, + }; + + const metadata = this.readMetadata(); + + // Update last operation + metadata.last_operation = operationData; + + // Update history + metadata.history.unshift(operationData); + metadata.history = metadata.history.slice(0, this.maxHistory); + + this.writeMetadata(metadata); + } + + /** + * Get the most recent operation details. + */ + public getLastOperation(): OperationData | null { + const metadata = this.readMetadata(); + return metadata.last_operation; + } + + /** + * Get the operation history. + */ + public getHistory(): OperationData[] { + const metadata = this.readMetadata(); + return metadata.history; + } } diff --git a/src/sync/SyncClient.ts b/src/sync/SyncClient.ts index d7e03d3e..ee08ef85 100644 --- a/src/sync/SyncClient.ts +++ b/src/sync/SyncClient.ts @@ -6,6 +6,7 @@ import { HumanloopClient as BaseHumanloopClient } from "../Client"; import LRUCache from "../cache/LRUCache"; import { HumanloopRuntimeError } from "../error"; import MetadataHandler from "./MetadataHandler"; +import Logger, { LogLevel } from "../utils/Logger"; // Import your existing Logger // Default cache size for file content caching const DEFAULT_CACHE_SIZE = 100; @@ -13,109 +14,131 @@ const DEFAULT_CACHE_SIZE = 100; export interface SyncClientOptions { baseDir?: string; cacheSize?: number; + logLevel?: LogLevel; } /** - * Internal client for managing synchronization between local filesystem and Humanloop. + * Format API error messages to be more user-friendly. + */ +function formatApiError(error: Error): string { + const errorMsg = error.toString(); + + // If the error doesn't look like an API error with status code and body + if (!errorMsg.includes("status_code") || !errorMsg.includes("body:")) { + return errorMsg; + } + + try { + // Extract the body part and parse as JSON + const bodyParts = errorMsg.split("body:"); + if (bodyParts.length < 2) return errorMsg; + + const bodyStr = bodyParts[1].trim(); + const body = JSON.parse(bodyStr); + + // Get the detail from the body + const detail = body.detail || {}; + + // Prefer description, fall back to msg + return detail.description || detail.msg || errorMsg; + } catch (e) { + Logger.debug(`Failed to parse error message: ${e}`); // Use debug level + return errorMsg; + } +} + +/** + * Client for managing synchronization between local filesystem and Humanloop. + * + * This client provides file synchronization between Humanloop and the local filesystem, + * with built-in caching for improved performance. */ export default class SyncClient { private client: BaseHumanloopClient; private baseDir: string; private cacheSize: number; private fileContentCache: LRUCache; - private metadata: MetadataHandler; + public metadata: MetadataHandler; constructor( client: BaseHumanloopClient, - options: SyncClientOptions = { - baseDir: "humanloop", - cacheSize: DEFAULT_CACHE_SIZE, - }, + options: SyncClientOptions = {} ) { this.client = client; this.baseDir = options.baseDir || "humanloop"; this.cacheSize = options.cacheSize || DEFAULT_CACHE_SIZE; this.fileContentCache = new LRUCache(this.cacheSize); this.metadata = new MetadataHandler(this.baseDir); + + // Set the log level using your Logger's setLevel method + Logger.setLevel(options.logLevel || 'warn'); } /** - * Get the raw file content of a file from cache or filesystem. + * Get the file content from cache or filesystem. */ - private getFileContent(path: string, fileType: FileType): string { - const cacheKey = `${path}:${fileType}`; - - // Check if the content is in the cache + public getFileContent(filePath: string, fileType: FileType): string { + const cacheKey = `${filePath}:${fileType}`; + + // Check if in cache const cachedContent = this.fileContentCache.get(cacheKey); if (cachedContent !== undefined) { - console.debug(`Using cached file content for ${path}.${fileType}`); + // Use debug level for cache hits + Logger.debug(`Using cached file content for ${filePath}.${fileType}`); return cachedContent; } - - // If not in cache, get from filesystem - const content = this.getFileContentImpl(path, fileType); - - // Store in cache - this.fileContentCache.set(cacheKey, content); - - return content; - } - - /** - * Implementation of getFileContent without the cache. - */ - private getFileContentImpl(path: string, fileType: FileType): string { - // Construct path to local file - const localPath = this.getFullPath(path, fileType); - + + // Not in cache, get from filesystem + const localPath = path.join(this.baseDir, `${filePath}.${fileType}`); + if (!fs.existsSync(localPath)) { throw new HumanloopRuntimeError(`Local file not found: ${localPath}`); } - + try { - // Read the raw file content - const fileContent = fs.readFileSync(localPath, "utf8"); - console.debug(`Using local file content from ${localPath}`); + const fileContent = fs.readFileSync(localPath, 'utf8'); + Logger.debug(`Using local file content from ${localPath}`); + + // Add to cache + this.fileContentCache.set(cacheKey, fileContent); + return fileContent; } catch (error) { throw new HumanloopRuntimeError( - `Error reading local file ${localPath}: ${error}`, + `Error reading local file ${localPath}: ${error}` ); } } /** - * Clear the LRU cache. + * Clear the cache. */ - private clearCache(): void { + public clearCache(): void { this.fileContentCache.clear(); } /** - * Normalize the path by: - * 1. Removing any file extensions (.prompt, .agent) - * 2. Converting backslashes to forward slashes - * 3. Removing leading and trailing slashes - * 4. Removing leading and trailing whitespace - * 5. Normalizing multiple consecutive slashes into a single forward slash + * Normalize the path by removing extensions, etc. */ private normalizePath(filePath: string): string { + if (!filePath) return ""; + // Remove any file extensions let normalizedPath = filePath.includes(".") ? filePath.substring(0, filePath.lastIndexOf(".")) : filePath; - + // Convert backslashes to forward slashes normalizedPath = normalizedPath.replace(/\\/g, "/"); - + // Remove leading/trailing whitespace and slashes normalizedPath = normalizedPath.trim().replace(/^\/+|\/+$/g, ""); - + // Normalize multiple consecutive slashes into a single forward slash while (normalizedPath.includes("//")) { normalizedPath = normalizedPath.replace(/\/\//g, "/"); } - + return normalizedPath; } @@ -126,45 +149,33 @@ export default class SyncClient { return path.trim().endsWith(".prompt") || path.trim().endsWith(".agent"); } - /** - * Get the full path to a file, including extension. - */ - private getFullPath(filePath: string, fileType: FileType): string { - const normalizedPath = path.join(this.baseDir, filePath); - const directory = path.dirname(normalizedPath); - const fileName = path.basename(normalizedPath); - return path.join(directory, `${fileName}.${fileType}`); - } - /** * Save serialized file to local filesystem. */ private saveSerializedFile( - serializedContent: string, - filePath: string, - fileType: FileType, + serializedContent: string, + filePath: string, + fileType: FileType ): void { try { // Create full path including baseDir prefix const fullPath = path.join(this.baseDir, filePath); const directory = path.dirname(fullPath); const fileName = path.basename(fullPath); - + // Create directory if it doesn't exist fs.mkdirSync(directory, { recursive: true }); - + // Add file type extension const newPath = path.join(directory, `${fileName}.${fileType}`); - + // Write raw file content to file fs.writeFileSync(newPath, serializedContent); - + // Clear the cache for this file to ensure we get fresh content next time this.clearCache(); - - console.info(`Syncing ${fileType} ${filePath}`); } catch (error) { - console.error(`Failed to sync ${fileType} ${filePath}: ${error}`); + Logger.error(`Failed to sync ${fileType} ${filePath}: ${error}`); throw error; } } @@ -178,20 +189,16 @@ export default class SyncClient { environment, includeRawFileContent: true, }); - + if (file.type !== "prompt" && file.type !== "agent") { throw new Error(`Unsupported file type: ${file.type}`); } - - if (!file.rawFileContent) { - throw new Error(`No content found for ${file.type} ${file.id}`); - } - - this.saveSerializedFile(file.rawFileContent, file.path, file.type); + + this.saveSerializedFile(file.rawFileContent!, file.path, file.type); } /** - * Sync Prompt and Agent files from Humanloop to local filesystem. + * Pull all files from a directory in Humanloop to local filesystem. */ private async pullDirectory( path?: string, @@ -199,10 +206,14 @@ export default class SyncClient { ): Promise { const successfulFiles: string[] = []; const failedFiles: string[] = []; - let page = 1; - + let page = 1; + + Logger.debug(`Fetching files from directory: ${path || '(root)'} in environment: ${environment || '(default)'}`); + while (true) { try { + Logger.debug(`Requesting page ${page} of files`); + const response = await this.client.files.listFiles({ type: ["prompt", "agent"], page, @@ -210,29 +221,31 @@ export default class SyncClient { environment, path, }); - console.log(response); - + if (response.records.length === 0) { + Logger.debug("No more files found"); break; } - + + Logger.debug(`Found ${response.records.length} files from page ${page}`); + // Process each file for (const file of response.records) { // Skip if not a Prompt or Agent if (file.type !== "prompt" && file.type !== "agent") { - console.warn(`Skipping unsupported file type: ${file.type}`); + Logger.warn(`Skipping unsupported file type: ${file.type}`); continue; } - + // Skip if no raw file content if (!file.rawFileContent) { - console.warn( - `No content found for ${file.type} ${file.id || ""}`, - ); + Logger.warn(`No content found for ${file.type} ${file.id || ""}`); continue; } - + try { + Logger.debug(`Saving ${file.type} ${file.path}`); + this.saveSerializedFile( file.rawFileContent, file.path, @@ -241,76 +254,77 @@ export default class SyncClient { successfulFiles.push(file.path); } catch (error) { failedFiles.push(file.path); - console.error(`Task failed for ${file.path}: ${error}`); + Logger.error(`Task failed for ${file.path}: ${error}`); } } - + page += 1; } catch (error) { + const formattedError = formatApiError(error as Error); throw new HumanloopRuntimeError( - `Failed to fetch page ${page}: ${error}`, + `Failed to pull files: ${formattedError}` ); } } - - // Log summary only if we have results - if (successfulFiles.length > 0 || failedFiles.length > 0) { - if (successfulFiles.length > 0) { - console.info(`\nSynced ${successfulFiles.length} files`); - } - if (failedFiles.length > 0) { - console.error(`Failed to sync ${failedFiles.length} files`); - } + + if (successfulFiles.length > 0) { + Logger.info(`Successfully pulled ${successfulFiles.length} files`); } - + if (failedFiles.length > 0) { + Logger.warn(`Failed to pull ${failedFiles.length} files`); + } + return successfulFiles; } /** * Pull files from Humanloop to local filesystem. - * - * @param path - The path to the file or directory to pull. - * @param environment - The environment to pull the file from. - * @returns An array of successful file paths. */ public async pull(path?: string, environment?: string): Promise { const startTime = Date.now(); + const normalizedPath = path ? this.normalizePath(path) : undefined; + + Logger.info(`Starting pull operation: path=${normalizedPath || '(root)'}, environment=${environment || '(default)'}`); + try { let successfulFiles: string[] = []; - let failedFiles: string[] = []; - + if (!path) { // Pull all files from the root + Logger.debug("Pulling all files from root"); successfulFiles = await this.pullDirectory(undefined, environment); } else { - const normalizedPath = this.normalizePath(path); if (this.isFile(path)) { - await this.pullFile(normalizedPath, environment); + Logger.debug(`Pulling specific file: ${normalizedPath}`); + await this.pullFile(normalizedPath!, environment); successfulFiles = [path]; } else { + Logger.debug(`Pulling directory: ${normalizedPath}`); successfulFiles = await this.pullDirectory( normalizedPath, environment, ); } } - + + const duration = Date.now() - startTime; + Logger.success(`Pull completed in ${duration}ms: ${successfulFiles.length} files succeeded`); + // Log the successful operation this.metadata.logOperation({ operationType: "pull", - path: path || "", // Use empty string if path is undefined + path: normalizedPath || "", environment, successfulFiles, - failedFiles, startTime, }); - + return successfulFiles; } catch (error) { // Log the failed operation this.metadata.logOperation({ operationType: "pull", - path: path || "", // Use empty string if path is undefined + path: normalizedPath || "", environment, error: String(error), startTime, @@ -318,4 +332,4 @@ export default class SyncClient { throw error; } } -} +} \ No newline at end of file diff --git a/src/utils/Logger.ts b/src/utils/Logger.ts new file mode 100644 index 00000000..3c74a47b --- /dev/null +++ b/src/utils/Logger.ts @@ -0,0 +1,106 @@ +/** + * Logger utility for consistent colored console output across the Humanloop SDK. + */ + +// ANSI escape codes for colors +export const Colors = { + YELLOW: "\x1b[93m", + CYAN: "\x1b[96m", + GREEN: "\x1b[92m", + RED: "\x1b[91m", + RESET: "\x1b[0m", +} as const; + +export type LogLevel = 'error' | 'warn' | 'info' | 'debug'; + +/** + * Helper class for colored console output with log level filtering + */ +export default class Logger { + private static currentLevel: number = 1; // Default to 'warn' + private static readonly levels: Record = { + 'error': 0, + 'warn': 1, + 'info': 2, + 'debug': 3 + }; + + /** + * Set the log level for filtering + */ + static setLevel(level: LogLevel): void { + this.currentLevel = this.levels[level] || 1; + } + + /** + * Safely converts any value to a string, handling undefined/null + */ + private static toString(value: any): string { + if (value === undefined) return "undefined"; + if (value === null) return "null"; + return String(value); + } + + /** + * Log a warning message in yellow + */ + static warn(message: any): void { + if (this.currentLevel >= 1) { + console.warn(`${Colors.YELLOW}${Logger.toString(message)}${Colors.RESET}`); + } + } + + /** + * Log an info message in cyan + */ + static info(message: any): void { + if (this.currentLevel >= 2) { + console.info(`${Colors.CYAN}${Logger.toString(message)}${Colors.RESET}`); + } + } + + /** + * Log a success message in green + */ + static success(message: any): void { + if (this.currentLevel >= 2) { // Success is info level + console.log(`${Colors.GREEN}${Logger.toString(message)}${Colors.RESET}`); + } + } + + /** + * Log an error message in red + */ + static error(message: any): void { + if (this.currentLevel >= 0) { + console.error(`${Colors.RED}${Logger.toString(message)}${Colors.RESET}`); + } + } + + /** + * Log a plain message without any color (at info level) + */ + static log(message: any): void { + if (this.currentLevel >= 2) { + console.log(Logger.toString(message)); + } + } + + /** + * Log a debug message (for detailed information) + */ + static debug(message: any): void { + if (this.currentLevel >= 3) { + console.debug(Logger.toString(message)); + } + } + + /** + * Log a message with custom color (at info level) + */ + static withColor(message: any, color: keyof typeof Colors): void { + if (this.currentLevel >= 2) { + console.log(`${Colors[color]}${Logger.toString(message)}${Colors.RESET}`); + } + } +} \ No newline at end of file diff --git a/src/utils/index.ts b/src/utils/index.ts new file mode 100644 index 00000000..a20b6187 --- /dev/null +++ b/src/utils/index.ts @@ -0,0 +1 @@ +export * from "./Logger"; \ No newline at end of file diff --git a/src/utils/logger.ts b/src/utils/logger.ts deleted file mode 100644 index 662bbbb3..00000000 --- a/src/utils/logger.ts +++ /dev/null @@ -1,68 +0,0 @@ -/** - * Logger utility for consistent colored console output across the Humanloop SDK. - */ - -// ANSI escape codes for colors -export const Colors = { - YELLOW: "\x1b[93m", - CYAN: "\x1b[96m", - GREEN: "\x1b[92m", - RED: "\x1b[91m", - RESET: "\x1b[0m", -} as const; - -/** - * Helper class for colored console output - */ -export class Logger { - /** - * Safely converts any value to a string, handling undefined/null - */ - private static toString(value: any): string { - if (value === undefined) return "undefined"; - if (value === null) return "null"; - return String(value); - } - - /** - * Log a warning message in yellow - */ - static warn(message: any): void { - console.warn(`${Colors.YELLOW}${Logger.toString(message)}${Colors.RESET}`); - } - - /** - * Log an info message in cyan - */ - static info(message: any): void { - console.info(`${Colors.CYAN}${Logger.toString(message)}${Colors.RESET}`); - } - - /** - * Log a success message in green - */ - static success(message: any): void { - console.log(`${Colors.GREEN}${Logger.toString(message)}${Colors.RESET}`); - } - - /** - * Log an error message in red - */ - static error(message: any): void { - console.error(`${Colors.RED}${Logger.toString(message)}${Colors.RESET}`); - } - - /** - * Log a plain message without any color - */ - static log(message: any): void { - console.log(Logger.toString(message)); - } - - /** - * Log a message with custom color - */ - static withColor(message: any, color: keyof typeof Colors): void { - console.log(`${Colors[color]}${Logger.toString(message)}${Colors.RESET}`); - } -} diff --git a/tests/unit/cache/LRUCache.test.ts b/tests/unit/cache/LRUCache.test.ts new file mode 100644 index 00000000..f377165c --- /dev/null +++ b/tests/unit/cache/LRUCache.test.ts @@ -0,0 +1,61 @@ +import LRUCache from "../../../src/cache/LRUCache"; + +describe("LRUCache", () => { + let cache: LRUCache; + + beforeEach(() => { + cache = new LRUCache(3); // Test with small capacity + }); + + describe("basic operations", () => { + it("should set and get values", () => { + cache.set("key1", 1); + expect(cache.get("key1")).toBe(1); + }); + + it("should return undefined for non-existent keys", () => { + expect(cache.get("nonexistent")).toBeUndefined(); + }); + + it("should handle setting same key multiple times", () => { + cache.set("key1", 1); + cache.set("key1", 2); + expect(cache.get("key1")).toBe(2); + }); + }); + + describe("capacity and eviction", () => { + it("should evict least recently used item when capacity is reached", () => { + cache.set("key1", 1); + cache.set("key2", 2); + cache.set("key3", 3); + cache.set("key4", 4); // Should evict key1 + + expect(cache.get("key1")).toBeUndefined(); + expect(cache.get("key4")).toBe(4); + }); + + it("should update LRU order on get operations", () => { + cache.set("key1", 1); + cache.set("key2", 2); + cache.set("key3", 3); + + cache.get("key1"); // Make key1 most recently used + cache.set("key4", 4); // Should evict key2, not key1 + + expect(cache.get("key1")).toBe(1); + expect(cache.get("key2")).toBeUndefined(); + }); + }); + + describe("clear operation", () => { + it("should clear all items from cache", () => { + cache.set("key1", 1); + cache.set("key2", 2); + cache.clear(); + + expect(cache.get("key1")).toBeUndefined(); + expect(cache.get("key2")).toBeUndefined(); + }); + }); +}); From 0a1824722377b4dd7899f10aa2736aa30d34cbf0 Mon Sep 17 00:00:00 2001 From: Ale Pouroullis Date: Wed, 7 May 2025 15:58:43 +0100 Subject: [PATCH 09/10] Write basic tests for Logger --- src/cli.ts | 2 +- src/evals/run.ts | 2 +- .../{ => internal}/cache/LRUCache.test.ts | 2 +- tests/unit/internal/utils/Logger.test.ts | 79 +++++++++++++++++++ 4 files changed, 82 insertions(+), 3 deletions(-) rename tests/unit/{ => internal}/cache/LRUCache.test.ts (97%) create mode 100644 tests/unit/internal/utils/Logger.test.ts diff --git a/src/cli.ts b/src/cli.ts index 1401fba8..b80d1c94 100644 --- a/src/cli.ts +++ b/src/cli.ts @@ -3,7 +3,7 @@ import * as dotenv from "dotenv"; import { Command } from "commander"; import { HumanloopClient } from "./humanloop.client"; -import { Logger } from "./utils/logger"; +import Logger from "./utils/Logger"; const { version } = require("../package.json"); diff --git a/src/evals/run.ts b/src/evals/run.ts index 475795de..87ffec49 100644 --- a/src/evals/run.ts +++ b/src/evals/run.ts @@ -46,7 +46,7 @@ import { } from "../context"; import { HumanloopRuntimeError } from "../error"; import { Humanloop, HumanloopClient } from "../index"; -import { Logger } from "../utils/logger"; +import Logger from "../utils/Logger"; import { Dataset, EvalFileType, diff --git a/tests/unit/cache/LRUCache.test.ts b/tests/unit/internal/cache/LRUCache.test.ts similarity index 97% rename from tests/unit/cache/LRUCache.test.ts rename to tests/unit/internal/cache/LRUCache.test.ts index f377165c..f518641f 100644 --- a/tests/unit/cache/LRUCache.test.ts +++ b/tests/unit/internal/cache/LRUCache.test.ts @@ -1,4 +1,4 @@ -import LRUCache from "../../../src/cache/LRUCache"; +import LRUCache from "../../../../src/cache/LRUCache"; describe("LRUCache", () => { let cache: LRUCache; diff --git a/tests/unit/internal/utils/Logger.test.ts b/tests/unit/internal/utils/Logger.test.ts new file mode 100644 index 00000000..40e67ab6 --- /dev/null +++ b/tests/unit/internal/utils/Logger.test.ts @@ -0,0 +1,79 @@ +import Logger from "../../../../src/utils/Logger"; + +describe("Logger", () => { + let consoleSpy: { + log: jest.SpyInstance; + info: jest.SpyInstance; + warn: jest.SpyInstance; + debug: jest.SpyInstance; + }; + + beforeEach(() => { + // Spy on all console methods + consoleSpy = { + log: jest.spyOn(console, "log"), + info: jest.spyOn(console, "info"), + warn: jest.spyOn(console, "warn"), + debug: jest.spyOn(console, "debug"), + }; + // Reset log level before each test + Logger.setLevel("warn"); + }); + + afterEach(() => { + // Restore all spies + Object.values(consoleSpy).forEach((spy) => spy.mockRestore()); + }); + + describe("log levels", () => { + it("should respect log level settings", () => { + Logger.setLevel("warn"); + Logger.debug("debug message"); + Logger.info("info message"); + Logger.warn("warn message"); + + expect(consoleSpy.debug).not.toHaveBeenCalled(); + expect(consoleSpy.info).not.toHaveBeenCalled(); + expect(consoleSpy.warn).toHaveBeenCalledWith( + expect.stringContaining("warn"), + ); + }); + + it("should show all messages when level is set to debug", () => { + Logger.setLevel("debug"); + Logger.debug("debug message"); + Logger.info("info message"); + Logger.warn("warn message"); + + expect(consoleSpy.debug).toHaveBeenCalledWith( + expect.stringContaining("debug"), + ); + expect(consoleSpy.info).toHaveBeenCalledWith( + expect.stringContaining("info"), + ); + expect(consoleSpy.warn).toHaveBeenCalledWith( + expect.stringContaining("warn"), + ); + }); + }); + + describe("message formatting", () => { + it("should handle different input types", () => { + Logger.setLevel("info"); + + Logger.info(undefined); + Logger.info(null); + Logger.info({ key: "value" }); + + expect(consoleSpy.info).toHaveBeenCalledWith( + expect.stringContaining("undefined"), + ); + expect(consoleSpy.info).toHaveBeenCalledWith( + expect.stringContaining("null"), + ); + expect(consoleSpy.info).toHaveBeenCalledWith( + expect.stringContaining("[object Object]"), + ); + }); + }); +}); From bde8111dc3cadc767c8180adae6ce6ebc4c7a156 Mon Sep 17 00:00:00 2001 From: Ale Pouroullis Date: Wed, 7 May 2025 17:59:02 +0100 Subject: [PATCH 10/10] Add tests for MetadataHandler --- .fernignore | 1 + src/evals/run.ts | 1 - src/sync/MetadataHandler.ts | 9 +- src/sync/SyncClient.ts | 5 +- .../internal/sync/MetadataHandler.test.ts | 267 ++++++++++++++++++ 5 files changed, 275 insertions(+), 8 deletions(-) create mode 100644 tests/unit/internal/sync/MetadataHandler.test.ts diff --git a/.fernignore b/.fernignore index c27bbc61..cb0e9d1c 100644 --- a/.fernignore +++ b/.fernignore @@ -19,6 +19,7 @@ src/utils # Modified due to issues with OTEL tests/unit/fetcher/stream-wrappers/webpack.test.ts +tests/unit/internal/ tests/integration/ # CI Action diff --git a/src/evals/run.ts b/src/evals/run.ts index 87ffec49..041d251c 100644 --- a/src/evals/run.ts +++ b/src/evals/run.ts @@ -637,7 +637,6 @@ async function resolveFile & { message?: any[] "File does not exist on Humanloop. Please provide a `file.path` and a version to create a new version.", ); } - Logger.log(`UPSERTING FILE ${JSON.stringify(fileConfig, null, 2)}`); return [await upsertFile(client, fileConfig), callable]; } diff --git a/src/sync/MetadataHandler.ts b/src/sync/MetadataHandler.ts index 331ff7ed..35b649f5 100644 --- a/src/sync/MetadataHandler.ts +++ b/src/sync/MetadataHandler.ts @@ -1,5 +1,5 @@ -import fs from "fs"; -import path from "path"; +import * as fs from "fs"; +import * as path from "path"; /** * Interface for operation data @@ -33,7 +33,7 @@ interface LogOperationParams { successfulFiles?: string[]; failedFiles?: string[]; error?: string; - startTime: number; + duration_ms: number; } /** @@ -107,7 +107,6 @@ export default class MetadataHandler { */ public logOperation(params: LogOperationParams): void { const currentTime = new Date().toISOString(); - const duration = Date.now() - params.startTime; const operationData: OperationData = { timestamp: currentTime, @@ -117,7 +116,7 @@ export default class MetadataHandler { successful_files: params.successfulFiles || [], failed_files: params.failedFiles || [], error: params.error, - duration_ms: duration, + duration_ms: params.duration_ms, }; const metadata = this.readMetadata(); diff --git a/src/sync/SyncClient.ts b/src/sync/SyncClient.ts index ee08ef85..05c2351c 100644 --- a/src/sync/SyncClient.ts +++ b/src/sync/SyncClient.ts @@ -316,18 +316,19 @@ export default class SyncClient { path: normalizedPath || "", environment, successfulFiles, - startTime, + duration_ms: duration, }); return successfulFiles; } catch (error) { + const duration = Date.now() - startTime; // Log the failed operation this.metadata.logOperation({ operationType: "pull", path: normalizedPath || "", environment, error: String(error), - startTime, + duration_ms: duration, }); throw error; } diff --git a/tests/unit/internal/sync/MetadataHandler.test.ts b/tests/unit/internal/sync/MetadataHandler.test.ts new file mode 100644 index 00000000..d140e066 --- /dev/null +++ b/tests/unit/internal/sync/MetadataHandler.test.ts @@ -0,0 +1,267 @@ +import * as fs from "fs"; +import * as path from "path"; + +import MetadataHandler from "../../../../src/sync/MetadataHandler"; + +// Mock fs module +jest.mock("fs"); + +describe("MetadataHandler", () => { + let metadataHandler: MetadataHandler; + const testBaseDir = "/test/dir"; + const mockMetadataFile = path.join(testBaseDir, ".sync_metadata.json"); + + beforeEach(() => { + // Clear all mocks before each test + jest.clearAllMocks(); + + // Mock fs.existsSync to return false initially (file doesn't exist) + (fs.existsSync as jest.Mock).mockReturnValue(false); + + // Mock fs.mkdirSync to do nothing + (fs.mkdirSync as jest.Mock).mockImplementation(() => {}); + + // Mock fs.writeFileSync to do nothing + (fs.writeFileSync as jest.Mock).mockImplementation(() => {}); + + // Mock fs.readFileSync to return initial state + (fs.readFileSync as jest.Mock).mockReturnValue( + JSON.stringify({ last_operation: null, history: [] }), + ); + }); + + describe("initialization", () => { + it("should create metadata file if it does not exist", () => { + metadataHandler = new MetadataHandler(testBaseDir); + expect(fs.existsSync).toHaveBeenCalledWith(mockMetadataFile); + expect(fs.writeFileSync).toHaveBeenCalledWith( + mockMetadataFile, + JSON.stringify({ last_operation: null, history: [] }, null, 2), + ); + }); + + it("should not create metadata file if it already exists", () => { + // Reset mocks + jest.clearAllMocks(); + + // Mock that file exists + (fs.existsSync as jest.Mock).mockReturnValue(true); + + // Mock readFileSync to return existing data + (fs.readFileSync as jest.Mock).mockReturnValue( + JSON.stringify({ last_operation: null, history: [] }), + ); + + metadataHandler = new MetadataHandler(testBaseDir); + + expect(fs.writeFileSync).not.toHaveBeenCalled(); + }); + }); + + describe("logOperation", () => { + it("should log operation with all fields", () => { + metadataHandler = new MetadataHandler(testBaseDir); + const params = { + operationType: "pull", + path: "test/path", + environment: "dev", + successfulFiles: ["test/path/file1.prompt", "test/path/file2.prompt"], + failedFiles: ["test/path/file3.prompt"], + error: "Test error", + duration_ms: 1000, + }; + + metadataHandler.logOperation(params); + + expect(fs.writeFileSync).toHaveBeenCalledWith( + mockMetadataFile, + expect.stringContaining('"operation_type": "pull"'), + ); + expect(fs.writeFileSync).toHaveBeenCalledWith( + mockMetadataFile, + expect.stringContaining('"path": "test/path"'), + ); + expect(fs.writeFileSync).toHaveBeenCalledWith( + mockMetadataFile, + expect.stringContaining('"environment": "dev"'), + ); + }); + + it("should maintain history within max size", () => { + // First, initialize the MetadataHandler + metadataHandler = new MetadataHandler(testBaseDir); + + // Clear the writeFileSync mock to reset the call history after initialization + (fs.writeFileSync as jest.Mock).mockClear(); + + // Create a history array with 5 items + const existingHistory = Array(5) + .fill(null) + .map(() => ({ + timestamp: new Date().toISOString(), + operation_type: "pull", + path: "/test/path", + successful_files: [], + failed_files: [], + duration_ms: 1000, + })); + + // NOW set up the stateful mock AFTER initialization + // This prevents the ensureMetadataFile from overwriting our test data + (fs.readFileSync as jest.Mock).mockReturnValue( + JSON.stringify({ + last_operation: existingHistory[0], + history: existingHistory, + }), + ); + + const params = { + operationType: "pull", + path: "/new/path", + duration_ms: 750, + }; + + metadataHandler.logOperation(params); + + // Get the last call to writeFileSync + const lastCallArgs = (fs.writeFileSync as jest.Mock).mock.calls[0]; + const writtenData = JSON.parse(lastCallArgs[1]); + + // The history should still have 5 items (max size) after adding a new one + expect(writtenData.history.length).toBe(5); + + // The new operation should be at the start of the array + expect(writtenData.history[0].operation_type).toBe("pull"); + expect(writtenData.history[0].path).toBe("/new/path"); + expect(writtenData.history[0].duration_ms).toBe(750); + }); + + it("should handle empty history array", () => { + metadataHandler = new MetadataHandler(testBaseDir); + + const params = { + operationType: "pull", + path: "test/path", + duration_ms: 500, + }; + + metadataHandler.logOperation(params); + + const lastCallArgs = (fs.writeFileSync as jest.Mock).mock.calls.slice( + -1, + )[0]; + const writtenData = JSON.parse(lastCallArgs[1]); + + expect(writtenData.history.length).toBe(1); + expect(writtenData.history[0].operation_type).toBe("pull"); + expect(writtenData.history[0].path).toBe("test/path"); + }); + + it("should handle missing optional fields", () => { + metadataHandler = new MetadataHandler(testBaseDir); + + const params = { + operationType: "pull", + path: "test/path", + duration_ms: 500, + }; + + metadataHandler.logOperation(params); + + const lastCallArgs = (fs.writeFileSync as jest.Mock).mock.calls.slice( + -1, + )[0]; + const writtenData = JSON.parse(lastCallArgs[1]); + + expect(writtenData.history[0].successful_files).toEqual([]); + expect(writtenData.history[0].failed_files).toEqual([]); + expect(writtenData.history[0].environment).toBeUndefined(); + expect(writtenData.history[0].error).toBeUndefined(); + }); + }); + + describe("getLastOperation", () => { + it("should return the last operation", () => { + const operation = { + timestamp: new Date().toISOString(), + operation_type: "pull", + path: "test/path", + successful_files: [], + failed_files: [], + duration_ms: 1000, + }; + + // Mock readFileSync to return a state with a last operation + (fs.readFileSync as jest.Mock).mockReturnValue( + JSON.stringify({ + last_operation: operation, + history: [operation], + }), + ); + + metadataHandler = new MetadataHandler(testBaseDir); + const result = metadataHandler.getLastOperation(); + + expect(result).toEqual(operation); + }); + + it("should return null if no operations exist", () => { + // Mock readFileSync to return empty state + (fs.readFileSync as jest.Mock).mockReturnValue( + JSON.stringify({ + last_operation: null, + history: [], + }), + ); + + metadataHandler = new MetadataHandler(testBaseDir); + const result = metadataHandler.getLastOperation(); + + expect(result).toBeNull(); + }); + }); + + describe("getHistory", () => { + it("should return the operation history", () => { + const operations = Array(3) + .fill(null) + .map((_, i) => ({ + timestamp: new Date().toISOString(), + operation_type: "pull", + path: `test/path${i}`, + successful_files: [], + failed_files: [], + duration_ms: 1000 + i, + })); + + // Mock readFileSync to return a state with history + (fs.readFileSync as jest.Mock).mockReturnValue( + JSON.stringify({ + last_operation: operations[0], + history: operations, + }), + ); + + metadataHandler = new MetadataHandler(testBaseDir); + const result = metadataHandler.getHistory(); + + expect(result).toEqual(operations); + expect(result.length).toBe(3); + }); + + it("should return empty array if no history exists", () => { + // Mock readFileSync to return empty state + (fs.readFileSync as jest.Mock).mockReturnValue( + JSON.stringify({ + last_operation: null, + history: [], + }), + ); + + metadataHandler = new MetadataHandler(testBaseDir); + const result = metadataHandler.getHistory(); + + expect(result).toEqual([]); + }); + }); +});