ado-sync 0.1.60 → 0.1.62
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.
- package/dist/__tests__/regressions.test.js +122 -0
- package/dist/__tests__/regressions.test.js.map +1 -1
- package/dist/ai/summarizer.d.ts +17 -0
- package/dist/ai/summarizer.js +117 -0
- package/dist/ai/summarizer.js.map +1 -1
- package/dist/azure/test-cases.d.ts +1 -1
- package/dist/azure/test-cases.js +2 -1
- package/dist/azure/test-cases.js.map +1 -1
- package/dist/azure/work-items.js +7 -32
- package/dist/azure/work-items.js.map +1 -1
- package/dist/cli.js +12 -2
- package/dist/cli.js.map +1 -1
- package/dist/html.d.ts +25 -0
- package/dist/html.js +71 -0
- package/dist/html.js.map +1 -0
- package/dist/id-markers.d.ts +7 -0
- package/dist/id-markers.js +44 -0
- package/dist/id-markers.js.map +1 -0
- package/dist/mcp-server.js +18 -2
- package/dist/mcp-server.js.map +1 -1
- package/dist/parsers/csharp.d.ts +1 -1
- package/dist/parsers/csharp.js +4 -2
- package/dist/parsers/csharp.js.map +1 -1
- package/dist/parsers/csv.d.ts +1 -1
- package/dist/parsers/csv.js.map +1 -1
- package/dist/parsers/dart.d.ts +1 -1
- package/dist/parsers/dart.js +4 -2
- package/dist/parsers/dart.js.map +1 -1
- package/dist/parsers/excel.d.ts +1 -1
- package/dist/parsers/excel.js.map +1 -1
- package/dist/parsers/gherkin.d.ts +2 -2
- package/dist/parsers/gherkin.js +12 -10
- package/dist/parsers/gherkin.js.map +1 -1
- package/dist/parsers/go.d.ts +1 -1
- package/dist/parsers/go.js +4 -2
- package/dist/parsers/go.js.map +1 -1
- package/dist/parsers/java.d.ts +1 -1
- package/dist/parsers/java.js +6 -3
- package/dist/parsers/java.js.map +1 -1
- package/dist/parsers/javascript.d.ts +1 -1
- package/dist/parsers/javascript.js +9 -5
- package/dist/parsers/javascript.js.map +1 -1
- package/dist/parsers/kotlin.d.ts +1 -1
- package/dist/parsers/kotlin.js +8 -5
- package/dist/parsers/kotlin.js.map +1 -1
- package/dist/parsers/markdown.d.ts +1 -1
- package/dist/parsers/markdown.js +4 -3
- package/dist/parsers/markdown.js.map +1 -1
- package/dist/parsers/php.d.ts +1 -1
- package/dist/parsers/php.js +2 -1
- package/dist/parsers/php.js.map +1 -1
- package/dist/parsers/python.d.ts +1 -1
- package/dist/parsers/python.js +5 -3
- package/dist/parsers/python.js.map +1 -1
- package/dist/parsers/robot.d.ts +1 -1
- package/dist/parsers/robot.js +5 -2
- package/dist/parsers/robot.js.map +1 -1
- package/dist/parsers/ruby.d.ts +1 -1
- package/dist/parsers/ruby.js +4 -2
- package/dist/parsers/ruby.js.map +1 -1
- package/dist/parsers/rust.d.ts +1 -1
- package/dist/parsers/rust.js +4 -2
- package/dist/parsers/rust.js.map +1 -1
- package/dist/parsers/swift.d.ts +1 -1
- package/dist/parsers/swift.js +4 -2
- package/dist/parsers/swift.js.map +1 -1
- package/dist/parsers/tabular.d.ts +1 -1
- package/dist/parsers/tabular.js.map +1 -1
- package/dist/parsers/testcafe.d.ts +1 -1
- package/dist/parsers/testcafe.js +9 -5
- package/dist/parsers/testcafe.js.map +1 -1
- package/dist/sync/engine.js +65 -60
- package/dist/sync/engine.js.map +1 -1
- package/package.json +1 -1
package/dist/parsers/ruby.js
CHANGED
|
@@ -54,6 +54,7 @@ Object.defineProperty(exports, "__esModule", { value: true });
|
|
|
54
54
|
exports.parseRubyFile = parseRubyFile;
|
|
55
55
|
const fs = __importStar(require("fs"));
|
|
56
56
|
const path = __importStar(require("path"));
|
|
57
|
+
const id_markers_1 = require("../id-markers");
|
|
57
58
|
const shared_1 = require("./shared");
|
|
58
59
|
// ─── Test detection ───────────────────────────────────────────────────────────
|
|
59
60
|
// Matches: it 'title' or it "title" (with optional whitespace)
|
|
@@ -84,7 +85,8 @@ function extractCommentBlockAbove(lines, itLineIdx, tagPrefix) {
|
|
|
84
85
|
const docLines = [];
|
|
85
86
|
let azureId;
|
|
86
87
|
const tags = [];
|
|
87
|
-
const
|
|
88
|
+
const markerTagPrefixes = (0, id_markers_1.normalizeMarkerTagPrefixes)(tagPrefix);
|
|
89
|
+
const idRe = new RegExp(`#\\s*@(?!tags?:)(?:${(0, id_markers_1.buildMarkerTagPrefixPattern)(markerTagPrefixes)}):(\\d+)`);
|
|
88
90
|
const tagsRe = /^#\s*@tags:\s*(.+)/i;
|
|
89
91
|
const singleTagRe = /^#\s*@(\w+)\s*$/;
|
|
90
92
|
for (let i = itLineIdx - 1; i >= 0 && i >= itLineIdx - 30; i--) {
|
|
@@ -110,7 +112,7 @@ function extractCommentBlockAbove(lines, itLineIdx, tagPrefix) {
|
|
|
110
112
|
continue;
|
|
111
113
|
}
|
|
112
114
|
const singleTagMatch = trimmed.match(singleTagRe);
|
|
113
|
-
if (singleTagMatch && singleTagMatch[1]
|
|
115
|
+
if (singleTagMatch && !markerTagPrefixes.includes(singleTagMatch[1])) {
|
|
114
116
|
tags.push(singleTagMatch[1]);
|
|
115
117
|
continue;
|
|
116
118
|
}
|
package/dist/parsers/ruby.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"ruby.js","sourceRoot":"","sources":["../../src/parsers/ruby.ts"],"names":[],"mappings":";AAAA;;;;;;;;;;;;;;;;;GAiBG;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
|
|
1
|
+
{"version":3,"file":"ruby.js","sourceRoot":"","sources":["../../src/parsers/ruby.ts"],"names":[],"mappings":"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"}
|
package/dist/parsers/rust.d.ts
CHANGED
|
@@ -15,4 +15,4 @@
|
|
|
15
15
|
* Path-based auto-tagging: directory segments starting with '@' become tags.
|
|
16
16
|
*/
|
|
17
17
|
import { LinkConfig, ParsedTest } from '../types';
|
|
18
|
-
export declare function parseRustFile(filePath: string, tagPrefix: string, linkConfigs?: LinkConfig[]): ParsedTest[];
|
|
18
|
+
export declare function parseRustFile(filePath: string, tagPrefix: string | string[], linkConfigs?: LinkConfig[]): ParsedTest[];
|
package/dist/parsers/rust.js
CHANGED
|
@@ -51,6 +51,7 @@ var __importStar = (this && this.__importStar) || (function () {
|
|
|
51
51
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
52
52
|
exports.parseRustFile = parseRustFile;
|
|
53
53
|
const fs = __importStar(require("fs"));
|
|
54
|
+
const id_markers_1 = require("../id-markers");
|
|
54
55
|
const shared_1 = require("./shared");
|
|
55
56
|
// ─── Test attribute detection ─────────────────────────────────────────────────
|
|
56
57
|
const TEST_ATTR_RE = /^\s*#\[(?:tokio::)?test(?:\(.*\))?\]\s*$/;
|
|
@@ -75,7 +76,8 @@ function extractCommentBlockAbove(lines, attrLineIdx, tagPrefix) {
|
|
|
75
76
|
const docLines = [];
|
|
76
77
|
let azureId;
|
|
77
78
|
const tags = [];
|
|
78
|
-
const
|
|
79
|
+
const markerTagPrefixes = (0, id_markers_1.normalizeMarkerTagPrefixes)(tagPrefix);
|
|
80
|
+
const idRe = new RegExp(`//\\s*@(?!tags?:)(?:${(0, id_markers_1.buildMarkerTagPrefixPattern)(markerTagPrefixes)}):(\\d+)`);
|
|
79
81
|
const tagsRe = /\/\/\s*@tags:\s*(.+)/i;
|
|
80
82
|
const singleTagRe = /\/\/\s*@(\w+)\s*$/;
|
|
81
83
|
const docRe = /^\/\/[\/!]?\s?(.*)$/; // matches //, ///, //!
|
|
@@ -103,7 +105,7 @@ function extractCommentBlockAbove(lines, attrLineIdx, tagPrefix) {
|
|
|
103
105
|
continue;
|
|
104
106
|
}
|
|
105
107
|
const singleTagMatch = trimmed.match(singleTagRe);
|
|
106
|
-
if (singleTagMatch && singleTagMatch[1]
|
|
108
|
+
if (singleTagMatch && !markerTagPrefixes.includes(singleTagMatch[1])) {
|
|
107
109
|
tags.push(singleTagMatch[1]);
|
|
108
110
|
continue;
|
|
109
111
|
}
|
package/dist/parsers/rust.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"rust.js","sourceRoot":"","sources":["../../src/parsers/rust.ts"],"names":[],"mappings":";AAAA;;;;;;;;;;;;;;;GAeG;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
|
|
1
|
+
{"version":3,"file":"rust.js","sourceRoot":"","sources":["../../src/parsers/rust.ts"],"names":[],"mappings":"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"}
|
package/dist/parsers/swift.d.ts
CHANGED
|
@@ -31,4 +31,4 @@
|
|
|
31
31
|
* Path-based auto-tagging: directory segments starting with '@' become tags.
|
|
32
32
|
*/
|
|
33
33
|
import { LinkConfig, ParsedTest } from '../types';
|
|
34
|
-
export declare function parseSwiftFile(filePath: string, tagPrefix: string, linkConfigs?: LinkConfig[]): ParsedTest[];
|
|
34
|
+
export declare function parseSwiftFile(filePath: string, tagPrefix: string | string[], linkConfigs?: LinkConfig[]): ParsedTest[];
|
package/dist/parsers/swift.js
CHANGED
|
@@ -68,6 +68,7 @@ Object.defineProperty(exports, "__esModule", { value: true });
|
|
|
68
68
|
exports.parseSwiftFile = parseSwiftFile;
|
|
69
69
|
const fs = __importStar(require("fs"));
|
|
70
70
|
const path = __importStar(require("path"));
|
|
71
|
+
const id_markers_1 = require("../id-markers");
|
|
71
72
|
const shared_1 = require("./shared");
|
|
72
73
|
// ─── Test method detection ────────────────────────────────────────────────────
|
|
73
74
|
const TEST_METHOD_RE = /^\s*func\s+(test\w+)\s*\(/;
|
|
@@ -140,7 +141,8 @@ function extractDocBefore(lines, methodLineIdx) {
|
|
|
140
141
|
function extractCommentMetadataAbove(lines, methodLineIdx, tagPrefix) {
|
|
141
142
|
const tags = [];
|
|
142
143
|
let azureId;
|
|
143
|
-
const
|
|
144
|
+
const markerTagPrefixes = (0, id_markers_1.normalizeMarkerTagPrefixes)(tagPrefix);
|
|
145
|
+
const idRe = new RegExp(`//\\s*@(?!tags?:)(?:${(0, id_markers_1.buildMarkerTagPrefixPattern)(markerTagPrefixes)}):(\\d+)`);
|
|
144
146
|
const tagsListRe = /\/\/\s*@tags?\s*:\s*(.+)/i;
|
|
145
147
|
const singleTagRe = /\/\/\s*@(\w+)\s*$/;
|
|
146
148
|
for (let i = methodLineIdx - 1; i >= 0 && i >= methodLineIdx - 25; i--) {
|
|
@@ -160,7 +162,7 @@ function extractCommentMetadataAbove(lines, methodLineIdx, tagPrefix) {
|
|
|
160
162
|
continue;
|
|
161
163
|
}
|
|
162
164
|
const singleTag = trimmed.match(singleTagRe);
|
|
163
|
-
if (singleTag && singleTag[1]
|
|
165
|
+
if (singleTag && !markerTagPrefixes.includes(singleTag[1])) {
|
|
164
166
|
tags.push(singleTag[1]);
|
|
165
167
|
continue;
|
|
166
168
|
}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"swift.js","sourceRoot":"","sources":["../../src/parsers/swift.ts"],"names":[],"mappings":";AAAA;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GA+BG;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
|
|
1
|
+
{"version":3,"file":"swift.js","sourceRoot":"","sources":["../../src/parsers/swift.ts"],"names":[],"mappings":"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"}
|
|
@@ -35,4 +35,4 @@ export interface TabularRow {
|
|
|
35
35
|
* @param tagPrefix Tag prefix for TC ID tags (e.g. 'tc').
|
|
36
36
|
* @param linkConfigs Optional link configurations.
|
|
37
37
|
*/
|
|
38
|
-
export declare function parseTabularRows(rows: TabularRow[], filePath: string, _tagPrefix: string, linkConfigs: LinkConfig[] | undefined): ParsedTest[];
|
|
38
|
+
export declare function parseTabularRows(rows: TabularRow[], filePath: string, _tagPrefix: string | string[], linkConfigs: LinkConfig[] | undefined): ParsedTest[];
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"tabular.js","sourceRoot":"","sources":["../../src/parsers/tabular.ts"],"names":[],"mappings":";AAAA;;;;;;;;;;;;;;;;;;;;;GAqBG;;AA0CH,4CA+DC;AAtGD,qCAA4D;AAE5D,iFAAiF;AAEjF,MAAM,cAAc,GAAG,sCAAsC,CAAC;AAC9D,MAAM,eAAe,GAAG,yFAAyF,CAAC;AAElH,0EAA0E;AAC1E,SAAS,cAAc,CAAC,GAAW;IACjC,OAAO,GAAG,CAAC,OAAO,CAAC,cAAc,EAAE,EAAE,CAAC,CAAC,IAAI,EAAE,CAAC;AAChD,CAAC;AAED,oDAAoD;AACpD,SAAS,eAAe,CAAC,GAAW;IAClC,GAAG,GAAG,GAAG,CAAC,IAAI,EAAE,CAAC;IACjB,MAAM,CAAC,GAAG,GAAG,CAAC,KAAK,CAAC,eAAe,CAAC,CAAC;IACrC,IAAI,CAAC,CAAC;QAAE,OAAO,EAAE,OAAO,EAAE,MAAM,EAAE,IAAI,EAAE,GAAG,EAAE,CAAC;IAC9C,MAAM,OAAO,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC,OAAO,CAAC,kBAAkB,EAAE,EAAE,CAAC,CAAC,IAAI,EAAE,CAAC;IAC5D,MAAM,IAAI,GAAG,GAAG,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,MAAM,CAAC,CAAC,IAAI,EAAE,CAAC;IAC3C,OAAO,EAAE,OAAO,EAAE,IAAI,EAAE,CAAC;AAC3B,CAAC;AAWD;;;;;;;GAOG;AACH,SAAgB,gBAAgB,CAC9B,IAAkB,EAClB,QAAgB,EAChB,
|
|
1
|
+
{"version":3,"file":"tabular.js","sourceRoot":"","sources":["../../src/parsers/tabular.ts"],"names":[],"mappings":"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"}
|
|
@@ -35,4 +35,4 @@
|
|
|
35
35
|
* Path-based auto-tagging: directory segments starting with '@' become tags.
|
|
36
36
|
*/
|
|
37
37
|
import { LinkConfig, ParsedTest } from '../types';
|
|
38
|
-
export declare function parseTestCafeFile(filePath: string, tagPrefix: string, linkConfigs?: LinkConfig[]): ParsedTest[];
|
|
38
|
+
export declare function parseTestCafeFile(filePath: string, tagPrefix: string | string[], linkConfigs?: LinkConfig[]): ParsedTest[];
|
package/dist/parsers/testcafe.js
CHANGED
|
@@ -72,6 +72,7 @@ Object.defineProperty(exports, "__esModule", { value: true });
|
|
|
72
72
|
exports.parseTestCafeFile = parseTestCafeFile;
|
|
73
73
|
const fs = __importStar(require("fs"));
|
|
74
74
|
const path = __importStar(require("path"));
|
|
75
|
+
const id_markers_1 = require("../id-markers");
|
|
75
76
|
const shared_1 = require("./shared");
|
|
76
77
|
// ─── Test / fixture detection ─────────────────────────────────────────────────
|
|
77
78
|
/** Matches a regular test call (no .meta chaining). */
|
|
@@ -143,7 +144,8 @@ function extractJsdocBefore(lines, testLineIdx) {
|
|
|
143
144
|
function extractCommentMetadataAbove(lines, testLineIdx, tagPrefix) {
|
|
144
145
|
const tags = [];
|
|
145
146
|
let azureId;
|
|
146
|
-
const
|
|
147
|
+
const markerTagPrefixes = (0, id_markers_1.normalizeMarkerTagPrefixes)(tagPrefix);
|
|
148
|
+
const idRe = new RegExp(`//\\s*@(?!tags?:)(?:${(0, id_markers_1.buildMarkerTagPrefixPattern)(markerTagPrefixes)}):(\\d+)`);
|
|
147
149
|
const tagsListRe = /\/\/\s*@tags?\s*:\s*(.+)/i;
|
|
148
150
|
const singleTagRe = /\/\/\s*@(\w+)\s*$/;
|
|
149
151
|
for (let i = testLineIdx - 1; i >= 0 && i >= testLineIdx - 25; i--) {
|
|
@@ -163,7 +165,7 @@ function extractCommentMetadataAbove(lines, testLineIdx, tagPrefix) {
|
|
|
163
165
|
continue;
|
|
164
166
|
}
|
|
165
167
|
const singleTag = trimmed.match(singleTagRe);
|
|
166
|
-
if (singleTag && singleTag[1]
|
|
168
|
+
if (singleTag && !markerTagPrefixes.includes(singleTag[1])) {
|
|
167
169
|
tags.push(singleTag[1]);
|
|
168
170
|
continue;
|
|
169
171
|
}
|
|
@@ -184,6 +186,8 @@ function extractCommentMetadataAbove(lines, testLineIdx, tagPrefix) {
|
|
|
184
186
|
function extractMetaChainResult(lines, startLineIdx, tagPrefix) {
|
|
185
187
|
let azureId;
|
|
186
188
|
const tags = [];
|
|
189
|
+
const markerTagPrefixes = (0, id_markers_1.normalizeMarkerTagPrefixes)(tagPrefix);
|
|
190
|
+
const markerTagPattern = (0, id_markers_1.buildMarkerTagPrefixPattern)(markerTagPrefixes);
|
|
187
191
|
const scanEnd = Math.min(startLineIdx + 8, lines.length);
|
|
188
192
|
// Accumulate trimmed source lines until we can see the )(title pattern
|
|
189
193
|
let collected = '';
|
|
@@ -202,14 +206,14 @@ function extractMetaChainResult(lines, startLineIdx, tagPrefix) {
|
|
|
202
206
|
if (!callTitle)
|
|
203
207
|
return null;
|
|
204
208
|
// Extract TC ID — key-value form: .meta('tc', '12345')
|
|
205
|
-
const kvRe = new RegExp(`\\.meta\\s*\\(\\s*['"]
|
|
209
|
+
const kvRe = new RegExp(`\\.meta\\s*\\(\\s*['"](?:${markerTagPattern})['"]\\s*,\\s*['"]([\\d]+)['"]`);
|
|
206
210
|
const kvMatch = collected.match(kvRe);
|
|
207
211
|
if (kvMatch) {
|
|
208
212
|
azureId = parseInt(kvMatch[1], 10);
|
|
209
213
|
}
|
|
210
214
|
// Extract TC ID — object form: .meta({ tc: '12345', ... }) or .meta({ "tc": '12345' })
|
|
211
215
|
if (azureId === undefined) {
|
|
212
|
-
const objRe = new RegExp(`\\.meta\\s*\\(\\s*\\{[^}]*['"]
|
|
216
|
+
const objRe = new RegExp(`\\.meta\\s*\\(\\s*\\{[^}]*['"]?(?:${markerTagPattern})['"]?\\s*:\\s*['"]([\\d]+)['"]`);
|
|
213
217
|
const objMatch = collected.match(objRe);
|
|
214
218
|
if (objMatch) {
|
|
215
219
|
azureId = parseInt(objMatch[1], 10);
|
|
@@ -221,7 +225,7 @@ function extractMetaChainResult(lines, startLineIdx, tagPrefix) {
|
|
|
221
225
|
const pairRe = /['"]?([\w]+)['"]?\s*:\s*['"]([^'"]+)['"]/g;
|
|
222
226
|
let pm;
|
|
223
227
|
while ((pm = pairRe.exec(metaObjMatch[1])) !== null) {
|
|
224
|
-
if (pm[1]
|
|
228
|
+
if (!markerTagPrefixes.includes(pm[1]))
|
|
225
229
|
tags.push(pm[2]);
|
|
226
230
|
}
|
|
227
231
|
}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"testcafe.js","sourceRoot":"","sources":["../../src/parsers/testcafe.ts"],"names":[],"mappings":";AAAA;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GAmCG;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
|
|
1
|
+
{"version":3,"file":"testcafe.js","sourceRoot":"","sources":["../../src/parsers/testcafe.ts"],"names":[],"mappings":"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"}
|
package/dist/sync/engine.js
CHANGED
|
@@ -51,8 +51,10 @@ const fs = __importStar(require("fs"));
|
|
|
51
51
|
const glob_1 = require("glob");
|
|
52
52
|
const path = __importStar(require("path"));
|
|
53
53
|
const summarizer_1 = require("../ai/summarizer");
|
|
54
|
+
const html_1 = require("../html");
|
|
54
55
|
const client_1 = require("../azure/client");
|
|
55
56
|
const test_cases_1 = require("../azure/test-cases");
|
|
57
|
+
const id_markers_1 = require("../id-markers");
|
|
56
58
|
const csharp_1 = require("../parsers/csharp");
|
|
57
59
|
const csv_1 = require("../parsers/csv");
|
|
58
60
|
const dart_1 = require("../parsers/dart");
|
|
@@ -116,13 +118,13 @@ function supportsPullWriteback(localType) {
|
|
|
116
118
|
return localType === 'gherkin' || localType === 'reqnroll' || localType === 'markdown' || localType === 'csv';
|
|
117
119
|
}
|
|
118
120
|
function buildPushDiff(test, remote, config, cached) {
|
|
119
|
-
const
|
|
121
|
+
const markerTagPrefixes = (0, id_markers_1.getMarkerTagPrefixes)(config);
|
|
120
122
|
const desiredAzure = (0, test_cases_1.buildAzureSyncContent)(test, config.sync?.format);
|
|
121
123
|
const localStepsText = desiredAzure.steps.map((s) => `${s.action}|${s.expected ?? ''}`).join('\n');
|
|
122
124
|
const remoteStepsText = remote.steps.map((s) => `${s.action}|${s.expected ?? ''}`).join('\n');
|
|
123
125
|
const titleChanged = remote.title !== desiredAzure.title;
|
|
124
126
|
const stepsChanged = localStepsText !== remoteStepsText;
|
|
125
|
-
const localTags = new Set(test.tags.filter((t) => !
|
|
127
|
+
const localTags = new Set(test.tags.filter((t) => !(0, id_markers_1.isMarkerTag)(t, markerTagPrefixes)));
|
|
126
128
|
const remoteTags = new Set(remote.tags);
|
|
127
129
|
const tagsChanged = [...localTags].some((t) => !remoteTags.has(t));
|
|
128
130
|
const localDescHash = (0, cache_1.hashString)(test.description);
|
|
@@ -155,7 +157,7 @@ function buildPushDiff(test, remote, config, cached) {
|
|
|
155
157
|
return { changedFields, diffDetail };
|
|
156
158
|
}
|
|
157
159
|
async function parseLocalFiles(filePaths, config, tagsFilter) {
|
|
158
|
-
const tagPrefix = config
|
|
160
|
+
const tagPrefix = (0, id_markers_1.getMarkerTagPrefixes)(config);
|
|
159
161
|
const linkConfigs = config.sync?.links;
|
|
160
162
|
const autoLinkStories = config.sync?.autoLinkStories ?? false;
|
|
161
163
|
const attachmentsConfig = config.sync?.attachments;
|
|
@@ -394,12 +396,16 @@ async function pushSingle(config, configDir, opts) {
|
|
|
394
396
|
parseFailures = parsed.failures;
|
|
395
397
|
}
|
|
396
398
|
failOnParseErrors('push', parseFailures);
|
|
397
|
-
// AI auto-summary: for code-based local types,
|
|
398
|
-
//
|
|
399
|
-
//
|
|
400
|
-
//
|
|
399
|
+
// AI auto-summary: for code-based local types, auto-detect the AI environment
|
|
400
|
+
// (Claude Code, Copilot, Codex, etc.) and use the available provider/key.
|
|
401
|
+
// Falls back to the local node-llama-cpp provider with heuristic fallback
|
|
402
|
+
// when no AI environment is detected, so push always succeeds.
|
|
403
|
+
const detected = (0, summarizer_1.detectAiEnvironment)();
|
|
404
|
+
const defaultAiOpts = detected
|
|
405
|
+
? { provider: detected.provider, apiKey: detected.apiKey, heuristicFallback: true }
|
|
406
|
+
: { provider: 'local', heuristicFallback: true };
|
|
401
407
|
const effectiveAiOpts = opts._preloadedTests ? undefined // AI already applied in multi-plan pre-pass
|
|
402
|
-
: opts.aiSummary ?? (CODE_TYPES.has(config.local.type) ?
|
|
408
|
+
: opts.aiSummary ?? (CODE_TYPES.has(config.local.type) ? defaultAiOpts : undefined);
|
|
403
409
|
if (effectiveAiOpts) {
|
|
404
410
|
const aiTargets = resolvedTests.filter(t => t.steps.length === 0 || !t.description);
|
|
405
411
|
let aiDone = 0;
|
|
@@ -463,7 +469,7 @@ async function pushSingle(config, configDir, opts) {
|
|
|
463
469
|
` Check: correct project name, testPlan.id, and that your PAT has "Test Management: Read & Write" permission.`);
|
|
464
470
|
}
|
|
465
471
|
}
|
|
466
|
-
const tagPrefix = config
|
|
472
|
+
const tagPrefix = (0, id_markers_1.getPreferredMarkerTagPrefix)(config);
|
|
467
473
|
const titleField = config.sync?.titleField ?? 'System.Title';
|
|
468
474
|
const conflictAction = config.sync?.conflictAction ?? 'overwrite';
|
|
469
475
|
const disableLocal = config.sync?.disableLocalChanges ?? false;
|
|
@@ -536,7 +542,12 @@ async function pushSingle(config, configDir, opts) {
|
|
|
536
542
|
results.push(result);
|
|
537
543
|
opts.onProgress?.(++done, resolvedTests.length, result);
|
|
538
544
|
};
|
|
539
|
-
|
|
545
|
+
// Concurrency invariant: workers share pushQueue, results, pendingWritebacks,
|
|
546
|
+
// suiteCache, and conditionSuiteCache via plain Array/Map mutations. This is
|
|
547
|
+
// safe because Node.js is single-threaded — array.shift() and map.set() execute
|
|
548
|
+
// atomically within a tick. Suspension only occurs at `await` boundaries, so
|
|
549
|
+
// no two workers mutate shared state simultaneously.
|
|
550
|
+
const PUSH_CONCURRENCY = 4;
|
|
540
551
|
const pushQueue = [...resolvedTests];
|
|
541
552
|
const pushWorkers = Array.from({ length: Math.min(PUSH_CONCURRENCY, pushQueue.length) }, async () => {
|
|
542
553
|
while (pushQueue.length > 0) {
|
|
@@ -700,8 +711,10 @@ async function pushSingle(config, configDir, opts) {
|
|
|
700
711
|
}
|
|
701
712
|
}
|
|
702
713
|
}
|
|
703
|
-
// Removed TC detection
|
|
704
|
-
|
|
714
|
+
// Removed TC detection is only safe on full-scope runs.
|
|
715
|
+
// Tag-filtered or condition-filtered pushes intentionally operate on a subset.
|
|
716
|
+
const shouldDetectRemoved = !opts.tags && !config.local.condition;
|
|
717
|
+
if (shouldDetectRemoved) {
|
|
705
718
|
try {
|
|
706
719
|
// Reuse the pre-loaded remote TCs if we already fetched them for automatedTestName
|
|
707
720
|
// matching, otherwise fetch now. This avoids a redundant round-trip.
|
|
@@ -754,7 +767,7 @@ async function pullSingle(config, configDir, opts) {
|
|
|
754
767
|
const tests = parsed.tests;
|
|
755
768
|
const client = await client_1.AzureClient.create(config);
|
|
756
769
|
const titleField = config.sync?.titleField ?? 'System.Title';
|
|
757
|
-
const tagPrefix = config
|
|
770
|
+
const tagPrefix = (0, id_markers_1.getPreferredMarkerTagPrefix)(config);
|
|
758
771
|
const disableLocal = config.sync?.disableLocalChanges ?? false;
|
|
759
772
|
const results = [];
|
|
760
773
|
const cache = (0, cache_1.loadCache)(configDir);
|
|
@@ -841,31 +854,41 @@ async function pullSingle(config, configDir, opts) {
|
|
|
841
854
|
}
|
|
842
855
|
// Pull-create: generate new local files for Azure TCs that have no local counterpart
|
|
843
856
|
if (config.sync?.pull?.enableCreatingNewLocalTestCases && !disableLocal) {
|
|
844
|
-
|
|
845
|
-
|
|
846
|
-
|
|
847
|
-
|
|
848
|
-
|
|
849
|
-
|
|
850
|
-
|
|
851
|
-
|
|
852
|
-
|
|
857
|
+
if (!supportsPullWriteback(config.local.type)) {
|
|
858
|
+
results.push({
|
|
859
|
+
action: 'error',
|
|
860
|
+
filePath: '',
|
|
861
|
+
title: '',
|
|
862
|
+
detail: `Pull-create is not supported for local.type "${config.local.type}".`,
|
|
863
|
+
});
|
|
864
|
+
}
|
|
865
|
+
else {
|
|
866
|
+
try {
|
|
867
|
+
const remoteTcs = await (0, test_cases_1.getTestCasesInSuite)(client, config);
|
|
868
|
+
const linkedIds = new Set(linked.map((t) => t.azureId));
|
|
869
|
+
const unlinked = remoteTcs.filter((tc) => !linkedIds.has(tc.id));
|
|
870
|
+
for (const tc of unlinked) {
|
|
871
|
+
try {
|
|
872
|
+
const newFilePath = createLocalFileFromRemote(tc, config, configDir, tagPrefix, !opts.dryRun);
|
|
873
|
+
if (!opts.dryRun) {
|
|
874
|
+
updateCacheEntry(cache, { filePath: newFilePath, title: tc.title, description: tc.description, steps: tc.steps.map((s) => ({ keyword: 'Step', text: s.action, expected: s.expected })), tags: tc.tags, line: 1, azureId: tc.id }, tc);
|
|
875
|
+
}
|
|
876
|
+
results.push({
|
|
877
|
+
action: 'created',
|
|
878
|
+
filePath: newFilePath,
|
|
879
|
+
title: tc.title,
|
|
880
|
+
azureId: tc.id,
|
|
881
|
+
detail: 'new local file from Azure TC',
|
|
882
|
+
});
|
|
883
|
+
}
|
|
884
|
+
catch (err) {
|
|
885
|
+
const msg = err instanceof Error ? err.message : String(err);
|
|
886
|
+
results.push({ action: 'error', filePath: '', title: tc.title, azureId: tc.id, detail: `pull-create: ${msg}` });
|
|
853
887
|
}
|
|
854
|
-
results.push({
|
|
855
|
-
action: 'created',
|
|
856
|
-
filePath: newFilePath,
|
|
857
|
-
title: tc.title,
|
|
858
|
-
azureId: tc.id,
|
|
859
|
-
detail: 'new local file from Azure TC',
|
|
860
|
-
});
|
|
861
|
-
}
|
|
862
|
-
catch (err) {
|
|
863
|
-
const msg = err instanceof Error ? err.message : String(err);
|
|
864
|
-
results.push({ action: 'error', filePath: '', title: tc.title, azureId: tc.id, detail: `pull-create: ${msg}` });
|
|
865
888
|
}
|
|
866
889
|
}
|
|
890
|
+
catch { /* best-effort */ }
|
|
867
891
|
}
|
|
868
|
-
catch { /* best-effort */ }
|
|
869
892
|
}
|
|
870
893
|
if (!opts.dryRun) {
|
|
871
894
|
(0, cache_1.saveCache)(configDir, cache);
|
|
@@ -903,8 +926,10 @@ function applyRemoteToLocal(test, newTitle, newSteps, newDescription, localType,
|
|
|
903
926
|
else if (localType === 'csv') {
|
|
904
927
|
(0, csv_1.applyRemoteToCsv)(test.filePath, test.title, newTitle, newSteps);
|
|
905
928
|
}
|
|
906
|
-
|
|
907
|
-
|
|
929
|
+
else if (localType === 'excel') {
|
|
930
|
+
throw new Error('Pull is not supported for local.type "excel" (in-place xlsx editing is not implemented).');
|
|
931
|
+
}
|
|
932
|
+
// csharp / java / python / javascript / etc.: pull not supported (code files are managed locally)
|
|
908
933
|
}
|
|
909
934
|
function applyRemoteToGherkin(test, newTitle, newSteps) {
|
|
910
935
|
const raw = fs.readFileSync(test.filePath, 'utf8');
|
|
@@ -924,27 +949,7 @@ function applyRemoteToGherkin(test, newTitle, newSteps) {
|
|
|
924
949
|
lines.splice(stepStart, stepEnd - stepStart, ...stepLines);
|
|
925
950
|
fs.writeFileSync(test.filePath, lines.join('\n'), 'utf8');
|
|
926
951
|
}
|
|
927
|
-
|
|
928
|
-
function stripHtml(html) {
|
|
929
|
-
let result = html;
|
|
930
|
-
let previous;
|
|
931
|
-
do {
|
|
932
|
-
previous = result;
|
|
933
|
-
result = result
|
|
934
|
-
.replace(/<br\s*\/?>/gi, '\n')
|
|
935
|
-
.replace(/<\/p>/gi, '\n')
|
|
936
|
-
.replace(/<[^>]+>/g, '');
|
|
937
|
-
} while (result !== previous);
|
|
938
|
-
return result
|
|
939
|
-
// Do not decode < or > to avoid reintroducing HTML tag delimiters such as <script>.
|
|
940
|
-
// .replace(/</g, '<')
|
|
941
|
-
// .replace(/>/g, '>')
|
|
942
|
-
.replace(/"/g, '"')
|
|
943
|
-
.replace(/ /g, ' ')
|
|
944
|
-
.replace(/&/g, '&')
|
|
945
|
-
.replace(/\n{3,}/g, '\n\n')
|
|
946
|
-
.trim();
|
|
947
|
-
}
|
|
952
|
+
// stripHtml is imported from ../html (shared, XSS-safe — does not decode </>)
|
|
948
953
|
function applyRemoteToMarkdown(test, newTitle, newSteps, newDescription, tagPrefix) {
|
|
949
954
|
const raw = fs.readFileSync(test.filePath, 'utf8');
|
|
950
955
|
const lines = raw.split('\n');
|
|
@@ -1000,7 +1005,7 @@ function applyRemoteToMarkdown(test, newTitle, newSteps, newDescription, tagPref
|
|
|
1000
1005
|
}
|
|
1001
1006
|
// Update description (Gap 8)
|
|
1002
1007
|
if (newDescription !== undefined && descEnd !== -1) {
|
|
1003
|
-
const cleanDesc = stripHtml(newDescription);
|
|
1008
|
+
const cleanDesc = (0, html_1.stripHtml)(newDescription);
|
|
1004
1009
|
if (cleanDesc) {
|
|
1005
1010
|
// Description block is headingLineIdx+1 .. descEnd (skip comment lines)
|
|
1006
1011
|
let descBlockStart = headingLineIdx + 1;
|
|
@@ -1077,7 +1082,7 @@ function buildPullGherkinContent(tc, tagPrefix) {
|
|
|
1077
1082
|
lines.push(`Feature: ${tc.title}`);
|
|
1078
1083
|
if (tc.description) {
|
|
1079
1084
|
lines.push('');
|
|
1080
|
-
for (const line of stripHtml(tc.description).split('\n')) {
|
|
1085
|
+
for (const line of (0, html_1.stripHtml)(tc.description).split('\n')) {
|
|
1081
1086
|
lines.push(` ${line}`);
|
|
1082
1087
|
}
|
|
1083
1088
|
}
|
|
@@ -1109,7 +1114,7 @@ function buildPullMarkdownContent(tc, tagPrefix) {
|
|
|
1109
1114
|
lines.push('');
|
|
1110
1115
|
}
|
|
1111
1116
|
if (tc.description) {
|
|
1112
|
-
lines.push(stripHtml(tc.description));
|
|
1117
|
+
lines.push((0, html_1.stripHtml)(tc.description));
|
|
1113
1118
|
lines.push('');
|
|
1114
1119
|
}
|
|
1115
1120
|
// Scenario heading with TC ID
|