wopee-mcp 1.0.1
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/INTEGRATION.md +441 -0
- package/LICENSE +200 -0
- package/QUICK_START.md +50 -0
- package/README.md +658 -0
- package/dist/config.d.ts +48 -0
- package/dist/config.js +165 -0
- package/dist/config.js.map +1 -0
- package/dist/graphql/client.d.ts +34 -0
- package/dist/graphql/client.js +75 -0
- package/dist/graphql/client.js.map +1 -0
- package/dist/index.d.ts +2 -0
- package/dist/index.js +672 -0
- package/dist/index.js.map +1 -0
- package/dist/tools/wopee_dispatch_agent.d.ts +8 -0
- package/dist/tools/wopee_dispatch_agent.js +41 -0
- package/dist/tools/wopee_dispatch_agent.js.map +1 -0
- package/dist/tools/wopee_dispatch_analysis.d.ts +8 -0
- package/dist/tools/wopee_dispatch_analysis.js +50 -0
- package/dist/tools/wopee_dispatch_analysis.js.map +1 -0
- package/dist/tools/wopee_fetch_analysis_suites.d.ts +8 -0
- package/dist/tools/wopee_fetch_analysis_suites.js +81 -0
- package/dist/tools/wopee_fetch_analysis_suites.js.map +1 -0
- package/dist/tools/wopee_generate_app_context.d.ts +8 -0
- package/dist/tools/wopee_generate_app_context.js +62 -0
- package/dist/tools/wopee_generate_app_context.js.map +1 -0
- package/dist/tools/wopee_generate_general_user_stories.d.ts +8 -0
- package/dist/tools/wopee_generate_general_user_stories.js +62 -0
- package/dist/tools/wopee_generate_general_user_stories.js.map +1 -0
- package/dist/tools/wopee_generate_test_cases.d.ts +8 -0
- package/dist/tools/wopee_generate_test_cases.js +74 -0
- package/dist/tools/wopee_generate_test_cases.js.map +1 -0
- package/dist/tools/wopee_generate_user_stories.d.ts +8 -0
- package/dist/tools/wopee_generate_user_stories.js +74 -0
- package/dist/tools/wopee_generate_user_stories.js.map +1 -0
- package/dist/tools/wopee_get_app_context.d.ts +8 -0
- package/dist/tools/wopee_get_app_context.js +41 -0
- package/dist/tools/wopee_get_app_context.js.map +1 -0
- package/dist/tools/wopee_get_test_cases.d.ts +9 -0
- package/dist/tools/wopee_get_test_cases.js +43 -0
- package/dist/tools/wopee_get_test_cases.js.map +1 -0
- package/dist/tools/wopee_get_user_stories.d.ts +8 -0
- package/dist/tools/wopee_get_user_stories.js +41 -0
- package/dist/tools/wopee_get_user_stories.js.map +1 -0
- package/dist/types/index.d.ts +425 -0
- package/dist/types/index.js +143 -0
- package/dist/types/index.js.map +1 -0
- package/env.example +7 -0
- package/package.json +117 -0
package/dist/config.js
ADDED
|
@@ -0,0 +1,165 @@
|
|
|
1
|
+
import { config } from 'dotenv';
|
|
2
|
+
import { existsSync } from 'fs';
|
|
3
|
+
import { join } from 'path';
|
|
4
|
+
import { WopeeConfigSchema } from './types/index.js';
|
|
5
|
+
// Get project root directory (where package.json is located)
|
|
6
|
+
const getProjectRoot = () => {
|
|
7
|
+
const cwd = process.cwd();
|
|
8
|
+
// First, try to find the project root relative to the current working directory
|
|
9
|
+
let currentDir = cwd;
|
|
10
|
+
while (currentDir !== '/') {
|
|
11
|
+
if (existsSync(join(currentDir, 'package.json'))) {
|
|
12
|
+
return currentDir;
|
|
13
|
+
}
|
|
14
|
+
currentDir = join(currentDir, '..');
|
|
15
|
+
}
|
|
16
|
+
// If that fails, try to find it relative to the script location
|
|
17
|
+
// This works when the server is run from anywhere
|
|
18
|
+
try {
|
|
19
|
+
// Use eval to avoid TypeScript compilation issues with import.meta in Jest
|
|
20
|
+
const importMetaUrl = eval('import.meta.url');
|
|
21
|
+
if (importMetaUrl) {
|
|
22
|
+
const scriptDir = new URL(importMetaUrl).pathname;
|
|
23
|
+
if (scriptDir.includes('/dist/')) {
|
|
24
|
+
const projectRoot = scriptDir.split('/dist/')[0];
|
|
25
|
+
if (projectRoot && existsSync(join(projectRoot, 'package.json'))) {
|
|
26
|
+
return projectRoot;
|
|
27
|
+
}
|
|
28
|
+
}
|
|
29
|
+
}
|
|
30
|
+
}
|
|
31
|
+
catch (error) {
|
|
32
|
+
// Ignore errors and continue with fallback
|
|
33
|
+
}
|
|
34
|
+
// Additional fallback: try to find wopee-mcp project in common locations
|
|
35
|
+
const possiblePaths = [
|
|
36
|
+
'/Users/vem/Projects/wopee-mcp',
|
|
37
|
+
join(process.env.HOME || '', 'Projects/wopee-mcp'),
|
|
38
|
+
join(process.env.HOME || '', 'projects/wopee-mcp'),
|
|
39
|
+
];
|
|
40
|
+
for (const path of possiblePaths) {
|
|
41
|
+
if (existsSync(join(path, 'package.json'))) {
|
|
42
|
+
return path;
|
|
43
|
+
}
|
|
44
|
+
}
|
|
45
|
+
// Final fallback to current working directory
|
|
46
|
+
return cwd;
|
|
47
|
+
};
|
|
48
|
+
/**
|
|
49
|
+
* Configuration manager for Wopee MCP server
|
|
50
|
+
*/
|
|
51
|
+
export class ConfigManager {
|
|
52
|
+
static instance;
|
|
53
|
+
config;
|
|
54
|
+
constructor() {
|
|
55
|
+
this.config = this.loadConfig();
|
|
56
|
+
}
|
|
57
|
+
/**
|
|
58
|
+
* Get singleton instance of ConfigManager
|
|
59
|
+
*/
|
|
60
|
+
static getInstance() {
|
|
61
|
+
if (!ConfigManager.instance) {
|
|
62
|
+
ConfigManager.instance = new ConfigManager();
|
|
63
|
+
}
|
|
64
|
+
return ConfigManager.instance;
|
|
65
|
+
}
|
|
66
|
+
/**
|
|
67
|
+
* Load and validate configuration from environment variables
|
|
68
|
+
*/
|
|
69
|
+
loadConfig() {
|
|
70
|
+
// Try to load .env files from multiple locations
|
|
71
|
+
this.loadEnvFiles();
|
|
72
|
+
const rawConfig = {
|
|
73
|
+
apiKey: process.env.WOPEE_API_KEY,
|
|
74
|
+
apiUrl: process.env.WOPEE_API_URL || 'https://api.wopee.io/',
|
|
75
|
+
projectUuid: process.env.WOPEE_PROJECT_UUID,
|
|
76
|
+
};
|
|
77
|
+
try {
|
|
78
|
+
return WopeeConfigSchema.parse(rawConfig);
|
|
79
|
+
}
|
|
80
|
+
catch (error) {
|
|
81
|
+
const errorMessage = this.getConfigErrorMessage(rawConfig);
|
|
82
|
+
throw new Error(`Configuration validation failed: ${errorMessage}`);
|
|
83
|
+
}
|
|
84
|
+
}
|
|
85
|
+
/**
|
|
86
|
+
* Load .env file from project root directory
|
|
87
|
+
*/
|
|
88
|
+
loadEnvFiles() {
|
|
89
|
+
const projectRoot = getProjectRoot();
|
|
90
|
+
const envPath = join(projectRoot, '.env');
|
|
91
|
+
if (existsSync(envPath)) {
|
|
92
|
+
try {
|
|
93
|
+
config({ path: envPath });
|
|
94
|
+
console.log(`[Wopee MCP] Loaded environment from: ${envPath}`);
|
|
95
|
+
}
|
|
96
|
+
catch (error) {
|
|
97
|
+
console.error(`[Wopee MCP] Failed to load .env from ${envPath}:`, error);
|
|
98
|
+
}
|
|
99
|
+
}
|
|
100
|
+
else {
|
|
101
|
+
console.error(`[Wopee MCP] No .env file found at: ${envPath}`);
|
|
102
|
+
console.error('[Wopee MCP] Please create a .env file in the project root with your WOPEE_API_KEY and WOPEE_PROJECT_UUID');
|
|
103
|
+
}
|
|
104
|
+
}
|
|
105
|
+
/**
|
|
106
|
+
* Get detailed error message for configuration issues
|
|
107
|
+
*/
|
|
108
|
+
getConfigErrorMessage(rawConfig) {
|
|
109
|
+
const errors = [];
|
|
110
|
+
if (!rawConfig.apiKey) {
|
|
111
|
+
errors.push('WOPEE_API_KEY is required. Please set it in your .env file or environment variables.');
|
|
112
|
+
}
|
|
113
|
+
if (!rawConfig.projectUuid) {
|
|
114
|
+
errors.push('WOPEE_PROJECT_UUID is required. Please set it in your .env file or environment variables.');
|
|
115
|
+
}
|
|
116
|
+
if (rawConfig.apiUrl && !rawConfig.apiUrl.startsWith('http')) {
|
|
117
|
+
errors.push('WOPEE_API_URL must be a valid URL starting with http:// or https://');
|
|
118
|
+
}
|
|
119
|
+
if (errors.length === 0) {
|
|
120
|
+
return 'Unknown configuration error';
|
|
121
|
+
}
|
|
122
|
+
return errors.join(' ');
|
|
123
|
+
}
|
|
124
|
+
/**
|
|
125
|
+
* Get the current configuration
|
|
126
|
+
*/
|
|
127
|
+
getConfig() {
|
|
128
|
+
return { ...this.config };
|
|
129
|
+
}
|
|
130
|
+
/**
|
|
131
|
+
* Get API key
|
|
132
|
+
*/
|
|
133
|
+
getApiKey() {
|
|
134
|
+
return this.config.apiKey;
|
|
135
|
+
}
|
|
136
|
+
/**
|
|
137
|
+
* Get API URL
|
|
138
|
+
*/
|
|
139
|
+
getApiUrl() {
|
|
140
|
+
return this.config.apiUrl;
|
|
141
|
+
}
|
|
142
|
+
/**
|
|
143
|
+
* Get Project UUID
|
|
144
|
+
*/
|
|
145
|
+
getProjectUuid() {
|
|
146
|
+
return this.config.projectUuid;
|
|
147
|
+
}
|
|
148
|
+
/**
|
|
149
|
+
* Reload configuration (useful for testing)
|
|
150
|
+
*/
|
|
151
|
+
reloadConfig() {
|
|
152
|
+
this.config = this.loadConfig();
|
|
153
|
+
}
|
|
154
|
+
}
|
|
155
|
+
// Export singleton instance (lazy initialization)
|
|
156
|
+
let _configManager = null;
|
|
157
|
+
export const configManager = {
|
|
158
|
+
getInstance() {
|
|
159
|
+
if (!_configManager) {
|
|
160
|
+
_configManager = ConfigManager.getInstance();
|
|
161
|
+
}
|
|
162
|
+
return _configManager;
|
|
163
|
+
}
|
|
164
|
+
};
|
|
165
|
+
//# sourceMappingURL=config.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"config.js","sourceRoot":"","sources":["../src/config.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,34 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* GraphQL client for Wopee API
|
|
3
|
+
*/
|
|
4
|
+
export declare class WopeeGraphQLClient {
|
|
5
|
+
private client;
|
|
6
|
+
private apiKey;
|
|
7
|
+
private apiUrl;
|
|
8
|
+
constructor();
|
|
9
|
+
/**
|
|
10
|
+
* Execute a GraphQL query
|
|
11
|
+
* @param query - GraphQL query string
|
|
12
|
+
* @param variables - Query variables
|
|
13
|
+
* @returns Promise with the response data
|
|
14
|
+
*/
|
|
15
|
+
request<T = any>(query: string, variables?: Record<string, any>): Promise<T>;
|
|
16
|
+
/**
|
|
17
|
+
* Execute a GraphQL mutation
|
|
18
|
+
* @param mutation - GraphQL mutation string
|
|
19
|
+
* @param variables - Mutation variables
|
|
20
|
+
* @returns Promise with the response data
|
|
21
|
+
*/
|
|
22
|
+
mutate<T = any>(mutation: string, variables?: Record<string, any>): Promise<T>;
|
|
23
|
+
/**
|
|
24
|
+
* Get the current API URL
|
|
25
|
+
*/
|
|
26
|
+
getApiUrl(): string;
|
|
27
|
+
/**
|
|
28
|
+
* Check if the client is properly configured
|
|
29
|
+
*/
|
|
30
|
+
isConfigured(): boolean;
|
|
31
|
+
}
|
|
32
|
+
export declare const graphqlClient: {
|
|
33
|
+
getInstance(): WopeeGraphQLClient;
|
|
34
|
+
};
|
|
@@ -0,0 +1,75 @@
|
|
|
1
|
+
import { GraphQLClient } from 'graphql-request';
|
|
2
|
+
import { configManager } from '../config.js';
|
|
3
|
+
/**
|
|
4
|
+
* GraphQL client for Wopee API
|
|
5
|
+
*/
|
|
6
|
+
export class WopeeGraphQLClient {
|
|
7
|
+
client;
|
|
8
|
+
apiKey;
|
|
9
|
+
apiUrl;
|
|
10
|
+
constructor() {
|
|
11
|
+
const config = configManager.getInstance().getConfig();
|
|
12
|
+
this.apiKey = config.apiKey;
|
|
13
|
+
this.apiUrl = config.apiUrl;
|
|
14
|
+
this.client = new GraphQLClient(this.apiUrl, {
|
|
15
|
+
headers: {
|
|
16
|
+
'Content-Type': 'application/json',
|
|
17
|
+
'api_key': this.apiKey,
|
|
18
|
+
},
|
|
19
|
+
});
|
|
20
|
+
}
|
|
21
|
+
/**
|
|
22
|
+
* Execute a GraphQL query
|
|
23
|
+
* @param query - GraphQL query string
|
|
24
|
+
* @param variables - Query variables
|
|
25
|
+
* @returns Promise with the response data
|
|
26
|
+
*/
|
|
27
|
+
async request(query, variables) {
|
|
28
|
+
try {
|
|
29
|
+
const response = await this.client.request(query, variables);
|
|
30
|
+
if (response.errors && response.errors.length > 0) {
|
|
31
|
+
const errorMessages = response.errors.map(error => error.message).join(', ');
|
|
32
|
+
throw new Error(`GraphQL errors: ${errorMessages}`);
|
|
33
|
+
}
|
|
34
|
+
return response.data || response;
|
|
35
|
+
}
|
|
36
|
+
catch (error) {
|
|
37
|
+
if (error instanceof Error) {
|
|
38
|
+
throw new Error(`GraphQL request failed: ${error.message}`);
|
|
39
|
+
}
|
|
40
|
+
throw new Error('Unknown GraphQL request error');
|
|
41
|
+
}
|
|
42
|
+
}
|
|
43
|
+
/**
|
|
44
|
+
* Execute a GraphQL mutation
|
|
45
|
+
* @param mutation - GraphQL mutation string
|
|
46
|
+
* @param variables - Mutation variables
|
|
47
|
+
* @returns Promise with the response data
|
|
48
|
+
*/
|
|
49
|
+
async mutate(mutation, variables) {
|
|
50
|
+
return this.request(mutation, variables);
|
|
51
|
+
}
|
|
52
|
+
/**
|
|
53
|
+
* Get the current API URL
|
|
54
|
+
*/
|
|
55
|
+
getApiUrl() {
|
|
56
|
+
return this.apiUrl;
|
|
57
|
+
}
|
|
58
|
+
/**
|
|
59
|
+
* Check if the client is properly configured
|
|
60
|
+
*/
|
|
61
|
+
isConfigured() {
|
|
62
|
+
return !!(this.apiKey && this.apiUrl);
|
|
63
|
+
}
|
|
64
|
+
}
|
|
65
|
+
// Export singleton instance (lazy initialization)
|
|
66
|
+
let _graphqlClient = null;
|
|
67
|
+
export const graphqlClient = {
|
|
68
|
+
getInstance() {
|
|
69
|
+
if (!_graphqlClient) {
|
|
70
|
+
_graphqlClient = new WopeeGraphQLClient();
|
|
71
|
+
}
|
|
72
|
+
return _graphqlClient;
|
|
73
|
+
}
|
|
74
|
+
};
|
|
75
|
+
//# sourceMappingURL=client.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"client.js","sourceRoot":"","sources":["../../src/graphql/client.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,aAAa,EAAE,MAAM,iBAAiB,CAAC;AAChD,OAAO,EAAE,aAAa,EAAE,MAAM,WAAW,CAAC;AAG1C;;GAEG;AACH,MAAM,OAAO,kBAAkB;IACrB,MAAM,CAAgB;IACtB,MAAM,CAAS;IACf,MAAM,CAAS;IAEvB;QACE,MAAM,MAAM,GAAG,aAAa,CAAC,WAAW,EAAE,CAAC,SAAS,EAAE,CAAC;QACvD,IAAI,CAAC,MAAM,GAAG,MAAM,CAAC,MAAM,CAAC;QAC5B,IAAI,CAAC,MAAM,GAAG,MAAM,CAAC,MAAM,CAAC;QAE5B,IAAI,CAAC,MAAM,GAAG,IAAI,aAAa,CAAC,IAAI,CAAC,MAAM,EAAE;YAC3C,OAAO,EAAE;gBACP,cAAc,EAAE,kBAAkB;gBAClC,SAAS,EAAE,IAAI,CAAC,MAAM;aACvB;SACF,CAAC,CAAC;IACL,CAAC;IAED;;;;;OAKG;IACH,KAAK,CAAC,OAAO,CAAU,KAAa,EAAE,SAA+B;QACnE,IAAI,CAAC;YACH,MAAM,QAAQ,GAAG,MAAM,IAAI,CAAC,MAAM,CAAC,OAAO,CAAqB,KAAK,EAAE,SAAS,CAAC,CAAC;YAEjF,IAAI,QAAQ,CAAC,MAAM,IAAI,QAAQ,CAAC,MAAM,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;gBAClD,MAAM,aAAa,GAAG,QAAQ,CAAC,MAAM,CAAC,GAAG,CAAC,KAAK,CAAC,EAAE,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;gBAC7E,MAAM,IAAI,KAAK,CAAC,mBAAmB,aAAa,EAAE,CAAC,CAAC;YACtD,CAAC;YAED,OAAO,QAAQ,CAAC,IAAI,IAAI,QAAa,CAAC;QACxC,CAAC;QAAC,OAAO,KAAK,EAAE,CAAC;YACf,IAAI,KAAK,YAAY,KAAK,EAAE,CAAC;gBAC3B,MAAM,IAAI,KAAK,CAAC,2BAA2B,KAAK,CAAC,OAAO,EAAE,CAAC,CAAC;YAC9D,CAAC;YACD,MAAM,IAAI,KAAK,CAAC,+BAA+B,CAAC,CAAC;QACnD,CAAC;IACH,CAAC;IAED;;;;;OAKG;IACH,KAAK,CAAC,MAAM,CAAU,QAAgB,EAAE,SAA+B;QACrE,OAAO,IAAI,CAAC,OAAO,CAAI,QAAQ,EAAE,SAAS,CAAC,CAAC;IAC9C,CAAC;IAED;;OAEG;IACH,SAAS;QACP,OAAO,IAAI,CAAC,MAAM,CAAC;IACrB,CAAC;IAED;;OAEG;IACH,YAAY;QACV,OAAO,CAAC,CAAC,CAAC,IAAI,CAAC,MAAM,IAAI,IAAI,CAAC,MAAM,CAAC,CAAC;IACxC,CAAC;CACF;AAED,kDAAkD;AAClD,IAAI,cAAc,GAA8B,IAAI,CAAC;AAErD,MAAM,CAAC,MAAM,aAAa,GAAG;IAC3B,WAAW;QACT,IAAI,CAAC,cAAc,EAAE,CAAC;YACpB,cAAc,GAAG,IAAI,kBAAkB,EAAE,CAAC;QAC5C,CAAC;QACD,OAAO,cAAc,CAAC;IACxB,CAAC;CACF,CAAC"}
|
package/dist/index.d.ts
ADDED