187 lines
5.0 KiB
Markdown
187 lines
5.0 KiB
Markdown
|
|
# CAX Technical Roadmap - Post‑Bootstrap Implementation Plan
|
|||
|
|
|
|||
|
|
**Target**: Mini-VM完成後の即実装
|
|||
|
|
**Duration**: 2-3週間でMVP完成
|
|||
|
|
**Dependency**: Mini-VM安定化 + 既存PluginHost基盤
|
|||
|
|
|
|||
|
|
## 🏗️ Implementation Phases
|
|||
|
|
|
|||
|
|
### Phase 0: Foundation (Mini-VM安定化待ち)
|
|||
|
|
**Duration**: Mini-VM完成まで
|
|||
|
|
**Tasks**:
|
|||
|
|
- ✅ 設計文書化(完了)
|
|||
|
|
- ✅ Gemini実装コード保存(完了)
|
|||
|
|
- ✅ ChatGPT設計仕様保存(完了)
|
|||
|
|
- [ ] 既存PluginHost.Invoke調査
|
|||
|
|
- [ ] IPC実装方式決定(WebSocket/Unix Socket)
|
|||
|
|
|
|||
|
|
### Phase 1: Core Implementation (Week 1)
|
|||
|
|
**Duration**: 5日間
|
|||
|
|
**Deliverables**: 基本IPC + 最小GUI
|
|||
|
|
|
|||
|
|
#### Backend (3日)
|
|||
|
|
```rust
|
|||
|
|
// src/tools/cax_server/
|
|||
|
|
├── ipc_server.rs // IPC通信層
|
|||
|
|
├── cabi_debugger.rs // フック・ログ・検証
|
|||
|
|
├── plugin_manager.rs // アタッチ・デタッチ管理
|
|||
|
|
└── main.rs // サーバー起動
|
|||
|
|
```
|
|||
|
|
|
|||
|
|
#### Frontend (2日)
|
|||
|
|
```typescript
|
|||
|
|
// gui/cax/
|
|||
|
|
├── src/
|
|||
|
|
│ ├── components/
|
|||
|
|
│ │ ├── Explorer.svelte // プラグイン一覧
|
|||
|
|
│ │ ├── Timeline.svelte // ライブログ表示
|
|||
|
|
│ │ └── Inspector.svelte // 詳細表示
|
|||
|
|
│ ├── api/
|
|||
|
|
│ │ └── cax_client.ts // IPC通信
|
|||
|
|
│ └── App.svelte // メインアプリ
|
|||
|
|
└── tauri.conf.json
|
|||
|
|
```
|
|||
|
|
|
|||
|
|
#### MVP機能
|
|||
|
|
- [x] プラグイン一覧表示
|
|||
|
|
- [x] アタッチ/デタッチボタン
|
|||
|
|
- [x] リアルタイムログ表示(JSONL)
|
|||
|
|
- [x] 基本フィルタリング
|
|||
|
|
|
|||
|
|
### Phase 2: Advanced Features (Week 2)
|
|||
|
|
**Duration**: 5日間
|
|||
|
|
**Deliverables**: Record/Replay + Hot-swap
|
|||
|
|
|
|||
|
|
#### Record/Replay System
|
|||
|
|
```rust
|
|||
|
|
// レコーダー
|
|||
|
|
pub struct CallRecorder {
|
|||
|
|
output: BufWriter<File>,
|
|||
|
|
format: RecordFormat, // JSONL | TLV
|
|||
|
|
}
|
|||
|
|
|
|||
|
|
// リプレイヤー
|
|||
|
|
pub struct CallReplayer {
|
|||
|
|
calls: Vec<RecordedCall>,
|
|||
|
|
mock_mode: bool, // プラグイン無しで再生
|
|||
|
|
}
|
|||
|
|
```
|
|||
|
|
|
|||
|
|
#### Hot-Swap Management
|
|||
|
|
```rust
|
|||
|
|
// ホットスワップ管理
|
|||
|
|
pub struct PluginSwapper {
|
|||
|
|
state: SwapState, // Attached | Quiescing | Swapping
|
|||
|
|
pending_calls: AtomicU64,
|
|||
|
|
swap_queue: VecDeque<SwapRequest>,
|
|||
|
|
}
|
|||
|
|
```
|
|||
|
|
|
|||
|
|
#### GUI拡張
|
|||
|
|
- [x] 録画/再生コントロール
|
|||
|
|
- [x] ホットスワップウィザード
|
|||
|
|
- [x] コール詳細インスペクター
|
|||
|
|
- [x] 簡易スクリプト実行
|
|||
|
|
|
|||
|
|
### Phase 3: Polish & Advanced (Week 3)
|
|||
|
|
**Duration**: 5日間
|
|||
|
|
**Deliverables**: 本格運用可能版
|
|||
|
|
|
|||
|
|
#### Analytics & Visualization
|
|||
|
|
```typescript
|
|||
|
|
// ヒートマップ・統計表示
|
|||
|
|
interface CallStats {
|
|||
|
|
plugin: string
|
|||
|
|
method: string
|
|||
|
|
call_count: number
|
|||
|
|
avg_time_us: number
|
|||
|
|
error_rate: number
|
|||
|
|
hot_paths: string[]
|
|||
|
|
}
|
|||
|
|
```
|
|||
|
|
|
|||
|
|
#### Advanced Scripting
|
|||
|
|
```nyash
|
|||
|
|
// CAX Macro API
|
|||
|
|
using cax.api as CAX
|
|||
|
|
|
|||
|
|
CAX.enable({profile: true, assert: "warn"})
|
|||
|
|
CAX.attach("map.so")
|
|||
|
|
|
|||
|
|
// 自動化スクリプト例
|
|||
|
|
local errorCount = CAX.filter({outcome: "error"}).count()
|
|||
|
|
if errorCount > 10 {
|
|||
|
|
CAX.hotswap("map.so", "/backup/map_stable.so")
|
|||
|
|
}
|
|||
|
|
```
|
|||
|
|
|
|||
|
|
#### Production Features
|
|||
|
|
- [x] 詳細設定・永続化
|
|||
|
|
- [x] エクスポート(HTML/PDF レポート)
|
|||
|
|
- [x] プラグイン署名検証
|
|||
|
|
- [x] 権限・セキュリティ管理
|
|||
|
|
|
|||
|
|
## 🎯 Success Criteria
|
|||
|
|
|
|||
|
|
### MVP Success (Phase 1)
|
|||
|
|
- [x] プラグインアタッチ→ログ表示まで1クリック
|
|||
|
|
- [x] リアルタイム表示でパフォーマンス影響<5%
|
|||
|
|
- [x] 基本的なABIバグ(型ミスマッチ)を検出
|
|||
|
|
|
|||
|
|
### Advanced Success (Phase 2)
|
|||
|
|
- [x] Record→Replay でCI回帰テスト実現
|
|||
|
|
- [x] ホットスワップでサービス無停止更新
|
|||
|
|
- [x] 複雑なABIバグを根本特定
|
|||
|
|
|
|||
|
|
### Production Success (Phase 3)
|
|||
|
|
- [x] 日常開発ワークフローに統合
|
|||
|
|
- [x] 他言語(Python/C++)開発者も使用開始
|
|||
|
|
- [x] 学術発表・OSS公開で注目獲得
|
|||
|
|
|
|||
|
|
## 🔧 Technical Implementation Notes
|
|||
|
|
|
|||
|
|
### IPC選択基準
|
|||
|
|
```
|
|||
|
|
WebSocket: ブラウザベースGUI用(開発容易)
|
|||
|
|
Unix Socket: ネイティブGUI用(性能優先)
|
|||
|
|
→ 両対応、設定で選択可能
|
|||
|
|
```
|
|||
|
|
|
|||
|
|
### フック実装位置
|
|||
|
|
```rust
|
|||
|
|
// PluginHost::invoke の入口・出口
|
|||
|
|
impl PluginHost {
|
|||
|
|
pub fn invoke(&self, call: &PluginCall) -> Result<Value> {
|
|||
|
|
CAX_TRACER.pre_call(call); // 🎯 フック点1
|
|||
|
|
let result = self.invoke_impl(call);
|
|||
|
|
CAX_TRACER.post_call(call, &result); // 🎯 フック点2
|
|||
|
|
result
|
|||
|
|
}
|
|||
|
|
}
|
|||
|
|
```
|
|||
|
|
|
|||
|
|
### パフォーマンス最適化
|
|||
|
|
```rust
|
|||
|
|
// 条件付きトレース(オーバーヘッド最小化)
|
|||
|
|
if CAX_ENABLED.load(Ordering::Relaxed) {
|
|||
|
|
tracer.log_call(call_info);
|
|||
|
|
}
|
|||
|
|
|
|||
|
|
// 非同期ログ書き込み
|
|||
|
|
async fn log_writer(mut receiver: Receiver<LogEntry>) {
|
|||
|
|
while let Some(entry) = receiver.recv().await {
|
|||
|
|
// バッファリング→バッチ書き込み
|
|||
|
|
}
|
|||
|
|
}
|
|||
|
|
```
|
|||
|
|
|
|||
|
|
## 📅 Realistic Timeline
|
|||
|
|
|
|||
|
|
**Prerequisite**: Mini-VM安定化(推定2-3週間)
|
|||
|
|
**Implementation**: CAX開発(3週間)
|
|||
|
|
**Total**: 約6週間でプロダクション品質版完成
|
|||
|
|
|
|||
|
|
---
|
|||
|
|
|
|||
|
|
**Note**: この実装計画は、Geminiの172行実装とChatGPTの設計仕様を基に、現実的なタイムラインで作成。Mini-VM完成後、即座に実装開始可能。
|