-
Notifications
You must be signed in to change notification settings - Fork 26
Expand file tree
/
Copy pathdi.xml
More file actions
executable file
·233 lines (201 loc) · 12 KB
/
di.xml
File metadata and controls
executable file
·233 lines (201 loc) · 12 KB
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
229
230
231
232
233
<?xml version="1.0"?>
<config xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:noNamespaceSchemaLocation="urn:magento:framework:ObjectManager/etc/config.xsd">
<type name="Magento\Framework\App\Response\HeaderProvider\HeaderProviderInterface">
<arguments>
<argument name="contentSecurityPolicy" xsi:type="string">default-src 'self' 'unsafe-inline' 'unsafe-eval' *.unpkg.com; script-src 'self' 'unsafe-inline' 'unsafe-eval' *.unpkg.com</argument>
</arguments>
</type>
<!-- API Implementation -->
<preference for="Genaker\MagentoMcpAi\Api\McpAiInterface" type="Genaker\MagentoMcpAi\Model\McpAi" />
<!-- Logger Configuration -->
<virtualType name="Genaker\MagentoMcpAi\Logger\Handler" type="Magento\Framework\Logger\Handler\Base">
<arguments>
<argument name="fileName" xsi:type="string">var/mcpai.log</argument>
</arguments>
</virtualType>
<virtualType name="Genaker\MagentoMcpAi\Logger\Logger" type="Monolog\Logger">
<arguments>
<argument name="name" xsi:type="string">mcpai_logger</argument>
<argument name="handlers" xsi:type="array">
<item name="system" xsi:type="object">Genaker\MagentoMcpAi\Logger\Handler</item>
</argument>
</arguments>
</virtualType>
<type name="Magento\Framework\Console\CommandList">
<arguments>
<argument name="commands" xsi:type="array">
<item name="genaker_magento_llm" xsi:type="object">Genaker\MagentoMcpAi\Console\Command\LlmAnalyzer</item>
<item name="genaker_menu_generate_md" xsi:type="object">Genaker\MagentoMcpAi\Console\Command\GenerateMenuMd</item>
</argument>
</arguments>
</type>
<preference for="Genaker\MagentoMcpAi\Api\ChatManagementInterface" type="Genaker\MagentoMcpAi\Model\ChatManagement" />
<preference for="Genaker\MagentoMcpAi\Api\Data\ChatResponseInterface" type="Genaker\MagentoMcpAi\Model\Data\ChatResponse" />
<!-- OpenAI Service Configuration -->
<type name="Genaker\MagentoMcpAi\Model\Service\OpenAiService">
<arguments>
<argument name="curl" xsi:type="object">Magento\Framework\HTTP\Client\Curl</argument>
<argument name="jsonHelper" xsi:type="object">Magento\Framework\Json\Helper\Data</argument>
</arguments>
</type>
<!-- Multi-LLM Service Configuration -->
<type name="Genaker\MagentoMcpAi\Model\Service\MultiLLMService">
<arguments>
<argument name="scopeConfig" xsi:type="object">Magento\Framework\App\Config\ScopeConfigInterface</argument>
<argument name="logger" xsi:type="object">Genaker\MagentoMcpAi\Logger\Logger</argument>
</arguments>
</type>
<!-- AI Service Interface - Use MgentoAIService Implementation -->
<preference for="Genaker\MagentoMcpAi\Api\Service\AIServiceInterface" type="Genaker\MagentoMcpAi\Model\Service\MgentoAIService" />
<!-- LLM Service - uses MCP AI logger for error analysis -->
<type name="Genaker\MagentoMcpAi\Service\LLM">
<arguments>
<argument name="logger" xsi:type="object">Genaker\MagentoMcpAi\Logger\Logger</argument>
</arguments>
</type>
<!-- Generic AI Service Configuration (wrapper around MultiLLMService) -->
<type name="Genaker\MagentoMcpAi\Model\Service\MgentoAIService">
<arguments>
<argument name="curl" xsi:type="object">Magento\Framework\HTTP\Client\Curl</argument>
<argument name="jsonHelper" xsi:type="object">Magento\Framework\Json\Helper\Data</argument>
<argument name="file" xsi:type="object">Magento\Framework\Filesystem\Io\File</argument>
<argument name="scopeConfig" xsi:type="object">Magento\Framework\App\Config\ScopeConfigInterface</argument>
<argument name="multiLLMService" xsi:type="object">Genaker\MagentoMcpAi\Model\Service\MultiLLMService</argument>
<argument name="logger" xsi:type="object">Genaker\MagentoMcpAi\Logger\Logger</argument>
</arguments>
</type>
<preference for="Genaker\MagentoMcpAi\Api\MenuAIAPIInterface" type="Genaker\MagentoMcpAi\Model\MenuAIAPI" />
<preference for="Genaker\MagentoMcpAi\Api\CustomerChatbotInterface" type="Genaker\MagentoMcpAi\Model\CustomerChatbot" />
<!-- LLM Analyzer Command Configuration -->
<type name="Genaker\MagentoMcpAi\Console\Command\LlmAnalyzer">
<arguments>
<argument name="userInteractionContext" xsi:type="object">Genaker\MagentoMcpAi\Model\Service\UserInteractionContext</argument>
<argument name="mcpRegistry" xsi:type="object">Genaker\MagentoMcpAi\Model\Mcp\Registry</argument>
</arguments>
</type>
<!-- CLI Chat Service Configuration -->
<type name="Genaker\MagentoMcpAi\Model\Service\CliChatWithToolsService">
<arguments>
<argument name="aiService" xsi:type="object">Genaker\MagentoMcpAi\Api\Service\AIServiceInterface</argument>
<argument name="toolRegistry" xsi:type="object">Genaker\MagentoMcpAi\Model\DatabaseTool\Registry</argument>
<argument name="logger" xsi:type="object">Genaker\MagentoMcpAi\Logger\Logger</argument>
<argument name="mcpRegistry" xsi:type="object">Genaker\MagentoMcpAi\Model\Mcp\Registry</argument>
</arguments>
</type>
<preference for="Magento\Framework\Phrase" type="Genaker\MagentoMcpAi\Framework\AiPhrase" />
<!-- Database Tool Registry -->
<type name="Genaker\MagentoMcpAi\Model\DatabaseTool\Registry">
<arguments>
<argument name="tools" xsi:type="array">
<!-- Default tools - can be extended by other modules -->
<item name="execute_sql_query" xsi:type="object">Genaker\MagentoMcpAi\Model\DatabaseTool\ExecuteSqlQuery</item>
<item name="list_tables" xsi:type="object">Genaker\MagentoMcpAi\Model\DatabaseTool\ListTablesTool</item>
<item name="describe_table" xsi:type="object">Genaker\MagentoMcpAi\Model\DatabaseTool\DescribeTable</item>
<item name="grep_files" xsi:type="object">Genaker\MagentoMcpAi\Model\DatabaseTool\GrepTool</item>
<item name="read_file" xsi:type="object">Genaker\MagentoMcpAi\Model\DatabaseTool\ReadFileTool</item>
<!-- Analysis tools -->
<item name="get_magento_info" xsi:type="object">Genaker\MagentoMcpAi\Model\DatabaseTool\GetMagentoInfo</item>
<item name="run_magento_cli" xsi:type="object">Genaker\MagentoMcpAi\Model\DatabaseTool\RunMagentoCli</item>
<item name="ask_user" xsi:type="object">Genaker\MagentoMcpAi\Model\DatabaseTool\AskUserTool</item>
</argument>
</arguments>
</type>
<!-- Discovery Tool: List Tables -->
<type name="Genaker\MagentoMcpAi\Model\DatabaseTool\ListTablesTool">
<arguments>
<argument name="resourceConnection" xsi:type="object">Magento\Framework\App\ResourceConnection</argument>
</arguments>
</type>
<!-- Database Tool: Execute SQL Query -->
<type name="Genaker\MagentoMcpAi\Model\DatabaseTool\ExecuteSqlQuery">
<arguments>
<argument name="resourceConnection" xsi:type="object">Magento\Framework\App\ResourceConnection</argument>
</arguments>
</type>
<!-- Database Tool: Describe Table -->
<type name="Genaker\MagentoMcpAi\Model\DatabaseTool\DescribeTable">
<arguments>
<argument name="resourceConnection" xsi:type="object">Magento\Framework\App\ResourceConnection</argument>
</arguments>
</type>
<!-- File Tool: Grep Files -->
<type name="Genaker\MagentoMcpAi\Model\DatabaseTool\GrepTool">
<arguments>
<argument name="directoryList" xsi:type="object">Magento\Framework\Filesystem\DirectoryList</argument>
<argument name="fileIo" xsi:type="object">Magento\Framework\Filesystem\Io\File</argument>
</arguments>
</type>
<!-- File Tool: Read File -->
<type name="Genaker\MagentoMcpAi\Model\DatabaseTool\ReadFileTool">
<arguments>
<argument name="directoryList" xsi:type="object">Magento\Framework\Filesystem\DirectoryList</argument>
<argument name="fileIo" xsi:type="object">Magento\Framework\Filesystem\Io\File</argument>
</arguments>
</type>
<!-- Analysis Tool: Get Magento Info -->
<type name="Genaker\MagentoMcpAi\Model\DatabaseTool\GetMagentoInfo">
<arguments>
<argument name="resourceConnection" xsi:type="object">Magento\Framework\App\ResourceConnection</argument>
<argument name="productMetadata" xsi:type="object">Magento\Framework\App\ProductMetadataInterface</argument>
<argument name="directoryList" xsi:type="object">Magento\Framework\Filesystem\DirectoryList</argument>
</arguments>
</type>
<!-- Analysis Tool: Run Magento CLI -->
<type name="Genaker\MagentoMcpAi\Model\DatabaseTool\RunMagentoCli">
<arguments>
<argument name="directoryList" xsi:type="object">Magento\Framework\Filesystem\DirectoryList</argument>
</arguments>
</type>
<!-- Analysis Tool: Ask User (interactive operator questions) -->
<!-- UserInteractionContext is a shared singleton; the CLI command sets a callback on it -->
<type name="Genaker\MagentoMcpAi\Model\DatabaseTool\AskUserTool">
<arguments>
<argument name="context" xsi:type="object">Genaker\MagentoMcpAi\Model\Service\UserInteractionContext</argument>
</arguments>
</type>
<!-- =========================================================================
MCP Server Registry
=========================================================================
The servers array is empty by default. Register MCP servers by creating
a virtualType of StdioMcpServer and adding it here.
Example — add this to your own di.xml (or uncomment here):
<virtualType name="MyFilesystemMcpServer"
type="Genaker\MagentoMcpAi\Model\Mcp\Server\StdioMcpServer">
<arguments>
<argument name="name" xsi:type="string">filesystem</argument>
<argument name="command" xsi:type="string">
npx -y @modelcontextprotocol/server-filesystem /var/www/html/pub
</argument>
</arguments>
</virtualType>
<type name="Genaker\MagentoMcpAi\Model\Mcp\Registry">
<arguments>
<argument name="servers" xsi:type="array">
<item name="filesystem" xsi:type="object">MyFilesystemMcpServer</item>
</argument>
</arguments>
</type>
MCP tools will appear to the LLM as: mcp__{serverName}__{toolName}
e.g. mcp__filesystem__read_file, mcp__filesystem__write_file
========================================================================= -->
<type name="Genaker\MagentoMcpAi\Model\Mcp\Registry">
<arguments>
<argument name="servers" xsi:type="array">
<!-- MockDataMcpServer: built-in test/demo server — returns static data.
Tools: mcp__mock__get_store_summary, mcp__mock__get_top_products, mcp__mock__echo_input
Remove this item (or comment out) to disable it in production. -->
<item name="mock" xsi:type="object">Genaker\MagentoMcpAi\Model\Mcp\Server\MockDataMcpServer</item>
<!-- Add real MCP servers here as virtualType entries. Example:
<item name="filesystem" xsi:type="object">MyFilesystemMcpServer</item>
-->
</argument>
<argument name="logger" xsi:type="object">Genaker\MagentoMcpAi\Logger\Logger</argument>
</arguments>
</type>
<!-- StdioMcpServer requires a logger — wire it here so subclass constructors get the MCP AI logger -->
<type name="Genaker\MagentoMcpAi\Model\Mcp\Server\StdioMcpServer">
<arguments>
<argument name="logger" xsi:type="object">Genaker\MagentoMcpAi\Logger\Logger</argument>
</arguments>
</type>
</config>