{"_id":"@cnife/pi-cache-hit-rate","_rev":"6-e11cc8aaacef0747827f57cbda7b80d1","name":"@cnife/pi-cache-hit-rate","dist-tags":{"latest":"0.4.1"},"versions":{"0.1.0":{"name":"@cnife/pi-cache-hit-rate","version":"0.1.0","keywords":["pi-package"],"author":{"name":"CNife","email":"CNife@vip.qq.com"},"license":"MIT","_id":"@cnife/pi-cache-hit-rate@0.1.0","maintainers":[{"name":"cnife","email":"CNife@vip.qq.com"}],"homepage":"https://github.com/CNife/pi-extensions#readme","bugs":{"url":"https://github.com/CNife/pi-extensions/issues"},"pi":{"extensions":["./extensions"]},"dist":{"shasum":"a2a8bf129a273be972297a6645fdc06dd1216f81","tarball":"https://registry.npmjs.org/@cnife/pi-cache-hit-rate/-/pi-cache-hit-rate-0.1.0.tgz","fileCount":3,"integrity":"sha512-zmCe9GGXlKYHfwwqF3FSZEaATm4/wfkb5RFYpto3/amMkCzxpnf+AypXzMidJzLnKQwHVnulSGKhUTQFbf1tcA==","signatures":[{"sig":"MEYCIQDjbC8qINGD8t/W6DN9ZgbRYkFJXfmijRXL3kKv4gl/eAIhAOSnF3E0tJRgJR7mIxrm0Ff1EwWOU0V0IYpgWxPCtzwd","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":8038},"gitHead":"df9f55ff0c832ffacbc5ba4deafd3215113ad4b1","private":false,"_npmUser":{"name":"cnife","email":"CNife@vip.qq.com"},"repository":{"url":"git+https://github.com/CNife/pi-extensions.git","type":"git"},"_npmVersion":"11.14.1","description":"Show cumulative session cache hit rate in pi footer","directories":{},"_nodeVersion":"26.2.0","publishConfig":{"access":"public","provenance":true},"_hasShrinkwrap":false,"peerDependencies":{"@earendil-works/pi-coding-agent":"*"},"_npmOperationalInternal":{"tmp":"tmp/pi-cache-hit-rate_0.1.0_1780072327351_0.4254406507873627","host":"s3://npm-registry-packages-npm-production"}},"0.2.0":{"name":"@cnife/pi-cache-hit-rate","version":"0.2.0","keywords":["pi-package"],"author":{"name":"CNife","email":"CNife@vip.qq.com"},"license":"MIT","_id":"@cnife/pi-cache-hit-rate@0.2.0","maintainers":[{"name":"cnife","email":"CNife@vip.qq.com"}],"homepage":"https://github.com/CNife/pi-extensions#readme","bugs":{"url":"https://github.com/CNife/pi-extensions/issues"},"pi":{"extensions":["./extensions"]},"dist":{"shasum":"1daeeccadd7b81bccddeeea986f52e2ed4c416a7","tarball":"https://registry.npmjs.org/@cnife/pi-cache-hit-rate/-/pi-cache-hit-rate-0.2.0.tgz","fileCount":3,"integrity":"sha512-1UouSfcG9kvwEbaF8rWsc9gSOq2iPWxTJuXCq53Vcslmjz7OU/UiJSSwRhxwTccwBOMZkKsjxPLR80frANBB6g==","signatures":[{"sig":"MEQCIGzQrlww2K+N5KVcN6jAETEPFbvIj1d5i4e9UX/irxflAiA2/Mo31Yfiigwdrp8n05cbhr/7+nGm5ifCGOVOi7SuQg==","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"attestations":{"url":"https://registry.npmjs.org/-/npm/v1/attestations/@cnife%2fpi-cache-hit-rate@0.2.0","provenance":{"predicateType":"https://slsa.dev/provenance/v1"}},"unpackedSize":12844},"gitHead":"66e0bb4f0272e7bfbfeb8976a58914e9c8dcccce","private":false,"_npmUser":{"name":"GitHub Actions","email":"npm-oidc-no-reply@github.com","trustedPublisher":{"id":"github","oidcConfigId":"oidc:4a98c10b-7151-45a8-8095-a5822a69b1ac"}},"repository":{"url":"git+https://github.com/CNife/pi-extensions.git","type":"git"},"_npmVersion":"11.13.0","description":"Show cumulative session cache hit rate in pi footer","directories":{},"_nodeVersion":"24.16.0","publishConfig":{"access":"public","provenance":true},"_hasShrinkwrap":false,"peerDependencies":{"@earendil-works/pi-coding-agent":"*"},"_npmOperationalInternal":{"tmp":"tmp/pi-cache-hit-rate_0.2.0_1780154826600_0.5406032610640987","host":"s3://npm-registry-packages-npm-production"}},"0.3.0":{"name":"@cnife/pi-cache-hit-rate","version":"0.3.0","keywords":["pi-package"],"author":{"name":"CNife","email":"CNife@vip.qq.com"},"license":"MIT","_id":"@cnife/pi-cache-hit-rate@0.3.0","maintainers":[{"name":"cnife","email":"CNife@vip.qq.com"}],"homepage":"https://github.com/CNife/pi-extensions#readme","bugs":{"url":"https://github.com/CNife/pi-extensions/issues"},"pi":{"extensions":["./extensions"]},"dist":{"shasum":"f192d6cb80cecd2207dfbb27c988df8d83074ba0","tarball":"https://registry.npmjs.org/@cnife/pi-cache-hit-rate/-/pi-cache-hit-rate-0.3.0.tgz","fileCount":3,"integrity":"sha512-t9Xj1kKOeJ98GUkSfOFUdamFS8D0GepMC87nGpYiPrl4rz5p+McaEyAGwAgkNiwBPySGyWg2FQO0ylw5SPW7Jw==","signatures":[{"sig":"MEYCIQCBYerGMqbTUIzLKPNMOdBaSIqPu+Az/GUJgz6hR56phAIhAJmH9qVl0Kss/8OzAwBEM1r0Wnvg9R2T9EhPmVepDlxt","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"attestations":{"url":"https://registry.npmjs.org/-/npm/v1/attestations/@cnife%2fpi-cache-hit-rate@0.3.0","provenance":{"predicateType":"https://slsa.dev/provenance/v1"}},"unpackedSize":14230},"gitHead":"3ba565c91958805df9a520b48a9712aad7471664","private":false,"_npmUser":{"name":"GitHub Actions","email":"npm-oidc-no-reply@github.com","trustedPublisher":{"id":"github","oidcConfigId":"oidc:4a98c10b-7151-45a8-8095-a5822a69b1ac"}},"repository":{"url":"git+https://github.com/CNife/pi-extensions.git","type":"git"},"_npmVersion":"11.13.0","description":"Show cumulative session cache hit rate in pi footer","directories":{},"_nodeVersion":"24.16.0","publishConfig":{"access":"public","provenance":true},"_hasShrinkwrap":false,"peerDependencies":{"@earendil-works/pi-coding-agent":"*"},"_npmOperationalInternal":{"tmp":"tmp/pi-cache-hit-rate_0.3.0_1780503748694_0.8804236515486679","host":"s3://npm-registry-packages-npm-production"}},"0.3.1":{"name":"@cnife/pi-cache-hit-rate","version":"0.3.1","keywords":["pi-package"],"author":{"name":"CNife","email":"CNife@vip.qq.com"},"license":"MIT","_id":"@cnife/pi-cache-hit-rate@0.3.1","maintainers":[{"name":"cnife","email":"CNife@vip.qq.com"}],"homepage":"https://github.com/CNife/pi-extensions#readme","bugs":{"url":"https://github.com/CNife/pi-extensions/issues"},"pi":{"extensions":["./extensions"]},"dist":{"shasum":"cd58135f4423dcc1beaa15b54d49ead9c201c7d7","tarball":"https://registry.npmjs.org/@cnife/pi-cache-hit-rate/-/pi-cache-hit-rate-0.3.1.tgz","fileCount":3,"integrity":"sha512-Q4kAbt1i7jAonFD1W9gcJgIyNg+vmmTt9rLJ6gQZAWuoickokm6gBt+ug56sbeGQC9LN7FolD0kMhx2aSupWcQ==","signatures":[{"sig":"MEQCIDNjGgdUO7RTmUR9+1+wXEgGY32m49UPmS5IUqBSaebzAiBU5xY4KM1nuqsZRKMO7svLsOLGiJb/hdkmToMuhATFtw==","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"attestations":{"url":"https://registry.npmjs.org/-/npm/v1/attestations/@cnife%2fpi-cache-hit-rate@0.3.1","provenance":{"predicateType":"https://slsa.dev/provenance/v1"}},"unpackedSize":16483},"gitHead":"0d7be144026b1fba4c5ef66adab475805c875338","private":false,"_npmUser":{"name":"GitHub Actions","email":"npm-oidc-no-reply@github.com","trustedPublisher":{"id":"github","oidcConfigId":"oidc:4a98c10b-7151-45a8-8095-a5822a69b1ac"}},"repository":{"url":"git+https://github.com/CNife/pi-extensions.git","type":"git"},"_npmVersion":"11.13.0","description":"Show cumulative session cache hit rate in pi footer","directories":{},"_nodeVersion":"24.16.0","publishConfig":{"access":"public","provenance":true},"_hasShrinkwrap":false,"peerDependencies":{"@earendil-works/pi-coding-agent":"*"},"_npmOperationalInternal":{"tmp":"tmp/pi-cache-hit-rate_0.3.1_1780555853450_0.2186674298625313","host":"s3://npm-registry-packages-npm-production"}},"0.4.0":{"name":"@cnife/pi-cache-hit-rate","version":"0.4.0","keywords":["pi-package"],"author":{"name":"CNife","email":"CNife@vip.qq.com"},"license":"MIT","_id":"@cnife/pi-cache-hit-rate@0.4.0","maintainers":[{"name":"cnife","email":"CNife@vip.qq.com"}],"homepage":"https://github.com/CNife/pi-extensions#readme","bugs":{"url":"https://github.com/CNife/pi-extensions/issues"},"pi":{"extensions":["./extensions"]},"dist":{"shasum":"5e45062f38928388d7158f44eea9fd48dad704df","tarball":"https://registry.npmjs.org/@cnife/pi-cache-hit-rate/-/pi-cache-hit-rate-0.4.0.tgz","fileCount":3,"integrity":"sha512-ic80SSThJiOxfjimliinX1pf/e9Dj74wGYDWa2Z9AQ0cbEQKxrzOCkLI6DHoPCpGqn12GZOV9oTudcwHxPvRog==","signatures":[{"sig":"MEYCIQCWXLENAQGEgavNkHXK6VnEnJaBc//aWE4G+0nnNHmwJQIhANFCOaXDoIacPqt/H1hKnTD7k86LeEUrwPa8BK8gFR5t","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"attestations":{"url":"https://registry.npmjs.org/-/npm/v1/attestations/@cnife%2fpi-cache-hit-rate@0.4.0","provenance":{"predicateType":"https://slsa.dev/provenance/v1"}},"unpackedSize":16469},"gitHead":"5f7d6d140f4e48ea0534ea3a9ef000fc75d3488f","private":false,"_npmUser":{"name":"GitHub Actions","email":"npm-oidc-no-reply@github.com","trustedPublisher":{"id":"github","oidcConfigId":"oidc:4a98c10b-7151-45a8-8095-a5822a69b1ac"}},"repository":{"url":"git+https://github.com/CNife/pi-extensions.git","type":"git"},"_npmVersion":"11.13.0","description":"Show cumulative session cache hit rate in pi footer","directories":{},"_nodeVersion":"24.17.0","publishConfig":{"access":"public","provenance":true},"_hasShrinkwrap":false,"peerDependencies":{"@earendil-works/pi-coding-agent":"*"},"_npmOperationalInternal":{"tmp":"tmp/pi-cache-hit-rate_0.4.0_1782659307143_0.5545174485496227","host":"s3://npm-registry-packages-npm-production"}},"0.4.1":{"name":"@cnife/pi-cache-hit-rate","version":"0.4.1","private":false,"keywords":["pi-package"],"description":"[Deprecated] Show cumulative session cache hit rate in pi footer","homepage":"https://github.com/CNife/pi-extensions#readme","bugs":{"url":"https://github.com/CNife/pi-extensions/issues"},"license":"MIT","author":{"name":"CNife","email":"CNife@vip.qq.com"},"repository":{"type":"git","url":"git+https://github.com/CNife/pi-extensions.git"},"publishConfig":{"access":"public","provenance":true},"pi":{"extensions":["./extensions"]},"peerDependencies":{"@earendil-works/pi-coding-agent":"*"},"gitHead":"4cf032bc5de9aff39189bebf549a4f578cd4e18b","_id":"@cnife/pi-cache-hit-rate@0.4.1","_nodeVersion":"24.18.0","_npmVersion":"11.16.0","dist":{"integrity":"sha512-QfT6CBDew67K+87rNWEea4rxe9tHIqWHB6/CcIgzXFfWSPXjEnlZcH0bTsf+wSVE0XTrfocxeMonsajDw1cT2g==","shasum":"3a49b8f5b64ccc103a4ff3c6b0def6c255876dac","tarball":"https://registry.npmjs.org/@cnife/pi-cache-hit-rate/-/pi-cache-hit-rate-0.4.1.tgz","fileCount":3,"unpackedSize":16572,"attestations":{"url":"https://registry.npmjs.org/-/npm/v1/attestations/@cnife%2fpi-cache-hit-rate@0.4.1","provenance":{"predicateType":"https://slsa.dev/provenance/v1"}},"signatures":[{"keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U","sig":"MEUCIAEpcBoLHkzSUJbUQyXq0St9PiMBoL5YiSoPwDX1irzFAiEAnvY2xwyEmKKViG1qBxh5nAWdFPCH7OK2Wv7VPcbc9Ns="}]},"_npmUser":{"name":"GitHub Actions","email":"npm-oidc-no-reply@github.com","trustedPublisher":{"id":"github","oidcConfigId":"oidc:4a98c10b-7151-45a8-8095-a5822a69b1ac"}},"directories":{},"maintainers":[{"name":"cnife","email":"CNife@vip.qq.com"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages-npm-production","tmp":"tmp/pi-cache-hit-rate_0.4.1_1784040866288_0.33934479840745135"},"_hasShrinkwrap":false}},"time":{"created":"2026-05-29T16:32:07.188Z","modified":"2026-07-14T14:54:26.713Z","0.1.0":"2026-05-29T16:32:07.514Z","0.2.0":"2026-05-30T15:27:06.751Z","0.3.0":"2026-06-03T16:22:28.816Z","0.3.1":"2026-06-04T06:50:53.609Z","0.4.0":"2026-06-28T15:08:27.268Z","0.4.1":"2026-07-14T14:54:26.454Z"},"bugs":{"url":"https://github.com/CNife/pi-extensions/issues"},"author":{"name":"CNife","email":"CNife@vip.qq.com"},"license":"MIT","homepage":"https://github.com/CNife/pi-extensions#readme","keywords":["pi-package"],"repository":{"type":"git","url":"git+https://github.com/CNife/pi-extensions.git"},"description":"[Deprecated] Show cumulative session cache hit rate in pi footer","maintainers":[{"name":"cnife","email":"CNife@vip.qq.com"}],"readme":"# @cnife/pi-cache-hit-rate\n\n> ⚠️ Deprecated. pi now provides native cache hit footer and `/session` cache stats.\n\n在 pi 的 footer 状态行中显示当前会话的**缓存命中率**和**缓存失效**指标。\n\n## 功能\n\n- **Current (C)**：最新一条 assistant message 的缓存命中率，反映瞬时缓存状态\n- **Total (T)**：当前分支全部 assistant message 的累计加权命中率，反映长期基准\n- **Real Hit Rate (R)**：有效缓存命中率，排除缓存写入带来的虚高，`R = (1 − Miss / non-cache-input) × 100`\n- **Miss (M)**：累计缓存失效 token 数量，反映因缓存未命中导致的额外输入开销\n\n### Footer 格式\n\n```text\nCache C85.5% T92.1% R96.3% M1.2k\n```\n\n- 无数据时显示 `Cache C--.-% T--.-% R--.-% M--`\n- C/T/R 依据颜色规则着色：绿（优）、黄（一般）、红（差）\n- M 使用紧凑格式（k/M），不着色\n\n### 颜色规则\n\n通过配置文件 `~/.pi/agent/cnife-cache-hit-rate.json` 自定义颜色阈值，默认配置：\n\n```json\n{\n  \"colorRules\": [\n    { \"low\": 0,  \"high\": 75,  \"color\": \"error\" },\n    { \"low\": 75, \"high\": 85,  \"color\": \"warning\" },\n    { \"low\": 85, \"high\": 95,  \"color\": \"default\" },\n    { \"low\": 95, \"high\": 100, \"color\": \"success\" }\n  ]\n}\n```\n\n- `color` 可选值：`error`（红）、`warning`（黄）、`success`（绿）、`default`（默认前景色）\n- 范围 `[low, high)` 左闭右开，最后一条 `<high> ≤ 100` 时为闭区间以覆盖 100%\n- 规则必须完整覆盖 `[0, 100]`，无重叠、无空缺\n- 修改配置后需重启 pi 生效\n\n配置路径为 `<agent-dir>/cnife-cache-hit-rate.json`，`<agent-dir>` 由 `PI_CODING_AGENT_DIR` 环境变量决定，默认为 `~/.pi/agent`。\n\n### 事件处理\n\n- **切换模型 / Compaction / 树导航**：清空所有累计指标，基于当前分支位置重建\n- 每次 assistant message 结束时增量更新四项指标\n\n### 指标说明\n\n| 指标 | 含义 | 计算公式 | 备注 |\n|------|------|----------|------|\n| C | 当前消息缓存命中率 | cacheRead / promptTokens | 瞬时值 |\n| T | 累计缓存命中率 | ΣcacheRead / ΣpromptTokens | 长期基准 |\n| R | 有效缓存命中率 | (1 − ΣMiss / (ΣpromptTokens − ΣcacheRead)) × 100 | 排除缓存写入干扰 |\n| M | 累计失效 token | Σmax(0, baselinePrompt − cacheRead) | token 绝对值 |\n\nMiss 以**用户消息边界为轮**，以上一轮最后一条 assistant message 的 `promptTokens` 作为本轮缓存基线（`baselinePrompt`）。同轮内连续 asst msg 共享同一基线，避免 cacheWrite 虚增 miss。模型切换或 compaction 后归零。\n\n## 安装\n\n```bash\npi install npm:@cnife/pi-cache-hit-rate\n```\n\n## 使用\n\n安装后自动生效，无需额外命令。\n\n## 故障排查\n\n| 现象 | 原因 | 解决 |\n|------|------|------|\n| Footer 显示 `cache config error` | `cnife-cache-hit-rate.json` JSON 非法或 colorRules 不满足约束 | 删除配置文件让插件自动重建，或按格式修正 |\n| Footer 显示 `--.--` | 当前会话还没有有效的 assistant message | 发送一条消息后会自动更新 |\n","readmeFilename":"README.md"}