本プロジェクトは、GitHub/GitLabのMCPサーバーと連携し、タスク(Issue/PR/MR)をLLMで処理するエージェントです。
タスクを一意に識別するためのキークラスです。
サブクラス:
- GitHubIssueTaskKey
- GitHubPullRequestTaskKey
- GitLabIssueTaskKey
- GitLabMergeRequestTaskKey
タスクを表現する抽象クラスです。
サブクラス:
- TaskGitHubIssue(handlers/task_getter_github.py)
- TaskGitHubPullRequest(handlers/task_getter_github.py)
- TaskGitLabIssue(handlers/task_getter_gitlab.py)
- TaskGitLabMergeRequest(handlers/task_getter_gitlab.py)
タスクを取得するための抽象クラスです。
サブクラス:
- TaskGetterFromGitHub(handlers/task_getter_github.py)
- TaskGetterFromGitLab(handlers/task_getter_gitlab.py)
タスクオブジェクトを生成するファクトリクラスです。
サブクラス:
- GitHubTaskFactory
- GitLabTaskFactory
タスクキューの抽象クラスです。
サブクラス:
- InMemoryTaskQueue
- RabbitMQTaskQueue
タスク処理のオーケストレーションを担当するクラスです。LLMクライアントとMCPクライアントを使用してタスクを処理します。
処理モード選択(handle()メソッド内):
- Planning機能が有効(planning.enabled=true)かつUUIDが存在する場合: _handle_with_planning()を呼び出し
- Context Storage機能が有効(context_storage.enabled=true)かつUUIDが存在する場合: _handle_with_context_storage()を呼び出し
- それ以外: _handle_legacy()を呼び出し(従来のインメモリ処理)
主要メソッド:
- handle(): タスク処理のエントリーポイント、処理モードを判定して適切なメソッドを呼び出し
- _handle_with_planning(): 計画実行モードでのタスク処理
- _handle_with_context_storage(): ファイルベースコンテキスト管理でのタスク処理
- _handle_legacy(): 従来のインメモリ処理
MCPサーバーとの通信を担当するクライアントクラスです。設定ファイルで定義されたMCPサーバーを起動し、ツールの呼び出しを処理します。
GitHub API操作のためのクライアントクラスです。TaskGetterFromGitHubおよびGitHubTaskFactoryで使用され、GitHub APIへの直接アクセス(Issue/PR取得、ラベル操作など)を担当します。
GitLab API操作のためのクライアントクラスです。TaskGetterFromGitLabおよびGitLabTaskFactoryで使用され、GitLab APIへの直接アクセス(Issue/MR取得、ラベル操作など)を担当します。
LLMとの通信を担当するクライアントクラス群です。
- LLMClient(clients/llm_base.py): 抽象基底クラス
- OpenAIClient(clients/openai_client.py): OpenAI API用
- LMStudioClient(clients/lmstudio_client.py): LM Studio用
- OllamaClient(clients/ollama_client.py): Ollama用
プロセス排他制御のためのファイルロッククラスです。Producerモードで同時に複数のProducerが起動しないよう排他制御を行います。
タスクコンテキスト全体を管理するクラスです。
メッセージ履歴を管理するクラスです。
コンテキスト要約を管理するクラスです。
ツール実行履歴を管理するクラスです。
コンテキスト圧縮を管理するクラスです。
一時停止・再開機能を管理するクラスです。
タスク停止機能を管理するクラスです。
新規コメント検知機能を管理するクラスです。
計画実行モードのコーディネーターです。
計画履歴を保存するストアクラスです。
プロジェクト固有のエージェントルールをロードするクラスです。
- TaskGetter.factoryでTaskGetterFromGitHub/TaskGetterFromGitLabを生成
- TaskGetter.get_task_list()でTaskKeyのリストを生成
- TaskKeyをInMemoryTaskQueueまたはRabbitMQTaskQueueにput
- consume_tasksでTaskGetter.from_task_key(dict)でTaskインスタンスを復元
- TaskHandler.handle(task)でタスク処理
- TaskGitHubIssue/TaskGitHubPullRequest: MCPToolClient、GithubClientを利用
- TaskGitLabIssue/TaskGitLabMergeRequest: MCPToolClient、GitlabClientを利用
- TaskKeyからTaskを生成(from_task_keyの実装に近い役割)
- TaskKey(dict)をput/get
- Taskオブジェクトを処理
- LLMClientを使用してLLMと対話
- MCPToolClientを使用してツールを実行
- TaskContextManagerを使用してコンテキストを管理
- プロセス排他制御
classDiagram
class TaskKey {
<<abstract>>
+to_dict()
+from_dict()
}
class GitHubIssueTaskKey
class GitHubPullRequestTaskKey
class GitLabIssueTaskKey
class GitLabMergeRequestTaskKey
TaskKey <|-- GitHubIssueTaskKey
TaskKey <|-- GitHubPullRequestTaskKey
TaskKey <|-- GitLabIssueTaskKey
TaskKey <|-- GitLabMergeRequestTaskKey
class Task {
<<abstract>>
+prepare()
+get_prompt()
+comment()
+update_comment()
+finish()
+check()
+get_task_key()
+add_label()
+remove_label()
+get_user()
+get_assignees()
+refresh_assignees()
+get_comments()
}
class TaskGitHubIssue
class TaskGitHubPullRequest
class TaskGitLabIssue
class TaskGitLabMergeRequest
Task <|-- TaskGitHubIssue
Task <|-- TaskGitHubPullRequest
Task <|-- TaskGitLabIssue
Task <|-- TaskGitLabMergeRequest
class TaskGetter {
<<abstract>>
+get_task_list()
+from_task_key()
}
class TaskGetterFromGitHub
class TaskGetterFromGitLab
TaskGetter <|-- TaskGetterFromGitHub
TaskGetter <|-- TaskGetterFromGitLab
class TaskFactory {
<<abstract>>
+create_task()
}
class GitHubTaskFactory
class GitLabTaskFactory
TaskFactory <|-- GitHubTaskFactory
TaskFactory <|-- GitLabTaskFactory
class TaskQueue {
<<abstract>>
+put()
+get()
+empty()
}
class InMemoryTaskQueue
class RabbitMQTaskQueue
TaskQueue <|-- InMemoryTaskQueue
TaskQueue <|-- RabbitMQTaskQueue
class TaskHandler
class MCPToolClient
class GithubClient
class GitlabClient
class FileLock
TaskGitHubIssue o-- MCPToolClient
TaskGitHubIssue o-- GithubClient
TaskGitHubPullRequest o-- MCPToolClient
TaskGitHubPullRequest o-- GithubClient
TaskGitLabIssue o-- MCPToolClient
TaskGitLabIssue o-- GitlabClient
TaskGitLabMergeRequest o-- MCPToolClient
TaskGitLabMergeRequest o-- GitlabClient
TaskHandler o-- Task
InMemoryTaskQueue o-- TaskKey
RabbitMQTaskQueue o-- TaskKey
main o-- TaskGetter
main o-- TaskQueue
main o-- TaskHandler
main o-- FileLock
- LLMクライアント群(OpenAI、LMStudio、Ollama等)はTaskHandler経由で利用される
- main.pyは全体のオーケストレーションを担う
- TaskKey/Task/TaskGetter/TaskFactory/TaskQueueは拡張性を重視し抽象クラス化
- コンテキスト管理クラスはcontext_storageモジュールに集約
- 追加機能(一時停止、停止、コメント検知)は独立したマネージャークラスで管理
文書バージョン: 2.0
最終更新日: 2024-11-28
ステータス: 実装済み