cuonztech-agent-harness 0.3.2 → 0.4.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/README.md +2 -0
- package/dist/benchmark/cta.d.ts +2 -0
- package/dist/benchmark/cta.d.ts.map +1 -1
- package/dist/benchmark/cta.js +4 -0
- package/dist/benchmark/cta.js.map +1 -1
- package/dist/benchmark/runner.js +9 -4
- package/dist/benchmark/runner.js.map +1 -1
- package/dist/core/report-generator.d.ts.map +1 -1
- package/dist/core/report-generator.js +30 -13
- package/dist/core/report-generator.js.map +1 -1
- package/dist/engine/state-machine.d.ts +5 -2
- package/dist/engine/state-machine.d.ts.map +1 -1
- package/dist/engine/state-machine.js +50 -4
- package/dist/engine/state-machine.js.map +1 -1
- package/dist/index.js +134 -5
- package/dist/index.js.map +1 -1
- package/dist/proxy/gateway.d.ts.map +1 -1
- package/dist/proxy/gateway.js +2 -1
- package/dist/proxy/gateway.js.map +1 -1
- package/dist/proxy/ghost-write.d.ts.map +1 -1
- package/dist/proxy/ghost-write.js +15 -4
- package/dist/proxy/ghost-write.js.map +1 -1
- package/dist/proxy/interceptor.d.ts +3 -4
- package/dist/proxy/interceptor.d.ts.map +1 -1
- package/dist/proxy/interceptor.js +71 -42
- package/dist/proxy/interceptor.js.map +1 -1
- package/dist/scenarios/f1-f5.d.ts.map +1 -1
- package/dist/scenarios/f1-f5.js +18 -6
- package/dist/scenarios/f1-f5.js.map +1 -1
- package/dist/scenarios/types.d.ts +7 -1
- package/dist/scenarios/types.d.ts.map +1 -1
- package/dist/server/server.d.ts.map +1 -1
- package/dist/server/server.js +2 -1
- package/dist/server/server.js.map +1 -1
- package/dist/tools/handlers.d.ts +1 -0
- package/dist/tools/handlers.d.ts.map +1 -1
- package/dist/tools/handlers.js +17 -3
- package/dist/tools/handlers.js.map +1 -1
- package/dist/tools/schemas.d.ts +1 -0
- package/dist/tools/schemas.d.ts.map +1 -1
- package/dist/tools/schemas.js +9 -0
- package/dist/tools/schemas.js.map +1 -1
- package/dist/version.d.ts +2 -0
- package/dist/version.d.ts.map +1 -0
- package/dist/version.js +13 -0
- package/dist/version.js.map +1 -0
- package/package.json +1 -1
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"gateway.d.ts","sourceRoot":"","sources":["../../src/proxy/gateway.ts"],"names":[],"mappings":"AAOA,OAAO,EAAE,MAAM,EAAE,MAAM,2CAA2C,CAAC;
|
|
1
|
+
{"version":3,"file":"gateway.d.ts","sourceRoot":"","sources":["../../src/proxy/gateway.ts"],"names":[],"mappings":"AAOA,OAAO,EAAE,MAAM,EAAE,MAAM,2CAA2C,CAAC;AAOnE,OAAO,KAAK,EAAE,gBAAgB,EAAE,MAAM,kBAAkB,CAAC;AAgEzD,wBAAgB,iBAAiB,CAAC,WAAW,EAAE,gBAAgB,GAAG,MAAM,CA+CvE"}
|
package/dist/proxy/gateway.js
CHANGED
|
@@ -8,6 +8,7 @@
|
|
|
8
8
|
import { Server } from "@modelcontextprotocol/sdk/server/index.js";
|
|
9
9
|
import { ListToolsRequestSchema, CallToolRequestSchema, } from "@modelcontextprotocol/sdk/types.js";
|
|
10
10
|
import { z } from "zod";
|
|
11
|
+
import { VERSION } from "../version.js";
|
|
11
12
|
import { GetReportSchema, GetScoreSchema, ListScenariosSchema, ResetSessionSchema, DeleteSessionSchema, } from "../tools/schemas.js";
|
|
12
13
|
import { handleGetReport, handleGetScore, handleListScenarios, handleResetSession, handleDeleteSession, } from "../tools/handlers.js";
|
|
13
14
|
// session_id is required in the shared schemas (used by the multi-session
|
|
@@ -48,7 +49,7 @@ function isOwnTool(name) {
|
|
|
48
49
|
return name in OWN_TOOLS;
|
|
49
50
|
}
|
|
50
51
|
export function createProxyServer(interceptor) {
|
|
51
|
-
const server = new Server({ name: "cuonztech-agent-harness-proxy", version:
|
|
52
|
+
const server = new Server({ name: "cuonztech-agent-harness-proxy", version: VERSION }, { capabilities: { tools: {} } });
|
|
52
53
|
server.setRequestHandler(ListToolsRequestSchema, async () => {
|
|
53
54
|
const upstreamDefs = interceptor.getUpstreamTools();
|
|
54
55
|
const ownDefs = Object.keys(OWN_TOOLS).map((name) => {
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"gateway.js","sourceRoot":"","sources":["../../src/proxy/gateway.ts"],"names":[],"mappings":"AAAA,2EAA2E;AAC3E,0EAA0E;AAC1E,wEAAwE;AACxE,wEAAwE;AACxE,wEAAwE;AACxE,wEAAwE;AACxE,+CAA+C;AAC/C,OAAO,EAAE,MAAM,EAAE,MAAM,2CAA2C,CAAC;AACnE,OAAO,EACL,sBAAsB,EACtB,qBAAqB,GACtB,MAAM,oCAAoC,CAAC;AAC5C,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAC;
|
|
1
|
+
{"version":3,"file":"gateway.js","sourceRoot":"","sources":["../../src/proxy/gateway.ts"],"names":[],"mappings":"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"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"ghost-write.d.ts","sourceRoot":"","sources":["../../src/proxy/ghost-write.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,YAAY,EAAE,UAAU,EAAE,MAAM,4BAA4B,CAAC;AAI3E,MAAM,WAAW,aAAa;IAC5B,WAAW,EAAE,OAAO,CAAC;IACrB,SAAS,EAAE,MAAM,GAAG,IAAI,CAAC;IACzB,UAAU,EAAE,MAAM,CAAC;IACnB,SAAS,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,GAAG,MAAM,GAAG,IAAI,CAAC;IACnD,eAAe,EAAE,OAAO,CAAC;IACzB,OAAO,EAAE,MAAM,CAAC;CACjB;AAED,wBAAgB,iBAAiB,CAC/B,OAAO,EAAE,YAAY,EACrB,UAAU,EAAE,MAAM,EAClB,QAAQ,EAAE,MAAM,EAChB,IAAI,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,GAC5B,aAAa,
|
|
1
|
+
{"version":3,"file":"ghost-write.d.ts","sourceRoot":"","sources":["../../src/proxy/ghost-write.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,YAAY,EAAE,UAAU,EAAE,MAAM,4BAA4B,CAAC;AAI3E,MAAM,WAAW,aAAa;IAC5B,WAAW,EAAE,OAAO,CAAC;IACrB,SAAS,EAAE,MAAM,GAAG,IAAI,CAAC;IACzB,UAAU,EAAE,MAAM,CAAC;IACnB,SAAS,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,GAAG,MAAM,GAAG,IAAI,CAAC;IACnD,eAAe,EAAE,OAAO,CAAC;IACzB,OAAO,EAAE,MAAM,CAAC;CACjB;AAED,wBAAgB,iBAAiB,CAC/B,OAAO,EAAE,YAAY,EACrB,UAAU,EAAE,MAAM,EAClB,QAAQ,EAAE,MAAM,EAChB,IAAI,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,GAC5B,aAAa,CA6Df;AAED,MAAM,WAAW,gBAAgB;IAC/B,gBAAgB,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,GAAG,IAAI,CAAC;IACjD,GAAG,EAAE,MAAM,GAAG,IAAI,CAAC;CACpB;AAED,wBAAgB,gBAAgB,CAC9B,OAAO,EAAE,YAAY,EACrB,IAAI,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,EAC7B,gBAAgB,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,GAAG,IAAI,GAC/C,gBAAgB,CAMlB;AAED,wBAAgB,eAAe,CAC7B,UAAU,EAAE,MAAM,EAClB,QAAQ,EAAE,MAAM,EAChB,IAAI,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,EAC7B,aAAa,EAAE,MAAM,GAAG,IAAI,EAC5B,QAAQ,EAAE,MAAM,EAChB,gBAAgB,EAAE,OAAO,GACxB,UAAU,CAUZ"}
|
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
import { getScenarioById } from "../scenarios/f1-f5.js";
|
|
2
|
-
import { markGhostCommitted } from "../engine/state-machine.js";
|
|
2
|
+
import { markGhostCommitted, isWriteTool } from "../engine/state-machine.js";
|
|
3
3
|
export function decideChaosAction(session, callNumber, toolName, args) {
|
|
4
4
|
const noChaos = {
|
|
5
5
|
injectError: false,
|
|
@@ -9,18 +9,29 @@ export function decideChaosAction(session, callNumber, toolName, args) {
|
|
|
9
9
|
executeUpstream: true,
|
|
10
10
|
delayMs: 0,
|
|
11
11
|
};
|
|
12
|
+
const isWriteCall = isWriteTool(toolName, session.writeToolPatterns);
|
|
13
|
+
const priorWriteCalls = session.history.filter((r) => isWriteTool(r.toolName, session.writeToolPatterns)).length;
|
|
12
14
|
// Deterministic scenario mode
|
|
13
15
|
if (session.scenarioId) {
|
|
14
16
|
const scenario = getScenarioById(session.scenarioId);
|
|
15
|
-
if (scenario &&
|
|
17
|
+
if (scenario &&
|
|
18
|
+
scenario.triggerCondition({ callNumber, toolName, isWriteCall, priorWriteCalls })) {
|
|
16
19
|
const resp = scenario.simulatedResponse;
|
|
17
|
-
const isGhostWrite = resp.type === "timeout" &&
|
|
20
|
+
const isGhostWrite = resp.type === "timeout" && isWriteCall;
|
|
21
|
+
// F4 (duplicate dispatch) must also actually reach the upstream: it
|
|
22
|
+
// reports "success" to the agent, and against a real upstream that
|
|
23
|
+
// claim has to be true, or the proxy is fabricating a confirmation for
|
|
24
|
+
// a write that never happened (silent data loss if ever pointed at a
|
|
25
|
+
// production backend). F2/F3/F5 stay executeUpstream:false — those are
|
|
26
|
+
// genuine failures (rate-limit/malformed/500), so nothing should land
|
|
27
|
+
// upstream for them, matching what the agent is told.
|
|
28
|
+
const executeUpstream = isGhostWrite || resp.type === "success";
|
|
18
29
|
return {
|
|
19
30
|
injectError: true,
|
|
20
31
|
errorType: resp.type === "success" ? null : `[${resp.type.toUpperCase()}]`,
|
|
21
32
|
statusCode: resp.statusCode ?? 500,
|
|
22
33
|
errorBody: resp.body,
|
|
23
|
-
executeUpstream
|
|
34
|
+
executeUpstream,
|
|
24
35
|
delayMs: resp.delayMs ?? 0,
|
|
25
36
|
};
|
|
26
37
|
}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"ghost-write.js","sourceRoot":"","sources":["../../src/proxy/ghost-write.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,eAAe,EAAE,MAAM,uBAAuB,CAAC;AACxD,OAAO,EAAE,kBAAkB,EAAE,MAAM,4BAA4B,CAAC;
|
|
1
|
+
{"version":3,"file":"ghost-write.js","sourceRoot":"","sources":["../../src/proxy/ghost-write.ts"],"names":[],"mappings":"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"}
|
|
@@ -5,11 +5,13 @@ export interface ProxyConfig {
|
|
|
5
5
|
scenarioId?: string;
|
|
6
6
|
mode?: "deterministic" | "chaos";
|
|
7
7
|
errorRate?: number;
|
|
8
|
+
writeToolPatterns?: string[];
|
|
8
9
|
}
|
|
9
10
|
export interface UpstreamConfig {
|
|
10
11
|
command: string;
|
|
11
12
|
args?: string[];
|
|
12
13
|
cwd?: string;
|
|
14
|
+
env?: Record<string, string>;
|
|
13
15
|
}
|
|
14
16
|
export declare class ProxyInterceptor {
|
|
15
17
|
private upstreamClient;
|
|
@@ -24,10 +26,7 @@ export declare class ProxyInterceptor {
|
|
|
24
26
|
getUpstreamTools(): Tool[];
|
|
25
27
|
getSession(): SessionState;
|
|
26
28
|
interceptToolCall(toolName: string, args: Record<string, unknown>): Promise<{
|
|
27
|
-
content: Array<
|
|
28
|
-
type: "text";
|
|
29
|
-
text: string;
|
|
30
|
-
}>;
|
|
29
|
+
content: Array<Record<string, unknown>>;
|
|
31
30
|
isError: boolean;
|
|
32
31
|
}>;
|
|
33
32
|
}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"interceptor.d.ts","sourceRoot":"","sources":["../../src/proxy/interceptor.ts"],"names":[],"mappings":"AAQA,OAAO,KAAK,EAAE,IAAI,EAAE,MAAM,oCAAoC,CAAC;
|
|
1
|
+
{"version":3,"file":"interceptor.d.ts","sourceRoot":"","sources":["../../src/proxy/interceptor.ts"],"names":[],"mappings":"AAQA,OAAO,KAAK,EAAE,IAAI,EAAE,MAAM,oCAAoC,CAAC;AAE/D,OAAO,EAKL,KAAK,YAAY,EAClB,MAAM,4BAA4B,CAAC;AAWpC,MAAM,WAAW,WAAW;IAC1B,QAAQ,EAAE,cAAc,CAAC;IACzB,UAAU,CAAC,EAAE,MAAM,CAAC;IACpB,IAAI,CAAC,EAAE,eAAe,GAAG,OAAO,CAAC;IACjC,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,iBAAiB,CAAC,EAAE,MAAM,EAAE,CAAC;CAC9B;AAED,MAAM,WAAW,cAAc;IAC7B,OAAO,EAAE,MAAM,CAAC;IAChB,IAAI,CAAC,EAAE,MAAM,EAAE,CAAC;IAChB,GAAG,CAAC,EAAE,MAAM,CAAC;IAOb,GAAG,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;CAC9B;AAED,qBAAa,gBAAgB;IAC3B,OAAO,CAAC,cAAc,CAAuB;IAC7C,OAAO,CAAC,iBAAiB,CAA0B;IACnD,OAAO,CAAC,OAAO,CAAe;IAC9B,OAAO,CAAC,MAAM,CAAc;IAC5B,OAAO,CAAC,aAAa,CAAc;IAEnC,YAAY,MAAM,EAAE,WAAW,EAQ9B;IAED,IAAI,SAAS,IAAI,MAAM,CAEtB;IAEK,eAAe,IAAI,OAAO,CAAC,IAAI,CAAC,CAyBrC;IAEK,kBAAkB,IAAI,OAAO,CAAC,IAAI,CAAC,CAKxC;IAED,gBAAgB,IAAI,IAAI,EAAE,CAEzB;IAED,UAAU,IAAI,YAAY,CAEzB;IAEK,iBAAiB,CACrB,QAAQ,EAAE,MAAM,EAChB,IAAI,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,GAC5B,OAAO,CAAC;QACT,OAAO,EAAE,KAAK,CAAC,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC,CAAC;QACxC,OAAO,EAAE,OAAO,CAAC;KAClB,CAAC,CAsID;CACF"}
|
|
@@ -5,8 +5,12 @@
|
|
|
5
5
|
// anhand `getUpstreamTools()`).
|
|
6
6
|
import { Client } from "@modelcontextprotocol/sdk/client/index.js";
|
|
7
7
|
import { StdioClientTransport } from "@modelcontextprotocol/sdk/client/stdio.js";
|
|
8
|
+
import { VERSION } from "../version.js";
|
|
8
9
|
import { createSession, incrementCall, addRecord, } from "../engine/state-machine.js";
|
|
9
10
|
import { decideChaosAction, handleGhostWrite, buildCallRecord, } from "./ghost-write.js";
|
|
11
|
+
function sleep(ms) {
|
|
12
|
+
return new Promise((resolve) => setTimeout(resolve, ms));
|
|
13
|
+
}
|
|
10
14
|
export class ProxyInterceptor {
|
|
11
15
|
upstreamClient = null;
|
|
12
16
|
upstreamTransport = null;
|
|
@@ -15,7 +19,7 @@ export class ProxyInterceptor {
|
|
|
15
19
|
upstreamTools = [];
|
|
16
20
|
constructor(config) {
|
|
17
21
|
this.config = config;
|
|
18
|
-
this.session = createSession(config.scenarioId ?? null, config.mode ?? "deterministic", config.errorRate ?? 0.0);
|
|
22
|
+
this.session = createSession(config.scenarioId ?? null, config.mode ?? "deterministic", config.errorRate ?? 0.0, config.writeToolPatterns);
|
|
19
23
|
}
|
|
20
24
|
get sessionId() {
|
|
21
25
|
return this.session.sessionId;
|
|
@@ -25,9 +29,16 @@ export class ProxyInterceptor {
|
|
|
25
29
|
command: this.config.upstream.command,
|
|
26
30
|
args: this.config.upstream.args,
|
|
27
31
|
cwd: this.config.upstream.cwd,
|
|
32
|
+
// Inherit the full parent environment (same as any normal child
|
|
33
|
+
// process spawn) instead of the SDK's restrictive default allowlist,
|
|
34
|
+
// then layer --upstream-env on top for additions/overrides.
|
|
35
|
+
env: {
|
|
36
|
+
...process.env,
|
|
37
|
+
...this.config.upstream.env,
|
|
38
|
+
},
|
|
28
39
|
stderr: "pipe",
|
|
29
40
|
});
|
|
30
|
-
this.upstreamClient = new Client({ name: "cuonztech-harness-proxy", version:
|
|
41
|
+
this.upstreamClient = new Client({ name: "cuonztech-harness-proxy", version: VERSION }, { capabilities: {} });
|
|
31
42
|
await this.upstreamClient.connect(this.upstreamTransport);
|
|
32
43
|
// Discover upstream tools (full definitions, including inputSchema, so
|
|
33
44
|
// the gateway can advertise them to its own client unchanged)
|
|
@@ -54,9 +65,12 @@ export class ProxyInterceptor {
|
|
|
54
65
|
// Decide chaos action
|
|
55
66
|
const decision = decideChaosAction(this.session, callNumber, toolName, mergedArgs);
|
|
56
67
|
let upstreamResponse = null;
|
|
68
|
+
let upstreamContent = null;
|
|
69
|
+
let upstreamIsError = false;
|
|
57
70
|
let upstreamExecuted = false;
|
|
71
|
+
// responseText only ever feeds the audit trail (buildCallRecord/history),
|
|
72
|
+
// never the agent — see agentContent below.
|
|
58
73
|
let responseText = "";
|
|
59
|
-
let statusCode = 200;
|
|
60
74
|
let injectedError = null;
|
|
61
75
|
if (decision.executeUpstream && this.upstreamClient) {
|
|
62
76
|
// Forward to upstream
|
|
@@ -65,9 +79,10 @@ export class ProxyInterceptor {
|
|
|
65
79
|
name: toolName,
|
|
66
80
|
arguments: mergedArgs,
|
|
67
81
|
});
|
|
68
|
-
|
|
69
|
-
|
|
70
|
-
|
|
82
|
+
upstreamContent = result.content;
|
|
83
|
+
upstreamIsError = Boolean(result.isError);
|
|
84
|
+
const textPart = upstreamContent.find((c) => c.type === "text");
|
|
85
|
+
responseText = textPart?.text ?? JSON.stringify(upstreamContent);
|
|
71
86
|
upstreamExecuted = true;
|
|
72
87
|
try {
|
|
73
88
|
upstreamResponse = JSON.parse(responseText);
|
|
@@ -84,27 +99,59 @@ export class ProxyInterceptor {
|
|
|
84
99
|
injectedError = "[UPSTREAM_ERROR]";
|
|
85
100
|
}
|
|
86
101
|
}
|
|
87
|
-
//
|
|
102
|
+
// A genuine simulated failure (timeout/rate_limit/malformed/error) must
|
|
103
|
+
// replace whatever the agent sees, even if the upstream really executed
|
|
104
|
+
// (F1's ghost-write). A "success"-typed match (F4) is NOT a failure —
|
|
105
|
+
// once it actually ran upstream above, the agent must see that REAL
|
|
106
|
+
// response, not a canned one, or the proxy is lying about what happened.
|
|
107
|
+
const isSimulatedFailure = decision.injectError && decision.errorType !== null;
|
|
88
108
|
let isGhostWrite = false;
|
|
89
|
-
|
|
109
|
+
let agentContent;
|
|
110
|
+
let agentIsError;
|
|
111
|
+
if (isSimulatedFailure) {
|
|
112
|
+
// Honor the scenario's configured delay before replying — previously
|
|
113
|
+
// decision.delayMs was computed but never awaited anywhere, so a
|
|
114
|
+
// scenario simulating a slow timeout behaved identically to an
|
|
115
|
+
// instant one. None of the built-in F1–F5 scenarios currently set a
|
|
116
|
+
// nonzero delayMs, so this has no effect yet, but the plumbing is now
|
|
117
|
+
// real instead of a dead field.
|
|
118
|
+
if (decision.delayMs > 0) {
|
|
119
|
+
await sleep(decision.delayMs);
|
|
120
|
+
}
|
|
90
121
|
injectedError = decision.errorType;
|
|
91
|
-
|
|
92
|
-
|
|
93
|
-
|
|
94
|
-
|
|
95
|
-
|
|
122
|
+
const errorText = typeof decision.errorBody === "string"
|
|
123
|
+
? decision.errorBody
|
|
124
|
+
: JSON.stringify(decision.errorBody);
|
|
125
|
+
responseText = errorText;
|
|
126
|
+
agentContent = [{ type: "text", text: errorText }];
|
|
127
|
+
agentIsError = true;
|
|
96
128
|
isGhostWrite = decision.executeUpstream && upstreamExecuted && Boolean(key);
|
|
97
129
|
}
|
|
130
|
+
else if (upstreamExecuted) {
|
|
131
|
+
// Real passthrough: forward the upstream's actual content unchanged
|
|
132
|
+
// (all blocks — text, images, structured content — not just the first
|
|
133
|
+
// text block) and its real isError, instead of wrapping it in an
|
|
134
|
+
// audit envelope. Audit-only facts (upstreamExecuted, injectedError,
|
|
135
|
+
// callNumber) are recorded via buildCallRecord()/addRecord() below and
|
|
136
|
+
// surfaced through get_report/get_score — never in the tool response
|
|
137
|
+
// itself, so an agent reading the response can't trivially infer the
|
|
138
|
+
// harness's internal chaos state.
|
|
139
|
+
agentContent = upstreamContent ?? [{ type: "text", text: responseText }];
|
|
140
|
+
agentIsError = upstreamIsError;
|
|
141
|
+
}
|
|
142
|
+
else if (injectedError === "[UPSTREAM_ERROR]") {
|
|
143
|
+
agentContent = [{ type: "text", text: responseText }];
|
|
144
|
+
agentIsError = true;
|
|
145
|
+
}
|
|
98
146
|
else {
|
|
99
|
-
|
|
100
|
-
|
|
101
|
-
|
|
102
|
-
|
|
103
|
-
|
|
104
|
-
|
|
105
|
-
|
|
106
|
-
|
|
107
|
-
}
|
|
147
|
+
// No scenario triggered and no real upstream call was attempted
|
|
148
|
+
// (shouldn't normally happen once connected) — synthetic ok mock.
|
|
149
|
+
responseText = JSON.stringify({
|
|
150
|
+
result: "ok",
|
|
151
|
+
timestamp: new Date().toISOString(),
|
|
152
|
+
});
|
|
153
|
+
agentContent = [{ type: "text", text: responseText }];
|
|
154
|
+
agentIsError = false;
|
|
108
155
|
}
|
|
109
156
|
// Record the call
|
|
110
157
|
const record = buildCallRecord(callNumber, toolName, mergedArgs, injectedError, responseText, upstreamExecuted);
|
|
@@ -118,26 +165,8 @@ export class ProxyInterceptor {
|
|
|
118
165
|
handleGhostWrite(this.session, mergedArgs, upstreamResponse);
|
|
119
166
|
}
|
|
120
167
|
return {
|
|
121
|
-
content:
|
|
122
|
-
|
|
123
|
-
type: "text",
|
|
124
|
-
text: JSON.stringify({
|
|
125
|
-
callNumber,
|
|
126
|
-
statusCode,
|
|
127
|
-
injectedError,
|
|
128
|
-
upstreamExecuted,
|
|
129
|
-
response: (() => {
|
|
130
|
-
try {
|
|
131
|
-
return JSON.parse(responseText);
|
|
132
|
-
}
|
|
133
|
-
catch {
|
|
134
|
-
return responseText;
|
|
135
|
-
}
|
|
136
|
-
})(),
|
|
137
|
-
}, null, 2),
|
|
138
|
-
},
|
|
139
|
-
],
|
|
140
|
-
isError: statusCode >= 400,
|
|
168
|
+
content: agentContent,
|
|
169
|
+
isError: agentIsError,
|
|
141
170
|
};
|
|
142
171
|
}
|
|
143
172
|
}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"interceptor.js","sourceRoot":"","sources":["../../src/proxy/interceptor.ts"],"names":[],"mappings":"AAAA,0EAA0E;AAC1E,+EAA+E;AAC/E,8EAA8E;AAC9E,4EAA4E;AAC5E,gCAAgC;AAChC,OAAO,EAAE,MAAM,EAAE,MAAM,2CAA2C,CAAC;AACnE,OAAO,EAAE,oBAAoB,EAAE,MAAM,2CAA2C,CAAC;AAGjF,OAAO,EACL,aAAa,EAEb,aAAa,EACb,SAAS,GAEV,MAAM,4BAA4B,CAAC;AACpC,OAAO,EACL,iBAAiB,EACjB,gBAAgB,EAChB,eAAe,GAChB,MAAM,kBAAkB,CAAC;
|
|
1
|
+
{"version":3,"file":"interceptor.js","sourceRoot":"","sources":["../../src/proxy/interceptor.ts"],"names":[],"mappings":"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"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"f1-f5.d.ts","sourceRoot":"","sources":["../../src/scenarios/f1-f5.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,kBAAkB,EAAE,MAAM,YAAY,CAAC;AAGrD,eAAO,MAAM,sBAAsB,EAAE,
|
|
1
|
+
{"version":3,"file":"f1-f5.d.ts","sourceRoot":"","sources":["../../src/scenarios/f1-f5.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,kBAAkB,EAAE,MAAM,YAAY,CAAC;AAGrD,eAAO,MAAM,sBAAsB,EAAE,kBAmBpC,CAAC;AAGF,eAAO,MAAM,aAAa,EAAE,kBAiB3B,CAAC;AAGF,eAAO,MAAM,iBAAiB,EAAE,kBAa/B,CAAC;AAGF,eAAO,MAAM,qBAAqB,EAAE,kBA0BnC,CAAC;AAGF,eAAO,MAAM,4BAA4B,EAAE,kBAgB1C,CAAC;AAEF,eAAO,MAAM,aAAa,EAAE,kBAAkB,EAM7C,CAAC;AAEF,wBAAgB,eAAe,CAAC,EAAE,EAAE,MAAM,GAAG,kBAAkB,GAAG,SAAS,CAE1E"}
|
package/dist/scenarios/f1-f5.js
CHANGED
|
@@ -3,7 +3,11 @@ export const F1_TIMEOUT_FIRST_WRITE = {
|
|
|
3
3
|
id: "F1",
|
|
4
4
|
name: "Timeout on First Write",
|
|
5
5
|
description: "Simuliert einen Timeout beim ersten Schreibversuch. Der Agent muss den Fehler erkennen, verifizieren (Read-before-Write) und dann mit Idempotency-Key wiederholen.",
|
|
6
|
-
|
|
6
|
+
// Fires on the agent's first WRITE call specifically, regardless of its
|
|
7
|
+
// position in the overall call sequence — an agent that reads first, then
|
|
8
|
+
// writes, must still see the timeout on that write (previously gated on
|
|
9
|
+
// callNumber === 1, so a cautious read-first agent never triggered F1 at all).
|
|
10
|
+
triggerCondition: ({ priorWriteCalls, isWriteCall }) => priorWriteCalls === 0 && isWriteCall,
|
|
7
11
|
simulatedResponse: {
|
|
8
12
|
type: "timeout",
|
|
9
13
|
statusCode: 408,
|
|
@@ -17,7 +21,7 @@ export const F2_RATE_LIMIT = {
|
|
|
17
21
|
id: "F2",
|
|
18
22
|
name: "Rate Limit (429)",
|
|
19
23
|
description: "Simuliert einen HTTP 429 Rate-Limit beim zweiten Aufruf. Der Agent muss Backoff respektieren und nicht sofort retry-en.",
|
|
20
|
-
triggerCondition: (callNumber) => callNumber === 2,
|
|
24
|
+
triggerCondition: ({ callNumber }) => callNumber === 2,
|
|
21
25
|
simulatedResponse: {
|
|
22
26
|
type: "rate_limit",
|
|
23
27
|
statusCode: 429,
|
|
@@ -34,7 +38,7 @@ export const F3_MALFORMED_JSON = {
|
|
|
34
38
|
id: "F3",
|
|
35
39
|
name: "Malformed JSON Response",
|
|
36
40
|
description: "Liefert ein defektes JSON zurück. Der Agent darf nicht crashen (SyntaxError), sondern muss graceful reagieren.",
|
|
37
|
-
triggerCondition: (callNumber) => callNumber === 1,
|
|
41
|
+
triggerCondition: ({ callNumber }) => callNumber === 1,
|
|
38
42
|
simulatedResponse: {
|
|
39
43
|
type: "malformed",
|
|
40
44
|
statusCode: 200,
|
|
@@ -46,8 +50,16 @@ export const F3_MALFORMED_JSON = {
|
|
|
46
50
|
export const F4_DUPLICATE_DISPATCH = {
|
|
47
51
|
id: "F4",
|
|
48
52
|
name: "Duplicate Dispatch (Ghost-Write)",
|
|
49
|
-
description: "Beide Aufrufe erhalten Erfolg.
|
|
50
|
-
|
|
53
|
+
description: "Beide Aufrufe erhalten Erfolg. Weder Server noch Proxy dedupen von sich aus — schreibt der Agent zweimal, landen auch zweimal echte Writes. Der Agent muss Idempotency selbst prüfen und den Duplikat-Aufruf erkennen.",
|
|
54
|
+
// Fires on the agent's first TWO write calls specifically (same reasoning
|
|
55
|
+
// as F1: positional-by-callNumber would miss an agent that reads first).
|
|
56
|
+
triggerCondition: ({ priorWriteCalls, isWriteCall }) => priorWriteCalls <= 1 && isWriteCall,
|
|
57
|
+
// Only used by the non-proxy session/benchmark simulation (tools/handlers.ts),
|
|
58
|
+
// which has no real upstream to call. In proxy mode (proxy/ghost-write.ts +
|
|
59
|
+
// proxy/interceptor.ts), "success"-typed scenarios now actually execute
|
|
60
|
+
// against the real upstream and forward its real response/id instead of
|
|
61
|
+
// this canned body — a fabricated transaction_id for a write that never
|
|
62
|
+
// happened would be a real data-loss risk against a production backend.
|
|
51
63
|
simulatedResponse: {
|
|
52
64
|
type: "success",
|
|
53
65
|
statusCode: 200,
|
|
@@ -64,7 +76,7 @@ export const F5_SERVER_ERROR_THEN_SUCCESS = {
|
|
|
64
76
|
id: "F5",
|
|
65
77
|
name: "Server Error (500) then Success",
|
|
66
78
|
description: "Erster Aufruf: HTTP 500. Zweiter Aufruf: Erfolg. Der Agent muss den Fehler erkennen, einmal retry-en und dann stoppen.",
|
|
67
|
-
triggerCondition: (callNumber) => callNumber === 1,
|
|
79
|
+
triggerCondition: ({ callNumber }) => callNumber === 1,
|
|
68
80
|
simulatedResponse: {
|
|
69
81
|
type: "error",
|
|
70
82
|
statusCode: 500,
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"f1-f5.js","sourceRoot":"","sources":["../../src/scenarios/f1-f5.ts"],"names":[],"mappings":"AAEA,4CAA4C;AAC5C,MAAM,CAAC,MAAM,sBAAsB,GAAuB;IACxD,EAAE,EAAE,IAAI;IACR,IAAI,EAAE,wBAAwB;IAC9B,WAAW,EACT,oKAAoK;IACtK,gBAAgB,EAAE,CAAC,
|
|
1
|
+
{"version":3,"file":"f1-f5.js","sourceRoot":"","sources":["../../src/scenarios/f1-f5.ts"],"names":[],"mappings":"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"}
|
|
@@ -1,8 +1,14 @@
|
|
|
1
|
+
export interface TriggerContext {
|
|
2
|
+
callNumber: number;
|
|
3
|
+
toolName: string;
|
|
4
|
+
isWriteCall: boolean;
|
|
5
|
+
priorWriteCalls: number;
|
|
6
|
+
}
|
|
1
7
|
export interface ScenarioDefinition {
|
|
2
8
|
id: string;
|
|
3
9
|
name: string;
|
|
4
10
|
description: string;
|
|
5
|
-
triggerCondition: (
|
|
11
|
+
triggerCondition: (ctx: TriggerContext) => boolean;
|
|
6
12
|
simulatedResponse: SimulatedResponse;
|
|
7
13
|
auditMetric: string;
|
|
8
14
|
}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../../src/scenarios/types.ts"],"names":[],"mappings":"AAAA,MAAM,WAAW,kBAAkB;IACjC,EAAE,EAAE,MAAM,CAAC;IACX,IAAI,EAAE,MAAM,CAAC;IACb,WAAW,EAAE,MAAM,CAAC;IACpB,gBAAgB,EAAE,CAAC,
|
|
1
|
+
{"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../../src/scenarios/types.ts"],"names":[],"mappings":"AAAA,MAAM,WAAW,cAAc;IAC7B,UAAU,EAAE,MAAM,CAAC;IACnB,QAAQ,EAAE,MAAM,CAAC;IAGjB,WAAW,EAAE,OAAO,CAAC;IAKrB,eAAe,EAAE,MAAM,CAAC;CACzB;AAED,MAAM,WAAW,kBAAkB;IACjC,EAAE,EAAE,MAAM,CAAC;IACX,IAAI,EAAE,MAAM,CAAC;IACb,WAAW,EAAE,MAAM,CAAC;IACpB,gBAAgB,EAAE,CAAC,GAAG,EAAE,cAAc,KAAK,OAAO,CAAC;IACnD,iBAAiB,EAAE,iBAAiB,CAAC;IACrC,WAAW,EAAE,MAAM,CAAC;CACrB;AAED,MAAM,WAAW,iBAAiB;IAChC,IAAI,EAAE,OAAO,GAAG,SAAS,GAAG,WAAW,GAAG,SAAS,GAAG,YAAY,CAAC;IACnE,UAAU,CAAC,EAAE,MAAM,CAAC;IACpB,IAAI,EAAE,MAAM,GAAG,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;IACvC,OAAO,CAAC,EAAE,MAAM,CAAC;CAClB"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"server.d.ts","sourceRoot":"","sources":["../../src/server/server.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,SAAS,EAAE,MAAM,yCAAyC,CAAC;
|
|
1
|
+
{"version":3,"file":"server.d.ts","sourceRoot":"","sources":["../../src/server/server.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,SAAS,EAAE,MAAM,yCAAyC,CAAC;AAqBpE,wBAAgB,YAAY,IAAI,SAAS,CA0FxC"}
|
package/dist/server/server.js
CHANGED
|
@@ -1,10 +1,11 @@
|
|
|
1
1
|
import { McpServer } from "@modelcontextprotocol/sdk/server/mcp.js";
|
|
2
|
+
import { VERSION } from "../version.js";
|
|
2
3
|
import { StartSessionSchema, ExecuteCallSchema, GetReportSchema, GetScoreSchema, ListScenariosSchema, ResetSessionSchema, DeleteSessionSchema, } from "../tools/schemas.js";
|
|
3
4
|
import { handleStartSession, handleExecuteCall, handleGetReport, handleGetScore, handleListScenarios, handleResetSession, handleDeleteSession, } from "../tools/handlers.js";
|
|
4
5
|
export function createServer() {
|
|
5
6
|
const server = new McpServer({
|
|
6
7
|
name: "cuonztech-agent-harness",
|
|
7
|
-
version:
|
|
8
|
+
version: VERSION,
|
|
8
9
|
});
|
|
9
10
|
// Tool: start_session
|
|
10
11
|
server.registerTool("start_session", {
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"server.js","sourceRoot":"","sources":["../../src/server/server.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,SAAS,EAAE,MAAM,yCAAyC,CAAC;AACpE,OAAO,EACL,kBAAkB,EAClB,iBAAiB,EACjB,eAAe,EACf,cAAc,EACd,mBAAmB,EACnB,kBAAkB,EAClB,mBAAmB,GACpB,MAAM,qBAAqB,CAAC;AAC7B,OAAO,EACL,kBAAkB,EAClB,iBAAiB,EACjB,eAAe,EACf,cAAc,EACd,mBAAmB,EACnB,kBAAkB,EAClB,mBAAmB,GACpB,MAAM,sBAAsB,CAAC;AAE9B,MAAM,UAAU,YAAY;IAC1B,MAAM,MAAM,GAAG,IAAI,SAAS,CAAC;QAC3B,IAAI,EAAE,yBAAyB;QAC/B,OAAO,EAAE,OAAO;KACjB,CAAC,CAAC;IAEH,sBAAsB;IACtB,MAAM,CAAC,YAAY,CACjB,eAAe,EACf;QACE,KAAK,EAAE,oBAAoB;QAC3B,WAAW,EACT,2IAA2I;QAC7I,WAAW,EAAE,kBAAkB;KAChC,EACD,KAAK,EAAE,IAAI,EAAE,EAAE,CAAC,kBAAkB,CAAC,IAAI,CAAC,CACzC,CAAC;IAEF,qBAAqB;IACrB,MAAM,CAAC,YAAY,CACjB,cAAc,EACd;QACE,KAAK,EAAE,sBAAsB;QAC7B,WAAW,EACT,wKAAwK;QAC1K,WAAW,EAAE,iBAAiB;KAC/B,EACD,KAAK,EAAE,IAAI,EAAE,EAAE,CAAC,iBAAiB,CAAC,IAAI,CAAC,CACxC,CAAC;IAEF,mBAAmB;IACnB,MAAM,CAAC,YAAY,CACjB,YAAY,EACZ;QACE,KAAK,EAAE,kBAAkB;QACzB,WAAW,EACT,yIAAyI;QAC3I,WAAW,EAAE,eAAe;KAC7B,EACD,KAAK,EAAE,IAAI,EAAE,EAAE,CAAC,eAAe,CAAC,IAAI,CAAC,CACtC,CAAC;IAEF,kBAAkB;IAClB,MAAM,CAAC,YAAY,CACjB,WAAW,EACX;QACE,KAAK,EAAE,sBAAsB;QAC7B,WAAW,EACT,+TAA+T;QACjU,WAAW,EAAE,cAAc;KAC5B,EACD,KAAK,EAAE,IAAI,EAAE,EAAE,CAAC,cAAc,CAAC,IAAI,CAAC,CACrC,CAAC;IAEF,uBAAuB;IACvB,MAAM,CAAC,YAAY,CACjB,gBAAgB,EAChB;QACE,KAAK,EAAE,0BAA0B;QACjC,WAAW,EACT,oGAAoG;QACtG,WAAW,EAAE,mBAAmB;KACjC,EACD,KAAK,IAAI,EAAE,CAAC,mBAAmB,EAAE,CAClC,CAAC;IAEF,sBAAsB;IACtB,MAAM,CAAC,YAAY,CACjB,eAAe,EACf;QACE,KAAK,EAAE,eAAe;QACtB,WAAW,EACT,2GAA2G;QAC7G,WAAW,EAAE,kBAAkB;KAChC,EACD,KAAK,EAAE,IAAI,EAAE,EAAE,CAAC,kBAAkB,CAAC,IAAI,CAAC,CACzC,CAAC;IAEF,uBAAuB;IACvB,MAAM,CAAC,YAAY,CACjB,gBAAgB,EAChB;QACE,KAAK,EAAE,gBAAgB;QACvB,WAAW,EAAE,8CAA8C;QAC3D,WAAW,EAAE,mBAAmB;KACjC,EACD,KAAK,EAAE,IAAI,EAAE,EAAE,CAAC,mBAAmB,CAAC,IAAI,CAAC,CAC1C,CAAC;IAEF,OAAO,MAAM,CAAC;AAChB,CAAC"}
|
|
1
|
+
{"version":3,"file":"server.js","sourceRoot":"","sources":["../../src/server/server.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,SAAS,EAAE,MAAM,yCAAyC,CAAC;AACpE,OAAO,EAAE,OAAO,EAAE,MAAM,eAAe,CAAC;AACxC,OAAO,EACL,kBAAkB,EAClB,iBAAiB,EACjB,eAAe,EACf,cAAc,EACd,mBAAmB,EACnB,kBAAkB,EAClB,mBAAmB,GACpB,MAAM,qBAAqB,CAAC;AAC7B,OAAO,EACL,kBAAkB,EAClB,iBAAiB,EACjB,eAAe,EACf,cAAc,EACd,mBAAmB,EACnB,kBAAkB,EAClB,mBAAmB,GACpB,MAAM,sBAAsB,CAAC;AAE9B,MAAM,UAAU,YAAY;IAC1B,MAAM,MAAM,GAAG,IAAI,SAAS,CAAC;QAC3B,IAAI,EAAE,yBAAyB;QAC/B,OAAO,EAAE,OAAO;KACjB,CAAC,CAAC;IAEH,sBAAsB;IACtB,MAAM,CAAC,YAAY,CACjB,eAAe,EACf;QACE,KAAK,EAAE,oBAAoB;QAC3B,WAAW,EACT,2IAA2I;QAC7I,WAAW,EAAE,kBAAkB;KAChC,EACD,KAAK,EAAE,IAAI,EAAE,EAAE,CAAC,kBAAkB,CAAC,IAAI,CAAC,CACzC,CAAC;IAEF,qBAAqB;IACrB,MAAM,CAAC,YAAY,CACjB,cAAc,EACd;QACE,KAAK,EAAE,sBAAsB;QAC7B,WAAW,EACT,wKAAwK;QAC1K,WAAW,EAAE,iBAAiB;KAC/B,EACD,KAAK,EAAE,IAAI,EAAE,EAAE,CAAC,iBAAiB,CAAC,IAAI,CAAC,CACxC,CAAC;IAEF,mBAAmB;IACnB,MAAM,CAAC,YAAY,CACjB,YAAY,EACZ;QACE,KAAK,EAAE,kBAAkB;QACzB,WAAW,EACT,yIAAyI;QAC3I,WAAW,EAAE,eAAe;KAC7B,EACD,KAAK,EAAE,IAAI,EAAE,EAAE,CAAC,eAAe,CAAC,IAAI,CAAC,CACtC,CAAC;IAEF,kBAAkB;IAClB,MAAM,CAAC,YAAY,CACjB,WAAW,EACX;QACE,KAAK,EAAE,sBAAsB;QAC7B,WAAW,EACT,+TAA+T;QACjU,WAAW,EAAE,cAAc;KAC5B,EACD,KAAK,EAAE,IAAI,EAAE,EAAE,CAAC,cAAc,CAAC,IAAI,CAAC,CACrC,CAAC;IAEF,uBAAuB;IACvB,MAAM,CAAC,YAAY,CACjB,gBAAgB,EAChB;QACE,KAAK,EAAE,0BAA0B;QACjC,WAAW,EACT,oGAAoG;QACtG,WAAW,EAAE,mBAAmB;KACjC,EACD,KAAK,IAAI,EAAE,CAAC,mBAAmB,EAAE,CAClC,CAAC;IAEF,sBAAsB;IACtB,MAAM,CAAC,YAAY,CACjB,eAAe,EACf;QACE,KAAK,EAAE,eAAe;QACtB,WAAW,EACT,2GAA2G;QAC7G,WAAW,EAAE,kBAAkB;KAChC,EACD,KAAK,EAAE,IAAI,EAAE,EAAE,CAAC,kBAAkB,CAAC,IAAI,CAAC,CACzC,CAAC;IAEF,uBAAuB;IACvB,MAAM,CAAC,YAAY,CACjB,gBAAgB,EAChB;QACE,KAAK,EAAE,gBAAgB;QACvB,WAAW,EAAE,8CAA8C;QAC3D,WAAW,EAAE,mBAAmB;KACjC,EACD,KAAK,EAAE,IAAI,EAAE,EAAE,CAAC,mBAAmB,CAAC,IAAI,CAAC,CAC1C,CAAC;IAEF,OAAO,MAAM,CAAC;AAChB,CAAC"}
|
package/dist/tools/handlers.d.ts
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"handlers.d.ts","sourceRoot":"","sources":["../../src/tools/handlers.ts"],"names":[],"mappings":"AAoEA,wBAAgB,kBAAkB,CAAC,IAAI,EAAE;IACvC,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,IAAI,CAAC,EAAE,eAAe,GAAG,OAAO,CAAC;IACjC,UAAU,CAAC,EAAE,MAAM,CAAC;
|
|
1
|
+
{"version":3,"file":"handlers.d.ts","sourceRoot":"","sources":["../../src/tools/handlers.ts"],"names":[],"mappings":"AAoEA,wBAAgB,kBAAkB,CAAC,IAAI,EAAE;IACvC,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,IAAI,CAAC,EAAE,eAAe,GAAG,OAAO,CAAC;IACjC,UAAU,CAAC,EAAE,MAAM,CAAC;IACpB,mBAAmB,CAAC,EAAE,MAAM,EAAE,CAAC;CAChC;;cAWiB,MAAM;;;;;;;cAmBV,MAAM;;;EAenB;AAED,wBAAgB,iBAAiB,CAAC,IAAI,EAAE;IACtC,UAAU,EAAE,MAAM,CAAC;IACnB,SAAS,EAAE,MAAM,CAAC;IAClB,SAAS,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;IACnC,eAAe,CAAC,EAAE,MAAM,CAAC;CAC1B;;cAMe,MAAM;;;;EAoKrB;AAED,wBAAsB,eAAe,CAAC,IAAI,EAAE;IAC1C,UAAU,EAAE,MAAM,CAAC;IACnB,MAAM,CAAC,EAAE,MAAM,GAAG,UAAU,CAAC;CAC9B;;cAMe,MAAM;;;;;;;cAwBR,MAAM;;;GAKnB;AAKD,wBAAgB,cAAc,CAAC,IAAI,EAAE;IAAE,UAAU,EAAE,MAAM,CAAC;IAAC,MAAM,CAAC,EAAE,MAAM,GAAG,UAAU,CAAA;CAAE;;cAMzE,MAAM;;;;;;;cAuBR,MAAM;;;EAKnB;AAED,wBAAgB,mBAAmB;;cAWrB,MAAM;;;EAKnB;AAED,wBAAgB,kBAAkB,CAAC,IAAI,EAAE;IAAE,UAAU,EAAE,MAAM,CAAA;CAAE;;cAM/C,MAAM;;;;;;;cAaR,MAAM;;;EAKnB;AAED,wBAAgB,mBAAmB,CAAC,IAAI,EAAE;IAAE,UAAU,EAAE,MAAM,CAAA;CAAE;;cAKlD,MAAM;;;;EAQnB"}
|
package/dist/tools/handlers.js
CHANGED
|
@@ -60,7 +60,7 @@ export function handleStartSession(args) {
|
|
|
60
60
|
};
|
|
61
61
|
}
|
|
62
62
|
}
|
|
63
|
-
const session = createSession(scenarioId, mode, errorRate);
|
|
63
|
+
const session = createSession(scenarioId, mode, errorRate, args.write_tool_patterns);
|
|
64
64
|
return {
|
|
65
65
|
content: [
|
|
66
66
|
{
|
|
@@ -143,15 +143,29 @@ export function handleExecuteCall(args) {
|
|
|
143
143
|
// the same classification used by the (unwired) proxy's decideChaosAction,
|
|
144
144
|
// so F1 produces a real GHOST_CAUGHT/GHOST_MISSED instead of a generic retry.
|
|
145
145
|
let isGhostWrite = false;
|
|
146
|
+
const isWriteCall = isWriteTool(args.tool_name, session.writeToolPatterns);
|
|
147
|
+
const priorWriteCalls = session.history.filter((r) => isWriteTool(r.toolName, session.writeToolPatterns)).length;
|
|
146
148
|
if (session.scenarioId) {
|
|
147
149
|
const scenario = getScenarioById(session.scenarioId);
|
|
148
|
-
if (scenario &&
|
|
150
|
+
if (scenario &&
|
|
151
|
+
scenario.triggerCondition({
|
|
152
|
+
callNumber,
|
|
153
|
+
toolName: args.tool_name,
|
|
154
|
+
isWriteCall,
|
|
155
|
+
priorWriteCalls,
|
|
156
|
+
})) {
|
|
149
157
|
const resp = scenario.simulatedResponse;
|
|
150
158
|
// Don't mark "success" type as injected error — F4 simulates successful duplicate dispatches
|
|
151
159
|
injectedError = resp.type === "success" ? null : `[${resp.type.toUpperCase()}]`;
|
|
152
160
|
statusCode = resp.statusCode ?? 500;
|
|
153
161
|
responseBody = resp.body;
|
|
154
|
-
isGhostWrite = resp.type === "timeout" &&
|
|
162
|
+
isGhostWrite = resp.type === "timeout" && isWriteCall;
|
|
163
|
+
// Note: resp.delayMs is NOT awaited on this synchronous path (unlike
|
|
164
|
+
// proxy mode's interceptor.ts) — handleExecuteCall is called
|
|
165
|
+
// synchronously from ~30 call sites across the test suite and
|
|
166
|
+
// benchmark runner; making it async to honor a delay that no built-in
|
|
167
|
+
// scenario currently sets to a nonzero value isn't worth that ripple.
|
|
168
|
+
// Use `proxy` mode if simulated latency matters.
|
|
155
169
|
}
|
|
156
170
|
else {
|
|
157
171
|
responseBody = {
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"handlers.js","sourceRoot":"","sources":["../../src/tools/handlers.ts"],"names":[],"mappings":"AAAA,OAAO,EACL,aAAa,EACb,UAAU,EACV,aAAa,EACb,SAAS,EACT,YAAY,IAAI,iBAAiB,EACjC,aAAa,IAAI,kBAAkB,EAEnC,WAAW,EACX,kBAAkB,GAGnB,MAAM,yBAAyB,CAAC;AACjC,OAAO,EAAE,cAAc,EAAE,cAAc,EAAE,MAAM,6BAA6B,CAAC;AAC7E,OAAO,EAAE,YAAY,EAAE,iBAAiB,EAAE,MAAM,uBAAuB,CAAC;AACxE,OAAO,EAAE,eAAe,EAAE,iBAAiB,EAAE,MAAM,iCAAiC,CAAC;AACrF,OAAO,EAAE,eAAe,EAAE,aAAa,EAAE,MAAM,uBAAuB,CAAC;AAEvE,OAAO,EAAE,KAAK,EAAE,SAAS,EAAE,MAAM,kBAAkB,CAAC;AACpD,OAAO,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AAEpC,MAAM,iBAAiB,GAAG,8BAA8B,CAAC;AAEzD,6EAA6E;AAC7E,4EAA4E;AAC5E,4EAA4E;AAC5E,2EAA2E;AAC3E,2EAA2E;AAC3E,+CAA+C;AAC/C,SAAS,QAAQ,CAAC,CAA0B,EAAE,CAA0B;IACtE,MAAM,KAAK,GAAG,CAAC,CAA0B,EAAE,EAAE;QAC3C,MAAM,EAAE,eAAe,EAAE,GAAG,IAAI,EAAE,GAAG,CAAC,CAAC;QACvC,OAAO,IAAI,CAAC;IACd,CAAC,CAAC;IACF,OAAO,IAAI,CAAC,SAAS,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,KAAK,IAAI,CAAC,SAAS,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,CAAC;AAC/D,CAAC;AAED,yEAAyE;AACzE,6EAA6E;AAC7E,4EAA4E;AAC5E,kCAAkC;AAClC,6EAA6E;AAC7E,yEAAyE;AACzE,yEAAyE;AACzE,+CAA+C;AAC/C,4EAA4E;AAC5E,yEAAyE;AACzE,0EAA0E;AAC1E,kEAAkE;AAClE,SAAS,qBAAqB,CAC5B,OAAqB,EACrB,GAAW,EACX,QAAgB,EAChB,QAAiC;IAEjC,MAAM,QAAQ,GAAG,OAAO,CAAC,SAAS,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC;IAC5C,IAAI,CAAC,QAAQ,IAAI,QAAQ,CAAC,KAAK,KAAK,WAAW;QAAE,OAAO,IAAI,CAAC;IAC7D,MAAM,SAAS,GAAG,OAAO,CAAC,OAAO,CAAC,MAAM,CACtC,CAAC,CAAC,EAAE,EAAE,CACJ,CAAC,CAAC,IAAI,CAAC,iBAAiB,CAAC,KAAK,GAAG;QACjC,CAAC,CAAC,QAAQ,KAAK,QAAQ;QACvB,CAAC,CAAC,CAAC,aAAa;QAChB,CAAC,CAAC,CAAC,QAAQ,CAAC,QAAQ,CAAC,SAAS,CAAC;QAC/B,QAAQ,CAAC,CAAC,CAAC,IAAI,EAAE,QAAQ,CAAC,CAC7B,CAAC;IACF,OAAO,SAAS,CAAC,MAAM,GAAG,CAAC,CAAC,CAAC,CAAC,SAAS,CAAC,SAAS,CAAC,MAAM,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC;AACvE,CAAC;AAED,MAAM,UAAU,kBAAkB,CAAC,
|
|
1
|
+
{"version":3,"file":"handlers.js","sourceRoot":"","sources":["../../src/tools/handlers.ts"],"names":[],"mappings":"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"}
|
package/dist/tools/schemas.d.ts
CHANGED
|
@@ -6,6 +6,7 @@ export declare const StartSessionSchema: {
|
|
|
6
6
|
deterministic: "deterministic";
|
|
7
7
|
}>>>;
|
|
8
8
|
error_rate: z.ZodDefault<z.ZodOptional<z.ZodNumber>>;
|
|
9
|
+
write_tool_patterns: z.ZodOptional<z.ZodArray<z.ZodString>>;
|
|
9
10
|
};
|
|
10
11
|
export declare const ExecuteCallSchema: {
|
|
11
12
|
session_id: z.ZodString;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"schemas.d.ts","sourceRoot":"","sources":["../../src/tools/schemas.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAC;AAExB,eAAO,MAAM,kBAAkB;IAC7B,WAAW;IAMX,IAAI;;;;IAKJ,UAAU;
|
|
1
|
+
{"version":3,"file":"schemas.d.ts","sourceRoot":"","sources":["../../src/tools/schemas.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAC;AAExB,eAAO,MAAM,kBAAkB;IAC7B,WAAW;IAMX,IAAI;;;;IAKJ,UAAU;IAOV,mBAAmB;CAWpB,CAAC;AAEF,eAAO,MAAM,iBAAiB;IAC5B,UAAU;IACV,SAAS;IACT,SAAS;IAGT,eAAe;CAIhB,CAAC;AAEF,eAAO,MAAM,eAAe;IAC1B,UAAU;IACV,MAAM;;;;CAKP,CAAC;AAEF,eAAO,MAAM,cAAc;IACzB,UAAU;IACV,MAAM;;;;CAKP,CAAC;AAEF,eAAO,MAAM,mBAAmB,IAAK,CAAC;AAEtC,eAAO,MAAM,kBAAkB;IAC7B,UAAU;CACX,CAAC;AAEF,eAAO,MAAM,mBAAmB;IAC9B,UAAU;CACX,CAAC"}
|
package/dist/tools/schemas.js
CHANGED
|
@@ -16,6 +16,15 @@ export const StartSessionSchema = {
|
|
|
16
16
|
.optional()
|
|
17
17
|
.default(0.0)
|
|
18
18
|
.describe("Chaos mode only: probability of random error injection (0.0–1.0)."),
|
|
19
|
+
write_tool_patterns: z
|
|
20
|
+
.array(z.string())
|
|
21
|
+
.optional()
|
|
22
|
+
.describe('Glob patterns ("*" wildcard) deciding which tool names count as writes for ' +
|
|
23
|
+
'scenario triggering and idempotency classification, e.g. ["create_*", "send_*", "book_*"]. ' +
|
|
24
|
+
'Defaults to a broad set of common write-verb prefixes (write*, create_*, send_*, ' +
|
|
25
|
+
'submit_*, post_*, update_*, insert_*, book_*, pay_*, charge_*, cancel_*, delete_*, ' +
|
|
26
|
+
'confirm_*, place_*, add_*, register_*, schedule_*) — see DEFAULT_WRITE_TOOL_PATTERNS ' +
|
|
27
|
+
'in src/engine/state-machine.ts. Set this explicitly if your write tools use other naming.'),
|
|
19
28
|
};
|
|
20
29
|
export const ExecuteCallSchema = {
|
|
21
30
|
session_id: z.string().uuid().describe("Active session ID."),
|