@armadra/agent 0.5.0 → 0.6.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 +177 -294
- package/CHANGELOG.zh-CN.md +442 -0
- package/README.md +408 -364
- package/README.zh-CN.md +705 -0
- package/dist/agent/session-plan.js +2 -2
- package/dist/agent/session-state.d.ts +3 -0
- package/dist/agent/session-state.js +20 -0
- package/dist/agent/session-subagent.d.ts +15 -1
- package/dist/agent/session-subagent.js +26 -3
- package/dist/agent/session-telemetry.d.ts +16 -2
- package/dist/agent/session-telemetry.js +29 -7
- package/dist/agent/session-tools.js +5 -2
- package/dist/agent/session-trace-writer.d.ts +27 -0
- package/dist/agent/session-trace-writer.js +253 -0
- package/dist/agent/session.d.ts +2 -0
- package/dist/agent/session.js +12 -0
- package/dist/agent/subagent-direct.d.ts +20 -0
- package/dist/agent/subagent-direct.js +76 -0
- package/dist/agent/subagent-registry.d.ts +8 -1
- package/dist/agent/subagent-registry.js +28 -1
- package/dist/agent/system-prompt.d.ts +3 -1
- package/dist/agent/system-prompt.js +3 -0
- package/dist/agent/tool-runner.d.ts +2 -1
- package/dist/agent/tool-runner.js +5 -4
- package/dist/agent/types-w6.d.ts +39 -0
- package/dist/agent/types-w6.js +4 -0
- package/dist/agent/types.d.ts +5 -2
- package/dist/agents/external.js +1 -1
- package/dist/agents/task-record.d.ts +74 -1
- package/dist/agents/task-record.js +100 -0
- package/dist/ai/apis/cache-params.js +2 -1
- package/dist/ai/apis/chatgpt-backend.d.ts +52 -0
- package/dist/ai/apis/chatgpt-backend.js +224 -0
- package/dist/ai/apis/chatgpt-rate-limits.d.ts +26 -0
- package/dist/ai/apis/chatgpt-rate-limits.js +91 -0
- package/dist/ai/apis/openai-responses-request.d.ts +2 -1
- package/dist/ai/apis/openai-responses-request.js +8 -2
- package/dist/ai/apis/openai-responses.d.ts +2 -0
- package/dist/ai/apis/openai-responses.js +51 -16
- package/dist/ai/overflow.d.ts +1 -1
- package/dist/ai/overflow.js +10 -7
- package/dist/ai/providers/auth.d.ts +15 -2
- package/dist/ai/providers/auth.js +69 -2
- package/dist/ai/providers/builtin.js +27 -0
- package/dist/ai/providers/catalog-data.js +1 -0
- package/dist/ai/providers/enrich.js +2 -7
- package/dist/ai/providers/models-dev-cache.js +15 -19
- package/dist/ai/providers/models-dev-snapshot.js +8 -7
- package/dist/ai/providers/models-dev.js +5 -15
- package/dist/ai/providers/suggest.js +2 -16
- package/dist/ai/types.d.ts +27 -1
- package/dist/auth/chatgpt/backend-client.d.ts +26 -0
- package/dist/auth/chatgpt/backend-client.js +74 -0
- package/dist/auth/chatgpt/claims.d.ts +17 -0
- package/dist/auth/chatgpt/claims.js +46 -0
- package/dist/auth/chatgpt/cli.d.ts +33 -0
- package/dist/auth/chatgpt/cli.js +252 -0
- package/dist/auth/chatgpt/doctor.d.ts +17 -0
- package/dist/auth/chatgpt/doctor.js +36 -0
- package/dist/auth/chatgpt/host-id.d.ts +7 -0
- package/dist/auth/chatgpt/host-id.js +26 -0
- package/dist/auth/chatgpt/login.d.ts +30 -0
- package/dist/auth/chatgpt/login.js +130 -0
- package/dist/auth/chatgpt/presets.d.ts +66 -0
- package/dist/auth/chatgpt/presets.js +120 -0
- package/dist/auth/chatgpt/quota-text.d.ts +13 -0
- package/dist/auth/chatgpt/quota-text.js +36 -0
- package/dist/auth/oauth/browser.d.ts +12 -0
- package/dist/auth/oauth/browser.js +27 -0
- package/dist/auth/oauth/callback-server.d.ts +47 -0
- package/dist/auth/oauth/callback-server.js +147 -0
- package/dist/auth/oauth/flows.d.ts +62 -0
- package/dist/auth/oauth/flows.js +113 -0
- package/dist/auth/oauth/jwt.d.ts +24 -0
- package/dist/auth/oauth/jwt.js +81 -0
- package/dist/auth/oauth/live.d.ts +21 -0
- package/dist/auth/oauth/live.js +25 -0
- package/dist/auth/oauth/oidc.d.ts +26 -0
- package/dist/auth/oauth/oidc.js +72 -0
- package/dist/auth/oauth/pkce.d.ts +15 -0
- package/dist/auth/oauth/pkce.js +20 -0
- package/dist/auth/oauth/refresh.d.ts +35 -0
- package/dist/auth/oauth/refresh.js +129 -0
- package/dist/auth/oauth/token-client.d.ts +33 -0
- package/dist/auth/oauth/token-client.js +121 -0
- package/dist/auth/oauth/token-store.d.ts +23 -0
- package/dist/auth/oauth/token-store.js +125 -0
- package/dist/auth/testing/fake-oauth.d.ts +73 -0
- package/dist/auth/testing/fake-oauth.js +271 -0
- package/dist/auth/testing/refresh-child.d.ts +5 -0
- package/dist/auth/testing/refresh-child.js +16 -0
- package/dist/bundle/ama.cjs +28307 -13241
- package/dist/checkpoints/backend.js +6 -5
- package/dist/checkpoints/restore.js +3 -2
- package/dist/checkpoints/settings.js +2 -1
- package/dist/checkpoints/shadow-git.js +7 -6
- package/dist/checkpoints/shadow-restore.js +3 -2
- package/dist/checkpoints/tracker.js +4 -3
- package/dist/cli/args.d.ts +9 -2
- package/dist/cli/args.js +74 -27
- package/dist/cli/bootstrap.js +53 -31
- package/dist/cli/choice-prompt.d.ts +58 -0
- package/dist/cli/choice-prompt.js +142 -0
- package/dist/cli/codemode-notice.js +2 -2
- package/dist/cli/compose-agents.js +2 -1
- package/dist/cli/compose-extensions.js +2 -0
- package/dist/cli/compose-memory.d.ts +53 -0
- package/dist/cli/compose-memory.js +127 -0
- package/dist/cli/compose-providers.d.ts +5 -0
- package/dist/cli/compose-providers.js +32 -2
- package/dist/cli/compose-session.d.ts +5 -0
- package/dist/cli/compose-session.js +27 -13
- package/dist/cli/compose-store.d.ts +2 -0
- package/dist/cli/compose-store.js +9 -5
- package/dist/cli/compose.d.ts +2 -0
- package/dist/cli/compose.js +13 -5
- package/dist/cli/default-model.d.ts +0 -2
- package/dist/cli/default-model.js +5 -8
- package/dist/cli/deps.d.ts +5 -1
- package/dist/cli/exit-codes.d.ts +1 -1
- package/dist/cli/exit-codes.js +7 -16
- package/dist/cli/from-prompt.js +3 -2
- package/dist/cli/help-text.d.ts +2 -1
- package/dist/cli/help-text.js +5 -99
- package/dist/cli/main.d.ts +5 -0
- package/dist/cli/main.js +21 -2
- package/dist/cli/proxy.js +14 -9
- package/dist/cli/runtime.d.ts +5 -0
- package/dist/cli/startup-screen.js +20 -27
- package/dist/cli/startup-steps.js +6 -8
- package/dist/cli/subcommands/auth.d.ts +6 -3
- package/dist/cli/subcommands/auth.js +52 -22
- package/dist/cli/subcommands/config-set.d.ts +21 -0
- package/dist/cli/subcommands/config-set.js +137 -0
- package/dist/cli/subcommands/config.d.ts +2 -1
- package/dist/cli/subcommands/config.js +51 -37
- package/dist/cli/subcommands/doctor.d.ts +2 -1
- package/dist/cli/subcommands/doctor.js +97 -58
- package/dist/cli/subcommands/init.d.ts +1 -1
- package/dist/cli/subcommands/init.js +8 -7
- package/dist/cli/subcommands/memory.d.ts +18 -0
- package/dist/cli/subcommands/memory.js +189 -0
- package/dist/cli/subcommands/model-meta.js +11 -9
- package/dist/cli/subcommands/models-cache-probe.d.ts +1 -1
- package/dist/cli/subcommands/models-cache-probe.js +26 -32
- package/dist/cli/subcommands/models-discover.d.ts +3 -0
- package/dist/cli/subcommands/models-discover.js +44 -21
- package/dist/cli/subcommands/models.d.ts +1 -1
- package/dist/cli/subcommands/models.js +29 -22
- package/dist/cli/subcommands/probe-runner.js +8 -7
- package/dist/cli/subcommands/providers-list.js +32 -21
- package/dist/cli/subcommands/providers-plan.js +24 -25
- package/dist/cli/subcommands/providers-probe.js +5 -6
- package/dist/cli/subcommands/providers.d.ts +2 -2
- package/dist/cli/subcommands/providers.js +48 -59
- package/dist/cli/subcommands/sessions-export.d.ts +1 -1
- package/dist/cli/subcommands/sessions-export.js +10 -9
- package/dist/cli/subcommands/sessions-search.d.ts +1 -1
- package/dist/cli/subcommands/sessions-search.js +11 -10
- package/dist/cli/subcommands/sessions-trace.d.ts +30 -0
- package/dist/cli/subcommands/sessions-trace.js +156 -0
- package/dist/cli/subcommands/sessions.d.ts +4 -3
- package/dist/cli/subcommands/sessions.js +40 -37
- package/dist/cli/subcommands/stats.d.ts +1 -1
- package/dist/cli/subcommands/stats.js +49 -30
- package/dist/cli/system-prompt-arg.js +3 -2
- package/dist/codemode/capability.js +3 -2
- package/dist/compaction/post-compact.d.ts +1 -0
- package/dist/compaction/post-compact.js +15 -1
- package/dist/compaction/prune-tier.d.ts +1 -1
- package/dist/compaction/prune-tier.js +3 -3
- package/dist/compaction/serialize.js +2 -1
- package/dist/config/auth-file.d.ts +12 -2
- package/dist/config/auth-file.js +32 -10
- package/dist/config/checker.js +12 -11
- package/dist/config/context-files.js +3 -2
- package/dist/config/edit.d.ts +106 -0
- package/dist/config/edit.js +350 -0
- package/dist/config/init.d.ts +4 -3
- package/dist/config/init.js +10 -18
- package/dist/config/json-schema.d.ts +2 -1
- package/dist/config/json-schema.js +101 -68
- package/dist/config/key-docs.d.ts +18 -7
- package/dist/config/key-docs.js +43 -128
- package/dist/config/load.js +7 -6
- package/dist/config/merge.d.ts +4 -1
- package/dist/config/merge.js +42 -22
- package/dist/config/paths.js +6 -5
- package/dist/config/profile.d.ts +5 -1
- package/dist/config/profile.js +7 -2
- package/dist/config/schema-w5.js +3 -2
- package/dist/config/schema-w6.d.ts +19 -0
- package/dist/config/schema-w6.js +115 -0
- package/dist/config/schema.js +34 -20
- package/dist/config/settings-registry.d.ts +78 -0
- package/dist/config/settings-registry.js +184 -0
- package/dist/config/types-w6.d.ts +109 -0
- package/dist/config/types-w6.js +19 -0
- package/dist/config/types.d.ts +11 -8
- package/dist/config/types.js +1 -0
- package/dist/drivers/acp/client.js +1 -1
- package/dist/drivers/acp/driver.js +13 -8
- package/dist/drivers/agents.js +4 -3
- package/dist/drivers/base.js +3 -2
- package/dist/drivers/host-runners.js +2 -1
- package/dist/drivers/native/claude-stream.js +12 -11
- package/dist/drivers/native/codex-app-server.js +17 -12
- package/dist/drivers/native/oneshot.js +8 -7
- package/dist/drivers/pool.js +1 -1
- package/dist/drivers/runner.d.ts +3 -1
- package/dist/drivers/runner.js +68 -20
- package/dist/drivers/turn.js +1 -1
- package/dist/hooks/config.js +3 -2
- package/dist/hooks/protocol.js +18 -12
- package/dist/host/api-impl.js +11 -10
- package/dist/host/loader.js +9 -8
- package/dist/host/types.d.ts +3 -0
- package/dist/i18n/catalog.d.ts +2169 -0
- package/dist/i18n/catalog.js +72 -0
- package/dist/i18n/format.d.ts +21 -0
- package/dist/i18n/format.js +58 -0
- package/dist/i18n/index.d.ts +58 -0
- package/dist/i18n/index.js +72 -0
- package/dist/i18n/messages/agents.d.ts +84 -0
- package/dist/i18n/messages/agents.js +85 -0
- package/dist/i18n/messages/approval.d.ts +99 -0
- package/dist/i18n/messages/approval.js +100 -0
- package/dist/i18n/messages/auth.d.ts +187 -0
- package/dist/i18n/messages/auth.js +189 -0
- package/dist/i18n/messages/cli-args.d.ts +46 -0
- package/dist/i18n/messages/cli-args.js +46 -0
- package/dist/i18n/messages/cli-help.d.ts +12 -0
- package/dist/i18n/messages/cli-help.js +244 -0
- package/dist/i18n/messages/cli.d.ts +336 -0
- package/dist/i18n/messages/cli.js +311 -0
- package/dist/i18n/messages/config-keys.d.ts +289 -0
- package/dist/i18n/messages/config-keys.js +292 -0
- package/dist/i18n/messages/config.d.ts +502 -0
- package/dist/i18n/messages/config.js +239 -0
- package/dist/i18n/messages/drivers.d.ts +123 -0
- package/dist/i18n/messages/drivers.js +124 -0
- package/dist/i18n/messages/errors.d.ts +83 -0
- package/dist/i18n/messages/errors.js +171 -0
- package/dist/i18n/messages/interactive-line.d.ts +61 -0
- package/dist/i18n/messages/interactive-line.js +69 -0
- package/dist/i18n/messages/interactive-startup.d.ts +103 -0
- package/dist/i18n/messages/interactive-startup.js +104 -0
- package/dist/i18n/messages/interactive-view.d.ts +140 -0
- package/dist/i18n/messages/interactive-view.js +141 -0
- package/dist/i18n/messages/interactive.d.ts +493 -0
- package/dist/i18n/messages/interactive.js +248 -0
- package/dist/i18n/messages/memory.d.ts +123 -0
- package/dist/i18n/messages/memory.js +128 -0
- package/dist/i18n/messages/panels.d.ts +190 -0
- package/dist/i18n/messages/panels.js +189 -0
- package/dist/i18n/messages/permissions.d.ts +126 -0
- package/dist/i18n/messages/permissions.js +151 -0
- package/dist/i18n/messages/plan.d.ts +123 -0
- package/dist/i18n/messages/plan.js +124 -0
- package/dist/i18n/messages/print.d.ts +86 -0
- package/dist/i18n/messages/print.js +91 -0
- package/dist/i18n/messages/report.d.ts +391 -0
- package/dist/i18n/messages/report.js +490 -0
- package/dist/i18n/messages/rewind.d.ts +198 -0
- package/dist/i18n/messages/rewind.js +217 -0
- package/dist/i18n/messages/session.d.ts +230 -0
- package/dist/i18n/messages/session.js +258 -0
- package/dist/i18n/messages/settings.d.ts +348 -0
- package/dist/i18n/messages/settings.js +336 -0
- package/dist/i18n/messages/subcommands-config.d.ts +111 -0
- package/dist/i18n/messages/subcommands-config.js +127 -0
- package/dist/i18n/messages/subcommands.d.ts +548 -0
- package/dist/i18n/messages/subcommands.js +474 -0
- package/dist/i18n/messages/trace.d.ts +243 -0
- package/dist/i18n/messages/trace.js +238 -0
- package/dist/i18n/types.d.ts +15 -0
- package/dist/i18n/types.js +7 -0
- package/dist/index.d.ts +6 -0
- package/dist/index.js +2 -0
- package/dist/memory/edit.d.ts +24 -0
- package/dist/memory/edit.js +63 -0
- package/dist/memory/frontmatter.d.ts +37 -0
- package/dist/memory/frontmatter.js +79 -0
- package/dist/memory/index.d.ts +28 -0
- package/dist/memory/index.js +126 -0
- package/dist/memory/lock.d.ts +17 -0
- package/dist/memory/lock.js +62 -0
- package/dist/memory/paths.d.ts +57 -0
- package/dist/memory/paths.js +175 -0
- package/dist/memory/report.d.ts +36 -0
- package/dist/memory/report.js +86 -0
- package/dist/memory/runtime.d.ts +42 -0
- package/dist/memory/runtime.js +36 -0
- package/dist/memory/secrets.d.ts +8 -0
- package/dist/memory/secrets.js +27 -0
- package/dist/memory/section.d.ts +28 -0
- package/dist/memory/section.js +59 -0
- package/dist/memory/store.d.ts +70 -0
- package/dist/memory/store.js +284 -0
- package/dist/memory/tool.d.ts +31 -0
- package/dist/memory/tool.js +94 -0
- package/dist/modes/acp/acp-events.js +2 -1
- package/dist/modes/acp/acp-server.js +13 -12
- package/dist/modes/commands-core.d.ts +17 -0
- package/dist/modes/commands-core.js +101 -61
- package/dist/modes/image-input.js +20 -6
- package/dist/modes/interactive/agent-bar.d.ts +95 -0
- package/dist/modes/interactive/agent-bar.js +248 -0
- package/dist/modes/interactive/agent-panels.js +27 -26
- package/dist/modes/interactive/agent-transcript.d.ts +47 -0
- package/dist/modes/interactive/agent-transcript.js +191 -0
- package/dist/modes/interactive/agent-ui.d.ts +36 -1
- package/dist/modes/interactive/agent-ui.js +180 -14
- package/dist/modes/interactive/agent-view.d.ts +72 -0
- package/dist/modes/interactive/agent-view.js +281 -0
- package/dist/modes/interactive/approval-dialog.js +46 -34
- package/dist/modes/interactive/clipboard-paste.d.ts +2 -2
- package/dist/modes/interactive/clipboard-paste.js +9 -4
- package/dist/modes/interactive/commands.d.ts +22 -1
- package/dist/modes/interactive/commands.js +93 -38
- package/dist/modes/interactive/completion.js +2 -1
- package/dist/modes/interactive/config-panel.d.ts +70 -0
- package/dist/modes/interactive/config-panel.js +319 -0
- package/dist/modes/interactive/config-ui.d.ts +96 -0
- package/dist/modes/interactive/config-ui.js +397 -0
- package/dist/modes/interactive/confirm-dialog.d.ts +49 -0
- package/dist/modes/interactive/confirm-dialog.js +120 -0
- package/dist/modes/interactive/event-notices.js +11 -9
- package/dist/modes/interactive/interactive-mode.d.ts +1 -1
- package/dist/modes/interactive/interactive-mode.js +25 -22
- package/dist/modes/interactive/key-dispatch.d.ts +18 -0
- package/dist/modes/interactive/key-dispatch.js +39 -13
- package/dist/modes/interactive/line/line-editor.js +2 -1
- package/dist/modes/interactive/line/line-mode.d.ts +2 -0
- package/dist/modes/interactive/line/line-mode.js +24 -4
- package/dist/modes/interactive/line/line-render.js +25 -24
- package/dist/modes/interactive/memory-panel.d.ts +64 -0
- package/dist/modes/interactive/memory-panel.js +221 -0
- package/dist/modes/interactive/message-view.d.ts +4 -2
- package/dist/modes/interactive/message-view.js +42 -33
- package/dist/modes/interactive/panels.js +39 -31
- package/dist/modes/interactive/pickers.d.ts +2 -1
- package/dist/modes/interactive/pickers.js +10 -6
- package/dist/modes/interactive/plan-command.d.ts +1 -1
- package/dist/modes/interactive/plan-command.js +24 -27
- package/dist/modes/interactive/plan-dialog.js +18 -17
- package/dist/modes/interactive/plan-flow.js +6 -5
- package/dist/modes/interactive/rewind-command.d.ts +1 -1
- package/dist/modes/interactive/rewind-command.js +18 -16
- package/dist/modes/interactive/rewind-flow.d.ts +0 -1
- package/dist/modes/interactive/rewind-flow.js +13 -14
- package/dist/modes/interactive/rewind-list.js +7 -6
- package/dist/modes/interactive/rewind-panel.js +40 -40
- package/dist/modes/interactive/rewind-text.d.ts +5 -3
- package/dist/modes/interactive/rewind-text.js +48 -38
- package/dist/modes/interactive/run-indicator.js +15 -12
- package/dist/modes/interactive/session-events.js +3 -2
- package/dist/modes/interactive/startup-header.js +22 -23
- package/dist/modes/interactive/startup-ui.js +41 -29
- package/dist/modes/interactive/status-area.d.ts +2 -0
- package/dist/modes/interactive/status-area.js +8 -2
- package/dist/modes/interactive/status-bar.js +4 -3
- package/dist/modes/interactive/subagent-view.js +9 -7
- package/dist/modes/interactive/tasks-report.d.ts +6 -0
- package/dist/modes/interactive/tasks-report.js +28 -31
- package/dist/modes/interactive/terminal-setup.d.ts +9 -0
- package/dist/modes/interactive/terminal-setup.js +23 -0
- package/dist/modes/interactive/tool-summary.js +19 -17
- package/dist/modes/interactive/tool-view.js +7 -4
- package/dist/modes/interactive/trace-view.d.ts +89 -0
- package/dist/modes/interactive/trace-view.js +332 -0
- package/dist/modes/print/print-mode.js +14 -15
- package/dist/modes/rpc/commands.js +7 -3
- package/dist/modes/rpc/rpc-mode.js +9 -3
- package/dist/modes/session-report.d.ts +2 -0
- package/dist/modes/session-report.js +101 -105
- package/dist/modes/startup-ui-text.js +11 -6
- package/dist/permissions/bypass.d.ts +30 -0
- package/dist/permissions/bypass.js +45 -0
- package/dist/permissions/memory-class.d.ts +23 -0
- package/dist/permissions/memory-class.js +54 -0
- package/dist/permissions/modes.d.ts +3 -3
- package/dist/permissions/modes.js +21 -16
- package/dist/permissions/pipeline.d.ts +1 -1
- package/dist/permissions/pipeline.js +9 -2
- package/dist/permissions/preview.js +49 -42
- package/dist/permissions/rules.js +5 -2
- package/dist/permissions/types.d.ts +4 -0
- package/dist/plan/store.js +2 -1
- package/dist/rpc.d.ts +39 -1
- package/dist/rpc.js +3 -0
- package/dist/sandbox/bash.js +11 -8
- package/dist/sandbox/detect.js +14 -11
- package/dist/sdk.d.ts +17 -1
- package/dist/sdk.js +29 -7
- package/dist/session/export.js +31 -30
- package/dist/session/manager.d.ts +1 -1
- package/dist/session/manager.js +5 -3
- package/dist/session/reuse.js +5 -4
- package/dist/session/scan.js +3 -2
- package/dist/session/stats-aggregate.d.ts +3 -1
- package/dist/session/stats-aggregate.js +5 -1
- package/dist/session/stats-index.js +2 -1
- package/dist/session/stats-scan.d.ts +4 -1
- package/dist/session/stats-scan.js +6 -2
- package/dist/session/store.d.ts +11 -0
- package/dist/session/store.js +48 -1
- package/dist/session/types.d.ts +2 -0
- package/dist/skills/builtin.js +2 -1
- package/dist/tools/image-file.d.ts +26 -1
- package/dist/tools/image-file.js +55 -13
- package/dist/tools/presets.d.ts +14 -1
- package/dist/tools/presets.js +3 -3
- package/dist/tools/registry.js +1 -1
- package/dist/tools/truncate.d.ts +1 -1
- package/dist/tools/truncate.js +2 -2
- package/dist/tools/types.d.ts +17 -1
- package/dist/trace/build-index.d.ts +91 -0
- package/dist/trace/build-index.js +127 -0
- package/dist/trace/build-nodes.d.ts +24 -0
- package/dist/trace/build-nodes.js +279 -0
- package/dist/trace/build-util.d.ts +43 -0
- package/dist/trace/build-util.js +120 -0
- package/dist/trace/build.d.ts +82 -0
- package/dist/trace/build.js +382 -0
- package/dist/trace/detail.d.ts +35 -0
- package/dist/trace/detail.js +205 -0
- package/dist/trace/flatten.d.ts +69 -0
- package/dist/trace/flatten.js +173 -0
- package/dist/trace/format.d.ts +47 -0
- package/dist/trace/format.js +329 -0
- package/dist/trace/html-template.d.ts +19 -0
- package/dist/trace/html-template.js +150 -0
- package/dist/trace/html.d.ts +104 -0
- package/dist/trace/html.js +292 -0
- package/dist/trace/preview.d.ts +29 -0
- package/dist/trace/preview.js +59 -0
- package/dist/trace/query-session.d.ts +14 -0
- package/dist/trace/query-session.js +38 -0
- package/dist/trace/query.d.ts +55 -0
- package/dist/trace/query.js +188 -0
- package/dist/trace/session.d.ts +40 -0
- package/dist/trace/session.js +168 -0
- package/dist/trace/types.d.ts +243 -0
- package/dist/trace/types.js +13 -0
- package/dist/tui/components/editor-paste.d.ts +2 -0
- package/dist/tui/components/editor-paste.js +6 -3
- package/dist/tui/components/editor.js +2 -2
- package/dist/tui/components/loader.d.ts +3 -0
- package/dist/tui/components/loader.js +14 -0
- package/dist/tui/components/settings-list.d.ts +61 -0
- package/dist/tui/components/settings-list.js +135 -0
- package/dist/tui/keybindings.d.ts +6 -1
- package/dist/tui/keybindings.js +18 -6
- package/dist/tui.d.ts +1 -0
- package/dist/tui.js +2 -0
- package/docs/en/host-api.md +167 -0
- package/docs/en/permissions.md +214 -0
- package/docs/en/providers.md +625 -0
- package/docs/en/rpc.md +361 -0
- package/docs/en/sessions.md +219 -0
- package/docs/en/tui.md +527 -0
- package/docs/host-api.md +18 -17
- package/docs/memory.md +172 -0
- package/docs/permissions.md +3 -2
- package/docs/providers.md +67 -1
- package/docs/rpc.md +31 -3
- package/docs/session-format.md +8 -2
- package/docs/sessions.md +29 -1
- package/docs/tui.md +189 -21
- package/package.json +8 -3
|
@@ -0,0 +1,474 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* 消息目录:subcommands(键名规范见 docs/i18n.md)。[W6-C0 建空壳,W6-I1 迁入 `src/cli/subcommands/**`]
|
|
3
|
+
*
|
|
4
|
+
* en 是形状源;zh 用 `satisfies Messages<typeof en>`,缺键 / 多键 / 参数不符在 tsc 期报错。
|
|
5
|
+
* 整句一个键、禁止片段拼接;插值写成函数,条件分支写进函数体。
|
|
6
|
+
* 用法文本(`usage`)整段一个键:列对齐是手工排的。
|
|
7
|
+
*/
|
|
8
|
+
import { plural } from "../format.js";
|
|
9
|
+
import * as configShow from "./subcommands-config.js";
|
|
10
|
+
export const en = {
|
|
11
|
+
...configShow.en,
|
|
12
|
+
/** 多个子命令共用。 */
|
|
13
|
+
common: {
|
|
14
|
+
warning: (text) => `ama: warning: ${text}\n`,
|
|
15
|
+
cancelled: "ama: cancelled\n",
|
|
16
|
+
extraArgs: (text) => `Unexpected arguments: ${text}`,
|
|
17
|
+
needsArg: (command, arg) => `${command} needs ${arg}`,
|
|
18
|
+
unknownSubcommand: (group, name) => `Unknown ${group} subcommand: ${name}`,
|
|
19
|
+
unknownOption: (option) => `Unknown option: --${option}`,
|
|
20
|
+
invalidChoice: (flag, choices, got) => `${flag} must be one of ${choices.join(" | ")} (got ${got})`,
|
|
21
|
+
notAssembled: (name) => `ama: ${name} is not assembled yet (the integration batch injects the provider registry)\n`,
|
|
22
|
+
providerNotFound: (id) => `ama: provider not found: ${id}\n`,
|
|
23
|
+
modelNotFound: (ref, candidates = []) => `ama: model not found: ${ref}` +
|
|
24
|
+
(candidates.length > 0 ? `; candidates: ${candidates.join(", ")}` : "") +
|
|
25
|
+
"\n",
|
|
26
|
+
noApiKey: (id) => `ama: ${id} has no API key (ama auth set ${id})\n`,
|
|
27
|
+
apiNotImplemented: (api) => `ama: protocol ${api} is not implemented yet\n`,
|
|
28
|
+
},
|
|
29
|
+
providers: {
|
|
30
|
+
usage: `Usage: ama providers add <id> --base-url <url> [--channel <name>=<api>@<url> …]
|
|
31
|
+
[--api openai-completions|openai-responses|anthropic-messages|auto]
|
|
32
|
+
[--key-env <VAR>] [--probe] [--limit N] [--probe-models a,b,…]
|
|
33
|
+
[--max-requests N] [--concurrency N] [--probe-timeout ms]
|
|
34
|
+
[--prefer chat,responses,messages] [--include-no-tools] [--yes]
|
|
35
|
+
ama providers list
|
|
36
|
+
ama providers channels <id>
|
|
37
|
+
ama providers remove <id>
|
|
38
|
+
ama providers refresh <id> [--probe] [--limit N] [--probe-models a,b,…] [--max-requests N]
|
|
39
|
+
[--concurrency N] [--probe-timeout ms] [--yes]
|
|
40
|
+
`,
|
|
41
|
+
positiveInt: (name, raw) => `--${name} needs a positive integer: ${raw}`,
|
|
42
|
+
needsYes: (what) => `ama: ${what}; add --yes in non-interactive environments\n`,
|
|
43
|
+
probePlan: (models, requests, max, dropped) => `\nProbe: ${plural(models, "model")}, ${plural(requests, "minimal request")} (1 per model per channel, limit ${max})` +
|
|
44
|
+
(dropped > 0 ? `; ${dropped} more over the limit are not probed` : "") +
|
|
45
|
+
"\n",
|
|
46
|
+
confirmProbe: (requests, path) => `Will send ${plural(requests, "billed request")} and write ${path}`,
|
|
47
|
+
invalidKeyEnv: (name) => `--key-env is not a valid variable name: ${name}`,
|
|
48
|
+
keyEnvUnset: (name) => `ama: warning: environment variable ${name} is not set; listing and probing will go without a key\n`,
|
|
49
|
+
keyPrompt: (id) => `Enter the API key for ${id} (not echoed), then press Enter: `,
|
|
50
|
+
noKeyOnStdin: "No key read from stdin (or use --key-env <VAR>)",
|
|
51
|
+
invalidId: (id) => `Invalid provider id: ${id}`,
|
|
52
|
+
missingInConfig: (path, id) => `ama: ${path} has no provider ${id} (run ama providers add first)\n`,
|
|
53
|
+
needsBaseUrl: "ama providers add needs --base-url <url> or --channel",
|
|
54
|
+
baseUrlNotHttp: (url) => `--base-url must be an http(s) URL: ${url}`,
|
|
55
|
+
noChannel: (id) => `${id} has no usable channel`,
|
|
56
|
+
listFailed: (id, message) => `ama: failed to list models of ${id}: ${message}\n`,
|
|
57
|
+
discovered: (id, n, url) => `${id}: found ${plural(n, "model")} (${url})\n`,
|
|
58
|
+
candidates: (list) => `Candidate channels: ${list.map((c) => `${c.name} (${c.api} ${c.baseUrl})`).join(" · ")}\n`,
|
|
59
|
+
goneUpstream: (ids) => `No longer listed upstream (not removed): ${ids.join(", ")}\n`,
|
|
60
|
+
writeSummary: (s) => `\nWill write ${s.path}: ${s.id} new channels ${s.channels.join(", ") || "none"}, ` +
|
|
61
|
+
`${plural(s.models, "new model")}` +
|
|
62
|
+
(s.authFile !== undefined ? `; key → ${s.authFile} (0600)` : "") +
|
|
63
|
+
(s.defaultModel !== undefined ? `; defaultModel → ${s.defaultModel}` : "") +
|
|
64
|
+
"\n",
|
|
65
|
+
defaultPick: (id, reason) => ` picked ${id}: ${reason}\n`,
|
|
66
|
+
noDefaultPick: " defaultModel not set: no model has tool calling, context ≥ 64k and known prices at once; set it with ama config edit\n",
|
|
67
|
+
nothingToWrite: "Nothing to write\n",
|
|
68
|
+
confirmWrite: "Confirm write",
|
|
69
|
+
written: (path, backup) => `Wrote ${path}${backup ? " (previous file backed up as config.json.bak)" : ""}\n`,
|
|
70
|
+
tryIt: (ref) => `Try: ama -p "hi" --model ${ref}\n`,
|
|
71
|
+
probeStopped: (reason) => `ama: probing stopped early (${reason})\n`,
|
|
72
|
+
channelNeedsValue: "--channel needs a value",
|
|
73
|
+
},
|
|
74
|
+
providersList: {
|
|
75
|
+
keyCommand: "!command (config.json)",
|
|
76
|
+
keyLiteral: "literal (config.json)",
|
|
77
|
+
keySameProvider: "same as provider",
|
|
78
|
+
keyNone: "none",
|
|
79
|
+
keyEnv: (name) => `env ${name}`,
|
|
80
|
+
providerLine: (s) => `${s.id} ${s.builtin ? "built-in" : "custom"} · ${s.channels > 0 ? plural(s.channels, "channel") : s.endpoint} · ` +
|
|
81
|
+
`${plural(s.models, "model")} · key ${s.key}\n`,
|
|
82
|
+
channelLine: (name, api, url, models, key) => ` @${name} ${api} ${url} ${plural(models, "model")} · key ${key}\n`,
|
|
83
|
+
noProviders: "No providers configured (ama providers add <id> --base-url <url>)\n",
|
|
84
|
+
singleChannel: (id, api, url, models) => `${id}: single channel (${api} ${url}), ${plural(models, "model")}\n`,
|
|
85
|
+
channelDetail: (s) => `@${s.name}${s.isDefault ? " (default)" : ""} ${s.short} ${s.api} ${s.url} key ${s.key}\n` +
|
|
86
|
+
` ${plural(s.models.length, "model")}${s.models.length > 0 ? `: ${s.models.join(", ")}` : ""}\n`,
|
|
87
|
+
removed: (path, id) => `Removed ${id} from ${path} (previous file backed up as config.json.bak)\n`,
|
|
88
|
+
keysRemoved: (path, id, n) => `Deleted ${plural(n, "key")} of ${id} from ${path}\n`,
|
|
89
|
+
noSuchProvider: (id) => `ama: no provider ${id}\n`,
|
|
90
|
+
},
|
|
91
|
+
providersPlan: {
|
|
92
|
+
channelSpec: (spec) => `--channel must be <name>=<api>@<url>: ${spec}`,
|
|
93
|
+
channelName: (name) => `Invalid channel name: ${name}`,
|
|
94
|
+
channelApi: (choices, got) => `--channel api must be one of ${choices.join(" | ")} (got ${got})`,
|
|
95
|
+
channelUrl: (url) => `--channel url must be an http(s) URL: ${url}`,
|
|
96
|
+
status: {
|
|
97
|
+
ok: "probe passed",
|
|
98
|
+
unprobed: "not probed",
|
|
99
|
+
failed: "probe failed, not written",
|
|
100
|
+
noTools: "no tool calling, not written",
|
|
101
|
+
noChannel: "no candidate channel works, not written",
|
|
102
|
+
existing: "already present, unchanged",
|
|
103
|
+
},
|
|
104
|
+
yes: "yes",
|
|
105
|
+
no: "no",
|
|
106
|
+
head: {
|
|
107
|
+
model: "model",
|
|
108
|
+
channel: "channel",
|
|
109
|
+
context: "context",
|
|
110
|
+
output: "output",
|
|
111
|
+
image: "image",
|
|
112
|
+
reasoning: "reasoning",
|
|
113
|
+
tools: "tools",
|
|
114
|
+
price: "price$/M",
|
|
115
|
+
status: "status",
|
|
116
|
+
},
|
|
117
|
+
},
|
|
118
|
+
probe: {
|
|
119
|
+
throttled: (n) => ` hit 429 rate limiting, concurrency down to ${n}, retrying once later\n`,
|
|
120
|
+
recovered: (n) => ` no rate limiting for a while, concurrency back up to ${n}\n`,
|
|
121
|
+
modelLine: (id, ok, failed, complete) => ` ${id} ${ok.length > 0 ? ok.join(", ") : "all failed"}` +
|
|
122
|
+
(failed.length > 0
|
|
123
|
+
? ` (failed ${failed.map((f) => `${f.name}: ${f.error}`).join("; ")})`
|
|
124
|
+
: "") +
|
|
125
|
+
(complete ? "" : " (probing stopped early, some channels not probed)") +
|
|
126
|
+
"\n",
|
|
127
|
+
apiNotImplemented: (api) => `protocol ${api} is not implemented yet`,
|
|
128
|
+
timeout: (seconds) => `timeout (no response within ${seconds} s)`,
|
|
129
|
+
rateLimitedStop: (error) => `repeated 429 rate limiting: ${error}`,
|
|
130
|
+
intRange: (name, min, max, raw) => `--${name} needs an integer in ${min}–${max}: ${raw}`,
|
|
131
|
+
plan: (concurrency, timeoutSeconds, worst) => `concurrency ${concurrency}, at most ${timeoutSeconds} s per request, at most ${worst} s in total`,
|
|
132
|
+
done: (done, total, seconds) => `Probing done ${done}/${total} in ${seconds} s\n`,
|
|
133
|
+
progress: (done, total) => `Probing ${done}/${total}`,
|
|
134
|
+
},
|
|
135
|
+
stats: {
|
|
136
|
+
usage: `Usage: ama stats [--since 7d|30d|today|YYYY-MM-DD] [--until …]
|
|
137
|
+
[--by day|week|month|provider|channel|model|project]
|
|
138
|
+
[--project <dir> | --all] [--top N] [--json] [--no-cache] [--session-dir <dir>]
|
|
139
|
+
`,
|
|
140
|
+
daysAtLeastOne: (option, raw) => `--${option} needs at least 1 day (got ${raw})`,
|
|
141
|
+
daySpec: (option, raw) => `--${option} must be 7d, today or YYYY-MM-DD (got ${raw})`,
|
|
142
|
+
allTime: "all time",
|
|
143
|
+
range: (since, until) => `${since ?? "earliest"} – ${until ?? "today"}`,
|
|
144
|
+
header: (range, scope, sessions) => `${range} · ${scope} · ${plural(sessions, "session")}`,
|
|
145
|
+
noRequests: "No model requests",
|
|
146
|
+
kindTurn: "chat",
|
|
147
|
+
costUnpriced: "— (no request had a priced model; see tokens)",
|
|
148
|
+
costPartial: (cost, unpriced) => `${cost} (${plural(unpriced, "more request")} without prices, not included)`,
|
|
149
|
+
rows: {
|
|
150
|
+
requests: "Requests",
|
|
151
|
+
turns: "Turns",
|
|
152
|
+
tokens: "Tokens",
|
|
153
|
+
hitRate: "Cache hit rate",
|
|
154
|
+
cost: "Cost",
|
|
155
|
+
subscription: "Subscription",
|
|
156
|
+
errors: "Errors / retries",
|
|
157
|
+
},
|
|
158
|
+
subscriptionValue: (requests) => `${plural(requests, "request")} on a ChatGPT plan (not billed in USD, not in the cost)`,
|
|
159
|
+
requestsValue: (requests, kinds) => `${requests} (${kinds})`,
|
|
160
|
+
turnsValue: (turns, avg) => `${turns} · avg ${avg}`,
|
|
161
|
+
tokensValue: (input, output, read, write) => `input ${input} · output ${output} · cache read ${read} · cache write ${write}`,
|
|
162
|
+
hitRateValue: (rate, reported, total) => `${rate} (endpoints reporting cache ${reported}/${total}; the rest are not in the denominator)`,
|
|
163
|
+
groupHead: {
|
|
164
|
+
sessions: "sessions",
|
|
165
|
+
requests: "requests",
|
|
166
|
+
turns: "turns",
|
|
167
|
+
input: "input",
|
|
168
|
+
output: "output",
|
|
169
|
+
cacheRead: "cache rd",
|
|
170
|
+
cacheWrite: "cache wr",
|
|
171
|
+
hitRate: "hit rate",
|
|
172
|
+
cost: "cost",
|
|
173
|
+
},
|
|
174
|
+
topTools: (n) => `Top ${n} tool calls`,
|
|
175
|
+
noPositionals: (arg) => `ama stats takes no positional arguments: ${arg}`,
|
|
176
|
+
topNonNegative: "--top must be a non-negative integer",
|
|
177
|
+
allProjects: "all projects",
|
|
178
|
+
project: (path) => `project ${path}`,
|
|
179
|
+
skippedInvalid: (n) => `ama: skipped ${plural(n, "unreadable session file")}\n`,
|
|
180
|
+
},
|
|
181
|
+
models: {
|
|
182
|
+
usage: (lines) => `Usage: ${lines.join("\n ")}\n`,
|
|
183
|
+
refreshCatalogUsage: "ama models refresh-catalog (old name of refresh)",
|
|
184
|
+
keyFrom: (source, origin) => `key: ${source}${origin !== undefined ? ` (${origin})` : ""}`,
|
|
185
|
+
noKey: "no key",
|
|
186
|
+
keyNotNeeded: "no key needed",
|
|
187
|
+
checkFailed: (ref, ms, error) => `ama: ${ref} failed (${ms} ms): ${error}\n`,
|
|
188
|
+
checkOk: (ref, api, ms, stopReason) => `${ref} available (${api}, ${ms} ms, stopReason ${stopReason})\n`,
|
|
189
|
+
refreshing: (fetchedAt) => `Built-in snapshot: ${fetchedAt}; fetching models.dev…\n`,
|
|
190
|
+
written: (path) => `Wrote ${path}\n`,
|
|
191
|
+
},
|
|
192
|
+
modelMeta: {
|
|
193
|
+
reasoning: "thinking",
|
|
194
|
+
image: "images",
|
|
195
|
+
channels: (names) => `channels ${names.join(",")}`,
|
|
196
|
+
price: "price",
|
|
197
|
+
sources: (parts, match, noTools) => `sources ${parts.join(" · ")}` +
|
|
198
|
+
(match !== undefined ? `; models.dev ${match}` : "") +
|
|
199
|
+
(noTools ? "; no tool calling" : ""),
|
|
200
|
+
},
|
|
201
|
+
cacheProbe: {
|
|
202
|
+
adviceSilent: (provider, cacheFieldPresent) => `Set providers.${provider}.compat.cacheReporting: "silent" in config and the status bar will show not reported` +
|
|
203
|
+
(cacheFieldPresent
|
|
204
|
+
? " (the response has cache fields but they stay 0; cache writes may also be delayed, try a larger --gap-ms)"
|
|
205
|
+
: ""),
|
|
206
|
+
adviceInconclusive: "The second request read only a little cache or only wrote: maybe cache granularity or TTL; retry with a larger --tokens or a shorter --gap-ms",
|
|
207
|
+
advicePromptCache: (provider, id) => `Fill in promptCache.short yourself to enable warming (providers.${provider}.modelOverrides: [{ "id": "${id}", "promptCache": { "short": 300 } }])`,
|
|
208
|
+
intAtLeast: (name, min) => `--${name} must be an integer ≥ ${min}`,
|
|
209
|
+
yes: "yes",
|
|
210
|
+
no: "no",
|
|
211
|
+
sample: (index, input, read, write, field) => `#${index} input ${input} · cacheRead ${read} · cacheWrite ${write} · cache fields ${field}`,
|
|
212
|
+
head: (name, api, tokens, gapMs, estimate) => `cache-probe ${name} (${api}) · prefix ≈ ${tokens} tokens · gap ${gapMs} ms\n` +
|
|
213
|
+
`Estimated cost: ${estimate} (2 × ${tokens} tokens × catalog price)\n`,
|
|
214
|
+
needsYes: "ama: cache-probe sends two billed requests; add --yes in non-interactive environments\n",
|
|
215
|
+
requestFailed: (n, error) => `ama: request ${n} failed: ${error}\n`,
|
|
216
|
+
share: (percent) => ` (the second request read ${percent}% of the prefix)`,
|
|
217
|
+
usageFields: (api, fields) => `usage fields (read for ${api}): ${fields.join(" / ")}`,
|
|
218
|
+
verdict: (verdict, share) => `Verdict: ${verdict}${share}`,
|
|
219
|
+
advice: (advice) => `Advice: ${advice}`,
|
|
220
|
+
},
|
|
221
|
+
init: {
|
|
222
|
+
usage: `Usage: ama init [--force] Create the config directory (0700), config.json and config.schema.json
|
|
223
|
+
An existing config.json is kept (--force backs it up as .bak, then rewrites); auth.json is not created
|
|
224
|
+
`,
|
|
225
|
+
},
|
|
226
|
+
sessionsExport: {
|
|
227
|
+
usage: `Usage: ama sessions export <id> [--format md|json|jsonl] [--output <file>] [--branch leaf|all]
|
|
228
|
+
[--session-dir <dir>]
|
|
229
|
+
`,
|
|
230
|
+
exported: (path) => `Exported to ${path}\n`,
|
|
231
|
+
},
|
|
232
|
+
sessionsSearch: {
|
|
233
|
+
usage: `Usage: ama sessions search <term|/regex/flags> [--all] [--role user|assistant|tool]
|
|
234
|
+
[--since 7d|today|YYYY-MM-DD] [--limit N] [--json] [--session-dir <dir>]
|
|
235
|
+
`,
|
|
236
|
+
needsPattern: "ama sessions search needs a term or /regex/",
|
|
237
|
+
invalidRegex: (message) => `Invalid regex: ${message}`,
|
|
238
|
+
limitPositive: "--limit must be a positive integer",
|
|
239
|
+
noHits: (all) => all ? "No matches\n" : "No matches (only sessions of this directory; --all searches all)\n",
|
|
240
|
+
truncated: (limit) => `(reached --limit ${limit}; there may be more)\n`,
|
|
241
|
+
},
|
|
242
|
+
};
|
|
243
|
+
export const zh = {
|
|
244
|
+
...configShow.zh,
|
|
245
|
+
common: {
|
|
246
|
+
warning: (text) => `ama: 警告:${text}\n`,
|
|
247
|
+
cancelled: "ama: 已取消\n",
|
|
248
|
+
extraArgs: (text) => `多余的参数:${text}`,
|
|
249
|
+
needsArg: (command, arg) => `${command} 需要 ${arg}`,
|
|
250
|
+
unknownSubcommand: (group, name) => `未知的 ${group} 子命令:${name}`,
|
|
251
|
+
unknownOption: (option) => `未知选项:--${option}`,
|
|
252
|
+
invalidChoice: (flag, choices, got) => `${flag} 的取值应为 ${choices.join(" | ")}(收到 ${got})`,
|
|
253
|
+
notAssembled: (name) => `ama: ${name} 尚未装配(供应商注册表由集成批次注入)\n`,
|
|
254
|
+
providerNotFound: (id) => `ama: 供应商不存在:${id}\n`,
|
|
255
|
+
modelNotFound: (ref, candidates = []) => `ama: 模型不存在:${ref}` +
|
|
256
|
+
(candidates.length > 0 ? `;候选:${candidates.join(", ")}` : "") +
|
|
257
|
+
"\n",
|
|
258
|
+
noApiKey: (id) => `ama: ${id} 没有 API key(ama auth set ${id})\n`,
|
|
259
|
+
apiNotImplemented: (api) => `ama: 协议 ${api} 尚未实现\n`,
|
|
260
|
+
},
|
|
261
|
+
providers: {
|
|
262
|
+
usage: `用法:ama providers add <id> --base-url <url> [--channel <名字>=<协议>@<地址> …]
|
|
263
|
+
[--api openai-completions|openai-responses|anthropic-messages|auto]
|
|
264
|
+
[--key-env <VAR>] [--probe] [--limit N] [--probe-models a,b,…]
|
|
265
|
+
[--max-requests N] [--concurrency N] [--probe-timeout ms]
|
|
266
|
+
[--prefer chat,responses,messages] [--include-no-tools] [--yes]
|
|
267
|
+
ama providers list
|
|
268
|
+
ama providers channels <id>
|
|
269
|
+
ama providers remove <id>
|
|
270
|
+
ama providers refresh <id> [--probe] [--limit N] [--probe-models a,b,…] [--max-requests N]
|
|
271
|
+
[--concurrency N] [--probe-timeout ms] [--yes]
|
|
272
|
+
`,
|
|
273
|
+
positiveInt: (name, raw) => `--${name} 需要正整数:${raw}`,
|
|
274
|
+
needsYes: (what) => `ama: ${what},非交互环境需加 --yes\n`,
|
|
275
|
+
probePlan: (models, requests, max, dropped) => `\n探测:${models} 个模型、${requests} 次最小请求(每模型每渠道 1 次,上限 ${max})` +
|
|
276
|
+
(dropped > 0 ? `;另有 ${dropped} 个超出上限未探测` : "") +
|
|
277
|
+
"\n",
|
|
278
|
+
confirmProbe: (requests, path) => `将发 ${requests} 次计费请求并写入 ${path}`,
|
|
279
|
+
invalidKeyEnv: (name) => `--key-env 不是合法的变量名:${name}`,
|
|
280
|
+
keyEnvUnset: (name) => `ama: 警告:环境变量 ${name} 未设置,列模型与探测将不带 key\n`,
|
|
281
|
+
keyPrompt: (id) => `输入 ${id} 的 API key(不回显),回车结束:`,
|
|
282
|
+
noKeyOnStdin: "没有从 stdin 读到 key(或用 --key-env <VAR>)",
|
|
283
|
+
invalidId: (id) => `供应商 id 不合法:${id}`,
|
|
284
|
+
missingInConfig: (path, id) => `ama: ${path} 里没有供应商 ${id}(先 ama providers add)\n`,
|
|
285
|
+
needsBaseUrl: "ama providers add 需要 --base-url <url> 或 --channel",
|
|
286
|
+
baseUrlNotHttp: (url) => `--base-url 应为 http(s) URL:${url}`,
|
|
287
|
+
noChannel: (id) => `${id} 没有可用的渠道`,
|
|
288
|
+
listFailed: (id, message) => `ama: ${id} 模型列表获取失败:${message}\n`,
|
|
289
|
+
discovered: (id, n, url) => `${id}:发现 ${n} 个模型(${url})\n`,
|
|
290
|
+
candidates: (list) => `候选渠道:${list.map((c) => `${c.name}(${c.api} ${c.baseUrl})`).join(" · ")}\n`,
|
|
291
|
+
goneUpstream: (ids) => `上游已不再列出(未删除):${ids.join(", ")}\n`,
|
|
292
|
+
writeSummary: (s) => `\n将写入 ${s.path}:${s.id} 新增渠道 ${s.channels.join(", ") || "无"},` +
|
|
293
|
+
`新增模型 ${s.models} 个` +
|
|
294
|
+
(s.authFile !== undefined ? `;key → ${s.authFile}(0600)` : "") +
|
|
295
|
+
(s.defaultModel !== undefined ? `;defaultModel → ${s.defaultModel}` : "") +
|
|
296
|
+
"\n",
|
|
297
|
+
defaultPick: (id, reason) => ` 选 ${id}:${reason}\n`,
|
|
298
|
+
noDefaultPick: " 未设置 defaultModel:没有同时支持工具调用、上下文 ≥ 64k 且有价格的模型;用 ama config edit 设置\n",
|
|
299
|
+
nothingToWrite: "没有要写入的内容\n",
|
|
300
|
+
confirmWrite: "确认写入",
|
|
301
|
+
written: (path, backup) => `已写入 ${path}${backup ? "(原文件备份为 config.json.bak)" : ""}\n`,
|
|
302
|
+
tryIt: (ref) => `试试:ama -p "hi" --model ${ref}\n`,
|
|
303
|
+
probeStopped: (reason) => `ama: 探测提前停止(${reason})\n`,
|
|
304
|
+
channelNeedsValue: "--channel 需要一个值",
|
|
305
|
+
},
|
|
306
|
+
providersList: {
|
|
307
|
+
keyCommand: "!命令(config.json)",
|
|
308
|
+
keyLiteral: "字面量(config.json)",
|
|
309
|
+
keySameProvider: "同供应商",
|
|
310
|
+
keyNone: "无",
|
|
311
|
+
keyEnv: (name) => `环境变量 ${name}`,
|
|
312
|
+
providerLine: (s) => `${s.id} ${s.builtin ? "内置" : "自定义"} · ${s.channels > 0 ? `${s.channels} 渠道` : s.endpoint} · ` +
|
|
313
|
+
`${s.models} 模型 · key ${s.key}\n`,
|
|
314
|
+
channelLine: (name, api, url, models, key) => ` @${name} ${api} ${url} ${models} 模型 · key ${key}\n`,
|
|
315
|
+
noProviders: "没有配置供应商(ama providers add <id> --base-url <url>)\n",
|
|
316
|
+
singleChannel: (id, api, url, models) => `${id}:单渠道(${api} ${url}),${models} 模型\n`,
|
|
317
|
+
channelDetail: (s) => `@${s.name}${s.isDefault ? "(缺省)" : ""} ${s.short} ${s.api} ${s.url} key ${s.key}\n` +
|
|
318
|
+
` ${s.models.length} 模型${s.models.length > 0 ? `:${s.models.join(", ")}` : ""}\n`,
|
|
319
|
+
removed: (path, id) => `已从 ${path} 删除 ${id}(原文件备份为 config.json.bak)\n`,
|
|
320
|
+
keysRemoved: (path, id, n) => `已删除 ${path} 里 ${id} 的 ${n} 个 key\n`,
|
|
321
|
+
noSuchProvider: (id) => `ama: 没有供应商 ${id}\n`,
|
|
322
|
+
},
|
|
323
|
+
providersPlan: {
|
|
324
|
+
channelSpec: (spec) => `--channel 应为 <名字>=<协议>@<地址>:${spec}`,
|
|
325
|
+
channelName: (name) => `渠道名不合法:${name}`,
|
|
326
|
+
channelApi: (choices, got) => `--channel 的协议应为 ${choices.join(" | ")}(收到 ${got})`,
|
|
327
|
+
channelUrl: (url) => `--channel 的地址应为 http(s) URL:${url}`,
|
|
328
|
+
status: {
|
|
329
|
+
ok: "探测通过",
|
|
330
|
+
unprobed: "未探测",
|
|
331
|
+
failed: "探测失败,不写入",
|
|
332
|
+
noTools: "不支持工具调用,不写入",
|
|
333
|
+
noChannel: "候选渠道都不支持,不写入",
|
|
334
|
+
existing: "已存在,未改动",
|
|
335
|
+
},
|
|
336
|
+
yes: "是",
|
|
337
|
+
no: "否",
|
|
338
|
+
head: {
|
|
339
|
+
model: "模型",
|
|
340
|
+
channel: "渠道",
|
|
341
|
+
context: "上下文",
|
|
342
|
+
output: "输出",
|
|
343
|
+
image: "图像",
|
|
344
|
+
reasoning: "推理",
|
|
345
|
+
tools: "工具",
|
|
346
|
+
price: "价格$/M",
|
|
347
|
+
status: "状态",
|
|
348
|
+
},
|
|
349
|
+
},
|
|
350
|
+
probe: {
|
|
351
|
+
throttled: (n) => ` 遇到 429 限流,并发降到 ${n},稍后重试一次\n`,
|
|
352
|
+
recovered: (n) => ` 一段时间没再限流,并发回升到 ${n}\n`,
|
|
353
|
+
modelLine: (id, ok, failed, complete) => ` ${id} ${ok.length > 0 ? ok.join(", ") : "全部失败"}` +
|
|
354
|
+
(failed.length > 0
|
|
355
|
+
? `(失败 ${failed.map((f) => `${f.name}:${f.error}`).join(";")})`
|
|
356
|
+
: "") +
|
|
357
|
+
(complete ? "" : "(探测提前停止,部分渠道未探)") +
|
|
358
|
+
"\n",
|
|
359
|
+
apiNotImplemented: (api) => `协议 ${api} 尚未实现`,
|
|
360
|
+
timeout: (seconds) => `超时(${seconds} s 内没有响应)`,
|
|
361
|
+
rateLimitedStop: (error) => `连续 429 限流:${error}`,
|
|
362
|
+
intRange: (name, min, max, raw) => `--${name} 需要 ${min}–${max} 的整数:${raw}`,
|
|
363
|
+
plan: (concurrency, timeoutSeconds, worst) => `并发 ${concurrency},单次最长 ${timeoutSeconds} s,预计不超过 ${worst} s`,
|
|
364
|
+
done: (done, total, seconds) => `探测完成 ${done}/${total},用时 ${seconds} s\n`,
|
|
365
|
+
progress: (done, total) => `探测 ${done}/${total}`,
|
|
366
|
+
},
|
|
367
|
+
stats: {
|
|
368
|
+
usage: `用法:ama stats [--since 7d|30d|today|YYYY-MM-DD] [--until …]
|
|
369
|
+
[--by day|week|month|provider|channel|model|project]
|
|
370
|
+
[--project <目录> | --all] [--top N] [--json] [--no-cache] [--session-dir <目录>]
|
|
371
|
+
`,
|
|
372
|
+
daysAtLeastOne: (option, raw) => `--${option} 的天数至少为 1(收到 ${raw})`,
|
|
373
|
+
daySpec: (option, raw) => `--${option} 应为 7d、today 或 YYYY-MM-DD(收到 ${raw})`,
|
|
374
|
+
allTime: "全部时间",
|
|
375
|
+
range: (since, until) => `${since ?? "最早"} – ${until ?? "今天"}`,
|
|
376
|
+
header: (range, scope, sessions) => `${range} · ${scope} · ${sessions} 个会话`,
|
|
377
|
+
noRequests: "没有模型请求",
|
|
378
|
+
kindTurn: "对话",
|
|
379
|
+
costUnpriced: "— (所有请求的模型都无价格,见 token)",
|
|
380
|
+
costPartial: (cost, unpriced) => `${cost}(另有 ${unpriced} 次请求无价,未计入)`,
|
|
381
|
+
rows: {
|
|
382
|
+
requests: "请求",
|
|
383
|
+
turns: "回合",
|
|
384
|
+
tokens: "Token",
|
|
385
|
+
hitRate: "缓存命中率",
|
|
386
|
+
cost: "费用",
|
|
387
|
+
subscription: "订阅",
|
|
388
|
+
errors: "错误 / 重试",
|
|
389
|
+
},
|
|
390
|
+
subscriptionValue: (requests) => `${requests} 次请求走 ChatGPT 套餐(不折算美元、不计入费用)`,
|
|
391
|
+
requestsValue: (requests, kinds) => `${requests}(${kinds})`,
|
|
392
|
+
turnsValue: (turns, avg) => `${turns} · 平均耗时 ${avg}`,
|
|
393
|
+
tokensValue: (input, output, read, write) => `输入 ${input} · 输出 ${output} · 缓存读 ${read} · 缓存写 ${write}`,
|
|
394
|
+
hitRateValue: (rate, reported, total) => `${rate}(报告缓存的端点 ${reported}/${total},其余不进分母)`,
|
|
395
|
+
groupHead: {
|
|
396
|
+
sessions: "会话",
|
|
397
|
+
requests: "请求",
|
|
398
|
+
turns: "回合",
|
|
399
|
+
input: "输入",
|
|
400
|
+
output: "输出",
|
|
401
|
+
cacheRead: "缓存读",
|
|
402
|
+
cacheWrite: "缓存写",
|
|
403
|
+
hitRate: "命中率",
|
|
404
|
+
cost: "费用",
|
|
405
|
+
},
|
|
406
|
+
topTools: (n) => `工具调用 Top ${n}`,
|
|
407
|
+
noPositionals: (arg) => `ama stats 不接受位置参数:${arg}`,
|
|
408
|
+
topNonNegative: "--top 应为非负整数",
|
|
409
|
+
allProjects: "全部项目",
|
|
410
|
+
project: (path) => `项目 ${path}`,
|
|
411
|
+
skippedInvalid: (n) => `ama: 跳过 ${n} 个无法读取的会话文件\n`,
|
|
412
|
+
},
|
|
413
|
+
models: {
|
|
414
|
+
usage: (lines) => `用法:${lines.join("\n ")}\n`,
|
|
415
|
+
refreshCatalogUsage: "ama models refresh-catalog(refresh 的旧名)",
|
|
416
|
+
keyFrom: (source, origin) => `key:${source}${origin !== undefined ? `(${origin})` : ""}`,
|
|
417
|
+
noKey: "无 key",
|
|
418
|
+
keyNotNeeded: "无需 key",
|
|
419
|
+
checkFailed: (ref, ms, error) => `ama: ${ref} 失败(${ms} ms):${error}\n`,
|
|
420
|
+
checkOk: (ref, api, ms, stopReason) => `${ref} 可用(${api},${ms} ms,stopReason ${stopReason})\n`,
|
|
421
|
+
refreshing: (fetchedAt) => `内置快照:${fetchedAt};正在拉取 models.dev…\n`,
|
|
422
|
+
written: (path) => `已写入 ${path}\n`,
|
|
423
|
+
},
|
|
424
|
+
modelMeta: {
|
|
425
|
+
reasoning: "思考",
|
|
426
|
+
image: "图片",
|
|
427
|
+
channels: (names) => `渠道 ${names.join(",")}`,
|
|
428
|
+
price: "价格",
|
|
429
|
+
sources: (parts, match, noTools) => `来源 ${parts.join(" · ")}` +
|
|
430
|
+
(match !== undefined ? `;models.dev ${match}` : "") +
|
|
431
|
+
(noTools ? ";不支持工具调用" : ""),
|
|
432
|
+
},
|
|
433
|
+
cacheProbe: {
|
|
434
|
+
adviceSilent: (provider, cacheFieldPresent) => `可在 config 里设 providers.${provider}.compat.cacheReporting: "silent",状态栏将显示未报告` +
|
|
435
|
+
(cacheFieldPresent
|
|
436
|
+
? "(响应里有缓存字段但恒为 0;也可能是缓存写入有延迟,可加大 --gap-ms 再测一次)"
|
|
437
|
+
: ""),
|
|
438
|
+
adviceInconclusive: "第二次只读到少量缓存或只有写入:可能是缓存粒度或 TTL 问题,可加大 --tokens 或缩短 --gap-ms 重试",
|
|
439
|
+
advicePromptCache: (provider, id) => `可自填 promptCache.short 以启用保温(providers.${provider}.modelOverrides: [{ "id": "${id}", "promptCache": { "short": 300 } }])`,
|
|
440
|
+
intAtLeast: (name, min) => `--${name} 应为不小于 ${min} 的整数`,
|
|
441
|
+
yes: "有",
|
|
442
|
+
no: "无",
|
|
443
|
+
sample: (index, input, read, write, field) => `#${index} input ${input} · cacheRead ${read} · cacheWrite ${write} · 缓存字段 ${field}`,
|
|
444
|
+
head: (name, api, tokens, gapMs, estimate) => `cache-probe ${name}(${api})· 前缀约 ${tokens} token · 间隔 ${gapMs} ms\n` +
|
|
445
|
+
`预估花费:${estimate}(两次 × ${tokens} token × 目录价)\n`,
|
|
446
|
+
needsYes: "ama: cache-probe 会发两次计费请求,非交互环境需加 --yes\n",
|
|
447
|
+
requestFailed: (n, error) => `ama: 第 ${n} 次请求失败:${error}\n`,
|
|
448
|
+
share: (percent) => `(第二次读到前缀的 ${percent}%)`,
|
|
449
|
+
usageFields: (api, fields) => `usage 字段(${api} 读取):${fields.join(" / ")}`,
|
|
450
|
+
verdict: (verdict, share) => `判定:${verdict}${share}`,
|
|
451
|
+
advice: (advice) => `建议:${advice}`,
|
|
452
|
+
},
|
|
453
|
+
init: {
|
|
454
|
+
usage: `用法:ama init [--force] 建配置目录(0700)与 config.json、config.schema.json
|
|
455
|
+
已有的 config.json 不覆盖(--force 先备份为 .bak 再重写);不创建 auth.json
|
|
456
|
+
`,
|
|
457
|
+
},
|
|
458
|
+
sessionsExport: {
|
|
459
|
+
usage: `用法:ama sessions export <id> [--format md|json|jsonl] [--output <文件>] [--branch leaf|all]
|
|
460
|
+
[--session-dir <目录>]
|
|
461
|
+
`,
|
|
462
|
+
exported: (path) => `已导出到 ${path}\n`,
|
|
463
|
+
},
|
|
464
|
+
sessionsSearch: {
|
|
465
|
+
usage: `用法:ama sessions search <关键词|/正则/标志> [--all] [--role user|assistant|tool]
|
|
466
|
+
[--since 7d|today|YYYY-MM-DD] [--limit N] [--json] [--session-dir <目录>]
|
|
467
|
+
`,
|
|
468
|
+
needsPattern: "ama sessions search 需要关键词或 /正则/",
|
|
469
|
+
invalidRegex: (message) => `正则无效:${message}`,
|
|
470
|
+
limitPositive: "--limit 应为正整数",
|
|
471
|
+
noHits: (all) => (all ? "没有命中\n" : "没有命中(只搜了当前目录的会话,--all 搜全部)\n"),
|
|
472
|
+
truncated: (limit) => `(已到 --limit ${limit},可能还有更多)\n`,
|
|
473
|
+
},
|
|
474
|
+
};
|