import type { Currency, Money, SkillFmPlatformKey } from './beacon-mcp-tools-v1.js'; export type { Currency, Money, SkillFmPlatformKey }; /** sidecar 批量上报用量 */ export declare const BEACON_USAGE_SNAPSHOT_PATH: "/v1/beacon/usage/snapshot"; /** 跨工作空间的契约版本标记 */ export declare const BEACON_USAGE_PROTOCOL_VERSION: "v1"; /** 单次请求的 snapshot 数量上限(Brain 实施侧 hard cap) */ export declare const BEACON_USAGE_MAX_SNAPSHOTS_PER_REQUEST: 200; /** * 用量快照 — sidecar 每 30 分钟扫描本地 agent 日志后产出。 * 每个 (platform, period) 一条;一次 POST 可批量传多条。 */ export interface UsageSnapshot { /** 与 SkillFmPlatformKey 对齐(anthropic / openai / deepseek / cursor / claude_code / ...) */ platform: SkillFmPlatformKey; /** 统计窗口起,ISO 8601 UTC */ period_start: string; /** 统计窗口止,ISO 8601 UTC */ period_end: string; /** 该窗口内累计花费(数值;currency 与字段同条 currency 字段一致) */ total_spent: number; /** 'USD' | 'CNY' */ currency: Currency; /** 该窗口内累计 token 数(可选) */ total_tokens?: number; /** 该窗口内累计 API 调用次数(可选) */ total_calls?: number; /** 模型粒度细分(可选,Pro 用户更详细) */ by_model?: Record; /** * 任意去敏机读字段。⚠️ **绝对禁止**包含 BEACON_USAGE_BYOK_BANNED_FIELDS 中任一 key。 * 允许的例子: { router_version: 'v1.2', cache_hit_rate: 0.42 } */ metadata?: Record; } /** 请求 headers */ export interface BeaconUsageRequestHeaders { /** v0.2 一致:长效 agent_token */ 'X-Agent-Token': string; /** sidecar 版本(observability) */ 'X-Skillfm-Local-Version'?: string; 'Content-Type': 'application/json'; } /** 请求 body — 批量上报 */ export interface BeaconUsageSnapshotRequest { /** 1-200 条;超过 200 → 400 BAD_REQUEST */ snapshots: UsageSnapshot[]; /** 上报时戳(ISO 8601);可选 */ client_timestamp?: string; } /** 200 OK 响应 */ export interface BeaconUsageSnapshotResponse { ok: true; /** 实际入库的快照条数(去重后) */ accepted: number; /** 因重复被忽略的条数(可选) */ skipped?: number; } export declare const BEACON_USAGE_ERROR_CODES: { readonly AUTH_MISSING_TOKEN: "BEACON.USAGE.AUTH.MISSING_TOKEN"; readonly AUTH_BAD_TOKEN: "BEACON.USAGE.AUTH.BAD_TOKEN"; readonly BAD_REQUEST: "BEACON.USAGE.BAD_REQUEST"; /** snapshots 长度超出 BEACON_USAGE_MAX_SNAPSHOTS_PER_REQUEST */ readonly PAYLOAD_TOO_LARGE: "BEACON.USAGE.PAYLOAD_TOO_LARGE"; /** metadata 含 BYOK 黑名单字段 */ readonly BYOK_VIOLATION: "BEACON.USAGE.BYOK_VIOLATION"; readonly RATE_LIMITED: "BEACON.USAGE.RATE_LIMITED"; readonly INTERNAL: "BEACON.USAGE.INTERNAL"; }; export type BeaconUsageErrorCode = (typeof BEACON_USAGE_ERROR_CODES)[keyof typeof BEACON_USAGE_ERROR_CODES]; export interface BeaconUsageErrorResponse { ok: false; error: { code: BeaconUsageErrorCode; message: string; /** 可选诊断字段(如 banned_field='api_key' / snapshot_index=3) */ details?: Record; }; } export type BeaconUsageEnvelope = { ok: true; data: BeaconUsageSnapshotResponse; } | BeaconUsageErrorResponse; //# sourceMappingURL=beacon-usage-v1.d.ts.map