貢献ガイド

コード構造

以下のコードファイル構造を参照すると、コードの構成をより理解しやすくなります。

[cmd/]
├── server                // サーバー起動のエントリーポイント
├── lib                   // 共有ライブラリのエントリーポイント
└── test                  // 一般的なテストスクリプト
[build/]                  // 各種アーキテクチャとプラットフォーム用のビルドスクリプト
[internal/]               // 内部パッケージ
├── controller            // HTTPリクエストハンドラ
├── middleware            // リクエスト処理用ミドルウェア
├── server                // サーバーのセットアップと設定
├── service               // コントローラー用のサービス提供
├── static                // 設定ファイル
│   ├── nodejs_syscall    // Node.jsシステムコールのホワイトリスト
│   └── python_syscall    // Pythonシステムコールのホワイトリスト
├── types                 // エンティティ
├── core                  // 分離と実行のためのコアロジック
│   ├── lib               // 共有ライブラリ
│   ├── runner            // コード実行
│   │   ├── nodejs        // Node.jsランナー
|   |   └── python        // Pythonランナー
└── tests                 // CI/CD用のテスト

原理

現在、コアロジックには2つの主要なエントリーポイントがあります。1つはDifySandboxのHTTPサービスエントリーポイント、もう1つは動的リンクライブラリのエントリーポイントです。Sandboxがコードを実行する際、まず一時的なコードファイルが生成されます。このファイルの冒頭で動的リンクライブラリを呼び出して実行環境(Sandbox)を初期化し、その後にユーザーコードが実行されます。最終的に、ユーザーが提出したコードを直接実行するのではなく、この一時ファイルを実行することで、システムの安全性を確保します。

動的リンクライブラリでは、Seccomp(Secure Computing Mode)を使用してシステムコールを制限しています。許可されるシステムコールはstaticディレクトリのnodejs_syscallおよびpython_syscallファイルに定義されており、ARM64とAMD64の両アーキテクチャ向けのシステムコールホワイトリストを提供しています。特別な理由がない限り、これらのファイルを変更しないでください。

貢献方法

タイポやバグなどの小さな問題については、直接プルリクエスト(PR)を送信してください。大規模な変更や新機能の提案については、まずイシューを作成し、議論を行ってください。

今後の課題

現在検討中の課題がいくつかあります。興味があれば、以下のタスクに取り組んでいただけます:

Last updated