@copilotkit/aimock 1.46.0 → 1.47.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/.claude-plugin/marketplace.json +1 -1
- package/.claude-plugin/plugin.json +1 -1
- package/CHANGELOG.md +12 -1
- package/README.md +4 -1
- package/dist/aws-event-stream.cjs +20 -23
- package/dist/aws-event-stream.cjs.map +1 -1
- package/dist/aws-event-stream.d.cts +0 -1
- package/dist/aws-event-stream.d.ts +0 -1
- package/dist/aws-event-stream.js +20 -24
- package/dist/aws-event-stream.js.map +1 -1
- package/dist/bedrock-converse.cjs +79 -82
- package/dist/bedrock-converse.cjs.map +1 -1
- package/dist/bedrock-converse.d.cts.map +1 -1
- package/dist/bedrock-converse.d.ts.map +1 -1
- package/dist/bedrock-converse.js +80 -83
- package/dist/bedrock-converse.js.map +1 -1
- package/dist/bedrock.cjs +112 -121
- package/dist/bedrock.cjs.map +1 -1
- package/dist/bedrock.d.cts.map +1 -1
- package/dist/bedrock.d.ts.map +1 -1
- package/dist/bedrock.js +113 -122
- package/dist/bedrock.js.map +1 -1
- package/dist/cohere.cjs +58 -106
- package/dist/cohere.cjs.map +1 -1
- package/dist/cohere.d.cts.map +1 -1
- package/dist/cohere.d.ts.map +1 -1
- package/dist/cohere.js +60 -108
- package/dist/cohere.js.map +1 -1
- package/dist/config-loader.d.cts.map +1 -1
- package/dist/config-loader.d.ts.map +1 -1
- package/dist/fixture-loader.cjs +103 -2
- package/dist/fixture-loader.cjs.map +1 -1
- package/dist/fixture-loader.d.cts.map +1 -1
- package/dist/fixture-loader.d.ts.map +1 -1
- package/dist/fixture-loader.js +104 -4
- package/dist/fixture-loader.js.map +1 -1
- package/dist/gemini-interactions.cjs +63 -121
- package/dist/gemini-interactions.cjs.map +1 -1
- package/dist/gemini-interactions.d.cts.map +1 -1
- package/dist/gemini-interactions.d.ts.map +1 -1
- package/dist/gemini-interactions.js +65 -123
- package/dist/gemini-interactions.js.map +1 -1
- package/dist/gemini.cjs +242 -155
- package/dist/gemini.cjs.map +1 -1
- package/dist/gemini.d.cts.map +1 -1
- package/dist/gemini.d.ts.map +1 -1
- package/dist/gemini.js +244 -157
- package/dist/gemini.js.map +1 -1
- package/dist/helpers.cjs +400 -7
- package/dist/helpers.cjs.map +1 -1
- package/dist/helpers.d.cts +51 -1
- package/dist/helpers.d.cts.map +1 -1
- package/dist/helpers.d.ts +51 -1
- package/dist/helpers.d.ts.map +1 -1
- package/dist/helpers.js +391 -8
- package/dist/helpers.js.map +1 -1
- package/dist/index.cjs +4 -2
- package/dist/index.d.cts +4 -4
- package/dist/index.d.ts +4 -4
- package/dist/index.js +4 -4
- package/dist/mcp-fakes.d.cts.map +1 -1
- package/dist/messages.cjs +159 -141
- package/dist/messages.cjs.map +1 -1
- package/dist/messages.d.cts.map +1 -1
- package/dist/messages.d.ts.map +1 -1
- package/dist/messages.js +161 -143
- package/dist/messages.js.map +1 -1
- package/dist/misbehavior.cjs +62 -3
- package/dist/misbehavior.cjs.map +1 -1
- package/dist/misbehavior.d.cts.map +1 -1
- package/dist/misbehavior.d.ts.map +1 -1
- package/dist/misbehavior.js +63 -4
- package/dist/misbehavior.js.map +1 -1
- package/dist/ndjson-writer.cjs +21 -23
- package/dist/ndjson-writer.cjs.map +1 -1
- package/dist/ndjson-writer.d.cts +0 -1
- package/dist/ndjson-writer.d.cts.map +1 -1
- package/dist/ndjson-writer.d.ts +0 -1
- package/dist/ndjson-writer.d.ts.map +1 -1
- package/dist/ndjson-writer.js +21 -24
- package/dist/ndjson-writer.js.map +1 -1
- package/dist/ollama.cjs +153 -147
- package/dist/ollama.cjs.map +1 -1
- package/dist/ollama.d.cts.map +1 -1
- package/dist/ollama.d.ts.map +1 -1
- package/dist/ollama.js +155 -149
- package/dist/ollama.js.map +1 -1
- package/dist/openrouter-chat.cjs +1 -1
- package/dist/openrouter-chat.js +1 -1
- package/dist/raw-validation.cjs +177 -0
- package/dist/raw-validation.cjs.map +1 -0
- package/dist/raw-validation.js +176 -0
- package/dist/raw-validation.js.map +1 -0
- package/dist/response/deliver.cjs +144 -0
- package/dist/response/deliver.cjs.map +1 -0
- package/dist/response/deliver.js +143 -0
- package/dist/response/deliver.js.map +1 -0
- package/dist/response/frame-loop.cjs +102 -0
- package/dist/response/frame-loop.cjs.map +1 -0
- package/dist/response/frame-loop.js +100 -0
- package/dist/response/frame-loop.js.map +1 -0
- package/dist/response/lifecycle.cjs +223 -0
- package/dist/response/lifecycle.cjs.map +1 -0
- package/dist/response/lifecycle.js +211 -0
- package/dist/response/lifecycle.js.map +1 -0
- package/dist/response/proxy.cjs +71 -0
- package/dist/response/proxy.cjs.map +1 -0
- package/dist/response/proxy.js +70 -0
- package/dist/response/proxy.js.map +1 -0
- package/dist/response/raw.cjs +228 -0
- package/dist/response/raw.cjs.map +1 -0
- package/dist/response/raw.js +227 -0
- package/dist/response/raw.js.map +1 -0
- package/dist/response/timing.cjs +157 -0
- package/dist/response/timing.cjs.map +1 -0
- package/dist/response/timing.js +150 -0
- package/dist/response/timing.js.map +1 -0
- package/dist/responses.cjs +269 -148
- package/dist/responses.cjs.map +1 -1
- package/dist/responses.d.cts.map +1 -1
- package/dist/responses.d.ts.map +1 -1
- package/dist/responses.js +270 -149
- package/dist/responses.js.map +1 -1
- package/dist/router.cjs +20 -4
- package/dist/router.cjs.map +1 -1
- package/dist/router.d.cts +7 -1
- package/dist/router.d.cts.map +1 -1
- package/dist/router.d.ts +7 -1
- package/dist/router.d.ts.map +1 -1
- package/dist/router.js +21 -5
- package/dist/router.js.map +1 -1
- package/dist/server.cjs +89 -120
- package/dist/server.cjs.map +1 -1
- package/dist/server.d.cts.map +1 -1
- package/dist/server.d.ts.map +1 -1
- package/dist/server.js +91 -122
- package/dist/server.js.map +1 -1
- package/dist/sse-writer.cjs +49 -30
- package/dist/sse-writer.cjs.map +1 -1
- package/dist/sse-writer.d.cts +0 -1
- package/dist/sse-writer.d.cts.map +1 -1
- package/dist/sse-writer.d.ts +0 -1
- package/dist/sse-writer.d.ts.map +1 -1
- package/dist/sse-writer.js +49 -31
- package/dist/sse-writer.js.map +1 -1
- package/dist/transcription.cjs +19 -33
- package/dist/transcription.cjs.map +1 -1
- package/dist/transcription.d.cts.map +1 -1
- package/dist/transcription.d.ts.map +1 -1
- package/dist/transcription.js +20 -34
- package/dist/transcription.js.map +1 -1
- package/dist/types.cjs.map +1 -1
- package/dist/types.d.cts +173 -10
- package/dist/types.d.cts.map +1 -1
- package/dist/types.d.ts +173 -10
- package/dist/types.d.ts.map +1 -1
- package/dist/types.js.map +1 -1
- package/dist/ws-framing.cjs +12 -6
- package/dist/ws-framing.cjs.map +1 -1
- package/dist/ws-framing.d.cts +2 -0
- package/dist/ws-framing.d.cts.map +1 -1
- package/dist/ws-framing.d.ts +2 -0
- package/dist/ws-framing.d.ts.map +1 -1
- package/dist/ws-framing.js +12 -6
- package/dist/ws-framing.js.map +1 -1
- package/dist/ws-gemini-live.cjs +120 -93
- package/dist/ws-gemini-live.cjs.map +1 -1
- package/dist/ws-gemini-live.js +120 -93
- package/dist/ws-gemini-live.js.map +1 -1
- package/dist/ws-realtime.cjs +80 -70
- package/dist/ws-realtime.cjs.map +1 -1
- package/dist/ws-realtime.d.cts.map +1 -1
- package/dist/ws-realtime.d.ts.map +1 -1
- package/dist/ws-realtime.js +80 -70
- package/dist/ws-realtime.js.map +1 -1
- package/dist/ws-responses.cjs +72 -53
- package/dist/ws-responses.cjs.map +1 -1
- package/dist/ws-responses.d.cts.map +1 -1
- package/dist/ws-responses.d.ts.map +1 -1
- package/dist/ws-responses.js +73 -54
- package/dist/ws-responses.js.map +1 -1
- package/package.json +1 -1
- package/skills/write-fixtures/SKILL.md +34 -2
package/dist/misbehavior.cjs
CHANGED
|
@@ -1094,7 +1094,10 @@ function prepareLengthCandidate(context, fault) {
|
|
|
1094
1094
|
}
|
|
1095
1095
|
};
|
|
1096
1096
|
}
|
|
1097
|
-
/**
|
|
1097
|
+
/**
|
|
1098
|
+
* Remove all chat output channels while preserving response metadata. The
|
|
1099
|
+
* fixture `files` and `citations` keys survive: they are not removed here.
|
|
1100
|
+
*/
|
|
1098
1101
|
function clearChatOutput(response) {
|
|
1099
1102
|
const cleared = {
|
|
1100
1103
|
...response,
|
|
@@ -1247,15 +1250,21 @@ function misbehaviorRoll(seed) {
|
|
|
1247
1250
|
* function call whose `arguments` are not valid JSON (see
|
|
1248
1251
|
* {@link rejectsInvalidToolArguments}). A rejection is either a coded fixture
|
|
1249
1252
|
* tool-call error or the plain Error for a malformed text block or an unknown
|
|
1250
|
-
* block type; all of them mean the wire cannot serve the fixture.
|
|
1253
|
+
* block type; all of them mean the wire cannot serve the fixture. The ordered
|
|
1254
|
+
* blocks the planner itself reads ({@link resolveServedBlockOutcome}) are
|
|
1255
|
+
* checked on every wire, so the planner never throws for them. So are the
|
|
1256
|
+
* fixture's `citations` and `files` (see {@link assertServableFixtureOutput}),
|
|
1257
|
+
* on the original turn before any fault rewrites it, so a fixture that will
|
|
1258
|
+
* be rejected never consumes a fault's budget.
|
|
1251
1259
|
*/
|
|
1252
1260
|
function servesFixture(wire, stream, response) {
|
|
1253
1261
|
if (typeof response !== "object" || response === null) return true;
|
|
1254
1262
|
const blocks = "blocks" in response ? response.blocks : void 0;
|
|
1255
1263
|
let functionCalls = [];
|
|
1256
1264
|
try {
|
|
1265
|
+
const outcome = require_helpers.resolveServedBlockOutcome(response);
|
|
1257
1266
|
if (wire === "openai-responses") {
|
|
1258
|
-
if (!
|
|
1267
|
+
if (!outcome && "toolCalls" in response) {
|
|
1259
1268
|
require_helpers.assertCustomToolCalls(response);
|
|
1260
1269
|
require_helpers.assertResponsesToolCalls(require_helpers.servedToolCalls(response));
|
|
1261
1270
|
}
|
|
@@ -1263,12 +1272,40 @@ function servesFixture(wire, stream, response) {
|
|
|
1263
1272
|
functionCalls = require_helpers.requireEmittedFunctionToolCalls(response, wire);
|
|
1264
1273
|
if (Array.isArray(blocks) && blocks.length > 0) functionCalls = require_helpers.resolveFixtureBlocks(blocks).filter((block) => block.type === "toolCall");
|
|
1265
1274
|
}
|
|
1275
|
+
assertServableFixtureOutput(wire, response);
|
|
1266
1276
|
} catch {
|
|
1267
1277
|
return false;
|
|
1268
1278
|
}
|
|
1269
1279
|
return !(require_helpers.strictToolArgumentsEnabled() ? rejectsInvalidToolArguments(wire, stream) : replacesInvalidToolArguments(wire)) || functionCalls.every((call) => require_helpers.toolArgsForWire(call).kind === "parsed");
|
|
1270
1280
|
}
|
|
1271
1281
|
/**
|
|
1282
|
+
* Throw when this wire's normal path would answer a coded 500 for the
|
|
1283
|
+
* fixture's `citations` or `files`, checked against the original turn before
|
|
1284
|
+
* any fault rewrites it: a malformed value (`aimock_invalid_fixture_citation`
|
|
1285
|
+
* / `aimock_invalid_fixture_file`, including citations on a turn with no
|
|
1286
|
+
* text), or generated files the wire cannot carry
|
|
1287
|
+
* (`aimock_unsupported_generated_file`: any file on Chat Completions and
|
|
1288
|
+
* Anthropic Messages, a non-`image/*` file on the OpenAI Responses API). Only
|
|
1289
|
+
* the wires that read these keys check them; the others ignore them. A valid
|
|
1290
|
+
* fixture passes, and a fault that alters the reply text then drops its
|
|
1291
|
+
* citations ({@link citationsForServedText}).
|
|
1292
|
+
*/
|
|
1293
|
+
function assertServableFixtureOutput(wire, response) {
|
|
1294
|
+
if (!OUTPUT_WIRES.has(wire)) return;
|
|
1295
|
+
if (!(require_helpers.isCombinedFixtureResponse(response) || require_helpers.isTextResponse(response) || require_helpers.isToolCallResponse(response))) return;
|
|
1296
|
+
if (wire === "openai-chat" || wire === "anthropic") require_helpers.rejectGeneratedFiles(response, wire);
|
|
1297
|
+
const files = require_helpers.fixtureFiles(response.files);
|
|
1298
|
+
if (wire === "openai-responses" && !files.every((file) => file.mimeType.toLowerCase().startsWith("image/"))) throw new require_helpers.UnsupportedGeneratedFileError(wire);
|
|
1299
|
+
require_helpers.fixtureCitations(servedText(response), response.citations);
|
|
1300
|
+
}
|
|
1301
|
+
/** The wires whose normal path reads a fixture's `citations` and `files`. */
|
|
1302
|
+
const OUTPUT_WIRES = new Set([
|
|
1303
|
+
"openai-chat",
|
|
1304
|
+
"openai-responses",
|
|
1305
|
+
"anthropic",
|
|
1306
|
+
"gemini"
|
|
1307
|
+
]);
|
|
1308
|
+
/**
|
|
1272
1309
|
* Whether the normal path of this wire serves invalid-JSON `arguments` as
|
|
1273
1310
|
* `{}` / `"{}"` (the default, as in 1.44.0) instead of the authored text. The
|
|
1274
1311
|
* OpenAI wires pass the authored text through unchanged.
|
|
@@ -1297,6 +1334,26 @@ function rejectsInvalidToolArguments(wire, stream) {
|
|
|
1297
1334
|
default: return false;
|
|
1298
1335
|
}
|
|
1299
1336
|
}
|
|
1337
|
+
/** The reply text a response serves: its ordered text blocks, else `content`. */
|
|
1338
|
+
function servedText(response) {
|
|
1339
|
+
if (require_helpers.isCombinedFixtureResponse(response) || require_helpers.isTextResponse(response)) return require_helpers.resolveServedBlockOutcome(response)?.content ?? response.content ?? "";
|
|
1340
|
+
return "";
|
|
1341
|
+
}
|
|
1342
|
+
/**
|
|
1343
|
+
* Fixture `citations` index the reply text. A fault that replaces, truncates
|
|
1344
|
+
* or empties that text drops them for the turn, so every wire serves no
|
|
1345
|
+
* citation into text it no longer sends; a fault that serves the original
|
|
1346
|
+
* text unchanged keeps them.
|
|
1347
|
+
*/
|
|
1348
|
+
function citationsForServedText(original, candidate) {
|
|
1349
|
+
const response = candidate.response;
|
|
1350
|
+
if (!(require_helpers.isCombinedFixtureResponse(response) || require_helpers.isTextResponse(response) || require_helpers.isToolCallResponse(response))) return response;
|
|
1351
|
+
if (response.citations === void 0) return response;
|
|
1352
|
+
if (candidate.refusal === void 0 && candidate.reasoning === void 0 && servedText(response) === servedText(original)) return response;
|
|
1353
|
+
const withoutCitations = { ...response };
|
|
1354
|
+
delete withoutCitations.citations;
|
|
1355
|
+
return withoutCitations;
|
|
1356
|
+
}
|
|
1300
1357
|
/** Complete preparation precedes selection; every candidate sees the original response. */
|
|
1301
1358
|
function planMisbehavior(input) {
|
|
1302
1359
|
const { wire, fixture, defaults } = input;
|
|
@@ -1315,6 +1372,7 @@ function planMisbehavior(input) {
|
|
|
1315
1372
|
source = "server";
|
|
1316
1373
|
parsed = parseMisbehavior(defaults.misbehavior.baseline);
|
|
1317
1374
|
} else return { kind: "skipped" };
|
|
1375
|
+
if (source === "fixture" && require_helpers.isRawResponse(input.response)) return { kind: "skipped" };
|
|
1318
1376
|
if (!parsed.ok) return {
|
|
1319
1377
|
kind: "error",
|
|
1320
1378
|
status: source === "header" ? 400 : 501,
|
|
@@ -1435,6 +1493,7 @@ function planMisbehavior(input) {
|
|
|
1435
1493
|
return {
|
|
1436
1494
|
kind: "applied",
|
|
1437
1495
|
...candidate,
|
|
1496
|
+
response: citationsForServedText(input.response, candidate),
|
|
1438
1497
|
summary: {
|
|
1439
1498
|
...summaryFor(row),
|
|
1440
1499
|
...candidate.target !== void 0 ? { target: candidate.target } : {},
|