@cotestdev/ai-runner 0.0.5 → 0.0.6
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/agents/logger.d.ts.map +1 -0
- package/dist/agents/logger.js.map +1 -0
- package/dist/agents/playwright-executor.d.ts.map +1 -0
- package/dist/agents/playwright-executor.js.map +1 -0
- package/dist/agents/tools/playwright-backend-adapter.d.ts.map +1 -0
- package/dist/agents/tools/playwright-backend-adapter.js.map +1 -0
- package/dist/agents/types.d.ts.map +1 -0
- package/dist/{core-infra/src → agents}/types.js.map +1 -1
- package/dist/index.d.ts.map +1 -0
- package/dist/index.js.map +1 -0
- package/dist/runner.d.ts.map +1 -0
- package/dist/runner.js.map +1 -0
- package/dist/tools/index.d.ts.map +1 -0
- package/dist/tools/index.js.map +1 -0
- package/dist/tools/playwright-groups.d.ts.map +1 -0
- package/dist/tools/playwright-groups.js.map +1 -0
- package/dist/types/external.d.ts.map +1 -0
- package/dist/types/external.js.map +1 -0
- package/dist/types/index.d.ts.map +1 -0
- package/dist/types/index.js.map +1 -0
- package/package.json +2 -7
- package/playwright.config.ts +38 -0
- package/src/agents/logger.ts +20 -0
- package/src/agents/playwright-executor.ts +252 -0
- package/src/agents/tools/playwright-backend-adapter.ts +134 -0
- package/src/agents/tools/playwright-mcp-types.d.ts +71 -0
- package/src/agents/types.ts +80 -0
- package/src/index.ts +27 -0
- package/src/runner.ts +224 -0
- package/src/tools/index.ts +48 -0
- package/src/tools/playwright-groups.ts +54 -0
- package/src/types/external.ts +7 -0
- package/src/types/index.ts +118 -0
- package/tests/agent/test-heal-agent.spec.ts +54 -0
- package/tsconfig.json +26 -0
- package/dist/ai-runner/src/agents/logger.d.ts.map +0 -1
- package/dist/ai-runner/src/agents/logger.js.map +0 -1
- package/dist/ai-runner/src/agents/playwright-executor.d.ts.map +0 -1
- package/dist/ai-runner/src/agents/playwright-executor.js.map +0 -1
- package/dist/ai-runner/src/agents/tools/playwright-backend-adapter.d.ts.map +0 -1
- package/dist/ai-runner/src/agents/tools/playwright-backend-adapter.js.map +0 -1
- package/dist/ai-runner/src/agents/types.d.ts.map +0 -1
- package/dist/ai-runner/src/agents/types.js.map +0 -1
- package/dist/ai-runner/src/index.d.ts.map +0 -1
- package/dist/ai-runner/src/index.js.map +0 -1
- package/dist/ai-runner/src/runner.d.ts.map +0 -1
- package/dist/ai-runner/src/runner.js.map +0 -1
- package/dist/ai-runner/src/tools/index.d.ts.map +0 -1
- package/dist/ai-runner/src/tools/index.js.map +0 -1
- package/dist/ai-runner/src/tools/playwright-groups.d.ts.map +0 -1
- package/dist/ai-runner/src/tools/playwright-groups.js.map +0 -1
- package/dist/ai-runner/src/types/external.d.ts.map +0 -1
- package/dist/ai-runner/src/types/external.js.map +0 -1
- package/dist/ai-runner/src/types/index.d.ts.map +0 -1
- package/dist/ai-runner/src/types/index.js.map +0 -1
- package/dist/core-infra/src/directory-validator.d.ts +0 -29
- package/dist/core-infra/src/directory-validator.d.ts.map +0 -1
- package/dist/core-infra/src/directory-validator.js +0 -91
- package/dist/core-infra/src/directory-validator.js.map +0 -1
- package/dist/core-infra/src/index.d.ts +0 -14
- package/dist/core-infra/src/index.d.ts.map +0 -1
- package/dist/core-infra/src/index.js +0 -44
- package/dist/core-infra/src/index.js.map +0 -1
- package/dist/core-infra/src/mcp/file-mcp-manager.d.ts +0 -14
- package/dist/core-infra/src/mcp/file-mcp-manager.d.ts.map +0 -1
- package/dist/core-infra/src/mcp/file-mcp-manager.js +0 -46
- package/dist/core-infra/src/mcp/file-mcp-manager.js.map +0 -1
- package/dist/core-infra/src/mcp/index.d.ts +0 -21
- package/dist/core-infra/src/mcp/index.d.ts.map +0 -1
- package/dist/core-infra/src/mcp/index.js +0 -17
- package/dist/core-infra/src/mcp/index.js.map +0 -1
- package/dist/core-infra/src/mcp/mcp-client.d.ts +0 -128
- package/dist/core-infra/src/mcp/mcp-client.d.ts.map +0 -1
- package/dist/core-infra/src/mcp/mcp-client.js +0 -163
- package/dist/core-infra/src/mcp/mcp-client.js.map +0 -1
- package/dist/core-infra/src/mcp/mcp-manager.d.ts +0 -21
- package/dist/core-infra/src/mcp/mcp-manager.d.ts.map +0 -1
- package/dist/core-infra/src/mcp/mcp-manager.js +0 -99
- package/dist/core-infra/src/mcp/mcp-manager.js.map +0 -1
- package/dist/core-infra/src/mcp/playwright-mcp-manager.d.ts +0 -19
- package/dist/core-infra/src/mcp/playwright-mcp-manager.d.ts.map +0 -1
- package/dist/core-infra/src/mcp/playwright-mcp-manager.js +0 -121
- package/dist/core-infra/src/mcp/playwright-mcp-manager.js.map +0 -1
- package/dist/core-infra/src/model.d.ts +0 -13
- package/dist/core-infra/src/model.d.ts.map +0 -1
- package/dist/core-infra/src/model.js +0 -191
- package/dist/core-infra/src/model.js.map +0 -1
- package/dist/core-infra/src/repositories/BaseRepository.d.ts +0 -69
- package/dist/core-infra/src/repositories/BaseRepository.d.ts.map +0 -1
- package/dist/core-infra/src/repositories/BaseRepository.js +0 -213
- package/dist/core-infra/src/repositories/BaseRepository.js.map +0 -1
- package/dist/core-infra/src/repositories/DirectoryRepository.d.ts +0 -70
- package/dist/core-infra/src/repositories/DirectoryRepository.d.ts.map +0 -1
- package/dist/core-infra/src/repositories/DirectoryRepository.js +0 -336
- package/dist/core-infra/src/repositories/DirectoryRepository.js.map +0 -1
- package/dist/core-infra/src/repositories/ExplorationRepository.d.ts +0 -34
- package/dist/core-infra/src/repositories/ExplorationRepository.d.ts.map +0 -1
- package/dist/core-infra/src/repositories/ExplorationRepository.js +0 -54
- package/dist/core-infra/src/repositories/ExplorationRepository.js.map +0 -1
- package/dist/core-infra/src/repositories/FileRepository.d.ts +0 -56
- package/dist/core-infra/src/repositories/FileRepository.d.ts.map +0 -1
- package/dist/core-infra/src/repositories/FileRepository.js +0 -132
- package/dist/core-infra/src/repositories/FileRepository.js.map +0 -1
- package/dist/core-infra/src/repositories/ModelConfigRepository.d.ts +0 -38
- package/dist/core-infra/src/repositories/ModelConfigRepository.d.ts.map +0 -1
- package/dist/core-infra/src/repositories/ModelConfigRepository.js +0 -59
- package/dist/core-infra/src/repositories/ModelConfigRepository.js.map +0 -1
- package/dist/core-infra/src/repositories/ProjectRepository.d.ts +0 -32
- package/dist/core-infra/src/repositories/ProjectRepository.d.ts.map +0 -1
- package/dist/core-infra/src/repositories/ProjectRepository.js +0 -67
- package/dist/core-infra/src/repositories/ProjectRepository.js.map +0 -1
- package/dist/core-infra/src/repositories/SettingsRepository.d.ts +0 -19
- package/dist/core-infra/src/repositories/SettingsRepository.d.ts.map +0 -1
- package/dist/core-infra/src/repositories/SettingsRepository.js +0 -72
- package/dist/core-infra/src/repositories/SettingsRepository.js.map +0 -1
- package/dist/core-infra/src/repositories/TableDataRepository.d.ts +0 -22
- package/dist/core-infra/src/repositories/TableDataRepository.d.ts.map +0 -1
- package/dist/core-infra/src/repositories/TableDataRepository.js +0 -33
- package/dist/core-infra/src/repositories/TableDataRepository.js.map +0 -1
- package/dist/core-infra/src/repositories/TestCaseRepository.d.ts +0 -120
- package/dist/core-infra/src/repositories/TestCaseRepository.d.ts.map +0 -1
- package/dist/core-infra/src/repositories/TestCaseRepository.js +0 -463
- package/dist/core-infra/src/repositories/TestCaseRepository.js.map +0 -1
- package/dist/core-infra/src/repositories/TestPlanRepository.d.ts +0 -35
- package/dist/core-infra/src/repositories/TestPlanRepository.d.ts.map +0 -1
- package/dist/core-infra/src/repositories/TestPlanRepository.js +0 -80
- package/dist/core-infra/src/repositories/TestPlanRepository.js.map +0 -1
- package/dist/core-infra/src/repositories/TestResultRepository.d.ts +0 -30
- package/dist/core-infra/src/repositories/TestResultRepository.d.ts.map +0 -1
- package/dist/core-infra/src/repositories/TestResultRepository.js +0 -54
- package/dist/core-infra/src/repositories/TestResultRepository.js.map +0 -1
- package/dist/core-infra/src/repositories/index.d.ts +0 -17
- package/dist/core-infra/src/repositories/index.d.ts.map +0 -1
- package/dist/core-infra/src/repositories/index.js +0 -31
- package/dist/core-infra/src/repositories/index.js.map +0 -1
- package/dist/core-infra/src/storageService.d.ts +0 -131
- package/dist/core-infra/src/storageService.d.ts.map +0 -1
- package/dist/core-infra/src/storageService.js +0 -304
- package/dist/core-infra/src/storageService.js.map +0 -1
- package/dist/core-infra/src/types.d.ts +0 -219
- package/dist/core-infra/src/types.d.ts.map +0 -1
- package/dist/core-infra/src/types.js +0 -3
- /package/dist/{ai-runner/src/agents → agents}/logger.d.ts +0 -0
- /package/dist/{ai-runner/src/agents → agents}/logger.js +0 -0
- /package/dist/{ai-runner/src/agents → agents}/playwright-executor.d.ts +0 -0
- /package/dist/{ai-runner/src/agents → agents}/playwright-executor.js +0 -0
- /package/dist/{ai-runner/src/agents → agents}/tools/playwright-backend-adapter.d.ts +0 -0
- /package/dist/{ai-runner/src/agents → agents}/tools/playwright-backend-adapter.js +0 -0
- /package/dist/{ai-runner/src/agents → agents}/types.d.ts +0 -0
- /package/dist/{ai-runner/src/agents → agents}/types.js +0 -0
- /package/dist/{ai-runner/src/index.d.ts → index.d.ts} +0 -0
- /package/dist/{ai-runner/src/index.js → index.js} +0 -0
- /package/dist/{ai-runner/src/runner.d.ts → runner.d.ts} +0 -0
- /package/dist/{ai-runner/src/runner.js → runner.js} +0 -0
- /package/dist/{ai-runner/src/tools → tools}/index.d.ts +0 -0
- /package/dist/{ai-runner/src/tools → tools}/index.js +0 -0
- /package/dist/{ai-runner/src/tools → tools}/playwright-groups.d.ts +0 -0
- /package/dist/{ai-runner/src/tools → tools}/playwright-groups.js +0 -0
- /package/dist/{ai-runner/src/types → types}/external.d.ts +0 -0
- /package/dist/{ai-runner/src/types → types}/external.js +0 -0
- /package/dist/{ai-runner/src/types → types}/index.d.ts +0 -0
- /package/dist/{ai-runner/src/types → types}/index.js +0 -0
|
@@ -1,163 +0,0 @@
|
|
|
1
|
-
"use strict";
|
|
2
|
-
/* eslint-disable @typescript-eslint/no-explicit-any */
|
|
3
|
-
/**
|
|
4
|
-
* MCP (Model Context Protocol) Client for Playwright integration
|
|
5
|
-
* Integrates with https://github.com/microsoft/playwright-mcp
|
|
6
|
-
*/
|
|
7
|
-
Object.defineProperty(exports, "__esModule", { value: true });
|
|
8
|
-
exports.MCPClient = void 0;
|
|
9
|
-
const index_js_1 = require("@modelcontextprotocol/sdk/client/index.js");
|
|
10
|
-
const stdio_js_1 = require("@modelcontextprotocol/sdk/client/stdio.js");
|
|
11
|
-
class MCPClient {
|
|
12
|
-
constructor(config) {
|
|
13
|
-
this.client = null;
|
|
14
|
-
this.connected = false;
|
|
15
|
-
this.connecting = false;
|
|
16
|
-
this.transport = null;
|
|
17
|
-
this.availableTools = [];
|
|
18
|
-
this.config = config;
|
|
19
|
-
}
|
|
20
|
-
getConfig() {
|
|
21
|
-
return this.config;
|
|
22
|
-
}
|
|
23
|
-
async doCallTool(name, args, signal) {
|
|
24
|
-
if (!this.client || !this.connected) {
|
|
25
|
-
throw new Error('MCP Client is not connected');
|
|
26
|
-
}
|
|
27
|
-
// Check if signal is aborted before calling
|
|
28
|
-
if (signal?.aborted) {
|
|
29
|
-
throw new Error('Operation was aborted');
|
|
30
|
-
}
|
|
31
|
-
// Ensure signal has throwIfAborted method for compatibility
|
|
32
|
-
if (signal && typeof signal.throwIfAborted !== 'function') {
|
|
33
|
-
// Polyfill for older environments
|
|
34
|
-
signal.throwIfAborted = function () {
|
|
35
|
-
if (this.aborted) {
|
|
36
|
-
throw new Error('Operation was aborted');
|
|
37
|
-
}
|
|
38
|
-
};
|
|
39
|
-
}
|
|
40
|
-
return await this.client.callTool({ name, arguments: args }, undefined, { signal });
|
|
41
|
-
}
|
|
42
|
-
async callTool(toolCall, signal) {
|
|
43
|
-
let toolName = toolCall.name;
|
|
44
|
-
let args = toolCall.args;
|
|
45
|
-
if (toolName === 'call_tool') {
|
|
46
|
-
toolName = toolCall.args.tool_name;
|
|
47
|
-
args = toolCall.args.args;
|
|
48
|
-
}
|
|
49
|
-
console.log('Executing tool:', toolName, 'with input:', args);
|
|
50
|
-
const result = await this.doCallTool(toolName, args, signal);
|
|
51
|
-
const isError = result.isError;
|
|
52
|
-
if (isError) {
|
|
53
|
-
console.warn('Tool:', toolCall.name, ' has error:', result.content);
|
|
54
|
-
}
|
|
55
|
-
else {
|
|
56
|
-
console.log('Tool:', toolCall.name, ' executed');
|
|
57
|
-
}
|
|
58
|
-
return result;
|
|
59
|
-
}
|
|
60
|
-
async connect(forced = false) {
|
|
61
|
-
const limit = 3;
|
|
62
|
-
let attempts = 0;
|
|
63
|
-
if (!forced && (this.connected || this.connecting)) {
|
|
64
|
-
console.log('MCP Client is connecting or connected');
|
|
65
|
-
return;
|
|
66
|
-
}
|
|
67
|
-
await this.disconnect();
|
|
68
|
-
this.connecting = true;
|
|
69
|
-
while (attempts < limit) {
|
|
70
|
-
try {
|
|
71
|
-
await this.doConnect();
|
|
72
|
-
break;
|
|
73
|
-
}
|
|
74
|
-
catch (error) {
|
|
75
|
-
attempts++;
|
|
76
|
-
console.error(`MCP Client connection attempt ${attempts} failed:`, error);
|
|
77
|
-
}
|
|
78
|
-
}
|
|
79
|
-
this.connecting = false;
|
|
80
|
-
}
|
|
81
|
-
async doConnect() {
|
|
82
|
-
// Create stdio transport - it automatically spawns the playwright-mcp process
|
|
83
|
-
this.transport = new stdio_js_1.StdioClientTransport({
|
|
84
|
-
command: this.config.cmd || 'npx',
|
|
85
|
-
args: this.config.args,
|
|
86
|
-
env: {
|
|
87
|
-
...this.config.env,
|
|
88
|
-
},
|
|
89
|
-
});
|
|
90
|
-
this.client = new index_js_1.Client({
|
|
91
|
-
name: 'test-agent-client',
|
|
92
|
-
version: '1.0.0',
|
|
93
|
-
}, {
|
|
94
|
-
capabilities: {},
|
|
95
|
-
});
|
|
96
|
-
await this.client.connect(this.transport, { timeout: 120000 });
|
|
97
|
-
this.connected = true;
|
|
98
|
-
// Load available tools
|
|
99
|
-
await this.loadAvailableTools();
|
|
100
|
-
console.log(`Connected to MCP server with ${this.availableTools.length} tools`);
|
|
101
|
-
}
|
|
102
|
-
async loadAvailableTools() {
|
|
103
|
-
if (!this.client)
|
|
104
|
-
return;
|
|
105
|
-
const response = await this.client.listTools();
|
|
106
|
-
this.availableTools = response.tools.map((tool) => ({
|
|
107
|
-
name: tool.name,
|
|
108
|
-
description: tool.description || '',
|
|
109
|
-
inputSchema: normalizeInputSchema(tool.name, tool.inputSchema),
|
|
110
|
-
}));
|
|
111
|
-
}
|
|
112
|
-
getAvailableTools() {
|
|
113
|
-
return this.availableTools;
|
|
114
|
-
}
|
|
115
|
-
getToolByName(name) {
|
|
116
|
-
return this.availableTools.find((t) => t.name === name);
|
|
117
|
-
}
|
|
118
|
-
getToolsDescription() {
|
|
119
|
-
return this.availableTools.map((t) => `- ${t.name}: ${t.description}`).join('\n');
|
|
120
|
-
}
|
|
121
|
-
async disconnect() {
|
|
122
|
-
try {
|
|
123
|
-
if (this.client) {
|
|
124
|
-
await this.client.close();
|
|
125
|
-
}
|
|
126
|
-
this.connected = false;
|
|
127
|
-
this.availableTools = [];
|
|
128
|
-
this.transport = null;
|
|
129
|
-
this.client = null;
|
|
130
|
-
console.log('Disconnected from MCP server');
|
|
131
|
-
}
|
|
132
|
-
catch (error) {
|
|
133
|
-
console.error('Error disconnecting from MCP server:', error);
|
|
134
|
-
}
|
|
135
|
-
}
|
|
136
|
-
isConnected() {
|
|
137
|
-
return this.connected;
|
|
138
|
-
}
|
|
139
|
-
}
|
|
140
|
-
exports.MCPClient = MCPClient;
|
|
141
|
-
function normalizeInputSchema(name, inputSchema) {
|
|
142
|
-
const schema = (inputSchema ?? {});
|
|
143
|
-
// Ensure the schema is explicitly an object schema so MCP SDK validation passes
|
|
144
|
-
const properties = schema.properties || {};
|
|
145
|
-
const required = Array.isArray(schema.required)
|
|
146
|
-
? schema.required
|
|
147
|
-
: [];
|
|
148
|
-
if (schema.type === 'object') {
|
|
149
|
-
return {
|
|
150
|
-
type: 'object',
|
|
151
|
-
properties,
|
|
152
|
-
required,
|
|
153
|
-
additionalProperties: schema.additionalProperties ?? false,
|
|
154
|
-
};
|
|
155
|
-
}
|
|
156
|
-
return {
|
|
157
|
-
type: 'object',
|
|
158
|
-
properties,
|
|
159
|
-
required,
|
|
160
|
-
additionalProperties: false,
|
|
161
|
-
};
|
|
162
|
-
}
|
|
163
|
-
//# sourceMappingURL=mcp-client.js.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"mcp-client.js","sourceRoot":"","sources":["../../../../../core-infra/src/mcp/mcp-client.ts"],"names":[],"mappings":"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"}
|
|
@@ -1,21 +0,0 @@
|
|
|
1
|
-
import { MCPClient, MCPTool } from './mcp-client';
|
|
2
|
-
import { GroupedMCPManager } from './index';
|
|
3
|
-
export interface ToolGroupInfo {
|
|
4
|
-
groupId: string;
|
|
5
|
-
description: string;
|
|
6
|
-
}
|
|
7
|
-
export declare class MCPManager {
|
|
8
|
-
private managers;
|
|
9
|
-
private connected;
|
|
10
|
-
private language;
|
|
11
|
-
getManagers(): GroupedMCPManager[];
|
|
12
|
-
getClient(groupName: string): MCPClient;
|
|
13
|
-
start(language: string, forced?: boolean): Promise<void>;
|
|
14
|
-
stop(): Promise<void>;
|
|
15
|
-
isConnected(): boolean;
|
|
16
|
-
getToolGroupInfo(): ToolGroupInfo[];
|
|
17
|
-
getAllAvailableTools(): MCPTool[];
|
|
18
|
-
getAvailableTools(groupName: string): MCPTool[];
|
|
19
|
-
getDefaultTools(): MCPTool[];
|
|
20
|
-
}
|
|
21
|
-
//# sourceMappingURL=mcp-manager.d.ts.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"mcp-manager.d.ts","sourceRoot":"","sources":["../../../../../core-infra/src/mcp/mcp-manager.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,SAAS,EAAE,OAAO,EAAE,MAAM,cAAc,CAAC;AAGlD,OAAO,EAAE,iBAAiB,EAAE,MAAM,SAAS,CAAC;AAE5C,MAAM,WAAW,aAAa;IAC1B,OAAO,EAAE,MAAM,CAAC;IAChB,WAAW,EAAE,MAAM,CAAC;CACvB;AAED,qBAAa,UAAU;IACnB,OAAO,CAAC,QAAQ,CAA2B;IAC3C,OAAO,CAAC,SAAS,CAAkB;IACnC,OAAO,CAAC,QAAQ,CAAmB;IAEnC,WAAW,IAAI,iBAAiB,EAAE;IAIlC,SAAS,CAAC,SAAS,EAAE,MAAM,GAAG,SAAS;IAUjC,KAAK,CAAC,QAAQ,EAAE,MAAM,EAAE,MAAM,GAAE,OAAe,GAAG,OAAO,CAAC,IAAI,CAAC;IAa/D,IAAI;IAWV,WAAW,IAAI,OAAO;IAItB,gBAAgB,IAAI,aAAa,EAAE;IAWnC,oBAAoB,IAAI,OAAO,EAAE;IAYjC,iBAAiB,CAAC,SAAS,EAAE,MAAM,GAAG,OAAO,EAAE;IAkB/C,eAAe,IAAI,OAAO,EAAE;CAmB/B"}
|
|
@@ -1,99 +0,0 @@
|
|
|
1
|
-
"use strict";
|
|
2
|
-
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
-
exports.MCPManager = void 0;
|
|
4
|
-
const file_mcp_manager_1 = require("./file-mcp-manager");
|
|
5
|
-
const playwright_mcp_manager_1 = require("./playwright-mcp-manager");
|
|
6
|
-
class MCPManager {
|
|
7
|
-
constructor() {
|
|
8
|
-
this.managers = [];
|
|
9
|
-
this.connected = false;
|
|
10
|
-
this.language = 'zh-CN';
|
|
11
|
-
}
|
|
12
|
-
getManagers() {
|
|
13
|
-
return this.managers;
|
|
14
|
-
}
|
|
15
|
-
getClient(groupName) {
|
|
16
|
-
for (const manager of this.managers) {
|
|
17
|
-
if (manager.getToolGroupInfo()[groupName]) {
|
|
18
|
-
return manager.getClient();
|
|
19
|
-
}
|
|
20
|
-
}
|
|
21
|
-
throw new Error(`MCP Client for group ${groupName} is not found`);
|
|
22
|
-
}
|
|
23
|
-
async start(language, forced = false) {
|
|
24
|
-
const playwrightClient = new playwright_mcp_manager_1.PlaywrightMCPManager({ language: language });
|
|
25
|
-
const fileClient = new file_mcp_manager_1.FileMCPManager();
|
|
26
|
-
this.managers = [playwrightClient, fileClient];
|
|
27
|
-
if (language !== this.language) {
|
|
28
|
-
forced = true;
|
|
29
|
-
}
|
|
30
|
-
this.language = language;
|
|
31
|
-
await Promise.all(this.managers.map(manager => manager.start(forced)));
|
|
32
|
-
this.connected = true;
|
|
33
|
-
}
|
|
34
|
-
async stop() {
|
|
35
|
-
for (const manager of this.managers) {
|
|
36
|
-
try {
|
|
37
|
-
await manager.getClient().disconnect();
|
|
38
|
-
}
|
|
39
|
-
catch (error) {
|
|
40
|
-
console.error(`Error disconnecting MCP Client:`, error);
|
|
41
|
-
}
|
|
42
|
-
}
|
|
43
|
-
this.connected = false;
|
|
44
|
-
}
|
|
45
|
-
isConnected() {
|
|
46
|
-
return this.connected;
|
|
47
|
-
}
|
|
48
|
-
getToolGroupInfo() {
|
|
49
|
-
return this.managers.flatMap((manager) => manager.groups
|
|
50
|
-
.filter((group) => !group.loadByDefault)
|
|
51
|
-
.map((group) => ({
|
|
52
|
-
groupId: group.name,
|
|
53
|
-
description: group.description,
|
|
54
|
-
})));
|
|
55
|
-
}
|
|
56
|
-
getAllAvailableTools() {
|
|
57
|
-
let allTools = [];
|
|
58
|
-
for (const manager of this.managers) {
|
|
59
|
-
const tools = manager.getClient().getAvailableTools().filter(tool => {
|
|
60
|
-
return manager.groups.some(group => !group.tools || group.tools.includes(tool.name));
|
|
61
|
-
});
|
|
62
|
-
allTools = allTools.concat(tools);
|
|
63
|
-
}
|
|
64
|
-
return allTools;
|
|
65
|
-
}
|
|
66
|
-
getAvailableTools(groupName) {
|
|
67
|
-
for (const manager of this.managers) {
|
|
68
|
-
const group = manager.groups.find(g => g.name === groupName);
|
|
69
|
-
if (group) {
|
|
70
|
-
const toolNames = group.tools;
|
|
71
|
-
const all = manager.getClient().getAvailableTools();
|
|
72
|
-
if (!toolNames) {
|
|
73
|
-
return all;
|
|
74
|
-
}
|
|
75
|
-
return toolNames.filter(name => all.some(tool => tool.name === name)).map(name => all.find(tool => tool.name === name));
|
|
76
|
-
}
|
|
77
|
-
}
|
|
78
|
-
throw new Error(`Tool group ${groupName} not found`);
|
|
79
|
-
}
|
|
80
|
-
getDefaultTools() {
|
|
81
|
-
const allTools = [];
|
|
82
|
-
for (const manager of this.managers) {
|
|
83
|
-
for (const group of manager.groups) {
|
|
84
|
-
if (!group.loadByDefault || !group.tools) {
|
|
85
|
-
continue;
|
|
86
|
-
}
|
|
87
|
-
const tools = manager.getClient().getAvailableTools();
|
|
88
|
-
for (const tool of tools) {
|
|
89
|
-
if (group.tools.includes(tool.name)) {
|
|
90
|
-
allTools.push(tool);
|
|
91
|
-
}
|
|
92
|
-
}
|
|
93
|
-
}
|
|
94
|
-
}
|
|
95
|
-
return allTools;
|
|
96
|
-
}
|
|
97
|
-
}
|
|
98
|
-
exports.MCPManager = MCPManager;
|
|
99
|
-
//# sourceMappingURL=mcp-manager.js.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"mcp-manager.js","sourceRoot":"","sources":["../../../../../core-infra/src/mcp/mcp-manager.ts"],"names":[],"mappings":"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"}
|
|
@@ -1,19 +0,0 @@
|
|
|
1
|
-
import { MCPClient } from './mcp-client';
|
|
2
|
-
import { AbstractGroupedMCPManager } from '.';
|
|
3
|
-
export interface PlaywrightMCPOpts {
|
|
4
|
-
language: string;
|
|
5
|
-
headless?: boolean;
|
|
6
|
-
}
|
|
7
|
-
export declare class PlaywrightMCPManager extends AbstractGroupedMCPManager {
|
|
8
|
-
private playwrightConfigPath?;
|
|
9
|
-
private playwrightConfigDir?;
|
|
10
|
-
private opts;
|
|
11
|
-
private client?;
|
|
12
|
-
constructor(opts: PlaywrightMCPOpts);
|
|
13
|
-
start(forced?: boolean): Promise<void>;
|
|
14
|
-
getClient(): MCPClient;
|
|
15
|
-
private createClient;
|
|
16
|
-
private prepareTempPlaywrightConfig;
|
|
17
|
-
private cleanupTempPlaywrightConfig;
|
|
18
|
-
}
|
|
19
|
-
//# sourceMappingURL=playwright-mcp-manager.d.ts.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"playwright-mcp-manager.d.ts","sourceRoot":"","sources":["../../../../../core-infra/src/mcp/playwright-mcp-manager.ts"],"names":[],"mappings":"AAOA,OAAO,EAAE,SAAS,EAAa,MAAM,cAAc,CAAC;AACpD,OAAO,EAAE,yBAAyB,EAAE,MAAM,GAAG,CAAC;AAE9C,MAAM,WAAW,iBAAiB;IAChC,QAAQ,EAAE,MAAM,CAAC;IACjB,QAAQ,CAAC,EAAE,OAAO,CAAC;CACpB;AAED,qBAAa,oBAAqB,SAAQ,yBAAyB;IACjE,OAAO,CAAC,oBAAoB,CAAC,CAAS;IACtC,OAAO,CAAC,mBAAmB,CAAC,CAAS;IACrC,OAAO,CAAC,IAAI,CAAoB;IAChC,OAAO,CAAC,MAAM,CAAC,CAAY;gBAEf,IAAI,EAAE,iBAAiB;IA2B7B,KAAK,CAAC,MAAM,GAAE,OAAe;IAWnC,SAAS,IAAI,SAAS;IAOtB,OAAO,CAAC,YAAY;IAgCpB,OAAO,CAAC,2BAA2B;IAqBnC,OAAO,CAAC,2BAA2B;CAYpC"}
|
|
@@ -1,121 +0,0 @@
|
|
|
1
|
-
"use strict";
|
|
2
|
-
var __importDefault = (this && this.__importDefault) || function (mod) {
|
|
3
|
-
return (mod && mod.__esModule) ? mod : { "default": mod };
|
|
4
|
-
};
|
|
5
|
-
Object.defineProperty(exports, "__esModule", { value: true });
|
|
6
|
-
exports.PlaywrightMCPManager = void 0;
|
|
7
|
-
/**
|
|
8
|
-
* MCP (Model Context Protocol) Client for Playwright integration
|
|
9
|
-
* Integrates with https://github.com/microsoft/playwright-mcp
|
|
10
|
-
*/
|
|
11
|
-
const fs_1 = __importDefault(require("fs"));
|
|
12
|
-
const os_1 = __importDefault(require("os"));
|
|
13
|
-
const path_1 = __importDefault(require("path"));
|
|
14
|
-
const mcp_client_1 = require("./mcp-client");
|
|
15
|
-
const _1 = require(".");
|
|
16
|
-
class PlaywrightMCPManager extends _1.AbstractGroupedMCPManager {
|
|
17
|
-
constructor(opts) {
|
|
18
|
-
super([{
|
|
19
|
-
name: 'playwright_basic',
|
|
20
|
-
description: 'Basic Playwright tools for browser interactions',
|
|
21
|
-
tools: ['browser_navigate', 'browser_click', 'browser_fill_form', 'browser_press_key', 'browser_run_code', 'browser_select_option', 'browser_snapshot', 'browser_type', 'browser_wait_for'],
|
|
22
|
-
loadByDefault: true,
|
|
23
|
-
},
|
|
24
|
-
{
|
|
25
|
-
name: 'playwright_browser_manage',
|
|
26
|
-
description: `Playwright tools for tab management, including: list, create, close, select a tab`,
|
|
27
|
-
tools: ['browser_tabs'],
|
|
28
|
-
loadByDefault: false,
|
|
29
|
-
},
|
|
30
|
-
{
|
|
31
|
-
name: 'playwright_other',
|
|
32
|
-
description: `Other Playwright tools for browser interactions, including:
|
|
33
|
-
1. mouse hover on element
|
|
34
|
-
2. drag and drop an element
|
|
35
|
-
3. upload file
|
|
36
|
-
4. handle dialog`,
|
|
37
|
-
tools: ['browser_hover', 'browser_drag', 'browser_file_upload', 'browser_handle_dialog'],
|
|
38
|
-
loadByDefault: false,
|
|
39
|
-
}
|
|
40
|
-
]);
|
|
41
|
-
this.opts = opts;
|
|
42
|
-
}
|
|
43
|
-
async start(forced = false) {
|
|
44
|
-
this.prepareTempPlaywrightConfig(this.opts.language);
|
|
45
|
-
const client = this.createClient(this.opts);
|
|
46
|
-
this.client = client;
|
|
47
|
-
try {
|
|
48
|
-
await client.connect(forced);
|
|
49
|
-
}
|
|
50
|
-
finally {
|
|
51
|
-
this.cleanupTempPlaywrightConfig();
|
|
52
|
-
}
|
|
53
|
-
}
|
|
54
|
-
getClient() {
|
|
55
|
-
if (!this.client) {
|
|
56
|
-
throw new Error("MCP Client is not started yet");
|
|
57
|
-
}
|
|
58
|
-
return this.client;
|
|
59
|
-
}
|
|
60
|
-
createClient(opts) {
|
|
61
|
-
// Build args with headless mode
|
|
62
|
-
const args = [
|
|
63
|
-
'@cotestdev/mcp_playwright@latest',
|
|
64
|
-
'--isolated',
|
|
65
|
-
'--image-responses', 'omit',
|
|
66
|
-
'--caps',
|
|
67
|
-
'core,core-tabs,extra'
|
|
68
|
-
];
|
|
69
|
-
if (this.playwrightConfigPath) {
|
|
70
|
-
args.push('--config', this.playwrightConfigPath);
|
|
71
|
-
}
|
|
72
|
-
// Explicitly set headless or headed mode
|
|
73
|
-
// Playwright MCP requires explicit declaration of the mode
|
|
74
|
-
if (opts.headless) {
|
|
75
|
-
args.push('--headless');
|
|
76
|
-
console.log('Browser will run in HEADLESS mode (background)');
|
|
77
|
-
}
|
|
78
|
-
else {
|
|
79
|
-
console.log('Browser will run in HEADED mode (visible window)');
|
|
80
|
-
}
|
|
81
|
-
const mcpConfig = {
|
|
82
|
-
cmd: 'npx',
|
|
83
|
-
args: args,
|
|
84
|
-
env: { ...process.env },
|
|
85
|
-
};
|
|
86
|
-
return new mcp_client_1.MCPClient(mcpConfig);
|
|
87
|
-
}
|
|
88
|
-
prepareTempPlaywrightConfig(language) {
|
|
89
|
-
const tempDir = fs_1.default.mkdtempSync(path_1.default.join(os_1.default.tmpdir(), 'playwright-mcp-'));
|
|
90
|
-
const configPath = path_1.default.join(tempDir, 'mcp.config.json');
|
|
91
|
-
const configContents = `
|
|
92
|
-
{
|
|
93
|
-
"browser": {
|
|
94
|
-
"contextOptions": {
|
|
95
|
-
"locale": "${language}"
|
|
96
|
-
}
|
|
97
|
-
}
|
|
98
|
-
}
|
|
99
|
-
`;
|
|
100
|
-
fs_1.default.writeFileSync(configPath, configContents, 'utf8');
|
|
101
|
-
this.playwrightConfigDir = tempDir;
|
|
102
|
-
this.playwrightConfigPath = configPath;
|
|
103
|
-
console.log('Temporary Playwright config created at', configPath);
|
|
104
|
-
}
|
|
105
|
-
cleanupTempPlaywrightConfig() {
|
|
106
|
-
if (!this.playwrightConfigDir)
|
|
107
|
-
return;
|
|
108
|
-
try {
|
|
109
|
-
fs_1.default.rmSync(this.playwrightConfigDir, { recursive: true, force: true });
|
|
110
|
-
}
|
|
111
|
-
catch (error) {
|
|
112
|
-
console.error('Failed to remove temporary Playwright config directory:', error);
|
|
113
|
-
}
|
|
114
|
-
finally {
|
|
115
|
-
this.playwrightConfigDir = undefined;
|
|
116
|
-
this.playwrightConfigPath = undefined;
|
|
117
|
-
}
|
|
118
|
-
}
|
|
119
|
-
}
|
|
120
|
-
exports.PlaywrightMCPManager = PlaywrightMCPManager;
|
|
121
|
-
//# sourceMappingURL=playwright-mcp-manager.js.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"playwright-mcp-manager.js","sourceRoot":"","sources":["../../../../../core-infra/src/mcp/playwright-mcp-manager.ts"],"names":[],"mappings":"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"}
|
|
@@ -1,13 +0,0 @@
|
|
|
1
|
-
import { ModelConfig } from "./types";
|
|
2
|
-
import { BaseLanguageModel } from "@langchain/core/language_models/base";
|
|
3
|
-
import { DynamicStructuredTool } from '@langchain/core/tools';
|
|
4
|
-
import z from "zod";
|
|
5
|
-
import { MCPManager } from "./mcp/mcp-manager";
|
|
6
|
-
export declare function createModel(config: ModelConfig, bindTools?: boolean, mcpManager?: MCPManager, useDefaultFuncs?: boolean): BaseLanguageModel;
|
|
7
|
-
export declare function bindTools(model: BaseLanguageModel, tools: DynamicStructuredTool[], tooChoice?: unknown): BaseLanguageModel | undefined;
|
|
8
|
-
/**
|
|
9
|
-
* Convert a plain object schema to a Zod schema
|
|
10
|
-
* Handles conversion of MCP tool input schemas to LangChain-compatible Zod types
|
|
11
|
-
*/
|
|
12
|
-
export declare function convertToZodSchema(schema: Record<string, unknown>): z.ZodType;
|
|
13
|
-
//# sourceMappingURL=model.d.ts.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"model.d.ts","sourceRoot":"","sources":["../../../../core-infra/src/model.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,WAAW,EAAE,MAAM,SAAS,CAAC;AACtC,OAAO,EAAE,iBAAiB,EAAE,MAAM,sCAAsC,CAAC;AAIzE,OAAO,EAAE,qBAAqB,EAAE,MAAM,uBAAuB,CAAC;AAE9D,OAAO,CAAC,MAAM,KAAK,CAAC;AACpB,OAAO,EAAE,UAAU,EAAE,MAAM,mBAAmB,CAAC;AAE/C,wBAAgB,WAAW,CACvB,MAAM,EAAE,WAAW,EACnB,SAAS,GAAE,OAAe,EAC1B,UAAU,CAAC,EAAE,UAAU,EACvB,eAAe,GAAE,OAAe,GACjC,iBAAiB,CAgDnB;AA2ED,wBAAgB,SAAS,CAAC,KAAK,EAAE,iBAAiB,EAAE,KAAK,EAAE,qBAAqB,EAAE,EAAE,SAAS,CAAC,EAAE,OAAO,GAAG,iBAAiB,GAAG,SAAS,CAUtI;AAED;;;GAGG;AACH,wBAAgB,kBAAkB,CAC9B,MAAM,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,GAChC,CAAC,CAAC,OAAO,CA2DX"}
|
|
@@ -1,191 +0,0 @@
|
|
|
1
|
-
"use strict";
|
|
2
|
-
var __importDefault = (this && this.__importDefault) || function (mod) {
|
|
3
|
-
return (mod && mod.__esModule) ? mod : { "default": mod };
|
|
4
|
-
};
|
|
5
|
-
Object.defineProperty(exports, "__esModule", { value: true });
|
|
6
|
-
exports.createModel = createModel;
|
|
7
|
-
exports.bindTools = bindTools;
|
|
8
|
-
exports.convertToZodSchema = convertToZodSchema;
|
|
9
|
-
const openai_1 = require("@langchain/openai");
|
|
10
|
-
const anthropic_1 = require("@langchain/anthropic");
|
|
11
|
-
const mistralai_1 = require("@langchain/mistralai");
|
|
12
|
-
const tools_1 = require("@langchain/core/tools");
|
|
13
|
-
const zod_1 = __importDefault(require("zod"));
|
|
14
|
-
function createModel(config, bindTools = false, mcpManager, useDefaultFuncs = false) {
|
|
15
|
-
let model;
|
|
16
|
-
if (config.provider === 'openai' || config.provider === 'qwen' || config.provider === 'deepseek') {
|
|
17
|
-
const openaiConfig = {
|
|
18
|
-
apiKey: config.apiKey,
|
|
19
|
-
model: config.modelName || 'gpt-4-turbo',
|
|
20
|
-
...config,
|
|
21
|
-
};
|
|
22
|
-
if (config.baseURL) {
|
|
23
|
-
openaiConfig.configuration = {
|
|
24
|
-
baseURL: config.baseURL,
|
|
25
|
-
};
|
|
26
|
-
}
|
|
27
|
-
model = new openai_1.ChatOpenAI(openaiConfig);
|
|
28
|
-
}
|
|
29
|
-
else if (config.provider === 'anthropic') {
|
|
30
|
-
const anthropicConfig = {
|
|
31
|
-
apiKey: config.apiKey,
|
|
32
|
-
model: config.modelName || 'claude-3-sonnet-20240229',
|
|
33
|
-
anthropicApiUrl: config.baseURL,
|
|
34
|
-
clientOptions: {
|
|
35
|
-
baseURL: config.baseURL,
|
|
36
|
-
apiKey: config.apiKey,
|
|
37
|
-
},
|
|
38
|
-
...config,
|
|
39
|
-
};
|
|
40
|
-
model = new anthropic_1.ChatAnthropic(anthropicConfig);
|
|
41
|
-
}
|
|
42
|
-
else if (config.provider === 'mistral') {
|
|
43
|
-
// Mistral uses ChatMistralAI package
|
|
44
|
-
const mistralConfig = {
|
|
45
|
-
apiKey: config.apiKey,
|
|
46
|
-
model: config.modelName || 'mistral-large-latest',
|
|
47
|
-
...config,
|
|
48
|
-
};
|
|
49
|
-
model = new mistralai_1.ChatMistralAI(mistralConfig);
|
|
50
|
-
}
|
|
51
|
-
else {
|
|
52
|
-
throw new Error(`Unknown model provider: ${config.provider}`);
|
|
53
|
-
}
|
|
54
|
-
if (bindTools && mcpManager) {
|
|
55
|
-
model = bindPlaywrightTools(model, mcpManager, useDefaultFuncs);
|
|
56
|
-
}
|
|
57
|
-
return model;
|
|
58
|
-
}
|
|
59
|
-
/**
|
|
60
|
-
* Bind Playwright MCP tools to the model
|
|
61
|
-
* Creates LangChain tools from MCP tool definitions
|
|
62
|
-
*/
|
|
63
|
-
function bindPlaywrightTools(model, mcpManager, useDefaultFuncs) {
|
|
64
|
-
const defaultTools = mcpManager.getDefaultTools();
|
|
65
|
-
// Convert MCP tools to LangChain tools (ensure each tool has its own JSON-schema-as-Zod schema)
|
|
66
|
-
const langchainTools = defaultTools.map(mcpTool => {
|
|
67
|
-
const schema = convertToZodSchema(mcpTool.inputSchema || {});
|
|
68
|
-
return new tools_1.DynamicStructuredTool({
|
|
69
|
-
name: mcpTool.name,
|
|
70
|
-
description: mcpTool.description,
|
|
71
|
-
schema,
|
|
72
|
-
func: async (input, runner, config) => {
|
|
73
|
-
const abortSignal = config?.signal ?? new AbortController().signal;
|
|
74
|
-
for (const manager of mcpManager.getManagers()) {
|
|
75
|
-
const tool = manager.getClient().getToolByName(mcpTool.name);
|
|
76
|
-
if (tool) {
|
|
77
|
-
return manager.getClient().doCallTool(mcpTool.name, input, abortSignal);
|
|
78
|
-
}
|
|
79
|
-
}
|
|
80
|
-
},
|
|
81
|
-
});
|
|
82
|
-
});
|
|
83
|
-
if (useDefaultFuncs) {
|
|
84
|
-
const finishTool = {
|
|
85
|
-
name: "finish_test",
|
|
86
|
-
description: "Call this tool ONLY when the test goal has been fully achieved or failed to achieve. After calling this, no more tools should be called.",
|
|
87
|
-
schema: zod_1.default.object({
|
|
88
|
-
final_summary: zod_1.default.optional(zod_1.default.string()).describe("A brief summary confirming the test goal was achieved."),
|
|
89
|
-
isSuccess: zod_1.default.boolean().describe("Whether the test goal was successfully achieved."),
|
|
90
|
-
}),
|
|
91
|
-
func: async () => { },
|
|
92
|
-
};
|
|
93
|
-
const getToolGroupsTool = {
|
|
94
|
-
name: "get_tools",
|
|
95
|
-
description: "Get available tools in a group.",
|
|
96
|
-
schema: zod_1.default.object({
|
|
97
|
-
group_name: zod_1.default.string().describe("The name of the tool group."),
|
|
98
|
-
}),
|
|
99
|
-
func: async () => {
|
|
100
|
-
},
|
|
101
|
-
};
|
|
102
|
-
const callToolTool = {
|
|
103
|
-
name: "call_tool",
|
|
104
|
-
description: "Call a tool in a group by name.",
|
|
105
|
-
schema: zod_1.default.object({
|
|
106
|
-
group_name: zod_1.default.string().describe("Tool group name."),
|
|
107
|
-
tool_name: zod_1.default.string().describe("Tool name."),
|
|
108
|
-
args: zod_1.default.object().describe("Tool parameters."),
|
|
109
|
-
}),
|
|
110
|
-
func: async () => {
|
|
111
|
-
},
|
|
112
|
-
};
|
|
113
|
-
const reuseTestTool = {
|
|
114
|
-
name: "reuse_test",
|
|
115
|
-
description: "Reuse a test from the provided reusable tests.",
|
|
116
|
-
schema: zod_1.default.object({
|
|
117
|
-
id: zod_1.default.string().describe("ID of the reusable test."),
|
|
118
|
-
toolText: zod_1.default.string().describe("Short and human readable description of the action."),
|
|
119
|
-
inParams: zod_1.default.record(zod_1.default.string(), zod_1.default.any()).describe("Test Parameters for the reusable test"),
|
|
120
|
-
outParams: zod_1.default.record(zod_1.default.string(), zod_1.default.any()).describe("Out Parameters for the reusable test"),
|
|
121
|
-
}),
|
|
122
|
-
func: async () => {
|
|
123
|
-
},
|
|
124
|
-
};
|
|
125
|
-
langchainTools.push(new tools_1.DynamicStructuredTool(finishTool), new tools_1.DynamicStructuredTool(callToolTool), new tools_1.DynamicStructuredTool(getToolGroupsTool), new tools_1.DynamicStructuredTool(reuseTestTool));
|
|
126
|
-
}
|
|
127
|
-
return bindTools(model, langchainTools) || model;
|
|
128
|
-
}
|
|
129
|
-
function bindTools(model, tools, tooChoice) {
|
|
130
|
-
const modelAny = model;
|
|
131
|
-
if (modelAny && typeof modelAny.bindTools === 'function') {
|
|
132
|
-
return modelAny.bindTools(tools, {
|
|
133
|
-
tool_choice: tooChoice || 'required',
|
|
134
|
-
});
|
|
135
|
-
}
|
|
136
|
-
console.error("Model does not support tool binding");
|
|
137
|
-
return undefined;
|
|
138
|
-
}
|
|
139
|
-
/**
|
|
140
|
-
* Convert a plain object schema to a Zod schema
|
|
141
|
-
* Handles conversion of MCP tool input schemas to LangChain-compatible Zod types
|
|
142
|
-
*/
|
|
143
|
-
function convertToZodSchema(schema) {
|
|
144
|
-
// If schema is already a Zod type, return it
|
|
145
|
-
if (schema instanceof zod_1.default.ZodType) {
|
|
146
|
-
return schema;
|
|
147
|
-
}
|
|
148
|
-
// Handle JSON Schema format (common from MCP tools)
|
|
149
|
-
if (schema.type === 'object' && schema.properties) {
|
|
150
|
-
const properties = {};
|
|
151
|
-
const props = schema.properties;
|
|
152
|
-
const required = schema.required || [];
|
|
153
|
-
for (const [key, value] of Object.entries(props)) {
|
|
154
|
-
const propSchema = value;
|
|
155
|
-
const zodType = convertPropertyToZod(propSchema);
|
|
156
|
-
if (required.includes(key)) {
|
|
157
|
-
properties[key] = zodType;
|
|
158
|
-
}
|
|
159
|
-
else {
|
|
160
|
-
properties[key] = zodType.optional();
|
|
161
|
-
}
|
|
162
|
-
}
|
|
163
|
-
return zod_1.default.object(properties);
|
|
164
|
-
}
|
|
165
|
-
/**
|
|
166
|
-
* Convert a single property schema to Zod type
|
|
167
|
-
*/
|
|
168
|
-
function convertPropertyToZod(schema) {
|
|
169
|
-
const type = schema.type;
|
|
170
|
-
switch (type) {
|
|
171
|
-
case 'string':
|
|
172
|
-
return zod_1.default.string().describe(schema.description || '');
|
|
173
|
-
case 'number':
|
|
174
|
-
case 'integer':
|
|
175
|
-
return zod_1.default.number().describe(schema.description || '');
|
|
176
|
-
case 'boolean':
|
|
177
|
-
return zod_1.default.boolean().describe(schema.description || '');
|
|
178
|
-
case 'array':
|
|
179
|
-
const items = schema.items;
|
|
180
|
-
const itemType = items ? convertPropertyToZod(items) : zod_1.default.any();
|
|
181
|
-
return zod_1.default.array(itemType).describe(schema.description || '');
|
|
182
|
-
case 'object':
|
|
183
|
-
return zod_1.default.object({}).catchall(zod_1.default.any()).describe(schema.description || '');
|
|
184
|
-
default:
|
|
185
|
-
return zod_1.default.any();
|
|
186
|
-
}
|
|
187
|
-
}
|
|
188
|
-
// Fallback: accept any object with catchall
|
|
189
|
-
return zod_1.default.object({}).catchall(zod_1.default.any());
|
|
190
|
-
}
|
|
191
|
-
//# sourceMappingURL=model.js.map
|