@codespar/types 0.10.7 → 0.10.10
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-definitions.d.ts +52 -0
- package/dist/meta-tool-definitions.d.ts.map +1 -0
- package/dist/meta-tool-definitions.js +92 -0
- package/dist/meta-tool-definitions.js.map +1 -0
- package/dist/meta-tool-definitions.test.d.ts +2 -0
- package/dist/meta-tool-definitions.test.d.ts.map +1 -0
- package/dist/meta-tool-definitions.test.js +30 -0
- package/dist/meta-tool-definitions.test.js.map +1 -0
- package/dist/testing/contract-suite.d.ts.map +1 -1
- package/dist/testing/contract-suite.js +9 -2
- 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/demo-scenario.d.ts +51 -0
- package/dist/testing/demo-scenario.d.ts.map +1 -0
- package/dist/testing/demo-scenario.js +89 -0
- package/dist/testing/demo-scenario.js.map +1 -0
- package/dist/testing/demo-scenario.test.d.ts +2 -0
- package/dist/testing/demo-scenario.test.d.ts.map +1 -0
- package/dist/testing/demo-scenario.test.js +68 -0
- package/dist/testing/demo-scenario.test.js.map +1 -0
- package/dist/testing/demo-scenarios/service-invoice.d.ts +3 -0
- package/dist/testing/demo-scenarios/service-invoice.d.ts.map +1 -0
- package/dist/testing/demo-scenarios/service-invoice.js +83 -0
- package/dist/testing/demo-scenarios/service-invoice.js.map +1 -0
- package/dist/testing/index.d.ts +2 -0
- package/dist/testing/index.d.ts.map +1 -1
- package/dist/testing/index.js +2 -0
- package/dist/testing/index.js.map +1 -1
- package/package.json +1 -1
package/dist/index.d.ts
CHANGED
package/dist/index.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA,cAAc,YAAY,CAAC;AAC3B,cAAc,aAAa,CAAC;AAC5B,cAAc,yBAAyB,CAAC"}
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA,cAAc,YAAY,CAAC;AAC3B,cAAc,aAAa,CAAC;AAC5B,cAAc,yBAAyB,CAAC;AACxC,cAAc,4BAA4B,CAAC"}
|
package/dist/index.js
CHANGED
package/dist/index.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA,cAAc,YAAY,CAAC;AAC3B,cAAc,aAAa,CAAC;AAC5B,cAAc,yBAAyB,CAAC"}
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA,cAAc,YAAY,CAAC;AAC3B,cAAc,aAAa,CAAC;AAC5B,cAAc,yBAAyB,CAAC;AACxC,cAAc,4BAA4B,CAAC"}
|
|
@@ -0,0 +1,52 @@
|
|
|
1
|
+
/** A single input property's wire description. */
|
|
2
|
+
export interface MetaToolInputProperty {
|
|
3
|
+
/** JSON-value type: "string" | "number" | "boolean" | "object" | "array". */
|
|
4
|
+
type: string;
|
|
5
|
+
/** Human-readable description shown to the agent. */
|
|
6
|
+
description?: string;
|
|
7
|
+
}
|
|
8
|
+
/** The JSON-Schema-shaped input contract an agent-facing meta-tool advertises. */
|
|
9
|
+
export interface MetaToolInputSchema {
|
|
10
|
+
type: "object";
|
|
11
|
+
properties: Record<string, MetaToolInputProperty>;
|
|
12
|
+
/** Property names that must be supplied. */
|
|
13
|
+
required?: readonly string[];
|
|
14
|
+
}
|
|
15
|
+
/**
|
|
16
|
+
* The conformance surface of a definition: the property names a conforming
|
|
17
|
+
* implementation must expose and the subset that is required. A conformance
|
|
18
|
+
* test compares a live runtime's tool against this — structural, not prose —
|
|
19
|
+
* so two runtimes prove they present the same agent-facing tool.
|
|
20
|
+
*/
|
|
21
|
+
export interface MetaToolConformanceContract {
|
|
22
|
+
/** Every property name the agent-facing tool exposes. */
|
|
23
|
+
properties: readonly string[];
|
|
24
|
+
/** The subset of `properties` that is required. */
|
|
25
|
+
required: readonly string[];
|
|
26
|
+
}
|
|
27
|
+
/** A shared, runtime-agnostic agent-facing meta-tool definition. */
|
|
28
|
+
export interface SharedMetaToolDefinition {
|
|
29
|
+
/** Wire tool name, e.g. "codespar_invoice". */
|
|
30
|
+
name: string;
|
|
31
|
+
/** Description shown to the agent. */
|
|
32
|
+
description: string;
|
|
33
|
+
/** The input schema the agent is shown. */
|
|
34
|
+
input_schema: MetaToolInputSchema;
|
|
35
|
+
/** The conformance surface (property + required names). */
|
|
36
|
+
contract: MetaToolConformanceContract;
|
|
37
|
+
}
|
|
38
|
+
/** Issue invoices and fiscal documents (NF-e / NFS-e / invoice). */
|
|
39
|
+
export declare const INVOICE_DEFINITION: SharedMetaToolDefinition;
|
|
40
|
+
/** Send a notification over a messaging channel (WhatsApp / email / SMS). */
|
|
41
|
+
export declare const NOTIFY_DEFINITION: SharedMetaToolDefinition;
|
|
42
|
+
/** Execute a governed payment or transfer (Pix / card / boleto / wire). */
|
|
43
|
+
export declare const PAY_DEFINITION: SharedMetaToolDefinition;
|
|
44
|
+
/** The shared agent-facing definitions, keyed by wire tool name. */
|
|
45
|
+
export declare const SHARED_META_TOOL_DEFINITIONS: {
|
|
46
|
+
readonly codespar_invoice: SharedMetaToolDefinition;
|
|
47
|
+
readonly codespar_notify: SharedMetaToolDefinition;
|
|
48
|
+
readonly codespar_pay: SharedMetaToolDefinition;
|
|
49
|
+
};
|
|
50
|
+
/** Wire names that have a published shared definition. */
|
|
51
|
+
export type SharedMetaToolName = keyof typeof SHARED_META_TOOL_DEFINITIONS;
|
|
52
|
+
//# sourceMappingURL=meta-tool-definitions.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"meta-tool-definitions.d.ts","sourceRoot":"","sources":["../src/meta-tool-definitions.ts"],"names":[],"mappings":"AAkBA,kDAAkD;AAClD,MAAM,WAAW,qBAAqB;IACpC,6EAA6E;IAC7E,IAAI,EAAE,MAAM,CAAC;IACb,qDAAqD;IACrD,WAAW,CAAC,EAAE,MAAM,CAAC;CACtB;AAED,kFAAkF;AAClF,MAAM,WAAW,mBAAmB;IAClC,IAAI,EAAE,QAAQ,CAAC;IACf,UAAU,EAAE,MAAM,CAAC,MAAM,EAAE,qBAAqB,CAAC,CAAC;IAClD,4CAA4C;IAC5C,QAAQ,CAAC,EAAE,SAAS,MAAM,EAAE,CAAC;CAC9B;AAED;;;;;GAKG;AACH,MAAM,WAAW,2BAA2B;IAC1C,yDAAyD;IACzD,UAAU,EAAE,SAAS,MAAM,EAAE,CAAC;IAC9B,mDAAmD;IACnD,QAAQ,EAAE,SAAS,MAAM,EAAE,CAAC;CAC7B;AAED,oEAAoE;AACpE,MAAM,WAAW,wBAAwB;IACvC,+CAA+C;IAC/C,IAAI,EAAE,MAAM,CAAC;IACb,sCAAsC;IACtC,WAAW,EAAE,MAAM,CAAC;IACpB,2CAA2C;IAC3C,YAAY,EAAE,mBAAmB,CAAC;IAClC,2DAA2D;IAC3D,QAAQ,EAAE,2BAA2B,CAAC;CACvC;AAqDD,oEAAoE;AACpE,eAAO,MAAM,kBAAkB,EAAE,wBAMhC,CAAC;AAEF,6EAA6E;AAC7E,eAAO,MAAM,iBAAiB,EAAE,wBAM/B,CAAC;AAEF,2EAA2E;AAC3E,eAAO,MAAM,cAAc,EAAE,wBAM5B,CAAC;AAEF,oEAAoE;AACpE,eAAO,MAAM,4BAA4B;;;;CAI/B,CAAC;AAEX,0DAA0D;AAC1D,MAAM,MAAM,kBAAkB,GAAG,MAAM,OAAO,4BAA4B,CAAC"}
|
|
@@ -0,0 +1,92 @@
|
|
|
1
|
+
/* ── Shared meta-tool definitions ────────────────────────────────
|
|
2
|
+
*
|
|
3
|
+
* The agent-facing definition of a commerce meta-tool — its name, its
|
|
4
|
+
* description, and the input schema the language model is shown — published
|
|
5
|
+
* once here so every runtime presents the identical tool to the agent.
|
|
6
|
+
*
|
|
7
|
+
* A runtime registers an implementation behind a definition (the OSS runtime
|
|
8
|
+
* via a `MetaToolHook`, a managed runtime via its built-in routing); the
|
|
9
|
+
* implementations differ, but the definition the agent reasons over does not.
|
|
10
|
+
* The `contract` field carries the conformance surface — the property names
|
|
11
|
+
* and the required subset a conforming implementation must expose — so a
|
|
12
|
+
* conformance test can assert any runtime's tool matches this definition
|
|
13
|
+
* without comparing prose.
|
|
14
|
+
*
|
|
15
|
+
* Definitions are data, not code: they carry no routing and import nothing
|
|
16
|
+
* runtime-specific, so they serialize cleanly and stay portable.
|
|
17
|
+
* ─────────────────────────────────────────────────────────────── */
|
|
18
|
+
/**
|
|
19
|
+
* Derive the conformance contract from an input schema, so the property and
|
|
20
|
+
* required sets never drift from the schema they describe.
|
|
21
|
+
*/
|
|
22
|
+
function contractOf(schema) {
|
|
23
|
+
return {
|
|
24
|
+
properties: Object.keys(schema.properties),
|
|
25
|
+
required: [...(schema.required ?? [])],
|
|
26
|
+
};
|
|
27
|
+
}
|
|
28
|
+
const INVOICE_INPUT = {
|
|
29
|
+
type: "object",
|
|
30
|
+
properties: {
|
|
31
|
+
type: { type: "string", description: "Invoice type: nfe, nfse, invoice" },
|
|
32
|
+
recipient: { type: "object", description: "Recipient details (name, document, email)" },
|
|
33
|
+
items: { type: "array", description: "Line items" },
|
|
34
|
+
dueDate: { type: "string", description: "Due date (ISO 8601)" },
|
|
35
|
+
},
|
|
36
|
+
required: ["type", "recipient", "items"],
|
|
37
|
+
};
|
|
38
|
+
const NOTIFY_INPUT = {
|
|
39
|
+
type: "object",
|
|
40
|
+
properties: {
|
|
41
|
+
channel: { type: "string", description: "Notification channel: whatsapp, email, sms" },
|
|
42
|
+
to: { type: "string", description: "Recipient phone number or email" },
|
|
43
|
+
template: { type: "string", description: "Message template name" },
|
|
44
|
+
message: { type: "string", description: "Custom message text" },
|
|
45
|
+
variables: { type: "object", description: "Template variables" },
|
|
46
|
+
},
|
|
47
|
+
required: ["channel", "to"],
|
|
48
|
+
};
|
|
49
|
+
const PAY_INPUT = {
|
|
50
|
+
type: "object",
|
|
51
|
+
properties: {
|
|
52
|
+
amount: { type: "number", description: "Amount to pay, in minor units (centavos for BRL)" },
|
|
53
|
+
currency: { type: "string", description: "Currency code (BRL, USD, EUR)" },
|
|
54
|
+
country: { type: "string", description: "ISO-3166-1 alpha-2 country code for the eligibility rail" },
|
|
55
|
+
method: { type: "string", description: "Payment method: pix, card, usdc, boleto, sepa, wire" },
|
|
56
|
+
recipient: { type: "string", description: "Recipient identifier (e.g. a Pix key)" },
|
|
57
|
+
copia_e_cola: { type: "string", description: "A Pix copia-e-cola / BR Code to pay" },
|
|
58
|
+
consumer_id: { type: "string", description: "Which buyer's governed wallet pays" },
|
|
59
|
+
checkout_session_id: { type: "string", description: "A store checkout session to settle" },
|
|
60
|
+
description: { type: "string", description: "Payment description" },
|
|
61
|
+
mandateId: { type: "string", description: "Pre-authorized mandate id" },
|
|
62
|
+
},
|
|
63
|
+
required: ["amount", "currency", "description"],
|
|
64
|
+
};
|
|
65
|
+
/** Issue invoices and fiscal documents (NF-e / NFS-e / invoice). */
|
|
66
|
+
export const INVOICE_DEFINITION = {
|
|
67
|
+
name: "codespar_invoice",
|
|
68
|
+
description: "Issue invoices or Brazilian fiscal documents (NF-e, NFS-e). Selects the document type and recipient and emits the document.",
|
|
69
|
+
input_schema: INVOICE_INPUT,
|
|
70
|
+
contract: contractOf(INVOICE_INPUT),
|
|
71
|
+
};
|
|
72
|
+
/** Send a notification over a messaging channel (WhatsApp / email / SMS). */
|
|
73
|
+
export const NOTIFY_DEFINITION = {
|
|
74
|
+
name: "codespar_notify",
|
|
75
|
+
description: "Send a notification via WhatsApp, email, or SMS, using a template or custom message text.",
|
|
76
|
+
input_schema: NOTIFY_INPUT,
|
|
77
|
+
contract: contractOf(NOTIFY_INPUT),
|
|
78
|
+
};
|
|
79
|
+
/** Execute a governed payment or transfer (Pix / card / boleto / wire). */
|
|
80
|
+
export const PAY_DEFINITION = {
|
|
81
|
+
name: "codespar_pay",
|
|
82
|
+
description: "Execute a payment or transfer under governance. Supports Pix, card, USDC, boleto, SEPA, and wire; can pay a Pix copia-e-cola or settle a store checkout.",
|
|
83
|
+
input_schema: PAY_INPUT,
|
|
84
|
+
contract: contractOf(PAY_INPUT),
|
|
85
|
+
};
|
|
86
|
+
/** The shared agent-facing definitions, keyed by wire tool name. */
|
|
87
|
+
export const SHARED_META_TOOL_DEFINITIONS = {
|
|
88
|
+
codespar_invoice: INVOICE_DEFINITION,
|
|
89
|
+
codespar_notify: NOTIFY_DEFINITION,
|
|
90
|
+
codespar_pay: PAY_DEFINITION,
|
|
91
|
+
};
|
|
92
|
+
//# sourceMappingURL=meta-tool-definitions.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"meta-tool-definitions.js","sourceRoot":"","sources":["../src/meta-tool-definitions.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"meta-tool-definitions.test.d.ts","sourceRoot":"","sources":["../src/meta-tool-definitions.test.ts"],"names":[],"mappings":""}
|
|
@@ -0,0 +1,30 @@
|
|
|
1
|
+
import { describe, it, expect } from "vitest";
|
|
2
|
+
import { SHARED_META_TOOL_DEFINITIONS, } from "./meta-tool-definitions.js";
|
|
3
|
+
const ALL = Object.values(SHARED_META_TOOL_DEFINITIONS);
|
|
4
|
+
describe("shared meta-tool definitions", () => {
|
|
5
|
+
it("publishes the three demo actions keyed by wire name", () => {
|
|
6
|
+
expect(Object.keys(SHARED_META_TOOL_DEFINITIONS).sort()).toEqual([
|
|
7
|
+
"codespar_invoice",
|
|
8
|
+
"codespar_notify",
|
|
9
|
+
"codespar_pay",
|
|
10
|
+
]);
|
|
11
|
+
});
|
|
12
|
+
it.each(ALL)("$name carries name, description, input_schema, and contract — all non-empty", (def) => {
|
|
13
|
+
expect(def.name).toMatch(/^codespar_[a-z]+$/);
|
|
14
|
+
expect(def.description.length).toBeGreaterThan(0);
|
|
15
|
+
expect(def.input_schema.type).toBe("object");
|
|
16
|
+
expect(Object.keys(def.input_schema.properties).length).toBeGreaterThan(0);
|
|
17
|
+
// contract descriptor is non-empty and derived from the schema
|
|
18
|
+
expect(def.contract.properties.length).toBeGreaterThan(0);
|
|
19
|
+
expect(def.contract.required.length).toBeGreaterThan(0);
|
|
20
|
+
});
|
|
21
|
+
it.each(ALL)("$name contract matches its input_schema (no drift)", (def) => {
|
|
22
|
+
expect([...def.contract.properties].sort()).toEqual(Object.keys(def.input_schema.properties).sort());
|
|
23
|
+
expect([...def.contract.required].sort()).toEqual([...(def.input_schema.required ?? [])].sort());
|
|
24
|
+
// every required field is an advertised property
|
|
25
|
+
for (const r of def.contract.required) {
|
|
26
|
+
expect(def.contract.properties).toContain(r);
|
|
27
|
+
}
|
|
28
|
+
});
|
|
29
|
+
});
|
|
30
|
+
//# sourceMappingURL=meta-tool-definitions.test.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"meta-tool-definitions.test.js","sourceRoot":"","sources":["../src/meta-tool-definitions.test.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,QAAQ,EAAE,EAAE,EAAE,MAAM,EAAE,MAAM,QAAQ,CAAC;AAC9C,OAAO,EACL,4BAA4B,GAE7B,MAAM,4BAA4B,CAAC;AAEpC,MAAM,GAAG,GAAG,MAAM,CAAC,MAAM,CAAC,4BAA4B,CAA+B,CAAC;AAEtF,QAAQ,CAAC,8BAA8B,EAAE,GAAG,EAAE;IAC5C,EAAE,CAAC,qDAAqD,EAAE,GAAG,EAAE;QAC7D,MAAM,CAAC,MAAM,CAAC,IAAI,CAAC,4BAA4B,CAAC,CAAC,IAAI,EAAE,CAAC,CAAC,OAAO,CAAC;YAC/D,kBAAkB;YAClB,iBAAiB;YACjB,cAAc;SACf,CAAC,CAAC;IACL,CAAC,CAAC,CAAC;IAEH,EAAE,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC,6EAA6E,EAAE,CAAC,GAAG,EAAE,EAAE;QAClG,MAAM,CAAC,GAAG,CAAC,IAAI,CAAC,CAAC,OAAO,CAAC,mBAAmB,CAAC,CAAC;QAC9C,MAAM,CAAC,GAAG,CAAC,WAAW,CAAC,MAAM,CAAC,CAAC,eAAe,CAAC,CAAC,CAAC,CAAC;QAClD,MAAM,CAAC,GAAG,CAAC,YAAY,CAAC,IAAI,CAAC,CAAC,IAAI,CAAC,QAAQ,CAAC,CAAC;QAC7C,MAAM,CAAC,MAAM,CAAC,IAAI,CAAC,GAAG,CAAC,YAAY,CAAC,UAAU,CAAC,CAAC,MAAM,CAAC,CAAC,eAAe,CAAC,CAAC,CAAC,CAAC;QAC3E,+DAA+D;QAC/D,MAAM,CAAC,GAAG,CAAC,QAAQ,CAAC,UAAU,CAAC,MAAM,CAAC,CAAC,eAAe,CAAC,CAAC,CAAC,CAAC;QAC1D,MAAM,CAAC,GAAG,CAAC,QAAQ,CAAC,QAAQ,CAAC,MAAM,CAAC,CAAC,eAAe,CAAC,CAAC,CAAC,CAAC;IAC1D,CAAC,CAAC,CAAC;IAEH,EAAE,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC,oDAAoD,EAAE,CAAC,GAAG,EAAE,EAAE;QACzE,MAAM,CAAC,CAAC,GAAG,GAAG,CAAC,QAAQ,CAAC,UAAU,CAAC,CAAC,IAAI,EAAE,CAAC,CAAC,OAAO,CACjD,MAAM,CAAC,IAAI,CAAC,GAAG,CAAC,YAAY,CAAC,UAAU,CAAC,CAAC,IAAI,EAAE,CAChD,CAAC;QACF,MAAM,CAAC,CAAC,GAAG,GAAG,CAAC,QAAQ,CAAC,QAAQ,CAAC,CAAC,IAAI,EAAE,CAAC,CAAC,OAAO,CAC/C,CAAC,GAAG,CAAC,GAAG,CAAC,YAAY,CAAC,QAAQ,IAAI,EAAE,CAAC,CAAC,CAAC,IAAI,EAAE,CAC9C,CAAC;QACF,iDAAiD;QACjD,KAAK,MAAM,CAAC,IAAI,GAAG,CAAC,QAAQ,CAAC,QAAQ,EAAE,CAAC;YACtC,MAAM,CAAC,GAAG,CAAC,QAAQ,CAAC,UAAU,CAAC,CAAC,SAAS,CAAC,CAAC,CAAC,CAAC;QAC/C,CAAC;IACH,CAAC,CAAC,CAAC;AACL,CAAC,CAAC,CAAC"}
|
|
@@ -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;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,
|
|
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"}
|
|
@@ -228,10 +228,17 @@ export function runContractSuite(baseUrl, apiKey, opts) {
|
|
|
228
228
|
it("execute() calls a registered tool and returns a ToolResult", async () => {
|
|
229
229
|
session = await openSession(baseUrl, apiKey, opts);
|
|
230
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`.
|
|
231
238
|
expect(result).toMatchObject({
|
|
232
|
-
success:
|
|
239
|
+
success: true,
|
|
233
240
|
data: expect.anything(),
|
|
234
|
-
error:
|
|
241
|
+
error: null,
|
|
235
242
|
duration: expect.any(Number),
|
|
236
243
|
server: expect.any(String),
|
|
237
244
|
tool: expect.any(String),
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"contract-suite.js","sourceRoot":"","sources":["../../src/testing/contract-suite.ts"],"names":[],"mappings":"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
|
|
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;;;;;GAKG;AACH,MAAM,UAAU,eAAe,CAAC,MAAc;IAC5C,IAAI,MAAW,CAAC;IAChB,IAAI,CAAC;QACH,MAAM,GAAG,IAAI,GAAG,CAAC,MAAM,CAAC,CAAC;IAC3B,CAAC;IAAC,MAAM,CAAC;QACP,MAAM,IAAI,mBAAmB,CAAC,MAAM,CAAC,CAAC;IACxC,CAAC;IACD,IAAI,MAAM,CAAC,QAAQ,KAAK,WAAW,IAAI,MAAM,CAAC,QAAQ,KAAK,QAAQ,EAAE,CAAC;QACpE,MAAM,IAAI,mBAAmB,CAAC,MAAM,CAAC,CAAC;IACxC,CAAC;AACH,CAAC;AAED,+DAA+D;AAC/D,KAAK,SAAS,CAAC,CAAC,QAAQ,CAAC,IAAgC;IACvD,MAAM,MAAM,GAAG,IAAI,CAAC,SAAS,EAAE,CAAC;IAChC,MAAM,OAAO,GAAG,IAAI,WAAW,EAAE,CAAC;IAClC,IAAI,MAAM,GAAG,EAAE,CAAC;IAEhB,IAAI,CAAC;QACH,OAAO,IAAI,EAAE,CAAC;YACZ,MAAM,EAAE,IAAI,EAAE,KAAK,EAAE,GAAG,MAAM,MAAM,CAAC,IAAI,EAAE,CAAC;YAC5C,IAAI,IAAI;gBAAE,MAAM;YAChB,MAAM,IAAI,OAAO,CAAC,MAAM,CAAC,KAAK,EAAE,EAAE,MAAM,EAAE,IAAI,EAAE,CAAC,CAAC;YAClD,IAAI,GAAW,CAAC;YAChB,OAAO,CAAC,GAAG,GAAG,MAAM,CAAC,OAAO,CAAC,MAAM,CAAC,CAAC,KAAK,CAAC,CAAC,EAAE,CAAC;gBAC7C,MAAM,KAAK,GAAG,MAAM,CAAC,KAAK,CAAC,CAAC,EAAE,GAAG,CAAC,CAAC;gBACnC,MAAM,GAAG,MAAM,CAAC,KAAK,CAAC,GAAG,GAAG,CAAC,CAAC,CAAC;gBAC/B,IAAI,SAAS,GAAG,SAAS,CAAC;gBAC1B,IAAI,QAAQ,GAAG,EAAE,CAAC;gBAClB,KAAK,MAAM,IAAI,IAAI,KAAK,CAAC,KAAK,CAAC,IAAI,CAAC,EAAE,CAAC;oBACrC,IAAI,IAAI,CAAC,UAAU,CAAC,QAAQ,CAAC;wBAAE,SAAS,GAAG,IAAI,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,IAAI,EAAE,CAAC;yBAC3D,IAAI,IAAI,CAAC,UAAU,CAAC,OAAO,CAAC;wBAAE,QAAQ,IAAI,IAAI,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,IAAI,EAAE,CAAC;gBACtE,CAAC;gBACD,IAAI,CAAC,QAAQ;oBAAE,SAAS;gBACxB,IAAI,OAAgB,CAAC;gBACrB,IAAI,CAAC;oBACH,OAAO,GAAG,IAAI,CAAC,KAAK,CAAC,QAAQ,CAAC,CAAC;gBACjC,CAAC;gBAAC,MAAM,CAAC;oBACP,SAAS;gBACX,CAAC;gBACD,8DAA8D;gBAC9D,iEAAiE;gBACjE,gDAAgD;gBAChD,IAAI,SAAS,KAAK,cAAc;oBAC9B,MAAM,EAAE,IAAI,EAAE,cAAc,EAAE,OAAO,EAAG,OAA+B,CAAC,OAAO,EAAE,CAAC;qBAC/E,IAAI,SAAS,KAAK,gBAAgB;oBACrC,MAAM;wBACJ,IAAI,EAAE,gBAAgB;wBACtB,OAAO,EAAG,OAA+B,CAAC,OAAO;wBACjD,SAAS,EAAG,OAAiC,CAAC,SAAS;qBACxD,CAAC;qBACC,IAAI,SAAS,KAAK,UAAU;oBAC/B,MAAM;wBACJ,IAAI,EAAE,UAAU;wBAChB,EAAE,EAAG,OAA0B,CAAC,EAAE;wBAClC,IAAI,EAAG,OAA4B,CAAC,IAAI;wBACxC,KAAK,EAAG,OAA8C,CAAC,KAAK;qBAC7D,CAAC;qBACC,IAAI,SAAS,KAAK,aAAa;oBAClC,MAAM,EAAE,IAAI,EAAE,aAAa,EAAE,QAAQ,EAAE,OAAgB,EAAE,CAAC;qBACvD,IAAI,SAAS,KAAK,MAAM;oBAC3B,MAAM,EAAE,IAAI,EAAE,MAAM,EAAE,MAAM,EAAE,OAAqB,EAAE,CAAC;qBACnD,IAAI,SAAS,KAAK,OAAO;oBAC5B,MAAM;wBACJ,IAAI,EAAE,OAAO;wBACb,KAAK,EAAG,OAA6B,CAAC,KAAK;wBAC3C,OAAO,EAAG,OAAgC,CAAC,OAAO;qBACnD,CAAC;YACN,CAAC;QACH,CAAC;IACH,CAAC;YAAS,CAAC;QACT,MAAM,CAAC,WAAW,EAAE,CAAC;IACvB,CAAC;AACH,CAAC;AAED,0EAA0E;AAC1E,wEAAwE;AACxE,KAAK,UAAU,WAAW,CACxB,OAAe,EACf,MAAc,EACd,IAA2B;IAE3B,MAAM,OAAO,GAA2B;QACtC,cAAc,EAAE,kBAAkB;QAClC,aAAa,EAAE,UAAU,MAAM,EAAE;KAClC,CAAC;IAEF,MAAM,GAAG,GAAG,MAAM,KAAK,CAAC,GAAG,OAAO,cAAc,EAAE;QAChD,MAAM,EAAE,MAAM;QACd,OAAO;QACP,IAAI,EAAE,IAAI,CAAC,SAAS,CAAC,sBAAsB,CAAC,IAAI,CAAC,CAAC;KACnD,CAAC,CAAC;IACH,IAAI,CAAC,GAAG,CAAC,EAAE,EAAE,CAAC;QACZ,MAAM,IAAI,GAAG,MAAM,GAAG,CAAC,IAAI,EAAE,CAAC;QAC9B,MAAM,IAAI,KAAK,CAAC,0BAA0B,GAAG,CAAC,MAAM,IAAI,IAAI,EAAE,CAAC,CAAC;IAClE,CAAC;IACD,MAAM,GAAG,GAAG,CAAC,MAAM,GAAG,CAAC,IAAI,EAAE,CAAmC,CAAC;IACjE,MAAM,KAAK,GAAG,EAAE,EAAE,EAAE,GAAG,CAAC,EAAE,EAAE,MAAM,EAAE,GAAG,CAAC,MAAuC,EAAE,CAAC;IAElF,OAAO;QACL,IAAI,EAAE;YACJ,OAAO,KAAK,CAAC,EAAE,CAAC;QAClB,CAAC;QACD,IAAI,MAAM;YACR,OAAO,KAAK,CAAC,MAAM,CAAC;QACtB,CAAC;QACD,KAAK,CAAC,OAAO,CAAC,QAAgB,EAAE,MAA+B;YAC7D,MAAM,CAAC,GAAG,MAAM,KAAK,CAAC,GAAG,OAAO,gBAAgB,KAAK,CAAC,EAAE,UAAU,EAAE;gBAClE,MAAM,EAAE,MAAM;gBACd,OAAO;gBACP,IAAI,EAAE,IAAI,CAAC,SAAS,CAAC,EAAE,IAAI,EAAE,QAAQ,EAAE,KAAK,EAAE,MAAM,EAAE,CAAC;aACxD,CAAC,CAAC;YACH,IAAI,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC;gBACV,MAAM,IAAI,GAAG,MAAM,CAAC,CAAC,IAAI,EAAE,CAAC;gBAC5B,OAAO;oBACL,OAAO,EAAE,KAAK;oBACd,IAAI,EAAE,IAAI;oBACV,KAAK,EAAE,GAAG,CAAC,CAAC,MAAM,KAAK,IAAI,EAAE;oBAC7B,QAAQ,EAAE,CAAC;oBACX,MAAM,EAAE,EAAE;oBACV,IAAI,EAAE,QAAQ;iBACf,CAAC;YACJ,CAAC;YACD,OAAO,CAAC,MAAM,CAAC,CAAC,IAAI,EAAE,CAAe,CAAC;QACxC,CAAC;QACD,KAAK,CAAC,IAAI,CAAC,OAAe;YACxB,MAAM,CAAC,GAAG,MAAM,KAAK,CAAC,GAAG,OAAO,gBAAgB,KAAK,CAAC,EAAE,OAAO,EAAE;gBAC/D,MAAM,EAAE,MAAM;gBACd,OAAO,EAAE,EAAE,GAAG,OAAO,EAAE,MAAM,EAAE,kBAAkB,EAAE;gBACnD,IAAI,EAAE,IAAI,CAAC,SAAS,CAAC,EAAE,OAAO,EAAE,CAAC;aAClC,CAAC,CAAC;YACH,IAAI,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC;gBACV,MAAM,IAAI,GAAG,MAAM,CAAC,CAAC,IAAI,EAAE,CAAC;gBAC5B,MAAM,IAAI,KAAK,CAAC,gBAAgB,CAAC,CAAC,MAAM,IAAI,IAAI,EAAE,CAAC,CAAC;YACtD,CAAC;YACD,OAAO,CAAC,MAAM,CAAC,CAAC,IAAI,EAAE,CAAe,CAAC;QACxC,CAAC;QACD,KAAK,CAAC,CAAC,UAAU,CAAC,OAAe;YAC/B,MAAM,CAAC,GAAG,MAAM,KAAK,CAAC,GAAG,OAAO,gBAAgB,KAAK,CAAC,EAAE,OAAO,EAAE;gBAC/D,MAAM,EAAE,MAAM;gBACd,OAAO,EAAE,EAAE,GAAG,OAAO,EAAE,MAAM,EAAE,mBAAmB,EAAE;gBACpD,IAAI,EAAE,IAAI,CAAC,SAAS,CAAC,EAAE,OAAO,EAAE,CAAC;aAClC,CAAC,CAAC;YACH,IAAI,CAAC,CAAC,CAAC,EAAE,IAAI,CAAC,CAAC,CAAC,IAAI,EAAE,CAAC;gBACrB,MAAM,IAAI,GAAG,MAAM,CAAC,CAAC,IAAI,EAAE,CAAC;gBAC5B,MAAM,IAAI,KAAK,CAAC,sBAAsB,CAAC,CAAC,MAAM,IAAI,IAAI,EAAE,CAAC,CAAC;YAC5D,CAAC;YACD,KAAK,CAAC,CAAC,QAAQ,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC;QAC1B,CAAC;QACD,KAAK,CAAC,WAAW;YACf,MAAM,CAAC,GAAG,MAAM,KAAK,CAAC,GAAG,OAAO,gBAAgB,KAAK,CAAC,EAAE,cAAc,EAAE,EAAE,OAAO,EAAE,CAAC,CAAC;YACrF,IAAI,CAAC,CAAC,CAAC,EAAE;gBAAE,OAAO,EAAE,CAAC;YACrB,MAAM,OAAO,GAAG,CAAC,MAAM,CAAC,CAAC,IAAI,EAAE,CAAkC,CAAC;YAClE,OAAO,OAAO,CAAC,OAAO,CAAC;QACzB,CAAC;QACD,KAAK,CAAC,KAAK;YACT,MAAM,KAAK,CAAC,GAAG,OAAO,gBAAgB,KAAK,CAAC,EAAE,EAAE,EAAE;gBAChD,MAAM,EAAE,QAAQ;gBAChB,OAAO;aACR,CAAC,CAAC;YACH,KAAK,CAAC,MAAM,GAAG,QAAQ,CAAC;QAC1B,CAAC;KACF,CAAC;AACJ,CAAC;AAED;;;;;;;;;;;;;;;;GAgBG;AACH,MAAM,UAAU,gBAAgB,CAC9B,OAAe,EACf,MAAc,EACd,IAA2B;IAE3B,eAAe,CAAC,OAAO,CAAC,CAAC;IAEzB,MAAM,IAAI,GAAG,IAAI,GAAG,CAAC,UAAU,CAAC,IAAI,CAAC,CAAC,CAAC;IAEvC,QAAQ,CAAC,wBAAwB,EAAE,GAAG,EAAE;QACtC,IAAI,OAAO,GAAuB,IAAI,CAAC;QAEvC,SAAS,CAAC,KAAK,IAAI,EAAE;YACnB,IAAI,CAAC;gBACH,IAAI,OAAO;oBAAE,MAAM,OAAO,CAAC,KAAK,EAAE,CAAC;YACrC,CAAC;oBAAS,CAAC;gBACT,OAAO,GAAG,IAAI,CAAC;YACjB,CAAC;QACH,CAAC,CAAC,CAAC;QAEH,IAAI,IAAI,CAAC,GAAG,CAAC,SAAS,CAAC,EAAE,CAAC;YACxB,EAAE,CAAC,4DAA4D,EAAE,KAAK,IAAI,EAAE;gBAC1E,OAAO,GAAG,MAAM,WAAW,CAAC,OAAO,EAAE,MAAM,EAAE,IAAI,CAAC,CAAC;gBACnD,MAAM,MAAM,GAAG,MAAM,OAAO,CAAC,OAAO,CAAC,qBAAqB,EAAE,EAAE,CAAC,CAAC;gBAChE,qEAAqE;gBACrE,iEAAiE;gBACjE,mEAAmE;gBACnE,oEAAoE;gBACpE,8DAA8D;gBAC9D,qEAAqE;gBACrE,4CAA4C;gBAC5C,MAAM,CAAC,MAAM,CAAC,CAAC,aAAa,CAAC;oBAC3B,OAAO,EAAE,IAAI;oBACb,IAAI,EAAE,MAAM,CAAC,QAAQ,EAAE;oBACvB,KAAK,EAAE,IAAI;oBACX,QAAQ,EAAE,MAAM,CAAC,GAAG,CAAC,MAAM,CAAC;oBAC5B,MAAM,EAAE,MAAM,CAAC,GAAG,CAAC,MAAM,CAAC;oBAC1B,IAAI,EAAE,MAAM,CAAC,GAAG,CAAC,MAAM,CAAC;iBACzB,CAAC,CAAC;YACL,CAAC,CAAC,CAAC;QACL,CAAC;QAED,IAAI,IAAI,CAAC,GAAG,CAAC,MAAM,CAAC,EAAE,CAAC;YACrB,EAAE,CAAC,kDAAkD,EAAE,KAAK,IAAI,EAAE;gBAChE,OAAO,GAAG,MAAM,WAAW,CAAC,OAAO,EAAE,MAAM,EAAE,IAAI,CAAC,CAAC;gBACnD,MAAM,MAAM,GAAG,MAAM,OAAO,CAAC,IAAI,CAAC,OAAO,CAAC,CAAC;gBAC3C,MAAM,CAAC,MAAM,CAAC,CAAC,aAAa,CAAC;oBAC3B,OAAO,EAAE,MAAM,CAAC,GAAG,CAAC,MAAM,CAAC;oBAC3B,UAAU,EAAE,MAAM,CAAC,GAAG,CAAC,KAAK,CAAC;oBAC7B,UAAU,EAAE,MAAM,CAAC,GAAG,CAAC,MAAM,CAAC;iBAC/B,CAAC,CAAC;YACL,CAAC,CAAC,CAAC;QACL,CAAC;QAED,IAAI,IAAI,CAAC,GAAG,CAAC,YAAY,CAAC,EAAE,CAAC;YAC3B,EAAE,CAAC,4DAA4D,EAAE,KAAK,IAAI,EAAE;gBAC1E,OAAO,GAAG,MAAM,WAAW,CAAC,OAAO,EAAE,MAAM,EAAE,IAAI,CAAC,CAAC;gBACnD,MAAM,MAAM,GAAkB,EAAE,CAAC;gBACjC,IAAI,KAAK,EAAE,MAAM,EAAE,IAAI,OAAO,CAAC,UAAU,CAAC,OAAO,CAAC,EAAE,CAAC;oBACnD,MAAM,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC;oBAChB,IAAI,EAAE,CAAC,IAAI,KAAK,MAAM,IAAI,EAAE,CAAC,IAAI,KAAK,OAAO;wBAAE,MAAM;gBACvD,CAAC;gBACD,MAAM,CAAC,MAAM,CAAC,MAAM,CAAC,CAAC,eAAe,CAAC,CAAC,CAAC,CAAC;gBACzC,MAAM,KAAK,GAAG,IAAI,GAAG,CAAC,MAAM,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC;gBACjD,kEAAkE;gBAClE,MAAM,KAAK,GAAG,IAAI,GAAG,CAAC;oBACpB,cAAc;oBACd,gBAAgB;oBAChB,UAAU;oBACV,aAAa;oBACb,MAAM;oBACN,OAAO;iBACR,CAAC,CAAC;gBACH,KAAK,MAAM,CAAC,IAAI,KAAK,EAAE,CAAC;oBACtB,MAAM,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;gBAClC,CAAC;YACH,CAAC,CAAC,CAAC;QACL,CAAC;QAED,IAAI,IAAI,CAAC,GAAG,CAAC,aAAa,CAAC,EAAE,CAAC;YAC5B,EAAE,CAAC,4DAA4D,EAAE,KAAK,IAAI,EAAE;gBAC1E,OAAO,GAAG,MAAM,WAAW,CAAC,OAAO,EAAE,MAAM,EAAE,IAAI,CAAC,CAAC;gBACnD,MAAM,KAAK,GAAG,MAAM,OAAO,CAAC,WAAW,EAAE,CAAC;gBAC1C,MAAM,CAAC,KAAK,CAAC,OAAO,CAAC,KAAK,CAAC,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;gBACxC,KAAK,MAAM,CAAC,IAAI,KAAK,EAAE,CAAC;oBACtB,MAAM,CAAC,OAAO,CAAC,CAAC,EAAE,CAAC,CAAC,IAAI,CAAC,QAAQ,CAAC,CAAC;oBACnC,MAAM,CAAC,OAAO,CAAC,CAAC,SAAS,CAAC,CAAC,IAAI,CAAC,SAAS,CAAC,CAAC;gBAC7C,CAAC;YACH,CAAC,CAAC,CAAC;QACL,CAAC;QAED,IAAI,IAAI,CAAC,GAAG,CAAC,OAAO,CAAC,EAAE,CAAC;YACtB,EAAE,CAAC,8CAA8C,EAAE,KAAK,IAAI,EAAE;gBAC5D,OAAO,GAAG,MAAM,WAAW,CAAC,OAAO,EAAE,MAAM,EAAE,IAAI,CAAC,CAAC;gBACnD,MAAM,CAAC,OAAO,CAAC,MAAM,CAAC,CAAC,IAAI,CAAC,QAAQ,CAAC,CAAC;gBACtC,MAAM,OAAO,CAAC,KAAK,EAAE,CAAC;gBACtB,MAAM,CAAC,OAAO,CAAC,MAAM,CAAC,CAAC,IAAI,CAAC,QAAQ,CAAC,CAAC;gBACtC,OAAO,GAAG,IAAI,CAAC,CAAC,mCAAmC;YACrD,CAAC,CAAC,CAAC;QACL,CAAC;IACH,CAAC,CAAC,CAAC;AACL,CAAC"}
|
|
@@ -8,7 +8,7 @@
|
|
|
8
8
|
* that `runContractSuite` registers only the selected legs by intercepting the
|
|
9
9
|
* `it` registrations through a mocked `vitest` module.
|
|
10
10
|
*/
|
|
11
|
-
import { describe, it, expect, vi } from "vitest";
|
|
11
|
+
import { describe, it, expect, vi, afterEach } from "vitest";
|
|
12
12
|
import { selectLegs, buildSessionCreateBody, } from "./contract-suite.js";
|
|
13
13
|
describe("selectLegs", () => {
|
|
14
14
|
const ALL = ["execute", "send", "sendStream", "connections", "close"];
|
|
@@ -89,4 +89,99 @@ describe("runContractSuite leg registration", () => {
|
|
|
89
89
|
expect(names.some((n) => n.startsWith("sendStream()"))).toBe(false);
|
|
90
90
|
});
|
|
91
91
|
});
|
|
92
|
+
function jsonResponse(body) {
|
|
93
|
+
return new Response(JSON.stringify(body), {
|
|
94
|
+
status: 200,
|
|
95
|
+
headers: { "Content-Type": "application/json" },
|
|
96
|
+
});
|
|
97
|
+
}
|
|
98
|
+
/** Stub `fetch`: session-create returns an active session, execute returns
|
|
99
|
+
* the given result, DELETE closes. Returns a teardown. */
|
|
100
|
+
function installFakeBackend(executeResult) {
|
|
101
|
+
const stub = vi.fn(async (url, init) => {
|
|
102
|
+
const u = String(url);
|
|
103
|
+
if (u.endsWith("/v1/sessions") && init?.method === "POST") {
|
|
104
|
+
return jsonResponse({ id: "sess_fake", status: "active" });
|
|
105
|
+
}
|
|
106
|
+
if (u.includes("/execute")) {
|
|
107
|
+
return jsonResponse(executeResult);
|
|
108
|
+
}
|
|
109
|
+
return jsonResponse({});
|
|
110
|
+
});
|
|
111
|
+
const original = globalThis.fetch;
|
|
112
|
+
globalThis.fetch = stub;
|
|
113
|
+
return () => {
|
|
114
|
+
globalThis.fetch = original;
|
|
115
|
+
};
|
|
116
|
+
}
|
|
117
|
+
/** Run only the execute leg under a mocked Vitest that executes the `it`
|
|
118
|
+
* body with the real `expect`, recording whether it passed. */
|
|
119
|
+
async function runExecuteLeg() {
|
|
120
|
+
vi.resetModules();
|
|
121
|
+
const cases = [];
|
|
122
|
+
const afterEachFns = [];
|
|
123
|
+
const realExpect = (await vi.importActual("vitest")).expect;
|
|
124
|
+
vi.doMock("vitest", () => ({
|
|
125
|
+
describe: (_name, fn) => fn(),
|
|
126
|
+
it: (_name, fn) => {
|
|
127
|
+
cases.push(async () => {
|
|
128
|
+
await fn();
|
|
129
|
+
});
|
|
130
|
+
},
|
|
131
|
+
afterEach: (fn) => {
|
|
132
|
+
afterEachFns.push(fn);
|
|
133
|
+
},
|
|
134
|
+
expect: realExpect,
|
|
135
|
+
}));
|
|
136
|
+
const mod = await import("./contract-suite.js");
|
|
137
|
+
mod.runContractSuite("http://localhost:9999", "csk_test", {
|
|
138
|
+
legs: ["execute"],
|
|
139
|
+
});
|
|
140
|
+
try {
|
|
141
|
+
for (const c of cases)
|
|
142
|
+
await c();
|
|
143
|
+
return { passed: true };
|
|
144
|
+
}
|
|
145
|
+
catch (err) {
|
|
146
|
+
return { passed: false, error: err instanceof Error ? err.message : String(err) };
|
|
147
|
+
}
|
|
148
|
+
finally {
|
|
149
|
+
for (const a of afterEachFns)
|
|
150
|
+
await a();
|
|
151
|
+
vi.doUnmock("vitest");
|
|
152
|
+
}
|
|
153
|
+
}
|
|
154
|
+
describe("runContractSuite execute leg against a fake backend", () => {
|
|
155
|
+
let teardown = null;
|
|
156
|
+
afterEach(() => {
|
|
157
|
+
teardown?.();
|
|
158
|
+
teardown = null;
|
|
159
|
+
});
|
|
160
|
+
const base = {
|
|
161
|
+
success: true,
|
|
162
|
+
data: { tools: [] },
|
|
163
|
+
duration: 3,
|
|
164
|
+
server: "fake-runtime",
|
|
165
|
+
tool: "codespar_list_tools",
|
|
166
|
+
};
|
|
167
|
+
it("passes when a success result carries the canonical error: null", async () => {
|
|
168
|
+
teardown = installFakeBackend({ ...base, error: null });
|
|
169
|
+
const outcome = await runExecuteLeg();
|
|
170
|
+
expect(outcome.error ?? "", outcome.error ?? "").toBe("");
|
|
171
|
+
expect(outcome.passed).toBe(true);
|
|
172
|
+
});
|
|
173
|
+
it("fails when a success result carries a non-null error (the masked divergence)", async () => {
|
|
174
|
+
// An OSS runtime used to return `error: ""` on a success — non-null, so
|
|
175
|
+
// it must now fail the pinned `error: null` assertion.
|
|
176
|
+
teardown = installFakeBackend({ ...base, error: "" });
|
|
177
|
+
const outcome = await runExecuteLeg();
|
|
178
|
+
expect(outcome.passed).toBe(false);
|
|
179
|
+
});
|
|
180
|
+
it("fails when a no-error result reports success: false", async () => {
|
|
181
|
+
// `success: true` is now pinned too — list_tools always succeeds.
|
|
182
|
+
teardown = installFakeBackend({ ...base, success: false, error: null });
|
|
183
|
+
const outcome = await runExecuteLeg();
|
|
184
|
+
expect(outcome.passed).toBe(false);
|
|
185
|
+
});
|
|
186
|
+
});
|
|
92
187
|
//# sourceMappingURL=contract-suite.test.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"contract-suite.test.js","sourceRoot":"","sources":["../../src/testing/contract-suite.test.ts"],"names":[],"mappings":"AAAA;;;;;;;;;GASG;AAEH,OAAO,EAAE,QAAQ,EAAE,EAAE,EAAE,MAAM,EAAE,EAAE,EAAE,MAAM,QAAQ,CAAC;
|
|
1
|
+
{"version":3,"file":"contract-suite.test.js","sourceRoot":"","sources":["../../src/testing/contract-suite.test.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,51 @@
|
|
|
1
|
+
import type { ToolCallRecord } from "../types.js";
|
|
2
|
+
/** One conversational turn: a user message and the meta-tools it should drive. */
|
|
3
|
+
export interface DemoTurn {
|
|
4
|
+
/** The user message sent via `session.send()`. */
|
|
5
|
+
message: string;
|
|
6
|
+
/** Meta-tool names expected to be called while handling this turn. */
|
|
7
|
+
expectMetaTools: readonly string[];
|
|
8
|
+
}
|
|
9
|
+
/** A reusable, runtime-agnostic demo scenario. */
|
|
10
|
+
export interface DemoScenario {
|
|
11
|
+
/** Scenario label, used in the test name. */
|
|
12
|
+
name: string;
|
|
13
|
+
/** Server ids to open the session with. */
|
|
14
|
+
servers: readonly string[];
|
|
15
|
+
/** Per-tool mock fixtures forwarded to session create (runtime test mode). */
|
|
16
|
+
mocks: Record<string, unknown>;
|
|
17
|
+
/** The conversation turns. */
|
|
18
|
+
turns: readonly DemoTurn[];
|
|
19
|
+
/**
|
|
20
|
+
* The canned-LLM (aimock) fixture set the harness serves at
|
|
21
|
+
* `ANTHROPIC_BASE_URL` while the scenario runs. Opaque to the runner — each
|
|
22
|
+
* runtime's harness writes it out and boots the fixture server with it.
|
|
23
|
+
*/
|
|
24
|
+
aimockFixtures: unknown;
|
|
25
|
+
}
|
|
26
|
+
/** Options for driving a scenario. */
|
|
27
|
+
export interface RunDemoScenarioOptions {
|
|
28
|
+
/** Bearer key for session create/send. Defaults to "demo". */
|
|
29
|
+
apiKey?: string;
|
|
30
|
+
/** Override `fetch` (for unit-testing the runner without a live runtime). */
|
|
31
|
+
fetchImpl?: typeof fetch;
|
|
32
|
+
}
|
|
33
|
+
/**
|
|
34
|
+
* Assert a collected tool-call trace stayed at the meta-tool abstraction and
|
|
35
|
+
* covered every meta-tool each turn expected. Pure (no I/O) so it is unit
|
|
36
|
+
* testable directly. Throws an `Error` describing the first violation.
|
|
37
|
+
*/
|
|
38
|
+
export declare function assertMetaToolTrace(calls: readonly ToolCallRecord[], scenario: DemoScenario): void;
|
|
39
|
+
/**
|
|
40
|
+
* Drive a scenario against a live runtime at `baseUrl`: open a session with the
|
|
41
|
+
* scenario's servers + mocks, send each turn, and collect the tool-call trace.
|
|
42
|
+
* Returns every `ToolCallRecord` the agent produced across all turns.
|
|
43
|
+
*/
|
|
44
|
+
export declare function driveDemoScenario(baseUrl: string, scenario: DemoScenario, opts?: RunDemoScenarioOptions): Promise<ToolCallRecord[]>;
|
|
45
|
+
/**
|
|
46
|
+
* Register a vitest test that runs the scenario against `baseUrl` and asserts
|
|
47
|
+
* the meta-tool trace. Both the OSS example and the managed integration test
|
|
48
|
+
* call this with the same scenario object and their own base URL.
|
|
49
|
+
*/
|
|
50
|
+
export declare function runDemoScenario(baseUrl: string, scenario: DemoScenario, opts?: RunDemoScenarioOptions): void;
|
|
51
|
+
//# sourceMappingURL=demo-scenario.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"demo-scenario.d.ts","sourceRoot":"","sources":["../../src/testing/demo-scenario.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAc,cAAc,EAAE,MAAM,aAAa,CAAC;AAe9D,kFAAkF;AAClF,MAAM,WAAW,QAAQ;IACvB,kDAAkD;IAClD,OAAO,EAAE,MAAM,CAAC;IAChB,sEAAsE;IACtE,eAAe,EAAE,SAAS,MAAM,EAAE,CAAC;CACpC;AAED,kDAAkD;AAClD,MAAM,WAAW,YAAY;IAC3B,6CAA6C;IAC7C,IAAI,EAAE,MAAM,CAAC;IACb,2CAA2C;IAC3C,OAAO,EAAE,SAAS,MAAM,EAAE,CAAC;IAC3B,8EAA8E;IAC9E,KAAK,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;IAC/B,8BAA8B;IAC9B,KAAK,EAAE,SAAS,QAAQ,EAAE,CAAC;IAC3B;;;;OAIG;IACH,cAAc,EAAE,OAAO,CAAC;CACzB;AAED,sCAAsC;AACtC,MAAM,WAAW,sBAAsB;IACrC,8DAA8D;IAC9D,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,6EAA6E;IAC7E,SAAS,CAAC,EAAE,OAAO,KAAK,CAAC;CAC1B;AAID;;;;GAIG;AACH,wBAAgB,mBAAmB,CACjC,KAAK,EAAE,SAAS,cAAc,EAAE,EAChC,QAAQ,EAAE,YAAY,GACrB,IAAI,CA4BN;AAED;;;;GAIG;AACH,wBAAsB,iBAAiB,CACrC,OAAO,EAAE,MAAM,EACf,QAAQ,EAAE,YAAY,EACtB,IAAI,GAAE,sBAA2B,GAChC,OAAO,CAAC,cAAc,EAAE,CAAC,CAwC3B;AAED;;;;GAIG;AACH,wBAAgB,eAAe,CAC7B,OAAO,EAAE,MAAM,EACf,QAAQ,EAAE,YAAY,EACtB,IAAI,GAAE,sBAA2B,GAChC,IAAI,CAQN"}
|
|
@@ -0,0 +1,89 @@
|
|
|
1
|
+
import { describe, it, expect } from "vitest";
|
|
2
|
+
import { validateBaseUrl } from "./contract-suite.js";
|
|
3
|
+
const META_TOOL_NAME = /^codespar_[a-z_]+$/;
|
|
4
|
+
/**
|
|
5
|
+
* Assert a collected tool-call trace stayed at the meta-tool abstraction and
|
|
6
|
+
* covered every meta-tool each turn expected. Pure (no I/O) so it is unit
|
|
7
|
+
* testable directly. Throws an `Error` describing the first violation.
|
|
8
|
+
*/
|
|
9
|
+
export function assertMetaToolTrace(calls, scenario) {
|
|
10
|
+
for (const call of calls) {
|
|
11
|
+
if (call.tool_name.includes("__")) {
|
|
12
|
+
throw new Error(`scenario "${scenario.name}": agent called a raw tool "${call.tool_name}"; demos must call meta-tools`);
|
|
13
|
+
}
|
|
14
|
+
if (!META_TOOL_NAME.test(call.tool_name)) {
|
|
15
|
+
throw new Error(`scenario "${scenario.name}": "${call.tool_name}" is not a meta-tool (expected codespar_*)`);
|
|
16
|
+
}
|
|
17
|
+
if (call.status !== "success") {
|
|
18
|
+
throw new Error(`scenario "${scenario.name}": meta-tool "${call.tool_name}" failed (status ${call.status})`);
|
|
19
|
+
}
|
|
20
|
+
}
|
|
21
|
+
const seen = calls.map((c) => c.tool_name);
|
|
22
|
+
for (const turn of scenario.turns) {
|
|
23
|
+
for (const expected of turn.expectMetaTools) {
|
|
24
|
+
if (!seen.includes(expected)) {
|
|
25
|
+
throw new Error(`scenario "${scenario.name}": expected meta-tool "${expected}" was never called`);
|
|
26
|
+
}
|
|
27
|
+
}
|
|
28
|
+
}
|
|
29
|
+
}
|
|
30
|
+
/**
|
|
31
|
+
* Drive a scenario against a live runtime at `baseUrl`: open a session with the
|
|
32
|
+
* scenario's servers + mocks, send each turn, and collect the tool-call trace.
|
|
33
|
+
* Returns every `ToolCallRecord` the agent produced across all turns.
|
|
34
|
+
*/
|
|
35
|
+
export async function driveDemoScenario(baseUrl, scenario, opts = {}) {
|
|
36
|
+
validateBaseUrl(baseUrl);
|
|
37
|
+
const doFetch = opts.fetchImpl ?? fetch;
|
|
38
|
+
const headers = {
|
|
39
|
+
"Content-Type": "application/json",
|
|
40
|
+
Authorization: `Bearer ${opts.apiKey ?? "demo"}`,
|
|
41
|
+
};
|
|
42
|
+
const createRes = await doFetch(`${baseUrl}/v1/sessions`, {
|
|
43
|
+
method: "POST",
|
|
44
|
+
headers,
|
|
45
|
+
body: JSON.stringify({
|
|
46
|
+
servers: [...scenario.servers],
|
|
47
|
+
user_id: "demo-scenario",
|
|
48
|
+
mocks: scenario.mocks,
|
|
49
|
+
}),
|
|
50
|
+
});
|
|
51
|
+
if (!createRes.ok) {
|
|
52
|
+
throw new Error(`session create failed: ${createRes.status} ${await createRes.text()}`);
|
|
53
|
+
}
|
|
54
|
+
const { id } = (await createRes.json());
|
|
55
|
+
const calls = [];
|
|
56
|
+
try {
|
|
57
|
+
for (const turn of scenario.turns) {
|
|
58
|
+
const sendRes = await doFetch(`${baseUrl}/v1/sessions/${id}/send`, {
|
|
59
|
+
method: "POST",
|
|
60
|
+
headers: { ...headers, Accept: "application/json" },
|
|
61
|
+
body: JSON.stringify({ message: turn.message }),
|
|
62
|
+
});
|
|
63
|
+
if (!sendRes.ok) {
|
|
64
|
+
throw new Error(`send failed: ${sendRes.status} ${await sendRes.text()}`);
|
|
65
|
+
}
|
|
66
|
+
const result = (await sendRes.json());
|
|
67
|
+
calls.push(...result.tool_calls);
|
|
68
|
+
}
|
|
69
|
+
}
|
|
70
|
+
finally {
|
|
71
|
+
await doFetch(`${baseUrl}/v1/sessions/${id}`, { method: "DELETE", headers }).catch(() => { });
|
|
72
|
+
}
|
|
73
|
+
return calls;
|
|
74
|
+
}
|
|
75
|
+
/**
|
|
76
|
+
* Register a vitest test that runs the scenario against `baseUrl` and asserts
|
|
77
|
+
* the meta-tool trace. Both the OSS example and the managed integration test
|
|
78
|
+
* call this with the same scenario object and their own base URL.
|
|
79
|
+
*/
|
|
80
|
+
export function runDemoScenario(baseUrl, scenario, opts = {}) {
|
|
81
|
+
describe(`demo scenario: ${scenario.name}`, () => {
|
|
82
|
+
it("runs green at the meta-tool abstraction", async () => {
|
|
83
|
+
const calls = await driveDemoScenario(baseUrl, scenario, opts);
|
|
84
|
+
expect(calls.length).toBeGreaterThan(0);
|
|
85
|
+
assertMetaToolTrace(calls, scenario);
|
|
86
|
+
});
|
|
87
|
+
});
|
|
88
|
+
}
|
|
89
|
+
//# sourceMappingURL=demo-scenario.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"demo-scenario.js","sourceRoot":"","sources":["../../src/testing/demo-scenario.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"demo-scenario.test.d.ts","sourceRoot":"","sources":["../../src/testing/demo-scenario.test.ts"],"names":[],"mappings":""}
|
|
@@ -0,0 +1,68 @@
|
|
|
1
|
+
import { describe, it, expect } from "vitest";
|
|
2
|
+
import { assertMetaToolTrace, driveDemoScenario, } from "./demo-scenario.js";
|
|
3
|
+
import { SERVICE_INVOICE_SCENARIO } from "./demo-scenarios/service-invoice.js";
|
|
4
|
+
function call(tool_name, status = "success") {
|
|
5
|
+
return {
|
|
6
|
+
id: `tc_${tool_name}`,
|
|
7
|
+
tool_name,
|
|
8
|
+
server_id: "",
|
|
9
|
+
status,
|
|
10
|
+
duration_ms: 1,
|
|
11
|
+
input: {},
|
|
12
|
+
output: {},
|
|
13
|
+
error_code: null,
|
|
14
|
+
};
|
|
15
|
+
}
|
|
16
|
+
const SCN = {
|
|
17
|
+
name: "unit",
|
|
18
|
+
servers: ["a"],
|
|
19
|
+
mocks: {},
|
|
20
|
+
turns: [{ message: "hi", expectMetaTools: ["codespar_invoice", "codespar_notify"] }],
|
|
21
|
+
aimockFixtures: {},
|
|
22
|
+
};
|
|
23
|
+
describe("assertMetaToolTrace", () => {
|
|
24
|
+
it("passes when every call is a successful meta-tool and all expected ones appear", () => {
|
|
25
|
+
expect(() => assertMetaToolTrace([call("codespar_invoice"), call("codespar_notify")], SCN)).not.toThrow();
|
|
26
|
+
});
|
|
27
|
+
it("rejects a raw serverId__tool call", () => {
|
|
28
|
+
expect(() => assertMetaToolTrace([call("nuvem-fiscal__create_nfse")], SCN)).toThrow(/raw tool/);
|
|
29
|
+
});
|
|
30
|
+
it("rejects a non-meta-tool name", () => {
|
|
31
|
+
expect(() => assertMetaToolTrace([call("invoice")], SCN)).toThrow(/not a meta-tool/);
|
|
32
|
+
});
|
|
33
|
+
it("rejects a failed meta-tool call", () => {
|
|
34
|
+
expect(() => assertMetaToolTrace([call("codespar_invoice", "error")], SCN)).toThrow(/failed/);
|
|
35
|
+
});
|
|
36
|
+
it("rejects when an expected meta-tool never appeared", () => {
|
|
37
|
+
expect(() => assertMetaToolTrace([call("codespar_invoice")], SCN)).toThrow(/codespar_notify.*never called/);
|
|
38
|
+
});
|
|
39
|
+
});
|
|
40
|
+
describe("driveDemoScenario", () => {
|
|
41
|
+
it("opens a session with servers+mocks, sends each turn, collects the trace, and closes", async () => {
|
|
42
|
+
const seen = [];
|
|
43
|
+
const fakeFetch = (async (url, init) => {
|
|
44
|
+
seen.push({ url, method: init.method ?? "GET", body: init.body ? JSON.parse(init.body) : undefined });
|
|
45
|
+
if (url.endsWith("/v1/sessions") && init.method === "POST") {
|
|
46
|
+
return new Response(JSON.stringify({ id: "sess_1", status: "active" }), { status: 200 });
|
|
47
|
+
}
|
|
48
|
+
if (url.endsWith("/send")) {
|
|
49
|
+
return new Response(JSON.stringify({ message: "ok", iterations: 1, tool_calls: [call("codespar_invoice")] }), { status: 200 });
|
|
50
|
+
}
|
|
51
|
+
return new Response("", { status: 200 }); // DELETE close
|
|
52
|
+
});
|
|
53
|
+
const calls = await driveDemoScenario("http://localhost:3000", SERVICE_INVOICE_SCENARIO, {
|
|
54
|
+
fetchImpl: fakeFetch,
|
|
55
|
+
});
|
|
56
|
+
expect(calls.map((c) => c.tool_name)).toEqual(["codespar_invoice"]);
|
|
57
|
+
// create body carried servers + mocks from the scenario
|
|
58
|
+
const create = seen.find((s) => s.url.endsWith("/v1/sessions"));
|
|
59
|
+
expect((create?.body).servers).toEqual(["nuvem-fiscal", "z-api"]);
|
|
60
|
+
expect((create?.body).mocks).toHaveProperty("codespar_invoice");
|
|
61
|
+
// session was closed
|
|
62
|
+
expect(seen.some((s) => s.method === "DELETE")).toBe(true);
|
|
63
|
+
});
|
|
64
|
+
it("rejects a non-localhost http base URL (apiKey-leak guard)", async () => {
|
|
65
|
+
await expect(driveDemoScenario("http://evil.example", SCN, { fetchImpl: (async () => new Response()) })).rejects.toThrow();
|
|
66
|
+
});
|
|
67
|
+
});
|
|
68
|
+
//# sourceMappingURL=demo-scenario.test.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"demo-scenario.test.js","sourceRoot":"","sources":["../../src/testing/demo-scenario.test.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"service-invoice.d.ts","sourceRoot":"","sources":["../../../src/testing/demo-scenarios/service-invoice.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,qBAAqB,CAAC;AAexD,eAAO,MAAM,wBAAwB,EAAE,YAuEtC,CAAC"}
|
|
@@ -0,0 +1,83 @@
|
|
|
1
|
+
/* Service-invoice demo, expressed at the meta-tool abstraction.
|
|
2
|
+
*
|
|
3
|
+
* One natural-language request issues two fiscal documents and sends the links
|
|
4
|
+
* back over WhatsApp. The agent calls `codespar_invoice` twice then
|
|
5
|
+
* `codespar_notify` once — never a raw `serverId__tool`. The same object drives
|
|
6
|
+
* the OSS example and the managed integration test; each runtime serves
|
|
7
|
+
* `aimockFixtures` at its own canned-LLM endpoint.
|
|
8
|
+
*
|
|
9
|
+
* `mocks` is keyed on the meta-tool name so the fixture is returned regardless
|
|
10
|
+
* of how a runtime routes the meta-tool to underlying tools — the demo build
|
|
11
|
+
* (the example + the managed test) validates that meta-tool-level mock
|
|
12
|
+
* interception holds on both runtimes.
|
|
13
|
+
*/
|
|
14
|
+
export const SERVICE_INVOICE_SCENARIO = {
|
|
15
|
+
name: "service-invoice",
|
|
16
|
+
servers: ["nuvem-fiscal", "z-api"],
|
|
17
|
+
mocks: {
|
|
18
|
+
// codespar_invoice is called twice; a stateful array returns one per call.
|
|
19
|
+
codespar_invoice: [
|
|
20
|
+
{ id: "nfse_demo_001", status: "autorizada", pdf_url: "https://example.test/nfse_demo_001.pdf" },
|
|
21
|
+
{ id: "nfse_demo_002", status: "autorizada", pdf_url: "https://example.test/nfse_demo_002.pdf" },
|
|
22
|
+
],
|
|
23
|
+
codespar_notify: { messageId: "msg_demo_001", sent: true },
|
|
24
|
+
},
|
|
25
|
+
turns: [
|
|
26
|
+
{
|
|
27
|
+
message: "Preciso de duas NFS-e: taxa de acesso à plataforma R$2.800 e consultoria de onboarding R$1.200. Envia os PDFs no WhatsApp +5511987654321.",
|
|
28
|
+
expectMetaTools: ["codespar_invoice", "codespar_notify"],
|
|
29
|
+
},
|
|
30
|
+
],
|
|
31
|
+
aimockFixtures: {
|
|
32
|
+
fixtures: [
|
|
33
|
+
{
|
|
34
|
+
match: { userMessage: "NFS-e", turnIndex: 0, hasToolResult: false },
|
|
35
|
+
response: {
|
|
36
|
+
toolCalls: [
|
|
37
|
+
{
|
|
38
|
+
name: "codespar_invoice",
|
|
39
|
+
arguments: {
|
|
40
|
+
type: "nfse",
|
|
41
|
+
recipient: { name: "Cliente Demo", document: "00000000000" },
|
|
42
|
+
items: [{ description: "Plataforma SaaS - acesso mensal", amount: 2800.0 }],
|
|
43
|
+
},
|
|
44
|
+
},
|
|
45
|
+
{
|
|
46
|
+
name: "codespar_invoice",
|
|
47
|
+
arguments: {
|
|
48
|
+
type: "nfse",
|
|
49
|
+
recipient: { name: "Cliente Demo", document: "00000000000" },
|
|
50
|
+
items: [{ description: "Consultoria de onboarding", amount: 1200.0 }],
|
|
51
|
+
},
|
|
52
|
+
},
|
|
53
|
+
],
|
|
54
|
+
finishReason: "tool_calls",
|
|
55
|
+
},
|
|
56
|
+
},
|
|
57
|
+
{
|
|
58
|
+
match: { userMessage: "NFS-e", turnIndex: 1, hasToolResult: true },
|
|
59
|
+
response: {
|
|
60
|
+
toolCalls: [
|
|
61
|
+
{
|
|
62
|
+
name: "codespar_notify",
|
|
63
|
+
arguments: {
|
|
64
|
+
channel: "whatsapp",
|
|
65
|
+
to: "+5511987654321",
|
|
66
|
+
message: "Suas notas estão prontas: https://example.test/nfse_demo_001.pdf https://example.test/nfse_demo_002.pdf",
|
|
67
|
+
},
|
|
68
|
+
},
|
|
69
|
+
],
|
|
70
|
+
finishReason: "tool_calls",
|
|
71
|
+
},
|
|
72
|
+
},
|
|
73
|
+
{
|
|
74
|
+
match: { userMessage: "NFS-e", turnIndex: 2, hasToolResult: true },
|
|
75
|
+
response: {
|
|
76
|
+
content: "Duas NFS-e emitidas (nfse_demo_001 e nfse_demo_002) e os PDFs enviados no WhatsApp.",
|
|
77
|
+
finishReason: "stop",
|
|
78
|
+
},
|
|
79
|
+
},
|
|
80
|
+
],
|
|
81
|
+
},
|
|
82
|
+
};
|
|
83
|
+
//# sourceMappingURL=service-invoice.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"service-invoice.js","sourceRoot":"","sources":["../../../src/testing/demo-scenarios/service-invoice.ts"],"names":[],"mappings":"AAEA;;;;;;;;;;;;GAYG;AACH,MAAM,CAAC,MAAM,wBAAwB,GAAiB;IACpD,IAAI,EAAE,iBAAiB;IACvB,OAAO,EAAE,CAAC,cAAc,EAAE,OAAO,CAAC;IAClC,KAAK,EAAE;QACL,2EAA2E;QAC3E,gBAAgB,EAAE;YAChB,EAAE,EAAE,EAAE,eAAe,EAAE,MAAM,EAAE,YAAY,EAAE,OAAO,EAAE,wCAAwC,EAAE;YAChG,EAAE,EAAE,EAAE,eAAe,EAAE,MAAM,EAAE,YAAY,EAAE,OAAO,EAAE,wCAAwC,EAAE;SACjG;QACD,eAAe,EAAE,EAAE,SAAS,EAAE,cAAc,EAAE,IAAI,EAAE,IAAI,EAAE;KAC3D;IACD,KAAK,EAAE;QACL;YACE,OAAO,EACL,2IAA2I;YAC7I,eAAe,EAAE,CAAC,kBAAkB,EAAE,iBAAiB,CAAC;SACzD;KACF;IACD,cAAc,EAAE;QACd,QAAQ,EAAE;YACR;gBACE,KAAK,EAAE,EAAE,WAAW,EAAE,OAAO,EAAE,SAAS,EAAE,CAAC,EAAE,aAAa,EAAE,KAAK,EAAE;gBACnE,QAAQ,EAAE;oBACR,SAAS,EAAE;wBACT;4BACE,IAAI,EAAE,kBAAkB;4BACxB,SAAS,EAAE;gCACT,IAAI,EAAE,MAAM;gCACZ,SAAS,EAAE,EAAE,IAAI,EAAE,cAAc,EAAE,QAAQ,EAAE,aAAa,EAAE;gCAC5D,KAAK,EAAE,CAAC,EAAE,WAAW,EAAE,iCAAiC,EAAE,MAAM,EAAE,MAAM,EAAE,CAAC;6BAC5E;yBACF;wBACD;4BACE,IAAI,EAAE,kBAAkB;4BACxB,SAAS,EAAE;gCACT,IAAI,EAAE,MAAM;gCACZ,SAAS,EAAE,EAAE,IAAI,EAAE,cAAc,EAAE,QAAQ,EAAE,aAAa,EAAE;gCAC5D,KAAK,EAAE,CAAC,EAAE,WAAW,EAAE,2BAA2B,EAAE,MAAM,EAAE,MAAM,EAAE,CAAC;6BACtE;yBACF;qBACF;oBACD,YAAY,EAAE,YAAY;iBAC3B;aACF;YACD;gBACE,KAAK,EAAE,EAAE,WAAW,EAAE,OAAO,EAAE,SAAS,EAAE,CAAC,EAAE,aAAa,EAAE,IAAI,EAAE;gBAClE,QAAQ,EAAE;oBACR,SAAS,EAAE;wBACT;4BACE,IAAI,EAAE,iBAAiB;4BACvB,SAAS,EAAE;gCACT,OAAO,EAAE,UAAU;gCACnB,EAAE,EAAE,gBAAgB;gCACpB,OAAO,EACL,yGAAyG;6BAC5G;yBACF;qBACF;oBACD,YAAY,EAAE,YAAY;iBAC3B;aACF;YACD;gBACE,KAAK,EAAE,EAAE,WAAW,EAAE,OAAO,EAAE,SAAS,EAAE,CAAC,EAAE,aAAa,EAAE,IAAI,EAAE;gBAClE,QAAQ,EAAE;oBACR,OAAO,EACL,qFAAqF;oBACvF,YAAY,EAAE,MAAM;iBACrB;aACF;SACF;KACF;CACF,CAAC"}
|
package/dist/testing/index.d.ts
CHANGED
|
@@ -1,5 +1,7 @@
|
|
|
1
1
|
export * from "./contract-suite.js";
|
|
2
2
|
export * from "./conformance-kit.js";
|
|
3
|
+
export * from "./demo-scenario.js";
|
|
4
|
+
export { SERVICE_INVOICE_SCENARIO } from "./demo-scenarios/service-invoice.js";
|
|
3
5
|
export { META_TOOL_CONTRACTS } from "../meta-tool-contract.js";
|
|
4
6
|
export type { ContractedToolName } from "../meta-tool-contract.js";
|
|
5
7
|
//# sourceMappingURL=index.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/testing/index.ts"],"names":[],"mappings":"AAAA,cAAc,qBAAqB,CAAC;AACpC,cAAc,sBAAsB,CAAC;
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/testing/index.ts"],"names":[],"mappings":"AAAA,cAAc,qBAAqB,CAAC;AACpC,cAAc,sBAAsB,CAAC;AACrC,cAAc,oBAAoB,CAAC;AACnC,OAAO,EAAE,wBAAwB,EAAE,MAAM,qCAAqC,CAAC;AAM/E,OAAO,EAAE,mBAAmB,EAAE,MAAM,0BAA0B,CAAC;AAC/D,YAAY,EAAE,kBAAkB,EAAE,MAAM,0BAA0B,CAAC"}
|
package/dist/testing/index.js
CHANGED
|
@@ -1,5 +1,7 @@
|
|
|
1
1
|
export * from "./contract-suite.js";
|
|
2
2
|
export * from "./conformance-kit.js";
|
|
3
|
+
export * from "./demo-scenario.js";
|
|
4
|
+
export { SERVICE_INVOICE_SCENARIO } from "./demo-scenarios/service-invoice.js";
|
|
3
5
|
// Re-export the contract descriptors from the testing entrypoint too, so a
|
|
4
6
|
// conformance-test author imports the suite and the descriptors it drives
|
|
5
7
|
// from one place (`@codespar/types/testing`) rather than splitting imports
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/testing/index.ts"],"names":[],"mappings":"AAAA,cAAc,qBAAqB,CAAC;AACpC,cAAc,sBAAsB,CAAC;
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/testing/index.ts"],"names":[],"mappings":"AAAA,cAAc,qBAAqB,CAAC;AACpC,cAAc,sBAAsB,CAAC;AACrC,cAAc,oBAAoB,CAAC;AACnC,OAAO,EAAE,wBAAwB,EAAE,MAAM,qCAAqC,CAAC;AAE/E,2EAA2E;AAC3E,0EAA0E;AAC1E,2EAA2E;AAC3E,qCAAqC;AACrC,OAAO,EAAE,mBAAmB,EAAE,MAAM,0BAA0B,CAAC"}
|