Real-time index of opencode sessions
0
fork

Configure Feed

Select the types of activity you want to include in your feed.

Rewire convenience materializer APIs to staged tree flow wrappers

Refactor run_session_flow to build on the new staged tree pipeline instead of directly executing bespoke load loops. The convenience layer now derives scope/message-scope outputs from SessionTreePlan and uses run_session_tree_flow to obtain hydrated results.

Add run_session_tree_flow as a composed wrapper over plan -> resolve -> hydrate, and merge stage issues into a single surfaced report path. This keeps the old ergonomic entrypoints while making staged behavior canonical under the hood.

rektide ec6e1993 d723cc6a

+44 -7
+44 -7
src/materializer.rs
··· 328 328 } 329 329 330 330 pub fn run_session_flow(&self, options: &SessionFlowOptions) -> Result<SessionFlowResult> { 331 - let scope = self.plan_session_flow(options)?; 332 - let session = 333 - self.load_session_with_diff_policy(&scope.session_id, options.include_diff)?; 334 - let message_scopes = self.plan_message_flows(options, &scope)?; 335 - let messages = self.load_messages_with_scopes(&message_scopes)?; 331 + let plan = self.plan_session_tree(options)?; 332 + let hydrated = self.run_session_tree_flow(options)?; 333 + 334 + let scope = SessionFlowScope { 335 + session_id: plan.value.session.session_id.clone(), 336 + project_id: plan.value.session.project_id.clone(), 337 + message_ids: plan 338 + .value 339 + .messages 340 + .iter() 341 + .map(|message| message.key.message_id.clone()) 342 + .collect(), 343 + }; 344 + 345 + let message_scopes = plan 346 + .value 347 + .messages 348 + .iter() 349 + .map(|message| MessageFlowScope { 350 + session_id: message.key.session_id.clone(), 351 + message_id: message.key.message_id.clone(), 352 + part_ids: message 353 + .parts 354 + .iter() 355 + .map(|part| part.part_id.clone()) 356 + .collect(), 357 + }) 358 + .collect(); 336 359 337 360 Ok(SessionFlowResult { 338 361 scope, 339 362 message_scopes, 340 - session, 341 - messages, 363 + session: hydrated.value.session, 364 + messages: hydrated.value.messages, 342 365 }) 366 + } 367 + 368 + pub fn run_session_tree_flow( 369 + &self, 370 + options: &SessionFlowOptions, 371 + ) -> Result<StageResult<SessionHydratedTree>> { 372 + let plan = self.plan_session_tree(options)?; 373 + let resolved = self.resolve_session_tree(&plan.value)?; 374 + let mut hydrated = self.hydrate_session_tree(&resolved.value)?; 375 + 376 + hydrated.report.issues.extend(plan.report.issues); 377 + hydrated.report.issues.extend(resolved.report.issues); 378 + 379 + Ok(hydrated) 343 380 } 344 381 345 382 pub fn plan_session_tree(