teapot-coding-agent 0.15.5 → 0.15.7
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.ja.md +248 -0
- package/README.md +238 -245
- package/dist/agent/agent.js +18 -1
- package/dist/agent/tools.js +24 -2
- package/package.json +1 -1
- package/public/assets/{index-mKmKGRRj.css → index-CL7BIo-z.css} +1 -1
- package/public/assets/index-CXOcSpYs.js +28 -0
- package/public/assets/index-CXOcSpYs.js.map +1 -0
- package/public/assets/{shiki-C0VENFA4.js → shiki-C5KwscN-.js} +2 -2
- package/public/assets/{shiki-C0VENFA4.js.map → shiki-C5KwscN-.js.map} +1 -1
- package/public/index.html +2 -2
- package/public/assets/index-4i2VuS2k.js +0 -28
- package/public/assets/index-4i2VuS2k.js.map +0 -1
package/README.ja.md
ADDED
|
@@ -0,0 +1,248 @@
|
|
|
1
|
+
# teapot 🫖
|
|
2
|
+
|
|
3
|
+
**OpenAI互換APIを使って、複数の自律コーディングAIをブラウザから常駐・並列運用する軽量ハーネス**
|
|
4
|
+
|
|
5
|
+
> 5分で試す → [クイックスタート](#-クイックスタート) · 詳細は[リファレンス](#-リファレンス)
|
|
6
|
+
|
|
7
|
+
[English README](README.md)
|
|
8
|
+
|
|
9
|
+
---
|
|
10
|
+
|
|
11
|
+
## 🚀 クイックスタート
|
|
12
|
+
|
|
13
|
+
### 1. インストール
|
|
14
|
+
|
|
15
|
+
Node.js **24以上** が必要です。
|
|
16
|
+
|
|
17
|
+
```sh
|
|
18
|
+
npm install -g teapot-coding-agent
|
|
19
|
+
```
|
|
20
|
+
|
|
21
|
+
### 2. 設定ファイルを書く
|
|
22
|
+
|
|
23
|
+
```sh
|
|
24
|
+
mkdir -p ~/.config/teapot-coding-agent
|
|
25
|
+
nano ~/.config/teapot-coding-agent/config.json
|
|
26
|
+
```
|
|
27
|
+
|
|
28
|
+
**最小構成**(OpenRouterの例 — 他プロバイダは[リファレンス](#-リファレンス)へ):
|
|
29
|
+
|
|
30
|
+
```json
|
|
31
|
+
{
|
|
32
|
+
"providers": {
|
|
33
|
+
"openrouter": {
|
|
34
|
+
"baseUrl": "https://openrouter.ai/api/v1",
|
|
35
|
+
"apiKey": "sk-or-あなたのキー",
|
|
36
|
+
"model": "anthropic/claude-sonnet-4"
|
|
37
|
+
}
|
|
38
|
+
},
|
|
39
|
+
"defaultProvider": "openrouter",
|
|
40
|
+
"agents": [
|
|
41
|
+
{ "id": "main", "workspace": "/home/you/my-project" }
|
|
42
|
+
]
|
|
43
|
+
}
|
|
44
|
+
```
|
|
45
|
+
|
|
46
|
+
雛形をコピーしてもOK: [`teapot.config.example.json`](teapot.config.example.json)
|
|
47
|
+
|
|
48
|
+
### 3. 起動
|
|
49
|
+
|
|
50
|
+
```sh
|
|
51
|
+
teapot
|
|
52
|
+
```
|
|
53
|
+
|
|
54
|
+
→ **http://localhost:7788** を開くだけ。
|
|
55
|
+
|
|
56
|
+
### 4. 使う
|
|
57
|
+
|
|
58
|
+
- 左パネルの `#main` をクリック
|
|
59
|
+
- 入力欄に日本語で指示(例: 「このバグを直してテストも通して」)
|
|
60
|
+
- エージェントがファイル読み書き・bash実行・テストを自走します
|
|
61
|
+
|
|
62
|
+
| 操作 | 方法 |
|
|
63
|
+
|---|---|
|
|
64
|
+
| ターミナル | `t` |
|
|
65
|
+
| 右パネル(ゴール/進捗/runtime) | `d` |
|
|
66
|
+
| コマンド一覧 | 入力欄で `/` |
|
|
67
|
+
| エージェント中断 | `Esc` |
|
|
68
|
+
|
|
69
|
+
---
|
|
70
|
+
|
|
71
|
+
## 🤔 これは何?
|
|
72
|
+
|
|
73
|
+
**「このリポジトリのバグ全部調べて、テスト通るまで直して」のような長時間自走タスクを、プロジェクトごとに並列で走らせるための箱**です。
|
|
74
|
+
|
|
75
|
+
```text
|
|
76
|
+
├─ agent: android ── ~/projects/android-app
|
|
77
|
+
├─ agent: kernel ── ~/projects/kernel
|
|
78
|
+
└─ agent: web ── ~/projects/film-sims-web
|
|
79
|
+
```
|
|
80
|
+
|
|
81
|
+
各エージェントは独立したワークスペースを持ち、Discord風UIのチャンネルとして動きます。Claude CodeやCodex CLIのラッパーではなく、**teapot自身がエージェントルーループ(read_file / edit_file / apply_patch / bash / read_url / memory / skills)を実装**しています。
|
|
82
|
+
|
|
83
|
+
### 特徴
|
|
84
|
+
|
|
85
|
+
| | teapot | Claude Code等のCLI |
|
|
86
|
+
|---|---|---|
|
|
87
|
+
| 形態 | 常駐サーバー + Web UI | 対話型CLI |
|
|
88
|
+
| 複数エージェント | ✅ 同時並列 | 基本1セッション |
|
|
89
|
+
| モデル混在 | ✅ エージェント毎に指定 | 固定 |
|
|
90
|
+
| 長時間継続 | ✅ JSONLログから自動復元 | 手動でのセッション管理が必要 |
|
|
91
|
+
| 定期タスク(cron) | ✅ 15秒tick | ❌ |
|
|
92
|
+
|
|
93
|
+
エージェントには以下が使えます:
|
|
94
|
+
|
|
95
|
+
- ファイル読み書き / 複数ファイルへのパッチ適用(apply_patch)
|
|
96
|
+
- bash実行(git / build / test)
|
|
97
|
+
- Webページ読み取り(read_url)
|
|
98
|
+
- Goal(長期目標+自動継続+完了監査) · Memory · Todo · Skills
|
|
99
|
+
- サブエージェント spawn(`@persona タスク`)
|
|
100
|
+
- 定期タスク(例: 「毎30分 git statusとテストを確認して報告」)
|
|
101
|
+
|
|
102
|
+
---
|
|
103
|
+
|
|
104
|
+
## ⚠️ セキュリティ(読んでください)
|
|
105
|
+
|
|
106
|
+
エージェントは `bash` とファイル書き換え権限を持つため、`rm` や `npm install` も実行できます。
|
|
107
|
+
|
|
108
|
+
- **専用Linuxユーザーでの運用を想定**しています
|
|
109
|
+
- 大事なリポジトリは渡す前に `git commit` しておくのが安全
|
|
110
|
+
- workspace外のファイル操作は制限されます(safeJoin)
|
|
111
|
+
- 既定ではlocalhost限定listen。LAN公開する場合は **必ず** `--host 0.0.0.0` と同時に `TEAPOT_API_TOKEN`(またはconfigの `password`)を設定:
|
|
112
|
+
|
|
113
|
+
```sh
|
|
114
|
+
TEAPOT_API_TOKEN=mysecret teapot --host 0.0.0.0 --port 7788
|
|
115
|
+
```
|
|
116
|
+
|
|
117
|
+
---
|
|
118
|
+
|
|
119
|
+
<a id="-リファレンス"></a>
|
|
120
|
+
## 📖 リファレンス
|
|
121
|
+
|
|
122
|
+
<details>
|
|
123
|
+
<summary><b>設定リファレンス</b></summary>
|
|
124
|
+
|
|
125
|
+
| キー | 既定 | 説明 |
|
|
126
|
+
|---|---|---|
|
|
127
|
+
| `port` | 7788 | listenポート(env `TEAPOT_PORT`, CLI `--port/-p`) |
|
|
128
|
+
| `host` | 127.0.0.1 | bindアドレス(env `TEAPOT_HOST`, CLI `--host`; `0.0.0.0`=LAN公開) |
|
|
129
|
+
| `dataDir` | `~/.local/share/teapot-coding-agent` | セッションログ等(env `TEAPOT_DATA_DIR`) |
|
|
130
|
+
| `providers.<name>` | — | `{ baseUrl, apiKey, model? }` のOpenAI互換エンドポイント |
|
|
131
|
+
| `defaultProvider` | — | agent未指定時のプロバイダ |
|
|
132
|
+
| `agents[].id` | 必須 | URLキー兼表示名 |
|
|
133
|
+
| `agents[].workspace` | 必須 | 作業ディレクトリ |
|
|
134
|
+
| `agents[].provider` / `model` | 既定値 | エージェント個別の上書き |
|
|
135
|
+
| `agents[].contextWindowTokens` | 自動推定 | コンテキスト窓(UIゲージ・compact派生に使用) |
|
|
136
|
+
| `agents[].readOnly` | false | trueで書き込み系ツールを封印 |
|
|
137
|
+
| `agents[].autoContinue` | true | ラウンド後にゴールへ継続 |
|
|
138
|
+
| `contextTokenBudget` | 派生 | compact開始閾値(トークン数)。null/未設定=75%派生を推奨 |
|
|
139
|
+
| `maxSpawnDepth` | 3 | サブエージェントのネスト上限 |
|
|
140
|
+
| `password` | — | API認証(env `TEAPOT_API_TOKEN` が優先) |
|
|
141
|
+
| `tasks[]` | — | cronタスク `{ id, agent, schedule, prompt }` |
|
|
142
|
+
|
|
143
|
+
設定の探索順: CLI引数 → `$TEAPOT_CONFIG` → `~/.config/teapot-coding-agent/config.json` → `./teapot.config.json`
|
|
144
|
+
|
|
145
|
+
env上書き: `TEAPOT_PORT` `TEAPOT_API_KEY` `TEAPOT_BASE_URL` `TEAPOT_MODEL` `TEAPOT_CONFIG_DIR` `TEAPOT_DATA_DIR`
|
|
146
|
+
|
|
147
|
+
</details>
|
|
148
|
+
|
|
149
|
+
<details>
|
|
150
|
+
<summary><b>複数モデルの混在(teapotらしい使い方)</b></summary>
|
|
151
|
+
|
|
152
|
+
```jsonc
|
|
153
|
+
{
|
|
154
|
+
"providers": {
|
|
155
|
+
"openrouter": { "baseUrl": "https://openrouter.ai/api/v1", "apiKey": "sk-or-..." },
|
|
156
|
+
"local": { "baseUrl": "http://localhost:8080/v1", "apiKey": "llama.cpp" }
|
|
157
|
+
},
|
|
158
|
+
"defaultProvider": "openrouter",
|
|
159
|
+
"agents": [
|
|
160
|
+
{ "id": "coder", "workspace": "~/proj", "model": "anthropic/claude-sonnet-4" },
|
|
161
|
+
{ "id": "reviewer", "workspace": "~/proj", "provider": "local" }
|
|
162
|
+
]
|
|
163
|
+
}
|
|
164
|
+
```
|
|
165
|
+
|
|
166
|
+
OpenAI互換なら何でもOK: OpenRouter / OpenAI / Ollama / vLLM / llama.cpp。
|
|
167
|
+
openrouter.ai 宛にはアプリ帰属ヘッダを自動付与。
|
|
168
|
+
|
|
169
|
+
モデルのコンテキスト窓は起動時に `/v1/models` から自動推定され、runtimeパネルの使用率ゲージとcompact派生に反映されます。
|
|
170
|
+
|
|
171
|
+
</details>
|
|
172
|
+
|
|
173
|
+
<details>
|
|
174
|
+
<summary><b>コンテキスト管理(長時間作業の仕組み)</b></summary>
|
|
175
|
+
|
|
176
|
+
トークン予算(既定: ウィンドウの75%、不明時96k)を超えると、古いターンをLLM要約で圧縮します。Goal/Memory/Todoは別ファイル保持なので:
|
|
177
|
+
|
|
178
|
+
```text
|
|
179
|
+
1日目: 調査 → 修正 → テスト失敗 → 別アプローチ → サーバー再起動
|
|
180
|
+
2日目: 続きから再開
|
|
181
|
+
```
|
|
182
|
+
|
|
183
|
+
という運用ができます。いわば「常駐する開発担当AI」です。
|
|
184
|
+
|
|
185
|
+
</details>
|
|
186
|
+
|
|
187
|
+
<details>
|
|
188
|
+
<summary><b>HTTP API</b></summary>
|
|
189
|
+
|
|
190
|
+
```
|
|
191
|
+
GET /api/agents 一覧
|
|
192
|
+
POST /api/agents 作成 { workspace, id?, provider?, model?, start? }
|
|
193
|
+
GET /api/agents/:id/events?limit=300 イベント( ?before=<id> で上方ページング )
|
|
194
|
+
GET /api/agents/:id/branches ブランチ一覧
|
|
195
|
+
GET /api/agents/:id/file?path= テキスト取得
|
|
196
|
+
PUT /api/agents/:id/file?path= 保存 { content, baseContent? } (競合409)
|
|
197
|
+
GET /api/agents/:id/raw?path= メディア生データ
|
|
198
|
+
GET /api/agents/:id/tree ファイルツリー
|
|
199
|
+
POST /api/agents/:id/prompt 送信 { text, start? } → { promptId }
|
|
200
|
+
POST /api/agents/:id/prompt/cancel 取り消し { promptId } (送達済みは409)
|
|
201
|
+
POST /api/agents/:id/goal { text?, status?, verify? }
|
|
202
|
+
POST /api/agents/:id/start|stop|fork|load
|
|
203
|
+
DELETE /api/agents/:id 削除(ログ保持)
|
|
204
|
+
GET /api/metrics RSS / heap / loadavg
|
|
205
|
+
WS /api/ws ライブイベント配信
|
|
206
|
+
```
|
|
207
|
+
|
|
208
|
+
全APIは任意のBearer認証に対応。
|
|
209
|
+
|
|
210
|
+
</details>
|
|
211
|
+
|
|
212
|
+
<details>
|
|
213
|
+
<summary><b>セッションログ(JSONL)</b></summary>
|
|
214
|
+
|
|
215
|
+
`cat`/`jq` で読める追記-only JSONL:
|
|
216
|
+
|
|
217
|
+
```jsonl
|
|
218
|
+
{"v":1,"id":"e1","type":"prompt","data":{"source":"user","text":"..."}}
|
|
219
|
+
{"v":1,"id":"e2","type":"tool_call","data":{"callId":"…","name":"bash","argsRaw":"…"}}
|
|
220
|
+
{"v":1,"id":"e3","type":"tool_result","data":{"callId":"…","ok":true,"durationMs":117}}
|
|
221
|
+
{"v":1,"id":"e4","type":"message","data":{"role":"assistant","content":"…"}}
|
|
222
|
+
```
|
|
223
|
+
|
|
224
|
+
各イベントは `parent` で連結、フォークは分岐点を共有。`goal.md` `memory.md` `todo.md` も同ディレクトリに保存されます。
|
|
225
|
+
|
|
226
|
+
</details>
|
|
227
|
+
|
|
228
|
+
<details>
|
|
229
|
+
<summary><b>開発(リポジトリから)</b></summary>
|
|
230
|
+
|
|
231
|
+
```sh
|
|
232
|
+
pnpm install
|
|
233
|
+
pnpm dev # TSをネイティブ実行
|
|
234
|
+
pnpm dev-web # Vite HMR(別terminal)
|
|
235
|
+
pnpm test # node --test
|
|
236
|
+
pnpm build # tsc + vite build → dist/ + public/
|
|
237
|
+
```
|
|
238
|
+
|
|
239
|
+
構成: `src/master.ts`(起動/cron/config) · `src/agent/`(ループ/ツール) ·
|
|
240
|
+
`src/server/api.ts`(Hono REST+WS) · `frontend/`(SolidJS) · `test/`(node:test)
|
|
241
|
+
|
|
242
|
+
</details>
|
|
243
|
+
|
|
244
|
+
---
|
|
245
|
+
|
|
246
|
+
## License
|
|
247
|
+
|
|
248
|
+
AGPL-3.0-or-later — [LICENSE](LICENSE)
|