@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,33 +0,0 @@
1
- "use strict";
2
- Object.defineProperty(exports, "__esModule", { value: true });
3
- exports.TableDataRepository = void 0;
4
- const BaseRepository_1 = require("./BaseRepository");
5
- /**
6
- * TableDataRepository handles storage operations for test table data
7
- * Stores table data in data directory as {testId}.json
8
- */
9
- class TableDataRepository extends BaseRepository_1.BaseRepository {
10
- constructor(projectId) {
11
- super(`projects/${projectId}/data`);
12
- }
13
- /**
14
- * Save table data for a test
15
- */
16
- async saveTableData(tableData) {
17
- await this.save(tableData.testId, tableData);
18
- }
19
- /**
20
- * Load table data for a test
21
- */
22
- async loadTableData(testId) {
23
- return this.load(testId);
24
- }
25
- /**
26
- * Delete table data for a test
27
- */
28
- async deleteTableData(testId) {
29
- await this.delete(testId);
30
- }
31
- }
32
- exports.TableDataRepository = TableDataRepository;
33
- //# sourceMappingURL=TableDataRepository.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"TableDataRepository.js","sourceRoot":"","sources":["../../../../../core-infra/src/repositories/TableDataRepository.ts"],"names":[],"mappings":";;;AAAA,qDAAkD;AAGlD;;;GAGG;AACH,MAAa,mBAAoB,SAAQ,+BAAc;IACrD,YAAY,SAAiB;QAC3B,KAAK,CAAC,YAAY,SAAS,OAAO,CAAC,CAAC;IACtC,CAAC;IAED;;OAEG;IACH,KAAK,CAAC,aAAa,CAAC,SAAoB;QACtC,MAAM,IAAI,CAAC,IAAI,CAAC,SAAS,CAAC,MAAM,EAAE,SAAS,CAAC,CAAC;IAC/C,CAAC;IAED;;OAEG;IACH,KAAK,CAAC,aAAa,CAAC,MAAc;QAChC,OAAO,IAAI,CAAC,IAAI,CAAY,MAAM,CAAC,CAAC;IACtC,CAAC;IAED;;OAEG;IACH,KAAK,CAAC,eAAe,CAAC,MAAc;QAClC,MAAM,IAAI,CAAC,MAAM,CAAC,MAAM,CAAC,CAAC;IAC5B,CAAC;CACF;AAzBD,kDAyBC"}
@@ -1,120 +0,0 @@
1
- import { BaseRepository } from './BaseRepository';
2
- import { TestCase, TestStep, TestDirectory } from '../types';
3
- /**
4
- * TestCaseRepository handles all storage operations for test cases
5
- * Responsible for managing test case data, steps, and associated scripts
6
- * Supports hierarchical directory organization (up to 3 levels)
7
- */
8
- export declare class TestCaseRepository extends BaseRepository {
9
- constructor(projectId: string);
10
- /**
11
- * Get scripts directory - project-aware
12
- * When project is active: ~/.test_agent/projects/{projectId}/scripts
13
- * When no project: ~/.test_agent/scripts
14
- */
15
- private getScriptsDir;
16
- /**
17
- * Get steps directory - project-aware
18
- * When project is active: ~/.test_agent/projects/{projectId}/steps
19
- * When no project: ~/.test_agent/steps
20
- */
21
- private getStepsDir;
22
- /**
23
- * Ensure scripts directory exists
24
- */
25
- private ensureScriptsDir;
26
- /**
27
- * Ensure steps directory exists
28
- */
29
- private ensureStepsDir;
30
- /**
31
- * Save a test case with support for directory paths
32
- */
33
- saveTestCase(testCase: TestCase): void;
34
- /**
35
- * Load a test case with its steps and script
36
- */
37
- loadTestCase(testId: string, path?: string): TestCase | null;
38
- /**
39
- * Recursively find a test case file by ID
40
- */
41
- private findTestCaseFile;
42
- /**
43
- * List all test cases sorted by creation date (newest first)
44
- * Returns a hierarchical directory tree
45
- */
46
- listTestCases(): TestCase[];
47
- /**
48
- * Build complete directory tree
49
- */
50
- buildDirectoryTree(): TestDirectory;
51
- /**
52
- * Recursively build directory tree
53
- */
54
- private buildDirectoryTreeRecursive;
55
- /**
56
- * List test cases in a specific directory recursively.
57
- * Loads full test data including steps
58
- */
59
- listTestCasesRecursively(dirPath: string, seen?: Set<string>): TestCase[];
60
- /**
61
- * List test cases in a specific directory
62
- */
63
- private listTestCasesInDirectory;
64
- /**
65
- * Delete a test case and its associated data
66
- */
67
- deleteTestCase(testId: string): void;
68
- /**
69
- * Save test case steps
70
- */
71
- saveTestSteps(testId: string, steps: TestStep[]): void;
72
- /**
73
- * Load test case steps
74
- */
75
- loadTestSteps(testId: string): TestStep[];
76
- /**
77
- * Delete all steps for a test case
78
- */
79
- private deleteTestSteps;
80
- updateStepBreakPoint(testId: string, id: string, isBreakpoint?: boolean): void;
81
- /**
82
- * Save a single test step or insert a new one
83
- * @returns true if updated, false if created
84
- */
85
- saveTestStep(testId: string, step: {
86
- id: string;
87
- description?: string;
88
- isBreakpoint?: boolean;
89
- }, afterStepId?: string): boolean;
90
- /**
91
- * Insert a new step after a specific step
92
- */
93
- insertStep(testId: string, afterStepId: string | null | undefined, newStep: TestStep): void;
94
- /**
95
- * Delete a specific step by ID
96
- */
97
- deleteStep(testId: string, stepId: string): boolean;
98
- /**
99
- * Save Playwright script for a test case
100
- */
101
- saveTestScript(testId: string, script: string): void;
102
- /**
103
- * Load Playwright script for a test case
104
- */
105
- loadTestScript(testId: string): string | undefined;
106
- hasTestScript(testId: string): boolean;
107
- /**
108
- * Delete Playwright script for a test case
109
- */
110
- private deleteTestScript;
111
- /**
112
- * Get the file path for a test step file
113
- */
114
- private getStepsFilePath;
115
- /**
116
- * Get the file path for a test script file
117
- */
118
- private getScriptFilePath;
119
- }
120
- //# sourceMappingURL=TestCaseRepository.d.ts.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"TestCaseRepository.d.ts","sourceRoot":"","sources":["../../../../../core-infra/src/repositories/TestCaseRepository.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,cAAc,EAAE,MAAM,kBAAkB,CAAC;AAClD,OAAO,EAAE,QAAQ,EAAE,QAAQ,EAAE,aAAa,EAAE,MAAM,UAAU,CAAC;AAI7D;;;;GAIG;AACH,qBAAa,kBAAmB,SAAQ,cAAc;gBACxC,SAAS,EAAE,MAAM;IAI7B;;;;OAIG;IACH,OAAO,CAAC,aAAa;IAMrB;;;;OAIG;IACH,OAAO,CAAC,WAAW;IAMnB;;OAEG;IACH,OAAO,CAAC,gBAAgB;IAOxB;;OAEG;IACH,OAAO,CAAC,cAAc;IAOtB;;OAEG;IACH,YAAY,CAAC,QAAQ,EAAE,QAAQ,GAAG,IAAI;IAmBtC;;OAEG;IACH,YAAY,CAAC,MAAM,EAAE,MAAM,EAAE,IAAI,CAAC,EAAE,MAAM,GAAG,QAAQ,GAAG,IAAI;IAoC5D;;OAEG;IACH,OAAO,CAAC,gBAAgB;IA6BxB;;;OAGG;IACH,aAAa,IAAI,QAAQ,EAAE;IAI3B;;OAEG;IACH,kBAAkB,IAAI,aAAa;IAInC;;OAEG;IACH,OAAO,CAAC,2BAA2B;IAuEnC;;;KAGC;IACD,wBAAwB,CAAC,OAAO,EAAE,MAAM,EAAE,IAAI,GAAE,GAAG,CAAC,MAAM,CAAa,GAAG,QAAQ,EAAE;IA+BpF;;OAEG;IACH,OAAO,CAAC,wBAAwB;IA6BhC;;OAEG;IACH,cAAc,CAAC,MAAM,EAAE,MAAM,GAAG,IAAI;IASpC;;OAEG;IACH,aAAa,CAAC,MAAM,EAAE,MAAM,EAAE,KAAK,EAAE,QAAQ,EAAE,GAAG,IAAI;IAkBtD;;OAEG;IACH,aAAa,CAAC,MAAM,EAAE,MAAM,GAAG,QAAQ,EAAE;IASzC;;OAEG;IACH,OAAO,CAAC,eAAe;IAOvB,oBAAoB,CAAC,MAAM,EAAE,MAAM,EAAE,EAAE,EAAE,MAAM,EAAE,YAAY,CAAC,EAAE,OAAO;IASvE;;;OAGG;IACH,YAAY,CACV,MAAM,EAAE,MAAM,EACd,IAAI,EAAE;QAAE,EAAE,EAAE,MAAM,CAAC;QAAC,WAAW,CAAC,EAAE,MAAM,CAAC;QAAC,YAAY,CAAC,EAAE,OAAO,CAAA;KAAE,EAClE,WAAW,CAAC,EAAE,MAAM,GACnB,OAAO;IAuCV;;OAEG;IACH,UAAU,CACR,MAAM,EAAE,MAAM,EACd,WAAW,EAAE,MAAM,GAAG,IAAI,GAAG,SAAS,EACtC,OAAO,EAAE,QAAQ,GAChB,IAAI;IAsBP;;OAEG;IACH,UAAU,CAAC,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,GAAG,OAAO;IAsBnD;;OAEG;IACH,cAAc,CAAC,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,GAAG,IAAI;IAQpD;;OAEG;IACH,cAAc,CAAC,MAAM,EAAE,MAAM,GAAG,MAAM,GAAG,SAAS;IAQlD,aAAa,CAAC,MAAM,EAAE,MAAM,GAAG,OAAO;IAItC;;OAEG;IACH,OAAO,CAAC,gBAAgB;IAOxB;;OAEG;IACH,OAAO,CAAC,gBAAgB;IAIxB;;OAEG;IACH,OAAO,CAAC,iBAAiB;CAG1B"}
@@ -1,463 +0,0 @@
1
- "use strict";
2
- Object.defineProperty(exports, "__esModule", { value: true });
3
- exports.TestCaseRepository = void 0;
4
- const BaseRepository_1 = require("./BaseRepository");
5
- const path_1 = require("path");
6
- const fs_1 = require("fs");
7
- /**
8
- * TestCaseRepository handles all storage operations for test cases
9
- * Responsible for managing test case data, steps, and associated scripts
10
- * Supports hierarchical directory organization (up to 3 levels)
11
- */
12
- class TestCaseRepository extends BaseRepository_1.BaseRepository {
13
- constructor(projectId) {
14
- super((0, path_1.join)("projects", projectId, 'tests'));
15
- }
16
- /**
17
- * Get scripts directory - project-aware
18
- * When project is active: ~/.test_agent/projects/{projectId}/scripts
19
- * When no project: ~/.test_agent/scripts
20
- */
21
- getScriptsDir() {
22
- const testsBaseDir = this.getBaseDir(); // ~/.test_agent/projects/{projectId}/tests or ~/.test_agent/tests
23
- const parentDir = (0, path_1.join)(testsBaseDir, '..');
24
- return (0, path_1.join)(parentDir, 'scripts');
25
- }
26
- /**
27
- * Get steps directory - project-aware
28
- * When project is active: ~/.test_agent/projects/{projectId}/steps
29
- * When no project: ~/.test_agent/steps
30
- */
31
- getStepsDir() {
32
- const testsBaseDir = this.getBaseDir(); // ~/.test_agent/projects/{projectId}/tests or ~/.test_agent/tests
33
- const parentDir = (0, path_1.join)(testsBaseDir, '..');
34
- return (0, path_1.join)(parentDir, 'steps');
35
- }
36
- /**
37
- * Ensure scripts directory exists
38
- */
39
- ensureScriptsDir() {
40
- const scriptsDir = this.getScriptsDir();
41
- if (!(0, fs_1.existsSync)(scriptsDir)) {
42
- (0, fs_1.mkdirSync)(scriptsDir, { recursive: true });
43
- }
44
- }
45
- /**
46
- * Ensure steps directory exists
47
- */
48
- ensureStepsDir() {
49
- const stepsDir = this.getStepsDir();
50
- if (!(0, fs_1.existsSync)(stepsDir)) {
51
- (0, fs_1.mkdirSync)(stepsDir, { recursive: true });
52
- }
53
- }
54
- /**
55
- * Save a test case with support for directory paths
56
- */
57
- saveTestCase(testCase) {
58
- const dirPath = (0, path_1.join)(this.getBaseDir(), testCase.path);
59
- // Ensure directory exists
60
- if (!(0, fs_1.existsSync)(dirPath)) {
61
- (0, fs_1.mkdirSync)(dirPath, { recursive: true });
62
- }
63
- // Save to file within the directory path
64
- const filePath = (0, path_1.join)(dirPath, `${testCase.id}.json`);
65
- // C:\Users\85847\.test_agent\projects\43af4db4-3249-4135-b279-97b24f27106b\tests\aaa\ccc\ddd
66
- (0, fs_1.writeFileSync)(filePath, JSON.stringify(testCase, (key, value) => {
67
- if (key === 'steps' || key === 'playwrightScript' || key === 'table') {
68
- return undefined; // Return undefined to ignore this field
69
- }
70
- return value;
71
- }, 2), 'utf-8');
72
- }
73
- /**
74
- * Load a test case with its steps and script
75
- */
76
- loadTestCase(testId, path) {
77
- let filePath;
78
- if (path) {
79
- filePath = (0, path_1.join)(this.getBaseDir(), path, `${testId}.json`);
80
- }
81
- else {
82
- // Try to find test case in the base directory or any subdirectory
83
- filePath = (0, path_1.join)(this.getBaseDir(), `${testId}.json`);
84
- if (!(0, fs_1.existsSync)(filePath)) {
85
- // Search in all directories
86
- const found = this.findTestCaseFile(testId, this.getBaseDir());
87
- if (!found) {
88
- return null;
89
- }
90
- filePath = found;
91
- }
92
- }
93
- if (!(0, fs_1.existsSync)(filePath)) {
94
- return null;
95
- }
96
- try {
97
- const content = (0, fs_1.readFileSync)(filePath, 'utf-8');
98
- const testCase = JSON.parse(content);
99
- // Load associated steps
100
- const steps = this.loadTestSteps(testId);
101
- testCase.steps = steps;
102
- return testCase;
103
- }
104
- catch {
105
- return null;
106
- }
107
- }
108
- /**
109
- * Recursively find a test case file by ID
110
- */
111
- findTestCaseFile(testId, searchPath) {
112
- try {
113
- const items = (0, fs_1.readdirSync)(searchPath);
114
- for (const item of items) {
115
- const itemPath = (0, path_1.join)(searchPath, item);
116
- const stat = (0, fs_1.statSync)(itemPath);
117
- if (stat.isDirectory() && item !== 'info.json') {
118
- // Skip deep nesting (max 3 levels from tests root)
119
- const relativePath = (0, path_1.relative)(this.getBaseDir(), itemPath);
120
- if (relativePath.split(/[\/\\]/).length > 3) {
121
- continue;
122
- }
123
- const result = this.findTestCaseFile(testId, itemPath);
124
- if (result) {
125
- return result;
126
- }
127
- }
128
- else if (item === `${testId}.json`) {
129
- return itemPath;
130
- }
131
- }
132
- }
133
- catch {
134
- // Skip if unable to read directory
135
- }
136
- return null;
137
- }
138
- /**
139
- * List all test cases sorted by creation date (newest first)
140
- * Returns a hierarchical directory tree
141
- */
142
- listTestCases() {
143
- return this.listTestCasesInDirectory(this.getBaseDir());
144
- }
145
- /**
146
- * Build complete directory tree
147
- */
148
- buildDirectoryTree() {
149
- return this.buildDirectoryTreeRecursive(this.getBaseDir(), '');
150
- }
151
- /**
152
- * Recursively build directory tree
153
- */
154
- buildDirectoryTreeRecursive(fullPath, relativePath) {
155
- const pathParts = relativePath ? relativePath.split('/') : [];
156
- const name = pathParts.length > 0 ? pathParts[pathParts.length - 1] : 'root';
157
- // Load directory info if exists
158
- let info = undefined;
159
- const infoPath = (0, path_1.join)(fullPath, 'info.json');
160
- if ((0, fs_1.existsSync)(infoPath)) {
161
- try {
162
- const content = (0, fs_1.readFileSync)(infoPath, 'utf-8');
163
- info = JSON.parse(content);
164
- }
165
- catch {
166
- // Skip invalid info.json
167
- }
168
- }
169
- const tree = {
170
- path: relativePath,
171
- name,
172
- info,
173
- children: [],
174
- tests: [],
175
- };
176
- try {
177
- const items = (0, fs_1.readdirSync)(fullPath);
178
- for (const item of items) {
179
- if (item === 'info.json') {
180
- continue;
181
- }
182
- const itemPath = (0, path_1.join)(fullPath, item);
183
- const stat = (0, fs_1.statSync)(itemPath);
184
- if (stat.isDirectory()) {
185
- const subPath = relativePath ? `${relativePath}/${item}` : item;
186
- // Check depth (max 3 levels)
187
- if (subPath.split('/').length <= 3) {
188
- tree.children.push(this.buildDirectoryTreeRecursive(itemPath, subPath));
189
- }
190
- }
191
- }
192
- // Load test files from current directory
193
- for (const item of items) {
194
- if (item.endsWith('.json') && item !== 'info.json') {
195
- try {
196
- const content = (0, fs_1.readFileSync)((0, path_1.join)(fullPath, item), 'utf-8');
197
- const testCase = JSON.parse(content);
198
- // Only include tests that belong to this directory
199
- if (testCase.path === relativePath) {
200
- tree.tests.push(testCase);
201
- }
202
- }
203
- catch {
204
- // Skip invalid test files
205
- }
206
- }
207
- }
208
- // Sort children by name and tests by creation date
209
- tree.children.sort((a, b) => a.name.localeCompare(b.name));
210
- tree.tests.sort((a, b) => b.createdAt - a.createdAt);
211
- }
212
- catch {
213
- // Return tree with no children/tests if unable to read
214
- }
215
- return tree;
216
- }
217
- /**
218
- * List test cases in a specific directory recursively.
219
- * Loads full test data including steps
220
- */
221
- listTestCasesRecursively(dirPath, seen = new Set()) {
222
- const fullPath = (0, path_1.join)(this.getBaseDir(), dirPath);
223
- const tests = [];
224
- const items = (0, fs_1.readdirSync)(fullPath);
225
- for (const item of items) {
226
- const itemPath = (0, path_1.join)(fullPath, item);
227
- const stat = (0, fs_1.statSync)(itemPath);
228
- if (stat.isDirectory()) {
229
- // Recursively list tests in subdirectories
230
- const subDirPath = dirPath ? `${dirPath}/${item}` : item;
231
- tests.push(...this.listTestCasesRecursively(subDirPath, seen));
232
- }
233
- else if (item.endsWith('.json') && item !== 'info.json') {
234
- // Load test case file
235
- const testId = item.replace('.json', '');
236
- if (seen.has(testId)) {
237
- continue; // Skip duplicates
238
- }
239
- seen.add(testId);
240
- const testCase = this.loadTestCase(testId, dirPath);
241
- if (testCase) {
242
- tests.push(testCase);
243
- }
244
- }
245
- }
246
- return tests.sort((a, b) => b.createdAt - a.createdAt);
247
- }
248
- /**
249
- * List test cases in a specific directory
250
- */
251
- listTestCasesInDirectory(dirPath) {
252
- const tests = [];
253
- try {
254
- const items = (0, fs_1.readdirSync)(dirPath);
255
- for (const item of items) {
256
- if (item.endsWith('.json') && item !== 'info.json') {
257
- try {
258
- const content = (0, fs_1.readFileSync)((0, path_1.join)(dirPath, item), 'utf-8');
259
- tests.push(JSON.parse(content));
260
- }
261
- catch {
262
- // Skip invalid files
263
- }
264
- }
265
- else {
266
- const itemPath = (0, path_1.join)(dirPath, item);
267
- const stat = (0, fs_1.statSync)(itemPath);
268
- if (stat.isDirectory()) {
269
- tests.push(...this.listTestCasesInDirectory(itemPath));
270
- }
271
- }
272
- }
273
- }
274
- catch {
275
- // Return empty array if unable to read
276
- }
277
- return tests.sort((a, b) => b.createdAt - a.createdAt);
278
- }
279
- /**
280
- * Delete a test case and its associated data
281
- */
282
- deleteTestCase(testId) {
283
- const filePath = this.findTestCaseFile(testId, this.getBaseDir());
284
- if (filePath) {
285
- (0, fs_1.rmSync)(filePath);
286
- }
287
- this.deleteTestSteps(testId);
288
- this.deleteTestScript(testId);
289
- }
290
- /**
291
- * Save test case steps
292
- */
293
- saveTestSteps(testId, steps) {
294
- // Ensure steps directory exists
295
- this.ensureStepsDir();
296
- // Reset any running steps
297
- let runningFound = false;
298
- steps.forEach(step => {
299
- if (runningFound || step.status === 'running') {
300
- runningFound = true;
301
- step.status = undefined;
302
- step.error = undefined;
303
- }
304
- });
305
- const stepsFile = this.getStepsFilePath(testId);
306
- (0, fs_1.writeFileSync)(stepsFile, JSON.stringify(steps, null, 2), 'utf-8');
307
- }
308
- /**
309
- * Load test case steps
310
- */
311
- loadTestSteps(testId) {
312
- const stepsFile = this.getStepsFilePath(testId);
313
- if (!(0, fs_1.existsSync)(stepsFile)) {
314
- return [];
315
- }
316
- const content = (0, fs_1.readFileSync)(stepsFile, 'utf-8');
317
- return JSON.parse(content);
318
- }
319
- /**
320
- * Delete all steps for a test case
321
- */
322
- deleteTestSteps(testId) {
323
- const stepsFile = this.getStepsFilePath(testId);
324
- if ((0, fs_1.existsSync)(stepsFile)) {
325
- (0, fs_1.rmSync)(stepsFile);
326
- }
327
- }
328
- updateStepBreakPoint(testId, id, isBreakpoint) {
329
- const steps = this.loadTestSteps(testId);
330
- const step = steps.find(s => s.id === id);
331
- if (step) {
332
- step.isBreakpoint = isBreakpoint;
333
- }
334
- this.saveTestSteps(testId, steps);
335
- }
336
- /**
337
- * Save a single test step or insert a new one
338
- * @returns true if updated, false if created
339
- */
340
- saveTestStep(testId, step, afterStepId) {
341
- const testCase = this.loadTestCase(testId);
342
- if (!testCase) {
343
- throw new Error(`Test case ${testId} not found`);
344
- }
345
- testCase.status = 'draft';
346
- let updated = false;
347
- let insertIndex = 0;
348
- const dbStep = testCase.steps.find(s => s.id === step.id);
349
- if (!dbStep) {
350
- if (afterStepId) {
351
- insertIndex = testCase.steps.findIndex(s => s.id === afterStepId);
352
- if (insertIndex !== -1) {
353
- insertIndex += 1;
354
- }
355
- else {
356
- insertIndex = testCase.steps.length;
357
- }
358
- testCase.steps.splice(insertIndex, 0, step);
359
- }
360
- else {
361
- testCase.steps.push(step);
362
- }
363
- }
364
- if (dbStep) {
365
- if (step.description) {
366
- dbStep.description = step.description;
367
- }
368
- dbStep.status = undefined;
369
- dbStep.error = undefined;
370
- updated = true;
371
- }
372
- this.saveTestSteps(testId, testCase.steps);
373
- return updated;
374
- }
375
- /**
376
- * Insert a new step after a specific step
377
- */
378
- insertStep(testId, afterStepId, newStep) {
379
- const testCase = this.loadTestCase(testId);
380
- if (!testCase) {
381
- throw new Error(`Test case ${testId} not found`);
382
- }
383
- testCase.status = 'draft';
384
- let insertIndex = 0;
385
- if (afterStepId) {
386
- insertIndex = testCase.steps.findIndex(s => s.id === afterStepId);
387
- if (insertIndex !== -1) {
388
- insertIndex += 1;
389
- }
390
- else {
391
- insertIndex = testCase.steps.length;
392
- }
393
- }
394
- testCase.steps.splice(insertIndex, 0, newStep);
395
- this.saveTestSteps(testId, testCase.steps);
396
- }
397
- /**
398
- * Delete a specific step by ID
399
- */
400
- deleteStep(testId, stepId) {
401
- let steps = this.loadTestSteps(testId);
402
- if (steps.length === 0) {
403
- return false;
404
- }
405
- const index = steps.findIndex(s => s.id === stepId);
406
- steps = [
407
- ...steps.slice(0, index),
408
- ...steps.slice(index + 1),
409
- ];
410
- this.saveTestSteps(testId, steps);
411
- const testCase = this.loadTestCase(testId);
412
- if (testCase && testCase.status !== 'draft') {
413
- testCase.status = 'draft';
414
- this.saveTestCase(testCase);
415
- }
416
- return true;
417
- }
418
- /**
419
- * Save Playwright script for a test case
420
- */
421
- saveTestScript(testId, script) {
422
- // Ensure scripts directory exists
423
- this.ensureScriptsDir();
424
- const scriptPath = this.getScriptFilePath(testId);
425
- (0, fs_1.writeFileSync)(scriptPath, script, 'utf-8');
426
- }
427
- /**
428
- * Load Playwright script for a test case
429
- */
430
- loadTestScript(testId) {
431
- const scriptPath = this.getScriptFilePath(testId);
432
- if (!(0, fs_1.existsSync)(scriptPath)) {
433
- return undefined;
434
- }
435
- return (0, fs_1.readFileSync)(scriptPath, 'utf-8');
436
- }
437
- hasTestScript(testId) {
438
- return (0, fs_1.existsSync)(this.getScriptFilePath(testId));
439
- }
440
- /**
441
- * Delete Playwright script for a test case
442
- */
443
- deleteTestScript(testId) {
444
- const scriptPath = this.getScriptFilePath(testId);
445
- if ((0, fs_1.existsSync)(scriptPath)) {
446
- (0, fs_1.rmSync)(scriptPath);
447
- }
448
- }
449
- /**
450
- * Get the file path for a test step file
451
- */
452
- getStepsFilePath(testId) {
453
- return (0, path_1.join)(this.getStepsDir(), `${testId}.json`);
454
- }
455
- /**
456
- * Get the file path for a test script file
457
- */
458
- getScriptFilePath(testId) {
459
- return (0, path_1.join)(this.getScriptsDir(), `${testId}.ts`);
460
- }
461
- }
462
- exports.TestCaseRepository = TestCaseRepository;
463
- //# sourceMappingURL=TestCaseRepository.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"TestCaseRepository.js","sourceRoot":"","sources":["../../../../../core-infra/src/repositories/TestCaseRepository.ts"],"names":[],"mappings":"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"}
@@ -1,35 +0,0 @@
1
- import { BaseRepository } from './BaseRepository';
2
- import { TestPlan } from '../types';
3
- /**
4
- * TestPlanRepository handles all storage operations for test plans
5
- * Responsible for managing test plan data
6
- * Data stored in: ~/.test_agent/projects/{projectId}/test_plans/
7
- */
8
- export declare class TestPlanRepository extends BaseRepository {
9
- constructor(projectId: string);
10
- /**
11
- * Save a test plan
12
- */
13
- saveTestPlan(testPlan: TestPlan): void;
14
- /**
15
- * Load a test plan by ID
16
- */
17
- loadTestPlan(testPlanId: string): TestPlan | null;
18
- /**
19
- * List all test plans
20
- */
21
- listTestPlans(): TestPlan[];
22
- /**
23
- * Update a test plan
24
- */
25
- updateTestPlan(testPlan: TestPlan): void;
26
- /**
27
- * Delete a test plan
28
- */
29
- deleteTestPlan(testPlanId: string): void;
30
- /**
31
- * Check if a test plan exists
32
- */
33
- exists(testPlanId: string): boolean;
34
- }
35
- //# sourceMappingURL=TestPlanRepository.d.ts.map