min-agent 0.2.1 → 0.3.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 +146 -18
- package/dist/agent.js +293 -408
- package/dist/assistant-stream.js +11 -7
- package/dist/cli.js +397 -139
- package/dist/clipboard.js +59 -23
- package/dist/code-mode.js +3 -3
- package/dist/compaction.js +182 -81
- package/dist/config.js +186 -35
- package/dist/confirm.js +55 -6
- package/dist/context-window.js +67 -54
- package/dist/doom-loop.js +19 -12
- package/dist/http.js +119 -0
- package/dist/instructions.js +51 -33
- package/dist/logger.js +66 -0
- package/dist/markdown.js +3 -44
- package/dist/mcp.js +547 -100
- package/dist/memory.js +48 -6
- package/dist/output.js +36 -27
- package/dist/paste-handler.js +3 -3
- package/dist/plugins.js +33 -6
- package/dist/pricing.js +119 -0
- package/dist/provider.js +17 -15
- package/dist/serve.js +658 -369
- package/dist/sessions.js +151 -13
- package/dist/skills.js +466 -76
- package/dist/synthetic.js +7 -0
- package/dist/title-gen.js +2 -1
- package/dist/tool-display.js +173 -0
- package/dist/tool-output.js +54 -45
- package/dist/tools/apply_patch.js +191 -0
- package/dist/tools/backend.js +61 -0
- package/dist/tools/bash.js +147 -70
- package/dist/tools/code_search.js +6 -5
- package/dist/tools/edit.js +23 -7
- package/dist/tools/explore.js +80 -12
- package/dist/tools/glob.js +3 -3
- package/dist/tools/grep.js +146 -14
- package/dist/tools/index.js +7 -7
- package/dist/tools/question.js +4 -22
- package/dist/tools/read.js +71 -11
- package/dist/tools/task.js +33 -20
- package/dist/tools/todo.js +83 -73
- package/dist/tools/web_fetch.js +150 -46
- package/dist/tools/web_search.js +706 -28
- package/dist/tools/write.js +13 -7
- package/dist/tui/App.js +40 -6
- package/dist/tui/ConfirmBar.js +24 -3
- package/dist/tui/InputBar.js +390 -45
- package/dist/tui/MessageList.js +533 -20
- package/dist/tui/ModelPicker.js +108 -0
- package/dist/tui/QuestionBar.js +104 -0
- package/dist/tui/StatusBar.js +19 -11
- package/dist/tui/agent-runner.js +103 -0
- package/dist/tui/caret-pos.js +134 -0
- package/dist/tui/caret.js +69 -0
- package/dist/tui/diff-view.js +61 -0
- package/dist/tui/drag-state.js +44 -0
- package/dist/tui/index.js +153 -24
- package/dist/tui/input-history.js +44 -0
- package/dist/tui/layout.js +17 -0
- package/dist/tui/mouse.js +46 -0
- package/dist/tui/selection.js +134 -0
- package/dist/tui/slash-commands.js +90 -0
- package/dist/tui/slash-handler.js +370 -0
- package/dist/tui/text-width.js +91 -0
- package/dist/tui/theme.js +12 -0
- package/dist/tui/undo-stack.js +14 -0
- package/dist/tui/use-sgr-mouse.js +27 -0
- package/dist/tui-chat.js +111 -331
- package/dist/updater.js +57 -0
- package/docs/API.md +160 -14
- package/docs/superpowers/plans/2026-08-16-batch1-tui-improvements.md +1510 -0
- package/docs/superpowers/plans/2026-08-16-batch2-cli-tools-api.md +2105 -0
- package/docs/superpowers/plans/2026-08-16-batch3-config-engineering.md +1595 -0
- package/docs/superpowers/plans/2026-08-16-input-caret.md +782 -0
- package/docs/superpowers/specs/2026-08-16-batch1-tui-improvements-design.md +183 -0
- package/docs/superpowers/specs/2026-08-16-batch2-cli-tools-api-design.md +220 -0
- package/docs/superpowers/specs/2026-08-16-batch3-config-engineering-design.md +196 -0
- package/docs/superpowers/specs/2026-08-16-input-caret-design.md +63 -0
- package/docs/superpowers/specs/2026-08-17-mouse-selection-design.md +116 -0
- package/package.json +7 -8
package/docs/API.md
CHANGED
|
@@ -16,6 +16,12 @@ min-agent serve --host 0.0.0.0 --port 3000
|
|
|
16
16
|
| `MIN_AGENT_SERVE_TOKEN` | Bearer token 鉴权 |
|
|
17
17
|
| `MIN_AGENT_SERVE_CORS` | 设为 `1` 启用 CORS |
|
|
18
18
|
|
|
19
|
+
> 安全:当监听地址不是 loopback(`127.0.0.1`/`::1`/`localhost`)时,必须设置 `MIN_AGENT_SERVE_TOKEN`,否则服务拒绝启动。`/v1/chat`、`/v1/code` 与 `/v1/paste` 最多支持 8 个并发请求,超出返回 `429`。
|
|
20
|
+
>
|
|
21
|
+
> CORS 未设置 token 时仅允许 localhost Origin(无 Origin 头的请求不受限);非 localhost Origin 返回 `403 origin_not_allowed`。设置 `MIN_AGENT_SERVE_TOKEN` 后不受 Origin 限制。
|
|
22
|
+
>
|
|
23
|
+
> 会话 ID 仅接受 `[A-Za-z0-9_-]+`,非法 ID 一律返回 404/400,防止路径穿越。
|
|
24
|
+
|
|
19
25
|
---
|
|
20
26
|
|
|
21
27
|
## 端点一览
|
|
@@ -41,8 +47,18 @@ min-agent serve --host 0.0.0.0 --port 3000
|
|
|
41
47
|
| GET | `/v1/mcp` | MCP 状态 |
|
|
42
48
|
| POST | `/v1/mcp` | 添加 MCP 服务器 |
|
|
43
49
|
| DELETE | `/v1/mcp/:name` | 删除 MCP 服务器 |
|
|
44
|
-
| GET | `/v1/skills` |
|
|
50
|
+
| GET | `/v1/skills` | 技能列表(含启用状态) |
|
|
51
|
+
| GET | `/v1/skills/:name` | 技能详情(含正文) |
|
|
52
|
+
| POST | `/v1/skills/reload` | 重新扫描技能目录 |
|
|
45
53
|
| GET | `/v1/rules` | 已加载规则 |
|
|
54
|
+
| GET | `/v1/sessions/:id` | 会话详情 |
|
|
55
|
+
| POST | `/v1/sessions/:id/rename` | 重命名会话 |
|
|
56
|
+
| POST | `/v1/chat/undo` | 撤销最后一轮 |
|
|
57
|
+
| POST | `/v1/skills/:name/enable` | 启用技能 |
|
|
58
|
+
| POST | `/v1/skills/:name/disable` | 禁用技能 |
|
|
59
|
+
| POST | `/v1/mcp/:name/enable` | 启用 MCP 服务器 |
|
|
60
|
+
| POST | `/v1/mcp/:name/disable` | 禁用 MCP 服务器 |
|
|
61
|
+
| GET | `/v1/cost` | 模型价格与成本估算 |
|
|
46
62
|
|
|
47
63
|
---
|
|
48
64
|
|
|
@@ -97,9 +113,13 @@ min-agent serve --host 0.0.0.0 --port 3000
|
|
|
97
113
|
| `message` | string | 用户消息(与 `messages` 二选一) |
|
|
98
114
|
| `messages` | array | 完整 ModelMessage[] |
|
|
99
115
|
| `model` | string | 覆盖模型 |
|
|
116
|
+
| `provider` | string | 指定 provider(默认 activeProvider) |
|
|
100
117
|
| `stream` | boolean | SSE 流式 |
|
|
101
118
|
| `session_id` | string | 恢复会话 |
|
|
102
119
|
| `images` | string[] | 本地图片路径 |
|
|
120
|
+
| `temperature` | number | 采样温度(透传模型 API) |
|
|
121
|
+
| `maxTokens` | number | 最大输出 token 数 |
|
|
122
|
+
| `topP` | number | 核采样参数 |
|
|
103
123
|
|
|
104
124
|
### 非流式响应
|
|
105
125
|
|
|
@@ -127,7 +147,7 @@ min-agent serve --host 0.0.0.0 --port 3000
|
|
|
127
147
|
| `tool_result` | name, output | 工具返回 |
|
|
128
148
|
| `compaction` | line | 压缩进度 |
|
|
129
149
|
| `error` | message | 错误 |
|
|
130
|
-
| `done` | step_count, usage, messages, session_id | 结束 |
|
|
150
|
+
| `done` | step_count, usage, has_error, aborted, max_steps_reached, budget_exceeded, messages, session_id | 结束 |
|
|
131
151
|
| `fatal` | message | 致命错误 |
|
|
132
152
|
|
|
133
153
|
---
|
|
@@ -153,8 +173,19 @@ Code 模式对话(项目感知 prompt + explore 工具)。请求体与 `/v1/
|
|
|
153
173
|
| `mime_type` | string | MIME 类型(默认 `image/png`) |
|
|
154
174
|
| `message` | string | 文本 prompt |
|
|
155
175
|
| `model` | string | 覆盖模型 |
|
|
176
|
+
| `provider` | string | 指定 provider(默认 activeProvider) |
|
|
156
177
|
| `session_id` | string | 追加到会话 |
|
|
157
178
|
| `stream` | boolean | SSE 流式 |
|
|
179
|
+
| `code` | boolean | 使用 code 模式(项目感知) |
|
|
180
|
+
| `temperature` | number | 采样温度 |
|
|
181
|
+
| `maxTokens` | number | 最大输出 token 数 |
|
|
182
|
+
| `topP` | number | 核采样参数 |
|
|
183
|
+
|
|
184
|
+
`stream: true` 时 SSE 事件与 `/v1/chat` 一致(含 `X-Accel-Buffering: no` 响应头、`done` 事件的 usage/has_error/aborted/max_steps_reached/messages 字段);非流式响应与 `/v1/chat` 非流式响应结构一致。
|
|
185
|
+
|
|
186
|
+
`session_id` 不存在时返回 `404 session_not_found`(与 `/v1/chat` 一致)。
|
|
187
|
+
|
|
188
|
+
`code: true` 时非流式响应额外包含 `mode: "code"` 与 `project` 字段。
|
|
158
189
|
|
|
159
190
|
---
|
|
160
191
|
|
|
@@ -167,6 +198,111 @@ Code 模式对话(项目感知 prompt + explore 工具)。请求体与 `/v1/
|
|
|
167
198
|
{ "ok": true, "compacted": true, "message_count": 5 }
|
|
168
199
|
```
|
|
169
200
|
|
|
201
|
+
## `GET /v1/sessions/:id`
|
|
202
|
+
|
|
203
|
+
```json
|
|
204
|
+
{ "session": { "meta": { "id": "abc", "title": "...", ... }, "messages": [...] } }
|
|
205
|
+
```
|
|
206
|
+
|
|
207
|
+
## `POST /v1/sessions/:id/rename`
|
|
208
|
+
|
|
209
|
+
```json
|
|
210
|
+
// 请求
|
|
211
|
+
{ "title": "new title" }
|
|
212
|
+
// 响应
|
|
213
|
+
{ "ok": true, "session_id": "abc", "title": "new title" }
|
|
214
|
+
```
|
|
215
|
+
|
|
216
|
+
## `POST /v1/chat/undo`
|
|
217
|
+
|
|
218
|
+
```json
|
|
219
|
+
// 请求
|
|
220
|
+
{ "session_id": "abc123" }
|
|
221
|
+
// 响应
|
|
222
|
+
{ "ok": true, "message_count": 3, "messages": [...] }
|
|
223
|
+
```
|
|
224
|
+
|
|
225
|
+
截断到最后一条 user 消息(保留该消息,删除其后的 assistant/tool 消息)。
|
|
226
|
+
|
|
227
|
+
## `GET /v1/skills`
|
|
228
|
+
|
|
229
|
+
```json
|
|
230
|
+
{
|
|
231
|
+
"count": 2,
|
|
232
|
+
"enabled_count": 1,
|
|
233
|
+
"stale_disabled": ["removed-skill"],
|
|
234
|
+
"skills": [
|
|
235
|
+
{
|
|
236
|
+
"name": "my-skill",
|
|
237
|
+
"description": "What it does",
|
|
238
|
+
"location": "/path/.min-agent/skills/my-skill/SKILL.md",
|
|
239
|
+
"enabled": true,
|
|
240
|
+
"version": "1.0.0",
|
|
241
|
+
"allowed_tools": ["read"],
|
|
242
|
+
"requires_bins": ["some-cli"]
|
|
243
|
+
}
|
|
244
|
+
]
|
|
245
|
+
}
|
|
246
|
+
```
|
|
247
|
+
|
|
248
|
+
禁用项额外带 `disabled_scope`(`global` 或 `project`)。
|
|
249
|
+
`stale_disabled` 列出两个范围的 `disabledSkills` 中没有对应技能的名字(拼写错误或技能已删除)。
|
|
250
|
+
|
|
251
|
+
## `GET /v1/skills/:name`
|
|
252
|
+
|
|
253
|
+
返回单个技能,附带 `content`(SKILL.md 正文)。技能不存在返回 404 `{ "error": "skill_not_found", "available": [...] }`。
|
|
254
|
+
|
|
255
|
+
## `POST /v1/skills/reload`
|
|
256
|
+
|
|
257
|
+
重新扫描技能目录(新增/修改 SKILL.md 后无需重启服务)。
|
|
258
|
+
|
|
259
|
+
```json
|
|
260
|
+
{ "ok": true, "count": 2, "enabled_count": 1, "stale_disabled": [], "skills": [...] }
|
|
261
|
+
```
|
|
262
|
+
|
|
263
|
+
## `POST /v1/skills/:name/enable` / `/disable`
|
|
264
|
+
|
|
265
|
+
请求体可选:
|
|
266
|
+
|
|
267
|
+
```json
|
|
268
|
+
{ "scope": "project" }
|
|
269
|
+
```
|
|
270
|
+
|
|
271
|
+
`scope` 为 `global`(默认,写 `~/.min-agent/config.json`)或 `project`(写 `.min-agent/config.json`)。项目范围优先于全局,因此全局禁用的技能可以在单个项目里用 `{"scope":"project"}` 的 enable 重新启用。
|
|
272
|
+
|
|
273
|
+
```json
|
|
274
|
+
{ "ok": true, "name": "my-skill", "enabled": false, "scope": "project" }
|
|
275
|
+
```
|
|
276
|
+
|
|
277
|
+
若改动被另一范围覆盖,响应带 `blocked_by`(`global` 或 `project`),`enabled` 反映实际生效状态。
|
|
278
|
+
技能不存在返回 404 `{ "error": "skill_not_found", "available": [...] }`;`scope` 非法返回 400 `{ "error": "invalid_scope" }`。
|
|
279
|
+
|
|
280
|
+
## `POST /v1/mcp/:name/enable` / `/disable`
|
|
281
|
+
|
|
282
|
+
请求体可选:
|
|
283
|
+
|
|
284
|
+
```json
|
|
285
|
+
{ "scope": "project" }
|
|
286
|
+
```
|
|
287
|
+
|
|
288
|
+
`scope` 为 `global`(默认,写 `~/.min-agent/mcp.json`)或 `project`(写 `.min-agent/mcp.json`)。服务器在另一范围时返回 404 并带 `hint`。
|
|
289
|
+
|
|
290
|
+
```json
|
|
291
|
+
{ "ok": true, "name": "fs", "enabled": true, "scope": "global", "connected": true }
|
|
292
|
+
```
|
|
293
|
+
|
|
294
|
+
## `GET /v1/cost`
|
|
295
|
+
|
|
296
|
+
| 参数 | 说明 |
|
|
297
|
+
|------|------|
|
|
298
|
+
| `model` | 模型 ID(默认配置默认模型) |
|
|
299
|
+
| `input` | 输入 token 数 |
|
|
300
|
+
| `output` | 输出 token 数 |
|
|
301
|
+
|
|
302
|
+
```json
|
|
303
|
+
{ "model": "gpt-4o", "price": { "inputPerMillion": 2.5, "outputPerMillion": 10 }, "cost_usd": 7.5 }
|
|
304
|
+
```
|
|
305
|
+
|
|
170
306
|
## `POST /v1/chat/reload-instructions`
|
|
171
307
|
|
|
172
308
|
```json
|
|
@@ -221,36 +357,45 @@ Code 模式对话(项目感知 prompt + explore 工具)。请求体与 `/v1/
|
|
|
221
357
|
## `GET /v1/mcp`
|
|
222
358
|
|
|
223
359
|
```json
|
|
224
|
-
{
|
|
360
|
+
{
|
|
361
|
+
"servers": {
|
|
362
|
+
"filesystem": { "connected": true, "enabled": true, "tools": ["read_file", "write_file"] },
|
|
363
|
+
"broken": { "connected": false, "enabled": true, "tools": [], "error": "connection timed out after 30000ms" }
|
|
364
|
+
}
|
|
365
|
+
}
|
|
225
366
|
```
|
|
226
367
|
|
|
227
368
|
## `POST /v1/mcp`
|
|
228
369
|
|
|
370
|
+
添加或覆盖一个 MCP 服务器。保存后立即重连(`sync`),响应带实时状态。
|
|
371
|
+
|
|
229
372
|
```json
|
|
230
373
|
// 本地 stdio
|
|
231
374
|
{ "name": "fs", "command": ["npx", "-y", "@modelcontextprotocol/server-filesystem", "/tmp"] }
|
|
375
|
+
// 本地 stdio(字符串 + args)
|
|
376
|
+
{ "name": "fs", "command": "npx", "args": ["-y", "@modelcontextprotocol/server-filesystem", "/tmp"] }
|
|
232
377
|
// 远程
|
|
233
|
-
{ "name": "remote", "url": "https://mcp.example.com", "token": "xxx" }
|
|
378
|
+
{ "name": "remote", "url": "https://mcp.example.com", "token": "xxx", "remoteTransport": "sse" }
|
|
379
|
+
// 项目范围(写 .min-agent/mcp.json)
|
|
380
|
+
{ "name": "fs", "command": ["..."], "project": true }
|
|
234
381
|
```
|
|
235
382
|
|
|
383
|
+
支持的字段:`name`(必填)、`command`(数组或字符串)、`args`、`url`、`token`、`headers`、`environment`、`remoteTransport`(`streamable-http`/`sse`/`auto`,非法值返回 400)、`timeout`、`connectTimeout`、`callTimeout`、`enabled`、`project`。
|
|
384
|
+
|
|
236
385
|
```json
|
|
237
|
-
{ "ok": true, "name": "fs" }
|
|
386
|
+
{ "ok": true, "name": "fs", "scope": "global", "connected": true, "tools": ["read_file"] }
|
|
238
387
|
```
|
|
239
388
|
|
|
240
389
|
## `DELETE /v1/mcp/:name`
|
|
241
390
|
|
|
391
|
+
`?project=1` 删除项目范围(`.min-agent/mcp.json`)的条目;默认全局。服务器在另一范围时返回 404 并带 `hint`。
|
|
392
|
+
|
|
242
393
|
```json
|
|
243
|
-
{ "ok": true, "deleted": "fs" }
|
|
394
|
+
{ "ok": true, "deleted": "fs", "scope": "global" }
|
|
244
395
|
```
|
|
245
396
|
|
|
246
397
|
---
|
|
247
398
|
|
|
248
|
-
## `GET /v1/skills`
|
|
249
|
-
|
|
250
|
-
```json
|
|
251
|
-
{ "skills": [{ "name": "git-workflow", "description": "...", "location": "..." }] }
|
|
252
|
-
```
|
|
253
|
-
|
|
254
399
|
## `GET /v1/rules`
|
|
255
400
|
|
|
256
401
|
```json
|
|
@@ -263,10 +408,11 @@ Code 模式对话(项目感知 prompt + explore 工具)。请求体与 `/v1/
|
|
|
263
408
|
|
|
264
409
|
| 状态 | 说明 |
|
|
265
410
|
|------|------|
|
|
266
|
-
| 400 | 请求参数错误 |
|
|
411
|
+
| 400 | 请求参数错误 / JSON 解析失败(`invalid_json`) |
|
|
267
412
|
| 401 | 未授权 |
|
|
268
413
|
| 404 | 资源不存在 |
|
|
269
|
-
|
|
|
414
|
+
| 408 | 请求体读取超时(`payload_timeout`,30s) |
|
|
415
|
+
| 413 | 请求体过大(>2MB,`payload_too_large`) |
|
|
270
416
|
| 415 | Content-Type 不是 JSON |
|
|
271
417
|
| 500 | 内部错误 |
|
|
272
418
|
|