coding-agent-benchmarks 0.2.0 → 0.3.0

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 (176) hide show
  1. package/README.md +225 -10
  2. package/dist/adapters/claudeCodeCLI.d.ts +1 -1
  3. package/dist/adapters/claudeCodeCLI.d.ts.map +1 -1
  4. package/dist/adapters/claudeCodeCLI.js +44 -32
  5. package/dist/adapters/claudeCodeCLI.js.map +1 -1
  6. package/dist/adapters/copilotCLI.d.ts.map +1 -1
  7. package/dist/adapters/copilotCLI.js +28 -16
  8. package/dist/adapters/copilotCLI.js.map +1 -1
  9. package/dist/config/environment.d.ts +51 -0
  10. package/dist/config/environment.d.ts.map +1 -0
  11. package/dist/config/environment.js +57 -0
  12. package/dist/config/environment.js.map +1 -0
  13. package/dist/config/parser.d.ts +6 -0
  14. package/dist/config/parser.d.ts.map +1 -0
  15. package/dist/config/parser.js +87 -0
  16. package/dist/config/parser.js.map +1 -0
  17. package/dist/evaluator.d.ts +4 -9
  18. package/dist/evaluator.d.ts.map +1 -1
  19. package/dist/evaluator.js +4 -12
  20. package/dist/evaluator.js.map +1 -1
  21. package/dist/examples/file-upload-example.d.ts +2 -0
  22. package/dist/examples/file-upload-example.d.ts.map +1 -0
  23. package/dist/examples/file-upload-example.js +37 -0
  24. package/dist/examples/file-upload-example.js.map +1 -0
  25. package/dist/examples/typedEventEmitterExample.d.ts +5 -0
  26. package/dist/examples/typedEventEmitterExample.d.ts.map +1 -0
  27. package/dist/examples/typedEventEmitterExample.js +44 -0
  28. package/dist/examples/typedEventEmitterExample.js.map +1 -0
  29. package/dist/index.d.ts +13 -12
  30. package/dist/index.d.ts.map +1 -1
  31. package/dist/index.js +3 -1
  32. package/dist/index.js.map +1 -1
  33. package/dist/registration/database.d.ts +13 -0
  34. package/dist/registration/database.d.ts.map +1 -0
  35. package/dist/registration/database.js +35 -0
  36. package/dist/registration/database.js.map +1 -0
  37. package/dist/registration/email.d.ts +17 -0
  38. package/dist/registration/email.d.ts.map +1 -0
  39. package/dist/registration/email.js +40 -0
  40. package/dist/registration/email.js.map +1 -0
  41. package/dist/registration/emailService.d.ts +13 -0
  42. package/dist/registration/emailService.d.ts.map +1 -0
  43. package/dist/registration/emailService.js +26 -0
  44. package/dist/registration/emailService.js.map +1 -0
  45. package/dist/registration/example.d.ts +2 -0
  46. package/dist/registration/example.d.ts.map +1 -0
  47. package/dist/registration/example.js +37 -0
  48. package/dist/registration/example.js.map +1 -0
  49. package/dist/registration/index.d.ts +7 -0
  50. package/dist/registration/index.d.ts.map +1 -0
  51. package/dist/registration/index.js +15 -0
  52. package/dist/registration/index.js.map +1 -0
  53. package/dist/registration/password.d.ts +3 -0
  54. package/dist/registration/password.d.ts.map +1 -0
  55. package/dist/registration/password.js +27 -0
  56. package/dist/registration/password.js.map +1 -0
  57. package/dist/registration/passwordHasher.d.ts +8 -0
  58. package/dist/registration/passwordHasher.d.ts.map +1 -0
  59. package/dist/registration/passwordHasher.js +39 -0
  60. package/dist/registration/passwordHasher.js.map +1 -0
  61. package/dist/registration/registrationService.d.ts +14 -0
  62. package/dist/registration/registrationService.d.ts.map +1 -0
  63. package/dist/registration/registrationService.js +49 -0
  64. package/dist/registration/registrationService.js.map +1 -0
  65. package/dist/registration/service.d.ts +14 -0
  66. package/dist/registration/service.d.ts.map +1 -0
  67. package/dist/registration/service.js +48 -0
  68. package/dist/registration/service.js.map +1 -0
  69. package/dist/registration/types.d.ts +22 -0
  70. package/dist/registration/types.d.ts.map +1 -0
  71. package/dist/registration/types.js +3 -0
  72. package/dist/registration/types.js.map +1 -0
  73. package/dist/registration/userRepository.d.ts +12 -0
  74. package/dist/registration/userRepository.d.ts.map +1 -0
  75. package/dist/registration/userRepository.js +28 -0
  76. package/dist/registration/userRepository.js.map +1 -0
  77. package/dist/registration/validator.d.ts +7 -0
  78. package/dist/registration/validator.d.ts.map +1 -0
  79. package/dist/registration/validator.js +44 -0
  80. package/dist/registration/validator.js.map +1 -0
  81. package/dist/registration/validators.d.ts +5 -0
  82. package/dist/registration/validators.d.ts.map +1 -0
  83. package/dist/registration/validators.js +60 -0
  84. package/dist/registration/validators.js.map +1 -0
  85. package/dist/reporter.d.ts.map +1 -1
  86. package/dist/reporter.js +59 -29
  87. package/dist/reporter.js.map +1 -1
  88. package/dist/runner.js +2 -1
  89. package/dist/runner.js.map +1 -1
  90. package/dist/sync/cache.d.ts +14 -0
  91. package/dist/sync/cache.d.ts.map +1 -0
  92. package/dist/sync/cache.js +73 -0
  93. package/dist/sync/cache.js.map +1 -0
  94. package/dist/sync/index.d.ts +7 -0
  95. package/dist/sync/index.d.ts.map +1 -0
  96. package/dist/sync/index.js +20 -0
  97. package/dist/sync/index.js.map +1 -0
  98. package/dist/sync/resolver.d.ts +12 -0
  99. package/dist/sync/resolver.d.ts.map +1 -0
  100. package/dist/sync/resolver.js +43 -0
  101. package/dist/sync/resolver.js.map +1 -0
  102. package/dist/sync/service.d.ts +20 -0
  103. package/dist/sync/service.d.ts.map +1 -0
  104. package/dist/sync/service.js +162 -0
  105. package/dist/sync/service.js.map +1 -0
  106. package/dist/sync/source.d.ts +21 -0
  107. package/dist/sync/source.d.ts.map +1 -0
  108. package/dist/sync/source.js +58 -0
  109. package/dist/sync/source.js.map +1 -0
  110. package/dist/sync/types.d.ts +56 -0
  111. package/dist/sync/types.d.ts.map +1 -0
  112. package/dist/sync/types.js +21 -0
  113. package/dist/sync/types.js.map +1 -0
  114. package/dist/types.d.ts +6 -6
  115. package/dist/types.d.ts.map +1 -1
  116. package/dist/utils/baselineManager.d.ts +2 -1
  117. package/dist/utils/baselineManager.d.ts.map +1 -1
  118. package/dist/utils/baselineManager.js +1 -0
  119. package/dist/utils/baselineManager.js.map +1 -1
  120. package/dist/utils/cache.d.ts +11 -0
  121. package/dist/utils/cache.d.ts.map +1 -0
  122. package/dist/utils/cache.js +28 -0
  123. package/dist/utils/cache.js.map +1 -0
  124. package/dist/utils/config-merger.d.ts +11 -0
  125. package/dist/utils/config-merger.d.ts.map +1 -0
  126. package/dist/utils/config-merger.js +36 -0
  127. package/dist/utils/config-merger.js.map +1 -0
  128. package/dist/utils/configParser.d.ts +9 -0
  129. package/dist/utils/configParser.d.ts.map +1 -0
  130. package/dist/utils/configParser.js +51 -0
  131. package/dist/utils/configParser.js.map +1 -0
  132. package/dist/utils/database-providers.d.ts +23 -0
  133. package/dist/utils/database-providers.d.ts.map +1 -0
  134. package/dist/utils/database-providers.js +48 -0
  135. package/dist/utils/database-providers.js.map +1 -0
  136. package/dist/utils/errorHandler.d.ts +10 -0
  137. package/dist/utils/errorHandler.d.ts.map +1 -0
  138. package/dist/utils/errorHandler.js +58 -0
  139. package/dist/utils/errorHandler.js.map +1 -0
  140. package/dist/utils/fetchUserData.d.ts +11 -0
  141. package/dist/utils/fetchUserData.d.ts.map +1 -0
  142. package/dist/utils/fetchUserData.js +31 -0
  143. package/dist/utils/fetchUserData.js.map +1 -0
  144. package/dist/utils/file-upload-handler.d.ts +46 -0
  145. package/dist/utils/file-upload-handler.d.ts.map +1 -0
  146. package/dist/utils/file-upload-handler.js +110 -0
  147. package/dist/utils/file-upload-handler.js.map +1 -0
  148. package/dist/utils/gitUtils.d.ts +2 -1
  149. package/dist/utils/gitUtils.d.ts.map +1 -1
  150. package/dist/utils/gitUtils.js +85 -18
  151. package/dist/utils/gitUtils.js.map +1 -1
  152. package/dist/utils/statistics.d.ts +9 -0
  153. package/dist/utils/statistics.d.ts.map +1 -0
  154. package/dist/utils/statistics.js +26 -0
  155. package/dist/utils/statistics.js.map +1 -0
  156. package/dist/utils/storage-providers.d.ts +24 -0
  157. package/dist/utils/storage-providers.d.ts.map +1 -0
  158. package/dist/utils/storage-providers.js +38 -0
  159. package/dist/utils/storage-providers.js.map +1 -0
  160. package/dist/utils/transformArray.d.ts +18 -0
  161. package/dist/utils/transformArray.d.ts.map +1 -0
  162. package/dist/utils/transformArray.js +21 -0
  163. package/dist/utils/transformArray.js.map +1 -0
  164. package/dist/utils/typedEventEmitter.d.ts +18 -0
  165. package/dist/utils/typedEventEmitter.d.ts.map +1 -0
  166. package/dist/utils/typedEventEmitter.js +62 -0
  167. package/dist/utils/typedEventEmitter.js.map +1 -0
  168. package/dist/utils/userUtils.d.ts +9 -0
  169. package/dist/utils/userUtils.d.ts.map +1 -0
  170. package/dist/utils/userUtils.js +14 -0
  171. package/dist/utils/userUtils.js.map +1 -0
  172. package/dist/validators/llmJudge.d.ts +1 -1
  173. package/dist/validators/llmJudge.d.ts.map +1 -1
  174. package/dist/validators/llmJudge.js +40 -41
  175. package/dist/validators/llmJudge.js.map +1 -1
  176. package/package.json +2 -2
@@ -0,0 +1,51 @@
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.parseConfig = void 0;
37
+ const fs = __importStar(require("fs"));
38
+ const parseConfig = (filePath) => {
39
+ const fileContent = fs.readFileSync(filePath, 'utf-8');
40
+ const parsedData = JSON.parse(fileContent);
41
+ const config = {
42
+ apiUrl: parsedData.apiUrl,
43
+ timeout: parsedData.timeout,
44
+ retryAttempts: parsedData.retryAttempts,
45
+ enableCache: parsedData.enableCache,
46
+ headers: parsedData.headers,
47
+ };
48
+ return config;
49
+ };
50
+ exports.parseConfig = parseConfig;
51
+ //# sourceMappingURL=configParser.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"configParser.js","sourceRoot":"","sources":["../../src/utils/configParser.ts"],"names":[],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AAAA,uCAAyB;AAUlB,MAAM,WAAW,GAAG,CAAC,QAAgB,EAAgB,EAAE;IAC5D,MAAM,WAAW,GAAG,EAAE,CAAC,YAAY,CAAC,QAAQ,EAAE,OAAO,CAAC,CAAC;IACvD,MAAM,UAAU,GAAG,IAAI,CAAC,KAAK,CAAC,WAAW,CAAC,CAAC;IAE3C,MAAM,MAAM,GAAiB;QAC3B,MAAM,EAAE,UAAU,CAAC,MAAM;QACzB,OAAO,EAAE,UAAU,CAAC,OAAO;QAC3B,aAAa,EAAE,UAAU,CAAC,aAAa;QACvC,WAAW,EAAE,UAAU,CAAC,WAAW;QACnC,OAAO,EAAE,UAAU,CAAC,OAAO;KAC5B,CAAC;IAEF,OAAO,MAAM,CAAC;AAChB,CAAC,CAAC;AAbW,QAAA,WAAW,eAatB"}
@@ -0,0 +1,23 @@
1
+ import { DatabaseProvider, UploadedFile } from './file-upload-handler';
2
+ export declare class PostgresDatabaseProvider implements DatabaseProvider {
3
+ private readonly connectionString;
4
+ private readonly tableName;
5
+ constructor(connectionString: string, tableName?: string);
6
+ createUploadRecord(file: UploadedFile): Promise<string>;
7
+ private generateId;
8
+ }
9
+ export declare class MongoDatabaseProvider implements DatabaseProvider {
10
+ private readonly connectionString;
11
+ private readonly collectionName;
12
+ constructor(connectionString: string, collectionName?: string);
13
+ createUploadRecord(file: UploadedFile): Promise<string>;
14
+ private generateObjectId;
15
+ }
16
+ export declare class SQLiteDatabaseProvider implements DatabaseProvider {
17
+ private readonly dbPath;
18
+ private readonly tableName;
19
+ constructor(dbPath: string, tableName?: string);
20
+ createUploadRecord(file: UploadedFile): Promise<string>;
21
+ private generateId;
22
+ }
23
+ //# sourceMappingURL=database-providers.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"database-providers.d.ts","sourceRoot":"","sources":["../../src/utils/database-providers.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,gBAAgB,EAAE,YAAY,EAAE,MAAM,uBAAuB,CAAC;AAEvE,qBAAa,wBAAyB,YAAW,gBAAgB;IAE7D,OAAO,CAAC,QAAQ,CAAC,gBAAgB;IACjC,OAAO,CAAC,QAAQ,CAAC,SAAS;gBADT,gBAAgB,EAAE,MAAM,EACxB,SAAS,GAAE,MAAuB;IAG/C,kBAAkB,CAAC,IAAI,EAAE,YAAY,GAAG,OAAO,CAAC,MAAM,CAAC;IAK7D,OAAO,CAAC,UAAU;CAGnB;AAED,qBAAa,qBAAsB,YAAW,gBAAgB;IAE1D,OAAO,CAAC,QAAQ,CAAC,gBAAgB;IACjC,OAAO,CAAC,QAAQ,CAAC,cAAc;gBADd,gBAAgB,EAAE,MAAM,EACxB,cAAc,GAAE,MAAuB;IAGpD,kBAAkB,CAAC,IAAI,EAAE,YAAY,GAAG,OAAO,CAAC,MAAM,CAAC;IAK7D,OAAO,CAAC,gBAAgB;CAKzB;AAED,qBAAa,sBAAuB,YAAW,gBAAgB;IAE3D,OAAO,CAAC,QAAQ,CAAC,MAAM;IACvB,OAAO,CAAC,QAAQ,CAAC,SAAS;gBADT,MAAM,EAAE,MAAM,EACd,SAAS,GAAE,MAAuB;IAG/C,kBAAkB,CAAC,IAAI,EAAE,YAAY,GAAG,OAAO,CAAC,MAAM,CAAC;IAK7D,OAAO,CAAC,UAAU;CAGnB"}
@@ -0,0 +1,48 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.SQLiteDatabaseProvider = exports.MongoDatabaseProvider = exports.PostgresDatabaseProvider = void 0;
4
+ class PostgresDatabaseProvider {
5
+ constructor(connectionString, tableName = 'file_uploads') {
6
+ this.connectionString = connectionString;
7
+ this.tableName = tableName;
8
+ }
9
+ async createUploadRecord(file) {
10
+ const id = this.generateId();
11
+ return id;
12
+ }
13
+ generateId() {
14
+ return `upload_${Date.now()}_${Math.random().toString(36).substring(2, 15)}`;
15
+ }
16
+ }
17
+ exports.PostgresDatabaseProvider = PostgresDatabaseProvider;
18
+ class MongoDatabaseProvider {
19
+ constructor(connectionString, collectionName = 'file_uploads') {
20
+ this.connectionString = connectionString;
21
+ this.collectionName = collectionName;
22
+ }
23
+ async createUploadRecord(file) {
24
+ const id = this.generateObjectId();
25
+ return id;
26
+ }
27
+ generateObjectId() {
28
+ const timestamp = Math.floor(Date.now() / 1000).toString(16);
29
+ const random = Math.random().toString(16).substring(2, 18);
30
+ return timestamp + random;
31
+ }
32
+ }
33
+ exports.MongoDatabaseProvider = MongoDatabaseProvider;
34
+ class SQLiteDatabaseProvider {
35
+ constructor(dbPath, tableName = 'file_uploads') {
36
+ this.dbPath = dbPath;
37
+ this.tableName = tableName;
38
+ }
39
+ async createUploadRecord(file) {
40
+ const id = this.generateId();
41
+ return id;
42
+ }
43
+ generateId() {
44
+ return `upload_${Date.now()}_${Math.random().toString(36).substring(2, 15)}`;
45
+ }
46
+ }
47
+ exports.SQLiteDatabaseProvider = SQLiteDatabaseProvider;
48
+ //# sourceMappingURL=database-providers.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"database-providers.js","sourceRoot":"","sources":["../../src/utils/database-providers.ts"],"names":[],"mappings":";;;AAEA,MAAa,wBAAwB;IACnC,YACmB,gBAAwB,EACxB,YAAoB,cAAc;QADlC,qBAAgB,GAAhB,gBAAgB,CAAQ;QACxB,cAAS,GAAT,SAAS,CAAyB;IAClD,CAAC;IAEJ,KAAK,CAAC,kBAAkB,CAAC,IAAkB;QACzC,MAAM,EAAE,GAAG,IAAI,CAAC,UAAU,EAAE,CAAC;QAC7B,OAAO,EAAE,CAAC;IACZ,CAAC;IAEO,UAAU;QAChB,OAAO,UAAU,IAAI,CAAC,GAAG,EAAE,IAAI,IAAI,CAAC,MAAM,EAAE,CAAC,QAAQ,CAAC,EAAE,CAAC,CAAC,SAAS,CAAC,CAAC,EAAE,EAAE,CAAC,EAAE,CAAC;IAC/E,CAAC;CACF;AAdD,4DAcC;AAED,MAAa,qBAAqB;IAChC,YACmB,gBAAwB,EACxB,iBAAyB,cAAc;QADvC,qBAAgB,GAAhB,gBAAgB,CAAQ;QACxB,mBAAc,GAAd,cAAc,CAAyB;IACvD,CAAC;IAEJ,KAAK,CAAC,kBAAkB,CAAC,IAAkB;QACzC,MAAM,EAAE,GAAG,IAAI,CAAC,gBAAgB,EAAE,CAAC;QACnC,OAAO,EAAE,CAAC;IACZ,CAAC;IAEO,gBAAgB;QACtB,MAAM,SAAS,GAAG,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,GAAG,EAAE,GAAG,IAAI,CAAC,CAAC,QAAQ,CAAC,EAAE,CAAC,CAAC;QAC7D,MAAM,MAAM,GAAG,IAAI,CAAC,MAAM,EAAE,CAAC,QAAQ,CAAC,EAAE,CAAC,CAAC,SAAS,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC;QAC3D,OAAO,SAAS,GAAG,MAAM,CAAC;IAC5B,CAAC;CACF;AAhBD,sDAgBC;AAED,MAAa,sBAAsB;IACjC,YACmB,MAAc,EACd,YAAoB,cAAc;QADlC,WAAM,GAAN,MAAM,CAAQ;QACd,cAAS,GAAT,SAAS,CAAyB;IAClD,CAAC;IAEJ,KAAK,CAAC,kBAAkB,CAAC,IAAkB;QACzC,MAAM,EAAE,GAAG,IAAI,CAAC,UAAU,EAAE,CAAC;QAC7B,OAAO,EAAE,CAAC;IACZ,CAAC;IAEO,UAAU;QAChB,OAAO,UAAU,IAAI,CAAC,GAAG,EAAE,IAAI,IAAI,CAAC,MAAM,EAAE,CAAC,QAAQ,CAAC,EAAE,CAAC,CAAC,SAAS,CAAC,CAAC,EAAE,EAAE,CAAC,EAAE,CAAC;IAC/E,CAAC;CACF;AAdD,wDAcC"}
@@ -0,0 +1,10 @@
1
+ /**
2
+ * Error handling and formatting utilities
3
+ */
4
+ /**
5
+ * Format and display error messages with appropriate styling
6
+ */
7
+ export declare const processCLIError: (error: unknown, context?: {
8
+ adapter?: string;
9
+ }) => void;
10
+ //# sourceMappingURL=errorHandler.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"errorHandler.d.ts","sourceRoot":"","sources":["../../src/utils/errorHandler.ts"],"names":[],"mappings":"AAAA;;GAEG;AAKH;;GAEG;AACH,eAAO,MAAM,eAAe,GAC1B,OAAO,OAAO,EACd,UAAU;IAAE,OAAO,CAAC,EAAE,MAAM,CAAA;CAAE,KAC7B,IAgBF,CAAC"}
@@ -0,0 +1,58 @@
1
+ "use strict";
2
+ /**
3
+ * Error handling and formatting utilities
4
+ */
5
+ var __importDefault = (this && this.__importDefault) || function (mod) {
6
+ return (mod && mod.__esModule) ? mod : { "default": mod };
7
+ };
8
+ Object.defineProperty(exports, "__esModule", { value: true });
9
+ exports.processCLIError = void 0;
10
+ const chalk_1 = __importDefault(require("chalk"));
11
+ /**
12
+ * Format and display error messages with appropriate styling
13
+ */
14
+ const processCLIError = (error, context) => {
15
+ const errorMessage = String(error);
16
+ const isInteractive = process.stdout.isTTY === true;
17
+ // Unknown adapter type error
18
+ if (errorMessage.includes("Unknown adapter type")) {
19
+ displayUnknownAdapterError(context?.adapter, isInteractive);
20
+ return;
21
+ }
22
+ // Generic error
23
+ if (isInteractive) {
24
+ console.error(chalk_1.default.red("Error:"), errorMessage);
25
+ }
26
+ else {
27
+ console.error("Error:", errorMessage);
28
+ }
29
+ };
30
+ exports.processCLIError = processCLIError;
31
+ /**
32
+ * Display a formatted error message for unknown adapter types
33
+ */
34
+ const displayUnknownAdapterError = (providedAdapter, isInteractive = true) => {
35
+ const validAdapters = ["copilot", "claude-code"];
36
+ if (isInteractive) {
37
+ console.error("");
38
+ console.error(chalk_1.default.red.bold("\u2717 Invalid adapter type"));
39
+ console.error("");
40
+ if (providedAdapter) {
41
+ console.error(` ${chalk_1.default.gray("You specified:")} ${chalk_1.default.yellow(providedAdapter)}`);
42
+ }
43
+ console.error(` ${chalk_1.default.gray("Valid options:")} ${validAdapters.map((a) => chalk_1.default.green(a)).join(", ")}`);
44
+ console.error("");
45
+ console.error(chalk_1.default.gray(" Example: npx coding-agent-benchmarks evaluate --adapter claude-code"));
46
+ console.error("");
47
+ }
48
+ else {
49
+ // Non-interactive mode: simple, parseable output
50
+ console.error("Error: Invalid adapter type");
51
+ if (providedAdapter) {
52
+ console.error(` You specified: ${providedAdapter}`);
53
+ }
54
+ console.error(` Valid options: ${validAdapters.join(", ")}`);
55
+ console.error(" Example: npx coding-agent-benchmarks evaluate --adapter copilot");
56
+ }
57
+ };
58
+ //# sourceMappingURL=errorHandler.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"errorHandler.js","sourceRoot":"","sources":["../../src/utils/errorHandler.ts"],"names":[],"mappings":";AAAA;;GAEG;;;;;;AAEH,kDAA0B;AAG1B;;GAEG;AACI,MAAM,eAAe,GAAG,CAC7B,KAAc,EACd,OAA8B,EACxB,EAAE;IACR,MAAM,YAAY,GAAG,MAAM,CAAC,KAAK,CAAC,CAAC;IACnC,MAAM,aAAa,GAAG,OAAO,CAAC,MAAM,CAAC,KAAK,KAAK,IAAI,CAAC;IAEpD,6BAA6B;IAC7B,IAAI,YAAY,CAAC,QAAQ,CAAC,sBAAsB,CAAC,EAAE,CAAC;QAClD,0BAA0B,CAAC,OAAO,EAAE,OAAO,EAAE,aAAa,CAAC,CAAC;QAC5D,OAAO;IACT,CAAC;IAED,gBAAgB;IAChB,IAAI,aAAa,EAAE,CAAC;QAClB,OAAO,CAAC,KAAK,CAAC,eAAK,CAAC,GAAG,CAAC,QAAQ,CAAC,EAAE,YAAY,CAAC,CAAC;IACnD,CAAC;SAAM,CAAC;QACN,OAAO,CAAC,KAAK,CAAC,QAAQ,EAAE,YAAY,CAAC,CAAC;IACxC,CAAC;AACH,CAAC,CAAC;AAnBW,QAAA,eAAe,mBAmB1B;AAEF;;GAEG;AACH,MAAM,0BAA0B,GAAG,CACjC,eAAwB,EACxB,aAAa,GAAG,IAAI,EACd,EAAE;IACR,MAAM,aAAa,GAAkB,CAAC,SAAS,EAAE,aAAa,CAAC,CAAC;IAEhE,IAAI,aAAa,EAAE,CAAC;QAClB,OAAO,CAAC,KAAK,CAAC,EAAE,CAAC,CAAC;QAClB,OAAO,CAAC,KAAK,CAAC,eAAK,CAAC,GAAG,CAAC,IAAI,CAAC,6BAA6B,CAAC,CAAC,CAAC;QAC7D,OAAO,CAAC,KAAK,CAAC,EAAE,CAAC,CAAC;QAElB,IAAI,eAAe,EAAE,CAAC;YACpB,OAAO,CAAC,KAAK,CACX,KAAK,eAAK,CAAC,IAAI,CAAC,gBAAgB,CAAC,IAAI,eAAK,CAAC,MAAM,CAAC,eAAe,CAAC,EAAE,CACrE,CAAC;QACJ,CAAC;QAED,OAAO,CAAC,KAAK,CACX,KAAK,eAAK,CAAC,IAAI,CAAC,gBAAgB,CAAC,IAAI,aAAa,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,eAAK,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,EAAE,CAC3F,CAAC;QACF,OAAO,CAAC,KAAK,CAAC,EAAE,CAAC,CAAC;QAClB,OAAO,CAAC,KAAK,CACX,eAAK,CAAC,IAAI,CACR,uEAAuE,CACxE,CACF,CAAC;QACF,OAAO,CAAC,KAAK,CAAC,EAAE,CAAC,CAAC;IACpB,CAAC;SAAM,CAAC;QACN,iDAAiD;QACjD,OAAO,CAAC,KAAK,CAAC,6BAA6B,CAAC,CAAC;QAC7C,IAAI,eAAe,EAAE,CAAC;YACpB,OAAO,CAAC,KAAK,CAAC,oBAAoB,eAAe,EAAE,CAAC,CAAC;QACvD,CAAC;QACD,OAAO,CAAC,KAAK,CAAC,oBAAoB,aAAa,CAAC,IAAI,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC;QAC9D,OAAO,CAAC,KAAK,CACX,mEAAmE,CACpE,CAAC;IACJ,CAAC;AACH,CAAC,CAAC"}
@@ -0,0 +1,11 @@
1
+ interface User {
2
+ readonly id: number;
3
+ readonly name: string;
4
+ readonly email: string;
5
+ readonly username: string;
6
+ readonly createdAt: Date;
7
+ }
8
+ declare const fetchUserData: (userId: number) => Promise<User>;
9
+ export { fetchUserData };
10
+ export type { User };
11
+ //# sourceMappingURL=fetchUserData.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"fetchUserData.d.ts","sourceRoot":"","sources":["../../src/utils/fetchUserData.ts"],"names":[],"mappings":"AAAA,UAAU,IAAI;IACZ,QAAQ,CAAC,EAAE,EAAE,MAAM,CAAC;IACpB,QAAQ,CAAC,IAAI,EAAE,MAAM,CAAC;IACtB,QAAQ,CAAC,KAAK,EAAE,MAAM,CAAC;IACvB,QAAQ,CAAC,QAAQ,EAAE,MAAM,CAAC;IAC1B,QAAQ,CAAC,SAAS,EAAE,IAAI,CAAC;CAC1B;AAUD,QAAA,MAAM,aAAa,GAAU,QAAQ,MAAM,KAAG,OAAO,CAAC,IAAI,CA6BzD,CAAC;AAEF,OAAO,EAAE,aAAa,EAAE,CAAC;AACzB,YAAY,EAAE,IAAI,EAAE,CAAC"}
@@ -0,0 +1,31 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.fetchUserData = void 0;
4
+ const fetchUserData = async (userId) => {
5
+ try {
6
+ const response = await fetch(`https://api.example.com/users/${userId}`);
7
+ if (!response.ok) {
8
+ throw new Error(`HTTP error: ${response.status} ${response.statusText}`);
9
+ }
10
+ const rawData = await response.json();
11
+ if (!rawData.id || !rawData.name || !rawData.email || !rawData.username) {
12
+ throw new Error('Invalid user data: missing required fields');
13
+ }
14
+ const user = {
15
+ id: rawData.id,
16
+ name: rawData.name,
17
+ email: rawData.email,
18
+ username: rawData.username,
19
+ createdAt: new Date(rawData.created_at),
20
+ };
21
+ return user;
22
+ }
23
+ catch (error) {
24
+ if (error instanceof Error) {
25
+ throw new Error(`Failed to fetch user data: ${error.message}`);
26
+ }
27
+ throw new Error('Failed to fetch user data: Unknown error');
28
+ }
29
+ };
30
+ exports.fetchUserData = fetchUserData;
31
+ //# sourceMappingURL=fetchUserData.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"fetchUserData.js","sourceRoot":"","sources":["../../src/utils/fetchUserData.ts"],"names":[],"mappings":";;;AAgBA,MAAM,aAAa,GAAG,KAAK,EAAE,MAAc,EAAiB,EAAE;IAC5D,IAAI,CAAC;QACH,MAAM,QAAQ,GAAG,MAAM,KAAK,CAAC,iCAAiC,MAAM,EAAE,CAAC,CAAC;QAExE,IAAI,CAAC,QAAQ,CAAC,EAAE,EAAE,CAAC;YACjB,MAAM,IAAI,KAAK,CAAC,eAAe,QAAQ,CAAC,MAAM,IAAI,QAAQ,CAAC,UAAU,EAAE,CAAC,CAAC;QAC3E,CAAC;QAED,MAAM,OAAO,GAAG,MAAM,QAAQ,CAAC,IAAI,EAAqB,CAAC;QAEzD,IAAI,CAAC,OAAO,CAAC,EAAE,IAAI,CAAC,OAAO,CAAC,IAAI,IAAI,CAAC,OAAO,CAAC,KAAK,IAAI,CAAC,OAAO,CAAC,QAAQ,EAAE,CAAC;YACxE,MAAM,IAAI,KAAK,CAAC,4CAA4C,CAAC,CAAC;QAChE,CAAC;QAED,MAAM,IAAI,GAAS;YACjB,EAAE,EAAE,OAAO,CAAC,EAAE;YACd,IAAI,EAAE,OAAO,CAAC,IAAI;YAClB,KAAK,EAAE,OAAO,CAAC,KAAK;YACpB,QAAQ,EAAE,OAAO,CAAC,QAAQ;YAC1B,SAAS,EAAE,IAAI,IAAI,CAAC,OAAO,CAAC,UAAU,CAAC;SACxC,CAAC;QAEF,OAAO,IAAI,CAAC;IACd,CAAC;IAAC,OAAO,KAAK,EAAE,CAAC;QACf,IAAI,KAAK,YAAY,KAAK,EAAE,CAAC;YAC3B,MAAM,IAAI,KAAK,CAAC,8BAA8B,KAAK,CAAC,OAAO,EAAE,CAAC,CAAC;QACjE,CAAC;QACD,MAAM,IAAI,KAAK,CAAC,0CAA0C,CAAC,CAAC;IAC9D,CAAC;AACH,CAAC,CAAC;AAEO,sCAAa"}
@@ -0,0 +1,46 @@
1
+ export interface UploadConfig {
2
+ readonly maxFileSize: number;
3
+ readonly allowedFileTypes: readonly string[];
4
+ readonly storageType: 'disk' | 'cloud';
5
+ readonly storagePath: string;
6
+ readonly cloudProvider?: CloudStorageProvider;
7
+ readonly generateThumbnails: boolean;
8
+ readonly thumbnailSize?: {
9
+ width: number;
10
+ height: number;
11
+ };
12
+ readonly databaseProvider: DatabaseProvider;
13
+ }
14
+ export interface UploadedFile {
15
+ readonly originalName: string;
16
+ readonly sanitizedName: string;
17
+ readonly mimeType: string;
18
+ readonly size: number;
19
+ readonly path: string;
20
+ readonly hash: string;
21
+ readonly thumbnailPath?: string;
22
+ }
23
+ export interface CloudStorageProvider {
24
+ upload(file: Buffer, filename: string): Promise<string>;
25
+ }
26
+ export interface DatabaseProvider {
27
+ createUploadRecord(file: UploadedFile): Promise<string>;
28
+ }
29
+ export interface ValidationResult {
30
+ readonly valid: boolean;
31
+ readonly error?: string;
32
+ }
33
+ export declare class FileUploadHandler {
34
+ private readonly config;
35
+ constructor(config: UploadConfig);
36
+ handleUpload(fileBuffer: Buffer, originalFilename: string, mimeType: string): Promise<UploadedFile>;
37
+ private validateFile;
38
+ private sanitizeFilename;
39
+ private generateHash;
40
+ private generateUniqueFilename;
41
+ private saveToDisk;
42
+ private isImage;
43
+ private generateThumbnail;
44
+ private resizeImage;
45
+ }
46
+ //# sourceMappingURL=file-upload-handler.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"file-upload-handler.d.ts","sourceRoot":"","sources":["../../src/utils/file-upload-handler.ts"],"names":[],"mappings":"AAIA,MAAM,WAAW,YAAY;IAC3B,QAAQ,CAAC,WAAW,EAAE,MAAM,CAAC;IAC7B,QAAQ,CAAC,gBAAgB,EAAE,SAAS,MAAM,EAAE,CAAC;IAC7C,QAAQ,CAAC,WAAW,EAAE,MAAM,GAAG,OAAO,CAAC;IACvC,QAAQ,CAAC,WAAW,EAAE,MAAM,CAAC;IAC7B,QAAQ,CAAC,aAAa,CAAC,EAAE,oBAAoB,CAAC;IAC9C,QAAQ,CAAC,kBAAkB,EAAE,OAAO,CAAC;IACrC,QAAQ,CAAC,aAAa,CAAC,EAAE;QAAE,KAAK,EAAE,MAAM,CAAC;QAAC,MAAM,EAAE,MAAM,CAAA;KAAE,CAAC;IAC3D,QAAQ,CAAC,gBAAgB,EAAE,gBAAgB,CAAC;CAC7C;AAED,MAAM,WAAW,YAAY;IAC3B,QAAQ,CAAC,YAAY,EAAE,MAAM,CAAC;IAC9B,QAAQ,CAAC,aAAa,EAAE,MAAM,CAAC;IAC/B,QAAQ,CAAC,QAAQ,EAAE,MAAM,CAAC;IAC1B,QAAQ,CAAC,IAAI,EAAE,MAAM,CAAC;IACtB,QAAQ,CAAC,IAAI,EAAE,MAAM,CAAC;IACtB,QAAQ,CAAC,IAAI,EAAE,MAAM,CAAC;IACtB,QAAQ,CAAC,aAAa,CAAC,EAAE,MAAM,CAAC;CACjC;AAED,MAAM,WAAW,oBAAoB;IACnC,MAAM,CAAC,IAAI,EAAE,MAAM,EAAE,QAAQ,EAAE,MAAM,GAAG,OAAO,CAAC,MAAM,CAAC,CAAC;CACzD;AAED,MAAM,WAAW,gBAAgB;IAC/B,kBAAkB,CAAC,IAAI,EAAE,YAAY,GAAG,OAAO,CAAC,MAAM,CAAC,CAAC;CACzD;AAED,MAAM,WAAW,gBAAgB;IAC/B,QAAQ,CAAC,KAAK,EAAE,OAAO,CAAC;IACxB,QAAQ,CAAC,KAAK,CAAC,EAAE,MAAM,CAAC;CACzB;AAED,qBAAa,iBAAiB;IAChB,OAAO,CAAC,QAAQ,CAAC,MAAM;gBAAN,MAAM,EAAE,YAAY;IAE3C,YAAY,CAChB,UAAU,EAAE,MAAM,EAClB,gBAAgB,EAAE,MAAM,EACxB,QAAQ,EAAE,MAAM,GACf,OAAO,CAAC,YAAY,CAAC;IAuCxB,OAAO,CAAC,YAAY;IAkBpB,OAAO,CAAC,gBAAgB;IAcxB,OAAO,CAAC,YAAY;IAIpB,OAAO,CAAC,sBAAsB;YAQhB,UAAU;IASxB,OAAO,CAAC,OAAO;YAID,iBAAiB;YA6BjB,WAAW;CAQ1B"}
@@ -0,0 +1,110 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.FileUploadHandler = void 0;
4
+ const fs_1 = require("fs");
5
+ const path_1 = require("path");
6
+ const crypto_1 = require("crypto");
7
+ class FileUploadHandler {
8
+ constructor(config) {
9
+ this.config = config;
10
+ }
11
+ async handleUpload(fileBuffer, originalFilename, mimeType) {
12
+ const validation = this.validateFile(fileBuffer, mimeType);
13
+ if (!validation.valid) {
14
+ throw new Error(`File validation failed: ${validation.error}`);
15
+ }
16
+ const sanitizedFilename = this.sanitizeFilename(originalFilename);
17
+ const fileHash = this.generateHash(fileBuffer);
18
+ const uniqueFilename = this.generateUniqueFilename(sanitizedFilename, fileHash);
19
+ let filePath;
20
+ if (this.config.storageType === 'disk') {
21
+ filePath = await this.saveToDisk(fileBuffer, uniqueFilename);
22
+ }
23
+ else {
24
+ if (!this.config.cloudProvider) {
25
+ throw new Error('Cloud provider not configured');
26
+ }
27
+ filePath = await this.config.cloudProvider.upload(fileBuffer, uniqueFilename);
28
+ }
29
+ const uploadedFile = {
30
+ originalName: originalFilename,
31
+ sanitizedName: sanitizedFilename,
32
+ mimeType,
33
+ size: fileBuffer.length,
34
+ path: filePath,
35
+ hash: fileHash,
36
+ };
37
+ if (this.config.generateThumbnails && this.isImage(mimeType)) {
38
+ const thumbnailPath = await this.generateThumbnail(fileBuffer, uniqueFilename, mimeType);
39
+ return { ...uploadedFile, thumbnailPath };
40
+ }
41
+ await this.config.databaseProvider.createUploadRecord(uploadedFile);
42
+ return uploadedFile;
43
+ }
44
+ validateFile(fileBuffer, mimeType) {
45
+ if (fileBuffer.length > this.config.maxFileSize) {
46
+ return {
47
+ valid: false,
48
+ error: `File size ${fileBuffer.length} exceeds maximum ${this.config.maxFileSize}`,
49
+ };
50
+ }
51
+ if (!this.config.allowedFileTypes.includes(mimeType)) {
52
+ return {
53
+ valid: false,
54
+ error: `File type ${mimeType} is not allowed`,
55
+ };
56
+ }
57
+ return { valid: true };
58
+ }
59
+ sanitizeFilename(filename) {
60
+ const ext = (0, path_1.extname)(filename);
61
+ const name = (0, path_1.basename)(filename, ext);
62
+ const sanitized = name
63
+ .replace(/[^a-zA-Z0-9.-]/g, '_')
64
+ .replace(/_{2,}/g, '_')
65
+ .replace(/^_+|_+$/g, '')
66
+ .toLowerCase();
67
+ const safeName = sanitized || 'unnamed';
68
+ return `${safeName}${ext.toLowerCase()}`;
69
+ }
70
+ generateHash(buffer) {
71
+ return (0, crypto_1.createHash)('sha256').update(buffer).digest('hex');
72
+ }
73
+ generateUniqueFilename(sanitizedFilename, hash) {
74
+ const timestamp = Date.now();
75
+ const ext = (0, path_1.extname)(sanitizedFilename);
76
+ const name = (0, path_1.basename)(sanitizedFilename, ext);
77
+ const shortHash = hash.substring(0, 8);
78
+ return `${name}_${timestamp}_${shortHash}${ext}`;
79
+ }
80
+ async saveToDisk(buffer, filename) {
81
+ const fullPath = (0, path_1.join)(this.config.storagePath, filename);
82
+ await fs_1.promises.mkdir(this.config.storagePath, { recursive: true });
83
+ await fs_1.promises.writeFile(fullPath, buffer);
84
+ return fullPath;
85
+ }
86
+ isImage(mimeType) {
87
+ return mimeType.startsWith('image/');
88
+ }
89
+ async generateThumbnail(buffer, filename, mimeType) {
90
+ const thumbnailFilename = `thumb_${filename}`;
91
+ const thumbnailPath = (0, path_1.join)(this.config.storagePath, 'thumbnails', thumbnailFilename);
92
+ await fs_1.promises.mkdir((0, path_1.join)(this.config.storagePath, 'thumbnails'), { recursive: true });
93
+ const resizedBuffer = await this.resizeImage(buffer, this.config.thumbnailSize?.width || 200, this.config.thumbnailSize?.height || 200, mimeType);
94
+ if (this.config.storageType === 'disk') {
95
+ await fs_1.promises.writeFile(thumbnailPath, resizedBuffer);
96
+ }
97
+ else {
98
+ if (!this.config.cloudProvider) {
99
+ throw new Error('Cloud provider not configured');
100
+ }
101
+ await this.config.cloudProvider.upload(resizedBuffer, `thumbnails/${thumbnailFilename}`);
102
+ }
103
+ return thumbnailPath;
104
+ }
105
+ async resizeImage(buffer, width, height, mimeType) {
106
+ return buffer;
107
+ }
108
+ }
109
+ exports.FileUploadHandler = FileUploadHandler;
110
+ //# sourceMappingURL=file-upload-handler.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"file-upload-handler.js","sourceRoot":"","sources":["../../src/utils/file-upload-handler.ts"],"names":[],"mappings":"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"}
@@ -23,9 +23,10 @@ export declare const getChangedFiles: (workspaceRoot: string) => string[];
23
23
  * Get files that changed between two git status snapshots
24
24
  * @param before Git status output before operation
25
25
  * @param after Git status output after operation
26
+ * @param workspaceRoot The workspace root to resolve directory contents
26
27
  * @returns Array of file paths that were added or modified
27
28
  */
28
- export declare const getChangedFilesDiff: (before: string, after: string) => string[];
29
+ export declare const getChangedFilesDiff: (before: string, after: string, workspaceRoot?: string) => string[];
29
30
  /**
30
31
  * Get the git root directory
31
32
  * @returns Absolute path to git root
@@ -1 +1 @@
1
- {"version":3,"file":"gitUtils.d.ts","sourceRoot":"","sources":["../../src/utils/gitUtils.ts"],"names":[],"mappings":"AAAA;;GAEG;AAIH;;;;GAIG;AACH,eAAO,MAAM,qBAAqB,GAAI,eAAe,MAAM,KAAG,MAU7D,CAAC;AAEF;;;;GAIG;AACH,eAAO,MAAM,cAAc,GAAI,cAAc,MAAM,KAAG,MAAM,EAqB3D,CAAC;AAEF;;;;GAIG;AACH,eAAO,MAAM,eAAe,GAAI,eAAe,MAAM,KAAG,MAAM,EAG7D,CAAC;AAEF;;;;;GAKG;AACH,eAAO,MAAM,mBAAmB,GAAI,QAAQ,MAAM,EAAE,OAAO,MAAM,KAAG,MAAM,EAqBzE,CAAC;AAEF;;;GAGG;AACH,eAAO,MAAM,UAAU,QAAO,MAS7B,CAAC;AAEF;;;;GAIG;AACH,eAAO,MAAM,eAAe,GAAI,WAAW,MAAM,KAAG,OAWnD,CAAC"}
1
+ {"version":3,"file":"gitUtils.d.ts","sourceRoot":"","sources":["../../src/utils/gitUtils.ts"],"names":[],"mappings":"AAAA;;GAEG;AAMH;;;;GAIG;AACH,eAAO,MAAM,qBAAqB,GAAI,eAAe,MAAM,KAAG,MAU7D,CAAC;AAEF;;;;GAIG;AACH,eAAO,MAAM,cAAc,GAAI,cAAc,MAAM,KAAG,MAAM,EAwB3D,CAAC;AAEF;;;;GAIG;AACH,eAAO,MAAM,eAAe,GAAI,eAAe,MAAM,KAAG,MAAM,EAG7D,CAAC;AAEF;;;;;;GAMG;AACH,eAAO,MAAM,mBAAmB,GAC9B,QAAQ,MAAM,EACd,OAAO,MAAM,EACb,gBAAgB,MAAM,KACrB,MAAM,EAyBR,CAAC;AA+BF;;;GAGG;AACH,eAAO,MAAM,UAAU,QAAO,MAS7B,CAAC;AAEF;;;;GAIG;AACH,eAAO,MAAM,eAAe,GAAI,WAAW,MAAM,KAAG,OAWnD,CAAC"}
@@ -2,9 +2,44 @@
2
2
  /**
3
3
  * Git utilities for tracking file changes
4
4
  */
5
+ var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
6
+ if (k2 === undefined) k2 = k;
7
+ var desc = Object.getOwnPropertyDescriptor(m, k);
8
+ if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) {
9
+ desc = { enumerable: true, get: function() { return m[k]; } };
10
+ }
11
+ Object.defineProperty(o, k2, desc);
12
+ }) : (function(o, m, k, k2) {
13
+ if (k2 === undefined) k2 = k;
14
+ o[k2] = m[k];
15
+ }));
16
+ var __setModuleDefault = (this && this.__setModuleDefault) || (Object.create ? (function(o, v) {
17
+ Object.defineProperty(o, "default", { enumerable: true, value: v });
18
+ }) : function(o, v) {
19
+ o["default"] = v;
20
+ });
21
+ var __importStar = (this && this.__importStar) || (function () {
22
+ var ownKeys = function(o) {
23
+ ownKeys = Object.getOwnPropertyNames || function (o) {
24
+ var ar = [];
25
+ for (var k in o) if (Object.prototype.hasOwnProperty.call(o, k)) ar[ar.length] = k;
26
+ return ar;
27
+ };
28
+ return ownKeys(o);
29
+ };
30
+ return function (mod) {
31
+ if (mod && mod.__esModule) return mod;
32
+ var result = {};
33
+ if (mod != null) for (var k = ownKeys(mod), i = 0; i < k.length; i++) if (k[i] !== "default") __createBinding(result, mod, k[i]);
34
+ __setModuleDefault(result, mod);
35
+ return result;
36
+ };
37
+ })();
5
38
  Object.defineProperty(exports, "__esModule", { value: true });
6
39
  exports.isGitRepository = exports.getGitRoot = exports.getChangedFilesDiff = exports.getChangedFiles = exports.parseGitStatus = exports.getGitStatusPorcelain = void 0;
7
40
  const child_process_1 = require("child_process");
41
+ const fs = __importStar(require("fs"));
42
+ const path = __importStar(require("path"));
8
43
  /**
9
44
  * Get git status in porcelain format
10
45
  * @param workspaceRoot The workspace root directory
@@ -12,10 +47,10 @@ const child_process_1 = require("child_process");
12
47
  */
13
48
  const getGitStatusPorcelain = (workspaceRoot) => {
14
49
  try {
15
- return (0, child_process_1.execSync)('git status --porcelain', {
50
+ return (0, child_process_1.execSync)("git status --porcelain", {
16
51
  cwd: workspaceRoot,
17
- encoding: 'utf-8',
18
- stdio: ['pipe', 'pipe', 'pipe'],
52
+ encoding: "utf-8",
53
+ stdio: ["pipe", "pipe", "pipe"],
19
54
  });
20
55
  }
21
56
  catch (error) {
@@ -29,7 +64,10 @@ exports.getGitStatusPorcelain = getGitStatusPorcelain;
29
64
  * @returns Array of file paths that were changed
30
65
  */
31
66
  const parseGitStatus = (statusOutput) => {
32
- const lines = statusOutput.trim().split('\n').filter(line => line.length > 0);
67
+ const lines = statusOutput
68
+ .trim()
69
+ .split("\n")
70
+ .filter((line) => line.length > 0);
33
71
  const files = [];
34
72
  for (const line of lines) {
35
73
  // Git porcelain format: XY filename
@@ -38,8 +76,8 @@ const parseGitStatus = (statusOutput) => {
38
76
  if (line.length > 3) {
39
77
  const filename = line.substring(3).trim();
40
78
  // Handle renamed files (format: "old -> new")
41
- if (filename.includes(' -> ')) {
42
- const newFilename = filename.split(' -> ')[1];
79
+ if (filename.includes(" -> ")) {
80
+ const newFilename = filename.split(" -> ")[1];
43
81
  files.push(newFilename);
44
82
  }
45
83
  else {
@@ -64,11 +102,12 @@ exports.getChangedFiles = getChangedFiles;
64
102
  * Get files that changed between two git status snapshots
65
103
  * @param before Git status output before operation
66
104
  * @param after Git status output after operation
105
+ * @param workspaceRoot The workspace root to resolve directory contents
67
106
  * @returns Array of file paths that were added or modified
68
107
  */
69
- const getChangedFilesDiff = (before, after) => {
70
- const beforeLines = new Set(before.split('\n').filter(Boolean));
71
- const afterLines = after.split('\n').filter(Boolean);
108
+ const getChangedFilesDiff = (before, after, workspaceRoot) => {
109
+ const beforeLines = new Set(before.split("\n").filter(Boolean));
110
+ const afterLines = after.split("\n").filter(Boolean);
72
111
  const newOrModified = [];
73
112
  for (const line of afterLines) {
74
113
  if (!beforeLines.has(line)) {
@@ -76,8 +115,13 @@ const getChangedFilesDiff = (before, after) => {
76
115
  const match = /^.{3}(.+)$/.exec(line);
77
116
  if (match) {
78
117
  const filePath = match[1];
79
- // Skip directories (end with /)
80
- if (!filePath.endsWith('/')) {
118
+ // If it's a directory, list files inside it
119
+ if (filePath.endsWith("/") && workspaceRoot) {
120
+ const dirPath = path.join(workspaceRoot, filePath);
121
+ const filesInDir = listFilesRecursively(dirPath, workspaceRoot);
122
+ newOrModified.push(...filesInDir);
123
+ }
124
+ else if (!filePath.endsWith("/")) {
81
125
  newOrModified.push(filePath);
82
126
  }
83
127
  }
@@ -86,19 +130,42 @@ const getChangedFilesDiff = (before, after) => {
86
130
  return newOrModified;
87
131
  };
88
132
  exports.getChangedFilesDiff = getChangedFilesDiff;
133
+ /**
134
+ * Recursively list all files in a directory
135
+ * @param dirPath Absolute path to directory
136
+ * @param workspaceRoot Workspace root for relative path calculation
137
+ * @returns Array of relative file paths
138
+ */
139
+ const listFilesRecursively = (dirPath, workspaceRoot) => {
140
+ const files = [];
141
+ if (!fs.existsSync(dirPath)) {
142
+ return files;
143
+ }
144
+ const entries = fs.readdirSync(dirPath, { withFileTypes: true });
145
+ for (const entry of entries) {
146
+ const fullPath = path.join(dirPath, entry.name);
147
+ if (entry.isDirectory()) {
148
+ files.push(...listFilesRecursively(fullPath, workspaceRoot));
149
+ }
150
+ else {
151
+ files.push(path.relative(workspaceRoot, fullPath));
152
+ }
153
+ }
154
+ return files;
155
+ };
89
156
  /**
90
157
  * Get the git root directory
91
158
  * @returns Absolute path to git root
92
159
  */
93
160
  const getGitRoot = () => {
94
161
  try {
95
- return (0, child_process_1.execSync)('git rev-parse --show-toplevel', {
96
- encoding: 'utf-8',
97
- stdio: ['pipe', 'pipe', 'pipe'],
162
+ return (0, child_process_1.execSync)("git rev-parse --show-toplevel", {
163
+ encoding: "utf-8",
164
+ stdio: ["pipe", "pipe", "pipe"],
98
165
  }).trim();
99
166
  }
100
167
  catch (error) {
101
- throw new Error('Not inside a git repository');
168
+ throw new Error("Not inside a git repository");
102
169
  }
103
170
  };
104
171
  exports.getGitRoot = getGitRoot;
@@ -109,10 +176,10 @@ exports.getGitRoot = getGitRoot;
109
176
  */
110
177
  const isGitRepository = (directory) => {
111
178
  try {
112
- (0, child_process_1.execSync)('git rev-parse --git-dir', {
179
+ (0, child_process_1.execSync)("git rev-parse --git-dir", {
113
180
  cwd: directory,
114
- encoding: 'utf-8',
115
- stdio: ['pipe', 'pipe', 'ignore'],
181
+ encoding: "utf-8",
182
+ stdio: ["pipe", "pipe", "ignore"],
116
183
  });
117
184
  return true;
118
185
  }