v3.0.0 Release Candidate (#346)
* fix: (docs) update changelog and examples * chore: (docs) Add note on Vector Stores * fix: (mcp) WIP to sync with 3.0.0 conventions * fix: (mcp) Sync MCP with final API changes for 3.0.0 * chore: (docs) sync changelog and openapi spec * fix: fixing .mdx files to match openapi.json spec * chore: Add script to estimate event creation --------- Co-authored-by: ajspig <dragon@monstercode.com>
This commit is contained in:
parent
2b4fb953f8
commit
911aa6029f
|
|
@ -14,18 +14,24 @@ and this project adheres to [Semantic Versioning](http://semver.org/).
|
|||
- Reasoning levels configuration for dialectic (`minimal`, `low`, `medium`, `high`, `max`)
|
||||
- Prometheus token tracking for deriver and dialectic operations
|
||||
- n8n integration
|
||||
- Cloud Events for auditable telemetry
|
||||
- External Vector Store support for turbopuffer and lancedb with reconciliation flow
|
||||
|
||||
### Changed
|
||||
|
||||
- API route renaming for consistency
|
||||
- Dreamer and dialectic now respect peer card configuration settings
|
||||
- Observations renamed to Conclusions across API and SDKs
|
||||
- Deriver to buffer representation tasks to normalize workloads
|
||||
- Local Representation tasks to create singular QueueItems
|
||||
- getContext endpoint to use `search_query` rather than force `last_user_message`
|
||||
|
||||
### Fixed
|
||||
|
||||
- Dream scheduling bugs
|
||||
- Summary creation when start_message_id > end_message_id
|
||||
- Cashews upgrade to prevent NoScriptError
|
||||
- Memory leak in `accumulate_metric` call
|
||||
|
||||
### Removed
|
||||
|
||||
|
|
|
|||
|
|
@ -1,5 +1,6 @@
|
|||
{
|
||||
"lockfileVersion": 1,
|
||||
"configVersion": 0,
|
||||
"workspaces": {
|
||||
"": {
|
||||
"name": "honcho-docs",
|
||||
|
|
|
|||
|
|
@ -28,9 +28,35 @@ Welcome to the Honcho changelog! This section documents all notable changes to t
|
|||
<Tabs>
|
||||
<Tab title="Honcho API">
|
||||
<Update label="v3.0.0 (Current)">
|
||||
### Added
|
||||
|
||||
- Agentic Dreamer for intelligent memory consolidation using LLM agents
|
||||
- Agentic Dialectic for query answering using LLM agents with tool use
|
||||
- Reasoning levels configuration for dialectic (`minimal`, `low`, `medium`, `high`, `max`)
|
||||
- Prometheus token tracking for deriver and dialectic operations
|
||||
- n8n integration
|
||||
- Cloud Events for auditable telemetry
|
||||
- External Vector Store support for turbopuffer and lancedb with reconciliation flow
|
||||
|
||||
### Changed
|
||||
|
||||
- Major version release
|
||||
- API route renaming for consistency
|
||||
- Dreamer and dialectic now respect peer card configuration settings
|
||||
- Observations renamed to Conclusions across API and SDKs
|
||||
- Deriver to buffer representation tasks to normalize workloads
|
||||
- Local Representation tasks to create singular QueueItems
|
||||
- getContext endpoint to use `search_query` rather than force `last_user_message`
|
||||
|
||||
### Fixed
|
||||
|
||||
- Dream scheduling bugs
|
||||
- Summary creation when start_message_id > end_message_id
|
||||
- Cashews upgrade to prevent NoScriptError
|
||||
- Memory leak in `accumulate_metric` call
|
||||
|
||||
### Removed
|
||||
|
||||
- Peer card configuration from message configuration; peer cards no longer created/updated in deriver process
|
||||
</Update>
|
||||
|
||||
<Update label="v2.5.1">
|
||||
|
|
@ -148,7 +174,7 @@ Welcome to the Honcho changelog! This section documents all notable changes to t
|
|||
<Update label="v2.3.2">
|
||||
### Added
|
||||
|
||||
- Get peer cards endpoint (`GET /v3/peers/{peer_id}/peer-card`) for retrieving targeted peer context information
|
||||
- Get peer cards endpoint (`GET /v2/peers/{peer_id}/card`) for retrieving targeted peer context information
|
||||
|
||||
### Changed
|
||||
|
||||
|
|
|
|||
|
|
@ -5,7 +5,7 @@
|
|||
"redirects": [
|
||||
{
|
||||
"source": "/",
|
||||
"destination": "/v2/documentation/introduction/overview"
|
||||
"destination": "/v3/documentation/introduction/overview"
|
||||
}
|
||||
],
|
||||
"colors": {
|
||||
|
|
@ -15,21 +15,14 @@
|
|||
},
|
||||
"favicon": "/favicon.svg",
|
||||
"contextual": {
|
||||
"options": [
|
||||
"copy",
|
||||
"view",
|
||||
"chatgpt",
|
||||
"claude"
|
||||
]
|
||||
"options": ["copy", "view", "chatgpt", "claude"]
|
||||
},
|
||||
"navigation": {
|
||||
"versions": [
|
||||
{
|
||||
"version": "v3.0.0",
|
||||
"api": {
|
||||
"openapi": [
|
||||
"openapi.json"
|
||||
]
|
||||
"openapi": ["v3/openapi.json"]
|
||||
},
|
||||
"tabs": [
|
||||
{
|
||||
|
|
@ -101,16 +94,11 @@
|
|||
},
|
||||
{
|
||||
"group": "Migrations",
|
||||
"pages": [
|
||||
"v3/guides/migrations/mem0"
|
||||
]
|
||||
"pages": ["v3/guides/migrations/mem0"]
|
||||
},
|
||||
{
|
||||
"group": "Chatbots",
|
||||
"pages": [
|
||||
"v3/guides/discord",
|
||||
"v3/guides/telegram"
|
||||
]
|
||||
"pages": ["v3/guides/discord", "v3/guides/telegram"]
|
||||
}
|
||||
]
|
||||
},
|
||||
|
|
@ -138,9 +126,7 @@
|
|||
"groups": [
|
||||
{
|
||||
"group": "API Documentation",
|
||||
"pages": [
|
||||
"v3/api-reference/introduction"
|
||||
]
|
||||
"pages": ["v3/api-reference/introduction"]
|
||||
},
|
||||
{
|
||||
"group": "workspaces",
|
||||
|
|
@ -150,8 +136,8 @@
|
|||
"v3/api-reference/endpoint/workspaces/update-workspace",
|
||||
"v3/api-reference/endpoint/workspaces/delete-workspace",
|
||||
"v3/api-reference/endpoint/workspaces/search-workspace",
|
||||
"v3/api-reference/endpoint/workspaces/get-deriver-status",
|
||||
"v3/api-reference/endpoint/workspaces/trigger-dream"
|
||||
"v3/api-reference/endpoint/workspaces/get-queue-status",
|
||||
"v3/api-reference/endpoint/workspaces/schedule-dream"
|
||||
]
|
||||
},
|
||||
{
|
||||
|
|
@ -162,7 +148,7 @@
|
|||
"v3/api-reference/endpoint/peers/update-peer",
|
||||
"v3/api-reference/endpoint/peers/get-sessions-for-peer",
|
||||
"v3/api-reference/endpoint/peers/chat",
|
||||
"v3/api-reference/endpoint/peers/get-working-representation",
|
||||
"v3/api-reference/endpoint/peers/get-representation",
|
||||
"v3/api-reference/endpoint/peers/get-peer-card",
|
||||
"v3/api-reference/endpoint/peers/set-peer-card",
|
||||
"v3/api-reference/endpoint/peers/get-peer-context",
|
||||
|
|
@ -199,12 +185,12 @@
|
|||
]
|
||||
},
|
||||
{
|
||||
"group": "observations",
|
||||
"group": "conclusions",
|
||||
"pages": [
|
||||
"v3/api-reference/endpoint/observations/create-observations",
|
||||
"v3/api-reference/endpoint/observations/list-observations",
|
||||
"v3/api-reference/endpoint/observations/query-observations",
|
||||
"v3/api-reference/endpoint/observations/delete-observation"
|
||||
"v3/api-reference/endpoint/conclusions/create-conclusions",
|
||||
"v3/api-reference/endpoint/conclusions/list-conclusions",
|
||||
"v3/api-reference/endpoint/conclusions/query-conclusions",
|
||||
"v3/api-reference/endpoint/conclusions/delete-conclusion"
|
||||
]
|
||||
},
|
||||
{
|
||||
|
|
@ -219,8 +205,7 @@
|
|||
{
|
||||
"group": "miscellaneous",
|
||||
"pages": [
|
||||
"v3/api-reference/endpoint/keys/create-key",
|
||||
"v3/api-reference/endpoint/metrics"
|
||||
"v3/api-reference/endpoint/keys/create-key"
|
||||
]
|
||||
}
|
||||
]
|
||||
|
|
@ -242,9 +227,7 @@
|
|||
{
|
||||
"version": "v2.5.1",
|
||||
"api": {
|
||||
"openapi": [
|
||||
"openapi.json"
|
||||
]
|
||||
"openapi": ["v2/openapi.json"]
|
||||
},
|
||||
"tabs": [
|
||||
{
|
||||
|
|
@ -291,15 +274,11 @@
|
|||
"groups": [
|
||||
{
|
||||
"group": "Getting Started",
|
||||
"pages": [
|
||||
"v2/guides/overview"
|
||||
]
|
||||
"pages": ["v2/guides/overview"]
|
||||
},
|
||||
{
|
||||
"group": "Migrations",
|
||||
"pages": [
|
||||
"v2/migrations/from-mem0"
|
||||
]
|
||||
"pages": ["v2/migrations/from-mem0"]
|
||||
},
|
||||
{
|
||||
"group": "Integrations",
|
||||
|
|
@ -312,10 +291,7 @@
|
|||
},
|
||||
{
|
||||
"group": "Application Interfaces",
|
||||
"pages": [
|
||||
"v2/guides/discord",
|
||||
"v2/guides/telegram"
|
||||
]
|
||||
"pages": ["v2/guides/discord", "v2/guides/telegram"]
|
||||
}
|
||||
]
|
||||
},
|
||||
|
|
@ -324,9 +300,7 @@
|
|||
"groups": [
|
||||
{
|
||||
"group": "API Documentation",
|
||||
"pages": [
|
||||
"v2/api-reference/introduction"
|
||||
]
|
||||
"pages": ["v2/api-reference/introduction"]
|
||||
},
|
||||
{
|
||||
"group": "workspaces",
|
||||
|
|
@ -442,9 +416,7 @@
|
|||
{
|
||||
"version": "v1.1.0",
|
||||
"api": {
|
||||
"openapi": [
|
||||
"openapi.json"
|
||||
]
|
||||
"openapi": ["openapi.json"]
|
||||
},
|
||||
"tabs": [
|
||||
{
|
||||
|
|
@ -474,23 +446,15 @@
|
|||
"groups": [
|
||||
{
|
||||
"group": "Getting Started",
|
||||
"pages": [
|
||||
"v1/guides/overview",
|
||||
"v1/guides/streaming-response"
|
||||
]
|
||||
"pages": ["v1/guides/overview", "v1/guides/streaming-response"]
|
||||
},
|
||||
{
|
||||
"group": "Application Interfaces",
|
||||
"pages": [
|
||||
"v1/guides/discord",
|
||||
"v1/guides/honcho-mcp"
|
||||
]
|
||||
"pages": ["v1/guides/discord", "v1/guides/honcho-mcp"]
|
||||
},
|
||||
{
|
||||
"group": "Personal Memory",
|
||||
"pages": [
|
||||
"v1/guides/dialectic-endpoint"
|
||||
]
|
||||
"pages": ["v1/guides/dialectic-endpoint"]
|
||||
}
|
||||
]
|
||||
},
|
||||
|
|
@ -499,9 +463,7 @@
|
|||
"groups": [
|
||||
{
|
||||
"group": "API Documentation",
|
||||
"pages": [
|
||||
"v1/api-reference/introduction"
|
||||
]
|
||||
"pages": ["v1/api-reference/introduction"]
|
||||
},
|
||||
{
|
||||
"group": "apps",
|
||||
|
|
@ -549,9 +511,7 @@
|
|||
},
|
||||
{
|
||||
"group": "keys",
|
||||
"pages": [
|
||||
"v1/api-reference/endpoint/keys/create-key"
|
||||
]
|
||||
"pages": ["v1/api-reference/endpoint/keys/create-key"]
|
||||
},
|
||||
{
|
||||
"group": "metamessages",
|
||||
|
|
|
|||
|
|
@ -0,0 +1,3 @@
|
|||
---
|
||||
openapi: post /v3/workspaces/{workspace_id}/conclusions
|
||||
---
|
||||
|
|
@ -0,0 +1,3 @@
|
|||
---
|
||||
openapi: delete /v3/workspaces/{workspace_id}/conclusions/{conclusion_id}
|
||||
---
|
||||
|
|
@ -0,0 +1,3 @@
|
|||
---
|
||||
openapi: post /v3/workspaces/{workspace_id}/conclusions/list
|
||||
---
|
||||
|
|
@ -0,0 +1,3 @@
|
|||
---
|
||||
openapi: post /v3/workspaces/{workspace_id}/conclusions/query
|
||||
---
|
||||
|
|
@ -1,3 +1,3 @@
|
|||
---
|
||||
openapi: post /v3/workspaces/{workspace_id}/sessions/{session_id}/messages/
|
||||
openapi: post /v3/workspaces/{workspace_id}/sessions/{session_id}/messages
|
||||
---
|
||||
|
|
|
|||
|
|
@ -1,3 +0,0 @@
|
|||
---
|
||||
openapi: get /metrics
|
||||
---
|
||||
|
|
@ -1,3 +0,0 @@
|
|||
---
|
||||
openapi: post /v3/workspaces/{workspace_id}/observations
|
||||
---
|
||||
|
|
@ -1,3 +0,0 @@
|
|||
---
|
||||
openapi: delete /v3/workspaces/{workspace_id}/observations/{observation_id}
|
||||
---
|
||||
|
|
@ -1,3 +0,0 @@
|
|||
---
|
||||
openapi: post /v3/workspaces/{workspace_id}/observations/list
|
||||
---
|
||||
|
|
@ -1,3 +0,0 @@
|
|||
---
|
||||
openapi: post /v3/workspaces/{workspace_id}/observations/query
|
||||
---
|
||||
|
|
@ -1,3 +1,3 @@
|
|||
---
|
||||
openapi: get /v3/workspaces/{workspace_id}/sessions/{session_id}/clone
|
||||
openapi: post /v3/workspaces/{workspace_id}/sessions/{session_id}/clone
|
||||
---
|
||||
|
|
|
|||
|
|
@ -1,3 +1,3 @@
|
|||
---
|
||||
openapi: post /v3/workspaces/{workspace_id}/sessions/{session_id}/peers/{peer_id}/config
|
||||
openapi: put /v3/workspaces/{workspace_id}/sessions/{session_id}/peers/{peer_id}/config
|
||||
---
|
||||
|
|
|
|||
|
|
@ -1,3 +0,0 @@
|
|||
---
|
||||
openapi: get /v3/workspaces/{workspace_id}/deriver/status
|
||||
---
|
||||
|
|
@ -0,0 +1,3 @@
|
|||
---
|
||||
openapi: get /v3/workspaces/{workspace_id}/queue/status
|
||||
---
|
||||
|
|
@ -61,6 +61,6 @@ Humans reconstruct the past from imperfect recollections, then act on those reco
|
|||
Understand how representations fit into Honcho's architecture
|
||||
</Card>
|
||||
<Card title="Chat Endpoint" icon="comments" href="/v3/documentation/features/chat">
|
||||
Learn how to query representations with natural language
|
||||
Chat with Honcho about your users
|
||||
</Card>
|
||||
</CardGroup>
|
||||
|
|
|
|||
|
|
@ -369,7 +369,7 @@ From here, you can explore how to use Honcho's features in your own applications
|
|||
Deep dive into how Honcho's primitives fit together
|
||||
</Card>
|
||||
<Card title="Chat Endpoint" icon="comments" href="/v3/documentation/features/chat">
|
||||
Query representations with natural language
|
||||
Chat with Honcho about your users
|
||||
</Card>
|
||||
<Card title="Guides" icon="book" href="/v3/guides/overview">
|
||||
Integration patterns and advanced use cases
|
||||
|
|
|
|||
|
|
@ -58,7 +58,7 @@ session.add_messages([
|
|||
assistant.message("It's sunny and 75°F outside!")
|
||||
])
|
||||
|
||||
# Query peer representations in natural language
|
||||
# Chat with Honcho about a peer
|
||||
response = alice.chat("What did the assistant tell this user about the weather?")
|
||||
|
||||
# Get conversation context for LLM completions
|
||||
|
|
@ -85,7 +85,7 @@ await session.addMessages([
|
|||
assistant.message("It's sunny and 75°F outside!")
|
||||
]);
|
||||
|
||||
// Query peer representations in natural language
|
||||
// Chat with Honcho about a peer
|
||||
const response = await alice.chat("What did the assistant tell this user about the weather?");
|
||||
|
||||
// Get conversation context for LLM completions
|
||||
|
|
|
|||
|
|
@ -198,7 +198,7 @@ Discord bots also offer slash command functionality. Here's an example using Hon
|
|||
```python
|
||||
@bot.slash_command(
|
||||
name="chat",
|
||||
description="Query the peer's representation in natural language.",
|
||||
description="Chat with Honcho about a peer.",
|
||||
)
|
||||
async def chat(ctx, query: str):
|
||||
await ctx.defer()
|
||||
|
|
|
|||
|
|
@ -11,7 +11,6 @@
|
|||
},
|
||||
"license": {
|
||||
"name": "GNU Affero General Public License v3.0",
|
||||
"identifier": "AGPL-3.0-only",
|
||||
"url": "https://github.com/plastic-labs/honcho/blob/main/LICENSE"
|
||||
},
|
||||
"version": "3.0.0"
|
||||
|
|
@ -82,7 +81,7 @@
|
|||
"workspaces"
|
||||
],
|
||||
"summary": "Get All Workspaces",
|
||||
"description": "Get all Workspaces, paginated with optional filters.",
|
||||
"description": "Get all Workspaces",
|
||||
"operationId": "get_all_workspaces_v3_workspaces_list_post",
|
||||
"security": [
|
||||
{
|
||||
|
|
@ -434,7 +433,7 @@
|
|||
"workspaces"
|
||||
],
|
||||
"summary": "Schedule Dream",
|
||||
"description": "Manually schedule a dream task for a specific collection.\n\nThis endpoint bypasses all automatic dream conditions (document threshold,\nminimum hours between dreams) and schedules the dream task for a future execution.\n\nCurrently this endpoint only supports scheduling immediate dreams. In the future,\nusers may pass a cron-style expression to schedule dreams at specific times.",
|
||||
"description": "",
|
||||
"operationId": "schedule_dream_v3_workspaces__workspace_id__schedule_dream_post",
|
||||
"security": [
|
||||
{
|
||||
|
|
@ -487,7 +486,7 @@
|
|||
"peers"
|
||||
],
|
||||
"summary": "Get Peers",
|
||||
"description": "Get all Peers for a Workspace, paginated with optional filters.",
|
||||
"description": "Get all Peers for a Workspace",
|
||||
"operationId": "get_peers_v3_workspaces__workspace_id__peers_list_post",
|
||||
"security": [
|
||||
{
|
||||
|
|
@ -710,7 +709,7 @@
|
|||
"peers"
|
||||
],
|
||||
"summary": "Get Sessions For Peer",
|
||||
"description": "Get all Sessions for a Peer, paginated with optional filters.",
|
||||
"description": "Get all Sessions for a Peer",
|
||||
"operationId": "get_sessions_for_peer_v3_workspaces__workspace_id__peers__peer_id__sessions_post",
|
||||
"security": [
|
||||
{
|
||||
|
|
@ -812,8 +811,8 @@
|
|||
"tags": [
|
||||
"peers"
|
||||
],
|
||||
"summary": "Query a Peer's representation using natural language",
|
||||
"description": "Query a Peer's representation using natural language. Performs agentic search and reasoning to comprehensively\nanswer the query based on all latent knowledge gathered about the peer from their messages and conclusions.",
|
||||
"summary": "Chat",
|
||||
"description": "",
|
||||
"operationId": "chat_v3_workspaces__workspace_id__peers__peer_id__chat_post",
|
||||
"security": [
|
||||
{
|
||||
|
|
@ -1374,7 +1373,7 @@
|
|||
"sessions"
|
||||
],
|
||||
"summary": "Get Sessions",
|
||||
"description": "Get all Sessions for a Workspace, paginated with optional filters.",
|
||||
"description": "Get all Sessions for a Workspace",
|
||||
"operationId": "get_sessions_v3_workspaces__workspace_id__sessions_list_post",
|
||||
"security": [
|
||||
{
|
||||
|
|
@ -1940,7 +1939,7 @@
|
|||
"sessions"
|
||||
],
|
||||
"summary": "Get Session Peers",
|
||||
"description": "Get all Peers in a Session. Results are paginated.",
|
||||
"description": "Get all Peers in a Session",
|
||||
"operationId": "get_session_peers_v3_workspaces__workspace_id__sessions__session_id__peers_get",
|
||||
"security": [
|
||||
{
|
||||
|
|
@ -2663,7 +2662,7 @@
|
|||
"messages"
|
||||
],
|
||||
"summary": "Get Messages",
|
||||
"description": "Get all messages for a Session with optional filters. Results are paginated.",
|
||||
"description": "Get all messages for a Session with optional filters",
|
||||
"operationId": "get_messages_v3_workspaces__workspace_id__sessions__session_id__messages_list_post",
|
||||
"security": [
|
||||
{
|
||||
|
|
@ -2992,7 +2991,7 @@
|
|||
"conclusions"
|
||||
],
|
||||
"summary": "List Conclusions",
|
||||
"description": "List Conclusions using optional filters, ordered by recency unless `reverse` is true. Results are paginated.",
|
||||
"description": "List Conclusions using optional filters, ordered by recency unless `reverse` is true",
|
||||
"operationId": "list_conclusions_v3_workspaces__workspace_id__conclusions_list_post",
|
||||
"security": [
|
||||
{
|
||||
|
|
@ -3641,7 +3640,14 @@
|
|||
"description": "The peer the conclusion is about"
|
||||
},
|
||||
"session_id": {
|
||||
"type": "string",
|
||||
"anyOf": [
|
||||
{
|
||||
"type": "string"
|
||||
},
|
||||
{
|
||||
"type": "null"
|
||||
}
|
||||
],
|
||||
"title": "Session Id"
|
||||
},
|
||||
"created_at": {
|
||||
|
|
@ -3656,7 +3662,6 @@
|
|||
"content",
|
||||
"observer_id",
|
||||
"observed_id",
|
||||
"session_id",
|
||||
"created_at"
|
||||
],
|
||||
"title": "Conclusion",
|
||||
|
|
@ -3700,17 +3705,23 @@
|
|||
"description": "The peer the conclusion is about"
|
||||
},
|
||||
"session_id": {
|
||||
"type": "string",
|
||||
"anyOf": [
|
||||
{
|
||||
"type": "string"
|
||||
},
|
||||
{
|
||||
"type": "null"
|
||||
}
|
||||
],
|
||||
"title": "Session Id",
|
||||
"description": "The session this conclusion relates to"
|
||||
"description": "A session ID to store the conclusion in, if specified"
|
||||
}
|
||||
},
|
||||
"type": "object",
|
||||
"required": [
|
||||
"content",
|
||||
"observer_id",
|
||||
"observed_id",
|
||||
"session_id"
|
||||
"observed_id"
|
||||
],
|
||||
"title": "ConclusionCreate",
|
||||
"description": "Schema for creating a single conclusion."
|
||||
|
|
@ -4770,16 +4781,22 @@
|
|||
"description": "Type of dream to schedule"
|
||||
},
|
||||
"session_id": {
|
||||
"type": "string",
|
||||
"anyOf": [
|
||||
{
|
||||
"type": "string"
|
||||
},
|
||||
{
|
||||
"type": "null"
|
||||
}
|
||||
],
|
||||
"title": "Session Id",
|
||||
"description": "Session ID to scope the dream to"
|
||||
"description": "Session ID to scope the dream to if specified"
|
||||
}
|
||||
},
|
||||
"type": "object",
|
||||
"required": [
|
||||
"observer",
|
||||
"dream_type",
|
||||
"session_id"
|
||||
"dream_type"
|
||||
],
|
||||
"title": "ScheduleDreamRequest"
|
||||
},
|
||||
|
|
|
|||
|
|
@ -118,7 +118,7 @@ class HonchoGetContextTool(BaseTool):
|
|||
"""
|
||||
try:
|
||||
session = self._honcho.session(self._session_id)
|
||||
context = session.get_context(
|
||||
context = session.context(
|
||||
summary=summary,
|
||||
tokens=tokens,
|
||||
peer_target=peer_target,
|
||||
|
|
@ -220,9 +220,8 @@ class HonchoDialecticTool(BaseTool):
|
|||
# Query the dialectic API (non-streaming)
|
||||
response = peer.chat(
|
||||
query=query,
|
||||
stream=False,
|
||||
target=target,
|
||||
session_id=scope_session_id,
|
||||
session=scope_session_id,
|
||||
)
|
||||
|
||||
# Return the response or a default message
|
||||
|
|
|
|||
|
|
@ -36,7 +36,7 @@ def chatbot(state: State):
|
|||
|
||||
# Get context in OpenAI format with token limit
|
||||
# tokens=2000 limits the context to 2000 tokens to manage costs and fit within model limits
|
||||
messages = session.get_context(tokens=2000).to_openai(assistant=assistant)
|
||||
messages = session.context(tokens=2000).to_openai(assistant=assistant)
|
||||
|
||||
# Generate response
|
||||
response = llm.chat.completions.create(
|
||||
|
|
|
|||
|
|
@ -42,7 +42,7 @@ async function chatbot(state: State) {
|
|||
|
||||
// Get context in OpenAI format with token limit
|
||||
// tokens: 2000 limits the context to 2000 tokens to manage costs and fit within model limits
|
||||
const messages = (await session.getContext({ tokens: 2000 })).toOpenAI(assistant);
|
||||
const messages = (await session.context({ tokens: 2000 })).toOpenAI(assistant);
|
||||
|
||||
// Generate response
|
||||
const response = await llm.chat.completions.create({
|
||||
|
|
|
|||
|
|
@ -15,7 +15,7 @@
|
|||
"deploy:staging": "wrangler deploy --env staging"
|
||||
},
|
||||
"dependencies": {
|
||||
"@honcho-ai/sdk": "^1.6.0"
|
||||
"@honcho-ai/sdk": "^2.0.0"
|
||||
},
|
||||
"devDependencies": {
|
||||
"@cloudflare/workers-types": "^4.20241002.0",
|
||||
|
|
|
|||
620
mcp/worker.ts
620
mcp/worker.ts
|
|
@ -223,17 +223,20 @@ class HonchoWorker {
|
|||
* Get personalization insights about the user, based on the query and the accumulated knowledge of the user across all conversations.
|
||||
* @param sessionId - The ID of the session for context
|
||||
* @param query - The question about the user's preferences, habits, etc.
|
||||
* @param reasoningLevel - Optional reasoning level: "minimal", "low", "medium", "high", or "max"
|
||||
* @returns A string with the personalization insights
|
||||
*/
|
||||
async getPersonalizationInsights(
|
||||
sessionId: string,
|
||||
query: string,
|
||||
reasoningLevel?: string,
|
||||
): Promise<string> {
|
||||
const userPeer = await this.honcho.peer(this.config.userName);
|
||||
|
||||
// Get the personalization insights (non-streaming returns string | null)
|
||||
const personalizationInsights = await userPeer.chat(query, {
|
||||
session: sessionId,
|
||||
reasoningLevel,
|
||||
});
|
||||
|
||||
if (!personalizationInsights || typeof personalizationInsights !== 'string') {
|
||||
|
|
@ -345,6 +348,7 @@ class HonchoWorker {
|
|||
* @param query - The natural language question to ask
|
||||
* @param targetPeerId - Optional target peer ID for local representation queries
|
||||
* @param sessionId - Optional session ID to scope the query to a specific session
|
||||
* @param reasoningLevel - Optional reasoning level: "minimal", "low", "medium", "high", or "max"
|
||||
* @returns Response string containing the answer to the query, or "None" if no relevant information
|
||||
*/
|
||||
async chat(
|
||||
|
|
@ -352,6 +356,7 @@ class HonchoWorker {
|
|||
query: string,
|
||||
targetPeerId?: string,
|
||||
sessionId?: string,
|
||||
reasoningLevel?: string,
|
||||
): Promise<string> {
|
||||
const peer = await this.honcho.peer(peerId);
|
||||
let targetPeer;
|
||||
|
|
@ -362,6 +367,7 @@ class HonchoWorker {
|
|||
const result = await peer.chat(query, {
|
||||
target: targetPeer,
|
||||
session: sessionId,
|
||||
reasoningLevel,
|
||||
});
|
||||
|
||||
if (!result || typeof result !== 'string') {
|
||||
|
|
@ -387,6 +393,247 @@ class HonchoWorker {
|
|||
return peers;
|
||||
}
|
||||
|
||||
/**
|
||||
* Get the peer card for a peer.
|
||||
* @param peerId - The ID of the observer peer
|
||||
* @param targetPeerId - Optional target peer ID to get the card about
|
||||
* @returns The peer card content or null if not found
|
||||
*/
|
||||
async getPeerCard(
|
||||
peerId: string,
|
||||
targetPeerId?: string,
|
||||
): Promise<string | null> {
|
||||
const peer = await this.honcho.peer(peerId);
|
||||
let targetPeer;
|
||||
if (targetPeerId) {
|
||||
targetPeer = await this.honcho.peer(targetPeerId);
|
||||
}
|
||||
return await peer.card(targetPeer);
|
||||
}
|
||||
|
||||
/**
|
||||
* Get the peer context (combined representation and peer card).
|
||||
* @param peerId - The ID of the observer peer
|
||||
* @param targetPeerId - Optional target peer ID
|
||||
* @param sessionId - Optional session ID to scope the context
|
||||
* @param searchQuery - Optional semantic search query
|
||||
* @param maxConclusions - Optional maximum number of conclusions to include
|
||||
* @returns Context object with representation and peer card
|
||||
*/
|
||||
async getPeerContext(
|
||||
peerId: string,
|
||||
targetPeerId?: string,
|
||||
sessionId?: string,
|
||||
searchQuery?: string,
|
||||
maxConclusions?: number,
|
||||
): Promise<Record<string, any>> {
|
||||
const peer = await this.honcho.peer(peerId);
|
||||
let targetPeer;
|
||||
if (targetPeerId) {
|
||||
targetPeer = await this.honcho.peer(targetPeerId);
|
||||
}
|
||||
const context = await peer.context({
|
||||
target: targetPeer,
|
||||
session: sessionId,
|
||||
searchQuery,
|
||||
maxConclusions,
|
||||
});
|
||||
return {
|
||||
peer_id: context.peerId,
|
||||
target_id: context.targetId,
|
||||
representation: context.representation,
|
||||
peer_card: context.peerCard,
|
||||
};
|
||||
}
|
||||
|
||||
/**
|
||||
* Get the formatted representation for a peer.
|
||||
* @param peerId - The ID of the observer peer
|
||||
* @param targetPeerId - Optional target peer ID
|
||||
* @param sessionId - Optional session ID to scope the representation
|
||||
* @param searchQuery - Optional semantic search query
|
||||
* @param maxConclusions - Optional maximum number of conclusions
|
||||
* @returns Formatted representation string
|
||||
*/
|
||||
async getRepresentation(
|
||||
peerId: string,
|
||||
targetPeerId?: string,
|
||||
sessionId?: string,
|
||||
searchQuery?: string,
|
||||
maxConclusions?: number,
|
||||
): Promise<string> {
|
||||
const peer = await this.honcho.peer(peerId);
|
||||
let targetPeer;
|
||||
if (targetPeerId) {
|
||||
targetPeer = await this.honcho.peer(targetPeerId);
|
||||
}
|
||||
return await peer.representation({
|
||||
target: targetPeer,
|
||||
session: sessionId,
|
||||
searchQuery,
|
||||
maxConclusions,
|
||||
});
|
||||
}
|
||||
|
||||
//////////////////////////////////////////////////////
|
||||
/// ///
|
||||
/// Conclusions operations ///
|
||||
/// ///
|
||||
//////////////////////////////////////////////////////
|
||||
|
||||
/**
|
||||
* List conclusions for a peer.
|
||||
* @param peerId - The ID of the observer peer
|
||||
* @param targetPeerId - Optional target peer to get conclusions about
|
||||
* @returns List of conclusions
|
||||
*/
|
||||
async listConclusions(
|
||||
peerId: string,
|
||||
targetPeerId?: string,
|
||||
): Promise<any[]> {
|
||||
const peer = await this.honcho.peer(peerId);
|
||||
let conclusionScope;
|
||||
if (targetPeerId) {
|
||||
const targetPeer = await this.honcho.peer(targetPeerId);
|
||||
conclusionScope = peer.conclusionsOf(targetPeer);
|
||||
} else {
|
||||
conclusionScope = peer.conclusions;
|
||||
}
|
||||
|
||||
const conclusionsPage = await conclusionScope.list();
|
||||
const conclusions = [];
|
||||
for await (const conclusion of conclusionsPage) {
|
||||
conclusions.push({
|
||||
id: conclusion.id,
|
||||
content: conclusion.content,
|
||||
observer_id: conclusion.observerId,
|
||||
observed_id: conclusion.observedId,
|
||||
session_id: conclusion.sessionId,
|
||||
created_at: conclusion.createdAt,
|
||||
});
|
||||
}
|
||||
return conclusions;
|
||||
}
|
||||
|
||||
/**
|
||||
* Query conclusions using semantic search.
|
||||
* @param peerId - The ID of the observer peer
|
||||
* @param query - The semantic search query
|
||||
* @param targetPeerId - Optional target peer to search conclusions about
|
||||
* @param topK - Maximum number of results to return
|
||||
* @returns List of matching conclusions
|
||||
*/
|
||||
async queryConclusions(
|
||||
peerId: string,
|
||||
query: string,
|
||||
targetPeerId?: string,
|
||||
topK?: number,
|
||||
): Promise<any[]> {
|
||||
const peer = await this.honcho.peer(peerId);
|
||||
let conclusionScope;
|
||||
if (targetPeerId) {
|
||||
const targetPeer = await this.honcho.peer(targetPeerId);
|
||||
conclusionScope = peer.conclusionsOf(targetPeer);
|
||||
} else {
|
||||
conclusionScope = peer.conclusions;
|
||||
}
|
||||
|
||||
// SDK query returns Conclusion[] directly, not a Page
|
||||
const conclusions = await conclusionScope.query(query, topK);
|
||||
return conclusions.map((conclusion) => ({
|
||||
id: conclusion.id,
|
||||
content: conclusion.content,
|
||||
observer_id: conclusion.observerId,
|
||||
observed_id: conclusion.observedId,
|
||||
session_id: conclusion.sessionId,
|
||||
created_at: conclusion.createdAt,
|
||||
}));
|
||||
}
|
||||
|
||||
/**
|
||||
* Create conclusions manually.
|
||||
* @param peerId - The ID of the observer peer
|
||||
* @param targetPeerId - The target peer the conclusions are about
|
||||
* @param conclusions - List of conclusion content strings
|
||||
* @param sessionId - Optional session ID to associate with conclusions
|
||||
* @returns Number of conclusions created
|
||||
*/
|
||||
async createConclusions(
|
||||
peerId: string,
|
||||
targetPeerId: string,
|
||||
conclusions: string[],
|
||||
sessionId?: string,
|
||||
): Promise<number> {
|
||||
const peer = await this.honcho.peer(peerId);
|
||||
const targetPeer = await this.honcho.peer(targetPeerId);
|
||||
const conclusionScope = peer.conclusionsOf(targetPeer);
|
||||
|
||||
// Convert string array to ConclusionCreateParams array
|
||||
const conclusionParams = conclusions.map((content) => ({
|
||||
content,
|
||||
sessionId,
|
||||
}));
|
||||
|
||||
await conclusionScope.create(conclusionParams);
|
||||
return conclusions.length;
|
||||
}
|
||||
|
||||
/**
|
||||
* Delete a conclusion.
|
||||
* @param peerId - The ID of the observer peer
|
||||
* @param targetPeerId - The target peer the conclusion is about
|
||||
* @param conclusionId - The ID of the conclusion to delete
|
||||
*/
|
||||
async deleteConclusion(
|
||||
peerId: string,
|
||||
targetPeerId: string,
|
||||
conclusionId: string,
|
||||
): Promise<void> {
|
||||
const peer = await this.honcho.peer(peerId);
|
||||
const targetPeer = await this.honcho.peer(targetPeerId);
|
||||
const conclusionScope = peer.conclusionsOf(targetPeer);
|
||||
|
||||
await conclusionScope.delete(conclusionId);
|
||||
}
|
||||
|
||||
//////////////////////////////////////////////////////
|
||||
/// ///
|
||||
/// System operations ///
|
||||
/// ///
|
||||
//////////////////////////////////////////////////////
|
||||
|
||||
/**
|
||||
* Schedule a dream (memory consolidation) for a peer.
|
||||
* @param peerId - The ID of the observer peer
|
||||
* @param targetPeerId - Optional target peer to dream about (defaults to observer for self-reflection)
|
||||
* @param sessionId - Optional session ID to scope the dream to
|
||||
* @returns Confirmation message
|
||||
*/
|
||||
async scheduleDream(
|
||||
peerId: string,
|
||||
targetPeerId?: string,
|
||||
sessionId?: string,
|
||||
): Promise<string> {
|
||||
const peer = await this.honcho.peer(peerId);
|
||||
const session = sessionId ? await this.honcho.session(sessionId) : undefined;
|
||||
const targetPeer = targetPeerId ? await this.honcho.peer(targetPeerId) : undefined;
|
||||
|
||||
await this.honcho.scheduleDream({
|
||||
observer: peer,
|
||||
session: session,
|
||||
observed: targetPeer,
|
||||
});
|
||||
return "Dream scheduled successfully";
|
||||
}
|
||||
|
||||
/**
|
||||
* Get the current queue status for the deriver.
|
||||
* @returns Queue status information
|
||||
*/
|
||||
async getQueueStatus(): Promise<Record<string, any>> {
|
||||
return await this.honcho.queueStatus();
|
||||
}
|
||||
|
||||
//////////////////////////////////////////////////////
|
||||
/// ///
|
||||
/// Session operations ///
|
||||
|
|
@ -739,6 +986,12 @@ const tools: Tool[] = [
|
|||
description:
|
||||
"The question about the user's preferences, habits, etc.",
|
||||
},
|
||||
reasoning_level: {
|
||||
type: "string",
|
||||
enum: ["minimal", "low", "medium", "high", "max"],
|
||||
description:
|
||||
"The reasoning level for the response. Higher levels provide more detailed analysis.",
|
||||
},
|
||||
},
|
||||
required: ["session_id", "query"],
|
||||
},
|
||||
|
|
@ -879,6 +1132,12 @@ const tools: Tool[] = [
|
|||
description:
|
||||
"Optional session ID to scope the query to a specific session.",
|
||||
},
|
||||
reasoning_level: {
|
||||
type: "string",
|
||||
enum: ["minimal", "low", "medium", "high", "max"],
|
||||
description:
|
||||
"The reasoning level for the response. Higher levels provide more detailed analysis.",
|
||||
},
|
||||
},
|
||||
required: ["peer_id", "query"],
|
||||
},
|
||||
|
|
@ -892,6 +1151,223 @@ const tools: Tool[] = [
|
|||
required: [],
|
||||
},
|
||||
},
|
||||
{
|
||||
name: "get_peer_card",
|
||||
description:
|
||||
"Get the peer card for a peer. The peer card contains compact biographical facts about the peer.",
|
||||
inputSchema: {
|
||||
type: "object",
|
||||
properties: {
|
||||
peer_id: {
|
||||
type: "string",
|
||||
description: "The ID of the observer peer.",
|
||||
},
|
||||
target_peer_id: {
|
||||
type: "string",
|
||||
description:
|
||||
"Optional target peer ID to get the card about. If not provided, returns the peer's own card.",
|
||||
},
|
||||
},
|
||||
required: ["peer_id"],
|
||||
},
|
||||
},
|
||||
{
|
||||
name: "get_peer_context",
|
||||
description:
|
||||
"Get the peer context, which combines the representation and peer card for comprehensive peer information.",
|
||||
inputSchema: {
|
||||
type: "object",
|
||||
properties: {
|
||||
peer_id: {
|
||||
type: "string",
|
||||
description: "The ID of the observer peer.",
|
||||
},
|
||||
target_peer_id: {
|
||||
type: "string",
|
||||
description: "Optional target peer ID to get context about.",
|
||||
},
|
||||
session_id: {
|
||||
type: "string",
|
||||
description: "Optional session ID to scope the context.",
|
||||
},
|
||||
search_query: {
|
||||
type: "string",
|
||||
description: "Optional semantic search query to filter conclusions.",
|
||||
},
|
||||
max_conclusions: {
|
||||
type: "integer",
|
||||
description: "Maximum number of conclusions to include.",
|
||||
},
|
||||
},
|
||||
required: ["peer_id"],
|
||||
},
|
||||
},
|
||||
{
|
||||
name: "get_representation",
|
||||
description:
|
||||
"Get the formatted representation for a peer, containing their conclusions and observations.",
|
||||
inputSchema: {
|
||||
type: "object",
|
||||
properties: {
|
||||
peer_id: {
|
||||
type: "string",
|
||||
description: "The ID of the observer peer.",
|
||||
},
|
||||
target_peer_id: {
|
||||
type: "string",
|
||||
description: "Optional target peer ID to get representation about.",
|
||||
},
|
||||
session_id: {
|
||||
type: "string",
|
||||
description: "Optional session ID to scope the representation.",
|
||||
},
|
||||
search_query: {
|
||||
type: "string",
|
||||
description: "Optional semantic search query to filter conclusions.",
|
||||
},
|
||||
max_conclusions: {
|
||||
type: "integer",
|
||||
description: "Maximum number of conclusions to include.",
|
||||
},
|
||||
},
|
||||
required: ["peer_id"],
|
||||
},
|
||||
},
|
||||
|
||||
// Conclusions operations
|
||||
{
|
||||
name: "list_conclusions",
|
||||
description:
|
||||
"List conclusions for a peer. Conclusions are facts and observations derived from conversations.",
|
||||
inputSchema: {
|
||||
type: "object",
|
||||
properties: {
|
||||
peer_id: {
|
||||
type: "string",
|
||||
description: "The ID of the observer peer.",
|
||||
},
|
||||
target_peer_id: {
|
||||
type: "string",
|
||||
description:
|
||||
"Optional target peer ID to get conclusions about. If not provided, returns conclusions about self.",
|
||||
},
|
||||
},
|
||||
required: ["peer_id"],
|
||||
},
|
||||
},
|
||||
{
|
||||
name: "query_conclusions",
|
||||
description: "Query conclusions using semantic search.",
|
||||
inputSchema: {
|
||||
type: "object",
|
||||
properties: {
|
||||
peer_id: {
|
||||
type: "string",
|
||||
description: "The ID of the observer peer.",
|
||||
},
|
||||
query: {
|
||||
type: "string",
|
||||
description: "The semantic search query.",
|
||||
},
|
||||
target_peer_id: {
|
||||
type: "string",
|
||||
description: "Optional target peer ID to search conclusions about.",
|
||||
},
|
||||
top_k: {
|
||||
type: "integer",
|
||||
description: "Maximum number of results to return.",
|
||||
},
|
||||
},
|
||||
required: ["peer_id", "query"],
|
||||
},
|
||||
},
|
||||
{
|
||||
name: "create_conclusions",
|
||||
description: "Create conclusions manually for a peer.",
|
||||
inputSchema: {
|
||||
type: "object",
|
||||
properties: {
|
||||
peer_id: {
|
||||
type: "string",
|
||||
description: "The ID of the observer peer.",
|
||||
},
|
||||
target_peer_id: {
|
||||
type: "string",
|
||||
description: "The target peer the conclusions are about.",
|
||||
},
|
||||
conclusions: {
|
||||
type: "array",
|
||||
items: { type: "string" },
|
||||
description: "List of conclusion content strings to create.",
|
||||
},
|
||||
session_id: {
|
||||
type: "string",
|
||||
description:
|
||||
"Optional session ID to associate with conclusions. If not provided, conclusions will be global.",
|
||||
},
|
||||
},
|
||||
required: ["peer_id", "target_peer_id", "conclusions"],
|
||||
},
|
||||
},
|
||||
{
|
||||
name: "delete_conclusion",
|
||||
description: "Delete a specific conclusion.",
|
||||
inputSchema: {
|
||||
type: "object",
|
||||
properties: {
|
||||
peer_id: {
|
||||
type: "string",
|
||||
description: "The ID of the observer peer.",
|
||||
},
|
||||
target_peer_id: {
|
||||
type: "string",
|
||||
description: "The target peer the conclusion is about.",
|
||||
},
|
||||
conclusion_id: {
|
||||
type: "string",
|
||||
description: "The ID of the conclusion to delete.",
|
||||
},
|
||||
},
|
||||
required: ["peer_id", "target_peer_id", "conclusion_id"],
|
||||
},
|
||||
},
|
||||
|
||||
// System operations
|
||||
{
|
||||
name: "schedule_dream",
|
||||
description:
|
||||
"Schedule a dream (memory consolidation) for a peer. Dreams help consolidate and improve memory quality.",
|
||||
inputSchema: {
|
||||
type: "object",
|
||||
properties: {
|
||||
peer_id: {
|
||||
type: "string",
|
||||
description: "The ID of the observer peer.",
|
||||
},
|
||||
target_peer_id: {
|
||||
type: "string",
|
||||
description:
|
||||
"Optional target peer to dream about. If not provided, defaults to the observer peer (self-reflection).",
|
||||
},
|
||||
session_id: {
|
||||
type: "string",
|
||||
description:
|
||||
"Optional session ID to scope the dream to. If not provided, the dream will be global.",
|
||||
},
|
||||
},
|
||||
required: ["peer_id"],
|
||||
},
|
||||
},
|
||||
{
|
||||
name: "get_queue_status",
|
||||
description:
|
||||
"Get the current queue status for the deriver (background processing system).",
|
||||
inputSchema: {
|
||||
type: "object",
|
||||
properties: {},
|
||||
required: [],
|
||||
},
|
||||
},
|
||||
|
||||
// Session operations
|
||||
{
|
||||
|
|
@ -1170,6 +1646,7 @@ async function executeToolCall(
|
|||
result = await honcho.getPersonalizationInsights(
|
||||
toolArguments.session_id,
|
||||
toolArguments.query,
|
||||
toolArguments.reasoning_level,
|
||||
);
|
||||
break;
|
||||
}
|
||||
|
|
@ -1272,6 +1749,7 @@ async function executeToolCall(
|
|||
toolArguments.query,
|
||||
toolArguments.target_peer_id,
|
||||
toolArguments.session_id,
|
||||
toolArguments.reasoning_level,
|
||||
);
|
||||
break;
|
||||
}
|
||||
|
|
@ -1280,6 +1758,146 @@ async function executeToolCall(
|
|||
result = await honcho.listPeers();
|
||||
break;
|
||||
|
||||
case "get_peer_card": {
|
||||
const validation = validateArguments(
|
||||
toolArguments,
|
||||
["peer_id"],
|
||||
requestId,
|
||||
);
|
||||
if (validation) return validation;
|
||||
|
||||
result = await honcho.getPeerCard(
|
||||
toolArguments.peer_id,
|
||||
toolArguments.target_peer_id,
|
||||
);
|
||||
break;
|
||||
}
|
||||
|
||||
case "get_peer_context": {
|
||||
const validation = validateArguments(
|
||||
toolArguments,
|
||||
["peer_id"],
|
||||
requestId,
|
||||
);
|
||||
if (validation) return validation;
|
||||
|
||||
result = await honcho.getPeerContext(
|
||||
toolArguments.peer_id,
|
||||
toolArguments.target_peer_id,
|
||||
toolArguments.session_id,
|
||||
toolArguments.search_query,
|
||||
toolArguments.max_conclusions,
|
||||
);
|
||||
break;
|
||||
}
|
||||
|
||||
case "get_representation": {
|
||||
const validation = validateArguments(
|
||||
toolArguments,
|
||||
["peer_id"],
|
||||
requestId,
|
||||
);
|
||||
if (validation) return validation;
|
||||
|
||||
result = await honcho.getRepresentation(
|
||||
toolArguments.peer_id,
|
||||
toolArguments.target_peer_id,
|
||||
toolArguments.session_id,
|
||||
toolArguments.search_query,
|
||||
toolArguments.max_conclusions,
|
||||
);
|
||||
break;
|
||||
}
|
||||
|
||||
// Conclusions operations
|
||||
case "list_conclusions": {
|
||||
const validation = validateArguments(
|
||||
toolArguments,
|
||||
["peer_id"],
|
||||
requestId,
|
||||
);
|
||||
if (validation) return validation;
|
||||
|
||||
result = await honcho.listConclusions(
|
||||
toolArguments.peer_id,
|
||||
toolArguments.target_peer_id,
|
||||
);
|
||||
break;
|
||||
}
|
||||
|
||||
case "query_conclusions": {
|
||||
const validation = validateArguments(
|
||||
toolArguments,
|
||||
["peer_id", "query"],
|
||||
requestId,
|
||||
);
|
||||
if (validation) return validation;
|
||||
|
||||
result = await honcho.queryConclusions(
|
||||
toolArguments.peer_id,
|
||||
toolArguments.query,
|
||||
toolArguments.target_peer_id,
|
||||
toolArguments.top_k,
|
||||
);
|
||||
break;
|
||||
}
|
||||
|
||||
case "create_conclusions": {
|
||||
const validation = validateArguments(
|
||||
toolArguments,
|
||||
["peer_id", "target_peer_id", "conclusions"],
|
||||
requestId,
|
||||
);
|
||||
if (validation) return validation;
|
||||
|
||||
const count = await honcho.createConclusions(
|
||||
toolArguments.peer_id,
|
||||
toolArguments.target_peer_id,
|
||||
toolArguments.conclusions,
|
||||
toolArguments.session_id,
|
||||
);
|
||||
result = `Created ${count} conclusions successfully`;
|
||||
break;
|
||||
}
|
||||
|
||||
case "delete_conclusion": {
|
||||
const validation = validateArguments(
|
||||
toolArguments,
|
||||
["peer_id", "target_peer_id", "conclusion_id"],
|
||||
requestId,
|
||||
);
|
||||
if (validation) return validation;
|
||||
|
||||
await honcho.deleteConclusion(
|
||||
toolArguments.peer_id,
|
||||
toolArguments.target_peer_id,
|
||||
toolArguments.conclusion_id,
|
||||
);
|
||||
result = "Conclusion deleted successfully";
|
||||
break;
|
||||
}
|
||||
|
||||
// System operations
|
||||
case "schedule_dream": {
|
||||
const validation = validateArguments(
|
||||
toolArguments,
|
||||
["peer_id"],
|
||||
requestId,
|
||||
);
|
||||
if (validation) return validation;
|
||||
|
||||
result = await honcho.scheduleDream(
|
||||
toolArguments.peer_id,
|
||||
toolArguments.target_peer_id,
|
||||
toolArguments.session_id,
|
||||
);
|
||||
break;
|
||||
}
|
||||
|
||||
case "get_queue_status":
|
||||
result = await honcho.getQueueStatus();
|
||||
break;
|
||||
|
||||
// Session operations
|
||||
case "create_session": {
|
||||
const validation = validateArguments(
|
||||
|
|
@ -1553,7 +2171,7 @@ export default {
|
|||
},
|
||||
serverInfo: {
|
||||
name: "Honcho MCP Server",
|
||||
version: "1.0.0",
|
||||
version: "3.0.0",
|
||||
},
|
||||
}),
|
||||
),
|
||||
|
|
|
|||
|
|
@ -5,90 +5,17 @@
|
|||
"": {
|
||||
"name": "@honcho-ai/sdk",
|
||||
"dependencies": {
|
||||
"@honcho-ai/core": "2.2.0",
|
||||
"@types/node": "^24.0.1",
|
||||
"zod": "4.0.0",
|
||||
},
|
||||
"devDependencies": {
|
||||
"@biomejs/biome": "^2.1.2",
|
||||
"@types/jest": "^29.5.14",
|
||||
"jest": "^29.7.0",
|
||||
"ts-jest": "^29.1.0",
|
||||
"@types/bun": "latest",
|
||||
"typescript": "^5.0.0",
|
||||
},
|
||||
},
|
||||
},
|
||||
"packages": {
|
||||
"@babel/code-frame": ["@babel/code-frame@7.27.1", "", { "dependencies": { "@babel/helper-validator-identifier": "^7.27.1", "js-tokens": "^4.0.0", "picocolors": "^1.1.1" } }, "sha512-cjQ7ZlQ0Mv3b47hABuTevyTuYN4i+loJKGeV9flcCgIK37cCXRh+L1bd3iBHlynerhQ7BhCkn2BPbQUL+rGqFg=="],
|
||||
|
||||
"@babel/compat-data": ["@babel/compat-data@7.28.5", "", {}, "sha512-6uFXyCayocRbqhZOB+6XcuZbkMNimwfVGFji8CTZnCzOHVGvDqzvitu1re2AU5LROliz7eQPhB8CpAMvnx9EjA=="],
|
||||
|
||||
"@babel/core": ["@babel/core@7.28.5", "", { "dependencies": { "@babel/code-frame": "^7.27.1", "@babel/generator": "^7.28.5", "@babel/helper-compilation-targets": "^7.27.2", "@babel/helper-module-transforms": "^7.28.3", "@babel/helpers": "^7.28.4", "@babel/parser": "^7.28.5", "@babel/template": "^7.27.2", "@babel/traverse": "^7.28.5", "@babel/types": "^7.28.5", "@jridgewell/remapping": "^2.3.5", "convert-source-map": "^2.0.0", "debug": "^4.1.0", "gensync": "^1.0.0-beta.2", "json5": "^2.2.3", "semver": "^6.3.1" } }, "sha512-e7jT4DxYvIDLk1ZHmU/m/mB19rex9sv0c2ftBtjSBv+kVM/902eh0fINUzD7UwLLNR+jU585GxUJ8/EBfAM5fw=="],
|
||||
|
||||
"@babel/generator": ["@babel/generator@7.28.5", "", { "dependencies": { "@babel/parser": "^7.28.5", "@babel/types": "^7.28.5", "@jridgewell/gen-mapping": "^0.3.12", "@jridgewell/trace-mapping": "^0.3.28", "jsesc": "^3.0.2" } }, "sha512-3EwLFhZ38J4VyIP6WNtt2kUdW9dokXA9Cr4IVIFHuCpZ3H8/YFOl5JjZHisrn1fATPBmKKqXzDFvh9fUwHz6CQ=="],
|
||||
|
||||
"@babel/helper-compilation-targets": ["@babel/helper-compilation-targets@7.27.2", "", { "dependencies": { "@babel/compat-data": "^7.27.2", "@babel/helper-validator-option": "^7.27.1", "browserslist": "^4.24.0", "lru-cache": "^5.1.1", "semver": "^6.3.1" } }, "sha512-2+1thGUUWWjLTYTHZWK1n8Yga0ijBz1XAhUXcKy81rd5g6yh7hGqMp45v7cadSbEHc9G3OTv45SyneRN3ps4DQ=="],
|
||||
|
||||
"@babel/helper-globals": ["@babel/helper-globals@7.28.0", "", {}, "sha512-+W6cISkXFa1jXsDEdYA8HeevQT/FULhxzR99pxphltZcVaugps53THCeiWA8SguxxpSp3gKPiuYfSWopkLQ4hw=="],
|
||||
|
||||
"@babel/helper-module-imports": ["@babel/helper-module-imports@7.27.1", "", { "dependencies": { "@babel/traverse": "^7.27.1", "@babel/types": "^7.27.1" } }, "sha512-0gSFWUPNXNopqtIPQvlD5WgXYI5GY2kP2cCvoT8kczjbfcfuIljTbcWrulD1CIPIX2gt1wghbDy08yE1p+/r3w=="],
|
||||
|
||||
"@babel/helper-module-transforms": ["@babel/helper-module-transforms@7.28.3", "", { "dependencies": { "@babel/helper-module-imports": "^7.27.1", "@babel/helper-validator-identifier": "^7.27.1", "@babel/traverse": "^7.28.3" }, "peerDependencies": { "@babel/core": "^7.0.0" } }, "sha512-gytXUbs8k2sXS9PnQptz5o0QnpLL51SwASIORY6XaBKF88nsOT0Zw9szLqlSGQDP/4TljBAD5y98p2U1fqkdsw=="],
|
||||
|
||||
"@babel/helper-plugin-utils": ["@babel/helper-plugin-utils@7.27.1", "", {}, "sha512-1gn1Up5YXka3YYAHGKpbideQ5Yjf1tDa9qYcgysz+cNCXukyLl6DjPXhD3VRwSb8c0J9tA4b2+rHEZtc6R0tlw=="],
|
||||
|
||||
"@babel/helper-string-parser": ["@babel/helper-string-parser@7.27.1", "", {}, "sha512-qMlSxKbpRlAridDExk92nSobyDdpPijUq2DW6oDnUqd0iOGxmQjyqhMIihI9+zv4LPyZdRje2cavWPbCbWm3eA=="],
|
||||
|
||||
"@babel/helper-validator-identifier": ["@babel/helper-validator-identifier@7.28.5", "", {}, "sha512-qSs4ifwzKJSV39ucNjsvc6WVHs6b7S03sOh2OcHF9UHfVPqWWALUsNUVzhSBiItjRZoLHx7nIarVjqKVusUZ1Q=="],
|
||||
|
||||
"@babel/helper-validator-option": ["@babel/helper-validator-option@7.27.1", "", {}, "sha512-YvjJow9FxbhFFKDSuFnVCe2WxXk1zWc22fFePVNEaWJEu8IrZVlda6N0uHwzZrUM1il7NC9Mlp4MaJYbYd9JSg=="],
|
||||
|
||||
"@babel/helpers": ["@babel/helpers@7.28.4", "", { "dependencies": { "@babel/template": "^7.27.2", "@babel/types": "^7.28.4" } }, "sha512-HFN59MmQXGHVyYadKLVumYsA9dBFun/ldYxipEjzA4196jpLZd8UjEEBLkbEkvfYreDqJhZxYAWFPtrfhNpj4w=="],
|
||||
|
||||
"@babel/parser": ["@babel/parser@7.28.5", "", { "dependencies": { "@babel/types": "^7.28.5" }, "bin": "./bin/babel-parser.js" }, "sha512-KKBU1VGYR7ORr3At5HAtUQ+TV3SzRCXmA/8OdDZiLDBIZxVyzXuztPjfLd3BV1PRAQGCMWWSHYhL0F8d5uHBDQ=="],
|
||||
|
||||
"@babel/plugin-syntax-async-generators": ["@babel/plugin-syntax-async-generators@7.8.4", "", { "dependencies": { "@babel/helper-plugin-utils": "^7.8.0" }, "peerDependencies": { "@babel/core": "^7.0.0-0" } }, "sha512-tycmZxkGfZaxhMRbXlPXuVFpdWlXpir2W4AMhSJgRKzk/eDlIXOhb2LHWoLpDF7TEHylV5zNhykX6KAgHJmTNw=="],
|
||||
|
||||
"@babel/plugin-syntax-bigint": ["@babel/plugin-syntax-bigint@7.8.3", "", { "dependencies": { "@babel/helper-plugin-utils": "^7.8.0" }, "peerDependencies": { "@babel/core": "^7.0.0-0" } }, "sha512-wnTnFlG+YxQm3vDxpGE57Pj0srRU4sHE/mDkt1qv2YJJSeUAec2ma4WLUnUPeKjyrfntVwe/N6dCXpU+zL3Npg=="],
|
||||
|
||||
"@babel/plugin-syntax-class-properties": ["@babel/plugin-syntax-class-properties@7.12.13", "", { "dependencies": { "@babel/helper-plugin-utils": "^7.12.13" }, "peerDependencies": { "@babel/core": "^7.0.0-0" } }, "sha512-fm4idjKla0YahUNgFNLCB0qySdsoPiZP3iQE3rky0mBUtMZ23yDJ9SJdg6dXTSDnulOVqiF3Hgr9nbXvXTQZYA=="],
|
||||
|
||||
"@babel/plugin-syntax-class-static-block": ["@babel/plugin-syntax-class-static-block@7.14.5", "", { "dependencies": { "@babel/helper-plugin-utils": "^7.14.5" }, "peerDependencies": { "@babel/core": "^7.0.0-0" } }, "sha512-b+YyPmr6ldyNnM6sqYeMWE+bgJcJpO6yS4QD7ymxgH34GBPNDM/THBh8iunyvKIZztiwLH4CJZ0RxTk9emgpjw=="],
|
||||
|
||||
"@babel/plugin-syntax-import-attributes": ["@babel/plugin-syntax-import-attributes@7.27.1", "", { "dependencies": { "@babel/helper-plugin-utils": "^7.27.1" }, "peerDependencies": { "@babel/core": "^7.0.0-0" } }, "sha512-oFT0FrKHgF53f4vOsZGi2Hh3I35PfSmVs4IBFLFj4dnafP+hIWDLg3VyKmUHfLoLHlyxY4C7DGtmHuJgn+IGww=="],
|
||||
|
||||
"@babel/plugin-syntax-import-meta": ["@babel/plugin-syntax-import-meta@7.10.4", "", { "dependencies": { "@babel/helper-plugin-utils": "^7.10.4" }, "peerDependencies": { "@babel/core": "^7.0.0-0" } }, "sha512-Yqfm+XDx0+Prh3VSeEQCPU81yC+JWZ2pDPFSS4ZdpfZhp4MkFMaDC1UqseovEKwSUpnIL7+vK+Clp7bfh0iD7g=="],
|
||||
|
||||
"@babel/plugin-syntax-json-strings": ["@babel/plugin-syntax-json-strings@7.8.3", "", { "dependencies": { "@babel/helper-plugin-utils": "^7.8.0" }, "peerDependencies": { "@babel/core": "^7.0.0-0" } }, "sha512-lY6kdGpWHvjoe2vk4WrAapEuBR69EMxZl+RoGRhrFGNYVK8mOPAW8VfbT/ZgrFbXlDNiiaxQnAtgVCZ6jv30EA=="],
|
||||
|
||||
"@babel/plugin-syntax-jsx": ["@babel/plugin-syntax-jsx@7.27.1", "", { "dependencies": { "@babel/helper-plugin-utils": "^7.27.1" }, "peerDependencies": { "@babel/core": "^7.0.0-0" } }, "sha512-y8YTNIeKoyhGd9O0Jiyzyyqk8gdjnumGTQPsz0xOZOQ2RmkVJeZ1vmmfIvFEKqucBG6axJGBZDE/7iI5suUI/w=="],
|
||||
|
||||
"@babel/plugin-syntax-logical-assignment-operators": ["@babel/plugin-syntax-logical-assignment-operators@7.10.4", "", { "dependencies": { "@babel/helper-plugin-utils": "^7.10.4" }, "peerDependencies": { "@babel/core": "^7.0.0-0" } }, "sha512-d8waShlpFDinQ5MtvGU9xDAOzKH47+FFoney2baFIoMr952hKOLp1HR7VszoZvOsV/4+RRszNY7D17ba0te0ig=="],
|
||||
|
||||
"@babel/plugin-syntax-nullish-coalescing-operator": ["@babel/plugin-syntax-nullish-coalescing-operator@7.8.3", "", { "dependencies": { "@babel/helper-plugin-utils": "^7.8.0" }, "peerDependencies": { "@babel/core": "^7.0.0-0" } }, "sha512-aSff4zPII1u2QD7y+F8oDsz19ew4IGEJg9SVW+bqwpwtfFleiQDMdzA/R+UlWDzfnHFCxxleFT0PMIrR36XLNQ=="],
|
||||
|
||||
"@babel/plugin-syntax-numeric-separator": ["@babel/plugin-syntax-numeric-separator@7.10.4", "", { "dependencies": { "@babel/helper-plugin-utils": "^7.10.4" }, "peerDependencies": { "@babel/core": "^7.0.0-0" } }, "sha512-9H6YdfkcK/uOnY/K7/aA2xpzaAgkQn37yzWUMRK7OaPOqOpGS1+n0H5hxT9AUw9EsSjPW8SVyMJwYRtWs3X3ug=="],
|
||||
|
||||
"@babel/plugin-syntax-object-rest-spread": ["@babel/plugin-syntax-object-rest-spread@7.8.3", "", { "dependencies": { "@babel/helper-plugin-utils": "^7.8.0" }, "peerDependencies": { "@babel/core": "^7.0.0-0" } }, "sha512-XoqMijGZb9y3y2XskN+P1wUGiVwWZ5JmoDRwx5+3GmEplNyVM2s2Dg8ILFQm8rWM48orGy5YpI5Bl8U1y7ydlA=="],
|
||||
|
||||
"@babel/plugin-syntax-optional-catch-binding": ["@babel/plugin-syntax-optional-catch-binding@7.8.3", "", { "dependencies": { "@babel/helper-plugin-utils": "^7.8.0" }, "peerDependencies": { "@babel/core": "^7.0.0-0" } }, "sha512-6VPD0Pc1lpTqw0aKoeRTMiB+kWhAoT24PA+ksWSBrFtl5SIRVpZlwN3NNPQjehA2E/91FV3RjLWoVTglWcSV3Q=="],
|
||||
|
||||
"@babel/plugin-syntax-optional-chaining": ["@babel/plugin-syntax-optional-chaining@7.8.3", "", { "dependencies": { "@babel/helper-plugin-utils": "^7.8.0" }, "peerDependencies": { "@babel/core": "^7.0.0-0" } }, "sha512-KoK9ErH1MBlCPxV0VANkXW2/dw4vlbGDrFgz8bmUsBGYkFRcbRwMh6cIJubdPrkxRwuGdtCk0v/wPTKbQgBjkg=="],
|
||||
|
||||
"@babel/plugin-syntax-private-property-in-object": ["@babel/plugin-syntax-private-property-in-object@7.14.5", "", { "dependencies": { "@babel/helper-plugin-utils": "^7.14.5" }, "peerDependencies": { "@babel/core": "^7.0.0-0" } }, "sha512-0wVnp9dxJ72ZUJDV27ZfbSj6iHLoytYZmh3rFcxNnvsJF3ktkzLDZPy/mA17HGsaQT3/DQsWYX1f1QGWkCoVUg=="],
|
||||
|
||||
"@babel/plugin-syntax-top-level-await": ["@babel/plugin-syntax-top-level-await@7.14.5", "", { "dependencies": { "@babel/helper-plugin-utils": "^7.14.5" }, "peerDependencies": { "@babel/core": "^7.0.0-0" } }, "sha512-hx++upLv5U1rgYfwe1xBQUhRmU41NEvpUvrp8jkrSCdvGSnM5/qdRMtylJ6PG5OFkBaHkbTAKTnd3/YyESRHFw=="],
|
||||
|
||||
"@babel/plugin-syntax-typescript": ["@babel/plugin-syntax-typescript@7.27.1", "", { "dependencies": { "@babel/helper-plugin-utils": "^7.27.1" }, "peerDependencies": { "@babel/core": "^7.0.0-0" } }, "sha512-xfYCBMxveHrRMnAWl1ZlPXOZjzkN82THFvLhQhFXFt81Z5HnN+EtUkZhv/zcKpmT3fzmWZB0ywiBrbC3vogbwQ=="],
|
||||
|
||||
"@babel/template": ["@babel/template@7.27.2", "", { "dependencies": { "@babel/code-frame": "^7.27.1", "@babel/parser": "^7.27.2", "@babel/types": "^7.27.1" } }, "sha512-LPDZ85aEJyYSd18/DkjNh4/y1ntkE5KwUHWTiqgRxruuZL2F1yuHligVHLvcHY2vMHXttKFpJn6LwfI7cw7ODw=="],
|
||||
|
||||
"@babel/traverse": ["@babel/traverse@7.28.5", "", { "dependencies": { "@babel/code-frame": "^7.27.1", "@babel/generator": "^7.28.5", "@babel/helper-globals": "^7.28.0", "@babel/parser": "^7.28.5", "@babel/template": "^7.27.2", "@babel/types": "^7.28.5", "debug": "^4.3.1" } }, "sha512-TCCj4t55U90khlYkVV/0TfkJkAkUg3jZFA3Neb7unZT8CPok7iiRfaX0F+WnqWqt7OxhOn0uBKXCw4lbL8W0aQ=="],
|
||||
|
||||
"@babel/types": ["@babel/types@7.28.5", "", { "dependencies": { "@babel/helper-string-parser": "^7.27.1", "@babel/helper-validator-identifier": "^7.28.5" } }, "sha512-qQ5m48eI/MFLQ5PxQj4PFaprjyCTLI37ElWMmNs0K8Lk3dVeOdNpB3ks8jc7yM5CDmVC73eMVk/trk3fgmrUpA=="],
|
||||
|
||||
"@bcoe/v8-coverage": ["@bcoe/v8-coverage@0.2.3", "", {}, "sha512-0hYQ8SB4Db5zvZB4axdMHGwEaQjkZzFjQiN9LVYvIFB2nSUHW9tYpxWriPrWDASIxiaXax83REcLxuSdnGPZtw=="],
|
||||
|
||||
"@biomejs/biome": ["@biomejs/biome@2.3.8", "", { "optionalDependencies": { "@biomejs/cli-darwin-arm64": "2.3.8", "@biomejs/cli-darwin-x64": "2.3.8", "@biomejs/cli-linux-arm64": "2.3.8", "@biomejs/cli-linux-arm64-musl": "2.3.8", "@biomejs/cli-linux-x64": "2.3.8", "@biomejs/cli-linux-x64-musl": "2.3.8", "@biomejs/cli-win32-arm64": "2.3.8", "@biomejs/cli-win32-x64": "2.3.8" }, "bin": { "biome": "bin/biome" } }, "sha512-Qjsgoe6FEBxWAUzwFGFrB+1+M8y/y5kwmg5CHac+GSVOdmOIqsAiXM5QMVGZJ1eCUCLlPZtq4aFAQ0eawEUuUA=="],
|
||||
|
||||
"@biomejs/cli-darwin-arm64": ["@biomejs/cli-darwin-arm64@2.3.8", "", { "os": "darwin", "cpu": "arm64" }, "sha512-HM4Zg9CGQ3txTPflxD19n8MFPrmUAjaC7PQdLkugeeC0cQ+PiVrd7i09gaBS/11QKsTDBJhVg85CEIK9f50Qww=="],
|
||||
|
|
@ -107,564 +34,16 @@
|
|||
|
||||
"@biomejs/cli-win32-x64": ["@biomejs/cli-win32-x64@2.3.8", "", { "os": "win32", "cpu": "x64" }, "sha512-RguzimPoZWtBapfKhKjcWXBVI91tiSprqdBYu7tWhgN8pKRZhw24rFeNZTNf6UiBfjCYCi9eFQs/JzJZIhuK4w=="],
|
||||
|
||||
"@honcho-ai/core": ["@honcho-ai/core@2.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" } }, "sha512-3lDBdruXlg2m8OEGe5mSD6pt4EgZulgvT0tbaM7k61Mi+m8H56aQNzlCv5yPLdw5G/FIEjyJJcFfHknqdxoyrg=="],
|
||||
|
||||
"@istanbuljs/load-nyc-config": ["@istanbuljs/load-nyc-config@1.1.0", "", { "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" } }, "sha512-VjeHSlIzpv/NyD3N0YuHfXOPDIixcA1q2ZV98wsMqcYlPmv2n3Yb2lYP9XMElnaFVXg5A7YLTeLu6V84uQDjmQ=="],
|
||||
|
||||
"@istanbuljs/schema": ["@istanbuljs/schema@0.1.3", "", {}, "sha512-ZXRY4jNvVgSVQ8DL3LTcakaAtXwTVUxE81hslsyD2AtoXW/wVob10HkOJ1X/pAlcI7D+2YoZKg5do8G/w6RYgA=="],
|
||||
|
||||
"@jest/console": ["@jest/console@29.7.0", "", { "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" } }, "sha512-5Ni4CU7XHQi32IJ398EEP4RrB8eV09sXP2ROqD4bksHrnTree52PsxvX8tpL8LvTZ3pFzXyPbNQReSN41CAhOg=="],
|
||||
|
||||
"@jest/core": ["@jest/core@29.7.0", "", { "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" }, "peerDependencies": { "node-notifier": "^8.0.1 || ^9.0.0 || ^10.0.0" }, "optionalPeers": ["node-notifier"] }, "sha512-n7aeXWKMnGtDA48y8TLWJPJmLmmZ642Ceo78cYWEpiD7FzDgmNDV/GCVRorPABdXLJZ/9wzzgZAlHjXjxDHGsg=="],
|
||||
|
||||
"@jest/environment": ["@jest/environment@29.7.0", "", { "dependencies": { "@jest/fake-timers": "^29.7.0", "@jest/types": "^29.6.3", "@types/node": "*", "jest-mock": "^29.7.0" } }, "sha512-aQIfHDq33ExsN4jP1NWGXhxgQ/wixs60gDiKO+XVMd8Mn0NWPWgc34ZQDTb2jKaUWQ7MuwoitXAsN2XVXNMpAw=="],
|
||||
|
||||
"@jest/expect": ["@jest/expect@29.7.0", "", { "dependencies": { "expect": "^29.7.0", "jest-snapshot": "^29.7.0" } }, "sha512-8uMeAMycttpva3P1lBHB8VciS9V0XAr3GymPpipdyQXbBcuhkLQOSe8E/p92RyAdToS6ZD1tFkX+CkhoECE0dQ=="],
|
||||
|
||||
"@jest/expect-utils": ["@jest/expect-utils@29.7.0", "", { "dependencies": { "jest-get-type": "^29.6.3" } }, "sha512-GlsNBWiFQFCVi9QVSx7f5AgMeLxe9YCCs5PuP2O2LdjDAA8Jh9eX7lA1Jq/xdXw3Wb3hyvlFNfZIfcRetSzYcA=="],
|
||||
|
||||
"@jest/fake-timers": ["@jest/fake-timers@29.7.0", "", { "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" } }, "sha512-q4DH1Ha4TTFPdxLsqDXK1d3+ioSL7yL5oCMJZgDYm6i+6CygW5E5xVr/D1HdsGxjt1ZWSfUAs9OxSB/BNelWrQ=="],
|
||||
|
||||
"@jest/globals": ["@jest/globals@29.7.0", "", { "dependencies": { "@jest/environment": "^29.7.0", "@jest/expect": "^29.7.0", "@jest/types": "^29.6.3", "jest-mock": "^29.7.0" } }, "sha512-mpiz3dutLbkW2MNFubUGUEVLkTGiqW6yLVTA+JbP6fI6J5iL9Y0Nlg8k95pcF8ctKwCS7WVxteBs29hhfAotzQ=="],
|
||||
|
||||
"@jest/reporters": ["@jest/reporters@29.7.0", "", { "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" }, "peerDependencies": { "node-notifier": "^8.0.1 || ^9.0.0 || ^10.0.0" }, "optionalPeers": ["node-notifier"] }, "sha512-DApq0KJbJOEzAFYjHADNNxAE3KbhxQB1y5Kplb5Waqw6zVbuWatSnMjE5gs8FUgEPmNsnZA3NCWl9NG0ia04Pg=="],
|
||||
|
||||
"@jest/schemas": ["@jest/schemas@29.6.3", "", { "dependencies": { "@sinclair/typebox": "^0.27.8" } }, "sha512-mo5j5X+jIZmJQveBKeS/clAueipV7KgiX1vMgCxam1RNYiqE1w62n0/tJJnHtjW8ZHcQco5gY85jA3mi0L+nSA=="],
|
||||
|
||||
"@jest/source-map": ["@jest/source-map@29.6.3", "", { "dependencies": { "@jridgewell/trace-mapping": "^0.3.18", "callsites": "^3.0.0", "graceful-fs": "^4.2.9" } }, "sha512-MHjT95QuipcPrpLM+8JMSzFx6eHp5Bm+4XeFDJlwsvVBjmKNiIAvasGK2fxz2WbGRlnvqehFbh07MMa7n3YJnw=="],
|
||||
|
||||
"@jest/test-result": ["@jest/test-result@29.7.0", "", { "dependencies": { "@jest/console": "^29.7.0", "@jest/types": "^29.6.3", "@types/istanbul-lib-coverage": "^2.0.0", "collect-v8-coverage": "^1.0.0" } }, "sha512-Fdx+tv6x1zlkJPcWXmMDAG2HBnaR9XPSd5aDWQVsfrZmLVT3lU1cwyxLgRmXR9yrq4NBoEm9BMsfgFzTQAbJYA=="],
|
||||
|
||||
"@jest/test-sequencer": ["@jest/test-sequencer@29.7.0", "", { "dependencies": { "@jest/test-result": "^29.7.0", "graceful-fs": "^4.2.9", "jest-haste-map": "^29.7.0", "slash": "^3.0.0" } }, "sha512-GQwJ5WZVrKnOJuiYiAF52UNUJXgTZx1NHjFSEB0qEMmSZKAkdMoIzw/Cj6x6NF4AvV23AUqDpFzQkN/eYCYTxw=="],
|
||||
|
||||
"@jest/transform": ["@jest/transform@29.7.0", "", { "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" } }, "sha512-ok/BTPFzFKVMwO5eOHRrvnBVHdRy9IrsrW1GpMaQ9MCnilNLXQKmAX8s1YXDFaai9xJpac2ySzV0YeRRECr2Vw=="],
|
||||
|
||||
"@jest/types": ["@jest/types@29.6.3", "", { "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" } }, "sha512-u3UPsIilWKOM3F9CXtrG8LEJmNxwoCQC/XVj4IKYXvvpx7QIi/Kg1LI5uDmDpKlac62NUtX7eLjRh+jVZcLOzw=="],
|
||||
|
||||
"@jridgewell/gen-mapping": ["@jridgewell/gen-mapping@0.3.13", "", { "dependencies": { "@jridgewell/sourcemap-codec": "^1.5.0", "@jridgewell/trace-mapping": "^0.3.24" } }, "sha512-2kkt/7niJ6MgEPxF0bYdQ6etZaA+fQvDcLKckhy1yIQOzaoKjBBjSj63/aLVjYE3qhRt5dvM+uUyfCg6UKCBbA=="],
|
||||
|
||||
"@jridgewell/remapping": ["@jridgewell/remapping@2.3.5", "", { "dependencies": { "@jridgewell/gen-mapping": "^0.3.5", "@jridgewell/trace-mapping": "^0.3.24" } }, "sha512-LI9u/+laYG4Ds1TDKSJW2YPrIlcVYOwi2fUC6xB43lueCjgxV4lffOCZCtYFiH6TNOX+tQKXx97T4IKHbhyHEQ=="],
|
||||
|
||||
"@jridgewell/resolve-uri": ["@jridgewell/resolve-uri@3.1.2", "", {}, "sha512-bRISgCIjP20/tbWSPWMEi54QVPRZExkuD9lJL+UIxUKtwVJA8wW1Trb1jMs1RFXo1CBTNZ/5hpC9QvmKWdopKw=="],
|
||||
|
||||
"@jridgewell/sourcemap-codec": ["@jridgewell/sourcemap-codec@1.5.5", "", {}, "sha512-cYQ9310grqxueWbl+WuIUIaiUaDcj7WOq5fVhEljNVgRfOUhY9fy2zTvfoqWsnebh8Sl70VScFbICvJnLKB0Og=="],
|
||||
|
||||
"@jridgewell/trace-mapping": ["@jridgewell/trace-mapping@0.3.31", "", { "dependencies": { "@jridgewell/resolve-uri": "^3.1.0", "@jridgewell/sourcemap-codec": "^1.4.14" } }, "sha512-zzNR+SdQSDJzc8joaeP8QQoCQr8NuYx2dIIytl1QeBEZHJ9uW6hebsrYgbz8hJwUQao3TWCMtmfV8Nu1twOLAw=="],
|
||||
|
||||
"@sinclair/typebox": ["@sinclair/typebox@0.27.8", "", {}, "sha512-+Fj43pSMwJs4KRrH/938Uf+uAELIgVBmQzg/q1YG10djyfA3TnrU8N8XzqCh/okZdszqBQTZf96idMfE5lnwTA=="],
|
||||
|
||||
"@sinonjs/commons": ["@sinonjs/commons@3.0.1", "", { "dependencies": { "type-detect": "4.0.8" } }, "sha512-K3mCHKQ9sVh8o1C9cxkwxaOmXoAMlDxC1mYyHrjqOWEcBjYr76t96zL2zlj5dUGZ3HSw240X1qgH3Mjf1yJWpQ=="],
|
||||
|
||||
"@sinonjs/fake-timers": ["@sinonjs/fake-timers@10.3.0", "", { "dependencies": { "@sinonjs/commons": "^3.0.0" } }, "sha512-V4BG07kuYSUkTCSBHG8G8TNhM+F19jXFWnQtzj+we8DrkpSBCee9Z3Ms8yiGer/dlmhe35/Xdgyo3/0rQKg7YA=="],
|
||||
|
||||
"@types/babel__core": ["@types/babel__core@7.20.5", "", { "dependencies": { "@babel/parser": "^7.20.7", "@babel/types": "^7.20.7", "@types/babel__generator": "*", "@types/babel__template": "*", "@types/babel__traverse": "*" } }, "sha512-qoQprZvz5wQFJwMDqeseRXWv3rqMvhgpbXFfVyWhbx9X47POIA6i/+dXefEmZKoAgOaTdaIgNSMqMIU61yRyzA=="],
|
||||
|
||||
"@types/babel__generator": ["@types/babel__generator@7.27.0", "", { "dependencies": { "@babel/types": "^7.0.0" } }, "sha512-ufFd2Xi92OAVPYsy+P4n7/U7e68fex0+Ee8gSG9KX7eo084CWiQ4sdxktvdl0bOPupXtVJPY19zk6EwWqUQ8lg=="],
|
||||
|
||||
"@types/babel__template": ["@types/babel__template@7.4.4", "", { "dependencies": { "@babel/parser": "^7.1.0", "@babel/types": "^7.0.0" } }, "sha512-h/NUaSyG5EyxBIp8YRxo4RMe2/qQgvyowRwVMzhYhBCONbW8PUsg4lkFMrhgZhUe5z3L3MiLDuvyJ/CaPa2A8A=="],
|
||||
|
||||
"@types/babel__traverse": ["@types/babel__traverse@7.28.0", "", { "dependencies": { "@babel/types": "^7.28.2" } }, "sha512-8PvcXf70gTDZBgt9ptxJ8elBeBjcLOAcOtoO/mPJjtji1+CdGbHgm77om1GrsPxsiE+uXIpNSK64UYaIwQXd4Q=="],
|
||||
|
||||
"@types/graceful-fs": ["@types/graceful-fs@4.1.9", "", { "dependencies": { "@types/node": "*" } }, "sha512-olP3sd1qOEe5dXTSaFvQG+02VdRXcdytWLAZsAq1PecU8uqQAhkrnbli7DagjtXKW/Bl7YJbUsa8MPcuc8LHEQ=="],
|
||||
|
||||
"@types/istanbul-lib-coverage": ["@types/istanbul-lib-coverage@2.0.6", "", {}, "sha512-2QF/t/auWm0lsy8XtKVPG19v3sSOQlJe/YHZgfjb/KBBHOGSV+J2q/S671rcq9uTBrLAXmZpqJiaQbMT+zNU1w=="],
|
||||
|
||||
"@types/istanbul-lib-report": ["@types/istanbul-lib-report@3.0.3", "", { "dependencies": { "@types/istanbul-lib-coverage": "*" } }, "sha512-NQn7AHQnk/RSLOxrBbGyJM/aVQ+pjj5HCgasFxc0K/KhoATfQ/47AyUl15I2yBUpihjmas+a+VJBOqecrFH+uA=="],
|
||||
|
||||
"@types/istanbul-reports": ["@types/istanbul-reports@3.0.4", "", { "dependencies": { "@types/istanbul-lib-report": "*" } }, "sha512-pk2B1NWalF9toCRu6gjBzR69syFjP4Od8WRAX+0mmf9lAjCRicLOWc+ZrxZHx/0XRjotgkF9t6iaMJ+aXcOdZQ=="],
|
||||
|
||||
"@types/jest": ["@types/jest@29.5.14", "", { "dependencies": { "expect": "^29.0.0", "pretty-format": "^29.0.0" } }, "sha512-ZN+4sdnLUbo8EVvVc2ao0GFW6oVrQRPn4K2lglySj7APvSrgzxHiNNK99us4WDMi57xxA2yggblIAMNhXOotLQ=="],
|
||||
"@types/bun": ["@types/bun@1.3.6", "", { "dependencies": { "bun-types": "1.3.6" } }, "sha512-uWCv6FO/8LcpREhenN1d1b6fcspAB+cefwD7uti8C8VffIv0Um08TKMn98FynpTiU38+y2dUO55T11NgDt8VAA=="],
|
||||
|
||||
"@types/node": ["@types/node@24.10.1", "", { "dependencies": { "undici-types": "~7.16.0" } }, "sha512-GNWcUTRBgIRJD5zj+Tq0fKOJ5XZajIiBroOF0yvj2bSU1WvNdYS/dn9UxwsujGW4JX06dnHyjV2y9rRaybH0iQ=="],
|
||||
|
||||
"@types/node-fetch": ["@types/node-fetch@2.6.13", "", { "dependencies": { "@types/node": "*", "form-data": "^4.0.4" } }, "sha512-QGpRVpzSaUs30JBSGPjOg4Uveu384erbHBoT1zeONvyCfwQxIkUshLAOqN/k9EjGviPRmWTTe6aH2qySWKTVSw=="],
|
||||
|
||||
"@types/stack-utils": ["@types/stack-utils@2.0.3", "", {}, "sha512-9aEbYZ3TbYMznPdcdr3SmIrLXwC/AKZXQeCf9Pgao5CKb8CyHuEX5jzWPTkvregvhRJHcpRO6BFoGW9ycaOkYw=="],
|
||||
|
||||
"@types/yargs": ["@types/yargs@17.0.35", "", { "dependencies": { "@types/yargs-parser": "*" } }, "sha512-qUHkeCyQFxMXg79wQfTtfndEC+N9ZZg76HJftDJp+qH2tV7Gj4OJi7l+PiWwJ+pWtW8GwSmqsDj/oymhrTWXjg=="],
|
||||
|
||||
"@types/yargs-parser": ["@types/yargs-parser@21.0.3", "", {}, "sha512-I4q9QU9MQv4oEOz4tAHJtNz1cwuLxn2F3xcc2iV5WdqLPpUnj30aUuxt1mAxYTG+oe8CZMV/+6rU4S4gRDzqtQ=="],
|
||||
|
||||
"abort-controller": ["abort-controller@3.0.0", "", { "dependencies": { "event-target-shim": "^5.0.0" } }, "sha512-h8lQ8tacZYnR3vNQTgibj+tODHI5/+l06Au2Pcriv/Gmet0eaj4TwWH41sO9wnHDiQsEj19q0drzdWdeAHtweg=="],
|
||||
|
||||
"agentkeepalive": ["agentkeepalive@4.6.0", "", { "dependencies": { "humanize-ms": "^1.2.1" } }, "sha512-kja8j7PjmncONqaTsB8fQ+wE2mSU2DJ9D4XKoJ5PFWIdRMa6SLSN1ff4mOr4jCbfRSsxR4keIiySJU0N9T5hIQ=="],
|
||||
|
||||
"ansi-escapes": ["ansi-escapes@4.3.2", "", { "dependencies": { "type-fest": "^0.21.3" } }, "sha512-gKXj5ALrKWQLsYG9jlTRmR/xKluxHV+Z9QEwNIgCfM1/uwPMCuzVVnh5mwTd+OuBZcwSIMbqssNWRm1lE51QaQ=="],
|
||||
|
||||
"ansi-regex": ["ansi-regex@5.0.1", "", {}, "sha512-quJQXlTSUGL2LH9SUXo8VwsY4soanhgo6LNSm84E1LBcE8s3O0wpdiRzyR9z/ZZJMlMWv37qOOb9pdJlMUEKFQ=="],
|
||||
|
||||
"ansi-styles": ["ansi-styles@5.2.0", "", {}, "sha512-Cxwpt2SfTzTtXcfOlzGEee8O+c+MmUgGrNiBcXnuWxuFJHe6a5Hz7qwhwe5OgaSYI0IJvkLqWX1ASG+cJOkEiA=="],
|
||||
|
||||
"anymatch": ["anymatch@3.1.3", "", { "dependencies": { "normalize-path": "^3.0.0", "picomatch": "^2.0.4" } }, "sha512-KMReFUr0B4t+D+OBkjR3KYqvocp2XaSzO55UcB6mgQMd3KbcE+mWTyvVV7D/zsdEbNnV6acZUutkiHQXvTr1Rw=="],
|
||||
|
||||
"argparse": ["argparse@1.0.10", "", { "dependencies": { "sprintf-js": "~1.0.2" } }, "sha512-o5Roy6tNG4SL/FOkCAN6RzjiakZS25RLYFrcMttJqbdd8BWrnA+fGz57iN5Pb06pvBGvl5gQ0B48dJlslXvoTg=="],
|
||||
|
||||
"asynckit": ["asynckit@0.4.0", "", {}, "sha512-Oei9OH4tRh0YqU3GxhX79dM/mwVgvbZJaSNaRk+bshkj0S5cfHcgYakreBjrHwatXKbz+IoIdYLxrKim2MjW0Q=="],
|
||||
|
||||
"babel-jest": ["babel-jest@29.7.0", "", { "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" }, "peerDependencies": { "@babel/core": "^7.8.0" } }, "sha512-BrvGY3xZSwEcCzKvKsCi2GgHqDqsYkOP4/by5xCgIwGXQxIEh+8ew3gmrE1y7XRR6LHZIj6yLYnUi/mm2KXKBg=="],
|
||||
|
||||
"babel-plugin-istanbul": ["babel-plugin-istanbul@6.1.1", "", { "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" } }, "sha512-Y1IQok9821cC9onCx5otgFfRm7Lm+I+wwxOx738M/WLPZ9Q42m4IG5W0FNX8WLL2gYMZo3JkuXIH2DOpWM+qwA=="],
|
||||
|
||||
"babel-plugin-jest-hoist": ["babel-plugin-jest-hoist@29.6.3", "", { "dependencies": { "@babel/template": "^7.3.3", "@babel/types": "^7.3.3", "@types/babel__core": "^7.1.14", "@types/babel__traverse": "^7.0.6" } }, "sha512-ESAc/RJvGTFEzRwOTT4+lNDk/GNHMkKbNzsvT0qKRfDyyYTskxB5rnU2njIDYVxXCBHHEI1c0YwHob3WaYujOg=="],
|
||||
|
||||
"babel-preset-current-node-syntax": ["babel-preset-current-node-syntax@1.2.0", "", { "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 || ^8.0.0-0" } }, "sha512-E/VlAEzRrsLEb2+dv8yp3bo4scof3l9nR4lrld+Iy5NyVqgVYUJnDAmunkhPMisRI32Qc4iRiz425d8vM++2fg=="],
|
||||
|
||||
"babel-preset-jest": ["babel-preset-jest@29.6.3", "", { "dependencies": { "babel-plugin-jest-hoist": "^29.6.3", "babel-preset-current-node-syntax": "^1.0.0" }, "peerDependencies": { "@babel/core": "^7.0.0" } }, "sha512-0B3bhxR6snWXJZtR/RliHTDPRgn1sNHOR0yVtq/IiQFyuOVjFS+wuio/R4gSNkyYmKmJB4wGZv2NZanmKmTnNA=="],
|
||||
|
||||
"balanced-match": ["balanced-match@1.0.2", "", {}, "sha512-3oSeUO0TMV67hN1AmbXsK4yaqU7tjiHlbxRDZOpH0KW9+CeX4bRAaX0Anxt0tx2MrpRpWwQaPwIlISEJhYU5Pw=="],
|
||||
|
||||
"baseline-browser-mapping": ["baseline-browser-mapping@2.8.32", "", { "bin": { "baseline-browser-mapping": "dist/cli.js" } }, "sha512-OPz5aBThlyLFgxyhdwf/s2+8ab3OvT7AdTNvKHBwpXomIYeXqpUUuT8LrdtxZSsWJ4R4CU1un4XGh5Ez3nlTpw=="],
|
||||
|
||||
"brace-expansion": ["brace-expansion@1.1.12", "", { "dependencies": { "balanced-match": "^1.0.0", "concat-map": "0.0.1" } }, "sha512-9T9UjW3r0UW5c1Q7GTwllptXwhvYmEzFhzMfZ9H7FQWt+uZePjZPjBP/W1ZEyZ1twGWom5/56TF4lPcqjnDHcg=="],
|
||||
|
||||
"braces": ["braces@3.0.3", "", { "dependencies": { "fill-range": "^7.1.1" } }, "sha512-yQbXgO/OSZVD2IsiLlro+7Hf6Q18EJrKSEsdoMzKePKXct3gvD8oLcOQdIzGupr5Fj+EDe8gO/lxc1BzfMpxvA=="],
|
||||
|
||||
"browserslist": ["browserslist@4.28.0", "", { "dependencies": { "baseline-browser-mapping": "^2.8.25", "caniuse-lite": "^1.0.30001754", "electron-to-chromium": "^1.5.249", "node-releases": "^2.0.27", "update-browserslist-db": "^1.1.4" }, "bin": { "browserslist": "cli.js" } }, "sha512-tbydkR/CxfMwelN0vwdP/pLkDwyAASZ+VfWm4EOwlB6SWhx1sYnWLqo8N5j0rAzPfzfRaxt0mM/4wPU/Su84RQ=="],
|
||||
|
||||
"bs-logger": ["bs-logger@0.2.6", "", { "dependencies": { "fast-json-stable-stringify": "2.x" } }, "sha512-pd8DCoxmbgc7hyPKOvxtqNcjYoOsABPQdcCUjGp3d42VR2CX1ORhk2A87oqqu5R1kk+76nsxZupkmyd+MVtCog=="],
|
||||
|
||||
"bser": ["bser@2.1.1", "", { "dependencies": { "node-int64": "^0.4.0" } }, "sha512-gQxTNE/GAfIIrmHLUE3oJyp5FO6HRBfhjnw4/wMmA63ZGDJnWBmgY/lyQBpnDUkGmAhbSe39tx2d/iTOAfglwQ=="],
|
||||
|
||||
"buffer-from": ["buffer-from@1.1.2", "", {}, "sha512-E+XQCRwSbaaiChtv6k6Dwgc+bx+Bs6vuKJHHl5kox/BaKbhiXzqQOwK4cO22yElGp2OCmjwVhT3HmxgyPGnJfQ=="],
|
||||
|
||||
"call-bind-apply-helpers": ["call-bind-apply-helpers@1.0.2", "", { "dependencies": { "es-errors": "^1.3.0", "function-bind": "^1.1.2" } }, "sha512-Sp1ablJ0ivDkSzjcaJdxEunN5/XvksFJ2sMBFfq6x0ryhQV/2b/KwFe21cMpmHtPOSij8K99/wSfoEuTObmuMQ=="],
|
||||
|
||||
"callsites": ["callsites@3.1.0", "", {}, "sha512-P8BjAsXvZS+VIDUI11hHCQEv74YT67YUi5JJFNWIqL235sBmjX4+qx9Muvls5ivyNENctx46xQLQ3aTuE7ssaQ=="],
|
||||
|
||||
"camelcase": ["camelcase@6.3.0", "", {}, "sha512-Gmy6FhYlCY7uOElZUSbxo2UCDH8owEk996gkbrpsgGtrJLM3J7jGxl9Ic7Qwwj4ivOE5AWZWRMecDdF7hqGjFA=="],
|
||||
|
||||
"caniuse-lite": ["caniuse-lite@1.0.30001757", "", {}, "sha512-r0nnL/I28Zi/yjk1el6ilj27tKcdjLsNqAOZr0yVjWPrSQyHgKI2INaEWw21bAQSv2LXRt1XuCS/GomNpWOxsQ=="],
|
||||
|
||||
"chalk": ["chalk@4.1.2", "", { "dependencies": { "ansi-styles": "^4.1.0", "supports-color": "^7.1.0" } }, "sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA=="],
|
||||
|
||||
"char-regex": ["char-regex@1.0.2", "", {}, "sha512-kWWXztvZ5SBQV+eRgKFeh8q5sLuZY2+8WUIzlxWVTg+oGwY14qylx1KbKzHd8P6ZYkAg0xyIDU9JMHhyJMZ1jw=="],
|
||||
|
||||
"ci-info": ["ci-info@3.9.0", "", {}, "sha512-NIxF55hv4nSqQswkAeiOi1r83xy8JldOFDTWiug55KBu9Jnblncd2U6ViHmYgHf01TPZS77NJBhBMKdWj9HQMQ=="],
|
||||
|
||||
"cjs-module-lexer": ["cjs-module-lexer@1.4.3", "", {}, "sha512-9z8TZaGM1pfswYeXrUpzPrkx8UnWYdhJclsiYMm6x/w5+nN+8Tf/LnAgfLGQCm59qAOxU8WwHEq2vNwF6i4j+Q=="],
|
||||
|
||||
"cliui": ["cliui@8.0.1", "", { "dependencies": { "string-width": "^4.2.0", "strip-ansi": "^6.0.1", "wrap-ansi": "^7.0.0" } }, "sha512-BSeNnyus75C4//NQ9gQt1/csTXyo/8Sb+afLAkzAptFuMsod9HFokGNudZpi/oQV73hnVK+sR+5PVRMd+Dr7YQ=="],
|
||||
|
||||
"co": ["co@4.6.0", "", {}, "sha512-QVb0dM5HvG+uaxitm8wONl7jltx8dqhfU33DcqtOZcLSVIKSDDLDi7+0LbAKiyI8hD9u42m2YxXSkMGWThaecQ=="],
|
||||
|
||||
"collect-v8-coverage": ["collect-v8-coverage@1.0.3", "", {}, "sha512-1L5aqIkwPfiodaMgQunkF1zRhNqifHBmtbbbxcr6yVxxBnliw4TDOW6NxpO8DJLgJ16OT+Y4ztZqP6p/FtXnAw=="],
|
||||
|
||||
"color-convert": ["color-convert@2.0.1", "", { "dependencies": { "color-name": "~1.1.4" } }, "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ=="],
|
||||
|
||||
"color-name": ["color-name@1.1.4", "", {}, "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA=="],
|
||||
|
||||
"combined-stream": ["combined-stream@1.0.8", "", { "dependencies": { "delayed-stream": "~1.0.0" } }, "sha512-FQN4MRfuJeHf7cBbBMJFXhKSDq+2kAArBlmRBvcvFE5BB1HZKXtSFASDhdlz9zOYwxh8lDdnvmMOe/+5cdoEdg=="],
|
||||
|
||||
"concat-map": ["concat-map@0.0.1", "", {}, "sha512-/Srv4dswyQNBfohGpz9o6Yb3Gz3SrUDqBH5rTuhGR7ahtlbYKnVxw2bCFMRljaA7EXHaXZ8wsHdodFvbkhKmqg=="],
|
||||
|
||||
"convert-source-map": ["convert-source-map@2.0.0", "", {}, "sha512-Kvp459HrV2FEJ1CAsi1Ku+MY3kasH19TFykTz2xWmMeq6bk2NU3XXvfJ+Q61m0xktWwt+1HSYf3JZsTms3aRJg=="],
|
||||
|
||||
"create-jest": ["create-jest@29.7.0", "", { "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" } }, "sha512-Adz2bdH0Vq3F53KEMJOoftQFutWCukm6J24wbPWRO4k1kMY7gS7ds/uoJkNuV8wDCtWWnuwGcJwpWcih+zEW1Q=="],
|
||||
|
||||
"cross-spawn": ["cross-spawn@7.0.6", "", { "dependencies": { "path-key": "^3.1.0", "shebang-command": "^2.0.0", "which": "^2.0.1" } }, "sha512-uV2QOWP2nWzsy2aMp8aRibhi9dlzF5Hgh5SHaB9OiTGEyDTiJJyx0uy51QXdyWbtAHNua4XJzUKca3OzKUd3vA=="],
|
||||
|
||||
"debug": ["debug@4.4.3", "", { "dependencies": { "ms": "^2.1.3" } }, "sha512-RGwwWnwQvkVfavKVt22FGLw+xYSdzARwm0ru6DhTVA3umU5hZc28V3kO4stgYryrTlLpuvgI9GiijltAjNbcqA=="],
|
||||
|
||||
"dedent": ["dedent@1.7.0", "", { "peerDependencies": { "babel-plugin-macros": "^3.1.0" }, "optionalPeers": ["babel-plugin-macros"] }, "sha512-HGFtf8yhuhGhqO07SV79tRp+br4MnbdjeVxotpn1QBl30pcLLCQjX5b2295ll0fv8RKDKsmWYrl05usHM9CewQ=="],
|
||||
|
||||
"deepmerge": ["deepmerge@4.3.1", "", {}, "sha512-3sUqbMEc77XqpdNO7FRyRog+eW3ph+GYCbj+rK+uYyRMuwsVy0rMiVtPn+QJlKFvWP/1PYpapqYn0Me2knFn+A=="],
|
||||
|
||||
"delayed-stream": ["delayed-stream@1.0.0", "", {}, "sha512-ZySD7Nf91aLB0RxL4KGrKHBXl7Eds1DAmEdcoVawXnLD7SDhpNgtuII2aAkg7a7QS41jxPSZ17p4VdGnMHk3MQ=="],
|
||||
|
||||
"detect-newline": ["detect-newline@3.1.0", "", {}, "sha512-TLz+x/vEXm/Y7P7wn1EJFNLxYpUD4TgMosxY6fAVJUnJMbupHBOncxyWUG9OpTaH9EBD7uFI5LfEgmMOc54DsA=="],
|
||||
|
||||
"diff-sequences": ["diff-sequences@29.6.3", "", {}, "sha512-EjePK1srD3P08o2j4f0ExnylqRs5B9tJjcp9t1krH2qRi8CCdsYfwe9JgSLurFBWwq4uOlipzfk5fHNvwFKr8Q=="],
|
||||
|
||||
"dunder-proto": ["dunder-proto@1.0.1", "", { "dependencies": { "call-bind-apply-helpers": "^1.0.1", "es-errors": "^1.3.0", "gopd": "^1.2.0" } }, "sha512-KIN/nDJBQRcXw0MLVhZE9iQHmG68qAVIBg9CqmUYjmQIhgij9U5MFvrqkUL5FbtyyzZuOeOt0zdeRe4UY7ct+A=="],
|
||||
|
||||
"electron-to-chromium": ["electron-to-chromium@1.5.263", "", {}, "sha512-DrqJ11Knd+lo+dv+lltvfMDLU27g14LMdH2b0O3Pio4uk0x+z7OR+JrmyacTPN2M8w3BrZ7/RTwG3R9B7irPlg=="],
|
||||
|
||||
"emittery": ["emittery@0.13.1", "", {}, "sha512-DeWwawk6r5yR9jFgnDKYt4sLS0LmHJJi3ZOnb5/JdbYwj3nW+FxQnHIjhBKz8YLC7oRNPVM9NQ47I3CVx34eqQ=="],
|
||||
|
||||
"emoji-regex": ["emoji-regex@8.0.0", "", {}, "sha512-MSjYzcWNOA0ewAHpz0MxpYFvwg6yjy1NG3xteoqz644VCo/RPgnr1/GGt+ic3iJTzQ8Eu3TdM14SawnVUmGE6A=="],
|
||||
|
||||
"error-ex": ["error-ex@1.3.4", "", { "dependencies": { "is-arrayish": "^0.2.1" } }, "sha512-sqQamAnR14VgCr1A618A3sGrygcpK+HEbenA/HiEAkkUwcZIIB/tgWqHFxWgOyDh4nB4JCRimh79dR5Ywc9MDQ=="],
|
||||
|
||||
"es-define-property": ["es-define-property@1.0.1", "", {}, "sha512-e3nRfgfUZ4rNGL232gUgX06QNyyez04KdjFrF+LTRoOXmrOgFKDg4BCdsjW8EnT69eqdYGmRpJwiPVYNrCaW3g=="],
|
||||
|
||||
"es-errors": ["es-errors@1.3.0", "", {}, "sha512-Zf5H2Kxt2xjTvbJvP2ZWLEICxA6j+hAmMzIlypy4xcBg1vKVnx89Wy0GbS+kf5cwCVFFzdCFh2XSCFNULS6csw=="],
|
||||
|
||||
"es-object-atoms": ["es-object-atoms@1.1.1", "", { "dependencies": { "es-errors": "^1.3.0" } }, "sha512-FGgH2h8zKNim9ljj7dankFPcICIK9Cp5bm+c2gQSYePhpaG5+esrLODihIorn+Pe6FGJzWhXQotPv73jTaldXA=="],
|
||||
|
||||
"es-set-tostringtag": ["es-set-tostringtag@2.1.0", "", { "dependencies": { "es-errors": "^1.3.0", "get-intrinsic": "^1.2.6", "has-tostringtag": "^1.0.2", "hasown": "^2.0.2" } }, "sha512-j6vWzfrGVfyXxge+O0x5sh6cvxAog0a/4Rdd2K36zCMV5eJ+/+tOAngRO8cODMNWbVRdVlmGZQL2YS3yR8bIUA=="],
|
||||
|
||||
"escalade": ["escalade@3.2.0", "", {}, "sha512-WUj2qlxaQtO4g6Pq5c29GTcWGDyd8itL8zTlipgECz3JesAiiOKotd8JU6otB3PACgG6xkJUyVhboMS+bje/jA=="],
|
||||
|
||||
"escape-string-regexp": ["escape-string-regexp@2.0.0", "", {}, "sha512-UpzcLCXolUWcNu5HtVMHYdXJjArjsF9C0aNnquZYY4uW/Vu0miy5YoWvbV345HauVvcAUnpRuhMMcqTcGOY2+w=="],
|
||||
|
||||
"esprima": ["esprima@4.0.1", "", { "bin": { "esparse": "./bin/esparse.js", "esvalidate": "./bin/esvalidate.js" } }, "sha512-eGuFFw7Upda+g4p+QHvnW0RyTX/SVeJBDM/gCtMARO0cLuT2HcEKnTPvhjV6aGeqrCB/sbNop0Kszm0jsaWU4A=="],
|
||||
|
||||
"event-target-shim": ["event-target-shim@5.0.1", "", {}, "sha512-i/2XbnSz/uxRCU6+NdVJgKWDTM427+MqYbkQzD321DuCQJUqOuJKIA0IM2+W2xtYHdKOmZ4dR6fExsd4SXL+WQ=="],
|
||||
|
||||
"execa": ["execa@5.1.1", "", { "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" } }, "sha512-8uSpZZocAZRBAPIEINJj3Lo9HyGitllczc27Eh5YYojjMFMn8yHMDMaUHE2Jqfq05D/wucwI4JGURyXt1vchyg=="],
|
||||
|
||||
"exit": ["exit@0.1.2", "", {}, "sha512-Zk/eNKV2zbjpKzrsQ+n1G6poVbErQxJ0LBOJXaKZ1EViLzH+hrLu9cdXI4zw9dBQJslwBEpbQ2P1oS7nDxs6jQ=="],
|
||||
|
||||
"expect": ["expect@29.7.0", "", { "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" } }, "sha512-2Zks0hf1VLFYI1kbh0I5jP3KHHyCHpkfyHBzsSXRFgl/Bg9mWYfMW8oD+PdMPlEwy5HNsR9JutYy6pMeOh61nw=="],
|
||||
|
||||
"fast-json-stable-stringify": ["fast-json-stable-stringify@2.1.0", "", {}, "sha512-lhd/wF+Lk98HZoTCtlVraHtfh5XYijIjalXck7saUtuanSDyLMxnHhSXEDJqHxD7msR8D0uCmqlkwjCV8xvwHw=="],
|
||||
|
||||
"fb-watchman": ["fb-watchman@2.0.2", "", { "dependencies": { "bser": "2.1.1" } }, "sha512-p5161BqbuCaSnB8jIbzQHOlpgsPmK5rJVDfDKO91Axs5NC1uu3HRQm6wt9cd9/+GtQQIO53JdGXXoyDpTAsgYA=="],
|
||||
|
||||
"fill-range": ["fill-range@7.1.1", "", { "dependencies": { "to-regex-range": "^5.0.1" } }, "sha512-YsGpe3WHLK8ZYi4tWDg2Jy3ebRz2rXowDxnld4bkQB00cc/1Zw9AWnC0i9ztDJitivtQvaI9KaLyKrc+hBW0yg=="],
|
||||
|
||||
"find-up": ["find-up@4.1.0", "", { "dependencies": { "locate-path": "^5.0.0", "path-exists": "^4.0.0" } }, "sha512-PpOwAdQ/YlXQ2vj8a3h8IipDuYRi3wceVQQGYWxNINccq40Anw7BlsEXCMbt1Zt+OLA6Fq9suIpIWD0OsnISlw=="],
|
||||
|
||||
"form-data": ["form-data@4.0.5", "", { "dependencies": { "asynckit": "^0.4.0", "combined-stream": "^1.0.8", "es-set-tostringtag": "^2.1.0", "hasown": "^2.0.2", "mime-types": "^2.1.12" } }, "sha512-8RipRLol37bNs2bhoV67fiTEvdTrbMUYcFTiy3+wuuOnUog2QBHCZWXDRijWQfAkhBj2Uf5UnVaiWwA5vdd82w=="],
|
||||
|
||||
"form-data-encoder": ["form-data-encoder@1.7.2", "", {}, "sha512-qfqtYan3rxrnCk1VYaA4H+Ms9xdpPqvLZa6xmMgFvhO32x7/3J/ExcTd6qpxM0vH2GdMI+poehyBZvqfMTto8A=="],
|
||||
|
||||
"formdata-node": ["formdata-node@4.4.1", "", { "dependencies": { "node-domexception": "1.0.0", "web-streams-polyfill": "4.0.0-beta.3" } }, "sha512-0iirZp3uVDjVGt9p49aTaqjk84TrglENEDuqfdlZQ1roC9CWlPk6Avf8EEnZNcAqPonwkG35x4n3ww/1THYAeQ=="],
|
||||
|
||||
"fs.realpath": ["fs.realpath@1.0.0", "", {}, "sha512-OO0pH2lK6a0hZnAdau5ItzHPI6pUlvI7jMVnxUQRtw4owF2wk8lOSabtGDCTP4Ggrg2MbGnWO9X8K1t4+fGMDw=="],
|
||||
|
||||
"fsevents": ["fsevents@2.3.3", "", { "os": "darwin" }, "sha512-5xoDfX+fL7faATnagmWPpbFtwh/R77WmMMqqHGS65C3vvB0YHrgF+B1YmZ3441tMj5n63k0212XNoJwzlhffQw=="],
|
||||
|
||||
"function-bind": ["function-bind@1.1.2", "", {}, "sha512-7XHNxH7qX9xG5mIwxkhumTox/MIRNcOgDrxWsMt2pAr23WHp6MrRlN7FBSFpCpr+oVO0F744iUgR82nJMfG2SA=="],
|
||||
|
||||
"gensync": ["gensync@1.0.0-beta.2", "", {}, "sha512-3hN7NaskYvMDLQY55gnW3NQ+mesEAepTqlg+VEbj7zzqEMBVNhzcGYYeqFo/TlYz6eQiFcp1HcsCZO+nGgS8zg=="],
|
||||
|
||||
"get-caller-file": ["get-caller-file@2.0.5", "", {}, "sha512-DyFP3BM/3YHTQOCUL/w0OZHR0lpKeGrxotcHWcqNEdnltqFwXVfhEBQ94eIo34AfQpo0rGki4cyIiftY06h2Fg=="],
|
||||
|
||||
"get-intrinsic": ["get-intrinsic@1.3.0", "", { "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" } }, "sha512-9fSjSaos/fRIVIp+xSJlE6lfwhES7LNtKaCBIamHsjr2na1BiABJPo0mOjjz8GJDURarmCPGqaiVg5mfjb98CQ=="],
|
||||
|
||||
"get-package-type": ["get-package-type@0.1.0", "", {}, "sha512-pjzuKtY64GYfWizNAJ0fr9VqttZkNiK2iS430LtIHzjBEr6bX8Am2zm4sW4Ro5wjWW5cAlRL1qAMTcXbjNAO2Q=="],
|
||||
|
||||
"get-proto": ["get-proto@1.0.1", "", { "dependencies": { "dunder-proto": "^1.0.1", "es-object-atoms": "^1.0.0" } }, "sha512-sTSfBjoXBp89JvIKIefqw7U2CCebsc74kiY6awiGogKtoSGbgjYE/G/+l9sF3MWFPNc9IcoOC4ODfKHfxFmp0g=="],
|
||||
|
||||
"get-stream": ["get-stream@6.0.1", "", {}, "sha512-ts6Wi+2j3jQjqi70w5AlN8DFnkSwC+MqmxEzdEALB2qXZYV3X/b1CTfgPLGJNMeAWxdPfU8FO1ms3NUfaHCPYg=="],
|
||||
|
||||
"glob": ["glob@7.2.3", "", { "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" } }, "sha512-nFR0zLpU2YCaRxwoCJvL6UvCH2JFyFVIvwTLsIf21AuHlMskA1hhTdk+LlYJtOlYt9v6dvszD2BGRqBL+iQK9Q=="],
|
||||
|
||||
"gopd": ["gopd@1.2.0", "", {}, "sha512-ZUKRh6/kUFoAiTAtTYPZJ3hw9wNxx+BIBOijnlG9PnrJsCcSjs1wyyD6vJpaYtgnzDrKYRSqf3OO6Rfa93xsRg=="],
|
||||
|
||||
"graceful-fs": ["graceful-fs@4.2.11", "", {}, "sha512-RbJ5/jmFcNNCcDV5o9eTnBLJ/HszWV0P73bc+Ff4nS/rJj+YaS6IGyiOL0VoBYX+l1Wrl3k63h/KrH+nhJ0XvQ=="],
|
||||
|
||||
"handlebars": ["handlebars@4.7.8", "", { "dependencies": { "minimist": "^1.2.5", "neo-async": "^2.6.2", "source-map": "^0.6.1", "wordwrap": "^1.0.0" }, "optionalDependencies": { "uglify-js": "^3.1.4" }, "bin": { "handlebars": "bin/handlebars" } }, "sha512-vafaFqs8MZkRrSX7sFVUdo3ap/eNiLnb4IakshzvP56X5Nr1iGKAIqdX6tMlm6HcNRIkr6AxO5jFEoJzzpT8aQ=="],
|
||||
|
||||
"has-flag": ["has-flag@4.0.0", "", {}, "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ=="],
|
||||
|
||||
"has-symbols": ["has-symbols@1.1.0", "", {}, "sha512-1cDNdwJ2Jaohmb3sg4OmKaMBwuC48sYni5HUw2DvsC8LjGTLK9h+eb1X6RyuOHe4hT0ULCW68iomhjUoKUqlPQ=="],
|
||||
|
||||
"has-tostringtag": ["has-tostringtag@1.0.2", "", { "dependencies": { "has-symbols": "^1.0.3" } }, "sha512-NqADB8VjPFLM2V0VvHUewwwsw0ZWBaIdgo+ieHtK3hasLz4qeCRjYcqfB6AQrBggRKppKF8L52/VqdVsO47Dlw=="],
|
||||
|
||||
"hasown": ["hasown@2.0.2", "", { "dependencies": { "function-bind": "^1.1.2" } }, "sha512-0hJU9SCPvmMzIBdZFqNPXWa6dqh7WdH0cII9y+CyS8rG3nL48Bclra9HmKhVVUHyPWNH5Y7xDwAB7bfgSjkUMQ=="],
|
||||
|
||||
"html-escaper": ["html-escaper@2.0.2", "", {}, "sha512-H2iMtd0I4Mt5eYiapRdIDjp+XzelXQ0tFE4JS7YFwFevXXMmOp9myNrUvCg0D6ws8iqkRPBfKHgbwig1SmlLfg=="],
|
||||
|
||||
"human-signals": ["human-signals@2.1.0", "", {}, "sha512-B4FFZ6q/T2jhhksgkbEW3HBvWIfDW85snkQgawt07S7J5QXTk6BkNV+0yAeZrM5QpMAdYlocGoljn0sJ/WQkFw=="],
|
||||
|
||||
"humanize-ms": ["humanize-ms@1.2.1", "", { "dependencies": { "ms": "^2.0.0" } }, "sha512-Fl70vYtsAFb/C06PTS9dZBo7ihau+Tu/DNCk/OyHhea07S+aeMWpFFkUaXRa8fI+ScZbEI8dfSxwY7gxZ9SAVQ=="],
|
||||
|
||||
"import-local": ["import-local@3.2.0", "", { "dependencies": { "pkg-dir": "^4.2.0", "resolve-cwd": "^3.0.0" }, "bin": { "import-local-fixture": "fixtures/cli.js" } }, "sha512-2SPlun1JUPWoM6t3F0dw0FkCF/jWY8kttcY4f599GLTSjh2OCuuhdTkJQsEcZzBqbXZGKMK2OqW1oZsjtf/gQA=="],
|
||||
|
||||
"imurmurhash": ["imurmurhash@0.1.4", "", {}, "sha512-JmXMZ6wuvDmLiHEml9ykzqO6lwFbof0GG4IkcGaENdCRDDmMVnny7s5HsIgHCbaq0w2MyPhDqkhTUgS2LU2PHA=="],
|
||||
|
||||
"inflight": ["inflight@1.0.6", "", { "dependencies": { "once": "^1.3.0", "wrappy": "1" } }, "sha512-k92I/b08q4wvFscXCLvqfsHCrjrF7yiXsQuIVvVE7N82W3+aqpzuUdBbfhWcy/FZR3/4IgflMgKLOsvPDrGCJA=="],
|
||||
|
||||
"inherits": ["inherits@2.0.4", "", {}, "sha512-k/vGaX4/Yla3WzyMCvTQOXYeIHvqOKtnqBduzTHpzpQZzAskKMhZ2K+EnBiSM9zGSoIFeMpXKxa4dYeZIQqewQ=="],
|
||||
|
||||
"is-arrayish": ["is-arrayish@0.2.1", "", {}, "sha512-zz06S8t0ozoDXMG+ube26zeCTNXcKIPJZJi8hBrF4idCLms4CG9QtK7qBl1boi5ODzFpjswb5JPmHCbMpjaYzg=="],
|
||||
|
||||
"is-core-module": ["is-core-module@2.16.1", "", { "dependencies": { "hasown": "^2.0.2" } }, "sha512-UfoeMA6fIJ8wTYFEUjelnaGI67v6+N7qXJEvQuIGa99l4xsCruSYOVSQ0uPANn4dAzm8lkYPaKLrrijLq7x23w=="],
|
||||
|
||||
"is-fullwidth-code-point": ["is-fullwidth-code-point@3.0.0", "", {}, "sha512-zymm5+u+sCsSWyD9qNaejV3DFvhCKclKdizYaJUuHA83RLjb7nSuGnddCHGv0hk+KY7BMAlsWeK4Ueg6EV6XQg=="],
|
||||
|
||||
"is-generator-fn": ["is-generator-fn@2.1.0", "", {}, "sha512-cTIB4yPYL/Grw0EaSzASzg6bBy9gqCofvWN8okThAYIxKJZC+udlRAmGbM0XLeniEJSs8uEgHPGuHSe1XsOLSQ=="],
|
||||
|
||||
"is-number": ["is-number@7.0.0", "", {}, "sha512-41Cifkg6e8TylSpdtTpeLVMqvSBEVzTttHvERD741+pnZ8ANv0004MRL43QKPDlK9cGvNp6NZWZUBlbGXYxxng=="],
|
||||
|
||||
"is-stream": ["is-stream@2.0.1", "", {}, "sha512-hFoiJiTl63nn+kstHGBtewWSKnQLpyb155KHheA1l39uvtO9nWIop1p3udqPcUd/xbF1VLMO4n7OI6p7RbngDg=="],
|
||||
|
||||
"isexe": ["isexe@2.0.0", "", {}, "sha512-RHxMLp9lnKHGHRng9QFhRCMbYAcVpn69smSGcq3f36xjgVVWThj4qqLbTLlq7Ssj8B+fIQ1EuCEGI2lKsyQeIw=="],
|
||||
|
||||
"istanbul-lib-coverage": ["istanbul-lib-coverage@3.2.2", "", {}, "sha512-O8dpsF+r0WV/8MNRKfnmrtCWhuKjxrq2w+jpzBL5UZKTi2LeVWnWOmWRxFlesJONmc+wLAGvKQZEOanko0LFTg=="],
|
||||
|
||||
"istanbul-lib-instrument": ["istanbul-lib-instrument@6.0.3", "", { "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" } }, "sha512-Vtgk7L/R2JHyyGW07spoFlB8/lpjiOLTjMdms6AFMraYt3BaJauod/NGrfnVG/y4Ix1JEuMRPDPEj2ua+zz1/Q=="],
|
||||
|
||||
"istanbul-lib-report": ["istanbul-lib-report@3.0.1", "", { "dependencies": { "istanbul-lib-coverage": "^3.0.0", "make-dir": "^4.0.0", "supports-color": "^7.1.0" } }, "sha512-GCfE1mtsHGOELCU8e/Z7YWzpmybrx/+dSTfLrvY8qRmaY6zXTKWn6WQIjaAFw069icm6GVMNkgu0NzI4iPZUNw=="],
|
||||
|
||||
"istanbul-lib-source-maps": ["istanbul-lib-source-maps@4.0.1", "", { "dependencies": { "debug": "^4.1.1", "istanbul-lib-coverage": "^3.0.0", "source-map": "^0.6.1" } }, "sha512-n3s8EwkdFIJCG3BPKBYvskgXGoy88ARzvegkitk60NxRdwltLOTaH7CUiMRXvwYorl0Q712iEjcWB+fK/MrWVw=="],
|
||||
|
||||
"istanbul-reports": ["istanbul-reports@3.2.0", "", { "dependencies": { "html-escaper": "^2.0.0", "istanbul-lib-report": "^3.0.0" } }, "sha512-HGYWWS/ehqTV3xN10i23tkPkpH46MLCIMFNCaaKNavAXTF1RkqxawEPtnjnGZ6XKSInBKkiOA5BKS+aZiY3AvA=="],
|
||||
|
||||
"jest": ["jest@29.7.0", "", { "dependencies": { "@jest/core": "^29.7.0", "@jest/types": "^29.6.3", "import-local": "^3.0.2", "jest-cli": "^29.7.0" }, "peerDependencies": { "node-notifier": "^8.0.1 || ^9.0.0 || ^10.0.0" }, "optionalPeers": ["node-notifier"], "bin": { "jest": "bin/jest.js" } }, "sha512-NIy3oAFp9shda19hy4HK0HRTWKtPJmGdnvywu01nOqNC2vZg+Z+fvJDxpMQA88eb2I9EcafcdjYgsDthnYTvGw=="],
|
||||
|
||||
"jest-changed-files": ["jest-changed-files@29.7.0", "", { "dependencies": { "execa": "^5.0.0", "jest-util": "^29.7.0", "p-limit": "^3.1.0" } }, "sha512-fEArFiwf1BpQ+4bXSprcDc3/x4HSzL4al2tozwVpDFpsxALjLYdyiIK4e5Vz66GQJIbXJ82+35PtysofptNX2w=="],
|
||||
|
||||
"jest-circus": ["jest-circus@29.7.0", "", { "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" } }, "sha512-3E1nCMgipcTkCocFwM90XXQab9bS+GMsjdpmPrlelaxwD93Ad8iVEjX/vvHPdLPnFf+L40u+5+iutRdA1N9myw=="],
|
||||
|
||||
"jest-cli": ["jest-cli@29.7.0", "", { "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" }, "peerDependencies": { "node-notifier": "^8.0.1 || ^9.0.0 || ^10.0.0" }, "optionalPeers": ["node-notifier"], "bin": { "jest": "bin/jest.js" } }, "sha512-OVVobw2IubN/GSYsxETi+gOe7Ka59EFMR/twOU3Jb2GnKKeMGJB5SGUUrEz3SFVmJASUdZUzy83sLNNQ2gZslg=="],
|
||||
|
||||
"jest-config": ["jest-config@29.7.0", "", { "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" }, "peerDependencies": { "@types/node": "*", "ts-node": ">=9.0.0" }, "optionalPeers": ["@types/node", "ts-node"] }, "sha512-uXbpfeQ7R6TZBqI3/TxCU4q4ttk3u0PJeC+E0zbfSoSjq6bJ7buBPxzQPL0ifrkY4DNu4JUdk0ImlBUYi840eQ=="],
|
||||
|
||||
"jest-diff": ["jest-diff@29.7.0", "", { "dependencies": { "chalk": "^4.0.0", "diff-sequences": "^29.6.3", "jest-get-type": "^29.6.3", "pretty-format": "^29.7.0" } }, "sha512-LMIgiIrhigmPrs03JHpxUh2yISK3vLFPkAodPeo0+BuF7wA2FoQbkEg1u8gBYBThncu7e1oEDUfIXVuTqLRUjw=="],
|
||||
|
||||
"jest-docblock": ["jest-docblock@29.7.0", "", { "dependencies": { "detect-newline": "^3.0.0" } }, "sha512-q617Auw3A612guyaFgsbFeYpNP5t2aoUNLwBUbc/0kD1R4t9ixDbyFTHd1nok4epoVFpr7PmeWHrhvuV3XaJ4g=="],
|
||||
|
||||
"jest-each": ["jest-each@29.7.0", "", { "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" } }, "sha512-gns+Er14+ZrEoC5fhOfYCY1LOHHr0TI+rQUHZS8Ttw2l7gl+80eHc/gFf2Ktkw0+SIACDTeWvpFcv3B04VembQ=="],
|
||||
|
||||
"jest-environment-node": ["jest-environment-node@29.7.0", "", { "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" } }, "sha512-DOSwCRqXirTOyheM+4d5YZOrWcdu0LNZ87ewUoywbcb2XR4wKgqiG8vNeYwhjFMbEkfju7wx2GYH0P2gevGvFw=="],
|
||||
|
||||
"jest-get-type": ["jest-get-type@29.6.3", "", {}, "sha512-zrteXnqYxfQh7l5FHyL38jL39di8H8rHoecLH3JNxH3BwOrBsNeabdap5e0I23lD4HHI8W5VFBZqG4Eaq5LNcw=="],
|
||||
|
||||
"jest-haste-map": ["jest-haste-map@29.7.0", "", { "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" }, "optionalDependencies": { "fsevents": "^2.3.2" } }, "sha512-fP8u2pyfqx0K1rGn1R9pyE0/KTn+G7PxktWidOBTqFPLYX0b9ksaMFkhK5vrS3DVun09pckLdlx90QthlW7AmA=="],
|
||||
|
||||
"jest-leak-detector": ["jest-leak-detector@29.7.0", "", { "dependencies": { "jest-get-type": "^29.6.3", "pretty-format": "^29.7.0" } }, "sha512-kYA8IJcSYtST2BY9I+SMC32nDpBT3J2NvWJx8+JCuCdl/CR1I4EKUJROiP8XtCcxqgTTBGJNdbB1A8XRKbTetw=="],
|
||||
|
||||
"jest-matcher-utils": ["jest-matcher-utils@29.7.0", "", { "dependencies": { "chalk": "^4.0.0", "jest-diff": "^29.7.0", "jest-get-type": "^29.6.3", "pretty-format": "^29.7.0" } }, "sha512-sBkD+Xi9DtcChsI3L3u0+N0opgPYnCRPtGcQYrgXmR+hmt/fYfWAL0xRXYU8eWOdfuLgBe0YCW3AFtnRLagq/g=="],
|
||||
|
||||
"jest-message-util": ["jest-message-util@29.7.0", "", { "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" } }, "sha512-GBEV4GRADeP+qtB2+6u61stea8mGcOT4mCtrYISZwfu9/ISHFJ/5zOMXYbpBE9RsS5+Gb63DW4FgmnKJ79Kf6w=="],
|
||||
|
||||
"jest-mock": ["jest-mock@29.7.0", "", { "dependencies": { "@jest/types": "^29.6.3", "@types/node": "*", "jest-util": "^29.7.0" } }, "sha512-ITOMZn+UkYS4ZFh83xYAOzWStloNzJFO2s8DWrE4lhtGD+AorgnbkiKERe4wQVBydIGPx059g6riW5Btp6Llnw=="],
|
||||
|
||||
"jest-pnp-resolver": ["jest-pnp-resolver@1.2.3", "", { "peerDependencies": { "jest-resolve": "*" }, "optionalPeers": ["jest-resolve"] }, "sha512-+3NpwQEnRoIBtx4fyhblQDPgJI0H1IEIkX7ShLUjPGA7TtUTvI1oiKi3SR4oBR0hQhQR80l4WAe5RrXBwWMA8w=="],
|
||||
|
||||
"jest-regex-util": ["jest-regex-util@29.6.3", "", {}, "sha512-KJJBsRCyyLNWCNBOvZyRDnAIfUiRJ8v+hOBQYGn8gDyF3UegwiP4gwRR3/SDa42g1YbVycTidUF3rKjyLFDWbg=="],
|
||||
|
||||
"jest-resolve": ["jest-resolve@29.7.0", "", { "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" } }, "sha512-IOVhZSrg+UvVAshDSDtHyFCCBUl/Q3AAJv8iZ6ZjnZ74xzvwuzLXid9IIIPgTnY62SJjfuupMKZsZQRsCvxEgA=="],
|
||||
|
||||
"jest-resolve-dependencies": ["jest-resolve-dependencies@29.7.0", "", { "dependencies": { "jest-regex-util": "^29.6.3", "jest-snapshot": "^29.7.0" } }, "sha512-un0zD/6qxJ+S0et7WxeI3H5XSe9lTBBR7bOHCHXkKR6luG5mwDDlIzVQ0V5cZCuoTgEdcdwzTghYkTWfubi+nA=="],
|
||||
|
||||
"jest-runner": ["jest-runner@29.7.0", "", { "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" } }, "sha512-fsc4N6cPCAahybGBfTRcq5wFR6fpLznMg47sY5aDpsoejOcVYFb07AHuSnR0liMcPTgBsA3ZJL6kFOjPdoNipQ=="],
|
||||
|
||||
"jest-runtime": ["jest-runtime@29.7.0", "", { "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" } }, "sha512-gUnLjgwdGqW7B4LvOIkbKs9WGbn+QLqRQQ9juC6HndeDiezIwhDP+mhMwHWCEcfQ5RUXa6OPnFF8BJh5xegwwQ=="],
|
||||
|
||||
"jest-snapshot": ["jest-snapshot@29.7.0", "", { "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" } }, "sha512-Rm0BMWtxBcioHr1/OX5YCP8Uov4riHvKPknOGs804Zg9JGZgmIBkbtlxJC/7Z4msKYVbIJtfU+tKb8xlYNfdkw=="],
|
||||
|
||||
"jest-util": ["jest-util@29.7.0", "", { "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" } }, "sha512-z6EbKajIpqGKU56y5KBUgy1dt1ihhQJgWzUlZHArA/+X2ad7Cb5iF+AK1EWVL/Bo7Rz9uurpqw6SiBCefUbCGA=="],
|
||||
|
||||
"jest-validate": ["jest-validate@29.7.0", "", { "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" } }, "sha512-ZB7wHqaRGVw/9hST/OuFUReG7M8vKeq0/J2egIGLdvjHCmYqGARhzXmtgi+gVeZ5uXFF219aOc3Ls2yLg27tkw=="],
|
||||
|
||||
"jest-watcher": ["jest-watcher@29.7.0", "", { "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" } }, "sha512-49Fg7WXkU3Vl2h6LbLtMQ/HyB6rXSIX7SqvBLQmssRBGN9I0PNvPmAmCWSOY6SOvrjhI/F7/bGAv9RtnsPA03g=="],
|
||||
|
||||
"jest-worker": ["jest-worker@29.7.0", "", { "dependencies": { "@types/node": "*", "jest-util": "^29.7.0", "merge-stream": "^2.0.0", "supports-color": "^8.0.0" } }, "sha512-eIz2msL/EzL9UFTFFx7jBTkeZfku0yUAyZZZmJ93H2TYEiroIx2PQjEXcwYtYl8zXCxb+PAmA2hLIt/6ZEkPHw=="],
|
||||
|
||||
"js-tokens": ["js-tokens@4.0.0", "", {}, "sha512-RdJUflcE3cUzKiMqQgsCu06FPu9UdIJO0beYbPhHN4k6apgJtifcoCtT9bcxOpYBtpD2kCM6Sbzg4CausW/PKQ=="],
|
||||
|
||||
"js-yaml": ["js-yaml@3.14.2", "", { "dependencies": { "argparse": "^1.0.7", "esprima": "^4.0.0" }, "bin": { "js-yaml": "bin/js-yaml.js" } }, "sha512-PMSmkqxr106Xa156c2M265Z+FTrPl+oxd/rgOQy2tijQeK5TxQ43psO1ZCwhVOSdnn+RzkzlRz/eY4BgJBYVpg=="],
|
||||
|
||||
"jsesc": ["jsesc@3.1.0", "", { "bin": { "jsesc": "bin/jsesc" } }, "sha512-/sM3dO2FOzXjKQhJuo0Q173wf2KOo8t4I8vHy6lF9poUp7bKT0/NHE8fPX23PwfhnykfqnC2xRxOnVw5XuGIaA=="],
|
||||
|
||||
"json-parse-even-better-errors": ["json-parse-even-better-errors@2.3.1", "", {}, "sha512-xyFwyhro/JEof6Ghe2iz2NcXoj2sloNsWr/XsERDK/oiPCfaNhl5ONfp+jQdAZRQQ0IJWNzH9zIZF7li91kh2w=="],
|
||||
|
||||
"json5": ["json5@2.2.3", "", { "bin": { "json5": "lib/cli.js" } }, "sha512-XmOWe7eyHYH14cLdVPoyg+GOH3rYX++KpzrylJwSW98t3Nk+U8XOl8FWKOgwtzdb8lXGf6zYwDUzeHMWfxasyg=="],
|
||||
|
||||
"kleur": ["kleur@3.0.3", "", {}, "sha512-eTIzlVOSUR+JxdDFepEYcBMtZ9Qqdef+rnzWdRZuMbOywu5tO2w2N7rqjoANZ5k9vywhL6Br1VRjUIgTQx4E8w=="],
|
||||
|
||||
"leven": ["leven@3.1.0", "", {}, "sha512-qsda+H8jTaUaN/x5vzW2rzc+8Rw4TAQ/4KjB46IwK5VH+IlVeeeje/EoZRpiXvIqjFgK84QffqPztGI3VBLG1A=="],
|
||||
|
||||
"lines-and-columns": ["lines-and-columns@1.2.4", "", {}, "sha512-7ylylesZQ/PV29jhEDl3Ufjo6ZX7gCqJr5F7PKrqc93v7fzSymt1BpwEU8nAUXs8qzzvqhbjhK5QZg6Mt/HkBg=="],
|
||||
|
||||
"locate-path": ["locate-path@5.0.0", "", { "dependencies": { "p-locate": "^4.1.0" } }, "sha512-t7hw9pI+WvuwNJXwk5zVHpyhIqzg2qTlklJOf0mVxGSbe3Fp2VieZcduNYjaLDoy6p9uGpQEGWG87WpMKlNq8g=="],
|
||||
|
||||
"lodash.memoize": ["lodash.memoize@4.1.2", "", {}, "sha512-t7j+NzmgnQzTAYXcsHYLgimltOV1MXHtlOWf6GjL9Kj8GK5FInw5JotxvbOs+IvV1/Dzo04/fCGfLVs7aXb4Ag=="],
|
||||
|
||||
"lru-cache": ["lru-cache@5.1.1", "", { "dependencies": { "yallist": "^3.0.2" } }, "sha512-KpNARQA3Iwv+jTA0utUVVbrh+Jlrr1Fv0e56GGzAFOXN7dk/FviaDW8LHmK52DlcH4WP2n6gI8vN1aesBFgo9w=="],
|
||||
|
||||
"make-dir": ["make-dir@4.0.0", "", { "dependencies": { "semver": "^7.5.3" } }, "sha512-hXdUTZYIVOt1Ex//jAQi+wTZZpUpwBj/0QsOzqegb3rGMMeJiSEu5xLHnYfBrRV4RH2+OCSOO95Is/7x1WJ4bw=="],
|
||||
|
||||
"make-error": ["make-error@1.3.6", "", {}, "sha512-s8UhlNe7vPKomQhC1qFelMokr/Sc3AgNbso3n74mVPA5LTZwkB9NlXf4XPamLxJE8h0gh73rM94xvwRT2CVInw=="],
|
||||
|
||||
"makeerror": ["makeerror@1.0.12", "", { "dependencies": { "tmpl": "1.0.5" } }, "sha512-JmqCvUhmt43madlpFzG4BQzG2Z3m6tvQDNKdClZnO3VbIudJYmxsT0FNJMeiB2+JTSlTQTSbU8QdesVmwJcmLg=="],
|
||||
|
||||
"math-intrinsics": ["math-intrinsics@1.1.0", "", {}, "sha512-/IXtbwEk5HTPyEwyKX6hGkYXxM9nbj64B+ilVJnC/R6B0pH5G4V3b0pVbL7DBj4tkhBAppbQUlf6F6Xl9LHu1g=="],
|
||||
|
||||
"merge-stream": ["merge-stream@2.0.0", "", {}, "sha512-abv/qOcuPfk3URPfDzmZU1LKmuw8kT+0nIHvKrKgFrwifol/doWcdA4ZqsWQ8ENrFKkd67Mfpo/LovbIUsbt3w=="],
|
||||
|
||||
"micromatch": ["micromatch@4.0.8", "", { "dependencies": { "braces": "^3.0.3", "picomatch": "^2.3.1" } }, "sha512-PXwfBhYu0hBCPw8Dn0E+WDYb7af3dSLVWKi3HGv84IdF4TyFoC0ysxFd0Goxw7nSv4T/PzEJQxsYsEiFCKo2BA=="],
|
||||
|
||||
"mime-db": ["mime-db@1.52.0", "", {}, "sha512-sPU4uV7dYlvtWJxwwxHD0PuihVNiE7TyAbQ5SWxDCB9mUYvOgroQOwYQQOKPJ8CIbE+1ETVlOoK1UC2nU3gYvg=="],
|
||||
|
||||
"mime-types": ["mime-types@2.1.35", "", { "dependencies": { "mime-db": "1.52.0" } }, "sha512-ZDY+bPm5zTTF+YpCrAU9nK0UgICYPT0QtT1NZWFv4s++TNkcgVaT0g6+4R2uI4MjQjzysHB1zxuWL50hzaeXiw=="],
|
||||
|
||||
"mimic-fn": ["mimic-fn@2.1.0", "", {}, "sha512-OqbOk5oEQeAZ8WXWydlu9HJjz9WVdEIvamMCcXmuqUYjTknH/sqsWvhQ3vgwKFRR1HpjvNBKQ37nbJgYzGqGcg=="],
|
||||
|
||||
"minimatch": ["minimatch@3.1.2", "", { "dependencies": { "brace-expansion": "^1.1.7" } }, "sha512-J7p63hRiAjw1NDEww1W7i37+ByIrOWO5XQQAzZ3VOcL0PNybwpfmV/N05zFAzwQ9USyEcX6t3UO+K5aqBQOIHw=="],
|
||||
|
||||
"minimist": ["minimist@1.2.8", "", {}, "sha512-2yyAR8qBkN3YuheJanUpWC5U3bb5osDywNB8RzDVlDwDHbocAJveqqj1u8+SVD7jkWT4yvsHCpWqqWqAxb0zCA=="],
|
||||
|
||||
"ms": ["ms@2.1.3", "", {}, "sha512-6FlzubTLZG3J2a/NVCAleEhjzq5oxgHyaCU9yYXvcLsvoVaHJq/s5xXI6/XXP6tz7R9xAOtHnSO/tXtF3WRTlA=="],
|
||||
|
||||
"natural-compare": ["natural-compare@1.4.0", "", {}, "sha512-OWND8ei3VtNC9h7V60qff3SVobHr996CTwgxubgyQYEpg290h9J0buyECNNJexkFm5sOajh5G116RYA1c8ZMSw=="],
|
||||
|
||||
"neo-async": ["neo-async@2.6.2", "", {}, "sha512-Yd3UES5mWCSqR+qNT93S3UoYUkqAZ9lLg8a7g9rimsWmYGK8cVToA4/sF3RrshdyV3sAGMXVUmpMYOw+dLpOuw=="],
|
||||
|
||||
"node-domexception": ["node-domexception@1.0.0", "", {}, "sha512-/jKZoMpw0F8GRwl4/eLROPA3cfcXtLApP0QzLmUT/HuPCZWyB7IY9ZrMeKw2O/nFIqPQB3PVM9aYm0F312AXDQ=="],
|
||||
|
||||
"node-fetch": ["node-fetch@2.7.0", "", { "dependencies": { "whatwg-url": "^5.0.0" }, "peerDependencies": { "encoding": "^0.1.0" }, "optionalPeers": ["encoding"] }, "sha512-c4FRfUm/dbcWZ7U+1Wq0AwCyFL+3nt2bEw05wfxSz+DWpWsitgmSgYmy2dQdWyKC1694ELPqMs/YzUSNozLt8A=="],
|
||||
|
||||
"node-int64": ["node-int64@0.4.0", "", {}, "sha512-O5lz91xSOeoXP6DulyHfllpq+Eg00MWitZIbtPfoSEvqIHdl5gfcY6hYzDWnj0qD5tz52PI08u9qUvSVeUBeHw=="],
|
||||
|
||||
"node-releases": ["node-releases@2.0.27", "", {}, "sha512-nmh3lCkYZ3grZvqcCH+fjmQ7X+H0OeZgP40OierEaAptX4XofMh5kwNbWh7lBduUzCcV/8kZ+NDLCwm2iorIlA=="],
|
||||
|
||||
"normalize-path": ["normalize-path@3.0.0", "", {}, "sha512-6eZs5Ls3WtCisHWp9S2GUy8dqkpGi4BVSz3GaqiE6ezub0512ESztXUwUB6C6IKbQkY2Pnb/mD4WYojCRwcwLA=="],
|
||||
|
||||
"npm-run-path": ["npm-run-path@4.0.1", "", { "dependencies": { "path-key": "^3.0.0" } }, "sha512-S48WzZW777zhNIrn7gxOlISNAqi9ZC/uQFnRdbeIHhZhCA6UqpkOT8T1G7BvfdgP4Er8gF4sUbaS0i7QvIfCWw=="],
|
||||
|
||||
"once": ["once@1.4.0", "", { "dependencies": { "wrappy": "1" } }, "sha512-lNaJgI+2Q5URQBkccEKHTQOPaXdUxnZZElQTZY0MFUAuaEqe1E+Nyvgdz/aIyNi6Z9MzO5dv1H8n58/GELp3+w=="],
|
||||
|
||||
"onetime": ["onetime@5.1.2", "", { "dependencies": { "mimic-fn": "^2.1.0" } }, "sha512-kbpaSSGJTWdAY5KPVeMOKXSrPtr8C8C7wodJbcsd51jRnmD+GZu8Y0VoU6Dm5Z4vWr0Ig/1NKuWRKf7j5aaYSg=="],
|
||||
|
||||
"p-limit": ["p-limit@3.1.0", "", { "dependencies": { "yocto-queue": "^0.1.0" } }, "sha512-TYOanM3wGwNGsZN2cVTYPArw454xnXj5qmWF1bEoAc4+cU/ol7GVh7odevjp1FNHduHc3KZMcFduxU5Xc6uJRQ=="],
|
||||
|
||||
"p-locate": ["p-locate@4.1.0", "", { "dependencies": { "p-limit": "^2.2.0" } }, "sha512-R79ZZ/0wAxKGu3oYMlz8jy/kbhsNrS7SKZ7PxEHBgJ5+F2mtFW2fK2cOtBh1cHYkQsbzFV7I+EoRKe6Yt0oK7A=="],
|
||||
|
||||
"p-try": ["p-try@2.2.0", "", {}, "sha512-R4nPAVTAU0B9D35/Gk3uJf/7XYbQcyohSKdvAxIRSNghFl4e71hVoGnBNQz9cWaXxO2I10KTC+3jMdvvoKw6dQ=="],
|
||||
|
||||
"parse-json": ["parse-json@5.2.0", "", { "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" } }, "sha512-ayCKvm/phCGxOkYRSCM82iDwct8/EonSEgCSxWxD7ve6jHggsFl4fZVQBPRNgQoKiuV/odhFrGzQXZwbifC8Rg=="],
|
||||
|
||||
"path-exists": ["path-exists@4.0.0", "", {}, "sha512-ak9Qy5Q7jYb2Wwcey5Fpvg2KoAc/ZIhLSLOSBmRmygPsGwkVVt0fZa0qrtMz+m6tJTAHfZQ8FnmB4MG4LWy7/w=="],
|
||||
|
||||
"path-is-absolute": ["path-is-absolute@1.0.1", "", {}, "sha512-AVbw3UJ2e9bq64vSaS9Am0fje1Pa8pbGqTTsmXfaIiMpnr5DlDhfJOuLj9Sf95ZPVDAUerDfEk88MPmPe7UCQg=="],
|
||||
|
||||
"path-key": ["path-key@3.1.1", "", {}, "sha512-ojmeN0qd+y0jszEtoY48r0Peq5dwMEkIlCOu6Q5f41lfkswXuKtYrhgoTpLnyIcHm24Uhqx+5Tqm2InSwLhE6Q=="],
|
||||
|
||||
"path-parse": ["path-parse@1.0.7", "", {}, "sha512-LDJzPVEEEPR+y48z93A0Ed0yXb8pAByGWo/k5YYdYgpY2/2EsOsksJrq7lOHxryrVOn1ejG6oAp8ahvOIQD8sw=="],
|
||||
|
||||
"picocolors": ["picocolors@1.1.1", "", {}, "sha512-xceH2snhtb5M9liqDsmEw56le376mTZkEX/jEb/RxNFyegNul7eNslCXP9FDj/Lcu0X8KEyMceP2ntpaHrDEVA=="],
|
||||
|
||||
"picomatch": ["picomatch@2.3.1", "", {}, "sha512-JU3teHTNjmE2VCGFzuY8EXzCDVwEqB2a8fsIvwaStHhAWJEeVd1o1QD80CU6+ZdEXXSLbSsuLwJjkCBWqRQUVA=="],
|
||||
|
||||
"pirates": ["pirates@4.0.7", "", {}, "sha512-TfySrs/5nm8fQJDcBDuUng3VOUKsd7S+zqvbOTiGXHfxX4wK31ard+hoNuvkicM/2YFzlpDgABOevKSsB4G/FA=="],
|
||||
|
||||
"pkg-dir": ["pkg-dir@4.2.0", "", { "dependencies": { "find-up": "^4.0.0" } }, "sha512-HRDzbaKjC+AOWVXxAU/x54COGeIv9eb+6CkDSQoNTt4XyWoIJvuPsXizxu/Fr23EiekbtZwmh1IcIG/l/a10GQ=="],
|
||||
|
||||
"pretty-format": ["pretty-format@29.7.0", "", { "dependencies": { "@jest/schemas": "^29.6.3", "ansi-styles": "^5.0.0", "react-is": "^18.0.0" } }, "sha512-Pdlw/oPxN+aXdmM9R00JVC9WVFoCLTKJvDVLgmJ+qAffBMxsV85l/Lu7sNx4zSzPyoL2euImuEwHhOXdEgNFZQ=="],
|
||||
|
||||
"prompts": ["prompts@2.4.2", "", { "dependencies": { "kleur": "^3.0.3", "sisteransi": "^1.0.5" } }, "sha512-NxNv/kLguCA7p3jE8oL2aEBsrJWgAakBpgmgK6lpPWV+WuOmY6r2/zbAVnP+T8bQlA0nzHXSJSJW0Hq7ylaD2Q=="],
|
||||
|
||||
"pure-rand": ["pure-rand@6.1.0", "", {}, "sha512-bVWawvoZoBYpp6yIoQtQXHZjmz35RSVHnUOTefl8Vcjr8snTPY1wnpSPMWekcFwbxI6gtmT7rSYPFvz71ldiOA=="],
|
||||
|
||||
"react-is": ["react-is@18.3.1", "", {}, "sha512-/LLMVyas0ljjAtoYiPqYiL8VWXzUUdThrmU5+n20DZv+a+ClRoevUzw5JxU+Ieh5/c87ytoTBV9G1FiKfNJdmg=="],
|
||||
|
||||
"require-directory": ["require-directory@2.1.1", "", {}, "sha512-fGxEI7+wsG9xrvdjsrlmL22OMTTiHRwAMroiEeMgq8gzoLC/PQr7RsRDSTLUg/bZAZtF+TVIkHc6/4RIKrui+Q=="],
|
||||
|
||||
"resolve": ["resolve@1.22.11", "", { "dependencies": { "is-core-module": "^2.16.1", "path-parse": "^1.0.7", "supports-preserve-symlinks-flag": "^1.0.0" }, "bin": { "resolve": "bin/resolve" } }, "sha512-RfqAvLnMl313r7c9oclB1HhUEAezcpLjz95wFH4LVuhk9JF/r22qmVP9AMmOU4vMX7Q8pN8jwNg/CSpdFnMjTQ=="],
|
||||
|
||||
"resolve-cwd": ["resolve-cwd@3.0.0", "", { "dependencies": { "resolve-from": "^5.0.0" } }, "sha512-OrZaX2Mb+rJCpH/6CpSqt9xFVpN++x01XnN2ie9g6P5/3xelLAkXWVADpdz1IHD/KFfEXyE6V0U01OQ3UO2rEg=="],
|
||||
|
||||
"resolve-from": ["resolve-from@5.0.0", "", {}, "sha512-qYg9KP24dD5qka9J47d0aVky0N+b4fTU89LN9iDnjB5waksiC49rvMB0PrUJQGoTmH50XPiqOvAjDfaijGxYZw=="],
|
||||
|
||||
"resolve.exports": ["resolve.exports@2.0.3", "", {}, "sha512-OcXjMsGdhL4XnbShKpAcSqPMzQoYkYyhbEaeSko47MjRP9NfEQMhZkXL1DoFlt9LWQn4YttrdnV6X2OiyzBi+A=="],
|
||||
|
||||
"semver": ["semver@7.7.3", "", { "bin": { "semver": "bin/semver.js" } }, "sha512-SdsKMrI9TdgjdweUSR9MweHA4EJ8YxHn8DFaDisvhVlUOe4BF1tLD7GAj0lIqWVl+dPb/rExr0Btby5loQm20Q=="],
|
||||
|
||||
"shebang-command": ["shebang-command@2.0.0", "", { "dependencies": { "shebang-regex": "^3.0.0" } }, "sha512-kHxr2zZpYtdmrN1qDjrrX/Z1rR1kG8Dx+gkpK1G4eXmvXswmcE1hTWBWYUzlraYw1/yZp6YuDY77YtvbN0dmDA=="],
|
||||
|
||||
"shebang-regex": ["shebang-regex@3.0.0", "", {}, "sha512-7++dFhtcx3353uBaq8DDR4NuxBetBzC7ZQOhmTQInHEd6bSrXdiEyzCvG07Z44UYdLShWUyXt5M/yhz8ekcb1A=="],
|
||||
|
||||
"signal-exit": ["signal-exit@3.0.7", "", {}, "sha512-wnD2ZE+l+SPC/uoS0vXeE9L1+0wuaMqKlfz9AMUo38JsyLSBWSFcHR1Rri62LZc12vLr1gb3jl7iwQhgwpAbGQ=="],
|
||||
|
||||
"sisteransi": ["sisteransi@1.0.5", "", {}, "sha512-bLGGlR1QxBcynn2d5YmDX4MGjlZvy2MRBDRNHLJ8VI6l6+9FUiyTFNJ0IveOSP0bcXgVDPRcfGqA0pjaqUpfVg=="],
|
||||
|
||||
"slash": ["slash@3.0.0", "", {}, "sha512-g9Q1haeby36OSStwb4ntCGGGaKsaVSjQ68fBxoQcutl5fS1vuY18H3wSt3jFyFtrkx+Kz0V1G85A4MyAdDMi2Q=="],
|
||||
|
||||
"source-map": ["source-map@0.6.1", "", {}, "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g=="],
|
||||
|
||||
"source-map-support": ["source-map-support@0.5.13", "", { "dependencies": { "buffer-from": "^1.0.0", "source-map": "^0.6.0" } }, "sha512-SHSKFHadjVA5oR4PPqhtAVdcBWwRYVd6g6cAXnIbRiIwc2EhPrTuKUBdSLvlEKyIP3GCf89fltvcZiP9MMFA1w=="],
|
||||
|
||||
"sprintf-js": ["sprintf-js@1.0.3", "", {}, "sha512-D9cPgkvLlV3t3IzL0D0YLvGA9Ahk4PcvVwUbN0dSGr1aP0Nrt4AEnTUbuGvquEC0mA64Gqt1fzirlRs5ibXx8g=="],
|
||||
|
||||
"stack-utils": ["stack-utils@2.0.6", "", { "dependencies": { "escape-string-regexp": "^2.0.0" } }, "sha512-XlkWvfIm6RmsWtNJx+uqtKLS8eqFbxUg0ZzLXqY0caEy9l7hruX8IpiDnjsLavoBgqCCR71TqWO8MaXYheJ3RQ=="],
|
||||
|
||||
"string-length": ["string-length@4.0.2", "", { "dependencies": { "char-regex": "^1.0.2", "strip-ansi": "^6.0.0" } }, "sha512-+l6rNN5fYHNhZZy41RXsYptCjA2Igmq4EG7kZAYFQI1E1VTXarr6ZPXBg6eq7Y6eK4FEhY6AJlyuFIb/v/S0VQ=="],
|
||||
|
||||
"string-width": ["string-width@4.2.3", "", { "dependencies": { "emoji-regex": "^8.0.0", "is-fullwidth-code-point": "^3.0.0", "strip-ansi": "^6.0.1" } }, "sha512-wKyQRQpjJ0sIp62ErSZdGsjMJWsap5oRNihHhu6G7JVO/9jIB6UyevL+tXuOqrng8j/cxKTWyWUwvSTriiZz/g=="],
|
||||
|
||||
"strip-ansi": ["strip-ansi@6.0.1", "", { "dependencies": { "ansi-regex": "^5.0.1" } }, "sha512-Y38VPSHcqkFrCpFnQ9vuSXmquuv5oXOKpGeT6aGrr3o3Gc9AlVa6JBfUSOCnbxGGZF+/0ooI7KrPuUSztUdU5A=="],
|
||||
|
||||
"strip-bom": ["strip-bom@4.0.0", "", {}, "sha512-3xurFv5tEgii33Zi8Jtp55wEIILR9eh34FAW00PZf+JnSsTmV/ioewSgQl97JHvgjoRGwPShsWm+IdrxB35d0w=="],
|
||||
|
||||
"strip-final-newline": ["strip-final-newline@2.0.0", "", {}, "sha512-BrpvfNAE3dcvq7ll3xVumzjKjZQ5tI1sEUIKr3Uoks0XUl45St3FlatVqef9prk4jRDzhW6WZg+3bk93y6pLjA=="],
|
||||
|
||||
"strip-json-comments": ["strip-json-comments@3.1.1", "", {}, "sha512-6fPc+R4ihwqP6N/aIv2f1gMH8lOVtWQHoqC4yK6oSDVVocumAsfCqjkXnqiYMhmMwS/mEHLp7Vehlt3ql6lEig=="],
|
||||
|
||||
"supports-color": ["supports-color@7.2.0", "", { "dependencies": { "has-flag": "^4.0.0" } }, "sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw=="],
|
||||
|
||||
"supports-preserve-symlinks-flag": ["supports-preserve-symlinks-flag@1.0.0", "", {}, "sha512-ot0WnXS9fgdkgIcePe6RHNk1WA8+muPa6cSjeR3V8K27q9BB1rTE3R1p7Hv0z1ZyAc8s6Vvv8DIyWf681MAt0w=="],
|
||||
|
||||
"test-exclude": ["test-exclude@6.0.0", "", { "dependencies": { "@istanbuljs/schema": "^0.1.2", "glob": "^7.1.4", "minimatch": "^3.0.4" } }, "sha512-cAGWPIyOHU6zlmg88jwm7VRyXnMN7iV68OGAbYDk/Mh/xC/pzVPlQtY6ngoIH/5/tciuhGfvESU8GrHrcxD56w=="],
|
||||
|
||||
"tmpl": ["tmpl@1.0.5", "", {}, "sha512-3f0uOEAQwIqGuWW2MVzYg8fV/QNnc/IpuJNG837rLuczAaLVHslWHZQj4IGiEl5Hs3kkbhwL9Ab7Hrsmuj+Smw=="],
|
||||
|
||||
"to-regex-range": ["to-regex-range@5.0.1", "", { "dependencies": { "is-number": "^7.0.0" } }, "sha512-65P7iz6X5yEr1cwcgvQxbbIw7Uk3gOy5dIdtZ4rDveLqhrdJP+Li/Hx6tyK0NEb+2GCyneCMJiGqrADCSNk8sQ=="],
|
||||
|
||||
"tr46": ["tr46@0.0.3", "", {}, "sha512-N3WMsuqV66lT30CrXNbEjx4GEwlow3v6rr4mCcv6prnfwhS01rkgyFdjPNBYd9br7LpXV1+Emh01fHnq2Gdgrw=="],
|
||||
|
||||
"ts-jest": ["ts-jest@29.4.6", "", { "dependencies": { "bs-logger": "^0.2.6", "fast-json-stable-stringify": "^2.1.0", "handlebars": "^4.7.8", "json5": "^2.2.3", "lodash.memoize": "^4.1.2", "make-error": "^1.3.6", "semver": "^7.7.3", "type-fest": "^4.41.0", "yargs-parser": "^21.1.1" }, "peerDependencies": { "@babel/core": ">=7.0.0-beta.0 <8", "@jest/transform": "^29.0.0 || ^30.0.0", "@jest/types": "^29.0.0 || ^30.0.0", "babel-jest": "^29.0.0 || ^30.0.0", "jest": "^29.0.0 || ^30.0.0", "jest-util": "^29.0.0 || ^30.0.0", "typescript": ">=4.3 <6" }, "optionalPeers": ["@babel/core", "@jest/transform", "@jest/types", "babel-jest", "jest-util"], "bin": { "ts-jest": "cli.js" } }, "sha512-fSpWtOO/1AjSNQguk43hb/JCo16oJDnMJf3CdEGNkqsEX3t0KX96xvyX1D7PfLCpVoKu4MfVrqUkFyblYoY4lA=="],
|
||||
|
||||
"type-detect": ["type-detect@4.0.8", "", {}, "sha512-0fr/mIH1dlO+x7TlcMy+bIDqKPsw/70tVyeHW787goQjhmqaZe10uwLujubK9q9Lg6Fiho1KUKDYz0Z7k7g5/g=="],
|
||||
|
||||
"type-fest": ["type-fest@4.41.0", "", {}, "sha512-TeTSQ6H5YHvpqVwBRcnLDCBnDOHWYu7IvGbHT6N8AOymcr9PJGjc1GTtiWZTYg0NCgYwvnYWEkVChQAr9bjfwA=="],
|
||||
"bun-types": ["bun-types@1.3.6", "", { "dependencies": { "@types/node": "*" } }, "sha512-OlFwHcnNV99r//9v5IIOgQ9Uk37gZqrNMCcqEaExdkVq3Avwqok1bJFmvGMCkCE0FqzdY8VMOZpfpR3lwI+CsQ=="],
|
||||
|
||||
"typescript": ["typescript@5.9.3", "", { "bin": { "tsc": "bin/tsc", "tsserver": "bin/tsserver" } }, "sha512-jl1vZzPDinLr9eUt3J/t7V6FgNEw9QjvBPdysz9KfQDD41fQrC2Y4vKQdiaUpFT4bXlb1RHhLpp8wtm6M5TgSw=="],
|
||||
|
||||
"uglify-js": ["uglify-js@3.19.3", "", { "bin": { "uglifyjs": "bin/uglifyjs" } }, "sha512-v3Xu+yuwBXisp6QYTcH4UbH+xYJXqnq2m/LtQVWKWzYc1iehYnLixoQDN9FH6/j9/oybfd6W9Ghwkl8+UMKTKQ=="],
|
||||
|
||||
"undici-types": ["undici-types@7.16.0", "", {}, "sha512-Zz+aZWSj8LE6zoxD+xrjh4VfkIG8Ya6LvYkZqtUQGJPZjYl53ypCaUwWqo7eI0x66KBGeRo+mlBEkMSeSZ38Nw=="],
|
||||
|
||||
"update-browserslist-db": ["update-browserslist-db@1.1.4", "", { "dependencies": { "escalade": "^3.2.0", "picocolors": "^1.1.1" }, "peerDependencies": { "browserslist": ">= 4.21.0" }, "bin": { "update-browserslist-db": "cli.js" } }, "sha512-q0SPT4xyU84saUX+tomz1WLkxUbuaJnR1xWt17M7fJtEJigJeWUNGUqrauFXsHnqev9y9JTRGwk13tFBuKby4A=="],
|
||||
|
||||
"v8-to-istanbul": ["v8-to-istanbul@9.3.0", "", { "dependencies": { "@jridgewell/trace-mapping": "^0.3.12", "@types/istanbul-lib-coverage": "^2.0.1", "convert-source-map": "^2.0.0" } }, "sha512-kiGUalWN+rgBJ/1OHZsBtU4rXZOfj/7rKQxULKlIzwzQSvMJUUNgPwJEEh7gU6xEVxC0ahoOBvN2YI8GH6FNgA=="],
|
||||
|
||||
"walker": ["walker@1.0.8", "", { "dependencies": { "makeerror": "1.0.12" } }, "sha512-ts/8E8l5b7kY0vlWLewOkDXMmPdLcVV4GmOQLyxuSswIJsweeFZtAsMF7k1Nszz+TYBQrlYRmzOnr398y1JemQ=="],
|
||||
|
||||
"web-streams-polyfill": ["web-streams-polyfill@4.0.0-beta.3", "", {}, "sha512-QW95TCTaHmsYfHDybGMwO5IJIM93I/6vTRk+daHTWFPhwh+C8Cg7j7XyKrwrj8Ib6vYXe0ocYNrmzY4xAAN6ug=="],
|
||||
|
||||
"webidl-conversions": ["webidl-conversions@3.0.1", "", {}, "sha512-2JAn3z8AR6rjK8Sm8orRC0h/bcl/DqL7tRPdGZ4I1CjdF+EaMLmYxBHyXuKL849eucPFhvBoxMsflfOb8kxaeQ=="],
|
||||
|
||||
"whatwg-url": ["whatwg-url@5.0.0", "", { "dependencies": { "tr46": "~0.0.3", "webidl-conversions": "^3.0.0" } }, "sha512-saE57nupxk6v3HY35+jzBwYa0rKSy0XR8JSxZPwgLr7ys0IBzhGviA1/TUGJLmSVqs8pb9AnvICXEuOHLprYTw=="],
|
||||
|
||||
"which": ["which@2.0.2", "", { "dependencies": { "isexe": "^2.0.0" }, "bin": { "node-which": "./bin/node-which" } }, "sha512-BLI3Tl1TW3Pvl70l3yq3Y64i+awpwXqsGBYWkkqMtnbXgrMD+yj7rhW0kuEDxzJaYXGjEW5ogapKNMEKNMjibA=="],
|
||||
|
||||
"wordwrap": ["wordwrap@1.0.0", "", {}, "sha512-gvVzJFlPycKc5dZN4yPkP8w7Dc37BtP1yczEneOb4uq34pXZcvrtRTmWV8W+Ume+XCxKgbjM+nevkyFPMybd4Q=="],
|
||||
|
||||
"wrap-ansi": ["wrap-ansi@7.0.0", "", { "dependencies": { "ansi-styles": "^4.0.0", "string-width": "^4.1.0", "strip-ansi": "^6.0.0" } }, "sha512-YVGIj2kamLSTxw6NsZjoBxfSwsn0ycdesmc4p+Q21c5zPuZ1pl+NfxVdxPtdHvmNVOQ6XSYG4AUtyt/Fi7D16Q=="],
|
||||
|
||||
"wrappy": ["wrappy@1.0.2", "", {}, "sha512-l4Sp/DRseor9wL6EvV2+TuQn63dMkPjZ/sp9XkghTEbV9KlPS1xUsZ3u7/IQO4wxtcFB4bgpQPRcR3QCvezPcQ=="],
|
||||
|
||||
"write-file-atomic": ["write-file-atomic@4.0.2", "", { "dependencies": { "imurmurhash": "^0.1.4", "signal-exit": "^3.0.7" } }, "sha512-7KxauUdBmSdWnmpaGFg+ppNjKF8uNLry8LyzjauQDOVONfFLNKrKvQOxZ/VuTIcS/gge/YNahf5RIIQWTSarlg=="],
|
||||
|
||||
"y18n": ["y18n@5.0.8", "", {}, "sha512-0pfFzegeDWJHJIAmTLRP2DwHjdF5s7jo9tuztdQxAhINCdvS+3nGINqPd00AphqJR/0LhANUS6/+7SCb98YOfA=="],
|
||||
|
||||
"yallist": ["yallist@3.1.1", "", {}, "sha512-a4UGQaWPH59mOXUYnAG2ewncQS4i4F43Tv3JoAM+s2VDAmS9NsK8GpDMLrCHPksFT7h3K6TOoUNn2pb7RoXx4g=="],
|
||||
|
||||
"yargs": ["yargs@17.7.2", "", { "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" } }, "sha512-7dSzzRQ++CKnNI/krKnYRV7JKKPUXMEh61soaHKg9mrWEhzFWhFnxPxGl+69cD1Ou63C13NUPCnmIcrvqCuM6w=="],
|
||||
|
||||
"yargs-parser": ["yargs-parser@21.1.1", "", {}, "sha512-tVpsJW7DdjecAiFpbIB1e3qxIQsE6NoPc5/eTdrbbIC4h0LVsWhnoa3g+m2HclBIujHzsxZ4VJVA+GUuc2/LBw=="],
|
||||
|
||||
"yocto-queue": ["yocto-queue@0.1.0", "", {}, "sha512-rVksvsnNCdJ/ohGc6xgPwyN8eheCxsiLM8mxuE/t/mOVqJewPuO1miLpTHQiRgTKCLexL4MeAFVagts7HmNZ2Q=="],
|
||||
|
||||
"zod": ["zod@4.0.0", "", {}, "sha512-9diLdTPc/L7w/5jI4C3gHYNiGHDV9IZYxo1e5LSD8cabi65WVTWWb+g2BGPEpUUCOxR4D+6O5B0AzyMdUAXwrw=="],
|
||||
|
||||
"@babel/core/semver": ["semver@6.3.1", "", { "bin": { "semver": "bin/semver.js" } }, "sha512-BR7VvDCVHO+q2xBEWskxS6DJE1qRnb7DxzUrogb71CWoSficBxYsiAGd+Kl0mmq/MprG9yArRkyrQxTO6XjMzA=="],
|
||||
|
||||
"@babel/helper-compilation-targets/semver": ["semver@6.3.1", "", { "bin": { "semver": "bin/semver.js" } }, "sha512-BR7VvDCVHO+q2xBEWskxS6DJE1qRnb7DxzUrogb71CWoSficBxYsiAGd+Kl0mmq/MprG9yArRkyrQxTO6XjMzA=="],
|
||||
|
||||
"@honcho-ai/core/@types/node": ["@types/node@18.19.130", "", { "dependencies": { "undici-types": "~5.26.4" } }, "sha512-GRaXQx6jGfL8sKfaIDD6OupbIHBr9jv7Jnaml9tB7l4v068PAOXqfcujMMo5PhbIs6ggR1XODELqahT2R8v0fg=="],
|
||||
|
||||
"@istanbuljs/load-nyc-config/camelcase": ["camelcase@5.3.1", "", {}, "sha512-L28STB170nwWS63UjtlEOE3dldQApaJXZkOI1uMFfzf3rRuPegHaHesyee+YxQ+W6SvRDQV6UrdOdRiR153wJg=="],
|
||||
|
||||
"ansi-escapes/type-fest": ["type-fest@0.21.3", "", {}, "sha512-t0rzBq87m3fVcduHDUFhKmyyX+9eo6WQjZvf51Ea/M0Q7+T374Jp1aUiyUl0GKxp8M/OETVHSDvmkyPgvX+X2w=="],
|
||||
|
||||
"babel-plugin-istanbul/istanbul-lib-instrument": ["istanbul-lib-instrument@5.2.1", "", { "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" } }, "sha512-pzqtp31nLv/XFOzXGuvhCb8qhjmTVo5vjVk19XE4CRlSWz0KoeJ3bw9XsA7nOp9YBf4qHjwBxkDzKcME/J29Yg=="],
|
||||
|
||||
"chalk/ansi-styles": ["ansi-styles@4.3.0", "", { "dependencies": { "color-convert": "^2.0.1" } }, "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg=="],
|
||||
|
||||
"jest-worker/supports-color": ["supports-color@8.1.1", "", { "dependencies": { "has-flag": "^4.0.0" } }, "sha512-MpUEN2OodtUzxvKQl72cUF7RQ5EiHsGvSsVG0ia9c5RbWGL2CI4C7EpPS8UTBIplnlzZiNuV56w+FuNxy3ty2Q=="],
|
||||
|
||||
"p-locate/p-limit": ["p-limit@2.3.0", "", { "dependencies": { "p-try": "^2.0.0" } }, "sha512-//88mFWSJx8lxCzwdAABTJL2MyWB12+eIY7MDL2SqLmAkeKU9qxRvWuSyTjm3FUmpBEMuFfckAIqEaVGUDxb6w=="],
|
||||
|
||||
"wrap-ansi/ansi-styles": ["ansi-styles@4.3.0", "", { "dependencies": { "color-convert": "^2.0.1" } }, "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg=="],
|
||||
|
||||
"@honcho-ai/core/@types/node/undici-types": ["undici-types@5.26.5", "", {}, "sha512-JlCMO+ehdEIKqlFxk6IfVoAUVmgz7cU7zD/h9XZ0qzeosSHmUJVOzSQvvYSYWXkFXC+IfLKSIffhv0sVZup6pA=="],
|
||||
|
||||
"babel-plugin-istanbul/istanbul-lib-instrument/semver": ["semver@6.3.1", "", { "bin": { "semver": "bin/semver.js" } }, "sha512-BR7VvDCVHO+q2xBEWskxS6DJE1qRnb7DxzUrogb71CWoSficBxYsiAGd+Kl0mmq/MprG9yArRkyrQxTO6XjMzA=="],
|
||||
}
|
||||
}
|
||||
|
|
|
|||
|
|
@ -0,0 +1,534 @@
|
|||
#!/usr/bin/env python3
|
||||
"""
|
||||
Calculate expected CloudEvents and input tokens from longmemeval test case files.
|
||||
|
||||
This script parses longmemeval test files (like longmemeval_sanity.json, longmemeval_oracle.json)
|
||||
and calculates the expected number of CloudEvents and input tokens that should be processed
|
||||
when running the test.
|
||||
|
||||
Supported test files:
|
||||
- longmemeval_sanity.json (5 questions, quick verification)
|
||||
- longmemeval_oracle.json (full evaluation set)
|
||||
- longmemeval_oracle_100.json (100-question subset)
|
||||
- longmemeval_s_cleaned.json (cleaned dataset)
|
||||
|
||||
Event types calculated:
|
||||
- representation.completed: One per (session, observed) batch processed by deriver
|
||||
- dialectic.completed: One per dialectic chat query
|
||||
- dream.run: One per dream consolidation trigger
|
||||
|
||||
Token counting:
|
||||
- Uses tiktoken (o200k_base encoding) for accurate token estimation
|
||||
- Falls back to character/4 estimation if tiktoken unavailable
|
||||
|
||||
Usage:
|
||||
python calculate_expected_events.py <test_file.json> [options]
|
||||
|
||||
Examples:
|
||||
# Calculate events for sanity test (default: separate sessions, dialectic chat, with dream)
|
||||
python calculate_expected_events.py longmemeval_data/longmemeval_sanity.json
|
||||
|
||||
# Calculate events for full oracle test
|
||||
python calculate_expected_events.py longmemeval_data/longmemeval_oracle.json
|
||||
|
||||
# Calculate with merged sessions
|
||||
python calculate_expected_events.py longmemeval_data/longmemeval_sanity.json --merge-sessions
|
||||
|
||||
# Calculate without dream events
|
||||
python calculate_expected_events.py longmemeval_data/longmemeval_sanity.json --no-dream
|
||||
|
||||
# Calculate with get_context instead of dialectic (no dialectic events)
|
||||
python calculate_expected_events.py longmemeval_data/longmemeval_sanity.json --use-get-context
|
||||
|
||||
# Calculate for first 10 questions only
|
||||
python calculate_expected_events.py longmemeval_data/longmemeval_oracle.json --test-count 10
|
||||
|
||||
# Output as JSON for programmatic use
|
||||
python calculate_expected_events.py longmemeval_data/longmemeval_sanity.json --json
|
||||
"""
|
||||
|
||||
from __future__ import annotations
|
||||
|
||||
import argparse
|
||||
import json
|
||||
from dataclasses import dataclass, field
|
||||
from pathlib import Path
|
||||
from typing import Any
|
||||
|
||||
# Token counting setup
|
||||
try:
|
||||
import tiktoken
|
||||
|
||||
_tokenizer = tiktoken.get_encoding("o200k_base")
|
||||
_USE_TIKTOKEN = True
|
||||
except ImportError:
|
||||
_tokenizer = None
|
||||
_USE_TIKTOKEN = False # pyright: ignore[reportConstantRedefinition]
|
||||
|
||||
|
||||
def estimate_tokens(text: str) -> int:
|
||||
"""Estimate token count using tiktoken, with fallback to char/4."""
|
||||
if not text:
|
||||
return 0
|
||||
if _USE_TIKTOKEN and _tokenizer is not None:
|
||||
try:
|
||||
return len(_tokenizer.encode(text))
|
||||
except Exception:
|
||||
pass
|
||||
# Fallback: rough estimate of 4 chars per token
|
||||
return len(text) // 4
|
||||
|
||||
|
||||
@dataclass
|
||||
class QuestionEventCounts:
|
||||
"""Event counts and token metrics for a single question."""
|
||||
|
||||
question_id: str
|
||||
question_type: str
|
||||
sessions_count: int
|
||||
total_messages: int
|
||||
observed_peer: str
|
||||
representation_events: int
|
||||
dialectic_events: int
|
||||
dream_events: int
|
||||
# Token counts
|
||||
total_input_tokens: int = 0
|
||||
user_tokens: int = 0
|
||||
assistant_tokens: int = 0
|
||||
question_tokens: int = 0
|
||||
|
||||
@property
|
||||
def total_events(self) -> int:
|
||||
return self.representation_events + self.dialectic_events + self.dream_events
|
||||
|
||||
|
||||
@dataclass
|
||||
class TestFileEventSummary:
|
||||
"""Summary of expected events for a test file."""
|
||||
|
||||
file_path: str
|
||||
total_questions: int
|
||||
merge_sessions: bool
|
||||
use_get_context: bool
|
||||
dream_enabled: bool
|
||||
questions: list[QuestionEventCounts] = field(default_factory=list)
|
||||
|
||||
@property
|
||||
def total_representation_events(self) -> int:
|
||||
return sum(q.representation_events for q in self.questions)
|
||||
|
||||
@property
|
||||
def total_dialectic_events(self) -> int:
|
||||
return sum(q.dialectic_events for q in self.questions)
|
||||
|
||||
@property
|
||||
def total_dream_events(self) -> int:
|
||||
return sum(q.dream_events for q in self.questions)
|
||||
|
||||
@property
|
||||
def total_events(self) -> int:
|
||||
return (
|
||||
self.total_representation_events
|
||||
+ self.total_dialectic_events
|
||||
+ self.total_dream_events
|
||||
)
|
||||
|
||||
@property
|
||||
def total_input_tokens(self) -> int:
|
||||
return sum(q.total_input_tokens for q in self.questions)
|
||||
|
||||
@property
|
||||
def total_user_tokens(self) -> int:
|
||||
return sum(q.user_tokens for q in self.questions)
|
||||
|
||||
@property
|
||||
def total_assistant_tokens(self) -> int:
|
||||
return sum(q.assistant_tokens for q in self.questions)
|
||||
|
||||
@property
|
||||
def total_question_tokens(self) -> int:
|
||||
return sum(q.question_tokens for q in self.questions)
|
||||
|
||||
def by_question_type(self) -> dict[str, dict[str, int]]:
|
||||
"""Group event counts by question type."""
|
||||
result: dict[str, dict[str, int]] = {}
|
||||
for q in self.questions:
|
||||
if q.question_type not in result:
|
||||
result[q.question_type] = {
|
||||
"questions": 0,
|
||||
"representation_events": 0,
|
||||
"dialectic_events": 0,
|
||||
"dream_events": 0,
|
||||
"total_events": 0,
|
||||
"total_input_tokens": 0,
|
||||
"user_tokens": 0,
|
||||
"assistant_tokens": 0,
|
||||
}
|
||||
result[q.question_type]["questions"] += 1
|
||||
result[q.question_type]["representation_events"] += q.representation_events
|
||||
result[q.question_type]["dialectic_events"] += q.dialectic_events
|
||||
result[q.question_type]["dream_events"] += q.dream_events
|
||||
result[q.question_type]["total_events"] += q.total_events
|
||||
result[q.question_type]["total_input_tokens"] += q.total_input_tokens
|
||||
result[q.question_type]["user_tokens"] += q.user_tokens
|
||||
result[q.question_type]["assistant_tokens"] += q.assistant_tokens
|
||||
return result
|
||||
|
||||
|
||||
def count_messages_by_role(
|
||||
session_messages: list[dict[str, Any]],
|
||||
) -> dict[str, int]:
|
||||
"""Count messages by role in a session."""
|
||||
counts = {"user": 0, "assistant": 0}
|
||||
for msg in session_messages:
|
||||
role = msg.get("role", "")
|
||||
if role in counts:
|
||||
counts[role] += 1
|
||||
return counts
|
||||
|
||||
|
||||
def calculate_question_events(
|
||||
question_data: dict[str, Any],
|
||||
merge_sessions: bool,
|
||||
use_get_context: bool,
|
||||
dream_enabled: bool,
|
||||
) -> QuestionEventCounts:
|
||||
"""
|
||||
Calculate expected events and tokens for a single question.
|
||||
|
||||
The calculation is based on how the longmem.py runner processes test cases:
|
||||
- Creates workspace per question
|
||||
- Creates sessions (merged or separate based on config)
|
||||
- Adds messages to sessions (triggers representation events)
|
||||
- Triggers dream consolidation (if enabled)
|
||||
- Queries via dialectic chat (if not using get_context)
|
||||
|
||||
Args:
|
||||
question_data: Question data from the test file
|
||||
merge_sessions: Whether sessions are merged into one
|
||||
use_get_context: Whether using get_context instead of dialectic chat
|
||||
dream_enabled: Whether dream consolidation is enabled
|
||||
|
||||
Returns:
|
||||
QuestionEventCounts with calculated event counts and token metrics
|
||||
"""
|
||||
question_id = question_data.get("question_id", "unknown")
|
||||
question_type = question_data.get("question_type", "unknown")
|
||||
haystack_sessions = question_data.get("haystack_sessions", [])
|
||||
question_text = question_data.get("question", "")
|
||||
|
||||
# Determine which peer is observed based on question type
|
||||
# single-session-assistant observes assistant, all others observe user
|
||||
is_assistant_type = question_type == "single-session-assistant"
|
||||
observed_peer = "assistant" if is_assistant_type else "user"
|
||||
|
||||
# Count total messages and tokens
|
||||
total_messages = 0
|
||||
user_tokens = 0
|
||||
assistant_tokens = 0
|
||||
|
||||
for session in haystack_sessions:
|
||||
for msg in session:
|
||||
total_messages += 1
|
||||
content = msg.get("content", "")
|
||||
role = msg.get("role", "")
|
||||
tokens = estimate_tokens(content)
|
||||
if role == "user":
|
||||
user_tokens += tokens
|
||||
elif role == "assistant":
|
||||
assistant_tokens += tokens
|
||||
|
||||
# Token count for the question itself (used in dialectic)
|
||||
question_tokens = estimate_tokens(question_text)
|
||||
|
||||
# Total input tokens = all message content
|
||||
total_input_tokens = user_tokens + assistant_tokens
|
||||
|
||||
# Calculate representation events
|
||||
# Each unique (session, observed) pair generates one representation event
|
||||
# (assuming messages fit within REPRESENTATION_BATCH_MAX_TOKENS)
|
||||
# When merge_sessions=True, all messages go into one session
|
||||
if merge_sessions:
|
||||
# One merged session = one representation event
|
||||
representation_events = 1
|
||||
sessions_count = 1
|
||||
else:
|
||||
# One representation event per session
|
||||
sessions_count = len(haystack_sessions)
|
||||
representation_events = sessions_count
|
||||
|
||||
# Calculate dialectic events
|
||||
# One per chat query (if using dialectic chat)
|
||||
dialectic_events = 0 if use_get_context else 1
|
||||
|
||||
# Calculate dream events
|
||||
# One per dream trigger
|
||||
dream_events = 1 if dream_enabled else 0
|
||||
|
||||
return QuestionEventCounts(
|
||||
question_id=question_id,
|
||||
question_type=question_type,
|
||||
sessions_count=sessions_count,
|
||||
total_messages=total_messages,
|
||||
observed_peer=observed_peer,
|
||||
representation_events=representation_events,
|
||||
dialectic_events=dialectic_events,
|
||||
dream_events=dream_events,
|
||||
total_input_tokens=total_input_tokens,
|
||||
user_tokens=user_tokens,
|
||||
assistant_tokens=assistant_tokens,
|
||||
question_tokens=question_tokens,
|
||||
)
|
||||
|
||||
|
||||
def calculate_test_file_events(
|
||||
test_file: Path,
|
||||
merge_sessions: bool = False,
|
||||
use_get_context: bool = False,
|
||||
dream_enabled: bool = True,
|
||||
question_ids: list[str] | None = None,
|
||||
test_count: int | None = None,
|
||||
) -> TestFileEventSummary:
|
||||
"""
|
||||
Calculate expected events for all questions in a test file.
|
||||
|
||||
Args:
|
||||
test_file: Path to the test file (JSON)
|
||||
merge_sessions: Whether to merge all sessions into one per question
|
||||
use_get_context: Whether using get_context instead of dialectic chat
|
||||
dream_enabled: Whether dream consolidation is enabled
|
||||
question_ids: Optional list of specific question IDs to include
|
||||
test_count: Optional limit on number of questions to process
|
||||
|
||||
Returns:
|
||||
TestFileEventSummary with calculated event counts
|
||||
"""
|
||||
with open(test_file) as f:
|
||||
questions = json.load(f)
|
||||
|
||||
# Filter by question_ids if specified
|
||||
if question_ids:
|
||||
questions = [q for q in questions if q.get("question_id") in question_ids]
|
||||
|
||||
# Limit by test_count if specified
|
||||
if test_count is not None:
|
||||
questions = questions[:test_count]
|
||||
|
||||
summary = TestFileEventSummary(
|
||||
file_path=str(test_file),
|
||||
total_questions=len(questions),
|
||||
merge_sessions=merge_sessions,
|
||||
use_get_context=use_get_context,
|
||||
dream_enabled=dream_enabled,
|
||||
)
|
||||
|
||||
for question_data in questions:
|
||||
counts = calculate_question_events(
|
||||
question_data, merge_sessions, use_get_context, dream_enabled
|
||||
)
|
||||
summary.questions.append(counts)
|
||||
|
||||
return summary
|
||||
|
||||
|
||||
def format_tokens(tokens: int) -> str:
|
||||
"""Format token count with K/M suffix for readability."""
|
||||
if tokens >= 1_000_000:
|
||||
return f"{tokens / 1_000_000:.1f}M"
|
||||
elif tokens >= 1_000:
|
||||
return f"{tokens / 1_000:.1f}K"
|
||||
return str(tokens)
|
||||
|
||||
|
||||
def print_summary(summary: TestFileEventSummary, verbose: bool = False) -> None:
|
||||
"""Print a formatted summary of expected events and tokens."""
|
||||
print(f"\n{'=' * 60}")
|
||||
print(f"Expected CloudEvents for: {summary.file_path}")
|
||||
print(f"{'=' * 60}")
|
||||
print("\nConfiguration:")
|
||||
print(f" - Merge sessions: {summary.merge_sessions}")
|
||||
print(f" - Use get_context: {summary.use_get_context}")
|
||||
print(f" - Dream enabled: {summary.dream_enabled}")
|
||||
print(
|
||||
f" - Token counting: {'tiktoken (o200k_base)' if _USE_TIKTOKEN else 'estimate (chars/4)'}"
|
||||
)
|
||||
|
||||
print(f"\nTotal Questions: {summary.total_questions}")
|
||||
|
||||
print(f"\n{'─' * 40}")
|
||||
print("Expected Event Counts:")
|
||||
print(f"{'─' * 40}")
|
||||
print(f" representation.completed: {summary.total_representation_events:>6}")
|
||||
print(f" dialectic.completed: {summary.total_dialectic_events:>6}")
|
||||
print(f" dream.run: {summary.total_dream_events:>6}")
|
||||
print(f"{'─' * 40}")
|
||||
print(f" TOTAL: {summary.total_events:>6}")
|
||||
print(f"{'─' * 40}")
|
||||
|
||||
print(f"\n{'─' * 40}")
|
||||
print("Expected Input Tokens:")
|
||||
print(f"{'─' * 40}")
|
||||
print(f" User messages: {summary.total_user_tokens:>12,}")
|
||||
print(f" Assistant messages: {summary.total_assistant_tokens:>12,}")
|
||||
print(f" Questions: {summary.total_question_tokens:>12,}")
|
||||
print(f"{'─' * 40}")
|
||||
print(
|
||||
f" TOTAL (messages): {summary.total_input_tokens:>12,} ({format_tokens(summary.total_input_tokens)})"
|
||||
)
|
||||
print(f"{'─' * 40}")
|
||||
|
||||
# Breakdown by question type
|
||||
by_type = summary.by_question_type()
|
||||
if len(by_type) > 1:
|
||||
print("\nBreakdown by Question Type:")
|
||||
print(f"{'─' * 70}")
|
||||
for qtype, counts in sorted(by_type.items()):
|
||||
print(f"\n {qtype}:")
|
||||
print(f" Questions: {counts['questions']:>4}")
|
||||
print(f" representation: {counts['representation_events']:>4}")
|
||||
print(f" dialectic: {counts['dialectic_events']:>4}")
|
||||
print(f" dream: {counts['dream_events']:>4}")
|
||||
print(f" total events: {counts['total_events']:>4}")
|
||||
print(
|
||||
f" input tokens: {counts['total_input_tokens']:>10,} ({format_tokens(counts['total_input_tokens'])})"
|
||||
)
|
||||
|
||||
if verbose:
|
||||
print(f"\n{'─' * 70}")
|
||||
print("Per-Question Details:")
|
||||
print(f"{'─' * 70}")
|
||||
for q in summary.questions:
|
||||
print(f"\n {q.question_id} ({q.question_type}):")
|
||||
print(f" Sessions: {q.sessions_count}, Messages: {q.total_messages}")
|
||||
print(f" Observed: {q.observed_peer}")
|
||||
print(
|
||||
f" Events: repr={q.representation_events}, dial={q.dialectic_events}, dream={q.dream_events}"
|
||||
)
|
||||
print(
|
||||
f" Tokens: user={q.user_tokens:,}, asst={q.assistant_tokens:,}, total={q.total_input_tokens:,}"
|
||||
)
|
||||
|
||||
print()
|
||||
|
||||
|
||||
def output_json(summary: TestFileEventSummary) -> str:
|
||||
"""Output summary as JSON for programmatic use."""
|
||||
return json.dumps(
|
||||
{
|
||||
"file_path": summary.file_path,
|
||||
"configuration": {
|
||||
"merge_sessions": summary.merge_sessions,
|
||||
"use_get_context": summary.use_get_context,
|
||||
"dream_enabled": summary.dream_enabled,
|
||||
"token_counting": "tiktoken" if _USE_TIKTOKEN else "estimate",
|
||||
},
|
||||
"total_questions": summary.total_questions,
|
||||
"expected_events": {
|
||||
"representation_completed": summary.total_representation_events,
|
||||
"dialectic_completed": summary.total_dialectic_events,
|
||||
"dream_run": summary.total_dream_events,
|
||||
"total": summary.total_events,
|
||||
},
|
||||
"expected_tokens": {
|
||||
"user_messages": summary.total_user_tokens,
|
||||
"assistant_messages": summary.total_assistant_tokens,
|
||||
"questions": summary.total_question_tokens,
|
||||
"total_messages": summary.total_input_tokens,
|
||||
},
|
||||
"by_question_type": summary.by_question_type(),
|
||||
"questions": [
|
||||
{
|
||||
"question_id": q.question_id,
|
||||
"question_type": q.question_type,
|
||||
"sessions_count": q.sessions_count,
|
||||
"total_messages": q.total_messages,
|
||||
"observed_peer": q.observed_peer,
|
||||
"representation_events": q.representation_events,
|
||||
"dialectic_events": q.dialectic_events,
|
||||
"dream_events": q.dream_events,
|
||||
"total_events": q.total_events,
|
||||
"total_input_tokens": q.total_input_tokens,
|
||||
"user_tokens": q.user_tokens,
|
||||
"assistant_tokens": q.assistant_tokens,
|
||||
"question_tokens": q.question_tokens,
|
||||
}
|
||||
for q in summary.questions
|
||||
],
|
||||
},
|
||||
indent=2,
|
||||
)
|
||||
|
||||
|
||||
def main() -> None:
|
||||
parser = argparse.ArgumentParser(
|
||||
description="Calculate expected CloudEvents from longmemeval test case files",
|
||||
formatter_class=argparse.RawDescriptionHelpFormatter,
|
||||
epilog=__doc__,
|
||||
)
|
||||
parser.add_argument(
|
||||
"test_file",
|
||||
type=Path,
|
||||
help="Path to the longmemeval test file (JSON)",
|
||||
)
|
||||
parser.add_argument(
|
||||
"--merge-sessions",
|
||||
action="store_true",
|
||||
help="Calculate with merged sessions (default: separate sessions)",
|
||||
)
|
||||
parser.add_argument(
|
||||
"--use-get-context",
|
||||
action="store_true",
|
||||
help="Calculate for get_context mode (no dialectic events)",
|
||||
)
|
||||
parser.add_argument(
|
||||
"--no-dream",
|
||||
action="store_true",
|
||||
help="Calculate without dream events",
|
||||
)
|
||||
parser.add_argument(
|
||||
"--question-id",
|
||||
type=str,
|
||||
action="append",
|
||||
dest="question_ids",
|
||||
help="Only include specific question IDs (can be repeated)",
|
||||
)
|
||||
parser.add_argument(
|
||||
"--test-count",
|
||||
type=int,
|
||||
help="Limit to first N questions",
|
||||
)
|
||||
parser.add_argument(
|
||||
"--verbose",
|
||||
"-v",
|
||||
action="store_true",
|
||||
help="Show per-question details",
|
||||
)
|
||||
parser.add_argument(
|
||||
"--json",
|
||||
action="store_true",
|
||||
help="Output as JSON instead of formatted text",
|
||||
)
|
||||
|
||||
args = parser.parse_args()
|
||||
|
||||
if not args.test_file.exists():
|
||||
print(f"Error: Test file not found: {args.test_file}")
|
||||
return
|
||||
|
||||
summary = calculate_test_file_events(
|
||||
test_file=args.test_file,
|
||||
merge_sessions=args.merge_sessions,
|
||||
use_get_context=args.use_get_context,
|
||||
dream_enabled=not args.no_dream,
|
||||
question_ids=args.question_ids,
|
||||
test_count=args.test_count,
|
||||
)
|
||||
|
||||
if args.json:
|
||||
print(output_json(summary))
|
||||
else:
|
||||
print_summary(summary, verbose=args.verbose)
|
||||
|
||||
|
||||
if __name__ == "__main__":
|
||||
main()
|
||||
Loading…
Reference in New Issue