@nifrajs/testing 3.3.0 → 3.5.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.
@@ -0,0 +1,530 @@
1
+ /**
2
+ * Seeded hostile corpus for predictions and projections - the prediction-side sibling of
3
+ * `adversarial.ts`.
4
+ *
5
+ * `adversarial.ts` proves HTTP body/query/response contracts with validator-proven hostile
6
+ * mutations. This module proves the same shaped guarantees one layer up: the `@nifrajs/webmcp`
7
+ * prediction store (stale versions, expiry, prototype-grafting patches, non-atomic patches,
8
+ * commit conflicts, reconcile/tool rollback) and the WebMCP-plus-MCP projection of one
9
+ * capability (the same witness accepted or rejected identically on both surfaces).
10
+ *
11
+ * Every case has a stable ID, every run carries its replay seed, and every clock is injected -
12
+ * nothing reads `Date.now` or `crypto.randomUUID` implicitly. `only` replays a subset by ID.
13
+ *
14
+ * Deliberately out of scope: A2A and AG-UI projections. Neither package exposes a same-contract
15
+ * projection from a tool/capability (`a2a` has `agentCard`/`mountA2A` at the protocol level; there
16
+ * is no `capability -> a2a/ag-ui` seam), so a parity case here would invent the seam it claims to
17
+ * test. Proposing such a seam needs consumer evidence first (N7), not a lab that assumes it.
18
+ */
19
+ import { toMcpTool } from "@nifrajs/mcp/tool-contract";
20
+ import { createPredictionStore, defineAgentCapability, executePredicted, toWebMcpTool, } from "@nifrajs/webmcp";
21
+ export const PREDICTION_LAB_SEED = 0x50_52_45_44;
22
+ function issue(message) {
23
+ return { issues: [{ message }] };
24
+ }
25
+ const mcpContext = {
26
+ signal: new AbortController().signal,
27
+ requestId: null,
28
+ reportProgress: () => { },
29
+ };
30
+ function isRecord(value) {
31
+ return typeof value === "object" && value !== null && !Array.isArray(value);
32
+ }
33
+ /** Strict cart-add input: unknown fields rejected, so hostile extras are provably invalid. */
34
+ const addInputSchema = {
35
+ jsonSchema: {
36
+ type: "object",
37
+ properties: {
38
+ sku: { type: "string", minLength: 1 },
39
+ quantity: { type: "integer", minimum: 1, maximum: Number.MAX_SAFE_INTEGER },
40
+ },
41
+ required: ["sku", "quantity"],
42
+ additionalProperties: false,
43
+ },
44
+ "~standard": {
45
+ version: 1,
46
+ vendor: "prediction-lab",
47
+ types: {
48
+ input: { sku: "example", quantity: 1 },
49
+ output: { sku: "example", quantity: 1 },
50
+ },
51
+ validate(value) {
52
+ if (typeof value !== "object" || value === null)
53
+ return issue("input must be an object");
54
+ const record = value;
55
+ const keys = Object.keys(record).sort();
56
+ if (keys.join(",") !== "quantity,sku")
57
+ return issue("input must be exactly { sku, quantity }");
58
+ if (typeof record.sku !== "string" || record.sku === "")
59
+ return issue("sku must be a non-empty string");
60
+ if (!Number.isSafeInteger(record.quantity) || record.quantity <= 0)
61
+ return issue("quantity must be a positive safe integer");
62
+ return { value: { sku: record.sku, quantity: record.quantity } };
63
+ },
64
+ },
65
+ };
66
+ const addOutputSchema = {
67
+ jsonSchema: {
68
+ type: "object",
69
+ properties: { cartVersion: { type: "string" } },
70
+ required: ["cartVersion"],
71
+ additionalProperties: false,
72
+ },
73
+ "~standard": {
74
+ version: 1,
75
+ vendor: "prediction-lab",
76
+ types: {
77
+ input: { cartVersion: "example" },
78
+ output: { cartVersion: "example" },
79
+ },
80
+ validate(value) {
81
+ if (typeof value !== "object" ||
82
+ value === null ||
83
+ typeof value.cartVersion !== "string")
84
+ return issue("output must carry cartVersion");
85
+ return { value: { cartVersion: value.cartVersion } };
86
+ },
87
+ },
88
+ };
89
+ function labCapability(options) {
90
+ return defineAgentCapability({
91
+ name: "cart.add",
92
+ description: "Add a product to the current cart.",
93
+ input: addInputSchema,
94
+ output: addOutputSchema,
95
+ writes: ["cart"],
96
+ execute: (input) => {
97
+ options.onExecute?.();
98
+ return options.execute(input);
99
+ },
100
+ predict: ({ input, version }) => ({
101
+ baseVersion: version,
102
+ patch: [{ op: "add", path: "/items/-", value: { sku: input.sku, quantity: input.quantity } }],
103
+ }),
104
+ reconcile: ({ input, output }) => {
105
+ options.onReconcile?.();
106
+ if (options.reconcileThrows === true)
107
+ throw new Error("lab reconcile failure");
108
+ void input;
109
+ return {
110
+ state: { items: [{ sku: "server-item", quantity: 1 }] },
111
+ version: output.cartVersion,
112
+ };
113
+ },
114
+ });
115
+ }
116
+ function emptyCart(version) {
117
+ return { state: { items: [] }, version };
118
+ }
119
+ function cartAddPrediction(version, sku = "lab-sku") {
120
+ return {
121
+ baseVersion: version,
122
+ patch: [{ op: "add", path: "/items/-", value: { sku, quantity: 1 } }],
123
+ };
124
+ }
125
+ function deterministicExecutionOptions(predictionId, now) {
126
+ return {
127
+ predictionId,
128
+ now: () => now,
129
+ effectId: `${predictionId}-effect`,
130
+ clock: () => now,
131
+ };
132
+ }
133
+ function snapshotItems(snapshot) {
134
+ return snapshot.state.items;
135
+ }
136
+ const LAB_CASES = [
137
+ {
138
+ id: "prediction-stale-version",
139
+ target: "prediction",
140
+ mutation: "baseVersion v0 against authoritative v1",
141
+ run: ({ now, predictionId }) => {
142
+ const store = createPredictionStore(emptyCart("v1"));
143
+ const result = store.predict(predictionId(0), { ...cartAddPrediction("v0") }, now);
144
+ const stateKept = snapshotItems(result.snapshot).length === 0;
145
+ const ok = result.outcome === "stale" && stateKept;
146
+ return {
147
+ ok,
148
+ message: ok
149
+ ? "stale baseVersion rejected without touching state"
150
+ : `expected stale + empty state, got ${result.outcome} + ${snapshotItems(result.snapshot).length} items`,
151
+ };
152
+ },
153
+ },
154
+ {
155
+ id: "prediction-expired-at-predict",
156
+ target: "prediction",
157
+ mutation: "expiresAt at or before now",
158
+ run: ({ now, predictionId }) => {
159
+ const store = createPredictionStore(emptyCart("v1"));
160
+ const result = store.predict(predictionId(0), { ...cartAddPrediction("v1"), expiresAt: now }, now);
161
+ const ok = result.outcome === "expired" && snapshotItems(result.snapshot).length === 0;
162
+ return {
163
+ ok,
164
+ message: ok
165
+ ? "already-expired prediction refused"
166
+ : `expected expired, got ${result.outcome}`,
167
+ };
168
+ },
169
+ },
170
+ {
171
+ id: "prediction-expire-sweep",
172
+ target: "prediction",
173
+ mutation: "clock advances past expiresAt",
174
+ run: ({ now, predictionId }) => {
175
+ const store = createPredictionStore(emptyCart("v1"));
176
+ const events = [];
177
+ store.subscribe((event) => {
178
+ events.push(event.type);
179
+ });
180
+ const predicted = store.predict(predictionId(0), { ...cartAddPrediction("v1"), expiresAt: now + 1000 }, now);
181
+ if (predicted.outcome !== "predicted")
182
+ return { ok: false, message: `setup failed: ${predicted.outcome}` };
183
+ const swept = store.expire(now + 2000);
184
+ const after = store.snapshot();
185
+ const ok = swept.length === 1 &&
186
+ swept[0] === predictionId(0) &&
187
+ after.activePredictionIds.length === 0 &&
188
+ snapshotItems(after).length === 0 &&
189
+ events.includes("expired");
190
+ return {
191
+ ok,
192
+ message: ok ? "expiry swept the overlay with an event" : "expiry sweep left residue",
193
+ };
194
+ },
195
+ },
196
+ {
197
+ id: "prediction-prototype-path",
198
+ target: "prediction",
199
+ mutation: "patch path traverses forbidden prototype segments",
200
+ run: ({ now, predictionId }) => {
201
+ const store = createPredictionStore(emptyCart("v1"));
202
+ const forbidden = ["__proto__", "constructor", "prototype"];
203
+ // Each forbidden pointer must fail before an overlay is stored; checking all three keeps the
204
+ // corpus aligned with the store's complete prototype-pollution guard.
205
+ let allThrew = true;
206
+ for (const [index, segment] of forbidden.entries()) {
207
+ let threw = false;
208
+ try {
209
+ store.predict(predictionId(index), {
210
+ baseVersion: "v1",
211
+ patch: [
212
+ { op: "add", path: `/${segment}/polluted`, value: { sku: "x", quantity: 1 } },
213
+ ],
214
+ }, now);
215
+ }
216
+ catch {
217
+ threw = true;
218
+ }
219
+ allThrew = allThrew && threw;
220
+ }
221
+ const after = store.snapshot();
222
+ const ok = allThrew &&
223
+ after.activePredictionIds.length === 0 &&
224
+ snapshotItems(after).length === 0 &&
225
+ Object.prototype.polluted === undefined;
226
+ return {
227
+ ok,
228
+ message: ok
229
+ ? "prototype-grafting patches threw without storing overlays"
230
+ : "prototype patch was not fail-closed",
231
+ };
232
+ },
233
+ },
234
+ {
235
+ id: "prediction-non-atomic-patch",
236
+ target: "prediction",
237
+ mutation: "second op removes a missing path",
238
+ run: ({ now, predictionId }) => {
239
+ const store = createPredictionStore(emptyCart("v1"));
240
+ // A patch whose second op cannot apply throws during candidate application - before the
241
+ // overlay is stored - so the first op must not survive either. Assert throw + empty state.
242
+ let threw = false;
243
+ try {
244
+ store.predict(predictionId(0), {
245
+ baseVersion: "v1",
246
+ patch: [
247
+ { op: "add", path: "/items/-", value: { sku: "a", quantity: 1 } },
248
+ { op: "remove", path: "/items/7" },
249
+ ],
250
+ }, now);
251
+ }
252
+ catch {
253
+ threw = true;
254
+ }
255
+ const after = store.snapshot();
256
+ const ok = threw && after.activePredictionIds.length === 0 && snapshotItems(after).length === 0;
257
+ return {
258
+ ok,
259
+ message: ok
260
+ ? "partial patch threw - no half-applied overlay"
261
+ : `non-atomic patch left ${snapshotItems(after).length} items`,
262
+ };
263
+ },
264
+ },
265
+ {
266
+ id: "prediction-duplicate-id-invalid",
267
+ target: "prediction",
268
+ mutation: "same prediction id predicted twice",
269
+ run: ({ now, predictionId }) => {
270
+ const store = createPredictionStore(emptyCart("v1"));
271
+ const first = store.predict(predictionId(0), cartAddPrediction("v1"), now);
272
+ const second = store.predict(predictionId(0), cartAddPrediction("v1"), now);
273
+ const ok = first.outcome === "predicted" && second.outcome === "invalid";
274
+ return {
275
+ ok,
276
+ message: ok
277
+ ? "duplicate prediction id rejected"
278
+ : `${first.outcome} then ${second.outcome}`,
279
+ };
280
+ },
281
+ },
282
+ {
283
+ id: "prediction-commit-conflict",
284
+ target: "prediction",
285
+ mutation: "authoritative version advances before commit",
286
+ run: ({ now, predictionId }) => {
287
+ const store = createPredictionStore(emptyCart("v1"));
288
+ const first = store.predict(predictionId(0), cartAddPrediction("v1", "first"), now);
289
+ const second = store.predict(predictionId(1), cartAddPrediction("v1", "second"), now);
290
+ if (first.outcome !== "predicted" || second.outcome !== "predicted")
291
+ return { ok: false, message: "setup failed" };
292
+ const committed = store.commit(predictionId(0), emptyCart("v2"), now);
293
+ if (committed.outcome !== "committed")
294
+ return { ok: false, message: "setup commit failed" };
295
+ const late = store.commit(predictionId(1), emptyCart("v3"), now);
296
+ const after = store.snapshot();
297
+ const ok = late.outcome === "conflicted" &&
298
+ after.version === "v2" &&
299
+ after.activePredictionIds.length === 0;
300
+ return {
301
+ ok,
302
+ message: ok ? "late commit conflicted without clobbering v2" : `got ${late.outcome}`,
303
+ };
304
+ },
305
+ },
306
+ {
307
+ id: "prediction-tool-failure-rolls-back",
308
+ target: "prediction",
309
+ mutation: "tool execute throws after predict",
310
+ run: async ({ now, predictionId }) => {
311
+ let executed = false;
312
+ const capability = labCapability({
313
+ execute: () => {
314
+ executed = true;
315
+ throw new Error("lab tool failure");
316
+ },
317
+ });
318
+ const store = createPredictionStore(emptyCart("v1"));
319
+ const before = store.snapshot();
320
+ const result = await executePredicted(capability, { sku: "lab-sku", quantity: 1 }, store, deterministicExecutionOptions(predictionId(0), now));
321
+ const after = store.snapshot();
322
+ const ok = executed &&
323
+ result.tool?.ok === false &&
324
+ result.outcome === "rolled-back" &&
325
+ after.activePredictionIds.length === 0 &&
326
+ snapshotItems(after).length === snapshotItems(before).length;
327
+ return {
328
+ ok,
329
+ message: ok ? "tool failure rolled the overlay back" : `got ${result.outcome}`,
330
+ };
331
+ },
332
+ },
333
+ {
334
+ id: "prediction-reconcile-failure-rolls-back",
335
+ target: "prediction",
336
+ mutation: "reconcile throws after a successful tool call",
337
+ run: async ({ now, predictionId }) => {
338
+ let executed = false;
339
+ let reconciled = false;
340
+ const capability = labCapability({
341
+ execute: () => {
342
+ executed = true;
343
+ return { cartVersion: "v2" };
344
+ },
345
+ reconcileThrows: true,
346
+ onReconcile: () => {
347
+ reconciled = true;
348
+ },
349
+ });
350
+ const store = createPredictionStore(emptyCart("v1"));
351
+ const result = await executePredicted(capability, { sku: "lab-sku", quantity: 1 }, store, deterministicExecutionOptions(predictionId(0), now));
352
+ const after = store.snapshot();
353
+ const ok = executed &&
354
+ reconciled &&
355
+ result.tool?.ok === true &&
356
+ result.outcome === "rolled-back" &&
357
+ after.version === "v1" &&
358
+ snapshotItems(after).length === 0;
359
+ return {
360
+ ok,
361
+ message: ok ? "reconcile failure kept authoritative v1" : `got ${result.outcome}`,
362
+ };
363
+ },
364
+ },
365
+ {
366
+ id: "prediction-commit-accepts-server",
367
+ target: "prediction",
368
+ mutation: "happy path - predict, execute, reconcile, commit",
369
+ run: async ({ now, predictionId }) => {
370
+ let executed = false;
371
+ let reconciled = false;
372
+ const capability = labCapability({
373
+ execute: () => {
374
+ executed = true;
375
+ return { cartVersion: "v2" };
376
+ },
377
+ onReconcile: () => {
378
+ reconciled = true;
379
+ },
380
+ });
381
+ const store = createPredictionStore(emptyCart("v1"));
382
+ const result = await executePredicted(capability, { sku: "lab-sku", quantity: 1 }, store, deterministicExecutionOptions(predictionId(0), now));
383
+ const after = store.snapshot();
384
+ const item = snapshotItems(after)[0];
385
+ const ok = executed &&
386
+ reconciled &&
387
+ result.tool?.ok === true &&
388
+ result.outcome === "committed" &&
389
+ after.version === "v2" &&
390
+ item?.sku === "server-item" &&
391
+ item.quantity === 1;
392
+ return {
393
+ ok,
394
+ message: ok ? "predicted execution committed at v2" : `got ${result.outcome}`,
395
+ };
396
+ },
397
+ },
398
+ {
399
+ id: "projection-webmcp-mcp-parity",
400
+ target: "projection",
401
+ mutation: "same witness across toWebMcpTool and toMcpTool",
402
+ run: async ({ now, predictionId }) => {
403
+ const capability = labCapability({
404
+ execute: (input) => ({ cartVersion: `v-${input.sku}` }),
405
+ });
406
+ const webmcp = toWebMcpTool(capability, {
407
+ effectId: `${predictionId(0)}-webmcp-effect`,
408
+ clock: () => now,
409
+ });
410
+ // The WebMCP adapter grants the tool's own capability itself; the MCP adapter takes the
411
+ // host's grant at construction. Both grants name the same token, so the boundary stays one.
412
+ const mcp = toMcpTool(capability.tool, {
413
+ capabilities: [capability.tool.capability],
414
+ effectId: `${predictionId(0)}-mcp-effect`,
415
+ clock: () => now,
416
+ });
417
+ const valid = { sku: "lab-sku", quantity: 2 };
418
+ const webValid = (await webmcp.execute(valid));
419
+ const mcpValid = (await mcp.handler(valid, mcpContext));
420
+ const hostiles = [
421
+ { name: "wrong-type", input: { sku: "lab-sku", quantity: "two" } },
422
+ { name: "missing-field", input: { sku: "lab-sku" } },
423
+ { name: "unknown-field", input: { sku: "lab-sku", quantity: 1, admin: true } },
424
+ { name: "empty-sku", input: { sku: "", quantity: 1 } },
425
+ { name: "non-object", input: "add-to-cart" },
426
+ ];
427
+ const mismatches = [];
428
+ if (webValid.ok !== true)
429
+ mismatches.push("webmcp rejected the valid witness");
430
+ if (mcpValid.isError === true)
431
+ mismatches.push("mcp rejected the valid witness");
432
+ if (webmcp.name !== mcp.name)
433
+ mismatches.push("projected tool names differ");
434
+ if (webmcp.description !== mcp.description)
435
+ mismatches.push("projected descriptions differ");
436
+ if (JSON.stringify(webmcp.inputSchema) !== JSON.stringify(mcp.inputSchema))
437
+ mismatches.push("projected input schemas differ");
438
+ const properties = webmcp.inputSchema.properties;
439
+ if (!isRecord(properties) ||
440
+ !Object.hasOwn(properties, "sku") ||
441
+ !Object.hasOwn(properties, "quantity"))
442
+ mismatches.push("projected input schema omits the valid witness fields");
443
+ for (const hostile of hostiles) {
444
+ const web = (await webmcp.execute(hostile.input));
445
+ const viaMcp = (await mcp.handler(hostile.input, mcpContext));
446
+ if (web.ok !== false)
447
+ mismatches.push(`webmcp accepted ${hostile.name}`);
448
+ if (viaMcp.isError !== true)
449
+ mismatches.push(`mcp accepted ${hostile.name}`);
450
+ }
451
+ const ok = mismatches.length === 0;
452
+ return {
453
+ ok,
454
+ message: ok ? "both projections share one validation boundary" : mismatches.join("; "),
455
+ };
456
+ },
457
+ },
458
+ ];
459
+ export async function runPredictionLab(options = {}) {
460
+ const seed = options.seed ?? PREDICTION_LAB_SEED;
461
+ if (!Number.isSafeInteger(seed))
462
+ throw new TypeError("prediction lab: seed must be a finite safe integer");
463
+ const requested = options.only === undefined
464
+ ? undefined
465
+ : Array.isArray(options.only)
466
+ ? [...options.only]
467
+ : [options.only];
468
+ let only;
469
+ if (requested !== undefined) {
470
+ if (requested.length === 0)
471
+ throw new TypeError("prediction lab: only must select at least one case ID");
472
+ const known = new Set(LAB_CASES.map((labCase) => labCase.id));
473
+ const unknown = requested.filter((id) => typeof id !== "string" || !known.has(id));
474
+ if (unknown.length > 0)
475
+ throw new RangeError(`prediction lab: unknown case ID(s): ${unknown.join(", ")}`);
476
+ only = new Set(requested);
477
+ }
478
+ const now = 1_700_000_000_000 + (seed % 1000);
479
+ const predictionId = (index) => `pl-${seed.toString(16)}-${index}`;
480
+ const results = [];
481
+ for (const labCase of LAB_CASES) {
482
+ if (only !== undefined && !only.has(labCase.id))
483
+ continue;
484
+ let outcome;
485
+ try {
486
+ outcome = await labCase.run({ seed, now, predictionId });
487
+ }
488
+ catch (error) {
489
+ outcome = {
490
+ ok: false,
491
+ message: error instanceof Error ? `threw: ${error.message}` : "threw an unknown value",
492
+ };
493
+ }
494
+ results.push(Object.freeze({
495
+ id: labCase.id,
496
+ target: labCase.target,
497
+ ...(labCase.mutation === undefined ? {} : { mutation: labCase.mutation }),
498
+ ok: outcome.ok,
499
+ message: outcome.message,
500
+ replay: Object.freeze({ seed, caseId: labCase.id }),
501
+ }));
502
+ }
503
+ const failures = Object.freeze(results.filter((result) => !result.ok));
504
+ return Object.freeze({
505
+ ok: failures.length === 0,
506
+ seed,
507
+ results: Object.freeze(results),
508
+ failures,
509
+ counts: Object.freeze({ passed: results.length - failures.length, failed: failures.length }),
510
+ });
511
+ }
512
+ /** Run the lab and throw a joined error on failure - the `assertAdversarialContract` shape. */
513
+ export async function assertPredictionLab(options = {}) {
514
+ const report = await runPredictionLab(options);
515
+ if (!report.ok) {
516
+ throw new Error(`Prediction lab failed: ${report.failures.map((failure) => `${failure.id} - ${failure.message} (replay seed ${report.seed})`).join("\n")}`);
517
+ }
518
+ return report;
519
+ }
520
+ /** Stable case IDs in run order. */
521
+ export const predictionLabCaseIds = Object.freeze(LAB_CASES.map((labCase) => labCase.id));
522
+ export function toPredictionLabContext(seed, labCase) {
523
+ return {
524
+ seed,
525
+ caseId: labCase.id,
526
+ target: labCase.target,
527
+ ...(labCase.mutation === undefined ? {} : { mutation: labCase.mutation }),
528
+ };
529
+ }
530
+ //# sourceMappingURL=prediction-lab.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"prediction-lab.js","sourceRoot":"","sources":["../src/prediction-lab.ts"],"names":[],"mappings":"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"}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@nifrajs/testing",
3
- "version": "3.3.0",
3
+ "version": "3.5.0",
4
4
  "description": "Contract-derived adversarial tests, runtime-matrix response conformance, and cookie-aware in-process sessions for Nifra apps.",
5
5
  "keywords": [
6
6
  "bun",
@@ -49,11 +49,12 @@
49
49
  },
50
50
  "license": "MIT",
51
51
  "dependencies": {
52
- "@nifrajs/client": "3.3.0",
53
- "@nifrajs/agent": "3.3.0",
54
- "@nifrajs/core": "3.3.0",
55
- "@nifrajs/mcp": "3.3.0",
56
- "@nifrajs/mock": "3.3.0"
52
+ "@nifrajs/client": "3.5.0",
53
+ "@nifrajs/agent": "3.5.0",
54
+ "@nifrajs/core": "3.5.0",
55
+ "@nifrajs/mcp": "3.5.0",
56
+ "@nifrajs/mock": "3.5.0",
57
+ "@nifrajs/webmcp": "3.5.0"
57
58
  },
58
59
  "peerDependencies": {
59
60
  "zod": ">=4.0.0"