omp packages

@yukikisaku/pi-retain-cache0.1.2

Keep supported Pi model prompt caches warm while the TUI is idle

yukikisaku Published 5 days ago MIT ~310 downloads/mo

Untested on omp

This is a pi package. No one has reported whether it works on omp yet. If you try it, add your result below.

Did it work for you?

Result

One report per person. A new report replaces your old one.

Reports 0

No reports yet.

Readme

pi-retain-cache

PiのTUIを放置している間、選択中モデルへ短い維持リクエストを送り、プロンプトキャッシュの再利用を試みる拡張。

インストール

pi install npm:@yukikisaku/pi-retain-cache

Piの @earendil-works/pi-coding-agent と @earendil-works/pi-tui が必要。維持リクエストはTUIモードだけで動作する。開発テストにはNode.js 22以降を使用する。

対象と既定値

対象判定はプロバイダーではなくモデルIDで行う。以下の7系統を自動対象とし、それ以外には送信しない。同じ系統の全モデルで設定を共有する。openai/gpt-… など利用先の名前が付いたIDにも対応する。

系統 既定の実行間隔
GPT 25分
Claude 50分
Gemini 10分
GLM 10分
Kimi 4分
Qwen 10分
DeepSeek 10分

間隔はキャッシュの保持時間や命中を保証するものではない。 同じモデルでも利用先・プラン・キャッシュ設定によって条件が変わる。

  • GPTの25分は、30分保持に対応した近年の公式APIモデルを想定した値。古いモデルや別の利用先では調整が必要。
  • Claudeの50分は、Claude Code/Agent SDKでサブスクのプラン内利用時に使われる1時間キャッシュを想定。APIキー・追加課金・短いTTLの設定では5分になる場合があり、その場合は4分などに変更する。
  • Kimiの4分は、公式APIの既定5分キャッシュを想定した値。
  • Gemini・GLM・Qwenの自動キャッシュは数値TTLが非公表または不定。DeepSeekは通常数時間〜数日という目安だけで、固定TTLではない。この4系統の10分は試行間隔であり、TTLから算出した値ではない。

公式資料(2026-10-13確認):OpenAI、Claude Code、Kimi、Gemini、GLM、Qwen、DeepSeek。

動作

通常会話が終了すると放置期間が始まる。次の条件を満たす間、非表示の <retain-cache/> をPiの通常の選択中モデルへの送信経路で送る。

  • 拡張が有効で、モデルが対象の7系統に含まれる
  • エージェントが待機中で、保留メッセージと入力欄の下書きがない
  • 共通の放置上限内に次の実行間隔が収まる

返答ルールは会話内の非表示メッセージとして渡す。モデルはツールを呼ばず <retained-cache/> だけ返す。指示がコンパクションや巻き戻しで消えた場合は送り直す。system promptを書き換えず、Claude Bridgeにも会話経路から指示を渡す。

このタグは維持リクエストへの応答確認であり、キャッシュ命中の証拠ではない。通常会話と維持リクエストの応答について、生のproviderイベントがキャッシュ読み込み0トークンと実入力を明示した場合だけ、cache miss · gpt のような通知を表示する。部分命中を含むhit・判定不能・維持成功の通知は表示しない。

Piが正規化した cacheRead: 0 だけでは、未報告と本当のゼロを区別できない。生usageを公開しないprovider(Claude Bridgeなど)では、判定不能としてmiss通知を出さない。エラーや中断された応答もmiss扱いしない。

ツール呼び出し・想定外の返答・エラー・タイムアウトで維持が失敗した場合はエラーを通知し、次の通常会話終了まで追加送信を止める。通知設定はmiss表示だけを制御し、このエラーを隠すものではない。

認証情報を直接読まず、providerのHTTPエンドポイントを直接呼ばない。Piの標準cache warmingとは別の機能であり、併用時は維持リクエストが重複する可能性がある。本拡張はPiのグローバル設定を変更しない。

設定画面

/retain-cache
Retain Cache Settings

→ Show notification:        on
  Retain prompt cache for:  120 min
  gpt interval              25 min
  claude interval           50 min
  gemini interval           10 min
  glm interval              10 min
  kimi interval              4 min
  qwen interval             10 min
  deepseek interval         10 min

  ↑↓ select · ←→ change · Esc close
  • Show notification:miss通知のON/OFF。
  • Retain prompt cache for(Max idle):全系統共通の放置上限。既定120分。通常会話を再開したら数え直す。
  • 各 interval:系統別の送信間隔。

上下で行を選び、左右で変更する。変更は即保存される。放置上限より長い間隔ではリクエストを送らず、上限を勝手に延長しない。

設定ファイル

パッケージ内の config.json に保存する。候補にない分数も、このファイルで正の数として指定できる。再インストール・更新で設定が置き換わる場合があるので、必要なら控えを残す。

{
  "enabled": true,
  "maxIdleMinutes": 120,
  "requestTimeoutMinutes": 2,
  "intervalMinutes": {
    "gpt": 25,
    "claude": 50,
    "gemini": 10,
    "glm": 10,
    "kimi": 4,
    "qwen": 10,
    "deepseek": 10
  },
  "showNotification": true
}

旧名・旧設定への互換処理は持たない。過去セッションのログは書き換えない。古い非表示タグや通知が新版で表示される場合がある。

非表示の制御応答とtree項目は、Piが公開するassistant-message・tree-selector UIコンポーネントへのパッチで隠す。Pi内部ファイルへのdeep importは使わない。

開発確認

npm test
npm run smoke:packed
npm pack --dry-run

イベント経路テストは本物のPiローダーで拡張を読み込み、通常会話の指示追加からタイマー送信・provider生usage・応答終了・次回予約までを通す。時間と通信だけを固定し、実モデルへは送信しない。梱包テストはnpmパッケージを展開して同じローダーで読み、設定画面の変更・保存と通知OFFも確認する。これらは、実モデルが必ず指示に従うことや、実際のキャッシュ保持を保証するテストではない。

実際のCodexでも確認する場合は、明示的に実送信を許可する。通常の npm run check には含めない。

npm run smoke:codex -- --send

PiのSDKと既存のCodex認証を使い、新規のメモリ内セッションで通常会話1回・自動維持2回を送る。Claude Bridgeや他の拡張・プロジェクト指示は読み込まない。非公開情報を含まない固定データを使い、一時コピーだけ間隔を3秒に短縮する。普段の設定とセッション履歴は変更しない。

返答ルールが実payloadに含まれること、2回とも正確なタグ応答であること、少なくとも1回の生usageでキャッシュ命中があること、明示的missだけが通知されることを確認する。毎回の命中は要求しない。実際に1回目の維持がmiss、2回目がhitになるケースも観測した。これは短時間での実検証であり、既定25分間隔や120分間の保持保証ではない。

アンインストール

pi remove npm:@yukikisaku/pi-retain-cache

ライセンス

MIT。詳細は LICENSE。