callman-core 1.42.0 → 1.43.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/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"}
@@ -0,0 +1,148 @@
1
+ // What changed between two versions of a collection — the snapshot a pipeline
2
+ // collection is reviewed and published as (the backend's internal export plus
3
+ // `pipelineConfig`). The backend stores the counts with each review request;
4
+ // the desktop review screen uses the per-item lists for its change markers.
5
+ import { normalizePipelineCollectionConfig, passCriteriaThreshold, } from "./config.js";
6
+ // Bookkeeping that changes without the content changing. Stripped only at
7
+ // the item's top level — a request body may legitimately hold "createdAt".
8
+ const VOLATILE_ITEM_KEYS = new Set(["createdAt", "updatedAt", "collectionId"]);
9
+ const VOLATILE_COLLECTION_KEYS = new Set([
10
+ "id",
11
+ "createdAt",
12
+ "updatedAt",
13
+ "ownerId",
14
+ "members",
15
+ "docs",
16
+ "pipelineConfig",
17
+ ]);
18
+ const SCRIPT_KEYS = new Set(["preRequestScript", "postResponseScript", "testsScript", "scripts"]);
19
+ const isRecord = (value) => typeof value === "object" && value !== null && !Array.isArray(value);
20
+ /** Deterministic JSON: object keys sorted at every depth. */
21
+ export const canonicalJson = (value) => {
22
+ if (value instanceof Date)
23
+ return JSON.stringify(value.toISOString());
24
+ if (Array.isArray(value))
25
+ return `[${value.map(canonicalJson).join(",")}]`;
26
+ if (isRecord(value)) {
27
+ const keys = Object.keys(value)
28
+ .filter((key) => value[key] !== undefined)
29
+ .sort();
30
+ return `{${keys.map((key) => `${JSON.stringify(key)}:${canonicalJson(value[key])}`).join(",")}}`;
31
+ }
32
+ return JSON.stringify(value ?? null);
33
+ };
34
+ const comparableItem = (item) => {
35
+ const out = {};
36
+ for (const [key, value] of Object.entries(item)) {
37
+ if (VOLATILE_ITEM_KEYS.has(key))
38
+ continue;
39
+ // Contract rules carry their own timestamps.
40
+ out[key] =
41
+ key === "contractRules" && Array.isArray(value)
42
+ ? value.map((rule) => (isRecord(rule) ? comparableItem(rule) : rule))
43
+ : value;
44
+ }
45
+ return out;
46
+ };
47
+ const comparableCollection = (collection) => {
48
+ const out = {};
49
+ for (const [key, value] of Object.entries(collection)) {
50
+ if (!VOLATILE_COLLECTION_KEYS.has(key))
51
+ out[key] = value;
52
+ }
53
+ return out;
54
+ };
55
+ const changedKeys = (before, after) => {
56
+ const keys = new Set([...Object.keys(before), ...Object.keys(after)]);
57
+ return [...keys]
58
+ .filter((key) => canonicalJson(before[key]) !== canonicalJson(after[key]))
59
+ .sort();
60
+ };
61
+ const itemName = (item) => typeof item.name === "string" ? item.name : String(item.id ?? "");
62
+ const diffItems = (before, after) => {
63
+ const beforeById = new Map(before.map((item) => [item.id, item]));
64
+ const afterIds = new Set(after.map((item) => item.id));
65
+ const changes = [];
66
+ for (const item of after) {
67
+ const previous = beforeById.get(item.id);
68
+ if (!previous) {
69
+ changes.push({ id: item.id, name: itemName(item), change: "added", fields: [] });
70
+ continue;
71
+ }
72
+ const fields = changedKeys(comparableItem(previous), comparableItem(item));
73
+ if (fields.length > 0) {
74
+ changes.push({ id: item.id, name: itemName(item), change: "modified", fields });
75
+ }
76
+ }
77
+ for (const item of before) {
78
+ if (!afterIds.has(item.id)) {
79
+ changes.push({ id: item.id, name: itemName(item), change: "removed", fields: [] });
80
+ }
81
+ }
82
+ return changes;
83
+ };
84
+ const diffPipelineConfig = (before, after) => {
85
+ if (before && canonicalJson(before) === canonicalJson(after))
86
+ return null;
87
+ const thresholdBefore = before ? passCriteriaThreshold(before.passCriteria) : null;
88
+ const thresholdAfter = passCriteriaThreshold(after.passCriteria);
89
+ const beforeIds = new Set(before?.passCriteria.requiredRequestIds ?? []);
90
+ const afterIds = new Set(after.passCriteria.requiredRequestIds);
91
+ return {
92
+ thresholdBefore,
93
+ thresholdAfter,
94
+ thresholdLowered: thresholdBefore !== null && thresholdAfter < thresholdBefore,
95
+ criticalAdded: [...afterIds].filter((id) => !beforeIds.has(id)),
96
+ criticalRemoved: [...beforeIds].filter((id) => !afterIds.has(id)),
97
+ minExecutedLowered: before !== null && after.passCriteria.minExecuted < before.passCriteria.minExecuted,
98
+ bailChanged: before !== null && before.bail !== after.bail,
99
+ folderRunsEnabled: after.allowFolderRuns && !(before?.allowFolderRuns ?? false),
100
+ };
101
+ };
102
+ /**
103
+ * Compare a proposed snapshot with the active one (`base` null = the first
104
+ * version, so everything is "added"). Items are matched by id.
105
+ */
106
+ export const diffCollectionSnapshots = (base, next) => {
107
+ const requests = diffItems(base?.requests ?? [], next.requests);
108
+ const folders = diffItems(base?.folders ?? [], next.folders);
109
+ const collectionFields = base
110
+ ? changedKeys(comparableCollection(base.collection), comparableCollection(next.collection))
111
+ : [];
112
+ const pipelineConfig = diffPipelineConfig(base ? normalizePipelineCollectionConfig(base.collection.pipelineConfig) : null, normalizePipelineCollectionConfig(next.collection.pipelineConfig));
113
+ const scriptsChanged = requests.filter((item) => item.fields.some((field) => SCRIPT_KEYS.has(field))).length +
114
+ folders.filter((item) => item.fields.includes("scripts")).length +
115
+ (collectionFields.includes("scripts") ? 1 : 0);
116
+ return {
117
+ stats: {
118
+ requestsAdded: requests.filter((item) => item.change === "added").length,
119
+ requestsModified: requests.filter((item) => item.change === "modified").length,
120
+ requestsRemoved: requests.filter((item) => item.change === "removed").length,
121
+ foldersChanged: folders.length,
122
+ collectionSettingsChanged: collectionFields.length > 0,
123
+ scriptsChanged,
124
+ pipelineConfigChanged: base !== null && pipelineConfig !== null,
125
+ thresholdLowered: pipelineConfig?.thresholdLowered ?? false,
126
+ criticalRemoved: pipelineConfig?.criticalRemoved.length ?? 0,
127
+ },
128
+ requests,
129
+ folders,
130
+ collectionFields,
131
+ pipelineConfig,
132
+ };
133
+ };
134
+ /** Canonical text of a snapshot without bookkeeping — hash it to tell
135
+ * whether two snapshots hold the same content. */
136
+ export const canonicalCollectionSnapshot = (snapshot) => canonicalJson({
137
+ collection: {
138
+ ...comparableCollection(snapshot.collection),
139
+ pipelineConfig: normalizePipelineCollectionConfig(snapshot.collection.pipelineConfig),
140
+ },
141
+ folders: [...snapshot.folders]
142
+ .map(comparableItem)
143
+ .sort((a, b) => String(a.id).localeCompare(String(b.id))),
144
+ requests: [...snapshot.requests]
145
+ .map(comparableItem)
146
+ .sort((a, b) => String(a.id).localeCompare(String(b.id))),
147
+ });
148
+ //# 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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"}
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
@@ -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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"}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "callman-core",
3
- "version": "1.42.0",
3
+ "version": "1.43.0",
4
4
  "main": "dist-cjs/index.js",
5
5
  "module": "dist/index.js",
6
6
  "types": "dist/index.d.ts",