MCPcopy Index your code
hub / github.com/ChrisFeldmeier/OpenCodeRust / render_header

Method render_header

crates/opencode-tui/src/components/session.rs:256–371  ·  view source on GitHub ↗
(&self, frame: &mut Frame, area: Rect)

Source from the content-addressed store, hash-verified

254 }
255
256 fn render_header(&self, frame: &mut Frame, area: Rect) {
257 let theme = self.context.theme.read();
258 let session_ctx = self.context.session.read();
259 let is_narrow = area.width < HEADER_NARROW_THRESHOLD;
260
261 let title = session_ctx
262 .sessions
263 .get(&self.session_id)
264 .map(|s| s.title.as_str())
265 .unwrap_or("New Session");
266
267 let messages = session_ctx
268 .messages
269 .get(&self.session_id)
270 .cloned()
271 .unwrap_or_default();
272
273 // Find the last assistant message with output tokens > 0 for token display
274 let last_assistant = messages
275 .iter()
276 .rev()
277 .find(|m| matches!(m.role, MessageRole::Assistant) && m.tokens.output > 0);
278
279 // TS parity: cost only sums assistant messages.
280 let total_cost: f64 = messages
281 .iter()
282 .filter(|m| matches!(m.role, MessageRole::Assistant))
283 .map(|m| m.cost)
284 .sum();
285 let mut context_and_cost = None;
286 if let Some(assistant_msg) = last_assistant {
287 let t = &assistant_msg.tokens;
288 let total_tokens = t.input + t.output + t.reasoning + t.cache_read + t.cache_write;
289 if total_tokens > 0 {
290 let model_context_limit = {
291 let providers = self.context.providers.read();
292 let current_model = self.context.current_model.read();
293 assistant_msg
294 .model
295 .as_ref()
296 .or(current_model.as_ref())
297 .and_then(|model_id| {
298 providers.iter().find_map(|p| {
299 p.models
300 .iter()
301 .find(|m| {
302 m.id == *model_id
303 || m.id
304 .rsplit_once('/')
305 .map(|(_, suffix)| suffix == model_id)
306 .unwrap_or(false)
307 })
308 .map(|m| m.context_window)
309 })
310 })
311 .unwrap_or(0)
312 };
313

Callers 1

render_mainMethod · 0.80

Calls 7

newFunction · 0.85
readMethod · 0.80
findMethod · 0.80
format_numberFunction · 0.70
getMethod · 0.45
as_strMethod · 0.45
filterMethod · 0.45

Tested by

no test coverage detected