feat(composer): replicate WorkBuddy branch label and context usage (TODO 21)

This commit is contained in:
xiaohan.yuan committed 2026-10-17 08:15:19 +08:00
1 parent cb8a7e6466
commit bde041c12d
21 files changed
+1350 -12

No files matched your search

+2 -1
View File
@@ -10,7 +10,7 @@
* 模型路由、上下文裁剪、工具编排由上层(agent/loop.ts)负责。
*/
import type { GatewayConfig, ToolSpec } from '@shared/types'
import type { GatewayConfig, TokenUsage, ToolSpec } from '@shared/types'
import { resolveOpenAIEndpoint } from '@shared/openai-endpoint'
import { parseSse } from './sse'
import { buildResponsesRequest, parseResponsesStream } from './responses'
@@ -34,6 +34,7 @@ export type GatewayDelta =
| { type: 'text'; text: string }
| { type: 'reasoning'; text: string }
| { type: 'tool_calls'; calls: WireToolCall[] }
| { type: 'usage'; usage: TokenUsage }
| { type: 'finish'; reason: string | null }
export interface GatewayStreamRequest {
+16
View File
@@ -149,6 +149,22 @@ export async function* parseResponsesStream(stream: ReadableStream<Uint8Array>,
const response = object(payload.response)
if (response.error || response.status !== 'completed' || !Array.isArray(response.output)) throw error('Responses 上游未返回合法成功终态')
for (let i = 0; i < response.output.length; i++) yield* output({ output_index: i }, object(response.output[i]), true)
const usage = object(response.usage)
const inputTokens = usage.input_tokens
const outputTokens = usage.output_tokens
const totalTokens = usage.total_tokens
if (typeof inputTokens === 'number' && typeof outputTokens === 'number' && typeof totalTokens === 'number') {
const cachedTokens = object(usage.input_tokens_details).cached_tokens
yield {
type: 'usage',
usage: {
inputTokens,
outputTokens,
totalTokens,
...(typeof cachedTokens === 'number' ? { cachedTokens } : {})
}
}
}
completed = true
break
}