testchimp-runner-core 0.0.25 → 0.0.28

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 (47) hide show
  1. package/CREDIT_CALLBACK_ARCHITECTURE.md +253 -0
  2. package/INTEGRATION_COMPLETE.md +322 -0
  3. package/RELEASE_0.0.26.md +165 -0
  4. package/RELEASE_0.0.27.md +236 -0
  5. package/RELEASE_0.0.28.md +286 -0
  6. package/dist/credit-usage-service.d.ts +28 -2
  7. package/dist/credit-usage-service.d.ts.map +1 -1
  8. package/dist/credit-usage-service.js +60 -24
  9. package/dist/credit-usage-service.js.map +1 -1
  10. package/dist/env-loader.d.ts +0 -5
  11. package/dist/env-loader.d.ts.map +1 -1
  12. package/dist/env-loader.js +0 -21
  13. package/dist/env-loader.js.map +1 -1
  14. package/dist/execution-service.d.ts.map +1 -1
  15. package/dist/execution-service.js +134 -10
  16. package/dist/execution-service.js.map +1 -1
  17. package/dist/index.d.ts +14 -6
  18. package/dist/index.d.ts.map +1 -1
  19. package/dist/index.js +28 -7
  20. package/dist/index.js.map +1 -1
  21. package/dist/progress-reporter.d.ts +30 -0
  22. package/dist/progress-reporter.d.ts.map +1 -1
  23. package/dist/prompts.js +4 -4
  24. package/dist/scenario-service.d.ts +1 -1
  25. package/dist/scenario-service.d.ts.map +1 -1
  26. package/dist/scenario-service.js +7 -4
  27. package/dist/scenario-service.js.map +1 -1
  28. package/dist/scenario-worker-class.d.ts +2 -10
  29. package/dist/scenario-worker-class.d.ts.map +1 -1
  30. package/dist/scenario-worker-class.js +88 -26
  31. package/dist/scenario-worker-class.js.map +1 -1
  32. package/dist/types.d.ts +9 -0
  33. package/dist/types.d.ts.map +1 -1
  34. package/dist/types.js.map +1 -1
  35. package/package.json +1 -1
  36. package/src/credit-usage-service.ts +81 -26
  37. package/src/env-loader.ts +0 -22
  38. package/src/execution-service.ts +158 -11
  39. package/src/index.ts +54 -10
  40. package/src/progress-reporter.ts +35 -0
  41. package/src/prompts.ts +4 -4
  42. package/src/scenario-service.ts +16 -4
  43. package/src/scenario-worker-class.ts +102 -28
  44. package/src/types.ts +16 -0
  45. package/testchimp-runner-core-0.0.27.tgz +0 -0
  46. package/RELEASE_0.0.23.md +0 -120
  47. package/RELEASE_0.0.24.md +0 -161
@@ -12,15 +12,35 @@ export interface InsertCreditUsageRequest {
12
12
  }
13
13
  export interface InsertCreditUsageResponse {
14
14
  }
15
+ /**
16
+ * Credit usage information for callback
17
+ */
18
+ export interface CreditUsage {
19
+ credits: number;
20
+ usageReason: CreditUsageReason;
21
+ jobId?: string;
22
+ timestamp: number;
23
+ }
24
+ /**
25
+ * Callback for credit usage reporting
26
+ * Allows consumers to track credit usage in their own systems
27
+ */
28
+ export type CreditUsageCallback = (usage: CreditUsage) => void | Promise<void>;
15
29
  export declare class CreditUsageService {
16
30
  private backendUrl;
17
31
  private authConfig;
18
32
  private logger?;
19
- constructor(authConfig?: AuthConfig, backendUrl?: string);
33
+ private creditUsageCallback?;
34
+ constructor(authConfig?: AuthConfig, backendUrl?: string, creditUsageCallback?: CreditUsageCallback);
20
35
  /**
21
36
  * Set a logger callback for capturing execution logs
22
37
  */
23
38
  setLogger(logger: (message: string, level?: 'log' | 'error' | 'warn') => void): void;
39
+ /**
40
+ * Set credit usage callback
41
+ * Allows consumers to track credit usage in their own systems
42
+ */
43
+ setCreditUsageCallback(callback: CreditUsageCallback): void;
24
44
  /**
25
45
  * Log a message using the configured logger
26
46
  */
@@ -34,7 +54,13 @@ export declare class CreditUsageService {
34
54
  */
35
55
  getAuthConfig(): AuthConfig | null;
36
56
  /**
37
- * Report credit usage to the backend
57
+ * Report credit usage via callback and/or backend
58
+ *
59
+ * Behavior:
60
+ * 1. If callback provided: Call callback (server-side uses this to update DB directly)
61
+ * 2. If NO callback but auth configured: Make axios call to backend (client-side: vs-ext, github action)
62
+ * 3. Server-side: Provides callback, no axios calls made
63
+ * 4. Client-side: No callback, uses auth for axios calls to backend
38
64
  */
39
65
  reportCreditUsage(credits: number | undefined, usageReason: CreditUsageReason, jobId?: string): Promise<InsertCreditUsageResponse>;
40
66
  /**
@@ -1 +1 @@
1
- {"version":3,"file":"credit-usage-service.d.ts","sourceRoot":"","sources":["../src/credit-usage-service.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,UAAU,EAAkB,MAAM,eAAe,CAAC;AAG3D,oBAAY,iBAAiB;IAC3B,2BAA2B,IAAI;IAC/B,aAAa,IAAI;IACjB,WAAW,IAAI;IACf,eAAe,IAAI;CACpB;AAED,MAAM,WAAW,wBAAwB;IACvC,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,YAAY,CAAC,EAAE,iBAAiB,CAAC;IACjC,MAAM,CAAC,EAAE,MAAM,CAAC;CACjB;AAED,MAAM,WAAW,yBAAyB;CAEzC;AAED,qBAAa,kBAAkB;IAC7B,OAAO,CAAC,UAAU,CAAS;IAC3B,OAAO,CAAC,UAAU,CAAoB;IACtC,OAAO,CAAC,MAAM,CAAC,CAA8D;gBAEjE,UAAU,CAAC,EAAE,UAAU,EAAE,UAAU,CAAC,EAAE,MAAM;IAaxD;;OAEG;IACH,SAAS,CAAC,MAAM,EAAE,CAAC,OAAO,EAAE,MAAM,EAAE,KAAK,CAAC,EAAE,KAAK,GAAG,OAAO,GAAG,MAAM,KAAK,IAAI,GAAG,IAAI;IAIpF;;OAEG;IACH,OAAO,CAAC,GAAG;IAOX;;OAEG;IACH,aAAa,CAAC,UAAU,EAAE,UAAU,GAAG,IAAI;IAI3C;;OAEG;IACH,aAAa,IAAI,UAAU,GAAG,IAAI;IAIlC;;OAEG;IACG,iBAAiB,CACrB,OAAO,EAAE,MAAM,YAAI,EACnB,WAAW,EAAE,iBAAiB,EAC9B,KAAK,CAAC,EAAE,MAAM,GACb,OAAO,CAAC,yBAAyB,CAAC;IA8BrC;;OAEG;IACG,4BAA4B,CAAC,KAAK,CAAC,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC;IAUjE;;OAEG;IACG,oBAAoB,CAAC,KAAK,CAAC,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC;CAS1D"}
1
+ {"version":3,"file":"credit-usage-service.d.ts","sourceRoot":"","sources":["../src/credit-usage-service.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,UAAU,EAAkB,MAAM,eAAe,CAAC;AAG3D,oBAAY,iBAAiB;IAC3B,2BAA2B,IAAI;IAC/B,aAAa,IAAI;IACjB,WAAW,IAAI;IACf,eAAe,IAAI;CACpB;AAED,MAAM,WAAW,wBAAwB;IACvC,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,YAAY,CAAC,EAAE,iBAAiB,CAAC;IACjC,MAAM,CAAC,EAAE,MAAM,CAAC;CACjB;AAED,MAAM,WAAW,yBAAyB;CAEzC;AAED;;GAEG;AACH,MAAM,WAAW,WAAW;IAC1B,OAAO,EAAE,MAAM,CAAC;IAChB,WAAW,EAAE,iBAAiB,CAAC;IAC/B,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,SAAS,EAAE,MAAM,CAAC;CACnB;AAED;;;GAGG;AACH,MAAM,MAAM,mBAAmB,GAAG,CAAC,KAAK,EAAE,WAAW,KAAK,IAAI,GAAG,OAAO,CAAC,IAAI,CAAC,CAAC;AAE/E,qBAAa,kBAAkB;IAC7B,OAAO,CAAC,UAAU,CAAS;IAC3B,OAAO,CAAC,UAAU,CAAoB;IACtC,OAAO,CAAC,MAAM,CAAC,CAA8D;IAC7E,OAAO,CAAC,mBAAmB,CAAC,CAAsB;gBAEtC,UAAU,CAAC,EAAE,UAAU,EAAE,UAAU,CAAC,EAAE,MAAM,EAAE,mBAAmB,CAAC,EAAE,mBAAmB;IAcnG;;OAEG;IACH,SAAS,CAAC,MAAM,EAAE,CAAC,OAAO,EAAE,MAAM,EAAE,KAAK,CAAC,EAAE,KAAK,GAAG,OAAO,GAAG,MAAM,KAAK,IAAI,GAAG,IAAI;IAIpF;;;OAGG;IACH,sBAAsB,CAAC,QAAQ,EAAE,mBAAmB,GAAG,IAAI;IAI3D;;OAEG;IACH,OAAO,CAAC,GAAG;IAOX;;OAEG;IACH,aAAa,CAAC,UAAU,EAAE,UAAU,GAAG,IAAI;IAI3C;;OAEG;IACH,aAAa,IAAI,UAAU,GAAG,IAAI;IAIlC;;;;;;;;OAQG;IACG,iBAAiB,CACrB,OAAO,EAAE,MAAM,YAAI,EACnB,WAAW,EAAE,iBAAiB,EAC9B,KAAK,CAAC,EAAE,MAAM,GACb,OAAO,CAAC,yBAAyB,CAAC;IAqDrC;;OAEG;IACG,4BAA4B,CAAC,KAAK,CAAC,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC;IAUjE;;OAEG;IACG,oBAAoB,CAAC,KAAK,CAAC,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC;CAS1D"}
@@ -15,7 +15,7 @@ var CreditUsageReason;
15
15
  CreditUsageReason[CreditUsageReason["SCRIPT_GENERATE"] = 3] = "SCRIPT_GENERATE";
16
16
  })(CreditUsageReason || (exports.CreditUsageReason = CreditUsageReason = {}));
17
17
  class CreditUsageService {
18
- constructor(authConfig, backendUrl) {
18
+ constructor(authConfig, backendUrl, creditUsageCallback) {
19
19
  // Use provided backend URL or fall back to environment configuration
20
20
  if (backendUrl) {
21
21
  this.backendUrl = backendUrl;
@@ -26,6 +26,7 @@ class CreditUsageService {
26
26
  this.backendUrl = envConfig.TESTCHIMP_BACKEND_URL;
27
27
  }
28
28
  this.authConfig = authConfig || null;
29
+ this.creditUsageCallback = creditUsageCallback;
29
30
  }
30
31
  /**
31
32
  * Set a logger callback for capturing execution logs
@@ -33,6 +34,13 @@ class CreditUsageService {
33
34
  setLogger(logger) {
34
35
  this.logger = logger;
35
36
  }
37
+ /**
38
+ * Set credit usage callback
39
+ * Allows consumers to track credit usage in their own systems
40
+ */
41
+ setCreditUsageCallback(callback) {
42
+ this.creditUsageCallback = callback;
43
+ }
36
44
  /**
37
45
  * Log a message using the configured logger
38
46
  */
@@ -55,33 +63,61 @@ class CreditUsageService {
55
63
  return this.authConfig;
56
64
  }
57
65
  /**
58
- * Report credit usage to the backend
66
+ * Report credit usage via callback and/or backend
67
+ *
68
+ * Behavior:
69
+ * 1. If callback provided: Call callback (server-side uses this to update DB directly)
70
+ * 2. If NO callback but auth configured: Make axios call to backend (client-side: vs-ext, github action)
71
+ * 3. Server-side: Provides callback, no axios calls made
72
+ * 4. Client-side: No callback, uses auth for axios calls to backend
59
73
  */
60
74
  async reportCreditUsage(credits = 1, usageReason, jobId) {
61
- if (!this.authConfig) {
62
- throw new Error('Authentication not configured. Please set authentication credentials.');
75
+ const creditUsage = {
76
+ credits,
77
+ usageReason,
78
+ jobId,
79
+ timestamp: Date.now()
80
+ };
81
+ // 1. If callback provided: Use callback (server-side path)
82
+ if (this.creditUsageCallback) {
83
+ try {
84
+ await this.creditUsageCallback(creditUsage);
85
+ this.log(`Credit usage reported via callback: ${credits} credits for ${CreditUsageReason[usageReason]}`);
86
+ return {}; // Callback succeeded, no need for backend call
87
+ }
88
+ catch (error) {
89
+ this.log(`Credit usage callback failed: ${error.message}`, 'error');
90
+ throw error; // Callback failure is critical for server-side
91
+ }
63
92
  }
64
- try {
65
- const authHeaders = (0, auth_config_1.getAuthHeaders)(this.authConfig);
66
- const url = `${this.backendUrl}/localagent/insert_credit_usage`;
67
- const request = {
68
- credits,
69
- usage_reason: usageReason,
70
- job_id: jobId
71
- };
72
- const response = await axios_1.default.post(url, request, {
73
- headers: {
74
- ...authHeaders,
75
- 'Content-Type': 'application/json'
76
- },
77
- timeout: 10000 // 10 second timeout for credit usage calls
78
- });
79
- return response.data;
80
- }
81
- catch (error) {
82
- this.log(`Credit usage report failed: ${error}`, 'error');
83
- throw new Error(`Credit usage report failed: ${error.message}`);
93
+ // 2. No callback: Make axios call if auth configured (client-side path: vs-ext, github action)
94
+ if (this.authConfig) {
95
+ try {
96
+ const authHeaders = (0, auth_config_1.getAuthHeaders)(this.authConfig);
97
+ const url = `${this.backendUrl}/localagent/insert_credit_usage`;
98
+ const request = {
99
+ credits,
100
+ usage_reason: usageReason,
101
+ job_id: jobId
102
+ };
103
+ const response = await axios_1.default.post(url, request, {
104
+ headers: {
105
+ ...authHeaders,
106
+ 'Content-Type': 'application/json'
107
+ },
108
+ timeout: 10000 // 10 second timeout for credit usage calls
109
+ });
110
+ this.log(`Credit usage reported to backend: ${credits} credits for ${CreditUsageReason[usageReason]}`);
111
+ return response.data;
112
+ }
113
+ catch (error) {
114
+ this.log(`Credit usage backend report failed: ${error.message}`, 'error');
115
+ throw error; // Backend failure is critical for client-side
116
+ }
84
117
  }
118
+ // 3. No callback and no auth - no credit tracking (development mode)
119
+ this.log(`Credit usage not tracked (no callback or auth configured): ${credits} credits for ${CreditUsageReason[usageReason]}`, 'warn');
120
+ return {};
85
121
  }
86
122
  /**
87
123
  * Report script generation credit usage
@@ -1 +1 @@
1
- {"version":3,"file":"credit-usage-service.js","sourceRoot":"","sources":["../src/credit-usage-service.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"credit-usage-service.js","sourceRoot":"","sources":["../src/credit-usage-service.ts"],"names":[],"mappings":"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"}
@@ -16,10 +16,5 @@ export declare function loadEnvConfig(): EnvConfig;
16
16
  * Get a specific environment variable
17
17
  */
18
18
  export declare function getEnvVar(key: keyof EnvConfig): string | undefined;
19
- /**
20
- * Check if we're running in development mode (localhost)
21
- * Returns false for staging and production environments
22
- */
23
- export declare function isDevelopmentMode(): boolean;
24
19
  export {};
25
20
  //# sourceMappingURL=env-loader.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"env-loader.d.ts","sourceRoot":"","sources":["../src/env-loader.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAEH,UAAU,SAAS;IACjB,qBAAqB,EAAE,MAAM,CAAC;CAC/B;AAID;;;GAGG;AACH,wBAAgB,aAAa,IAAI,SAAS,CA6EzC;AAED;;GAEG;AACH,wBAAgB,SAAS,CAAC,GAAG,EAAE,MAAM,SAAS,GAAG,MAAM,GAAG,SAAS,CAGlE;AAED;;;GAGG;AACH,wBAAgB,iBAAiB,IAAI,OAAO,CAgB3C"}
1
+ {"version":3,"file":"env-loader.d.ts","sourceRoot":"","sources":["../src/env-loader.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAEH,UAAU,SAAS;IACjB,qBAAqB,EAAE,MAAM,CAAC;CAC/B;AAID;;;GAGG;AACH,wBAAgB,aAAa,IAAI,SAAS,CA6EzC;AAED;;GAEG;AACH,wBAAgB,SAAS,CAAC,GAAG,EAAE,MAAM,SAAS,GAAG,MAAM,GAAG,SAAS,CAGlE"}
@@ -8,7 +8,6 @@
8
8
  Object.defineProperty(exports, "__esModule", { value: true });
9
9
  exports.loadEnvConfig = loadEnvConfig;
10
10
  exports.getEnvVar = getEnvVar;
11
- exports.isDevelopmentMode = isDevelopmentMode;
12
11
  let cachedConfig = null;
13
12
  /**
14
13
  * Load environment configuration from the packaged env file
@@ -92,24 +91,4 @@ function getEnvVar(key) {
92
91
  const config = loadEnvConfig();
93
92
  return config[key];
94
93
  }
95
- /**
96
- * Check if we're running in development mode (localhost)
97
- * Returns false for staging and production environments
98
- */
99
- function isDevelopmentMode() {
100
- try {
101
- const config = loadEnvConfig();
102
- const backendUrl = config.TESTCHIMP_BACKEND_URL || '';
103
- // Consider it development mode if:
104
- // 1. Backend URL contains localhost or 127.0.0.1
105
- // 2. NODE_ENV is explicitly set to 'development'
106
- const isLocalhost = backendUrl.includes('localhost') || backendUrl.includes('127.0.0.1');
107
- const isDevEnv = process.env.NODE_ENV === 'development';
108
- return isLocalhost || isDevEnv;
109
- }
110
- catch (error) {
111
- // If we can't determine, assume production for safety (suppress verbose logs)
112
- return false;
113
- }
114
- }
115
94
  //# sourceMappingURL=env-loader.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"env-loader.js","sourceRoot":"","sources":["../src/env-loader.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"env-loader.js","sourceRoot":"","sources":["../src/env-loader.ts"],"names":[],"mappings":"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"}
@@ -1 +1 @@
1
- {"version":3,"file":"execution-service.d.ts","sourceRoot":"","sources":["../src/execution-service.ts"],"names":[],"mappings":"AACA,OAAO,EACL,0BAA0B,EAC1B,2BAA2B,EAE3B,sBAAsB,EACtB,uBAAuB,EAKxB,MAAM,SAAS,CAAC;AAKjB,OAAO,EAAE,UAAU,EAAE,MAAM,eAAe,CAAC;AAI3C,OAAO,EAAE,WAAW,EAAE,MAAM,gBAAgB,CAAC;AAC7C,OAAO,EAAE,gBAAgB,EAAE,MAAM,qBAAqB,CAAC;AAGvD;;GAEG;AACH,qBAAa,gBAAgB;IAC3B,OAAO,CAAC,iBAAiB,CAAoB;IAC7C,OAAO,CAAC,SAAS,CAAY;IAC7B,OAAO,CAAC,WAAW,CAAc;IACjC,OAAO,CAAC,gBAAgB,CAAC,CAAmB;IAC5C,OAAO,CAAC,kBAAkB,CAAqB;IAC/C,OAAO,CAAC,uBAAuB,CAAS;IACxC,OAAO,CAAC,gBAAgB,CAAgC;IACxD,OAAO,CAAC,MAAM,CAAC,CAA8D;gBAG3E,UAAU,CAAC,EAAE,UAAU,EACvB,UAAU,CAAC,EAAE,MAAM,EACnB,uBAAuB,GAAE,MAAW,EACpC,WAAW,CAAC,EAAE,WAAW,EACzB,gBAAgB,CAAC,EAAE,gBAAgB;IAarC;;OAEG;IACH,SAAS,CAAC,MAAM,EAAE,CAAC,OAAO,EAAE,MAAM,EAAE,KAAK,CAAC,EAAE,KAAK,GAAG,OAAO,GAAG,MAAM,KAAK,IAAI,GAAG,IAAI;IAIpF;;OAEG;IACH,OAAO,CAAC,GAAG;IAOX;;OAEG;IACG,UAAU,IAAI,OAAO,CAAC,IAAI,CAAC;IAIjC;;;OAGG;IACH,aAAa,CAAC,UAAU,EAAE,UAAU,GAAG,IAAI;IAQ3C;;OAEG;IACG,aAAa,CAAC,OAAO,EAAE,sBAAsB,GAAG,OAAO,CAAC,uBAAuB,CAAC;IAkBtF;;OAEG;YACW,qBAAqB;IAmBnC;;OAEG;IACG,gBAAgB,CAAC,OAAO,EAAE,0BAA0B,GAAG,OAAO,CAAC,2BAA2B,CAAC;IAgCjG;;OAEG;IACH,OAAO,CAAC,qBAAqB;IAsC7B;;OAEG;IACG,KAAK,IAAI,OAAO,CAAC,IAAI,CAAC;IAI5B;;OAEG;IACH,OAAO,IAAI,OAAO;YAIJ,UAAU;YAwDV,eAAe;YAsGf,oBAAoB;IAgBlC,OAAO,CAAC,4BAA4B;YA8CtB,iBAAiB;YAqUjB,eAAe;IA0B7B;;OAEG;IACH,OAAO,CAAC,aAAa;YAeP,oBAAoB;YAoDpB,oBAAoB;YAiBpB,mBAAmB;IAcjC,OAAO,CAAC,mBAAmB;IA4B3B,OAAO,CAAC,yBAAyB;YA0CnB,0BAA0B;YAkF1B,iBAAiB;IA0D/B,OAAO,CAAC,qBAAqB;IAyB7B;;OAEG;YACW,iBAAiB;IAI/B;;OAEG;IACH,OAAO,CAAC,kBAAkB;CAkC3B"}
1
+ {"version":3,"file":"execution-service.d.ts","sourceRoot":"","sources":["../src/execution-service.ts"],"names":[],"mappings":"AACA,OAAO,EACL,0BAA0B,EAC1B,2BAA2B,EAE3B,sBAAsB,EACtB,uBAAuB,EAKxB,MAAM,SAAS,CAAC;AAKjB,OAAO,EAAE,UAAU,EAAE,MAAM,eAAe,CAAC;AAI3C,OAAO,EAAE,WAAW,EAAE,MAAM,gBAAgB,CAAC;AAC7C,OAAO,EAAE,gBAAgB,EAAE,MAAM,qBAAqB,CAAC;AAGvD;;GAEG;AACH,qBAAa,gBAAgB;IAC3B,OAAO,CAAC,iBAAiB,CAAoB;IAC7C,OAAO,CAAC,SAAS,CAAY;IAC7B,OAAO,CAAC,WAAW,CAAc;IACjC,OAAO,CAAC,gBAAgB,CAAC,CAAmB;IAC5C,OAAO,CAAC,kBAAkB,CAAqB;IAC/C,OAAO,CAAC,uBAAuB,CAAS;IACxC,OAAO,CAAC,gBAAgB,CAAgC;IACxD,OAAO,CAAC,MAAM,CAAC,CAA8D;gBAG3E,UAAU,CAAC,EAAE,UAAU,EACvB,UAAU,CAAC,EAAE,MAAM,EACnB,uBAAuB,GAAE,MAAW,EACpC,WAAW,CAAC,EAAE,WAAW,EACzB,gBAAgB,CAAC,EAAE,gBAAgB;IAarC;;OAEG;IACH,SAAS,CAAC,MAAM,EAAE,CAAC,OAAO,EAAE,MAAM,EAAE,KAAK,CAAC,EAAE,KAAK,GAAG,OAAO,GAAG,MAAM,KAAK,IAAI,GAAG,IAAI;IAIpF;;OAEG;IACH,OAAO,CAAC,GAAG;IAOX;;OAEG;IACG,UAAU,IAAI,OAAO,CAAC,IAAI,CAAC;IAIjC;;;OAGG;IACH,aAAa,CAAC,UAAU,EAAE,UAAU,GAAG,IAAI;IAQ3C;;OAEG;IACG,aAAa,CAAC,OAAO,EAAE,sBAAsB,GAAG,OAAO,CAAC,uBAAuB,CAAC;IAkBtF;;OAEG;YACW,qBAAqB;IAmBnC;;OAEG;IACG,gBAAgB,CAAC,OAAO,EAAE,0BAA0B,GAAG,OAAO,CAAC,2BAA2B,CAAC;IAgCjG;;OAEG;IACH,OAAO,CAAC,qBAAqB;IAsC7B;;OAEG;IACG,KAAK,IAAI,OAAO,CAAC,IAAI,CAAC;IAI5B;;OAEG;IACH,OAAO,IAAI,OAAO;YAIJ,UAAU;YAiIV,eAAe;YAoKf,oBAAoB;IAgBlC,OAAO,CAAC,4BAA4B;YA8CtB,iBAAiB;YAiVjB,eAAe;IA0B7B;;OAEG;IACH,OAAO,CAAC,aAAa;YAeP,oBAAoB;YAoDpB,oBAAoB;YAiBpB,mBAAmB;IAcjC,OAAO,CAAC,mBAAmB;IA4B3B,OAAO,CAAC,yBAAyB;YA0CnB,0BAA0B;YAkF1B,iBAAiB;IA0D/B,OAAO,CAAC,qBAAqB;IAyB7B;;OAEG;YACW,iBAAiB;IAI/B;;OAEG;IACH,OAAO,CAAC,kBAAkB;CAkC3B"}
@@ -186,12 +186,67 @@ class ExecutionService {
186
186
  if (!request.script) {
187
187
  throw new Error('Script content is required for execution. The TestChimpService should read the file and provide script content.');
188
188
  }
189
+ // Check if we should use existing browser or create new one
190
+ const useExistingBrowser = !!(request.existingBrowser && request.existingContext && request.existingPage);
191
+ if (useExistingBrowser) {
192
+ this.log('Using existing browser/page provided by caller');
193
+ // Single attempt with existing browser
194
+ const browser = request.existingBrowser;
195
+ const context = request.existingContext;
196
+ const page = request.existingPage;
197
+ try {
198
+ // LIFECYCLE: Call beforeStartTest if provided
199
+ if (this.progressReporter?.beforeStartTest) {
200
+ await this.progressReporter.beforeStartTest(page, browser, context);
201
+ }
202
+ // Execute the script as-is
203
+ await this.executeScriptContent(request.script, page);
204
+ // LIFECYCLE: Call afterEndTest on success
205
+ if (this.progressReporter?.afterEndTest) {
206
+ await this.progressReporter.afterEndTest('passed', undefined, page);
207
+ }
208
+ // Don't close browser - caller owns it
209
+ return {
210
+ run_status: 'success',
211
+ num_deflake_runs: 0,
212
+ executionTime: Date.now() - startTime
213
+ };
214
+ }
215
+ catch (error) {
216
+ lastError = error instanceof Error ? error : new Error('Script execution failed');
217
+ this.log(`Execution failed: ${lastError.message}`);
218
+ // LIFECYCLE: Call afterEndTest on failure
219
+ if (this.progressReporter?.afterEndTest) {
220
+ try {
221
+ await this.progressReporter.afterEndTest('failed', lastError.message, page);
222
+ }
223
+ catch (callbackError) {
224
+ this.log(`afterEndTest callback failed: ${callbackError}`, 'warn');
225
+ }
226
+ }
227
+ return {
228
+ run_status: 'failed',
229
+ num_deflake_runs: 0,
230
+ executionTime: Date.now() - startTime,
231
+ error: lastError.message
232
+ };
233
+ }
234
+ }
235
+ // Create our own browser (original behavior)
189
236
  for (let attempt = 1; attempt <= totalAttempts; attempt++) {
190
237
  this.log(`Attempting deflake run ${attempt}/${totalAttempts}`);
191
238
  const { browser, context, page } = await this.initializeBrowser(request.playwrightConfig, request.headless, request.playwrightConfigFilePath);
192
239
  try {
240
+ // LIFECYCLE: Call beforeStartTest if provided
241
+ if (this.progressReporter?.beforeStartTest) {
242
+ await this.progressReporter.beforeStartTest(page, browser, context);
243
+ }
193
244
  // Execute the script as-is
194
245
  await this.executeScriptContent(request.script, page);
246
+ // LIFECYCLE: Call afterEndTest on success
247
+ if (this.progressReporter?.afterEndTest) {
248
+ await this.progressReporter.afterEndTest('passed', undefined, page);
249
+ }
195
250
  await browser.close();
196
251
  // Success! Return immediately
197
252
  return {
@@ -203,6 +258,15 @@ class ExecutionService {
203
258
  catch (error) {
204
259
  lastError = error instanceof Error ? error : new Error('Script execution failed');
205
260
  this.log(`Initial run failed: ${lastError.message}`);
261
+ // LIFECYCLE: Call afterEndTest on failure
262
+ if (this.progressReporter?.afterEndTest) {
263
+ try {
264
+ await this.progressReporter.afterEndTest('failed', lastError.message, page);
265
+ }
266
+ catch (callbackError) {
267
+ this.log(`afterEndTest callback failed: ${callbackError}`, 'warn');
268
+ }
269
+ }
206
270
  try {
207
271
  await browser.close();
208
272
  }
@@ -231,6 +295,8 @@ class ExecutionService {
231
295
  if (!request.script) {
232
296
  throw new Error('Script content is required for AI repair. The TestChimpService should read the file and provide script content.');
233
297
  }
298
+ // Check if we should use existing browser
299
+ const useExistingBrowser = !!(request.existingBrowser && request.existingContext && request.existingPage);
234
300
  // First, try runExactly (which includes deflaking if configured)
235
301
  this.log('Attempting runExactly first (with deflaking if configured)...');
236
302
  const runExactlyResult = await this.runExactly(request, startTime, model);
@@ -241,14 +307,40 @@ class ExecutionService {
241
307
  // runExactly failed, start AI repair
242
308
  this.log('runExactly failed, starting AI repair process...');
243
309
  try {
244
- // Start browser initialization and script parsing in parallel for faster startup
245
- this.log('Initializing repair browser and parsing script...');
246
- const [steps, { browser: repairBrowser, context: repairContext, page: repairPage }] = await Promise.all([
247
- this.parseScriptIntoSteps(request.script, model),
248
- this.initializeBrowser(request.playwrightConfig, request.headless, request.playwrightConfigFilePath) // Use request.headless (defaults to false/headed)
249
- ]);
250
- this.log('Starting AI repair with parsed steps...');
251
- const updatedSteps = await this.repairStepsWithAI(steps, repairPage, repairFlexibility, model);
310
+ let repairBrowser, repairContext, repairPage, steps, updatedSteps;
311
+ if (useExistingBrowser) {
312
+ // Use existing browser
313
+ this.log('Using existing browser for AI repair...');
314
+ repairBrowser = request.existingBrowser;
315
+ repairContext = request.existingContext;
316
+ repairPage = request.existingPage;
317
+ // Parse script into steps
318
+ steps = await this.parseScriptIntoSteps(request.script, model);
319
+ // LIFECYCLE: Call beforeStartTest if provided
320
+ if (this.progressReporter?.beforeStartTest) {
321
+ await this.progressReporter.beforeStartTest(repairPage, repairBrowser, repairContext);
322
+ }
323
+ this.log('Starting AI repair with parsed steps...');
324
+ updatedSteps = await this.repairStepsWithAI(steps, repairPage, repairFlexibility, model);
325
+ }
326
+ else {
327
+ // Start browser initialization and script parsing in parallel for faster startup
328
+ this.log('Initializing repair browser and parsing script...');
329
+ const results = await Promise.all([
330
+ this.parseScriptIntoSteps(request.script, model),
331
+ this.initializeBrowser(request.playwrightConfig, request.headless, request.playwrightConfigFilePath) // Use request.headless (defaults to false/headed)
332
+ ]);
333
+ steps = results[0];
334
+ repairBrowser = results[1].browser;
335
+ repairContext = results[1].context;
336
+ repairPage = results[1].page;
337
+ // LIFECYCLE: Call beforeStartTest if provided
338
+ if (this.progressReporter?.beforeStartTest) {
339
+ await this.progressReporter.beforeStartTest(repairPage, repairBrowser, repairContext);
340
+ }
341
+ this.log('Starting AI repair with parsed steps...');
342
+ updatedSteps = await this.repairStepsWithAI(steps, repairPage, repairFlexibility, model);
343
+ }
252
344
  // Always generate the updated script
253
345
  const updatedScript = this.generateUpdatedScript(updatedSteps);
254
346
  // Check if repair was successful by seeing if we completed all steps
@@ -273,7 +365,19 @@ class ExecutionService {
273
365
  this.creditUsageService.reportAIRepairCredit().catch(error => {
274
366
  this.log(`Failed to report credit usage for AI repair: ${error}`, 'warn');
275
367
  });
276
- await repairBrowser.close();
368
+ // LIFECYCLE: Call afterEndTest (partial or complete success)
369
+ if (this.progressReporter?.afterEndTest) {
370
+ try {
371
+ await this.progressReporter.afterEndTest(allStepsSuccessful ? 'passed' : 'failed', allStepsSuccessful ? undefined : 'Partial repair success', repairPage);
372
+ }
373
+ catch (callbackError) {
374
+ this.log(`afterEndTest callback failed: ${callbackError}`, 'warn');
375
+ }
376
+ }
377
+ // Only close browser if we created it (not provided by caller)
378
+ if (!useExistingBrowser) {
379
+ await repairBrowser.close();
380
+ }
277
381
  return {
278
382
  run_status: 'failed', // Original script failed
279
383
  repair_status: allStepsSuccessful ? 'success' : 'partial', // Complete or partial repair success
@@ -286,7 +390,19 @@ class ExecutionService {
286
390
  }
287
391
  else {
288
392
  // No successful repairs at all
289
- await repairBrowser.close();
393
+ // LIFECYCLE: Call afterEndTest (complete failure)
394
+ if (this.progressReporter?.afterEndTest) {
395
+ try {
396
+ await this.progressReporter.afterEndTest('failed', 'AI repair could not fix any steps', repairPage);
397
+ }
398
+ catch (callbackError) {
399
+ this.log(`afterEndTest callback failed: ${callbackError}`, 'warn');
400
+ }
401
+ }
402
+ // Only close browser if we created it (not provided by caller)
403
+ if (!useExistingBrowser) {
404
+ await repairBrowser.close();
405
+ }
290
406
  return {
291
407
  run_status: 'failed', // Original script failed
292
408
  repair_status: 'failed',
@@ -377,6 +493,14 @@ class ExecutionService {
377
493
  const step = updatedSteps[i];
378
494
  this.log(`Loop iteration: i=${i}, step description="${step.description}", total steps=${updatedSteps.length}`);
379
495
  try {
496
+ // LIFECYCLE: Call beforeStepStart if provided
497
+ if (this.progressReporter?.beforeStepStart) {
498
+ await this.progressReporter.beforeStepStart({
499
+ stepNumber: i + 1,
500
+ description: step.description,
501
+ code: step.code
502
+ }, page);
503
+ }
380
504
  // Try to execute the step directly without context replay
381
505
  this.log(`Attempting Step ${i + 1}: ${step.description}`);
382
506
  this.log(` Code: ${step.code}`);