78 lines · 3.2 KB · TypeScript
RawDownload
/** * AI Group Enhancer - Orchestrator for AI Group enhancement * * This module transforms raw AIGroup data into EnhancedAIGroup with display-ready * properties for the chat-style UI. It coordinates between specialized utility modules: * - lastOutputDetector: Find the last visible output * - slashCommandExtractor: Handle slash command extraction * - toolLinkingEngine: Link tool calls to their results * - displayItemBuilder: Build display items from steps/messages * - modelExtractor: Extract model information * - displaySummary: Build human-readable summaries * - aiGroupHelpers: Small utility functions */ // Import from specialized modulesimport { attachMainSessionImpact } from './aiGroupHelpers';import { buildDisplayItems } from './displayItemBuilder';import { buildSummary } from './displaySummary';import { findLastOutput } from './lastOutputDetector';import { extractMainModel, extractSubagentModels } from './modelExtractor';import { type PrecedingSlashInfo } from './slashCommandExtractor';import { linkToolCallsToResults } from './toolLinkingEngine'; import type { ClaudeMdStats } from '../types/claudeMd';import type { AIGroup, EnhancedAIGroup } from '../types/groups'; // Re-export types and functions that are part of the public APIexport { truncateText } from './aiGroupHelpers';export { buildDisplayItems, buildDisplayItemsFromMessages } from './displayItemBuilder';export { buildSummary } from './displaySummary';export { findLastOutput } from './lastOutputDetector';export { type PrecedingSlashInfo } from './slashCommandExtractor';export { linkToolCallsToResults } from './toolLinkingEngine'; /** * Main enhancement function - transforms AIGroup into EnhancedAIGroup. * * This is the primary entry point that ties together all the helper functions * to produce a display-ready enhanced group. * * @param aiGroup - Base AI Group to enhance * @param claudeMdStats - Optional CLAUDE.md injection stats for this group * @param precedingSlash - Optional slash info from the preceding UserGroup * @returns Enhanced AI Group with display data */export function enhanceAIGroup(  aiGroup: AIGroup,  claudeMdStats?: ClaudeMdStats,  precedingSlash?: PrecedingSlashInfo): EnhancedAIGroup {  // Pass isOngoing to findLastOutput - if ongoing, it returns 'ongoing' type instead of forcing a last output  const lastOutput = findLastOutput(aiGroup.steps, aiGroup.isOngoing ?? false);  // Pass responses to linkToolCallsToResults for slash instruction extraction  const linkedTools = linkToolCallsToResults(aiGroup.steps, aiGroup.responses);  // Attach main session impact tokens to subagents (Task tool call/result tokens)  attachMainSessionImpact(aiGroup.processes, linkedTools);  const displayItems = buildDisplayItems(    aiGroup.steps,    lastOutput,    aiGroup.processes,    aiGroup.responses,    precedingSlash  );  const summary = buildSummary(displayItems);  const mainModel = extractMainModel(aiGroup.steps);  const subagentModels = extractSubagentModels(aiGroup.processes, mainModel);   return {    ...aiGroup,    lastOutput,    linkedTools,    displayItems,    itemsSummary: summary,    mainModel,    subagentModels,    claudeMdStats: claudeMdStats ?? null,  };}