Compare commits

..
46 changed files with 772 additions and 666 deletions
@@ -0,0 +1,212 @@
---
title: "Shared Project Memory for a Team Repo"
description: "Give everyone on a repository one shared project memory across Claude Code, Codex, Cursor, Kimi Code and Antigravity, while personal preferences stay private."
icon: "users"
---
<Info icon="cloud">
**Works with:** Mem0 Platform · Claude Code, Codex, Cursor, Kimi Code and Antigravity plugins
</Info>
<Info icon="clock">
**Time to complete:** ~15 minutes · **Tools:** two coding agents, one Git repository
</Info>
Maya and Dev both work on `payments-api`. Maya uses Claude Code, Dev uses Codex. On Monday Maya learns the hard way that the payments service must never call the ledger API directly, and that unit tests only run with `pnpm test:unit`. On Tuesday Dev's agent has no idea, and he hits the same wall.
With the Mem0 plugins, what Maya's agent learns about the repository becomes shared project memory. Dev's agent recalls it in his next session, in a different tool, while Maya's personal preferences stay hers.
## How shared memory works
Every memory the plugin saves goes into one of two lanes:
| Lane | What goes in it | Who can read it |
| --- | --- | --- |
| **Shared project memory** | Facts about the repository: conventions, decisions, constraints, commands and fixes that work | Everyone working on the same repository |
| **Personal memory** | Facts about you: preferred tools, style, and anything you asked to be remembered about yourself | Only you |
Mem0 picks the lane from what a fact is about. A fact about the repository goes to shared memory, a fact about you goes to personal memory.
The repository is identified by its Git remote (`origin`), so every clone of the same repo lands in the same shared lane. Claude Code, Codex, Cursor, Kimi Code and Antigravity share the same memory core, so a teammate on any of these tools reads the same project memory.
## Setup
### 1. Put the team in one Mem0 project
Memories live inside a Mem0 project. Everyone's API key must come from the **same project**, or their agents will not see each other's memories.
<Steps>
<Step title="Invite teammates to the organization">
In the [Mem0 dashboard](https://app.mem0.ai/dashboard?utm_source=oss&utm_medium=cookbook-team-memory), the team lead opens **Settings**, goes to the organization members, and uses **Invite Member**. Teammates without a Mem0 account get an email to sign up.
</Step>
<Step title="Add them to the project">
Once they have joined the organization, open the project's settings and use **Invite Member** again to add each teammate to the project. A teammate has to be in the organization before they can be added to a project.
</Step>
<Step title="Each teammate creates a key in that project">
Each teammate selects the project in the dashboard and creates their own key under [API Keys](https://app.mem0.ai/dashboard/api-keys?utm_source=oss&utm_medium=cookbook-team-memory). The default Reader role can create keys and save memories.
</Step>
</Steps>
### 2. Install the plugin with a unique user ID
Each person needs a stable user ID. Without one, the plugin uses your computer's account name, and two teammates who are both `dev` on their laptops would share a personal lane.
<Tabs>
<Tab title="Maya: Claude Code">
```bash
export MEM0_API_KEY='m0-maya-key'
claude plugin marketplace add mem0ai/mem0
claude plugin install mem0@mem0-plugins --scope user \
--config api_key="$MEM0_API_KEY" \
--config user_id="maya"
unset MEM0_API_KEY
```
Restart Claude Code, or run `/reload-plugins`. Full details: [Claude Code plugin](/integrations/claude-code).
</Tab>
<Tab title="Dev: Codex">
Add the key and a user ID to your shell profile, so Codex sees them in every session:
```bash
echo 'export MEM0_API_KEY="m0-dev-key"' >> ~/.zshrc
echo 'export MEM0_USER_ID="dev"' >> ~/.zshrc
source ~/.zshrc
```
Then install the plugin:
```bash
codex plugin marketplace add mem0ai/mem0
codex plugin add mem0@mem0-plugins
```
Restart Codex from a terminal that has the variables set. Full details: [Codex plugin](/integrations/codex).
</Tab>
<Tab title="Cursor">
Install the full plugin as described on the [Cursor plugin](/integrations/cursor) page. When Cursor asks for the plugin configuration, enter your API key and your name in **Memory user ID**, then restart Cursor.
</Tab>
</Tabs>
For [Kimi Code](/integrations/kimi) and [Antigravity](/integrations/antigravity), export `MEM0_USER_ID` next to `MEM0_API_KEY` in your shell profile before starting the tool.
## Maya's session: memory gets captured
Maya opens `payments-api` in Claude Code and works normally:
```text
Set up the unit tests for the payments service. In this repo we use pnpm, never npm,
and the payments service must never call the ledger API directly; it always goes
through the events queue.
```
Claude runs `pnpm test:unit`, the tests pass, and Maya adds one personal note:
```text
Thanks. Personally I like very short answers with no summary at the end.
```
She does not have to save anything. The plugin flushes the session to Mem0 after every five exchanges, when the session ends or compacts, or after five idle minutes. Extraction then takes under a minute. Mem0 splits what it heard into the two lanes:
```text
Shared project memory:
Unit tests for the payments service have been set up and pass (148 tests) using pnpm,
and the service communicates with the ledger through the events queue rather than directly
Personal memory (maya):
User prefers very short answers with no summary at the end
User prefers pnpm over npm as the package manager
```
An LLM writes each memory, so your wording will differ from these examples.
Maya can check that capture is working with `/mem0:status`.
## Dev's session: memory gets recalled
The next morning Dev opens his own clone of `payments-api` in Codex and starts with:
```text
I need to add a refund flow to the payments service. How do we run the tests here,
and how should payments talk to the ledger?
```
Before Codex answers, the plugin searches with this first prompt and adds the relevant memories to its context:
```text
Mem0 found these relevant memories from earlier work in this repository:
1. Unit tests for the payments service have been set up and pass (148 tests) using pnpm,
and the service communicates with the ledger through the events queue rather than directly
```
Codex now uses `pnpm`, runs `pnpm test:unit`, and routes the refund through the events queue, without Dev explaining any of it. Maya's preference for short answers is not in his context: personal memory never crosses to another user.
<Note>
Automatic recall runs on the first prompt of a session when it has at least 20 characters. Later in the session, the agent can still call `search_memories`, or you can ask it to search Mem0.
</Note>
## What else your team gets
### A fix one person finds, everyone keeps
Later that week Maya works on refunds on a feature branch. Her unit tests fail with `STRIPE_WEBHOOK_SECRET is not set`, she copies `.env.example` to `.env.test`, and the tests pass. She also mentions that refunds over $500 always need manual approval. Nobody writes any of this down.
When Dev's tests fail the same way, his agent searches Mem0 and gets:
```text
1. All unit tests now pass (152 tests) after copying .env.example to .env.test and setting
STRIPE_WEBHOOK_SECRET [learnt on branch feature/refunds]
2. Unit tests for the payments service have been set up and pass (148 tests) using pnpm, ...
3. POST /refunds endpoint added to the payments service [learnt on branch feature/refunds]
```
### Branch-aware recall
Memories learned on a branch other than `main` or `master` come back labeled with that branch, as in `[learnt on branch feature/refunds]` above. Dev's agent knows the knowledge may not have reached `main` yet.
### Look up decisions only
Every memory gets a category: `project_knowledge`, `decisions_and_constraints`, `workflows`, `problems_and_fixes`, or `results`. To see what the team has decided about refunds:
```text
/mem0:search refunds --category decisions_and_constraints
```
```text
1. Refunds over $500 are routed to manual approval [learnt on branch feature/refunds]
2. User prefers very short answers with no summary at the end
3. User prefers pnpm over npm as the package manager
```
The team's decision comes first. Maya also sees her own preferences, because every search covers your personal memory too. Teammates never see them.
In Codex, Cursor, Kimi Code and Antigravity, the `search_memories` tool takes the same `category` argument.
## Production patterns
**Narrow recall in a monorepo.** Searches default to the whole repository. Use the `dir` scope to get project memory for the directory you are in. See [Search scope](/integrations/claude-code#search-scope).
**Forgetting stays personal by default.** `/mem0:forget` deletes your memories for the repository. Shared project memory is kept unless you pass `--include-project-memory`, so one teammate cannot wipe the team's knowledge by accident.
**Same remote, same memory.** Clones are matched by their Git `origin` URL. A repository with no remote gets a memory lane tied to its local path, which teammates cannot share.
<Warning>
OpenCode and Pi Agent keep memory per user and repository. They do not read or write the shared project lane, so use one of the five plugins above for team memory.
</Warning>
## What you built
- **One project memory per repository**, written by whoever learns something and read by everyone on the team.
- **Cross-tool recall**: knowledge captured in Claude Code reaches a teammate in Codex.
- **Fixes, decisions and branch context** that travel with the repository.
- **Private personal memory** that stays with each developer.
<CardGroup cols={2}>
<Card title="Agent Plugins Overview" icon="puzzle-piece" href="/integrations/agent-plugins">
Compare every Mem0 plugin and what each one captures and recalls.
</Card>
<Card title="Company Brain with Supabase" icon="database" href="/cookbooks/integrations/supabase">
Turn company data into shared memory that any agent can query.
</Card>
</CardGroup>
<Snippet file="star-on-github.mdx" />
+2 -1
View File
@@ -36,7 +36,7 @@ Every cookbook opens with a **Works with** badge naming the SDK surface it uses.
| [Memory-Powered Support Agent](/cookbooks/operations/support-inbox) | Operations | OSS only |
</Tab>
<Tab title="Hosted Platform">
Twenty cookbooks run on the hosted Platform, using `MemoryClient` or the Mem0 MCP server with a `MEM0_API_KEY`.
Twenty-one cookbooks run on the hosted Platform, using `MemoryClient` or the Mem0 MCP server with a `MEM0_API_KEY`.
| Cookbook | Category | Works with |
| --- | --- | --- |
@@ -57,6 +57,7 @@ Every cookbook opens with a **Works with** badge naming the SDK surface it uses.
| [Memory-Powered Agent SDK](/cookbooks/integrations/agents-sdk-tool) | Integrations | Platform only |
| [Persistent Mastra Agents](/cookbooks/integrations/mastra-agent) | Integrations | Platform only |
| [Search with Personal Context](/cookbooks/integrations/tavily-search) | Integrations | Platform only |
| [Shared Project Memory for a Team Repo](/cookbooks/integrations/team-project-memory) | Integrations | Platform only |
| [Automated Email Intelligence](/cookbooks/operations/email-automation) | Operations | OSS and Platform |
| [Content Creation Workflow](/cookbooks/operations/content-writing) | Operations | OSS and Platform |
| [Multi-Session Research Agent](/cookbooks/operations/deep-research) | Operations | Platform only |
+9 -1
View File
@@ -366,6 +366,13 @@
{
"tab": "Agent Plugins",
"groups": [
{
"group": "Overview",
"icon": "puzzle-piece",
"pages": [
"integrations/agent-plugins"
]
},
{
"group": "Coding Agents",
"icon": "terminal",
@@ -445,7 +452,8 @@
"cookbooks/integrations/healthcare-google-adk",
"cookbooks/integrations/aws-bedrock",
"cookbooks/integrations/tavily-search",
"cookbooks/integrations/supabase"
"cookbooks/integrations/supabase",
"cookbooks/integrations/team-project-memory"
]
},
{
File diff suppressed because one or more lines are too long

After

Width:  |  Height:  |  Size: 7.5 KiB

@@ -0,0 +1 @@
<svg height="1em" style="flex:none;line-height:1" viewBox="0 0 24 24" width="1em" xmlns="http://www.w3.org/2000/svg"><title>Claude</title><path d="M4.709 15.955l4.72-2.647.08-.23-.08-.128H9.2l-.79-.048-2.698-.073-2.339-.097-2.266-.122-.571-.121L0 11.784l.055-.352.48-.321.686.06 1.52.103 2.278.158 1.652.097 2.449.255h.389l.055-.157-.134-.098-.103-.097-2.358-1.596-2.552-1.688-1.336-.972-.724-.491-.364-.462-.158-1.008.656-.722.881.06.225.061.893.686 1.908 1.476 2.491 1.833.365.304.145-.103.019-.073-.164-.274-1.355-2.446-1.446-2.49-.644-1.032-.17-.619a2.97 2.97 0 01-.104-.729L6.283.134 6.696 0l.996.134.42.364.62 1.414 1.002 2.229 1.555 3.03.456.898.243.832.091.255h.158V9.01l.128-1.706.237-2.095.23-2.695.08-.76.376-.91.747-.492.584.28.48.685-.067.444-.286 1.851-.559 2.903-.364 1.942h.212l.243-.242.985-1.306 1.652-2.064.73-.82.85-.904.547-.431h1.033l.76 1.129-.34 1.166-1.064 1.347-.881 1.142-1.264 1.7-.79 1.36.073.11.188-.02 2.856-.606 1.543-.28 1.841-.315.833.388.091.395-.328.807-1.969.486-2.309.462-3.439.813-.042.03.049.061 1.549.146.662.036h1.622l3.02.225.79.522.474.638-.079.485-1.215.62-1.64-.389-3.829-.91-1.312-.329h-.182v.11l1.093 1.068 2.006 1.81 2.509 2.33.127.578-.322.455-.34-.049-2.205-1.657-.851-.747-1.926-1.62h-.128v.17l.444.649 2.345 3.521.122 1.08-.17.353-.608.213-.668-.122-1.374-1.925-1.415-2.167-1.143-1.943-.14.08-.674 7.254-.316.37-.729.28-.607-.461-.322-.747.322-1.476.389-1.924.315-1.53.286-1.9.17-.632-.012-.042-.14.018-1.434 1.967-2.18 2.945-1.726 1.845-.414.164-.717-.37.067-.662.401-.589 2.388-3.036 1.44-1.882.93-1.086-.006-.158h-.055L4.132 18.56l-1.13.146-.487-.456.061-.746.231-.243 1.908-1.312-.006.006z" fill="#D97757" fill-rule="nonzero"></path></svg>

After

Width:  |  Height:  |  Size: 1.7 KiB

@@ -0,0 +1 @@
<svg height="1em" style="flex:none;line-height:1" viewBox="0 0 24 24" width="1em" xmlns="http://www.w3.org/2000/svg"><title>Claude Code</title><path clip-rule="evenodd" d="M20.998 10.949H24v3.102h-3v3.028h-1.487V20H18v-2.921h-1.487V20H15v-2.921H9V20H7.488v-2.921H6V20H4.487v-2.921H3V14.05H0V10.95h3V5h17.998v5.949zM6 10.949h1.488V8.102H6v2.847zm10.51 0H18V8.102h-1.49v2.847z" fill="#D97757" fill-rule="evenodd"></path></svg>

After

Width:  |  Height:  |  Size: 424 B

@@ -0,0 +1 @@
<svg height="1em" style="flex:none;line-height:1" viewBox="0 0 24 24" width="1em" xmlns="http://www.w3.org/2000/svg"><title>Codex</title><path d="M19.503 0H4.496A4.496 4.496 0 000 4.496v15.007A4.496 4.496 0 004.496 24h15.007A4.496 4.496 0 0024 19.503V4.496A4.496 4.496 0 0019.503 0z" fill="#fff"></path><path d="M9.064 3.344a4.578 4.578 0 012.285-.312c1 .115 1.891.54 2.673 1.275.01.01.024.017.037.021a.09.09 0 00.043 0 4.55 4.55 0 013.046.275l.047.022.116.057a4.581 4.581 0 012.188 2.399c.209.51.313 1.041.315 1.595a4.24 4.24 0 01-.134 1.223.123.123 0 00.03.115c.594.607.988 1.33 1.183 2.17.289 1.425-.007 2.71-.887 3.854l-.136.166a4.548 4.548 0 01-2.201 1.388.123.123 0 00-.081.076c-.191.551-.383 1.023-.74 1.494-.9 1.187-2.222 1.846-3.711 1.838-1.187-.006-2.239-.44-3.157-1.302a.107.107 0 00-.105-.024c-.388.125-.78.143-1.204.138a4.441 4.441 0 01-1.945-.466 4.544 4.544 0 01-1.61-1.335c-.152-.202-.303-.392-.414-.617a5.81 5.81 0 01-.37-.961 4.582 4.582 0 01-.014-2.298.124.124 0 00.006-.056.085.085 0 00-.027-.048 4.467 4.467 0 01-1.034-1.651 3.896 3.896 0 01-.251-1.192 5.189 5.189 0 01.141-1.6c.337-1.112.982-1.985 1.933-2.618.212-.141.413-.251.601-.33.215-.089.43-.164.646-.227a.098.098 0 00.065-.066 4.51 4.51 0 01.829-1.615 4.535 4.535 0 011.837-1.388zm3.482 10.565a.637.637 0 000 1.272h3.636a.637.637 0 100-1.272h-3.636zM8.462 9.23a.637.637 0 00-1.106.631l1.272 2.224-1.266 2.136a.636.636 0 101.095.649l1.454-2.455a.636.636 0 00.005-.64L8.462 9.23z" fill="url(#lobe-icons-codex-_R_0_)"></path><defs><linearGradient gradientUnits="userSpaceOnUse" id="lobe-icons-codex-_R_0_" x1="12" x2="12" y1="3" y2="21"><stop stop-color="#B1A7FF"></stop><stop offset=".5" stop-color="#7A9DFF"></stop><stop offset="1" stop-color="#3941FF"></stop></linearGradient></defs></svg>

After

Width:  |  Height:  |  Size: 1.7 KiB

+1
View File
@@ -0,0 +1 @@
<svg xmlns="http://www.w3.org/2000/svg" width="24" height="24" viewBox="0 0 24 24"><title>Cursor</title><rect x="0.25" y="0.25" width="23.5" height="23.5" rx="5.5" fill="#161616" stroke="#3a3a3a" stroke-width="0.5"/><g transform="translate(4.000 4.000) scale(0.66667)" fill="#ffffff" fill-rule="evenodd"><path d="M22.106 5.68L12.5.135a.998.998 0 00-.998 0L1.893 5.68a.84.84 0 00-.419.726v11.186c0 .3.16.577.42.727l9.607 5.547a.999.999 0 00.998 0l9.608-5.547a.84.84 0 00.42-.727V6.407a.84.84 0 00-.42-.726zm-.603 1.176L12.228 22.92c-.063.108-.228.064-.228-.061V12.34a.59.59 0 00-.295-.51l-9.11-5.26c-.107-.062-.063-.228.062-.228h18.55c.264 0 .428.286.296.514z"/></g></svg>

After

Width:  |  Height:  |  Size: 671 B

File diff suppressed because one or more lines are too long

After

Width:  |  Height:  |  Size: 19 KiB

@@ -0,0 +1 @@
<svg xmlns="http://www.w3.org/2000/svg" width="24" height="24" viewBox="0 0 24 24"><title>Kimi</title><rect x="0.25" y="0.25" width="23.5" height="23.5" rx="5.5" fill="#161616" stroke="#3a3a3a" stroke-width="0.5"/><g transform="translate(4 4) scale(0.66667)"><path d="M21.846 0a1.923 1.923 0 110 3.846H20.15a.226.226 0 01-.227-.226V1.923C19.923.861 20.784 0 21.846 0z" fill="#1783FF"></path><path d="M11.065 11.199l7.257-7.2c.137-.136.06-.41-.116-.41H14.3a.164.164 0 00-.117.051l-7.82 7.756c-.122.12-.302.013-.302-.179V3.82c0-.127-.083-.23-.185-.23H3.186c-.103 0-.186.103-.186.23V19.77c0 .128.083.23.186.23h2.69c.103 0 .186-.102.186-.23v-3.25c0-.069.025-.135.069-.178l2.424-2.406a.158.158 0 01.205-.023l6.484 4.772a7.677 7.677 0 003.453 1.283c.108.012.2-.095.2-.23v-3.06c0-.117-.07-.212-.164-.227a5.028 5.028 0 01-2.027-.807l-5.613-4.064c-.117-.078-.132-.279-.028-.381z" fill="#fff"></path></g></svg>

After

Width:  |  Height:  |  Size: 900 B

+1
View File
@@ -0,0 +1 @@
<svg xmlns="http://www.w3.org/2000/svg" width="24" height="24" viewBox="0 0 24 24"><title>opencode</title><rect x="0.25" y="0.25" width="23.5" height="23.5" rx="5.5" fill="#161616" stroke="#3a3a3a" stroke-width="0.5"/><g transform="translate(4.000 4.000) scale(0.66667)" fill="#ffffff" fill-rule="evenodd"><path d="M16 6H8v12h8V6zm4 16H4V2h16v20z"/></g></svg>

After

Width:  |  Height:  |  Size: 359 B

+1
View File
@@ -0,0 +1 @@
<svg xmlns="http://www.w3.org/2000/svg" width="24" height="24" viewBox="0 0 24 24"><title>Pi</title><rect x="0.25" y="0.25" width="23.5" height="23.5" rx="5.5" fill="#161616" stroke="#3a3a3a" stroke-width="0.5"/><g transform="translate(4.000 4.000) scale(0.02857)" fill="#ffffff" fill-rule="evenodd"><path d="M420 280H280V140H0V0H420V280Z"/><path d="M560 560H420V280H560V560Z"/><path d="M140 560H0V140H140V280H280V420H140V560Z"/></g></svg>

After

Width:  |  Height:  |  Size: 439 B

+111
View File
@@ -0,0 +1,111 @@
---
title: "Agent Plugins Overview"
sidebarTitle: "Overview"
description: "Add persistent memory to the coding agent or agent harness you already use. Compare the Mem0 plugins and pick yours."
---
Coding agents forget everything when a session ends: your conventions, the bug you fixed yesterday, the command that finally worked. A Mem0 plugin fixes that inside the tool you already use. It captures what matters while you work and brings it back in the next session.
<Info>
Plugins use a [Mem0 Platform](https://app.mem0.ai?utm_source=oss&utm_medium=agent-plugins-overview) account. OpenClaw and Hermes can also run fully self-hosted.
</Info>
## How a plugin works
<Steps>
<Step title="Capture">
While you work, the plugin records your prompts, the agent's answers and useful tool results. Credentials are redacted before anything leaves your machine.
</Step>
<Step title="Extract">
Mem0 turns each session into short, durable memories: project conventions, decisions, fixes that worked, and your personal preferences.
</Step>
<Step title="Recall">
In the next session, relevant memories are added to the agent's context automatically or found with a search tool, depending on the plugin.
</Step>
</Steps>
## Coding agents
<CardGroup cols={3}>
<Card title="Claude Code" icon="/images/provider-icons/claudecode-color.svg" href="/integrations/claude-code">
Automatic capture and recall, six commands, and the Sidekick agent.
</Card>
<Card title="Codex" icon="/images/provider-icons/codex-color.svg" href="/integrations/codex">
Automatic capture and recall in the Codex CLI and app.
</Card>
<Card title="Cursor" icon="/images/provider-icons/cursor.svg" href="/integrations/cursor">
Automatic capture, with recall through a search tool.
</Card>
<Card title="OpenCode" icon="/images/provider-icons/opencode.svg" href="/integrations/opencode">
Recall before every prompt and ten native memory tools.
</Card>
<Card title="Kimi Code" icon="/images/provider-icons/kimi-color.svg" href="/integrations/kimi">
Automatic capture and recall in the Kimi Code CLI.
</Card>
<Card title="Antigravity" icon="/images/provider-icons/antigravity-color.svg" href="/integrations/antigravity">
Automatic capture, with recall through a search tool.
</Card>
</CardGroup>
## Agent harnesses and chat apps
<CardGroup cols={3}>
<Card title="OpenClaw" icon="/images/provider-icons/openclaw.svg" href="/integrations/openclaw">
Recall and capture on every turn. Platform or self-hosted.
</Card>
<Card title="Hermes Agent" icon="/images/provider-icons/hermes-tile.svg" href="/integrations/hermes">
Mem0 as Hermes' memory provider. Platform or self-hosted.
</Card>
<Card title="Pi Agent" icon="/images/provider-icons/pi.svg" href="/integrations/pi-agent">
Recall before every turn and automatic capture.
</Card>
<Card title="DeepSeek Harness" icon="/images/provider-icons/deepseek-color.svg" href="/integrations/deepseek-plugin">
Automatic recall and capture with two native tools.
</Card>
<Card title="Claude.ai" icon="/images/provider-icons/claude-color.svg" href="/integrations/claude-ai">
Add the verified Mem0 connector from Claude's directory and sign in. No API key needed.
</Card>
<Card title="Any MCP client" icon="plug" href="/platform/mem0-mcp">
Your tool is not listed? Connect it to the hosted Mem0 MCP server.
</Card>
</CardGroup>
## Compare plugins
<Tabs>
<Tab title="Coding agents">
| Plugin | Auto capture | Auto recall | Skills | Team |
| --- | --- | --- | --- | --- |
| [Claude Code](/integrations/claude-code) | Yes | First prompt | 6, plus Sidekick | Shared |
| [Codex](/integrations/codex) | Yes | First prompt | 6 | Shared |
| [Cursor](/integrations/cursor) | Yes | Search tool | 6 | Shared |
| [Kimi Code](/integrations/kimi) | Yes | First prompt | 6 | Shared |
| [Antigravity](/integrations/antigravity) | Yes | Search tool | 6 | Shared |
| [OpenCode](/integrations/opencode) | Yes | Every prompt | 7 | Per user |
**First prompt:** relevant memories are added before the agent answers the first prompt of a session. **Search tool:** the agent calls `search_memories` when it needs context. **Shared:** teammates on the same repo share project memory.
</Tab>
<Tab title="Harnesses and chat apps">
| Plugin | Auto capture | Auto recall | Tools | Self-hosted |
| --- | --- | --- | --- | --- |
| [OpenClaw](/integrations/openclaw) | Yes | Every turn | Tools and skills | Yes |
| [Hermes Agent](/integrations/hermes) | Yes | Every turn | 4 | Yes |
| [Pi Agent](/integrations/pi-agent) | Yes | Every turn | 1 | No |
| [DeepSeek Harness](/integrations/deepseek-plugin) | Yes | Every prompt | 2 | No |
| [Claude.ai](/integrations/claude-ai) | When asked | When relevant | 9 | No |
</Tab>
</Tabs>
<Note>
Claude Code, Codex, Cursor, Kimi Code and Antigravity share the same memory core. Teammates working in the same repository, in any of these tools, read and write one shared project memory while their personal preferences stay private. See [Shared project memory for a team repo](/cookbooks/integrations/team-project-memory).
</Note>
## Which plugin should I use?
- **You code in a terminal or IDE agent:** install the plugin for that tool from the cards above. Each page has its own install steps.
- **Your team uses different agents on the same repo:** pick any of Claude Code, Codex, Cursor, Kimi Code or Antigravity. They share project memory across tools.
- **You chat in Claude:** add the [Mem0 connector](https://claude.com/connectors/mem0) from Claude's directory.
- **Your tool has no plugin:** connect it to the [hosted Mem0 MCP server](/platform/mem0-mcp).
- **You need to keep data on your own infrastructure:** use OpenClaw or Hermes in self-hosted mode.
<Snippet file="star-on-github.mdx" />
+24 -40
View File
@@ -5,7 +5,7 @@ description: "Add persistent memory to DeepSeek Harness with automatic recall, a
Add persistent memory to the [**DeepSeek Harness**](https://github.com/deepseek-ai/deepseek-harness) with `@mem0/deepseek-plugin`. The plugin recalls relevant context before a model request, captures completed turns, and provides explicit Mem0 tools when the agent needs them.
<Info>Current package version: `0.3.2`.</Info>
<Info>Current package version: `0.3.0`.</Info>
Sidekick is available only in the [Claude Code plugin](/integrations/claude-code#sidekick-agent).
@@ -32,7 +32,7 @@ A Cordis plugin is a module exporting `apply(ctx, config)`. This plugin waits fo
Cordis removes the listeners and tools when the plugin unmounts. Memory failures are fail-open, so a Mem0 outage does not stop the agent from completing its normal work.
DeepSeek Harness provides subagents through separate host-composition packages. This Mem0 package does not register a named Sidekick or claim child filesystem isolation. Memory availability in children depends on the Harness composition and service scope.
DeepSeek Harness provides subagents through separate host-composition packages. This Mem0 package does not register a named Sidekick or claim child filesystem isolation. A Harness child uses Mem0 only when its own agent preset includes the Mem0 plugin.
## Prerequisites
@@ -40,27 +40,25 @@ DeepSeek Harness provides subagents through separate host-composition packages.
- <a href="https://app.mem0.ai?utm_source=oss&utm_medium=integration-deepseek-plugin">Sign up at app.mem0.ai</a>
- <a href="https://app.mem0.ai/dashboard/api-keys?utm_source=oss&utm_medium=integration-deepseek-plugin">Get your API key</a> (starts with `m0-`)
2. The DeepSeek Harness installed and a funded model-provider credential (`DEEPSEEK_API_KEY` for the official DeepSeek provider). This is separate from your Mem0 key.
2. The DeepSeek Harness installed.
3. Your Mem0 key and a stable user identity exported in the shell that launches Harness:
3. Your API key exported in your shell:
<CodeGroup>
```bash zsh
echo 'export MEM0_API_KEY="m0-your-api-key"' >> ~/.zshrc
echo 'export MEM0_USER_ID="your-user-id"' >> ~/.zshrc
source ~/.zshrc
```
```bash bash
echo 'export MEM0_API_KEY="m0-your-api-key"' >> ~/.bashrc
echo 'export MEM0_USER_ID="your-user-id"' >> ~/.bashrc
source ~/.bashrc
```
</CodeGroup>
## Try it locally
1. Build and pack the plugin from the full repository (the source imports the sibling shared core):
1. Build and pack the plugin:
```sh
cd integrations/deepseek-plugin
pnpm install --frozen-lockfile
@@ -69,35 +67,36 @@ source ~/.bashrc
pnpm pack --pack-destination /tmp/mem0-deepseek-plugin
```
2. Install it into a disposable Harness profile so Harness supplies its peer dependencies. This needs pnpm 10 or newer, because the profile's `pnpm-workspace.yaml` settings are ignored by pnpm 9 and the install fails on an unpublished internal package:
2. Install it into a disposable Harness profile so Harness supplies its peer dependencies:
```sh
DSH_HOME=/tmp/mem0-dsh-dev pnpm dlx @deepseek-ai/dsh@0.1.1-rc.2 \
plugin --profile web add /tmp/mem0-deepseek-plugin/mem0-deepseek-plugin-0.3.2.tgz
plugin --profile headless add /tmp/mem0-deepseek-plugin/mem0-deepseek-plugin-0.3.0.tgz
```
3. Launch the same profile. The package's `dsh.bundle` activates Mem0 automatically:
3. Copy `cordis.example.yml`, set its installed package path and your `userId`, then load it with the same profile:
```sh
DSH_HOME=/tmp/mem0-dsh-dev pnpm dlx @deepseek-ai/dsh@0.1.1-rc.2 \
web
web --patch ./integrations/deepseek-plugin/cordis.example.yml
```
4. Open the web UI, select a workspace, and state a synthetic preference without mentioning Mem0. Allow extraction to finish, start a fresh session, and ask for that preference without tools. Inspect the `mem0:recall` context to confirm automatic recall.
4. Open the web UI and ask the agent to remember something, then recall it in a later turn.
`pnpm pack` builds the package automatically and ships its activation patch. To customize it, copy `cordis.example.yml` and launch with `web --patch /absolute/path/to/cordis.yml`. The override updates the existing bundle row:
The `cordis.yml` entry looks like this:
```yaml
- id: mem0
config:
# A config override replaces the whole config, so restate userId.
userId: !!js process.env.MEM0_USER_ID
memoryScope: workspace
autoRecall: true
autoCapture: true
# host: "https://your-onprem.mem0.ai" # optional: Platform dedicated base URL
- name: "@deepseek-ai/dsh-system-prompt"
- name: "@deepseek-ai/dsh-tools"
- insert:
- id: mem0
name: "/tmp/mem0-dsh-dev/profiles/headless/node_modules/@mem0/deepseek-plugin/dist/index.js"
config:
# apiKey is read from MEM0_API_KEY when omitted here.
userId: "your-user-id"
autoRecall: true
autoCapture: true
# host: "https://your-onprem.mem0.ai" # optional: Platform on-prem / dedicated base URL
```
When upgrading from a manual installation, remove the old patch that inserts a `mem0` row; the bundle now inserts it. Keep custom settings as an override by `id`.
For a Mem0 Platform on-prem or dedicated deployment, point `config.host` at that base URL (defaults to `api.mem0.ai`). `host` is a Platform base-URL override, not a switch to self-hosted Mem0 OSS.
## Configuration
@@ -106,27 +105,12 @@ For a Mem0 Platform on-prem or dedicated deployment, point `config.host` at that
|---|---|---|---|
| `apiKey` | no | `$MEM0_API_KEY` | Mem0 platform API key |
| `userId` | yes | | Default entity that owns the memories |
| `memoryScope` | no | `user` | `user` shares memory across workspaces; `workspace` isolates automatic and explicit memory operations |
| `allowUserOverride` | no | `false` | Permit model-selected access to a different user only in a trusted multi-user deployment |
| `host` | no | `api.mem0.ai` | Platform base URL (on-prem / dedicated) |
| `autoRecall` | no | `true` | Recall relevant memory before model requests |
| `autoCapture` | no | `true` | Store completed human and assistant turns |
Both tools also accept optional per-call `userId`, `agentId`, and `runId` params so a single install can partition memory by entity, agent, or session; `userId` defaults to the configured user, while `agentId` and `runId` are omitted unless supplied. Automatic capture preserves full redacted user and assistant message text without a per-message character cutoff.
## Workspace scope
By default, automatic capture and recall use the configured user across all workspaces. This is intentional compatibility behavior. To isolate workspaces, set `memoryScope: workspace` as shown above. All writes then attach an `appId` derived from the canonical absolute session workspace path; all searches require its matching `app_id`. The model cannot override that workspace filter.
Symlink aliases share a scope. Different directories, clones, or worktrees have different scopes; moving a directory changes its scope. Missing or invalid workspace paths skip automatic memory operations and reject explicit tools without falling back to user-wide access. Existing user-only memories are not migrated into workspace scopes.
User scope searches all memories belonging to the user, including workspace-tagged memories. Workspace isolation applies only when workspace scope is configured; it is application filtering, not a separate Mem0 account or credential.
## Extraction and recall limits
Capture sends the full redacted turn to Mem0 for asynchronous extraction. A queued write, or even an initially nonempty memory list, does not mean every extracted fact is ready. Allow processing to finish and inspect stored memories before diagnosing lost preferences or missing filenames and numeric constraints. Exact extraction remains model-dependent; a one-off request should not automatically become a standing preference.
Automatic recall is a shallow first pass: up to five results, 4,000 context characters, and a two-second wait. The explicit `search_memory` tool can use a more focused query and returns up to ten results by default.
Both tools also accept optional per-call `userId`, `agentId`, and `runId` params so a single install can partition memory by entity, agent, or session; `userId` defaults to the configured user, while `agentId` and `runId` are omitted unless supplied. Automatic recall and capture use the configured user without an agent, repository, or session filter. Automatic capture preserves full redacted user and assistant message text without a per-message character cutoff.
## Telemetry
@@ -140,6 +124,6 @@ Writes are tagged `source="DEEPSEEK_HARNESS"` so Mem0 can attribute usage to thi
- **`MISSING_CREDENTIAL` for `deepseek-official`**: Configure `DEEPSEEK_API_KEY` through Harness's Models page or export it in the shell that launches Harness.
- **`EMFILE: too many open files, watch` on macOS**: Launch Harness with `CHOKIDAR_USEPOLLING=1`.
- **Mem0 tools do not appear**: Run Harness with `--dump-config` for the same profile used at installation and confirm it contains a `mem0` row naming `@mem0/deepseek-plugin`. Export `MEM0_USER_ID` and `MEM0_API_KEY` before launching.
- **Mem0 tools do not appear**: Run Harness with `--dump-config` and confirm the final composition contains the `mem0` row and the installed `dist/index.js` path.
Per-call `userId` overrides are rejected unless the operator enables `allowUserOverride: true`. Automatic recall and capture always use the configured user.
+2
View File
@@ -268,6 +268,7 @@ If the user is on a pre-current major (Python < 2, TS < 3, or a Platform call st
- [Strands Agents](https://docs.mem0.ai/integrations/strands) [Both]: Use when the user is on AWS Strands and wants a native MemoryStore.
### AI Coding Tools
- [Agent Plugins Overview](https://docs.mem0.ai/integrations/agent-plugins) [Platform]: Use when choosing a Mem0 plugin for a coding agent or agent harness, or comparing what each plugin captures and recalls.
- [Claude Code](https://docs.mem0.ai/integrations/claude-code) [Platform]: Use when wiring memory into Claude Code.
- [Claude.ai](https://docs.mem0.ai/integrations/claude-ai) [Platform]: Use when connecting Mem0 to Claude.ai (the hosted web app) via a custom remote MCP connector, or when Claude's native memory seems to be crowding out mem0 tool calls.
- [Cursor](https://docs.mem0.ai/integrations/cursor) [Platform]: Use when adding lifecycle capture, explicit memory recall, and six memory skills to Cursor.
@@ -327,6 +328,7 @@ If the user is on a pre-current major (Python < 2, TS < 3, or a Platform call st
- [AWS Bedrock](https://docs.mem0.ai/cookbooks/integrations/aws-bedrock) [OSS]: Use when deploying with AWS managed model services.
- [Tavily Search](https://docs.mem0.ai/cookbooks/integrations/tavily-search) [Platform]: Use when the agent layers web search on memory.
- [Company Brain (Mem0 Platform + Supabase)](https://docs.mem0.ai/cookbooks/integrations/supabase) [Platform]: Use to build a shared org brain on Mem0 Platform with Supabase as system of record and the MCP server as the access layer (with a new-hire onboarding demo).
- [Shared Project Memory for a Team Repo](https://docs.mem0.ai/cookbooks/integrations/team-project-memory) [Platform]: Use when a team on one repository wants coding agents (Claude Code, Codex, Cursor, Kimi Code, Antigravity) to share project memory while keeping personal preferences private.
### Framework Examples
- [LlamaIndex React](https://docs.mem0.ai/cookbooks/frameworks/llamaindex-react) [Both]: Use when building a React UI with LlamaIndex and memory.
@@ -75,8 +75,6 @@ interface RecallOptions {
maxChars?: number;
seenIds?: Set<string>;
timeoutMs?: number;
/** Gate for marking memories as seen. Return false when the context will not reach the model. */
canDeliver?: () => boolean;
}
interface MemoryLifecycleOptions {
@@ -112,14 +110,12 @@ class MemoryLifecycle {
prompt: string,
enabled: boolean,
search: (query: string) => Promise<{ results?: unknown[] }>,
canDeliver?: () => boolean,
): Promise<string> {
return buildRecallContext(prompt, enabled, search, {
heading: this.#options.recallHeading,
maxChars: this.#options.maxContextChars,
seenIds: this.#seenMemoryIds,
timeoutMs: this.#options.recallTimeoutMs,
canDeliver,
});
}
}
@@ -160,7 +156,6 @@ export async function buildRecallContext(
const suffix = "\n</mem0-relevant-memories>";
const maxChars = options.maxChars ?? DEFAULT_MAX_CONTEXT_CHARS;
const lines: string[] = [];
const includedIds: string[] = [];
for (const memory of unseen) {
const line = `${lines.length + 1}. ${redactSecrets(formatMemoryCompact(memory))
.replace(/\s+/g, " ")
@@ -169,20 +164,15 @@ export async function buildRecallContext(
if (candidate.length > maxChars) {
if (!lines.length) {
const available = maxChars - prefix.length - suffix.length;
if (available > 1) {
lines.push(`${line.slice(0, available - 1).trimEnd()}…`);
includedIds.push(memory.id);
}
if (available > 1) lines.push(`${line.slice(0, available - 1).trimEnd()}…`);
}
break;
}
lines.push(line);
includedIds.push(memory.id);
options.seenIds?.add(memory.id);
}
if (!lines.length) return "";
if (options.canDeliver?.() ?? true) {
for (const id of includedIds) options.seenIds?.add(id);
}
if (unseen[0] && !options.seenIds?.has(unseen[0].id)) options.seenIds?.add(unseen[0].id);
return prefix + lines.join("\n") + suffix;
} catch {
return "";
@@ -20,15 +20,6 @@ test("one lifecycle owns recall state and resets it for a new session", async ()
assert.match(await lifecycle.recall("package manager", true, search), /Use pnpm/);
});
test("recall leaves memories unseen when delivery is not allowed", async () => {
const lifecycle = createMemoryLifecycle({ recallTimeoutMs: 50 });
const search = async () => ({ results: [{ id: "m1", memory: "Use pnpm" }] });
assert.match(await lifecycle.recall("package manager", true, search, () => false), /Use pnpm/);
assert.match(await lifecycle.recall("package manager", true, search), /Use pnpm/);
assert.equal(await lifecycle.recall("package manager", true, search), "");
});
test("one lifecycle owns capture preparation", () => {
const lifecycle = createMemoryLifecycle();
+7 -24
View File
@@ -13,7 +13,7 @@ It gives a Harness agent automatic long-term memory plus two explicit memory too
Unlike the local/file-based memory plugins in the ecosystem, Mem0 is a managed backend: server-side extraction, semantic dedup and conflict resolution, and memories that other agents can retrieve when their user and entity filters match.
Current package version: `0.3.2`.
Current package version: `0.3.0`.
Sidekick is available only in the [Claude Code plugin](../claude-code-plugin/README.md#sonnet-sidekick-agent).
@@ -47,27 +47,21 @@ Cordis owns listener and tool cleanup when the plugin unmounts. Every automatic
mkdir -p /tmp/mem0-deepseek-plugin
pnpm pack --pack-destination /tmp/mem0-deepseek-plugin
```
2. Set your Mem0 key, a stable user identity, and a funded model API key:
2. Set your Mem0 key:
```sh
export MEM0_API_KEY=...
export MEM0_USER_ID=your-user-id
export DEEPSEEK_API_KEY=...
```
3. Install it into a disposable Harness profile (requires pnpm 10 or newer; pnpm 9 ignores the profile's `pnpm-workspace.yaml` settings and the install fails on an unpublished internal package):
3. Install it into a disposable Harness profile:
```sh
DSH_HOME=/tmp/mem0-dsh-dev pnpm dlx @deepseek-ai/dsh@0.1.1-rc.2 \
plugin --profile web add /tmp/mem0-deepseek-plugin/mem0-deepseek-plugin-0.3.2.tgz
plugin --profile headless add /tmp/mem0-deepseek-plugin/mem0-deepseek-plugin-0.3.0.tgz
```
4. Run Harness with the same profile. The installed bundle activates Mem0 automatically:
4. Copy `cordis.example.yml`, set its installed package path and your `userId`, then run Harness with the same profile:
```sh
DSH_HOME=/tmp/mem0-dsh-dev pnpm dlx @deepseek-ai/dsh@0.1.1-rc.2 \
web
web --patch ./integrations/deepseek-plugin/cordis.example.yml
```
5. Open http://127.0.0.1:3080, select a workspace, and state a synthetic preference without mentioning Mem0. Wait for asynchronous extraction to finish, then start a fresh session and ask for that preference without tools. Inspect the `mem0:recall` context to verify automatic recall.
Build from the full repository: the source imports the sibling shared core. `pnpm pack` runs the build and includes the activation patch. An installed tarball is self-contained. For custom settings, copy `cordis.example.yml` and pass its absolute path with `--patch`. When upgrading from the old manual setup, remove the old patch that **inserts** a `mem0` row; the bundle now inserts it.
On macOS, set `CHOKIDAR_USEPOLLING=1` if Harness reports `EMFILE`. The Mem0 key and model-provider key are separate credentials.
5. Open http://127.0.0.1:3080 and ask the agent to remember something, then recall it in a later turn.
For a Mem0 Platform on-prem or dedicated deployment, point `config.host` at that base URL (defaults to `api.mem0.ai`). `host` overrides the Platform base URL. It does not support the self-hosted Mem0 OSS API.
@@ -77,7 +71,6 @@ For a Mem0 Platform on-prem or dedicated deployment, point `config.host` at that
|---|---|---|---|
| `apiKey` | no | `$MEM0_API_KEY` | Mem0 platform API key |
| `userId` | yes | | Entity that owns the memories |
| `memoryScope` | no | `user` | `user` shares memory across workspaces; `workspace` isolates all automatic and explicit operations by the session workspace |
| `allowUserOverride` | no | `false` | Permit model-selected access to a different user only in a trusted multi-user deployment |
| `host` | no | `api.mem0.ai` | Platform base URL (on-prem / dedicated) |
| `autoRecall` | no | `true` | Recall relevant memory before model requests |
@@ -87,20 +80,10 @@ For a Mem0 Platform on-prem or dedicated deployment, point `config.host` at that
Automatic capture and recall use the configured `userId` across sessions. Automatic writes do not attach a repository ID or `runId`.
This cross-workspace sharing is intentional compatibility behavior. Set `memoryScope: workspace` in the profile patch to isolate memory. The plugin then adds an `appId` derived from the canonical absolute session workspace path to every write and the matching `app_id` to every search. Symlink aliases share a scope; different directories (including separate clones or worktrees) do not. Moving a workspace changes its scope. Tools cannot override it. Missing or invalid workspace paths skip automatic memory operations and reject explicit tools, without falling back to user-wide access.
Workspace scope does not migrate existing user-only memories. User scope still searches all memories for that user, including workspace-tagged memories; isolation applies when the plugin is configured with workspace scope. These filters are application-level separation, not separate Mem0 credentials.
Both `search_memory` and `add_memory` accept optional `agentId` and `runId`. On search, these narrow the returned memories; on add, they attach those identities to the stored memory. Pass a known `runId` to search memories explicitly saved with that session ID. This does not include automatically captured user-only memories or identify the session making the request.
Per-call `userId` overrides are rejected unless the operator enables `allowUserOverride: true`. Automatic recall and capture always use the configured user.
## Extraction and recall limits
The plugin sends full redacted completed turns to Mem0; Mem0 extracts the memories asynchronously. A queued write is not proof that every extracted fact is already searchable. Even an initial nonempty memory list can be incomplete. Check the stored memories after processing before diagnosing extraction loss.
Automatic recall is a bounded first pass (up to five results, 4,000 context characters, and a two-second wait). `search_memory` uses a focused query and returns up to ten results by default. Exact preference extraction remains model-dependent; include filenames and numeric constraints in release tests, and distinguish standing preferences from one-off requests.
## Telemetry
Writes are tagged `source="DEEPSEEK_HARNESS"`. That value has to exist in the backend's `EventSource` enum for usage to surface by name; until it does, these writes read as `OTHERS`. It is added by [mem0ai/platform#3602](https://github.com/mem0ai/platform/pull/3602), which has to ship before this claim is true.
+17 -11
View File
@@ -1,11 +1,17 @@
# Optional override for the mem0 row installed by dsh.bundle.
# Copy this file, then use: dsh web --patch /absolute/path/to/cordis.yml
- id: mem0
config:
# Replacing a row's config requires restating its userId.
# apiKey is read from MEM0_API_KEY when omitted here.
userId: !!js process.env.MEM0_USER_ID
memoryScope: workspace # optional; default is user (shared across workspaces)
# autoRecall: true
# autoCapture: true
# host: "https://your-onprem.mem0.ai" # Mem0 Platform dedicated deployment
# Example DeepSeek Harness config that loads deepseek-plugin alongside the built-in
# tools plugin. Load with:
#
# DSH_HOME=/tmp/mem0-dsh-dev pnpm dlx @deepseek-ai/dsh@0.1.1-rc.2 \
# web --patch ./integrations/deepseek-plugin/cordis.example.yml
#
- insert:
- id: mem0
# Install the packed plugin into this disposable profile first; loading
# raw dist bypasses Harness's peer dependency installation.
name: "/tmp/mem0-dsh-dev/profiles/headless/node_modules/@mem0/deepseek-plugin/dist/index.js"
config:
# apiKey is read from the MEM0_API_KEY env var when omitted here.
userId: "your-user-id"
# autoRecall: true # optional; enabled by default
# autoCapture: true # optional; enabled by default
# host: "https://your-onprem.mem0.ai" # optional: Platform on-prem / dedicated base URL
@@ -1,6 +0,0 @@
- insert:
- id: mem0
name: "@mem0/deepseek-plugin"
config:
# Credentials stay in the process environment, not the bundle.
userId: !!js process.env.MEM0_USER_ID
+5 -8
View File
@@ -29,21 +29,13 @@
"publishConfig": {
"access": "public"
},
"dsh": {
"bundle": {
"patch": "./cordis.patch.yml"
}
},
"files": [
"dist",
"cordis.patch.yml",
"cordis.example.yml",
"README.md",
"LICENSE"
],
"scripts": {
"build": "tsup",
"prepack": "pnpm build",
"test": "vitest run",
"test:watch": "vitest",
"typecheck": "tsc --noEmit"
@@ -68,5 +60,10 @@
"tsup": "^8.5.0",
"typescript": "^5.6.0",
"vitest": "^4.1.7"
},
"pnpm": {
"overrides": {
"axios@<1.20.0": ">=1.20.0 <2.0.0"
}
}
}
+7 -4
View File
@@ -4,6 +4,9 @@ settings:
autoInstallPeers: false
excludeLinksFromLockfile: false
overrides:
axios@<1.20.0: '>=1.20.0 <2.0.0'
importers:
.:
@@ -575,8 +578,8 @@ packages:
asynckit@0.4.0:
resolution: {integrity: sha512-Oei9OH4tRh0YqU3GxhX79dM/mwVgvbZJaSNaRk+bshkj0S5cfHcgYakreBjrHwatXKbz+IoIdYLxrKim2MjW0Q==}
axios@1.19.0:
resolution: {integrity: sha512-ht/iuYZXEjFxLH/Hkezgd7m6JKlHHXEUSneaDz8uZe1Gj5QZtCnpyDsckvAiEnT89OEbCLmnte4R4sn7P0EKFw==}
axios@1.20.0:
resolution: {integrity: sha512-r8aOh8j9cGKpgQAqpzrUHnSIc6a59Y3Xf/cv8sy1DrHCkZHzQGEuoq1tARk6qSyDdtQGSDgpb9kFlruzPvrgwg==}
bundle-require@5.1.0:
resolution: {integrity: sha512-3WrrOuZiyaaZPWiEt4G3+IffISVC9HYlWueJEBWED4ZH4aIAC2PnkdnuRrR94M+w6yGWn4AglWtJtBI8YqvgoA==}
@@ -1610,7 +1613,7 @@ snapshots:
asynckit@0.4.0: {}
axios@1.19.0:
axios@1.20.0:
dependencies:
follow-redirects: 1.16.0
form-data: 4.0.6
@@ -1856,7 +1859,7 @@ snapshots:
mem0ai@3.1.6:
dependencies:
axios: 1.19.0
axios: 1.20.0
openai: 4.104.0(zod@3.25.76)
uuid: 11.1.1
zod: 3.25.76
+11 -34
View File
@@ -18,7 +18,7 @@ import { defineTool } from "@deepseek-ai/dsh-tools";
import { MemoryClient } from "mem0ai";
import { formatMemoryList, formatAddResult } from "./formatting.ts";
import { truncateOutput } from "./output.ts";
import { resolveSearchFilters, resolveAddParams, resolveWorkspaceId } from "./scoping.ts";
import { resolveSearchFilters, resolveAddParams } from "./scoping.ts";
import { captureEvent, errorKind } from "./telemetry.ts";
import { createMemoryLifecycle } from "../../agent-plugin-core/typescript/src/lifecycle.ts";
import {
@@ -48,7 +48,6 @@ interface HarnessMessage {
interface SessionState {
lifecycle: ReturnType<typeof createMemoryLifecycle>;
messages: HarnessMessage[];
currentPrompt?: string;
}
export interface Config {
@@ -56,8 +55,6 @@ export interface Config {
apiKey?: string;
/** Default entity that owns the memories (Mem0 user scope). */
userId: string;
/** Share user memory across workspaces (default), or isolate by session workspace. */
memoryScope?: "user" | "workspace";
/** Explicitly allow model-selected cross-user access. Defaults to false. */
allowUserOverride?: boolean;
/** Optional Mem0 Platform base-URL override (on-prem / dedicated); defaults to api.mem0.ai. Not a switch to self-hosted OSS. */
@@ -105,19 +102,6 @@ export function apply(ctx: Context, config: Config): void {
if (!userId || /^\*+$/.test(userId)) {
throw new Error("deepseek-plugin: config.userId is required");
}
if (config.memoryScope !== undefined && !["user", "workspace"].includes(config.memoryScope)) {
throw new Error("deepseek-plugin: config.memoryScope must be user or workspace");
}
const workspaceId = (session?: { header: { cwd?: string } }) =>
config.memoryScope === "workspace" ? resolveWorkspaceId(session?.header.cwd) : undefined;
const searchFilters = (params: Parameters<typeof resolveSearchFilters>[0], session?: { header: { cwd?: string } }) => {
const appId = workspaceId(session);
return { ...resolveSearchFilters(params, userId), ...(appId ? { app_id: appId } : {}) };
};
const addParams = (params: Parameters<typeof resolveAddParams>[0], session?: { header: { cwd?: string } }) => {
const appId = workspaceId(session);
return { ...resolveAddParams(params, userId), ...(appId ? { appId } : {}) };
};
const client = new MemoryClient({
apiKey,
@@ -143,20 +127,13 @@ export function apply(ctx: Context, config: Config): void {
}, client);
if (config.autoRecall !== false) {
// Harness assembles the prompt before appending claimed messages to history.
ctx.on("agent/inbox/claimed", ({ agent, message }) => {
if (message.source.kind !== "user") return;
const state = stateFor(agent.session);
state.currentPrompt = state.lifecycle.prepareConversation([message]).at(-1)?.content;
});
ctx.on("system-prompt/assemble", async (_input, context, next): Promise<PromptAssembly> => {
const assembly = await next();
const { agent, signal } = context;
if (!agent || signal?.aborted) return assembly;
const state = stateFor(agent.session);
const prompt = state.currentPrompt ?? state.lifecycle.prepareConversation(
const prompt = state.lifecycle.prepareConversation(
agent.session
.deriveMessages()
.filter((message) => message.role === "user" && message.source?.kind === "user"),
@@ -167,7 +144,7 @@ export function apply(ctx: Context, config: Config): void {
const started = Date.now();
try {
const result = await client.search(query, {
filters: searchFilters({}, agent.session),
filters: resolveSearchFilters({}, userId),
topK: AUTO_RECALL_LIMIT,
});
captureEvent("deepseek.recall.auto", {
@@ -184,7 +161,7 @@ export function apply(ctx: Context, config: Config): void {
}, client);
throw err;
}
}, () => !signal?.aborted);
});
if (!memoryContext || signal?.aborted) return assembly;
return {
...assembly,
@@ -206,8 +183,8 @@ export function apply(ctx: Context, config: Config): void {
const conversation = state.lifecycle.prepareConversation(state.messages);
state.messages = [];
if (event.data.reason.kind !== "completed" || conversation.length === 0) return;
void Promise.resolve()
.then(() => client.add(conversation, { ...addParams({}, session), source: SOURCE }))
void client
.add(conversation, { userId, source: SOURCE })
.then(() => captureEvent("deepseek.capture.auto", {
success: true,
message_count: conversation.length,
@@ -235,12 +212,12 @@ export function apply(ctx: Context, config: Config): void {
...scopeParams,
},
output: textOutput,
async execute({ query, limit, userId: u, agentId, runId }, exec) {
async execute({ query, limit, userId: u, agentId, runId }) {
if (u?.trim() && u.trim() !== userId && config.allowUserOverride !== true) {
throw new Error("Cross-user access requires allowUserOverride in plugin configuration.");
}
const safeQuery = toolLifecycle.prepareUserText(query);
const filters = searchFilters({ userId: u, agentId, runId }, exec.agent?.session);
const filters = resolveSearchFilters({ userId: u, agentId, runId }, userId);
const topK = limit && limit > 0 ? limit : DEFAULT_SEARCH_LIMIT;
const started = Date.now();
try {
@@ -288,17 +265,17 @@ export function apply(ctx: Context, config: Config): void {
...scopeParams,
},
output: textOutput,
async execute({ text, userId: u, agentId, runId }, exec) {
async execute({ text, userId: u, agentId, runId }) {
if (u?.trim() && u.trim() !== userId && config.allowUserOverride !== true) {
throw new Error("Cross-user access requires allowUserOverride in plugin configuration.");
}
const params = addParams({ userId: u, agentId, runId }, exec.agent?.session);
const addParams = resolveAddParams({ userId: u, agentId, runId }, userId);
const started = Date.now();
try {
const result = await client.add(
[{ role: "user", content: toolLifecycle.prepareUserText(text) }],
{
...params,
...addParams,
source: SOURCE,
},
);
@@ -1,16 +1,5 @@
import { createHash } from "node:crypto";
import { realpathSync } from "node:fs";
import { isAbsolute } from "node:path";
export {
entityAddParams as resolveAddParams,
entitySearchFilters as resolveSearchFilters,
} from "../../agent-plugin-core/typescript/src/identity.ts";
export type { EntityParams } from "../../agent-plugin-core/typescript/src/identity.ts";
export function resolveWorkspaceId(cwd: string | undefined): string {
if (!cwd || !isAbsolute(cwd)) {
throw new Error("Workspace memory scope requires an absolute session workspace path.");
}
return `deepseek-workspace-${createHash("sha256").update(realpathSync(cwd)).digest("hex")}`;
}
@@ -1,7 +1,4 @@
import { describe, it, expect, vi, beforeEach, afterEach } from "vitest";
import { mkdtempSync, mkdirSync, rmSync, symlinkSync } from "node:fs";
import { tmpdir } from "node:os";
import { join } from "node:path";
// Offline mock of the Mem0 SDK so these tests never touch the network.
const mockSearch = vi.fn();
@@ -78,11 +75,6 @@ describe("apply() config validation", () => {
expect(() => applyAndCollect({ apiKey: "k", userId: "" } as Config)).toThrow(/userId/);
});
it("rejects unknown memory scope instead of silently using user-wide access", () => {
expect(() => applyAndCollect({ apiKey: "k", userId: "u", memoryScope: "typo" } as unknown as Config))
.toThrow(/memoryScope/);
});
it("registers both memory tools", () => {
const tools = applyAndCollect({ apiKey: "k", userId: "u" });
expect([...tools.keys()].sort()).toEqual(["add_memory", "search_memory"]);
@@ -90,65 +82,6 @@ describe("apply() config validation", () => {
});
describe("Harness lifecycle", () => {
it("delivers a recalled memory on retry after the first attempt was canceled", async () => {
const response = { results: [{ id: "m1", memory: "A saved fact" }] };
const controller = new AbortController();
const listeners = applyAndCollectListeners({ apiKey: "k", userId: "u" });
const assemble = listeners.get("system-prompt/assemble")!;
const base = { sections: [], contexts: [], tools: [], variables: {} };
const agent = { session: { deriveMessages: () => [] } };
const claim = () =>
listeners.get("agent/inbox/claimed")!({
agent, turn: 1,
message: { role: "user", source: { kind: "user" }, content: "Recall my saved information" },
});
mockSearch
.mockImplementationOnce(async () => {
controller.abort();
return response;
})
.mockResolvedValue(response);
claim();
expect(await assemble(base, { agent, signal: controller.signal }, async () => base)).toBe(base);
claim();
const retried = await assemble(base, { agent, signal: new AbortController().signal }, async () => base);
expect(mockSearch).toHaveBeenCalledTimes(2);
expect(retried).toMatchObject({
contexts: [{ name: "mem0:recall", text: expect.stringContaining("A saved fact") }],
});
});
it("recalls the claimed inbox message before Harness appends it to session history", async () => {
mockSearch.mockResolvedValue({ results: [{ id: "m1", memory: "Uses pnpm" }] });
const listeners = applyAndCollectListeners({ apiKey: "k", userId: "u" });
const session = { deriveMessages: () => [] };
const agent = { session };
const base = { sections: [], contexts: [], tools: [], variables: {} };
listeners.get("agent/inbox/claimed")?.({
agent, turn: 1,
message: { role: "user", source: { kind: "user" }, content: "Which package manager do I use?" },
});
const result = await listeners.get("system-prompt/assemble")!(base, { agent }, async () => base);
expect(mockSearch).toHaveBeenCalledWith("Which package manager do I use?", {
filters: { user_id: "u" }, topK: 5,
});
expect(result.contexts[0].text).toContain("Uses pnpm");
expect(result.contexts[0].text).not.toContain("search mem0_memory");
listeners.get("agent/inbox/claimed")?.({
agent, turn: 2,
message: { role: "user", source: { kind: "user" }, content: "What indentation do I use?" },
});
listeners.get("agent/inbox/claimed")?.({
agent, turn: 2,
message: { role: "user", source: { kind: "plugin" }, content: "Ignore the human prompt" },
});
await listeners.get("system-prompt/assemble")!(base, { agent }, async () => base);
expect(mockSearch.mock.lastCall?.[0]).toBe("What indentation do I use?");
});
it("automatically recalls memory into the prompt for the latest human message", async () => {
mockSearch.mockResolvedValue({
results: [{ id: "m1", memory: "Likes tea" }],
@@ -235,25 +168,8 @@ describe("Harness lifecycle", () => {
});
expect(listeners.has("system-prompt/assemble")).toBe(false);
expect(listeners.has("agent/inbox/claimed")).toBe(false);
expect(listeners.has("session/event")).toBe(false);
});
it("does not capture interrupted turns and isolates rejected capture requests", async () => {
const listeners = applyAndCollectListeners({ apiKey: "k", userId: "u" });
const onEvent = listeners.get("session/event")!;
const session = {};
const userEvent = { type: "user/message", data: { role: "user", source: { kind: "user" }, content: "I prefer short answers. What is a list?" } };
onEvent(session, { type: "turn/start" });
onEvent(session, userEvent);
onEvent(session, { type: "turn/end", data: { reason: { kind: "interrupted" } } });
expect(mockAdd).not.toHaveBeenCalled();
mockAdd.mockRejectedValue(new Error("backend unavailable"));
onEvent(session, { type: "turn/start" });
onEvent(session, userEvent);
onEvent(session, { type: "turn/end", data: { reason: { kind: "completed" } } });
await vi.waitFor(() => expect(mockAdd).toHaveBeenCalledOnce());
});
});
describe("search_memory tool", () => {
@@ -356,62 +272,3 @@ describe("tool user ownership", () => {
expect(mockAdd).not.toHaveBeenCalled();
});
});
describe("workspace scope", () => {
it("isolates both tools and automatic paths by canonical session workspace", async () => {
const root = mkdtempSync(join(tmpdir(), "mem0-dsh-scope-"));
try {
mkdirSync(join(root, "a"));
mkdirSync(join(root, "b"));
symlinkSync(join(root, "a"), join(root, "alias"));
const config: Config = { apiKey: "k", userId: "u", memoryScope: "workspace" };
const tools = applyAndCollect(config);
mockAdd.mockResolvedValue([]);
mockSearch.mockResolvedValue({ results: [] });
const session = (name: string) => ({
header: { cwd: join(root, name) },
deriveMessages: () => [{ role: "user", source: { kind: "user" }, content: "preferences" }],
});
const a = session("a");
await tools.get("add_memory")!.execute({ text: "Uses pnpm" }, { agent: { session: a } });
const appId = mockAdd.mock.lastCall?.[1].appId;
expect(appId).toMatch(/^deepseek-workspace-[a-f0-9]{64}$/);
await tools.get("search_memory")!.execute({ query: "preferences" }, { agent: { session: session("alias") } });
expect(mockSearch.mock.lastCall?.[1].filters).toEqual({ user_id: "u", app_id: appId });
await tools.get("search_memory")!.execute({ query: "preferences" }, { agent: { session: session("b") } });
expect(mockSearch.mock.lastCall?.[1].filters.app_id).not.toBe(appId);
const listeners = applyAndCollectListeners(config);
const base = { sections: [], contexts: [], tools: [], variables: {} };
await listeners.get("system-prompt/assemble")!(base, { agent: { session: a } }, async () => base);
expect(mockSearch.mock.lastCall?.[1].filters).toEqual({ user_id: "u", app_id: appId });
const onEvent = listeners.get("session/event")!;
mockAdd.mockClear();
onEvent(a, { type: "turn/start" });
onEvent(a, { type: "user/message", data: { role: "user", source: { kind: "user" }, content: "I prefer short answers. What is a list?" } });
onEvent(a, { type: "turn/end", data: { reason: { kind: "completed" } } });
await vi.waitFor(() => expect(mockAdd.mock.lastCall?.[1]).toMatchObject({ userId: "u", appId }));
expect(mockAdd).toHaveBeenCalledOnce();
expect(mockAdd.mock.lastCall?.[0]).toEqual([
{ role: "user", content: "I prefer short answers. What is a list?" },
]);
} finally { rmSync(root, { recursive: true, force: true }); }
});
it("fails closed without a workspace while automatic paths leave the agent running", async () => {
const config: Config = { apiKey: "k", userId: "u", memoryScope: "workspace" };
const tools = applyAndCollect(config);
await expect(tools.get("add_memory")!.execute({ text: "x" }, {})).rejects.toThrow(/workspace/);
await expect(tools.get("search_memory")!.execute({ query: "x" }, {})).rejects.toThrow(/workspace/);
const listeners = applyAndCollectListeners(config);
const session = { header: {}, deriveMessages: () => [{ role: "user", source: { kind: "user" }, content: "hello" }] };
const base = { sections: [], contexts: [], tools: [], variables: {} };
expect(await listeners.get("system-prompt/assemble")!(base, { agent: { session } }, async () => base)).toBe(base);
const onEvent = listeners.get("session/event")!;
onEvent(session, { type: "user/message", data: { role: "user", source: { kind: "user" }, content: "hello" } });
expect(() => onEvent(session, { type: "turn/end", data: { reason: { kind: "completed" } } })).not.toThrow();
await new Promise((resolve) => setImmediate(resolve));
expect(mockAdd).not.toHaveBeenCalled();
expect(mockSearch).not.toHaveBeenCalled();
});
});
@@ -1,14 +0,0 @@
import { readFileSync, existsSync } from "node:fs";
import { describe, expect, it } from "vitest";
describe("installable Harness bundle", () => {
it("ships a native activation patch and builds before packing", () => {
const root = new URL("../", import.meta.url);
const manifest = JSON.parse(readFileSync(new URL("package.json", root), "utf8"));
expect(manifest.scripts.prepack).toBe("pnpm build");
expect(manifest.dsh.bundle.patch).toBe("./cordis.patch.yml");
expect(manifest.files).toContain("cordis.patch.yml");
expect(existsSync(new URL(manifest.dsh.bundle.patch, root))).toBe(true);
expect(readFileSync(new URL(manifest.dsh.bundle.patch, root), "utf8")).toContain("@mem0/deepseek-plugin");
});
});
+2 -2
View File
@@ -74,8 +74,8 @@
"brace-expansion@<1.1.16": ">=1.1.16 <2.0.0",
"brace-expansion@>=2.0.0 <2.1.2": ">=2.1.2 <3.0.0",
"brace-expansion@>=5.0.0 <5.0.8": ">=5.0.8",
"js-yaml@<3.15.1": ">=3.15.1 <4.0.0",
"js-yaml@>=4.0.0 <4.3.1": ">=4.3.1 <5.0.0"
"js-yaml@<3.15.2": ">=3.15.2 <4.0.0",
"js-yaml@>=4.0.0 <4.3.2": ">=4.3.2 <5.0.0"
}
}
}
+11 -11
View File
@@ -11,8 +11,8 @@ overrides:
brace-expansion@<1.1.16: '>=1.1.16 <2.0.0'
brace-expansion@>=2.0.0 <2.1.2: '>=2.1.2 <3.0.0'
brace-expansion@>=5.0.0 <5.0.8: '>=5.0.8'
js-yaml@<3.15.1: '>=3.15.1 <4.0.0'
js-yaml@>=4.0.0 <4.3.1: '>=4.3.1 <5.0.0'
js-yaml@<3.15.2: '>=3.15.2 <4.0.0'
js-yaml@>=4.0.0 <4.3.2: '>=4.3.2 <5.0.0'
importers:
@@ -1494,12 +1494,12 @@ packages:
js-tokens@4.0.0:
resolution: {integrity: sha512-RdJUflcE3cUzKiMqQgsCu06FPu9UdIJO0beYbPhHN4k6apgJtifcoCtT9bcxOpYBtpD2kCM6Sbzg4CausW/PKQ==}
js-yaml@3.15.1:
resolution: {integrity: sha512-S99WuO3HlhO3XN41EtYUNl9zzXjoJx7QvmipxsJVxtCBT0YHEFy+iOJhjSvrmV12nYhWpZaM8lPHkJm0yUMbag==}
js-yaml@3.15.2:
resolution: {integrity: sha512-6EuL879VkRA+1Cz578mKMiKvjPNEuk6+r1JaFzoSWejZmtf7xWbIyw1e3KkxlkzTIt9Taw6JBhEppG7utc1P+w==}
hasBin: true
js-yaml@4.3.1:
resolution: {integrity: sha512-CY6crGq313MX8GkwvB7tzgp99vjQxY1++5y10/BKN/GUfHqWaOGQMNZkBvqSzsZKWk/ijwHlWzzkLulsGHhjWQ==}
js-yaml@4.3.2:
resolution: {integrity: sha512-SFNOvSJ+Dgf/9An904Yx+CgSlIPCkIpao4qo51lpee25TIRejdH3rhR4EZMGoNx3/TP3O+wzWuiTFl4sqbltzA==}
hasBin: true
jsesc@3.1.0:
@@ -2506,7 +2506,7 @@ snapshots:
globals: 13.24.0
ignore: 5.3.2
import-fresh: 3.3.1
js-yaml: 4.3.1
js-yaml: 4.3.2
minimatch: 3.1.5
strip-json-comments: 3.1.1
transitivePeerDependencies:
@@ -2546,7 +2546,7 @@ snapshots:
camelcase: 5.3.1
find-up: 4.1.0
get-package-type: 0.1.0
js-yaml: 3.15.1
js-yaml: 3.15.2
resolve-from: 5.0.0
'@istanbuljs/schema@0.1.6': {}
@@ -3353,7 +3353,7 @@ snapshots:
imurmurhash: 0.1.4
is-glob: 4.0.3
is-path-inside: 3.0.3
js-yaml: 4.3.1
js-yaml: 4.3.2
json-stable-stringify-without-jsonify: 1.0.1
levn: 0.4.1
lodash.merge: 4.6.2
@@ -4173,12 +4173,12 @@ snapshots:
js-tokens@4.0.0: {}
js-yaml@3.15.1:
js-yaml@3.15.2:
dependencies:
argparse: 1.0.10
esprima: 4.0.1
js-yaml@4.3.1:
js-yaml@4.3.2:
dependencies:
argparse: 2.0.1
+1 -1
View File
@@ -73,7 +73,7 @@
"uuid@<11.1.1": ">=11.1.1",
"esbuild": ">=0.28.1",
"undici@<7.29.1": ">=7.29.1 <8.0.0",
"axios@<1.18.0": ">=1.18.0 <2.0.0",
"axios@<1.20.0": ">=1.20.0 <2.0.0",
"postcss@<8.5.18": ">=8.5.18 <9.0.0",
"mongoose@>=9.0.0 <9.7.2": ">=9.7.2 <10.0.0"
}
+5 -5
View File
@@ -14,7 +14,7 @@ overrides:
uuid@<11.1.1: '>=11.1.1'
esbuild: '>=0.28.1'
undici@<7.29.1: '>=7.29.1 <8.0.0'
axios@<1.18.0: '>=1.18.0 <2.0.0'
axios@<1.20.0: '>=1.20.0 <2.0.0'
postcss@<8.5.18: '>=8.5.18 <9.0.0'
mongoose@>=9.0.0 <9.7.2: '>=9.7.2 <10.0.0'
@@ -857,8 +857,8 @@ packages:
asynckit@0.4.0:
resolution: {integrity: sha512-Oei9OH4tRh0YqU3GxhX79dM/mwVgvbZJaSNaRk+bshkj0S5cfHcgYakreBjrHwatXKbz+IoIdYLxrKim2MjW0Q==}
axios@1.18.1:
resolution: {integrity: sha512-3nTvFlvpn9Zu/RkHUqtc7/+al4UpRW5az71ap5zccp6e8RAYEzhMTecX8Dz1wWDYrPpUoB1HAQEGEAEvUr7S9g==}
axios@1.20.0:
resolution: {integrity: sha512-r8aOh8j9cGKpgQAqpzrUHnSIc6a59Y3Xf/cv8sy1DrHCkZHzQGEuoq1tARk6qSyDdtQGSDgpb9kFlruzPvrgwg==}
base-64@0.1.0:
resolution: {integrity: sha512-Y5gU45svrR5tI2Vt/X9GPd3L0HNIKzGu202EjxrXMpuc2V2CiKgemAbUUsqYmZJvPtCXoUKjNZwBJzsNScUbXA==}
@@ -2906,7 +2906,7 @@ snapshots:
asynckit@0.4.0: {}
axios@1.18.1:
axios@1.20.0:
dependencies:
follow-redirects: 1.16.0
form-data: 4.0.6
@@ -3529,7 +3529,7 @@ snapshots:
'@supabase/supabase-js': 2.108.1
'@types/jest': 29.5.14
'@types/pg': 8.11.0
axios: 1.18.1
axios: 1.20.0
better-sqlite3: 12.10.0
cloudflare: 4.5.0
compromise: 14.15.1
+1 -1
View File
@@ -22,6 +22,6 @@ overrides:
"uuid@<11.1.1": ">=11.1.1"
"esbuild": ">=0.28.1"
"undici@<7.29.1": ">=7.29.1 <8.0.0"
"axios@<1.18.0": ">=1.18.0 <2.0.0"
"axios@<1.20.0": ">=1.20.0 <2.0.0"
"postcss@<8.5.18": ">=8.5.18 <9.0.0"
"mongoose@>=9.0.0 <9.7.2": ">=9.7.2 <10.0.0"
+1 -1
View File
@@ -74,7 +74,7 @@
"esbuild": ">=0.28.1",
"undici@<7.29.1": ">=7.29.1 <8.0.0",
"undici@>=8.0.0 <8.10.2": ">=8.10.2 <9.0.0",
"axios@<1.18.0": ">=1.18.0 <2.0.0",
"axios@<1.20.0": ">=1.20.0 <2.0.0",
"brace-expansion@>=3.0.0 <5.0.8": ">=5.0.8 <6.0.0",
"postcss@<8.5.18": ">=8.5.18 <9.0.0",
"mongoose@>=9.0.0 <9.7.2": ">=9.7.2 <10.0.0",
+5 -5
View File
@@ -10,7 +10,7 @@ overrides:
esbuild: '>=0.28.1'
undici@<7.29.1: '>=7.29.1 <8.0.0'
undici@>=8.0.0 <8.10.2: '>=8.10.2 <9.0.0'
axios@<1.18.0: '>=1.18.0 <2.0.0'
axios@<1.20.0: '>=1.20.0 <2.0.0'
brace-expansion@>=3.0.0 <5.0.8: '>=5.0.8 <6.0.0'
postcss@<8.5.18: '>=8.5.18 <9.0.0'
mongoose@>=9.0.0 <9.7.2: '>=9.7.2 <10.0.0'
@@ -1066,8 +1066,8 @@ packages:
asynckit@0.4.0:
resolution: {integrity: sha512-Oei9OH4tRh0YqU3GxhX79dM/mwVgvbZJaSNaRk+bshkj0S5cfHcgYakreBjrHwatXKbz+IoIdYLxrKim2MjW0Q==}
axios@1.18.1:
resolution: {integrity: sha512-3nTvFlvpn9Zu/RkHUqtc7/+al4UpRW5az71ap5zccp6e8RAYEzhMTecX8Dz1wWDYrPpUoB1HAQEGEAEvUr7S9g==}
axios@1.20.0:
resolution: {integrity: sha512-r8aOh8j9cGKpgQAqpzrUHnSIc6a59Y3Xf/cv8sy1DrHCkZHzQGEuoq1tARk6qSyDdtQGSDgpb9kFlruzPvrgwg==}
balanced-match@4.0.4:
resolution: {integrity: sha512-BLrgEcRTwX2o6gGxGOCNyMvGSp35YofuYzw9h1IMTRmKqttAZZVU67bdb9Pr2vUHA8+j3i2tJfjO6C6+4myGTA==}
@@ -3598,7 +3598,7 @@ snapshots:
asynckit@0.4.0: {}
axios@1.18.1:
axios@1.20.0:
dependencies:
follow-redirects: 1.16.0
form-data: 4.0.6
@@ -4253,7 +4253,7 @@ snapshots:
'@supabase/supabase-js': 2.108.1
'@types/jest': 29.5.14
'@types/pg': 8.11.0
axios: 1.18.1
axios: 1.20.0
better-sqlite3: 12.10.0
cloudflare: 4.5.0
compromise: 14.15.1
@@ -7,7 +7,7 @@ overrides:
"esbuild": ">=0.28.1"
"undici@<7.29.1": ">=7.29.1 <8.0.0"
"undici@>=8.0.0 <8.10.2": ">=8.10.2 <9.0.0"
"axios@<1.18.0": ">=1.18.0 <2.0.0"
"axios@<1.20.0": ">=1.20.0 <2.0.0"
"brace-expansion@>=3.0.0 <5.0.8": ">=5.0.8 <6.0.0"
"postcss@<8.5.18": ">=8.5.18 <9.0.0"
"mongoose@>=9.0.0 <9.7.2": ">=9.7.2 <10.0.0"
+2 -2
View File
@@ -88,8 +88,8 @@
"esbuild": ">=0.28.1",
"brace-expansion@<1.1.16": ">=1.1.16 <2.0.0",
"brace-expansion@>=3.0.0 <5.0.8": ">=5.0.8 <6.0.0",
"js-yaml@<3.15.1": ">=3.15.1 <4.0.0",
"js-yaml@>=4.0.0 <4.3.1": ">=4.3.1 <5.0.0",
"js-yaml@<3.15.2": ">=3.15.2 <4.0.0",
"js-yaml@>=4.0.0 <4.3.2": ">=4.3.2 <5.0.0",
"browserslist@<4.28.7": ">=4.28.7 <5.0.0"
}
}
+6 -6
View File
@@ -14,8 +14,8 @@ overrides:
esbuild: '>=0.28.1'
brace-expansion@<1.1.16: '>=1.1.16 <2.0.0'
brace-expansion@>=3.0.0 <5.0.8: '>=5.0.8 <6.0.0'
js-yaml@<3.15.1: '>=3.15.1 <4.0.0'
js-yaml@>=4.0.0 <4.3.1: '>=4.3.1 <5.0.0'
js-yaml@<3.15.2: '>=3.15.2 <4.0.0'
js-yaml@>=4.0.0 <4.3.2: '>=4.3.2 <5.0.0'
browserslist@<4.28.7: '>=4.28.7 <5.0.0'
importers:
@@ -1356,8 +1356,8 @@ packages:
js-tokens@4.0.0:
resolution: {integrity: sha512-RdJUflcE3cUzKiMqQgsCu06FPu9UdIJO0beYbPhHN4k6apgJtifcoCtT9bcxOpYBtpD2kCM6Sbzg4CausW/PKQ==}
js-yaml@3.15.1:
resolution: {integrity: sha512-S99WuO3HlhO3XN41EtYUNl9zzXjoJx7QvmipxsJVxtCBT0YHEFy+iOJhjSvrmV12nYhWpZaM8lPHkJm0yUMbag==}
js-yaml@3.15.2:
resolution: {integrity: sha512-6EuL879VkRA+1Cz578mKMiKvjPNEuk6+r1JaFzoSWejZmtf7xWbIyw1e3KkxlkzTIt9Taw6JBhEppG7utc1P+w==}
hasBin: true
jsesc@3.1.0:
@@ -2231,7 +2231,7 @@ snapshots:
camelcase: 5.3.1
find-up: 4.1.0
get-package-type: 0.1.0
js-yaml: 3.15.1
js-yaml: 3.15.2
resolve-from: 5.0.0
'@istanbuljs/schema@0.1.6': {}
@@ -3360,7 +3360,7 @@ snapshots:
js-tokens@4.0.0: {}
js-yaml@3.15.1:
js-yaml@3.15.2:
dependencies:
argparse: 1.0.10
esprima: 4.0.1
@@ -15,6 +15,6 @@ overrides:
"esbuild": ">=0.28.1"
"brace-expansion@<1.1.16": ">=1.1.16 <2.0.0"
"brace-expansion@>=3.0.0 <5.0.8": ">=5.0.8 <6.0.0"
"js-yaml@<3.15.1": ">=3.15.1 <4.0.0"
"js-yaml@>=4.0.0 <4.3.1": ">=4.3.1 <5.0.0"
"js-yaml@<3.15.2": ">=3.15.2 <4.0.0"
"js-yaml@>=4.0.0 <4.3.2": ">=4.3.2 <5.0.0"
"browserslist@<4.28.7": ">=4.28.7 <5.0.0"
+1 -1
View File
@@ -72,7 +72,7 @@
"undici@<7.29.0": ">=7.29.0 <8.0.0",
"undici@>=8.0.0 <8.9.0": ">=8.9.0 <9.0.0",
"brace-expansion@<1.1.16": ">=1.1.16 <2.0.0",
"js-yaml@<3.15.1": ">=3.15.1 <4.0.0"
"js-yaml@<3.15.2": ">=3.15.2 <4.0.0"
}
}
}
+5 -5
View File
@@ -11,7 +11,7 @@ overrides:
undici@<7.29.0: '>=7.29.0 <8.0.0'
undici@>=8.0.0 <8.9.0: '>=8.9.0 <9.0.0'
brace-expansion@<1.1.16: '>=1.1.16 <2.0.0'
js-yaml@<3.15.1: '>=3.15.1 <4.0.0'
js-yaml@<3.15.2: '>=3.15.2 <4.0.0'
importers:
@@ -951,8 +951,8 @@ packages:
js-tokens@4.0.0:
resolution: {integrity: sha512-RdJUflcE3cUzKiMqQgsCu06FPu9UdIJO0beYbPhHN4k6apgJtifcoCtT9bcxOpYBtpD2kCM6Sbzg4CausW/PKQ==}
js-yaml@3.15.1:
resolution: {integrity: sha512-S99WuO3HlhO3XN41EtYUNl9zzXjoJx7QvmipxsJVxtCBT0YHEFy+iOJhjSvrmV12nYhWpZaM8lPHkJm0yUMbag==}
js-yaml@3.15.2:
resolution: {integrity: sha512-6EuL879VkRA+1Cz578mKMiKvjPNEuk6+r1JaFzoSWejZmtf7xWbIyw1e3KkxlkzTIt9Taw6JBhEppG7utc1P+w==}
hasBin: true
jsesc@3.1.0:
@@ -1654,7 +1654,7 @@ snapshots:
camelcase: 5.3.1
find-up: 4.1.0
get-package-type: 0.1.0
js-yaml: 3.15.1
js-yaml: 3.15.2
resolve-from: 5.0.0
'@istanbuljs/schema@0.1.6': {}
@@ -2714,7 +2714,7 @@ snapshots:
js-tokens@4.0.0: {}
js-yaml@3.15.1:
js-yaml@3.15.2:
dependencies:
argparse: 1.0.10
esprima: 4.0.1
+1 -1
View File
@@ -8,4 +8,4 @@ overrides:
"undici@<7.29.0": ">=7.29.0 <8.0.0"
"undici@>=8.0.0 <8.9.0": ">=8.9.0 <9.0.0"
"brace-expansion@<1.1.16": ">=1.1.16 <2.0.0"
"js-yaml@<3.15.1": ">=3.15.1 <4.0.0"
"js-yaml@<3.15.2": ">=3.15.2 <4.0.0"
+9 -7
View File
@@ -104,7 +104,7 @@
"@types/jest": "^29.5.14"
},
"dependencies": {
"axios": "^1.18.0",
"axios": "^1.20.0",
"openai": "^4.93.0",
"uuid": "^11.1.1",
"zod": "^3.24.1"
@@ -285,9 +285,9 @@
"picomatch@<2.3.2": "^2.3.2",
"picomatch@>=4.0.0 <4.0.4": "^4.0.4",
"jws@4.0.0": "4.0.1",
"js-yaml@<3.15.1": ">=3.15.1 <4.0.0",
"js-yaml@>=4.0.0 <4.3.1": ">=4.3.1 <5.0.0",
"sharp@<0.35.0": ">=0.35.0 <0.36.0",
"js-yaml@<3.15.2": ">=3.15.2 <4.0.0",
"js-yaml@>=4.0.0 <4.3.2": ">=4.3.2 <5.0.0",
"sharp@<0.35.4": ">=0.35.4 <0.36.0",
"adm-zip@<0.6.1": ">=0.6.1 <0.7.0",
"langsmith@<0.6.0": "^0.6.0",
"minimatch@<3.1.3": "^3.1.3",
@@ -306,9 +306,9 @@
"undici@<7.29.1": ">=7.29.1 <8.0.0",
"@aws-sdk/client-bedrock-runtime": "3.967.0",
"@aws-sdk/client-neptune-graph": "3.966.0",
"axios@<1.18.0": ">=1.18.0 <2.0.0",
"axios@<1.20.0": ">=1.20.0 <2.0.0",
"brace-expansion@<1.1.16": ">=1.1.16 <2.0.0",
"brace-expansion@>=2.0.0 <2.1.4": ">=2.1.4 <3.0.0",
"brace-expansion@>=2.0.0 <2.1.6": ">=2.1.6 <3.0.0",
"brace-expansion@>=3.0.0 <5.0.8": ">=5.0.8 <6.0.0",
"fast-xml-parser@>=5.0.0 <5.10.1": ">=5.10.1 <6.0.0",
"tar@<7.5.21": ">=7.5.21 <8.0.0",
@@ -317,7 +317,9 @@
"protobufjs@<7.6.5": ">=7.6.5 <8.0.0",
"ip-address@<10.5.1": ">=10.5.1 <11.0.0",
"browserslist@<4.28.7": ">=4.28.7 <5.0.0",
"mysql2@<3.23.1": ">=3.23.1 <4.0.0"
"mysql2@<3.23.1": ">=3.23.1 <4.0.0",
"basic-ftp@<6.2.1": ">=6.2.1 <7.0.0",
"@grpc/grpc-js@>=1.14.0 <1.14.5": ">=1.14.5 <2.0.0"
}
}
}
+155 -153
View File
@@ -9,9 +9,9 @@ overrides:
picomatch@<2.3.2: ^2.3.2
picomatch@>=4.0.0 <4.0.4: ^4.0.4
jws@4.0.0: 4.0.1
js-yaml@<3.15.1: '>=3.15.1 <4.0.0'
js-yaml@>=4.0.0 <4.3.1: '>=4.3.1 <5.0.0'
sharp@<0.35.0: '>=0.35.0 <0.36.0'
js-yaml@<3.15.2: '>=3.15.2 <4.0.0'
js-yaml@>=4.0.0 <4.3.2: '>=4.3.2 <5.0.0'
sharp@<0.35.4: '>=0.35.4 <0.36.0'
adm-zip@<0.6.1: '>=0.6.1 <0.7.0'
langsmith@<0.6.0: ^0.6.0
minimatch@<3.1.3: ^3.1.3
@@ -30,9 +30,9 @@ overrides:
undici@<7.29.1: '>=7.29.1 <8.0.0'
'@aws-sdk/client-bedrock-runtime': 3.967.0
'@aws-sdk/client-neptune-graph': 3.966.0
axios@<1.18.0: '>=1.18.0 <2.0.0'
axios@<1.20.0: '>=1.20.0 <2.0.0'
brace-expansion@<1.1.16: '>=1.1.16 <2.0.0'
brace-expansion@>=2.0.0 <2.1.4: '>=2.1.4 <3.0.0'
brace-expansion@>=2.0.0 <2.1.6: '>=2.1.6 <3.0.0'
brace-expansion@>=3.0.0 <5.0.8: '>=5.0.8 <6.0.0'
fast-xml-parser@>=5.0.0 <5.10.1: '>=5.10.1 <6.0.0'
tar@<7.5.21: '>=7.5.21 <8.0.0'
@@ -42,6 +42,8 @@ overrides:
ip-address@<10.5.1: '>=10.5.1 <11.0.0'
browserslist@<4.28.7: '>=4.28.7 <5.0.0'
mysql2@<3.23.1: '>=3.23.1 <4.0.0'
basic-ftp@<6.2.1: '>=6.2.1 <7.0.0'
'@grpc/grpc-js@>=1.14.0 <1.14.5': '>=1.14.5 <2.0.0'
patchedDependencies:
tar@7.5.22:
@@ -119,8 +121,8 @@ importers:
specifier: ^2.4.0 || ^3.0.0
version: 3.0.3
axios:
specifier: ^1.18.0
version: 1.18.1
specifier: ^1.20.0
version: 1.20.0
better-sqlite3:
specifier: ^12.6.2
version: 12.10.0
@@ -861,8 +863,8 @@ packages:
resolution: {integrity: sha512-L38Ax21uF2OPUmCRWycZ/dZdMYf7gMrtClcxvVrqJVFmn8ET2M++GYmFGJpLqOHS1beATxOXLWe7y2ijSQz/ng==}
engines: {node: '>=20'}
'@emnapi/runtime@1.11.2':
resolution: {integrity: sha512-kyOl3X0DuTiT1h2ft8r2fYO8JYtU9a9Xis/zBSiGArNaagCOWx90N1k2wxp18czFDH+OgcWGb5ZP/XMt3dcyPA==}
'@emnapi/runtime@1.11.3':
resolution: {integrity: sha512-Xz4Tpyki7XyrpbUK1jR1AhdAdaXyhhY4lZ3neLodmhpuWfy2PAQN5B46sAiU4liOXGLkHypn/qU+jvfWSCYYLA==}
'@esbuild/aix-ppc64@0.28.1':
resolution: {integrity: sha512-Svl7tq8k/08+p6CXPpRjQ1fKX+1odH/BQbb48fV6fj3CWHhsoIOoY87w1oHXm0qEpkIK3ZfVgp0hed3XBXzXMQ==}
@@ -1038,8 +1040,8 @@ packages:
peerDependencies:
graphql: ^0.8.0 || ^0.9.0 || ^0.10.0 || ^0.11.0 || ^0.12.0 || ^0.13.0 || ^14.0.0 || ^15.0.0 || ^16.0.0 || ^17.0.0
'@grpc/grpc-js@1.14.4':
resolution: {integrity: sha512-k9Dj3DV/itK9D06Y8f190Qgop7/Ui+D0njFV3LHMPwPT75DpXLQohE9Wmz0QElrJnzsjB7KPWiKJbOl7IPDArQ==}
'@grpc/grpc-js@1.14.5':
resolution: {integrity: sha512-7VZM+SVdEcUUqSQeNI3zM8Qs/BhQKZndPo2h5VkYkAM8Iz0wJIa8mKV5ekQGqG8UUsnkQ0NMxIxwkIHYvj0qOw==}
engines: {node: '>=12.10.0'}
'@grpc/proto-loader@0.8.1':
@@ -1075,144 +1077,144 @@ packages:
resolution: {integrity: sha512-Td76q7j57o/tLVdgS746cYARfSyxk8iEfRxewL9h4OMzYhbW4TAcppl0mT4eyqXddh6L/jwoM75mo7ixa/pCeQ==}
engines: {node: '>=18'}
'@img/sharp-darwin-arm64@0.35.3':
resolution: {integrity: sha512-RMnFX7YQsMoh7lWfcM4NEHHymBX/rLuKNPVM84XE9ONPcaSCDgE7CHIHpSgPcO2xcRthgBy1HfNO319mwhIAkg==}
'@img/sharp-darwin-arm64@0.35.5':
resolution: {integrity: sha512-QRUlFQ0WxvdWyqqG/WtI3iupfD5rBzmCHXSdPsY91sAtVtTo7Q4cb6zOccZ3gqEqkr0f1As1ehLqmEpDsRf+lg==}
engines: {node: '>=20.9.0'}
cpu: [arm64]
os: [darwin]
'@img/sharp-darwin-x64@0.35.3':
resolution: {integrity: sha512-Xo+5uFBtLN0BKqieTxiFzFPQAUlBbbH5iBKyRX/z1JrbnYsHTfKJnUfL8+p2TPXr1pXqao4eeL4Rl144uDpK9w==}
'@img/sharp-darwin-x64@0.35.5':
resolution: {integrity: sha512-+BR255RhDlpygUpOc/Jdt1nT6DQ3XG/ERo5wbcdOf5Q320dKtPCKPLR1LJs9VGXRaMa8l1uUa0tkCNOXiAxZUw==}
engines: {node: '>=20.9.0'}
cpu: [x64]
os: [darwin]
'@img/sharp-freebsd-wasm32@0.35.3':
resolution: {integrity: sha512-lUxcqWIj2wMQ9BrwNjngcr1gWUr5xgaGThBRqPPalIC2n67Cqj1uPh8NnA/ZhAg8hUbKl+kVHKwgUIwe6ZYPrg==}
'@img/sharp-freebsd-wasm32@0.35.5':
resolution: {integrity: sha512-Y/z91nEZ4uIBX5X3nfTovjU9lHNKFYbL2lpHCLVNmXQK03VIZvXBBt0KxbPGp2SdGSF+2mQU4e+hQaWOt86iAw==}
engines: {node: '>=20.9.0'}
os: [freebsd]
'@img/sharp-libvips-darwin-arm64@1.3.2':
resolution: {integrity: sha512-9J6ypZFpQBj4YnePGoq/S38w6nz+vqg5WZLrLGY4YuSemdMq47GMLBPO42MzwdGwpg/agZ7xzZcFHa48xlywfg==}
'@img/sharp-libvips-darwin-arm64@1.3.4':
resolution: {integrity: sha512-5R89nBYiRdUlSWJxPhO+GVtaXzXSxKnRu/xqMn3KTA3L9EB9Oy/P+Nn2f2vlhPuUdy/Zusb2DarbyTpGCfEDuw==}
cpu: [arm64]
os: [darwin]
'@img/sharp-libvips-darwin-x64@1.3.2':
resolution: {integrity: sha512-m2pW1n6cns9VaubNwsZ+c3CRYjxNQWgJ5gPlnL1nbBcpkBvFm6SCFN5o0psFHI8w9n11NKhFkeEDns98tiqbEw==}
'@img/sharp-libvips-darwin-x64@1.3.4':
resolution: {integrity: sha512-iR2OKH80yi0U+dUplyh3/xdpFvps6YkCwsXenIJxqxR1v9o+xtKTGbS9H7cps+2Vxjc8B1j96p75NmTGjIhtpQ==}
cpu: [x64]
os: [darwin]
'@img/sharp-libvips-linux-arm64@1.3.2':
resolution: {integrity: sha512-dqVSFynCox4C/J8kT16V7SIFAns0IjgLwkvYT7p8LQVmJ5OS5b6tI9IGflxTeuBS//zXeFIUbwt5dwxyZ17cnA==}
'@img/sharp-libvips-linux-arm64@1.3.4':
resolution: {integrity: sha512-Y3dgX/6lE2QhQb+Gxy0WZxfg9MEm/JBjamZpS2IklP7xIQoKN4hzAm7KcMVGtaVDt3neE9OKBC7vAfonA/Lr1A==}
cpu: [arm64]
os: [linux]
'@img/sharp-libvips-linux-arm@1.3.2':
resolution: {integrity: sha512-1eMLzy92I4J6rmi4mAT8yC3HxOtniyGELlzGbNMLLeqe052ahFQ0h6LFq+lh5DsDIdYViIDst08abvSbcEdLXQ==}
'@img/sharp-libvips-linux-arm@1.3.4':
resolution: {integrity: sha512-LmRtTsOHuvM2+wlO2Db37dx5MiZhB0FvSunciw48YjdOkZz9KAiRbm8ujeMOA1INqmei5NapFxYEK1D1ZSidmw==}
cpu: [arm]
os: [linux]
'@img/sharp-libvips-linux-ppc64@1.3.2':
resolution: {integrity: sha512-3z0NHDxD6n5I9gc05U1eW1AyRm+Gznzq3naMrthPNqE6oYykcogW0l/jfpJdjYnuNl8R7yI9pNbE1XiUeyq0Aw==}
'@img/sharp-libvips-linux-ppc64@1.3.4':
resolution: {integrity: sha512-Le6boB8Tai0Nis+gIxIpKx68UDVVIqdR8Tin5Yf1z2LJJQLDJvCDRqRu+jC2qCoD+eIomonmOwB4smBRxfVpYQ==}
cpu: [ppc64]
os: [linux]
'@img/sharp-libvips-linux-riscv64@1.3.2':
resolution: {integrity: sha512-bsb4rI+NldGOsXuej2r8OdSS8+zXDVaCWxyWrcv6kneTOlgAHtZABRzBBCwdsPiD90J4myNJuHpg6kA20ImW/w==}
'@img/sharp-libvips-linux-riscv64@1.3.4':
resolution: {integrity: sha512-aHkkIEHPRdQEegJN20MLmGtxYD9R2wQr3Cwpddnu5+YKMt6Uzax7S9h5gpZTo8wyrGuZSlfQ63OevL5mTyOC7Q==}
cpu: [riscv64]
os: [linux]
'@img/sharp-libvips-linux-s390x@1.3.2':
resolution: {integrity: sha512-/ABshyj8gCpyIrNXnHn4LorDJ0HHm1VhXPBlxZ8zAtfVPAaSafXPGn+sUSIRiwaSBy0mmFjSjiXI5mkcwdChKQ==}
'@img/sharp-libvips-linux-s390x@1.3.4':
resolution: {integrity: sha512-ra/mB6MikESDUO7Yg+Mi95bFBb9GsObURuhnOv3OqknjGe9sZrG8tCe9q0xSIGrtLgvgw0gKnFWcK4blSgQOuQ==}
cpu: [s390x]
os: [linux]
'@img/sharp-libvips-linux-x64@1.3.2':
resolution: {integrity: sha512-ITPEtgffGJ0S6G9dRyw/366tJQqFRcHWPHhC+Stpg3Z8AEMrDrTr2lhdz4f/Y/HMbRh//7Z5mBzEpVdi62Oc3w==}
'@img/sharp-libvips-linux-x64@1.3.4':
resolution: {integrity: sha512-GJ//SSXbnwSDes02umB3nDJLFcQzw8a18V8fyhqr6tV515tOEMdImjjxj1AoafMRz56F3PHgftnj1QEKSU1zkw==}
cpu: [x64]
os: [linux]
'@img/sharp-libvips-linuxmusl-arm64@1.3.2':
resolution: {integrity: sha512-zE9EdiUzUmg5mDT5a1rk5fYJ6GWPloTwWBYDS14naqHsL+EaMpDj1AWnpLgh3u0YCORv2Tt50wrcrpYqkP97Kw==}
'@img/sharp-libvips-linuxmusl-arm64@1.3.4':
resolution: {integrity: sha512-hvulFwtjUcagsis6BBxHwGFwWoNZjgYmULGVrZcyfNbjA8hKILbRxGg15/7w5HDyXHXUos/j6baAWqnCyQ2DWA==}
cpu: [arm64]
os: [linux]
'@img/sharp-libvips-linuxmusl-x64@1.3.2':
resolution: {integrity: sha512-m0lrLiUt+lBYnCFr8qV/65yMR4E/c7/wf78I5eKTdkEakFAlZ9QlzEM3QIhhAwVeUhLAHLcCq7a7Vszq/oFNZQ==}
'@img/sharp-libvips-linuxmusl-x64@1.3.4':
resolution: {integrity: sha512-6zXKeE/p39I1AmA3cJG35eyBGNqNddLnUXjhwBnsGjFPWqf5VKkDBEqaEkPDoTEtkxwi2vv8Tcr2mDyP4So7Fg==}
cpu: [x64]
os: [linux]
'@img/sharp-linux-arm64@0.35.3':
resolution: {integrity: sha512-QgKDspHPnrU+GQ55XPhGwyhC8acLVOOSyAvo1oVfFmrIXLkDNmGWzAfDZ4xK8oSA1qBQrALcHX0G5UZni/SuFQ==}
'@img/sharp-linux-arm64@0.35.5':
resolution: {integrity: sha512-LYVx5JTsOM2CBzmxreh+nl64/3H6Xb09iSLknqH47z2T2DFFxDeFLP5y4dJwe6H7uGQlHPyEEtIqyo3DYsRwdQ==}
engines: {node: '>=20.9.0'}
cpu: [arm64]
os: [linux]
'@img/sharp-linux-arm@0.35.3':
resolution: {integrity: sha512-affVWCTLooy8TSxbDx2qkzuDeaWLNVBA+P//FNBirHsXpP2fuBhk5AuboYUnrDnzoXes8GFjpTx0SBFOCRg+FA==}
'@img/sharp-linux-arm@0.35.5':
resolution: {integrity: sha512-LEaXK2WdXVK5ykcw0buWyPMsmLLL2vpHLD6yrNSW+JGEL3BZPA4tpKN6iaMc4AxTTAoaX/sU1rOL51lcIz48ZQ==}
engines: {node: '>=20.9.0'}
cpu: [arm]
os: [linux]
'@img/sharp-linux-ppc64@0.35.3':
resolution: {integrity: sha512-sMd8rDxmpLOwv/7N44klFjOD5DUO7FLdjiXDI0hoxYaf7Ar262dQIEkosE98bps+5HPLtp/EvNqeqQtOycP/IA==}
'@img/sharp-linux-ppc64@0.35.5':
resolution: {integrity: sha512-QVxAAq8evVRI9ia2vqgwrmWucn5Dfv+JdWzj75pD8omHLPSP7f8p20O8jxzjCcuCEQEOtYOZUmX1hkiZ0kdevA==}
engines: {node: '>=20.9.0'}
cpu: [ppc64]
os: [linux]
'@img/sharp-linux-riscv64@0.35.3':
resolution: {integrity: sha512-0Eob78yjlYPfL5vMNWAW55l3R9Y6BQS/gOfe0ZcP9mEz9ohhKSt4im1hayiknXgf8AWrFqMvJcKIdmLmEe7yeQ==}
'@img/sharp-linux-riscv64@0.35.5':
resolution: {integrity: sha512-LtdreXguaavKODPIfzJ4kffx7UNt1omwtK0rch4EBbbSTXPnxWmYSayXdLJw0fJzQ97kHt1gL/yh4tvU+nCyRQ==}
engines: {node: '>=20.9.0'}
cpu: [riscv64]
os: [linux]
'@img/sharp-linux-s390x@0.35.3':
resolution: {integrity: sha512-KgAxQ0DxpNOq1rG2t5cgTgShJFGSuU7XO45cqC+1NVOuZnP6tlgZRuSYOfNupGkHID0o3cJOsw4DVeJpMovcGw==}
'@img/sharp-linux-s390x@0.35.5':
resolution: {integrity: sha512-UZasTOFiYzotTsGOCu42BfUzP6Tu6Do/947iRm1RsLKvlllxwGcn4RN27LibGWceix4Y+Pmw3jsnTcCQIgWjqA==}
engines: {node: '>=20.9.0'}
cpu: [s390x]
os: [linux]
'@img/sharp-linux-x64@0.35.3':
resolution: {integrity: sha512-8pqvxubL2PGdhlPy6GLqzDYMUjyRmKAwKHYKixpdJYBUK7PJ0C029XdsnpFIdgRZG68fZiGdHVWcKPvtiPB4cA==}
'@img/sharp-linux-x64@0.35.5':
resolution: {integrity: sha512-SxFtLTeJInhAA9Q836kux2vZNeOBQEx658qvbboZScr0wIARym3IcGmW7KpVD5sbVg0Ojy+udFQdayYIZyoNog==}
engines: {node: '>=20.9.0'}
cpu: [x64]
os: [linux]
'@img/sharp-linuxmusl-arm64@0.35.3':
resolution: {integrity: sha512-Vz0iQjzzcSX3HCbfwFfCSG/9SCIqyO0mH2sXyiHaAYfBk0cRsCWXRyQYX0ovCK/PAQBbTzQ0dsPQHh5MAFL59w==}
'@img/sharp-linuxmusl-arm64@0.35.5':
resolution: {integrity: sha512-9HbMclmI1zlNkFRs3z9/eBtDjfD0sGlrX1z6b1qwmiFY5ElDLh4BC0LPBdVp7z1DXFiKlIcznf+ZlsuZzLxQqg==}
engines: {node: '>=20.9.0'}
cpu: [arm64]
os: [linux]
'@img/sharp-linuxmusl-x64@0.35.3':
resolution: {integrity: sha512-6O1NPKcDVj9QEdg7Hx549EX8U0rp6yXQERqru6yRN7fGBn32UvIRJUlWnk+8xDCiG76hXVBbX82NZ/ZKr0euIg==}
'@img/sharp-linuxmusl-x64@0.35.5':
resolution: {integrity: sha512-4KOphqB035HrVdqLZfCgMzzERrQkkzOwRhl4OAkRO1YCldbaFjySXMaK534Mo0V+LndnlJk+sbUyLeU0ULyD1A==}
engines: {node: '>=20.9.0'}
cpu: [x64]
os: [linux]
'@img/sharp-wasm32@0.35.3':
resolution: {integrity: sha512-cZ0XkcYGpHZkqW6iCkqTcmUC0CD9DhD5d/qeZlZkfRBn6GnHniZXLUo5+9xw8Iv76YE6LQFN9YNBlKREcCG76w==}
'@img/sharp-wasm32@0.35.5':
resolution: {integrity: sha512-Ptsga1su4tQx+LLF1ECS9U6nz5kmrXKo6XVbtR48Ke3ZRxxgaWBu7IDtEe1quo8hiupwm6WFqxVlXaSf7IINGQ==}
engines: {node: '>=20.9.0'}
'@img/sharp-webcontainers-wasm32@0.35.3':
resolution: {integrity: sha512-2rnq7bX3NzeR2T4YWgz8qiG4h3TSdMe+vN1iQXpJleSJ3SM5zQ8Fy2SyyXAWlbxpEZ2Y+Z4u1BePgJEYbSy80Q==}
'@img/sharp-webcontainers-wasm32@0.35.5':
resolution: {integrity: sha512-hfhF/FmoQyTUkA0bIKFOtw536BQSeBMe6BF6QyWlrPxT754+TFLaZ7sKKTfvvM0yJgKgaYTwnFCIZ/GuDw5SUA==}
engines: {node: '>=20.9.0'}
cpu: [wasm32]
'@img/sharp-win32-arm64@0.35.3':
resolution: {integrity: sha512-4bPwFdMbeC4JQ8L8LOyWp6nsHcboP5fxkp6iPOXz2Vg49R42TuMs2whkJ5OAP4/Ul035qOzy0AecOF9VOscn4w==}
'@img/sharp-win32-arm64@0.35.5':
resolution: {integrity: sha512-X4t7g+7ZA5DKblCBEXGjUqqemj4vczING/5viFwAL8h4N3qYeyjwdCvRLHi4EdOUI+2Z7UFlp1VM+p/AuEtm6Q==}
engines: {node: '>=20.9.0'}
cpu: [arm64]
os: [win32]
'@img/sharp-win32-ia32@0.35.3':
resolution: {integrity: sha512-r53mXsBN6lFUDiST764SvgwUdHAqM4rPAiDzAmf4fLoB6X/rkfyTrLCg6+g17wJJiCmB3JYgHuUldCWUIRFSXw==}
'@img/sharp-win32-ia32@0.35.5':
resolution: {integrity: sha512-5Zm82LoBc43nhwNybZlG7Y1KO//Zhsn306fQl29ZOuStHLGTo3BWL83q3cznX0poxSAMuYL1On/BHBxkBeKr6A==}
engines: {node: ^20.9.0}
cpu: [ia32]
os: [win32]
'@img/sharp-win32-x64@0.35.3':
resolution: {integrity: sha512-D4y1vNeZrIIJCN+uHaWVtH86B+aCrdMYYjicy9pXHvbGZeGYLLSd3wdVuC37FxVXlU1ARsk84eKWfWMXGYEqvA==}
'@img/sharp-win32-x64@0.35.5':
resolution: {integrity: sha512-x76eH0vEiHlcMQu8Y8IenntaACtddpT6W0wmXtWrnKcnKI7ME5DdgqhAD6SEWOEl1v2zDvkZDhFA9KnURwpfqg==}
engines: {node: '>=20.9.0'}
cpu: [x64]
os: [win32]
@@ -2107,8 +2109,8 @@ packages:
aws4@1.13.2:
resolution: {integrity: sha512-lHe62zvbTB5eEABUVi/AwVh0ZKY9rMMDhmm+eeyuuUQbQ3+J+fONVQOZyj+DdrvD4BY33uYniyRJ4UJIaSKAfw==}
axios@1.18.1:
resolution: {integrity: sha512-3nTvFlvpn9Zu/RkHUqtc7/+al4UpRW5az71ap5zccp6e8RAYEzhMTecX8Dz1wWDYrPpUoB1HAQEGEAEvUr7S9g==}
axios@1.20.0:
resolution: {integrity: sha512-r8aOh8j9cGKpgQAqpzrUHnSIc6a59Y3Xf/cv8sy1DrHCkZHzQGEuoq1tARk6qSyDdtQGSDgpb9kFlruzPvrgwg==}
babel-jest@29.7.0:
resolution: {integrity: sha512-BrvGY3xZSwEcCzKvKsCi2GgHqDqsYkOP4/by5xCgIwGXQxIEh+8ew3gmrE1y7XRR6LHZIj6yLYnUi/mm2KXKBg==}
@@ -2153,8 +2155,8 @@ packages:
engines: {node: '>=6.0.0'}
hasBin: true
basic-ftp@5.3.1:
resolution: {integrity: sha512-bopVNp6ugyA150DDuZfPFdt1KZ5a94ZDiwX4hMgZDzF+GttD80lEy8kj98kbyhLXnPvhtIo93mdnLIjpCAeeOw==}
basic-ftp@6.2.1:
resolution: {integrity: sha512-bK67isD+lKq46AU8vNtjvMaT2ZqAOAmNCbxUHlFBRD4k15NWxyEjmaKtZPlgce58So4BNTjITGQOVTjL9y0ECA==}
engines: {node: '>=10.0.0'}
better-sqlite3@12.10.0:
@@ -2184,8 +2186,8 @@ packages:
brace-expansion@1.1.16:
resolution: {integrity: sha512-IDw48K2/2kRkg9LdJxurvq3lV3aBgq0REY89duEqFRthjlPdXHKMj7EnQOXVckxzgisinf3nHfrcE2FufFLXMw==}
brace-expansion@2.1.4:
resolution: {integrity: sha512-hGfVzPxthbf3+2yjg/RBs60cB0FhqBS/zvdV/4wn4/BmN0bNMMHPc4V/BbFieqf1TKAGGAHnY4eSjajCl0f2Xg==}
brace-expansion@2.1.7:
resolution: {integrity: sha512-uZbew1NqdmPDTMJ8ah1y+b+9QEJrfkXFk3RcTQw3X0jW/xRUvFKsg1CfQdSYGdTbXZWExtU3J3ccxtnfw1Fi0g==}
brace-expansion@5.0.8:
resolution: {integrity: sha512-JZyDyq3D4AUifKTPOB7DELf6XsB3WdPuNxCtob1vFXPsSXhdAiHBWJ/tJ8HAc9aH84BK+5JFZLNkJKx3G9kzQg==}
@@ -3282,8 +3284,8 @@ packages:
js-tokens@4.0.0:
resolution: {integrity: sha512-RdJUflcE3cUzKiMqQgsCu06FPu9UdIJO0beYbPhHN4k6apgJtifcoCtT9bcxOpYBtpD2kCM6Sbzg4CausW/PKQ==}
js-yaml@3.15.1:
resolution: {integrity: sha512-S99WuO3HlhO3XN41EtYUNl9zzXjoJx7QvmipxsJVxtCBT0YHEFy+iOJhjSvrmV12nYhWpZaM8lPHkJm0yUMbag==}
js-yaml@3.15.2:
resolution: {integrity: sha512-6EuL879VkRA+1Cz578mKMiKvjPNEuk6+r1JaFzoSWejZmtf7xWbIyw1e3KkxlkzTIt9Taw6JBhEppG7utc1P+w==}
hasBin: true
jsesc@3.1.0:
@@ -4209,8 +4211,8 @@ packages:
resolution: {integrity: sha512-8I8TjW5KMOKsZQTvoxjuSIa7foAwPWGOts+6o7sgjz41/qMD9VQHEDxi6PBvK2l0MXUmqZyNpUK+T2tQaaElvw==}
engines: {node: '>=10'}
sharp@0.35.3:
resolution: {integrity: sha512-ej0zVHuZGHCiABXcNxeYhpRnPNPAcvbG8RMdBAhDAxLKkCRVSpK3Iyu7qbqw3JMzoj0REeM6f3tJLtVwl0023Q==}
sharp@0.35.5:
resolution: {integrity: sha512-Ywn4OnzGukp7CDMrp08RQ50YKmuwG47brZgIVPTvBaaAfQlRlygrRqSrxdCiL9M+LlzLBiJ68IR1QqvzHyjC7g==}
engines: {node: '>=20.9.0'}
peerDependencies:
'@types/node': '*'
@@ -6142,7 +6144,7 @@ snapshots:
transitivePeerDependencies:
- supports-color
'@emnapi/runtime@1.11.2':
'@emnapi/runtime@1.11.3':
dependencies:
tslib: 2.8.1
optional: true
@@ -6246,7 +6248,7 @@ snapshots:
dependencies:
graphql: 16.14.2
'@grpc/grpc-js@1.14.4':
'@grpc/grpc-js@1.14.5':
dependencies:
'@grpc/proto-loader': 0.8.1
'@js-sdsl/ordered-map': 4.4.2
@@ -6279,7 +6281,7 @@ snapshots:
'@huggingface/tokenizers': 0.1.3
onnxruntime-node: 1.24.3
onnxruntime-web: 1.26.0-dev.20260416-b7804b056c
sharp: 0.35.3(@types/node@22.19.21)
sharp: 0.35.5(@types/node@22.19.21)
transitivePeerDependencies:
- '@types/node'
@@ -6290,108 +6292,108 @@ snapshots:
'@img/colour@1.1.0': {}
'@img/sharp-darwin-arm64@0.35.3':
'@img/sharp-darwin-arm64@0.35.5':
optionalDependencies:
'@img/sharp-libvips-darwin-arm64': 1.3.2
'@img/sharp-libvips-darwin-arm64': 1.3.4
optional: true
'@img/sharp-darwin-x64@0.35.3':
'@img/sharp-darwin-x64@0.35.5':
optionalDependencies:
'@img/sharp-libvips-darwin-x64': 1.3.2
'@img/sharp-libvips-darwin-x64': 1.3.4
optional: true
'@img/sharp-freebsd-wasm32@0.35.3':
'@img/sharp-freebsd-wasm32@0.35.5':
dependencies:
'@img/sharp-wasm32': 0.35.3
'@img/sharp-wasm32': 0.35.5
optional: true
'@img/sharp-libvips-darwin-arm64@1.3.2':
'@img/sharp-libvips-darwin-arm64@1.3.4':
optional: true
'@img/sharp-libvips-darwin-x64@1.3.2':
'@img/sharp-libvips-darwin-x64@1.3.4':
optional: true
'@img/sharp-libvips-linux-arm64@1.3.2':
'@img/sharp-libvips-linux-arm64@1.3.4':
optional: true
'@img/sharp-libvips-linux-arm@1.3.2':
'@img/sharp-libvips-linux-arm@1.3.4':
optional: true
'@img/sharp-libvips-linux-ppc64@1.3.2':
'@img/sharp-libvips-linux-ppc64@1.3.4':
optional: true
'@img/sharp-libvips-linux-riscv64@1.3.2':
'@img/sharp-libvips-linux-riscv64@1.3.4':
optional: true
'@img/sharp-libvips-linux-s390x@1.3.2':
'@img/sharp-libvips-linux-s390x@1.3.4':
optional: true
'@img/sharp-libvips-linux-x64@1.3.2':
'@img/sharp-libvips-linux-x64@1.3.4':
optional: true
'@img/sharp-libvips-linuxmusl-arm64@1.3.2':
'@img/sharp-libvips-linuxmusl-arm64@1.3.4':
optional: true
'@img/sharp-libvips-linuxmusl-x64@1.3.2':
'@img/sharp-libvips-linuxmusl-x64@1.3.4':
optional: true
'@img/sharp-linux-arm64@0.35.3':
'@img/sharp-linux-arm64@0.35.5':
optionalDependencies:
'@img/sharp-libvips-linux-arm64': 1.3.2
'@img/sharp-libvips-linux-arm64': 1.3.4
optional: true
'@img/sharp-linux-arm@0.35.3':
'@img/sharp-linux-arm@0.35.5':
optionalDependencies:
'@img/sharp-libvips-linux-arm': 1.3.2
'@img/sharp-libvips-linux-arm': 1.3.4
optional: true
'@img/sharp-linux-ppc64@0.35.3':
'@img/sharp-linux-ppc64@0.35.5':
optionalDependencies:
'@img/sharp-libvips-linux-ppc64': 1.3.2
'@img/sharp-libvips-linux-ppc64': 1.3.4
optional: true
'@img/sharp-linux-riscv64@0.35.3':
'@img/sharp-linux-riscv64@0.35.5':
optionalDependencies:
'@img/sharp-libvips-linux-riscv64': 1.3.2
'@img/sharp-libvips-linux-riscv64': 1.3.4
optional: true
'@img/sharp-linux-s390x@0.35.3':
'@img/sharp-linux-s390x@0.35.5':
optionalDependencies:
'@img/sharp-libvips-linux-s390x': 1.3.2
'@img/sharp-libvips-linux-s390x': 1.3.4
optional: true
'@img/sharp-linux-x64@0.35.3':
'@img/sharp-linux-x64@0.35.5':
optionalDependencies:
'@img/sharp-libvips-linux-x64': 1.3.2
'@img/sharp-libvips-linux-x64': 1.3.4
optional: true
'@img/sharp-linuxmusl-arm64@0.35.3':
'@img/sharp-linuxmusl-arm64@0.35.5':
optionalDependencies:
'@img/sharp-libvips-linuxmusl-arm64': 1.3.2
'@img/sharp-libvips-linuxmusl-arm64': 1.3.4
optional: true
'@img/sharp-linuxmusl-x64@0.35.3':
'@img/sharp-linuxmusl-x64@0.35.5':
optionalDependencies:
'@img/sharp-libvips-linuxmusl-x64': 1.3.2
'@img/sharp-libvips-linuxmusl-x64': 1.3.4
optional: true
'@img/sharp-wasm32@0.35.3':
'@img/sharp-wasm32@0.35.5':
dependencies:
'@emnapi/runtime': 1.11.2
'@emnapi/runtime': 1.11.3
optional: true
'@img/sharp-webcontainers-wasm32@0.35.3':
'@img/sharp-webcontainers-wasm32@0.35.5':
dependencies:
'@img/sharp-wasm32': 0.35.3
'@img/sharp-wasm32': 0.35.5
optional: true
'@img/sharp-win32-arm64@0.35.3':
'@img/sharp-win32-arm64@0.35.5':
optional: true
'@img/sharp-win32-ia32@0.35.3':
'@img/sharp-win32-ia32@0.35.5':
optional: true
'@img/sharp-win32-x64@0.35.3':
'@img/sharp-win32-x64@0.35.5':
optional: true
'@iovalkey/commands@0.1.0': {}
@@ -6414,7 +6416,7 @@ snapshots:
camelcase: 5.3.1
find-up: 4.1.0
get-package-type: 0.1.0
js-yaml: 3.15.1
js-yaml: 3.15.2
resolve-from: 5.0.0
'@istanbuljs/schema@0.1.6': {}
@@ -7320,7 +7322,7 @@ snapshots:
'@zilliz/milvus2-sdk-node@3.0.3':
dependencies:
'@grpc/grpc-js': 1.14.4
'@grpc/grpc-js': 1.14.5
'@grpc/proto-loader': 0.8.1
'@opentelemetry/api': 1.9.1
'@petamoriken/float16': 3.9.3
@@ -7432,7 +7434,7 @@ snapshots:
aws4@1.13.2: {}
axios@1.18.1:
axios@1.20.0:
dependencies:
follow-redirects: 1.16.0
form-data: 4.0.6
@@ -7507,7 +7509,7 @@ snapshots:
baseline-browser-mapping@2.11.21: {}
basic-ftp@5.3.1: {}
basic-ftp@6.2.1: {}
better-sqlite3@12.10.0:
dependencies:
@@ -7537,7 +7539,7 @@ snapshots:
balanced-match: 1.0.2
concat-map: 0.0.1
brace-expansion@2.1.4:
brace-expansion@2.1.7:
dependencies:
balanced-match: 1.0.2
@@ -8207,7 +8209,7 @@ snapshots:
get-uri@6.0.5:
dependencies:
basic-ftp: 5.3.1
basic-ftp: 6.2.1
data-uri-to-buffer: 6.0.2
debug: 4.4.3(supports-color@5.5.0)
transitivePeerDependencies:
@@ -8276,7 +8278,7 @@ snapshots:
google-gax@5.0.7:
dependencies:
'@grpc/grpc-js': 1.14.4
'@grpc/grpc-js': 1.14.5
'@grpc/proto-loader': 0.8.1
duplexify: 4.1.3
google-auth-library: 10.5.0
@@ -8507,7 +8509,7 @@ snapshots:
'@babel/parser': 7.29.7
'@istanbuljs/schema': 0.1.6
istanbul-lib-coverage: 3.2.2
semver: 7.8.4
semver: 7.8.5
transitivePeerDependencies:
- supports-color
@@ -8855,7 +8857,7 @@ snapshots:
js-tokens@4.0.0: {}
js-yaml@3.15.1:
js-yaml@3.15.2:
dependencies:
argparse: 1.0.10
esprima: 4.0.1
@@ -9005,7 +9007,7 @@ snapshots:
make-dir@4.0.0:
dependencies:
semver: 7.8.4
semver: 7.8.5
make-error@1.3.6: {}
@@ -9063,7 +9065,7 @@ snapshots:
minimatch@9.0.9:
dependencies:
brace-expansion: 2.1.4
brace-expansion: 2.1.7
minimist@1.2.8: {}
@@ -9200,7 +9202,7 @@ snapshots:
nice-grpc@2.1.16:
dependencies:
'@grpc/grpc-js': 1.14.4
'@grpc/grpc-js': 1.14.5
abort-controller-x: 0.5.0
nice-grpc-common: 2.0.3
@@ -9770,37 +9772,37 @@ snapshots:
dependencies:
type-fest: 0.13.1
sharp@0.35.3(@types/node@22.19.21):
sharp@0.35.5(@types/node@22.19.21):
dependencies:
'@img/colour': 1.1.0
detect-libc: 2.1.2
semver: 7.8.5
optionalDependencies:
'@img/sharp-darwin-arm64': 0.35.3
'@img/sharp-darwin-x64': 0.35.3
'@img/sharp-freebsd-wasm32': 0.35.3
'@img/sharp-libvips-darwin-arm64': 1.3.2
'@img/sharp-libvips-darwin-x64': 1.3.2
'@img/sharp-libvips-linux-arm': 1.3.2
'@img/sharp-libvips-linux-arm64': 1.3.2
'@img/sharp-libvips-linux-ppc64': 1.3.2
'@img/sharp-libvips-linux-riscv64': 1.3.2
'@img/sharp-libvips-linux-s390x': 1.3.2
'@img/sharp-libvips-linux-x64': 1.3.2
'@img/sharp-libvips-linuxmusl-arm64': 1.3.2
'@img/sharp-libvips-linuxmusl-x64': 1.3.2
'@img/sharp-linux-arm': 0.35.3
'@img/sharp-linux-arm64': 0.35.3
'@img/sharp-linux-ppc64': 0.35.3
'@img/sharp-linux-riscv64': 0.35.3
'@img/sharp-linux-s390x': 0.35.3
'@img/sharp-linux-x64': 0.35.3
'@img/sharp-linuxmusl-arm64': 0.35.3
'@img/sharp-linuxmusl-x64': 0.35.3
'@img/sharp-webcontainers-wasm32': 0.35.3
'@img/sharp-win32-arm64': 0.35.3
'@img/sharp-win32-ia32': 0.35.3
'@img/sharp-win32-x64': 0.35.3
'@img/sharp-darwin-arm64': 0.35.5
'@img/sharp-darwin-x64': 0.35.5
'@img/sharp-freebsd-wasm32': 0.35.5
'@img/sharp-libvips-darwin-arm64': 1.3.4
'@img/sharp-libvips-darwin-x64': 1.3.4
'@img/sharp-libvips-linux-arm': 1.3.4
'@img/sharp-libvips-linux-arm64': 1.3.4
'@img/sharp-libvips-linux-ppc64': 1.3.4
'@img/sharp-libvips-linux-riscv64': 1.3.4
'@img/sharp-libvips-linux-s390x': 1.3.4
'@img/sharp-libvips-linux-x64': 1.3.4
'@img/sharp-libvips-linuxmusl-arm64': 1.3.4
'@img/sharp-libvips-linuxmusl-x64': 1.3.4
'@img/sharp-linux-arm': 0.35.5
'@img/sharp-linux-arm64': 0.35.5
'@img/sharp-linux-ppc64': 0.35.5
'@img/sharp-linux-riscv64': 0.35.5
'@img/sharp-linux-s390x': 0.35.5
'@img/sharp-linux-x64': 0.35.5
'@img/sharp-linuxmusl-arm64': 0.35.5
'@img/sharp-linuxmusl-x64': 0.35.5
'@img/sharp-webcontainers-wasm32': 0.35.5
'@img/sharp-win32-arm64': 0.35.5
'@img/sharp-win32-ia32': 0.35.5
'@img/sharp-win32-x64': 0.35.5
'@types/node': 22.19.21
shebang-command@2.0.0:
+7 -5
View File
@@ -10,9 +10,9 @@ overrides:
"picomatch@<2.3.2": "^2.3.2"
"picomatch@>=4.0.0 <4.0.4": "^4.0.4"
"jws@4.0.0": "4.0.1"
"js-yaml@<3.15.1": ">=3.15.1 <4.0.0"
"js-yaml@>=4.0.0 <4.3.1": ">=4.3.1 <5.0.0"
"sharp@<0.35.0": ">=0.35.0 <0.36.0"
"js-yaml@<3.15.2": ">=3.15.2 <4.0.0"
"js-yaml@>=4.0.0 <4.3.2": ">=4.3.2 <5.0.0"
"sharp@<0.35.4": ">=0.35.4 <0.36.0"
"adm-zip@<0.6.1": ">=0.6.1 <0.7.0"
"langsmith@<0.6.0": "^0.6.0"
"minimatch@<3.1.3": "^3.1.3"
@@ -28,9 +28,9 @@ overrides:
"@modelcontextprotocol/sdk": "^1.25.4"
"esbuild": ">=0.28.1"
"undici@<7.29.1": ">=7.29.1 <8.0.0"
"axios@<1.18.0": ">=1.18.0 <2.0.0"
"axios@<1.20.0": ">=1.20.0 <2.0.0"
"brace-expansion@<1.1.16": ">=1.1.16 <2.0.0"
"brace-expansion@>=2.0.0 <2.1.4": ">=2.1.4 <3.0.0"
"brace-expansion@>=2.0.0 <2.1.6": ">=2.1.6 <3.0.0"
"brace-expansion@>=3.0.0 <5.0.8": ">=5.0.8 <6.0.0"
"fast-xml-parser@>=5.0.0 <5.10.1": ">=5.10.1 <6.0.0"
"tar@<7.5.21": ">=7.5.21 <8.0.0"
@@ -40,6 +40,8 @@ overrides:
"ip-address@<10.5.1": ">=10.5.1 <11.0.0"
"browserslist@<4.28.7": ">=4.28.7 <5.0.0"
"mysql2@<3.23.1": ">=3.23.1 <4.0.0"
"basic-ftp@<6.2.1": ">=6.2.1 <7.0.0"
"@grpc/grpc-js@>=1.14.0 <1.14.5": ">=1.14.5 <2.0.0"
patchedDependencies:
"tar@7.5.22": "patches/tar@7.5.22.patch"
+1 -1
View File
@@ -37,7 +37,7 @@
"@radix-ui/react-tooltip": "^1.0.7",
"@reduxjs/toolkit": "^2.3.0",
"@tanstack/react-table": "^8.17.3",
"axios": "^1.18.0",
"axios": "^1.20.0",
"class-variance-authority": "^0.7.1",
"clsx": "^2.1.0",
"cmdk": "^1.0.0",
+133 -133
View File
@@ -8,14 +8,14 @@ overrides:
form-data@<4.0.6: '>=4.0.6'
prismjs@<1.30.0: '>=1.30.0'
uuid@<11.1.1: '>=11.1.1'
axios@<1.18.0: '>=1.18.0 <2.0.0'
axios@<1.20.0: '>=1.20.0 <2.0.0'
brace-expansion@<1.1.16: '>=1.1.16 <2.0.0'
brace-expansion@>=3.0.0 <5.0.8: '>=5.0.8 <6.0.0'
js-yaml@<3.15.1: '>=3.15.1 <4.0.0'
js-yaml@>=4.0.0 <4.3.1: '>=4.3.1 <5.0.0'
js-yaml@<3.15.2: '>=3.15.2 <4.0.0'
js-yaml@>=4.0.0 <4.3.2: '>=4.3.2 <5.0.0'
postcss@<8.5.18: '>=8.5.18 <9.0.0'
nanoid@<3.3.18: '>=3.3.18 <4.0.0'
sharp@<0.35.0: '>=0.35.0 <0.36.0'
sharp@<0.35.4: '>=0.35.4 <0.36.0'
browserslist@<4.28.7: '>=4.28.7 <5.0.0'
importers:
@@ -98,8 +98,8 @@ importers:
specifier: ^8.17.3
version: 8.21.3(react-dom@19.2.7(react@19.2.7))(react@19.2.7)
axios:
specifier: ^1.18.0
version: 1.18.1
specifier: ^1.20.0
version: 1.20.0
class-variance-authority:
specifier: ^0.7.1
version: 0.7.1
@@ -299,160 +299,160 @@ packages:
resolution: {integrity: sha512-Td76q7j57o/tLVdgS746cYARfSyxk8iEfRxewL9h4OMzYhbW4TAcppl0mT4eyqXddh6L/jwoM75mo7ixa/pCeQ==}
engines: {node: '>=18'}
'@img/sharp-darwin-arm64@0.35.3':
resolution: {integrity: sha512-RMnFX7YQsMoh7lWfcM4NEHHymBX/rLuKNPVM84XE9ONPcaSCDgE7CHIHpSgPcO2xcRthgBy1HfNO319mwhIAkg==}
'@img/sharp-darwin-arm64@0.35.5':
resolution: {integrity: sha512-QRUlFQ0WxvdWyqqG/WtI3iupfD5rBzmCHXSdPsY91sAtVtTo7Q4cb6zOccZ3gqEqkr0f1As1ehLqmEpDsRf+lg==}
engines: {node: '>=20.9.0'}
cpu: [arm64]
os: [darwin]
'@img/sharp-darwin-x64@0.35.3':
resolution: {integrity: sha512-Xo+5uFBtLN0BKqieTxiFzFPQAUlBbbH5iBKyRX/z1JrbnYsHTfKJnUfL8+p2TPXr1pXqao4eeL4Rl144uDpK9w==}
'@img/sharp-darwin-x64@0.35.5':
resolution: {integrity: sha512-+BR255RhDlpygUpOc/Jdt1nT6DQ3XG/ERo5wbcdOf5Q320dKtPCKPLR1LJs9VGXRaMa8l1uUa0tkCNOXiAxZUw==}
engines: {node: '>=20.9.0'}
cpu: [x64]
os: [darwin]
'@img/sharp-freebsd-wasm32@0.35.3':
resolution: {integrity: sha512-lUxcqWIj2wMQ9BrwNjngcr1gWUr5xgaGThBRqPPalIC2n67Cqj1uPh8NnA/ZhAg8hUbKl+kVHKwgUIwe6ZYPrg==}
'@img/sharp-freebsd-wasm32@0.35.5':
resolution: {integrity: sha512-Y/z91nEZ4uIBX5X3nfTovjU9lHNKFYbL2lpHCLVNmXQK03VIZvXBBt0KxbPGp2SdGSF+2mQU4e+hQaWOt86iAw==}
engines: {node: '>=20.9.0'}
os: [freebsd]
'@img/sharp-libvips-darwin-arm64@1.3.2':
resolution: {integrity: sha512-9J6ypZFpQBj4YnePGoq/S38w6nz+vqg5WZLrLGY4YuSemdMq47GMLBPO42MzwdGwpg/agZ7xzZcFHa48xlywfg==}
'@img/sharp-libvips-darwin-arm64@1.3.4':
resolution: {integrity: sha512-5R89nBYiRdUlSWJxPhO+GVtaXzXSxKnRu/xqMn3KTA3L9EB9Oy/P+Nn2f2vlhPuUdy/Zusb2DarbyTpGCfEDuw==}
cpu: [arm64]
os: [darwin]
'@img/sharp-libvips-darwin-x64@1.3.2':
resolution: {integrity: sha512-m2pW1n6cns9VaubNwsZ+c3CRYjxNQWgJ5gPlnL1nbBcpkBvFm6SCFN5o0psFHI8w9n11NKhFkeEDns98tiqbEw==}
'@img/sharp-libvips-darwin-x64@1.3.4':
resolution: {integrity: sha512-iR2OKH80yi0U+dUplyh3/xdpFvps6YkCwsXenIJxqxR1v9o+xtKTGbS9H7cps+2Vxjc8B1j96p75NmTGjIhtpQ==}
cpu: [x64]
os: [darwin]
'@img/sharp-libvips-linux-arm64@1.3.2':
resolution: {integrity: sha512-dqVSFynCox4C/J8kT16V7SIFAns0IjgLwkvYT7p8LQVmJ5OS5b6tI9IGflxTeuBS//zXeFIUbwt5dwxyZ17cnA==}
'@img/sharp-libvips-linux-arm64@1.3.4':
resolution: {integrity: sha512-Y3dgX/6lE2QhQb+Gxy0WZxfg9MEm/JBjamZpS2IklP7xIQoKN4hzAm7KcMVGtaVDt3neE9OKBC7vAfonA/Lr1A==}
cpu: [arm64]
os: [linux]
libc: [glibc]
'@img/sharp-libvips-linux-arm@1.3.2':
resolution: {integrity: sha512-1eMLzy92I4J6rmi4mAT8yC3HxOtniyGELlzGbNMLLeqe052ahFQ0h6LFq+lh5DsDIdYViIDst08abvSbcEdLXQ==}
'@img/sharp-libvips-linux-arm@1.3.4':
resolution: {integrity: sha512-LmRtTsOHuvM2+wlO2Db37dx5MiZhB0FvSunciw48YjdOkZz9KAiRbm8ujeMOA1INqmei5NapFxYEK1D1ZSidmw==}
cpu: [arm]
os: [linux]
libc: [glibc]
'@img/sharp-libvips-linux-ppc64@1.3.2':
resolution: {integrity: sha512-3z0NHDxD6n5I9gc05U1eW1AyRm+Gznzq3naMrthPNqE6oYykcogW0l/jfpJdjYnuNl8R7yI9pNbE1XiUeyq0Aw==}
'@img/sharp-libvips-linux-ppc64@1.3.4':
resolution: {integrity: sha512-Le6boB8Tai0Nis+gIxIpKx68UDVVIqdR8Tin5Yf1z2LJJQLDJvCDRqRu+jC2qCoD+eIomonmOwB4smBRxfVpYQ==}
cpu: [ppc64]
os: [linux]
libc: [glibc]
'@img/sharp-libvips-linux-riscv64@1.3.2':
resolution: {integrity: sha512-bsb4rI+NldGOsXuej2r8OdSS8+zXDVaCWxyWrcv6kneTOlgAHtZABRzBBCwdsPiD90J4myNJuHpg6kA20ImW/w==}
'@img/sharp-libvips-linux-riscv64@1.3.4':
resolution: {integrity: sha512-aHkkIEHPRdQEegJN20MLmGtxYD9R2wQr3Cwpddnu5+YKMt6Uzax7S9h5gpZTo8wyrGuZSlfQ63OevL5mTyOC7Q==}
cpu: [riscv64]
os: [linux]
libc: [glibc]
'@img/sharp-libvips-linux-s390x@1.3.2':
resolution: {integrity: sha512-/ABshyj8gCpyIrNXnHn4LorDJ0HHm1VhXPBlxZ8zAtfVPAaSafXPGn+sUSIRiwaSBy0mmFjSjiXI5mkcwdChKQ==}
'@img/sharp-libvips-linux-s390x@1.3.4':
resolution: {integrity: sha512-ra/mB6MikESDUO7Yg+Mi95bFBb9GsObURuhnOv3OqknjGe9sZrG8tCe9q0xSIGrtLgvgw0gKnFWcK4blSgQOuQ==}
cpu: [s390x]
os: [linux]
libc: [glibc]
'@img/sharp-libvips-linux-x64@1.3.2':
resolution: {integrity: sha512-ITPEtgffGJ0S6G9dRyw/366tJQqFRcHWPHhC+Stpg3Z8AEMrDrTr2lhdz4f/Y/HMbRh//7Z5mBzEpVdi62Oc3w==}
'@img/sharp-libvips-linux-x64@1.3.4':
resolution: {integrity: sha512-GJ//SSXbnwSDes02umB3nDJLFcQzw8a18V8fyhqr6tV515tOEMdImjjxj1AoafMRz56F3PHgftnj1QEKSU1zkw==}
cpu: [x64]
os: [linux]
libc: [glibc]
'@img/sharp-libvips-linuxmusl-arm64@1.3.2':
resolution: {integrity: sha512-zE9EdiUzUmg5mDT5a1rk5fYJ6GWPloTwWBYDS14naqHsL+EaMpDj1AWnpLgh3u0YCORv2Tt50wrcrpYqkP97Kw==}
'@img/sharp-libvips-linuxmusl-arm64@1.3.4':
resolution: {integrity: sha512-hvulFwtjUcagsis6BBxHwGFwWoNZjgYmULGVrZcyfNbjA8hKILbRxGg15/7w5HDyXHXUos/j6baAWqnCyQ2DWA==}
cpu: [arm64]
os: [linux]
libc: [musl]
'@img/sharp-libvips-linuxmusl-x64@1.3.2':
resolution: {integrity: sha512-m0lrLiUt+lBYnCFr8qV/65yMR4E/c7/wf78I5eKTdkEakFAlZ9QlzEM3QIhhAwVeUhLAHLcCq7a7Vszq/oFNZQ==}
'@img/sharp-libvips-linuxmusl-x64@1.3.4':
resolution: {integrity: sha512-6zXKeE/p39I1AmA3cJG35eyBGNqNddLnUXjhwBnsGjFPWqf5VKkDBEqaEkPDoTEtkxwi2vv8Tcr2mDyP4So7Fg==}
cpu: [x64]
os: [linux]
libc: [musl]
'@img/sharp-linux-arm64@0.35.3':
resolution: {integrity: sha512-QgKDspHPnrU+GQ55XPhGwyhC8acLVOOSyAvo1oVfFmrIXLkDNmGWzAfDZ4xK8oSA1qBQrALcHX0G5UZni/SuFQ==}
'@img/sharp-linux-arm64@0.35.5':
resolution: {integrity: sha512-LYVx5JTsOM2CBzmxreh+nl64/3H6Xb09iSLknqH47z2T2DFFxDeFLP5y4dJwe6H7uGQlHPyEEtIqyo3DYsRwdQ==}
engines: {node: '>=20.9.0'}
cpu: [arm64]
os: [linux]
libc: [glibc]
'@img/sharp-linux-arm@0.35.3':
resolution: {integrity: sha512-affVWCTLooy8TSxbDx2qkzuDeaWLNVBA+P//FNBirHsXpP2fuBhk5AuboYUnrDnzoXes8GFjpTx0SBFOCRg+FA==}
'@img/sharp-linux-arm@0.35.5':
resolution: {integrity: sha512-LEaXK2WdXVK5ykcw0buWyPMsmLLL2vpHLD6yrNSW+JGEL3BZPA4tpKN6iaMc4AxTTAoaX/sU1rOL51lcIz48ZQ==}
engines: {node: '>=20.9.0'}
cpu: [arm]
os: [linux]
libc: [glibc]
'@img/sharp-linux-ppc64@0.35.3':
resolution: {integrity: sha512-sMd8rDxmpLOwv/7N44klFjOD5DUO7FLdjiXDI0hoxYaf7Ar262dQIEkosE98bps+5HPLtp/EvNqeqQtOycP/IA==}
'@img/sharp-linux-ppc64@0.35.5':
resolution: {integrity: sha512-QVxAAq8evVRI9ia2vqgwrmWucn5Dfv+JdWzj75pD8omHLPSP7f8p20O8jxzjCcuCEQEOtYOZUmX1hkiZ0kdevA==}
engines: {node: '>=20.9.0'}
cpu: [ppc64]
os: [linux]
libc: [glibc]
'@img/sharp-linux-riscv64@0.35.3':
resolution: {integrity: sha512-0Eob78yjlYPfL5vMNWAW55l3R9Y6BQS/gOfe0ZcP9mEz9ohhKSt4im1hayiknXgf8AWrFqMvJcKIdmLmEe7yeQ==}
'@img/sharp-linux-riscv64@0.35.5':
resolution: {integrity: sha512-LtdreXguaavKODPIfzJ4kffx7UNt1omwtK0rch4EBbbSTXPnxWmYSayXdLJw0fJzQ97kHt1gL/yh4tvU+nCyRQ==}
engines: {node: '>=20.9.0'}
cpu: [riscv64]
os: [linux]
libc: [glibc]
'@img/sharp-linux-s390x@0.35.3':
resolution: {integrity: sha512-KgAxQ0DxpNOq1rG2t5cgTgShJFGSuU7XO45cqC+1NVOuZnP6tlgZRuSYOfNupGkHID0o3cJOsw4DVeJpMovcGw==}
'@img/sharp-linux-s390x@0.35.5':
resolution: {integrity: sha512-UZasTOFiYzotTsGOCu42BfUzP6Tu6Do/947iRm1RsLKvlllxwGcn4RN27LibGWceix4Y+Pmw3jsnTcCQIgWjqA==}
engines: {node: '>=20.9.0'}
cpu: [s390x]
os: [linux]
libc: [glibc]
'@img/sharp-linux-x64@0.35.3':
resolution: {integrity: sha512-8pqvxubL2PGdhlPy6GLqzDYMUjyRmKAwKHYKixpdJYBUK7PJ0C029XdsnpFIdgRZG68fZiGdHVWcKPvtiPB4cA==}
'@img/sharp-linux-x64@0.35.5':
resolution: {integrity: sha512-SxFtLTeJInhAA9Q836kux2vZNeOBQEx658qvbboZScr0wIARym3IcGmW7KpVD5sbVg0Ojy+udFQdayYIZyoNog==}
engines: {node: '>=20.9.0'}
cpu: [x64]
os: [linux]
libc: [glibc]
'@img/sharp-linuxmusl-arm64@0.35.3':
resolution: {integrity: sha512-Vz0iQjzzcSX3HCbfwFfCSG/9SCIqyO0mH2sXyiHaAYfBk0cRsCWXRyQYX0ovCK/PAQBbTzQ0dsPQHh5MAFL59w==}
'@img/sharp-linuxmusl-arm64@0.35.5':
resolution: {integrity: sha512-9HbMclmI1zlNkFRs3z9/eBtDjfD0sGlrX1z6b1qwmiFY5ElDLh4BC0LPBdVp7z1DXFiKlIcznf+ZlsuZzLxQqg==}
engines: {node: '>=20.9.0'}
cpu: [arm64]
os: [linux]
libc: [musl]
'@img/sharp-linuxmusl-x64@0.35.3':
resolution: {integrity: sha512-6O1NPKcDVj9QEdg7Hx549EX8U0rp6yXQERqru6yRN7fGBn32UvIRJUlWnk+8xDCiG76hXVBbX82NZ/ZKr0euIg==}
'@img/sharp-linuxmusl-x64@0.35.5':
resolution: {integrity: sha512-4KOphqB035HrVdqLZfCgMzzERrQkkzOwRhl4OAkRO1YCldbaFjySXMaK534Mo0V+LndnlJk+sbUyLeU0ULyD1A==}
engines: {node: '>=20.9.0'}
cpu: [x64]
os: [linux]
libc: [musl]
'@img/sharp-wasm32@0.35.3':
resolution: {integrity: sha512-cZ0XkcYGpHZkqW6iCkqTcmUC0CD9DhD5d/qeZlZkfRBn6GnHniZXLUo5+9xw8Iv76YE6LQFN9YNBlKREcCG76w==}
'@img/sharp-wasm32@0.35.5':
resolution: {integrity: sha512-Ptsga1su4tQx+LLF1ECS9U6nz5kmrXKo6XVbtR48Ke3ZRxxgaWBu7IDtEe1quo8hiupwm6WFqxVlXaSf7IINGQ==}
engines: {node: '>=20.9.0'}
'@img/sharp-webcontainers-wasm32@0.35.3':
resolution: {integrity: sha512-2rnq7bX3NzeR2T4YWgz8qiG4h3TSdMe+vN1iQXpJleSJ3SM5zQ8Fy2SyyXAWlbxpEZ2Y+Z4u1BePgJEYbSy80Q==}
'@img/sharp-webcontainers-wasm32@0.35.5':
resolution: {integrity: sha512-hfhF/FmoQyTUkA0bIKFOtw536BQSeBMe6BF6QyWlrPxT754+TFLaZ7sKKTfvvM0yJgKgaYTwnFCIZ/GuDw5SUA==}
engines: {node: '>=20.9.0'}
cpu: [wasm32]
'@img/sharp-win32-arm64@0.35.3':
resolution: {integrity: sha512-4bPwFdMbeC4JQ8L8LOyWp6nsHcboP5fxkp6iPOXz2Vg49R42TuMs2whkJ5OAP4/Ul035qOzy0AecOF9VOscn4w==}
'@img/sharp-win32-arm64@0.35.5':
resolution: {integrity: sha512-X4t7g+7ZA5DKblCBEXGjUqqemj4vczING/5viFwAL8h4N3qYeyjwdCvRLHi4EdOUI+2Z7UFlp1VM+p/AuEtm6Q==}
engines: {node: '>=20.9.0'}
cpu: [arm64]
os: [win32]
'@img/sharp-win32-ia32@0.35.3':
resolution: {integrity: sha512-r53mXsBN6lFUDiST764SvgwUdHAqM4rPAiDzAmf4fLoB6X/rkfyTrLCg6+g17wJJiCmB3JYgHuUldCWUIRFSXw==}
'@img/sharp-win32-ia32@0.35.5':
resolution: {integrity: sha512-5Zm82LoBc43nhwNybZlG7Y1KO//Zhsn306fQl29ZOuStHLGTo3BWL83q3cznX0poxSAMuYL1On/BHBxkBeKr6A==}
engines: {node: ^20.9.0}
cpu: [ia32]
os: [win32]
'@img/sharp-win32-x64@0.35.3':
resolution: {integrity: sha512-D4y1vNeZrIIJCN+uHaWVtH86B+aCrdMYYjicy9pXHvbGZeGYLLSd3wdVuC37FxVXlU1ARsk84eKWfWMXGYEqvA==}
'@img/sharp-win32-x64@0.35.5':
resolution: {integrity: sha512-x76eH0vEiHlcMQu8Y8IenntaACtddpT6W0wmXtWrnKcnKI7ME5DdgqhAD6SEWOEl1v2zDvkZDhFA9KnURwpfqg==}
engines: {node: '>=20.9.0'}
cpu: [x64]
os: [win32]
@@ -1494,8 +1494,8 @@ packages:
resolution: {integrity: sha512-s7iGf5GaVMxEG0ENN9x+xTr7GFZCb1ZP/1uATUpCEK2X78nDB3RwbtFCo9pGAf9ru+VwoQ464DkaLEeRM08wJA==}
engines: {node: '>=4'}
axios@1.18.1:
resolution: {integrity: sha512-3nTvFlvpn9Zu/RkHUqtc7/+al4UpRW5az71ap5zccp6e8RAYEzhMTecX8Dz1wWDYrPpUoB1HAQEGEAEvUr7S9g==}
axios@1.20.0:
resolution: {integrity: sha512-r8aOh8j9cGKpgQAqpzrUHnSIc6a59Y3Xf/cv8sy1DrHCkZHzQGEuoq1tARk6qSyDdtQGSDgpb9kFlruzPvrgwg==}
axobject-query@4.1.0:
resolution: {integrity: sha512-qIj0G9wZbMGNLjLmg1PT6v2mE9AH2zlnADJD/2tC6E00hgmhUOfEB6greHPAfLRSufHqROIUTkw6E+M3lH0PTQ==}
@@ -2292,8 +2292,8 @@ packages:
js-tokens@4.0.0:
resolution: {integrity: sha512-RdJUflcE3cUzKiMqQgsCu06FPu9UdIJO0beYbPhHN4k6apgJtifcoCtT9bcxOpYBtpD2kCM6Sbzg4CausW/PKQ==}
js-yaml@4.3.1:
resolution: {integrity: sha512-CY6crGq313MX8GkwvB7tzgp99vjQxY1++5y10/BKN/GUfHqWaOGQMNZkBvqSzsZKWk/ijwHlWzzkLulsGHhjWQ==}
js-yaml@4.3.2:
resolution: {integrity: sha512-SFNOvSJ+Dgf/9An904Yx+CgSlIPCkIpao4qo51lpee25TIRejdH3rhR4EZMGoNx3/TP3O+wzWuiTFl4sqbltzA==}
hasBin: true
json-buffer@3.0.1:
@@ -2832,8 +2832,8 @@ packages:
resolution: {integrity: sha512-RJRdvCo6IAnPdsvP/7m6bsQqNnn1FCBX5ZNtFL98MmFF/4xAIJTIg1YbHW5DC2W5SKZanrC6i4HsJqlajw/dZw==}
engines: {node: '>= 0.4'}
sharp@0.35.3:
resolution: {integrity: sha512-ej0zVHuZGHCiABXcNxeYhpRnPNPAcvbG8RMdBAhDAxLKkCRVSpK3Iyu7qbqw3JMzoj0REeM6f3tJLtVwl0023Q==}
sharp@0.35.5:
resolution: {integrity: sha512-Ywn4OnzGukp7CDMrp08RQ50YKmuwG47brZgIVPTvBaaAfQlRlygrRqSrxdCiL9M+LlzLBiJ68IR1QqvzHyjC7g==}
engines: {node: '>=20.9.0'}
peerDependencies:
'@types/node': '*'
@@ -3174,7 +3174,7 @@ snapshots:
globals: 13.24.0
ignore: 5.3.2
import-fresh: 3.3.1
js-yaml: 4.3.1
js-yaml: 4.3.2
minimatch: 3.1.5
strip-json-comments: 3.1.1
transitivePeerDependencies:
@@ -3218,108 +3218,108 @@ snapshots:
'@img/colour@1.1.0':
optional: true
'@img/sharp-darwin-arm64@0.35.3':
'@img/sharp-darwin-arm64@0.35.5':
optionalDependencies:
'@img/sharp-libvips-darwin-arm64': 1.3.2
'@img/sharp-libvips-darwin-arm64': 1.3.4
optional: true
'@img/sharp-darwin-x64@0.35.3':
'@img/sharp-darwin-x64@0.35.5':
optionalDependencies:
'@img/sharp-libvips-darwin-x64': 1.3.2
'@img/sharp-libvips-darwin-x64': 1.3.4
optional: true
'@img/sharp-freebsd-wasm32@0.35.3':
'@img/sharp-freebsd-wasm32@0.35.5':
dependencies:
'@img/sharp-wasm32': 0.35.3
'@img/sharp-wasm32': 0.35.5
optional: true
'@img/sharp-libvips-darwin-arm64@1.3.2':
'@img/sharp-libvips-darwin-arm64@1.3.4':
optional: true
'@img/sharp-libvips-darwin-x64@1.3.2':
'@img/sharp-libvips-darwin-x64@1.3.4':
optional: true
'@img/sharp-libvips-linux-arm64@1.3.2':
'@img/sharp-libvips-linux-arm64@1.3.4':
optional: true
'@img/sharp-libvips-linux-arm@1.3.2':
'@img/sharp-libvips-linux-arm@1.3.4':
optional: true
'@img/sharp-libvips-linux-ppc64@1.3.2':
'@img/sharp-libvips-linux-ppc64@1.3.4':
optional: true
'@img/sharp-libvips-linux-riscv64@1.3.2':
'@img/sharp-libvips-linux-riscv64@1.3.4':
optional: true
'@img/sharp-libvips-linux-s390x@1.3.2':
'@img/sharp-libvips-linux-s390x@1.3.4':
optional: true
'@img/sharp-libvips-linux-x64@1.3.2':
'@img/sharp-libvips-linux-x64@1.3.4':
optional: true
'@img/sharp-libvips-linuxmusl-arm64@1.3.2':
'@img/sharp-libvips-linuxmusl-arm64@1.3.4':
optional: true
'@img/sharp-libvips-linuxmusl-x64@1.3.2':
'@img/sharp-libvips-linuxmusl-x64@1.3.4':
optional: true
'@img/sharp-linux-arm64@0.35.3':
'@img/sharp-linux-arm64@0.35.5':
optionalDependencies:
'@img/sharp-libvips-linux-arm64': 1.3.2
'@img/sharp-libvips-linux-arm64': 1.3.4
optional: true
'@img/sharp-linux-arm@0.35.3':
'@img/sharp-linux-arm@0.35.5':
optionalDependencies:
'@img/sharp-libvips-linux-arm': 1.3.2
'@img/sharp-libvips-linux-arm': 1.3.4
optional: true
'@img/sharp-linux-ppc64@0.35.3':
'@img/sharp-linux-ppc64@0.35.5':
optionalDependencies:
'@img/sharp-libvips-linux-ppc64': 1.3.2
'@img/sharp-libvips-linux-ppc64': 1.3.4
optional: true
'@img/sharp-linux-riscv64@0.35.3':
'@img/sharp-linux-riscv64@0.35.5':
optionalDependencies:
'@img/sharp-libvips-linux-riscv64': 1.3.2
'@img/sharp-libvips-linux-riscv64': 1.3.4
optional: true
'@img/sharp-linux-s390x@0.35.3':
'@img/sharp-linux-s390x@0.35.5':
optionalDependencies:
'@img/sharp-libvips-linux-s390x': 1.3.2
'@img/sharp-libvips-linux-s390x': 1.3.4
optional: true
'@img/sharp-linux-x64@0.35.3':
'@img/sharp-linux-x64@0.35.5':
optionalDependencies:
'@img/sharp-libvips-linux-x64': 1.3.2
'@img/sharp-libvips-linux-x64': 1.3.4
optional: true
'@img/sharp-linuxmusl-arm64@0.35.3':
'@img/sharp-linuxmusl-arm64@0.35.5':
optionalDependencies:
'@img/sharp-libvips-linuxmusl-arm64': 1.3.2
'@img/sharp-libvips-linuxmusl-arm64': 1.3.4
optional: true
'@img/sharp-linuxmusl-x64@0.35.3':
'@img/sharp-linuxmusl-x64@0.35.5':
optionalDependencies:
'@img/sharp-libvips-linuxmusl-x64': 1.3.2
'@img/sharp-libvips-linuxmusl-x64': 1.3.4
optional: true
'@img/sharp-wasm32@0.35.3':
'@img/sharp-wasm32@0.35.5':
dependencies:
'@emnapi/runtime': 1.11.3
optional: true
'@img/sharp-webcontainers-wasm32@0.35.3':
'@img/sharp-webcontainers-wasm32@0.35.5':
dependencies:
'@img/sharp-wasm32': 0.35.3
'@img/sharp-wasm32': 0.35.5
optional: true
'@img/sharp-win32-arm64@0.35.3':
'@img/sharp-win32-arm64@0.35.5':
optional: true
'@img/sharp-win32-ia32@0.35.3':
'@img/sharp-win32-ia32@0.35.5':
optional: true
'@img/sharp-win32-x64@0.35.3':
'@img/sharp-win32-x64@0.35.5':
optional: true
'@jridgewell/gen-mapping@0.3.13':
@@ -4367,7 +4367,7 @@ snapshots:
axe-core@4.12.1: {}
axios@1.18.1:
axios@1.20.0:
dependencies:
follow-redirects: 1.16.0
form-data: 4.0.6
@@ -4897,7 +4897,7 @@ snapshots:
imurmurhash: 0.1.4
is-glob: 4.0.3
is-path-inside: 3.0.3
js-yaml: 4.3.1
js-yaml: 4.3.2
json-stable-stringify-without-jsonify: 1.0.1
levn: 0.4.1
lodash.merge: 4.6.2
@@ -5310,7 +5310,7 @@ snapshots:
js-tokens@4.0.0: {}
js-yaml@4.3.1:
js-yaml@4.3.2:
dependencies:
argparse: 2.0.1
@@ -5439,7 +5439,7 @@ snapshots:
'@next/swc-linux-x64-musl': 15.5.24
'@next/swc-win32-arm64-msvc': 15.5.24
'@next/swc-win32-x64-msvc': 15.5.24
sharp: 0.35.3(@types/node@22.5.4)
sharp: 0.35.5(@types/node@22.5.4)
transitivePeerDependencies:
- '@babel/core'
- '@types/node'
@@ -5852,37 +5852,37 @@ snapshots:
es-errors: 1.3.0
es-object-atoms: 1.1.2
sharp@0.35.3(@types/node@22.5.4):
sharp@0.35.5(@types/node@22.5.4):
dependencies:
'@img/colour': 1.1.0
detect-libc: 2.1.2
semver: 7.8.5
optionalDependencies:
'@img/sharp-darwin-arm64': 0.35.3
'@img/sharp-darwin-x64': 0.35.3
'@img/sharp-freebsd-wasm32': 0.35.3
'@img/sharp-libvips-darwin-arm64': 1.3.2
'@img/sharp-libvips-darwin-x64': 1.3.2
'@img/sharp-libvips-linux-arm': 1.3.2
'@img/sharp-libvips-linux-arm64': 1.3.2
'@img/sharp-libvips-linux-ppc64': 1.3.2
'@img/sharp-libvips-linux-riscv64': 1.3.2
'@img/sharp-libvips-linux-s390x': 1.3.2
'@img/sharp-libvips-linux-x64': 1.3.2
'@img/sharp-libvips-linuxmusl-arm64': 1.3.2
'@img/sharp-libvips-linuxmusl-x64': 1.3.2
'@img/sharp-linux-arm': 0.35.3
'@img/sharp-linux-arm64': 0.35.3
'@img/sharp-linux-ppc64': 0.35.3
'@img/sharp-linux-riscv64': 0.35.3
'@img/sharp-linux-s390x': 0.35.3
'@img/sharp-linux-x64': 0.35.3
'@img/sharp-linuxmusl-arm64': 0.35.3
'@img/sharp-linuxmusl-x64': 0.35.3
'@img/sharp-webcontainers-wasm32': 0.35.3
'@img/sharp-win32-arm64': 0.35.3
'@img/sharp-win32-ia32': 0.35.3
'@img/sharp-win32-x64': 0.35.3
'@img/sharp-darwin-arm64': 0.35.5
'@img/sharp-darwin-x64': 0.35.5
'@img/sharp-freebsd-wasm32': 0.35.5
'@img/sharp-libvips-darwin-arm64': 1.3.4
'@img/sharp-libvips-darwin-x64': 1.3.4
'@img/sharp-libvips-linux-arm': 1.3.4
'@img/sharp-libvips-linux-arm64': 1.3.4
'@img/sharp-libvips-linux-ppc64': 1.3.4
'@img/sharp-libvips-linux-riscv64': 1.3.4
'@img/sharp-libvips-linux-s390x': 1.3.4
'@img/sharp-libvips-linux-x64': 1.3.4
'@img/sharp-libvips-linuxmusl-arm64': 1.3.4
'@img/sharp-libvips-linuxmusl-x64': 1.3.4
'@img/sharp-linux-arm': 0.35.5
'@img/sharp-linux-arm64': 0.35.5
'@img/sharp-linux-ppc64': 0.35.5
'@img/sharp-linux-riscv64': 0.35.5
'@img/sharp-linux-s390x': 0.35.5
'@img/sharp-linux-x64': 0.35.5
'@img/sharp-linuxmusl-arm64': 0.35.5
'@img/sharp-linuxmusl-x64': 0.35.5
'@img/sharp-webcontainers-wasm32': 0.35.5
'@img/sharp-win32-arm64': 0.35.5
'@img/sharp-win32-ia32': 0.35.5
'@img/sharp-win32-x64': 0.35.5
'@types/node': 22.5.4
optional: true
+4 -4
View File
@@ -5,12 +5,12 @@ overrides:
"form-data@<4.0.6": ">=4.0.6"
"prismjs@<1.30.0": ">=1.30.0"
"uuid@<11.1.1": ">=11.1.1"
"axios@<1.18.0": ">=1.18.0 <2.0.0"
"axios@<1.20.0": ">=1.20.0 <2.0.0"
"brace-expansion@<1.1.16": ">=1.1.16 <2.0.0"
"brace-expansion@>=3.0.0 <5.0.8": ">=5.0.8 <6.0.0"
"js-yaml@<3.15.1": ">=3.15.1 <4.0.0"
"js-yaml@>=4.0.0 <4.3.1": ">=4.3.1 <5.0.0"
"js-yaml@<3.15.2": ">=3.15.2 <4.0.0"
"js-yaml@>=4.0.0 <4.3.2": ">=4.3.2 <5.0.0"
"postcss@<8.5.18": ">=8.5.18 <9.0.0"
"nanoid@<3.3.18": ">=3.3.18 <4.0.0"
"sharp@<0.35.0": ">=0.35.0 <0.36.0"
"sharp@<0.35.4": ">=0.35.4 <0.36.0"
"browserslist@<4.28.7": ">=4.28.7 <5.0.0"