callman-mcp 0.10.2 → 0.12.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 (52) hide show
  1. package/CHANGELOG.md +34 -0
  2. package/README.md +15 -4
  3. package/dist/client/api.d.ts +31 -3
  4. package/dist/client/api.d.ts.map +1 -1
  5. package/dist/client/api.js +14 -0
  6. package/dist/client/api.js.map +1 -1
  7. package/dist/client/errors.d.ts.map +1 -1
  8. package/dist/client/errors.js +33 -1
  9. package/dist/client/errors.js.map +1 -1
  10. package/dist/client/types.d.ts +59 -0
  11. package/dist/client/types.d.ts.map +1 -1
  12. package/dist/domain/pipeline.d.ts +80 -0
  13. package/dist/domain/pipeline.d.ts.map +1 -0
  14. package/dist/domain/pipeline.js +139 -0
  15. package/dist/domain/pipeline.js.map +1 -0
  16. package/dist/domain/scenario/build.d.ts +62 -6
  17. package/dist/domain/scenario/build.d.ts.map +1 -1
  18. package/dist/domain/scenario/build.js +8 -0
  19. package/dist/domain/scenario/build.js.map +1 -1
  20. package/dist/resources/docs/overview.d.ts +1 -1
  21. package/dist/resources/docs/overview.d.ts.map +1 -1
  22. package/dist/resources/docs/overview.js +20 -0
  23. package/dist/resources/docs/overview.js.map +1 -1
  24. package/dist/resources/generated/aiPacks.d.ts +1 -1
  25. package/dist/resources/generated/aiPacks.js +6 -6
  26. package/dist/resources/generated/aiPacks.js.map +1 -1
  27. package/dist/tools/catalog.d.ts.map +1 -1
  28. package/dist/tools/catalog.js +5 -0
  29. package/dist/tools/catalog.js.map +1 -1
  30. package/dist/tools/collections.d.ts.map +1 -1
  31. package/dist/tools/collections.js +249 -17
  32. package/dist/tools/collections.js.map +1 -1
  33. package/dist/tools/contracts.d.ts.map +1 -1
  34. package/dist/tools/contracts.js +36 -0
  35. package/dist/tools/contracts.js.map +1 -1
  36. package/dist/tools/mockSchemas.d.ts +48 -48
  37. package/dist/tools/mockShared.d.ts +64 -64
  38. package/dist/tools/run.d.ts +2 -0
  39. package/dist/tools/run.d.ts.map +1 -1
  40. package/dist/tools/run.js +34 -5
  41. package/dist/tools/run.js.map +1 -1
  42. package/dist-cjs/client/api.js +14 -0
  43. package/dist-cjs/client/errors.js +33 -1
  44. package/dist-cjs/domain/pipeline.js +144 -0
  45. package/dist-cjs/domain/scenario/build.js +8 -0
  46. package/dist-cjs/resources/docs/overview.js +20 -0
  47. package/dist-cjs/resources/generated/aiPacks.js +6 -6
  48. package/dist-cjs/tools/catalog.js +5 -0
  49. package/dist-cjs/tools/collections.js +247 -15
  50. package/dist-cjs/tools/contracts.js +36 -0
  51. package/dist-cjs/tools/run.js +33 -4
  52. package/package.json +2 -2
package/dist/tools/run.js CHANGED
@@ -1,7 +1,8 @@
1
1
  import { z } from "zod";
2
2
  import { buildScriptLayers, describeScriptLayer } from "callman-core";
3
3
  import { ToolInputError } from "../client/errors.js";
4
- import { resolvedSummary } from "../domain/resolve.js";
4
+ import { evaluateRunVerdict, resolveRunCriteria } from "../domain/pipeline.js";
5
+ import { resolvedSummary, resolveRef } from "../domain/resolve.js";
5
6
  import { createRedactor } from "../lib/redact.js";
6
7
  import { LIMITS, safeStringify } from "../lib/truncate.js";
7
8
  import { executeCollection } from "../run/executeCollection.js";
@@ -67,6 +68,7 @@ export const prepareRun = async (ctx, ws, collectionId, environmentRef) => {
67
68
  environment: bundle.environment ? { id: bundle.environment.id, name: bundle.environment.name } : null,
68
69
  warnings,
69
70
  redaction,
71
+ pipeline: bundle.pipeline ?? null,
70
72
  };
71
73
  };
72
74
  export const registerRunTools = (server, ctx) => {
@@ -147,7 +149,7 @@ export const registerRunTools = (server, ctx) => {
147
149
  }));
148
150
  server.registerTool("run_collection", {
149
151
  title: "Run a collection locally",
150
- description: `Run a collection (or one folder of it, or specific requests) sequentially from this machine with an environment and the collection's variables, sharing variables between requests like the collection runner. Requests switched off for the runner are skipped unless named in \`only\`; data-driven contracts run once per row. Returns per-request results (as in run_request, values shown as {{key}}, with \`failure\` / \`diagnosis\` where something broke), a pass/fail summary and the variable names scripts changed. \`bail\` stops at the first failure. ${LOCAL_RUN_LIMITS} Needs requests:run.`,
152
+ description: `Run a collection (or one folder of it, or specific requests) sequentially from this machine with an environment and the collection's variables, sharing variables between requests like the collection runner. Requests switched off for the runner are skipped unless named in \`only\`; data-driven contracts run once per row. Returns per-request results (as in run_request, values shown as {{key}}, with \`failure\` / \`diagnosis\` where something broke), a pass/fail summary, the variable names scripts changed and the \`verdict\` — the pass criteria callme run applies in CI: every executed request must pass, or \`passThreshold\` percent of them, and every \`criticalRequests\` entry. An on-prem pipeline collection runs its APPROVED version (not the draft) with its approved criteria (the inputs are then ignored, \`version\` says which version ran) and may refuse folder / partial runs. \`bail\` stops at the first failure (not with passThreshold). ${LOCAL_RUN_LIMITS} Needs requests:run.`,
151
153
  inputSchema: {
152
154
  workspace: workspaceArg,
153
155
  collection: refArg("Collection"),
@@ -155,12 +157,25 @@ export const registerRunTools = (server, ctx) => {
155
157
  only: z.array(z.string().min(1).max(500)).max(200).optional().describe("Run only these requests (ids or names)"),
156
158
  environment: z.string().max(200).optional(),
157
159
  bail: z.boolean().optional(),
160
+ passThreshold: z.number().int().min(1).max(100).optional().describe("The run passes when at least this percent of the executed requests passed (default: all must). Ignored for pipeline collections"),
161
+ criticalRequests: z.array(z.string().min(1).max(500)).max(200).optional().describe("Requests (ids or names) that must pass whatever the percentage. Ignored for pipeline collections"),
158
162
  maxBodyBytes: maxBodyArg,
159
163
  },
160
164
  annotations: RUN,
161
- }, guarded(async ({ workspace, collection, folder, only, environment, bail, maxBodyBytes }) => {
165
+ }, guarded(async ({ workspace, collection, folder, only, environment, bail, passThreshold, criticalRequests, maxBodyBytes }) => {
162
166
  const { ws, value: resolved } = await findCollection(ctx, workspace, collection);
163
167
  const prepared = await prepareRun(ctx, ws.id, resolved.item.id, environment);
168
+ // What decides the verdict: a pipeline collection's approved config,
169
+ // else the inputs. Critical requests are looked up in what runs.
170
+ const isPipeline = prepared.pipeline?.kind === "pipeline";
171
+ const criticalRequestIds = !isPipeline && criticalRequests && criticalRequests.length > 0
172
+ ? [...new Set(criticalRequests.map((ref) => resolveRef("request", ref, prepared.collection.requests, { aliases: (request) => [`${request.method} ${request.url}`] }).item.id))]
173
+ : [];
174
+ const runCriteria = resolveRunCriteria(prepared.pipeline, {
175
+ passThreshold,
176
+ criticalRequestIds: isPipeline ? (criticalRequests ?? []) : criticalRequestIds,
177
+ bail,
178
+ });
164
179
  let selection = null;
165
180
  if (folder) {
166
181
  const target = await resolveFolder(ctx, ws.id, resolved.item.id, folder);
@@ -176,6 +191,9 @@ export const registerRunTools = (server, ctx) => {
176
191
  }
177
192
  if (selection && selection.length === 0)
178
193
  throw new ToolInputError("NOTHING_TO_RUN", "The selection contains no requests.");
194
+ if (selection && !runCriteria.allowFolderRuns) {
195
+ throw new ToolInputError("PIPELINE_FOLDER_RUN_NOT_ALLOWED", `This pipeline collection's approved config${runCriteria.version ? ` v${runCriteria.version.number}` : ""} runs the whole collection only: drop folder / only (run_request runs a single request), or allow folder runs in its pipelineConfig and get the change approved.`);
196
+ }
179
197
  const outcome = await ctx.withRunLock(() => executeCollection({
180
198
  collection: prepared.collection,
181
199
  env: prepared.env,
@@ -183,13 +201,24 @@ export const registerRunTools = (server, ctx) => {
183
201
  connections: prepared.connections,
184
202
  only: selection,
185
203
  includeDisabled: Boolean(only && only.length > 0),
186
- bail: bail ?? false,
204
+ bail: runCriteria.bail,
187
205
  deadlineMs: ctx.config.runTimeoutMs,
188
206
  }));
207
+ const verdict = evaluateRunVerdict({
208
+ results: outcome.results,
209
+ criteria: runCriteria.criteria,
210
+ collectionName: prepared.collection.name,
211
+ version: runCriteria.version?.number ?? null,
212
+ requests: prepared.collection.requests,
213
+ selection,
214
+ });
189
215
  return ok(summarizeRun(outcome, maxBodyBytes ?? ctx.config.maxBodyBytes, {
190
- collection: { id: resolved.item.id, name: resolved.item.name },
216
+ collection: { id: resolved.item.id, name: resolved.item.name, kind: runCriteria.kind },
217
+ ...(runCriteria.version ? { version: runCriteria.version } : {}),
191
218
  workspace: workspaceTag(ws),
192
219
  environment: prepared.environment,
220
+ verdict,
221
+ ...(runCriteria.notes.length > 0 ? { notes: runCriteria.notes } : {}),
193
222
  warnings: prepared.warnings,
194
223
  resolved: [resolvedSummary(collection, resolved)],
195
224
  }, prepared.redaction));
@@ -1 +1 @@
1
- {"version":3,"file":"run.js","sourceRoot":"","sources":["../../src/tools/run.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"run.js","sourceRoot":"","sources":["../../src/tools/run.ts"],"names":[],"mappings":"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"}
@@ -63,6 +63,17 @@ class CallmanApi {
63
63
  deleteCollection(ws, id) {
64
64
  return this.http.request("DELETE", `/collections/${id}`, { workspaceId: ws });
65
65
  }
66
+ // On-prem pipeline collections: changes and deletion go through review;
67
+ // the decision itself is made by a person in the app (tokens are denied).
68
+ listCollectionApproverCandidates(ws, id, action) {
69
+ return this.http.request("GET", `/collections/${id}/review/approver-candidates`, { workspaceId: ws, query: { action } });
70
+ }
71
+ submitCollectionReview(ws, id, body) {
72
+ return this.http.request("POST", `/collections/${id}/review/submit`, { workspaceId: ws, body });
73
+ }
74
+ requestCollectionDeletion(ws, id, body) {
75
+ return this.http.request("POST", `/collections/${id}/deletion-request`, { workspaceId: ws, body });
76
+ }
66
77
  folderTree(ws, collectionId) {
67
78
  return this.http.request("GET", `/folders/tree/${collectionId}`, { workspaceId: ws });
68
79
  }
@@ -130,6 +141,9 @@ class CallmanApi {
130
141
  listConnections(ws, type) {
131
142
  return this.http.request("GET", "/connections", { workspaceId: ws, query: type ? { type } : {} });
132
143
  }
144
+ listConnectionRoutines(ws, id, query) {
145
+ return this.http.request("GET", `/connections/${id}/routines`, { workspaceId: ws, query });
146
+ }
133
147
  // ── import ──────────────────────────────────────────────────────────
134
148
  importJson(ws, body) {
135
149
  return this.http.request("POST", "/import/json", { workspaceId: ws, body, timeoutMs: 120_000 });
@@ -133,7 +133,39 @@ const hintFor = (error) => {
133
133
  case "UI_TEST_SCHEDULE_RUN_ACTIVE":
134
134
  return "That schedule is running right now. Wait for it (list_ui_test_runs) or cancel the run (cancel_ui_test_run), then trigger it again.";
135
135
  case "REVIEW_DISABLED_CLOUD":
136
- return "Callman cloud has no review workflow — UI tests and scenarios run as saved; approvals and versions exist on on-prem installations only.";
136
+ return "Callman cloud has no review workflow — UI tests, scenarios and collections run as saved; approvals and versions exist on on-prem installations only.";
137
+ // On-prem pipeline collections (reviewed, versioned; CI runs the approved version).
138
+ case "COLLECTION_NOT_APPROVED":
139
+ return "This pipeline collection has no approved version yet, and CI (callme run, run_collection) runs only approved versions. submit_collection, have an approver approve it in the Callman app, then run it again.";
140
+ case "PIPELINE_COLLECTION_REQUIRED":
141
+ return "The administrator allows CI runs on pipeline collections only. Turn this one into a pipeline collection (update_collection kind: \"pipeline\" with group), submit_collection, and have it approved.";
142
+ case "COLLECTION_DELETE_REQUIRES_REVIEW":
143
+ return "A pipeline collection is deleted through review: request_collection_deletion sends the request; it is deleted when an approver approves it in the Callman app.";
144
+ case "COLLECTION_KIND_CHANGE_REQUIRES_REVIEW":
145
+ return "Turning a pipeline collection back into a standard one goes through review — request the conversion in the Callman app.";
146
+ case "PIPELINE_COLLECTIONS_ONPREM_ONLY":
147
+ return "Pipeline collections exist on Callman on-prem only. Elsewhere set the pass criteria per run: run_collection passThreshold / criticalRequests, callme run --pass-threshold / --critical-request.";
148
+ case "COLLECTION_GROUP_REQUIRED":
149
+ return "Pass `group`: the group whose approvers review this pipeline collection (the groups you belong to are listed by list_scenarios `groups`).";
150
+ case "COLLECTION_GROUP_NOT_ALLOWED":
151
+ return "You cannot pick that group — choose one you belong to (list_scenarios `groups`).";
152
+ case "COLLECTION_GROUP_LOCKED":
153
+ return "The reviewing group is fixed once the collection has an approved version or an open review.";
154
+ case "PASS_THRESHOLD_BELOW_FLOOR":
155
+ return "The administrator set a minimum pass percentage for CI runs — use a minPassPercent at or above it (the message names it).";
156
+ case "PIPELINE_CRITICAL_REQUEST_INVALID":
157
+ case "PIPELINE_CRITICAL_REQUEST_DISABLED":
158
+ return "A critical request must be a request of this collection that runs in the collection runner (not switched off) — get_collection_tree lists them.";
159
+ case "NOT_A_PIPELINE_COLLECTION":
160
+ return "Only pipeline collections have a group, pass criteria and a review — update_collection kind: \"pipeline\" (with group) turns a collection into one (on-prem).";
161
+ case "COLLECTION_NO_CHANGES":
162
+ return "The draft is the same as the approved version — there is nothing to submit.";
163
+ case "COLLECTION_REVIEW_PENDING":
164
+ return "A review is already open for this collection. submit_collection with replace: true swaps your own submission for the current draft; someone else's must be decided first.";
165
+ case "COLLECTION_NO_APPROVERS":
166
+ return "Nobody can approve collections of this group yet — an administrator must flag an approver for the group (admin panel) before submit_collection works.";
167
+ case "REVIEW_REQUIRES_INTERACTIVE_SESSION":
168
+ return "Reviews are decided by a person in the Callman app. AI tools can submit (submit_collection) and request deletion, not approve or reject.";
137
169
  case "SELF_APPROVAL_FORBIDDEN":
138
170
  return "You cannot approve or reject your own UI test — another approver must.";
139
171
  case "NOT_APPROVER":
@@ -0,0 +1,144 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.evaluateRunVerdict = exports.resolveRunCriteria = exports.mergePipelineConfig = exports.pipelineConfigArg = void 0;
4
+ const callman_core_1 = require("callman-core");
5
+ const zod_1 = require("zod");
6
+ const strict_js_1 = require("../lib/strict.js");
7
+ const executeCollection_js_1 = require("../run/executeCollection.js");
8
+ // Pass criteria — when a collection run counts as passed — the same rule
9
+ // `callme run` applies in CI (callman-core evaluatePassCriteria). An on-prem
10
+ // pipeline collection carries its own, reviewed and approved with it; the
11
+ // bundle serves that approved config and it wins over whatever the caller
12
+ // asks for. Every other run builds the criteria from the tool's inputs; none
13
+ // = every executed request must pass.
14
+ // ── pipelineConfig argument (create_collection / update_collection) ──────
15
+ exports.pipelineConfigArg = (0, strict_js_1.strictObject)({
16
+ passCriteria: (0, strict_js_1.strictObject)({
17
+ mode: zod_1.z.enum(["all", "percentage"]).optional().describe('"all": every executed request must pass (default). "percentage": at least minPassPercent of them'),
18
+ minPassPercent: zod_1.z.number().int().min(1).max(100).optional().describe("1-100, read in percentage mode. The administrator may set a minimum"),
19
+ requiredRequests: zod_1.z
20
+ .array(zod_1.z.string().min(1).max(500))
21
+ .max(200)
22
+ .optional()
23
+ .describe("Critical requests (ids or names in this collection): they must pass whatever the percentage. Replaces the whole list; [] clears it"),
24
+ minExecuted: zod_1.z.number().int().min(1).max(100_000).optional().describe("Fewer executed requests than this fails the run (default 1)"),
25
+ }, "passCriteria key").optional(),
26
+ bail: zod_1.z.boolean().optional().describe("Stop at the first failed request (all mode only; ignored in percentage mode)"),
27
+ allowFolderRuns: zod_1.z.boolean().optional().describe("May CI run one folder of the collection (callme run --folder-id). Default false"),
28
+ }, "pipelineConfig key")
29
+ .optional()
30
+ .describe("On-prem pipeline collections: the pass criteria CI applies (reviewed and approved with the collection). Omitted keys keep their current value (update) or the default (create).");
31
+ // The stored config with the input laid over it — the server stores the
32
+ // whole object, so a partial update must not reset the other fields.
33
+ // `resolveIds` turns request refs (ids or names) into ids.
34
+ const mergePipelineConfig = async (current, input, resolveIds) => {
35
+ const base = (0, callman_core_1.normalizePipelineCollectionConfig)(current);
36
+ const criteria = input.passCriteria ?? {};
37
+ const requiredRequestIds = criteria.requiredRequests !== undefined ? await resolveIds(criteria.requiredRequests) : base.passCriteria.requiredRequestIds;
38
+ const mode = criteria.mode ?? (criteria.minPassPercent !== undefined ? "percentage" : base.passCriteria.mode);
39
+ const passCriteria = (0, callman_core_1.normalizePipelinePassCriteria)({
40
+ mode,
41
+ minPassPercent: criteria.minPassPercent ?? (base.passCriteria.mode === "percentage" ? base.passCriteria.minPassPercent : 100),
42
+ requiredRequestIds,
43
+ minExecuted: criteria.minExecuted ?? base.passCriteria.minExecuted,
44
+ });
45
+ return {
46
+ passCriteria,
47
+ bail: passCriteria.mode === "percentage" ? false : (input.bail ?? base.bail),
48
+ allowFolderRuns: input.allowFolderRuns ?? base.allowFolderRuns,
49
+ };
50
+ };
51
+ exports.mergePipelineConfig = mergePipelineConfig;
52
+ const describeCriteria = (criteria) => {
53
+ const parts = [criteria.mode === "percentage" ? `threshold ${criteria.minPassPercent}%` : "all must pass"];
54
+ const critical = criteria.requiredRequestIds.length;
55
+ if (critical > 0)
56
+ parts.push(`${critical} critical request${critical === 1 ? "" : "s"}`);
57
+ if (criteria.minExecuted > 1)
58
+ parts.push(`at least ${criteria.minExecuted} requests`);
59
+ return parts.join(", ");
60
+ };
61
+ // The bundle's approved config for a pipeline collection, else the inputs
62
+ // (`criticalRequestIds` resolved by the caller; for a pipeline collection only
63
+ // their presence is read, to say they were ignored). The administrator's
64
+ // minimum pass percentage is applied either way.
65
+ const resolveRunCriteria = (pipeline, input) => {
66
+ const notes = [];
67
+ let criteria;
68
+ let bail;
69
+ let result;
70
+ if (pipeline?.kind === "pipeline") {
71
+ const config = (0, callman_core_1.normalizePipelineCollectionConfig)(pipeline.config);
72
+ const version = pipeline.version && typeof pipeline.version.number === "number"
73
+ ? { number: pipeline.version.number, approvedAt: pipeline.version.approvedAt ?? null, approvedByLabel: pipeline.version.approvedByLabel ?? null }
74
+ : null;
75
+ const label = version ? `v${version.number}` : "(unversioned)";
76
+ const ignored = [
77
+ input.passThreshold !== undefined ? "passThreshold" : null,
78
+ input.criticalRequestIds.length > 0 ? "criticalRequests" : null,
79
+ input.bail === true ? "bail" : null,
80
+ ].filter((name) => name !== null);
81
+ notes.push(`Pipeline collection: this run used its approved version ${label} (not the unapproved draft) and its approved pass criteria (${describeCriteria(config.passCriteria)}${config.bail ? ", bail" : ""}).`);
82
+ if (ignored.length > 0)
83
+ notes.push(`${ignored.join(", ")} ignored: the approved pipeline config ${label} decides.`);
84
+ criteria = config.passCriteria;
85
+ bail = config.bail;
86
+ result = { kind: "pipeline", version, allowFolderRuns: config.allowFolderRuns };
87
+ }
88
+ else {
89
+ criteria = (0, callman_core_1.normalizePipelinePassCriteria)({
90
+ mode: input.passThreshold === undefined ? "all" : "percentage",
91
+ minPassPercent: input.passThreshold ?? 100,
92
+ requiredRequestIds: input.criticalRequestIds,
93
+ minExecuted: 1,
94
+ });
95
+ // A pass percentage needs the whole run.
96
+ bail = input.bail === true && criteria.mode !== "percentage";
97
+ if (input.bail === true && !bail)
98
+ notes.push("bail ignored: passThreshold needs every request to run.");
99
+ result = { kind: "standard", version: null, allowFolderRuns: true };
100
+ }
101
+ const floored = (0, callman_core_1.applyPassPercentFloor)(criteria, pipeline?.policy?.minPassPercentFloor);
102
+ if (floored.minPassPercent !== criteria.minPassPercent) {
103
+ notes.push(`Pass threshold raised from ${criteria.minPassPercent}% to ${floored.minPassPercent}%: the server's minimum for CI runs.`);
104
+ }
105
+ return { ...result, criteria: floored, bail, notes };
106
+ };
107
+ exports.resolveRunCriteria = resolveRunCriteria;
108
+ // One outcome per execution (a data-driven request has one per row; core
109
+ // counts the request once). `scopeRequestIds` = the requests a partial run
110
+ // covered; critical requests outside it are ignored, but an id the collection
111
+ // does not have at all still counts as not run.
112
+ const evaluateRunVerdict = (input) => {
113
+ const { criteria } = input;
114
+ const known = new Set(input.requests.map((request) => request.id));
115
+ const scopeRequestIds = input.selection
116
+ ? [...input.selection, ...criteria.requiredRequestIds.filter((id) => !known.has(id))]
117
+ : undefined;
118
+ const outcomes = input.results.map((result) => result.executionControl?.skipped === true
119
+ ? { requestId: result.requestId, passed: false, skipped: true }
120
+ : { requestId: result.requestId, passed: !(0, executeCollection_js_1.requestFailed)(result) });
121
+ const verdict = (0, callman_core_1.evaluatePassCriteria)(outcomes, criteria, scopeRequestIds ? { scopeRequestIds } : {});
122
+ const scope = scopeRequestIds ? new Set(scopeRequestIds) : null;
123
+ const names = new Map(input.requests.map((request) => [request.id, request.name]));
124
+ const failed = new Set(verdict.requiredFailed);
125
+ const missing = new Set(verdict.requiredMissing);
126
+ const criticalRequests = criteria.requiredRequestIds
127
+ .filter((id) => !scope || scope.has(id))
128
+ .map((id) => ({
129
+ id,
130
+ name: names.get(id) ?? null,
131
+ status: failed.has(id) ? "failed" : missing.has(id) ? "did_not_run" : "passed",
132
+ }));
133
+ const parts = [
134
+ `${input.collectionName}${input.version !== null ? ` v${input.version}` : ""}`,
135
+ `${verdict.passedCount}/${verdict.executed} passed${verdict.passRate !== null ? ` (${verdict.passRate.toFixed(1)}%)` : ""}`,
136
+ verdict.mode === "percentage" ? `threshold ${verdict.threshold}%` : "all must pass",
137
+ ];
138
+ if (criticalRequests.length > 0) {
139
+ const okCount = criticalRequests.filter((entry) => entry.status === "passed").length;
140
+ parts.push(`critical ${okCount}/${criticalRequests.length} ${okCount === criticalRequests.length ? "✓" : "✗"}`);
141
+ }
142
+ return { ...verdict, line: `${parts.join(" · ")} → ${verdict.passed ? "PASS" : "FAIL"}`, criticalRequests };
143
+ };
144
+ exports.evaluateRunVerdict = evaluateRunVerdict;
@@ -41,6 +41,14 @@ exports.scenarioEnvironmentInputSchema = (0, strict_js_1.strictObject)({
41
41
  exports.scenarioDatasetSchema = (0, strict_js_1.strictObject)({
42
42
  columns: zod_1.z.array(zod_1.z.string().max(200)).max(200),
43
43
  rows: zod_1.z.array(zod_1.z.record(zod_1.z.string().max(100_000))).max(10_000).describe("Each row: column → value; nodes read {{data.<column>}}; the scenario runs once per row"),
44
+ source: (0, strict_js_1.strictObject)({
45
+ type: zod_1.z.literal("db"),
46
+ connectionId: zod_1.z.string().max(200),
47
+ query: zod_1.z.string().min(1).max(100_000),
48
+ }, "dataset source field")
49
+ .nullable()
50
+ .optional()
51
+ .describe("Read the rows from this query when the run starts, instead of storing them. Columns are the query's column names (Oracle: uppercase). columns and rows may then be empty."),
44
52
  }, "dataset field")
45
53
  .nullable()
46
54
  .describe("Data-driven runs: the whole scenario runs once per row (null removes the dataset)");
@@ -57,6 +57,26 @@ The token works in EVERY workspace the user belongs to (with their role in each)
57
57
  - \`run_request\` / \`run_collection\` execute on the user's machine with real variable values;
58
58
  you only get results and the names of variables scripts changed.
59
59
 
60
+ ## Pipeline collections (on-prem)
61
+ On Callman on-prem a collection can be a **pipeline collection** (\`kind: "pipeline"\`, owned by a
62
+ review group): changes go through review like scenarios, approved versions are kept, and CI
63
+ (\`callme run\`, \`run_collection\`) runs only the active APPROVED version with its approved pass
64
+ criteria (\`pipelineConfig\`: threshold %, critical requests, bail, folder runs).
65
+ - \`get_collection\` / \`list_collections\` show \`kind\` and \`review\` (status, active version,
66
+ pending submission). Edits change the draft; nothing reaches CI until it is approved.
67
+ - Create one with \`create_collection { kind: "pipeline", group }\`, or turn a standard one into it
68
+ with \`update_collection { kind: "pipeline", group }\`; set the criteria with \`pipelineConfig\`
69
+ (omitted keys keep their value; critical requests by id or name).
70
+ - \`submit_collection\` sends the draft for review; \`request_collection_deletion\` asks to delete
71
+ it (\`delete_collection\` refuses pipeline collections). Approving is a person's decision in the
72
+ Callman app — there is no approve tool, and tokens are denied it.
73
+ - \`run_collection\` returns a \`verdict\` (\`Payments CI v4 · 17/20 passed (85.0%) · threshold 80% ·
74
+ critical 2/2 ✓ → PASS\`). For a pipeline collection the approved criteria decide (the
75
+ \`passThreshold\` / \`criticalRequests\` / \`bail\` inputs are ignored) and \`version\` says what ran;
76
+ for a standard collection those inputs set the criteria (default: every request must pass).
77
+ - A pipeline collection without an approved version cannot run (\`COLLECTION_NOT_APPROVED\`); an
78
+ administrator may allow CI on pipeline collections only (\`PIPELINE_COLLECTION_REQUIRED\`).
79
+
60
80
  ## Secrets
61
81
  Environment and collection-variable values come back masked (\`••••ab\`) unless the token holds
62
82
  \`environments:reveal\` and you ask for \`reveal: true\`. Never write a masked environment value back —