Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
20 changes: 16 additions & 4 deletions packages/session/src/create-session.ts
Original file line number Diff line number Diff line change
Expand Up @@ -37,6 +37,18 @@ function parseToolResultEnvelope(content: string): ToolResultEnvelope | null {
}
}

function attachTurnMetadata(records: Message[], turnId: string): Message[] {
let seq = 0
return records.map((record) => ({
...record,
metadata: {
...(record.metadata ?? {}),
turnId,
turnSeq: seq++,
},
}))
}

/** 把 tool 执行结果序列化为 tool message content,对齐 OpenAI/Anthropic 标准(只含结果数据)。 */
function serializeToolResultContent(result: ToolResultEnvelope['toolResults'][number]): string {
if (!result.success) {
Expand Down Expand Up @@ -254,10 +266,10 @@ function buildSession(
...(result.toolCalls && result.toolCalls.length > 0 ? { toolCalls: result.toolCalls } : {}),
timestamp: new Date().toISOString(),
}
for (const record of recordsToPersist) {
const turnId = randomUUID()
for (const record of attachTurnMetadata([...recordsToPersist, assistantRecord], turnId)) {
await storage.appendRecord(currentMeta.id, record)
}
await storage.appendRecord(currentMeta.id, assistantRecord)

return {
content: result.content,
Expand Down Expand Up @@ -363,10 +375,10 @@ function buildSession(
...(result.toolCalls && result.toolCalls.length > 0 ? { toolCalls: result.toolCalls } : {}),
timestamp: new Date().toISOString(),
}
for (const record of recordsToPersist) {
const turnId = randomUUID()
for (const record of attachTurnMetadata([...recordsToPersist, assistantRecord], turnId)) {
await storage.appendRecord(currentMeta.id, record)
}
await storage.appendRecord(currentMeta.id, assistantRecord)

// 更新 promptTokens 基线
if (result.usage?.promptTokens) {
Expand Down
2 changes: 2 additions & 0 deletions packages/session/src/types/llm.ts
Original file line number Diff line number Diff line change
Expand Up @@ -10,6 +10,8 @@ export interface Message {
toolCallId?: string
/** 消息写入时间(ISO 字符串) */
timestamp?: string
/** 持久化层附加元数据(例如 KitKit 的 turnId/turnSeq)。LLM adapter 应忽略该字段。 */
metadata?: Record<string, unknown>
}

/** LLM 返回的工具调用请求 */
Expand Down
Loading