callman-core 1.42.0 → 1.44.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.
- package/dist/ai/prompts/diagram.d.ts.map +1 -1
- package/dist/ai/prompts/diagram.js +10 -5
- package/dist/ai/prompts/diagram.js.map +1 -1
- package/dist/diagram/geometry.d.ts +1 -0
- package/dist/diagram/geometry.d.ts.map +1 -1
- package/dist/diagram/geometry.js +15 -0
- package/dist/diagram/geometry.js.map +1 -1
- package/dist/diagram/ops.d.ts.map +1 -1
- package/dist/diagram/ops.js +25 -12
- package/dist/diagram/ops.js.map +1 -1
- package/dist/diagram/routing/batch.d.ts +2 -0
- package/dist/diagram/routing/batch.d.ts.map +1 -1
- package/dist/diagram/routing/batch.js +4 -4
- package/dist/diagram/routing/batch.js.map +1 -1
- package/dist/diagram/routing/index.d.ts +1 -0
- package/dist/diagram/routing/index.d.ts.map +1 -1
- package/dist/diagram/routing/index.js +1 -0
- package/dist/diagram/routing/index.js.map +1 -1
- package/dist/diagram/routing/ports.d.ts +14 -0
- package/dist/diagram/routing/ports.d.ts.map +1 -0
- package/dist/diagram/routing/ports.js +130 -0
- package/dist/diagram/routing/ports.js.map +1 -0
- package/dist/diagram/routing/sides.d.ts.map +1 -1
- package/dist/diagram/routing/sides.js +4 -3
- package/dist/diagram/routing/sides.js.map +1 -1
- package/dist/diagram/routing/types.d.ts +1 -0
- package/dist/diagram/routing/types.d.ts.map +1 -1
- package/dist/diagram/routing/types.js.map +1 -1
- package/dist/index.d.ts +1 -0
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +3 -0
- package/dist/index.js.map +1 -1
- package/dist/pipeline/config.d.ts +39 -0
- package/dist/pipeline/config.d.ts.map +1 -0
- package/dist/pipeline/config.js +71 -0
- package/dist/pipeline/config.js.map +1 -0
- package/dist/pipeline/index.d.ts +4 -0
- package/dist/pipeline/index.d.ts.map +1 -0
- package/dist/pipeline/index.js +4 -0
- package/dist/pipeline/index.js.map +1 -0
- package/dist/pipeline/passCriteria.d.ts +41 -0
- package/dist/pipeline/passCriteria.d.ts.map +1 -0
- package/dist/pipeline/passCriteria.js +67 -0
- package/dist/pipeline/passCriteria.js.map +1 -0
- package/dist/pipeline/snapshotDiff.d.ts +63 -0
- package/dist/pipeline/snapshotDiff.d.ts.map +1 -0
- package/dist/pipeline/snapshotDiff.js +148 -0
- package/dist/pipeline/snapshotDiff.js.map +1 -0
- package/dist-cjs/ai/prompts/diagram.js +10 -5
- package/dist-cjs/ai/prompts/diagram.js.map +1 -1
- package/dist-cjs/diagram/geometry.js +17 -1
- package/dist-cjs/diagram/geometry.js.map +1 -1
- package/dist-cjs/diagram/ops.js +25 -12
- package/dist-cjs/diagram/ops.js.map +1 -1
- package/dist-cjs/diagram/routing/batch.js +4 -4
- package/dist-cjs/diagram/routing/batch.js.map +1 -1
- package/dist-cjs/diagram/routing/index.js +1 -0
- package/dist-cjs/diagram/routing/index.js.map +1 -1
- package/dist-cjs/diagram/routing/ports.js +135 -0
- package/dist-cjs/diagram/routing/ports.js.map +1 -0
- package/dist-cjs/diagram/routing/sides.js +3 -2
- package/dist-cjs/diagram/routing/sides.js.map +1 -1
- package/dist-cjs/diagram/routing/types.js.map +1 -1
- package/dist-cjs/index.js +3 -0
- package/dist-cjs/index.js.map +1 -1
- package/dist-cjs/pipeline/config.js +78 -0
- package/dist-cjs/pipeline/config.js.map +1 -0
- package/dist-cjs/pipeline/index.js +20 -0
- package/dist-cjs/pipeline/index.js.map +1 -0
- package/dist-cjs/pipeline/passCriteria.js +71 -0
- package/dist-cjs/pipeline/passCriteria.js.map +1 -0
- package/dist-cjs/pipeline/snapshotDiff.js +154 -0
- package/dist-cjs/pipeline/snapshotDiff.js.map +1 -0
- package/package.json +1 -1
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"batch.js","sourceRoot":"","sources":["../../../src/diagram/routing/batch.ts"],"names":[],"mappings":";;;AAAA,2EAA2E;AAC3E,2EAA2E;AAC3E,yEAAyE;AACzE,wEAAwE;AACxE,6BAA6B;AAC7B,gDAAwE;AAExE,2CAAgF;AAChF,2CAAmE;AACnE,yCAAyC;AACzC,mDAA8D;AAC9D,yCAAoG;
|
|
1
|
+
{"version":3,"file":"batch.js","sourceRoot":"","sources":["../../../src/diagram/routing/batch.ts"],"names":[],"mappings":"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"}
|
|
@@ -26,4 +26,5 @@ __exportStar(require("./legacy.js"), exports);
|
|
|
26
26
|
__exportStar(require("./path.js"), exports);
|
|
27
27
|
__exportStar(require("./nudge.js"), exports);
|
|
28
28
|
__exportStar(require("./batch.js"), exports);
|
|
29
|
+
__exportStar(require("./ports.js"), exports);
|
|
29
30
|
//# sourceMappingURL=index.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../../src/diagram/routing/index.ts"],"names":[],"mappings":";;;;;;;;;;;;;;;;;AAAA,6CAA2B;AAC3B,6CAA2B;AAC3B,qCAA6E;AAApE,oGAAA,SAAS,OAAA;AAAE,2GAAA,gBAAgB,OAAA;AACpC,kDAAgC;AAChC,8CAA4B;AAC5B,8CAA4B;AAC5B,4CAA0B;AAC1B,6CAA2B;AAC3B,6CAA2B"}
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../../src/diagram/routing/index.ts"],"names":[],"mappings":";;;;;;;;;;;;;;;;;AAAA,6CAA2B;AAC3B,6CAA2B;AAC3B,qCAA6E;AAApE,oGAAA,SAAS,OAAA;AAAE,2GAAA,gBAAgB,OAAA;AACpC,kDAAgC;AAChC,8CAA4B;AAC5B,8CAA4B;AAC5B,4CAA0B;AAC1B,6CAA2B;AAC3B,6CAA2B;AAC3B,6CAA2B"}
|
|
@@ -0,0 +1,135 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.assignPorts = exports.takesPorts = void 0;
|
|
4
|
+
// Ports: where along a side each right-angle edge attaches. Edges sharing a
|
|
5
|
+
// side of a shape would otherwise all meet at its midpoint and leave as one
|
|
6
|
+
// trunk that splits a few pixels later. Here they spread evenly along the
|
|
7
|
+
// middle of the side, ordered by where their other end lies so they do not
|
|
8
|
+
// cross — the "port distribution" of draw.io and yEd. An end alone on its
|
|
9
|
+
// side lines up with its partner when the two sides face each other, so
|
|
10
|
+
// slightly offset shapes are joined by a straight line instead of a jog.
|
|
11
|
+
//
|
|
12
|
+
// Host-side and pure: the groups span EVERY edge on a side, so a host runs
|
|
13
|
+
// this over all its edges and hands each edge its sides and offsets to the
|
|
14
|
+
// router (Terminal.side / Terminal.offset, RouteEdge.sourceOffset /
|
|
15
|
+
// targetOffset). Only right-angle edges ("orthogonal", "smart") without
|
|
16
|
+
// manual bends or legacy pins take ports; the others attach as before.
|
|
17
|
+
const geometry_js_1 = require("../geometry.js");
|
|
18
|
+
const legacy_js_1 = require("./legacy.js");
|
|
19
|
+
const sides_js_1 = require("./sides.js");
|
|
20
|
+
// Ports stay in the middle 60% of a side: a line meeting a rounded or
|
|
21
|
+
// slanted outline near its corner reads as detached from the shape.
|
|
22
|
+
const BAND_START = 0.2;
|
|
23
|
+
const BAND = 1 - BAND_START * 2;
|
|
24
|
+
const takesPorts = (edge, defaultRouting) => {
|
|
25
|
+
if (!edge.source || !edge.target || edge.source === edge.target)
|
|
26
|
+
return false;
|
|
27
|
+
if ((edge.waypoints?.length ?? 0) > 0 || (0, legacy_js_1.isLegacyPinnedEdge)(edge))
|
|
28
|
+
return false;
|
|
29
|
+
const routing = edge.routing ?? defaultRouting ?? "orthogonal";
|
|
30
|
+
return routing === "orthogonal" || routing === "smart";
|
|
31
|
+
};
|
|
32
|
+
exports.takesPorts = takesPorts;
|
|
33
|
+
const alongX = (side) => side === "top" || side === "bottom";
|
|
34
|
+
// The side's extent along its own axis.
|
|
35
|
+
const span = (end) => alongX(end.side) ? [end.rect.x, end.rect.x + end.rect.width] : [end.rect.y, end.rect.y + end.rect.height];
|
|
36
|
+
const band = (end) => {
|
|
37
|
+
const [lo, hi] = span(end);
|
|
38
|
+
return [lo + (hi - lo) * BAND_START, hi - (hi - lo) * BAND_START];
|
|
39
|
+
};
|
|
40
|
+
const coordinate = (end) => {
|
|
41
|
+
const [lo, hi] = span(end);
|
|
42
|
+
return lo + (hi - lo) * end.offset;
|
|
43
|
+
};
|
|
44
|
+
const offsetAt = (end, value) => {
|
|
45
|
+
const [lo, hi] = span(end);
|
|
46
|
+
return hi > lo ? (value - lo) / (hi - lo) : 0.5;
|
|
47
|
+
};
|
|
48
|
+
// The two ends face each other across a gap: a straight line can join them.
|
|
49
|
+
const facing = (a, b) => {
|
|
50
|
+
if ((0, geometry_js_1.oppositeSide)(a.side) !== b.side)
|
|
51
|
+
return false;
|
|
52
|
+
switch (a.side) {
|
|
53
|
+
case "right":
|
|
54
|
+
return b.rect.x >= a.rect.x + a.rect.width;
|
|
55
|
+
case "left":
|
|
56
|
+
return b.rect.x + b.rect.width <= a.rect.x;
|
|
57
|
+
case "bottom":
|
|
58
|
+
return b.rect.y >= a.rect.y + a.rect.height;
|
|
59
|
+
case "top":
|
|
60
|
+
default:
|
|
61
|
+
return b.rect.y + b.rect.height <= a.rect.y;
|
|
62
|
+
}
|
|
63
|
+
};
|
|
64
|
+
const assignPorts = (rects, edges, defaultRouting, previous) => {
|
|
65
|
+
const pairs = new Map();
|
|
66
|
+
const groups = new Map();
|
|
67
|
+
const join = (end) => {
|
|
68
|
+
const key = `${end.node}\u0000${end.side}`;
|
|
69
|
+
const group = groups.get(key);
|
|
70
|
+
if (group)
|
|
71
|
+
group.push(end);
|
|
72
|
+
else
|
|
73
|
+
groups.set(key, [end]);
|
|
74
|
+
};
|
|
75
|
+
for (const edge of edges) {
|
|
76
|
+
if (!(0, exports.takesPorts)(edge, defaultRouting))
|
|
77
|
+
continue;
|
|
78
|
+
const source = rects.get(edge.source);
|
|
79
|
+
const target = rects.get(edge.target);
|
|
80
|
+
if (!source || !target)
|
|
81
|
+
continue;
|
|
82
|
+
const sides = (0, sides_js_1.chooseSides)(source, target, { source: edge.sourceHandle, target: edge.targetHandle }, previous?.(edge.id));
|
|
83
|
+
const from = { edge: edge.id, node: edge.source, side: sides.source, rect: source, partner: target, offset: 0.5, shared: false };
|
|
84
|
+
const to = { edge: edge.id, node: edge.target, side: sides.target, rect: target, partner: source, offset: 0.5, shared: false };
|
|
85
|
+
pairs.set(edge.id, [from, to]);
|
|
86
|
+
join(from);
|
|
87
|
+
join(to);
|
|
88
|
+
}
|
|
89
|
+
// Shared sides: spread in the order of the partners along the side, so the
|
|
90
|
+
// lines leave side by side without crossing. Ties (several edges to the
|
|
91
|
+
// same shape) go by edge id — the same order at both ends, so parallel
|
|
92
|
+
// edges stay parallel.
|
|
93
|
+
for (const group of groups.values()) {
|
|
94
|
+
if (group.length < 2)
|
|
95
|
+
continue;
|
|
96
|
+
const along = (end) => (alongX(end.side) ? (0, geometry_js_1.rectCenter)(end.partner).x : (0, geometry_js_1.rectCenter)(end.partner).y);
|
|
97
|
+
group.sort((a, b) => along(a) - along(b) || (a.edge < b.edge ? -1 : a.edge > b.edge ? 1 : 0));
|
|
98
|
+
group.forEach((end, index) => {
|
|
99
|
+
end.offset = BAND_START + (BAND * (index + 0.5)) / group.length;
|
|
100
|
+
end.shared = true;
|
|
101
|
+
});
|
|
102
|
+
}
|
|
103
|
+
// A lone end lines up with its partner across facing sides: on the
|
|
104
|
+
// partner's port when that one is shared, else in the middle of the two
|
|
105
|
+
// sides' overlap.
|
|
106
|
+
for (const [from, to] of pairs.values()) {
|
|
107
|
+
if ((from.shared && to.shared) || !facing(from, to))
|
|
108
|
+
continue;
|
|
109
|
+
if (from.shared || to.shared) {
|
|
110
|
+
const fixed = from.shared ? from : to;
|
|
111
|
+
const lone = fixed === from ? to : from;
|
|
112
|
+
const value = coordinate(fixed);
|
|
113
|
+
const [lo, hi] = band(lone);
|
|
114
|
+
if (value >= lo && value <= hi)
|
|
115
|
+
lone.offset = offsetAt(lone, value);
|
|
116
|
+
continue;
|
|
117
|
+
}
|
|
118
|
+
const [lo1, hi1] = band(from);
|
|
119
|
+
const [lo2, hi2] = band(to);
|
|
120
|
+
const lo = Math.max(lo1, lo2);
|
|
121
|
+
const hi = Math.min(hi1, hi2);
|
|
122
|
+
if (hi < lo)
|
|
123
|
+
continue;
|
|
124
|
+
const value = (lo + hi) / 2;
|
|
125
|
+
from.offset = offsetAt(from, value);
|
|
126
|
+
to.offset = offsetAt(to, value);
|
|
127
|
+
}
|
|
128
|
+
const out = {};
|
|
129
|
+
for (const [id, [from, to]] of pairs) {
|
|
130
|
+
out[id] = { sourceSide: from.side, targetSide: to.side, sourceOffset: from.offset, targetOffset: to.offset };
|
|
131
|
+
}
|
|
132
|
+
return out;
|
|
133
|
+
};
|
|
134
|
+
exports.assignPorts = assignPorts;
|
|
135
|
+
//# sourceMappingURL=ports.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"ports.js","sourceRoot":"","sources":["../../../src/diagram/routing/ports.ts"],"names":[],"mappings":"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"}
|
|
@@ -62,8 +62,9 @@ const sideVector = (side) => {
|
|
|
62
62
|
};
|
|
63
63
|
exports.sideVector = sideVector;
|
|
64
64
|
// The point on the boundary where a terminal attaches: the explicit point
|
|
65
|
-
// when given (legacy anchors, free ends), else the side
|
|
66
|
-
|
|
65
|
+
// when given (legacy anchors, free ends), else its port on the side (the
|
|
66
|
+
// midpoint unless an offset is given).
|
|
67
|
+
const attachPoint = (terminal, side) => terminal.point ?? (terminal.offset === undefined ? (0, geometry_js_1.sideMidpoint)(terminal.rect, side) : (0, geometry_js_1.pointOnSide)(terminal.rect, side, terminal.offset));
|
|
67
68
|
exports.attachPoint = attachPoint;
|
|
68
69
|
// Where the straight line from the rectangle's centre toward `toward` leaves
|
|
69
70
|
// the rectangle — used by straight and curved edges so they meet the outline.
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"sides.js","sourceRoot":"","sources":["../../../src/diagram/routing/sides.ts"],"names":[],"mappings":";;;AAAA,8EAA8E;AAC9E,0EAA0E;AAC1E,0EAA0E;AAC1E,0EAA0E;AAC1E,uEAAuE;AACvE,
|
|
1
|
+
{"version":3,"file":"sides.js","sourceRoot":"","sources":["../../../src/diagram/routing/sides.ts"],"names":[],"mappings":"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"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"types.js","sourceRoot":"","sources":["../../../src/diagram/routing/types.ts"],"names":[],"mappings":";;;
|
|
1
|
+
{"version":3,"file":"types.js","sourceRoot":"","sources":["../../../src/diagram/routing/types.ts"],"names":[],"mappings":";;;AAkEO,MAAM,mBAAmB,GAAG,CAAC,UAAwB,EAAE,EAAwB,EAAE,CAAC,CAAC;IACxF,MAAM,EAAE,OAAO,CAAC,MAAM,IAAI,EAAE;IAC5B,YAAY,EAAE,OAAO,CAAC,YAAY,IAAI,CAAC;IACvC,WAAW,EAAE,OAAO,CAAC,WAAW,IAAI,EAAE;IACtC,UAAU,EAAE,OAAO,CAAC,UAAU,IAAI,CAAC;IACnC,QAAQ,EAAE,OAAO,CAAC,QAAQ,IAAI,CAAC;IAC/B,SAAS,EAAE,OAAO,CAAC,SAAS,IAAI,GAAG;IACnC,kBAAkB,EAAE,OAAO,CAAC,kBAAkB,IAAI,EAAE;IACpD,QAAQ,EAAE,OAAO,CAAC,QAAQ;CAC3B,CAAC,CAAC;AATU,QAAA,mBAAmB,uBAS7B"}
|
package/dist-cjs/index.js
CHANGED
|
@@ -139,5 +139,8 @@ __exportStar(require("./ui-test/flow-lint.js"), exports);
|
|
|
139
139
|
__exportStar(require("./scenario-runner/index.js"), exports);
|
|
140
140
|
__exportStar(require("./host/index.js"), exports);
|
|
141
141
|
__exportStar(require("./loadtest/index.js"), exports);
|
|
142
|
+
// Pipeline pass criteria (threshold + critical requests) and the collection
|
|
143
|
+
// snapshot diff — shared by the backend, `callme`, the MCP server and the desktop.
|
|
144
|
+
__exportStar(require("./pipeline/index.js"), exports);
|
|
142
145
|
__exportStar(require("./types/index.js"), exports);
|
|
143
146
|
//# sourceMappingURL=index.js.map
|
package/dist-cjs/index.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,78 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
// Pipeline pass criteria — when a CI collection run counts as passed.
|
|
3
|
+
//
|
|
4
|
+
// On-prem "pipeline" collections store this on the server (it is reviewed and
|
|
5
|
+
// versioned with the collection); everywhere else `callme run` builds it from
|
|
6
|
+
// `--pass-threshold` / `--critical-request`. Absent config = today's rule:
|
|
7
|
+
// every executed request must pass.
|
|
8
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
9
|
+
exports.applyPassPercentFloor = exports.normalizePipelineCollectionConfig = exports.normalizePipelinePassCriteria = exports.passCriteriaThreshold = exports.MAX_PIPELINE_REQUIRED_REQUESTS = exports.DEFAULT_PIPELINE_COLLECTION_CONFIG = exports.DEFAULT_PIPELINE_PASS_CRITERIA = void 0;
|
|
10
|
+
exports.DEFAULT_PIPELINE_PASS_CRITERIA = Object.freeze({
|
|
11
|
+
mode: "all",
|
|
12
|
+
minPassPercent: 100,
|
|
13
|
+
requiredRequestIds: [],
|
|
14
|
+
minExecuted: 1,
|
|
15
|
+
});
|
|
16
|
+
exports.DEFAULT_PIPELINE_COLLECTION_CONFIG = Object.freeze({
|
|
17
|
+
passCriteria: exports.DEFAULT_PIPELINE_PASS_CRITERIA,
|
|
18
|
+
bail: false,
|
|
19
|
+
allowFolderRuns: false,
|
|
20
|
+
});
|
|
21
|
+
/** Stored config carries at most this many critical requests. */
|
|
22
|
+
exports.MAX_PIPELINE_REQUIRED_REQUESTS = 200;
|
|
23
|
+
const isRecord = (value) => typeof value === "object" && value !== null && !Array.isArray(value);
|
|
24
|
+
const clampInt = (value, min, max, fallback) => {
|
|
25
|
+
const parsed = typeof value === "string" ? Number(value) : value;
|
|
26
|
+
if (typeof parsed !== "number" || !Number.isFinite(parsed))
|
|
27
|
+
return fallback;
|
|
28
|
+
return Math.min(max, Math.max(min, Math.floor(parsed)));
|
|
29
|
+
};
|
|
30
|
+
/** The percentage a criteria demands: 100 in "all" mode. */
|
|
31
|
+
const passCriteriaThreshold = (criteria) => criteria.mode === "percentage" ? criteria.minPassPercent : 100;
|
|
32
|
+
exports.passCriteriaThreshold = passCriteriaThreshold;
|
|
33
|
+
/**
|
|
34
|
+
* Tolerant reader for stored / bundled / user-supplied criteria: unknown keys
|
|
35
|
+
* are dropped, bad values fall back to the defaults, numbers are clamped and
|
|
36
|
+
* duplicate ids removed. Never throws.
|
|
37
|
+
*/
|
|
38
|
+
const normalizePipelinePassCriteria = (value) => {
|
|
39
|
+
if (!isRecord(value))
|
|
40
|
+
return { ...exports.DEFAULT_PIPELINE_PASS_CRITERIA, requiredRequestIds: [] };
|
|
41
|
+
const mode = value.mode === "percentage" ? "percentage" : "all";
|
|
42
|
+
const ids = Array.isArray(value.requiredRequestIds) ? value.requiredRequestIds : [];
|
|
43
|
+
const requiredRequestIds = [
|
|
44
|
+
...new Set(ids
|
|
45
|
+
.filter((id) => typeof id === "string")
|
|
46
|
+
.map((id) => id.trim())
|
|
47
|
+
.filter(Boolean)),
|
|
48
|
+
].slice(0, exports.MAX_PIPELINE_REQUIRED_REQUESTS);
|
|
49
|
+
return {
|
|
50
|
+
mode,
|
|
51
|
+
minPassPercent: mode === "percentage" ? clampInt(value.minPassPercent, 1, 100, 100) : 100,
|
|
52
|
+
requiredRequestIds,
|
|
53
|
+
minExecuted: clampInt(value.minExecuted, 1, 100_000, 1),
|
|
54
|
+
};
|
|
55
|
+
};
|
|
56
|
+
exports.normalizePipelinePassCriteria = normalizePipelinePassCriteria;
|
|
57
|
+
const normalizePipelineCollectionConfig = (value) => {
|
|
58
|
+
const source = isRecord(value) ? value : {};
|
|
59
|
+
const passCriteria = (0, exports.normalizePipelinePassCriteria)(source.passCriteria);
|
|
60
|
+
return {
|
|
61
|
+
passCriteria,
|
|
62
|
+
bail: passCriteria.mode === "percentage" ? false : source.bail === true,
|
|
63
|
+
allowFolderRuns: source.allowFolderRuns === true,
|
|
64
|
+
};
|
|
65
|
+
};
|
|
66
|
+
exports.normalizePipelineCollectionConfig = normalizePipelineCollectionConfig;
|
|
67
|
+
/**
|
|
68
|
+
* Raise a criteria to an admin-set minimum percentage (on-prem policy). A
|
|
69
|
+
* floor of 0/absent changes nothing; "all" mode is already the strictest.
|
|
70
|
+
*/
|
|
71
|
+
const applyPassPercentFloor = (criteria, floor) => {
|
|
72
|
+
const min = clampInt(floor, 0, 100, 0);
|
|
73
|
+
if (criteria.mode !== "percentage" || criteria.minPassPercent >= min)
|
|
74
|
+
return criteria;
|
|
75
|
+
return { ...criteria, minPassPercent: min };
|
|
76
|
+
};
|
|
77
|
+
exports.applyPassPercentFloor = applyPassPercentFloor;
|
|
78
|
+
//# sourceMappingURL=config.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"config.js","sourceRoot":"","sources":["../../src/pipeline/config.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,20 @@
|
|
|
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 __exportStar = (this && this.__exportStar) || function(m, exports) {
|
|
14
|
+
for (var p in m) if (p !== "default" && !Object.prototype.hasOwnProperty.call(exports, p)) __createBinding(exports, m, p);
|
|
15
|
+
};
|
|
16
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
17
|
+
__exportStar(require("./config.js"), exports);
|
|
18
|
+
__exportStar(require("./passCriteria.js"), exports);
|
|
19
|
+
__exportStar(require("./snapshotDiff.js"), exports);
|
|
20
|
+
//# sourceMappingURL=index.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/pipeline/index.ts"],"names":[],"mappings":";;;;;;;;;;;;;;;;AAAA,8CAA4B;AAC5B,oDAAkC;AAClC,oDAAkC"}
|
|
@@ -0,0 +1,71 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.evaluatePassCriteria = void 0;
|
|
4
|
+
const config_js_1 = require("./config.js");
|
|
5
|
+
/**
|
|
6
|
+
* Decide a run's verdict from per-request outcomes. The comparison is exact
|
|
7
|
+
* (`passed * 100 >= threshold * executed`), so 79.9% does not reach 80%.
|
|
8
|
+
* Order of failure reasons: too few requests, a critical request, the
|
|
9
|
+
* percentage.
|
|
10
|
+
*/
|
|
11
|
+
const evaluatePassCriteria = (outcomes, criteria, options = {}) => {
|
|
12
|
+
const byRequest = new Map();
|
|
13
|
+
for (const outcome of outcomes) {
|
|
14
|
+
const skipped = outcome.skipped === true;
|
|
15
|
+
const current = byRequest.get(outcome.requestId);
|
|
16
|
+
if (!current) {
|
|
17
|
+
byRequest.set(outcome.requestId, { passed: skipped || outcome.passed, skipped });
|
|
18
|
+
continue;
|
|
19
|
+
}
|
|
20
|
+
if (skipped)
|
|
21
|
+
continue;
|
|
22
|
+
current.passed = (current.skipped || current.passed) && outcome.passed;
|
|
23
|
+
current.skipped = false;
|
|
24
|
+
}
|
|
25
|
+
let executed = 0;
|
|
26
|
+
let passedCount = 0;
|
|
27
|
+
for (const entry of byRequest.values()) {
|
|
28
|
+
if (entry.skipped)
|
|
29
|
+
continue;
|
|
30
|
+
executed += 1;
|
|
31
|
+
if (entry.passed)
|
|
32
|
+
passedCount += 1;
|
|
33
|
+
}
|
|
34
|
+
const failedCount = executed - passedCount;
|
|
35
|
+
const scope = options.scopeRequestIds ? new Set(options.scopeRequestIds) : null;
|
|
36
|
+
const requiredFailed = [];
|
|
37
|
+
const requiredMissing = [];
|
|
38
|
+
for (const id of criteria.requiredRequestIds) {
|
|
39
|
+
if (scope && !scope.has(id))
|
|
40
|
+
continue;
|
|
41
|
+
const entry = byRequest.get(id);
|
|
42
|
+
if (!entry || entry.skipped)
|
|
43
|
+
requiredMissing.push(id);
|
|
44
|
+
else if (!entry.passed)
|
|
45
|
+
requiredFailed.push(id);
|
|
46
|
+
}
|
|
47
|
+
const threshold = (0, config_js_1.passCriteriaThreshold)(criteria);
|
|
48
|
+
const passRate = executed === 0 ? null : Math.round((passedCount / executed) * 1000) / 10;
|
|
49
|
+
const base = {
|
|
50
|
+
mode: criteria.mode,
|
|
51
|
+
threshold,
|
|
52
|
+
executed,
|
|
53
|
+
passedCount,
|
|
54
|
+
failedCount,
|
|
55
|
+
passRate,
|
|
56
|
+
requiredFailed,
|
|
57
|
+
requiredMissing,
|
|
58
|
+
};
|
|
59
|
+
if (executed < Math.max(1, criteria.minExecuted)) {
|
|
60
|
+
return { ...base, passed: false, reason: "below_min_executed" };
|
|
61
|
+
}
|
|
62
|
+
if (requiredFailed.length > 0 || requiredMissing.length > 0) {
|
|
63
|
+
return { ...base, passed: false, reason: "required_failed" };
|
|
64
|
+
}
|
|
65
|
+
if (passedCount * 100 < threshold * executed) {
|
|
66
|
+
return { ...base, passed: false, reason: "below_threshold" };
|
|
67
|
+
}
|
|
68
|
+
return { ...base, passed: true, reason: failedCount === 0 ? "all_passed" : "threshold_met" };
|
|
69
|
+
};
|
|
70
|
+
exports.evaluatePassCriteria = evaluatePassCriteria;
|
|
71
|
+
//# sourceMappingURL=passCriteria.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"passCriteria.js","sourceRoot":"","sources":["../../src/pipeline/passCriteria.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,154 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
// What changed between two versions of a collection — the snapshot a pipeline
|
|
3
|
+
// collection is reviewed and published as (the backend's internal export plus
|
|
4
|
+
// `pipelineConfig`). The backend stores the counts with each review request;
|
|
5
|
+
// the desktop review screen uses the per-item lists for its change markers.
|
|
6
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
7
|
+
exports.canonicalCollectionSnapshot = exports.diffCollectionSnapshots = exports.canonicalJson = void 0;
|
|
8
|
+
const config_js_1 = require("./config.js");
|
|
9
|
+
// Bookkeeping that changes without the content changing. Stripped only at
|
|
10
|
+
// the item's top level — a request body may legitimately hold "createdAt".
|
|
11
|
+
const VOLATILE_ITEM_KEYS = new Set(["createdAt", "updatedAt", "collectionId"]);
|
|
12
|
+
const VOLATILE_COLLECTION_KEYS = new Set([
|
|
13
|
+
"id",
|
|
14
|
+
"createdAt",
|
|
15
|
+
"updatedAt",
|
|
16
|
+
"ownerId",
|
|
17
|
+
"members",
|
|
18
|
+
"docs",
|
|
19
|
+
"pipelineConfig",
|
|
20
|
+
]);
|
|
21
|
+
const SCRIPT_KEYS = new Set(["preRequestScript", "postResponseScript", "testsScript", "scripts"]);
|
|
22
|
+
const isRecord = (value) => typeof value === "object" && value !== null && !Array.isArray(value);
|
|
23
|
+
/** Deterministic JSON: object keys sorted at every depth. */
|
|
24
|
+
const canonicalJson = (value) => {
|
|
25
|
+
if (value instanceof Date)
|
|
26
|
+
return JSON.stringify(value.toISOString());
|
|
27
|
+
if (Array.isArray(value))
|
|
28
|
+
return `[${value.map(exports.canonicalJson).join(",")}]`;
|
|
29
|
+
if (isRecord(value)) {
|
|
30
|
+
const keys = Object.keys(value)
|
|
31
|
+
.filter((key) => value[key] !== undefined)
|
|
32
|
+
.sort();
|
|
33
|
+
return `{${keys.map((key) => `${JSON.stringify(key)}:${(0, exports.canonicalJson)(value[key])}`).join(",")}}`;
|
|
34
|
+
}
|
|
35
|
+
return JSON.stringify(value ?? null);
|
|
36
|
+
};
|
|
37
|
+
exports.canonicalJson = canonicalJson;
|
|
38
|
+
const comparableItem = (item) => {
|
|
39
|
+
const out = {};
|
|
40
|
+
for (const [key, value] of Object.entries(item)) {
|
|
41
|
+
if (VOLATILE_ITEM_KEYS.has(key))
|
|
42
|
+
continue;
|
|
43
|
+
// Contract rules carry their own timestamps.
|
|
44
|
+
out[key] =
|
|
45
|
+
key === "contractRules" && Array.isArray(value)
|
|
46
|
+
? value.map((rule) => (isRecord(rule) ? comparableItem(rule) : rule))
|
|
47
|
+
: value;
|
|
48
|
+
}
|
|
49
|
+
return out;
|
|
50
|
+
};
|
|
51
|
+
const comparableCollection = (collection) => {
|
|
52
|
+
const out = {};
|
|
53
|
+
for (const [key, value] of Object.entries(collection)) {
|
|
54
|
+
if (!VOLATILE_COLLECTION_KEYS.has(key))
|
|
55
|
+
out[key] = value;
|
|
56
|
+
}
|
|
57
|
+
return out;
|
|
58
|
+
};
|
|
59
|
+
const changedKeys = (before, after) => {
|
|
60
|
+
const keys = new Set([...Object.keys(before), ...Object.keys(after)]);
|
|
61
|
+
return [...keys]
|
|
62
|
+
.filter((key) => (0, exports.canonicalJson)(before[key]) !== (0, exports.canonicalJson)(after[key]))
|
|
63
|
+
.sort();
|
|
64
|
+
};
|
|
65
|
+
const itemName = (item) => typeof item.name === "string" ? item.name : String(item.id ?? "");
|
|
66
|
+
const diffItems = (before, after) => {
|
|
67
|
+
const beforeById = new Map(before.map((item) => [item.id, item]));
|
|
68
|
+
const afterIds = new Set(after.map((item) => item.id));
|
|
69
|
+
const changes = [];
|
|
70
|
+
for (const item of after) {
|
|
71
|
+
const previous = beforeById.get(item.id);
|
|
72
|
+
if (!previous) {
|
|
73
|
+
changes.push({ id: item.id, name: itemName(item), change: "added", fields: [] });
|
|
74
|
+
continue;
|
|
75
|
+
}
|
|
76
|
+
const fields = changedKeys(comparableItem(previous), comparableItem(item));
|
|
77
|
+
if (fields.length > 0) {
|
|
78
|
+
changes.push({ id: item.id, name: itemName(item), change: "modified", fields });
|
|
79
|
+
}
|
|
80
|
+
}
|
|
81
|
+
for (const item of before) {
|
|
82
|
+
if (!afterIds.has(item.id)) {
|
|
83
|
+
changes.push({ id: item.id, name: itemName(item), change: "removed", fields: [] });
|
|
84
|
+
}
|
|
85
|
+
}
|
|
86
|
+
return changes;
|
|
87
|
+
};
|
|
88
|
+
const diffPipelineConfig = (before, after) => {
|
|
89
|
+
if (before && (0, exports.canonicalJson)(before) === (0, exports.canonicalJson)(after))
|
|
90
|
+
return null;
|
|
91
|
+
const thresholdBefore = before ? (0, config_js_1.passCriteriaThreshold)(before.passCriteria) : null;
|
|
92
|
+
const thresholdAfter = (0, config_js_1.passCriteriaThreshold)(after.passCriteria);
|
|
93
|
+
const beforeIds = new Set(before?.passCriteria.requiredRequestIds ?? []);
|
|
94
|
+
const afterIds = new Set(after.passCriteria.requiredRequestIds);
|
|
95
|
+
return {
|
|
96
|
+
thresholdBefore,
|
|
97
|
+
thresholdAfter,
|
|
98
|
+
thresholdLowered: thresholdBefore !== null && thresholdAfter < thresholdBefore,
|
|
99
|
+
criticalAdded: [...afterIds].filter((id) => !beforeIds.has(id)),
|
|
100
|
+
criticalRemoved: [...beforeIds].filter((id) => !afterIds.has(id)),
|
|
101
|
+
minExecutedLowered: before !== null && after.passCriteria.minExecuted < before.passCriteria.minExecuted,
|
|
102
|
+
bailChanged: before !== null && before.bail !== after.bail,
|
|
103
|
+
folderRunsEnabled: after.allowFolderRuns && !(before?.allowFolderRuns ?? false),
|
|
104
|
+
};
|
|
105
|
+
};
|
|
106
|
+
/**
|
|
107
|
+
* Compare a proposed snapshot with the active one (`base` null = the first
|
|
108
|
+
* version, so everything is "added"). Items are matched by id.
|
|
109
|
+
*/
|
|
110
|
+
const diffCollectionSnapshots = (base, next) => {
|
|
111
|
+
const requests = diffItems(base?.requests ?? [], next.requests);
|
|
112
|
+
const folders = diffItems(base?.folders ?? [], next.folders);
|
|
113
|
+
const collectionFields = base
|
|
114
|
+
? changedKeys(comparableCollection(base.collection), comparableCollection(next.collection))
|
|
115
|
+
: [];
|
|
116
|
+
const pipelineConfig = diffPipelineConfig(base ? (0, config_js_1.normalizePipelineCollectionConfig)(base.collection.pipelineConfig) : null, (0, config_js_1.normalizePipelineCollectionConfig)(next.collection.pipelineConfig));
|
|
117
|
+
const scriptsChanged = requests.filter((item) => item.fields.some((field) => SCRIPT_KEYS.has(field))).length +
|
|
118
|
+
folders.filter((item) => item.fields.includes("scripts")).length +
|
|
119
|
+
(collectionFields.includes("scripts") ? 1 : 0);
|
|
120
|
+
return {
|
|
121
|
+
stats: {
|
|
122
|
+
requestsAdded: requests.filter((item) => item.change === "added").length,
|
|
123
|
+
requestsModified: requests.filter((item) => item.change === "modified").length,
|
|
124
|
+
requestsRemoved: requests.filter((item) => item.change === "removed").length,
|
|
125
|
+
foldersChanged: folders.length,
|
|
126
|
+
collectionSettingsChanged: collectionFields.length > 0,
|
|
127
|
+
scriptsChanged,
|
|
128
|
+
pipelineConfigChanged: base !== null && pipelineConfig !== null,
|
|
129
|
+
thresholdLowered: pipelineConfig?.thresholdLowered ?? false,
|
|
130
|
+
criticalRemoved: pipelineConfig?.criticalRemoved.length ?? 0,
|
|
131
|
+
},
|
|
132
|
+
requests,
|
|
133
|
+
folders,
|
|
134
|
+
collectionFields,
|
|
135
|
+
pipelineConfig,
|
|
136
|
+
};
|
|
137
|
+
};
|
|
138
|
+
exports.diffCollectionSnapshots = diffCollectionSnapshots;
|
|
139
|
+
/** Canonical text of a snapshot without bookkeeping — hash it to tell
|
|
140
|
+
* whether two snapshots hold the same content. */
|
|
141
|
+
const canonicalCollectionSnapshot = (snapshot) => (0, exports.canonicalJson)({
|
|
142
|
+
collection: {
|
|
143
|
+
...comparableCollection(snapshot.collection),
|
|
144
|
+
pipelineConfig: (0, config_js_1.normalizePipelineCollectionConfig)(snapshot.collection.pipelineConfig),
|
|
145
|
+
},
|
|
146
|
+
folders: [...snapshot.folders]
|
|
147
|
+
.map(comparableItem)
|
|
148
|
+
.sort((a, b) => String(a.id).localeCompare(String(b.id))),
|
|
149
|
+
requests: [...snapshot.requests]
|
|
150
|
+
.map(comparableItem)
|
|
151
|
+
.sort((a, b) => String(a.id).localeCompare(String(b.id))),
|
|
152
|
+
});
|
|
153
|
+
exports.canonicalCollectionSnapshot = canonicalCollectionSnapshot;
|
|
154
|
+
//# sourceMappingURL=snapshotDiff.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"snapshotDiff.js","sourceRoot":"","sources":["../../src/pipeline/snapshotDiff.ts"],"names":[],"mappings":"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"}
|