@codespar/types 0.10.5 → 0.10.9
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 +1 -0
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +1 -0
- package/dist/index.js.map +1 -1
- package/dist/meta-tool-contract.d.ts +162 -0
- package/dist/meta-tool-contract.d.ts.map +1 -0
- package/dist/meta-tool-contract.js +196 -0
- package/dist/meta-tool-contract.js.map +1 -0
- package/dist/testing/conformance-kit.d.ts +101 -0
- package/dist/testing/conformance-kit.d.ts.map +1 -0
- package/dist/testing/conformance-kit.js +323 -0
- package/dist/testing/conformance-kit.js.map +1 -0
- package/dist/testing/conformance-kit.test.d.ts +18 -0
- package/dist/testing/conformance-kit.test.d.ts.map +1 -0
- package/dist/testing/conformance-kit.test.js +434 -0
- package/dist/testing/conformance-kit.test.js.map +1 -0
- package/dist/testing/contract-suite.d.ts +7 -0
- package/dist/testing/contract-suite.d.ts.map +1 -1
- package/dist/testing/contract-suite.js +16 -3
- package/dist/testing/contract-suite.js.map +1 -1
- package/dist/testing/contract-suite.test.js +96 -1
- package/dist/testing/contract-suite.test.js.map +1 -1
- package/dist/testing/index.d.ts +5 -0
- package/dist/testing/index.d.ts.map +1 -0
- package/dist/testing/index.js +8 -0
- package/dist/testing/index.js.map +1 -0
- package/dist/types.d.ts +91 -0
- package/dist/types.d.ts.map +1 -1
- package/package.json +13 -1
|
@@ -0,0 +1,434 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Unit tests for the meta-tool conformance kit.
|
|
3
|
+
*
|
|
4
|
+
* The kit's value is its pass/fail logic: a conforming implementation
|
|
5
|
+
* passes, and an implementation that violates a wire shape, an action-state
|
|
6
|
+
* rule, or an error rule fails — with a violation naming the specific
|
|
7
|
+
* breach. We prove that two ways without a real backend:
|
|
8
|
+
*
|
|
9
|
+
* 1. The pure verification core (`checkWireShape`, `checkActionResult`,
|
|
10
|
+
* `checkUnregisteredError`, `checkMalformedError`) is exercised
|
|
11
|
+
* directly against hand-built conforming and violating envelopes.
|
|
12
|
+
* 2. The live suite (`runMetaToolConformanceSuite`) is run end-to-end
|
|
13
|
+
* against a FAKE backend (a stubbed `fetch`), asserting that a
|
|
14
|
+
* conforming fake registers passing cases and a fake that breaks each
|
|
15
|
+
* rule registers a failing case carrying the right violation.
|
|
16
|
+
*/
|
|
17
|
+
import { describe, it, expect, vi, afterEach } from "vitest";
|
|
18
|
+
import { SHOP_CONTRACT, DISCOVER_CONTRACT } from "../meta-tool-contract.js";
|
|
19
|
+
import { fieldMatches, checkWireShape, checkActionResult, checkSingleShotResult, checkUnregisteredError, checkMalformedError, formatViolations, } from "./conformance-kit.js";
|
|
20
|
+
/* ── fieldMatches ────────────────────────────────────────────── */
|
|
21
|
+
describe("fieldMatches", () => {
|
|
22
|
+
it("matches each JSON-value kind", () => {
|
|
23
|
+
expect(fieldMatches({ name: "x", kind: "string" }, "a")).toBe(true);
|
|
24
|
+
expect(fieldMatches({ name: "x", kind: "number" }, 1)).toBe(true);
|
|
25
|
+
expect(fieldMatches({ name: "x", kind: "boolean" }, true)).toBe(true);
|
|
26
|
+
expect(fieldMatches({ name: "x", kind: "array" }, [])).toBe(true);
|
|
27
|
+
expect(fieldMatches({ name: "x", kind: "object" }, {})).toBe(true);
|
|
28
|
+
});
|
|
29
|
+
it("rejects mismatched kinds", () => {
|
|
30
|
+
expect(fieldMatches({ name: "x", kind: "string" }, 1)).toBe(false);
|
|
31
|
+
expect(fieldMatches({ name: "x", kind: "number" }, "1")).toBe(false);
|
|
32
|
+
expect(fieldMatches({ name: "x", kind: "array" }, {})).toBe(false);
|
|
33
|
+
expect(fieldMatches({ name: "x", kind: "object" }, [])).toBe(false);
|
|
34
|
+
expect(fieldMatches({ name: "x", kind: "object" }, null)).toBe(false);
|
|
35
|
+
});
|
|
36
|
+
it("constrains string-enum to the closed value set", () => {
|
|
37
|
+
const rule = {
|
|
38
|
+
name: "status",
|
|
39
|
+
kind: "string-enum",
|
|
40
|
+
values: ["in_progress", "ready_for_payment"],
|
|
41
|
+
};
|
|
42
|
+
expect(fieldMatches(rule, "ready_for_payment")).toBe(true);
|
|
43
|
+
expect(fieldMatches(rule, "canceled")).toBe(false);
|
|
44
|
+
expect(fieldMatches(rule, 1)).toBe(false);
|
|
45
|
+
});
|
|
46
|
+
});
|
|
47
|
+
/* ── checkWireShape ──────────────────────────────────────────── */
|
|
48
|
+
describe("checkWireShape", () => {
|
|
49
|
+
const shape = {
|
|
50
|
+
name: "ShopSearchResult",
|
|
51
|
+
fields: [
|
|
52
|
+
{ name: "rail", kind: "string" },
|
|
53
|
+
{ name: "products", kind: "array" },
|
|
54
|
+
],
|
|
55
|
+
};
|
|
56
|
+
it("passes a conforming object", () => {
|
|
57
|
+
expect(checkWireShape(shape, { rail: "vtex", products: [] })).toEqual([]);
|
|
58
|
+
});
|
|
59
|
+
it("allows extra optional fields beyond the shape (subset-shape)", () => {
|
|
60
|
+
expect(checkWireShape(shape, { rail: "vtex", products: [], extra: 7 })).toEqual([]);
|
|
61
|
+
});
|
|
62
|
+
it("flags a missing required field with the field name", () => {
|
|
63
|
+
const violations = checkWireShape(shape, { rail: "vtex" });
|
|
64
|
+
expect(violations).toHaveLength(1);
|
|
65
|
+
expect(violations[0].code).toBe("wire-shape");
|
|
66
|
+
expect(violations[0].detail).toContain("ShopSearchResult.products");
|
|
67
|
+
expect(violations[0].detail).toContain("missing");
|
|
68
|
+
});
|
|
69
|
+
it("flags a wrong-typed field with expected vs got", () => {
|
|
70
|
+
const violations = checkWireShape(shape, { rail: 7, products: [] });
|
|
71
|
+
expect(violations).toHaveLength(1);
|
|
72
|
+
expect(violations[0].detail).toContain("ShopSearchResult.rail");
|
|
73
|
+
expect(violations[0].detail).toContain("expected string");
|
|
74
|
+
});
|
|
75
|
+
it("flags a non-object as a single violation", () => {
|
|
76
|
+
expect(checkWireShape(shape, "nope")[0].detail).toContain("expected an object");
|
|
77
|
+
expect(checkWireShape(shape, [])[0].detail).toContain("expected an object");
|
|
78
|
+
});
|
|
79
|
+
it("skips an absent optional field", () => {
|
|
80
|
+
const optShape = {
|
|
81
|
+
name: "S",
|
|
82
|
+
fields: [{ name: "maybe", kind: "string", required: false }],
|
|
83
|
+
};
|
|
84
|
+
expect(checkWireShape(optShape, {})).toEqual([]);
|
|
85
|
+
});
|
|
86
|
+
});
|
|
87
|
+
/* ── checkActionResult ───────────────────────────────────────── */
|
|
88
|
+
function okResult(data) {
|
|
89
|
+
return {
|
|
90
|
+
success: true,
|
|
91
|
+
data,
|
|
92
|
+
error: "",
|
|
93
|
+
duration: 1,
|
|
94
|
+
server: "fake",
|
|
95
|
+
tool: "codespar_shop",
|
|
96
|
+
};
|
|
97
|
+
}
|
|
98
|
+
function errResult(error) {
|
|
99
|
+
return {
|
|
100
|
+
success: false,
|
|
101
|
+
data: {},
|
|
102
|
+
error,
|
|
103
|
+
duration: 0,
|
|
104
|
+
server: "fake",
|
|
105
|
+
tool: "codespar_shop",
|
|
106
|
+
};
|
|
107
|
+
}
|
|
108
|
+
describe("checkActionResult", () => {
|
|
109
|
+
it("passes a conforming shop search result", () => {
|
|
110
|
+
const result = okResult({ rail: "vtex", products: [] });
|
|
111
|
+
expect(checkActionResult(SHOP_CONTRACT, "search", result)).toEqual([]);
|
|
112
|
+
});
|
|
113
|
+
it("flags a checkout result whose status is outside the enum", () => {
|
|
114
|
+
// checkout must return status "in_progress" only.
|
|
115
|
+
const result = okResult({
|
|
116
|
+
checkout_session_id: "cks_1",
|
|
117
|
+
status: "ready_for_payment",
|
|
118
|
+
});
|
|
119
|
+
const violations = checkActionResult(SHOP_CONTRACT, "checkout", result);
|
|
120
|
+
expect(violations).toHaveLength(1);
|
|
121
|
+
expect(violations[0].code).toBe("wire-shape");
|
|
122
|
+
expect(violations[0].detail).toContain("status");
|
|
123
|
+
expect(violations[0].detail).toContain("in_progress");
|
|
124
|
+
});
|
|
125
|
+
it("passes the terminal ready_for_payment checkout_status", () => {
|
|
126
|
+
const result = okResult({
|
|
127
|
+
checkout_session_id: "cks_1",
|
|
128
|
+
status: "ready_for_payment",
|
|
129
|
+
});
|
|
130
|
+
expect(checkActionResult(SHOP_CONTRACT, "checkout_status", result)).toEqual([]);
|
|
131
|
+
});
|
|
132
|
+
it("flags a checkout_status whose status is not a known state", () => {
|
|
133
|
+
const result = okResult({
|
|
134
|
+
checkout_session_id: "cks_1",
|
|
135
|
+
status: "exploded",
|
|
136
|
+
});
|
|
137
|
+
const violations = checkActionResult(SHOP_CONTRACT, "checkout_status", result);
|
|
138
|
+
expect(violations[0].detail).toContain("status");
|
|
139
|
+
});
|
|
140
|
+
it("flags a success-expected action that returned an error", () => {
|
|
141
|
+
const violations = checkActionResult(SHOP_CONTRACT, "search", errResult("boom"));
|
|
142
|
+
expect(violations).toHaveLength(1);
|
|
143
|
+
expect(violations[0].code).toBe("action-state");
|
|
144
|
+
expect(violations[0].detail).toContain("boom");
|
|
145
|
+
});
|
|
146
|
+
it("flags an action that is not in the state machine", () => {
|
|
147
|
+
const violations = checkActionResult(SHOP_CONTRACT, "teleport", okResult({}));
|
|
148
|
+
expect(violations[0].code).toBe("action-state");
|
|
149
|
+
expect(violations[0].detail).toContain("teleport");
|
|
150
|
+
});
|
|
151
|
+
});
|
|
152
|
+
/* ── checkSingleShotResult (the Fix #1 teeth) ────────────────── */
|
|
153
|
+
describe("checkSingleShotResult", () => {
|
|
154
|
+
const conformingDiscover = okResult({
|
|
155
|
+
use_case: "buy cat food",
|
|
156
|
+
search_strategy: "embedding",
|
|
157
|
+
recommended: null,
|
|
158
|
+
related: [],
|
|
159
|
+
next_steps: [],
|
|
160
|
+
});
|
|
161
|
+
it("passes a conforming DiscoverResult", () => {
|
|
162
|
+
expect(checkSingleShotResult(DISCOVER_CONTRACT, conformingDiscover)).toEqual([]);
|
|
163
|
+
});
|
|
164
|
+
it("flags a scalar result that succeeded but is not the wire shape", () => {
|
|
165
|
+
// The exact hole the validation spike found: a single-shot tool
|
|
166
|
+
// returning `output: 42` used to pass on success alone.
|
|
167
|
+
const violations = checkSingleShotResult(DISCOVER_CONTRACT, okResult(42));
|
|
168
|
+
expect(violations.length).toBeGreaterThan(0);
|
|
169
|
+
expect(violations[0].code).toBe("wire-shape");
|
|
170
|
+
expect(violations[0].detail).toContain("expected an object");
|
|
171
|
+
});
|
|
172
|
+
it("flags a missing required field", () => {
|
|
173
|
+
const violations = checkSingleShotResult(DISCOVER_CONTRACT, okResult({
|
|
174
|
+
use_case: "x",
|
|
175
|
+
search_strategy: "embedding",
|
|
176
|
+
related: [],
|
|
177
|
+
// next_steps missing
|
|
178
|
+
}));
|
|
179
|
+
expect(violations[0].code).toBe("wire-shape");
|
|
180
|
+
expect(violations[0].detail).toContain("DiscoverResult.next_steps");
|
|
181
|
+
});
|
|
182
|
+
it("flags a search_strategy outside the enum", () => {
|
|
183
|
+
const violations = checkSingleShotResult(DISCOVER_CONTRACT, okResult({
|
|
184
|
+
use_case: "x",
|
|
185
|
+
search_strategy: "vibes",
|
|
186
|
+
recommended: null,
|
|
187
|
+
related: [],
|
|
188
|
+
next_steps: [],
|
|
189
|
+
}));
|
|
190
|
+
expect(violations[0].detail).toContain("search_strategy");
|
|
191
|
+
});
|
|
192
|
+
it("flags a success-expected single-shot tool that returned an error", () => {
|
|
193
|
+
const violations = checkSingleShotResult(DISCOVER_CONTRACT, errResult("boom"));
|
|
194
|
+
expect(violations[0].code).toBe("wire-shape");
|
|
195
|
+
expect(violations[0].detail).toContain("boom");
|
|
196
|
+
});
|
|
197
|
+
});
|
|
198
|
+
/* ── error rules ─────────────────────────────────────────────── */
|
|
199
|
+
describe("checkUnregisteredError", () => {
|
|
200
|
+
it("passes the canonical 'Tool not registered' envelope", () => {
|
|
201
|
+
const result = errResult("Tool not registered: codespar_shop__probe");
|
|
202
|
+
expect(checkUnregisteredError(SHOP_CONTRACT, result)).toEqual([]);
|
|
203
|
+
});
|
|
204
|
+
it("flags a success result where an unregistered error was due", () => {
|
|
205
|
+
const violations = checkUnregisteredError(SHOP_CONTRACT, okResult({}));
|
|
206
|
+
expect(violations[0].code).toBe("error-unregistered");
|
|
207
|
+
expect(violations[0].detail).toContain("success result");
|
|
208
|
+
});
|
|
209
|
+
it("flags the wrong error message", () => {
|
|
210
|
+
const violations = checkUnregisteredError(SHOP_CONTRACT, errResult("404: not found"));
|
|
211
|
+
expect(violations[0].code).toBe("error-unregistered");
|
|
212
|
+
expect(violations[0].detail).toContain("Tool not registered");
|
|
213
|
+
});
|
|
214
|
+
});
|
|
215
|
+
describe("checkMalformedError", () => {
|
|
216
|
+
it("passes a typed error envelope", () => {
|
|
217
|
+
expect(checkMalformedError(SHOP_CONTRACT, errResult("query: required"))).toEqual([]);
|
|
218
|
+
});
|
|
219
|
+
it("flags a success result for malformed input", () => {
|
|
220
|
+
const violations = checkMalformedError(SHOP_CONTRACT, okResult({}));
|
|
221
|
+
expect(violations[0].code).toBe("error-malformed");
|
|
222
|
+
expect(violations[0].detail).toContain("success result");
|
|
223
|
+
});
|
|
224
|
+
it("flags an empty error string", () => {
|
|
225
|
+
const violations = checkMalformedError(SHOP_CONTRACT, errResult(""));
|
|
226
|
+
expect(violations[0].code).toBe("error-malformed");
|
|
227
|
+
});
|
|
228
|
+
});
|
|
229
|
+
describe("formatViolations", () => {
|
|
230
|
+
it("renders 'no violations' for an empty list", () => {
|
|
231
|
+
expect(formatViolations([])).toBe("no violations");
|
|
232
|
+
});
|
|
233
|
+
it("joins violations with their codes", () => {
|
|
234
|
+
const vs = [
|
|
235
|
+
{ code: "wire-shape", detail: "a" },
|
|
236
|
+
{ code: "action-state", detail: "b" },
|
|
237
|
+
];
|
|
238
|
+
expect(formatViolations(vs)).toBe("[wire-shape] a; [action-state] b");
|
|
239
|
+
});
|
|
240
|
+
});
|
|
241
|
+
/** Install a `fetch` stub that routes session-create/execute/delete to a
|
|
242
|
+
* fake backend's `execute`. Returns a teardown. */
|
|
243
|
+
function installFakeBackend(execute) {
|
|
244
|
+
const stub = vi.fn(async (url, init) => {
|
|
245
|
+
const u = String(url);
|
|
246
|
+
if (u.endsWith("/v1/sessions") && init?.method === "POST") {
|
|
247
|
+
return jsonResponse({ id: "sess_fake", status: "active" });
|
|
248
|
+
}
|
|
249
|
+
if (u.includes("/execute")) {
|
|
250
|
+
const body = JSON.parse(String(init?.body ?? "{}"));
|
|
251
|
+
return jsonResponse(execute(body.tool, body.input ?? {}));
|
|
252
|
+
}
|
|
253
|
+
// DELETE close
|
|
254
|
+
return jsonResponse({});
|
|
255
|
+
});
|
|
256
|
+
const original = globalThis.fetch;
|
|
257
|
+
globalThis.fetch = stub;
|
|
258
|
+
return () => {
|
|
259
|
+
globalThis.fetch = original;
|
|
260
|
+
};
|
|
261
|
+
}
|
|
262
|
+
function jsonResponse(body) {
|
|
263
|
+
return new Response(JSON.stringify(body), {
|
|
264
|
+
status: 200,
|
|
265
|
+
headers: { "Content-Type": "application/json" },
|
|
266
|
+
});
|
|
267
|
+
}
|
|
268
|
+
/** Run the suite under a mocked Vitest that executes each registered `it`
|
|
269
|
+
* body and records pass/fail (a thrown/rejected assertion = fail). Returns
|
|
270
|
+
* one entry per registered case. */
|
|
271
|
+
async function runSuiteAndCollect(tool) {
|
|
272
|
+
vi.resetModules();
|
|
273
|
+
const cases = [];
|
|
274
|
+
const afterEachFns = [];
|
|
275
|
+
// Real expect so assertions actually fire inside the case bodies.
|
|
276
|
+
const realExpect = (await vi.importActual("vitest")).expect;
|
|
277
|
+
vi.doMock("vitest", () => ({
|
|
278
|
+
describe: (_name, fn) => fn(),
|
|
279
|
+
it: (name, fn) => {
|
|
280
|
+
cases.push(async () => {
|
|
281
|
+
try {
|
|
282
|
+
await fn();
|
|
283
|
+
return { name, passed: true };
|
|
284
|
+
}
|
|
285
|
+
catch (err) {
|
|
286
|
+
return {
|
|
287
|
+
name,
|
|
288
|
+
passed: false,
|
|
289
|
+
error: err instanceof Error ? err.message : String(err),
|
|
290
|
+
};
|
|
291
|
+
}
|
|
292
|
+
finally {
|
|
293
|
+
for (const a of afterEachFns)
|
|
294
|
+
await a();
|
|
295
|
+
}
|
|
296
|
+
});
|
|
297
|
+
},
|
|
298
|
+
afterEach: (fn) => {
|
|
299
|
+
afterEachFns.push(fn);
|
|
300
|
+
},
|
|
301
|
+
expect: realExpect,
|
|
302
|
+
}));
|
|
303
|
+
const mod = await import("./conformance-kit.js");
|
|
304
|
+
mod.runMetaToolConformanceSuite("http://localhost:9999", "csk_test", { tool });
|
|
305
|
+
const results = [];
|
|
306
|
+
for (const c of cases)
|
|
307
|
+
results.push(await c());
|
|
308
|
+
vi.doUnmock("vitest");
|
|
309
|
+
return results;
|
|
310
|
+
}
|
|
311
|
+
/** A fully conforming fake backend for codespar_shop. */
|
|
312
|
+
const conformingShop = (tool, input) => {
|
|
313
|
+
if (tool.endsWith("__unregistered_probe")) {
|
|
314
|
+
return errResult(`Tool not registered: ${tool}`);
|
|
315
|
+
}
|
|
316
|
+
const action = input.action;
|
|
317
|
+
// Malformed: search with no query.
|
|
318
|
+
if (action === "search" && !input.query) {
|
|
319
|
+
return errResult("query: required");
|
|
320
|
+
}
|
|
321
|
+
if (action === "search")
|
|
322
|
+
return okResult({ rail: "vtex", products: [] });
|
|
323
|
+
if (action === "checkout") {
|
|
324
|
+
return okResult({ checkout_session_id: "cks_1", status: "in_progress" });
|
|
325
|
+
}
|
|
326
|
+
if (action === "checkout_status") {
|
|
327
|
+
return okResult({
|
|
328
|
+
checkout_session_id: "cks_1",
|
|
329
|
+
status: "ready_for_payment",
|
|
330
|
+
});
|
|
331
|
+
}
|
|
332
|
+
return errResult("unknown action");
|
|
333
|
+
};
|
|
334
|
+
describe("runMetaToolConformanceSuite against a fake backend", () => {
|
|
335
|
+
let teardown = null;
|
|
336
|
+
afterEach(() => {
|
|
337
|
+
teardown?.();
|
|
338
|
+
teardown = null;
|
|
339
|
+
});
|
|
340
|
+
it("a conforming fake passes every registered case", async () => {
|
|
341
|
+
teardown = installFakeBackend(conformingShop);
|
|
342
|
+
const results = await runSuiteAndCollect("codespar_shop");
|
|
343
|
+
const failures = results.filter((r) => !r.passed);
|
|
344
|
+
expect(failures, JSON.stringify(failures, null, 2)).toEqual([]);
|
|
345
|
+
// Sanity: it actually registered cases (3 actions + 2 error legs).
|
|
346
|
+
expect(results.length).toBe(5);
|
|
347
|
+
});
|
|
348
|
+
it("fails the wire-shape case when an action returns the wrong shape", async () => {
|
|
349
|
+
// search returns a number for `rail` — a wire-shape violation.
|
|
350
|
+
teardown = installFakeBackend((tool, input) => input.action === "search" && input.query
|
|
351
|
+
? okResult({ rail: 7, products: [] })
|
|
352
|
+
: conformingShop(tool, input));
|
|
353
|
+
const results = await runSuiteAndCollect("codespar_shop");
|
|
354
|
+
const searchCase = results.find((r) => r.name.includes('"search"'));
|
|
355
|
+
expect(searchCase?.passed).toBe(false);
|
|
356
|
+
expect(searchCase?.error).toContain("ShopSearchResult.rail");
|
|
357
|
+
});
|
|
358
|
+
it("fails the action-state case when checkout reports a terminal status early", async () => {
|
|
359
|
+
teardown = installFakeBackend((tool, input) => input.action === "checkout"
|
|
360
|
+
? okResult({ checkout_session_id: "cks_1", status: "ready_for_payment" })
|
|
361
|
+
: conformingShop(tool, input));
|
|
362
|
+
const results = await runSuiteAndCollect("codespar_shop");
|
|
363
|
+
const checkoutCase = results.find((r) => r.name.includes('"checkout"'));
|
|
364
|
+
expect(checkoutCase?.passed).toBe(false);
|
|
365
|
+
expect(checkoutCase?.error).toContain("status");
|
|
366
|
+
});
|
|
367
|
+
it("fails the unregistered-error case when the runtime swallows it", async () => {
|
|
368
|
+
teardown = installFakeBackend((tool, input) => tool.endsWith("__unregistered_probe")
|
|
369
|
+
? okResult({ rail: "vtex", products: [] }) // wrongly succeeds
|
|
370
|
+
: conformingShop(tool, input));
|
|
371
|
+
const results = await runSuiteAndCollect("codespar_shop");
|
|
372
|
+
const unregCase = results.find((r) => r.name.includes("unregistered"));
|
|
373
|
+
expect(unregCase?.passed).toBe(false);
|
|
374
|
+
expect(unregCase?.error).toContain("error-unregistered");
|
|
375
|
+
});
|
|
376
|
+
it("fails the malformed-error case when the runtime accepts bad input", async () => {
|
|
377
|
+
teardown = installFakeBackend((tool, input) => input.action === "search" && !input.query
|
|
378
|
+
? okResult({ rail: "vtex", products: [] }) // wrongly succeeds on empty query
|
|
379
|
+
: conformingShop(tool, input));
|
|
380
|
+
const results = await runSuiteAndCollect("codespar_shop");
|
|
381
|
+
const malformedCase = results.find((r) => r.name.includes("malformed"));
|
|
382
|
+
expect(malformedCase?.passed).toBe(false);
|
|
383
|
+
expect(malformedCase?.error).toContain("malformed input");
|
|
384
|
+
});
|
|
385
|
+
it("drives a single-shot tool (discover) with no state machine", async () => {
|
|
386
|
+
teardown = installFakeBackend((tool, input) => {
|
|
387
|
+
if (tool.endsWith("__unregistered_probe")) {
|
|
388
|
+
return {
|
|
389
|
+
...errResult(`Tool not registered: ${tool}`),
|
|
390
|
+
tool,
|
|
391
|
+
};
|
|
392
|
+
}
|
|
393
|
+
// Malformed discover: empty input.
|
|
394
|
+
if (!input.use_case)
|
|
395
|
+
return errResult("use_case: required");
|
|
396
|
+
return okResult({
|
|
397
|
+
use_case: input.use_case,
|
|
398
|
+
search_strategy: "embedding",
|
|
399
|
+
recommended: null,
|
|
400
|
+
related: [],
|
|
401
|
+
next_steps: [],
|
|
402
|
+
});
|
|
403
|
+
});
|
|
404
|
+
const results = await runSuiteAndCollect("codespar_discover");
|
|
405
|
+
const failures = results.filter((r) => !r.passed);
|
|
406
|
+
expect(failures, JSON.stringify(failures, null, 2)).toEqual([]);
|
|
407
|
+
// 1 single-shot case + 2 error legs.
|
|
408
|
+
expect(results.length).toBe(3);
|
|
409
|
+
expect(DISCOVER_CONTRACT.stateMachine).toBeUndefined();
|
|
410
|
+
});
|
|
411
|
+
it("fails the single-shot case when a no-state-machine tool returns the wrong shape", async () => {
|
|
412
|
+
// Regression guard for the hollow-green hole: discover used to pass on
|
|
413
|
+
// `success: true` alone, so a scalar `output: 42` slipped through. With
|
|
414
|
+
// the descriptor's single-shot wire shape the case must now FAIL.
|
|
415
|
+
teardown = installFakeBackend((tool, input) => {
|
|
416
|
+
if (tool.endsWith("__unregistered_probe")) {
|
|
417
|
+
return { ...errResult(`Tool not registered: ${tool}`), tool };
|
|
418
|
+
}
|
|
419
|
+
if (!input.use_case)
|
|
420
|
+
return errResult("use_case: required");
|
|
421
|
+
// Succeeds, but the payload is a scalar — not a DiscoverResult.
|
|
422
|
+
return okResult(42);
|
|
423
|
+
});
|
|
424
|
+
const results = await runSuiteAndCollect("codespar_discover");
|
|
425
|
+
const happyPath = results.find((r) => r.name.includes("DiscoverResult"));
|
|
426
|
+
expect(happyPath?.passed).toBe(false);
|
|
427
|
+
expect(happyPath?.error).toContain("wire-shape");
|
|
428
|
+
expect(happyPath?.error).toContain("expected an object");
|
|
429
|
+
// The two error legs still pass — only the wire-shape teeth bite.
|
|
430
|
+
const otherFailures = results.filter((r) => !r.passed && !r.name.includes("DiscoverResult"));
|
|
431
|
+
expect(otherFailures, JSON.stringify(otherFailures, null, 2)).toEqual([]);
|
|
432
|
+
});
|
|
433
|
+
});
|
|
434
|
+
//# sourceMappingURL=conformance-kit.test.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"conformance-kit.test.js","sourceRoot":"","sources":["../../src/testing/conformance-kit.test.ts"],"names":[],"mappings":"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"}
|
|
@@ -28,6 +28,13 @@ export declare function buildSessionCreateBody(opts?: ContractSuiteOptions): {
|
|
|
28
28
|
export declare class InvalidBaseUrlError extends Error {
|
|
29
29
|
constructor(url: string);
|
|
30
30
|
}
|
|
31
|
+
/**
|
|
32
|
+
* Validate a backend base URL before any request is issued: only https://
|
|
33
|
+
* URLs and localhost are accepted, so a misconfigured environment fails
|
|
34
|
+
* early rather than leaking the apiKey to an arbitrary host. Shared by the
|
|
35
|
+
* meta-tool conformance kit.
|
|
36
|
+
*/
|
|
37
|
+
export declare function validateBaseUrl(rawUrl: string): void;
|
|
31
38
|
/**
|
|
32
39
|
* Register the full session contract test suite against a live backend.
|
|
33
40
|
*
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"contract-suite.d.ts","sourceRoot":"","sources":["../../src/testing/contract-suite.ts"],"names":[],"mappings":"AAGA,6CAA6C;AAC7C,MAAM,MAAM,WAAW,GAAG,SAAS,GAAG,MAAM,GAAG,YAAY,GAAG,aAAa,GAAG,OAAO,CAAC;AAEtF,4CAA4C;AAC5C,MAAM,WAAW,oBAAoB;IACnC;;;;OAIG;IACH,OAAO,CAAC,EAAE,MAAM,EAAE,CAAC;IACnB;;;;OAIG;IACH,IAAI,CAAC,EAAE,WAAW,EAAE,CAAC;CACtB;AAWD;;;GAGG;AACH,wBAAgB,UAAU,CAAC,IAAI,CAAC,EAAE,oBAAoB,GAAG,WAAW,EAAE,CAErE;AAED,2EAA2E;AAC3E,wBAAgB,sBAAsB,CAAC,IAAI,CAAC,EAAE,oBAAoB,GAAG;IACnE,OAAO,EAAE,MAAM,EAAE,CAAC;IAClB,OAAO,EAAE,MAAM,CAAC;CACjB,CAEA;AAED,qBAAa,mBAAoB,SAAQ,KAAK;gBAChC,GAAG,EAAE,MAAM;CAMxB;
|
|
1
|
+
{"version":3,"file":"contract-suite.d.ts","sourceRoot":"","sources":["../../src/testing/contract-suite.ts"],"names":[],"mappings":"AAGA,6CAA6C;AAC7C,MAAM,MAAM,WAAW,GAAG,SAAS,GAAG,MAAM,GAAG,YAAY,GAAG,aAAa,GAAG,OAAO,CAAC;AAEtF,4CAA4C;AAC5C,MAAM,WAAW,oBAAoB;IACnC;;;;OAIG;IACH,OAAO,CAAC,EAAE,MAAM,EAAE,CAAC;IACnB;;;;OAIG;IACH,IAAI,CAAC,EAAE,WAAW,EAAE,CAAC;CACtB;AAWD;;;GAGG;AACH,wBAAgB,UAAU,CAAC,IAAI,CAAC,EAAE,oBAAoB,GAAG,WAAW,EAAE,CAErE;AAED,2EAA2E;AAC3E,wBAAgB,sBAAsB,CAAC,IAAI,CAAC,EAAE,oBAAoB,GAAG;IACnE,OAAO,EAAE,MAAM,EAAE,CAAC;IAClB,OAAO,EAAE,MAAM,CAAC;CACjB,CAEA;AAED,qBAAa,mBAAoB,SAAQ,KAAK;gBAChC,GAAG,EAAE,MAAM;CAMxB;AAED;;;;;GAKG;AACH,wBAAgB,eAAe,CAAC,MAAM,EAAE,MAAM,GAAG,IAAI,CAUpD;AA2JD;;;;;;;;;;;;;;;;GAgBG;AACH,wBAAgB,gBAAgB,CAC9B,OAAO,EAAE,MAAM,EACf,MAAM,EAAE,MAAM,EACd,IAAI,CAAC,EAAE,oBAAoB,GAC1B,IAAI,CAiGN"}
|
|
@@ -24,7 +24,13 @@ export class InvalidBaseUrlError extends Error {
|
|
|
24
24
|
this.name = "InvalidBaseUrlError";
|
|
25
25
|
}
|
|
26
26
|
}
|
|
27
|
-
|
|
27
|
+
/**
|
|
28
|
+
* Validate a backend base URL before any request is issued: only https://
|
|
29
|
+
* URLs and localhost are accepted, so a misconfigured environment fails
|
|
30
|
+
* early rather than leaking the apiKey to an arbitrary host. Shared by the
|
|
31
|
+
* meta-tool conformance kit.
|
|
32
|
+
*/
|
|
33
|
+
export function validateBaseUrl(rawUrl) {
|
|
28
34
|
let parsed;
|
|
29
35
|
try {
|
|
30
36
|
parsed = new URL(rawUrl);
|
|
@@ -222,10 +228,17 @@ export function runContractSuite(baseUrl, apiKey, opts) {
|
|
|
222
228
|
it("execute() calls a registered tool and returns a ToolResult", async () => {
|
|
223
229
|
session = await openSession(baseUrl, apiKey, opts);
|
|
224
230
|
const result = await session.execute("codespar_list_tools", {});
|
|
231
|
+
// codespar_list_tools is a built-in that always succeeds, so this is
|
|
232
|
+
// a no-error result: error is the canonical `null` (matching the
|
|
233
|
+
// published `error: string | null` wire type), not `""`. Asserting
|
|
234
|
+
// `null` pins both runtimes to the same no-error value — an earlier
|
|
235
|
+
// `expect.anything()` here both read backwards (it demanded a
|
|
236
|
+
// non-null error on a success) and masked an OSS/managed divergence,
|
|
237
|
+
// since `expect.anything()` rejects `null`.
|
|
225
238
|
expect(result).toMatchObject({
|
|
226
|
-
success:
|
|
239
|
+
success: true,
|
|
227
240
|
data: expect.anything(),
|
|
228
|
-
error:
|
|
241
|
+
error: null,
|
|
229
242
|
duration: expect.any(Number),
|
|
230
243
|
server: expect.any(String),
|
|
231
244
|
tool: expect.any(String),
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"contract-suite.js","sourceRoot":"","sources":["../../src/testing/contract-suite.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,QAAQ,EAAE,EAAE,EAAE,MAAM,EAAE,SAAS,EAAE,MAAM,QAAQ,CAAC;AAsBzD,qEAAqE;AACrE,MAAM,QAAQ,GAA2B;IACvC,SAAS;IACT,MAAM;IACN,YAAY;IACZ,aAAa;IACb,OAAO;CACR,CAAC;AAEF;;;GAGG;AACH,MAAM,UAAU,UAAU,CAAC,IAA2B;IACpD,OAAO,IAAI,EAAE,IAAI,CAAC,CAAC,CAAC,CAAC,GAAG,IAAI,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,CAAC,GAAG,QAAQ,CAAC,CAAC;AACrD,CAAC;AAED,2EAA2E;AAC3E,MAAM,UAAU,sBAAsB,CAAC,IAA2B;IAIhE,OAAO,EAAE,OAAO,EAAE,IAAI,EAAE,OAAO,IAAI,EAAE,EAAE,OAAO,EAAE,gBAAgB,EAAE,CAAC;AACrE,CAAC;AAED,MAAM,OAAO,mBAAoB,SAAQ,KAAK;IAC5C,YAAY,GAAW;QACrB,KAAK,CACH,qBAAqB,GAAG,6DAA6D,CACtF,CAAC;QACF,IAAI,CAAC,IAAI,GAAG,qBAAqB,CAAC;IACpC,CAAC;CACF;AAED,
|
|
1
|
+
{"version":3,"file":"contract-suite.js","sourceRoot":"","sources":["../../src/testing/contract-suite.ts"],"names":[],"mappings":"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"}
|