/** * [ref] A9 域模块 —— Task Trace 只读面 + 用量统计面。 * * 路由:`GET /v1/tasks/source-summary`(跨租户 door 汇总,ops-only)、`GET /v1/tasks[/:id/{turns,stream,artifacts}]` * (S1 Task Trace API)、`GET /v1/usage/{summary,series,breakdown}`(web P4 / registry AnalyticsSource)。 * * ⚠️ 三块都跑在全局 service-credential 门**之前**(与 /metrics 同款待遇)——只读 traceToken 单凭据的调用方 * (registry 中继的姿势)在全局门会被 401,挂门后=门内 traceToken 支持成死代码(1.148 a2 实机抓获)。 * 因此本域在 `handle()` 里的位置就是契约的一部分:必须留在鉴权门上方,顺序不可与其他域对调。本域零可变状态。 */ import type { IncomingMessage, ServerResponse } from "node:http"; import type { RouteCtx, RouteMatch, RouteIdsOf } from "../route-ctx.js"; /** 路由体 = 从 `server.ts` 的 `handle()` 里**整段剪切**过来的原文(唯一改动:统一去缩进两格)。裸 `return;` * = 「本域已应答」;走到函数尾才是「没匹配上」。跨域的东西一律在首行解构出来。 */ export declare function handleTraceUsage(req: IncomingMessage, res: ServerResponse, match: RouteMatch, ctx: RouteCtx): Promise; export declare const TRACE_USAGE_ROUTES: readonly [{ readonly id: "tasks-source-summary"; readonly path: "/v1/tasks/source-summary"; readonly methods: readonly ["GET"]; }, { readonly id: "task-trace-list"; readonly path: "/v1/tasks"; readonly methods: readonly ["GET"]; }, { readonly id: "task-tool-result"; readonly pattern: RegExp; readonly label: "/v1/tasks/:id/tool-results/:ref"; readonly methods: readonly ["GET"]; }, { readonly id: "task-trace-turns"; readonly pattern: RegExp; readonly label: "/v1/tasks/:id/$sub"; readonly methods: readonly ["GET"]; }, { readonly id: "task-trace-stream"; readonly pattern: RegExp; readonly label: "/v1/tasks/:id/$sub"; readonly methods: readonly ["GET"]; }, { readonly id: "task-trace-artifacts"; readonly pattern: RegExp; readonly label: "/v1/tasks/:id/$sub"; readonly methods: readonly ["GET"]; }, { readonly id: "usage-analytics"; readonly pattern: RegExp; readonly label: "/v1/usage/$sub"; readonly methods: readonly ["GET"]; }]; /** 本域可分派行的 `id` 闭集 —— handler 的 `switch` 按它判穷尽(漏一口 = 编译红)。 */ export type TraceUsageRouteId = RouteIdsOf; //# sourceMappingURL=trace-usage.d.ts.map