Skip to content

Instantly share code, notes, and snippets.

@ryx2
Created April 24, 2025 07:13
Show Gist options
  • Save ryx2/fb6edf5cb6e259bc2b563864e0f35f71 to your computer and use it in GitHub Desktop.
Save ryx2/fb6edf5cb6e259bc2b563864e0f35f71 to your computer and use it in GitHub Desktop.
openhands crash from context too long
This file has been truncated, but you can view the full file.
cd /tmp && python -m openhands.resolver.resolve_issue \
--selected-repo modern-realty-inc/plug-chat \
--token *** \
--issue-number 2567 \
--issue-type issue \
--max-iterations 50 \
--comment-id None \
--is-experimental true
shell: /usr/bin/bash -e {0}
env:
pythonLocation: /opt/hostedtoolcache/Python/3.12.10/x64
PKG_CONFIG_PATH: /opt/hostedtoolcache/Python/3.12.10/x64/lib/pkgconfig
Python_ROOT_DIR: /opt/hostedtoolcache/Python/3.12.10/x64
Python2_ROOT_DIR: /opt/hostedtoolcache/Python/3.12.10/x64
Python3_ROOT_DIR: /opt/hostedtoolcache/Python/3.12.10/x64
LD_LIBRARY_PATH: /opt/hostedtoolcache/Python/3.12.10/x64/lib
ISSUE_NUMBER: 2567
ISSUE_TYPE: issue
COMMENT_ID: None
MAX_ITERATIONS: 50
SANDBOX_ENV_GITHUB_TOKEN: ***
SANDBOX_ENV_BASE_CONTAINER_IMAGE:
TARGET_BRANCH: main
GITHUB_TOKEN: ***
GITHUB_USERNAME: ***
GIT_USERNAME: ***
LLM_MODEL: anthropic/claude-3-7-sonnet-latest
LLM_API_KEY: ***
LLM_BASE_URL:
LLM_API_VERSION:
PYTHONPATH:
16:38:36 - openhands:INFO: github.py:100 - Limiting resolving to issues [2567].
16:38:36 - openhands:INFO: resolve_issue.py:442 - Using output directory: output
Cloning into 'output/repo'...
16:38:39 - openhands:INFO: resolve_issue.py:464 - Base commit: b13e91f9674f63279246c9a62ae048892c47f9de
16:38:39 - openhands:INFO: resolve_issue.py:475 - Writing output to output/output.jsonl
16:38:39 - openhands:INFO: resolve_issue.py:490 - Resolving issue 2567 with Agent CodeActAgent, model claude-3-7-sonnet-latest, max iterations 50.
16:38:39 - openhands:INFO: resolve_issue.py:183 - Starting fixing issue 2567.
16:38:39 - openhands:INFO: runtime_build.py:182 - Building image: ghcr.io/all-hands-ai/runtime:oh_v0.34.0_aoh113ibra7zv8pg_660gpmny7rtgfyim
16:42:20 - openhands:INFO: docker.py:222 - Image [ghcr.io/all-hands-ai/runtime:oh_v0.34.0_aoh113ibra7zv8pg_660gpmny7rtgfyim] build finished.
16:42:20 - openhands:INFO: docker.py:227 - Re-tagged image [ghcr.io/all-hands-ai/runtime:oh_v0.34.0_aoh113ibra7zv8pg_660gpmny7rtgfyim] with more generic tag [oh_v0.34.0_aoh113ibra7zv8pg]
16:42:20 - openhands:INFO: docker.py:243 - Image ghcr.io/all-hands-ai/runtime with tags [oh_v0.34.0_aoh113ibra7zv8pg_660gpmny7rtgfyim, oh_v0.34.0_aoh113ibra7zv8pg] built successfully
16:42:20 - openhands:INFO: docker_runtime.py:165 - [runtime 762916a8-4fb4-48c2-a3b7-b0917a1cf171-319e8e72befff0c3] Starting runtime with image: ghcr.io/all-hands-ai/runtime:oh_v0.34.0_aoh113ibra7zv8pg_660gpmny7rtgfyim
16:42:20 - openhands:INFO: docker_runtime.py:169 - [runtime 762916a8-4fb4-48c2-a3b7-b0917a1cf171-319e8e72befff0c3] Container started: openhands-runtime-762916a8-4fb4-48c2-a3b7-b0917a1cf171-319e8e72befff0c3. VSCode URL: None
16:42:20 - openhands:INFO: docker_runtime.py:180 - [runtime 762916a8-4fb4-48c2-a3b7-b0917a1cf171-319e8e72befff0c3] Waiting for client to become ready at http://localhost:37976...
16:42:44 - openhands:INFO: docker_runtime.py:186 - [runtime 762916a8-4fb4-48c2-a3b7-b0917a1cf171-319e8e72befff0c3] Runtime is ready.
16:42:45 - openhands:INFO: resolve_issue.py:60 - ------------------------------
16:42:45 - openhands:INFO: resolve_issue.py:61 - BEGIN Runtime Completion Fn
16:42:45 - openhands:INFO: resolve_issue.py:62 - ------------------------------
16:42:45 - ACTION
**CmdRunAction (source=None, is_input=False)**
COMMAND:
cd /workspace
16:42:46 - OBSERVATION
**CmdOutputObservation (source=None, exit code=0, metadata={
"exit_code": 0,
"pid": -1,
"username": "openhands",
"hostname": "aae885bd2acb",
"working_dir": "/workspace",
"py_interpreter_path": "/openhands/poetry/openhands-ai-5O4_aCHf-py3.12/bin/python",
"prefix": "",
"suffix": "\n[The command completed with exit code 0.]"
})**
--BEGIN AGENT OBSERVATION--
[The command completed with exit code 0.]
[Current working directory: /workspace]
[Python interpreter: /openhands/poetry/openhands-ai-5O4_aCHf-py3.12/bin/python]
[Command finished with exit code 0]
--END AGENT OBSERVATION--
16:42:46 - ACTION
**CmdRunAction (source=None, is_input=False)**
COMMAND:
git config --global core.pager ""
16:42:47 - OBSERVATION
**CmdOutputObservation (source=None, exit code=0, metadata={
"exit_code": 0,
"pid": -1,
"username": "openhands",
"hostname": "aae885bd2acb",
"working_dir": "/workspace",
"py_interpreter_path": "/openhands/poetry/openhands-ai-5O4_aCHf-py3.12/bin/python",
"prefix": "",
"suffix": "\n[The command completed with exit code 0.]"
})**
--BEGIN AGENT OBSERVATION--
[The command completed with exit code 0.]
[Current working directory: /workspace]
[Python interpreter: /openhands/poetry/openhands-ai-5O4_aCHf-py3.12/bin/python]
[Command finished with exit code 0]
--END AGENT OBSERVATION--
16:42:47 - openhands:INFO: base.py:432 - [runtime 762916a8-4fb4-48c2-a3b7-b0917a1cf171-319e8e72befff0c3] Selected repo: None, loading microagents from /workspace/.openhands/microagents (inside runtime)
16:42:47 - openhands:INFO: base.py:453 - [runtime 762916a8-4fb4-48c2-a3b7-b0917a1cf171-319e8e72befff0c3] openhands_instructions microagent loaded.
16:42:47 - openhands:INFO: memory.py:239 - Loading user workspace microagents: ['repo_legacy']
16:42:47 - openhands:INFO: resolve_issue.py:233 - **SystemMessageAction** (source=EventSource.AGENT)
CONTENT: You are OpenHands agent, a helpful AI assistant that can interact with a computer to solve tasks.
<ROLE>
Your primary role is to assist users by executing commands, modifying code, and solving technical problems effectively. You should be thorough, methodical, and prioritize quality over speed.
* If the user asks a question, like "why is X happening", don't try to fix the problem. Just give an answer to the question.
</ROLE>
<EFFICIENCY>
* Each action you take is somewhat expensive. Wherever possible, combine multiple actions into a single action, e.g. combine multiple bash commands into one, using sed and grep to edit/view multiple files at once.
* When exploring the codebase, use efficient tools like find, grep, and git commands with appropriate filters to minimize unnecessary operations.
</EFFICIENCY>
<FILE_SYSTEM_GUIDELINES>
* When a user provides a file path, do NOT assume it's relative to the current working directory. First explore the file system to locate the file before working on it.
* If asked to edit a file, edit the file directly, rather than creating a new file with a different filename.
* For global search-and-replace operations, consider using `sed` instead of opening file editors multiple times.
</FILE_SYSTEM_GUIDELINES>
<CODE_QUALITY>
* Write clean, efficient code with minimal comments. Avoid redundancy in comments: Do not repeat information that can be easily inferred from the code itself.
* When implementing solutions, focus on making the minimal changes needed to solve the problem.
* Before implementing any changes, first thoroughly understand the codebase through exploration.
* If you are adding a lot of code to a function or file, consider splitting the function or file into smaller pieces when appropriate.
</CODE_QUALITY>
<VERSION_CONTROL>
* When configuring git credentials, use "openhands" as the user.name and "[email protected]" as the user.email by default, unless explicitly instructed otherwise.
* Exercise caution with git operations. Do NOT make potentially dangerous changes (e.g., pushing to main, deleting repositories) unless explicitly asked to do so.
* When committing changes, use `git status` to see all modified files, and stage all files necessary for the commit. Use `git commit -a` whenever possible.
* Do NOT commit files that typically shouldn't go into version control (e.g., node_modules/, .env files, build directories, cache files, large binaries) unless explicitly instructed by the user.
* If unsure about committing certain files, check for the presence of .gitignore files or ask the user for clarification.
</VERSION_CONTROL>
<PULL_REQUESTS>
* When creating pull requests, create only ONE per session/issue unless explicitly instructed otherwise.
* When working with an existing PR, update it with new commits rather than creating additional PRs for the same issue.
* When updating a PR, preserve the original PR title and purpose, updating description only when necessary.
</PULL_REQUESTS>
<PROBLEM_SOLVING_WORKFLOW>
1. EXPLORATION: Thoroughly explore relevant files and understand the context before proposing solutions
2. ANALYSIS: Consider multiple approaches and select the most promising one
3. TESTING:
* For bug fixes: Create tests to verify issues before implementing fixes
* For new features: Consider test-driven development when appropriate
* If the repository lacks testing infrastructure and implementing tests would require extensive setup, consult with the user before investing time in building testing infrastructure
4. IMPLEMENTATION: Make focused, minimal changes to address the problem
5. VERIFICATION: Test your implementation thoroughly, including edge cases
</PROBLEM_SOLVING_WORKFLOW>
<SECURITY>
* Only use GITHUB_TOKEN and other credentials in ways the user has explicitly requested and would expect.
* Use APIs to work with GitHub or other platforms, unless the user asks otherwise or your task requires browsing.
</SECURITY>
<ENVIRONMENT_SETUP>
* When user asks you to run an application, don't stop if the application is not installed. Instead, please install the application and run the command again.
* If you encounter missing dependencies:
1. First, look around in the repository for existing dependency files (requirements.txt, pyproject.toml, package.json, Gemfile, etc.)
2. If dependency files exist, use them to install all dependencies at once (e.g., `pip install -r requirements.txt`, `npm install`, etc.)
3. Only install individual packages directly if no dependency files are found or if only specific packages are needed
* Similarly, if you encounter missing dependencies for essential tools requested by the user, install them when possible.
</ENVIRONMENT_SETUP>
<TROUBLESHOOTING>
* If you've made repeated attempts to solve a problem but tests still fail or the user reports it's still broken:
1. Step back and reflect on 5-7 different possible sources of the problem
2. Assess the likelihood of each possible cause
3. Methodically address the most likely causes, starting with the highest probability
4. Document your reasoning process
* When you run into any major issue while executing a plan from the user, please don't try to directly work around it. Instead, propose a new plan and confirm with the user before proceeding.
</TROUBLESHOOTING>
TOOLS: 7 tools available
AGENT_CLASS: CodeActAgent
16:42:47 - openhands:INFO: resolve_issue.py:233 - **MessageAction** (source=EventSource.USER)
CONTENT: Please fix the following issue for the repository in /workspace.
An environment has been set up for you to start working. You may assume all necessary tools are installed.
# Problem Statement
We want our system to be able to take tour requests where we're the listing agent
The system currently anticipates that we are always the buying agent (with the exception of seller_flow). for tour requests for our listing property: as you can see from buyer_flow or realtor_flow, the current tour process is initateScheduleShowing, then, negotiateShowingTime, then confirmShowingTime. it should still be the same steps, but the functions set different things when we're on the listing side (there's no "client" party, for an example)
DO NOT delete or modify any supabase tables
Issue Thread Comments:
[OpenHands](https://github.com/All-Hands-AI/OpenHands) started fixing the issue! You can monitor the progress [here](https://github.com/modern-realty-inc/plug-chat/actions/runs/14623401340).
IMPORTANT: You should ONLY interact with the environment provided to you AND NEVER ASK FOR HUMAN HELP.
You SHOULD INCLUDE PROPER INDENTATION in your edit commands.
Some basic information about this repository:
# How to Contribute Overview
You are a brilliant software engineer.
This is a typescript vercel nextjs 14 app router deployed repository. We use AI to scale our brokerage to spend way less time on each client but still provide a better service than than current human agents via texting. We use the openai assistant to use function calling to retrieve information like zillow, redfin, the MLS, etc.
Don't create any of the frontend, just edit backend.
## Style Guide & Contributing Instructions
To install and run, use `./bun run`. Use `./bun test <filename>` to run tests. Make sure to add the filename to the test command, otherwise it will run too many tests, which have too much output and it's hard to interpret. Do NOT run `./bun test` without a filename, it will run too many tests. Try to get even more specific, run `./bun test <filename> -t <testname>` to run a specific test inside the test file, this you will get the most detailed information on the specific issue.
<IMPORTANT>
Use `./bun test <filename> -t <testname>` to test code you've written.
</IMPORTANT>
Make sure to run `./bun run build` before finishing to ensure that everything compiles. You MUST run these bun commands before proceeding with finishing the task. DO NOT END THE EXECUTION UNLESS YOU HAVE TESTED THAT THE CODE PASSES TESTS, AND RUN BUILD CHECKS. Make sure you run `./bun`, with the `./` in front. We don't have access to installing bun, and so you will need to use the local binary.
Use `lib/services/__tests__/utils/test-utils.ts` to create tests that test the real dependencies and functionalities, not mocks. From test-utils, use assistant.chat() to process test messages, don't make other items available from the test-utils return and don't import other items from tests. Check if things work only through the test-utils's assistant.chat() method.
Don't add other class initiations into test-utils. Don't make modifications to internal variables in classes for the tests, just use the assistant.chat() method. Make all classes and functions public by default unless otherwise specified. Focus on integration tests that use real components. Avoid the "unknown" or "any" types, if possible.
<IMPORTANT>
Do NOT use mocks, use real dependencies.
DO NOT USE MOCKS, USE REAL DEPENDENCIES.
</IMPORTANT>
Keep code files to under 250 lines of length if possible. Use JSDoc documentation for all functions.
After making the new branch, keep pushing to it regularly with commit messages that are good summaries of the work that is done in that commit.
Write the least amount of code possible to complete the task. Write the cleanest, shortest, most elegant code possible that follows best software engineering practices.
<IMPORTANT>
Look through the entire codebase with searching keywords to make sure that you are not duplicating any functionality.
</IMPORTANT>
For all changes to actual application code (e.g. in Python or Javascript), add an appropriate test to the testing directory to make sure that the issue has been fixed.
Run the tests, and if they pass you are done!
You do NOT need to write new tests if there are only changes to documentation or configuration files.
When you think you have fixed the issue through code changes, please call the finish action to end the interaction.
16:42:47 - openhands:INFO: agent_controller.py:979 - [Agent Controller 762916a8-4fb4-48c2-a3b7-b0917a1cf171-319e8e72befff0c3] Set pending action: RecallAction (id=-1)
16:42:47 - openhands:INFO: agent_controller.py:586 - [Agent Controller 762916a8-4fb4-48c2-a3b7-b0917a1cf171-319e8e72befff0c3] Setting agent(CodeActAgent) state from AgentState.LOADING to AgentState.RUNNING
16:42:47 - openhands:INFO: agent_controller.py:416 - [Agent Controller 762916a8-4fb4-48c2-a3b7-b0917a1cf171-319e8e72befff0c3] Stepping agent after event: MessageAction
16:42:47 - openhands:INFO: agent_controller.py:774 - [Agent Controller 762916a8-4fb4-48c2-a3b7-b0917a1cf171-319e8e72befff0c3] Agent not stepping because of pending action: RecallAction (id=2)
16:42:47 - openhands:INFO: resolve_issue.py:233 - **RecallAction**
QUERY: Please fix the following issue for the repository
16:42:47 - openhands:INFO: resolve_issue.py:233 - AgentStateChangedObservation(content='', agent_state='running', reason='', observation=<ObservationType.AGENT_STATE_CHANGED: 'agent_state_changed'>)
16:42:47 - openhands:INFO: resolve_issue.py:233 - **RecallObservation**
recall_type=RecallType.WORKSPACE_CONTEXT, repo_name=, repo_instructions=# How to Contribute ..., runtime_hosts={'http://localhost:52165': 52165, 'http://localhost:58308': 58308}, additional_agent_instructions=..., date=2025-04-23
16:42:47 - openhands:INFO: agent_controller.py:970 - [Agent Controller 762916a8-4fb4-48c2-a3b7-b0917a1cf171-319e8e72befff0c3] Cleared pending action after 0.03s: RecallAction (id=2)
16:42:47 - openhands:INFO: agent_controller.py:416 - [Agent Controller 762916a8-4fb4-48c2-a3b7-b0917a1cf171-319e8e72befff0c3] Stepping agent after event: RecallObservation
[Agent Controller 762916a8-4fb4-48c2-a3b7-b0917a1cf171-319e8e72befff0c3] LEVEL 0 LOCAL STEP 0 GLOBAL STEP 0
16:42:49 - openhands:INFO: agent_controller.py:979 - [Agent Controller 762916a8-4fb4-48c2-a3b7-b0917a1cf171-319e8e72befff0c3] Set pending action: CmdRunAction (id=-1)
16:42:49 - openhands:INFO: resolve_issue.py:233 - **CmdRunAction (source=EventSource.AGENT, is_input=False)**
THOUGHT: I'll help you fix the issue with tour requests where we're the listing agent. Let me start by exploring the codebase to understand the current implementation and what needs to be changed.
COMMAND:
find /workspace -type f -name "*.ts" | grep -i "tour\|showing" | sort
16:42:50 - openhands:INFO: resolve_issue.py:233 - **CmdOutputObservation (source=EventSource.AGENT, exit code=0, metadata={
"exit_code": 0,
"pid": -1,
"username": "openhands",
"hostname": "aae885bd2acb",
"working_dir": "/workspace",
"py_interpreter_path": "/openhands/poetry/openhands-ai-5O4_aCHf-py3.12/bin/python",
"prefix": "",
"suffix": "\n[The command completed with exit code 0.]"
})**
--BEGIN AGENT OBSERVATION--
/workspace/__tests__/for_client_tour_scheduling_scenario.test.ts
/workspace/__tests__/property_tour_request.test.ts
/workspace/__tests__/self_tour_scheduling_scenario.test.ts
/workspace/__tests__/services/buyer_flow/perplexity_showing.test.ts
/workspace/__tests__/tour_test_utils.ts
/workspace/app/api/showing-request/[hash]/route.ts
/workspace/lib/services/__tests__/realtor_flow/confirmShowingWithClient.test.ts
/workspace/lib/services/__tests__/setupExistingTour.test.ts
/workspace/lib/services/__tests__/showingRequest.test.ts
/workspace/lib/services/buyer_flow/__tests__/scheduleMultipleTours.test.ts
/workspace/lib/services/buyer_flow/showing.ts
/workspace/lib/services/drip_box/__tests__/tourFollowup.test.ts
/workspace/lib/services/drip_box/utils/tourFollowup.ts
/workspace/lib/services/realtor_flow/__tests__/realtor_tour_scenarios.test.ts
/workspace/lib/utils/__tests__/parseShowingTime.test.ts
/workspace/lib/utils/parseShowingTime.ts
/workspace/scripts/generate-showing-request-link.ts
/workspace/scripts/testing/schedule_showami_showing.ts
[The command completed with exit code 0.]
[Current working directory: /workspace]
[Python interpreter: /openhands/poetry/openhands-ai-5O4_aCHf-py3.12/bin/python]
[Command finished with exit code 0]
--END AGENT OBSERVATION--
16:42:50 - openhands:INFO: agent_controller.py:970 - [Agent Controller 762916a8-4fb4-48c2-a3b7-b0917a1cf171-319e8e72befff0c3] Cleared pending action after 0.64s: CmdRunAction (id=5)
16:42:50 - openhands:INFO: agent_controller.py:416 - [Agent Controller 762916a8-4fb4-48c2-a3b7-b0917a1cf171-319e8e72befff0c3] Stepping agent after event: CmdOutputObservation
[Agent Controller 762916a8-4fb4-48c2-a3b7-b0917a1cf171-319e8e72befff0c3] LEVEL 0 LOCAL STEP 1 GLOBAL STEP 1
16:42:52 - openhands:INFO: agent_controller.py:979 - [Agent Controller 762916a8-4fb4-48c2-a3b7-b0917a1cf171-319e8e72befff0c3] Set pending action: CmdRunAction (id=-1)
16:42:52 - openhands:INFO: resolve_issue.py:233 - **CmdRunAction (source=EventSource.AGENT, is_input=False)**
THOUGHT: Let me look at the buyer flow and realtor flow to understand the current tour process implementation.
COMMAND:
find /workspace -type f -name "*.ts" | grep -i "initateScheduleShowing\|negotiateShowingTime\|confirmShowingTime"
16:42:53 - openhands:INFO: resolve_issue.py:233 - **CmdOutputObservation (source=EventSource.AGENT, exit code=1, metadata={
"exit_code": 1,
"pid": -1,
"username": "openhands",
"hostname": "aae885bd2acb",
"working_dir": "/workspace",
"py_interpreter_path": "/openhands/poetry/openhands-ai-5O4_aCHf-py3.12/bin/python",
"prefix": "",
"suffix": "\n[The command completed with exit code 1.]"
})**
--BEGIN AGENT OBSERVATION--
[The command completed with exit code 1.]
[Current working directory: /workspace]
[Python interpreter: /openhands/poetry/openhands-ai-5O4_aCHf-py3.12/bin/python]
[Command finished with exit code 1]
--END AGENT OBSERVATION--
16:42:53 - openhands:INFO: agent_controller.py:970 - [Agent Controller 762916a8-4fb4-48c2-a3b7-b0917a1cf171-319e8e72befff0c3] Cleared pending action after 0.64s: CmdRunAction (id=7)
16:42:53 - openhands:INFO: agent_controller.py:416 - [Agent Controller 762916a8-4fb4-48c2-a3b7-b0917a1cf171-319e8e72befff0c3] Stepping agent after event: CmdOutputObservation
[Agent Controller 762916a8-4fb4-48c2-a3b7-b0917a1cf171-319e8e72befff0c3] LEVEL 0 LOCAL STEP 2 GLOBAL STEP 2
16:42:55 - openhands:INFO: agent_controller.py:979 - [Agent Controller 762916a8-4fb4-48c2-a3b7-b0917a1cf171-319e8e72befff0c3] Set pending action: CmdRunAction (id=-1)
16:42:55 - openhands:INFO: resolve_issue.py:233 - **CmdRunAction (source=EventSource.AGENT, is_input=False)**
THOUGHT: Let me try a more general search to find the relevant files for the tour scheduling process.
COMMAND:
find /workspace -type f -name "*.ts" | xargs grep -l "initateScheduleShowing" 2>/dev/null || echo "No matches found"
16:42:56 - openhands:INFO: resolve_issue.py:233 - **CmdOutputObservation (source=EventSource.AGENT, exit code=0, metadata={
"exit_code": 0,
"pid": -1,
"username": "openhands",
"hostname": "aae885bd2acb",
"working_dir": "/workspace",
"py_interpreter_path": "/openhands/poetry/openhands-ai-5O4_aCHf-py3.12/bin/python",
"prefix": "",
"suffix": "\n[The command completed with exit code 0.]"
})**
--BEGIN AGENT OBSERVATION--
No matches found
[The command completed with exit code 0.]
[Current working directory: /workspace]
[Python interpreter: /openhands/poetry/openhands-ai-5O4_aCHf-py3.12/bin/python]
[Command finished with exit code 0]
--END AGENT OBSERVATION--
16:42:56 - openhands:INFO: agent_controller.py:970 - [Agent Controller 762916a8-4fb4-48c2-a3b7-b0917a1cf171-319e8e72befff0c3] Cleared pending action after 0.64s: CmdRunAction (id=9)
16:42:56 - openhands:INFO: agent_controller.py:416 - [Agent Controller 762916a8-4fb4-48c2-a3b7-b0917a1cf171-319e8e72befff0c3] Stepping agent after event: CmdOutputObservation
[Agent Controller 762916a8-4fb4-48c2-a3b7-b0917a1cf171-319e8e72befff0c3] LEVEL 0 LOCAL STEP 3 GLOBAL STEP 3
16:42:58 - openhands:INFO: agent_controller.py:979 - [Agent Controller 762916a8-4fb4-48c2-a3b7-b0917a1cf171-319e8e72befff0c3] Set pending action: CmdRunAction (id=-1)
16:42:58 - openhands:INFO: resolve_issue.py:233 - **CmdRunAction (source=EventSource.AGENT, is_input=False)**
THOUGHT: Let me check for the correct spelling of the function name.
COMMAND:
find /workspace -type f -name "*.ts" | xargs grep -l "initiateScheduleShowing" 2>/dev/null || echo "No matches found"
16:42:59 - openhands:INFO: resolve_issue.py:233 - **CmdOutputObservation (source=EventSource.AGENT, exit code=0, metadata={
"exit_code": 0,
"pid": -1,
"username": "openhands",
"hostname": "aae885bd2acb",
"working_dir": "/workspace",
"py_interpreter_path": "/openhands/poetry/openhands-ai-5O4_aCHf-py3.12/bin/python",
"prefix": "",
"suffix": "\n[The command completed with exit code 0.]"
})**
--BEGIN AGENT OBSERVATION--
/workspace/__tests__/for_client_tour_scheduling_scenario.test.ts
/workspace/__tests__/services/buyer_flow/perplexity_showing.test.ts
/workspace/__tests__/self_tour_scheduling_scenario.test.ts
/workspace/lib/types/assistantTypes.ts
/workspace/lib/services/realEstate/prompts/talksToClientPrompt.ts
/workspace/lib/services/realEstate/core/toolCallCounts.ts
/workspace/lib/services/realEstate/core/chatMessageProcessor.ts
/workspace/lib/services/realEstate/core/ToolCallHandler.ts
/workspace/lib/services/realEstate/configs/clientTools.ts
/workspace/lib/services/buyer_flow/showing.ts
/workspace/lib/services/buyer_flow/buyer_flow.ts
[The command completed with exit code 0.]
[Current working directory: /workspace]
[Python interpreter: /openhands/poetry/openhands-ai-5O4_aCHf-py3.12/bin/python]
[Command finished with exit code 0]
--END AGENT OBSERVATION--
16:42:59 - openhands:INFO: agent_controller.py:970 - [Agent Controller 762916a8-4fb4-48c2-a3b7-b0917a1cf171-319e8e72befff0c3] Cleared pending action after 0.64s: CmdRunAction (id=11)
16:42:59 - openhands:INFO: agent_controller.py:416 - [Agent Controller 762916a8-4fb4-48c2-a3b7-b0917a1cf171-319e8e72befff0c3] Stepping agent after event: CmdOutputObservation
[Agent Controller 762916a8-4fb4-48c2-a3b7-b0917a1cf171-319e8e72befff0c3] LEVEL 0 LOCAL STEP 4 GLOBAL STEP 4
16:43:01 - openhands:INFO: agent_controller.py:979 - [Agent Controller 762916a8-4fb4-48c2-a3b7-b0917a1cf171-319e8e72befff0c3] Set pending action: CmdRunAction (id=-1)
16:43:01 - openhands:INFO: resolve_issue.py:233 - **CmdRunAction (source=EventSource.AGENT, is_input=False)**
THOUGHT: Now let me look at the other functions in the tour process.
COMMAND:
find /workspace -type f -name "*.ts" | xargs grep -l "negotiateShowingTime\|confirmShowingTime" 2>/dev/null || echo "No matches found"
16:43:01 - openhands:INFO: resolve_issue.py:233 - **CmdOutputObservation (source=EventSource.AGENT, exit code=0, metadata={
"exit_code": 0,
"pid": -1,
"username": "openhands",
"hostname": "aae885bd2acb",
"working_dir": "/workspace",
"py_interpreter_path": "/openhands/poetry/openhands-ai-5O4_aCHf-py3.12/bin/python",
"prefix": "",
"suffix": "\n[The command completed with exit code 0.]"
})**
--BEGIN AGENT OBSERVATION--
/workspace/__tests__/services/realtor_flow/maintain_client_number.test.ts
/workspace/__tests__/self_tour_scheduling_scenario.test.ts
/workspace/lib/services/realEstate/prompts/talksToClientPrompt.ts
/workspace/lib/services/realEstate/prompts/talksToRealtorPrompt.ts
/workspace/lib/services/realEstate/core/toolCallCounts.ts
/workspace/lib/services/realEstate/core/ToolCallHandler.ts
/workspace/lib/services/realEstate/configs/realtorTools.ts
/workspace/lib/services/realEstate/configs/clientTools.ts
/workspace/lib/services/realtor_flow/realtor_flow.ts
/workspace/lib/services/buyer_flow/buyer_flow.ts
[The command completed with exit code 0.]
[Current working directory: /workspace]
[Python interpreter: /openhands/poetry/openhands-ai-5O4_aCHf-py3.12/bin/python]
[Command finished with exit code 0]
--END AGENT OBSERVATION--
16:43:01 - openhands:INFO: agent_controller.py:970 - [Agent Controller 762916a8-4fb4-48c2-a3b7-b0917a1cf171-319e8e72befff0c3] Cleared pending action after 0.64s: CmdRunAction (id=13)
16:43:01 - openhands:INFO: agent_controller.py:416 - [Agent Controller 762916a8-4fb4-48c2-a3b7-b0917a1cf171-319e8e72befff0c3] Stepping agent after event: CmdOutputObservation
[Agent Controller 762916a8-4fb4-48c2-a3b7-b0917a1cf171-319e8e72befff0c3] LEVEL 0 LOCAL STEP 5 GLOBAL STEP 5
16:43:04 - openhands:INFO: agent_controller.py:979 - [Agent Controller 762916a8-4fb4-48c2-a3b7-b0917a1cf171-319e8e72befff0c3] Set pending action: FileReadAction (id=-1)
16:43:04 - openhands:INFO: resolve_issue.py:233 - FileReadAction(path='/workspace/lib/services/buyer_flow/buyer_flow.ts', start=0, end=-1, thought='Let me examine the buyer flow and realtor flow implementations to understand the current tour process.', action=<ActionType.READ: 'read'>, security_risk=None, impl_source=<FileReadSource.OH_ACI: 'oh_aci'>, view_range=None)
16:43:04 - openhands:INFO: resolve_issue.py:233 - [Read from /workspace/lib/services/buyer_flow/buyer_flow.ts is successful.]
Here's the result of running `cat -n` on /workspace/lib/services/buyer_flow/buyer_flow.ts:
1 import { ClientAssistantCreator } from '../realEstate/openai_assistant_init/clientAssistantCreator'
2 import { generateShowingMessageToClient, ShowingService, checkIfShowingAlreadyScheduled } from './showing'
3 import { PropertyService } from './property'
4 import { ExternalService } from './external'
5 import {
6 CLIENT_TALKER_TOOLS,
7 ADMIN_CLIENT_TALKER_TOOLS
8 } from '../realEstate/configs/clientTools'
9 import { AssistantTool } from '@/lib/types/openaiTypes'
10 import { IBaseFlow } from '@/lib/types/flow'
11 import { formatMessagesAsXml } from '../realEstate/core/messageFormatter'
12 import { traceClass } from '@/lib/utils/trace'
13 import {
14 supabaseClient,
15 getClientByPhone,
16 findListingAgentByPropertyZpid,
17 propertyExistsForUser,
18 getPropertyShowingTimes,
19 getClientCurrentProperty,
20 getAgentPhoneByPropertyZpid,
21 getClientByEmail,
22 getClientsByName,
23 updateUserCurrentProperty,
24 updateClientProposedShowingTime,
25 checkNumberOfTours
26 } from '@/lib/services/shared/supabaseClient'
27 import { confirmPropertyShowingTime } from '@/lib/services/shared/supabase/properties'
28 import {
29 extractPhoneNumber,
30 extractEmailAddress,
31 extractAllPhoneNumbers
32 } from '@/lib/services/shared/phoneUtils'
33 import { notifyAdmins, formatMessageAsHtml } from '@/lib/twilioUtils'
34 import dayjs from '@/lib/utils/dates'
35 import {
36 scheduleFollowUpTextDate,
37 scheduleFollowUpTextDates,
38 scheduleFollowUpTexts,
39 } from '../realEstate/core/followUp'
40 import { ListingAgentManager } from '../realEstate/core/listingAgentManager'
41 import type {
42 PropertyDetails,
43 SimplifiedPropertyDetails
44 } from '../../types/property'
45 import { convertToSimplifiedPropertyDetails } from '../zillow_ops/zil'
46 import { callAnthropicModel } from '../realEstate/core/callModel'
47 import { convertShortAddressToFullAddress } from '../realEstate/convertClientAddressToFullAddress'
48 import { neighborhoodMarketReportByAddress } from '../redfin_utils/rapidapi_redf'
49 import { getShowingTimesByDate } from '../calendar/supabaseCalendar'
50 import { createCalendarEvent } from '../calendar/zapierCalendar'
51 import { SharedState } from '../realEstate/core/sharedState'
52 import { Phones } from '../realEstate/constants/phoneNumbers'
53 import { sendShowamiCalendarLink } from '../calendar/zapierCalendar'
54 import { getPropertyByZpid } from '../shared/supabase/properties'
55 import { getZpidFromAddress } from '../serper_ops/ser'
56
57 /**
58 * Parameters for initiating a showing schedule
59 */
60 export type InitiateScheduleShowingParams = {
61 /** Address of the property to show */
62 address: string;
63 /** Preferred showing time */
64 showingTime: string;
65 /** Client's name */
66 clientName: string;
67 /** Client's email address */
68 email: string;
69 /** Phone number of the message sender */
70 senderPhoneNumber: string;
71 /** Last message received (optional) */
72 lastMessage?: string;
73 /** Whether this is a test run */
74 isTest?: boolean;
75 /** Optional override for agent name */
76 overrideAgentName?: string;
77 /** Optional override for agent phone number */
78 overrideAgentNumber?: string;
79 };
80
81 /**
82 * Parameters for logging a property of interest
83 */
84 export type LogPropertyOfInterestParams = {
85 /** Address of the property */
86 address: string;
87 /** Whether to introduce self to agent */
88 introSelfToAgent?: boolean;
89 /** Detailed property information */
90 propertyDetails?: PropertyDetails;
91 /** Optional override for agent name */
92 overrideAgentName?: string;
93 /** Optional override for agent phone number */
94 overrideAgentNumber?: string;
95 };
96
97 /**
98 * Result of processing client information
99 */
100 type ProcessClientInfoResult = {
101 /** Client's phone number */
102 clientPhone: string | undefined;
103 /** Client's email address */
104 email: string;
105 /** Override agent name if specified */
106 overrideAgentName: string;
107 /** Override agent number if specified */
108 overrideAgentNumber: string;
109 };
110
111 /**
112 * BuyerFlow class handles interactions with homebuyers via text messages.
113 * It uses AI to understand and respond to buyer queries about properties,
114 * showings, market conditions, and other real estate needs. The class
115 * integrates with various services to provide comprehensive assistance:
116 *
117 * - Property searches and information retrieval
118 * - Scheduling property showings
119 * - Market analysis and comparisons
120 * - External data integration (MLS, Zillow, etc.)
121 *
122 * The goal is to provide an AI-powered experience that scales real estate
123 * operations while maintaining high quality service for homebuyers.
124 */
125
126 export class BuyerFlow implements IBaseFlow {
127 public oa!: ClientAssistantCreator
128 public showingService: ShowingService
129 public propertyService: PropertyService
130 public externalService: ExternalService
131 public tools: AssistantTool[] = CLIENT_TALKER_TOOLS
132 public adminTools: AssistantTool[] = ADMIN_CLIENT_TALKER_TOOLS
133 public sharedState: SharedState
134
135 public constructor(sharedState: SharedState) {
136 this.sharedState = sharedState
137 this.showingService = new ShowingService(this.sharedState)
138 this.propertyService = new PropertyService(this.sharedState)
139 this.externalService = new ExternalService()
140 }
141
142 public static async create(sharedState: SharedState): Promise<BuyerFlow> {
143 const instance = new BuyerFlow(sharedState)
144 return instance
145 }
146
147 async convertShortAddressToFullAddress(
148 address: string,
149 senderPhoneNumber: string
150 ): Promise<{ fullAddress: string; isExistingProperty: boolean }> {
151 const longAddress = await convertShortAddressToFullAddress(address, senderPhoneNumber)
152 this.sharedState.addressesReferenced.push(longAddress.fullAddress)
153 return longAddress
154 }
155
156 // Keep buyer-specific methods
157 async pullRealtorMessages(agentNumber: string): Promise<string> {
158 // Get the realtor's messages from the thread
159 const messages =
160 await this.sharedState.messagingService.dbManager.getLastMessages({
161 userPhone: agentNumber
162 })
163
164 // Format messages as XML using common formatter
165 return formatMessagesAsXml(messages, 'realtor')
166 }
167
168 /**
169 * Processes client information from an admin message to identify the client
170 * This method handles extracting client phone numbers, email addresses,
171 * and agent override information from admin messages
172 *
173 * @param senderPhoneNumber - The phone number of the message sender
174 * @param lastMessage - The last message received containing client info
175 * @param clientName - The client's name if provided
176 * @param initialEmail - The client's email if provided
177 * @param isTest - Whether this is a test run
178 * @param initialOverrideAgentName - Initial override agent name if provided
179 * @param initialOverrideAgentNumber - Initial override agent number if provided
180 * @returns Object with identified client phone, email, and agent override info
181 */
182 private async processProvidedClientInfo({
183 senderPhoneNumber,
184 lastMessage,
185 clientName,
186 initialEmail,
187 isTest = false,
188 initialOverrideAgentName = 'None',
189 initialOverrideAgentNumber = 'None'
190 }: {
191 senderPhoneNumber: string;
192 lastMessage?: string;
193 clientName: string;
194 initialEmail: string;
195 isTest?: boolean;
196 initialOverrideAgentName?: string;
197 initialOverrideAgentNumber?: string;
198 }): Promise<ProcessClientInfoResult> {
199 let clientPhone: string | undefined;
200 let email = initialEmail;
201 let overrideAgentName = initialOverrideAgentName;
202 let overrideAgentNumber = initialOverrideAgentNumber;
203
204 // For non-admin senders, they are the client
205 if (!Phones.isAdmin(senderPhoneNumber)) {
206 clientPhone = senderPhoneNumber;
207 return { clientPhone, email, overrideAgentName, overrideAgentNumber };
208 }
209
210 // Admin sender - need to extract client info from message
211 if (lastMessage) {
212 if (isTest) {
213 // For test cases, extract phone numbers starting with '+' until non-alphanumeric char
214 const testPhoneMatch = lastMessage.match(/\+[a-zA-Z0-9_]+/)
215 clientPhone = testPhoneMatch ? testPhoneMatch[0] : undefined
216 } else {
217 // For production, extract regular phone numbers
218 const regexMatch = lastMessage.match(/\d{10,11}/)
219 const processedString = regexMatch ? regexMatch[0] : ''
220 clientPhone = extractPhoneNumber(processedString) || undefined
221
222 // Check if message contains "override agent" phrase
223 if (
224 overrideAgentName === 'None' &&
225 overrideAgentNumber === 'None' &&
226 lastMessage.toLowerCase().includes('override agent')
227 ) {
228 // Extract all phone numbers from the message
229 const phoneNumbers = extractAllPhoneNumbers(lastMessage)
230
231 // If we have at least 2 phone numbers, use the second one as override agent number
232 if (phoneNumbers.length >= 2) {
233 overrideAgentNumber = phoneNumbers[1]
234
235 // Use Anthropic to extract the agent name
236 const prompt = `Extract only the name of the override agent from this text. Return just the name, nothing else: "${lastMessage}"`
237 overrideAgentName = await callAnthropicModel({
238 input: prompt,
239 timeoutMs: 60000,
240 cost_description: "buyer_flow_override_agent_name"
241 })
242
243 console.log(
244 `Override agent detected - Name: ${overrideAgentName}, Number: ${overrideAgentNumber}`
245 )
246 }
247 }
248 }
249
250 // If no phone number found, try to extract email
251 if (!clientPhone) {
252 const extractedEmail = extractEmailAddress(lastMessage)
253
254 if (extractedEmail) {
255 // Look up user by email
256 const emailUser = await getClientByEmail(extractedEmail)
257
258 if (emailUser) {
259 clientPhone = emailUser.phone_number
260 // Use email if provided in function params, or extracted one
261 email = email || extractedEmail
262 }
263 }
264 }
265
266 // If still no phone or email, try to find by name
267 if (!clientPhone && clientName !== 'None') {
268 // If no phone number or email found, try to find user by name
269 const nameParts = clientName.split(' ')
270 const firstName = nameParts[0].trim()
271 const lastName =
272 nameParts.length > 1 ? nameParts.slice(1).join(' ').trim() : ''
273
274 const matchingUsers = await getClientsByName(
275 firstName,
276 lastName ? lastName : undefined
277 )
278
279 if (!matchingUsers || matchingUsers.length === 0) {
280 if (!isTest) {
281 await notifyAdmins(
282 senderPhoneNumber,
283 `No user found with name: ${clientName}`,
284 '/api/inbound'
285 )
286 }
287 throw new Error(`No user found with name: ${clientName}`)
288 } else if (matchingUsers.length > 1 && !lastName) {
289 // Multiple users with same first name and no last name provided
290 await notifyAdmins(
291 senderPhoneNumber,
292 `Multiple users found with first name "${firstName}". Please schedule the showing again with both first and last name.`,
293 '/api/inbound'
294 )
295 throw new Error(`Multiple users found with first name: ${firstName}`)
296 } else {
297 // Single user found or exact match with full name
298 clientPhone = matchingUsers[0].phone_number
299 }
300 }
301 }
302
303 return { clientPhone, email, overrideAgentName, overrideAgentNumber };
304 }
305
306 /**
307 * Entry point for scheduling a showing
308 * This method handles pre-processing of the address and extracting client information
309 * before delegating to the showing service
310 * @param params Object containing all parameters for scheduling a showing
311 */
312 async initiateScheduleShowing(params: InitiateScheduleShowingParams): Promise<string> { // TODO: if the showing has already been scheduled, then move straight into the negotiate function.
313 const {
314 address,
315 showingTime,
316 clientName,
317 email: initialEmail,
318 senderPhoneNumber,
319 lastMessage,
320 isTest = false,
321 overrideAgentName: initialOverrideAgentName = 'None',
322 overrideAgentNumber: initialOverrideAgentNumber = 'None'
323 } = params
324 // TODO: if you've already scheduled a showing, then move straight into the negotiate function.
325 // Debug shared state
326 console.log('BuyerFlow.initiateScheduleShowing sharedState:', {
327 hasUser: !!this.sharedState.client,
328 clientNumber: this.sharedState.client?.phone_number,
329 senderPhoneNumber
330 });
331
332 // Process client information to identify the client
333 const { clientPhone, email, overrideAgentName, overrideAgentNumber } =
334 await this.processProvidedClientInfo({
335 senderPhoneNumber,
336 lastMessage,
337 clientName,
338 initialEmail,
339 isTest,
340 initialOverrideAgentName,
341 initialOverrideAgentNumber
342 });
343
344 if (!clientPhone) {
345 throw new Error('Could not determine client phone number')
346 }
347
348 // Handle addresses with a dash
349 let processedAddress = address
350 const dashIndex = address.indexOf('-')
351 if (dashIndex !== -1) {
352 const spaceIndex = address.indexOf(' ', dashIndex)
353 if (spaceIndex !== -1) {
354 processedAddress =
355 address.substring(0, dashIndex) + address.substring(spaceIndex)
356 }
357 }
358 const isShorthand = await callAnthropicModel({
359 input: `Determine if the address ${processedAddress} is a shorthand address (123 main) vs a full address (123 main st, San Francisco, CA 94100). If it is shorthand, return "true". If it is not, return "false". Do not return any other text besides "true" or "false".`,
360 timeoutMs: 60000,
361 cost_description: "buyer_flow_is_shorthand_address"
362 })
363 if (isShorthand === 'true') {
364 const { fullAddress, isExistingProperty } =
365 await convertShortAddressToFullAddress(
366 processedAddress,
367 senderPhoneNumber
368 )
369 processedAddress = fullAddress
370 } else {
371 this.sharedState.addressesReferenced.push(processedAddress)
372 }
373
374 // if it is, try to convert it to a full address using the other addresses in the mr_properties for this user
375 // if that address can't be found, then use the perplexity api to try and find its zillow link. from its zillow link, pull its property details
376 let propertyDetails =
377 await this.propertyService.getAllPropertyDetails(processedAddress)
378 // Check if the showing has already been scheduled
379 const showingResult = await checkIfShowingAlreadyScheduled(propertyDetails.zpid!, clientPhone)
380
381 // If showing is already scheduled, redirect to negotiation
382 if (showingResult.isScheduled) {
383 // Prepare message with showing time information
384 let timeInfoMsg = `New showing time requested by client: ${showingTime}\n\n`;
385 if (showingResult.agentProposedTime && showingResult.clientProposedTime) {
386 // Both times exist
387 timeInfoMsg = `(agent previously proposed: ${showingResult.agentProposedTime}, client previously proposed: ${showingResult.clientProposedTime}) \n\n If these are the same time, confirm the showing with the client with the confirmShowingWithAgent function. If these are not the same time, negotiate the new time with the client with the negotiateShowingTimeWithAgent function.`;
388 } else if (showingResult.agentProposedTime) {
389 // Only agent time exists
390 timeInfoMsg = ` (previously scheduled by agent for ${showingResult.agentProposedTime})\n\n If this is the same time as the new request, confirm the showing with the client with the confirmShowingWithAgent function. If this is not the same time as the new request, negotiate the new time with the client with the negotiateShowingTimeWithAgent function.`;
391 } else if (showingResult.clientProposedTime) {
392 // Only client time exists
393 timeInfoMsg = ` (previously requested by client for ${showingResult.clientProposedTime})\n\n If this is the same time as the new request, confirm the showing with the client with<response clipped><NOTE>Due to the max output limit, only part of this file has been shown to you. You should retry this tool after you have searched inside the file with `grep -n` in order to find the line numbers of what you are looking for.</NOTE>
16:43:04 - openhands:INFO: agent_controller.py:970 - [Agent Controller 762916a8-4fb4-48c2-a3b7-b0917a1cf171-319e8e72befff0c3] Cleared pending action after 0.03s: FileReadAction (id=15)
16:43:04 - openhands:INFO: agent_controller.py:416 - [Agent Controller 762916a8-4fb4-48c2-a3b7-b0917a1cf171-319e8e72befff0c3] Stepping agent after event: FileReadObservation
[Agent Controller 762916a8-4fb4-48c2-a3b7-b0917a1cf171-319e8e72befff0c3] LEVEL 0 LOCAL STEP 6 GLOBAL STEP 6
16:43:10 - openhands:INFO: agent_controller.py:979 - [Agent Controller 762916a8-4fb4-48c2-a3b7-b0917a1cf171-319e8e72befff0c3] Set pending action: CmdRunAction (id=-1)
16:43:10 - openhands:INFO: resolve_issue.py:233 - **CmdRunAction (source=EventSource.AGENT, is_input=False)**
THOUGHT: Let me search for the relevant functions in the buyer flow and realtor flow files.
COMMAND:
grep -n "initiateScheduleShowing\|negotiateShowingTime\|confirmShowingTime" /workspace/lib/services/buyer_flow/buyer_flow.ts /workspace/lib/services/realtor_flow/realtor_flow.ts
16:43:10 - openhands:INFO: resolve_issue.py:233 - **CmdOutputObservation (source=EventSource.AGENT, exit code=0, metadata={
"exit_code": 0,
"pid": -1,
"username": "openhands",
"hostname": "aae885bd2acb",
"working_dir": "/workspace",
"py_interpreter_path": "/openhands/poetry/openhands-ai-5O4_aCHf-py3.12/bin/python",
"prefix": "",
"suffix": "\n[The command completed with exit code 0.]"
})**
--BEGIN AGENT OBSERVATION--
/workspace/lib/services/buyer_flow/buyer_flow.ts:312: async initiateScheduleShowing(params: InitiateScheduleShowingParams): Promise<string> { // TODO: if the showing has already been scheduled, then move straight into the negotiate function.
/workspace/lib/services/buyer_flow/buyer_flow.ts:326: console.log('BuyerFlow.initiateScheduleShowing sharedState:', {
/workspace/lib/services/buyer_flow/buyer_flow.ts:387: timeInfoMsg = `(agent previously proposed: ${showingResult.agentProposedTime}, client previously proposed: ${showingResult.clientProposedTime}) \n\n If these are the same time, confirm the showing with the client with the confirmShowingWithAgent function. If these are not the same time, negotiate the new time with the client with the negotiateShowingTimeWithAgent function.`;
/workspace/lib/services/buyer_flow/buyer_flow.ts:390: timeInfoMsg = ` (previously scheduled by agent for ${showingResult.agentProposedTime})\n\n If this is the same time as the new request, confirm the showing with the client with the confirmShowingWithAgent function. If this is not the same time as the new request, negotiate the new time with the client with the negotiateShowingTimeWithAgent function.`;
/workspace/lib/services/buyer_flow/buyer_flow.ts:393: timeInfoMsg = ` (previously requested by client for ${showingResult.clientProposedTime})\n\n If this is the same time as the new request, confirm the showing with the client with the confirmShowingWithAgent function. If this is not the same time as the new request, negotiate the new time with the client with the negotiateShowingTimeWithAgent function.`;
/workspace/lib/services/buyer_flow/buyer_flow.ts:503: return await this.showingService.initiateScheduleShowing({
/workspace/lib/services/buyer_flow/buyer_flow.ts:693: async negotiateShowingTimeWithAgent( // TODO: if this is a showami, find the showami showing agent and text them
/workspace/lib/services/realtor_flow/realtor_flow.ts:59: async negotiateShowingTimeWithClient({
[The command completed with exit code 0.]
[Current working directory: /workspace]
[Python interpreter: /openhands/poetry/openhands-ai-5O4_aCHf-py3.12/bin/python]
[Command finished with exit code 0]
--END AGENT OBSERVATION--
16:43:10 - openhands:INFO: agent_controller.py:970 - [Agent Controller 762916a8-4fb4-48c2-a3b7-b0917a1cf171-319e8e72befff0c3] Cleared pending action after 0.64s: CmdRunAction (id=17)
16:43:10 - openhands:INFO: agent_controller.py:416 - [Agent Controller 762916a8-4fb4-48c2-a3b7-b0917a1cf171-319e8e72befff0c3] Stepping agent after event: CmdOutputObservation
[Agent Controller 762916a8-4fb4-48c2-a3b7-b0917a1cf171-319e8e72befff0c3] LEVEL 0 LOCAL STEP 7 GLOBAL STEP 7
16:43:13 - openhands:INFO: agent_controller.py:979 - [Agent Controller 762916a8-4fb4-48c2-a3b7-b0917a1cf171-319e8e72befff0c3] Set pending action: FileReadAction (id=-1)
16:43:13 - openhands:INFO: resolve_issue.py:233 - FileReadAction(path='/workspace/lib/services/buyer_flow/showing.ts', start=0, end=-1, thought='Let me check the showing service implementation to understand how the tour scheduling works.', action=<ActionType.READ: 'read'>, security_risk=None, impl_source=<FileReadSource.OH_ACI: 'oh_aci'>, view_range=None)
16:43:13 - openhands:INFO: resolve_issue.py:233 - [Read from /workspace/lib/services/buyer_flow/showing.ts is successful.]
Here's the result of running `cat -n` on /workspace/lib/services/buyer_flow/showing.ts:
1 import { mr_properties_Row, PropertyDetails } from '../../types/property'
2 import { ListingAgentManager } from '../realEstate/core/listingAgentManager'
3 import {
4 supabaseClient,
5 getClientByPhone,
6 getLatestMessage
7 } from '../shared/supabaseClient'
8 import { getShorthandAddress } from '@/lib/utils/getShorthandAddress'
9 import { parseShowingTime } from '@/lib/utils/parseShowingTime'
10 import { scheduleFollowUpTexts } from '../realEstate/core/followUp'
11 import { Phones } from '../realEstate/constants/phoneNumbers'
12 import dayjs from 'dayjs'
13 import timezone from 'dayjs/plugin/timezone'
14 import utc from 'dayjs/plugin/utc'
15 import { MR_ListingAgent, MR_User } from '@/lib/types/sbPeople'
16 import { mr_messages } from '@/lib/types/messages'
17 import { SharedState } from '../realEstate/core/sharedState'
18 import { ShowamiScheduler } from '../calendar/showamiScheduler'
19 import { getAllPropertyDetails } from '../zillow_ops/zil'
20 import { get_info_by_hash } from '../../assistantCache';
21
22 // Extend dayjs with timezone plugin
23 dayjs.extend(utc)
24 dayjs.extend(timezone)
25
26 /**
27 * Checks if a showing has already been scheduled for a user and property
28 * @param address The property address to check
29 * @param phoneNumber The client's phone number
30 * @returns Object indicating if a showing is scheduled and scheduled times if they exist
31 */
32 export const checkIfShowingAlreadyScheduled = async (
33 zpid: string,
34 phoneNumber: string
35 ): Promise<{
36 isScheduled: boolean;
37 scheduledTime?: string;
38 clientProposedTime?: string;
39 agentProposedTime?: string;
40 }> => {
41 try {
42 // First find the user by phone number to get the user_id
43 const client = await getClientByPhone(phoneNumber)
44
45 if (!client || !client.user_id) {
46 // If user doesn't exist, there can't be a scheduled showing
47 return { isScheduled: false };
48 }
49
50 // Query mr_properties to see if a property with this address exists for this user
51 const { data: properties, error } = await supabaseClient
52 .from('mr_properties')
53 .select('*')
54 .eq('mr_users_id', client.user_id)
55 .eq('zpid', zpid)
56 .overrideTypes<mr_properties_Row[], { merge: false }>()
57
58 if (error) {
59 console.error('Error checking for scheduled showing:', error)
60 return { isScheduled: false };
61 }
62
63 // Look for scheduled showings
64 const scheduledProperty = properties.find(property =>
65 property.client_proposed_showing_time !== null ||
66 property.agent_proposed_showing_time !== null
67 );
68
69 if (!scheduledProperty) {
70 return { isScheduled: false };
71 }
72
73 // Format each time if they exist
74 let clientProposedTime: string | undefined = undefined;
75 let agentProposedTime: string | undefined = undefined;
76
77 if (scheduledProperty.client_proposed_showing_time) {
78 clientProposedTime = dayjs(scheduledProperty.client_proposed_showing_time)
79 .tz('America/Los_Angeles', true)
80 .format('YYYY-MM-DD HH:mm');
81 }
82
83 if (scheduledProperty.agent_proposed_showing_time) {
84 agentProposedTime = dayjs(scheduledProperty.agent_proposed_showing_time)
85 .tz('America/Los_Angeles', true)
86 .format('YYYY-MM-DD HH:mm');
87 }
88
89 // Use agent time if available for the main scheduledTime, otherwise use client time
90 const scheduledTime = agentProposedTime || clientProposedTime;
91
92 return {
93 isScheduled: true,
94 scheduledTime,
95 clientProposedTime,
96 agentProposedTime
97 };
98 } catch (error) {
99 console.error('Error in checkIfShowingAlreadyScheduled:', error)
100 return { isScheduled: false };
101 }
102 }
103
104 /**
105 * Generates a showing request message to send to listing agents
106 * @param options Options for generating the showing request message
107 * @returns Formatted showing request message
108 */
109 export const generateShowingMessageToListingAgent = async (options: {
110 listingAgentName: string;
111 cleanAddress: string;
112 formattedTime: string;
113 listingAgentPhone: string;
114 }): Promise<string> => {
115 const { listingAgentName, cleanAddress, formattedTime, listingAgentPhone } = options;
116
117 const latestMessageResult = await getLatestMessage({ phone: listingAgentPhone })
118 const latestMessage = Array.isArray(latestMessageResult) && latestMessageResult.length > 0 ? latestMessageResult[0] : null
119
120 const isFirstTime = !latestMessage
121 const intro = isFirstTime
122 ? `Hey ${listingAgentName.split(' ')[0]}, Raffi Isanians at Kingston Vale Realty. `
123 : ''
124
125 return [
126 intro,
127 `Have a client interested in your ${cleanAddress} listing.`,
128 `Any chance they can come by and see it ${formattedTime}?`,
129 'Any showing instructions / any additional context?'
130 ]
131 .filter(Boolean)
132 .join(' ')
133 }
134
135 /**
136 * Generates a showing confirmation message to send to clients
137 * @param options Options for generating the client confirmation message
138 * @returns Formatted confirmation message for client
139 */
140 export const generateShowingMessageToClient = async (options: {
141 cleanAddress: string;
142 clientPhone: string;
143 formattedTime?: string;
144 firstName?: string;
145 }): Promise<string> => {
146 const { cleanAddress, clientPhone, formattedTime, firstName } = options;
147
148 const { data: existingMessages } = await supabaseClient
149 .from('mr_messages')
150 .select('*')
151 .or(
152 `sender_phone_number.eq.${clientPhone},receiver_phone_number.eq.${clientPhone}`
153 )
154 .neq('status', 'draft')
155 .limit(1)
156 .overrideTypes<mr_messages[], { merge: false }>()
157
158 const isFirstTime = !existingMessages || existingMessages.length === 0
159 const greeting = firstName ? `Hi ${firstName}, ` : 'Hey, '
160 const intro = isFirstTime
161 ? `${greeting}I'm Raffi Isanians, your Zillow Premier Agent Realtor you scheduled a home tour with. `
162 : ''
163
164 const timeMessage = formattedTime
165 ? `to arrange a tour for ${formattedTime}`
166 : 'to arrange a tour'
167
168 return formattedTime
169 ? `${intro}I've contacted the seller for ${cleanAddress} ${timeMessage}. I'll let you know once they confirm the appointment.`
170 : `${intro}I'd love to show you ${cleanAddress}. When would you like to go see it?`
171 }
172
173 /**
174 * Listing agent scheduler for property showings
175 */
176 class ListingAgentScheduler {
177 private sharedState: SharedState
178 private listingAgentManager: ListingAgentManager
179 private RAFFI_PHOTO =
180 'https://media.marketreactor.com/images/mr/raffi_headshot.jpg'
181
182 constructor(sharedState: SharedState) {
183 this.sharedState = sharedState
184 this.listingAgentManager = new ListingAgentManager()
185 }
186
187 /**
188 * Schedule showing with regular agent communication
189 * @param options Options for scheduling a showing with a listing agent
190 * @returns Result message
191 */
192 async scheduleShowing(options: {
193 address: string;
194 showingTime: string;
195 propertyDetails: PropertyDetails;
196 clientName: string;
197 clientPhone: string;
198 isShowami?: boolean;
199 email?: string;
200 isTest?: boolean;
201 overrideListingAgentName?: string;
202 overrideListingAgentNumber?: string;
203 }): Promise<string> {
204 const {
205 address,
206 showingTime,
207 propertyDetails,
208 clientName,
209 clientPhone,
210 isShowami = false,
211 email,
212 isTest = false,
213 overrideListingAgentName = 'None',
214 overrideListingAgentNumber = 'None'
215 } = options;
216
217 try {
218 // Debug shared state access in ListingAgentScheduler
219 console.log('ListingAgentScheduler.scheduleShowing - sharedState:', {
220 hasUser: !!this.sharedState.client,
221 clientNumber: this.sharedState.client?.phone_number,
222 clientPhone
223 });
224
225 // Then check/create user record
226 const existingUser = await getClientByPhone(clientPhone)
227
228 const cleanAddress = address.replace(', USA', '')
229 const shorthandAddress = await getShorthandAddress(cleanAddress)
230
231 // Use override agent name if provided, otherwise use property details
232 const listingAgentName =
233 overrideListingAgentName !== 'None'
234 ? overrideListingAgentName
235 : propertyDetails.attributionInfo?.agentName || 'Unknown Listing Agent'
236
237 // Handle user data differently for new vs existing users
238 let userResult
239 if (existingUser) {
240 // Update existing user
241 userResult = await supabaseClient
242 .from('mr_users')
243 .update({ current_property: address })
244 .eq('phone_number', clientPhone)
245 .select()
246 .overrideTypes<MR_User[], { merge: false }>()
247 } else {
248 // Create new user without previously_texted field
249 const userData = {
250 current_property: address,
251 preferred_address: address,
252 first_name:
253 clientName !== 'None' ? clientName.split(' ')[0].trim() : 'Unknown',
254 last_name:
255 clientName !== 'None'
256 ? clientName.split(' ').slice(1).join(' ').trim()
257 : '',
258 phone_number: clientPhone,
259 do_not_text: false,
260 ...(email && { email })
261 }
262
263 userResult = await supabaseClient
264 .from('mr_users')
265 .insert(userData)
266 .select()
267 .overrideTypes<MR_User[], { merge: false }>()
268 }
269
270 if (!userResult.data?.[0]?.user_id) {
271 throw new Error('Failed to create or retrieve user record')
272 }
273
274 // Validate showing time
275 let formattedTime = ''
276 let parsedTime: dayjs.Dayjs | null = null
277 let timeError: string | null = null
278
279 const result = await parseShowingTime(showingTime)
280 parsedTime = result.parsedTime // this is the dayjs object time thing
281 formattedTime = result.formattedTime || '' // this is the nice english time to put into a sentence
282 timeError = result.error
283
284 if (timeError || !formattedTime || !parsedTime) {
285 formattedTime = ''
286 }
287
288 if (!propertyDetails || propertyDetails.homeStatus !== 'FOR_SALE') {
289 this.sharedState.messagingService.createDraft({
290 sendToPhone: clientPhone,
291 content: `Hi ${clientName}, this is Raffi Isanians, your Zillow Premier Agent. I saw that you just scheduled a showing for ${address}, but that property is not currently for sale. What would you like to do?`
292 })
293 return `This property at ${address} is not for sale`
294 }
295
296 // Create or update listing agent record
297 let listingAgent: MR_ListingAgent | null
298
299 // Use override agent information if provided
300 if (overrideListingAgentName !== 'None' && overrideListingAgentNumber !== 'None') {
301 listingAgent = await this.listingAgentManager.addAgent(
302 propertyDetails,
303 userResult.data[0],
304 overrideListingAgentName,
305 overrideListingAgentNumber
306 )
307 } else {
308 // Use the normal listing agent lookup process
309 listingAgent = await this.listingAgentManager.addAgent(
310 propertyDetails,
311 userResult.data[0]
312 )
313 }
314
315 if (!listingAgent?.phone_number) {
316 console.error('Could not get listing agent phone number for property:', address)
317 // TODO: Send error message to admin?
318 return "Could not find listing agent contact info."
319 }
320
321 // Create property record and get MLS number
322 const zpid = await this.listingAgentManager.addProperty({
323 propertyDetails,
324 mr_user: userResult.data[0],
325 agent: listingAgent,
326 showingTime: parsedTime?.toDate(),
327 isShowami,
328 isTest
329 })
330
331 console.log('zpid', zpid)
332 if (isNaN(Number(zpid)) && !zpid.startsWith('test_')) {
333 throw new Error(
334 'Invalid zpid number. Something has gone wrong with the zpid number retrieval.'
335 )
336 }
337
338 // Get MLS number once
339 const mlsNumber =
340 propertyDetails.mlsid || propertyDetails?.attributionInfo?.mlsId
341
342 // First update the user record with the ZPID
343 const userUpdateResult = await supabaseClient
344 .from('mr_users')
345 .update({
346 current_property: address,
347 current_property_mls: mlsNumber,
348 current_property_zpid: zpid,
349 current_property_agent_phone: listingAgent.phone_number
350 })
351 .eq('user_id', userResult.data[0].user_id)
352
353 if (userUpdateResult.error) throw userUpdateResult.error
354
355 // Then update the agent record with the same ZPID
356 const listingAgentUpdateResult = await supabaseClient
357 .from('mr_listingagents')
358 .update({
359 current_property: address,
360 current_property_mls: mlsNumber,
361 current_property_zpid: zpid,
362 current_mr_users_phone_number: clientPhone
363 })
364 .eq('agent_id', listingAgent.agent_id)
365
366 if (!listingAgent?.agent_id) {
367 console.error('Listing agent object missing agent_id for update:', listingAgent)
368 throw new Error('Cannot update listing agent without agent_id')
369 }
370
371 if (listingAgentUpdateResult.error) throw listingAgentUpdateResult.error
372
373 // Prepare client's first name if available
374 const firstName =
375 clientName !== 'None' ? clientName.split(' ')[0].trim() : ''
376
377 // Send messages
378 const clientMessage = await generateShowingMessageToClient({
379 cleanAddress,
380 clientPhone,
381 formattedTime,
382 firstName
383 })
384
385 // Use shorthand address with listing agent to sound less ai-ish
386 const listingAgentMessage = await generateShowingMessageToListingAgent({
387 listingAgentName,
388 cleanAddress: shorthandAddress,
389 formattedTime,
390 listingAgentPhone: listingAgent.phone_number!
391 })
392
393 await Promise.all([
394 this.sharedState.messagingService.createDraft({
395 sendToPhone: clientPhone,
396 content: clientMessage
397 }),
398 this.sharedState.messagingService.createDraft({
399 sendToPhone: listingAgent.phone_number!,
400 content: listingAgentMessage,
401 imageUrl: this.RAFFI_PHOTO
402 })
403 ])
404
405 if (!isTest) {
406 // Schedule follow-up texts for both agent and client
407 try {
408 if (!this.sharedState.isTest) {
409 await scheduleFollowUpTexts([
410 {
411 delay: '2h',
412 message: `follow up ${listingAgent.phone_number} [2h] Ask again if this listing agent can do a showing for ${address} at ${formattedTime}.`
413 }
414 ])
415 }
416 } catch (err) {
417 console.error('Error scheduling follow-up texts:', err)
418 }
419 }
420
421 return "Showing messages sent to agent and client. This doesn't mean the showing is confirmed yet."
422 } catch (error) {
423 console.error('Error in initiateScheduleShowing:', error)
424 throw error
425 }
426 }
427 }
428
429 /**
430 * Showami third-party service scheduler for property showings
431 */
432 class ShowamiSchedulingService {
433 private sharedState: SharedState
434 private showamiApiKey: string
435 private showamiCredentials: { email: string; password: string }
436
437 constructor(
438 sharedState: SharedState,
439 apiKey: string = process.env.SHOWAMI_API_KEY || '',
440 credentials = {
441 email: process.env.SHOWAMI_EMAIL || '',
442 password: process.env.SHOWAMI_PASSWORD || ''
443 }
444 ) {
445 this.sharedState = sharedState
446 this.showamiApiKey = apiKey
447 this.showamiCredentials = credentials
448 }
449
450 /**
451 * Schedule showing with Showami third-party showing service
452 * @param options Options for scheduling a showing with Showami
453 * @returns Result message
454 */
455 async scheduleShowamiShowing(options: {
456 address: string;
457 showingTime: string;
458 propertyDetails: PropertyDetails;
459 clientName: string;
460 clientPhone: string;
461 email?: string;
462 isTest?: boolean;
463 }): Promise<string> {
464 const {
465 address,
466 showingTime,
467 propertyDetails,
468 clientName,
469 clientPhone,
470 email,
471 isTest = false
472 } = options;
473
474 try {
475 // Use same time parsing logic as regular scheduler
476 let formattedTime = ''
477 let parse<response clipped><NOTE>Due to the max output limit, only part of this file has been shown to you. You should retry this tool after you have searched inside the file with `grep -n` in order to find the line numbers of what you are looking for.</NOTE>
16:43:13 - openhands:INFO: agent_controller.py:970 - [Agent Controller 762916a8-4fb4-48c2-a3b7-b0917a1cf171-319e8e72befff0c3] Cleared pending action after 0.03s: FileReadAction (id=19)
16:43:13 - openhands:INFO: agent_controller.py:416 - [Agent Controller 762916a8-4fb4-48c2-a3b7-b0917a1cf171-319e8e72befff0c3] Stepping agent after event: FileReadObservation
[Agent Controller 762916a8-4fb4-48c2-a3b7-b0917a1cf171-319e8e72befff0c3] LEVEL 0 LOCAL STEP 8 GLOBAL STEP 8
16:43:17 - openhands:INFO: agent_controller.py:979 - [Agent Controller 762916a8-4fb4-48c2-a3b7-b0917a1cf171-319e8e72befff0c3] Set pending action: CmdRunAction (id=-1)
16:43:17 - openhands:INFO: resolve_issue.py:233 - **CmdRunAction (source=EventSource.AGENT, is_input=False)**
THOUGHT: Let me search for the ShowingService class implementation in the showing.ts file.
COMMAND:
grep -n "export class ShowingService" -A 10 /workspace/lib/services/buyer_flow/showing.ts
16:43:18 - openhands:INFO: resolve_issue.py:233 - **CmdOutputObservation (source=EventSource.AGENT, exit code=0, metadata={
"exit_code": 0,
"pid": -1,
"username": "openhands",
"hostname": "aae885bd2acb",
"working_dir": "/workspace",
"py_interpreter_path": "/openhands/poetry/openhands-ai-5O4_aCHf-py3.12/bin/python",
"prefix": "",
"suffix": "\n[The command completed with exit code 0.]"
})**
--BEGIN AGENT OBSERVATION--
585:export class ShowingService {
586- private sharedState: SharedState
587- private listingAgentManager: ListingAgentManager
588- private regularScheduler: ListingAgentScheduler
589- private showamiScheduler: ShowamiSchedulingService
590-
591- // Reference to Raffi's photo for agent messages
592- public RAFFI_PHOTO =
593- 'https://media.marketreactor.com/images/mr/raffi_headshot.jpg'
594-
595- constructor(sharedState: SharedState) {
[The command completed with exit code 0.]
[Current working directory: /workspace]
[Python interpreter: /openhands/poetry/openhands-ai-5O4_aCHf-py3.12/bin/python]
[Command finished with exit code 0]
--END AGENT OBSERVATION--
16:43:18 - openhands:INFO: agent_controller.py:970 - [Agent Controller 762916a8-4fb4-48c2-a3b7-b0917a1cf171-319e8e72befff0c3] Cleared pending action after 0.64s: CmdRunAction (id=21)
16:43:18 - openhands:INFO: agent_controller.py:416 - [Agent Controller 762916a8-4fb4-48c2-a3b7-b0917a1cf171-319e8e72befff0c3] Stepping agent after event: CmdOutputObservation
[Agent Controller 762916a8-4fb4-48c2-a3b7-b0917a1cf171-319e8e72befff0c3] LEVEL 0 LOCAL STEP 9 GLOBAL STEP 9
16:43:22 - openhands:INFO: agent_controller.py:979 - [Agent Controller 762916a8-4fb4-48c2-a3b7-b0917a1cf171-319e8e72befff0c3] Set pending action: CmdRunAction (id=-1)
16:43:22 - openhands:INFO: resolve_issue.py:233 - **CmdRunAction (source=EventSource.AGENT, is_input=False)**
THOUGHT: Let me look at the ShowingService implementation to understand how the tour scheduling works.
COMMAND:
grep -n "initiateScheduleShowing" -A 20 /workspace/lib/services/buyer_flow/showing.ts
16:43:22 - openhands:INFO: resolve_issue.py:233 - **CmdOutputObservation (source=EventSource.AGENT, exit code=0, metadata={
"exit_code": 0,
"pid": -1,
"username": "openhands",
"hostname": "aae885bd2acb",
"working_dir": "/workspace",
"py_interpreter_path": "/openhands/poetry/openhands-ai-5O4_aCHf-py3.12/bin/python",
"prefix": "",
"suffix": "\n[The command completed with exit code 0.]"
})**
--BEGIN AGENT OBSERVATION--
423: console.error('Error in initiateScheduleShowing:', error)
424- throw error
425- }
426- }
427-}
428-
429-/**
430- * Showami third-party service scheduler for property showings
431- */
432-class ShowamiSchedulingService {
433- private sharedState: SharedState
434- private showamiApiKey: string
435- private showamiCredentials: { email: string; password: string }
436-
437- constructor(
438- sharedState: SharedState,
439- apiKey: string = process.env.SHOWAMI_API_KEY || '',
440- credentials = {
441- email: process.env.SHOWAMI_EMAIL || '',
442- password: process.env.SHOWAMI_PASSWORD || ''
443- }
--
780: const result = await this.initiateScheduleShowing({
781- address: property.address,
782- showingTime: formattedTourTime,
783- propertyDetails: property.details,
784- clientName: clientName,
785- clientPhone: clientPhone,
786- email: email,
787- isTest: isTest,
788- lastMessage: lastMessage,
789- senderPhoneNumber: senderPhoneNumber
790- })
791-
792- schedulingResults.push(`${property.address}: ${result}`)
793- } catch (error) {
794- schedulingResults.push(
795- `${property.address}: Failed to schedule - ${error instanceof Error ? error.message : String(error)}`
796- )
797- }
798- }
799-
800- // Create a summary message for the client
--
869: async initiateScheduleShowing(params: ShowingScheduleParams): Promise<string> {
870- const {
871- address,
872- showingTime,
873- propertyDetails,
874- clientName,
875- clientPhone,
876- email,
877- isTest = false,
878- lastMessage,
879- senderPhoneNumber,
880- isShowamiTour = false,
881- overrideListingAgentName = 'None',
882- overrideListingAgentNumber = 'None'
883- } = params;
884-
885- try {
886: // Debug shared state in ShowingService.initiateScheduleShowing
887: console.log('ShowingService.initiateScheduleShowing sharedState:', {
888- hasUser: !!this.sharedState.client,
889- user: this.sharedState.client ? {
890- id: this.sharedState.client.user_id,
891- phone: this.sharedState.client.phone_number
892- } : null,
893- clientNumber: this.sharedState.client?.phone_number,
894- clientPhone: clientPhone
895- });
896-
897- // Validate property is for sale
898- if (!propertyDetails || propertyDetails.homeStatus !== 'FOR_SALE') {
899- this.sharedState.messagingService.createDraft({
900- sendToPhone: clientPhone,
901- content: `Hi ${clientName}, this is Raffi Isanians, your Zillow Premier Agent. I saw that you just scheduled a showing for ${address}, but that property is not currently for sale. What would you like to do?`
902- })
903- return `This property at ${address} is not for sale`
904- }
905-
906- // Get user to determine scheduling method
907- const user = await getClientByPhone(clientPhone);
--
910: console.log('User lookup in initiateScheduleShowing:', {
911- clientPhone,
912- userFound: !!user,
913- userDetails: user ? {
914- id: user.user_id,
915- phone: user.phone_number,
916- name: user.first_name
917- } : null
918- });
919-
920- // Set user in sharedState if it's missing but we found one
921- if (!this.sharedState.client && user) {
922- console.log('Setting missing sharedState.user from findClientByPhone result');
923- this.sharedState.client = user;
924- }
925-
926- // Determine if we should use Showami or regular agent
927- const useShowami = isShowamiTour? true : await this.shouldUseShowami({
928- propertyDetails,
929- lastMessage,
930- senderPhoneNumber
--
990: console.error('Error in initiateScheduleShowing:', error)
991- throw error
992- }
993- }
994-}
[The command completed with exit code 0.]
[Current working directory: /workspace]
[Python interpreter: /openhands/poetry/openhands-ai-5O4_aCHf-py3.12/bin/python]
[Command finished with exit code 0]
--END AGENT OBSERVATION--
16:43:22 - openhands:INFO: agent_controller.py:970 - [Agent Controller 762916a8-4fb4-48c2-a3b7-b0917a1cf171-319e8e72befff0c3] Cleared pending action after 0.64s: CmdRunAction (id=23)
16:43:22 - openhands:INFO: agent_controller.py:416 - [Agent Controller 762916a8-4fb4-48c2-a3b7-b0917a1cf171-319e8e72befff0c3] Stepping agent after event: CmdOutputObservation
[Agent Controller 762916a8-4fb4-48c2-a3b7-b0917a1cf171-319e8e72befff0c3] LEVEL 0 LOCAL STEP 10 GLOBAL STEP 10
16:43:31 - openhands:INFO: agent_controller.py:979 - [Agent Controller 762916a8-4fb4-48c2-a3b7-b0917a1cf171-319e8e72befff0c3] Set pending action: FileReadAction (id=-1)
16:43:31 - openhands:INFO: resolve_issue.py:233 - FileReadAction(path='/workspace/lib/services/realtor_flow/realtor_flow.ts', start=0, end=-1, thought="Let me check the realtor flow implementation to understand how the tour process works when we're the listing agent.", action=<ActionType.READ: 'read'>, security_risk=None, impl_source=<FileReadSource.OH_ACI: 'oh_aci'>, view_range=None)
16:43:31 - openhands:INFO: resolve_issue.py:233 - [Read from /workspace/lib/services/realtor_flow/realtor_flow.ts is successful.]
Here's the result of running `cat -n` on /workspace/lib/services/realtor_flow/realtor_flow.ts:
1 import { RealtorAssistantCreator } from '../realEstate/openai_assistant_init/realtorAssistantCreator'
2 import { REALTOR_TALKER_TOOLS } from '../realEstate/configs/realtorTools'
3 import { AssistantTool } from '@/lib/types/openaiTypes'
4 import { IBaseFlow } from '@/lib/types/flow'
5 import { formatMessagesAsXml } from '../realEstate/core/messageFormatter'
6 import {
7 supabaseClient,
8 getClientByPhone,
9 getPropertyByZpid,
10 findPropertyByZpidAndAgentId
11 } from '@/lib/services/shared/supabaseClient'
12 import dayjs from '@/lib/utils/dates'
13 import {
14 scheduleFollowUpTexts,
15 scheduleFollowUpTextDates
16 } from '../realEstate/core/followUp'
17 import { SharedState } from '../realEstate/core/sharedState'
18 import { Phones } from '../realEstate/constants/phoneNumbers'
19 import { processAgentMessageForPropertyAccess } from '../realEstate/core/propertyAccessExtractor'
20 import { createCalendarEvent, sendShowamiCalendarLink } from '../calendar/zapierCalendar'
21
22 /**
23 * RealtorFlow handles interactions with real estate agents via text messages.
24 * It uses AI to understand and respond to agent queries about their clients,
25 * property showings, scheduling, and other client service needs.
26 *
27 * Key responsibilities:
28 * - Processes incoming messages from agents
29 * - Handles showing/tour scheduling requests
30 * - Manages client communications and updates
31 * - Provides property and market information to agents
32 *
33 * The goal is to streamline agent-client interactions by providing AI-powered
34 * assistance while maintaining high quality service standards.
35 */
36 export class RealtorFlow implements IBaseFlow {
37 public oa!: RealtorAssistantCreator
38 public tools: AssistantTool[] = REALTOR_TALKER_TOOLS
39 public sharedState: SharedState
40
41 public constructor(sharedState: SharedState) {
42 this.sharedState = sharedState
43 }
44
45 public static async create(sharedState: SharedState): Promise<RealtorFlow> {
46 const instance = new RealtorFlow(sharedState)
47 return instance
48 }
49
50 async pullClientMessages(clientNumber: string): Promise<string> {
51 const messages =
52 await this.sharedState.messagingService.dbManager.getLastMessages({
53 userPhone: clientNumber
54 })
55
56 return formatMessagesAsXml(messages, 'client')
57 }
58
59 async negotiateShowingTimeWithClient({
60 message,
61 clientNumber,
62 formattedTime
63 }: {
64 message: string,
65 clientNumber: string,
66 formattedTime: string
67 }): Promise<string> {
68 if (Phones.isAdmin(clientNumber)) {
69 throw new Error(
70 'this is an admin not a client. this number is only to be texted for testing purposes. Failed to find correctClientNumber'
71 )
72 }
73
74 const proposedTime = dayjs(formattedTime).tz('America/Los_Angeles', true)
75 if (!proposedTime.isValid()) {
76 throw new Error('Invalid time format. Use YYYY-MM-DD HH:mm format')
77 }
78
79 const user = await getClientByPhone(clientNumber)
80 if (!user?.current_property_zpid) {
81 return 'No current property found for user'
82 }
83
84 const { error } = await supabaseClient
85 .from('mr_properties')
86 .update({
87 agent_proposed_showing_time: proposedTime.toISOString()
88 })
89 .eq('zpid', user.current_property_zpid)
90
91 if (error) {
92 console.error('Error updating showing time:', error)
93 throw error
94 }
95
96 const property = await getPropertyByZpid(user.current_property_zpid)
97
98 if (
99 property?.client_proposed_showing_time &&
100 dayjs(property.client_proposed_showing_time).isSame(proposedTime)
101 ) {
102 return this.confirmShowingWithClient(
103 {
104 message: 'The seller agreed on the showing time',
105 showingTime: proposedTime.toISOString()
106 },
107 clientNumber
108 )
109 }
110
111 this.sharedState.messagingService.createDraft({
112 sendToPhone: clientNumber,
113 content: message
114 })
115 return 'Showing time text sent to client'
116 }
117
118 async confirmShowingWithClient(
119 args: {
120 message: string
121 showingTime: string
122 },
123 clientNumber: string
124 ): Promise<string> {
125 const clientPhone = this.sharedState.listingAgent?.current_mr_users_phone_number
126 if (!clientPhone) {
127 return 'No current property found for agent'
128 }
129
130 // Get current property status and timeline
131 const property = await findPropertyByZpidAndAgentId(this.sharedState.listingAgent?.current_property_zpid!,
132 this.sharedState.listingAgent?.agent_id!)
133
134 // // Only update timeline if status isn't confirmed
135 // if (property?.showing_status !== 'confirmed') {
136 // const { data: currentUser } = await supabaseClient
137 // .from('mr_users')
138 // .select('timeline')
139 // .eq('phone_number', clientNumber)
140 // .single<Pick<MR_User, 'timeline'>>()
141
142 // const newTimelineEntry = `Scheduled showing for ${client.current_property} at ${args.showingTime}`
143 // const updatedTimeline = currentUser?.timeline
144 // ? `${currentUser.timeline}\n${newTimelineEntry}`
145 // : newTimelineEntry
146
147 // await supabaseClient
148 // .from('mr_users')
149 // .update({ timeline: updatedTimeline })
150 // .eq('phone_number', clientNumber)
151 // }
152
153 // Update showing time if both parties agree
154 // Update showing time regardless of whether client and agent times match
155 // Both times will be set to the same value to ensure consistency
156 const { data, error } = await supabaseClient
157 .from('mr_properties')
158 .update({
159 client_proposed_showing_time: args.showingTime,
160 agent_proposed_showing_time: args.showingTime,
161 showing_status: 'confirmed'
162 })
163 .eq('zpid', this.sharedState.listingAgent?.current_property_zpid!)
164 .eq('agent_id', this.sharedState.listingAgent?.agent_id!)
165
166 if (error) {
167 console.error('Error updating property showing information:', error)
168 throw new Error(`Failed to update property showing information: ${error.message}`)
169 }
170
171 const { error: error2 } = await supabaseClient.from('mr_users').update({
172 has_met_irl: true
173 })
174 .eq('phone_number', clientNumber)
175
176 if (error2) {
177 console.error('Error updating user has_met_irl:', error2)
178 throw new Error(`Failed to update user has_met_irl: ${error2.message}`)
179 }
180
181 this.sharedState.messagingService.createDraft({
182 sendToPhone: clientNumber,
183 content: args.message
184 })
185 const clientInfo = [
186 `Client: ${this.sharedState.client?.first_name || 'Client'}`,
187 `Phone: ${this.sharedState.client?.phone_number}`,
188 this.sharedState.client?.email ? `Email: ${this.sharedState.client?.email}` : '',
189 '',
190 'Status: Confirmed'
191 ]
192
193 // Create a single calendar event configuration
194 const calendarEventConfig = {
195 summary: `[Confirmed] ${property?.formatted_address || property?.address}`,
196 description: clientInfo.join('\n'),
197 location: property?.formatted_address || property?.address!,
198 startTime: dayjs(args.showingTime)
199 }
200
201 this.sharedState.debugOutputs.push(`<calendarEvent> ${JSON.stringify(calendarEventConfig)} </calendarEvent>`)
202
203 if (property?.is_showami_tour) {
204 await sendShowamiCalendarLink(property, calendarEventConfig, this.sharedState, this.sharedState.client!)
205 this.sharedState.messagingService.createDraft({
206 sendToPhone: this.sharedState.listingAgent?.phone_number!,
207 content: `My colleague Leo Quinones will be showing the property.`
208 })
209 }
210 // Schedule follow-ups using buyer flow pattern
211 try {
212 if (!this.sharedState.isTest) {
213 // Use the new createCalendarEvent function
214 await createCalendarEvent(calendarEventConfig)
215 const parsedTime = dayjs(args.showingTime)
216 await scheduleFollowUpTextDates([
217 {
218 scheduledTime: parsedTime.subtract(60, 'minute'),
219 message: `follow up ${Phones.RAFFI_NUMBER} Discussion points for ${property?.formatted_address || property?.address}`
220 },
221 {
222 scheduledTime: parsedTime.add(60, 'minute'),
223 message: `follow up ${clientPhone} Any feedback on your tour of ${property?.formatted_address || property?.address}? What'd you think?`
224 }
225 ])
226 }
227 } catch (err) {
228 console.error('Error scheduling follow-ups:', err)
229 }
230
231 return 'Showing confirmation text sent to client'
232 }
233
234 async addShowingToCalendar(args: {
235 showing_time: string
236 location: string
237 }): Promise<boolean> {
238 return true
239 }
240
241 /**
242 * Extracts property access information and offer deadlines from conversations with listing agents
243 * and saves it to the property notes
244 *
245 * @param agentPhoneNumber The phone number of the listing agent
246 * @param message The most recent message from the agent
247 * @returns A confirmation message about the extracted information
248 */
249 async extractPropertyAccessInfo(
250 agentPhoneNumber: string,
251 message?: string
252 ): Promise<string> {
253 try {
254 // Use the propertyAccessExtractor to process the message
255 const result = await processAgentMessageForPropertyAccess(
256 agentPhoneNumber,
257 message
258 )
259
260 if (result.success) {
261 return `Successfully extracted and saved property access information: ${result.message}`
262 } else {
263 console.log(`Could not extract property access info: ${result.message}`)
264 return `No showing instructions or offer deadlines found in the conversation.`
265 }
266 } catch (error) {
267 console.error('Error in extractPropertyAccessInfo:', error)
268 return 'Error extracting property access information from messages.'
269 }
270 }
271 }
272
16:43:31 - openhands:INFO: agent_controller.py:970 - [Agent Controller 762916a8-4fb4-48c2-a3b7-b0917a1cf171-319e8e72befff0c3] Cleared pending action after 0.02s: FileReadAction (id=25)
16:43:31 - openhands:INFO: agent_controller.py:416 - [Agent Controller 762916a8-4fb4-48c2-a3b7-b0917a1cf171-319e8e72befff0c3] Stepping agent after event: FileReadObservation
[Agent Controller 762916a8-4fb4-48c2-a3b7-b0917a1cf171-319e8e72befff0c3] LEVEL 0 LOCAL STEP 11 GLOBAL STEP 11
16:43:36 - openhands:INFO: agent_controller.py:979 - [Agent Controller 762916a8-4fb4-48c2-a3b7-b0917a1cf171-319e8e72befff0c3] Set pending action: CmdRunAction (id=-1)
16:43:36 - openhands:INFO: resolve_issue.py:233 - **CmdRunAction (source=EventSource.AGENT, is_input=False)**
THOUGHT: Let me check the seller flow implementation to understand how it handles tours when we're the listing agent.
COMMAND:
find /workspace -type f -name "*.ts" | grep -i "seller_flow"
16:43:36 - openhands:INFO: resolve_issue.py:233 - **CmdOutputObservation (source=EventSource.AGENT, exit code=0, metadata={
"exit_code": 0,
"pid": -1,
"username": "openhands",
"hostname": "aae885bd2acb",
"working_dir": "/workspace",
"py_interpreter_path": "/openhands/poetry/openhands-ai-5O4_aCHf-py3.12/bin/python",
"prefix": "",
"suffix": "\n[The command completed with exit code 0.]"
})**
--BEGIN AGENT OBSERVATION--
/workspace/lib/services/seller_flow/seller_flow.ts
/workspace/lib/services/seller_flow/__tests__/seller_flow.test.ts
[The command completed with exit code 0.]
[Current working directory: /workspace]
[Python interpreter: /openhands/poetry/openhands-ai-5O4_aCHf-py3.12/bin/python]
[Command finished with exit code 0]
--END AGENT OBSERVATION--
16:43:36 - openhands:INFO: agent_controller.py:970 - [Agent Controller 762916a8-4fb4-48c2-a3b7-b0917a1cf171-319e8e72befff0c3] Cleared pending action after 0.64s: CmdRunAction (id=27)
16:43:36 - openhands:INFO: agent_controller.py:416 - [Agent Controller 762916a8-4fb4-48c2-a3b7-b0917a1cf171-319e8e72befff0c3] Stepping agent after event: CmdOutputObservation
[Agent Controller 762916a8-4fb4-48c2-a3b7-b0917a1cf171-319e8e72befff0c3] LEVEL 0 LOCAL STEP 12 GLOBAL STEP 12
16:43:40 - openhands:INFO: agent_controller.py:979 - [Agent Controller 762916a8-4fb4-48c2-a3b7-b0917a1cf171-319e8e72befff0c3] Set pending action: FileReadAction (id=-1)
16:43:40 - openhands:INFO: resolve_issue.py:233 - FileReadAction(path='/workspace/lib/services/seller_flow/seller_flow.ts', start=0, end=-1, thought='Let me look at the seller flow implementation to understand how it handles tours.', action=<ActionType.READ: 'read'>, security_risk=None, impl_source=<FileReadSource.OH_ACI: 'oh_aci'>, view_range=None)
16:43:40 - openhands:INFO: resolve_issue.py:233 - [Read from /workspace/lib/services/seller_flow/seller_flow.ts is successful.]
Here's the result of running `cat -n` on /workspace/lib/services/seller_flow/seller_flow.ts:
1 import { AssistantTool } from '@/lib/types/openaiTypes'
2 import { IBaseFlow } from '@/lib/types/flow'
3 import { formatMessagesAsXml } from '../realEstate/core/messageFormatter'
4 import { traceClass } from '@/lib/utils/trace'
5 import { SharedState } from '../realEstate/core/sharedState'
6 import { SellerAssistantCreator } from '../realEstate/openai_assistant_init/sellerAssistantCreator'
7 import { SELLER_TALKER_TOOLS } from '../realEstate/configs/sellerTools'
8 import { getClientByPhone } from '@/lib/services/shared/supabaseClient'
9 import { Phones } from '../realEstate/constants/phoneNumbers'
10 import dayjs from '@/lib/utils/dates'
11
12 /**
13 * SellerFlow class handles interactions with potential buyers and buyer agents.
14 * It uses AI to understand and respond to queries about properties being sold,
15 * showings, offers, and other real estate needs. The class integrates with
16 * various services to provide comprehensive assistance:
17 *
18 * - Property information and marketing
19 * - Scheduling property showings
20 * - Handling buyer inquiries
21 * - Offer management and negotiation
22 *
23 * The goal is to provide an AI-powered experience that scales real estate
24 * operations while maintaining high quality service for property sellers.
25 */
26
27 export class SellerFlow implements IBaseFlow {
28 public oa!: SellerAssistantCreator
29 public tools: AssistantTool[] = SELLER_TALKER_TOOLS
30 public sharedState: SharedState
31
32 public constructor(sharedState: SharedState) {
33 this.sharedState = sharedState
34 }
35
36 public static async create(sharedState: SharedState): Promise<SellerFlow> {
37 const instance = new SellerFlow(sharedState)
38 return instance
39 }
40
41 /**
42 * Retrieves buyer messages for context
43 * @param buyerNumber The phone number of the buyer
44 * @returns Formatted buyer messages as XML
45 */
46 async pullBuyerMessages(buyerNumber: string): Promise<string> {
47 const messages =
48 await this.sharedState.messagingService.dbManager.getLastMessages({
49 userPhone: buyerNumber
50 })
51
52 return formatMessagesAsXml(messages, 'client')
53 }
54
55 /**
56 * Handles property inquiries from potential buyers
57 * @param message The inquiry message
58 * @param buyerNumber The phone number of the buyer
59 * @returns Response to the inquiry
60 */
61 async handlePropertyInquiry(
62 message: string,
63 buyerNumber: string
64 ): Promise<string> {
65 if (Phones.isAdmin(buyerNumber)) {
66 throw new Error(
67 'This is an admin number, not a buyer. This number is only to be texted for testing purposes.'
68 )
69 }
70
71 // Get seller information
72 const seller = await getClientByPhone(this.sharedState.client?.phone_number || '')
73 if (!seller) {
74 throw new Error('Seller information not found')
75 }
76
77 // Create a draft response
78 this.sharedState.messagingService.createDraft({
79 sendToPhone: buyerNumber,
80 content: `Thank you for your interest in the property. I'll get back to you with more information shortly.`
81 })
82
83 return `Inquiry from ${buyerNumber} about property has been received and a draft response has been created.`
84 }
85
86 /**
87 * Schedules a showing for a potential buyer
88 * @param showingTime The requested showing time
89 * @param buyerName The name of the buyer
90 * @param buyerNumber The phone number of the buyer
91 * @param buyerEmail The email of the buyer (optional)
92 * @returns Confirmation message
93 */
94 async scheduleShowing(
95 showingTime: string,
96 buyerName: string,
97 buyerNumber: string,
98 buyerEmail: string = 'None'
99 ): Promise<string> {
100 if (Phones.isAdmin(buyerNumber)) {
101 throw new Error(
102 'This is an admin number, not a buyer. This number is only to be texted for testing purposes.'
103 )
104 }
105
106 const proposedTime = dayjs(showingTime).tz('America/Los_Angeles', true)
107 if (!proposedTime.isValid()) {
108 throw new Error('Invalid showing time format')
109 }
110
111 // Get seller information
112 const seller = await getClientByPhone(this.sharedState.client?.phone_number || this.sharedState.receiverPhoneNumber || '')
113 if (!seller) {
114 throw new Error('Seller information not found')
115 }
116
117 // Get property information
118 const property = seller.current_property
119 if (!property) {
120 throw new Error('No property found for this seller')
121 }
122
123 // Create a draft confirmation
124 const formattedTime = proposedTime.format('dddd, MMMM D [at] h:mm A')
125 this.sharedState.messagingService.createDraft({
126 sendToPhone: buyerNumber,
127 content: `Hi ${buyerName}, this is ${seller.first_name} ${seller.last_name}. I've scheduled a showing for ${property} on ${formattedTime}. Please let me know if you have any questions.`
128 })
129
130 return `Showing scheduled for ${buyerName} at ${formattedTime} for property ${property}.`
131 }
132
133 /**
134 * Responds to an offer from a buyer
135 * @param offerAmount The amount offered
136 * @param buyerName The name of the buyer
137 * @param buyerNumber The phone number of the buyer
138 * @param message Additional message or terms
139 * @returns Response to the offer
140 */
141 async respondToOffer(
142 offerAmount: string,
143 buyerName: string,
144 buyerNumber: string,
145 message: string
146 ): Promise<string> {
147 if (Phones.isAdmin(buyerNumber)) {
148 throw new Error(
149 'This is an admin number, not a buyer. This number is only to be texted for testing purposes.'
150 )
151 }
152
153 // Get seller information
154 const seller = await getClientByPhone(this.sharedState.client?.phone_number || this.sharedState.receiverPhoneNumber || '')
155 if (!seller) {
156 throw new Error('Seller information not found')
157 }
158
159 // Create a draft response
160 this.sharedState.messagingService.createDraft({
161 sendToPhone: buyerNumber,
162 content: `Hi ${buyerName}, thank you for your offer of ${offerAmount}. I'll discuss this with my client and get back to you soon.`
163 })
164
165 return `Offer of ${offerAmount} from ${buyerName} has been received and a draft response has been created.`
166 }
167
168 /**
169 * Provides property details to a potential buyer
170 * @param buyerNumber The phone number of the buyer
171 * @returns Property details message
172 */
173 async providePropertyDetails(buyerNumber: string): Promise<string> {
174 if (Phones.isAdmin(buyerNumber)) {
175 throw new Error(
176 'This is an admin number, not a buyer. This number is only to be texted for testing purposes.'
177 )
178 }
179
180 // Get seller information
181 const seller = await getClientByPhone(this.sharedState.client?.phone_number || this.sharedState.receiverPhoneNumber || '')
182 if (!seller) {
183 throw new Error('Seller information not found')
184 }
185
186 // Get property information
187 const property = seller.current_property
188 if (!property) {
189 throw new Error('No property found for this seller')
190 }
191
192 // Create a draft with property details
193 this.sharedState.messagingService.createDraft({
194 sendToPhone: buyerNumber,
195 content: `Here are the details for ${property}. Please let me know if you have any specific questions.`
196 })
197
198 return `Property details for ${property} have been sent to ${buyerNumber}.`
199 }
200 }
201
16:43:40 - openhands:INFO: agent_controller.py:970 - [Agent Controller 762916a8-4fb4-48c2-a3b7-b0917a1cf171-319e8e72befff0c3] Cleared pending action after 0.02s: FileReadAction (id=29)
16:43:40 - openhands:INFO: agent_controller.py:416 - [Agent Controller 762916a8-4fb4-48c2-a3b7-b0917a1cf171-319e8e72befff0c3] Stepping agent after event: FileReadObservation
[Agent Controller 762916a8-4fb4-48c2-a3b7-b0917a1cf171-319e8e72befff0c3] LEVEL 0 LOCAL STEP 13 GLOBAL STEP 13
16:43:45 - openhands:INFO: agent_controller.py:979 - [Agent Controller 762916a8-4fb4-48c2-a3b7-b0917a1cf171-319e8e72befff0c3] Set pending action: FileReadAction (id=-1)
16:43:45 - openhands:INFO: resolve_issue.py:233 - FileReadAction(path='/workspace/lib/types/assistantTypes.ts', start=0, end=-1, thought='Now let me check the assistant types to understand the function definitions.', action=<ActionType.READ: 'read'>, security_risk=None, impl_source=<FileReadSource.OH_ACI: 'oh_aci'>, view_range=None)
16:43:45 - openhands:INFO: resolve_issue.py:233 - [Read from /workspace/lib/types/assistantTypes.ts is successful.]
Here's the result of running `cat -n` on /workspace/lib/types/assistantTypes.ts:
1 import {
2 ThreadMessage as ImportedThreadMessage,
3 MessageResponse,
4 mr_messages
5 } from './messages'
6 import OpenAI from 'openai'
7 import { SupabaseClient } from '@supabase/supabase-js'
8 import { RunStatus } from './openaiTypes'
9 import { MR_User } from './sbPeople'
10 import { DatabaseManager } from '@/lib/services/realEstate/core/databaseManager'
11 import { SharedState } from '../services/realEstate/core/sharedState'
12
13 export type { RunStatus }
14 export type ToolOutput = {
15 tool_call_id: string
16 output: string
17 }
18
19 // Re-export ThreadMessage
20 export type ThreadMessage = ImportedThreadMessage
21
22 export interface AssistantMessageContent {
23 type: string
24 text: {
25 value: string
26 }
27 }
28
29 export interface AssistantMessage {
30 role: string
31 content: AssistantMessageContent[]
32 }
33
34 // Core interfaces for flow dependencies
35 export interface IBaseDependencies {
36 isTest: boolean
37 threadId?: string
38 }
39
40 export interface IRedfinService {
41 search: (
42 address: string
43 ) => Promise<{ payload: { exactMatch: { url: string } } }>
44 initialInfo: (
45 url: string
46 ) => Promise<{ payload: { propertyId: string; listingId: string } }>
47 similarListings: (propertyId: string, listingId: string) => Promise<unknown[]>
48 }
49
50 export interface IBasePlusDependencies extends IBaseDependencies {
51 sharedState: SharedState
52 openaiClient?: OpenAI
53 supabaseClient?: SupabaseClient
54 dbManager?: DatabaseManager
55 }
56
57 export interface IFlowDependencies extends IBasePlusDependencies {
58 messagingService: IMessagingService
59 dbManager: DatabaseManager
60 }
61
62 export type IFlowWithNumbers = IFlowDependencies & {
63 getClientNumber: () => string | undefined
64 setClientNumber: (phone?: string) => void
65 getAgentNumber: () => string | undefined
66 setAgentNumber: (phone?: string) => void
67 getUser: () => MR_User | undefined
68 setUser: (user?: MR_User) => void
69 }
70
71 export interface IMessageProcessor {
72 getUserInfo(key?: string): Promise<unknown>
73 setClientName(name: string): Promise<void>
74 getLastMessages(options: {
75 userPhone: string
76 minMessages?: number
77 timeWindowMinutes?: number
78 otherRecipients0?: string
79 otherRecipients1?: string
80 maxMessages?: number
81 }): Promise<mr_messages[]>
82 getMessagesRelatedToUserMessage(
83 userMessage: string,
84 userId: string
85 ): Promise<string>
86 prepMessagesForLLM(
87 senderPhoneNumber: string,
88 lastMessages: mr_messages[]
89 ): ThreadMessage[]
90 addMemoriesToMessages(
91 memories: string[],
92 messages: ThreadMessage[]
93 ): ThreadMessage[]
94 addMessage(
95 message: string | ThreadMessage[],
96 userId: string,
97 role?: 'user' | 'assistant'
98 ): Promise<void>
99 sendText(
100 sendToPhone: string,
101 content: string,
102 imageUrl?: string
103 ): Promise<boolean>
104 processMessageWithLLM(
105 threadMessages: ThreadMessage[],
106 senderPhoneNumber: string,
107 maxCompletionTokens?: number
108 ): Promise<MessageResponse>
109 }
110
111 export interface IDatabaseManager {
112 insertDb(
113 senderPhoneNumber: string,
114 receiverPhoneNumber: string,
115 message: string
116 ): Promise<unknown>
117 getLastMessages(options: {
118 userPhone: string
119 minMessages?: number
120 timeWindowMinutes?: number
121 otherRecipients0?: string
122 otherRecipients1?: string
123 maxMessages?: number
124 }): Promise<mr_messages[]>
125 }
126
127 export interface IMemoryManager {
128 addMessage(
129 message: string | ThreadMessage[],
130 userId: string,
131 role?: 'user' | 'assistant'
132 ): Promise<void>
133 getMessagesRelatedToUserMessage(
134 userMessage: string,
135 userId: string
136 ): Promise<string>
137 prepMessagesForLLM(
138 senderPhoneNumber: string,
139 lastMessages: mr_messages[]
140 ): ThreadMessage[]
141 addMemoriesToMessages(
142 previousMemories: string[],
143 threadMessages: ThreadMessage[]
144 ): ThreadMessage[]
145 }
146
147 export interface IMessagingService {
148 createDraft(options: {
149 sendToPhone: string
150 content: string
151 imageUrl?: string
152 sendFromPhone?: string
153 otherRecipients0?: string
154 draft_outbound_string_similarity?: number
155 ai_assessed_time_save?: string
156 internal_debug_messages?: string
157 ai_removed_text?: string
158 draft_prompt_number?: number
159 }): Promise<boolean>
160 createOffer(phoneNumber: string, args: OfferArgs): Promise<boolean>
161 getRaffi(
162 message: string,
163 clientNumber?: string,
164 agentNumber?: string
165 ): Promise<boolean>
166 sendText(
167 sendToPhone: string,
168 content: string,
169 imageUrl?: string,
170 sendFromPhone?: string
171 ): Promise<boolean>
172 sendMessageToUser?(
173 userId: string,
174 message: string,
175 subject: string,
176 metadata?: Record<string, any>
177 ): Promise<{ success: boolean; messageId?: string; error?: string }>
178 }
179
180 export interface OfferArgs {
181 Address: string
182 Price_Offer: string
183 Down_Payment: string
184 Buyer: string
185 }
186
187 export interface MessageProcessorConfig {
188 mem0ApiKey: string
189 mem0BaseUrl: string
190 twilioApiUrl: string
191 twilioApiKey: string
192 twilioHeaders: Record<string, string>
193 }
194
195 export interface IBaseFlow {
196 initiateScheduleShowing(
197 address: string,
198 showingTime: string,
199 clientName: string,
200 senderPhoneNumber: string,
201 lastMessage?: string
202 ): Promise<string>
203 // ... existing code ...
204 }
205
16:43:45 - openhands:INFO: agent_controller.py:970 - [Agent Controller 762916a8-4fb4-48c2-a3b7-b0917a1cf171-319e8e72befff0c3] Cleared pending action after 0.03s: FileReadAction (id=31)
16:43:45 - openhands:INFO: agent_controller.py:416 - [Agent Controller 762916a8-4fb4-48c2-a3b7-b0917a1cf171-319e8e72befff0c3] Stepping agent after event: FileReadObservation
[Agent Controller 762916a8-4fb4-48c2-a3b7-b0917a1cf171-319e8e72befff0c3] LEVEL 0 LOCAL STEP 14 GLOBAL STEP 14
16:43:50 - openhands:INFO: agent_controller.py:979 - [Agent Controller 762916a8-4fb4-48c2-a3b7-b0917a1cf171-319e8e72befff0c3] Set pending action: FileReadAction (id=-1)
16:43:50 - openhands:INFO: resolve_issue.py:233 - FileReadAction(path='/workspace/lib/services/realEstate/configs/clientTools.ts', start=0, end=-1, thought='Let me check the client tools and realtor tools to understand the function definitions.', action=<ActionType.READ: 'read'>, security_risk=None, impl_source=<FileReadSource.OH_ACI: 'oh_aci'>, view_range=None)
16:43:50 - openhands:INFO: resolve_issue.py:233 - [Read from /workspace/lib/services/realEstate/configs/clientTools.ts is successful.]
Here's the result of running `cat -n` on /workspace/lib/services/realEstate/configs/clientTools.ts:
1 import { AssistantTool, ChatCompletionTool } from '@/lib/types/openaiTypes'
2
3 export const CLIENT_TALKER_TOOLS: AssistantTool[] = [
4 // TODO: add addresses as input to most of these, but then if none are specified, use current address
5 // {
6 // type: "function",
7 // function: {
8 // name: "createOffer",
9 // description: "Submits a buying offer for a house that the user would like.",
10 // strict: true,
11 // parameters: {
12 // type: "object",
13 // properties: {
14 // Address: {
15 // type: "string",
16 // description: "The property address for which the offer is being made.",
17 // },
18 // Buyer: {
19 // type: "string",
20 // description: "The name of the person making the offer.",
21 // },
22 // Down_Payment: {
23 // type: "string",
24 // description: "The down payment percentage or amount.",
25 // },
26 // Price_Offer: {
27 // type: "string",
28 // description: "The price being offered for the property.",
29 // },
30 // },
31 // required: ["Address", "Buyer", "Down_Payment", "Price_Offer"],
32 // additionalProperties: false,
33 // },
34 // },
35 // },
36 {
37 type: 'function',
38 function: {
39 name: 'convertShortAddressToFullAddress',
40 description:
41 "Converts a shorthand address (123 main) to a full address (123 main st, city, state zipcode). Can also be a relative address, like 'the cornerstone apartments'. But, provide as much information as possible for an accurate conversion.",
42 strict: true,
43 parameters: {
44 type: 'object',
45 properties: {
46 address: {
47 type: 'string',
48 description: 'The short address to convert to a full address.'
49 }
50 },
51 required: ['address'],
52 additionalProperties: false
53 }
54 }
55 },
56 {
57 type: 'function',
58 function: {
59 name: 'initiateScheduleShowing',
60 description:
61 "Sends the INITIAL text message to the real estate agent for scheduling a showing of a property. If multiple showings are requested, call initiateScheduleMultipleShowings instead. Call this function first if it is to be called. Showings can be referred to in a variety of ways: some examples are 'tours', 'reshowings', 'taking a look', 'seeing', etc. Call this function if a tour is requested, and hasn't been started to be scheduled yet. NOT TO BE USED FOR FURTHER REPLIES AND NEGOTIATIONS. No need to check if the day of the week and date are aligned.",
62 strict: true,
63 parameters: {
64 type: 'object',
65 properties: {
66 address: {
67 type: 'string',
68 description:
69 'Address of the property. Make sure that the address is formatted like this: (street address, city, state zipcode). If you only have the incomplete address, then put what you have.'
70 },
71 showing_time: {
72 type: 'string',
73 description:
74 "Time to schedule a showing. Could be a variety of time formats. If not specified, 'None'."
75 },
76 client_name: {
77 type: 'string',
78 description:
79 "The name of the client. Preferably first and last name. If not specified, say 'None'."
80 },
81 email: {
82 type: 'string',
83 description:
84 "The email of the client. If not specified, say 'None'."
85 },
86 overrideAgentName: {
87 type: 'string',
88 description: `Override the agent name for this property. Looks something like this: "Agent Name: <Agent Name>", or "Override the agent name with <Agent Name>.`
89 },
90 overrideAgentNumber: {
91 type: 'string',
92 description: `Override the agent phone number for this property. Looks something like this: "Agent Number: <Agent Number>", or "Override the agent number with <Agent Name>, and their phone number is <Agent Number>.`
93 }
94 },
95 required: [
96 'address',
97 'showing_time',
98 'client_name',
99 'email',
100 'overrideAgentName',
101 'overrideAgentNumber'
102 ],
103 additionalProperties: false
104 }
105 }
106 },
107 {
108 type: 'function',
109 function: {
110 name: 'initiateScheduleMultipleShowings',
111 description:
112 'Sends the INITIAL text message to the real estate agents for scheduling a showing of multiple properties. Schedules multiple property tours in an optimal order based on location. Call this function first if it is to be called. This calls initiateScheduleShowing for each address (so use this in lieu of calling initiateScheduleShowing for each address). This function will determine the best route between properties and schedule each showing with appropriate time spacing. Allow the client to specify a range of time for this, such as just a day, as opposed to a specific time.',
113 strict: true,
114 parameters: {
115 type: 'object',
116 properties: {
117 addresses: {
118 type: 'array',
119 items: {
120 type: 'string'
121 },
122 description:
123 'Array of property addresses to schedule tours for. Each address should be as complete as possible (street, city, state, zip).'
124 },
125 showing_time: {
126 type: 'string',
127 description:
128 "Starting time for the first tour. Can be a specific time (e.g., '2pm tomorrow') or a day + part of day (e.g., 'Friday morning'), or even a day or a range of days (e.g., 'Friday or Saturday'). All tours will be scheduled sequentially from this starting time."
129 },
130 client_name: {
131 type: 'string',
132 description:
133 'The name of the client. Preferably first and last name.'
134 },
135 client_phone: {
136 type: 'string',
137 description: 'The phone number of the client. If not specified, say "None".'
138 },
139 email: {
140 type: 'string',
141 description:
142 "The email of the client. If not specified, say 'None'."
143 }
144 },
145 required: [
146 'addresses',
147 'showing_time',
148 'client_name',
149 'client_phone',
150 'email'
151 ],
152 additionalProperties: false
153 }
154 }
155 },
156 {
157 type: 'function',
158 function: {
159 name: 'negotiateShowingTimeWithAgent',
160 description:
161 "Used for negotiating showing times with the realtor AFTER the initial request. The time should be in 'YYYY-MM-DD HH:mm' format (e.g. '2024-03-15 14:30'). All times are assumed to be Pacific Time. Always verify availability first using getMyCalendar.",
162 strict: true,
163 parameters: {
164 type: 'object',
165 properties: {
166 message: {
167 type: 'string',
168 description:
169 'The message to send to the realtor, proposing or responding to alternative showing times. Include the proposed time in human-readable format.'
170 },
171 formatted_time: {
172 type: 'string',
173 description:
174 "Time in 'YYYY-MM-DD HH:mm' format (e.g. '2024-03-15 14:30'). Time is assumed to be Pacific Time."
175 }
176 },
177 required: ['message', 'formatted_time'],
178 additionalProperties: false
179 }
180 }
181 },
182 {
183 type: 'function',
184 function: {
185 name: 'askListingAgent',
186 description:
187 'Ask the agent for a property a question about the property at hand. Not for scheduling tours, for those use the initiateScheduleShowing function.',
188 strict: true,
189 parameters: {
190 type: 'object',
191 properties: {
192 address: {
193 type: 'string',
194 description:
195 "The address of the property of interest. If Unsure, say 'None'."
196 },
197 message: {
198 type: 'string',
199 description: 'The message to send to the listing agent.'
200 }
201 },
202 required: ['address', 'message'],
203 additionalProperties: false
204 }
205 }
206 },
207 {
208 type: 'function',
209 function: {
210 name: 'logPropertyOfInterest',
211 description:
212 "Any time a client mentions any property, it should be logged in the database. If client is referring to a property by shorthand such as 'the cornerstone apartments' or '123 main', then call the 'convertShortAddressToFullAddress' function first so the full address can be put in here. No need to do this if client is asking for a tour, as this function is already called if initiateScheduleShowing is called.",
213 strict: true,
214 parameters: {
215 type: 'object',
216 properties: {
217 address: {
218 type: 'string',
219 description:
220 'The full address of the property of interest (e.g. street address, city, state zipcode).'
221 }
222 },
223 required: ['address'],
224 additionalProperties: false
225 }
226 }
227 },
228 {
229 type: 'function',
230 function: {
231 name: 'confirmShowingWithAgent',
232 description:
233 "Used to confirm a showing time with the realtor listing agent that a time has been agreed upon with the client. This function should be used when both parties, client and listing agent, have agreed on a specific time. The time in the message should be in the format 'YYYY-MM-DD HH:mm' (e.g. '2024-03-15 14:30'). This is a 24-hour format without timezone.",
234 strict: true,
235 parameters: {
236 type: 'object',
237 properties: {
238 message: {
239 type: 'string',
240 description:
241 "The confirmation message to send to the realtor. Include the confirmed time in the format 'MM/DD HH:mm' in the message. If the date is today or tomorrow, then say 'tomorrow' or 'today' instead of the full date, along with the time."
242 },
243 showing_time: {
244 type: 'string',
245 description:
246 "The confirmed time to send to the realtor. In the format 'YYYY-MM-DD HH:mm'."
247 }
248 },
249 required: ['message', 'showing_time'],
250 additionalProperties: false
251 }
252 }
253 },
254 {
255 type: 'function',
256 function: {
257 name: 'getSimplifiedPropertyDetails',
258 description:
259 "Gets simple information about a house. Should be run for all addresses being discussed. Links will be pulled from the 'url' field. If you can't find the information you need, call the get_all_property_details function.",
260 strict: true,
261 parameters: {
262 type: 'object',
263 properties: {
264 address: {
265 type: 'string',
266 description:
267 'This is the full address of the property being shown to user or in question.'
268 }
269 },
270 required: ['address'],
271 additionalProperties: false
272 }
273 }
274 },
275 {
276 type: 'function',
277 function: {
278 name: 'getAllPropertyDetails',
279 description:
280 "Gets all information about a house. Links will be pulled from the 'url' field",
281 strict: true,
282 parameters: {
283 type: 'object',
284 properties: {
285 address: {
286 type: 'string',
287 description:
288 'This is the full address of the property being shown to user or in question.'
289 }
290 },
291 required: ['address'],
292 additionalProperties: false
293 }
294 }
295 },
296 {
297 type: 'function',
298 function: {
299 name: 'getSimilarPropertiesForSaleByAddress',
300 description:
301 "Finds similar properties CURRENTLY FOR SALE for a given property address to help give user recommendations on similar homes they'd like to purchase.",
302 strict: true,
303 parameters: {
304 type: 'object',
305 properties: {
306 address: {
307 type: 'string',
308 description:
309 'The full address of the property to find similar open houses for.'
310 }
311 },
312 required: ['address'],
313 additionalProperties: false
314 }
315 }
316 },
317 {
318 type: 'function',
319 function: {
320 name: 'getSimilarPropertiesSoldByAddress',
321 description:
322 'Finds similar properties or comparable property (comps) SOLD (past tense) for a given property address to help give user recommendations on similar homes they could look at for comparison on for price on their property of interest. Getting these comps is essential to know for knowing how to what price to bid for an offer in a specific neighborhood.',
323 strict: true,
324 parameters: {
325 type: 'object',
326 properties: {
327 address: {
328 type: 'string',
329 description: 'The full address of the property.'
330 }
331 },
332 required: ['address'],
333 additionalProperties: false
334 }
335 }
336 },
337 {
338 type: 'function',
339 function: {
340 name: 'getMortgageRatesPayment',
341 description:
342 'call this function to get current mortgages rates, taxes and insurance rates. ask for zip code. Gets approximate local property tax, home insurance, mortage rates, and tax rates',
343 strict: true,
344 parameters: {
345 type: 'object',
346 properties: {
347 zip: {
348 type: 'string',
349 description:
350 'This is the zip code of the area they are looking to buy.'
351 }
352 },
353 required: ['zip'],
354 additionalProperties: false
355 }
356 }
357 },
358 // {
359 // type: "function",
360 // function: {
361 // name: "recordListingFeedback",
362 // description: "This takes the users feedback for a given listing and records things they liked and didnt like along with reason why. it should be done for every listing sent to the user before a subsequent listing is sent.",
363 // strict: true,
364 // parameters: {
365 // type: "object",
366 // properties: {
367 // address: {
368 // type: "string",
369 // description: "The full address of the property.",
370 // },
371 // feedback: {
372 // type: "string",
373 // description: "The users liking of the subject property and reason why including specific items they liked or didn't like.",
374 // },
375 // },
376 // required: ["address", "feedback"],
377 // additionalProperties: false,
378 // },
379 // },
380 // },
381 // get listings
382 // {
383 // type: "function",
384 // function: {
385 // name: "getListings",
386 // description: "Gets listings from a zip code or city, with a filter option for any type of filter the user would like.",
387 // strict: true,
388 // parameters: {
389 // type: "object",
390 // properties: {
391 // zip_or_city: {
392 // type: "string",
393 // description: "The zip code or city name for the listing search.",
394 // },
395 // state: {
396 // type: "string",
397 // description: "The state abbreviation (e.g., 'CA' for California) for the listing search.",
398 // },
399 // listing_type: {
400 // type: "string",
401 // description: "The type of listing to search for. Can be 'for_sale', 'sold', or 'pending'.",
402 // enum: ["for_sale", "sold", "pending"],
403 // },
404 // property_filter: {
405 // type: "string",
406 // description: "A sentence or phrase for how you would like to construct the filter. <response clipped><NOTE>Due to the max output limit, only part of this file has been shown to you. You should retry this tool after you have searched inside the file with `grep -n` in order to find the line numbers of what you are looking for.</NOTE>
16:43:50 - openhands:INFO: agent_controller.py:970 - [Agent Controller 762916a8-4fb4-48c2-a3b7-b0917a1cf171-319e8e72befff0c3] Cleared pending action after 0.02s: FileReadAction (id=33)
16:43:50 - openhands:INFO: agent_controller.py:416 - [Agent Controller 762916a8-4fb4-48c2-a3b7-b0917a1cf171-319e8e72befff0c3] Stepping agent after event: FileReadObservation
[Agent Controller 762916a8-4fb4-48c2-a3b7-b0917a1cf171-319e8e72befff0c3] LEVEL 0 LOCAL STEP 15 GLOBAL STEP 15
16:43:56 - openhands:INFO: agent_controller.py:979 - [Agent Controller 762916a8-4fb4-48c2-a3b7-b0917a1cf171-319e8e72befff0c3] Set pending action: FileReadAction (id=-1)
16:43:56 - openhands:INFO: resolve_issue.py:233 - FileReadAction(path='/workspace/lib/services/realEstate/configs/realtorTools.ts', start=0, end=-1, thought='Let me check the realtor tools to understand the function definitions.', action=<ActionType.READ: 'read'>, security_risk=None, impl_source=<FileReadSource.OH_ACI: 'oh_aci'>, view_range=None)
16:43:56 - openhands:INFO: resolve_issue.py:233 - [Read from /workspace/lib/services/realEstate/configs/realtorTools.ts is successful.]
Here's the result of running `cat -n` on /workspace/lib/services/realEstate/configs/realtorTools.ts:
1 import { AssistantTool } from '@/lib/types/openaiTypes'
2
3 export const REALTOR_TALKER_TOOLS: AssistantTool[] = [
4 {
5 type: 'function',
6 function: {
7 name: 'negotiateShowingTimeWithClient',
8 description:
9 "Used for negotiating showing times with the realtor AFTER the initial request. When there's a scheduling conflict, acknowledge it professionally and clearly communicate any alternative times proposed by the agent. Use this function to update the client on the agent's availability to do the showing. This function sends the text asking the question, after which your task is complete.",
10 parameters: {
11 type: 'object',
12 properties: {
13 message: {
14 type: 'string',
15 description:
16 "The message to send to the client, updating them regarding the agent's availability. Include the proposed time in the message text."
17 },
18 proposedTime: {
19 type: 'string',
20 description:
21 'The specific time being proposed for the showing in YYYY-MM-DD HH:mm format.'
22 }
23 },
24 required: ['message', 'proposedTime'],
25 additionalProperties: false
26 }
27 }
28 },
29 {
30 type: 'function',
31 function: {
32 name: 'confirmShowingWithClient',
33 description:
34 "Send final confirmation to the client. Include the exact date and time in the message, and mention that you'll provide showing instructions shortly. Write it in a friendly tone. This function sends the text asking the question, after which your task is complete.",
35 parameters: {
36 type: 'object',
37 properties: {
38 message: {
39 type: 'string',
40 description:
41 'The confirmation message to send to the client. Include the confirmed time in the message.'
42 },
43 showingTime: {
44 type: 'string',
45 description:
46 'The exact date and time of the showing to be confirmed in YYYY-MM-DD HH:mm format. Always include this value.'
47 }
48 },
49 required: ['message', 'showingTime'],
50 additionalProperties: false
51 }
52 }
53 },
54 // {
55 // type: "function",
56 // function: {
57 // name: "addShowingToCalendar",
58 // description: "After each confirmed showing with a client, use this function to add the showing to my calendar.",
59 // parameters: {
60 // type: "object",
61 // properties: {
62 // showingTime: {
63 // type: "string",
64 // description: "The agreed-upon time for the showing. This should be in datetime format, such as 2024-09-11T04:00:00Z",
65 // },
66 // location: {
67 // type: "string",
68 // description: "The address or location of the showing",
69 // },
70 // },
71 // required: ["showingTime", "location"],
72 // },
73 // },
74 // },
75 // {
76 // type: 'function',
77 // function: {
78 // name: 'confirmShowingWithAgent',
79 // description:
80 // "Tell agent that a showing has been scheduled. Must include in the message: 1) Complete property address, 2) Exact date and time, 3) Request showing instructions if not provided. Write it in a professional tone. Do not reveal the client's name. This function sends the text asking the question, after which your task is complete.",
81 // parameters: {
82 // type: 'object',
83 // properties: {
84 // message: {
85 // type: 'string',
86 // description:
87 // 'The confirmation message to send to the agent. Include the confirmed time in the message.'
88 // }
89 // },
90 // required: ['message'],
91 // additionalProperties: false
92 // }
93 // }
94 // },
95 // {
96 // type: "function",
97 // function: {
98 // name: "getRaffi",
99 // description: "When there is a request from a realtor that is not encompassed by one of these functions. For an example, the home is no longer for sale, or the agent requests a direct call. DO NOT RESPOND TO THE REALTOR IF THIS FUNCTION IS CALLED.",
100 // parameters: {
101 // type: "object",
102 // properties: {
103 // message: {
104 // type: "string",
105 // description: "Say thanks for the info.",
106 // }
107 // },
108 // required: ["message"],
109 // additionalProperties: false,
110 // },
111 // },
112 // },
113 {
114 type: 'function',
115 function: {
116 name: 'pullClientMessages',
117 description:
118 "Use this function to get the interested client's message history. This can be used anytime to understand the realtor's responses, but is especially useful during tour scheduling to ensure both parties agree on showing times. This will automatically pull the right client's messages for the property that realtor is the listing agent for.",
119 parameters: {
120 type: 'object',
121 properties: {},
122 required: [],
123 additionalProperties: false
124 }
125 }
126 },
127 {
128 type: 'function',
129 function: {
130 name: 'extractPropertyAccessInfo',
131 description:
132 'Automatically extracts property access information from conversation with the listing agent, including lockbox codes, lockbox locations, security info, and offer due dates if mentioned. Use this function after confirming a showing to ensure property access details are stored for use during the showing. No parameters needed - automatically processes the conversation.',
133 parameters: {
134 type: 'object',
135 properties: {},
136 required: [],
137 additionalProperties: false
138 }
139 }
140 },
141 {
142 type: 'function',
143 function: {
144 name: 'getMyCalendar',
145 description:
146 'Retrieves my current calendar for a given date. Always call this before scheduling a showing to check my availability. Call this multiple times if you are considering multiple dates for showings.',
147 strict: true,
148 parameters: {
149 type: 'object',
150 properties: {
151 date: {
152 type: 'string',
153 description:
154 'Date to check for available showing times in YYYY-MM-DD format'
155 }
156 },
157 required: ['date'],
158 additionalProperties: false
159 }
160 }
161 }
162 // this function is done by default at the end of every agent text now.
163 // {
164 // type: "function",
165 // function: {
166 // name: "replyToClient",
167 // description: "Reply to the client. This function sends the text answering a question the client asked, or provides the client with more information about a property or its sellers, after which your task is complete.",
168 // parameters: {
169 // type: "object",
170 // properties: {
171 // message: {
172 // type: "string",
173 // description: "The message to send to the client.",
174 // }
175 // },
176 // required: ["message"],
177 // additionalProperties: false,
178 // },
179 // },
180 // },
181 // { type: "code_interpreter" },
182 ]
183
16:43:56 - openhands:INFO: agent_controller.py:970 - [Agent Controller 762916a8-4fb4-48c2-a3b7-b0917a1cf171-319e8e72befff0c3] Cleared pending action after 0.02s: FileReadAction (id=35)
16:43:56 - openhands:INFO: agent_controller.py:416 - [Agent Controller 762916a8-4fb4-48c2-a3b7-b0917a1cf171-319e8e72befff0c3] Stepping agent after event: FileReadObservation
[Agent Controller 762916a8-4fb4-48c2-a3b7-b0917a1cf171-319e8e72befff0c3] LEVEL 0 LOCAL STEP 16 GLOBAL STEP 16
16:44:02 - openhands:INFO: agent_controller.py:979 - [Agent Controller 762916a8-4fb4-48c2-a3b7-b0917a1cf171-319e8e72befff0c3] Set pending action: CmdRunAction (id=-1)
16:44:02 - openhands:INFO: resolve_issue.py:233 - **CmdRunAction (source=EventSource.AGENT, is_input=False)**
THOUGHT: Now let me check the implementation of the showing service to understand how it works.
COMMAND:
grep -n "shouldUseShowami" -A 20 /workspace/lib/services/buyer_flow/showing.ts
16:44:03 - openhands:INFO: resolve_issue.py:233 - **CmdOutputObservation (source=EventSource.AGENT, exit code=0, metadata={
"exit_code": 0,
"pid": -1,
"username": "openhands",
"hostname": "aae885bd2acb",
"working_dir": "/workspace",
"py_interpreter_path": "/openhands/poetry/openhands-ai-5O4_aCHf-py3.12/bin/python",
"prefix": "",
"suffix": "\n[The command completed with exit code 0.]"
})**
--BEGIN AGENT OBSERVATION--
830: async shouldUseShowami(options: {
831- propertyDetails: PropertyDetails;
832- lastMessage?: string;
833- senderPhoneNumber?: string;
834- }): Promise<boolean> {
835- const { propertyDetails, lastMessage, senderPhoneNumber } = options;
836-
837- // Check for admin override - admin sent message containing 'showami'
838- const adminOverride =
839- lastMessage &&
840- senderPhoneNumber &&
841- Phones.isAdmin(senderPhoneNumber) &&
842- lastMessage.toLowerCase().includes('showami')
843-
844- if (adminOverride) {
845- return true
846- }
847-
848- // // Check property price and user preference
849- // const price =
850- // propertyDetails.price ||
--
927: const useShowami = isShowamiTour? true : await this.shouldUseShowami({
928- propertyDetails,
929- lastMessage,
930- senderPhoneNumber
931- })
932-
933- console.log(`useShowami: ${useShowami}`);
934- try {
935- // Always schedule with regular agent to update systems and send messages
936- const regularSchedulingResult =
937- await this.regularScheduler.scheduleShowing({
938- address,
939- showingTime,
940- propertyDetails,
941- clientName,
942- clientPhone,
943- isShowami: useShowami,
944- email,
945- isTest,
946- overrideListingAgentName,
947- overrideListingAgentNumber
[The command completed with exit code 0.]
[Current working directory: /workspace]
[Python interpreter: /openhands/poetry/openhands-ai-5O4_aCHf-py3.12/bin/python]
[Command finished with exit code 0]
--END AGENT OBSERVATION--
16:44:03 - openhands:INFO: agent_controller.py:970 - [Agent Controller 762916a8-4fb4-48c2-a3b7-b0917a1cf171-319e8e72befff0c3] Cleared pending action after 0.64s: CmdRunAction (id=37)
16:44:03 - openhands:INFO: agent_controller.py:416 - [Agent Controller 762916a8-4fb4-48c2-a3b7-b0917a1cf171-319e8e72befff0c3] Stepping agent after event: CmdOutputObservation
[Agent Controller 762916a8-4fb4-48c2-a3b7-b0917a1cf171-319e8e72befff0c3] LEVEL 0 LOCAL STEP 17 GLOBAL STEP 17
16:44:09 - openhands:INFO: agent_controller.py:979 - [Agent Controller 762916a8-4fb4-48c2-a3b7-b0917a1cf171-319e8e72befff0c3] Set pending action: CmdRunAction (id=-1)
16:44:09 - openhands:INFO: resolve_issue.py:233 - **CmdRunAction (source=EventSource.AGENT, is_input=False)**
THOUGHT: Let me check if there's any implementation for handling the case when we're the listing agent.
COMMAND:
grep -r "listing agent" --include="*.ts" /workspace | grep -i "we're\|we are"
16:44:10 - openhands:INFO: resolve_issue.py:233 - **CmdOutputObservation (source=EventSource.AGENT, exit code=1, metadata={
"exit_code": 1,
"pid": -1,
"username": "openhands",
"hostname": "aae885bd2acb",
"working_dir": "/workspace",
"py_interpreter_path": "/openhands/poetry/openhands-ai-5O4_aCHf-py3.12/bin/python",
"prefix": "",
"suffix": "\n[The command completed with exit code 1.]"
})**
--BEGIN AGENT OBSERVATION--
[The command completed with exit code 1.]
[Current working directory: /workspace]
[Python interpreter: /openhands/poetry/openhands-ai-5O4_aCHf-py3.12/bin/python]
[Command finished with exit code 1]
--END AGENT OBSERVATION--
16:44:10 - openhands:INFO: agent_controller.py:970 - [Agent Controller 762916a8-4fb4-48c2-a3b7-b0917a1cf171-319e8e72befff0c3] Cleared pending action after 0.64s: CmdRunAction (id=39)
16:44:10 - openhands:INFO: agent_controller.py:416 - [Agent Controller 762916a8-4fb4-48c2-a3b7-b0917a1cf171-319e8e72befff0c3] Stepping agent after event: CmdOutputObservation
[Agent Controller 762916a8-4fb4-48c2-a3b7-b0917a1cf171-319e8e72befff0c3] LEVEL 0 LOCAL STEP 18 GLOBAL STEP 18
16:44:15 - openhands:INFO: agent_controller.py:979 - [Agent Controller 762916a8-4fb4-48c2-a3b7-b0917a1cf171-319e8e72befff0c3] Set pending action: CmdRunAction (id=-1)
16:44:15 - openhands:INFO: resolve_issue.py:233 - **CmdRunAction (source=EventSource.AGENT, is_input=False)**
THOUGHT: Let me check if there's any implementation for handling the case when we're the listing agent by looking for related terms.
COMMAND:
grep -r "listing side" --include="*.ts" /workspace
16:44:16 - openhands:INFO: resolve_issue.py:233 - **CmdOutputObservation (source=EventSource.AGENT, exit code=1, metadata={
"exit_code": 1,
"pid": -1,
"username": "openhands",
"hostname": "aae885bd2acb",
"working_dir": "/workspace",
"py_interpreter_path": "/openhands/poetry/openhands-ai-5O4_aCHf-py3.12/bin/python",
"prefix": "",
"suffix": "\n[The command completed with exit code 1.]"
})**
--BEGIN AGENT OBSERVATION--
[The command completed with exit code 1.]
[Current working directory: /workspace]
[Python interpreter: /openhands/poetry/openhands-ai-5O4_aCHf-py3.12/bin/python]
[Command finished with exit code 1]
--END AGENT OBSERVATION--
16:44:16 - openhands:INFO: agent_controller.py:970 - [Agent Controller 762916a8-4fb4-48c2-a3b7-b0917a1cf171-319e8e72befff0c3] Cleared pending action after 0.64s: CmdRunAction (id=41)
16:44:16 - openhands:INFO: agent_controller.py:416 - [Agent Controller 762916a8-4fb4-48c2-a3b7-b0917a1cf171-319e8e72befff0c3] Stepping agent after event: CmdOutputObservation
[Agent Controller 762916a8-4fb4-48c2-a3b7-b0917a1cf171-319e8e72befff0c3] LEVEL 0 LOCAL STEP 19 GLOBAL STEP 19
16:44:22 - openhands:INFO: agent_controller.py:979 - [Agent Controller 762916a8-4fb4-48c2-a3b7-b0917a1cf171-319e8e72befff0c3] Set pending action: CmdRunAction (id=-1)
16:44:22 - openhands:INFO: resolve_issue.py:233 - **CmdRunAction (source=EventSource.AGENT, is_input=False)**
THOUGHT: Let me look for any code that checks if we're the listing agent.
COMMAND:
grep -r "isListingAgent" --include="*.ts" /workspace
16:44:22 - openhands:INFO: resolve_issue.py:233 - **CmdOutputObservation (source=EventSource.AGENT, exit code=0, metadata={
"exit_code": 0,
"pid": -1,
"username": "openhands",
"hostname": "aae885bd2acb",
"working_dir": "/workspace",
"py_interpreter_path": "/openhands/poetry/openhands-ai-5O4_aCHf-py3.12/bin/python",
"prefix": "",
"suffix": "\n[The command completed with exit code 0.]"
})**
--BEGIN AGENT OBSERVATION--
/workspace/lib/twilioUtils.ts: if (isListingAgent(userInfo)) {
/workspace/lib/twilioUtils.ts:function isListingAgent(
[The command completed with exit code 0.]
[Current working directory: /workspace]
[Python interpreter: /openhands/poetry/openhands-ai-5O4_aCHf-py3.12/bin/python]
[Command finished with exit code 0]
--END AGENT OBSERVATION--
16:44:22 - openhands:INFO: agent_controller.py:970 - [Agent Controller 762916a8-4fb4-48c2-a3b7-b0917a1cf171-319e8e72befff0c3] Cleared pending action after 0.64s: CmdRunAction (id=43)
16:44:22 - openhands:INFO: agent_controller.py:416 - [Agent Controller 762916a8-4fb4-48c2-a3b7-b0917a1cf171-319e8e72befff0c3] Stepping agent after event: CmdOutputObservation
[Agent Controller 762916a8-4fb4-48c2-a3b7-b0917a1cf171-319e8e72befff0c3] LEVEL 0 LOCAL STEP 20 GLOBAL STEP 20
16:44:28 - openhands:INFO: agent_controller.py:979 - [Agent Controller 762916a8-4fb4-48c2-a3b7-b0917a1cf171-319e8e72befff0c3] Set pending action: FileReadAction (id=-1)
16:44:28 - openhands:INFO: resolve_issue.py:233 - FileReadAction(path='/workspace/lib/twilioUtils.ts', start=0, end=-1, thought='Let me check the implementation of the isListingAgent function.', action=<ActionType.READ: 'read'>, security_risk=None, impl_source=<FileReadSource.OH_ACI: 'oh_aci'>, view_range=[1, 50])
16:44:28 - openhands:INFO: resolve_issue.py:233 - [Read from /workspace/lib/twilioUtils.ts is successful.]
Here's the result of running `cat -n` on /workspace/lib/twilioUtils.ts:
1 import { NextRequest } from 'next/server'
2 import { Phones } from './services/realEstate/constants/phoneNumbers'
3 import { Person, MR_ListingAgent, MR_User } from './types/sbPeople'
4 import { supabaseClient } from './services/shared/supabaseClient'
5 import { formatPhoneNumber } from './services/shared/phoneUtils'
6 import type { ConversationInstance } from 'twilio/lib/rest/conversations/v1/conversation'
7 import { Resend } from 'resend'
8
9 /**
10 * Removes potentially malicious script or code from input
11 * @param input The raw string to sanitize
12 * @returns Sanitized string
13 */
14 export function sanitizeInput(input: string): string {
15 // Convert input to string if it's not already
16 const str = String(input)
17
18 let sanitized = str
19
20 // Remove potential script tags
21 sanitized = sanitized.replace(
22 /<script\b[^<]*(?:(?!<\/script>)<[^<]*)*<\/script>/gi,
23 ''
24 )
25
26 // Remove potential onclick attributes
27 sanitized = sanitized.replace(/ on\w+="[^"]*"/g, '')
28
29 // Remove potential javascript: protocol
30 sanitized = sanitized.replace(/javascript:/gi, '')
31
32 // Remove backticks to prevent template string injection
33 sanitized = sanitized.replace(/`/g, '')
34
35 // Remove dollar signs and curly braces ONLY if they're not part of a URL
36 const urlPattern = /(https?:\/\/[^\s]+)/g
37 const urls = sanitized.match(urlPattern) || []
38 let nonUrlParts = sanitized
39
40 // Temporarily replace URLs with placeholders
41 urls.forEach((url, i) => {
42 nonUrlParts = nonUrlParts.replace(url, `__URL_${i}__`)
43 })
44
45 // Apply sanitization to non-URL parts
46 nonUrlParts = nonUrlParts.replace(/\$\{/g, '')
47 nonUrlParts = nonUrlParts.replace(/[;&|]/g, '')
48
49 // Restore URLs
50 urls.forEach((url, i) => {
16:44:28 - openhands:INFO: agent_controller.py:970 - [Agent Controller 762916a8-4fb4-48c2-a3b7-b0917a1cf171-319e8e72befff0c3] Cleared pending action after 0.03s: FileReadAction (id=45)
16:44:28 - openhands:INFO: agent_controller.py:416 - [Agent Controller 762916a8-4fb4-48c2-a3b7-b0917a1cf171-319e8e72befff0c3] Stepping agent after event: FileReadObservation
[Agent Controller 762916a8-4fb4-48c2-a3b7-b0917a1cf171-319e8e72befff0c3] LEVEL 0 LOCAL STEP 21 GLOBAL STEP 21
16:44:34 - openhands:INFO: agent_controller.py:979 - [Agent Controller 762916a8-4fb4-48c2-a3b7-b0917a1cf171-319e8e72befff0c3] Set pending action: CmdRunAction (id=-1)
16:44:34 - openhands:INFO: resolve_issue.py:233 - **CmdRunAction (source=EventSource.AGENT, is_input=False)**
THOUGHT: Let me check the implementation of the isListingAgent function.
COMMAND:
grep -n -A 20 "function isListingAgent" /workspace/lib/twilioUtils.ts
16:44:34 - openhands:INFO: resolve_issue.py:233 - **CmdOutputObservation (source=EventSource.AGENT, exit code=0, metadata={
"exit_code": 0,
"pid": -1,
"username": "openhands",
"hostname": "aae885bd2acb",
"working_dir": "/workspace",
"py_interpreter_path": "/openhands/poetry/openhands-ai-5O4_aCHf-py3.12/bin/python",
"prefix": "",
"suffix": "\n[The command completed with exit code 0.]"
})**
--BEGIN AGENT OBSERVATION--
246:function isListingAgent(
247- user: MR_User | MR_ListingAgent
248-): user is MR_ListingAgent {
249- return (
250- 'agent_id' in user && typeof (user as MR_ListingAgent).agent_id === 'string'
251- )
252-}
253-
254-/**
255- * Builds the basic user description with name and status
256- */
257-function buildBasicDescription(
258- phoneNumber: string,
259- userInfo: MR_ListingAgent | MR_User | null
260-): string {
261- let name: string
262- if (!userInfo) {
263- name = `${phoneNumber} (please add user into either mr_listingagents or mr_users)`
264- } else if (userInfo.first_name && userInfo.last_name) {
265- name = `${userInfo.first_name} ${userInfo.last_name}`
266- } else if (userInfo.first_name) {
[The command completed with exit code 0.]
[Current working directory: /workspace]
[Python interpreter: /openhands/poetry/openhands-ai-5O4_aCHf-py3.12/bin/python]
[Command finished with exit code 0]
--END AGENT OBSERVATION--
16:44:34 - openhands:INFO: agent_controller.py:970 - [Agent Controller 762916a8-4fb4-48c2-a3b7-b0917a1cf171-319e8e72befff0c3] Cleared pending action after 0.64s: CmdRunAction (id=47)
16:44:34 - openhands:INFO: agent_controller.py:416 - [Agent Controller 762916a8-4fb4-48c2-a3b7-b0917a1cf171-319e8e72befff0c3] Stepping agent after event: CmdOutputObservation
[Agent Controller 762916a8-4fb4-48c2-a3b7-b0917a1cf171-319e8e72befff0c3] LEVEL 0 LOCAL STEP 22 GLOBAL STEP 22
16:44:42 - openhands:INFO: agent_controller.py:979 - [Agent Controller 762916a8-4fb4-48c2-a3b7-b0917a1cf171-319e8e72befff0c3] Set pending action: CmdRunAction (id=-1)
16:44:42 - openhands:INFO: resolve_issue.py:233 - **CmdRunAction (source=EventSource.AGENT, is_input=False)**
THOUGHT: Let me check if there's any code that determines if we're the listing agent for a property.
COMMAND:
grep -r "listing agent" --include="*.ts" /workspace | grep -i "our\|we"
16:44:43 - openhands:INFO: resolve_issue.py:233 - **CmdOutputObservation (source=EventSource.AGENT, exit code=0, metadata={
"exit_code": 0,
"pid": -1,
"username": "openhands",
"hostname": "aae885bd2acb",
"working_dir": "/workspace",
"py_interpreter_path": "/openhands/poetry/openhands-ai-5O4_aCHf-py3.12/bin/python",
"prefix": "",
"suffix": "\n[The command completed with exit code 0.]"
})**
--BEGIN AGENT OBSERVATION--
/workspace/__tests__/showami_instruction_forwarding.test.ts: * details are not lost in the communication chain between listing agents and showing agents.
/workspace/__tests__/tour_test_utils.ts: message: `Hi! I'd be happy to help you schedule a showing for ${property.formattedAddress}. Let me check with the listing agent about availability for tomorrow at 9am. I'll get back to you as soon as I hear back.`,
/workspace/__tests__/tour_test_utils.ts: message: `The listing agent isn't available tomorrow at 9am, but they suggested Thursday at 9am instead. Would that work for you?`,
/workspace/__tests__/tour_test_utils.ts: message: `Great news! The listing agent is available this Friday at 10am to show you ${property.formattedAddress}. I've confirmed the appointment for you. Is there anything specific you'd like to know about the property before your showing?`,
/workspace/__tests__/for_client_tour_scheduling_scenario.test.ts: * 2. The listing agent/realtor who manages the property
/workspace/__tests__/for_client_tour_scheduling_scenario.test.ts: * - Forward requests to the appropriate listing agent
/workspace/__tests__/for_client_tour_scheduling_scenario.test.ts: * - Process responses from the listing agent
/workspace/__tests__/for_client_tour_scheduling_scenario.test.ts: // 1. The message should indicate that the system is contacting the listing agent
/workspace/__tests__/for_client_tour_scheduling_scenario.test.ts: "System should try to find a listing agent"
/workspace/__tests__/for_client_tour_scheduling_scenario.test.ts: // Specifically log the message sent to listing agent
/workspace/__tests__/for_client_tour_scheduling_scenario.test.ts: console.log("Message sent to listing agent:", listingAgentMessage || "No message sent to listing agent");
/workspace/__tests__/for_client_tour_scheduling_scenario.test.ts: "System should text the listing agent"
/workspace/__tests__/property_tour_request.test.ts: * 2. The assistant processes the request and forwards it to the listing agent
/workspace/__tests__/self_tour_scheduling_scenario.test.ts: // Mock the listing agent manager
/workspace/__tests__/self_tour_scheduling_scenario.test.ts: // 1. The message should indicate that the system is contacting the listing agent
/workspace/__tests__/self_tour_scheduling_scenario.test.ts: "System should try to find a listing agent"
/workspace/__tests__/self_tour_scheduling_scenario.test.ts: // Specifically log the message sent to listing agent
/workspace/__tests__/self_tour_scheduling_scenario.test.ts: console.log("Message sent to listing agent:", listingAgentMessage || "No message sent to listing agent");
/workspace/__tests__/self_tour_scheduling_scenario.test.ts: "System should text the listing agent"
/workspace/__tests__/self_tour_scheduling_scenario.test.ts: // Simulate the listing agent's response to the assistant's inquiry
/workspace/__tests__/self_tour_scheduling_scenario.test.ts: console.log("Message forwarded to listing agent:", messageSentToAgent);
/workspace/__tests__/self_tour_scheduling_scenario.test.ts: console.log("Message forwarded to listing agent:", messageSentToAgent);
/workspace/lib/services/email/processors/genericEmailProcessor.ts: // If we have a zpid, try to get the listing agent from mr_properties
/workspace/lib/services/promptDiff/testScenarios.ts: "Based on the model diagram and listing agent description, I suspect 1269's yard area is private, yes, 'massive sliding glass doors opening to private terraces and garden'. I suspect the 1269 is actually mislisted and the listing is for 1267 if you wandered your way to the home diagram which is the last image in the zillow listing. I asked the listing agent to double check this, but it's late so they might not respond for a sec"
/workspace/lib/services/promptDiff/testScenarios.ts: "Liked “Based on the model diagram and listing agent description, I suspect 1269's yard area is private, yes, 'massive sliding glass doors opening to private terraces and garden'. I suspect the 1269 is actually mislisted and the listing is for 1267 if you wandered your way to the home diagram which is the last image in the zillow listing. I asked the listing agent to double check this, but it's late so they might not respond for a sec”\n\n<Sent 3 weeks ago: Tuesday, February 4, 12:04 AM>"
/workspace/lib/services/promptDiff/testScenarios.ts: 'Sure! I’ll coordinate with the listing agent and confirm the exact time soon. I want to see it as well. TREEHOUSE!!'
/workspace/lib/services/promptDiff/testScenarios.ts: 'Liked “Perfect, checking with the listing agent now—will confirm.”\n\n<Sent 2 weeks ago: Tuesday, February 11, 6:29 PM>'
/workspace/lib/services/promptDiff/testScenarios.ts: 'Also listing agent for 50 Valley St pinged me saying offers are due Wednesday the 19th in case you were interested. '
/workspace/lib/services/promptDiff/testScenarios.ts: "content": "<call>\n <summary>The provided transcript only contains an automated voice message from Paul Wong with Skybox Realty asking the caller to leave a message. There was no actual conversation between Raffi Isanians (buyer's agent) and a listing agent to summarize. No property details, showings, offers, negotiations, action items, or deadlines were discussed.</summary>\n </call>"
/workspace/lib/services/promptDiff/testScenarios.ts: "content": "SYSTEM PROMPT: \nYou are Raffi Isanians, a Realtor at Kingston Vale Realty. \n\nYour job is to schedule showings by texting other realtors who are listing agents, and relay information that the listing agent tells you to clients via 'replyToClient'. \n\nEvery single message coming to you will be from realtors that you've messaged prior.\n\nWhen handling showing times:\n1. Always include the complete property address\n2. Confirm the exact date and time\n\nDo not respond with any details about the business. \n\nDon't reduce our negotiating position by saying things like the clients are very interested in a property. Keep it cool.\n\nThe answers will be sent over text message, so make the answers SMS friendly. Do not use markdown. DO NOT USE MARKDOWN.\n\nImportant note about 'supra':\nIf an agent mentions a 'supra' or 'lockbox', it means the property has a secure key storage device that allows me access to the property. In this case, the client can be walked through by me to see the property at any time, subject to any restrictions mentioned by the agent. When a supra is mentioned, confirm with the client that they can see the property at their preferred time, but always check for any specific instructions or limitations provided by the listing agent.\nI will always be accompanying clients on their tours.\n\nToday's date is Saturday, 12 April 2025 5:16 PM.\n\nTool call results:\n\n[\n {\n \"type\": \"tool_use\",\n \"id\": \"toolu_01A5uMmzZDT6PVqvDBdjLpf9\",\n \"name\": \"pullClientMessages\",\n \"input\": {}\n }\n]\n\n[\n {\n \"type\": \"tool_result\",\n \"tool_use_id\": \"toolu_01A5uMmzZDT6PVqvDBdjLpf9\",\n \"content\": \"The client is interested in viewing unit 11C at 301 Main Street. The property showing has been confirmed for tomorrow (Sunday, April 13) at 8am, and the owner will leave the door unlocked for them. There's free bike parking in the garage, plus a bike room available for a fee. The client (Marilyn) had previously toured this unit and liked it enough to want her daughter Audrey to see it. They're looking at properties in San Francisco as a second home/investment, particularly seeking walkable neighborhoods with proximity to water.\"\n }\n]"
/workspace/lib/services/promptDiff/testScenarios.ts: "content": "Possible 2-bed+ in Russian Hill/Pac Heights under $2M: \n• 1070 Green St APT 102 (zillow.com/homedetails/1070-Green-St-APT-102-San-Francisco-CA-94133/15065999_zpid/) \n• 1179 Filbert St (zillow.com/homedetails/1179-Filbert-St-San-Francisco-CA-94109/15065507_zpid/) \n• 2121 Laguna St #100 (zillow.com/homedetails/2121-Laguna-St-100-San-Francisco-CA-94115/15074339_zpid/) \n\nYes, we can tour 301 Main, 829 Folsom, and 35 Dolores tomorrow. Can meet you at 230 at 301 main if that works! \n\nA property is often contingent because of a pending inspection or financing. It may come back on market if those contingencies aren’t resolved. I can check with the listing agent for specifics."
/workspace/lib/services/promptDiff/testScenarios.ts: "content": `${client_facing_text_prompts[0]} \n\nTool call results:\n\n{\n \"content\": null,\n \"tool_calls\": [\n {\n \"id\": \"call_kmOcaRFFmAlMoJBflWb9JP2d\",\n \"type\": \"function\",\n \"function\": {\n \"name\": \"convertShortAddressToFullAddress\",\n \"arguments\": \"{\\\"address\\\":\\\"78 Stanton\\\"}\"\n }\n }\n ],\n \"refusal\": null\n}\n\n{\n \"content\": \"{\\n \\\"fullAddress\\\": \\\"78 Stanton Street, San Francisco, CA 94114\\\",\\n \\\"isExistingProperty\\\": false\\n}\"\n}\n\n{\n \"content\": null,\n \"tool_calls\": [\n {\n \"id\": \"call_sapAUT54AmlvJrouRDLGQuXS\",\n \"type\": \"function\",\n \"function\": {\n \"name\": \"getSimplifiedPropertyDetails\",\n \"arguments\": \"{\\\"address\\\":\\\"78 Stanton Street, San Francisco, CA 94114\\\"}\"\n }\n }\n ],\n \"refusal\": null\n}\n\n{\n \"content\": \"{\\n \\\"address\\\": \\\"78 Stanton St, San Francisco, CA 94114\\\",\\n \\\"price\\\": 1495000,\\n \\\"bedrooms\\\": 3,\\n \\\"bathrooms\\\": 3,\\n \\\"livingArea\\\": 2163,\\n \\\"yearBuilt\\\": 1910,\\n \\\"homeType\\\": \\\"SINGLE_FAMILY\\\",\\n \\\"description\\\": \\\"Don't let the proximity to Market St fool you - 78 Stanton is a 3bd/3ba Victorian abode situated in a cul-de-sac just steps away from Kite Hill, Castro and Downtown Noe Valley. The versatile 2,163 SF (per graphic artist) property can serve as a 2-family dwelling or a single-family home with income potential. The main residence, a 2-bed, 2-bath, 1,443 SF (per graphic artist) features a formal living room w/ projection screen, an updated chef's kitchen with Wolf range and high-end appliances and immediately adjacent to the dining room - ideal for entertaining. 2 light-filled bedrooms and washer/dryer on the upper level, including a primary suite with private deck. The fully equipped lower unit is a 1bd/1ba, 720 SF (per graphic artist), and offers a separate entrance, deck, full kitchen, in-unit laundry, and ample storage. Beautifully landscaped front and rear yards, two exterior storage sheds, 2024-installed roof. Easy access to Kite Hill at the end of the cul-de-sac leads you down to access shops, bars and restaurants along Castro Street. Close proximity to downtown Noe Valley, and Harvey Milk Plaza for easy public transit to downtown, FIDI, etc.\\\",\\n \\\"monthlyHoaFee\\\": null,\\n \\\"heating\\\": [\\n \\\"Central\\\"\\n ],\\n \\\"cooling\\\": [\\n \\\"None\\\"\\n ],\\n \\\"appliances\\\": [\\n \\\"Dishwasher\\\",\\n \\\"Disposal\\\",\\n \\\"Free-Standing Gas Range\\\",\\n \\\"Free-Standing Refrigerator\\\",\\n \\\"Range Hood\\\",\\n \\\"Microwave\\\",\\n \\\"Washer/Dryer Stacked\\\"\\n ],\\n \\\"schools\\\": [\\n {\\n \\\"name\\\": \\\"Milk (Harvey) Civil Rights Elementary School\\\",\\n \\\"rating\\\": 6,\\n \\\"level\\\": \\\"Elementary\\\",\\n \\\"grades\\\": \\\"K-5\\\",\\n \\\"distance\\\": 0.3\\n },\\n {\\n \\\"name\\\": \\\"Everett Middle School\\\",\\n \\\"rating\\\": 2,\\n \\\"level\\\": \\\"Middle\\\",\\n \\\"grades\\\": \\\"6-8\\\",\\n \\\"distance\\\": 0.8\\n },\\n {\\n \\\"name\\\": \\\"Mission High School\\\",\\n \\\"rating\\\": 4,\\n \\\"level\\\": \\\"High\\\",\\n \\\"grades\\\": \\\"9-12\\\",\\n \\\"distance\\\": 0.9\\n }\\n ],\\n \\\"url\\\": \\\"https://www.zillow.com/homedetails/78-Stanton-St-San-Francisco-CA-94114/15129869_zpid/\\\"\\n}\"\n}\n\n{\n \"content\": null,\n \"tool_calls\": [\n {\n \"id\": \"call_HFm3pcvna0gHt4rnwDlGGEoP\",\n \"type\": \"function\",\n \"function\": {\n \"name\": \"askListingAgent\",\n \"arguments\": \"{\\n \\\"address\\\": \\\"78 Stanton Street, San Francisco, CA 94114\\\",\\n \\\"message\\\": \\\"My client is interested in 78 Stanton. Any sense of the seller's flexibility on price or how low they might consider going?\\\"\\n}\"\n }\n }\n ],\n \"refusal\": null\n}\n\n{\n \"content\": \"Sent message: \\\"My client is interested in 78 Stanton. Any sense of the seller's flexibility on price or how low they might consider going?\\\" to listing agent. Noting that you're interested in this property. Here's the property info:\\n\\n{\\n \\\"address\\\": \\\"78 Stanton St, San Francisco, CA 94114\\\",\\n \\\"price\\\": 1495000,\\n \\\"bedrooms\\\": 3,\\n \\\"bathrooms\\\": 3,\\n \\\"livingArea\\\": 2163,\\n \\\"yearBuilt\\\": 1910,\\n \\\"homeType\\\": \\\"SINGLE_FAMILY\\\",\\n \\\"description\\\": \\\"Don't let the proximity to Market St fool you - 78 Stanton is a 3bd/3ba Victorian abode situated in a cul-de-sac just steps away from Kite Hill, Castro and Downtown Noe Valley. The versatile 2,163 SF (per graphic artist) property can serve as a 2-family dwelling or a single-family home with income potential. The main residence, a 2-bed, 2-bath, 1,443 SF (per graphic artist) features a formal living room w/ projection screen, an updated chef's kitchen with Wolf range and high-end appliances and immediately adjacent to the dining room - ideal for entertaining. 2 light-filled bedrooms and washer/dryer on the upper level, including a primary suite with private deck. The fully equipped lower unit is a 1bd/1ba, 720 SF (per graphic artist), and offers a separate entrance, deck, full kitchen, in-unit laundry, and ample storage. Beautifully landscaped front and rear yards, two exterior storage sheds, 2024-installed roof. Easy access to Kite Hill at the end of the cul-de-sac leads you down to access shops, bars and restaurants along Castro Street. Close proximity to downtown Noe Valley, and Harvey Milk Plaza for easy public transit to downtown, FIDI, etc.\\\",\\n \\\"monthlyHoaFee\\\": null,\\n \\\"heating\\\": [\\n \\\"Central\\\"\\n ],\\n \\\"cooling\\\": [\\n \\\"None\\\"\\n ],\\n \\\"appliances\\\": [\\n \\\"Dishwasher\\\",\\n \\\"Disposal\\\",\\n \\\"Free-Standing Gas Range\\\",\\n \\\"Free-Standing Refrigerator\\\",\\n \\\"Range Hood\\\",\\n \\\"Microwave\\\",\\n \\\"Washer/Dryer Stacked\\\"\\n ],\\n \\\"schools\\\": [\\n {\\n \\\"name\\\": \\\"Milk (Harvey) Civil Rights Elementary School\\\",\\n \\\"rating\\\": 6,\\n \\\"level\\\": \\\"Elementary\\\",\\n \\\"grades\\\": \\\"K-5\\\",\\n \\\"distance\\\": 0.3\\n },\\n {\\n \\\"name\\\": \\\"Everett Middle School\\\",\\n \\\"rating\\\": 2,\\n \\\"level\\\": \\\"Middle\\\",\\n \\\"grades\\\": \\\"6-8\\\",\\n \\\"distance\\\": 0.8\\n },\\n {\\n \\\"name\\\": \\\"Mission High School\\\",\\n \\\"rating\\\": 4,\\n \\\"level\\\": \\\"High\\\",\\n \\\"grades\\\": \\\"9-12\\\",\\n \\\"distance\\\": 0.9\\n }\\n ],\\n \\\"url\\\": \\\"https://www.zillow.com/homedetails/78-Stanton-St-San-Francisco-CA-94114/15129869_zpid/\\\"\\n}\"\n}\n\n PullComps: {\"comps\":[{\"bathrooms\":2,\"newConstructionType\":null,\"lotAreaUnits\":\"Square Feet\",\"formattedChip\":{\"location\":[{\"fullValue\":\"436 Capp St\"},{\"fullValue\":\"San Francisco, CA 94110\"}]},\"isPremierBuilder\":false,\"isShowcaseListing\":null,\"hdpUrl\":\"/homedetails/436-Capp-St-San-Francisco-CA-94110/15144849_zpid/\",\"lotAreaValue\":2448.072,\"parentRegion\":{\"name\":\"Mission\"},\"address\":{\"city\":\"San Francisco\",\"state\":\"CA\",\"streetAddress\":\"436 Capp St\",\"zipcode\":\"94110\"},\"state\":\"CA\",\"attributionInfo\":{\"agentPhoneNumber\":null,\"trueStatus\":null,\"providerLogo\":null,\"mlsId\":\"424078468\",\"brokerName\":\"Corcoran Icon Properties\",\"mlsName\":null,\"brokerPhoneNumber\":null,\"agentName\":\"Eileen M. Mougeot DRE #00809994\"},\"latitude\":37.759644,\"homeStatus\":\"RECENTLY_SOLD\",\"listing_sub_type\":{\"is_FSBA\":false,\"is_forAuction\":false,\"is_comingSoon\":false,\"is_foreclosure\":false,\"is_bankOwned\":false,\"is_newHome\":false,\"is_FSBO\":false},\"price\":1420000,\"listingMetadata\":{\"comminglingCategoryIsRulesApplicable\":true},\"bedrooms\":2,\"propertyTypeDimension\":\"Single Family\",\"listingTypeDimension\":\"Unknown Listed By\",\"lotSize\":2448,\"miniCardPhotos\":[{\"url\":\"https://photos.zillowstatic.com/fp/8c284661978ecfa21234cc51f22313bc-p_c.jpg\"}],\"zpid\":15144849,\"hdpTypeDimension\":\"RecentlySold\",\"livingArea\":1400,\"longitude\":-122.41834,\"livingAreaUnitsShort\":\"sqft\",\"providerListingID\":null,\"homeType\":\"SINGLE_FAMILY\",\"currency\":\"USD\",\"livingAreaUnits\":\"Square Feet\",\"livingAreaValue\":1400},{\"bathrooms\":1,\"newConstructionType\":null,\"lotAreaUnits\":\"Square Feet\",\"formattedChip\":{\"location\":[{\"fullValue\":\"1361 Stevenson St\"},{\"fullValue\":\"San Francisco, CA 94103\"}]},\"isPremierBuilder\":false,\"isShowcaseListing\":null,\"hdpUrl\":\"/homedetails/1361-Stevenson-St-San-Francisco-CA-94103/15142462_zpid/\",\"lotAreaValue\":1705,\"parentRegion\":{\"name\":\"South of Market\"},\"address\":{\"city\":\"San Francisco\",\"state\":\"CA\",\"streetAddress\":\"1361 Stevenson St\",\"zipcode\":\"94103\"},\"state\":\"CA\",\"attributionInfo\":{\"agentPhoneNumber\":null,\"trueStatus\":null,\"providerLogo\":null,\"mlsId\":null,\"brokerName\":null,\"mlsName\":null,\"brokerPhoneNumber\":null,\"agentName\":null},\"latitude\":37.770645,\"homeStatus\":\"RECENTLY_SOLD\",\"listing_sub_type\":{\"is_FSBA\":false,\"is_forAuction\":false,\"is_comingSoon\":false,\"is_foreclosure\":false,\"is_bankOwned\":false,\"is_newHome\":false,\"is_FSBO\":false},\"price\":1200000,\"listingMetadata\":{\"comminglingCategoryIsRulesApplicable\":false},\"bedrooms\":3,\"propertyTypeDimension\":\"Single Family\",\"listingTypeDimension\":\"Unknown Listed By\",\"lotSize\":1705,\"miniCardPhotos\":[{\"url\":\"https://maps.googleapis.com/maps/api/staticmap?mobile=false&sensor=true&maptype=satellite&size=316x234&zoom=17&center=37.77064514160156,-122.42145538330078&key=AIzaSyBWYJWCA8FNMQvSe_k3LKfDGJaEgdKwsco&&signature=aI552MKwMCbcsRJIIBADUTnN6xY=\"}],\"zpid\":15142462,\"hdpTypeDimension\":\"RecentlySold\",\"livingArea\":1540,\"longitude\":-122.421455,\"livingAreaUnitsShort\":\"sqft\",\"providerListingID\":null,\"homeType\":\"SINGLE_FAMILY\",\"currency\":\"USD\",\"livingAreaUnits\":\"Square Feet\",\"livingAreaValue\":1540},{\"bathrooms\":3,\"newConstructionType\":null,\"lotAreaUnits\":\"Square Feet\",\"formattedChip\":{\"location\":[{\"fullValue\":\"3311 20th St\"},{\"fullValue\":\"San Francisco, CA 94110\"}]},\"isPremierBuilder\":false,\"isShowcaseListing\":null,\"hdpUrl\":\"/homedetails/3311-20th-St-San-Francisco-CA-94110/440311828_zpid/\",\"lotAreaValue\":4288,\"parentRegion\":{\"name\":\"Mission\"},\"address\":{\"city\":\"San Francisco\",\"state\":\"CA\",\"streetAddress\":\"3311 20th St\",\"zipcode\":\"94110\"},\"state\":\"CA\",\"attributionInfo\":{\"agentPhoneNumber\":null,\"trueStatus\":null,\"providerLogo\":null,\"mlsId\":\"424064835\",\"brokerName\":\"KW Advisors\",\"mlsName\":null,\"brokerPhoneNumber\":null,\"agentName\":\"Tim A. Brown DRE #00580970\"},\"latitude\":37.75874,\"homeStatus\":\"RECENTLY_SOLD\",\"listing_sub_type\":{\"is_FSBA\":false,\"is_forAuction\":false,\"is_comingSoon\":false,\"is_foreclosure\":false,\"is_bankOwned\":false,\"is_newHome\":false,\"is_FSBO\":false},\"price\":850000,\"listingMetadata\":{\"comminglingCategoryIsRulesApplicable\":true},\"bedrooms\":4,\"propertyTypeDimension\":\"Single Family\",\"listingTypeDimension\":\"Unknown Listed By\",\"lotSize\":4288,\"miniCardPhotos\":[{\"url\":\"https://photos.zillowstatic.com/fp/55e1943d543f89869ece3cd24626520c-p_c.jpg\"}],\"zpid\":440311828,\"hdpTypeDimension\":\"RecentlySold\",\"livingArea\":1417,\"longitude\":-122.41505,\"livingAreaUnitsShort\":\"sqft\",\"providerListingID\":null,\"homeType\":\"SINGLE_FAMILY\",\"currency\":\"USD\",\"livingAreaUnits\":\"Square Feet\",\"livingAreaValue\":1417},{\"bathrooms\":1,\"newConstructionType\":null,\"lotAreaUnits\":\"Square Feet\",\"formattedChip\":{\"location\":[{\"fullValue\":\"176 Linda St\"},{\"fullValue\":\"San Francisco, CA 94110\"}]},\"isPremierBuilder\":false,\"isShowcaseListing\":null,\"hdpUrl\":\"/homedetails/176-Linda-St-San-Francisco-CA-94110/443737910_zpid/\",\"lotAreaValue\":1825.164,\"parentRegion\":{\"name\":\"Mission Dolores\"},\"address\":{\"city\":\"San Francisco\",\"state\":\"CA\",\"streetAddress\":\"176 Linda St\",\"zipcode\":\"94110\"},\"state\":\"CA\",\"attributionInfo\":{\"agentPhoneNumber\":null,\"trueStatus\":null,\"providerLogo\":null,\"mlsId\":\"425000056\",\"brokerName\":\"Compass\",\"mlsName\":null,\"brokerPhoneNumber\":null,\"agentName\":\"Laura A. Rogers DRE #01307471\"},\"latitude\":37.758938,\"homeStatus\":\"RECENTLY_SOLD\",\"listing_sub_type\":{\"is_FSBA\":false,\"is_forAuction\":false,\"is_comingSoon\":false,\"is_foreclosure\":false,\"is_bankOwned\":false,\"is_newHome\":false,\"is_FSBO\":false},\"price\":700000,\"listingMetadata\":{\"comminglingCategoryIsRulesApplicable\":true},\"bedrooms\":2,\"propertyTypeDimension\":\"Single Family\",\"listingTypeDimension\":\"Unknown Listed By\",\"lotSize\":1825,\"miniCardPhotos\":[{\"url\":\"https://maps.googleapis.com/maps/api/streetview?location=176+Linda+St%2C+San+Francisco%2C+CA+94110&size=316x234&key=AIzaSyARFMLB1na-BBWf7_R3-5YOQQaHqEJf6RQ&source=outdoor&&signature=H4ACbLdXrhUrDEbGIuwGosPa4HU=\"}],\"zpid\":443737910,\"hdpTypeDimension\":\"RecentlySold\",\"livingArea\":0,\"longitude\":-122.42299,\"livingAreaUnitsShort\":\"sqft\",\"providerListingID\":null,\"homeType\":\"SINGLE_FAMILY\",\"currency\":\"USD\",\"livingAreaUnits\":\"Square Feet\",\"livingAreaValue\":0},{\"bathrooms\":2,\"newConstructionType\":null,\"lotAreaUnits\":\"Square Feet\",\"formattedChip\":{\"location\":[{\"fullValue\":\"363 Valencia St APT 7\"},{\"fullValue\":\"San Francisco, CA 94103\"}]},\"isPremierBuilder\":false,\"isShowcaseListing\":null,\"hdpUrl\":\"/homedetails/363-Valencia-St-APT-7-San-Francisco-CA-94103/63197150_zpid/\",\"lotAreaValue\":4962,\"parentRegion\":{\"name\":\"Mission\"},\"address\":{\"city\":\"San Francisco\",\"state\":\"CA\",\"streetAddress\":\"363 Valencia St APT 7\",\"zipcode\":\"94103\"},\"state\":\"CA\",\"attributionInfo\":{\"agentPhoneNumber\":null,\"trueStatus\":null,\"providerLogo\":null,\"mlsId\":\"424081841\",\"brokerName\":\"Compass\",\"mlsName\":null,\"brokerPhoneNumber\":null,\"agentName\":\"Isabelle Grotte DRE #01895115\"},\"latitude\":37.76717,\"homeStatus\":\"RECENTLY_SOLD\",\"listing_sub_type\":{\"is_FSBA\":false,\"is_forAuction\":false,\"is_comingSoon\":false,\"is_foreclosure\":false,\"is_bankOwned\":false,\"is_newHome\":false,\"is_FSBO\":false},\"price\":1265000,\"listingMetadata\":{\"comminglingCategoryIsRulesApplicable\":true},\"bedrooms\":1,\"propertyTypeDimension\":\"Townhouse\",\"listingTypeDimension\":\"Unknown Listed By\",\"lotSize\":4962,\"miniCardPhotos\":[{\"url\":\"https://photos.zillowstatic.com/fp/9972f28da1f7bd5f3a86a1d9186f8d4d-p_c.jpg\"}],\"zpid\":63197150,\"hdpTypeDimension\":\"RecentlySold\",\"livingArea\":1451,\"longitude\":-122.42195,\"livingAreaUnitsShort\":\"sqft\",\"providerListingID\":null,\"homeType\":\"TOWNHOUSE\",\"currency\":\"USD\",\"livingAreaUnits\":\"Square Feet\",\"livingAreaValue\":1451}]}`
/workspace/lib/services/realEstate/prompts/talksToClientPrompt.ts:When a client asks us a question about the property, answer if you know the answer, but if you don't ask the listing agent via the 'askListingAgent' function.
/workspace/lib/services/realEstate/prompts/talksToRealtorPrompt.ts:Your job is to schedule showings by texting other realtors who are listing agents, and relay information that the listing agent tells you to clients via 'replyToClient'.
/workspace/lib/services/realEstate/prompts/talksToRealtorPrompt.ts:negotiateShowingTimeWithClient: Used for negotiating showing times with the client since the listing agent proposed a different time to do the showing AFTER the initial request for the showing. When there's a scheduling conflict, acknowledge it professionally and clearly communicate any alternative times proposed by the agent. Use this function to update the client on the agent's availability to do the showing. This function sends the text asking the question, after which your task is complete.
/workspace/lib/services/realEstate/prompts/talksToRealtorPrompt.ts:confirmShowingWithClient: Use this function when the proposed showing time has been agreed and confirmed upon by the listing agent. Make sure to provide both the message to forward to the client as well as 'showingTime', which is the YYYY-MM-DD HH:mm format. Always send final tour confirmation to the client if it seems like the realtor is confirming. Include the exact date and time in the message, and mention that you'll provide showing instructions shortly. Write it in a friendly tone. This function sends the text asking the question, after which your task is complete.
/workspace/lib/services/realEstate/prompts/talksToRealtorPrompt.ts:pullClientMessages: Use this function to get the interested client's message history. This can be used anytime to understand the realtor's responses, but is especially useful during tour scheduling to ensure both parties agree on showing times. This will automatically pull the right client's messages for the property that realtor is the listing agent for.
/workspace/lib/services/realEstate/core/propertyAccessExtractor.ts: // Log the error but don't fail - we'll try the listing agent's ZPID next
/workspace/lib/services/realEstate/core/propertyAccessExtractor.ts: zpid, // The ZPID we found either from Zillow API or listing agent
/workspace/lib/services/realEstate/core/callSummaryNotificationService.ts:Example good format: "Just spoke with the listing agent about your offer on 123 Main St. They're reviewing it today and will get back to us by 5pm. They mentioned they have another offer to consider as well."
/workspace/lib/services/realEstate/configs/realtorTools.ts: "Use this function to get the interested client's message history. This can be used anytime to understand the realtor's responses, but is especially useful during tour scheduling to ensure both parties agree on showing times. This will automatically pull the right client's messages for the property that realtor is the listing agent for.",
/workspace/lib/services/realEstate/configs/clientTools.ts: "Used to confirm a showing time with the realtor listing agent that a time has been agreed upon with the client. This function should be used when both parties, client and listing agent, have agreed on a specific time. The time in the message should be in the format 'YYYY-MM-DD HH:mm' (e.g. '2024-03-15 14:30'). This is a 24-hour format without timezone.",
/workspace/lib/services/realEstate/configs/clientTools.ts: // description: "Use this function to get the listing real estate agent's message history. This can be used anytime to understand the realtor's responses, but is especially useful during tour scheduling to ensure both client and listing agent agree on showing times. This will automatically pull the right listing agent's messages for the property that client is interested in.",
/workspace/lib/services/realEstate/openai_assistant_init/listingAgentAssistantCreator.ts:Your role is to maintain accurate and up-to-date records about listing agents to improve communication and coordination.
/workspace/lib/services/twilio/call_utils/callSummary.ts: const summaryPrompt = `Summarize this conversation between Raffi Isanians (buyer's agent) and another listing agent/realtor. Focus on key points like property details, showings, offers, negotiations, and any action items or important deadlines mentioned.
/workspace/lib/services/twilio/call_utils/callNotes.ts: const prompt = `You are analyzing a call between Raffi Isanians (real estate agent) and a listing agent about property ${propertyInfo.propertyAddress}.
/workspace/lib/services/twilio/call_utils/callNotes.ts: // This is a realtor (likely a listing agent for a property our client is interested in)
/workspace/lib/services/twilio/call_utils/draftGenerationFromCalls.ts: const promptForClientMessage = `This is a summary of a call related to a property that your client is interested in. The call might be between myself (Raffi Isanians) and the listing agent, or between two agents discussing the property:
/workspace/lib/services/buyer_flow/showing.ts: const clientSummary = `Hi ${clientName.split(' ')[0]}, I've scheduled tours for the following properties on ${formattedStartTime.split(',')[0]}:\n\n${orderedAddresses.join('\n')}\n\nI'll confirm each appointment with the listing agents and get back to you with final confirmations.`
/workspace/app/api/showing-request/[hash]/route.ts: `You're confirmed for the showing at <strong>${propertyAddress}</strong> at ${formattedTime}!<br>The phone number for the client is listed in the calendar invite. We've notified the listing agent and they'll be ready for your visit.${property.showami_email ? `<br><br>A calendar invitation has been sent to the showing agent at <strong>${property.showami_email}</strong>.` : ''}`
[The command completed with exit code 0.]
[Current working directory: /workspace]
[Python interpreter: /openhands/poetry/openhands-ai-5O4_aCHf-py3.12/bin/python]
[Command finished with exit code 0]
--END AGENT OBSERVATION--
16:44:43 - openhands:INFO: agent_controller.py:970 - [Agent Controller 762916a8-4fb4-48c2-a3b7-b0917a1cf171-319e8e72befff0c3] Cleared pending action after 0.64s: CmdRunAction (id=49)
16:44:43 - openhands:INFO: agent_controller.py:416 - [Agent Controller 762916a8-4fb4-48c2-a3b7-b0917a1cf171-319e8e72befff0c3] Stepping agent after event: CmdOutputObservation
[Agent Controller 762916a8-4fb4-48c2-a3b7-b0917a1cf171-319e8e72befff0c3] LEVEL 0 LOCAL STEP 23 GLOBAL STEP 23
16:44:51 - openhands:INFO: agent_controller.py:979 - [Agent Controller 762916a8-4fb4-48c2-a3b7-b0917a1cf171-319e8e72befff0c3] Set pending action: CmdRunAction (id=-1)
16:44:51 - openhands:INFO: resolve_issue.py:233 - **CmdRunAction (source=EventSource.AGENT, is_input=False)**
THOUGHT: Let me check if there's any code that determines if we're the listing agent for a property.
COMMAND:
grep -r "isOurListing" --include="*.ts" /workspace
16:44:51 - openhands:INFO: resolve_issue.py:233 - **CmdOutputObservation (source=EventSource.AGENT, exit code=1, metadata={
"exit_code": 1,
"pid": -1,
"username": "openhands",
"hostname": "aae885bd2acb",
"working_dir": "/workspace",
"py_interpreter_path": "/openhands/poetry/openhands-ai-5O4_aCHf-py3.12/bin/python",
"prefix": "",
"suffix": "\n[The command completed with exit code 1.]"
})**
--BEGIN AGENT OBSERVATION--
[The command completed with exit code 1.]
[Current working directory: /workspace]
[Python interpreter: /openhands/poetry/openhands-ai-5O4_aCHf-py3.12/bin/python]
[Command finished with exit code 1]
--END AGENT OBSERVATION--
16:44:51 - openhands:INFO: agent_controller.py:970 - [Agent Controller 762916a8-4fb4-48c2-a3b7-b0917a1cf171-319e8e72befff0c3] Cleared pending action after 0.64s: CmdRunAction (id=51)
16:44:51 - openhands:INFO: agent_controller.py:416 - [Agent Controller 762916a8-4fb4-48c2-a3b7-b0917a1cf171-319e8e72befff0c3] Stepping agent after event: CmdOutputObservation
[Agent Controller 762916a8-4fb4-48c2-a3b7-b0917a1cf171-319e8e72befff0c3] LEVEL 0 LOCAL STEP 24 GLOBAL STEP 24
16:45:10 - openhands:INFO: agent_controller.py:979 - [Agent Controller 762916a8-4fb4-48c2-a3b7-b0917a1cf171-319e8e72befff0c3] Set pending action: FileEditAction (id=-1)
16:45:10 - openhands:INFO: resolve_issue.py:233 - **FileEditAction**
Path: [/workspace/__tests__/listing_agent_tour_scheduling.test.ts]
Thought: Let me create a test to understand the current behavior and what needs to be fixed.
Command: create
Created File with Text:
```
import { describe, it, expect, beforeEach, jest } from '@jest/globals'
import { createTestAssistant } from './tour_test_utils'
import { SharedState } from '@/lib/services/realEstate/core/sharedState'
import { supabaseClient } from '@/lib/services/shared/supabaseClient'
describe('Listing Agent Tour Scheduling', () => {
let assistant: any
let sharedState: SharedState
beforeEach(async () => {
// Create a test assistant
const result = await createTestAssistant()
assistant = result.assistant
sharedState = result.sharedState
// Mock the supabase client
jest.spyOn(supabaseClient, 'from').mockImplementation((table: string) => {
if (table === 'mr_properties') {
return {
select: jest.fn().mockReturnThis(),
insert: jest.fn().mockReturnThis(),
update: jest.fn().mockReturnThis(),
eq: jest.fn().mockReturnThis(),
overrideTypes: jest.fn().mockReturnValue({
data: [
{
zpid: '12345',
address: '123 Test St, San Francisco, CA 94110',
formatted_address: '123 Test St, San Francisco, CA 94110',
agent_id: 'agent123',
mr_users_id: 'user123',
client_proposed_showing_time: null,
agent_proposed_showing_time: null,
showing_status: null,
is_showami_tour: false
}
],
error: null
})
}
}
return {
select: jest.fn().mockReturnThis(),
insert: jest.fn().mockReturnThis(),
update: jest.fn().mockReturnThis(),
eq: jest.fn().mockReturnThis(),
overrideTypes: jest.fn().mockReturnValue({
data: [],
error: null
})
}
})
})
it('should handle tour requests when we are the listing agent', async () => {
// Set up the shared state to simulate we are the listing agent
sharedState.listingAgent = {
agent_id: 'agent123',
phone_number: '+15555555555',
current_property_zpid: '12345',
current_mr_users_phone_number: '+16666666666'
}
// Simulate a client message requesting a tour
const response = await assistant.chat(
'I would like to schedule a tour for 123 Test St tomorrow at 3pm',
'+16666666666'
)
// Check that the response indicates we're handling it as the listing agent
expect(response).toContain('schedule')
expect(response).toContain('tour')
expect(response).toContain('123 Test St')
// Check that the draft messages were created correctly
const draftMessages = sharedState.messagingService.draftMessages
expect(draftMessages.length).toBeGreaterThan(0)
// Verify that the system recognized we're the listing agent
expect(sharedState.debugOutputs.some(output =>
output.includes('listing agent') || output.includes('listing side')
)).toBeTruthy()
})
})
```
16:45:10 - openhands:INFO: resolve_issue.py:233 - File created successfully at: /workspace/__tests__/listing_agent_tour_scheduling.test.ts
16:45:10 - openhands:INFO: agent_controller.py:970 - [Agent Controller 762916a8-4fb4-48c2-a3b7-b0917a1cf171-319e8e72befff0c3] Cleared pending action after 0.02s: FileEditAction (id=53)
16:45:10 - openhands:INFO: agent_controller.py:416 - [Agent Controller 762916a8-4fb4-48c2-a3b7-b0917a1cf171-319e8e72befff0c3] Stepping agent after event: FileEditObservation
[Agent Controller 762916a8-4fb4-48c2-a3b7-b0917a1cf171-319e8e72befff0c3] LEVEL 0 LOCAL STEP 25 GLOBAL STEP 25
16:45:18 - openhands:INFO: agent_controller.py:979 - [Agent Controller 762916a8-4fb4-48c2-a3b7-b0917a1cf171-319e8e72befff0c3] Set pending action: CmdRunAction (id=-1)
16:45:18 - openhands:INFO: resolve_issue.py:233 - **CmdRunAction (source=EventSource.AGENT, is_input=False)**
THOUGHT: Now let's run the test to see what happens when we're the listing agent.
COMMAND:
./bun test __tests__/listing_agent_tour_scheduling.test.ts
16:45:18 - openhands:INFO: resolve_issue.py:233 - **CmdOutputObservation (source=EventSource.AGENT, exit code=1, metadata={
"exit_code": 1,
"pid": -1,
"username": "openhands",
"hostname": "aae885bd2acb",
"working_dir": "/workspace",
"py_interpreter_path": "/openhands/poetry/openhands-ai-5O4_aCHf-py3.12/bin/python",
"prefix": "",
"suffix": "\n[The command completed with exit code 1.]"
})**
--BEGIN AGENT OBSERVATION--
bun test v1.1.34 (5e5e7c60)
__tests__/listing_agent_tour_scheduling.test.ts:
# Unhandled error between tests
-------------------------------
error: Cannot find module '@supabase/supabase-js' from '/workspace/lib/services/shared/supabase/client.ts'
-------------------------------
---------------------------------------------------|---------|---------|-------------------
File | % Funcs | % Lines | Uncovered Line #s
---------------------------------------------------|---------|---------|-------------------
All files | -nan | -nan |
---------------------------------------------------|---------|---------|-------------------
0 pass
1 fail
1 error
Ran 1 tests across 1 files. [99.00ms]
[The command completed with exit code 1.]
[Current working directory: /workspace]
[Python interpreter: /openhands/poetry/openhands-ai-5O4_aCHf-py3.12/bin/python]
[Command finished with exit code 1]
--END AGENT OBSERVATION--
16:45:18 - openhands:INFO: agent_controller.py:970 - [Agent Controller 762916a8-4fb4-48c2-a3b7-b0917a1cf171-319e8e72befff0c3] Cleared pending action after 0.64s: CmdRunAction (id=55)
16:45:18 - openhands:INFO: agent_controller.py:416 - [Agent Controller 762916a8-4fb4-48c2-a3b7-b0917a1cf171-319e8e72befff0c3] Stepping agent after event: CmdOutputObservation
[Agent Controller 762916a8-4fb4-48c2-a3b7-b0917a1cf171-319e8e72befff0c3] LEVEL 0 LOCAL STEP 26 GLOBAL STEP 26
16:45:25 - openhands:INFO: agent_controller.py:979 - [Agent Controller 762916a8-4fb4-48c2-a3b7-b0917a1cf171-319e8e72befff0c3] Set pending action: CmdRunAction (id=-1)
16:45:25 - openhands:INFO: resolve_issue.py:233 - **CmdRunAction (source=EventSource.AGENT, is_input=False)**
THOUGHT: Let's install the missing dependencies and try again.
COMMAND:
npm install @supabase/supabase-js
16:46:27 - openhands:INFO: resolve_issue.py:233 - **CmdOutputObservation (source=EventSource.AGENT, exit code=0, metadata={
"exit_code": 0,
"pid": -1,
"username": "openhands",
"hostname": "aae885bd2acb",
"working_dir": "/workspace",
"py_interpreter_path": "/openhands/poetry/openhands-ai-5O4_aCHf-py3.12/bin/python",
"prefix": "",
"suffix": "\n[The command completed with exit code 0.]"
})**
--BEGIN AGENT OBSERVATION--
npm warn deprecated [email protected]: Package no longer supported. Contact Support at https://www.npmjs.com/support for more info.
npm warn deprecated @types/[email protected]: This is a stub types definition. handlebars provides its own type definitions, so you do not need this installed.
npm warn deprecated [email protected]: This module is not supported, and leaks memory. Do not use it. Check out lru-cache if you want a good and tested way to coalesce async requests by a key value, which is much more comprehensive and powerful.
npm warn deprecated [email protected]: Glob versions prior to v9 are no longer supported
npm warn deprecated @types/[email protected]: This is a stub types definition. sharp provides its own type definitions, so you do not need this installed.
added 1139 packages, and audited 1140 packages in 1m
312 packages are looking for funding
run `npm fund` for details
9 moderate severity vulnerabilities
To address issues that do not require attention, run:
npm audit fix
To address all issues (including breaking changes), run:
npm audit fix --force
Run `npm audit` for details.
npm notice
npm notice New major version of npm available! 10.9.2 -> 11.3.0
npm notice Changelog: https://github.com/npm/cli/releases/tag/v11.3.0
npm notice To update run: npm install -g [email protected]
npm notice
[The command completed with exit code 0.]
[Current working directory: /workspace]
[Python interpreter: /openhands/poetry/openhands-ai-5O4_aCHf-py3.12/bin/python]
[Command finished with exit code 0]
--END AGENT OBSERVATION--
16:46:27 - openhands:WARNING: agent_controller.py:949 - [Agent Controller 762916a8-4fb4-48c2-a3b7-b0917a1cf171-319e8e72befff0c3] Pending action active for 62.24s: CmdRunAction (id=57)
16:46:27 - openhands:WARNING: agent_controller.py:949 - [Agent Controller 762916a8-4fb4-48c2-a3b7-b0917a1cf171-319e8e72befff0c3] Pending action active for 62.24s: CmdRunAction (id=57)
16:46:27 - openhands:INFO: agent_controller.py:970 - [Agent Controller 762916a8-4fb4-48c2-a3b7-b0917a1cf171-319e8e72befff0c3] Cleared pending action after 62.24s: CmdRunAction (id=57)
16:46:27 - openhands:INFO: agent_controller.py:416 - [Agent Controller 762916a8-4fb4-48c2-a3b7-b0917a1cf171-319e8e72befff0c3] Stepping agent after event: CmdOutputObservation
[Agent Controller 762916a8-4fb4-48c2-a3b7-b0917a1cf171-319e8e72befff0c3] LEVEL 0 LOCAL STEP 27 GLOBAL STEP 27
16:46:34 - openhands:INFO: agent_controller.py:979 - [Agent Controller 762916a8-4fb4-48c2-a3b7-b0917a1cf171-319e8e72befff0c3] Set pending action: CmdRunAction (id=-1)
16:46:34 - openhands:INFO: resolve_issue.py:233 - **CmdRunAction (source=EventSource.AGENT, is_input=False)**
THOUGHT: Now let's run the test again.
COMMAND:
./bun test __tests__/listing_agent_tour_scheduling.test.ts
16:46:35 - openhands:INFO: resolve_issue.py:233 - **CmdOutputObservation (source=EventSource.AGENT, exit code=1, metadata={
"exit_code": 1,
"pid": -1,
"username": "openhands",
"hostname": "aae885bd2acb",
"working_dir": "/workspace",
"py_interpreter_path": "/openhands/poetry/openhands-ai-5O4_aCHf-py3.12/bin/python",
"prefix": "",
"suffix": "\n[The command completed with exit code 1.]"
})**
--BEGIN AGENT OBSERVATION--
bun test v1.1.34 (5e5e7c60)
__tests__/listing_agent_tour_scheduling.test.ts:
# Unhandled error between tests
-------------------------------
1 | (function (entry, fetcher)
^
SyntaxError: Export named 'createTestAssistant' not found in module '/workspace/__tests__/tour_test_utils.ts'.
-------------------------------
---------------------------------------------------|---------|---------|-------------------
File | % Funcs | % Lines | Uncovered Line #s
---------------------------------------------------|---------|---------|-------------------
All files | -nan | -nan |
---------------------------------------------------|---------|---------|-------------------
0 pass
1 fail
1 error
Ran 1 tests across 1 files. [91.00ms]
[The command completed with exit code 1.]
[Current working directory: /workspace]
[Python interpreter: /openhands/poetry/openhands-ai-5O4_aCHf-py3.12/bin/python]
[Command finished with exit code 1]
--END AGENT OBSERVATION--
16:46:35 - openhands:INFO: agent_controller.py:970 - [Agent Controller 762916a8-4fb4-48c2-a3b7-b0917a1cf171-319e8e72befff0c3] Cleared pending action after 0.64s: CmdRunAction (id=59)
16:46:35 - openhands:INFO: agent_controller.py:416 - [Agent Controller 762916a8-4fb4-48c2-a3b7-b0917a1cf171-319e8e72befff0c3] Stepping agent after event: CmdOutputObservation
[Agent Controller 762916a8-4fb4-48c2-a3b7-b0917a1cf171-319e8e72befff0c3] LEVEL 0 LOCAL STEP 28 GLOBAL STEP 28
16:46:43 - openhands:INFO: agent_controller.py:979 - [Agent Controller 762916a8-4fb4-48c2-a3b7-b0917a1cf171-319e8e72befff0c3] Set pending action: FileReadAction (id=-1)
16:46:43 - openhands:INFO: resolve_issue.py:233 - FileReadAction(path='/workspace/__tests__/tour_test_utils.ts', start=0, end=-1, thought="Let's check the tour_test_utils.ts file to see what functions are available.", action=<ActionType.READ: 'read'>, security_risk=None, impl_source=<FileReadSource.OH_ACI: 'oh_aci'>, view_range=None)
16:46:43 - openhands:INFO: resolve_issue.py:233 - [Read from /workspace/__tests__/tour_test_utils.ts is successful.]
Here's the result of running `cat -n` on /workspace/__tests__/tour_test_utils.ts:
1 import { PropertyDetails } from "@/lib/types/property";
2 import { Phones } from "@/lib/services/realEstate/constants/phoneNumbers";
3 import { supabaseClient } from "@/lib/services/shared/supabaseClient";
4 import { mr_messages } from "@/lib/types/messages";
5
6 /**
7 * Sets up predefined test messages in the database to simulate a self-tour scheduling conversation
8 * This allows tests to start at different stages of the conversation without simulating each message exchange
9 *
10 * @param params - Parameters object
11 * @param params.clientNumber - Client's phone number
12 * @param params.listingAgentNumber - Listing agent's phone number
13 * @param params.property - Property details
14 * @param params.stageIndex - Index of the conversation stage to set up (1-4)
15 * @returns Promise<void>
16 */
17 export async function setupPredefinedTestMessages({
18 clientNumber,
19 listingAgentNumber,
20 property,
21 stageIndex
22 }: {
23 clientNumber: string,
24 listingAgentNumber: string,
25 property: PropertyDetails,
26 stageIndex: number
27 }): Promise<void> {
28 // Define the predefined messages for each stage of the conversation
29 const predefinedMessages = [
30 // Stage 1: Initial request
31 {
32 timestamp: new Date(Date.now() - 60000), // 1 minute ago
33 message: `I'd like to schedule a showing for ${property.formattedAddress}. Would tomorrow at 9am work?`,
34 sender_phone_number: clientNumber,
35 receiver_phone_number: Phones.SELF
36 },
37 {
38 timestamp: new Date(Date.now() - 50000), // 50 seconds ago
39 message: `Hi! I'd be happy to help you schedule a showing for ${property.formattedAddress}. Let me check with the listing agent about availability for tomorrow at 9am. I'll get back to you as soon as I hear back.`,
40 sender_phone_number: Phones.SELF,
41 receiver_phone_number: clientNumber
42 },
43 {
44 timestamp: new Date(Date.now() - 40000), // 40 seconds ago
45 message: `Hello, I have a client interested in viewing ${property.formattedAddress} tomorrow at 9am. Would that time work for you?`,
46 sender_phone_number: Phones.SELF,
47 receiver_phone_number: listingAgentNumber
48 },
49
50 // Stage 2: Agent suggests alternative time
51 {
52 timestamp: new Date(Date.now() - 30000), // 30 seconds ago
53 message: "I apologize, but I can't make it at 9am tomorrow. Would 9am on Thursday work better for you?",
54 sender_phone_number: listingAgentNumber,
55 receiver_phone_number: Phones.SELF
56 },
57 {
58 timestamp: new Date(Date.now() - 25000), // 25 seconds ago
59 message: `The listing agent isn't available tomorrow at 9am, but they suggested Thursday at 9am instead. Would that work for you?`,
60 sender_phone_number: Phones.SELF,
61 receiver_phone_number: clientNumber
62 },
63
64 // Stage 3: Client counter-proposal
65 {
66 timestamp: new Date(Date.now() - 20000), // 20 seconds ago
67 message: "2pm Friday? or maybe 10am Friday?",
68 sender_phone_number: clientNumber,
69 receiver_phone_number: Phones.SELF
70 },
71 {
72 timestamp: new Date(Date.now() - 15000), // 15 seconds ago
73 message: `My client can't make Thursday at 9am. They're asking if either Friday at 10am or Friday at 2pm would work. Please let me know which option is best for you.`,
74 sender_phone_number: Phones.SELF,
75 receiver_phone_number: listingAgentNumber
76 },
77
78 // Stage 4: Agent confirms time
79 {
80 timestamp: new Date(Date.now() - 10000), // 10 seconds ago
81 message: "10am friday is good!",
82 sender_phone_number: listingAgentNumber,
83 receiver_phone_number: Phones.SELF
84 },
85 {
86 timestamp: new Date(Date.now() - 5000), // 5 seconds ago
87 message: `Great news! The listing agent is available this Friday at 10am to show you ${property.formattedAddress}. I've confirmed the appointment for you. Is there anything specific you'd like to know about the property before your showing?`,
88 sender_phone_number: Phones.SELF,
89 receiver_phone_number: clientNumber
90 }
91 ];
92
93 // Determine which messages to insert based on stageIndex
94 const messagesToInsert = [];
95
96 switch (stageIndex) {
97 case 1:
98 // Only Stage 1 messages
99 messagesToInsert.push(...predefinedMessages.slice(0, 3));
100 break;
101 case 2:
102 // Stage 1 + Stage 2 messages
103 messagesToInsert.push(...predefinedMessages.slice(0, 5));
104 break;
105 case 3:
106 // Stage 1 + Stage 2 + Stage 3 messages
107 messagesToInsert.push(...predefinedMessages.slice(0, 7));
108 break;
109 case 4:
110 // All messages
111 messagesToInsert.push(...predefinedMessages);
112 break;
113 default:
114 throw new Error(`Invalid stageIndex: ${stageIndex}. Must be between 1 and 4.`);
115 }
116
117 // Insert messages into database
118 for (const message of messagesToInsert) {
119 const { error } = await supabaseClient
120 .from('mr_messages')
121 .insert({
122 ...message,
123 backend_version: 'test-utils.ts:setupPredefinedTestMessages',
124 status: 'delivered',
125 sending_service: 'test-utils'
126 })
127 .overrideTypes<mr_messages[], { merge: false }>();
128
129 if (error) {
130 console.error('Error inserting predefined message:', error);
131 throw error;
132 }
133 }
134 // TODO: check to make sure that these relationships are set up in the db, dont create them manually
135 // // If we've set up stage 4, also update the property status in the database
136 // if (stageIndex === 4 && property.zpid) {
137 // // Check if property exists
138 // const { data: existingProps, error: checkError } = await supabaseClient
139 // .from('mr_properties')
140 // .select('*')
141 // .eq('zpid', property.zpid)
142 // .limit(1);
143
144 // if (checkError) {
145 // console.error('Error checking property:', checkError);
146 // throw checkError;
147 // }
148
149 // if (existingProps && existingProps.length > 0) {
150 // // Update existing property
151 // const { error: updateError } = await supabaseClient
152 // .from('mr_properties')
153 // .update({ showing_status: 'confirmed' })
154 // .eq('zpid', property.zpid);
155
156 // if (updateError) {
157 // console.error('Error updating property status:', updateError);
158 // throw updateError;
159 // }
160 // } else {
161 // // Insert new property
162 // const { error: insertError } = await supabaseClient
163 // .from('mr_properties')
164 // .insert({
165 // zpid: property.zpid,
166 // address: property.formattedAddress,
167 // showing_status: 'confirmed',
168 // price: property.price
169 // });
170
171 // if (insertError) {
172 // console.error('Error inserting property:', insertError);
173 // throw insertError;
174 // }
175 // }
176 // }
177
178 console.log(`Successfully set up predefined test messages for stage ${stageIndex}`);
179 }
16:46:43 - openhands:INFO: agent_controller.py:970 - [Agent Controller 762916a8-4fb4-48c2-a3b7-b0917a1cf171-319e8e72befff0c3] Cleared pending action after 0.02s: FileReadAction (id=61)
16:46:43 - openhands:INFO: agent_controller.py:416 - [Agent Controller 762916a8-4fb4-48c2-a3b7-b0917a1cf171-319e8e72befff0c3] Stepping agent after event: FileReadObservation
[Agent Controller 762916a8-4fb4-48c2-a3b7-b0917a1cf171-319e8e72befff0c3] LEVEL 0 LOCAL STEP 29 GLOBAL STEP 29
16:46:50 - openhands:INFO: agent_controller.py:979 - [Agent Controller 762916a8-4fb4-48c2-a3b7-b0917a1cf171-319e8e72befff0c3] Set pending action: CmdRunAction (id=-1)
16:46:50 - openhands:INFO: resolve_issue.py:233 - **CmdRunAction (source=EventSource.AGENT, is_input=False)**
THOUGHT: Let's check the test utils in the services directory to see if there's a function to create a test assistant.
COMMAND:
find /workspace -type f -name "test-utils.ts"
16:46:51 - openhands:INFO: resolve_issue.py:233 - **CmdOutputObservation (source=EventSource.AGENT, exit code=0, metadata={
"exit_code": 0,
"pid": -1,
"username": "openhands",
"hostname": "aae885bd2acb",
"working_dir": "/workspace",
"py_interpreter_path": "/openhands/poetry/openhands-ai-5O4_aCHf-py3.12/bin/python",
"prefix": "",
"suffix": "\n[The command completed with exit code 0.]"
})**
--BEGIN AGENT OBSERVATION--
/workspace/lib/services/__tests__/utils/test-utils.ts
[The command completed with exit code 0.]
[Current working directory: /workspace]
[Python interpreter: /openhands/poetry/openhands-ai-5O4_aCHf-py3.12/bin/python]
[Command finished with exit code 0]
--END AGENT OBSERVATION--
16:46:51 - openhands:INFO: agent_controller.py:970 - [Agent Controller 762916a8-4fb4-48c2-a3b7-b0917a1cf171-319e8e72befff0c3] Cleared pending action after 0.64s: CmdRunAction (id=63)
16:46:51 - openhands:INFO: agent_controller.py:416 - [Agent Controller 762916a8-4fb4-48c2-a3b7-b0917a1cf171-319e8e72befff0c3] Stepping agent after event: CmdOutputObservation
[Agent Controller 762916a8-4fb4-48c2-a3b7-b0917a1cf171-319e8e72befff0c3] LEVEL 0 LOCAL STEP 30 GLOBAL STEP 30
16:46:58 - openhands:INFO: agent_controller.py:979 - [Agent Controller 762916a8-4fb4-48c2-a3b7-b0917a1cf171-319e8e72befff0c3] Set pending action: FileReadAction (id=-1)
16:46:58 - openhands:INFO: resolve_issue.py:233 - FileReadAction(path='/workspace/lib/services/__tests__/utils/test-utils.ts', start=0, end=-1, thought="Let's check the test-utils.ts file in the services directory.", action=<ActionType.READ: 'read'>, security_risk=None, impl_source=<FileReadSource.OH_ACI: 'oh_aci'>, view_range=None)
16:46:58 - openhands:INFO: resolve_issue.py:233 - [Read from /workspace/lib/services/__tests__/utils/test-utils.ts is successful.]
Here's the result of running `cat -n` on /workspace/lib/services/__tests__/utils/test-utils.ts:
1 import { AssistantCore } from '@/lib/services/realEstate/core/assistantCore'
2 import { logTestResult, supabaseClient } from '@/lib/services/shared/supabaseClient'
3 import { formatFullAddressParts, PropertyDetails } from '@/lib/types/property'
4 import { v4 as uuidv4 } from 'uuid'
5 import { getPropertyDetails } from '@/lib/services/zillow_ops/zil'
6 import { mock } from 'bun:test'
7 import { redis } from '@/lib/redis'
8 import { MR_ListingAgent, mr_people, MR_User } from '@/lib/types/sbPeople'
9 import { formatPhoneNumber } from '../../shared/phoneUtils'
10 import { Properties } from '@/lib/services/realEstate/constants/properties'
11 import {
12 findContactByPhone,
13 insertPerson,
14 getClientByPhone,
15 insertUser,
16 getListingAgentByPhone,
17 insertListingAgent
18 } from '@/lib/services/shared/supabaseClient' // Import the necessary functions
19 import { mr_properties_Row } from '@/lib/types/property'
20 import { WithCache } from '@/lib/services/shared/cacheDecorator'
21 import { formatFullAddress } from '@/lib/types/property'
22 import dayjs from 'dayjs'
23 import { convertToMRPropertiesRow } from '../../realEstate/core/listingAgentManager'
24 import { PropertyService } from '../../buyer_flow/property'
25
26 const DELANCEY_PROPERTY = Properties.LISTED_HOME.fullAddress
27
28 // 15 minutes in seconds
29 const REDIS_EXPIRY_TIME = 15 * 60;
30 // Maximum attempts before erroring to prevent infinite loops
31 const MAX_ATTEMPTS = 250;
32 // Default expiry time for the tests_running flag in seconds (10 minutes)
33 const DEFAULT_TESTS_RUNNING_EXPIRY = 600;
34 const ONE_DAY_IN_SECONDS = 86400
35
36 export interface MyTestContext {
37 assistant: AssistantCore
38 clientNumber: string
39 client: MR_User
40 listingAgentNumber: string
41 listingAgent: MR_ListingAgent
42 adminNumber: string
43 phoneGenerator: TestPhoneGenerator
44 generateProperty: () => Promise<PropertyDetails>
45 // getCachedPropertyFromExtendedSearch: () => Promise<PropertyDetails>
46 cleanup: () => Promise<void>
47 supabaseClient: typeof supabaseClient
48 testId: string // Unique ID for this test instance
49 setTestsRunningFlag: (expirySeconds?: number) => Promise<void> // Function to set tests_running flag
50 clearTestsRunningFlag: () => Promise<void> // Function to clear tests_running flag
51 generateUnknownPerson: (name?: string) => Promise<string> // Function to generate an unknown person
52 }
53
54 /**
55 * Sets the tests_running flag in Redis
56 *
57 * @param expirySeconds - Optional expiry time in seconds, defaults to 10 minutes
58 */
59 export async function setTestsRunningFlag(expirySeconds: number = DEFAULT_TESTS_RUNNING_EXPIRY): Promise<void> {
60 await redis.set('tests_running', 'true', { ex: expirySeconds });
61 console.log(`Set tests_running flag to true with ${expirySeconds} second expiry`);
62 }
63
64 /**
65 * Clears the tests_running flag from Redis
66 */
67 export async function clearTestsRunningFlag(): Promise<void> {
68 await redis.del('tests_running');
69 console.log('Cleared tests_running flag');
70 }
71
72 export class TestPhoneGenerator {
73 private clientCounter = 0
74 private listingAgentCounter = 0
75 private adminCounter = 0
76 private lastGeneratedListingAgentNumber: string = ''
77 private lastGeneratedListingAgentName: string = ''
78 private testId: string
79 private allocatedPhoneNumbers: string[] = []
80 private generatedZpids: string[] = [] // Add tracking for generated ZPIDs
81
82 constructor(testId: string) {
83 this.testId = testId;
84 }
85
86 async generateClient(name: string = 'client'): Promise<string> {
87 // Find an available phone number that's not already in use
88 let phoneNumber = '';
89 let redisKey = '';
90 let exists = true;
91 let attempts = 0;
92
93 while (exists) {
94 // Check for too many attempts to prevent infinite loops
95 if (attempts >= MAX_ATTEMPTS) {
96 throw new Error(`More than ${MAX_ATTEMPTS} test instances occupied. Erroring due to infinite loop halt (are test numbers getting deleted?)`);
97 }
98
99 // Create a unique key for this test run
100 redisKey = `test:phone:client:${this.testId}:${this.clientCounter}`;
101 phoneNumber = `+test_${name}${this.testId.substring(0, 4)}_${this.clientCounter}`;
102
103 // Check if this key already exists in Redis
104 const keyExists = await redis.exists(redisKey);
105
106 if (!keyExists) {
107 exists = false;
108 } else {
109 // Key exists, increment counter and try again
110 this.clientCounter++;
111 attempts++;
112 }
113 }
114
115 // Store in Redis with the test ID and increment counter, with 15-minute expiry
116 await redis.set(redisKey, phoneNumber, { ex: REDIS_EXPIRY_TIME });
117 await redis.sadd(`test:allocated:${this.testId}`, redisKey);
118 // Set expiry on the allocation set as well
119 await redis.expire(`test:allocated:${this.testId}`, REDIS_EXPIRY_TIME);
120
121 this.allocatedPhoneNumbers.push(phoneNumber);
122 this.clientCounter++; // Increment for next time
123
124 // Create a record in the mr_users table
125 try {
126 // First check if the client already exists to avoid duplicates
127 const existingUser = await getClientByPhone(phoneNumber);
128
129 if (!existingUser) {
130 // Create a new client with minimal fields
131 const newUser: Partial<MR_User> = {
132 phone_number: phoneNumber,
133 first_name: name,
134 last_name: 'Test',
135 user_id: crypto.randomUUID(),
136 do_not_text: false,
137 previously_texted: false,
138 is_test: true
139 };
140
141 // Insert the new client using the helper function
142 await insertUser(newUser);
143 }
144 } catch (error) {
145 console.error('Error creating client record in database:', error);
146 // Continue anyway to avoid breaking tests
147 }
148
149 return phoneNumber;
150 }
151
152 async generateListingAgent(
153 name: string = 'agent'
154 ): Promise<{ phoneNumber: string; name: string }> {
155 // Find an available phone number that's not already in use
156 let phoneNumber = '';
157 let redisKey = '';
158 let exists = true;
159 let attempts = 0;
160
161 while (exists) {
162 // Check for too many attempts to prevent infinite loops
163 if (attempts >= MAX_ATTEMPTS) {
164 throw new Error(`More than ${MAX_ATTEMPTS} test instances occupied. Erroring due to infinite loop halt (are test numbers getting deleted?)`);
165 }
166
167 // Create a unique key for this test run
168 redisKey = `test:phone:listingAgent:${this.testId}:${this.listingAgentCounter}`;
169 phoneNumber = `+test_${name}${this.testId.substring(0, 4)}_${this.listingAgentCounter}`;
170
171 // Check if this key already exists in Redis
172 const keyExists = await redis.exists(redisKey);
173
174 if (!keyExists) {
175 exists = false;
176 } else {
177 // Key exists, increment counter and try again
178 this.listingAgentCounter++;
179 attempts++;
180 }
181 }
182
183 // Store in Redis with the test ID, with 15-minute expiry
184 await redis.set(redisKey, phoneNumber, { ex: REDIS_EXPIRY_TIME });
185 await redis.sadd(`test:allocated:${this.testId}`, redisKey);
186 // Set expiry on the allocation set as well
187 await redis.expire(`test:allocated:${this.testId}`, REDIS_EXPIRY_TIME);
188
189 this.lastGeneratedListingAgentNumber = phoneNumber;
190 this.lastGeneratedListingAgentName = name;
191 this.allocatedPhoneNumbers.push(phoneNumber);
192 this.listingAgentCounter++; // Increment for next time
193
194 // Create a record in the mr_listingagents table
195 try {
196 // First check if the agent already exists to avoid duplicates
197 const existingAgent = await getListingAgentByPhone(phoneNumber);
198
199 if (!existingAgent) {
200 // Create a new agent with minimal fields
201 const newAgent: Partial<MR_ListingAgent> = {
202 phone_number: phoneNumber,
203 first_name: name,
204 last_name: 'Test',
205 agent_id: crypto.randomUUID(),
206 created_at: new Date(),
207 is_test: true
208 };
209
210 // Insert the new agent using the helper function
211 await insertListingAgent(newAgent);
212 }
213 } catch (error) {
214 console.error('Error creating listing agent record in database:', error);
215 // Continue anyway to avoid breaking tests
216 }
217
218 return { phoneNumber, name };
219 }
220
221 async generateAdmin(name: string = 'admin'): Promise<string> {
222 // Find an available phone number that's not already in use
223 let phoneNumber = '';
224 let redisKey = '';
225 let exists = true;
226 let attempts = 0;
227
228 while (exists) {
229 // Check for too many attempts to prevent infinite loops
230 if (attempts >= MAX_ATTEMPTS) {
231 throw new Error(`More than ${MAX_ATTEMPTS} test instances occupied. Erroring due to infinite loop halt (are test numbers getting deleted?)`);
232 }
233
234 // Create a unique key for this test run
235 redisKey = `test:phone:admin:${this.testId}:${this.adminCounter}`;
236 phoneNumber = `+test_admin${this.testId.substring(0, 4)}_${this.adminCounter}`;
237
238 // Check if this key already exists in Redis
239 const keyExists = await redis.exists(redisKey);
240
241 if (!keyExists) {
242 exists = false;
243 } else {
244 // Key exists, increment counter and try again
245 this.adminCounter++;
246 attempts++;
247 }
248 }
249
250 // Store in Redis with the test ID, with 15-minute expiry
251 await redis.set(redisKey, phoneNumber, { ex: REDIS_EXPIRY_TIME });
252 await redis.sadd(`test:allocated:${this.testId}`, redisKey);
253 // Set expiry on the allocation set as well
254 await redis.expire(`test:allocated:${this.testId}`, REDIS_EXPIRY_TIME);
255
256 this.allocatedPhoneNumbers.push(phoneNumber);
257 this.adminCounter++; // Increment for next time
258 return phoneNumber;
259 }
260
261 async generateUnknownNumber(name: string = 'unknown'): Promise<string> {
262 // Find an available phone number that's not already in use
263 let phoneNumber = '';
264 let redisKey = '';
265 let exists = true;
266 let attempts = 0;
267
268 while (exists) {
269 // Check for too many attempts to prevent infinite loops
270 if (attempts >= MAX_ATTEMPTS) {
271 throw new Error(`More than ${MAX_ATTEMPTS} test instances occupied. Erroring due to infinite loop halt (are test numbers getting deleted?)`);
272 }
273
274 // Create a unique key for this test run
275 redisKey = `test:phone:unknown:${this.testId}:${this.adminCounter}`;
276 phoneNumber = `+test_${name}${this.testId.substring(0, 4)}_${this.adminCounter}`;
277
278 // Check if this key already exists in Redis
279 const keyExists = await redis.exists(redisKey);
280
281 if (!keyExists) {
282 exists = false;
283 } else {
284 // Key exists, increment counter and try again
285 this.adminCounter++;
286 attempts++;
287 }
288 }
289
290 // Store in Redis with the test ID, with 15-minute expiry
291 await redis.set(redisKey, phoneNumber, { ex: REDIS_EXPIRY_TIME });
292 await redis.sadd(`test:allocated:${this.testId}`, redisKey);
293 // Set expiry on the allocation set as well
294 await redis.expire(`test:allocated:${this.testId}`, REDIS_EXPIRY_TIME);
295
296 this.allocatedPhoneNumbers.push(phoneNumber);
297 this.adminCounter++; // Increment for next time
298 return phoneNumber;
299 }
300
301 getLastGeneratedListingAgentNumber(): string {
302 return this.lastGeneratedListingAgentNumber;
303 }
304
305 getLastGeneratedListingAgentName(): string {
306 return this.lastGeneratedListingAgentName;
307 }
308
309 getAllocatedPhoneNumbers(): string[] {
310 return [...this.allocatedPhoneNumbers];
311 }
312
313 // Add a method to track generated ZPIDs
314 addGeneratedZpid(zpid: string): void {
315 this.generatedZpids.push(zpid);
316 }
317
318 // Get all generated ZPIDs
319 getGeneratedZpids(): string[] {
320 return [...this.generatedZpids];
321 }
322
323 async cleanup(): Promise<void> {
324 try {
325 // Get all keys allocated to this test ID
326 const keys = await redis.smembers(`test:allocated:${this.testId}`);
327
328 // Delete all the individual phone entries
329 if (keys.length > 0) {
330 await redis.del(...keys);
331 }
332
333 // Delete the set itself
334 await redis.del(`test:allocated:${this.testId}`);
335
336 // SUPABASE CLEANUP
337 // Get list of phone numbers to clean up
338 const phoneNumbers = this.getAllocatedPhoneNumbers();
339 const likePatterns = phoneNumbers.map(num => `${num.replace('+', '\+')}%`);
340
341 // Ensure all phone numbers contain "test" to avoid deleting real data
342 const safePatterns = likePatterns.filter(pattern => pattern.toLowerCase().includes('test'));
343
344 // If any patterns don't include "test", log a warning and remove them
345 if (safePatterns.length < likePatterns.length) {
346 console.warn(`Filtered out ${likePatterns.length - safePatterns.length} phone patterns that didn't contain "test" for safety`);
347 // Replace the original array with the filtered one
348 likePatterns.length = 0;
349 likePatterns.push(...safePatterns);
350 }
351
352 // Clean up from supabase
353 try {
354 // --- Fetch relevant IDs first ---
355 const userIdsToDelete: string[] = [];
356 for (const pattern of likePatterns) {
357 const { data: users, error } = await supabaseClient
358 .from('mr_users')
359 .select('*')
360 .like('phone_number', pattern)
361 .overrideTypes<MR_User[], { merge: false }>();
362 if (error) {
363 console.error(`Error fetching user IDs for pattern ${pattern}:`, error);
364 } else if (users) {
365 userIdsToDelete.push(...users.map(u => u.user_id!));
366 }
367 }
368 const uniqueUserIds = [...new Set(userIdsToDelete)];
369
370 // Get specific ZPIDs to delete instead of using a pattern
371 const specificZpids = this.getGeneratedZpids();
372 console.log(`Cleaning up ${specificZpids.length} specifically tracked ZPIDs`);
373 console.log(specificZpids)
374
375 // --- Clean up related tables using IDs or patterns ---
376
377 // Clean up property notes using specific ZPIDs
378 if (specificZpids.length > 0) {
379 await supabaseClient
380 .from('mr_propertynotes')
381 .delete()
382 .in('property_zpid', specificZpids);
383 }
384
385 // Clean up sent listings and emails using user IDs
386 if (uniqueUserIds.length > 0) {
387 await supabaseClient
388 .from('mr_sentlistings')
389 .delete()
390 .in('user_id', uniqueUserIds);
391
392 await supabaseClient
393 .from('mr_emails')
394 .delete()
395 .in('user_id', uniqueUserIds);
396 }
397
398 // Clean up user, agent, people, and showami data using phone patterns
399 for (const pattern of likePatterns) {
400 await supabaseClient
401 .from('mr_users')
402 .delete()
403 .like('phone_number', pattern);
404
405 await supabaseClient
406 .from('mr_listingagents')
407 .delete()
408 .like('phone_number', pattern);
409
410 await supabaseClient
411 .from('mr_people')
412 .delete()
413 .like('phone_number', pattern);
414
415 await supabaseClient
416 .from('mr_showamis')
417 .delete()
418 .like('phone_number', pattern);
419 }
420
421 // Clean up property data using specific ZPIDs instead of pattern
422 if (specificZpids.length > 0) {
423 await supabaseClient
424 .from('mr_properties')
425 .delete()
426 .in('zpid', specificZpids);
427 }
428
429 // Clean up messages and calls using phone patterns
430 for (const pattern of likePatterns) {
431 const orCondition = `sender_phone_number.like.${pattern},receiver_phone_number.like.${pattern}`;
432 await supabaseClient
433 .from('mr_messages')
434 .delete()
435 .or(orCondition);
436
437 const callOrCondition = `caller_phone_number.like.${pattern},receiver_phone_number.like.${pattern}`;
438 await supabaseClient
439 .from('mr_calls')
440 <response clipped><NOTE>Due to the max output limit, only part of this file has been shown to you. You should retry this tool after you have searched inside the file with `grep -n` in order to find the line numbers of what you are looking for.</NOTE>
16:46:58 - openhands:INFO: agent_controller.py:970 - [Agent Controller 762916a8-4fb4-48c2-a3b7-b0917a1cf171-319e8e72befff0c3] Cleared pending action after 0.02s: FileReadAction (id=65)
16:46:58 - openhands:INFO: agent_controller.py:416 - [Agent Controller 762916a8-4fb4-48c2-a3b7-b0917a1cf171-319e8e72befff0c3] Stepping agent after event: FileReadObservation
[Agent Controller 762916a8-4fb4-48c2-a3b7-b0917a1cf171-319e8e72befff0c3] LEVEL 0 LOCAL STEP 31 GLOBAL STEP 31
16:47:07 - openhands:INFO: agent_controller.py:979 - [Agent Controller 762916a8-4fb4-48c2-a3b7-b0917a1cf171-319e8e72befff0c3] Set pending action: CmdRunAction (id=-1)
16:47:07 - openhands:INFO: resolve_issue.py:233 - **CmdRunAction (source=EventSource.AGENT, is_input=False)**
THOUGHT: Let me search for the function to create a test assistant in the test-utils.ts file.
COMMAND:
grep -n "createTestAssistant\|setupTest" /workspace/lib/services/__tests__/utils/test-utils.ts
16:47:07 - openhands:INFO: resolve_issue.py:233 - **CmdOutputObservation (source=EventSource.AGENT, exit code=0, metadata={
"exit_code": 0,
"pid": -1,
"username": "openhands",
"hostname": "aae885bd2acb",
"working_dir": "/workspace",
"py_interpreter_path": "/openhands/poetry/openhands-ai-5O4_aCHf-py3.12/bin/python",
"prefix": "",
"suffix": "\n[The command completed with exit code 0.]"
})**
--BEGIN AGENT OBSERVATION--
552:export async function setupTest(): Promise<MyTestContext> {
757: const context = await setupTest();
[The command completed with exit code 0.]
[Current working directory: /workspace]
[Python interpreter: /openhands/poetry/openhands-ai-5O4_aCHf-py3.12/bin/python]
[Command finished with exit code 0]
--END AGENT OBSERVATION--
16:47:07 - openhands:INFO: agent_controller.py:970 - [Agent Controller 762916a8-4fb4-48c2-a3b7-b0917a1cf171-319e8e72befff0c3] Cleared pending action after 0.64s: CmdRunAction (id=67)
16:47:07 - openhands:INFO: agent_controller.py:416 - [Agent Controller 762916a8-4fb4-48c2-a3b7-b0917a1cf171-319e8e72befff0c3] Stepping agent after event: CmdOutputObservation
[Agent Controller 762916a8-4fb4-48c2-a3b7-b0917a1cf171-319e8e72befff0c3] LEVEL 0 LOCAL STEP 32 GLOBAL STEP 32
16:47:16 - openhands:INFO: agent_controller.py:979 - [Agent Controller 762916a8-4fb4-48c2-a3b7-b0917a1cf171-319e8e72befff0c3] Set pending action: FileReadAction (id=-1)
16:47:16 - openhands:INFO: resolve_issue.py:233 - FileReadAction(path='/workspace/lib/services/__tests__/utils/test-utils.ts', start=0, end=-1, thought="Let's look at the setupTest function in the test-utils.ts file.", action=<ActionType.READ: 'read'>, security_risk=None, impl_source=<FileReadSource.OH_ACI: 'oh_aci'>, view_range=[552, 600])
16:47:16 - openhands:INFO: resolve_issue.py:233 - [Read from /workspace/lib/services/__tests__/utils/test-utils.ts is successful.]
Here's the result of running `cat -n` on /workspace/lib/services/__tests__/utils/test-utils.ts:
552 export async function setupTest(): Promise<MyTestContext> {
553 // Generate a unique ID for this test run
554 const testId = uuidv4();
555 await setTestsRunningFlag()
556
557 // Create a new phone generator for this test instance
558 const phoneGenerator = new TestPhoneGenerator(testId);
559 const clientNumber = await phoneGenerator.generateClient();
560 const { phoneNumber: listingAgentNumber, name: listingAgentName } = await phoneGenerator.generateListingAgent();
561 const adminNumber = await phoneGenerator.generateAdmin();
562
563 const assistant = new AssistantCore(true);
564
565 // Create an instance of our CachedPropertyService
566 const cachedPropertyService = new CachedPropertyService();
567
568 const generateProperty = async (): Promise<PropertyDetails> => {
569 try {
570 // Use cached API service
571 const zillowService = new ZillowAPIService();
572 const result = await zillowService.getPropertyListings();
573
574 if (!result.props || result.props.length === 0) {
575 // Fallback to random data if no properties found
576 throw new Error('No properties found in search results');
577 }
578
579 // Sort properties by daysOnZillow from lowest to highest (newest listings first)
580 const sortedProps = [...result.props].sort((a, b) => {
581 const daysA = a.daysOnZillow || Number.MAX_SAFE_INTEGER;
582 const daysB = b.daysOnZillow || Number.MAX_SAFE_INTEGER;
583 return daysA - daysB;
584 });
585
586 // Find the first property with FOR_SALE status
587 let forSaleProperty: PropertyDetails | null = null;
588
589 // Get already used zpids
590 const usedZpids = phoneGenerator.getGeneratedZpids();
591
592 for (const prop of sortedProps) {
593 // Convert the property ZPID to test format for comparison
594 const testFormatZpid = prop.zpid ? convertToTestZpid(prop.zpid, testId) : '';
595
596 // Skip if this zpid has already been used (comparing in test format)
597 if (prop.zpid && usedZpids.includes(testFormatZpid)) {
598 console.log(`Skipping already used property with zpid: ${prop.zpid}`);
599 continue;
600 }
16:47:16 - openhands:INFO: agent_controller.py:970 - [Agent Controller 762916a8-4fb4-48c2-a3b7-b0917a1cf171-319e8e72befff0c3] Cleared pending action after 0.02s: FileReadAction (id=69)
16:47:16 - openhands:INFO: agent_controller.py:416 - [Agent Controller 762916a8-4fb4-48c2-a3b7-b0917a1cf171-319e8e72befff0c3] Stepping agent after event: FileReadObservation
[Agent Controller 762916a8-4fb4-48c2-a3b7-b0917a1cf171-319e8e72befff0c3] LEVEL 0 LOCAL STEP 33 GLOBAL STEP 33
16:47:24 - openhands:INFO: agent_controller.py:979 - [Agent Controller 762916a8-4fb4-48c2-a3b7-b0917a1cf171-319e8e72befff0c3] Set pending action: FileReadAction (id=-1)
16:47:24 - openhands:INFO: resolve_issue.py:233 - FileReadAction(path='/workspace/lib/services/__tests__/utils/test-utils.ts', start=0, end=-1, thought="Let's look at more of the setupTest function to understand how it works.", action=<ActionType.READ: 'read'>, security_risk=None, impl_source=<FileReadSource.OH_ACI: 'oh_aci'>, view_range=[600, 650])
16:47:24 - openhands:INFO: resolve_issue.py:233 - [Read from /workspace/lib/services/__tests__/utils/test-utils.ts is successful.]
Here's the result of running `cat -n` on /workspace/lib/services/__tests__/utils/test-utils.ts:
600 }
601
602 // Check if status_type or a similar field indicates FOR_SALE
603 if (prop.listingStatus === 'FOR_SALE') {
604 // For fresh listings (0-1 days on market), use the property directly without getPropertyDetails
605 if (prop && (prop.daysOnZillow === 0 || prop.daysOnZillow === 1) && !prop.description?.toLowerCase().includes('pending')) {
606 forSaleProperty = prop!;
607 forSaleProperty!.formattedAddress = prop.address; // this is the get all properties type
608 break;
609 }
610
611 const ps = new PropertyService(assistant.sharedState)
612 // Otherwise get full details to check for pending status in description
613 const tempPropertyDetails = await ps.getPropertyDetailsByZpid(prop.zpid);
614
615 // Convert the temp property ZPID to test format for comparison
616 const tempTestFormatZpid = tempPropertyDetails.zpid ? convertToTestZpid(tempPropertyDetails.zpid, testId) : '';
617
618 // Skip if this tempPropertyDetails zpid has already been used
619 if (tempPropertyDetails.zpid && usedZpids.includes(tempTestFormatZpid)) {
620 console.log(`Skipping already used property with zpid: ${tempPropertyDetails.zpid}`);
621 continue;
622 }
623
624 if (tempPropertyDetails.homeStatus === 'FOR_SALE' && !tempPropertyDetails.description?.toLowerCase().includes('pending')) {
625 forSaleProperty = tempPropertyDetails;
626 forSaleProperty!.formattedAddress = formatFullAddress(forSaleProperty!); /// this is the get 1 property type
627 break;
628 }
629 }
630 }
631
632 // If no FOR_SALE property was found, use the first property
633 if (!forSaleProperty) {
634 // Find the first unused property
635 for (const prop of sortedProps) {
636 if (!prop.zpid || !usedZpids.includes(prop.zpid)) {
637 forSaleProperty = prop as PropertyDetails;
638 break;
639 }
640 }
641
642 // If all properties have been used, just use the first one
643 if (!forSaleProperty) {
644 forSaleProperty = sortedProps[0] as PropertyDetails;
645 }
646 }
647
648 // Generate a test ZPID using our helper function
649 const testZpid = convertToTestZpid(forSaleProperty!.zpid, testId);
650
16:47:24 - openhands:INFO: agent_controller.py:970 - [Agent Controller 762916a8-4fb4-48c2-a3b7-b0917a1cf171-319e8e72befff0c3] Cleared pending action after 0.02s: FileReadAction (id=71)
16:47:24 - openhands:INFO: agent_controller.py:416 - [Agent Controller 762916a8-4fb4-48c2-a3b7-b0917a1cf171-319e8e72befff0c3] Stepping agent after event: FileReadObservation
[Agent Controller 762916a8-4fb4-48c2-a3b7-b0917a1cf171-319e8e72befff0c3] LEVEL 0 LOCAL STEP 34 GLOBAL STEP 34
16:47:34 - openhands:INFO: agent_controller.py:979 - [Agent Controller 762916a8-4fb4-48c2-a3b7-b0917a1cf171-319e8e72befff0c3] Set pending action: FileReadAction (id=-1)
16:47:34 - openhands:INFO: resolve_issue.py:233 - FileReadAction(path='/workspace/lib/services/__tests__/utils/test-utils.ts', start=0, end=-1, thought="Let's look at more of the setupTest function to understand how it works.", action=<ActionType.READ: 'read'>, security_risk=None, impl_source=<FileReadSource.OH_ACI: 'oh_aci'>, view_range=[650, 700])
16:47:34 - openhands:INFO: resolve_issue.py:233 - [Read from /workspace/lib/services/__tests__/utils/test-utils.ts is successful.]
Here's the result of running `cat -n` on /workspace/lib/services/__tests__/utils/test-utils.ts:
650
651 // Override the ZPID with our test ZPID
652 forSaleProperty!.zpid = testZpid;
653
654 // Track this ZPID for specific cleanup
655 phoneGenerator.addGeneratedZpid(testZpid);
656 console.log('testZpid', testZpid)
657
658 forSaleProperty!.isTest = true;
659
660 // Make sure attribution info is included using values from the current scope
661 forSaleProperty!.attributionInfo = {
662 agentName: listingAgentName,
663 agentPhoneNumber: listingAgentNumber
664 };
665
666 return forSaleProperty!;
667 } catch (error) {
668 console.error('Error fetching property details:', error);
669 console.timeEnd('getPropertyFromExtendedSearch')
670
671 // Fallback to random data if API call fails
672 const randomZpid = `random_${Math.floor(Math.random() * 1000000)}`;
673 const zpid = convertToTestZpid(randomZpid, testId);
674
675 // Track this ZPID for specific cleanup
676 phoneGenerator.addGeneratedZpid(zpid);
677 console.log('zpid', zpid)
678 const formattedAddress = `${Math.floor(Math.random() * 1000)} Test St, San Francisco, CA 94110`;
679
680 return {
681 zpid,
682 formattedAddress,
683 address: {
684 streetAddress: formattedAddress.split(',')[0],
685 city: 'San Francisco',
686 state: 'CA',
687 zipcode: '94110'
688 },
689 price: 1000000 + Math.floor(Math.random() * 1000000),
690 bedrooms: 2 + Math.floor(Math.random() * 3),
691 bathrooms: 2 + Math.floor(Math.random() * 2),
692 homeStatus: 'FOR_SALE',
693 latitude: 37.75 + Math.random() * 0.1,
694 longitude: -122.4 + Math.random() * 0.1,
695 attributionInfo: {
696 agentName: listingAgentName,
697 agentPhoneNumber: listingAgentNumber
698 }
699 };
700 }
16:47:34 - openhands:INFO: agent_controller.py:970 - [Agent Controller 762916a8-4fb4-48c2-a3b7-b0917a1cf171-319e8e72befff0c3] Cleared pending action after 0.02s: FileReadAction (id=73)
16:47:34 - openhands:INFO: agent_controller.py:416 - [Agent Controller 762916a8-4fb4-48c2-a3b7-b0917a1cf171-319e8e72befff0c3] Stepping agent after event: FileReadObservation
[Agent Controller 762916a8-4fb4-48c2-a3b7-b0917a1cf171-319e8e72befff0c3] LEVEL 0 LOCAL STEP 35 GLOBAL STEP 35
16:47:42 - openhands:INFO: agent_controller.py:979 - [Agent Controller 762916a8-4fb4-48c2-a3b7-b0917a1cf171-319e8e72befff0c3] Set pending action: FileReadAction (id=-1)
16:47:42 - openhands:INFO: resolve_issue.py:233 - FileReadAction(path='/workspace/lib/services/__tests__/utils/test-utils.ts', start=0, end=-1, thought="Let's look at the rest of the setupTest function to understand how it works.", action=<ActionType.READ: 'read'>, security_risk=None, impl_source=<FileReadSource.OH_ACI: 'oh_aci'>, view_range=[700, 750])
16:47:42 - openhands:INFO: resolve_issue.py:233 - [Read from /workspace/lib/services/__tests__/utils/test-utils.ts is successful.]
Here's the result of running `cat -n` on /workspace/lib/services/__tests__/utils/test-utils.ts:
700 }
701 };
702
703 const cleanup = async () => {
704 try {
705 // Use the enhanced phoneGenerator.cleanup() which now handles both Redis and Supabase
706 await phoneGenerator.cleanup();
707
708 // Also clear the tests_running flag if it was set by this test
709 await clearTestsRunningFlag();
710 } catch (error) {
711 console.error('Error during test cleanup:', error);
712 } finally {
713 // Reset the global current test context
714 global.__currentTestContext = undefined;
715 }
716 };
717
718 // Set required properties using valid UUID
719 const agent = await getListingAgentByPhone(listingAgentNumber)
720 if (!agent) {
721 throw new Error('Unable to find listing agent for test')
722 }
723
724 const client = await getClientByPhone(clientNumber)
725 if (!client) {
726 throw new Error('Unable to find client for test')
727 }
728
729 const testContext: MyTestContext = {
730 assistant,
731 clientNumber,
732 client,
733 listingAgentNumber,
734 listingAgent: agent,
735 adminNumber,
736 phoneGenerator,
737 generateProperty,
738 // getCachedPropertyFromExtendedSearch: () => cachedPropertyService.getPropertyFromExtendedSearch(),
739 cleanup,
740 supabaseClient,
741 testId,
742 setTestsRunningFlag,
743 clearTestsRunningFlag,
744 generateUnknownPerson: (name?: string) => phoneGenerator.generateUnknownNumber(name)
745 };
746
747 // Store the current test context globally so mocks can access it
748 global.__currentTestContext = testContext;
749
750 return testContext;
16:47:42 - openhands:INFO: agent_controller.py:970 - [Agent Controller 762916a8-4fb4-48c2-a3b7-b0917a1cf171-319e8e72befff0c3] Cleared pending action after 0.02s: FileReadAction (id=75)
16:47:42 - openhands:INFO: agent_controller.py:416 - [Agent Controller 762916a8-4fb4-48c2-a3b7-b0917a1cf171-319e8e72befff0c3] Stepping agent after event: FileReadObservation
[Agent Controller 762916a8-4fb4-48c2-a3b7-b0917a1cf171-319e8e72befff0c3] LEVEL 0 LOCAL STEP 36 GLOBAL STEP 36
16:48:01 - openhands:INFO: agent_controller.py:979 - [Agent Controller 762916a8-4fb4-48c2-a3b7-b0917a1cf171-319e8e72befff0c3] Set pending action: FileEditAction (id=-1)
16:48:01 - openhands:INFO: resolve_issue.py:233 - **FileEditAction**
Path: [/workspace/__tests__/listing_agent_tour_scheduling.test.ts]
Thought: Now I understand how to create a test. Let's update our test file to use the setupTest function.
Command: str_replace
Old String: ```
import { describe, it, expect, beforeEach, jest } from '@jest/globals'
import { createTestAssistant } from './tour_test_utils'
import { SharedState } from '@/lib/services/realEstate/core/sharedState'
import { supabaseClient } from '@/lib/services/shared/supabaseClient'
describe('Listing Agent Tour Scheduling', () => {
let assistant: any
let sharedState: SharedState
beforeEach(async () => {
// Create a test assistant
const result = await createTestAssistant()
assistant = result.assistant
sharedState = result.sharedState
// Mock the supabase client
jest.spyOn(supabaseClient, 'from').mockImplementation((table: string) => {
if (table === 'mr_properties') {
return {
select: jest.fn().mockReturnThis(),
insert: jest.fn().mockReturnThis(),
update: jest.fn().mockReturnThis(),
eq: jest.fn().mockReturnThis(),
overrideTypes: jest.fn().mockReturnValue({
data: [
{
zpid: '12345',
address: '123 Test St, San Francisco, CA 94110',
formatted_address: '123 Test St, San Francisco, CA 94110',
agent_id: 'agent123',
mr_users_id: 'user123',
client_proposed_showing_time: null,
agent_proposed_showing_time: null,
showing_status: null,
is_showami_tour: false
}
],
error: null
})
}
}
return {
select: jest.fn().mockReturnThis(),
insert: jest.fn().mockReturnThis(),
update: jest.fn().mockReturnThis(),
eq: jest.fn().mockReturnThis(),
overrideTypes: jest.fn().mockReturnValue({
data: [],
error: null
})
}
})
})
```
New String: ```
import { describe, it, expect, beforeEach, jest, afterEach } from '@jest/globals'
import { setupTest } from '@/lib/services/__tests__/utils/test-utils'
import { SharedState } from '@/lib/services/realEstate/core/sharedState'
import { supabaseClient } from '@/lib/services/shared/supabaseClient'
describe('Listing Agent Tour Scheduling', () => {
let testContext: any
let assistant: any
let sharedState: SharedState
beforeEach(async () => {
// Create a test assistant
testContext = await setupTest()
assistant = testContext.assistant
sharedState = assistant.sharedState
})
afterEach(async () => {
await testContext.cleanup()
})
```
16:48:01 - openhands:INFO: resolve_issue.py:233 - The file /workspace/__tests__/listing_agent_tour_scheduling.test.ts has been edited. Here's the result of running `cat -n` on a snippet of /workspace/__tests__/listing_agent_tour_scheduling.test.ts:
1 import { describe, it, expect, beforeEach, jest, afterEach } from '@jest/globals'
2 import { setupTest } from '@/lib/services/__tests__/utils/test-utils'
3 import { SharedState } from '@/lib/services/realEstate/core/sharedState'
4 import { supabaseClient } from '@/lib/services/shared/supabaseClient'
5
6 describe('Listing Agent Tour Scheduling', () => {
7 let testContext: any
8 let assistant: any
9 let sharedState: SharedState
10
11 beforeEach(async () => {
12 // Create a test assistant
13 testContext = await setupTest()
14 assistant = testContext.assistant
15 sharedState = assistant.sharedState
16 })
17
18 afterEach(async () => {
19 await testContext.cleanup()
20 })
21
22 it('should handle tour requests when we are the listing agent', async () => {
23 // Set up the shared state to simulate we are the listing agent
24 sharedState.listingAgent = {
25
Review the changes and make sure they are as expected. Edit the file again if necessary.
16:48:01 - openhands:INFO: agent_controller.py:970 - [Agent Controller 762916a8-4fb4-48c2-a3b7-b0917a1cf171-319e8e72befff0c3] Cleared pending action after 0.03s: FileEditAction (id=77)
16:48:01 - openhands:INFO: agent_controller.py:416 - [Agent Controller 762916a8-4fb4-48c2-a3b7-b0917a1cf171-319e8e72befff0c3] Stepping agent after event: FileEditObservation
[Agent Controller 762916a8-4fb4-48c2-a3b7-b0917a1cf171-319e8e72befff0c3] LEVEL 0 LOCAL STEP 37 GLOBAL STEP 37
16:48:23 - openhands:INFO: agent_controller.py:979 - [Agent Controller 762916a8-4fb4-48c2-a3b7-b0917a1cf171-319e8e72befff0c3] Set pending action: FileEditAction (id=-1)
16:48:23 - openhands:INFO: resolve_issue.py:233 - **FileEditAction**
Path: [/workspace/__tests__/listing_agent_tour_scheduling.test.ts]
Thought: Now let's update the test case to properly test the listing agent tour scheduling.
Command: str_replace
Old String: ```
it('should handle tour requests when we are the listing agent', async () => {
// Set up the shared state to simulate we are the listing agent
sharedState.listingAgent = {
agent_id: 'agent123',
phone_number: '+15555555555',
current_property_zpid: '12345',
current_mr_users_phone_number: '+16666666666'
}
// Simulate a client message requesting a tour
const response = await assistant.chat(
'I would like to schedule a tour for 123 Test St tomorrow at 3pm',
'+16666666666'
)
// Check that the response indicates we're handling it as the listing agent
expect(response).toContain('schedule')
expect(response).toContain('tour')
expect(response).toContain('123 Test St')
// Check that the draft messages were created correctly
const draftMessages = sharedState.messagingService.draftMessages
expect(draftMessages.length).toBeGreaterThan(0)
// Verify that the system recognized we're the listing agent
expect(sharedState.debugOutputs.some(output =>
output.includes('listing agent') || output.includes('listing side')
)).toBeTruthy()
})
```
New String: ```
it('should handle tour requests when we are the listing agent', async () => {
// Generate a test property
const property = await testContext.generateProperty();
// Set up the shared state to simulate we are the listing agent
sharedState.listingAgent = {
agent_id: testContext.listingAgent.agent_id,
phone_number: testContext.listingAgent.phone_number,
current_property_zpid: property.zpid,
current_mr_users_phone_number: testContext.client.phone_number,
current_property: property.formattedAddress,
first_name: testContext.listingAgent.first_name,
last_name: testContext.listingAgent.last_name
}
// Create a property record in the database
const { error } = await supabaseClient
.from('mr_properties')
.insert({
zpid: property.zpid,
address: property.formattedAddress,
formatted_address: property.formattedAddress,
agent_id: testContext.listingAgent.agent_id,
mr_users_id: testContext.client.user_id,
price: property.price || 1000000,
bedrooms: property.bedrooms || 3,
bathrooms: property.bathrooms || 2,
is_showami_tour: false
});
if (error) {
console.error('Error creating property record:', error);
}
// Simulate a client message requesting a tour
const response = await assistant.chat(
`I would like to schedule a tour for ${property.formattedAddress} tomorrow at 3pm`,
testContext.client.phone_number
)
// Check that the response indicates we're handling it as the listing agent
expect(response).toContain('schedule')
expect(response).toContain('tour')
// Check that the draft messages were created correctly
const draftMessages = sharedState.messagingService.draftMessages
expect(draftMessages.length).toBeGreaterThan(0)
// Log debug outputs to understand what's happening
console.log('Debug outputs:', sharedState.debugOutputs);
console.log('Draft messages:', draftMessages);
// Verify that the system recognized we're the listing agent
expect(sharedState.debugOutputs.some(output =>
output.includes('listing agent') || output.includes('listing side')
)).toBeTruthy()
})
```
16:48:23 - openhands:INFO: resolve_issue.py:233 - The file /workspace/__tests__/listing_agent_tour_scheduling.test.ts has been edited. Here's the result of running `cat -n` on a snippet of /workspace/__tests__/listing_agent_tour_scheduling.test.ts:
19 await testContext.cleanup()
20 })
21
22 it('should handle tour requests when we are the listing agent', async () => {
23 // Generate a test property
24 const property = await testContext.generateProperty();
25
26 // Set up the shared state to simulate we are the listing agent
27 sharedState.listingAgent = {
28 agent_id: testContext.listingAgent.agent_id,
29 phone_number: testContext.listingAgent.phone_number,
30 current_property_zpid: property.zpid,
31 current_mr_users_phone_number: testContext.client.phone_number,
32 current_property: property.formattedAddress,
33 first_name: testContext.listingAgent.first_name,
34 last_name: testContext.listingAgent.last_name
35 }
36
37 // Create a property record in the database
38 const { error } = await supabaseClient
39 .from('mr_properties')
40 .insert({
41 zpid: property.zpid,
42 address: property.formattedAddress,
43 formatted_address: property.formattedAddress,
44 agent_id: testContext.listingAgent.agent_id,
45 mr_users_id: testContext.client.user_id,
46 price: property.price || 1000000,
47 bedrooms: property.bedrooms || 3,
48 bathrooms: property.bathrooms || 2,
49 is_showami_tour: false
50 });
51
52 if (error) {
53 console.error('Error creating property record:', error);
54 }
55
56 // Simulate a client message requesting a tour
57 const response = await assistant.chat(
58 `I would like to schedule a tour for ${property.formattedAddress} tomorrow at 3pm`,
59 testContext.client.phone_number
60 )
61
62 // Check that the response indicates we're handling it as the listing agent
63 expect(response).toContain('schedule')
64 expect(response).toContain('tour')
65
66 // Check that the draft messages were created correctly
67 const draftMessages = sharedState.messagingService.draftMessages
68 expect(draftMessages.length).toBeGreaterThan(0)
69
70 // Log debug outputs to understand what's happening
71 console.log('Debug outputs:', sharedState.debugOutputs);
72 console.log('Draft messages:', draftMessages);
73
74 // Verify that the system recognized we're the listing agent
75 expect(sharedState.debugOutputs.some(output =>
76 output.includes('listing agent') || output.includes('listing side')
77 )).toBeTruthy()
78 })
79 })
Review the changes and make sure they are as expected. Edit the file again if necessary.
16:48:23 - openhands:INFO: agent_controller.py:970 - [Agent Controller 762916a8-4fb4-48c2-a3b7-b0917a1cf171-319e8e72befff0c3] Cleared pending action after 0.03s: FileEditAction (id=79)
16:48:23 - openhands:INFO: agent_controller.py:416 - [Agent Controller 762916a8-4fb4-48c2-a3b7-b0917a1cf171-319e8e72befff0c3] Stepping agent after event: FileEditObservation
[Agent Controller 762916a8-4fb4-48c2-a3b7-b0917a1cf171-319e8e72befff0c3] LEVEL 0 LOCAL STEP 38 GLOBAL STEP 38
16:48:32 - openhands:INFO: agent_controller.py:979 - [Agent Controller 762916a8-4fb4-48c2-a3b7-b0917a1cf171-319e8e72befff0c3] Set pending action: CmdRunAction (id=-1)
16:48:32 - openhands:INFO: resolve_issue.py:233 - **CmdRunAction (source=EventSource.AGENT, is_input=False)**
THOUGHT: Now let's run the test to see what happens when we're the listing agent.
COMMAND:
./bun test __tests__/listing_agent_tour_scheduling.test.ts
16:48:40 - openhands:INFO: resolve_issue.py:233 - **CmdOutputObservation (source=EventSource.AGENT, exit code=1, metadata={
"exit_code": 1,
"pid": -1,
"username": "openhands",
"hostname": "aae885bd2acb",
"working_dir": "/workspace",
"py_interpreter_path": "/openhands/poetry/openhands-ai-5O4_aCHf-py3.12/bin/python",
"prefix": "",
"suffix": "\n[The command completed with exit code 1.]"
})**
--BEGIN AGENT OBSERVATION--
bun test v1.1.34 (5e5e7c60)
__tests__/listing_agent_tour_scheduling.test.ts:
Set tests_running flag to true with 600 second expiry
[DB] No data found for user: +test_client73c2_0
[DB] No data found for listing agent by phone: +test_agent73c2_0
Cache hit for cache:getPropertyLis...
Cache hit for cache:getPropertyDet...
testZpid test_73c26a0d_15105185
Error creating property record: {
code: "23502",
details: "Failing row contains (069cd9b0-43f7-405b-bdb8-aecf9562e2f5, null, 1418 27th Ave, San Francisco, CA, 94122, null, null, null, 2750000.00, 4, 4.0, null, null, 2025-04-23 16:48:36.18045+00, 2025-04-23 16:48:36.18045+00, test_73c26a0d_15105185, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, 19ba2469-1a3a-4982-8255-f70798e3862d, null, 3993, null, null, null, 1418 27th Ave, San Francisco, CA, 94122, null, null, null, null, null, null, null, f, null, null, null, null, null).",
hint: null,
message: "null value in column \"city\" of relation \"mr_properties\" violates not-null constraint",
}
error: "failed to parse logic tree ((and(sender_phone_number.eq.I would like to schedule a tour for 1418 27th Ave, San Francisco, CA, 94122 tomorrow at 3pm,receiver_phone_number.eq.+test_client73c2_0),and(sender_phone_number.eq.+test_client73c2_0,receiver_phone_number.eq.I would like to schedule a tour for 1418 27th Ave, San Francisco, CA, 94122 tomorrow at 3pm)))" (line 1, column 95)
✗ Listing Agent Tour Scheduling > should handle tour requests when we are the listing agent [954.00ms]
Cleaning up 1 specifically tracked ZPIDs
[ "test_73c26a0d_15105185" ]
Cleared tests_running flag
---------------------------------------------------------------|---------|---------|-------------------
File | % Funcs | % Lines | Uncovered Line #s
---------------------------------------------------------------|---------|---------|-------------------
All files | 20.54 | 25.77 |
books_and_resources/processing/searchBooks.ts | 0.00 | 3.30 | 34-60,83-91,104-233,244-312,322-376,383-412,423-454
lib/redis.ts | 100.00 | 100.00 |
lib/services/__tests__/utils/test-utils.ts | 53.85 | 48.73 | 258-297,301,305,455-458,462-465,469,495-523,535-547,754-770,784-814,822-852,860-888,894-908,913-927,932-1016,1031-1113,1119-1131,1136-1140,1149-1154
lib/services/buyer_flow/buyer_flow.ts | 0.00 | 2.95 | 135-957
lib/services/buyer_flow/external.ts | 0.00 | 6.17 | 11-86
lib/services/buyer_flow/property.ts | 11.11 | 4.65 | 30-193
lib/services/buyer_flow/showing.ts | 0.00 | 3.89 | 32-99,109-131,140-169,182-423,437-558,595-602,611-627,636-990
lib/services/calendar/supabaseCalendar.ts | 0.00 | 5.63 | 9-75
lib/services/calendar/zapierCalendar.ts | 0.00 | 3.20 | 33-61,102-121,131-167,177-243,256-293,305-355
lib/services/deprecated_redfin_utils/rfu.ts | 0.00 | 9.60 | 19-90,99-134,143-147
lib/services/drip_box/drip.ts | 0.00 | 3.49 | 57-60,93-323,348-693
lib/services/drip_box/dripFrequency.ts | 0.00 | 0.69 | 24-88,102-179
lib/services/drip_box/dripMessageBuilder.ts | 0.00 | 3.54 | 24-132
lib/services/drip_box/dripPreviousListings.ts | 0.00 | 3.45 | 17-46,59-84
lib/services/drip_box/dripScheduler.ts | 0.00 | 4.71 | 24-104
lib/services/drip_box/utils/propertyConverters.ts | 0.00 | 2.74 | 24-34,41-51,58-68,75-93,101-119
lib/services/drip_box/utils/propertyUtils.ts | 0.00 | 3.13 | 11-28,37-55,66-128,141-164
lib/services/drip_box/utils/schedulingUtils.ts | 0.00 | 1.69 | 27-232,242-282,295-354,366-408
lib/services/drip_box/utils/searchUtils.ts | 0.00 | 3.85 | 30-42,49-64,71-81,88-104,117-161,175-226,239-256,269-321
lib/services/drip_box/utils/tourFollowup.ts | 0.00 | 2.11 | 29-69,82-218,231-332,344-420,433-492
lib/services/drip_box/utils/userJourneyUtils.ts | 0.00 | 1.92 | 40-108,121-181,193-207,222-280
lib/services/git/createPullRequest.ts | 0.00 | 2.07 | 30-45,58-153,160-390,397-443,450-481,491-605,614-661,668-788,795-798
lib/services/knowledge_base/processUserInfo.ts | 0.00 | 3.50 | 48-425,439-533,545-623
lib/services/phone_management/phoneManager.ts | 0.00 | 1.98 | 18-116
lib/services/realEstate/configs/clientTools.ts | 50.00 | 97.46 | 629-641
lib/services/realEstate/configs/realtorTools.ts | 100.00 | 100.00 |
lib/services/realEstate/configs/sellerTools.ts | 100.00 | 100.00 |
lib/services/realEstate/constants/phoneNumbers.ts | 0.00 | 88.24 | 49-51
lib/services/realEstate/constants/properties.ts | 0.00 | 100.00 |
lib/services/realEstate/convertClientAddressToFullAddress.ts | 0.00 | 4.94 | 7-83
lib/services/realEstate/core/AdminManager.ts | 33.33 | 6.25 | 14-118
lib/services/realEstate/core/ContextProvider.ts | 0.00 | 8.33 | 14-57,68-89
lib/services/realEstate/core/ModelService.ts | 25.00 | 7.56 | 41-260
lib/services/realEstate/core/ParticipantManager.ts | 0.00 | 2.57 | 28-444
lib/services/realEstate/core/ResponseGenerator.ts | 16.67 | 2.66 | 20-458
lib/services/realEstate/core/ToolCallHandler.ts | 0.00 | 2.62 | 39-297
lib/services/realEstate/core/aiDetection.ts | 0.00 | 3.37 | 44-79,92-128,139-143,153-160
lib/services/realEstate/core/assistantCore.ts | 60.00 | 97.87 | 116-118
lib/services/realEstate/core/bookInstructions.ts | 0.00 | 1.71 | 27-47,56-96,110-166,178-216,229-358
lib/services/realEstate/core/callModel.ts | 0.00 | 3.56 | 61-95,115-160,181-233,243-245,268-337,361-448,474-557,584-680,706-766,786-809,835-928,954-1057,1081-1139,1158-1196,1216-1278
lib/services/realEstate/core/chatMessageProcessor.ts | 16.67 | 10.41 | 106-518
lib/services/realEstate/core/databaseManager.ts | 23.08 | 4.39 | 52-573,600-643
lib/services/realEstate/core/followUp.ts | 0.00 | 5.26 | 33-48,57-84,95-115,127-154,164-180,188-236,246-260,272-292,304-378
lib/services/realEstate/core/listingAgentManager.ts | 12.50 | 2.04 | 28-217,229-709
lib/services/realEstate/core/messageFormatter.ts | 0.00 | 8.33 | 4-14
lib/services/realEstate/core/messageUtils.ts | 0.00 | 2.81 | 45-74,89-285,295-304,319-517,528-579,589-636,648-702,715-852,863-895
lib/services/realEstate/core/messagingService.ts | 10.00 | 8.62 | 73-238,247-264,275-493
lib/services/realEstate/core/propertyAccessExtractor.ts | 0.00 | 2.13 | 32-258,269-300,312-374
lib/services/realEstate/core/sharedState.ts | 100.00 | 100.00 |
lib/services/realEstate/core/toolCallCounts.ts | 33.33 | 65.71 | 35-43,52-54
lib/services/realEstate/core/whetherIncludeZillowLink.ts | 0.00 | 3.21 | 18-25,29-33,46-120,133-195
lib/services/realEstate/getFilteredPropertyInfo.ts | 0.00 | 1.00 | 9-107
lib/services/realEstate/linking/linkUsers.ts | 0.00 | 2.70 | 10-45
lib/services/realEstate/prompts/promptSelector.ts | 0.00 | 9.09 | 21-80
lib/services/realEstate/prompts/realtorShowamiRelay.ts | 100.00 | 100.00 |
lib/services/realEstate/prompts/sellerPropertyFAQ.ts | 0.00 | 54.69 | 15-72
lib/services/realEstate/prompts/talksToClientPrompt.ts | 100.00 | 100.00 |
lib/services/realEstate/prompts/talksToRealtorPrompt.ts | 100.00 | 100.00 |
lib/services/realEstate/prompts/talksToSellerPrompt.ts | 100.00 | 100.00 |
lib/services/realEstate/utils/anthropicUtils.ts | 0.00 | 4.76 | 9-14,23-43,52-59,68-92
lib/services/realEstate/utils/claude2OpenaiFormatConverter.ts | 0.00 | 2.50 | 17-37,46-93,103-137,147-159
lib/services/realEstate/utils/rooClaude2OpenaiConvert.ts | 0.00 | 0.49 | 4-151,156-209
lib/services/realtor_flow/realtor_flow.ts | 0.00 | 4.62 | 41-267
lib/services/redfin_utils/marked_fields.ts | 100.00 | 100.00 |
lib/services/redfin_utils/rapidapi_redf.ts | 0.00 | 5.82 | 26-54,76-96,107-182,194-271,284-306,316-354,363-366,375-378,388-432,441-461
lib/services/seller_flow/seller_flow.ts | 0.00 | 4.60 | 32-197
lib/services/serper_ops/ser.ts | 0.00 | 3.13 | 5-6,17-76,86-100,111-143,153-168,178-206
lib/services/shared/apiUsageTracking.ts | 0.00 | 27.07 | 112-160,169-194,203-224
lib/services/shared/cacheDecorator.ts | 62.50 | 81.25 | 9,141-153
lib/services/shared/homeHarvestClient.ts | 0.00 | 2.81 | 74-75,82-85,102-129,142-308,320-328,340-360,378-488,507-613
lib/services/shared/perplexityService.ts | 0.00 | 3.37 | 21-154,164-193,203-249,258-300,309,319-430,446-481,492-518
lib/services/shared/phoneUtils.ts | 0.00 | 15.49 | 10,13,19,26-29,33-41,50-70,79-97,106-134,143-145,154-164,173-175,185-194,203-210
lib/services/shared/supabase/agents.ts | 23.53 | 10.76 | 16-30,39-54,63-79,88-104,128-129,143-151,160-171,180-268,277-299,308-322,331-348,357-371,380-407,422-423,433-434,445-529
lib/services/shared/supabase/calls.ts | 0.00 | 5.08 | 15-42,51-66,75-90,99-120,129-145,153-165
lib/services/shared/supabase/client.ts | 100.00 | 54.55 | 14-18
lib/services/shared/supabase/emails.ts | 0.00 | 5.88 | 16-32,42-58,68-81
lib/services/shared/supabase/index.ts | 100.00 | 100.00 |
lib/services/shared/supabase/messageEmbeddings.ts | 0.00 | 5.66 | 15-34,43-60,69-84,92-103,112-127,136-153
lib/services/shared/supabase/messages.ts | 0.00 | 3.96 | 18-40,49-69,78-100,109-127,136-155,164-183,192-226,235-269,278-297,306-336,345-365,374-396
lib/services/shared/supabase/people.ts | 0.00 | 4.26 | 15-29,38-52,61-101,112-130
lib/services/shared/supabase/properties.ts | 0.00 | 4.61 | 19-35,45-65,74-90,100-116,126-152,162-177,186-223,232-245,254-275,284-298,309-326,336-349,358-371,380-394,405-435,446-480
lib/services/shared/supabase/test.ts | 0.00 | 18.18 | 10-18
lib/services/shared/supabase/users.ts | 33.33 | 19.90 | 30-31,45-61,70-82,91-105,115-138,147-166,175-185,200-201,211-212,223-257,267-278
lib/services/shared/supabaseClient.ts | 100.00 | 100.00 |
lib/services/zillow_ops/extendedSearch.ts | 0.00 | 1.79 | 16-125
lib/services/zillow_ops/zil.ts | 0.00 | 2.69 | 29-74,83-100,110-208,214-216,220-222,226-228,237-328,332-340,351-395,410-724,736-753,764-779,783-810,852-941,951-980,992-1021,1032-1153,1164-1209
lib/services/zillow_ops/zutils.ts | 100.00 | 100.00 |
lib/twilioUtils.ts | 0.00 | 2.40 | 14-61,70-72,81-83,92-96,106-129,139-159,169-179,188-238,246-249,257-274,281-296,306-324,335-363,374-389,398-551,555-649,659-686,697-727,733-765
lib/types/MREmailFilter.ts | 0.00 | 2.17 | 9-53
lib/types/MRUserFilter.ts | 0.00 | 1.82 | 9-62
lib/types/property.ts | 33.33 | 35.71 | 556-564,590-598
lib/types/zodMRListingAgentSchema.ts | 100.00 | 100.00 |
lib/types/zodMRUserSchema.ts | 100.00 | 100.00 |
lib/utils.ts | 6.25 | 26.79 | 10,19-37,41-46,50-53,56-58,62,65-67,79-91,96,100,104,108-120,128,136-140,144-153
lib/utils/dates.ts | 0.00 | 30.95 | 19-30,70-73,80-84,91-92,99-100,122-125
lib/utils/errorUtils.ts | 0.00 | 10.20 | 6-11,20-40,51-67
lib/utils/getShorthandAddress.ts | 0.00 | 2.50 | 8-46
lib/utils/parseShowingTime.ts | 0.00 | 2.78 | 10-102,112-123
lib/utils/performanceTracker.ts | 0.00 | 12.63 | 11,19-21,29-52,62-93,104-118,129,133-139
lib/utils/rateLimiter.ts | 50.00 | 21.05 | 13-27
---------------------------------------------------------------|---------|---------|-------------------
0 pass
1 fail
Ran 1 tests across 1 files. [7.98s]
[The command completed with exit code 1.]
[Current working directory: /workspace]
[Python interpreter: /openhands/poetry/openhands-ai-5O4_aCHf-py3.12/bin/python]
[Command finished with exit code 1]
--END AGENT OBSERVATION--
16:48:40 - openhands:INFO: agent_controller.py:970 - [Agent Controller 762916a8-4fb4-48c2-a3b7-b0917a1cf171-319e8e72befff0c3] Cleared pending action after 8.18s: CmdRunAction (id=81)
16:48:40 - openhands:INFO: agent_controller.py:416 - [Agent Controller 762916a8-4fb4-48c2-a3b7-b0917a1cf171-319e8e72befff0c3] Stepping agent after event: CmdOutputObservation
[Agent Controller 762916a8-4fb4-48c2-a3b7-b0917a1cf171-319e8e72befff0c3] LEVEL 0 LOCAL STEP 39 GLOBAL STEP 39
16:49:03 - openhands:INFO: agent_controller.py:979 - [Agent Controller 762916a8-4fb4-48c2-a3b7-b0917a1cf171-319e8e72befff0c3] Set pending action: FileEditAction (id=-1)
16:49:03 - openhands:INFO: resolve_issue.py:233 - **FileEditAction**
Path: [/workspace/__tests__/listing_agent_tour_scheduling.test.ts]
Thought: It looks like we're having an issue with the property creation in the database. Let's fix the test by providing all the required fields for the property.
Command: str_replace
Old String: ```
// Create a property record in the database
const { error } = await supabaseClient
.from('mr_properties')
.insert({
zpid: property.zpid,
address: property.formattedAddress,
formatted_address: property.formattedAddress,
agent_id: testContext.listingAgent.agent_id,
mr_users_id: testContext.client.user_id,
price: property.price || 1000000,
bedrooms: property.bedrooms || 3,
bathrooms: property.bathrooms || 2,
is_showami_tour: false
});
if (error) {
console.error('Error creating property record:', error);
}
```
New String: ```
// Extract address parts
const addressParts = property.formattedAddress.split(',');
const streetAddress = addressParts[0].trim();
const city = addressParts[1]?.trim() || 'San Francisco';
const stateZip = addressParts[2]?.trim() || 'CA 94110';
const [state, zip] = stateZip.split(' ');
// Create a property record in the database
const { error } = await supabaseClient
.from('mr_properties')
.insert({
zpid: property.zpid,
address: property.formattedAddress,
formatted_address: property.formattedAddress,
agent_id: testContext.listingAgent.agent_id,
mr_users_id: testContext.client.user_id,
price: property.price || 1000000,
bedrooms: property.bedrooms || 3,
bathrooms: property.bathrooms || 2,
is_showami_tour: false,
street_address: streetAddress,
city: city,
state: state.trim(),
zip: zip?.trim() || '94110'
});
if (error) {
console.error('Error creating property record:', error);
}
```
16:49:03 - openhands:INFO: resolve_issue.py:233 - The file /workspace/__tests__/listing_agent_tour_scheduling.test.ts has been edited. Here's the result of running `cat -n` on a snippet of /workspace/__tests__/listing_agent_tour_scheduling.test.ts:
34 last_name: testContext.listingAgent.last_name
35 }
36
37 // Extract address parts
38 const addressParts = property.formattedAddress.split(',');
39 const streetAddress = addressParts[0].trim();
40 const city = addressParts[1]?.trim() || 'San Francisco';
41 const stateZip = addressParts[2]?.trim() || 'CA 94110';
42 const [state, zip] = stateZip.split(' ');
43
44 // Create a property record in the database
45 const { error } = await supabaseClient
46 .from('mr_properties')
47 .insert({
48 zpid: property.zpid,
49 address: property.formattedAddress,
50 formatted_address: property.formattedAddress,
51 agent_id: testContext.listingAgent.agent_id,
52 mr_users_id: testContext.client.user_id,
53 price: property.price || 1000000,
54 bedrooms: property.bedrooms || 3,
55 bathrooms: property.bathrooms || 2,
56 is_showami_tour: false,
57 street_address: streetAddress,
58 city: city,
59 state: state.trim(),
60 zip: zip?.trim() || '94110'
61 });
62
63 if (error) {
64 console.error('Error creating property record:', error);
65 }
66
67 // Simulate a client message requesting a tour
68 const response = await assistant.chat(
69 `I would like to schedule a tour for ${property.formattedAddress} tomorrow at 3pm`,
70
Review the changes and make sure they are as expected. Edit the file again if necessary.
16:49:03 - openhands:INFO: agent_controller.py:970 - [Agent Controller 762916a8-4fb4-48c2-a3b7-b0917a1cf171-319e8e72befff0c3] Cleared pending action after 0.02s: FileEditAction (id=83)
16:49:03 - openhands:INFO: agent_controller.py:416 - [Agent Controller 762916a8-4fb4-48c2-a3b7-b0917a1cf171-319e8e72befff0c3] Stepping agent after event: FileEditObservation
[Agent Controller 762916a8-4fb4-48c2-a3b7-b0917a1cf171-319e8e72befff0c3] LEVEL 0 LOCAL STEP 40 GLOBAL STEP 40
16:49:13 - openhands:INFO: agent_controller.py:979 - [Agent Controller 762916a8-4fb4-48c2-a3b7-b0917a1cf171-319e8e72befff0c3] Set pending action: CmdRunAction (id=-1)
16:49:13 - openhands:INFO: resolve_issue.py:233 - **CmdRunAction (source=EventSource.AGENT, is_input=False)**
THOUGHT: Now let's run the test again to see if it works.
COMMAND:
./bun test __tests__/listing_agent_tour_scheduling.test.ts
16:49:21 - openhands:INFO: resolve_issue.py:233 - **CmdOutputObservation (source=EventSource.AGENT, exit code=1, metadata={
"exit_code": 1,
"pid": -1,
"username": "openhands",
"hostname": "aae885bd2acb",
"working_dir": "/workspace",
"py_interpreter_path": "/openhands/poetry/openhands-ai-5O4_aCHf-py3.12/bin/python",
"prefix": "",
"suffix": "\n[The command completed with exit code 1.]"
})**
--BEGIN AGENT OBSERVATION--
bun test v1.1.34 (5e5e7c60)
__tests__/listing_agent_tour_scheduling.test.ts:
Set tests_running flag to true with 600 second expiry
[DB] No data found for user: +test_clientb058_0
[DB] No data found for listing agent by phone: +test_agentb058_0
Cache hit for cache:getPropertyLis...
Cache hit for cache:getPropertyDet...
testZpid test_b058457b_15105185
Error creating property record: {
code: "PGRST204",
details: null,
hint: null,
message: "Column 'street_address' of relation 'mr_properties' does not exist",
}
error: "failed to parse logic tree ((and(sender_phone_number.eq.I would like to schedule a tour for 1418 27th Ave, San Francisco, CA, 94122 tomorrow at 3pm,receiver_phone_number.eq.+test_clientb058_0),and(sender_phone_number.eq.+test_clientb058_0,receiver_phone_number.eq.I would like to schedule a tour for 1418 27th Ave, San Francisco, CA, 94122 tomorrow at 3pm)))" (line 1, column 95)
✗ Listing Agent Tour Scheduling > should handle tour requests when we are the listing agent [667.00ms]
Cleaning up 1 specifically tracked ZPIDs
[ "test_b058457b_15105185" ]
Cleared tests_running flag
---------------------------------------------------------------|---------|---------|-------------------
File | % Funcs | % Lines | Uncovered Line #s
---------------------------------------------------------------|---------|---------|-------------------
All files | 20.54 | 25.77 |
books_and_resources/processing/searchBooks.ts | 0.00 | 3.30 | 34-60,83-91,104-233,244-312,322-376,383-412,423-454
lib/redis.ts | 100.00 | 100.00 |
lib/services/__tests__/utils/test-utils.ts | 53.85 | 48.73 | 258-297,301,305,455-458,462-465,469,495-523,535-547,754-770,784-814,822-852,860-888,894-908,913-927,932-1016,1031-1113,1119-1131,1136-1140,1149-1154
lib/services/buyer_flow/buyer_flow.ts | 0.00 | 2.95 | 135-957
lib/services/buyer_flow/external.ts | 0.00 | 6.17 | 11-86
lib/services/buyer_flow/property.ts | 11.11 | 4.65 | 30-193
lib/services/buyer_flow/showing.ts | 0.00 | 3.89 | 32-99,109-131,140-169,182-423,437-558,595-602,611-627,636-990
lib/services/calendar/supabaseCalendar.ts | 0.00 | 5.63 | 9-75
lib/services/calendar/zapierCalendar.ts | 0.00 | 3.20 | 33-61,102-121,131-167,177-243,256-293,305-355
lib/services/deprecated_redfin_utils/rfu.ts | 0.00 | 9.60 | 19-90,99-134,143-147
lib/services/drip_box/drip.ts | 0.00 | 3.49 | 57-60,93-323,348-693
lib/services/drip_box/dripFrequency.ts | 0.00 | 0.69 | 24-88,102-179
lib/services/drip_box/dripMessageBuilder.ts | 0.00 | 3.54 | 24-132
lib/services/drip_box/dripPreviousListings.ts | 0.00 | 3.45 | 17-46,59-84
lib/services/drip_box/dripScheduler.ts | 0.00 | 4.71 | 24-104
lib/services/drip_box/utils/propertyConverters.ts | 0.00 | 2.74 | 24-34,41-51,58-68,75-93,101-119
lib/services/drip_box/utils/propertyUtils.ts | 0.00 | 3.13 | 11-28,37-55,66-128,141-164
lib/services/drip_box/utils/schedulingUtils.ts | 0.00 | 1.69 | 27-232,242-282,295-354,366-408
lib/services/drip_box/utils/searchUtils.ts | 0.00 | 3.85 | 30-42,49-64,71-81,88-104,117-161,175-226,239-256,269-321
lib/services/drip_box/utils/tourFollowup.ts | 0.00 | 2.11 | 29-69,82-218,231-332,344-420,433-492
lib/services/drip_box/utils/userJourneyUtils.ts | 0.00 | 1.92 | 40-108,121-181,193-207,222-280
lib/services/git/createPullRequest.ts | 0.00 | 2.07 | 30-45,58-153,160-390,397-443,450-481,491-605,614-661,668-788,795-798
lib/services/knowledge_base/processUserInfo.ts | 0.00 | 3.50 | 48-425,439-533,545-623
lib/services/phone_management/phoneManager.ts | 0.00 | 1.98 | 18-116
lib/services/realEstate/configs/clientTools.ts | 50.00 | 97.46 | 629-641
lib/services/realEstate/configs/realtorTools.ts | 100.00 | 100.00 |
lib/services/realEstate/configs/sellerTools.ts | 100.00 | 100.00 |
lib/services/realEstate/constants/phoneNumbers.ts | 0.00 | 88.24 | 49-51
lib/services/realEstate/constants/properties.ts | 0.00 | 100.00 |
lib/services/realEstate/convertClientAddressToFullAddress.ts | 0.00 | 4.94 | 7-83
lib/services/realEstate/core/AdminManager.ts | 33.33 | 6.25 | 14-118
lib/services/realEstate/core/ContextProvider.ts | 0.00 | 8.33 | 14-57,68-89
lib/services/realEstate/core/ModelService.ts | 25.00 | 7.56 | 41-260
lib/services/realEstate/core/ParticipantManager.ts | 0.00 | 2.57 | 28-444
lib/services/realEstate/core/ResponseGenerator.ts | 16.67 | 2.66 | 20-458
lib/services/realEstate/core/ToolCallHandler.ts | 0.00 | 2.62 | 39-297
lib/services/realEstate/core/aiDetection.ts | 0.00 | 3.37 | 44-79,92-128,139-143,153-160
lib/services/realEstate/core/assistantCore.ts | 60.00 | 97.87 | 116-118
lib/services/realEstate/core/bookInstructions.ts | 0.00 | 1.71 | 27-47,56-96,110-166,178-216,229-358
lib/services/realEstate/core/callModel.ts | 0.00 | 3.56 | 61-95,115-160,181-233,243-245,268-337,361-448,474-557,584-680,706-766,786-809,835-928,954-1057,1081-1139,1158-1196,1216-1278
lib/services/realEstate/core/chatMessageProcessor.ts | 16.67 | 10.41 | 106-518
lib/services/realEstate/core/databaseManager.ts | 23.08 | 4.39 | 52-573,600-643
lib/services/realEstate/core/followUp.ts | 0.00 | 5.26 | 33-48,57-84,95-115,127-154,164-180,188-236,246-260,272-292,304-378
lib/services/realEstate/core/listingAgentManager.ts | 12.50 | 2.04 | 28-217,229-709
lib/services/realEstate/core/messageFormatter.ts | 0.00 | 8.33 | 4-14
lib/services/realEstate/core/messageUtils.ts | 0.00 | 2.81 | 45-74,89-285,295-304,319-517,528-579,589-636,648-702,715-852,863-895
lib/services/realEstate/core/messagingService.ts | 10.00 | 8.62 | 73-238,247-264,275-493
lib/services/realEstate/core/propertyAccessExtractor.ts | 0.00 | 2.13 | 32-258,269-300,312-374
lib/services/realEstate/core/sharedState.ts | 100.00 | 100.00 |
lib/services/realEstate/core/toolCallCounts.ts | 33.33 | 65.71 | 35-43,52-54
lib/services/realEstate/core/whetherIncludeZillowLink.ts | 0.00 | 3.21 | 18-25,29-33,46-120,133-195
lib/services/realEstate/getFilteredPropertyInfo.ts | 0.00 | 1.00 | 9-107
lib/services/realEstate/linking/linkUsers.ts | 0.00 | 2.70 | 10-45
lib/services/realEstate/prompts/promptSelector.ts | 0.00 | 9.09 | 21-80
lib/services/realEstate/prompts/realtorShowamiRelay.ts | 100.00 | 100.00 |
lib/services/realEstate/prompts/sellerPropertyFAQ.ts | 0.00 | 54.69 | 15-72
lib/services/realEstate/prompts/talksToClientPrompt.ts | 100.00 | 100.00 |
lib/services/realEstate/prompts/talksToRealtorPrompt.ts | 100.00 | 100.00 |
lib/services/realEstate/prompts/talksToSellerPrompt.ts | 100.00 | 100.00 |
lib/services/realEstate/utils/anthropicUtils.ts | 0.00 | 4.76 | 9-14,23-43,52-59,68-92
lib/services/realEstate/utils/claude2OpenaiFormatConverter.ts | 0.00 | 2.50 | 17-37,46-93,103-137,147-159
lib/services/realEstate/utils/rooClaude2OpenaiConvert.ts | 0.00 | 0.49 | 4-151,156-209
lib/services/realtor_flow/realtor_flow.ts | 0.00 | 4.62 | 41-267
lib/services/redfin_utils/marked_fields.ts | 100.00 | 100.00 |
lib/services/redfin_utils/rapidapi_redf.ts | 0.00 | 5.82 | 26-54,76-96,107-182,194-271,284-306,316-354,363-366,375-378,388-432,441-461
lib/services/seller_flow/seller_flow.ts | 0.00 | 4.60 | 32-197
lib/services/serper_ops/ser.ts | 0.00 | 3.13 | 5-6,17-76,86-100,111-143,153-168,178-206
lib/services/shared/apiUsageTracking.ts | 0.00 | 27.07 | 112-160,169-194,203-224
lib/services/shared/cacheDecorator.ts | 62.50 | 81.25 | 9,141-153
lib/services/shared/homeHarvestClient.ts | 0.00 | 2.81 | 74-75,82-85,102-129,142-308,320-328,340-360,378-488,507-613
lib/services/shared/perplexityService.ts | 0.00 | 3.37 | 21-154,164-193,203-249,258-300,309,319-430,446-481,492-518
lib/services/shared/phoneUtils.ts | 0.00 | 15.49 | 10,13,19,26-29,33-41,50-70,79-97,106-134,143-145,154-164,173-175,185-194,203-210
lib/services/shared/supabase/agents.ts | 23.53 | 10.76 | 16-30,39-54,63-79,88-104,128-129,143-151,160-171,180-268,277-299,308-322,331-348,357-371,380-407,422-423,433-434,445-529
lib/services/shared/supabase/calls.ts | 0.00 | 5.08 | 15-42,51-66,75-90,99-120,129-145,153-165
lib/services/shared/supabase/client.ts | 100.00 | 54.55 | 14-18
lib/services/shared/supabase/emails.ts | 0.00 | 5.88 | 16-32,42-58,68-81
lib/services/shared/supabase/index.ts | 100.00 | 100.00 |
lib/services/shared/supabase/messageEmbeddings.ts | 0.00 | 5.66 | 15-34,43-60,69-84,92-103,112-127,136-153
lib/services/shared/supabase/messages.ts | 0.00 | 3.96 | 18-40,49-69,78-100,109-127,136-155,164-183,192-226,235-269,278-297,306-336,345-365,374-396
lib/services/shared/supabase/people.ts | 0.00 | 4.26 | 15-29,38-52,61-101,112-130
lib/services/shared/supabase/properties.ts | 0.00 | 4.61 | 19-35,45-65,74-90,100-116,126-152,162-177,186-223,232-245,254-275,284-298,309-326,336-349,358-371,380-394,405-435,446-480
lib/services/shared/supabase/test.ts | 0.00 | 18.18 | 10-18
lib/services/shared/supabase/users.ts | 33.33 | 19.90 | 30-31,45-61,70-82,91-105,115-138,147-166,175-185,200-201,211-212,223-257,267-278
lib/services/shared/supabaseClient.ts | 100.00 | 100.00 |
lib/services/zillow_ops/extendedSearch.ts | 0.00 | 1.79 | 16-125
lib/services/zillow_ops/zil.ts | 0.00 | 2.69 | 29-74,83-100,110-208,214-216,220-222,226-228,237-328,332-340,351-395,410-724,736-753,764-779,783-810,852-941,951-980,992-1021,1032-1153,1164-1209
lib/services/zillow_ops/zutils.ts | 100.00 | 100.00 |
lib/twilioUtils.ts | 0.00 | 2.40 | 14-61,70-72,81-83,92-96,106-129,139-159,169-179,188-238,246-249,257-274,281-296,306-324,335-363,374-389,398-551,555-649,659-686,697-727,733-765
lib/types/MREmailFilter.ts | 0.00 | 2.17 | 9-53
lib/types/MRUserFilter.ts | 0.00 | 1.82 | 9-62
lib/types/property.ts | 33.33 | 35.71 | 556-564,590-598
lib/types/zodMRListingAgentSchema.ts | 100.00 | 100.00 |
lib/types/zodMRUserSchema.ts | 100.00 | 100.00 |
lib/utils.ts | 6.25 | 26.79 | 10,19-37,41-46,50-53,56-58,62,65-67,79-91,96,100,104,108-120,128,136-140,144-153
lib/utils/dates.ts | 0.00 | 30.95 | 19-30,70-73,80-84,91-92,99-100,122-125
lib/utils/errorUtils.ts | 0.00 | 10.20 | 6-11,20-40,51-67
lib/utils/getShorthandAddress.ts | 0.00 | 2.50 | 8-46
lib/utils/parseShowingTime.ts | 0.00 | 2.78 | 10-102,112-123
lib/utils/performanceTracker.ts | 0.00 | 12.63 | 11,19-21,29-52,62-93,104-118,129,133-139
lib/utils/rateLimiter.ts | 50.00 | 21.05 | 13-27
---------------------------------------------------------------|---------|---------|-------------------
0 pass
1 fail
Ran 1 tests across 1 files. [7.34s]
[The command completed with exit code 1.]
[Current working directory: /workspace]
[Python interpreter: /openhands/poetry/openhands-ai-5O4_aCHf-py3.12/bin/python]
[Command finished with exit code 1]
--END AGENT OBSERVATION--
16:49:21 - openhands:INFO: agent_controller.py:970 - [Agent Controller 762916a8-4fb4-48c2-a3b7-b0917a1cf171-319e8e72befff0c3] Cleared pending action after 7.68s: CmdRunAction (id=85)
16:49:21 - openhands:INFO: agent_controller.py:416 - [Agent Controller 762916a8-4fb4-48c2-a3b7-b0917a1cf171-319e8e72befff0c3] Stepping agent after event: CmdOutputObservation
[Agent Controller 762916a8-4fb4-48c2-a3b7-b0917a1cf171-319e8e72befff0c3] LEVEL 0 LOCAL STEP 41 GLOBAL STEP 41
16:49:32 - openhands:INFO: agent_controller.py:979 - [Agent Controller 762916a8-4fb4-48c2-a3b7-b0917a1cf171-319e8e72befff0c3] Set pending action: CmdRunAction (id=-1)
16:49:32 - openhands:INFO: resolve_issue.py:233 - **CmdRunAction (source=EventSource.AGENT, is_input=False)**
THOUGHT: It looks like the column names in the mr_properties table are different than what we expected. Let's check the schema of the mr_properties table.
COMMAND:
grep -r "mr_properties_Row" --include="*.ts" /workspace
16:49:32 - openhands:INFO: resolve_issue.py:233 - **CmdOutputObservation (source=EventSource.AGENT, exit code=0, metadata={
"exit_code": 0,
"pid": -1,
"username": "openhands",
"hostname": "aae885bd2acb",
"working_dir": "/workspace",
"py_interpreter_path": "/openhands/poetry/openhands-ai-5O4_aCHf-py3.12/bin/python",
"prefix": "",
"suffix": "\n[The command completed with exit code 0.]"
})**
--BEGIN AGENT OBSERVATION--
/workspace/scripts/realestate/notify_recent_transactions.ts:import { mr_properties_Row } from '@/lib/types/property'
/workspace/scripts/realestate/notify_recent_transactions.ts: property: mr_properties_Row,
/workspace/scripts/analytics/property_city_distribution.ts:import { mr_properties_Row } from '../../lib/types/property';
/workspace/scripts/analytics/property_city_distribution.ts:async function fetchLastMonthProperties(): Promise<mr_properties_Row[]> {
/workspace/scripts/analytics/property_city_distribution.ts: .overrideTypes<mr_properties_Row[], { merge: false }>();
/workspace/scripts/analytics/property_city_distribution.ts:function groupPropertiesByCity(properties: mr_properties_Row[]): Record<string, mr_properties_Row[]> {
/workspace/scripts/analytics/property_city_distribution.ts: const propertiesByCity: Record<string, mr_properties_Row[]> = {};
/workspace/scripts/analytics/property_city_distribution.ts: propertiesByCity: Record<string, mr_properties_Row[]>,
/workspace/lib/types/property.ts:export type mr_properties_Row = {
/workspace/lib/types/property.ts: * Formats a full address string from an mr_properties_Row object
/workspace/lib/types/property.ts: * @param property - The mr_properties_Row object containing address information
/workspace/lib/types/property.ts:export function formatMRPropertyAddress(property: mr_properties_Row): string {
/workspace/lib/types/sbPeople.ts:import type { mr_properties_Row } from './property'
/workspace/lib/types/sbPeople.ts: properties?: mr_properties_Row[]
/workspace/lib/services/email/processors/emailProcessor.ts:import { mr_propertynotes_Row, mr_properties_Row } from '@/lib/types/property'
/workspace/lib/services/email/processors/genericEmailProcessor.ts:import { mr_propertynotes_Row, mr_properties_Row } from '@/lib/types/property'
/workspace/lib/services/email/processors/genericEmailProcessor.ts: .overrideTypes<mr_properties_Row[], { merge: false }>()
/workspace/lib/services/email/utils/utils.ts: mr_properties_Row,
/workspace/lib/services/email/utils/utils.ts: .overrideTypes<mr_properties_Row[], { merge: false }>()
/workspace/lib/services/email/utils/emailUtils.ts: mr_properties_Row,
/workspace/lib/services/email/utils/storageUtils.ts:import { mr_properties_Row } from '@/lib/types/property'
/workspace/lib/services/email/utils/storageUtils.ts: .overrideTypes<mr_properties_Row[], { merge: false }>()
/workspace/lib/services/email/utils/zipUtils.ts:import { mr_properties_Row } from '@/lib/types/property'
/workspace/lib/services/email/utils/zipUtils.ts: .overrideTypes<mr_properties_Row[], { merge: false }>()
/workspace/lib/services/__tests__/utils/test-utils.ts:import { mr_properties_Row } from '@/lib/types/property'
/workspace/lib/services/__tests__/utils/test-utils.ts: * @returns The created mr_properties_Row object
/workspace/lib/services/__tests__/utils/test-utils.ts:}): Promise<mr_properties_Row | null> {
/workspace/lib/services/__tests__/utils/test-utils.ts: const propertyData: Partial<mr_properties_Row> = {
/workspace/lib/services/__tests__/utils/test-utils.ts: .single<mr_properties_Row>();
/workspace/lib/services/__tests__/showingRequest.test.ts:import { mr_properties_Row } from '@/lib/types/property'
/workspace/lib/services/__tests__/showingRequest.test.ts: .single<mr_properties_Row>()
/workspace/lib/services/__tests__/realtor_flow/confirmShowingWithClient.test.ts:import { mr_properties_Row } from '@/lib/types/property'
/workspace/lib/services/__tests__/realtor_flow/confirmShowingWithClient.test.ts: .overrideTypes<mr_properties_Row[], { merge: false }>()
/workspace/lib/services/__tests__/realtor_flow/confirmShowingWithClient.test.ts: .overrideTypes<mr_properties_Row[], { merge: false }>()
/workspace/lib/services/__tests__/realtor_flow/confirmShowingWithClient.test.ts: .overrideTypes<mr_properties_Row[], { merge: false }>()
/workspace/lib/services/__tests__/realtor_flow/confirmShowingWithClient.test.ts: .overrideTypes<mr_properties_Row[], { merge: false }>()
/workspace/lib/services/__tests__/realtor_flow/confirmShowingWithClient.test.ts: .overrideTypes<mr_properties_Row[], { merge: false }>()
/workspace/lib/services/drip_box/utils/addressUtils.ts:import { mr_properties_Row } from '@/lib/types/property'
/workspace/lib/services/drip_box/utils/addressUtils.ts: userProperties: mr_properties_Row[]
/workspace/lib/services/drip_box/utils/userJourneyUtils.ts:import { mr_offers_Row, mr_properties_Row } from '@/lib/types/property'
/workspace/lib/services/drip_box/utils/userJourneyUtils.ts: .overrideTypes<mr_properties_Row[]>()
/workspace/lib/services/drip_box/utils/tourFollowup.ts: mr_properties_Row
/workspace/lib/services/drip_box/utils/tourFollowup.ts: tours: mr_properties_Row[]
/workspace/lib/services/drip_box/utils/tourFollowup.ts: tours: mr_properties_Row[]
/workspace/lib/services/drip_box/utils/tourFollowup.ts: const userProperties: mr_properties_Row[] = [] // We don't need mr_properties entries for this function
/workspace/lib/services/shared/supabase/properties.ts: mr_properties_Row,
/workspace/lib/services/shared/supabase/properties.ts:): Promise<mr_properties_Row | null> {
/workspace/lib/services/shared/supabase/properties.ts: .overrideTypes<mr_properties_Row[], { merge: false }>()
/workspace/lib/services/shared/supabase/properties.ts:): Promise<mr_properties_Row | null> {
/workspace/lib/services/shared/supabase/properties.ts: .overrideTypes<mr_properties_Row[], { merge: false }>()
/workspace/lib/services/shared/supabase/properties.ts:): Promise<mr_properties_Row | null> {
/workspace/lib/services/shared/supabase/properties.ts: .overrideTypes<mr_properties_Row[], { merge: false }>()
/workspace/lib/services/shared/supabase/properties.ts: .overrideTypes<mr_properties_Row[], { merge: false }>()
/workspace/lib/services/shared/supabase/properties.ts:): Promise<mr_properties_Row[]> {
/workspace/lib/services/shared/supabase/properties.ts: mr_properties_Row[],
/workspace/lib/services/shared/supabase/properties.ts:): Promise<mr_properties_Row[]> {
/workspace/lib/services/shared/supabase/properties.ts: .overrideTypes<mr_properties_Row[], { merge: false }>()
/workspace/lib/services/shared/supabase/properties.ts: .single<mr_properties_Row>()
/workspace/lib/services/shared/supabase/properties.ts: updateData: Partial<mr_properties_Row>
/workspace/lib/services/shared/supabase/properties.ts:): Promise<mr_properties_Row | null> {
/workspace/lib/services/shared/supabase/properties.ts: .single<mr_properties_Row>()
/workspace/lib/services/shared/supabase/properties.ts:): Promise<mr_properties_Row | null> {
/workspace/lib/services/shared/supabase/properties.ts: .single<mr_properties_Row>()
/workspace/lib/services/shared/supabase/properties.ts:): Promise<mr_properties_Row[]> {
/workspace/lib/services/shared/supabase/properties.ts: .overrideTypes<mr_properties_Row[], { merge: false }>()
/workspace/lib/services/shared/supabase/properties.ts:): Promise<mr_properties_Row[]> {
/workspace/lib/services/shared/supabase/properties.ts: .overrideTypes<mr_properties_Row[], { merge: false }>()
/workspace/lib/services/shared/supabase/agents.ts:import { mr_properties_Row } from '@/lib/types/property'
/workspace/lib/services/shared/supabase/agents.ts: .overrideTypes<mr_properties_Row[], { merge: false }>()
/workspace/lib/services/realEstate/propertyUpdates/soldPropertiesUpdater.ts:import { mr_properties_Row } from '@/lib/types/property'
/workspace/lib/services/realEstate/propertyUpdates/soldPropertiesUpdater.ts: property: mr_properties_Row,
/workspace/lib/services/realEstate/propertyUpdates/soldPropertiesUpdater.ts: .overrideTypes<mr_properties_Row[], { merge: false }>()
/workspace/lib/services/realEstate/getFilteredPropertyInfo.ts:import { mr_properties_Row } from '@/lib/types/property'
/workspace/lib/services/realEstate/getFilteredPropertyInfo.ts:export function getFilteredPropertyInfo(property: mr_properties_Row): string {
/workspace/lib/services/realEstate/convertClientAddressToFullAddress.ts:import { formatFullAddressParts, mr_properties_Row } from '@/lib/types/property'
/workspace/lib/services/realEstate/convertClientAddressToFullAddress.ts: .overrideTypes<mr_properties_Row[], { merge: false }>()
/workspace/lib/services/realEstate/core/propertyAccessExtractor.ts: mr_properties_Row,
/workspace/lib/services/realEstate/core/propertyAccessExtractor.ts: .single<mr_properties_Row>()
/workspace/lib/services/realEstate/core/clientUpdateService.ts: mr_properties_Row,
/workspace/lib/services/realEstate/core/whetherIncludeZillowLink.ts:import { mr_properties_Row, mr_sentlistings_Row } from '@/lib/types/property'
/workspace/lib/services/realEstate/core/whetherIncludeZillowLink.ts: .overrideTypes<mr_properties_Row[], { merge: false }>()
/workspace/lib/services/realEstate/core/whetherIncludeZillowLink.ts: (p: Pick<mr_properties_Row, 'zpid'>) => p.zpid?.toString() || ''
/workspace/lib/services/realEstate/core/whetherIncludeZillowLink.ts: .overrideTypes<mr_properties_Row[], { merge: false }>()
/workspace/lib/services/realEstate/core/whetherIncludeZillowLink.ts: (p: Pick<mr_properties_Row, 'zpid'>) => p.zpid?.toString() || ''
/workspace/lib/services/realEstate/core/listingAgentManager.ts:import { PropertyDetails, mr_properties_Row } from '../../../types/property'
/workspace/lib/services/realEstate/core/listingAgentManager.ts: * Converts PropertyDetails to mr_properties_Row format
/workspace/lib/services/realEstate/core/listingAgentManager.ts:): mr_properties_Row {
/workspace/lib/services/realEstate/core/listingAgentManager.ts: // Convert property details to mr_properties_Row format first
/workspace/lib/services/realEstate/core/listingAgentManager.ts: .overrideTypes<mr_properties_Row[], { merge: false }>()
/workspace/lib/services/realEstate/core/listingAgentManager.ts: .overrideTypes<mr_properties_Row[], { merge: false }>()
/workspace/lib/services/realEstate/core/listingAgentManager.ts: mr_properties_Row[],
/workspace/lib/services/realEstate/core/listingAgentManager.ts: properties: mr_properties_Row[]
/workspace/lib/services/realEstate/core/transactionTracker.ts: mr_properties_Row,
/workspace/lib/services/realEstate/core/transactionTracker.ts: .overrideTypes<mr_properties_Row[], { merge: false }>()
/workspace/lib/services/realEstate/core/callSummaryNotificationService.ts:import { mr_properties_Row, mr_propertynotes_Row } from '@/lib/types/property'
/workspace/lib/services/realEstate/core/callSummaryNotificationService.ts: propertyDetails?: mr_properties_Row
/workspace/lib/services/realEstate/core/callSummaryNotificationService.ts: .single<mr_properties_Row>(),
/workspace/lib/services/calendar/zapierCalendar.ts:import { mr_properties_Row } from '@/lib/types/property'
/workspace/lib/services/calendar/zapierCalendar.ts: property: mr_properties_Row,
/workspace/lib/services/calendar/supabaseCalendar.ts:import { mr_properties_Row, formatFullAddressParts } from '../../types/property'
/workspace/lib/services/twilio/call_utils/callSummary.ts:import { mr_properties_Row } from '@/lib/types/property'
/workspace/lib/services/twilio/call_utils/callSummary.ts: .overrideTypes<mr_properties_Row[], { merge: false }>()
/workspace/lib/services/buyer_flow/property.ts: mr_properties_Row,
/workspace/lib/services/buyer_flow/showing.ts:import { mr_properties_Row, PropertyDetails } from '../../types/property'
/workspace/lib/services/buyer_flow/showing.ts: .overrideTypes<mr_properties_Row[], { merge: false }>()
/workspace/app/api/cron/update-sold-properties/route.ts:import { mr_properties_Row } from '@/lib/types/property'
[The command completed with exit code 0.]
[Current working directory: /workspace]
[Python interpreter: /openhands/poetry/openhands-ai-5O4_aCHf-py3.12/bin/python]
[Command finished with exit code 0]
--END AGENT OBSERVATION--
16:49:32 - openhands:INFO: agent_controller.py:970 - [Agent Controller 762916a8-4fb4-48c2-a3b7-b0917a1cf171-319e8e72befff0c3] Cleared pending action after 0.64s: CmdRunAction (id=87)
16:49:32 - openhands:INFO: agent_controller.py:416 - [Agent Controller 762916a8-4fb4-48c2-a3b7-b0917a1cf171-319e8e72befff0c3] Stepping agent after event: CmdOutputObservation
[Agent Controller 762916a8-4fb4-48c2-a3b7-b0917a1cf171-319e8e72befff0c3] LEVEL 0 LOCAL STEP 42 GLOBAL STEP 42
16:49:44 - openhands:INFO: agent_controller.py:979 - [Agent Controller 762916a8-4fb4-48c2-a3b7-b0917a1cf171-319e8e72befff0c3] Set pending action: FileReadAction (id=-1)
16:49:44 - openhands:INFO: resolve_issue.py:233 - FileReadAction(path='/workspace/lib/types/property.ts', start=0, end=-1, thought="Let's check the definition of the mr_properties_Row type to understand the correct column names.", action=<ActionType.READ: 'read'>, security_risk=None, impl_source=<FileReadSource.OH_ACI: 'oh_aci'>, view_range=[1, 100])
16:49:44 - openhands:INFO: resolve_issue.py:233 - [Read from /workspace/lib/types/property.ts is successful.]
Here's the result of running `cat -n` on /workspace/lib/types/property.ts:
1 export interface School {
2 link?: string
3 rating?: number
4 totalCount?: number
5 distance?: number
6 assigned?: string | null
7 name?: string
8 studentsPerTeacher?: number
9 isAssigned?: boolean
10 size?: number
11 level?: string
12 grades?: string
13 type?: string
14 }
15
16 export interface ContactRecipient {
17 agent_reason?: number
18 zpro?: string | null
19 recent_sales?: number
20 review_count?: number
21 display_name?: string
22 zuid?: string
23 rating_average?: number
24 badge_type?: string
25 business_name?: string
26 phone?: {
27 prefix?: string
28 areacode?: string
29 number?: string
30 }
31 image_url?: string
32 }
33
34 export interface ListedBy {
35 agent_reason?: number
36 zpro?: boolean
37 recent_sales?: number
38 review_count?: number
39 display_name?: string
40 badge_type?: string
41 business_name?: string
42 rating_average?: number
43 phone?: {
44 prefix?: string
45 areacode?: string
46 number?: string
47 }
48 zuid?: string
49 image_url?: string
50 profile_url?: string
51 }
52
53 export interface ResoFacts {
54 hasAttachedProperty?: boolean
55 frontageType?: string | null
56 poolFeatures?: string | null
57 flooring?: string[]
58 foundationDetails?: string[]
59 accessibilityFeatures?: string | null
60 hasGarage?: boolean
61 hasPetsAllowed?: string | null
62 bodyType?: string | null
63 topography?: string | null
64 landLeaseExpirationDate?: string | null
65 hasAdditionalParcels?: boolean
66 waterViewYN?: boolean
67 atAGlanceFacts?: object[]
68 offerReviewDate?: string | null
69 aboveGradeFinishedArea?: string | null
70 view?: string[]
71 buyerAgencyCompensationType?: string | null
72 rooms?: object[]
73 carportSpaces?: string | null
74 cityRegion?: string
75 mainLevelBathrooms?: string | null
76 hasPrivatePool?: string | null
77 associationFeeIncludes?: string | null
78 waterSource?: string[]
79 exteriorFeatures?: object
80 coveredSpaces?: number
81 inclusions?: string[]
82 hasFireplace?: boolean
83 zoningDescription?: string
84 garageSpaces?: number
85 sewer?: string[]
86 elevationUnits?: string
87 exclusions?: string | null
88 mainLevelBedrooms?: number
89 numberOfUnitsVacant?: string | null
90 hasWaterfrontView?: string | null
91 listAOR?: string | null
92 lotSize?: string
93 entryLevel?: string | null
94 irrigationWaterRightsAcres?: string | null
95 greenWaterConservation?: string | null
96 stories?: string | null
97 livingArea?: string
98 numberOfUnitsInCommunity?: string | null
99 listingTerms?: string
100 otherStructures?: string | null
16:49:44 - openhands:INFO: agent_controller.py:970 - [Agent Controller 762916a8-4fb4-48c2-a3b7-b0917a1cf171-319e8e72befff0c3] Cleared pending action after 0.02s: FileReadAction (id=89)
16:49:44 - openhands:INFO: agent_controller.py:416 - [Agent Controller 762916a8-4fb4-48c2-a3b7-b0917a1cf171-319e8e72befff0c3] Stepping agent after event: FileReadObservation
[Agent Controller 762916a8-4fb4-48c2-a3b7-b0917a1cf171-319e8e72befff0c3] LEVEL 0 LOCAL STEP 43 GLOBAL STEP 43
16:49:58 - openhands:INFO: agent_controller.py:979 - [Agent Controller 762916a8-4fb4-48c2-a3b7-b0917a1cf171-319e8e72befff0c3] Set pending action: CmdRunAction (id=-1)
16:49:58 - openhands:INFO: resolve_issue.py:233 - **CmdRunAction (source=EventSource.AGENT, is_input=False)**
THOUGHT: Let's look at the mr_properties_Row type definition.
COMMAND:
grep -n -A 50 "export type mr_properties_Row" /workspace/lib/types/property.ts
16:49:59 - openhands:INFO: resolve_issue.py:233 - **CmdOutputObservation (source=EventSource.AGENT, exit code=0, metadata={
"exit_code": 0,
"pid": -1,
"username": "openhands",
"hostname": "aae885bd2acb",
"working_dir": "/workspace",
"py_interpreter_path": "/openhands/poetry/openhands-ai-5O4_aCHf-py3.12/bin/python",
"prefix": "",
"suffix": "\n[The command completed with exit code 0.]"
})**
--BEGIN AGENT OBSERVATION--
476:export type mr_properties_Row = {
477- id?: number // auto gen'd by supabase, now an integer type
478- address: string
479- city: string
480- state: string
481- zip_code: string
482- agent_id?: string // Optional UUID
483- mr_users_id?: string
484- mls_number?: string
485- price?: number
486- bedrooms?: number
487- bathrooms?: number
488- square_feet?: number
489- status?: string // 'FOR_SALE' | 'PENDING' | 'SOLD' | 'OFF_MARKET' | 'OTHER';
490- created_at?: Date
491- updated_at?: Date
492- zpid?: string
493- mls_source?: string
494- external_listing_id?: string
495- property_type?: string
496- year_built?: number
497- lot_size?: number
498- parking_spaces?: number
499- hoa_fee?: number
500- hoa_features?: string[]
501- amenities?: string[]
502- school_district?: string
503- zoning?: string
504- property_condition?: string
505- last_sold_date?: Date
506- last_sold_price?: number
507- property_tax?: number
508- days_on_market?: number
509- disclosure_url?: string
510- private_remarks?: string
511- showing_instructions?: string
512- offer_deadline?: Date
513- offer_submission_method?: string
514- seller_preferences?: string
515- property_access_info?: string
516- open_house_dates?: string[]
517- commission_split?: number
518- contingencies_accepted?: boolean
519- multiple_offers_received?: boolean
520- zillow_url?: string
521- original_list_date?: Date
522- mls_status_change_date?: Date
523- dom_mls?: number
524- cdom?: number
525- mls_area?: string
526- listing_agreement_type?: string
[The command completed with exit code 0.]
[Current working directory: /workspace]
[Python interpreter: /openhands/poetry/openhands-ai-5O4_aCHf-py3.12/bin/python]
[Command finished with exit code 0]
--END AGENT OBSERVATION--
16:49:59 - openhands:INFO: agent_controller.py:970 - [Agent Controller 762916a8-4fb4-48c2-a3b7-b0917a1cf171-319e8e72befff0c3] Cleared pending action after 0.64s: CmdRunAction (id=91)
16:49:59 - openhands:INFO: agent_controller.py:416 - [Agent Controller 762916a8-4fb4-48c2-a3b7-b0917a1cf171-319e8e72befff0c3] Stepping agent after event: CmdOutputObservation
[Agent Controller 762916a8-4fb4-48c2-a3b7-b0917a1cf171-319e8e72befff0c3] LEVEL 0 LOCAL STEP 44 GLOBAL STEP 44
16:50:18 - openhands:INFO: agent_controller.py:979 - [Agent Controller 762916a8-4fb4-48c2-a3b7-b0917a1cf171-319e8e72befff0c3] Set pending action: FileEditAction (id=-1)
16:50:18 - openhands:INFO: resolve_issue.py:233 - **FileEditAction**
Path: [/workspace/__tests__/listing_agent_tour_scheduling.test.ts]
Thought: Now I understand the correct column names for the mr_properties table. Let's update our test to use the correct column names.
Command: str_replace
Old String: ```
// Extract address parts
const addressParts = property.formattedAddress.split(',');
const streetAddress = addressParts[0].trim();
const city = addressParts[1]?.trim() || 'San Francisco';
const stateZip = addressParts[2]?.trim() || 'CA 94110';
const [state, zip] = stateZip.split(' ');
// Create a property record in the database
const { error } = await supabaseClient
.from('mr_properties')
.insert({
zpid: property.zpid,
address: property.formattedAddress,
formatted_address: property.formattedAddress,
agent_id: testContext.listingAgent.agent_id,
mr_users_id: testContext.client.user_id,
price: property.price || 1000000,
bedrooms: property.bedrooms || 3,
bathrooms: property.bathrooms || 2,
is_showami_tour: false,
street_address: streetAddress,
city: city,
state: state.trim(),
zip: zip?.trim() || '94110'
});
if (error) {
console.error('Error creating property record:', error);
}
```
New String: ```
// Extract address parts
const addressParts = property.formattedAddress.split(',');
const streetAddress = addressParts[0].trim();
const city = addressParts[1]?.trim() || 'San Francisco';
const stateZip = addressParts[2]?.trim() || 'CA 94110';
const [state, zip] = stateZip.split(' ');
// Create a property record in the database
const { error } = await supabaseClient
.from('mr_properties')
.insert({
zpid: property.zpid,
address: property.formattedAddress,
agent_id: testContext.listingAgent.agent_id,
mr_users_id: testContext.client.user_id,
price: property.price || 1000000,
bedrooms: property.bedrooms || 3,
bathrooms: property.bathrooms || 2,
city: city,
state: state.trim(),
zip_code: zip?.trim() || '94110',
client_proposed_showing_time: null,
agent_proposed_showing_time: null,
showing_status: null,
is_showami_tour: false
});
if (error) {
console.error('Error creating property record:', error);
}
```
16:50:18 - openhands:INFO: resolve_issue.py:233 - The file /workspace/__tests__/listing_agent_tour_scheduling.test.ts has been edited. Here's the result of running `cat -n` on a snippet of /workspace/__tests__/listing_agent_tour_scheduling.test.ts:
34 last_name: testContext.listingAgent.last_name
35 }
36
37 // Extract address parts
38 const addressParts = property.formattedAddress.split(',');
39 const streetAddress = addressParts[0].trim();
40 const city = addressParts[1]?.trim() || 'San Francisco';
41 const stateZip = addressParts[2]?.trim() || 'CA 94110';
42 const [state, zip] = stateZip.split(' ');
43
44 // Create a property record in the database
45 const { error } = await supabaseClient
46 .from('mr_properties')
47 .insert({
48 zpid: property.zpid,
49 address: property.formattedAddress,
50 agent_id: testContext.listingAgent.agent_id,
51 mr_users_id: testContext.client.user_id,
52 price: property.price || 1000000,
53 bedrooms: property.bedrooms || 3,
54 bathrooms: property.bathrooms || 2,
55 city: city,
56 state: state.trim(),
57 zip_code: zip?.trim() || '94110',
58 client_proposed_showing_time: null,
59 agent_proposed_showing_time: null,
60 showing_status: null,
61 is_showami_tour: false
62 });
63
64 if (error) {
65 console.error('Error creating property record:', error);
66 }
67
68 // Simulate a client message requesting a tour
69 const response = await assistant.chat(
70 `I would like to schedule a tour for ${property.formattedAddress} tomorrow at 3pm`,
71
Review the changes and make sure they are as expected. Edit the file again if necessary.
16:50:18 - openhands:INFO: agent_controller.py:970 - [Agent Controller 762916a8-4fb4-48c2-a3b7-b0917a1cf171-319e8e72befff0c3] Cleared pending action after 0.02s: FileEditAction (id=93)
16:50:18 - openhands:INFO: agent_controller.py:416 - [Agent Controller 762916a8-4fb4-48c2-a3b7-b0917a1cf171-319e8e72befff0c3] Stepping agent after event: FileEditObservation
[Agent Controller 762916a8-4fb4-48c2-a3b7-b0917a1cf171-319e8e72befff0c3] LEVEL 0 LOCAL STEP 45 GLOBAL STEP 45
16:50:30 - openhands:INFO: agent_controller.py:979 - [Agent Controller 762916a8-4fb4-48c2-a3b7-b0917a1cf171-319e8e72befff0c3] Set pending action: CmdRunAction (id=-1)
16:50:30 - openhands:INFO: resolve_issue.py:233 - **CmdRunAction (source=EventSource.AGENT, is_input=False)**
THOUGHT: Now let's run the test again to see if it works.
COMMAND:
./bun test __tests__/listing_agent_tour_scheduling.test.ts
16:50:37 - openhands:INFO: resolve_issue.py:233 - **CmdOutputObservation (source=EventSource.AGENT, exit code=1, metadata={
"exit_code": 1,
"pid": -1,
"username": "openhands",
"hostname": "aae885bd2acb",
"working_dir": "/workspace",
"py_interpreter_path": "/openhands/poetry/openhands-ai-5O4_aCHf-py3.12/bin/python",
"prefix": "",
"suffix": "\n[The command completed with exit code 1.]"
})**
--BEGIN AGENT OBSERVATION--
bun test v1.1.34 (5e5e7c60)
__tests__/listing_agent_tour_scheduling.test.ts:
Set tests_running flag to true with 600 second expiry
[DB] No data found for user: +test_client16a2_0
[DB] No data found for listing agent by phone: +test_agent16a2_0
Cache hit for cache:getPropertyLis...
Cache hit for cache:getPropertyDet...
testZpid test_16a2491e_15105185
error: "failed to parse logic tree ((and(sender_phone_number.eq.I would like to schedule a tour for 1418 27th Ave, San Francisco, CA, 94122 tomorrow at 3pm,receiver_phone_number.eq.+test_client16a2_0),and(sender_phone_number.eq.+test_client16a2_0,receiver_phone_number.eq.I would like to schedule a tour for 1418 27th Ave, San Francisco, CA, 94122 tomorrow at 3pm)))" (line 1, column 95)
✗ Listing Agent Tour Scheduling > should handle tour requests when we are the listing agent [600.00ms]
Cleaning up 1 specifically tracked ZPIDs
[ "test_16a2491e_15105185" ]
Cleared tests_running flag
---------------------------------------------------------------|---------|---------|-------------------
File | % Funcs | % Lines | Uncovered Line #s
---------------------------------------------------------------|---------|---------|-------------------
All files | 20.54 | 25.77 |
books_and_resources/processing/searchBooks.ts | 0.00 | 3.30 | 34-60,83-91,104-233,244-312,322-376,383-412,423-454
lib/redis.ts | 100.00 | 100.00 |
lib/services/__tests__/utils/test-utils.ts | 53.85 | 48.73 | 258-297,301,305,455-458,462-465,469,495-523,535-547,754-770,784-814,822-852,860-888,894-908,913-927,932-1016,1031-1113,1119-1131,1136-1140,1149-1154
lib/services/buyer_flow/buyer_flow.ts | 0.00 | 2.95 | 135-957
lib/services/buyer_flow/external.ts | 0.00 | 6.17 | 11-86
lib/services/buyer_flow/property.ts | 11.11 | 4.65 | 30-193
lib/services/buyer_flow/showing.ts | 0.00 | 3.89 | 32-99,109-131,140-169,182-423,437-558,595-602,611-627,636-990
lib/services/calendar/supabaseCalendar.ts | 0.00 | 5.63 | 9-75
lib/services/calendar/zapierCalendar.ts | 0.00 | 3.20 | 33-61,102-121,131-167,177-243,256-293,305-355
lib/services/deprecated_redfin_utils/rfu.ts | 0.00 | 9.60 | 19-90,99-134,143-147
lib/services/drip_box/drip.ts | 0.00 | 3.49 | 57-60,93-323,348-693
lib/services/drip_box/dripFrequency.ts | 0.00 | 0.69 | 24-88,102-179
lib/services/drip_box/dripMessageBuilder.ts | 0.00 | 3.54 | 24-132
lib/services/drip_box/dripPreviousListings.ts | 0.00 | 3.45 | 17-46,59-84
lib/services/drip_box/dripScheduler.ts | 0.00 | 4.71 | 24-104
lib/services/drip_box/utils/propertyConverters.ts | 0.00 | 2.74 | 24-34,41-51,58-68,75-93,101-119
lib/services/drip_box/utils/propertyUtils.ts | 0.00 | 3.13 | 11-28,37-55,66-128,141-164
lib/services/drip_box/utils/schedulingUtils.ts | 0.00 | 1.69 | 27-232,242-282,295-354,366-408
lib/services/drip_box/utils/searchUtils.ts | 0.00 | 3.85 | 30-42,49-64,71-81,88-104,117-161,175-226,239-256,269-321
lib/services/drip_box/utils/tourFollowup.ts | 0.00 | 2.11 | 29-69,82-218,231-332,344-420,433-492
lib/services/drip_box/utils/userJourneyUtils.ts | 0.00 | 1.92 | 40-108,121-181,193-207,222-280
lib/services/git/createPullRequest.ts | 0.00 | 2.07 | 30-45,58-153,160-390,397-443,450-481,491-605,614-661,668-788,795-798
lib/services/knowledge_base/processUserInfo.ts | 0.00 | 3.50 | 48-425,439-533,545-623
lib/services/phone_management/phoneManager.ts | 0.00 | 1.98 | 18-116
lib/services/realEstate/configs/clientTools.ts | 50.00 | 97.46 | 629-641
lib/services/realEstate/configs/realtorTools.ts | 100.00 | 100.00 |
lib/services/realEstate/configs/sellerTools.ts | 100.00 | 100.00 |
lib/services/realEstate/constants/phoneNumbers.ts | 0.00 | 88.24 | 49-51
lib/services/realEstate/constants/properties.ts | 0.00 | 100.00 |
lib/services/realEstate/convertClientAddressToFullAddress.ts | 0.00 | 4.94 | 7-83
lib/services/realEstate/core/AdminManager.ts | 33.33 | 6.25 | 14-118
lib/services/realEstate/core/ContextProvider.ts | 0.00 | 8.33 | 14-57,68-89
lib/services/realEstate/core/ModelService.ts | 25.00 | 7.56 | 41-260
lib/services/realEstate/core/ParticipantManager.ts | 0.00 | 2.57 | 28-444
lib/services/realEstate/core/ResponseGenerator.ts | 16.67 | 2.66 | 20-458
lib/services/realEstate/core/ToolCallHandler.ts | 0.00 | 2.62 | 39-297
lib/services/realEstate/core/aiDetection.ts | 0.00 | 3.37 | 44-79,92-128,139-143,153-160
lib/services/realEstate/core/assistantCore.ts | 60.00 | 97.87 | 116-118
lib/services/realEstate/core/bookInstructions.ts | 0.00 | 1.71 | 27-47,56-96,110-166,178-216,229-358
lib/services/realEstate/core/callModel.ts | 0.00 | 3.56 | 61-95,115-160,181-233,243-245,268-337,361-448,474-557,584-680,706-766,786-809,835-928,954-1057,1081-1139,1158-1196,1216-1278
lib/services/realEstate/core/chatMessageProcessor.ts | 16.67 | 10.41 | 106-518
lib/services/realEstate/core/databaseManager.ts | 23.08 | 4.39 | 52-573,600-643
lib/services/realEstate/core/followUp.ts | 0.00 | 5.26 | 33-48,57-84,95-115,127-154,164-180,188-236,246-260,272-292,304-378
lib/services/realEstate/core/listingAgentManager.ts | 12.50 | 2.04 | 28-217,229-709
lib/services/realEstate/core/messageFormatter.ts | 0.00 | 8.33 | 4-14
lib/services/realEstate/core/messageUtils.ts | 0.00 | 2.81 | 45-74,89-285,295-304,319-517,528-579,589-636,648-702,715-852,863-895
lib/services/realEstate/core/messagingService.ts | 10.00 | 8.62 | 73-238,247-264,275-493
lib/services/realEstate/core/propertyAccessExtractor.ts | 0.00 | 2.13 | 32-258,269-300,312-374
lib/services/realEstate/core/sharedState.ts | 100.00 | 100.00 |
lib/services/realEstate/core/toolCallCounts.ts | 33.33 | 65.71 | 35-43,52-54
lib/services/realEstate/core/whetherIncludeZillowLink.ts | 0.00 | 3.21 | 18-25,29-33,46-120,133-195
lib/services/realEstate/getFilteredPropertyInfo.ts | 0.00 | 1.00 | 9-107
lib/services/realEstate/linking/linkUsers.ts | 0.00 | 2.70 | 10-45
lib/services/realEstate/prompts/promptSelector.ts | 0.00 | 9.09 | 21-80
lib/services/realEstate/prompts/realtorShowamiRelay.ts | 100.00 | 100.00 |
lib/services/realEstate/prompts/sellerPropertyFAQ.ts | 0.00 | 54.69 | 15-72
lib/services/realEstate/prompts/talksToClientPrompt.ts | 100.00 | 100.00 |
lib/services/realEstate/prompts/talksToRealtorPrompt.ts | 100.00 | 100.00 |
lib/services/realEstate/prompts/talksToSellerPrompt.ts | 100.00 | 100.00 |
lib/services/realEstate/utils/anthropicUtils.ts | 0.00 | 4.76 | 9-14,23-43,52-59,68-92
lib/services/realEstate/utils/claude2OpenaiFormatConverter.ts | 0.00 | 2.50 | 17-37,46-93,103-137,147-159
lib/services/realEstate/utils/rooClaude2OpenaiConvert.ts | 0.00 | 0.49 | 4-151,156-209
lib/services/realtor_flow/realtor_flow.ts | 0.00 | 4.62 | 41-267
lib/services/redfin_utils/marked_fields.ts | 100.00 | 100.00 |
lib/services/redfin_utils/rapidapi_redf.ts | 0.00 | 5.82 | 26-54,76-96,107-182,194-271,284-306,316-354,363-366,375-378,388-432,441-461
lib/services/seller_flow/seller_flow.ts | 0.00 | 4.60 | 32-197
lib/services/serper_ops/ser.ts | 0.00 | 3.13 | 5-6,17-76,86-100,111-143,153-168,178-206
lib/services/shared/apiUsageTracking.ts | 0.00 | 27.07 | 112-160,169-194,203-224
lib/services/shared/cacheDecorator.ts | 62.50 | 81.25 | 9,141-153
lib/services/shared/homeHarvestClient.ts | 0.00 | 2.81 | 74-75,82-85,102-129,142-308,320-328,340-360,378-488,507-613
lib/services/shared/perplexityService.ts | 0.00 | 3.37 | 21-154,164-193,203-249,258-300,309,319-430,446-481,492-518
lib/services/shared/phoneUtils.ts | 0.00 | 15.49 | 10,13,19,26-29,33-41,50-70,79-97,106-134,143-145,154-164,173-175,185-194,203-210
lib/services/shared/supabase/agents.ts | 23.53 | 10.76 | 16-30,39-54,63-79,88-104,128-129,143-151,160-171,180-268,277-299,308-322,331-348,357-371,380-407,422-423,433-434,445-529
lib/services/shared/supabase/calls.ts | 0.00 | 5.08 | 15-42,51-66,75-90,99-120,129-145,153-165
lib/services/shared/supabase/client.ts | 100.00 | 54.55 | 14-18
lib/services/shared/supabase/emails.ts | 0.00 | 5.88 | 16-32,42-58,68-81
lib/services/shared/supabase/index.ts | 100.00 | 100.00 |
lib/services/shared/supabase/messageEmbeddings.ts | 0.00 | 5.66 | 15-34,43-60,69-84,92-103,112-127,136-153
lib/services/shared/supabase/messages.ts | 0.00 | 3.96 | 18-40,49-69,78-100,109-127,136-155,164-183,192-226,235-269,278-297,306-336,345-365,374-396
lib/services/shared/supabase/people.ts | 0.00 | 4.26 | 15-29,38-52,61-101,112-130
lib/services/shared/supabase/properties.ts | 0.00 | 4.61 | 19-35,45-65,74-90,100-116,126-152,162-177,186-223,232-245,254-275,284-298,309-326,336-349,358-371,380-394,405-435,446-480
lib/services/shared/supabase/test.ts | 0.00 | 18.18 | 10-18
lib/services/shared/supabase/users.ts | 33.33 | 19.90 | 30-31,45-61,70-82,91-105,115-138,147-166,175-185,200-201,211-212,223-257,267-278
lib/services/shared/supabaseClient.ts | 100.00 | 100.00 |
lib/services/zillow_ops/extendedSearch.ts | 0.00 | 1.79 | 16-125
lib/services/zillow_ops/zil.ts | 0.00 | 2.69 | 29-74,83-100,110-208,214-216,220-222,226-228,237-328,332-340,351-395,410-724,736-753,764-779,783-810,852-941,951-980,992-1021,1032-1153,1164-1209
lib/services/zillow_ops/zutils.ts | 100.00 | 100.00 |
lib/twilioUtils.ts | 0.00 | 2.40 | 14-61,70-72,81-83,92-96,106-129,139-159,169-179,188-238,246-249,257-274,281-296,306-324,335-363,374-389,398-551,555-649,659-686,697-727,733-765
lib/types/MREmailFilter.ts | 0.00 | 2.17 | 9-53
lib/types/MRUserFilter.ts | 0.00 | 1.82 | 9-62
lib/types/property.ts | 33.33 | 35.71 | 556-564,590-598
lib/types/zodMRListingAgentSchema.ts | 100.00 | 100.00 |
lib/types/zodMRUserSchema.ts | 100.00 | 100.00 |
lib/utils.ts | 6.25 | 26.79 | 10,19-37,41-46,50-53,56-58,62,65-67,79-91,96,100,104,108-120,128,136-140,144-153
lib/utils/dates.ts | 0.00 | 30.95 | 19-30,70-73,80-84,91-92,99-100,122-125
lib/utils/errorUtils.ts | 0.00 | 10.20 | 6-11,20-40,51-67
lib/utils/getShorthandAddress.ts | 0.00 | 2.50 | 8-46
lib/utils/parseShowingTime.ts | 0.00 | 2.78 | 10-102,112-123
lib/utils/performanceTracker.ts | 0.00 | 12.63 | 11,19-21,29-52,62-93,104-118,129,133-139
lib/utils/rateLimiter.ts | 50.00 | 21.05 | 13-27
---------------------------------------------------------------|---------|---------|-------------------
0 pass
1 fail
Ran 1 tests across 1 files. [6.66s]
[The command completed with exit code 1.]
[Current working directory: /workspace]
[Python interpreter: /openhands/poetry/openhands-ai-5O4_aCHf-py3.12/bin/python]
[Command finished with exit code 1]
--END AGENT OBSERVATION--
16:50:37 - openhands:INFO: agent_controller.py:970 - [Agent Controller 762916a8-4fb4-48c2-a3b7-b0917a1cf171-319e8e72befff0c3] Cleared pending action after 7.18s: CmdRunAction (id=95)
16:50:37 - openhands:INFO: agent_controller.py:416 - [Agent Controller 762916a8-4fb4-48c2-a3b7-b0917a1cf171-319e8e72befff0c3] Stepping agent after event: CmdOutputObservation
[Agent Controller 762916a8-4fb4-48c2-a3b7-b0917a1cf171-319e8e72befff0c3] LEVEL 0 LOCAL STEP 46 GLOBAL STEP 46
16:50:51 - openhands:INFO: agent_controller.py:979 - [Agent Controller 762916a8-4fb4-48c2-a3b7-b0917a1cf171-319e8e72befff0c3] Set pending action: CmdRunAction (id=-1)
16:50:51 - openhands:INFO: resolve_issue.py:233 - **CmdRunAction (source=EventSource.AGENT, is_input=False)**
THOUGHT: It looks like we're still having an issue with the test. Let's try a different approach. Instead of creating a test, let's implement the solution directly by modifying the buyer_flow.ts and showing.ts files to handle the case when we're the listing agent.
Let's first check how the system determines if we're the listing agent.
COMMAND:
grep -r "current_property_zpid" --include="*.ts" /workspace/lib/services/realtor_flow/realtor_flow.ts
16:50:52 - openhands:INFO: resolve_issue.py:233 - **CmdOutputObservation (source=EventSource.AGENT, exit code=0, metadata={
"exit_code": 0,
"pid": -1,
"username": "openhands",
"hostname": "aae885bd2acb",
"working_dir": "/workspace",
"py_interpreter_path": "/openhands/poetry/openhands-ai-5O4_aCHf-py3.12/bin/python",
"prefix": "",
"suffix": "\n[The command completed with exit code 0.]"
})**
--BEGIN AGENT OBSERVATION--
if (!user?.current_property_zpid) {
.eq('zpid', user.current_property_zpid)
const property = await getPropertyByZpid(user.current_property_zpid)
const property = await findPropertyByZpidAndAgentId(this.sharedState.listingAgent?.current_property_zpid!,
.eq('zpid', this.sharedState.listingAgent?.current_property_zpid!)
[The command completed with exit code 0.]
[Current working directory: /workspace]
[Python interpreter: /openhands/poetry/openhands-ai-5O4_aCHf-py3.12/bin/python]
[Command finished with exit code 0]
--END AGENT OBSERVATION--
16:50:52 - openhands:INFO: agent_controller.py:970 - [Agent Controller 762916a8-4fb4-48c2-a3b7-b0917a1cf171-319e8e72befff0c3] Cleared pending action after 0.64s: CmdRunAction (id=97)
16:50:52 - openhands:INFO: agent_controller.py:416 - [Agent Controller 762916a8-4fb4-48c2-a3b7-b0917a1cf171-319e8e72befff0c3] Stepping agent after event: CmdOutputObservation
[Agent Controller 762916a8-4fb4-48c2-a3b7-b0917a1cf171-319e8e72befff0c3] LEVEL 0 LOCAL STEP 47 GLOBAL STEP 47
16:51:04 - openhands:INFO: agent_controller.py:979 - [Agent Controller 762916a8-4fb4-48c2-a3b7-b0917a1cf171-319e8e72befff0c3] Set pending action: CmdRunAction (id=-1)
16:51:04 - openhands:INFO: resolve_issue.py:233 - **CmdRunAction (source=EventSource.AGENT, is_input=False)**
THOUGHT: Now let's look at the buyer_flow.ts file to see where we need to make changes to handle the case when we're the listing agent.
COMMAND:
grep -n "initiateScheduleShowing" -A 10 /workspace/lib/services/buyer_flow/buyer_flow.ts
16:51:04 - openhands:INFO: resolve_issue.py:233 - **CmdOutputObservation (source=EventSource.AGENT, exit code=0, metadata={
"exit_code": 0,
"pid": -1,
"username": "openhands",
"hostname": "aae885bd2acb",
"working_dir": "/workspace",
"py_interpreter_path": "/openhands/poetry/openhands-ai-5O4_aCHf-py3.12/bin/python",
"prefix": "",
"suffix": "\n[The command completed with exit code 0.]"
})**
--BEGIN AGENT OBSERVATION--
312: async initiateScheduleShowing(params: InitiateScheduleShowingParams): Promise<string> { // TODO: if the showing has already been scheduled, then move straight into the negotiate function.
313- const {
314- address,
315- showingTime,
316- clientName,
317- email: initialEmail,
318- senderPhoneNumber,
319- lastMessage,
320- isTest = false,
321- overrideAgentName: initialOverrideAgentName = 'None',
322- overrideAgentNumber: initialOverrideAgentNumber = 'None'
--
326: console.log('BuyerFlow.initiateScheduleShowing sharedState:', {
327- hasUser: !!this.sharedState.client,
328- clientNumber: this.sharedState.client?.phone_number,
329- senderPhoneNumber
330- });
331-
332- // Process client information to identify the client
333- const { clientPhone, email, overrideAgentName, overrideAgentNumber } =
334- await this.processProvidedClientInfo({
335- senderPhoneNumber,
336- lastMessage,
--
503: return await this.showingService.initiateScheduleShowing({
504- address: processedAddress,
505- showingTime: showingTime,
506- propertyDetails: propertyDetails,
507- clientName: clientName,
508- clientPhone: clientPhone,
509- email: email,
510- isTest: isTest,
511- lastMessage: lastMessage,
512- senderPhoneNumber: senderPhoneNumber,
513- overrideListingAgentName: overrideAgentName,
[The command completed with exit code 0.]
[Current working directory: /workspace]
[Python interpreter: /openhands/poetry/openhands-ai-5O4_aCHf-py3.12/bin/python]
[Command finished with exit code 0]
--END AGENT OBSERVATION--
16:51:04 - openhands:INFO: agent_controller.py:970 - [Agent Controller 762916a8-4fb4-48c2-a3b7-b0917a1cf171-319e8e72befff0c3] Cleared pending action after 0.64s: CmdRunAction (id=99)
16:51:04 - openhands:INFO: agent_controller.py:416 - [Agent Controller 762916a8-4fb4-48c2-a3b7-b0917a1cf171-319e8e72befff0c3] Stepping agent after event: CmdOutputObservation
[Agent Controller 762916a8-4fb4-48c2-a3b7-b0917a1cf171-319e8e72befff0c3] LEVEL 0 LOCAL STEP 48 GLOBAL STEP 48
16:51:16 - openhands:INFO: agent_controller.py:979 - [Agent Controller 762916a8-4fb4-48c2-a3b7-b0917a1cf171-319e8e72befff0c3] Set pending action: CmdRunAction (id=-1)
16:51:16 - openhands:INFO: resolve_issue.py:233 - **CmdRunAction (source=EventSource.AGENT, is_input=False)**
THOUGHT: Now let's look at the showing.ts file to see where we need to make changes to handle the case when we're the listing agent.
COMMAND:
grep -n "initiateScheduleShowing" -A 10 /workspace/lib/services/buyer_flow/showing.ts | grep -A 20 "async initiateScheduleShowing"
16:51:16 - openhands:INFO: resolve_issue.py:233 - **CmdOutputObservation (source=EventSource.AGENT, exit code=0, metadata={
"exit_code": 0,
"pid": -1,
"username": "openhands",
"hostname": "aae885bd2acb",
"working_dir": "/workspace",
"py_interpreter_path": "/openhands/poetry/openhands-ai-5O4_aCHf-py3.12/bin/python",
"prefix": "",
"suffix": "\n[The command completed with exit code 0.]"
})**
--BEGIN AGENT OBSERVATION--
869: async initiateScheduleShowing(params: ShowingScheduleParams): Promise<string> {
870- const {
871- address,
872- showingTime,
873- propertyDetails,
874- clientName,
875- clientPhone,
876- email,
877- isTest = false,
878- lastMessage,
879- senderPhoneNumber,
--
886: // Debug shared state in ShowingService.initiateScheduleShowing
887: console.log('ShowingService.initiateScheduleShowing sharedState:', {
888- hasUser: !!this.sharedState.client,
889- user: this.sharedState.client ? {
890- id: this.sharedState.client.user_id,
891- phone: this.sharedState.client.phone_number
892- } : null,
893- clientNumber: this.sharedState.client?.phone_number,
894- clientPhone: clientPhone
[The command completed with exit code 0.]
[Current working directory: /workspace]
[Python interpreter: /openhands/poetry/openhands-ai-5O4_aCHf-py3.12/bin/python]
[Command finished with exit code 0]
--END AGENT OBSERVATION--
16:51:16 - openhands:INFO: agent_controller.py:970 - [Agent Controller 762916a8-4fb4-48c2-a3b7-b0917a1cf171-319e8e72befff0c3] Cleared pending action after 0.64s: CmdRunAction (id=101)
16:51:16 - openhands:INFO: agent_controller.py:416 - [Agent Controller 762916a8-4fb4-48c2-a3b7-b0917a1cf171-319e8e72befff0c3] Stepping agent after event: CmdOutputObservation
[Agent Controller 762916a8-4fb4-48c2-a3b7-b0917a1cf171-319e8e72befff0c3] LEVEL 0 LOCAL STEP 49 GLOBAL STEP 49
16:51:29 - openhands:INFO: agent_controller.py:979 - [Agent Controller 762916a8-4fb4-48c2-a3b7-b0917a1cf171-319e8e72befff0c3] Set pending action: CmdRunAction (id=-1)
16:51:29 - openhands:INFO: resolve_issue.py:233 - **CmdRunAction (source=EventSource.AGENT, is_input=False)**
THOUGHT: Let's look at the ShowingService class to see where we need to add the check for when we're the listing agent.
COMMAND:
grep -n "class ShowingService" -A 20 /workspace/lib/services/buyer_flow/showing.ts
16:51:30 - openhands:INFO: resolve_issue.py:233 - **CmdOutputObservation (source=EventSource.AGENT, exit code=0, metadata={
"exit_code": 0,
"pid": -1,
"username": "openhands",
"hostname": "aae885bd2acb",
"working_dir": "/workspace",
"py_interpreter_path": "/openhands/poetry/openhands-ai-5O4_aCHf-py3.12/bin/python",
"prefix": "",
"suffix": "\n[The command completed with exit code 0.]"
})**
--BEGIN AGENT OBSERVATION--
585:export class ShowingService {
586- private sharedState: SharedState
587- private listingAgentManager: ListingAgentManager
588- private regularScheduler: ListingAgentScheduler
589- private showamiScheduler: ShowamiSchedulingService
590-
591- // Reference to Raffi's photo for agent messages
592- public RAFFI_PHOTO =
593- 'https://media.marketreactor.com/images/mr/raffi_headshot.jpg'
594-
595- constructor(sharedState: SharedState) {
596- this.sharedState = sharedState
597- console.log('ShowingService constructor - sharedState:', {
598- hasUser: !!sharedState.client,
599- clientNumber: sharedState.client?.phone_number
600- })
601- this.listingAgentManager = new ListingAgentManager()
602- this.regularScheduler = new ListingAgentScheduler(sharedState)
603- this.showamiScheduler = new ShowamiSchedulingService(sharedState)
604- }
605-
[The command completed with exit code 0.]
[Current working directory: /workspace]
[Python interpreter: /openhands/poetry/openhands-ai-5O4_aCHf-py3.12/bin/python]
[Command finished with exit code 0]
--END AGENT OBSERVATION--
16:51:30 - openhands:INFO: agent_controller.py:970 - [Agent Controller 762916a8-4fb4-48c2-a3b7-b0917a1cf171-319e8e72befff0c3] Cleared pending action after 0.64s: CmdRunAction (id=103)
16:51:30 - openhands:INFO: agent_controller.py:416 - [Agent Controller 762916a8-4fb4-48c2-a3b7-b0917a1cf171-319e8e72befff0c3] Stepping agent after event: CmdOutputObservation
[Agent Controller 762916a8-4fb4-48c2-a3b7-b0917a1cf171-319e8e72befff0c3] LEVEL 0 LOCAL STEP 50 GLOBAL STEP 50
16:51:30 - openhands:ERROR: loop.py:24 - RuntimeError: Agent reached maximum iteration in headless mode. Current iteration: 50, max iteration: 50
16:51:30 - openhands:INFO: agent_controller.py:586 - [Agent Controller 762916a8-4fb4-48c2-a3b7-b0917a1cf171-319e8e72befff0c3] Setting agent(CodeActAgent) state from AgentState.RUNNING to AgentState.ERROR
16:51:30 - openhands:ERROR: loop.py:24 - RuntimeError: Agent reached maximum budget in headless mode. Current budget: 7.85, max budget: 4.00
16:51:30 - openhands:INFO: agent_controller.py:586 - [Agent Controller 762916a8-4fb4-48c2-a3b7-b0917a1cf171-319e8e72befff0c3] Setting agent(CodeActAgent) state from AgentState.ERROR to AgentState.ERROR
16:51:30 - openhands:WARNING: agent_controller.py:799 - Stopping agent due to traffic control
16:51:30 - openhands:INFO: agent_controller.py:586 - [Agent Controller 762916a8-4fb4-48c2-a3b7-b0917a1cf171-319e8e72befff0c3] Setting agent(CodeActAgent) state from AgentState.ERROR to AgentState.ERROR
16:51:30 - openhands:INFO: agent_controller.py:586 - [Agent Controller 762916a8-4fb4-48c2-a3b7-b0917a1cf171-319e8e72befff0c3] Setting agent(CodeActAgent) state from AgentState.ERROR to AgentState.ERROR
16:51:30 - openhands:INFO: resolve_issue.py:233 - AgentStateChangedObservation(content='', agent_state='error', reason='RuntimeError: Agent reached maximum iteration in headless mode. Current iteration: 50, max iteration: 50', observation=<ObservationType.AGENT_STATE_CHANGED: 'agent_state_changed'>)
16:51:30 - openhands:INFO: resolve_issue.py:97 - ------------------------------
16:51:30 - openhands:INFO: resolve_issue.py:98 - BEGIN Runtime Completion Fn
16:51:30 - openhands:INFO: resolve_issue.py:99 - ------------------------------
16:51:30 - ACTION
**CmdRunAction (source=None, is_input=False)**
COMMAND:
cd /workspace
16:51:31 - OBSERVATION
**CmdOutputObservation (source=None, exit code=0, metadata={
"exit_code": 0,
"pid": -1,
"username": "openhands",
"hostname": "aae885bd2acb",
"working_dir": "/workspace",
"py_interpreter_path": "/openhands/poetry/openhands-ai-5O4_aCHf-py3.12/bin/python",
"prefix": "",
"suffix": "\n[The command completed with exit code 0.]"
})**
--BEGIN AGENT OBSERVATION--
[The command completed with exit code 0.]
[Current working directory: /workspace]
[Python interpreter: /openhands/poetry/openhands-ai-5O4_aCHf-py3.12/bin/python]
[Command finished with exit code 0]
--END AGENT OBSERVATION--
16:51:31 - ACTION
**CmdRunAction (source=None, is_input=False)**
COMMAND:
git config --global core.pager ""
16:51:31 - OBSERVATION
**CmdOutputObservation (source=None, exit code=0, metadata={
"exit_code": 0,
"pid": -1,
"username": "openhands",
"hostname": "aae885bd2acb",
"working_dir": "/workspace",
"py_interpreter_path": "/openhands/poetry/openhands-ai-5O4_aCHf-py3.12/bin/python",
"prefix": "",
"suffix": "\n[The command completed with exit code 0.]"
})**
--BEGIN AGENT OBSERVATION--
[The command completed with exit code 0.]
[Current working directory: /workspace]
[Python interpreter: /openhands/poetry/openhands-ai-5O4_aCHf-py3.12/bin/python]
[Command finished with exit code 0]
--END AGENT OBSERVATION--
16:51:31 - ACTION
**CmdRunAction (source=None, is_input=False)**
COMMAND:
git config --global --add safe.directory /workspace
16:51:32 - OBSERVATION
**CmdOutputObservation (source=None, exit code=0, metadata={
"exit_code": 0,
"pid": -1,
"username": "openhands",
"hostname": "aae885bd2acb",
"working_dir": "/workspace",
"py_interpreter_path": "/openhands/poetry/openhands-ai-5O4_aCHf-py3.12/bin/python",
"prefix": "",
"suffix": "\n[The command completed with exit code 0.]"
})**
--BEGIN AGENT OBSERVATION--
[The command completed with exit code 0.]
[Current working directory: /workspace]
[Python interpreter: /openhands/poetry/openhands-ai-5O4_aCHf-py3.12/bin/python]
[Command finished with exit code 0]
--END AGENT OBSERVATION--
16:51:32 - ACTION
**CmdRunAction (source=None, is_input=False)**
COMMAND:
git add -A
16:51:33 - OBSERVATION
**CmdOutputObservation (source=None, exit code=0, metadata={
"exit_code": 0,
"pid": -1,
"username": "openhands",
"hostname": "aae885bd2acb",
"working_dir": "/workspace",
"py_interpreter_path": "/openhands/poetry/openhands-ai-5O4_aCHf-py3.12/bin/python",
"prefix": "",
"suffix": "\n[The command completed with exit code 0.]"
})**
--BEGIN AGENT OBSERVATION--
[The command completed with exit code 0.]
[Current working directory: /workspace]
[Python interpreter: /openhands/poetry/openhands-ai-5O4_aCHf-py3.12/bin/python]
[Command finished with exit code 0]
--END AGENT OBSERVATION--
16:51:33 - ACTION
**CmdRunAction (source=None, is_input=False)**
COMMAND:
git diff --no-color --cached b13e91f9674f63279246c9a62ae048892c47f9de
16:51:33 - OBSERVATION
**CmdOutputObservation (source=None, exit code=0, metadata={
"exit_code": 0,
"pid": -1,
"username": "openhands",
"hostname": "aae885bd2acb",
"working_dir": "/workspace",
"py_interpreter_path": "/openhands/poetry/openhands-ai-5O4_aCHf-py3.12/bin/python",
"prefix": "[Previous command outputs are truncated. Showing the last 10735 lines of the output below.]\n",
"suffix": "\n[The command completed with exit code 0.]"
})**
--BEGIN AGENT OBSERVATION--
[Previous command outputs are truncated. Showing the last 10735 lines of the output below.]
+ "dev": true,
+ "license": "MIT",
+ "peer": true
+ },
+ "node_modules/class-variance-authority": {
+ "version": "0.7.1",
+ "resolved": "https://registry.npmjs.org/class-variance-authority/-/class-variance-authority-0.7.1.tgz",
+ "integrity": "sha512-Ka+9Trutv7G8M6WT6SeiRWz792K5qEqIGEGzXKhAE6xOWAY6pPH8U+9IY3oCMv6kqTmLsv7Xh/2w2RigkePMsg==",
+ "license": "Apache-2.0",
+ "dependencies": {
+ "clsx": "^2.1.1"
+ },
+ "funding": {
+ "url": "https://polar.sh/cva"
+ }
+ },
+ "node_modules/cli-boxes": {
+ "version": "3.0.0",
+ "resolved": "https://registry.npmjs.org/cli-boxes/-/cli-boxes-3.0.0.tgz",
+ "integrity": "sha512-/lzGpEWL/8PfI0BmBOPRwp0c/wFNX1RdUML3jK/RcSBA9T8mZDdQpqYBKtCFTOfQbwPqWEOpjqW+Fnayc0969g==",
+ "license": "MIT",
+ "engines": {
+ "node": ">=10"
+ },
+ "funding": {
+ "url": "https://github.com/sponsors/sindresorhus"
+ }
+ },
+ "node_modules/cli-table3": {
+ "version": "0.6.5",
+ "resolved": "https://registry.npmjs.org/cli-table3/-/cli-table3-0.6.5.tgz",
+ "integrity": "sha512-+W/5efTR7y5HRD7gACw9yQjqMVvEMLBHmboM/kPWam+H+Hmyrgjh6YncVKK122YZkXrLudzTuAukUw9FnMf7IQ==",
+ "license": "MIT",
+ "dependencies": {
+ "string-width": "^4.2.0"
+ },
+ "engines": {
+ "node": "10.* || >= 12.*"
+ },
+ "optionalDependencies": {
+ "@colors/colors": "1.5.0"
+ }
+ },
+ "node_modules/client-only": {
+ "version": "0.0.1",
+ "resolved": "https://registry.npmjs.org/client-only/-/client-only-0.0.1.tgz",
+ "integrity": "sha512-IV3Ou0jSMzZrd3pZ48nLkT9DA7Ag1pnPzaiQhpW7c3RbcqqzvzzVu+L8gfqMp/8IM2MQtSiqaCxrrcfu8I8rMA==",
+ "license": "MIT"
+ },
+ "node_modules/cliui": {
+ "version": "8.0.1",
+ "resolved": "https://registry.npmjs.org/cliui/-/cliui-8.0.1.tgz",
+ "integrity": "sha512-BSeNnyus75C4//NQ9gQt1/csTXyo/8Sb+afLAkzAptFuMsod9HFokGNudZpi/oQV73hnVK+sR+5PVRMd+Dr7YQ==",
+ "dev": true,
+ "license": "ISC",
+ "peer": true,
+ "dependencies": {
+ "string-width": "^4.2.0",
+ "strip-ansi": "^6.0.1",
+ "wrap-ansi": "^7.0.0"
+ },
+ "engines": {
+ "node": ">=12"
+ }
+ },
+ "node_modules/clsx": {
+ "version": "2.1.1",
+ "resolved": "https://registry.npmjs.org/clsx/-/clsx-2.1.1.tgz",
+ "integrity": "sha512-eYm0QWBtUrBWZWG0d386OGAw16Z995PiOVo2B7bjWSbHedGl5e0ZWaq65kOGgUSNesEIDkB9ISbTg/JK9dhCZA==",
+ "license": "MIT",
+ "engines": {
+ "node": ">=6"
+ }
+ },
+ "node_modules/co": {
+ "version": "4.6.0",
+ "resolved": "https://registry.npmjs.org/co/-/co-4.6.0.tgz",
+ "integrity": "sha512-QVb0dM5HvG+uaxitm8wONl7jltx8dqhfU33DcqtOZcLSVIKSDDLDi7+0LbAKiyI8hD9u42m2YxXSkMGWThaecQ==",
+ "dev": true,
+ "license": "MIT",
+ "peer": true,
+ "engines": {
+ "iojs": ">= 1.0.0",
+ "node": ">= 0.12.0"
+ }
+ },
+ "node_modules/collect-v8-coverage": {
+ "version": "1.0.2",
+ "resolved": "https://registry.npmjs.org/collect-v8-coverage/-/collect-v8-coverage-1.0.2.tgz",
+ "integrity": "sha512-lHl4d5/ONEbLlJvaJNtsF/Lz+WvB07u2ycqTYbdrq7UypDXailES4valYb2eWiJFxZlVmpGekfqoxQhzyFdT4Q==",
+ "dev": true,
+ "license": "MIT",
+ "peer": true
+ },
+ "node_modules/color": {
+ "version": "4.2.3",
+ "resolved": "https://registry.npmjs.org/color/-/color-4.2.3.tgz",
+ "integrity": "sha512-1rXeuUUiGGrykh+CeBdu5Ie7OJwinCgQY0bc7GCRxy5xVHy+moaqkpL/jqQq0MtQOeYcrqEz4abc5f0KtU7W4A==",
+ "license": "MIT",
+ "dependencies": {
+ "color-convert": "^2.0.1",
+ "color-string": "^1.9.0"
+ },
+ "engines": {
+ "node": ">=12.5.0"
+ }
+ },
+ "node_modules/color-convert": {
+ "version": "2.0.1",
+ "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz",
+ "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==",
+ "license": "MIT",
+ "dependencies": {
+ "color-name": "~1.1.4"
+ },
+ "engines": {
+ "node": ">=7.0.0"
+ }
+ },
+ "node_modules/color-name": {
+ "version": "1.1.4",
+ "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz",
+ "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==",
+ "license": "MIT"
+ },
+ "node_modules/color-string": {
+ "version": "1.9.1",
+ "resolved": "https://registry.npmjs.org/color-string/-/color-string-1.9.1.tgz",
+ "integrity": "sha512-shrVawQFojnZv6xM40anx4CkoDP+fZsw/ZerEMsW/pyzsRbElpsL/DBVW7q3ExxwusdNXI3lXpuhEZkzs8p5Eg==",
+ "license": "MIT",
+ "dependencies": {
+ "color-name": "^1.0.0",
+ "simple-swizzle": "^0.2.2"
+ }
+ },
+ "node_modules/colors": {
+ "version": "1.0.3",
+ "resolved": "https://registry.npmjs.org/colors/-/colors-1.0.3.tgz",
+ "integrity": "sha512-pFGrxThWcWQ2MsAz6RtgeWe4NK2kUE1WfsrvvlctdII745EW9I0yflqhe7++M5LEc7bV2c/9/5zc8sFcpL0Drw==",
+ "license": "MIT",
+ "engines": {
+ "node": ">=0.1.90"
+ }
+ },
+ "node_modules/combined-stream": {
+ "version": "1.0.8",
+ "resolved": "https://registry.npmjs.org/combined-stream/-/combined-stream-1.0.8.tgz",
+ "integrity": "sha512-FQN4MRfuJeHf7cBbBMJFXhKSDq+2kAArBlmRBvcvFE5BB1HZKXtSFASDhdlz9zOYwxh8lDdnvmMOe/+5cdoEdg==",
+ "license": "MIT",
+ "dependencies": {
+ "delayed-stream": "~1.0.0"
+ },
+ "engines": {
+ "node": ">= 0.8"
+ }
+ },
+ "node_modules/comma-separated-tokens": {
+ "version": "2.0.3",
+ "resolved": "https://registry.npmjs.org/comma-separated-tokens/-/comma-separated-tokens-2.0.3.tgz",
+ "integrity": "sha512-Fu4hJdvzeylCfQPp9SGWidpzrMs7tTrlu6Vb8XGaRGck8QSNZJJp538Wrb60Lax4fPwR64ViY468OIUTbRlGZg==",
+ "license": "MIT",
+ "funding": {
+ "type": "github",
+ "url": "https://github.com/sponsors/wooorm"
+ }
+ },
+ "node_modules/commander": {
+ "version": "8.3.0",
+ "resolved": "https://registry.npmjs.org/commander/-/commander-8.3.0.tgz",
+ "integrity": "sha512-OkTL9umf+He2DZkUq8f8J9of7yL6RJKI24dVITBmNfZBmri9zYZQrKkuXiKhyfPSu8tUhnVBB1iKXevvnlR4Ww==",
+ "license": "MIT",
+ "engines": {
+ "node": ">= 12"
+ }
+ },
+ "node_modules/concat-map": {
+ "version": "0.0.1",
+ "resolved": "https://registry.npmjs.org/concat-map/-/concat-map-0.0.1.tgz",
+ "integrity": "sha512-/Srv4dswyQNBfohGpz9o6Yb3Gz3SrUDqBH5rTuhGR7ahtlbYKnVxw2bCFMRljaA7EXHaXZ8wsHdodFvbkhKmqg==",
+ "dev": true,
+ "license": "MIT"
+ },
+ "node_modules/convert-source-map": {
+ "version": "2.0.0",
+ "resolved": "https://registry.npmjs.org/convert-source-map/-/convert-source-map-2.0.0.tgz",
+ "integrity": "sha512-Kvp459HrV2FEJ1CAsi1Ku+MY3kasH19TFykTz2xWmMeq6bk2NU3XXvfJ+Q61m0xktWwt+1HSYf3JZsTms3aRJg==",
+ "dev": true,
+ "license": "MIT",
+ "peer": true
+ },
+ "node_modules/core-util-is": {
+ "version": "1.0.3",
+ "resolved": "https://registry.npmjs.org/core-util-is/-/core-util-is-1.0.3.tgz",
+ "integrity": "sha512-ZQBvi1DcpJ4GDqanjucZ2Hj3wEO5pZDS89BWbkcrvdxksJorwUDDZamX9ldFkp9aw2lmBDLgkObEA4DWNJ9FYQ==",
+ "license": "MIT"
+ },
+ "node_modules/create-jest": {
+ "version": "29.7.0",
+ "resolved": "https://registry.npmjs.org/create-jest/-/create-jest-29.7.0.tgz",
+ "integrity": "sha512-Adz2bdH0Vq3F53KEMJOoftQFutWCukm6J24wbPWRO4k1kMY7gS7ds/uoJkNuV8wDCtWWnuwGcJwpWcih+zEW1Q==",
+ "dev": true,
+ "license": "MIT",
+ "peer": true,
+ "dependencies": {
+ "@jest/types": "^29.6.3",
+ "chalk": "^4.0.0",
+ "exit": "^0.1.2",
+ "graceful-fs": "^4.2.9",
+ "jest-config": "^29.7.0",
+ "jest-util": "^29.7.0",
+ "prompts": "^2.0.1"
+ },
+ "bin": {
+ "create-jest": "bin/create-jest.js"
+ },
+ "engines": {
+ "node": "^14.15.0 || ^16.10.0 || >=18.0.0"
+ }
+ },
+ "node_modules/create-jest/node_modules/chalk": {
+ "version": "4.1.2",
+ "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.2.tgz",
+ "integrity": "sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==",
+ "dev": true,
+ "license": "MIT",
+ "peer": true,
+ "dependencies": {
+ "ansi-styles": "^4.1.0",
+ "supports-color": "^7.1.0"
+ },
+ "engines": {
+ "node": ">=10"
+ },
+ "funding": {
+ "url": "https://github.com/chalk/chalk?sponsor=1"
+ }
+ },
+ "node_modules/cross-fetch": {
+ "version": "3.2.0",
+ "resolved": "https://registry.npmjs.org/cross-fetch/-/cross-fetch-3.2.0.tgz",
+ "integrity": "sha512-Q+xVJLoGOeIMXZmbUK4HYk+69cQH6LudR0Vu/pRm2YlU/hDV9CiS0gKUMaWY5f2NeUH9C1nV3bsTlCo0FsTV1Q==",
+ "license": "MIT",
+ "dependencies": {
+ "node-fetch": "^2.7.0"
+ }
+ },
+ "node_modules/cross-fetch/node_modules/node-fetch": {
+ "version": "2.7.0",
+ "resolved": "https://registry.npmjs.org/node-fetch/-/node-fetch-2.7.0.tgz",
+ "integrity": "sha512-c4FRfUm/dbcWZ7U+1Wq0AwCyFL+3nt2bEw05wfxSz+DWpWsitgmSgYmy2dQdWyKC1694ELPqMs/YzUSNozLt8A==",
+ "license": "MIT",
+ "dependencies": {
+ "whatwg-url": "^5.0.0"
+ },
+ "engines": {
+ "node": "4.x || >=6.0.0"
+ },
+ "peerDependencies": {
+ "encoding": "^0.1.0"
+ },
+ "peerDependenciesMeta": {
+ "encoding": {
+ "optional": true
+ }
+ }
+ },
+ "node_modules/cross-spawn": {
+ "version": "7.0.6",
+ "resolved": "https://registry.npmjs.org/cross-spawn/-/cross-spawn-7.0.6.tgz",
+ "integrity": "sha512-uV2QOWP2nWzsy2aMp8aRibhi9dlzF5Hgh5SHaB9OiTGEyDTiJJyx0uy51QXdyWbtAHNua4XJzUKca3OzKUd3vA==",
+ "dev": true,
+ "license": "MIT",
+ "dependencies": {
+ "path-key": "^3.1.0",
+ "shebang-command": "^2.0.0",
+ "which": "^2.0.1"
+ },
+ "engines": {
+ "node": ">= 8"
+ }
+ },
+ "node_modules/crypto-js": {
+ "version": "4.2.0",
+ "resolved": "https://registry.npmjs.org/crypto-js/-/crypto-js-4.2.0.tgz",
+ "integrity": "sha512-KALDyEYgpY+Rlob/iriUtjV6d5Eq+Y191A5g4UqLAi8CyGP9N1+FdVbkc1SxKc2r4YAYqG8JzO2KGL+AizD70Q==",
+ "license": "MIT"
+ },
+ "node_modules/cssesc": {
+ "version": "3.0.0",
+ "resolved": "https://registry.npmjs.org/cssesc/-/cssesc-3.0.0.tgz",
+ "integrity": "sha512-/Tb/JcjK111nNScGob5MNtsntNM1aCNUDipB/TkwZFhyDrrE47SOx/18wF2bbjgc3ZzCSKW1T5nt5EbFoAz/Vg==",
+ "dev": true,
+ "license": "MIT",
+ "bin": {
+ "cssesc": "bin/cssesc"
+ },
+ "engines": {
+ "node": ">=4"
+ }
+ },
+ "node_modules/csstype": {
+ "version": "3.1.3",
+ "resolved": "https://registry.npmjs.org/csstype/-/csstype-3.1.3.tgz",
+ "integrity": "sha512-M1uQkMl8rQK/szD0LNhtqxIPLpimGm8sOBwU7lLnCpSbTyY3yeU1Vc7l4KT5zT4s/yOxHH5O7tIuuLOCnLADRw==",
+ "license": "MIT"
+ },
+ "node_modules/csv-parse": {
+ "version": "5.6.0",
+ "resolved": "https://registry.npmjs.org/csv-parse/-/csv-parse-5.6.0.tgz",
+ "integrity": "sha512-l3nz3euub2QMg5ouu5U09Ew9Wf6/wQ8I++ch1loQ0ljmzhmfZYrH9fflS22i/PQEvsPvxCwxgz5q7UB8K1JO4Q==",
+ "license": "MIT"
+ },
+ "node_modules/damerau-levenshtein": {
+ "version": "1.0.8",
+ "resolved": "https://registry.npmjs.org/damerau-levenshtein/-/damerau-levenshtein-1.0.8.tgz",
+ "integrity": "sha512-sdQSFB7+llfUcQHUQO3+B8ERRj0Oa4w9POWMI/puGtuf7gFywGmkaLCElnudfTiKZV+NvHqL0ifzdrI8Ro7ESA==",
+ "dev": true,
+ "license": "BSD-2-Clause"
+ },
+ "node_modules/data-uri-to-buffer": {
+ "version": "4.0.1",
+ "resolved": "https://registry.npmjs.org/data-uri-to-buffer/-/data-uri-to-buffer-4.0.1.tgz",
+ "integrity": "sha512-0R9ikRb668HB7QDxT1vkpuUBtqc53YyAwMwGeUFKRojY/NWKvdZ+9UYtRfGmhqNbRkTSVpMbmyhXipFFv2cb/A==",
+ "license": "MIT",
+ "engines": {
+ "node": ">= 12"
+ }
+ },
+ "node_modules/data-view-buffer": {
+ "version": "1.0.2",
+ "resolved": "https://registry.npmjs.org/data-view-buffer/-/data-view-buffer-1.0.2.tgz",
+ "integrity": "sha512-EmKO5V3OLXh1rtK2wgXRansaK1/mtVdTUEiEI0W8RkvgT05kfxaH29PliLnpLP73yYO6142Q72QNa8Wx/A5CqQ==",
+ "dev": true,
+ "license": "MIT",
+ "dependencies": {
+ "call-bound": "^1.0.3",
+ "es-errors": "^1.3.0",
+ "is-data-view": "^1.0.2"
+ },
+ "engines": {
+ "node": ">= 0.4"
+ },
+ "funding": {
+ "url": "https://github.com/sponsors/ljharb"
+ }
+ },
+ "node_modules/data-view-byte-length": {
+ "version": "1.0.2",
+ "resolved": "https://registry.npmjs.org/data-view-byte-length/-/data-view-byte-length-1.0.2.tgz",
+ "integrity": "sha512-tuhGbE6CfTM9+5ANGf+oQb72Ky/0+s3xKUpHvShfiz2RxMFgFPjsXuRLBVMtvMs15awe45SRb83D6wH4ew6wlQ==",
+ "dev": true,
+ "license": "MIT",
+ "dependencies": {
+ "call-bound": "^1.0.3",
+ "es-errors": "^1.3.0",
+ "is-data-view": "^1.0.2"
+ },
+ "engines": {
+ "node": ">= 0.4"
+ },
+ "funding": {
+ "url": "https://github.com/sponsors/inspect-js"
+ }
+ },
+ "node_modules/data-view-byte-offset": {
+ "version": "1.0.1",
+ "resolved": "https://registry.npmjs.org/data-view-byte-offset/-/data-view-byte-offset-1.0.1.tgz",
+ "integrity": "sha512-BS8PfmtDGnrgYdOonGZQdLZslWIeCGFP9tpan0hi1Co2Zr2NKADsvGYA8XxuG/4UWgJ6Cjtv+YJnB6MM69QGlQ==",
+ "dev": true,
+ "license": "MIT",
+ "dependencies": {
+ "call-bound": "^1.0.2",
+ "es-errors": "^1.3.0",
+ "is-data-view": "^1.0.1"
+ },
+ "engines": {
+ "node": ">= 0.4"
+ },
+ "funding": {
+ "url": "https://github.com/sponsors/ljharb"
+ }
+ },
+ "node_modules/date-fns": {
+ "version": "4.1.0",
+ "resolved": "https://registry.npmjs.org/date-fns/-/date-fns-4.1.0.tgz",
+ "integrity": "sha512-Ukq0owbQXxa/U3EGtsdVBkR1w7KOQ5gIBqdH2hkvknzZPYvBxb/aa6E8L7tmjFtkwZBu3UXBbjIgPo/Ez4xaNg==",
+ "license": "MIT",
+ "funding": {
+ "type": "github",
+ "url": "https://github.com/sponsors/kossnocorp"
+ }
+ },
+ "node_modules/date-fns-tz": {
+ "version": "3.2.0",
+ "resolved": "https://registry.npmjs.org/date-fns-tz/-/date-fns-tz-3.2.0.tgz",
+ "integrity": "sha512-sg8HqoTEulcbbbVXeg84u5UnlsQa8GS5QXMqjjYIhS4abEVVKIUwe0/l/UhrZdKaL/W5eWZNlbTeEIiOXTcsBQ==",
+ "license": "MIT",
+ "peerDependencies": {
+ "date-fns": "^3.0.0 || ^4.0.0"
+ }
+ },
+ "node_modules/dayjs": {
+ "version": "1.11.13",
+ "resolved": "https://registry.npmjs.org/dayjs/-/dayjs-1.11.13.tgz",
+ "integrity": "sha512-oaMBel6gjolK862uaPQOVTA7q3TZhuSvuMQAAglQDOWYO9A91IrAOUJEyKVlqJlHE0vq5p5UXxzdPfMH/x6xNg==",
+ "license": "MIT"
+ },
+ "node_modules/debug": {
+ "version": "4.3.7",
+ "resolved": "https://registry.npmjs.org/debug/-/debug-4.3.7.tgz",
+ "integrity": "sha512-Er2nc/H7RrMXZBFCEim6TCmMk02Z8vLC2Rbi1KEBggpo0fS6l0S1nnapwmIi3yW/+GOJap1Krg4w0Hg80oCqgQ==",
+ "license": "MIT",
+ "dependencies": {
+ "ms": "^2.1.3"
+ },
+ "engines": {
+ "node": ">=6.0"
+ },
+ "peerDependenciesMeta": {
+ "supports-color": {
+ "optional": true
+ }
+ }
+ },
+ "node_modules/decode-named-character-reference": {
+ "version": "1.0.2",
+ "resolved": "https://registry.npmjs.org/decode-named-character-reference/-/decode-named-character-reference-1.0.2.tgz",
+ "integrity": "sha512-O8x12RzrUF8xyVcY0KJowWsmaJxQbmy0/EtnNtHRpsOcT7dFk5W598coHqBVpmWo1oQQfsCqfCmkZN5DJrZVdg==",
+ "license": "MIT",
+ "dependencies": {
+ "character-entities": "^2.0.0"
+ },
+ "funding": {
+ "type": "github",
+ "url": "https://github.com/sponsors/wooorm"
+ }
+ },
+ "node_modules/decode-named-character-reference/node_modules/character-entities": {
+ "version": "2.0.2",
+ "resolved": "https://registry.npmjs.org/character-entities/-/character-entities-2.0.2.tgz",
+ "integrity": "sha512-shx7oQ0Awen/BRIdkjkvz54PnEEI/EjwXDSIZp86/KKdbafHh1Df/RYGBhn4hbe2+uKC9FnT5UCEdyPz3ai9hQ==",
+ "license": "MIT",
+ "funding": {
+ "type": "github",
+ "url": "https://github.com/sponsors/wooorm"
+ }
+ },
+ "node_modules/decompress-response": {
+ "version": "6.0.0",
+ "resolved": "https://registry.npmjs.org/decompress-response/-/decompress-response-6.0.0.tgz",
+ "integrity": "sha512-aW35yZM6Bb/4oJlZncMH2LCoZtJXTRxES17vE3hoRiowU2kWHaJKFkSBDnDR+cm9J+9QhXmREyIfv0pji9ejCQ==",
+ "license": "MIT",
+ "dependencies": {
+ "mimic-response": "^3.1.0"
+ },
+ "engines": {
+ "node": ">=10"
+ },
+ "funding": {
+ "url": "https://github.com/sponsors/sindresorhus"
+ }
+ },
+ "node_modules/dedent": {
+ "version": "1.5.3",
+ "resolved": "https://registry.npmjs.org/dedent/-/dedent-1.5.3.tgz",
+ "integrity": "sha512-NHQtfOOW68WD8lgypbLA5oT+Bt0xXJhiYvoR6SmmNXZfpzOGXwdKWmcwG8N7PwVVWV3eF/68nmD9BaJSsTBhyQ==",
+ "dev": true,
+ "license": "MIT",
+ "peer": true,
+ "peerDependencies": {
+ "babel-plugin-macros": "^3.1.0"
+ },
+ "peerDependenciesMeta": {
+ "babel-plugin-macros": {
+ "optional": true
+ }
+ }
+ },
+ "node_modules/deep-extend": {
+ "version": "0.6.0",
+ "resolved": "https://registry.npmjs.org/deep-extend/-/deep-extend-0.6.0.tgz",
+ "integrity": "sha512-LOHxIOaPYdHlJRtCQfDIVZtfw/ufM8+rVj649RIHzcm/vGwQRXFt6OPqIFWsm2XEMrNIEtWR64sY1LEKD2vAOA==",
+ "license": "MIT",
+ "engines": {
+ "node": ">=4.0.0"
+ }
+ },
+ "node_modules/deep-is": {
+ "version": "0.1.4",
+ "resolved": "https://registry.npmjs.org/deep-is/-/deep-is-0.1.4.tgz",
+ "integrity": "sha512-oIPzksmTg4/MriiaYGO+okXDT7ztn/w3Eptv/+gSIdMdKsJo0u4CfYNFJPy+4SKMuCqGw2wxnA+URMg3t8a/bQ==",
+ "dev": true,
+ "license": "MIT"
+ },
+ "node_modules/deepmerge": {
+ "version": "4.3.1",
+ "resolved": "https://registry.npmjs.org/deepmerge/-/deepmerge-4.3.1.tgz",
+ "integrity": "sha512-3sUqbMEc77XqpdNO7FRyRog+eW3ph+GYCbj+rK+uYyRMuwsVy0rMiVtPn+QJlKFvWP/1PYpapqYn0Me2knFn+A==",
+ "license": "MIT",
+ "engines": {
+ "node": ">=0.10.0"
+ }
+ },
+ "node_modules/define-data-property": {
+ "version": "1.1.4",
+ "resolved": "https://registry.npmjs.org/define-data-property/-/define-data-property-1.1.4.tgz",
+ "integrity": "sha512-rBMvIzlpA8v6E+SJZoo++HAYqsLrkg7MSfIinMPFhmkorw7X+dOXVJQs+QT69zGkzMyfDnIMN2Wid1+NbL3T+A==",
+ "dev": true,
+ "license": "MIT",
+ "dependencies": {
+ "es-define-property": "^1.0.0",
+ "es-errors": "^1.3.0",
+ "gopd": "^1.0.1"
+ },
+ "engines": {
+ "node": ">= 0.4"
+ },
+ "funding": {
+ "url": "https://github.com/sponsors/ljharb"
+ }
+ },
+ "node_modules/define-properties": {
+ "version": "1.2.1",
+ "resolved": "https://registry.npmjs.org/define-properties/-/define-properties-1.2.1.tgz",
+ "integrity": "sha512-8QmQKqEASLd5nx0U1B1okLElbUuuttJ/AnYmRXbbbGDWh6uS208EjD4Xqq/I9wK7u0v6O08XhTWnt5XtEbR6Dg==",
+ "dev": true,
+ "license": "MIT",
+ "dependencies": {
+ "define-data-property": "^1.0.1",
+ "has-property-descriptors": "^1.0.0",
+ "object-keys": "^1.1.1"
+ },
+ "engines": {
+ "node": ">= 0.4"
+ },
+ "funding": {
+ "url": "https://github.com/sponsors/ljharb"
+ }
+ },
+ "node_modules/delayed-stream": {
+ "version": "1.0.0",
+ "resolved": "https://registry.npmjs.org/delayed-stream/-/delayed-stream-1.0.0.tgz",
+ "integrity": "sha512-ZySD7Nf91aLB0RxL4KGrKHBXl7Eds1DAmEdcoVawXnLD7SDhpNgtuII2aAkg7a7QS41jxPSZ17p4VdGnMHk3MQ==",
+ "license": "MIT",
+ "engines": {
+ "node": ">=0.4.0"
+ }
+ },
+ "node_modules/dequal": {
+ "version": "2.0.3",
+ "resolved": "https://registry.npmjs.org/dequal/-/dequal-2.0.3.tgz",
+ "integrity": "sha512-0je+qPKHEMohvfRTCEo3CrPG6cAzAYgmzKyxRiYSSDkS6eGJdyVJm7WaYA5ECaAD9wLB2T4EEeymA5aFVcYXCA==",
+ "license": "MIT",
+ "engines": {
+ "node": ">=6"
+ }
+ },
+ "node_modules/detect-libc": {
+ "version": "2.0.3",
+ "resolved": "https://registry.npmjs.org/detect-libc/-/detect-libc-2.0.3.tgz",
+ "integrity": "sha512-bwy0MGW55bG41VqxxypOsdSdGqLwXPI/focwgTYCFMbdUiBAxLg9CFzG08sz2aqzknwiX7Hkl0bQENjg8iLByw==",
+ "license": "Apache-2.0",
+ "engines": {
+ "node": ">=8"
+ }
+ },
+ "node_modules/detect-newline": {
+ "version": "3.1.0",
+ "resolved": "https://registry.npmjs.org/detect-newline/-/detect-newline-3.1.0.tgz",
+ "integrity": "sha512-TLz+x/vEXm/Y7P7wn1EJFNLxYpUD4TgMosxY6fAVJUnJMbupHBOncxyWUG9OpTaH9EBD7uFI5LfEgmMOc54DsA==",
+ "dev": true,
+ "license": "MIT",
+ "peer": true,
+ "engines": {
+ "node": ">=8"
+ }
+ },
+ "node_modules/detect-node-es": {
+ "version": "1.1.0",
+ "resolved": "https://registry.npmjs.org/detect-node-es/-/detect-node-es-1.1.0.tgz",
+ "integrity": "sha512-ypdmJU/TbBby2Dxibuv7ZLW3Bs1QEmM7nHjEANfohJLvE0XVujisn1qPJcZxg+qDucsr+bP6fLD1rPS3AhJ7EQ==",
+ "license": "MIT"
+ },
+ "node_modules/didyoumean": {
+ "version": "1.2.2",
+ "resolved": "https://registry.npmjs.org/didyoumean/-/didyoumean-1.2.2.tgz",
+ "integrity": "sha512-gxtyfqMg7GKyhQmb056K7M3xszy/myH8w+B4RT+QXBQsvAOdc3XymqDDPHx1BgPgsdAA5SIifona89YtRATDzw==",
+ "dev": true,
+ "license": "Apache-2.0"
+ },
+ "node_modules/diff": {
+ "version": "7.0.0",
+ "resolved": "https://registry.npmjs.org/diff/-/diff-7.0.0.tgz",
+ "integrity": "sha512-PJWHUb1RFevKCwaFA9RlG5tCd+FO5iRh9A8HEtkmBH2Li03iJriB6m6JIN4rGz3K3JLawI7/veA1xzRKP6ISBw==",
+ "license": "BSD-3-Clause",
+ "engines": {
+ "node": ">=0.3.1"
+ }
+ },
+ "node_modules/diff-match-patch": {
+ "version": "1.0.5",
+ "resolved": "https://registry.npmjs.org/diff-match-patch/-/diff-match-patch-1.0.5.tgz",
+ "integrity": "sha512-IayShXAgj/QMXgB0IWmKx+rOPuGMhqm5w6jvFxmVenXKIzRqTAAsbBPT3kWQeGANj3jGgvcvv4yK6SxqYmikgw==",
+ "license": "Apache-2.0"
+ },
+ "node_modules/diff-sequences": {
+ "version": "29.6.3",
+ "resolved": "https://registry.npmjs.org/diff-sequences/-/diff-sequences-29.6.3.tgz",
+ "integrity": "sha512-EjePK1srD3P08o2j4f0ExnylqRs5B9tJjcp9t1krH2qRi8CCdsYfwe9JgSLurFBWwq4uOlipzfk5fHNvwFKr8Q==",
+ "dev": true,
+ "license": "MIT",
+ "engines": {
+ "node": "^14.15.0 || ^16.10.0 || >=18.0.0"
+ }
+ },
+ "node_modules/dlv": {
+ "version": "1.1.3",
+ "resolved": "https://registry.npmjs.org/dlv/-/dlv-1.1.3.tgz",
+ "integrity": "sha512-+HlytyjlPKnIG8XuRG8WvmBP8xs8P71y+SKKS6ZXWoEgLuePxtDoUEiH7WkdePWrQ5JBpE6aoVqfZfJUQkjXwA==",
+ "dev": true,
+ "license": "MIT"
+ },
+ "node_modules/doctrine": {
+ "version": "2.1.0",
+ "resolved": "https://registry.npmjs.org/doctrine/-/doctrine-2.1.0.tgz",
+ "integrity": "sha512-35mSku4ZXK0vfCuHEDAwt55dg2jNajHZ1odvF+8SSr82EsZY4QmXfuWso8oEd8zRhVObSN18aM0CjSdoBX7zIw==",
+ "dev": true,
+ "license": "Apache-2.0",
+ "dependencies": {
+ "esutils": "^2.0.2"
+ },
+ "engines": {
+ "node": ">=0.10.0"
+ }
+ },
+ "node_modules/dom-serializer": {
+ "version": "2.0.0",
+ "resolved": "https://registry.npmjs.org/dom-serializer/-/dom-serializer-2.0.0.tgz",
+ "integrity": "sha512-wIkAryiqt/nV5EQKqQpo3SToSOV9J0DnbJqwK7Wv/Trc92zIAYZ4FlMu+JPFW1DfGFt81ZTCGgDEabffXeLyJg==",
+ "license": "MIT",
+ "dependencies": {
+ "domelementtype": "^2.3.0",
+ "domhandler": "^5.0.2",
+ "entities": "^4.2.0"
+ },
+ "funding": {
+ "url": "https://github.com/cheeriojs/dom-serializer?sponsor=1"
+ }
+ },
+ "node_modules/domelementtype": {
+ "version": "2.3.0",
+ "resolved": "https://registry.npmjs.org/domelementtype/-/domelementtype-2.3.0.tgz",
+ "integrity": "sha512-OLETBj6w0OsagBwdXnPdN0cnMfF9opN69co+7ZrbfPGrdpPVNBUj02spi6B1N7wChLQiPn4CSH/zJvXw56gmHw==",
+ "funding": [
+ {
+ "type": "github",
+ "url": "https://github.com/sponsors/fb55"
+ }
+ ],
+ "license": "BSD-2-Clause"
+ },
+ "node_modules/domhandler": {
+ "version": "5.0.3",
+ "resolved": "https://registry.npmjs.org/domhandler/-/domhandler-5.0.3.tgz",
+ "integrity": "sha512-cgwlv/1iFQiFnU96XXgROh8xTeetsnJiDsTc7TYCLFd9+/WNkIqPTxiM/8pSd8VIrhXGTf1Ny1q1hquVqDJB5w==",
+ "license": "BSD-2-Clause",
+ "dependencies": {
+ "domelementtype": "^2.3.0"
+ },
+ "engines": {
+ "node": ">= 4"
+ },
+ "funding": {
+ "url": "https://github.com/fb55/domhandler?sponsor=1"
+ }
+ },
+ "node_modules/domutils": {
+ "version": "3.2.2",
+ "resolved": "https://registry.npmjs.org/domutils/-/domutils-3.2.2.tgz",
+ "integrity": "sha512-6kZKyUajlDuqlHKVX1w7gyslj9MPIXzIFiz/rGu35uC1wMi+kMhQwGhl4lt9unC9Vb9INnY9Z3/ZA3+FhASLaw==",
+ "license": "BSD-2-Clause",
+ "dependencies": {
+ "dom-serializer": "^2.0.0",
+ "domelementtype": "^2.3.0",
+ "domhandler": "^5.0.3"
+ },
+ "funding": {
+ "url": "https://github.com/fb55/domutils?sponsor=1"
+ }
+ },
+ "node_modules/dotenv": {
+ "version": "16.5.0",
+ "resolved": "https://registry.npmjs.org/dotenv/-/dotenv-16.5.0.tgz",
+ "integrity": "sha512-m/C+AwOAr9/W1UOIZUo232ejMNnJAJtYQjUbHoNTBNTJSvqzzDh7vnrei3o3r3m9blf6ZoDkvcw0VmozNRFJxg==",
+ "license": "BSD-2-Clause",
+ "engines": {
+ "node": ">=12"
+ },
+ "funding": {
+ "url": "https://dotenvx.com"
+ }
+ },
+ "node_modules/dunder-proto": {
+ "version": "1.0.1",
+ "resolved": "https://registry.npmjs.org/dunder-proto/-/dunder-proto-1.0.1.tgz",
+ "integrity": "sha512-KIN/nDJBQRcXw0MLVhZE9iQHmG68qAVIBg9CqmUYjmQIhgij9U5MFvrqkUL5FbtyyzZuOeOt0zdeRe4UY7ct+A==",
+ "license": "MIT",
+ "dependencies": {
+ "call-bind-apply-helpers": "^1.0.1",
+ "es-errors": "^1.3.0",
+ "gopd": "^1.2.0"
+ },
+ "engines": {
+ "node": ">= 0.4"
+ }
+ },
+ "node_modules/eastasianwidth": {
+ "version": "0.2.0",
+ "resolved": "https://registry.npmjs.org/eastasianwidth/-/eastasianwidth-0.2.0.tgz",
+ "integrity": "sha512-I88TYZWc9XiYHRQ4/3c5rjjfgkjhLyW2luGIheGERbNQ6OY7yTybanSpDXZa8y7VUP9YmDcYa+eyq4ca7iLqWA==",
+ "dev": true,
+ "license": "MIT"
+ },
+ "node_modules/ecdsa-sig-formatter": {
+ "version": "1.0.11",
+ "resolved": "https://registry.npmjs.org/ecdsa-sig-formatter/-/ecdsa-sig-formatter-1.0.11.tgz",
+ "integrity": "sha512-nagl3RYrbNv6kQkeJIpt6NJZy8twLB/2vtz6yN9Z4vRKHN4/QZJIEbqohALSgwKdnksuY3k5Addp5lg8sVoVcQ==",
+ "license": "Apache-2.0",
+ "dependencies": {
+ "safe-buffer": "^5.0.1"
+ }
+ },
+ "node_modules/ejs": {
+ "version": "3.1.10",
+ "resolved": "https://registry.npmjs.org/ejs/-/ejs-3.1.10.tgz",
+ "integrity": "sha512-UeJmFfOrAQS8OJWPZ4qtgHyWExa088/MtK5UEyoJGFH67cDEXkZSviOiKRCZ4Xij0zxI3JECgYs3oKx+AizQBA==",
+ "dev": true,
+ "license": "Apache-2.0",
+ "dependencies": {
+ "jake": "^10.8.5"
+ },
+ "bin": {
+ "ejs": "bin/cli.js"
+ },
+ "engines": {
+ "node": ">=0.10.0"
+ }
+ },
+ "node_modules/electron-to-chromium": {
+ "version": "1.5.140",
+ "resolved": "https://registry.npmjs.org/electron-to-chromium/-/electron-to-chromium-1.5.140.tgz",
+ "integrity": "sha512-o82Rj+ONp4Ip7Cl1r7lrqx/pXhbp/lh9DpKcMNscFJdh8ebyRofnc7Sh01B4jx403RI0oqTBvlZ7OBIZLMr2+Q==",
+ "dev": true,
+ "license": "ISC"
+ },
+ "node_modules/emittery": {
+ "version": "0.13.1",
+ "resolved": "https://registry.npmjs.org/emittery/-/emittery-0.13.1.tgz",
+ "integrity": "sha512-DeWwawk6r5yR9jFgnDKYt4sLS0LmHJJi3ZOnb5/JdbYwj3nW+FxQnHIjhBKz8YLC7oRNPVM9NQ47I3CVx34eqQ==",
+ "dev": true,
+ "license": "MIT",
+ "peer": true,
+ "engines": {
+ "node": ">=12"
+ },
+ "funding": {
+ "url": "https://github.com/sindresorhus/emittery?sponsor=1"
+ }
+ },
+ "node_modules/emoji-regex": {
+ "version": "8.0.0",
+ "resolved": "https://registry.npmjs.org/emoji-regex/-/emoji-regex-8.0.0.tgz",
+ "integrity": "sha512-MSjYzcWNOA0ewAHpz0MxpYFvwg6yjy1NG3xteoqz644VCo/RPgnr1/GGt+ic3iJTzQ8Eu3TdM14SawnVUmGE6A==",
+ "license": "MIT"
+ },
+ "node_modules/end-of-stream": {
+ "version": "1.4.4",
+ "resolved": "https://registry.npmjs.org/end-of-stream/-/end-of-stream-1.4.4.tgz",
+ "integrity": "sha512-+uw1inIHVPQoaVuHzRyXd21icM+cnt4CzD5rW+NC1wjOUSTOs+Te7FOv7AhN7vS9x/oIyhLP5PR1H+phQAHu5Q==",
+ "license": "MIT",
+ "dependencies": {
+ "once": "^1.4.0"
+ }
+ },
+ "node_modules/entities": {
+ "version": "4.5.0",
+ "resolved": "https://registry.npmjs.org/entities/-/entities-4.5.0.tgz",
+ "integrity": "sha512-V0hjH4dGPh9Ao5p0MoRY6BVqtwCjhz6vI5LT8AJ55H+4g9/4vbHx1I54fS0XuclLhDHArPQCiMjDxjaL8fPxhw==",
+ "license": "BSD-2-Clause",
+ "engines": {
+ "node": ">=0.12"
+ },
+ "funding": {
+ "url": "https://github.com/fb55/entities?sponsor=1"
+ }
+ },
+ "node_modules/error-ex": {
+ "version": "1.3.2",
+ "resolved": "https://registry.npmjs.org/error-ex/-/error-ex-1.3.2.tgz",
+ "integrity": "sha512-7dFHNmqeFSEt2ZBsCriorKnn3Z2pj+fd9kmI6QoWw4//DL+icEBfc0U7qJCisqrTsKTjw4fNFy2pW9OqStD84g==",
+ "dev": true,
+ "license": "MIT",
+ "peer": true,
+ "dependencies": {
+ "is-arrayish": "^0.2.1"
+ }
+ },
+ "node_modules/es-abstract": {
+ "version": "1.23.9",
+ "resolved": "https://registry.npmjs.org/es-abstract/-/es-abstract-1.23.9.tgz",
+ "integrity": "sha512-py07lI0wjxAC/DcfK1S6G7iANonniZwTISvdPzk9hzeH0IZIshbuuFxLIU96OyF89Yb9hiqWn8M/bY83KY5vzA==",
+ "dev": true,
+ "license": "MIT",
+ "dependencies": {
+ "array-buffer-byte-length": "^1.0.2",
+ "arraybuffer.prototype.slice": "^1.0.4",
+ "available-typed-arrays": "^1.0.7",
+ "call-bind": "^1.0.8",
+ "call-bound": "^1.0.3",
+ "data-view-buffer": "^1.0.2",
+ "data-view-byte-length": "^1.0.2",
+ "data-view-byte-offset": "^1.0.1",
+ "es-define-property": "^1.0.1",
+ "es-errors": "^1.3.0",
+ "es-object-atoms": "^1.0.0",
+ "es-set-tostringtag": "^2.1.0",
+ "es-to-primitive": "^1.3.0",
+ "function.prototype.name": "^1.1.8",
+ "get-intrinsic": "^1.2.7",
+ "get-proto": "^1.0.0",
+ "get-symbol-description": "^1.1.0",
+ "globalthis": "^1.0.4",
+ "gopd": "^1.2.0",
+ "has-property-descriptors": "^1.0.2",
+ "has-proto": "^1.2.0",
+ "has-symbols": "^1.1.0",
+ "hasown": "^2.0.2",
+ "internal-slot": "^1.1.0",
+ "is-array-buffer": "^3.0.5",
+ "is-callable": "^1.2.7",
+ "is-data-view": "^1.0.2",
+ "is-regex": "^1.2.1",
+ "is-shared-array-buffer": "^1.0.4",
+ "is-string": "^1.1.1",
+ "is-typed-array": "^1.1.15",
+ "is-weakref": "^1.1.0",
+ "math-intrinsics": "^1.1.0",
+ "object-inspect": "^1.13.3",
+ "object-keys": "^1.1.1",
+ "object.assign": "^4.1.7",
+ "own-keys": "^1.0.1",
+ "regexp.prototype.flags": "^1.5.3",
+ "safe-array-concat": "^1.1.3",
+ "safe-push-apply": "^1.0.0",
+ "safe-regex-test": "^1.1.0",
+ "set-proto": "^1.0.0",
+ "string.prototype.trim": "^1.2.10",
+ "string.prototype.trimend": "^1.0.9",
+ "string.prototype.trimstart": "^1.0.8",
+ "typed-array-buffer": "^1.0.3",
+ "typed-array-byte-length": "^1.0.3",
+ "typed-array-byte-offset": "^1.0.4",
+ "typed-array-length": "^1.0.7",
+ "unbox-primitive": "^1.1.0",
+ "which-typed-array": "^1.1.18"
+ },
+ "engines": {
+ "node": ">= 0.4"
+ },
+ "funding": {
+ "url": "https://github.com/sponsors/ljharb"
+ }
+ },
+ "node_modules/es-define-property": {
+ "version": "1.0.1",
+ "resolved": "https://registry.npmjs.org/es-define-property/-/es-define-property-1.0.1.tgz",
+ "integrity": "sha512-e3nRfgfUZ4rNGL232gUgX06QNyyez04KdjFrF+LTRoOXmrOgFKDg4BCdsjW8EnT69eqdYGmRpJwiPVYNrCaW3g==",
+ "license": "MIT",
+ "engines": {
+ "node": ">= 0.4"
+ }
+ },
+ "node_modules/es-errors": {
+ "version": "1.3.0",
+ "resolved": "https://registry.npmjs.org/es-errors/-/es-errors-1.3.0.tgz",
+ "integrity": "sha512-Zf5H2Kxt2xjTvbJvP2ZWLEICxA6j+hAmMzIlypy4xcBg1vKVnx89Wy0GbS+kf5cwCVFFzdCFh2XSCFNULS6csw==",
+ "license": "MIT",
+ "engines": {
+ "node": ">= 0.4"
+ }
+ },
+ "node_modules/es-iterator-helpers": {
+ "version": "1.2.1",
+ "resolved": "https://registry.npmjs.org/es-iterator-helpers/-/es-iterator-helpers-1.2.1.tgz",
+ "integrity": "sha512-uDn+FE1yrDzyC0pCo961B2IHbdM8y/ACZsKD4dG6WqrjV53BADjwa7D+1aom2rsNVfLyDgU/eigvlJGJ08OQ4w==",
+ "dev": true,
+ "license": "MIT",
+ "dependencies": {
+ "call-bind": "^1.0.8",
+ "call-bound": "^1.0.3",
+ "define-properties": "^1.2.1",
+ "es-abstract": "^1.23.6",
+ "es-errors": "^1.3.0",
+ "es-set-tostringtag": "^2.0.3",
+ "function-bind": "^1.1.2",
+ "get-intrinsic": "^1.2.6",
+ "globalthis": "^1.0.4",
+ "gopd": "^1.2.0",
+ "has-property-descriptors": "^1.0.2",
+ "has-proto": "^1.2.0",
+ "has-symbols": "^1.1.0",
+ "internal-slot": "^1.1.0",
+ "iterator.prototype": "^1.1.4",
+ "safe-array-concat": "^1.1.3"
+ },
+ "engines": {
+ "node": ">= 0.4"
+ }
+ },
+ "node_modules/es-object-atoms": {
+ "version": "1.1.1",
+ "resolved": "https://registry.npmjs.org/es-object-atoms/-/es-object-atoms-1.1.1.tgz",
+ "integrity": "sha512-FGgH2h8zKNim9ljj7dankFPcICIK9Cp5bm+c2gQSYePhpaG5+esrLODihIorn+Pe6FGJzWhXQotPv73jTaldXA==",
+ "license": "MIT",
+ "dependencies": {
+ "es-errors": "^1.3.0"
+ },
+ "engines": {
+ "node": ">= 0.4"
+ }
+ },
+ "node_modules/es-set-tostringtag": {
+ "version": "2.1.0",
+ "resolved": "https://registry.npmjs.org/es-set-tostringtag/-/es-set-tostringtag-2.1.0.tgz",
+ "integrity": "sha512-j6vWzfrGVfyXxge+O0x5sh6cvxAog0a/4Rdd2K36zCMV5eJ+/+tOAngRO8cODMNWbVRdVlmGZQL2YS3yR8bIUA==",
+ "dev": true,
+ "license": "MIT",
+ "dependencies": {
+ "es-errors": "^1.3.0",
+ "get-intrinsic": "^1.2.6",
+ "has-tostringtag": "^1.0.2",
+ "hasown": "^2.0.2"
+ },
+ "engines": {
+ "node": ">= 0.4"
+ }
+ },
+ "node_modules/es-shim-unscopables": {
+ "version": "1.1.0",
+ "resolved": "https://registry.npmjs.org/es-shim-unscopables/-/es-shim-unscopables-1.1.0.tgz",
+ "integrity": "sha512-d9T8ucsEhh8Bi1woXCf+TIKDIROLG5WCkxg8geBCbvk22kzwC5G2OnXVMO6FUsvQlgUUXQ2itephWDLqDzbeCw==",
+ "dev": true,
+ "license": "MIT",
+ "dependencies": {
+ "hasown": "^2.0.2"
+ },
+ "engines": {
+ "node": ">= 0.4"
+ }
+ },
+ "node_modules/es-to-primitive": {
+ "version": "1.3.0",
+ "resolved": "https://registry.npmjs.org/es-to-primitive/-/es-to-primitive-1.3.0.tgz",
+ "integrity": "sha512-w+5mJ3GuFL+NjVtJlvydShqE1eN3h3PbI7/5LAsYJP/2qtuMXjfL2LpHSRqo4b4eSF5K/DH1JXKUAHSB2UW50g==",
+ "dev": true,
+ "license": "MIT",
+ "dependencies": {
+ "is-callable": "^1.2.7",
+ "is-date-object": "^1.0.5",
+ "is-symbol": "^1.0.4"
+ },
+ "engines": {
+ "node": ">= 0.4"
+ },
+ "funding": {
+ "url": "https://github.com/sponsors/ljharb"
+ }
+ },
+ "node_modules/escalade": {
+ "version": "3.2.0",
+ "resolved": "https://registry.npmjs.org/escalade/-/escalade-3.2.0.tgz",
+ "integrity": "sha512-WUj2qlxaQtO4g6Pq5c29GTcWGDyd8itL8zTlipgECz3JesAiiOKotd8JU6otB3PACgG6xkJUyVhboMS+bje/jA==",
+ "dev": true,
+ "license": "MIT",
+ "engines": {
+ "node": ">=6"
+ }
+ },
+ "node_modules/escape-string-regexp": {
+ "version": "5.0.0",
+ "resolved": "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-5.0.0.tgz",
+ "integrity": "sha512-/veY75JbMK4j1yjvuUxuVsiS/hr/4iHs9FTT6cgTexxdE0Ly/glccBAkloH/DofkjRbZU3bnoj38mOmhkZ0lHw==",
+ "license": "MIT",
+ "engines": {
+ "node": ">=12"
+ },
+ "funding": {
+ "url": "https://github.com/sponsors/sindresorhus"
+ }
+ },
+ "node_modules/eslint": {
+ "version": "9.25.1",
+ "resolved": "https://registry.npmjs.org/eslint/-/eslint-9.25.1.tgz",
+ "integrity": "sha512-E6Mtz9oGQWDCpV12319d59n4tx9zOTXSTmc8BLVxBx+G/0RdM5MvEEJLU9c0+aleoePYYgVTOsRblx433qmhWQ==",
+ "dev": true,
+ "license": "MIT",
+ "dependencies": {
+ "@eslint-community/eslint-utils": "^4.2.0",
+ "@eslint-community/regexpp": "^4.12.1",
+ "@eslint/config-array": "^0.20.0",
+ "@eslint/config-helpers": "^0.2.1",
+ "@eslint/core": "^0.13.0",
+ "@eslint/eslintrc": "^3.3.1",
+ "@eslint/js": "9.25.1",
+ "@eslint/plugin-kit": "^0.2.8",
+ "@humanfs/node": "^0.16.6",
+ "@humanwhocodes/module-importer": "^1.0.1",
+ "@humanwhocodes/retry": "^0.4.2",
+ "@types/estree": "^1.0.6",
+ "@types/json-schema": "^7.0.15",
+ "ajv": "^6.12.4",
+ "chalk": "^4.0.0",
+ "cross-spawn": "^7.0.6",
+ "debug": "^4.3.2",
+ "escape-string-regexp": "^4.0.0",
+ "eslint-scope": "^8.3.0",
+ "eslint-visitor-keys": "^4.2.0",
+ "espree": "^10.3.0",
+ "esquery": "^1.5.0",
+ "esutils": "^2.0.2",
+ "fast-deep-equal": "^3.1.3",
+ "file-entry-cache": "^8.0.0",
+ "find-up": "^5.0.0",
+ "glob-parent": "^6.0.2",
+ "ignore": "^5.2.0",
+ "imurmurhash": "^0.1.4",
+ "is-glob": "^4.0.0",
+ "json-stable-stringify-without-jsonify": "^1.0.1",
+ "lodash.merge": "^4.6.2",
+ "minimatch": "^3.1.2",
+ "natural-compare": "^1.4.0",
+ "optionator": "^0.9.3"
+ },
+ "bin": {
+ "eslint": "bin/eslint.js"
+ },
+ "engines": {
+ "node": "^18.18.0 || ^20.9.0 || >=21.1.0"
+ },
+ "funding": {
+ "url": "https://eslint.org/donate"
+ },
+ "peerDependencies": {
+ "jiti": "*"
+ },
+ "peerDependenciesMeta": {
+ "jiti": {
+ "optional": true
+ }
+ }
+ },
+ "node_modules/eslint-config-next": {
+ "version": "15.3.1",
+ "resolved": "https://registry.npmjs.org/eslint-config-next/-/eslint-config-next-15.3.1.tgz",
+ "integrity": "sha512-GnmyVd9TE/Ihe3RrvcafFhXErErtr2jS0JDeCSp3vWvy86AXwHsRBt0E3MqP/m8ACS1ivcsi5uaqjbhsG18qKw==",
+ "dev": true,
+ "license": "MIT",
+ "dependencies": {
+ "@next/eslint-plugin-next": "15.3.1",
+ "@rushstack/eslint-patch": "^1.10.3",
+ "@typescript-eslint/eslint-plugin": "^5.4.2 || ^6.0.0 || ^7.0.0 || ^8.0.0",
+ "@typescript-eslint/parser": "^5.4.2 || ^6.0.0 || ^7.0.0 || ^8.0.0",
+ "eslint-import-resolver-node": "^0.3.6",
+ "eslint-import-resolver-typescript": "^3.5.2",
+ "eslint-plugin-import": "^2.31.0",
+ "eslint-plugin-jsx-a11y": "^6.10.0",
+ "eslint-plugin-react": "^7.37.0",
+ "eslint-plugin-react-hooks": "^5.0.0"
+ },
+ "peerDependencies": {
+ "eslint": "^7.23.0 || ^8.0.0 || ^9.0.0",
+ "typescript": ">=3.3.1"
+ },
+ "peerDependenciesMeta": {
+ "typescript": {
+ "optional": true
+ }
+ }
+ },
+ "node_modules/eslint-import-resolver-node": {
+ "version": "0.3.9",
+ "resolved": "https://registry.npmjs.org/eslint-import-resolver-node/-/eslint-import-resolver-node-0.3.9.tgz",
+ "integrity": "sha512-WFj2isz22JahUv+B788TlO3N6zL3nNJGU8CcZbPZvVEkBPaJdCV4vy5wyghty5ROFbCRnm132v8BScu5/1BQ8g==",
+ "dev": true,
+ "license": "MIT",
+ "dependencies": {
+ "debug": "^3.2.7",
+ "is-core-module": "^2.13.0",
+ "resolve": "^1.22.4"
+ }
+ },
+ "node_modules/eslint-import-resolver-node/node_modules/debug": {
+ "version": "3.2.7",
+ "resolved": "https://registry.npmjs.org/debug/-/debug-3.2.7.tgz",
+ "integrity": "sha512-CFjzYYAi4ThfiQvizrFQevTTXHtnCqWfe7x1AhgEscTz6ZbLbfoLRLPugTQyBth6f8ZERVUSyWHFD/7Wu4t1XQ==",
+ "dev": true,
+ "license": "MIT",
+ "dependencies": {
+ "ms": "^2.1.1"
+ }
+ },
+ "node_modules/eslint-import-resolver-typescript": {
+ "version": "3.10.1",
+ "resolved": "https://registry.npmjs.org/eslint-import-resolver-typescript/-/eslint-import-resolver-typescript-3.10.1.tgz",
+ "integrity": "sha512-A1rHYb06zjMGAxdLSkN2fXPBwuSaQ0iO5M/hdyS0Ajj1VBaRp0sPD3dn1FhME3c/JluGFbwSxyCfqdSbtQLAHQ==",
+ "dev": true,
+ "license": "ISC",
+ "dependencies": {
+ "@nolyfill/is-core-module": "1.0.39",
+ "debug": "^4.4.0",
+ "get-tsconfig": "^4.10.0",
+ "is-bun-module": "^2.0.0",
+ "stable-hash": "^0.0.5",
+ "tinyglobby": "^0.2.13",
+ "unrs-resolver": "^1.6.2"
+ },
+ "engines": {
+ "node": "^14.18.0 || >=16.0.0"
+ },
+ "funding": {
+ "url": "https://opencollective.com/eslint-import-resolver-typescript"
+ },
+ "peerDependencies": {
+ "eslint": "*",
+ "eslint-plugin-import": "*",
+ "eslint-plugin-import-x": "*"
+ },
+ "peerDependenciesMeta": {
+ "eslint-plugin-import": {
+ "optional": true
+ },
+ "eslint-plugin-import-x": {
+ "optional": true
+ }
+ }
+ },
+ "node_modules/eslint-import-resolver-typescript/node_modules/debug": {
+ "version": "4.4.0",
+ "resolved": "https://registry.npmjs.org/debug/-/debug-4.4.0.tgz",
+ "integrity": "sha512-6WTZ/IxCY/T6BALoZHaE4ctp9xm+Z5kY/pzYaCHRFeyVhojxlrm+46y68HA6hr0TcwEssoxNiDEUJQjfPZ/RYA==",
+ "dev": true,
+ "license": "MIT",
+ "dependencies": {
+ "ms": "^2.1.3"
+ },
+ "engines": {
+ "node": ">=6.0"
+ },
+ "peerDependenciesMeta": {
+ "supports-color": {
+ "optional": true
+ }
+ }
+ },
+ "node_modules/eslint-module-utils": {
+ "version": "2.12.0",
+ "resolved": "https://registry.npmjs.org/eslint-module-utils/-/eslint-module-utils-2.12.0.tgz",
+ "integrity": "sha512-wALZ0HFoytlyh/1+4wuZ9FJCD/leWHQzzrxJ8+rebyReSLk7LApMyd3WJaLVoN+D5+WIdJyDK1c6JnE65V4Zyg==",
+ "dev": true,
+ "license": "MIT",
+ "dependencies": {
+ "debug": "^3.2.7"
+ },
+ "engines": {
+ "node": ">=4"
+ },
+ "peerDependenciesMeta": {
+ "eslint": {
+ "optional": true
+ }
+ }
+ },
+ "node_modules/eslint-module-utils/node_modules/debug": {
+ "version": "3.2.7",
+ "resolved": "https://registry.npmjs.org/debug/-/debug-3.2.7.tgz",
+ "integrity": "sha512-CFjzYYAi4ThfiQvizrFQevTTXHtnCqWfe7x1AhgEscTz6ZbLbfoLRLPugTQyBth6f8ZERVUSyWHFD/7Wu4t1XQ==",
+ "dev": true,
+ "license": "MIT",
+ "dependencies": {
+ "ms": "^2.1.1"
+ }
+ },
+ "node_modules/eslint-plugin-import": {
+ "version": "2.31.0",
+ "resolved": "https://registry.npmjs.org/eslint-plugin-import/-/eslint-plugin-import-2.31.0.tgz",
+ "integrity": "sha512-ixmkI62Rbc2/w8Vfxyh1jQRTdRTF52VxwRVHl/ykPAmqG+Nb7/kNn+byLP0LxPgI7zWA16Jt82SybJInmMia3A==",
+ "dev": true,
+ "license": "MIT",
+ "dependencies": {
+ "@rtsao/scc": "^1.1.0",
+ "array-includes": "^3.1.8",
+ "array.prototype.findlastindex": "^1.2.5",
+ "array.prototype.flat": "^1.3.2",
+ "array.prototype.flatmap": "^1.3.2",
+ "debug": "^3.2.7",
+ "doctrine": "^2.1.0",
+ "eslint-import-resolver-node": "^0.3.9",
+ "eslint-module-utils": "^2.12.0",
+ "hasown": "^2.0.2",
+ "is-core-module": "^2.15.1",
+ "is-glob": "^4.0.3",
+ "minimatch": "^3.1.2",
+ "object.fromentries": "^2.0.8",
+ "object.groupby": "^1.0.3",
+ "object.values": "^1.2.0",
+ "semver": "^6.3.1",
+ "string.prototype.trimend": "^1.0.8",
+ "tsconfig-paths": "^3.15.0"
+ },
+ "engines": {
+ "node": ">=4"
+ },
+ "peerDependencies": {
+ "eslint": "^2 || ^3 || ^4 || ^5 || ^6 || ^7.2.0 || ^8 || ^9"
+ }
+ },
+ "node_modules/eslint-plugin-import/node_modules/debug": {
+ "version": "3.2.7",
+ "resolved": "https://registry.npmjs.org/debug/-/debug-3.2.7.tgz",
+ "integrity": "sha512-CFjzYYAi4ThfiQvizrFQevTTXHtnCqWfe7x1AhgEscTz6ZbLbfoLRLPugTQyBth6f8ZERVUSyWHFD/7Wu4t1XQ==",
+ "dev": true,
+ "license": "MIT",
+ "dependencies": {
+ "ms": "^2.1.1"
+ }
+ },
+ "node_modules/eslint-plugin-jsx-a11y": {
+ "version": "6.10.2",
+ "resolved": "https://registry.npmjs.org/eslint-plugin-jsx-a11y/-/eslint-plugin-jsx-a11y-6.10.2.tgz",
+ "integrity": "sha512-scB3nz4WmG75pV8+3eRUQOHZlNSUhFNq37xnpgRkCCELU3XMvXAxLk1eqWWyE22Ki4Q01Fnsw9BA3cJHDPgn2Q==",
+ "dev": true,
+ "license": "MIT",
+ "dependencies": {
+ "aria-query": "^5.3.2",
+ "array-includes": "^3.1.8",
+ "array.prototype.flatmap": "^1.3.2",
+ "ast-types-flow": "^0.0.8",
+ "axe-core": "^4.10.0",
+ "axobject-query": "^4.1.0",
+ "damerau-levenshtein": "^1.0.8",
+ "emoji-regex": "^9.2.2",
+ "hasown": "^2.0.2",
+ "jsx-ast-utils": "^3.3.5",
+ "language-tags": "^1.0.9",
+ "minimatch": "^3.1.2",
+ "object.fromentries": "^2.0.8",
+ "safe-regex-test": "^1.0.3",
+ "string.prototype.includes": "^2.0.1"
+ },
+ "engines": {
+ "node": ">=4.0"
+ },
+ "peerDependencies": {
+ "eslint": "^3 || ^4 || ^5 || ^6 || ^7 || ^8 || ^9"
+ }
+ },
+ "node_modules/eslint-plugin-jsx-a11y/node_modules/emoji-regex": {
+ "version": "9.2.2",
+ "resolved": "https://registry.npmjs.org/emoji-regex/-/emoji-regex-9.2.2.tgz",
+ "integrity": "sha512-L18DaJsXSUk2+42pv8mLs5jJT2hqFkFE4j21wOmgbUqsZ2hL72NsUU785g9RXgo3s0ZNgVl42TiHp3ZtOv/Vyg==",
+ "dev": true,
+ "license": "MIT"
+ },
+ "node_modules/eslint-plugin-react": {
+ "version": "7.37.5",
+ "resolved": "https://registry.npmjs.org/eslint-plugin-react/-/eslint-plugin-react-7.37.5.tgz",
+ "integrity": "sha512-Qteup0SqU15kdocexFNAJMvCJEfa2xUKNV4CC1xsVMrIIqEy3SQ/rqyxCWNzfrd3/ldy6HMlD2e0JDVpDg2qIA==",
+ "dev": true,
+ "license": "MIT",
+ "dependencies": {
+ "array-includes": "^3.1.8",
+ "array.prototype.findlast": "^1.2.5",
+ "array.prototype.flatmap": "^1.3.3",
+ "array.prototype.tosorted": "^1.1.4",
+ "doctrine": "^2.1.0",
+ "es-iterator-helpers": "^1.2.1",
+ "estraverse": "^5.3.0",
+ "hasown": "^2.0.2",
+ "jsx-ast-utils": "^2.4.1 || ^3.0.0",
+ "minimatch": "^3.1.2",
+ "object.entries": "^1.1.9",
+ "object.fromentries": "^2.0.8",
+ "object.values": "^1.2.1",
+ "prop-types": "^15.8.1",
+ "resolve": "^2.0.0-next.5",
+ "semver": "^6.3.1",
+ "string.prototype.matchall": "^4.0.12",
+ "string.prototype.repeat": "^1.0.0"
+ },
+ "engines": {
+ "node": ">=4"
+ },
+ "peerDependencies": {
+ "eslint": "^3 || ^4 || ^5 || ^6 || ^7 || ^8 || ^9.7"
+ }
+ },
+ "node_modules/eslint-plugin-react-hooks": {
+ "version": "5.2.0",
+ "resolved": "https://registry.npmjs.org/eslint-plugin-react-hooks/-/eslint-plugin-react-hooks-5.2.0.tgz",
+ "integrity": "sha512-+f15FfK64YQwZdJNELETdn5ibXEUQmW1DZL6KXhNnc2heoy/sg9VJJeT7n8TlMWouzWqSWavFkIhHyIbIAEapg==",
+ "dev": true,
+ "license": "MIT",
+ "engines": {
+ "node": ">=10"
+ },
+ "peerDependencies": {
+ "eslint": "^3.0.0 || ^4.0.0 || ^5.0.0 || ^6.0.0 || ^7.0.0 || ^8.0.0-0 || ^9.0.0"
+ }
+ },
+ "node_modules/eslint-plugin-react/node_modules/resolve": {
+ "version": "2.0.0-next.5",
+ "resolved": "https://registry.npmjs.org/resolve/-/resolve-2.0.0-next.5.tgz",
+ "integrity": "sha512-U7WjGVG9sH8tvjW5SmGbQuui75FiyjAX72HX15DwBBwF9dNiQZRQAg9nnPhYy+TUnE0+VcrttuvNI8oSxZcocA==",
+ "dev": true,
+ "license": "MIT",
+ "dependencies": {
+ "is-core-module": "^2.13.0",
+ "path-parse": "^1.0.7",
+ "supports-preserve-symlinks-flag": "^1.0.0"
+ },
+ "bin": {
+ "resolve": "bin/resolve"
+ },
+ "funding": {
+ "url": "https://github.com/sponsors/ljharb"
+ }
+ },
+ "node_modules/eslint-scope": {
+ "version": "8.3.0",
+ "resolved": "https://registry.npmjs.org/eslint-scope/-/eslint-scope-8.3.0.tgz",
+ "integrity": "sha512-pUNxi75F8MJ/GdeKtVLSbYg4ZI34J6C0C7sbL4YOp2exGwen7ZsuBqKzUhXd0qMQ362yET3z+uPwKeg/0C2XCQ==",
+ "dev": true,
+ "license": "BSD-2-Clause",
+ "dependencies": {
+ "esrecurse": "^4.3.0",
+ "estraverse": "^5.2.0"
+ },
+ "engines": {
+ "node": "^18.18.0 || ^20.9.0 || >=21.1.0"
+ },
+ "funding": {
+ "url": "https://opencollective.com/eslint"
+ }
+ },
+ "node_modules/eslint-visitor-keys": {
+ "version": "3.4.3",
+ "resolved": "https://registry.npmjs.org/eslint-visitor-keys/-/eslint-visitor-keys-3.4.3.tgz",
+ "integrity": "sha512-wpc+LXeiyiisxPlEkUzU6svyS1frIO3Mgxj1fdy7Pm8Ygzguax2N3Fa/D/ag1WqbOprdI+uY6wMUl8/a2G+iag==",
+ "dev": true,
+ "license": "Apache-2.0",
+ "engines": {
+ "node": "^12.22.0 || ^14.17.0 || >=16.0.0"
+ },
+ "funding": {
+ "url": "https://opencollective.com/eslint"
+ }
+ },
+ "node_modules/eslint/node_modules/chalk": {
+ "version": "4.1.2",
+ "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.2.tgz",
+ "integrity": "sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==",
+ "dev": true,
+ "license": "MIT",
+ "dependencies": {
+ "ansi-styles": "^4.1.0",
+ "supports-color": "^7.1.0"
+ },
+ "engines": {
+ "node": ">=10"
+ },
+ "funding": {
+ "url": "https://github.com/chalk/chalk?sponsor=1"
+ }
+ },
+ "node_modules/eslint/node_modules/escape-string-regexp": {
+ "version": "4.0.0",
+ "resolved": "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-4.0.0.tgz",
+ "integrity": "sha512-TtpcNJ3XAzx3Gq8sWRzJaVajRs0uVxA2YAkdb1jm2YkPz4G6egUFAyA3n5vtEIZefPk5Wa4UXbKuS5fKkJWdgA==",
+ "dev": true,
+ "license": "MIT",
+ "engines": {
+ "node": ">=10"
+ },
+ "funding": {
+ "url": "https://github.com/sponsors/sindresorhus"
+ }
+ },
+ "node_modules/eslint/node_modules/eslint-visitor-keys": {
+ "version": "4.2.0",
+ "resolved": "https://registry.npmjs.org/eslint-visitor-keys/-/eslint-visitor-keys-4.2.0.tgz",
+ "integrity": "sha512-UyLnSehNt62FFhSwjZlHmeokpRK59rcz29j+F1/aDgbkbRTk7wIc9XzdoasMUbRNKDM0qQt/+BJ4BrpFeABemw==",
+ "dev": true,
+ "license": "Apache-2.0",
+ "engines": {
+ "node": "^18.18.0 || ^20.9.0 || >=21.1.0"
+ },
+ "funding": {
+ "url": "https://opencollective.com/eslint"
+ }
+ },
+ "node_modules/eslint/node_modules/find-up": {
+ "version": "5.0.0",
+ "resolved": "https://registry.npmjs.org/find-up/-/find-up-5.0.0.tgz",
+ "integrity": "sha512-78/PXT1wlLLDgTzDs7sjq9hzz0vXD+zn+7wypEe4fXQxCmdmqfGsEPQxmiCSQI3ajFV91bVSsvNtrJRiW6nGng==",
+ "dev": true,
+ "license": "MIT",
+ "dependencies": {
+ "locate-path": "^6.0.0",
+ "path-exists": "^4.0.0"
+ },
+ "engines": {
+ "node": ">=10"
+ },
+ "funding": {
+ "url": "https://github.com/sponsors/sindresorhus"
+ }
+ },
+ "node_modules/eslint/node_modules/locate-path": {
+ "version": "6.0.0",
+ "resolved": "https://registry.npmjs.org/locate-path/-/locate-path-6.0.0.tgz",
+ "integrity": "sha512-iPZK6eYjbxRu3uB4/WZ3EsEIMJFMqAoopl3R+zuq0UjcAm/MO6KCweDgPfP3elTztoKP3KtnVHxTn2NHBSDVUw==",
+ "dev": true,
+ "license": "MIT",
+ "dependencies": {
+ "p-locate": "^5.0.0"
+ },
+ "engines": {
+ "node": ">=10"
+ },
+ "funding": {
+ "url": "https://github.com/sponsors/sindresorhus"
+ }
+ },
+ "node_modules/eslint/node_modules/p-limit": {
+ "version": "3.1.0",
+ "resolved": "https://registry.npmjs.org/p-limit/-/p-limit-3.1.0.tgz",
+ "integrity": "sha512-TYOanM3wGwNGsZN2cVTYPArw454xnXj5qmWF1bEoAc4+cU/ol7GVh7odevjp1FNHduHc3KZMcFduxU5Xc6uJRQ==",
+ "dev": true,
+ "license": "MIT",
+ "dependencies": {
+ "yocto-queue": "^0.1.0"
+ },
+ "engines": {
+ "node": ">=10"
+ },
+ "funding": {
+ "url": "https://github.com/sponsors/sindresorhus"
+ }
+ },
+ "node_modules/eslint/node_modules/p-locate": {
+ "version": "5.0.0",
+ "resolved": "https://registry.npmjs.org/p-locate/-/p-locate-5.0.0.tgz",
+ "integrity": "sha512-LaNjtRWUBY++zB5nE/NwcaoMylSPk+S+ZHNB1TzdbMJMny6dynpAGt7X/tl/QYq3TIeE6nxHppbo2LGymrG5Pw==",
+ "dev": true,
+ "license": "MIT",
+ "dependencies": {
+ "p-limit": "^3.0.2"
+ },
+ "engines": {
+ "node": ">=10"
+ },
+ "funding": {
+ "url": "https://github.com/sponsors/sindresorhus"
+ }
+ },
+ "node_modules/eslint/node_modules/yocto-queue": {
+ "version": "0.1.0",
+ "resolved": "https://registry.npmjs.org/yocto-queue/-/yocto-queue-0.1.0.tgz",
+ "integrity": "sha512-rVksvsnNCdJ/ohGc6xgPwyN8eheCxsiLM8mxuE/t/mOVqJewPuO1miLpTHQiRgTKCLexL4MeAFVagts7HmNZ2Q==",
+ "dev": true,
+ "license": "MIT",
+ "engines": {
+ "node": ">=10"
+ },
+ "funding": {
+ "url": "https://github.com/sponsors/sindresorhus"
+ }
+ },
+ "node_modules/esm-env": {
+ "version": "1.1.4",
+ "resolved": "https://registry.npmjs.org/esm-env/-/esm-env-1.1.4.tgz",
+ "integrity": "sha512-oO82nKPHKkzIj/hbtuDYy/JHqBHFlMIW36SDiPCVsj87ntDLcWN+sJ1erdVryd4NxODacFTsdrIE3b7IamqbOg==",
+ "license": "MIT",
+ "peer": true
+ },
+ "node_modules/espree": {
+ "version": "10.3.0",
+ "resolved": "https://registry.npmjs.org/espree/-/espree-10.3.0.tgz",
+ "integrity": "sha512-0QYC8b24HWY8zjRnDTL6RiHfDbAWn63qb4LMj1Z4b076A4une81+z03Kg7l7mn/48PUTqoLptSXez8oknU8Clg==",
+ "dev": true,
+ "license": "BSD-2-Clause",
+ "dependencies": {
+ "acorn": "^8.14.0",
+ "acorn-jsx": "^5.3.2",
+ "eslint-visitor-keys": "^4.2.0"
+ },
+ "engines": {
+ "node": "^18.18.0 || ^20.9.0 || >=21.1.0"
+ },
+ "funding": {
+ "url": "https://opencollective.com/eslint"
+ }
+ },
+ "node_modules/espree/node_modules/eslint-visitor-keys": {
+ "version": "4.2.0",
+ "resolved": "https://registry.npmjs.org/eslint-visitor-keys/-/eslint-visitor-keys-4.2.0.tgz",
+ "integrity": "sha512-UyLnSehNt62FFhSwjZlHmeokpRK59rcz29j+F1/aDgbkbRTk7wIc9XzdoasMUbRNKDM0qQt/+BJ4BrpFeABemw==",
+ "dev": true,
+ "license": "Apache-2.0",
+ "engines": {
+ "node": "^18.18.0 || ^20.9.0 || >=21.1.0"
+ },
+ "funding": {
+ "url": "https://opencollective.com/eslint"
+ }
+ },
+ "node_modules/esprima": {
+ "version": "4.0.1",
+ "resolved": "https://registry.npmjs.org/esprima/-/esprima-4.0.1.tgz",
+ "integrity": "sha512-eGuFFw7Upda+g4p+QHvnW0RyTX/SVeJBDM/gCtMARO0cLuT2HcEKnTPvhjV6aGeqrCB/sbNop0Kszm0jsaWU4A==",
+ "dev": true,
+ "license": "BSD-2-Clause",
+ "peer": true,
+ "bin": {
+ "esparse": "bin/esparse.js",
+ "esvalidate": "bin/esvalidate.js"
+ },
+ "engines": {
+ "node": ">=4"
+ }
+ },
+ "node_modules/esquery": {
+ "version": "1.6.0",
+ "resolved": "https://registry.npmjs.org/esquery/-/esquery-1.6.0.tgz",
+ "integrity": "sha512-ca9pw9fomFcKPvFLXhBKUK90ZvGibiGOvRJNbjljY7s7uq/5YO4BOzcYtJqExdx99rF6aAcnRxHmcUHcz6sQsg==",
+ "dev": true,
+ "license": "BSD-3-Clause",
+ "dependencies": {
+ "estraverse": "^5.1.0"
+ },
+ "engines": {
+ "node": ">=0.10"
+ }
+ },
+ "node_modules/esrap": {
+ "version": "1.2.2",
+ "resolved": "https://registry.npmjs.org/esrap/-/esrap-1.2.2.tgz",
+ "integrity": "sha512-F2pSJklxx1BlQIQgooczXCPHmcWpn6EsP5oo73LQfonG9fIlIENQ8vMmfGXeojP9MrkzUNAfyU5vdFlR9shHAw==",
+ "license": "MIT",
+ "peer": true,
+ "dependencies": {
+ "@jridgewell/sourcemap-codec": "^1.4.15",
+ "@types/estree": "^1.0.1"
+ }
+ },
+ "node_modules/esrecurse": {
+ "version": "4.3.0",
+ "resolved": "https://registry.npmjs.org/esrecurse/-/esrecurse-4.3.0.tgz",
+ "integrity": "sha512-KmfKL3b6G+RXvP8N1vr3Tq1kL/oCFgn2NYXEtqP8/L3pKapUA4G8cFVaoF3SU323CD4XypR/ffioHmkti6/Tag==",
+ "dev": true,
+ "license": "BSD-2-Clause",
+ "dependencies": {
+ "estraverse": "^5.2.0"
+ },
+ "engines": {
+ "node": ">=4.0"
+ }
+ },
+ "node_modules/estraverse": {
+ "version": "5.3.0",
+ "resolved": "https://registry.npmjs.org/estraverse/-/estraverse-5.3.0.tgz",
+ "integrity": "sha512-MMdARuVEQziNTeJD8DgMqmhwR11BRQ/cBP+pLtYdSTnf3MIO8fFeiINEbX36ZdNlfU/7A9f3gUw49B3oQsvwBA==",
+ "dev": true,
+ "license": "BSD-2-Clause",
+ "engines": {
+ "node": ">=4.0"
+ }
+ },
+ "node_modules/estree-walker": {
+ "version": "2.0.2",
+ "resolved": "https://registry.npmjs.org/estree-walker/-/estree-walker-2.0.2.tgz",
+ "integrity": "sha512-Rfkk/Mp/DL7JVje3u18FxFujQlTNR2q6QfMSMB7AvCBx91NGj/ba3kCfza0f6dVDbw7YlRf/nDrn7pQrCCyQ/w==",
+ "license": "MIT",
+ "peer": true
+ },
+ "node_modules/esutils": {
+ "version": "2.0.3",
+ "resolved": "https://registry.npmjs.org/esutils/-/esutils-2.0.3.tgz",
+ "integrity": "sha512-kVscqXk4OCp68SZ0dkgEKVi6/8ij300KBWTJq32P/dYeWTSwK41WyTxalN1eRmA5Z9UU/LX9D7FWSmV9SAYx6g==",
+ "dev": true,
+ "license": "BSD-2-Clause",
+ "engines": {
+ "node": ">=0.10.0"
+ }
+ },
+ "node_modules/event-target-shim": {
+ "version": "5.0.1",
+ "resolved": "https://registry.npmjs.org/event-target-shim/-/event-target-shim-5.0.1.tgz",
+ "integrity": "sha512-i/2XbnSz/uxRCU6+NdVJgKWDTM427+MqYbkQzD321DuCQJUqOuJKIA0IM2+W2xtYHdKOmZ4dR6fExsd4SXL+WQ==",
+ "license": "MIT",
+ "engines": {
+ "node": ">=6"
+ }
+ },
+ "node_modules/events": {
+ "version": "3.3.0",
+ "resolved": "https://registry.npmjs.org/events/-/events-3.3.0.tgz",
+ "integrity": "sha512-mQw+2fkQbALzQ7V0MY0IqdnXNOeTtP4r0lN9z7AAawCXgqea7bDii20AYrIBrFd/Hx0M2Ocz6S111CaFkUcb0Q==",
+ "license": "MIT",
+ "engines": {
+ "node": ">=0.8.x"
+ }
+ },
+ "node_modules/eventsource-parser": {
+ "version": "1.1.2",
+ "resolved": "https://registry.npmjs.org/eventsource-parser/-/eventsource-parser-1.1.2.tgz",
+ "integrity": "sha512-v0eOBUbiaFojBu2s2NPBfYUoRR9GjcDNvCXVaqEf5vVfpIAh9f8RCo4vXTP8c63QRKCFwoLpMpTdPwwhEKVgzA==",
+ "license": "MIT",
+ "engines": {
+ "node": ">=14.18"
+ }
+ },
+ "node_modules/execa": {
+ "version": "5.1.1",
+ "resolved": "https://registry.npmjs.org/execa/-/execa-5.1.1.tgz",
+ "integrity": "sha512-8uSpZZocAZRBAPIEINJj3Lo9HyGitllczc27Eh5YYojjMFMn8yHMDMaUHE2Jqfq05D/wucwI4JGURyXt1vchyg==",
+ "dev": true,
+ "license": "MIT",
+ "peer": true,
+ "dependencies": {
+ "cross-spawn": "^7.0.3",
+ "get-stream": "^6.0.0",
+ "human-signals": "^2.1.0",
+ "is-stream": "^2.0.0",
+ "merge-stream": "^2.0.0",
+ "npm-run-path": "^4.0.1",
+ "onetime": "^5.1.2",
+ "signal-exit": "^3.0.3",
+ "strip-final-newline": "^2.0.0"
+ },
+ "engines": {
+ "node": ">=10"
+ },
+ "funding": {
+ "url": "https://github.com/sindresorhus/execa?sponsor=1"
+ }
+ },
+ "node_modules/exit": {
+ "version": "0.1.2",
+ "resolved": "https://registry.npmjs.org/exit/-/exit-0.1.2.tgz",
+ "integrity": "sha512-Zk/eNKV2zbjpKzrsQ+n1G6poVbErQxJ0LBOJXaKZ1EViLzH+hrLu9cdXI4zw9dBQJslwBEpbQ2P1oS7nDxs6jQ==",
+ "dev": true,
+ "peer": true,
+ "engines": {
+ "node": ">= 0.8.0"
+ }
+ },
+ "node_modules/expand-template": {
+ "version": "2.0.3",
+ "resolved": "https://registry.npmjs.org/expand-template/-/expand-template-2.0.3.tgz",
+ "integrity": "sha512-XYfuKMvj4O35f/pOXLObndIRvyQ+/+6AhODh+OKWj9S9498pHHn/IMszH+gt0fBCRWMNfk1ZSp5x3AifmnI2vg==",
+ "license": "(MIT OR WTFPL)",
+ "engines": {
+ "node": ">=6"
+ }
+ },
+ "node_modules/expect": {
+ "version": "29.7.0",
+ "resolved": "https://registry.npmjs.org/expect/-/expect-29.7.0.tgz",
+ "integrity": "sha512-2Zks0hf1VLFYI1kbh0I5jP3KHHyCHpkfyHBzsSXRFgl/Bg9mWYfMW8oD+PdMPlEwy5HNsR9JutYy6pMeOh61nw==",
+ "dev": true,
+ "license": "MIT",
+ "dependencies": {
+ "@jest/expect-utils": "^29.7.0",
+ "jest-get-type": "^29.6.3",
+ "jest-matcher-utils": "^29.7.0",
+ "jest-message-util": "^29.7.0",
+ "jest-util": "^29.7.0"
+ },
+ "engines": {
+ "node": "^14.15.0 || ^16.10.0 || >=18.0.0"
+ }
+ },
+ "node_modules/extend": {
+ "version": "3.0.2",
+ "resolved": "https://registry.npmjs.org/extend/-/extend-3.0.2.tgz",
+ "integrity": "sha512-fjquC59cD7CyW6urNXK0FBufkZcoiGG80wTuPujX590cB5Ttln20E2UB4S/WARVqhXffZl2LNgS+gQdPIIim/g==",
+ "license": "MIT"
+ },
+ "node_modules/fast-deep-equal": {
+ "version": "3.1.3",
+ "resolved": "https://registry.npmjs.org/fast-deep-equal/-/fast-deep-equal-3.1.3.tgz",
+ "integrity": "sha512-f3qQ9oQy9j2AhBe/H9VC91wLmKBCCU/gDOnKNAYG5hswO7BLKj09Hc5HYNz9cGI++xlpDCIgDaitVs03ATR84Q==",
+ "dev": true,
+ "license": "MIT"
+ },
+ "node_modules/fast-glob": {
+ "version": "3.3.2",
+ "resolved": "https://registry.npmjs.org/fast-glob/-/fast-glob-3.3.2.tgz",
+ "integrity": "sha512-oX2ruAFQwf/Orj8m737Y5adxDQO0LAB7/S5MnxCdTNDd4p6BsyIVsv9JQsATbTSq8KHRpLwIHbVlUNatxd+1Ow==",
+ "dev": true,
+ "license": "MIT",
+ "dependencies": {
+ "@nodelib/fs.stat": "^2.0.2",
+ "@nodelib/fs.walk": "^1.2.3",
+ "glob-parent": "^5.1.2",
+ "merge2": "^1.3.0",
+ "micromatch": "^4.0.4"
+ },
+ "engines": {
+ "node": ">=8.6.0"
+ }
+ },
+ "node_modules/fast-glob/node_modules/glob-parent": {
+ "version": "5.1.2",
+ "resolved": "https://registry.npmjs.org/glob-parent/-/glob-parent-5.1.2.tgz",
+ "integrity": "sha512-AOIgSQCepiJYwP3ARnGx+5VnTu2HBYdzbGP45eLw1vr3zB3vZLeyed1sC9hnbcOc9/SrMyM5RPQrkGz4aS9Zow==",
+ "dev": true,
+ "license": "ISC",
+ "dependencies": {
+ "is-glob": "^4.0.1"
+ },
+ "engines": {
+ "node": ">= 6"
+ }
+ },
+ "node_modules/fast-json-stable-stringify": {
+ "version": "2.1.0",
+ "resolved": "https://registry.npmjs.org/fast-json-stable-stringify/-/fast-json-stable-stringify-2.1.0.tgz",
+ "integrity": "sha512-lhd/wF+Lk98HZoTCtlVraHtfh5XYijIjalXck7saUtuanSDyLMxnHhSXEDJqHxD7msR8D0uCmqlkwjCV8xvwHw==",
+ "dev": true,
+ "license": "MIT"
+ },
+ "node_modules/fast-levenshtein": {
+ "version": "2.0.6",
+ "resolved": "https://registry.npmjs.org/fast-levenshtein/-/fast-levenshtein-2.0.6.tgz",
+ "integrity": "sha512-DCXu6Ifhqcks7TZKY3Hxp3y6qphY5SJZmrWMDrKcERSOXWQdMhU9Ig/PYrzyw/ul9jOIyh0N4M0tbC5hodg8dw==",
+ "dev": true,
+ "license": "MIT"
+ },
+ "node_modules/fastq": {
+ "version": "1.17.1",
+ "resolved": "https://registry.npmjs.org/fastq/-/fastq-1.17.1.tgz",
+ "integrity": "sha512-sRVD3lWVIXWg6By68ZN7vho9a1pQcN/WBFaAAsDDFzlJjvoGx0P8z7V1t72grFJfJhu3YPZBuu25f7Kaw2jN1w==",
+ "dev": true,
+ "license": "ISC",
+ "dependencies": {
+ "reusify": "^1.0.4"
+ }
+ },
+ "node_modules/fault": {
+ "version": "1.0.4",
+ "resolved": "https://registry.npmjs.org/fault/-/fault-1.0.4.tgz",
+ "integrity": "sha512-CJ0HCB5tL5fYTEA7ToAq5+kTwd++Borf1/bifxd9iT70QcXr4MRrO3Llf8Ifs70q+SJcGHFtnIE/Nw6giCtECA==",
+ "license": "MIT",
+ "dependencies": {
+ "format": "^0.2.0"
+ },
+ "funding": {
+ "type": "github",
+ "url": "https://github.com/sponsors/wooorm"
+ }
+ },
+ "node_modules/fb-watchman": {
+ "version": "2.0.2",
+ "resolved": "https://registry.npmjs.org/fb-watchman/-/fb-watchman-2.0.2.tgz",
+ "integrity": "sha512-p5161BqbuCaSnB8jIbzQHOlpgsPmK5rJVDfDKO91Axs5NC1uu3HRQm6wt9cd9/+GtQQIO53JdGXXoyDpTAsgYA==",
+ "dev": true,
+ "license": "Apache-2.0",
+ "peer": true,
+ "dependencies": {
+ "bser": "2.1.1"
+ }
+ },
+ "node_modules/fetch-blob": {
+ "version": "3.2.0",
+ "resolved": "https://registry.npmjs.org/fetch-blob/-/fetch-blob-3.2.0.tgz",
+ "integrity": "sha512-7yAQpD2UMJzLi1Dqv7qFYnPbaPx7ZfFK6PiIxQ4PfkGPyNyl2Ugx+a/umUonmKqjhM4DnfbMvdX6otXq83soQQ==",
+ "funding": [
+ {
+ "type": "github",
+ "url": "https://github.com/sponsors/jimmywarting"
+ },
+ {
+ "type": "paypal",
+ "url": "https://paypal.me/jimmywarting"
+ }
+ ],
+ "license": "MIT",
+ "dependencies": {
+ "node-domexception": "^1.0.0",
+ "web-streams-polyfill": "^3.0.3"
+ },
+ "engines": {
+ "node": "^12.20 || >= 14.13"
+ }
+ },
+ "node_modules/fetch-blob/node_modules/web-streams-polyfill": {
+ "version": "3.3.3",
+ "resolved": "https://registry.npmjs.org/web-streams-polyfill/-/web-streams-polyfill-3.3.3.tgz",
+ "integrity": "sha512-d2JWLCivmZYTSIoge9MsgFCZrt571BikcWGYkjC1khllbTeDlGqZ2D8vD8E/lJa8WGWbb7Plm8/XJYV7IJHZZw==",
+ "license": "MIT",
+ "engines": {
+ "node": ">= 8"
+ }
+ },
+ "node_modules/file-entry-cache": {
+ "version": "8.0.0",
+ "resolved": "https://registry.npmjs.org/file-entry-cache/-/file-entry-cache-8.0.0.tgz",
+ "integrity": "sha512-XXTUwCvisa5oacNGRP9SfNtYBNAMi+RPwBFmblZEF7N7swHYQS6/Zfk7SRwx4D5j3CH211YNRco1DEMNVfZCnQ==",
+ "dev": true,
+ "license": "MIT",
+ "dependencies": {
+ "flat-cache": "^4.0.0"
+ },
+ "engines": {
+ "node": ">=16.0.0"
+ }
+ },
+ "node_modules/filelist": {
+ "version": "1.0.4",
+ "resolved": "https://registry.npmjs.org/filelist/-/filelist-1.0.4.tgz",
+ "integrity": "sha512-w1cEuf3S+DrLCQL7ET6kz+gmlJdbq9J7yXCSjK/OZCPA+qEN1WyF4ZAf0YYJa4/shHJra2t/d/r8SV4Ji+x+8Q==",
+ "dev": true,
+ "license": "Apache-2.0",
+ "dependencies": {
+ "minimatch": "^5.0.1"
+ }
+ },
+ "node_modules/filelist/node_modules/brace-expansion": {
+ "version": "2.0.1",
+ "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-2.0.1.tgz",
+ "integrity": "sha512-XnAIvQ8eM+kC6aULx6wuQiwVsnzsi9d3WxzV3FpWTGA19F621kwdbsAcFKXgKUHZWsy+mY6iL1sHTxWEFCytDA==",
+ "dev": true,
+ "license": "MIT",
+ "dependencies": {
+ "balanced-match": "^1.0.0"
+ }
+ },
+ "node_modules/filelist/node_modules/minimatch": {
+ "version": "5.1.6",
+ "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-5.1.6.tgz",
+ "integrity": "sha512-lKwV/1brpG6mBUFHtb7NUmtABCb2WZZmm2wNiOA5hAb8VdCS4B3dtMWyvcoViccwAW/COERjXLt0zP1zXUN26g==",
+ "dev": true,
+ "license": "ISC",
+ "dependencies": {
+ "brace-expansion": "^2.0.1"
+ },
+ "engines": {
+ "node": ">=10"
+ }
+ },
+ "node_modules/fill-range": {
+ "version": "7.1.1",
+ "resolved": "https://registry.npmjs.org/fill-range/-/fill-range-7.1.1.tgz",
+ "integrity": "sha512-YsGpe3WHLK8ZYi4tWDg2Jy3ebRz2rXowDxnld4bkQB00cc/1Zw9AWnC0i9ztDJitivtQvaI9KaLyKrc+hBW0yg==",
+ "dev": true,
+ "license": "MIT",
+ "dependencies": {
+ "to-regex-range": "^5.0.1"
+ },
+ "engines": {
+ "node": ">=8"
+ }
+ },
+ "node_modules/find-up": {
+ "version": "4.1.0",
+ "resolved": "https://registry.npmjs.org/find-up/-/find-up-4.1.0.tgz",
+ "integrity": "sha512-PpOwAdQ/YlXQ2vj8a3h8IipDuYRi3wceVQQGYWxNINccq40Anw7BlsEXCMbt1Zt+OLA6Fq9suIpIWD0OsnISlw==",
+ "dev": true,
+ "license": "MIT",
+ "peer": true,
+ "dependencies": {
+ "locate-path": "^5.0.0",
+ "path-exists": "^4.0.0"
+ },
+ "engines": {
+ "node": ">=8"
+ }
+ },
+ "node_modules/flat-cache": {
+ "version": "4.0.1",
+ "resolved": "https://registry.npmjs.org/flat-cache/-/flat-cache-4.0.1.tgz",
+ "integrity": "sha512-f7ccFPK3SXFHpx15UIGyRJ/FJQctuKZ0zVuN3frBo4HnK3cay9VEW0R6yPYFHC0AgqhukPzKjq22t5DmAyqGyw==",
+ "dev": true,
+ "license": "MIT",
+ "dependencies": {
+ "flatted": "^3.2.9",
+ "keyv": "^4.5.4"
+ },
+ "engines": {
+ "node": ">=16"
+ }
+ },
+ "node_modules/flatted": {
+ "version": "3.3.3",
+ "resolved": "https://registry.npmjs.org/flatted/-/flatted-3.3.3.tgz",
+ "integrity": "sha512-GX+ysw4PBCz0PzosHDepZGANEuFCMLrnRTiEy9McGjmkCQYwRq4A/X786G/fjM/+OjsWSU1ZrY5qyARZmO/uwg==",
+ "dev": true,
+ "license": "ISC"
+ },
+ "node_modules/follow-redirects": {
+ "version": "1.15.9",
+ "resolved": "https://registry.npmjs.org/follow-redirects/-/follow-redirects-1.15.9.tgz",
+ "integrity": "sha512-gew4GsXizNgdoRyqmyfMHyAmXsZDk6mHkSxZFCzW9gwlbtOW44CDtYavM+y+72qD/Vq2l550kMF52DT8fOLJqQ==",
+ "funding": [
+ {
+ "type": "individual",
+ "url": "https://github.com/sponsors/RubenVerborgh"
+ }
+ ],
+ "license": "MIT",
+ "engines": {
+ "node": ">=4.0"
+ },
+ "peerDependenciesMeta": {
+ "debug": {
+ "optional": true
+ }
+ }
+ },
+ "node_modules/for-each": {
+ "version": "0.3.5",
+ "resolved": "https://registry.npmjs.org/for-each/-/for-each-0.3.5.tgz",
+ "integrity": "sha512-dKx12eRCVIzqCxFGplyFKJMPvLEWgmNtUrpTiJIR5u97zEhRG8ySrtboPHZXx7daLxQVrl643cTzbab2tkQjxg==",
+ "dev": true,
+ "license": "MIT",
+ "dependencies": {
+ "is-callable": "^1.2.7"
+ },
+ "engines": {
+ "node": ">= 0.4"
+ },
+ "funding": {
+ "url": "https://github.com/sponsors/ljharb"
+ }
+ },
+ "node_modules/foreground-child": {
+ "version": "3.3.0",
+ "resolved": "https://registry.npmjs.org/foreground-child/-/foreground-child-3.3.0.tgz",
+ "integrity": "sha512-Ld2g8rrAyMYFXBhEqMz8ZAHBi4J4uS1i/CxGMDnjyFWddMXLVcDp051DZfu+t7+ab7Wv6SMqpWmyFIj5UbfFvg==",
+ "dev": true,
+ "license": "ISC",
+ "dependencies": {
+ "cross-spawn": "^7.0.0",
+ "signal-exit": "^4.0.1"
+ },
+ "engines": {
+ "node": ">=14"
+ },
+ "funding": {
+ "url": "https://github.com/sponsors/isaacs"
+ }
+ },
+ "node_modules/foreground-child/node_modules/signal-exit": {
+ "version": "4.1.0",
+ "resolved": "https://registry.npmjs.org/signal-exit/-/signal-exit-4.1.0.tgz",
+ "integrity": "sha512-bzyZ1e88w9O1iNJbKnOlvYTrWPDl46O1bG0D3XInv+9tkPrxrN8jUUTiFlDkkmKWgn1M6CfIA13SuGqOa9Korw==",
+ "dev": true,
+ "license": "ISC",
+ "engines": {
+ "node": ">=14"
+ },
+ "funding": {
+ "url": "https://github.com/sponsors/isaacs"
+ }
+ },
+ "node_modules/form-data": {
+ "version": "4.0.1",
+ "resolved": "https://registry.npmjs.org/form-data/-/form-data-4.0.1.tgz",
+ "integrity": "sha512-tzN8e4TX8+kkxGPK8D5u0FNmjPUjw3lwC9lSLxxoB/+GtsJG91CO8bSWy73APlgAZzZbXEYZJuxjkHH2w+Ezhw==",
+ "license": "MIT",
+ "dependencies": {
+ "asynckit": "^0.4.0",
+ "combined-stream": "^1.0.8",
+ "mime-types": "^2.1.12"
+ },
+ "engines": {
+ "node": ">= 6"
+ }
+ },
+ "node_modules/form-data-encoder": {
+ "version": "1.7.2",
+ "resolved": "https://registry.npmjs.org/form-data-encoder/-/form-data-encoder-1.7.2.tgz",
+ "integrity": "sha512-qfqtYan3rxrnCk1VYaA4H+Ms9xdpPqvLZa6xmMgFvhO32x7/3J/ExcTd6qpxM0vH2GdMI+poehyBZvqfMTto8A==",
+ "license": "MIT"
+ },
+ "node_modules/format": {
+ "version": "0.2.2",
+ "resolved": "https://registry.npmjs.org/format/-/format-0.2.2.tgz",
+ "integrity": "sha512-wzsgA6WOq+09wrU1tsJ09udeR/YZRaeArL9e1wPbFg3GG2yDnC2ldKpxs4xunpFF9DgqCqOIra3bc1HWrJ37Ww==",
+ "engines": {
+ "node": ">=0.4.x"
+ }
+ },
+ "node_modules/formdata-node": {
+ "version": "4.4.1",
+ "resolved": "https://registry.npmjs.org/formdata-node/-/formdata-node-4.4.1.tgz",
+ "integrity": "sha512-0iirZp3uVDjVGt9p49aTaqjk84TrglENEDuqfdlZQ1roC9CWlPk6Avf8EEnZNcAqPonwkG35x4n3ww/1THYAeQ==",
+ "license": "MIT",
+ "dependencies": {
+ "node-domexception": "1.0.0",
+ "web-streams-polyfill": "4.0.0-beta.3"
+ },
+ "engines": {
+ "node": ">= 12.20"
+ }
+ },
+ "node_modules/formdata-polyfill": {
+ "version": "4.0.10",
+ "resolved": "https://registry.npmjs.org/formdata-polyfill/-/formdata-polyfill-4.0.10.tgz",
+ "integrity": "sha512-buewHzMvYL29jdeQTVILecSaZKnt/RJWjoZCF5OW60Z67/GmSLBkOFM7qh1PI3zFNtJbaZL5eQu1vLfazOwj4g==",
+ "license": "MIT",
+ "dependencies": {
+ "fetch-blob": "^3.1.2"
+ },
+ "engines": {
+ "node": ">=12.20.0"
+ }
+ },
+ "node_modules/fraction.js": {
+ "version": "4.3.7",
+ "resolved": "https://registry.npmjs.org/fraction.js/-/fraction.js-4.3.7.tgz",
+ "integrity": "sha512-ZsDfxO51wGAXREY55a7la9LScWpwv9RxIrYABrlvOFBlH/ShPnrtsXeuUIfXKKOVicNxQ+o8JTbJvjS4M89yew==",
+ "dev": true,
+ "license": "MIT",
+ "engines": {
+ "node": "*"
+ },
+ "funding": {
+ "type": "patreon",
+ "url": "https://github.com/sponsors/rawify"
+ }
+ },
+ "node_modules/framer-motion": {
+ "version": "11.18.2",
+ "resolved": "https://registry.npmjs.org/framer-motion/-/framer-motion-11.18.2.tgz",
+ "integrity": "sha512-5F5Och7wrvtLVElIpclDT0CBzMVg3dL22B64aZwHtsIY8RB4mXICLrkajK4G9R+ieSAGcgrLeae2SeUTg2pr6w==",
+ "license": "MIT",
+ "dependencies": {
+ "motion-dom": "^11.18.1",
+ "motion-utils": "^11.18.1",
+ "tslib": "^2.4.0"
+ },
+ "peerDependencies": {
+ "@emotion/is-prop-valid": "*",
+ "react": "^18.0.0 || ^19.0.0",
+ "react-dom": "^18.0.0 || ^19.0.0"
+ },
+ "peerDependenciesMeta": {
+ "@emotion/is-prop-valid": {
+ "optional": true
+ },
+ "react": {
+ "optional": true
+ },
+ "react-dom": {
+ "optional": true
+ }
+ }
+ },
+ "node_modules/fs-constants": {
+ "version": "1.0.0",
+ "resolved": "https://registry.npmjs.org/fs-constants/-/fs-constants-1.0.0.tgz",
+ "integrity": "sha512-y6OAwoSIf7FyjMIv94u+b5rdheZEjzR63GTyZJm5qh4Bi+2YgwLCcI/fPFZkL5PSixOt6ZNKm+w+Hfp/Bciwow==",
+ "license": "MIT"
+ },
+ "node_modules/fs.realpath": {
+ "version": "1.0.0",
+ "resolved": "https://registry.npmjs.org/fs.realpath/-/fs.realpath-1.0.0.tgz",
+ "integrity": "sha512-OO0pH2lK6a0hZnAdau5ItzHPI6pUlvI7jMVnxUQRtw4owF2wk8lOSabtGDCTP4Ggrg2MbGnWO9X8K1t4+fGMDw==",
+ "dev": true,
+ "license": "ISC",
+ "peer": true
+ },
+ "node_modules/fsevents": {
+ "version": "2.3.3",
+ "resolved": "https://registry.npmjs.org/fsevents/-/fsevents-2.3.3.tgz",
+ "integrity": "sha512-5xoDfX+fL7faATnagmWPpbFtwh/R77WmMMqqHGS65C3vvB0YHrgF+B1YmZ3441tMj5n63k0212XNoJwzlhffQw==",
+ "dev": true,
+ "hasInstallScript": true,
+ "license": "MIT",
+ "optional": true,
+ "os": [
+ "darwin"
+ ],
+ "engines": {
+ "node": "^8.16.0 || ^10.6.0 || >=11.0.0"
+ }
+ },
+ "node_modules/function-bind": {
+ "version": "1.1.2",
+ "resolved": "https://registry.npmjs.org/function-bind/-/function-bind-1.1.2.tgz",
+ "integrity": "sha512-7XHNxH7qX9xG5mIwxkhumTox/MIRNcOgDrxWsMt2pAr23WHp6MrRlN7FBSFpCpr+oVO0F744iUgR82nJMfG2SA==",
+ "license": "MIT",
+ "funding": {
+ "url": "https://github.com/sponsors/ljharb"
+ }
+ },
+ "node_modules/function.prototype.name": {
+ "version": "1.1.8",
+ "resolved": "https://registry.npmjs.org/function.prototype.name/-/function.prototype.name-1.1.8.tgz",
+ "integrity": "sha512-e5iwyodOHhbMr/yNrc7fDYG4qlbIvI5gajyzPnb5TCwyhjApznQh1BMFou9b30SevY43gCJKXycoCBjMbsuW0Q==",
+ "dev": true,
+ "license": "MIT",
+ "dependencies": {
+ "call-bind": "^1.0.8",
+ "call-bound": "^1.0.3",
+ "define-properties": "^1.2.1",
+ "functions-have-names": "^1.2.3",
+ "hasown": "^2.0.2",
+ "is-callable": "^1.2.7"
+ },
+ "engines": {
+ "node": ">= 0.4"
+ },
+ "funding": {
+ "url": "https://github.com/sponsors/ljharb"
+ }
+ },
+ "node_modules/functions-have-names": {
+ "version": "1.2.3",
+ "resolved": "https://registry.npmjs.org/functions-have-names/-/functions-have-names-1.2.3.tgz",
+ "integrity": "sha512-xckBUXyTIqT97tq2x2AMb+g163b5JFysYk0x4qxNFwbfQkmNZoiRHb6sPzI9/QV33WeuvVYBUIiD4NzNIyqaRQ==",
+ "dev": true,
+ "license": "MIT",
+ "funding": {
+ "url": "https://github.com/sponsors/ljharb"
+ }
+ },
+ "node_modules/gaxios": {
+ "version": "6.7.1",
+ "resolved": "https://registry.npmjs.org/gaxios/-/gaxios-6.7.1.tgz",
+ "integrity": "sha512-LDODD4TMYx7XXdpwxAVRAIAuB0bzv0s+ywFonY46k126qzQHT9ygyoa9tncmOiQmmDrik65UYsEkv3lbfqQ3yQ==",
+ "license": "Apache-2.0",
+ "dependencies": {
+ "extend": "^3.0.2",
+ "https-proxy-agent": "^7.0.1",
+ "is-stream": "^2.0.0",
+ "node-fetch": "^2.6.9",
+ "uuid": "^9.0.1"
+ },
+ "engines": {
+ "node": ">=14"
+ }
+ },
+ "node_modules/gaxios/node_modules/node-fetch": {
+ "version": "2.7.0",
+ "resolved": "https://registry.npmjs.org/node-fetch/-/node-fetch-2.7.0.tgz",
+ "integrity": "sha512-c4FRfUm/dbcWZ7U+1Wq0AwCyFL+3nt2bEw05wfxSz+DWpWsitgmSgYmy2dQdWyKC1694ELPqMs/YzUSNozLt8A==",
+ "license": "MIT",
+ "dependencies": {
+ "whatwg-url": "^5.0.0"
+ },
+ "engines": {
+ "node": "4.x || >=6.0.0"
+ },
+ "peerDependencies": {
+ "encoding": "^0.1.0"
+ },
+ "peerDependenciesMeta": {
+ "encoding": {
+ "optional": true
+ }
+ }
+ },
+ "node_modules/gaxios/node_modules/uuid": {
+ "version": "9.0.1",
+ "resolved": "https://registry.npmjs.org/uuid/-/uuid-9.0.1.tgz",
+ "integrity": "sha512-b+1eJOlsR9K8HJpow9Ok3fiWOWSIcIzXodvv0rQjVoOVNpWMpxf1wZNpt4y9h10odCNrqnYp1OBzRktckBe3sA==",
+ "funding": [
+ "https://github.com/sponsors/broofa",
+ "https://github.com/sponsors/ctavan"
+ ],
+ "license": "MIT",
+ "bin": {
+ "uuid": "dist/bin/uuid"
+ }
+ },
+ "node_modules/gcp-metadata": {
+ "version": "6.1.0",
+ "resolved": "https://registry.npmjs.org/gcp-metadata/-/gcp-metadata-6.1.0.tgz",
+ "integrity": "sha512-Jh/AIwwgaxan+7ZUUmRLCjtchyDiqh4KjBJ5tW3plBZb5iL/BPcso8A5DlzeD9qlw0duCamnNdpFjxwaT0KyKg==",
+ "license": "Apache-2.0",
+ "dependencies": {
+ "gaxios": "^6.0.0",
+ "json-bigint": "^1.0.0"
+ },
+ "engines": {
+ "node": ">=14"
+ }
+ },
+ "node_modules/geist": {
+ "version": "1.3.1",
+ "resolved": "https://registry.npmjs.org/geist/-/geist-1.3.1.tgz",
+ "integrity": "sha512-Q4gC1pBVPN+D579pBaz0TRRnGA4p9UK6elDY/xizXdFk/g4EKR5g0I+4p/Kj6gM0SajDBZ/0FvDV9ey9ud7BWw==",
+ "license": "SIL OPEN FONT LICENSE",
+ "peerDependencies": {
+ "next": ">=13.2.0"
+ }
+ },
+ "node_modules/gensync": {
+ "version": "1.0.0-beta.2",
+ "resolved": "https://registry.npmjs.org/gensync/-/gensync-1.0.0-beta.2.tgz",
+ "integrity": "sha512-3hN7NaskYvMDLQY55gnW3NQ+mesEAepTqlg+VEbj7zzqEMBVNhzcGYYeqFo/TlYz6eQiFcp1HcsCZO+nGgS8zg==",
+ "dev": true,
+ "license": "MIT",
+ "peer": true,
+ "engines": {
+ "node": ">=6.9.0"
+ }
+ },
+ "node_modules/geolib": {
+ "version": "3.3.4",
+ "resolved": "https://registry.npmjs.org/geolib/-/geolib-3.3.4.tgz",
+ "integrity": "sha512-EicrlLLL3S42gE9/wde+11uiaYAaeSVDwCUIv2uMIoRBfNJCn8EsSI+6nS3r4TCKDO6+RQNM9ayLq2at+oZQWQ==",
+ "license": "MIT"
+ },
+ "node_modules/get-caller-file": {
+ "version": "2.0.5",
+ "resolved": "https://registry.npmjs.org/get-caller-file/-/get-caller-file-2.0.5.tgz",
+ "integrity": "sha512-DyFP3BM/3YHTQOCUL/w0OZHR0lpKeGrxotcHWcqNEdnltqFwXVfhEBQ94eIo34AfQpo0rGki4cyIiftY06h2Fg==",
+ "dev": true,
+ "license": "ISC",
+ "peer": true,
+ "engines": {
+ "node": "6.* || 8.* || >= 10.*"
+ }
+ },
+ "node_modules/get-east-asian-width": {
+ "version": "1.3.0",
+ "resolved": "https://registry.npmjs.org/get-east-asian-width/-/get-east-asian-width-1.3.0.tgz",
+ "integrity": "sha512-vpeMIQKxczTD/0s2CdEWHcb0eeJe6TFjxb+J5xgX7hScxqrGuyjmv4c1D4A/gelKfyox0gJJwIHF+fLjeaM8kQ==",
+ "license": "MIT",
+ "engines": {
+ "node": ">=18"
+ },
+ "funding": {
+ "url": "https://github.com/sponsors/sindresorhus"
+ }
+ },
+ "node_modules/get-intrinsic": {
+ "version": "1.3.0",
+ "resolved": "https://registry.npmjs.org/get-intrinsic/-/get-intrinsic-1.3.0.tgz",
+ "integrity": "sha512-9fSjSaos/fRIVIp+xSJlE6lfwhES7LNtKaCBIamHsjr2na1BiABJPo0mOjjz8GJDURarmCPGqaiVg5mfjb98CQ==",
+ "license": "MIT",
+ "dependencies": {
+ "call-bind-apply-helpers": "^1.0.2",
+ "es-define-property": "^1.0.1",
+ "es-errors": "^1.3.0",
+ "es-object-atoms": "^1.1.1",
+ "function-bind": "^1.1.2",
+ "get-proto": "^1.0.1",
+ "gopd": "^1.2.0",
+ "has-symbols": "^1.1.0",
+ "hasown": "^2.0.2",
+ "math-intrinsics": "^1.1.0"
+ },
+ "engines": {
+ "node": ">= 0.4"
+ },
+ "funding": {
+ "url": "https://github.com/sponsors/ljharb"
+ }
+ },
+ "node_modules/get-nonce": {
+ "version": "1.0.1",
+ "resolved": "https://registry.npmjs.org/get-nonce/-/get-nonce-1.0.1.tgz",
+ "integrity": "sha512-FJhYRoDaiatfEkUK8HKlicmu/3SGFD51q3itKDGoSTysQJBnfOcxU5GxnhE1E6soB76MbT0MBtnKJuXyAx+96Q==",
+ "license": "MIT",
+ "engines": {
+ "node": ">=6"
+ }
+ },
+ "node_modules/get-package-type": {
+ "version": "0.1.0",
+ "resolved": "https://registry.npmjs.org/get-package-type/-/get-package-type-0.1.0.tgz",
+ "integrity": "sha512-pjzuKtY64GYfWizNAJ0fr9VqttZkNiK2iS430LtIHzjBEr6bX8Am2zm4sW4Ro5wjWW5cAlRL1qAMTcXbjNAO2Q==",
+ "dev": true,
+ "license": "MIT",
+ "peer": true,
+ "engines": {
+ "node": ">=8.0.0"
+ }
+ },
+ "node_modules/get-proto": {
+ "version": "1.0.1",
+ "resolved": "https://registry.npmjs.org/get-proto/-/get-proto-1.0.1.tgz",
+ "integrity": "sha512-sTSfBjoXBp89JvIKIefqw7U2CCebsc74kiY6awiGogKtoSGbgjYE/G/+l9sF3MWFPNc9IcoOC4ODfKHfxFmp0g==",
+ "license": "MIT",
+ "dependencies": {
+ "dunder-proto": "^1.0.1",
+ "es-object-atoms": "^1.0.0"
+ },
+ "engines": {
+ "node": ">= 0.4"
+ }
+ },
+ "node_modules/get-stream": {
+ "version": "6.0.1",
+ "resolved": "https://registry.npmjs.org/get-stream/-/get-stream-6.0.1.tgz",
+ "integrity": "sha512-ts6Wi+2j3jQjqi70w5AlN8DFnkSwC+MqmxEzdEALB2qXZYV3X/b1CTfgPLGJNMeAWxdPfU8FO1ms3NUfaHCPYg==",
+ "dev": true,
+ "license": "MIT",
+ "peer": true,
+ "engines": {
+ "node": ">=10"
+ },
+ "funding": {
+ "url": "https://github.com/sponsors/sindresorhus"
+ }
+ },
+ "node_modules/get-symbol-description": {
+ "version": "1.1.0",
+ "resolved": "https://registry.npmjs.org/get-symbol-description/-/get-symbol-description-1.1.0.tgz",
+ "integrity": "sha512-w9UMqWwJxHNOvoNzSJ2oPF5wvYcvP7jUvYzhp67yEhTi17ZDBBC1z9pTdGuzjD+EFIqLSYRweZjqfiPzQ06Ebg==",
+ "dev": true,
+ "license": "MIT",
+ "dependencies": {
+ "call-bound": "^1.0.3",
+ "es-errors": "^1.3.0",
+ "get-intrinsic": "^1.2.6"
+ },
+ "engines": {
+ "node": ">= 0.4"
+ },
+ "funding": {
+ "url": "https://github.com/sponsors/ljharb"
+ }
+ },
+ "node_modules/get-tsconfig": {
+ "version": "4.10.0",
+ "resolved": "https://registry.npmjs.org/get-tsconfig/-/get-tsconfig-4.10.0.tgz",
+ "integrity": "sha512-kGzZ3LWWQcGIAmg6iWvXn0ei6WDtV26wzHRMwDSzmAbcXrTEXxHy6IehI6/4eT6VRKyMP1eF1VqwrVUmE/LR7A==",
+ "dev": true,
+ "license": "MIT",
+ "dependencies": {
+ "resolve-pkg-maps": "^1.0.0"
+ },
+ "funding": {
+ "url": "https://github.com/privatenumber/get-tsconfig?sponsor=1"
+ }
+ },
+ "node_modules/github-from-package": {
+ "version": "0.0.0",
+ "resolved": "https://registry.npmjs.org/github-from-package/-/github-from-package-0.0.0.tgz",
+ "integrity": "sha512-SyHy3T1v2NUXn29OsWdxmK6RwHD+vkj3v8en8AOBZ1wBQ/hCAQ5bAQTD02kW4W9tUp/3Qh6J8r9EvntiyCmOOw==",
+ "license": "MIT"
+ },
+ "node_modules/glob": {
+ "version": "7.2.3",
+ "resolved": "https://registry.npmjs.org/glob/-/glob-7.2.3.tgz",
+ "integrity": "sha512-nFR0zLpU2YCaRxwoCJvL6UvCH2JFyFVIvwTLsIf21AuHlMskA1hhTdk+LlYJtOlYt9v6dvszD2BGRqBL+iQK9Q==",
+ "deprecated": "Glob versions prior to v9 are no longer supported",
+ "dev": true,
+ "license": "ISC",
+ "peer": true,
+ "dependencies": {
+ "fs.realpath": "^1.0.0",
+ "inflight": "^1.0.4",
+ "inherits": "2",
+ "minimatch": "^3.1.1",
+ "once": "^1.3.0",
+ "path-is-absolute": "^1.0.0"
+ },
+ "engines": {
+ "node": "*"
+ },
+ "funding": {
+ "url": "https://github.com/sponsors/isaacs"
+ }
+ },
+ "node_modules/glob-parent": {
+ "version": "6.0.2",
+ "resolved": "https://registry.npmjs.org/glob-parent/-/glob-parent-6.0.2.tgz",
+ "integrity": "sha512-XxwI8EOhVQgWp6iDL+3b0r86f4d6AX6zSU55HfB4ydCEuXLXc5FcYeOu+nnGftS4TEju/11rt4KJPTMgbfmv4A==",
+ "dev": true,
+ "license": "ISC",
+ "dependencies": {
+ "is-glob": "^4.0.3"
+ },
+ "engines": {
+ "node": ">=10.13.0"
+ }
+ },
+ "node_modules/globals": {
+ "version": "16.0.0",
+ "resolved": "https://registry.npmjs.org/globals/-/globals-16.0.0.tgz",
+ "integrity": "sha512-iInW14XItCXET01CQFqudPOWP2jYMl7T+QRQT+UNcR/iQncN/F0UNpgd76iFkBPgNQb4+X3LV9tLJYzwh+Gl3A==",
+ "dev": true,
+ "license": "MIT",
+ "engines": {
+ "node": ">=18"
+ },
+ "funding": {
+ "url": "https://github.com/sponsors/sindresorhus"
+ }
+ },
+ "node_modules/globalthis": {
+ "version": "1.0.4",
+ "resolved": "https://registry.npmjs.org/globalthis/-/globalthis-1.0.4.tgz",
+ "integrity": "sha512-DpLKbNU4WylpxJykQujfCcwYWiV/Jhm50Goo0wrVILAv5jOr9d+H+UR3PhSCD2rCCEIg0uc+G+muBTwD54JhDQ==",
+ "dev": true,
+ "license": "MIT",
+ "dependencies": {
+ "define-properties": "^1.2.1",
+ "gopd": "^1.0.1"
+ },
+ "engines": {
+ "node": ">= 0.4"
+ },
+ "funding": {
+ "url": "https://github.com/sponsors/ljharb"
+ }
+ },
+ "node_modules/google-auth-library": {
+ "version": "9.15.1",
+ "resolved": "https://registry.npmjs.org/google-auth-library/-/google-auth-library-9.15.1.tgz",
+ "integrity": "sha512-Jb6Z0+nvECVz+2lzSMt9u98UsoakXxA2HGHMCxh+so3n90XgYWkq5dur19JAJV7ONiJY22yBTyJB1TSkvPq9Ng==",
+ "license": "Apache-2.0",
+ "dependencies": {
+ "base64-js": "^1.3.0",
+ "ecdsa-sig-formatter": "^1.0.11",
+ "gaxios": "^6.1.1",
+ "gcp-metadata": "^6.1.0",
+ "gtoken": "^7.0.0",
+ "jws": "^4.0.0"
+ },
+ "engines": {
+ "node": ">=14"
+ }
+ },
+ "node_modules/googleapis": {
+ "version": "144.0.0",
+ "resolved": "https://registry.npmjs.org/googleapis/-/googleapis-144.0.0.tgz",
+ "integrity": "sha512-ELcWOXtJxjPX4vsKMh+7V+jZvgPwYMlEhQFiu2sa9Qmt5veX8nwXPksOWGGN6Zk4xCiLygUyaz7xGtcMO+Onxw==",
+ "license": "Apache-2.0",
+ "dependencies": {
+ "google-auth-library": "^9.0.0",
+ "googleapis-common": "^7.0.0"
+ },
+ "engines": {
+ "node": ">=14.0.0"
+ }
+ },
+ "node_modules/googleapis-common": {
+ "version": "7.2.0",
+ "resolved": "https://registry.npmjs.org/googleapis-common/-/googleapis-common-7.2.0.tgz",
+ "integrity": "sha512-/fhDZEJZvOV3X5jmD+fKxMqma5q2Q9nZNSF3kn1F18tpxmA86BcTxAGBQdM0N89Z3bEaIs+HVznSmFJEAmMTjA==",
+ "license": "Apache-2.0",
+ "dependencies": {
+ "extend": "^3.0.2",
+ "gaxios": "^6.0.3",
+ "google-auth-library": "^9.7.0",
+ "qs": "^6.7.0",
+ "url-template": "^2.0.8",
+ "uuid": "^9.0.0"
+ },
+ "engines": {
+ "node": ">=14.0.0"
+ }
+ },
+ "node_modules/googleapis-common/node_modules/uuid": {
+ "version": "9.0.1",
+ "resolved": "https://registry.npmjs.org/uuid/-/uuid-9.0.1.tgz",
+ "integrity": "sha512-b+1eJOlsR9K8HJpow9Ok3fiWOWSIcIzXodvv0rQjVoOVNpWMpxf1wZNpt4y9h10odCNrqnYp1OBzRktckBe3sA==",
+ "funding": [
+ "https://github.com/sponsors/broofa",
+ "https://github.com/sponsors/ctavan"
+ ],
+ "license": "MIT",
+ "bin": {
+ "uuid": "dist/bin/uuid"
+ }
+ },
+ "node_modules/gopd": {
+ "version": "1.2.0",
+ "resolved": "https://registry.npmjs.org/gopd/-/gopd-1.2.0.tgz",
+ "integrity": "sha512-ZUKRh6/kUFoAiTAtTYPZJ3hw9wNxx+BIBOijnlG9PnrJsCcSjs1wyyD6vJpaYtgnzDrKYRSqf3OO6Rfa93xsRg==",
+ "license": "MIT",
+ "engines": {
+ "node": ">= 0.4"
+ },
+ "funding": {
+ "url": "https://github.com/sponsors/ljharb"
+ }
+ },
+ "node_modules/gpt-tokenizer": {
+ "version": "2.9.0",
+ "resolved": "https://registry.npmjs.org/gpt-tokenizer/-/gpt-tokenizer-2.9.0.tgz",
+ "integrity": "sha512-YSpexBL/k4bfliAzMrRqn3M6+it02LutVyhVpDeMKrC/O9+pCe/5s8U2hYKa2vFLD5/vHhsKc8sOn/qGqII8Kg==",
+ "license": "MIT"
+ },
+ "node_modules/graceful-fs": {
+ "version": "4.2.11",
+ "resolved": "https://registry.npmjs.org/graceful-fs/-/graceful-fs-4.2.11.tgz",
+ "integrity": "sha512-RbJ5/jmFcNNCcDV5o9eTnBLJ/HszWV0P73bc+Ff4nS/rJj+YaS6IGyiOL0VoBYX+l1Wrl3k63h/KrH+nhJ0XvQ==",
+ "license": "ISC"
+ },
+ "node_modules/graphemer": {
+ "version": "1.4.0",
+ "resolved": "https://registry.npmjs.org/graphemer/-/graphemer-1.4.0.tgz",
+ "integrity": "sha512-EtKwoO6kxCL9WO5xipiHTZlSzBm7WLT627TqC/uVRd0HKmq8NXyebnNYxDoBi7wt8eTWrUrKXCOVaFq9x1kgag==",
+ "dev": true,
+ "license": "MIT"
+ },
+ "node_modules/gtoken": {
+ "version": "7.1.0",
+ "resolved": "https://registry.npmjs.org/gtoken/-/gtoken-7.1.0.tgz",
+ "integrity": "sha512-pCcEwRi+TKpMlxAQObHDQ56KawURgyAf6jtIY046fJ5tIv3zDe/LEIubckAO8fj6JnAxLdmWkUfNyulQ2iKdEw==",
+ "license": "MIT",
+ "dependencies": {
+ "gaxios": "^6.0.0",
+ "jws": "^4.0.0"
+ },
+ "engines": {
+ "node": ">=14.0.0"
+ }
+ },
+ "node_modules/handlebars": {
+ "version": "4.7.8",
+ "resolved": "https://registry.npmjs.org/handlebars/-/handlebars-4.7.8.tgz",
+ "integrity": "sha512-vafaFqs8MZkRrSX7sFVUdo3ap/eNiLnb4IakshzvP56X5Nr1iGKAIqdX6tMlm6HcNRIkr6AxO5jFEoJzzpT8aQ==",
+ "license": "MIT",
+ "dependencies": {
+ "minimist": "^1.2.5",
+ "neo-async": "^2.6.2",
+ "source-map": "^0.6.1",
+ "wordwrap": "^1.0.0"
+ },
+ "bin": {
+ "handlebars": "bin/handlebars"
+ },
+ "engines": {
+ "node": ">=0.4.7"
+ },
+ "optionalDependencies": {
+ "uglify-js": "^3.1.4"
+ }
+ },
+ "node_modules/has-bigints": {
+ "version": "1.1.0",
+ "resolved": "https://registry.npmjs.org/has-bigints/-/has-bigints-1.1.0.tgz",
+ "integrity": "sha512-R3pbpkcIqv2Pm3dUwgjclDRVmWpTJW2DcMzcIhEXEx1oh/CEMObMm3KLmRJOdvhM7o4uQBnwr8pzRK2sJWIqfg==",
+ "dev": true,
+ "license": "MIT",
+ "engines": {
+ "node": ">= 0.4"
+ },
+ "funding": {
+ "url": "https://github.com/sponsors/ljharb"
+ }
+ },
+ "node_modules/has-flag": {
+ "version": "4.0.0",
+ "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz",
+ "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==",
+ "dev": true,
+ "license": "MIT",
+ "engines": {
+ "node": ">=8"
+ }
+ },
+ "node_modules/has-property-descriptors": {
+ "version": "1.0.2",
+ "resolved": "https://registry.npmjs.org/has-property-descriptors/-/has-property-descriptors-1.0.2.tgz",
+ "integrity": "sha512-55JNKuIW+vq4Ke1BjOTjM2YctQIvCT7GFzHwmfZPGo5wnrgkid0YQtnAleFSqumZm4az3n2BS+erby5ipJdgrg==",
+ "dev": true,
+ "license": "MIT",
+ "dependencies": {
+ "es-define-property": "^1.0.0"
+ },
+ "funding": {
+ "url": "https://github.com/sponsors/ljharb"
+ }
+ },
+ "node_modules/has-proto": {
+ "version": "1.2.0",
+ "resolved": "https://registry.npmjs.org/has-proto/-/has-proto-1.2.0.tgz",
+ "integrity": "sha512-KIL7eQPfHQRC8+XluaIw7BHUwwqL19bQn4hzNgdr+1wXoU0KKj6rufu47lhY7KbJR2C6T6+PfyN0Ea7wkSS+qQ==",
+ "dev": true,
+ "license": "MIT",
+ "dependencies": {
+ "dunder-proto": "^1.0.0"
+ },
+ "engines": {
+ "node": ">= 0.4"
+ },
+ "funding": {
+ "url": "https://github.com/sponsors/ljharb"
+ }
+ },
+ "node_modules/has-symbols": {
+ "version": "1.1.0",
+ "resolved": "https://registry.npmjs.org/has-symbols/-/has-symbols-1.1.0.tgz",
+ "integrity": "sha512-1cDNdwJ2Jaohmb3sg4OmKaMBwuC48sYni5HUw2DvsC8LjGTLK9h+eb1X6RyuOHe4hT0ULCW68iomhjUoKUqlPQ==",
+ "license": "MIT",
+ "engines": {
+ "node": ">= 0.4"
+ },
+ "funding": {
+ "url": "https://github.com/sponsors/ljharb"
+ }
+ },
+ "node_modules/has-tostringtag": {
+ "version": "1.0.2",
+ "resolved": "https://registry.npmjs.org/has-tostringtag/-/has-tostringtag-1.0.2.tgz",
+ "integrity": "sha512-NqADB8VjPFLM2V0VvHUewwwsw0ZWBaIdgo+ieHtK3hasLz4qeCRjYcqfB6AQrBggRKppKF8L52/VqdVsO47Dlw==",
+ "dev": true,
+ "license": "MIT",
+ "dependencies": {
+ "has-symbols": "^1.0.3"
+ },
+ "engines": {
+ "node": ">= 0.4"
+ },
+ "funding": {
+ "url": "https://github.com/sponsors/ljharb"
+ }
+ },
+ "node_modules/hasown": {
+ "version": "2.0.2",
+ "resolved": "https://registry.npmjs.org/hasown/-/hasown-2.0.2.tgz",
+ "integrity": "sha512-0hJU9SCPvmMzIBdZFqNPXWa6dqh7WdH0cII9y+CyS8rG3nL48Bclra9HmKhVVUHyPWNH5Y7xDwAB7bfgSjkUMQ==",
+ "license": "MIT",
+ "dependencies": {
+ "function-bind": "^1.1.2"
+ },
+ "engines": {
+ "node": ">= 0.4"
+ }
+ },
+ "node_modules/hast-util-parse-selector": {
+ "version": "2.2.5",
+ "resolved": "https://registry.npmjs.org/hast-util-parse-selector/-/hast-util-parse-selector-2.2.5.tgz",
+ "integrity": "sha512-7j6mrk/qqkSehsM92wQjdIgWM2/BW61u/53G6xmC8i1OmEdKLHbk419QKQUjz6LglWsfqoiHmyMRkP1BGjecNQ==",
+ "license": "MIT",
+ "funding": {
+ "type": "opencollective",
+ "url": "https://opencollective.com/unified"
+ }
+ },
+ "node_modules/hast-util-whitespace": {
+ "version": "2.0.1",
+ "resolved": "https://registry.npmjs.org/hast-util-whitespace/-/hast-util-whitespace-2.0.1.tgz",
+ "integrity": "sha512-nAxA0v8+vXSBDt3AnRUNjyRIQ0rD+ntpbAp4LnPkumc5M9yUbSMa4XDU9Q6etY4f1Wp4bNgvc1yjiZtsTTrSng==",
+ "license": "MIT",
+ "funding": {
+ "type": "opencollective",
+ "url": "https://opencollective.com/unified"
+ }
+ },
+ "node_modules/hastscript": {
+ "version": "6.0.0",
+ "resolved": "https://registry.npmjs.org/hastscript/-/hastscript-6.0.0.tgz",
+ "integrity": "sha512-nDM6bvd7lIqDUiYEiu5Sl/+6ReP0BMk/2f4U/Rooccxkj0P5nm+acM5PrGJ/t5I8qPGiqZSE6hVAwZEdZIvP4w==",
+ "license": "MIT",
+ "dependencies": {
+ "@types/hast": "^2.0.0",
+ "comma-separated-tokens": "^1.0.0",
+ "hast-util-parse-selector": "^2.0.0",
+ "property-information": "^5.0.0",
+ "space-separated-tokens": "^1.0.0"
+ },
+ "funding": {
+ "type": "opencollective",
+ "url": "https://opencollective.com/unified"
+ }
+ },
+ "node_modules/hastscript/node_modules/comma-separated-tokens": {
+ "version": "1.0.8",
+ "resolved": "https://registry.npmjs.org/comma-separated-tokens/-/comma-separated-tokens-1.0.8.tgz",
+ "integrity": "sha512-GHuDRO12Sypu2cV70d1dkA2EUmXHgntrzbpvOB+Qy+49ypNfGgFQIC2fhhXbnyrJRynDCAARsT7Ou0M6hirpfw==",
+ "license": "MIT",
+ "funding": {
+ "type": "github",
+ "url": "https://github.com/sponsors/wooorm"
+ }
+ },
+ "node_modules/hastscript/node_modules/property-information": {
+ "version": "5.6.0",
+ "resolved": "https://registry.npmjs.org/property-information/-/property-information-5.6.0.tgz",
+ "integrity": "sha512-YUHSPk+A30YPv+0Qf8i9Mbfe/C0hdPXk1s1jPVToV8pk8BQtpw10ct89Eo7OWkutrwqvT0eicAxlOg3dOAu8JA==",
+ "license": "MIT",
+ "dependencies": {
+ "xtend": "^4.0.0"
+ },
+ "funding": {
+ "type": "github",
+ "url": "https://github.com/sponsors/wooorm"
+ }
+ },
+ "node_modules/hastscript/node_modules/space-separated-tokens": {
+ "version": "1.1.5",
+ "resolved": "https://registry.npmjs.org/space-separated-tokens/-/space-separated-tokens-1.1.5.tgz",
+ "integrity": "sha512-q/JSVd1Lptzhf5bkYm4ob4iWPjx0KiRe3sRFBNrVqbJkFaBm5vbbowy1mymoPNLRa52+oadOhJ+K49wsSeSjTA==",
+ "license": "MIT",
+ "funding": {
+ "type": "github",
+ "url": "https://github.com/sponsors/wooorm"
+ }
+ },
+ "node_modules/highlight.js": {
+ "version": "10.7.3",
+ "resolved": "https://registry.npmjs.org/highlight.js/-/highlight.js-10.7.3.tgz",
+ "integrity": "sha512-tzcUFauisWKNHaRkN4Wjl/ZA07gENAjFl3J/c480dprkGTg5EQstgaNFqBfUqCq54kZRIEcreTsAgF/m2quD7A==",
+ "license": "BSD-3-Clause",
+ "engines": {
+ "node": "*"
+ }
+ },
+ "node_modules/highlightjs-vue": {
+ "version": "1.0.0",
+ "resolved": "https://registry.npmjs.org/highlightjs-vue/-/highlightjs-vue-1.0.0.tgz",
+ "integrity": "sha512-PDEfEF102G23vHmPhLyPboFCD+BkMGu+GuJe2d9/eH4FsCwvgBpnc9n0pGE+ffKdph38s6foEZiEjdgHdzp+IA==",
+ "license": "CC0-1.0"
+ },
+ "node_modules/html-escaper": {
+ "version": "3.0.3",
+ "resolved": "https://registry.npmjs.org/html-escaper/-/html-escaper-3.0.3.tgz",
+ "integrity": "sha512-RuMffC89BOWQoY0WKGpIhn5gX3iI54O6nRA0yC124NYVtzjmFWBIiFd8M0x+ZdX0P9R4lADg1mgP8C7PxGOWuQ==",
+ "license": "MIT"
+ },
+ "node_modules/html-to-text": {
+ "version": "9.0.5",
+ "resolved": "https://registry.npmjs.org/html-to-text/-/html-to-text-9.0.5.tgz",
+ "integrity": "sha512-qY60FjREgVZL03vJU6IfMV4GDjGBIoOyvuFdpBDIX9yTlDw0TjxVBQp+P8NvpdIXNJvfWBTNul7fsAQJq2FNpg==",
+ "license": "MIT",
+ "dependencies": {
+ "@selderee/plugin-htmlparser2": "^0.11.0",
+ "deepmerge": "^4.3.1",
+ "dom-serializer": "^2.0.0",
+ "htmlparser2": "^8.0.2",
+ "selderee": "^0.11.0"
+ },
+ "engines": {
+ "node": ">=14"
+ }
+ },
+ "node_modules/htmlparser2": {
+ "version": "8.0.2",
+ "resolved": "https://registry.npmjs.org/htmlparser2/-/htmlparser2-8.0.2.tgz",
+ "integrity": "sha512-GYdjWKDkbRLkZ5geuHs5NY1puJ+PXwP7+fHPRz06Eirsb9ugf6d8kkXav6ADhcODhFFPMIXyxkxSuMf3D6NCFA==",
+ "funding": [
+ "https://github.com/fb55/htmlparser2?sponsor=1",
+ {
+ "type": "github",
+ "url": "https://github.com/sponsors/fb55"
+ }
+ ],
+ "license": "MIT",
+ "dependencies": {
+ "domelementtype": "^2.3.0",
+ "domhandler": "^5.0.3",
+ "domutils": "^3.0.1",
+ "entities": "^4.4.0"
+ }
+ },
+ "node_modules/http-proxy-agent": {
+ "version": "7.0.2",
+ "resolved": "https://registry.npmjs.org/http-proxy-agent/-/http-proxy-agent-7.0.2.tgz",
+ "integrity": "sha512-T1gkAiYYDWYx3V5Bmyu7HcfcvL7mUrTWiM6yOfa3PIphViJ/gFPbvidQ+veqSOHci/PxBcDabeUNCzpOODJZig==",
+ "license": "MIT",
+ "dependencies": {
+ "agent-base": "^7.1.0",
+ "debug": "^4.3.4"
+ },
+ "engines": {
+ "node": ">= 14"
+ }
+ },
+ "node_modules/https-proxy-agent": {
+ "version": "7.0.5",
+ "resolved": "https://registry.npmjs.org/https-proxy-agent/-/https-proxy-agent-7.0.5.tgz",
+ "integrity": "sha512-1e4Wqeblerz+tMKPIq2EMGiiWW1dIjZOksyHWSUm1rmuvw/how9hBHZ38lAGj5ID4Ik6EdkOw7NmWPy6LAwalw==",
+ "license": "MIT",
+ "dependencies": {
+ "agent-base": "^7.0.2",
+ "debug": "4"
+ },
+ "engines": {
+ "node": ">= 14"
+ }
+ },
+ "node_modules/human-signals": {
+ "version": "2.1.0",
+ "resolved": "https://registry.npmjs.org/human-signals/-/human-signals-2.1.0.tgz",
+ "integrity": "sha512-B4FFZ6q/T2jhhksgkbEW3HBvWIfDW85snkQgawt07S7J5QXTk6BkNV+0yAeZrM5QpMAdYlocGoljn0sJ/WQkFw==",
+ "dev": true,
+ "license": "Apache-2.0",
+ "peer": true,
+ "engines": {
+ "node": ">=10.17.0"
+ }
+ },
+ "node_modules/humanize-ms": {
+ "version": "1.2.1",
+ "resolved": "https://registry.npmjs.org/humanize-ms/-/humanize-ms-1.2.1.tgz",
+ "integrity": "sha512-Fl70vYtsAFb/C06PTS9dZBo7ihau+Tu/DNCk/OyHhea07S+aeMWpFFkUaXRa8fI+ScZbEI8dfSxwY7gxZ9SAVQ==",
+ "license": "MIT",
+ "dependencies": {
+ "ms": "^2.0.0"
+ }
+ },
+ "node_modules/ieee754": {
+ "version": "1.2.1",
+ "resolved": "https://registry.npmjs.org/ieee754/-/ieee754-1.2.1.tgz",
+ "integrity": "sha512-dcyqhDvX1C46lXZcVqCpK+FtMRQVdIMN6/Df5js2zouUsqG7I6sFxitIC+7KYK29KdXOLHdu9zL4sFnoVQnqaA==",
+ "funding": [
+ {
+ "type": "github",
+ "url": "https://github.com/sponsors/feross"
+ },
+ {
+ "type": "patreon",
+ "url": "https://www.patreon.com/feross"
+ },
+ {
+ "type": "consulting",
+ "url": "https://feross.org/support"
+ }
+ ],
+ "license": "BSD-3-Clause"
+ },
+ "node_modules/ignore": {
+ "version": "5.3.2",
+ "resolved": "https://registry.npmjs.org/ignore/-/ignore-5.3.2.tgz",
+ "integrity": "sha512-hsBTNUqQTDwkWtcdYI2i06Y/nUBEsNEDJKjWdigLvegy8kDuJAS8uRlpkkcQpyEXL0Z/pjDy5HBmMjRCJ2gq+g==",
+ "dev": true,
+ "license": "MIT",
+ "engines": {
+ "node": ">= 4"
+ }
+ },
+ "node_modules/immediate": {
+ "version": "3.0.6",
+ "resolved": "https://registry.npmjs.org/immediate/-/immediate-3.0.6.tgz",
+ "integrity": "sha512-XXOFtyqDjNDAQxVfYxuF7g9Il/IbWmmlQg2MYKOH8ExIT1qg6xc4zyS3HaEEATgs1btfzxq15ciUiY7gjSXRGQ==",
+ "license": "MIT"
+ },
+ "node_modules/import-fresh": {
+ "version": "3.3.1",
+ "resolved": "https://registry.npmjs.org/import-fresh/-/import-fresh-3.3.1.tgz",
+ "integrity": "sha512-TR3KfrTZTYLPB6jUjfx6MF9WcWrHL9su5TObK4ZkYgBdWKPOFoSoQIdEuTuR82pmtxH2spWG9h6etwfr1pLBqQ==",
+ "dev": true,
+ "license": "MIT",
+ "dependencies": {
+ "parent-module": "^1.0.0",
+ "resolve-from": "^4.0.0"
+ },
+ "engines": {
+ "node": ">=6"
+ },
+ "funding": {
+ "url": "https://github.com/sponsors/sindresorhus"
+ }
+ },
+ "node_modules/import-fresh/node_modules/resolve-from": {
+ "version": "4.0.0",
+ "resolved": "https://registry.npmjs.org/resolve-from/-/resolve-from-4.0.0.tgz",
+ "integrity": "sha512-pb/MYmXstAkysRFx8piNI1tGFNQIFA3vkE3Gq4EuA1dF6gHp/+vgZqsCGJapvy8N3Q+4o7FwvquPJcnZ7RYy4g==",
+ "dev": true,
+ "license": "MIT",
+ "engines": {
+ "node": ">=4"
+ }
+ },
+ "node_modules/import-local": {
+ "version": "3.2.0",
+ "resolved": "https://registry.npmjs.org/import-local/-/import-local-3.2.0.tgz",
+ "integrity": "sha512-2SPlun1JUPWoM6t3F0dw0FkCF/jWY8kttcY4f599GLTSjh2OCuuhdTkJQsEcZzBqbXZGKMK2OqW1oZsjtf/gQA==",
+ "dev": true,
+ "license": "MIT",
+ "peer": true,
+ "dependencies": {
+ "pkg-dir": "^4.2.0",
+ "resolve-cwd": "^3.0.0"
+ },
+ "bin": {
+ "import-local-fixture": "fixtures/cli.js"
+ },
+ "engines": {
+ "node": ">=8"
+ },
+ "funding": {
+ "url": "https://github.com/sponsors/sindresorhus"
+ }
+ },
+ "node_modules/imurmurhash": {
+ "version": "0.1.4",
+ "resolved": "https://registry.npmjs.org/imurmurhash/-/imurmurhash-0.1.4.tgz",
+ "integrity": "sha512-JmXMZ6wuvDmLiHEml9ykzqO6lwFbof0GG4IkcGaENdCRDDmMVnny7s5HsIgHCbaq0w2MyPhDqkhTUgS2LU2PHA==",
+ "dev": true,
+ "license": "MIT",
+ "engines": {
+ "node": ">=0.8.19"
+ }
+ },
+ "node_modules/inflight": {
+ "version": "1.0.6",
+ "resolved": "https://registry.npmjs.org/inflight/-/inflight-1.0.6.tgz",
+ "integrity": "sha512-k92I/b08q4wvFscXCLvqfsHCrjrF7yiXsQuIVvVE7N82W3+aqpzuUdBbfhWcy/FZR3/4IgflMgKLOsvPDrGCJA==",
+ "deprecated": "This module is not supported, and leaks memory. Do not use it. Check out lru-cache if you want a good and tested way to coalesce async requests by a key value, which is much more comprehensive and powerful.",
+ "dev": true,
+ "license": "ISC",
+ "peer": true,
+ "dependencies": {
+ "once": "^1.3.0",
+ "wrappy": "1"
+ }
+ },
+ "node_modules/inherits": {
+ "version": "2.0.4",
+ "resolved": "https://registry.npmjs.org/inherits/-/inherits-2.0.4.tgz",
+ "integrity": "sha512-k/vGaX4/Yla3WzyMCvTQOXYeIHvqOKtnqBduzTHpzpQZzAskKMhZ2K+EnBiSM9zGSoIFeMpXKxa4dYeZIQqewQ==",
+ "license": "ISC"
+ },
+ "node_modules/ini": {
+ "version": "1.3.8",
+ "resolved": "https://registry.npmjs.org/ini/-/ini-1.3.8.tgz",
+ "integrity": "sha512-JV/yugV2uzW5iMRSiZAyDtQd+nxtUnjeLt0acNdw98kKLrvuRVyB80tsREOE7yvGVgalhZ6RNXCmEHkUKBKxew==",
+ "license": "ISC"
+ },
+ "node_modules/inline-style-parser": {
+ "version": "0.1.1",
+ "resolved": "https://registry.npmjs.org/inline-style-parser/-/inline-style-parser-0.1.1.tgz",
+ "integrity": "sha512-7NXolsK4CAS5+xvdj5OMMbI962hU/wvwoxk+LWR9Ek9bVtyuuYScDN6eS0rUm6TxApFpw7CX1o4uJzcd4AyD3Q==",
+ "license": "MIT"
+ },
+ "node_modules/internal-slot": {
+ "version": "1.1.0",
+ "resolved": "https://registry.npmjs.org/internal-slot/-/internal-slot-1.1.0.tgz",
+ "integrity": "sha512-4gd7VpWNQNB4UKKCFFVcp1AVv+FMOgs9NKzjHKusc8jTMhd5eL1NqQqOpE0KzMds804/yHlglp3uxgluOqAPLw==",
+ "dev": true,
+ "license": "MIT",
+ "dependencies": {
+ "es-errors": "^1.3.0",
+ "hasown": "^2.0.2",
+ "side-channel": "^1.1.0"
+ },
+ "engines": {
+ "node": ">= 0.4"
+ }
+ },
+ "node_modules/is-alphabetical": {
+ "version": "1.0.4",
+ "resolved": "https://registry.npmjs.org/is-alphabetical/-/is-alphabetical-1.0.4.tgz",
+ "integrity": "sha512-DwzsA04LQ10FHTZuL0/grVDk4rFoVH1pjAToYwBrHSxcrBIGQuXrQMtD5U1b0U2XVgKZCTLLP8u2Qxqhy3l2Vg==",
+ "license": "MIT",
+ "funding": {
+ "type": "github",
+ "url": "https://github.com/sponsors/wooorm"
+ }
+ },
+ "node_modules/is-alphanumerical": {
+ "version": "1.0.4",
+ "resolved": "https://registry.npmjs.org/is-alphanumerical/-/is-alphanumerical-1.0.4.tgz",
+ "integrity": "sha512-UzoZUr+XfVz3t3v4KyGEniVL9BDRoQtY7tOyrRybkVNjDFWyo1yhXNGrrBTQxp3ib9BLAWs7k2YKBQsFRkZG9A==",
+ "license": "MIT",
+ "dependencies": {
+ "is-alphabetical": "^1.0.0",
+ "is-decimal": "^1.0.0"
+ },
+ "funding": {
+ "type": "github",
+ "url": "https://github.com/sponsors/wooorm"
+ }
+ },
+ "node_modules/is-array-buffer": {
+ "version": "3.0.5",
+ "resolved": "https://registry.npmjs.org/is-array-buffer/-/is-array-buffer-3.0.5.tgz",
+ "integrity": "sha512-DDfANUiiG2wC1qawP66qlTugJeL5HyzMpfr8lLK+jMQirGzNod0B12cFB/9q838Ru27sBwfw78/rdoU7RERz6A==",
+ "dev": true,
+ "license": "MIT",
+ "dependencies": {
+ "call-bind": "^1.0.8",
+ "call-bound": "^1.0.3",
+ "get-intrinsic": "^1.2.6"
+ },
+ "engines": {
+ "node": ">= 0.4"
+ },
+ "funding": {
+ "url": "https://github.com/sponsors/ljharb"
+ }
+ },
+ "node_modules/is-arrayish": {
+ "version": "0.2.1",
+ "resolved": "https://registry.npmjs.org/is-arrayish/-/is-arrayish-0.2.1.tgz",
+ "integrity": "sha512-zz06S8t0ozoDXMG+ube26zeCTNXcKIPJZJi8hBrF4idCLms4CG9QtK7qBl1boi5ODzFpjswb5JPmHCbMpjaYzg==",
+ "dev": true,
+ "license": "MIT",
+ "peer": true
+ },
+ "node_modules/is-async-function": {
+ "version": "2.1.1",
+ "resolved": "https://registry.npmjs.org/is-async-function/-/is-async-function-2.1.1.tgz",
+ "integrity": "sha512-9dgM/cZBnNvjzaMYHVoxxfPj2QXt22Ev7SuuPrs+xav0ukGB0S6d4ydZdEiM48kLx5kDV+QBPrpVnFyefL8kkQ==",
+ "dev": true,
+ "license": "MIT",
+ "dependencies": {
+ "async-function": "^1.0.0",
+ "call-bound": "^1.0.3",
+ "get-proto": "^1.0.1",
+ "has-tostringtag": "^1.0.2",
+ "safe-regex-test": "^1.1.0"
+ },
+ "engines": {
+ "node": ">= 0.4"
+ },
+ "funding": {
+ "url": "https://github.com/sponsors/ljharb"
+ }
+ },
+ "node_modules/is-bigint": {
+ "version": "1.1.0",
+ "resolved": "https://registry.npmjs.org/is-bigint/-/is-bigint-1.1.0.tgz",
+ "integrity": "sha512-n4ZT37wG78iz03xPRKJrHTdZbe3IicyucEtdRsV5yglwc3GyUfbAfpSeD0FJ41NbUNSt5wbhqfp1fS+BgnvDFQ==",
+ "dev": true,
+ "license": "MIT",
+ "dependencies": {
+ "has-bigints": "^1.0.2"
+ },
+ "engines": {
+ "node": ">= 0.4"
+ },
+ "funding": {
+ "url": "https://github.com/sponsors/ljharb"
+ }
+ },
+ "node_modules/is-binary-path": {
+ "version": "2.1.0",
+ "resolved": "https://registry.npmjs.org/is-binary-path/-/is-binary-path-2.1.0.tgz",
+ "integrity": "sha512-ZMERYes6pDydyuGidse7OsHxtbI7WVeUEozgR/g7rd0xUimYNlvZRE/K2MgZTjWy725IfelLeVcEM97mmtRGXw==",
+ "dev": true,
+ "license": "MIT",
+ "dependencies": {
+ "binary-extensions": "^2.0.0"
+ },
+ "engines": {
+ "node": ">=8"
+ }
+ },
+ "node_modules/is-boolean-object": {
+ "version": "1.2.2",
+ "resolved": "https://registry.npmjs.org/is-boolean-object/-/is-boolean-object-1.2.2.tgz",
+ "integrity": "sha512-wa56o2/ElJMYqjCjGkXri7it5FbebW5usLw/nPmCMs5DeZ7eziSYZhSmPRn0txqeW4LnAmQQU7FgqLpsEFKM4A==",
+ "dev": true,
+ "license": "MIT",
+ "dependencies": {
+ "call-bound": "^1.0.3",
+ "has-tostringtag": "^1.0.2"
+ },
+ "engines": {
+ "node": ">= 0.4"
+ },
+ "funding": {
+ "url": "https://github.com/sponsors/ljharb"
+ }
+ },
+ "node_modules/is-buffer": {
+ "version": "2.0.5",
+ "resolved": "https://registry.npmjs.org/is-buffer/-/is-buffer-2.0.5.tgz",
+ "integrity": "sha512-i2R6zNFDwgEHJyQUtJEk0XFi1i0dPFn/oqjK3/vPCcDeJvW5NQ83V8QbicfF1SupOaB0h8ntgBC2YiE7dfyctQ==",
+ "funding": [
+ {
+ "type": "github",
+ "url": "https://github.com/sponsors/feross"
+ },
+ {
+ "type": "patreon",
+ "url": "https://www.patreon.com/feross"
+ },
+ {
+ "type": "consulting",
+ "url": "https://feross.org/support"
+ }
+ ],
+ "license": "MIT",
+ "engines": {
+ "node": ">=4"
+ }
+ },
+ "node_modules/is-bun-module": {
+ "version": "2.0.0",
+ "resolved": "https://registry.npmjs.org/is-bun-module/-/is-bun-module-2.0.0.tgz",
+ "integrity": "sha512-gNCGbnnnnFAUGKeZ9PdbyeGYJqewpmc2aKHUEMO5nQPWU9lOmv7jcmQIv+qHD8fXW6W7qfuCwX4rY9LNRjXrkQ==",
+ "dev": true,
+ "license": "MIT",
+ "dependencies": {
+ "semver": "^7.7.1"
+ }
+ },
+ "node_modules/is-bun-module/node_modules/semver": {
+ "version": "7.7.1",
+ "resolved": "https://registry.npmjs.org/semver/-/semver-7.7.1.tgz",
+ "integrity": "sha512-hlq8tAfn0m/61p4BVRcPzIGr6LKiMwo4VM6dGi6pt4qcRkmNzTcWq6eCEjEh+qXjkMDvPlOFFSGwQjoEa6gyMA==",
+ "dev": true,
+ "license": "ISC",
+ "bin": {
+ "semver": "bin/semver.js"
+ },
+ "engines": {
+ "node": ">=10"
+ }
+ },
+ "node_modules/is-callable": {
+ "version": "1.2.7",
+ "resolved": "https://registry.npmjs.org/is-callable/-/is-callable-1.2.7.tgz",
+ "integrity": "sha512-1BC0BVFhS/p0qtw6enp8e+8OD0UrK0oFLztSjNzhcKA3WDuJxxAPXzPuPtKkjEY9UUoEWlX/8fgKeu2S8i9JTA==",
+ "dev": true,
+ "license": "MIT",
+ "engines": {
+ "node": ">= 0.4"
+ },
+ "funding": {
+ "url": "https://github.com/sponsors/ljharb"
+ }
+ },
+ "node_modules/is-core-module": {
+ "version": "2.15.1",
+ "resolved": "https://registry.npmjs.org/is-core-module/-/is-core-module-2.15.1.tgz",
+ "integrity": "sha512-z0vtXSwucUJtANQWldhbtbt7BnL0vxiFjIdDLAatwhDYty2bad6s+rijD6Ri4YuYJubLzIJLUidCh09e1djEVQ==",
+ "dev": true,
+ "license": "MIT",
+ "dependencies": {
+ "hasown": "^2.0.2"
+ },
+ "engines": {
+ "node": ">= 0.4"
+ },
+ "funding": {
+ "url": "https://github.com/sponsors/ljharb"
+ }
+ },
+ "node_modules/is-data-view": {
+ "version": "1.0.2",
+ "resolved": "https://registry.npmjs.org/is-data-view/-/is-data-view-1.0.2.tgz",
+ "integrity": "sha512-RKtWF8pGmS87i2D6gqQu/l7EYRlVdfzemCJN/P3UOs//x1QE7mfhvzHIApBTRf7axvT6DMGwSwBXYCT0nfB9xw==",
+ "dev": true,
+ "license": "MIT",
+ "dependencies": {
+ "call-bound": "^1.0.2",
+ "get-intrinsic": "^1.2.6",
+ "is-typed-array": "^1.1.13"
+ },
+ "engines": {
+ "node": ">= 0.4"
+ },
+ "funding": {
+ "url": "https://github.com/sponsors/ljharb"
+ }
+ },
+ "node_modules/is-date-object": {
+ "version": "1.1.0",
+ "resolved": "https://registry.npmjs.org/is-date-object/-/is-date-object-1.1.0.tgz",
+ "integrity": "sha512-PwwhEakHVKTdRNVOw+/Gyh0+MzlCl4R6qKvkhuvLtPMggI1WAHt9sOwZxQLSGpUaDnrdyDsomoRgNnCfKNSXXg==",
+ "dev": true,
+ "license": "MIT",
+ "dependencies": {
+ "call-bound": "^1.0.2",
+ "has-tostringtag": "^1.0.2"
+ },
+ "engines": {
+ "node": ">= 0.4"
+ },
+ "funding": {
+ "url": "https://github.com/sponsors/ljharb"
+ }
+ },
+ "node_modules/is-decimal": {
+ "version": "1.0.4",
+ "resolved": "https://registry.npmjs.org/is-decimal/-/is-decimal-1.0.4.tgz",
+ "integrity": "sha512-RGdriMmQQvZ2aqaQq3awNA6dCGtKpiDFcOzrTWrDAT2MiWrKQVPmxLGHl7Y2nNu6led0kEyoX0enY0qXYsv9zw==",
+ "license": "MIT",
+ "funding": {
+ "type": "github",
+ "url": "https://github.com/sponsors/wooorm"
+ }
+ },
+ "node_modules/is-extglob": {
+ "version": "2.1.1",
+ "resolved": "https://registry.npmjs.org/is-extglob/-/is-extglob-2.1.1.tgz",
+ "integrity": "sha512-SbKbANkN603Vi4jEZv49LeVJMn4yGwsbzZworEoyEiutsN3nJYdbO36zfhGJ6QEDpOZIFkDtnq5JRxmvl3jsoQ==",
+ "dev": true,
+ "license": "MIT",
+ "engines": {
+ "node": ">=0.10.0"
+ }
+ },
+ "node_modules/is-finalizationregistry": {
+ "version": "1.1.1",
+ "resolved": "https://registry.npmjs.org/is-finalizationregistry/-/is-finalizationregistry-1.1.1.tgz",
+ "integrity": "sha512-1pC6N8qWJbWoPtEjgcL2xyhQOP491EQjeUo3qTKcmV8YSDDJrOepfG8pcC7h/QgnQHYSv0mJ3Z/ZWxmatVrysg==",
+ "dev": true,
+ "license": "MIT",
+ "dependencies": {
+ "call-bound": "^1.0.3"
+ },
+ "engines": {
+ "node": ">= 0.4"
+ },
+ "funding": {
+ "url": "https://github.com/sponsors/ljharb"
+ }
+ },
+ "node_modules/is-fullwidth-code-point": {
+ "version": "3.0.0",
+ "resolved": "https://registry.npmjs.org/is-fullwidth-code-point/-/is-fullwidth-code-point-3.0.0.tgz",
+ "integrity": "sha512-zymm5+u+sCsSWyD9qNaejV3DFvhCKclKdizYaJUuHA83RLjb7nSuGnddCHGv0hk+KY7BMAlsWeK4Ueg6EV6XQg==",
+ "license": "MIT",
+ "engines": {
+ "node": ">=8"
+ }
+ },
+ "node_modules/is-generator-fn": {
+ "version": "2.1.0",
+ "resolved": "https://registry.npmjs.org/is-generator-fn/-/is-generator-fn-2.1.0.tgz",
+ "integrity": "sha512-cTIB4yPYL/Grw0EaSzASzg6bBy9gqCofvWN8okThAYIxKJZC+udlRAmGbM0XLeniEJSs8uEgHPGuHSe1XsOLSQ==",
+ "dev": true,
+ "license": "MIT",
+ "peer": true,
+ "engines": {
+ "node": ">=6"
+ }
+ },
+ "node_modules/is-generator-function": {
+ "version": "1.1.0",
+ "resolved": "https://registry.npmjs.org/is-generator-function/-/is-generator-function-1.1.0.tgz",
+ "integrity": "sha512-nPUB5km40q9e8UfN/Zc24eLlzdSf9OfKByBw9CIdw4H1giPMeA0OIJvbchsCu4npfI2QcMVBsGEBHKZ7wLTWmQ==",
+ "dev": true,
+ "license": "MIT",
+ "dependencies": {
+ "call-bound": "^1.0.3",
+ "get-proto": "^1.0.0",
+ "has-tostringtag": "^1.0.2",
+ "safe-regex-test": "^1.1.0"
+ },
+ "engines": {
+ "node": ">= 0.4"
+ },
+ "funding": {
+ "url": "https://github.com/sponsors/ljharb"
+ }
+ },
+ "node_modules/is-glob": {
+ "version": "4.0.3",
+ "resolved": "https://registry.npmjs.org/is-glob/-/is-glob-4.0.3.tgz",
+ "integrity": "sha512-xelSayHH36ZgE7ZWhli7pW34hNbNl8Ojv5KVmkJD4hBdD3th8Tfk9vYasLM+mXWOZhFkgZfxhLSnrwRr4elSSg==",
+ "dev": true,
+ "license": "MIT",
+ "dependencies": {
+ "is-extglob": "^2.1.1"
+ },
+ "engines": {
+ "node": ">=0.10.0"
+ }
+ },
+ "node_modules/is-hexadecimal": {
+ "version": "1.0.4",
+ "resolved": "https://registry.npmjs.org/is-hexadecimal/-/is-hexadecimal-1.0.4.tgz",
+ "integrity": "sha512-gyPJuv83bHMpocVYoqof5VDiZveEoGoFL8m3BXNb2VW8Xs+rz9kqO8LOQ5DH6EsuvilT1ApazU0pyl+ytbPtlw==",
+ "license": "MIT",
+ "funding": {
+ "type": "github",
+ "url": "https://github.com/sponsors/wooorm"
+ }
+ },
+ "node_modules/is-map": {
+ "version": "2.0.3",
+ "resolved": "https://registry.npmjs.org/is-map/-/is-map-2.0.3.tgz",
+ "integrity": "sha512-1Qed0/Hr2m+YqxnM09CjA2d/i6YZNfF6R2oRAOj36eUdS6qIV/huPJNSEpKbupewFs+ZsJlxsjjPbc0/afW6Lw==",
+ "dev": true,
+ "license": "MIT",
+ "engines": {
+ "node": ">= 0.4"
+ },
+ "funding": {
+ "url": "https://github.com/sponsors/ljharb"
+ }
+ },
+ "node_modules/is-number": {
+ "version": "7.0.0",
+ "resolved": "https://registry.npmjs.org/is-number/-/is-number-7.0.0.tgz",
+ "integrity": "sha512-41Cifkg6e8TylSpdtTpeLVMqvSBEVzTttHvERD741+pnZ8ANv0004MRL43QKPDlK9cGvNp6NZWZUBlbGXYxxng==",
+ "dev": true,
+ "license": "MIT",
+ "engines": {
+ "node": ">=0.12.0"
+ }
+ },
+ "node_modules/is-number-object": {
+ "version": "1.1.1",
+ "resolved": "https://registry.npmjs.org/is-number-object/-/is-number-object-1.1.1.tgz",
+ "integrity": "sha512-lZhclumE1G6VYD8VHe35wFaIif+CTy5SJIi5+3y4psDgWu4wPDoBhF8NxUOinEc7pHgiTsT6MaBb92rKhhD+Xw==",
+ "dev": true,
+ "license": "MIT",
+ "dependencies": {
+ "call-bound": "^1.0.3",
+ "has-tostringtag": "^1.0.2"
+ },
+ "engines": {
+ "node": ">= 0.4"
+ },
+ "funding": {
+ "url": "https://github.com/sponsors/ljharb"
+ }
+ },
+ "node_modules/is-plain-obj": {
+ "version": "4.1.0",
+ "resolved": "https://registry.npmjs.org/is-plain-obj/-/is-plain-obj-4.1.0.tgz",
+ "integrity": "sha512-+Pgi+vMuUNkJyExiMBt5IlFoMyKnr5zhJ4Uspz58WOhBF5QoIZkFyNHIbBAtHwzVAgk5RtndVNsDRN61/mmDqg==",
+ "license": "MIT",
+ "engines": {
+ "node": ">=12"
+ },
+ "funding": {
+ "url": "https://github.com/sponsors/sindresorhus"
+ }
+ },
+ "node_modules/is-reference": {
+ "version": "3.0.2",
+ "resolved": "https://registry.npmjs.org/is-reference/-/is-reference-3.0.2.tgz",
+ "integrity": "sha512-v3rht/LgVcsdZa3O2Nqs+NMowLOxeOm7Ay9+/ARQ2F+qEoANRcqrjAZKGN0v8ymUetZGgkp26LTnGT7H0Qo9Pg==",
+ "license": "MIT",
+ "peer": true,
+ "dependencies": {
+ "@types/estree": "*"
+ }
+ },
+ "node_modules/is-regex": {
+ "version": "1.2.1",
+ "resolved": "https://registry.npmjs.org/is-regex/-/is-regex-1.2.1.tgz",
+ "integrity": "sha512-MjYsKHO5O7mCsmRGxWcLWheFqN9DJ/2TmngvjKXihe6efViPqc274+Fx/4fYj/r03+ESvBdTXK0V6tA3rgez1g==",
+ "dev": true,
+ "license": "MIT",
+ "dependencies": {
+ "call-bound": "^1.0.2",
+ "gopd": "^1.2.0",
+ "has-tostringtag": "^1.0.2",
+ "hasown": "^2.0.2"
+ },
+ "engines": {
+ "node": ">= 0.4"
+ },
+ "funding": {
+ "url": "https://github.com/sponsors/ljharb"
+ }
+ },
+ "node_modules/is-set": {
+ "version": "2.0.3",
+ "resolved": "https://registry.npmjs.org/is-set/-/is-set-2.0.3.tgz",
+ "integrity": "sha512-iPAjerrse27/ygGLxw+EBR9agv9Y6uLeYVJMu+QNCoouJ1/1ri0mGrcWpfCqFZuzzx3WjtwxG098X+n4OuRkPg==",
+ "dev": true,
+ "license": "MIT",
+ "engines": {
+ "node": ">= 0.4"
+ },
+ "funding": {
+ "url": "https://github.com/sponsors/ljharb"
+ }
+ },
+ "node_modules/is-shared-array-buffer": {
+ "version": "1.0.4",
+ "resolved": "https://registry.npmjs.org/is-shared-array-buffer/-/is-shared-array-buffer-1.0.4.tgz",
+ "integrity": "sha512-ISWac8drv4ZGfwKl5slpHG9OwPNty4jOWPRIhBpxOoD+hqITiwuipOQ2bNthAzwA3B4fIjO4Nln74N0S9byq8A==",
+ "dev": true,
+ "license": "MIT",
+ "dependencies": {
+ "call-bound": "^1.0.3"
+ },
+ "engines": {
+ "node": ">= 0.4"
+ },
+ "funding": {
+ "url": "https://github.com/sponsors/ljharb"
+ }
+ },
+ "node_modules/is-stream": {
+ "version": "2.0.1",
+ "resolved": "https://registry.npmjs.org/is-stream/-/is-stream-2.0.1.tgz",
+ "integrity": "sha512-hFoiJiTl63nn+kstHGBtewWSKnQLpyb155KHheA1l39uvtO9nWIop1p3udqPcUd/xbF1VLMO4n7OI6p7RbngDg==",
+ "license": "MIT",
+ "engines": {
+ "node": ">=8"
+ },
+ "funding": {
+ "url": "https://github.com/sponsors/sindresorhus"
+ }
+ },
+ "node_modules/is-string": {
+ "version": "1.1.1",
+ "resolved": "https://registry.npmjs.org/is-string/-/is-string-1.1.1.tgz",
+ "integrity": "sha512-BtEeSsoaQjlSPBemMQIrY1MY0uM6vnS1g5fmufYOtnxLGUZM2178PKbhsk7Ffv58IX+ZtcvoGwccYsh0PglkAA==",
+ "dev": true,
+ "license": "MIT",
+ "dependencies": {
+ "call-bound": "^1.0.3",
+ "has-tostringtag": "^1.0.2"
+ },
+ "engines": {
+ "node": ">= 0.4"
+ },
+ "funding": {
+ "url": "https://github.com/sponsors/ljharb"
+ }
+ },
+ "node_modules/is-symbol": {
+ "version": "1.1.1",
+ "resolved": "https://registry.npmjs.org/is-symbol/-/is-symbol-1.1.1.tgz",
+ "integrity": "sha512-9gGx6GTtCQM73BgmHQXfDmLtfjjTUDSyoxTCbp5WtoixAhfgsDirWIcVQ/IHpvI5Vgd5i/J5F7B9cN/WlVbC/w==",
+ "dev": true,
+ "license": "MIT",
+ "dependencies": {
+ "call-bound": "^1.0.2",
+ "has-symbols": "^1.1.0",
+ "safe-regex-test": "^1.1.0"
+ },
+ "engines": {
+ "node": ">= 0.4"
+ },
+ "funding": {
+ "url": "https://github.com/sponsors/ljharb"
+ }
+ },
+ "node_modules/is-typed-array": {
+ "version": "1.1.15",
+ "resolved": "https://registry.npmjs.org/is-typed-array/-/is-typed-array-1.1.15.tgz",
+ "integrity": "sha512-p3EcsicXjit7SaskXHs1hA91QxgTw46Fv6EFKKGS5DRFLD8yKnohjF3hxoju94b/OcMZoQukzpPpBE9uLVKzgQ==",
+ "dev": true,
+ "license": "MIT",
+ "dependencies": {
+ "which-typed-array": "^1.1.16"
+ },
+ "engines": {
+ "node": ">= 0.4"
+ },
+ "funding": {
+ "url": "https://github.com/sponsors/ljharb"
+ }
+ },
+ "node_modules/is-weakmap": {
+ "version": "2.0.2",
+ "resolved": "https://registry.npmjs.org/is-weakmap/-/is-weakmap-2.0.2.tgz",
+ "integrity": "sha512-K5pXYOm9wqY1RgjpL3YTkF39tni1XajUIkawTLUo9EZEVUFga5gSQJF8nNS7ZwJQ02y+1YCNYcMh+HIf1ZqE+w==",
+ "dev": true,
+ "license": "MIT",
+ "engines": {
+ "node": ">= 0.4"
+ },
+ "funding": {
+ "url": "https://github.com/sponsors/ljharb"
+ }
+ },
+ "node_modules/is-weakref": {
+ "version": "1.1.1",
+ "resolved": "https://registry.npmjs.org/is-weakref/-/is-weakref-1.1.1.tgz",
+ "integrity": "sha512-6i9mGWSlqzNMEqpCp93KwRS1uUOodk2OJ6b+sq7ZPDSy2WuI5NFIxp/254TytR8ftefexkWn5xNiHUNpPOfSew==",
+ "dev": true,
+ "license": "MIT",
+ "dependencies": {
+ "call-bound": "^1.0.3"
+ },
+ "engines": {
+ "node": ">= 0.4"
+ },
+ "funding": {
+ "url": "https://github.com/sponsors/ljharb"
+ }
+ },
+ "node_modules/is-weakset": {
+ "version": "2.0.4",
+ "resolved": "https://registry.npmjs.org/is-weakset/-/is-weakset-2.0.4.tgz",
+ "integrity": "sha512-mfcwb6IzQyOKTs84CQMrOwW4gQcaTOAWJ0zzJCl2WSPDrWk/OzDaImWFH3djXhb24g4eudZfLRozAvPGw4d9hQ==",
+ "dev": true,
+ "license": "MIT",
+ "dependencies": {
+ "call-bound": "^1.0.3",
+ "get-intrinsic": "^1.2.6"
+ },
+ "engines": {
+ "node": ">= 0.4"
+ },
+ "funding": {
+ "url": "https://github.com/sponsors/ljharb"
+ }
+ },
+ "node_modules/isarray": {
+ "version": "1.0.0",
+ "resolved": "https://registry.npmjs.org/isarray/-/isarray-1.0.0.tgz",
+ "integrity": "sha512-VLghIWNM6ELQzo7zwmcg0NmTVyWKYjvIeM83yjp0wRDTmUnrM678fQbcKBo6n2CJEF0szoG//ytg+TKla89ALQ==",
+ "license": "MIT"
+ },
+ "node_modules/isexe": {
+ "version": "2.0.0",
+ "resolved": "https://registry.npmjs.org/isexe/-/isexe-2.0.0.tgz",
+ "integrity": "sha512-RHxMLp9lnKHGHRng9QFhRCMbYAcVpn69smSGcq3f36xjgVVWThj4qqLbTLlq7Ssj8B+fIQ1EuCEGI2lKsyQeIw==",
+ "dev": true,
+ "license": "ISC"
+ },
+ "node_modules/istanbul-lib-coverage": {
+ "version": "3.2.2",
+ "resolved": "https://registry.npmjs.org/istanbul-lib-coverage/-/istanbul-lib-coverage-3.2.2.tgz",
+ "integrity": "sha512-O8dpsF+r0WV/8MNRKfnmrtCWhuKjxrq2w+jpzBL5UZKTi2LeVWnWOmWRxFlesJONmc+wLAGvKQZEOanko0LFTg==",
+ "dev": true,
+ "license": "BSD-3-Clause",
+ "peer": true,
+ "engines": {
+ "node": ">=8"
+ }
+ },
+ "node_modules/istanbul-lib-instrument": {
+ "version": "6.0.3",
+ "resolved": "https://registry.npmjs.org/istanbul-lib-instrument/-/istanbul-lib-instrument-6.0.3.tgz",
+ "integrity": "sha512-Vtgk7L/R2JHyyGW07spoFlB8/lpjiOLTjMdms6AFMraYt3BaJauod/NGrfnVG/y4Ix1JEuMRPDPEj2ua+zz1/Q==",
+ "dev": true,
+ "license": "BSD-3-Clause",
+ "peer": true,
+ "dependencies": {
+ "@babel/core": "^7.23.9",
+ "@babel/parser": "^7.23.9",
+ "@istanbuljs/schema": "^0.1.3",
+ "istanbul-lib-coverage": "^3.2.0",
+ "semver": "^7.5.4"
+ },
+ "engines": {
+ "node": ">=10"
+ }
+ },
+ "node_modules/istanbul-lib-instrument/node_modules/semver": {
+ "version": "7.6.3",
+ "resolved": "https://registry.npmjs.org/semver/-/semver-7.6.3.tgz",
+ "integrity": "sha512-oVekP1cKtI+CTDvHWYFUcMtsK/00wmAEfyqKfNdARm8u1wNVhSgaX7A8d4UuIlUI5e84iEwOhs7ZPYRmzU9U6A==",
+ "dev": true,
+ "license": "ISC",
+ "peer": true,
+ "bin": {
+ "semver": "bin/semver.js"
+ },
+ "engines": {
+ "node": ">=10"
+ }
+ },
+ "node_modules/istanbul-lib-report": {
+ "version": "3.0.1",
+ "resolved": "https://registry.npmjs.org/istanbul-lib-report/-/istanbul-lib-report-3.0.1.tgz",
+ "integrity": "sha512-GCfE1mtsHGOELCU8e/Z7YWzpmybrx/+dSTfLrvY8qRmaY6zXTKWn6WQIjaAFw069icm6GVMNkgu0NzI4iPZUNw==",
+ "dev": true,
+ "license": "BSD-3-Clause",
+ "peer": true,
+ "dependencies": {
+ "istanbul-lib-coverage": "^3.0.0",
+ "make-dir": "^4.0.0",
+ "supports-color": "^7.1.0"
+ },
+ "engines": {
+ "node": ">=10"
+ }
+ },
+ "node_modules/istanbul-lib-source-maps": {
+ "version": "4.0.1",
+ "resolved": "https://registry.npmjs.org/istanbul-lib-source-maps/-/istanbul-lib-source-maps-4.0.1.tgz",
+ "integrity": "sha512-n3s8EwkdFIJCG3BPKBYvskgXGoy88ARzvegkitk60NxRdwltLOTaH7CUiMRXvwYorl0Q712iEjcWB+fK/MrWVw==",
+ "dev": true,
+ "license": "BSD-3-Clause",
+ "peer": true,
+ "dependencies": {
+ "debug": "^4.1.1",
+ "istanbul-lib-coverage": "^3.0.0",
+ "source-map": "^0.6.1"
+ },
+ "engines": {
+ "node": ">=10"
+ }
+ },
+ "node_modules/istanbul-reports": {
+ "version": "3.1.7",
+ "resolved": "https://registry.npmjs.org/istanbul-reports/-/istanbul-reports-3.1.7.tgz",
+ "integrity": "sha512-BewmUXImeuRk2YY0PVbxgKAysvhRPUQE0h5QRM++nVWyubKGV0l8qQ5op8+B2DOmwSe63Jivj0BjkPQVf8fP5g==",
+ "dev": true,
+ "license": "BSD-3-Clause",
+ "peer": true,
+ "dependencies": {
+ "html-escaper": "^2.0.0",
+ "istanbul-lib-report": "^3.0.0"
+ },
+ "engines": {
+ "node": ">=8"
+ }
+ },
+ "node_modules/istanbul-reports/node_modules/html-escaper": {
+ "version": "2.0.2",
+ "resolved": "https://registry.npmjs.org/html-escaper/-/html-escaper-2.0.2.tgz",
+ "integrity": "sha512-H2iMtd0I4Mt5eYiapRdIDjp+XzelXQ0tFE4JS7YFwFevXXMmOp9myNrUvCg0D6ws8iqkRPBfKHgbwig1SmlLfg==",
+ "dev": true,
+ "license": "MIT",
+ "peer": true
+ },
+ "node_modules/iterator.prototype": {
+ "version": "1.1.5",
+ "resolved": "https://registry.npmjs.org/iterator.prototype/-/iterator.prototype-1.1.5.tgz",
+ "integrity": "sha512-H0dkQoCa3b2VEeKQBOxFph+JAbcrQdE7KC0UkqwpLmv2EC4P41QXP+rqo9wYodACiG5/WM5s9oDApTU8utwj9g==",
+ "dev": true,
+ "license": "MIT",
+ "dependencies": {
+ "define-data-property": "^1.1.4",
+ "es-object-atoms": "^1.0.0",
+ "get-intrinsic": "^1.2.6",
+ "get-proto": "^1.0.0",
+ "has-symbols": "^1.1.0",
+ "set-function-name": "^2.0.2"
+ },
+ "engines": {
+ "node": ">= 0.4"
+ }
+ },
+ "node_modules/jackspeak": {
+ "version": "3.4.3",
+ "resolved": "https://registry.npmjs.org/jackspeak/-/jackspeak-3.4.3.tgz",
+ "integrity": "sha512-OGlZQpz2yfahA/Rd1Y8Cd9SIEsqvXkLVoSw/cgwhnhFMDbsQFeZYoJJ7bIZBS9BcamUW96asq/npPWugM+RQBw==",
+ "dev": true,
+ "license": "BlueOak-1.0.0",
+ "dependencies": {
+ "@isaacs/cliui": "^8.0.2"
+ },
+ "funding": {
+ "url": "https://github.com/sponsors/isaacs"
+ },
+ "optionalDependencies": {
+ "@pkgjs/parseargs": "^0.11.0"
+ }
+ },
+ "node_modules/jake": {
+ "version": "10.9.2",
+ "resolved": "https://registry.npmjs.org/jake/-/jake-10.9.2.tgz",
+ "integrity": "sha512-2P4SQ0HrLQ+fw6llpLnOaGAvN2Zu6778SJMrCUwns4fOoG9ayrTiZk3VV8sCPkVZF8ab0zksVpS8FDY5pRCNBA==",
+ "dev": true,
+ "license": "Apache-2.0",
+ "dependencies": {
+ "async": "^3.2.3",
+ "chalk": "^4.0.2",
+ "filelist": "^1.0.4",
+ "minimatch": "^3.1.2"
+ },
+ "bin": {
+ "jake": "bin/cli.js"
+ },
+ "engines": {
+ "node": ">=10"
+ }
+ },
+ "node_modules/jake/node_modules/chalk": {
+ "version": "4.1.2",
+ "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.2.tgz",
+ "integrity": "sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==",
+ "dev": true,
+ "license": "MIT",
+ "dependencies": {
+ "ansi-styles": "^4.1.0",
+ "supports-color": "^7.1.0"
+ },
+ "engines": {
+ "node": ">=10"
+ },
+ "funding": {
+ "url": "https://github.com/chalk/chalk?sponsor=1"
+ }
+ },
+ "node_modules/jest": {
+ "version": "29.7.0",
+ "resolved": "https://registry.npmjs.org/jest/-/jest-29.7.0.tgz",
+ "integrity": "sha512-NIy3oAFp9shda19hy4HK0HRTWKtPJmGdnvywu01nOqNC2vZg+Z+fvJDxpMQA88eb2I9EcafcdjYgsDthnYTvGw==",
+ "dev": true,
+ "license": "MIT",
+ "peer": true,
+ "dependencies": {
+ "@jest/core": "^29.7.0",
+ "@jest/types": "^29.6.3",
+ "import-local": "^3.0.2",
+ "jest-cli": "^29.7.0"
+ },
+ "bin": {
+ "jest": "bin/jest.js"
+ },
+ "engines": {
+ "node": "^14.15.0 || ^16.10.0 || >=18.0.0"
+ },
+ "peerDependencies": {
+ "node-notifier": "^8.0.1 || ^9.0.0 || ^10.0.0"
+ },
+ "peerDependenciesMeta": {
+ "node-notifier": {
+ "optional": true
+ }
+ }
+ },
+ "node_modules/jest-changed-files": {
+ "version": "29.7.0",
+ "resolved": "https://registry.npmjs.org/jest-changed-files/-/jest-changed-files-29.7.0.tgz",
+ "integrity": "sha512-fEArFiwf1BpQ+4bXSprcDc3/x4HSzL4al2tozwVpDFpsxALjLYdyiIK4e5Vz66GQJIbXJ82+35PtysofptNX2w==",
+ "dev": true,
+ "license": "MIT",
+ "peer": true,
+ "dependencies": {
+ "execa": "^5.0.0",
+ "jest-util": "^29.7.0",
+ "p-limit": "^3.1.0"
+ },
+ "engines": {
+ "node": "^14.15.0 || ^16.10.0 || >=18.0.0"
+ }
+ },
+ "node_modules/jest-changed-files/node_modules/p-limit": {
+ "version": "3.1.0",
+ "resolved": "https://registry.npmjs.org/p-limit/-/p-limit-3.1.0.tgz",
+ "integrity": "sha512-TYOanM3wGwNGsZN2cVTYPArw454xnXj5qmWF1bEoAc4+cU/ol7GVh7odevjp1FNHduHc3KZMcFduxU5Xc6uJRQ==",
+ "dev": true,
+ "license": "MIT",
+ "peer": true,
+ "dependencies": {
+ "yocto-queue": "^0.1.0"
+ },
+ "engines": {
+ "node": ">=10"
+ },
+ "funding": {
+ "url": "https://github.com/sponsors/sindresorhus"
+ }
+ },
+ "node_modules/jest-changed-files/node_modules/yocto-queue": {
+ "version": "0.1.0",
+ "resolved": "https://registry.npmjs.org/yocto-queue/-/yocto-queue-0.1.0.tgz",
+ "integrity": "sha512-rVksvsnNCdJ/ohGc6xgPwyN8eheCxsiLM8mxuE/t/mOVqJewPuO1miLpTHQiRgTKCLexL4MeAFVagts7HmNZ2Q==",
+ "dev": true,
+ "license": "MIT",
+ "peer": true,
+ "engines": {
+ "node": ">=10"
+ },
+ "funding": {
+ "url": "https://github.com/sponsors/sindresorhus"
+ }
+ },
+ "node_modules/jest-circus": {
+ "version": "29.7.0",
+ "resolved": "https://registry.npmjs.org/jest-circus/-/jest-circus-29.7.0.tgz",
+ "integrity": "sha512-3E1nCMgipcTkCocFwM90XXQab9bS+GMsjdpmPrlelaxwD93Ad8iVEjX/vvHPdLPnFf+L40u+5+iutRdA1N9myw==",
+ "dev": true,
+ "license": "MIT",
+ "peer": true,
+ "dependencies": {
+ "@jest/environment": "^29.7.0",
+ "@jest/expect": "^29.7.0",
+ "@jest/test-result": "^29.7.0",
+ "@jest/types": "^29.6.3",
+ "@types/node": "*",
+ "chalk": "^4.0.0",
+ "co": "^4.6.0",
+ "dedent": "^1.0.0",
+ "is-generator-fn": "^2.0.0",
+ "jest-each": "^29.7.0",
+ "jest-matcher-utils": "^29.7.0",
+ "jest-message-util": "^29.7.0",
+ "jest-runtime": "^29.7.0",
+ "jest-snapshot": "^29.7.0",
+ "jest-util": "^29.7.0",
+ "p-limit": "^3.1.0",
+ "pretty-format": "^29.7.0",
+ "pure-rand": "^6.0.0",
+ "slash": "^3.0.0",
+ "stack-utils": "^2.0.3"
+ },
+ "engines": {
+ "node": "^14.15.0 || ^16.10.0 || >=18.0.0"
+ }
+ },
+ "node_modules/jest-circus/node_modules/chalk": {
+ "version": "4.1.2",
+ "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.2.tgz",
+ "integrity": "sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==",
+ "dev": true,
+ "license": "MIT",
+ "peer": true,
+ "dependencies": {
+ "ansi-styles": "^4.1.0",
+ "supports-color": "^7.1.0"
+ },
+ "engines": {
+ "node": ">=10"
+ },
+ "funding": {
+ "url": "https://github.com/chalk/chalk?sponsor=1"
+ }
+ },
+ "node_modules/jest-circus/node_modules/p-limit": {
+ "version": "3.1.0",
+ "resolved": "https://registry.npmjs.org/p-limit/-/p-limit-3.1.0.tgz",
+ "integrity": "sha512-TYOanM3wGwNGsZN2cVTYPArw454xnXj5qmWF1bEoAc4+cU/ol7GVh7odevjp1FNHduHc3KZMcFduxU5Xc6uJRQ==",
+ "dev": true,
+ "license": "MIT",
+ "peer": true,
+ "dependencies": {
+ "yocto-queue": "^0.1.0"
+ },
+ "engines": {
+ "node": ">=10"
+ },
+ "funding": {
+ "url": "https://github.com/sponsors/sindresorhus"
+ }
+ },
+ "node_modules/jest-circus/node_modules/yocto-queue": {
+ "version": "0.1.0",
+ "resolved": "https://registry.npmjs.org/yocto-queue/-/yocto-queue-0.1.0.tgz",
+ "integrity": "sha512-rVksvsnNCdJ/ohGc6xgPwyN8eheCxsiLM8mxuE/t/mOVqJewPuO1miLpTHQiRgTKCLexL4MeAFVagts7HmNZ2Q==",
+ "dev": true,
+ "license": "MIT",
+ "peer": true,
+ "engines": {
+ "node": ">=10"
+ },
+ "funding": {
+ "url": "https://github.com/sponsors/sindresorhus"
+ }
+ },
+ "node_modules/jest-cli": {
+ "version": "29.7.0",
+ "resolved": "https://registry.npmjs.org/jest-cli/-/jest-cli-29.7.0.tgz",
+ "integrity": "sha512-OVVobw2IubN/GSYsxETi+gOe7Ka59EFMR/twOU3Jb2GnKKeMGJB5SGUUrEz3SFVmJASUdZUzy83sLNNQ2gZslg==",
+ "dev": true,
+ "license": "MIT",
+ "peer": true,
+ "dependencies": {
+ "@jest/core": "^29.7.0",
+ "@jest/test-result": "^29.7.0",
+ "@jest/types": "^29.6.3",
+ "chalk": "^4.0.0",
+ "create-jest": "^29.7.0",
+ "exit": "^0.1.2",
+ "import-local": "^3.0.2",
+ "jest-config": "^29.7.0",
+ "jest-util": "^29.7.0",
+ "jest-validate": "^29.7.0",
+ "yargs": "^17.3.1"
+ },
+ "bin": {
+ "jest": "bin/jest.js"
+ },
+ "engines": {
+ "node": "^14.15.0 || ^16.10.0 || >=18.0.0"
+ },
+ "peerDependencies": {
+ "node-notifier": "^8.0.1 || ^9.0.0 || ^10.0.0"
+ },
+ "peerDependenciesMeta": {
+ "node-notifier": {
+ "optional": true
+ }
+ }
+ },
+ "node_modules/jest-cli/node_modules/chalk": {
+ "version": "4.1.2",
+ "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.2.tgz",
+ "integrity": "sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==",
+ "dev": true,
+ "license": "MIT",
+ "peer": true,
+ "dependencies": {
+ "ansi-styles": "^4.1.0",
+ "supports-color": "^7.1.0"
+ },
+ "engines": {
+ "node": ">=10"
+ },
+ "funding": {
+ "url": "https://github.com/chalk/chalk?sponsor=1"
+ }
+ },
+ "node_modules/jest-config": {
+ "version": "29.7.0",
+ "resolved": "https://registry.npmjs.org/jest-config/-/jest-config-29.7.0.tgz",
+ "integrity": "sha512-uXbpfeQ7R6TZBqI3/TxCU4q4ttk3u0PJeC+E0zbfSoSjq6bJ7buBPxzQPL0ifrkY4DNu4JUdk0ImlBUYi840eQ==",
+ "dev": true,
+ "license": "MIT",
+ "peer": true,
+ "dependencies": {
+ "@babel/core": "^7.11.6",
+ "@jest/test-sequencer": "^29.7.0",
+ "@jest/types": "^29.6.3",
+ "babel-jest": "^29.7.0",
+ "chalk": "^4.0.0",
+ "ci-info": "^3.2.0",
+ "deepmerge": "^4.2.2",
+ "glob": "^7.1.3",
+ "graceful-fs": "^4.2.9",
+ "jest-circus": "^29.7.0",
+ "jest-environment-node": "^29.7.0",
+ "jest-get-type": "^29.6.3",
+ "jest-regex-util": "^29.6.3",
+ "jest-resolve": "^29.7.0",
+ "jest-runner": "^29.7.0",
+ "jest-util": "^29.7.0",
+ "jest-validate": "^29.7.0",
+ "micromatch": "^4.0.4",
+ "parse-json": "^5.2.0",
+ "pretty-format": "^29.7.0",
+ "slash": "^3.0.0",
+ "strip-json-comments": "^3.1.1"
+ },
+ "engines": {
+ "node": "^14.15.0 || ^16.10.0 || >=18.0.0"
+ },
+ "peerDependencies": {
+ "@types/node": "*",
+ "ts-node": ">=9.0.0"
+ },
+ "peerDependenciesMeta": {
+ "@types/node": {
+ "optional": true
+ },
+ "ts-node": {
+ "optional": true
+ }
+ }
+ },
+ "node_modules/jest-config/node_modules/chalk": {
+ "version": "4.1.2",
+ "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.2.tgz",
+ "integrity": "sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==",
+ "dev": true,
+ "license": "MIT",
+ "peer": true,
+ "dependencies": {
+ "ansi-styles": "^4.1.0",
+ "supports-color": "^7.1.0"
+ },
+ "engines": {
+ "node": ">=10"
+ },
+ "funding": {
+ "url": "https://github.com/chalk/chalk?sponsor=1"
+ }
+ },
+ "node_modules/jest-diff": {
+ "version": "29.7.0",
+ "resolved": "https://registry.npmjs.org/jest-diff/-/jest-diff-29.7.0.tgz",
+ "integrity": "sha512-LMIgiIrhigmPrs03JHpxUh2yISK3vLFPkAodPeo0+BuF7wA2FoQbkEg1u8gBYBThncu7e1oEDUfIXVuTqLRUjw==",
+ "dev": true,
+ "license": "MIT",
+ "dependencies": {
+ "chalk": "^4.0.0",
+ "diff-sequences": "^29.6.3",
+ "jest-get-type": "^29.6.3",
+ "pretty-format": "^29.7.0"
+ },
+ "engines": {
+ "node": "^14.15.0 || ^16.10.0 || >=18.0.0"
+ }
+ },
+ "node_modules/jest-diff/node_modules/chalk": {
+ "version": "4.1.2",
+ "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.2.tgz",
+ "integrity": "sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==",
+ "dev": true,
+ "license": "MIT",
+ "dependencies": {
+ "ansi-styles": "^4.1.0",
+ "supports-color": "^7.1.0"
+ },
+ "engines": {
+ "node": ">=10"
+ },
+ "funding": {
+ "url": "https://github.com/chalk/chalk?sponsor=1"
+ }
+ },
+ "node_modules/jest-docblock": {
+ "version": "29.7.0",
+ "resolved": "https://registry.npmjs.org/jest-docblock/-/jest-docblock-29.7.0.tgz",
+ "integrity": "sha512-q617Auw3A612guyaFgsbFeYpNP5t2aoUNLwBUbc/0kD1R4t9ixDbyFTHd1nok4epoVFpr7PmeWHrhvuV3XaJ4g==",
+ "dev": true,
+ "license": "MIT",
+ "peer": true,
+ "dependencies": {
+ "detect-newline": "^3.0.0"
+ },
+ "engines": {
+ "node": "^14.15.0 || ^16.10.0 || >=18.0.0"
+ }
+ },
+ "node_modules/jest-each": {
+ "version": "29.7.0",
+ "resolved": "https://registry.npmjs.org/jest-each/-/jest-each-29.7.0.tgz",
+ "integrity": "sha512-gns+Er14+ZrEoC5fhOfYCY1LOHHr0TI+rQUHZS8Ttw2l7gl+80eHc/gFf2Ktkw0+SIACDTeWvpFcv3B04VembQ==",
+ "dev": true,
+ "license": "MIT",
+ "peer": true,
+ "dependencies": {
+ "@jest/types": "^29.6.3",
+ "chalk": "^4.0.0",
+ "jest-get-type": "^29.6.3",
+ "jest-util": "^29.7.0",
+ "pretty-format": "^29.7.0"
+ },
+ "engines": {
+ "node": "^14.15.0 || ^16.10.0 || >=18.0.0"
+ }
+ },
+ "node_modules/jest-each/node_modules/chalk": {
+ "version": "4.1.2",
+ "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.2.tgz",
+ "integrity": "sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==",
+ "dev": true,
+ "license": "MIT",
+ "peer": true,
+ "dependencies": {
+ "ansi-styles": "^4.1.0",
+ "supports-color": "^7.1.0"
+ },
+ "engines": {
+ "node": ">=10"
+ },
+ "funding": {
+ "url": "https://github.com/chalk/chalk?sponsor=1"
+ }
+ },
+ "node_modules/jest-environment-node": {
+ "version": "29.7.0",
+ "resolved": "https://registry.npmjs.org/jest-environment-node/-/jest-environment-node-29.7.0.tgz",
+ "integrity": "sha512-DOSwCRqXirTOyheM+4d5YZOrWcdu0LNZ87ewUoywbcb2XR4wKgqiG8vNeYwhjFMbEkfju7wx2GYH0P2gevGvFw==",
+ "dev": true,
+ "license": "MIT",
+ "peer": true,
+ "dependencies": {
+ "@jest/environment": "^29.7.0",
+ "@jest/fake-timers": "^29.7.0",
+ "@jest/types": "^29.6.3",
+ "@types/node": "*",
+ "jest-mock": "^29.7.0",
+ "jest-util": "^29.7.0"
+ },
+ "engines": {
+ "node": "^14.15.0 || ^16.10.0 || >=18.0.0"
+ }
+ },
+ "node_modules/jest-get-type": {
+ "version": "29.6.3",
+ "resolved": "https://registry.npmjs.org/jest-get-type/-/jest-get-type-29.6.3.tgz",
+ "integrity": "sha512-zrteXnqYxfQh7l5FHyL38jL39di8H8rHoecLH3JNxH3BwOrBsNeabdap5e0I23lD4HHI8W5VFBZqG4Eaq5LNcw==",
+ "dev": true,
+ "license": "MIT",
+ "engines": {
+ "node": "^14.15.0 || ^16.10.0 || >=18.0.0"
+ }
+ },
+ "node_modules/jest-haste-map": {
+ "version": "29.7.0",
+ "resolved": "https://registry.npmjs.org/jest-haste-map/-/jest-haste-map-29.7.0.tgz",
+ "integrity": "sha512-fP8u2pyfqx0K1rGn1R9pyE0/KTn+G7PxktWidOBTqFPLYX0b9ksaMFkhK5vrS3DVun09pckLdlx90QthlW7AmA==",
+ "dev": true,
+ "license": "MIT",
+ "peer": true,
+ "dependencies": {
+ "@jest/types": "^29.6.3",
+ "@types/graceful-fs": "^4.1.3",
+ "@types/node": "*",
+ "anymatch": "^3.0.3",
+ "fb-watchman": "^2.0.0",
+ "graceful-fs": "^4.2.9",
+ "jest-regex-util": "^29.6.3",
+ "jest-util": "^29.7.0",
+ "jest-worker": "^29.7.0",
+ "micromatch": "^4.0.4",
+ "walker": "^1.0.8"
+ },
+ "engines": {
+ "node": "^14.15.0 || ^16.10.0 || >=18.0.0"
+ },
+ "optionalDependencies": {
+ "fsevents": "^2.3.2"
+ }
+ },
+ "node_modules/jest-leak-detector": {
+ "version": "29.7.0",
+ "resolved": "https://registry.npmjs.org/jest-leak-detector/-/jest-leak-detector-29.7.0.tgz",
+ "integrity": "sha512-kYA8IJcSYtST2BY9I+SMC32nDpBT3J2NvWJx8+JCuCdl/CR1I4EKUJROiP8XtCcxqgTTBGJNdbB1A8XRKbTetw==",
+ "dev": true,
+ "license": "MIT",
+ "peer": true,
+ "dependencies": {
+ "jest-get-type": "^29.6.3",
+ "pretty-format": "^29.7.0"
+ },
+ "engines": {
+ "node": "^14.15.0 || ^16.10.0 || >=18.0.0"
+ }
+ },
+ "node_modules/jest-matcher-utils": {
+ "version": "29.7.0",
+ "resolved": "https://registry.npmjs.org/jest-matcher-utils/-/jest-matcher-utils-29.7.0.tgz",
+ "integrity": "sha512-sBkD+Xi9DtcChsI3L3u0+N0opgPYnCRPtGcQYrgXmR+hmt/fYfWAL0xRXYU8eWOdfuLgBe0YCW3AFtnRLagq/g==",
+ "dev": true,
+ "license": "MIT",
+ "dependencies": {
+ "chalk": "^4.0.0",
+ "jest-diff": "^29.7.0",
+ "jest-get-type": "^29.6.3",
+ "pretty-format": "^29.7.0"
+ },
+ "engines": {
+ "node": "^14.15.0 || ^16.10.0 || >=18.0.0"
+ }
+ },
+ "node_modules/jest-matcher-utils/node_modules/chalk": {
+ "version": "4.1.2",
+ "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.2.tgz",
+ "integrity": "sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==",
+ "dev": true,
+ "license": "MIT",
+ "dependencies": {
+ "ansi-styles": "^4.1.0",
+ "supports-color": "^7.1.0"
+ },
+ "engines": {
+ "node": ">=10"
+ },
+ "funding": {
+ "url": "https://github.com/chalk/chalk?sponsor=1"
+ }
+ },
+ "node_modules/jest-message-util": {
+ "version": "29.7.0",
+ "resolved": "https://registry.npmjs.org/jest-message-util/-/jest-message-util-29.7.0.tgz",
+ "integrity": "sha512-GBEV4GRADeP+qtB2+6u61stea8mGcOT4mCtrYISZwfu9/ISHFJ/5zOMXYbpBE9RsS5+Gb63DW4FgmnKJ79Kf6w==",
+ "dev": true,
+ "license": "MIT",
+ "dependencies": {
+ "@babel/code-frame": "^7.12.13",
+ "@jest/types": "^29.6.3",
+ "@types/stack-utils": "^2.0.0",
+ "chalk": "^4.0.0",
+ "graceful-fs": "^4.2.9",
+ "micromatch": "^4.0.4",
+ "pretty-format": "^29.7.0",
+ "slash": "^3.0.0",
+ "stack-utils": "^2.0.3"
+ },
+ "engines": {
+ "node": "^14.15.0 || ^16.10.0 || >=18.0.0"
+ }
+ },
+ "node_modules/jest-message-util/node_modules/chalk": {
+ "version": "4.1.2",
+ "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.2.tgz",
+ "integrity": "sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==",
+ "dev": true,
+ "license": "MIT",
+ "dependencies": {
+ "ansi-styles": "^4.1.0",
+ "supports-color": "^7.1.0"
+ },
+ "engines": {
+ "node": ">=10"
+ },
+ "funding": {
+ "url": "https://github.com/chalk/chalk?sponsor=1"
+ }
+ },
+ "node_modules/jest-mock": {
+ "version": "29.7.0",
+ "resolved": "https://registry.npmjs.org/jest-mock/-/jest-mock-29.7.0.tgz",
+ "integrity": "sha512-ITOMZn+UkYS4ZFh83xYAOzWStloNzJFO2s8DWrE4lhtGD+AorgnbkiKERe4wQVBydIGPx059g6riW5Btp6Llnw==",
+ "dev": true,
+ "license": "MIT",
+ "peer": true,
+ "dependencies": {
+ "@jest/types": "^29.6.3",
+ "@types/node": "*",
+ "jest-util": "^29.7.0"
+ },
+ "engines": {
+ "node": "^14.15.0 || ^16.10.0 || >=18.0.0"
+ }
+ },
+ "node_modules/jest-pnp-resolver": {
+ "version": "1.2.3",
+ "resolved": "https://registry.npmjs.org/jest-pnp-resolver/-/jest-pnp-resolver-1.2.3.tgz",
+ "integrity": "sha512-+3NpwQEnRoIBtx4fyhblQDPgJI0H1IEIkX7ShLUjPGA7TtUTvI1oiKi3SR4oBR0hQhQR80l4WAe5RrXBwWMA8w==",
+ "dev": true,
+ "license": "MIT",
+ "peer": true,
+ "engines": {
+ "node": ">=6"
+ },
+ "peerDependencies": {
+ "jest-resolve": "*"
+ },
+ "peerDependenciesMeta": {
+ "jest-resolve": {
+ "optional": true
+ }
+ }
+ },
+ "node_modules/jest-regex-util": {
+ "version": "29.6.3",
+ "resolved": "https://registry.npmjs.org/jest-regex-util/-/jest-regex-util-29.6.3.tgz",
+ "integrity": "sha512-KJJBsRCyyLNWCNBOvZyRDnAIfUiRJ8v+hOBQYGn8gDyF3UegwiP4gwRR3/SDa42g1YbVycTidUF3rKjyLFDWbg==",
+ "dev": true,
+ "license": "MIT",
+ "peer": true,
+ "engines": {
+ "node": "^14.15.0 || ^16.10.0 || >=18.0.0"
+ }
+ },
+ "node_modules/jest-resolve": {
+ "version": "29.7.0",
+ "resolved": "https://registry.npmjs.org/jest-resolve/-/jest-resolve-29.7.0.tgz",
+ "integrity": "sha512-IOVhZSrg+UvVAshDSDtHyFCCBUl/Q3AAJv8iZ6ZjnZ74xzvwuzLXid9IIIPgTnY62SJjfuupMKZsZQRsCvxEgA==",
+ "dev": true,
+ "license": "MIT",
+ "peer": true,
+ "dependencies": {
+ "chalk": "^4.0.0",
+ "graceful-fs": "^4.2.9",
+ "jest-haste-map": "^29.7.0",
+ "jest-pnp-resolver": "^1.2.2",
+ "jest-util": "^29.7.0",
+ "jest-validate": "^29.7.0",
+ "resolve": "^1.20.0",
+ "resolve.exports": "^2.0.0",
+ "slash": "^3.0.0"
+ },
+ "engines": {
+ "node": "^14.15.0 || ^16.10.0 || >=18.0.0"
+ }
+ },
+ "node_modules/jest-resolve-dependencies": {
+ "version": "29.7.0",
+ "resolved": "https://registry.npmjs.org/jest-resolve-dependencies/-/jest-resolve-dependencies-29.7.0.tgz",
+ "integrity": "sha512-un0zD/6qxJ+S0et7WxeI3H5XSe9lTBBR7bOHCHXkKR6luG5mwDDlIzVQ0V5cZCuoTgEdcdwzTghYkTWfubi+nA==",
+ "dev": true,
+ "license": "MIT",
+ "peer": true,
+ "dependencies": {
+ "jest-regex-util": "^29.6.3",
+ "jest-snapshot": "^29.7.0"
+ },
+ "engines": {
+ "node": "^14.15.0 || ^16.10.0 || >=18.0.0"
+ }
+ },
+ "node_modules/jest-resolve/node_modules/chalk": {
+ "version": "4.1.2",
+ "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.2.tgz",
+ "integrity": "sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==",
+ "dev": true,
+ "license": "MIT",
+ "peer": true,
+ "dependencies": {
+ "ansi-styles": "^4.1.0",
+ "supports-color": "^7.1.0"
+ },
+ "engines": {
+ "node": ">=10"
+ },
+ "funding": {
+ "url": "https://github.com/chalk/chalk?sponsor=1"
+ }
+ },
+ "node_modules/jest-runner": {
+ "version": "29.7.0",
+ "resolved": "https://registry.npmjs.org/jest-runner/-/jest-runner-29.7.0.tgz",
+ "integrity": "sha512-fsc4N6cPCAahybGBfTRcq5wFR6fpLznMg47sY5aDpsoejOcVYFb07AHuSnR0liMcPTgBsA3ZJL6kFOjPdoNipQ==",
+ "dev": true,
+ "license": "MIT",
+ "peer": true,
+ "dependencies": {
+ "@jest/console": "^29.7.0",
+ "@jest/environment": "^29.7.0",
+ "@jest/test-result": "^29.7.0",
+ "@jest/transform": "^29.7.0",
+ "@jest/types": "^29.6.3",
+ "@types/node": "*",
+ "chalk": "^4.0.0",
+ "emittery": "^0.13.1",
+ "graceful-fs": "^4.2.9",
+ "jest-docblock": "^29.7.0",
+ "jest-environment-node": "^29.7.0",
+ "jest-haste-map": "^29.7.0",
+ "jest-leak-detector": "^29.7.0",
+ "jest-message-util": "^29.7.0",
+ "jest-resolve": "^29.7.0",
+ "jest-runtime": "^29.7.0",
+ "jest-util": "^29.7.0",
+ "jest-watcher": "^29.7.0",
+ "jest-worker": "^29.7.0",
+ "p-limit": "^3.1.0",
+ "source-map-support": "0.5.13"
+ },
+ "engines": {
+ "node": "^14.15.0 || ^16.10.0 || >=18.0.0"
+ }
+ },
+ "node_modules/jest-runner/node_modules/chalk": {
+ "version": "4.1.2",
+ "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.2.tgz",
+ "integrity": "sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==",
+ "dev": true,
+ "license": "MIT",
+ "peer": true,
+ "dependencies": {
+ "ansi-styles": "^4.1.0",
+ "supports-color": "^7.1.0"
+ },
+ "engines": {
+ "node": ">=10"
+ },
+ "funding": {
+ "url": "https://github.com/chalk/chalk?sponsor=1"
+ }
+ },
+ "node_modules/jest-runner/node_modules/p-limit": {
+ "version": "3.1.0",
+ "resolved": "https://registry.npmjs.org/p-limit/-/p-limit-3.1.0.tgz",
+ "integrity": "sha512-TYOanM3wGwNGsZN2cVTYPArw454xnXj5qmWF1bEoAc4+cU/ol7GVh7odevjp1FNHduHc3KZMcFduxU5Xc6uJRQ==",
+ "dev": true,
+ "license": "MIT",
+ "peer": true,
+ "dependencies": {
+ "yocto-queue": "^0.1.0"
+ },
+ "engines": {
+ "node": ">=10"
+ },
+ "funding": {
+ "url": "https://github.com/sponsors/sindresorhus"
+ }
+ },
+ "node_modules/jest-runner/node_modules/yocto-queue": {
+ "version": "0.1.0",
+ "resolved": "https://registry.npmjs.org/yocto-queue/-/yocto-queue-0.1.0.tgz",
+ "integrity": "sha512-rVksvsnNCdJ/ohGc6xgPwyN8eheCxsiLM8mxuE/t/mOVqJewPuO1miLpTHQiRgTKCLexL4MeAFVagts7HmNZ2Q==",
+ "dev": true,
+ "license": "MIT",
+ "peer": true,
+ "engines": {
+ "node": ">=10"
+ },
+ "funding": {
+ "url": "https://github.com/sponsors/sindresorhus"
+ }
+ },
+ "node_modules/jest-runtime": {
+ "version": "29.7.0",
+ "resolved": "https://registry.npmjs.org/jest-runtime/-/jest-runtime-29.7.0.tgz",
+ "integrity": "sha512-gUnLjgwdGqW7B4LvOIkbKs9WGbn+QLqRQQ9juC6HndeDiezIwhDP+mhMwHWCEcfQ5RUXa6OPnFF8BJh5xegwwQ==",
+ "dev": true,
+ "license": "MIT",
+ "peer": true,
+ "dependencies": {
+ "@jest/environment": "^29.7.0",
+ "@jest/fake-timers": "^29.7.0",
+ "@jest/globals": "^29.7.0",
+ "@jest/source-map": "^29.6.3",
+ "@jest/test-result": "^29.7.0",
+ "@jest/transform": "^29.7.0",
+ "@jest/types": "^29.6.3",
+ "@types/node": "*",
+ "chalk": "^4.0.0",
+ "cjs-module-lexer": "^1.0.0",
+ "collect-v8-coverage": "^1.0.0",
+ "glob": "^7.1.3",
+ "graceful-fs": "^4.2.9",
+ "jest-haste-map": "^29.7.0",
+ "jest-message-util": "^29.7.0",
+ "jest-mock": "^29.7.0",
+ "jest-regex-util": "^29.6.3",
+ "jest-resolve": "^29.7.0",
+ "jest-snapshot": "^29.7.0",
+ "jest-util": "^29.7.0",
+ "slash": "^3.0.0",
+ "strip-bom": "^4.0.0"
+ },
+ "engines": {
+ "node": "^14.15.0 || ^16.10.0 || >=18.0.0"
+ }
+ },
+ "node_modules/jest-runtime/node_modules/chalk": {
+ "version": "4.1.2",
+ "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.2.tgz",
+ "integrity": "sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==",
+ "dev": true,
+ "license": "MIT",
+ "peer": true,
+ "dependencies": {
+ "ansi-styles": "^4.1.0",
+ "supports-color": "^7.1.0"
+ },
+ "engines": {
+ "node": ">=10"
+ },
+ "funding": {
+ "url": "https://github.com/chalk/chalk?sponsor=1"
+ }
+ },
+ "node_modules/jest-snapshot": {
+ "version": "29.7.0",
+ "resolved": "https://registry.npmjs.org/jest-snapshot/-/jest-snapshot-29.7.0.tgz",
+ "integrity": "sha512-Rm0BMWtxBcioHr1/OX5YCP8Uov4riHvKPknOGs804Zg9JGZgmIBkbtlxJC/7Z4msKYVbIJtfU+tKb8xlYNfdkw==",
+ "dev": true,
+ "license": "MIT",
+ "peer": true,
+ "dependencies": {
+ "@babel/core": "^7.11.6",
+ "@babel/generator": "^7.7.2",
+ "@babel/plugin-syntax-jsx": "^7.7.2",
+ "@babel/plugin-syntax-typescript": "^7.7.2",
+ "@babel/types": "^7.3.3",
+ "@jest/expect-utils": "^29.7.0",
+ "@jest/transform": "^29.7.0",
+ "@jest/types": "^29.6.3",
+ "babel-preset-current-node-syntax": "^1.0.0",
+ "chalk": "^4.0.0",
+ "expect": "^29.7.0",
+ "graceful-fs": "^4.2.9",
+ "jest-diff": "^29.7.0",
+ "jest-get-type": "^29.6.3",
+ "jest-matcher-utils": "^29.7.0",
+ "jest-message-util": "^29.7.0",
+ "jest-util": "^29.7.0",
+ "natural-compare": "^1.4.0",
+ "pretty-format": "^29.7.0",
+ "semver": "^7.5.3"
+ },
+ "engines": {
+ "node": "^14.15.0 || ^16.10.0 || >=18.0.0"
+ }
+ },
+ "node_modules/jest-snapshot/node_modules/chalk": {
+ "version": "4.1.2",
+ "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.2.tgz",
+ "integrity": "sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==",
+ "dev": true,
+ "license": "MIT",
+ "peer": true,
+ "dependencies": {
+ "ansi-styles": "^4.1.0",
+ "supports-color": "^7.1.0"
+ },
+ "engines": {
+ "node": ">=10"
+ },
+ "funding": {
+ "url": "https://github.com/chalk/chalk?sponsor=1"
+ }
+ },
+ "node_modules/jest-snapshot/node_modules/semver": {
+ "version": "7.6.3",
+ "resolved": "https://registry.npmjs.org/semver/-/semver-7.6.3.tgz",
+ "integrity": "sha512-oVekP1cKtI+CTDvHWYFUcMtsK/00wmAEfyqKfNdARm8u1wNVhSgaX7A8d4UuIlUI5e84iEwOhs7ZPYRmzU9U6A==",
+ "dev": true,
+ "license": "ISC",
+ "peer": true,
+ "bin": {
+ "semver": "bin/semver.js"
+ },
+ "engines": {
+ "node": ">=10"
+ }
+ },
+ "node_modules/jest-util": {
+ "version": "29.7.0",
+ "resolved": "https://registry.npmjs.org/jest-util/-/jest-util-29.7.0.tgz",
+ "integrity": "sha512-z6EbKajIpqGKU56y5KBUgy1dt1ihhQJgWzUlZHArA/+X2ad7Cb5iF+AK1EWVL/Bo7Rz9uurpqw6SiBCefUbCGA==",
+ "dev": true,
+ "license": "MIT",
+ "dependencies": {
+ "@jest/types": "^29.6.3",
+ "@types/node": "*",
+ "chalk": "^4.0.0",
+ "ci-info": "^3.2.0",
+ "graceful-fs": "^4.2.9",
+ "picomatch": "^2.2.3"
+ },
+ "engines": {
+ "node": "^14.15.0 || ^16.10.0 || >=18.0.0"
+ }
+ },
+ "node_modules/jest-util/node_modules/chalk": {
+ "version": "4.1.2",
+ "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.2.tgz",
+ "integrity": "sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==",
+ "dev": true,
+ "license": "MIT",
+ "dependencies": {
+ "ansi-styles": "^4.1.0",
+ "supports-color": "^7.1.0"
+ },
+ "engines": {
+ "node": ">=10"
+ },
+ "funding": {
+ "url": "https://github.com/chalk/chalk?sponsor=1"
+ }
+ },
+ "node_modules/jest-validate": {
+ "version": "29.7.0",
+ "resolved": "https://registry.npmjs.org/jest-validate/-/jest-validate-29.7.0.tgz",
+ "integrity": "sha512-ZB7wHqaRGVw/9hST/OuFUReG7M8vKeq0/J2egIGLdvjHCmYqGARhzXmtgi+gVeZ5uXFF219aOc3Ls2yLg27tkw==",
+ "dev": true,
+ "license": "MIT",
+ "peer": true,
+ "dependencies": {
+ "@jest/types": "^29.6.3",
+ "camelcase": "^6.2.0",
+ "chalk": "^4.0.0",
+ "jest-get-type": "^29.6.3",
+ "leven": "^3.1.0",
+ "pretty-format": "^29.7.0"
+ },
+ "engines": {
+ "node": "^14.15.0 || ^16.10.0 || >=18.0.0"
+ }
+ },
+ "node_modules/jest-validate/node_modules/camelcase": {
+ "version": "6.3.0",
+ "resolved": "https://registry.npmjs.org/camelcase/-/camelcase-6.3.0.tgz",
+ "integrity": "sha512-Gmy6FhYlCY7uOElZUSbxo2UCDH8owEk996gkbrpsgGtrJLM3J7jGxl9Ic7Qwwj4ivOE5AWZWRMecDdF7hqGjFA==",
+ "dev": true,
+ "license": "MIT",
+ "peer": true,
+ "engines": {
+ "node": ">=10"
+ },
+ "funding": {
+ "url": "https://github.com/sponsors/sindresorhus"
+ }
+ },
+ "node_modules/jest-validate/node_modules/chalk": {
+ "version": "4.1.2",
+ "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.2.tgz",
+ "integrity": "sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==",
+ "dev": true,
+ "license": "MIT",
+ "peer": true,
+ "dependencies": {
+ "ansi-styles": "^4.1.0",
+ "supports-color": "^7.1.0"
+ },
+ "engines": {
+ "node": ">=10"
+ },
+ "funding": {
+ "url": "https://github.com/chalk/chalk?sponsor=1"
+ }
+ },
+ "node_modules/jest-watcher": {
+ "version": "29.7.0",
+ "resolved": "https://registry.npmjs.org/jest-watcher/-/jest-watcher-29.7.0.tgz",
+ "integrity": "sha512-49Fg7WXkU3Vl2h6LbLtMQ/HyB6rXSIX7SqvBLQmssRBGN9I0PNvPmAmCWSOY6SOvrjhI/F7/bGAv9RtnsPA03g==",
+ "dev": true,
+ "license": "MIT",
+ "peer": true,
+ "dependencies": {
+ "@jest/test-result": "^29.7.0",
+ "@jest/types": "^29.6.3",
+ "@types/node": "*",
+ "ansi-escapes": "^4.2.1",
+ "chalk": "^4.0.0",
+ "emittery": "^0.13.1",
+ "jest-util": "^29.7.0",
+ "string-length": "^4.0.1"
+ },
+ "engines": {
+ "node": "^14.15.0 || ^16.10.0 || >=18.0.0"
+ }
+ },
+ "node_modules/jest-watcher/node_modules/chalk": {
+ "version": "4.1.2",
+ "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.2.tgz",
+ "integrity": "sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==",
+ "dev": true,
+ "license": "MIT",
+ "peer": true,
+ "dependencies": {
+ "ansi-styles": "^4.1.0",
+ "supports-color": "^7.1.0"
+ },
+ "engines": {
+ "node": ">=10"
+ },
+ "funding": {
+ "url": "https://github.com/chalk/chalk?sponsor=1"
+ }
+ },
+ "node_modules/jest-worker": {
+ "version": "29.7.0",
+ "resolved": "https://registry.npmjs.org/jest-worker/-/jest-worker-29.7.0.tgz",
+ "integrity": "sha512-eIz2msL/EzL9UFTFFx7jBTkeZfku0yUAyZZZmJ93H2TYEiroIx2PQjEXcwYtYl8zXCxb+PAmA2hLIt/6ZEkPHw==",
+ "dev": true,
+ "license": "MIT",
+ "peer": true,
+ "dependencies": {
+ "@types/node": "*",
+ "jest-util": "^29.7.0",
+ "merge-stream": "^2.0.0",
+ "supports-color": "^8.0.0"
+ },
+ "engines": {
+ "node": "^14.15.0 || ^16.10.0 || >=18.0.0"
+ }
+ },
+ "node_modules/jest-worker/node_modules/supports-color": {
+ "version": "8.1.1",
+ "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-8.1.1.tgz",
+ "integrity": "sha512-MpUEN2OodtUzxvKQl72cUF7RQ5EiHsGvSsVG0ia9c5RbWGL2CI4C7EpPS8UTBIplnlzZiNuV56w+FuNxy3ty2Q==",
+ "dev": true,
+ "license": "MIT",
+ "peer": true,
+ "dependencies": {
+ "has-flag": "^4.0.0"
+ },
+ "engines": {
+ "node": ">=10"
+ },
+ "funding": {
+ "url": "https://github.com/chalk/supports-color?sponsor=1"
+ }
+ },
+ "node_modules/jiti": {
+ "version": "1.21.6",
+ "resolved": "https://registry.npmjs.org/jiti/-/jiti-1.21.6.tgz",
+ "integrity": "sha512-2yTgeWTWzMWkHu6Jp9NKgePDaYHbntiwvYuuJLbbN9vl7DC9DvXKOB2BC3ZZ92D3cvV/aflH0osDfwpHepQ53w==",
+ "dev": true,
+ "license": "MIT",
+ "bin": {
+ "jiti": "bin/jiti.js"
+ }
+ },
+ "node_modules/jose": {
+ "version": "5.9.6",
+ "resolved": "https://registry.npmjs.org/jose/-/jose-5.9.6.tgz",
+ "integrity": "sha512-AMlnetc9+CV9asI19zHmrgS/WYsWUwCn2R7RzlbJWD7F9eWYUTGyBmU9o6PxngtLGOiDGPRu+Uc4fhKzbpteZQ==",
+ "license": "MIT",
+ "funding": {
+ "url": "https://github.com/sponsors/panva"
+ }
+ },
+ "node_modules/jotai": {
+ "version": "2.8.0",
+ "resolved": "https://registry.npmjs.org/jotai/-/jotai-2.8.0.tgz",
+ "integrity": "sha512-yZNMC36FdLOksOr8qga0yLf14miCJlEThlp5DeFJNnqzm2+ZG7wLcJzoOyij5K6U6Xlc5ljQqPDlJRgqW0Y18g==",
+ "license": "MIT",
+ "engines": {
+ "node": ">=12.20.0"
+ },
+ "peerDependencies": {
+ "@types/react": ">=17.0.0",
+ "react": ">=17.0.0"
+ },
+ "peerDependenciesMeta": {
+ "@types/react": {
+ "optional": true
+ },
+ "react": {
+ "optional": true
+ }
+ }
+ },
+ "node_modules/js-tokens": {
+ "version": "9.0.1",
+ "resolved": "https://registry.npmjs.org/js-tokens/-/js-tokens-9.0.1.tgz",
+ "integrity": "sha512-mxa9E9ITFOt0ban3j6L5MpjwegGz6lBQmM1IJkWeBZGcMxto50+eWdjC/52xDbS2vy0k7vIMK0Fe2wfL9OQSpQ==",
+ "license": "MIT"
+ },
+ "node_modules/js-yaml": {
+ "version": "3.14.1",
+ "resolved": "https://registry.npmjs.org/js-yaml/-/js-yaml-3.14.1.tgz",
+ "integrity": "sha512-okMH7OXXJ7YrN9Ok3/SXrnu4iX9yOk+25nqX4imS2npuvTYDmo/QEZoqwZkYaIDk3jVvBOTOIEgEhaLOynBS9g==",
+ "dev": true,
+ "license": "MIT",
+ "peer": true,
+ "dependencies": {
+ "argparse": "^1.0.7",
+ "esprima": "^4.0.0"
+ },
+ "bin": {
+ "js-yaml": "bin/js-yaml.js"
+ }
+ },
+ "node_modules/jsesc": {
+ "version": "3.0.2",
+ "resolved": "https://registry.npmjs.org/jsesc/-/jsesc-3.0.2.tgz",
+ "integrity": "sha512-xKqzzWXDttJuOcawBt4KnKHHIf5oQ/Cxax+0PWFG+DFDgHNAdi+TXECADI+RYiFUMmx8792xsMbbgXj4CwnP4g==",
+ "dev": true,
+ "license": "MIT",
+ "peer": true,
+ "bin": {
+ "jsesc": "bin/jsesc"
+ },
+ "engines": {
+ "node": ">=6"
+ }
+ },
+ "node_modules/json-bigint": {
+ "version": "1.0.0",
+ "resolved": "https://registry.npmjs.org/json-bigint/-/json-bigint-1.0.0.tgz",
+ "integrity": "sha512-SiPv/8VpZuWbvLSMtTDU8hEfrZWg/mH/nV/b4o0CYbSxu1UIQPLdwKOCIyLQX+VIPO5vrLX3i8qtqFyhdPSUSQ==",
+ "license": "MIT",
+ "dependencies": {
+ "bignumber.js": "^9.0.0"
+ }
+ },
+ "node_modules/json-buffer": {
+ "version": "3.0.1",
+ "resolved": "https://registry.npmjs.org/json-buffer/-/json-buffer-3.0.1.tgz",
+ "integrity": "sha512-4bV5BfR2mqfQTJm+V5tPPdf+ZpuhiIvTuAB5g8kcrXOZpTT/QwwVRWBywX1ozr6lEuPdbHxwaJlm9G6mI2sfSQ==",
+ "dev": true,
+ "license": "MIT"
+ },
+ "node_modules/json-parse-even-better-errors": {
+ "version": "2.3.1",
+ "resolved": "https://registry.npmjs.org/json-parse-even-better-errors/-/json-parse-even-better-errors-2.3.1.tgz",
+ "integrity": "sha512-xyFwyhro/JEof6Ghe2iz2NcXoj2sloNsWr/XsERDK/oiPCfaNhl5ONfp+jQdAZRQQ0IJWNzH9zIZF7li91kh2w==",
+ "dev": true,
+ "license": "MIT",
+ "peer": true
+ },
+ "node_modules/json-schema": {
+ "version": "0.4.0",
+ "resolved": "https://registry.npmjs.org/json-schema/-/json-schema-0.4.0.tgz",
+ "integrity": "sha512-es94M3nTIfsEPisRafak+HDLfHXnKBhV3vU5eqPcS3flIWqcxJWgXHXiey3YrpaNsanY5ei1VoYEbOzijuq9BA==",
+ "license": "(AFL-2.1 OR BSD-3-Clause)"
+ },
+ "node_modules/json-schema-traverse": {
+ "version": "0.4.1",
+ "resolved": "https://registry.npmjs.org/json-schema-traverse/-/json-schema-traverse-0.4.1.tgz",
+ "integrity": "sha512-xbbCH5dCYU5T8LcEhhuh7HJ88HXuW3qsI3Y0zOZFKfZEHcpWiHU/Jxzk629Brsab/mMiHQti9wMP+845RPe3Vg==",
+ "dev": true,
+ "license": "MIT"
+ },
+ "node_modules/json-stable-stringify-without-jsonify": {
+ "version": "1.0.1",
+ "resolved": "https://registry.npmjs.org/json-stable-stringify-without-jsonify/-/json-stable-stringify-without-jsonify-1.0.1.tgz",
+ "integrity": "sha512-Bdboy+l7tA3OGW6FjyFHWkP5LuByj1Tk33Ljyq0axyzdk9//JSi2u3fP1QSmd1KNwq6VOKYGlAu87CisVir6Pw==",
+ "dev": true,
+ "license": "MIT"
+ },
+ "node_modules/json5": {
+ "version": "2.2.3",
+ "resolved": "https://registry.npmjs.org/json5/-/json5-2.2.3.tgz",
+ "integrity": "sha512-XmOWe7eyHYH14cLdVPoyg+GOH3rYX++KpzrylJwSW98t3Nk+U8XOl8FWKOgwtzdb8lXGf6zYwDUzeHMWfxasyg==",
+ "dev": true,
+ "license": "MIT",
+ "bin": {
+ "json5": "lib/cli.js"
+ },
+ "engines": {
+ "node": ">=6"
+ }
+ },
+ "node_modules/jsondiffpatch": {
+ "version": "0.6.0",
+ "resolved": "https://registry.npmjs.org/jsondiffpatch/-/jsondiffpatch-0.6.0.tgz",
+ "integrity": "sha512-3QItJOXp2AP1uv7waBkao5nCvhEv+QmJAd38Ybq7wNI74Q+BBmnLn4EDKz6yI9xGAIQoUF87qHt+kc1IVxB4zQ==",
+ "license": "MIT",
+ "dependencies": {
+ "@types/diff-match-patch": "^1.0.36",
+ "chalk": "^5.3.0",
+ "diff-match-patch": "^1.0.5"
+ },
+ "bin": {
+ "jsondiffpatch": "bin/jsondiffpatch.js"
+ },
+ "engines": {
+ "node": "^18.0.0 || >=20.0.0"
+ }
+ },
+ "node_modules/jsonwebtoken": {
+ "version": "9.0.2",
+ "resolved": "https://registry.npmjs.org/jsonwebtoken/-/jsonwebtoken-9.0.2.tgz",
+ "integrity": "sha512-PRp66vJ865SSqOlgqS8hujT5U4AOgMfhrwYIuIhfKaoSCZcirrmASQr8CX7cUg+RMih+hgznrjp99o+W4pJLHQ==",
+ "license": "MIT",
+ "dependencies": {
+ "jws": "^3.2.2",
+ "lodash.includes": "^4.3.0",
+ "lodash.isboolean": "^3.0.3",
+ "lodash.isinteger": "^4.0.4",
+ "lodash.isnumber": "^3.0.3",
+ "lodash.isplainobject": "^4.0.6",
+ "lodash.isstring": "^4.0.1",
+ "lodash.once": "^4.0.0",
+ "ms": "^2.1.1",
+ "semver": "^7.5.4"
+ },
+ "engines": {
+ "node": ">=12",
+ "npm": ">=6"
+ }
+ },
+ "node_modules/jsonwebtoken/node_modules/jwa": {
+ "version": "1.4.1",
+ "resolved": "https://registry.npmjs.org/jwa/-/jwa-1.4.1.tgz",
+ "integrity": "sha512-qiLX/xhEEFKUAJ6FiBMbes3w9ATzyk5W7Hvzpa/SLYdxNtng+gcurvrI7TbACjIXlsJyr05/S1oUhZrc63evQA==",
+ "license": "MIT",
+ "dependencies": {
+ "buffer-equal-constant-time": "1.0.1",
+ "ecdsa-sig-formatter": "1.0.11",
+ "safe-buffer": "^5.0.1"
+ }
+ },
+ "node_modules/jsonwebtoken/node_modules/jws": {
+ "version": "3.2.2",
+ "resolved": "https://registry.npmjs.org/jws/-/jws-3.2.2.tgz",
+ "integrity": "sha512-YHlZCB6lMTllWDtSPHz/ZXTsi8S00usEV6v1tjq8tOUZzw7DpSDWVXjXDre6ed1w/pd495ODpHZYSdkRTsa0HA==",
+ "license": "MIT",
+ "dependencies": {
+ "jwa": "^1.4.1",
+ "safe-buffer": "^5.0.1"
+ }
+ },
+ "node_modules/jsonwebtoken/node_modules/semver": {
+ "version": "7.6.3",
+ "resolved": "https://registry.npmjs.org/semver/-/semver-7.6.3.tgz",
+ "integrity": "sha512-oVekP1cKtI+CTDvHWYFUcMtsK/00wmAEfyqKfNdARm8u1wNVhSgaX7A8d4UuIlUI5e84iEwOhs7ZPYRmzU9U6A==",
+ "license": "ISC",
+ "bin": {
+ "semver": "bin/semver.js"
+ },
+ "engines": {
+ "node": ">=10"
+ }
+ },
+ "node_modules/jsx-ast-utils": {
+ "version": "3.3.5",
+ "resolved": "https://registry.npmjs.org/jsx-ast-utils/-/jsx-ast-utils-3.3.5.tgz",
+ "integrity": "sha512-ZZow9HBI5O6EPgSJLUb8n2NKgmVWTwCvHGwFuJlMjvLFqlGG6pjirPhtdsseaLZjSibD8eegzmYpUZwoIlj2cQ==",
+ "dev": true,
+ "license": "MIT",
+ "dependencies": {
+ "array-includes": "^3.1.6",
+ "array.prototype.flat": "^1.3.1",
+ "object.assign": "^4.1.4",
+ "object.values": "^1.1.6"
+ },
+ "engines": {
+ "node": ">=4.0"
+ }
+ },
+ "node_modules/jszip": {
+ "version": "3.10.1",
+ "resolved": "https://registry.npmjs.org/jszip/-/jszip-3.10.1.tgz",
+ "integrity": "sha512-xXDvecyTpGLrqFrvkrUSoxxfJI5AH7U8zxxtVclpsUtMCq4JQ290LY8AW5c7Ggnr/Y/oK+bQMbqK2qmtk3pN4g==",
+ "license": "(MIT OR GPL-3.0-or-later)",
+ "dependencies": {
+ "lie": "~3.3.0",
+ "pako": "~1.0.2",
+ "readable-stream": "~2.3.6",
+ "setimmediate": "^1.0.5"
+ }
+ },
+ "node_modules/jwa": {
+ "version": "2.0.0",
+ "resolved": "https://registry.npmjs.org/jwa/-/jwa-2.0.0.tgz",
+ "integrity": "sha512-jrZ2Qx916EA+fq9cEAeCROWPTfCwi1IVHqT2tapuqLEVVDKFDENFw1oL+MwrTvH6msKxsd1YTDVw6uKEcsrLEA==",
+ "license": "MIT",
+ "dependencies": {
+ "buffer-equal-constant-time": "1.0.1",
+ "ecdsa-sig-formatter": "1.0.11",
+ "safe-buffer": "^5.0.1"
+ }
+ },
+ "node_modules/jws": {
+ "version": "4.0.0",
+ "resolved": "https://registry.npmjs.org/jws/-/jws-4.0.0.tgz",
+ "integrity": "sha512-KDncfTmOZoOMTFG4mBlG0qUIOlc03fmzH+ru6RgYVZhPkyiy/92Owlt/8UEN+a4TXR1FQetfIpJE8ApdvdVxTg==",
+ "license": "MIT",
+ "dependencies": {
+ "jwa": "^2.0.0",
+ "safe-buffer": "^5.0.1"
+ }
+ },
+ "node_modules/katex": {
+ "version": "0.16.11",
+ "resolved": "https://registry.npmjs.org/katex/-/katex-0.16.11.tgz",
+ "integrity": "sha512-RQrI8rlHY92OLf3rho/Ts8i/XvjgguEjOkO1BEXcU3N8BqPpSzBNwV/G0Ukr+P/l3ivvJUE/Fa/CwbS6HesGNQ==",
+ "funding": [
+ "https://opencollective.com/katex",
+ "https://github.com/sponsors/katex"
+ ],
+ "license": "MIT",
+ "dependencies": {
+ "commander": "^8.3.0"
+ },
+ "bin": {
+ "katex": "cli.js"
+ }
+ },
+ "node_modules/keyv": {
+ "version": "4.5.4",
+ "resolved": "https://registry.npmjs.org/keyv/-/keyv-4.5.4.tgz",
+ "integrity": "sha512-oxVHkHR/EJf2CNXnWxRLW6mg7JyCCUcG0DtEGmL2ctUo1PNTin1PUil+r/+4r5MpVgC/fn1kjsx7mjSujKqIpw==",
+ "dev": true,
+ "license": "MIT",
+ "dependencies": {
+ "json-buffer": "3.0.1"
+ }
+ },
+ "node_modules/kleur": {
+ "version": "3.0.3",
+ "resolved": "https://registry.npmjs.org/kleur/-/kleur-3.0.3.tgz",
+ "integrity": "sha512-eTIzlVOSUR+JxdDFepEYcBMtZ9Qqdef+rnzWdRZuMbOywu5tO2w2N7rqjoANZ5k9vywhL6Br1VRjUIgTQx4E8w==",
+ "dev": true,
+ "license": "MIT",
+ "peer": true,
+ "engines": {
+ "node": ">=6"
+ }
+ },
+ "node_modules/language-subtag-registry": {
+ "version": "0.3.23",
+ "resolved": "https://registry.npmjs.org/language-subtag-registry/-/language-subtag-registry-0.3.23.tgz",
+ "integrity": "sha512-0K65Lea881pHotoGEa5gDlMxt3pctLi2RplBb7Ezh4rRdLEOtgi7n4EwK9lamnUCkKBqaeKRVebTq6BAxSkpXQ==",
+ "dev": true,
+ "license": "CC0-1.0"
+ },
+ "node_modules/language-tags": {
+ "version": "1.0.9",
+ "resolved": "https://registry.npmjs.org/language-tags/-/language-tags-1.0.9.tgz",
+ "integrity": "sha512-MbjN408fEndfiQXbFQ1vnd+1NoLDsnQW41410oQBXiyXDMYH5z505juWa4KUE1LqxRC7DgOgZDbKLxHIwm27hA==",
+ "dev": true,
+ "license": "MIT",
+ "dependencies": {
+ "language-subtag-registry": "^0.3.20"
+ },
+ "engines": {
+ "node": ">=0.10"
+ }
+ },
+ "node_modules/leac": {
+ "version": "0.6.0",
+ "resolved": "https://registry.npmjs.org/leac/-/leac-0.6.0.tgz",
+ "integrity": "sha512-y+SqErxb8h7nE/fiEX07jsbuhrpO9lL8eca7/Y1nuWV2moNlXhyd59iDGcRf6moVyDMbmTNzL40SUyrFU/yDpg==",
+ "license": "MIT",
+ "funding": {
+ "url": "https://ko-fi.com/killymxi"
+ }
+ },
+ "node_modules/leven": {
+ "version": "3.1.0",
+ "resolved": "https://registry.npmjs.org/leven/-/leven-3.1.0.tgz",
+ "integrity": "sha512-qsda+H8jTaUaN/x5vzW2rzc+8Rw4TAQ/4KjB46IwK5VH+IlVeeeje/EoZRpiXvIqjFgK84QffqPztGI3VBLG1A==",
+ "dev": true,
+ "license": "MIT",
+ "peer": true,
+ "engines": {
+ "node": ">=6"
+ }
+ },
+ "node_modules/levn": {
+ "version": "0.4.1",
+ "resolved": "https://registry.npmjs.org/levn/-/levn-0.4.1.tgz",
+ "integrity": "sha512-+bT2uH4E5LGE7h/n3evcS/sQlJXCpIp6ym8OWJ5eV6+67Dsql/LaaT7qJBAt2rzfoa/5QBGBhxDix1dMt2kQKQ==",
+ "dev": true,
+ "license": "MIT",
+ "dependencies": {
+ "prelude-ls": "^1.2.1",
+ "type-check": "~0.4.0"
+ },
+ "engines": {
+ "node": ">= 0.8.0"
+ }
+ },
+ "node_modules/lie": {
+ "version": "3.3.0",
+ "resolved": "https://registry.npmjs.org/lie/-/lie-3.3.0.tgz",
+ "integrity": "sha512-UaiMJzeWRlEujzAuw5LokY1L5ecNQYZKfmyZ9L7wDHb/p5etKaxXhohBcrw0EYby+G/NA52vRSN4N39dxHAIwQ==",
+ "license": "MIT",
+ "dependencies": {
+ "immediate": "~3.0.5"
+ }
+ },
+ "node_modules/lilconfig": {
+ "version": "3.1.3",
+ "resolved": "https://registry.npmjs.org/lilconfig/-/lilconfig-3.1.3.tgz",
+ "integrity": "sha512-/vlFKAoH5Cgt3Ie+JLhRbwOsCQePABiU3tJ1egGvyQ+33R/vcwM2Zl2QR/LzjsBeItPt3oSVXapn+m4nQDvpzw==",
+ "dev": true,
+ "license": "MIT",
+ "engines": {
+ "node": ">=14"
+ },
+ "funding": {
+ "url": "https://github.com/sponsors/antonk52"
+ }
+ },
+ "node_modules/lines-and-columns": {
+ "version": "1.2.4",
+ "resolved": "https://registry.npmjs.org/lines-and-columns/-/lines-and-columns-1.2.4.tgz",
+ "integrity": "sha512-7ylylesZQ/PV29jhEDl3Ufjo6ZX7gCqJr5F7PKrqc93v7fzSymt1BpwEU8nAUXs8qzzvqhbjhK5QZg6Mt/HkBg==",
+ "dev": true,
+ "license": "MIT"
+ },
+ "node_modules/linkify-it": {
+ "version": "5.0.0",
+ "resolved": "https://registry.npmjs.org/linkify-it/-/linkify-it-5.0.0.tgz",
+ "integrity": "sha512-5aHCbzQRADcdP+ATqnDuhhJ/MRIqDkZX5pyjFHRRysS8vZ5AbqGEoFIb6pYHPZ+L/OC2Lc+xT8uHVVR5CAK/wQ==",
+ "license": "MIT",
+ "dependencies": {
+ "uc.micro": "^2.0.0"
+ }
+ },
+ "node_modules/locate-character": {
+ "version": "3.0.0",
+ "resolved": "https://registry.npmjs.org/locate-character/-/locate-character-3.0.0.tgz",
+ "integrity": "sha512-SW13ws7BjaeJ6p7Q6CO2nchbYEc3X3J6WrmTTDto7yMPqVSZTUyY5Tjbid+Ab8gLnATtygYtiDIJGQRRn2ZOiA==",
+ "license": "MIT",
+ "peer": true
+ },
+ "node_modules/locate-path": {
+ "version": "5.0.0",
+ "resolved": "https://registry.npmjs.org/locate-path/-/locate-path-5.0.0.tgz",
+ "integrity": "sha512-t7hw9pI+WvuwNJXwk5zVHpyhIqzg2qTlklJOf0mVxGSbe3Fp2VieZcduNYjaLDoy6p9uGpQEGWG87WpMKlNq8g==",
+ "dev": true,
+ "license": "MIT",
+ "peer": true,
+ "dependencies": {
+ "p-locate": "^4.1.0"
+ },
+ "engines": {
+ "node": ">=8"
+ }
+ },
+ "node_modules/lodash": {
+ "version": "4.17.21",
+ "resolved": "https://registry.npmjs.org/lodash/-/lodash-4.17.21.tgz",
+ "integrity": "sha512-v2kDEe57lecTulaDIuNTPy3Ry4gLGJ6Z1O3vE1krgXZNrsQ+LFTGHVxVjcXPs17LhbZVGedAJv8XZ1tvj5FvSg==",
+ "license": "MIT"
+ },
+ "node_modules/lodash.castarray": {
+ "version": "4.4.0",
+ "resolved": "https://registry.npmjs.org/lodash.castarray/-/lodash.castarray-4.4.0.tgz",
+ "integrity": "sha512-aVx8ztPv7/2ULbArGJ2Y42bG1mEQ5mGjpdvrbJcJFU3TbYybe+QlLS4pst9zV52ymy2in1KpFPiZnAOATxD4+Q==",
+ "dev": true,
+ "license": "MIT"
+ },
+ "node_modules/lodash.includes": {
+ "version": "4.3.0",
+ "resolved": "https://registry.npmjs.org/lodash.includes/-/lodash.includes-4.3.0.tgz",
+ "integrity": "sha512-W3Bx6mdkRTGtlJISOvVD/lbqjTlPPUDTMnlXZFnVwi9NKJ6tiAk6LVdlhZMm17VZisqhKcgzpO5Wz91PCt5b0w==",
+ "license": "MIT"
+ },
+ "node_modules/lodash.isboolean": {
+ "version": "3.0.3",
+ "resolved": "https://registry.npmjs.org/lodash.isboolean/-/lodash.isboolean-3.0.3.tgz",
+ "integrity": "sha512-Bz5mupy2SVbPHURB98VAcw+aHh4vRV5IPNhILUCsOzRmsTmSQ17jIuqopAentWoehktxGd9e/hbIXq980/1QJg==",
+ "license": "MIT"
+ },
+ "node_modules/lodash.isinteger": {
+ "version": "4.0.4",
+ "resolved": "https://registry.npmjs.org/lodash.isinteger/-/lodash.isinteger-4.0.4.tgz",
+ "integrity": "sha512-DBwtEWN2caHQ9/imiNeEA5ys1JoRtRfY3d7V9wkqtbycnAmTvRRmbHKDV4a0EYc678/dia0jrte4tjYwVBaZUA==",
+ "license": "MIT"
+ },
+ "node_modules/lodash.isnumber": {
+ "version": "3.0.3",
+ "resolved": "https://registry.npmjs.org/lodash.isnumber/-/lodash.isnumber-3.0.3.tgz",
+ "integrity": "sha512-QYqzpfwO3/CWf3XP+Z+tkQsfaLL/EnUlXWVkIk5FUPc4sBdTehEqZONuyRt2P67PXAk+NXmTBcc97zw9t1FQrw==",
+ "license": "MIT"
+ },
+ "node_modules/lodash.isplainobject": {
+ "version": "4.0.6",
+ "resolved": "https://registry.npmjs.org/lodash.isplainobject/-/lodash.isplainobject-4.0.6.tgz",
+ "integrity": "sha512-oSXzaWypCMHkPC3NvBEaPHf0KsA5mvPrOPgQWDsbg8n7orZ290M0BmC/jgRZ4vcJ6DTAhjrsSYgdsW/F+MFOBA==",
+ "license": "MIT"
+ },
+ "node_modules/lodash.isstring": {
+ "version": "4.0.1",
+ "resolved": "https://registry.npmjs.org/lodash.isstring/-/lodash.isstring-4.0.1.tgz",
+ "integrity": "sha512-0wJxfxH1wgO3GrbuP+dTTk7op+6L41QCXbGINEmD+ny/G/eCqGzxyCsh7159S+mgDDcoarnBw6PC1PS5+wUGgw==",
+ "license": "MIT"
+ },
+ "node_modules/lodash.memoize": {
+ "version": "4.1.2",
+ "resolved": "https://registry.npmjs.org/lodash.memoize/-/lodash.memoize-4.1.2.tgz",
+ "integrity": "sha512-t7j+NzmgnQzTAYXcsHYLgimltOV1MXHtlOWf6GjL9Kj8GK5FInw5JotxvbOs+IvV1/Dzo04/fCGfLVs7aXb4Ag==",
+ "dev": true,
+ "license": "MIT"
+ },
+ "node_modules/lodash.merge": {
+ "version": "4.6.2",
+ "resolved": "https://registry.npmjs.org/lodash.merge/-/lodash.merge-4.6.2.tgz",
+ "integrity": "sha512-0KpjqXRVvrYyCsX1swR/XTK0va6VQkQM6MNo7PqW77ByjAhoARA8EfrP1N4+KlKj8YS0ZUCtRT/YUuhyYDujIQ==",
+ "dev": true,
+ "license": "MIT"
+ },
+ "node_modules/lodash.once": {
+ "version": "4.1.1",
+ "resolved": "https://registry.npmjs.org/lodash.once/-/lodash.once-4.1.1.tgz",
+ "integrity": "sha512-Sb487aTOCr9drQVL8pIxOzVhafOjZN9UU54hiN8PU3uAiSV7lx1yYNpbNmex2PK6dSJoNTSJUUswT651yww3Mg==",
+ "license": "MIT"
+ },
+ "node_modules/longest-streak": {
+ "version": "3.1.0",
+ "resolved": "https://registry.npmjs.org/longest-streak/-/longest-streak-3.1.0.tgz",
+ "integrity": "sha512-9Ri+o0JYgehTaVBBDoMqIl8GXtbWg711O3srftcHhZ0dqnETqLaoIK0x17fUw9rFSlK/0NlsKe0Ahhyl5pXE2g==",
+ "license": "MIT",
+ "funding": {
+ "type": "github",
+ "url": "https://github.com/sponsors/wooorm"
+ }
+ },
+ "node_modules/loose-envify": {
+ "version": "1.4.0",
+ "resolved": "https://registry.npmjs.org/loose-envify/-/loose-envify-1.4.0.tgz",
+ "integrity": "sha512-lyuxPGr/Wfhrlem2CL/UcnUc1zcqKAImBDzukY7Y5F/yQiNdko6+fRLevlw1HgMySw7f611UIY408EtxRSoK3Q==",
+ "license": "MIT",
+ "dependencies": {
+ "js-tokens": "^3.0.0 || ^4.0.0"
+ },
+ "bin": {
+ "loose-envify": "cli.js"
+ }
+ },
+ "node_modules/loose-envify/node_modules/js-tokens": {
+ "version": "4.0.0",
+ "resolved": "https://registry.npmjs.org/js-tokens/-/js-tokens-4.0.0.tgz",
+ "integrity": "sha512-RdJUflcE3cUzKiMqQgsCu06FPu9UdIJO0beYbPhHN4k6apgJtifcoCtT9bcxOpYBtpD2kCM6Sbzg4CausW/PKQ==",
+ "license": "MIT"
+ },
+ "node_modules/lowlight": {
+ "version": "1.20.0",
+ "resolved": "https://registry.npmjs.org/lowlight/-/lowlight-1.20.0.tgz",
+ "integrity": "sha512-8Ktj+prEb1RoCPkEOrPMYUN/nCggB7qAWe3a7OpMjWQkh3l2RD5wKRQ+o8Q8YuI9RG/xs95waaI/E6ym/7NsTw==",
+ "license": "MIT",
+ "dependencies": {
+ "fault": "^1.0.0",
+ "highlight.js": "~10.7.0"
+ },
+ "funding": {
+ "type": "github",
+ "url": "https://github.com/sponsors/wooorm"
+ }
+ },
+ "node_modules/lru-cache": {
+ "version": "5.1.1",
+ "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-5.1.1.tgz",
+ "integrity": "sha512-KpNARQA3Iwv+jTA0utUVVbrh+Jlrr1Fv0e56GGzAFOXN7dk/FviaDW8LHmK52DlcH4WP2n6gI8vN1aesBFgo9w==",
+ "dev": true,
+ "license": "ISC",
+ "peer": true,
+ "dependencies": {
+ "yallist": "^3.0.2"
+ }
+ },
+ "node_modules/lucide-react": {
+ "version": "0.441.0",
+ "resolved": "https://registry.npmjs.org/lucide-react/-/lucide-react-0.441.0.tgz",
+ "integrity": "sha512-0vfExYtvSDhkC2lqg0zYVW1Uu9GsI4knuV9GP9by5z0Xhc4Zi5RejTxfz9LsjRmCyWVzHCJvxGKZWcRyvQCWVg==",
+ "license": "ISC",
+ "peerDependencies": {
+ "react": "^16.5.1 || ^17.0.0 || ^18.0.0 || ^19.0.0-rc"
+ }
+ },
+ "node_modules/lunr": {
+ "version": "2.3.9",
+ "resolved": "https://registry.npmjs.org/lunr/-/lunr-2.3.9.tgz",
+ "integrity": "sha512-zTU3DaZaF3Rt9rhN3uBMGQD3dD2/vFQqnvZCDv4dl5iOzq2IZQqTxu90r4E5J+nP70J3ilqVCrbho2eWaeW8Ow==",
+ "license": "MIT"
+ },
+ "node_modules/luxon": {
+ "version": "3.5.0",
+ "resolved": "https://registry.npmjs.org/luxon/-/luxon-3.5.0.tgz",
+ "integrity": "sha512-rh+Zjr6DNfUYR3bPwJEnuwDdqMbxZW7LOQfUN4B54+Cl+0o5zaU9RJ6bcidfDtC1cWCZXQ+nvX8bf6bAji37QQ==",
+ "license": "MIT",
+ "engines": {
+ "node": ">=12"
+ }
+ },
+ "node_modules/magic-string": {
+ "version": "0.30.12",
+ "resolved": "https://registry.npmjs.org/magic-string/-/magic-string-0.30.12.tgz",
+ "integrity": "sha512-Ea8I3sQMVXr8JhN4z+H/d8zwo+tYDgHE9+5G4Wnrwhs0gaK9fXTKx0Tw5Xwsd/bCPTTZNRAdpyzvoeORe9LYpw==",
+ "license": "MIT",
+ "peer": true,
+ "dependencies": {
+ "@jridgewell/sourcemap-codec": "^1.5.0"
+ }
+ },
+ "node_modules/make-dir": {
+ "version": "4.0.0",
+ "resolved": "https://registry.npmjs.org/make-dir/-/make-dir-4.0.0.tgz",
+ "integrity": "sha512-hXdUTZYIVOt1Ex//jAQi+wTZZpUpwBj/0QsOzqegb3rGMMeJiSEu5xLHnYfBrRV4RH2+OCSOO95Is/7x1WJ4bw==",
+ "dev": true,
+ "license": "MIT",
+ "peer": true,
+ "dependencies": {
+ "semver": "^7.5.3"
+ },
+ "engines": {
+ "node": ">=10"
+ },
+ "funding": {
+ "url": "https://github.com/sponsors/sindresorhus"
+ }
+ },
+ "node_modules/make-dir/node_modules/semver": {
+ "version": "7.6.3",
+ "resolved": "https://registry.npmjs.org/semver/-/semver-7.6.3.tgz",
+ "integrity": "sha512-oVekP1cKtI+CTDvHWYFUcMtsK/00wmAEfyqKfNdARm8u1wNVhSgaX7A8d4UuIlUI5e84iEwOhs7ZPYRmzU9U6A==",
+ "dev": true,
+ "license": "ISC",
+ "peer": true,
+ "bin": {
+ "semver": "bin/semver.js"
+ },
+ "engines": {
+ "node": ">=10"
+ }
+ },
+ "node_modules/make-error": {
+ "version": "1.3.6",
+ "resolved": "https://registry.npmjs.org/make-error/-/make-error-1.3.6.tgz",
+ "integrity": "sha512-s8UhlNe7vPKomQhC1qFelMokr/Sc3AgNbso3n74mVPA5LTZwkB9NlXf4XPamLxJE8h0gh73rM94xvwRT2CVInw==",
+ "dev": true,
+ "license": "ISC"
+ },
+ "node_modules/makeerror": {
+ "version": "1.0.12",
+ "resolved": "https://registry.npmjs.org/makeerror/-/makeerror-1.0.12.tgz",
+ "integrity": "sha512-JmqCvUhmt43madlpFzG4BQzG2Z3m6tvQDNKdClZnO3VbIudJYmxsT0FNJMeiB2+JTSlTQTSbU8QdesVmwJcmLg==",
+ "dev": true,
+ "license": "BSD-3-Clause",
+ "peer": true,
+ "dependencies": {
+ "tmpl": "1.0.5"
+ }
+ },
+ "node_modules/markdown-it": {
+ "version": "14.1.0",
+ "resolved": "https://registry.npmjs.org/markdown-it/-/markdown-it-14.1.0.tgz",
+ "integrity": "sha512-a54IwgWPaeBCAAsv13YgmALOF1elABB08FxO9i+r4VFk5Vl4pKokRPeX8u5TCgSsPi6ec1otfLjdOpVcgbpshg==",
+ "license": "MIT",
+ "dependencies": {
+ "argparse": "^2.0.1",
+ "entities": "^4.4.0",
+ "linkify-it": "^5.0.0",
+ "mdurl": "^2.0.0",
+ "punycode.js": "^2.3.1",
+ "uc.micro": "^2.1.0"
+ },
+ "bin": {
+ "markdown-it": "bin/markdown-it.mjs"
+ }
+ },
+ "node_modules/markdown-it/node_modules/argparse": {
+ "version": "2.0.1",
+ "resolved": "https://registry.npmjs.org/argparse/-/argparse-2.0.1.tgz",
+ "integrity": "sha512-8+9WqebbFzpX9OR+Wa6O29asIogeRMzcGtAINdpMHHyAg10f05aSFVBbcEqGf/PXw1EjAZ+q2/bEBg3DvurK3Q==",
+ "license": "Python-2.0"
+ },
+ "node_modules/markdown-table": {
+ "version": "3.0.4",
+ "resolved": "https://registry.npmjs.org/markdown-table/-/markdown-table-3.0.4.tgz",
+ "integrity": "sha512-wiYz4+JrLyb/DqW2hkFJxP7Vd7JuTDm77fvbM8VfEQdmSMqcImWeeRbHwZjBjIFki/VaMK2BhFi7oUUZeM5bqw==",
+ "license": "MIT",
+ "funding": {
+ "type": "github",
+ "url": "https://github.com/sponsors/wooorm"
+ }
+ },
+ "node_modules/math-intrinsics": {
+ "version": "1.1.0",
+ "resolved": "https://registry.npmjs.org/math-intrinsics/-/math-intrinsics-1.1.0.tgz",
+ "integrity": "sha512-/IXtbwEk5HTPyEwyKX6hGkYXxM9nbj64B+ilVJnC/R6B0pH5G4V3b0pVbL7DBj4tkhBAppbQUlf6F6Xl9LHu1g==",
+ "license": "MIT",
+ "engines": {
+ "node": ">= 0.4"
+ }
+ },
+ "node_modules/mdast-util-definitions": {
+ "version": "5.1.2",
+ "resolved": "https://registry.npmjs.org/mdast-util-definitions/-/mdast-util-definitions-5.1.2.tgz",
+ "integrity": "sha512-8SVPMuHqlPME/z3gqVwWY4zVXn8lqKv/pAhC57FuJ40ImXyBpmO5ukh98zB2v7Blql2FiHjHv9LVztSIqjY+MA==",
+ "license": "MIT",
+ "dependencies": {
+ "@types/mdast": "^3.0.0",
+ "@types/unist": "^2.0.0",
+ "unist-util-visit": "^4.0.0"
+ },
+ "funding": {
+ "type": "opencollective",
+ "url": "https://opencollective.com/unified"
+ }
+ },
+ "node_modules/mdast-util-find-and-replace": {
+ "version": "2.2.2",
+ "resolved": "https://registry.npmjs.org/mdast-util-find-and-replace/-/mdast-util-find-and-replace-2.2.2.tgz",
+ "integrity": "sha512-MTtdFRz/eMDHXzeK6W3dO7mXUlF82Gom4y0oOgvHhh/HXZAGvIQDUvQ0SuUx+j2tv44b8xTHOm8K/9OoRFnXKw==",
+ "license": "MIT",
+ "dependencies": {
+ "@types/mdast": "^3.0.0",
+ "escape-string-regexp": "^5.0.0",
+ "unist-util-is": "^5.0.0",
+ "unist-util-visit-parents": "^5.0.0"
+ },
+ "funding": {
+ "type": "opencollective",
+ "url": "https://opencollective.com/unified"
+ }
+ },
+ "node_modules/mdast-util-from-markdown": {
+ "version": "1.3.1",
+ "resolved": "https://registry.npmjs.org/mdast-util-from-markdown/-/mdast-util-from-markdown-1.3.1.tgz",
+ "integrity": "sha512-4xTO/M8c82qBcnQc1tgpNtubGUW/Y1tBQ1B0i5CtSoelOLKFYlElIr3bvgREYYO5iRqbMY1YuqZng0GVOI8Qww==",
+ "license": "MIT",
+ "dependencies": {
+ "@types/mdast": "^3.0.0",
+ "@types/unist": "^2.0.0",
+ "decode-named-character-reference": "^1.0.0",
+ "mdast-util-to-string": "^3.1.0",
+ "micromark": "^3.0.0",
+ "micromark-util-decode-numeric-character-reference": "^1.0.0",
+ "micromark-util-decode-string": "^1.0.0",
+ "micromark-util-normalize-identifier": "^1.0.0",
+ "micromark-util-symbol": "^1.0.0",
+ "micromark-util-types": "^1.0.0",
+ "unist-util-stringify-position": "^3.0.0",
+ "uvu": "^0.5.0"
+ },
+ "funding": {
+ "type": "opencollective",
+ "url": "https://opencollective.com/unified"
+ }
+ },
+ "node_modules/mdast-util-gfm": {
+ "version": "2.0.2",
+ "resolved": "https://registry.npmjs.org/mdast-util-gfm/-/mdast-util-gfm-2.0.2.tgz",
+ "integrity": "sha512-qvZ608nBppZ4icQlhQQIAdc6S3Ffj9RGmzwUKUWuEICFnd1LVkN3EktF7ZHAgfcEdvZB5owU9tQgt99e2TlLjg==",
+ "license": "MIT",
+ "dependencies": {
+ "mdast-util-from-markdown": "^1.0.0",
+ "mdast-util-gfm-autolink-literal": "^1.0.0",
+ "mdast-util-gfm-footnote": "^1.0.0",
+ "mdast-util-gfm-strikethrough": "^1.0.0",
+ "mdast-util-gfm-table": "^1.0.0",
+ "mdast-util-gfm-task-list-item": "^1.0.0",
+ "mdast-util-to-markdown": "^1.0.0"
+ },
+ "funding": {
+ "type": "opencollective",
+ "url": "https://opencollective.com/unified"
+ }
+ },
+ "node_modules/mdast-util-gfm-autolink-literal": {
+ "version": "1.0.3",
+ "resolved": "https://registry.npmjs.org/mdast-util-gfm-autolink-literal/-/mdast-util-gfm-autolink-literal-1.0.3.tgz",
+ "integrity": "sha512-My8KJ57FYEy2W2LyNom4n3E7hKTuQk/0SES0u16tjA9Z3oFkF4RrC/hPAPgjlSpezsOvI8ObcXcElo92wn5IGA==",
+ "license": "MIT",
+ "dependencies": {
+ "@types/mdast": "^3.0.0",
+ "ccount": "^2.0.0",
+ "mdast-util-find-and-replace": "^2.0.0",
+ "micromark-util-character": "^1.0.0"
+ },
+ "funding": {
+ "type": "opencollective",
+ "url": "https://opencollective.com/unified"
+ }
+ },
+ "node_modules/mdast-util-gfm-footnote": {
+ "version": "1.0.2",
+ "resolved": "https://registry.npmjs.org/mdast-util-gfm-footnote/-/mdast-util-gfm-footnote-1.0.2.tgz",
+ "integrity": "sha512-56D19KOGbE00uKVj3sgIykpwKL179QsVFwx/DCW0u/0+URsryacI4MAdNJl0dh+u2PSsD9FtxPFbHCzJ78qJFQ==",
+ "license": "MIT",
+ "dependencies": {
+ "@types/mdast": "^3.0.0",
+ "mdast-util-to-markdown": "^1.3.0",
+ "micromark-util-normalize-identifier": "^1.0.0"
+ },
+ "funding": {
+ "type": "opencollective",
+ "url": "https://opencollective.com/unified"
+ }
+ },
+ "node_modules/mdast-util-gfm-strikethrough": {
+ "version": "1.0.3",
+ "resolved": "https://registry.npmjs.org/mdast-util-gfm-strikethrough/-/mdast-util-gfm-strikethrough-1.0.3.tgz",
+ "integrity": "sha512-DAPhYzTYrRcXdMjUtUjKvW9z/FNAMTdU0ORyMcbmkwYNbKocDpdk+PX1L1dQgOID/+vVs1uBQ7ElrBQfZ0cuiQ==",
+ "license": "MIT",
+ "dependencies": {
+ "@types/mdast": "^3.0.0",
+ "mdast-util-to-markdown": "^1.3.0"
+ },
+ "funding": {
+ "type": "opencollective",
+ "url": "https://opencollective.com/unified"
+ }
+ },
+ "node_modules/mdast-util-gfm-table": {
+ "version": "1.0.7",
+ "resolved": "https://registry.npmjs.org/mdast-util-gfm-table/-/mdast-util-gfm-table-1.0.7.tgz",
+ "integrity": "sha512-jjcpmNnQvrmN5Vx7y7lEc2iIOEytYv7rTvu+MeyAsSHTASGCCRA79Igg2uKssgOs1i1po8s3plW0sTu1wkkLGg==",
+ "license": "MIT",
+ "dependencies": {
+ "@types/mdast": "^3.0.0",
+ "markdown-table": "^3.0.0",
+ "mdast-util-from-markdown": "^1.0.0",
+ "mdast-util-to-markdown": "^1.3.0"
+ },
+ "funding": {
+ "type": "opencollective",
+ "url": "https://opencollective.com/unified"
+ }
+ },
+ "node_modules/mdast-util-gfm-task-list-item": {
+ "version": "1.0.2",
+ "resolved": "https://registry.npmjs.org/mdast-util-gfm-task-list-item/-/mdast-util-gfm-task-list-item-1.0.2.tgz",
+ "integrity": "sha512-PFTA1gzfp1B1UaiJVyhJZA1rm0+Tzn690frc/L8vNX1Jop4STZgOE6bxUhnzdVSB+vm2GU1tIsuQcA9bxTQpMQ==",
+ "license": "MIT",
+ "dependencies": {
+ "@types/mdast": "^3.0.0",
+ "mdast-util-to-markdown": "^1.3.0"
+ },
+ "funding": {
+ "type": "opencollective",
+ "url": "https://opencollective.com/unified"
+ }
+ },
+ "node_modules/mdast-util-math": {
+ "version": "2.0.2",
+ "resolved": "https://registry.npmjs.org/mdast-util-math/-/mdast-util-math-2.0.2.tgz",
+ "integrity": "sha512-8gmkKVp9v6+Tgjtq6SYx9kGPpTf6FVYRa53/DLh479aldR9AyP48qeVOgNZ5X7QUK7nOy4yw7vg6mbiGcs9jWQ==",
+ "license": "MIT",
+ "dependencies": {
+ "@types/mdast": "^3.0.0",
+ "longest-streak": "^3.0.0",
+ "mdast-util-to-markdown": "^1.3.0"
+ },
+ "funding": {
+ "type": "opencollective",
+ "url": "https://opencollective.com/unified"
+ }
+ },
+ "node_modules/mdast-util-phrasing": {
+ "version": "3.0.1",
+ "resolved": "https://registry.npmjs.org/mdast-util-phrasing/-/mdast-util-phrasing-3.0.1.tgz",
+ "integrity": "sha512-WmI1gTXUBJo4/ZmSk79Wcb2HcjPJBzM1nlI/OUWA8yk2X9ik3ffNbBGsU+09BFmXaL1IBb9fiuvq6/KMiNycSg==",
+ "license": "MIT",
+ "dependencies": {
+ "@types/mdast": "^3.0.0",
+ "unist-util-is": "^5.0.0"
+ },
+ "funding": {
+ "type": "opencollective",
+ "url": "https://opencollective.com/unified"
+ }
+ },
+ "node_modules/mdast-util-to-hast": {
+ "version": "12.3.0",
+ "resolved": "https://registry.npmjs.org/mdast-util-to-hast/-/mdast-util-to-hast-12.3.0.tgz",
+ "integrity": "sha512-pits93r8PhnIoU4Vy9bjW39M2jJ6/tdHyja9rrot9uujkN7UTU9SDnE6WNJz/IGyQk3XHX6yNNtrBH6cQzm8Hw==",
+ "license": "MIT",
+ "dependencies": {
+ "@types/hast": "^2.0.0",
+ "@types/mdast": "^3.0.0",
+ "mdast-util-definitions": "^5.0.0",
+ "micromark-util-sanitize-uri": "^1.1.0",
+ "trim-lines": "^3.0.0",
+ "unist-util-generated": "^2.0.0",
+ "unist-util-position": "^4.0.0",
+ "unist-util-visit": "^4.0.0"
+ },
+ "funding": {
+ "type": "opencollective",
+ "url": "https://opencollective.com/unified"
+ }
+ },
+ "node_modules/mdast-util-to-markdown": {
+ "version": "1.5.0",
+ "resolved": "https://registry.npmjs.org/mdast-util-to-markdown/-/mdast-util-to-markdown-1.5.0.tgz",
+ "integrity": "sha512-bbv7TPv/WC49thZPg3jXuqzuvI45IL2EVAr/KxF0BSdHsU0ceFHOmwQn6evxAh1GaoK/6GQ1wp4R4oW2+LFL/A==",
+ "license": "MIT",
+ "dependencies": {
+ "@types/mdast": "^3.0.0",
+ "@types/unist": "^2.0.0",
+ "longest-streak": "^3.0.0",
+ "mdast-util-phrasing": "^3.0.0",
+ "mdast-util-to-string": "^3.0.0",
+ "micromark-util-decode-string": "^1.0.0",
+ "unist-util-visit": "^4.0.0",
+ "zwitch": "^2.0.0"
+ },
+ "funding": {
+ "type": "opencollective",
+ "url": "https://opencollective.com/unified"
+ }
+ },
+ "node_modules/mdast-util-to-string": {
+ "version": "3.2.0",
+ "resolved": "https://registry.npmjs.org/mdast-util-to-string/-/mdast-util-to-string-3.2.0.tgz",
+ "integrity": "sha512-V4Zn/ncyN1QNSqSBxTrMOLpjr+IKdHl2v3KVLoWmDPscP4r9GcCi71gjgvUV1SFSKh92AjAG4peFuBl2/YgCJg==",
+ "license": "MIT",
+ "dependencies": {
+ "@types/mdast": "^3.0.0"
+ },
+ "funding": {
+ "type": "opencollective",
+ "url": "https://opencollective.com/unified"
+ }
+ },
+ "node_modules/mdurl": {
+ "version": "2.0.0",
+ "resolved": "https://registry.npmjs.org/mdurl/-/mdurl-2.0.0.tgz",
+ "integrity": "sha512-Lf+9+2r+Tdp5wXDXC4PcIBjTDtq4UKjCPMQhKIuzpJNW0b96kVqSwW0bT7FhRSfmAiFYgP+SCRvdrDozfh0U5w==",
+ "license": "MIT"
+ },
+ "node_modules/merge-stream": {
+ "version": "2.0.0",
+ "resolved": "https://registry.npmjs.org/merge-stream/-/merge-stream-2.0.0.tgz",
+ "integrity": "sha512-abv/qOcuPfk3URPfDzmZU1LKmuw8kT+0nIHvKrKgFrwifol/doWcdA4ZqsWQ8ENrFKkd67Mfpo/LovbIUsbt3w==",
+ "dev": true,
+ "license": "MIT",
+ "peer": true
+ },
+ "node_modules/merge2": {
+ "version": "1.4.1",
+ "resolved": "https://registry.npmjs.org/merge2/-/merge2-1.4.1.tgz",
+ "integrity": "sha512-8q7VEgMJW4J8tcfVPy8g09NcQwZdbwFEqhe/WZkoIzjn/3TGDwtOCYtXGxA3O8tPzpczCCDgv+P2P5y00ZJOOg==",
+ "dev": true,
+ "license": "MIT",
+ "engines": {
+ "node": ">= 8"
+ }
+ },
+ "node_modules/micromark": {
+ "version": "3.2.0",
+ "resolved": "https://registry.npmjs.org/micromark/-/micromark-3.2.0.tgz",
+ "integrity": "sha512-uD66tJj54JLYq0De10AhWycZWGQNUvDI55xPgk2sQM5kn1JYlhbCMTtEeT27+vAhW2FBQxLlOmS3pmA7/2z4aA==",
+ "funding": [
+ {
+ "type": "GitHub Sponsors",
+ "url": "https://github.com/sponsors/unifiedjs"
+ },
+ {
+ "type": "OpenCollective",
+ "url": "https://opencollective.com/unified"
+ }
+ ],
+ "license": "MIT",
+ "dependencies": {
+ "@types/debug": "^4.0.0",
+ "debug": "^4.0.0",
+ "decode-named-character-reference": "^1.0.0",
+ "micromark-core-commonmark": "^1.0.1",
+ "micromark-factory-space": "^1.0.0",
+ "micromark-util-character": "^1.0.0",
+ "micromark-util-chunked": "^1.0.0",
+ "micromark-util-combine-extensions": "^1.0.0",
+ "micromark-util-decode-numeric-character-reference": "^1.0.0",
+ "micromark-util-encode": "^1.0.0",
+ "micromark-util-normalize-identifier": "^1.0.0",
+ "micromark-util-resolve-all": "^1.0.0",
+ "micromark-util-sanitize-uri": "^1.0.0",
+ "micromark-util-subtokenize": "^1.0.0",
+ "micromark-util-symbol": "^1.0.0",
+ "micromark-util-types": "^1.0.1",
+ "uvu": "^0.5.0"
+ }
+ },
+ "node_modules/micromark-core-commonmark": {
+ "version": "1.1.0",
+ "resolved": "https://registry.npmjs.org/micromark-core-commonmark/-/micromark-core-commonmark-1.1.0.tgz",
+ "integrity": "sha512-BgHO1aRbolh2hcrzL2d1La37V0Aoz73ymF8rAcKnohLy93titmv62E0gP8Hrx9PKcKrqCZ1BbLGbP3bEhoXYlw==",
+ "funding": [
+ {
+ "type": "GitHub Sponsors",
+ "url": "https://github.com/sponsors/unifiedjs"
+ },
+ {
+ "type": "OpenCollective",
+ "url": "https://opencollective.com/unified"
+ }
+ ],
+ "license": "MIT",
+ "dependencies": {
+ "decode-named-character-reference": "^1.0.0",
+ "micromark-factory-destination": "^1.0.0",
+ "micromark-factory-label": "^1.0.0",
+ "micromark-factory-space": "^1.0.0",
+ "micromark-factory-title": "^1.0.0",
+ "micromark-factory-whitespace": "^1.0.0",
+ "micromark-util-character": "^1.0.0",
+ "micromark-util-chunked": "^1.0.0",
+ "micromark-util-classify-character": "^1.0.0",
+ "micromark-util-html-tag-name": "^1.0.0",
+ "micromark-util-normalize-identifier": "^1.0.0",
+ "micromark-util-resolve-all": "^1.0.0",
+ "micromark-util-subtokenize": "^1.0.0",
+ "micromark-util-symbol": "^1.0.0",
+ "micromark-util-types": "^1.0.1",
+ "uvu": "^0.5.0"
+ }
+ },
+ "node_modules/micromark-extension-gfm": {
+ "version": "2.0.3",
+ "resolved": "https://registry.npmjs.org/micromark-extension-gfm/-/micromark-extension-gfm-2.0.3.tgz",
+ "integrity": "sha512-vb9OoHqrhCmbRidQv/2+Bc6pkP0FrtlhurxZofvOEy5o8RtuuvTq+RQ1Vw5ZDNrVraQZu3HixESqbG+0iKk/MQ==",
+ "license": "MIT",
+ "dependencies": {
+ "micromark-extension-gfm-autolink-literal": "^1.0.0",
+ "micromark-extension-gfm-footnote": "^1.0.0",
+ "micromark-extension-gfm-strikethrough": "^1.0.0",
+ "micromark-extension-gfm-table": "^1.0.0",
+ "micromark-extension-gfm-tagfilter": "^1.0.0",
+ "micromark-extension-gfm-task-list-item": "^1.0.0",
+ "micromark-util-combine-extensions": "^1.0.0",
+ "micromark-util-types": "^1.0.0"
+ },
+ "funding": {
+ "type": "opencollective",
+ "url": "https://opencollective.com/unified"
+ }
+ },
+ "node_modules/micromark-extension-gfm-autolink-literal": {
+ "version": "1.0.5",
+ "resolved": "https://registry.npmjs.org/micromark-extension-gfm-autolink-literal/-/micromark-extension-gfm-autolink-literal-1.0.5.tgz",
+ "integrity": "sha512-z3wJSLrDf8kRDOh2qBtoTRD53vJ+CWIyo7uyZuxf/JAbNJjiHsOpG1y5wxk8drtv3ETAHutCu6N3thkOOgueWg==",
+ "license": "MIT",
+ "dependencies": {
+ "micromark-util-character": "^1.0.0",
+ "micromark-util-sanitize-uri": "^1.0.0",
+ "micromark-util-symbol": "^1.0.0",
+ "micromark-util-types": "^1.0.0"
+ },
+ "funding": {
+ "type": "opencollective",
+ "url": "https://opencollective.com/unified"
+ }
+ },
+ "node_modules/micromark-extension-gfm-footnote": {
+ "version": "1.1.2",
+ "resolved": "https://registry.npmjs.org/micromark-extension-gfm-footnote/-/micromark-extension-gfm-footnote-1.1.2.tgz",
+ "integrity": "sha512-Yxn7z7SxgyGWRNa4wzf8AhYYWNrwl5q1Z8ii+CSTTIqVkmGZF1CElX2JI8g5yGoM3GAman9/PVCUFUSJ0kB/8Q==",
+ "license": "MIT",
+ "dependencies": {
+ "micromark-core-commonmark": "^1.0.0",
+ "micromark-factory-space": "^1.0.0",
+ "micromark-util-character": "^1.0.0",
+ "micromark-util-normalize-identifier": "^1.0.0",
+ "micromark-util-sanitize-uri": "^1.0.0",
+ "micromark-util-symbol": "^1.0.0",
+ "micromark-util-types": "^1.0.0",
+ "uvu": "^0.5.0"
+ },
+ "funding": {
+ "type": "opencollective",
+ "url": "https://opencollective.com/unified"
+ }
+ },
+ "node_modules/micromark-extension-gfm-strikethrough": {
+ "version": "1.0.7",
+ "resolved": "https://registry.npmjs.org/micromark-extension-gfm-strikethrough/-/micromark-extension-gfm-strikethrough-1.0.7.tgz",
+ "integrity": "sha512-sX0FawVE1o3abGk3vRjOH50L5TTLr3b5XMqnP9YDRb34M0v5OoZhG+OHFz1OffZ9dlwgpTBKaT4XW/AsUVnSDw==",
+ "license": "MIT",
+ "dependencies": {
+ "micromark-util-chunked": "^1.0.0",
+ "micromark-util-classify-character": "^1.0.0",
+ "micromark-util-resolve-all": "^1.0.0",
+ "micromark-util-symbol": "^1.0.0",
+ "micromark-util-types": "^1.0.0",
+ "uvu": "^0.5.0"
+ },
+ "funding": {
+ "type": "opencollective",
+ "url": "https://opencollective.com/unified"
+ }
+ },
+ "node_modules/micromark-extension-gfm-table": {
+ "version": "1.0.7",
+ "resolved": "https://registry.npmjs.org/micromark-extension-gfm-table/-/micromark-extension-gfm-table-1.0.7.tgz",
+ "integrity": "sha512-3ZORTHtcSnMQEKtAOsBQ9/oHp9096pI/UvdPtN7ehKvrmZZ2+bbWhi0ln+I9drmwXMt5boocn6OlwQzNXeVeqw==",
+ "license": "MIT",
+ "dependencies": {
+ "micromark-factory-space": "^1.0.0",
+ "micromark-util-character": "^1.0.0",
+ "micromark-util-symbol": "^1.0.0",
+ "micromark-util-types": "^1.0.0",
+ "uvu": "^0.5.0"
+ },
+ "funding": {
+ "type": "opencollective",
+ "url": "https://opencollective.com/unified"
+ }
+ },
+ "node_modules/micromark-extension-gfm-tagfilter": {
+ "version": "1.0.2",
+ "resolved": "https://registry.npmjs.org/micromark-extension-gfm-tagfilter/-/micromark-extension-gfm-tagfilter-1.0.2.tgz",
+ "integrity": "sha512-5XWB9GbAUSHTn8VPU8/1DBXMuKYT5uOgEjJb8gN3mW0PNW5OPHpSdojoqf+iq1xo7vWzw/P8bAHY0n6ijpXF7g==",
+ "license": "MIT",
+ "dependencies": {
+ "micromark-util-types": "^1.0.0"
+ },
+ "funding": {
+ "type": "opencollective",
+ "url": "https://opencollective.com/unified"
+ }
+ },
+ "node_modules/micromark-extension-gfm-task-list-item": {
+ "version": "1.0.5",
+ "resolved": "https://registry.npmjs.org/micromark-extension-gfm-task-list-item/-/micromark-extension-gfm-task-list-item-1.0.5.tgz",
+ "integrity": "sha512-RMFXl2uQ0pNQy6Lun2YBYT9g9INXtWJULgbt01D/x8/6yJ2qpKyzdZD3pi6UIkzF++Da49xAelVKUeUMqd5eIQ==",
+ "license": "MIT",
+ "dependencies": {
+ "micromark-factory-space": "^1.0.0",
+ "micromark-util-character": "^1.0.0",
+ "micromark-util-symbol": "^1.0.0",
+ "micromark-util-types": "^1.0.0",
+ "uvu": "^0.5.0"
+ },
+ "funding": {
+ "type": "opencollective",
+ "url": "https://opencollective.com/unified"
+ }
+ },
+ "node_modules/micromark-extension-math": {
+ "version": "2.1.2",
+ "resolved": "https://registry.npmjs.org/micromark-extension-math/-/micromark-extension-math-2.1.2.tgz",
+ "integrity": "sha512-es0CcOV89VNS9wFmyn+wyFTKweXGW4CEvdaAca6SWRWPyYCbBisnjaHLjWO4Nszuiud84jCpkHsqAJoa768Pvg==",
+ "license": "MIT",
+ "dependencies": {
+ "@types/katex": "^0.16.0",
+ "katex": "^0.16.0",
+ "micromark-factory-space": "^1.0.0",
+ "micromark-util-character": "^1.0.0",
+ "micromark-util-symbol": "^1.0.0",
+ "micromark-util-types": "^1.0.0",
+ "uvu": "^0.5.0"
+ },
+ "funding": {
+ "type": "opencollective",
+ "url": "https://opencollective.com/unified"
+ }
+ },
+ "node_modules/micromark-factory-destination": {
+ "version": "1.1.0",
+ "resolved": "https://registry.npmjs.org/micromark-factory-destination/-/micromark-factory-destination-1.1.0.tgz",
+ "integrity": "sha512-XaNDROBgx9SgSChd69pjiGKbV+nfHGDPVYFs5dOoDd7ZnMAE+Cuu91BCpsY8RT2NP9vo/B8pds2VQNCLiu0zhg==",
+ "funding": [
+ {
+ "type": "GitHub Sponsors",
+ "url": "https://github.com/sponsors/unifiedjs"
+ },
+ {
+ "type": "OpenCollective",
+ "url": "https://opencollective.com/unified"
+ }
+ ],
+ "license": "MIT",
+ "dependencies": {
+ "micromark-util-character": "^1.0.0",
+ "micromark-util-symbol": "^1.0.0",
+ "micromark-util-types": "^1.0.0"
+ }
+ },
+ "node_modules/micromark-factory-label": {
+ "version": "1.1.0",
+ "resolved": "https://registry.npmjs.org/micromark-factory-label/-/micromark-factory-label-1.1.0.tgz",
+ "integrity": "sha512-OLtyez4vZo/1NjxGhcpDSbHQ+m0IIGnT8BoPamh+7jVlzLJBH98zzuCoUeMxvM6WsNeh8wx8cKvqLiPHEACn0w==",
+ "funding": [
+ {
+ "type": "GitHub Sponsors",
+ "url": "https://github.com/sponsors/unifiedjs"
+ },
+ {
+ "type": "OpenCollective",
+ "url": "https://opencollective.com/unified"
+ }
+ ],
+ "license": "MIT",
+ "dependencies": {
+ "micromark-util-character": "^1.0.0",
+ "micromark-util-symbol": "^1.0.0",
+ "micromark-util-types": "^1.0.0",
+ "uvu": "^0.5.0"
+ }
+ },
+ "node_modules/micromark-factory-space": {
+ "version": "1.1.0",
+ "resolved": "https://registry.npmjs.org/micromark-factory-space/-/micromark-factory-space-1.1.0.tgz",
+ "integrity": "sha512-cRzEj7c0OL4Mw2v6nwzttyOZe8XY/Z8G0rzmWQZTBi/jjwyw/U4uqKtUORXQrR5bAZZnbTI/feRV/R7hc4jQYQ==",
+ "funding": [
+ {
+ "type": "GitHub Sponsors",
+ "url": "https://github.com/sponsors/unifiedjs"
+ },
+ {
+ "type": "OpenCollective",
+ "url": "https://opencollective.com/unified"
+ }
+ ],
+ "license": "MIT",
+ "dependencies": {
+ "micromark-util-character": "^1.0.0",
+ "micromark-util-types": "^1.0.0"
+ }
+ },
+ "node_modules/micromark-factory-title": {
+ "version": "1.1.0",
+ "resolved": "https://registry.npmjs.org/micromark-factory-title/-/micromark-factory-title-1.1.0.tgz",
+ "integrity": "sha512-J7n9R3vMmgjDOCY8NPw55jiyaQnH5kBdV2/UXCtZIpnHH3P6nHUKaH7XXEYuWwx/xUJcawa8plLBEjMPU24HzQ==",
+ "funding": [
+ {
+ "type": "GitHub Sponsors",
+ "url": "https://github.com/sponsors/unifiedjs"
+ },
+ {
+ "type": "OpenCollective",
+ "url": "https://opencollective.com/unified"
+ }
+ ],
+ "license": "MIT",
+ "dependencies": {
+ "micromark-factory-space": "^1.0.0",
+ "micromark-util-character": "^1.0.0",
+ "micromark-util-symbol": "^1.0.0",
+ "micromark-util-types": "^1.0.0"
+ }
+ },
+ "node_modules/micromark-factory-whitespace": {
+ "version": "1.1.0",
+ "resolved": "https://registry.npmjs.org/micromark-factory-whitespace/-/micromark-factory-whitespace-1.1.0.tgz",
+ "integrity": "sha512-v2WlmiymVSp5oMg+1Q0N1Lxmt6pMhIHD457whWM7/GUlEks1hI9xj5w3zbc4uuMKXGisksZk8DzP2UyGbGqNsQ==",
+ "funding": [
+ {
+ "type": "GitHub Sponsors",
+ "url": "https://github.com/sponsors/unifiedjs"
+ },
+ {
+ "type": "OpenCollective",
+ "url": "https://opencollective.com/unified"
+ }
+ ],
+ "license": "MIT",
+ "dependencies": {
+ "micromark-factory-space": "^1.0.0",
+ "micromark-util-character": "^1.0.0",
+ "micromark-util-symbol": "^1.0.0",
+ "micromark-util-types": "^1.0.0"
+ }
+ },
+ "node_modules/micromark-util-character": {
+ "version": "1.2.0",
+ "resolved": "https://registry.npmjs.org/micromark-util-character/-/micromark-util-character-1.2.0.tgz",
+ "integrity": "sha512-lXraTwcX3yH/vMDaFWCQJP1uIszLVebzUa3ZHdrgxr7KEU/9mL4mVgCpGbyhvNLNlauROiNUq7WN5u7ndbY6xg==",
+ "funding": [
+ {
+ "type": "GitHub Sponsors",
+ "url": "https://github.com/sponsors/unifiedjs"
+ },
+ {
+ "type": "OpenCollective",
+ "url": "https://opencollective.com/unified"
+ }
+ ],
+ "license": "MIT",
+ "dependencies": {
+ "micromark-util-symbol": "^1.0.0",
+ "micromark-util-types": "^1.0.0"
+ }
+ },
+ "node_modules/micromark-util-chunked": {
+ "version": "1.1.0",
+ "resolved": "https://registry.npmjs.org/micromark-util-chunked/-/micromark-util-chunked-1.1.0.tgz",
+ "integrity": "sha512-Ye01HXpkZPNcV6FiyoW2fGZDUw4Yc7vT0E9Sad83+bEDiCJ1uXu0S3mr8WLpsz3HaG3x2q0HM6CTuPdcZcluFQ==",
+ "funding": [
+ {
+ "type": "GitHub Sponsors",
+ "url": "https://github.com/sponsors/unifiedjs"
+ },
+ {
+ "type": "OpenCollective",
+ "url": "https://opencollective.com/unified"
+ }
+ ],
+ "license": "MIT",
+ "dependencies": {
+ "micromark-util-symbol": "^1.0.0"
+ }
+ },
+ "node_modules/micromark-util-classify-character": {
+ "version": "1.1.0",
+ "resolved": "https://registry.npmjs.org/micromark-util-classify-character/-/micromark-util-classify-character-1.1.0.tgz",
+ "integrity": "sha512-SL0wLxtKSnklKSUplok1WQFoGhUdWYKggKUiqhX+Swala+BtptGCu5iPRc+xvzJ4PXE/hwM3FNXsfEVgoZsWbw==",
+ "funding": [
+ {
+ "type": "GitHub Sponsors",
+ "url": "https://github.com/sponsors/unifiedjs"
+ },
+ {
+ "type": "OpenCollective",
+ "url": "https://opencollective.com/unified"
+ }
+ ],
+ "license": "MIT",
+ "dependencies": {
+ "micromark-util-character": "^1.0.0",
+ "micromark-util-symbol": "^1.0.0",
+ "micromark-util-types": "^1.0.0"
+ }
+ },
+ "node_modules/micromark-util-combine-extensions": {
+ "version": "1.1.0",
+ "resolved": "https://registry.npmjs.org/micromark-util-combine-extensions/-/micromark-util-combine-extensions-1.1.0.tgz",
+ "integrity": "sha512-Q20sp4mfNf9yEqDL50WwuWZHUrCO4fEyeDCnMGmG5Pr0Cz15Uo7KBs6jq+dq0EgX4DPwwrh9m0X+zPV1ypFvUA==",
+ "funding": [
+ {
+ "type": "GitHub Sponsors",
+ "url": "https://github.com/sponsors/unifiedjs"
+ },
+ {
+ "type": "OpenCollective",
+ "url": "https://opencollective.com/unified"
+ }
+ ],
+ "license": "MIT",
+ "dependencies": {
+ "micromark-util-chunked": "^1.0.0",
+ "micromark-util-types": "^1.0.0"
+ }
+ },
+ "node_modules/micromark-util-decode-numeric-character-reference": {
+ "version": "1.1.0",
+ "resolved": "https://registry.npmjs.org/micromark-util-decode-numeric-character-reference/-/micromark-util-decode-numeric-character-reference-1.1.0.tgz",
+ "integrity": "sha512-m9V0ExGv0jB1OT21mrWcuf4QhP46pH1KkfWy9ZEezqHKAxkj4mPCy3nIH1rkbdMlChLHX531eOrymlwyZIf2iw==",
+ "funding": [
+ {
+ "type": "GitHub Sponsors",
+ "url": "https://github.com/sponsors/unifiedjs"
+ },
+ {
+ "type": "OpenCollective",
+ "url": "https://opencollective.com/unified"
+ }
+ ],
+ "license": "MIT",
+ "dependencies": {
+ "micromark-util-symbol": "^1.0.0"
+ }
+ },
+ "node_modules/micromark-util-decode-string": {
+ "version": "1.1.0",
+ "resolved": "https://registry.npmjs.org/micromark-util-decode-string/-/micromark-util-decode-string-1.1.0.tgz",
+ "integrity": "sha512-YphLGCK8gM1tG1bd54azwyrQRjCFcmgj2S2GoJDNnh4vYtnL38JS8M4gpxzOPNyHdNEpheyWXCTnnTDY3N+NVQ==",
+ "funding": [
+ {
+ "type": "GitHub Sponsors",
+ "url": "https://github.com/sponsors/unifiedjs"
+ },
+ {
+ "type": "OpenCollective",
+ "url": "https://opencollective.com/unified"
+ }
+ ],
+ "license": "MIT",
+ "dependencies": {
+ "decode-named-character-reference": "^1.0.0",
+ "micromark-util-character": "^1.0.0",
+ "micromark-util-decode-numeric-character-reference": "^1.0.0",
+ "micromark-util-symbol": "^1.0.0"
+ }
+ },
+ "node_modules/micromark-util-encode": {
+ "version": "1.1.0",
+ "resolved": "https://registry.npmjs.org/micromark-util-encode/-/micromark-util-encode-1.1.0.tgz",
+ "integrity": "sha512-EuEzTWSTAj9PA5GOAs992GzNh2dGQO52UvAbtSOMvXTxv3Criqb6IOzJUBCmEqrrXSblJIJBbFFv6zPxpreiJw==",
+ "funding": [
+ {
+ "type": "GitHub Sponsors",
+ "url": "https://github.com/sponsors/unifiedjs"
+ },
+ {
+ "type": "OpenCollective",
+ "url": "https://opencollective.com/unified"
+ }
+ ],
+ "license": "MIT"
+ },
+ "node_modules/micromark-util-html-tag-name": {
+ "version": "1.2.0",
+ "resolved": "https://registry.npmjs.org/micromark-util-html-tag-name/-/micromark-util-html-tag-name-1.2.0.tgz",
+ "integrity": "sha512-VTQzcuQgFUD7yYztuQFKXT49KghjtETQ+Wv/zUjGSGBioZnkA4P1XXZPT1FHeJA6RwRXSF47yvJ1tsJdoxwO+Q==",
+ "funding": [
+ {
+ "type": "GitHub Sponsors",
+ "url": "https://github.com/sponsors/unifiedjs"
+ },
+ {
+ "type": "OpenCollective",
+ "url": "https://opencollective.com/unified"
+ }
+ ],
+ "license": "MIT"
+ },
+ "node_modules/micromark-util-normalize-identifier": {
+ "version": "1.1.0",
+ "resolved": "https://registry.npmjs.org/micromark-util-normalize-identifier/-/micromark-util-normalize-identifier-1.1.0.tgz",
+ "integrity": "sha512-N+w5vhqrBihhjdpM8+5Xsxy71QWqGn7HYNUvch71iV2PM7+E3uWGox1Qp90loa1ephtCxG2ftRV/Conitc6P2Q==",
+ "funding": [
+ {
+ "type": "GitHub Sponsors",
+ "url": "https://github.com/sponsors/unifiedjs"
+ },
+ {
+ "type": "OpenCollective",
+ "url": "https://opencollective.com/unified"
+ }
+ ],
+ "license": "MIT",
+ "dependencies": {
+ "micromark-util-symbol": "^1.0.0"
+ }
+ },
+ "node_modules/micromark-util-resolve-all": {
+ "version": "1.1.0",
+ "resolved": "https://registry.npmjs.org/micromark-util-resolve-all/-/micromark-util-resolve-all-1.1.0.tgz",
+ "integrity": "sha512-b/G6BTMSg+bX+xVCshPTPyAu2tmA0E4X98NSR7eIbeC6ycCqCeE7wjfDIgzEbkzdEVJXRtOG4FbEm/uGbCRouA==",
+ "funding": [
+ {
+ "type": "GitHub Sponsors",
+ "url": "https://github.com/sponsors/unifiedjs"
+ },
+ {
+ "type": "OpenCollective",
+ "url": "https://opencollective.com/unified"
+ }
+ ],
+ "license": "MIT",
+ "dependencies": {
+ "micromark-util-types": "^1.0.0"
+ }
+ },
+ "node_modules/micromark-util-sanitize-uri": {
+ "version": "1.2.0",
+ "resolved": "https://registry.npmjs.org/micromark-util-sanitize-uri/-/micromark-util-sanitize-uri-1.2.0.tgz",
+ "integrity": "sha512-QO4GXv0XZfWey4pYFndLUKEAktKkG5kZTdUNaTAkzbuJxn2tNBOr+QtxR2XpWaMhbImT2dPzyLrPXLlPhph34A==",
+ "funding": [
+ {
+ "type": "GitHub Sponsors",
+ "url": "https://github.com/sponsors/unifiedjs"
+ },
+ {
+ "type": "OpenCollective",
+ "url": "https://opencollective.com/unified"
+ }
+ ],
+ "license": "MIT",
+ "dependencies": {
+ "micromark-util-character": "^1.0.0",
+ "micromark-util-encode": "^1.0.0",
+ "micromark-util-symbol": "^1.0.0"
+ }
+ },
+ "node_modules/micromark-util-subtokenize": {
+ "version": "1.1.0",
+ "resolved": "https://registry.npmjs.org/micromark-util-subtokenize/-/micromark-util-subtokenize-1.1.0.tgz",
+ "integrity": "sha512-kUQHyzRoxvZO2PuLzMt2P/dwVsTiivCK8icYTeR+3WgbuPqfHgPPy7nFKbeqRivBvn/3N3GBiNC+JRTMSxEC7A==",
+ "funding": [
+ {
+ "type": "GitHub Sponsors",
+ "url": "https://github.com/sponsors/unifiedjs"
+ },
+ {
+ "type": "OpenCollective",
+ "url": "https://opencollective.com/unified"
+ }
+ ],
+ "license": "MIT",
+ "dependencies": {
+ "micromark-util-chunked": "^1.0.0",
+ "micromark-util-symbol": "^1.0.0",
+ "micromark-util-types": "^1.0.0",
+ "uvu": "^0.5.0"
+ }
+ },
+ "node_modules/micromark-util-symbol": {
+ "version": "1.1.0",
+ "resolved": "https://registry.npmjs.org/micromark-util-symbol/-/micromark-util-symbol-1.1.0.tgz",
+ "integrity": "sha512-uEjpEYY6KMs1g7QfJ2eX1SQEV+ZT4rUD3UcF6l57acZvLNK7PBZL+ty82Z1qhK1/yXIY4bdx04FKMgR0g4IAag==",
+ "funding": [
+ {
+ "type": "GitHub Sponsors",
+ "url": "https://github.com/sponsors/unifiedjs"
+ },
+ {
+ "type": "OpenCollective",
+ "url": "https://opencollective.com/unified"
+ }
+ ],
+ "license": "MIT"
+ },
+ "node_modules/micromark-util-types": {
+ "version": "1.1.0",
+ "resolved": "https://registry.npmjs.org/micromark-util-types/-/micromark-util-types-1.1.0.tgz",
+ "integrity": "sha512-ukRBgie8TIAcacscVHSiddHjO4k/q3pnedmzMQ4iwDcK0FtFCohKOlFbaOL/mPgfnPsL3C1ZyxJa4sbWrBl3jg==",
+ "funding": [
+ {
+ "type": "GitHub Sponsors",
+ "url": "https://github.com/sponsors/unifiedjs"
+ },
+ {
+ "type": "OpenCollective",
+ "url": "https://opencollective.com/unified"
+ }
+ ],
+ "license": "MIT"
+ },
+ "node_modules/micromatch": {
+ "version": "4.0.8",
+ "resolved": "https://registry.npmjs.org/micromatch/-/micromatch-4.0.8.tgz",
+ "integrity": "sha512-PXwfBhYu0hBCPw8Dn0E+WDYb7af3dSLVWKi3HGv84IdF4TyFoC0ysxFd0Goxw7nSv4T/PzEJQxsYsEiFCKo2BA==",
+ "dev": true,
+ "license": "MIT",
+ "dependencies": {
+ "braces": "^3.0.3",
+ "picomatch": "^2.3.1"
+ },
+ "engines": {
+ "node": ">=8.6"
+ }
+ },
+ "node_modules/mime-db": {
+ "version": "1.52.0",
+ "resolved": "https://registry.npmjs.org/mime-db/-/mime-db-1.52.0.tgz",
+ "integrity": "sha512-sPU4uV7dYlvtWJxwwxHD0PuihVNiE7TyAbQ5SWxDCB9mUYvOgroQOwYQQOKPJ8CIbE+1ETVlOoK1UC2nU3gYvg==",
+ "license": "MIT",
+ "engines": {
+ "node": ">= 0.6"
+ }
+ },
+ "node_modules/mime-types": {
+ "version": "2.1.35",
+ "resolved": "https://registry.npmjs.org/mime-types/-/mime-types-2.1.35.tgz",
+ "integrity": "sha512-ZDY+bPm5zTTF+YpCrAU9nK0UgICYPT0QtT1NZWFv4s++TNkcgVaT0g6+4R2uI4MjQjzysHB1zxuWL50hzaeXiw==",
+ "license": "MIT",
+ "dependencies": {
+ "mime-db": "1.52.0"
+ },
+ "engines": {
+ "node": ">= 0.6"
+ }
+ },
+ "node_modules/mimic-fn": {
+ "version": "2.1.0",
+ "resolved": "https://registry.npmjs.org/mimic-fn/-/mimic-fn-2.1.0.tgz",
+ "integrity": "sha512-OqbOk5oEQeAZ8WXWydlu9HJjz9WVdEIvamMCcXmuqUYjTknH/sqsWvhQ3vgwKFRR1HpjvNBKQ37nbJgYzGqGcg==",
+ "dev": true,
+ "license": "MIT",
+ "peer": true,
+ "engines": {
+ "node": ">=6"
+ }
+ },
+ "node_modules/mimic-response": {
+ "version": "3.1.0",
+ "resolved": "https://registry.npmjs.org/mimic-response/-/mimic-response-3.1.0.tgz",
+ "integrity": "sha512-z0yWI+4FDrrweS8Zmt4Ej5HdJmky15+L2e6Wgn3+iK5fWzb6T3fhNFq2+MeTRb064c6Wr4N/wv0DzQTjNzHNGQ==",
+ "license": "MIT",
+ "engines": {
+ "node": ">=10"
+ },
+ "funding": {
+ "url": "https://github.com/sponsors/sindresorhus"
+ }
+ },
+ "node_modules/minimatch": {
+ "version": "3.1.2",
+ "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-3.1.2.tgz",
+ "integrity": "sha512-J7p63hRiAjw1NDEww1W7i37+ByIrOWO5XQQAzZ3VOcL0PNybwpfmV/N05zFAzwQ9USyEcX6t3UO+K5aqBQOIHw==",
+ "dev": true,
+ "license": "ISC",
+ "dependencies": {
+ "brace-expansion": "^1.1.7"
+ },
+ "engines": {
+ "node": "*"
+ }
+ },
+ "node_modules/minimist": {
+ "version": "1.2.8",
+ "resolved": "https://registry.npmjs.org/minimist/-/minimist-1.2.8.tgz",
+ "integrity": "sha512-2yyAR8qBkN3YuheJanUpWC5U3bb5osDywNB8RzDVlDwDHbocAJveqqj1u8+SVD7jkWT4yvsHCpWqqWqAxb0zCA==",
+ "license": "MIT",
+ "funding": {
+ "url": "https://github.com/sponsors/ljharb"
+ }
+ },
+ "node_modules/minipass": {
+ "version": "7.1.2",
+ "resolved": "https://registry.npmjs.org/minipass/-/minipass-7.1.2.tgz",
+ "integrity": "sha512-qOOzS1cBTWYF4BH8fVePDBOO9iptMnGUEZwNc/cMWnTV2nVLZ7VoNWEPHkYczZA0pdoA7dl6e7FL659nX9S2aw==",
+ "dev": true,
+ "license": "ISC",
+ "engines": {
+ "node": ">=16 || 14 >=14.17"
+ }
+ },
+ "node_modules/mkdirp": {
+ "version": "0.5.6",
+ "resolved": "https://registry.npmjs.org/mkdirp/-/mkdirp-0.5.6.tgz",
+ "integrity": "sha512-FP+p8RB8OWpF3YZBCrP5gtADmtXApB5AMLn+vdyA+PyxCjrCs00mjyUozssO33cwDeT3wNGdLxJ5M//YqtHAJw==",
+ "license": "MIT",
+ "dependencies": {
+ "minimist": "^1.2.6"
+ },
+ "bin": {
+ "mkdirp": "bin/cmd.js"
+ }
+ },
+ "node_modules/mkdirp-classic": {
+ "version": "0.5.3",
+ "resolved": "https://registry.npmjs.org/mkdirp-classic/-/mkdirp-classic-0.5.3.tgz",
+ "integrity": "sha512-gKLcREMhtuZRwRAfqP3RFW+TK4JqApVBtOIftVgjuABpAtpxhPGaDcfvbhNvD0B8iD1oUr/txX35NjcaY6Ns/A==",
+ "license": "MIT"
+ },
+ "node_modules/motion-dom": {
+ "version": "11.18.1",
+ "resolved": "https://registry.npmjs.org/motion-dom/-/motion-dom-11.18.1.tgz",
+ "integrity": "sha512-g76KvA001z+atjfxczdRtw/RXOM3OMSdd1f4DL77qCTF/+avrRJiawSG4yDibEQ215sr9kpinSlX2pCTJ9zbhw==",
+ "license": "MIT",
+ "dependencies": {
+ "motion-utils": "^11.18.1"
+ }
+ },
+ "node_modules/motion-utils": {
+ "version": "11.18.1",
+ "resolved": "https://registry.npmjs.org/motion-utils/-/motion-utils-11.18.1.tgz",
+ "integrity": "sha512-49Kt+HKjtbJKLtgO/LKj9Ld+6vw9BjH5d9sc40R/kVyH8GLAXgT42M2NnuPcJNuA3s9ZfZBUcwIgpmZWGEE+hA==",
+ "license": "MIT"
+ },
+ "node_modules/mri": {
+ "version": "1.2.0",
+ "resolved": "https://registry.npmjs.org/mri/-/mri-1.2.0.tgz",
+ "integrity": "sha512-tzzskb3bG8LvYGFF/mDTpq3jpI6Q9wc3LEmBaghu+DdCssd1FakN7Bc0hVNmEyGq1bq3RgfkCb3cmQLpNPOroA==",
+ "license": "MIT",
+ "engines": {
+ "node": ">=4"
+ }
+ },
+ "node_modules/ms": {
+ "version": "2.1.3",
+ "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.3.tgz",
+ "integrity": "sha512-6FlzubTLZG3J2a/NVCAleEhjzq5oxgHyaCU9yYXvcLsvoVaHJq/s5xXI6/XXP6tz7R9xAOtHnSO/tXtF3WRTlA==",
+ "license": "MIT"
+ },
+ "node_modules/mz": {
+ "version": "2.7.0",
+ "resolved": "https://registry.npmjs.org/mz/-/mz-2.7.0.tgz",
+ "integrity": "sha512-z81GNO7nnYMEhrGh9LeymoE4+Yr0Wn5McHIZMK5cfQCl+NDX08sCZgUc9/6MHni9IWuFLm1Z3HTCXu2z9fN62Q==",
+ "dev": true,
+ "license": "MIT",
+ "dependencies": {
+ "any-promise": "^1.0.0",
+ "object-assign": "^4.0.1",
+ "thenify-all": "^1.0.0"
+ }
+ },
+ "node_modules/nanoid": {
+ "version": "5.1.5",
+ "resolved": "https://registry.npmjs.org/nanoid/-/nanoid-5.1.5.tgz",
+ "integrity": "sha512-Ir/+ZpE9fDsNH0hQ3C68uyThDXzYcim2EqcZ8zn8Chtt1iylPT9xXJB0kPCnqzgcEGikO9RxSrh63MsmVCU7Fw==",
+ "funding": [
+ {
+ "type": "github",
+ "url": "https://github.com/sponsors/ai"
+ }
+ ],
+ "license": "MIT",
+ "bin": {
+ "nanoid": "bin/nanoid.js"
+ },
+ "engines": {
+ "node": "^18 || >=20"
+ }
+ },
+ "node_modules/napi-build-utils": {
+ "version": "2.0.0",
+ "resolved": "https://registry.npmjs.org/napi-build-utils/-/napi-build-utils-2.0.0.tgz",
+ "integrity": "sha512-GEbrYkbfF7MoNaoh2iGG84Mnf/WZfB0GdGEsM8wz7Expx/LlWf5U8t9nvJKXSp3qr5IsEbK04cBGhol/KwOsWA==",
+ "license": "MIT"
+ },
+ "node_modules/napi-postinstall": {
+ "version": "0.1.5",
+ "resolved": "https://registry.npmjs.org/napi-postinstall/-/napi-postinstall-0.1.5.tgz",
+ "integrity": "sha512-HI5bHONOUYqV+FJvueOSgjRxHTLB25a3xIv59ugAxFe7xRNbW96hyYbMbsKzl+QvFV9mN/SrtHwiU+vYhMwA7Q==",
+ "dev": true,
+ "license": "MIT",
+ "bin": {
+ "napi-postinstall": "lib/cli.js"
+ },
+ "engines": {
+ "node": "^12.20.0 || ^14.18.0 || >=16.0.0"
+ },
+ "funding": {
+ "url": "https://opencollective.com/napi-postinstall"
+ }
+ },
+ "node_modules/natural-compare": {
+ "version": "1.4.0",
+ "resolved": "https://registry.npmjs.org/natural-compare/-/natural-compare-1.4.0.tgz",
+ "integrity": "sha512-OWND8ei3VtNC9h7V60qff3SVobHr996CTwgxubgyQYEpg290h9J0buyECNNJexkFm5sOajh5G116RYA1c8ZMSw==",
+ "dev": true,
+ "license": "MIT"
+ },
+ "node_modules/neo-async": {
+ "version": "2.6.2",
+ "resolved": "https://registry.npmjs.org/neo-async/-/neo-async-2.6.2.tgz",
+ "integrity": "sha512-Yd3UES5mWCSqR+qNT93S3UoYUkqAZ9lLg8a7g9rimsWmYGK8cVToA4/sF3RrshdyV3sAGMXVUmpMYOw+dLpOuw==",
+ "license": "MIT"
+ },
+ "node_modules/neverthrow": {
+ "version": "7.2.0",
+ "resolved": "https://registry.npmjs.org/neverthrow/-/neverthrow-7.2.0.tgz",
+ "integrity": "sha512-iGBUfFB7yPczHHtA8dksKTJ9E8TESNTAx1UQWW6TzMF280vo9jdPYpLUXrMN1BCkPdHFdNG3fxOt2CUad8KhAw==",
+ "license": "MIT",
+ "engines": {
+ "node": ">=18"
+ }
+ },
+ "node_modules/next": {
+ "version": "14.2.28",
+ "resolved": "https://registry.npmjs.org/next/-/next-14.2.28.tgz",
+ "integrity": "sha512-QLEIP/kYXynIxtcKB6vNjtWLVs3Y4Sb+EClTC/CSVzdLD1gIuItccpu/n1lhmduffI32iPGEK2cLLxxt28qgYA==",
+ "license": "MIT",
+ "dependencies": {
+ "@next/env": "14.2.28",
+ "@swc/helpers": "0.5.5",
+ "busboy": "1.6.0",
+ "caniuse-lite": "^1.0.30001579",
+ "graceful-fs": "^4.2.11",
+ "postcss": "8.4.31",
+ "styled-jsx": "5.1.1"
+ },
+ "bin": {
+ "next": "dist/bin/next"
+ },
+ "engines": {
+ "node": ">=18.17.0"
+ },
+ "optionalDependencies": {
+ "@next/swc-darwin-arm64": "14.2.28",
+ "@next/swc-darwin-x64": "14.2.28",
+ "@next/swc-linux-arm64-gnu": "14.2.28",
+ "@next/swc-linux-arm64-musl": "14.2.28",
+ "@next/swc-linux-x64-gnu": "14.2.28",
+ "@next/swc-linux-x64-musl": "14.2.28",
+ "@next/swc-win32-arm64-msvc": "14.2.28",
+ "@next/swc-win32-ia32-msvc": "14.2.28",
+ "@next/swc-win32-x64-msvc": "14.2.28"
+ },
+ "peerDependencies": {
+ "@opentelemetry/api": "^1.1.0",
+ "@playwright/test": "^1.41.2",
+ "react": "^18.2.0",
+ "react-dom": "^18.2.0",
+ "sass": "^1.3.0"
+ },
+ "peerDependenciesMeta": {
+ "@opentelemetry/api": {
+ "optional": true
+ },
+ "@playwright/test": {
+ "optional": true
+ },
+ "sass": {
+ "optional": true
+ }
+ }
+ },
+ "node_modules/next-themes": {
+ "version": "0.3.0",
+ "resolved": "https://registry.npmjs.org/next-themes/-/next-themes-0.3.0.tgz",
+ "integrity": "sha512-/QHIrsYpd6Kfk7xakK4svpDI5mmXP0gfvCoJdGpZQ2TOrQZmsW0QxjaiLn8wbIKjtm4BTSqLoix4lxYYOnLJ/w==",
+ "license": "MIT",
+ "peerDependencies": {
+ "react": "^16.8 || ^17 || ^18",
+ "react-dom": "^16.8 || ^17 || ^18"
+ }
+ },
+ "node_modules/next/node_modules/nanoid": {
+ "version": "3.3.7",
+ "resolved": "https://registry.npmjs.org/nanoid/-/nanoid-3.3.7.tgz",
+ "integrity": "sha512-eSRppjcPIatRIMC1U6UngP8XFcz8MQWGQdt1MTBQ7NaAmvXDfvNxbvWV3x2y6CdEUciCSsDHDQZbhYaB8QEo2g==",
+ "funding": [
+ {
+ "type": "github",
+ "url": "https://github.com/sponsors/ai"
+ }
+ ],
+ "license": "MIT",
+ "bin": {
+ "nanoid": "bin/nanoid.cjs"
+ },
+ "engines": {
+ "node": "^10 || ^12 || ^13.7 || ^14 || >=15.0.1"
+ }
+ },
+ "node_modules/next/node_modules/postcss": {
+ "version": "8.4.31",
+ "resolved": "https://registry.npmjs.org/postcss/-/postcss-8.4.31.tgz",
+ "integrity": "sha512-PS08Iboia9mts/2ygV3eLpY5ghnUcfLV/EXTOW1E2qYxJKGGBUtNjN76FYHnMs36RmARn41bC0AZmn+rR0OVpQ==",
+ "funding": [
+ {
+ "type": "opencollective",
+ "url": "https://opencollective.com/postcss/"
+ },
+ {
+ "type": "tidelift",
+ "url": "https://tidelift.com/funding/github/npm/postcss"
+ },
+ {
+ "type": "github",
+ "url": "https://github.com/sponsors/ai"
+ }
+ ],
+ "license": "MIT",
+ "dependencies": {
+ "nanoid": "^3.3.6",
+ "picocolors": "^1.0.0",
+ "source-map-js": "^1.0.2"
+ },
+ "engines": {
+ "node": "^10 || ^12 || >=14"
+ }
+ },
+ "node_modules/node-abi": {
+ "version": "3.74.0",
+ "resolved": "https://registry.npmjs.org/node-abi/-/node-abi-3.74.0.tgz",
+ "integrity": "sha512-c5XK0MjkGBrQPGYG24GBADZud0NCbznxNx0ZkS+ebUTrmV1qTDxPxSL8zEAPURXSbLRWVexxmP4986BziahL5w==",
+ "license": "MIT",
+ "dependencies": {
+ "semver": "^7.3.5"
+ },
+ "engines": {
+ "node": ">=10"
+ }
+ },
+ "node_modules/node-abi/node_modules/semver": {
+ "version": "7.7.1",
+ "resolved": "https://registry.npmjs.org/semver/-/semver-7.7.1.tgz",
+ "integrity": "sha512-hlq8tAfn0m/61p4BVRcPzIGr6LKiMwo4VM6dGi6pt4qcRkmNzTcWq6eCEjEh+qXjkMDvPlOFFSGwQjoEa6gyMA==",
+ "license": "ISC",
+ "bin": {
+ "semver": "bin/semver.js"
+ },
+ "engines": {
+ "node": ">=10"
+ }
+ },
+ "node_modules/node-addon-api": {
+ "version": "7.1.1",
+ "resolved": "https://registry.npmjs.org/node-addon-api/-/node-addon-api-7.1.1.tgz",
+ "integrity": "sha512-5m3bsyrjFWE1xf7nz7YXdN4udnVtXK6/Yfgn5qnahL6bCkf2yKt4k3nuTKAtT4r3IG8JNR2ncsIMdZuAzJjHQQ==",
+ "license": "MIT"
+ },
+ "node_modules/node-domexception": {
+ "version": "1.0.0",
+ "resolved": "https://registry.npmjs.org/node-domexception/-/node-domexception-1.0.0.tgz",
+ "integrity": "sha512-/jKZoMpw0F8GRwl4/eLROPA3cfcXtLApP0QzLmUT/HuPCZWyB7IY9ZrMeKw2O/nFIqPQB3PVM9aYm0F312AXDQ==",
+ "funding": [
+ {
+ "type": "github",
+ "url": "https://github.com/sponsors/jimmywarting"
+ },
+ {
+ "type": "github",
+ "url": "https://paypal.me/jimmywarting"
+ }
+ ],
+ "license": "MIT",
+ "engines": {
+ "node": ">=10.5.0"
+ }
+ },
+ "node_modules/node-fetch": {
+ "version": "3.3.2",
+ "resolved": "https://registry.npmjs.org/node-fetch/-/node-fetch-3.3.2.tgz",
+ "integrity": "sha512-dRB78srN/l6gqWulah9SrxeYnxeddIG30+GOqK/9OlLVyLg3HPnr6SqOWTWOXKRwC2eGYCkZ59NNuSgvSrpgOA==",
+ "license": "MIT",
+ "dependencies": {
+ "data-uri-to-buffer": "^4.0.0",
+ "fetch-blob": "^3.1.4",
+ "formdata-polyfill": "^4.0.10"
+ },
+ "engines": {
+ "node": "^12.20.0 || ^14.13.1 || >=16.0.0"
+ },
+ "funding": {
+ "type": "opencollective",
+ "url": "https://opencollective.com/node-fetch"
+ }
+ },
+ "node_modules/node-int64": {
+ "version": "0.4.0",
+ "resolved": "https://registry.npmjs.org/node-int64/-/node-int64-0.4.0.tgz",
+ "integrity": "sha512-O5lz91xSOeoXP6DulyHfllpq+Eg00MWitZIbtPfoSEvqIHdl5gfcY6hYzDWnj0qD5tz52PI08u9qUvSVeUBeHw==",
+ "dev": true,
+ "license": "MIT",
+ "peer": true
+ },
+ "node_modules/node-microphone": {
+ "version": "0.1.6",
+ "resolved": "https://registry.npmjs.org/node-microphone/-/node-microphone-0.1.6.tgz",
+ "integrity": "sha512-5229wtpVYNU2gR8zpkABVSdp4wT9qagJgj6pELEIkAVbOXFmaCM35qN3z4ylu3OwFfEKqQ4h9u8Lb58DzaBieQ==",
+ "license": "MIT",
+ "engines": {
+ "node": ">=4.0"
+ }
+ },
+ "node_modules/node-releases": {
+ "version": "2.0.19",
+ "resolved": "https://registry.npmjs.org/node-releases/-/node-releases-2.0.19.tgz",
+ "integrity": "sha512-xxOWJsBKtzAq7DY0J+DTzuz58K8e7sJbdgwkbMWQe8UYB6ekmsQ45q0M/tJDsGaZmbC+l7n57UV8Hl5tHxO9uw==",
+ "dev": true,
+ "license": "MIT"
+ },
+ "node_modules/normalize-path": {
+ "version": "3.0.0",
+ "resolved": "https://registry.npmjs.org/normalize-path/-/normalize-path-3.0.0.tgz",
+ "integrity": "sha512-6eZs5Ls3WtCisHWp9S2GUy8dqkpGi4BVSz3GaqiE6ezub0512ESztXUwUB6C6IKbQkY2Pnb/mD4WYojCRwcwLA==",
+ "dev": true,
+ "license": "MIT",
+ "engines": {
+ "node": ">=0.10.0"
+ }
+ },
+ "node_modules/normalize-range": {
+ "version": "0.1.2",
+ "resolved": "https://registry.npmjs.org/normalize-range/-/normalize-range-0.1.2.tgz",
+ "integrity": "sha512-bdok/XvKII3nUpklnV6P2hxtMNrCboOjAcyBuQnWEhO665FwrSNRxU+AqpsyvO6LgGYPspN+lu5CLtw4jPRKNA==",
+ "dev": true,
+ "license": "MIT",
+ "engines": {
+ "node": ">=0.10.0"
+ }
+ },
+ "node_modules/npm-run-path": {
+ "version": "4.0.1",
+ "resolved": "https://registry.npmjs.org/npm-run-path/-/npm-run-path-4.0.1.tgz",
+ "integrity": "sha512-S48WzZW777zhNIrn7gxOlISNAqi9ZC/uQFnRdbeIHhZhCA6UqpkOT8T1G7BvfdgP4Er8gF4sUbaS0i7QvIfCWw==",
+ "dev": true,
+ "license": "MIT",
+ "peer": true,
+ "dependencies": {
+ "path-key": "^3.0.0"
+ },
+ "engines": {
+ "node": ">=8"
+ }
+ },
+ "node_modules/object-assign": {
+ "version": "4.1.1",
+ "resolved": "https://registry.npmjs.org/object-assign/-/object-assign-4.1.1.tgz",
+ "integrity": "sha512-rJgTQnkUnH1sFw8yT6VSU3zD3sWmu6sZhIseY8VX+GRu3P6F7Fu+JNDoXfklElbLJSnc3FUQHVe4cU5hj+BcUg==",
+ "license": "MIT",
+ "engines": {
+ "node": ">=0.10.0"
+ }
+ },
+ "node_modules/object-hash": {
+ "version": "3.0.0",
+ "resolved": "https://registry.npmjs.org/object-hash/-/object-hash-3.0.0.tgz",
+ "integrity": "sha512-RSn9F68PjH9HqtltsSnqYC1XXoWe9Bju5+213R98cNGttag9q9yAOTzdbsqvIa7aNm5WffBZFpWYr2aWrklWAw==",
+ "dev": true,
+ "license": "MIT",
+ "engines": {
+ "node": ">= 6"
+ }
+ },
+ "node_modules/object-inspect": {
+ "version": "1.13.3",
+ "resolved": "https://registry.npmjs.org/object-inspect/-/object-inspect-1.13.3.tgz",
+ "integrity": "sha512-kDCGIbxkDSXE3euJZZXzc6to7fCrKHNI/hSRQnRuQ+BWjFNzZwiFF8fj/6o2t2G9/jTj8PSIYTfCLelLZEeRpA==",
+ "license": "MIT",
+ "engines": {
+ "node": ">= 0.4"
+ },
+ "funding": {
+ "url": "https://github.com/sponsors/ljharb"
+ }
+ },
+ "node_modules/object-keys": {
+ "version": "1.1.1",
+ "resolved": "https://registry.npmjs.org/object-keys/-/object-keys-1.1.1.tgz",
+ "integrity": "sha512-NuAESUOUMrlIXOfHKzD6bpPu3tYt3xvjNdRIQ+FeT0lNb4K8WR70CaDxhuNguS2XG+GjkyMwOzsN5ZktImfhLA==",
+ "dev": true,
+ "license": "MIT",
+ "engines": {
+ "node": ">= 0.4"
+ }
+ },
+ "node_modules/object.assign": {
+ "version": "4.1.7",
+ "resolved": "https://registry.npmjs.org/object.assign/-/object.assign-4.1.7.tgz",
+ "integrity": "sha512-nK28WOo+QIjBkDduTINE4JkF/UJJKyf2EJxvJKfblDpyg0Q+pkOHNTL0Qwy6NP6FhE/EnzV73BxxqcJaXY9anw==",
+ "dev": true,
+ "license": "MIT",
+ "dependencies": {
+ "call-bind": "^1.0.8",
+ "call-bound": "^1.0.3",
+ "define-properties": "^1.2.1",
+ "es-object-atoms": "^1.0.0",
+ "has-symbols": "^1.1.0",
+ "object-keys": "^1.1.1"
+ },
+ "engines": {
+ "node": ">= 0.4"
+ },
+ "funding": {
+ "url": "https://github.com/sponsors/ljharb"
+ }
+ },
+ "node_modules/object.entries": {
+ "version": "1.1.9",
+ "resolved": "https://registry.npmjs.org/object.entries/-/object.entries-1.1.9.tgz",
+ "integrity": "sha512-8u/hfXFRBD1O0hPUjioLhoWFHRmt6tKA4/vZPyckBr18l1KE9uHrFaFaUi8MDRTpi4uak2goyPTSNJLXX2k2Hw==",
+ "dev": true,
+ "license": "MIT",
+ "dependencies": {
+ "call-bind": "^1.0.8",
+ "call-bound": "^1.0.4",
+ "define-properties": "^1.2.1",
+ "es-object-atoms": "^1.1.1"
+ },
+ "engines": {
+ "node": ">= 0.4"
+ }
+ },
+ "node_modules/object.fromentries": {
+ "version": "2.0.8",
+ "resolved": "https://registry.npmjs.org/object.fromentries/-/object.fromentries-2.0.8.tgz",
+ "integrity": "sha512-k6E21FzySsSK5a21KRADBd/NGneRegFO5pLHfdQLpRDETUNJueLXs3WCzyQ3tFRDYgbq3KHGXfTbi2bs8WQ6rQ==",
+ "dev": true,
+ "license": "MIT",
+ "dependencies": {
+ "call-bind": "^1.0.7",
+ "define-properties": "^1.2.1",
+ "es-abstract": "^1.23.2",
+ "es-object-atoms": "^1.0.0"
+ },
+ "engines": {
+ "node": ">= 0.4"
+ },
+ "funding": {
+ "url": "https://github.com/sponsors/ljharb"
+ }
+ },
+ "node_modules/object.groupby": {
+ "version": "1.0.3",
+ "resolved": "https://registry.npmjs.org/object.groupby/-/object.groupby-1.0.3.tgz",
+ "integrity": "sha512-+Lhy3TQTuzXI5hevh8sBGqbmurHbbIjAi0Z4S63nthVLmLxfbj4T54a4CfZrXIrt9iP4mVAPYMo/v99taj3wjQ==",
+ "dev": true,
+ "license": "MIT",
+ "dependencies": {
+ "call-bind": "^1.0.7",
+ "define-properties": "^1.2.1",
+ "es-abstract": "^1.23.2"
+ },
+ "engines": {
+ "node": ">= 0.4"
+ }
+ },
+ "node_modules/object.values": {
+ "version": "1.2.1",
+ "resolved": "https://registry.npmjs.org/object.values/-/object.values-1.2.1.tgz",
+ "integrity": "sha512-gXah6aZrcUxjWg2zR2MwouP2eHlCBzdV4pygudehaKXSGW4v2AsRQUK+lwwXhii6KFZcunEnmSUoYp5CXibxtA==",
+ "dev": true,
+ "license": "MIT",
+ "dependencies": {
+ "call-bind": "^1.0.8",
+ "call-bound": "^1.0.3",
+ "define-properties": "^1.2.1",
+ "es-object-atoms": "^1.0.0"
+ },
+ "engines": {
+ "node": ">= 0.4"
+ },
+ "funding": {
+ "url": "https://github.com/sponsors/ljharb"
+ }
+ },
+ "node_modules/once": {
+ "version": "1.4.0",
+ "resolved": "https://registry.npmjs.org/once/-/once-1.4.0.tgz",
+ "integrity": "sha512-lNaJgI+2Q5URQBkccEKHTQOPaXdUxnZZElQTZY0MFUAuaEqe1E+Nyvgdz/aIyNi6Z9MzO5dv1H8n58/GELp3+w==",
+ "license": "ISC",
+ "dependencies": {
+ "wrappy": "1"
+ }
+ },
+ "node_modules/onetime": {
+ "version": "5.1.2",
+ "resolved": "https://registry.npmjs.org/onetime/-/onetime-5.1.2.tgz",
+ "integrity": "sha512-kbpaSSGJTWdAY5KPVeMOKXSrPtr8C8C7wodJbcsd51jRnmD+GZu8Y0VoU6Dm5Z4vWr0Ig/1NKuWRKf7j5aaYSg==",
+ "dev": true,
+ "license": "MIT",
+ "peer": true,
+ "dependencies": {
+ "mimic-fn": "^2.1.0"
+ },
+ "engines": {
+ "node": ">=6"
+ },
+ "funding": {
+ "url": "https://github.com/sponsors/sindresorhus"
+ }
+ },
+ "node_modules/openai": {
+ "version": "4.96.0",
+ "resolved": "https://registry.npmjs.org/openai/-/openai-4.96.0.tgz",
+ "integrity": "sha512-dKoW56i02Prv2XQolJ9Rl9Svqubqkzg3QpwEOBuSVZLk05Shelu7s+ErRTwFc1Bs3JZ2qBqBfVpXQiJhwOGG8A==",
+ "license": "Apache-2.0",
+ "dependencies": {
+ "@types/node": "^18.11.18",
+ "@types/node-fetch": "^2.6.4",
+ "abort-controller": "^3.0.0",
+ "agentkeepalive": "^4.2.1",
+ "form-data-encoder": "1.7.2",
+ "formdata-node": "^4.3.2",
+ "node-fetch": "^2.6.7"
+ },
+ "bin": {
+ "openai": "bin/cli"
+ },
+ "peerDependencies": {
+ "ws": "^8.18.0",
+ "zod": "^3.23.8"
+ },
+ "peerDependenciesMeta": {
+ "ws": {
+ "optional": true
+ },
+ "zod": {
+ "optional": true
+ }
+ }
+ },
+ "node_modules/openai/node_modules/@types/node": {
+ "version": "18.19.64",
+ "resolved": "https://registry.npmjs.org/@types/node/-/node-18.19.64.tgz",
+ "integrity": "sha512-955mDqvO2vFf/oL7V3WiUtiz+BugyX8uVbaT2H8oj3+8dRyH2FLiNdowe7eNqRM7IOIZvzDH76EoAT+gwm6aIQ==",
+ "license": "MIT",
+ "dependencies": {
+ "undici-types": "~5.26.4"
+ }
+ },
+ "node_modules/openai/node_modules/node-fetch": {
+ "version": "2.7.0",
+ "resolved": "https://registry.npmjs.org/node-fetch/-/node-fetch-2.7.0.tgz",
+ "integrity": "sha512-c4FRfUm/dbcWZ7U+1Wq0AwCyFL+3nt2bEw05wfxSz+DWpWsitgmSgYmy2dQdWyKC1694ELPqMs/YzUSNozLt8A==",
+ "license": "MIT",
+ "dependencies": {
+ "whatwg-url": "^5.0.0"
+ },
+ "engines": {
+ "node": "4.x || >=6.0.0"
+ },
+ "peerDependencies": {
+ "encoding": "^0.1.0"
+ },
+ "peerDependenciesMeta": {
+ "encoding": {
+ "optional": true
+ }
+ }
+ },
+ "node_modules/openai/node_modules/undici-types": {
+ "version": "5.26.5",
+ "resolved": "https://registry.npmjs.org/undici-types/-/undici-types-5.26.5.tgz",
+ "integrity": "sha512-JlCMO+ehdEIKqlFxk6IfVoAUVmgz7cU7zD/h9XZ0qzeosSHmUJVOzSQvvYSYWXkFXC+IfLKSIffhv0sVZup6pA==",
+ "license": "MIT"
+ },
+ "node_modules/optionator": {
+ "version": "0.9.4",
+ "resolved": "https://registry.npmjs.org/optionator/-/optionator-0.9.4.tgz",
+ "integrity": "sha512-6IpQ7mKUxRcZNLIObR0hz7lxsapSSIYNZJwXPGeF0mTVqGKFIXj1DQcMoT22S3ROcLyY/rz0PWaWZ9ayWmad9g==",
+ "dev": true,
+ "license": "MIT",
+ "dependencies": {
+ "deep-is": "^0.1.3",
+ "fast-levenshtein": "^2.0.6",
+ "levn": "^0.4.1",
+ "prelude-ls": "^1.2.1",
+ "type-check": "^0.4.0",
+ "word-wrap": "^1.2.5"
+ },
+ "engines": {
+ "node": ">= 0.8.0"
+ }
+ },
+ "node_modules/own-keys": {
+ "version": "1.0.1",
+ "resolved": "https://registry.npmjs.org/own-keys/-/own-keys-1.0.1.tgz",
+ "integrity": "sha512-qFOyK5PjiWZd+QQIh+1jhdb9LpxTF0qs7Pm8o5QHYZ0M3vKqSqzsZaEB6oWlxZ+q2sJBMI/Ktgd2N5ZwQoRHfg==",
+ "dev": true,
+ "license": "MIT",
+ "dependencies": {
+ "get-intrinsic": "^1.2.6",
+ "object-keys": "^1.1.1",
+ "safe-push-apply": "^1.0.0"
+ },
+ "engines": {
+ "node": ">= 0.4"
+ },
+ "funding": {
+ "url": "https://github.com/sponsors/ljharb"
+ }
+ },
+ "node_modules/p-limit": {
+ "version": "6.2.0",
+ "resolved": "https://registry.npmjs.org/p-limit/-/p-limit-6.2.0.tgz",
+ "integrity": "sha512-kuUqqHNUqoIWp/c467RI4X6mmyuojY5jGutNU0wVTmEOOfcuwLqyMVoAi9MKi2Ak+5i9+nhmrK4ufZE8069kHA==",
+ "license": "MIT",
+ "dependencies": {
+ "yocto-queue": "^1.1.1"
+ },
+ "engines": {
+ "node": ">=18"
+ },
+ "funding": {
+ "url": "https://github.com/sponsors/sindresorhus"
+ }
+ },
+ "node_modules/p-locate": {
+ "version": "4.1.0",
+ "resolved": "https://registry.npmjs.org/p-locate/-/p-locate-4.1.0.tgz",
+ "integrity": "sha512-R79ZZ/0wAxKGu3oYMlz8jy/kbhsNrS7SKZ7PxEHBgJ5+F2mtFW2fK2cOtBh1cHYkQsbzFV7I+EoRKe6Yt0oK7A==",
+ "dev": true,
+ "license": "MIT",
+ "peer": true,
+ "dependencies": {
+ "p-limit": "^2.2.0"
+ },
+ "engines": {
+ "node": ">=8"
+ }
+ },
+ "node_modules/p-locate/node_modules/p-limit": {
+ "version": "2.3.0",
+ "resolved": "https://registry.npmjs.org/p-limit/-/p-limit-2.3.0.tgz",
+ "integrity": "sha512-//88mFWSJx8lxCzwdAABTJL2MyWB12+eIY7MDL2SqLmAkeKU9qxRvWuSyTjm3FUmpBEMuFfckAIqEaVGUDxb6w==",
+ "dev": true,
+ "license": "MIT",
+ "peer": true,
+ "dependencies": {
+ "p-try": "^2.0.0"
+ },
+ "engines": {
+ "node": ">=6"
+ },
+ "funding": {
+ "url": "https://github.com/sponsors/sindresorhus"
+ }
+ },
+ "node_modules/p-try": {
+ "version": "2.2.0",
+ "resolved": "https://registry.npmjs.org/p-try/-/p-try-2.2.0.tgz",
+ "integrity": "sha512-R4nPAVTAU0B9D35/Gk3uJf/7XYbQcyohSKdvAxIRSNghFl4e71hVoGnBNQz9cWaXxO2I10KTC+3jMdvvoKw6dQ==",
+ "dev": true,
+ "license": "MIT",
+ "peer": true,
+ "engines": {
+ "node": ">=6"
+ }
+ },
+ "node_modules/package-json-from-dist": {
+ "version": "1.0.1",
+ "resolved": "https://registry.npmjs.org/package-json-from-dist/-/package-json-from-dist-1.0.1.tgz",
+ "integrity": "sha512-UEZIS3/by4OC8vL3P2dTXRETpebLI2NiI5vIrjaD/5UtrkFX/tNbwjTSRAGC/+7CAo2pIcBaRgWmcBBHcsaCIw==",
+ "dev": true,
+ "license": "BlueOak-1.0.0"
+ },
+ "node_modules/pako": {
+ "version": "1.0.11",
+ "resolved": "https://registry.npmjs.org/pako/-/pako-1.0.11.tgz",
+ "integrity": "sha512-4hLB8Py4zZce5s4yd9XzopqwVv/yGNhV1Bl8NTmCq1763HeK2+EwVTv+leGeL13Dnh2wfbqowVPXCIO0z4taYw==",
+ "license": "(MIT AND Zlib)"
+ },
+ "node_modules/papaparse": {
+ "version": "5.5.2",
+ "resolved": "https://registry.npmjs.org/papaparse/-/papaparse-5.5.2.tgz",
+ "integrity": "sha512-PZXg8UuAc4PcVwLosEEDYjPyfWnTEhOrUfdv+3Bx+NuAb+5NhDmXzg5fHWmdCh1mP5p7JAZfFr3IMQfcntNAdA==",
+ "license": "MIT"
+ },
+ "node_modules/parent-module": {
+ "version": "1.0.1",
+ "resolved": "https://registry.npmjs.org/parent-module/-/parent-module-1.0.1.tgz",
+ "integrity": "sha512-GQ2EWRpQV8/o+Aw8YqtfZZPfNRWZYkbidE9k5rpl/hC3vtHHBfGm2Ifi6qWV+coDGkrUKZAxE3Lot5kcsRlh+g==",
+ "dev": true,
+ "license": "MIT",
+ "dependencies": {
+ "callsites": "^3.0.0"
+ },
+ "engines": {
+ "node": ">=6"
+ }
+ },
+ "node_modules/parse-entities": {
+ "version": "2.0.0",
+ "resolved": "https://registry.npmjs.org/parse-entities/-/parse-entities-2.0.0.tgz",
+ "integrity": "sha512-kkywGpCcRYhqQIchaWqZ875wzpS/bMKhz5HnN3p7wveJTkTtyAB/AlnS0f8DFSqYW1T82t6yEAkEcB+A1I3MbQ==",
+ "license": "MIT",
+ "dependencies": {
+ "character-entities": "^1.0.0",
+ "character-entities-legacy": "^1.0.0",
+ "character-reference-invalid": "^1.0.0",
+ "is-alphanumerical": "^1.0.0",
+ "is-decimal": "^1.0.0",
+ "is-hexadecimal": "^1.0.0"
+ },
+ "funding": {
+ "type": "github",
+ "url": "https://github.com/sponsors/wooorm"
+ }
+ },
+ "node_modules/parse-json": {
+ "version": "5.2.0",
+ "resolved": "https://registry.npmjs.org/parse-json/-/parse-json-5.2.0.tgz",
+ "integrity": "sha512-ayCKvm/phCGxOkYRSCM82iDwct8/EonSEgCSxWxD7ve6jHggsFl4fZVQBPRNgQoKiuV/odhFrGzQXZwbifC8Rg==",
+ "dev": true,
+ "license": "MIT",
+ "peer": true,
+ "dependencies": {
+ "@babel/code-frame": "^7.0.0",
+ "error-ex": "^1.3.1",
+ "json-parse-even-better-errors": "^2.3.0",
+ "lines-and-columns": "^1.1.6"
+ },
+ "engines": {
+ "node": ">=8"
+ },
+ "funding": {
+ "url": "https://github.com/sponsors/sindresorhus"
+ }
+ },
+ "node_modules/parseley": {
+ "version": "0.12.1",
+ "resolved": "https://registry.npmjs.org/parseley/-/parseley-0.12.1.tgz",
+ "integrity": "sha512-e6qHKe3a9HWr0oMRVDTRhKce+bRO8VGQR3NyVwcjwrbhMmFCX9KszEV35+rn4AdilFAq9VPxP/Fe1wC9Qjd2lw==",
+ "license": "MIT",
+ "dependencies": {
+ "leac": "^0.6.0",
+ "peberminta": "^0.9.0"
+ },
+ "funding": {
+ "url": "https://ko-fi.com/killymxi"
+ }
+ },
+ "node_modules/path-exists": {
+ "version": "4.0.0",
+ "resolved": "https://registry.npmjs.org/path-exists/-/path-exists-4.0.0.tgz",
+ "integrity": "sha512-ak9Qy5Q7jYb2Wwcey5Fpvg2KoAc/ZIhLSLOSBmRmygPsGwkVVt0fZa0qrtMz+m6tJTAHfZQ8FnmB4MG4LWy7/w==",
+ "dev": true,
+ "license": "MIT",
+ "engines": {
+ "node": ">=8"
+ }
+ },
+ "node_modules/path-is-absolute": {
+ "version": "1.0.1",
+ "resolved": "https://registry.npmjs.org/path-is-absolute/-/path-is-absolute-1.0.1.tgz",
+ "integrity": "sha512-AVbw3UJ2e9bq64vSaS9Am0fje1Pa8pbGqTTsmXfaIiMpnr5DlDhfJOuLj9Sf95ZPVDAUerDfEk88MPmPe7UCQg==",
+ "dev": true,
+ "license": "MIT",
+ "peer": true,
+ "engines": {
+ "node": ">=0.10.0"
+ }
+ },
+ "node_modules/path-key": {
+ "version": "3.1.1",
+ "resolved": "https://registry.npmjs.org/path-key/-/path-key-3.1.1.tgz",
+ "integrity": "sha512-ojmeN0qd+y0jszEtoY48r0Peq5dwMEkIlCOu6Q5f41lfkswXuKtYrhgoTpLnyIcHm24Uhqx+5Tqm2InSwLhE6Q==",
+ "dev": true,
+ "license": "MIT",
+ "engines": {
+ "node": ">=8"
+ }
+ },
+ "node_modules/path-parse": {
+ "version": "1.0.7",
+ "resolved": "https://registry.npmjs.org/path-parse/-/path-parse-1.0.7.tgz",
+ "integrity": "sha512-LDJzPVEEEPR+y48z93A0Ed0yXb8pAByGWo/k5YYdYgpY2/2EsOsksJrq7lOHxryrVOn1ejG6oAp8ahvOIQD8sw==",
+ "dev": true,
+ "license": "MIT"
+ },
+ "node_modules/path-scurry": {
+ "version": "1.11.1",
+ "resolved": "https://registry.npmjs.org/path-scurry/-/path-scurry-1.11.1.tgz",
+ "integrity": "sha512-Xa4Nw17FS9ApQFJ9umLiJS4orGjm7ZzwUrwamcGQuHSzDyth9boKDaycYdDcZDuqYATXw4HFXgaqWTctW/v1HA==",
+ "dev": true,
+ "license": "BlueOak-1.0.0",
+ "dependencies": {
+ "lru-cache": "^10.2.0",
+ "minipass": "^5.0.0 || ^6.0.2 || ^7.0.0"
+ },
+ "engines": {
+ "node": ">=16 || 14 >=14.18"
+ },
+ "funding": {
+ "url": "https://github.com/sponsors/isaacs"
+ }
+ },
+ "node_modules/path-scurry/node_modules/lru-cache": {
+ "version": "10.4.3",
+ "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-10.4.3.tgz",
+ "integrity": "sha512-JNAzZcXrCt42VGLuYz0zfAzDfAvJWW6AfYlDBQyDV5DClI2m5sAmK+OIO7s59XfsRsWHp02jAJrRadPRGTt6SQ==",
+ "dev": true,
+ "license": "ISC"
+ },
+ "node_modules/peberminta": {
+ "version": "0.9.0",
+ "resolved": "https://registry.npmjs.org/peberminta/-/peberminta-0.9.0.tgz",
+ "integrity": "sha512-XIxfHpEuSJbITd1H3EeQwpcZbTLHc+VVr8ANI9t5sit565tsI4/xK3KWTUFE2e6QiangUkh3B0jihzmGnNrRsQ==",
+ "license": "MIT",
+ "funding": {
+ "url": "https://ko-fi.com/killymxi"
+ }
+ },
+ "node_modules/picocolors": {
+ "version": "1.1.1",
+ "resolved": "https://registry.npmjs.org/picocolors/-/picocolors-1.1.1.tgz",
+ "integrity": "sha512-xceH2snhtb5M9liqDsmEw56le376mTZkEX/jEb/RxNFyegNul7eNslCXP9FDj/Lcu0X8KEyMceP2ntpaHrDEVA==",
+ "license": "ISC"
+ },
+ "node_modules/picomatch": {
+ "version": "2.3.1",
+ "resolved": "https://registry.npmjs.org/picomatch/-/picomatch-2.3.1.tgz",
+ "integrity": "sha512-JU3teHTNjmE2VCGFzuY8EXzCDVwEqB2a8fsIvwaStHhAWJEeVd1o1QD80CU6+ZdEXXSLbSsuLwJjkCBWqRQUVA==",
+ "dev": true,
+ "license": "MIT",
+ "engines": {
+ "node": ">=8.6"
+ },
+ "funding": {
+ "url": "https://github.com/sponsors/jonschlinkert"
+ }
+ },
+ "node_modules/pify": {
+ "version": "2.3.0",
+ "resolved": "https://registry.npmjs.org/pify/-/pify-2.3.0.tgz",
+ "integrity": "sha512-udgsAY+fTnvv7kI7aaxbqwWNb0AHiB0qBO89PZKPkoTmGOgdbrHDKD+0B2X4uTfJ/FT1R09r9gTsjUjNJotuog==",
+ "dev": true,
+ "license": "MIT",
+ "engines": {
+ "node": ">=0.10.0"
+ }
+ },
+ "node_modules/pinia": {
+ "version": "2.3.1",
+ "resolved": "https://registry.npmjs.org/pinia/-/pinia-2.3.1.tgz",
+ "integrity": "sha512-khUlZSwt9xXCaTbbxFYBKDc/bWAGWJjOgvxETwkTN7KRm66EeT1ZdZj6i2ceh9sP2Pzqsbc704r2yngBrxBVug==",
+ "license": "MIT",
+ "dependencies": {
+ "@vue/devtools-api": "^6.6.3",
+ "vue-demi": "^0.14.10"
+ },
+ "funding": {
+ "url": "https://github.com/sponsors/posva"
+ },
+ "peerDependencies": {
+ "typescript": ">=4.4.4",
+ "vue": "^2.7.0 || ^3.5.11"
+ },
+ "peerDependenciesMeta": {
+ "typescript": {
+ "optional": true
+ }
+ }
+ },
+ "node_modules/pinia/node_modules/vue-demi": {
+ "version": "0.14.10",
+ "resolved": "https://registry.npmjs.org/vue-demi/-/vue-demi-0.14.10.tgz",
+ "integrity": "sha512-nMZBOwuzabUO0nLgIcc6rycZEebF6eeUfaiQx9+WSk8e29IbLvPU9feI6tqW4kTo3hvoYAJkMh8n8D0fuISphg==",
+ "hasInstallScript": true,
+ "license": "MIT",
+ "bin": {
+ "vue-demi-fix": "bin/vue-demi-fix.js",
+ "vue-demi-switch": "bin/vue-demi-switch.js"
+ },
+ "engines": {
+ "node": ">=12"
+ },
+ "funding": {
+ "url": "https://github.com/sponsors/antfu"
+ },
+ "peerDependencies": {
+ "@vue/composition-api": "^1.0.0-rc.1",
+ "vue": "^3.0.0-0 || ^2.6.0"
+ },
+ "peerDependenciesMeta": {
+ "@vue/composition-api": {
+ "optional": true
+ }
+ }
+ },
+ "node_modules/pirates": {
+ "version": "4.0.6",
+ "resolved": "https://registry.npmjs.org/pirates/-/pirates-4.0.6.tgz",
+ "integrity": "sha512-saLsH7WeYYPiD25LDuLRRY/i+6HaPYr6G1OUlN39otzkSTxKnubR9RTxS3/Kk50s1g2JTgFwWQDQyplC5/SHZg==",
+ "dev": true,
+ "license": "MIT",
+ "engines": {
+ "node": ">= 6"
+ }
+ },
+ "node_modules/pkg-dir": {
+ "version": "4.2.0",
+ "resolved": "https://registry.npmjs.org/pkg-dir/-/pkg-dir-4.2.0.tgz",
+ "integrity": "sha512-HRDzbaKjC+AOWVXxAU/x54COGeIv9eb+6CkDSQoNTt4XyWoIJvuPsXizxu/Fr23EiekbtZwmh1IcIG/l/a10GQ==",
+ "dev": true,
+ "license": "MIT",
+ "peer": true,
+ "dependencies": {
+ "find-up": "^4.0.0"
+ },
+ "engines": {
+ "node": ">=8"
+ }
+ },
+ "node_modules/plotly": {
+ "version": "1.0.6",
+ "resolved": "https://registry.npmjs.org/plotly/-/plotly-1.0.6.tgz",
+ "integrity": "sha512-9DoPWfLJWxqXg6omu1Oj7qkvyOce0Nv+X+2SOoI9lG9mbvA7S/qGVHypwrGMV3r53ruW1Fl1A9a7ZIPt22FrpA==",
+ "license": "MIT",
+ "dependencies": {
+ "mkdirp": "~0.5.0"
+ }
+ },
+ "node_modules/possible-typed-array-names": {
+ "version": "1.1.0",
+ "resolved": "https://registry.npmjs.org/possible-typed-array-names/-/possible-typed-array-names-1.1.0.tgz",
+ "integrity": "sha512-/+5VFTchJDoVj3bhoqi6UeymcD00DAwb1nJwamzPvHEszJ4FpF6SNNbUbOS8yI56qHzdV8eK0qEfOSiodkTdxg==",
+ "dev": true,
+ "license": "MIT",
+ "engines": {
+ "node": ">= 0.4"
+ }
+ },
+ "node_modules/postcss": {
+ "version": "8.5.3",
+ "resolved": "https://registry.npmjs.org/postcss/-/postcss-8.5.3.tgz",
+ "integrity": "sha512-dle9A3yYxlBSrt8Fu+IpjGT8SY8hN0mlaA6GY8t0P5PjIOZemULz/E2Bnm/2dcUOena75OTNkHI76uZBNUUq3A==",
+ "funding": [
+ {
+ "type": "opencollective",
+ "url": "https://opencollective.com/postcss/"
+ },
+ {
+ "type": "tidelift",
+ "url": "https://tidelift.com/funding/github/npm/postcss"
+ },
+ {
+ "type": "github",
+ "url": "https://github.com/sponsors/ai"
+ }
+ ],
+ "license": "MIT",
+ "dependencies": {
+ "nanoid": "^3.3.8",
+ "picocolors": "^1.1.1",
+ "source-map-js": "^1.2.1"
+ },
+ "engines": {
+ "node": "^10 || ^12 || >=14"
+ }
+ },
+ "node_modules/postcss-import": {
+ "version": "15.1.0",
+ "resolved": "https://registry.npmjs.org/postcss-import/-/postcss-import-15.1.0.tgz",
+ "integrity": "sha512-hpr+J05B2FVYUAXHeK1YyI267J/dDDhMU6B6civm8hSY1jYJnBXxzKDKDswzJmtLHryrjhnDjqqp/49t8FALew==",
+ "dev": true,
+ "license": "MIT",
+ "dependencies": {
+ "postcss-value-parser": "^4.0.0",
+ "read-cache": "^1.0.0",
+ "resolve": "^1.1.7"
+ },
+ "engines": {
+ "node": ">=14.0.0"
+ },
+ "peerDependencies": {
+ "postcss": "^8.0.0"
+ }
+ },
+ "node_modules/postcss-js": {
+ "version": "4.0.1",
+ "resolved": "https://registry.npmjs.org/postcss-js/-/postcss-js-4.0.1.tgz",
+ "integrity": "sha512-dDLF8pEO191hJMtlHFPRa8xsizHaM82MLfNkUHdUtVEV3tgTp5oj+8qbEqYM57SLfc74KSbw//4SeJma2LRVIw==",
+ "dev": true,
+ "license": "MIT",
+ "dependencies": {
+ "camelcase-css": "^2.0.1"
+ },
+ "engines": {
+ "node": "^12 || ^14 || >= 16"
+ },
+ "funding": {
+ "type": "opencollective",
+ "url": "https://opencollective.com/postcss/"
+ },
+ "peerDependencies": {
+ "postcss": "^8.4.21"
+ }
+ },
+ "node_modules/postcss-load-config": {
+ "version": "4.0.2",
+ "resolved": "https://registry.npmjs.org/postcss-load-config/-/postcss-load-config-4.0.2.tgz",
+ "integrity": "sha512-bSVhyJGL00wMVoPUzAVAnbEoWyqRxkjv64tUl427SKnPrENtq6hJwUojroMz2VB+Q1edmi4IfrAPpami5VVgMQ==",
+ "dev": true,
+ "funding": [
+ {
+ "type": "opencollective",
+ "url": "https://opencollective.com/postcss/"
+ },
+ {
+ "type": "github",
+ "url": "https://github.com/sponsors/ai"
+ }
+ ],
+ "license": "MIT",
+ "dependencies": {
+ "lilconfig": "^3.0.0",
+ "yaml": "^2.3.4"
+ },
+ "engines": {
+ "node": ">= 14"
+ },
+ "peerDependencies": {
+ "postcss": ">=8.0.9",
+ "ts-node": ">=9.0.0"
+ },
+ "peerDependenciesMeta": {
+ "postcss": {
+ "optional": true
+ },
+ "ts-node": {
+ "optional": true
+ }
+ }
+ },
+ "node_modules/postcss-nested": {
+ "version": "6.2.0",
+ "resolved": "https://registry.npmjs.org/postcss-nested/-/postcss-nested-6.2.0.tgz",
+ "integrity": "sha512-HQbt28KulC5AJzG+cZtj9kvKB93CFCdLvog1WFLf1D+xmMvPGlBstkpTEZfK5+AN9hfJocyBFCNiqyS48bpgzQ==",
+ "dev": true,
+ "funding": [
+ {
+ "type": "opencollective",
+ "url": "https://opencollective.com/postcss/"
+ },
+ {
+ "type": "github",
+ "url": "https://github.com/sponsors/ai"
+ }
+ ],
+ "license": "MIT",
+ "dependencies": {
+ "postcss-selector-parser": "^6.1.1"
+ },
+ "engines": {
+ "node": ">=12.0"
+ },
+ "peerDependencies": {
+ "postcss": "^8.2.14"
+ }
+ },
+ "node_modules/postcss-nested/node_modules/postcss-selector-parser": {
+ "version": "6.1.2",
+ "resolved": "https://registry.npmjs.org/postcss-selector-parser/-/postcss-selector-parser-6.1.2.tgz",
+ "integrity": "sha512-Q8qQfPiZ+THO/3ZrOrO0cJJKfpYCagtMUkXbnEfmgUjwXg6z/WBeOyS9APBBPCTSiDV+s4SwQGu8yFsiMRIudg==",
+ "dev": true,
+ "license": "MIT",
+ "dependencies": {
+ "cssesc": "^3.0.0",
+ "util-deprecate": "^1.0.2"
+ },
+ "engines": {
+ "node": ">=4"
+ }
+ },
+ "node_modules/postcss-selector-parser": {
+ "version": "6.0.10",
+ "resolved": "https://registry.npmjs.org/postcss-selector-parser/-/postcss-selector-parser-6.0.10.tgz",
+ "integrity": "sha512-IQ7TZdoaqbT+LCpShg46jnZVlhWD2w6iQYAcYXfHARZ7X1t/UGhhceQDs5X0cGqKvYlHNOuv7Oa1xmb0oQuA3w==",
+ "dev": true,
+ "license": "MIT",
+ "dependencies": {
+ "cssesc": "^3.0.0",
+ "util-deprecate": "^1.0.2"
+ },
+ "engines": {
+ "node": ">=4"
+ }
+ },
+ "node_modules/postcss-value-parser": {
+ "version": "4.2.0",
+ "resolved": "https://registry.npmjs.org/postcss-value-parser/-/postcss-value-parser-4.2.0.tgz",
+ "integrity": "sha512-1NNCs6uurfkVbeXG4S8JFT9t19m45ICnif8zWLd5oPSZ50QnwMfK+H3jv408d4jw/7Bttv5axS5IiHoLaVNHeQ==",
+ "dev": true,
+ "license": "MIT"
+ },
+ "node_modules/postcss/node_modules/nanoid": {
+ "version": "3.3.11",
+ "resolved": "https://registry.npmjs.org/nanoid/-/nanoid-3.3.11.tgz",
+ "integrity": "sha512-N8SpfPUnUp1bK+PMYW8qSWdl9U+wwNWI4QKxOYDy9JAro3WMX7p2OeVRF9v+347pnakNevPmiHhNmZ2HbFA76w==",
+ "funding": [
+ {
+ "type": "github",
+ "url": "https://github.com/sponsors/ai"
+ }
+ ],
+ "license": "MIT",
+ "bin": {
+ "nanoid": "bin/nanoid.cjs"
+ },
+ "engines": {
+ "node": "^10 || ^12 || ^13.7 || ^14 || >=15.0.1"
+ }
+ },
+ "node_modules/prebuild-install": {
+ "version": "7.1.3",
+ "resolved": "https://registry.npmjs.org/prebuild-install/-/prebuild-install-7.1.3.tgz",
+ "integrity": "sha512-8Mf2cbV7x1cXPUILADGI3wuhfqWvtiLA1iclTDbFRZkgRQS0NqsPZphna9V+HyTEadheuPmjaJMsbzKQFOzLug==",
+ "license": "MIT",
+ "dependencies": {
+ "detect-libc": "^2.0.0",
+ "expand-template": "^2.0.3",
+ "github-from-package": "0.0.0",
+ "minimist": "^1.2.3",
+ "mkdirp-classic": "^0.5.3",
+ "napi-build-utils": "^2.0.0",
+ "node-abi": "^3.3.0",
+ "pump": "^3.0.0",
+ "rc": "^1.2.7",
+ "simple-get": "^4.0.0",
+ "tar-fs": "^2.0.0",
+ "tunnel-agent": "^0.6.0"
+ },
+ "bin": {
+ "prebuild-install": "bin.js"
+ },
+ "engines": {
+ "node": ">=10"
+ }
+ },
+ "node_modules/prelude-ls": {
+ "version": "1.2.1",
+ "resolved": "https://registry.npmjs.org/prelude-ls/-/prelude-ls-1.2.1.tgz",
+ "integrity": "sha512-vkcDPrRZo1QZLbn5RLGPpg/WmIQ65qoWWhcGKf/b5eplkkarX0m9z8ppCat4mlOqUsWpyNuYgO3VRyrYHSzX5g==",
+ "dev": true,
+ "license": "MIT",
+ "engines": {
+ "node": ">= 0.8.0"
+ }
+ },
+ "node_modules/prettier": {
+ "version": "3.5.3",
+ "resolved": "https://registry.npmjs.org/prettier/-/prettier-3.5.3.tgz",
+ "integrity": "sha512-QQtaxnoDJeAkDvDKWCLiwIXkTgRhwYDEQCghU9Z6q03iyek/rxRh/2lC3HB7P8sWT2xC/y5JDctPLBIGzHKbhw==",
+ "license": "MIT",
+ "bin": {
+ "prettier": "bin/prettier.cjs"
+ },
+ "engines": {
+ "node": ">=14"
+ },
+ "funding": {
+ "url": "https://github.com/prettier/prettier?sponsor=1"
+ }
+ },
+ "node_modules/pretty-format": {
+ "version": "29.7.0",
+ "resolved": "https://registry.npmjs.org/pretty-format/-/pretty-format-29.7.0.tgz",
+ "integrity": "sha512-Pdlw/oPxN+aXdmM9R00JVC9WVFoCLTKJvDVLgmJ+qAffBMxsV85l/Lu7sNx4zSzPyoL2euImuEwHhOXdEgNFZQ==",
+ "dev": true,
+ "license": "MIT",
+ "dependencies": {
+ "@jest/schemas": "^29.6.3",
+ "ansi-styles": "^5.0.0",
+ "react-is": "^18.0.0"
+ },
+ "engines": {
+ "node": "^14.15.0 || ^16.10.0 || >=18.0.0"
+ }
+ },
+ "node_modules/pretty-format/node_modules/ansi-styles": {
+ "version": "5.2.0",
+ "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-5.2.0.tgz",
+ "integrity": "sha512-Cxwpt2SfTzTtXcfOlzGEee8O+c+MmUgGrNiBcXnuWxuFJHe6a5Hz7qwhwe5OgaSYI0IJvkLqWX1ASG+cJOkEiA==",
+ "dev": true,
+ "license": "MIT",
+ "engines": {
+ "node": ">=10"
+ },
+ "funding": {
+ "url": "https://github.com/chalk/ansi-styles?sponsor=1"
+ }
+ },
+ "node_modules/prismjs": {
+ "version": "1.29.0",
+ "resolved": "https://registry.npmjs.org/prismjs/-/prismjs-1.29.0.tgz",
+ "integrity": "sha512-Kx/1w86q/epKcmte75LNrEoT+lX8pBpavuAbvJWRXar7Hz8jrtF+e3vY751p0R8H9HdArwaCTNDDzHg/ScJK1Q==",
+ "license": "MIT",
+ "engines": {
+ "node": ">=6"
+ }
+ },
+ "node_modules/process-nextick-args": {
+ "version": "2.0.1",
+ "resolved": "https://registry.npmjs.org/process-nextick-args/-/process-nextick-args-2.0.1.tgz",
+ "integrity": "sha512-3ouUOpQhtgrbOa17J7+uxOTpITYWaGP7/AhoR3+A+/1e9skrzelGi/dXzEYyvbxubEF6Wn2ypscTKiKJFFn1ag==",
+ "license": "MIT"
+ },
+ "node_modules/prompts": {
+ "version": "2.4.2",
+ "resolved": "https://registry.npmjs.org/prompts/-/prompts-2.4.2.tgz",
+ "integrity": "sha512-NxNv/kLguCA7p3jE8oL2aEBsrJWgAakBpgmgK6lpPWV+WuOmY6r2/zbAVnP+T8bQlA0nzHXSJSJW0Hq7ylaD2Q==",
+ "dev": true,
+ "license": "MIT",
+ "peer": true,
+ "dependencies": {
+ "kleur": "^3.0.3",
+ "sisteransi": "^1.0.5"
+ },
+ "engines": {
+ "node": ">= 6"
+ }
+ },
+ "node_modules/prop-types": {
+ "version": "15.8.1",
+ "resolved": "https://registry.npmjs.org/prop-types/-/prop-types-15.8.1.tgz",
+ "integrity": "sha512-oj87CgZICdulUohogVAR7AjlC0327U4el4L6eAvOqCeudMDVU0NThNaV+b9Df4dXgSP1gXMTnPdhfe/2qDH5cg==",
+ "license": "MIT",
+ "dependencies": {
+ "loose-envify": "^1.4.0",
+ "object-assign": "^4.1.1",
+ "react-is": "^16.13.1"
+ }
+ },
+ "node_modules/prop-types/node_modules/react-is": {
+ "version": "16.13.1",
+ "resolved": "https://registry.npmjs.org/react-is/-/react-is-16.13.1.tgz",
+ "integrity": "sha512-24e6ynE2H+OKt4kqsOvNd8kBpV65zoxbA4BVsEOB3ARVWQki/DHzaUoC5KuON/BiccDaCCTZBuOcfZs70kR8bQ==",
+ "license": "MIT"
+ },
+ "node_modules/property-information": {
+ "version": "6.5.0",
+ "resolved": "https://registry.npmjs.org/property-information/-/property-information-6.5.0.tgz",
+ "integrity": "sha512-PgTgs/BlvHxOu8QuEN7wi5A0OmXaBcHpmCSTehcs6Uuu9IkDIEo13Hy7n898RHfrQ49vKCoGeWZSaAK01nwVig==",
+ "license": "MIT",
+ "funding": {
+ "type": "github",
+ "url": "https://github.com/sponsors/wooorm"
+ }
+ },
+ "node_modules/proxy-from-env": {
+ "version": "1.1.0",
+ "resolved": "https://registry.npmjs.org/proxy-from-env/-/proxy-from-env-1.1.0.tgz",
+ "integrity": "sha512-D+zkORCbA9f1tdWRK0RaCR3GPv50cMxcrz4X8k5LTSUD1Dkw47mKJEZQNunItRTkWwgtaUSo1RVFRIG9ZXiFYg==",
+ "license": "MIT"
+ },
+ "node_modules/pump": {
+ "version": "3.0.2",
+ "resolved": "https://registry.npmjs.org/pump/-/pump-3.0.2.tgz",
+ "integrity": "sha512-tUPXtzlGM8FE3P0ZL6DVs/3P58k9nk8/jZeQCurTJylQA8qFYzHFfhBJkuqyE0FifOsQ0uKWekiZ5g8wtr28cw==",
+ "license": "MIT",
+ "dependencies": {
+ "end-of-stream": "^1.1.0",
+ "once": "^1.3.1"
+ }
+ },
+ "node_modules/punycode": {
+ "version": "2.3.1",
+ "resolved": "https://registry.npmjs.org/punycode/-/punycode-2.3.1.tgz",
+ "integrity": "sha512-vYt7UD1U9Wg6138shLtLOvdAu+8DsC/ilFtEVHcH+wydcSpNE20AfSOduf6MkRFahL5FY7X1oU7nKVZFtfq8Fg==",
+ "dev": true,
+ "license": "MIT",
+ "engines": {
+ "node": ">=6"
+ }
+ },
+ "node_modules/punycode.js": {
+ "version": "2.3.1",
+ "resolved": "https://registry.npmjs.org/punycode.js/-/punycode.js-2.3.1.tgz",
+ "integrity": "sha512-uxFIHU0YlHYhDQtV4R9J6a52SLx28BCjT+4ieh7IGbgwVJWO+km431c4yRlREUAsAmt/uMjQUyQHNEPf0M39CA==",
+ "license": "MIT",
+ "engines": {
+ "node": ">=6"
+ }
+ },
+ "node_modules/pure-rand": {
+ "version": "6.1.0",
+ "resolved": "https://registry.npmjs.org/pure-rand/-/pure-rand-6.1.0.tgz",
+ "integrity": "sha512-bVWawvoZoBYpp6yIoQtQXHZjmz35RSVHnUOTefl8Vcjr8snTPY1wnpSPMWekcFwbxI6gtmT7rSYPFvz71ldiOA==",
+ "dev": true,
+ "funding": [
+ {
+ "type": "individual",
+ "url": "https://github.com/sponsors/dubzzz"
+ },
+ {
+ "type": "opencollective",
+ "url": "https://opencollective.com/fast-check"
+ }
+ ],
+ "license": "MIT",
+ "peer": true
+ },
+ "node_modules/qs": {
+ "version": "6.13.0",
+ "resolved": "https://registry.npmjs.org/qs/-/qs-6.13.0.tgz",
+ "integrity": "sha512-+38qI9SOr8tfZ4QmJNplMUxqjbe7LKvvZgWdExBOmd+egZTtjLB67Gu0HRX3u/XOq7UU2Nx6nsjvS16Z9uwfpg==",
+ "license": "BSD-3-Clause",
+ "dependencies": {
+ "side-channel": "^1.0.6"
+ },
+ "engines": {
+ "node": ">=0.6"
+ },
+ "funding": {
+ "url": "https://github.com/sponsors/ljharb"
+ }
+ },
+ "node_modules/queue-microtask": {
+ "version": "1.2.3",
+ "resolved": "https://registry.npmjs.org/queue-microtask/-/queue-microtask-1.2.3.tgz",
+ "integrity": "sha512-NuaNSa6flKT5JaSYQzJok04JzTL1CA6aGhv5rfLW3PgqA+M2ChpZQnAC8h8i4ZFkBS8X5RqkDBHA7r4hej3K9A==",
+ "dev": true,
+ "funding": [
+ {
+ "type": "github",
+ "url": "https://github.com/sponsors/feross"
+ },
+ {
+ "type": "patreon",
+ "url": "https://www.patreon.com/feross"
+ },
+ {
+ "type": "consulting",
+ "url": "https://feross.org/support"
+ }
+ ],
+ "license": "MIT"
+ },
+ "node_modules/rc": {
+ "version": "1.2.8",
+ "resolved": "https://registry.npmjs.org/rc/-/rc-1.2.8.tgz",
+ "integrity": "sha512-y3bGgqKj3QBdxLbLkomlohkvsA8gdAiUQlSBJnBhfn+BPxg4bc62d8TcBW15wavDfgexCgccckhcZvywyQYPOw==",
+ "license": "(BSD-2-Clause OR MIT OR Apache-2.0)",
+ "dependencies": {
+ "deep-extend": "^0.6.0",
+ "ini": "~1.3.0",
+ "minimist": "^1.2.0",
+ "strip-json-comments": "~2.0.1"
+ },
+ "bin": {
+ "rc": "cli.js"
+ }
+ },
+ "node_modules/rc/node_modules/strip-json-comments": {
+ "version": "2.0.1",
+ "resolved": "https://registry.npmjs.org/strip-json-comments/-/strip-json-comments-2.0.1.tgz",
+ "integrity": "sha512-4gB8na07fecVVkOI6Rs4e7T6NOTki5EmL7TUduTs6bu3EdnSycntVJ4re8kgZA+wx9IueI2Y11bfbgwtzuE0KQ==",
+ "license": "MIT",
+ "engines": {
+ "node": ">=0.10.0"
+ }
+ },
+ "node_modules/react": {
+ "version": "18.3.1",
+ "resolved": "https://registry.npmjs.org/react/-/react-18.3.1.tgz",
+ "integrity": "sha512-wS+hAgJShR0KhEvPJArfuPVN1+Hz1t0Y6n5jLrGQbkb4urgPE/0Rve+1kMB1v/oWgHgm4WIcV+i7F2pTVj+2iQ==",
+ "license": "MIT",
+ "dependencies": {
+ "loose-envify": "^1.1.0"
+ },
+ "engines": {
+ "node": ">=0.10.0"
+ }
+ },
+ "node_modules/react-dom": {
+ "version": "18.3.1",
+ "resolved": "https://registry.npmjs.org/react-dom/-/react-dom-18.3.1.tgz",
+ "integrity": "sha512-5m4nQKp+rZRb09LNH59GM4BxTh9251/ylbKIbpe7TpGxfJ+9kv6BLkLBXIjjspbgbnIBNqlI23tRnTWT0snUIw==",
+ "license": "MIT",
+ "dependencies": {
+ "loose-envify": "^1.1.0",
+ "scheduler": "^0.23.2"
+ },
+ "peerDependencies": {
+ "react": "^18.3.1"
+ }
+ },
+ "node_modules/react-intersection-observer": {
+ "version": "9.16.0",
+ "resolved": "https://registry.npmjs.org/react-intersection-observer/-/react-intersection-observer-9.16.0.tgz",
+ "integrity": "sha512-w9nJSEp+DrW9KmQmeWHQyfaP6b03v+TdXynaoA964Wxt7mdR3An11z4NNCQgL4gKSK7y1ver2Fq+JKH6CWEzUA==",
+ "license": "MIT",
+ "peerDependencies": {
+ "react": "^17.0.0 || ^18.0.0 || ^19.0.0",
+ "react-dom": "^17.0.0 || ^18.0.0 || ^19.0.0"
+ },
+ "peerDependenciesMeta": {
+ "react-dom": {
+ "optional": true
+ }
+ }
+ },
+ "node_modules/react-is": {
+ "version": "18.3.1",
+ "resolved": "https://registry.npmjs.org/react-is/-/react-is-18.3.1.tgz",
+ "integrity": "sha512-/LLMVyas0ljjAtoYiPqYiL8VWXzUUdThrmU5+n20DZv+a+ClRoevUzw5JxU+Ieh5/c87ytoTBV9G1FiKfNJdmg==",
+ "license": "MIT"
+ },
+ "node_modules/react-markdown": {
+ "version": "8.0.7",
+ "resolved": "https://registry.npmjs.org/react-markdown/-/react-markdown-8.0.7.tgz",
+ "integrity": "sha512-bvWbzG4MtOU62XqBx3Xx+zB2raaFFsq4mYiAzfjXJMEz2sixgeAfraA3tvzULF02ZdOMUOKTBFFaZJDDrq+BJQ==",
+ "license": "MIT",
+ "dependencies": {
+ "@types/hast": "^2.0.0",
+ "@types/prop-types": "^15.0.0",
+ "@types/unist": "^2.0.0",
+ "comma-separated-tokens": "^2.0.0",
+ "hast-util-whitespace": "^2.0.0",
+ "prop-types": "^15.0.0",
+ "property-information": "^6.0.0",
+ "react-is": "^18.0.0",
+ "remark-parse": "^10.0.0",
+ "remark-rehype": "^10.0.0",
+ "space-separated-tokens": "^2.0.0",
+ "style-to-object": "^0.4.0",
+ "unified": "^10.0.0",
+ "unist-util-visit": "^4.0.0",
+ "vfile": "^5.0.0"
+ },
+ "funding": {
+ "type": "opencollective",
+ "url": "https://opencollective.com/unified"
+ },
+ "peerDependencies": {
+ "@types/react": ">=16",
+ "react": ">=16"
+ }
+ },
+ "node_modules/react-promise-suspense": {
+ "version": "0.3.4",
+ "resolved": "https://registry.npmjs.org/react-promise-suspense/-/react-promise-suspense-0.3.4.tgz",
+ "integrity": "sha512-I42jl7L3Ze6kZaq+7zXWSunBa3b1on5yfvUW6Eo/3fFOj6dZ5Bqmcd264nJbTK/gn1HjjILAjSwnZbV4RpSaNQ==",
+ "license": "MIT",
+ "dependencies": {
+ "fast-deep-equal": "^2.0.1"
+ }
+ },
+ "node_modules/react-promise-suspense/node_modules/fast-deep-equal": {
+ "version": "2.0.1",
+ "resolved": "https://registry.npmjs.org/fast-deep-equal/-/fast-deep-equal-2.0.1.tgz",
+ "integrity": "sha512-bCK/2Z4zLidyB4ReuIsvALH6w31YfAQDmXMqMx6FyfHqvBxtjC0eRumeSu4Bs3XtXwpyIywtSTrVT99BxY1f9w==",
+ "license": "MIT"
+ },
+ "node_modules/react-remove-scroll": {
+ "version": "2.6.3",
+ "resolved": "https://registry.npmjs.org/react-remove-scroll/-/react-remove-scroll-2.6.3.tgz",
+ "integrity": "sha512-pnAi91oOk8g8ABQKGF5/M9qxmmOPxaAnopyTHYfqYEwJhyFrbbBtHuSgtKEoH0jpcxx5o3hXqH1mNd9/Oi+8iQ==",
+ "license": "MIT",
+ "dependencies": {
+ "react-remove-scroll-bar": "^2.3.7",
+ "react-style-singleton": "^2.2.3",
+ "tslib": "^2.1.0",
+ "use-callback-ref": "^1.3.3",
+ "use-sidecar": "^1.1.3"
+ },
+ "engines": {
+ "node": ">=10"
+ },
+ "peerDependencies": {
+ "@types/react": "*",
+ "react": "^16.8.0 || ^17.0.0 || ^18.0.0 || ^19.0.0 || ^19.0.0-rc"
+ },
+ "peerDependenciesMeta": {
+ "@types/react": {
+ "optional": true
+ }
+ }
+ },
+ "node_modules/react-remove-scroll-bar": {
+ "version": "2.3.8",
+ "resolved": "https://registry.npmjs.org/react-remove-scroll-bar/-/react-remove-scroll-bar-2.3.8.tgz",
+ "integrity": "sha512-9r+yi9+mgU33AKcj6IbT9oRCO78WriSj6t/cF8DWBZJ9aOGPOTEDvdUDz1FwKim7QXWwmHqtdHnRJfhAxEG46Q==",
+ "license": "MIT",
+ "dependencies": {
+ "react-style-singleton": "^2.2.2",
+ "tslib": "^2.0.0"
+ },
+ "engines": {
+ "node": ">=10"
+ },
+ "peerDependencies": {
+ "@types/react": "*",
+ "react": "^16.8.0 || ^17.0.0 || ^18.0.0 || ^19.0.0"
+ },
+ "peerDependenciesMeta": {
+ "@types/react": {
+ "optional": true
+ }
+ }
+ },
+ "node_modules/react-style-singleton": {
+ "version": "2.2.3",
+ "resolved": "https://registry.npmjs.org/react-style-singleton/-/react-style-singleton-2.2.3.tgz",
+ "integrity": "sha512-b6jSvxvVnyptAiLjbkWLE/lOnR4lfTtDAl+eUC7RZy+QQWc6wRzIV2CE6xBuMmDxc2qIihtDCZD5NPOFl7fRBQ==",
+ "license": "MIT",
+ "dependencies": {
+ "get-nonce": "^1.0.0",
+ "tslib": "^2.0.0"
+ },
+ "engines": {
+ "node": ">=10"
+ },
+ "peerDependencies": {
+ "@types/react": "*",
+ "react": "^16.8.0 || ^17.0.0 || ^18.0.0 || ^19.0.0 || ^19.0.0-rc"
+ },
+ "peerDependenciesMeta": {
+ "@types/react": {
+ "optional": true
+ }
+ }
+ },
+ "node_modules/react-syntax-highlighter": {
+ "version": "15.6.1",
+ "resolved": "https://registry.npmjs.org/react-syntax-highlighter/-/react-syntax-highlighter-15.6.1.tgz",
+ "integrity": "sha512-OqJ2/vL7lEeV5zTJyG7kmARppUjiB9h9udl4qHQjjgEos66z00Ia0OckwYfRxCSFrW8RJIBnsBwQsHZbVPspqg==",
+ "license": "MIT",
+ "dependencies": {
+ "@babel/runtime": "^7.3.1",
+ "highlight.js": "^10.4.1",
+ "highlightjs-vue": "^1.0.0",
+ "lowlight": "^1.17.0",
+ "prismjs": "^1.27.0",
+ "refractor": "^3.6.0"
+ },
+ "peerDependencies": {
+ "react": ">= 0.14.0"
+ }
+ },
+ "node_modules/react-textarea-autosize": {
+ "version": "8.5.9",
+ "resolved": "https://registry.npmjs.org/react-textarea-autosize/-/react-textarea-autosize-8.5.9.tgz",
+ "integrity": "sha512-U1DGlIQN5AwgjTyOEnI1oCcMuEr1pv1qOtklB2l4nyMGbHzWrI0eFsYK0zos2YWqAolJyG0IWJaqWmWj5ETh0A==",
+ "license": "MIT",
+ "dependencies": {
+ "@babel/runtime": "^7.20.13",
+ "use-composed-ref": "^1.3.0",
+ "use-latest": "^1.2.1"
+ },
+ "engines": {
+ "node": ">=10"
+ },
+ "peerDependencies": {
+ "react": "^16.8.0 || ^17.0.0 || ^18.0.0 || ^19.0.0"
+ }
+ },
+ "node_modules/read-cache": {
+ "version": "1.0.0",
+ "resolved": "https://registry.npmjs.org/read-cache/-/read-cache-1.0.0.tgz",
+ "integrity": "sha512-Owdv/Ft7IjOgm/i0xvNDZ1LrRANRfew4b2prF3OWMQLxLfu3bS8FVhCsrSCMK4lR56Y9ya+AThoTpDCTxCmpRA==",
+ "dev": true,
+ "license": "MIT",
+ "dependencies": {
+ "pify": "^2.3.0"
+ }
+ },
+ "node_modules/readable-stream": {
+ "version": "2.3.8",
+ "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-2.3.8.tgz",
+ "integrity": "sha512-8p0AUk4XODgIewSi0l8Epjs+EVnWiK7NoDIEGU0HhE7+ZyY8D1IMY7odu5lRrFXGg71L15KG8QrPmum45RTtdA==",
+ "license": "MIT",
+ "dependencies": {
+ "core-util-is": "~1.0.0",
+ "inherits": "~2.0.3",
+ "isarray": "~1.0.0",
+ "process-nextick-args": "~2.0.0",
+ "safe-buffer": "~5.1.1",
+ "string_decoder": "~1.1.1",
+ "util-deprecate": "~1.0.1"
+ }
+ },
+ "node_modules/readable-stream/node_modules/safe-buffer": {
+ "version": "5.1.2",
+ "resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.1.2.tgz",
+ "integrity": "sha512-Gd2UZBJDkXlY7GbJxfsE8/nvKkUEU1G38c1siN6QP6a9PT9MmHB8GnpscSmMJSoF8LOIrt8ud/wPtojys4G6+g==",
+ "license": "MIT"
+ },
+ "node_modules/readdirp": {
+ "version": "3.6.0",
+ "resolved": "https://registry.npmjs.org/readdirp/-/readdirp-3.6.0.tgz",
+ "integrity": "sha512-hOS089on8RduqdbhvQ5Z37A0ESjsqz6qnRcffsMU3495FuTdqSm+7bhJ29JvIOsBDEEnan5DPu9t3To9VRlMzA==",
+ "dev": true,
+ "license": "MIT",
+ "dependencies": {
+ "picomatch": "^2.2.1"
+ },
+ "engines": {
+ "node": ">=8.10.0"
+ }
+ },
+ "node_modules/reflect.getprototypeof": {
+ "version": "1.0.10",
+ "resolved": "https://registry.npmjs.org/reflect.getprototypeof/-/reflect.getprototypeof-1.0.10.tgz",
+ "integrity": "sha512-00o4I+DVrefhv+nX0ulyi3biSHCPDe+yLv5o/p6d/UVlirijB8E16FtfwSAi4g3tcqrQ4lRAqQSoFEZJehYEcw==",
+ "dev": true,
+ "license": "MIT",
+ "dependencies": {
+ "call-bind": "^1.0.8",
+ "define-properties": "^1.2.1",
+ "es-abstract": "^1.23.9",
+ "es-errors": "^1.3.0",
+ "es-object-atoms": "^1.0.0",
+ "get-intrinsic": "^1.2.7",
+ "get-proto": "^1.0.1",
+ "which-builtin-type": "^1.2.1"
+ },
+ "engines": {
+ "node": ">= 0.4"
+ },
+ "funding": {
+ "url": "https://github.com/sponsors/ljharb"
+ }
+ },
+ "node_modules/refractor": {
+ "version": "3.6.0",
+ "resolved": "https://registry.npmjs.org/refractor/-/refractor-3.6.0.tgz",
+ "integrity": "sha512-MY9W41IOWxxk31o+YvFCNyNzdkc9M20NoZK5vq6jkv4I/uh2zkWcfudj0Q1fovjUQJrNewS9NMzeTtqPf+n5EA==",
+ "license": "MIT",
+ "dependencies": {
+ "hastscript": "^6.0.0",
+ "parse-entities": "^2.0.0",
+ "prismjs": "~1.27.0"
+ },
+ "funding": {
+ "type": "github",
+ "url": "https://github.com/sponsors/wooorm"
+ }
+ },
+ "node_modules/refractor/node_modules/prismjs": {
+ "version": "1.27.0",
+ "resolved": "https://registry.npmjs.org/prismjs/-/prismjs-1.27.0.tgz",
+ "integrity": "sha512-t13BGPUlFDR7wRB5kQDG4jjl7XeuH6jbJGt11JHPL96qwsEHNX2+68tFXqc1/k+/jALsbSWJKUOT/hcYAZ5LkA==",
+ "license": "MIT",
+ "engines": {
+ "node": ">=6"
+ }
+ },
+ "node_modules/regenerator-runtime": {
+ "version": "0.14.1",
+ "resolved": "https://registry.npmjs.org/regenerator-runtime/-/regenerator-runtime-0.14.1.tgz",
+ "integrity": "sha512-dYnhHh0nJoMfnkZs6GmmhFknAGRrLznOu5nc9ML+EJxGvrx6H7teuevqVqCuPcPK//3eDrrjQhehXVx9cnkGdw==",
+ "license": "MIT"
+ },
+ "node_modules/regexp.prototype.flags": {
+ "version": "1.5.4",
+ "resolved": "https://registry.npmjs.org/regexp.prototype.flags/-/regexp.prototype.flags-1.5.4.tgz",
+ "integrity": "sha512-dYqgNSZbDwkaJ2ceRd9ojCGjBq+mOm9LmtXnAnEGyHhN/5R7iDW2TRw3h+o/jCFxus3P2LfWIIiwowAjANm7IA==",
+ "dev": true,
+ "license": "MIT",
+ "dependencies": {
+ "call-bind": "^1.0.8",
+ "define-properties": "^1.2.1",
+ "es-errors": "^1.3.0",
+ "get-proto": "^1.0.1",
+ "gopd": "^1.2.0",
+ "set-function-name": "^2.0.2"
+ },
+ "engines": {
+ "node": ">= 0.4"
+ },
+ "funding": {
+ "url": "https://github.com/sponsors/ljharb"
+ }
+ },
+ "node_modules/remark-gfm": {
+ "version": "3.0.1",
+ "resolved": "https://registry.npmjs.org/remark-gfm/-/remark-gfm-3.0.1.tgz",
+ "integrity": "sha512-lEFDoi2PICJyNrACFOfDD3JlLkuSbOa5Wd8EPt06HUdptv8Gn0bxYTdbU/XXQ3swAPkEaGxxPN9cbnMHvVu1Ig==",
+ "license": "MIT",
+ "dependencies": {
+ "@types/mdast": "^3.0.0",
+ "mdast-util-gfm": "^2.0.0",
+ "micromark-extension-gfm": "^2.0.0",
+ "unified": "^10.0.0"
+ },
+ "funding": {
+ "type": "opencollective",
+ "url": "https://opencollective.com/unified"
+ }
+ },
+ "node_modules/remark-math": {
+ "version": "5.1.1",
+ "resolved": "https://registry.npmjs.org/remark-math/-/remark-math-5.1.1.tgz",
+ "integrity": "sha512-cE5T2R/xLVtfFI4cCePtiRn+e6jKMtFDR3P8V3qpv8wpKjwvHoBA4eJzvX+nVrnlNy0911bdGmuspCSwetfYHw==",
+ "license": "MIT",
+ "dependencies": {
+ "@types/mdast": "^3.0.0",
+ "mdast-util-math": "^2.0.0",
+ "micromark-extension-math": "^2.0.0",
+ "unified": "^10.0.0"
+ },
+ "funding": {
+ "type": "opencollective",
+ "url": "https://opencollective.com/unified"
+ }
+ },
+ "node_modules/remark-parse": {
+ "version": "10.0.2",
+ "resolved": "https://registry.npmjs.org/remark-parse/-/remark-parse-10.0.2.tgz",
+ "integrity": "sha512-3ydxgHa/ZQzG8LvC7jTXccARYDcRld3VfcgIIFs7bI6vbRSxJJmzgLEIIoYKyrfhaY+ujuWaf/PJiMZXoiCXgw==",
+ "license": "MIT",
+ "dependencies": {
+ "@types/mdast": "^3.0.0",
+ "mdast-util-from-markdown": "^1.0.0",
+ "unified": "^10.0.0"
+ },
+ "funding": {
+ "type": "opencollective",
+ "url": "https://opencollective.com/unified"
+ }
+ },
+ "node_modules/remark-rehype": {
+ "version": "10.1.0",
+ "resolved": "https://registry.npmjs.org/remark-rehype/-/remark-rehype-10.1.0.tgz",
+ "integrity": "sha512-EFmR5zppdBp0WQeDVZ/b66CWJipB2q2VLNFMabzDSGR66Z2fQii83G5gTBbgGEnEEA0QRussvrFHxk1HWGJskw==",
+ "license": "MIT",
+ "dependencies": {
+ "@types/hast": "^2.0.0",
+ "@types/mdast": "^3.0.0",
+ "mdast-util-to-hast": "^12.1.0",
+ "unified": "^10.0.0"
+ },
+ "funding": {
+ "type": "opencollective",
+ "url": "https://opencollective.com/unified"
+ }
+ },
+ "node_modules/require-directory": {
+ "version": "2.1.1",
+ "resolved": "https://registry.npmjs.org/require-directory/-/require-directory-2.1.1.tgz",
+ "integrity": "sha512-fGxEI7+wsG9xrvdjsrlmL22OMTTiHRwAMroiEeMgq8gzoLC/PQr7RsRDSTLUg/bZAZtF+TVIkHc6/4RIKrui+Q==",
+ "dev": true,
+ "license": "MIT",
+ "peer": true,
+ "engines": {
+ "node": ">=0.10.0"
+ }
+ },
+ "node_modules/resend": {
+ "version": "4.4.0",
+ "resolved": "https://registry.npmjs.org/resend/-/resend-4.4.0.tgz",
+ "integrity": "sha512-SmVI3JCpgPNt4/m3Uy403LjoSeeleUE2X+KwPYQZcw+jiBCFsqL6vdf1r/XuQ7yOjvxYmlI8GD/oIWonFF9t9w==",
+ "license": "MIT",
+ "dependencies": {
+ "@react-email/render": "1.0.6"
+ },
+ "engines": {
+ "node": ">=18"
+ }
+ },
+ "node_modules/resolve": {
+ "version": "1.22.8",
+ "resolved": "https://registry.npmjs.org/resolve/-/resolve-1.22.8.tgz",
+ "integrity": "sha512-oKWePCxqpd6FlLvGV1VU0x7bkPmmCNolxzjMf4NczoDnQcIWrAF+cPtZn5i6n+RfD2d9i0tzpKnG6Yk168yIyw==",
+ "dev": true,
+ "license": "MIT",
+ "dependencies": {
+ "is-core-module": "^2.13.0",
+ "path-parse": "^1.0.7",
+ "supports-preserve-symlinks-flag": "^1.0.0"
+ },
+ "bin": {
+ "resolve": "bin/resolve"
+ },
+ "funding": {
+ "url": "https://github.com/sponsors/ljharb"
+ }
+ },
+ "node_modules/resolve-cwd": {
+ "version": "3.0.0",
+ "resolved": "https://registry.npmjs.org/resolve-cwd/-/resolve-cwd-3.0.0.tgz",
+ "integrity": "sha512-OrZaX2Mb+rJCpH/6CpSqt9xFVpN++x01XnN2ie9g6P5/3xelLAkXWVADpdz1IHD/KFfEXyE6V0U01OQ3UO2rEg==",
+ "dev": true,
+ "license": "MIT",
+ "peer": true,
+ "dependencies": {
+ "resolve-from": "^5.0.0"
+ },
+ "engines": {
+ "node": ">=8"
+ }
+ },
+ "node_modules/resolve-from": {
+ "version": "5.0.0",
+ "resolved": "https://registry.npmjs.org/resolve-from/-/resolve-from-5.0.0.tgz",
+ "integrity": "sha512-qYg9KP24dD5qka9J47d0aVky0N+b4fTU89LN9iDnjB5waksiC49rvMB0PrUJQGoTmH50XPiqOvAjDfaijGxYZw==",
+ "dev": true,
+ "license": "MIT",
+ "peer": true,
+ "engines": {
+ "node": ">=8"
+ }
+ },
+ "node_modules/resolve-pkg-maps": {
+ "version": "1.0.0",
+ "resolved": "https://registry.npmjs.org/resolve-pkg-maps/-/resolve-pkg-maps-1.0.0.tgz",
+ "integrity": "sha512-seS2Tj26TBVOC2NIc2rOe2y2ZO7efxITtLZcGSOnHHNOQ7CkiUBfw0Iw2ck6xkIhPwLhKNLS8BO+hEpngQlqzw==",
+ "dev": true,
+ "license": "MIT",
+ "funding": {
+ "url": "https://github.com/privatenumber/resolve-pkg-maps?sponsor=1"
+ }
+ },
+ "node_modules/resolve.exports": {
+ "version": "2.0.2",
+ "resolved": "https://registry.npmjs.org/resolve.exports/-/resolve.exports-2.0.2.tgz",
+ "integrity": "sha512-X2UW6Nw3n/aMgDVy+0rSqgHlv39WZAlZrXCdnbyEiKm17DSqHX4MmQMaST3FbeWR5FTuRcUwYAziZajji0Y7mg==",
+ "dev": true,
+ "license": "MIT",
+ "peer": true,
+ "engines": {
+ "node": ">=10"
+ }
+ },
+ "node_modules/reusify": {
+ "version": "1.0.4",
+ "resolved": "https://registry.npmjs.org/reusify/-/reusify-1.0.4.tgz",
+ "integrity": "sha512-U9nH88a3fc/ekCF1l0/UP1IosiuIjyTh7hBvXVMHYgVcfGvt897Xguj2UOLDeI5BG2m7/uwyaLVT6fbtCwTyzw==",
+ "dev": true,
+ "license": "MIT",
+ "engines": {
+ "iojs": ">=1.0.0",
+ "node": ">=0.10.0"
+ }
+ },
+ "node_modules/run-parallel": {
+ "version": "1.2.0",
+ "resolved": "https://registry.npmjs.org/run-parallel/-/run-parallel-1.2.0.tgz",
+ "integrity": "sha512-5l4VyZR86LZ/lDxZTR6jqL8AFE2S0IFLMP26AbjsLVADxHdhB/c0GUsH+y39UfCi3dzz8OlQuPmnaJOMoDHQBA==",
+ "dev": true,
+ "funding": [
+ {
+ "type": "github",
+ "url": "https://github.com/sponsors/feross"
+ },
+ {
+ "type": "patreon",
+ "url": "https://www.patreon.com/feross"
+ },
+ {
+ "type": "consulting",
+ "url": "https://feross.org/support"
+ }
+ ],
+ "license": "MIT",
+ "dependencies": {
+ "queue-microtask": "^1.2.2"
+ }
+ },
+ "node_modules/sade": {
+ "version": "1.8.1",
+ "resolved": "https://registry.npmjs.org/sade/-/sade-1.8.1.tgz",
+ "integrity": "sha512-xal3CZX1Xlo/k4ApwCFrHVACi9fBqJ7V+mwhBsuf/1IOKbBy098Fex+Wa/5QMubw09pSZ/u8EY8PWgevJsXp1A==",
+ "license": "MIT",
+ "dependencies": {
+ "mri": "^1.1.0"
+ },
+ "engines": {
+ "node": ">=6"
+ }
+ },
+ "node_modules/safe-array-concat": {
+ "version": "1.1.3",
+ "resolved": "https://registry.npmjs.org/safe-array-concat/-/safe-array-concat-1.1.3.tgz",
+ "integrity": "sha512-AURm5f0jYEOydBj7VQlVvDrjeFgthDdEF5H1dP+6mNpoXOMo1quQqJ4wvJDyRZ9+pO3kGWoOdmV08cSv2aJV6Q==",
+ "dev": true,
+ "license": "MIT",
+ "dependencies": {
+ "call-bind": "^1.0.8",
+ "call-bound": "^1.0.2",
+ "get-intrinsic": "^1.2.6",
+ "has-symbols": "^1.1.0",
+ "isarray": "^2.0.5"
+ },
+ "engines": {
+ "node": ">=0.4"
+ },
+ "funding": {
+ "url": "https://github.com/sponsors/ljharb"
+ }
+ },
+ "node_modules/safe-array-concat/node_modules/isarray": {
+ "version": "2.0.5",
+ "resolved": "https://registry.npmjs.org/isarray/-/isarray-2.0.5.tgz",
+ "integrity": "sha512-xHjhDr3cNBK0BzdUJSPXZntQUx/mwMS5Rw4A7lPJ90XGAO6ISP/ePDNuo0vhqOZU+UD5JoodwCAAoZQd3FeAKw==",
+ "dev": true,
+ "license": "MIT"
+ },
+ "node_modules/safe-buffer": {
+ "version": "5.2.1",
+ "resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.2.1.tgz",
+ "integrity": "sha512-rp3So07KcdmmKbGvgaNxQSJr7bGVSVk5S9Eq1F+ppbRo70+YeaDxkw5Dd8NPN+GD6bjnYm2VuPuCXmpuYvmCXQ==",
+ "funding": [
+ {
+ "type": "github",
+ "url": "https://github.com/sponsors/feross"
+ },
+ {
+ "type": "patreon",
+ "url": "https://www.patreon.com/feross"
+ },
+ {
+ "type": "consulting",
+ "url": "https://feross.org/support"
+ }
+ ],
+ "license": "MIT"
+ },
+ "node_modules/safe-push-apply": {
+ "version": "1.0.0",
+ "resolved": "https://registry.npmjs.org/safe-push-apply/-/safe-push-apply-1.0.0.tgz",
+ "integrity": "sha512-iKE9w/Z7xCzUMIZqdBsp6pEQvwuEebH4vdpjcDWnyzaI6yl6O9FHvVpmGelvEHNsoY6wGblkxR6Zty/h00WiSA==",
+ "dev": true,
+ "license": "MIT",
+ "dependencies": {
+ "es-errors": "^1.3.0",
+ "isarray": "^2.0.5"
+ },
+ "engines": {
+ "node": ">= 0.4"
+ },
+ "funding": {
+ "url": "https://github.com/sponsors/ljharb"
+ }
+ },
+ "node_modules/safe-push-apply/node_modules/isarray": {
+ "version": "2.0.5",
+ "resolved": "https://registry.npmjs.org/isarray/-/isarray-2.0.5.tgz",
+ "integrity": "sha512-xHjhDr3cNBK0BzdUJSPXZntQUx/mwMS5Rw4A7lPJ90XGAO6ISP/ePDNuo0vhqOZU+UD5JoodwCAAoZQd3FeAKw==",
+ "dev": true,
+ "license": "MIT"
+ },
+ "node_modules/safe-regex-test": {
+ "version": "1.1.0",
+ "resolved": "https://registry.npmjs.org/safe-regex-test/-/safe-regex-test-1.1.0.tgz",
+ "integrity": "sha512-x/+Cz4YrimQxQccJf5mKEbIa1NzeCRNI5Ecl/ekmlYaampdNLPalVyIcCZNNH3MvmqBugV5TMYZXv0ljslUlaw==",
+ "dev": true,
+ "license": "MIT",
+ "dependencies": {
+ "call-bound": "^1.0.2",
+ "es-errors": "^1.3.0",
+ "is-regex": "^1.2.1"
+ },
+ "engines": {
+ "node": ">= 0.4"
+ },
+ "funding": {
+ "url": "https://github.com/sponsors/ljharb"
+ }
+ },
+ "node_modules/scheduler": {
+ "version": "0.23.2",
+ "resolved": "https://registry.npmjs.org/scheduler/-/scheduler-0.23.2.tgz",
+ "integrity": "sha512-UOShsPwz7NrMUqhR6t0hWjFduvOzbtv7toDH1/hIrfRNIDBnnBWd0CwJTGvTpngVlmwGCdP9/Zl/tVrDqcuYzQ==",
+ "license": "MIT",
+ "dependencies": {
+ "loose-envify": "^1.1.0"
+ }
+ },
+ "node_modules/scmp": {
+ "version": "2.1.0",
+ "resolved": "https://registry.npmjs.org/scmp/-/scmp-2.1.0.tgz",
+ "integrity": "sha512-o/mRQGk9Rcer/jEEw/yw4mwo3EU/NvYvp577/Btqrym9Qy5/MdWGBqipbALgd2lrdWTJ5/gqDusxfnQBxOxT2Q==",
+ "license": "BSD-3-Clause"
+ },
+ "node_modules/secure-json-parse": {
+ "version": "2.7.0",
+ "resolved": "https://registry.npmjs.org/secure-json-parse/-/secure-json-parse-2.7.0.tgz",
+ "integrity": "sha512-6aU+Rwsezw7VR8/nyvKTx8QpWH9FrcYiXXlqC4z5d5XQBDRqtbfsRjnwGyqbi3gddNtWHuEk9OANUotL26qKUw==",
+ "license": "BSD-3-Clause"
+ },
+ "node_modules/selderee": {
+ "version": "0.11.0",
+ "resolved": "https://registry.npmjs.org/selderee/-/selderee-0.11.0.tgz",
+ "integrity": "sha512-5TF+l7p4+OsnP8BCCvSyZiSPc4x4//p5uPwK8TCnVPJYRmU2aYKMpOXvw8zM5a5JvuuCGN1jmsMwuU2W02ukfA==",
+ "license": "MIT",
+ "dependencies": {
+ "parseley": "^0.12.0"
+ },
+ "funding": {
+ "url": "https://ko-fi.com/killymxi"
+ }
+ },
+ "node_modules/semver": {
+ "version": "6.3.1",
+ "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.1.tgz",
+ "integrity": "sha512-BR7VvDCVHO+q2xBEWskxS6DJE1qRnb7DxzUrogb71CWoSficBxYsiAGd+Kl0mmq/MprG9yArRkyrQxTO6XjMzA==",
+ "dev": true,
+ "license": "ISC",
+ "bin": {
+ "semver": "bin/semver.js"
+ }
+ },
+ "node_modules/set-function-length": {
+ "version": "1.2.2",
+ "resolved": "https://registry.npmjs.org/set-function-length/-/set-function-length-1.2.2.tgz",
+ "integrity": "sha512-pgRc4hJ4/sNjWCSS9AmnS40x3bNMDTknHgL5UaMBTMyJnU90EgWh1Rz+MC9eFu4BuN/UwZjKQuY/1v3rM7HMfg==",
+ "dev": true,
+ "license": "MIT",
+ "dependencies": {
+ "define-data-property": "^1.1.4",
+ "es-errors": "^1.3.0",
+ "function-bind": "^1.1.2",
+ "get-intrinsic": "^1.2.4",
+ "gopd": "^1.0.1",
+ "has-property-descriptors": "^1.0.2"
+ },
+ "engines": {
+ "node": ">= 0.4"
+ }
+ },
+ "node_modules/set-function-name": {
+ "version": "2.0.2",
+ "resolved": "https://registry.npmjs.org/set-function-name/-/set-function-name-2.0.2.tgz",
+ "integrity": "sha512-7PGFlmtwsEADb0WYyvCMa1t+yke6daIG4Wirafur5kcf+MhUnPms1UeR0CKQdTZD81yESwMHbtn+TR+dMviakQ==",
+ "dev": true,
+ "license": "MIT",
+ "dependencies": {
+ "define-data-property": "^1.1.4",
+ "es-errors": "^1.3.0",
+ "functions-have-names": "^1.2.3",
+ "has-property-descriptors": "^1.0.2"
+ },
+ "engines": {
+ "node": ">= 0.4"
+ }
+ },
+ "node_modules/set-proto": {
+ "version": "1.0.0",
+ "resolved": "https://registry.npmjs.org/set-proto/-/set-proto-1.0.0.tgz",
+ "integrity": "sha512-RJRdvCo6IAnPdsvP/7m6bsQqNnn1FCBX5ZNtFL98MmFF/4xAIJTIg1YbHW5DC2W5SKZanrC6i4HsJqlajw/dZw==",
+ "dev": true,
+ "license": "MIT",
+ "dependencies": {
+ "dunder-proto": "^1.0.1",
+ "es-errors": "^1.3.0",
+ "es-object-atoms": "^1.0.0"
+ },
+ "engines": {
+ "node": ">= 0.4"
+ }
+ },
+ "node_modules/setimmediate": {
+ "version": "1.0.5",
+ "resolved": "https://registry.npmjs.org/setimmediate/-/setimmediate-1.0.5.tgz",
+ "integrity": "sha512-MATJdZp8sLqDl/68LfQmbP8zKPLQNV6BIZoIgrscFDQ+RsvK/BxeDQOgyxKKoh0y/8h3BqVFnCqQ/gd+reiIXA==",
+ "license": "MIT"
+ },
+ "node_modules/sharp": {
+ "version": "0.33.5",
+ "resolved": "https://registry.npmjs.org/sharp/-/sharp-0.33.5.tgz",
+ "integrity": "sha512-haPVm1EkS9pgvHrQ/F3Xy+hgcuMV0Wm9vfIBSiwZ05k+xgb0PkBQpGsAA/oWdDobNaZTH5ppvHtzCFbnSEwHVw==",
+ "hasInstallScript": true,
+ "license": "Apache-2.0",
+ "dependencies": {
+ "color": "^4.2.3",
+ "detect-libc": "^2.0.3",
+ "semver": "^7.6.3"
+ },
+ "engines": {
+ "node": "^18.17.0 || ^20.3.0 || >=21.0.0"
+ },
+ "funding": {
+ "url": "https://opencollective.com/libvips"
+ },
+ "optionalDependencies": {
+ "@img/sharp-darwin-arm64": "0.33.5",
+ "@img/sharp-darwin-x64": "0.33.5",
+ "@img/sharp-libvips-darwin-arm64": "1.0.4",
+ "@img/sharp-libvips-darwin-x64": "1.0.4",
+ "@img/sharp-libvips-linux-arm": "1.0.5",
+ "@img/sharp-libvips-linux-arm64": "1.0.4",
+ "@img/sharp-libvips-linux-s390x": "1.0.4",
+ "@img/sharp-libvips-linux-x64": "1.0.4",
+ "@img/sharp-libvips-linuxmusl-arm64": "1.0.4",
+ "@img/sharp-libvips-linuxmusl-x64": "1.0.4",
+ "@img/sharp-linux-arm": "0.33.5",
+ "@img/sharp-linux-arm64": "0.33.5",
+ "@img/sharp-linux-s390x": "0.33.5",
+ "@img/sharp-linux-x64": "0.33.5",
+ "@img/sharp-linuxmusl-arm64": "0.33.5",
+ "@img/sharp-linuxmusl-x64": "0.33.5",
+ "@img/sharp-wasm32": "0.33.5",
+ "@img/sharp-win32-ia32": "0.33.5",
+ "@img/sharp-win32-x64": "0.33.5"
+ }
+ },
+ "node_modules/sharp/node_modules/semver": {
+ "version": "7.6.3",
+ "resolved": "https://registry.npmjs.org/semver/-/semver-7.6.3.tgz",
+ "integrity": "sha512-oVekP1cKtI+CTDvHWYFUcMtsK/00wmAEfyqKfNdARm8u1wNVhSgaX7A8d4UuIlUI5e84iEwOhs7ZPYRmzU9U6A==",
+ "license": "ISC",
+ "bin": {
+ "semver": "bin/semver.js"
+ },
+ "engines": {
+ "node": ">=10"
+ }
+ },
+ "node_modules/shebang-command": {
+ "version": "2.0.0",
+ "resolved": "https://registry.npmjs.org/shebang-command/-/shebang-command-2.0.0.tgz",
+ "integrity": "sha512-kHxr2zZpYtdmrN1qDjrrX/Z1rR1kG8Dx+gkpK1G4eXmvXswmcE1hTWBWYUzlraYw1/yZp6YuDY77YtvbN0dmDA==",
+ "dev": true,
+ "license": "MIT",
+ "dependencies": {
+ "shebang-regex": "^3.0.0"
+ },
+ "engines": {
+ "node": ">=8"
+ }
+ },
+ "node_modules/shebang-regex": {
+ "version": "3.0.0",
+ "resolved": "https://registry.npmjs.org/shebang-regex/-/shebang-regex-3.0.0.tgz",
+ "integrity": "sha512-7++dFhtcx3353uBaq8DDR4NuxBetBzC7ZQOhmTQInHEd6bSrXdiEyzCvG07Z44UYdLShWUyXt5M/yhz8ekcb1A==",
+ "dev": true,
+ "license": "MIT",
+ "engines": {
+ "node": ">=8"
+ }
+ },
+ "node_modules/side-channel": {
+ "version": "1.1.0",
+ "resolved": "https://registry.npmjs.org/side-channel/-/side-channel-1.1.0.tgz",
+ "integrity": "sha512-ZX99e6tRweoUXqR+VBrslhda51Nh5MTQwou5tnUDgbtyM0dBgmhEDtWGP/xbKn6hqfPRHujUNwz5fy/wbbhnpw==",
+ "license": "MIT",
+ "dependencies": {
+ "es-errors": "^1.3.0",
+ "object-inspect": "^1.13.3",
+ "side-channel-list": "^1.0.0",
+ "side-channel-map": "^1.0.1",
+ "side-channel-weakmap": "^1.0.2"
+ },
+ "engines": {
+ "node": ">= 0.4"
+ },
+ "funding": {
+ "url": "https://github.com/sponsors/ljharb"
+ }
+ },
+ "node_modules/side-channel-list": {
+ "version": "1.0.0",
+ "resolved": "https://registry.npmjs.org/side-channel-list/-/side-channel-list-1.0.0.tgz",
+ "integrity": "sha512-FCLHtRD/gnpCiCHEiJLOwdmFP+wzCmDEkc9y7NsYxeF4u7Btsn1ZuwgwJGxImImHicJArLP4R0yX4c2KCrMrTA==",
+ "license": "MIT",
+ "dependencies": {
+ "es-errors": "^1.3.0",
+ "object-inspect": "^1.13.3"
+ },
+ "engines": {
+ "node": ">= 0.4"
+ },
+ "funding": {
+ "url": "https://github.com/sponsors/ljharb"
+ }
+ },
+ "node_modules/side-channel-map": {
+ "version": "1.0.1",
+ "resolved": "https://registry.npmjs.org/side-channel-map/-/side-channel-map-1.0.1.tgz",
+ "integrity": "sha512-VCjCNfgMsby3tTdo02nbjtM/ewra6jPHmpThenkTYh8pG9ucZ/1P8So4u4FGBek/BjpOVsDCMoLA/iuBKIFXRA==",
+ "license": "MIT",
+ "dependencies": {
+ "call-bound": "^1.0.2",
+ "es-errors": "^1.3.0",
+ "get-intrinsic": "^1.2.5",
+ "object-inspect": "^1.13.3"
+ },
+ "engines": {
+ "node": ">= 0.4"
+ },
+ "funding": {
+ "url": "https://github.com/sponsors/ljharb"
+ }
+ },
+ "node_modules/side-channel-weakmap": {
+ "version": "1.0.2",
+ "resolved": "https://registry.npmjs.org/side-channel-weakmap/-/side-channel-weakmap-1.0.2.tgz",
+ "integrity": "sha512-WPS/HvHQTYnHisLo9McqBHOJk2FkHO/tlpvldyrnem4aeQp4hai3gythswg6p01oSoTl58rcpiFAjF2br2Ak2A==",
+ "license": "MIT",
+ "dependencies": {
+ "call-bound": "^1.0.2",
+ "es-errors": "^1.3.0",
+ "get-intrinsic": "^1.2.5",
+ "object-inspect": "^1.13.3",
+ "side-channel-map": "^1.0.1"
+ },
+ "engines": {
+ "node": ">= 0.4"
+ },
+ "funding": {
+ "url": "https://github.com/sponsors/ljharb"
+ }
+ },
+ "node_modules/signal-exit": {
+ "version": "3.0.7",
+ "resolved": "https://registry.npmjs.org/signal-exit/-/signal-exit-3.0.7.tgz",
+ "integrity": "sha512-wnD2ZE+l+SPC/uoS0vXeE9L1+0wuaMqKlfz9AMUo38JsyLSBWSFcHR1Rri62LZc12vLr1gb3jl7iwQhgwpAbGQ==",
+ "dev": true,
+ "license": "ISC",
+ "peer": true
+ },
+ "node_modules/simple-concat": {
+ "version": "1.0.1",
+ "resolved": "https://registry.npmjs.org/simple-concat/-/simple-concat-1.0.1.tgz",
+ "integrity": "sha512-cSFtAPtRhljv69IK0hTVZQ+OfE9nePi/rtJmw5UjHeVyVroEqJXP1sFztKUy1qU+xvz3u/sfYJLa947b7nAN2Q==",
+ "funding": [
+ {
+ "type": "github",
+ "url": "https://github.com/sponsors/feross"
+ },
+ {
+ "type": "patreon",
+ "url": "https://www.patreon.com/feross"
+ },
+ {
+ "type": "consulting",
+ "url": "https://feross.org/support"
+ }
+ ],
+ "license": "MIT"
+ },
+ "node_modules/simple-get": {
+ "version": "4.0.1",
+ "resolved": "https://registry.npmjs.org/simple-get/-/simple-get-4.0.1.tgz",
+ "integrity": "sha512-brv7p5WgH0jmQJr1ZDDfKDOSeWWg+OVypG99A/5vYGPqJ6pxiaHLy8nxtFjBA7oMa01ebA9gfh1uMCFqOuXxvA==",
+ "funding": [
+ {
+ "type": "github",
+ "url": "https://github.com/sponsors/feross"
+ },
+ {
+ "type": "patreon",
+ "url": "https://www.patreon.com/feross"
+ },
+ {
+ "type": "consulting",
+ "url": "https://feross.org/support"
+ }
+ ],
+ "license": "MIT",
+ "dependencies": {
+ "decompress-response": "^6.0.0",
+ "once": "^1.3.1",
+ "simple-concat": "^1.0.0"
+ }
+ },
+ "node_modules/simple-swizzle": {
+ "version": "0.2.2",
+ "resolved": "https://registry.npmjs.org/simple-swizzle/-/simple-swizzle-0.2.2.tgz",
+ "integrity": "sha512-JA//kQgZtbuY83m+xT+tXJkmJncGMTFT+C+g2h2R9uxkYIrE2yy9sgmcLhCnw57/WSD+Eh3J97FPEDFnbXnDUg==",
+ "license": "MIT",
+ "dependencies": {
+ "is-arrayish": "^0.3.1"
+ }
+ },
+ "node_modules/simple-swizzle/node_modules/is-arrayish": {
+ "version": "0.3.2",
+ "resolved": "https://registry.npmjs.org/is-arrayish/-/is-arrayish-0.3.2.tgz",
+ "integrity": "sha512-eVRqCvVlZbuw3GrM63ovNSNAeA1K16kaR/LRY/92w0zxQ5/1YzwblUX652i4Xs9RwAGjW9d9y6X88t8OaAJfWQ==",
+ "license": "MIT"
+ },
+ "node_modules/sisteransi": {
+ "version": "1.0.5",
+ "resolved": "https://registry.npmjs.org/sisteransi/-/sisteransi-1.0.5.tgz",
+ "integrity": "sha512-bLGGlR1QxBcynn2d5YmDX4MGjlZvy2MRBDRNHLJ8VI6l6+9FUiyTFNJ0IveOSP0bcXgVDPRcfGqA0pjaqUpfVg==",
+ "dev": true,
+ "license": "MIT",
+ "peer": true
+ },
+ "node_modules/slash": {
+ "version": "3.0.0",
+ "resolved": "https://registry.npmjs.org/slash/-/slash-3.0.0.tgz",
+ "integrity": "sha512-g9Q1haeby36OSStwb4ntCGGGaKsaVSjQ68fBxoQcutl5fS1vuY18H3wSt3jFyFtrkx+Kz0V1G85A4MyAdDMi2Q==",
+ "dev": true,
+ "license": "MIT",
+ "engines": {
+ "node": ">=8"
+ }
+ },
+ "node_modules/sonner": {
+ "version": "1.7.4",
+ "resolved": "https://registry.npmjs.org/sonner/-/sonner-1.7.4.tgz",
+ "integrity": "sha512-DIS8z4PfJRbIyfVFDVnK9rO3eYDtse4Omcm6bt0oEr5/jtLgysmjuBl1frJ9E/EQZrFmKx2A8m/s5s9CRXIzhw==",
+ "license": "MIT",
+ "peerDependencies": {
+ "react": "^18.0.0 || ^19.0.0 || ^19.0.0-rc",
+ "react-dom": "^18.0.0 || ^19.0.0 || ^19.0.0-rc"
+ }
+ },
+ "node_modules/source-map": {
+ "version": "0.6.1",
+ "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz",
+ "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==",
+ "license": "BSD-3-Clause",
+ "engines": {
+ "node": ">=0.10.0"
+ }
+ },
+ "node_modules/source-map-js": {
+ "version": "1.2.1",
+ "resolved": "https://registry.npmjs.org/source-map-js/-/source-map-js-1.2.1.tgz",
+ "integrity": "sha512-UXWMKhLOwVKb728IUtQPXxfYU+usdybtUrK/8uGE8CQMvrhOpwvzDBwj0QhSL7MQc7vIsISBG8VQ8+IDQxpfQA==",
+ "license": "BSD-3-Clause",
+ "engines": {
+ "node": ">=0.10.0"
+ }
+ },
+ "node_modules/source-map-support": {
+ "version": "0.5.13",
+ "resolved": "https://registry.npmjs.org/source-map-support/-/source-map-support-0.5.13.tgz",
+ "integrity": "sha512-SHSKFHadjVA5oR4PPqhtAVdcBWwRYVd6g6cAXnIbRiIwc2EhPrTuKUBdSLvlEKyIP3GCf89fltvcZiP9MMFA1w==",
+ "dev": true,
+ "license": "MIT",
+ "peer": true,
+ "dependencies": {
+ "buffer-from": "^1.0.0",
+ "source-map": "^0.6.0"
+ }
+ },
+ "node_modules/space-separated-tokens": {
+ "version": "2.0.2",
+ "resolved": "https://registry.npmjs.org/space-separated-tokens/-/space-separated-tokens-2.0.2.tgz",
+ "integrity": "sha512-PEGlAwrG8yXGXRjW32fGbg66JAlOAwbObuqVoJpv/mRgoWDQfgH1wDPvtzWyUSNAXBGSk8h755YDbbcEy3SH2Q==",
+ "license": "MIT",
+ "funding": {
+ "type": "github",
+ "url": "https://github.com/sponsors/wooorm"
+ }
+ },
+ "node_modules/sprintf-js": {
+ "version": "1.0.3",
+ "resolved": "https://registry.npmjs.org/sprintf-js/-/sprintf-js-1.0.3.tgz",
+ "integrity": "sha512-D9cPgkvLlV3t3IzL0D0YLvGA9Ahk4PcvVwUbN0dSGr1aP0Nrt4AEnTUbuGvquEC0mA64Gqt1fzirlRs5ibXx8g==",
+ "dev": true,
+ "license": "BSD-3-Clause",
+ "peer": true
+ },
+ "node_modules/sswr": {
+ "version": "2.1.0",
+ "resolved": "https://registry.npmjs.org/sswr/-/sswr-2.1.0.tgz",
+ "integrity": "sha512-Cqc355SYlTAaUt8iDPaC/4DPPXK925PePLMxyBKuWd5kKc5mwsG3nT9+Mq2tyguL5s7b4Jg+IRMpTRsNTAfpSQ==",
+ "license": "MIT",
+ "dependencies": {
+ "swrev": "^4.0.0"
+ },
+ "peerDependencies": {
+ "svelte": "^4.0.0 || ^5.0.0-next.0"
+ }
+ },
+ "node_modules/stable-hash": {
+ "version": "0.0.5",
+ "resolved": "https://registry.npmjs.org/stable-hash/-/stable-hash-0.0.5.tgz",
+ "integrity": "sha512-+L3ccpzibovGXFK+Ap/f8LOS0ahMrHTf3xu7mMLSpEGU0EO9ucaysSylKo9eRDFNhWve/y275iPmIZ4z39a9iA==",
+ "dev": true,
+ "license": "MIT"
+ },
+ "node_modules/stack-utils": {
+ "version": "2.0.6",
+ "resolved": "https://registry.npmjs.org/stack-utils/-/stack-utils-2.0.6.tgz",
+ "integrity": "sha512-XlkWvfIm6RmsWtNJx+uqtKLS8eqFbxUg0ZzLXqY0caEy9l7hruX8IpiDnjsLavoBgqCCR71TqWO8MaXYheJ3RQ==",
+ "dev": true,
+ "license": "MIT",
+ "dependencies": {
+ "escape-string-regexp": "^2.0.0"
+ },
+ "engines": {
+ "node": ">=10"
+ }
+ },
+ "node_modules/stack-utils/node_modules/escape-string-regexp": {
+ "version": "2.0.0",
+ "resolved": "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-2.0.0.tgz",
+ "integrity": "sha512-UpzcLCXolUWcNu5HtVMHYdXJjArjsF9C0aNnquZYY4uW/Vu0miy5YoWvbV345HauVvcAUnpRuhMMcqTcGOY2+w==",
+ "dev": true,
+ "license": "MIT",
+ "engines": {
+ "node": ">=8"
+ }
+ },
+ "node_modules/streamsearch": {
+ "version": "1.1.0",
+ "resolved": "https://registry.npmjs.org/streamsearch/-/streamsearch-1.1.0.tgz",
+ "integrity": "sha512-Mcc5wHehp9aXz1ax6bZUyY5afg9u2rv5cqQI3mRrYkGC8rW2hM02jWuwjtL++LS5qinSyhj2QfLyNsuc+VsExg==",
+ "engines": {
+ "node": ">=10.0.0"
+ }
+ },
+ "node_modules/string_decoder": {
+ "version": "1.1.1",
+ "resolved": "https://registry.npmjs.org/string_decoder/-/string_decoder-1.1.1.tgz",
+ "integrity": "sha512-n/ShnvDi6FHbbVfviro+WojiFzv+s8MPMHBczVePfUpDJLwoLT0ht1l4YwBCbi8pJAveEEdnkHyPyTP/mzRfwg==",
+ "license": "MIT",
+ "dependencies": {
+ "safe-buffer": "~5.1.0"
+ }
+ },
+ "node_modules/string_decoder/node_modules/safe-buffer": {
+ "version": "5.1.2",
+ "resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.1.2.tgz",
+ "integrity": "sha512-Gd2UZBJDkXlY7GbJxfsE8/nvKkUEU1G38c1siN6QP6a9PT9MmHB8GnpscSmMJSoF8LOIrt8ud/wPtojys4G6+g==",
+ "license": "MIT"
+ },
+ "node_modules/string-length": {
+ "version": "4.0.2",
+ "resolved": "https://registry.npmjs.org/string-length/-/string-length-4.0.2.tgz",
+ "integrity": "sha512-+l6rNN5fYHNhZZy41RXsYptCjA2Igmq4EG7kZAYFQI1E1VTXarr6ZPXBg6eq7Y6eK4FEhY6AJlyuFIb/v/S0VQ==",
+ "dev": true,
+ "license": "MIT",
+ "peer": true,
+ "dependencies": {
+ "char-regex": "^1.0.2",
+ "strip-ansi": "^6.0.0"
+ },
+ "engines": {
+ "node": ">=10"
+ }
+ },
+ "node_modules/string-similarity": {
+ "version": "4.0.4",
+ "resolved": "https://registry.npmjs.org/string-similarity/-/string-similarity-4.0.4.tgz",
+ "integrity": "sha512-/q/8Q4Bl4ZKAPjj8WerIBJWALKkaPRfrvhfF8k/B23i4nzrlRj2/go1m90In7nG/3XDSbOo0+pu6RvCTM9RGMQ==",
+ "deprecated": "Package no longer supported. Contact Support at https://www.npmjs.com/support for more info.",
+ "license": "ISC"
+ },
+ "node_modules/string-width": {
+ "version": "4.2.3",
+ "resolved": "https://registry.npmjs.org/string-width/-/string-width-4.2.3.tgz",
+ "integrity": "sha512-wKyQRQpjJ0sIp62ErSZdGsjMJWsap5oRNihHhu6G7JVO/9jIB6UyevL+tXuOqrng8j/cxKTWyWUwvSTriiZz/g==",
+ "license": "MIT",
+ "dependencies": {
+ "emoji-regex": "^8.0.0",
+ "is-fullwidth-code-point": "^3.0.0",
+ "strip-ansi": "^6.0.1"
+ },
+ "engines": {
+ "node": ">=8"
+ }
+ },
+ "node_modules/string-width-cjs": {
+ "name": "string-width",
+ "version": "4.2.3",
+ "resolved": "https://registry.npmjs.org/string-width/-/string-width-4.2.3.tgz",
+ "integrity": "sha512-wKyQRQpjJ0sIp62ErSZdGsjMJWsap5oRNihHhu6G7JVO/9jIB6UyevL+tXuOqrng8j/cxKTWyWUwvSTriiZz/g==",
+ "dev": true,
+ "license": "MIT",
+ "dependencies": {
+ "emoji-regex": "^8.0.0",
+ "is-fullwidth-code-point": "^3.0.0",
+ "strip-ansi": "^6.0.1"
+ },
+ "engines": {
+ "node": ">=8"
+ }
+ },
+ "node_modules/string.prototype.includes": {
+ "version": "2.0.1",
+ "resolved": "https://registry.npmjs.org/string.prototype.includes/-/string.prototype.includes-2.0.1.tgz",
+ "integrity": "sha512-o7+c9bW6zpAdJHTtujeePODAhkuicdAryFsfVKwA+wGw89wJ4GTY484WTucM9hLtDEOpOvI+aHnzqnC5lHp4Rg==",
+ "dev": true,
+ "license": "MIT",
+ "dependencies": {
+ "call-bind": "^1.0.7",
+ "define-properties": "^1.2.1",
+ "es-abstract": "^1.23.3"
+ },
+ "engines": {
+ "node": ">= 0.4"
+ }
+ },
+ "node_modules/string.prototype.matchall": {
+ "version": "4.0.12",
+ "resolved": "https://registry.npmjs.org/string.prototype.matchall/-/string.prototype.matchall-4.0.12.tgz",
+ "integrity": "sha512-6CC9uyBL+/48dYizRf7H7VAYCMCNTBeM78x/VTUe9bFEaxBepPJDa1Ow99LqI/1yF7kuy7Q3cQsYMrcjGUcskA==",
+ "dev": true,
+ "license": "MIT",
+ "dependencies": {
+ "call-bind": "^1.0.8",
+ "call-bound": "^1.0.3",
+ "define-properties": "^1.2.1",
+ "es-abstract": "^1.23.6",
+ "es-errors": "^1.3.0",
+ "es-object-atoms": "^1.0.0",
+ "get-intrinsic": "^1.2.6",
+ "gopd": "^1.2.0",
+ "has-symbols": "^1.1.0",
+ "internal-slot": "^1.1.0",
+ "regexp.prototype.flags": "^1.5.3",
+ "set-function-name": "^2.0.2",
+ "side-channel": "^1.1.0"
+ },
+ "engines": {
+ "node": ">= 0.4"
+ },
+ "funding": {
+ "url": "https://github.com/sponsors/ljharb"
+ }
+ },
+ "node_modules/string.prototype.repeat": {
+ "version": "1.0.0",
+ "resolved": "https://registry.npmjs.org/string.prototype.repeat/-/string.prototype.repeat-1.0.0.tgz",
+ "integrity": "sha512-0u/TldDbKD8bFCQ/4f5+mNRrXwZ8hg2w7ZR8wa16e8z9XpePWl3eGEcUD0OXpEH/VJH/2G3gjUtR3ZOiBe2S/w==",
+ "dev": true,
+ "license": "MIT",
+ "dependencies": {
+ "define-properties": "^1.1.3",
+ "es-abstract": "^1.17.5"
+ }
+ },
+ "node_modules/string.prototype.trim": {
+ "version": "1.2.10",
+ "resolved": "https://registry.npmjs.org/string.prototype.trim/-/string.prototype.trim-1.2.10.tgz",
+ "integrity": "sha512-Rs66F0P/1kedk5lyYyH9uBzuiI/kNRmwJAR9quK6VOtIpZ2G+hMZd+HQbbv25MgCA6gEffoMZYxlTod4WcdrKA==",
+ "dev": true,
+ "license": "MIT",
+ "dependencies": {
+ "call-bind": "^1.0.8",
+ "call-bound": "^1.0.2",
+ "define-data-property": "^1.1.4",
+ "define-properties": "^1.2.1",
+ "es-abstract": "^1.23.5",
+ "es-object-atoms": "^1.0.0",
+ "has-property-descriptors": "^1.0.2"
+ },
+ "engines": {
+ "node": ">= 0.4"
+ },
+ "funding": {
+ "url": "https://github.com/sponsors/ljharb"
+ }
+ },
+ "node_modules/string.prototype.trimend": {
+ "version": "1.0.9",
+ "resolved": "https://registry.npmjs.org/string.prototype.trimend/-/string.prototype.trimend-1.0.9.tgz",
+ "integrity": "sha512-G7Ok5C6E/j4SGfyLCloXTrngQIQU3PWtXGst3yM7Bea9FRURf1S42ZHlZZtsNque2FN2PoUhfZXYLNWwEr4dLQ==",
+ "dev": true,
+ "license": "MIT",
+ "dependencies": {
+ "call-bind": "^1.0.8",
+ "call-bound": "^1.0.2",
+ "define-properties": "^1.2.1",
+ "es-object-atoms": "^1.0.0"
+ },
+ "engines": {
+ "node": ">= 0.4"
+ },
+ "funding": {
+ "url": "https://github.com/sponsors/ljharb"
+ }
+ },
+ "node_modules/string.prototype.trimstart": {
+ "version": "1.0.8",
+ "resolved": "https://registry.npmjs.org/string.prototype.trimstart/-/string.prototype.trimstart-1.0.8.tgz",
+ "integrity": "sha512-UXSH262CSZY1tfu3G3Secr6uGLCFVPMhIqHjlgCUtCCcgihYc/xKs9djMTMUOb2j1mVSeU8EU6NWc/iQKU6Gfg==",
+ "dev": true,
+ "license": "MIT",
+ "dependencies": {
+ "call-bind": "^1.0.7",
+ "define-properties": "^1.2.1",
+ "es-object-atoms": "^1.0.0"
+ },
+ "engines": {
+ "node": ">= 0.4"
+ },
+ "funding": {
+ "url": "https://github.com/sponsors/ljharb"
+ }
+ },
+ "node_modules/strip-ansi": {
+ "version": "6.0.1",
+ "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-6.0.1.tgz",
+ "integrity": "sha512-Y38VPSHcqkFrCpFnQ9vuSXmquuv5oXOKpGeT6aGrr3o3Gc9AlVa6JBfUSOCnbxGGZF+/0ooI7KrPuUSztUdU5A==",
+ "license": "MIT",
+ "dependencies": {
+ "ansi-regex": "^5.0.1"
+ },
+ "engines": {
+ "node": ">=8"
+ }
+ },
+ "node_modules/strip-ansi-cjs": {
+ "name": "strip-ansi",
+ "version": "6.0.1",
+ "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-6.0.1.tgz",
+ "integrity": "sha512-Y38VPSHcqkFrCpFnQ9vuSXmquuv5oXOKpGeT6aGrr3o3Gc9AlVa6JBfUSOCnbxGGZF+/0ooI7KrPuUSztUdU5A==",
+ "dev": true,
+ "license": "MIT",
+ "dependencies": {
+ "ansi-regex": "^5.0.1"
+ },
+ "engines": {
+ "node": ">=8"
+ }
+ },
+ "node_modules/strip-bom": {
+ "version": "4.0.0",
+ "resolved": "https://registry.npmjs.org/strip-bom/-/strip-bom-4.0.0.tgz",
+ "integrity": "sha512-3xurFv5tEgii33Zi8Jtp55wEIILR9eh34FAW00PZf+JnSsTmV/ioewSgQl97JHvgjoRGwPShsWm+IdrxB35d0w==",
+ "dev": true,
+ "license": "MIT",
+ "peer": true,
+ "engines": {
+ "node": ">=8"
+ }
+ },
+ "node_modules/strip-final-newline": {
+ "version": "2.0.0",
+ "resolved": "https://registry.npmjs.org/strip-final-newline/-/strip-final-newline-2.0.0.tgz",
+ "integrity": "sha512-BrpvfNAE3dcvq7ll3xVumzjKjZQ5tI1sEUIKr3Uoks0XUl45St3FlatVqef9prk4jRDzhW6WZg+3bk93y6pLjA==",
+ "dev": true,
+ "license": "MIT",
+ "peer": true,
+ "engines": {
+ "node": ">=6"
+ }
+ },
+ "node_modules/strip-json-comments": {
+ "version": "3.1.1",
+ "resolved": "https://registry.npmjs.org/strip-json-comments/-/strip-json-comments-3.1.1.tgz",
+ "integrity": "sha512-6fPc+R4ihwqP6N/aIv2f1gMH8lOVtWQHoqC4yK6oSDVVocumAsfCqjkXnqiYMhmMwS/mEHLp7Vehlt3ql6lEig==",
+ "dev": true,
+ "license": "MIT",
+ "engines": {
+ "node": ">=8"
+ },
+ "funding": {
+ "url": "https://github.com/sponsors/sindresorhus"
+ }
+ },
+ "node_modules/style-to-object": {
+ "version": "0.4.4",
+ "resolved": "https://registry.npmjs.org/style-to-object/-/style-to-object-0.4.4.tgz",
+ "integrity": "sha512-HYNoHZa2GorYNyqiCaBgsxvcJIn7OHq6inEga+E6Ke3m5JkoqpQbnFssk4jwe+K7AhGa2fcha4wSOf1Kn01dMg==",
+ "license": "MIT",
+ "dependencies": {
+ "inline-style-parser": "0.1.1"
+ }
+ },
+ "node_modules/styled-jsx": {
+ "version": "5.1.1",
+ "resolved": "https://registry.npmjs.org/styled-jsx/-/styled-jsx-5.1.1.tgz",
+ "integrity": "sha512-pW7uC1l4mBZ8ugbiZrcIsiIvVx1UmTfw7UkC3Um2tmfUq9Bhk8IiyEIPl6F8agHgjzku6j0xQEZbfA5uSgSaCw==",
+ "license": "MIT",
+ "dependencies": {
+ "client-only": "0.0.1"
+ },
+ "engines": {
+ "node": ">= 12.0.0"
+ },
+ "peerDependencies": {
+ "react": ">= 16.8.0 || 17.x.x || ^18.0.0-0"
+ },
+ "peerDependenciesMeta": {
+ "@babel/core": {
+ "optional": true
+ },
+ "babel-plugin-macros": {
+ "optional": true
+ }
+ }
+ },
+ "node_modules/sucrase": {
+ "version": "3.35.0",
+ "resolved": "https://registry.npmjs.org/sucrase/-/sucrase-3.35.0.tgz",
+ "integrity": "sha512-8EbVDiu9iN/nESwxeSxDKe0dunta1GOlHufmSSXxMD2z2/tMZpDMpvXQGsc+ajGo8y2uYUmixaSRUc/QPoQ0GA==",
+ "dev": true,
+ "license": "MIT",
+ "dependencies": {
+ "@jridgewell/gen-mapping": "^0.3.2",
+ "commander": "^4.0.0",
+ "glob": "^10.3.10",
+ "lines-and-columns": "^1.1.6",
+ "mz": "^2.7.0",
+ "pirates": "^4.0.1",
+ "ts-interface-checker": "^0.1.9"
+ },
+ "bin": {
+ "sucrase": "bin/sucrase",
+ "sucrase-node": "bin/sucrase-node"
+ },
+ "engines": {
+ "node": ">=16 || 14 >=14.17"
+ }
+ },
+ "node_modules/sucrase/node_modules/brace-expansion": {
+ "version": "2.0.1",
+ "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-2.0.1.tgz",
+ "integrity": "sha512-XnAIvQ8eM+kC6aULx6wuQiwVsnzsi9d3WxzV3FpWTGA19F621kwdbsAcFKXgKUHZWsy+mY6iL1sHTxWEFCytDA==",
+ "dev": true,
+ "license": "MIT",
+ "dependencies": {
+ "balanced-match": "^1.0.0"
+ }
+ },
+ "node_modules/sucrase/node_modules/commander": {
+ "version": "4.1.1",
+ "resolved": "https://registry.npmjs.org/commander/-/commander-4.1.1.tgz",
+ "integrity": "sha512-NOKm8xhkzAjzFx8B2v5OAHT+u5pRQc2UCa2Vq9jYL/31o2wi9mxBA7LIFs3sV5VSC49z6pEhfbMULvShKj26WA==",
+ "dev": true,
+ "license": "MIT",
+ "engines": {
+ "node": ">= 6"
+ }
+ },
+ "node_modules/sucrase/node_modules/glob": {
+ "version": "10.4.5",
+ "resolved": "https://registry.npmjs.org/glob/-/glob-10.4.5.tgz",
+ "integrity": "sha512-7Bv8RF0k6xjo7d4A/PxYLbUCfb6c+Vpd2/mB2yRDlew7Jb5hEXiCD9ibfO7wpk8i4sevK6DFny9h7EYbM3/sHg==",
+ "dev": true,
+ "license": "ISC",
+ "dependencies": {
+ "foreground-child": "^3.1.0",
+ "jackspeak": "^3.1.2",
+ "minimatch": "^9.0.4",
+ "minipass": "^7.1.2",
+ "package-json-from-dist": "^1.0.0",
+ "path-scurry": "^1.11.1"
+ },
+ "bin": {
+ "glob": "dist/esm/bin.mjs"
+ },
+ "funding": {
+ "url": "https://github.com/sponsors/isaacs"
+ }
+ },
+ "node_modules/sucrase/node_modules/minimatch": {
+ "version": "9.0.5",
+ "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-9.0.5.tgz",
+ "integrity": "sha512-G6T0ZX48xgozx7587koeX9Ys2NYy6Gmv//P89sEte9V9whIapMNF4idKxnW2QtCcLiTWlb/wfCabAtAFWhhBow==",
+ "dev": true,
+ "license": "ISC",
+ "dependencies": {
+ "brace-expansion": "^2.0.1"
+ },
+ "engines": {
+ "node": ">=16 || 14 >=14.17"
+ },
+ "funding": {
+ "url": "https://github.com/sponsors/isaacs"
+ }
+ },
+ "node_modules/supports-color": {
+ "version": "7.2.0",
+ "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz",
+ "integrity": "sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==",
+ "dev": true,
+ "license": "MIT",
+ "dependencies": {
+ "has-flag": "^4.0.0"
+ },
+ "engines": {
+ "node": ">=8"
+ }
+ },
+ "node_modules/supports-preserve-symlinks-flag": {
+ "version": "1.0.0",
+ "resolved": "https://registry.npmjs.org/supports-preserve-symlinks-flag/-/supports-preserve-symlinks-flag-1.0.0.tgz",
+ "integrity": "sha512-ot0WnXS9fgdkgIcePe6RHNk1WA8+muPa6cSjeR3V8K27q9BB1rTE3R1p7Hv0z1ZyAc8s6Vvv8DIyWf681MAt0w==",
+ "dev": true,
+ "license": "MIT",
+ "engines": {
+ "node": ">= 0.4"
+ },
+ "funding": {
+ "url": "https://github.com/sponsors/ljharb"
+ }
+ },
+ "node_modules/svelte": {
+ "version": "5.1.13",
+ "resolved": "https://registry.npmjs.org/svelte/-/svelte-5.1.13.tgz",
+ "integrity": "sha512-xVNk8yLsZNfkyqWzVg8+nfU9ewiSjVW0S4qyTxfKa6Y7P5ZBhA+LDsh2cHWIXJQMltikQAk6W3sqGdQZSH58PA==",
+ "license": "MIT",
+ "peer": true,
+ "dependencies": {
+ "@ampproject/remapping": "^2.3.0",
+ "@jridgewell/sourcemap-codec": "^1.5.0",
+ "@types/estree": "^1.0.5",
+ "acorn": "^8.12.1",
+ "acorn-typescript": "^1.4.13",
+ "aria-query": "^5.3.1",
+ "axobject-query": "^4.1.0",
+ "esm-env": "^1.0.0",
+ "esrap": "^1.2.2",
+ "is-reference": "^3.0.2",
+ "locate-character": "^3.0.0",
+ "magic-string": "^0.30.11",
+ "zimmerframe": "^1.1.2"
+ },
+ "engines": {
+ "node": ">=18"
+ }
+ },
+ "node_modules/swr": {
+ "version": "2.2.5",
+ "resolved": "https://registry.npmjs.org/swr/-/swr-2.2.5.tgz",
+ "integrity": "sha512-QtxqyclFeAsxEUeZIYmsaQ0UjimSq1RZ9Un7I68/0ClKK/U3LoyQunwkQfJZr2fc22DfIXLNDc2wFyTEikCUpg==",
+ "license": "MIT",
+ "dependencies": {
+ "client-only": "^0.0.1",
+ "use-sync-external-store": "^1.2.0"
+ },
+ "peerDependencies": {
+ "react": "^16.11.0 || ^17.0.0 || ^18.0.0"
+ }
+ },
+ "node_modules/swrev": {
+ "version": "4.0.0",
+ "resolved": "https://registry.npmjs.org/swrev/-/swrev-4.0.0.tgz",
+ "integrity": "sha512-LqVcOHSB4cPGgitD1riJ1Hh4vdmITOp+BkmfmXRh4hSF/t7EnS4iD+SOTmq7w5pPm/SiPeto4ADbKS6dHUDWFA==",
+ "license": "MIT"
+ },
+ "node_modules/swrv": {
+ "version": "1.0.4",
+ "resolved": "https://registry.npmjs.org/swrv/-/swrv-1.0.4.tgz",
+ "integrity": "sha512-zjEkcP8Ywmj+xOJW3lIT65ciY/4AL4e/Or7Gj0MzU3zBJNMdJiT8geVZhINavnlHRMMCcJLHhraLTAiDOTmQ9g==",
+ "license": "Apache-2.0",
+ "peerDependencies": {
+ "vue": ">=3.2.26 < 4"
+ }
+ },
+ "node_modules/tailwind-merge": {
+ "version": "2.6.0",
+ "resolved": "https://registry.npmjs.org/tailwind-merge/-/tailwind-merge-2.6.0.tgz",
+ "integrity": "sha512-P+Vu1qXfzediirmHOC3xKGAYeZtPcV9g76X+xg2FD4tYgR71ewMA35Y3sCz3zhiN/dwefRpJX0yBcgwi1fXNQA==",
+ "dev": true,
+ "license": "MIT",
+ "funding": {
+ "type": "github",
+ "url": "https://github.com/sponsors/dcastil"
+ }
+ },
+ "node_modules/tailwindcss": {
+ "version": "3.4.17",
+ "resolved": "https://registry.npmjs.org/tailwindcss/-/tailwindcss-3.4.17.tgz",
+ "integrity": "sha512-w33E2aCvSDP0tW9RZuNXadXlkHXqFzSkQew/aIa2i/Sj8fThxwovwlXHSPXTbAHwEIhBFXAedUhP2tueAKP8Og==",
+ "dev": true,
+ "license": "MIT",
+ "dependencies": {
+ "@alloc/quick-lru": "^5.2.0",
+ "arg": "^5.0.2",
+ "chokidar": "^3.6.0",
+ "didyoumean": "^1.2.2",
+ "dlv": "^1.1.3",
+ "fast-glob": "^3.3.2",
+ "glob-parent": "^6.0.2",
+ "is-glob": "^4.0.3",
+ "jiti": "^1.21.6",
+ "lilconfig": "^3.1.3",
+ "micromatch": "^4.0.8",
+ "normalize-path": "^3.0.0",
+ "object-hash": "^3.0.0",
+ "picocolors": "^1.1.1",
+ "postcss": "^8.4.47",
+ "postcss-import": "^15.1.0",
+ "postcss-js": "^4.0.1",
+ "postcss-load-config": "^4.0.2",
+ "postcss-nested": "^6.2.0",
+ "postcss-selector-parser": "^6.1.2",
+ "resolve": "^1.22.8",
+ "sucrase": "^3.35.0"
+ },
+ "bin": {
+ "tailwind": "lib/cli.js",
+ "tailwindcss": "lib/cli.js"
+ },
+ "engines": {
+ "node": ">=14.0.0"
+ }
+ },
+ "node_modules/tailwindcss-animate": {
+ "version": "1.0.7",
+ "resolved": "https://registry.npmjs.org/tailwindcss-animate/-/tailwindcss-animate-1.0.7.tgz",
+ "integrity": "sha512-bl6mpH3T7I3UFxuvDEXLxy/VuFxBk5bbzplh7tXI68mwMokNYd1t9qPBHlnyTwfa4JGC4zP516I1hYYtQ/vspA==",
+ "dev": true,
+ "license": "MIT",
+ "peerDependencies": {
+ "tailwindcss": ">=3.0.0 || insiders"
+ }
+ },
+ "node_modules/tailwindcss/node_modules/postcss-selector-parser": {
+ "version": "6.1.2",
+ "resolved": "https://registry.npmjs.org/postcss-selector-parser/-/postcss-selector-parser-6.1.2.tgz",
+ "integrity": "sha512-Q8qQfPiZ+THO/3ZrOrO0cJJKfpYCagtMUkXbnEfmgUjwXg6z/WBeOyS9APBBPCTSiDV+s4SwQGu8yFsiMRIudg==",
+ "dev": true,
+ "license": "MIT",
+ "dependencies": {
+ "cssesc": "^3.0.0",
+ "util-deprecate": "^1.0.2"
+ },
+ "engines": {
+ "node": ">=4"
+ }
+ },
+ "node_modules/tar-fs": {
+ "version": "2.1.2",
+ "resolved": "https://registry.npmjs.org/tar-fs/-/tar-fs-2.1.2.tgz",
+ "integrity": "sha512-EsaAXwxmx8UB7FRKqeozqEPop69DXcmYwTQwXvyAPF352HJsPdkVhvTaDPYqfNgruveJIJy3TA2l+2zj8LJIJA==",
+ "license": "MIT",
+ "dependencies": {
+ "chownr": "^1.1.1",
+ "mkdirp-classic": "^0.5.2",
+ "pump": "^3.0.0",
+ "tar-stream": "^2.1.4"
+ }
+ },
+ "node_modules/tar-stream": {
+ "version": "2.2.0",
+ "resolved": "https://registry.npmjs.org/tar-stream/-/tar-stream-2.2.0.tgz",
+ "integrity": "sha512-ujeqbceABgwMZxEJnk2HDY2DlnUZ+9oEcb1KzTVfYHio0UE6dG71n60d8D2I4qNvleWrrXpmjpt7vZeF1LnMZQ==",
+ "license": "MIT",
+ "dependencies": {
+ "bl": "^4.0.3",
+ "end-of-stream": "^1.4.1",
+ "fs-constants": "^1.0.0",
+ "inherits": "^2.0.3",
+ "readable-stream": "^3.1.1"
+ },
+ "engines": {
+ "node": ">=6"
+ }
+ },
+ "node_modules/tar-stream/node_modules/readable-stream": {
+ "version": "3.6.2",
+ "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-3.6.2.tgz",
+ "integrity": "sha512-9u/sniCrY3D5WdsERHzHE4G2YCXqoG5FTHUiCC4SIbr6XcLZBY05ya9EKjYek9O5xOAwjGq+1JdGBAS7Q9ScoA==",
+ "license": "MIT",
+ "dependencies": {
+ "inherits": "^2.0.3",
+ "string_decoder": "^1.1.1",
+ "util-deprecate": "^1.0.1"
+ },
+ "engines": {
+ "node": ">= 6"
+ }
+ },
+ "node_modules/test-exclude": {
+ "version": "6.0.0",
+ "resolved": "https://registry.npmjs.org/test-exclude/-/test-exclude-6.0.0.tgz",
+ "integrity": "sha512-cAGWPIyOHU6zlmg88jwm7VRyXnMN7iV68OGAbYDk/Mh/xC/pzVPlQtY6ngoIH/5/tciuhGfvESU8GrHrcxD56w==",
+ "dev": true,
+ "license": "ISC",
+ "peer": true,
+ "dependencies": {
+ "@istanbuljs/schema": "^0.1.2",
+ "glob": "^7.1.4",
+ "minimatch": "^3.0.4"
+ },
+ "engines": {
+ "node": ">=8"
+ }
+ },
+ "node_modules/thenify": {
+ "version": "3.3.1",
+ "resolved": "https://registry.npmjs.org/thenify/-/thenify-3.3.1.tgz",
+ "integrity": "sha512-RVZSIV5IG10Hk3enotrhvz0T9em6cyHBLkH/YAZuKqd8hRkKhSfCGIcP2KUY0EPxndzANBmNllzWPwak+bheSw==",
+ "dev": true,
+ "license": "MIT",
+ "dependencies": {
+ "any-promise": "^1.0.0"
+ }
+ },
+ "node_modules/thenify-all": {
+ "version": "1.6.0",
+ "resolved": "https://registry.npmjs.org/thenify-all/-/thenify-all-1.6.0.tgz",
+ "integrity": "sha512-RNxQH/qI8/t3thXJDwcstUO4zeqo64+Uy/+sNVRBx4Xn2OX+OZ9oP+iJnNFqplFra2ZUVeKCSa2oVWi3T4uVmA==",
+ "dev": true,
+ "license": "MIT",
+ "dependencies": {
+ "thenify": ">= 3.1.0 < 4"
+ },
+ "engines": {
+ "node": ">=0.8"
+ }
+ },
+ "node_modules/throttleit": {
+ "version": "2.1.0",
+ "resolved": "https://registry.npmjs.org/throttleit/-/throttleit-2.1.0.tgz",
+ "integrity": "sha512-nt6AMGKW1p/70DF/hGBdJB57B8Tspmbp5gfJ8ilhLnt7kkr2ye7hzD6NVG8GGErk2HWF34igrL2CXmNIkzKqKw==",
+ "license": "MIT",
+ "engines": {
+ "node": ">=18"
+ },
+ "funding": {
+ "url": "https://github.com/sponsors/sindresorhus"
+ }
+ },
+ "node_modules/tiktoken": {
+ "version": "1.0.21",
+ "resolved": "https://registry.npmjs.org/tiktoken/-/tiktoken-1.0.21.tgz",
+ "integrity": "sha512-/kqtlepLMptX0OgbYD9aMYbM7EFrMZCL7EoHM8Psmg2FuhXoo/bH64KqOiZGGwa6oS9TPdSEDKBnV2LuB8+5vQ==",
+ "license": "MIT"
+ },
+ "node_modules/tinyglobby": {
+ "version": "0.2.13",
+ "resolved": "https://registry.npmjs.org/tinyglobby/-/tinyglobby-0.2.13.tgz",
+ "integrity": "sha512-mEwzpUgrLySlveBwEVDMKk5B57bhLPYovRfPAXD5gA/98Opn0rCDj3GtLwFvCvH5RK9uPCExUROW5NjDwvqkxw==",
+ "dev": true,
+ "license": "MIT",
+ "dependencies": {
+ "fdir": "^6.4.4",
+ "picomatch": "^4.0.2"
+ },
+ "engines": {
+ "node": ">=12.0.0"
+ },
+ "funding": {
+ "url": "https://github.com/sponsors/SuperchupuDev"
+ }
+ },
+ "node_modules/tinyglobby/node_modules/fdir": {
+ "version": "6.4.4",
+ "resolved": "https://registry.npmjs.org/fdir/-/fdir-6.4.4.tgz",
+ "integrity": "sha512-1NZP+GK4GfuAv3PqKvxQRDMjdSRZjnkq7KfhlNrCNNlZ0ygQFpebfrnfnq/W7fpUnAv9aGWmY1zKx7FYL3gwhg==",
+ "dev": true,
+ "license": "MIT",
+ "peerDependencies": {
+ "picomatch": "^3 || ^4"
+ },
+ "peerDependenciesMeta": {
+ "picomatch": {
+ "optional": true
+ }
+ }
+ },
+ "node_modules/tinyglobby/node_modules/picomatch": {
+ "version": "4.0.2",
+ "resolved": "https://registry.npmjs.org/picomatch/-/picomatch-4.0.2.tgz",
+ "integrity": "sha512-M7BAV6Rlcy5u+m6oPhAPFgJTzAioX/6B0DxyvDlo9l8+T3nLKbrczg2WLUyzd45L8RqfUMyGPzekbMvX2Ldkwg==",
+ "dev": true,
+ "license": "MIT",
+ "engines": {
+ "node": ">=12"
+ },
+ "funding": {
+ "url": "https://github.com/sponsors/jonschlinkert"
+ }
+ },
+ "node_modules/tmpl": {
+ "version": "1.0.5",
+ "resolved": "https://registry.npmjs.org/tmpl/-/tmpl-1.0.5.tgz",
+ "integrity": "sha512-3f0uOEAQwIqGuWW2MVzYg8fV/QNnc/IpuJNG837rLuczAaLVHslWHZQj4IGiEl5Hs3kkbhwL9Ab7Hrsmuj+Smw==",
+ "dev": true,
+ "license": "BSD-3-Clause",
+ "peer": true
+ },
+ "node_modules/to-regex-range": {
+ "version": "5.0.1",
+ "resolved": "https://registry.npmjs.org/to-regex-range/-/to-regex-range-5.0.1.tgz",
+ "integrity": "sha512-65P7iz6X5yEr1cwcgvQxbbIw7Uk3gOy5dIdtZ4rDveLqhrdJP+Li/Hx6tyK0NEb+2GCyneCMJiGqrADCSNk8sQ==",
+ "dev": true,
+ "license": "MIT",
+ "dependencies": {
+ "is-number": "^7.0.0"
+ },
+ "engines": {
+ "node": ">=8.0"
+ }
+ },
+ "node_modules/tr46": {
+ "version": "0.0.3",
+ "resolved": "https://registry.npmjs.org/tr46/-/tr46-0.0.3.tgz",
+ "integrity": "sha512-N3WMsuqV66lT30CrXNbEjx4GEwlow3v6rr4mCcv6prnfwhS01rkgyFdjPNBYd9br7LpXV1+Emh01fHnq2Gdgrw==",
+ "license": "MIT"
+ },
+ "node_modules/trim-lines": {
+ "version": "3.0.1",
+ "resolved": "https://registry.npmjs.org/trim-lines/-/trim-lines-3.0.1.tgz",
+ "integrity": "sha512-kRj8B+YHZCc9kQYdWfJB2/oUl9rA99qbowYYBtr4ui4mZyAQ2JpvVBd/6U2YloATfqBhBTSMhTpgBHtU0Mf3Rg==",
+ "license": "MIT",
+ "funding": {
+ "type": "github",
+ "url": "https://github.com/sponsors/wooorm"
+ }
+ },
+ "node_modules/trough": {
+ "version": "2.2.0",
+ "resolved": "https://registry.npmjs.org/trough/-/trough-2.2.0.tgz",
+ "integrity": "sha512-tmMpK00BjZiUyVyvrBK7knerNgmgvcV/KLVyuma/SC+TQN167GrMRciANTz09+k3zW8L8t60jWO1GpfkZdjTaw==",
+ "license": "MIT",
+ "funding": {
+ "type": "github",
+ "url": "https://github.com/sponsors/wooorm"
+ }
+ },
+ "node_modules/ts-api-utils": {
+ "version": "2.1.0",
+ "resolved": "https://registry.npmjs.org/ts-api-utils/-/ts-api-utils-2.1.0.tgz",
+ "integrity": "sha512-CUgTZL1irw8u29bzrOD/nH85jqyc74D6SshFgujOIA7osm2Rz7dYH77agkx7H4FBNxDq7Cjf+IjaX/8zwFW+ZQ==",
+ "dev": true,
+ "license": "MIT",
+ "engines": {
+ "node": ">=18.12"
+ },
+ "peerDependencies": {
+ "typescript": ">=4.8.4"
+ }
+ },
+ "node_modules/ts-deepmerge": {
+ "version": "7.0.2",
+ "resolved": "https://registry.npmjs.org/ts-deepmerge/-/ts-deepmerge-7.0.2.tgz",
+ "integrity": "sha512-akcpDTPuez4xzULo5NwuoKwYRtjQJ9eoNfBACiBMaXwNAx7B1PKfe5wqUFJuW5uKzQ68YjDFwPaWHDG1KnFGsA==",
+ "license": "ISC",
+ "engines": {
+ "node": ">=14.13.1"
+ }
+ },
+ "node_modules/ts-interface-checker": {
+ "version": "0.1.13",
+ "resolved": "https://registry.npmjs.org/ts-interface-checker/-/ts-interface-checker-0.1.13.tgz",
+ "integrity": "sha512-Y/arvbn+rrz3JCKl9C4kVNfTfSm2/mEp5FSz5EsZSANGPSlQrpRI5M4PKF+mJnE52jOO90PnPSc3Ur3bTQw0gA==",
+ "dev": true,
+ "license": "Apache-2.0"
+ },
+ "node_modules/ts-jest": {
+ "version": "29.3.2",
+ "resolved": "https://registry.npmjs.org/ts-jest/-/ts-jest-29.3.2.tgz",
+ "integrity": "sha512-bJJkrWc6PjFVz5g2DGCNUo8z7oFEYaz1xP1NpeDU7KNLMWPpEyV8Chbpkn8xjzgRDpQhnGMyvyldoL7h8JXyug==",
+ "dev": true,
+ "license": "MIT",
+ "dependencies": {
+ "bs-logger": "^0.2.6",
+ "ejs": "^3.1.10",
+ "fast-json-stable-stringify": "^2.1.0",
+ "jest-util": "^29.0.0",
+ "json5": "^2.2.3",
+ "lodash.memoize": "^4.1.2",
+ "make-error": "^1.3.6",
+ "semver": "^7.7.1",
+ "type-fest": "^4.39.1",
+ "yargs-parser": "^21.1.1"
+ },
+ "bin": {
+ "ts-jest": "cli.js"
+ },
+ "engines": {
+ "node": "^14.15.0 || ^16.10.0 || ^18.0.0 || >=20.0.0"
+ },
+ "peerDependencies": {
+ "@babel/core": ">=7.0.0-beta.0 <8",
+ "@jest/transform": "^29.0.0",
+ "@jest/types": "^29.0.0",
+ "babel-jest": "^29.0.0",
+ "jest": "^29.0.0",
+ "typescript": ">=4.3 <6"
+ },
+ "peerDependenciesMeta": {
+ "@babel/core": {
+ "optional": true
+ },
+ "@jest/transform": {
+ "optional": true
+ },
+ "@jest/types": {
+ "optional": true
+ },
+ "babel-jest": {
+ "optional": true
+ },
+ "esbuild": {
+ "optional": true
+ }
+ }
+ },
+ "node_modules/ts-jest/node_modules/semver": {
+ "version": "7.7.1",
+ "resolved": "https://registry.npmjs.org/semver/-/semver-7.7.1.tgz",
+ "integrity": "sha512-hlq8tAfn0m/61p4BVRcPzIGr6LKiMwo4VM6dGi6pt4qcRkmNzTcWq6eCEjEh+qXjkMDvPlOFFSGwQjoEa6gyMA==",
+ "dev": true,
+ "license": "ISC",
+ "bin": {
+ "semver": "bin/semver.js"
+ },
+ "engines": {
+ "node": ">=10"
+ }
+ },
+ "node_modules/ts-jest/node_modules/type-fest": {
+ "version": "4.40.0",
+ "resolved": "https://registry.npmjs.org/type-fest/-/type-fest-4.40.0.tgz",
+ "integrity": "sha512-ABHZ2/tS2JkvH1PEjxFDTUWC8dB5OsIGZP4IFLhR293GqT5Y5qB1WwL2kMPYhQW9DVgVD8Hd7I8gjwPIf5GFkw==",
+ "dev": true,
+ "license": "(MIT OR CC0-1.0)",
+ "engines": {
+ "node": ">=16"
+ },
+ "funding": {
+ "url": "https://github.com/sponsors/sindresorhus"
+ }
+ },
+ "node_modules/tsconfig-paths": {
+ "version": "3.15.0",
+ "resolved": "https://registry.npmjs.org/tsconfig-paths/-/tsconfig-paths-3.15.0.tgz",
+ "integrity": "sha512-2Ac2RgzDe/cn48GvOe3M+o82pEFewD3UPbyoUHHdKasHwJKjds4fLXWf/Ux5kATBKN20oaFGu+jbElp1pos0mg==",
+ "dev": true,
+ "license": "MIT",
+ "dependencies": {
+ "@types/json5": "^0.0.29",
+ "json5": "^1.0.2",
+ "minimist": "^1.2.6",
+ "strip-bom": "^3.0.0"
+ }
+ },
+ "node_modules/tsconfig-paths/node_modules/json5": {
+ "version": "1.0.2",
+ "resolved": "https://registry.npmjs.org/json5/-/json5-1.0.2.tgz",
+ "integrity": "sha512-g1MWMLBiz8FKi1e4w0UyVL3w+iJceWAFBAaBnnGKOpNa5f8TLktkbre1+s6oICydWAm+HRUGTmI+//xv2hvXYA==",
+ "dev": true,
+ "license": "MIT",
+ "dependencies": {
+ "minimist": "^1.2.0"
+ },
+ "bin": {
+ "json5": "lib/cli.js"
+ }
+ },
+ "node_modules/tsconfig-paths/node_modules/strip-bom": {
+ "version": "3.0.0",
+ "resolved": "https://registry.npmjs.org/strip-bom/-/strip-bom-3.0.0.tgz",
+ "integrity": "sha512-vavAMRXOgBVNF6nyEEmL3DBK19iRpDcoIwW+swQ+CbGiu7lju6t+JklA1MHweoWtadgt4ISVUsXLyDq34ddcwA==",
+ "dev": true,
+ "license": "MIT",
+ "engines": {
+ "node": ">=4"
+ }
+ },
+ "node_modules/tslib": {
+ "version": "2.8.1",
+ "resolved": "https://registry.npmjs.org/tslib/-/tslib-2.8.1.tgz",
+ "integrity": "sha512-oJFu94HQb+KVduSUQL7wnpmqnfmLsOA/nAh6b6EH0wCEoK0/mPeXU6c3wKDV83MkOuHPRHtSXKKU99IBazS/2w==",
+ "license": "0BSD"
+ },
+ "node_modules/tunnel-agent": {
+ "version": "0.6.0",
+ "resolved": "https://registry.npmjs.org/tunnel-agent/-/tunnel-agent-0.6.0.tgz",
+ "integrity": "sha512-McnNiV1l8RYeY8tBgEpuodCC1mLUdbSN+CYBL7kJsJNInOP8UjDDEwdk6Mw60vdLLrr5NHKZhMAOSrR2NZuQ+w==",
+ "license": "Apache-2.0",
+ "dependencies": {
+ "safe-buffer": "^5.0.1"
+ },
+ "engines": {
+ "node": "*"
+ }
+ },
+ "node_modules/twilio": {
+ "version": "5.5.2",
+ "resolved": "https://registry.npmjs.org/twilio/-/twilio-5.5.2.tgz",
+ "integrity": "sha512-yrRh6immcL5xEVX7VmHsl3vU01x/fmqxf38kvxMrrtvEtAkYARYOPor9lt5T7964zC7l31k5sTrnLJmd2jjeOA==",
+ "license": "MIT",
+ "dependencies": {
+ "axios": "^1.7.8",
+ "dayjs": "^1.11.9",
+ "https-proxy-agent": "^5.0.0",
+ "jsonwebtoken": "^9.0.2",
+ "qs": "^6.9.4",
+ "scmp": "^2.1.0",
+ "xmlbuilder": "^13.0.2"
+ },
+ "engines": {
+ "node": ">=14.0"
+ }
+ },
+ "node_modules/twilio/node_modules/agent-base": {
+ "version": "6.0.2",
+ "resolved": "https://registry.npmjs.org/agent-base/-/agent-base-6.0.2.tgz",
+ "integrity": "sha512-RZNwNclF7+MS/8bDg70amg32dyeZGZxiDuQmZxKLAlQjr3jGyLx+4Kkk58UO7D2QdgFIQCovuSuZESne6RG6XQ==",
+ "license": "MIT",
+ "dependencies": {
+ "debug": "4"
+ },
+ "engines": {
+ "node": ">= 6.0.0"
+ }
+ },
+ "node_modules/twilio/node_modules/https-proxy-agent": {
+ "version": "5.0.1",
+ "resolved": "https://registry.npmjs.org/https-proxy-agent/-/https-proxy-agent-5.0.1.tgz",
+ "integrity": "sha512-dFcAjpTQFgoLMzC2VwU+C/CbS7uRL0lWmxDITmqm7C+7F0Odmj6s9l6alZc6AELXhrnggM2CeWSXHGOdX2YtwA==",
+ "license": "MIT",
+ "dependencies": {
+ "agent-base": "6",
+ "debug": "4"
+ },
+ "engines": {
+ "node": ">= 6"
+ }
+ },
+ "node_modules/type-check": {
+ "version": "0.4.0",
+ "resolved": "https://registry.npmjs.org/type-check/-/type-check-0.4.0.tgz",
+ "integrity": "sha512-XleUoc9uwGXqjWwXaUTZAmzMcFZ5858QA2vvx1Ur5xIcixXIP+8LnFDgRplU30us6teqdlskFfu+ae4K79Ooew==",
+ "dev": true,
+ "license": "MIT",
+ "dependencies": {
+ "prelude-ls": "^1.2.1"
+ },
+ "engines": {
+ "node": ">= 0.8.0"
+ }
+ },
+ "node_modules/type-detect": {
+ "version": "4.0.8",
+ "resolved": "https://registry.npmjs.org/type-detect/-/type-detect-4.0.8.tgz",
+ "integrity": "sha512-0fr/mIH1dlO+x7TlcMy+bIDqKPsw/70tVyeHW787goQjhmqaZe10uwLujubK9q9Lg6Fiho1KUKDYz0Z7k7g5/g==",
+ "dev": true,
+ "license": "MIT",
+ "peer": true,
+ "engines": {
+ "node": ">=4"
+ }
+ },
+ "node_modules/type-fest": {
+ "version": "0.21.3",
+ "resolved": "https://registry.npmjs.org/type-fest/-/type-fest-0.21.3.tgz",
+ "integrity": "sha512-t0rzBq87m3fVcduHDUFhKmyyX+9eo6WQjZvf51Ea/M0Q7+T374Jp1aUiyUl0GKxp8M/OETVHSDvmkyPgvX+X2w==",
+ "dev": true,
+ "license": "(MIT OR CC0-1.0)",
+ "peer": true,
+ "engines": {
+ "node": ">=10"
+ },
+ "funding": {
+ "url": "https://github.com/sponsors/sindresorhus"
+ }
+ },
+ "node_modules/typed-array-buffer": {
+ "version": "1.0.3",
+ "resolved": "https://registry.npmjs.org/typed-array-buffer/-/typed-array-buffer-1.0.3.tgz",
+ "integrity": "sha512-nAYYwfY3qnzX30IkA6AQZjVbtK6duGontcQm1WSG1MD94YLqK0515GNApXkoxKOWMusVssAHWLh9SeaoefYFGw==",
+ "dev": true,
+ "license": "MIT",
+ "dependencies": {
+ "call-bound": "^1.0.3",
+ "es-errors": "^1.3.0",
+ "is-typed-array": "^1.1.14"
+ },
+ "engines": {
+ "node": ">= 0.4"
+ }
+ },
+ "node_modules/typed-array-byte-length": {
+ "version": "1.0.3",
+ "resolved": "https://registry.npmjs.org/typed-array-byte-length/-/typed-array-byte-length-1.0.3.tgz",
+ "integrity": "sha512-BaXgOuIxz8n8pIq3e7Atg/7s+DpiYrxn4vdot3w9KbnBhcRQq6o3xemQdIfynqSeXeDrF32x+WvfzmOjPiY9lg==",
+ "dev": true,
+ "license": "MIT",
+ "dependencies": {
+ "call-bind": "^1.0.8",
+ "for-each": "^0.3.3",
+ "gopd": "^1.2.0",
+ "has-proto": "^1.2.0",
+ "is-typed-array": "^1.1.14"
+ },
+ "engines": {
+ "node": ">= 0.4"
+ },
+ "funding": {
+ "url": "https://github.com/sponsors/ljharb"
+ }
+ },
+ "node_modules/typed-array-byte-offset": {
+ "version": "1.0.4",
+ "resolved": "https://registry.npmjs.org/typed-array-byte-offset/-/typed-array-byte-offset-1.0.4.tgz",
+ "integrity": "sha512-bTlAFB/FBYMcuX81gbL4OcpH5PmlFHqlCCpAl8AlEzMz5k53oNDvN8p1PNOWLEmI2x4orp3raOFB51tv9X+MFQ==",
+ "dev": true,
+ "license": "MIT",
+ "dependencies": {
+ "available-typed-arrays": "^1.0.7",
+ "call-bind": "^1.0.8",
+ "for-each": "^0.3.3",
+ "gopd": "^1.2.0",
+ "has-proto": "^1.2.0",
+ "is-typed-array": "^1.1.15",
+ "reflect.getprototypeof": "^1.0.9"
+ },
+ "engines": {
+ "node": ">= 0.4"
+ },
+ "funding": {
+ "url": "https://github.com/sponsors/ljharb"
+ }
+ },
+ "node_modules/typed-array-length": {
+ "version": "1.0.7",
+ "resolved": "https://registry.npmjs.org/typed-array-length/-/typed-array-length-1.0.7.tgz",
+ "integrity": "sha512-3KS2b+kL7fsuk/eJZ7EQdnEmQoaho/r6KUef7hxvltNA5DR8NAUM+8wJMbJyZ4G9/7i3v5zPBIMN5aybAh2/Jg==",
+ "dev": true,
+ "license": "MIT",
+ "dependencies": {
+ "call-bind": "^1.0.7",
+ "for-each": "^0.3.3",
+ "gopd": "^1.0.1",
+ "is-typed-array": "^1.1.13",
+ "possible-typed-array-names": "^1.0.0",
+ "reflect.getprototypeof": "^1.0.6"
+ },
+ "engines": {
+ "node": ">= 0.4"
+ },
+ "funding": {
+ "url": "https://github.com/sponsors/ljharb"
+ }
+ },
+ "node_modules/typedoc": {
+ "version": "0.28.3",
+ "resolved": "https://registry.npmjs.org/typedoc/-/typedoc-0.28.3.tgz",
+ "integrity": "sha512-5svOCTfXvVSh6zbZKSQluZhR8yN2tKpTeHZxlmWpE6N5vc3R8k/jhg9nnD6n5tN9/ObuQTojkONrOxFdUFUG9w==",
+ "license": "Apache-2.0",
+ "dependencies": {
+ "@gerrit0/mini-shiki": "^3.2.2",
+ "lunr": "^2.3.9",
+ "markdown-it": "^14.1.0",
+ "minimatch": "^9.0.5",
+ "yaml": "^2.7.1"
+ },
+ "bin": {
+ "typedoc": "bin/typedoc"
+ },
+ "engines": {
+ "node": ">= 18",
+ "pnpm": ">= 10"
+ },
+ "peerDependencies": {
+ "typescript": "5.0.x || 5.1.x || 5.2.x || 5.3.x || 5.4.x || 5.5.x || 5.6.x || 5.7.x || 5.8.x"
+ }
+ },
+ "node_modules/typedoc-plugin-markdown": {
+ "version": "4.6.3",
+ "resolved": "https://registry.npmjs.org/typedoc-plugin-markdown/-/typedoc-plugin-markdown-4.6.3.tgz",
+ "integrity": "sha512-86oODyM2zajXwLs4Wok2mwVEfCwCnp756QyhLGX2IfsdRYr1DXLCgJgnLndaMUjJD7FBhnLk2okbNE9PdLxYRw==",
+ "dev": true,
+ "license": "MIT",
+ "engines": {
+ "node": ">= 18"
+ },
+ "peerDependencies": {
+ "typedoc": "0.28.x"
+ }
+ },
+ "node_modules/typedoc-plugin-merge-modules": {
+ "version": "7.0.0",
+ "resolved": "https://registry.npmjs.org/typedoc-plugin-merge-modules/-/typedoc-plugin-merge-modules-7.0.0.tgz",
+ "integrity": "sha512-DQyfbbPNBElhpdpGrlkS+CrhGD3iooDjp/PHT8O1D/jumLCB+7XAY3jHiqob7d01o25EfwEOJWVwJK+9J6WlBg==",
+ "dev": true,
+ "license": "ISC",
+ "peerDependencies": {
+ "typedoc": "0.28.x"
+ }
+ },
+ "node_modules/typedoc/node_modules/brace-expansion": {
+ "version": "2.0.1",
+ "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-2.0.1.tgz",
+ "integrity": "sha512-XnAIvQ8eM+kC6aULx6wuQiwVsnzsi9d3WxzV3FpWTGA19F621kwdbsAcFKXgKUHZWsy+mY6iL1sHTxWEFCytDA==",
+ "license": "MIT",
+ "dependencies": {
+ "balanced-match": "^1.0.0"
+ }
+ },
+ "node_modules/typedoc/node_modules/minimatch": {
+ "version": "9.0.5",
+ "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-9.0.5.tgz",
+ "integrity": "sha512-G6T0ZX48xgozx7587koeX9Ys2NYy6Gmv//P89sEte9V9whIapMNF4idKxnW2QtCcLiTWlb/wfCabAtAFWhhBow==",
+ "license": "ISC",
+ "dependencies": {
+ "brace-expansion": "^2.0.1"
+ },
+ "engines": {
+ "node": ">=16 || 14 >=14.17"
+ },
+ "funding": {
+ "url": "https://github.com/sponsors/isaacs"
+ }
+ },
+ "node_modules/typescript": {
+ "version": "5.8.3",
+ "resolved": "https://registry.npmjs.org/typescript/-/typescript-5.8.3.tgz",
+ "integrity": "sha512-p1diW6TqL9L07nNxvRMM7hMMw4c5XOo/1ibL4aAIGmSAt9slTE1Xgw5KWuof2uTOvCg9BY7ZRi+GaF+7sfgPeQ==",
+ "license": "Apache-2.0",
+ "bin": {
+ "tsc": "bin/tsc",
+ "tsserver": "bin/tsserver"
+ },
+ "engines": {
+ "node": ">=14.17"
+ }
+ },
+ "node_modules/uc.micro": {
+ "version": "2.1.0",
+ "resolved": "https://registry.npmjs.org/uc.micro/-/uc.micro-2.1.0.tgz",
+ "integrity": "sha512-ARDJmphmdvUk6Glw7y9DQ2bFkKBHwQHLi2lsaH6PPmz/Ka9sFOBsBluozhDltWmnv9u/cF6Rt87znRTPV+yp/A==",
+ "license": "MIT"
+ },
+ "node_modules/uglify-js": {
+ "version": "3.19.3",
+ "resolved": "https://registry.npmjs.org/uglify-js/-/uglify-js-3.19.3.tgz",
+ "integrity": "sha512-v3Xu+yuwBXisp6QYTcH4UbH+xYJXqnq2m/LtQVWKWzYc1iehYnLixoQDN9FH6/j9/oybfd6W9Ghwkl8+UMKTKQ==",
+ "license": "BSD-2-Clause",
+ "optional": true,
+ "bin": {
+ "uglifyjs": "bin/uglifyjs"
+ },
+ "engines": {
+ "node": ">=0.8.0"
+ }
+ },
+ "node_modules/unbox-primitive": {
+ "version": "1.1.0",
+ "resolved": "https://registry.npmjs.org/unbox-primitive/-/unbox-primitive-1.1.0.tgz",
+ "integrity": "sha512-nWJ91DjeOkej/TA8pXQ3myruKpKEYgqvpw9lz4OPHj/NWFNluYrjbz9j01CJ8yKQd2g4jFoOkINCTW2I5LEEyw==",
+ "dev": true,
+ "license": "MIT",
+ "dependencies": {
+ "call-bound": "^1.0.3",
+ "has-bigints": "^1.0.2",
+ "has-symbols": "^1.1.0",
+ "which-boxed-primitive": "^1.1.1"
+ },
+ "engines": {
+ "node": ">= 0.4"
+ },
+ "funding": {
+ "url": "https://github.com/sponsors/ljharb"
+ }
+ },
+ "node_modules/undici-types": {
+ "version": "6.21.0",
+ "resolved": "https://registry.npmjs.org/undici-types/-/undici-types-6.21.0.tgz",
+ "integrity": "sha512-iwDZqg0QAGrg9Rav5H4n0M64c3mkR59cJ6wQp+7C4nI0gsmExaedaYLNO44eT4AtBBwjbTiGPMlt2Md0T9H9JQ==",
+ "license": "MIT"
+ },
+ "node_modules/unified": {
+ "version": "10.1.2",
+ "resolved": "https://registry.npmjs.org/unified/-/unified-10.1.2.tgz",
+ "integrity": "sha512-pUSWAi/RAnVy1Pif2kAoeWNBa3JVrx0MId2LASj8G+7AiHWoKZNTomq6LG326T68U7/e263X6fTdcXIy7XnF7Q==",
+ "license": "MIT",
+ "dependencies": {
+ "@types/unist": "^2.0.0",
+ "bail": "^2.0.0",
+ "extend": "^3.0.0",
+ "is-buffer": "^2.0.0",
+ "is-plain-obj": "^4.0.0",
+ "trough": "^2.0.0",
+ "vfile": "^5.0.0"
+ },
+ "funding": {
+ "type": "opencollective",
+ "url": "https://opencollective.com/unified"
+ }
+ },
+ "node_modules/unist-util-generated": {
+ "version": "2.0.1",
+ "resolved": "https://registry.npmjs.org/unist-util-generated/-/unist-util-generated-2.0.1.tgz",
+ "integrity": "sha512-qF72kLmPxAw0oN2fwpWIqbXAVyEqUzDHMsbtPvOudIlUzXYFIeQIuxXQCRCFh22B7cixvU0MG7m3MW8FTq/S+A==",
+ "license": "MIT",
+ "funding": {
+ "type": "opencollective",
+ "url": "https://opencollective.com/unified"
+ }
+ },
+ "node_modules/unist-util-is": {
+ "version": "5.2.1",
+ "resolved": "https://registry.npmjs.org/unist-util-is/-/unist-util-is-5.2.1.tgz",
+ "integrity": "sha512-u9njyyfEh43npf1M+yGKDGVPbY/JWEemg5nH05ncKPfi+kBbKBJoTdsogMu33uhytuLlv9y0O7GH7fEdwLdLQw==",
+ "license": "MIT",
+ "dependencies": {
+ "@types/unist": "^2.0.0"
+ },
+ "funding": {
+ "type": "opencollective",
+ "url": "https://opencollective.com/unified"
+ }
+ },
+ "node_modules/unist-util-position": {
+ "version": "4.0.4",
+ "resolved": "https://registry.npmjs.org/unist-util-position/-/unist-util-position-4.0.4.tgz",
+ "integrity": "sha512-kUBE91efOWfIVBo8xzh/uZQ7p9ffYRtUbMRZBNFYwf0RK8koUMx6dGUfwylLOKmaT2cs4wSW96QoYUSXAyEtpg==",
+ "license": "MIT",
+ "dependencies": {
+ "@types/unist": "^2.0.0"
+ },
+ "funding": {
+ "type": "opencollective",
+ "url": "https://opencollective.com/unified"
+ }
+ },
+ "node_modules/unist-util-stringify-position": {
+ "version": "3.0.3",
+ "resolved": "https://registry.npmjs.org/unist-util-stringify-position/-/unist-util-stringify-position-3.0.3.tgz",
+ "integrity": "sha512-k5GzIBZ/QatR8N5X2y+drfpWG8IDBzdnVj6OInRNWm1oXrzydiaAT2OQiA8DPRRZyAKb9b6I2a6PxYklZD0gKg==",
+ "license": "MIT",
+ "dependencies": {
+ "@types/unist": "^2.0.0"
+ },
+ "funding": {
+ "type": "opencollective",
+ "url": "https://opencollective.com/unified"
+ }
+ },
+ "node_modules/unist-util-visit": {
+ "version": "4.1.2",
+ "resolved": "https://registry.npmjs.org/unist-util-visit/-/unist-util-visit-4.1.2.tgz",
+ "integrity": "sha512-MSd8OUGISqHdVvfY9TPhyK2VdUrPgxkUtWSuMHF6XAAFuL4LokseigBnZtPnJMu+FbynTkFNnFlyjxpVKujMRg==",
+ "license": "MIT",
+ "dependencies": {
+ "@types/unist": "^2.0.0",
+ "unist-util-is": "^5.0.0",
+ "unist-util-visit-parents": "^5.1.1"
+ },
+ "funding": {
+ "type": "opencollective",
+ "url": "https://opencollective.com/unified"
+ }
+ },
+ "node_modules/unist-util-visit-parents": {
+ "version": "5.1.3",
+ "resolved": "https://registry.npmjs.org/unist-util-visit-parents/-/unist-util-visit-parents-5.1.3.tgz",
+ "integrity": "sha512-x6+y8g7wWMyQhL1iZfhIPhDAs7Xwbn9nRosDXl7qoPTSCy0yNxnKc+hWokFifWQIDGi154rdUqKvbCa4+1kLhg==",
+ "license": "MIT",
+ "dependencies": {
+ "@types/unist": "^2.0.0",
+ "unist-util-is": "^5.0.0"
+ },
+ "funding": {
+ "type": "opencollective",
+ "url": "https://opencollective.com/unified"
+ }
+ },
+ "node_modules/unrs-resolver": {
+ "version": "1.6.4",
+ "resolved": "https://registry.npmjs.org/unrs-resolver/-/unrs-resolver-1.6.4.tgz",
+ "integrity": "sha512-Fb6KH4pQK0XjR5PdRW8BEzsQmbYjkeRHF3IIIZtOVXVFM6Nh+Gb2fQh23Ba7qaYloDp+Aa8/JeNqyImJ8xHlkQ==",
+ "dev": true,
+ "hasInstallScript": true,
+ "license": "MIT",
+ "dependencies": {
+ "napi-postinstall": "^0.1.5"
+ },
+ "funding": {
+ "url": "https://github.com/sponsors/JounQin"
+ },
+ "optionalDependencies": {
+ "@unrs/resolver-binding-darwin-arm64": "1.6.4",
+ "@unrs/resolver-binding-darwin-x64": "1.6.4",
+ "@unrs/resolver-binding-freebsd-x64": "1.6.4",
+ "@unrs/resolver-binding-linux-arm-gnueabihf": "1.6.4",
+ "@unrs/resolver-binding-linux-arm-musleabihf": "1.6.4",
+ "@unrs/resolver-binding-linux-arm64-gnu": "1.6.4",
+ "@unrs/resolver-binding-linux-arm64-musl": "1.6.4",
+ "@unrs/resolver-binding-linux-ppc64-gnu": "1.6.4",
+ "@unrs/resolver-binding-linux-riscv64-gnu": "1.6.4",
+ "@unrs/resolver-binding-linux-s390x-gnu": "1.6.4",
+ "@unrs/resolver-binding-linux-x64-gnu": "1.6.4",
+ "@unrs/resolver-binding-linux-x64-musl": "1.6.4",
+ "@unrs/resolver-binding-wasm32-wasi": "1.6.4",
+ "@unrs/resolver-binding-win32-arm64-msvc": "1.6.4",
+ "@unrs/resolver-binding-win32-ia32-msvc": "1.6.4",
+ "@unrs/resolver-binding-win32-x64-msvc": "1.6.4"
+ }
+ },
+ "node_modules/update-browserslist-db": {
+ "version": "1.1.1",
+ "resolved": "https://registry.npmjs.org/update-browserslist-db/-/update-browserslist-db-1.1.1.tgz",
+ "integrity": "sha512-R8UzCaa9Az+38REPiJ1tXlImTJXlVfgHZsglwBD/k6nj76ctsH1E3q4doGrukiLQd3sGQYu56r5+lo5r94l29A==",
+ "dev": true,
+ "funding": [
+ {
+ "type": "opencollective",
+ "url": "https://opencollective.com/browserslist"
+ },
+ {
+ "type": "tidelift",
+ "url": "https://tidelift.com/funding/github/npm/browserslist"
+ },
+ {
+ "type": "github",
+ "url": "https://github.com/sponsors/ai"
+ }
+ ],
+ "license": "MIT",
+ "dependencies": {
+ "escalade": "^3.2.0",
+ "picocolors": "^1.1.0"
+ },
+ "bin": {
+ "update-browserslist-db": "cli.js"
+ },
+ "peerDependencies": {
+ "browserslist": ">= 4.21.0"
+ }
+ },
+ "node_modules/uri-js": {
+ "version": "4.4.1",
+ "resolved": "https://registry.npmjs.org/uri-js/-/uri-js-4.4.1.tgz",
+ "integrity": "sha512-7rKUyy33Q1yc98pQ1DAmLtwX109F7TIfWlW1Ydo8Wl1ii1SeHieeh0HHfPeL2fMXK6z0s8ecKs9frCuLJvndBg==",
+ "dev": true,
+ "license": "BSD-2-Clause",
+ "dependencies": {
+ "punycode": "^2.1.0"
+ }
+ },
+ "node_modules/url-template": {
+ "version": "2.0.8",
+ "resolved": "https://registry.npmjs.org/url-template/-/url-template-2.0.8.tgz",
+ "integrity": "sha512-XdVKMF4SJ0nP/O7XIPB0JwAEuT9lDIYnNsK8yGVe43y0AWoKeJNdv3ZNWh7ksJ6KqQFjOO6ox/VEitLnaVNufw==",
+ "license": "BSD"
+ },
+ "node_modules/use-callback-ref": {
+ "version": "1.3.3",
+ "resolved": "https://registry.npmjs.org/use-callback-ref/-/use-callback-ref-1.3.3.tgz",
+ "integrity": "sha512-jQL3lRnocaFtu3V00JToYz/4QkNWswxijDaCVNZRiRTO3HQDLsdu1ZtmIUvV4yPp+rvWm5j0y0TG/S61cuijTg==",
+ "license": "MIT",
+ "dependencies": {
+ "tslib": "^2.0.0"
+ },
+ "engines": {
+ "node": ">=10"
+ },
+ "peerDependencies": {
+ "@types/react": "*",
+ "react": "^16.8.0 || ^17.0.0 || ^18.0.0 || ^19.0.0 || ^19.0.0-rc"
+ },
+ "peerDependenciesMeta": {
+ "@types/react": {
+ "optional": true
+ }
+ }
+ },
+ "node_modules/use-composed-ref": {
+ "version": "1.3.0",
+ "resolved": "https://registry.npmjs.org/use-composed-ref/-/use-composed-ref-1.3.0.tgz",
+ "integrity": "sha512-GLMG0Jc/jiKov/3Ulid1wbv3r54K9HlMW29IWcDFPEqFkSO2nS0MuefWgMJpeHQ9YJeXDL3ZUF+P3jdXlZX/cQ==",
+ "license": "MIT",
+ "peerDependencies": {
+ "react": "^16.8.0 || ^17.0.0 || ^18.0.0"
+ }
+ },
+ "node_modules/use-isomorphic-layout-effect": {
+ "version": "1.1.2",
+ "resolved": "https://registry.npmjs.org/use-isomorphic-layout-effect/-/use-isomorphic-layout-effect-1.1.2.tgz",
+ "integrity": "sha512-49L8yCO3iGT/ZF9QttjwLF/ZD9Iwto5LnH5LmEdk/6cFmXddqi2ulF0edxTwjj+7mqvpVVGQWvbXZdn32wRSHA==",
+ "license": "MIT",
+ "peerDependencies": {
+ "react": "^16.8.0 || ^17.0.0 || ^18.0.0"
+ },
+ "peerDependenciesMeta": {
+ "@types/react": {
+ "optional": true
+ }
+ }
+ },
+ "node_modules/use-latest": {
+ "version": "1.2.1",
+ "resolved": "https://registry.npmjs.org/use-latest/-/use-latest-1.2.1.tgz",
+ "integrity": "sha512-xA+AVm/Wlg3e2P/JiItTziwS7FK92LWrDB0p+hgXloIMuVCeJJ8v6f0eeHyPZaJrM+usM1FkFfbNCrJGs8A/zw==",
+ "license": "MIT",
+ "dependencies": {
+ "use-isomorphic-layout-effect": "^1.1.1"
+ },
+ "peerDependencies": {
+ "react": "^16.8.0 || ^17.0.0 || ^18.0.0"
+ },
+ "peerDependenciesMeta": {
+ "@types/react": {
+ "optional": true
+ }
+ }
+ },
+ "node_modules/use-sidecar": {
+ "version": "1.1.3",
+ "resolved": "https://registry.npmjs.org/use-sidecar/-/use-sidecar-1.1.3.tgz",
+ "integrity": "sha512-Fedw0aZvkhynoPYlA5WXrMCAMm+nSWdZt6lzJQ7Ok8S6Q+VsHmHpRWndVRJ8Be0ZbkfPc5LRYH+5XrzXcEeLRQ==",
+ "license": "MIT",
+ "dependencies": {
+ "detect-node-es": "^1.1.0",
+ "tslib": "^2.0.0"
+ },
+ "engines": {
+ "node": ">=10"
+ },
+ "peerDependencies": {
+ "@types/react": "*",
+ "react": "^16.8.0 || ^17.0.0 || ^18.0.0 || ^19.0.0 || ^19.0.0-rc"
+ },
+ "peerDependenciesMeta": {
+ "@types/react": {
+ "optional": true
+ }
+ }
+ },
+ "node_modules/use-sync-external-store": {
+ "version": "1.2.2",
+ "resolved": "https://registry.npmjs.org/use-sync-external-store/-/use-sync-external-store-1.2.2.tgz",
+ "integrity": "sha512-PElTlVMwpblvbNqQ82d2n6RjStvdSoNe9FG28kNfz3WiXilJm4DdNkEzRhCZuIDwY8U08WVihhGR5iRqAwfDiw==",
+ "license": "MIT",
+ "peerDependencies": {
+ "react": "^16.8.0 || ^17.0.0 || ^18.0.0"
+ }
+ },
+ "node_modules/util-deprecate": {
+ "version": "1.0.2",
+ "resolved": "https://registry.npmjs.org/util-deprecate/-/util-deprecate-1.0.2.tgz",
+ "integrity": "sha512-EPD5q1uXyFxJpCrLnCc1nHnq3gOa6DZBocAIiI2TaSCA7VCJ1UJDMagCzIkXNsUYfD1daK//LTEQ8xiIbrHtcw==",
+ "license": "MIT"
+ },
+ "node_modules/uuid": {
+ "version": "11.1.0",
+ "resolved": "https://registry.npmjs.org/uuid/-/uuid-11.1.0.tgz",
+ "integrity": "sha512-0/A9rDy9P7cJ+8w1c9WD9V//9Wj15Ce2MPz8Ri6032usz+NfePxx5AcN3bN+r6ZL6jEo066/yNYB3tn4pQEx+A==",
+ "funding": [
+ "https://github.com/sponsors/broofa",
+ "https://github.com/sponsors/ctavan"
+ ],
+ "license": "MIT",
+ "bin": {
+ "uuid": "dist/esm/bin/uuid"
+ }
+ },
+ "node_modules/uvu": {
+ "version": "0.5.6",
+ "resolved": "https://registry.npmjs.org/uvu/-/uvu-0.5.6.tgz",
+ "integrity": "sha512-+g8ENReyr8YsOc6fv/NVJs2vFdHBnBNdfE49rshrTzDWOlUx4Gq7KOS2GD8eqhy2j+Ejq29+SbKH8yjkAqXqoA==",
+ "license": "MIT",
+ "dependencies": {
+ "dequal": "^2.0.0",
+ "diff": "^5.0.0",
+ "kleur": "^4.0.3",
+ "sade": "^1.7.3"
+ },
+ "bin": {
+ "uvu": "bin.js"
+ },
+ "engines": {
+ "node": ">=8"
+ }
+ },
+ "node_modules/uvu/node_modules/diff": {
+ "version": "5.2.0",
+ "resolved": "https://registry.npmjs.org/diff/-/diff-5.2.0.tgz",
+ "integrity": "sha512-uIFDxqpRZGZ6ThOk84hEfqWoHx2devRFvpTZcTHur85vImfaxUbTW9Ryh4CpCuDnToOP1CEtXKIgytHBPVff5A==",
+ "license": "BSD-3-Clause",
+ "engines": {
+ "node": ">=0.3.1"
+ }
+ },
+ "node_modules/uvu/node_modules/kleur": {
+ "version": "4.1.5",
+ "resolved": "https://registry.npmjs.org/kleur/-/kleur-4.1.5.tgz",
+ "integrity": "sha512-o+NO+8WrRiQEE4/7nwRJhN1HWpVmJm511pBHUxPLtp0BUISzlBplORYSmTclCnJvQq2tKu/sgl3xVpkc7ZWuQQ==",
+ "license": "MIT",
+ "engines": {
+ "node": ">=6"
+ }
+ },
+ "node_modules/v8-to-istanbul": {
+ "version": "9.3.0",
+ "resolved": "https://registry.npmjs.org/v8-to-istanbul/-/v8-to-istanbul-9.3.0.tgz",
+ "integrity": "sha512-kiGUalWN+rgBJ/1OHZsBtU4rXZOfj/7rKQxULKlIzwzQSvMJUUNgPwJEEh7gU6xEVxC0ahoOBvN2YI8GH6FNgA==",
+ "dev": true,
+ "license": "ISC",
+ "peer": true,
+ "dependencies": {
+ "@jridgewell/trace-mapping": "^0.3.12",
+ "@types/istanbul-lib-coverage": "^2.0.1",
+ "convert-source-map": "^2.0.0"
+ },
+ "engines": {
+ "node": ">=10.12.0"
+ }
+ },
+ "node_modules/vfile": {
+ "version": "5.3.7",
+ "resolved": "https://registry.npmjs.org/vfile/-/vfile-5.3.7.tgz",
+ "integrity": "sha512-r7qlzkgErKjobAmyNIkkSpizsFPYiUPuJb5pNW1RB4JcYVZhs4lIbVqk8XPk033CV/1z8ss5pkax8SuhGpcG8g==",
+ "license": "MIT",
+ "dependencies": {
+ "@types/unist": "^2.0.0",
+ "is-buffer": "^2.0.0",
+ "unist-util-stringify-position": "^3.0.0",
+ "vfile-message": "^3.0.0"
+ },
+ "funding": {
+ "type": "opencollective",
+ "url": "https://opencollective.com/unified"
+ }
+ },
+ "node_modules/vfile-message": {
+ "version": "3.1.4",
+ "resolved": "https://registry.npmjs.org/vfile-message/-/vfile-message-3.1.4.tgz",
+ "integrity": "sha512-fa0Z6P8HUrQN4BZaX05SIVXic+7kE3b05PWAtPuYP9QLHsLKYR7/AlLW3NtOrpXRLeawpDLMsVkmk5DG0NXgWw==",
+ "license": "MIT",
+ "dependencies": {
+ "@types/unist": "^2.0.0",
+ "unist-util-stringify-position": "^3.0.0"
+ },
+ "funding": {
+ "type": "opencollective",
+ "url": "https://opencollective.com/unified"
+ }
+ },
+ "node_modules/vue": {
+ "version": "3.5.12",
+ "resolved": "https://registry.npmjs.org/vue/-/vue-3.5.12.tgz",
+ "integrity": "sha512-CLVZtXtn2ItBIi/zHZ0Sg1Xkb7+PU32bJJ8Bmy7ts3jxXTcbfsEfBivFYYWz1Hur+lalqGAh65Coin0r+HRUfg==",
+ "license": "MIT",
+ "peer": true,
+ "dependencies": {
+ "@vue/compiler-dom": "3.5.12",
+ "@vue/compiler-sfc": "3.5.12",
+ "@vue/runtime-dom": "3.5.12",
+ "@vue/server-renderer": "3.5.12",
+ "@vue/shared": "3.5.12"
+ },
+ "peerDependencies": {
+ "typescript": "*"
+ },
+ "peerDependenciesMeta": {
+ "typescript": {
+ "optional": true
+ }
+ }
+ },
+ "node_modules/walker": {
+ "version": "1.0.8",
+ "resolved": "https://registry.npmjs.org/walker/-/walker-1.0.8.tgz",
+ "integrity": "sha512-ts/8E8l5b7kY0vlWLewOkDXMmPdLcVV4GmOQLyxuSswIJsweeFZtAsMF7k1Nszz+TYBQrlYRmzOnr398y1JemQ==",
+ "dev": true,
+ "license": "Apache-2.0",
+ "peer": true,
+ "dependencies": {
+ "makeerror": "1.0.12"
+ }
+ },
+ "node_modules/web-streams-polyfill": {
+ "version": "4.0.0-beta.3",
+ "resolved": "https://registry.npmjs.org/web-streams-polyfill/-/web-streams-polyfill-4.0.0-beta.3.tgz",
+ "integrity": "sha512-QW95TCTaHmsYfHDybGMwO5IJIM93I/6vTRk+daHTWFPhwh+C8Cg7j7XyKrwrj8Ib6vYXe0ocYNrmzY4xAAN6ug==",
+ "license": "MIT",
+ "engines": {
+ "node": ">= 14"
+ }
+ },
+ "node_modules/webidl-conversions": {
+ "version": "3.0.1",
+ "resolved": "https://registry.npmjs.org/webidl-conversions/-/webidl-conversions-3.0.1.tgz",
+ "integrity": "sha512-2JAn3z8AR6rjK8Sm8orRC0h/bcl/DqL7tRPdGZ4I1CjdF+EaMLmYxBHyXuKL849eucPFhvBoxMsflfOb8kxaeQ==",
+ "license": "BSD-2-Clause"
+ },
+ "node_modules/whatwg-url": {
+ "version": "5.0.0",
+ "resolved": "https://registry.npmjs.org/whatwg-url/-/whatwg-url-5.0.0.tgz",
+ "integrity": "sha512-saE57nupxk6v3HY35+jzBwYa0rKSy0XR8JSxZPwgLr7ys0IBzhGviA1/TUGJLmSVqs8pb9AnvICXEuOHLprYTw==",
+ "license": "MIT",
+ "dependencies": {
+ "tr46": "~0.0.3",
+ "webidl-conversions": "^3.0.0"
+ }
+ },
+ "node_modules/which": {
+ "version": "2.0.2",
+ "resolved": "https://registry.npmjs.org/which/-/which-2.0.2.tgz",
+ "integrity": "sha512-BLI3Tl1TW3Pvl70l3yq3Y64i+awpwXqsGBYWkkqMtnbXgrMD+yj7rhW0kuEDxzJaYXGjEW5ogapKNMEKNMjibA==",
+ "dev": true,
+ "license": "ISC",
+ "dependencies": {
+ "isexe": "^2.0.0"
+ },
+ "bin": {
+ "node-which": "bin/node-which"
+ },
+ "engines": {
+ "node": ">= 8"
+ }
+ },
+ "node_modules/which-boxed-primitive": {
+ "version": "1.1.1",
+ "resolved": "https://registry.npmjs.org/which-boxed-primitive/-/which-boxed-primitive-1.1.1.tgz",
+ "integrity": "sha512-TbX3mj8n0odCBFVlY8AxkqcHASw3L60jIuF8jFP78az3C2YhmGvqbHBpAjTRH2/xqYunrJ9g1jSyjCjpoWzIAA==",
+ "dev": true,
+ "license": "MIT",
+ "dependencies": {
+ "is-bigint": "^1.1.0",
+ "is-boolean-object": "^1.2.1",
+ "is-number-object": "^1.1.1",
+ "is-string": "^1.1.1",
+ "is-symbol": "^1.1.1"
+ },
+ "engines": {
+ "node": ">= 0.4"
+ },
+ "funding": {
+ "url": "https://github.com/sponsors/ljharb"
+ }
+ },
+ "node_modules/which-builtin-type": {
+ "version": "1.2.1",
+ "resolved": "https://registry.npmjs.org/which-builtin-type/-/which-builtin-type-1.2.1.tgz",
+ "integrity": "sha512-6iBczoX+kDQ7a3+YJBnh3T+KZRxM/iYNPXicqk66/Qfm1b93iu+yOImkg0zHbj5LNOcNv1TEADiZ0xa34B4q6Q==",
+ "dev": true,
+ "license": "MIT",
+ "dependencies": {
+ "call-bound": "^1.0.2",
+ "function.prototype.name": "^1.1.6",
+ "has-tostringtag": "^1.0.2",
+ "is-async-function": "^2.0.0",
+ "is-date-object": "^1.1.0",
+ "is-finalizationregistry": "^1.1.0",
+ "is-generator-function": "^1.0.10",
+ "is-regex": "^1.2.1",
+ "is-weakref": "^1.0.2",
+ "isarray": "^2.0.5",
+ "which-boxed-primitive": "^1.1.0",
+ "which-collection": "^1.0.2",
+ "which-typed-array": "^1.1.16"
+ },
+ "engines": {
+ "node": ">= 0.4"
+ },
+ "funding": {
+ "url": "https://github.com/sponsors/ljharb"
+ }
+ },
+ "node_modules/which-builtin-type/node_modules/isarray": {
+ "version": "2.0.5",
+ "resolved": "https://registry.npmjs.org/isarray/-/isarray-2.0.5.tgz",
+ "integrity": "sha512-xHjhDr3cNBK0BzdUJSPXZntQUx/mwMS5Rw4A7lPJ90XGAO6ISP/ePDNuo0vhqOZU+UD5JoodwCAAoZQd3FeAKw==",
+ "dev": true,
+ "license": "MIT"
+ },
+ "node_modules/which-collection": {
+ "version": "1.0.2",
+ "resolved": "https://registry.npmjs.org/which-collection/-/which-collection-1.0.2.tgz",
+ "integrity": "sha512-K4jVyjnBdgvc86Y6BkaLZEN933SwYOuBFkdmBu9ZfkcAbdVbpITnDmjvZ/aQjRXQrv5EPkTnD1s39GiiqbngCw==",
+ "dev": true,
+ "license": "MIT",
+ "dependencies": {
+ "is-map": "^2.0.3",
+ "is-set": "^2.0.3",
+ "is-weakmap": "^2.0.2",
+ "is-weakset": "^2.0.3"
+ },
+ "engines": {
+ "node": ">= 0.4"
+ },
+ "funding": {
+ "url": "https://github.com/sponsors/ljharb"
+ }
+ },
+ "node_modules/which-typed-array": {
+ "version": "1.1.19",
+ "resolved": "https://registry.npmjs.org/which-typed-array/-/which-typed-array-1.1.19.tgz",
+ "integrity": "sha512-rEvr90Bck4WZt9HHFC4DJMsjvu7x+r6bImz0/BrbWb7A2djJ8hnZMrWnHo9F8ssv0OMErasDhftrfROTyqSDrw==",
+ "dev": true,
+ "license": "MIT",
+ "dependencies": {
+ "available-typed-arrays": "^1.0.7",
+ "call-bind": "^1.0.8",
+ "call-bound": "^1.0.4",
+ "for-each": "^0.3.5",
+ "get-proto": "^1.0.1",
+ "gopd": "^1.2.0",
+ "has-tostringtag": "^1.0.2"
+ },
+ "engines": {
+ "node": ">= 0.4"
+ },
+ "funding": {
+ "url": "https://github.com/sponsors/ljharb"
+ }
+ },
+ "node_modules/widest-line": {
+ "version": "5.0.0",
+ "resolved": "https://registry.npmjs.org/widest-line/-/widest-line-5.0.0.tgz",
+ "integrity": "sha512-c9bZp7b5YtRj2wOe6dlj32MK+Bx/M/d+9VB2SHM1OtsUHR0aV0tdP6DWh/iMt0kWi1t5g1Iudu6hQRNd1A4PVA==",
+ "license": "MIT",
+ "dependencies": {
+ "string-width": "^7.0.0"
+ },
+ "engines": {
+ "node": ">=18"
+ },
+ "funding": {
+ "url": "https://github.com/sponsors/sindresorhus"
+ }
+ },
+ "node_modules/widest-line/node_modules/ansi-regex": {
+ "version": "6.1.0",
+ "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-6.1.0.tgz",
+ "integrity": "sha512-7HSX4QQb4CspciLpVFwyRe79O3xsIZDDLER21kERQ71oaPodF8jL725AgJMFAYbooIqolJoRLuM81SpeUkpkvA==",
+ "license": "MIT",
+ "engines": {
+ "node": ">=12"
+ },
+ "funding": {
+ "url": "https://github.com/chalk/ansi-regex?sponsor=1"
+ }
+ },
+ "node_modules/widest-line/node_modules/emoji-regex": {
+ "version": "10.4.0",
+ "resolved": "https://registry.npmjs.org/emoji-regex/-/emoji-regex-10.4.0.tgz",
+ "integrity": "sha512-EC+0oUMY1Rqm4O6LLrgjtYDvcVYTy7chDnM4Q7030tP4Kwj3u/pR6gP9ygnp2CJMK5Gq+9Q2oqmrFJAz01DXjw==",
+ "license": "MIT"
+ },
+ "node_modules/widest-line/node_modules/string-width": {
+ "version": "7.2.0",
+ "resolved": "https://registry.npmjs.org/string-width/-/string-width-7.2.0.tgz",
+ "integrity": "sha512-tsaTIkKW9b4N+AEj+SVA+WhJzV7/zMhcSu78mLKWSk7cXMOSHsBKFWUs0fWwq8QyK3MgJBQRX6Gbi4kYbdvGkQ==",
+ "license": "MIT",
+ "dependencies": {
+ "emoji-regex": "^10.3.0",
+ "get-east-asian-width": "^1.0.0",
+ "strip-ansi": "^7.1.0"
+ },
+ "engines": {
+ "node": ">=18"
+ },
+ "funding": {
+ "url": "https://github.com/sponsors/sindresorhus"
+ }
+ },
+ "node_modules/widest-line/node_modules/strip-ansi": {
+ "version": "7.1.0",
+ "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-7.1.0.tgz",
+ "integrity": "sha512-iq6eVVI64nQQTRYq2KtEg2d2uU7LElhTJwsH4YzIHZshxlgZms/wIc4VoDQTlG/IvVIrBKG06CrZnp0qv7hkcQ==",
+ "license": "MIT",
+ "dependencies": {
+ "ansi-regex": "^6.0.1"
+ },
+ "engines": {
+ "node": ">=12"
+ },
+ "funding": {
+ "url": "https://github.com/chalk/strip-ansi?sponsor=1"
+ }
+ },
+ "node_modules/word-wrap": {
+ "version": "1.2.5",
+ "resolved": "https://registry.npmjs.org/word-wrap/-/word-wrap-1.2.5.tgz",
+ "integrity": "sha512-BN22B5eaMMI9UMtjrGd5g5eCYPpCPDUy0FJXbYsaT5zYxjFOckS53SQDE3pWkVoWpHXVb3BrYcEN4Twa55B5cA==",
+ "dev": true,
+ "license": "MIT",
+ "engines": {
+ "node": ">=0.10.0"
+ }
+ },
+ "node_modules/wordwrap": {
+ "version": "1.0.0",
+ "resolved": "https://registry.npmjs.org/wordwrap/-/wordwrap-1.0.0.tgz",
+ "integrity": "sha512-gvVzJFlPycKc5dZN4yPkP8w7Dc37BtP1yczEneOb4uq34pXZcvrtRTmWV8W+Ume+XCxKgbjM+nevkyFPMybd4Q==",
+ "license": "MIT"
+ },
+ "node_modules/wrap-ansi": {
+ "version": "7.0.0",
+ "resolved": "https://registry.npmjs.org/wrap-ansi/-/wrap-ansi-7.0.0.tgz",
+ "integrity": "sha512-YVGIj2kamLSTxw6NsZjoBxfSwsn0ycdesmc4p+Q21c5zPuZ1pl+NfxVdxPtdHvmNVOQ6XSYG4AUtyt/Fi7D16Q==",
+ "dev": true,
+ "license": "MIT",
+ "peer": true,
+ "dependencies": {
+ "ansi-styles": "^4.0.0",
+ "string-width": "^4.1.0",
+ "strip-ansi": "^6.0.0"
+ },
+ "engines": {
+ "node": ">=10"
+ },
+ "funding": {
+ "url": "https://github.com/chalk/wrap-ansi?sponsor=1"
+ }
+ },
+ "node_modules/wrap-ansi-cjs": {
+ "name": "wrap-ansi",
+ "version": "7.0.0",
+ "resolved": "https://registry.npmjs.org/wrap-ansi/-/wrap-ansi-7.0.0.tgz",
+ "integrity": "sha512-YVGIj2kamLSTxw6NsZjoBxfSwsn0ycdesmc4p+Q21c5zPuZ1pl+NfxVdxPtdHvmNVOQ6XSYG4AUtyt/Fi7D16Q==",
+ "dev": true,
+ "license": "MIT",
+ "dependencies": {
+ "ansi-styles": "^4.0.0",
+ "string-width": "^4.1.0",
+ "strip-ansi": "^6.0.0"
+ },
+ "engines": {
+ "node": ">=10"
+ },
+ "funding": {
+ "url": "https://github.com/chalk/wrap-ansi?sponsor=1"
+ }
+ },
+ "node_modules/wrappy": {
+ "version": "1.0.2",
+ "resolved": "https://registry.npmjs.org/wrappy/-/wrappy-1.0.2.tgz",
+ "integrity": "sha512-l4Sp/DRseor9wL6EvV2+TuQn63dMkPjZ/sp9XkghTEbV9KlPS1xUsZ3u7/IQO4wxtcFB4bgpQPRcR3QCvezPcQ==",
+ "license": "ISC"
+ },
+ "node_modules/write-file-atomic": {
+ "version": "4.0.2",
+ "resolved": "https://registry.npmjs.org/write-file-atomic/-/write-file-atomic-4.0.2.tgz",
+ "integrity": "sha512-7KxauUdBmSdWnmpaGFg+ppNjKF8uNLry8LyzjauQDOVONfFLNKrKvQOxZ/VuTIcS/gge/YNahf5RIIQWTSarlg==",
+ "dev": true,
+ "license": "ISC",
+ "peer": true,
+ "dependencies": {
+ "imurmurhash": "^0.1.4",
+ "signal-exit": "^3.0.7"
+ },
+ "engines": {
+ "node": "^12.13.0 || ^14.15.0 || >=16.0.0"
+ }
+ },
+ "node_modules/ws": {
+ "version": "8.18.0",
+ "resolved": "https://registry.npmjs.org/ws/-/ws-8.18.0.tgz",
+ "integrity": "sha512-8VbfWfHLbbwu3+N6OKsOMpBdT4kXPDDB9cJk2bJ6mh9ucxdlnNvH1e+roYkKmN9Nxw2yjz7VzeO9oOz2zJ04Pw==",
+ "license": "MIT",
+ "engines": {
+ "node": ">=10.0.0"
+ },
+ "peerDependencies": {
+ "bufferutil": "^4.0.1",
+ "utf-8-validate": ">=5.0.2"
+ },
+ "peerDependenciesMeta": {
+ "bufferutil": {
+ "optional": true
+ },
+ "utf-8-validate": {
+ "optional": true
+ }
+ }
+ },
+ "node_modules/xmlbuilder": {
+ "version": "13.0.2",
+ "resolved": "https://registry.npmjs.org/xmlbuilder/-/xmlbuilder-13.0.2.tgz",
+ "integrity": "sha512-Eux0i2QdDYKbdbA6AM6xE4m6ZTZr4G4xF9kahI2ukSEMCzwce2eX9WlTI5J3s+NU7hpasFsr8hWIONae7LluAQ==",
+ "license": "MIT",
+ "engines": {
+ "node": ">=6.0"
+ }
+ },
+ "node_modules/xtend": {
+ "version": "4.0.2",
+ "resolved": "https://registry.npmjs.org/xtend/-/xtend-4.0.2.tgz",
+ "integrity": "sha512-LKYU1iAXJXUgAXn9URjiu+MWhyUXHsvfp7mcuYm9dSUKK0/CjtrUwFAxD82/mCWbtLsGjFIad0wIsod4zrTAEQ==",
+ "license": "MIT",
+ "engines": {
+ "node": ">=0.4"
+ }
+ },
+ "node_modules/y18n": {
+ "version": "5.0.8",
+ "resolved": "https://registry.npmjs.org/y18n/-/y18n-5.0.8.tgz",
+ "integrity": "sha512-0pfFzegeDWJHJIAmTLRP2DwHjdF5s7jo9tuztdQxAhINCdvS+3nGINqPd00AphqJR/0LhANUS6/+7SCb98YOfA==",
+ "dev": true,
+ "license": "ISC",
+ "peer": true,
+ "engines": {
+ "node": ">=10"
+ }
+ },
+ "node_modules/yallist": {
+ "version": "3.1.1",
+ "resolved": "https://registry.npmjs.org/yallist/-/yallist-3.1.1.tgz",
+ "integrity": "sha512-a4UGQaWPH59mOXUYnAG2ewncQS4i4F43Tv3JoAM+s2VDAmS9NsK8GpDMLrCHPksFT7h3K6TOoUNn2pb7RoXx4g==",
+ "dev": true,
+ "license": "ISC",
+ "peer": true
+ },
+ "node_modules/yaml": {
+ "version": "2.7.1",
+ "resolved": "https://registry.npmjs.org/yaml/-/yaml-2.7.1.tgz",
+ "integrity": "sha512-10ULxpnOCQXxJvBgxsn9ptjq6uviG/htZKk9veJGhlqn3w/DxQ631zFF+nlQXLwmImeS5amR2dl2U8sg6U9jsQ==",
+ "license": "ISC",
+ "bin": {
+ "yaml": "bin.mjs"
+ },
+ "engines": {
+ "node": ">= 14"
+ }
+ },
+ "node_modules/yargs": {
+ "version": "17.7.2",
+ "resolved": "https://registry.npmjs.org/yargs/-/yargs-17.7.2.tgz",
+ "integrity": "sha512-7dSzzRQ++CKnNI/krKnYRV7JKKPUXMEh61soaHKg9mrWEhzFWhFnxPxGl+69cD1Ou63C13NUPCnmIcrvqCuM6w==",
+ "dev": true,
+ "license": "MIT",
+ "peer": true,
+ "dependencies": {
+ "cliui": "^8.0.1",
+ "escalade": "^3.1.1",
+ "get-caller-file": "^2.0.5",
+ "require-directory": "^2.1.1",
+ "string-width": "^4.2.3",
+ "y18n": "^5.0.5",
+ "yargs-parser": "^21.1.1"
+ },
+ "engines": {
+ "node": ">=12"
+ }
+ },
+ "node_modules/yargs-parser": {
+ "version": "21.1.1",
+ "resolved": "https://registry.npmjs.org/yargs-parser/-/yargs-parser-21.1.1.tgz",
+ "integrity": "sha512-tVpsJW7DdjecAiFpbIB1e3qxIQsE6NoPc5/eTdrbbIC4h0LVsWhnoa3g+m2HclBIujHzsxZ4VJVA+GUuc2/LBw==",
+ "dev": true,
+ "license": "ISC",
+ "engines": {
+ "node": ">=12"
+ }
+ },
+ "node_modules/yocto-queue": {
+ "version": "1.2.1",
+ "resolved": "https://registry.npmjs.org/yocto-queue/-/yocto-queue-1.2.1.tgz",
+ "integrity": "sha512-AyeEbWOu/TAXdxlV9wmGcR0+yh2j3vYPGOECcIj2S7MkrLyC7ne+oye2BKTItt0ii2PHk4cDy+95+LshzbXnGg==",
+ "license": "MIT",
+ "engines": {
+ "node": ">=12.20"
+ },
+ "funding": {
+ "url": "https://github.com/sponsors/sindresorhus"
+ }
+ },
+ "node_modules/zimmerframe": {
+ "version": "1.1.2",
+ "resolved": "https://registry.npmjs.org/zimmerframe/-/zimmerframe-1.1.2.tgz",
+ "integrity": "sha512-rAbqEGa8ovJy4pyBxZM70hg4pE6gDgaQ0Sl9M3enG3I0d6H4XSAM3GeNGLKnsBpuijUow064sf7ww1nutC5/3w==",
+ "license": "MIT",
+ "peer": true
+ },
+ "node_modules/zod": {
+ "version": "3.24.3",
+ "resolved": "https://registry.npmjs.org/zod/-/zod-3.24.3.tgz",
+ "integrity": "sha512-HhY1oqzWCQWuUqvBFnsyrtZRhyPeR7SUGv+C4+MsisMuVfSPx8HpwWqH8tRahSlt6M3PiFAcoeFhZAqIXTxoSg==",
+ "license": "MIT",
+ "funding": {
+ "url": "https://github.com/sponsors/colinhacks"
+ }
+ },
+ "node_modules/zod-to-json-schema": {
+ "version": "3.23.5",
+ "resolved": "https://registry.npmjs.org/zod-to-json-schema/-/zod-to-json-schema-3.23.5.tgz",
+ "integrity": "sha512-5wlSS0bXfF/BrL4jPAbz9da5hDlDptdEppYfe+x4eIJ7jioqKG9uUxOwPzqof09u/XeVdrgFu29lZi+8XNDJtA==",
+ "license": "ISC",
+ "peerDependencies": {
+ "zod": "^3.23.3"
+ }
+ },
+ "node_modules/zwitch": {
+ "version": "2.0.4",
+ "resolved": "https://registry.npmjs.org/zwitch/-/zwitch-2.0.4.tgz",
+ "integrity": "sha512-bXE4cR/kVZhKZX/RjPEflHaKVhUVl85noU3v6b8apfQEc1x4A+zBxjZ4lN8LqGd6WZ3dl98pY4o717VFmoPp+A==",
+ "license": "MIT",
+ "funding": {
+ "type": "github",
+ "url": "https://github.com/sponsors/wooorm"
+ }
}
- }
- },
- "node_modules/xmlbuilder": {
- "version": "13.0.2",
- "resolved": "https://registry.npmjs.org/xmlbuilder/-/xmlbuilder-13.0.2.tgz",
- "integrity": "sha512-Eux0i2QdDYKbdbA6AM6xE4m6ZTZr4G4xF9kahI2ukSEMCzwce2eX9WlTI5J3s+NU7hpasFsr8hWIONae7LluAQ==",
- "license": "MIT",
- "engines": {
- "node": ">=6.0"
- }
- },
- "node_modules/xtend": {
- "version": "4.0.2",
- "resolved": "https://registry.npmjs.org/xtend/-/xtend-4.0.2.tgz",
- "integrity": "sha512-LKYU1iAXJXUgAXn9URjiu+MWhyUXHsvfp7mcuYm9dSUKK0/CjtrUwFAxD82/mCWbtLsGjFIad0wIsod4zrTAEQ==",
- "license": "MIT",
- "engines": {
- "node": ">=0.4"
- }
- },
- "node_modules/y18n": {
- "version": "5.0.8",
- "resolved": "https://registry.npmjs.org/y18n/-/y18n-5.0.8.tgz",
- "integrity": "sha512-0pfFzegeDWJHJIAmTLRP2DwHjdF5s7jo9tuztdQxAhINCdvS+3nGINqPd00AphqJR/0LhANUS6/+7SCb98YOfA==",
- "dev": true,
- "license": "ISC",
- "engines": {
- "node": ">=10"
- }
- },
- "node_modules/yallist": {
- "version": "3.1.1",
- "resolved": "https://registry.npmjs.org/yallist/-/yallist-3.1.1.tgz",
- "integrity": "sha512-a4UGQaWPH59mOXUYnAG2ewncQS4i4F43Tv3JoAM+s2VDAmS9NsK8GpDMLrCHPksFT7h3K6TOoUNn2pb7RoXx4g==",
- "dev": true,
- "license": "ISC"
- },
- "node_modules/yaml": {
- "version": "2.6.0",
- "resolved": "https://registry.npmjs.org/yaml/-/yaml-2.6.0.tgz",
- "integrity": "sha512-a6ae//JvKDEra2kdi1qzCyrJW/WZCgFi8ydDV+eXExl95t+5R+ijnqHJbz9tmMh8FUjx3iv2fCQ4dclAQlO2UQ==",
- "dev": true,
- "license": "ISC",
- "bin": {
- "yaml": "bin.mjs"
- },
- "engines": {
- "node": ">= 14"
- }
- },
- "node_modules/yargs": {
- "version": "17.7.2",
- "resolved": "https://registry.npmjs.org/yargs/-/yargs-17.7.2.tgz",
- "integrity": "sha512-7dSzzRQ++CKnNI/krKnYRV7JKKPUXMEh61soaHKg9mrWEhzFWhFnxPxGl+69cD1Ou63C13NUPCnmIcrvqCuM6w==",
- "dev": true,
- "license": "MIT",
- "dependencies": {
- "cliui": "^8.0.1",
- "escalade": "^3.1.1",
- "get-caller-file": "^2.0.5",
- "require-directory": "^2.1.1",
- "string-width": "^4.2.3",
- "y18n": "^5.0.5",
- "yargs-parser": "^21.1.1"
- },
- "engines": {
- "node": ">=12"
- }
- },
- "node_modules/yargs-parser": {
- "version": "21.1.1",
- "resolved": "https://registry.npmjs.org/yargs-parser/-/yargs-parser-21.1.1.tgz",
- "integrity": "sha512-tVpsJW7DdjecAiFpbIB1e3qxIQsE6NoPc5/eTdrbbIC4h0LVsWhnoa3g+m2HclBIujHzsxZ4VJVA+GUuc2/LBw==",
- "dev": true,
- "license": "ISC",
- "engines": {
- "node": ">=12"
- }
- },
- "node_modules/yocto-queue": {
- "version": "0.1.0",
- "resolved": "https://registry.npmjs.org/yocto-queue/-/yocto-queue-0.1.0.tgz",
- "integrity": "sha512-rVksvsnNCdJ/ohGc6xgPwyN8eheCxsiLM8mxuE/t/mOVqJewPuO1miLpTHQiRgTKCLexL4MeAFVagts7HmNZ2Q==",
- "dev": true,
- "license": "MIT",
- "engines": {
- "node": ">=10"
- },
- "funding": {
- "url": "https://github.com/sponsors/sindresorhus"
- }
- },
- "node_modules/zimmerframe": {
- "version": "1.1.2",
- "resolved": "https://registry.npmjs.org/zimmerframe/-/zimmerframe-1.1.2.tgz",
- "integrity": "sha512-rAbqEGa8ovJy4pyBxZM70hg4pE6gDgaQ0Sl9M3enG3I0d6H4XSAM3GeNGLKnsBpuijUow064sf7ww1nutC5/3w==",
- "license": "MIT",
- "peer": true
- },
- "node_modules/zod": {
- "version": "3.23.8",
- "resolved": "https://registry.npmjs.org/zod/-/zod-3.23.8.tgz",
- "integrity": "sha512-XBx9AXhXktjUqnepgTiE5flcKIYWi/rme0Eaj+5Y0lftuGBq+jyRu/md4WnuxqgP1ubdpNCsYEYPxrzVHD8d6g==",
- "license": "MIT",
- "funding": {
- "url": "https://github.com/sponsors/colinhacks"
- }
- },
- "node_modules/zod-to-json-schema": {
- "version": "3.23.5",
- "resolved": "https://registry.npmjs.org/zod-to-json-schema/-/zod-to-json-schema-3.23.5.tgz",
- "integrity": "sha512-5wlSS0bXfF/BrL4jPAbz9da5hDlDptdEppYfe+x4eIJ7jioqKG9uUxOwPzqof09u/XeVdrgFu29lZi+8XNDJtA==",
- "license": "ISC",
- "peerDependencies": {
- "zod": "^3.23.3"
- }
- },
- "node_modules/zwitch": {
- "version": "2.0.4",
- "resolved": "https://registry.npmjs.org/zwitch/-/zwitch-2.0.4.tgz",
- "integrity": "sha512-bXE4cR/kVZhKZX/RjPEflHaKVhUVl85noU3v6b8apfQEc1x4A+zBxjZ4lN8LqGd6WZ3dl98pY4o717VFmoPp+A==",
- "license": "MIT",
- "funding": {
- "type": "github",
- "url": "https://github.com/sponsors/wooorm"
- }
}
- }
}
diff --git a/package.json b/package.json
index 06b73d00..115edb05 100644
--- a/package.json
+++ b/package.json
@@ -37,7 +37,7 @@
"@radix-ui/react-slot": "^1.1.2",
"@radix-ui/react-switch": "^1.1.3",
"@radix-ui/react-tooltip": "^1.1.8",
- "@supabase/supabase-js": "^2.49.1",
+ "@supabase/supabase-js": "^2.49.4",
"@types/asciichart": "^1.5.8",
"@types/bun": "^1.2.5",
"@types/html-escaper": "^3.0.4",
[The command completed with exit code 0.]
[Current working directory: /workspace]
[Python interpreter: /openhands/poetry/openhands-ai-5O4_aCHf-py3.12/bin/python]
[Command finished with exit code 0]
--END AGENT OBSERVATION--
16:51:34 - openhands:INFO: resolve_issue.py:158 - ------------------------------
16:51:34 - openhands:INFO: resolve_issue.py:159 - END Runtime Completion Fn
16:51:34 - openhands:INFO: resolve_issue.py:160 - ------------------------------
16:51:34 - openhands:INFO: resolve_issue.py:262 - Got git diff for instance 2567:
--------
+ "dev": true,
+ "license": "MIT",
+ "peer": true
+ },
+ "node_modules/class-variance-authority": {
+ "version": "0.7.1",
+ "resolved": "https://registry.npmjs.org/class-variance-authority/-/class-variance-authority-0.7.1.tgz",
+ "integrity": "sha512-Ka+9Trutv7G8M6WT6SeiRWz792K5qEqIGEGzXKhAE6xOWAY6pPH8U+9IY3oCMv6kqTmLsv7Xh/2w2RigkePMsg==",
+ "license": "Apache-2.0",
+ "dependencies": {
+ "clsx": "^2.1.1"
+ },
+ "funding": {
+ "url": "https://polar.sh/cva"
+ }
+ },
+ "node_modules/cli-boxes": {
+ "version": "3.0.0",
+ "resolved": "https://registry.npmjs.org/cli-boxes/-/cli-boxes-3.0.0.tgz",
+ "integrity": "sha512-/lzGpEWL/8PfI0BmBOPRwp0c/wFNX1RdUML3jK/RcSBA9T8mZDdQpqYBKtCFTOfQbwPqWEOpjqW+Fnayc0969g==",
+ "license": "MIT",
+ "engines": {
+ "node": ">=10"
+ },
+ "funding": {
+ "url": "https://github.com/sponsors/sindresorhus"
+ }
+ },
+ "node_modules/cli-table3": {
+ "version": "0.6.5",
+ "resolved": "https://registry.npmjs.org/cli-table3/-/cli-table3-0.6.5.tgz",
+ "integrity": "sha512-+W/5efTR7y5HRD7gACw9yQjqMVvEMLBHmboM/kPWam+H+Hmyrgjh6YncVKK122YZkXrLudzTuAukUw9FnMf7IQ==",
+ "license": "MIT",
+ "dependencies": {
+ "string-width": "^4.2.0"
+ },
+ "engines": {
+ "node": "10.* || >= 12.*"
+ },
+ "optionalDependencies": {
+ "@colors/colors": "1.5.0"
+ }
+ },
+ "node_modules/client-only": {
+ "version": "0.0.1",
+ "resolved": "https://registry.npmjs.org/client-only/-/client-only-0.0.1.tgz",
+ "integrity": "sha512-IV3Ou0jSMzZrd3pZ48nLkT9DA7Ag1pnPzaiQhpW7c3RbcqqzvzzVu+L8gfqMp/8IM2MQtSiqaCxrrcfu8I8rMA==",
+ "license": "MIT"
+ },
+ "node_modules/cliui": {
+ "version": "8.0.1",
+ "resolved": "https://registry.npmjs.org/cliui/-/cliui-8.0.1.tgz",
+ "integrity": "sha512-BSeNnyus75C4//NQ9gQt1/csTXyo/8Sb+afLAkzAptFuMsod9HFokGNudZpi/oQV73hnVK+sR+5PVRMd+Dr7YQ==",
+ "dev": true,
+ "license": "ISC",
+ "peer": true,
+ "dependencies": {
+ "string-width": "^4.2.0",
+ "strip-ansi": "^6.0.1",
+ "wrap-ansi": "^7.0.0"
+ },
+ "engines": {
+ "node": ">=12"
+ }
+ },
+ "node_modules/clsx": {
+ "version": "2.1.1",
+ "resolved": "https://registry.npmjs.org/clsx/-/clsx-2.1.1.tgz",
+ "integrity": "sha512-eYm0QWBtUrBWZWG0d386OGAw16Z995PiOVo2B7bjWSbHedGl5e0ZWaq65kOGgUSNesEIDkB9ISbTg/JK9dhCZA==",
+ "license": "MIT",
+ "engines": {
+ "node": ">=6"
+ }
+ },
+ "node_modules/co": {
+ "version": "4.6.0",
+ "resolved": "https://registry.npmjs.org/co/-/co-4.6.0.tgz",
+ "integrity": "sha512-QVb0dM5HvG+uaxitm8wONl7jltx8dqhfU33DcqtOZcLSVIKSDDLDi7+0LbAKiyI8hD9u42m2YxXSkMGWThaecQ==",
+ "dev": true,
+ "license": "MIT",
+ "peer": true,
+ "engines": {
+ "iojs": ">= 1.0.0",
+ "node": ">= 0.12.0"
+ }
+ },
+ "node_modules/collect-v8-coverage": {
+ "version": "1.0.2",
+ "resolved": "https://registry.npmjs.org/collect-v8-coverage/-/collect-v8-coverage-1.0.2.tgz",
+ "integrity": "sha512-lHl4d5/ONEbLlJvaJNtsF/Lz+WvB07u2ycqTYbdrq7UypDXailES4valYb2eWiJFxZlVmpGekfqoxQhzyFdT4Q==",
+ "dev": true,
+ "license": "MIT",
+ "peer": true
+ },
+ "node_modules/color": {
+ "version": "4.2.3",
+ "resolved": "https://registry.npmjs.org/color/-/color-4.2.3.tgz",
+ "integrity": "sha512-1rXeuUUiGGrykh+CeBdu5Ie7OJwinCgQY0bc7GCRxy5xVHy+moaqkpL/jqQq0MtQOeYcrqEz4abc5f0KtU7W4A==",
+ "license": "MIT",
+ "dependencies": {
+ "color-convert": "^2.0.1",
+ "color-string": "^1.9.0"
+ },
+ "engines": {
+ "node": ">=12.5.0"
+ }
+ },
+ "node_modules/color-convert": {
+ "version": "2.0.1",
+ "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz",
+ "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==",
+ "license": "MIT",
+ "dependencies": {
+ "color-name": "~1.1.4"
+ },
+ "engines": {
+ "node": ">=7.0.0"
+ }
+ },
+ "node_modules/color-name": {
+ "version": "1.1.4",
+ "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz",
+ "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==",
+ "license": "MIT"
+ },
+ "node_modules/color-string": {
+ "version": "1.9.1",
+ "resolved": "https://registry.npmjs.org/color-string/-/color-string-1.9.1.tgz",
+ "integrity": "sha512-shrVawQFojnZv6xM40anx4CkoDP+fZsw/ZerEMsW/pyzsRbElpsL/DBVW7q3ExxwusdNXI3lXpuhEZkzs8p5Eg==",
+ "license": "MIT",
+ "dependencies": {
+ "color-name": "^1.0.0",
+ "simple-swizzle": "^0.2.2"
+ }
+ },
+ "node_modules/colors": {
+ "version": "1.0.3",
+ "resolved": "https://registry.npmjs.org/colors/-/colors-1.0.3.tgz",
+ "integrity": "sha512-pFGrxThWcWQ2MsAz6RtgeWe4NK2kUE1WfsrvvlctdII745EW9I0yflqhe7++M5LEc7bV2c/9/5zc8sFcpL0Drw==",
+ "license": "MIT",
+ "engines": {
+ "node": ">=0.1.90"
+ }
+ },
+ "node_modules/combined-stream": {
+ "version": "1.0.8",
+ "resolved": "https://registry.npmjs.org/combined-stream/-/combined-stream-1.0.8.tgz",
+ "integrity": "sha512-FQN4MRfuJeHf7cBbBMJFXhKSDq+2kAArBlmRBvcvFE5BB1HZKXtSFASDhdlz9zOYwxh8lDdnvmMOe/+5cdoEdg==",
+ "license": "MIT",
+ "dependencies": {
+ "delayed-stream": "~1.0.0"
+ },
+ "engines": {
+ "node": ">= 0.8"
+ }
+ },
+ "node_modules/comma-separated-tokens": {
+ "version": "2.0.3",
+ "resolved": "https://registry.npmjs.org/comma-separated-tokens/-/comma-separated-tokens-2.0.3.tgz",
+ "integrity": "sha512-Fu4hJdvzeylCfQPp9SGWidpzrMs7tTrlu6Vb8XGaRGck8QSNZJJp538Wrb60Lax4fPwR64ViY468OIUTbRlGZg==",
+ "license": "MIT",
+ "funding": {
+ "type": "github",
+ "url": "https://github.com/sponsors/wooorm"
+ }
+ },
+ "node_modules/commander": {
+ "version": "8.3.0",
+ "resolved": "https://registry.npmjs.org/commander/-/commander-8.3.0.tgz",
+ "integrity": "sha512-OkTL9umf+He2DZkUq8f8J9of7yL6RJKI24dVITBmNfZBmri9zYZQrKkuXiKhyfPSu8tUhnVBB1iKXevvnlR4Ww==",
+ "license": "MIT",
+ "engines": {
+ "node": ">= 12"
+ }
+ },
+ "node_modules/concat-map": {
+ "version": "0.0.1",
+ "resolved": "https://registry.npmjs.org/concat-map/-/concat-map-0.0.1.tgz",
+ "integrity": "sha512-/Srv4dswyQNBfohGpz9o6Yb3Gz3SrUDqBH5rTuhGR7ahtlbYKnVxw2bCFMRljaA7EXHaXZ8wsHdodFvbkhKmqg==",
+ "dev": true,
+ "license": "MIT"
+ },
+ "node_modules/convert-source-map": {
+ "version": "2.0.0",
+ "resolved": "https://registry.npmjs.org/convert-source-map/-/convert-source-map-2.0.0.tgz",
+ "integrity": "sha512-Kvp459HrV2FEJ1CAsi1Ku+MY3kasH19TFykTz2xWmMeq6bk2NU3XXvfJ+Q61m0xktWwt+1HSYf3JZsTms3aRJg==",
+ "dev": true,
+ "license": "MIT",
+ "peer": true
+ },
+ "node_modules/core-util-is": {
+ "version": "1.0.3",
+ "resolved": "https://registry.npmjs.org/core-util-is/-/core-util-is-1.0.3.tgz",
+ "integrity": "sha512-ZQBvi1DcpJ4GDqanjucZ2Hj3wEO5pZDS89BWbkcrvdxksJorwUDDZamX9ldFkp9aw2lmBDLgkObEA4DWNJ9FYQ==",
+ "license": "MIT"
+ },
+ "node_modules/create-jest": {
+ "version": "29.7.0",
+ "resolved": "https://registry.npmjs.org/create-jest/-/create-jest-29.7.0.tgz",
+ "integrity": "sha512-Adz2bdH0Vq3F53KEMJOoftQFutWCukm6J24wbPWRO4k1kMY7gS7ds/uoJkNuV8wDCtWWnuwGcJwpWcih+zEW1Q==",
+ "dev": true,
+ "license": "MIT",
+ "peer": true,
+ "dependencies": {
+ "@jest/types": "^29.6.3",
+ "chalk": "^4.0.0",
+ "exit": "^0.1.2",
+ "graceful-fs": "^4.2.9",
+ "jest-config": "^29.7.0",
+ "jest-util": "^29.7.0",
+ "prompts": "^2.0.1"
+ },
+ "bin": {
+ "create-jest": "bin/create-jest.js"
+ },
+ "engines": {
+ "node": "^14.15.0 || ^16.10.0 || >=18.0.0"
+ }
+ },
+ "node_modules/create-jest/node_modules/chalk": {
+ "version": "4.1.2",
+ "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.2.tgz",
+ "integrity": "sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==",
+ "dev": true,
+ "license": "MIT",
+ "peer": true,
+ "dependencies": {
+ "ansi-styles": "^4.1.0",
+ "supports-color": "^7.1.0"
+ },
+ "engines": {
+ "node": ">=10"
+ },
+ "funding": {
+ "url": "https://github.com/chalk/chalk?sponsor=1"
+ }
+ },
+ "node_modules/cross-fetch": {
+ "version": "3.2.0",
+ "resolved": "https://registry.npmjs.org/cross-fetch/-/cross-fetch-3.2.0.tgz",
+ "integrity": "sha512-Q+xVJLoGOeIMXZmbUK4HYk+69cQH6LudR0Vu/pRm2YlU/hDV9CiS0gKUMaWY5f2NeUH9C1nV3bsTlCo0FsTV1Q==",
+ "license": "MIT",
+ "dependencies": {
+ "node-fetch": "^2.7.0"
+ }
+ },
+ "node_modules/cross-fetch/node_modules/node-fetch": {
+ "version": "2.7.0",
+ "resolved": "https://registry.npmjs.org/node-fetch/-/node-fetch-2.7.0.tgz",
+ "integrity": "sha512-c4FRfUm/dbcWZ7U+1Wq0AwCyFL+3nt2bEw05wfxSz+DWpWsitgmSgYmy2dQdWyKC1694ELPqMs/YzUSNozLt8A==",
+ "license": "MIT",
+ "dependencies": {
+ "whatwg-url": "^5.0.0"
+ },
+ "engines": {
+ "node": "4.x || >=6.0.0"
+ },
+ "peerDependencies": {
+ "encoding": "^0.1.0"
+ },
+ "peerDependenciesMeta": {
+ "encoding": {
+ "optional": true
+ }
+ }
+ },
+ "node_modules/cross-spawn": {
+ "version": "7.0.6",
+ "resolved": "https://registry.npmjs.org/cross-spawn/-/cross-spawn-7.0.6.tgz",
+ "integrity": "sha512-uV2QOWP2nWzsy2aMp8aRibhi9dlzF5Hgh5SHaB9OiTGEyDTiJJyx0uy51QXdyWbtAHNua4XJzUKca3OzKUd3vA==",
+ "dev": true,
+ "license": "MIT",
+ "dependencies": {
+ "path-key": "^3.1.0",
+ "shebang-command": "^2.0.0",
+ "which": "^2.0.1"
+ },
+ "engines": {
+ "node": ">= 8"
+ }
+ },
+ "node_modules/crypto-js": {
+ "version": "4.2.0",
+ "resolved": "https://registry.npmjs.org/crypto-js/-/crypto-js-4.2.0.tgz",
+ "integrity": "sha512-KALDyEYgpY+Rlob/iriUtjV6d5Eq+Y191A5g4UqLAi8CyGP9N1+FdVbkc1SxKc2r4YAYqG8JzO2KGL+AizD70Q==",
+ "license": "MIT"
+ },
+ "node_modules/cssesc": {
+ "version": "3.0.0",
+ "resolved": "https://registry.npmjs.org/cssesc/-/cssesc-3.0.0.tgz",
+ "integrity": "sha512-/Tb/JcjK111nNScGob5MNtsntNM1aCNUDipB/TkwZFhyDrrE47SOx/18wF2bbjgc3ZzCSKW1T5nt5EbFoAz/Vg==",
+ "dev": true,
+ "license": "MIT",
+ "bin": {
+ "cssesc": "bin/cssesc"
+ },
+ "engines": {
+ "node": ">=4"
+ }
+ },
+ "node_modules/csstype": {
+ "version": "3.1.3",
+ "resolved": "https://registry.npmjs.org/csstype/-/csstype-3.1.3.tgz",
+ "integrity": "sha512-M1uQkMl8rQK/szD0LNhtqxIPLpimGm8sOBwU7lLnCpSbTyY3yeU1Vc7l4KT5zT4s/yOxHH5O7tIuuLOCnLADRw==",
+ "license": "MIT"
+ },
+ "node_modules/csv-parse": {
+ "version": "5.6.0",
+ "resolved": "https://registry.npmjs.org/csv-parse/-/csv-parse-5.6.0.tgz",
+ "integrity": "sha512-l3nz3euub2QMg5ouu5U09Ew9Wf6/wQ8I++ch1loQ0ljmzhmfZYrH9fflS22i/PQEvsPvxCwxgz5q7UB8K1JO4Q==",
+ "license": "MIT"
+ },
+ "node_modules/damerau-levenshtein": {
+ "version": "1.0.8",
+ "resolved": "https://registry.npmjs.org/damerau-levenshtein/-/damerau-levenshtein-1.0.8.tgz",
+ "integrity": "sha512-sdQSFB7+llfUcQHUQO3+B8ERRj0Oa4w9POWMI/puGtuf7gFywGmkaLCElnudfTiKZV+NvHqL0ifzdrI8Ro7ESA==",
+ "dev": true,
+ "license": "BSD-2-Clause"
+ },
+ "node_modules/data-uri-to-buffer": {
+ "version": "4.0.1",
+ "resolved": "https://registry.npmjs.org/data-uri-to-buffer/-/data-uri-to-buffer-4.0.1.tgz",
+ "integrity": "sha512-0R9ikRb668HB7QDxT1vkpuUBtqc53YyAwMwGeUFKRojY/NWKvdZ+9UYtRfGmhqNbRkTSVpMbmyhXipFFv2cb/A==",
+ "license": "MIT",
+ "engines": {
+ "node": ">= 12"
+ }
+ },
+ "node_modules/data-view-buffer": {
+ "version": "1.0.2",
+ "resolved": "https://registry.npmjs.org/data-view-buffer/-/data-view-buffer-1.0.2.tgz",
+ "integrity": "sha512-EmKO5V3OLXh1rtK2wgXRansaK1/mtVdTUEiEI0W8RkvgT05kfxaH29PliLnpLP73yYO6142Q72QNa8Wx/A5CqQ==",
+ "dev": true,
+ "license": "MIT",
+ "dependencies": {
+ "call-bound": "^1.0.3",
+ "es-errors": "^1.3.0",
+ "is-data-view": "^1.0.2"
+ },
+ "engines": {
+ "node": ">= 0.4"
+ },
+ "funding": {
+ "url": "https://github.com/sponsors/ljharb"
+ }
+ },
+ "node_modules/data-view-byte-length": {
+ "version": "1.0.2",
+ "resolved": "https://registry.npmjs.org/data-view-byte-length/-/data-view-byte-length-1.0.2.tgz",
+ "integrity": "sha512-tuhGbE6CfTM9+5ANGf+oQb72Ky/0+s3xKUpHvShfiz2RxMFgFPjsXuRLBVMtvMs15awe45SRb83D6wH4ew6wlQ==",
+ "dev": true,
+ "license": "MIT",
+ "dependencies": {
+ "call-bound": "^1.0.3",
+ "es-errors": "^1.3.0",
+ "is-data-view": "^1.0.2"
+ },
+ "engines": {
+ "node": ">= 0.4"
+ },
+ "funding": {
+ "url": "https://github.com/sponsors/inspect-js"
+ }
+ },
+ "node_modules/data-view-byte-offset": {
+ "version": "1.0.1",
+ "resolved": "https://registry.npmjs.org/data-view-byte-offset/-/data-view-byte-offset-1.0.1.tgz",
+ "integrity": "sha512-BS8PfmtDGnrgYdOonGZQdLZslWIeCGFP9tpan0hi1Co2Zr2NKADsvGYA8XxuG/4UWgJ6Cjtv+YJnB6MM69QGlQ==",
+ "dev": true,
+ "license": "MIT",
+ "dependencies": {
+ "call-bound": "^1.0.2",
+ "es-errors": "^1.3.0",
+ "is-data-view": "^1.0.1"
+ },
+ "engines": {
+ "node": ">= 0.4"
+ },
+ "funding": {
+ "url": "https://github.com/sponsors/ljharb"
+ }
+ },
+ "node_modules/date-fns": {
+ "version": "4.1.0",
+ "resolved": "https://registry.npmjs.org/date-fns/-/date-fns-4.1.0.tgz",
+ "integrity": "sha512-Ukq0owbQXxa/U3EGtsdVBkR1w7KOQ5gIBqdH2hkvknzZPYvBxb/aa6E8L7tmjFtkwZBu3UXBbjIgPo/Ez4xaNg==",
+ "license": "MIT",
+ "funding": {
+ "type": "github",
+ "url": "https://github.com/sponsors/kossnocorp"
+ }
+ },
+ "node_modules/date-fns-tz": {
+ "version": "3.2.0",
+ "resolved": "https://registry.npmjs.org/date-fns-tz/-/date-fns-tz-3.2.0.tgz",
+ "integrity": "sha512-sg8HqoTEulcbbbVXeg84u5UnlsQa8GS5QXMqjjYIhS4abEVVKIUwe0/l/UhrZdKaL/W5eWZNlbTeEIiOXTcsBQ==",
+ "license": "MIT",
+ "peerDependencies": {
+ "date-fns": "^3.0.0 || ^4.0.0"
+ }
+ },
+ "node_modules/dayjs": {
+ "version": "1.11.13",
+ "resolved": "https://registry.npmjs.org/dayjs/-/dayjs-1.11.13.tgz",
+ "integrity": "sha512-oaMBel6gjolK862uaPQOVTA7q3TZhuSvuMQAAglQDOWYO9A91IrAOUJEyKVlqJlHE0vq5p5UXxzdPfMH/x6xNg==",
+ "license": "MIT"
+ },
+ "node_modules/debug": {
+ "version": "4.3.7",
+ "resolved": "https://registry.npmjs.org/debug/-/debug-4.3.7.tgz",
+ "integrity": "sha512-Er2nc/H7RrMXZBFCEim6TCmMk02Z8vLC2Rbi1KEBggpo0fS6l0S1nnapwmIi3yW/+GOJap1Krg4w0Hg80oCqgQ==",
+ "license": "MIT",
+ "dependencies": {
+ "ms": "^2.1.3"
+ },
+ "engines": {
+ "node": ">=6.0"
+ },
+ "peerDependenciesMeta": {
+ "supports-color": {
+ "optional": true
+ }
+ }
+ },
+ "node_modules/decode-named-character-reference": {
+ "version": "1.0.2",
+ "resolved": "https://registry.npmjs.org/decode-named-character-reference/-/decode-named-character-reference-1.0.2.tgz",
+ "integrity": "sha512-O8x12RzrUF8xyVcY0KJowWsmaJxQbmy0/EtnNtHRpsOcT7dFk5W598coHqBVpmWo1oQQfsCqfCmkZN5DJrZVdg==",
+ "license": "MIT",
+ "dependencies": {
+ "character-entities": "^2.0.0"
+ },
+ "funding": {
+ "type": "github",
+ "url": "https://github.com/sponsors/wooorm"
+ }
+ },
+ "node_modules/decode-named-character-reference/node_modules/character-entities": {
+ "version": "2.0.2",
+ "resolved": "https://registry.npmjs.org/character-entities/-/character-entities-2.0.2.tgz",
+ "integrity": "sha512-shx7oQ0Awen/BRIdkjkvz54PnEEI/EjwXDSIZp86/KKdbafHh1Df/RYGBhn4hbe2+uKC9FnT5UCEdyPz3ai9hQ==",
+ "license": "MIT",
+ "funding": {
+ "type": "github",
+ "url": "https://github.com/sponsors/wooorm"
+ }
+ },
+ "node_modules/decompress-response": {
+ "version": "6.0.0",
+ "resolved": "https://registry.npmjs.org/decompress-response/-/decompress-response-6.0.0.tgz",
+ "integrity": "sha512-aW35yZM6Bb/4oJlZncMH2LCoZtJXTRxES17vE3hoRiowU2kWHaJKFkSBDnDR+cm9J+9QhXmREyIfv0pji9ejCQ==",
+ "license": "MIT",
+ "dependencies": {
+ "mimic-response": "^3.1.0"
+ },
+ "engines": {
+ "node": ">=10"
+ },
+ "funding": {
+ "url": "https://github.com/sponsors/sindresorhus"
+ }
+ },
+ "node_modules/dedent": {
+ "version": "1.5.3",
+ "resolved": "https://registry.npmjs.org/dedent/-/dedent-1.5.3.tgz",
+ "integrity": "sha512-NHQtfOOW68WD8lgypbLA5oT+Bt0xXJhiYvoR6SmmNXZfpzOGXwdKWmcwG8N7PwVVWV3eF/68nmD9BaJSsTBhyQ==",
+ "dev": true,
+ "license": "MIT",
+ "peer": true,
+ "peerDependencies": {
+ "babel-plugin-macros": "^3.1.0"
+ },
+ "peerDependenciesMeta": {
+ "babel-plugin-macros": {
+ "optional": true
+ }
+ }
+ },
+ "node_modules/deep-extend": {
+ "version": "0.6.0",
+ "resolved": "https://registry.npmjs.org/deep-extend/-/deep-extend-0.6.0.tgz",
+ "integrity": "sha512-LOHxIOaPYdHlJRtCQfDIVZtfw/ufM8+rVj649RIHzcm/vGwQRXFt6OPqIFWsm2XEMrNIEtWR64sY1LEKD2vAOA==",
+ "license": "MIT",
+ "engines": {
+ "node": ">=4.0.0"
+ }
+ },
+ "node_modules/deep-is": {
+ "version": "0.1.4",
+ "resolved": "https://registry.npmjs.org/deep-is/-/deep-is-0.1.4.tgz",
+ "integrity": "sha512-oIPzksmTg4/MriiaYGO+okXDT7ztn/w3Eptv/+gSIdMdKsJo0u4CfYNFJPy+4SKMuCqGw2wxnA+URMg3t8a/bQ==",
+ "dev": true,
+ "license": "MIT"
+ },
+ "node_modules/deepmerge": {
+ "version": "4.3.1",
+ "resolved": "https://registry.npmjs.org/deepmerge/-/deepmerge-4.3.1.tgz",
+ "integrity": "sha512-3sUqbMEc77XqpdNO7FRyRog+eW3ph+GYCbj+rK+uYyRMuwsVy0rMiVtPn+QJlKFvWP/1PYpapqYn0Me2knFn+A==",
+ "license": "MIT",
+ "engines": {
+ "node": ">=0.10.0"
+ }
+ },
+ "node_modules/define-data-property": {
+ "version": "1.1.4",
+ "resolved": "https://registry.npmjs.org/define-data-property/-/define-data-property-1.1.4.tgz",
+ "integrity": "sha512-rBMvIzlpA8v6E+SJZoo++HAYqsLrkg7MSfIinMPFhmkorw7X+dOXVJQs+QT69zGkzMyfDnIMN2Wid1+NbL3T+A==",
+ "dev": true,
+ "license": "MIT",
+ "dependencies": {
+ "es-define-property": "^1.0.0",
+ "es-errors": "^1.3.0",
+ "gopd": "^1.0.1"
+ },
+ "engines": {
+ "node": ">= 0.4"
+ },
+ "funding": {
+ "url": "https://github.com/sponsors/ljharb"
+ }
+ },
+ "node_modules/define-properties": {
+ "version": "1.2.1",
+ "resolved": "https://registry.npmjs.org/define-properties/-/define-properties-1.2.1.tgz",
+ "integrity": "sha512-8QmQKqEASLd5nx0U1B1okLElbUuuttJ/AnYmRXbbbGDWh6uS208EjD4Xqq/I9wK7u0v6O08XhTWnt5XtEbR6Dg==",
+ "dev": true,
+ "license": "MIT",
+ "dependencies": {
+ "define-data-property": "^1.0.1",
+ "has-property-descriptors": "^1.0.0",
+ "object-keys": "^1.1.1"
+ },
+ "engines": {
+ "node": ">= 0.4"
+ },
+ "funding": {
+ "url": "https://github.com/sponsors/ljharb"
+ }
+ },
+ "node_modules/delayed-stream": {
+ "version": "1.0.0",
+ "resolved": "https://registry.npmjs.org/delayed-stream/-/delayed-stream-1.0.0.tgz",
+ "integrity": "sha512-ZySD7Nf91aLB0RxL4KGrKHBXl7Eds1DAmEdcoVawXnLD7SDhpNgtuII2aAkg7a7QS41jxPSZ17p4VdGnMHk3MQ==",
+ "license": "MIT",
+ "engines": {
+ "node": ">=0.4.0"
+ }
+ },
+ "node_modules/dequal": {
+ "version": "2.0.3",
+ "resolved": "https://registry.npmjs.org/dequal/-/dequal-2.0.3.tgz",
+ "integrity": "sha512-0je+qPKHEMohvfRTCEo3CrPG6cAzAYgmzKyxRiYSSDkS6eGJdyVJm7WaYA5ECaAD9wLB2T4EEeymA5aFVcYXCA==",
+ "license": "MIT",
+ "engines": {
+ "node": ">=6"
+ }
+ },
+ "node_modules/detect-libc": {
+ "version": "2.0.3",
+ "resolved": "https://registry.npmjs.org/detect-libc/-/detect-libc-2.0.3.tgz",
+ "integrity": "sha512-bwy0MGW55bG41VqxxypOsdSdGqLwXPI/focwgTYCFMbdUiBAxLg9CFzG08sz2aqzknwiX7Hkl0bQENjg8iLByw==",
+ "license": "Apache-2.0",
+ "engines": {
+ "node": ">=8"
+ }
+ },
+ "node_modules/detect-newline": {
+ "version": "3.1.0",
+ "resolved": "https://registry.npmjs.org/detect-newline/-/detect-newline-3.1.0.tgz",
+ "integrity": "sha512-TLz+x/vEXm/Y7P7wn1EJFNLxYpUD4TgMosxY6fAVJUnJMbupHBOncxyWUG9OpTaH9EBD7uFI5LfEgmMOc54DsA==",
+ "dev": true,
+ "license": "MIT",
+ "peer": true,
+ "engines": {
+ "node": ">=8"
+ }
+ },
+ "node_modules/detect-node-es": {
+ "version": "1.1.0",
+ "resolved": "https://registry.npmjs.org/detect-node-es/-/detect-node-es-1.1.0.tgz",
+ "integrity": "sha512-ypdmJU/TbBby2Dxibuv7ZLW3Bs1QEmM7nHjEANfohJLvE0XVujisn1qPJcZxg+qDucsr+bP6fLD1rPS3AhJ7EQ==",
+ "license": "MIT"
+ },
+ "node_modules/didyoumean": {
+ "version": "1.2.2",
+ "resolved": "https://registry.npmjs.org/didyoumean/-/didyoumean-1.2.2.tgz",
+ "integrity": "sha512-gxtyfqMg7GKyhQmb056K7M3xszy/myH8w+B4RT+QXBQsvAOdc3XymqDDPHx1BgPgsdAA5SIifona89YtRATDzw==",
+ "dev": true,
+ "license": "Apache-2.0"
+ },
+ "node_modules/diff": {
+ "version": "7.0.0",
+ "resolved": "https://registry.npmjs.org/diff/-/diff-7.0.0.tgz",
+ "integrity": "sha512-PJWHUb1RFevKCwaFA9RlG5tCd+FO5iRh9A8HEtkmBH2Li03iJriB6m6JIN4rGz3K3JLawI7/veA1xzRKP6ISBw==",
+ "license": "BSD-3-Clause",
+ "engines": {
+ "node": ">=0.3.1"
+ }
+ },
+ "node_modules/diff-match-patch": {
+ "version": "1.0.5",
+ "resolved": "https://registry.npmjs.org/diff-match-patch/-/diff-match-patch-1.0.5.tgz",
+ "integrity": "sha512-IayShXAgj/QMXgB0IWmKx+rOPuGMhqm5w6jvFxmVenXKIzRqTAAsbBPT3kWQeGANj3jGgvcvv4yK6SxqYmikgw==",
+ "license": "Apache-2.0"
+ },
+ "node_modules/diff-sequences": {
+ "version": "29.6.3",
+ "resolved": "https://registry.npmjs.org/diff-sequences/-/diff-sequences-29.6.3.tgz",
+ "integrity": "sha512-EjePK1srD3P08o2j4f0ExnylqRs5B9tJjcp9t1krH2qRi8CCdsYfwe9JgSLurFBWwq4uOlipzfk5fHNvwFKr8Q==",
+ "dev": true,
+ "license": "MIT",
+ "engines": {
+ "node": "^14.15.0 || ^16.10.0 || >=18.0.0"
+ }
+ },
+ "node_modules/dlv": {
+ "version": "1.1.3",
+ "resolved": "https://registry.npmjs.org/dlv/-/dlv-1.1.3.tgz",
+ "integrity": "sha512-+HlytyjlPKnIG8XuRG8WvmBP8xs8P71y+SKKS6ZXWoEgLuePxtDoUEiH7WkdePWrQ5JBpE6aoVqfZfJUQkjXwA==",
+ "dev": true,
+ "license": "MIT"
+ },
+ "node_modules/doctrine": {
+ "version": "2.1.0",
+ "resolved": "https://registry.npmjs.org/doctrine/-/doctrine-2.1.0.tgz",
+ "integrity": "sha512-35mSku4ZXK0vfCuHEDAwt55dg2jNajHZ1odvF+8SSr82EsZY4QmXfuWso8oEd8zRhVObSN18aM0CjSdoBX7zIw==",
+ "dev": true,
+ "license": "Apache-2.0",
+ "dependencies": {
+ "esutils": "^2.0.2"
+ },
+ "engines": {
+ "node": ">=0.10.0"
+ }
+ },
+ "node_modules/dom-serializer": {
+ "version": "2.0.0",
+ "resolved": "https://registry.npmjs.org/dom-serializer/-/dom-serializer-2.0.0.tgz",
+ "integrity": "sha512-wIkAryiqt/nV5EQKqQpo3SToSOV9J0DnbJqwK7Wv/Trc92zIAYZ4FlMu+JPFW1DfGFt81ZTCGgDEabffXeLyJg==",
+ "license": "MIT",
+ "dependencies": {
+ "domelementtype": "^2.3.0",
+ "domhandler": "^5.0.2",
+ "entities": "^4.2.0"
+ },
+ "funding": {
+ "url": "https://github.com/cheeriojs/dom-serializer?sponsor=1"
+ }
+ },
+ "node_modules/domelementtype": {
+ "version": "2.3.0",
+ "resolved": "https://registry.npmjs.org/domelementtype/-/domelementtype-2.3.0.tgz",
+ "integrity": "sha512-OLETBj6w0OsagBwdXnPdN0cnMfF9opN69co+7ZrbfPGrdpPVNBUj02spi6B1N7wChLQiPn4CSH/zJvXw56gmHw==",
+ "funding": [
+ {
+ "type": "github",
+ "url": "https://github.com/sponsors/fb55"
+ }
+ ],
+ "license": "BSD-2-Clause"
+ },
+ "node_modules/domhandler": {
+ "version": "5.0.3",
+ "resolved": "https://registry.npmjs.org/domhandler/-/domhandler-5.0.3.tgz",
+ "integrity": "sha512-cgwlv/1iFQiFnU96XXgROh8xTeetsnJiDsTc7TYCLFd9+/WNkIqPTxiM/8pSd8VIrhXGTf1Ny1q1hquVqDJB5w==",
+ "license": "BSD-2-Clause",
+ "dependencies": {
+ "domelementtype": "^2.3.0"
+ },
+ "engines": {
+ "node": ">= 4"
+ },
+ "funding": {
+ "url": "https://github.com/fb55/domhandler?sponsor=1"
+ }
+ },
+ "node_modules/domutils": {
+ "version": "3.2.2",
+ "resolved": "https://registry.npmjs.org/domutils/-/domutils-3.2.2.tgz",
+ "integrity": "sha512-6kZKyUajlDuqlHKVX1w7gyslj9MPIXzIFiz/rGu35uC1wMi+kMhQwGhl4lt9unC9Vb9INnY9Z3/ZA3+FhASLaw==",
+ "license": "BSD-2-Clause",
+ "dependencies": {
+ "dom-serializer": "^2.0.0",
+ "domelementtype": "^2.3.0",
+ "domhandler": "^5.0.3"
+ },
+ "funding": {
+ "url": "https://github.com/fb55/domutils?sponsor=1"
+ }
+ },
+ "node_modules/dotenv": {
+ "version": "16.5.0",
+ "resolved": "https://registry.npmjs.org/dotenv/-/dotenv-16.5.0.tgz",
+ "integrity": "sha512-m/C+AwOAr9/W1UOIZUo232ejMNnJAJtYQjUbHoNTBNTJSvqzzDh7vnrei3o3r3m9blf6ZoDkvcw0VmozNRFJxg==",
+ "license": "BSD-2-Clause",
+ "engines": {
+ "node": ">=12"
+ },
+ "funding": {
+ "url": "https://dotenvx.com"
+ }
+ },
+ "node_modules/dunder-proto": {
+ "version": "1.0.1",
+ "resolved": "https://registry.npmjs.org/dunder-proto/-/dunder-proto-1.0.1.tgz",
+ "integrity": "sha512-KIN/nDJBQRcXw0MLVhZE9iQHmG68qAVIBg9CqmUYjmQIhgij9U5MFvrqkUL5FbtyyzZuOeOt0zdeRe4UY7ct+A==",
+ "license": "MIT",
+ "dependencies": {
+ "call-bind-apply-helpers": "^1.0.1",
+ "es-errors": "^1.3.0",
+ "gopd": "^1.2.0"
+ },
+ "engines": {
+ "node": ">= 0.4"
+ }
+ },
+ "node_modules/eastasianwidth": {
+ "version": "0.2.0",
+ "resolved": "https://registry.npmjs.org/eastasianwidth/-/eastasianwidth-0.2.0.tgz",
+ "integrity": "sha512-I88TYZWc9XiYHRQ4/3c5rjjfgkjhLyW2luGIheGERbNQ6OY7yTybanSpDXZa8y7VUP9YmDcYa+eyq4ca7iLqWA==",
+ "dev": true,
+ "license": "MIT"
+ },
+ "node_modules/ecdsa-sig-formatter": {
+ "version": "1.0.11",
+ "resolved": "https://registry.npmjs.org/ecdsa-sig-formatter/-/ecdsa-sig-formatter-1.0.11.tgz",
+ "integrity": "sha512-nagl3RYrbNv6kQkeJIpt6NJZy8twLB/2vtz6yN9Z4vRKHN4/QZJIEbqohALSgwKdnksuY3k5Addp5lg8sVoVcQ==",
+ "license": "Apache-2.0",
+ "dependencies": {
+ "safe-buffer": "^5.0.1"
+ }
+ },
+ "node_modules/ejs": {
+ "version": "3.1.10",
+ "resolved": "https://registry.npmjs.org/ejs/-/ejs-3.1.10.tgz",
+ "integrity": "sha512-UeJmFfOrAQS8OJWPZ4qtgHyWExa088/MtK5UEyoJGFH67cDEXkZSviOiKRCZ4Xij0zxI3JECgYs3oKx+AizQBA==",
+ "dev": true,
+ "license": "Apache-2.0",
+ "dependencies": {
+ "jake": "^10.8.5"
+ },
+ "bin": {
+ "ejs": "bin/cli.js"
+ },
+ "engines": {
+ "node": ">=0.10.0"
+ }
+ },
+ "node_modules/electron-to-chromium": {
+ "version": "1.5.140",
+ "resolved": "https://registry.npmjs.org/electron-to-chromium/-/electron-to-chromium-1.5.140.tgz",
+ "integrity": "sha512-o82Rj+ONp4Ip7Cl1r7lrqx/pXhbp/lh9DpKcMNscFJdh8ebyRofnc7Sh01B4jx403RI0oqTBvlZ7OBIZLMr2+Q==",
+ "dev": true,
+ "license": "ISC"
+ },
+ "node_modules/emittery": {
+ "version": "0.13.1",
+ "resolved": "https://registry.npmjs.org/emittery/-/emittery-0.13.1.tgz",
+ "integrity": "sha512-DeWwawk6r5yR9jFgnDKYt4sLS0LmHJJi3ZOnb5/JdbYwj3nW+FxQnHIjhBKz8YLC7oRNPVM9NQ47I3CVx34eqQ==",
+ "dev": true,
+ "license": "MIT",
+ "peer": true,
+ "engines": {
+ "node": ">=12"
+ },
+ "funding": {
+ "url": "https://github.com/sindresorhus/emittery?sponsor=1"
+ }
+ },
+ "node_modules/emoji-regex": {
+ "version": "8.0.0",
+ "resolved": "https://registry.npmjs.org/emoji-regex/-/emoji-regex-8.0.0.tgz",
+ "integrity": "sha512-MSjYzcWNOA0ewAHpz0MxpYFvwg6yjy1NG3xteoqz644VCo/RPgnr1/GGt+ic3iJTzQ8Eu3TdM14SawnVUmGE6A==",
+ "license": "MIT"
+ },
+ "node_modules/end-of-stream": {
+ "version": "1.4.4",
+ "resolved": "https://registry.npmjs.org/end-of-stream/-/end-of-stream-1.4.4.tgz",
+ "integrity": "sha512-+uw1inIHVPQoaVuHzRyXd21icM+cnt4CzD5rW+NC1wjOUSTOs+Te7FOv7AhN7vS9x/oIyhLP5PR1H+phQAHu5Q==",
+ "license": "MIT",
+ "dependencies": {
+ "once": "^1.4.0"
+ }
+ },
+ "node_modules/entities": {
+ "version": "4.5.0",
+ "resolved": "https://registry.npmjs.org/entities/-/entities-4.5.0.tgz",
+ "integrity": "sha512-V0hjH4dGPh9Ao5p0MoRY6BVqtwCjhz6vI5LT8AJ55H+4g9/4vbHx1I54fS0XuclLhDHArPQCiMjDxjaL8fPxhw==",
+ "license": "BSD-2-Clause",
+ "engines": {
+ "node": ">=0.12"
+ },
+ "funding": {
+ "url": "https://github.com/fb55/entities?sponsor=1"
+ }
+ },
+ "node_modules/error-ex": {
+ "version": "1.3.2",
+ "resolved": "https://registry.npmjs.org/error-ex/-/error-ex-1.3.2.tgz",
+ "integrity": "sha512-7dFHNmqeFSEt2ZBsCriorKnn3Z2pj+fd9kmI6QoWw4//DL+icEBfc0U7qJCisqrTsKTjw4fNFy2pW9OqStD84g==",
+ "dev": true,
+ "license": "MIT",
+ "peer": true,
+ "dependencies": {
+ "is-arrayish": "^0.2.1"
+ }
+ },
+ "node_modules/es-abstract": {
+ "version": "1.23.9",
+ "resolved": "https://registry.npmjs.org/es-abstract/-/es-abstract-1.23.9.tgz",
+ "integrity": "sha512-py07lI0wjxAC/DcfK1S6G7iANonniZwTISvdPzk9hzeH0IZIshbuuFxLIU96OyF89Yb9hiqWn8M/bY83KY5vzA==",
+ "dev": true,
+ "license": "MIT",
+ "dependencies": {
+ "array-buffer-byte-length": "^1.0.2",
+ "arraybuffer.prototype.slice": "^1.0.4",
+ "available-typed-arrays": "^1.0.7",
+ "call-bind": "^1.0.8",
+ "call-bound": "^1.0.3",
+ "data-view-buffer": "^1.0.2",
+ "data-view-byte-length": "^1.0.2",
+ "data-view-byte-offset": "^1.0.1",
+ "es-define-property": "^1.0.1",
+ "es-errors": "^1.3.0",
+ "es-object-atoms": "^1.0.0",
+ "es-set-tostringtag": "^2.1.0",
+ "es-to-primitive": "^1.3.0",
+ "function.prototype.name": "^1.1.8",
+ "get-intrinsic": "^1.2.7",
+ "get-proto": "^1.0.0",
+ "get-symbol-description": "^1.1.0",
+ "globalthis": "^1.0.4",
+ "gopd": "^1.2.0",
+ "has-property-descriptors": "^1.0.2",
+ "has-proto": "^1.2.0",
+ "has-symbols": "^1.1.0",
+ "hasown": "^2.0.2",
+ "internal-slot": "^1.1.0",
+ "is-array-buffer": "^3.0.5",
+ "is-callable": "^1.2.7",
+ "is-data-view": "^1.0.2",
+ "is-regex": "^1.2.1",
+ "is-shared-array-buffer": "^1.0.4",
+ "is-string": "^1.1.1",
+ "is-typed-array": "^1.1.15",
+ "is-weakref": "^1.1.0",
+ "math-intrinsics": "^1.1.0",
+ "object-inspect": "^1.13.3",
+ "object-keys": "^1.1.1",
+ "object.assign": "^4.1.7",
+ "own-keys": "^1.0.1",
+ "regexp.prototype.flags": "^1.5.3",
+ "safe-array-concat": "^1.1.3",
+ "safe-push-apply": "^1.0.0",
+ "safe-regex-test": "^1.1.0",
+ "set-proto": "^1.0.0",
+ "string.prototype.trim": "^1.2.10",
+ "string.prototype.trimend": "^1.0.9",
+ "string.prototype.trimstart": "^1.0.8",
+ "typed-array-buffer": "^1.0.3",
+ "typed-array-byte-length": "^1.0.3",
+ "typed-array-byte-offset": "^1.0.4",
+ "typed-array-length": "^1.0.7",
+ "unbox-primitive": "^1.1.0",
+ "which-typed-array": "^1.1.18"
+ },
+ "engines": {
+ "node": ">= 0.4"
+ },
+ "funding": {
+ "url": "https://github.com/sponsors/ljharb"
+ }
+ },
+ "node_modules/es-define-property": {
+ "version": "1.0.1",
+ "resolved": "https://registry.npmjs.org/es-define-property/-/es-define-property-1.0.1.tgz",
+ "integrity": "sha512-e3nRfgfUZ4rNGL232gUgX06QNyyez04KdjFrF+LTRoOXmrOgFKDg4BCdsjW8EnT69eqdYGmRpJwiPVYNrCaW3g==",
+ "license": "MIT",
+ "engines": {
+ "node": ">= 0.4"
+ }
+ },
+ "node_modules/es-errors": {
+ "version": "1.3.0",
+ "resolved": "https://registry.npmjs.org/es-errors/-/es-errors-1.3.0.tgz",
+ "integrity": "sha512-Zf5H2Kxt2xjTvbJvP2ZWLEICxA6j+hAmMzIlypy4xcBg1vKVnx89Wy0GbS+kf5cwCVFFzdCFh2XSCFNULS6csw==",
+ "license": "MIT",
+ "engines": {
+ "node": ">= 0.4"
+ }
+ },
+ "node_modules/es-iterator-helpers": {
+ "version": "1.2.1",
+ "resolved": "https://registry.npmjs.org/es-iterator-helpers/-/es-iterator-helpers-1.2.1.tgz",
+ "integrity": "sha512-uDn+FE1yrDzyC0pCo961B2IHbdM8y/ACZsKD4dG6WqrjV53BADjwa7D+1aom2rsNVfLyDgU/eigvlJGJ08OQ4w==",
+ "dev": true,
+ "license": "MIT",
+ "dependencies": {
+ "call-bind": "^1.0.8",
+ "call-bound": "^1.0.3",
+ "define-properties": "^1.2.1",
+ "es-abstract": "^1.23.6",
+ "es-errors": "^1.3.0",
+ "es-set-tostringtag": "^2.0.3",
+ "function-bind": "^1.1.2",
+ "get-intrinsic": "^1.2.6",
+ "globalthis": "^1.0.4",
+ "gopd": "^1.2.0",
+ "has-property-descriptors": "^1.0.2",
+ "has-proto": "^1.2.0",
+ "has-symbols": "^1.1.0",
+ "internal-slot": "^1.1.0",
+ "iterator.prototype": "^1.1.4",
+ "safe-array-concat": "^1.1.3"
+ },
+ "engines": {
+ "node": ">= 0.4"
+ }
+ },
+ "node_modules/es-object-atoms": {
+ "version": "1.1.1",
+ "resolved": "https://registry.npmjs.org/es-object-atoms/-/es-object-atoms-1.1.1.tgz",
+ "integrity": "sha512-FGgH2h8zKNim9ljj7dankFPcICIK9Cp5bm+c2gQSYePhpaG5+esrLODihIorn+Pe6FGJzWhXQotPv73jTaldXA==",
+ "license": "MIT",
+ "dependencies": {
+ "es-errors": "^1.3.0"
+ },
+ "engines": {
+ "node": ">= 0.4"
+ }
+ },
+ "node_modules/es-set-tostringtag": {
+ "version": "2.1.0",
+ "resolved": "https://registry.npmjs.org/es-set-tostringtag/-/es-set-tostringtag-2.1.0.tgz",
+ "integrity": "sha512-j6vWzfrGVfyXxge+O0x5sh6cvxAog0a/4Rdd2K36zCMV5eJ+/+tOAngRO8cODMNWbVRdVlmGZQL2YS3yR8bIUA==",
+ "dev": true,
+ "license": "MIT",
+ "dependencies": {
+ "es-errors": "^1.3.0",
+ "get-intrinsic": "^1.2.6",
+ "has-tostringtag": "^1.0.2",
+ "hasown": "^2.0.2"
+ },
+ "engines": {
+ "node": ">= 0.4"
+ }
+ },
+ "node_modules/es-shim-unscopables": {
+ "version": "1.1.0",
+ "resolved": "https://registry.npmjs.org/es-shim-unscopables/-/es-shim-unscopables-1.1.0.tgz",
+ "integrity": "sha512-d9T8ucsEhh8Bi1woXCf+TIKDIROLG5WCkxg8geBCbvk22kzwC5G2OnXVMO6FUsvQlgUUXQ2itephWDLqDzbeCw==",
+ "dev": true,
+ "license": "MIT",
+ "dependencies": {
+ "hasown": "^2.0.2"
+ },
+ "engines": {
+ "node": ">= 0.4"
+ }
+ },
+ "node_modules/es-to-primitive": {
+ "version": "1.3.0",
+ "resolved": "https://registry.npmjs.org/es-to-primitive/-/es-to-primitive-1.3.0.tgz",
+ "integrity": "sha512-w+5mJ3GuFL+NjVtJlvydShqE1eN3h3PbI7/5LAsYJP/2qtuMXjfL2LpHSRqo4b4eSF5K/DH1JXKUAHSB2UW50g==",
+ "dev": true,
+ "license": "MIT",
+ "dependencies": {
+ "is-callable": "^1.2.7",
+ "is-date-object": "^1.0.5",
+ "is-symbol": "^1.0.4"
+ },
+ "engines": {
+ "node": ">= 0.4"
+ },
+ "funding": {
+ "url": "https://github.com/sponsors/ljharb"
+ }
+ },
+ "node_modules/escalade": {
+ "version": "3.2.0",
+ "resolved": "https://registry.npmjs.org/escalade/-/escalade-3.2.0.tgz",
+ "integrity": "sha512-WUj2qlxaQtO4g6Pq5c29GTcWGDyd8itL8zTlipgECz3JesAiiOKotd8JU6otB3PACgG6xkJUyVhboMS+bje/jA==",
+ "dev": true,
+ "license": "MIT",
+ "engines": {
+ "node": ">=6"
+ }
+ },
+ "node_modules/escape-string-regexp": {
+ "version": "5.0.0",
+ "resolved": "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-5.0.0.tgz",
+ "integrity": "sha512-/veY75JbMK4j1yjvuUxuVsiS/hr/4iHs9FTT6cgTexxdE0Ly/glccBAkloH/DofkjRbZU3bnoj38mOmhkZ0lHw==",
+ "license": "MIT",
+ "engines": {
+ "node": ">=12"
+ },
+ "funding": {
+ "url": "https://github.com/sponsors/sindresorhus"
+ }
+ },
+ "node_modules/eslint": {
+ "version": "9.25.1",
+ "resolved": "https://registry.npmjs.org/eslint/-/eslint-9.25.1.tgz",
+ "integrity": "sha512-E6Mtz9oGQWDCpV12319d59n4tx9zOTXSTmc8BLVxBx+G/0RdM5MvEEJLU9c0+aleoePYYgVTOsRblx433qmhWQ==",
+ "dev": true,
+ "license": "MIT",
+ "dependencies": {
+ "@eslint-community/eslint-utils": "^4.2.0",
+ "@eslint-community/regexpp": "^4.12.1",
+ "@eslint/config-array": "^0.20.0",
+ "@eslint/config-helpers": "^0.2.1",
+ "@eslint/core": "^0.13.0",
+ "@eslint/eslintrc": "^3.3.1",
+ "@eslint/js": "9.25.1",
+ "@eslint/plugin-kit": "^0.2.8",
+ "@humanfs/node": "^0.16.6",
+ "@humanwhocodes/module-importer": "^1.0.1",
+ "@humanwhocodes/retry": "^0.4.2",
+ "@types/estree": "^1.0.6",
+ "@types/json-schema": "^7.0.15",
+ "ajv": "^6.12.4",
+ "chalk": "^4.0.0",
+ "cross-spawn": "^7.0.6",
+ "debug": "^4.3.2",
+ "escape-string-regexp": "^4.0.0",
+ "eslint-scope": "^8.3.0",
+ "eslint-visitor-keys": "^4.2.0",
+ "espree": "^10.3.0",
+ "esquery": "^1.5.0",
+ "esutils": "^2.0.2",
+ "fast-deep-equal": "^3.1.3",
+ "file-entry-cache": "^8.0.0",
+ "find-up": "^5.0.0",
+ "glob-parent": "^6.0.2",
+ "ignore": "^5.2.0",
+ "imurmurhash": "^0.1.4",
+ "is-glob": "^4.0.0",
+ "json-stable-stringify-without-jsonify": "^1.0.1",
+ "lodash.merge": "^4.6.2",
+ "minimatch": "^3.1.2",
+ "natural-compare": "^1.4.0",
+ "optionator": "^0.9.3"
+ },
+ "bin": {
+ "eslint": "bin/eslint.js"
+ },
+ "engines": {
+ "node": "^18.18.0 || ^20.9.0 || >=21.1.0"
+ },
+ "funding": {
+ "url": "https://eslint.org/donate"
+ },
+ "peerDependencies": {
+ "jiti": "*"
+ },
+ "peerDependenciesMeta": {
+ "jiti": {
+ "optional": true
+ }
+ }
+ },
+ "node_modules/eslint-config-next": {
+ "version": "15.3.1",
+ "resolved": "https://registry.npmjs.org/eslint-config-next/-/eslint-config-next-15.3.1.tgz",
+ "integrity": "sha512-GnmyVd9TE/Ihe3RrvcafFhXErErtr2jS0JDeCSp3vWvy86AXwHsRBt0E3MqP/m8ACS1ivcsi5uaqjbhsG18qKw==",
+ "dev": true,
+ "license": "MIT",
+ "dependencies": {
+ "@next/eslint-plugin-next": "15.3.1",
+ "@rushstack/eslint-patch": "^1.10.3",
+ "@typescript-eslint/eslint-plugin": "^5.4.2 || ^6.0.0 || ^7.0.0 || ^8.0.0",
+ "@typescript-eslint/parser": "^5.4.2 || ^6.0.0 || ^7.0.0 || ^8.0.0",
+ "eslint-import-resolver-node": "^0.3.6",
+ "eslint-import-resolver-typescript": "^3.5.2",
+ "eslint-plugin-import": "^2.31.0",
+ "eslint-plugin-jsx-a11y": "^6.10.0",
+ "eslint-plugin-react": "^7.37.0",
+ "eslint-plugin-react-hooks": "^5.0.0"
+ },
+ "peerDependencies": {
+ "eslint": "^7.23.0 || ^8.0.0 || ^9.0.0",
+ "typescript": ">=3.3.1"
+ },
+ "peerDependenciesMeta": {
+ "typescript": {
+ "optional": true
+ }
+ }
+ },
+ "node_modules/eslint-import-resolver-node": {
+ "version": "0.3.9",
+ "resolved": "https://registry.npmjs.org/eslint-import-resolver-node/-/eslint-import-resolver-node-0.3.9.tgz",
+ "integrity": "sha512-WFj2isz22JahUv+B788TlO3N6zL3nNJGU8CcZbPZvVEkBPaJdCV4vy5wyghty5ROFbCRnm132v8BScu5/1BQ8g==",
+ "dev": true,
+ "license": "MIT",
+ "dependencies": {
+ "debug": "^3.2.7",
+ "is-core-module": "^2.13.0",
+ "resolve": "^1.22.4"
+ }
+ },
+ "node_modules/eslint-import-resolver-node/node_modules/debug": {
+ "version": "3.2.7",
+ "resolved": "https://registry.npmjs.org/debug/-/debug-3.2.7.tgz",
+ "integrity": "sha512-CFjzYYAi4ThfiQvizrFQevTTXHtnCqWfe7x1AhgEscTz6ZbLbfoLRLPugTQyBth6f8ZERVUSyWHFD/7Wu4t1XQ==",
+ "dev": true,
+ "license": "MIT",
+ "dependencies": {
+ "ms": "^2.1.1"
+ }
+ },
+ "node_modules/eslint-import-resolver-typescript": {
+ "version": "3.10.1",
+ "resolved": "https://registry.npmjs.org/eslint-import-resolver-typescript/-/eslint-import-resolver-typescript-3.10.1.tgz",
+ "integrity": "sha512-A1rHYb06zjMGAxdLSkN2fXPBwuSaQ0iO5M/hdyS0Ajj1VBaRp0sPD3dn1FhME3c/JluGFbwSxyCfqdSbtQLAHQ==",
+ "dev": true,
+ "license": "ISC",
+ "dependencies": {
+ "@nolyfill/is-core-module": "1.0.39",
+ "debug": "^4.4.0",
+ "get-tsconfig": "^4.10.0",
+ "is-bun-module": "^2.0.0",
+ "stable-hash": "^0.0.5",
+ "tinyglobby": "^0.2.13",
+ "unrs-resolver": "^1.6.2"
+ },
+ "engines": {
+ "node": "^14.18.0 || >=16.0.0"
+ },
+ "funding": {
+ "url": "https://opencollective.com/eslint-import-resolver-typescript"
+ },
+ "peerDependencies": {
+ "eslint": "*",
+ "eslint-plugin-import": "*",
+ "eslint-plugin-import-x": "*"
+ },
+ "peerDependenciesMeta": {
+ "eslint-plugin-import": {
+ "optional": true
+ },
+ "eslint-plugin-import-x": {
+ "optional": true
+ }
+ }
+ },
+ "node_modules/eslint-import-resolver-typescript/node_modules/debug": {
+ "version": "4.4.0",
+ "resolved": "https://registry.npmjs.org/debug/-/debug-4.4.0.tgz",
+ "integrity": "sha512-6WTZ/IxCY/T6BALoZHaE4ctp9xm+Z5kY/pzYaCHRFeyVhojxlrm+46y68HA6hr0TcwEssoxNiDEUJQjfPZ/RYA==",
+ "dev": true,
+ "license": "MIT",
+ "dependencies": {
+ "ms": "^2.1.3"
+ },
+ "engines": {
+ "node": ">=6.0"
+ },
+ "peerDependenciesMeta": {
+ "supports-color": {
+ "optional": true
+ }
+ }
+ },
+ "node_modules/eslint-module-utils": {
+ "version": "2.12.0",
+ "resolved": "https://registry.npmjs.org/eslint-module-utils/-/eslint-module-utils-2.12.0.tgz",
+ "integrity": "sha512-wALZ0HFoytlyh/1+4wuZ9FJCD/leWHQzzrxJ8+rebyReSLk7LApMyd3WJaLVoN+D5+WIdJyDK1c6JnE65V4Zyg==",
+ "dev": true,
+ "license": "MIT",
+ "dependencies": {
+ "debug": "^3.2.7"
+ },
+ "engines": {
+ "node": ">=4"
+ },
+ "peerDependenciesMeta": {
+ "eslint": {
+ "optional": true
+ }
+ }
+ },
+ "node_modules/eslint-module-utils/node_modules/debug": {
+ "version": "3.2.7",
+ "resolved": "https://registry.npmjs.org/debug/-/debug-3.2.7.tgz",
+ "integrity": "sha512-CFjzYYAi4ThfiQvizrFQevTTXHtnCqWfe7x1AhgEscTz6ZbLbfoLRLPugTQyBth6f8ZERVUSyWHFD/7Wu4t1XQ==",
+ "dev": true,
+ "license": "MIT",
+ "dependencies": {
+ "ms": "^2.1.1"
+ }
+ },
+ "node_modules/eslint-plugin-import": {
+ "version": "2.31.0",
+ "resolved": "https://registry.npmjs.org/eslint-plugin-import/-/eslint-plugin-import-2.31.0.tgz",
+ "integrity": "sha512-ixmkI62Rbc2/w8Vfxyh1jQRTdRTF52VxwRVHl/ykPAmqG+Nb7/kNn+byLP0LxPgI7zWA16Jt82SybJInmMia3A==",
+ "dev": true,
+ "license": "MIT",
+ "dependencies": {
+ "@rtsao/scc": "^1.1.0",
+ "array-includes": "^3.1.8",
+ "array.prototype.findlastindex": "^1.2.5",
+ "array.prototype.flat": "^1.3.2",
+ "array.prototype.flatmap": "^1.3.2",
+ "debug": "^3.2.7",
+ "doctrine": "^2.1.0",
+ "eslint-import-resolver-node": "^0.3.9",
+ "eslint-module-utils": "^2.12.0",
+ "hasown": "^2.0.2",
+ "is-core-module": "^2.15.1",
+ "is-glob": "^4.0.3",
+ "minimatch": "^3.1.2",
+ "object.fromentries": "^2.0.8",
+ "object.groupby": "^1.0.3",
+ "object.values": "^1.2.0",
+ "semver": "^6.3.1",
+ "string.prototype.trimend": "^1.0.8",
+ "tsconfig-paths": "^3.15.0"
+ },
+ "engines": {
+ "node": ">=4"
+ },
+ "peerDependencies": {
+ "eslint": "^2 || ^3 || ^4 || ^5 || ^6 || ^7.2.0 || ^8 || ^9"
+ }
+ },
+ "node_modules/eslint-plugin-import/node_modules/debug": {
+ "version": "3.2.7",
+ "resolved": "https://registry.npmjs.org/debug/-/debug-3.2.7.tgz",
+ "integrity": "sha512-CFjzYYAi4ThfiQvizrFQevTTXHtnCqWfe7x1AhgEscTz6ZbLbfoLRLPugTQyBth6f8ZERVUSyWHFD/7Wu4t1XQ==",
+ "dev": true,
+ "license": "MIT",
+ "dependencies": {
+ "ms": "^2.1.1"
+ }
+ },
+ "node_modules/eslint-plugin-jsx-a11y": {
+ "version": "6.10.2",
+ "resolved": "https://registry.npmjs.org/eslint-plugin-jsx-a11y/-/eslint-plugin-jsx-a11y-6.10.2.tgz",
+ "integrity": "sha512-scB3nz4WmG75pV8+3eRUQOHZlNSUhFNq37xnpgRkCCELU3XMvXAxLk1eqWWyE22Ki4Q01Fnsw9BA3cJHDPgn2Q==",
+ "dev": true,
+ "license": "MIT",
+ "dependencies": {
+ "aria-query": "^5.3.2",
+ "array-includes": "^3.1.8",
+ "array.prototype.flatmap": "^1.3.2",
+ "ast-types-flow": "^0.0.8",
+ "axe-core": "^4.10.0",
+ "axobject-query": "^4.1.0",
+ "damerau-levenshtein": "^1.0.8",
+ "emoji-regex": "^9.2.2",
+ "hasown": "^2.0.2",
+ "jsx-ast-utils": "^3.3.5",
+ "language-tags": "^1.0.9",
+ "minimatch": "^3.1.2",
+ "object.fromentries": "^2.0.8",
+ "safe-regex-test": "^1.0.3",
+ "string.prototype.includes": "^2.0.1"
+ },
+ "engines": {
+ "node": ">=4.0"
+ },
+ "peerDependencies": {
+ "eslint": "^3 || ^4 || ^5 || ^6 || ^7 || ^8 || ^9"
+ }
+ },
+ "node_modules/eslint-plugin-jsx-a11y/node_modules/emoji-regex": {
+ "version": "9.2.2",
+ "resolved": "https://registry.npmjs.org/emoji-regex/-/emoji-regex-9.2.2.tgz",
+ "integrity": "sha512-L18DaJsXSUk2+42pv8mLs5jJT2hqFkFE4j21wOmgbUqsZ2hL72NsUU785g9RXgo3s0ZNgVl42TiHp3ZtOv/Vyg==",
+ "dev": true,
+ "license": "MIT"
+ },
+ "node_modules/eslint-plugin-react": {
+ "version": "7.37.5",
+ "resolved": "https://registry.npmjs.org/eslint-plugin-react/-/eslint-plugin-react-7.37.5.tgz",
+ "integrity": "sha512-Qteup0SqU15kdocexFNAJMvCJEfa2xUKNV4CC1xsVMrIIqEy3SQ/rqyxCWNzfrd3/ldy6HMlD2e0JDVpDg2qIA==",
+ "dev": true,
+ "license": "MIT",
+ "dependencies": {
+ "array-includes": "^3.1.8",
+ "array.prototype.findlast": "^1.2.5",
+ "array.prototype.flatmap": "^1.3.3",
+ "array.prototype.tosorted": "^1.1.4",
+ "doctrine": "^2.1.0",
+ "es-iterator-helpers": "^1.2.1",
+ "estraverse": "^5.3.0",
+ "hasown": "^2.0.2",
+ "jsx-ast-utils": "^2.4.1 || ^3.0.0",
+ "minimatch": "^3.1.2",
+ "object.entries": "^1.1.9",
+ "object.fromentries": "^2.0.8",
+ "object.values": "^1.2.1",
+ "prop-types": "^15.8.1",
+ "resolve": "^2.0.0-next.5",
+ "semver": "^6.3.1",
+ "string.prototype.matchall": "^4.0.12",
+ "string.prototype.repeat": "^1.0.0"
+ },
+ "engines": {
+ "node": ">=4"
+ },
+ "peerDependencies": {
+ "eslint": "^3 || ^4 || ^5 || ^6 || ^7 || ^8 || ^9.7"
+ }
+ },
+ "node_modules/eslint-plugin-react-hooks": {
+ "version": "5.2.0",
+ "resolved": "https://registry.npmjs.org/eslint-plugin-react-hooks/-/eslint-plugin-react-hooks-5.2.0.tgz",
+ "integrity": "sha512-+f15FfK64YQwZdJNELETdn5ibXEUQmW1DZL6KXhNnc2heoy/sg9VJJeT7n8TlMWouzWqSWavFkIhHyIbIAEapg==",
+ "dev": true,
+ "license": "MIT",
+ "engines": {
+ "node": ">=10"
+ },
+ "peerDependencies": {
+ "eslint": "^3.0.0 || ^4.0.0 || ^5.0.0 || ^6.0.0 || ^7.0.0 || ^8.0.0-0 || ^9.0.0"
+ }
+ },
+ "node_modules/eslint-plugin-react/node_modules/resolve": {
+ "version": "2.0.0-next.5",
+ "resolved": "https://registry.npmjs.org/resolve/-/resolve-2.0.0-next.5.tgz",
+ "integrity": "sha512-U7WjGVG9sH8tvjW5SmGbQuui75FiyjAX72HX15DwBBwF9dNiQZRQAg9nnPhYy+TUnE0+VcrttuvNI8oSxZcocA==",
+ "dev": true,
+ "license": "MIT",
+ "dependencies": {
+ "is-core-module": "^2.13.0",
+ "path-parse": "^1.0.7",
+ "supports-preserve-symlinks-flag": "^1.0.0"
+ },
+ "bin": {
+ "resolve": "bin/resolve"
+ },
+ "funding": {
+ "url": "https://github.com/sponsors/ljharb"
+ }
+ },
+ "node_modules/eslint-scope": {
+ "version": "8.3.0",
+ "resolved": "https://registry.npmjs.org/eslint-scope/-/eslint-scope-8.3.0.tgz",
+ "integrity": "sha512-pUNxi75F8MJ/GdeKtVLSbYg4ZI34J6C0C7sbL4YOp2exGwen7ZsuBqKzUhXd0qMQ362yET3z+uPwKeg/0C2XCQ==",
+ "dev": true,
+ "license": "BSD-2-Clause",
+ "dependencies": {
+ "esrecurse": "^4.3.0",
+ "estraverse": "^5.2.0"
+ },
+ "engines": {
+ "node": "^18.18.0 || ^20.9.0 || >=21.1.0"
+ },
+ "funding": {
+ "url": "https://opencollective.com/eslint"
+ }
+ },
+ "node_modules/eslint-visitor-keys": {
+ "version": "3.4.3",
+ "resolved": "https://registry.npmjs.org/eslint-visitor-keys/-/eslint-visitor-keys-3.4.3.tgz",
+ "integrity": "sha512-wpc+LXeiyiisxPlEkUzU6svyS1frIO3Mgxj1fdy7Pm8Ygzguax2N3Fa/D/ag1WqbOprdI+uY6wMUl8/a2G+iag==",
+ "dev": true,
+ "license": "Apache-2.0",
+ "engines": {
+ "node": "^12.22.0 || ^14.17.0 || >=16.0.0"
+ },
+ "funding": {
+ "url": "https://opencollective.com/eslint"
+ }
+ },
+ "node_modules/eslint/node_modules/chalk": {
+ "version": "4.1.2",
+ "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.2.tgz",
+ "integrity": "sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==",
+ "dev": true,
+ "license": "MIT",
+ "dependencies": {
+ "ansi-styles": "^4.1.0",
+ "supports-color": "^7.1.0"
+ },
+ "engines": {
+ "node": ">=10"
+ },
+ "funding": {
+ "url": "https://github.com/chalk/chalk?sponsor=1"
+ }
+ },
+ "node_modules/eslint/node_modules/escape-string-regexp": {
+ "version": "4.0.0",
+ "resolved": "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-4.0.0.tgz",
+ "integrity": "sha512-TtpcNJ3XAzx3Gq8sWRzJaVajRs0uVxA2YAkdb1jm2YkPz4G6egUFAyA3n5vtEIZefPk5Wa4UXbKuS5fKkJWdgA==",
+ "dev": true,
+ "license": "MIT",
+ "engines": {
+ "node": ">=10"
+ },
+ "funding": {
+ "url": "https://github.com/sponsors/sindresorhus"
+ }
+ },
+ "node_modules/eslint/node_modules/eslint-visitor-keys": {
+ "version": "4.2.0",
+ "resolved": "https://registry.npmjs.org/eslint-visitor-keys/-/eslint-visitor-keys-4.2.0.tgz",
+ "integrity": "sha512-UyLnSehNt62FFhSwjZlHmeokpRK59rcz29j+F1/aDgbkbRTk7wIc9XzdoasMUbRNKDM0qQt/+BJ4BrpFeABemw==",
+ "dev": true,
+ "license": "Apache-2.0",
+ "engines": {
+ "node": "^18.18.0 || ^20.9.0 || >=21.1.0"
+ },
+ "funding": {
+ "url": "https://opencollective.com/eslint"
+ }
+ },
+ "node_modules/eslint/node_modules/find-up": {
+ "version": "5.0.0",
+ "resolved": "https://registry.npmjs.org/find-up/-/find-up-5.0.0.tgz",
+ "integrity": "sha512-78/PXT1wlLLDgTzDs7sjq9hzz0vXD+zn+7wypEe4fXQxCmdmqfGsEPQxmiCSQI3ajFV91bVSsvNtrJRiW6nGng==",
+ "dev": true,
+ "license": "MIT",
+ "dependencies": {
+ "locate-path": "^6.0.0",
+ "path-exists": "^4.0.0"
+ },
+ "engines": {
+ "node": ">=10"
+ },
+ "funding": {
+ "url": "https://github.com/sponsors/sindresorhus"
+ }
+ },
+ "node_modules/eslint/node_modules/locate-path": {
+ "version": "6.0.0",
+ "resolved": "https://registry.npmjs.org/locate-path/-/locate-path-6.0.0.tgz",
+ "integrity": "sha512-iPZK6eYjbxRu3uB4/WZ3EsEIMJFMqAoopl3R+zuq0UjcAm/MO6KCweDgPfP3elTztoKP3KtnVHxTn2NHBSDVUw==",
+ "dev": true,
+ "license": "MIT",
+ "dependencies": {
+ "p-locate": "^5.0.0"
+ },
+ "engines": {
+ "node": ">=10"
+ },
+ "funding": {
+ "url": "https://github.com/sponsors/sindresorhus"
+ }
+ },
+ "node_modules/eslint/node_modules/p-limit": {
+ "version": "3.1.0",
+ "resolved": "https://registry.npmjs.org/p-limit/-/p-limit-3.1.0.tgz",
+ "integrity": "sha512-TYOanM3wGwNGsZN2cVTYPArw454xnXj5qmWF1bEoAc4+cU/ol7GVh7odevjp1FNHduHc3KZMcFduxU5Xc6uJRQ==",
+ "dev": true,
+ "license": "MIT",
+ "dependencies": {
+ "yocto-queue": "^0.1.0"
+ },
+ "engines": {
+ "node": ">=10"
+ },
+ "funding": {
+ "url": "https://github.com/sponsors/sindresorhus"
+ }
+ },
+ "node_modules/eslint/node_modules/p-locate": {
+ "version": "5.0.0",
+ "resolved": "https://registry.npmjs.org/p-locate/-/p-locate-5.0.0.tgz",
+ "integrity": "sha512-LaNjtRWUBY++zB5nE/NwcaoMylSPk+S+ZHNB1TzdbMJMny6dynpAGt7X/tl/QYq3TIeE6nxHppbo2LGymrG5Pw==",
+ "dev": true,
+ "license": "MIT",
+ "dependencies": {
+ "p-limit": "^3.0.2"
+ },
+ "engines": {
+ "node": ">=10"
+ },
+ "funding": {
+ "url": "https://github.com/sponsors/sindresorhus"
+ }
+ },
+ "node_modules/eslint/node_modules/yocto-queue": {
+ "version": "0.1.0",
+ "resolved": "https://registry.npmjs.org/yocto-queue/-/yocto-queue-0.1.0.tgz",
+ "integrity": "sha512-rVksvsnNCdJ/ohGc6xgPwyN8eheCxsiLM8mxuE/t/mOVqJewPuO1miLpTHQiRgTKCLexL4MeAFVagts7HmNZ2Q==",
+ "dev": true,
+ "license": "MIT",
+ "engines": {
+ "node": ">=10"
+ },
+ "funding": {
+ "url": "https://github.com/sponsors/sindresorhus"
+ }
+ },
+ "node_modules/esm-env": {
+ "version": "1.1.4",
+ "resolved": "https://registry.npmjs.org/esm-env/-/esm-env-1.1.4.tgz",
+ "integrity": "sha512-oO82nKPHKkzIj/hbtuDYy/JHqBHFlMIW36SDiPCVsj87ntDLcWN+sJ1erdVryd4NxODacFTsdrIE3b7IamqbOg==",
+ "license": "MIT",
+ "peer": true
+ },
+ "node_modules/espree": {
+ "version": "10.3.0",
+ "resolved": "https://registry.npmjs.org/espree/-/espree-10.3.0.tgz",
+ "integrity": "sha512-0QYC8b24HWY8zjRnDTL6RiHfDbAWn63qb4LMj1Z4b076A4une81+z03Kg7l7mn/48PUTqoLptSXez8oknU8Clg==",
+ "dev": true,
+ "license": "BSD-2-Clause",
+ "dependencies": {
+ "acorn": "^8.14.0",
+ "acorn-jsx": "^5.3.2",
+ "eslint-visitor-keys": "^4.2.0"
+ },
+ "engines": {
+ "node": "^18.18.0 || ^20.9.0 || >=21.1.0"
+ },
+ "funding": {
+ "url": "https://opencollective.com/eslint"
+ }
+ },
+ "node_modules/espree/node_modules/eslint-visitor-keys": {
+ "version": "4.2.0",
+ "resolved": "https://registry.npmjs.org/eslint-visitor-keys/-/eslint-visitor-keys-4.2.0.tgz",
+ "integrity": "sha512-UyLnSehNt62FFhSwjZlHmeokpRK59rcz29j+F1/aDgbkbRTk7wIc9XzdoasMUbRNKDM0qQt/+BJ4BrpFeABemw==",
+ "dev": true,
+ "license": "Apache-2.0",
+ "engines": {
+ "node": "^18.18.0 || ^20.9.0 || >=21.1.0"
+ },
+ "funding": {
+ "url": "https://opencollective.com/eslint"
+ }
+ },
+ "node_modules/esprima": {
+ "version": "4.0.1",
+ "resolved": "https://registry.npmjs.org/esprima/-/esprima-4.0.1.tgz",
+ "integrity": "sha512-eGuFFw7Upda+g4p+QHvnW0RyTX/SVeJBDM/gCtMARO0cLuT2HcEKnTPvhjV6aGeqrCB/sbNop0Kszm0jsaWU4A==",
+ "dev": true,
+ "license": "BSD-2-Clause",
+ "peer": true,
+ "bin": {
+ "esparse": "bin/esparse.js",
+ "esvalidate": "bin/esvalidate.js"
+ },
+ "engines": {
+ "node": ">=4"
+ }
+ },
+ "node_modules/esquery": {
+ "version": "1.6.0",
+ "resolved": "https://registry.npmjs.org/esquery/-/esquery-1.6.0.tgz",
+ "integrity": "sha512-ca9pw9fomFcKPvFLXhBKUK90ZvGibiGOvRJNbjljY7s7uq/5YO4BOzcYtJqExdx99rF6aAcnRxHmcUHcz6sQsg==",
+ "dev": true,
+ "license": "BSD-3-Clause",
+ "dependencies": {
+ "estraverse": "^5.1.0"
+ },
+ "engines": {
+ "node": ">=0.10"
+ }
+ },
+ "node_modules/esrap": {
+ "version": "1.2.2",
+ "resolved": "https://registry.npmjs.org/esrap/-/esrap-1.2.2.tgz",
+ "integrity": "sha512-F2pSJklxx1BlQIQgooczXCPHmcWpn6EsP5oo73LQfonG9fIlIENQ8vMmfGXeojP9MrkzUNAfyU5vdFlR9shHAw==",
+ "license": "MIT",
+ "peer": true,
+ "dependencies": {
+ "@jridgewell/sourcemap-codec": "^1.4.15",
+ "@types/estree": "^1.0.1"
+ }
+ },
+ "node_modules/esrecurse": {
+ "version": "4.3.0",
+ "resolved": "https://registry.npmjs.org/esrecurse/-/esrecurse-4.3.0.tgz",
+ "integrity": "sha512-KmfKL3b6G+RXvP8N1vr3Tq1kL/oCFgn2NYXEtqP8/L3pKapUA4G8cFVaoF3SU323CD4XypR/ffioHmkti6/Tag==",
+ "dev": true,
+ "license": "BSD-2-Clause",
+ "dependencies": {
+ "estraverse": "^5.2.0"
+ },
+ "engines": {
+ "node": ">=4.0"
+ }
+ },
+ "node_modules/estraverse": {
+ "version": "5.3.0",
+ "resolved": "https://registry.npmjs.org/estraverse/-/estraverse-5.3.0.tgz",
+ "integrity": "sha512-MMdARuVEQziNTeJD8DgMqmhwR11BRQ/cBP+pLtYdSTnf3MIO8fFeiINEbX36ZdNlfU/7A9f3gUw49B3oQsvwBA==",
+ "dev": true,
+ "license": "BSD-2-Clause",
+ "engines": {
+ "node": ">=4.0"
+ }
+ },
+ "node_modules/estree-walker": {
+ "version": "2.0.2",
+ "resolved": "https://registry.npmjs.org/estree-walker/-/estree-walker-2.0.2.tgz",
+ "integrity": "sha512-Rfkk/Mp/DL7JVje3u18FxFujQlTNR2q6QfMSMB7AvCBx91NGj/ba3kCfza0f6dVDbw7YlRf/nDrn7pQrCCyQ/w==",
+ "license": "MIT",
+ "peer": true
+ },
+ "node_modules/esutils": {
+ "version": "2.0.3",
+ "resolved": "https://registry.npmjs.org/esutils/-/esutils-2.0.3.tgz",
+ "integrity": "sha512-kVscqXk4OCp68SZ0dkgEKVi6/8ij300KBWTJq32P/dYeWTSwK41WyTxalN1eRmA5Z9UU/LX9D7FWSmV9SAYx6g==",
+ "dev": true,
+ "license": "BSD-2-Clause",
+ "engines": {
+ "node": ">=0.10.0"
+ }
+ },
+ "node_modules/event-target-shim": {
+ "version": "5.0.1",
+ "resolved": "https://registry.npmjs.org/event-target-shim/-/event-target-shim-5.0.1.tgz",
+ "integrity": "sha512-i/2XbnSz/uxRCU6+NdVJgKWDTM427+MqYbkQzD321DuCQJUqOuJKIA0IM2+W2xtYHdKOmZ4dR6fExsd4SXL+WQ==",
+ "license": "MIT",
+ "engines": {
+ "node": ">=6"
+ }
+ },
+ "node_modules/events": {
+ "version": "3.3.0",
+ "resolved": "https://registry.npmjs.org/events/-/events-3.3.0.tgz",
+ "integrity": "sha512-mQw+2fkQbALzQ7V0MY0IqdnXNOeTtP4r0lN9z7AAawCXgqea7bDii20AYrIBrFd/Hx0M2Ocz6S111CaFkUcb0Q==",
+ "license": "MIT",
+ "engines": {
+ "node": ">=0.8.x"
+ }
+ },
+ "node_modules/eventsource-parser": {
+ "version": "1.1.2",
+ "resolved": "https://registry.npmjs.org/eventsource-parser/-/eventsource-parser-1.1.2.tgz",
+ "integrity": "sha512-v0eOBUbiaFojBu2s2NPBfYUoRR9GjcDNvCXVaqEf5vVfpIAh9f8RCo4vXTP8c63QRKCFwoLpMpTdPwwhEKVgzA==",
+ "license": "MIT",
+ "engines": {
+ "node": ">=14.18"
+ }
+ },
+ "node_modules/execa": {
+ "version": "5.1.1",
+ "resolved": "https://registry.npmjs.org/execa/-/execa-5.1.1.tgz",
+ "integrity": "sha512-8uSpZZocAZRBAPIEINJj3Lo9HyGitllczc27Eh5YYojjMFMn8yHMDMaUHE2Jqfq05D/wucwI4JGURyXt1vchyg==",
+ "dev": true,
+ "license": "MIT",
+ "peer": true,
+ "dependencies": {
+ "cross-spawn": "^7.0.3",
+ "get-stream": "^6.0.0",
+ "human-signals": "^2.1.0",
+ "is-stream": "^2.0.0",
+ "merge-stream": "^2.0.0",
+ "npm-run-path": "^4.0.1",
+ "onetime": "^5.1.2",
+ "signal-exit": "^3.0.3",
+ "strip-final-newline": "^2.0.0"
+ },
+ "engines": {
+ "node": ">=10"
+ },
+ "funding": {
+ "url": "https://github.com/sindresorhus/execa?sponsor=1"
+ }
+ },
+ "node_modules/exit": {
+ "version": "0.1.2",
+ "resolved": "https://registry.npmjs.org/exit/-/exit-0.1.2.tgz",
+ "integrity": "sha512-Zk/eNKV2zbjpKzrsQ+n1G6poVbErQxJ0LBOJXaKZ1EViLzH+hrLu9cdXI4zw9dBQJslwBEpbQ2P1oS7nDxs6jQ==",
+ "dev": true,
+ "peer": true,
+ "engines": {
+ "node": ">= 0.8.0"
+ }
+ },
+ "node_modules/expand-template": {
+ "version": "2.0.3",
+ "resolved": "https://registry.npmjs.org/expand-template/-/expand-template-2.0.3.tgz",
+ "integrity": "sha512-XYfuKMvj4O35f/pOXLObndIRvyQ+/+6AhODh+OKWj9S9498pHHn/IMszH+gt0fBCRWMNfk1ZSp5x3AifmnI2vg==",
+ "license": "(MIT OR WTFPL)",
+ "engines": {
+ "node": ">=6"
+ }
+ },
+ "node_modules/expect": {
+ "version": "29.7.0",
+ "resolved": "https://registry.npmjs.org/expect/-/expect-29.7.0.tgz",
+ "integrity": "sha512-2Zks0hf1VLFYI1kbh0I5jP3KHHyCHpkfyHBzsSXRFgl/Bg9mWYfMW8oD+PdMPlEwy5HNsR9JutYy6pMeOh61nw==",
+ "dev": true,
+ "license": "MIT",
+ "dependencies": {
+ "@jest/expect-utils": "^29.7.0",
+ "jest-get-type": "^29.6.3",
+ "jest-matcher-utils": "^29.7.0",
+ "jest-message-util": "^29.7.0",
+ "jest-util": "^29.7.0"
+ },
+ "engines": {
+ "node": "^14.15.0 || ^16.10.0 || >=18.0.0"
+ }
+ },
+ "node_modules/extend": {
+ "version": "3.0.2",
+ "resolved": "https://registry.npmjs.org/extend/-/extend-3.0.2.tgz",
+ "integrity": "sha512-fjquC59cD7CyW6urNXK0FBufkZcoiGG80wTuPujX590cB5Ttln20E2UB4S/WARVqhXffZl2LNgS+gQdPIIim/g==",
+ "license": "MIT"
+ },
+ "node_modules/fast-deep-equal": {
+ "version": "3.1.3",
+ "resolved": "https://registry.npmjs.org/fast-deep-equal/-/fast-deep-equal-3.1.3.tgz",
+ "integrity": "sha512-f3qQ9oQy9j2AhBe/H9VC91wLmKBCCU/gDOnKNAYG5hswO7BLKj09Hc5HYNz9cGI++xlpDCIgDaitVs03ATR84Q==",
+ "dev": true,
+ "license": "MIT"
+ },
+ "node_modules/fast-glob": {
+ "version": "3.3.2",
+ "resolved": "https://registry.npmjs.org/fast-glob/-/fast-glob-3.3.2.tgz",
+ "integrity": "sha512-oX2ruAFQwf/Orj8m737Y5adxDQO0LAB7/S5MnxCdTNDd4p6BsyIVsv9JQsATbTSq8KHRpLwIHbVlUNatxd+1Ow==",
+ "dev": true,
+ "license": "MIT",
+ "dependencies": {
+ "@nodelib/fs.stat": "^2.0.2",
+ "@nodelib/fs.walk": "^1.2.3",
+ "glob-parent": "^5.1.2",
+ "merge2": "^1.3.0",
+ "micromatch": "^4.0.4"
+ },
+ "engines": {
+ "node": ">=8.6.0"
+ }
+ },
+ "node_modules/fast-glob/node_modules/glob-parent": {
+ "version": "5.1.2",
+ "resolved": "https://registry.npmjs.org/glob-parent/-/glob-parent-5.1.2.tgz",
+ "integrity": "sha512-AOIgSQCepiJYwP3ARnGx+5VnTu2HBYdzbGP45eLw1vr3zB3vZLeyed1sC9hnbcOc9/SrMyM5RPQrkGz4aS9Zow==",
+ "dev": true,
+ "license": "ISC",
+ "dependencies": {
+ "is-glob": "^4.0.1"
+ },
+ "engines": {
+ "node": ">= 6"
+ }
+ },
+ "node_modules/fast-json-stable-stringify": {
+ "version": "2.1.0",
+ "resolved": "https://registry.npmjs.org/fast-json-stable-stringify/-/fast-json-stable-stringify-2.1.0.tgz",
+ "integrity": "sha512-lhd/wF+Lk98HZoTCtlVraHtfh5XYijIjalXck7saUtuanSDyLMxnHhSXEDJqHxD7msR8D0uCmqlkwjCV8xvwHw==",
+ "dev": true,
+ "license": "MIT"
+ },
+ "node_modules/fast-levenshtein": {
+ "version": "2.0.6",
+ "resolved": "https://registry.npmjs.org/fast-levenshtein/-/fast-levenshtein-2.0.6.tgz",
+ "integrity": "sha512-DCXu6Ifhqcks7TZKY3Hxp3y6qphY5SJZmrWMDrKcERSOXWQdMhU9Ig/PYrzyw/ul9jOIyh0N4M0tbC5hodg8dw==",
+ "dev": true,
+ "license": "MIT"
+ },
+ "node_modules/fastq": {
+ "version": "1.17.1",
+ "resolved": "https://registry.npmjs.org/fastq/-/fastq-1.17.1.tgz",
+ "integrity": "sha512-sRVD3lWVIXWg6By68ZN7vho9a1pQcN/WBFaAAsDDFzlJjvoGx0P8z7V1t72grFJfJhu3YPZBuu25f7Kaw2jN1w==",
+ "dev": true,
+ "license": "ISC",
+ "dependencies": {
+ "reusify": "^1.0.4"
+ }
+ },
+ "node_modules/fault": {
+ "version": "1.0.4",
+ "resolved": "https://registry.npmjs.org/fault/-/fault-1.0.4.tgz",
+ "integrity": "sha512-CJ0HCB5tL5fYTEA7ToAq5+kTwd++Borf1/bifxd9iT70QcXr4MRrO3Llf8Ifs70q+SJcGHFtnIE/Nw6giCtECA==",
+ "license": "MIT",
+ "dependencies": {
+ "format": "^0.2.0"
+ },
+ "funding": {
+ "type": "github",
+ "url": "https://github.com/sponsors/wooorm"
+ }
+ },
+ "node_modules/fb-watchman": {
+ "version": "2.0.2",
+ "resolved": "https://registry.npmjs.org/fb-watchman/-/fb-watchman-2.0.2.tgz",
+ "integrity": "sha512-p5161BqbuCaSnB8jIbzQHOlpgsPmK5rJVDfDKO91Axs5NC1uu3HRQm6wt9cd9/+GtQQIO53JdGXXoyDpTAsgYA==",
+ "dev": true,
+ "license": "Apache-2.0",
+ "peer": true,
+ "dependencies": {
+ "bser": "2.1.1"
+ }
+ },
+ "node_modules/fetch-blob": {
+ "version": "3.2.0",
+ "resolved": "https://registry.npmjs.org/fetch-blob/-/fetch-blob-3.2.0.tgz",
+ "integrity": "sha512-7yAQpD2UMJzLi1Dqv7qFYnPbaPx7ZfFK6PiIxQ4PfkGPyNyl2Ugx+a/umUonmKqjhM4DnfbMvdX6otXq83soQQ==",
+ "funding": [
+ {
+ "type": "github",
+ "url": "https://github.com/sponsors/jimmywarting"
+ },
+ {
+ "type": "paypal",
+ "url": "https://paypal.me/jimmywarting"
+ }
+ ],
+ "license": "MIT",
+ "dependencies": {
+ "node-domexception": "^1.0.0",
+ "web-streams-polyfill": "^3.0.3"
+ },
+ "engines": {
+ "node": "^12.20 || >= 14.13"
+ }
+ },
+ "node_modules/fetch-blob/node_modules/web-streams-polyfill": {
+ "version": "3.3.3",
+ "resolved": "https://registry.npmjs.org/web-streams-polyfill/-/web-streams-polyfill-3.3.3.tgz",
+ "integrity": "sha512-d2JWLCivmZYTSIoge9MsgFCZrt571BikcWGYkjC1khllbTeDlGqZ2D8vD8E/lJa8WGWbb7Plm8/XJYV7IJHZZw==",
+ "license": "MIT",
+ "engines": {
+ "node": ">= 8"
+ }
+ },
+ "node_modules/file-entry-cache": {
+ "version": "8.0.0",
+ "resolved": "https://registry.npmjs.org/file-entry-cache/-/file-entry-cache-8.0.0.tgz",
+ "integrity": "sha512-XXTUwCvisa5oacNGRP9SfNtYBNAMi+RPwBFmblZEF7N7swHYQS6/Zfk7SRwx4D5j3CH211YNRco1DEMNVfZCnQ==",
+ "dev": true,
+ "license": "MIT",
+ "dependencies": {
+ "flat-cache": "^4.0.0"
+ },
+ "engines": {
+ "node": ">=16.0.0"
+ }
+ },
+ "node_modules/filelist": {
+ "version": "1.0.4",
+ "resolved": "https://registry.npmjs.org/filelist/-/filelist-1.0.4.tgz",
+ "integrity": "sha512-w1cEuf3S+DrLCQL7ET6kz+gmlJdbq9J7yXCSjK/OZCPA+qEN1WyF4ZAf0YYJa4/shHJra2t/d/r8SV4Ji+x+8Q==",
+ "dev": true,
+ "license": "Apache-2.0",
+ "dependencies": {
+ "minimatch": "^5.0.1"
+ }
+ },
+ "node_modules/filelist/node_modules/brace-expansion": {
+ "version": "2.0.1",
+ "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-2.0.1.tgz",
+ "integrity": "sha512-XnAIvQ8eM+kC6aULx6wuQiwVsnzsi9d3WxzV3FpWTGA19F621kwdbsAcFKXgKUHZWsy+mY6iL1sHTxWEFCytDA==",
+ "dev": true,
+ "license": "MIT",
+ "dependencies": {
+ "balanced-match": "^1.0.0"
+ }
+ },
+ "node_modules/filelist/node_modules/minimatch": {
+ "version": "5.1.6",
+ "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-5.1.6.tgz",
+ "integrity": "sha512-lKwV/1brpG6mBUFHtb7NUmtABCb2WZZmm2wNiOA5hAb8VdCS4B3dtMWyvcoViccwAW/COERjXLt0zP1zXUN26g==",
+ "dev": true,
+ "license": "ISC",
+ "dependencies": {
+ "brace-expansion": "^2.0.1"
+ },
+ "engines": {
+ "node": ">=10"
+ }
+ },
+ "node_modules/fill-range": {
+ "version": "7.1.1",
+ "resolved": "https://registry.npmjs.org/fill-range/-/fill-range-7.1.1.tgz",
+ "integrity": "sha512-YsGpe3WHLK8ZYi4tWDg2Jy3ebRz2rXowDxnld4bkQB00cc/1Zw9AWnC0i9ztDJitivtQvaI9KaLyKrc+hBW0yg==",
+ "dev": true,
+ "license": "MIT",
+ "dependencies": {
+ "to-regex-range": "^5.0.1"
+ },
+ "engines": {
+ "node": ">=8"
+ }
+ },
+ "node_modules/find-up": {
+ "version": "4.1.0",
+ "resolved": "https://registry.npmjs.org/find-up/-/find-up-4.1.0.tgz",
+ "integrity": "sha512-PpOwAdQ/YlXQ2vj8a3h8IipDuYRi3wceVQQGYWxNINccq40Anw7BlsEXCMbt1Zt+OLA6Fq9suIpIWD0OsnISlw==",
+ "dev": true,
+ "license": "MIT",
+ "peer": true,
+ "dependencies": {
+ "locate-path": "^5.0.0",
+ "path-exists": "^4.0.0"
+ },
+ "engines": {
+ "node": ">=8"
+ }
+ },
+ "node_modules/flat-cache": {
+ "version": "4.0.1",
+ "resolved": "https://registry.npmjs.org/flat-cache/-/flat-cache-4.0.1.tgz",
+ "integrity": "sha512-f7ccFPK3SXFHpx15UIGyRJ/FJQctuKZ0zVuN3frBo4HnK3cay9VEW0R6yPYFHC0AgqhukPzKjq22t5DmAyqGyw==",
+ "dev": true,
+ "license": "MIT",
+ "dependencies": {
+ "flatted": "^3.2.9",
+ "keyv": "^4.5.4"
+ },
+ "engines": {
+ "node": ">=16"
+ }
+ },
+ "node_modules/flatted": {
+ "version": "3.3.3",
+ "resolved": "https://registry.npmjs.org/flatted/-/flatted-3.3.3.tgz",
+ "integrity": "sha512-GX+ysw4PBCz0PzosHDepZGANEuFCMLrnRTiEy9McGjmkCQYwRq4A/X786G/fjM/+OjsWSU1ZrY5qyARZmO/uwg==",
+ "dev": true,
+ "license": "ISC"
+ },
+ "node_modules/follow-redirects": {
+ "version": "1.15.9",
+ "resolved": "https://registry.npmjs.org/follow-redirects/-/follow-redirects-1.15.9.tgz",
+ "integrity": "sha512-gew4GsXizNgdoRyqmyfMHyAmXsZDk6mHkSxZFCzW9gwlbtOW44CDtYavM+y+72qD/Vq2l550kMF52DT8fOLJqQ==",
+ "funding": [
+ {
+ "type": "individual",
+ "url": "https://github.com/sponsors/RubenVerborgh"
+ }
+ ],
+ "license": "MIT",
+ "engines": {
+ "node": ">=4.0"
+ },
+ "peerDependenciesMeta": {
+ "debug": {
+ "optional": true
+ }
+ }
+ },
+ "node_modules/for-each": {
+ "version": "0.3.5",
+ "resolved": "https://registry.npmjs.org/for-each/-/for-each-0.3.5.tgz",
+ "integrity": "sha512-dKx12eRCVIzqCxFGplyFKJMPvLEWgmNtUrpTiJIR5u97zEhRG8ySrtboPHZXx7daLxQVrl643cTzbab2tkQjxg==",
+ "dev": true,
+ "license": "MIT",
+ "dependencies": {
+ "is-callable": "^1.2.7"
+ },
+ "engines": {
+ "node": ">= 0.4"
+ },
+ "funding": {
+ "url": "https://github.com/sponsors/ljharb"
+ }
+ },
+ "node_modules/foreground-child": {
+ "version": "3.3.0",
+ "resolved": "https://registry.npmjs.org/foreground-child/-/foreground-child-3.3.0.tgz",
+ "integrity": "sha512-Ld2g8rrAyMYFXBhEqMz8ZAHBi4J4uS1i/CxGMDnjyFWddMXLVcDp051DZfu+t7+ab7Wv6SMqpWmyFIj5UbfFvg==",
+ "dev": true,
+ "license": "ISC",
+ "dependencies": {
+ "cross-spawn": "^7.0.0",
+ "signal-exit": "^4.0.1"
+ },
+ "engines": {
+ "node": ">=14"
+ },
+ "funding": {
+ "url": "https://github.com/sponsors/isaacs"
+ }
+ },
+ "node_modules/foreground-child/node_modules/signal-exit": {
+ "version": "4.1.0",
+ "resolved": "https://registry.npmjs.org/signal-exit/-/signal-exit-4.1.0.tgz",
+ "integrity": "sha512-bzyZ1e88w9O1iNJbKnOlvYTrWPDl46O1bG0D3XInv+9tkPrxrN8jUUTiFlDkkmKWgn1M6CfIA13SuGqOa9Korw==",
+ "dev": true,
+ "license": "ISC",
+ "engines": {
+ "node": ">=14"
+ },
+ "funding": {
+ "url": "https://github.com/sponsors/isaacs"
+ }
+ },
+ "node_modules/form-data": {
+ "version": "4.0.1",
+ "resolved": "https://registry.npmjs.org/form-data/-/form-data-4.0.1.tgz",
+ "integrity": "sha512-tzN8e4TX8+kkxGPK8D5u0FNmjPUjw3lwC9lSLxxoB/+GtsJG91CO8bSWy73APlgAZzZbXEYZJuxjkHH2w+Ezhw==",
+ "license": "MIT",
+ "dependencies": {
+ "asynckit": "^0.4.0",
+ "combined-stream": "^1.0.8",
+ "mime-types": "^2.1.12"
+ },
+ "engines": {
+ "node": ">= 6"
+ }
+ },
+ "node_modules/form-data-encoder": {
+ "version": "1.7.2",
+ "resolved": "https://registry.npmjs.org/form-data-encoder/-/form-data-encoder-1.7.2.tgz",
+ "integrity": "sha512-qfqtYan3rxrnCk1VYaA4H+Ms9xdpPqvLZa6xmMgFvhO32x7/3J/ExcTd6qpxM0vH2GdMI+poehyBZvqfMTto8A==",
+ "license": "MIT"
+ },
+ "node_modules/format": {
+ "version": "0.2.2",
+ "resolved": "https://registry.npmjs.org/format/-/format-0.2.2.tgz",
+ "integrity": "sha512-wzsgA6WOq+09wrU1tsJ09udeR/YZRaeArL9e1wPbFg3GG2yDnC2ldKpxs4xunpFF9DgqCqOIra3bc1HWrJ37Ww==",
+ "engines": {
+ "node": ">=0.4.x"
+ }
+ },
+ "node_modules/formdata-node": {
+ "version": "4.4.1",
+ "resolved": "https://registry.npmjs.org/formdata-node/-/formdata-node-4.4.1.tgz",
+ "integrity": "sha512-0iirZp3uVDjVGt9p49aTaqjk84TrglENEDuqfdlZQ1roC9CWlPk6Avf8EEnZNcAqPonwkG35x4n3ww/1THYAeQ==",
+ "license": "MIT",
+ "dependencies": {
+ "node-domexception": "1.0.0",
+ "web-streams-polyfill": "4.0.0-beta.3"
+ },
+ "engines": {
+ "node": ">= 12.20"
+ }
+ },
+ "node_modules/formdata-polyfill": {
+ "version": "4.0.10",
+ "resolved": "https://registry.npmjs.org/formdata-polyfill/-/formdata-polyfill-4.0.10.tgz",
+ "integrity": "sha512-buewHzMvYL29jdeQTVILecSaZKnt/RJWjoZCF5OW60Z67/GmSLBkOFM7qh1PI3zFNtJbaZL5eQu1vLfazOwj4g==",
+ "license": "MIT",
+ "dependencies": {
+ "fetch-blob": "^3.1.2"
+ },
+ "engines": {
+ "node": ">=12.20.0"
+ }
+ },
+ "node_modules/fraction.js": {
+ "version": "4.3.7",
+ "resolved": "https://registry.npmjs.org/fraction.js/-/fraction.js-4.3.7.tgz",
+ "integrity": "sha512-ZsDfxO51wGAXREY55a7la9LScWpwv9RxIrYABrlvOFBlH/ShPnrtsXeuUIfXKKOVicNxQ+o8JTbJvjS4M89yew==",
+ "dev": true,
+ "license": "MIT",
+ "engines": {
+ "node": "*"
+ },
+ "funding": {
+ "type": "patreon",
+ "url": "https://github.com/sponsors/rawify"
+ }
+ },
+ "node_modules/framer-motion": {
+ "version": "11.18.2",
+ "resolved": "https://registry.npmjs.org/framer-motion/-/framer-motion-11.18.2.tgz",
+ "integrity": "sha512-5F5Och7wrvtLVElIpclDT0CBzMVg3dL22B64aZwHtsIY8RB4mXICLrkajK4G9R+ieSAGcgrLeae2SeUTg2pr6w==",
+ "license": "MIT",
+ "dependencies": {
+ "motion-dom": "^11.18.1",
+ "motion-utils": "^11.18.1",
+ "tslib": "^2.4.0"
+ },
+ "peerDependencies": {
+ "@emotion/is-prop-valid": "*",
+ "react": "^18.0.0 || ^19.0.0",
+ "react-dom": "^18.0.0 || ^19.0.0"
+ },
+ "peerDependenciesMeta": {
+ "@emotion/is-prop-valid": {
+ "optional": true
+ },
+ "react": {
+ "optional": true
+ },
+ "react-dom": {
+ "optional": true
+ }
+ }
+ },
+ "node_modules/fs-constants": {
+ "version": "1.0.0",
+ "resolved": "https://registry.npmjs.org/fs-constants/-/fs-constants-1.0.0.tgz",
+ "integrity": "sha512-y6OAwoSIf7FyjMIv94u+b5rdheZEjzR63GTyZJm5qh4Bi+2YgwLCcI/fPFZkL5PSixOt6ZNKm+w+Hfp/Bciwow==",
+ "license": "MIT"
+ },
+ "node_modules/fs.realpath": {
+ "version": "1.0.0",
+ "resolved": "https://registry.npmjs.org/fs.realpath/-/fs.realpath-1.0.0.tgz",
+ "integrity": "sha512-OO0pH2lK6a0hZnAdau5ItzHPI6pUlvI7jMVnxUQRtw4owF2wk8lOSabtGDCTP4Ggrg2MbGnWO9X8K1t4+fGMDw==",
+ "dev": true,
+ "license": "ISC",
+ "peer": true
+ },
+ "node_modules/fsevents": {
+ "version": "2.3.3",
+ "resolved": "https://registry.npmjs.org/fsevents/-/fsevents-2.3.3.tgz",
+ "integrity": "sha512-5xoDfX+fL7faATnagmWPpbFtwh/R77WmMMqqHGS65C3vvB0YHrgF+B1YmZ3441tMj5n63k0212XNoJwzlhffQw==",
+ "dev": true,
+ "hasInstallScript": true,
+ "license": "MIT",
+ "optional": true,
+ "os": [
+ "darwin"
+ ],
+ "engines": {
+ "node": "^8.16.0 || ^10.6.0 || >=11.0.0"
+ }
+ },
+ "node_modules/function-bind": {
+ "version": "1.1.2",
+ "resolved": "https://registry.npmjs.org/function-bind/-/function-bind-1.1.2.tgz",
+ "integrity": "sha512-7XHNxH7qX9xG5mIwxkhumTox/MIRNcOgDrxWsMt2pAr23WHp6MrRlN7FBSFpCpr+oVO0F744iUgR82nJMfG2SA==",
+ "license": "MIT",
+ "funding": {
+ "url": "https://github.com/sponsors/ljharb"
+ }
+ },
+ "node_modules/function.prototype.name": {
+ "version": "1.1.8",
+ "resolved": "https://registry.npmjs.org/function.prototype.name/-/function.prototype.name-1.1.8.tgz",
+ "integrity": "sha512-e5iwyodOHhbMr/yNrc7fDYG4qlbIvI5gajyzPnb5TCwyhjApznQh1BMFou9b30SevY43gCJKXycoCBjMbsuW0Q==",
+ "dev": true,
+ "license": "MIT",
+ "dependencies": {
+ "call-bind": "^1.0.8",
+ "call-bound": "^1.0.3",
+ "define-properties": "^1.2.1",
+ "functions-have-names": "^1.2.3",
+ "hasown": "^2.0.2",
+ "is-callable": "^1.2.7"
+ },
+ "engines": {
+ "node": ">= 0.4"
+ },
+ "funding": {
+ "url": "https://github.com/sponsors/ljharb"
+ }
+ },
+ "node_modules/functions-have-names": {
+ "version": "1.2.3",
+ "resolved": "https://registry.npmjs.org/functions-have-names/-/functions-have-names-1.2.3.tgz",
+ "integrity": "sha512-xckBUXyTIqT97tq2x2AMb+g163b5JFysYk0x4qxNFwbfQkmNZoiRHb6sPzI9/QV33WeuvVYBUIiD4NzNIyqaRQ==",
+ "dev": true,
+ "license": "MIT",
+ "funding": {
+ "url": "https://github.com/sponsors/ljharb"
+ }
+ },
+ "node_modules/gaxios": {
+ "version": "6.7.1",
+ "resolved": "https://registry.npmjs.org/gaxios/-/gaxios-6.7.1.tgz",
+ "integrity": "sha512-LDODD4TMYx7XXdpwxAVRAIAuB0bzv0s+ywFonY46k126qzQHT9ygyoa9tncmOiQmmDrik65UYsEkv3lbfqQ3yQ==",
+ "license": "Apache-2.0",
+ "dependencies": {
+ "extend": "^3.0.2",
+ "https-proxy-agent": "^7.0.1",
+ "is-stream": "^2.0.0",
+ "node-fetch": "^2.6.9",
+ "uuid": "^9.0.1"
+ },
+ "engines": {
+ "node": ">=14"
+ }
+ },
+ "node_modules/gaxios/node_modules/node-fetch": {
+ "version": "2.7.0",
+ "resolved": "https://registry.npmjs.org/node-fetch/-/node-fetch-2.7.0.tgz",
+ "integrity": "sha512-c4FRfUm/dbcWZ7U+1Wq0AwCyFL+3nt2bEw05wfxSz+DWpWsitgmSgYmy2dQdWyKC1694ELPqMs/YzUSNozLt8A==",
+ "license": "MIT",
+ "dependencies": {
+ "whatwg-url": "^5.0.0"
+ },
+ "engines": {
+ "node": "4.x || >=6.0.0"
+ },
+ "peerDependencies": {
+ "encoding": "^0.1.0"
+ },
+ "peerDependenciesMeta": {
+ "encoding": {
+ "optional": true
+ }
+ }
+ },
+ "node_modules/gaxios/node_modules/uuid": {
+ "version": "9.0.1",
+ "resolved": "https://registry.npmjs.org/uuid/-/uuid-9.0.1.tgz",
+ "integrity": "sha512-b+1eJOlsR9K8HJpow9Ok3fiWOWSIcIzXodvv0rQjVoOVNpWMpxf1wZNpt4y9h10odCNrqnYp1OBzRktckBe3sA==",
+ "funding": [
+ "https://github.com/sponsors/broofa",
+ "https://github.com/sponsors/ctavan"
+ ],
+ "license": "MIT",
+ "bin": {
+ "uuid": "dist/bin/uuid"
+ }
+ },
+ "node_modules/gcp-metadata": {
+ "version": "6.1.0",
+ "resolved": "https://registry.npmjs.org/gcp-metadata/-/gcp-metadata-6.1.0.tgz",
+ "integrity": "sha512-Jh/AIwwgaxan+7ZUUmRLCjtchyDiqh4KjBJ5tW3plBZb5iL/BPcso8A5DlzeD9qlw0duCamnNdpFjxwaT0KyKg==",
+ "license": "Apache-2.0",
+ "dependencies": {
+ "gaxios": "^6.0.0",
+ "json-bigint": "^1.0.0"
+ },
+ "engines": {
+ "node": ">=14"
+ }
+ },
+ "node_modules/geist": {
+ "version": "1.3.1",
+ "resolved": "https://registry.npmjs.org/geist/-/geist-1.3.1.tgz",
+ "integrity": "sha512-Q4gC1pBVPN+D579pBaz0TRRnGA4p9UK6elDY/xizXdFk/g4EKR5g0I+4p/Kj6gM0SajDBZ/0FvDV9ey9ud7BWw==",
+ "license": "SIL OPEN FONT LICENSE",
+ "peerDependencies": {
+ "next": ">=13.2.0"
+ }
+ },
+ "node_modules/gensync": {
+ "version": "1.0.0-beta.2",
+ "resolved": "https://registry.npmjs.org/gensync/-/gensync-1.0.0-beta.2.tgz",
+ "integrity": "sha512-3hN7NaskYvMDLQY55gnW3NQ+mesEAepTqlg+VEbj7zzqEMBVNhzcGYYeqFo/TlYz6eQiFcp1HcsCZO+nGgS8zg==",
+ "dev": true,
+ "license": "MIT",
+ "peer": true,
+ "engines": {
+ "node": ">=6.9.0"
+ }
+ },
+ "node_modules/geolib": {
+ "version": "3.3.4",
+ "resolved": "https://registry.npmjs.org/geolib/-/geolib-3.3.4.tgz",
+ "integrity": "sha512-EicrlLLL3S42gE9/wde+11uiaYAaeSVDwCUIv2uMIoRBfNJCn8EsSI+6nS3r4TCKDO6+RQNM9ayLq2at+oZQWQ==",
+ "license": "MIT"
+ },
+ "node_modules/get-caller-file": {
+ "version": "2.0.5",
+ "resolved": "https://registry.npmjs.org/get-caller-file/-/get-caller-file-2.0.5.tgz",
+ "integrity": "sha512-DyFP3BM/3YHTQOCUL/w0OZHR0lpKeGrxotcHWcqNEdnltqFwXVfhEBQ94eIo34AfQpo0rGki4cyIiftY06h2Fg==",
+ "dev": true,
+ "license": "ISC",
+ "peer": true,
+ "engines": {
+ "node": "6.* || 8.* || >= 10.*"
+ }
+ },
+ "node_modules/get-east-asian-width": {
+ "version": "1.3.0",
+ "resolved": "https://registry.npmjs.org/get-east-asian-width/-/get-east-asian-width-1.3.0.tgz",
+ "integrity": "sha512-vpeMIQKxczTD/0s2CdEWHcb0eeJe6TFjxb+J5xgX7hScxqrGuyjmv4c1D4A/gelKfyox0gJJwIHF+fLjeaM8kQ==",
+ "license": "MIT",
+ "engines": {
+ "node": ">=18"
+ },
+ "funding": {
+ "url": "https://github.com/sponsors/sindresorhus"
+ }
+ },
+ "node_modules/get-intrinsic": {
+ "version": "1.3.0",
+ "resolved": "https://registry.npmjs.org/get-intrinsic/-/get-intrinsic-1.3.0.tgz",
+ "integrity": "sha512-9fSjSaos/fRIVIp+xSJlE6lfwhES7LNtKaCBIamHsjr2na1BiABJPo0mOjjz8GJDURarmCPGqaiVg5mfjb98CQ==",
+ "license": "MIT",
+ "dependencies": {
+ "call-bind-apply-helpers": "^1.0.2",
+ "es-define-property": "^1.0.1",
+ "es-errors": "^1.3.0",
+ "es-object-atoms": "^1.1.1",
+ "function-bind": "^1.1.2",
+ "get-proto": "^1.0.1",
+ "gopd": "^1.2.0",
+ "has-symbols": "^1.1.0",
+ "hasown": "^2.0.2",
+ "math-intrinsics": "^1.1.0"
+ },
+ "engines": {
+ "node": ">= 0.4"
+ },
+ "funding": {
+ "url": "https://github.com/sponsors/ljharb"
+ }
+ },
+ "node_modules/get-nonce": {
+ "version": "1.0.1",
+ "resolved": "https://registry.npmjs.org/get-nonce/-/get-nonce-1.0.1.tgz",
+ "integrity": "sha512-FJhYRoDaiatfEkUK8HKlicmu/3SGFD51q3itKDGoSTysQJBnfOcxU5GxnhE1E6soB76MbT0MBtnKJuXyAx+96Q==",
+ "license": "MIT",
+ "engines": {
+ "node": ">=6"
+ }
+ },
+ "node_modules/get-package-type": {
+ "version": "0.1.0",
+ "resolved": "https://registry.npmjs.org/get-package-type/-/get-package-type-0.1.0.tgz",
+ "integrity": "sha512-pjzuKtY64GYfWizNAJ0fr9VqttZkNiK2iS430LtIHzjBEr6bX8Am2zm4sW4Ro5wjWW5cAlRL1qAMTcXbjNAO2Q==",
+ "dev": true,
+ "license": "MIT",
+ "peer": true,
+ "engines": {
+ "node": ">=8.0.0"
+ }
+ },
+ "node_modules/get-proto": {
+ "version": "1.0.1",
+ "resolved": "https://registry.npmjs.org/get-proto/-/get-proto-1.0.1.tgz",
+ "integrity": "sha512-sTSfBjoXBp89JvIKIefqw7U2CCebsc74kiY6awiGogKtoSGbgjYE/G/+l9sF3MWFPNc9IcoOC4ODfKHfxFmp0g==",
+ "license": "MIT",
+ "dependencies": {
+ "dunder-proto": "^1.0.1",
+ "es-object-atoms": "^1.0.0"
+ },
+ "engines": {
+ "node": ">= 0.4"
+ }
+ },
+ "node_modules/get-stream": {
+ "version": "6.0.1",
+ "resolved": "https://registry.npmjs.org/get-stream/-/get-stream-6.0.1.tgz",
+ "integrity": "sha512-ts6Wi+2j3jQjqi70w5AlN8DFnkSwC+MqmxEzdEALB2qXZYV3X/b1CTfgPLGJNMeAWxdPfU8FO1ms3NUfaHCPYg==",
+ "dev": true,
+ "license": "MIT",
+ "peer": true,
+ "engines": {
+ "node": ">=10"
+ },
+ "funding": {
+ "url": "https://github.com/sponsors/sindresorhus"
+ }
+ },
+ "node_modules/get-symbol-description": {
+ "version": "1.1.0",
+ "resolved": "https://registry.npmjs.org/get-symbol-description/-/get-symbol-description-1.1.0.tgz",
+ "integrity": "sha512-w9UMqWwJxHNOvoNzSJ2oPF5wvYcvP7jUvYzhp67yEhTi17ZDBBC1z9pTdGuzjD+EFIqLSYRweZjqfiPzQ06Ebg==",
+ "dev": true,
+ "license": "MIT",
+ "dependencies": {
+ "call-bound": "^1.0.3",
+ "es-errors": "^1.3.0",
+ "get-intrinsic": "^1.2.6"
+ },
+ "engines": {
+ "node": ">= 0.4"
+ },
+ "funding": {
+ "url": "https://github.com/sponsors/ljharb"
+ }
+ },
+ "node_modules/get-tsconfig": {
+ "version": "4.10.0",
+ "resolved": "https://registry.npmjs.org/get-tsconfig/-/get-tsconfig-4.10.0.tgz",
+ "integrity": "sha512-kGzZ3LWWQcGIAmg6iWvXn0ei6WDtV26wzHRMwDSzmAbcXrTEXxHy6IehI6/4eT6VRKyMP1eF1VqwrVUmE/LR7A==",
+ "dev": true,
+ "license": "MIT",
+ "dependencies": {
+ "resolve-pkg-maps": "^1.0.0"
+ },
+ "funding": {
+ "url": "https://github.com/privatenumber/get-tsconfig?sponsor=1"
+ }
+ },
+ "node_modules/github-from-package": {
+ "version": "0.0.0",
+ "resolved": "https://registry.npmjs.org/github-from-package/-/github-from-package-0.0.0.tgz",
+ "integrity": "sha512-SyHy3T1v2NUXn29OsWdxmK6RwHD+vkj3v8en8AOBZ1wBQ/hCAQ5bAQTD02kW4W9tUp/3Qh6J8r9EvntiyCmOOw==",
+ "license": "MIT"
+ },
+ "node_modules/glob": {
+ "version": "7.2.3",
+ "resolved": "https://registry.npmjs.org/glob/-/glob-7.2.3.tgz",
+ "integrity": "sha512-nFR0zLpU2YCaRxwoCJvL6UvCH2JFyFVIvwTLsIf21AuHlMskA1hhTdk+LlYJtOlYt9v6dvszD2BGRqBL+iQK9Q==",
+ "deprecated": "Glob versions prior to v9 are no longer supported",
+ "dev": true,
+ "license": "ISC",
+ "peer": true,
+ "dependencies": {
+ "fs.realpath": "^1.0.0",
+ "inflight": "^1.0.4",
+ "inherits": "2",
+ "minimatch": "^3.1.1",
+ "once": "^1.3.0",
+ "path-is-absolute": "^1.0.0"
+ },
+ "engines": {
+ "node": "*"
+ },
+ "funding": {
+ "url": "https://github.com/sponsors/isaacs"
+ }
+ },
+ "node_modules/glob-parent": {
+ "version": "6.0.2",
+ "resolved": "https://registry.npmjs.org/glob-parent/-/glob-parent-6.0.2.tgz",
+ "integrity": "sha512-XxwI8EOhVQgWp6iDL+3b0r86f4d6AX6zSU55HfB4ydCEuXLXc5FcYeOu+nnGftS4TEju/11rt4KJPTMgbfmv4A==",
+ "dev": true,
+ "license": "ISC",
+ "dependencies": {
+ "is-glob": "^4.0.3"
+ },
+ "engines": {
+ "node": ">=10.13.0"
+ }
+ },
+ "node_modules/globals": {
+ "version": "16.0.0",
+ "resolved": "https://registry.npmjs.org/globals/-/globals-16.0.0.tgz",
+ "integrity": "sha512-iInW14XItCXET01CQFqudPOWP2jYMl7T+QRQT+UNcR/iQncN/F0UNpgd76iFkBPgNQb4+X3LV9tLJYzwh+Gl3A==",
+ "dev": true,
+ "license": "MIT",
+ "engines": {
+ "node": ">=18"
+ },
+ "funding": {
+ "url": "https://github.com/sponsors/sindresorhus"
+ }
+ },
+ "node_modules/globalthis": {
+ "version": "1.0.4",
+ "resolved": "https://registry.npmjs.org/globalthis/-/globalthis-1.0.4.tgz",
+ "integrity": "sha512-DpLKbNU4WylpxJykQujfCcwYWiV/Jhm50Goo0wrVILAv5jOr9d+H+UR3PhSCD2rCCEIg0uc+G+muBTwD54JhDQ==",
+ "dev": true,
+ "license": "MIT",
+ "dependencies": {
+ "define-properties": "^1.2.1",
+ "gopd": "^1.0.1"
+ },
+ "engines": {
+ "node": ">= 0.4"
+ },
+ "funding": {
+ "url": "https://github.com/sponsors/ljharb"
+ }
+ },
+ "node_modules/google-auth-library": {
+ "version": "9.15.1",
+ "resolved": "https://registry.npmjs.org/google-auth-library/-/google-auth-library-9.15.1.tgz",
+ "integrity": "sha512-Jb6Z0+nvECVz+2lzSMt9u98UsoakXxA2HGHMCxh+so3n90XgYWkq5dur19JAJV7ONiJY22yBTyJB1TSkvPq9Ng==",
+ "license": "Apache-2.0",
+ "dependencies": {
+ "base64-js": "^1.3.0",
+ "ecdsa-sig-formatter": "^1.0.11",
+ "gaxios": "^6.1.1",
+ "gcp-metadata": "^6.1.0",
+ "gtoken": "^7.0.0",
+ "jws": "^4.0.0"
+ },
+ "engines": {
+ "node": ">=14"
+ }
+ },
+ "node_modules/googleapis": {
+ "version": "144.0.0",
+ "resolved": "https://registry.npmjs.org/googleapis/-/googleapis-144.0.0.tgz",
+ "integrity": "sha512-ELcWOXtJxjPX4vsKMh+7V+jZvgPwYMlEhQFiu2sa9Qmt5veX8nwXPksOWGGN6Zk4xCiLygUyaz7xGtcMO+Onxw==",
+ "license": "Apache-2.0",
+ "dependencies": {
+ "google-auth-library": "^9.0.0",
+ "googleapis-common": "^7.0.0"
+ },
+ "engines": {
+ "node": ">=14.0.0"
+ }
+ },
+ "node_modules/googleapis-common": {
+ "version": "7.2.0",
+ "resolved": "https://registry.npmjs.org/googleapis-common/-/googleapis-common-7.2.0.tgz",
+ "integrity": "sha512-/fhDZEJZvOV3X5jmD+fKxMqma5q2Q9nZNSF3kn1F18tpxmA86BcTxAGBQdM0N89Z3bEaIs+HVznSmFJEAmMTjA==",
+ "license": "Apache-2.0",
+ "dependencies": {
+ "extend": "^3.0.2",
+ "gaxios": "^6.0.3",
+ "google-auth-library": "^9.7.0",
+ "qs": "^6.7.0",
+ "url-template": "^2.0.8",
+ "uuid": "^9.0.0"
+ },
+ "engines": {
+ "node": ">=14.0.0"
+ }
+ },
+ "node_modules/googleapis-common/node_modules/uuid": {
+ "version": "9.0.1",
+ "resolved": "https://registry.npmjs.org/uuid/-/uuid-9.0.1.tgz",
+ "integrity": "sha512-b+1eJOlsR9K8HJpow9Ok3fiWOWSIcIzXodvv0rQjVoOVNpWMpxf1wZNpt4y9h10odCNrqnYp1OBzRktckBe3sA==",
+ "funding": [
+ "https://github.com/sponsors/broofa",
+ "https://github.com/sponsors/ctavan"
+ ],
+ "license": "MIT",
+ "bin": {
+ "uuid": "dist/bin/uuid"
+ }
+ },
+ "node_modules/gopd": {
+ "version": "1.2.0",
+ "resolved": "https://registry.npmjs.org/gopd/-/gopd-1.2.0.tgz",
+ "integrity": "sha512-ZUKRh6/kUFoAiTAtTYPZJ3hw9wNxx+BIBOijnlG9PnrJsCcSjs1wyyD6vJpaYtgnzDrKYRSqf3OO6Rfa93xsRg==",
+ "license": "MIT",
+ "engines": {
+ "node": ">= 0.4"
+ },
+ "funding": {
+ "url": "https://github.com/sponsors/ljharb"
+ }
+ },
+ "node_modules/gpt-tokenizer": {
+ "version": "2.9.0",
+ "resolved": "https://registry.npmjs.org/gpt-tokenizer/-/gpt-tokenizer-2.9.0.tgz",
+ "integrity": "sha512-YSpexBL/k4bfliAzMrRqn3M6+it02LutVyhVpDeMKrC/O9+pCe/5s8U2hYKa2vFLD5/vHhsKc8sOn/qGqII8Kg==",
+ "license": "MIT"
+ },
+ "node_modules/graceful-fs": {
+ "version": "4.2.11",
+ "resolved": "https://registry.npmjs.org/graceful-fs/-/graceful-fs-4.2.11.tgz",
+ "integrity": "sha512-RbJ5/jmFcNNCcDV5o9eTnBLJ/HszWV0P73bc+Ff4nS/rJj+YaS6IGyiOL0VoBYX+l1Wrl3k63h/KrH+nhJ0XvQ==",
+ "license": "ISC"
+ },
+ "node_modules/graphemer": {
+ "version": "1.4.0",
+ "resolved": "https://registry.npmjs.org/graphemer/-/graphemer-1.4.0.tgz",
+ "integrity": "sha512-EtKwoO6kxCL9WO5xipiHTZlSzBm7WLT627TqC/uVRd0HKmq8NXyebnNYxDoBi7wt8eTWrUrKXCOVaFq9x1kgag==",
+ "dev": true,
+ "license": "MIT"
+ },
+ "node_modules/gtoken": {
+ "version": "7.1.0",
+ "resolved": "https://registry.npmjs.org/gtoken/-/gtoken-7.1.0.tgz",
+ "integrity": "sha512-pCcEwRi+TKpMlxAQObHDQ56KawURgyAf6jtIY046fJ5tIv3zDe/LEIubckAO8fj6JnAxLdmWkUfNyulQ2iKdEw==",
+ "license": "MIT",
+ "dependencies": {
+ "gaxios": "^6.0.0",
+ "jws": "^4.0.0"
+ },
+ "engines": {
+ "node": ">=14.0.0"
+ }
+ },
+ "node_modules/handlebars": {
+ "version": "4.7.8",
+ "resolved": "https://registry.npmjs.org/handlebars/-/handlebars-4.7.8.tgz",
+ "integrity": "sha512-vafaFqs8MZkRrSX7sFVUdo3ap/eNiLnb4IakshzvP56X5Nr1iGKAIqdX6tMlm6HcNRIkr6AxO5jFEoJzzpT8aQ==",
+ "license": "MIT",
+ "dependencies": {
+ "minimist": "^1.2.5",
+ "neo-async": "^2.6.2",
+ "source-map": "^0.6.1",
+ "wordwrap": "^1.0.0"
+ },
+ "bin": {
+ "handlebars": "bin/handlebars"
+ },
+ "engines": {
+ "node": ">=0.4.7"
+ },
+ "optionalDependencies": {
+ "uglify-js": "^3.1.4"
+ }
+ },
+ "node_modules/has-bigints": {
+ "version": "1.1.0",
+ "resolved": "https://registry.npmjs.org/has-bigints/
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment