@armadra/agent 0.4.0 → 0.5.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 +174 -1
- package/README.md +201 -82
- package/THIRD_PARTY_NOTICES.md +34 -0
- package/dist/acp.d.ts +18 -0
- package/dist/acp.js +19 -0
- package/dist/agent/limits.d.ts +38 -0
- package/dist/agent/limits.js +127 -0
- package/dist/agent/loop-guard.d.ts +38 -0
- package/dist/agent/loop-guard.js +95 -0
- package/dist/agent/loop.d.ts +4 -0
- package/dist/agent/loop.js +7 -0
- package/dist/agent/prompt-rules.d.ts +12 -0
- package/dist/agent/prompt-rules.js +18 -0
- package/dist/agent/reminders.d.ts +59 -0
- package/dist/agent/reminders.js +327 -0
- package/dist/agent/session-cache.d.ts +5 -0
- package/dist/agent/session-cache.js +17 -1
- package/dist/agent/session-classifier.d.ts +1 -1
- package/dist/agent/session-classifier.js +3 -1
- package/dist/agent/session-compaction.d.ts +35 -6
- package/dist/agent/session-compaction.js +157 -31
- package/dist/agent/session-core.d.ts +27 -1
- package/dist/agent/session-extensions.d.ts +61 -0
- package/dist/agent/session-extensions.js +129 -0
- package/dist/agent/session-images.d.ts +23 -0
- package/dist/agent/session-images.js +97 -0
- package/dist/agent/session-plan.d.ts +21 -0
- package/dist/agent/session-plan.js +524 -0
- package/dist/agent/session-rewind.d.ts +81 -0
- package/dist/agent/session-rewind.js +354 -0
- package/dist/agent/session-run.d.ts +28 -1
- package/dist/agent/session-run.js +157 -6
- package/dist/agent/session-settings.d.ts +49 -0
- package/dist/agent/session-settings.js +95 -0
- package/dist/agent/session-subagent.d.ts +36 -24
- package/dist/agent/session-subagent.js +259 -129
- package/dist/agent/session-sync.d.ts +10 -3
- package/dist/agent/session-sync.js +37 -8
- package/dist/agent/session-telemetry.d.ts +39 -0
- package/dist/agent/session-telemetry.js +231 -0
- package/dist/agent/session-tools.js +40 -1
- package/dist/agent/session.d.ts +30 -29
- package/dist/agent/session.js +79 -123
- package/dist/agent/subagent-registry.d.ts +91 -0
- package/dist/agent/subagent-registry.js +494 -0
- package/dist/agent/system-prompt.d.ts +6 -3
- package/dist/agent/system-prompt.js +7 -2
- package/dist/agent/tool-runner.d.ts +8 -1
- package/dist/agent/tool-runner.js +57 -4
- package/dist/agent/types-w5.d.ts +192 -0
- package/dist/agent/types-w5.js +10 -0
- package/dist/agent/types.d.ts +47 -4
- package/dist/agent/types.js +2 -0
- package/dist/agent/worktree.d.ts +36 -0
- package/dist/agent/worktree.js +86 -0
- package/dist/agents/builtin.d.ts +14 -0
- package/dist/agents/builtin.js +39 -0
- package/dist/agents/catalog.d.ts +43 -0
- package/dist/agents/catalog.js +82 -0
- package/dist/agents/discover.d.ts +35 -0
- package/dist/agents/discover.js +83 -0
- package/dist/agents/external.d.ts +82 -0
- package/dist/agents/external.js +326 -0
- package/dist/agents/parse.d.ts +18 -0
- package/dist/agents/parse.js +116 -0
- package/dist/agents/result.d.ts +32 -0
- package/dist/agents/result.js +67 -0
- package/dist/agents/task-control.d.ts +17 -0
- package/dist/agents/task-control.js +17 -0
- package/dist/agents/task-record.d.ts +78 -0
- package/dist/agents/task-record.js +141 -0
- package/dist/agents/types.d.ts +46 -0
- package/dist/agents/types.js +8 -0
- package/dist/ai/apis/anthropic-compat.d.ts +36 -0
- package/dist/ai/apis/anthropic-compat.js +92 -0
- package/dist/ai/apis/anthropic-request.d.ts +7 -6
- package/dist/ai/apis/anthropic-request.js +10 -28
- package/dist/ai/apis/cache-params.d.ts +11 -2
- package/dist/ai/apis/cache-params.js +25 -6
- package/dist/ai/apis/openai-compat.d.ts +4 -1
- package/dist/ai/apis/openai-compat.js +8 -1
- package/dist/ai/image-limits.d.ts +45 -0
- package/dist/ai/image-limits.js +68 -0
- package/dist/ai/providers/builtin.d.ts +18 -6
- package/dist/ai/providers/builtin.js +135 -6
- package/dist/ai/providers/catalog-data.js +17 -13
- package/dist/ai/providers/catalog.d.ts +60 -7
- package/dist/ai/providers/catalog.js +197 -38
- package/dist/ai/providers/channels.d.ts +33 -3
- package/dist/ai/providers/channels.js +108 -7
- package/dist/ai/providers/enrich.d.ts +6 -3
- package/dist/ai/providers/enrich.js +19 -4
- package/dist/ai/providers/models-dev-cache.d.ts +28 -24
- package/dist/ai/providers/models-dev-cache.js +92 -78
- package/dist/ai/providers/models-dev-data.d.ts +7 -0
- package/dist/ai/providers/models-dev-data.js +32 -0
- package/dist/ai/providers/models-dev-snapshot.d.ts +50 -0
- package/dist/ai/providers/models-dev-snapshot.js +137 -0
- package/dist/ai/providers/models-dev.d.ts +51 -10
- package/dist/ai/providers/models-dev.js +132 -39
- package/dist/ai/providers/registry.d.ts +20 -10
- package/dist/ai/providers/registry.js +82 -43
- package/dist/ai/types.d.ts +28 -2
- package/dist/ai/types.js +5 -0
- package/dist/bundle/ama.cjs +36203 -20499
- package/dist/checkpoints/backend.d.ts +61 -0
- package/dist/checkpoints/backend.js +135 -0
- package/dist/checkpoints/blobs.d.ts +60 -0
- package/dist/checkpoints/blobs.js +203 -0
- package/dist/checkpoints/gc.d.ts +47 -0
- package/dist/checkpoints/gc.js +144 -0
- package/dist/checkpoints/git-head.d.ts +15 -0
- package/dist/checkpoints/git-head.js +89 -0
- package/dist/checkpoints/index.d.ts +17 -0
- package/dist/checkpoints/index.js +17 -0
- package/dist/checkpoints/replay.d.ts +48 -0
- package/dist/checkpoints/replay.js +154 -0
- package/dist/checkpoints/restore.d.ts +86 -0
- package/dist/checkpoints/restore.js +263 -0
- package/dist/checkpoints/settings.d.ts +14 -0
- package/dist/checkpoints/settings.js +23 -0
- package/dist/checkpoints/shadow-git.d.ts +108 -0
- package/dist/checkpoints/shadow-git.js +491 -0
- package/dist/checkpoints/shadow-restore.d.ts +25 -0
- package/dist/checkpoints/shadow-restore.js +128 -0
- package/dist/checkpoints/tracker.d.ts +64 -0
- package/dist/checkpoints/tracker.js +192 -0
- package/dist/checkpoints/types.d.ts +99 -0
- package/dist/checkpoints/types.js +12 -0
- package/dist/cli/args.d.ts +8 -4
- package/dist/cli/args.js +17 -97
- package/dist/cli/bootstrap.js +13 -1
- package/dist/cli/codemode-notice.d.ts +3 -2
- package/dist/cli/codemode-notice.js +3 -2
- package/dist/cli/compose-agents.d.ts +27 -0
- package/dist/cli/compose-agents.js +111 -0
- package/dist/cli/compose-extensions.d.ts +29 -0
- package/dist/cli/compose-extensions.js +44 -0
- package/dist/cli/compose-session.d.ts +3 -0
- package/dist/cli/compose-session.js +47 -4
- package/dist/cli/compose.d.ts +3 -0
- package/dist/cli/compose.js +33 -6
- package/dist/cli/deps.d.ts +6 -0
- package/dist/cli/exit-codes.d.ts +10 -0
- package/dist/cli/exit-codes.js +12 -0
- package/dist/cli/help-text.d.ts +4 -0
- package/dist/cli/help-text.js +102 -0
- package/dist/cli/startup-screen.js +5 -3
- package/dist/cli/startup-steps.js +7 -1
- package/dist/cli/subcommands/config.d.ts +4 -1
- package/dist/cli/subcommands/config.js +17 -6
- package/dist/cli/subcommands/doctor.js +21 -0
- package/dist/cli/subcommands/models-discover.js +5 -6
- package/dist/cli/subcommands/models.d.ts +2 -0
- package/dist/cli/subcommands/models.js +33 -14
- package/dist/cli/subcommands/providers.js +5 -6
- package/dist/cli/subcommands/sessions.d.ts +3 -1
- package/dist/cli/subcommands/sessions.js +36 -2
- package/dist/codemode/capability.d.ts +24 -7
- package/dist/codemode/capability.js +38 -10
- package/dist/codemode/host-side.d.ts +14 -0
- package/dist/codemode/host-side.js +24 -1
- package/dist/codemode/tool.d.ts +1 -1
- package/dist/codemode/tool.js +6 -4
- package/dist/compaction/breaker.d.ts +25 -9
- package/dist/compaction/breaker.js +47 -17
- package/dist/compaction/estimate.d.ts +11 -3
- package/dist/compaction/estimate.js +64 -22
- package/dist/compaction/image-budget.d.ts +45 -0
- package/dist/compaction/image-budget.js +115 -0
- package/dist/compaction/post-compact.d.ts +38 -0
- package/dist/compaction/post-compact.js +152 -0
- package/dist/compaction/protect.d.ts +27 -0
- package/dist/compaction/protect.js +56 -0
- package/dist/compaction/prune-tier.d.ts +58 -12
- package/dist/compaction/prune-tier.js +120 -54
- package/dist/compaction/summarize-tier.d.ts +23 -4
- package/dist/compaction/summarize-tier.js +100 -29
- package/dist/config/checker.d.ts +28 -0
- package/dist/config/checker.js +97 -0
- package/dist/config/json-schema.js +63 -2
- package/dist/config/key-docs.js +72 -3
- package/dist/config/merge.d.ts +5 -3
- package/dist/config/merge.js +81 -7
- package/dist/config/profile.d.ts +2 -0
- package/dist/config/profile.js +2 -0
- package/dist/config/schema-w5.d.ts +18 -0
- package/dist/config/schema-w5.js +109 -0
- package/dist/config/schema.d.ts +5 -9
- package/dist/config/schema.js +68 -114
- package/dist/config/types-w5.d.ts +118 -0
- package/dist/config/types-w5.js +20 -0
- package/dist/config/types.d.ts +50 -1
- package/dist/config/types.js +12 -0
- package/dist/drivers/acp/client.d.ts +57 -0
- package/dist/drivers/acp/client.js +160 -0
- package/dist/drivers/acp/driver.d.ts +31 -0
- package/dist/drivers/acp/driver.js +274 -0
- package/dist/drivers/acp/testing/fake-agent-main.d.ts +5 -0
- package/dist/drivers/acp/testing/fake-agent-main.js +7 -0
- package/dist/drivers/acp/testing/fake-agent.d.ts +27 -0
- package/dist/drivers/acp/testing/fake-agent.js +211 -0
- package/dist/drivers/acp/types.d.ts +285 -0
- package/dist/drivers/acp/types.js +36 -0
- package/dist/drivers/agents.d.ts +58 -0
- package/dist/drivers/agents.js +142 -0
- package/dist/drivers/base.d.ts +35 -0
- package/dist/drivers/base.js +59 -0
- package/dist/drivers/catalog.d.ts +46 -0
- package/dist/drivers/catalog.js +167 -0
- package/dist/drivers/env.d.ts +20 -0
- package/dist/drivers/env.js +46 -0
- package/dist/drivers/host-runners.d.ts +18 -0
- package/dist/drivers/host-runners.js +45 -0
- package/dist/drivers/jsonrpc.d.ts +58 -0
- package/dist/drivers/jsonrpc.js +180 -0
- package/dist/drivers/native/claude-normalize.d.ts +46 -0
- package/dist/drivers/native/claude-normalize.js +106 -0
- package/dist/drivers/native/claude-stream.d.ts +29 -0
- package/dist/drivers/native/claude-stream.js +456 -0
- package/dist/drivers/native/codex-app-server.d.ts +26 -0
- package/dist/drivers/native/codex-app-server.js +407 -0
- package/dist/drivers/native/codex-normalize.d.ts +38 -0
- package/dist/drivers/native/codex-normalize.js +124 -0
- package/dist/drivers/native/oneshot.d.ts +28 -0
- package/dist/drivers/native/oneshot.js +312 -0
- package/dist/drivers/permissions.d.ts +40 -0
- package/dist/drivers/permissions.js +92 -0
- package/dist/drivers/pids.d.ts +32 -0
- package/dist/drivers/pids.js +93 -0
- package/dist/drivers/pool.d.ts +28 -0
- package/dist/drivers/pool.js +96 -0
- package/dist/drivers/probe.d.ts +47 -0
- package/dist/drivers/probe.js +172 -0
- package/dist/drivers/process.d.ts +48 -0
- package/dist/drivers/process.js +100 -0
- package/dist/drivers/runner.d.ts +61 -0
- package/dist/drivers/runner.js +388 -0
- package/dist/drivers/store.d.ts +49 -0
- package/dist/drivers/store.js +91 -0
- package/dist/drivers/turn.d.ts +41 -0
- package/dist/drivers/turn.js +99 -0
- package/dist/drivers/types.d.ts +122 -0
- package/dist/drivers/types.js +11 -0
- package/dist/git/info.d.ts +75 -0
- package/dist/git/info.js +191 -0
- package/dist/hooks/protocol.js +6 -1
- package/dist/hooks/types.d.ts +10 -1
- package/dist/hooks/types.js +2 -0
- package/dist/host/api-impl.d.ts +7 -0
- package/dist/host/api-impl.js +15 -0
- package/dist/host/types.d.ts +24 -2
- package/dist/host/types.js +4 -0
- package/dist/index.d.ts +3 -0
- package/dist/index.js +1 -0
- package/dist/modes/acp/acp-events.d.ts +46 -0
- package/dist/modes/acp/acp-events.js +233 -0
- package/dist/modes/acp/acp-mode.d.ts +17 -0
- package/dist/modes/acp/acp-mode.js +47 -0
- package/dist/modes/acp/acp-server.d.ts +79 -0
- package/dist/modes/acp/acp-server.js +315 -0
- package/dist/modes/commands-core.d.ts +7 -1
- package/dist/modes/commands-core.js +55 -0
- package/dist/modes/image-input.d.ts +12 -4
- package/dist/modes/image-input.js +22 -5
- package/dist/modes/interactive/agent-panels.d.ts +14 -0
- package/dist/modes/interactive/agent-panels.js +103 -0
- package/dist/modes/interactive/agent-ui.d.ts +73 -0
- package/dist/modes/interactive/agent-ui.js +234 -0
- package/dist/modes/interactive/approval-dialog.d.ts +21 -4
- package/dist/modes/interactive/approval-dialog.js +98 -20
- package/dist/modes/interactive/approval-merge.d.ts +41 -0
- package/dist/modes/interactive/approval-merge.js +89 -0
- package/dist/modes/interactive/clipboard-paste.d.ts +18 -0
- package/dist/modes/interactive/clipboard-paste.js +28 -0
- package/dist/modes/interactive/commands.d.ts +9 -1
- package/dist/modes/interactive/commands.js +19 -0
- package/dist/modes/interactive/double-esc.d.ts +20 -0
- package/dist/modes/interactive/double-esc.js +34 -0
- package/dist/modes/interactive/event-notices.d.ts +32 -0
- package/dist/modes/interactive/event-notices.js +79 -0
- package/dist/modes/interactive/external-editor.d.ts +16 -0
- package/dist/modes/interactive/external-editor.js +39 -0
- package/dist/modes/interactive/interactive-mode.d.ts +14 -1
- package/dist/modes/interactive/interactive-mode.js +134 -136
- package/dist/modes/interactive/key-dispatch.d.ts +16 -2
- package/dist/modes/interactive/key-dispatch.js +49 -1
- package/dist/modes/interactive/line/line-mode.d.ts +2 -1
- package/dist/modes/interactive/line/line-mode.js +22 -5
- package/dist/modes/interactive/line/line-render.d.ts +2 -1
- package/dist/modes/interactive/line/line-render.js +40 -4
- package/dist/modes/interactive/message-view.d.ts +1 -1
- package/dist/modes/interactive/message-view.js +24 -2
- package/dist/modes/interactive/panels.d.ts +18 -1
- package/dist/modes/interactive/panels.js +19 -5
- package/dist/modes/interactive/plan-command.d.ts +40 -0
- package/dist/modes/interactive/plan-command.js +129 -0
- package/dist/modes/interactive/plan-dialog.d.ts +98 -0
- package/dist/modes/interactive/plan-dialog.js +290 -0
- package/dist/modes/interactive/plan-flow.d.ts +34 -0
- package/dist/modes/interactive/plan-flow.js +98 -0
- package/dist/modes/interactive/rewind-command.d.ts +31 -0
- package/dist/modes/interactive/rewind-command.js +106 -0
- package/dist/modes/interactive/rewind-flow.d.ts +37 -0
- package/dist/modes/interactive/rewind-flow.js +151 -0
- package/dist/modes/interactive/rewind-list.d.ts +36 -0
- package/dist/modes/interactive/rewind-list.js +123 -0
- package/dist/modes/interactive/rewind-panel.d.ts +77 -0
- package/dist/modes/interactive/rewind-panel.js +309 -0
- package/dist/modes/interactive/rewind-text.d.ts +40 -0
- package/dist/modes/interactive/rewind-text.js +139 -0
- package/dist/modes/interactive/session-events.d.ts +24 -0
- package/dist/modes/interactive/session-events.js +96 -0
- package/dist/modes/interactive/status-area.d.ts +73 -0
- package/dist/modes/interactive/status-area.js +190 -0
- package/dist/modes/interactive/status-bar.d.ts +99 -11
- package/dist/modes/interactive/status-bar.js +273 -90
- package/dist/modes/interactive/status-line.d.ts +33 -0
- package/dist/modes/interactive/status-line.js +113 -0
- package/dist/modes/interactive/subagent-view.d.ts +56 -0
- package/dist/modes/interactive/subagent-view.js +154 -0
- package/dist/modes/interactive/tasks-report.d.ts +27 -0
- package/dist/modes/interactive/tasks-report.js +114 -0
- package/dist/modes/interactive/tool-view.d.ts +12 -2
- package/dist/modes/interactive/tool-view.js +34 -4
- package/dist/modes/print/print-mode.d.ts +13 -4
- package/dist/modes/print/print-mode.js +56 -12
- package/dist/modes/rpc/commands.d.ts +9 -0
- package/dist/modes/rpc/commands.js +44 -0
- package/dist/modes/rpc/rpc-mode.js +7 -1
- package/dist/modes/session-report.d.ts +11 -0
- package/dist/modes/session-report.js +48 -1
- package/dist/permissions/auto-safe.d.ts +5 -0
- package/dist/permissions/auto-safe.js +18 -0
- package/dist/permissions/classifier.d.ts +4 -0
- package/dist/permissions/classifier.js +2 -0
- package/dist/permissions/modes.js +1 -1
- package/dist/permissions/pipeline.d.ts +43 -4
- package/dist/permissions/pipeline.js +114 -9
- package/dist/permissions/readonly-bash.d.ts +30 -0
- package/dist/permissions/readonly-bash.js +118 -0
- package/dist/permissions/types.d.ts +42 -0
- package/dist/plan/compose.d.ts +9 -0
- package/dist/plan/compose.js +19 -0
- package/dist/plan/controller.d.ts +71 -0
- package/dist/plan/controller.js +27 -0
- package/dist/plan/done-markers.d.ts +17 -0
- package/dist/plan/done-markers.js +51 -0
- package/dist/plan/extract.d.ts +29 -0
- package/dist/plan/extract.js +160 -0
- package/dist/plan/prompts.d.ts +36 -0
- package/dist/plan/prompts.js +89 -0
- package/dist/plan/store.d.ts +37 -0
- package/dist/plan/store.js +90 -0
- package/dist/rpc.d.ts +58 -2
- package/dist/rpc.js +7 -0
- package/dist/sandbox/bash.d.ts +74 -0
- package/dist/sandbox/bash.js +126 -0
- package/dist/sandbox/detect.d.ts +48 -0
- package/dist/sandbox/detect.js +149 -0
- package/dist/sandbox/index.d.ts +5 -0
- package/dist/sandbox/index.js +5 -0
- package/dist/sandbox/profile.d.ts +33 -0
- package/dist/sandbox/profile.js +76 -0
- package/dist/sandbox/wrap.d.ts +29 -0
- package/dist/sandbox/wrap.js +117 -0
- package/dist/sdk.d.ts +33 -2
- package/dist/sdk.js +24 -2
- package/dist/session/types.d.ts +3 -1
- package/dist/session/types.js +1 -0
- package/dist/skills/builtin.d.ts +31 -0
- package/dist/skills/builtin.js +109 -0
- package/dist/skills/discover.d.ts +2 -1
- package/dist/skills/index-prompt.js +5 -8
- package/dist/tools/background-jobs.d.ts +71 -0
- package/dist/tools/background-jobs.js +198 -0
- package/dist/tools/bash.d.ts +53 -1
- package/dist/tools/bash.js +158 -7
- package/dist/tools/clipboard-image.d.ts +44 -0
- package/dist/tools/clipboard-image.js +148 -0
- package/dist/tools/edit.d.ts +2 -0
- package/dist/tools/edit.js +18 -3
- package/dist/tools/image-file.d.ts +38 -3
- package/dist/tools/image-file.js +81 -10
- package/dist/tools/image-resize.d.ts +58 -0
- package/dist/tools/image-resize.js +97 -0
- package/dist/tools/presets.d.ts +7 -2
- package/dist/tools/presets.js +11 -4
- package/dist/tools/read.d.ts +5 -2
- package/dist/tools/read.js +13 -10
- package/dist/tools/registry.d.ts +7 -1
- package/dist/tools/registry.js +27 -4
- package/dist/tools/task-ctl.d.ts +22 -0
- package/dist/tools/task-ctl.js +116 -0
- package/dist/tools/task.d.ts +22 -10
- package/dist/tools/task.js +66 -26
- package/dist/tools/todo.d.ts +22 -2
- package/dist/tools/todo.js +58 -14
- package/dist/tools/truncate.d.ts +15 -0
- package/dist/tools/truncate.js +25 -0
- package/dist/tools/types.d.ts +113 -0
- package/dist/tools/types.js +5 -0
- package/dist/tools/write.js +3 -0
- package/dist/tui/glyphs.d.ts +4 -0
- package/dist/tui/glyphs.js +4 -0
- package/dist/tui/keybindings.d.ts +5 -0
- package/dist/tui/keybindings.js +5 -0
- package/docs/acp.md +78 -0
- package/docs/agents.md +250 -0
- package/docs/codemode.md +12 -8
- package/docs/hooks.md +26 -22
- package/docs/permissions.md +77 -13
- package/docs/plan.md +107 -0
- package/docs/providers.md +228 -52
- package/docs/rewind-plan.md +181 -0
- package/docs/rpc.md +92 -5
- package/docs/sandbox.md +215 -0
- package/docs/session-format.md +41 -21
- package/docs/sessions.md +41 -1
- package/docs/tui-design.md +751 -0
- package/docs/tui.md +125 -6
- package/package.json +13 -2
package/README.md
CHANGED
|
@@ -23,9 +23,15 @@ ama
|
|
|
23
23
|
- [工具与预设](#工具与预设)
|
|
24
24
|
- [缓存](#缓存)
|
|
25
25
|
- [安全](#安全)
|
|
26
|
+
- [沙箱](#沙箱)
|
|
27
|
+
- [Plan](#plan)
|
|
28
|
+
- [子 Agent](#子-agent)
|
|
29
|
+
- [外部 Agent](#外部-agent)
|
|
30
|
+
- [回滚](#回滚)
|
|
26
31
|
- [界面与入口](#界面与入口)
|
|
27
32
|
- [嵌入 Armadra](#嵌入-armadra)
|
|
28
33
|
- [文档](#文档)
|
|
34
|
+
- [已知限制](#已知限制)
|
|
29
35
|
- [开发](#开发)
|
|
30
36
|
|
|
31
37
|
## 为什么做 ama
|
|
@@ -38,20 +44,23 @@ ama
|
|
|
38
44
|
|
|
39
45
|
## 特性一览
|
|
40
46
|
|
|
41
|
-
| 方面
|
|
42
|
-
|
|
|
43
|
-
| 多协议与供应商
|
|
44
|
-
| 零配置与中转站
|
|
45
|
-
| 模型元数据
|
|
46
|
-
| 图像输入
|
|
47
|
-
| 工具与预设
|
|
48
|
-
|
|
|
49
|
-
|
|
|
50
|
-
|
|
|
51
|
-
|
|
|
52
|
-
|
|
|
53
|
-
|
|
|
54
|
-
|
|
|
47
|
+
| 方面 | 内容 |
|
|
48
|
+
| --------------- | ------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------ |
|
|
49
|
+
| 多协议与供应商 | 4 条协议线、17 家内置供应商(Anthropic、OpenAI、Google、DeepSeek、Moonshot、智谱、通义、OpenRouter、Groq、xAI、Mistral、MiniMax、阶跃、火山方舟、腾讯、Ollama、LM Studio)、内置渠道(Messages / Responses 优先、Chat 回落)、自定义供应商、模型级协议 |
|
|
50
|
+
| 零配置与中转站 | 有 key 就选第一个可用的供应商(中转站按价格规则挑缺省模型);识别 `OPENAI_BASE_URL` / `ANTHROPIC_BASE_URL`;`ama providers add` 只给 baseUrl 与 key 一键接入:列模型、探测渠道、写回配置 |
|
|
51
|
+
| 模型元数据 | 上下文、输出上限、图像输入、推理、价格来自随包的 models.dev 内置快照(启动与运行都不联网,`ama models refresh` 显式刷新);一个供应商可挂多个渠道(Chat / Responses / Messages),`provider/model@渠道` |
|
|
52
|
+
| 图像输入 | `-p --image`、界面里 `@图片路径`、`Ctrl+V` / `/paste` 粘贴剪贴板图片;按端点分档的单图上限、超限自动缩放;模型不收图片时直接拒绝并提示换模型 |
|
|
53
|
+
| 工具与预设 | read / edit / write / bash / grep / glob,另有 ls、todo、task / task_ctl(子 Agent)、codemode;四个预设 `default` / `minimal` / `codemode-only` / `coordinator` |
|
|
54
|
+
| Plan 与子 Agent | Plan 模式只读调研、出计划后审批执行;`task` 委派子 Agent(内置 general / explore / plan,可自定义类型,前台 / 后台 / 续聊 / worktree 隔离) |
|
|
55
|
+
| 外部 Agent | `task(agent="claude" \| "codex" \| "acp:<程序>")` 以各 CLI 自己的登录驱动外部编码 Agent,审批只交给人;`ama --mode acp` 把 ama 暴露为 ACP Agent |
|
|
56
|
+
| 回滚与沙箱 | 每回合检查点,`/rewind` / 双击 Esc 回到任一条消息之前(代码、对话或两者);macOS / Linux 的操作系统沙箱隔离 codemode 与(可选)bash |
|
|
57
|
+
| codemode | 模型写一段 JS,在受 Node 权限模型约束的子进程里编排多次工具调用,只有输出回到模型 |
|
|
58
|
+
| Skill | `SKILL.md` 目录,模型按索引自行读取,用户用 `/skill:<名字>` 调用;另有提示模板 |
|
|
59
|
+
| 两层 Hook | 命令式 Hook(`hooks.json`,11 个事件,用户策略)与进程内宿主适配器 HostApi(嵌入方) |
|
|
60
|
+
| 权限 | 四种模式、allow / deny 规则、危险命令识别(穿透 `sh -c` / `eval` / `xargs` / `find -exec`)、项目信任、审批时的执行前预览 |
|
|
61
|
+
| 缓存 | 前缀稳定、缓存字段与兼容开关、未命中归因、「报 / 不报缓存」三态、长工具运行时保温、压缩摘要按会话前缀续写 |
|
|
62
|
+
| 会话 | JSONL 条目树,分叉与 `/tree` 回溯;两档压缩(裁剪大工具结果 → 摘要)与熔断;预算上限(`--max-turns` / `--max-cost`)、重复调用检测、模型回退 |
|
|
63
|
+
| 入口 | 差分渲染终端界面、`--no-tui` 行式、`-p`(text / json / stream-json)、`--mode rpc`、`--mode acp`、SDK |
|
|
55
64
|
|
|
56
65
|
## 安装
|
|
57
66
|
|
|
@@ -85,14 +94,15 @@ pnpm build # 产出 dist/ 与 dist/bundle/ama.cjs、dist/bundle/
|
|
|
85
94
|
node dist/bundle/ama.cjs --version
|
|
86
95
|
```
|
|
87
96
|
|
|
88
|
-
### Node
|
|
97
|
+
### Node 版本、codemode 与沙箱
|
|
89
98
|
|
|
90
|
-
| Node
|
|
91
|
-
|
|
|
92
|
-
| ≥ 25
|
|
93
|
-
| 22 / 24 |
|
|
99
|
+
| Node / 平台 | codemode | bash 沙箱(`sandbox.bash: "auto"`) |
|
|
100
|
+
| ------------------------------------------- | --------------------------------------------------------------------------------------------------------------------------------------------------------------------- | ------------------------------------------------------------- |
|
|
101
|
+
| ≥ 25 | 文件系统与网络都隔离;`codemode` 按只读类工具处理,`default` 权限模式下免审批;`default` 预设**缺省开启** codemode | 取决于平台(下两行) |
|
|
102
|
+
| 22 / 24 + 操作系统沙箱(macOS、多数 Linux) | 子进程经 `sandbox-exec` / bubblewrap 启动,网络由内核拒绝;与 Node ≥ 25 相同:只读类、`default` 预设缺省开启 | macOS `sandbox-exec`、Linux bubblewrap 可用(`unshare` 不算) |
|
|
103
|
+
| 22 / 24,没有操作系统沙箱(如 Windows) | 隔离文件系统,**不隔离网络**;`codemode` 按执行类处理,每次都要审批(状态栏显示红色 `net!`);`default` 预设缺省**不开** codemode,启动时提示一次(每个配置目录一次) | 不可用,bash 照常审批 |
|
|
94
104
|
|
|
95
|
-
其余功能在 Node 22
|
|
105
|
+
其余功能在 Node 22 起都一样。`ama doctor` 显示本机的操作系统沙箱能力([docs/sandbox.md](docs/sandbox.md));`sandbox.enabled: "off"` 或 `AMA_SANDBOX=off` 关闭它。网络未隔离时想用 codemode 就显式开:`--codemode on` 或 config 写 `"codemode": { "mode": "on" }`。`codemode.requireStrict: true` 可以在网络未隔离时直接禁用 codemode。
|
|
96
106
|
|
|
97
107
|
## 快速开始
|
|
98
108
|
|
|
@@ -122,14 +132,19 @@ ama -p "列出 TODO" --model deepseek/deepseek-v4-pro --output-format json
|
|
|
122
132
|
|
|
123
133
|
**常用参数**:
|
|
124
134
|
|
|
125
|
-
| 参数 | 作用
|
|
126
|
-
| ------------------------------------------------------- |
|
|
127
|
-
| `--model provider/id` | 选模型(配置、命令行、`/model`、SDK 写法一致)
|
|
128
|
-
| `--thinking off\|minimal\|low\|medium\|high\|xhigh` | 思考级别(缺省 `medium`)
|
|
129
|
-
| `--permission-mode plan\|default\|auto-edit\|full-auto` | 权限模式(缺省 `default`)
|
|
130
|
-
| `-c` / `-r [id]` | 继续本目录最近的会话 / 选择会话恢复
|
|
131
|
-
| `--tools-preset <名>` | 工具预设(见下文)
|
|
132
|
-
| `--allow <规则>` / `--deny <规则>` | 追加权限规则,可重复
|
|
135
|
+
| 参数 | 作用 |
|
|
136
|
+
| ------------------------------------------------------- | ------------------------------------------------------------ |
|
|
137
|
+
| `--model provider/id` | 选模型(配置、命令行、`/model`、SDK 写法一致) |
|
|
138
|
+
| `--thinking off\|minimal\|low\|medium\|high\|xhigh` | 思考级别(缺省 `medium`) |
|
|
139
|
+
| `--permission-mode plan\|default\|auto-edit\|full-auto` | 权限模式(缺省 `default`) |
|
|
140
|
+
| `-c` / `-r [id]` | 继续本目录最近的会话 / 选择会话恢复 |
|
|
141
|
+
| `--tools-preset <名>` | 工具预设(见下文) |
|
|
142
|
+
| `--allow <规则>` / `--deny <规则>` | 追加权限规则,可重复 |
|
|
143
|
+
| `--max-turns N` / `--max-cost USD` | 一次运行的轮数 / 美元上限(`-p` 到限退出 8) |
|
|
144
|
+
| `--agent-dir <目录>` | 追加子 Agent 定义目录,可重复 |
|
|
145
|
+
| `--mode rpc` / `--mode acp` | stdio 上说 RPC(JSONL)/ ACP(JSON-RPC),供宿主与编辑器驱动 |
|
|
146
|
+
|
|
147
|
+
**内置供应商**(17 家):Anthropic、OpenAI、Google、DeepSeek、Moonshot(Kimi)、智谱、通义(DashScope)、OpenRouter、Groq、xAI、Mistral、MiniMax、阶跃、火山方舟、腾讯 TokenHub、Ollama、LM Studio。多协议的供应商带内置渠道,缺省协议 Messages / Responses 优先、Chat 回落:OpenAI、xAI、火山方舟走 Responses,通义、MiniMax、阶跃、腾讯走 Messages,DeepSeek、智谱、Kimi 暂走 Chat(`@messages` 可选),`provider/model@渠道` 指定渠道。完整表见 [docs/providers.md](docs/providers.md)「内置供应商」。
|
|
133
148
|
|
|
134
149
|
本地 Ollama / LM Studio 不需要 key:`ama --model ollama/<模型名>`。`ama --help` 列出全部参数与子命令;测试或排查时可用不花钱的 `--model fake/echo`(回显最后一条用户消息;模型选择器、`models list`、`doctor` 缺省不列这个测试供应商,`AMA_SHOW_FAKE=1` 时列出)。
|
|
135
150
|
|
|
@@ -168,7 +183,7 @@ ama -p "列出 TODO" --model deepseek/deepseek-v4-pro --output-format json
|
|
|
168
183
|
| 位置 | 内容 |
|
|
169
184
|
| --------------------- | ---------------------------------------------------------------------------------------------------------------------------------------------------- |
|
|
170
185
|
| `~/.config/ama/` | 用户级:`config.json`、`config.schema.json`(ama 生成)、`auth.json`(0600)、`hooks.json`、`keybindings.json`、`trust.json`、`AGENTS.md`、`skills/` |
|
|
171
|
-
| `~/.local/share/ama/` | 数据:`sessions/`(会话 JSONL)、`models-dev.json
|
|
186
|
+
| `~/.local/share/ama/` | 数据:`sessions/`(会话 JSONL)、`plans/`(计划文件)、`file-history/`(检查点备份)、`models-dev.json`(`ama models refresh` 的覆盖)、输入历史 |
|
|
172
187
|
| `<项目>/.ama/` | 项目级:`config.json`(只能收紧)、`hooks.json` / `skills/` / `prompts/`(需信任) |
|
|
173
188
|
| `<项目>/AGENTS.md` | 项目约定,从 cwd 向上查找,自动进系统提示 |
|
|
174
189
|
| `--profile <文件>` | 宿主 profile(嵌入方用,见「嵌入 Armadra」) |
|
|
@@ -199,8 +214,8 @@ ama providers list # 供应商 → 渠道 →
|
|
|
199
214
|
```
|
|
200
215
|
|
|
201
216
|
`add` 列出 `GET {baseUrl}/models` 的模型,从 baseUrl 推出 chat / responses / messages 三个候选渠道,`--probe` 逐渠道发最小
|
|
202
|
-
请求,把能用的渠道写进每个模型的 `channels
|
|
203
|
-
|
|
217
|
+
请求,把能用的渠道写进每个模型的 `channels`;上下文、输出上限、图像、推理与价格不写进配置,运行时从内置的 models.dev
|
|
218
|
+
快照补(`ama models list` 标出每个字段的来源)。不给 `--key-env` 时 key 从 stdin 读(不回显)存进 `auth.json`。写入后的配置:
|
|
204
219
|
|
|
205
220
|
```json
|
|
206
221
|
{
|
|
@@ -250,8 +265,8 @@ OPENAI_BASE_URL=https://proxy.example/v1 OPENAI_API_KEY=$PACKY_API_KEY \
|
|
|
250
265
|
|
|
251
266
|
- `api` 缺省 `openai-completions`;可选 `openai-responses`、`anthropic-messages`、`google-generative-ai`。
|
|
252
267
|
- `apiKey` 支持 `$ENV` / `${ENV}`(读环境变量)与 `!command`(执行命令取值),不要把 key 明文写进配置。
|
|
253
|
-
-
|
|
254
|
-
|
|
268
|
+
- 自定义模型的元数据缺省从随包的 models.dev 快照补(启动不联网;`ama models refresh` 显式联网刷新到数据目录,`refresh-catalog`
|
|
269
|
+
是旧名);匹配不到时不猜 `contextWindow`,自动压缩关闭,需要时在模型条目里补上或写 `"modelsDev": "provider/model"` 指定条目。
|
|
255
270
|
|
|
256
271
|
**不想手写模型表**:让 ama 去问中转站。
|
|
257
272
|
|
|
@@ -266,20 +281,20 @@ ama models cache-probe packy/grok-4.7 # 这个端点报不报
|
|
|
266
281
|
|
|
267
282
|
## 工具与预设
|
|
268
283
|
|
|
269
|
-
| 预设 | 模型直接看到的工具
|
|
270
|
-
| --------------- |
|
|
271
|
-
| `default` | read、edit、write、bash、grep、glob
|
|
272
|
-
| `minimal` | read、edit、write、bash
|
|
273
|
-
| `codemode-only` | 只有 `codemode`
|
|
274
|
-
| `coordinator` | read 与宿主注册的画布工具
|
|
284
|
+
| 预设 | 模型直接看到的工具 | 适合 |
|
|
285
|
+
| --------------- | -------------------------------------------------------------- | ------------------------------------------------------------------------------------------- |
|
|
286
|
+
| `default` | read、edit、write、bash、grep、glob;网络隔离时另加 `codemode` | 缺省(要 todo 就 `tools.default: ["+todo"]`) |
|
|
287
|
+
| `minimal` | read、edit、write、bash | 小模型、小上下文;`full-auto` |
|
|
288
|
+
| `codemode-only` | 只有 `codemode` | 长流程、工具调用密集的任务 |
|
|
289
|
+
| `coordinator` | read 与宿主注册的画布工具 | 嵌入 Armadra 的协调者:不写文件、不跑 bash;codemode 缺省关,显式开了脚本里也只能调这些工具 |
|
|
275
290
|
|
|
276
291
|
- `--tools-preset <名>` 或 `tools.preset` 选预设。`codemode` 是 `codemode-only` 的旧名(0.3.0),配置、命令行、RPC、SDK 都还认,`ama config show` 显示规范名并提示。
|
|
277
|
-
- `tools.default` 在预设上微调:`["+
|
|
292
|
+
- `tools.default` 在预设上微调:`["+task", "+todo", "-glob"]`;不带前缀的名字整组替换。`task` 与 `task_ctl` 同进退(`+task` 一起加)。
|
|
278
293
|
- 另有 `--tools a,b,c`(只启用这些)、`--exclude-tools a,b`、交互模式的 `/tools`。
|
|
279
294
|
|
|
280
295
|
**codemode** 让模型写一段 JavaScript,用 `tools.<name>(args)` 编排多次工具调用(可以 `Promise.all` 并发),只有脚本输出回到模型。脚本跑在 `node --permission` 子进程的 vm 里:没有 `require` / `import` / `process` / `fetch`,每次内层调用仍逐个经过 Hook、权限与审批。
|
|
281
296
|
|
|
282
|
-
**缺省开放**:`codemode.mode` 不写时跟随预设——`default` → `on`(六个工具 + codemode
|
|
297
|
+
**缺省开放**:`codemode.mode` 不写时跟随预设——`default` → `on`(六个工具 + codemode,只在网络隔离的沙箱里:Node ≥ 25,或 Node 22 / 24 + 操作系统沙箱;否则 `off`),`codemode-only` → `only`,`minimal` / `coordinator` → `off`。显式的 `--codemode off|on|only` 或 `codemode.mode` 优先,项目级只能写 `off`。`on` 模式下 codemode 的描述只用一行列出可在脚本里调用的直接工具(参数相同)与仅脚本可调的工具名,不重复声明,前缀只多约 400 token([三预设基准](https://github.com/Owlbay/armadra-agent/blob/main/docs/benchmarks/presets-2026-10-02.md)测的是去重前的 codemode 预设:小任务输入多约 45%、轮数不减)。只读检索多、调用次数多的长流程可以用 `codemode-only`。
|
|
283
298
|
|
|
284
299
|
## 缓存
|
|
285
300
|
|
|
@@ -291,10 +306,15 @@ ama models cache-probe packy/grok-4.7 # 这个端点报不报
|
|
|
291
306
|
|
|
292
307
|
### 读状态栏
|
|
293
308
|
|
|
309
|
+
独立终端缺省两行(`Ctrl+G` / `/statusline` 切换成一行,嵌入宿主缺省一行):
|
|
310
|
+
|
|
294
311
|
```
|
|
295
|
-
|
|
312
|
+
tps: 100 tok/s • 546 tok / 5.5s (avg 100 · ttft 1.4s) ↑412k ↓8.1k · cache 83% ♨ · rebill $0.11 · [-]
|
|
313
|
+
Accept edits claude-opus-5-5 medium | Ctx 34.0% | proj ⎇ main 5ae9e54 (+12,-3) | $0.84 | 2h24m
|
|
296
314
|
```
|
|
297
315
|
|
|
316
|
+
上行是速率与用量,下行是权限模式、模型与思考级别、上下文、目录与 git 分支(含工作区增删行)、费用、会话时长。缓存相关的项:
|
|
317
|
+
|
|
298
318
|
| 项 | 怎么读 |
|
|
299
319
|
| -------------- | -------------------------------------------------------------------------- |
|
|
300
320
|
| `cache 83%` | **最近一次**请求的命中率;会话累计在 `/session` |
|
|
@@ -302,7 +322,7 @@ anthropic/<model-id> · think:medium · ↑412k ↓8.1k · cache 83% ♨ · $0.8
|
|
|
302
322
|
| `cache 未报告` | 端点不报缓存(连续 3 次读写都是 0);这类请求不算进命中率,而不是显示成 0% |
|
|
303
323
|
| `♨` | 保温计时中 |
|
|
304
324
|
| `rebill $0.11` | 本会话因缓存未命中多付的钱(无价格的模型显示 token);为 0 不显示 |
|
|
305
|
-
| `
|
|
325
|
+
| `Ctx 34.0%` | 上下文占用;≥ 70% 黄、≥ 90% 红,跨过时消息区提示「约剩 N 回合」 |
|
|
306
326
|
|
|
307
327
|
一次未命中重计费 ≥ 20k token 或 ≥ $0.10 时,消息区写一行原因。`/cache` 看缓存统计,`/cache fingerprint` 查前缀指纹(两次之间哈希变了,就是系统提示或工具表被改了)。
|
|
308
328
|
|
|
@@ -314,7 +334,7 @@ anthropic/<model-id> · think:medium · ↑412k ↓8.1k · cache 83% ♨ · $0.8
|
|
|
314
334
|
|
|
315
335
|
### 实测
|
|
316
336
|
|
|
317
|
-
[缓存验收实验](docs/benchmarks/cache-2026-10-02.md)(2026-10-02,经一家测试中转站):
|
|
337
|
+
[缓存验收实验](https://github.com/Owlbay/armadra-agent/blob/main/docs/benchmarks/cache-2026-10-02.md)(2026-10-02,经一家测试中转站):
|
|
318
338
|
|
|
319
339
|
| 场景 | 结果 |
|
|
320
340
|
| --------------------------- | ---------------------------------------------------------------------------------------------- |
|
|
@@ -344,9 +364,61 @@ anthropic/<model-id> · think:medium · ↑412k ↓8.1k · cache 83% ♨ · $0.8
|
|
|
344
364
|
|
|
345
365
|
- **规则**:`bash(git push*)`、`write(src/**)`、`read(**)`、`canvas_*`;`--allow` / `--deny` 可重复。内置 deny:写 `.git/**`、读写 `.ssh/**`。
|
|
346
366
|
- **危险命令**:`rm -rf /`、`sudo`、`git push --force`、`git reset --hard`、`git clean -f`、`curl … | sh`、`chmod -R 777`、`npm publish`、`shutdown` 等,即使有 allow 规则也要询问。识别会穿透 `sh -c '…'`、`eval`、`xargs`、`find -exec` 与 git 全局选项。
|
|
367
|
+
- **bash 沙箱**(缺省关闭):见下文「沙箱」。
|
|
347
368
|
- **项目信任**:`.ama/hooks.json`、`.ama/skills/`、`.ama/prompts/` 会执行或注入项目里的内容,需要先信任目录(交互模式问一次,可记住;`--trust` / `--no-trust`;非交互缺省不信任)。`AGENTS.md` 与 `.ama/config.json` 不需要信任,因为后者只能收紧。
|
|
348
369
|
- **执行前预览**:审批对话框除了输入摘要,还列出这一步会碰到什么——bash 里 `rm` / `mv` / `git clean` / `git reset --hard` / 重定向的目标路径是否存在、大小、目录里有多少文件;write 显示路径与行数,edit 显示每处修改的 −/+ 摘要。`y` 允许、`n` 拒绝、`a` 本会话同类不再问、`v` 看完整输入。
|
|
349
|
-
- **Hook**:`hooks.json` 在 `PreToolUse`、`PostToolUse`、`UserPromptSubmit`、`Stop` 等
|
|
370
|
+
- **Hook**:`hooks.json` 在 `PreToolUse`、`PostToolUse`、`UserPromptSubmit`、`Stop`、`PostCompact`、`PostRewind` 等 11 个事件运行 shell 命令,可以否决工具调用、改写输入、追加上下文、让运行再跑一轮。见 [docs/hooks.md](docs/hooks.md)。
|
|
371
|
+
- **审批来源**:子 Agent 与外部 Agent 发起的审批在对话框标题标出来源(`[task:explore]`、`[claude · 会话 abc12345]`、「首次运行外部 Agent」),见 [docs/permissions.md](docs/permissions.md)「审批对话框的来源标注」。
|
|
372
|
+
|
|
373
|
+
## 沙箱
|
|
374
|
+
|
|
375
|
+
macOS 用 `sandbox-exec`,Linux 用 bubblewrap(退而 `unshare -r -n`,只隔离网络),启动时用目标配置跑一次最小探针确认真能用(嵌套沙箱、没有用户命名空间时降级),`ama doctor` 显示结果。Windows 没有操作系统沙箱。
|
|
376
|
+
|
|
377
|
+
- **codemode**:子进程经沙箱启动,内核拒绝网络与一切写入;有沙箱时 Node 22 / 24 与 Node ≥ 25 一样按只读类处理、`default` 预设缺省开启(见上文「Node 版本、codemode 与沙箱」)。
|
|
378
|
+
- **bash**(缺省关闭):`"sandbox": { "bash": "auto" }` 后 bash(含后台 bash)在沙箱里跑——只能写工作区、系统临时目录与 `sandbox.writable` 追加的目录,工作区的 `.ama/`、`.git/hooks`、`.git/config` 只读,读不到 `~/.ssh` 等凭据,缺省不能联网(`sandbox.network: "allow"` 放开)。`default` / `auto-edit` 下沙箱内的命令免审批(危险命令、deny 规则、Hook ask 照旧);被沙箱拒绝时模型可以请求 `sandbox: false` 不经沙箱重跑,这一步照常审批、无人值守拒绝。状态栏多一个 `沙箱` 标记。
|
|
379
|
+
- `sandbox.*` 只认用户级 / profile,项目级只能写收紧的 `network: "deny"`;`sandbox.enabled: "off"` 或 `AMA_SANDBOX=off` 整体关闭。
|
|
380
|
+
|
|
381
|
+
细节、各平台策略与已知绕过见 [docs/sandbox.md](docs/sandbox.md)。
|
|
382
|
+
|
|
383
|
+
## Plan
|
|
384
|
+
|
|
385
|
+
Plan 模式(`Shift+Tab`、`/permission plan`、`/plan <目标>`、`--permission-mode plan`)下模型只读调研——只放行读工具、只读命令(`ls`、`rg`、`git log / diff` 等)与只读子 Agent——最后输出 `<proposed_plan>` 计划块。ama 提取步骤、把计划落到 `<数据目录>/plans/`,弹出审批框:
|
|
386
|
+
|
|
387
|
+
- **批准并执行** / **批准,在新上下文执行**(新建会话,以计划全文开场),接着选执行模式(回到进入前的模式 / Accept edits / Auto);步骤变成待办,逐步推进(有 todo 工具时用 `todo update`,没有时模型每完成一步写一行 `[DONE:S1]`);
|
|
388
|
+
- **继续修改**(意见发给模型重写计划)/ **放弃并退出 Plan**;`e` 在外部编辑器里改计划,Esc 放弃但留在 Plan。
|
|
389
|
+
|
|
390
|
+
line 模式用 `/plan approve [模式|fresh]` / `/plan reject`;RPC 声明 `plans` 能力后由客户端审批;SDK 用 `createAgentSession({ plan: { onProposed } })`。**ama 不替人批准**:`-p` 缺省停在「计划待审批」并退出 9,用户级配置 `"plan": { "unattended": "approve" }` 才在无人值守时自动批准执行。`plan.model` 可让规划与执行用不同模型。见 [docs/plan.md](docs/plan.md)。
|
|
391
|
+
|
|
392
|
+
## 子 Agent
|
|
393
|
+
|
|
394
|
+
`task` 工具把子任务交给一个全新上下文的子 Agent(同进程、独立会话文件,深度 1),结果作为工具结果回到父会话。`default` 预设下 `task` 只在 codemode 脚本里可用,直接暴露用 `--tools …,task` 或 `tools.default: ["+task"]`。
|
|
395
|
+
|
|
396
|
+
- 内置类型 `general`(缺省)、`explore`、`plan`(后两者强制只读、不弹审批);`~/.config/ama/agents/*.md`、`.ama/agents/*.md`(需信任)或 `--agent-dir` 定义自己的类型(工具白名单、模型、权限、轮数、worktree 隔离)。
|
|
397
|
+
- 同一回复里的多个 task 并行(`subagents.maxConcurrent`,缺省 4);`background: true` 立即返回 `taskId`,完成后父会话收到 `<task-notification>`;`task{taskId}` 续聊;`task_ctl` 列出 / 等待 / 停止 / 读输出;`isolation: "worktree"` 在独立 git worktree 里跑。
|
|
398
|
+
- 子会话工具表与父逐字节相同,首个请求复用父的缓存前缀。界面里 task 工具行折叠显示进度,`/tasks` 看输出或停止,`/agents` 列出可用类型。
|
|
399
|
+
|
|
400
|
+
见 [docs/agents.md](docs/agents.md)「子 Agent」。
|
|
401
|
+
|
|
402
|
+
## 外部 Agent
|
|
403
|
+
|
|
404
|
+
`task(agent="claude")`、`"codex"` 或 `"acp:<程序>"`(Gemini CLI、OpenCode、Kimi、ama 自己等任意 ACP Agent)用你在该 CLI 里的**现有登录**驱动外部编码 Agent,前台 / 后台 / 续聊 / `task_ctl` 与 ama 子 Agent 一致;结果按资料处理。
|
|
405
|
+
|
|
406
|
+
- **审批只交给人**:外部 Agent 要确认的操作走界面 / 宿主,auto 分类器与模型都不参与;无人值守一律拒绝。每个会话首次以某个外部 Agent 运行时确认一次(allow 规则 `task(claude)` 或 `full-auto` 放行)。
|
|
407
|
+
- 外部 Agent 的模式不比 ama 当前模式宽(plan / allowlist 下只读);子进程缺省剥离供应商 key、`*_BASE_URL`、`AMA_*`,不把订阅切成 API 计费;只在已信任目录里启动;有并发池、美元预算与看门狗。
|
|
408
|
+
- 嵌入宿主时 ama 不自己启动外部 CLI,只用宿主经 `HostApi.runners` 注入的 runner。
|
|
409
|
+
- **ama 作为 ACP Agent**:`ama --mode acp` 供 Zed、JetBrains、Armadra 的 ACP 节点驱动;`@armadra/agent/acp` 导出客户端、驱动与假 Agent。
|
|
410
|
+
|
|
411
|
+
见 [docs/agents.md](docs/agents.md)「外部 Agent」与 [docs/acp.md](docs/acp.md)。
|
|
412
|
+
|
|
413
|
+
## 回滚
|
|
414
|
+
|
|
415
|
+
每条开启新回合的用户消息都是回滚点:edit / write 第一次写文件前备份,每个新回合重拍已跟踪文件(`checkpoints.mode: "shadow-git"` 时整个工作目录进影子仓库,bash 的改动也能回滚)。
|
|
416
|
+
|
|
417
|
+
- `/rewind` 或空闲时双击 Esc 打开列表,确认面板给出:恢复代码和对话 / 恢复对话 / 恢复代码 / 从这里摘要 / 摘要到这里,每项带预览;回合外被手动改过的文件按冲突列出、缺省跳过,可选择覆盖;git HEAD 变了只提示命令,不动 git。
|
|
418
|
+
- 运行中 Esc 中断且本回合还没有输出时自动撤回这条消息并回填(`ui.restoreOnCancel`)。
|
|
419
|
+
- line 模式 `/rewind <n> [both|conversation|code] [overwrite]`;RPC `get_rewind_points` / `rewind`;SDK `session.rewind()`;Hook `PostRewind`。
|
|
420
|
+
|
|
421
|
+
见 [docs/tui.md](docs/tui.md)「回滚」、[docs/rewind-plan.md](docs/rewind-plan.md) 与 [docs/sessions.md](docs/sessions.md)。
|
|
350
422
|
|
|
351
423
|
## 界面与入口
|
|
352
424
|
|
|
@@ -354,19 +426,22 @@ anthropic/<model-id> · think:medium · ↑412k ↓8.1k · cache 83% ♨ · $0.8
|
|
|
354
426
|
|
|
355
427
|
直接运行 `ama`(stdin / stdout 都是 TTY)进入交互模式。界面只用主屏,对话历史留在终端回滚里,tmux `capture-pane` 能读到完整对话。
|
|
356
428
|
|
|
357
|
-
| 按键 | 作用
|
|
358
|
-
| -------------------- |
|
|
359
|
-
| Enter | 发送;运行中插话(steer)
|
|
360
|
-
| Alt+Enter | 运行中排到本轮之后(followUp)
|
|
361
|
-
| Shift+Enter / Ctrl+J | 换行
|
|
362
|
-
| Esc | 中断当前运行
|
|
363
|
-
|
|
|
364
|
-
|
|
|
365
|
-
| Ctrl+
|
|
366
|
-
| Ctrl+
|
|
367
|
-
|
|
|
368
|
-
|
|
369
|
-
|
|
429
|
+
| 按键 | 作用 |
|
|
430
|
+
| -------------------- | -------------------------------------------------------------- |
|
|
431
|
+
| Enter | 发送;运行中插话(steer) |
|
|
432
|
+
| Alt+Enter | 运行中排到本轮之后(followUp) |
|
|
433
|
+
| Shift+Enter / Ctrl+J | 换行 |
|
|
434
|
+
| Esc | 中断当前运行 |
|
|
435
|
+
| Esc Esc(空闲) | 输入框为空:打开回滚列表(同 `/rewind`);有字:清空并存进历史 |
|
|
436
|
+
| Shift+Tab | 循环权限模式 |
|
|
437
|
+
| Ctrl+O | 展开 / 折叠工具输出 |
|
|
438
|
+
| Ctrl+L / Ctrl+T | 选择模型 / 思考级别 |
|
|
439
|
+
| Ctrl+G | 底部信息行 两行 ↔ 一行(同 `/statusline`) |
|
|
440
|
+
| Ctrl+V | 粘贴剪贴板里的图片,插入 `@<路径>`(同 `/paste`) |
|
|
441
|
+
| Ctrl+C | 清空输入;输入为空时 1.5 秒内再按一次退出 |
|
|
442
|
+
| Tab | 补全:`/` 命令、模板与 Skill,`@` 文件路径 |
|
|
443
|
+
|
|
444
|
+
常用命令:`/model`、`/thinking`、`/permission`、`/tools`、`/compact`、`/tree`(回到某条消息之前重新分支)、`/fork`、`/resume`、`/new`、`/session`、`/cache`、`/hooks`、`/skill:<名字>`、`/help`;第五波新增 `/plan`(计划面板与审批,`/plan <目标>` 进入 Plan)、`/tasks`(子 Agent 任务)、`/agents`(可用类型与外部 Agent)、`/paste`(剪贴板图片)、`/rewind`(回滚)、`/statusline [full|compact]`。输入里的 `@图片路径`(或粘贴 / 拖入的图片路径)作为图片附件发给模型;`/model` 按「供应商 · 渠道」分组,标出上下文与 `img`。按键可在 `~/.config/ama/keybindings.json` 覆盖。见 [docs/tui.md](docs/tui.md)。
|
|
370
445
|
|
|
371
446
|
`--no-tui`(或 stdin / stdout 不是 TTY、`TERM=dumb`)进入行式界面:readline + 括号粘贴,命令相同。
|
|
372
447
|
|
|
@@ -383,11 +458,12 @@ anthropic/<model-id> · think:medium · ↑412k ↓8.1k · cache 83% ♨ · $0.8
|
|
|
383
458
|
留着不关的管道不会让 `-p` 挂起;收到首字节后读到 EOF。上游命令要先跑很久才输出时,在末尾加 `-` 一直等到 EOF
|
|
384
459
|
(`npm test 2>&1 | ama -p "找出失败原因" -`);`--no-stdin` 完全不读。`< 文件` 重定向总会读取。
|
|
385
460
|
|
|
386
|
-
`--image <文件>` 可重复,随提示发送图片(PNG / JPEG / GIF / WebP
|
|
461
|
+
`--image <文件>` 可重复,随提示发送图片(PNG / JPEG / GIF / WebP,单张上限按端点分档、base64 后计:官方 Anthropic 10 MB、Gemini / OpenAI 20 MB、中转 5 MB,超限时尝试用 sips / ImageMagick 缩放);提示里的 `@图片路径` 同样作为附件。当前
|
|
387
462
|
模型不收图片时直接退出 2,不发请求。
|
|
388
463
|
|
|
389
|
-
`--max-turns N` 限制一次运行最多 N
|
|
390
|
-
`
|
|
464
|
+
`--max-turns N` 限制一次运行最多 N 轮(一次模型请求加它的工具执行算一轮),`--max-cost USD` 限制一次运行的美元用量(配置
|
|
465
|
+
`limits.maxTurns / maxCostUsd` 同义),到上限时提前结束(事件 `limit_reached`),**退出码 8**(0.4.x 的 `--max-turns` 是 1),
|
|
466
|
+
`json` 结果带 `limitReached{kind, value, limit}`(轮数到限另有 `maxTurnsReached: true`)。Plan 模式下计划待审批时退出 9(见上文「Plan」)。
|
|
391
467
|
|
|
392
468
|
`--system-prompt <文本|@文件>` 补充系统提示(任何模式都可用):缺省作为最后一条规则追加,preamble 与工具表这段最长的
|
|
393
469
|
缓存前缀不变;`--system-prompt-mode replace` 改为替换开头的角色说明,工具表、规则与 AGENTS.md 仍然保留。
|
|
@@ -399,7 +475,20 @@ anthropic/<model-id> · think:medium · ↑412k ↓8.1k · cache 83% ♨ · $0.8
|
|
|
399
475
|
工具与原因,`json` 结果带 `deniedTools`,`stream-json` 的 `tool_execution_end` 带 `denied: true`,退出码 7。需要放行时用
|
|
400
476
|
`--permission-mode auto-edit`(放行写入)/ `auto`(ama 判断每一步),或 `--allow "bash(npm test*)"` 按规则放行。
|
|
401
477
|
|
|
402
|
-
|
|
478
|
+
| 退出码 | 含义 |
|
|
479
|
+
| ------ | ------------------------------------------------------------ |
|
|
480
|
+
| 0 | 正常 |
|
|
481
|
+
| 1 | 运行期错误(模型最终失败等) |
|
|
482
|
+
| 2 | 用法错误;当前模型不收图片 |
|
|
483
|
+
| 3 | 配置 / profile / 路径错误 |
|
|
484
|
+
| 4 | 无可用模型或 key |
|
|
485
|
+
| 5 | 会话不存在 / 损坏 |
|
|
486
|
+
| 6 | 宿主 / Hook 启动失败 |
|
|
487
|
+
| 7 | `-p` 有工具调用被拒(无人审批、deny 规则、plan 等) |
|
|
488
|
+
| 8 | `-p` 到达预算上限(`--max-turns` / `--max-cost` / `limits`) |
|
|
489
|
+
| 9 | `-p` 产出的计划已落盘、待审批(`plan.unattended: stop`) |
|
|
490
|
+
| 78 | 宿主 API 版本不匹配 |
|
|
491
|
+
| 130 | SIGINT;143 = SIGTERM |
|
|
403
492
|
|
|
404
493
|
### 会话统计、检索与复用
|
|
405
494
|
|
|
@@ -423,7 +512,9 @@ ama sessions export 3f9a1c2e --format md --output s.md # md / json / jsonl,
|
|
|
423
512
|
printf '{"id":"1","type":"prompt","message":"hi"}\n' | ama --mode rpc --model fake/echo
|
|
424
513
|
```
|
|
425
514
|
|
|
426
|
-
|
|
515
|
+
`hello.capabilities` 列出服务端能力(`approvals`、`images`、`hooks`、`plans`),客户端用 `set_client_capabilities` 声明要接管的审批与计划审批。第五波新增计划(`plan_response` / `get_plan` / `get_todos`)、任务(`get_tasks` / `get_agents`)、回滚(`get_rewind_points` / `rewind` / `summarize_*`)命令与 `subagent_*`、`plan_*`、`limit_reached`、`telemetry_tick` 等事件。协议见 [docs/rpc.md](docs/rpc.md),类型从 `@armadra/agent/rpc` 导入。
|
|
516
|
+
|
|
517
|
+
`ama --mode acp` 说 ACP(JSON-RPC over NDJSON),见 [docs/acp.md](docs/acp.md)。
|
|
427
518
|
|
|
428
519
|
### SDK
|
|
429
520
|
|
|
@@ -453,10 +544,12 @@ await session.dispose();
|
|
|
453
544
|
```
|
|
454
545
|
|
|
455
546
|
- `createAgentSession` 不读文件系统配置:内存会话、指定工具、回调审批,适合嵌在别的程序里。
|
|
547
|
+
- 回滚:`session.rewindPoints()` 列出活动路径上开启新回合的用户消息;`session.rewind({ entryId, mode: "both" | "conversation" | "code", dryRun?, onConflict? })` 回到该消息之前(返回原消息草稿与代码恢复结果,内存会话只能仅对话);`session.summarizeFrom(entryId, instructions?)` / `session.summarizeUpTo(entryId, instructions?)` 对应「从这里摘要」「摘要到这里」。设计见 [docs/rewind-plan.md](docs/rewind-plan.md)。
|
|
548
|
+
- 计划:`createAgentSession({ plan: { onProposed } })` 在计划提出后回调审批(返回 `{ decision: "approve" | "approve_fresh" | "revise" | "reject", mode?, feedback? }`),或之后用 `session.plan.respond()`;`session.plan.current()` / `todos()` 读当前计划与待办。类型 `SessionPlanOptions`、`PlanDecision` 等从包入口导出,见 [docs/plan.md](docs/plan.md)「接口」。
|
|
456
549
|
- `createRuntime({ argv })` 走与 `ama` 命令行相同的启动序列(读配置、AGENTS.md、Skill、hooks.json、auth.json)。
|
|
457
|
-
- 子路径:`@armadra/agent/host`(宿主适配器类型)、`@armadra/agent/rpc`(RPC 类型)、`@armadra/agent/tui`(终端组件库)、`@armadra/agent/bundle`(单文件 `ama.cjs`,`require.resolve` 可取路径交给 `node` 或 `ELECTRON_RUN_AS_NODE=1` 启动)。
|
|
550
|
+
- 子路径:`@armadra/agent/host`(宿主适配器类型)、`@armadra/agent/rpc`(RPC 类型)、`@armadra/agent/tui`(终端组件库)、`@armadra/agent/acp`(ACP 类型、客户端、驱动与假 Agent)、`@armadra/agent/bundle`(单文件 `ama.cjs`,`require.resolve` 可取路径交给 `node` 或 `ELECTRON_RUN_AS_NODE=1` 启动)。
|
|
458
551
|
|
|
459
|
-
完整示例见 [examples/sdk-demo.ts](examples/sdk-demo.ts)(自定义工具、流式输出、用量统计)。
|
|
552
|
+
完整示例见 [examples/sdk-demo.ts](https://github.com/Owlbay/armadra-agent/blob/main/examples/sdk-demo.ts)(自定义工具、流式输出、用量统计)。
|
|
460
553
|
|
|
461
554
|
## 嵌入 Armadra
|
|
462
555
|
|
|
@@ -469,21 +562,47 @@ Armadra 以 `ama --profile <path>` 启动 ama。profile 是一个 JSON 文件,
|
|
|
469
562
|
|
|
470
563
|
## 文档
|
|
471
564
|
|
|
472
|
-
| 文档
|
|
473
|
-
|
|
|
474
|
-
| [docs/providers.md](docs/providers.md)
|
|
475
|
-
| [docs/tui.md](docs/tui.md)
|
|
476
|
-
| [docs/
|
|
477
|
-
| [docs/
|
|
478
|
-
| [docs/
|
|
479
|
-
| [docs/
|
|
480
|
-
| [docs/
|
|
481
|
-
| [docs/
|
|
482
|
-
| [docs/
|
|
483
|
-
| [docs/
|
|
484
|
-
| [docs/
|
|
485
|
-
| [docs/
|
|
486
|
-
| [docs/
|
|
565
|
+
| 文档 | 内容 |
|
|
566
|
+
| ----------------------------------------------------- | --------------------------------------------------------------------------------------- |
|
|
567
|
+
| [docs/providers.md](docs/providers.md) | 内置供应商与渠道、API Key、自定义供应商与中转站、模型元数据快照、图像输入、compat、缓存 |
|
|
568
|
+
| [docs/tui.md](docs/tui.md) | 终端界面:布局、状态栏、按键、命令、回滚、审批、Plan 审批、子 Agent、剪贴板图片、组件库 |
|
|
569
|
+
| [docs/permissions.md](docs/permissions.md) | 权限模式、plan 只读命令、判定顺序、沙箱内免审批、auto 三层判定、审批来源标注 |
|
|
570
|
+
| [docs/plan.md](docs/plan.md) | Plan 模式:流程、计划格式、审批、分模型、配置与持久化 |
|
|
571
|
+
| [docs/agents.md](docs/agents.md) | 子 Agent(类型、定义文件、后台、续聊、worktree)与外部 Agent(驱动、权限、环境、预算) |
|
|
572
|
+
| [docs/acp.md](docs/acp.md) | ACP:`ama --mode acp` 与 ama 作为 ACP 客户端 |
|
|
573
|
+
| [docs/sandbox.md](docs/sandbox.md) | 操作系统沙箱:codemode 与 bash、各平台实现、配置与已知绕过 |
|
|
574
|
+
| [docs/codemode.md](docs/codemode.md) | codemode 脚本、沙箱与权限 |
|
|
575
|
+
| [docs/hooks.md](docs/hooks.md) | 命令式 Hook(hooks.json) |
|
|
576
|
+
| [docs/host-api.md](docs/host-api.md) | 宿主适配器 API |
|
|
577
|
+
| [docs/rpc.md](docs/rpc.md) | RPC 协议(stdio JSONL) |
|
|
578
|
+
| [docs/session-format.md](docs/session-format.md) | 会话文件格式 |
|
|
579
|
+
| [docs/sessions.md](docs/sessions.md) | 会话统计、检索、`--from` 复用、导出、检查点与影子 git |
|
|
580
|
+
| [docs/rewind-plan.md](docs/rewind-plan.md) | 检查点与回滚的设计 |
|
|
581
|
+
| [docs/tui-design.md](docs/tui-design.md) | 终端界面视觉规格与逐屏样稿 |
|
|
582
|
+
| [docs/design.md][design] | 总体设计与决策记录(第五波增补指引在 §0 之后) |
|
|
583
|
+
| [docs/extensions.md][extensions] | 本地扩展(设计草案,未实现) |
|
|
584
|
+
| [docs/benchmarks/][benchmarks] | 预设基准、D20 todo 复测与缓存验收实验(报告与原始数据) |
|
|
585
|
+
| [docs/wave5-plan.md][wave5] | 第五波设计:状态行、模型元数据、渠道、图像、外部 Agent、Plan、子 Agent、压缩与 harness |
|
|
586
|
+
| [docs/implementation-plan.md][impl]、[wave3-plan][w3] | 早期实施计划(追溯用) |
|
|
587
|
+
| [docs/research/][research] | 第五波调研报告(追溯用) |
|
|
588
|
+
|
|
589
|
+
npm 包里带上表前十五份(用户文档);其余是设计与追溯材料,链接指向 GitHub。
|
|
590
|
+
|
|
591
|
+
[design]: https://github.com/Owlbay/armadra-agent/blob/main/docs/design.md
|
|
592
|
+
[extensions]: https://github.com/Owlbay/armadra-agent/blob/main/docs/extensions.md
|
|
593
|
+
[benchmarks]: https://github.com/Owlbay/armadra-agent/tree/main/docs/benchmarks
|
|
594
|
+
[wave5]: https://github.com/Owlbay/armadra-agent/blob/main/docs/wave5-plan.md
|
|
595
|
+
[impl]: https://github.com/Owlbay/armadra-agent/blob/main/docs/implementation-plan.md
|
|
596
|
+
[w3]: https://github.com/Owlbay/armadra-agent/blob/main/docs/wave3-plan.md
|
|
597
|
+
[research]: https://github.com/Owlbay/armadra-agent/tree/main/docs/research
|
|
598
|
+
|
|
599
|
+
## 已知限制
|
|
600
|
+
|
|
601
|
+
- **Linux 沙箱未在真机上验证**:bubblewrap 的策略只经单元测试与 Ubuntu CI 验证,没有在 Linux 桌面 / 服务器真机上跑过;没有 bwrap 时退到 `unshare -r -n`(只隔离网络,不能用于 bash 沙箱),都没有则按无沙箱处理(codemode 回到执行类、每次审批)。
|
|
602
|
+
- **外部 Agent 的真实 CLI 测试只在本地跑**:CI 只跑录制回放与 ama 驱动 ama;接 `claude` / `codex` 的端到端需要本机已登录,`AMA_E2E_AGENTS=1` 时运行(会用你的订阅额度),见 [docs/agents.md](docs/agents.md)「本地验证真实 CLI」。
|
|
603
|
+
- **DeepSeek、智谱、Kimi 缺省仍走 Chat**:它们的 Messages 渠道(`@messages`)只在中转上测过,等官方直连过了实测门(`scripts/channel-probe.mjs`)再切缺省。
|
|
604
|
+
- **models.dev 刷新 PR 不自动触发 CI**:仓库 secret `MODELS_DEV_PR_TOKEN` 没配时,每周的 workflow 用缺省 token 开 PR(先在 workflow 里自跑 `pnpm run ci` 并把结果写进描述)。
|
|
605
|
+
- 子 Agent 深度 1,不读 `.claude/agents`,不支持继承父对话的 fork 模式;Windows 没有操作系统沙箱。
|
|
487
606
|
|
|
488
607
|
## 开发
|
|
489
608
|
|
|
@@ -492,7 +611,7 @@ Armadra 以 `ama --profile <path>` 启动 ama。profile 是一个 JSON 文件,
|
|
|
492
611
|
```sh
|
|
493
612
|
pnpm install
|
|
494
613
|
pnpm run ci # typecheck、fmt:check、check:deps、release:check、test、build,再跑 bundle --version
|
|
495
|
-
AMA_E2E=1 pnpm test:e2e # bundle 级端到端:print / rpc / codemode / cache / host(fake 供应商,不花钱)
|
|
614
|
+
AMA_E2E=1 pnpm test:e2e # bundle 级端到端:print / rpc / acp / plan / 子 Agent / 回滚 / codemode / cache / host(fake 供应商,不花钱)
|
|
496
615
|
```
|
|
497
616
|
|
|
498
617
|
pnpm 10 起 `pnpm ci` 是内置的「清理后安装」,跑检查要写 `pnpm run ci`。常用单项:`pnpm test`、`pnpm typecheck`、`pnpm fmt`、`pnpm build`。测试一律用 fake 供应商:`AMA_FAKE_SCRIPT=<脚本.json>` 让它按脚本产出文本、工具调用、429、断流等,示例在 `test/fixtures/scripts/`。
|
|
@@ -501,7 +620,7 @@ pnpm 10 起 `pnpm ci` 是内置的「清理后安装」,跑检查要写 `pnpm
|
|
|
501
620
|
|
|
502
621
|
| 脚本 | 用途 |
|
|
503
622
|
| --------------------------------------------------------- | ------------------------------------- |
|
|
504
|
-
| `node scripts/bench-presets.mjs`(`pnpm bench:presets`) |
|
|
623
|
+
| `node scripts/bench-presets.mjs`(`pnpm bench:presets`) | 预设基准(`--tasks long` 多步长任务) |
|
|
505
624
|
| `node scripts/cache-experiment.mjs`(`pnpm bench:cache`) | 缓存验收实验 E1–E5 |
|
|
506
625
|
| `node scripts/record-sse.mjs` | 录制各协议的 SSE 样本作为测试 fixture |
|
|
507
626
|
|
|
@@ -0,0 +1,34 @@
|
|
|
1
|
+
# 第三方声明
|
|
2
|
+
|
|
3
|
+
ama 自身以 MIT 许可发布(见 `LICENSE`)。以下第三方内容随 ama 分发,按各自许可保留声明。
|
|
4
|
+
|
|
5
|
+
## models.dev
|
|
6
|
+
|
|
7
|
+
- 内容:模型元数据快照(`src/ai/providers/models-dev/*.json` 及由它生成、内联进 bundle 的 `src/ai/providers/models-dev-data.ts`),由 `scripts/update-models-dev.mjs` 从 <https://models.dev/api.json> 裁剪而来;`ama models refresh` 写到用户数据目录的覆盖文件同源。
|
|
8
|
+
- 来源:<https://github.com/anomalyco/models.dev>(原 `sst/models.dev`)。
|
|
9
|
+
- 未分发 models.dev 的 logo 或其它图形资源。
|
|
10
|
+
- 许可:MIT
|
|
11
|
+
|
|
12
|
+
```text
|
|
13
|
+
MIT License
|
|
14
|
+
|
|
15
|
+
Copyright (c) 2025 models.dev
|
|
16
|
+
|
|
17
|
+
Permission is hereby granted, free of charge, to any person obtaining a copy
|
|
18
|
+
of this software and associated documentation files (the "Software"), to deal
|
|
19
|
+
in the Software without restriction, including without limitation the rights
|
|
20
|
+
to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
|
|
21
|
+
copies of the Software, and to permit persons to whom the Software is
|
|
22
|
+
furnished to do so, subject to the following conditions:
|
|
23
|
+
|
|
24
|
+
The above copyright notice and this permission notice shall be included in all
|
|
25
|
+
copies or substantial portions of the Software.
|
|
26
|
+
|
|
27
|
+
THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
|
|
28
|
+
IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
|
|
29
|
+
FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
|
|
30
|
+
AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
|
|
31
|
+
LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
|
|
32
|
+
OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
|
|
33
|
+
SOFTWARE.
|
|
34
|
+
```
|
package/dist/acp.d.ts
ADDED
|
@@ -0,0 +1,18 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* `@armadra/agent/acp` 子路径(docs/wave5-plan.md §5.1,D14)。[W5-C0 / W5-E]
|
|
3
|
+
*
|
|
4
|
+
* 供 Armadra 等宿主复用 ama 的 ACP 协议栈(只维护一份):
|
|
5
|
+
* - 驱动契约(ACP 词汇)与 ACP v1 子集类型;
|
|
6
|
+
* - NDJSON 分帧与 JSON-RPC 对等端;ACP 客户端 `AcpClient` 与驱动 `AcpDriver`;
|
|
7
|
+
* - 假 ACP Agent(进程内 `runFakeAcpAgent`,或 `fakeAcpAgentPath()` 起子进程),用于黄金记录。
|
|
8
|
+
*/
|
|
9
|
+
export type * from "./drivers/types.js";
|
|
10
|
+
export type * from "./drivers/acp/types.js";
|
|
11
|
+
export { ACP_METHODS, ACP_PROTOCOL_VERSION, RPC_ERRORS } from "./drivers/acp/types.js";
|
|
12
|
+
export { WRITE_CHUNK_BYTES, createLineReader, writeChunked, type LineReader, } from "./modes/rpc/jsonl.js";
|
|
13
|
+
export { JsonRpcPeer, RpcError, type IncomingRequestContext, type JsonRpcPeerOptions, type RpcId, } from "./drivers/jsonrpc.js";
|
|
14
|
+
export { AcpClient, unattendedOutcome, type AcpClientHandlers, type AcpClientOptions, } from "./drivers/acp/client.js";
|
|
15
|
+
export { AcpDriver } from "./drivers/acp/driver.js";
|
|
16
|
+
export { runFakeAcpAgent, type FakeAcpAgentOptions } from "./drivers/acp/testing/fake-agent.js";
|
|
17
|
+
/** 假 ACP Agent 的可执行入口(`node <path> [--minimal]`);只在已编译的包里存在。 */
|
|
18
|
+
export declare function fakeAcpAgentPath(): string;
|
package/dist/acp.js
ADDED
|
@@ -0,0 +1,19 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* `@armadra/agent/acp` 子路径(docs/wave5-plan.md §5.1,D14)。[W5-C0 / W5-E]
|
|
3
|
+
*
|
|
4
|
+
* 供 Armadra 等宿主复用 ama 的 ACP 协议栈(只维护一份):
|
|
5
|
+
* - 驱动契约(ACP 词汇)与 ACP v1 子集类型;
|
|
6
|
+
* - NDJSON 分帧与 JSON-RPC 对等端;ACP 客户端 `AcpClient` 与驱动 `AcpDriver`;
|
|
7
|
+
* - 假 ACP Agent(进程内 `runFakeAcpAgent`,或 `fakeAcpAgentPath()` 起子进程),用于黄金记录。
|
|
8
|
+
*/
|
|
9
|
+
import { fileURLToPath } from "node:url";
|
|
10
|
+
export { ACP_METHODS, ACP_PROTOCOL_VERSION, RPC_ERRORS } from "./drivers/acp/types.js";
|
|
11
|
+
export { WRITE_CHUNK_BYTES, createLineReader, writeChunked, } from "./modes/rpc/jsonl.js";
|
|
12
|
+
export { JsonRpcPeer, RpcError, } from "./drivers/jsonrpc.js";
|
|
13
|
+
export { AcpClient, unattendedOutcome, } from "./drivers/acp/client.js";
|
|
14
|
+
export { AcpDriver } from "./drivers/acp/driver.js";
|
|
15
|
+
export { runFakeAcpAgent } from "./drivers/acp/testing/fake-agent.js";
|
|
16
|
+
/** 假 ACP Agent 的可执行入口(`node <path> [--minimal]`);只在已编译的包里存在。 */
|
|
17
|
+
export function fakeAcpAgentPath() {
|
|
18
|
+
return fileURLToPath(new URL("./drivers/acp/testing/fake-agent-main.js", import.meta.url));
|
|
19
|
+
}
|
|
@@ -0,0 +1,38 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* 会话预算(docs/wave5-plan.md §8.3 H2,D29):`--max-turns` / `--max-cost` / config `limits.*`。[W5-H2]
|
|
3
|
+
*
|
|
4
|
+
* 以 `SessionExtension` 实现(只装主会话;task 子会话有自己的 maxTurns):
|
|
5
|
+
* - **回合**:每个会话周期(`before_agent_start` 起)累计助手回复(error / aborted 不算);第 N 次回复
|
|
6
|
+
* 带工具调用时 `requestStop`——本轮工具照常执行,之后结束 run(与原 `--max-turns` 语义一致:
|
|
7
|
+
* 「一次模型请求加其工具执行算一轮」;第 N 次回复不再调用工具时自然结束,不算到限)。
|
|
8
|
+
* - **费用**:同样按会话周期累计助手回复的 `usage.cost.total` 与子 Agent `subagent_end` 的用量
|
|
9
|
+
* (模型无价格时为 0,不会到限);某次回复后累计 ≥ 上限且还要调用工具 → 同样结束 run。本周期内
|
|
10
|
+
* 之后的 turn 请求(重试、Stop Hook 续跑等)在发出前被拦下(`wrapStream`,返回 `limit_reached:`
|
|
11
|
+
* 开头的错误回复,不重试、不计费)。两项都是「一次运行」(config 说明与 `--max-cost` 的口径)。
|
|
12
|
+
* - 到限:发 `limit_reached{kind, value, limit}`(每周期每类一次),`agent_settled{warning:"limit_reached"}`,
|
|
13
|
+
* `-p` 以退出码 8 结束(print-mode.ts)。交互与 RPC 同样生效。
|
|
14
|
+
* - `budgetOf(core)` 给提醒通道(reminders.ts)读当前用量(预算剩余 < 20% 提醒)。
|
|
15
|
+
*/
|
|
16
|
+
import type { SessionCore } from "./session-core.js";
|
|
17
|
+
import type { SessionExtension } from "./session-extensions.js";
|
|
18
|
+
import { LIMIT_ERROR_PREFIX } from "./session-run.js";
|
|
19
|
+
import type { SessionLimits } from "./types.js";
|
|
20
|
+
export declare const LIMIT_REACHED = "limit_reached";
|
|
21
|
+
export { LIMIT_ERROR_PREFIX };
|
|
22
|
+
export interface BudgetState {
|
|
23
|
+
/** 本周期的助手回复数。 */
|
|
24
|
+
turns: number;
|
|
25
|
+
maxTurns?: number;
|
|
26
|
+
/** 本周期累计美元(模型无价格时为 0)。 */
|
|
27
|
+
spentUsd: number;
|
|
28
|
+
maxCostUsd?: number;
|
|
29
|
+
}
|
|
30
|
+
/** 当前会话的预算状态(未设上限 / 未装扩展时 undefined)。 */
|
|
31
|
+
export declare function budgetOf(core: SessionCore): Readonly<BudgetState> | undefined;
|
|
32
|
+
/** 合并:`--max-turns` / `--max-cost` 覆盖 config `limits.*`;全空返回 undefined。 */
|
|
33
|
+
export declare function resolveLimits(config: SessionLimits | undefined, overrides?: {
|
|
34
|
+
maxTurns?: number | undefined;
|
|
35
|
+
maxCostUsd?: number | undefined;
|
|
36
|
+
}): SessionLimits | undefined;
|
|
37
|
+
export declare function formatUsd(value: number): string;
|
|
38
|
+
export declare function createLimitsExtension(core: SessionCore, limits: SessionLimits | undefined): SessionExtension | undefined;
|