UNPKG

mcp-decisive

Version:

MCP server for WRAP decision-making framework with structured output

74 lines (68 loc) 3.76 kB
export const ELICITATION_MESSAGES = { MAIN_MESSAGE: (totalCount, reduceCount, options) => `💡 **選択肢の削減をお願いします** 【現状】${totalCount}個の選択肢が入力されました 【目標】**${reduceCount}個の選択肢を削除**して5個に調整してください 【選択肢一覧】 ${options.map((opt, idx) => `${idx + 1}. ${opt.text}${opt.supplementaryInfo ? ` (${opt.supplementaryInfo})` : ''}`).join('\n')} 【削減の考え方】 • 重複している選択肢 • 実現可能性が低い選択肢 • 他の選択肢に包含される選択肢 • 現時点で優先度が明らかに低い選択肢 **あなたの判断で**削除する選択肢の番号をカンマ区切りで入力してください。 例: 削除したい選択肢が1番、3番、6番の場合 → "1,3,6" **重要**: 正確に**${reduceCount}個**の番号を選択してください。`, // バリデーション用 VALIDATION_ERROR: (selected, required) => `削除選択数エラー: ${selected}個選択されていますが、${required}個必要です。`, PARSE_ERROR: (input) => `入力形式エラー: "${input}" は正しい形式ではありません。カンマ区切りの数値を入力してください(例: 1,3,5)`, RANGE_ERROR: (invalidNumbers, max) => `範囲エラー: [${invalidNumbers.join(', ')}] は無効です。1-${max}の範囲で入力してください。`, // 成功確認用 CONFIRMATION_MESSAGE: (removedOptions, remainingOptions) => `削除確認: 【削除対象】${removedOptions.join(', ')} 【残存選択肢】${remainingOptions.join(', ')} この内容で削減を実行します。` }; // レスポンス処理関数 export const parseElicitationResponse = (response, originalOptions) => { if (!response || !response.selectedNumbers) { return { success: false, error: 'ユーザーが削減をキャンセルしました' }; } // 数値カンマ区切り文字列の解析 const input = response.selectedNumbers; if (!input || typeof input !== 'string') { return { success: false, error: ELICITATION_MESSAGES.PARSE_ERROR('') }; } // カンマ区切りの数値解析 const numberStrings = input.split(',').map(s => s.trim()); const selectedNumbers = []; for (const numStr of numberStrings) { const num = parseInt(numStr); if (isNaN(num)) { return { success: false, error: ELICITATION_MESSAGES.PARSE_ERROR(input) }; } selectedNumbers.push(num); } // 範囲チェック(1-based index) const invalidNumbers = selectedNumbers.filter(num => num < 1 || num > originalOptions.length); if (invalidNumbers.length > 0) { return { success: false, error: ELICITATION_MESSAGES.RANGE_ERROR(invalidNumbers, originalOptions.length) }; } // 重複チェック const uniqueNumbers = [...new Set(selectedNumbers)]; if (uniqueNumbers.length !== selectedNumbers.length) { return { success: false, error: '重複した番号が含まれています。' }; } // 削除数バリデーション const requiredRemovalCount = originalOptions.length - 5; if (selectedNumbers.length !== requiredRemovalCount) { return { success: false, error: ELICITATION_MESSAGES.VALIDATION_ERROR(selectedNumbers.length, requiredRemovalCount) }; } // 1-based から 0-based インデックスに変換してフィルタリング const indicesToRemove = selectedNumbers.map(num => num - 1); const filteredOptions = originalOptions.filter((_, index) => !indicesToRemove.includes(index)); return { success: true, filteredOptions }; }; //# sourceMappingURL=elicitation-prompts.js.map