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
package/README.md
CHANGED
|
@@ -146,9 +146,11 @@ Flags:
|
|
|
146
146
|
| `--upstream-command` | ja | Befehl, der den echten Upstream-MCP-Server startet |
|
|
147
147
|
| `--upstream-args` | nein | Kommagetrennte Argumente für den Upstream-Befehl |
|
|
148
148
|
| `--upstream-cwd` | nein | Arbeitsverzeichnis für den Upstream-Prozess |
|
|
149
|
+
| `--upstream-env` | nein | Kommagetrennte `KEY=VALUE`-Paare als zusätzliche/überschreibende Env-Vars für den Upstream-Prozess (z. B. ein API-Token, das der Upstream aus der Umgebung liest) |
|
|
149
150
|
| `--scenario` | nein | F1–F5 (deterministisch), sonst Passthrough |
|
|
150
151
|
| `--mode` | nein | `deterministic` (default) oder `chaos` |
|
|
151
152
|
| `--error-rate` | nein | Chaos-Modus: Fehlerwahrscheinlichkeit 0.0–1.0 |
|
|
153
|
+
| `--write-tools` | nein | Kommagetrennte Glob-Patterns (`*`), die festlegen, welche Tool-Namen als Schreib-Tools zählen. Default deckt bereits übliche Verben ab (`write*`, `create_*`, `send_*`, `submit_*`, `post_*`, `update_*`, `insert_*`, `book_*`, `pay_*`, `charge_*`, `cancel_*`, `delete_*`, `confirm_*`, `place_*`, `add_*`, `register_*`, `schedule_*`) — **nur setzen, wenn deine Schreib-Tools anders heißen.** Ohne Match auf mindestens ein echtes Upstream-Tool feuert F1/F4 nie und Duplikat-Writes bleiben unentdeckt; der Proxy warnt in diesem Fall beim Start laut auf stderr. |
|
|
152
154
|
|
|
153
155
|
Der Agent sieht die **echten Tools des Upstreams** (Name, Beschreibung, Input-Schema unverändert) plus 5 Audit-Tools (`get_report`, `get_score`, `list_scenarios`, `reset_session`, `delete_session`), die ohne `session_id` die eine Proxy-Session dieser Verbindung auditieren. `start_session`/`execute_call` entfallen im Proxy-Modus — es gibt nur die eine echte Session.
|
|
154
156
|
|
package/dist/benchmark/cta.d.ts
CHANGED
|
@@ -6,6 +6,8 @@ export interface CuonzTechTelemetry {
|
|
|
6
6
|
verdict: "UNVERIFIED_FOR_PRODUCTION";
|
|
7
7
|
auditProvider: string;
|
|
8
8
|
recommendedAction: string;
|
|
9
|
+
isReferenceRun: true;
|
|
10
|
+
note: string;
|
|
9
11
|
}
|
|
10
12
|
export declare function buildTelemetry(score: ResilienceScore, patches: HardeningPatch[]): CuonzTechTelemetry;
|
|
11
13
|
//# sourceMappingURL=cta.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"cta.d.ts","sourceRoot":"","sources":["../../src/benchmark/cta.ts"],"names":[],"mappings":"AAEA,OAAO,KAAK,EAAE,eAAe,EAAE,MAAM,YAAY,CAAC;AAClD,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,iCAAiC,CAAC;AAyBtE,wBAAgB,SAAS,CAAC,KAAK,EAAE,eAAe,GAAG,MAAM,CAsBxD;AAED,MAAM,WAAW,kBAAkB;IACjC,cAAc,EAAE,MAAM,CAAC;IACvB,OAAO,EAAE,2BAA2B,CAAC;IACrC,aAAa,EAAE,MAAM,CAAC;IACtB,iBAAiB,EAAE,MAAM,CAAC;
|
|
1
|
+
{"version":3,"file":"cta.d.ts","sourceRoot":"","sources":["../../src/benchmark/cta.ts"],"names":[],"mappings":"AAEA,OAAO,KAAK,EAAE,eAAe,EAAE,MAAM,YAAY,CAAC;AAClD,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,iCAAiC,CAAC;AAyBtE,wBAAgB,SAAS,CAAC,KAAK,EAAE,eAAe,GAAG,MAAM,CAsBxD;AAED,MAAM,WAAW,kBAAkB;IACjC,cAAc,EAAE,MAAM,CAAC;IACvB,OAAO,EAAE,2BAA2B,CAAC;IACrC,aAAa,EAAE,MAAM,CAAC;IACtB,iBAAiB,EAAE,MAAM,CAAC;IAM1B,cAAc,EAAE,IAAI,CAAC;IACrB,IAAI,EAAE,MAAM,CAAC;CACd;AAED,wBAAgB,cAAc,CAC5B,KAAK,EAAE,eAAe,EACtB,OAAO,EAAE,cAAc,EAAE,GACxB,kBAAkB,CAoBpB"}
|
package/dist/benchmark/cta.js
CHANGED
|
@@ -53,6 +53,10 @@ export function buildTelemetry(score, patches) {
|
|
|
53
53
|
verdict: "UNVERIFIED_FOR_PRODUCTION",
|
|
54
54
|
auditProvider: AUDIT_PROVIDER,
|
|
55
55
|
recommendedAction,
|
|
56
|
+
isReferenceRun: true,
|
|
57
|
+
note: "This score comes from a fixed built-in reference call sequence, not from " +
|
|
58
|
+
"your own agent. Score your own agent via `proxy` mode or the MCP " +
|
|
59
|
+
"`get_score` tool on a live session.",
|
|
56
60
|
};
|
|
57
61
|
}
|
|
58
62
|
//# sourceMappingURL=cta.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"cta.js","sourceRoot":"","sources":["../../src/benchmark/cta.ts"],"names":[],"mappings":"AAKA,MAAM,GAAG,GAAG,GAAG,CAAC,MAAM,CAAC,EAAE,CAAC,CAAC;AAC3B,MAAM,IAAI,GAAG,GAAG,CAAC,MAAM,CAAC,EAAE,CAAC,CAAC;AAC5B,MAAM,SAAS,GAAG,4BAA4B,CAAC;AAC/C,MAAM,cAAc,GAAG,8CAA8C,CAAC;AAEtE,SAAS,aAAa,CAAC,OAAe;IACpC,IAAI,OAAO,IAAI,EAAE;QAAE,OAAO,WAAW,CAAC;IACtC,IAAI,OAAO,IAAI,EAAE;QAAE,OAAO,YAAY,CAAC;IACvC,OAAO,iBAAiB,CAAC;AAC3B,CAAC;AAED,SAAS,mBAAmB,CAAC,EAAgC;IAC3D,MAAM,QAAQ,GAAa,EAAE,CAAC;IAC9B,IAAI,EAAE,CAAC,WAAW,GAAG,CAAC;QAAE,QAAQ,CAAC,IAAI,CAAC,GAAG,EAAE,CAAC,WAAW,wBAAwB,CAAC,CAAC;IACjF,IAAI,EAAE,CAAC,YAAY,GAAG,CAAC;QAAE,QAAQ,CAAC,IAAI,CAAC,GAAG,EAAE,CAAC,YAAY,iBAAiB,CAAC,CAAC;IAC5E,IAAI,EAAE,CAAC,cAAc,GAAG,CAAC;QAAE,QAAQ,CAAC,IAAI,CAAC,GAAG,EAAE,CAAC,cAAc,qBAAqB,CAAC,CAAC;IACpF,OAAO,QAAQ,CAAC,MAAM,GAAG,CAAC,CAAC,CAAC,CAAC,IAAI,QAAQ,CAAC,IAAI,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC,CAAC,iBAAiB,CAAC;AAC9E,CAAC;AAED,SAAS,mBAAmB,CAAC,EAAgC;IAC3D,OAAO,EAAE,CAAC,WAAW,GAAG,CAAC,IAAI,EAAE,CAAC,YAAY,GAAG,CAAC,IAAI,EAAE,CAAC,cAAc,GAAG,CAAC,CAAC;AAC5E,CAAC;AAED,MAAM,UAAU,SAAS,CAAC,KAAsB;IAC9C,MAAM,KAAK,GAAG;QACZ,GAAG;QACH,+BAA+B,KAAK,CAAC,OAAO,SAAS,aAAa,CAAC,KAAK,CAAC,OAAO,CAAC,GAAG;QACpF,kBAAkB,KAAK,CAAC,eAAe,KAAK,mBAAmB,CAAC,KAAK,CAAC,SAAS,CAAC,EAAE;QAClF,kBAAkB,KAAK,CAAC,YAAY,GAAG;QACvC,kBAAkB,KAAK,CAAC,YAAY,GAAG;QACvC,IAAI;KACL,CAAC;IAEF,IAAI,mBAAmB,CAAC,KAAK,CAAC,SAAS,CAAC,IAAI,KAAK,CAAC,OAAO,GAAG,EAAE,EAAE,CAAC;QAC/D,KAAK,CAAC,IAAI,CACR,6DAA6D,EAC7D,qDAAqD,EACrD,OAAO,SAAS,EAAE,CACnB,CAAC;IACJ,CAAC;SAAM,CAAC;QACN,KAAK,CAAC,IAAI,CAAC,sDAAsD,CAAC,CAAC;IACrE,CAAC;IAED,KAAK,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC;IAChB,OAAO,KAAK,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;AAC1B,CAAC;
|
|
1
|
+
{"version":3,"file":"cta.js","sourceRoot":"","sources":["../../src/benchmark/cta.ts"],"names":[],"mappings":"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"}
|
package/dist/benchmark/runner.js
CHANGED
|
@@ -63,12 +63,17 @@ async function simulateAgent(sessionId, scenarioId, jitterMs) {
|
|
|
63
63
|
break;
|
|
64
64
|
}
|
|
65
65
|
case "F2": {
|
|
66
|
-
// F2
|
|
67
|
-
|
|
66
|
+
// F2 triggers on call #2 — call #1 is deliberately unrelated (no key)
|
|
67
|
+
// so the triggering write is genuinely the agent's FIRST attempt at
|
|
68
|
+
// this key, not a redundant re-issue of one that already committed
|
|
69
|
+
// (the old script wrote the same key on BOTH call #1 and #2, which
|
|
70
|
+
// made call #2's 429 look like a needless resend rather than a
|
|
71
|
+
// legitimate "my first try got rate-limited" case).
|
|
72
|
+
call(sessionId, "read_status", {});
|
|
68
73
|
await sleep(jitterMs);
|
|
69
|
-
call(sessionId, "write_payment", { amount: 10 }, key);
|
|
74
|
+
call(sessionId, "write_payment", { amount: 10 }, key); // triggers F2 (429)
|
|
70
75
|
await sleep(jitterMs);
|
|
71
|
-
call(sessionId, "
|
|
76
|
+
call(sessionId, "write_payment", { amount: 10 }, key); // retry, same key, succeeds
|
|
72
77
|
break;
|
|
73
78
|
}
|
|
74
79
|
case "F3": {
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"runner.js","sourceRoot":"","sources":["../../src/benchmark/runner.ts"],"names":[],"mappings":"AAAA,OAAO,EACL,kBAAkB,EAClB,iBAAiB,EACjB,eAAe,GAChB,MAAM,sBAAsB,CAAC;AAC9B,OAAO,EAAE,aAAa,EAAE,YAAY,EAAE,MAAM,4BAA4B,CAAC;AACzE,OAAO,EAAE,YAAY,EAAE,iBAAiB,EAAwB,MAAM,YAAY,CAAC;AACnF,OAAO,EAAE,eAAe,EAAE,iBAAiB,EAAuB,MAAM,iCAAiC,CAAC;AAkB1G,MAAM,UAAU,aAAa;IAC3B,OAAO;QACL,SAAS,EAAE,CAAC,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,CAAC;QACzC,eAAe,EAAE,CAAC;QAClB,QAAQ,EAAE,CAAC;KACZ,CAAC;AACJ,CAAC;AAED,SAAS,SAAS,CAAC,MAA4C;IAC7D,OAAO,IAAI,CAAC,KAAK,CAAC,MAAM,CAAC,OAAO,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC;AAC5C,CAAC;AAED,KAAK,UAAU,KAAK,CAAC,EAAU;IAC7B,IAAI,EAAE,IAAI,CAAC;QAAE,OAAO;IACpB,OAAO,IAAI,OAAO,CAAC,CAAC,OAAO,EAAE,EAAE,CAAC,UAAU,CAAC,OAAO,EAAE,EAAE,CAAC,CAAC,CAAC;AAC3D,CAAC;AAED,MAAM,CAAC,KAAK,UAAU,YAAY,CAChC,MAAM,GAAoB,aAAa,EAAE;IAEzC,MAAM,OAAO,GAAkB,EAAE,CAAC;IAElC,KAAK,MAAM,UAAU,IAAI,MAAM,CAAC,SAAS,EAAE,CAAC;QAC1C,KAAK,IAAI,GAAG,GAAG,CAAC,EAAE,GAAG,GAAG,MAAM,CAAC,eAAe,EAAE,GAAG,EAAE,EAAE,CAAC;YACtD,6BAA6B;YAC7B,KAAK,MAAM,CAAC,IAAI,YAAY,EAAE;gBAAE,aAAa,CAAC,CAAC,CAAC,SAAS,CAAC,CAAC;YAE3D,MAAM,MAAM,GAAG,MAAM,CAAC,QAAQ,GAAG,CAAC;gBAChC,CAAC,CAAC,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,MAAM,EAAE,GAAG,MAAM,CAAC,QAAQ,CAAC;gBAC7C,CAAC,CAAC,CAAC,CAAC;YAEN,gBAAgB;YAChB,MAAM,IAAI,GAAG,SAAS,CACpB,kBAAkB,CAAC,EAAE,WAAW,EAAE,UAAU,EAAE,CAAC,CACvB,CAAC;YAC3B,MAAM,GAAG,GAAG,IAAI,CAAC,SAAS,CAAC;YAE3B,yCAAyC;YACzC,MAAM,aAAa,CAAC,GAAG,EAAE,UAAU,EAAE,MAAM,CAAC,CAAC;YAE7C,aAAa;YACb,MAAM,MAAM,GAAG,SAAS,CACtB,MAAM,eAAe,CAAC,EAAE,UAAU,EAAE,GAAG,EAAE,MAAM,EAAE,MAAM,EAAE,CAAC,CAC5C,CAAC;YACjB,OAAO,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC;QACvB,CAAC;IACH,CAAC;IAED,MAAM,KAAK,GAAG,YAAY,CAAC,OAAO,CAAC,CAAC;IACpC,MAAM,OAAO,GAAG,eAAe,CAAC,OAAO,EAAE,KAAK,CAAC,CAAC;IAEhD,OAAO;QACL,OAAO;QACP,KAAK;QACL,OAAO;QACP,cAAc,EAAE,OAAO;aACpB,GAAG,CAAC,CAAC,CAAC,EAAE,CAAC,EAAE,EAAE,CAAC,UAAU,CAAC,GAAG,CAAC,KAAK,CAAC,CAAC,UAAU,IAAI,QAAQ,OAAO,kBAAkB,CAAC,CAAC,CAAC,EAAE,CAAC;aACzF,IAAI,CAAC,aAAa,CAAC;QACtB,aAAa,EAAE,iBAAiB,CAAC,KAAK,CAAC;QACvC,eAAe,EAAE,iBAAiB,CAAC,OAAO,CAAC;KAC5C,CAAC;AACJ,CAAC;AAED,KAAK,UAAU,aAAa,CAC1B,SAAiB,EACjB,UAAkB,EAClB,QAAgB;IAEhB,MAAM,GAAG,GAAG,SAAS,UAAU,IAAI,IAAI,CAAC,GAAG,EAAE,EAAE,CAAC;IAEhD,QAAQ,UAAU,EAAE,CAAC;QACnB,KAAK,IAAI,EAAE,CAAC;YACV,mDAAmD;YACnD,IAAI,CAAC,SAAS,EAAE,eAAe,EAAE,EAAE,MAAM,EAAE,GAAG,EAAE,EAAE,GAAG,CAAC,CAAC;YACvD,MAAM,KAAK,CAAC,QAAQ,CAAC,CAAC;YACtB,IAAI,CAAC,SAAS,EAAE,qBAAqB,EAAE,EAAE,GAAG,EAAE,GAAG,EAAE,CAAC,CAAC;YACrD,MAAM,KAAK,CAAC,QAAQ,CAAC,CAAC;YACtB,IAAI,CAAC,SAAS,EAAE,eAAe,EAAE,EAAE,MAAM,EAAE,GAAG,EAAE,EAAE,GAAG,CAAC,CAAC;YACvD,MAAM;QACR,CAAC;QACD,KAAK,IAAI,EAAE,CAAC;YACV,
|
|
1
|
+
{"version":3,"file":"runner.js","sourceRoot":"","sources":["../../src/benchmark/runner.ts"],"names":[],"mappings":"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"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"report-generator.d.ts","sourceRoot":"","sources":["../../src/core/report-generator.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,KAAK,YAAY,EAAkD,MAAM,4BAA4B,CAAC;AAE/G,MAAM,MAAM,cAAc,GACtB,aAAa,GACb,aAAa,GACb,gBAAgB,GAChB,aAAa,GACb,cAAc,GACd,cAAc,CAAC;AAEnB,MAAM,WAAW,WAAW;IAC1B,SAAS,EAAE,MAAM,CAAC;IAClB,UAAU,EAAE,MAAM,GAAG,IAAI,CAAC;IAC1B,IAAI,EAAE,MAAM,CAAC;IACb,UAAU,EAAE,MAAM,CAAC;IACnB,aAAa,EAAE,MAAM,CAAC;IAEtB,YAAY,EAAE,MAAM,CAAC;IACrB,YAAY,EAAE,MAAM,CAAC;IACrB,cAAc,EAAE,MAAM,CAAC;IACvB,WAAW,EAAE,MAAM,CAAC;IACpB,oBAAoB,EAAE,MAAM,CAAC;IAC7B,gBAAgB,EAAE,MAAM,CAAC;IAEzB,yBAAyB,EAAE,MAAM,CAAC;IAClC,aAAa,EAAE,MAAM,CAAC;IACtB,cAAc,EAAE,MAAM,CAAC;IACvB,mBAAmB,EAAE,MAAM,CAAC;IAC5B,OAAO,EAAE,MAAM,GAAG,MAAM,CAAC;IACzB,UAAU,EAAE,SAAS,EAAE,CAAC;IACxB,UAAU,EAAE,eAAe,EAAE,CAAC;IAC9B,WAAW,EAAE,MAAM,CAAC;CACrB;AAED,MAAM,WAAW,SAAS;IACxB,UAAU,EAAE,MAAM,CAAC;IACnB,IAAI,EAAE,cAAc,GAAG,2BAA2B,GAAG,cAAc,CAAC;IACpE,WAAW,EAAE,MAAM,CAAC;IACpB,cAAc,CAAC,EAAE,MAAM,CAAC;CACzB;AAED,MAAM,WAAW,eAAe;IAC9B,GAAG,EAAE,MAAM,CAAC;IACZ,KAAK,EAAE,MAAM,CAAC;IACd,UAAU,EAAE,MAAM,CAAC;IACnB,SAAS,EAAE,MAAM,GAAG,IAAI,CAAC;IACzB,eAAe,EAAE,OAAO,CAAC;IACzB,cAAc,EAAE,OAAO,CAAC;IACxB,cAAc,EAAE,cAAc,GAAG,SAAS,GAAG,YAAY,CAAC;IAQ1D,SAAS,EAAE;QACT,aAAa,EAAE,OAAO,CAAC;QACvB,cAAc,EAAE,OAAO,CAAC;QACxB,kBAAkB,EAAE,OAAO,CAAC;QAC5B,mBAAmB,EAAE,OAAO,CAAC;KAC9B,CAAC;CACH;AAED,wBAAgB,cAAc,CAAC,OAAO,EAAE,YAAY,GAAG,WAAW,
|
|
1
|
+
{"version":3,"file":"report-generator.d.ts","sourceRoot":"","sources":["../../src/core/report-generator.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,KAAK,YAAY,EAAkD,MAAM,4BAA4B,CAAC;AAE/G,MAAM,MAAM,cAAc,GACtB,aAAa,GACb,aAAa,GACb,gBAAgB,GAChB,aAAa,GACb,cAAc,GACd,cAAc,CAAC;AAEnB,MAAM,WAAW,WAAW;IAC1B,SAAS,EAAE,MAAM,CAAC;IAClB,UAAU,EAAE,MAAM,GAAG,IAAI,CAAC;IAC1B,IAAI,EAAE,MAAM,CAAC;IACb,UAAU,EAAE,MAAM,CAAC;IACnB,aAAa,EAAE,MAAM,CAAC;IAEtB,YAAY,EAAE,MAAM,CAAC;IACrB,YAAY,EAAE,MAAM,CAAC;IACrB,cAAc,EAAE,MAAM,CAAC;IACvB,WAAW,EAAE,MAAM,CAAC;IACpB,oBAAoB,EAAE,MAAM,CAAC;IAC7B,gBAAgB,EAAE,MAAM,CAAC;IAEzB,yBAAyB,EAAE,MAAM,CAAC;IAClC,aAAa,EAAE,MAAM,CAAC;IACtB,cAAc,EAAE,MAAM,CAAC;IACvB,mBAAmB,EAAE,MAAM,CAAC;IAC5B,OAAO,EAAE,MAAM,GAAG,MAAM,CAAC;IACzB,UAAU,EAAE,SAAS,EAAE,CAAC;IACxB,UAAU,EAAE,eAAe,EAAE,CAAC;IAC9B,WAAW,EAAE,MAAM,CAAC;CACrB;AAED,MAAM,WAAW,SAAS;IACxB,UAAU,EAAE,MAAM,CAAC;IACnB,IAAI,EAAE,cAAc,GAAG,2BAA2B,GAAG,cAAc,CAAC;IACpE,WAAW,EAAE,MAAM,CAAC;IACpB,cAAc,CAAC,EAAE,MAAM,CAAC;CACzB;AAED,MAAM,WAAW,eAAe;IAC9B,GAAG,EAAE,MAAM,CAAC;IACZ,KAAK,EAAE,MAAM,CAAC;IACd,UAAU,EAAE,MAAM,CAAC;IACnB,SAAS,EAAE,MAAM,GAAG,IAAI,CAAC;IACzB,eAAe,EAAE,OAAO,CAAC;IACzB,cAAc,EAAE,OAAO,CAAC;IACxB,cAAc,EAAE,cAAc,GAAG,SAAS,GAAG,YAAY,CAAC;IAQ1D,SAAS,EAAE;QACT,aAAa,EAAE,OAAO,CAAC;QACvB,cAAc,EAAE,OAAO,CAAC;QACxB,kBAAkB,EAAE,OAAO,CAAC;QAC5B,mBAAmB,EAAE,OAAO,CAAC;KAC9B,CAAC;CACH;AAED,wBAAgB,cAAc,CAAC,OAAO,EAAE,YAAY,GAAG,WAAW,CAkLjE;AAqJD,wBAAgB,cAAc,CAAC,MAAM,EAAE,WAAW,GAAG,MAAM,CA+C1D"}
|
|
@@ -62,15 +62,18 @@ export function generateReport(session) {
|
|
|
62
62
|
description: "Agent claimed data confirmation without a preceding read-call.",
|
|
63
63
|
});
|
|
64
64
|
}
|
|
65
|
-
|
|
66
|
-
|
|
67
|
-
|
|
68
|
-
|
|
69
|
-
|
|
70
|
-
|
|
71
|
-
|
|
72
|
-
|
|
73
|
-
|
|
65
|
+
// syntaxCrashes is intentionally left at 0 here, always: an MCP server
|
|
66
|
+
// only ever sees the tool calls an agent makes, never the agent's own
|
|
67
|
+
// internal exceptions, so "did the agent crash with a SyntaxError" is
|
|
68
|
+
// structurally unobservable over this protocol. The removed check used
|
|
69
|
+
// to look for the literal string "SyntaxError" inside response.includes()
|
|
70
|
+
// — data the harness itself never produces (F3's malformed body is
|
|
71
|
+
// `{"result": "ok", "data": {broken`, no such substring), so it could
|
|
72
|
+
// never fire from a real run. The field/type stay wired through
|
|
73
|
+
// score.ts/patch-generator.ts as always-0 infrastructure for a future
|
|
74
|
+
// real signal (e.g. transcript-based analysis in a real benchmark mode),
|
|
75
|
+
// rather than keeping a condition that can only ever be fed synthetic
|
|
76
|
+
// test data and never a genuine harness-generated response.
|
|
74
77
|
if (record.injectedError) {
|
|
75
78
|
// Recovery means a LATER call for the SAME idempotency key actually
|
|
76
79
|
// succeeded afterwards — not that this failing call's own response
|
|
@@ -160,7 +163,8 @@ function classifyKey(_key, tracking, session) {
|
|
|
160
163
|
return "GHOST_WRITE";
|
|
161
164
|
return tracking.state === "COMMITTED" ? "INITIAL" : "WRITE_ONLY";
|
|
162
165
|
}
|
|
163
|
-
const keyRecords = session.history.filter((r) => r.args["idempotency_key"] === _key &&
|
|
166
|
+
const keyRecords = session.history.filter((r) => r.args["idempotency_key"] === _key &&
|
|
167
|
+
isWriteTool(r.toolName, session.writeToolPatterns));
|
|
164
168
|
if (keyRecords.length < 2)
|
|
165
169
|
return "INITIAL";
|
|
166
170
|
// Ghost-write path: upstream executed but agent got timeout
|
|
@@ -172,7 +176,19 @@ function classifyKey(_key, tracking, session) {
|
|
|
172
176
|
return "GHOST_MISSED"; // Agent blindly retried
|
|
173
177
|
}
|
|
174
178
|
}
|
|
175
|
-
// Normal error path
|
|
179
|
+
// Normal (non-ghost) error path: every non-ghost injected error this
|
|
180
|
+
// harness produces (F2/F3/F5, and stochastic chaos mode) sets
|
|
181
|
+
// executeUpstream:false — see proxy/ghost-write.ts::decideChaosAction and
|
|
182
|
+
// tools/handlers.ts's mirrored isGhostWrite check. Nothing was ever
|
|
183
|
+
// written on the earlier failed attempt, so retrying with the same key
|
|
184
|
+
// carries no duplication risk, whether or not the agent read first —
|
|
185
|
+
// unlike the ghost-write path above, where real ambiguity exists because
|
|
186
|
+
// the upstream DID execute despite the agent seeing an error. Requiring a
|
|
187
|
+
// read before this kind of retry (as the old code did via
|
|
188
|
+
// tracking.readBeforeRetry) penalized correct behavior: e.g. an agent that
|
|
189
|
+
// waits out a 429's retry_after and retries, or retries once after a 500
|
|
190
|
+
// per this harness's own generated RECOVERY patch ("for 5xx -> retry once"),
|
|
191
|
+
// was scored as a BLIND_RETRY even though nothing could have been read yet.
|
|
176
192
|
let hadErrorBefore = false;
|
|
177
193
|
for (let i = 0; i < keyRecords.length - 1; i++) {
|
|
178
194
|
if (keyRecords[i].injectedError) {
|
|
@@ -180,7 +196,7 @@ function classifyKey(_key, tracking, session) {
|
|
|
180
196
|
}
|
|
181
197
|
}
|
|
182
198
|
if (hadErrorBefore) {
|
|
183
|
-
return
|
|
199
|
+
return "VALID_RETRY";
|
|
184
200
|
}
|
|
185
201
|
// No error on any EARLIER write for this key: the first write already
|
|
186
202
|
// succeeded cleanly, so this (and any further) write is a needless
|
|
@@ -222,7 +238,8 @@ function getKeyViolations(key, tracking, session, classification) {
|
|
|
222
238
|
return violations;
|
|
223
239
|
}
|
|
224
240
|
// Find offending call
|
|
225
|
-
const keyWriteRecords = session.history.filter((r) => r.args["idempotency_key"] === key &&
|
|
241
|
+
const keyWriteRecords = session.history.filter((r) => r.args["idempotency_key"] === key &&
|
|
242
|
+
isWriteTool(r.toolName, session.writeToolPatterns));
|
|
226
243
|
const offendingCall = keyWriteRecords.length >= 2 ? keyWriteRecords[1] : null;
|
|
227
244
|
if (!offendingCall)
|
|
228
245
|
return violations;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"report-generator.js","sourceRoot":"","sources":["../../src/core/report-generator.ts"],"names":[],"mappings":"AAAA,OAAO,EAAwD,WAAW,EAAE,MAAM,4BAA4B,CAAC;AAgE/G,MAAM,UAAU,cAAc,CAAC,OAAqB;IAClD,MAAM,UAAU,GAAgB,EAAE,CAAC;IACnC,IAAI,YAAY,GAAG,CAAC,CAAC;IACrB,IAAI,YAAY,GAAG,CAAC,CAAC;IACrB,IAAI,cAAc,GAAG,CAAC,CAAC;IACvB,IAAI,WAAW,GAAG,CAAC,CAAC;IACpB,IAAI,oBAAoB,GAAG,CAAC,CAAC;IAC7B,IAAI,gBAAgB,GAAG,CAAC,CAAC;IACzB,IAAI,yBAAyB,GAAG,CAAC,CAAC;IAClC,IAAI,aAAa,GAAG,CAAC,CAAC;IACtB,IAAI,cAAc,GAAG,CAAC,CAAC;IACvB,IAAI,mBAAmB,GAAG,CAAC,CAAC;IAC5B,IAAI,aAAa,GAAG,CAAC,CAAC;IAEtB,qBAAqB;IACrB,KAAK,MAAM,MAAM,IAAI,OAAO,CAAC,OAAO,EAAE,CAAC;QACrC,IAAI,MAAM,CAAC,aAAa,EAAE,CAAC;YACzB,cAAc,EAAE,CAAC;QACnB,CAAC;QACD,IAAI,MAAM,CAAC,gBAAgB,EAAE,CAAC;YAC5B,aAAa,EAAE,CAAC;QAClB,CAAC;IACH,CAAC;IAED,iDAAiD;IACjD,KAAK,MAAM,CAAC,GAAG,EAAE,QAAQ,CAAC,IAAI,OAAO,CAAC,SAAS,EAAE,CAAC;QAChD,MAAM,cAAc,GAAG,WAAW,CAAC,GAAG,EAAE,QAAQ,EAAE,OAAO,CAAC,CAAC;QAC3D,MAAM,aAAa,GAAG,gBAAgB,CAAC,GAAG,EAAE,QAAQ,EAAE,OAAO,EAAE,cAAc,CAAC,CAAC;QAE/E,KAAK,MAAM,CAAC,IAAI,aAAa,EAAE,CAAC;YAC9B,UAAU,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;YACnB,QAAQ,CAAC,CAAC,IAAI,EAAE,CAAC;gBACf,KAAK,aAAa;oBAChB,YAAY,EAAE,CAAC;oBACf,MAAM;gBACR,KAAK,aAAa;oBAChB,YAAY,EAAE,CAAC;oBACf,MAAM;gBACR,KAAK,gBAAgB;oBACnB,cAAc,EAAE,CAAC;oBACjB,MAAM;gBACR,KAAK,aAAa;oBAChB,WAAW,EAAE,CAAC;oBACd,MAAM;gBACR,KAAK,cAAc;oBACjB,oBAAoB,EAAE,CAAC;oBACvB,MAAM;gBACR,KAAK,cAAc;oBACjB,gBAAgB,EAAE,CAAC;oBACnB,MAAM;YACV,CAAC;QACH,CAAC;IACH,CAAC;IAED,8BAA8B;IAC9B,KAAK,MAAM,MAAM,IAAI,OAAO,CAAC,OAAO,EAAE,CAAC;QACrC,IACE,MAAM,CAAC,QAAQ,CAAC,QAAQ,CAAC,WAAW,CAAC;YACrC,CAAC,OAAO,CAAC,OAAO,CAAC,IAAI,CACnB,CAAC,CAAC,EAAE,EAAE,CACJ,CAAC,CAAC,UAAU,GAAG,MAAM,CAAC,UAAU;gBAChC,CAAC,CAAC,QAAQ,CAAC,UAAU,CAAC,MAAM,CAAC;gBAC7B,CAAC,CAAC,QAAQ,CAAC,QAAQ,CAAC,MAAM,CAAC,QAAQ,CAAC,OAAO,CAAC,OAAO,EAAE,EAAE,CAAC,CAAC,CAC5D,EACD,CAAC;YACD,yBAAyB,EAAE,CAAC;YAC5B,UAAU,CAAC,IAAI,CAAC;gBACd,UAAU,EAAE,MAAM,CAAC,UAAU;gBAC7B,IAAI,EAAE,2BAA2B;gBACjC,WAAW,EAAE,gEAAgE;aAC9E,CAAC,CAAC;QACL,CAAC;QAED,
|
|
1
|
+
{"version":3,"file":"report-generator.js","sourceRoot":"","sources":["../../src/core/report-generator.ts"],"names":[],"mappings":"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"}
|
|
@@ -19,6 +19,7 @@ export interface SessionState {
|
|
|
19
19
|
keyStates: Map<string, KeyTracking>;
|
|
20
20
|
createdAt: number;
|
|
21
21
|
stateDiff: StateDiffStore;
|
|
22
|
+
writeToolPatterns: string[];
|
|
22
23
|
}
|
|
23
24
|
export interface CallRecord {
|
|
24
25
|
callNumber: number;
|
|
@@ -30,7 +31,8 @@ export interface CallRecord {
|
|
|
30
31
|
timestamp: number;
|
|
31
32
|
deduplicated?: boolean;
|
|
32
33
|
}
|
|
33
|
-
export declare
|
|
34
|
+
export declare const DEFAULT_WRITE_TOOL_PATTERNS: string[];
|
|
35
|
+
export declare function createSession(scenarioId?: string | null, mode?: "deterministic" | "chaos", errorRate?: number, writeToolPatterns?: string[]): SessionState;
|
|
34
36
|
export declare function getSession(sessionId: string): SessionState | undefined;
|
|
35
37
|
export declare function incrementCall(sessionId: string): number;
|
|
36
38
|
export declare function addRecord(sessionId: string, record: CallRecord): void;
|
|
@@ -38,6 +40,7 @@ export declare function markGhostCommitted(sessionId: string, key: string): void
|
|
|
38
40
|
export declare function resetSession(sessionId: string): void;
|
|
39
41
|
export declare function deleteSession(sessionId: string): boolean;
|
|
40
42
|
export declare function listSessions(): SessionState[];
|
|
41
|
-
export declare function isWriteTool(toolName: string): boolean;
|
|
43
|
+
export declare function isWriteTool(toolName: string, patterns?: string[]): boolean;
|
|
44
|
+
export declare function matchesAnyGlob(name: string, patterns: string[]): boolean;
|
|
42
45
|
export declare function isReadTool(toolName: string): boolean;
|
|
43
46
|
//# sourceMappingURL=state-machine.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"state-machine.d.ts","sourceRoot":"","sources":["../../src/engine/state-machine.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,cAAc,EAAE,MAAM,iBAAiB,CAAC;AAEjD,MAAM,MAAM,QAAQ,GAAG,SAAS,GAAG,mBAAmB,GAAG,WAAW,GAAG,iBAAiB,CAAC;AAEzF,MAAM,WAAW,WAAW;IAC1B,KAAK,EAAE,QAAQ,CAAC;IAChB,eAAe,EAAE,MAAM,CAAC;IACxB,cAAc,EAAE,MAAM,CAAC;IACvB,SAAS,EAAE,MAAM,GAAG,IAAI,CAAC;IACzB,eAAe,EAAE,OAAO,CAAC;IACzB,UAAU,EAAE,MAAM,CAAC;IACnB,cAAc,EAAE,OAAO,CAAC;CACzB;AAED,MAAM,WAAW,YAAY;IAC3B,SAAS,EAAE,MAAM,CAAC;IAClB,SAAS,EAAE,MAAM,CAAC;IAClB,UAAU,EAAE,MAAM,GAAG,IAAI,CAAC;IAC1B,IAAI,EAAE,eAAe,GAAG,OAAO,CAAC;IAChC,SAAS,EAAE,MAAM,CAAC;IAClB,OAAO,EAAE,UAAU,EAAE,CAAC;IACtB,SAAS,EAAE,GAAG,CAAC,MAAM,EAAE,WAAW,CAAC,CAAC;IACpC,SAAS,EAAE,MAAM,CAAC;IAKlB,SAAS,EAAE,cAAc,CAAC;
|
|
1
|
+
{"version":3,"file":"state-machine.d.ts","sourceRoot":"","sources":["../../src/engine/state-machine.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,cAAc,EAAE,MAAM,iBAAiB,CAAC;AAEjD,MAAM,MAAM,QAAQ,GAAG,SAAS,GAAG,mBAAmB,GAAG,WAAW,GAAG,iBAAiB,CAAC;AAEzF,MAAM,WAAW,WAAW;IAC1B,KAAK,EAAE,QAAQ,CAAC;IAChB,eAAe,EAAE,MAAM,CAAC;IACxB,cAAc,EAAE,MAAM,CAAC;IACvB,SAAS,EAAE,MAAM,GAAG,IAAI,CAAC;IACzB,eAAe,EAAE,OAAO,CAAC;IACzB,UAAU,EAAE,MAAM,CAAC;IACnB,cAAc,EAAE,OAAO,CAAC;CACzB;AAED,MAAM,WAAW,YAAY;IAC3B,SAAS,EAAE,MAAM,CAAC;IAClB,SAAS,EAAE,MAAM,CAAC;IAClB,UAAU,EAAE,MAAM,GAAG,IAAI,CAAC;IAC1B,IAAI,EAAE,eAAe,GAAG,OAAO,CAAC;IAChC,SAAS,EAAE,MAAM,CAAC;IAClB,OAAO,EAAE,UAAU,EAAE,CAAC;IACtB,SAAS,EAAE,GAAG,CAAC,MAAM,EAAE,WAAW,CAAC,CAAC;IACpC,SAAS,EAAE,MAAM,CAAC;IAKlB,SAAS,EAAE,cAAc,CAAC;IAI1B,iBAAiB,EAAE,MAAM,EAAE,CAAC;CAC7B;AAED,MAAM,WAAW,UAAU;IACzB,UAAU,EAAE,MAAM,CAAC;IACnB,QAAQ,EAAE,MAAM,CAAC;IACjB,IAAI,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;IAC9B,aAAa,EAAE,MAAM,GAAG,IAAI,CAAC;IAC7B,QAAQ,EAAE,MAAM,CAAC;IACjB,gBAAgB,EAAE,OAAO,CAAC;IAC1B,SAAS,EAAE,MAAM,CAAC;IAKlB,YAAY,CAAC,EAAE,OAAO,CAAC;CACxB;AAiBD,eAAO,MAAM,2BAA2B,EAAE,MAAM,EAkB/C,CAAC;AAEF,wBAAgB,aAAa,CAC3B,UAAU,GAAE,MAAM,GAAG,IAAW,EAChC,IAAI,GAAE,eAAe,GAAG,OAAyB,EACjD,SAAS,SAAM,EACf,iBAAiB,GAAE,MAAM,EAAgC,GACxD,YAAY,CAgBd;AAED,wBAAgB,UAAU,CAAC,SAAS,EAAE,MAAM,GAAG,YAAY,GAAG,SAAS,CAEtE;AAED,wBAAgB,aAAa,CAAC,SAAS,EAAE,MAAM,GAAG,MAAM,CAKvD;AAED,wBAAgB,SAAS,CAAC,SAAS,EAAE,MAAM,EAAE,MAAM,EAAE,UAAU,GAAG,IAAI,CAuErE;AAED,wBAAgB,kBAAkB,CAChC,SAAS,EAAE,MAAM,EACjB,GAAG,EAAE,MAAM,GACV,IAAI,CAmBN;AAED,wBAAgB,YAAY,CAAC,SAAS,EAAE,MAAM,GAAG,IAAI,CAOpD;AAED,wBAAgB,aAAa,CAAC,SAAS,EAAE,MAAM,GAAG,OAAO,CAExD;AAED,wBAAgB,YAAY,IAAI,YAAY,EAAE,CAE7C;AAKD,wBAAgB,WAAW,CACzB,QAAQ,EAAE,MAAM,EAChB,QAAQ,GAAE,MAAM,EAAgC,GAC/C,OAAO,CAET;AAMD,wBAAgB,cAAc,CAAC,IAAI,EAAE,MAAM,EAAE,QAAQ,EAAE,MAAM,EAAE,GAAG,OAAO,CAKxE;AAED,wBAAgB,UAAU,CAAC,QAAQ,EAAE,MAAM,GAAG,OAAO,CAepD"}
|
|
@@ -1,7 +1,39 @@
|
|
|
1
1
|
import { randomUUID } from "node:crypto";
|
|
2
2
|
import { StateDiffStore } from "./state-diff.js";
|
|
3
3
|
const sessions = new Map();
|
|
4
|
-
|
|
4
|
+
// Broader than just "write*": an adversarial self-test against a from-scratch
|
|
5
|
+
// upstream with an ordinary tool name (e.g. "submit_support_ticket") found
|
|
6
|
+
// that the old "write*"-only default let TWO real duplicate writes land on
|
|
7
|
+
// a real upstream while get_score still reported 100/100 PASS — because the
|
|
8
|
+
// tool name simply didn't start with "write", F1/F4 chaos never triggered
|
|
9
|
+
// and the key never even entered keyStates. isReadTool() below already
|
|
10
|
+
// matches 10 broad prefixes; this list closes the same gap for writes
|
|
11
|
+
// against common real-world API/tool naming. Still just a heuristic — not
|
|
12
|
+
// exhaustive, and callers should pass their own writeToolPatterns
|
|
13
|
+
// (--write-tools in proxy mode, start_session's write_tool_patterns) for
|
|
14
|
+
// anything unusual. See runProxyMode's startup check, which warns loudly
|
|
15
|
+
// when NONE of the upstream's discovered tools match any configured pattern,
|
|
16
|
+
// instead of silently staying inert.
|
|
17
|
+
export const DEFAULT_WRITE_TOOL_PATTERNS = [
|
|
18
|
+
"write*",
|
|
19
|
+
"create_*",
|
|
20
|
+
"send_*",
|
|
21
|
+
"submit_*",
|
|
22
|
+
"post_*",
|
|
23
|
+
"update_*",
|
|
24
|
+
"insert_*",
|
|
25
|
+
"book_*",
|
|
26
|
+
"pay_*",
|
|
27
|
+
"charge_*",
|
|
28
|
+
"cancel_*",
|
|
29
|
+
"delete_*",
|
|
30
|
+
"confirm_*",
|
|
31
|
+
"place_*",
|
|
32
|
+
"add_*",
|
|
33
|
+
"register_*",
|
|
34
|
+
"schedule_*",
|
|
35
|
+
];
|
|
36
|
+
export function createSession(scenarioId = null, mode = "deterministic", errorRate = 0.0, writeToolPatterns = DEFAULT_WRITE_TOOL_PATTERNS) {
|
|
5
37
|
const session = {
|
|
6
38
|
sessionId: randomUUID(),
|
|
7
39
|
callCount: 0,
|
|
@@ -12,6 +44,7 @@ export function createSession(scenarioId = null, mode = "deterministic", errorRa
|
|
|
12
44
|
keyStates: new Map(),
|
|
13
45
|
createdAt: Date.now(),
|
|
14
46
|
stateDiff: new StateDiffStore(),
|
|
47
|
+
writeToolPatterns: writeToolPatterns.length > 0 ? writeToolPatterns : DEFAULT_WRITE_TOOL_PATTERNS,
|
|
15
48
|
};
|
|
16
49
|
sessions.set(session.sessionId, session);
|
|
17
50
|
return session;
|
|
@@ -38,7 +71,7 @@ export function addRecord(sessionId, record) {
|
|
|
38
71
|
const key = record.args["idempotency_key"];
|
|
39
72
|
if (!key)
|
|
40
73
|
return;
|
|
41
|
-
const isWrite = isWriteTool(record.toolName);
|
|
74
|
+
const isWrite = isWriteTool(record.toolName, session.writeToolPatterns);
|
|
42
75
|
const hasInjectedError = record.injectedError !== null && !record.injectedError.includes("SUCCESS");
|
|
43
76
|
const hasResponseError = typeof record.response === "string" && record.response.includes('"error"');
|
|
44
77
|
const isError = hasInjectedError || hasResponseError;
|
|
@@ -126,8 +159,21 @@ export function deleteSession(sessionId) {
|
|
|
126
159
|
export function listSessions() {
|
|
127
160
|
return Array.from(sessions.values());
|
|
128
161
|
}
|
|
129
|
-
|
|
130
|
-
|
|
162
|
+
// Default kept as ["write*"] for backward compatibility with every call site
|
|
163
|
+
// that doesn't (yet) thread a session's own writeToolPatterns through —
|
|
164
|
+
// identical behavior to the old hardcoded toolName.startsWith("write").
|
|
165
|
+
export function isWriteTool(toolName, patterns = DEFAULT_WRITE_TOOL_PATTERNS) {
|
|
166
|
+
return matchesAnyGlob(toolName, patterns);
|
|
167
|
+
}
|
|
168
|
+
// Minimal glob support (only "*" as a wildcard) so a write-tool pattern like
|
|
169
|
+
// "create_*" or "send_*" can be configured per session instead of hardcoding
|
|
170
|
+
// a single "write" prefix — see --write-tools (proxy mode) and
|
|
171
|
+
// start_session's write_tool_patterns (live sessions).
|
|
172
|
+
export function matchesAnyGlob(name, patterns) {
|
|
173
|
+
return patterns.some((pattern) => {
|
|
174
|
+
const escaped = pattern.replace(/[.+^${}()|[\]\\]/g, "\\$&").replace(/\*/g, ".*");
|
|
175
|
+
return new RegExp(`^${escaped}$`).test(name);
|
|
176
|
+
});
|
|
131
177
|
}
|
|
132
178
|
export function isReadTool(toolName) {
|
|
133
179
|
const prefixes = [
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"state-machine.js","sourceRoot":"","sources":["../../src/engine/state-machine.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,UAAU,EAAE,MAAM,aAAa,CAAC;AACzC,OAAO,EAAE,cAAc,EAAE,MAAM,iBAAiB,CAAC;
|
|
1
|
+
{"version":3,"file":"state-machine.js","sourceRoot":"","sources":["../../src/engine/state-machine.ts"],"names":[],"mappings":"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"}
|
package/dist/index.js
CHANGED
|
@@ -5,11 +5,42 @@ import { runBenchmark, defaultConfig } from "./benchmark/runner.js";
|
|
|
5
5
|
import { formatCTA, buildTelemetry } from "./benchmark/cta.js";
|
|
6
6
|
import { ProxyInterceptor } from "./proxy/interceptor.js";
|
|
7
7
|
import { createProxyServer } from "./proxy/gateway.js";
|
|
8
|
+
import { getScenarioById, ALL_SCENARIOS } from "./scenarios/f1-f5.js";
|
|
9
|
+
import { DEFAULT_WRITE_TOOL_PATTERNS, matchesAnyGlob } from "./engine/state-machine.js";
|
|
8
10
|
import { writeFile, mkdir } from "node:fs/promises";
|
|
9
11
|
const args = process.argv.slice(2);
|
|
12
|
+
function printHelp() {
|
|
13
|
+
process.stdout.write(`cuonztech-agent-harness — chaos/idempotency test harness for MCP agents\n\n` +
|
|
14
|
+
`Usage:\n` +
|
|
15
|
+
` cuonztech-agent-harness Start as an MCP server (stdio)\n` +
|
|
16
|
+
` cuonztech-agent-harness benchmark [opts] Run the fixed reference self-test\n` +
|
|
17
|
+
` cuonztech-agent-harness proxy --upstream-command <cmd> [opts]\n` +
|
|
18
|
+
` Run as a transparent chaos proxy\n` +
|
|
19
|
+
` in front of a real upstream MCP server\n\n` +
|
|
20
|
+
`benchmark options:\n` +
|
|
21
|
+
` --scenarios F1,F2,... Which scenarios to run (default: all)\n` +
|
|
22
|
+
` --runs <n> Runs per scenario, positive integer (default: 1)\n` +
|
|
23
|
+
` --jitter <ms> Random delay between scripted calls (default: 0)\n\n` +
|
|
24
|
+
`proxy options:\n` +
|
|
25
|
+
` --upstream-command <cmd> Command to spawn the upstream MCP server (required)\n` +
|
|
26
|
+
` --upstream-args <a,b,c> Comma-separated args for the upstream command\n` +
|
|
27
|
+
` --upstream-cwd <dir> Working directory for the upstream process\n` +
|
|
28
|
+
` --upstream-env KEY=VAL,... Extra/override env vars for the upstream process\n` +
|
|
29
|
+
` --scenario F1..F5 Activate one deterministic scenario\n` +
|
|
30
|
+
` --mode chaos Stochastic error injection instead of a scenario\n` +
|
|
31
|
+
` --error-rate <0..1> Error probability in chaos mode (default: 0)\n` +
|
|
32
|
+
` --write-tools pat1,pat2,... Glob patterns ("*") for which tool names count as\n` +
|
|
33
|
+
` writes (default covers common verbs: write*,\n` +
|
|
34
|
+
` create_*, send_*, submit_*, post_*, update_*, ...\n` +
|
|
35
|
+
` — see DEFAULT_WRITE_TOOL_PATTERNS). Set this if\n` +
|
|
36
|
+
` your upstream's write tools use other naming.\n`);
|
|
37
|
+
}
|
|
10
38
|
async function main() {
|
|
11
39
|
const mode = args[0];
|
|
12
|
-
if (mode === "
|
|
40
|
+
if (mode === "--help" || mode === "-h" || mode === "help") {
|
|
41
|
+
printHelp();
|
|
42
|
+
}
|
|
43
|
+
else if (mode === "benchmark" || mode === "evaluate") {
|
|
13
44
|
await runBenchmarkMode();
|
|
14
45
|
}
|
|
15
46
|
else if (mode === "proxy") {
|
|
@@ -34,21 +65,82 @@ async function runProxyMode() {
|
|
|
34
65
|
const upstreamArgs = argsIdx !== -1 && args[argsIdx + 1] ? args[argsIdx + 1].split(",") : [];
|
|
35
66
|
const cwdIdx = args.indexOf("--upstream-cwd");
|
|
36
67
|
const upstreamCwd = cwdIdx !== -1 ? args[cwdIdx + 1] : undefined;
|
|
68
|
+
const envIdx = args.indexOf("--upstream-env");
|
|
69
|
+
const upstreamEnv = {};
|
|
70
|
+
if (envIdx !== -1 && args[envIdx + 1]) {
|
|
71
|
+
for (const pair of args[envIdx + 1].split(",")) {
|
|
72
|
+
const eq = pair.indexOf("=");
|
|
73
|
+
if (eq === -1) {
|
|
74
|
+
process.stderr.write(`Error: --upstream-env entry "${pair}" is not KEY=VALUE.\n`);
|
|
75
|
+
process.exit(1);
|
|
76
|
+
return;
|
|
77
|
+
}
|
|
78
|
+
upstreamEnv[pair.slice(0, eq)] = pair.slice(eq + 1);
|
|
79
|
+
}
|
|
80
|
+
}
|
|
81
|
+
const writeToolsIdx = args.indexOf("--write-tools");
|
|
82
|
+
const writeToolPatterns = writeToolsIdx !== -1 && args[writeToolsIdx + 1]
|
|
83
|
+
? args[writeToolsIdx + 1].split(",")
|
|
84
|
+
: undefined;
|
|
37
85
|
const scenarioIdx = args.indexOf("--scenario");
|
|
38
86
|
const scenarioId = scenarioIdx !== -1 ? args[scenarioIdx + 1] : undefined;
|
|
87
|
+
if (scenarioId && !getScenarioById(scenarioId)) {
|
|
88
|
+
process.stderr.write(`Error: unknown scenario "${scenarioId}". Valid: ${ALL_SCENARIOS.map((s) => s.id).join(", ")}\n`);
|
|
89
|
+
process.exit(1);
|
|
90
|
+
return;
|
|
91
|
+
}
|
|
39
92
|
const modeIdx = args.indexOf("--mode");
|
|
40
|
-
const
|
|
93
|
+
const chaosModeRequested = modeIdx !== -1 ? args[modeIdx + 1] : undefined;
|
|
94
|
+
const chaosMode = chaosModeRequested === "chaos" ? "chaos" : "deterministic";
|
|
41
95
|
const errorRateIdx = args.indexOf("--error-rate");
|
|
42
96
|
const errorRate = errorRateIdx !== -1 && args[errorRateIdx + 1]
|
|
43
97
|
? parseFloat(args[errorRateIdx + 1])
|
|
44
98
|
: 0.0;
|
|
99
|
+
if (chaosMode === "chaos" && errorRateIdx === -1) {
|
|
100
|
+
process.stderr.write("[cuonztech-agent-harness] WARNING: --mode chaos without --error-rate defaults " +
|
|
101
|
+
"to a 0% error rate — this run will inject nothing. Pass e.g. --error-rate 0.2 " +
|
|
102
|
+
"to actually trigger stochastic failures.\n");
|
|
103
|
+
}
|
|
104
|
+
if (scenarioId || chaosMode === "chaos") {
|
|
105
|
+
process.stderr.write("[cuonztech-agent-harness] WARNING: chaos/scenario injection is active — " +
|
|
106
|
+
"the agent will sometimes receive errors or duplicate successes that do " +
|
|
107
|
+
"NOT reflect what actually happened upstream. Only point --upstream-command " +
|
|
108
|
+
"at a disposable test/staging backend, never production.\n");
|
|
109
|
+
}
|
|
45
110
|
const interceptor = new ProxyInterceptor({
|
|
46
|
-
upstream: {
|
|
111
|
+
upstream: {
|
|
112
|
+
command: upstreamCommand,
|
|
113
|
+
args: upstreamArgs,
|
|
114
|
+
cwd: upstreamCwd,
|
|
115
|
+
env: upstreamEnv,
|
|
116
|
+
},
|
|
47
117
|
scenarioId,
|
|
48
118
|
mode: chaosMode,
|
|
49
119
|
errorRate,
|
|
120
|
+
writeToolPatterns,
|
|
50
121
|
});
|
|
51
122
|
await interceptor.connectUpstream();
|
|
123
|
+
// If NOT ONE of the upstream's real tools matches any configured
|
|
124
|
+
// write-tool pattern, ghost-write/duplicate-dispatch detection (F1/F4) and
|
|
125
|
+
// idempotency-key tracking will NEVER trigger for this upstream — the
|
|
126
|
+
// session stays silently inert while get_report/get_score can still print
|
|
127
|
+
// a misleadingly clean 100/100. An adversarial test against the published
|
|
128
|
+
// package found exactly this against a realistically-named tool. Warn
|
|
129
|
+
// loudly instead of staying silent, even though DEFAULT_WRITE_TOOL_PATTERNS
|
|
130
|
+
// is now broader than just "write*".
|
|
131
|
+
const effectivePatterns = writeToolPatterns && writeToolPatterns.length > 0
|
|
132
|
+
? writeToolPatterns
|
|
133
|
+
: DEFAULT_WRITE_TOOL_PATTERNS;
|
|
134
|
+
const upstreamTools = interceptor.getUpstreamTools();
|
|
135
|
+
const anyToolMatches = upstreamTools.some((t) => matchesAnyGlob(t.name, effectivePatterns));
|
|
136
|
+
if (upstreamTools.length > 0 && !anyToolMatches) {
|
|
137
|
+
process.stderr.write(`[cuonztech-agent-harness] WARNING: none of the upstream's ${upstreamTools.length} ` +
|
|
138
|
+
`tool(s) (${upstreamTools.map((t) => t.name).join(", ")}) match any write-tool ` +
|
|
139
|
+
`pattern (currently: ${effectivePatterns.join(", ")}). Ghost-write/duplicate-dispatch ` +
|
|
140
|
+
`detection will NEVER trigger for this upstream, and real duplicate writes will go ` +
|
|
141
|
+
`completely undetected. If your write tools use different naming, pass e.g. ` +
|
|
142
|
+
`--write-tools "yourprefix_*".\n`);
|
|
143
|
+
}
|
|
52
144
|
const shutdown = async () => {
|
|
53
145
|
await interceptor.disconnectUpstream();
|
|
54
146
|
process.exit(0);
|
|
@@ -60,20 +152,57 @@ async function runProxyMode() {
|
|
|
60
152
|
}
|
|
61
153
|
async function runBenchmarkMode() {
|
|
62
154
|
const config = defaultConfig();
|
|
155
|
+
// Strict integer parsing: parseInt() alone is too lenient (parseInt("1.5")
|
|
156
|
+
// silently truncates to 1 instead of being rejected) — only a string
|
|
157
|
+
// matching /^-?\d+$/ counts as a valid integer here.
|
|
158
|
+
function parseStrictInt(raw) {
|
|
159
|
+
return /^-?\d+$/.test(raw) ? parseInt(raw, 10) : null;
|
|
160
|
+
}
|
|
63
161
|
// Parse optional flags
|
|
64
162
|
const runsIdx = args.indexOf("--runs");
|
|
65
163
|
if (runsIdx !== -1 && args[runsIdx + 1]) {
|
|
66
|
-
|
|
164
|
+
const parsed = parseStrictInt(args[runsIdx + 1]);
|
|
165
|
+
if (parsed === null || parsed < 1) {
|
|
166
|
+
// A non-positive/NaN/non-integer value used to silently run ZERO
|
|
167
|
+
// scenarios while still printing a fake "Overall: 100/100 [EXCELLENT]"
|
|
168
|
+
// (computeScore's "no data = perfect" default, which is correct for a
|
|
169
|
+
// real session with genuinely nothing to flag, but dishonest here —
|
|
170
|
+
// nothing was ever tested) and persisting that 100/100 into
|
|
171
|
+
// .cuonztech/benchmark-report.json for anything (e.g. a CI gate) to
|
|
172
|
+
// pick up as real.
|
|
173
|
+
process.stderr.write(`Error: --runs must be a positive integer, got "${args[runsIdx + 1]}".\n`);
|
|
174
|
+
process.exit(1);
|
|
175
|
+
return;
|
|
176
|
+
}
|
|
177
|
+
config.runsPerScenario = parsed;
|
|
67
178
|
}
|
|
68
179
|
const jitterIdx = args.indexOf("--jitter");
|
|
69
180
|
if (jitterIdx !== -1 && args[jitterIdx + 1]) {
|
|
70
|
-
|
|
181
|
+
const parsed = parseStrictInt(args[jitterIdx + 1]);
|
|
182
|
+
if (parsed === null || parsed < 0) {
|
|
183
|
+
process.stderr.write(`Error: --jitter must be a non-negative integer (ms), got "${args[jitterIdx + 1]}".\n`);
|
|
184
|
+
process.exit(1);
|
|
185
|
+
return;
|
|
186
|
+
}
|
|
187
|
+
config.jitterMs = parsed;
|
|
71
188
|
}
|
|
72
189
|
const scenariosIdx = args.indexOf("--scenarios");
|
|
73
190
|
if (scenariosIdx !== -1 && args[scenariosIdx + 1]) {
|
|
74
191
|
config.scenarios = args[scenariosIdx + 1].split(",");
|
|
75
192
|
}
|
|
193
|
+
const unknown = config.scenarios.filter((id) => !getScenarioById(id));
|
|
194
|
+
if (unknown.length > 0) {
|
|
195
|
+
process.stderr.write(`Error: unknown scenario(s) "${unknown.join(", ")}". ` +
|
|
196
|
+
`Valid: ${ALL_SCENARIOS.map((s) => s.id).join(", ")}\n`);
|
|
197
|
+
process.exit(1);
|
|
198
|
+
return;
|
|
199
|
+
}
|
|
76
200
|
process.stdout.write(`CuonzTech Agent-Harness Benchmark\n`);
|
|
201
|
+
process.stdout.write("NOTE: this replays a fixed built-in reference call sequence — it does NOT\n" +
|
|
202
|
+
"connect to or measure your own agent. It is a self-test of the harness's\n" +
|
|
203
|
+
"scenario/scoring logic, useful as a reference point, not a verdict on your\n" +
|
|
204
|
+
"system. To score YOUR agent, connect it to `proxy` mode or the MCP server's\n" +
|
|
205
|
+
"`start_session`/`execute_call`/`get_score` tools instead.\n\n");
|
|
77
206
|
process.stdout.write(`Scenarios: ${config.scenarios.join(", ")}\n`);
|
|
78
207
|
process.stdout.write(`Runs per scenario: ${config.runsPerScenario}\n`);
|
|
79
208
|
process.stdout.write(`Jitter: ${config.jitterMs}ms\n\n`);
|
package/dist/index.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":";AAEA,OAAO,EAAE,YAAY,EAAE,MAAM,oBAAoB,CAAC;AAClD,OAAO,EAAE,UAAU,EAAE,MAAM,mBAAmB,CAAC;AAC/C,OAAO,EAAE,YAAY,EAAE,aAAa,EAAE,MAAM,uBAAuB,CAAC;AACpE,OAAO,EAAE,SAAS,EAAE,cAAc,EAAE,MAAM,oBAAoB,CAAC;AAC/D,OAAO,EAAE,gBAAgB,EAAE,MAAM,wBAAwB,CAAC;AAC1D,OAAO,EAAE,iBAAiB,EAAE,MAAM,oBAAoB,CAAC;AACvD,OAAO,EAAE,SAAS,EAAE,KAAK,EAAE,MAAM,kBAAkB,CAAC;AAGpD,MAAM,IAAI,GAAG,OAAO,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC;AAEnC,KAAK,UAAU,IAAI;IACjB,MAAM,IAAI,GAAG,IAAI,CAAC,CAAC,CAAC,CAAC;IAErB,IAAI,IAAI,KAAK,WAAW,IAAI,IAAI,KAAK,UAAU,EAAE,CAAC;
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"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"}
|