// Shared types for DenseFeed prompts class FilterItem { i int title string source string } class ScoreItem { i int title string source string summary string } class StoryItem { rank int title string source string score float summary string } class ArticleExcerpt { title string body string } class Verdict { i int reasoning string @description("Step-by-step thinking on whether this is relevant") v string @description("KEEP or DROP") } class ScoredItem { i int reasoning string @description("Step-by-step thinking about the signal and relevance") s int @description("Score 0-10") r string @description("Brief reason for the score") } class RankedItem { i int @description("Index matching input item index") score int @description("0 = DROP, 1-10 = relevance score") reason string @description("Brief reason for the score") } class ScriptLine { speaker string @description("A or B") @stream.done @stream.not_null text string @stream.done emotion string } class MovementPlan { title string purpose string @description("The narrative purpose of this movement (e.g. build tension, quick updates)") story_titles string[] @description("Titles of the stories covered in this movement") key_takeaway string @description("The key technical or narrative takeaway") } class EpisodeOutline { title string hook_promise string @description("The core question or promise established in the hook") movements MovementPlan[] climax_wisdom string @description("The final wisdom/takeaway that connects all stories") }