7.0 KiB
| title | state | created_at | updated_at | assignee | queued_by | queued_at |
|---|---|---|---|---|---|---|
| Session reference viewを共通基盤として実装する | closed | 2026-07-17T23:04:40Z | 2026-07-17T23:27:20Z | null | yoi ticket | 2026-07-17T23:15:15Z |
背景
Memory extract は runtime 側で session snapshot から filtered view を作り、session-explore tools で evidence を読んで flat staging candidates を作る予定である。一方、compaction も既に session history から summary input を作り、search_session_log / read_session_items で詳細を探索する形に近い。
この2つは目的が違うが、共通して「session history から人間/LLMが扱いやすい参照 view を作る」「bounded に探索・読取する」という基盤を必要とする。extract 専用でも compact 専用でもない中立的な共通基盤として Session reference view を実装する。
関連:
- Objective
00001KVJSMQXZ - Ticket
00001KXMK7YMC— session-explore feature付きextract workerを実装する - worker compaction implementation:
crates/worker/src/compact/worker.rs
実装意図
Session reference view は、session history の full raw dump ではなく、internal worker が必要な範囲を辿るための host-created immutable view である。
目的:
- User / Assistant text outputs から semantic overview を作る。
- Tool calls / tool results / file refs などを evidence index として分離する。
- compact / extract などの internal worker が同じ read/search substrate を使えるようにする。
- read/search output を bounded にし、raw tool result 全文や reasoning を無制限に渡さない。
- extract では source anchor / evidence id を staging record へ接続できるようにする。
- compact では summary worker が必要な session detail を安全に読めるようにする。
対象領域
候補:
crates/worker/src/compact/worker.rs- 既存の
build_summary_input/search_session_log/read_session_itemsに相当する projection / read 機能。
- 既存の
crates/memory/src/extract/input.rs- extract 用 Overview-first input。
crates/worker/src/internal_worker.rs- internal worker runner から参照 view を渡す将来接続点。
- 新規 module 候補:
crates/worker/src/session_reference.rs- または extract/compact から独立した crate-local module。
実装要件
- immutable
SessionReferenceView相当の型を実装する。- view 作成時点の session items /
entry_rangeを固定する。 - foreground history の live mutation を直接読まない。
- view 作成時点の session items /
- view は少なくとも次を提供する。
- overview projection。
- evidence index。
- bounded search。
- bounded read by stable id /
entry_range。
- overview projection は User / Assistant text outputs を主軸にする。
- Progress message と final response は同じ text output として扱う。
- tool result 全文や reasoning は overview に混ぜない。
- evidence index は user / assistant / system / tool などの session reference kind で参照可能にする。
- evidence id を持つ。
entry_rangeを持つ。- kind を持つ。
- tool entry は input / output のどちらを対象にするか区別できる。
- short label / summary を持つ。
- bounded read は、指定範囲の message / tool summary / bounded excerpt を返す。
- token / byte / item count の上限を持つ。
- over-limit 時は truncation metadata を返す。
- search は初期実装では text match / substring / simple case-insensitive query でよい。
- jq-like structural query は初期実装に含めない。
- ただし kind / id /
entry_rangeで絞れる API にする。 - tool kind では input / output / both を検索対象として指定できる。
- extract 向けに、evidence id から source anchor を作れる情報を保持する。
- compact 向けに、既存
search_session_log/read_session_items相当を置き換えられる構造にする。 - 既存 compaction behavior を壊さない。
Access model 方針
初期 API は、LLM が扱いやすい id / entry_range based access を中心にする。
- Overview item には
overview_id/message_seqのような安定 id を付ける。 - Progress message だけを特別扱いして
prog yで指定するより、User / Assistant text output を同じ overview item として並べる。 - ただし表示上は、長い turn の中で progress が複数あることが分かるように label を持たせる。
- 範囲指定は
overview_id/evidence_id/entry_rangeを基本にする。 turn x, prog y ~ turn x, prog zのような UI 表示は可能だが、tool input の canonical key にはしない。kindは role と evidence type を統合した filter として扱う。userassistantsystemtool
- tool kind では
tool_partを指定できる。input: tool call name / arguments を検索・読取対象にする。output: tool result summary / bounded content excerpt を検索・読取対象にする。both: input / output の両方を対象にする。
推奨 tool/API shape:
search_reference(query, kind?, tool_part?, limit?) -> ids + labels + entry_ranges
read_reference(id | entry_range, include_tools?, tool_part?, max_items?, max_bytes?) -> bounded entries + truncation metadata
resolve_reference(id | entry_range) -> source anchor
探索は初期段階では text search と typed filters の組み合わせにする。jq-like structural query は強力だが、LLM tool input として複雑になりやすいため後回しにする。tool input / output を別々に検索したい需要は初期 filter として扱う。
非目標
- Protocol method として external client に公開しない。
- vector search / embedding search は実装しない。
- jq-like full structural query language は実装しない。
- raw tool result 全文を unbounded に読ませない。
- Progress message 専用の別 item kind を導入しない。
- compaction の全面 rewrite はこの Ticket では行わない。
session-explorefeature tools 本体はこの Ticket では実装しない。共通基盤だけを作る。
受け入れ条件
SessionReferenceView相当の共通型がある。- User / Assistant text outputs から overview projection を作れる。
- tool calls / tool results を evidence index として参照できる。
- search filter は
kindで user / assistant / system / tool を扱える。 - tool kind では input / output / both を検索・読取対象として選べる。
- bounded search / read がある。
- read output に truncation metadata がある。
- extract が source anchor を作るための evidence id / entry range / kind を取得できる。
- compact 側の既存 search/read と置き換え可能な形になっている。
- relevant unit tests が追加されている。
cargo test -p workerまたは該当 crate の同等テストが通る。- code 変更として
nix build .#yoiが通る。