@copilotkit/aimock 1.43.0 → 1.45.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 +46 -0
- package/README.md +14 -2
- package/dist/agui-handler.d.ts.map +1 -1
- package/dist/aimock-cli.cjs +31 -5
- package/dist/aimock-cli.cjs.map +1 -1
- package/dist/aimock-cli.d.cts.map +1 -1
- package/dist/aimock-cli.d.ts.map +1 -1
- package/dist/aimock-cli.js +31 -5
- package/dist/aimock-cli.js.map +1 -1
- package/dist/bedrock-converse.cjs +344 -43
- 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 +345 -44
- package/dist/bedrock-converse.js.map +1 -1
- package/dist/bedrock.cjs +195 -42
- 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 +196 -43
- package/dist/bedrock.js.map +1 -1
- package/dist/chaos.cjs +9 -5
- package/dist/chaos.cjs.map +1 -1
- package/dist/chaos.d.cts.map +1 -1
- package/dist/chaos.d.ts.map +1 -1
- package/dist/chaos.js +10 -7
- package/dist/chaos.js.map +1 -1
- package/dist/cli.cjs +238 -9
- package/dist/cli.cjs.map +1 -1
- package/dist/cli.js +242 -13
- package/dist/cli.js.map +1 -1
- package/dist/cohere.cjs +159 -72
- 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 +160 -73
- package/dist/cohere.js.map +1 -1
- package/dist/config-loader.cjs +63 -5
- package/dist/config-loader.cjs.map +1 -1
- package/dist/config-loader.d.cts +37 -4
- package/dist/config-loader.d.cts.map +1 -1
- package/dist/config-loader.d.ts +37 -4
- package/dist/config-loader.d.ts.map +1 -1
- package/dist/config-loader.js +63 -5
- package/dist/config-loader.js.map +1 -1
- package/dist/constants.cjs +8 -0
- package/dist/constants.cjs.map +1 -1
- package/dist/constants.d.cts +6 -2
- package/dist/constants.d.ts +6 -2
- package/dist/constants.js +8 -1
- package/dist/constants.js.map +1 -1
- package/dist/echo-text.cjs +65 -0
- package/dist/echo-text.cjs.map +1 -0
- package/dist/echo-text.d.cts +22 -0
- package/dist/echo-text.d.cts.map +1 -0
- package/dist/echo-text.d.ts +22 -0
- package/dist/echo-text.d.ts.map +1 -0
- package/dist/echo-text.js +65 -0
- package/dist/echo-text.js.map +1 -0
- package/dist/embeddings.cjs +18 -1
- package/dist/embeddings.cjs.map +1 -1
- package/dist/embeddings.d.cts +1 -1
- package/dist/embeddings.d.cts.map +1 -1
- package/dist/embeddings.d.ts +1 -1
- package/dist/embeddings.d.ts.map +1 -1
- package/dist/embeddings.js +18 -1
- package/dist/embeddings.js.map +1 -1
- package/dist/fakes-plugin.cjs +131 -0
- package/dist/fakes-plugin.cjs.map +1 -0
- package/dist/fakes-plugin.d.cts +23 -0
- package/dist/fakes-plugin.d.cts.map +1 -0
- package/dist/fakes-plugin.d.ts +23 -0
- package/dist/fakes-plugin.d.ts.map +1 -0
- package/dist/fakes-plugin.js +127 -0
- package/dist/fakes-plugin.js.map +1 -0
- package/dist/files.cjs +9 -11
- package/dist/files.cjs.map +1 -1
- package/dist/files.d.cts.map +1 -1
- package/dist/files.d.ts.map +1 -1
- package/dist/files.js +10 -13
- package/dist/files.js.map +1 -1
- package/dist/fine-tuning.cjs +1 -19
- package/dist/fine-tuning.cjs.map +1 -1
- package/dist/fine-tuning.d.cts.map +1 -1
- package/dist/fine-tuning.d.ts.map +1 -1
- package/dist/fine-tuning.js +2 -20
- package/dist/fine-tuning.js.map +1 -1
- package/dist/fixture-loader-services.cjs +116 -0
- package/dist/fixture-loader-services.cjs.map +1 -0
- package/dist/fixture-loader-services.d.cts +48 -0
- package/dist/fixture-loader-services.d.cts.map +1 -0
- package/dist/fixture-loader-services.d.ts +48 -0
- package/dist/fixture-loader-services.d.ts.map +1 -0
- package/dist/fixture-loader-services.js +114 -0
- package/dist/fixture-loader-services.js.map +1 -0
- package/dist/fixture-loader.cjs +552 -29
- package/dist/fixture-loader.cjs.map +1 -1
- package/dist/fixture-loader.d.cts +140 -2
- package/dist/fixture-loader.d.cts.map +1 -1
- package/dist/fixture-loader.d.ts +140 -2
- package/dist/fixture-loader.d.ts.map +1 -1
- package/dist/fixture-loader.js +542 -31
- package/dist/fixture-loader.js.map +1 -1
- package/dist/gemini-embeddings.cjs +42 -2
- package/dist/gemini-embeddings.cjs.map +1 -1
- package/dist/gemini-embeddings.js +43 -3
- package/dist/gemini-embeddings.js.map +1 -1
- package/dist/gemini-interactions.cjs +288 -52
- 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 +289 -53
- package/dist/gemini-interactions.js.map +1 -1
- package/dist/gemini.cjs +234 -38
- 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 +235 -39
- package/dist/gemini.js.map +1 -1
- package/dist/helpers.cjs +1157 -12
- package/dist/helpers.cjs.map +1 -1
- package/dist/helpers.d.cts +85 -4
- package/dist/helpers.d.cts.map +1 -1
- package/dist/helpers.d.ts +85 -4
- package/dist/helpers.d.ts.map +1 -1
- package/dist/helpers.js +1113 -14
- package/dist/helpers.js.map +1 -1
- package/dist/images.cjs +3 -2
- package/dist/images.cjs.map +1 -1
- package/dist/images.js +3 -2
- package/dist/images.js.map +1 -1
- package/dist/index.cjs +39 -1
- package/dist/index.d.cts +11 -4
- package/dist/index.d.ts +11 -4
- package/dist/index.js +11 -4
- package/dist/jest.cjs +43 -14
- package/dist/jest.cjs.map +1 -1
- package/dist/jest.d.cts +47 -5
- package/dist/jest.d.cts.map +1 -1
- package/dist/jest.d.ts +47 -5
- package/dist/jest.d.ts.map +1 -1
- package/dist/jest.js +45 -16
- package/dist/jest.js.map +1 -1
- package/dist/journal.cjs +155 -13
- package/dist/journal.cjs.map +1 -1
- package/dist/journal.d.cts +54 -4
- package/dist/journal.d.cts.map +1 -1
- package/dist/journal.d.ts +54 -4
- package/dist/journal.d.ts.map +1 -1
- package/dist/journal.js +155 -13
- package/dist/journal.js.map +1 -1
- package/dist/live-sanitize.cjs +4 -32
- package/dist/live-sanitize.cjs.map +1 -1
- package/dist/live-sanitize.js +4 -32
- package/dist/live-sanitize.js.map +1 -1
- package/dist/llmock.cjs +204 -39
- package/dist/llmock.cjs.map +1 -1
- package/dist/llmock.d.cts +51 -1
- package/dist/llmock.d.cts.map +1 -1
- package/dist/llmock.d.ts +51 -1
- package/dist/llmock.d.ts.map +1 -1
- package/dist/llmock.js +206 -41
- package/dist/llmock.js.map +1 -1
- package/dist/mcp-fakes-mount.cjs +217 -0
- package/dist/mcp-fakes-mount.cjs.map +1 -0
- package/dist/mcp-fakes-mount.js +211 -0
- package/dist/mcp-fakes-mount.js.map +1 -0
- package/dist/mcp-fakes-report.cjs +111 -0
- package/dist/mcp-fakes-report.cjs.map +1 -0
- package/dist/mcp-fakes-report.d.cts +40 -0
- package/dist/mcp-fakes-report.d.cts.map +1 -0
- package/dist/mcp-fakes-report.d.ts +40 -0
- package/dist/mcp-fakes-report.d.ts.map +1 -0
- package/dist/mcp-fakes-report.js +107 -0
- package/dist/mcp-fakes-report.js.map +1 -0
- package/dist/mcp-fakes.cjs +1942 -0
- package/dist/mcp-fakes.cjs.map +1 -0
- package/dist/mcp-fakes.d.cts +504 -0
- package/dist/mcp-fakes.d.cts.map +1 -0
- package/dist/mcp-fakes.d.ts +504 -0
- package/dist/mcp-fakes.d.ts.map +1 -0
- package/dist/mcp-fakes.js +1937 -0
- package/dist/mcp-fakes.js.map +1 -0
- package/dist/mcp-handler.cjs +534 -27
- package/dist/mcp-handler.cjs.map +1 -1
- package/dist/mcp-handler.d.cts +49 -0
- package/dist/mcp-handler.d.cts.map +1 -0
- package/dist/mcp-handler.d.ts +49 -0
- package/dist/mcp-handler.d.ts.map +1 -0
- package/dist/mcp-handler.js +530 -28
- package/dist/mcp-handler.js.map +1 -1
- package/dist/mcp-mock.cjs +326 -47
- package/dist/mcp-mock.cjs.map +1 -1
- package/dist/mcp-mock.d.cts +97 -1
- package/dist/mcp-mock.d.cts.map +1 -1
- package/dist/mcp-mock.d.ts +97 -1
- package/dist/mcp-mock.d.ts.map +1 -1
- package/dist/mcp-mock.js +327 -48
- package/dist/mcp-mock.js.map +1 -1
- package/dist/mcp-recorder.cjs +1224 -0
- package/dist/mcp-recorder.cjs.map +1 -0
- package/dist/mcp-recorder.d.cts +108 -0
- package/dist/mcp-recorder.d.cts.map +1 -0
- package/dist/mcp-recorder.d.ts +108 -0
- package/dist/mcp-recorder.d.ts.map +1 -0
- package/dist/mcp-recorder.js +1215 -0
- package/dist/mcp-recorder.js.map +1 -0
- package/dist/mcp-stub.cjs +5 -1
- package/dist/mcp-stub.d.cts +3 -1
- package/dist/mcp-stub.d.ts +3 -1
- package/dist/mcp-stub.js +3 -1
- package/dist/mcp-types.d.cts +6 -0
- package/dist/mcp-types.d.ts +6 -0
- package/dist/message-text.cjs +192 -0
- package/dist/message-text.cjs.map +1 -0
- package/dist/message-text.d.cts +31 -0
- package/dist/message-text.d.cts.map +1 -0
- package/dist/message-text.d.ts +31 -0
- package/dist/message-text.d.ts.map +1 -0
- package/dist/message-text.js +184 -0
- package/dist/message-text.js.map +1 -0
- package/dist/messages.cjs +400 -56
- 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 +401 -58
- package/dist/messages.js.map +1 -1
- package/dist/metrics.cjs +46 -66
- package/dist/metrics.cjs.map +1 -1
- package/dist/metrics.d.cts +14 -6
- package/dist/metrics.d.cts.map +1 -1
- package/dist/metrics.d.ts +14 -6
- package/dist/metrics.d.ts.map +1 -1
- package/dist/metrics.js +32 -40
- package/dist/metrics.js.map +1 -1
- package/dist/misbehavior.cjs +1523 -0
- package/dist/misbehavior.cjs.map +1 -0
- package/dist/misbehavior.d.cts +43 -0
- package/dist/misbehavior.d.cts.map +1 -0
- package/dist/misbehavior.d.ts +43 -0
- package/dist/misbehavior.d.ts.map +1 -0
- package/dist/misbehavior.js +1511 -0
- package/dist/misbehavior.js.map +1 -0
- package/dist/ollama.cjs +315 -113
- 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 +316 -114
- package/dist/ollama.js.map +1 -1
- package/dist/openapi.cjs +3405 -0
- package/dist/openapi.cjs.map +1 -0
- package/dist/openapi.d.cts +30 -0
- package/dist/openapi.d.cts.map +1 -0
- package/dist/openapi.d.ts +30 -0
- package/dist/openapi.d.ts.map +1 -0
- package/dist/openapi.js +3404 -0
- package/dist/openapi.js.map +1 -0
- package/dist/openrouter-video.cjs +4 -4
- package/dist/openrouter-video.cjs.map +1 -1
- package/dist/openrouter-video.d.cts.map +1 -1
- package/dist/openrouter-video.d.ts.map +1 -1
- package/dist/openrouter-video.js +4 -4
- package/dist/openrouter-video.js.map +1 -1
- package/dist/record-sanitize.cjs +231 -0
- package/dist/record-sanitize.cjs.map +1 -0
- package/dist/record-sanitize.js +224 -0
- package/dist/record-sanitize.js.map +1 -0
- package/dist/recorder.cjs +115 -6
- package/dist/recorder.cjs.map +1 -1
- package/dist/recorder.d.cts +2 -1
- package/dist/recorder.d.cts.map +1 -1
- package/dist/recorder.d.ts +2 -1
- package/dist/recorder.d.ts.map +1 -1
- package/dist/recorder.js +116 -8
- package/dist/recorder.js.map +1 -1
- package/dist/responses.cjs +701 -166
- package/dist/responses.cjs.map +1 -1
- package/dist/responses.d.cts +5 -13
- package/dist/responses.d.cts.map +1 -1
- package/dist/responses.d.ts +5 -13
- package/dist/responses.d.ts.map +1 -1
- package/dist/responses.js +699 -169
- package/dist/responses.js.map +1 -1
- package/dist/route-registry.cjs +951 -0
- package/dist/route-registry.cjs.map +1 -0
- package/dist/route-registry.d.cts +33 -0
- package/dist/route-registry.d.cts.map +1 -0
- package/dist/route-registry.d.ts +33 -0
- package/dist/route-registry.d.ts.map +1 -0
- package/dist/route-registry.js +866 -0
- package/dist/route-registry.js.map +1 -0
- package/dist/router.cjs +24 -2
- package/dist/router.cjs.map +1 -1
- package/dist/router.d.cts.map +1 -1
- package/dist/router.d.ts.map +1 -1
- package/dist/router.js +25 -4
- package/dist/router.js.map +1 -1
- package/dist/server.cjs +1159 -264
- package/dist/server.cjs.map +1 -1
- package/dist/server.d.cts +4 -1
- package/dist/server.d.cts.map +1 -1
- package/dist/server.d.ts +4 -1
- package/dist/server.d.ts.map +1 -1
- package/dist/server.js +1067 -172
- package/dist/server.js.map +1 -1
- package/dist/speech.cjs +4 -2
- package/dist/speech.cjs.map +1 -1
- package/dist/speech.js +4 -2
- package/dist/speech.js.map +1 -1
- package/dist/stream-collapse.cjs +236 -34
- package/dist/stream-collapse.cjs.map +1 -1
- package/dist/stream-collapse.d.cts +39 -4
- package/dist/stream-collapse.d.cts.map +1 -1
- package/dist/stream-collapse.d.ts +39 -4
- package/dist/stream-collapse.d.ts.map +1 -1
- package/dist/stream-collapse.js +235 -35
- package/dist/stream-collapse.js.map +1 -1
- package/dist/suite.cjs +1 -1
- package/dist/suite.js +1 -1
- package/dist/transcription.cjs +2 -2
- 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 +2 -2
- package/dist/transcription.js.map +1 -1
- package/dist/types.cjs +18 -0
- package/dist/types.cjs.map +1 -0
- package/dist/types.d.cts +516 -5
- package/dist/types.d.cts.map +1 -1
- package/dist/types.d.ts +516 -5
- package/dist/types.d.ts.map +1 -1
- package/dist/types.js +17 -0
- package/dist/types.js.map +1 -0
- package/dist/validate-cli.cjs +123 -33
- package/dist/validate-cli.cjs.map +1 -1
- package/dist/validate-cli.js +125 -35
- package/dist/validate-cli.js.map +1 -1
- package/dist/vector-stores.cjs +1180 -0
- package/dist/vector-stores.cjs.map +1 -0
- package/dist/vector-stores.d.cts +106 -0
- package/dist/vector-stores.d.cts.map +1 -0
- package/dist/vector-stores.d.ts +106 -0
- package/dist/vector-stores.d.ts.map +1 -0
- package/dist/vector-stores.js +1164 -0
- package/dist/vector-stores.js.map +1 -0
- package/dist/vector-types.d.cts.map +1 -1
- package/dist/version.cjs +45 -0
- package/dist/version.cjs.map +1 -0
- package/dist/version.js +44 -0
- package/dist/version.js.map +1 -0
- package/dist/video.cjs +19 -0
- package/dist/video.cjs.map +1 -1
- package/dist/video.d.cts.map +1 -1
- package/dist/video.d.ts.map +1 -1
- package/dist/video.js +19 -0
- package/dist/video.js.map +1 -1
- package/dist/vitest.cjs +77 -16
- package/dist/vitest.cjs.map +1 -1
- package/dist/vitest.d.cts +38 -5
- package/dist/vitest.d.cts.map +1 -1
- package/dist/vitest.d.ts +38 -5
- package/dist/vitest.d.ts.map +1 -1
- package/dist/vitest.js +78 -17
- package/dist/vitest.js.map +1 -1
- package/dist/watcher.cjs +6 -2
- package/dist/watcher.cjs.map +1 -1
- package/dist/watcher.js +6 -2
- package/dist/watcher.js.map +1 -1
- package/dist/ws-gemini-live.cjs +210 -101
- package/dist/ws-gemini-live.cjs.map +1 -1
- package/dist/ws-gemini-live.d.cts +9 -3
- package/dist/ws-gemini-live.d.cts.map +1 -1
- package/dist/ws-gemini-live.d.ts +9 -3
- package/dist/ws-gemini-live.d.ts.map +1 -1
- package/dist/ws-gemini-live.js +211 -102
- package/dist/ws-gemini-live.js.map +1 -1
- package/dist/ws-realtime.cjs +175 -62
- package/dist/ws-realtime.cjs.map +1 -1
- package/dist/ws-realtime.d.cts +8 -3
- package/dist/ws-realtime.d.cts.map +1 -1
- package/dist/ws-realtime.d.ts +8 -3
- package/dist/ws-realtime.d.ts.map +1 -1
- package/dist/ws-realtime.js +176 -63
- package/dist/ws-realtime.js.map +1 -1
- package/dist/ws-responses.cjs +121 -16
- package/dist/ws-responses.cjs.map +1 -1
- package/dist/ws-responses.d.cts +8 -12
- package/dist/ws-responses.d.cts.map +1 -1
- package/dist/ws-responses.d.ts +8 -12
- package/dist/ws-responses.d.ts.map +1 -1
- package/dist/ws-responses.js +123 -18
- package/dist/ws-responses.js.map +1 -1
- package/package.json +13 -2
- package/skills/write-fixtures/SKILL.md +179 -21
|
@@ -0,0 +1,40 @@
|
|
|
1
|
+
import { McpFakeReportPart } from "./mcp-fakes.cjs";
|
|
2
|
+
|
|
3
|
+
//#region src/mcp-fakes-report.d.ts
|
|
4
|
+
|
|
5
|
+
type ServedRow = McpFakeReportPart["served"][number];
|
|
6
|
+
type FailureRow = McpFakeReportPart["failures"][number];
|
|
7
|
+
/**
|
|
8
|
+
* RP3: the report. `served` and `failures` are in call order across mounts;
|
|
9
|
+
* their rows have no `seq` (the internal ordering key the parts carry).
|
|
10
|
+
*/
|
|
11
|
+
interface McpFakesReport {
|
|
12
|
+
testId: string | null;
|
|
13
|
+
context: string | null;
|
|
14
|
+
ok: boolean;
|
|
15
|
+
evicted: boolean;
|
|
16
|
+
served: Omit<ServedRow, "seq">[];
|
|
17
|
+
unconsumed: McpFakeReportPart["unconsumed"];
|
|
18
|
+
unfaked: McpFakeReportPart["unfaked"];
|
|
19
|
+
failures: Omit<FailureRow, "seq">[];
|
|
20
|
+
sharedUnconsumed: McpFakeReportPart["sharedUnconsumed"];
|
|
21
|
+
}
|
|
22
|
+
/** RP7/RP8: thrown by the plugins under "fail" and by assertFakesReport. */
|
|
23
|
+
declare class AimockFakesReportError extends Error {
|
|
24
|
+
readonly report: McpFakesReport;
|
|
25
|
+
constructor(report: McpFakesReport, message: string);
|
|
26
|
+
}
|
|
27
|
+
/** TI5: a default test id cannot be inferred safely. */
|
|
28
|
+
declare class AimockTestIdCollisionError extends Error {
|
|
29
|
+
constructor(message: string);
|
|
30
|
+
}
|
|
31
|
+
/** RP1-RP5 over every fake mount of a server. Reads only: no state changes (RP9). */
|
|
32
|
+
|
|
33
|
+
/** RP8: throw `AimockFakesReportError` when the report fails (RP5, plus unfaked under `failOnUnfaked`). */
|
|
34
|
+
declare function assertFakesReport(report: McpFakesReport, opts?: {
|
|
35
|
+
failOnUnfaked?: boolean;
|
|
36
|
+
}): void;
|
|
37
|
+
/** RP6: `GET /__aimock/mcp/fakes/report?testId=&context=`. Always answers; returns true. */
|
|
38
|
+
//#endregion
|
|
39
|
+
export { AimockFakesReportError, AimockTestIdCollisionError, McpFakesReport, assertFakesReport };
|
|
40
|
+
//# sourceMappingURL=mcp-fakes-report.d.cts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"mcp-fakes-report.d.cts","names":[],"sources":["../src/mcp-fakes-report.ts"],"sourcesContent":[],"mappings":";;;;KAYK,SAAA,GAAY,iBAcN,CAAA,QAAA,CAAA,CAAA,MAAA,CAAA;KAbN,UAAA,GAAa,iBAcD,CAAA,UAAA,CAAA,CAAA,MAAA,CAAA;;;;AAKjB;AAAoC,UAbnB,cAAA,CAamB;QACjB,EAAA,MAAA,GAAA,IAAA;SACG,EAAA,MAAA,GAAA,IAAA;MAFsB,OAAA;EAAK,OAAA,EAAA,OAAA;EAUpC,MAAA,EAlBH,IAkBG,CAlBE,SAkBF,EAAA,KAA2B,CAAA,EAAA;EAoGxB,UAAA,EArHF,iBAqHmB,CAAA,YACvB,CAAA;WArHC;YACC,KAAK;oBACG;;;cAIP,sBAAA,SAA+B,KAAA;mBACzB;sBACG;;;cAQT,0BAAA,SAAmC,KAAA;;;;;;iBAoGhC,iBAAA,SACN"}
|
|
@@ -0,0 +1,40 @@
|
|
|
1
|
+
import { McpFakeReportPart } from "./mcp-fakes.js";
|
|
2
|
+
|
|
3
|
+
//#region src/mcp-fakes-report.d.ts
|
|
4
|
+
|
|
5
|
+
type ServedRow = McpFakeReportPart["served"][number];
|
|
6
|
+
type FailureRow = McpFakeReportPart["failures"][number];
|
|
7
|
+
/**
|
|
8
|
+
* RP3: the report. `served` and `failures` are in call order across mounts;
|
|
9
|
+
* their rows have no `seq` (the internal ordering key the parts carry).
|
|
10
|
+
*/
|
|
11
|
+
interface McpFakesReport {
|
|
12
|
+
testId: string | null;
|
|
13
|
+
context: string | null;
|
|
14
|
+
ok: boolean;
|
|
15
|
+
evicted: boolean;
|
|
16
|
+
served: Omit<ServedRow, "seq">[];
|
|
17
|
+
unconsumed: McpFakeReportPart["unconsumed"];
|
|
18
|
+
unfaked: McpFakeReportPart["unfaked"];
|
|
19
|
+
failures: Omit<FailureRow, "seq">[];
|
|
20
|
+
sharedUnconsumed: McpFakeReportPart["sharedUnconsumed"];
|
|
21
|
+
}
|
|
22
|
+
/** RP7/RP8: thrown by the plugins under "fail" and by assertFakesReport. */
|
|
23
|
+
declare class AimockFakesReportError extends Error {
|
|
24
|
+
readonly report: McpFakesReport;
|
|
25
|
+
constructor(report: McpFakesReport, message: string);
|
|
26
|
+
}
|
|
27
|
+
/** TI5: a default test id cannot be inferred safely. */
|
|
28
|
+
declare class AimockTestIdCollisionError extends Error {
|
|
29
|
+
constructor(message: string);
|
|
30
|
+
}
|
|
31
|
+
/** RP1-RP5 over every fake mount of a server. Reads only: no state changes (RP9). */
|
|
32
|
+
|
|
33
|
+
/** RP8: throw `AimockFakesReportError` when the report fails (RP5, plus unfaked under `failOnUnfaked`). */
|
|
34
|
+
declare function assertFakesReport(report: McpFakesReport, opts?: {
|
|
35
|
+
failOnUnfaked?: boolean;
|
|
36
|
+
}): void;
|
|
37
|
+
/** RP6: `GET /__aimock/mcp/fakes/report?testId=&context=`. Always answers; returns true. */
|
|
38
|
+
//#endregion
|
|
39
|
+
export { AimockFakesReportError, AimockTestIdCollisionError, McpFakesReport, assertFakesReport };
|
|
40
|
+
//# sourceMappingURL=mcp-fakes-report.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"mcp-fakes-report.d.ts","names":[],"sources":["../src/mcp-fakes-report.ts"],"sourcesContent":[],"mappings":";;;;KAYK,SAAA,GAAY,iBAcN,CAAA,QAAA,CAAA,CAAA,MAAA,CAAA;KAbN,UAAA,GAAa,iBAcD,CAAA,UAAA,CAAA,CAAA,MAAA,CAAA;;;;AAKjB;AAAoC,UAbnB,cAAA,CAamB;QACjB,EAAA,MAAA,GAAA,IAAA;SACG,EAAA,MAAA,GAAA,IAAA;MAFsB,OAAA;EAAK,OAAA,EAAA,OAAA;EAUpC,MAAA,EAlBH,IAkBG,CAlBE,SAkBF,EAAA,KAA2B,CAAA,EAAA;EAoGxB,UAAA,EArHF,iBAqHmB,CAAA,YACvB,CAAA;WArHC;YACC,KAAK;oBACG;;;cAIP,sBAAA,SAA+B,KAAA;mBACzB;sBACG;;;cAQT,0BAAA,SAAmC,KAAA;;;;;;iBAoGhC,iBAAA,SACN"}
|
|
@@ -0,0 +1,107 @@
|
|
|
1
|
+
import { isFakeMount } from "./mcp-fakes-mount.js";
|
|
2
|
+
|
|
3
|
+
//#region src/mcp-fakes-report.ts
|
|
4
|
+
/** RP7/RP8: thrown by the plugins under "fail" and by assertFakesReport. */
|
|
5
|
+
var AimockFakesReportError = class extends Error {
|
|
6
|
+
report;
|
|
7
|
+
constructor(report, message) {
|
|
8
|
+
super(message);
|
|
9
|
+
this.name = "AimockFakesReportError";
|
|
10
|
+
this.report = report;
|
|
11
|
+
}
|
|
12
|
+
};
|
|
13
|
+
/** TI5: a default test id cannot be inferred safely. */
|
|
14
|
+
var AimockTestIdCollisionError = class extends Error {
|
|
15
|
+
constructor(message) {
|
|
16
|
+
super(message);
|
|
17
|
+
this.name = "AimockTestIdCollisionError";
|
|
18
|
+
}
|
|
19
|
+
};
|
|
20
|
+
function isReportSource(handler) {
|
|
21
|
+
return typeof handler === "object" && handler !== null && typeof handler.fakesReportPart === "function";
|
|
22
|
+
}
|
|
23
|
+
/** RP1-RP5 over every fake mount of a server. Reads only: no state changes (RP9). */
|
|
24
|
+
function buildFakesReport(mounts, testId, context) {
|
|
25
|
+
let evicted = false;
|
|
26
|
+
const served = [];
|
|
27
|
+
const unconsumed = [];
|
|
28
|
+
const unfaked = [];
|
|
29
|
+
const failures = [];
|
|
30
|
+
const sharedUnconsumed = [];
|
|
31
|
+
for (const { path, handler } of mounts) {
|
|
32
|
+
if (!isFakeMount(handler) || !isReportSource(handler)) continue;
|
|
33
|
+
const part = handler.fakesReportPart(testId, context, path);
|
|
34
|
+
evicted ||= part.evicted;
|
|
35
|
+
served.push(...part.served);
|
|
36
|
+
unconsumed.push(...part.unconsumed);
|
|
37
|
+
unfaked.push(...part.unfaked);
|
|
38
|
+
failures.push(...part.failures);
|
|
39
|
+
sharedUnconsumed.push(...part.sharedUnconsumed);
|
|
40
|
+
}
|
|
41
|
+
served.sort((a, b) => a.seq - b.seq);
|
|
42
|
+
failures.sort((a, b) => a.seq - b.seq);
|
|
43
|
+
return {
|
|
44
|
+
testId,
|
|
45
|
+
context,
|
|
46
|
+
ok: failures.length === 0 && !evicted && unconsumed.length === 0,
|
|
47
|
+
evicted,
|
|
48
|
+
served: served.map(({ entryId, mount, tool, args }) => ({
|
|
49
|
+
entryId,
|
|
50
|
+
mount,
|
|
51
|
+
tool,
|
|
52
|
+
args
|
|
53
|
+
})),
|
|
54
|
+
unconsumed,
|
|
55
|
+
unfaked,
|
|
56
|
+
failures: failures.map(({ code, mount, tool, args }) => ({
|
|
57
|
+
code,
|
|
58
|
+
mount,
|
|
59
|
+
tool,
|
|
60
|
+
args
|
|
61
|
+
})),
|
|
62
|
+
sharedUnconsumed
|
|
63
|
+
};
|
|
64
|
+
}
|
|
65
|
+
/** `value` as one line of JSON; a value with no JSON text is shown as `String(value)`. */
|
|
66
|
+
function jsonText(value) {
|
|
67
|
+
try {
|
|
68
|
+
return JSON.stringify(value) ?? String(value);
|
|
69
|
+
} catch {
|
|
70
|
+
return String(value);
|
|
71
|
+
}
|
|
72
|
+
}
|
|
73
|
+
/**
|
|
74
|
+
* RP7 message: a header naming the test id (and context), then one line per
|
|
75
|
+
* failure, then per unconsumed entry id, then the evicted line. With
|
|
76
|
+
* `failOnUnfaked`, one line per unfaked call follows.
|
|
77
|
+
*/
|
|
78
|
+
function formatFakesReport(report, opts = {}) {
|
|
79
|
+
const lines = [`aimock MCP fakes report failed (${report.testId === null ? "no test id" : `testId ${JSON.stringify(report.testId)}`}${report.context === null ? "" : `, context ${JSON.stringify(report.context)}`}):`];
|
|
80
|
+
for (const f of report.failures) lines.push(` failure ${f.code}: tools/call ${f.tool} on ${f.mount} with ${jsonText(f.args)}`);
|
|
81
|
+
for (const u of report.unconsumed) lines.push(` unconsumed: ${u.entryId} (${u.mount} ${u.tool})`);
|
|
82
|
+
if (report.evicted) lines.push(" evicted: this test id's fake state was evicted by the per-mount test-id cap, or its event log overflowed (1000 events); the report is incomplete");
|
|
83
|
+
if (opts.failOnUnfaked === true) for (const u of report.unfaked) lines.push(` unfaked: tools/call ${u.tool} on ${u.mount} answered by ${u.answeredBy}`);
|
|
84
|
+
return lines.join("\n");
|
|
85
|
+
}
|
|
86
|
+
/** RP8: throw `AimockFakesReportError` when the report fails (RP5, plus unfaked under `failOnUnfaked`). */
|
|
87
|
+
function assertFakesReport(report, opts = {}) {
|
|
88
|
+
const unfakedFails = opts.failOnUnfaked === true && report.unfaked.length > 0;
|
|
89
|
+
if (report.ok && !unfakedFails) return;
|
|
90
|
+
throw new AimockFakesReportError(report, formatFakesReport(report, opts));
|
|
91
|
+
}
|
|
92
|
+
/** The query parameters `GET /__aimock/mcp/fakes/report` accepts. */
|
|
93
|
+
const MCP_FAKES_REPORT_PARAMS = new Set(["testId", "context"]);
|
|
94
|
+
/** RP6: `GET /__aimock/mcp/fakes/report?testId=&context=`. Always answers; returns true. */
|
|
95
|
+
function handleFakesReportRoute(res, searchParams, mounts) {
|
|
96
|
+
const reply = (status, body) => {
|
|
97
|
+
res.writeHead(status, { "Content-Type": "application/json" });
|
|
98
|
+
res.end(JSON.stringify(body));
|
|
99
|
+
return true;
|
|
100
|
+
};
|
|
101
|
+
for (const key of searchParams.keys()) if (!MCP_FAKES_REPORT_PARAMS.has(key)) return reply(400, { error: `Unknown query parameter: '${key}'. Supported: ${[...MCP_FAKES_REPORT_PARAMS].join(", ")}` });
|
|
102
|
+
return reply(200, buildFakesReport(mounts, searchParams.get("testId") || null, searchParams.get("context") || null));
|
|
103
|
+
}
|
|
104
|
+
|
|
105
|
+
//#endregion
|
|
106
|
+
export { AimockFakesReportError, AimockTestIdCollisionError, assertFakesReport, formatFakesReport, handleFakesReportRoute };
|
|
107
|
+
//# sourceMappingURL=mcp-fakes-report.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"mcp-fakes-report.js","names":[],"sources":["../src/mcp-fakes-report.ts"],"sourcesContent":["/**\n * The per-test MCP fake report (record-replay RP1-RP8): one identity (a test\n * id, plus an optional context) across every MCP mount of one server. Each\n * mount's `MCPMock` gives its part (`fakesReportPart`, from the store's event\n * log); this module merges the parts, decides `ok` (RP5), formats the failure\n * message (RP7) and serves `GET /__aimock/mcp/fakes/report` (RP6).\n */\nimport type * as http from \"node:http\";\nimport type { MountList } from \"./mcp-fakes-mount.js\";\nimport { isFakeMount } from \"./mcp-fakes-mount.js\";\nimport type { McpFakeReportPart } from \"./mcp-fakes.js\";\n\ntype ServedRow = McpFakeReportPart[\"served\"][number];\ntype FailureRow = McpFakeReportPart[\"failures\"][number];\n\n/**\n * RP3: the report. `served` and `failures` are in call order across mounts;\n * their rows have no `seq` (the internal ordering key the parts carry).\n */\nexport interface McpFakesReport {\n testId: string | null;\n context: string | null;\n ok: boolean;\n evicted: boolean;\n served: Omit<ServedRow, \"seq\">[];\n unconsumed: McpFakeReportPart[\"unconsumed\"];\n unfaked: McpFakeReportPart[\"unfaked\"];\n failures: Omit<FailureRow, \"seq\">[];\n sharedUnconsumed: McpFakeReportPart[\"sharedUnconsumed\"];\n}\n\n/** RP7/RP8: thrown by the plugins under \"fail\" and by assertFakesReport. */\nexport class AimockFakesReportError extends Error {\n readonly report: McpFakesReport;\n constructor(report: McpFakesReport, message: string) {\n super(message);\n this.name = \"AimockFakesReportError\";\n this.report = report;\n }\n}\n\n/** TI5: a default test id cannot be inferred safely. */\nexport class AimockTestIdCollisionError extends Error {\n constructor(message: string) {\n super(message);\n this.name = \"AimockTestIdCollisionError\";\n }\n}\n\ninterface ReportSource {\n fakesReportPart(testId: string | null, context: string | null, mount: string): McpFakeReportPart;\n}\n\nfunction isReportSource(handler: unknown): handler is ReportSource {\n return (\n typeof handler === \"object\" &&\n handler !== null &&\n typeof (handler as Partial<ReportSource>).fakesReportPart === \"function\"\n );\n}\n\n/** RP1-RP5 over every fake mount of a server. Reads only: no state changes (RP9). */\nexport function buildFakesReport(\n mounts: MountList,\n testId: string | null,\n context: string | null,\n): McpFakesReport {\n let evicted = false;\n const served: ServedRow[] = [];\n const unconsumed: McpFakesReport[\"unconsumed\"] = [];\n const unfaked: McpFakesReport[\"unfaked\"] = [];\n const failures: FailureRow[] = [];\n const sharedUnconsumed: McpFakesReport[\"sharedUnconsumed\"] = [];\n for (const { path, handler } of mounts) {\n if (!isFakeMount(handler) || !isReportSource(handler)) continue;\n const part = handler.fakesReportPart(testId, context, path);\n evicted ||= part.evicted;\n served.push(...part.served);\n unconsumed.push(...part.unconsumed);\n unfaked.push(...part.unfaked);\n failures.push(...part.failures);\n sharedUnconsumed.push(...part.sharedUnconsumed);\n }\n // `seq` is shared by every store, so it orders calls across mounts.\n served.sort((a, b) => a.seq - b.seq);\n failures.sort((a, b) => a.seq - b.seq);\n const ok = failures.length === 0 && !evicted && unconsumed.length === 0; // RP5\n return {\n testId,\n context,\n ok,\n evicted,\n served: served.map(({ entryId, mount, tool, args }) => ({ entryId, mount, tool, args })),\n unconsumed,\n unfaked,\n failures: failures.map(({ code, mount, tool, args }) => ({ code, mount, tool, args })),\n sharedUnconsumed,\n };\n}\n\n/** `value` as one line of JSON; a value with no JSON text is shown as `String(value)`. */\nfunction jsonText(value: unknown): string {\n try {\n const text = JSON.stringify(value) as string | undefined;\n return text ?? String(value);\n } catch {\n return String(value);\n }\n}\n\n/**\n * RP7 message: a header naming the test id (and context), then one line per\n * failure, then per unconsumed entry id, then the evicted line. With\n * `failOnUnfaked`, one line per unfaked call follows.\n */\nexport function formatFakesReport(\n report: McpFakesReport,\n opts: { failOnUnfaked?: boolean } = {},\n): string {\n const who = report.testId === null ? \"no test id\" : `testId ${JSON.stringify(report.testId)}`;\n const ctx = report.context === null ? \"\" : `, context ${JSON.stringify(report.context)}`;\n const lines = [`aimock MCP fakes report failed (${who}${ctx}):`];\n for (const f of report.failures) {\n lines.push(` failure ${f.code}: tools/call ${f.tool} on ${f.mount} with ${jsonText(f.args)}`);\n }\n for (const u of report.unconsumed) {\n lines.push(` unconsumed: ${u.entryId} (${u.mount} ${u.tool})`);\n }\n if (report.evicted) {\n lines.push(\n \" evicted: this test id's fake state was evicted by the per-mount test-id cap, or its event log overflowed (1000 events); the report is incomplete\",\n );\n }\n if (opts.failOnUnfaked === true) {\n for (const u of report.unfaked) {\n lines.push(` unfaked: tools/call ${u.tool} on ${u.mount} answered by ${u.answeredBy}`);\n }\n }\n return lines.join(\"\\n\");\n}\n\n/** RP8: throw `AimockFakesReportError` when the report fails (RP5, plus unfaked under `failOnUnfaked`). */\nexport function assertFakesReport(\n report: McpFakesReport,\n opts: { failOnUnfaked?: boolean } = {},\n): void {\n const unfakedFails = opts.failOnUnfaked === true && report.unfaked.length > 0;\n if (report.ok && !unfakedFails) return;\n throw new AimockFakesReportError(report, formatFakesReport(report, opts));\n}\n\n/** The query parameters `GET /__aimock/mcp/fakes/report` accepts. */\nconst MCP_FAKES_REPORT_PARAMS = new Set([\"testId\", \"context\"]);\n\n/** RP6: `GET /__aimock/mcp/fakes/report?testId=&context=`. Always answers; returns true. */\nexport function handleFakesReportRoute(\n res: http.ServerResponse,\n searchParams: URLSearchParams,\n mounts: MountList,\n): true {\n const reply = (status: number, body: unknown): true => {\n res.writeHead(status, { \"Content-Type\": \"application/json\" });\n res.end(JSON.stringify(body));\n return true;\n };\n for (const key of searchParams.keys()) {\n if (!MCP_FAKES_REPORT_PARAMS.has(key)) {\n return reply(400, {\n error: `Unknown query parameter: '${key}'. Supported: ${[...MCP_FAKES_REPORT_PARAMS].join(\", \")}`,\n });\n }\n }\n // Empty values are not supplied, as on GET /__aimock/mcp/fakes.\n const testId = searchParams.get(\"testId\") || null;\n const context = searchParams.get(\"context\") || null;\n return reply(200, buildFakesReport(mounts, testId, context));\n}\n"],"mappings":"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"}
|