1
0

Add complete ai.card Rust implementation

- Implement complete Rust API server with axum framework
- Add database abstraction supporting PostgreSQL and SQLite
- Implement comprehensive gacha system with probability calculations
- Add JWT authentication with atproto DID integration
- Create card master data system with rarities (Normal, Rare, SuperRare, Kira, Unique)
- Implement draw history tracking and collection management
- Add API endpoints for authentication, card drawing, and collection viewing
- Include database migrations for both PostgreSQL and SQLite
- Maintain full compatibility with Python API implementation
- Add comprehensive documentation and development guide

🤖 Generated with [Claude Code](https://claude.ai/code)

Co-Authored-By: Claude <noreply@anthropic.com>
This commit is contained in:
2025-06-07 17:43:10 +09:00
parent ef907660cc
commit 0b34568585
57 changed files with 3469 additions and 422 deletions

390
README.md
View File

@ -1,315 +1,143 @@
# ai.card
# ai.card プロジェクト固有情報
🎴 atproto基盤カードゲームシステム × 🧠 ai.gpt AI統合
## プロジェクト概要
- **名前**: ai.card
- **パッケージ**: aicard
- **タイプ**: atproto基盤カードゲーム
- **役割**: ユーザーデータ主権カードゲームシステム
## 概要
## 実装状況
ai.cardは、ユーザーがデータを所有する分散型カードゲームです。
- 🤖 **AI統合**: ai.gpt MCPサーバー経由でAI機能拡張
- 🔗 **atproto連携**: 分散SNSとのデータ同期
- 📱 **クロスプラットフォーム**: iOS/Web統合クライアント
- 🎯 **yui-system**: 個人の唯一性を保証するユニークカード実装
### 現在の状況
- **ai.bot統合**: ai.botの機能として実装済み
- **カード取得**: atproto accountでmentionすると1日1回カード取得可能
- **データ管理**: ai.api (MCP server) でユーザー管理
## アーキテクチャ
### 独立MCPサーバーai.gpt連携
- **場所**: `/Users/syui/ai/gpt/card/`
- **サーバー**: FastAPI + fastapi_mcp (port 8000)
- **統合**: ai.gptサーバーからHTTP連携
### 基本構成ai.card独立動作
## アーキテクチャ構成
### 技術スタック
- **Backend**: FastAPI + MCP
- **Frontend**: React Web UI + SwiftUI iOS app
- **Data**: atproto collection recordユーザー所有
- **Auth**: OAuth 2.1 scope実装待ち
### データフロー
```
iOS/Web Client
↓ HTTP API
ai.card API Server (port 8000) 🎴 基本カードゲーム
SQLite/PostgreSQL + atproto PDS
ユーザー → ai.bot mention → カード生成 → atproto collection → ユーザー所有
↑ ↓
← iOS app表示 ← ai.card API ←
```
### AI拡張構成オプション
```
iOS/Web Client
↓ HTTP API (基本機能)
ai.card API Server (port 8000) 🎴 カードゲーム
SQLite/PostgreSQL + atproto PDS
## 移行計画
iOS/Web Client (AI機能のみ)
↓ HTTP API (AI拡張)
ai.gpt MCP Server (port 8001) 🧠 AI分析・統計
↓ HTTP Client
ai.card MCP Server (port 8000)
```
### Phase 1: 独立化
- **iOS移植**: Claude担当予定
- **Web UI**: React実装
- **API独立**: ai.botからの分離
**設計思想**: ai.cardは完全に独立して動作し、ai.gptは必要に応じてai.cardと連携するオプション機能
### Phase 2: データ主権実装
- **atproto collection**: カードデータをユーザー所有に
- **OAuth 2.1**: 不正防止機能実装
- **画像ファイル**: Cloudflare Pages最適化
## 技術スタック
### Phase 3: ゲーム機能拡張
- **ガチャシステム**: 確率・レアリティ管理
- **トレード機能**: ユーザー間カード交換
- **デッキ構築**: カードゲーム戦略要素
### バックエンド
- **ai.card API**: Python/FastAPI独立動作
- **MCP統合**: オプションでai.gpt連携
- **データベース**: SQLite (開発) / PostgreSQL (本番)
- **認証**: atproto OAuth 2.1 + レガシーアプリパスワード
## yui system適用
### フロントエンド
- **Web**: React + TypeScript + Vite
- **iOS**: Swift/SwiftUI + Combine
- **基本機能**: ガチャ・コレクション・統計ai.card単体
- **AI拡張**: コレクション分析・AI統計ai.gpt連携時のみ
### 唯一性担保
- **カード効果**: アカウント固有の効果設定
- **改ざん防止**: ハッシュ・署名による保証
- **ゲームバランス**: 唯一性による公平性維持
## プロジェクト構造
### ai.verse連携
- **ゲーム内アイテム**: ai.verseでのカード利用
- **固有スキル**: カードとキャラクターの連動
- **現実反映**: カード取得がゲーム内能力に影響
## ディレクトリ構成
```
ai.card/
├── api/ # FastAPI + MCP Server
│ ├── app/
├── main.py # エントリポイント
├── mcp_server.py # MCP統合サーバー
│ │ ├── models/ # データモデル
│ │ ├── routes/ # REST API
│ │ └── services/ # ビジネスロジック
│ └── requirements.txt
├── web/ # React Web Client
│ ├── src/
│ │ ├── components/ # UI コンポーネント
│ │ ├── services/ # API クライアント (ai.gpt経由)
│ │ └── styles/ # CSS スタイル
│ └── package.json
├── ios/ # iOS SwiftUI App
│ └── AiCard/
│ ├── Models/ # データモデル + AI統合
│ ├── Services/ # API クライアント (ai.gpt経由)
│ └── Views/ # SwiftUI ビュー
├── docs/ # ドキュメント
└── scripts/ # 環境セットアップ
/Users/syui/ai/gpt/card/
├── api/ # FastAPI + MCP server
├── web/ # React Web UI
├── ios/ # SwiftUI iOS app
└── docs/ # 開発ドキュメント
```
## 🧠 AI機能
## MCPツールai.gpt連携
### コレクション分析
- **AIによる自動分析**: レアリティ分布・コレクション評価
- **個人化推奨**: ユーザーの収集パターンに基づく提案
- **スコアリング**: 総合的なコレクション価値算出
### ガチャ統計
- **リアルタイム統計**: 全体・個人のガチャ成功率
- **トレンド分析**: 時系列での引き運分析
- **活動履歴**: 最近のガチャ結果表示
## セットアップ
### 基本セットアップai.card単体
#### 1. ai.card サーバー起動
```bash
# 自動セットアップ
./setup_venv.sh
# サーバー起動
./start_server.sh
# → http://localhost:8000 で起動
```
#### 2. Web クライアント起動
```bash
cd web
npm install
npm run dev
# → http://localhost:5173 で起動(基本機能利用可能)
```
#### 3. iOS 開発
```bash
# Xcodeでプロジェクトを開く
open ios/AiCard/AiCard.xcodeproj
# → 基本機能(ガチャ・コレクション・統計)利用可能
```
### AI拡張セットアップオプション
#### 4. ai.gpt サーバー起動AI機能用
```bash
# ai.gptプロジェクトで実行
cd ../
aigpt server --port 8001
# → http://localhost:8001 で起動
# → AI分析・統計機能が利用可能に
```
## 🔐 atproto OAuth認証実装完了
### OAuth 2.1 + DPoP認証システム
#### 認証フロー
1. **ユーザー認証**: Blueskyハンドル入力 (例: syui.ai)
2. **OAuth認証**: BrowserOAuthClient による認証リダイレクト
3. **セッション管理**: DPoP保護されたトークンでセキュア認証
4. **Handle表示**: DIDからHandleの自動解決
#### 実装詳細
```typescript
// OAuth設定
const oauthClient = await BrowserOAuthClient.load({
clientId: clientId,
handleResolver: 'https://bsky.social',
});
// 認証実行(重要: transition:genericスコープが必須
const authUrl = await this.oauthClient.authorize(handle, {
scope: 'atproto transition:generic', // カスタムコレクション用
});
// セッション取得
const result = await oauthClient.init();
const agent = new Agent(result.session); // 公式推奨方法
```
#### カスタムコレクション対応
- **コレクション**: `ai.card.box`
- **必要スコープ**: `transition:generic`(カスタムレコードタイプ用)
- **レコード例**:
```json
{
"$type": "ai.card.box",
"cards": [...],
"total_cards": 25,
"updated_at": "2025-01-06T..."
}
```
#### 確認方法
```bash
# atproto レコード確認
curl -sL "https://bsky.social/xrpc/com.atproto.repo.listRecords?repo=syui.ai&collection=ai.card.box"
```
### データ主権の実現
- **ユーザーがデータを所有**: atproto networkでレコード管理
- **分散型アーキテクチャ**: 中央集権的サーバーに依存しない
- **相互運用性**: 他のatproto対応アプリとのデータ共有可能
## 使い方
### Web アプリケーション
#### 基本機能ai.card単体
1. **ガチャ**: 通常/プレミアムガチャでカード取得
2. **コレクション**: 保有カード一覧・詳細表示
3. **📊 統計**: ガチャ統計・レアリティ分布
#### AI拡張機能ai.gpt連携時
4. **🧠 AI分析**: コレクション分析・推奨システム
5. **📊 統計 (AI強化)**: 高度な統計・トレンド分析
### iOS アプリケーション
- Web版と同等の機能をネイティブUIで提供
- SwiftUI + Combine による reactive UI
- ai.card独立動作 + オプションでai.gpt AI機能
## API エンドポイント
### ai.card 直接API基本機能
| エンドポイント | 説明 | メソッド |
|---------------|------|---------|
| `/api/v1/cards/draw` | ガチャ実行 | POST |
| `/api/v1/cards/user/{did}` | カード一覧取得 | GET |
| `/api/v1/cards/{id}` | カード詳細 | GET |
| `/api/v1/cards/stats` | ガチャ統計 | GET |
| `/api/v1/cards/unique` | ユニークカード | GET |
| `/api/v1/health` | システム状態 | GET |
### ai.gpt MCP ToolsAI拡張機能
| エンドポイント | 説明 | パラメータ |
|---------------|------|-----------|
| `/card_analyze_collection` | AI分析 | did |
| `/card_get_gacha_stats` | AI統計 | - |
### 依存関係
- **ai.card**: 完全独立動作(依存なし)
- **ai.gpt**: ai.cardに依存オプション機能として
### カード管理
- **card_get_user_cards**: ユーザーカード取得
- **card_draw_card**: ガチャ実行
- **card_analyze_collection**: コレクション分析
- **card_check_daily_limit**: 日次制限確認
- **card_get_card_stats**: カード統計情報
- **card_manage_deck**: デッキ管理
## 開発状況
### 完成済み
- [x] **MCP Server統合**: ai.card独立サーバー + ai.gpt連携
- [x] **SQLite基盤**: カード・ガチャ・ユーザー管理
- [x] **AI機能**: コレクション分析・ガチャ統計
- [x] **Web UI**: React SPA + AI機能タブ
- [x] **iOS基盤**: SwiftUI + ai.gpt連携APIクライアント
- [x] **OAuth 2.1認証**: atproto OAuth + DPoP認証実装完了
- [x] **atproto データバックアップ**: ai.card.boxコレクションへの保存機能
### 完成済み機能
-**基本カード生成**: ai.bot統合での1日1回取得
-**atproto連携**: mention機能
-**MCP統合**: ai.gptからの操作
### 🚧 進行中
- [ ] **atproto データ復元**: ai.card.boxからローカルへの復元機能
- [ ] **ユニークカード**: yui-system実装
- [ ] **リアルタイム機能**: WebSocket対応
### 開発中機能
- 🔧 **iOS app**: SwiftUI実装
- 🔧 **Web UI**: React実装
- 🔧 **独立API**: FastAPI server
### 🎯 今後の予定
### 将来機能
- 📋 **OAuth 2.1**: 不正防止強化
- 📋 **画像最適化**: Cloudflare Pages
- 📋 **ゲーム拡張**: トレード・デッキ戦略
#### 次回作業項目(優先度高)
- [ ] **atproto データ復元機能**: ai.card.boxからローカルSQLiteへの復元
- [ ] **CardBox コンポーネント**: atproto レコード表示UI
- [ ] **同期機能**: ローカル ↔ atproto 双方向同期
- [ ] **iOS OAuth対応**: SwiftUIでのatproto認証実装
## ai.botからの移行詳細
#### 将来的な拡張
- [ ] **本番デプロイ**: Cloudflare + PostgreSQL
- [ ] **ai.verse統合**: 3Dメタバース連携
- [ ] **分散SNS**: atproto PDS自動投稿
- [ ] **マルチユーザー対応**: 他ユーザーのコレクション閲覧
### 現在のai.bot実装
- **Rust製**: seahorse CLI framework
- **atproto連携**: mention機能でカード配布
- **日次制限**: 1アカウント1日1回取得
- **自動生成**: AI絵画Leonardo.AI + Stable Diffusion
## トラブルシューティング
### 独立化の理由
- **iOS展開**: モバイルアプリでの独立した体験
- **ゲーム拡張**: デッキ構築・バトル機能の追加
- **データ主権**: ユーザーによる完全なデータ所有
- **スケーラビリティ**: サーバー負荷分散
### OAuth認証エラー
## 技術的課題と解決策
#### `Missing required scope: transition:generic`
```typescript
// 解決方法: スコープに transition:generic を追加
const authUrl = await this.oauthClient.authorize(handle, {
scope: 'atproto transition:generic', // ✅ 正しい
// scope: 'atproto', // ❌ 不十分
});
```
### データ改ざん防止
- **短期**: MCP serverによる検証
- **中期**: OAuth 2.1 scope実装待ち
- **長期**: ブロックチェーン的整合性チェック
#### Handle が "unknown" と表示される
```typescript
// 原因: BrowserOAuthClient の使用方法が間違っている
// 解決方法: sessionオブジェクトを直接Agentに渡す
const agent = new Agent(result.session); // ✅ 公式推奨
// new Agent({service: '...', fetch: session.dpopFetch}); // ❌ 非推奨
```
### スケーラビリティ
- **画像配信**: Cloudflare Pages活用
- **API負荷**: FastAPIによる高速処理
- **データ保存**: atproto分散ストレージ
#### カスタムコレクションへの書き込みエラー
```bash
# 確認: OAuth スコープが正しく設定されているか
# ブラウザコンソールで確認:
console.log(atprotoOAuthService.getSession());
# → scope: "atproto transition:generic" が含まれているか確認
```
### ユーザー体験
- **直感的UI**: iOS/Webでの統一UX
- **リアルタイム更新**: WebSocketでの即座反映
- **オフライン対応**: ローカルキャッシュ機能
### ai.gpt連携エラー
```bash
# ai.gptサーバーが起動しているか確認
curl http://localhost:8001/health
## ai.game連携構想
# ai.cardサーバーが起動しているか確認
curl http://localhost:8000/health
```
### Play-to-Work統合
- **カードゲームプレイ → 業務成果変換**: ai.gameデバイスでの労働ゲーム化
- **デッキ構築戦略 → 企業戦略思考**: カード組み合わせが戦略思考を鍛練
- **トレード交渉 → ビジネススキル**: 他プレイヤーとの交渉が実務能力向上
### データベースエラー
```bash
# データベース初期化
cd api
~/.config/syui/ai/card/venv/bin/python init_db.py
```
### atproto データ確認
```bash
# バックアップされたレコードを確認
curl -sL "https://bsky.social/xrpc/com.atproto.repo.listRecords?repo={YOUR_HANDLE}&collection=ai.card.box"
# レコード詳細取得
curl -sL "https://bsky.social/xrpc/com.atproto.repo.getRecord?repo={YOUR_HANDLE}&collection=ai.card.box&rkey=self"
```
## 貢献
ai.card は ai.gpt エコシステムの一部として開発されています。
- [ai.gpt 統合設計書](../CLAUDE.md)
- [MCP統合作業報告](./docs/MCP_INTEGRATION_SUMMARY.md)
- [AI統合ガイド](../docs/AI_CARD_INTEGRATION.md)
### メタバース展開
- **ai.verse統合**: 3D世界でのカードバトル
- **アバター連動**: 所有カードがキャラクター能力に影響
- **配信コンテンツ**: カードゲームが配信可能なエンターテイメント