Skip to content

Commit ef7deec

Browse files
committed
Document diagnostic agent design
1 parent ff65ada commit ef7deec

2 files changed

Lines changed: 699 additions & 0 deletions

File tree

MEMORY.md

Lines changed: 59 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,59 @@
1+
# VoxBench project memory
2+
3+
このファイルは、今後の実装・設計セッションで維持すべきプロダクト判断を短く記録する。詳細設計は [診断エージェント設計・実装計画](docs/diagnostic-agent-design.md) を参照する。
4+
5+
## 診断エージェント(2026-08-07)
6+
7+
### 目的
8+
9+
VoxBenchに、選択中の通話を起点としてコード、ログ、設定、SIP/RTP、録音、metric、provider eventなどを調査する診断エージェントを追加する。
10+
11+
診断レポートを生成するだけでなく、エージェントがVoxBench UIを共同操作し、「この区間を見てください」と根拠を実演できることを製品要件とする。
12+
13+
### 合意済み
14+
15+
- v1は読み取り専用の診断から始める。
16+
- 数値計算、時刻相関、RTP gap、BYEまでの時間、capture health、rule判定は決定論的コードが担当する。
17+
- LLMは調査計画、型付きtoolの選択、仮説比較、説明を担当する。
18+
- claimは`observed``derived``inferred``unknown``recommended`に分類する。
19+
- 引用のない`observed` claimはユーザーへ表示しない。
20+
- 証拠の欠落を正常と解釈しない。
21+
- 外部LLM APIの利用を許可する。
22+
- モデルproviderは`ModelAdapter`で交換可能にする。
23+
- 外部送信は初期状態でsafe metadataだけを許可する。redaction済みlog/source excerptはpolicyまたは明示操作で許可し、audio/transcript内容は初期状態では送らない。secretは常に送らない。
24+
- UI操作はDOM selector、任意JavaScript、汎用browser automationで行わない。
25+
- VoxBenchが型付きUI commandを定義し、server側でrun/evidence scopeを検証する。
26+
- 初期UI commandはrun/incident選択、evidenceへの移動、time window、panel表示、録音再生・停止、比較、view filter、guided sequenceに限定する。
27+
- 任意URL、フォーム入力、設定保存、任意API呼び出しはUI commandに含めない。
28+
- guided investigationは既定でstepごとにユーザーが進める。ユーザーが手動操作したら一時停止する。
29+
- operator authenticationはOIDCを採用する。独自password管理は作らない。
30+
- WebはAuthorization Code Flow + PKCE、Control Plane/BFFはHttpOnly/Secure/SameSite cookie sessionを使用し、provider tokenをbrowser storageへ保存しない。
31+
- 初期roleは`viewer``diagnoser``operator``admin`を推奨する。
32+
- 既存のremote audio session cookieは録音取得専用で、製品全体のoperator authの代替にはしない。
33+
- productionでの設定変更、実験実行、コード修正は、将来の承認付きactionとして診断ツールから分離する。
34+
35+
### 推奨実装順序
36+
37+
1. Timeline/incident modelとprojectionを`run_api.py`から分離する。
38+
2. Evidence resolverとcoverage summaryを実装する。
39+
3. Disconnect analyzerとgolden fixtureを実装する。
40+
4. LLMなしのdeterministic diagnostic bundle APIを作る。
41+
5. Diagnostic session/message/tool call/claimを永続化する。
42+
6. Fake model、bounded orchestrator、claim/citation validatorを実装する。
43+
7. SSEとAsk VoxBench drawerを実装する。
44+
8. 型付きUI commandとguided investigationを実装する。
45+
9. OIDC operator authとauthorization hookを実装する。
46+
10. Production model adapterとegress policyを接続する。
47+
48+
### 環境接続時に決めること
49+
50+
- 外部model providerとデータ処理地域。
51+
- 実際に接続するOIDC provider。既存のGoogle Workspace、Microsoft Entra ID、Okta等があればそれを優先し、self-hostedではKeycloakまたはAuthentikを候補とする。
52+
- Asterisk/application logの基盤と`LogSourceAdapter`実装。
53+
- runとdeployment commit/artifact digestの関連付け方法。
54+
- 診断message、tool result、caseの保持期間。
55+
- 将来audio/transcriptを扱う場合の同意、redaction、保存地域、保持期間。
56+
57+
### 重要な診断原則
58+
59+
今回の例のように、`GW -> Asterisk BYE`だけでは、発信者の手動切断と中間PBX/GWのtimeoutを識別できない。エージェントは、観測できたBYE方向と時刻を示しつつ、識別不能な境界を`unknown`として残す必要がある。

0 commit comments

Comments
 (0)