Skip to content

Commit 6739078

Browse files
Copilotnotfolder
andauthored
Add multi-language Docker execution environment with planning-phase selection (#109)
* Initial plan * Add multi-language Docker environment specification and Dockerfiles Co-authored-by: notfolder <20558197+notfolder@users.noreply.github.com> * Address code review feedback - remove unused base-packages.sh and fix terminology Co-authored-by: notfolder <20558197+notfolder@users.noreply.github.com> * dockerファイル削除 * Address review feedback: revert system_prompt and docker-compose, restructure spec document to integrate environment selection into planning phase Co-authored-by: notfolder <20558197+notfolder@users.noreply.github.com> * Remove redundant environment selection criteria and docker pull reference per review feedback Co-authored-by: notfolder <20558197+notfolder@users.noreply.github.com> --------- Co-authored-by: copilot-swe-agent[bot] <198982749+Copilot@users.noreply.github.com> Co-authored-by: notfolder <20558197+notfolder@users.noreply.github.com> Co-authored-by: notfolder <notfolder@gmail.com>
1 parent 363276a commit 6739078

2 files changed

Lines changed: 630 additions & 29 deletions

File tree

docs/spec/COMMAND_EXECUTOR_MCP_SPECIFICATION.md

Lines changed: 73 additions & 29 deletions
Original file line numberDiff line numberDiff line change
@@ -21,6 +21,8 @@
2121

2222
- Command Executor MCP Serverを使用してコマンド実行をサポートする
2323
- 実行環境はDockerで独立してタスク毎に初期化される
24+
- **計画フェーズで適切な言語環境を選択し、その環境でコンテナを起動する**
25+
- **各言語用イメージにはgitとCommand Executor MCPの基盤機能をあらかじめインストールしておき、即座に起動可能な状態にする**
2426
- 実行環境にはあらかじめプロジェクトファイルをダウンロードしておく
2527
- タスク終了時に実行環境を削除する
2628

@@ -29,6 +31,7 @@
2931
- [Command Executor MCP Server(外部)](https://zenn.dev/sunwood_ai_labs/articles/command-executor-mcp-server-v0-1-0-release)
3032
- [基本仕様](spec.md)
3133
- [継続動作モード仕様](CONTINUOUS_MODE_SPECIFICATION.md)
34+
- **[複数言語対応実行環境仕様](MULTI_LANGUAGE_ENVIRONMENT_SPECIFICATION.md)**
3235

3336
---
3437

@@ -40,6 +43,7 @@
4043
flowchart TD
4144
subgraph CodingAgent[コーディングエージェント]
4245
TaskHandler[TaskHandler]
46+
PlanningCoordinator[PlanningCoordinator]
4347
MCPClient[MCPToolClient]
4448
ExecutionManager[ExecutionEnvironmentManager]
4549
end
@@ -50,6 +54,13 @@ flowchart TD
5054
5155
subgraph DockerHost[Docker Host]
5256
DockerAPI[Docker API]
57+
subgraph DockerImages[言語別Dockerイメージ]
58+
ImgPython[Python イメージ]
59+
ImgMiniforge[Miniforge イメージ]
60+
ImgNode[Node.js イメージ]
61+
ImgJava[Java イメージ]
62+
ImgGo[Go イメージ]
63+
end
5364
subgraph ExecutionContainer[実行環境コンテナ]
5465
ProjectFiles[プロジェクトファイル]
5566
WorkDir[作業ディレクトリ]
@@ -61,11 +72,13 @@ flowchart TD
6172
GitLab[GitLab]
6273
end
6374
75+
TaskHandler --> PlanningCoordinator
76+
PlanningCoordinator -->|環境選択| ExecutionManager
6477
TaskHandler --> MCPClient
6578
MCPClient --> CommandMCP
66-
TaskHandler --> ExecutionManager
6779
ExecutionManager --> DockerAPI
68-
DockerAPI --> ExecutionContainer
80+
DockerAPI --> DockerImages
81+
DockerImages --> ExecutionContainer
6982
ExecutionManager -->|git clone| GitPlatform
7083
CommandMCP -->|コマンド実行| ExecutionContainer
7184
```
@@ -77,7 +90,9 @@ flowchart TD
7790
実行環境の生成、管理、削除を担当するコンポーネントです。
7891

7992
**責務:**
80-
- タスク毎のDockerコンテナの生成
93+
- **利用可能な言語環境リストの提供**
94+
- **計画フェーズからの環境選択受付**
95+
- タスク毎のDockerコンテナの生成(**選択された言語イメージを使用**
8196
- プロジェクトファイルのダウンロードとマウント
8297
- コンテナの状態監視
8398
- タスク終了時のコンテナ削除
@@ -122,18 +137,33 @@ coding-agent-exec-{task_uuid}
122137

123138
この命名規則により、タスクとコンテナの紐付けを明確にし、クリーンアップ時の特定を容易にします。
124139

125-
### 3.3 ベースイメージの設定
140+
### 3.3 言語別イメージの設定
141+
142+
実行環境は計画フェーズでLLMが選択した言語に応じた専用イメージを使用します。各イメージには以下の共通機能があらかじめインストールされています:
143+
144+
**共通プリインストール済みツール:**
145+
- git(バージョン管理)
146+
- curl / wget(ファイルダウンロード)
147+
- jq(JSON処理)
148+
- tree(ディレクトリ構造表示)
149+
- その他基本的なコマンドラインツール
126150

127-
実行環境のベースイメージは設定ファイルで指定可能とします。デフォルトでは汎用的な開発環境イメージを使用します。
151+
**利用可能な言語環境:**
128152

129-
**デフォルトイメージ:**
130-
- Node.js、Python、Go、Java等の主要言語のランタイムを含む
131-
- Git、curl、wget等の基本ツールを含む
132-
- 非rootユーザーで実行
153+
| 環境名 | イメージ名 | 説明 | 主な用途 |
154+
|--------|-----------|------|----------|
155+
| python | coding-agent-executor-python:latest | Python 3.11 + pip + pytest/black/flake8/mypy | 純粋Pythonプロジェクト、Webフレームワーク |
156+
| miniforge | coding-agent-executor-miniforge:latest | conda/mamba + Python + データサイエンスツール | 科学計算、ML/AI、condaenv.yaml使用プロジェクト |
157+
| node | coding-agent-executor-node:latest | Node.js 20 + npm/yarn/pnpm + TypeScript/ESLint | フロントエンド、Node.jsバックエンド |
158+
| java | coding-agent-executor-java:latest | Java 21 + Maven + Gradle | Spring Boot、Java/Kotlinプロジェクト |
159+
| go | coding-agent-executor-go:latest | Go 1.22 + golangci-lint | Goプロジェクト、CLIツール |
133160

134-
**カスタムイメージ:**
135-
- プロジェクト毎にカスタムイメージを指定可能
136-
- プロジェクトルートの設定ファイルで上書き可能
161+
**環境選択の判断基準:**
162+
- プロジェクトルートの依存関係ファイル(package.json, requirements.txt等)
163+
- Issue/MRの内容から推測される言語・フレームワーク
164+
- デフォルト環境: python(選択に失敗した場合)
165+
166+
詳細は[複数言語対応実行環境仕様](MULTI_LANGUAGE_ENVIRONMENT_SPECIFICATION.md)を参照してください。
137167

138168
### 3.4 リソース制限
139169

@@ -172,24 +202,32 @@ coding-agent-exec-{task_uuid}
172202

173203
### 4.1 ダウンロードフロー
174204

205+
**注意:** コンテナ作成は計画フェーズ完了後、環境選択フェーズで実行されます。
206+
175207
```mermaid
176208
sequenceDiagram
177-
participant TH as TaskHandler
209+
participant PC as PlanningCoordinator
178210
participant EM as ExecutionEnvironmentManager
179211
participant Docker as Docker API
180212
participant Git as Git Platform
181213
182-
TH->>EM: 実行環境準備要求(task)
183-
EM->>Docker: コンテナ作成
214+
Note over PC: 計画フェーズ完了
215+
PC->>EM: 利用可能環境リスト取得
216+
EM-->>PC: 環境リスト
217+
PC->>PC: LLMによる環境選択
218+
PC->>EM: prepare(task, selected_environment)
219+
EM->>Docker: コンテナ作成(選択されたイメージで)
184220
Docker-->>EM: コンテナID
185221
EM->>Docker: コンテナ起動
222+
Note over Docker: gitはイメージにプリインストール済み
186223
EM->>Docker: git clone実行
187224
Docker->>Git: リポジトリクローン
188225
Git-->>Docker: ファイル取得
189226
Docker-->>EM: クローン完了
190227
EM->>Docker: ブランチチェックアウト(PR/MRの場合)
191228
Docker-->>EM: チェックアウト完了
192-
EM-->>TH: 実行環境準備完了
229+
EM-->>PC: 実行環境準備完了
230+
Note over PC: 実行フェーズ開始
193231
```
194232

195233
### 4.2 クローン対象の決定
@@ -238,20 +276,26 @@ sequenceDiagram
238276

239277
## 5. タスク毎の環境初期化仕様
240278

241-
### 5.1 初期化フロー
279+
### 5.1 初期化フロー(計画後に実行)
280+
281+
**変更点:** コンテナ作成タイミングが「タスク開始時」から「計画フェーズ完了後」に変更されました。
242282

243283
```mermaid
244284
flowchart TD
245-
A[タスク開始] --> B[ExecutionEnvironmentManager.prepare]
246-
B --> C{既存コンテナ確認}
247-
C -->|存在する| D[既存コンテナ削除]
248-
C -->|存在しない| E[新規コンテナ作成]
249-
D --> E
250-
E --> F[コンテナ起動]
251-
F --> G[プロジェクトファイルダウンロード]
252-
G --> H[依存関係インストール]
253-
H --> I[初期化完了]
254-
I --> J[タスク処理開始]
285+
A[タスク開始] --> B[計画フェーズ]
286+
B --> C[計画作成完了]
287+
C --> D[環境選択フェーズ]
288+
D --> E[LLMが環境を選択]
289+
E --> F[ExecutionEnvironmentManager.prepare]
290+
F --> G{既存コンテナ確認}
291+
G -->|存在する| H[既存コンテナ削除]
292+
G -->|存在しない| I[選択されたイメージでコンテナ作成]
293+
H --> I
294+
I --> J[コンテナ起動]
295+
J --> K[プロジェクトファイルダウンロード]
296+
K --> L[依存関係インストール]
297+
L --> M[初期化完了]
298+
M --> N[実行フェーズ開始]
255299
```
256300

257301
### 5.2 クリーン環境の保証
@@ -260,8 +304,8 @@ flowchart TD
260304

261305
**初期化時の処理:**
262306
1. 同一task_uuidのコンテナが存在する場合は削除
263-
2. 新規コンテナを作成
264-
3. プロジェクトファイルを新規にクローン
307+
2. **選択された言語環境のイメージを使用して**新規コンテナを作成
308+
3. **gitは既にインストール済みのため、即座に**プロジェクトファイルをクローン
265309
4. 必要に応じて依存関係をインストール
266310

267311
**前タスクの影響排除:**

0 commit comments

Comments
 (0)