78 lines
3.2 KiB
TypeScript
78 lines
3.2 KiB
TypeScript
/**
|
|
* 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 modules
|
|
import { 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 API
|
|
export { 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,
|
|
};
|
|
}
|