@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,213 +0,0 @@
1
- "use strict";
2
- var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
3
- if (k2 === undefined) k2 = k;
4
- var desc = Object.getOwnPropertyDescriptor(m, k);
5
- if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) {
6
- desc = { enumerable: true, get: function() { return m[k]; } };
7
- }
8
- Object.defineProperty(o, k2, desc);
9
- }) : (function(o, m, k, k2) {
10
- if (k2 === undefined) k2 = k;
11
- o[k2] = m[k];
12
- }));
13
- var __setModuleDefault = (this && this.__setModuleDefault) || (Object.create ? (function(o, v) {
14
- Object.defineProperty(o, "default", { enumerable: true, value: v });
15
- }) : function(o, v) {
16
- o["default"] = v;
17
- });
18
- var __importStar = (this && this.__importStar) || (function () {
19
- var ownKeys = function(o) {
20
- ownKeys = Object.getOwnPropertyNames || function (o) {
21
- var ar = [];
22
- for (var k in o) if (Object.prototype.hasOwnProperty.call(o, k)) ar[ar.length] = k;
23
- return ar;
24
- };
25
- return ownKeys(o);
26
- };
27
- return function (mod) {
28
- if (mod && mod.__esModule) return mod;
29
- var result = {};
30
- if (mod != null) for (var k = ownKeys(mod), i = 0; i < k.length; i++) if (k[i] !== "default") __createBinding(result, mod, k[i]);
31
- __setModuleDefault(result, mod);
32
- return result;
33
- };
34
- })();
35
- Object.defineProperty(exports, "__esModule", { value: true });
36
- exports.BaseRepository = void 0;
37
- /* eslint-disable @typescript-eslint/no-unused-vars */
38
- const os_1 = require("os");
39
- const promises_1 = require("fs/promises");
40
- const path_1 = __importStar(require("path"));
41
- const fs_1 = require("fs");
42
- /**
43
- * Base repository class providing common file I/O operations
44
- * Implements the base functionality for all data repositories
45
- *
46
- * Supports project-isolated data storage:
47
- * - When projectId is active: ~/.test_agent/projects/{projectId}/{subDir}/
48
- * - When no project: ~/.test_agent/{subDir}/
49
- */
50
- class BaseRepository {
51
- constructor(subDir) {
52
- this.storageDir = (0, path_1.join)((0, os_1.homedir)(), '.test_agent');
53
- this.subDir = subDir;
54
- this.ensureDir();
55
- }
56
- /**
57
- * Ensure the subdirectory exists
58
- */
59
- ensureDir() {
60
- const dirPath = this.getBaseDir();
61
- if (!(0, fs_1.existsSync)(dirPath)) {
62
- (0, fs_1.mkdirSync)(dirPath, { recursive: true });
63
- }
64
- }
65
- /**
66
- * Get the base directory for this repository
67
- * When a project is active:
68
- * - For 'projects': returns ~/.test_agent/projects (projects.json location)
69
- * - For other repos: returns ~/.test_agent/projects/{projectId}/{subDir}
70
- * When no project:
71
- * - returns ~/.test_agent/{subDir}
72
- */
73
- getBaseDir() {
74
- // Global directory: ~/.test_agent/{subDir}
75
- return (0, path_1.join)(this.storageDir, this.subDir);
76
- }
77
- /**
78
- * Get full file path for a specific ID
79
- */
80
- getFilePath(id, extension = 'json') {
81
- return (0, path_1.join)(this.getBaseDir(), `${id}.${extension}`);
82
- }
83
- /**
84
- * Save data to file (synchronous)
85
- */
86
- saveSync(id, data, extension = 'json') {
87
- const filePath = this.getFilePath(id, extension);
88
- try {
89
- this.createDirectoriesRecursively(filePath);
90
- }
91
- catch (error) {
92
- }
93
- (0, fs_1.writeFileSync)(filePath, JSON.stringify(data, null, 2), 'utf-8');
94
- }
95
- createDirectoriesRecursively(targetPath) {
96
- // If target path is a file path, get its parent directory; otherwise, use target path as directory
97
- const dir = path_1.default.extname(targetPath) ? path_1.default.dirname(targetPath) : targetPath;
98
- if (!(0, fs_1.existsSync)(dir)) {
99
- (0, fs_1.mkdirSync)(dir, { recursive: true });
100
- }
101
- }
102
- /**
103
- * Save data to file (asynchronous)
104
- */
105
- async save(id, data, extension = 'json') {
106
- const filePath = this.getFilePath(id, extension);
107
- await (0, promises_1.writeFile)(filePath, JSON.stringify(data, null, 2), 'utf-8');
108
- }
109
- /**
110
- * Load data from file (synchronous)
111
- */
112
- loadSync(id, extension = 'json') {
113
- const filePath = this.getFilePath(id, extension);
114
- if (!(0, fs_1.existsSync)(filePath)) {
115
- return null;
116
- }
117
- const content = (0, fs_1.readFileSync)(filePath, 'utf-8');
118
- return JSON.parse(content);
119
- }
120
- /**
121
- * Load data from file (asynchronous)
122
- */
123
- async load(id, extension = 'json') {
124
- const filePath = this.getFilePath(id, extension);
125
- try {
126
- const content = await (0, promises_1.readFile)(filePath, 'utf-8');
127
- return JSON.parse(content);
128
- }
129
- catch {
130
- return null;
131
- }
132
- }
133
- /**
134
- * List all files in the directory
135
- */
136
- async listAll(filter) {
137
- const dirPath = this.getBaseDir();
138
- try {
139
- const files = await (0, promises_1.readdir)(dirPath);
140
- const results = [];
141
- for (const file of files) {
142
- if (filter && !filter(file)) {
143
- continue;
144
- }
145
- if (!file.endsWith('.json')) {
146
- continue;
147
- }
148
- const filePath = (0, path_1.join)(dirPath, file);
149
- const content = await (0, promises_1.readFile)(filePath, 'utf-8');
150
- results.push(JSON.parse(content));
151
- }
152
- return results;
153
- }
154
- catch {
155
- return [];
156
- }
157
- }
158
- /**
159
- * List all files synchronously
160
- */
161
- listAllSync(filter) {
162
- const dirPath = this.getBaseDir();
163
- try {
164
- const files = (0, fs_1.readdirSync)(dirPath);
165
- const results = [];
166
- for (const file of files) {
167
- if (filter && !filter(file)) {
168
- continue;
169
- }
170
- if (!file.endsWith('.json')) {
171
- continue;
172
- }
173
- const filePath = (0, path_1.join)(dirPath, file);
174
- const content = (0, fs_1.readFileSync)(filePath, 'utf-8');
175
- results.push(JSON.parse(content));
176
- }
177
- return results;
178
- }
179
- catch {
180
- return [];
181
- }
182
- }
183
- /**
184
- * Delete a file (synchronous)
185
- */
186
- deleteSync(id, extension = 'json') {
187
- const filePath = this.getFilePath(id, extension);
188
- if ((0, fs_1.existsSync)(filePath)) {
189
- (0, fs_1.rmSync)(filePath);
190
- }
191
- }
192
- /**
193
- * Delete a file (asynchronous)
194
- */
195
- async delete(id, extension = 'json') {
196
- const filePath = this.getFilePath(id, extension);
197
- try {
198
- await (0, promises_1.rm)(filePath);
199
- }
200
- catch {
201
- // File doesn't exist, ignore error
202
- }
203
- }
204
- /**
205
- * Check if file exists
206
- */
207
- existsSync(id, extension = 'json') {
208
- const filePath = this.getFilePath(id, extension);
209
- return (0, fs_1.existsSync)(filePath);
210
- }
211
- }
212
- exports.BaseRepository = BaseRepository;
213
- //# sourceMappingURL=BaseRepository.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"BaseRepository.js","sourceRoot":"","sources":["../../../../../core-infra/src/repositories/BaseRepository.ts"],"names":[],"mappings":"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"}
@@ -1,70 +0,0 @@
1
- import { BaseRepository } from './BaseRepository';
2
- import { DirectoryInfo, TestDirectory } from '../types';
3
- /**
4
- * DirectoryRepository handles all storage operations for test case directories
5
- * Manages the hierarchical organization of test cases (up to 3 levels)
6
- * Each directory can have an info.json file with metadata (description, createdAt, etc.)
7
- */
8
- export declare class DirectoryRepository extends BaseRepository {
9
- constructor(projectId: string);
10
- /**
11
- * Create a new directory at the specified path
12
- * @param path - Directory path like 'folder1' or 'folder1/subfolder' (max 3 levels)
13
- * @param info - Directory metadata
14
- */
15
- createDirectory(path: string, info: Omit<DirectoryInfo, 'id' | 'path'>): DirectoryInfo;
16
- /**
17
- * Get directory info from info.json
18
- */
19
- getDirectoryInfo(path: string): DirectoryInfo | null;
20
- /**
21
- * Update directory metadata
22
- */
23
- updateDirectoryInfo(path: string, updates: Partial<Omit<DirectoryInfo, 'id' | 'path'>>): DirectoryInfo;
24
- /**
25
- * Delete a directory (must be empty)
26
- */
27
- deleteDirectory(path: string): void;
28
- /**
29
- * Rename a directory
30
- */
31
- renameDirectory(oldPath: string, newName: string): DirectoryInfo;
32
- /**
33
- * Build the complete directory tree with tests
34
- * This is the main method to get the hierarchical structure
35
- */
36
- buildDirectoryTree(basePath?: string): TestDirectory;
37
- /**
38
- * Get all directories at a specific level (flat list)
39
- */
40
- getDirectoriesAtPath(path?: string): DirectoryInfo[];
41
- /**
42
- * Check if a path is valid (exists and is a directory)
43
- */
44
- isValidDirectory(path: string): boolean;
45
- /**
46
- * Move a directory to a new parent directory
47
- * @param sourcePath - The current directory path
48
- * @param targetParentPath - The target parent directory path (or empty string for root)
49
- */
50
- moveDirectory(sourcePath: string, targetParentPath: string): DirectoryInfo;
51
- /**
52
- * Recursively update the path field in all test case JSON files
53
- * @param dirFullPath - Full filesystem path to the directory
54
- * @param oldBasePath - Old logical path (e.g., 'folder1/subfolder')
55
- * @param newBasePath - New logical path (e.g., 'folder2/subfolder')
56
- */
57
- private updateTestPathsRecursively;
58
- /**
59
- * Move a test case to a different directory
60
- * @param testId - The test case ID
61
- * @param sourceDir - The current directory path
62
- * @param targetDir - The target directory path
63
- */
64
- moveTestCase(testId: string, sourceDir: string, targetDir: string): boolean;
65
- /**
66
- * Save directory info to info.json
67
- */
68
- private saveDirectoryInfo;
69
- }
70
- //# sourceMappingURL=DirectoryRepository.d.ts.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"DirectoryRepository.d.ts","sourceRoot":"","sources":["../../../../../core-infra/src/repositories/DirectoryRepository.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,cAAc,EAAE,MAAM,kBAAkB,CAAC;AAClD,OAAO,EAAE,aAAa,EAAE,aAAa,EAAY,MAAM,UAAU,CAAC;AAKlE;;;;GAIG;AACH,qBAAa,mBAAoB,SAAQ,cAAc;gBACzC,SAAS,EAAE,MAAM;IAI7B;;;;OAIG;IACH,eAAe,CAAC,IAAI,EAAE,MAAM,EAAE,IAAI,EAAE,IAAI,CAAC,aAAa,EAAE,IAAI,GAAG,MAAM,CAAC,GAAG,aAAa;IAgCtF;;OAEG;IACH,gBAAgB,CAAC,IAAI,EAAE,MAAM,GAAG,aAAa,GAAG,IAAI;IAcpD;;OAEG;IACH,mBAAmB,CAAC,IAAI,EAAE,MAAM,EAAE,OAAO,EAAE,OAAO,CAAC,IAAI,CAAC,aAAa,EAAE,IAAI,GAAG,MAAM,CAAC,CAAC,GAAG,aAAa;IAgBtG;;OAEG;IACH,eAAe,CAAC,IAAI,EAAE,MAAM,GAAG,IAAI;IAWnC;;OAEG;IACH,eAAe,CAAC,OAAO,EAAE,MAAM,EAAE,OAAO,EAAE,MAAM,GAAG,aAAa;IAqChE;;;OAGG;IACH,kBAAkB,CAAC,QAAQ,GAAE,MAAW,GAAG,aAAa;IAmExD;;OAEG;IACH,oBAAoB,CAAC,IAAI,GAAE,MAAW,GAAG,aAAa,EAAE;IAgCxD;;OAEG;IACH,gBAAgB,CAAC,IAAI,EAAE,MAAM,GAAG,OAAO;IAKvC;;;;OAIG;IACH,aAAa,CAAC,UAAU,EAAE,MAAM,EAAE,gBAAgB,EAAE,MAAM,GAAG,aAAa;IAwC1E;;;;;OAKG;IACH,OAAO,CAAC,0BAA0B;IAuClC;;;;;OAKG;IACH,YAAY,CAAC,MAAM,EAAE,MAAM,EAAE,SAAS,EAAE,MAAM,EAAE,SAAS,EAAE,MAAM,GAAG,OAAO;IAyB3E;;OAEG;IACH,OAAO,CAAC,iBAAiB;CAW1B"}
@@ -1,336 +0,0 @@
1
- "use strict";
2
- Object.defineProperty(exports, "__esModule", { value: true });
3
- exports.DirectoryRepository = void 0;
4
- const BaseRepository_1 = require("./BaseRepository");
5
- const path_1 = require("path");
6
- const fs_1 = require("fs");
7
- const directory_validator_1 = require("../directory-validator");
8
- /**
9
- * DirectoryRepository handles all storage operations for test case directories
10
- * Manages the hierarchical organization of test cases (up to 3 levels)
11
- * Each directory can have an info.json file with metadata (description, createdAt, etc.)
12
- */
13
- class DirectoryRepository extends BaseRepository_1.BaseRepository {
14
- constructor(projectId) {
15
- super((0, path_1.join)("projects", projectId, 'tests'));
16
- }
17
- /**
18
- * Create a new directory at the specified path
19
- * @param path - Directory path like 'folder1' or 'folder1/subfolder' (max 3 levels)
20
- * @param info - Directory metadata
21
- */
22
- createDirectory(path, info) {
23
- // Validate path
24
- const validation = (0, directory_validator_1.validateDirectoryPath)(path);
25
- if (!validation.valid) {
26
- throw new Error(validation.error);
27
- }
28
- const fullPath = (0, path_1.join)(this.getBaseDir(), path);
29
- // Check if directory already exists
30
- if ((0, fs_1.existsSync)(fullPath)) {
31
- throw new Error(`Directory already exists: ${path}`);
32
- }
33
- // Create directory
34
- (0, fs_1.mkdirSync)(fullPath, { recursive: true });
35
- // Create directory info
36
- const directoryInfo = {
37
- id: `dir_${Date.now()}`,
38
- name: path.split('/').pop() || path,
39
- description: info.description,
40
- createdAt: Date.now(),
41
- updatedAt: Date.now(),
42
- };
43
- // Save info.json
44
- this.saveDirectoryInfo(path, directoryInfo);
45
- return directoryInfo;
46
- }
47
- /**
48
- * Get directory info from info.json
49
- */
50
- getDirectoryInfo(path) {
51
- const infoPath = (0, path_1.join)(this.getBaseDir(), path, 'info.json');
52
- if (!(0, fs_1.existsSync)(infoPath)) {
53
- return null;
54
- }
55
- try {
56
- const content = (0, fs_1.readFileSync)(infoPath, 'utf-8');
57
- return JSON.parse(content);
58
- }
59
- catch {
60
- return null;
61
- }
62
- }
63
- /**
64
- * Update directory metadata
65
- */
66
- updateDirectoryInfo(path, updates) {
67
- const existing = this.getDirectoryInfo(path);
68
- if (!existing) {
69
- throw new Error(`Directory does not exist: ${path}`);
70
- }
71
- const updated = {
72
- ...existing,
73
- ...updates,
74
- updatedAt: Date.now(),
75
- };
76
- this.saveDirectoryInfo(path, updated);
77
- return updated;
78
- }
79
- /**
80
- * Delete a directory (must be empty)
81
- */
82
- deleteDirectory(path) {
83
- const fullPath = (0, path_1.join)(this.getBaseDir(), path);
84
- if (!(0, fs_1.existsSync)(fullPath)) {
85
- throw new Error(`Directory does not exist: ${path}`);
86
- }
87
- // Delete the directory
88
- (0, fs_1.rmSync)(fullPath, { recursive: true, force: true });
89
- }
90
- /**
91
- * Rename a directory
92
- */
93
- renameDirectory(oldPath, newName) {
94
- // Validate new name
95
- const nameValidation = (0, directory_validator_1.validateDirectoryName)(newName);
96
- if (!nameValidation.valid) {
97
- throw new Error(nameValidation.error);
98
- }
99
- const oldFullPath = (0, path_1.join)(this.getBaseDir(), oldPath);
100
- const parentPath = oldPath.split('/').slice(0, -1).join('/');
101
- const newPath = parentPath ? `${parentPath}/${newName}` : newName;
102
- const newFullPath = (0, path_1.join)(this.getBaseDir(), newPath);
103
- if (!(0, fs_1.existsSync)(oldFullPath)) {
104
- throw new Error(`Directory does not exist: ${oldPath}`);
105
- }
106
- if ((0, fs_1.existsSync)(newFullPath)) {
107
- throw new Error(`Directory already exists: ${newPath}`);
108
- }
109
- // Rename directory
110
- (0, fs_1.renameSync)(oldFullPath, newFullPath);
111
- // Update all test cases in the renamed directory and its subdirectories
112
- this.updateTestPathsRecursively(newFullPath, oldPath, newPath);
113
- // Update info.json
114
- const dirInfo = this.getDirectoryInfo(newPath);
115
- if (dirInfo) {
116
- dirInfo.name = newName;
117
- dirInfo.updatedAt = Date.now();
118
- this.saveDirectoryInfo(newPath, dirInfo);
119
- }
120
- return dirInfo || { id: '', name: newName, createdAt: Date.now(), updatedAt: Date.now() };
121
- }
122
- /**
123
- * Build the complete directory tree with tests
124
- * This is the main method to get the hierarchical structure
125
- */
126
- buildDirectoryTree(basePath = '') {
127
- const fullPath = (0, path_1.join)(this.getBaseDir(), basePath);
128
- // Ensure directory exists
129
- if (!(0, fs_1.existsSync)(fullPath)) {
130
- (0, fs_1.mkdirSync)(fullPath, { recursive: true });
131
- }
132
- const pathParts = basePath ? basePath.split('/') : [];
133
- const name = pathParts.length > 0 ? pathParts[pathParts.length - 1] : 'root';
134
- const infoData = basePath ? this.getDirectoryInfo(basePath) : null;
135
- const info = infoData || undefined;
136
- const tree = {
137
- path: basePath,
138
- name,
139
- info,
140
- children: [],
141
- tests: [],
142
- };
143
- try {
144
- const items = (0, fs_1.readdirSync)(fullPath);
145
- for (const item of items) {
146
- const itemPath = (0, path_1.join)(fullPath, item);
147
- const stat = (0, fs_1.statSync)(itemPath);
148
- if (stat.isDirectory() && item !== 'info.json') {
149
- const subPath = basePath ? `${basePath}/${item}` : item;
150
- // Check depth (max 3 levels)
151
- if (subPath.split('/').length <= 3) {
152
- tree.children.push(this.buildDirectoryTree(subPath));
153
- }
154
- }
155
- }
156
- // Load test files (only .json files that are test cases)
157
- for (const item of items) {
158
- if (item.endsWith('.json') && item !== 'info.json') {
159
- const testPath = (0, path_1.join)(fullPath, item);
160
- try {
161
- const content = (0, fs_1.readFileSync)(testPath, 'utf-8');
162
- const testCase = JSON.parse(content);
163
- // Only add tests that belong to this directory (no path or matching path)
164
- if (testCase.path === basePath) {
165
- tree.tests.push(testCase);
166
- }
167
- }
168
- catch {
169
- // Skip invalid test files
170
- }
171
- }
172
- }
173
- // Sort children by name
174
- tree.children.sort((a, b) => a.name.localeCompare(b.name));
175
- // Sort tests by creation date (newest first)
176
- tree.tests.sort((a, b) => b.createdAt - a.createdAt);
177
- }
178
- catch {
179
- // Return empty tree if unable to read directory
180
- }
181
- return tree;
182
- }
183
- /**
184
- * Get all directories at a specific level (flat list)
185
- */
186
- getDirectoriesAtPath(path = '') {
187
- const fullPath = (0, path_1.join)(this.getBaseDir(), path);
188
- if (!(0, fs_1.existsSync)(fullPath)) {
189
- return [];
190
- }
191
- const directories = [];
192
- try {
193
- const items = (0, fs_1.readdirSync)(fullPath);
194
- for (const item of items) {
195
- const itemPath = (0, path_1.join)(fullPath, item);
196
- const stat = (0, fs_1.statSync)(itemPath);
197
- if (stat.isDirectory() && item !== 'info.json') {
198
- const subPath = path ? `${path}/${item}` : item;
199
- const info = this.getDirectoryInfo(subPath);
200
- if (info) {
201
- directories.push(info);
202
- }
203
- }
204
- }
205
- }
206
- catch {
207
- // Return empty array if unable to read directory
208
- }
209
- return directories.sort((a, b) => a.name.localeCompare(b.name));
210
- }
211
- /**
212
- * Check if a path is valid (exists and is a directory)
213
- */
214
- isValidDirectory(path) {
215
- const fullPath = (0, path_1.join)(this.getBaseDir(), path);
216
- return (0, fs_1.existsSync)(fullPath) && (0, fs_1.statSync)(fullPath).isDirectory();
217
- }
218
- /**
219
- * Move a directory to a new parent directory
220
- * @param sourcePath - The current directory path
221
- * @param targetParentPath - The target parent directory path (or empty string for root)
222
- */
223
- moveDirectory(sourcePath, targetParentPath) {
224
- const sourceFullPath = (0, path_1.join)(this.getBaseDir(), sourcePath);
225
- const directoryName = sourcePath.split('/').pop() || sourcePath;
226
- // Validate paths
227
- if (!(0, fs_1.existsSync)(sourceFullPath)) {
228
- throw new Error(`Source directory does not exist: ${sourcePath}`);
229
- }
230
- const targetPath = targetParentPath ? `${targetParentPath}/${directoryName}` : directoryName;
231
- const targetFullPath = (0, path_1.join)(this.getBaseDir(), targetPath);
232
- // Check if target already exists
233
- if ((0, fs_1.existsSync)(targetFullPath)) {
234
- throw new Error(`Target path already exists: ${targetPath}`);
235
- }
236
- // Validate target path
237
- const pathValidation = (0, directory_validator_1.validateDirectoryPath)(targetPath);
238
- if (!pathValidation.valid) {
239
- throw new Error(pathValidation.error);
240
- }
241
- // Ensure target parent directory exists
242
- const targetParentFullPath = (0, path_1.dirname)(targetFullPath);
243
- if (!(0, fs_1.existsSync)(targetParentFullPath)) {
244
- (0, fs_1.mkdirSync)(targetParentFullPath, { recursive: true });
245
- }
246
- // Move the directory
247
- (0, fs_1.renameSync)(sourceFullPath, targetFullPath);
248
- // Update all test cases in the moved directory and its subdirectories
249
- this.updateTestPathsRecursively(targetFullPath, sourcePath, targetPath);
250
- // Get the directory info
251
- const dirInfo = this.getDirectoryInfo(targetPath);
252
- return dirInfo || { id: '', name: directoryName, createdAt: Date.now(), updatedAt: Date.now() };
253
- }
254
- /**
255
- * Recursively update the path field in all test case JSON files
256
- * @param dirFullPath - Full filesystem path to the directory
257
- * @param oldBasePath - Old logical path (e.g., 'folder1/subfolder')
258
- * @param newBasePath - New logical path (e.g., 'folder2/subfolder')
259
- */
260
- updateTestPathsRecursively(dirFullPath, oldBasePath, newBasePath) {
261
- if (!(0, fs_1.existsSync)(dirFullPath)) {
262
- return;
263
- }
264
- try {
265
- const items = (0, fs_1.readdirSync)(dirFullPath);
266
- for (const item of items) {
267
- const itemPath = (0, path_1.join)(dirFullPath, item);
268
- const stat = (0, fs_1.statSync)(itemPath);
269
- if (stat.isDirectory() && item !== 'info.json') {
270
- // Recursively update subdirectories
271
- this.updateTestPathsRecursively(itemPath, oldBasePath, newBasePath);
272
- }
273
- else if (item.endsWith('.json') && item !== 'info.json') {
274
- // Update test case file
275
- try {
276
- const content = (0, fs_1.readFileSync)(itemPath, 'utf-8');
277
- const testCase = JSON.parse(content);
278
- // Update the path field if it starts with the old base path
279
- if (testCase.path && testCase.path.startsWith(oldBasePath)) {
280
- const relativePath = testCase.path.substring(oldBasePath.length);
281
- testCase.path = newBasePath + relativePath;
282
- // Save the updated test case
283
- (0, fs_1.writeFileSync)(itemPath, JSON.stringify(testCase, null, 2), 'utf-8');
284
- }
285
- }
286
- catch (error) {
287
- console.error(`Failed to update test case ${item}:`, error);
288
- }
289
- }
290
- }
291
- }
292
- catch (error) {
293
- console.error(`Failed to update test paths in ${dirFullPath}:`, error);
294
- }
295
- }
296
- /**
297
- * Move a test case to a different directory
298
- * @param testId - The test case ID
299
- * @param sourceDir - The current directory path
300
- * @param targetDir - The target directory path
301
- */
302
- moveTestCase(testId, sourceDir, targetDir) {
303
- const sourceFile = (0, path_1.join)(this.getBaseDir(), sourceDir, `${testId}.json`);
304
- const targetFile = (0, path_1.join)(this.getBaseDir(), targetDir, `${testId}.json`);
305
- // Check if source file exists
306
- if (!(0, fs_1.existsSync)(sourceFile)) {
307
- throw new Error(`Test case file does not exist: ${sourceFile}`);
308
- }
309
- // Check if target directory exists
310
- const targetDirFullPath = (0, path_1.join)(this.getBaseDir(), targetDir);
311
- if (!(0, fs_1.existsSync)(targetDirFullPath)) {
312
- throw new Error(`Target directory does not exist: ${targetDir}`);
313
- }
314
- // Check if file already exists in target
315
- if ((0, fs_1.existsSync)(targetFile)) {
316
- throw new Error(`Test case already exists in target directory`);
317
- }
318
- // Move the file
319
- (0, fs_1.renameSync)(sourceFile, targetFile);
320
- return true;
321
- }
322
- /**
323
- * Save directory info to info.json
324
- */
325
- saveDirectoryInfo(path, info) {
326
- const infoPath = (0, path_1.join)(this.getBaseDir(), path, 'info.json');
327
- // Ensure parent directory exists
328
- const dir = (0, path_1.dirname)(infoPath);
329
- if (!(0, fs_1.existsSync)(dir)) {
330
- (0, fs_1.mkdirSync)(dir, { recursive: true });
331
- }
332
- (0, fs_1.writeFileSync)(infoPath, JSON.stringify(info, null, 2), 'utf-8');
333
- }
334
- }
335
- exports.DirectoryRepository = DirectoryRepository;
336
- //# sourceMappingURL=DirectoryRepository.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"DirectoryRepository.js","sourceRoot":"","sources":["../../../../../core-infra/src/repositories/DirectoryRepository.ts"],"names":[],"mappings":"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"}