@armadra/agent 0.3.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 +257 -0
- package/README.md +263 -95
- 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/retry.d.ts +1 -1
- package/dist/agent/retry.js +2 -1
- package/dist/agent/session-cache.d.ts +5 -0
- package/dist/agent/session-cache.js +18 -2
- package/dist/agent/session-classifier.d.ts +18 -0
- package/dist/agent/session-classifier.js +105 -0
- package/dist/agent/session-compaction.d.ts +35 -6
- package/dist/agent/session-compaction.js +157 -31
- package/dist/agent/session-core.d.ts +40 -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 +63 -3
- package/dist/agent/session.d.ts +33 -29
- package/dist/agent/session.js +91 -126
- 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 +72 -6
- package/dist/agent/types-w5.d.ts +192 -0
- package/dist/agent/types-w5.js +10 -0
- package/dist/agent/types.d.ts +55 -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-messages.js +3 -2
- 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/google-generative-ai.js +3 -2
- package/dist/ai/apis/openai-compat.d.ts +4 -1
- package/dist/ai/apis/openai-compat.js +8 -1
- package/dist/ai/apis/openai-completions.js +3 -2
- package/dist/ai/apis/openai-responses.js +3 -2
- package/dist/ai/http.d.ts +28 -6
- package/dist/ai/http.js +41 -8
- 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 +28 -11
- package/dist/ai/providers/registry.js +112 -65
- package/dist/ai/providers/suggest.d.ts +18 -0
- package/dist/ai/providers/suggest.js +72 -0
- package/dist/ai/sse.d.ts +6 -2
- package/dist/ai/sse.js +22 -2
- package/dist/ai/types.d.ts +37 -4
- package/dist/ai/types.js +5 -0
- package/dist/bundle/ama.cjs +41979 -21147
- 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 +26 -7
- package/dist/cli/args.js +75 -82
- package/dist/cli/bootstrap.js +40 -4
- package/dist/cli/codemode-notice.d.ts +21 -0
- package/dist/cli/codemode-notice.js +56 -0
- 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 +8 -0
- package/dist/cli/compose-session.js +76 -2
- package/dist/cli/compose-store.d.ts +1 -1
- package/dist/cli/compose-store.js +3 -1
- package/dist/cli/compose.d.ts +17 -4
- package/dist/cli/compose.js +60 -14
- package/dist/cli/default-model.d.ts +38 -1
- package/dist/cli/default-model.js +96 -9
- package/dist/cli/deps.d.ts +42 -0
- package/dist/cli/exit-codes.d.ts +12 -0
- package/dist/cli/exit-codes.js +15 -0
- package/dist/cli/fake-visibility.d.ts +13 -0
- package/dist/cli/fake-visibility.js +26 -0
- package/dist/cli/from-prompt.d.ts +18 -0
- package/dist/cli/from-prompt.js +49 -0
- package/dist/cli/help-text.d.ts +4 -0
- package/dist/cli/help-text.js +102 -0
- package/dist/cli/main.d.ts +9 -2
- package/dist/cli/main.js +77 -3
- package/dist/cli/proxy.d.ts +51 -0
- package/dist/cli/proxy.js +135 -0
- package/dist/cli/startup-screen.d.ts +29 -0
- package/dist/cli/startup-screen.js +51 -2
- package/dist/cli/startup-steps.d.ts +1 -1
- package/dist/cli/startup-steps.js +21 -13
- package/dist/cli/subcommands/config.d.ts +22 -3
- package/dist/cli/subcommands/config.js +119 -21
- package/dist/cli/subcommands/context.js +4 -1
- package/dist/cli/subcommands/doctor.js +33 -1
- package/dist/cli/subcommands/init.js +2 -1
- package/dist/cli/subcommands/models-discover.d.ts +15 -9
- package/dist/cli/subcommands/models-discover.js +58 -52
- package/dist/cli/subcommands/models.d.ts +2 -0
- package/dist/cli/subcommands/models.js +33 -14
- package/dist/cli/subcommands/probe-runner.d.ts +96 -0
- package/dist/cli/subcommands/probe-runner.js +264 -0
- package/dist/cli/subcommands/providers-probe.d.ts +34 -0
- package/dist/cli/subcommands/providers-probe.js +87 -0
- package/dist/cli/subcommands/providers.d.ts +3 -2
- package/dist/cli/subcommands/providers.js +53 -51
- package/dist/cli/subcommands/sessions-export.d.ts +10 -0
- package/dist/cli/subcommands/sessions-export.js +59 -0
- package/dist/cli/subcommands/sessions-search.d.ts +13 -0
- package/dist/cli/subcommands/sessions-search.js +103 -0
- package/dist/cli/subcommands/sessions.d.ts +6 -3
- package/dist/cli/subcommands/sessions.js +58 -3
- package/dist/cli/subcommands/stats.d.ts +17 -0
- package/dist/cli/subcommands/stats.js +198 -0
- package/dist/cli/system-prompt-arg.d.ts +11 -0
- package/dist/cli/system-prompt-arg.js +34 -0
- 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/modes.d.ts +4 -11
- package/dist/codemode/modes.js +5 -27
- package/dist/codemode/tool.d.ts +18 -14
- package/dist/codemode/tool.js +76 -31
- 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/init.d.ts +6 -2
- package/dist/config/init.js +12 -5
- package/dist/config/json-schema.d.ts +1 -0
- package/dist/config/json-schema.js +98 -4
- package/dist/config/key-docs.d.ts +22 -0
- package/dist/config/key-docs.js +174 -0
- package/dist/config/merge.d.ts +12 -9
- package/dist/config/merge.js +102 -13
- 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 +91 -118
- package/dist/config/types-w5.d.ts +118 -0
- package/dist/config/types-w5.js +20 -0
- package/dist/config/types.d.ts +84 -7
- package/dist/config/types.js +29 -1
- 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 +61 -5
- 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 +40 -7
- package/dist/modes/interactive/approval-dialog.js +192 -35
- 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 +20 -3
- package/dist/modes/interactive/commands.js +75 -16
- 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 +16 -2
- package/dist/modes/interactive/interactive-mode.js +184 -202
- package/dist/modes/interactive/key-dispatch.d.ts +18 -2
- package/dist/modes/interactive/key-dispatch.js +53 -6
- package/dist/modes/interactive/line/line-mode.d.ts +3 -1
- package/dist/modes/interactive/line/line-mode.js +28 -9
- package/dist/modes/interactive/line/line-render.d.ts +6 -1
- package/dist/modes/interactive/line/line-render.js +66 -8
- package/dist/modes/interactive/message-view.d.ts +49 -10
- package/dist/modes/interactive/message-view.js +262 -46
- package/dist/modes/interactive/panels.d.ts +35 -0
- package/dist/modes/interactive/panels.js +157 -0
- package/dist/modes/interactive/pickers.d.ts +23 -2
- package/dist/modes/interactive/pickers.js +48 -15
- 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/run-indicator.d.ts +51 -0
- package/dist/modes/interactive/run-indicator.js +189 -0
- package/dist/modes/interactive/session-events.d.ts +24 -0
- package/dist/modes/interactive/session-events.js +96 -0
- package/dist/modes/interactive/startup-header.d.ts +40 -0
- package/dist/modes/interactive/startup-header.js +169 -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 +107 -16
- package/dist/modes/interactive/status-bar.js +306 -81
- 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-summary.d.ts +46 -0
- package/dist/modes/interactive/tool-summary.js +218 -0
- package/dist/modes/interactive/tool-view.d.ts +58 -15
- package/dist/modes/interactive/tool-view.js +233 -145
- package/dist/modes/print/print-mode.d.ts +40 -4
- package/dist/modes/print/print-mode.js +161 -8
- package/dist/modes/rpc/commands.d.ts +9 -0
- package/dist/modes/rpc/commands.js +49 -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 +65 -0
- package/dist/permissions/auto-safe.js +547 -0
- package/dist/permissions/classifier.d.ts +68 -0
- package/dist/permissions/classifier.js +186 -0
- package/dist/permissions/dangerous.d.ts +5 -0
- package/dist/permissions/dangerous.js +1 -1
- package/dist/permissions/modes.d.ts +30 -0
- package/dist/permissions/modes.js +78 -0
- package/dist/permissions/pipeline.d.ts +72 -6
- package/dist/permissions/pipeline.js +306 -11
- package/dist/permissions/protected.d.ts +19 -0
- package/dist/permissions/protected.js +74 -0
- package/dist/permissions/readonly-bash.d.ts +30 -0
- package/dist/permissions/readonly-bash.js +118 -0
- package/dist/permissions/rules.js +3 -0
- package/dist/permissions/types.d.ts +92 -3
- package/dist/permissions/types.js +3 -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 +42 -5
- package/dist/sdk.js +34 -4
- package/dist/session/export.d.ts +32 -0
- package/dist/session/export.js +187 -0
- package/dist/session/redact.d.ts +15 -0
- package/dist/session/redact.js +55 -0
- package/dist/session/reuse.d.ts +33 -0
- package/dist/session/reuse.js +86 -0
- package/dist/session/scan.d.ts +34 -0
- package/dist/session/scan.js +140 -0
- package/dist/session/search.d.ts +52 -0
- package/dist/session/search.js +211 -0
- package/dist/session/stats-aggregate.d.ts +63 -0
- package/dist/session/stats-aggregate.js +163 -0
- package/dist/session/stats-index.d.ts +26 -0
- package/dist/session/stats-index.js +91 -0
- package/dist/session/stats-scan.d.ts +54 -0
- package/dist/session/stats-scan.js +236 -0
- 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 +40 -8
- package/dist/tools/presets.js +65 -19
- 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/component.d.ts +8 -2
- package/dist/tui/component.js +3 -1
- package/dist/tui/components/box.d.ts +6 -1
- package/dist/tui/components/box.js +16 -6
- package/dist/tui/components/card.d.ts +23 -0
- package/dist/tui/components/card.js +37 -0
- package/dist/tui/components/editor-history.d.ts +6 -0
- package/dist/tui/components/editor-history.js +45 -0
- package/dist/tui/components/editor-paste.d.ts +1 -1
- package/dist/tui/components/editor-paste.js +4 -4
- package/dist/tui/components/editor.d.ts +11 -5
- package/dist/tui/components/editor.js +52 -58
- package/dist/tui/components/key-value.d.ts +3 -0
- package/dist/tui/components/key-value.js +16 -6
- package/dist/tui/components/loader.d.ts +37 -7
- package/dist/tui/components/loader.js +84 -21
- package/dist/tui/components/markdown.d.ts +5 -1
- package/dist/tui/components/markdown.js +45 -21
- package/dist/tui/components/meter.d.ts +3 -3
- package/dist/tui/components/meter.js +13 -11
- package/dist/tui/components/select-list.d.ts +23 -1
- package/dist/tui/components/select-list.js +76 -13
- package/dist/tui/glyphs.d.ts +72 -0
- package/dist/tui/glyphs.js +118 -0
- package/dist/tui/keybindings.d.ts +5 -0
- package/dist/tui/keybindings.js +5 -0
- package/dist/tui/theme.d.ts +30 -6
- package/dist/tui/theme.js +103 -17
- package/dist/tui.d.ts +4 -2
- package/dist/tui.js +3 -1
- package/docs/acp.md +78 -0
- package/docs/agents.md +250 -0
- package/docs/codemode.md +28 -10
- package/docs/hooks.md +36 -32
- package/docs/permissions.md +212 -0
- package/docs/plan.md +107 -0
- package/docs/providers.md +261 -62
- package/docs/rewind-plan.md +181 -0
- package/docs/rpc.md +127 -40
- package/docs/sandbox.md +215 -0
- package/docs/session-format.md +43 -22
- package/docs/sessions.md +174 -0
- package/docs/tui-design.md +751 -0
- package/docs/tui.md +260 -64
- package/package.json +15 -2
package/docs/providers.md
CHANGED
|
@@ -5,7 +5,7 @@
|
|
|
5
5
|
## 配置目录
|
|
6
6
|
|
|
7
7
|
缺省 `~/.config/ama/`(Windows `%APPDATA%\ama\`;`AMA_CONFIG_DIR` 优先,其次 `XDG_CONFIG_HOME/ama`)。数据
|
|
8
|
-
(会话、models.dev
|
|
8
|
+
(会话、models.dev 刷新覆盖)在另一个目录:`~/.local/share/ama/`(`AMA_DATA_DIR` / `XDG_DATA_HOME`)。
|
|
9
9
|
|
|
10
10
|
```
|
|
11
11
|
~/.config/ama/ 0700
|
|
@@ -17,28 +17,28 @@
|
|
|
17
17
|
└── skills/ prompts/ (按需)
|
|
18
18
|
~/.local/share/ama/
|
|
19
19
|
├── sessions/ 会话
|
|
20
|
-
└── models-dev.json models.dev
|
|
20
|
+
└── models-dev.json models.dev 刷新覆盖(只有 ama models refresh 写)
|
|
21
21
|
```
|
|
22
22
|
|
|
23
23
|
- `ama init`:建目录(0700)并补齐缺失的 `config.json` 与 `config.schema.json`,逐个打印「已创建」或
|
|
24
24
|
「已存在,未改动」;已存在的 `config.json` 一律不覆盖(`--force` 也不),`config.schema.json` 不是用户文件,
|
|
25
25
|
每次 `init` 都重写为当前版本;不创建空的 `auth.json`。
|
|
26
|
-
-
|
|
27
|
-
(`AMA_NO_INIT=1` 关闭;SDK
|
|
26
|
+
- **首次运行自动初始化**:进入对话的命令(交互、`-p`、`--mode rpc`)与 `ama providers add` 启动时若配置目录不存在,
|
|
27
|
+
静默建目录并写最小 `config.json` 与 schema(`AMA_NO_INIT=1` 关闭;SDK 与测试不触发)。只读子命令(`config show` /
|
|
28
|
+
`path`、`doctor`、`models list`、`providers list`、`auth list`、`sessions` 等)不创建也不改写配置目录。
|
|
28
29
|
- 最小 `config.json`:
|
|
29
30
|
|
|
30
31
|
```json
|
|
31
32
|
{
|
|
32
33
|
"$schema": "./config.schema.json",
|
|
33
34
|
"version": 1,
|
|
34
|
-
"thinkingLevel": "medium",
|
|
35
|
-
"permission": { "mode": "default" },
|
|
36
|
-
"tools": { "preset": "default" },
|
|
37
35
|
"providers": {}
|
|
38
36
|
}
|
|
39
37
|
```
|
|
40
38
|
|
|
41
|
-
|
|
39
|
+
不写任何缺省值(缺省值调整时老配置同样生效,`ama config show` 里来源也显示 default),也不写
|
|
40
|
+
`defaultModel`(见下文「缺省模型」)。`ama init` 结束时打印下一步(`ama auth set` / `ama providers add` /
|
|
41
|
+
`ama doctor`)。`config.schema.json` 里每个键都带说明与缺省值(运行时决定的键只写规则),编辑器悬停可见。
|
|
42
42
|
|
|
43
43
|
- `ama config path`:打印配置目录、数据目录与各文件路径(标出是否存在);`ama config edit`:用
|
|
44
44
|
`$VISUAL` / `$EDITOR` 打开 `config.json`(不存在先 `init`),没有编辑器时打印路径。
|
|
@@ -75,26 +75,89 @@
|
|
|
75
75
|
|
|
76
76
|
## 内置供应商
|
|
77
77
|
|
|
78
|
-
| id |
|
|
79
|
-
| ------------ |
|
|
80
|
-
| `anthropic` |
|
|
81
|
-
| `openai` |
|
|
82
|
-
| `google` |
|
|
83
|
-
| `deepseek` |
|
|
84
|
-
| `moonshot` |
|
|
85
|
-
| `zhipu` |
|
|
86
|
-
| `dashscope` |
|
|
87
|
-
| `openrouter` |
|
|
88
|
-
| `groq` |
|
|
89
|
-
| `xai` |
|
|
90
|
-
| `mistral` |
|
|
91
|
-
| `
|
|
92
|
-
| `
|
|
78
|
+
| id | 渠道(**粗体**为缺省) | 缺省地址 | API Key 环境变量(顺序) |
|
|
79
|
+
| ------------ | ------------------------------------------------------------------------------------- | -------------------------------------------------- | ------------------------------------------------------------- |
|
|
80
|
+
| `anthropic` | 单渠道 messages | `https://api.anthropic.com` | `ANTHROPIC_API_KEY`、`AMA_API_KEY_ANTHROPIC` |
|
|
81
|
+
| `openai` | **responses**、chat | `https://api.openai.com/v1` | `OPENAI_API_KEY`、`AMA_API_KEY_OPENAI` |
|
|
82
|
+
| `google` | 单渠道 gemini | `https://generativelanguage.googleapis.com/v1beta` | `GEMINI_API_KEY`、`GOOGLE_API_KEY`、`AMA_API_KEY_GOOGLE` |
|
|
83
|
+
| `deepseek` | **chat**、messages(`/anthropic`) | `https://api.deepseek.com` | `DEEPSEEK_API_KEY`、`AMA_API_KEY_DEEPSEEK` |
|
|
84
|
+
| `moonshot` | **chat**、messages、responses、chat-intl、messages-intl(`.ai`) | `https://api.moonshot.cn/v1` | `MOONSHOT_API_KEY`、`KIMI_API_KEY`、`AMA_API_KEY_MOONSHOT` |
|
|
85
|
+
| `zhipu` | **chat**、messages(`/api/anthropic`)、chat-intl、messages-intl(`api.z.ai`) | `https://open.bigmodel.cn/api/paas/v4` | `ZHIPU_API_KEY`、`ZAI_API_KEY`、`AMA_API_KEY_ZHIPU` |
|
|
86
|
+
| `dashscope` | **messages**(`/apps/anthropic`)、responses、chat、messages-intl、chat-intl | `https://dashscope.aliyuncs.com/apps/anthropic` | `DASHSCOPE_API_KEY`、`QWEN_API_KEY`、`AMA_API_KEY_DASHSCOPE` |
|
|
87
|
+
| `openrouter` | 单渠道 chat | `https://openrouter.ai/api/v1` | `OPENROUTER_API_KEY`、`AMA_API_KEY_OPENROUTER` |
|
|
88
|
+
| `groq` | 单渠道 chat | `https://api.groq.com/openai/v1` | `GROQ_API_KEY`、`AMA_API_KEY_GROQ` |
|
|
89
|
+
| `xai` | **responses**、chat | `https://api.x.ai/v1` | `XAI_API_KEY`、`AMA_API_KEY_XAI` |
|
|
90
|
+
| `mistral` | 单渠道 chat | `https://api.mistral.ai/v1` | `MISTRAL_API_KEY`、`AMA_API_KEY_MISTRAL` |
|
|
91
|
+
| `minimax` | **messages**、responses(只 M3)、chat、messages-intl、chat-intl(`api.minimax.io`) | `https://api.minimax.cn/anthropic` | `MINIMAX_API_KEY`、`AMA_API_KEY_MINIMAX` |
|
|
92
|
+
| `stepfun` | **messages**、chat、responses(只 step-5-preview)、messages-intl、chat-intl(`.ai`) | `https://api.stepfun.com` | `STEPFUN_API_KEY`、`STEP_API_KEY`、`AMA_API_KEY_STEPFUN` |
|
|
93
|
+
| `volcengine` | **responses**、chat | `https://ark.cn-beijing.volces.com/api/v3` | `ARK_API_KEY`、`VOLCENGINE_API_KEY`、`AMA_API_KEY_VOLCENGINE` |
|
|
94
|
+
| `tencent` | **messages**、chat(`/v1`) | `https://tokenhub.tencentmaas.com` | `TOKENHUB_API_KEY`、`HUNYUAN_API_KEY`、`AMA_API_KEY_TENCENT` |
|
|
95
|
+
| `ollama` | 单渠道 chat | `http://127.0.0.1:11434/v1` | 可无(`OLLAMA_API_KEY`) |
|
|
96
|
+
| `lmstudio` | 单渠道 chat | `http://127.0.0.1:1234/v1` | 可无 |
|
|
93
97
|
|
|
94
98
|
另有测试用供应商 `fake`(模型 `fake/echo`、`fake/reasoning`),见下文。
|
|
95
99
|
|
|
96
|
-
|
|
97
|
-
|
|
100
|
+
**缺省协议**:Messages / Responses 优先、Chat 回落。能执行显式缓存的 Messages 端点(通义、MiniMax M2.x、腾讯)与
|
|
101
|
+
官方推荐 Messages 的阶跃缺省 messages;OpenAI、xAI、火山方舟缺省 responses;DeepSeek、智谱、Kimi 只有隐式缓存,
|
|
102
|
+
**缺省保持 chat,直到官方直连过了实测门**(见「渠道实测」)再改,切换只是 `builtin.ts` 里一行 `defaultChannel`。
|
|
103
|
+
|
|
104
|
+
**内置渠道**(与用户的[渠道](#渠道channels一个供应商多种接口)同一机制):
|
|
105
|
+
|
|
106
|
+
- `provider/model@channel` 选渠道,例如 `deepseek/deepseek-v4-pro@messages`、`dashscope/qwen3.8-max@chat-intl`;
|
|
107
|
+
目录模型缺省挂全部渠道,目录可按模型限定(MiniMax M2.x、阶跃 step-3.x 没有 responses)。
|
|
108
|
+
- 改缺省:`"providers": { "deepseek": { "defaultChannel": "messages" } }`;或只写协议
|
|
109
|
+
`"api": "anthropic-messages"`,选同协议的内置渠道。
|
|
110
|
+
- 改某个渠道:`channels.<内置渠道名>` 只写要改的字段(`headers` / `compat` 合并一层,其余覆盖);新名字的渠道追加
|
|
111
|
+
在后,目录模型同样可用。
|
|
112
|
+
- **改了供应商级 `baseUrl`**(config、auth.json 或 `OPENAI_BASE_URL` / `ANTHROPIC_BASE_URL`)而没写自己的
|
|
113
|
+
`channels` 时,内置渠道作废,按「供应商级 `api` + 新 `baseUrl`」单渠道处理,与引入内置渠道之前一致:回落协议是
|
|
114
|
+
Chat(`api` 可改);OpenAI / xAI / 火山方舟的**目录模型**在中转上仍走 Responses,目录外的 id(本地服务、中转
|
|
115
|
+
自有模型)走 Chat。落在任一内置渠道主机上(如国际站)不算中转。
|
|
116
|
+
- 鉴权头按渠道:Anthropic 兼容端点缺省 `x-api-key`,Kimi、MiniMax、阶跃的 Messages 渠道按其文档用
|
|
117
|
+
`Authorization: Bearer`。
|
|
118
|
+
|
|
119
|
+
### Coding Plan 类订阅端点
|
|
120
|
+
|
|
121
|
+
火山方舟、阿里百炼、智谱、Kimi、MiniMax、阶跃等的 Coding Plan / Token Plan 额度只限编程工具使用,`ama -p` 与 RPC
|
|
122
|
+
嵌入属于自动化调用,有被判违规的风险,因此**不做内置渠道**。确认条款允许后可自行加渠道(key 写在渠道上):
|
|
123
|
+
|
|
124
|
+
```json
|
|
125
|
+
{
|
|
126
|
+
"providers": {
|
|
127
|
+
"volcengine": {
|
|
128
|
+
"channels": {
|
|
129
|
+
"coding": {
|
|
130
|
+
"api": "anthropic-messages",
|
|
131
|
+
"baseUrl": "https://ark.cn-beijing.volces.com/api/coding",
|
|
132
|
+
"apiKey": "$ARK_CODING_PLAN_KEY"
|
|
133
|
+
}
|
|
134
|
+
}
|
|
135
|
+
},
|
|
136
|
+
"zhipu": {
|
|
137
|
+
"channels": {
|
|
138
|
+
"coding": {
|
|
139
|
+
"api": "openai-completions",
|
|
140
|
+
"baseUrl": "https://open.bigmodel.cn/api/coding/paas/v4",
|
|
141
|
+
"apiKey": "$ZHIPU_CODING_PLAN_KEY"
|
|
142
|
+
}
|
|
143
|
+
}
|
|
144
|
+
},
|
|
145
|
+
"stepfun": {
|
|
146
|
+
"channels": {
|
|
147
|
+
"plan": {
|
|
148
|
+
"api": "anthropic-messages",
|
|
149
|
+
"baseUrl": "https://api.stepfun.com/step_plan",
|
|
150
|
+
"apiKey": "$STEP_PLAN_KEY",
|
|
151
|
+
"authHeader": "authorization-bearer"
|
|
152
|
+
}
|
|
153
|
+
}
|
|
154
|
+
}
|
|
155
|
+
}
|
|
156
|
+
}
|
|
157
|
+
```
|
|
158
|
+
|
|
159
|
+
然后 `--model volcengine/<模型>@coding`(订阅端点的模型 id 以各家文档为准,目录外的 id 用 `models[]` 补上并写
|
|
160
|
+
`"channels": ["coding"]`)。
|
|
98
161
|
|
|
99
162
|
## 模型引用
|
|
100
163
|
|
|
@@ -164,9 +227,10 @@ export PACKY_API_KEY=sk-...
|
|
|
164
227
|
Messages 在 baseUrl 以 `/v1` 结尾时拼 `/messages`,否则 `/v1/messages`。
|
|
165
228
|
- 不想手写 `models`:`ama models discover packy` 列出中转站的模型(`GET {baseUrl}/models`);
|
|
166
229
|
`--probe` 对每个模型依次试供应商协议、completions、responses、messages 的最小请求,记第一个成功
|
|
167
|
-
的(每模型最多 3 次,`--limit` 限制探测的模型数,缺省 30
|
|
230
|
+
的(每模型最多 3 次,`--limit` 限制探测的模型数,缺省 30,执行前打印预估;模型之间并发,探测规则同下文
|
|
231
|
+
`providers add --probe`);
|
|
168
232
|
`--write` 把结果合并进用户级 `config.json`(已有同 id 不覆盖,只写 `id` 与和供应商不同的 `api`,
|
|
169
|
-
原文件备份为 `config.json.bak`)。上下文等元数据在运行时从 models.dev
|
|
233
|
+
原文件备份为 `config.json.bak`)。上下文等元数据在运行时从 models.dev 快照补(见下文「模型元数据」),
|
|
170
234
|
匹配不到的条目没有 `contextWindow`,自动压缩随之关闭,需要时手动补。
|
|
171
235
|
|
|
172
236
|
```sh
|
|
@@ -180,6 +244,19 @@ Claude Code 的通行约定),优先级低于 config 与 auth.json 的 `baseU
|
|
|
180
244
|
`prompt_cache_key`)。`ama config show` 的「供应商」节与 `ama doctor` 标出 baseUrl 来自哪个变量;
|
|
181
245
|
零配置挑的缺省模型来自官方目录,中转站未必有,用 `--model` 或 `defaultModel` 指定。
|
|
182
246
|
|
|
247
|
+
### 缺省模型
|
|
248
|
+
|
|
249
|
+
没有 `--model`、续会话的模型与 `defaultModel` 时,按供应商顺序(内置在前,config 里的自定义供应商在后)取第一个
|
|
250
|
+
有 key(或本地服务可达)的供应商,再在它的模型里挑:
|
|
251
|
+
|
|
252
|
+
- **内置供应商**:目录首条(目录按推荐顺序整理);
|
|
253
|
+
- **自定义供应商**(中转站,模型表是上游 `/models` 的顺序):在 models.dev 有价格(输入价 > 0)、支持工具调用、
|
|
254
|
+
上下文 ≥ 64k 的模型里取**输入价最低**的;同价取上下文大的,再同取列表靠前的;一个都不满足才退回列表首条。
|
|
255
|
+
|
|
256
|
+
`ama providers add` 在还没有 `defaultModel` 时按同一规则挑一个写进 `defaultModel`(探测过只在探测通过的模型里
|
|
257
|
+
挑),摘要里写明选了谁、为什么;已有 `defaultModel` 不改。`ama config show` 与 `ama doctor` 的「模型」一行同样
|
|
258
|
+
说明原因。没有任何可用模型时,启动提示列出 key 的环境变量名、`ama auth set` 与 `ama providers add`。
|
|
259
|
+
|
|
183
260
|
```sh
|
|
184
261
|
OPENAI_BASE_URL=https://proxy.example/v1 OPENAI_API_KEY=$PACKY_API_KEY ama -p "hi" --model openai/qwen3.8-flash
|
|
185
262
|
```
|
|
@@ -221,7 +298,7 @@ Anthropic Messages(`/v1/messages`),且每个模型只在其中一部分接
|
|
|
221
298
|
- **模型引用**:`provider/model` 走首选渠道;`provider/model@channel` 显式指定(`--model`、`defaultModel`、
|
|
222
299
|
`/model`、SDK、RPC `set_model` 一致)。指定的渠道不在该模型的 `channels` 里 → 报错并列出可用的
|
|
223
300
|
`provider/model@channel`。`@` 之后不是该供应商的渠道名时整串仍按模型 id 处理(兼容 id 里本来带 `@` 的模型)。
|
|
224
|
-
- **向后兼容**:没有 `channels`
|
|
301
|
+
- **向后兼容**:没有 `channels` 的供应商(自定义供应商与单协议的内置供应商;多协议内置供应商的内置渠道见「内置供应商」)按单渠道处理——供应商级 `api` + `baseUrl`
|
|
225
302
|
就是隐式的 `default` 渠道;模型级 `api` / `baseUrl` 仍然有效,覆盖在所选渠道之上(等价于一个匿名渠道)。
|
|
226
303
|
已有配置不用改。写了 `channels` 时供应商级 `api` / `baseUrl` 不再单独成渠道。
|
|
227
304
|
- **运行时**:选中的模型带上该渠道的协议、地址、key、headers 与 compat;会话记录(`model_change`)与
|
|
@@ -239,7 +316,8 @@ ama providers add packy --base-url https://www.packyapi.com/v1 --key-env PACKY_A
|
|
|
239
316
|
```
|
|
240
317
|
ama providers add <id> --base-url <url> [--channel <name>=<api>@<baseUrl> …] [--api <api>|auto]
|
|
241
318
|
[--key-env <VAR>] [--probe] [--limit N] [--probe-models a,b,…]
|
|
242
|
-
[--max-requests N] [--
|
|
319
|
+
[--max-requests N] [--concurrency N] [--probe-timeout ms]
|
|
320
|
+
[--prefer chat,responses,messages] [--include-no-tools] [--yes]
|
|
243
321
|
ama providers list
|
|
244
322
|
ama providers channels <id>
|
|
245
323
|
ama providers remove <id>
|
|
@@ -258,10 +336,16 @@ ama providers refresh <id> [--probe …]
|
|
|
258
336
|
- **`--probe`**:对选中的模型(`--probe-models` 列出的,缺省按 id 字母序不分大小写取前 `--limit` 个,缺省 30)
|
|
259
337
|
逐个渠道发一次最小请求(有提示时只试提示里的渠道),**探测成功的渠道全部写进模型的 `channels`**,顺序按
|
|
260
338
|
`--prefer`(缺省 chat、responses、messages);全部失败的模型不写入;未探测的按提示写入并在表格里标「未探测」。
|
|
261
|
-
|
|
339
|
+
执行前打印请求数与耗时预估,超过 `--max-requests`(缺省 60)时截断模型数。
|
|
340
|
+
- **判定**:HTTP 成功且流里出现第一个内容事件(文本 / 思考 / 工具调用)即判可用并立刻断开,不等推理模型
|
|
341
|
+
想完;只收到流开头、还没有内容时再等 1 s,期间没有报错也判可用(防止中转先回 200 再在流里报错被误判)。
|
|
342
|
+
HTTP 错误、流里的错误、超时(`--probe-timeout`,缺省 15000 ms)判不可用并记原因。
|
|
343
|
+
- **并发**:「模型 × 渠道」同时在途最多 `--concurrency` 个(1–16,缺省 6);结果按模型、渠道顺序打印,
|
|
344
|
+
终端里单行刷新「探测 18/60」,最后打印总用时。
|
|
345
|
+
- **限流**:401 / 403 立即停止;429 时并发减半、2 s 后重试该请求一次,重试仍 429 则停止。
|
|
262
346
|
- **渠道收敛**:写入前删掉没有任何模型挂载的候选渠道;`defaultChannel` 取剩下的第一个(按 `--prefer`)。
|
|
263
347
|
- **写入**:用户级 `config.json` 的 `providers.<id>`(先备份为 `config.json.bak`)。模型条目只写 `id` 与
|
|
264
|
-
`channels`;上下文、输出、图像、推理、价格**不写进配置**,运行时从 models.dev
|
|
348
|
+
`channels`;上下文、输出、图像、推理、价格**不写进配置**,运行时从 models.dev 快照补(见下节),所以
|
|
265
349
|
`refresh` 不会覆盖手改的字段,手写的值永远优先。models.dev 标明不支持工具调用的模型缺省不写入(Agent
|
|
266
350
|
离不开工具调用),`--include-no-tools` 照写。对已存在的供应商再执行 `add`:只追加新渠道与新模型,已有
|
|
267
351
|
渠道定义与模型条目一字不改。
|
|
@@ -270,8 +354,8 @@ ama providers refresh <id> [--probe …]
|
|
|
270
354
|
中转实际价格可能不同)、匹配方式。
|
|
271
355
|
- `list`:全部供应商(config.json 里的与有 key 的内置供应商)→ 渠道(协议、地址、key 来源:auth.json /
|
|
272
356
|
`$VAR` / 字面量 / 无,从不显示 key)→ 模型数。`channels <id>`:每个渠道的协议、地址与挂载的模型数。
|
|
273
|
-
`remove`:删 `providers.<id>`(备份)与 auth.json 里该供应商的条目。`refresh`:重拉 `/models
|
|
274
|
-
|
|
357
|
+
`remove`:删 `providers.<id>`(备份)与 auth.json 里该供应商的条目。`refresh`:重拉 `/models`(models.dev
|
|
358
|
+
用本地快照),只追加新模型(带 `--probe` 时同 add 的探测),已有条目不改;上游已下架的 id 只提示、不删。
|
|
275
359
|
|
|
276
360
|
实测(2026-10-02,一家同时提供三种接口的中转,22 个模型,共 29 次请求):
|
|
277
361
|
|
|
@@ -287,43 +371,86 @@ ama providers refresh <id> [--probe …]
|
|
|
287
371
|
|
|
288
372
|
### 模型元数据:models.dev
|
|
289
373
|
|
|
290
|
-
[models.dev](https://models.dev) 汇总了两百多家供应商的模型参数(`https://models.dev/api.json`,约 5 MB
|
|
291
|
-
ama
|
|
292
|
-
|
|
293
|
-
|
|
294
|
-
|
|
295
|
-
|
|
296
|
-
|
|
297
|
-
|
|
298
|
-
|
|
299
|
-
|
|
300
|
-
|
|
374
|
+
[models.dev](https://models.dev) 汇总了两百多家供应商的模型参数(`https://models.dev/api.json`,约 5 MB,MIT 许可,
|
|
375
|
+
声明见仓库根的 `THIRD_PARTY_NOTICES.md`)。ama 把主流厂商的一份**裁剪快照随包携带**,用它给内置目录与自定义模型
|
|
376
|
+
补上下文、输出上限、输入模态、推理、价格等数值事实。**启动与运行都不联网**。
|
|
377
|
+
|
|
378
|
+
- **快照**:`src/ai/providers/models-dev/<provider>.json`,一家一份,收录清单在同目录 `_providers.json`(22 家:
|
|
379
|
+
anthropic、openai、google、xai、deepseek、moonshotai / moonshotai-cn、zhipuai / zai、alibaba / alibaba-cn、
|
|
380
|
+
minimax / minimax-cn、stepfun / stepfun-ai、volcengine、tencent-tokenhub、mistral、meta、xiaomi、groq,以及
|
|
381
|
+
openrouter 里原厂前缀白名单内的模型)。`scripts/update-models-dev.mjs`(零依赖)拉取、过滤(丢 `deprecated`、
|
|
382
|
+
输出不含文本、上下文为 0、`tool_call: false` 的条目)、裁剪字段(name、family、knowledge、release_date、
|
|
383
|
+
reasoning、modalities.input、limit.context / input / output、cost 含 `context_over_200k` 与按上下文的 `tiers`、
|
|
384
|
+
interleaved、beta 状态、canonical_model_id)并按键排序写出,再生成内联进 bundle 的 `models-dev-data.ts`;内容
|
|
385
|
+
不变时字节不变(`_meta.json` 的 `fetchedAt` 只随 sha256 变)。为控制体积(内联数据 ≤ 200 KB,测试守住)不收
|
|
386
|
+
`last_updated`、`reasoning_options`。
|
|
387
|
+
- **每周刷新**:`.github/workflows/models-dev.yml` 每周一 03:17 UTC(与手动 `workflow_dispatch`)跑脚本,自动删掉
|
|
388
|
+
目录里与新快照相同的覆盖项,有改动才往固定分支 `chore/models-dev-refresh` 开 / 更新 PR(摘要列新增、删除、上下文 /
|
|
389
|
+
输出 / 价格变化;删除超过 30% 加 `needs-review`)。PR 用仓库 secret `MODELS_DEV_PR_TOKEN`(GitHub App token 或
|
|
390
|
+
fine-grained PAT,`contents` + `pull-requests` 写权限)创建以触发 CI;没有这个 secret 时 workflow 先自己跑
|
|
391
|
+
`pnpm run ci`,再用缺省 token 开 PR 并在描述里写明结果。合并由人做。
|
|
392
|
+
- **`ama models refresh [--provider <id>[,<id>…]]`**:显式联网拉最新 `api.json`,按同一清单裁剪,写到数据目录
|
|
393
|
+
`models-dev.json`(缺省 `~/.local/share/ama/`),打印新增 / 上游删除 / 变价。之后的索引 = 内置快照 ⊕ 这份覆盖:
|
|
394
|
+
覆盖文件的 `fetchedAt` 晚于快照才叠加(升级 ama 带来更新的快照后旧覆盖自动失效),同一 `provider/model` 以覆盖
|
|
395
|
+
为准,上游删掉的条目沿用快照。`refresh-catalog` 是旧名。`AMA_MODELS_DEV_URL` 换刷新的数据源。旧版 ama 写的全量
|
|
396
|
+
缓存(version 1)不再读取。`ama providers add|refresh` 与 `ama models discover` 只用本地索引,不再拉 models.dev
|
|
397
|
+
(它们对 `/models` 的请求照旧)。
|
|
398
|
+
- **内置目录(`catalog/*.json`)只写覆盖项**:文件级 `"modelsDev": "<快照供应商 id>"`(本地服务写 `false`);条目
|
|
399
|
+
按 `<modelsDev>/<id>` 从快照继承 name、reasoning、contextWindow、maxTokens、input、cost、family、knowledge、
|
|
400
|
+
releaseDate、inputLimit、status,目录只写 ama 特有字段(`api`、`thinkingLevelMap`、`promptCache`、`compat`)与
|
|
401
|
+
有意不同于快照的值(如 openai 的 272k 窗口、deepseek 的价格);`cost` 可只写要改的键。id 与快照不同时条目写
|
|
402
|
+
`"modelsDev": "provider/model"`,不继承写 `false`。快照里没有的模型(已 deprecated 等)写完整条目。
|
|
403
|
+
`catalog.test.ts` 把与快照取值相同的字段当冗余报错,`UPDATE_CATALOG=1 pnpm vitest run
|
|
404
|
+
src/ai/providers/catalog.test.ts` 自动删除并重新生成 `catalog-data.ts`(之后跑 prettier);确实要钉住与快照相同的
|
|
405
|
+
值时在条目上写 `"_reason": "…"`(注释,运行时忽略,该条目不做冗余检查)。目录继承的映射与自定义模型略有不同:
|
|
406
|
+
`maxTokens` 不封顶(取 `min(limit.output, contextWindow)`),缺的缓存价记 0。
|
|
407
|
+
- **优先级**:用户配置(`models[]` / `modelOverrides[]` 里写了的字段)> 内置目录(快照 ⊕ 目录覆盖)> models.dev
|
|
408
|
+
索引 > 自定义缺省(`maxTokens: 8192`、`input: ["text"]`、`reasoning: false`、不猜 `contextWindow`)。
|
|
409
|
+
`ama models list` 与 `ama config show` 标出每个字段来自哪里(`config` / `目录` / `models.dev` / `缺省`;内置目录
|
|
410
|
+
从快照继承的字段标 `models.dev`)。
|
|
411
|
+
- **字段映射**(自定义模型):`contextWindow = limit.context`;`maxTokens = min(limit.output, 65536, contextWindow)`——
|
|
301
412
|
`maxTokens` 每次请求都作为 `max_tokens` 发出,models.dev 给的是原厂上限(不少模型写的是与上下文相同的
|
|
302
413
|
1M),中转换了上游后常拒收超大值,Anthropic 协议的思考预算也从它推导,64k 对编码 Agent 的单轮输出足够,
|
|
303
414
|
需要更大时在配置里写;`input` 由 `modalities.input` 含不含 `image` 定为 `["text","image"]` 或 `["text"]`;
|
|
304
415
|
`reasoning`;`cost` 取 `input` / `output` / `cache_read` / `cache_write`($/M),缺缓存价时按输入价算
|
|
305
|
-
|
|
306
|
-
|
|
416
|
+
(不假设有折扣,保温的经济性判断因此偏保守);`cost.tiers` 取 models.dev 的按上下文档位,只有
|
|
417
|
+
`context_over_200k` 时折成 200k 一档;另补 `family`、`knowledge`、`releaseDate`、`inputLimit`(与上下文不同时)、
|
|
418
|
+
`status: "beta"`。
|
|
419
|
+
- **匹配规则**(同一个 id 常在多家转售商下重复出现,取值不一):
|
|
307
420
|
1. 模型上写了 `"modelsDev": "provider/model"` → 直接用该条目(写 `false` 关闭补全);
|
|
308
|
-
2. id 形如 `vendor/model`
|
|
421
|
+
2. id 形如 `vendor/model` 且索引里正好有这个 `provider/model` → 用它;
|
|
309
422
|
3. 按 id 不分大小写找全部同名条目;有 `canonical_model_id` 的,取指向与 id 同名的那个(否则取票数最多的),
|
|
310
423
|
它若能在原厂供应商下找到 → 用原厂条目;
|
|
311
424
|
4. 否则在(同一 canonical 的)条目里优先原厂供应商:anthropic、openai、google、deepseek、moonshotai(-cn)、
|
|
312
|
-
zhipuai、zai、alibaba(-cn)、xai、mistral、minimax(-cn)、llama
|
|
313
|
-
|
|
425
|
+
zhipuai、zai、alibaba(-cn)、xai、mistral、minimax(-cn)、meta、llama、cohere、xiaomi、stepfun(-ai)、volcengine、
|
|
426
|
+
tencent-tokenhub 等(models.dev 里没有 `qwen` 这样的供应商 id,通义在 `alibaba`);
|
|
314
427
|
5. 仍有多条 → 按 (上下文, 输出, 图像) 取多数,取值不一时记 warning;只有一条就用它;
|
|
315
428
|
6. 同名找不到时依次试归一化后的 id:去 `vendor/` 前缀、去 `:free` 一类后缀、去 `-latest`、去日期后缀
|
|
316
429
|
(`-0902`、`-20250514`、`-2025-05-14`);
|
|
317
|
-
7. 都没有 → 「未匹配」,保持自定义缺省(不猜 `contextWindow
|
|
430
|
+
7. 都没有 → 「未匹配」,保持自定义缺省(不猜 `contextWindow`,自动压缩关闭)。快照只收主流厂商,转售商专有的
|
|
431
|
+
id 可能匹配不到,可在模型上写 `modelsDev` 指向收录的条目。
|
|
318
432
|
|
|
319
433
|
### 图像输入
|
|
320
434
|
|
|
321
435
|
- 四条协议都把图片放进用户消息:Chat Completions `image_url`(data URL)、Responses `input_image`、
|
|
322
436
|
Anthropic `image`(base64 source)、Gemini `inlineData`;工具结果里的图片同样映射。
|
|
323
437
|
- 入口:`ama -p "描述这张图" --image a.png --image b.jpg`;交互界面与行式界面里写 `@图片路径`,或粘贴 /
|
|
324
|
-
拖入一个图片文件路径(整段输入里以 `.png` / `.jpg` / `.jpeg` / `.gif` / `.webp`
|
|
325
|
-
|
|
326
|
-
|
|
438
|
+
拖入一个图片文件路径(整段输入里以 `.png` / `.jpg` / `.jpeg` / `.gif` / `.webp` 结尾且文件存在的词);交互界面里
|
|
439
|
+
`Ctrl+V` 或 `/paste` 把剪贴板里的图片存成文件并在光标处插入 `@<路径>`(见下文「剪贴板图片」与 [tui.md](tui.md)「剪贴板图片」)。
|
|
440
|
+
`--image`、`@图片` 与粘贴的图片都按 `images.resize` 缩放。
|
|
441
|
+
- 与 `read` 工具共用 MIME 检测(按文件头识别 PNG / JPEG / GIF / WebP,扩展名不符时以文件头为准)与大小上限。
|
|
442
|
+
上限按 **base64 后**计算(`ceil(字节/3)*4`),按当前模型的端点分档:官方 Anthropic(`api.anthropic.com`)
|
|
443
|
+
10 MB、官方 Gemini 与 OpenAI 20 MB,中转(内置供应商改了 baseUrl)与其它主机 5 MB;任一边超过 8000 px 拒绝。
|
|
444
|
+
- 缩放(`images.resize`,缺省 `auto`):超限时依次找 `sips`(macOS)、`magick` / `convert`(ImageMagick)缩到
|
|
445
|
+
上限以内再附上;找不到工具或 `off` 时按上面的规则拒绝并提示。零依赖,不内置图像解码。
|
|
446
|
+
- 单次请求的图片总量预算按协议:`anthropic-messages` 32 MB,其它 20 MB(base64 后)。历史图片每轮重发,超预算时
|
|
447
|
+
从最旧的图开始换成占位文本 `[earlier image omitted to fit request size]`,一次降到预算的 60% 以下;超过当前端点
|
|
448
|
+
单图上限的旧图(换了模型 / 渠道之后)直接换成占位;单请求超过 20 张图且有长边 > 2000 px 的图时,继续从最旧的
|
|
449
|
+
降到 20 张以内。最新一条带图的消息不降。降级写成会话里的 `context_edit{reason:"image_budget"}`,之后前缀稳定,
|
|
450
|
+
缓存统计把这一次当重置点。
|
|
451
|
+
- 剪贴板图片(交互界面 `Ctrl+V` / `/paste`):`pasteClipboardImage` 依次调 `osascript` / `pngpaste`(macOS)、`wl-paste`(Wayland)/ `xclip`(X11)、
|
|
452
|
+
PowerShell `Get-Clipboard -Format Image`(Windows),写到 `<数据目录>/clipboard/<时间戳>.png`;
|
|
453
|
+
`ama sessions prune` 清理其中超过 7 天的文件。
|
|
327
454
|
- 模型 `input` 不含 `image` 时直接拒绝并提示换模型(`-p` 退出 2,界面里给错误提示,不发请求);`read`
|
|
328
455
|
工具读图时只返回路径、尺寸与「当前模型不接受图片」。
|
|
329
456
|
|
|
@@ -352,6 +479,20 @@ ama 用它给**没写元数据**的自定义模型补上下文、输出上限、
|
|
|
352
479
|
|
|
353
480
|
compat 只记录**已验证**的差异;新增条目请附文档链接或真实样本。
|
|
354
481
|
|
|
482
|
+
## Anthropic Messages 的 compat
|
|
483
|
+
|
|
484
|
+
按请求主机推断缺省(`src/ai/apis/anthropic-compat.ts`),`providers.<id>.compat`、渠道或模型级 `compat` 逐字段覆盖:
|
|
485
|
+
|
|
486
|
+
| 开关 | 作用 | 缺省 |
|
|
487
|
+
| ----------------------------- | ---------------------------------------------------- | -------------------------------------------------------------------------------------------------------------- |
|
|
488
|
+
| `sendInterleavedThinkingBeta` | 预算型思考 + 工具时带 `interleaved-thinking` beta 头 | `api.anthropic.com` 开;DeepSeek、智谱、Kimi、通义、MiniMax、阶跃、腾讯、火山关;其它主机只对 `claude*` 模型开 |
|
|
489
|
+
| `sendCacheControl` | 打 `cache_control` 断点 | 开;DeepSeek 关(文档写明忽略) |
|
|
490
|
+
| `adaptiveThinking` | `{type:"adaptive"}` + `output_config.effort` | 关;官方新模型在目录里逐条开 |
|
|
491
|
+
| `supportsCacheControlOnTools` | 最后一个工具定义上打断点 | 开 |
|
|
492
|
+
| `maxCacheBreakpoints` | 断点个数上限 | 4 |
|
|
493
|
+
|
|
494
|
+
OpenRouter 的 Messages 接口只在 `message_delta` 里给缓存 usage,解析本就按非空字段合并,不需要开关。
|
|
495
|
+
|
|
355
496
|
## Responses 与 Gemini 的 compat
|
|
356
497
|
|
|
357
498
|
| 协议 | 开关 | 作用 | 缺省 |
|
|
@@ -394,15 +535,15 @@ Anthropic 的 `baseUrl` 以 `/v1` 结尾时请求 `{baseUrl}/messages`,不会
|
|
|
394
535
|
|
|
395
536
|
### 兼容开关(`providers.<id>.compat` 或模型级 `compat`)
|
|
396
537
|
|
|
397
|
-
| 开关 | 作用 | 缺省
|
|
398
|
-
| --------------------------------- | ------------------------------------------------------- |
|
|
399
|
-
| `sendPromptCacheKey` | 发 `prompt_cache_key` |
|
|
400
|
-
| `sendSessionAffinityHeaders` | 发亲和头 | 关(含 OpenRouter,未实测)
|
|
401
|
-
| `supportsLongCacheRetention` | `long` 可用(Anthropic 1h、OpenAI 24h);否则降为 short | `api.openai.com` / `api.anthropic.com` 开
|
|
402
|
-
| `supportsExplicitPromptCacheMode` | Responses 的 `prompt_cache_options`(30m) | 关
|
|
403
|
-
| `cacheReporting` | `auto` / `silent` / `reported`:强制「是否报缓存」三态 | `auto`
|
|
538
|
+
| 开关 | 作用 | 缺省 |
|
|
539
|
+
| --------------------------------- | ------------------------------------------------------- | ------------------------------------------------------------------------------- |
|
|
540
|
+
| `sendPromptCacheKey` | 发 `prompt_cache_key` | OpenAI、xAI、Mistral、Kimi(`.cn` / `.ai`)、腾讯 TokenHub 的官方主机开,其余关 |
|
|
541
|
+
| `sendSessionAffinityHeaders` | 发亲和头 | 关(含 OpenRouter,未实测) |
|
|
542
|
+
| `supportsLongCacheRetention` | `long` 可用(Anthropic 1h、OpenAI 24h);否则降为 short | `api.openai.com` / `api.anthropic.com` / `tokenhub.tencentmaas.com` 开 |
|
|
543
|
+
| `supportsExplicitPromptCacheMode` | Responses 的 `prompt_cache_options`(30m) | 关 |
|
|
544
|
+
| `cacheReporting` | `auto` / `silent` / `reported`:强制「是否报缓存」三态 | `auto` |
|
|
404
545
|
|
|
405
|
-
|
|
546
|
+
推断只看最终请求的主机名(`cache-params.ts` 的 `HOST_CACHE_CAPABILITIES`,只收官方文档写明支持的主机),不看 provider id:用 `OPENAI_BASE_URL` 或自定义 `baseUrl` 把 `openai` 指到中转时
|
|
406
547
|
按中转处理。缺省只对官方端点开,是因为中转上实测「接受但未见收益」或「收下但不生效」(下表)。
|
|
407
548
|
|
|
408
549
|
**400 自动剥离**:端点以 400 拒收并在错误体里点名 `prompt_cache_key` / `prompt_cache_retention` /
|
|
@@ -524,8 +665,66 @@ ama models cache-probe <provider/id> [--tokens 2048] [--gap-ms 3000] [--json] [-
|
|
|
524
665
|
- `/v1` 去重与 `toolChoice: "none"` 经 ama 协议层实发验证:Messages 请求落在 `/v1/messages`,三种接口都接受
|
|
525
666
|
`tool_choice: none` 且未产生工具调用。
|
|
526
667
|
|
|
668
|
+
## 渠道实测
|
|
669
|
+
|
|
670
|
+
`scripts/channel-probe.mjs`(先 `pnpm build:lib`)对 `provider/model@channel` 跑实测门,每个模型 ≤ 8 个请求:
|
|
671
|
+
|
|
672
|
+
| 项 | 做法 | 通过 |
|
|
673
|
+
| ----------------- | -------------------------------------------------------------- | ------------------------------------------------------------------------ |
|
|
674
|
+
| ① check | 一次最小调用 | 无错误且有文本 |
|
|
675
|
+
| ② 工具往返 | 一次并行 `read` 两个临时文件、回答口令 | 有工具调用且回答含口令 |
|
|
676
|
+
| ③ thinking 两回合 | 接着同一对话、thinking=medium 再读一个文件(思考块随历史回放) | 第二次无错误;没有思考块或 Messages 上思考块无签名记 ⚠(签名回放未验证) |
|
|
677
|
+
| ④ 缓存 | 约 3k token 的固定前缀相隔 `--gap-ms` 发两次 | 第二次 cacheRead > 0 |
|
|
678
|
+
| tool_use.id | ②③ 同一对话里的全部工具调用 id | 互不相同 |
|
|
679
|
+
|
|
680
|
+
四项全过且 id 不重复 = 过门;DeepSeek、智谱、Kimi 的官方 Messages 渠道过门后缺省改 messages。
|
|
681
|
+
|
|
682
|
+
### 中转对比(2026-10-02,messages vs chat)
|
|
683
|
+
|
|
684
|
+
同一测试中转(Chat / Messages 两种接口),`--gap-ms 8000`,84 次请求(含一轮调试),保守估价约 $0.11:
|
|
685
|
+
|
|
686
|
+
| 模型@渠道 | 协议 · 主机 | ① check | ② 工具往返 | ③ thinking 两回合 | ④ 缓存(读 / 前缀) | id 唯一 | 请求 | 结论 |
|
|
687
|
+
| ---------------------------------- | ------------------------------------- | ------- | ---------- | -------------------- | ------------------- | ------- | ---- | -------- |
|
|
688
|
+
| `packy/kimi-k2.5@messages` | anthropic-messages · www.packyapi.com | ✓ | ✓ | ⚠ 2/2 个思考块无签名 | ✓ 2734 / 2738 | ✓ | 7 | 未过 |
|
|
689
|
+
| `packy/kimi-k2.5@chat` | openai-completions · www.packyapi.com | ✓ | ✓ | ✓ | ✓ 2688 / 2740 | ✓ | 7 | **过门** |
|
|
690
|
+
| `packy/deepseek-v4-flash@messages` | anthropic-messages · www.packyapi.com | ✓ | ✓ | ⚠ 没有思考块 | ✓ 2048 / 2732 | ✓ | 7 | 未过 |
|
|
691
|
+
| `packy/deepseek-v4-flash@chat` | openai-completions · www.packyapi.com | ✓ | ✓ | ✓ | ✓ 2048 / 2732 | ✓ | 7 | **过门** |
|
|
692
|
+
| `packy/glm-5@messages` | anthropic-messages · www.packyapi.com | ✓ | ✓ | ⚠ 2/2 个思考块无签名 | ✓ 2560 / 2733 | ✓ | 7 | 未过 |
|
|
693
|
+
| `packy/glm-5@chat` | openai-completions · www.packyapi.com | ✓ | ✓ | ✓ | ✓ 2560 / 2733 | ✓ | 7 | **过门** |
|
|
694
|
+
| `packy/qwen3.8-flash@messages` | anthropic-messages · www.packyapi.com | ✓ | ✓ | ⚠ 2/2 个思考块无签名 | ✓ 3053 / 3061 | ✓ | 7 | 未过 |
|
|
695
|
+
| `packy/qwen3.8-flash@chat` | openai-completions · www.packyapi.com | ✓ | ✓ | ✓ | ✓ 2048 / 3063 | ✓ | 7 | **过门** |
|
|
696
|
+
| `packy/MiniMax-M2.7@messages` | anthropic-messages · www.packyapi.com | ✓ | ✓ | ⚠ 2/2 个思考块无签名 | ✓ 2638 / 2743 | ✓ | 7 | 未过 |
|
|
697
|
+
| `packy/MiniMax-M2.7@chat` | openai-completions · www.packyapi.com | ✓ | ✓ | ✓ | ✓ 2638 / 2744 | ✓ | 7 | **过门** |
|
|
698
|
+
|
|
699
|
+
- 五家在中转的两种接口上 ①②④ 全过,tool_use.id 在同一对话里都不重复(Kimi 的 id 形如 `functions.read:<n>`,
|
|
700
|
+
按对话递增;不同对话会从 0 重来,所以只能在同一对话里比较)。
|
|
701
|
+
- Messages 接口上的思考块**都没有签名**(DeepSeek 没返回思考块):中转把上游 Chat 转成 Messages 时不带签名,
|
|
702
|
+
ama 按规则降级为文本回放,往返照常成功,但签名回放没被验证——**中转结果不能替代官方直连的实测门**。
|
|
703
|
+
- 缓存:通义在 Messages 上首个请求就写入 3053 token(执行 `cache_control`),第二次读满前缀;其余四家读命中照常、
|
|
704
|
+
`cache_creation_input_tokens` 为 0(端点自管的隐式缓存),与「缓存 · 中转实测」一致。
|
|
705
|
+
|
|
706
|
+
### 官方直连(待用户用自己的 key 跑)
|
|
707
|
+
|
|
708
|
+
每家 ≤ 8 个请求,Kimi 的缓存写入有延迟、用 `--gap-ms 8000`:
|
|
709
|
+
|
|
710
|
+
```sh
|
|
711
|
+
pnpm build:lib
|
|
712
|
+
node scripts/channel-probe.mjs --model deepseek/deepseek-v4-pro@messages,deepseek/deepseek-v4-pro@chat --json /tmp/probe-deepseek.json
|
|
713
|
+
node scripts/channel-probe.mjs --model zhipu/glm-5.3@messages,zhipu/glm-5.3@chat --json /tmp/probe-zhipu.json
|
|
714
|
+
node scripts/channel-probe.mjs --model moonshot/kimi-k3@messages,moonshot/kimi-k3@chat --gap-ms 8000 --json /tmp/probe-kimi.json
|
|
715
|
+
node scripts/channel-probe.mjs --model dashscope/qwen3.8-max@messages --json /tmp/probe-qwen.json
|
|
716
|
+
node scripts/channel-probe.mjs --model minimax/MiniMax-M3@messages,minimax/MiniMax-M2.7@messages --json /tmp/probe-minimax.json
|
|
717
|
+
node scripts/channel-probe.mjs --model stepfun/step-5-preview@messages --json /tmp/probe-stepfun.json
|
|
718
|
+
node scripts/channel-probe.mjs --model tencent/hy3@messages --json /tmp/probe-tencent.json
|
|
719
|
+
node scripts/channel-probe.mjs --model volcengine/doubao-seed-2-1-pro-260628@responses --json /tmp/probe-volcengine.json
|
|
720
|
+
```
|
|
721
|
+
|
|
722
|
+
key 用各家标准环境变量(上表);没有 key 的那家记「没有 key」、不发请求。结果用 `--render` 重画后补进本节。
|
|
723
|
+
|
|
527
724
|
## 测试用 fake 供应商
|
|
528
725
|
|
|
529
|
-
`--
|
|
726
|
+
`--model fake/echo`:回显最后一条用户消息。零配置的模型选择器、`ama doctor`、`ama models list`、
|
|
727
|
+
`ama providers list`、`ama config show` 缺省不列 fake;`AMA_SHOW_FAKE=1` 或设了 `AMA_FAKE_SCRIPT` 时照列,
|
|
728
|
+
显式 `--model fake/…` 任何时候都可用。设 `AMA_FAKE_SCRIPT=<file.json>` 后
|
|
530
729
|
按脚本第 n 次调用产出文本、思考、工具调用、429、溢出、断流、延迟,脚本格式见
|
|
531
730
|
`src/ai/fake/fake-script.ts`,示例在 `test/fixtures/scripts/`。
|