Extend session store with real-time event capture and health invariants
まだ誰も着手していません。
評価
- 難易度
- 5/5
- 見積もり時間
- 1週間以上
- 初心者へのやさしさ
- 25/100
- issue の種類
- 機能追加
- 明瞭さ
- 説明が足りない
- 活発さ
- 停滞
- 技術スタック
- rust
- 領域
- backend, observability
調査の方向性
Start by reading the existing persistence, search, and session-import paths in terraphim_sessions and the analysis entry points in terraphim-session-analyzer. Trace the listed integration points in terraphim_hooks, terraphim_service, terraphim_multi_agent, terraphim_types, and terraphim_mcp_server, then confirm scope before implementation; done means event capture, typed events, correlation IDs, invariant results, and the listed integrations are covered.
索引モデルが issue の本文から書いたものです。
説明
Summary
Extend terraphim_sessions and terraphim-session-analyzer with real-time event-level capture, structured event types, and health invariant queries. Not a new crate -- the session store already has persistence, search, and KG enrichment.
Why Not a Separate Event Store?
Originally proposed as a new terraphim_event_store crate. But terraphim_sessions already:
- Parses session logs into structured records (costs, tool usage, patterns)
- Uses
terraphim_persistencebackends (SQLite, DashMap, S3) - Supports KG-enriched search via Aho-Corasick automata
- Has rayon-based parallel processing
A session IS a sequence of events. Building parallel storage is over-engineering.
What's Missing (Gaps to Fill)
1. Real-time capture (not just post-hoc import)
Currently: session logs are imported after the session ends.
Needed: events captured as they happen during a session.
Add a SessionEventEmitter trait:
pub trait SessionEventEmitter: Send + Sync {
async fn emit(&self, event: SessionEvent) -> Result<()>;
}
Hook into existing infrastructure:
terraphim_hooks(PreToolUse, PostToolUse) -> emit events in real-timeterraphim_service(search, LLM calls) -> emit events on each operationterraphim_multi_agent(agent decisions) -> emit events per decision
2. Structured event types
Currently: session-analyzer parses free-text logs.
Needed: typed event records for structured queries.
pub enum SessionEvent {
LlmCall { model: String, tokens_in: u32, tokens_out: u32, cost_usd: f64, latency_ms: u64 },
SearchExecuted { query: String, results_count: u32, relevance_scores: Vec<f64> },
HookFired { hook_type: HookType, action: String, result: HookResult },
Prediction { id: Ulid, source: String, predicted_outcome: String, confidence: f64 },
Outcome { prediction_id: Ulid, actual_outcome: String, accuracy: f64 },
ToolUse { tool: String, input_summary: String, success: bool, duration_ms: u64 },
}
These coexist with existing free-text session import -- typed events are a superset.
3. Health invariant queries
Currently: session-analyzer identifies patterns post-hoc.
Needed: automated drift/anomaly detection over rolling windows.
Invariants to detect:
- Model version drift: responses from unexpected model versions
- Score distribution shift: ranking scores deviate >2 sigma from rolling baseline
- Latency degradation: P95 response time exceeds historical threshold
- Error rate spike: error rate exceeds N% over rolling window
- Cost anomaly: per-session cost exceeds historical P95
Implementation: add check_invariants() method to session-analyzer that runs over the last N sessions/events and returns violations.
4. Correlation IDs
Currently: events within a session are sequential but not linked.
Needed: link related events (e.g., Prediction -> Outcome, PreToolUse -> PostToolUse for same invocation).
Add correlation_id: Option<Ulid> to SessionEvent. Events in the same logical operation share a correlation ID.
Affected Crates
terraphim_sessions(primary -- add real-time emitter, event types)terraphim-session-analyzer(add health invariant queries)terraphim_hooks(emit events via SessionEventEmitter)terraphim_service(emit events for search/LLM calls)terraphim_types(add SessionEvent enum, HookType, etc.)terraphim_mcp_server(expose invariant check results as MCP resource)
Estimated Effort
~1 day for event types + real-time emitter + basic invariants. Ongoing integration per crate.
Part of
Epic #595
Downstream Dependents
- #598 Budget-aware routing (cost tracking via session events)
- #599 Enhanced learning capture (learning events are session events)
- #601 EIDOS episodic reasoning (predictions/outcomes stored as session events)
- #602 Confidence-driven KG promotion (queries session events for confidence scoring)
- 主要言語
- Rust
- スター
- 62
- フォーク
- 5
- 平均マージ
- 2時間 27分
- マージ済み PR(30日)
- 1
コントリビューションガイド
はじめの一歩
- issue を最後まで読み、次にプロジェクトのコントリビューションガイドを読みます。
- 着手することを issue にコメントします — 二人が同じ作業をするのを防げます。
- リポジトリをフォークし、ブランチを切って変更します。
- issue 番号を参照したプルリクエストを送ります。
terraphim/terraphim-ai のほかの issue
-
難易度 5/5 1週間以上 初心者へのやさしさ 25/100
terraphim/terraphim-ai#885 ·
-
難易度 4/5 3〜5日 初心者へのやさしさ 55/100
terraphim/terraphim-ai#871 ·
-
enhancement
難易度 5/5 1週間以上 初心者へのやさしさ 25/100
terraphim/terraphim-ai#810 · コメント 2 件 ·
-
enhancement
難易度 5/5 1週間以上 初心者へのやさしさ 35/100
terraphim/terraphim-ai#729 ·
-
enhancement
難易度 5/5 1週間以上 初心者へのやさしさ 35/100
terraphim/terraphim-ai#728 ·
terraphim/terraphim-ai の issue をすべて見る
似ている issue
-
難易度 2/5 1〜3時間 初心者へのやさしさ 75/100
-
state:needs triage
難易度 2/5 1〜3時間 初心者へのやさしさ 70/100
zed-industries/zed#64680 · コメント 2 件 ·
-
難易度 2/5 1〜3時間 初心者へのやさしさ 70/100
-
難易度 2/5 1〜3時間 初心者へのやさしさ 70/100
RustPython/RustPython#8802 ·
-
難易度 2/5 1〜3時間 初心者へのやさしさ 75/100
TheLarkInn/aipm#2390 ·