@migor/agentia 0.3.0 → 0.4.1

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.
Files changed (76) hide show
  1. package/README.md +2 -2
  2. package/dist/AGENTS.md +59 -23
  3. package/dist/core/abort.d.ts +7 -0
  4. package/dist/core/abort.js +28 -2
  5. package/dist/core/abort.js.map +1 -1
  6. package/dist/core/schema.js +5 -3
  7. package/dist/core/schema.js.map +1 -1
  8. package/dist/core/tool.d.ts +18 -0
  9. package/dist/core/trace.d.ts +5 -1
  10. package/dist/engine/loop.d.ts +11 -0
  11. package/dist/engine/loop.js +122 -27
  12. package/dist/engine/loop.js.map +1 -1
  13. package/dist/engine/policy.js +5 -0
  14. package/dist/engine/policy.js.map +1 -1
  15. package/dist/engine/spec.d.ts +10 -0
  16. package/dist/engine/spec.js.map +1 -1
  17. package/dist/engine/tracer.js +13 -1
  18. package/dist/engine/tracer.js.map +1 -1
  19. package/dist/engine/trimming.d.ts +7 -2
  20. package/dist/engine/trimming.js +20 -6
  21. package/dist/engine/trimming.js.map +1 -1
  22. package/dist/engine/types.d.ts +33 -5
  23. package/dist/engine/usage.d.ts +3 -3
  24. package/dist/engine/usage.js +3 -3
  25. package/dist/index.d.ts +1 -1
  26. package/dist/index.js +1 -1
  27. package/dist/integrations/mcp.js +9 -1
  28. package/dist/integrations/mcp.js.map +1 -1
  29. package/dist/integrations/metrics.d.ts +8 -2
  30. package/dist/integrations/metrics.js +120 -46
  31. package/dist/integrations/metrics.js.map +1 -1
  32. package/dist/integrations/openai.js +14 -1
  33. package/dist/integrations/openai.js.map +1 -1
  34. package/dist/integrations/otlp.d.ts +7 -0
  35. package/dist/integrations/otlp.js +5 -2
  36. package/dist/integrations/otlp.js.map +1 -1
  37. package/dist/runtime/run.d.ts +7 -3
  38. package/dist/runtime/run.js +4 -0
  39. package/dist/runtime/run.js.map +1 -1
  40. package/dist/runtime/session.d.ts +5 -0
  41. package/dist/runtime/session.js.map +1 -1
  42. package/dist/store/fsStore.d.ts +2 -1
  43. package/dist/store/fsStore.js +12 -5
  44. package/dist/store/fsStore.js.map +1 -1
  45. package/dist/store/redisStore.d.ts +23 -3
  46. package/dist/store/redisStore.js +14 -3
  47. package/dist/store/redisStore.js.map +1 -1
  48. package/dist/toolkit/asset.d.ts +5 -0
  49. package/dist/toolkit/asset.js +8 -0
  50. package/dist/toolkit/asset.js.map +1 -1
  51. package/dist/toolkit/collect.d.ts +6 -0
  52. package/dist/toolkit/collect.js +29 -4
  53. package/dist/toolkit/collect.js.map +1 -1
  54. package/dist/toolkit/discover.js +24 -7
  55. package/dist/toolkit/discover.js.map +1 -1
  56. package/dist/toolkit/env.js +5 -0
  57. package/dist/toolkit/env.js.map +1 -1
  58. package/dist/toolkit/module.d.ts +9 -1
  59. package/dist/toolkit/module.js +10 -1
  60. package/dist/toolkit/module.js.map +1 -1
  61. package/dist/toolkit/prompt.d.ts +1 -1
  62. package/dist/toolkit/prompt.js +19 -12
  63. package/dist/toolkit/prompt.js.map +1 -1
  64. package/dist/toolkit/skill.js +5 -0
  65. package/dist/toolkit/skill.js.map +1 -1
  66. package/dist/toolkit/subagent.js +5 -0
  67. package/dist/toolkit/subagent.js.map +1 -1
  68. package/dist/transport/async.d.ts +2 -1
  69. package/dist/transport/async.js +19 -9
  70. package/dist/transport/async.js.map +1 -1
  71. package/dist/transport/http.d.ts +4 -4
  72. package/dist/transport/http.js +15 -2
  73. package/dist/transport/http.js.map +1 -1
  74. package/dist/transport/scheduler.js +13 -1
  75. package/dist/transport/scheduler.js.map +1 -1
  76. package/package.json +3 -2
@@ -43,6 +43,10 @@ export type SystemParam = string | SystemTextBlock[];
43
43
  * 上下文预算策略(spec §5/§6 —— compaction / context editing)。
44
44
  * 引擎在每个 llm 回合发送前调用 beforeTurn;返回的 messages 即本回合发送内容。
45
45
  * 实现见 engine/policy.ts 的 createBudgetPolicy,或自实现(如每次用 /count_tokens)。
46
+ *
47
+ * ⚠️ **per-run 状态**:策略可能被配置成应用级单例(`AppOptions.contextPolicy`)被所有
48
+ * run 复用。带状态的实现(滞回计数、token 缓存等)应实现 `forRun` 让每条 run 拿到
49
+ * 独立实例,否则状态跨 run 泄漏(见 forRun 说明)。
46
50
  */
47
51
  export interface ContextPolicy {
48
52
  /** 预算(估算 input tokens);超预算的回合触发降级。供观测/文档用 */
@@ -51,6 +55,12 @@ export interface ContextPolicy {
51
55
  iteration: number;
52
56
  model: string;
53
57
  }): Promise<Anthropic.MessageParam[]>;
58
+ /**
59
+ * 每条 run 开始时由引擎调用一次,返回**本 run 专用**的策略实例(隔离滞回/缓存等
60
+ * per-run 状态)。缺省(不实现)= 复用自身 —— 只适合无状态策略;有状态又不实现
61
+ * forRun 时,状态会跨 run(含并发 run)共享,行为自己负责。
62
+ */
63
+ forRun?(): ContextPolicy;
54
64
  }
55
65
  export interface RunAgentOptions<S extends JsonSchema = JsonSchema> {
56
66
  /** 顶层 system(SystemPrompt 产物)。稳定内容应放在 tools 之后、第一个 breakpoint 前 */
@@ -64,7 +74,7 @@ export interface RunAgentOptions<S extends JsonSchema = JsonSchema> {
64
74
  maxTokens?: number;
65
75
  /** 循环安全上限,防止无限 tool 往返 */
66
76
  maxIterations?: number;
67
- /** 注入 client(默认 new Anthropic(),读 env/ant auth);多模型见 ModelClient */
77
+ /** 注入 client(缺省经 createAnthropicClient() 创建,读 ANTHROPIC_API_KEY / ANTHROPIC_BASE_URL env);多模型见 ModelClient */
68
78
  client?: ModelClient;
69
79
  /** 注入 recorder(run 层复用;不注入则内部新建,traceId 即 runId) */
70
80
  recorder?: import('./tracer.js').TraceRecorder;
@@ -93,19 +103,21 @@ export interface RunAgentOptions<S extends JsonSchema = JsonSchema> {
93
103
  */
94
104
  resultSchema?: S;
95
105
  /**
96
- * 成本硬管控(C1):整条 run(**含子 agent**)累计 token 上限。每回合记账后判断,
97
- * 超限即停,run 以 `stopReason='budget_exceeded'` 收尾(**算失败**)。
106
+ * 成本硬管控(C1):整条 run(**含子 agent**)累计 token 上限。每回合记账后判断
107
+ * (主循环与各级子循环各自判断 —— 预算约束经 `ToolRunContext` 透传,各级共享同一
108
+ * recorder 的累计账单),超限即停,run 以 `stopReason='budget_exceeded'` 收尾(**算失败**)。
98
109
  * 与 `contextPolicy`(发送前的上下文裁剪)分工不同 —— 见 `createBudgetGuard`。
99
110
  *
100
111
  * 口径:input + output + cacheRead + cacheCreation。**不是硬实时**:一回合跑完才判,
101
- * 所以实际用量可能略超上限(超一次回合的量)。
112
+ * 所以实际用量可能略超上限(最多超一次回合的量;子循环超限后主循环最多再带出一个
113
+ * 回合入口判断,不会发出新请求)。
102
114
  */
103
115
  maxTotalTokens?: number;
104
116
  /**
105
117
  * 成本硬管控(C1):累计成本(美元)上限。**依赖模型在价格表内**
106
118
  * (`engine/usage.ts` 的 DEFAULT_PRICING,或本 run 的 `priceOverrides`)——
107
119
  * 不在表里时成本恒为 0,此护栏不触发;要无条件兜底用 maxTotalTokens。
108
- * 未定价模型会在 run 根记 `usage.unpriced` 事件(见 `onUnpricedModel`),
120
+ * 未定价模型会在该回合的 llm.turn span 记 `usage.unpriced` 事件(见 `onUnpricedModel`),
109
121
  * 所以"护栏到底有没有生效"是**看得见**的。
110
122
  */
111
123
  maxCostUsd?: number;
@@ -143,6 +155,22 @@ export interface RunAgentOptions<S extends JsonSchema = JsonSchema> {
143
155
  * 工具会打外部系统(DB/HTTP)时设个位数,避免一个回合把下游打爆。
144
156
  */
145
157
  maxToolConcurrency?: number;
158
+ /**
159
+ * trace 事件正文(`tool.input` 的入参、`tool.output` 的 content)的最大字符数。
160
+ *
161
+ * 缺省按事件类型分别收敛:入参 2000、成功出参 2000、失败出参 1000 ——
162
+ * 调用树里一行看个大概即可,不必把整份工具结果搬进 trace(sink 落库 / OTLP
163
+ * 导出同样按这个体积走)。传**数字**则三类统一用该上限;传 **`false`** 表示
164
+ * **不截断**:完整正文进 trace,供 `agentia dev` 面板 / playground 展开查看
165
+ * (折叠态仍是一行摘要,展开是**客户端**行为,不影响 trace 体积口径)。
166
+ *
167
+ * 同样**透传给嵌套能力**(@SubAgent / @Skill 的子循环)—— 否则调试期开了全文,
168
+ * 子 agent 里的工具事件还是被截断的,「开没开」在同一棵树上会出现两种口径。
169
+ *
170
+ * ⚠️ `false` 不设上限:工具返回多大就记多大,trace 会随之膨胀。调试期开、生产期关。
171
+ * 截断只在**记账**时发生,不影响回给模型的 tool_result(那条永远完整)。
172
+ */
173
+ maxEventChars?: number | false;
146
174
  /**
147
175
  * 提示词版本号(D4):写进 run 根 span 的 `system.version` attribute,
148
176
  * trace 里据此可查「哪个版本的提示词产出的结果」。
@@ -8,9 +8,9 @@ import type { Usage } from '../core/trace.js';
8
8
  * 1. 价格表是模块内常量 → 走 OpenAI 兼容端点(DeepSeek / 自建)的宿主**永远算不出成本**;
9
9
  * 2. 未定价模型返回 `undefined` → 成本恒 0 → `maxCostUsd` 这条护栏**静默失效**、且无任何提示。
10
10
  *
11
- * 现在:价格表可经 `priceOverrides` 覆盖/追加(`buildPricing`),未定价模型会在 run 根
12
- * 记 `usage.unpriced` 事件并有 `agentia_model_unpriced_turns_total` 指标 —— 护栏是否
13
- * 真的生效**看得见**。
11
+ * 现在:价格表可经 `priceOverrides` 覆盖/追加(`buildPricing`),未定价模型会在该回合的
12
+ * llm.turn span 记 `usage.unpriced` 事件并有 `agentia_model_unpriced_turns_total` 指标 ——
13
+ * 护栏是否真的生效**看得见**。
14
14
  */
15
15
  /** 内置价格表($/1M tokens)。宿主用 `priceOverrides` 覆盖同名项或追加新模型。 */
16
16
  export declare const DEFAULT_PRICING: Readonly<Record<string, ModelPricing>>;
@@ -5,9 +5,9 @@
5
5
  * 1. 价格表是模块内常量 → 走 OpenAI 兼容端点(DeepSeek / 自建)的宿主**永远算不出成本**;
6
6
  * 2. 未定价模型返回 `undefined` → 成本恒 0 → `maxCostUsd` 这条护栏**静默失效**、且无任何提示。
7
7
  *
8
- * 现在:价格表可经 `priceOverrides` 覆盖/追加(`buildPricing`),未定价模型会在 run 根
9
- * 记 `usage.unpriced` 事件并有 `agentia_model_unpriced_turns_total` 指标 —— 护栏是否
10
- * 真的生效**看得见**。
8
+ * 现在:价格表可经 `priceOverrides` 覆盖/追加(`buildPricing`),未定价模型会在该回合的
9
+ * llm.turn span 记 `usage.unpriced` 事件并有 `agentia_model_unpriced_turns_total` 指标 ——
10
+ * 护栏是否真的生效**看得见**。
11
11
  */
12
12
  /** 内置价格表($/1M tokens)。宿主用 `priceOverrides` 覆盖同名项或追加新模型。 */
13
13
  export const DEFAULT_PRICING = Object.freeze({
package/dist/index.d.ts CHANGED
@@ -1,4 +1,4 @@
1
- export declare const AGENTIA_VERSION = "0.3.0";
1
+ export declare const AGENTIA_VERSION = "0.4.1";
2
2
  export type { Trace, Span, SpanEvent, SpanError, SpanId, SpanKind, SpanStatus, TraceId, TraceSink, CapabilityType, Usage, } from './core/trace.js';
3
3
  export type { AgentTool, JsonSchema, ModelClient, RecorderBackend, SchemaInput, SchemaType, ToolRunContext, TypedSchema, } from './core/tool.js';
4
4
  export { validateJsonSchema } from './core/schema.js';
package/dist/index.js CHANGED
@@ -1,4 +1,4 @@
1
- export const AGENTIA_VERSION = '0.3.0';
1
+ export const AGENTIA_VERSION = '0.4.1';
2
2
  export { validateJsonSchema } from './core/schema.js';
3
3
  export { combineSignals } from './core/abort.js';
4
4
  // engine:运行时内核
@@ -68,7 +68,15 @@ export async function mcpTools(client, opts = {}) {
68
68
  if (typeof original !== 'string' || original.trim() === '') {
69
69
  throw new Error(`MCP server 返回了空工具名:${JSON.stringify(info.name)}`);
70
70
  }
71
- const name = `${prefix}${normalizeToolName(original)}`;
71
+ const cleaned = normalizeToolName(original);
72
+ if (cleaned === '') {
73
+ // 原名不含任何 ASCII 字母/数字/下划线(如 "🔥🔥"、"获取时间")时归一化产物为空串 ——
74
+ // 不拦下的话最终名只剩前缀也能注册成功,与「空名直接抛错」的承诺相反。
75
+ // 必须在撞名检查之前抛出(裸前缀名还可能与下一个空名工具撞出误导性报错)。
76
+ throw new Error(`MCP 工具名 ${JSON.stringify(original)} 归一化后为空(原名不含任何 ASCII 字母/数字/下划线)—— ` +
77
+ '请在 server 侧改用可辨识的工具名,或检查其 tools/list 实现');
78
+ }
79
+ const name = `${prefix}${cleaned}`;
72
80
  if (!/^[A-Za-z0-9_-]{1,64}$/.test(name)) {
73
81
  throw new Error(`MCP 工具名 "${original}" 归一化后为 "${name}",不满足 ^[A-Za-z0-9_-]{1,64}$` +
74
82
  `(前缀 "${prefix}" 过长或原名含过多非法字符)—— 请换个更短的 prefix`);
@@ -1 +1 @@
1
- {"version":3,"file":"mcp.js","sourceRoot":"","sources":["../../src/integrations/mcp.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"mcp.js","sourceRoot":"","sources":["../../src/integrations/mcp.ts"],"names":[],"mappings":"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"}
@@ -13,9 +13,9 @@ import type { TraceSink } from '../core/trace.js';
13
13
  * `@Prompt` 不建 span、无独立耗时,**不产出**能力指标(如实缺省,不硬凑);
14
14
  * - **模型级**(E3):来自 `llm.turn` span(其 `name` 即模型 id)。
15
15
  *
16
- * 时长同时给两种口径,**并存不冲突**:
16
+ * 时长同时给两种口径(histogram 与分位 gauge 必须用**不同指标名**,见 `render()` 注释):
17
17
  * - **histogram**(`*_bucket` / `*_sum` / `*_count`,累积语义)—— 抓取端可跨实例任意聚合;
18
- * - **窗口内精确分位**(`*{quantile=...}` gauge)—— 单实例排障时更好读。
18
+ * - **窗口内精确分位**(`*_last{quantile=...}` gauge)—— 单实例排障时更好读。
19
19
  *
20
20
  * 零依赖:Prometheus 文本与 OTLP/JSON 都手写(纯文本 / JSON,不值得为此引客户端库)。
21
21
  */
@@ -89,6 +89,12 @@ export interface MetricsSinkOptions {
89
89
  resourceAttributes?: Record<string, string>;
90
90
  /** `export:'otlp'` 的 service.name,缺省 'agentia' */
91
91
  serviceName?: string;
92
+ /**
93
+ * 单次导出请求超时(毫秒),缺省 10000;非正数 = 不限。
94
+ * 裸 fetch 没有超时:collector 半开连接(accept 后永不回包)会让 `intervalMs:0` 模式
95
+ * 的 run 收尾永久挂起。超时按导出失败处理(交 onExportError)——观测失败不击穿业务。
96
+ */
97
+ timeoutMs?: number;
92
98
  /** 导出失败回调(缺省吞掉 —— 观测失败不得击穿业务) */
93
99
  onExportError?: (err: unknown) => void;
94
100
  /**
@@ -55,7 +55,7 @@ class DurationStat {
55
55
  const rank = Math.ceil(q * sorted.length);
56
56
  return sorted[Math.min(Math.max(rank, 1), sorted.length) - 1];
57
57
  }
58
- /** 累积 bucket 计数(长度 = bounds+1,末位为 +Inf = count) */
58
+ /** 累积 bucket 计数(长度 = bounds+1,末位为 +Inf = count)—— Prometheus 文本语义 */
59
59
  cumulative() {
60
60
  const out = [];
61
61
  let running = 0;
@@ -65,6 +65,10 @@ class DurationStat {
65
65
  }
66
66
  return out;
67
67
  }
68
+ /** 每桶**非累积**计数 —— OTLP histogram 的 bucketCounts 语义(与 cumulative() 千万别混用) */
69
+ perBucket() {
70
+ return [...this.counts];
71
+ }
68
72
  get boundsList() {
69
73
  return this.bounds;
70
74
  }
@@ -120,6 +124,7 @@ export function metricsSink(opts = {}) {
120
124
  }
121
125
  const p = opts.prefix ?? 'agentia_';
122
126
  const intervalMs = opts.intervalMs ?? 60_000;
127
+ const timeoutMs = opts.timeoutMs ?? 10_000;
123
128
  const serviceName = opts.serviceName ?? 'agentia';
124
129
  const startedAtMs = Date.now();
125
130
  let runs = 0;
@@ -276,12 +281,20 @@ export function metricsSink(opts = {}) {
276
281
  droppedCapabilities: dropped.size,
277
282
  };
278
283
  };
279
- const line = (name, type, value, help, labels = '') => `# HELP ${name} ${help}\n# TYPE ${name} ${type}\n${name}${labels} ${value}\n`;
280
- /** 一个 histogram 的三段输出(bucket 累积 + sum + count) */
281
- const histogram = (name, stat, help, labels = '') => {
284
+ /**
285
+ * 一个指标家族的完整块:HELP/TYPE 各**恰好一行**,后接全部样本行。
286
+ * expfmt 对同名指标的第二条 HELP/TYPE 是**硬错误**(整次 scrape 失败),
287
+ * 所以家族头必须集中在这里发一次,绝不能让每条样本自带;同名指标也只能有一种 TYPE
288
+ * (histogram 与分位 gauge 因此拆成 `*_duration_ms` 与 `*_duration_ms_last` 两个名字)。
289
+ */
290
+ const family = (name, type, help, samples) => `# HELP ${name} ${help}\n# TYPE ${name} ${type}\n${samples.join('\n')}\n`;
291
+ /** Prometheus label 值转义:\、"、换行必须转义,否则一个含引号的能力名/模型名就损坏整页 exposition */
292
+ const escLabel = (v) => v.replace(/\\/g, '\\\\').replace(/"/g, '\\"').replace(/\n/g, '\\n');
293
+ /** 一个 stat 的 histogram 样本(bucket 累积 + sum + count),labels 形如 `{k="v"}` */
294
+ const histogramSamples = (name, stat, labels = '') => {
282
295
  const inner = labels ? labels.slice(1, -1) + ',' : ''; // 去掉外层 {} 再补逗号
283
296
  const at = (extra) => `{${inner}${extra}}`;
284
- const out = [`# HELP ${name} ${help}`, `# TYPE ${name} histogram`];
297
+ const out = [];
285
298
  const cum = stat.cumulative();
286
299
  for (let i = 0; i < stat.boundsList.length; i++) {
287
300
  out.push(`${name}_bucket${at(`le="${stat.boundsList[i]}"`)} ${cum[i]}`);
@@ -289,55 +302,101 @@ export function metricsSink(opts = {}) {
289
302
  out.push(`${name}_bucket${at(`le="+Inf"`)} ${stat.count}`);
290
303
  out.push(`${name}_sum${labels} ${stat.sumMs}`);
291
304
  out.push(`${name}_count${labels} ${stat.count}`);
292
- return out.join('\n') + '\n';
305
+ return out;
293
306
  };
294
307
  const render = () => {
295
308
  const out = [];
296
- out.push(line(`${p}runs_total`, 'counter', runs, 'run 总数(成功 + 失败)'));
297
- out.push(line(`${p}runs_failed_total`, 'counter', failed, '失败的 run 数(trace.status=error)'));
298
- out.push(line(`${p}tokens_total`, 'counter', tokens.input, '输入 token 累计', '{kind="input"}'));
299
- out.push(line(`${p}tokens_total`, 'counter', tokens.output, '输出 token 累计', '{kind="output"}'));
300
- out.push(line(`${p}tokens_total`, 'counter', tokens.cacheRead, '缓存读 token 累计', '{kind="cache_read"}'));
301
- out.push(line(`${p}tokens_total`, 'counter', tokens.cacheCreation, '缓存写 token 累计', '{kind="cache_creation"}'));
302
- out.push(line(`${p}cost_usd_total`, 'counter', costUsd, '累计成本估算(美元)'));
303
- // 时长:histogram(可跨实例聚合)+ 窗口内精确分位(单实例好读),两种口径并存
304
- out.push(histogram(`${p}run_duration_ms`, runStat, 'run 时长(毫秒)'));
305
- out.push(line(`${p}run_duration_ms`, 'gauge', runStat.percentile(0.5), 'run 时长分位(毫秒,滑动窗口内精确值)', '{quantile="0.5"}'));
306
- out.push(line(`${p}run_duration_ms`, 'gauge', runStat.percentile(0.95), 'run 时长分位(毫秒,滑动窗口内精确值)', '{quantile="0.95"}'));
307
- // —— 能力维度(E2)——
308
- for (const label of [...capabilities.keys()].sort()) {
309
- const acc = capabilities.get(label);
310
- const l = `{capability="${label}"}`;
311
- out.push(line(`${p}capability_calls_total`, 'counter', acc.calls, '能力调用次数', l));
312
- out.push(line(`${p}capability_errors_total`, 'counter', acc.errors, '能力失败次数', l));
313
- out.push(histogram(`${p}capability_duration_ms`, acc.stat, '能力调用耗时(毫秒)', l));
314
- out.push(line(`${p}capability_duration_ms`, 'gauge', acc.stat.percentile(0.5), '能力调用耗时分位(窗口内精确值)', `{capability="${label}",quantile="0.5"}`));
315
- out.push(line(`${p}capability_duration_ms`, 'gauge', acc.stat.percentile(0.95), '能力调用耗时分位(窗口内精确值)', `{capability="${label}",quantile="0.95"}`));
316
- if (acc.tokens !== null) {
317
- out.push(line(`${p}capability_tokens_total`, 'counter', acc.tokens, 'skill/subagent 的子孙 token 合计', l));
309
+ out.push(family(`${p}runs_total`, 'counter', 'run 总数(成功 + 失败)', [`${p}runs_total ${runs}`]));
310
+ out.push(family(`${p}runs_failed_total`, 'counter', '失败的 run 数(trace.status=error)', [
311
+ `${p}runs_failed_total ${failed}`,
312
+ ]));
313
+ out.push(family(`${p}tokens_total`, 'counter', 'token 累计(kind 分项:input / output / cache_read / cache_creation)', [
314
+ `${p}tokens_total{kind="input"} ${tokens.input}`,
315
+ `${p}tokens_total{kind="output"} ${tokens.output}`,
316
+ `${p}tokens_total{kind="cache_read"} ${tokens.cacheRead}`,
317
+ `${p}tokens_total{kind="cache_creation"} ${tokens.cacheCreation}`,
318
+ ]));
319
+ out.push(family(`${p}cost_usd_total`, 'counter', '累计成本估算(美元)', [
320
+ `${p}cost_usd_total ${costUsd}`,
321
+ ]));
322
+ // 时长:histogram(可跨实例聚合)+ 窗口内精确分位(单实例好读),两种口径并存。
323
+ // 分位 gauge 必须用另一个名字 `*_last` —— 同名指标只允许一种 TYPE,
324
+ // 先发 histogram 再发 gauge 会被 expfmt 判硬错误,整次 scrape 失败。
325
+ out.push(family(`${p}run_duration_ms`, 'histogram', 'run 时长(毫秒)', [
326
+ ...histogramSamples(`${p}run_duration_ms`, runStat),
327
+ ]));
328
+ out.push(family(`${p}run_duration_ms_last`, 'gauge', 'run 时长分位(毫秒,滑动窗口内精确值)', [
329
+ `${p}run_duration_ms_last{quantile="0.5"} ${runStat.percentile(0.5)}`,
330
+ `${p}run_duration_ms_last{quantile="0.95"} ${runStat.percentile(0.95)}`,
331
+ ]));
332
+ // —— 能力维度(E2):同一家族的样本跨 label 聚合,家族头只发一次 ——
333
+ const capLabels = [...capabilities.keys()].sort();
334
+ if (capLabels.length > 0) {
335
+ const calls = [];
336
+ const errors = [];
337
+ const durations = [];
338
+ const durationQuantiles = [];
339
+ const capabilityTokens = [];
340
+ const capabilityCosts = [];
341
+ for (const label of capLabels) {
342
+ const acc = capabilities.get(label);
343
+ const lv = escLabel(label);
344
+ const l = `{capability="${lv}"}`;
345
+ calls.push(`${p}capability_calls_total${l} ${acc.calls}`);
346
+ errors.push(`${p}capability_errors_total${l} ${acc.errors}`);
347
+ durations.push(...histogramSamples(`${p}capability_duration_ms`, acc.stat, l));
348
+ durationQuantiles.push(`${p}capability_duration_ms_last{capability="${lv}",quantile="0.5"} ${acc.stat.percentile(0.5)}`, `${p}capability_duration_ms_last{capability="${lv}",quantile="0.95"} ${acc.stat.percentile(0.95)}`);
349
+ if (acc.tokens !== null)
350
+ capabilityTokens.push(`${p}capability_tokens_total${l} ${acc.tokens}`);
351
+ if (acc.costUsd !== null)
352
+ capabilityCosts.push(`${p}capability_cost_usd_total${l} ${acc.costUsd}`);
318
353
  }
319
- if (acc.costUsd !== null) {
320
- out.push(line(`${p}capability_cost_usd_total`, 'counter', acc.costUsd, 'skill/subagent 的估算成本(美元)', l));
354
+ out.push(family(`${p}capability_calls_total`, 'counter', '能力调用次数', calls));
355
+ out.push(family(`${p}capability_errors_total`, 'counter', '能力失败次数', errors));
356
+ out.push(family(`${p}capability_duration_ms`, 'histogram', '能力调用耗时(毫秒)', durations));
357
+ out.push(family(`${p}capability_duration_ms_last`, 'gauge', '能力调用耗时分位(窗口内精确值)', durationQuantiles));
358
+ if (capabilityTokens.length > 0) {
359
+ out.push(family(`${p}capability_tokens_total`, 'counter', 'skill/subagent 的子孙 token 合计', capabilityTokens));
360
+ }
361
+ if (capabilityCosts.length > 0) {
362
+ out.push(family(`${p}capability_cost_usd_total`, 'counter', 'skill/subagent 的估算成本(美元)', capabilityCosts));
321
363
  }
322
364
  }
323
365
  // —— 模型维度(E3)——
324
- for (const model of [...models.keys()].sort()) {
325
- const acc = models.get(model);
326
- const l = `{model="${model}"}`;
327
- out.push(line(`${p}model_turns_total`, 'counter', acc.turns, '模型往返次数', l));
328
- out.push(line(`${p}model_tokens_total`, 'counter', acc.tokens, '模型 token 合计(四类之和)', l));
329
- out.push(line(`${p}model_cost_usd_total`, 'counter', acc.costUsd, '模型估算成本(美元,仅已定价部分)', l));
330
- if (acc.unpricedTurns > 0) {
331
- out.push(line(`${p}model_unpriced_turns_total`, 'counter', acc.unpricedTurns, '算不出成本的 turn 数(模型不在价格表内)', l));
366
+ const modelNames = [...models.keys()].sort();
367
+ if (modelNames.length > 0) {
368
+ const turns = [];
369
+ const modelTokens = [];
370
+ const modelCosts = [];
371
+ const unpriced = [];
372
+ const durations = [];
373
+ const durationQuantiles = [];
374
+ for (const model of modelNames) {
375
+ const acc = models.get(model);
376
+ const mv = escLabel(model);
377
+ const l = `{model="${mv}"}`;
378
+ turns.push(`${p}model_turns_total${l} ${acc.turns}`);
379
+ modelTokens.push(`${p}model_tokens_total${l} ${acc.tokens}`);
380
+ modelCosts.push(`${p}model_cost_usd_total${l} ${acc.costUsd}`);
381
+ if (acc.unpricedTurns > 0)
382
+ unpriced.push(`${p}model_unpriced_turns_total${l} ${acc.unpricedTurns}`);
383
+ durations.push(...histogramSamples(`${p}model_duration_ms`, acc.stat, l));
384
+ durationQuantiles.push(`${p}model_duration_ms_last{model="${mv}",quantile="0.5"} ${acc.stat.percentile(0.5)}`, `${p}model_duration_ms_last{model="${mv}",quantile="0.95"} ${acc.stat.percentile(0.95)}`);
332
385
  }
333
- out.push(histogram(`${p}model_duration_ms`, acc.stat, '模型往返耗时(毫秒)', l));
334
- out.push(line(`${p}model_duration_ms`, 'gauge', acc.stat.percentile(0.5), '模型往返耗时分位(窗口内精确值)', `{model="${model}",quantile="0.5"}`));
335
- out.push(line(`${p}model_duration_ms`, 'gauge', acc.stat.percentile(0.95), '模型往返耗时分位(窗口内精确值)', `{model="${model}",quantile="0.95"}`));
386
+ out.push(family(`${p}model_turns_total`, 'counter', '模型往返次数', turns));
387
+ out.push(family(`${p}model_tokens_total`, 'counter', '模型 token 合计(四类之和)', modelTokens));
388
+ out.push(family(`${p}model_cost_usd_total`, 'counter', '模型估算成本(美元,仅已定价部分)', modelCosts));
389
+ if (unpriced.length > 0) {
390
+ out.push(family(`${p}model_unpriced_turns_total`, 'counter', '算不出成本的 turn 数(模型不在价格表内)', unpriced));
391
+ }
392
+ out.push(family(`${p}model_duration_ms`, 'histogram', '模型往返耗时(毫秒)', durations));
393
+ out.push(family(`${p}model_duration_ms_last`, 'gauge', '模型往返耗时分位(窗口内精确值)', durationQuantiles));
336
394
  }
337
395
  return out.join('');
338
396
  };
339
397
  // —— OTLP/JSON 导出(E5)——
340
- const nanos = (ms) => String(Math.round(ms * 1e6));
398
+ // epoch 毫秒 ×1e6 ≈ 1.7e18 > 2^53,double 直接乘会丢精度 —— 必须先取整再转 BigInt
399
+ const nanos = (ms) => String(BigInt(Math.round(ms)) * 1000000n);
341
400
  const strAttr = (key, v) => ({ key, value: { stringValue: v } });
342
401
  const buildOtlpPayload = () => {
343
402
  const now = nanos(Date.now());
@@ -354,6 +413,19 @@ export function metricsSink(opts = {}) {
354
413
  ],
355
414
  },
356
415
  });
416
+ // 浮点指标(成本)必须走 asDouble —— OTLP 的 asInt 是 string 编码 int64,
417
+ // 塞浮点(如 0.25)会让 collector 直接拒收整批数据
418
+ const sumDouble = (name, value, help, attrs) => ({
419
+ name,
420
+ description: help,
421
+ sum: {
422
+ aggregationTemporality: 2, // CUMULATIVE
423
+ isMonotonic: true,
424
+ dataPoints: [
425
+ { attributes: attrs, startTimeUnixNano: start, timeUnixNano: now, asDouble: value },
426
+ ],
427
+ },
428
+ });
357
429
  const hist = (name, stat, help, attrs) => ({
358
430
  name,
359
431
  description: help,
@@ -366,7 +438,8 @@ export function metricsSink(opts = {}) {
366
438
  timeUnixNano: now,
367
439
  count: stat.count,
368
440
  sum: stat.sumMs,
369
- bucketCounts: stat.cumulative(),
441
+ // OTLP 的 bucketCounts 是每桶**非累积**计数(Prometheus 文本才是累积语义)
442
+ bucketCounts: stat.perBucket(),
370
443
  explicitBounds: [...stat.boundsList],
371
444
  },
372
445
  ],
@@ -383,7 +456,7 @@ export function metricsSink(opts = {}) {
383
456
  sum(`${p}tokens_total`, tokens.cacheCreation, '缓存写 token 累计', [
384
457
  strAttr('kind', 'cache_creation'),
385
458
  ]),
386
- sum(`${p}cost_usd_total`, s.costUsd, '累计成本估算(美元)', []),
459
+ sumDouble(`${p}cost_usd_total`, s.costUsd, '累计成本估算(美元)', []),
387
460
  hist(`${p}run_duration_ms`, runStat, 'run 时长(毫秒)', []),
388
461
  ];
389
462
  for (const label of [...capabilities.keys()].sort()) {
@@ -395,14 +468,14 @@ export function metricsSink(opts = {}) {
395
468
  if (acc.tokens !== null)
396
469
  metrics.push(sum(`${p}capability_tokens_total`, acc.tokens, '子孙 token 合计', attrs));
397
470
  if (acc.costUsd !== null)
398
- metrics.push(sum(`${p}capability_cost_usd_total`, acc.costUsd, '估算成本(美元)', attrs));
471
+ metrics.push(sumDouble(`${p}capability_cost_usd_total`, acc.costUsd, '估算成本(美元)', attrs));
399
472
  }
400
473
  for (const model of [...models.keys()].sort()) {
401
474
  const acc = models.get(model);
402
475
  const attrs = [strAttr('model', model)];
403
476
  metrics.push(sum(`${p}model_turns_total`, acc.turns, '模型往返次数', attrs));
404
477
  metrics.push(sum(`${p}model_tokens_total`, acc.tokens, '模型 token 合计', attrs));
405
- metrics.push(sum(`${p}model_cost_usd_total`, acc.costUsd, '模型估算成本(美元)', attrs));
478
+ metrics.push(sumDouble(`${p}model_cost_usd_total`, acc.costUsd, '模型估算成本(美元)', attrs));
406
479
  if (acc.unpricedTurns > 0) {
407
480
  metrics.push(sum(`${p}model_unpriced_turns_total`, acc.unpricedTurns, '未定价 turn 数', attrs));
408
481
  }
@@ -437,6 +510,7 @@ export function metricsSink(opts = {}) {
437
510
  method: 'POST',
438
511
  headers: { 'content-type': 'application/json' },
439
512
  body: JSON.stringify(payload),
513
+ ...(timeoutMs > 0 ? { signal: AbortSignal.timeout(timeoutMs) } : {}),
440
514
  });
441
515
  if (!res.ok) {
442
516
  const text = (await res.text()).slice(0, 200);
@@ -1 +1 @@
1
- {"version":3,"file":"metrics.js","sourceRoot":"","sources":["../../src/integrations/metrics.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"metrics.js","sourceRoot":"","sources":["../../src/integrations/metrics.ts"],"names":[],"mappings":"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"}
@@ -181,7 +181,9 @@ function imageUrlOf(b) {
181
181
  * **`arguments` 按分片拼接** —— 一次调用的 JSON 参数会被拆成多片;
182
182
  * - 多个工具并行调用时**必须按 `index` 归并**,不能按到达顺序新建;
183
183
  * - `usage` 在**最后一个 chunk**(choices 为空的那条)才出现;
184
- * - `[DONE]` 是结束哨兵,之后不再有数据。
184
+ * - `[DONE]` 是结束哨兵,之后不再有数据;
185
+ * - 流内 `error` 分片(上游把故障塞进 200 的流)与「流空了」都**抛错** ——
186
+ * 与非流式 `toAnthropicMessage` 的空 choices 守卫同款,不静默映射成成功空回复。
185
187
  */
186
188
  async function readStream(body, fallbackModel, textCallbacks) {
187
189
  const acc = { text: '', toolCalls: new Map() };
@@ -200,8 +202,19 @@ async function readStream(body, fallbackModel, textCallbacks) {
200
202
  catch {
201
203
  continue; // 半截/畸形分片不该毁掉整个流(后面还有正常数据)
202
204
  }
205
+ if (chunk.error) {
206
+ // 上游故障以错误分片下发(HTTP 仍是 200)—— 不抛出就会被组装成
207
+ // 「stop_reason=end_turn、content=[]、usage 全 0」的假成功,run 结论与真实相反
208
+ throw new Error(`OpenAI 流式响应携带错误分片: ${chunk.error.message ?? JSON.stringify(chunk.error)}`);
209
+ }
203
210
  applyChunk(acc, chunk, textCallbacks);
204
211
  }
212
+ if (!acc.text && acc.toolCalls.size === 0) {
213
+ // 流「正常」结束却什么都没累积到:与非流式 toAnthropicMessage 的空 choices 守卫同款 ——
214
+ // 上游故障(网关截断、协议不兼容)不得静默映射成成功空回复,抛出交 engine 按 error 收尾
215
+ throw new Error(`OpenAI 流式响应为空(无 content、无 tool_calls,finish=${acc.finish ?? '缺失'});` +
216
+ '响应无可用补全,按上游故障处理');
217
+ }
205
218
  return accumulatorToMessage(acc, fallbackModel);
206
219
  }
207
220
  /** 把一条流式分片并进累积器 */