OSS検証エンジン
X Knowledge Agent の最大の差別化要素です。ブックマーク内で共有されたOSSリポジトリの安全性と品質を自動検証し、AIレポートを生成します。
検証フロー概要
mermaid
flowchart TD
A["ブックマーク内の\nGitHub URL検出"] --> B["Step 1\nGitHub メタデータ収集"]
B --> C["Step 2\nセキュリティ監査"]
C --> D["Step 3\nDocker サンドボックス\nビルド & テスト"]
D --> E["Step 4\nAI レポート生成"]
E --> F["OSSReport\nレコード保存"]
style A fill:#f9f,stroke:#333
style F fill:#9f9,stroke:#333Step 1: GitHub メタデータ収集
GitHub API を使用してリポジトリのメタデータを収集します。
収集データ
mermaid
graph LR
API["GitHub API"] --> Stars["スター数"]
API --> License["ライセンス"]
API --> Lang["主要言語"]
API --> Contributors["コントリビューター数"]
API --> LastCommit["最終コミット日"]
API --> CI["CI設定の有無"]
API --> Tests["テストの有無"]
API --> Org["オーナー組織"]API エンドポイント
| データ | エンドポイント |
|---|---|
| リポジトリ情報 | GET /repos/{owner}/{repo} |
| コントリビューター | GET /repos/{owner}/{repo}/contributors |
| ワークフロー | GET /repos/{owner}/{repo}/actions/workflows |
| ディレクトリ構造 | GET /repos/{owner}/{repo}/contents/ |
Step 2: セキュリティ監査
静的解析によるセキュリティチェックを実施します。
チェック項目
mermaid
flowchart TD
A["ソースコード取得"] --> B["不可視文字検出"]
A --> C["依存関係の脆弱性"]
A --> D["install hooks 検査"]
A --> E["ネットワーク呼び出し検出"]
B -->|"Unicode BiDi,\nzero-width chars"| R["リスクスコア"]
C -->|"npm audit,\npip-audit"| R
D -->|"preinstall,\npostinstall"| R
E -->|"fetch, axios,\nnet.connect"| R検出対象の脅威
| 脅威 | 検出方法 | 深刻度 |
|---|---|---|
| 不可視文字(BiDi攻撃) | Unicode コードポイント検査 | Critical |
| 依存関係の脆弱性 | npm audit / pip-audit | High |
| 悪意のある install hooks | package.json の scripts 検査 | High |
| 不審なネットワーク呼び出し | AST 解析 + パターンマッチ | Medium |
| minified/難読化コード | エントロピー分析 | Medium |
| 過剰な権限要求 | マニフェスト/設定ファイル検査 | Low |
Step 3: Docker サンドボックスビルド & テスト
隔離環境でビルドとテストを実行します。詳細は OSSサンドボックス設計 を参照。
mermaid
sequenceDiagram
participant Engine as 検証エンジン
participant Docker as Docker Engine
participant Container as サンドボックス
Engine->>Docker: コンテナ作成(制限付き)
Docker-->>Container: 起動
Engine->>Container: リポジトリクローン
Container->>Container: 依存関係インストール
Container->>Container: ビルド実行
Container->>Container: テスト実行
Container-->>Engine: 結果(exit code, logs, screenshot)
Engine->>Docker: コンテナ削除判定基準
| 結果 | 条件 |
|---|---|
BUILD_SUCCESS | ビルドが正常に完了 |
BUILD_FAIL | ビルドエラー |
TEST_PASS | 全テストが通過 |
TEST_FAIL | テスト失敗あり |
TIMEOUT | 5分以内に完了しなかった |
NETWORK_VIOLATION | 許可されていないネットワーク通信を検出 |
Step 4: AI レポート生成
収集した全データを Claude に渡し、人間が読みやすいレポートを生成します。
レポート内容
- リポジトリの概要と用途
- セキュリティ評価サマリー
- ビルド・テスト結果の解説
- 推奨事項(使用可否、注意点)
- 類似ツールとの比較(既存ナレッジがある場合)
安全性スコア計算
メタデータから 0-100 のスコアを算出します。
スコアリングテーブル
| 要素 | ウェイト | スコアリング基準 |
|---|---|---|
| スター数 | 20% | 0-10: 0pt, 10-100: 5pt, 100-1000: 8pt, 1000+: 10pt |
| ライセンス (OSI) | 15% | MIT/Apache: 10, GPL: 7, None: 0 |
| 最終コミット | 20% | <1ヶ月: 10, <6ヶ月: 7, <1年: 4, それ以外: 0 |
| コントリビューター数 | 15% | 1人: 3, 2-5人: 6, 5-20人: 8, 20人+: 10 |
| CI設定 | 10% | あり: 10, なし: 0 |
| テスト | 10% | あり: 10, なし: 0 |
| 著名組織 | 10% | メジャー組織: 10, その他: 5 |
判定閾値
mermaid
graph LR
Score["安全性スコア"] --> High["50以上\n✅ VERIFY"]
Score --> Mid["30-49\n⚠️ CAUTION"]
Score --> Low["30未満\n🚫 DANGER"]
style High fill:#4caf50,color:#fff
style Mid fill:#ff9800,color:#fff
style Low fill:#f44336,color:#fff| スコア範囲 | 判定 | アクション |
|---|---|---|
| 50 以上 | VERIFY | サンドボックスでの検証を続行 |
| 30 - 49 | CAUTION | 警告付きで検証。レポートに注意事項を強調 |
| 30 未満 | DANGER | 検証を中止。危険フラグを立てる |
出力例
json
{
"repoUrl": "https://github.com/example/tool",
"repoOwner": "example",
"repoName": "tool",
"stars": 1250,
"license": "MIT",
"language": "TypeScript",
"securityScore": 78,
"securityVerdict": "VERIFY",
"buildResult": "BUILD_SUCCESS",
"testResult": "TEST_PASS",
"usageNotes": "高品質なTypeScriptライブラリ。CI/CDも整備されており、安全に使用可能。"
}