testchimp-runner-core 0.0.11 → 0.0.13

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.
@@ -0,0 +1,40 @@
1
+ import { AuthConfig } from './auth-config';
2
+ export declare enum CreditUsageReason {
3
+ UNKNOWN_CREDIT_USAGE_REASON = 0,
4
+ EXPLORER_STEP = 1,
5
+ TEST_REPAIR = 2,
6
+ SCRIPT_GENERATE = 3
7
+ }
8
+ export interface InsertCreditUsageRequest {
9
+ credits?: number;
10
+ usage_reason?: CreditUsageReason;
11
+ job_id?: string;
12
+ }
13
+ export interface InsertCreditUsageResponse {
14
+ }
15
+ export declare class CreditUsageService {
16
+ private backendUrl;
17
+ private authConfig;
18
+ constructor(authConfig?: AuthConfig, backendUrl?: string);
19
+ /**
20
+ * Update authentication configuration
21
+ */
22
+ setAuthConfig(authConfig: AuthConfig): void;
23
+ /**
24
+ * Get current authentication configuration
25
+ */
26
+ getAuthConfig(): AuthConfig | null;
27
+ /**
28
+ * Report credit usage to the backend
29
+ */
30
+ reportCreditUsage(credits: number | undefined, usageReason: CreditUsageReason, jobId?: string): Promise<InsertCreditUsageResponse>;
31
+ /**
32
+ * Report script generation credit usage
33
+ */
34
+ reportScriptGenerationCredit(jobId?: string): Promise<void>;
35
+ /**
36
+ * Report AI repair credit usage
37
+ */
38
+ reportAIRepairCredit(jobId?: string): Promise<void>;
39
+ }
40
+ //# sourceMappingURL=credit-usage-service.d.ts.map
@@ -0,0 +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;AAE3D,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;gBAE1B,UAAU,CAAC,EAAE,UAAU,EAAE,UAAU,CAAC,EAAE,MAAM;IAcxD;;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"}
@@ -0,0 +1,99 @@
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.CreditUsageService = exports.CreditUsageReason = void 0;
7
+ const axios_1 = __importDefault(require("axios"));
8
+ const auth_config_1 = require("./auth-config");
9
+ var CreditUsageReason;
10
+ (function (CreditUsageReason) {
11
+ CreditUsageReason[CreditUsageReason["UNKNOWN_CREDIT_USAGE_REASON"] = 0] = "UNKNOWN_CREDIT_USAGE_REASON";
12
+ CreditUsageReason[CreditUsageReason["EXPLORER_STEP"] = 1] = "EXPLORER_STEP";
13
+ CreditUsageReason[CreditUsageReason["TEST_REPAIR"] = 2] = "TEST_REPAIR";
14
+ CreditUsageReason[CreditUsageReason["SCRIPT_GENERATE"] = 3] = "SCRIPT_GENERATE";
15
+ })(CreditUsageReason || (exports.CreditUsageReason = CreditUsageReason = {}));
16
+ class CreditUsageService {
17
+ constructor(authConfig, backendUrl) {
18
+ // Use provided backend URL or fall back to environment configuration
19
+ if (backendUrl) {
20
+ this.backendUrl = backendUrl;
21
+ }
22
+ else {
23
+ // Fall back to environment configuration for backward compatibility
24
+ const { loadEnvConfig } = require('./env-config');
25
+ const envConfig = loadEnvConfig();
26
+ this.backendUrl = envConfig.TESTCHIMP_BACKEND_URL;
27
+ }
28
+ this.authConfig = authConfig || null;
29
+ }
30
+ /**
31
+ * Update authentication configuration
32
+ */
33
+ setAuthConfig(authConfig) {
34
+ this.authConfig = authConfig;
35
+ }
36
+ /**
37
+ * Get current authentication configuration
38
+ */
39
+ getAuthConfig() {
40
+ return this.authConfig;
41
+ }
42
+ /**
43
+ * Report credit usage to the backend
44
+ */
45
+ async reportCreditUsage(credits = 1, usageReason, jobId) {
46
+ if (!this.authConfig) {
47
+ throw new Error('Authentication not configured. Please set authentication credentials.');
48
+ }
49
+ try {
50
+ const authHeaders = (0, auth_config_1.getAuthHeaders)(this.authConfig);
51
+ const url = `${this.backendUrl}/localagent/insert_credit_usage`;
52
+ const request = {
53
+ credits,
54
+ usage_reason: usageReason,
55
+ job_id: jobId
56
+ };
57
+ const response = await axios_1.default.post(url, request, {
58
+ headers: {
59
+ ...authHeaders,
60
+ 'Content-Type': 'application/json'
61
+ },
62
+ timeout: 10000 // 10 second timeout for credit usage calls
63
+ });
64
+ return response.data;
65
+ }
66
+ catch (error) {
67
+ console.error('Credit usage report failed:', error);
68
+ throw new Error(`Credit usage report failed: ${error.message}`);
69
+ }
70
+ }
71
+ /**
72
+ * Report script generation credit usage
73
+ */
74
+ async reportScriptGenerationCredit(jobId) {
75
+ try {
76
+ await this.reportCreditUsage(1, CreditUsageReason.SCRIPT_GENERATE, jobId);
77
+ console.log(`Credit usage reported for script generation${jobId ? ` (job: ${jobId})` : ''}`);
78
+ }
79
+ catch (error) {
80
+ console.error('Failed to report script generation credit usage:', error);
81
+ // Don't throw - credit reporting should not break the main flow
82
+ }
83
+ }
84
+ /**
85
+ * Report AI repair credit usage
86
+ */
87
+ async reportAIRepairCredit(jobId) {
88
+ try {
89
+ await this.reportCreditUsage(1, CreditUsageReason.TEST_REPAIR, jobId);
90
+ console.log(`Credit usage reported for AI repair${jobId ? ` (job: ${jobId})` : ''}`);
91
+ }
92
+ catch (error) {
93
+ console.error('Failed to report AI repair credit usage:', error);
94
+ // Don't throw - credit reporting should not break the main flow
95
+ }
96
+ }
97
+ }
98
+ exports.CreditUsageService = CreditUsageService;
99
+ //# sourceMappingURL=credit-usage-service.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"credit-usage-service.js","sourceRoot":"","sources":["../src/credit-usage-service.ts"],"names":[],"mappings":"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"}
package/dist/index.d.ts CHANGED
@@ -8,7 +8,8 @@ import { ScenarioWorker } from './scenario-worker-class';
8
8
  import { PlaywrightMCPService } from './playwright-mcp-service';
9
9
  import { LLMFacade } from './llm-facade';
10
10
  import { AuthConfig } from './auth-config';
11
- export { ExecutionService, ScenarioService, ScenarioWorker, PlaywrightMCPService, LLMFacade };
11
+ import { CreditUsageService } from './credit-usage-service';
12
+ export { ExecutionService, ScenarioService, ScenarioWorker, PlaywrightMCPService, LLMFacade, CreditUsageService };
12
13
  import { FileHandler, LocalFileHandler, CIFileHandler, NoOpFileHandler } from './file-handler';
13
14
  export { FileHandler, LocalFileHandler, CIFileHandler, NoOpFileHandler };
14
15
  export * from './types';
@@ -20,6 +21,7 @@ export declare class TestChimpService {
20
21
  scenarioService: ScenarioService;
21
22
  private playwrightService;
22
23
  private llmFacade;
24
+ private creditUsageService;
23
25
  private fileHandler;
24
26
  private authConfig;
25
27
  private backendUrl;
@@ -41,6 +43,8 @@ export declare class TestChimpService {
41
43
  generateScript(scenario: string, testName?: string, config?: string, model?: string, scenarioFileName?: string): Promise<string>;
42
44
  executeScript(request: any): Promise<any>;
43
45
  executeScriptWithAIRepair(request: any): Promise<any>;
46
+ reportScriptGenerationCredit(jobId?: string): Promise<void>;
47
+ reportAIRepairCredit(jobId?: string): Promise<void>;
44
48
  findTestChimpTests(directory: string, recursive?: boolean): string[];
45
49
  }
46
50
  //# sourceMappingURL=index.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAGH,OAAO,EAAE,gBAAgB,EAAE,MAAM,qBAAqB,CAAC;AACvD,OAAO,EAAE,eAAe,EAAE,MAAM,oBAAoB,CAAC;AACrD,OAAO,EAAE,cAAc,EAAE,MAAM,yBAAyB,CAAC;AACzD,OAAO,EAAE,oBAAoB,EAAE,MAAM,0BAA0B,CAAC;AAChE,OAAO,EAAE,SAAS,EAAE,MAAM,cAAc,CAAC;AACzC,OAAO,EAAE,UAAU,EAAE,MAAM,eAAe,CAAC;AAE3C,OAAO,EAAE,gBAAgB,EAAE,eAAe,EAAE,cAAc,EAAE,oBAAoB,EAAE,SAAS,EAAE,CAAC;AAG9F,OAAO,EAAE,WAAW,EAAE,gBAAgB,EAAE,aAAa,EAAE,eAAe,EAAE,MAAM,gBAAgB,CAAC;AAC/F,OAAO,EAAE,WAAW,EAAE,gBAAgB,EAAE,aAAa,EAAE,eAAe,EAAE,CAAC;AAGzE,cAAc,SAAS,CAAC;AAGxB,cAAc,eAAe,CAAC;AAG9B,OAAO,EAAE,aAAa,EAAE,MAAM,cAAc,CAAC;AAG7C,cAAc,gBAAgB,CAAC;AAG/B,qBAAa,gBAAgB;IAC3B,OAAO,CAAC,gBAAgB,CAAmB;IACpC,eAAe,EAAE,eAAe,CAAC;IACxC,OAAO,CAAC,iBAAiB,CAAuB;IAChD,OAAO,CAAC,SAAS,CAAY;IAC7B,OAAO,CAAC,WAAW,CAAc;IACjC,OAAO,CAAC,UAAU,CAAoB;IACtC,OAAO,CAAC,UAAU,CAAS;gBAEf,WAAW,CAAC,EAAE,WAAW,EAAE,UAAU,CAAC,EAAE,UAAU,EAAE,UAAU,CAAC,EAAE,MAAM,EAAE,UAAU,CAAC,EAAE,MAAM;IAUxG;;OAEG;IACG,aAAa,CAAC,UAAU,EAAE,UAAU,GAAG,OAAO,CAAC,IAAI,CAAC;IAa1D;;OAEG;IACH,aAAa,CAAC,UAAU,EAAE,MAAM,GAAG,IAAI;IAMvC;;OAEG;IACH,aAAa,IAAI,UAAU,GAAG,IAAI;IAI5B,UAAU,IAAI,OAAO,CAAC,IAAI,CAAC;IAM3B,QAAQ,IAAI,OAAO,CAAC,IAAI,CAAC;IAKzB,cAAc,CAAC,QAAQ,EAAE,MAAM,EAAE,QAAQ,CAAC,EAAE,MAAM,EAAE,MAAM,CAAC,EAAE,MAAM,EAAE,KAAK,CAAC,EAAE,MAAM,EAAE,gBAAgB,CAAC,EAAE,MAAM,GAAG,OAAO,CAAC,MAAM,CAAC;IAKhI,aAAa,CAAC,OAAO,EAAE,GAAG,GAAG,OAAO,CAAC,GAAG,CAAC;IA4CzC,yBAAyB,CAAC,OAAO,EAAE,GAAG,GAAG,OAAO,CAAC,GAAG,CAAC;IAM3D,kBAAkB,CAAC,SAAS,EAAE,MAAM,EAAE,SAAS,GAAE,OAAc,GAAG,MAAM,EAAE;CAuD3E"}
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAGH,OAAO,EAAE,gBAAgB,EAAE,MAAM,qBAAqB,CAAC;AACvD,OAAO,EAAE,eAAe,EAAE,MAAM,oBAAoB,CAAC;AACrD,OAAO,EAAE,cAAc,EAAE,MAAM,yBAAyB,CAAC;AACzD,OAAO,EAAE,oBAAoB,EAAE,MAAM,0BAA0B,CAAC;AAChE,OAAO,EAAE,SAAS,EAAE,MAAM,cAAc,CAAC;AACzC,OAAO,EAAE,UAAU,EAAE,MAAM,eAAe,CAAC;AAC3C,OAAO,EAAE,kBAAkB,EAAE,MAAM,wBAAwB,CAAC;AAE5D,OAAO,EAAE,gBAAgB,EAAE,eAAe,EAAE,cAAc,EAAE,oBAAoB,EAAE,SAAS,EAAE,kBAAkB,EAAE,CAAC;AAGlH,OAAO,EAAE,WAAW,EAAE,gBAAgB,EAAE,aAAa,EAAE,eAAe,EAAE,MAAM,gBAAgB,CAAC;AAC/F,OAAO,EAAE,WAAW,EAAE,gBAAgB,EAAE,aAAa,EAAE,eAAe,EAAE,CAAC;AAGzE,cAAc,SAAS,CAAC;AAGxB,cAAc,eAAe,CAAC;AAG9B,OAAO,EAAE,aAAa,EAAE,MAAM,cAAc,CAAC;AAG7C,cAAc,gBAAgB,CAAC;AAG/B,qBAAa,gBAAgB;IAC3B,OAAO,CAAC,gBAAgB,CAAmB;IACpC,eAAe,EAAE,eAAe,CAAC;IACxC,OAAO,CAAC,iBAAiB,CAAuB;IAChD,OAAO,CAAC,SAAS,CAAY;IAC7B,OAAO,CAAC,kBAAkB,CAAqB;IAC/C,OAAO,CAAC,WAAW,CAAc;IACjC,OAAO,CAAC,UAAU,CAAoB;IACtC,OAAO,CAAC,UAAU,CAAS;gBAEf,WAAW,CAAC,EAAE,WAAW,EAAE,UAAU,CAAC,EAAE,UAAU,EAAE,UAAU,CAAC,EAAE,MAAM,EAAE,UAAU,CAAC,EAAE,MAAM;IAWxG;;OAEG;IACG,aAAa,CAAC,UAAU,EAAE,UAAU,GAAG,OAAO,CAAC,IAAI,CAAC;IAc1D;;OAEG;IACH,aAAa,CAAC,UAAU,EAAE,MAAM,GAAG,IAAI;IAOvC;;OAEG;IACH,aAAa,IAAI,UAAU,GAAG,IAAI;IAI5B,UAAU,IAAI,OAAO,CAAC,IAAI,CAAC;IAM3B,QAAQ,IAAI,OAAO,CAAC,IAAI,CAAC;IAKzB,cAAc,CAAC,QAAQ,EAAE,MAAM,EAAE,QAAQ,CAAC,EAAE,MAAM,EAAE,MAAM,CAAC,EAAE,MAAM,EAAE,KAAK,CAAC,EAAE,MAAM,EAAE,gBAAgB,CAAC,EAAE,MAAM,GAAG,OAAO,CAAC,MAAM,CAAC;IAKhI,aAAa,CAAC,OAAO,EAAE,GAAG,GAAG,OAAO,CAAC,GAAG,CAAC;IA4CzC,yBAAyB,CAAC,OAAO,EAAE,GAAG,GAAG,OAAO,CAAC,GAAG,CAAC;IAMrD,4BAA4B,CAAC,KAAK,CAAC,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC;IAI3D,oBAAoB,CAAC,KAAK,CAAC,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC;IAKzD,kBAAkB,CAAC,SAAS,EAAE,MAAM,EAAE,SAAS,GAAE,OAAc,GAAG,MAAM,EAAE;CAuD3E"}
package/dist/index.js CHANGED
@@ -18,7 +18,7 @@ var __exportStar = (this && this.__exportStar) || function(m, exports) {
18
18
  for (var p in m) if (p !== "default" && !Object.prototype.hasOwnProperty.call(exports, p)) __createBinding(exports, m, p);
19
19
  };
20
20
  Object.defineProperty(exports, "__esModule", { value: true });
21
- exports.TestChimpService = exports.loadEnvConfig = exports.NoOpFileHandler = exports.CIFileHandler = exports.LocalFileHandler = exports.LLMFacade = exports.PlaywrightMCPService = exports.ScenarioWorker = exports.ScenarioService = exports.ExecutionService = void 0;
21
+ exports.TestChimpService = exports.loadEnvConfig = exports.NoOpFileHandler = exports.CIFileHandler = exports.LocalFileHandler = exports.CreditUsageService = exports.LLMFacade = exports.PlaywrightMCPService = exports.ScenarioWorker = exports.ScenarioService = exports.ExecutionService = void 0;
22
22
  // Core services
23
23
  const execution_service_1 = require("./execution-service");
24
24
  Object.defineProperty(exports, "ExecutionService", { enumerable: true, get: function () { return execution_service_1.ExecutionService; } });
@@ -30,6 +30,8 @@ const playwright_mcp_service_1 = require("./playwright-mcp-service");
30
30
  Object.defineProperty(exports, "PlaywrightMCPService", { enumerable: true, get: function () { return playwright_mcp_service_1.PlaywrightMCPService; } });
31
31
  const llm_facade_1 = require("./llm-facade");
32
32
  Object.defineProperty(exports, "LLMFacade", { enumerable: true, get: function () { return llm_facade_1.LLMFacade; } });
33
+ const credit_usage_service_1 = require("./credit-usage-service");
34
+ Object.defineProperty(exports, "CreditUsageService", { enumerable: true, get: function () { return credit_usage_service_1.CreditUsageService; } });
33
35
  // File handlers
34
36
  const file_handler_1 = require("./file-handler");
35
37
  Object.defineProperty(exports, "LocalFileHandler", { enumerable: true, get: function () { return file_handler_1.LocalFileHandler; } });
@@ -52,6 +54,7 @@ class TestChimpService {
52
54
  this.backendUrl = backendUrl || 'https://featureservice.testchimp.io'; // Default to production
53
55
  this.playwrightService = new playwright_mcp_service_1.PlaywrightMCPService();
54
56
  this.llmFacade = new llm_facade_1.LLMFacade(this.authConfig || undefined, this.backendUrl);
57
+ this.creditUsageService = new credit_usage_service_1.CreditUsageService(this.authConfig || undefined, this.backendUrl);
55
58
  this.executionService = new execution_service_1.ExecutionService(this.authConfig || undefined, this.backendUrl, maxWorkers || 10);
56
59
  this.scenarioService = new scenario_service_1.ScenarioService(maxWorkers || 2, this.fileHandler, this.authConfig || undefined, this.backendUrl);
57
60
  }
@@ -61,6 +64,7 @@ class TestChimpService {
61
64
  async setAuthConfig(authConfig) {
62
65
  this.authConfig = authConfig;
63
66
  this.llmFacade.setAuthConfig(authConfig);
67
+ this.creditUsageService.setAuthConfig(authConfig);
64
68
  // Recreate services with new auth config to ensure all workers get the updated config
65
69
  this.executionService = new execution_service_1.ExecutionService(this.authConfig, this.backendUrl, 10);
66
70
  this.scenarioService = new scenario_service_1.ScenarioService(2, this.fileHandler, this.authConfig, this.backendUrl);
@@ -73,8 +77,9 @@ class TestChimpService {
73
77
  */
74
78
  setBackendUrl(backendUrl) {
75
79
  this.backendUrl = backendUrl;
76
- // Recreate LLM facade with new backend URL
80
+ // Recreate services with new backend URL
77
81
  this.llmFacade = new llm_facade_1.LLMFacade(this.authConfig || undefined, this.backendUrl);
82
+ this.creditUsageService = new credit_usage_service_1.CreditUsageService(this.authConfig || undefined, this.backendUrl);
78
83
  }
79
84
  /**
80
85
  * Get current authentication configuration
@@ -141,6 +146,13 @@ class TestChimpService {
141
146
  const repairRequest = { ...request, mode: 'RUN_WITH_AI_REPAIR' };
142
147
  return this.executeScript(repairRequest);
143
148
  }
149
+ // Credit usage reporting methods
150
+ async reportScriptGenerationCredit(jobId) {
151
+ return this.creditUsageService.reportScriptGenerationCredit(jobId);
152
+ }
153
+ async reportAIRepairCredit(jobId) {
154
+ return this.creditUsageService.reportAIRepairCredit(jobId);
155
+ }
144
156
  // Find TestChimp managed tests
145
157
  findTestChimpTests(directory, recursive = true) {
146
158
  const fs = require('fs');
package/dist/index.js.map CHANGED
@@ -1 +1 @@
1
- {"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"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"}
@@ -13,6 +13,7 @@ export declare class ScenarioService extends EventEmitter {
13
13
  private fileHandler;
14
14
  private authConfig;
15
15
  private backendUrl?;
16
+ private creditUsageService;
16
17
  constructor(maxWorkers?: number, fileHandler?: FileHandler, authConfig?: AuthConfig, backendUrl?: string);
17
18
  private initializeWorkers;
18
19
  private createWorker;
@@ -1 +1 @@
1
- {"version":3,"file":"scenario-service.d.ts","sourceRoot":"","sources":["../src/scenario-service.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,YAAY,EAAE,MAAM,QAAQ,CAAC;AAEtC,OAAO,EAAiD,gBAAgB,EAAE,MAAM,SAAS,CAAC;AAE1F,OAAO,EAAE,WAAW,EAAmB,MAAM,gBAAgB,CAAC;AAC9D,OAAO,EAAE,UAAU,EAAE,MAAM,eAAe,CAAC;AAK3C;;GAEG;AACH,qBAAa,eAAgB,SAAQ,YAAY;IAC/C,OAAO,CAAC,OAAO,CAAwB;IACvC,OAAO,CAAC,QAAQ,CAAwB;IACxC,OAAO,CAAC,WAAW,CAAkC;IACrD,OAAO,CAAC,UAAU,CAAS;IAC3B,OAAO,CAAC,WAAW,CAAc;IACjC,OAAO,CAAC,UAAU,CAAoB;IACtC,OAAO,CAAC,UAAU,CAAC,CAAS;gBAEhB,UAAU,GAAE,MAAU,EAAE,WAAW,CAAC,EAAE,WAAW,EAAE,UAAU,CAAC,EAAE,UAAU,EAAE,UAAU,CAAC,EAAE,MAAM;YAQ7F,iBAAiB;YAMjB,YAAY;IAOpB,UAAU,IAAI,OAAO,CAAC,IAAI,CAAC;IAMjC,eAAe,CAAC,QAAQ,EAAE,MAAM,EAAE,QAAQ,CAAC,EAAE,MAAM,EAAE,MAAM,CAAC,EAAE,gBAAgB,EAAE,KAAK,CAAC,EAAE,MAAM,EAAE,gBAAgB,CAAC,EAAE,MAAM,GAAG,MAAM;YAmBpH,cAAc;IA0C5B,OAAO,CAAC,eAAe;IASvB,OAAO,CAAC,cAAc;IAShB,QAAQ,IAAI,OAAO,CAAC,IAAI,CAAC;CAWhC"}
1
+ {"version":3,"file":"scenario-service.d.ts","sourceRoot":"","sources":["../src/scenario-service.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,YAAY,EAAE,MAAM,QAAQ,CAAC;AAEtC,OAAO,EAAiD,gBAAgB,EAAE,MAAM,SAAS,CAAC;AAE1F,OAAO,EAAE,WAAW,EAAmB,MAAM,gBAAgB,CAAC;AAC9D,OAAO,EAAE,UAAU,EAAE,MAAM,eAAe,CAAC;AAM3C;;GAEG;AACH,qBAAa,eAAgB,SAAQ,YAAY;IAC/C,OAAO,CAAC,OAAO,CAAwB;IACvC,OAAO,CAAC,QAAQ,CAAwB;IACxC,OAAO,CAAC,WAAW,CAAkC;IACrD,OAAO,CAAC,UAAU,CAAS;IAC3B,OAAO,CAAC,WAAW,CAAc;IACjC,OAAO,CAAC,UAAU,CAAoB;IACtC,OAAO,CAAC,UAAU,CAAC,CAAS;IAC5B,OAAO,CAAC,kBAAkB,CAAqB;gBAEnC,UAAU,GAAE,MAAU,EAAE,WAAW,CAAC,EAAE,WAAW,EAAE,UAAU,CAAC,EAAE,UAAU,EAAE,UAAU,CAAC,EAAE,MAAM;YAS7F,iBAAiB;YAMjB,YAAY;IAOpB,UAAU,IAAI,OAAO,CAAC,IAAI,CAAC;IAMjC,eAAe,CAAC,QAAQ,EAAE,MAAM,EAAE,QAAQ,CAAC,EAAE,MAAM,EAAE,MAAM,CAAC,EAAE,gBAAgB,EAAE,KAAK,CAAC,EAAE,MAAM,EAAE,gBAAgB,CAAC,EAAE,MAAM,GAAG,MAAM;YAmBpH,cAAc;IA0C5B,OAAO,CAAC,eAAe;IAgBvB,OAAO,CAAC,cAAc;IAShB,QAAQ,IAAI,OAAO,CAAC,IAAI,CAAC;CAWhC"}
@@ -8,6 +8,7 @@ const events_1 = require("events");
8
8
  const dotenv_1 = __importDefault(require("dotenv"));
9
9
  const scenario_worker_class_1 = require("./scenario-worker-class");
10
10
  const file_handler_1 = require("./file-handler");
11
+ const credit_usage_service_1 = require("./credit-usage-service");
11
12
  // Load environment variables
12
13
  dotenv_1.default.config();
13
14
  /**
@@ -23,6 +24,7 @@ class ScenarioService extends events_1.EventEmitter {
23
24
  this.fileHandler = fileHandler || new file_handler_1.NoOpFileHandler();
24
25
  this.authConfig = authConfig || null;
25
26
  this.backendUrl = backendUrl;
27
+ this.creditUsageService = new credit_usage_service_1.CreditUsageService(authConfig, backendUrl);
26
28
  }
27
29
  async initializeWorkers() {
28
30
  for (let i = 0; i < this.maxWorkers; i++) {
@@ -93,6 +95,12 @@ class ScenarioService extends events_1.EventEmitter {
93
95
  }
94
96
  }
95
97
  handleJobResult(jobId, result) {
98
+ // Report credit usage for successful script generation
99
+ if (result.success) {
100
+ this.creditUsageService.reportScriptGenerationCredit(jobId).catch(error => {
101
+ console.warn(`Failed to report credit usage for script generation (job: ${jobId}):`, error);
102
+ });
103
+ }
96
104
  // Emit result event
97
105
  this.emit('jobComplete', jobId, result);
98
106
  // Mark worker as available and process next job
@@ -1 +1 @@
1
- {"version":3,"file":"scenario-service.js","sourceRoot":"","sources":["../src/scenario-service.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"scenario-service.js","sourceRoot":"","sources":["../src/scenario-service.ts"],"names":[],"mappings":"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"}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "testchimp-runner-core",
3
- "version": "0.0.11",
3
+ "version": "0.0.13",
4
4
  "description": "Core TestChimp functionality for test generation and AI repair",
5
5
  "main": "dist/index.js",
6
6
  "types": "dist/index.d.ts",
@@ -14,9 +14,7 @@
14
14
  "dotenv": "^16.3.1",
15
15
  "esbuild": "^0.21.5",
16
16
  "fs-extra": "^11.1.1",
17
- "ws": "^8.14.2"
18
- },
19
- "peerDependencies": {
17
+ "ws": "^8.14.2",
20
18
  "@playwright/test": "^1.40.0",
21
19
  "playwright": "^1.40.0"
22
20
  },
@@ -0,0 +1,115 @@
1
+ import axios from 'axios';
2
+ import { AuthConfig, getAuthHeaders } from './auth-config';
3
+
4
+ export enum CreditUsageReason {
5
+ UNKNOWN_CREDIT_USAGE_REASON = 0,
6
+ EXPLORER_STEP = 1,
7
+ TEST_REPAIR = 2,
8
+ SCRIPT_GENERATE = 3
9
+ }
10
+
11
+ export interface InsertCreditUsageRequest {
12
+ credits?: number;
13
+ usage_reason?: CreditUsageReason;
14
+ job_id?: string;
15
+ }
16
+
17
+ export interface InsertCreditUsageResponse {
18
+ // Empty response as per the protobuf definition
19
+ }
20
+
21
+ export class CreditUsageService {
22
+ private backendUrl: string;
23
+ private authConfig: AuthConfig | null;
24
+
25
+ constructor(authConfig?: AuthConfig, backendUrl?: string) {
26
+ // Use provided backend URL or fall back to environment configuration
27
+ if (backendUrl) {
28
+ this.backendUrl = backendUrl;
29
+ } else {
30
+ // Fall back to environment configuration for backward compatibility
31
+ const { loadEnvConfig } = require('./env-config');
32
+ const envConfig = loadEnvConfig();
33
+ this.backendUrl = envConfig.TESTCHIMP_BACKEND_URL;
34
+ }
35
+
36
+ this.authConfig = authConfig || null;
37
+ }
38
+
39
+ /**
40
+ * Update authentication configuration
41
+ */
42
+ setAuthConfig(authConfig: AuthConfig): void {
43
+ this.authConfig = authConfig;
44
+ }
45
+
46
+ /**
47
+ * Get current authentication configuration
48
+ */
49
+ getAuthConfig(): AuthConfig | null {
50
+ return this.authConfig;
51
+ }
52
+
53
+ /**
54
+ * Report credit usage to the backend
55
+ */
56
+ async reportCreditUsage(
57
+ credits: number = 1,
58
+ usageReason: CreditUsageReason,
59
+ jobId?: string
60
+ ): Promise<InsertCreditUsageResponse> {
61
+ if (!this.authConfig) {
62
+ throw new Error('Authentication not configured. Please set authentication credentials.');
63
+ }
64
+
65
+ try {
66
+ const authHeaders = getAuthHeaders(this.authConfig);
67
+ const url = `${this.backendUrl}/localagent/insert_credit_usage`;
68
+
69
+ const request: InsertCreditUsageRequest = {
70
+ credits,
71
+ usage_reason: usageReason,
72
+ job_id: jobId
73
+ };
74
+
75
+ const response = await axios.post(url, request, {
76
+ headers: {
77
+ ...authHeaders,
78
+ 'Content-Type': 'application/json'
79
+ },
80
+ timeout: 10000 // 10 second timeout for credit usage calls
81
+ });
82
+
83
+ return response.data;
84
+ } catch (error: any) {
85
+ console.error('Credit usage report failed:', error);
86
+ throw new Error(`Credit usage report failed: ${error.message}`);
87
+ }
88
+ }
89
+
90
+ /**
91
+ * Report script generation credit usage
92
+ */
93
+ async reportScriptGenerationCredit(jobId?: string): Promise<void> {
94
+ try {
95
+ await this.reportCreditUsage(1, CreditUsageReason.SCRIPT_GENERATE, jobId);
96
+ console.log(`Credit usage reported for script generation${jobId ? ` (job: ${jobId})` : ''}`);
97
+ } catch (error) {
98
+ console.error('Failed to report script generation credit usage:', error);
99
+ // Don't throw - credit reporting should not break the main flow
100
+ }
101
+ }
102
+
103
+ /**
104
+ * Report AI repair credit usage
105
+ */
106
+ async reportAIRepairCredit(jobId?: string): Promise<void> {
107
+ try {
108
+ await this.reportCreditUsage(1, CreditUsageReason.TEST_REPAIR, jobId);
109
+ console.log(`Credit usage reported for AI repair${jobId ? ` (job: ${jobId})` : ''}`);
110
+ } catch (error) {
111
+ console.error('Failed to report AI repair credit usage:', error);
112
+ // Don't throw - credit reporting should not break the main flow
113
+ }
114
+ }
115
+ }
package/src/index.ts CHANGED
@@ -10,8 +10,9 @@ import { ScenarioWorker } from './scenario-worker-class';
10
10
  import { PlaywrightMCPService } from './playwright-mcp-service';
11
11
  import { LLMFacade } from './llm-facade';
12
12
  import { AuthConfig } from './auth-config';
13
+ import { CreditUsageService } from './credit-usage-service';
13
14
 
14
- export { ExecutionService, ScenarioService, ScenarioWorker, PlaywrightMCPService, LLMFacade };
15
+ export { ExecutionService, ScenarioService, ScenarioWorker, PlaywrightMCPService, LLMFacade, CreditUsageService };
15
16
 
16
17
  // File handlers
17
18
  import { FileHandler, LocalFileHandler, CIFileHandler, NoOpFileHandler } from './file-handler';
@@ -35,6 +36,7 @@ export class TestChimpService {
35
36
  public scenarioService: ScenarioService; // Make public for event listening
36
37
  private playwrightService: PlaywrightMCPService;
37
38
  private llmFacade: LLMFacade;
39
+ private creditUsageService: CreditUsageService;
38
40
  private fileHandler: FileHandler;
39
41
  private authConfig: AuthConfig | null;
40
42
  private backendUrl: string;
@@ -45,6 +47,7 @@ export class TestChimpService {
45
47
  this.backendUrl = backendUrl || 'https://featureservice.testchimp.io'; // Default to production
46
48
  this.playwrightService = new PlaywrightMCPService();
47
49
  this.llmFacade = new LLMFacade(this.authConfig || undefined, this.backendUrl);
50
+ this.creditUsageService = new CreditUsageService(this.authConfig || undefined, this.backendUrl);
48
51
  this.executionService = new ExecutionService(this.authConfig || undefined, this.backendUrl, maxWorkers || 10);
49
52
  this.scenarioService = new ScenarioService(maxWorkers || 2, this.fileHandler, this.authConfig || undefined, this.backendUrl);
50
53
  }
@@ -55,6 +58,7 @@ export class TestChimpService {
55
58
  async setAuthConfig(authConfig: AuthConfig): Promise<void> {
56
59
  this.authConfig = authConfig;
57
60
  this.llmFacade.setAuthConfig(authConfig);
61
+ this.creditUsageService.setAuthConfig(authConfig);
58
62
 
59
63
  // Recreate services with new auth config to ensure all workers get the updated config
60
64
  this.executionService = new ExecutionService(this.authConfig, this.backendUrl, 10);
@@ -70,8 +74,9 @@ export class TestChimpService {
70
74
  */
71
75
  setBackendUrl(backendUrl: string): void {
72
76
  this.backendUrl = backendUrl;
73
- // Recreate LLM facade with new backend URL
77
+ // Recreate services with new backend URL
74
78
  this.llmFacade = new LLMFacade(this.authConfig || undefined, this.backendUrl);
79
+ this.creditUsageService = new CreditUsageService(this.authConfig || undefined, this.backendUrl);
75
80
  }
76
81
 
77
82
  /**
@@ -146,6 +151,15 @@ export class TestChimpService {
146
151
  return this.executeScript(repairRequest);
147
152
  }
148
153
 
154
+ // Credit usage reporting methods
155
+ async reportScriptGenerationCredit(jobId?: string): Promise<void> {
156
+ return this.creditUsageService.reportScriptGenerationCredit(jobId);
157
+ }
158
+
159
+ async reportAIRepairCredit(jobId?: string): Promise<void> {
160
+ return this.creditUsageService.reportAIRepairCredit(jobId);
161
+ }
162
+
149
163
  // Find TestChimp managed tests
150
164
  findTestChimpTests(directory: string, recursive: boolean = true): string[] {
151
165
  const fs = require('fs');
@@ -4,6 +4,7 @@ import { ScenarioJob, ScenarioRunJob, ScenarioResponse, PlaywrightConfig } from
4
4
  import { ScenarioWorker } from './scenario-worker-class';
5
5
  import { FileHandler, NoOpFileHandler } from './file-handler';
6
6
  import { AuthConfig } from './auth-config';
7
+ import { CreditUsageService } from './credit-usage-service';
7
8
 
8
9
  // Load environment variables
9
10
  dotenv.config();
@@ -19,6 +20,7 @@ export class ScenarioService extends EventEmitter {
19
20
  private fileHandler: FileHandler;
20
21
  private authConfig: AuthConfig | null;
21
22
  private backendUrl?: string;
23
+ private creditUsageService: CreditUsageService;
22
24
 
23
25
  constructor(maxWorkers: number = 2, fileHandler?: FileHandler, authConfig?: AuthConfig, backendUrl?: string) {
24
26
  super();
@@ -26,6 +28,7 @@ export class ScenarioService extends EventEmitter {
26
28
  this.fileHandler = fileHandler || new NoOpFileHandler();
27
29
  this.authConfig = authConfig || null;
28
30
  this.backendUrl = backendUrl;
31
+ this.creditUsageService = new CreditUsageService(authConfig, backendUrl);
29
32
  }
30
33
 
31
34
  private async initializeWorkers(): Promise<void> {
@@ -109,6 +112,13 @@ export class ScenarioService extends EventEmitter {
109
112
  }
110
113
 
111
114
  private handleJobResult(jobId: string, result: ScenarioResponse): void {
115
+ // Report credit usage for successful script generation
116
+ if (result.success) {
117
+ this.creditUsageService.reportScriptGenerationCredit(jobId).catch(error => {
118
+ console.warn(`Failed to report credit usage for script generation (job: ${jobId}):`, error);
119
+ });
120
+ }
121
+
112
122
  // Emit result event
113
123
  this.emit('jobComplete', jobId, result);
114
124