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.
Files changed (74) hide show
  1. package/dist/ai/prompts/diagram.d.ts.map +1 -1
  2. package/dist/ai/prompts/diagram.js +10 -5
  3. package/dist/ai/prompts/diagram.js.map +1 -1
  4. package/dist/diagram/geometry.d.ts +1 -0
  5. package/dist/diagram/geometry.d.ts.map +1 -1
  6. package/dist/diagram/geometry.js +15 -0
  7. package/dist/diagram/geometry.js.map +1 -1
  8. package/dist/diagram/ops.d.ts.map +1 -1
  9. package/dist/diagram/ops.js +25 -12
  10. package/dist/diagram/ops.js.map +1 -1
  11. package/dist/diagram/routing/batch.d.ts +2 -0
  12. package/dist/diagram/routing/batch.d.ts.map +1 -1
  13. package/dist/diagram/routing/batch.js +4 -4
  14. package/dist/diagram/routing/batch.js.map +1 -1
  15. package/dist/diagram/routing/index.d.ts +1 -0
  16. package/dist/diagram/routing/index.d.ts.map +1 -1
  17. package/dist/diagram/routing/index.js +1 -0
  18. package/dist/diagram/routing/index.js.map +1 -1
  19. package/dist/diagram/routing/ports.d.ts +14 -0
  20. package/dist/diagram/routing/ports.d.ts.map +1 -0
  21. package/dist/diagram/routing/ports.js +130 -0
  22. package/dist/diagram/routing/ports.js.map +1 -0
  23. package/dist/diagram/routing/sides.d.ts.map +1 -1
  24. package/dist/diagram/routing/sides.js +4 -3
  25. package/dist/diagram/routing/sides.js.map +1 -1
  26. package/dist/diagram/routing/types.d.ts +1 -0
  27. package/dist/diagram/routing/types.d.ts.map +1 -1
  28. package/dist/diagram/routing/types.js.map +1 -1
  29. package/dist/index.d.ts +1 -0
  30. package/dist/index.d.ts.map +1 -1
  31. package/dist/index.js +3 -0
  32. package/dist/index.js.map +1 -1
  33. package/dist/pipeline/config.d.ts +39 -0
  34. package/dist/pipeline/config.d.ts.map +1 -0
  35. package/dist/pipeline/config.js +71 -0
  36. package/dist/pipeline/config.js.map +1 -0
  37. package/dist/pipeline/index.d.ts +4 -0
  38. package/dist/pipeline/index.d.ts.map +1 -0
  39. package/dist/pipeline/index.js +4 -0
  40. package/dist/pipeline/index.js.map +1 -0
  41. package/dist/pipeline/passCriteria.d.ts +41 -0
  42. package/dist/pipeline/passCriteria.d.ts.map +1 -0
  43. package/dist/pipeline/passCriteria.js +67 -0
  44. package/dist/pipeline/passCriteria.js.map +1 -0
  45. package/dist/pipeline/snapshotDiff.d.ts +63 -0
  46. package/dist/pipeline/snapshotDiff.d.ts.map +1 -0
  47. package/dist/pipeline/snapshotDiff.js +148 -0
  48. package/dist/pipeline/snapshotDiff.js.map +1 -0
  49. package/dist-cjs/ai/prompts/diagram.js +10 -5
  50. package/dist-cjs/ai/prompts/diagram.js.map +1 -1
  51. package/dist-cjs/diagram/geometry.js +17 -1
  52. package/dist-cjs/diagram/geometry.js.map +1 -1
  53. package/dist-cjs/diagram/ops.js +25 -12
  54. package/dist-cjs/diagram/ops.js.map +1 -1
  55. package/dist-cjs/diagram/routing/batch.js +4 -4
  56. package/dist-cjs/diagram/routing/batch.js.map +1 -1
  57. package/dist-cjs/diagram/routing/index.js +1 -0
  58. package/dist-cjs/diagram/routing/index.js.map +1 -1
  59. package/dist-cjs/diagram/routing/ports.js +135 -0
  60. package/dist-cjs/diagram/routing/ports.js.map +1 -0
  61. package/dist-cjs/diagram/routing/sides.js +3 -2
  62. package/dist-cjs/diagram/routing/sides.js.map +1 -1
  63. package/dist-cjs/diagram/routing/types.js.map +1 -1
  64. package/dist-cjs/index.js +3 -0
  65. package/dist-cjs/index.js.map +1 -1
  66. package/dist-cjs/pipeline/config.js +78 -0
  67. package/dist-cjs/pipeline/config.js.map +1 -0
  68. package/dist-cjs/pipeline/index.js +20 -0
  69. package/dist-cjs/pipeline/index.js.map +1 -0
  70. package/dist-cjs/pipeline/passCriteria.js +71 -0
  71. package/dist-cjs/pipeline/passCriteria.js.map +1 -0
  72. package/dist-cjs/pipeline/snapshotDiff.js +154 -0
  73. package/dist-cjs/pipeline/snapshotDiff.js.map +1 -0
  74. package/package.json +1 -1
@@ -0,0 +1,130 @@
1
+ // Ports: where along a side each right-angle edge attaches. Edges sharing a
2
+ // side of a shape would otherwise all meet at its midpoint and leave as one
3
+ // trunk that splits a few pixels later. Here they spread evenly along the
4
+ // middle of the side, ordered by where their other end lies so they do not
5
+ // cross — the "port distribution" of draw.io and yEd. An end alone on its
6
+ // side lines up with its partner when the two sides face each other, so
7
+ // slightly offset shapes are joined by a straight line instead of a jog.
8
+ //
9
+ // Host-side and pure: the groups span EVERY edge on a side, so a host runs
10
+ // this over all its edges and hands each edge its sides and offsets to the
11
+ // router (Terminal.side / Terminal.offset, RouteEdge.sourceOffset /
12
+ // targetOffset). Only right-angle edges ("orthogonal", "smart") without
13
+ // manual bends or legacy pins take ports; the others attach as before.
14
+ import { oppositeSide, rectCenter } from "../geometry.js";
15
+ import { isLegacyPinnedEdge } from "./legacy.js";
16
+ import { chooseSides } from "./sides.js";
17
+ // Ports stay in the middle 60% of a side: a line meeting a rounded or
18
+ // slanted outline near its corner reads as detached from the shape.
19
+ const BAND_START = 0.2;
20
+ const BAND = 1 - BAND_START * 2;
21
+ export const takesPorts = (edge, defaultRouting) => {
22
+ if (!edge.source || !edge.target || edge.source === edge.target)
23
+ return false;
24
+ if ((edge.waypoints?.length ?? 0) > 0 || isLegacyPinnedEdge(edge))
25
+ return false;
26
+ const routing = edge.routing ?? defaultRouting ?? "orthogonal";
27
+ return routing === "orthogonal" || routing === "smart";
28
+ };
29
+ const alongX = (side) => side === "top" || side === "bottom";
30
+ // The side's extent along its own axis.
31
+ const span = (end) => alongX(end.side) ? [end.rect.x, end.rect.x + end.rect.width] : [end.rect.y, end.rect.y + end.rect.height];
32
+ const band = (end) => {
33
+ const [lo, hi] = span(end);
34
+ return [lo + (hi - lo) * BAND_START, hi - (hi - lo) * BAND_START];
35
+ };
36
+ const coordinate = (end) => {
37
+ const [lo, hi] = span(end);
38
+ return lo + (hi - lo) * end.offset;
39
+ };
40
+ const offsetAt = (end, value) => {
41
+ const [lo, hi] = span(end);
42
+ return hi > lo ? (value - lo) / (hi - lo) : 0.5;
43
+ };
44
+ // The two ends face each other across a gap: a straight line can join them.
45
+ const facing = (a, b) => {
46
+ if (oppositeSide(a.side) !== b.side)
47
+ return false;
48
+ switch (a.side) {
49
+ case "right":
50
+ return b.rect.x >= a.rect.x + a.rect.width;
51
+ case "left":
52
+ return b.rect.x + b.rect.width <= a.rect.x;
53
+ case "bottom":
54
+ return b.rect.y >= a.rect.y + a.rect.height;
55
+ case "top":
56
+ default:
57
+ return b.rect.y + b.rect.height <= a.rect.y;
58
+ }
59
+ };
60
+ export const assignPorts = (rects, edges, defaultRouting, previous) => {
61
+ const pairs = new Map();
62
+ const groups = new Map();
63
+ const join = (end) => {
64
+ const key = `${end.node}\u0000${end.side}`;
65
+ const group = groups.get(key);
66
+ if (group)
67
+ group.push(end);
68
+ else
69
+ groups.set(key, [end]);
70
+ };
71
+ for (const edge of edges) {
72
+ if (!takesPorts(edge, defaultRouting))
73
+ continue;
74
+ const source = rects.get(edge.source);
75
+ const target = rects.get(edge.target);
76
+ if (!source || !target)
77
+ continue;
78
+ const sides = chooseSides(source, target, { source: edge.sourceHandle, target: edge.targetHandle }, previous?.(edge.id));
79
+ const from = { edge: edge.id, node: edge.source, side: sides.source, rect: source, partner: target, offset: 0.5, shared: false };
80
+ const to = { edge: edge.id, node: edge.target, side: sides.target, rect: target, partner: source, offset: 0.5, shared: false };
81
+ pairs.set(edge.id, [from, to]);
82
+ join(from);
83
+ join(to);
84
+ }
85
+ // Shared sides: spread in the order of the partners along the side, so the
86
+ // lines leave side by side without crossing. Ties (several edges to the
87
+ // same shape) go by edge id — the same order at both ends, so parallel
88
+ // edges stay parallel.
89
+ for (const group of groups.values()) {
90
+ if (group.length < 2)
91
+ continue;
92
+ const along = (end) => (alongX(end.side) ? rectCenter(end.partner).x : rectCenter(end.partner).y);
93
+ group.sort((a, b) => along(a) - along(b) || (a.edge < b.edge ? -1 : a.edge > b.edge ? 1 : 0));
94
+ group.forEach((end, index) => {
95
+ end.offset = BAND_START + (BAND * (index + 0.5)) / group.length;
96
+ end.shared = true;
97
+ });
98
+ }
99
+ // A lone end lines up with its partner across facing sides: on the
100
+ // partner's port when that one is shared, else in the middle of the two
101
+ // sides' overlap.
102
+ for (const [from, to] of pairs.values()) {
103
+ if ((from.shared && to.shared) || !facing(from, to))
104
+ continue;
105
+ if (from.shared || to.shared) {
106
+ const fixed = from.shared ? from : to;
107
+ const lone = fixed === from ? to : from;
108
+ const value = coordinate(fixed);
109
+ const [lo, hi] = band(lone);
110
+ if (value >= lo && value <= hi)
111
+ lone.offset = offsetAt(lone, value);
112
+ continue;
113
+ }
114
+ const [lo1, hi1] = band(from);
115
+ const [lo2, hi2] = band(to);
116
+ const lo = Math.max(lo1, lo2);
117
+ const hi = Math.min(hi1, hi2);
118
+ if (hi < lo)
119
+ continue;
120
+ const value = (lo + hi) / 2;
121
+ from.offset = offsetAt(from, value);
122
+ to.offset = offsetAt(to, value);
123
+ }
124
+ const out = {};
125
+ for (const [id, [from, to]] of pairs) {
126
+ out[id] = { sourceSide: from.side, targetSide: to.side, sourceOffset: from.offset, targetOffset: to.offset };
127
+ }
128
+ return out;
129
+ };
130
+ //# 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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"}
@@ -1 +1 @@
1
- {"version":3,"file":"sides.d.ts","sourceRoot":"","sources":["../../../src/diagram/routing/sides.ts"],"names":[],"mappings":"AAKA,OAAO,EAA4B,KAAK,IAAI,EAAE,MAAM,gBAAgB,CAAC;AACrE,OAAO,KAAK,EAAE,KAAK,EAAE,MAAM,cAAc,CAAC;AAC1C,OAAO,KAAK,EAAE,IAAI,EAAE,QAAQ,EAAE,MAAM,YAAY,CAAC;AAEjD,MAAM,WAAW,KAAK;IACpB,MAAM,EAAE,IAAI,CAAC;IACb,MAAM,EAAE,IAAI,CAAC;CACd;AAaD,eAAO,MAAM,WAAW,GACtB,QAAQ,IAAI,EACZ,QAAQ,IAAI,EACZ,QAAO;IAAE,MAAM,CAAC,EAAE,IAAI,CAAC;IAAC,MAAM,CAAC,EAAE,IAAI,CAAA;CAAO,EAC5C,WAAW;IAAE,MAAM,CAAC,EAAE,IAAI,CAAC;IAAC,MAAM,CAAC,EAAE,IAAI,CAAA;CAAE,KAC1C,KAuBF,CAAC;AAEF,eAAO,MAAM,QAAQ,GAAI,QAAQ,QAAQ,EAAE,QAAQ,QAAQ,EAAE,WAAW;IAAE,MAAM,CAAC,EAAE,IAAI,CAAC;IAAC,MAAM,CAAC,EAAE,IAAI,CAAA;CAAE,KAAG,KACZ,CAAC;AAEhG,eAAO,MAAM,UAAU,GAAI,MAAM,IAAI,KAAG,KAYvC,CAAC;AAIF,eAAO,MAAM,WAAW,GAAI,UAAU,QAAQ,EAAE,MAAM,IAAI,KAAG,KAA4D,CAAC;AAI1H,eAAO,MAAM,cAAc,GAAI,MAAM,IAAI,EAAE,QAAQ,KAAK,KAAG,KAS1D,CAAC"}
1
+ {"version":3,"file":"sides.d.ts","sourceRoot":"","sources":["../../../src/diagram/routing/sides.ts"],"names":[],"mappings":"AAKA,OAAO,EAAyC,KAAK,IAAI,EAAE,MAAM,gBAAgB,CAAC;AAClF,OAAO,KAAK,EAAE,KAAK,EAAE,MAAM,cAAc,CAAC;AAC1C,OAAO,KAAK,EAAE,IAAI,EAAE,QAAQ,EAAE,MAAM,YAAY,CAAC;AAEjD,MAAM,WAAW,KAAK;IACpB,MAAM,EAAE,IAAI,CAAC;IACb,MAAM,EAAE,IAAI,CAAC;CACd;AAaD,eAAO,MAAM,WAAW,GACtB,QAAQ,IAAI,EACZ,QAAQ,IAAI,EACZ,QAAO;IAAE,MAAM,CAAC,EAAE,IAAI,CAAC;IAAC,MAAM,CAAC,EAAE,IAAI,CAAA;CAAO,EAC5C,WAAW;IAAE,MAAM,CAAC,EAAE,IAAI,CAAC;IAAC,MAAM,CAAC,EAAE,IAAI,CAAA;CAAE,KAC1C,KAuBF,CAAC;AAEF,eAAO,MAAM,QAAQ,GAAI,QAAQ,QAAQ,EAAE,QAAQ,QAAQ,EAAE,WAAW;IAAE,MAAM,CAAC,EAAE,IAAI,CAAC;IAAC,MAAM,CAAC,EAAE,IAAI,CAAA;CAAE,KAAG,KACZ,CAAC;AAEhG,eAAO,MAAM,UAAU,GAAI,MAAM,IAAI,KAAG,KAYvC,CAAC;AAKF,eAAO,MAAM,WAAW,GAAI,UAAU,QAAQ,EAAE,MAAM,IAAI,KAAG,KAC8E,CAAC;AAI5I,eAAO,MAAM,cAAc,GAAI,MAAM,IAAI,EAAE,QAAQ,KAAK,KAAG,KAS1D,CAAC"}
@@ -3,7 +3,7 @@
3
3
  // the rectangles overlap on both axes, the sides the centre vector points
4
4
  // through. A previous choice is kept while the gaps are nearly equal so a
5
5
  // node dragged along the diagonal does not flip its edges every frame.
6
- import { rectCenter, sideMidpoint } from "../geometry.js";
6
+ import { pointOnSide, rectCenter, sideMidpoint } from "../geometry.js";
7
7
  const HYSTERESIS = 24;
8
8
  const sideToward = (from, to) => {
9
9
  const center = rectCenter(from);
@@ -56,8 +56,9 @@ export const sideVector = (side) => {
56
56
  }
57
57
  };
58
58
  // The point on the boundary where a terminal attaches: the explicit point
59
- // when given (legacy anchors, free ends), else the side's midpoint.
60
- export const attachPoint = (terminal, side) => terminal.point ?? sideMidpoint(terminal.rect, side);
59
+ // when given (legacy anchors, free ends), else its port on the side (the
60
+ // midpoint unless an offset is given).
61
+ export const attachPoint = (terminal, side) => terminal.point ?? (terminal.offset === undefined ? sideMidpoint(terminal.rect, side) : pointOnSide(terminal.rect, side, terminal.offset));
61
62
  // Where the straight line from the rectangle's centre toward `toward` leaves
62
63
  // the rectangle — used by straight and curved edges so they meet the outline.
63
64
  export const boundaryToward = (rect, toward) => {
@@ -1 +1 @@
1
- {"version":3,"file":"sides.js","sourceRoot":"","sources":["../../../src/diagram/routing/sides.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"sides.js","sourceRoot":"","sources":["../../../src/diagram/routing/sides.ts"],"names":[],"mappings":"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"}
@@ -6,6 +6,7 @@ export interface Terminal {
6
6
  rect: Rect;
7
7
  side?: Side;
8
8
  point?: Point;
9
+ offset?: number;
9
10
  }
10
11
  export interface RoutedPath {
11
12
  points: Point[];
@@ -1 +1 @@
1
- {"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../../../src/diagram/routing/types.ts"],"names":[],"mappings":"AAGA,OAAO,KAAK,EAAE,IAAI,EAAE,MAAM,gBAAgB,CAAC;AAC3C,OAAO,KAAK,EAAE,cAAc,EAAE,UAAU,EAAE,KAAK,EAAE,MAAM,cAAc,CAAC;AAEtE,YAAY,EAAE,IAAI,EAAE,MAAM,gBAAgB,CAAC;AAC3C,MAAM,MAAM,IAAI,GAAG,UAAU,CAAC;AAI9B,MAAM,WAAW,QAAQ;IACvB,IAAI,EAAE,IAAI,CAAC;IACX,IAAI,CAAC,EAAE,IAAI,CAAC;IACZ,KAAK,CAAC,EAAE,KAAK,CAAC;CACf;AAED,MAAM,WAAW,UAAU;IAIzB,MAAM,EAAE,KAAK,EAAE,CAAC;IAChB,IAAI,EAAE,YAAY,GAAG,UAAU,GAAG,QAAQ,CAAC;IAC3C,UAAU,EAAE,IAAI,CAAC;IACjB,UAAU,EAAE,IAAI,CAAC;IACjB,MAAM,CAAC,EAAE,KAAK,CAAC,CAAC,KAAK,EAAE,KAAK,EAAE,KAAK,CAAC,CAAC,CAAC;IAEtC,GAAG,EAAE,YAAY,GAAG,OAAO,GAAG,gBAAgB,GAAG,UAAU,GAAG,QAAQ,GAAG,WAAW,GAAG,QAAQ,CAAC;CACjG;AAED,MAAM,WAAW,YAAY;IAE3B,MAAM,CAAC,EAAE,MAAM,CAAC;IAEhB,YAAY,CAAC,EAAE,MAAM,CAAC;IAEtB,WAAW,CAAC,EAAE,MAAM,CAAC;IAErB,UAAU,CAAC,EAAE,MAAM,CAAC;IAEpB,QAAQ,CAAC,EAAE,MAAM,CAAC;IAGlB,SAAS,CAAC,EAAE,MAAM,CAAC;IAGnB,kBAAkB,CAAC,EAAE,MAAM,CAAC;IAG5B,QAAQ,CAAC,EAAE;QAAE,MAAM,CAAC,EAAE,IAAI,CAAC;QAAC,MAAM,CAAC,EAAE,IAAI,CAAA;KAAE,CAAC;CAC7C;AAED,MAAM,WAAW,oBAAoB;IACnC,MAAM,EAAE,MAAM,CAAC;IACf,YAAY,EAAE,MAAM,CAAC;IACrB,WAAW,EAAE,MAAM,CAAC;IACpB,UAAU,EAAE,MAAM,CAAC;IACnB,QAAQ,EAAE,MAAM,CAAC;IACjB,SAAS,EAAE,MAAM,CAAC;IAClB,kBAAkB,EAAE,MAAM,CAAC;IAC3B,QAAQ,CAAC,EAAE;QAAE,MAAM,CAAC,EAAE,IAAI,CAAC;QAAC,MAAM,CAAC,EAAE,IAAI,CAAA;KAAE,CAAC;CAC7C;AAED,eAAO,MAAM,mBAAmB,GAAI,UAAS,YAAiB,KAAG,oBAS/D,CAAC;AAEH,YAAY,EAAE,cAAc,EAAE,KAAK,EAAE,CAAC"}
1
+ {"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../../../src/diagram/routing/types.ts"],"names":[],"mappings":"AAGA,OAAO,KAAK,EAAE,IAAI,EAAE,MAAM,gBAAgB,CAAC;AAC3C,OAAO,KAAK,EAAE,cAAc,EAAE,UAAU,EAAE,KAAK,EAAE,MAAM,cAAc,CAAC;AAEtE,YAAY,EAAE,IAAI,EAAE,MAAM,gBAAgB,CAAC;AAC3C,MAAM,MAAM,IAAI,GAAG,UAAU,CAAC;AAM9B,MAAM,WAAW,QAAQ;IACvB,IAAI,EAAE,IAAI,CAAC;IACX,IAAI,CAAC,EAAE,IAAI,CAAC;IACZ,KAAK,CAAC,EAAE,KAAK,CAAC;IACd,MAAM,CAAC,EAAE,MAAM,CAAC;CACjB;AAED,MAAM,WAAW,UAAU;IAIzB,MAAM,EAAE,KAAK,EAAE,CAAC;IAChB,IAAI,EAAE,YAAY,GAAG,UAAU,GAAG,QAAQ,CAAC;IAC3C,UAAU,EAAE,IAAI,CAAC;IACjB,UAAU,EAAE,IAAI,CAAC;IACjB,MAAM,CAAC,EAAE,KAAK,CAAC,CAAC,KAAK,EAAE,KAAK,EAAE,KAAK,CAAC,CAAC,CAAC;IAEtC,GAAG,EAAE,YAAY,GAAG,OAAO,GAAG,gBAAgB,GAAG,UAAU,GAAG,QAAQ,GAAG,WAAW,GAAG,QAAQ,CAAC;CACjG;AAED,MAAM,WAAW,YAAY;IAE3B,MAAM,CAAC,EAAE,MAAM,CAAC;IAEhB,YAAY,CAAC,EAAE,MAAM,CAAC;IAEtB,WAAW,CAAC,EAAE,MAAM,CAAC;IAErB,UAAU,CAAC,EAAE,MAAM,CAAC;IAEpB,QAAQ,CAAC,EAAE,MAAM,CAAC;IAGlB,SAAS,CAAC,EAAE,MAAM,CAAC;IAGnB,kBAAkB,CAAC,EAAE,MAAM,CAAC;IAG5B,QAAQ,CAAC,EAAE;QAAE,MAAM,CAAC,EAAE,IAAI,CAAC;QAAC,MAAM,CAAC,EAAE,IAAI,CAAA;KAAE,CAAC;CAC7C;AAED,MAAM,WAAW,oBAAoB;IACnC,MAAM,EAAE,MAAM,CAAC;IACf,YAAY,EAAE,MAAM,CAAC;IACrB,WAAW,EAAE,MAAM,CAAC;IACpB,UAAU,EAAE,MAAM,CAAC;IACnB,QAAQ,EAAE,MAAM,CAAC;IACjB,SAAS,EAAE,MAAM,CAAC;IAClB,kBAAkB,EAAE,MAAM,CAAC;IAC3B,QAAQ,CAAC,EAAE;QAAE,MAAM,CAAC,EAAE,IAAI,CAAC;QAAC,MAAM,CAAC,EAAE,IAAI,CAAA;KAAE,CAAC;CAC7C;AAED,eAAO,MAAM,mBAAmB,GAAI,UAAS,YAAiB,KAAG,oBAS/D,CAAC;AAEH,YAAY,EAAE,cAAc,EAAE,KAAK,EAAE,CAAC"}
@@ -1 +1 @@
1
- {"version":3,"file":"types.js","sourceRoot":"","sources":["../../../src/diagram/routing/types.ts"],"names":[],"mappings":"AA+DA,MAAM,CAAC,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"}
1
+ {"version":3,"file":"types.js","sourceRoot":"","sources":["../../../src/diagram/routing/types.ts"],"names":[],"mappings":"AAkEA,MAAM,CAAC,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"}
package/dist/index.d.ts CHANGED
@@ -47,5 +47,6 @@ export * from "./ui-test/flow-lint.js";
47
47
  export * from "./scenario-runner/index.js";
48
48
  export * from "./host/index.js";
49
49
  export * from "./loadtest/index.js";
50
+ export * from "./pipeline/index.js";
50
51
  export * from "./types/index.js";
51
52
  //# sourceMappingURL=index.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"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"}
package/dist/index.js CHANGED
@@ -51,5 +51,8 @@ export * from "./ui-test/flow-lint.js";
51
51
  export * from "./scenario-runner/index.js";
52
52
  export * from "./host/index.js";
53
53
  export * from "./loadtest/index.js";
54
+ // Pipeline pass criteria (threshold + critical requests) and the collection
55
+ // snapshot diff — shared by the backend, `callme`, the MCP server and the desktop.
56
+ export * from "./pipeline/index.js";
54
57
  export * from "./types/index.js";
55
58
  //# sourceMappingURL=index.js.map
package/dist/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,39 @@
1
+ export type PipelinePassMode = "all" | "percentage";
2
+ export interface PipelinePassCriteria {
3
+ /** "all": every executed request must pass. "percentage": at least
4
+ * `minPassPercent` of them must. */
5
+ mode: PipelinePassMode;
6
+ /** 1..100; only read in "percentage" mode. */
7
+ minPassPercent: number;
8
+ /** Critical requests: they must pass whatever the percentage. */
9
+ requiredRequestIds: string[];
10
+ /** Fewer executed requests than this fails the run (`--min-requests`). */
11
+ minExecuted: number;
12
+ }
13
+ export interface PipelineCollectionConfig {
14
+ passCriteria: PipelinePassCriteria;
15
+ /** Stop at the first failed request. Always false in "percentage" mode —
16
+ * a threshold needs the whole run. */
17
+ bail: boolean;
18
+ /** May CI run a single folder (`--folder-id`) of this collection. */
19
+ allowFolderRuns: boolean;
20
+ }
21
+ export declare const DEFAULT_PIPELINE_PASS_CRITERIA: PipelinePassCriteria;
22
+ export declare const DEFAULT_PIPELINE_COLLECTION_CONFIG: PipelineCollectionConfig;
23
+ /** Stored config carries at most this many critical requests. */
24
+ export declare const MAX_PIPELINE_REQUIRED_REQUESTS = 200;
25
+ /** The percentage a criteria demands: 100 in "all" mode. */
26
+ export declare const passCriteriaThreshold: (criteria: PipelinePassCriteria) => number;
27
+ /**
28
+ * Tolerant reader for stored / bundled / user-supplied criteria: unknown keys
29
+ * are dropped, bad values fall back to the defaults, numbers are clamped and
30
+ * duplicate ids removed. Never throws.
31
+ */
32
+ export declare const normalizePipelinePassCriteria: (value: unknown) => PipelinePassCriteria;
33
+ export declare const normalizePipelineCollectionConfig: (value: unknown) => PipelineCollectionConfig;
34
+ /**
35
+ * Raise a criteria to an admin-set minimum percentage (on-prem policy). A
36
+ * floor of 0/absent changes nothing; "all" mode is already the strictest.
37
+ */
38
+ export declare const applyPassPercentFloor: (criteria: PipelinePassCriteria, floor: number | null | undefined) => PipelinePassCriteria;
39
+ //# sourceMappingURL=config.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"config.d.ts","sourceRoot":"","sources":["../../src/pipeline/config.ts"],"names":[],"mappings":"AAOA,MAAM,MAAM,gBAAgB,GAAG,KAAK,GAAG,YAAY,CAAC;AAEpD,MAAM,WAAW,oBAAoB;IACnC;wCACoC;IACpC,IAAI,EAAE,gBAAgB,CAAC;IACvB,8CAA8C;IAC9C,cAAc,EAAE,MAAM,CAAC;IACvB,iEAAiE;IACjE,kBAAkB,EAAE,MAAM,EAAE,CAAC;IAC7B,0EAA0E;IAC1E,WAAW,EAAE,MAAM,CAAC;CACrB;AAED,MAAM,WAAW,wBAAwB;IACvC,YAAY,EAAE,oBAAoB,CAAC;IACnC;0CACsC;IACtC,IAAI,EAAE,OAAO,CAAC;IACd,qEAAqE;IACrE,eAAe,EAAE,OAAO,CAAC;CAC1B;AAED,eAAO,MAAM,8BAA8B,EAAE,oBAKnB,CAAC;AAE3B,eAAO,MAAM,kCAAkC,EAAE,wBAInB,CAAC;AAE/B,iEAAiE;AACjE,eAAO,MAAM,8BAA8B,MAAM,CAAC;AAWlD,4DAA4D;AAC5D,eAAO,MAAM,qBAAqB,GAAI,UAAU,oBAAoB,KAAG,MACP,CAAC;AAEjE;;;;GAIG;AACH,eAAO,MAAM,6BAA6B,GAAI,OAAO,OAAO,KAAG,oBAkB9D,CAAC;AAEF,eAAO,MAAM,iCAAiC,GAAI,OAAO,OAAO,KAAG,wBAQlE,CAAC;AAEF;;;GAGG;AACH,eAAO,MAAM,qBAAqB,GAChC,UAAU,oBAAoB,EAC9B,OAAO,MAAM,GAAG,IAAI,GAAG,SAAS,KAC/B,oBAIF,CAAC"}
@@ -0,0 +1,71 @@
1
+ // Pipeline pass criteria — when a CI collection run counts as passed.
2
+ //
3
+ // On-prem "pipeline" collections store this on the server (it is reviewed and
4
+ // versioned with the collection); everywhere else `callme run` builds it from
5
+ // `--pass-threshold` / `--critical-request`. Absent config = today's rule:
6
+ // every executed request must pass.
7
+ export const DEFAULT_PIPELINE_PASS_CRITERIA = Object.freeze({
8
+ mode: "all",
9
+ minPassPercent: 100,
10
+ requiredRequestIds: [],
11
+ minExecuted: 1,
12
+ });
13
+ export const DEFAULT_PIPELINE_COLLECTION_CONFIG = Object.freeze({
14
+ passCriteria: DEFAULT_PIPELINE_PASS_CRITERIA,
15
+ bail: false,
16
+ allowFolderRuns: false,
17
+ });
18
+ /** Stored config carries at most this many critical requests. */
19
+ export const MAX_PIPELINE_REQUIRED_REQUESTS = 200;
20
+ const isRecord = (value) => typeof value === "object" && value !== null && !Array.isArray(value);
21
+ const clampInt = (value, min, max, fallback) => {
22
+ const parsed = typeof value === "string" ? Number(value) : value;
23
+ if (typeof parsed !== "number" || !Number.isFinite(parsed))
24
+ return fallback;
25
+ return Math.min(max, Math.max(min, Math.floor(parsed)));
26
+ };
27
+ /** The percentage a criteria demands: 100 in "all" mode. */
28
+ export const passCriteriaThreshold = (criteria) => criteria.mode === "percentage" ? criteria.minPassPercent : 100;
29
+ /**
30
+ * Tolerant reader for stored / bundled / user-supplied criteria: unknown keys
31
+ * are dropped, bad values fall back to the defaults, numbers are clamped and
32
+ * duplicate ids removed. Never throws.
33
+ */
34
+ export const normalizePipelinePassCriteria = (value) => {
35
+ if (!isRecord(value))
36
+ return { ...DEFAULT_PIPELINE_PASS_CRITERIA, requiredRequestIds: [] };
37
+ const mode = value.mode === "percentage" ? "percentage" : "all";
38
+ const ids = Array.isArray(value.requiredRequestIds) ? value.requiredRequestIds : [];
39
+ const requiredRequestIds = [
40
+ ...new Set(ids
41
+ .filter((id) => typeof id === "string")
42
+ .map((id) => id.trim())
43
+ .filter(Boolean)),
44
+ ].slice(0, MAX_PIPELINE_REQUIRED_REQUESTS);
45
+ return {
46
+ mode,
47
+ minPassPercent: mode === "percentage" ? clampInt(value.minPassPercent, 1, 100, 100) : 100,
48
+ requiredRequestIds,
49
+ minExecuted: clampInt(value.minExecuted, 1, 100_000, 1),
50
+ };
51
+ };
52
+ export const normalizePipelineCollectionConfig = (value) => {
53
+ const source = isRecord(value) ? value : {};
54
+ const passCriteria = normalizePipelinePassCriteria(source.passCriteria);
55
+ return {
56
+ passCriteria,
57
+ bail: passCriteria.mode === "percentage" ? false : source.bail === true,
58
+ allowFolderRuns: source.allowFolderRuns === true,
59
+ };
60
+ };
61
+ /**
62
+ * Raise a criteria to an admin-set minimum percentage (on-prem policy). A
63
+ * floor of 0/absent changes nothing; "all" mode is already the strictest.
64
+ */
65
+ export const applyPassPercentFloor = (criteria, floor) => {
66
+ const min = clampInt(floor, 0, 100, 0);
67
+ if (criteria.mode !== "percentage" || criteria.minPassPercent >= min)
68
+ return criteria;
69
+ return { ...criteria, minPassPercent: min };
70
+ };
71
+ //# 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,4 @@
1
+ export * from "./config.js";
2
+ export * from "./passCriteria.js";
3
+ export * from "./snapshotDiff.js";
4
+ //# sourceMappingURL=index.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/pipeline/index.ts"],"names":[],"mappings":"AAAA,cAAc,aAAa,CAAC;AAC5B,cAAc,mBAAmB,CAAC;AAClC,cAAc,mBAAmB,CAAC"}
@@ -0,0 +1,4 @@
1
+ export * from "./config.js";
2
+ export * from "./passCriteria.js";
3
+ export * from "./snapshotDiff.js";
4
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/pipeline/index.ts"],"names":[],"mappings":"AAAA,cAAc,aAAa,CAAC;AAC5B,cAAc,mBAAmB,CAAC;AAClC,cAAc,mBAAmB,CAAC"}
@@ -0,0 +1,41 @@
1
+ import { type PipelinePassCriteria } from "./config.js";
2
+ /** One executed (or skipped) request of a run, as the host judged it. A
3
+ * request that ran several times (data rows, `setNextRequest` loops) may
4
+ * appear more than once — it passes only when every execution passed. */
5
+ export interface PassCriteriaOutcome {
6
+ requestId: string;
7
+ passed: boolean;
8
+ /** Skipped by a script or disabled in the runner: counts as neither. */
9
+ skipped?: boolean;
10
+ }
11
+ export type PassVerdictReason = "all_passed" | "threshold_met" | "below_threshold" | "required_failed" | "below_min_executed";
12
+ export interface PassVerdict {
13
+ passed: boolean;
14
+ reason: PassVerdictReason;
15
+ mode: PipelinePassCriteria["mode"];
16
+ /** Percentage the run had to reach (100 in "all" mode). */
17
+ threshold: number;
18
+ executed: number;
19
+ passedCount: number;
20
+ failedCount: number;
21
+ /** passed / executed in percent, one decimal; null when nothing ran. */
22
+ passRate: number | null;
23
+ /** Critical requests that ran and failed. */
24
+ requiredFailed: string[];
25
+ /** Critical requests in scope that did not run (deleted, skipped). */
26
+ requiredMissing: string[];
27
+ }
28
+ export interface EvaluatePassCriteriaOptions {
29
+ /** Ids of every request the run covered (a folder run covers a subset).
30
+ * Critical requests outside it are ignored; without it every critical
31
+ * request is expected to run. */
32
+ scopeRequestIds?: readonly string[];
33
+ }
34
+ /**
35
+ * Decide a run's verdict from per-request outcomes. The comparison is exact
36
+ * (`passed * 100 >= threshold * executed`), so 79.9% does not reach 80%.
37
+ * Order of failure reasons: too few requests, a critical request, the
38
+ * percentage.
39
+ */
40
+ export declare const evaluatePassCriteria: (outcomes: readonly PassCriteriaOutcome[], criteria: PipelinePassCriteria, options?: EvaluatePassCriteriaOptions) => PassVerdict;
41
+ //# sourceMappingURL=passCriteria.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"passCriteria.d.ts","sourceRoot":"","sources":["../../src/pipeline/passCriteria.ts"],"names":[],"mappings":"AAAA,OAAO,EAAyB,KAAK,oBAAoB,EAAE,MAAM,aAAa,CAAC;AAE/E;;yEAEyE;AACzE,MAAM,WAAW,mBAAmB;IAClC,SAAS,EAAE,MAAM,CAAC;IAClB,MAAM,EAAE,OAAO,CAAC;IAChB,wEAAwE;IACxE,OAAO,CAAC,EAAE,OAAO,CAAC;CACnB;AAED,MAAM,MAAM,iBAAiB,GACzB,YAAY,GACZ,eAAe,GACf,iBAAiB,GACjB,iBAAiB,GACjB,oBAAoB,CAAC;AAEzB,MAAM,WAAW,WAAW;IAC1B,MAAM,EAAE,OAAO,CAAC;IAChB,MAAM,EAAE,iBAAiB,CAAC;IAC1B,IAAI,EAAE,oBAAoB,CAAC,MAAM,CAAC,CAAC;IACnC,2DAA2D;IAC3D,SAAS,EAAE,MAAM,CAAC;IAClB,QAAQ,EAAE,MAAM,CAAC;IACjB,WAAW,EAAE,MAAM,CAAC;IACpB,WAAW,EAAE,MAAM,CAAC;IACpB,wEAAwE;IACxE,QAAQ,EAAE,MAAM,GAAG,IAAI,CAAC;IACxB,6CAA6C;IAC7C,cAAc,EAAE,MAAM,EAAE,CAAC;IACzB,sEAAsE;IACtE,eAAe,EAAE,MAAM,EAAE,CAAC;CAC3B;AAED,MAAM,WAAW,2BAA2B;IAC1C;;qCAEiC;IACjC,eAAe,CAAC,EAAE,SAAS,MAAM,EAAE,CAAC;CACrC;AAED;;;;;GAKG;AACH,eAAO,MAAM,oBAAoB,GAC/B,UAAU,SAAS,mBAAmB,EAAE,EACxC,UAAU,oBAAoB,EAC9B,UAAS,2BAAgC,KACxC,WAwDF,CAAC"}
@@ -0,0 +1,67 @@
1
+ import { passCriteriaThreshold } from "./config.js";
2
+ /**
3
+ * Decide a run's verdict from per-request outcomes. The comparison is exact
4
+ * (`passed * 100 >= threshold * executed`), so 79.9% does not reach 80%.
5
+ * Order of failure reasons: too few requests, a critical request, the
6
+ * percentage.
7
+ */
8
+ export const evaluatePassCriteria = (outcomes, criteria, options = {}) => {
9
+ const byRequest = new Map();
10
+ for (const outcome of outcomes) {
11
+ const skipped = outcome.skipped === true;
12
+ const current = byRequest.get(outcome.requestId);
13
+ if (!current) {
14
+ byRequest.set(outcome.requestId, { passed: skipped || outcome.passed, skipped });
15
+ continue;
16
+ }
17
+ if (skipped)
18
+ continue;
19
+ current.passed = (current.skipped || current.passed) && outcome.passed;
20
+ current.skipped = false;
21
+ }
22
+ let executed = 0;
23
+ let passedCount = 0;
24
+ for (const entry of byRequest.values()) {
25
+ if (entry.skipped)
26
+ continue;
27
+ executed += 1;
28
+ if (entry.passed)
29
+ passedCount += 1;
30
+ }
31
+ const failedCount = executed - passedCount;
32
+ const scope = options.scopeRequestIds ? new Set(options.scopeRequestIds) : null;
33
+ const requiredFailed = [];
34
+ const requiredMissing = [];
35
+ for (const id of criteria.requiredRequestIds) {
36
+ if (scope && !scope.has(id))
37
+ continue;
38
+ const entry = byRequest.get(id);
39
+ if (!entry || entry.skipped)
40
+ requiredMissing.push(id);
41
+ else if (!entry.passed)
42
+ requiredFailed.push(id);
43
+ }
44
+ const threshold = passCriteriaThreshold(criteria);
45
+ const passRate = executed === 0 ? null : Math.round((passedCount / executed) * 1000) / 10;
46
+ const base = {
47
+ mode: criteria.mode,
48
+ threshold,
49
+ executed,
50
+ passedCount,
51
+ failedCount,
52
+ passRate,
53
+ requiredFailed,
54
+ requiredMissing,
55
+ };
56
+ if (executed < Math.max(1, criteria.minExecuted)) {
57
+ return { ...base, passed: false, reason: "below_min_executed" };
58
+ }
59
+ if (requiredFailed.length > 0 || requiredMissing.length > 0) {
60
+ return { ...base, passed: false, reason: "required_failed" };
61
+ }
62
+ if (passedCount * 100 < threshold * executed) {
63
+ return { ...base, passed: false, reason: "below_threshold" };
64
+ }
65
+ return { ...base, passed: true, reason: failedCount === 0 ? "all_passed" : "threshold_met" };
66
+ };
67
+ //# sourceMappingURL=passCriteria.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"passCriteria.js","sourceRoot":"","sources":["../../src/pipeline/passCriteria.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,qBAAqB,EAA6B,MAAM,aAAa,CAAC;AA2C/E;;;;;GAKG;AACH,MAAM,CAAC,MAAM,oBAAoB,GAAG,CAClC,QAAwC,EACxC,QAA8B,EAC9B,UAAuC,EAAE,EAC5B,EAAE;IACf,MAAM,SAAS,GAAG,IAAI,GAAG,EAAiD,CAAC;IAC3E,KAAK,MAAM,OAAO,IAAI,QAAQ,EAAE,CAAC;QAC/B,MAAM,OAAO,GAAG,OAAO,CAAC,OAAO,KAAK,IAAI,CAAC;QACzC,MAAM,OAAO,GAAG,SAAS,CAAC,GAAG,CAAC,OAAO,CAAC,SAAS,CAAC,CAAC;QACjD,IAAI,CAAC,OAAO,EAAE,CAAC;YACb,SAAS,CAAC,GAAG,CAAC,OAAO,CAAC,SAAS,EAAE,EAAE,MAAM,EAAE,OAAO,IAAI,OAAO,CAAC,MAAM,EAAE,OAAO,EAAE,CAAC,CAAC;YACjF,SAAS;QACX,CAAC;QACD,IAAI,OAAO;YAAE,SAAS;QACtB,OAAO,CAAC,MAAM,GAAG,CAAC,OAAO,CAAC,OAAO,IAAI,OAAO,CAAC,MAAM,CAAC,IAAI,OAAO,CAAC,MAAM,CAAC;QACvE,OAAO,CAAC,OAAO,GAAG,KAAK,CAAC;IAC1B,CAAC;IAED,IAAI,QAAQ,GAAG,CAAC,CAAC;IACjB,IAAI,WAAW,GAAG,CAAC,CAAC;IACpB,KAAK,MAAM,KAAK,IAAI,SAAS,CAAC,MAAM,EAAE,EAAE,CAAC;QACvC,IAAI,KAAK,CAAC,OAAO;YAAE,SAAS;QAC5B,QAAQ,IAAI,CAAC,CAAC;QACd,IAAI,KAAK,CAAC,MAAM;YAAE,WAAW,IAAI,CAAC,CAAC;IACrC,CAAC;IACD,MAAM,WAAW,GAAG,QAAQ,GAAG,WAAW,CAAC;IAE3C,MAAM,KAAK,GAAG,OAAO,CAAC,eAAe,CAAC,CAAC,CAAC,IAAI,GAAG,CAAC,OAAO,CAAC,eAAe,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC;IAChF,MAAM,cAAc,GAAa,EAAE,CAAC;IACpC,MAAM,eAAe,GAAa,EAAE,CAAC;IACrC,KAAK,MAAM,EAAE,IAAI,QAAQ,CAAC,kBAAkB,EAAE,CAAC;QAC7C,IAAI,KAAK,IAAI,CAAC,KAAK,CAAC,GAAG,CAAC,EAAE,CAAC;YAAE,SAAS;QACtC,MAAM,KAAK,GAAG,SAAS,CAAC,GAAG,CAAC,EAAE,CAAC,CAAC;QAChC,IAAI,CAAC,KAAK,IAAI,KAAK,CAAC,OAAO;YAAE,eAAe,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC;aACjD,IAAI,CAAC,KAAK,CAAC,MAAM;YAAE,cAAc,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC;IAClD,CAAC;IAED,MAAM,SAAS,GAAG,qBAAqB,CAAC,QAAQ,CAAC,CAAC;IAClD,MAAM,QAAQ,GAAG,QAAQ,KAAK,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC,WAAW,GAAG,QAAQ,CAAC,GAAG,IAAI,CAAC,GAAG,EAAE,CAAC;IAC1F,MAAM,IAAI,GAAG;QACX,IAAI,EAAE,QAAQ,CAAC,IAAI;QACnB,SAAS;QACT,QAAQ;QACR,WAAW;QACX,WAAW;QACX,QAAQ;QACR,cAAc;QACd,eAAe;KAChB,CAAC;IAEF,IAAI,QAAQ,GAAG,IAAI,CAAC,GAAG,CAAC,CAAC,EAAE,QAAQ,CAAC,WAAW,CAAC,EAAE,CAAC;QACjD,OAAO,EAAE,GAAG,IAAI,EAAE,MAAM,EAAE,KAAK,EAAE,MAAM,EAAE,oBAAoB,EAAE,CAAC;IAClE,CAAC;IACD,IAAI,cAAc,CAAC,MAAM,GAAG,CAAC,IAAI,eAAe,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;QAC5D,OAAO,EAAE,GAAG,IAAI,EAAE,MAAM,EAAE,KAAK,EAAE,MAAM,EAAE,iBAAiB,EAAE,CAAC;IAC/D,CAAC;IACD,IAAI,WAAW,GAAG,GAAG,GAAG,SAAS,GAAG,QAAQ,EAAE,CAAC;QAC7C,OAAO,EAAE,GAAG,IAAI,EAAE,MAAM,EAAE,KAAK,EAAE,MAAM,EAAE,iBAAiB,EAAE,CAAC;IAC/D,CAAC;IACD,OAAO,EAAE,GAAG,IAAI,EAAE,MAAM,EAAE,IAAI,EAAE,MAAM,EAAE,WAAW,KAAK,CAAC,CAAC,CAAC,CAAC,YAAY,CAAC,CAAC,CAAC,eAAe,EAAE,CAAC;AAC/F,CAAC,CAAC"}
@@ -0,0 +1,63 @@
1
+ type JsonRecord = Record<string, unknown>;
2
+ export interface CollectionSnapshotLike {
3
+ collection: JsonRecord & {
4
+ pipelineConfig?: unknown;
5
+ };
6
+ folders: Array<JsonRecord & {
7
+ id: string;
8
+ }>;
9
+ requests: Array<JsonRecord & {
10
+ id: string;
11
+ }>;
12
+ }
13
+ export type SnapshotChange = "added" | "modified" | "removed";
14
+ export interface SnapshotItemChange {
15
+ id: string;
16
+ name: string;
17
+ change: SnapshotChange;
18
+ /** Top-level keys that differ ("url", "headers", "testsScript", …). Empty
19
+ * for added/removed items. */
20
+ fields: string[];
21
+ }
22
+ export interface PipelineConfigChange {
23
+ thresholdBefore: number | null;
24
+ thresholdAfter: number;
25
+ thresholdLowered: boolean;
26
+ criticalAdded: string[];
27
+ criticalRemoved: string[];
28
+ minExecutedLowered: boolean;
29
+ bailChanged: boolean;
30
+ folderRunsEnabled: boolean;
31
+ }
32
+ export interface CollectionSnapshotDiffStats {
33
+ requestsAdded: number;
34
+ requestsModified: number;
35
+ requestsRemoved: number;
36
+ foldersChanged: number;
37
+ collectionSettingsChanged: boolean;
38
+ scriptsChanged: number;
39
+ pipelineConfigChanged: boolean;
40
+ thresholdLowered: boolean;
41
+ criticalRemoved: number;
42
+ }
43
+ export interface CollectionSnapshotDiff {
44
+ stats: CollectionSnapshotDiffStats;
45
+ requests: SnapshotItemChange[];
46
+ folders: SnapshotItemChange[];
47
+ /** Collection-level keys that differ ("variables", "auth", "scripts", …;
48
+ * "pipelineConfig" is reported separately). */
49
+ collectionFields: string[];
50
+ pipelineConfig: PipelineConfigChange | null;
51
+ }
52
+ /** Deterministic JSON: object keys sorted at every depth. */
53
+ export declare const canonicalJson: (value: unknown) => string;
54
+ /**
55
+ * Compare a proposed snapshot with the active one (`base` null = the first
56
+ * version, so everything is "added"). Items are matched by id.
57
+ */
58
+ export declare const diffCollectionSnapshots: (base: CollectionSnapshotLike | null, next: CollectionSnapshotLike) => CollectionSnapshotDiff;
59
+ /** Canonical text of a snapshot without bookkeeping — hash it to tell
60
+ * whether two snapshots hold the same content. */
61
+ export declare const canonicalCollectionSnapshot: (snapshot: CollectionSnapshotLike) => string;
62
+ export {};
63
+ //# sourceMappingURL=snapshotDiff.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"snapshotDiff.d.ts","sourceRoot":"","sources":["../../src/pipeline/snapshotDiff.ts"],"names":[],"mappings":"AAWA,KAAK,UAAU,GAAG,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;AAE1C,MAAM,WAAW,sBAAsB;IACrC,UAAU,EAAE,UAAU,GAAG;QAAE,cAAc,CAAC,EAAE,OAAO,CAAA;KAAE,CAAC;IACtD,OAAO,EAAE,KAAK,CAAC,UAAU,GAAG;QAAE,EAAE,EAAE,MAAM,CAAA;KAAE,CAAC,CAAC;IAC5C,QAAQ,EAAE,KAAK,CAAC,UAAU,GAAG;QAAE,EAAE,EAAE,MAAM,CAAA;KAAE,CAAC,CAAC;CAC9C;AAED,MAAM,MAAM,cAAc,GAAG,OAAO,GAAG,UAAU,GAAG,SAAS,CAAC;AAE9D,MAAM,WAAW,kBAAkB;IACjC,EAAE,EAAE,MAAM,CAAC;IACX,IAAI,EAAE,MAAM,CAAC;IACb,MAAM,EAAE,cAAc,CAAC;IACvB;kCAC8B;IAC9B,MAAM,EAAE,MAAM,EAAE,CAAC;CAClB;AAED,MAAM,WAAW,oBAAoB;IACnC,eAAe,EAAE,MAAM,GAAG,IAAI,CAAC;IAC/B,cAAc,EAAE,MAAM,CAAC;IACvB,gBAAgB,EAAE,OAAO,CAAC;IAC1B,aAAa,EAAE,MAAM,EAAE,CAAC;IACxB,eAAe,EAAE,MAAM,EAAE,CAAC;IAC1B,kBAAkB,EAAE,OAAO,CAAC;IAC5B,WAAW,EAAE,OAAO,CAAC;IACrB,iBAAiB,EAAE,OAAO,CAAC;CAC5B;AAED,MAAM,WAAW,2BAA2B;IAC1C,aAAa,EAAE,MAAM,CAAC;IACtB,gBAAgB,EAAE,MAAM,CAAC;IACzB,eAAe,EAAE,MAAM,CAAC;IACxB,cAAc,EAAE,MAAM,CAAC;IACvB,yBAAyB,EAAE,OAAO,CAAC;IACnC,cAAc,EAAE,MAAM,CAAC;IACvB,qBAAqB,EAAE,OAAO,CAAC;IAC/B,gBAAgB,EAAE,OAAO,CAAC;IAC1B,eAAe,EAAE,MAAM,CAAC;CACzB;AAED,MAAM,WAAW,sBAAsB;IACrC,KAAK,EAAE,2BAA2B,CAAC;IACnC,QAAQ,EAAE,kBAAkB,EAAE,CAAC;IAC/B,OAAO,EAAE,kBAAkB,EAAE,CAAC;IAC9B;mDAC+C;IAC/C,gBAAgB,EAAE,MAAM,EAAE,CAAC;IAC3B,cAAc,EAAE,oBAAoB,GAAG,IAAI,CAAC;CAC7C;AAmBD,6DAA6D;AAC7D,eAAO,MAAM,aAAa,GAAI,OAAO,OAAO,KAAG,MAU9C,CAAC;AAiFF;;;GAGG;AACH,eAAO,MAAM,uBAAuB,GAClC,MAAM,sBAAsB,GAAG,IAAI,EACnC,MAAM,sBAAsB,KAC3B,sBAiCF,CAAC;AAEF;kDACkD;AAClD,eAAO,MAAM,2BAA2B,GAAI,UAAU,sBAAsB,KAAG,MAY3E,CAAC"}