poker_proposeDetector
Propose new detectors by defining unique names, origin coordinates, grid dimensions, and optional transformations for task management in poker simulations.
Instructions
新しい検出器を提案します
Input Schema
TableJSON Schema
| Name | Required | Description | Default |
|---|---|---|---|
| grid | No | エッジベクトルと分割数の組の配列(配列の数が検出器の次元を表す: 1D/2D/3D) | |
| name | Yes | 検出器の名前(一意である必要があります) | |
| origin | Yes | 検出器の基準位置(x y z形式) | |
| show_path_trace | Yes | 透過線の経路トレースをサマリーに出力するか | |
| transform | No | 適用する変換名(オプション) |
Implementation Reference
- Core handler function 'proposeDetector' for the MCP tool 'poker_proposeDetector'. Parses arguments, validates, delegates to TaskManager, performs structure analysis, and returns formatted response with success status and detector analysis.async proposeDetector(args) { try { const { name, origin, show_path_trace, transform = null } = args; let grid = args.grid; // デフォルト値なしで取得 // gridパラメータの文字列→配列変換 if (typeof grid === 'string') { try { grid = JSON.parse(grid); } catch (e) { grid = undefined; } } // show_path_traceの型変換(文字列から真偽値へ) const pathTrace = typeof show_path_trace === 'string' ? show_path_trace === 'true' : show_path_trace; // show_path_trace が必須になったことを確認 if (pathTrace === undefined) { throw new ValidationError('show_path_trace は必須パラメータです'); } logger.info('検出器提案開始', { name, origin, gridCount: grid ? grid.length : 0, hasTransform: !!transform, pathTrace: pathTrace }); // DetectorValidator統合のため、TaskManagerの包括的検証を利用 const result = await taskManager.proposeDetector(name, origin, pathTrace, { grid, transform }); // 検出器の分析情報を追加取得 const detectorData = { name, origin, show_path_trace: pathTrace, ...(grid !== undefined && { grid }), ...(transform && { transform }) }; const analysisResult = taskManager.analyzeDetectorStructure(detectorData); logger.info('検出器提案完了', { name, dimension: analysisResult.dimension, complexity: analysisResult.complexity }); return { success: true, message: result, detector: { name, type: analysisResult.type, dimension: analysisResult.dimension, complexity: analysisResult.complexity, origin, gridDimensions: grid ? grid.length : 0, hasTransform: !!transform, pathTrace: show_path_trace }, analysis: { isOptimal: analysisResult.isOptimal, suggestions: analysisResult.suggestions, performance: analysisResult.performance } }; } catch (error) { logger.error('検出器提案エラー', { args, error: error.message }); // マニフェスト仕様のpropose専用エラーコード処理 if (error.code === -32082) { return { success: false, error: error.message, details: { errorCode: error.code, suggestion: 'updateDetectorメソッドを使用してください', existingObject: args.name, objectType: '検出器' } }; } throw error; } },
- src/mcp/tools/detectorTools.js:3-94 (schema)Tool specification for 'poker_proposeDetector' including name, description, and detailed inputSchema with oneOf for point detectors (no grid) and volumetric detectors (with grid array).{ name: 'poker_proposeDetector', description: '新しい検出器を提案します', inputSchema: { type: 'object', oneOf: [ { // 点検出器スキーマ(gridプロパティなし) properties: { name: { type: 'string', description: '検出器の名前(一意である必要があります)', pattern: '^[a-zA-Z0-9_]+$', maxLength: 50 }, origin: { type: 'string', description: '検出器の基準位置(x y z形式)', pattern: '^-?\\d+(\\.\\d+)?\\s+-?\\d+(\\.\\d+)?\\s+-?\\d+(\\.\\d+)?$' }, transform: { type: 'string', description: '適用する変換名(オプション)', pattern: '^[a-zA-Z0-9_]+$', maxLength: 50 }, show_path_trace: { type: 'boolean', description: '透過線の経路トレースをサマリーに出力するか', default: false } }, required: ['name', 'origin', 'show_path_trace'], additionalProperties: false, not: { required: ['grid'] } // gridの存在を禁止 }, { // 線/面/体積検出器スキーマ(gridプロパティ必須) properties: { name: { type: 'string', description: '検出器の名前(一意である必要があります)', pattern: '^[a-zA-Z0-9_]+$', maxLength: 50 }, origin: { type: 'string', description: '検出器の基準位置(x y z形式)', pattern: '^-?\\d+(\\.\\d+)?\\s+-?\\d+(\\.\\d+)?\\s+-?\\d+(\\.\\d+)?$' }, grid: { type: 'array', description: 'エッジベクトルと分割数の組の配列(1要素=線検出器、2要素=面検出器、3要素=体積検出器)', minItems: 1, maxItems: 3, items: { type: 'object', properties: { edge: { type: 'string', description: 'エッジベクトル(x y z形式)', pattern: '^-?\\d+(\\.\\d+)?\\s+-?\\d+(\\.\\d+)?\\s+-?\\d+(\\.\\d+)?$' }, number: { type: 'integer', description: '分割数', minimum: 1, maximum: 10000 } }, required: ['edge', 'number'], additionalProperties: false } }, transform: { type: 'string', description: '適用する変換名(オプション)', pattern: '^[a-zA-Z0-9_]+$', maxLength: 50 }, show_path_trace: { type: 'boolean', description: '透過線の経路トレースをサマリーに出力するか', default: false } }, required: ['name', 'origin', 'grid', 'show_path_trace'], additionalProperties: false } ] } },
- src/mcp/server.js:43-57 (registration)MCP server request handler for tool calls. Maps tool name 'poker_proposeDetector' to handler 'proposeDetector' by removing 'poker_' prefix and executes it with arguments.this.server.setRequestHandler(CallToolRequestSchema, async (request) => { const { name, arguments: args } = request.params; logger.info(`MCP Tool実行: ${name}`, { args }); // ハンドラー名をツール名から生成(プレフィックス除去) const handlerName = name.replace('poker_', ''); const handler = this.handlers[handlerName]; if (!handler) { throw new McpError(ErrorCode.MethodNotFound, `Unknown tool: ${name}`); } return await safeExecute(async () => handler(args), { tool: name })(); });
- src/mcp/server.js:38-40 (registration)MCP server request handler for listing tools, returns allTools array which includes the 'poker_proposeDetector' tool definition with schema.this.server.setRequestHandler(ListToolsRequestSchema, async () => { return { tools: allTools }; });
- src/mcp/handlers/index.js:31-31 (registration)Integration of detector handlers (including proposeDetector) into the all handlers object returned by createAllHandlers....createDetectorHandlers(taskManager),