@agents-ensemble/cli 0.14.0 → 0.14.2

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.
Files changed (69) hide show
  1. package/README.md +8 -2
  2. package/config.example.yaml +3 -3
  3. package/dist/index.js +5 -1
  4. package/dist/index.js.map +1 -1
  5. package/dist/session-log-lines.js +1 -1
  6. package/dist/session-log-lines.js.map +1 -1
  7. package/dist/tui/activity-log.d.ts +1 -1
  8. package/dist/tui/activity-log.d.ts.map +1 -1
  9. package/dist/tui/activity-log.js +16 -2
  10. package/dist/tui/activity-log.js.map +1 -1
  11. package/dist/tui/create-issue-session-tui-host.d.ts.map +1 -1
  12. package/dist/tui/create-issue-session-tui-host.js +1 -1
  13. package/dist/tui/create-issue-session-tui-host.js.map +1 -1
  14. package/dist/tui/ink-test-keys.d.ts +4 -0
  15. package/dist/tui/ink-test-keys.d.ts.map +1 -1
  16. package/dist/tui/ink-test-keys.js +4 -0
  17. package/dist/tui/ink-test-keys.js.map +1 -1
  18. package/dist/tui/issue-session-tui-stream.d.ts.map +1 -1
  19. package/dist/tui/issue-session-tui-stream.js +77 -8
  20. package/dist/tui/issue-session-tui-stream.js.map +1 -1
  21. package/dist/tui/issue-session-tui-stream.test.js +257 -3
  22. package/dist/tui/issue-session-tui-stream.test.js.map +1 -1
  23. package/dist/tui/issue-session-tui.d.ts +3 -2
  24. package/dist/tui/issue-session-tui.d.ts.map +1 -1
  25. package/dist/tui/issue-session-tui.js +145 -12
  26. package/dist/tui/issue-session-tui.js.map +1 -1
  27. package/dist/tui/issue-session-tui.test.js +390 -16
  28. package/dist/tui/issue-session-tui.test.js.map +1 -1
  29. package/dist/tui/open-questions-pane.d.ts +19 -0
  30. package/dist/tui/open-questions-pane.d.ts.map +1 -1
  31. package/dist/tui/open-questions-pane.js +35 -34
  32. package/dist/tui/open-questions-pane.js.map +1 -1
  33. package/dist/tui/operator-command-suggestions.d.ts +15 -0
  34. package/dist/tui/operator-command-suggestions.d.ts.map +1 -1
  35. package/dist/tui/operator-input-history.d.ts +13 -0
  36. package/dist/tui/operator-input-history.d.ts.map +1 -0
  37. package/dist/tui/operator-input-history.js +51 -0
  38. package/dist/tui/operator-input-history.js.map +1 -0
  39. package/dist/tui/operator-input-layout.d.ts +2 -0
  40. package/dist/tui/operator-input-layout.d.ts.map +1 -1
  41. package/dist/tui/operator-input-layout.js +73 -0
  42. package/dist/tui/operator-input-layout.js.map +1 -1
  43. package/dist/tui/operator-text-area.d.ts +2 -0
  44. package/dist/tui/operator-text-area.d.ts.map +1 -1
  45. package/dist/tui/operator-text-area.js +16 -4
  46. package/dist/tui/operator-text-area.js.map +1 -1
  47. package/dist/tui/operator-text-area.test-double.d.ts.map +1 -1
  48. package/dist/tui/operator-text-area.test-double.js +13 -12
  49. package/dist/tui/operator-text-area.test-double.js.map +1 -1
  50. package/dist/tui/operator-text-area.test.js +16 -2
  51. package/dist/tui/operator-text-area.test.js.map +1 -1
  52. package/dist/tui/pane-layout.d.ts +2 -0
  53. package/dist/tui/pane-layout.d.ts.map +1 -1
  54. package/dist/tui/pane-layout.js +7 -3
  55. package/dist/tui/pane-layout.js.map +1 -1
  56. package/dist/tui/stream-layout.d.ts +3 -3
  57. package/dist/tui/stream-layout.d.ts.map +1 -1
  58. package/dist/tui/stream-layout.js +6 -6
  59. package/dist/tui/stream-layout.js.map +1 -1
  60. package/dist/tui/tui-layout-constants.d.ts +1 -1
  61. package/dist/tui/tui-layout-constants.d.ts.map +1 -1
  62. package/dist/tui/tui-layout-constants.js +1 -1
  63. package/dist/tui/tui-layout-constants.js.map +1 -1
  64. package/dist/tui/tui-view-model.d.ts.map +1 -1
  65. package/dist/tui/tui-view-model.js +2 -8
  66. package/dist/tui/tui-view-model.js.map +1 -1
  67. package/docs/config.md +92 -16
  68. package/docs/settings.md +3 -3
  69. package/package.json +3 -3
package/docs/config.md CHANGED
@@ -61,8 +61,7 @@ conductor:
61
61
  acp:
62
62
  defaultPreset: codex # ENSEMBLE_DEFAULT_ACP_CLI 相当
63
63
  env: # codex-acp 子プロセス spawn に渡す env(user → project deep merge)
64
- MODEL_PROVIDER: litellm # 例: LiteLLM ゲートウェイ
65
- CODEX_CONFIG: ~/.codex/litellm.config.toml
64
+ MODEL_PROVIDER: litellm # Codex provider ID。接続設定は Codex config 側
66
65
 
67
66
  session:
68
67
  worktree: isolated # --worktree 既定(isolated | in-repo)
@@ -78,9 +77,9 @@ github:
78
77
  allowGhAuthTokenFallback: true
79
78
  monitor:
80
79
  enabled: true
81
- debounceMs: 30000
82
- pollIntervalMs: 60000
83
- activePollIntervalMs: 15000
80
+ debounceMs: 60000
81
+ pollIntervalMs: 120000
82
+ activePollIntervalMs: 60000
84
83
  stopPollWaitMs: 5000
85
84
 
86
85
  tui:
@@ -134,7 +133,31 @@ spawn 解決時、子プロセスへ渡す env は次の順でマージされま
134
133
 
135
134
  #### LiteLLM(OpenAI 互換ゲートウェイ)向け config 例
136
135
 
137
- **team profile ではなく ensemble config に書く。** 秘密情報はプレースホルダに置き換える。
136
+ Codex worker の接続先は Codex の provider 設定で定義し、`acp.env.MODEL_PROVIDER` で使う provider ID を選びます。ensemble はこの環境変数を `codex-acp` に渡すだけで、TOML ファイルを選んだり読み込んだりはしません。
137
+
138
+ `@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` から子プロセスへ渡すだけです。
139
+
140
+ 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も選びません。
141
+
142
+ `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側で提供されるものを指定してください。
143
+
144
+ 以下の例では秘密値を記載せず、環境変数名を使います。実際の `LITELLM_API_KEY` はシェル等で設定してください。
145
+
146
+ #### A. provider 設定を正本 config にまとめる(推奨)
147
+
148
+ provider 定義を `~/.codex/config.toml` に置き、ensemble config では provider ID だけを指定します。Codex CLI と worker が同じ provider 定義を参照し、worker の接続先は `MODEL_PROVIDER` で切り替えられます。
149
+
150
+ ```toml
151
+ # ~/.codex/config.toml
152
+ model = "YOUR_LITELLM_MODEL_ID"
153
+ model_provider = "litellm"
154
+
155
+ [model_providers.litellm]
156
+ name = "LiteLLM"
157
+ base_url = "https://litellm.example/v1"
158
+ wire_api = "responses"
159
+ env_key = "LITELLM_API_KEY"
160
+ ```
138
161
 
139
162
  ```yaml
140
163
  # ~/.ensemble/config.yaml または <repo>/.ensemble/config.yaml
@@ -142,23 +165,71 @@ acp:
142
165
  defaultPreset: codex
143
166
  env:
144
167
  MODEL_PROVIDER: litellm
145
- CODEX_CONFIG: ~/.codex/litellm.config.toml
146
168
  ```
147
169
 
148
- `litellm.config.toml` は Codex の [Profiles](https://developers.openai.com/codex/config-advanced) と同様に `~/.codex/` 配下に置く。`CODEX_CONFIG` でそのパスを codex-acp に指示する。
170
+ `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が参照する環境変数で渡してください。
171
+
172
+ #### B. Codex CLI のprofile overlayを使う
173
+
174
+ 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"` による指定は使われません。
175
+
176
+ ```toml
177
+ # ~/.codex/litellm.config.toml — Codex CLI 用 overlay
178
+ model = "YOUR_LITELLM_MODEL_ID"
179
+ model_provider = "litellm"
180
+
181
+ [model_providers.litellm]
182
+ name = "LiteLLM"
183
+ base_url = "https://litellm.example/v1"
184
+ wire_api = "responses"
185
+ env_key = "LITELLM_API_KEY"
186
+ ```
187
+
188
+ この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定義が必要です。手動で同期するか、設定生成で両方を作成してください。
189
+
190
+ #### C. worker 用 JSON 設定を別ファイルで管理する
191
+
192
+ 小規模な設定や検証では、worker 専用の JSON ファイルを用意し、その**内容**を `CODEX_CONFIG` に渡せます。`CODEX_CONFIG` 自体にはファイルパスではなくJSON文字列を設定します。例えば、次のファイルを作成します。
193
+
194
+ ```json
195
+ {
196
+ "model": "YOUR_LITELLM_MODEL_ID",
197
+ "model_providers": {
198
+ "litellm": {
199
+ "name": "LiteLLM",
200
+ "base_url": "https://litellm.example/v1",
201
+ "wire_api": "responses",
202
+ "env_key": "LITELLM_API_KEY"
203
+ }
204
+ }
205
+ }
206
+ ```
207
+
208
+ そのファイルの内容を環境変数に読み込み、`acp.env` では `CODEX_CONFIG` を上書きしないで起動します。
149
209
 
150
- #### CLI `codex --profile litellm` と ensemble worker の対応
210
+ ```sh
211
+ export CODEX_CONFIG="$(jq -c . "$HOME/.codex/ensemble-worker.json")"
212
+ ensemble issue 123
213
+ ```
214
+
215
+ ```yaml
216
+ # ~/.ensemble/config.yaml または <repo>/.ensemble/config.yaml
217
+ acp:
218
+ defaultPreset: codex
219
+ env:
220
+ MODEL_PROVIDER: litellm
221
+ ```
151
222
 
152
- | 手段 | profile レイヤー | config `acp.env` | 備考 |
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 ファイルを指定 |
223
+ `jq -c` は JSON を1行に整形して環境変数へ渡します。`acp.env` に `CODEX_CONFIG` を設定した場合は、親プロセスから継承した値より `acp.env` の値が優先されます。設定を別ファイルで保ちたい場合は、ファイル内容を起動前に環境変数へ変換してください。CではCodex CLIのprovider設定は変わらず、JSONはworker sessionにのみ適用されます。
156
224
 
157
- `CODEX_CONFIG_PROFILE`(Codex 側 profile 名の env 指定)は [openai/codex#38104](https://github.com/openai/codex/issues/38104) で未実装。将来実装されたら `acp.env` に載せる想定。
225
+ #### Codex CLI と ensemble worker の違い
158
226
 
159
- #### `litellm.config.toml` を `~/.codex/config.toml` に統合する代替
227
+ | 起動方法 | 設定の選択・読み込み | LiteLLM の指定 |
228
+ |----------|--------------------|----------------|
229
+ | `codex --profile litellm` | Codex CLI が `~/.codex/config.toml` に `~/.codex/litellm.config.toml` をoverlay | profileファイルに `model`、`model_provider`、provider 定義を記述 |
230
+ | ensemble の Codex worker | `codex-acp` → Codex `app-server`。`--profile` は渡せない。Codex の通常 config とsession設定を利用 | `MODEL_PROVIDER` でprovider IDを選択し、`model` は通常config(A)または `CODEX_CONFIG` JSON(C)で指定 |
160
231
 
161
- `litellm` を Codex profile として `[profiles.litellm]` に書き、`codex --profile litellm` で使う方法もある。統合すると CLI と ensemble の設定が 1 ファイルにまとまるが、**ensemble worker は現状 `app-server` 経路で `--profile` を受け取れない**ため、CLI だけ統合しても worker 側は `CODEX_CONFIG` 等の env 指示が別途必要。profile 分割のまま `CODEX_CONFIG` でファイルを指す方が、CLI / ensemble の設定境界が明確になる。
232
+ `CODEX_CONFIG_PROFILE` によるprofile名指定は Codex 側で未実装です([openai/codex#38104](https://github.com/openai/codex/issues/38104))。したがって worker のprofile選択手段としては使えません。
162
233
 
163
234
  #### resume と `acp.env` 変更
164
235
 
@@ -321,6 +392,11 @@ YAML に未知のキーがあっても **無視する**(警告なし)。将
321
392
 
322
393
  - [pi-conductor-setup.md](pi-conductor-setup.md) — Pi conductor の初回セットアップ・認証・復旧(利用者向け正本)
323
394
  - [settings.md](settings.md) — 全設定層の一覧・解決パターン(本書は config.yaml 詳細)
395
+ - [ADR 0028](adr/0028-authentication-delegation-and-ensemble-auth.md) — worker の認証移譲とCodex runtime設定
396
+ - [Codex profiles / custom model providers](https://developers.openai.com/codex/config-advanced#profiles) — Codex CLI profile overlay、`model`、`model_provider` の現行仕様
397
+ - [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` の説明
398
+ - [codex-acp 2.2.2 起動処理](https://github.com/agentclientprotocol/codex-acp/blob/v2.2.2/src/index.ts#L90-L99) — 環境変数の parse と ACP 起動時の読み込み
399
+ - [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
400
  - [ADR 0020](https://github.com/otolab/agents-ensemble/blob/main/docs/adr/0020-ensemble-config-setting-resolution.md) — 解決順の設計判断
325
401
  - [ADR 0018](https://github.com/otolab/agents-ensemble/blob/main/docs/adr/0018-team-profile-four-layer-resolution.md) — `.ensemble/` 配下の規約(team-profile)
326
402
  - [#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 conductor instructions** | `~/.ensemble/AGENTS.md` | profile に依存しない conductor 向けの運用前提 |
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)) |
@@ -134,7 +134,7 @@ TUI 設定は `loadEnsembleConfig` 結果を `createIssueSessionTuiHost` へ渡
134
134
  | 設定 | ファイル | 解決順 |
135
135
  |------|----------|--------|
136
136
  | conductor MCP | `.agents/mcp.json` / `~/.ensemble/mcp.json` | project > user(サーバー名単位 merge) |
137
- | conductor 向け user 文書 | `~/.ensemble/AGENTS.md` | user 固定。project 層なし |
137
+ | user instructions | `~/.ensemble/AGENTS.md` | user 固定。conductor と worker 全員に適用。project 層なし |
138
138
  | 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
139
 
140
140
  ## 一覧 — ランタイム(利用者が「設定」しない)
@@ -149,7 +149,7 @@ TUI 設定は `loadEnsembleConfig` 結果を `createIssueSessionTuiHost` へ渡
149
149
 
150
150
  | やりたいこと | 推奨 |
151
151
  |--------------|------|
152
- | 複数 repo で conductor に共有する短い運用前提 | `~/.ensemble/AGENTS.md`([modular-prompt の文書の役割](modular-prompt.md)を参照) |
152
+ | 複数 repo で conductor と worker に共有する短い運用前提 | `~/.ensemble/AGENTS.md`([modular-prompt の文書の役割](modular-prompt.md)を参照) |
153
153
  | チーム / 個人の恒久既定(モデル、worktree、monitor) | `~/.ensemble/config.yaml` または project `.ensemble/config.yaml` |
154
154
  | CI で 1 ジョブだけ上書き | 環境変数(`CONDUCTOR_MODEL_ID` 等) |
155
155
  | 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.14.0",
3
+ "version": "0.14.2",
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.14.0",
21
- "@agents-ensemble/operator-agent": "0.2.0"
20
+ "@agents-ensemble/core": "0.14.2",
21
+ "@agents-ensemble/operator-agent": "0.2.2"
22
22
  },
23
23
  "devDependencies": {
24
24
  "@types/js-yaml": "4.0.9",