内容
# 缓存通道
[](https://cache-lane.vercel.app/)
[](https://nodejs.org)
[](LICENSE)
> **Claude 代码的本地缓存纪律层。**
>
> 缓存通道位于 Claude 代码和 `api.anthropic.com` 之间,重新组织每次对话的提示,以便 Anthropic 的提示缓存能够更频繁地触发,然后修剪过时的工具输出。结果是 **会话中输入令牌成本降低 30% 至 60%**,而 **无需更改 Claude 代码的使用方式**。
>
> 🌐 **网站:** [cache-lane.vercel.app](https://cache-lane.vercel.app/)
<video src="https://github.com/Aditya-Tripuraneni/CacheLane/raw/main/web/public/cachelane.mp4" width="100%" controls autoplay loop muted></video>
---
## 快速入门
```bash
# 1. 安装 CLI
npm install -g cachelane
# 2. 将其集成到 Claude 代码中(幂等,安全重启)
cachelane install
# 3. 重启 Claude 代码以应用新设置
```
**就这样。** 您不需要启动服务器、运行代理或更改任何命令。重启后,缓存通道会自动拦截和优化每个回合。
> ⚠️ **请勿手动运行 `cachelane proxy`。** 代理由 `cachelane` 自动启动(请参见 [工作原理](#工作原理))。手动运行它将导致端口冲突并崩溃,错误为 `EADDRINUSE`。
### 验证其是否正常工作
```bash
cachelane doctor # 健康检查:节点、配置、数据库、MCP、钩子
cachelane sessions # 列出记录的会话 + 缓存节省
cachelane stats --scope session # 当前项目最新会话的统计信息
```
在项目目录中运行 `cachelane stats`。它会自动限定为该项目(请参见 [查看统计信息](#查看统计信息))。
---
## 为什么能节省资金(直觉)
> **一言为之:** Claude API 是无状态的,因此 Claude 代码每次都会重新发送整个对话,您需要为此付费。缓存通道通过缓存断点标记不变部分,使其保持相同并利用 Anthropic 的提示缓存,价格约为 **十分之一**,然后修剪过时的工具输出。对话越长,节省的越多。
### 1. 问题:API 是无状态的
Claude 不会在 Anthropic 服务器上保留对话。消息 API 是 **无状态的**,这意味着客户端(Claude 代码)必须在每次回合中发送 **整个** 对话:
```
第一回合发送: [系统 + 工具][文件][消息 1]
第二回合发送: [系统 + 工具][文件][消息 1][回复][消息 2]
第三回合发送: [系统 + 工具][文件][消息 1][回复][消息 2][回复][消息 3]
|............ 每次都发送相同的内容 ............|
```
通常,您需要为每次发送的所有内容付费。缓存通道可以消除这种浪费。
> **来源:** Anthropic, [使用消息 API](https://docs.anthropic.com/en/api/messages-examples): *"消息 API 是无状态的,这意味着您始终需要向 API 发送完整的对话历史记录。"* 新的回合通过在 `messages` 数组中 **追加** 来添加,因此对话成本随着长度的增加而增长。
>
> **"但是 Claude 有记忆功能。"** 这是一个不同的机制,它不会改变上述内容。记忆工具和记忆文件通过将注释保存到文件中,然后在后续回合中将文件 **读回** 到提示中。内容仍然在每次请求中传输;模型不会从保存的服务器端会话中回忆它。
### 2. 折扣追踪
Anthropic 的提示缓存对 **重复前缀** 收费较低。确切的倍数直接来自 Anthropic 的文档:
|令牌类型|价格 vs. 基准输入|
|---|---|
|正常输入(未缓存)| **1×** |
|缓存 **写入** (5 分钟 TTL)| **1.25×** |
|缓存 **写入** (1 小时 TTL)| **2×** |
|缓存 **读取** (命中)| **0.1×** |
> **来源:** Anthropic, [提示缓存](https://docs.anthropic.com/en/docs/build-with-claude/prompt-caching): *"5 分钟缓存写入令牌的价格是基准输入令牌价格的 1.25 倍;1 小时缓存写入令牌的价格是基准输入令牌价格的 2 倍;缓存读取令牌的价格是基准输入令牌价格的 0.1 倍。"* 另请参阅 Anthropic [定价](https://docs.anthropic.com/en/docs/about-claude/pricing)。
诀窍在于 **如何** 缓存匹配。Anthropic 缓存请求的前缀直到 `cache_control` 断点,并且请求重用 *"已经写入缓存的最长前缀。"* 匹配在第一个不同的令牌处停止;该点之后的所有内容都按全价收费。
新回合追加到对话的 **末尾**,因此前端自然稳定。实际上破坏缓存的是 **位于稳定内容之前的易变内容**:新注入的工具结果、更改的系统提醒或块,其顺序或格式在回合之间发生变化。如果其中任何内容位于昂贵的稳定内容(系统提示、工具模式、大文件)之前,则前缀会提早分离,稳定内容之后的内容将无法从缓存中提供。
> **来源:** Anthropic, [提示缓存](https://docs.anthropic.com/en/docs/build-with-claude/prompt-caching): *"缓存写入仅在您的断点处发生。标记一个块与 `cache_control` 写入一个缓存条目:前缀的哈希值,直到该块结束。"* 系统 **自动查找** 最长的已经写入缓存的前缀。
>
> **Anthropic 的自动缓存怎么样?** Anthropic 可以为您放置一个断点 - 在 *最后一个可缓存块* 上,随着对话的增长,具有 20 个块的回溯 ([提示缓存](https://docs.anthropic.com/en/docs/build-with-claude/prompt-caching))。但是,它仍然只放置一个断点:它从不重新排序您的提示,并且从不修剪空闲内容。缓存通道的断点放置与使用原生缓存类似 - 它的 **额外** 节省来自 K-修剪和保持活动(如下所述),而 API 没有等效功能。
### 3. 技巧:标记缓存边界(不移动任何内容)
缓存通道将每个请求分为三个 **波动区域**,并在边界上放置两个 `cache_control` 断点。它 **不** 重新排序您的对话:API 已经按 `system` 和 `tools` 发送这些内容,然后是 `messages`,新回合追加到末尾,因此稳定材料自然位于前端。缓存通道只标记缓存边界的位置(并剥离/替换 Claude 代码已经设置的任何断点):
```
+----------------------------------------+
| 稳定 系统提示、工具模式、CLAUDE.md、固定规则 | 每次都相同 -> 按 0.1x 收费
| ============ 缓存断点 ========= |
| 半稳定 最近的回合 + 读取的文件 |
| ============ 缓存断点 ========= |
| 易变 您最新的消息 + 最新工具输出 | 唯一真正的新部分
| -> 全价,但很小
+----------------------------------------+
```
昂贵的稳定块位于每个请求的开头,通过 API 结构,并且保持字节不变,因此断点允许 Anthropic 廉价地从缓存中提供它。易变材料已经位于末尾 - 它的变化不会使前面的内容失效 - 因此缓存通道永远不需要移动它。只有底部的小块新部分按全价收费。
### 4. 工作示例:”读取文件“
假设不变的内容(系统 + 工具 + 文件)为 **15,000 个令牌**,每个新消息为 **500 个令牌**。
| 回合 | 发生什么 | 成本(令牌单位) |
|------|--------------|--------------------|
| 1(读取文件 X)| 尚未缓存;稳定块 **写入** 缓存,价格为 1.25 倍 | `15,000×1.25 + 500` ≈ **19,250** |
| 2(解释 `foo`)| 稳定块现在是缓存命中,价格为 0.1 倍 | `15,000×0.1 + 500` ≈ **2,000** |
| 3, 4, 5 … | 相同廉价路径每个回合 | ≈ **2,000** 每个 |
每次回合的成本在第一个回合后大幅下降:
```
cost/turn
19k | # 回合 1:支付一次以播种缓存
|
10k |
|
2k | # # # # # # # # # 每个回合之后:平稳且廉价
+-------------------------------
1 2 3 4 5 6 7 8 9 ...
```
> **”再次读取该文件“?** 它已经位于缓存前端,因此成本为 0.1 倍,基本上免费。您永远不会为其支付全价。
### 5. 为什么节省的资金随着会话长度而增长(数学)
令 `S` = 您的提示中 **重复** 部分的大小(系统 + 工具 + 已读取的文件),这是缓存通道保持稳定的部分。在 `N` 个回合中,您为该部分支付多少?
```
无缓存: N x S (全 1 倍价格,每个回合)
使用 CacheLane: 1.25 * S (在第 1 回合写入一次)
+ (N - 1) * 0.1*S (每个回合后 0.1 倍读取廉价)
```
将 CacheLane 成本除以 `N` 以获得 **平均每次回合成本** (每个 `S` 单位):
```
1.25*S + (N - 1)*0.1*S 1.15
----------------------- = (0.1 + -------- )* S
N N
```
这个公式就是整个故事(倍数 `1.25` 和 `0.1` 是上述 Anthropic 费率):
| 回合 `N` | 平均每次回合成本 | 节省 vs. 全价 |
|-----------|-------------------|------------------------|
| 1 | 1.25 倍 | (仅写入) |
| 2 | 0.675 倍 | ~32% |
| 10 | 0.215 倍 | ~78% |
| 50 | 0.123 倍 | ~88% |
| 大 N | **0.1 倍** | **90%(上限)** |
随着会话增长,一次性 `1.15/N` 写入成本迅速减少,平均值下降到 **0.1 倍**,即 **90% 折扣** 在重复部分。那 90% 不是营销数字。它是确切的缓存读取倍数(`0.1 倍`)来自上表,并且是理论上限。实际会话还带有小额始终全价的“新”部分每个回合以及偶尔的缓存未命中,这将测量的数字拉低到大约 **80%**,这是 `cachelane stats` 报告的实际情况。短聊天位于此曲线的低点;长期编码会话接近顶部。
### 6. 保持精简:K-修剪和存根
缓存使提示 **便宜**,但长会话仍然使其 **变大**。旧工具输出和文件转储在它们不再相关后会堆积起来。因此,缓存通道跟踪每个块有多少回合未被触及,一旦一个块 **K 回合** (默认 `K = 3`)未被触及,它会将完整内容替换为一个小 **存根**:
```
Claude 代码发送: [ ...历史... ][ 5,000 个令牌文件 ][ 新消息 ]
| 空闲 K 回合
v 缓存通道替换(转发复制品仅限)
Anthropic 接收: [ ...历史... ][ 存根:id + 摘要 + expand() ][ 新消息 ]
```
这是 **无损的,并且永远不会存储任何内容**。缓存通道不会保留您的内容。Claude 代码仍然保留原始内容并在每次回合中发送;缓存通道只是在发送到 Anthropic 的副本中对其进行掩码。如果模型需要它,它会调用 `cachelane_expand` MCP 工具,缓存通道将该块从“存根”变为“实时”,并且下一个回合会再次通过实际内容。
### 7. 为什么有数据库
在一次请求上放置断点不需要内存,但修剪和恢复是回合间的有状态操作。因此,缓存通道保留一个本地 SQLite 数据库(`~/.cachelane/cachelane.db`),仅存储 **元数据**:
- **空闲计数器:** “此块已空闲 3 回合”无法在没有历史记录的情况下知道。
- **存根状态和取回句柄:** 哪些块当前被屏蔽,以及 `cachelane_expand` 如何将其恢复。
- **前缀哈希值:** 确认稳定区域确实保持字节不变(因此缓存将命中)并检测漂移。
- **保持活动状态:** 哪些会话是空闲的以及它们的前缀有多大。
- **统计数据:**令牌计数、命中率和节省的令牌,这些数据支持 `cachelane stats`、`sessions` 和 `explain`。
它从不存储您的提示、代码或机密信息,只有哈希值、计数和简短的摘要。
### 8. 保持缓存热(保持活动)
Anthropic 的缓存默认情况下持续约 5 分钟;提供 1 小时层级的缓存,价格是 2 倍的写入成本 ([提示缓存](https://docs.anthropic.com/en/docs/build-with-claude/prompt-caching))。如果您在会话中途离开,缓存将过期,您下一个回合将支付全价重新播种它。因此,保持活动的工作线程会发送一个最小的合成 ping(`max_tokens=1`)在空闲间隙保持前缀热,并且缓存通道会自动将大前缀(≥ 50k 个令牌)提升到 1 小时层级。
---
## 工作原理
`cachelane install` 对您的 Claude 代码配置进行了两次编辑:
1. **注册 MCP 服务器** 在 `~/.claude.json`(`mcpServers.cachelane`)。Claude 代码在每次启动时自动启动 `cachelane mcp`。
2. **重定向 API 流量** 通过在 `~/.claude/settings.json` 中设置 `ANTHROPIC_BASE_URL=http://127.0.0.1:7332`。这会将 Claude 代码的请求路由通过缓存通道。
`cachelane mcp` 进程执行 **两个作业在一个进程中**:
- 为 Claude 暴露 MCP 工具(`cachelane_stats`、`cachelane_explain`、`cachelane_expand`、`cachelane_health`)。
- 因为默认情况下 `auto_proxy` 已启用, **它还会启动 HTTP 代理** 在 `127.0.0.1:7332` 上的同一个进程中。
因此,单个自动启动的进程拥有所有内容。这就是您从不手动启动任何内容的原因,以及为什么单独运行 `cachelane proxy` 会与之竞争端口。
对于每个回合,代理:
1. 拦截来自 Claude 代码的传出请求。
2. 运行管道(**分类 → 修剪 → 放置 `cache_control` 断点**)。
3. 将优化的请求转发到 `api.anthropic.com` 并直接将响应流回。
4. 将元数据(哈希值、令牌计数、命中率)记录到本地 SQLite。
在 **任何** 错误时,它会转发原始的、未修改的请求,因此缓存通道永远不会阻止或破坏您的会话([故障保证](#故障保证)。 三个节省背后的机制(缓存感知编排、K-修剪和保持活动)解释了 [为什么节省资金](#为什么节省资金:直觉)上述。
---
## 阅读您的统计数据
缓存通道在派生自 Claude 代码启动目录的 **工作区** 下记录每个回合 + Claude 代码 **会话 ID`。`cachelane stats` 镜像:
- `cachelane stats --scope session`: 当前项目中的最新 **会话** (从您的项目目录运行)。如果没有行 `--session-id`,则自动选择最新的会话。
- `cachelane stats --scope workspace`: 当前项目的所有会话。
- `cachelane stats --scope all`: 所有项目的所有内容。
- `cachelane sessions`: 带有命中率和节省的已记录会话表,适用于所有项目。
大多数时候您不需要标志。只需在项目目录中运行 `cachelane stats`。要显式针对特定会话(例如来自其他项目的会话),请从 `cachelane sessions` 表中传递其 ID:
```bash
cachelane stats --scope all --session-id <session-id>
```
会话由 Claude 代码自己的会话 ID 键控,因此 `cachelane sessions` 表中的值与 `--session-id` 期望的值完全相同。
---
## 命令参考
### 日常命令
| 命令 | 目的 |
|---------|---------|
| `cachelane install` | 在 MCP 服务器 + 钩子中注册并将 Claude 代码流量通过代理重定向。幂等。 |
| `cachelane uninstall [--purge]` | 删除集成。 `--purge` 也会删除 `~/.cachelane` (配置 + 数据库)。 |
| `cachelane doctor [--json]` | 健康检查:节点版本、配置、SQLite可写性、MCP + 钩子注册。 |
| `cachelane stats [--scope session\|workspace\|all] [--json]` | 缓存命中率、回合数、修剪块数和估计节省。 |
| `cachelane sessions [--json]` | 列出所有记录的会话,命中率和节省。 |
| `cachelane explain [--turn <N>] [--json]` | 显示 CacheLane 如何分类和修剪块,以及为某个回合放置缓存断点的位置。 |
| `cachelane config` | 打印活动配置。 |
### 调整
| 命令 | 目的 |
|---------|---------|
| `cachelane prune --default \| --aggressive \| --conservative` | 设置 K-修剪阈值(`K=3`、`K=2` 或 `K=5`)。 |
| `cachelane keepalive off \| static \| adaptive \| auto` | 配置缓存 TTL 保持活动行为。 |
| `cachelane pin <file\|glob>` | 将文件固定到 `STABLE` 区域,因此永远不会被修剪。 |
| `cachelane exclude <file\|glob>` | 从缓存感知分类中排除文件。 |
| `cachelane enable` / `cachelane disable` | 在不卸载的情况下切换修剪。 |
### 内部/高级
这些通常由您运行或用于调试;您通常从不调用它们:
| 命令 | 目的 |
|---------|---------|
| `cachelane mcp` | MCP + 代理服务器。**由 Claude 代码自动启动**。请勿手动运行。 |
| `cachelane proxy [--port]` | 独立代理,用于 *不* 使用 MCP 服务器的设置。如果两个代理运行,则会与自动启动的代理发生端口冲突。 |
| `cachelane debug pruner [--limit <N>]` | 以 JSON 形式转储最近的修剪调试条目。 |
| `cachelane benchmark <compare\|live-report\|ab-test\|dashboard>` | 本地基准测试/实时节省仪表盘。 |
| `cachelane hook <name>` | Claude 代码钩子入口点(在钩子模式下记录回合统计)。 |
### MCP 工具(暴露给 Claude)
当服务器运行时,Claude 可以调用:
- `cachelane_stats`: 会话/工作区缓存和节省聚合。
- `cachelane_explain`: 区域断点和修剪决策的结构化解释。
- `cachelane_expand`: 将修剪的存根的完整内容恢复到下一个回合。
- `cachelane_health`: 健康状态和降级故障转移指标。
---
## 配置
设置存储在 `~/.cachelane/config.json` 中,可以通过上面的微调命令进行编辑。默认设置:
| 设置 | 默认值 |
|---------|---------|
| 清理 | 启用,`K=3` |
| 保活 | `auto` (每约2.5分钟ping一次,约4分钟空闲后;50k-token前缀以上1小时TTL层) |
| 代理 | `127.0.0.1:7332` ,上游 `api.anthropic.com:443` |
| 自动代理 | 开启(MCP服务器启动进程内代理) |
| 遥测 | **关闭** (仅限选择加入) |
---
## 与另一个代理(例如令牌优化器)链接
CacheLane与 `api.anthropic.com` 前面的另一个本地代理兼容 - 您 **链接** 它们,而不是选择其中一个。CacheLane的上游是可配置的(它 *不* 硬编码为Anthropic):在 `~/.cachelane/config.json` 中设置 `proxy.upstream_host` / `upstream_port` / `upstream_ssl` / `upstream_path_prefix` 。运行 `cachelane config` 以打印活动值。
**将CacheLane放在最后,紧接在Anthropic之前。** 它的全部好处来自于安排区块和放置 `cache_control` 断点,以便Anthropic提示缓存以0.1倍的速度触发。 这取决于Anthropic接收的*确切字节*是CacheLane安排的字节 - 因此CacheLane应该是与Anthropic对话的节点。 任何代理如果在CacheLane *之后* 重写正文,可能会移动或使这些断点无效,并破坏缓存。
```
Claude Code ──► 其他代理 (:8787) ──► CacheLane (:7332) ──► api.anthropic.com
```
- 保持 `ANTHROPIC_BASE_URL=http://localhost:8787` 指向其他代理。
- 将 **其他代理** 的上游指向CacheLane( `http://localhost:7332` )而不是直接指向Anthropic。
- 将CacheLane的上游保留在默认值( `api.anthropic.com` )。
**如果其他代理无法重新指向** (只有Claude Code的基本URL是可配置的),请按其他方式链接它,并将CacheLane的上游设置为该代理:
```
Claude Code ──► CacheLane (:7332) ──► 其他代理 (:8787) ──► api.anthropic.com
```
- 设置 `ANTHROPIC_BASE_URL=http://localhost:7332`。
- 在 `~/.cachelane/config.json` 中,设置 `proxy.upstream_host: "127.0.0.1"` , `proxy.upstream_port: 8787` , `proxy.upstream_ssl: false` (本地代理通常是纯HTTP)。
- 警告:其他代理现在是最后一个节点,可能会修改正文,这可能会干扰CacheLane的 `cache_control` 放置并减少实现的缓存节省。
**叠加两个令牌减少层时的注意事项:** 它们可能会重叠或交互(例如,一个剥离内容,另一个期望stub/重新获取)。通过 `cachelane stats` 验证您仍然看到缓存读取和减少链接后。
**验证链路健康状况:** 在连接两个代理后,运行 `cachelane doctor --probe` 以确认CacheLane配置的上游可达,并且缓存读取仍然触发。 如果 `cache_reads` 警告读取量降至约0,其他层可能会剥离CacheLane需要缓存的内容 - 请参阅上面的注意事项。
> 运行这样的链路意味着 *不* 使用零配置自动代理 - 您自己启动 `cachelane proxy` 并手动管理 `ANTHROPIC_BASE_URL` 连线。
---
## 文件和数据存储
所有状态都是本地的:
| 路径 | 内容 |
|------|----------|
| `~/.cachelane/config.json` | 配置 |
| `~/.cachelane/cachelane.db` | SQLite日志:区块哈希,令牌计数,点击统计(**绝不** 提示文本) |
| `~/.cachelane/cachelane.log` | 旋转日志(10 MB × 5个文件) |
| `~/.claude.json` | MCP服务器注册( `mcpServers.cachelane` ) |
| `~/.claude/settings.json` | `ANTHROPIC_BASE_URL` 重定向 + 钩子条目 |
| `~/.claude/hooks/cachelane.json` | 钩子标记(由 `cachelane doctor` 读取) |
---
## 安全性和隐私(100%本地优先)
- **无SaaS后端。** 没有提示文本,响应或文件内容离开您的机器,除了直接通过TLS发送到 `api.anthropic.com` 。
- **仅元数据SQLite。** 数据库存储区块哈希,令牌计数和点击统计,绝不存储提示主体,密钥或文件内容。
- **选择加入遥测。** 默认禁用。 如果启用,它仅报告高级汇总(缓存比率,节省)并剥离路径,提示文本,工作区ID和密钥。
---
## 故障保证
缓存层绝不能破坏您的编辑器或与助手断开连接。 如果CacheLane遇到 **任何** 问题(SQLite错误,配置损坏,Node版本不匹配,请求路径中的未捕获异常),它会记录到 `~/.cachelane/cachelane.log` 并 **立即将未修改的请求** 转发到Anthropic。 它绝不会阻塞模型,减慢Claude Code或崩溃您的会话。
CacheLane还强制实施 **缓存稳定性门槛** :编排的前缀区域的SHA-256必须在重复的相同输入运行中字节相同,以防止缓存破坏的漂移来自时间戳,随机种子或无序字段。
---
## 贡献者
### 从源代码构建
```bash
git clone https://github.com/Aditya-Tripuraneni/CacheLane.git
cd CacheLane
npm install
npm run build
npm link # 将 `cachelane` 命令从本地构建中暴露出来
```
### 测试和检查
> **Node版本:** 使用 **Node 20** 。 `better-sqlite3` 的本机绑定已为其预编译,并且更新的major版本可能无法加载绑定。
```bash
npm test # vitest运行(完整套件)
npm run lint # eslint
npx tsc --noEmit # 类型检查
npm run doctor:ci # CI友好安装/健康检查
```
### 确定性基准测试工具
在不花费API积分的情况下审核本地节省。此工具重放预先记录的会话:
```bash
npm run benchmark:recorded
```
它报告基线与实际成本单位以及由此产生的节省比率;输出在 `benchmark/runs/` 下写入。
---
## 架构图
### 拦截生命周期
```mermaid
sequenceDiagram
autonumber
actor User as Claude Code
participant CL as CacheLane Proxy
participant DB as Local SQLite DB
participant API as Anthropic API
Note over User, API: 请求(回合开始)
User->>CL: 转发API请求
CL->>DB: 查询区块状态和波动类别
DB-->>CL: 返回元数据和未使用计数
CL->>CL: 按波动性分组(稳定/半稳定/易失)
CL->>CL: 应用K-剪枝和注入cache_control断点
CL->>API: 发送优化请求
API-->>CL: 流式SSE响应
CL-->>User: 流式SSE响应到Claude Code
Note over User, API: 响应(回合结束)
CL->>CL: 检测响应中的区块引用
CL->>DB: 记录回合统计数据和更新引用计数器
```
### 编排提示布局
```mermaid
graph TD
subgraph 提示结构
direction TB
A[稳定区域<br/>系统,工具定义,固定文档] -->|断点1| B[半稳定区域<br/>最近对话回合]
B -->|断点2| C[易失区域<br/>最新工具输出,用户查询]
end
style A fill:#1e293b,stroke:#3b82f6,stroke-width:2px,color:#fff
style B fill:#334155,stroke:#10b981,stroke-width:2px,color:#fff
style C fill:#475569,stroke:#f59e0b,stroke-width:2px,color:#fff
```
### K-剪枝状态图
```mermaid
stateDiagram-v2
[*] --> Active : 区块添加(unused_turns = 0)
Active --> Active : 回合中引用(重置unused_turns = 0)
Active --> Idle : 回合中未引用(unused_turns += 1)
Idle --> Active : 回合中引用(重置unused_turns = 0)
Idle --> Stubbed : unused_turns >= K(替换为存根)
Stubbed --> Active : 模型调用cachelane_expand(物质化和恢复)
```
---
## 许可证
[Apache-2.0](LICENSE)
MCP 配置
以下是此 MCP Server 的配置信息,可直接复制到 Cursor 或其他 MCP 客户端中使用。
mcp.json
连接信息
猜你喜欢
暂无推荐服务器