{"version":3,"file":"render-vars.mjs","names":[],"sources":["../../src/template/render-vars.ts"],"sourcesContent":["import type { Message } from '@earendil-works/pi-ai';\n\nimport type {\n\tBranchSummaryRenderVars,\n\tCompactionRenderVars,\n\tCompactionTemplateFrontmatter,\n} from '@live-compaction/template/types';\n\nfunction isMessage(value: unknown): value is Message {\n\treturn (\n\t\ttypeof value === 'object' && value !== null && 'role' in (value as Record<string, unknown>)\n\t);\n}\n\nfunction extractMessageText(value: unknown): string {\n\tif (!isMessage(value)) return '';\n\tconst content = (value as { content?: unknown }).content;\n\tif (typeof content === 'string') return content;\n\tif (!Array.isArray(content)) return '';\n\tconst parts: string[] = [];\n\tfor (const block of content) {\n\t\tif (\n\t\t\tblock &&\n\t\t\ttypeof block === 'object' &&\n\t\t\t(block as { type?: string }).type === 'text' &&\n\t\t\ttypeof (block as { text?: string }).text === 'string'\n\t\t) {\n\t\t\tparts.push((block as { text: string }).text);\n\t\t}\n\t}\n\treturn parts.join('\\n');\n}\n\nfunction findLastUserText(groups: Message[][]): string | undefined {\n\tfor (const group of groups) {\n\t\tfor (let i = group.length - 1; i >= 0; i--) {\n\t\t\tconst m = group[i];\n\t\t\tif (m.role === 'user') {\n\t\t\t\tconst text = extractMessageText(m);\n\t\t\t\tif (text) return text;\n\t\t\t}\n\t\t}\n\t}\n\treturn undefined;\n}\n\n// ---------------------------------------------------------------------------\n// Compaction render vars\n// ---------------------------------------------------------------------------\n\nexport interface BuildRenderVarsOptions {\n\tpreviousSummary?: string;\n\tdiscardedText?: string;\n\tkeptTailText?: string;\n\ttaskStateBlock?: string;\n\tfilesTouchedBlock?: string;\n\tfocusText?: string;\n\tfocusInput?: string;\n\tdiscardedMessages: Message[];\n\tkeptTailMessages: Message[];\n\tfrontmatter?: CompactionTemplateFrontmatter;\n}\n\nexport function buildRenderVars(options: BuildRenderVarsOptions): CompactionRenderVars {\n\tconst lastUserMessage = findLastUserText([options.keptTailMessages, options.discardedMessages]);\n\n\treturn {\n\t\tprevious_summary: options.previousSummary,\n\t\tdiscarded: options.discardedText,\n\t\tkept_tail: options.keptTailText,\n\t\ttask_state: options.taskStateBlock,\n\t\tfiles_touched: options.filesTouchedBlock,\n\t\tfocus: options.focusText,\n\t\tfocus_input: options.focusInput,\n\t\tdiscarded_messages: options.discardedMessages,\n\t\tkept_tail_messages: options.keptTailMessages,\n\t\tlast_user_message: lastUserMessage,\n\t\tstats: {\n\t\t\tdiscarded_messages: options.discardedMessages.length,\n\t\t\tkept_tail_messages: options.keptTailMessages.length,\n\t\t\tdiscarded_chars: options.discardedText?.length ?? 0,\n\t\t\tkept_tail_chars: options.keptTailText?.length ?? 0,\n\t\t\ttask_state_chars: options.taskStateBlock?.length ?? 0,\n\t\t},\n\t\tmeta: options.frontmatter ?? { extra: {} },\n\t};\n}\n\n// ---------------------------------------------------------------------------\n// Branch-summary render vars\n// ---------------------------------------------------------------------------\n\nexport interface BuildBranchSummaryRenderVarsOptions {\n\tpreviousSummary?: string;\n\tbranchMessagesText?: string;\n\tfilesTouchedBlock?: string;\n\tcustomFocus?: string;\n\tbranchEntryMessages: Message[];\n\tfrontmatter?: CompactionTemplateFrontmatter;\n}\n\nexport function buildBranchSummaryRenderVars(\n\toptions: BuildBranchSummaryRenderVarsOptions,\n): BranchSummaryRenderVars {\n\tconst lastUserMessage = findLastUserText([options.branchEntryMessages]);\n\treturn {\n\t\tprevious_summary: options.previousSummary,\n\t\tbranch_messages: options.branchMessagesText,\n\t\tfiles_touched: options.filesTouchedBlock,\n\t\tcustom_focus: options.customFocus,\n\t\tbranch_entry_messages: options.branchEntryMessages,\n\t\tlast_user_message: lastUserMessage,\n\t\tstats: {\n\t\t\tbranch_messages: options.branchEntryMessages.length,\n\t\t\tbranch_chars: options.branchMessagesText?.length ?? 0,\n\t\t},\n\t\tmeta: options.frontmatter ?? { extra: {} },\n\t};\n}\n"],"mappings":";AAQA,SAAS,UAAU,OAAkC;CACpD,OACC,OAAO,UAAU,YAAY,UAAU,QAAQ,UAAW;AAE5D;AAEA,SAAS,mBAAmB,OAAwB;CACnD,IAAI,CAAC,UAAU,KAAK,GAAG,OAAO;CAC9B,MAAM,UAAW,MAAgC;CACjD,IAAI,OAAO,YAAY,UAAU,OAAO;CACxC,IAAI,CAAC,MAAM,QAAQ,OAAO,GAAG,OAAO;CACpC,MAAM,QAAkB,CAAC;CACzB,KAAK,MAAM,SAAS,SACnB,IACC,SACA,OAAO,UAAU,YAChB,MAA4B,SAAS,UACtC,OAAQ,MAA4B,SAAS,UAE7C,MAAM,KAAM,MAA2B,IAAI;CAG7C,OAAO,MAAM,KAAK,IAAI;AACvB;AAEA,SAAS,iBAAiB,QAAyC;CAClE,KAAK,MAAM,SAAS,QACnB,KAAK,IAAI,IAAI,MAAM,SAAS,GAAG,KAAK,GAAG,KAAK;EAC3C,MAAM,IAAI,MAAM;EAChB,IAAI,EAAE,SAAS,QAAQ;GACtB,MAAM,OAAO,mBAAmB,CAAC;GACjC,IAAI,MAAM,OAAO;EAClB;CACD;AAGF;AAmBA,SAAgB,gBAAgB,SAAuD;CACtF,MAAM,kBAAkB,iBAAiB,CAAC,QAAQ,kBAAkB,QAAQ,iBAAiB,CAAC;CAE9F,OAAO;EACN,kBAAkB,QAAQ;EAC1B,WAAW,QAAQ;EACnB,WAAW,QAAQ;EACnB,YAAY,QAAQ;EACpB,eAAe,QAAQ;EACvB,OAAO,QAAQ;EACf,aAAa,QAAQ;EACrB,oBAAoB,QAAQ;EAC5B,oBAAoB,QAAQ;EAC5B,mBAAmB;EACnB,OAAO;GACN,oBAAoB,QAAQ,kBAAkB;GAC9C,oBAAoB,QAAQ,iBAAiB;GAC7C,iBAAiB,QAAQ,eAAe,UAAU;GAClD,iBAAiB,QAAQ,cAAc,UAAU;GACjD,kBAAkB,QAAQ,gBAAgB,UAAU;EACrD;EACA,MAAM,QAAQ,eAAe,EAAE,OAAO,CAAC,EAAE;CAC1C;AACD;AAeA,SAAgB,6BACf,SAC0B;CAC1B,MAAM,kBAAkB,iBAAiB,CAAC,QAAQ,mBAAmB,CAAC;CACtE,OAAO;EACN,kBAAkB,QAAQ;EAC1B,iBAAiB,QAAQ;EACzB,eAAe,QAAQ;EACvB,cAAc,QAAQ;EACtB,uBAAuB,QAAQ;EAC/B,mBAAmB;EACnB,OAAO;GACN,iBAAiB,QAAQ,oBAAoB;GAC7C,cAAc,QAAQ,oBAAoB,UAAU;EACrD;EACA,MAAM,QAAQ,eAAe,EAAE,OAAO,CAAC,EAAE;CAC1C;AACD"}