@armadra/agent 0.7.6 → 0.8.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/CHANGELOG.md +13 -0
- package/CHANGELOG.zh-CN.md +13 -0
- package/dist/ai/apis/chatgpt-backend.d.ts +3 -1
- package/dist/ai/apis/chatgpt-backend.js +10 -1
- package/dist/bundle/ama.cjs +1018 -336
- package/dist/drivers/acp/driver.d.ts +22 -1
- package/dist/drivers/acp/driver.js +59 -5
- package/dist/drivers/agents.js +3 -0
- package/dist/drivers/catalog.d.ts +2 -0
- package/dist/drivers/catalog.js +94 -4
- package/dist/drivers/native/claude-normalize.d.ts +8 -0
- package/dist/drivers/native/claude-normalize.js +27 -0
- package/dist/drivers/native/claude-stream.js +16 -1
- package/dist/drivers/native/codex-app-server.js +4 -2
- package/dist/drivers/native/oneshot.js +12 -2
- package/dist/drivers/native/pi-gate.d.ts +19 -0
- package/dist/drivers/native/pi-gate.js +39 -0
- package/dist/drivers/native/pi-rpc.d.ts +29 -0
- package/dist/drivers/native/pi-rpc.js +483 -0
- package/dist/drivers/runner.js +1 -0
- package/dist/drivers/types.d.ts +1 -1
- package/dist/i18n/catalog.d.ts +3 -0
- package/dist/i18n/messages/auth.d.ts +2 -0
- package/dist/i18n/messages/auth.js +2 -0
- package/dist/i18n/messages/drivers.d.ts +4 -0
- package/dist/i18n/messages/drivers.js +4 -0
- package/docs/agents.md +56 -11
- package/docs/en/providers.md +7 -6
- package/docs/providers.md +7 -6
- package/package.json +1 -1
package/docs/agents.md
CHANGED
|
@@ -222,15 +222,48 @@ ama 能以各 CLI 自己的账户、模型与权限策略驱动外部编码 Agen
|
|
|
222
222
|
|
|
223
223
|
每个 Agent 有一条候选链,按优先级取第一个已安装、且支持当前模式的:原生 ACP > 已装的 ACP 适配器 > 原生结构化协议 > 一次性打印模式。
|
|
224
224
|
|
|
225
|
-
| `agent`
|
|
226
|
-
|
|
|
227
|
-
| `claude`
|
|
228
|
-
| `codex`
|
|
229
|
-
| `
|
|
230
|
-
| `
|
|
231
|
-
| `
|
|
232
|
-
| `
|
|
233
|
-
| `
|
|
225
|
+
| `agent` | 候选(优先级从高到低) | 已验证版本 |
|
|
226
|
+
| ---------------- | ------------------------------------------------------------------------------------------------------------------- | ------------------------------------ |
|
|
227
|
+
| `claude` | `claude-agent-acp`(ACP 适配器)→ `claude -p` stream-json(原生)→ `claude -p --output-format json`(一次性,只读) | 适配器 0.89.x;stream-json 2.1.x |
|
|
228
|
+
| `codex` | `codex-acp`(ACP 适配器)→ `codex app-server`(原生)→ `codex exec --json`(一次性,只读) | 适配器 2.2.x;app-server 0.160–0.162 |
|
|
229
|
+
| `copilot` | `copilot --acp --stdio` | 1.0.95 |
|
|
230
|
+
| `opencode` | `opencode acp` | 1.18.x |
|
|
231
|
+
| `pi` | `pi --mode rpc`(原生;审批经 ama 加载的审批闸扩展,见下) | 1.1.x |
|
|
232
|
+
| `cursor` | `cursor-agent acp`(按官方文档:模式 `agent` / `plan` / `ask`) | 未验证(本机未装) |
|
|
233
|
+
| `gemini` | `gemini --acp` → `gemini -p --output-format stream-json`(一次性,只读) | 未验证 |
|
|
234
|
+
| `qwen` | `qwen --acp`(0.23.x 有不发权限请求的问题,只在 plan 下用) | 未验证 |
|
|
235
|
+
| `kimi` / `goose` | 各自的 ACP 子命令 | 未验证 |
|
|
236
|
+
| `ama` | `ama --mode acp` | 随 ama |
|
|
237
|
+
| `acp:<program>` | 任意 ACP Agent:表里有同名程序就用它的参数,否则不带参数启动 | — |
|
|
238
|
+
|
|
239
|
+
pi 的社区 ACP 适配器 `pi-acp` 不收录:pi 本身没有审批通道,适配器不发 `session/request_permission`,工具会不经人直接执行。
|
|
240
|
+
ama 改为直接驱动 `pi --mode rpc`,并以 `-e` 给这一次运行加载一个最小扩展(写在每个会话自己的临时目录,关会话即删,不碰 pi 的配置):
|
|
241
|
+
只读内置工具(`read` / `grep` / `find` / `ls`)以外的调用都经 RPC 的扩展对话框交给 ama——`plan` / `allowlist` 直接拒绝(并以
|
|
242
|
+
`--tools` 只开只读工具),`auto-edit` 及更宽的模式放行 `edit` / `write`,其余交给人。用户自己的扩展弹出的对话框一律取消、不代答。
|
|
243
|
+
|
|
244
|
+
#### 实测能力矩阵(2026-10-10)
|
|
245
|
+
|
|
246
|
+
每条路径在临时目录各跑两个会话:非 git 目录里两轮「只回 OK」+ 一次触发审批的写文件(`default` 模式);git 目录里长输出时中断,再续一轮。
|
|
247
|
+
模型用各家最便宜的:Claude `haiku`、Codex `gpt-6-luna`、Copilot `gpt-5-mini`、OpenCode `opencode/mimo-v2.6-flash-free`、pi `openai-codex/gpt-6-luna`。
|
|
248
|
+
记录与原始数字见 [benchmarks/external-agents-2026-10.md](benchmarks/external-agents-2026-10.md)。
|
|
249
|
+
|
|
250
|
+
| 路径 | 两轮续聊 | 审批写文件 | 中断后续聊 | 用量 / 上下文 | 非 git 目录 |
|
|
251
|
+
| -------------------------- | -------- | ------------------------------------------------- | ------------- | --------------------------------- | -------------- |
|
|
252
|
+
| Claude stream-json 2.1.295 | 通过 | 通过(`Write` 交人) | 通过(1.9 s) | 美元 + token;上下文(本次新增) | 通过 |
|
|
253
|
+
| claude-agent-acp 0.89.0 | 通过 | 通过 | 通过(2.3 s) | 美元 + token + 上下文 | 通过 |
|
|
254
|
+
| Codex app-server 0.162.1 | 通过 | 通过(命令提权交人) | 通过(2.5 s) | token + 上下文 | 通过 |
|
|
255
|
+
| codex-acp 2.2.2 | 通过 | 未触发:只读沙箱下模型没申请提权,直接报写入被拒 | 通过(2.6 s) | token + 上下文 | 通过 |
|
|
256
|
+
| `codex exec`(一次性) | 通过 | 不支持(只读) | 结束进程 | token | 通过(修复后) |
|
|
257
|
+
| Copilot ACP 1.0.95 | 通过 | 通过 | 通过(4.6 s) | 请求数;token + 上下文 | 通过 |
|
|
258
|
+
| OpenCode ACP 1.18.35 | 通过 | 未触发:OpenCode 自己的权限配置放行编辑,没有问人 | 通过(6.2 s) | token + 上下文(免费模型 0 美元) | 通过 |
|
|
259
|
+
| pi RPC 1.1.0 | 通过 | 通过(经审批闸交人) | 通过(2.7 s) | 美元(pi 按价目估算)+ 上下文 | 通过 |
|
|
260
|
+
| Cursor ACP | — | — | — | — | 未验证 |
|
|
261
|
+
|
|
262
|
+
模式映射按实测写进驱动表:claude-agent-acp 的 `auto-edit` → `acceptEdits`、`full-auto` → `auto`(用户把缺省设成
|
|
263
|
+
`bypassPermissions` 时也会被改回 ama 对应的模式);codex-acp 的 `plan` / `default` → `read-only`、`auto-edit` → `workspace-write`、
|
|
264
|
+
`auto` / `full-auto` → `agent`;Copilot 的模式 id 是 URL(`…/session-modes#agent|plan|autopilot`),`plan` 对 `#plan`、其余对 `#agent`。
|
|
265
|
+
从不映射到放开全部权限的模式(`bypassPermissions`、`agent-full-access`、`autopilot`)。OpenCode 的模式来自用户自己的 agent 配置,
|
|
266
|
+
没有同名模式时按它的缺省运行并提示;没有只读模式时 `plan` 拒绝启动。
|
|
234
267
|
|
|
235
268
|
版本越过已验证区间时仍会启动,但会提示协议可能有变化(Claude 的 stream-json 控制协议不是公开接口,Codex app-server 标为实验)。`/agents` 与 RPC `get_agents` 列出探测结果(只查 PATH 与 `--version`,不联网、不计费;结果缓存在 `<数据目录>/drivers.json`)。
|
|
236
269
|
|
|
@@ -249,7 +282,9 @@ ama 能以各 CLI 自己的账户、模型与权限策略驱动外部编码 Agen
|
|
|
249
282
|
- **前台 / 后台 / 续聊**:与 ama 子会话相同——结果是外部 Agent 的最终文本加工具摘要与修改的文件(≤ 50 KB);
|
|
250
283
|
`background: true` 完成后收到 `<task-notification>`;`task{taskId}` / `task_ctl send` 在同一外部会话里续聊(进程还在就直接
|
|
251
284
|
追加一轮;空闲关闭或被停止过的,以外部会话 id `resume` 重开);`task_ctl stop` 发协议级中断,挂起的审批回「已取消」。
|
|
252
|
-
- **模型**:`agents.<id>.model` 或 `task` 的 `model` 参数原样交给外部 CLI
|
|
285
|
+
- **模型**:`agents.<id>.model` 或 `task` 的 `model` 参数原样交给外部 CLI(原生驱动用各自的 `--model` / `-m`;ACP Agent
|
|
286
|
+
经 category `model` 的会话配置项设置,按值、名称或 `provider/model` 的模型部分匹配,没有匹配时提示并用它的缺省模型);
|
|
287
|
+
`subagents.defaultModel`(ama 的模型)不传。
|
|
253
288
|
- `/agents` 与 RPC `get_agents` 列出类型目录与外部 Agent(`installed` / `version`,会话建立时异步探测并缓存);`/tasks` 查看任务输出、
|
|
254
289
|
停止任务。界面见 [tui.md](tui.md)「子 Agent」。
|
|
255
290
|
- 外部 Agent 自己报告的提示(预算用尽、超时、模式降级、拒答提问等)在交互界面的消息区显示为一行 `[claude · t3] …`,
|
|
@@ -277,6 +312,7 @@ ama 能以各 CLI 自己的账户、模型与权限策略驱动外部编码 Agen
|
|
|
277
312
|
| `auto` | `auto` | `on-request` / `workspace-write` | 同上 |
|
|
278
313
|
| `full-auto` | `auto`(从不给 `bypassPermissions`) | `never` / `workspace-write`(从不给 `danger-full-access`) | 同上 |
|
|
279
314
|
|
|
315
|
+
上表 ACP 一列是缺省规则;模式 id 与 ama 不同名的 Agent 在驱动表里有显式映射(见上文「实测能力矩阵」后的说明)。
|
|
280
316
|
ACP Agent 不给 `modes`、改用 category `mode` 的配置项表达模式时,按上表同一映射在配置项的可选值里找,经 `session/set_config_option` 设置(见 [acp.md](acp.md)「作为客户端」)。
|
|
281
317
|
|
|
282
318
|
一次性打印模式不能审批,只在只读任务下用。
|
|
@@ -320,4 +356,13 @@ CI 不跑真实 CLI。本机已登录 `claude` / `codex` 时:
|
|
|
320
356
|
AMA_E2E_AGENTS=1 pnpm vitest run src/drivers/agents.e2e.test.ts src/agents/external-task.e2e.test.ts
|
|
321
357
|
```
|
|
322
358
|
|
|
323
|
-
驱动层每家两轮「只回 OK」加一次触发审批的写文件(临时目录),会使用你的订阅额度;Claude 跑前后比对 `~/.claude` 下 settings 文件的指纹。`task` 层每家一次写文件(首次确认与写文件审批由测试代替人允许)加一轮 `taskId` 续聊;父会话用 fake
|
|
359
|
+
驱动层每家两轮「只回 OK」加一次触发审批的写文件(临时目录),会使用你的订阅额度;Claude 跑前后比对 `~/.claude` 下 settings 文件的指纹。`task` 层每家一次写文件(首次确认与写文件审批由测试代替人允许)加一轮 `taskId` 续聊;父会话用 fake 供应商。
|
|
360
|
+
|
|
361
|
+
逐条驱动路径实测(上面的能力矩阵)用 `AMA_E2E_AUDIT` 指定 `<agent>/<驱动种类>[@模型]`,强制只走这一条路径:
|
|
362
|
+
|
|
363
|
+
```sh
|
|
364
|
+
AMA_E2E_AUDIT="claude/claude-stream@haiku,codex/oneshot@gpt-6-luna,pi/pi-rpc@openai-codex/gpt-6-luna" \
|
|
365
|
+
AMA_E2E_AUDIT_OUT=/tmp/audit.jsonl pnpm vitest run src/drivers/agents-audit.e2e.test.ts
|
|
366
|
+
```
|
|
367
|
+
|
|
368
|
+
驱动的单元测试用 `test/fixtures/drivers/` 下的录制回放(pi 的两段是 2026-10 实录,其余手写),`task` 层的零费用端到端是 ama 驱动 ama(`src/agents/external-task.test.ts`),都不发起计费请求。
|
package/docs/en/providers.md
CHANGED
|
@@ -182,12 +182,13 @@ ama auth logout chatgpt # siwc revokes the refresh token first, t
|
|
|
182
182
|
|
|
183
183
|
**Error codes** (error messages start with the code; hosts decide by code):
|
|
184
184
|
|
|
185
|
-
| Code
|
|
186
|
-
|
|
|
187
|
-
| `quota_exceeded`
|
|
188
|
-
| `auth_expired`
|
|
189
|
-
| `not_eligible`
|
|
190
|
-
|
|
|
185
|
+
| Code | Source | Handling |
|
|
186
|
+
| ------------------- | ------------------------------------------------------------------------------------------------------------ | ---------------------------------------------------------------------------------------------------------------------------- |
|
|
187
|
+
| `quota_exceeded` | siwc 429 `subscription_sharing_usage_limit_exceeded`; codex 429 `usage_limit_reached` / `usage_not_included` | no retry; carries the reset time and emits `quota_update` |
|
|
188
|
+
| `auth_expired` | a 401 still failing after one refresh, a permanently failed refresh, an entry marked `needsLogin` | no retry; run `ama auth login chatgpt` again |
|
|
189
|
+
| `not_eligible` | siwc 403 `subscription_sharing_user_not_eligible` | no retry, no re-login; see troubleshooting below |
|
|
190
|
+
| `model_unavailable` | codex 400 "model is not supported when using Codex with a ChatGPT account" | no retry; the backend's model list changed (stale discovery cache): run `ama models discover chatgpt` and pick another model |
|
|
191
|
+
| (as is) | 503 and similar | the session layer's existing backoff retries |
|
|
191
192
|
|
|
192
193
|
**Troubleshooting `not_eligible`**: the account cannot share its plan usage with ama. Possible causes: the plan (sharing is offered to Plus / Pro only); a workspace account (Team / Enterprise / Edu may not offer it); a region restriction or a preview that has not rolled out yet — **the most likely cause when a Pro account still gets this error**. You can sign in with `ama auth login chatgpt --flavor codex` instead. A successful siwc login only means authorization passed; whether plan usage can be shared is only confirmed on the first request.
|
|
193
194
|
|
package/docs/providers.md
CHANGED
|
@@ -223,12 +223,13 @@ developer 消息(前缀依然稳定)。compat `toolsInNamespace: true` 时
|
|
|
223
223
|
|
|
224
224
|
**错误码**(错误文案以码开头,宿主按码判断):
|
|
225
225
|
|
|
226
|
-
| 码
|
|
227
|
-
|
|
|
228
|
-
| `quota_exceeded`
|
|
229
|
-
| `auth_expired`
|
|
230
|
-
| `not_eligible`
|
|
231
|
-
|
|
|
226
|
+
| 码 | 来源 | 处理 |
|
|
227
|
+
| ------------------- | ------------------------------------------------------------------------------------------------------------ | --------------------------------------------------------------------------------------- |
|
|
228
|
+
| `quota_exceeded` | siwc 429 `subscription_sharing_usage_limit_exceeded`;codex 429 `usage_limit_reached` / `usage_not_included` | 不重试;附重置时间并发 `quota_update` |
|
|
229
|
+
| `auth_expired` | 401 刷新一次仍失败、刷新永久失败、条目 `needsLogin` | 不重试;重新 `ama auth login chatgpt` |
|
|
230
|
+
| `not_eligible` | siwc 403 `subscription_sharing_user_not_eligible` | 不重试、不重登;排查见下 |
|
|
231
|
+
| `model_unavailable` | codex 400「model is not supported when using Codex with a ChatGPT account」 | 不重试;后端模型表变了(发现缓存过期),运行 `ama models discover chatgpt` 刷新后换模型 |
|
|
232
|
+
| (原样) | 503 等 | 走会话层现有的退避重试 |
|
|
232
233
|
|
|
233
234
|
**`not_eligible` 排查**:账户不能把套餐额度共享给 ama。可能的原因:账户套餐(额度共享只对 Plus / Pro 开放);工作空间
|
|
234
235
|
账户(Team / Enterprise / Edu 可能未开放);地区受限或预览期尚未开放——**Pro 账户仍报此错时最可能是这一条**。可以改用
|