@agents-ensemble/cli 0.5.3 → 0.6.1
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 +67 -0
- package/config.example.yaml +46 -0
- package/dist/async-operator-input.d.ts +1 -0
- package/dist/async-operator-input.d.ts.map +1 -1
- package/dist/async-operator-input.js +4 -4
- package/dist/async-operator-input.js.map +1 -1
- package/dist/display/create-session-display-sink.d.ts.map +1 -1
- package/dist/display/create-session-display-sink.js +1 -0
- package/dist/display/create-session-display-sink.js.map +1 -1
- package/dist/display/session-display-reducer.d.ts.map +1 -1
- package/dist/display/session-display-reducer.js +11 -0
- package/dist/display/session-display-reducer.js.map +1 -1
- package/dist/display/session-display-state.d.ts +5 -0
- package/dist/display/session-display-state.d.ts.map +1 -1
- package/dist/display/session-display-state.js +4 -0
- package/dist/display/session-display-state.js.map +1 -1
- package/dist/index.js +5 -2
- package/dist/index.js.map +1 -1
- package/dist/issue-command.d.ts +3 -0
- package/dist/issue-command.d.ts.map +1 -1
- package/dist/issue-command.js +34 -5
- package/dist/issue-command.js.map +1 -1
- package/dist/operator-message.d.ts +6 -0
- package/dist/operator-message.d.ts.map +1 -0
- package/dist/operator-message.js +17 -0
- package/dist/operator-message.js.map +1 -0
- package/dist/prompt-operator-input.d.ts +2 -2
- package/dist/prompt-operator-input.d.ts.map +1 -1
- package/dist/prompt-operator-input.js +5 -5
- package/dist/prompt-operator-input.js.map +1 -1
- package/dist/session-log-lines.d.ts.map +1 -1
- package/dist/session-log-lines.js +12 -4
- package/dist/session-log-lines.js.map +1 -1
- package/dist/session-sinks.d.ts.map +1 -1
- package/dist/session-sinks.js +1 -0
- package/dist/session-sinks.js.map +1 -1
- package/dist/tui/compute-operator-input-cursor-y.d.ts +14 -0
- package/dist/tui/compute-operator-input-cursor-y.d.ts.map +1 -1
- package/dist/tui/compute-operator-input-cursor-y.js +17 -0
- package/dist/tui/compute-operator-input-cursor-y.js.map +1 -1
- package/dist/tui/create-issue-session-tui-host.d.ts +7 -2
- package/dist/tui/create-issue-session-tui-host.d.ts.map +1 -1
- package/dist/tui/create-issue-session-tui-host.js +29 -11
- package/dist/tui/create-issue-session-tui-host.js.map +1 -1
- package/dist/tui/create-issue-session-tui-host.test.js +142 -1
- package/dist/tui/create-issue-session-tui-host.test.js.map +1 -1
- package/dist/tui/create-tui-telemetry-sink.d.ts +1 -1
- package/dist/tui/create-tui-telemetry-sink.d.ts.map +1 -1
- package/dist/tui/create-tui-telemetry-sink.js +5 -5
- package/dist/tui/create-tui-telemetry-sink.js.map +1 -1
- package/dist/tui/format-operator-context.d.ts +26 -4
- package/dist/tui/format-operator-context.d.ts.map +1 -1
- package/dist/tui/format-operator-context.js +73 -18
- package/dist/tui/format-operator-context.js.map +1 -1
- package/dist/tui/issue-session-tui-stream-cursor.test.d.ts +2 -0
- package/dist/tui/issue-session-tui-stream-cursor.test.d.ts.map +1 -0
- package/dist/tui/issue-session-tui-stream-cursor.test.js +47 -0
- package/dist/tui/issue-session-tui-stream-cursor.test.js.map +1 -0
- package/dist/tui/issue-session-tui-stream.d.ts +11 -0
- package/dist/tui/issue-session-tui-stream.d.ts.map +1 -0
- package/dist/tui/issue-session-tui-stream.js +117 -0
- package/dist/tui/issue-session-tui-stream.js.map +1 -0
- package/dist/tui/issue-session-tui-stream.test.d.ts +2 -0
- package/dist/tui/issue-session-tui-stream.test.d.ts.map +1 -0
- package/dist/tui/issue-session-tui-stream.test.js +380 -0
- package/dist/tui/issue-session-tui-stream.test.js.map +1 -0
- package/dist/tui/issue-session-tui.d.ts +24 -1
- package/dist/tui/issue-session-tui.d.ts.map +1 -1
- package/dist/tui/issue-session-tui.js +35 -26
- package/dist/tui/issue-session-tui.js.map +1 -1
- package/dist/tui/issue-session-tui.test.js +299 -23
- package/dist/tui/issue-session-tui.test.js.map +1 -1
- package/dist/tui/open-questions-pane.d.ts +2 -0
- package/dist/tui/open-questions-pane.d.ts.map +1 -1
- package/dist/tui/open-questions-pane.js +5 -3
- package/dist/tui/open-questions-pane.js.map +1 -1
- package/dist/tui/operator-text-area-emacs-keys.test.js +28 -25
- package/dist/tui/operator-text-area-emacs-keys.test.js.map +1 -1
- package/dist/tui/operator-text-area-keyboard-harness.d.ts +3 -2
- package/dist/tui/operator-text-area-keyboard-harness.d.ts.map +1 -1
- package/dist/tui/operator-text-area-keyboard-harness.js +3 -3
- package/dist/tui/operator-text-area-keyboard-harness.js.map +1 -1
- package/dist/tui/operator-text-area.d.ts.map +1 -1
- package/dist/tui/operator-text-area.js +2 -1
- 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 +3 -2
- package/dist/tui/operator-text-area.test-double.js.map +1 -1
- package/dist/tui/stream-layout.d.ts +20 -0
- package/dist/tui/stream-layout.d.ts.map +1 -0
- package/dist/tui/stream-layout.js +55 -0
- package/dist/tui/stream-layout.js.map +1 -0
- package/dist/tui/titled-border-line.d.ts +10 -1
- package/dist/tui/titled-border-line.d.ts.map +1 -1
- package/dist/tui/titled-border-line.js +62 -12
- package/dist/tui/titled-border-line.js.map +1 -1
- package/dist/tui/titled-border-pane.d.ts +5 -1
- package/dist/tui/titled-border-pane.d.ts.map +1 -1
- package/dist/tui/titled-border-pane.ink.test.js +67 -0
- package/dist/tui/titled-border-pane.ink.test.js.map +1 -1
- package/dist/tui/titled-border-pane.js +32 -3
- package/dist/tui/titled-border-pane.js.map +1 -1
- package/dist/tui/tui-layout-constants.d.ts +12 -0
- package/dist/tui/tui-layout-constants.d.ts.map +1 -1
- package/dist/tui/tui-layout-constants.js +12 -0
- package/dist/tui/tui-layout-constants.js.map +1 -1
- package/dist/tui/tui-layout-mode.d.ts +13 -0
- package/dist/tui/tui-layout-mode.d.ts.map +1 -0
- package/dist/tui/tui-layout-mode.js +16 -0
- package/dist/tui/tui-layout-mode.js.map +1 -0
- package/dist/tui/tui-view-model.d.ts +12 -1
- package/dist/tui/tui-view-model.d.ts.map +1 -1
- package/dist/tui/tui-view-model.js +25 -4
- package/dist/tui/tui-view-model.js.map +1 -1
- package/docs/config.md +170 -0
- package/docs/settings.md +161 -0
- package/package.json +8 -5
package/docs/config.md
ADDED
|
@@ -0,0 +1,170 @@
|
|
|
1
|
+
# ensemble 共通設定(config.yaml)
|
|
2
|
+
|
|
3
|
+
> **正本:** `.ensemble/config.yaml` の配置・書き方・スキーマと conductor MCP 設定。本書以外の設定層の一覧・解決パターンは [settings.md](settings.md) を参照します。
|
|
4
|
+
|
|
5
|
+
`.ensemble/config.yaml` は harness 横断の設定の正本。team-profile(`profile.yaml`)や conductor SDK 認証とは別系統。
|
|
6
|
+
|
|
7
|
+
conductor(Cursor SDK)に渡す MCP 設定もこの config.yaml とは別の JSON ファイルで管理する(下記の [Conductor MCP 設定](#conductor-mcp-設定mcpjson) を参照)。
|
|
8
|
+
|
|
9
|
+
## 配置と解決順
|
|
10
|
+
|
|
11
|
+
| 層 | パス | 優先度 |
|
|
12
|
+
|----|------|--------|
|
|
13
|
+
| プロジェクト | `<repoRoot>/.ensemble/config.yaml` | 高(上書き) |
|
|
14
|
+
| ユーザ | `~/.ensemble/config.yaml` | 低(既定) |
|
|
15
|
+
|
|
16
|
+
- 両方ある場合は **deep merge**(プロジェクトがユーザを上書き)
|
|
17
|
+
- どちらも無い場合は **コード内デフォルト**
|
|
18
|
+
- **環境変数・CLI フラグは config より優先**(明示上書き)
|
|
19
|
+
|
|
20
|
+
### 設定項目ごとの解決順(Phase 1)
|
|
21
|
+
|
|
22
|
+
すべての Phase 1 キーで次の順序を **実装・テストで固定**している:
|
|
23
|
+
|
|
24
|
+
```
|
|
25
|
+
CLI 明示指定 > 環境変数 > project .ensemble/config.yaml > user ~/.ensemble/config.yaml > コード内デフォルト
|
|
26
|
+
```
|
|
27
|
+
|
|
28
|
+
`loadEnsembleConfig(repoRoot)` は user → project の順で merge した `EnsembleConfig` を返す。各 `resolve*Setting` はその merged config を **config 層**として参照する。
|
|
29
|
+
|
|
30
|
+
`ensemble issue` 起動時(GitHub monitor / Issue コンテキスト取得より前)に config を読み込む。
|
|
31
|
+
|
|
32
|
+
## テンプレート
|
|
33
|
+
|
|
34
|
+
リポジトリ直下の [`config.example.yaml`](../config.example.yaml) をコピーして使う。実運用の config は `.ensemble/` 配下のため **gitignore 対象**(方針 A)。チームで共有したい非秘密項目だけ example を更新する。
|
|
35
|
+
|
|
36
|
+
```bash
|
|
37
|
+
mkdir -p .ensemble
|
|
38
|
+
cp config.example.yaml .ensemble/config.yaml
|
|
39
|
+
# またはユーザ全体
|
|
40
|
+
mkdir -p ~/.ensemble
|
|
41
|
+
cp config.example.yaml ~/.ensemble/config.yaml
|
|
42
|
+
```
|
|
43
|
+
|
|
44
|
+
## スキーマ(Phase 1)
|
|
45
|
+
|
|
46
|
+
```yaml
|
|
47
|
+
profile:
|
|
48
|
+
default: implementer-and-reviewer # ENSEMBLE_DEFAULT_PROFILE 相当
|
|
49
|
+
|
|
50
|
+
conductor:
|
|
51
|
+
model: default # CONDUCTOR_MODEL_ID 相当
|
|
52
|
+
|
|
53
|
+
acp:
|
|
54
|
+
defaultPreset: cursor # ENSEMBLE_DEFAULT_ACP_CLI 相当
|
|
55
|
+
|
|
56
|
+
session:
|
|
57
|
+
worktree: isolated # --worktree 既定(isolated | in-repo)
|
|
58
|
+
maxTurns:
|
|
59
|
+
tty: 0 # 0 = 無制限
|
|
60
|
+
nonTty: 5
|
|
61
|
+
postLoop:
|
|
62
|
+
wait: true # TTY 時 post-loop 待機(--no-wait で上書き)
|
|
63
|
+
|
|
64
|
+
github:
|
|
65
|
+
auth:
|
|
66
|
+
allowGhAuthTokenFallback: true
|
|
67
|
+
monitor:
|
|
68
|
+
enabled: true
|
|
69
|
+
debounceMs: 30000
|
|
70
|
+
pollIntervalMs: 60000
|
|
71
|
+
activePollIntervalMs: 15000
|
|
72
|
+
stopPollWaitMs: 5000
|
|
73
|
+
|
|
74
|
+
tui:
|
|
75
|
+
layout: pane # ENSEMBLE_TUI_LAYOUT 相当
|
|
76
|
+
forceHyperlink: auto # FORCE_HYPERLINK 相当(auto | on | off)
|
|
77
|
+
```
|
|
78
|
+
|
|
79
|
+
### キー一覧
|
|
80
|
+
|
|
81
|
+
| キー | 意味 | CLI 上書き | env 上書き |
|
|
82
|
+
|------|------|-----------|-----------|
|
|
83
|
+
| `profile.default` | 既定 team profile(名前またはパス) | `--profile` | `ENSEMBLE_DEFAULT_PROFILE` |
|
|
84
|
+
| `conductor.model` | conductor モデル id | `--model` | `CONDUCTOR_MODEL_ID` |
|
|
85
|
+
| `acp.defaultPreset` | worker ACP built-in preset | `--default-acp-cli` 等 | `ENSEMBLE_DEFAULT_ACP_CLI` |
|
|
86
|
+
| `session.worktree` | worker workspace モード | `--worktree` | — |
|
|
87
|
+
| `session.maxTurns.tty` / `nonTty` | 自律ターン上限 | `--max-turns` / `--no-max-turns` | — |
|
|
88
|
+
| `session.postLoop.wait` | post-loop 待機(TTY) | `--no-wait` | — |
|
|
89
|
+
| `tui.layout` | TTY レイアウト(`pane` / `stream`) | — | `ENSEMBLE_TUI_LAYOUT` |
|
|
90
|
+
| `tui.forceHyperlink` | Issue リンク OSC 8(`auto` / `on` / `off`) | — | `FORCE_HYPERLINK`(`1`/`0`) |
|
|
91
|
+
| `github.auth.allowGhAuthTokenFallback` | `gh auth token` フォールバック | — | — |
|
|
92
|
+
| `github.monitor.enabled` | Issue / PR 監視 | `--no-github-monitor` | — |
|
|
93
|
+
| `github.monitor.debounceMs` | 更新 debounce | `--github-monitor-debounce-ms` | — |
|
|
94
|
+
| `github.monitor.pollIntervalMs` 他 | poll 間隔(コード内既定のみ) | — | — |
|
|
95
|
+
|
|
96
|
+
profile / worker に `acp` がある worker は `--default-acp-*` / config `acp.defaultPreset` より **profile 側が優先**(従来どおり)。
|
|
97
|
+
|
|
98
|
+
### GitHub 認証トークンの解決順
|
|
99
|
+
|
|
100
|
+
`resolveGitHubAuthToken({ config })`(`@agents-ensemble/core`):
|
|
101
|
+
|
|
102
|
+
1. 環境変数 `GITHUB_TOKEN`
|
|
103
|
+
2. 環境変数 `GH_TOKEN`
|
|
104
|
+
3. `config.github.auth.allowGhAuthTokenFallback: true` のときのみ `gh auth token`
|
|
105
|
+
|
|
106
|
+
`allowGhAuthTokenFallback: false` のときは **`gh auth token` を呼ばない**。CI 等では `GH_TOKEN` / `GITHUB_TOKEN` を明示設定すること。
|
|
107
|
+
|
|
108
|
+
## 移行表(env → config)
|
|
109
|
+
|
|
110
|
+
| 従来(env / コード default) | config キー | 備考 |
|
|
111
|
+
|------------------------------|-------------|------|
|
|
112
|
+
| `ENSEMBLE_DEFAULT_PROFILE` | `profile.default` | env は CI 上書き用として維持 |
|
|
113
|
+
| `CONDUCTOR_MODEL_ID` | `conductor.model` | 同上 |
|
|
114
|
+
| `ENSEMBLE_DEFAULT_ACP_CLI` | `acp.defaultPreset` | 同上 |
|
|
115
|
+
| CLI `--worktree` 既定 `isolated` | `session.worktree` | |
|
|
116
|
+
| TTY 無制限 / 非 TTY 5 | `session.maxTurns.tty` / `nonTty` | |
|
|
117
|
+
| TTY post-loop 待機 ON | `session.postLoop.wait` | |
|
|
118
|
+
| monitor 各種定数 | `github.monitor.*` | |
|
|
119
|
+
| `ENSEMBLE_TUI_LAYOUT` | `tui.layout` | env は invocation 上書き用として維持 |
|
|
120
|
+
| `FORCE_HYPERLINK` | `tui.forceHyperlink` | `1`/`0` ↔ `on`/`off`。未設定 ↔ `auto` |
|
|
121
|
+
|
|
122
|
+
**config 未作成時**は従来どおり env とコード default のみが効く(後方互換)。
|
|
123
|
+
|
|
124
|
+
## Conductor MCP 設定(mcp.json)
|
|
125
|
+
|
|
126
|
+
MCP 設定は次の 2 層から読み込み、`mcpServers` のサーバー名単位でマージする。
|
|
127
|
+
|
|
128
|
+
| 層 | パス | 優先度 |
|
|
129
|
+
|----|------|--------|
|
|
130
|
+
| プロジェクト | `<repoRoot>/.agents/mcp.json` | 高(同名を上書き) |
|
|
131
|
+
| ユーザ | `~/.ensemble/mcp.json` | 低(既定) |
|
|
132
|
+
|
|
133
|
+
プロジェクト設定が同名サーバーを定義した場合は、ユーザ設定の定義全体を置き換える。片方だけ存在する場合はその設定を使い、両方とも無い場合は MCP なしで起動する。
|
|
134
|
+
|
|
135
|
+
ファイル形式は Cursor SDK の `mcp.json` 形式(`mcpServers` オブジェクト)を使う。
|
|
136
|
+
|
|
137
|
+
```json
|
|
138
|
+
{
|
|
139
|
+
"mcpServers": {
|
|
140
|
+
"example": {
|
|
141
|
+
"type": "stdio",
|
|
142
|
+
"command": "npx",
|
|
143
|
+
"args": ["-y", "some-mcp-server"],
|
|
144
|
+
"env": {
|
|
145
|
+
"API_KEY": "${env:API_KEY}"
|
|
146
|
+
}
|
|
147
|
+
}
|
|
148
|
+
}
|
|
149
|
+
}
|
|
150
|
+
```
|
|
151
|
+
|
|
152
|
+
この MVP では解決済み設定を conductor の Cursor SDK `Agent.create` / `Agent.resume` に inline MCP として渡す。`Agent.resume` と認証エラーからの in-process reconnect の両方で同じ設定を再注入する。設定値の `${env:...}` や `${workspaceFolder}` などの展開は SDK に任せる。`.cursor/mcp.json` へのコピー・symlink は行わず、ACP worker にはこの設定を渡さない。
|
|
153
|
+
|
|
154
|
+
JSON が不正、または `mcpServers` / サーバー定義の形式が不正な場合は、そのファイルを `[mcp]` 警告とともにスキップする。もう一方の層が有効ならそちらは引き続き読み込み、両方をスキップした場合は MCP なしで起動する。MCP のホットリロードは行わないため、変更後は新しいセッションを開始する。
|
|
155
|
+
|
|
156
|
+
## 秘密情報を config に書かない
|
|
157
|
+
|
|
158
|
+
**token 本体を config に平文で保存しない。** 認証は環境変数、`gh auth login`、将来の stored credential 経路(別 Issue)を使う。
|
|
159
|
+
|
|
160
|
+
## スキーマ外キー
|
|
161
|
+
|
|
162
|
+
YAML に未知のキーがあっても **無視する**(警告なし)。将来のスキーマ拡張用に残してよい。既知キーで型が合わない値も **該当キーのみ**無視し、下位層またはデフォルトにフォールバックする。
|
|
163
|
+
|
|
164
|
+
## 関連
|
|
165
|
+
|
|
166
|
+
- [settings.md](settings.md) — 全設定層の一覧・解決パターン(本書は config.yaml 詳細)
|
|
167
|
+
- [ADR 0020](https://github.com/otolab/agents-ensemble/blob/main/docs/adr/0020-ensemble-config-setting-resolution.md) — 解決順の設計判断
|
|
168
|
+
- [ADR 0018](https://github.com/otolab/agents-ensemble/blob/main/docs/adr/0018-team-profile-four-layer-resolution.md) — `.ensemble/` 配下の規約(team-profile)
|
|
169
|
+
- [#223](https://github.com/otolab/agents-ensemble/issues/223) — config 基盤
|
|
170
|
+
- [#228](https://github.com/otolab/agents-ensemble/issues/228) — Phase 1 拡張
|
package/docs/settings.md
ADDED
|
@@ -0,0 +1,161 @@
|
|
|
1
|
+
# 設定値リファレンス
|
|
2
|
+
|
|
3
|
+
> **正本:** `ensemble` の CLI / 環境変数 / config / profile / TUI 設定の対応表と解決順。本書の `config.yaml` スキーマ詳細は [config.md](config.md) を参照します。
|
|
4
|
+
|
|
5
|
+
## 設定の層
|
|
6
|
+
|
|
7
|
+
| 層 | 正本 | 用途 |
|
|
8
|
+
|----|------|------|
|
|
9
|
+
| **CLI フラグ** | `ensemble issue` 等 | invocation 単位の明示上書き |
|
|
10
|
+
| **環境変数** | シェル / CI | 一時上書き・秘密情報・自動化注入 |
|
|
11
|
+
| **project config** | `<repoRoot>/.ensemble/config.yaml` | リポジトリ単位の既定 |
|
|
12
|
+
| **user config** | `~/.ensemble/config.yaml` | マシン全体の既定 |
|
|
13
|
+
| **team profile** | `profile.yaml`([elements.md](https://github.com/otolab/agents-ensemble/blob/main/docs/elements.md)) | worker 構成・per-worker ACP / workspace |
|
|
14
|
+
| **MCP** | `.agents/mcp.json` / `~/.ensemble/mcp.json` | conductor 向け MCP([config.md § MCP](config.md#conductor-mcp-設定mcpjson)) |
|
|
15
|
+
| **コード default** | `packages/core/src/config/defaults.ts` 等 | config 未作成時のフォールバック |
|
|
16
|
+
|
|
17
|
+
project / user config は **deep merge**(project が user を上書き)。秘密情報(token 本体)は **config に平文で書かない**([config.md](config.md))。
|
|
18
|
+
|
|
19
|
+
## 解決パターン
|
|
20
|
+
|
|
21
|
+
すべての項目が同じ順序ではない。実装は `packages/core/src/config/resolve-settings.ts` の `resolve*Setting` か、各機能の専用解決関数に従う。
|
|
22
|
+
|
|
23
|
+
### パターン A — Phase 1 横断(env あり)
|
|
24
|
+
|
|
25
|
+
```
|
|
26
|
+
CLI > 環境変数 > project config > user config > コード default
|
|
27
|
+
```
|
|
28
|
+
|
|
29
|
+
`profile.default` / `conductor.model` / `acp.defaultPreset` など。設計判断は [ADR 0020](https://github.com/otolab/agents-ensemble/blob/main/docs/adr/0020-ensemble-config-setting-resolution.md)。
|
|
30
|
+
|
|
31
|
+
### パターン B — Phase 1 横断(env なし)
|
|
32
|
+
|
|
33
|
+
```
|
|
34
|
+
CLI > project config > user config > コード default
|
|
35
|
+
```
|
|
36
|
+
|
|
37
|
+
`session.worktree` / `session.maxTurns.*` / `session.postLoop.wait` / `github.monitor.*` など。
|
|
38
|
+
|
|
39
|
+
### パターン C — profile / worker 優先
|
|
40
|
+
|
|
41
|
+
worker spawn 時の ACP 解決([ADR 0019](https://github.com/otolab/agents-ensemble/blob/main/docs/adr/0019-worker-acp-cli-presets.md)):
|
|
42
|
+
|
|
43
|
+
```
|
|
44
|
+
profile.workers[].acp > profile.acp > CLI --default-acp-* > ENSEMBLE_DEFAULT_ACP_CLI > config acp.defaultPreset > cursor
|
|
45
|
+
```
|
|
46
|
+
|
|
47
|
+
### パターン D — 実行時入力(env / CLI)
|
|
48
|
+
|
|
49
|
+
config キーなし。CI・スクリプト・端末検出、または 1 回限りのオペレータ入力向け。
|
|
50
|
+
|
|
51
|
+
### パターン E — 認証(config は可否のみ)
|
|
52
|
+
|
|
53
|
+
| 種別 | 解決順 |
|
|
54
|
+
|------|--------|
|
|
55
|
+
| GitHub API | `GITHUB_TOKEN` > `GH_TOKEN` > (`allowGhAuthTokenFallback: true` 時のみ)`gh auth token` |
|
|
56
|
+
| conductor | `CURSOR_API_KEY` > `~/.cursor/sdk/auth.json`(`ensemble auth login`) |
|
|
57
|
+
| worker ACP(preset 依存) | preset ごとに README / ADR 0019 参照 |
|
|
58
|
+
|
|
59
|
+
## 一覧 — Phase 1(config.yaml)
|
|
60
|
+
|
|
61
|
+
| 設定 | config キー | 環境変数 | CLI | コード default | 解決 |
|
|
62
|
+
|------|-------------|----------|-----|----------------|------|
|
|
63
|
+
| 既定 team profile | `profile.default` | `ENSEMBLE_DEFAULT_PROFILE` | `--profile` | 同梱 `implementer-and-reviewer` | A |
|
|
64
|
+
| conductor モデル | `conductor.model` | `CONDUCTOR_MODEL_ID` | `--model` | `default` | A |
|
|
65
|
+
| worker ACP preset(profile 未指定 worker) | `acp.defaultPreset` | `ENSEMBLE_DEFAULT_ACP_CLI` | `--default-acp-cli` 等 | `cursor` | C |
|
|
66
|
+
| Issue worktree | `session.worktree` | — | `--worktree` | `isolated` | B |
|
|
67
|
+
| 自律ターン上限(TTY) | `session.maxTurns.tty` | — | `--max-turns` / `--no-max-turns` | `0`(無制限) | B |
|
|
68
|
+
| 自律ターン上限(非 TTY) | `session.maxTurns.nonTty` | — | `--max-turns` / `--no-max-turns` | `5` | B |
|
|
69
|
+
| post-loop 待機(TTY) | `session.postLoop.wait` | — | `--no-wait` | `true` | B |
|
|
70
|
+
| `gh auth token` フォールバック | `github.auth.allowGhAuthTokenFallback` | — | — | `true` | B |
|
|
71
|
+
| GitHub 監視 | `github.monitor.enabled` | — | `--no-github-monitor` | `true` | B |
|
|
72
|
+
| 監視 debounce | `github.monitor.debounceMs` | — | `--github-monitor-debounce-ms` | `30000` | B |
|
|
73
|
+
| poll 間隔 | `github.monitor.pollIntervalMs` 他 | — | — | 各定数 | B |
|
|
74
|
+
|
|
75
|
+
テンプレート: [`config.example.yaml`](../config.example.yaml)。`ensemble issue` 起動時(GitHub monitor より前)に `loadEnsembleConfig(repoRoot)` で読み込む。
|
|
76
|
+
|
|
77
|
+
## 一覧 — TUI / オペレータ UI
|
|
78
|
+
|
|
79
|
+
| 設定 | 環境変数 | config | CLI | コード default | 解決 |
|
|
80
|
+
|------|----------|--------|-----|----------------|------|
|
|
81
|
+
| TTY レイアウト | `ENSEMBLE_TUI_LAYOUT` | `tui.layout` | — | `pane` | A |
|
|
82
|
+
| OSC 8 ハイパーリンク | `FORCE_HYPERLINK`(`1`/`0`) | `tui.forceHyperlink`(`auto`/`on`/`off`) | — | `auto` | A |
|
|
83
|
+
| オペレータ 1 回注入 | `ENSEMBLE_OPERATOR_MESSAGE` | — | `ensemble issue <ref> [message...]` | — | D |
|
|
84
|
+
|
|
85
|
+
TUI 設定は `loadEnsembleConfig` 結果を `createIssueSessionTuiHost` へ渡して解決する。Issue リンク表示の詳細は [operator-input.md](https://github.com/otolab/agents-ensemble/blob/main/docs/operator-input.md)。
|
|
86
|
+
|
|
87
|
+
### 初回オペレータメッセージの CLI / env 関係
|
|
88
|
+
|
|
89
|
+
`ensemble issue <ref> [message...]` の残り引数をスペース 1 つで結合し、前後を trim して初回メッセージにします。CLI メッセージと `ENSEMBLE_OPERATOR_MESSAGE` は同時に指定できません。両方が trim 後に空でない場合は、優先順位を設けず起動前にエラーにします。
|
|
90
|
+
|
|
91
|
+
新規セッションでは、指定した値を binding 直後に 1 回だけ `operator.message` として送ります。TTY / 非 TTY の両方に対応します。`--continue` / `--resume` に CLI メッセージを付けた場合は注入せず、stderr に 1 行の警告を出します。
|
|
92
|
+
|
|
93
|
+
## 一覧 — 自動化・非 TTY
|
|
94
|
+
|
|
95
|
+
| 設定 | 環境変数 | config | 備考 |
|
|
96
|
+
|------|----------|--------|------|
|
|
97
|
+
| 人間エスカレーション回答 | `ENSEMBLE_ESCALATION_RESPONSE` | — | 非 TTY で `ask_human` への env フォールバック |
|
|
98
|
+
|
|
99
|
+
## 一覧 — 認証(秘密情報)
|
|
100
|
+
|
|
101
|
+
| 設定 | 環境変数 | config で制御できること |
|
|
102
|
+
|------|----------|------------------------|
|
|
103
|
+
| GitHub API token | `GITHUB_TOKEN` / `GH_TOKEN` | `github.auth.allowGhAuthTokenFallback` のみ |
|
|
104
|
+
| conductor API key | `CURSOR_API_KEY` | —(`ensemble auth login` は別経路) |
|
|
105
|
+
|
|
106
|
+
## 一覧 — 別ファイル
|
|
107
|
+
|
|
108
|
+
| 設定 | ファイル | 解決順 |
|
|
109
|
+
|------|----------|--------|
|
|
110
|
+
| conductor MCP | `.agents/mcp.json` / `~/.ensemble/mcp.json` | project > user(サーバー名単位 merge) |
|
|
111
|
+
| team profile | `.ensemble/profiles/…` / `--profile` パス | [ADR 0018](https://github.com/otolab/agents-ensemble/blob/main/docs/adr/0018-team-profile-four-layer-resolution.md) |
|
|
112
|
+
|
|
113
|
+
## 一覧 — ランタイム(利用者が「設定」しない)
|
|
114
|
+
|
|
115
|
+
| 変数 | 用途 |
|
|
116
|
+
|------|------|
|
|
117
|
+
| `TERM_PROGRAM` / `TERM` / `CI` / `WT_SESSION` 等 | OSC 8 対応端末判定(`supportsOsc8Hyperlinks`) |
|
|
118
|
+
| `CURSOR_RIPGREP_PATH` | SDK 起動時に ripgrep パスを設定(内部) |
|
|
119
|
+
| `HTTP_PROXY` / `HTTPS_PROXY` / `NO_PROXY` | conductor の proxy。既存値を優先し、未設定時は Cursor settings から補完 |
|
|
120
|
+
|
|
121
|
+
## どこに書くべきか
|
|
122
|
+
|
|
123
|
+
| やりたいこと | 推奨 |
|
|
124
|
+
|--------------|------|
|
|
125
|
+
| チーム / 個人の恒久既定(モデル、worktree、monitor) | `~/.ensemble/config.yaml` または project `.ensemble/config.yaml` |
|
|
126
|
+
| CI で 1 ジョブだけ上書き | 環境変数(`CONDUCTOR_MODEL_ID` 等) |
|
|
127
|
+
| 1 回限りの実行 | CLI フラグ(初回メッセージは `ensemble issue <ref> [message...]`) |
|
|
128
|
+
| token | 環境変数 or `gh auth login` / `ensemble auth login`(config に書かない) |
|
|
129
|
+
| tmux 内で Issue リンクを短縮表示 | `~/.ensemble/config.yaml` に `tui.forceHyperlink: on`(または env `FORCE_HYPERLINK=1`) |
|
|
130
|
+
| worker ごとの ACP / cwd | `profile.yaml` |
|
|
131
|
+
| conductor の MCP | `mcp.json` |
|
|
132
|
+
|
|
133
|
+
## env-only の棚卸し
|
|
134
|
+
|
|
135
|
+
次の値は config 化済みの設定を重複して説明するものではなく、用途上 config キーを持たない、または秘密情報・実行環境に依存するため env-only としています。
|
|
136
|
+
|
|
137
|
+
| env-only | 理由 |
|
|
138
|
+
|----------|------|
|
|
139
|
+
| `ENSEMBLE_OPERATOR_MESSAGE` | CLI 引数を使えない自動化などで、1 回だけオペレータ入力を注入する env-only の値。永続設定にはしない |
|
|
140
|
+
| `ENSEMBLE_ESCALATION_RESPONSE` | 非 TTY で `ask_human` への回答を 1 回注入する自動化用値。永続設定にはしない |
|
|
141
|
+
| `CURSOR_API_KEY` | conductor の秘密情報。config に平文保存しない |
|
|
142
|
+
| `GITHUB_TOKEN` / `GH_TOKEN` | GitHub API の秘密情報。config では token 本体を管理しない |
|
|
143
|
+
| `HTTP_PROXY` / `HTTPS_PROXY` / `NO_PROXY` | SDK 起動時のプロセス環境・既存環境を優先する proxy 設定 |
|
|
144
|
+
| `TERM` / `TERM_PROGRAM` / `CI` 等 | TTY / CI の実行環境を検出する値 |
|
|
145
|
+
| `CURSOR_RIPGREP_PATH` | SDK 起動時に利用する内部ツールの明示指定 |
|
|
146
|
+
|
|
147
|
+
`profile.default`、`conductor.model`、`acp.defaultPreset`、`session.*`、`github.monitor.*`、`tui.*` のように config キーがある設定は、上の env-only 表ではなく本書の設定一覧と [config.md](config.md) に記載しています。env は invocation 単位の上書きとして残る場合があります。
|
|
148
|
+
|
|
149
|
+
## 既知のギャップ
|
|
150
|
+
|
|
151
|
+
| 項目 | 状態 |
|
|
152
|
+
|------|------|
|
|
153
|
+
| `resolveDefaultAcpPresetSetting` と `resolveDefaultAcpSpawn` の二重実装 | 挙動は一致。将来 refactor 可 |
|
|
154
|
+
| Phase 2(`acp.defaultCommand` 等) | [ADR 0020 フォローアップ](https://github.com/otolab/agents-ensemble/blob/main/docs/adr/0020-ensemble-config-setting-resolution.md) |
|
|
155
|
+
|
|
156
|
+
## 関連
|
|
157
|
+
|
|
158
|
+
- [config.md](config.md) — `config.yaml` スキーマ・MCP・移行表
|
|
159
|
+
- [CLI README](https://github.com/otolab/agents-ensemble/blob/main/docs/cli/README.md) — CLI のインストール・最小クイックスタート
|
|
160
|
+
- [operator-input.md](https://github.com/otolab/agents-ensemble/blob/main/docs/operator-input.md) — TUI レイアウト・Issue リンク
|
|
161
|
+
- [ADR 0020](https://github.com/otolab/agents-ensemble/blob/main/docs/adr/0020-ensemble-config-setting-resolution.md) — Phase 1 解決順
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@agents-ensemble/cli",
|
|
3
|
-
"version": "0.
|
|
3
|
+
"version": "0.6.1",
|
|
4
4
|
"type": "module",
|
|
5
5
|
"description": "ensemble CLI — Issue-based agent orchestration",
|
|
6
6
|
"bin": {
|
|
@@ -14,9 +14,9 @@
|
|
|
14
14
|
"commander": "14.0.1",
|
|
15
15
|
"ink": "7.1.1",
|
|
16
16
|
"react": "19.2.0",
|
|
17
|
-
"react-ink-textarea": "npm:@otolab/react-ink-textarea@0.4.1-otolab.
|
|
17
|
+
"react-ink-textarea": "npm:@otolab/react-ink-textarea@0.4.1-otolab.3",
|
|
18
18
|
"string-width": "8.1.0",
|
|
19
|
-
"@agents-ensemble/core": "0.
|
|
19
|
+
"@agents-ensemble/core": "0.6.1"
|
|
20
20
|
},
|
|
21
21
|
"devDependencies": {
|
|
22
22
|
"@types/js-yaml": "4.0.9",
|
|
@@ -34,7 +34,10 @@
|
|
|
34
34
|
"directory": "packages/cli"
|
|
35
35
|
},
|
|
36
36
|
"files": [
|
|
37
|
-
"dist"
|
|
37
|
+
"dist",
|
|
38
|
+
"README.md",
|
|
39
|
+
"docs/**",
|
|
40
|
+
"config.example.yaml"
|
|
38
41
|
],
|
|
39
42
|
"publishConfig": {
|
|
40
43
|
"access": "public",
|
|
@@ -44,7 +47,7 @@
|
|
|
44
47
|
"node": ">=22.0.0"
|
|
45
48
|
},
|
|
46
49
|
"scripts": {
|
|
47
|
-
"build": "tsc --build",
|
|
50
|
+
"build": "tsc --build && node scripts/copy-docs.mjs",
|
|
48
51
|
"test:e2e": "vitest run --config vitest.config.e2e.ts",
|
|
49
52
|
"test": "vitest",
|
|
50
53
|
"test:run": "vitest run",
|