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.
Files changed (48) hide show
  1. package/INTEGRATION.md +441 -0
  2. package/LICENSE +200 -0
  3. package/QUICK_START.md +50 -0
  4. package/README.md +658 -0
  5. package/dist/config.d.ts +48 -0
  6. package/dist/config.js +165 -0
  7. package/dist/config.js.map +1 -0
  8. package/dist/graphql/client.d.ts +34 -0
  9. package/dist/graphql/client.js +75 -0
  10. package/dist/graphql/client.js.map +1 -0
  11. package/dist/index.d.ts +2 -0
  12. package/dist/index.js +672 -0
  13. package/dist/index.js.map +1 -0
  14. package/dist/tools/wopee_dispatch_agent.d.ts +8 -0
  15. package/dist/tools/wopee_dispatch_agent.js +41 -0
  16. package/dist/tools/wopee_dispatch_agent.js.map +1 -0
  17. package/dist/tools/wopee_dispatch_analysis.d.ts +8 -0
  18. package/dist/tools/wopee_dispatch_analysis.js +50 -0
  19. package/dist/tools/wopee_dispatch_analysis.js.map +1 -0
  20. package/dist/tools/wopee_fetch_analysis_suites.d.ts +8 -0
  21. package/dist/tools/wopee_fetch_analysis_suites.js +81 -0
  22. package/dist/tools/wopee_fetch_analysis_suites.js.map +1 -0
  23. package/dist/tools/wopee_generate_app_context.d.ts +8 -0
  24. package/dist/tools/wopee_generate_app_context.js +62 -0
  25. package/dist/tools/wopee_generate_app_context.js.map +1 -0
  26. package/dist/tools/wopee_generate_general_user_stories.d.ts +8 -0
  27. package/dist/tools/wopee_generate_general_user_stories.js +62 -0
  28. package/dist/tools/wopee_generate_general_user_stories.js.map +1 -0
  29. package/dist/tools/wopee_generate_test_cases.d.ts +8 -0
  30. package/dist/tools/wopee_generate_test_cases.js +74 -0
  31. package/dist/tools/wopee_generate_test_cases.js.map +1 -0
  32. package/dist/tools/wopee_generate_user_stories.d.ts +8 -0
  33. package/dist/tools/wopee_generate_user_stories.js +74 -0
  34. package/dist/tools/wopee_generate_user_stories.js.map +1 -0
  35. package/dist/tools/wopee_get_app_context.d.ts +8 -0
  36. package/dist/tools/wopee_get_app_context.js +41 -0
  37. package/dist/tools/wopee_get_app_context.js.map +1 -0
  38. package/dist/tools/wopee_get_test_cases.d.ts +9 -0
  39. package/dist/tools/wopee_get_test_cases.js +43 -0
  40. package/dist/tools/wopee_get_test_cases.js.map +1 -0
  41. package/dist/tools/wopee_get_user_stories.d.ts +8 -0
  42. package/dist/tools/wopee_get_user_stories.js +41 -0
  43. package/dist/tools/wopee_get_user_stories.js.map +1 -0
  44. package/dist/types/index.d.ts +425 -0
  45. package/dist/types/index.js +143 -0
  46. package/dist/types/index.js.map +1 -0
  47. package/env.example +7 -0
  48. 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"}
@@ -0,0 +1,2 @@
1
+ #!/usr/bin/env node
2
+ export {};