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
@@ -0,0 +1,43 @@
1
+ import { graphqlClient } from '../graphql/client.js';
2
+ import { GetTestCasesSchema, Bucket } from '../types/index.js';
3
+ /**
4
+ * GraphQL query for fetching test cases
5
+ */
6
+ const FETCH_FILE_QUERY = `
7
+ query FetchFile($projectUuid: ID!, $suiteUuid: ID!, $bucket: String!) {
8
+ fetchFile(projectUuid: $projectUuid, suiteUuid: $suiteUuid, bucket: $bucket)
9
+ }
10
+ `;
11
+ /**
12
+ * Get existing test cases for the given project and suite.
13
+ * Note: Currently uses the same bucket as user stories, may be changed later.
14
+ *
15
+ * @param params - Parameters containing project UUID and suite UUID.
16
+ * @returns Promise with test cases data.
17
+ */
18
+ export async function wopee_get_test_cases(params) {
19
+ try {
20
+ // Validate input parameters
21
+ const validatedParams = GetTestCasesSchema.parse(params);
22
+ // Execute GraphQL query to fetch test cases
23
+ // Note: Using USER_STORIES bucket as specified, may be changed later
24
+ const response = await graphqlClient.getInstance().request(FETCH_FILE_QUERY, {
25
+ projectUuid: validatedParams.projectUuid,
26
+ suiteUuid: validatedParams.suiteUuid,
27
+ bucket: Bucket.USER_STORIES, // Same as user stories as specified
28
+ });
29
+ return {
30
+ success: true,
31
+ data: response.fetchFile,
32
+ message: `Test cases retrieved successfully for project: ${validatedParams.projectUuid}`,
33
+ };
34
+ }
35
+ catch (error) {
36
+ console.error('[wopee_get_test_cases] Error:', error);
37
+ return {
38
+ success: false,
39
+ error: `Failed to get test cases: ${error.message || 'Unknown error'}`,
40
+ };
41
+ }
42
+ }
43
+ //# sourceMappingURL=wopee_get_test_cases.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"wopee_get_test_cases.js","sourceRoot":"","sources":["../../src/tools/wopee_get_test_cases.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,aAAa,EAAE,MAAM,mBAAmB,CAAC;AAClD,OAAO,EAAsB,kBAAkB,EAAc,MAAM,EAAE,MAAM,gBAAgB,CAAC;AAE5F;;GAEG;AACH,MAAM,gBAAgB,GAAG;;;;CAIxB,CAAC;AAEF;;;;;;GAMG;AACH,MAAM,CAAC,KAAK,UAAU,oBAAoB,CAAC,MAA0B;IACnE,IAAI,CAAC;QACH,4BAA4B;QAC5B,MAAM,eAAe,GAAG,kBAAkB,CAAC,KAAK,CAAC,MAAM,CAAC,CAAC;QAEzD,4CAA4C;QAC5C,qEAAqE;QACrE,MAAM,QAAQ,GAAG,MAAM,aAAa,CAAC,WAAW,EAAE,CAAC,OAAO,CACxD,gBAAgB,EAChB;YACE,WAAW,EAAE,eAAe,CAAC,WAAW;YACxC,SAAS,EAAE,eAAe,CAAC,SAAS;YACpC,MAAM,EAAE,MAAM,CAAC,YAAY,EAAE,oCAAoC;SAClE,CACF,CAAC;QAEF,OAAO;YACL,OAAO,EAAE,IAAI;YACb,IAAI,EAAE,QAAQ,CAAC,SAAS;YACxB,OAAO,EAAE,kDAAkD,eAAe,CAAC,WAAW,EAAE;SACzF,CAAC;IACJ,CAAC;IAAC,OAAO,KAAU,EAAE,CAAC;QACpB,OAAO,CAAC,KAAK,CAAC,+BAA+B,EAAE,KAAK,CAAC,CAAC;QACtD,OAAO;YACL,OAAO,EAAE,KAAK;YACd,KAAK,EAAE,6BAA6B,KAAK,CAAC,OAAO,IAAI,eAAe,EAAE;SACvE,CAAC;IACJ,CAAC;AACH,CAAC"}
@@ -0,0 +1,8 @@
1
+ import { GetUserStoriesParams, ToolResult } from '../types/index';
2
+ /**
3
+ * Get existing user stories for the given project and suite.
4
+ *
5
+ * @param params - Parameters containing project UUID and suite UUID.
6
+ * @returns Promise with user stories data.
7
+ */
8
+ export declare function wopee_get_user_stories(params: GetUserStoriesParams): Promise<ToolResult<string>>;
@@ -0,0 +1,41 @@
1
+ import { graphqlClient } from '../graphql/client.js';
2
+ import { GetUserStoriesSchema, Bucket } from '../types/index.js';
3
+ /**
4
+ * GraphQL query for fetching user stories
5
+ */
6
+ const FETCH_FILE_QUERY = `
7
+ query FetchFile($projectUuid: ID!, $suiteUuid: ID!, $bucket: String!) {
8
+ fetchFile(projectUuid: $projectUuid, suiteUuid: $suiteUuid, bucket: $bucket)
9
+ }
10
+ `;
11
+ /**
12
+ * Get existing user stories for the given project and suite.
13
+ *
14
+ * @param params - Parameters containing project UUID and suite UUID.
15
+ * @returns Promise with user stories data.
16
+ */
17
+ export async function wopee_get_user_stories(params) {
18
+ try {
19
+ // Validate input parameters
20
+ const validatedParams = GetUserStoriesSchema.parse(params);
21
+ // Execute GraphQL query to fetch user stories
22
+ const response = await graphqlClient.getInstance().request(FETCH_FILE_QUERY, {
23
+ projectUuid: validatedParams.projectUuid,
24
+ suiteUuid: validatedParams.suiteUuid,
25
+ bucket: Bucket.USER_STORIES,
26
+ });
27
+ return {
28
+ success: true,
29
+ data: response.fetchFile,
30
+ message: `User stories retrieved successfully for project: ${validatedParams.projectUuid}`,
31
+ };
32
+ }
33
+ catch (error) {
34
+ console.error('[wopee_get_user_stories] Error:', error);
35
+ return {
36
+ success: false,
37
+ error: `Failed to get user stories: ${error.message || 'Unknown error'}`,
38
+ };
39
+ }
40
+ }
41
+ //# sourceMappingURL=wopee_get_user_stories.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"wopee_get_user_stories.js","sourceRoot":"","sources":["../../src/tools/wopee_get_user_stories.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,aAAa,EAAE,MAAM,mBAAmB,CAAC;AAClD,OAAO,EAAwB,oBAAoB,EAAc,MAAM,EAAE,MAAM,gBAAgB,CAAC;AAEhG;;GAEG;AACH,MAAM,gBAAgB,GAAG;;;;CAIxB,CAAC;AAEF;;;;;GAKG;AACH,MAAM,CAAC,KAAK,UAAU,sBAAsB,CAAC,MAA4B;IACvE,IAAI,CAAC;QACH,4BAA4B;QAC5B,MAAM,eAAe,GAAG,oBAAoB,CAAC,KAAK,CAAC,MAAM,CAAC,CAAC;QAE3D,8CAA8C;QAC9C,MAAM,QAAQ,GAAG,MAAM,aAAa,CAAC,WAAW,EAAE,CAAC,OAAO,CACxD,gBAAgB,EAChB;YACE,WAAW,EAAE,eAAe,CAAC,WAAW;YACxC,SAAS,EAAE,eAAe,CAAC,SAAS;YACpC,MAAM,EAAE,MAAM,CAAC,YAAY;SAC5B,CACF,CAAC;QAEF,OAAO;YACL,OAAO,EAAE,IAAI;YACb,IAAI,EAAE,QAAQ,CAAC,SAAS;YACxB,OAAO,EAAE,oDAAoD,eAAe,CAAC,WAAW,EAAE;SAC3F,CAAC;IACJ,CAAC;IAAC,OAAO,KAAU,EAAE,CAAC;QACpB,OAAO,CAAC,KAAK,CAAC,iCAAiC,EAAE,KAAK,CAAC,CAAC;QACxD,OAAO;YACL,OAAO,EAAE,KAAK;YACd,KAAK,EAAE,+BAA+B,KAAK,CAAC,OAAO,IAAI,eAAe,EAAE;SACzE,CAAC;IACJ,CAAC;AACH,CAAC"}
@@ -0,0 +1,425 @@
1
+ import { z } from 'zod';
2
+ /**
3
+ * Configuration schema for Wopee API
4
+ */
5
+ export declare const WopeeConfigSchema: z.ZodObject<{
6
+ apiKey: z.ZodString;
7
+ apiUrl: z.ZodDefault<z.ZodString>;
8
+ projectUuid: z.ZodString;
9
+ }, "strip", z.ZodTypeAny, {
10
+ apiKey: string;
11
+ apiUrl: string;
12
+ projectUuid: string;
13
+ }, {
14
+ apiKey: string;
15
+ projectUuid: string;
16
+ apiUrl?: string | undefined;
17
+ }>;
18
+ export type WopeeConfig = z.infer<typeof WopeeConfigSchema>;
19
+ /**
20
+ * GraphQL response types
21
+ */
22
+ export interface GraphQLResponse<T = any> {
23
+ data?: T;
24
+ errors?: Array<{
25
+ message: string;
26
+ locations?: Array<{
27
+ line: number;
28
+ column: number;
29
+ }>;
30
+ path?: string[];
31
+ }>;
32
+ }
33
+ /**
34
+ * API Enums
35
+ */
36
+ export declare enum CookiesPreference {
37
+ ACCEPT_ALL = "ACCEPT_ALL",
38
+ DECLINE_ALL = "DECLINE_ALL",
39
+ IGNORE = "IGNORE"
40
+ }
41
+ export declare enum RerunMode {
42
+ FULL = "FULL",
43
+ CRAWLING = "CRAWLING"
44
+ }
45
+ export declare enum SuiteType {
46
+ BOT = "BOT",
47
+ CODE = "CODE",
48
+ AGENT = "AGENT",
49
+ ANALYSIS = "ANALYSIS",
50
+ INTEGRATION = "INTEGRATION",
51
+ UPLOADED_PAGE_DATA = "UPLOADED_PAGE_DATA"
52
+ }
53
+ export declare enum SuiteRunningStatus {
54
+ IDLE = "IDLE",
55
+ FINISHED = "FINISHED",
56
+ IN_PROGRESS = "IN_PROGRESS",
57
+ IN_PROGRESS_MERGE = "IN_PROGRESS_MERGE"
58
+ }
59
+ export declare enum GeneratedAnalysisDataState {
60
+ PENDING = "PENDING",
61
+ GENERATING = "GENERATING",
62
+ COMPLETED = "COMPLETED",
63
+ FAILED = "FAILED"
64
+ }
65
+ export declare enum UploadStatus {
66
+ IN_PROGRESS = "IN_PROGRESS",
67
+ FINISHED = "FINISHED",
68
+ FAILED = "FAILED"
69
+ }
70
+ export declare enum ExecutionStatus {
71
+ IN_PROGRESS = "IN_PROGRESS",
72
+ FINISHED = "FINISHED",
73
+ FAILED = "FAILED"
74
+ }
75
+ export declare enum GenerationStatus {
76
+ NOT_STARTED = "NOT_STARTED",
77
+ IN_QUEUE = "IN_QUEUE",
78
+ IN_PROGRESS = "IN_PROGRESS",
79
+ FINISHED = "FINISHED",
80
+ FAILED = "FAILED"
81
+ }
82
+ /**
83
+ * API Input Types
84
+ */
85
+ export declare const SuiteAnalysisConfigInputSchema: z.ZodObject<{
86
+ username: z.ZodOptional<z.ZodString>;
87
+ password: z.ZodOptional<z.ZodString>;
88
+ cookiesPreference: z.ZodOptional<z.ZodNativeEnum<typeof CookiesPreference>>;
89
+ additionalInstructions: z.ZodOptional<z.ZodString>;
90
+ additionalVariables: z.ZodOptional<z.ZodString>;
91
+ }, "strip", z.ZodTypeAny, {
92
+ username?: string | undefined;
93
+ password?: string | undefined;
94
+ cookiesPreference?: CookiesPreference | undefined;
95
+ additionalInstructions?: string | undefined;
96
+ additionalVariables?: string | undefined;
97
+ }, {
98
+ username?: string | undefined;
99
+ password?: string | undefined;
100
+ cookiesPreference?: CookiesPreference | undefined;
101
+ additionalInstructions?: string | undefined;
102
+ additionalVariables?: string | undefined;
103
+ }>;
104
+ export declare const RerunOptionsSchema: z.ZodObject<{
105
+ suiteUuid: z.ZodString;
106
+ analysisIdentifier: z.ZodString;
107
+ mode: z.ZodNativeEnum<typeof RerunMode>;
108
+ }, "strip", z.ZodTypeAny, {
109
+ suiteUuid: string;
110
+ analysisIdentifier: string;
111
+ mode: RerunMode;
112
+ }, {
113
+ suiteUuid: string;
114
+ analysisIdentifier: string;
115
+ mode: RerunMode;
116
+ }>;
117
+ export declare const SelectedTestCasesInputSchema: z.ZodObject<{
118
+ testCaseId: z.ZodString;
119
+ userStoryId: z.ZodString;
120
+ }, "strip", z.ZodTypeAny, {
121
+ testCaseId: string;
122
+ userStoryId: string;
123
+ }, {
124
+ testCaseId: string;
125
+ userStoryId: string;
126
+ }>;
127
+ /**
128
+ * Tool parameter schemas
129
+ */
130
+ export declare const DispatchAnalysisSchema: z.ZodObject<{
131
+ projectUuid: z.ZodString;
132
+ iterations: z.ZodOptional<z.ZodNumber>;
133
+ suiteAnalysisConfig: z.ZodOptional<z.ZodObject<{
134
+ username: z.ZodOptional<z.ZodString>;
135
+ password: z.ZodOptional<z.ZodString>;
136
+ cookiesPreference: z.ZodOptional<z.ZodNativeEnum<typeof CookiesPreference>>;
137
+ additionalInstructions: z.ZodOptional<z.ZodString>;
138
+ additionalVariables: z.ZodOptional<z.ZodString>;
139
+ }, "strip", z.ZodTypeAny, {
140
+ username?: string | undefined;
141
+ password?: string | undefined;
142
+ cookiesPreference?: CookiesPreference | undefined;
143
+ additionalInstructions?: string | undefined;
144
+ additionalVariables?: string | undefined;
145
+ }, {
146
+ username?: string | undefined;
147
+ password?: string | undefined;
148
+ cookiesPreference?: CookiesPreference | undefined;
149
+ additionalInstructions?: string | undefined;
150
+ additionalVariables?: string | undefined;
151
+ }>>;
152
+ rerun: z.ZodOptional<z.ZodObject<{
153
+ suiteUuid: z.ZodString;
154
+ analysisIdentifier: z.ZodString;
155
+ mode: z.ZodNativeEnum<typeof RerunMode>;
156
+ }, "strip", z.ZodTypeAny, {
157
+ suiteUuid: string;
158
+ analysisIdentifier: string;
159
+ mode: RerunMode;
160
+ }, {
161
+ suiteUuid: string;
162
+ analysisIdentifier: string;
163
+ mode: RerunMode;
164
+ }>>;
165
+ }, "strip", z.ZodTypeAny, {
166
+ projectUuid: string;
167
+ iterations?: number | undefined;
168
+ suiteAnalysisConfig?: {
169
+ username?: string | undefined;
170
+ password?: string | undefined;
171
+ cookiesPreference?: CookiesPreference | undefined;
172
+ additionalInstructions?: string | undefined;
173
+ additionalVariables?: string | undefined;
174
+ } | undefined;
175
+ rerun?: {
176
+ suiteUuid: string;
177
+ analysisIdentifier: string;
178
+ mode: RerunMode;
179
+ } | undefined;
180
+ }, {
181
+ projectUuid: string;
182
+ iterations?: number | undefined;
183
+ suiteAnalysisConfig?: {
184
+ username?: string | undefined;
185
+ password?: string | undefined;
186
+ cookiesPreference?: CookiesPreference | undefined;
187
+ additionalInstructions?: string | undefined;
188
+ additionalVariables?: string | undefined;
189
+ } | undefined;
190
+ rerun?: {
191
+ suiteUuid: string;
192
+ analysisIdentifier: string;
193
+ mode: RerunMode;
194
+ } | undefined;
195
+ }>;
196
+ export declare const DispatchAgentSchema: z.ZodObject<{
197
+ projectUuid: z.ZodString;
198
+ suiteUuid: z.ZodString;
199
+ analysisIdentifier: z.ZodString;
200
+ testCases: z.ZodOptional<z.ZodArray<z.ZodObject<{
201
+ testCaseId: z.ZodString;
202
+ userStoryId: z.ZodString;
203
+ }, "strip", z.ZodTypeAny, {
204
+ testCaseId: string;
205
+ userStoryId: string;
206
+ }, {
207
+ testCaseId: string;
208
+ userStoryId: string;
209
+ }>, "many">>;
210
+ skipRateLimitCheck: z.ZodOptional<z.ZodBoolean>;
211
+ }, "strip", z.ZodTypeAny, {
212
+ projectUuid: string;
213
+ suiteUuid: string;
214
+ analysisIdentifier: string;
215
+ testCases?: {
216
+ testCaseId: string;
217
+ userStoryId: string;
218
+ }[] | undefined;
219
+ skipRateLimitCheck?: boolean | undefined;
220
+ }, {
221
+ projectUuid: string;
222
+ suiteUuid: string;
223
+ analysisIdentifier: string;
224
+ testCases?: {
225
+ testCaseId: string;
226
+ userStoryId: string;
227
+ }[] | undefined;
228
+ skipRateLimitCheck?: boolean | undefined;
229
+ }>;
230
+ export declare const GenerateAIDataSchema: z.ZodObject<{
231
+ projectUuid: z.ZodString;
232
+ suiteUuid: z.ZodString;
233
+ extraPrompt: z.ZodOptional<z.ZodString>;
234
+ selectedUserStories: z.ZodOptional<z.ZodArray<z.ZodString, "many">>;
235
+ suiteAnalysisConfig: z.ZodOptional<z.ZodObject<{
236
+ username: z.ZodOptional<z.ZodString>;
237
+ password: z.ZodOptional<z.ZodString>;
238
+ cookiesPreference: z.ZodOptional<z.ZodNativeEnum<typeof CookiesPreference>>;
239
+ additionalInstructions: z.ZodOptional<z.ZodString>;
240
+ additionalVariables: z.ZodOptional<z.ZodString>;
241
+ }, "strip", z.ZodTypeAny, {
242
+ username?: string | undefined;
243
+ password?: string | undefined;
244
+ cookiesPreference?: CookiesPreference | undefined;
245
+ additionalInstructions?: string | undefined;
246
+ additionalVariables?: string | undefined;
247
+ }, {
248
+ username?: string | undefined;
249
+ password?: string | undefined;
250
+ cookiesPreference?: CookiesPreference | undefined;
251
+ additionalInstructions?: string | undefined;
252
+ additionalVariables?: string | undefined;
253
+ }>>;
254
+ continueGeneration: z.ZodOptional<z.ZodBoolean>;
255
+ }, "strip", z.ZodTypeAny, {
256
+ projectUuid: string;
257
+ suiteUuid: string;
258
+ suiteAnalysisConfig?: {
259
+ username?: string | undefined;
260
+ password?: string | undefined;
261
+ cookiesPreference?: CookiesPreference | undefined;
262
+ additionalInstructions?: string | undefined;
263
+ additionalVariables?: string | undefined;
264
+ } | undefined;
265
+ extraPrompt?: string | undefined;
266
+ selectedUserStories?: string[] | undefined;
267
+ continueGeneration?: boolean | undefined;
268
+ }, {
269
+ projectUuid: string;
270
+ suiteUuid: string;
271
+ suiteAnalysisConfig?: {
272
+ username?: string | undefined;
273
+ password?: string | undefined;
274
+ cookiesPreference?: CookiesPreference | undefined;
275
+ additionalInstructions?: string | undefined;
276
+ additionalVariables?: string | undefined;
277
+ } | undefined;
278
+ extraPrompt?: string | undefined;
279
+ selectedUserStories?: string[] | undefined;
280
+ continueGeneration?: boolean | undefined;
281
+ }>;
282
+ export declare const FetchFileSchema: z.ZodObject<{
283
+ projectUuid: z.ZodString;
284
+ suiteUuid: z.ZodString;
285
+ bucket: z.ZodString;
286
+ }, "strip", z.ZodTypeAny, {
287
+ projectUuid: string;
288
+ suiteUuid: string;
289
+ bucket: string;
290
+ }, {
291
+ projectUuid: string;
292
+ suiteUuid: string;
293
+ bucket: string;
294
+ }>;
295
+ export declare const GetAppContextSchema: z.ZodObject<{
296
+ projectUuid: z.ZodString;
297
+ suiteUuid: z.ZodString;
298
+ }, "strip", z.ZodTypeAny, {
299
+ projectUuid: string;
300
+ suiteUuid: string;
301
+ }, {
302
+ projectUuid: string;
303
+ suiteUuid: string;
304
+ }>;
305
+ export declare const GetUserStoriesSchema: z.ZodObject<{
306
+ projectUuid: z.ZodString;
307
+ suiteUuid: z.ZodString;
308
+ }, "strip", z.ZodTypeAny, {
309
+ projectUuid: string;
310
+ suiteUuid: string;
311
+ }, {
312
+ projectUuid: string;
313
+ suiteUuid: string;
314
+ }>;
315
+ export declare const GetTestCasesSchema: z.ZodObject<{
316
+ projectUuid: z.ZodString;
317
+ suiteUuid: z.ZodString;
318
+ }, "strip", z.ZodTypeAny, {
319
+ projectUuid: string;
320
+ suiteUuid: string;
321
+ }, {
322
+ projectUuid: string;
323
+ suiteUuid: string;
324
+ }>;
325
+ export declare const FetchAnalysisSuitesSchema: z.ZodObject<{
326
+ projectUuid: z.ZodString;
327
+ }, "strip", z.ZodTypeAny, {
328
+ projectUuid: string;
329
+ }, {
330
+ projectUuid: string;
331
+ }>;
332
+ export type SuiteAnalysisConfigInput = z.infer<typeof SuiteAnalysisConfigInputSchema>;
333
+ export type RerunOptions = z.infer<typeof RerunOptionsSchema>;
334
+ export type SelectedTestCasesInput = z.infer<typeof SelectedTestCasesInputSchema>;
335
+ export type DispatchAnalysisParams = z.infer<typeof DispatchAnalysisSchema>;
336
+ export type DispatchAgentParams = z.infer<typeof DispatchAgentSchema>;
337
+ export type GenerateAIDataParams = z.infer<typeof GenerateAIDataSchema>;
338
+ export type FetchFileParams = z.infer<typeof FetchFileSchema>;
339
+ export type GetAppContextParams = z.infer<typeof GetAppContextSchema>;
340
+ export type GetUserStoriesParams = z.infer<typeof GetUserStoriesSchema>;
341
+ export type GetTestCasesParams = z.infer<typeof GetTestCasesSchema>;
342
+ export type FetchAnalysisSuitesParams = z.infer<typeof FetchAnalysisSuitesSchema>;
343
+ /**
344
+ * Bucket constants for data fetching
345
+ */
346
+ export declare const Bucket: {
347
+ readonly APP_CONTEXT: "project-suite-app-context";
348
+ readonly GENERAL_USER_STORIES: "project-suite-general-user-stories";
349
+ readonly USER_STORIES: "project-suite-user-stories";
350
+ readonly PAGE_CONTENT: "screen-instance-page-content";
351
+ readonly PROMPTS: "project-prompts";
352
+ readonly PLAYWRIGHT_CODE: "project-suite-playwright-code";
353
+ readonly UPLOADED_PAGE_DATA: "project-uploaded-page-data";
354
+ };
355
+ /**
356
+ * Tool result types
357
+ */
358
+ export interface ToolResult<T = any> {
359
+ success: boolean;
360
+ data?: T;
361
+ error?: string;
362
+ message?: string;
363
+ }
364
+ /**
365
+ * Analysis result type
366
+ */
367
+ export interface AnalysisSuiteR {
368
+ uuid: string;
369
+ name?: string;
370
+ createdAt: string;
371
+ updatedAt: string;
372
+ suiteType?: SuiteType;
373
+ analysisIdentifier: string;
374
+ suiteRunningStatus: SuiteRunningStatus;
375
+ generatedAnalysisDataState: GeneratedAnalysisDataState;
376
+ }
377
+ /**
378
+ * Generation state type
379
+ */
380
+ export interface GenerationState {
381
+ uuid: string;
382
+ isGenerated: boolean;
383
+ status: GenerationStatus;
384
+ }
385
+ /**
386
+ * Generated analysis data state type
387
+ */
388
+ export interface GeneratedAnalysisDataStateType {
389
+ uuid: string;
390
+ suiteUuid?: string;
391
+ appContext?: GenerationState;
392
+ generalUserStories?: GenerationState;
393
+ userStories?: GenerationState;
394
+ testCases?: GenerationState;
395
+ }
396
+ /**
397
+ * Fetch analysis suite response type
398
+ */
399
+ export interface FetchAnalysisSuiteResponse {
400
+ uuid: string;
401
+ name?: string;
402
+ suiteType?: SuiteType;
403
+ uploadStatus?: UploadStatus;
404
+ executionStatus?: ExecutionStatus;
405
+ analysisIdentifier?: string;
406
+ suiteRunningStatus?: SuiteRunningStatus;
407
+ createdAt: string;
408
+ updatedAt: string;
409
+ generatedAnalysisDataState?: GeneratedAnalysisDataStateType;
410
+ }
411
+ /**
412
+ * Test result type
413
+ */
414
+ export interface TestResult {
415
+ id: string;
416
+ name: string;
417
+ status: 'passed' | 'failed' | 'skipped';
418
+ duration: number;
419
+ error?: string;
420
+ steps?: Array<{
421
+ name: string;
422
+ status: 'passed' | 'failed' | 'skipped';
423
+ error?: string;
424
+ }>;
425
+ }
@@ -0,0 +1,143 @@
1
+ import { z } from 'zod';
2
+ /**
3
+ * Configuration schema for Wopee API
4
+ */
5
+ export const WopeeConfigSchema = z.object({
6
+ apiKey: z.string().min(1, 'API key is required'),
7
+ apiUrl: z.string().url('Invalid API URL').default('https://api.wopee.io/'),
8
+ projectUuid: z.string().min(1, 'Project UUID is required'),
9
+ });
10
+ /**
11
+ * API Enums
12
+ */
13
+ export var CookiesPreference;
14
+ (function (CookiesPreference) {
15
+ CookiesPreference["ACCEPT_ALL"] = "ACCEPT_ALL";
16
+ CookiesPreference["DECLINE_ALL"] = "DECLINE_ALL";
17
+ CookiesPreference["IGNORE"] = "IGNORE";
18
+ })(CookiesPreference || (CookiesPreference = {}));
19
+ export var RerunMode;
20
+ (function (RerunMode) {
21
+ RerunMode["FULL"] = "FULL";
22
+ RerunMode["CRAWLING"] = "CRAWLING";
23
+ })(RerunMode || (RerunMode = {}));
24
+ export var SuiteType;
25
+ (function (SuiteType) {
26
+ SuiteType["BOT"] = "BOT";
27
+ SuiteType["CODE"] = "CODE";
28
+ SuiteType["AGENT"] = "AGENT";
29
+ SuiteType["ANALYSIS"] = "ANALYSIS";
30
+ SuiteType["INTEGRATION"] = "INTEGRATION";
31
+ SuiteType["UPLOADED_PAGE_DATA"] = "UPLOADED_PAGE_DATA";
32
+ })(SuiteType || (SuiteType = {}));
33
+ export var SuiteRunningStatus;
34
+ (function (SuiteRunningStatus) {
35
+ SuiteRunningStatus["IDLE"] = "IDLE";
36
+ SuiteRunningStatus["FINISHED"] = "FINISHED";
37
+ SuiteRunningStatus["IN_PROGRESS"] = "IN_PROGRESS";
38
+ SuiteRunningStatus["IN_PROGRESS_MERGE"] = "IN_PROGRESS_MERGE";
39
+ })(SuiteRunningStatus || (SuiteRunningStatus = {}));
40
+ export var GeneratedAnalysisDataState;
41
+ (function (GeneratedAnalysisDataState) {
42
+ GeneratedAnalysisDataState["PENDING"] = "PENDING";
43
+ GeneratedAnalysisDataState["GENERATING"] = "GENERATING";
44
+ GeneratedAnalysisDataState["COMPLETED"] = "COMPLETED";
45
+ GeneratedAnalysisDataState["FAILED"] = "FAILED";
46
+ })(GeneratedAnalysisDataState || (GeneratedAnalysisDataState = {}));
47
+ export var UploadStatus;
48
+ (function (UploadStatus) {
49
+ UploadStatus["IN_PROGRESS"] = "IN_PROGRESS";
50
+ UploadStatus["FINISHED"] = "FINISHED";
51
+ UploadStatus["FAILED"] = "FAILED";
52
+ })(UploadStatus || (UploadStatus = {}));
53
+ export var ExecutionStatus;
54
+ (function (ExecutionStatus) {
55
+ ExecutionStatus["IN_PROGRESS"] = "IN_PROGRESS";
56
+ ExecutionStatus["FINISHED"] = "FINISHED";
57
+ ExecutionStatus["FAILED"] = "FAILED";
58
+ })(ExecutionStatus || (ExecutionStatus = {}));
59
+ export var GenerationStatus;
60
+ (function (GenerationStatus) {
61
+ GenerationStatus["NOT_STARTED"] = "NOT_STARTED";
62
+ GenerationStatus["IN_QUEUE"] = "IN_QUEUE";
63
+ GenerationStatus["IN_PROGRESS"] = "IN_PROGRESS";
64
+ GenerationStatus["FINISHED"] = "FINISHED";
65
+ GenerationStatus["FAILED"] = "FAILED";
66
+ })(GenerationStatus || (GenerationStatus = {}));
67
+ /**
68
+ * API Input Types
69
+ */
70
+ export const SuiteAnalysisConfigInputSchema = z.object({
71
+ username: z.string().optional(),
72
+ password: z.string().optional(),
73
+ cookiesPreference: z.nativeEnum(CookiesPreference).optional(),
74
+ additionalInstructions: z.string().optional(),
75
+ additionalVariables: z.string().optional(),
76
+ });
77
+ export const RerunOptionsSchema = z.object({
78
+ suiteUuid: z.string().min(1, 'Suite UUID is required'),
79
+ analysisIdentifier: z.string().min(1, 'Analysis identifier is required'),
80
+ mode: z.nativeEnum(RerunMode),
81
+ });
82
+ export const SelectedTestCasesInputSchema = z.object({
83
+ testCaseId: z.string().min(1, 'Test case ID is required'),
84
+ userStoryId: z.string().min(1, 'User story ID is required'),
85
+ });
86
+ /**
87
+ * Tool parameter schemas
88
+ */
89
+ export const DispatchAnalysisSchema = z.object({
90
+ projectUuid: z.string().min(1, 'Project UUID is required'),
91
+ iterations: z.number().int().positive().optional(),
92
+ suiteAnalysisConfig: SuiteAnalysisConfigInputSchema.optional(),
93
+ rerun: RerunOptionsSchema.optional(),
94
+ });
95
+ export const DispatchAgentSchema = z.object({
96
+ projectUuid: z.string().min(1, 'Project UUID is required'),
97
+ suiteUuid: z.string().min(1, 'Suite UUID is required'),
98
+ analysisIdentifier: z.string().min(1, 'Analysis identifier is required'),
99
+ testCases: z.array(SelectedTestCasesInputSchema).optional(),
100
+ skipRateLimitCheck: z.boolean().optional(),
101
+ });
102
+ export const GenerateAIDataSchema = z.object({
103
+ projectUuid: z.string().min(1, 'Project UUID is required'),
104
+ suiteUuid: z.string().min(1, 'Suite UUID is required'),
105
+ extraPrompt: z.string().optional(),
106
+ selectedUserStories: z.array(z.string()).optional(),
107
+ suiteAnalysisConfig: SuiteAnalysisConfigInputSchema.optional(),
108
+ continueGeneration: z.boolean().optional(),
109
+ });
110
+ export const FetchFileSchema = z.object({
111
+ projectUuid: z.string().min(1, 'Project UUID is required'),
112
+ suiteUuid: z.string().min(1, 'Suite UUID is required'),
113
+ bucket: z.string().min(1, 'Bucket is required'),
114
+ });
115
+ // New fetch tool schemas
116
+ export const GetAppContextSchema = z.object({
117
+ projectUuid: z.string().min(1, 'Project UUID is required'),
118
+ suiteUuid: z.string().min(1, 'Suite UUID is required'),
119
+ });
120
+ export const GetUserStoriesSchema = z.object({
121
+ projectUuid: z.string().min(1, 'Project UUID is required'),
122
+ suiteUuid: z.string().min(1, 'Suite UUID is required'),
123
+ });
124
+ export const GetTestCasesSchema = z.object({
125
+ projectUuid: z.string().min(1, 'Project UUID is required'),
126
+ suiteUuid: z.string().min(1, 'Suite UUID is required'),
127
+ });
128
+ export const FetchAnalysisSuitesSchema = z.object({
129
+ projectUuid: z.string().min(1, 'Project UUID is required'),
130
+ });
131
+ /**
132
+ * Bucket constants for data fetching
133
+ */
134
+ export const Bucket = {
135
+ APP_CONTEXT: "project-suite-app-context",
136
+ GENERAL_USER_STORIES: "project-suite-general-user-stories",
137
+ USER_STORIES: "project-suite-user-stories",
138
+ PAGE_CONTENT: "screen-instance-page-content",
139
+ PROMPTS: "project-prompts",
140
+ PLAYWRIGHT_CODE: "project-suite-playwright-code",
141
+ UPLOADED_PAGE_DATA: "project-uploaded-page-data",
142
+ };
143
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/types/index.ts"],"names":[],"mappings":"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"}
package/env.example ADDED
@@ -0,0 +1,7 @@
1
+ # Wopee API Configuration
2
+ WOPEE_API_KEY=your_api_key_here
3
+ WOPEE_PROJECT_UUID=your_project_uuid_here
4
+ WOPEE_API_URL=https://api.wopee.io/
5
+
6
+ # Optional: Override for development
7
+ # WOPEE_API_URL=https://api.dev.wopee.io/