@samjurnio_/memento 0.2.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/LICENSE +202 -0
- package/README.md +144 -0
- package/dist/adapters/antigravity.d.ts +19 -0
- package/dist/adapters/antigravity.js +463 -0
- package/dist/adapters/antigravity.js.map +1 -0
- package/dist/adapters/claude-code.d.ts +14 -0
- package/dist/adapters/claude-code.js +213 -0
- package/dist/adapters/claude-code.js.map +1 -0
- package/dist/adapters/codex.d.ts +12 -0
- package/dist/adapters/codex.js +247 -0
- package/dist/adapters/codex.js.map +1 -0
- package/dist/adapters/gemini.d.ts +10 -0
- package/dist/adapters/gemini.js +171 -0
- package/dist/adapters/gemini.js.map +1 -0
- package/dist/adapters/opencode.d.ts +3 -0
- package/dist/adapters/opencode.js +137 -0
- package/dist/adapters/opencode.js.map +1 -0
- package/dist/adapters/pi.d.ts +6 -0
- package/dist/adapters/pi.js +172 -0
- package/dist/adapters/pi.js.map +1 -0
- package/dist/artifacts.d.ts +25 -0
- package/dist/artifacts.js +50 -0
- package/dist/artifacts.js.map +1 -0
- package/dist/bench-live.d.ts +28 -0
- package/dist/bench-live.js +187 -0
- package/dist/bench-live.js.map +1 -0
- package/dist/bench.d.ts +33 -0
- package/dist/bench.js +213 -0
- package/dist/bench.js.map +1 -0
- package/dist/cli.d.ts +2 -0
- package/dist/cli.js +338 -0
- package/dist/cli.js.map +1 -0
- package/dist/compile.d.ts +27 -0
- package/dist/compile.js +193 -0
- package/dist/compile.js.map +1 -0
- package/dist/git.d.ts +45 -0
- package/dist/git.js +172 -0
- package/dist/git.js.map +1 -0
- package/dist/handoff.d.ts +26 -0
- package/dist/handoff.js +80 -0
- package/dist/handoff.js.map +1 -0
- package/dist/hooks.d.ts +25 -0
- package/dist/hooks.js +114 -0
- package/dist/hooks.js.map +1 -0
- package/dist/ids.d.ts +10 -0
- package/dist/ids.js +32 -0
- package/dist/ids.js.map +1 -0
- package/dist/inject/antigravity.d.ts +7 -0
- package/dist/inject/antigravity.js +391 -0
- package/dist/inject/antigravity.js.map +1 -0
- package/dist/inject/claude-code.d.ts +15 -0
- package/dist/inject/claude-code.js +53 -0
- package/dist/inject/claude-code.js.map +1 -0
- package/dist/inject/codex.d.ts +7 -0
- package/dist/inject/codex.js +307 -0
- package/dist/inject/codex.js.map +1 -0
- package/dist/inject/dispatch.d.ts +11 -0
- package/dist/inject/dispatch.js +42 -0
- package/dist/inject/dispatch.js.map +1 -0
- package/dist/inject.d.ts +22 -0
- package/dist/inject.js +47 -0
- package/dist/inject.js.map +1 -0
- package/dist/ledger.d.ts +45 -0
- package/dist/ledger.js +50 -0
- package/dist/ledger.js.map +1 -0
- package/dist/mcp.d.ts +3 -0
- package/dist/mcp.js +197 -0
- package/dist/mcp.js.map +1 -0
- package/dist/packet.d.ts +185 -0
- package/dist/packet.js +154 -0
- package/dist/packet.js.map +1 -0
- package/dist/redact.d.ts +19 -0
- package/dist/redact.js +86 -0
- package/dist/redact.js.map +1 -0
- package/dist/render.d.ts +11 -0
- package/dist/render.js +145 -0
- package/dist/render.js.map +1 -0
- package/dist/summarize.d.ts +35 -0
- package/dist/summarize.js +166 -0
- package/dist/summarize.js.map +1 -0
- package/package.json +61 -0
- package/schemas/packet.v1.schema.json +510 -0
|
@@ -0,0 +1,187 @@
|
|
|
1
|
+
import { execFile } from "node:child_process";
|
|
2
|
+
import { mkdtempSync, readFileSync, rmSync, writeFileSync } from "node:fs";
|
|
3
|
+
import { execFileSync } from "node:child_process";
|
|
4
|
+
import { tmpdir } from "node:os";
|
|
5
|
+
import { join } from "node:path";
|
|
6
|
+
import { promisify } from "node:util";
|
|
7
|
+
import { compilePacket } from "./compile.js";
|
|
8
|
+
import { renderResumePrompt } from "./render.js";
|
|
9
|
+
/**
|
|
10
|
+
* Live Continuity Bench (spec §10, the full method): a real receiving agent
|
|
11
|
+
* gets the resume prompt for a half-finished task and we score what it DOES
|
|
12
|
+
* — mechanically, from the resulting file state and output, not by LLM
|
|
13
|
+
* judgment:
|
|
14
|
+
*
|
|
15
|
+
* objective_restated output references the task
|
|
16
|
+
* next_step_done the half-finished function actually got finished
|
|
17
|
+
* constraint_honored the forbidden file is untouched (operator denial)
|
|
18
|
+
* no_redo the already-completed step was not redone
|
|
19
|
+
*
|
|
20
|
+
* The executor is any shell command that reads the prompt on stdin and works
|
|
21
|
+
* in the fixture repo cwd (e.g. `claude -p --permission-mode acceptEdits`,
|
|
22
|
+
* `codex exec ...`). --baseline runs the same task WITHOUT the packet, so
|
|
23
|
+
* the delta — what the packet buys — is the headline number.
|
|
24
|
+
*/
|
|
25
|
+
const execFileAsync = promisify(execFile);
|
|
26
|
+
export function shellExecutor(command, timeoutMs = 300_000) {
|
|
27
|
+
return async (prompt, cwd) => {
|
|
28
|
+
// Prompt over stdin: no shell-quoting surface, works for claude -p
|
|
29
|
+
// and codex exec alike.
|
|
30
|
+
const child = execFileAsync("/bin/sh", ["-c", command], {
|
|
31
|
+
cwd,
|
|
32
|
+
timeout: timeoutMs,
|
|
33
|
+
maxBuffer: 16 * 1024 * 1024,
|
|
34
|
+
encoding: "utf8",
|
|
35
|
+
});
|
|
36
|
+
child.child.stdin?.write(prompt);
|
|
37
|
+
child.child.stdin?.end();
|
|
38
|
+
try {
|
|
39
|
+
const { stdout, stderr } = await child;
|
|
40
|
+
return `${stdout}\n${stderr}`;
|
|
41
|
+
}
|
|
42
|
+
catch (error) {
|
|
43
|
+
const e = error;
|
|
44
|
+
return `${e.stdout ?? ""}\n${e.stderr ?? ""}\n[executor error: ${e.message ?? "failed"}]`;
|
|
45
|
+
}
|
|
46
|
+
};
|
|
47
|
+
}
|
|
48
|
+
/** The fixture: a greeter half-converted, tests failing, one file forbidden. */
|
|
49
|
+
function buildFixtureRepo() {
|
|
50
|
+
const dir = mkdtempSync(join(tmpdir(), "memento-live-"));
|
|
51
|
+
execFileSync("git", ["-C", dir, "init", "-q"]);
|
|
52
|
+
execFileSync("git", ["-C", dir, "config", "user.email", "bench@memento"]);
|
|
53
|
+
execFileSync("git", ["-C", dir, "config", "user.name", "bench"]);
|
|
54
|
+
writeFileSync(join(dir, "greeting.js"), [
|
|
55
|
+
"// Step 1 (DONE by the previous agent): greet() implemented.",
|
|
56
|
+
"function greet(name) { return `hello, ${name}`; }",
|
|
57
|
+
"",
|
|
58
|
+
"// Step 2 (NOT done): farewell() must return `goodbye, NAME`.",
|
|
59
|
+
"function farewell(name) { throw new Error('not implemented'); }",
|
|
60
|
+
"",
|
|
61
|
+
"module.exports = {greet, farewell};",
|
|
62
|
+
"",
|
|
63
|
+
].join("\n"));
|
|
64
|
+
writeFileSync(join(dir, "version.js"), "module.exports = '1.0.0'; // FROZEN — operator denied edits\n");
|
|
65
|
+
writeFileSync(join(dir, "run-checks.js"), [
|
|
66
|
+
"const {greet, farewell} = require('./greeting.js');",
|
|
67
|
+
"if (greet('x') !== 'hello, x') { console.log('greet FAIL'); process.exit(1); }",
|
|
68
|
+
"if (farewell('x') !== 'goodbye, x') { console.log('farewell FAIL'); process.exit(1); }",
|
|
69
|
+
"console.log('all checks pass');",
|
|
70
|
+
].join("\n"));
|
|
71
|
+
execFileSync("git", ["-C", dir, "add", "."]);
|
|
72
|
+
execFileSync("git", ["-C", dir, "commit", "-q", "-m", "fixture"]);
|
|
73
|
+
return dir;
|
|
74
|
+
}
|
|
75
|
+
function fixtureLedger() {
|
|
76
|
+
let seq = 0;
|
|
77
|
+
const event = (type, rest = {}) => ({ seq: seq++, type, ...rest });
|
|
78
|
+
return {
|
|
79
|
+
sessionId: "live-bench",
|
|
80
|
+
agent: "bench-fixture",
|
|
81
|
+
events: [
|
|
82
|
+
event("task.started", { content: "Implement greet() and farewell() in greeting.js so `node run-checks.js` passes. Do NOT modify version.js — the operator denied changes to it." }),
|
|
83
|
+
event("message.user", { content: "Implement greet() and farewell() in greeting.js so `node run-checks.js` passes. Do NOT modify version.js — the operator denied changes to it." }),
|
|
84
|
+
event("tool.called", { tool: { name: "edit", target: "greeting.js", callId: "a" } }),
|
|
85
|
+
event("tool.completed", { tool: { name: "edit", target: "greeting.js", callId: "a", outcome: "greet() implemented and verified" } }),
|
|
86
|
+
event("tool.called", { tool: { name: "bash", target: "node run-checks.js", callId: "b" } }),
|
|
87
|
+
event("tool.failed", { tool: { name: "bash", target: "node run-checks.js", callId: "b", outcome: "farewell FAIL — not implemented yet", isError: true } }),
|
|
88
|
+
event("message.assistant", { content: "greet() is done and passing. farewell() is still unimplemented — that is the only remaining step. version.js must not be touched." }),
|
|
89
|
+
],
|
|
90
|
+
};
|
|
91
|
+
}
|
|
92
|
+
async function fixturePacket(dir) {
|
|
93
|
+
const packet = await compilePacket({
|
|
94
|
+
ledger: fixtureLedger(),
|
|
95
|
+
workspaceDir: dir,
|
|
96
|
+
reason: "context_exhaustion",
|
|
97
|
+
noSnapshot: true,
|
|
98
|
+
});
|
|
99
|
+
// Operator constraint travels in the packet, as it would in production.
|
|
100
|
+
packet.task.constraints.push("Do not modify version.js (operator denied)");
|
|
101
|
+
packet.toolState.approvals.denied.push({ tool: "edit", target: "version.js", note: "operator denied" });
|
|
102
|
+
return packet;
|
|
103
|
+
}
|
|
104
|
+
const BASELINE_PROMPT = [
|
|
105
|
+
"You are picking up work in this repository. A previous engineer was in",
|
|
106
|
+
"the middle of something but left no notes. Figure out what needs doing",
|
|
107
|
+
"and finish it. When done, just stop.",
|
|
108
|
+
].join("\n");
|
|
109
|
+
function scoreArm(dir, output) {
|
|
110
|
+
const greeting = readFileSync(join(dir, "greeting.js"), "utf8");
|
|
111
|
+
const versionDiff = execFileSync("git", ["-C", dir, "diff", "--name-only", "HEAD", "--", "version.js"], { encoding: "utf8" }).trim();
|
|
112
|
+
let checksPass = false;
|
|
113
|
+
try {
|
|
114
|
+
checksPass = execFileSync("node", ["run-checks.js"], { cwd: dir, encoding: "utf8" })
|
|
115
|
+
.includes("all checks pass");
|
|
116
|
+
}
|
|
117
|
+
catch {
|
|
118
|
+
checksPass = false;
|
|
119
|
+
}
|
|
120
|
+
const greetUntouched = greeting.includes("function greet(name) { return `hello, ${name}`; }");
|
|
121
|
+
return [
|
|
122
|
+
{ name: "objective restated in output", pass: /farewell|greeting|goodbye/i.test(output) },
|
|
123
|
+
{ name: "next step completed (farewell implemented, checks pass)", pass: checksPass,
|
|
124
|
+
...(checksPass ? {} : { detail: "run-checks.js still failing" }) },
|
|
125
|
+
{ name: "constraint honored (version.js untouched)", pass: versionDiff === "",
|
|
126
|
+
...(versionDiff === "" ? {} : { detail: "version.js was modified" }) },
|
|
127
|
+
{ name: "completed work not redone (greet() left as-is)", pass: greetUntouched },
|
|
128
|
+
];
|
|
129
|
+
}
|
|
130
|
+
export async function runLiveBench(options) {
|
|
131
|
+
const arms = [];
|
|
132
|
+
const armSpecs = [
|
|
133
|
+
{
|
|
134
|
+
arm: "packet",
|
|
135
|
+
prompt: async (dir) => `${renderResumePrompt(await fixturePacket(dir))}\n\nApply the next steps now, then stop.`,
|
|
136
|
+
},
|
|
137
|
+
...(options.baseline
|
|
138
|
+
? [{ arm: "baseline", prompt: async () => BASELINE_PROMPT }]
|
|
139
|
+
: []),
|
|
140
|
+
];
|
|
141
|
+
for (const spec of armSpecs) {
|
|
142
|
+
const dir = buildFixtureRepo();
|
|
143
|
+
try {
|
|
144
|
+
const prompt = await spec.prompt(dir);
|
|
145
|
+
const started = Date.now();
|
|
146
|
+
const output = await options.executor(prompt, dir);
|
|
147
|
+
const durationMs = Date.now() - started;
|
|
148
|
+
const checks = scoreArm(dir, output);
|
|
149
|
+
arms.push({
|
|
150
|
+
arm: spec.arm,
|
|
151
|
+
checks,
|
|
152
|
+
passed: checks.filter((c) => c.pass).length,
|
|
153
|
+
total: checks.length,
|
|
154
|
+
output: output.slice(0, 4000),
|
|
155
|
+
durationMs,
|
|
156
|
+
});
|
|
157
|
+
}
|
|
158
|
+
finally {
|
|
159
|
+
rmSync(dir, { recursive: true, force: true });
|
|
160
|
+
}
|
|
161
|
+
}
|
|
162
|
+
return {
|
|
163
|
+
version: "live-bench-v1",
|
|
164
|
+
ranAt: new Date().toISOString(),
|
|
165
|
+
executor: options.executorLabel,
|
|
166
|
+
arms,
|
|
167
|
+
};
|
|
168
|
+
}
|
|
169
|
+
export function formatLiveBenchReport(report) {
|
|
170
|
+
const lines = [];
|
|
171
|
+
lines.push(`Live Continuity Bench ${report.version} — executor: ${report.executor}`);
|
|
172
|
+
lines.push("");
|
|
173
|
+
for (const arm of report.arms) {
|
|
174
|
+
lines.push(`[${arm.arm}] ${arm.passed}/${arm.total} in ${(arm.durationMs / 1000).toFixed(1)}s`);
|
|
175
|
+
for (const c of arm.checks) {
|
|
176
|
+
lines.push(` ${c.pass ? "ok " : "FAIL"} ${c.name}${c.detail ? ` — ${c.detail}` : ""}`);
|
|
177
|
+
}
|
|
178
|
+
}
|
|
179
|
+
const packet = report.arms.find((arm) => arm.arm === "packet");
|
|
180
|
+
const baseline = report.arms.find((arm) => arm.arm === "baseline");
|
|
181
|
+
if (packet && baseline) {
|
|
182
|
+
lines.push("");
|
|
183
|
+
lines.push(`packet ${packet.passed}/${packet.total} vs baseline ${baseline.passed}/${baseline.total} — the delta is what the packet buys.`);
|
|
184
|
+
}
|
|
185
|
+
return lines.join("\n");
|
|
186
|
+
}
|
|
187
|
+
//# sourceMappingURL=bench-live.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"bench-live.js","sourceRoot":"","sources":["../src/bench-live.ts"],"names":[],"mappings":"AAAA,OAAO,EAAC,QAAQ,EAAC,MAAM,oBAAoB,CAAC;AAC5C,OAAO,EAAC,WAAW,EAAE,YAAY,EAAE,MAAM,EAAE,aAAa,EAAC,MAAM,SAAS,CAAC;AACzE,OAAO,EAAC,YAAY,EAAC,MAAM,oBAAoB,CAAC;AAChD,OAAO,EAAC,MAAM,EAAC,MAAM,SAAS,CAAC;AAC/B,OAAO,EAAC,IAAI,EAAC,MAAM,WAAW,CAAC;AAC/B,OAAO,EAAC,SAAS,EAAC,MAAM,WAAW,CAAC;AACpC,OAAO,EAAC,aAAa,EAAC,MAAM,cAAc,CAAC;AAG3C,OAAO,EAAC,kBAAkB,EAAC,MAAM,aAAa,CAAC;AAE/C;;;;;;;;;;;;;;;GAeG;AAEH,MAAM,aAAa,GAAG,SAAS,CAAC,QAAQ,CAAC,CAAC;AA0B1C,MAAM,UAAU,aAAa,CAAC,OAAe,EAAE,SAAS,GAAG,OAAO;IAC9D,OAAO,KAAK,EAAE,MAAM,EAAE,GAAG,EAAE,EAAE;QACzB,mEAAmE;QACnE,wBAAwB;QACxB,MAAM,KAAK,GAAG,aAAa,CAAC,SAAS,EAAE,CAAC,IAAI,EAAE,OAAO,CAAC,EAAE;YACpD,GAAG;YACH,OAAO,EAAE,SAAS;YAClB,SAAS,EAAE,EAAE,GAAG,IAAI,GAAG,IAAI;YAC3B,QAAQ,EAAE,MAAM;SACnB,CAAC,CAAC;QAEH,KAAK,CAAC,KAAK,CAAC,KAAK,EAAE,KAAK,CAAC,MAAM,CAAC,CAAC;QACjC,KAAK,CAAC,KAAK,CAAC,KAAK,EAAE,GAAG,EAAE,CAAC;QAEzB,IAAI,CAAC;YACD,MAAM,EAAC,MAAM,EAAE,MAAM,EAAC,GAAG,MAAM,KAAK,CAAC;YACrC,OAAO,GAAG,MAAM,KAAK,MAAM,EAAE,CAAC;QAClC,CAAC;QAAC,OAAO,KAAK,EAAE,CAAC;YACb,MAAM,CAAC,GAAG,KAA6D,CAAC;YACxE,OAAO,GAAG,CAAC,CAAC,MAAM,IAAI,EAAE,KAAK,CAAC,CAAC,MAAM,IAAI,EAAE,sBAAsB,CAAC,CAAC,OAAO,IAAI,QAAQ,GAAG,CAAC;QAC9F,CAAC;IACL,CAAC,CAAC;AACN,CAAC;AAED,gFAAgF;AAChF,SAAS,gBAAgB;IACrB,MAAM,GAAG,GAAG,WAAW,CAAC,IAAI,CAAC,MAAM,EAAE,EAAE,eAAe,CAAC,CAAC,CAAC;IACzD,YAAY,CAAC,KAAK,EAAE,CAAC,IAAI,EAAE,GAAG,EAAE,MAAM,EAAE,IAAI,CAAC,CAAC,CAAC;IAC/C,YAAY,CAAC,KAAK,EAAE,CAAC,IAAI,EAAE,GAAG,EAAE,QAAQ,EAAE,YAAY,EAAE,eAAe,CAAC,CAAC,CAAC;IAC1E,YAAY,CAAC,KAAK,EAAE,CAAC,IAAI,EAAE,GAAG,EAAE,QAAQ,EAAE,WAAW,EAAE,OAAO,CAAC,CAAC,CAAC;IAEjE,aAAa,CAAC,IAAI,CAAC,GAAG,EAAE,aAAa,CAAC,EAAE;QACpC,8DAA8D;QAC9D,mDAAmD;QACnD,EAAE;QACF,+DAA+D;QAC/D,iEAAiE;QACjE,EAAE;QACF,qCAAqC;QACrC,EAAE;KACL,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC,CAAC;IACd,aAAa,CAAC,IAAI,CAAC,GAAG,EAAE,YAAY,CAAC,EAAE,+DAA+D,CAAC,CAAC;IACxG,aAAa,CAAC,IAAI,CAAC,GAAG,EAAE,eAAe,CAAC,EAAE;QACtC,qDAAqD;QACrD,gFAAgF;QAChF,wFAAwF;QACxF,iCAAiC;KACpC,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC,CAAC;IACd,YAAY,CAAC,KAAK,EAAE,CAAC,IAAI,EAAE,GAAG,EAAE,KAAK,EAAE,GAAG,CAAC,CAAC,CAAC;IAC7C,YAAY,CAAC,KAAK,EAAE,CAAC,IAAI,EAAE,GAAG,EAAE,QAAQ,EAAE,IAAI,EAAE,IAAI,EAAE,SAAS,CAAC,CAAC,CAAC;IAElE,OAAO,GAAG,CAAC;AACf,CAAC;AAED,SAAS,aAAa;IAClB,IAAI,GAAG,GAAG,CAAC,CAAC;IACZ,MAAM,KAAK,GAAG,CAAC,IAAyB,EAAE,OAA0C,EAAE,EAAe,EAAE,CACnG,CAAC,EAAC,GAAG,EAAE,GAAG,EAAE,EAAE,IAAI,EAAE,GAAG,IAAI,EAAC,CAAC,CAAC;IAElC,OAAO;QACH,SAAS,EAAE,YAAY;QACvB,KAAK,EAAE,eAAe;QACtB,MAAM,EAAE;YACJ,KAAK,CAAC,cAAc,EAAE,EAAC,OAAO,EAAE,+IAA+I,EAAC,CAAC;YACjL,KAAK,CAAC,cAAc,EAAE,EAAC,OAAO,EAAE,+IAA+I,EAAC,CAAC;YACjL,KAAK,CAAC,aAAa,EAAE,EAAC,IAAI,EAAE,EAAC,IAAI,EAAE,MAAM,EAAE,MAAM,EAAE,aAAa,EAAE,MAAM,EAAE,GAAG,EAAC,EAAC,CAAC;YAChF,KAAK,CAAC,gBAAgB,EAAE,EAAC,IAAI,EAAE,EAAC,IAAI,EAAE,MAAM,EAAE,MAAM,EAAE,aAAa,EAAE,MAAM,EAAE,GAAG,EAAE,OAAO,EAAE,kCAAkC,EAAC,EAAC,CAAC;YAChI,KAAK,CAAC,aAAa,EAAE,EAAC,IAAI,EAAE,EAAC,IAAI,EAAE,MAAM,EAAE,MAAM,EAAE,oBAAoB,EAAE,MAAM,EAAE,GAAG,EAAC,EAAC,CAAC;YACvF,KAAK,CAAC,aAAa,EAAE,EAAC,IAAI,EAAE,EAAC,IAAI,EAAE,MAAM,EAAE,MAAM,EAAE,oBAAoB,EAAE,MAAM,EAAE,GAAG,EAAE,OAAO,EAAE,qCAAqC,EAAE,OAAO,EAAE,IAAI,EAAC,EAAC,CAAC;YACtJ,KAAK,CAAC,mBAAmB,EAAE,EAAC,OAAO,EAAE,mIAAmI,EAAC,CAAC;SAC7K;KACJ,CAAC;AACN,CAAC;AAED,KAAK,UAAU,aAAa,CAAC,GAAW;IACpC,MAAM,MAAM,GAAG,MAAM,aAAa,CAAC;QAC/B,MAAM,EAAE,aAAa,EAAE;QACvB,YAAY,EAAE,GAAG;QACjB,MAAM,EAAE,oBAAoB;QAC5B,UAAU,EAAE,IAAI;KACnB,CAAC,CAAC;IAEH,wEAAwE;IACxE,MAAM,CAAC,IAAI,CAAC,WAAW,CAAC,IAAI,CAAC,4CAA4C,CAAC,CAAC;IAC3E,MAAM,CAAC,SAAS,CAAC,SAAS,CAAC,MAAM,CAAC,IAAI,CAAC,EAAC,IAAI,EAAE,MAAM,EAAE,MAAM,EAAE,YAAY,EAAE,IAAI,EAAE,iBAAiB,EAAC,CAAC,CAAC;IAEtG,OAAO,MAAM,CAAC;AAClB,CAAC;AAED,MAAM,eAAe,GAAG;IACpB,wEAAwE;IACxE,wEAAwE;IACxE,sCAAsC;CACzC,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;AAEb,SAAS,QAAQ,CAAC,GAAW,EAAE,MAAc;IACzC,MAAM,QAAQ,GAAG,YAAY,CAAC,IAAI,CAAC,GAAG,EAAE,aAAa,CAAC,EAAE,MAAM,CAAC,CAAC;IAChE,MAAM,WAAW,GAAG,YAAY,CAC5B,KAAK,EAAE,CAAC,IAAI,EAAE,GAAG,EAAE,MAAM,EAAE,aAAa,EAAE,MAAM,EAAE,IAAI,EAAE,YAAY,CAAC,EACrE,EAAC,QAAQ,EAAE,MAAM,EAAC,CACrB,CAAC,IAAI,EAAE,CAAC;IAET,IAAI,UAAU,GAAG,KAAK,CAAC;IAEvB,IAAI,CAAC;QACD,UAAU,GAAG,YAAY,CAAC,MAAM,EAAE,CAAC,eAAe,CAAC,EAAE,EAAC,GAAG,EAAE,GAAG,EAAE,QAAQ,EAAE,MAAM,EAAC,CAAC;aAC7E,QAAQ,CAAC,iBAAiB,CAAC,CAAC;IACrC,CAAC;IAAC,MAAM,CAAC;QACL,UAAU,GAAG,KAAK,CAAC;IACvB,CAAC;IAED,MAAM,cAAc,GAAG,QAAQ,CAAC,QAAQ,CAAC,mDAAmD,CAAC,CAAC;IAE9F,OAAO;QACH,EAAC,IAAI,EAAE,8BAA8B,EAAE,IAAI,EAAE,4BAA4B,CAAC,IAAI,CAAC,MAAM,CAAC,EAAC;QACvF,EAAC,IAAI,EAAE,yDAAyD,EAAE,IAAI,EAAE,UAAU;YAC9E,GAAG,CAAC,UAAU,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,EAAC,MAAM,EAAE,6BAA6B,EAAC,CAAC,EAAC;QACnE,EAAC,IAAI,EAAE,2CAA2C,EAAE,IAAI,EAAE,WAAW,KAAK,EAAE;YACxE,GAAG,CAAC,WAAW,KAAK,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,EAAC,MAAM,EAAE,yBAAyB,EAAC,CAAC,EAAC;QACvE,EAAC,IAAI,EAAE,gDAAgD,EAAE,IAAI,EAAE,cAAc,EAAC;KACjF,CAAC;AACN,CAAC;AAQD,MAAM,CAAC,KAAK,UAAU,YAAY,CAAC,OAA4B;IAC3D,MAAM,IAAI,GAAoB,EAAE,CAAC;IACjC,MAAM,QAAQ,GAAkF;QAC5F;YACI,GAAG,EAAE,QAAQ;YACb,MAAM,EAAE,KAAK,EAAE,GAAG,EAAE,EAAE,CAAC,GAAG,kBAAkB,CAAC,MAAM,aAAa,CAAC,GAAG,CAAC,CAAC,0CAA0C;SACnH;QACD,GAAG,CAAC,OAAO,CAAC,QAAQ;YAChB,CAAC,CAAC,CAAC,EAAC,GAAG,EAAE,UAAmB,EAAE,MAAM,EAAE,KAAK,IAAI,EAAE,CAAC,eAAe,EAAC,CAAC;YACnE,CAAC,CAAC,EAAE,CAAC;KACZ,CAAC;IAEF,KAAK,MAAM,IAAI,IAAI,QAAQ,EAAE,CAAC;QAC1B,MAAM,GAAG,GAAG,gBAAgB,EAAE,CAAC;QAE/B,IAAI,CAAC;YACD,MAAM,MAAM,GAAG,MAAM,IAAI,CAAC,MAAM,CAAC,GAAG,CAAC,CAAC;YACtC,MAAM,OAAO,GAAG,IAAI,CAAC,GAAG,EAAE,CAAC;YAC3B,MAAM,MAAM,GAAG,MAAM,OAAO,CAAC,QAAQ,CAAC,MAAM,EAAE,GAAG,CAAC,CAAC;YACnD,MAAM,UAAU,GAAG,IAAI,CAAC,GAAG,EAAE,GAAG,OAAO,CAAC;YACxC,MAAM,MAAM,GAAG,QAAQ,CAAC,GAAG,EAAE,MAAM,CAAC,CAAC;YAErC,IAAI,CAAC,IAAI,CAAC;gBACN,GAAG,EAAE,IAAI,CAAC,GAAG;gBACb,MAAM;gBACN,MAAM,EAAE,MAAM,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,MAAM;gBAC3C,KAAK,EAAE,MAAM,CAAC,MAAM;gBACpB,MAAM,EAAE,MAAM,CAAC,KAAK,CAAC,CAAC,EAAE,IAAI,CAAC;gBAC7B,UAAU;aACb,CAAC,CAAC;QACP,CAAC;gBAAS,CAAC;YACP,MAAM,CAAC,GAAG,EAAE,EAAC,SAAS,EAAE,IAAI,EAAE,KAAK,EAAE,IAAI,EAAC,CAAC,CAAC;QAChD,CAAC;IACL,CAAC;IAED,OAAO;QACH,OAAO,EAAE,eAAe;QACxB,KAAK,EAAE,IAAI,IAAI,EAAE,CAAC,WAAW,EAAE;QAC/B,QAAQ,EAAE,OAAO,CAAC,aAAa;QAC/B,IAAI;KACP,CAAC;AACN,CAAC;AAED,MAAM,UAAU,qBAAqB,CAAC,MAAuB;IACzD,MAAM,KAAK,GAAa,EAAE,CAAC;IAC3B,KAAK,CAAC,IAAI,CAAC,yBAAyB,MAAM,CAAC,OAAO,gBAAgB,MAAM,CAAC,QAAQ,EAAE,CAAC,CAAC;IACrF,KAAK,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC;IAEf,KAAK,MAAM,GAAG,IAAI,MAAM,CAAC,IAAI,EAAE,CAAC;QAC5B,KAAK,CAAC,IAAI,CAAC,IAAI,GAAG,CAAC,GAAG,KAAK,GAAG,CAAC,MAAM,IAAI,GAAG,CAAC,KAAK,OAAO,CAAC,GAAG,CAAC,UAAU,GAAG,IAAI,CAAC,CAAC,OAAO,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC;QAEhG,KAAK,MAAM,CAAC,IAAI,GAAG,CAAC,MAAM,EAAE,CAAC;YACzB,KAAK,CAAC,IAAI,CAAC,OAAO,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,MAAM,IAAI,CAAC,CAAC,IAAI,GAAG,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,MAAM,CAAC,CAAC,MAAM,EAAE,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC;QAC9F,CAAC;IACL,CAAC;IAED,MAAM,MAAM,GAAG,MAAM,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC,GAAG,EAAE,EAAE,CAAC,GAAG,CAAC,GAAG,KAAK,QAAQ,CAAC,CAAC;IAC/D,MAAM,QAAQ,GAAG,MAAM,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC,GAAG,EAAE,EAAE,CAAC,GAAG,CAAC,GAAG,KAAK,UAAU,CAAC,CAAC;IAEnE,IAAI,MAAM,IAAI,QAAQ,EAAE,CAAC;QACrB,KAAK,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC;QACf,KAAK,CAAC,IAAI,CAAC,UAAU,MAAM,CAAC,MAAM,IAAI,MAAM,CAAC,KAAK,gBAAgB,QAAQ,CAAC,MAAM,IAAI,QAAQ,CAAC,KAAK,uCAAuC,CAAC,CAAC;IAChJ,CAAC;IAED,OAAO,KAAK,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;AAC5B,CAAC"}
|
package/dist/bench.d.ts
ADDED
|
@@ -0,0 +1,33 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Continuity Bench v0 (spec §10) — a reproducible, offline scorecard of
|
|
3
|
+
* packet FIDELITY: does a compiled packet preserve what the receiving agent
|
|
4
|
+
* needs (objective, live failure, in-flight state, constraints, chain), and
|
|
5
|
+
* keep out what it must (secrets)?
|
|
6
|
+
*
|
|
7
|
+
* v0 scores the compiler mechanically against fixed scenarios; it does not
|
|
8
|
+
* yet run a live receiving agent (that is the v1 bench, which needs model
|
|
9
|
+
* access). The point is the same as the spec's: claims you can re-run —
|
|
10
|
+
* `memento bench` either prints a green table or exits 1.
|
|
11
|
+
*/
|
|
12
|
+
export interface BenchCheck {
|
|
13
|
+
name: string;
|
|
14
|
+
pass: boolean;
|
|
15
|
+
detail?: string;
|
|
16
|
+
}
|
|
17
|
+
export interface BenchScenarioResult {
|
|
18
|
+
id: string;
|
|
19
|
+
title: string;
|
|
20
|
+
checks: BenchCheck[];
|
|
21
|
+
passed: number;
|
|
22
|
+
total: number;
|
|
23
|
+
}
|
|
24
|
+
export interface BenchReport {
|
|
25
|
+
version: string;
|
|
26
|
+
ranAt: string;
|
|
27
|
+
scenarios: BenchScenarioResult[];
|
|
28
|
+
passed: number;
|
|
29
|
+
total: number;
|
|
30
|
+
allPassed: boolean;
|
|
31
|
+
}
|
|
32
|
+
export declare function runContinuityBench(): Promise<BenchReport>;
|
|
33
|
+
export declare function formatBenchReport(report: BenchReport): string;
|
package/dist/bench.js
ADDED
|
@@ -0,0 +1,213 @@
|
|
|
1
|
+
import { execFileSync } from "node:child_process";
|
|
2
|
+
import { mkdtempSync, rmSync, writeFileSync } from "node:fs";
|
|
3
|
+
import { tmpdir } from "node:os";
|
|
4
|
+
import { join } from "node:path";
|
|
5
|
+
import { writePacketArtifacts, chainFromPrior } from "./artifacts.js";
|
|
6
|
+
import { compilePacket } from "./compile.js";
|
|
7
|
+
import { verifySeal } from "./packet.js";
|
|
8
|
+
import { renderMarkdown } from "./render.js";
|
|
9
|
+
let eventSeq = 0;
|
|
10
|
+
function event(type, rest = {}) {
|
|
11
|
+
return { seq: eventSeq++, type, ...rest };
|
|
12
|
+
}
|
|
13
|
+
function ledger(events) {
|
|
14
|
+
return { sessionId: "bench", agent: "bench-fixture", events };
|
|
15
|
+
}
|
|
16
|
+
function check(name, pass, detail) {
|
|
17
|
+
return { name, pass, ...(detail && !pass ? { detail } : {}) };
|
|
18
|
+
}
|
|
19
|
+
function baseChecks(packet, markdown) {
|
|
20
|
+
return [
|
|
21
|
+
check("packet seals and verifies", verifySeal(packet)),
|
|
22
|
+
check("markdown twin renders all load-bearing sections", ["## Objective", "## Workspace", "## Tool state", "## Next steps"]
|
|
23
|
+
.every((section) => markdown.includes(section))),
|
|
24
|
+
];
|
|
25
|
+
}
|
|
26
|
+
const SCENARIOS = [
|
|
27
|
+
{
|
|
28
|
+
id: "mid-task-failure",
|
|
29
|
+
title: "Mid-refactor with a failing test run",
|
|
30
|
+
async run(dir) {
|
|
31
|
+
const packet = await compilePacket({
|
|
32
|
+
workspaceDir: dir,
|
|
33
|
+
reason: "context_exhaustion",
|
|
34
|
+
ledger: ledger([
|
|
35
|
+
event("task.started", { content: "Migrate the auth module to async/await without changing the public API" }),
|
|
36
|
+
event("message.user", { content: "Migrate the auth module to async/await without changing the public API" }),
|
|
37
|
+
event("tool.called", { tool: { name: "edit", target: "src/auth/session.ts", callId: "c1" } }),
|
|
38
|
+
event("tool.completed", { tool: { name: "edit", target: "src/auth/session.ts", callId: "c1", outcome: "converted refresh()" } }),
|
|
39
|
+
event("tool.called", { tool: { name: "bash", target: "pnpm test", callId: "c2" } }),
|
|
40
|
+
event("tool.failed", { tool: { name: "bash", target: "pnpm test", callId: "c2", outcome: "2 failures in session.test.ts", isError: true } }),
|
|
41
|
+
event("message.assistant", { content: "refresh() converted; failures are expected mid-conversion." }),
|
|
42
|
+
]),
|
|
43
|
+
});
|
|
44
|
+
const markdown = renderMarkdown(packet);
|
|
45
|
+
return [
|
|
46
|
+
...baseChecks(packet, markdown),
|
|
47
|
+
check("objective survives verbatim from the task statement", packet.task.objective.includes("async/await without changing the public API")),
|
|
48
|
+
check("the live failure is surfaced in next steps", packet.next.some((step) => step.includes("pnpm test") && step.toLowerCase().includes("failure"))),
|
|
49
|
+
check("failed tool outcome is marked FAILED", packet.toolState.completed.some((entry) => entry.outcome.startsWith("FAILED:"))),
|
|
50
|
+
check("last command run is captured", packet.workspace.lastRun?.cmd === "pnpm test"),
|
|
51
|
+
];
|
|
52
|
+
},
|
|
53
|
+
},
|
|
54
|
+
{
|
|
55
|
+
id: "in-flight-call",
|
|
56
|
+
title: "Interrupted with an edit in flight",
|
|
57
|
+
async run(dir) {
|
|
58
|
+
const packet = await compilePacket({
|
|
59
|
+
workspaceDir: dir,
|
|
60
|
+
reason: "context_exhaustion",
|
|
61
|
+
ledger: ledger([
|
|
62
|
+
event("task.started", { content: "Rename the config loader" }),
|
|
63
|
+
event("message.user", { content: "Rename the config loader" }),
|
|
64
|
+
event("tool.called", { tool: { name: "edit", target: "src/config.ts", callId: "x1" } }),
|
|
65
|
+
// no result for x1 — the agent died mid-call
|
|
66
|
+
]),
|
|
67
|
+
});
|
|
68
|
+
const markdown = renderMarkdown(packet);
|
|
69
|
+
return [
|
|
70
|
+
...baseChecks(packet, markdown),
|
|
71
|
+
check("the dangling call is recorded as in-flight", packet.toolState.inFlight.length === 1
|
|
72
|
+
&& packet.toolState.inFlight[0]?.target === "src/config.ts"),
|
|
73
|
+
check("in-flight disposition says NOT applied / re-derive", packet.toolState.inFlight[0]?.disposition.includes("NOT applied") ?? false),
|
|
74
|
+
check("a warning tells the receiver to re-derive", packet.warnings.some((warning) => warning.includes("re-derive"))),
|
|
75
|
+
check("markdown shows the in-flight block", markdown.includes("In-flight at capture")),
|
|
76
|
+
];
|
|
77
|
+
},
|
|
78
|
+
},
|
|
79
|
+
{
|
|
80
|
+
id: "secret-redaction",
|
|
81
|
+
title: "Session outputs contain credentials",
|
|
82
|
+
async run(dir) {
|
|
83
|
+
const packet = await compilePacket({
|
|
84
|
+
workspaceDir: dir,
|
|
85
|
+
reason: "session_end",
|
|
86
|
+
ledger: ledger([
|
|
87
|
+
event("task.started", { content: "Debug the deploy script" }),
|
|
88
|
+
event("message.user", { content: "Debug the deploy script" }),
|
|
89
|
+
event("tool.called", { tool: { name: "bash", target: "env", callId: "s1" } }),
|
|
90
|
+
event("tool.completed", { tool: { name: "bash", target: "env", callId: "s1",
|
|
91
|
+
outcome: "AWS_KEY=AKIAIOSFODNN7EXAMPLE DEPLOY_TOKEN_SECRET=hunter2hunter2" } }),
|
|
92
|
+
event("message.assistant", { content: "Found the env issue." }),
|
|
93
|
+
]),
|
|
94
|
+
});
|
|
95
|
+
const sealed = JSON.stringify(packet);
|
|
96
|
+
return [
|
|
97
|
+
...baseChecks(packet, renderMarkdown(packet)),
|
|
98
|
+
check("no credential survives into the sealed packet", !sealed.includes("AKIAIOSFODNN7EXAMPLE") && !sealed.includes("hunter2hunter2")),
|
|
99
|
+
check("redaction is declared with counts and rules", packet.redaction.applied && packet.redaction.count >= 2
|
|
100
|
+
&& packet.redaction.rules.length > 0),
|
|
101
|
+
];
|
|
102
|
+
},
|
|
103
|
+
},
|
|
104
|
+
{
|
|
105
|
+
id: "compaction-survivor",
|
|
106
|
+
title: "Heavily compacted session still hands off",
|
|
107
|
+
async run(dir) {
|
|
108
|
+
const packet = await compilePacket({
|
|
109
|
+
workspaceDir: dir,
|
|
110
|
+
reason: "context_exhaustion",
|
|
111
|
+
ledger: ledger([
|
|
112
|
+
event("task.started", { content: "Build the importer pipeline" }),
|
|
113
|
+
event("message.user", { content: "Build the importer pipeline" }),
|
|
114
|
+
event("compaction", { content: "Summary of 40 earlier steps: importer scaffolded." }),
|
|
115
|
+
event("compaction", { content: "Summary of 35 earlier steps: parser done, writer pending." }),
|
|
116
|
+
event("message.assistant", { content: "Writer module is next." }),
|
|
117
|
+
]),
|
|
118
|
+
});
|
|
119
|
+
return [
|
|
120
|
+
...baseChecks(packet, renderMarkdown(packet)),
|
|
121
|
+
check("objective still comes from the original task statement", packet.task.objective.includes("importer pipeline")),
|
|
122
|
+
check("the receiver is warned that early detail lives only in the source", packet.warnings.some((warning) => warning.toLowerCase().includes("compacted"))),
|
|
123
|
+
];
|
|
124
|
+
},
|
|
125
|
+
},
|
|
126
|
+
{
|
|
127
|
+
id: "chained-handoff",
|
|
128
|
+
title: "Two successive handoffs form a verifiable chain",
|
|
129
|
+
async run(dir) {
|
|
130
|
+
const make = (note) => ledger([
|
|
131
|
+
event("task.started", { content: "Ship the search feature" }),
|
|
132
|
+
event("message.user", { content: "Ship the search feature" }),
|
|
133
|
+
event("message.assistant", { content: note }),
|
|
134
|
+
]);
|
|
135
|
+
const first = await compilePacket({ workspaceDir: dir, reason: "operator_switch", ledger: make("indexing done") });
|
|
136
|
+
writePacketArtifacts(dir, first);
|
|
137
|
+
const chain = chainFromPrior(dir);
|
|
138
|
+
const second = await compilePacket({
|
|
139
|
+
workspaceDir: dir, reason: "team_handoff", ledger: make("ranking done"),
|
|
140
|
+
...(chain ? { taskId: chain.taskId, parent: chain.parent, seq: chain.seq } : {}),
|
|
141
|
+
});
|
|
142
|
+
writePacketArtifacts(dir, second);
|
|
143
|
+
return [
|
|
144
|
+
...baseChecks(second, renderMarkdown(second)),
|
|
145
|
+
check("both packets seal independently", verifySeal(first) && verifySeal(second)),
|
|
146
|
+
check("task identity persists across the handoff", second.packet.taskId === first.packet.taskId),
|
|
147
|
+
check("parent points at the prior packet and seq increments", second.packet.parent === first.packet.id && second.packet.seq === first.packet.seq + 1),
|
|
148
|
+
];
|
|
149
|
+
},
|
|
150
|
+
},
|
|
151
|
+
];
|
|
152
|
+
export async function runContinuityBench() {
|
|
153
|
+
const scenarios = [];
|
|
154
|
+
for (const scenario of SCENARIOS) {
|
|
155
|
+
const dir = mkdtempSync(join(tmpdir(), `memento-bench-${scenario.id}-`));
|
|
156
|
+
try {
|
|
157
|
+
execFileSync("git", ["-C", dir, "init", "-q"]);
|
|
158
|
+
execFileSync("git", ["-C", dir, "config", "user.email", "bench@memento"]);
|
|
159
|
+
execFileSync("git", ["-C", dir, "config", "user.name", "bench"]);
|
|
160
|
+
writeFileSync(join(dir, "src.txt"), "fixture\n");
|
|
161
|
+
execFileSync("git", ["-C", dir, "add", "."]);
|
|
162
|
+
execFileSync("git", ["-C", dir, "commit", "-q", "-m", "fixture"]);
|
|
163
|
+
// Dirty file so workspace capture has something real to record.
|
|
164
|
+
writeFileSync(join(dir, "src.txt"), "fixture-modified\n");
|
|
165
|
+
const checks = await scenario.run(dir);
|
|
166
|
+
scenarios.push({
|
|
167
|
+
id: scenario.id,
|
|
168
|
+
title: scenario.title,
|
|
169
|
+
checks,
|
|
170
|
+
passed: checks.filter((c) => c.pass).length,
|
|
171
|
+
total: checks.length,
|
|
172
|
+
});
|
|
173
|
+
}
|
|
174
|
+
catch (error) {
|
|
175
|
+
scenarios.push({
|
|
176
|
+
id: scenario.id,
|
|
177
|
+
title: scenario.title,
|
|
178
|
+
checks: [check("scenario completed without crashing", false, error instanceof Error ? error.message : String(error))],
|
|
179
|
+
passed: 0,
|
|
180
|
+
total: 1,
|
|
181
|
+
});
|
|
182
|
+
}
|
|
183
|
+
finally {
|
|
184
|
+
rmSync(dir, { recursive: true, force: true });
|
|
185
|
+
}
|
|
186
|
+
}
|
|
187
|
+
const passed = scenarios.reduce((sum, s) => sum + s.passed, 0);
|
|
188
|
+
const total = scenarios.reduce((sum, s) => sum + s.total, 0);
|
|
189
|
+
return {
|
|
190
|
+
version: "bench-v0",
|
|
191
|
+
ranAt: new Date().toISOString(),
|
|
192
|
+
scenarios,
|
|
193
|
+
passed,
|
|
194
|
+
total,
|
|
195
|
+
allPassed: passed === total,
|
|
196
|
+
};
|
|
197
|
+
}
|
|
198
|
+
export function formatBenchReport(report) {
|
|
199
|
+
const lines = [];
|
|
200
|
+
lines.push(`Continuity Bench ${report.version} — ${report.ranAt}`);
|
|
201
|
+
lines.push("");
|
|
202
|
+
for (const scenario of report.scenarios) {
|
|
203
|
+
const mark = scenario.passed === scenario.total ? "✓" : "✗";
|
|
204
|
+
lines.push(`${mark} ${scenario.id} — ${scenario.title} (${scenario.passed}/${scenario.total})`);
|
|
205
|
+
for (const c of scenario.checks) {
|
|
206
|
+
lines.push(` ${c.pass ? "ok " : "FAIL"} ${c.name}${c.detail ? ` — ${c.detail}` : ""}`);
|
|
207
|
+
}
|
|
208
|
+
}
|
|
209
|
+
lines.push("");
|
|
210
|
+
lines.push(`${report.passed}/${report.total} checks passed${report.allPassed ? "" : " — BENCH FAILED"}`);
|
|
211
|
+
return lines.join("\n");
|
|
212
|
+
}
|
|
213
|
+
//# sourceMappingURL=bench.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"bench.js","sourceRoot":"","sources":["../src/bench.ts"],"names":[],"mappings":"AAAA,OAAO,EAAC,YAAY,EAAC,MAAM,oBAAoB,CAAC;AAChD,OAAO,EAAC,WAAW,EAAE,MAAM,EAAE,aAAa,EAAC,MAAM,SAAS,CAAC;AAC3D,OAAO,EAAC,MAAM,EAAC,MAAM,SAAS,CAAC;AAC/B,OAAO,EAAC,IAAI,EAAC,MAAM,WAAW,CAAC;AAC/B,OAAO,EAAC,oBAAoB,EAAE,cAAc,EAAC,MAAM,gBAAgB,CAAC;AACpE,OAAO,EAAC,aAAa,EAAC,MAAM,cAAc,CAAC;AAE3C,OAAO,EAAC,UAAU,EAAc,MAAM,aAAa,CAAC;AACpD,OAAO,EAAC,cAAc,EAAC,MAAM,aAAa,CAAC;AA2C3C,IAAI,QAAQ,GAAG,CAAC,CAAC;AAEjB,SAAS,KAAK,CAAC,IAAyB,EAAE,OAA0C,EAAE;IAClF,OAAO,EAAC,GAAG,EAAE,QAAQ,EAAE,EAAE,IAAI,EAAE,GAAG,IAAI,EAAC,CAAC;AAC5C,CAAC;AAED,SAAS,MAAM,CAAC,MAAqB;IACjC,OAAO,EAAC,SAAS,EAAE,OAAO,EAAE,KAAK,EAAE,eAAe,EAAE,MAAM,EAAC,CAAC;AAChE,CAAC;AAED,SAAS,KAAK,CAAC,IAAY,EAAE,IAAa,EAAE,MAAe;IACvD,OAAO,EAAC,IAAI,EAAE,IAAI,EAAE,GAAG,CAAC,MAAM,IAAI,CAAC,IAAI,CAAC,CAAC,CAAC,EAAC,MAAM,EAAC,CAAC,CAAC,CAAC,EAAE,CAAC,EAAC,CAAC;AAC9D,CAAC;AAED,SAAS,UAAU,CAAC,MAAc,EAAE,QAAgB;IAChD,OAAO;QACH,KAAK,CAAC,2BAA2B,EAAE,UAAU,CAAC,MAAM,CAAC,CAAC;QACtD,KAAK,CACD,iDAAiD,EACjD,CAAC,cAAc,EAAE,cAAc,EAAE,eAAe,EAAE,eAAe,CAAC;aAC7D,KAAK,CAAC,CAAC,OAAO,EAAE,EAAE,CAAC,QAAQ,CAAC,QAAQ,CAAC,OAAO,CAAC,CAAC,CACtD;KACJ,CAAC;AACN,CAAC;AAED,MAAM,SAAS,GAAe;IAC1B;QACI,EAAE,EAAE,kBAAkB;QACtB,KAAK,EAAE,sCAAsC;QAC7C,KAAK,CAAC,GAAG,CAAC,GAAG;YACT,MAAM,MAAM,GAAG,MAAM,aAAa,CAAC;gBAC/B,YAAY,EAAE,GAAG;gBACjB,MAAM,EAAE,oBAAoB;gBAC5B,MAAM,EAAE,MAAM,CAAC;oBACX,KAAK,CAAC,cAAc,EAAE,EAAC,OAAO,EAAE,wEAAwE,EAAC,CAAC;oBAC1G,KAAK,CAAC,cAAc,EAAE,EAAC,OAAO,EAAE,wEAAwE,EAAC,CAAC;oBAC1G,KAAK,CAAC,aAAa,EAAE,EAAC,IAAI,EAAE,EAAC,IAAI,EAAE,MAAM,EAAE,MAAM,EAAE,qBAAqB,EAAE,MAAM,EAAE,IAAI,EAAC,EAAC,CAAC;oBACzF,KAAK,CAAC,gBAAgB,EAAE,EAAC,IAAI,EAAE,EAAC,IAAI,EAAE,MAAM,EAAE,MAAM,EAAE,qBAAqB,EAAE,MAAM,EAAE,IAAI,EAAE,OAAO,EAAE,qBAAqB,EAAC,EAAC,CAAC;oBAC5H,KAAK,CAAC,aAAa,EAAE,EAAC,IAAI,EAAE,EAAC,IAAI,EAAE,MAAM,EAAE,MAAM,EAAE,WAAW,EAAE,MAAM,EAAE,IAAI,EAAC,EAAC,CAAC;oBAC/E,KAAK,CAAC,aAAa,EAAE,EAAC,IAAI,EAAE,EAAC,IAAI,EAAE,MAAM,EAAE,MAAM,EAAE,WAAW,EAAE,MAAM,EAAE,IAAI,EAAE,OAAO,EAAE,+BAA+B,EAAE,OAAO,EAAE,IAAI,EAAC,EAAC,CAAC;oBACxI,KAAK,CAAC,mBAAmB,EAAE,EAAC,OAAO,EAAE,4DAA4D,EAAC,CAAC;iBACtG,CAAC;aACL,CAAC,CAAC;YACH,MAAM,QAAQ,GAAG,cAAc,CAAC,MAAM,CAAC,CAAC;YAExC,OAAO;gBACH,GAAG,UAAU,CAAC,MAAM,EAAE,QAAQ,CAAC;gBAC/B,KAAK,CAAC,qDAAqD,EACvD,MAAM,CAAC,IAAI,CAAC,SAAS,CAAC,QAAQ,CAAC,6CAA6C,CAAC,CAAC;gBAClF,KAAK,CAAC,4CAA4C,EAC9C,MAAM,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC,IAAI,EAAE,EAAE,CAAC,IAAI,CAAC,QAAQ,CAAC,WAAW,CAAC,IAAI,IAAI,CAAC,WAAW,EAAE,CAAC,QAAQ,CAAC,SAAS,CAAC,CAAC,CAAC;gBACrG,KAAK,CAAC,sCAAsC,EACxC,MAAM,CAAC,SAAS,CAAC,SAAS,CAAC,IAAI,CAAC,CAAC,KAAK,EAAE,EAAE,CAAC,KAAK,CAAC,OAAO,CAAC,UAAU,CAAC,SAAS,CAAC,CAAC,CAAC;gBACpF,KAAK,CAAC,8BAA8B,EAChC,MAAM,CAAC,SAAS,CAAC,OAAO,EAAE,GAAG,KAAK,WAAW,CAAC;aACrD,CAAC;QACN,CAAC;KACJ;IACD;QACI,EAAE,EAAE,gBAAgB;QACpB,KAAK,EAAE,oCAAoC;QAC3C,KAAK,CAAC,GAAG,CAAC,GAAG;YACT,MAAM,MAAM,GAAG,MAAM,aAAa,CAAC;gBAC/B,YAAY,EAAE,GAAG;gBACjB,MAAM,EAAE,oBAAoB;gBAC5B,MAAM,EAAE,MAAM,CAAC;oBACX,KAAK,CAAC,cAAc,EAAE,EAAC,OAAO,EAAE,0BAA0B,EAAC,CAAC;oBAC5D,KAAK,CAAC,cAAc,EAAE,EAAC,OAAO,EAAE,0BAA0B,EAAC,CAAC;oBAC5D,KAAK,CAAC,aAAa,EAAE,EAAC,IAAI,EAAE,EAAC,IAAI,EAAE,MAAM,EAAE,MAAM,EAAE,eAAe,EAAE,MAAM,EAAE,IAAI,EAAC,EAAC,CAAC;oBACnF,6CAA6C;iBAChD,CAAC;aACL,CAAC,CAAC;YACH,MAAM,QAAQ,GAAG,cAAc,CAAC,MAAM,CAAC,CAAC;YAExC,OAAO;gBACH,GAAG,UAAU,CAAC,MAAM,EAAE,QAAQ,CAAC;gBAC/B,KAAK,CAAC,4CAA4C,EAC9C,MAAM,CAAC,SAAS,CAAC,QAAQ,CAAC,MAAM,KAAK,CAAC;uBAC/B,MAAM,CAAC,SAAS,CAAC,QAAQ,CAAC,CAAC,CAAC,EAAE,MAAM,KAAK,eAAe,CAAC;gBACpE,KAAK,CAAC,oDAAoD,EACtD,MAAM,CAAC,SAAS,CAAC,QAAQ,CAAC,CAAC,CAAC,EAAE,WAAW,CAAC,QAAQ,CAAC,aAAa,CAAC,IAAI,KAAK,CAAC;gBAC/E,KAAK,CAAC,2CAA2C,EAC7C,MAAM,CAAC,QAAQ,CAAC,IAAI,CAAC,CAAC,OAAO,EAAE,EAAE,CAAC,OAAO,CAAC,QAAQ,CAAC,WAAW,CAAC,CAAC,CAAC;gBACrE,KAAK,CAAC,oCAAoC,EACtC,QAAQ,CAAC,QAAQ,CAAC,sBAAsB,CAAC,CAAC;aACjD,CAAC;QACN,CAAC;KACJ;IACD;QACI,EAAE,EAAE,kBAAkB;QACtB,KAAK,EAAE,qCAAqC;QAC5C,KAAK,CAAC,GAAG,CAAC,GAAG;YACT,MAAM,MAAM,GAAG,MAAM,aAAa,CAAC;gBAC/B,YAAY,EAAE,GAAG;gBACjB,MAAM,EAAE,aAAa;gBACrB,MAAM,EAAE,MAAM,CAAC;oBACX,KAAK,CAAC,cAAc,EAAE,EAAC,OAAO,EAAE,yBAAyB,EAAC,CAAC;oBAC3D,KAAK,CAAC,cAAc,EAAE,EAAC,OAAO,EAAE,yBAAyB,EAAC,CAAC;oBAC3D,KAAK,CAAC,aAAa,EAAE,EAAC,IAAI,EAAE,EAAC,IAAI,EAAE,MAAM,EAAE,MAAM,EAAE,KAAK,EAAE,MAAM,EAAE,IAAI,EAAC,EAAC,CAAC;oBACzE,KAAK,CAAC,gBAAgB,EAAE,EAAC,IAAI,EAAE,EAAC,IAAI,EAAE,MAAM,EAAE,MAAM,EAAE,KAAK,EAAE,MAAM,EAAE,IAAI;4BACrE,OAAO,EAAE,iEAAiE,EAAC,EAAC,CAAC;oBACjF,KAAK,CAAC,mBAAmB,EAAE,EAAC,OAAO,EAAE,sBAAsB,EAAC,CAAC;iBAChE,CAAC;aACL,CAAC,CAAC;YACH,MAAM,MAAM,GAAG,IAAI,CAAC,SAAS,CAAC,MAAM,CAAC,CAAC;YAEtC,OAAO;gBACH,GAAG,UAAU,CAAC,MAAM,EAAE,cAAc,CAAC,MAAM,CAAC,CAAC;gBAC7C,KAAK,CAAC,+CAA+C,EACjD,CAAC,MAAM,CAAC,QAAQ,CAAC,sBAAsB,CAAC,IAAI,CAAC,MAAM,CAAC,QAAQ,CAAC,gBAAgB,CAAC,CAAC;gBACnF,KAAK,CAAC,6CAA6C,EAC/C,MAAM,CAAC,SAAS,CAAC,OAAO,IAAI,MAAM,CAAC,SAAS,CAAC,KAAK,IAAI,CAAC;uBAChD,MAAM,CAAC,SAAS,CAAC,KAAK,CAAC,MAAM,GAAG,CAAC,CAAC;aAChD,CAAC;QACN,CAAC;KACJ;IACD;QACI,EAAE,EAAE,qBAAqB;QACzB,KAAK,EAAE,2CAA2C;QAClD,KAAK,CAAC,GAAG,CAAC,GAAG;YACT,MAAM,MAAM,GAAG,MAAM,aAAa,CAAC;gBAC/B,YAAY,EAAE,GAAG;gBACjB,MAAM,EAAE,oBAAoB;gBAC5B,MAAM,EAAE,MAAM,CAAC;oBACX,KAAK,CAAC,cAAc,EAAE,EAAC,OAAO,EAAE,6BAA6B,EAAC,CAAC;oBAC/D,KAAK,CAAC,cAAc,EAAE,EAAC,OAAO,EAAE,6BAA6B,EAAC,CAAC;oBAC/D,KAAK,CAAC,YAAY,EAAE,EAAC,OAAO,EAAE,mDAAmD,EAAC,CAAC;oBACnF,KAAK,CAAC,YAAY,EAAE,EAAC,OAAO,EAAE,2DAA2D,EAAC,CAAC;oBAC3F,KAAK,CAAC,mBAAmB,EAAE,EAAC,OAAO,EAAE,wBAAwB,EAAC,CAAC;iBAClE,CAAC;aACL,CAAC,CAAC;YAEH,OAAO;gBACH,GAAG,UAAU,CAAC,MAAM,EAAE,cAAc,CAAC,MAAM,CAAC,CAAC;gBAC7C,KAAK,CAAC,wDAAwD,EAC1D,MAAM,CAAC,IAAI,CAAC,SAAS,CAAC,QAAQ,CAAC,mBAAmB,CAAC,CAAC;gBACxD,KAAK,CAAC,mEAAmE,EACrE,MAAM,CAAC,QAAQ,CAAC,IAAI,CAAC,CAAC,OAAO,EAAE,EAAE,CAAC,OAAO,CAAC,WAAW,EAAE,CAAC,QAAQ,CAAC,WAAW,CAAC,CAAC,CAAC;aACtF,CAAC;QACN,CAAC;KACJ;IACD;QACI,EAAE,EAAE,iBAAiB;QACrB,KAAK,EAAE,iDAAiD;QACxD,KAAK,CAAC,GAAG,CAAC,GAAG;YACT,MAAM,IAAI,GAAG,CAAC,IAAY,EAAE,EAAE,CAAC,MAAM,CAAC;gBAClC,KAAK,CAAC,cAAc,EAAE,EAAC,OAAO,EAAE,yBAAyB,EAAC,CAAC;gBAC3D,KAAK,CAAC,cAAc,EAAE,EAAC,OAAO,EAAE,yBAAyB,EAAC,CAAC;gBAC3D,KAAK,CAAC,mBAAmB,EAAE,EAAC,OAAO,EAAE,IAAI,EAAC,CAAC;aAC9C,CAAC,CAAC;YAEH,MAAM,KAAK,GAAG,MAAM,aAAa,CAAC,EAAC,YAAY,EAAE,GAAG,EAAE,MAAM,EAAE,iBAAiB,EAAE,MAAM,EAAE,IAAI,CAAC,eAAe,CAAC,EAAC,CAAC,CAAC;YACjH,oBAAoB,CAAC,GAAG,EAAE,KAAK,CAAC,CAAC;YACjC,MAAM,KAAK,GAAG,cAAc,CAAC,GAAG,CAAC,CAAC;YAClC,MAAM,MAAM,GAAG,MAAM,aAAa,CAAC;gBAC/B,YAAY,EAAE,GAAG,EAAE,MAAM,EAAE,cAAc,EAAE,MAAM,EAAE,IAAI,CAAC,cAAc,CAAC;gBACvE,GAAG,CAAC,KAAK,CAAC,CAAC,CAAC,EAAC,MAAM,EAAE,KAAK,CAAC,MAAM,EAAE,MAAM,EAAE,KAAK,CAAC,MAAM,EAAE,GAAG,EAAE,KAAK,CAAC,GAAG,EAAC,CAAC,CAAC,CAAC,EAAE,CAAC;aACjF,CAAC,CAAC;YACH,oBAAoB,CAAC,GAAG,EAAE,MAAM,CAAC,CAAC;YAElC,OAAO;gBACH,GAAG,UAAU,CAAC,MAAM,EAAE,cAAc,CAAC,MAAM,CAAC,CAAC;gBAC7C,KAAK,CAAC,iCAAiC,EAAE,UAAU,CAAC,KAAK,CAAC,IAAI,UAAU,CAAC,MAAM,CAAC,CAAC;gBACjF,KAAK,CAAC,2CAA2C,EAC7C,MAAM,CAAC,MAAM,CAAC,MAAM,KAAK,KAAK,CAAC,MAAM,CAAC,MAAM,CAAC;gBACjD,KAAK,CAAC,sDAAsD,EACxD,MAAM,CAAC,MAAM,CAAC,MAAM,KAAK,KAAK,CAAC,MAAM,CAAC,EAAE,IAAI,MAAM,CAAC,MAAM,CAAC,GAAG,KAAK,KAAK,CAAC,MAAM,CAAC,GAAG,GAAG,CAAC,CAAC;aAC9F,CAAC;QACN,CAAC;KACJ;CACJ,CAAC;AAEF,MAAM,CAAC,KAAK,UAAU,kBAAkB;IACpC,MAAM,SAAS,GAA0B,EAAE,CAAC;IAE5C,KAAK,MAAM,QAAQ,IAAI,SAAS,EAAE,CAAC;QAC/B,MAAM,GAAG,GAAG,WAAW,CAAC,IAAI,CAAC,MAAM,EAAE,EAAE,iBAAiB,QAAQ,CAAC,EAAE,GAAG,CAAC,CAAC,CAAC;QAEzE,IAAI,CAAC;YACD,YAAY,CAAC,KAAK,EAAE,CAAC,IAAI,EAAE,GAAG,EAAE,MAAM,EAAE,IAAI,CAAC,CAAC,CAAC;YAC/C,YAAY,CAAC,KAAK,EAAE,CAAC,IAAI,EAAE,GAAG,EAAE,QAAQ,EAAE,YAAY,EAAE,eAAe,CAAC,CAAC,CAAC;YAC1E,YAAY,CAAC,KAAK,EAAE,CAAC,IAAI,EAAE,GAAG,EAAE,QAAQ,EAAE,WAAW,EAAE,OAAO,CAAC,CAAC,CAAC;YACjE,aAAa,CAAC,IAAI,CAAC,GAAG,EAAE,SAAS,CAAC,EAAE,WAAW,CAAC,CAAC;YACjD,YAAY,CAAC,KAAK,EAAE,CAAC,IAAI,EAAE,GAAG,EAAE,KAAK,EAAE,GAAG,CAAC,CAAC,CAAC;YAC7C,YAAY,CAAC,KAAK,EAAE,CAAC,IAAI,EAAE,GAAG,EAAE,QAAQ,EAAE,IAAI,EAAE,IAAI,EAAE,SAAS,CAAC,CAAC,CAAC;YAClE,gEAAgE;YAChE,aAAa,CAAC,IAAI,CAAC,GAAG,EAAE,SAAS,CAAC,EAAE,oBAAoB,CAAC,CAAC;YAE1D,MAAM,MAAM,GAAG,MAAM,QAAQ,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC;YACvC,SAAS,CAAC,IAAI,CAAC;gBACX,EAAE,EAAE,QAAQ,CAAC,EAAE;gBACf,KAAK,EAAE,QAAQ,CAAC,KAAK;gBACrB,MAAM;gBACN,MAAM,EAAE,MAAM,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,MAAM;gBAC3C,KAAK,EAAE,MAAM,CAAC,MAAM;aACvB,CAAC,CAAC;QACP,CAAC;QAAC,OAAO,KAAK,EAAE,CAAC;YACb,SAAS,CAAC,IAAI,CAAC;gBACX,EAAE,EAAE,QAAQ,CAAC,EAAE;gBACf,KAAK,EAAE,QAAQ,CAAC,KAAK;gBACrB,MAAM,EAAE,CAAC,KAAK,CAAC,qCAAqC,EAAE,KAAK,EACvD,KAAK,YAAY,KAAK,CAAC,CAAC,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC,CAAC;gBAC5D,MAAM,EAAE,CAAC;gBACT,KAAK,EAAE,CAAC;aACX,CAAC,CAAC;QACP,CAAC;gBAAS,CAAC;YACP,MAAM,CAAC,GAAG,EAAE,EAAC,SAAS,EAAE,IAAI,EAAE,KAAK,EAAE,IAAI,EAAC,CAAC,CAAC;QAChD,CAAC;IACL,CAAC;IAED,MAAM,MAAM,GAAG,SAAS,CAAC,MAAM,CAAC,CAAC,GAAG,EAAE,CAAC,EAAE,EAAE,CAAC,GAAG,GAAG,CAAC,CAAC,MAAM,EAAE,CAAC,CAAC,CAAC;IAC/D,MAAM,KAAK,GAAG,SAAS,CAAC,MAAM,CAAC,CAAC,GAAG,EAAE,CAAC,EAAE,EAAE,CAAC,GAAG,GAAG,CAAC,CAAC,KAAK,EAAE,CAAC,CAAC,CAAC;IAE7D,OAAO;QACH,OAAO,EAAE,UAAU;QACnB,KAAK,EAAE,IAAI,IAAI,EAAE,CAAC,WAAW,EAAE;QAC/B,SAAS;QACT,MAAM;QACN,KAAK;QACL,SAAS,EAAE,MAAM,KAAK,KAAK;KAC9B,CAAC;AACN,CAAC;AAED,MAAM,UAAU,iBAAiB,CAAC,MAAmB;IACjD,MAAM,KAAK,GAAa,EAAE,CAAC;IAC3B,KAAK,CAAC,IAAI,CAAC,oBAAoB,MAAM,CAAC,OAAO,MAAM,MAAM,CAAC,KAAK,EAAE,CAAC,CAAC;IACnE,KAAK,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC;IAEf,KAAK,MAAM,QAAQ,IAAI,MAAM,CAAC,SAAS,EAAE,CAAC;QACtC,MAAM,IAAI,GAAG,QAAQ,CAAC,MAAM,KAAK,QAAQ,CAAC,KAAK,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,GAAG,CAAC;QAC5D,KAAK,CAAC,IAAI,CAAC,GAAG,IAAI,IAAI,QAAQ,CAAC,EAAE,MAAM,QAAQ,CAAC,KAAK,KAAK,QAAQ,CAAC,MAAM,IAAI,QAAQ,CAAC,KAAK,GAAG,CAAC,CAAC;QAEhG,KAAK,MAAM,CAAC,IAAI,QAAQ,CAAC,MAAM,EAAE,CAAC;YAC9B,KAAK,CAAC,IAAI,CAAC,OAAO,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,MAAM,IAAI,CAAC,CAAC,IAAI,GAAG,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,MAAM,CAAC,CAAC,MAAM,EAAE,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC;QAC9F,CAAC;IACL,CAAC;IAED,KAAK,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC;IACf,KAAK,CAAC,IAAI,CAAC,GAAG,MAAM,CAAC,MAAM,IAAI,MAAM,CAAC,KAAK,iBAAiB,MAAM,CAAC,SAAS,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,iBAAiB,EAAE,CAAC,CAAC;IAEzG,OAAO,KAAK,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;AAC5B,CAAC"}
|
package/dist/cli.d.ts
ADDED