@copado/agentia-cli 0.112.0-alpha.0 → 0.113.0-alpha.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 (277) hide show
  1. package/README.md +1965 -410
  2. package/dist/commands/testing/build/abort.d.ts +7 -1
  3. package/dist/commands/testing/build/abort.js +13 -3
  4. package/dist/commands/testing/build/abort.js.map +1 -1
  5. package/dist/commands/testing/build/get.d.ts +18 -0
  6. package/dist/commands/testing/build/get.js +38 -0
  7. package/dist/commands/testing/build/get.js.map +1 -0
  8. package/dist/commands/testing/build/latest.d.ts +12 -0
  9. package/dist/commands/testing/build/latest.js +40 -0
  10. package/dist/commands/testing/build/latest.js.map +1 -0
  11. package/dist/commands/testing/build/list.d.ts +6 -1
  12. package/dist/commands/testing/build/list.js +23 -1
  13. package/dist/commands/testing/build/list.js.map +1 -1
  14. package/dist/commands/testing/build/logs.d.ts +6 -0
  15. package/dist/commands/testing/build/logs.js +8 -1
  16. package/dist/commands/testing/build/logs.js.map +1 -1
  17. package/dist/commands/testing/build/run.d.ts +27 -4
  18. package/dist/commands/testing/build/run.js +4 -18
  19. package/dist/commands/testing/build/run.js.map +1 -1
  20. package/dist/commands/testing/build/search.d.ts +21 -0
  21. package/dist/commands/testing/build/search.js +57 -0
  22. package/dist/commands/testing/build/search.js.map +1 -0
  23. package/dist/commands/testing/create.d.ts +1 -15
  24. package/dist/commands/testing/create.js +1 -43
  25. package/dist/commands/testing/create.js.map +1 -1
  26. package/dist/commands/testing/data-table/create.d.ts +30 -0
  27. package/dist/commands/testing/data-table/create.js +52 -0
  28. package/dist/commands/testing/data-table/create.js.map +1 -0
  29. package/dist/commands/testing/data-table/delete.d.ts +25 -0
  30. package/dist/commands/testing/data-table/delete.js +40 -0
  31. package/dist/commands/testing/data-table/delete.js.map +1 -0
  32. package/dist/commands/testing/data-table/export.d.ts +33 -0
  33. package/dist/commands/testing/data-table/export.js +59 -0
  34. package/dist/commands/testing/data-table/export.js.map +1 -0
  35. package/dist/commands/testing/data-table/get.d.ts +21 -0
  36. package/dist/commands/testing/data-table/get.js +35 -0
  37. package/dist/commands/testing/data-table/get.js.map +1 -0
  38. package/dist/commands/testing/data-table/list.d.ts +16 -0
  39. package/dist/commands/testing/data-table/list.js +33 -0
  40. package/dist/commands/testing/data-table/list.js.map +1 -0
  41. package/dist/commands/testing/data-table/update.d.ts +34 -0
  42. package/dist/commands/testing/data-table/update.js +64 -0
  43. package/dist/commands/testing/data-table/update.js.map +1 -0
  44. package/dist/commands/testing/job/create.d.ts +18 -0
  45. package/dist/commands/testing/job/create.js +60 -4
  46. package/dist/commands/testing/job/create.js.map +1 -1
  47. package/dist/commands/testing/job/delete.d.ts +6 -1
  48. package/dist/commands/testing/job/delete.js +13 -3
  49. package/dist/commands/testing/job/delete.js.map +1 -1
  50. package/dist/commands/testing/job/refs.d.ts +17 -0
  51. package/dist/commands/testing/job/refs.js +30 -0
  52. package/dist/commands/testing/job/refs.js.map +1 -0
  53. package/dist/commands/testing/job/schedule/get.d.ts +23 -0
  54. package/dist/commands/testing/job/schedule/get.js +31 -0
  55. package/dist/commands/testing/job/schedule/get.js.map +1 -0
  56. package/dist/commands/testing/job/schedule/remove.d.ts +24 -0
  57. package/dist/commands/testing/job/schedule/remove.js +34 -0
  58. package/dist/commands/testing/job/schedule/remove.js.map +1 -0
  59. package/dist/commands/testing/job/schedule/set.d.ts +23 -0
  60. package/dist/commands/testing/job/schedule/set.js +39 -0
  61. package/dist/commands/testing/job/schedule/set.js.map +1 -0
  62. package/dist/commands/testing/job/update.d.ts +2 -0
  63. package/dist/commands/testing/job/update.js +7 -1
  64. package/dist/commands/testing/job/update.js.map +1 -1
  65. package/dist/commands/testing/job/upload.d.ts +6 -0
  66. package/dist/commands/testing/job/upload.js +22 -0
  67. package/dist/commands/testing/job/upload.js.map +1 -1
  68. package/dist/commands/testing/live/continue.d.ts +20 -0
  69. package/dist/commands/testing/live/continue.js +21 -0
  70. package/dist/commands/testing/live/continue.js.map +1 -0
  71. package/dist/commands/testing/live/execute.d.ts +30 -0
  72. package/dist/commands/testing/live/execute.js +43 -0
  73. package/dist/commands/testing/live/execute.js.map +1 -0
  74. package/dist/commands/testing/live/history.d.ts +23 -0
  75. package/dist/commands/testing/live/history.js +35 -0
  76. package/dist/commands/testing/live/history.js.map +1 -0
  77. package/dist/commands/testing/live/inspect.d.ts +18 -0
  78. package/dist/commands/testing/live/inspect.js +30 -0
  79. package/dist/commands/testing/live/inspect.js.map +1 -0
  80. package/dist/commands/testing/live/interrupt.d.ts +20 -0
  81. package/dist/commands/testing/live/interrupt.js +21 -0
  82. package/dist/commands/testing/live/interrupt.js.map +1 -0
  83. package/dist/commands/testing/live/recorder.d.ts +23 -0
  84. package/dist/commands/testing/live/recorder.js +134 -0
  85. package/dist/commands/testing/live/recorder.js.map +1 -0
  86. package/dist/commands/testing/live/reports.d.ts +20 -0
  87. package/dist/commands/testing/live/reports.js +31 -0
  88. package/dist/commands/testing/live/reports.js.map +1 -0
  89. package/dist/commands/testing/live/screenshot.d.ts +23 -0
  90. package/dist/commands/testing/live/screenshot.js +25 -0
  91. package/dist/commands/testing/live/screenshot.js.map +1 -0
  92. package/dist/commands/testing/live/set-options.d.ts +27 -0
  93. package/dist/commands/testing/live/set-options.js +28 -0
  94. package/dist/commands/testing/live/set-options.js.map +1 -0
  95. package/dist/commands/testing/live/start.d.ts +29 -0
  96. package/dist/commands/testing/live/start.js +53 -0
  97. package/dist/commands/testing/live/start.js.map +1 -0
  98. package/dist/commands/testing/live/status.d.ts +19 -0
  99. package/dist/commands/testing/live/status.js +27 -0
  100. package/dist/commands/testing/live/status.js.map +1 -0
  101. package/dist/commands/testing/live/stop.d.ts +24 -0
  102. package/dist/commands/testing/live/stop.js +38 -0
  103. package/dist/commands/testing/live/stop.js.map +1 -0
  104. package/dist/commands/testing/live/view.d.ts +16 -0
  105. package/dist/commands/testing/live/view.js +36 -0
  106. package/dist/commands/testing/live/view.js.map +1 -0
  107. package/dist/commands/testing/logs.d.ts +6 -0
  108. package/dist/commands/testing/logs.js +8 -1
  109. package/dist/commands/testing/logs.js.map +1 -1
  110. package/dist/commands/testing/project/create.d.ts +3 -0
  111. package/dist/commands/testing/project/create.js +17 -1
  112. package/dist/commands/testing/project/create.js.map +1 -1
  113. package/dist/commands/testing/project/delete.d.ts +7 -2
  114. package/dist/commands/testing/project/delete.js +15 -3
  115. package/dist/commands/testing/project/delete.js.map +1 -1
  116. package/dist/commands/testing/project/get.js +1 -1
  117. package/dist/commands/testing/project/get.js.map +1 -1
  118. package/dist/commands/testing/project/permission/get.d.ts +13 -0
  119. package/dist/commands/testing/project/permission/get.js +21 -0
  120. package/dist/commands/testing/project/permission/get.js.map +1 -0
  121. package/dist/commands/testing/project/permission/list.d.ts +13 -0
  122. package/dist/commands/testing/project/permission/list.js +21 -0
  123. package/dist/commands/testing/project/permission/list.js.map +1 -0
  124. package/dist/commands/testing/project/permission/set.d.ts +19 -0
  125. package/dist/commands/testing/project/permission/set.js +33 -0
  126. package/dist/commands/testing/project/permission/set.js.map +1 -0
  127. package/dist/commands/testing/project/permission/update.d.ts +19 -0
  128. package/dist/commands/testing/project/permission/update.js +33 -0
  129. package/dist/commands/testing/project/permission/update.js.map +1 -0
  130. package/dist/commands/testing/project/update.d.ts +14 -0
  131. package/dist/commands/testing/project/update.js +28 -0
  132. package/dist/commands/testing/project/update.js.map +1 -0
  133. package/dist/commands/testing/robot/create.d.ts +4 -1
  134. package/dist/commands/testing/robot/create.js +20 -5
  135. package/dist/commands/testing/robot/create.js.map +1 -1
  136. package/dist/commands/testing/robot/delete.d.ts +6 -1
  137. package/dist/commands/testing/robot/delete.js +13 -3
  138. package/dist/commands/testing/robot/delete.js.map +1 -1
  139. package/dist/commands/testing/robot/update.d.ts +19 -0
  140. package/dist/commands/testing/robot/update.js +49 -0
  141. package/dist/commands/testing/robot/update.js.map +1 -0
  142. package/dist/commands/testing/run.d.ts +27 -4
  143. package/dist/commands/testing/run.js +4 -11
  144. package/dist/commands/testing/run.js.map +1 -1
  145. package/dist/commands/testing/test/run.d.ts +27 -11
  146. package/dist/commands/testing/test/run.js +5 -37
  147. package/dist/commands/testing/test/run.js.map +1 -1
  148. package/dist/commands/testing/update.d.ts +6 -0
  149. package/dist/commands/testing/update.js +10 -0
  150. package/dist/commands/testing/update.js.map +1 -1
  151. package/dist/commands/testing/user-parameter/create.d.ts +19 -0
  152. package/dist/commands/testing/user-parameter/create.js +45 -0
  153. package/dist/commands/testing/user-parameter/create.js.map +1 -0
  154. package/dist/commands/testing/user-parameter/delete.d.ts +21 -0
  155. package/dist/commands/testing/user-parameter/delete.js +33 -0
  156. package/dist/commands/testing/user-parameter/delete.js.map +1 -0
  157. package/dist/commands/testing/user-parameter/get.d.ts +13 -0
  158. package/dist/commands/testing/user-parameter/get.js +21 -0
  159. package/dist/commands/testing/user-parameter/get.js.map +1 -0
  160. package/dist/commands/testing/user-parameter/list.d.ts +12 -0
  161. package/dist/commands/testing/user-parameter/list.js +23 -0
  162. package/dist/commands/testing/user-parameter/list.js.map +1 -0
  163. package/dist/commands/testing/user-parameter/update.d.ts +23 -0
  164. package/dist/commands/testing/user-parameter/update.js +45 -0
  165. package/dist/commands/testing/user-parameter/update.js.map +1 -0
  166. package/dist/commands/testing/variable/create.d.ts +6 -2
  167. package/dist/commands/testing/variable/create.js +14 -5
  168. package/dist/commands/testing/variable/create.js.map +1 -1
  169. package/dist/commands/testing/variable/delete.d.ts +6 -1
  170. package/dist/commands/testing/variable/delete.js +13 -3
  171. package/dist/commands/testing/variable/delete.js.map +1 -1
  172. package/dist/commands/testing/variable/get.d.ts +13 -0
  173. package/dist/commands/testing/variable/get.js +25 -0
  174. package/dist/commands/testing/variable/get.js.map +1 -0
  175. package/dist/commands/testing/variable/list.d.ts +4 -0
  176. package/dist/commands/testing/variable/list.js +15 -3
  177. package/dist/commands/testing/variable/list.js.map +1 -1
  178. package/dist/commands/testing/variable/update.d.ts +6 -2
  179. package/dist/commands/testing/variable/update.js +11 -5
  180. package/dist/commands/testing/variable/update.js.map +1 -1
  181. package/dist/lib/credential-store.d.ts +3 -0
  182. package/dist/lib/credential-store.js +16 -0
  183. package/dist/lib/credential-store.js.map +1 -1
  184. package/dist/lib/mcp/command-id.js +3 -0
  185. package/dist/lib/mcp/command-id.js.map +1 -1
  186. package/dist/lib/mcp/testing-live-tools.d.ts +126 -0
  187. package/dist/lib/mcp/testing-live-tools.js +215 -0
  188. package/dist/lib/mcp/testing-live-tools.js.map +1 -0
  189. package/dist/lib/mcp/testing-tools.d.ts +455 -9
  190. package/dist/lib/mcp/testing-tools.js +677 -37
  191. package/dist/lib/mcp/testing-tools.js.map +1 -1
  192. package/dist/lib/mcp/tools.d.ts +551 -14
  193. package/dist/lib/testing-config.d.ts +3 -0
  194. package/dist/lib/testing-config.js +9 -0
  195. package/dist/lib/testing-config.js.map +1 -1
  196. package/dist/lib/testing-confirmation.d.ts +14 -0
  197. package/dist/lib/testing-confirmation.js +17 -0
  198. package/dist/lib/testing-confirmation.js.map +1 -0
  199. package/dist/lib/testing-data-command.d.ts +21 -0
  200. package/dist/lib/testing-data-command.js +49 -0
  201. package/dist/lib/testing-data-command.js.map +1 -0
  202. package/dist/lib/testing-data-core.d.ts +22 -0
  203. package/dist/lib/testing-data-core.js +208 -0
  204. package/dist/lib/testing-data-core.js.map +1 -0
  205. package/dist/lib/testing-data-export.d.ts +1 -0
  206. package/dist/lib/testing-data-export.js +2 -0
  207. package/dist/lib/testing-data-export.js.map +1 -0
  208. package/dist/lib/testing-data-import.d.ts +1 -0
  209. package/dist/lib/testing-data-import.js +2 -0
  210. package/dist/lib/testing-data-import.js.map +1 -0
  211. package/dist/lib/testing-data-io.d.ts +21 -0
  212. package/dist/lib/testing-data-io.js +236 -0
  213. package/dist/lib/testing-data-io.js.map +1 -0
  214. package/dist/lib/testing-data-operations.d.ts +36 -0
  215. package/dist/lib/testing-data-operations.js +91 -0
  216. package/dist/lib/testing-data-operations.js.map +1 -0
  217. package/dist/lib/testing-data-types.d.ts +41 -0
  218. package/dist/lib/testing-data-types.js +3 -0
  219. package/dist/lib/testing-data-types.js.map +1 -0
  220. package/dist/lib/testing-flags.d.ts +62 -1
  221. package/dist/lib/testing-flags.js +177 -1
  222. package/dist/lib/testing-flags.js.map +1 -1
  223. package/dist/lib/testing-gateway.d.ts +17 -3
  224. package/dist/lib/testing-gateway.js +175 -45
  225. package/dist/lib/testing-gateway.js.map +1 -1
  226. package/dist/lib/testing-live-command.d.ts +24 -0
  227. package/dist/lib/testing-live-command.js +56 -0
  228. package/dist/lib/testing-live-command.js.map +1 -0
  229. package/dist/lib/testing-live-endpoints.d.ts +14 -0
  230. package/dist/lib/testing-live-endpoints.js +34 -0
  231. package/dist/lib/testing-live-endpoints.js.map +1 -0
  232. package/dist/lib/testing-live-history.d.ts +11 -0
  233. package/dist/lib/testing-live-history.js +96 -0
  234. package/dist/lib/testing-live-history.js.map +1 -0
  235. package/dist/lib/testing-live-operations.d.ts +118 -0
  236. package/dist/lib/testing-live-operations.js +676 -0
  237. package/dist/lib/testing-live-operations.js.map +1 -0
  238. package/dist/lib/testing-live-recorder.d.ts +14 -0
  239. package/dist/lib/testing-live-recorder.js +122 -0
  240. package/dist/lib/testing-live-recorder.js.map +1 -0
  241. package/dist/lib/testing-live-robot.d.ts +16 -0
  242. package/dist/lib/testing-live-robot.js +158 -0
  243. package/dist/lib/testing-live-robot.js.map +1 -0
  244. package/dist/lib/testing-live-state.d.ts +4 -0
  245. package/dist/lib/testing-live-state.js +90 -0
  246. package/dist/lib/testing-live-state.js.map +1 -0
  247. package/dist/lib/testing-live-types.d.ts +92 -0
  248. package/dist/lib/testing-live-types.js +2 -0
  249. package/dist/lib/testing-live-types.js.map +1 -0
  250. package/dist/lib/testing-operations.d.ts +157 -5
  251. package/dist/lib/testing-operations.js +829 -66
  252. package/dist/lib/testing-operations.js.map +1 -1
  253. package/dist/lib/testing-run-command.d.ts +25 -0
  254. package/dist/lib/testing-run-command.js +94 -0
  255. package/dist/lib/testing-run-command.js.map +1 -0
  256. package/dist/lib/testing-sanitization.d.ts +11 -0
  257. package/dist/lib/testing-sanitization.js +135 -0
  258. package/dist/lib/testing-sanitization.js.map +1 -0
  259. package/dist/lib/testing-schedule.d.ts +23 -0
  260. package/dist/lib/testing-schedule.js +48 -0
  261. package/dist/lib/testing-schedule.js.map +1 -0
  262. package/dist/lib/testing-secret-input.d.ts +12 -0
  263. package/dist/lib/testing-secret-input.js +56 -0
  264. package/dist/lib/testing-secret-input.js.map +1 -0
  265. package/dist/lib/testing-session.d.ts +8 -0
  266. package/dist/lib/testing-session.js +82 -0
  267. package/dist/lib/testing-session.js.map +1 -0
  268. package/dist/lib/testing-types.d.ts +143 -13
  269. package/dist/lib/testing-types.js +110 -5
  270. package/dist/lib/testing-types.js.map +1 -1
  271. package/dist/lib/testing-watch.d.ts +4 -0
  272. package/dist/lib/testing-watch.js +45 -0
  273. package/dist/lib/testing-watch.js.map +1 -0
  274. package/oclif.manifest.json +8354 -3760
  275. package/package.json +12 -1
  276. package/templates/skills/agentia-testing/SKILL.md +9 -6
  277. package/templates/skills/agentia-testing/references/tests.md +70 -36
@@ -0,0 +1,236 @@
1
+ import ExcelJS from 'exceljs';
2
+ import { existsSync, statSync } from 'node:fs';
3
+ import { mkdir, readFile, writeFile } from 'node:fs/promises';
4
+ import { dirname, extname, resolve } from 'node:path';
5
+ import { coerceTestingDataMatrix, validateTestingDataMatrix, } from './testing-data-core.js';
6
+ export const TESTING_DATA_MAX_INPUT_BYTES = 10 * 1024 * 1024;
7
+ export const TESTING_DATA_MAX_XLSX_EXPANDED_BYTES = 50 * 1024 * 1024;
8
+ const TESTING_DATA_MAX_XLSX_ENTRIES = 10_000;
9
+ export async function readTestingDataInput(input) {
10
+ const sourceCount = [input.file !== undefined, input.jsonData !== undefined, input.stdin === true].filter(Boolean).length;
11
+ if (sourceCount !== 1)
12
+ throw new Error('Provide exactly one data source: --file, --json-data, or --stdin.');
13
+ if (input.file !== undefined)
14
+ return readTestingDataFile(input.file);
15
+ const text = input.jsonData ?? await readBoundedTestingDataStream(process.stdin);
16
+ return parseTestingDataText(text, input.jsonData !== undefined || text.trimStart().startsWith('[') ? 'json' : undefined);
17
+ }
18
+ export async function readTestingDataFile(path) {
19
+ const target = normalizeTestingDataPath(path, 'input');
20
+ const extension = extname(target).toLowerCase();
21
+ if (extension === '.xls' || extension === '.ods') {
22
+ throw new Error(`The ${extension} format is not supported. Save the file as .xlsx, .csv, or .tsv.`);
23
+ }
24
+ if (!existsSync(target))
25
+ throw new Error(`Data-table input file not found: ${path}`);
26
+ const stat = statSync(target);
27
+ if (!stat.isFile())
28
+ throw new Error(`Data-table input path must be a file: ${path}`);
29
+ if (stat.size > TESTING_DATA_MAX_INPUT_BYTES) {
30
+ throw new Error(`Data-table input exceeds the ${TESTING_DATA_MAX_INPUT_BYTES} byte safety limit.`);
31
+ }
32
+ if (extension === '.xlsx') {
33
+ try {
34
+ const input = await readFile(target);
35
+ validateTestingXlsxArchive(input);
36
+ const workbook = new ExcelJS.Workbook();
37
+ await workbook.xlsx.load(input);
38
+ const sheet = workbook.worksheets[0];
39
+ if (sheet === undefined)
40
+ throw new Error('missing sheet');
41
+ const matrix = [];
42
+ sheet.eachRow({ includeEmpty: true }, (row) => {
43
+ const values = [];
44
+ for (let column = 1; column <= sheet.columnCount; column++)
45
+ values.push(row.getCell(column).text);
46
+ matrix.push(values);
47
+ });
48
+ validateTestingDataMatrix(matrix);
49
+ return matrix;
50
+ }
51
+ catch (error) {
52
+ if (error instanceof Error && error.message.startsWith('Data-table'))
53
+ throw error;
54
+ throw new Error(`${path} is not a valid XLSX file.`);
55
+ }
56
+ }
57
+ if (extension === '.json')
58
+ return parseTestingDataText(await readFile(target, 'utf8'), 'json');
59
+ if (extension === '.tsv')
60
+ return parseTestingDataText(await readFile(target, 'utf8'), 'tsv');
61
+ if (extension === '.csv' || extension === '.txt')
62
+ return parseTestingDataText(await readFile(target, 'utf8'), 'csv');
63
+ throw new Error('Unsupported data-table input format. Use CSV, TSV, JSON, or XLSX; XLS and ODS are not supported.');
64
+ }
65
+ function validateTestingXlsxArchive(input) {
66
+ const minimumEocdOffset = Math.max(0, input.length - 65_557);
67
+ let eocdOffset = -1;
68
+ for (let offset = input.length - 22; offset >= minimumEocdOffset; offset--) {
69
+ if (input.readUInt32LE(offset) === 0x06_05_4B_50) {
70
+ eocdOffset = offset;
71
+ break;
72
+ }
73
+ }
74
+ if (eocdOffset < 0)
75
+ throw new Error('invalid XLSX archive directory');
76
+ const entryCount = input.readUInt16LE(eocdOffset + 10);
77
+ const directorySize = input.readUInt32LE(eocdOffset + 12);
78
+ const directoryOffset = input.readUInt32LE(eocdOffset + 16);
79
+ if (entryCount > TESTING_DATA_MAX_XLSX_ENTRIES ||
80
+ directoryOffset + directorySize > input.length) {
81
+ throw new Error(`Data-table XLSX exceeds the ${TESTING_DATA_MAX_XLSX_ENTRIES} entry safety limit.`);
82
+ }
83
+ let expandedBytes = 0;
84
+ let offset = directoryOffset;
85
+ for (let entry = 0; entry < entryCount; entry++) {
86
+ if (offset + 46 > input.length || input.readUInt32LE(offset) !== 0x02_01_4B_50) {
87
+ throw new Error('invalid XLSX archive directory');
88
+ }
89
+ const expandedEntryBytes = input.readUInt32LE(offset + 24);
90
+ if (expandedEntryBytes === 0xFF_FF_FF_FF)
91
+ throw new Error('ZIP64 XLSX inputs are not supported.');
92
+ expandedBytes += expandedEntryBytes;
93
+ if (expandedBytes > TESTING_DATA_MAX_XLSX_EXPANDED_BYTES) {
94
+ throw new Error(`Data-table XLSX exceeds the ${TESTING_DATA_MAX_XLSX_EXPANDED_BYTES} expanded byte safety limit.`);
95
+ }
96
+ offset +=
97
+ 46 +
98
+ input.readUInt16LE(offset + 28) +
99
+ input.readUInt16LE(offset + 30) +
100
+ input.readUInt16LE(offset + 32);
101
+ }
102
+ }
103
+ export function parseTestingDataText(text, format) {
104
+ if (Buffer.byteLength(text) > TESTING_DATA_MAX_INPUT_BYTES) {
105
+ throw new Error(`Data-table input exceeds the ${TESTING_DATA_MAX_INPUT_BYTES} byte safety limit.`);
106
+ }
107
+ if (format === 'json') {
108
+ try {
109
+ return coerceTestingDataMatrix(JSON.parse(text));
110
+ }
111
+ catch (error) {
112
+ if (error instanceof Error && error.message.startsWith('Data-table input'))
113
+ throw error;
114
+ throw new Error('Data-table JSON must be a valid array of row arrays.');
115
+ }
116
+ }
117
+ const delimiter = format === 'tsv' ? '\t' : format === 'csv' ? ',' : detectTestingDataDelimiter(text);
118
+ return parseDelimitedTestingData(text, delimiter);
119
+ }
120
+ export function parseDelimitedTestingData(text, delimiter) {
121
+ const rows = [];
122
+ let row = [];
123
+ let cell = '';
124
+ let quoted = false;
125
+ for (let index = 0; index < text.length; index++) {
126
+ const character = text[index];
127
+ if (quoted) {
128
+ if (character === '"' && text[index + 1] === '"') {
129
+ cell += '"';
130
+ index++;
131
+ }
132
+ else if (character === '"') {
133
+ quoted = false;
134
+ }
135
+ else {
136
+ cell += character;
137
+ }
138
+ }
139
+ else if (character === '"' && cell.length === 0) {
140
+ quoted = true;
141
+ }
142
+ else if (character === delimiter) {
143
+ row.push(cell);
144
+ cell = '';
145
+ }
146
+ else if (character === '\n' || character === '\r') {
147
+ if (character === '\r' && text[index + 1] === '\n')
148
+ index++;
149
+ row.push(cell);
150
+ rows.push(row);
151
+ row = [];
152
+ cell = '';
153
+ }
154
+ else {
155
+ cell += character;
156
+ }
157
+ }
158
+ if (quoted)
159
+ throw new Error('Data-table delimited input contains an unterminated quoted cell.');
160
+ if (cell.length > 0 || row.length > 0) {
161
+ row.push(cell);
162
+ rows.push(row);
163
+ }
164
+ return rows;
165
+ }
166
+ async function readBoundedTestingDataStream(stream) {
167
+ const chunks = [];
168
+ let size = 0;
169
+ for await (const chunk of stream) {
170
+ const bytes = Buffer.isBuffer(chunk) ? chunk : Buffer.from(chunk);
171
+ size += bytes.length;
172
+ if (size > TESTING_DATA_MAX_INPUT_BYTES) {
173
+ throw new Error(`Data-table input exceeds the ${TESTING_DATA_MAX_INPUT_BYTES} byte safety limit.`);
174
+ }
175
+ chunks.push(bytes);
176
+ }
177
+ return Buffer.concat(chunks).toString('utf8');
178
+ }
179
+ export function serializeDelimitedTestingData(matrix, delimiter) {
180
+ return `${matrix
181
+ .map((row) => row
182
+ .map((cell) => {
183
+ const escaped = cell.replaceAll('"', '""');
184
+ return cell.includes(delimiter) || /["\r\n]/u.test(cell) ? `"${escaped}"` : escaped;
185
+ })
186
+ .join(delimiter))
187
+ .join('\n')}\n`;
188
+ }
189
+ export async function writeTestingDataFile(path, matrix, explicitFormat) {
190
+ const output = normalizeTestingDataPath(path, 'output');
191
+ const format = resolveTestingDataExportFormat(output, explicitFormat);
192
+ await mkdir(dirname(output), { recursive: true });
193
+ if (format === 'xlsx') {
194
+ const workbook = new ExcelJS.Workbook();
195
+ const sheet = workbook.addWorksheet('Data');
196
+ for (const row of matrix)
197
+ sheet.addRow(row);
198
+ await workbook.xlsx.writeFile(output);
199
+ }
200
+ else {
201
+ await writeFile(output, serializeDelimitedTestingData(matrix, format === 'tsv' ? '\t' : ','), 'utf8');
202
+ }
203
+ return { format, output, rows: matrix.length };
204
+ }
205
+ export function resolveTestingDataExportFormat(path, explicitFormat) {
206
+ if (explicitFormat !== undefined)
207
+ return explicitFormat;
208
+ const extension = extname(path).toLowerCase();
209
+ if (extension === '.csv' || extension === '.txt')
210
+ return 'csv';
211
+ if (extension === '.tsv')
212
+ return 'tsv';
213
+ if (extension === '.xlsx')
214
+ return 'xlsx';
215
+ if (extension === '.xls' || extension === '.ods') {
216
+ throw new Error(`The ${extension} format cannot be exported. Use .xlsx, .csv, or .tsv.`);
217
+ }
218
+ throw new Error('Cannot determine export format. Use --format csv|tsv|xlsx or a matching file extension.');
219
+ }
220
+ export function normalizeTestingDataPath(path, label) {
221
+ if (path.trim().length === 0 || path.includes('\0'))
222
+ throw new Error(`Data-table ${label} path must not be empty.`);
223
+ const target = resolve(path);
224
+ if (label === 'output' && existsSync(target) && statSync(target).isDirectory()) {
225
+ throw new Error(`Data-table output path must be a file: ${path}`);
226
+ }
227
+ return target;
228
+ }
229
+ function detectTestingDataDelimiter(text) {
230
+ const sample = text.slice(0, 4096);
231
+ return [...sample].filter((character) => character === '\t').length >
232
+ [...sample].filter((character) => character === ',').length
233
+ ? '\t'
234
+ : ',';
235
+ }
236
+ //# sourceMappingURL=testing-data-io.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"testing-data-io.js","sourceRoot":"","sources":["../../src/lib/testing-data-io.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,36 @@
1
+ import { type TestingDataTable, type TestingDataTableCreate, type TestingDataTableFilters, type TestingDataTableUpdate } from './testing-data-types.js';
2
+ import { type TestingGatewayCallOptions } from './testing-gateway.js';
3
+ import { type TestingSession } from './testing-session.js';
4
+ type DataConnectionOptions = TestingGatewayCallOptions & {
5
+ session?: TestingSession;
6
+ };
7
+ type ProjectOptions = DataConnectionOptions & {
8
+ projectId: number;
9
+ };
10
+ type ItemOptions = ProjectOptions & {
11
+ jobId?: number;
12
+ tableId: number;
13
+ };
14
+ export declare function listTestingDataTables(options: ProjectOptions & TestingDataTableFilters): Promise<TestingDataTable[]>;
15
+ export declare function getTestingDataTable(options: ItemOptions & {
16
+ version?: number | string;
17
+ }): Promise<TestingDataTable>;
18
+ export declare function createTestingDataTable(options: ProjectOptions & {
19
+ body: TestingDataTableCreate;
20
+ jobId?: number;
21
+ }): Promise<{
22
+ id?: number | string;
23
+ version?: string;
24
+ }>;
25
+ export declare function updateTestingDataTable(options: ItemOptions & {
26
+ body: TestingDataTableUpdate;
27
+ }): Promise<TestingDataTable>;
28
+ export declare function deleteTestingDataTable(options: ItemOptions): Promise<{
29
+ deleted: true;
30
+ projectId: number;
31
+ tableId: number;
32
+ }>;
33
+ export declare function createTestingDataSession(options?: TestingGatewayCallOptions): Promise<TestingSession>;
34
+ export declare function testingDataTablesEndpoint(projectId: number, filters?: TestingDataTableFilters): string;
35
+ export declare function testingDataTableEndpoint(projectId: number, tableId: number, filters?: Pick<TestingDataTableFilters, 'jobId' | 'version'>): string;
36
+ export {};
@@ -0,0 +1,91 @@
1
+ import { normalizeTestingDataTable, normalizeTestingDataTables, } from './testing-data-core.js';
2
+ import { TestingGateway, } from './testing-gateway.js';
3
+ import { sanitizeTestingOutput } from './testing-sanitization.js';
4
+ import { exchangeTestingSession, testingSessionAuth, } from './testing-session.js';
5
+ export async function listTestingDataTables(options) {
6
+ const response = await callTestingData({
7
+ endpoint: testingDataTablesEndpoint(options.projectId, {
8
+ fields: options.fields,
9
+ jobId: options.jobId,
10
+ name: options.name,
11
+ version: options.version,
12
+ }),
13
+ method: 'GET',
14
+ }, options);
15
+ return normalizeTestingDataTables(response).map((table) => sanitizeTestingDataTable(table));
16
+ }
17
+ export async function getTestingDataTable(options) {
18
+ const response = await callTestingData({
19
+ endpoint: testingDataTableEndpoint(options.projectId, options.tableId, {
20
+ jobId: options.jobId,
21
+ version: options.version,
22
+ }),
23
+ method: 'GET',
24
+ }, options);
25
+ return sanitizeTestingDataTable(normalizeTestingDataTable(response));
26
+ }
27
+ export async function createTestingDataTable(options) {
28
+ const response = await callTestingData({
29
+ body: options.body,
30
+ endpoint: testingDataTablesEndpoint(options.projectId, { jobId: options.jobId }),
31
+ method: 'POST',
32
+ }, options);
33
+ const table = sanitizeTestingDataTable(normalizeTestingDataTable(response));
34
+ return { id: table.id, version: table.version };
35
+ }
36
+ export async function updateTestingDataTable(options) {
37
+ const response = await callTestingData({
38
+ body: options.body,
39
+ endpoint: testingDataTableEndpoint(options.projectId, options.tableId, { jobId: options.jobId }),
40
+ method: 'PATCH',
41
+ }, options);
42
+ return sanitizeTestingDataTable(normalizeTestingDataTable(response));
43
+ }
44
+ export async function deleteTestingDataTable(options) {
45
+ await callTestingData({
46
+ endpoint: testingDataTableEndpoint(options.projectId, options.tableId, { jobId: options.jobId }),
47
+ method: 'DELETE',
48
+ }, options);
49
+ return { deleted: true, projectId: options.projectId, tableId: options.tableId };
50
+ }
51
+ export async function createTestingDataSession(options = {}) {
52
+ return exchangeTestingSession(options);
53
+ }
54
+ export function testingDataTablesEndpoint(projectId, filters = {}) {
55
+ return appendTestingDataQuery('/job-test-data', projectId, filters);
56
+ }
57
+ export function testingDataTableEndpoint(projectId, tableId, filters = {}) {
58
+ if (!Number.isSafeInteger(tableId) || tableId <= 0)
59
+ throw new Error('Data-table ID must be a positive integer.');
60
+ return appendTestingDataQuery(`/job-test-data/${tableId}`, projectId, filters);
61
+ }
62
+ async function callTestingData(request, options) {
63
+ const session = options.session ?? (await exchangeTestingSession(options));
64
+ return TestingGateway.call({
65
+ ...request,
66
+ auth: testingSessionAuth(session),
67
+ service: 'test-data',
68
+ }, options);
69
+ }
70
+ function appendTestingDataQuery(endpoint, projectId, filters) {
71
+ if (!Number.isSafeInteger(projectId) || projectId <= 0)
72
+ throw new Error('CRT project ID must be a positive integer.');
73
+ const query = new URLSearchParams({ projectId: projectId.toString() });
74
+ if (filters.jobId !== undefined)
75
+ query.set('jobId', filters.jobId.toString());
76
+ if (filters.name !== undefined)
77
+ query.set('name', filters.name);
78
+ if (filters.version !== undefined)
79
+ query.set('version', filters.version.toString());
80
+ if (filters.fields !== undefined)
81
+ query.set('fields', filters.fields);
82
+ return `${endpoint}?${query.toString()}`;
83
+ }
84
+ function sanitizeTestingDataTable(table) {
85
+ const { data, ...metadata } = table;
86
+ return {
87
+ ...sanitizeTestingOutput(metadata),
88
+ ...(data === undefined ? {} : { data }),
89
+ };
90
+ }
91
+ //# sourceMappingURL=testing-data-operations.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"testing-data-operations.js","sourceRoot":"","sources":["../../src/lib/testing-data-operations.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,41 @@
1
+ import type { TestingRecord } from './testing-types.js';
2
+ export declare const TESTING_DATA_HEADER_ORIENTATIONS: readonly ["row", "column"];
3
+ export declare const TESTING_DATA_EXPORT_FORMATS: readonly ["csv", "tsv", "xlsx"];
4
+ export type TestingDataHeaderOrientation = (typeof TESTING_DATA_HEADER_ORIENTATIONS)[number];
5
+ export type TestingDataExportFormat = (typeof TESTING_DATA_EXPORT_FORMATS)[number];
6
+ export type TestingDataMatrix = string[][];
7
+ export type TestingDataTable = TestingRecord & {
8
+ aiGenerated?: boolean;
9
+ colCount?: number;
10
+ data?: TestingDataMatrix;
11
+ defaultRow?: number;
12
+ id?: number | string;
13
+ jobId?: number | string;
14
+ name?: string;
15
+ rowCount?: number;
16
+ topics?: string[];
17
+ version?: string;
18
+ };
19
+ export type TestingDataTableCreate = {
20
+ aiGenerated?: boolean;
21
+ data: TestingDataMatrix;
22
+ defaultRow?: number;
23
+ name: string;
24
+ topics?: string[];
25
+ };
26
+ export type TestingDataTableUpdate = {
27
+ aiGenerated?: boolean;
28
+ data?: TestingDataMatrix;
29
+ defaultRow?: number;
30
+ topics?: string[];
31
+ };
32
+ export type TestingDataTableFilters = {
33
+ fields?: string;
34
+ jobId?: number;
35
+ name?: string;
36
+ version?: number | string;
37
+ };
38
+ export type TestingDataTableRunSelection = {
39
+ datasets: number[];
40
+ tableId: number;
41
+ };
@@ -0,0 +1,3 @@
1
+ export const TESTING_DATA_HEADER_ORIENTATIONS = ['row', 'column'];
2
+ export const TESTING_DATA_EXPORT_FORMATS = ['csv', 'tsv', 'xlsx'];
3
+ //# sourceMappingURL=testing-data-types.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"testing-data-types.js","sourceRoot":"","sources":["../../src/lib/testing-data-types.ts"],"names":[],"mappings":"AAEA,MAAM,CAAC,MAAM,gCAAgC,GAAG,CAAC,KAAK,EAAE,QAAQ,CAAU,CAAA;AAC1E,MAAM,CAAC,MAAM,2BAA2B,GAAG,CAAC,KAAK,EAAE,KAAK,EAAE,MAAM,CAAU,CAAA"}
@@ -1,8 +1,18 @@
1
1
  import { type TestingRunOptions } from './testing-operations.js';
2
- import { type TestingRecordBuildOption } from './testing-types.js';
2
+ import { type TestingConsoleColors, type TestingRecordBuildOption, type TestingRunType } from './testing-types.js';
3
3
  export declare const testingProjectFlag: {
4
4
  project: import("@oclif/core/interfaces").OptionFlag<number, import("@oclif/core/interfaces").CustomOptions>;
5
5
  };
6
+ export declare const testingYesFlag: {
7
+ yes: import("@oclif/core/interfaces").BooleanFlag<boolean>;
8
+ };
9
+ export declare const testingSecretInputFlags: {
10
+ 'no-trim': import("@oclif/core/interfaces").BooleanFlag<boolean>;
11
+ trim: import("@oclif/core/interfaces").BooleanFlag<boolean>;
12
+ value: import("@oclif/core/interfaces").OptionFlag<string | undefined, import("@oclif/core/interfaces").CustomOptions>;
13
+ 'value-file': import("@oclif/core/interfaces").OptionFlag<string | undefined, import("@oclif/core/interfaces").CustomOptions>;
14
+ 'value-stdin': import("@oclif/core/interfaces").BooleanFlag<boolean>;
15
+ };
6
16
  export declare const testingJobFlag: {
7
17
  job: import("@oclif/core/interfaces").OptionFlag<number, import("@oclif/core/interfaces").CustomOptions>;
8
18
  };
@@ -11,17 +21,49 @@ export declare const testingBranchFlag: {
11
21
  };
12
22
  export declare const testingRunOptionFlags: {
13
23
  branch: import("@oclif/core/interfaces").OptionFlag<string | undefined, import("@oclif/core/interfaces").CustomOptions>;
24
+ 'console-colors': import("@oclif/core/interfaces").OptionFlag<"auto" | "off" | "on" | "ansi" | undefined, import("@oclif/core/interfaces").CustomOptions>;
25
+ 'console-width': import("@oclif/core/interfaces").OptionFlag<number | undefined, import("@oclif/core/interfaces").CustomOptions>;
26
+ datatable: import("@oclif/core/interfaces").OptionFlag<string[] | undefined, import("@oclif/core/interfaces").CustomOptions>;
27
+ doc: import("@oclif/core/interfaces").OptionFlag<string | undefined, import("@oclif/core/interfaces").CustomOptions>;
28
+ 'dry-run': import("@oclif/core/interfaces").BooleanFlag<boolean>;
14
29
  exclude: import("@oclif/core/interfaces").OptionFlag<string[] | undefined, import("@oclif/core/interfaces").CustomOptions>;
30
+ 'exit-on-error': import("@oclif/core/interfaces").BooleanFlag<boolean>;
31
+ 'exit-on-failure': import("@oclif/core/interfaces").BooleanFlag<boolean>;
15
32
  include: import("@oclif/core/interfaces").OptionFlag<string[] | undefined, import("@oclif/core/interfaces").CustomOptions>;
33
+ metadata: import("@oclif/core/interfaces").OptionFlag<string[] | undefined, import("@oclif/core/interfaces").CustomOptions>;
34
+ name: import("@oclif/core/interfaces").OptionFlag<string | undefined, import("@oclif/core/interfaces").CustomOptions>;
35
+ 'no-exit-code': import("@oclif/core/interfaces").BooleanFlag<boolean>;
16
36
  param: import("@oclif/core/interfaces").OptionFlag<string[] | undefined, import("@oclif/core/interfaces").CustomOptions>;
17
37
  record: import("@oclif/core/interfaces").OptionFlag<"none" | "all" | "failed" | undefined, import("@oclif/core/interfaces").CustomOptions>;
18
38
  'rerun-failed': import("@oclif/core/interfaces").OptionFlag<number | undefined, import("@oclif/core/interfaces").CustomOptions>;
19
39
  'rerun-failed-from-latest': import("@oclif/core/interfaces").BooleanFlag<boolean>;
40
+ 'run-empty-suite': import("@oclif/core/interfaces").BooleanFlag<boolean>;
41
+ 'run-type': import("@oclif/core/interfaces").OptionFlag<"regression" | "development" | undefined, import("@oclif/core/interfaces").CustomOptions>;
42
+ 'save-artifacts': import("@oclif/core/interfaces").OptionFlag<string | undefined, import("@oclif/core/interfaces").CustomOptions>;
43
+ 'set-tag': import("@oclif/core/interfaces").OptionFlag<string[] | undefined, import("@oclif/core/interfaces").CustomOptions>;
44
+ skip: import("@oclif/core/interfaces").OptionFlag<string[] | undefined, import("@oclif/core/interfaces").CustomOptions>;
45
+ 'skip-on-failure': import("@oclif/core/interfaces").OptionFlag<string[] | undefined, import("@oclif/core/interfaces").CustomOptions>;
46
+ 'stream-logs': import("@oclif/core/interfaces").BooleanFlag<boolean>;
47
+ suite: import("@oclif/core/interfaces").OptionFlag<string[] | undefined, import("@oclif/core/interfaces").CustomOptions>;
20
48
  tag: import("@oclif/core/interfaces").OptionFlag<string | undefined, import("@oclif/core/interfaces").CustomOptions>;
49
+ test: import("@oclif/core/interfaces").OptionFlag<string[] | undefined, import("@oclif/core/interfaces").CustomOptions>;
50
+ timeout: import("@oclif/core/interfaces").OptionFlag<number, import("@oclif/core/interfaces").CustomOptions>;
51
+ variable: import("@oclif/core/interfaces").OptionFlag<string[] | undefined, import("@oclif/core/interfaces").CustomOptions>;
52
+ 'wait-for-result': import("@oclif/core/interfaces").BooleanFlag<boolean>;
53
+ watch: import("@oclif/core/interfaces").OptionFlag<string | undefined, import("@oclif/core/interfaces").CustomOptions>;
54
+ xunit: import("@oclif/core/interfaces").OptionFlag<string | undefined, import("@oclif/core/interfaces").CustomOptions>;
21
55
  };
22
56
  export declare const testingOutputFlags: {
23
57
  output: import("@oclif/core/interfaces").OptionFlag<string | undefined, import("@oclif/core/interfaces").CustomOptions>;
24
58
  };
59
+ export declare const testingLogOptionFlags: {
60
+ container: import("@oclif/core/interfaces").OptionFlag<string | undefined, import("@oclif/core/interfaces").CustomOptions>;
61
+ 'limit-bytes': import("@oclif/core/interfaces").OptionFlag<number | undefined, import("@oclif/core/interfaces").CustomOptions>;
62
+ pretty: import("@oclif/core/interfaces").BooleanFlag<boolean>;
63
+ 'since-seconds': import("@oclif/core/interfaces").OptionFlag<number | undefined, import("@oclif/core/interfaces").CustomOptions>;
64
+ 'tail-lines': import("@oclif/core/interfaces").OptionFlag<number | undefined, import("@oclif/core/interfaces").CustomOptions>;
65
+ timestamps: import("@oclif/core/interfaces").BooleanFlag<boolean>;
66
+ };
25
67
  export declare const testingFileInputFlags: {
26
68
  dir: import("@oclif/core/interfaces").OptionFlag<string[] | undefined, import("@oclif/core/interfaces").CustomOptions>;
27
69
  file: import("@oclif/core/interfaces").OptionFlag<string[] | undefined, import("@oclif/core/interfaces").CustomOptions>;
@@ -30,6 +72,8 @@ export declare const testingGitStorageFlags: {
30
72
  'git-branch': import("@oclif/core/interfaces").OptionFlag<string | undefined, import("@oclif/core/interfaces").CustomOptions>;
31
73
  'git-domain-credential': import("@oclif/core/interfaces").OptionFlag<string | undefined, import("@oclif/core/interfaces").CustomOptions>;
32
74
  'git-password': import("@oclif/core/interfaces").OptionFlag<string | undefined, import("@oclif/core/interfaces").CustomOptions>;
75
+ 'git-password-file': import("@oclif/core/interfaces").OptionFlag<string | undefined, import("@oclif/core/interfaces").CustomOptions>;
76
+ 'git-password-stdin': import("@oclif/core/interfaces").BooleanFlag<boolean>;
33
77
  'git-tag': import("@oclif/core/interfaces").OptionFlag<string | undefined, import("@oclif/core/interfaces").CustomOptions>;
34
78
  'git-url': import("@oclif/core/interfaces").OptionFlag<string | undefined, import("@oclif/core/interfaces").CustomOptions>;
35
79
  'git-use-caller-credentials': import("@oclif/core/interfaces").BooleanFlag<boolean>;
@@ -42,13 +86,30 @@ export declare const testingUploadOperationFlags: {
42
86
  };
43
87
  export type TestingRunFlagValues = {
44
88
  branch?: string;
89
+ 'console-colors'?: TestingConsoleColors;
90
+ 'console-width'?: number;
91
+ datatable?: string[];
92
+ doc?: string;
93
+ 'dry-run'?: boolean;
45
94
  exclude?: string[];
95
+ 'exit-on-error'?: boolean;
96
+ 'exit-on-failure'?: boolean;
46
97
  include?: string[];
98
+ metadata?: string[];
99
+ name?: string;
47
100
  param?: string[];
48
101
  record?: TestingRecordBuildOption;
49
102
  'rerun-failed'?: number;
50
103
  'rerun-failed-from-latest'?: boolean;
104
+ 'run-empty-suite'?: boolean;
105
+ 'run-type'?: TestingRunType;
106
+ 'set-tag'?: string[];
107
+ skip?: string[];
108
+ 'skip-on-failure'?: string[];
109
+ suite?: string[];
51
110
  tag?: string;
111
+ test?: string[];
112
+ variable?: string[];
52
113
  };
53
114
  export declare function testingRunOptions(flags: TestingRunFlagValues, ids: {
54
115
  jobId: number;