@cotestdev/ai-runner 0.0.5 → 0.0.7

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 (164) hide show
  1. package/.github/workflows/playwright.yml +27 -0
  2. package/dist/agents/logger.d.ts.map +1 -0
  3. package/dist/agents/logger.js.map +1 -0
  4. package/dist/{ai-runner/src/agents → agents}/playwright-executor.d.ts +3 -1
  5. package/dist/agents/playwright-executor.d.ts.map +1 -0
  6. package/dist/{ai-runner/src/agents → agents}/playwright-executor.js +74 -18
  7. package/dist/agents/playwright-executor.js.map +1 -0
  8. package/dist/agents/tools/playwright-backend-adapter.d.ts.map +1 -0
  9. package/dist/{ai-runner/src/agents → agents}/tools/playwright-backend-adapter.js +2 -1
  10. package/dist/agents/tools/playwright-backend-adapter.js.map +1 -0
  11. package/dist/agents/types.d.ts.map +1 -0
  12. package/dist/{core-infra/src → agents}/types.js.map +1 -1
  13. package/dist/index.d.ts.map +1 -0
  14. package/dist/index.js.map +1 -0
  15. package/dist/{ai-runner/src/runner.d.ts → runner.d.ts} +7 -2
  16. package/dist/runner.d.ts.map +1 -0
  17. package/dist/{ai-runner/src/runner.js → runner.js} +23 -12
  18. package/dist/runner.js.map +1 -0
  19. package/dist/tools/index.d.ts.map +1 -0
  20. package/dist/tools/index.js.map +1 -0
  21. package/dist/tools/playwright-groups.d.ts.map +1 -0
  22. package/dist/tools/playwright-groups.js.map +1 -0
  23. package/dist/types/external.d.ts.map +1 -0
  24. package/dist/types/external.js.map +1 -0
  25. package/dist/types/index.d.ts.map +1 -0
  26. package/dist/types/index.js.map +1 -0
  27. package/package.json +5 -9
  28. package/playwright.config.ts +38 -0
  29. package/src/agents/logger.ts +20 -0
  30. package/src/agents/playwright-executor.ts +284 -0
  31. package/src/agents/tools/playwright-backend-adapter.ts +135 -0
  32. package/src/agents/tools/playwright-mcp-types.d.ts +72 -0
  33. package/src/agents/types.ts +80 -0
  34. package/src/index.ts +27 -0
  35. package/src/runner.ts +237 -0
  36. package/src/tools/index.ts +48 -0
  37. package/src/tools/playwright-groups.ts +54 -0
  38. package/src/types/external.ts +7 -0
  39. package/src/types/index.ts +118 -0
  40. package/tests/agent/playwright.config.ts +32 -0
  41. package/tests/agent/test-heal-agent.spec.ts +42 -0
  42. package/tsconfig.json +26 -0
  43. package/dist/ai-runner/src/agents/logger.d.ts.map +0 -1
  44. package/dist/ai-runner/src/agents/logger.js.map +0 -1
  45. package/dist/ai-runner/src/agents/playwright-executor.d.ts.map +0 -1
  46. package/dist/ai-runner/src/agents/playwright-executor.js.map +0 -1
  47. package/dist/ai-runner/src/agents/tools/playwright-backend-adapter.d.ts.map +0 -1
  48. package/dist/ai-runner/src/agents/tools/playwright-backend-adapter.js.map +0 -1
  49. package/dist/ai-runner/src/agents/types.d.ts.map +0 -1
  50. package/dist/ai-runner/src/agents/types.js.map +0 -1
  51. package/dist/ai-runner/src/index.d.ts.map +0 -1
  52. package/dist/ai-runner/src/index.js.map +0 -1
  53. package/dist/ai-runner/src/runner.d.ts.map +0 -1
  54. package/dist/ai-runner/src/runner.js.map +0 -1
  55. package/dist/ai-runner/src/tools/index.d.ts.map +0 -1
  56. package/dist/ai-runner/src/tools/index.js.map +0 -1
  57. package/dist/ai-runner/src/tools/playwright-groups.d.ts.map +0 -1
  58. package/dist/ai-runner/src/tools/playwright-groups.js.map +0 -1
  59. package/dist/ai-runner/src/types/external.d.ts.map +0 -1
  60. package/dist/ai-runner/src/types/external.js.map +0 -1
  61. package/dist/ai-runner/src/types/index.d.ts.map +0 -1
  62. package/dist/ai-runner/src/types/index.js.map +0 -1
  63. package/dist/core-infra/src/directory-validator.d.ts +0 -29
  64. package/dist/core-infra/src/directory-validator.d.ts.map +0 -1
  65. package/dist/core-infra/src/directory-validator.js +0 -91
  66. package/dist/core-infra/src/directory-validator.js.map +0 -1
  67. package/dist/core-infra/src/index.d.ts +0 -14
  68. package/dist/core-infra/src/index.d.ts.map +0 -1
  69. package/dist/core-infra/src/index.js +0 -44
  70. package/dist/core-infra/src/index.js.map +0 -1
  71. package/dist/core-infra/src/mcp/file-mcp-manager.d.ts +0 -14
  72. package/dist/core-infra/src/mcp/file-mcp-manager.d.ts.map +0 -1
  73. package/dist/core-infra/src/mcp/file-mcp-manager.js +0 -46
  74. package/dist/core-infra/src/mcp/file-mcp-manager.js.map +0 -1
  75. package/dist/core-infra/src/mcp/index.d.ts +0 -21
  76. package/dist/core-infra/src/mcp/index.d.ts.map +0 -1
  77. package/dist/core-infra/src/mcp/index.js +0 -17
  78. package/dist/core-infra/src/mcp/index.js.map +0 -1
  79. package/dist/core-infra/src/mcp/mcp-client.d.ts +0 -128
  80. package/dist/core-infra/src/mcp/mcp-client.d.ts.map +0 -1
  81. package/dist/core-infra/src/mcp/mcp-client.js +0 -163
  82. package/dist/core-infra/src/mcp/mcp-client.js.map +0 -1
  83. package/dist/core-infra/src/mcp/mcp-manager.d.ts +0 -21
  84. package/dist/core-infra/src/mcp/mcp-manager.d.ts.map +0 -1
  85. package/dist/core-infra/src/mcp/mcp-manager.js +0 -99
  86. package/dist/core-infra/src/mcp/mcp-manager.js.map +0 -1
  87. package/dist/core-infra/src/mcp/playwright-mcp-manager.d.ts +0 -19
  88. package/dist/core-infra/src/mcp/playwright-mcp-manager.d.ts.map +0 -1
  89. package/dist/core-infra/src/mcp/playwright-mcp-manager.js +0 -121
  90. package/dist/core-infra/src/mcp/playwright-mcp-manager.js.map +0 -1
  91. package/dist/core-infra/src/model.d.ts +0 -13
  92. package/dist/core-infra/src/model.d.ts.map +0 -1
  93. package/dist/core-infra/src/model.js +0 -191
  94. package/dist/core-infra/src/model.js.map +0 -1
  95. package/dist/core-infra/src/repositories/BaseRepository.d.ts +0 -69
  96. package/dist/core-infra/src/repositories/BaseRepository.d.ts.map +0 -1
  97. package/dist/core-infra/src/repositories/BaseRepository.js +0 -213
  98. package/dist/core-infra/src/repositories/BaseRepository.js.map +0 -1
  99. package/dist/core-infra/src/repositories/DirectoryRepository.d.ts +0 -70
  100. package/dist/core-infra/src/repositories/DirectoryRepository.d.ts.map +0 -1
  101. package/dist/core-infra/src/repositories/DirectoryRepository.js +0 -336
  102. package/dist/core-infra/src/repositories/DirectoryRepository.js.map +0 -1
  103. package/dist/core-infra/src/repositories/ExplorationRepository.d.ts +0 -34
  104. package/dist/core-infra/src/repositories/ExplorationRepository.d.ts.map +0 -1
  105. package/dist/core-infra/src/repositories/ExplorationRepository.js +0 -54
  106. package/dist/core-infra/src/repositories/ExplorationRepository.js.map +0 -1
  107. package/dist/core-infra/src/repositories/FileRepository.d.ts +0 -56
  108. package/dist/core-infra/src/repositories/FileRepository.d.ts.map +0 -1
  109. package/dist/core-infra/src/repositories/FileRepository.js +0 -132
  110. package/dist/core-infra/src/repositories/FileRepository.js.map +0 -1
  111. package/dist/core-infra/src/repositories/ModelConfigRepository.d.ts +0 -38
  112. package/dist/core-infra/src/repositories/ModelConfigRepository.d.ts.map +0 -1
  113. package/dist/core-infra/src/repositories/ModelConfigRepository.js +0 -59
  114. package/dist/core-infra/src/repositories/ModelConfigRepository.js.map +0 -1
  115. package/dist/core-infra/src/repositories/ProjectRepository.d.ts +0 -32
  116. package/dist/core-infra/src/repositories/ProjectRepository.d.ts.map +0 -1
  117. package/dist/core-infra/src/repositories/ProjectRepository.js +0 -67
  118. package/dist/core-infra/src/repositories/ProjectRepository.js.map +0 -1
  119. package/dist/core-infra/src/repositories/SettingsRepository.d.ts +0 -19
  120. package/dist/core-infra/src/repositories/SettingsRepository.d.ts.map +0 -1
  121. package/dist/core-infra/src/repositories/SettingsRepository.js +0 -72
  122. package/dist/core-infra/src/repositories/SettingsRepository.js.map +0 -1
  123. package/dist/core-infra/src/repositories/TableDataRepository.d.ts +0 -22
  124. package/dist/core-infra/src/repositories/TableDataRepository.d.ts.map +0 -1
  125. package/dist/core-infra/src/repositories/TableDataRepository.js +0 -33
  126. package/dist/core-infra/src/repositories/TableDataRepository.js.map +0 -1
  127. package/dist/core-infra/src/repositories/TestCaseRepository.d.ts +0 -120
  128. package/dist/core-infra/src/repositories/TestCaseRepository.d.ts.map +0 -1
  129. package/dist/core-infra/src/repositories/TestCaseRepository.js +0 -463
  130. package/dist/core-infra/src/repositories/TestCaseRepository.js.map +0 -1
  131. package/dist/core-infra/src/repositories/TestPlanRepository.d.ts +0 -35
  132. package/dist/core-infra/src/repositories/TestPlanRepository.d.ts.map +0 -1
  133. package/dist/core-infra/src/repositories/TestPlanRepository.js +0 -80
  134. package/dist/core-infra/src/repositories/TestPlanRepository.js.map +0 -1
  135. package/dist/core-infra/src/repositories/TestResultRepository.d.ts +0 -30
  136. package/dist/core-infra/src/repositories/TestResultRepository.d.ts.map +0 -1
  137. package/dist/core-infra/src/repositories/TestResultRepository.js +0 -54
  138. package/dist/core-infra/src/repositories/TestResultRepository.js.map +0 -1
  139. package/dist/core-infra/src/repositories/index.d.ts +0 -17
  140. package/dist/core-infra/src/repositories/index.d.ts.map +0 -1
  141. package/dist/core-infra/src/repositories/index.js +0 -31
  142. package/dist/core-infra/src/repositories/index.js.map +0 -1
  143. package/dist/core-infra/src/storageService.d.ts +0 -131
  144. package/dist/core-infra/src/storageService.d.ts.map +0 -1
  145. package/dist/core-infra/src/storageService.js +0 -304
  146. package/dist/core-infra/src/storageService.js.map +0 -1
  147. package/dist/core-infra/src/types.d.ts +0 -219
  148. package/dist/core-infra/src/types.d.ts.map +0 -1
  149. package/dist/core-infra/src/types.js +0 -3
  150. /package/dist/{ai-runner/src/agents → agents}/logger.d.ts +0 -0
  151. /package/dist/{ai-runner/src/agents → agents}/logger.js +0 -0
  152. /package/dist/{ai-runner/src/agents → agents}/tools/playwright-backend-adapter.d.ts +0 -0
  153. /package/dist/{ai-runner/src/agents → agents}/types.d.ts +0 -0
  154. /package/dist/{ai-runner/src/agents → agents}/types.js +0 -0
  155. /package/dist/{ai-runner/src/index.d.ts → index.d.ts} +0 -0
  156. /package/dist/{ai-runner/src/index.js → index.js} +0 -0
  157. /package/dist/{ai-runner/src/tools → tools}/index.d.ts +0 -0
  158. /package/dist/{ai-runner/src/tools → tools}/index.js +0 -0
  159. /package/dist/{ai-runner/src/tools → tools}/playwright-groups.d.ts +0 -0
  160. /package/dist/{ai-runner/src/tools → tools}/playwright-groups.js +0 -0
  161. /package/dist/{ai-runner/src/types → types}/external.d.ts +0 -0
  162. /package/dist/{ai-runner/src/types → types}/external.js +0 -0
  163. /package/dist/{ai-runner/src/types → types}/index.d.ts +0 -0
  164. /package/dist/{ai-runner/src/types → types}/index.js +0 -0
@@ -1 +0,0 @@
1
- {"version":3,"file":"TestPlanRepository.d.ts","sourceRoot":"","sources":["../../../../../core-infra/src/repositories/TestPlanRepository.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,cAAc,EAAE,MAAM,kBAAkB,CAAC;AAClD,OAAO,EAAE,QAAQ,EAAE,MAAM,UAAU,CAAC;AAIpC;;;;GAIG;AACH,qBAAa,kBAAmB,SAAQ,cAAc;gBACxC,SAAS,EAAE,MAAM;IAI7B;;OAEG;IACH,YAAY,CAAC,QAAQ,EAAE,QAAQ,GAAG,IAAI;IAItC;;OAEG;IACH,YAAY,CAAC,UAAU,EAAE,MAAM,GAAG,QAAQ,GAAG,IAAI;IAIjD;;OAEG;IACH,aAAa,IAAI,QAAQ,EAAE;IAyB3B;;OAEG;IACH,cAAc,CAAC,QAAQ,EAAE,QAAQ,GAAG,IAAI;IAexC;;OAEG;IACH,cAAc,CAAC,UAAU,EAAE,MAAM,GAAG,IAAI;IAIxC;;OAEG;IACH,MAAM,CAAC,UAAU,EAAE,MAAM,GAAG,OAAO;CAGpC"}
@@ -1,80 +0,0 @@
1
- "use strict";
2
- Object.defineProperty(exports, "__esModule", { value: true });
3
- exports.TestPlanRepository = void 0;
4
- const BaseRepository_1 = require("./BaseRepository");
5
- const path_1 = require("path");
6
- const fs_1 = require("fs");
7
- /**
8
- * TestPlanRepository handles all storage operations for test plans
9
- * Responsible for managing test plan data
10
- * Data stored in: ~/.test_agent/projects/{projectId}/test_plans/
11
- */
12
- class TestPlanRepository extends BaseRepository_1.BaseRepository {
13
- constructor(projectId) {
14
- super((0, path_1.join)('projects', projectId, 'test_plans'));
15
- }
16
- /**
17
- * Save a test plan
18
- */
19
- saveTestPlan(testPlan) {
20
- this.saveSync(testPlan.id, testPlan);
21
- }
22
- /**
23
- * Load a test plan by ID
24
- */
25
- loadTestPlan(testPlanId) {
26
- return this.loadSync(testPlanId);
27
- }
28
- /**
29
- * List all test plans
30
- */
31
- listTestPlans() {
32
- const baseDir = this.getBaseDir();
33
- if (!(0, fs_1.existsSync)(baseDir)) {
34
- return [];
35
- }
36
- const files = (0, fs_1.readdirSync)(baseDir);
37
- const testPlans = [];
38
- for (const file of files) {
39
- if (file.endsWith('.json')) {
40
- const testPlanId = file.replace('.json', '');
41
- const testPlan = this.loadTestPlan(testPlanId);
42
- if (testPlan) {
43
- testPlans.push(testPlan);
44
- }
45
- }
46
- }
47
- // Sort by updatedAt descending
48
- testPlans.sort((a, b) => b.updatedAt - a.updatedAt);
49
- return testPlans;
50
- }
51
- /**
52
- * Update a test plan
53
- */
54
- updateTestPlan(testPlan) {
55
- const existing = this.loadTestPlan(testPlan.id);
56
- if (!existing) {
57
- throw new Error(`Test plan with ID ${testPlan.id} not found`);
58
- }
59
- const updated = {
60
- ...existing,
61
- ...testPlan,
62
- updatedAt: Date.now(),
63
- };
64
- this.saveSync(updated.id, updated);
65
- }
66
- /**
67
- * Delete a test plan
68
- */
69
- deleteTestPlan(testPlanId) {
70
- this.deleteSync(testPlanId);
71
- }
72
- /**
73
- * Check if a test plan exists
74
- */
75
- exists(testPlanId) {
76
- return this.existsSync(testPlanId);
77
- }
78
- }
79
- exports.TestPlanRepository = TestPlanRepository;
80
- //# sourceMappingURL=TestPlanRepository.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"TestPlanRepository.js","sourceRoot":"","sources":["../../../../../core-infra/src/repositories/TestPlanRepository.ts"],"names":[],"mappings":";;;AAAA,qDAAkD;AAElD,+BAA4B;AAC5B,2BAA6C;AAE7C;;;;GAIG;AACH,MAAa,kBAAmB,SAAQ,+BAAc;IACpD,YAAY,SAAiB;QAC3B,KAAK,CAAC,IAAA,WAAI,EAAC,UAAU,EAAE,SAAS,EAAE,YAAY,CAAC,CAAC,CAAC;IACnD,CAAC;IAED;;OAEG;IACH,YAAY,CAAC,QAAkB;QAC7B,IAAI,CAAC,QAAQ,CAAC,QAAQ,CAAC,EAAE,EAAE,QAAQ,CAAC,CAAC;IACvC,CAAC;IAED;;OAEG;IACH,YAAY,CAAC,UAAkB;QAC7B,OAAO,IAAI,CAAC,QAAQ,CAAW,UAAU,CAAC,CAAC;IAC7C,CAAC;IAED;;OAEG;IACH,aAAa;QACX,MAAM,OAAO,GAAG,IAAI,CAAC,UAAU,EAAE,CAAC;QAClC,IAAI,CAAC,IAAA,eAAU,EAAC,OAAO,CAAC,EAAE,CAAC;YACzB,OAAO,EAAE,CAAC;QACZ,CAAC;QAED,MAAM,KAAK,GAAG,IAAA,gBAAW,EAAC,OAAO,CAAC,CAAC;QACnC,MAAM,SAAS,GAAe,EAAE,CAAC;QAEjC,KAAK,MAAM,IAAI,IAAI,KAAK,EAAE,CAAC;YACzB,IAAI,IAAI,CAAC,QAAQ,CAAC,OAAO,CAAC,EAAE,CAAC;gBAC3B,MAAM,UAAU,GAAG,IAAI,CAAC,OAAO,CAAC,OAAO,EAAE,EAAE,CAAC,CAAC;gBAC7C,MAAM,QAAQ,GAAG,IAAI,CAAC,YAAY,CAAC,UAAU,CAAC,CAAC;gBAC/C,IAAI,QAAQ,EAAE,CAAC;oBACb,SAAS,CAAC,IAAI,CAAC,QAAQ,CAAC,CAAC;gBAC3B,CAAC;YACH,CAAC;QACH,CAAC;QAED,+BAA+B;QAC/B,SAAS,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,SAAS,GAAG,CAAC,CAAC,SAAS,CAAC,CAAC;QAEpD,OAAO,SAAS,CAAC;IACnB,CAAC;IAED;;OAEG;IACH,cAAc,CAAC,QAAkB;QAC/B,MAAM,QAAQ,GAAG,IAAI,CAAC,YAAY,CAAC,QAAQ,CAAC,EAAE,CAAC,CAAC;QAChD,IAAI,CAAC,QAAQ,EAAE,CAAC;YACd,MAAM,IAAI,KAAK,CAAC,qBAAqB,QAAQ,CAAC,EAAE,YAAY,CAAC,CAAC;QAChE,CAAC;QAED,MAAM,OAAO,GAAa;YACxB,GAAG,QAAQ;YACX,GAAG,QAAQ;YACX,SAAS,EAAE,IAAI,CAAC,GAAG,EAAE;SACtB,CAAC;QAEF,IAAI,CAAC,QAAQ,CAAC,OAAO,CAAC,EAAE,EAAE,OAAO,CAAC,CAAC;IACrC,CAAC;IAED;;OAEG;IACH,cAAc,CAAC,UAAkB;QAC/B,IAAI,CAAC,UAAU,CAAC,UAAU,CAAC,CAAC;IAC9B,CAAC;IAED;;OAEG;IACH,MAAM,CAAC,UAAkB;QACvB,OAAO,IAAI,CAAC,UAAU,CAAC,UAAU,CAAC,CAAC;IACrC,CAAC;CACF;AA9ED,gDA8EC"}
@@ -1,30 +0,0 @@
1
- import { BaseRepository } from './BaseRepository';
2
- import { TestResult } from '../types';
3
- /**
4
- * TestResultRepository handles all storage operations for test results
5
- * Responsible for managing test execution results and history
6
- */
7
- export declare class TestResultRepository extends BaseRepository {
8
- constructor(projectId: string);
9
- /**
10
- * Save a test result
11
- */
12
- saveTestResult(result: TestResult): Promise<void>;
13
- /**
14
- * Load a test result by ID
15
- */
16
- loadTestResult(resultId: string): Promise<TestResult | null>;
17
- /**
18
- * Load all results for a specific test case
19
- */
20
- loadTestResults(testId: string): Promise<TestResult[]>;
21
- /**
22
- * Delete a test result
23
- */
24
- deleteTestResult(resultId: string): Promise<void>;
25
- /**
26
- * Delete all results for a specific test case
27
- */
28
- deleteTestResults(testId: string): Promise<void>;
29
- }
30
- //# sourceMappingURL=TestResultRepository.d.ts.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"TestResultRepository.d.ts","sourceRoot":"","sources":["../../../../../core-infra/src/repositories/TestResultRepository.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,cAAc,EAAE,MAAM,kBAAkB,CAAC;AAClD,OAAO,EAAE,UAAU,EAAE,MAAM,UAAU,CAAC;AAEtC;;;GAGG;AACH,qBAAa,oBAAqB,SAAQ,cAAc;gBACxC,SAAS,EAAE,MAAM;IAI/B;;OAEG;IACG,cAAc,CAAC,MAAM,EAAE,UAAU,GAAG,OAAO,CAAC,IAAI,CAAC;IAIvD;;OAEG;IACG,cAAc,CAAC,QAAQ,EAAE,MAAM,GAAG,OAAO,CAAC,UAAU,GAAG,IAAI,CAAC;IAIlE;;OAEG;IACG,eAAe,CAAC,MAAM,EAAE,MAAM,GAAG,OAAO,CAAC,UAAU,EAAE,CAAC;IAO5D;;OAEG;IACG,gBAAgB,CAAC,QAAQ,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC;IAIvD;;OAEG;IACG,iBAAiB,CAAC,MAAM,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC;CAQvD"}
@@ -1,54 +0,0 @@
1
- "use strict";
2
- Object.defineProperty(exports, "__esModule", { value: true });
3
- exports.TestResultRepository = void 0;
4
- const path_1 = require("path");
5
- const BaseRepository_1 = require("./BaseRepository");
6
- /**
7
- * TestResultRepository handles all storage operations for test results
8
- * Responsible for managing test execution results and history
9
- */
10
- class TestResultRepository extends BaseRepository_1.BaseRepository {
11
- constructor(projectId) {
12
- super((0, path_1.join)("projects", projectId, 'results'));
13
- }
14
- /**
15
- * Save a test result
16
- */
17
- async saveTestResult(result) {
18
- await this.save(result.id, result, 'json');
19
- }
20
- /**
21
- * Load a test result by ID
22
- */
23
- async loadTestResult(resultId) {
24
- return this.load(resultId, 'json');
25
- }
26
- /**
27
- * Load all results for a specific test case
28
- */
29
- async loadTestResults(testId) {
30
- const results = await this.listAll();
31
- return results
32
- .filter(r => r.testId === testId)
33
- .sort((a, b) => b.executedAt - a.executedAt);
34
- }
35
- /**
36
- * Delete a test result
37
- */
38
- async deleteTestResult(resultId) {
39
- await this.delete(resultId, 'json');
40
- }
41
- /**
42
- * Delete all results for a specific test case
43
- */
44
- async deleteTestResults(testId) {
45
- const results = await this.listAll();
46
- for (const result of results) {
47
- if (result.testId === testId) {
48
- await this.delete(result.id, 'json');
49
- }
50
- }
51
- }
52
- }
53
- exports.TestResultRepository = TestResultRepository;
54
- //# sourceMappingURL=TestResultRepository.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"TestResultRepository.js","sourceRoot":"","sources":["../../../../../core-infra/src/repositories/TestResultRepository.ts"],"names":[],"mappings":";;;AAAA,+BAA4B;AAC5B,qDAAkD;AAGlD;;;GAGG;AACH,MAAa,oBAAqB,SAAQ,+BAAc;IACpD,YAAY,SAAiB;QAC7B,KAAK,CAAC,IAAA,WAAI,EAAC,UAAU,EAAE,SAAS,EAAE,SAAS,CAAC,CAAC,CAAC;IAChD,CAAC;IAED;;OAEG;IACH,KAAK,CAAC,cAAc,CAAC,MAAkB;QACrC,MAAM,IAAI,CAAC,IAAI,CAAC,MAAM,CAAC,EAAE,EAAE,MAAM,EAAE,MAAM,CAAC,CAAC;IAC7C,CAAC;IAED;;OAEG;IACH,KAAK,CAAC,cAAc,CAAC,QAAgB;QACnC,OAAO,IAAI,CAAC,IAAI,CAAa,QAAQ,EAAE,MAAM,CAAC,CAAC;IACjD,CAAC;IAED;;OAEG;IACH,KAAK,CAAC,eAAe,CAAC,MAAc;QAClC,MAAM,OAAO,GAAG,MAAM,IAAI,CAAC,OAAO,EAAc,CAAC;QACjD,OAAO,OAAO;aACX,MAAM,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,MAAM,KAAK,MAAM,CAAC;aAChC,IAAI,CAAC,CAAC,CAAC,EAAE,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,UAAU,GAAG,CAAC,CAAC,UAAU,CAAC,CAAC;IACjD,CAAC;IAED;;OAEG;IACH,KAAK,CAAC,gBAAgB,CAAC,QAAgB;QACrC,MAAM,IAAI,CAAC,MAAM,CAAC,QAAQ,EAAE,MAAM,CAAC,CAAC;IACtC,CAAC;IAED;;OAEG;IACH,KAAK,CAAC,iBAAiB,CAAC,MAAc;QACpC,MAAM,OAAO,GAAG,MAAM,IAAI,CAAC,OAAO,EAAc,CAAC;QACjD,KAAK,MAAM,MAAM,IAAI,OAAO,EAAE,CAAC;YAC7B,IAAI,MAAM,CAAC,MAAM,KAAK,MAAM,EAAE,CAAC;gBAC7B,MAAM,IAAI,CAAC,MAAM,CAAC,MAAM,CAAC,EAAE,EAAE,MAAM,CAAC,CAAC;YACvC,CAAC;QACH,CAAC;IACH,CAAC;CACF;AA/CD,oDA+CC"}
@@ -1,17 +0,0 @@
1
- /**
2
- * Repository layer
3
- * Provides separated data access concerns for different business entities
4
- * Following Repository Pattern to decouple business logic from data access
5
- */
6
- export { BaseRepository } from './BaseRepository';
7
- export { TestCaseRepository } from './TestCaseRepository';
8
- export { TestResultRepository } from './TestResultRepository';
9
- export { ModelConfigRepository } from './ModelConfigRepository';
10
- export { ExplorationRepository } from './ExplorationRepository';
11
- export { SettingsRepository } from './SettingsRepository';
12
- export { ProjectRepository } from './ProjectRepository';
13
- export { DirectoryRepository } from './DirectoryRepository';
14
- export { TestPlanRepository } from './TestPlanRepository';
15
- export { TableDataRepository } from './TableDataRepository';
16
- export { FileRepository } from './FileRepository';
17
- //# sourceMappingURL=index.d.ts.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../../../core-infra/src/repositories/index.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAEH,OAAO,EAAE,cAAc,EAAE,MAAM,kBAAkB,CAAC;AAClD,OAAO,EAAE,kBAAkB,EAAE,MAAM,sBAAsB,CAAC;AAC1D,OAAO,EAAE,oBAAoB,EAAE,MAAM,wBAAwB,CAAC;AAC9D,OAAO,EAAE,qBAAqB,EAAE,MAAM,yBAAyB,CAAC;AAChE,OAAO,EAAE,qBAAqB,EAAE,MAAM,yBAAyB,CAAC;AAChE,OAAO,EAAE,kBAAkB,EAAE,MAAM,sBAAsB,CAAC;AAC1D,OAAO,EAAE,iBAAiB,EAAE,MAAM,qBAAqB,CAAC;AACxD,OAAO,EAAE,mBAAmB,EAAE,MAAM,uBAAuB,CAAC;AAC5D,OAAO,EAAE,kBAAkB,EAAE,MAAM,sBAAsB,CAAC;AAC1D,OAAO,EAAE,mBAAmB,EAAE,MAAM,uBAAuB,CAAC;AAC5D,OAAO,EAAE,cAAc,EAAE,MAAM,kBAAkB,CAAC"}
@@ -1,31 +0,0 @@
1
- "use strict";
2
- /**
3
- * Repository layer
4
- * Provides separated data access concerns for different business entities
5
- * Following Repository Pattern to decouple business logic from data access
6
- */
7
- Object.defineProperty(exports, "__esModule", { value: true });
8
- exports.FileRepository = exports.TableDataRepository = exports.TestPlanRepository = exports.DirectoryRepository = exports.ProjectRepository = exports.SettingsRepository = exports.ExplorationRepository = exports.ModelConfigRepository = exports.TestResultRepository = exports.TestCaseRepository = exports.BaseRepository = void 0;
9
- var BaseRepository_1 = require("./BaseRepository");
10
- Object.defineProperty(exports, "BaseRepository", { enumerable: true, get: function () { return BaseRepository_1.BaseRepository; } });
11
- var TestCaseRepository_1 = require("./TestCaseRepository");
12
- Object.defineProperty(exports, "TestCaseRepository", { enumerable: true, get: function () { return TestCaseRepository_1.TestCaseRepository; } });
13
- var TestResultRepository_1 = require("./TestResultRepository");
14
- Object.defineProperty(exports, "TestResultRepository", { enumerable: true, get: function () { return TestResultRepository_1.TestResultRepository; } });
15
- var ModelConfigRepository_1 = require("./ModelConfigRepository");
16
- Object.defineProperty(exports, "ModelConfigRepository", { enumerable: true, get: function () { return ModelConfigRepository_1.ModelConfigRepository; } });
17
- var ExplorationRepository_1 = require("./ExplorationRepository");
18
- Object.defineProperty(exports, "ExplorationRepository", { enumerable: true, get: function () { return ExplorationRepository_1.ExplorationRepository; } });
19
- var SettingsRepository_1 = require("./SettingsRepository");
20
- Object.defineProperty(exports, "SettingsRepository", { enumerable: true, get: function () { return SettingsRepository_1.SettingsRepository; } });
21
- var ProjectRepository_1 = require("./ProjectRepository");
22
- Object.defineProperty(exports, "ProjectRepository", { enumerable: true, get: function () { return ProjectRepository_1.ProjectRepository; } });
23
- var DirectoryRepository_1 = require("./DirectoryRepository");
24
- Object.defineProperty(exports, "DirectoryRepository", { enumerable: true, get: function () { return DirectoryRepository_1.DirectoryRepository; } });
25
- var TestPlanRepository_1 = require("./TestPlanRepository");
26
- Object.defineProperty(exports, "TestPlanRepository", { enumerable: true, get: function () { return TestPlanRepository_1.TestPlanRepository; } });
27
- var TableDataRepository_1 = require("./TableDataRepository");
28
- Object.defineProperty(exports, "TableDataRepository", { enumerable: true, get: function () { return TableDataRepository_1.TableDataRepository; } });
29
- var FileRepository_1 = require("./FileRepository");
30
- Object.defineProperty(exports, "FileRepository", { enumerable: true, get: function () { return FileRepository_1.FileRepository; } });
31
- //# sourceMappingURL=index.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"index.js","sourceRoot":"","sources":["../../../../../core-infra/src/repositories/index.ts"],"names":[],"mappings":";AAAA;;;;GAIG;;;AAEH,mDAAkD;AAAzC,gHAAA,cAAc,OAAA;AACvB,2DAA0D;AAAjD,wHAAA,kBAAkB,OAAA;AAC3B,+DAA8D;AAArD,4HAAA,oBAAoB,OAAA;AAC7B,iEAAgE;AAAvD,8HAAA,qBAAqB,OAAA;AAC9B,iEAAgE;AAAvD,8HAAA,qBAAqB,OAAA;AAC9B,2DAA0D;AAAjD,wHAAA,kBAAkB,OAAA;AAC3B,yDAAwD;AAA/C,sHAAA,iBAAiB,OAAA;AAC1B,6DAA4D;AAAnD,0HAAA,mBAAmB,OAAA;AAC5B,2DAA0D;AAAjD,wHAAA,kBAAkB,OAAA;AAC3B,6DAA4D;AAAnD,0HAAA,mBAAmB,OAAA;AAC5B,mDAAkD;AAAzC,gHAAA,cAAc,OAAA"}
@@ -1,131 +0,0 @@
1
- import type { TestCase, TestResult, AppSettings, ModelConfig, TestStep, ExplorationRecord, Project, DirectoryInfo, TestDirectory, TestPlan, TableData } from './types';
2
- /**
3
- * StorageService acts as a facade for all data storage operations
4
- * Coordinates between different repositories and provides a unified interface
5
- * This decouples business logic from repository implementation details
6
- *
7
- * Benefits:
8
- * - Single point of entry for all storage operations
9
- * - Encapsulates repository instantiation
10
- * - Easy to add cross-cutting concerns (logging, caching, etc.)
11
- * - Simplifies unit testing by allowing mock repositories
12
- */
13
- export declare class StorageService {
14
- private static instance;
15
- private testCaseRepo;
16
- private testResultRepo;
17
- private modelConfigRepo;
18
- private explorationRepo;
19
- private settingsRepo;
20
- private projectRepo;
21
- private directoryRepo;
22
- private testPlanRepo;
23
- private tableDataRepo;
24
- private fileRepo;
25
- private constructor();
26
- private static instances;
27
- /**
28
- * Get singleton instance of StorageService
29
- */
30
- static getInstance(projectId: string): StorageService;
31
- /**
32
- * Reset instance (useful for testing)
33
- */
34
- static resetInstance(): void;
35
- /**
36
- * Initialize storage directories
37
- */
38
- private static createDirs;
39
- /**
40
- * Get storage root directory
41
- */
42
- getStorageDir(): string;
43
- saveTestCase(testCase: TestCase): void;
44
- loadTestCase(testId: string): TestCase | null;
45
- listTestCases(): TestCase[];
46
- listResuableTestCases(currentId: string): TestCase[];
47
- deleteTestCase(testId: string): void;
48
- listTestCasesRecursively(dirPath: string): TestCase[];
49
- saveTestScript(testId: string, script: string): void;
50
- hasTestScript(testId: string): boolean;
51
- loadTestScript(testId: string): string | undefined;
52
- saveTestSteps(testId: string, steps: TestStep[]): void;
53
- loadTestSteps(testId: string): TestStep[];
54
- saveTestStep(testId: string, step: {
55
- id: string;
56
- description?: string;
57
- isBreakpoint?: boolean;
58
- reusedFromTestId?: string;
59
- }, afterStepId?: string): boolean;
60
- saveStepBreakPoint(testId: string, id: string, isBreakpoint?: boolean): void;
61
- insertStep(testId: string, afterStepId: string | null | undefined, newStep: TestStep): void;
62
- deleteStep(testId: string, stepId: string): boolean;
63
- buildTestDirectoryTree(): TestDirectory;
64
- createDirectory(path: string, info: Omit<DirectoryInfo, 'id' | 'path'>): DirectoryInfo;
65
- getDirectoryInfo(path: string): DirectoryInfo | null;
66
- updateDirectoryInfo(path: string, updates: Partial<Omit<DirectoryInfo, 'id' | 'path'>>): DirectoryInfo;
67
- deleteDirectory(path: string): void;
68
- renameDirectory(oldPath: string, newName: string): DirectoryInfo;
69
- getDirectoriesAtPath(path?: string): DirectoryInfo[];
70
- isValidDirectory(path: string): boolean;
71
- moveDirectory(sourcePath: string, targetParentPath: string): DirectoryInfo;
72
- moveTestCase(testId: string, sourceDir: string, targetDir: string): boolean;
73
- saveTestResult(result: TestResult): Promise<void>;
74
- loadTestResult(resultId: string): Promise<TestResult | null>;
75
- loadTestResults(testId: string): Promise<TestResult[]>;
76
- deleteTestResult(resultId: string): Promise<void>;
77
- deleteTestResults(testId: string): Promise<void>;
78
- saveModelConfig(config: ModelConfig): Promise<void>;
79
- loadModelConfig(configId: string): Promise<ModelConfig | null>;
80
- listModelConfigs(): Promise<ModelConfig[]>;
81
- listModelConfigsSync(): ModelConfig[];
82
- updateModelConfig(config: ModelConfig): Promise<void>;
83
- deleteModelConfig(configId: string): Promise<void>;
84
- modelConfigExists(configId: string): Promise<boolean>;
85
- saveExplorationRecord(record: ExplorationRecord): Promise<void>;
86
- loadExplorationRecord(recordId: string): Promise<ExplorationRecord | null>;
87
- listExplorationRecords(): Promise<ExplorationRecord[]>;
88
- updateExplorationRecord(record: ExplorationRecord): Promise<void>;
89
- deleteExplorationRecord(recordId: string): Promise<void>;
90
- getExplorationRecordsByUrl(url: string): Promise<ExplorationRecord[]>;
91
- saveSettings(settings: AppSettings): Promise<void>;
92
- loadSettings(): Promise<AppSettings | null>;
93
- saveProject(project: Project): void;
94
- loadProject(projectId: string): Project | null;
95
- listProjects(): Project[];
96
- deleteProject(projectId: string): void;
97
- projectExists(projectId: string): Promise<boolean>;
98
- saveTestPlan(testPlan: TestPlan): void;
99
- loadTestPlan(testPlanId: string): TestPlan | null;
100
- listTestPlans(): TestPlan[];
101
- updateTestPlan(testPlan: TestPlan): void;
102
- deleteTestPlan(testPlanId: string): void;
103
- testPlanExists(testPlanId: string): boolean;
104
- saveTableData(tableData: TableData): Promise<void>;
105
- loadTableData(testId: string): Promise<TableData | null>;
106
- deleteTableData(testId: string): Promise<void>;
107
- getFileDir(testId: string): string;
108
- saveFile(testId: string, fileName: string, content: Buffer): {
109
- name: string;
110
- size: number;
111
- uploadedAt: string;
112
- path: string;
113
- };
114
- loadFile(testId: string, fileName: string): Buffer | null;
115
- listFiles(testId: string): {
116
- name: string;
117
- size: number;
118
- uploadedAt: string;
119
- path: string;
120
- }[];
121
- deleteFile(testId: string, fileName: string): boolean;
122
- deleteAllFiles(testId: string): void;
123
- fileExists(testId: string, fileName: string): boolean;
124
- getFileInfo(testId: string, fileName: string): {
125
- name: string;
126
- size: number;
127
- uploadedAt: string;
128
- path: string;
129
- } | null;
130
- }
131
- //# sourceMappingURL=storageService.d.ts.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"storageService.d.ts","sourceRoot":"","sources":["../../../../core-infra/src/storageService.ts"],"names":[],"mappings":"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"}