@agents-ensemble/cli 0.14.0 → 0.15.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.md +13 -3
- package/config.example.yaml +7 -3
- package/dist/index.js +8 -3
- package/dist/index.js.map +1 -1
- package/dist/issue-command.d.ts +6 -4
- package/dist/issue-command.d.ts.map +1 -1
- package/dist/issue-command.js +13 -10
- package/dist/issue-command.js.map +1 -1
- package/dist/session-log-lines.js +1 -1
- package/dist/session-log-lines.js.map +1 -1
- package/dist/tui/activity-log.d.ts +1 -1
- package/dist/tui/activity-log.d.ts.map +1 -1
- package/dist/tui/activity-log.js +16 -2
- package/dist/tui/activity-log.js.map +1 -1
- package/dist/tui/create-issue-session-tui-host.d.ts.map +1 -1
- package/dist/tui/create-issue-session-tui-host.js +1 -1
- package/dist/tui/create-issue-session-tui-host.js.map +1 -1
- package/dist/tui/ink-test-keys.d.ts +4 -0
- package/dist/tui/ink-test-keys.d.ts.map +1 -1
- package/dist/tui/ink-test-keys.js +4 -0
- package/dist/tui/ink-test-keys.js.map +1 -1
- package/dist/tui/issue-session-tui-stream.d.ts.map +1 -1
- package/dist/tui/issue-session-tui-stream.js +77 -8
- package/dist/tui/issue-session-tui-stream.js.map +1 -1
- package/dist/tui/issue-session-tui-stream.test.js +257 -3
- package/dist/tui/issue-session-tui-stream.test.js.map +1 -1
- package/dist/tui/issue-session-tui.d.ts +3 -2
- package/dist/tui/issue-session-tui.d.ts.map +1 -1
- package/dist/tui/issue-session-tui.js +145 -12
- package/dist/tui/issue-session-tui.js.map +1 -1
- package/dist/tui/issue-session-tui.test.js +390 -16
- package/dist/tui/issue-session-tui.test.js.map +1 -1
- package/dist/tui/open-questions-pane.d.ts +19 -0
- package/dist/tui/open-questions-pane.d.ts.map +1 -1
- package/dist/tui/open-questions-pane.js +35 -34
- package/dist/tui/open-questions-pane.js.map +1 -1
- package/dist/tui/operator-command-suggestions.d.ts +15 -0
- package/dist/tui/operator-command-suggestions.d.ts.map +1 -1
- package/dist/tui/operator-input-history.d.ts +13 -0
- package/dist/tui/operator-input-history.d.ts.map +1 -0
- package/dist/tui/operator-input-history.js +51 -0
- package/dist/tui/operator-input-history.js.map +1 -0
- package/dist/tui/operator-input-layout.d.ts +2 -0
- package/dist/tui/operator-input-layout.d.ts.map +1 -1
- package/dist/tui/operator-input-layout.js +73 -0
- package/dist/tui/operator-input-layout.js.map +1 -1
- package/dist/tui/operator-text-area.d.ts +2 -0
- package/dist/tui/operator-text-area.d.ts.map +1 -1
- package/dist/tui/operator-text-area.js +16 -4
- package/dist/tui/operator-text-area.js.map +1 -1
- package/dist/tui/operator-text-area.test-double.d.ts.map +1 -1
- package/dist/tui/operator-text-area.test-double.js +13 -12
- package/dist/tui/operator-text-area.test-double.js.map +1 -1
- package/dist/tui/operator-text-area.test.js +16 -2
- package/dist/tui/operator-text-area.test.js.map +1 -1
- package/dist/tui/pane-layout.d.ts +2 -0
- package/dist/tui/pane-layout.d.ts.map +1 -1
- package/dist/tui/pane-layout.js +7 -3
- package/dist/tui/pane-layout.js.map +1 -1
- package/dist/tui/stream-layout.d.ts +3 -3
- package/dist/tui/stream-layout.d.ts.map +1 -1
- package/dist/tui/stream-layout.js +6 -6
- package/dist/tui/stream-layout.js.map +1 -1
- package/dist/tui/tui-layout-constants.d.ts +1 -1
- package/dist/tui/tui-layout-constants.d.ts.map +1 -1
- package/dist/tui/tui-layout-constants.js +1 -1
- package/dist/tui/tui-layout-constants.js.map +1 -1
- package/dist/tui/tui-view-model.d.ts.map +1 -1
- package/dist/tui/tui-view-model.js +2 -8
- package/dist/tui/tui-view-model.js.map +1 -1
- package/docs/config.md +107 -20
- package/docs/settings.md +9 -7
- package/package.json +3 -3
package/docs/config.md
CHANGED
|
@@ -10,13 +10,18 @@ conductor に渡す MCP 設定もこの config.yaml とは別の JSON ファイ
|
|
|
10
10
|
|
|
11
11
|
| 層 | パス | 優先度 |
|
|
12
12
|
|----|------|--------|
|
|
13
|
-
| プロジェクト | `<repoRoot>/.ensemble/config.yaml` |
|
|
13
|
+
| プロジェクト | `<repoRoot>/.ensemble/config.yaml` | 高(読み込み有効時) |
|
|
14
14
|
| ユーザ | `~/.ensemble/config.yaml` | 低(既定) |
|
|
15
15
|
|
|
16
|
-
-
|
|
16
|
+
- 両方あり、読み込みが有効な場合は **deep merge**(プロジェクトがユーザを上書き)
|
|
17
|
+
- user 設定で project 層を無効にした場合は **user 設定のみ**
|
|
17
18
|
- どちらも無い場合は **コード内デフォルト**
|
|
18
19
|
- **環境変数・CLI フラグは config より優先**(明示上書き)
|
|
19
20
|
|
|
21
|
+
ユーザ設定の `config.loadProjectConfig: false` を指定すると、project config を読み込まず user 設定だけで解決します。既定値は `true` です。この制御キーは `~/.ensemble/config.yaml` でのみ有効で、project 側に同じキーを書いても無視されます。project config を読み込んだ場合は絶対パスを、user 設定でスキップした場合はその旨を起動時に stderr へ表示します。project config が無く、読み込みが有効な場合は表示しません。
|
|
22
|
+
|
|
23
|
+
これは [#547 の名前付き config 切り替え](https://github.com/otolab/agents-ensemble/issues/547) とは別の設定です。`config.loadProjectConfig` は既定の project 層を読むかどうかを選びます。#547 は名前付き config や明示ファイルを選び、モデル・ACP などの設定内容を切り替える仕組みを扱います。
|
|
24
|
+
|
|
20
25
|
### 設定項目ごとの解決順(Phase 1)
|
|
21
26
|
|
|
22
27
|
すべての Phase 1 キーで次の順序を **実装・テストで固定**している:
|
|
@@ -49,6 +54,9 @@ cp config.example.yaml ~/.ensemble/config.yaml
|
|
|
49
54
|
profile:
|
|
50
55
|
default: implementer-and-reviewer-v2 # ENSEMBLE_DEFAULT_PROFILE 相当
|
|
51
56
|
|
|
57
|
+
config:
|
|
58
|
+
loadProjectConfig: true # user config のみ有効。false で project config を無視
|
|
59
|
+
|
|
52
60
|
conductor:
|
|
53
61
|
backend: pi # cursor(既定) | pi
|
|
54
62
|
model: default # CONDUCTOR_MODEL_ID 相当
|
|
@@ -61,8 +69,7 @@ conductor:
|
|
|
61
69
|
acp:
|
|
62
70
|
defaultPreset: codex # ENSEMBLE_DEFAULT_ACP_CLI 相当
|
|
63
71
|
env: # codex-acp 子プロセス spawn に渡す env(user → project deep merge)
|
|
64
|
-
MODEL_PROVIDER: litellm #
|
|
65
|
-
CODEX_CONFIG: ~/.codex/litellm.config.toml
|
|
72
|
+
MODEL_PROVIDER: litellm # Codex provider ID。接続設定は Codex config 側
|
|
66
73
|
|
|
67
74
|
session:
|
|
68
75
|
worktree: isolated # --worktree 既定(isolated | in-repo)
|
|
@@ -78,9 +85,9 @@ github:
|
|
|
78
85
|
allowGhAuthTokenFallback: true
|
|
79
86
|
monitor:
|
|
80
87
|
enabled: true
|
|
81
|
-
debounceMs:
|
|
82
|
-
pollIntervalMs:
|
|
83
|
-
activePollIntervalMs:
|
|
88
|
+
debounceMs: 60000
|
|
89
|
+
pollIntervalMs: 120000
|
|
90
|
+
activePollIntervalMs: 60000
|
|
84
91
|
stopPollWaitMs: 5000
|
|
85
92
|
|
|
86
93
|
tui:
|
|
@@ -92,6 +99,7 @@ tui:
|
|
|
92
99
|
|
|
93
100
|
| キー | 意味 | CLI 上書き | env 上書き |
|
|
94
101
|
|------|------|-----------|-----------|
|
|
102
|
+
| `config.loadProjectConfig` | project `.ensemble/config.yaml` を読み込むか(既定: `true`、user config のみ有効) | — | — |
|
|
95
103
|
| `profile.default` | 既定 team profile(名前またはパス) | `--profile` | `ENSEMBLE_DEFAULT_PROFILE` |
|
|
96
104
|
| `conductor.model` | conductor モデル id | `--model` | `CONDUCTOR_MODEL_ID` |
|
|
97
105
|
| `conductor.verbose` | harness 詳細 telemetry の表示 | `--verbose` | `CONDUCTOR_VERBOSE` |
|
|
@@ -111,6 +119,8 @@ tui:
|
|
|
111
119
|
| `github.monitor.debounceMs` | 更新 debounce | `--github-monitor-debounce-ms` | — |
|
|
112
120
|
| `github.monitor.pollIntervalMs` 他 | poll 間隔(コード内既定のみ) | — | — |
|
|
113
121
|
|
|
122
|
+
`config.loadProjectConfig` は config の merge 対象を決めるメタ設定です。project YAML の値は、設定結果にも project config の読み込み判断にも使われません。
|
|
123
|
+
|
|
114
124
|
### ACP spawn env(`acp.env`)
|
|
115
125
|
|
|
116
126
|
`acp.env` は codex-acp 等の子プロセス spawn 時に渡す環境変数の正本です。**team profile に ACP 設定はない**(`acp` / `workers[].acp` を YAML に書くと load 時エラー)。
|
|
@@ -134,7 +144,31 @@ spawn 解決時、子プロセスへ渡す env は次の順でマージされま
|
|
|
134
144
|
|
|
135
145
|
#### LiteLLM(OpenAI 互換ゲートウェイ)向け config 例
|
|
136
146
|
|
|
137
|
-
|
|
147
|
+
Codex worker の接続先は Codex の provider 設定で定義し、`acp.env.MODEL_PROVIDER` で使う provider ID を選びます。ensemble はこの環境変数を `codex-acp` に渡すだけで、TOML ファイルを選んだり読み込んだりはしません。
|
|
148
|
+
|
|
149
|
+
`@agentclientprotocol/codex-acp` は `packages/core/package.json` で **2.2.2** に pin されています。この版では、`CODEX_CONFIG` は Codex session config に merge する **JSON オブジェクト文字列**として `JSON.parse` されます。TOML のパスを設定すると JSON parse に失敗します。`MODEL_PROVIDER` は新しい session に渡す **provider ID** で、設定ファイルの選択には使われません。ensemble はいずれの値も `acp.env` から子プロセスへ渡すだけです。
|
|
150
|
+
|
|
151
|
+
Codex の model ID はトップレベルの `model`、provider は `model_provider` で指定し、provider IDに対応する `[model_providers.<id>]` から接続先・API形式・認証方法を読みます。worker では Codex が通常の設定レイヤー(主に `~/.codex/config.toml`)を読み、必要であれば `CODEX_CONFIG` の JSON が session config に加わります。`MODEL_PROVIDER=litellm` だけでは、Codex は別ファイル `litellm.config.toml` を探さず、model IDも選びません。
|
|
152
|
+
|
|
153
|
+
`CODEX_CONFIG` の JSON には `model`、`model_provider`、`model_providers` などCodex session configのキーを含められます。ただし `MODEL_PROVIDER` を設定した場合は、codex-acp が新しいsessionの provider IDとしてその値を別途渡し、JSON内の `model_provider` より優先します。model IDとprovider IDに対応する定義は、それぞれCodexの通常configかJSON設定に必要です。model IDはLiteLLM側で提供されるものを指定してください。
|
|
154
|
+
|
|
155
|
+
以下の例では秘密値を記載せず、環境変数名を使います。実際の `LITELLM_API_KEY` はシェル等で設定してください。
|
|
156
|
+
|
|
157
|
+
#### A. provider 設定を正本 config にまとめる(推奨)
|
|
158
|
+
|
|
159
|
+
provider 定義を `~/.codex/config.toml` に置き、ensemble config では provider ID だけを指定します。Codex CLI と worker が同じ provider 定義を参照し、worker の接続先は `MODEL_PROVIDER` で切り替えられます。
|
|
160
|
+
|
|
161
|
+
```toml
|
|
162
|
+
# ~/.codex/config.toml
|
|
163
|
+
model = "YOUR_LITELLM_MODEL_ID"
|
|
164
|
+
model_provider = "litellm"
|
|
165
|
+
|
|
166
|
+
[model_providers.litellm]
|
|
167
|
+
name = "LiteLLM"
|
|
168
|
+
base_url = "https://litellm.example/v1"
|
|
169
|
+
wire_api = "responses"
|
|
170
|
+
env_key = "LITELLM_API_KEY"
|
|
171
|
+
```
|
|
138
172
|
|
|
139
173
|
```yaml
|
|
140
174
|
# ~/.ensemble/config.yaml または <repo>/.ensemble/config.yaml
|
|
@@ -142,23 +176,71 @@ acp:
|
|
|
142
176
|
defaultPreset: codex
|
|
143
177
|
env:
|
|
144
178
|
MODEL_PROVIDER: litellm
|
|
145
|
-
CODEX_CONFIG: ~/.codex/litellm.config.toml
|
|
146
179
|
```
|
|
147
180
|
|
|
148
|
-
`
|
|
181
|
+
`model` にはLiteLLM側で提供する実際のmodel IDを指定します。Codex CLI とworkerの両方がこのmodel設定を使います。`MODEL_PROVIDER` はworker sessionで使うproviderだけを選び、model IDは変更しません。別providerへ切り替える場合は、そのproviderでも同じmodel IDが利用できることを確認してください。Codex CLIで別の既定providerを使う場合は、`model_provider` をそのprovider IDにします。認証値は設定ファイルに書かず、Codexが参照する環境変数で渡してください。
|
|
182
|
+
|
|
183
|
+
#### B. Codex CLI のprofile overlayを使う
|
|
184
|
+
|
|
185
|
+
Codex CLI の `codex --profile litellm` は、まず `~/.codex/config.toml` を読み、その上に `~/.codex/litellm.config.toml` を重ねます。profile ファイルには `[profiles.litellm]` ではなく通常のトップレベル設定を書きます。Codex 0.134.0 以降、`config.toml` 内の `[profiles.litellm]` と `profile = "litellm"` による指定は使われません。
|
|
186
|
+
|
|
187
|
+
```toml
|
|
188
|
+
# ~/.codex/litellm.config.toml — Codex CLI 用 overlay
|
|
189
|
+
model = "YOUR_LITELLM_MODEL_ID"
|
|
190
|
+
model_provider = "litellm"
|
|
191
|
+
|
|
192
|
+
[model_providers.litellm]
|
|
193
|
+
name = "LiteLLM"
|
|
194
|
+
base_url = "https://litellm.example/v1"
|
|
195
|
+
wire_api = "responses"
|
|
196
|
+
env_key = "LITELLM_API_KEY"
|
|
197
|
+
```
|
|
198
|
+
|
|
199
|
+
このprofile overlayは **Codex CLI 用**です。ensemble worker は `codex-acp` から Codex `app-server` を起動する経路であり、`codex --profile` を指定できません。worker にはAのように provider 定義を `~/.codex/config.toml` に置くか、Cのように `CODEX_CONFIG` でsession設定を渡してください。Codex の `config.toml` に別TOMLを読み込む公式include機能はありません。CLI profileとworkerで別ファイルを正本にする場合、worker側の設定にも同じprovider定義が必要です。手動で同期するか、設定生成で両方を作成してください。
|
|
149
200
|
|
|
150
|
-
####
|
|
201
|
+
#### C. worker 用 JSON 設定を別ファイルで管理する
|
|
202
|
+
|
|
203
|
+
小規模な設定や検証では、worker 専用の JSON ファイルを用意し、その**内容**を `CODEX_CONFIG` に渡せます。`CODEX_CONFIG` 自体にはファイルパスではなくJSON文字列を設定します。例えば、次のファイルを作成します。
|
|
204
|
+
|
|
205
|
+
```json
|
|
206
|
+
{
|
|
207
|
+
"model": "YOUR_LITELLM_MODEL_ID",
|
|
208
|
+
"model_providers": {
|
|
209
|
+
"litellm": {
|
|
210
|
+
"name": "LiteLLM",
|
|
211
|
+
"base_url": "https://litellm.example/v1",
|
|
212
|
+
"wire_api": "responses",
|
|
213
|
+
"env_key": "LITELLM_API_KEY"
|
|
214
|
+
}
|
|
215
|
+
}
|
|
216
|
+
}
|
|
217
|
+
```
|
|
218
|
+
|
|
219
|
+
そのファイルの内容を環境変数に読み込み、`acp.env` では `CODEX_CONFIG` を上書きしないで起動します。
|
|
220
|
+
|
|
221
|
+
```sh
|
|
222
|
+
export CODEX_CONFIG="$(jq -c . "$HOME/.codex/ensemble-worker.json")"
|
|
223
|
+
ensemble issue 123
|
|
224
|
+
```
|
|
225
|
+
|
|
226
|
+
```yaml
|
|
227
|
+
# ~/.ensemble/config.yaml または <repo>/.ensemble/config.yaml
|
|
228
|
+
acp:
|
|
229
|
+
defaultPreset: codex
|
|
230
|
+
env:
|
|
231
|
+
MODEL_PROVIDER: litellm
|
|
232
|
+
```
|
|
151
233
|
|
|
152
|
-
|
|
153
|
-
|------|------------------|------------------|------|
|
|
154
|
-
| `codex --profile litellm`(CLI 直接) | Codex profile `litellm` | — | `~/.codex/config.toml` の `[profiles.litellm]` を読む |
|
|
155
|
-
| `ensemble issue` + 上記 config 例 | — | `MODEL_PROVIDER` / `CODEX_CONFIG` | codex-acp → `codex app-server`(**`--profile` 非対応**)。env で config ファイルを指定 |
|
|
234
|
+
`jq -c` は JSON を1行に整形して環境変数へ渡します。`acp.env` に `CODEX_CONFIG` を設定した場合は、親プロセスから継承した値より `acp.env` の値が優先されます。設定を別ファイルで保ちたい場合は、ファイル内容を起動前に環境変数へ変換してください。CではCodex CLIのprovider設定は変わらず、JSONはworker sessionにのみ適用されます。
|
|
156
235
|
|
|
157
|
-
|
|
236
|
+
#### Codex CLI と ensemble worker の違い
|
|
158
237
|
|
|
159
|
-
|
|
238
|
+
| 起動方法 | 設定の選択・読み込み | LiteLLM の指定 |
|
|
239
|
+
|----------|--------------------|----------------|
|
|
240
|
+
| `codex --profile litellm` | Codex CLI が `~/.codex/config.toml` に `~/.codex/litellm.config.toml` をoverlay | profileファイルに `model`、`model_provider`、provider 定義を記述 |
|
|
241
|
+
| ensemble の Codex worker | `codex-acp` → Codex `app-server`。`--profile` は渡せない。Codex の通常 config とsession設定を利用 | `MODEL_PROVIDER` でprovider IDを選択し、`model` は通常config(A)または `CODEX_CONFIG` JSON(C)で指定 |
|
|
160
242
|
|
|
161
|
-
`
|
|
243
|
+
`CODEX_CONFIG_PROFILE` によるprofile名指定は Codex 側で未実装です([openai/codex#38104](https://github.com/openai/codex/issues/38104))。したがって worker のprofile選択手段としては使えません。
|
|
162
244
|
|
|
163
245
|
#### resume と `acp.env` 変更
|
|
164
246
|
|
|
@@ -261,7 +343,7 @@ conductor の system prompt の基底は modular-prompt のコンパイル結果
|
|
|
261
343
|
|
|
262
344
|
**config 未作成時**は従来どおり env とコード default のみが効く(後方互換)。
|
|
263
345
|
|
|
264
|
-
`session.lazyWorkers` は既定 `false` です。`true` にすると profile の全 worker を session に登録して TUI / `list_workers` に `sleeping` と表示し、初回の通常 `prompt_worker` で対象 worker だけを attach / init します。init prompt 完了後に最初の instruction を別ラウンドで送り、その後はセッション終了まで常駐します。resume は
|
|
346
|
+
`session.lazyWorkers` は既定 `false` です。`true` にすると profile の全 worker を session に登録して TUI / `list_workers` に `sleeping` と表示し、初回の通常 `prompt_worker` で対象 worker だけを attach / init します。init prompt 完了後に最初の instruction を別ラウンドで送り、その後はセッション終了まで常駐します。resume は SessionResumeStore に保存した設定を使い、ACP session のある worker は再 attach、まだ使っていない worker は sleeping のままにします。lazy 設定のない旧 SessionResumeStore は eager として扱います。
|
|
265
347
|
|
|
266
348
|
### team profile `acp` の削除
|
|
267
349
|
|
|
@@ -301,7 +383,7 @@ MCP 設定は次の 2 層から読み込み、`mcpServers` のサーバー名単
|
|
|
301
383
|
}
|
|
302
384
|
```
|
|
303
385
|
|
|
304
|
-
解決済み設定は conductor の両 backend に同じ map として渡す。Cursor SDK では `Agent.create` / `Agent.resume` の inline MCP として、Pi では Pi 1.x の `DefaultResourceLoader` に `createMcpExtension({ loadConfig })` を extension factory として登録し、`createAgentSession` の起動時に注入する。Pi 側で `.pi/mcp.json` へ同期・コピー・symlink は行わず、resume 時も harness が解決した同じ map を再注入する。
|
|
386
|
+
解決済み設定は conductor の両 backend に同じ map として渡す。Cursor SDK では `Agent.create` / `Agent.resume` の inline MCP として、Pi では Pi 1.x の `DefaultResourceLoader` に `createMcpExtension({ loadConfig })` を extension factory として登録し、`createAgentSession` の起動時に注入する。Pi 側で `.pi/mcp.json` へ同期・コピー・symlink は行わず、resume 時も harness が解決した同じ map を再注入する。SessionResumeStore にはこの map の canonical SHA-256 digest だけを保存し、resume 時に現在の digest と比較するため、設定変更は新しい session を要求する。digest に秘密値そのものは保存しない。MCP 接続の管理、tool discovery、OAuth、resource tools は Pi 公式 extension に委ね、core は MCP client/transport を実装しない。
|
|
305
387
|
|
|
306
388
|
`env` / `headers` / `cwd` は harness 境界で Cursor 形式の placeholder を解決してから Pi 公式 extension に渡す。`${env:VAR}` は現在の process environment の値、`${workspaceFolder}` / `${workspaceFolderBasename}` は conductor の cwd へ変換し、値が見つからない placeholder は literal のまま渡さず明確なエラーにする。Pi 標準の `$VAR` / `${VAR}` は公式 resolver に委ねる。Pi は `stdio` と Streamable HTTP (`http`) をサポートするが、shared `mcp.json` の `sse` 定義は Pi 1.x ではサポートしないため、Pi conductor の起動時に明確なエラーにする。HTTP の `auth` (`CLIENT_ID` / `CLIENT_SECRET` / `scopes`) は Pi の MCP OAuth 設定へ渡され、認可フローと credential 保存は公式 extension が管理する。`.cursor/mcp.json` や `.pi/mcp.json` へのコピー・symlink、`settings.json` の書き換えは行わず、ACP worker にはこの設定を渡さない。MCP server tool は公式名 `mcp__<server>__<tool>`(長すぎる・衝突する場合は Pi の hash suffix)で公開される。resources がある場合は公式の `list_mcp_resources`、`list_mcp_resource_templates`、`read_mcp_resource` が提供される。`codemode` / `tool_search` の exposure は公式 extension の設定に従う。
|
|
307
389
|
|
|
@@ -321,6 +403,11 @@ YAML に未知のキーがあっても **無視する**(警告なし)。将
|
|
|
321
403
|
|
|
322
404
|
- [pi-conductor-setup.md](pi-conductor-setup.md) — Pi conductor の初回セットアップ・認証・復旧(利用者向け正本)
|
|
323
405
|
- [settings.md](settings.md) — 全設定層の一覧・解決パターン(本書は config.yaml 詳細)
|
|
406
|
+
- [ADR 0028](adr/0028-authentication-delegation-and-ensemble-auth.md) — worker の認証移譲とCodex runtime設定
|
|
407
|
+
- [Codex profiles / custom model providers](https://developers.openai.com/codex/config-advanced#profiles) — Codex CLI profile overlay、`model`、`model_provider` の現行仕様
|
|
408
|
+
- [codex-acp 2.2.2 runtime options](https://github.com/agentclientprotocol/codex-acp/blob/v2.2.2/README.md#runtime-options) — `CODEX_CONFIG` / `MODEL_PROVIDER` の説明
|
|
409
|
+
- [codex-acp 2.2.2 起動処理](https://github.com/agentclientprotocol/codex-acp/blob/v2.2.2/src/index.ts#L90-L99) — 環境変数の parse と ACP 起動時の読み込み
|
|
410
|
+
- [codex-acp 2.2.2 session開始](https://github.com/agentclientprotocol/codex-acp/blob/v2.2.2/src/CodexAcpClient.ts#L745-L755) — session config と provider ID を Codex app-server へ渡す処理
|
|
324
411
|
- [ADR 0020](https://github.com/otolab/agents-ensemble/blob/main/docs/adr/0020-ensemble-config-setting-resolution.md) — 解決順の設計判断
|
|
325
412
|
- [ADR 0018](https://github.com/otolab/agents-ensemble/blob/main/docs/adr/0018-team-profile-four-layer-resolution.md) — `.ensemble/` 配下の規約(team-profile)
|
|
326
413
|
- [#223](https://github.com/otolab/agents-ensemble/issues/223) — config 基盤
|
package/docs/settings.md
CHANGED
|
@@ -10,7 +10,7 @@
|
|
|
10
10
|
| **環境変数** | シェル / CI | 一時上書き・秘密情報・自動化注入 |
|
|
11
11
|
| **project config** | `<repoRoot>/.ensemble/config.yaml` | リポジトリ単位の既定 |
|
|
12
12
|
| **user config** | `~/.ensemble/config.yaml` | マシン全体の既定 |
|
|
13
|
-
| **user
|
|
13
|
+
| **user instructions** | `~/.ensemble/AGENTS.md` | profile に依存しない conductor / worker 共通の運用前提 |
|
|
14
14
|
| **team profile** | `profile.yaml`([elements.md](elements.md)) | worker 構成・workspace(**ACP は含まない → [config.md](config.md)**) |
|
|
15
15
|
| **Codex profile** | `~/.codex/config.toml` + `codex --profile` | Codex CLI の profile(ensemble team profile とは無関係) |
|
|
16
16
|
| **MCP** | `.agents/mcp.json` / `~/.ensemble/mcp.json` | conductor 向け MCP([config.md § MCP](config.md#conductor-mcp-設定mcpjson)) |
|
|
@@ -30,13 +30,13 @@ CLI > 環境変数 > project config > user config > コード default
|
|
|
30
30
|
|
|
31
31
|
`profile.default` / `conductor.model` / `acp.defaultPreset` など。設計判断は [ADR 0020](https://github.com/otolab/agents-ensemble/blob/main/docs/adr/0020-ensemble-config-setting-resolution.md)。
|
|
32
32
|
|
|
33
|
-
`conductor.backend` は、選択した profile の `conductor.backend` を project/user の deep merge 済み config より優先し、どちらも未指定なら `cursor` を使います。`profile.conductor.builtinTools` は profile だけで制御し、省略・未指定は有効、`false` のみ built-in coding tools を無効にします。`profile.conductor.piSkills` は Pi backend のみで、Pi 標準の skill discovery を制御し、省略・未指定は有効、`false` で skill 索引を止めます。`config.yaml` や `settings.json.defaultTools` ではこの制御を行いません。`cursor` は Cursor SDK 経路、`pi` は Pi 1.x `createAgentSession` 経路を選びます。Pi は compiled conductor instructions を native system prompt に載せ、`~/.ensemble/pi` と `<repoRoot>/.ensemble/pi` の `settings.json` / `auth.json` / `models.json` / `extensions/` / `skills/` / `prompts/` / `themes/` を解決します。skills は Pi の `DefaultResourceLoader` で索引し、カタログを system prompt に載せて本文は `read` / `/skill:` で読みます。prompts は `/name args` で展開します。themes は headless conductor のため読み込み・project 同名解決のみ行い、TUI 表示には使いません。root は `conductor.pi.agentDir` / `conductor.pi.projectDir` で上書きできます。`.ensemble/pi/SYSTEM.md` / `APPEND_SYSTEM.md` は無視します。`ensemble auth login|logout|status` は backend に分岐し、Pi では provider 単位に `ModelRuntime` を使います。API key は TTY の secret prompt から user 層へ保存し、OAuth は Pi の OAuth flow を stderr 対話で実行します(SSH でも URL / device code を利用できます)。MCP HTTP OAuth は Pi 公式 MCP extension が別の credential store で扱います。resume では
|
|
33
|
+
`conductor.backend` は、選択した profile の `conductor.backend` を project/user の deep merge 済み config より優先し、どちらも未指定なら `cursor` を使います。`profile.conductor.builtinTools` は profile だけで制御し、省略・未指定は有効、`false` のみ built-in coding tools を無効にします。`profile.conductor.piSkills` は Pi backend のみで、Pi 標準の skill discovery を制御し、省略・未指定は有効、`false` で skill 索引を止めます。`config.yaml` や `settings.json.defaultTools` ではこの制御を行いません。`cursor` は Cursor SDK 経路、`pi` は Pi 1.x `createAgentSession` 経路を選びます。Pi は compiled conductor instructions を native system prompt に載せ、`~/.ensemble/pi` と `<repoRoot>/.ensemble/pi` の `settings.json` / `auth.json` / `models.json` / `extensions/` / `skills/` / `prompts/` / `themes/` を解決します。skills は Pi の `DefaultResourceLoader` で索引し、カタログを system prompt に載せて本文は `read` / `/skill:` で読みます。prompts は `/name args` で展開します。themes は headless conductor のため読み込み・project 同名解決のみ行い、TUI 表示には使いません。root は `conductor.pi.agentDir` / `conductor.pi.projectDir` で上書きできます。`.ensemble/pi/SYSTEM.md` / `APPEND_SYSTEM.md` は無視します。`ensemble auth login|logout|status` は backend に分岐し、Pi では provider 単位に `ModelRuntime` を使います。API key は TTY の secret prompt から user 層へ保存し、OAuth は Pi の OAuth flow を stderr 対話で実行します(SSH でも URL / device code を利用できます)。MCP HTTP OAuth は Pi 公式 MCP extension が別の credential store で扱います。resume では SessionResumeStore に保存した backend と起動時の解決結果が一致しない場合、次のエラーで conductor を起動せず失敗します。
|
|
34
34
|
|
|
35
35
|
```text
|
|
36
|
-
Session
|
|
36
|
+
Session resume state conductorBackend mismatch: pi !== cursor
|
|
37
37
|
```
|
|
38
38
|
|
|
39
|
-
旧
|
|
39
|
+
旧 SessionResumeStore にこのフィールドがない場合は、従来どおり `cursor` として扱います。Pi の `conductorAgentId` は Pi の session id としても使われ、transcript は `<conductor-cwd>/.ensemble/pi/sessions/` の JSONL に保存されます。`--continue` / `--resume` ではその transcript を復元し、Issue context から compiled `systemPrompt` を毎回再コンパイルして native system prompt に再注入します。
|
|
40
40
|
|
|
41
41
|
### パターン B — Phase 1 横断(env なし)
|
|
42
42
|
|
|
@@ -63,8 +63,10 @@ config キーなし。CI・スクリプト・端末検出、または 1 回限
|
|
|
63
63
|
| 設定 | 環境変数 | config | CLI / API | コード default | 解決 |
|
|
64
64
|
|------|----------|--------|-----------|----------------|------|
|
|
65
65
|
| permission 停滞警告閾値 | — | — | `--permission-deadlock-stall-ms` / `RunConductorSessionOptions.permissionDeadlockStallMs` | `300_000ms`(300s) | 明示指定 > core default |
|
|
66
|
+
| dispatch hold reminder 間隔 | — | — | `--dispatch-hold-reminder-ms` / `RunConductorSessionOptions.dispatchHoldReminderMs` | `1_800_000ms`(30 分) | 明示指定 > core default |
|
|
66
67
|
|
|
67
68
|
`permissionDeadlockPollMs` は `5_000ms`(5s)のままで、この実行時設定の対象外です。
|
|
69
|
+
dispatch hold reminder の poll 間隔も `5_000ms`(5s)で、この実行時設定の対象外です。
|
|
68
70
|
|
|
69
71
|
### パターン E — 認証(config は可否のみ)
|
|
70
72
|
|
|
@@ -97,7 +99,7 @@ config キーなし。CI・スクリプト・端末検出、または 1 回限
|
|
|
97
99
|
| 監視 debounce | `github.monitor.debounceMs` | — | `--github-monitor-debounce-ms` | `30000` | B |
|
|
98
100
|
| poll 間隔 | `github.monitor.pollIntervalMs` 他 | — | — | 各定数 | B |
|
|
99
101
|
|
|
100
|
-
テンプレート: [`config.example.yaml`](../config.example.yaml)。`ensemble issue` 起動時(GitHub monitor より前)に `loadEnsembleConfig(repoRoot)` で読み込む。
|
|
102
|
+
テンプレート: [`config.example.yaml`](../config.example.yaml)。`ensemble issue` 起動時(GitHub monitor より前)に `loadEnsembleConfig(repoRoot)` で読み込む。user 設定の `config.loadProjectConfig: false` で project 層を無効にでき、project config の読み込み・スキップは同 loader を使う起動経路で stderr に表示する。詳細は [config.md](config.md#配置と解決順) を参照。
|
|
101
103
|
|
|
102
104
|
## 一覧 — TUI / オペレータ UI
|
|
103
105
|
|
|
@@ -134,7 +136,7 @@ TUI 設定は `loadEnsembleConfig` 結果を `createIssueSessionTuiHost` へ渡
|
|
|
134
136
|
| 設定 | ファイル | 解決順 |
|
|
135
137
|
|------|----------|--------|
|
|
136
138
|
| conductor MCP | `.agents/mcp.json` / `~/.ensemble/mcp.json` | project > user(サーバー名単位 merge) |
|
|
137
|
-
|
|
|
139
|
+
| user instructions | `~/.ensemble/AGENTS.md` | user 固定。conductor と worker 全員に適用。project 層なし |
|
|
138
140
|
| team profile | `.ensemble/profiles/…` / `--profile` パス | [ADR 0018](https://github.com/otolab/agents-ensemble/blob/main/docs/adr/0018-team-profile-four-layer-resolution.md) |
|
|
139
141
|
|
|
140
142
|
## 一覧 — ランタイム(利用者が「設定」しない)
|
|
@@ -149,7 +151,7 @@ TUI 設定は `loadEnsembleConfig` 結果を `createIssueSessionTuiHost` へ渡
|
|
|
149
151
|
|
|
150
152
|
| やりたいこと | 推奨 |
|
|
151
153
|
|--------------|------|
|
|
152
|
-
| 複数 repo で conductor に共有する短い運用前提 | `~/.ensemble/AGENTS.md`([modular-prompt の文書の役割](modular-prompt.md)を参照) |
|
|
154
|
+
| 複数 repo で conductor と worker に共有する短い運用前提 | `~/.ensemble/AGENTS.md`([modular-prompt の文書の役割](modular-prompt.md)を参照) |
|
|
153
155
|
| チーム / 個人の恒久既定(モデル、worktree、monitor) | `~/.ensemble/config.yaml` または project `.ensemble/config.yaml` |
|
|
154
156
|
| CI で 1 ジョブだけ上書き | 環境変数(`CONDUCTOR_MODEL_ID` 等) |
|
|
155
157
|
| 1 回限りの実行 | CLI フラグ(初回メッセージは `ensemble issue <ref> [message...]`) |
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@agents-ensemble/cli",
|
|
3
|
-
"version": "0.
|
|
3
|
+
"version": "0.15.0",
|
|
4
4
|
"type": "module",
|
|
5
5
|
"description": "ensemble CLI — Issue-based agent orchestration",
|
|
6
6
|
"bin": {
|
|
@@ -17,8 +17,8 @@
|
|
|
17
17
|
"react": "19.2.0",
|
|
18
18
|
"react-ink-textarea": "npm:@otolab/react-ink-textarea@0.4.1-otolab.3",
|
|
19
19
|
"string-width": "8.1.0",
|
|
20
|
-
"@agents-ensemble/core": "0.
|
|
21
|
-
"@agents-ensemble/operator-agent": "0.
|
|
20
|
+
"@agents-ensemble/core": "0.15.0",
|
|
21
|
+
"@agents-ensemble/operator-agent": "0.3.0"
|
|
22
22
|
},
|
|
23
23
|
"devDependencies": {
|
|
24
24
|
"@types/js-yaml": "4.0.9",
|