diff --git a/src/storage/mod.rs b/src/storage/mod.rs index 378b111..f3cd57c 100644 --- a/src/storage/mod.rs +++ b/src/storage/mod.rs @@ -572,8 +572,8 @@ impl SessionStore { " INSERT INTO messages ( id, session_id, topic_id, seq, role, content, - system_context, reasoning_content, media_refs_json, tool_call_id, tool_name, tool_calls_json, created_at - ) VALUES (?1, ?2, ?3, ?4, ?5, ?6, ?7, ?8, ?9, ?10, ?11, ?12, ?13) + system_context, reasoning_content, media_refs_json, tool_call_id, tool_name, tool_calls_json, tool_duration_ms, created_at + ) VALUES (?1, ?2, ?3, ?4, ?5, ?6, ?7, ?8, ?9, ?10, ?11, ?12, ?13, ?14) ", params![ message.id, @@ -588,6 +588,7 @@ impl SessionStore { message.tool_call_id, message.tool_name, tool_calls_json, + message.tool_duration_ms.map(|v| v as i64), message.timestamp, ], )?; @@ -649,8 +650,8 @@ impl SessionStore { INSERT INTO messages ( id, session_id, topic_id, seq, role, content, system_context, reasoning_content, media_refs_json, - tool_call_id, tool_name, tool_calls_json, created_at - ) VALUES (?1, ?2, ?3, ?4, ?5, ?6, ?7, ?8, ?9, ?10, ?11, ?12, ?13) + tool_call_id, tool_name, tool_calls_json, tool_duration_ms, created_at + ) VALUES (?1, ?2, ?3, ?4, ?5, ?6, ?7, ?8, ?9, ?10, ?11, ?12, ?13, ?14) ", params![ message.id, @@ -665,6 +666,7 @@ impl SessionStore { message.tool_call_id, message.tool_name, tool_calls_json, + message.tool_duration_ms.map(|v| v as i64), message.timestamp, ], )?; @@ -1455,7 +1457,7 @@ impl SessionStore { tool_call_id: row.get(7)?, tool_name: row.get(8)?, tool_state: None, - tool_duration_ms: None, + tool_duration_ms: row.get::<_, Option>(10)?.map(|v| v as u64), tool_calls, }) })?; @@ -1641,6 +1643,13 @@ fn ensure_messages_schema(conn: &Connection) -> Result<(), StorageError> { // 这里只添加列,外键约束由应用层保证 } + if !has_column(conn, "messages", "tool_duration_ms")? { + add_column_if_missing( + conn, + "ALTER TABLE messages ADD COLUMN tool_duration_ms INTEGER", + )?; + } + // 创建 topic_id 索引(如果不存在) conn.execute( "CREATE INDEX IF NOT EXISTS idx_messages_topic_seq ON messages(topic_id, seq) WHERE topic_id IS NOT NULL", @@ -1748,8 +1757,8 @@ fn insert_message_with_seq( " INSERT INTO messages ( id, session_id, seq, role, content, - system_context, reasoning_content, media_refs_json, tool_call_id, tool_name, tool_calls_json, created_at - ) VALUES (?1, ?2, ?3, ?4, ?5, ?6, ?7, ?8, ?9, ?10, ?11, ?12) + system_context, reasoning_content, media_refs_json, tool_call_id, tool_name, tool_calls_json, tool_duration_ms, created_at + ) VALUES (?1, ?2, ?3, ?4, ?5, ?6, ?7, ?8, ?9, ?10, ?11, ?12, ?13) ", params![ message.id, @@ -1763,6 +1772,7 @@ fn insert_message_with_seq( message.tool_call_id, message.tool_name, tool_calls_json, + message.tool_duration_ms.map(|v| v as i64), message.timestamp, ], )?; @@ -1794,7 +1804,7 @@ fn load_messages_between( ) -> Result, StorageError> { let mut stmt = conn.prepare( " - SELECT id, role, content, system_context, reasoning_content, media_refs_json, created_at, tool_call_id, tool_name, tool_calls_json + SELECT id, role, content, system_context, reasoning_content, media_refs_json, created_at, tool_call_id, tool_name, tool_calls_json, tool_duration_ms FROM messages WHERE session_id = ?1 AND seq > ?2 AND seq <= ?3 ORDER BY seq ASC @@ -1838,7 +1848,7 @@ fn load_messages_between( tool_call_id: row.get(7)?, tool_name: row.get(8)?, tool_state: None, - tool_duration_ms: None, + tool_duration_ms: row.get::<_, Option>(10)?.map(|v| v as u64), tool_calls, }) }, @@ -1858,7 +1868,7 @@ fn load_messages_after( ) -> Result, StorageError> { let mut stmt = conn.prepare( " - SELECT id, role, content, system_context, reasoning_content, media_refs_json, created_at, tool_call_id, tool_name, tool_calls_json + SELECT id, role, content, system_context, reasoning_content, media_refs_json, created_at, tool_call_id, tool_name, tool_calls_json, tool_duration_ms FROM messages WHERE session_id = ?1 AND seq > ?2 ORDER BY seq ASC @@ -1899,7 +1909,7 @@ fn load_messages_after( tool_call_id: row.get(7)?, tool_name: row.get(8)?, tool_state: None, - tool_duration_ms: None, + tool_duration_ms: row.get::<_, Option>(10)?.map(|v| v as u64), tool_calls, }) })?;