/**
 * Workflow state transition logic
 *
 * Handles determining the next step based on rules-based routing.
 */
export function determineRuleTransition(step, ruleIndex) {
    const rule = step.rules?.[ruleIndex];
    if (!rule) {
        return null;
    }
    return {
        ...(rule.next !== undefined ? { nextStep: rule.next } : {}),
        ...(rule.returnValue !== undefined ? { returnValue: rule.returnValue } : {}),
        ...(rule.requiresUserInput === true ? { requiresUserInput: true } : {}),
    };
}
/**
 * Determine next step using rules-based detection.
 * Returns the next step name from the matched rule, or null if no rule matched.
 */
export function determineNextStepByRules(step, ruleIndex) {
    const transition = determineRuleTransition(step, ruleIndex);
    if (!transition) {
        return null;
    }
    return transition.nextStep ?? null;
}
/**
 * Extract user-facing prompt from blocked response.
 * Looks for common patterns like "必要な情報:", "質問:", etc.
 */
export function extractBlockedPrompt(content) {
    // Try to extract specific question/info needed
    const patterns = [
        /必要な情報[:：]\s*(.+?)(?:\n|$)/i,
        /質問[:：]\s*(.+?)(?:\n|$)/i,
        /理由[:：]\s*(.+?)(?:\n|$)/i,
        /確認[:：]\s*(.+?)(?:\n|$)/i,
    ];
    for (const pattern of patterns) {
        const match = content.match(pattern);
        if (match?.[1]) {
            return match[1].trim();
        }
    }
    // Return the full content if no specific pattern found
    return content;
}
//# sourceMappingURL=transitions.js.map