@armadra/agent 0.6.2 → 0.6.4
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 +85 -0
- package/CHANGELOG.zh-CN.md +59 -0
- package/README.md +168 -575
- package/README.zh-CN.md +165 -596
- package/dist/agent/queue.d.ts +9 -0
- package/dist/agent/queue.js +27 -0
- package/dist/agent/session-subagent.d.ts +1 -0
- package/dist/agent/session-subagent.js +9 -0
- package/dist/agent/session.d.ts +11 -0
- package/dist/agent/session.js +29 -2
- package/dist/agent/subagent-background.d.ts +75 -0
- package/dist/agent/subagent-background.js +209 -0
- package/dist/agent/subagent-direct.d.ts +5 -2
- package/dist/agent/subagent-direct.js +34 -1
- package/dist/agent/subagent-registry.d.ts +26 -6
- package/dist/agent/subagent-registry.js +66 -94
- package/dist/agent/types-w5.d.ts +11 -1
- package/dist/agent/types.d.ts +12 -0
- package/dist/agents/builtin.js +0 -1
- package/dist/agents/external.js +0 -1
- package/dist/agents/parse.js +4 -3
- package/dist/agents/result.d.ts +7 -1
- package/dist/agents/result.js +20 -1
- package/dist/agents/task-control.d.ts +13 -2
- package/dist/agents/task-record.d.ts +16 -4
- package/dist/agents/task-record.js +32 -0
- package/dist/agents/types.d.ts +5 -1
- package/dist/ai/apis/chatgpt-rate-limits.js +7 -2
- package/dist/ai/providers/discovered-cache.d.ts +10 -4
- package/dist/ai/providers/discovered-cache.js +30 -14
- package/dist/ai/types.d.ts +2 -1
- package/dist/auth/chatgpt/backend-client.d.ts +6 -5
- package/dist/auth/chatgpt/backend-client.js +8 -7
- package/dist/bundle/ama.cjs +2034 -552
- package/dist/cli/compose-agents.d.ts +2 -1
- package/dist/cli/compose-agents.js +11 -2
- package/dist/cli/subcommands/models-discover.d.ts +1 -0
- package/dist/cli/subcommands/models-discover.js +12 -2
- package/dist/config/json-schema.js +10 -2
- package/dist/config/key-docs.js +9 -2
- package/dist/config/merge.d.ts +1 -1
- package/dist/config/merge.js +20 -3
- package/dist/config/schema-w5.js +4 -2
- package/dist/config/schema.js +4 -0
- package/dist/config/settings-registry.js +5 -0
- package/dist/config/types-w5.d.ts +10 -0
- package/dist/config/types-w5.js +2 -0
- package/dist/config/types.d.ts +5 -1
- package/dist/drivers/runner.js +29 -2
- package/dist/git/info.d.ts +19 -0
- package/dist/git/info.js +64 -8
- package/dist/i18n/catalog.d.ts +58 -8
- package/dist/i18n/messages/agents.d.ts +60 -0
- package/dist/i18n/messages/agents.js +62 -2
- package/dist/i18n/messages/config-keys.d.ts +8 -0
- package/dist/i18n/messages/config-keys.js +18 -10
- package/dist/i18n/messages/config.d.ts +8 -0
- package/dist/i18n/messages/interactive-startup.d.ts +0 -16
- package/dist/i18n/messages/interactive-startup.js +0 -16
- package/dist/i18n/messages/interactive-view.d.ts +8 -0
- package/dist/i18n/messages/interactive-view.js +10 -0
- package/dist/i18n/messages/interactive.d.ts +33 -16
- package/dist/i18n/messages/interactive.js +31 -0
- package/dist/i18n/messages/print.d.ts +4 -0
- package/dist/i18n/messages/print.js +4 -0
- package/dist/i18n/messages/report.d.ts +8 -0
- package/dist/i18n/messages/report.js +12 -4
- package/dist/i18n/messages/settings.d.ts +8 -0
- package/dist/i18n/messages/settings.js +8 -0
- package/dist/i18n/messages/subcommands-config.d.ts +4 -0
- package/dist/i18n/messages/subcommands-config.js +4 -0
- package/dist/i18n/messages/subcommands.d.ts +4 -0
- package/dist/index.d.ts +1 -0
- package/dist/modes/commands-core.js +19 -4
- package/dist/modes/interactive/agent-bar.d.ts +3 -1
- package/dist/modes/interactive/agent-bar.js +12 -5
- package/dist/modes/interactive/agent-ui.d.ts +21 -3
- package/dist/modes/interactive/agent-ui.js +82 -12
- package/dist/modes/interactive/agent-view.d.ts +9 -0
- package/dist/modes/interactive/agent-view.js +28 -4
- package/dist/modes/interactive/approval-dock.d.ts +51 -0
- package/dist/modes/interactive/approval-dock.js +112 -0
- package/dist/modes/interactive/approval-ui.d.ts +43 -0
- package/dist/modes/interactive/approval-ui.js +64 -0
- package/dist/modes/interactive/commands.js +4 -1
- package/dist/modes/interactive/event-notices.d.ts +6 -1
- package/dist/modes/interactive/event-notices.js +7 -1
- package/dist/modes/interactive/interactive-mode.d.ts +4 -2
- package/dist/modes/interactive/interactive-mode.js +46 -39
- package/dist/modes/interactive/interrupt-send.d.ts +25 -0
- package/dist/modes/interactive/interrupt-send.js +32 -0
- package/dist/modes/interactive/key-dispatch.d.ts +29 -5
- package/dist/modes/interactive/key-dispatch.js +97 -8
- package/dist/modes/interactive/line/line-mode.d.ts +1 -0
- package/dist/modes/interactive/line/line-mode.js +34 -7
- package/dist/modes/interactive/run-indicator.d.ts +34 -2
- package/dist/modes/interactive/run-indicator.js +62 -8
- package/dist/modes/interactive/session-events.js +5 -1
- package/dist/modes/interactive/startup-header.d.ts +29 -14
- package/dist/modes/interactive/startup-header.js +93 -59
- package/dist/modes/interactive/startup-logo.d.ts +83 -0
- package/dist/modes/interactive/startup-logo.js +183 -0
- package/dist/modes/interactive/status-area.d.ts +18 -0
- package/dist/modes/interactive/status-area.js +67 -1
- package/dist/modes/interactive/status-bar.d.ts +13 -2
- package/dist/modes/interactive/status-bar.js +60 -17
- package/dist/modes/interactive/status-line.d.ts +11 -8
- package/dist/modes/interactive/status-line.js +52 -39
- package/dist/modes/interactive/status-quota.d.ts +58 -0
- package/dist/modes/interactive/status-quota.js +155 -0
- package/dist/modes/interactive/subagent-view.d.ts +1 -0
- package/dist/modes/interactive/subagent-view.js +8 -0
- package/dist/modes/interactive/task-background.d.ts +31 -0
- package/dist/modes/interactive/task-background.js +68 -0
- package/dist/modes/interactive/tool-view.d.ts +7 -1
- package/dist/modes/interactive/tool-view.js +24 -1
- package/dist/modes/print/print-mode.d.ts +11 -0
- package/dist/modes/print/print-mode.js +36 -1
- package/dist/modes/rpc/commands.d.ts +4 -1
- package/dist/modes/rpc/commands.js +24 -2
- package/dist/rpc.d.ts +20 -0
- package/dist/rpc.js +3 -0
- package/dist/tools/task-ctl.d.ts +2 -0
- package/dist/tools/task-ctl.js +7 -2
- package/dist/tools/task.d.ts +11 -0
- package/dist/tools/task.js +20 -2
- package/dist/tools/types.d.ts +6 -0
- package/dist/tui/components/editor.d.ts +2 -0
- package/dist/tui/components/editor.js +4 -0
- package/dist/tui/components/loader.d.ts +5 -1
- package/dist/tui/components/loader.js +18 -5
- package/dist/tui/keybindings.d.ts +15 -3
- package/dist/tui/keybindings.js +15 -3
- package/docs/agents.md +52 -28
- package/docs/en/host-api.md +5 -1
- package/docs/en/providers.md +1 -1
- package/docs/en/rpc.md +28 -14
- package/docs/en/sessions.md +3 -1
- package/docs/en/tui.md +106 -70
- package/docs/host-api.md +5 -1
- package/docs/providers.md +4 -2
- package/docs/rpc.md +28 -14
- package/docs/session-format.md +1 -1
- package/docs/sessions.md +2 -1
- package/docs/tui-design.md +42 -29
- package/docs/tui.md +106 -70
- package/package.json +1 -1
|
@@ -3,9 +3,13 @@
|
|
|
3
3
|
*
|
|
4
4
|
* 模型表为空、接受任意 slug 的供应商(`chatgpt` 的订阅后端)在选择器里原本一个模型都看不到。
|
|
5
5
|
* `ama auth login chatgpt` 成功后与 `ama models discover chatgpt` 把账户可用的 slug 写进这里;组装注册表时
|
|
6
|
-
* (`mergeDiscoveredModels
|
|
7
|
-
*
|
|
8
|
-
*
|
|
6
|
+
* (`mergeDiscoveredModels`)并入**模型表仍为空**的供应商。`ama auth logout chatgpt` 删掉它。只存 slug、显示名、
|
|
7
|
+
* 后端给的元数据(上下文窗口、输入模态、推理强度)、flavor 与时间戳——没有 token、账户 id。
|
|
8
|
+
*
|
|
9
|
+
* 元数据优先级:后端明确给的 > models.dev(快照 ⊕ 用户刷新)> 自定义缺省。上下文窗口尤其如此:订阅后端的生效
|
|
10
|
+
* 窗口(如 codex 的 272k)可能远小于 models.dev 记的 API 版窗口(1.1M),按后者算压缩阈值会让请求超窗被拒。
|
|
11
|
+
* 旧版本写的缓存(siwc 不含上下文窗口)照旧用 models.dev;`chatgpt` 两边都没有时用保守缺省
|
|
12
|
+
* `SUBSCRIPTION_FALLBACK_CONTEXT_WINDOW`,不让自动压缩关闭。
|
|
9
13
|
*
|
|
10
14
|
* ChatGPT 的缓存带登录 flavor;组装时与当前登录的 flavor 不符视为过期、不并入(选择器提示重新发现)。
|
|
11
15
|
*/
|
|
@@ -93,26 +97,38 @@ export function thinkingMapOf(levels) {
|
|
|
93
97
|
map[level] = levels.includes(level) ? level : null;
|
|
94
98
|
return map;
|
|
95
99
|
}
|
|
96
|
-
/** models.dev
|
|
97
|
-
|
|
98
|
-
|
|
100
|
+
/** 订阅后端:models.dev 与后端都没给上下文窗口时的保守缺省。 */
|
|
101
|
+
export const SUBSCRIPTION_FALLBACK_CONTEXT_WINDOW = 128_000;
|
|
102
|
+
const SUBSCRIPTION_PROVIDERS = new Set(["chatgpt"]);
|
|
103
|
+
/** 后端明确给的元数据覆盖 models.dev 补的;没给的字段保留 models.dev 的(maxTokens 只来自 models.dev)。 */
|
|
104
|
+
function withBackendMetadata(model, cached) {
|
|
105
|
+
if (cached.contextWindow !== undefined) {
|
|
99
106
|
model.contextWindow = cached.contextWindow;
|
|
100
|
-
|
|
101
|
-
|
|
107
|
+
// models.dev 的输入上限是 API 版的,超过后端窗口就没有意义
|
|
108
|
+
if (model.inputLimit !== undefined && model.inputLimit >= cached.contextWindow)
|
|
109
|
+
delete model.inputLimit;
|
|
110
|
+
}
|
|
102
111
|
if (cached.input !== undefined)
|
|
103
112
|
model.input = [...cached.input];
|
|
104
|
-
|
|
105
|
-
|
|
113
|
+
if (cached.reasoningLevels === undefined)
|
|
114
|
+
return;
|
|
115
|
+
if (cached.reasoningLevels.some((x) => x !== "none")) {
|
|
106
116
|
model.reasoning = true;
|
|
107
|
-
model.thinkingLevelMap = thinkingMapOf(cached.reasoningLevels
|
|
117
|
+
model.thinkingLevelMap = thinkingMapOf(cached.reasoningLevels);
|
|
118
|
+
}
|
|
119
|
+
else {
|
|
120
|
+
model.reasoning = false;
|
|
121
|
+
delete model.thinkingLevelMap;
|
|
108
122
|
}
|
|
109
123
|
}
|
|
110
|
-
/** 缓存里的模型 →
|
|
124
|
+
/** 缓存里的模型 → 注册表模型(后端给的元数据优先,其次 models.dev,再次自定义缺省)。 */
|
|
111
125
|
export function discoveredModels(file, provider, modelsDev) {
|
|
112
126
|
return file.models.map((m) => {
|
|
113
|
-
const { entry
|
|
127
|
+
const { entry } = enrichEntry(m.name ? { id: m.id, name: m.name } : { id: m.id }, modelsDev);
|
|
114
128
|
const model = withCustomDefaults(entry, provider.id, provider.api);
|
|
115
|
-
withBackendMetadata(model, m
|
|
129
|
+
withBackendMetadata(model, m);
|
|
130
|
+
if (model.contextWindow === undefined && SUBSCRIPTION_PROVIDERS.has(provider.id))
|
|
131
|
+
model.contextWindow = SUBSCRIPTION_FALLBACK_CONTEXT_WINDOW;
|
|
116
132
|
// 只挂发现时登录的 flavor 对应的渠道(订阅后端的另一条渠道用不了,不在说明与 `@` 行里出现);
|
|
117
133
|
// 缓存没写 flavor 或渠道不存在时用供应商的缺省渠道
|
|
118
134
|
const names = (provider.channels ?? []).map((c) => c.name);
|
package/dist/ai/types.d.ts
CHANGED
|
@@ -136,7 +136,8 @@ export interface SystemMessage {
|
|
|
136
136
|
toolsRemoved?: string[];
|
|
137
137
|
timestamp: number;
|
|
138
138
|
}
|
|
139
|
-
|
|
139
|
+
/** `interrupt`:打断当前回合并立即发送(`prompt / steer` 的 `interrupt: true`)开的新回合。 */
|
|
140
|
+
export type KnownMessageOrigin = "steer" | "followUp" | "host" | "interrupt";
|
|
140
141
|
export type MessageOrigin = KnownMessageOrigin | (string & {});
|
|
141
142
|
export interface UserMessage {
|
|
142
143
|
role: "user";
|
|
@@ -1,12 +1,13 @@
|
|
|
1
1
|
/**
|
|
2
2
|
* ChatGPT 后端的只读查询([W6-O]):模型列表(`ama models discover chatgpt`)与 codex 的 `wham/usage`。
|
|
3
3
|
*
|
|
4
|
-
* - SIWC:`GET {base}/models`,只留 `visibility === "list"
|
|
4
|
+
* - SIWC:`GET {base}/models`,只留 `visibility === "list"`(没有该字段的也留);条目若带下述元数据字段同样取;
|
|
5
5
|
* - codex:`GET {base}/models?client_version=<Codex CLI 版本>`(`codexClientVersion()`;后端按每个模型的
|
|
6
6
|
* `minimal_client_version` 过滤,发 ama 自己的版本号会一个都拿不到),`models[].slug`(同样按 visibility 筛),
|
|
7
|
-
* 另取 `context_window`、`input_modalities`、`supported_reasoning_levels`
|
|
8
|
-
*
|
|
9
|
-
*
|
|
7
|
+
* 另取 `context_window`、`input_modalities`、`supported_reasoning_levels` 作元数据(后端给了就优先于 models.dev,
|
|
8
|
+
* 见 discovered-cache.ts;`max_context_window` 是可调上限而非生效值、`auto_compact_token_limit` 没有对应的模型字段,
|
|
9
|
+
* 都不取);`GET https://chatgpt.com/backend-api/wham/usage`(由 codex base 推出),私有格式,解析失败返回 undefined。
|
|
10
|
+
* 请求带 Bearer;codex 另带 `ChatGPT-Account-ID` 与 `originator`。
|
|
10
11
|
*/
|
|
11
12
|
import { type QuotaSnapshot } from "../../ai/apis/chatgpt-rate-limits.js";
|
|
12
13
|
import type { ChatGptFlavor } from "../../config/types-w6.js";
|
|
@@ -23,7 +24,7 @@ export interface BackendAuth {
|
|
|
23
24
|
export interface DiscoveredModel {
|
|
24
25
|
id: string;
|
|
25
26
|
name?: string;
|
|
26
|
-
/**
|
|
27
|
+
/** 以下是后端给的元数据(codex 后端给;SIWC 条目带了也取)。 */
|
|
27
28
|
contextWindow?: number;
|
|
28
29
|
input?: ("text" | "image")[];
|
|
29
30
|
/** 支持的推理强度(`none` / `minimal` / `low` / `medium` / `high` / `xhigh` …)。 */
|
|
@@ -1,12 +1,13 @@
|
|
|
1
1
|
/**
|
|
2
2
|
* ChatGPT 后端的只读查询([W6-O]):模型列表(`ama models discover chatgpt`)与 codex 的 `wham/usage`。
|
|
3
3
|
*
|
|
4
|
-
* - SIWC:`GET {base}/models`,只留 `visibility === "list"
|
|
4
|
+
* - SIWC:`GET {base}/models`,只留 `visibility === "list"`(没有该字段的也留);条目若带下述元数据字段同样取;
|
|
5
5
|
* - codex:`GET {base}/models?client_version=<Codex CLI 版本>`(`codexClientVersion()`;后端按每个模型的
|
|
6
6
|
* `minimal_client_version` 过滤,发 ama 自己的版本号会一个都拿不到),`models[].slug`(同样按 visibility 筛),
|
|
7
|
-
* 另取 `context_window`、`input_modalities`、`supported_reasoning_levels`
|
|
8
|
-
*
|
|
9
|
-
*
|
|
7
|
+
* 另取 `context_window`、`input_modalities`、`supported_reasoning_levels` 作元数据(后端给了就优先于 models.dev,
|
|
8
|
+
* 见 discovered-cache.ts;`max_context_window` 是可调上限而非生效值、`auto_compact_token_limit` 没有对应的模型字段,
|
|
9
|
+
* 都不取);`GET https://chatgpt.com/backend-api/wham/usage`(由 codex base 推出),私有格式,解析失败返回 undefined。
|
|
10
|
+
* 请求带 Bearer;codex 另带 `ChatGPT-Account-ID` 与 `originator`。
|
|
10
11
|
*/
|
|
11
12
|
import { parseUsagePayload } from "../../ai/apis/chatgpt-rate-limits.js";
|
|
12
13
|
import { DEFAULT_CODEX_CLIENT_VERSION, DEFAULT_ORIGINATOR } from "./presets.js";
|
|
@@ -27,8 +28,8 @@ function listed(item) {
|
|
|
27
28
|
const visibility = item["visibility"];
|
|
28
29
|
return visibility === undefined || visibility === "list";
|
|
29
30
|
}
|
|
30
|
-
/**
|
|
31
|
-
function
|
|
31
|
+
/** 模型条目里的元数据;字段缺失或形状不对就不填。 */
|
|
32
|
+
function backendMetadata(item) {
|
|
32
33
|
const out = {};
|
|
33
34
|
const window = item["context_window"];
|
|
34
35
|
if (typeof window === "number" && Number.isInteger(window) && window > 0)
|
|
@@ -80,7 +81,7 @@ export async function listChatGptModels(fetchFn, baseUrl, auth) {
|
|
|
80
81
|
out.push({
|
|
81
82
|
id,
|
|
82
83
|
...(typeof name === "string" && name !== "" ? { name } : {}),
|
|
83
|
-
...(
|
|
84
|
+
...backendMetadata(item),
|
|
84
85
|
});
|
|
85
86
|
}
|
|
86
87
|
return out;
|