@e2edev/e2e 0.5.1 → 0.6.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 +24 -11
- package/dist/agent/act.d.ts +1 -1
- package/dist/agent/act.js +2 -1
- package/dist/agent/act.js.map +1 -1
- package/dist/agent/ai-sdk.d.ts +1 -2
- package/dist/agent/ai-sdk.d.ts.map +1 -1
- package/dist/agent/ai-sdk.js +1 -2
- package/dist/agent/ai-sdk.js.map +1 -1
- package/dist/agent/default-agent.d.ts +7 -3
- package/dist/agent/default-agent.d.ts.map +1 -1
- package/dist/agent/default-agent.js +2 -2
- package/dist/agent/default-agent.js.map +1 -1
- package/dist/agent/derived.d.ts +1 -1
- package/dist/agent/derived.js +1 -1
- package/dist/agent/error.d.ts +2 -2
- package/dist/agent/error.d.ts.map +1 -1
- package/dist/agent/error.js +2 -2
- package/dist/agent/error.js.map +1 -1
- package/dist/agent/executor.d.ts +8 -3
- package/dist/agent/executor.d.ts.map +1 -1
- package/dist/agent/executor.js +1 -1
- package/dist/agent/executor.js.map +1 -1
- package/dist/agent/index.d.ts +1 -1
- package/dist/agent/index.d.ts.map +1 -1
- package/dist/agent/index.js +8 -5
- package/dist/agent/index.js.map +1 -1
- package/dist/agent/invocation.d.ts +2 -2
- package/dist/agent/invocation.d.ts.map +1 -1
- package/dist/agent/invocation.js +7 -2
- package/dist/agent/invocation.js.map +1 -1
- package/dist/agent/ledger.d.ts +1 -1
- package/dist/agent/ledger.js +1 -1
- package/dist/agent/model/adapter.d.ts +7 -4
- package/dist/agent/model/adapter.d.ts.map +1 -1
- package/dist/agent/model/adapter.js +2 -2
- package/dist/agent/model/adapter.js.map +1 -1
- package/dist/agent/model/router.d.ts +1 -1
- package/dist/agent/model/router.d.ts.map +1 -1
- package/dist/agent/model/router.js +1 -1
- package/dist/agent/model/router.js.map +1 -1
- package/dist/agent/model/sdk.d.ts +11 -1
- package/dist/agent/model/sdk.d.ts.map +1 -1
- package/dist/agent/model/sdk.js +54 -10
- package/dist/agent/model/sdk.js.map +1 -1
- package/dist/agent/observation.d.ts +1 -1
- package/dist/agent/observation.d.ts.map +1 -1
- package/dist/agent/observation.js +2 -2
- package/dist/agent/observation.js.map +1 -1
- package/dist/agent/prompts.d.ts +1 -1
- package/dist/agent/prompts.js +1 -1
- package/dist/agent/protocol.d.ts +2 -3
- package/dist/agent/protocol.d.ts.map +1 -1
- package/dist/agent/protocol.js +2 -3
- package/dist/agent/protocol.js.map +1 -1
- package/dist/agent/public.d.ts +1 -1
- package/dist/agent/public.js +1 -1
- package/dist/agent/replay.d.ts +1 -1
- package/dist/agent/replay.js +1 -1
- package/dist/agent/secrets.d.ts +1 -1
- package/dist/agent/secrets.d.ts.map +1 -1
- package/dist/agent/secrets.js +1 -1
- package/dist/agent/secrets.js.map +1 -1
- package/dist/agent/step-cache.d.ts +1 -1
- package/dist/agent/step-cache.d.ts.map +1 -1
- package/dist/agent/step-cache.js +7 -1
- package/dist/agent/step-cache.js.map +1 -1
- package/dist/agent/tool-loop.d.ts +7 -3
- package/dist/agent/tool-loop.d.ts.map +1 -1
- package/dist/agent/tool-loop.js +6 -5
- package/dist/agent/tool-loop.js.map +1 -1
- package/dist/cache/anchors.d.ts +1 -1
- package/dist/cache/anchors.js +1 -1
- package/dist/cache/context.d.ts +6 -1
- package/dist/cache/context.d.ts.map +1 -1
- package/dist/cache/context.js +2 -1
- package/dist/cache/context.js.map +1 -1
- package/dist/cache/decide.d.ts +1 -1
- package/dist/cache/decide.js +1 -1
- package/dist/cache/identity.d.ts +1 -1
- package/dist/cache/identity.js +1 -1
- package/dist/cache/recorder.d.ts +4 -2
- package/dist/cache/recorder.d.ts.map +1 -1
- package/dist/cache/recorder.js +10 -1
- package/dist/cache/recorder.js.map +1 -1
- package/dist/cache/relocate.d.ts +1 -1
- package/dist/cache/relocate.js +1 -1
- package/dist/cache/store.d.ts +1 -1
- package/dist/cache/store.js +1 -1
- package/dist/cache/trace.d.ts +16 -1
- package/dist/cache/trace.d.ts.map +1 -1
- package/dist/cache/trace.js +22 -1
- package/dist/cache/trace.js.map +1 -1
- package/dist/cli/bin.js +9 -1
- package/dist/cli/bin.js.map +1 -1
- package/dist/cli/cache.d.ts +25 -0
- package/dist/cli/cache.d.ts.map +1 -0
- package/dist/cli/cache.js +249 -0
- package/dist/cli/cache.js.map +1 -0
- package/dist/cli/docs-url.d.ts +3 -0
- package/dist/cli/docs-url.d.ts.map +1 -0
- package/dist/cli/docs-url.js +3 -0
- package/dist/cli/docs-url.js.map +1 -0
- package/dist/cli/guide.d.ts +4 -0
- package/dist/cli/guide.d.ts.map +1 -0
- package/dist/cli/guide.js +16 -0
- package/dist/cli/guide.js.map +1 -0
- package/dist/cli/index.d.ts +1 -1
- package/dist/cli/index.d.ts.map +1 -1
- package/dist/cli/index.js +210 -41
- package/dist/cli/index.js.map +1 -1
- package/dist/cli/init/agent-skill.d.ts +34 -0
- package/dist/cli/init/agent-skill.d.ts.map +1 -0
- package/dist/cli/init/agent-skill.js +44 -0
- package/dist/cli/init/agent-skill.js.map +1 -0
- package/dist/cli/init/engines.d.ts +31 -23
- package/dist/cli/init/engines.d.ts.map +1 -1
- package/dist/cli/init/engines.js +34 -24
- package/dist/cli/init/engines.js.map +1 -1
- package/dist/cli/init/package.d.ts +19 -3
- package/dist/cli/init/package.d.ts.map +1 -1
- package/dist/cli/init/package.js +20 -20
- package/dist/cli/init/package.js.map +1 -1
- package/dist/cli/init/scaffold.d.ts.map +1 -1
- package/dist/cli/init/scaffold.js +4 -3
- package/dist/cli/init/scaffold.js.map +1 -1
- package/dist/cli/init.d.ts +14 -2
- package/dist/cli/init.d.ts.map +1 -1
- package/dist/cli/init.js +94 -16
- package/dist/cli/init.js.map +1 -1
- package/dist/cli/signals.d.ts +4 -1
- package/dist/cli/signals.d.ts.map +1 -1
- package/dist/cli/signals.js +8 -2
- package/dist/cli/signals.js.map +1 -1
- package/dist/cli/skill.d.ts +16 -0
- package/dist/cli/skill.d.ts.map +1 -0
- package/dist/cli/skill.js +57 -0
- package/dist/cli/skill.js.map +1 -0
- package/dist/collect/collect.d.ts +9 -1
- package/dist/collect/collect.d.ts.map +1 -1
- package/dist/collect/collect.js +50 -5
- package/dist/collect/collect.js.map +1 -1
- package/dist/collect/registry.d.ts +1 -1
- package/dist/collect/registry.d.ts.map +1 -1
- package/dist/collect/registry.js +1 -1
- package/dist/collect/registry.js.map +1 -1
- package/dist/collect/select.d.ts +1 -1
- package/dist/collect/select.d.ts.map +1 -1
- package/dist/collect/select.js +77 -8
- package/dist/collect/select.js.map +1 -1
- package/dist/config/agent.d.ts +14 -2
- package/dist/config/agent.d.ts.map +1 -1
- package/dist/config/agent.js +36 -11
- package/dist/config/agent.js.map +1 -1
- package/dist/config/app.d.ts +2 -2
- package/dist/config/app.d.ts.map +1 -1
- package/dist/config/app.js +3 -3
- package/dist/config/app.js.map +1 -1
- package/dist/config/diagnose.d.ts +15 -0
- package/dist/config/diagnose.d.ts.map +1 -0
- package/dist/config/diagnose.js +122 -0
- package/dist/config/diagnose.js.map +1 -0
- package/dist/config/load.d.ts +9 -1
- package/dist/config/load.d.ts.map +1 -1
- package/dist/config/load.js +35 -3
- package/dist/config/load.js.map +1 -1
- package/dist/config/resolve.d.ts +2 -2
- package/dist/config/resolve.d.ts.map +1 -1
- package/dist/config/resolve.js +51 -16
- package/dist/config/resolve.js.map +1 -1
- package/dist/config/validate.d.ts +6 -2
- package/dist/config/validate.d.ts.map +1 -1
- package/dist/config/validate.js +20 -3
- package/dist/config/validate.js.map +1 -1
- package/dist/credentials.d.ts +1 -1
- package/dist/credentials.d.ts.map +1 -1
- package/dist/credentials.js +1 -1
- package/dist/credentials.js.map +1 -1
- package/dist/engine/contract.d.ts +2 -2
- package/dist/engine/contract.js +1 -1
- package/dist/engine/index.d.ts +2 -2
- package/dist/engine/index.js +3 -3
- package/dist/engine/index.js.map +1 -1
- package/dist/engine/session.d.ts +1 -1
- package/dist/engine/session.d.ts.map +1 -1
- package/dist/engine/session.js +5 -2
- package/dist/engine/session.js.map +1 -1
- package/dist/expect/async.d.ts +1 -1
- package/dist/expect/async.d.ts.map +1 -1
- package/dist/expect/async.js +37 -1
- package/dist/expect/async.js.map +1 -1
- package/dist/expect/values.d.ts +1 -1
- package/dist/expect/values.d.ts.map +1 -1
- package/dist/expect/values.js +1 -1
- package/dist/expect/values.js.map +1 -1
- package/dist/index.d.ts +0 -3
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +0 -4
- package/dist/index.js.map +1 -1
- package/dist/internal/errors.d.ts +21 -3
- package/dist/internal/errors.d.ts.map +1 -1
- package/dist/internal/errors.js +55 -5
- package/dist/internal/errors.js.map +1 -1
- package/dist/internal/globs.d.ts +2 -2
- package/dist/internal/globs.d.ts.map +1 -1
- package/dist/internal/globs.js +2 -2
- package/dist/internal/globs.js.map +1 -1
- package/dist/internal/ids.d.ts +3 -3
- package/dist/internal/ids.d.ts.map +1 -1
- package/dist/internal/ids.js +3 -3
- package/dist/internal/ids.js.map +1 -1
- package/dist/internal/node-version.d.ts +10 -0
- package/dist/internal/node-version.d.ts.map +1 -0
- package/dist/internal/node-version.js +28 -0
- package/dist/internal/node-version.js.map +1 -0
- package/dist/internal/package-manager.d.ts +10 -0
- package/dist/internal/package-manager.d.ts.map +1 -0
- package/dist/internal/package-manager.js +43 -0
- package/dist/internal/package-manager.js.map +1 -0
- package/dist/internal/redact.d.ts +1 -1
- package/dist/internal/redact.d.ts.map +1 -1
- package/dist/internal/redact.js +1 -1
- package/dist/internal/redact.js.map +1 -1
- package/dist/internal/suggest.d.ts +16 -0
- package/dist/internal/suggest.d.ts.map +1 -0
- package/dist/internal/suggest.js +61 -0
- package/dist/internal/suggest.js.map +1 -0
- package/dist/internal/text.d.ts +1 -1
- package/dist/internal/text.d.ts.map +1 -1
- package/dist/internal/text.js +1 -1
- package/dist/internal/text.js.map +1 -1
- package/dist/internal/urls.d.ts +2 -2
- package/dist/internal/urls.d.ts.map +1 -1
- package/dist/internal/urls.js +2 -2
- package/dist/internal/urls.js.map +1 -1
- package/dist/locator/engine.d.ts +1 -1
- package/dist/locator/engine.d.ts.map +1 -1
- package/dist/locator/engine.js +1 -1
- package/dist/locator/engine.js.map +1 -1
- package/dist/locator/expression.d.ts +1 -1
- package/dist/locator/expression.d.ts.map +1 -1
- package/dist/locator/expression.js +1 -1
- package/dist/locator/expression.js.map +1 -1
- package/dist/locator/screen.js +1 -1
- package/dist/locator/screen.js.map +1 -1
- package/dist/report/build.d.ts +1 -1
- package/dist/report/build.d.ts.map +1 -1
- package/dist/report/build.js +4 -4
- package/dist/report/build.js.map +1 -1
- package/dist/report/junit.d.ts +1 -1
- package/dist/report/junit.d.ts.map +1 -1
- package/dist/report/junit.js +1 -1
- package/dist/report/junit.js.map +1 -1
- package/dist/report/list.d.ts +1 -1
- package/dist/report/list.d.ts.map +1 -1
- package/dist/report/list.js +7 -3
- package/dist/report/list.js.map +1 -1
- package/dist/report/write.d.ts +1 -1
- package/dist/report/write.d.ts.map +1 -1
- package/dist/report/write.js +1 -1
- package/dist/report/write.js.map +1 -1
- package/dist/run/budget.d.ts +2 -2
- package/dist/run/budget.js +2 -2
- package/dist/run/declared-processes.d.ts +1 -1
- package/dist/run/declared-processes.js +1 -1
- package/dist/run/execute.d.ts +2 -3
- package/dist/run/execute.d.ts.map +1 -1
- package/dist/run/execute.js +4 -5
- package/dist/run/execute.js.map +1 -1
- package/dist/run/fixtures.d.ts +1 -1
- package/dist/run/fixtures.d.ts.map +1 -1
- package/dist/run/fixtures.js +41 -5
- package/dist/run/fixtures.js.map +1 -1
- package/dist/run/managed-process.d.ts +8 -1
- package/dist/run/managed-process.d.ts.map +1 -1
- package/dist/run/managed-process.js +35 -17
- package/dist/run/managed-process.js.map +1 -1
- package/dist/run/realm.d.ts +2 -2
- package/dist/run/realm.js +2 -2
- package/dist/run/runner.d.ts +22 -0
- package/dist/run/runner.d.ts.map +1 -1
- package/dist/run/runner.js +44 -9
- package/dist/run/runner.js.map +1 -1
- package/dist/run/scheduler.d.ts +1 -2
- package/dist/run/scheduler.d.ts.map +1 -1
- package/dist/run/scheduler.js +2 -3
- package/dist/run/scheduler.js.map +1 -1
- package/dist/run/serial.d.ts +1 -1
- package/dist/run/serial.d.ts.map +1 -1
- package/dist/run/serial.js +3 -3
- package/dist/run/serial.js.map +1 -1
- package/dist/run/sessions.d.ts +1 -1
- package/dist/run/sessions.d.ts.map +1 -1
- package/dist/run/sessions.js +1 -1
- package/dist/run/sessions.js.map +1 -1
- package/dist/run/steps.d.ts +2 -2
- package/dist/run/steps.d.ts.map +1 -1
- package/dist/run/steps.js +1 -1
- package/dist/run/steps.js.map +1 -1
- package/dist/run/units.d.ts +1 -1
- package/dist/run/units.js +1 -1
- package/dist/types.d.ts +27 -8
- package/dist/types.d.ts.map +1 -1
- package/dist/types.js +2 -2
- package/package.json +10 -9
- package/skills/e2e/SKILL.md +110 -0
- package/skills/e2e/references/agent.md +210 -0
- package/skills/e2e/references/debugging.md +81 -0
- package/skills/e2e/references/running.md +153 -0
- package/skills/e2e/references/setup.md +238 -0
- package/skills/e2e/references/writing-tests.md +289 -0
package/dist/cache/trace.js
CHANGED
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
/**
|
|
2
|
-
* `trace-1` entry format
|
|
2
|
+
* `trace-1` entry format.
|
|
3
3
|
*
|
|
4
4
|
* A trace is the ordered list of grammar actions one passing `agent.act()`
|
|
5
5
|
* step performed, each with a durable target descriptor and secret-free,
|
|
@@ -43,6 +43,8 @@ export const MAX_TRACE_ANCHORS = 8;
|
|
|
43
43
|
/** Longest a replay waits for the recorded end state to return. */
|
|
44
44
|
export const MAX_TRACE_END_WAIT_MS = 120_000;
|
|
45
45
|
const SCROLL_DIRECTIONS = new Set(['up', 'down', 'left', 'right']);
|
|
46
|
+
/** The shape of a SHA-256 digest in hex, as `instructionDigest` writes it. */
|
|
47
|
+
const SHA256_HEX = /^[a-f0-9]{64}$/u;
|
|
46
48
|
/** The shape `timestamp()` writes: an ISO 8601 UTC instant. */
|
|
47
49
|
const ISO_INSTANT = /^\d{4}-\d{2}-\d{2}T\d{2}:\d{2}:\d{2}(?:\.\d+)?Z$/;
|
|
48
50
|
/** Wraps one trace as a fresh entry. */
|
|
@@ -87,6 +89,10 @@ function readActionTrace(document) {
|
|
|
87
89
|
return undefined;
|
|
88
90
|
if (executorVersion !== undefined && typeof executorVersion !== 'string')
|
|
89
91
|
return undefined;
|
|
92
|
+
const recordedForRaw = raw['recordedFor'];
|
|
93
|
+
const recordedFor = recordedForRaw === undefined ? undefined : readProvenance(recordedForRaw);
|
|
94
|
+
if (recordedForRaw !== undefined && recordedFor === undefined)
|
|
95
|
+
return undefined;
|
|
90
96
|
const summary = readBoundedText(raw['summary'], MAX_TRACE_SUMMARY_CHARS);
|
|
91
97
|
if (summary === undefined)
|
|
92
98
|
return undefined;
|
|
@@ -140,6 +146,7 @@ function readActionTrace(document) {
|
|
|
140
146
|
name: executorName,
|
|
141
147
|
...(executorVersion === undefined ? {} : { version: executorVersion }),
|
|
142
148
|
},
|
|
149
|
+
...(recordedFor === undefined ? {} : { recordedFor }),
|
|
143
150
|
summary,
|
|
144
151
|
...(startPath === undefined ? {} : { startPath }),
|
|
145
152
|
...(endPath === undefined ? {} : { endPath }),
|
|
@@ -242,6 +249,20 @@ function readDescriptor(document) {
|
|
|
242
249
|
return undefined;
|
|
243
250
|
return descriptor;
|
|
244
251
|
}
|
|
252
|
+
function readProvenance(document) {
|
|
253
|
+
if (typeof document !== 'object' || document === null || Array.isArray(document)) {
|
|
254
|
+
return undefined;
|
|
255
|
+
}
|
|
256
|
+
const raw = document;
|
|
257
|
+
const testId = readBoundedText(raw['testId'], MAX_TRACE_DESCRIPTOR_CHARS);
|
|
258
|
+
const targetId = readBoundedText(raw['targetId'], MAX_TRACE_DESCRIPTOR_CHARS);
|
|
259
|
+
const instructionDigest = raw['instructionDigest'];
|
|
260
|
+
if (testId === undefined || targetId === undefined)
|
|
261
|
+
return undefined;
|
|
262
|
+
if (typeof instructionDigest !== 'string' || !SHA256_HEX.test(instructionDigest))
|
|
263
|
+
return undefined;
|
|
264
|
+
return { testId, targetId, instructionDigest };
|
|
265
|
+
}
|
|
245
266
|
function readBoundedText(value, maxChars) {
|
|
246
267
|
if (typeof value !== 'string' || value.trim() === '' || value.length > maxChars) {
|
|
247
268
|
return undefined;
|
package/dist/cache/trace.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"trace.js","sourceRoot":"","sources":["../../src/cache/trace.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;GAgBG;AAEH,OAAO,EAAE,SAAS,EAAE,MAAM,oBAAoB,CAAC;AAG/C,MAAM,CAAC,MAAM,oBAAoB,GAAG,SAAS,CAAC;AAE9C,kFAAkF;AAClF,MAAM,CAAC,MAAM,iBAAiB,GAAG,EAAE,CAAC;AAEpC,4DAA4D;AAC5D,MAAM,CAAC,MAAM,uBAAuB,GAAG,GAAG,CAAC;AAC3C,MAAM,CAAC,MAAM,0BAA0B,GAAG,GAAG,CAAC;AAE9C;;;;;GAKG;AACH,MAAM,CAAC,MAAM,qBAAqB,GAAG,KAAK,CAAC;AAE3C,kEAAkE;AAClE,MAAM,UAAU,KAAK,CAAC,IAAY,EAAE,QAAgB;IAClD,OAAO,IAAI,CAAC,MAAM,IAAI,QAAQ,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,GAAG,IAAI,CAAC,KAAK,CAAC,CAAC,EAAE,QAAQ,GAAG,CAAC,CAAC,GAAG,CAAC;AAC5E,CAAC;AAED;;;;;GAKG;AACH,MAAM,CAAC,MAAM,iBAAiB,GAAG,CAAC,CAAC;AACnC,mEAAmE;AACnE,MAAM,CAAC,MAAM,qBAAqB,GAAG,OAAO,CAAC;AAE7C,MAAM,iBAAiB,GAAwB,IAAI,GAAG,CAAC,CAAC,IAAI,EAAE,MAAM,EAAE,MAAM,EAAE,OAAO,CAAC,CAAC,CAAC;
|
|
1
|
+
{"version":3,"file":"trace.js","sourceRoot":"","sources":["../../src/cache/trace.ts"],"names":[],"mappings":"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"}
|
package/dist/cli/bin.js
CHANGED
|
@@ -1,4 +1,12 @@
|
|
|
1
1
|
#!/usr/bin/env node
|
|
2
|
-
import {
|
|
2
|
+
import { unsupportedNodeMessage } from '../internal/node-version.js';
|
|
3
|
+
// Checked before the CLI module loads: that module and its dependencies are
|
|
4
|
+
// what an old runtime would fail on, with a stack trace instead of a sentence.
|
|
5
|
+
const unsupported = unsupportedNodeMessage(process.versions.node);
|
|
6
|
+
if (unsupported !== undefined) {
|
|
7
|
+
process.stderr.write(`${unsupported}\n`);
|
|
8
|
+
process.exit(2);
|
|
9
|
+
}
|
|
10
|
+
const { main } = await import('./index.js');
|
|
3
11
|
await main(process.argv);
|
|
4
12
|
//# sourceMappingURL=bin.js.map
|
package/dist/cli/bin.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"bin.js","sourceRoot":"","sources":["../../src/cli/bin.ts"],"names":[],"mappings":";AACA,OAAO,EAAE,IAAI,EAAE,MAAM,YAAY,CAAC;
|
|
1
|
+
{"version":3,"file":"bin.js","sourceRoot":"","sources":["../../src/cli/bin.ts"],"names":[],"mappings":";AACA,OAAO,EAAE,sBAAsB,EAAE,MAAM,6BAA6B,CAAC;AAErE,4EAA4E;AAC5E,+EAA+E;AAC/E,MAAM,WAAW,GAAG,sBAAsB,CAAC,OAAO,CAAC,QAAQ,CAAC,IAAI,CAAC,CAAC;AAClE,IAAI,WAAW,KAAK,SAAS,EAAE,CAAC;IAC9B,OAAO,CAAC,MAAM,CAAC,KAAK,CAAC,GAAG,WAAW,IAAI,CAAC,CAAC;IACzC,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;AAClB,CAAC;AAED,MAAM,EAAE,IAAI,EAAE,GAAG,MAAM,MAAM,CAAC,YAAY,CAAC,CAAC;AAC5C,MAAM,IAAI,CAAC,OAAO,CAAC,IAAI,CAAC,CAAC"}
|
|
@@ -0,0 +1,25 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* `e2e cache`: what is in the trace cache, and how to get rid of it.
|
|
3
|
+
*
|
|
4
|
+
* The store is a directory of digest-named files, so a committed cache is
|
|
5
|
+
* unreadable without a reader: `ls` prints each entry's provenance — the test,
|
|
6
|
+
* the target, the instruction digest, its age, and how many actions it would
|
|
7
|
+
* replay — `stats` sizes the store, and `clear` empties it.
|
|
8
|
+
*
|
|
9
|
+
* Every command works on files only. A project that configures `cache.store`
|
|
10
|
+
* replaced the filesystem with its own store, and this CLI has no way to
|
|
11
|
+
* enumerate it, so it says so instead of listing an empty directory.
|
|
12
|
+
*/
|
|
13
|
+
export type CacheCommand = 'ls' | 'clear' | 'stats';
|
|
14
|
+
export interface CacheOptions {
|
|
15
|
+
/** Explicit config path; the nearest `e2e.config.ts` when absent. */
|
|
16
|
+
readonly config?: string;
|
|
17
|
+
readonly cwd?: string;
|
|
18
|
+
}
|
|
19
|
+
/**
|
|
20
|
+
* Runs one `e2e cache` command against the configured store directory.
|
|
21
|
+
* Returns the process exit code: 2 for a config or filesystem error, 0
|
|
22
|
+
* otherwise — an empty or absent cache is a fact, not a failure.
|
|
23
|
+
*/
|
|
24
|
+
export declare function cache(command: CacheCommand, options?: CacheOptions): Promise<number>;
|
|
25
|
+
//# sourceMappingURL=cache.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"cache.d.ts","sourceRoot":"","sources":["../../src/cli/cache.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;GAWG;AAUH,MAAM,MAAM,YAAY,GAAG,IAAI,GAAG,OAAO,GAAG,OAAO,CAAC;AAEpD,MAAM,WAAW,YAAY;IAC3B,qEAAqE;IACrE,QAAQ,CAAC,MAAM,CAAC,EAAE,MAAM,CAAC;IACzB,QAAQ,CAAC,GAAG,CAAC,EAAE,MAAM,CAAC;CACvB;AA+BD;;;;GAIG;AACH,wBAAsB,KAAK,CAAC,OAAO,EAAE,YAAY,EAAE,OAAO,GAAE,YAAiB,GAAG,OAAO,CAAC,MAAM,CAAC,CAuB9F"}
|
|
@@ -0,0 +1,249 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* `e2e cache`: what is in the trace cache, and how to get rid of it.
|
|
3
|
+
*
|
|
4
|
+
* The store is a directory of digest-named files, so a committed cache is
|
|
5
|
+
* unreadable without a reader: `ls` prints each entry's provenance — the test,
|
|
6
|
+
* the target, the instruction digest, its age, and how many actions it would
|
|
7
|
+
* replay — `stats` sizes the store, and `clear` empties it.
|
|
8
|
+
*
|
|
9
|
+
* Every command works on files only. A project that configures `cache.store`
|
|
10
|
+
* replaced the filesystem with its own store, and this CLI has no way to
|
|
11
|
+
* enumerate it, so it says so instead of listing an empty directory.
|
|
12
|
+
*/
|
|
13
|
+
import { readdir, rm, rmdir } from 'node:fs/promises';
|
|
14
|
+
import path from 'node:path';
|
|
15
|
+
import picocolors from 'picocolors';
|
|
16
|
+
import { FileTraceCacheStore, MAX_CACHE_WIRE_BYTES } from '../cache/store.js';
|
|
17
|
+
import { discoverConfig, loadConfigModule, missingConfigError } from '../config/load.js';
|
|
18
|
+
import { resolveConfig } from '../config/resolve.js';
|
|
19
|
+
import { errorMessage } from '../internal/errors.js';
|
|
20
|
+
/** Store file names: the key digest, as `FileTraceCacheStore` writes them. */
|
|
21
|
+
const ENTRY_FILE = /^([a-f0-9]{64})\.json$/u;
|
|
22
|
+
/** A crashed writer's leftover; a store file for cleanup purposes. */
|
|
23
|
+
const TEMPORARY_FILE = /^[a-f0-9]{64}\.json\.[a-f0-9]{16}\.tmp$/u;
|
|
24
|
+
/** Digest prefix printed instead of the full 64 hex characters. */
|
|
25
|
+
const DIGEST_PREFIX_CHARS = 12;
|
|
26
|
+
/**
|
|
27
|
+
* Runs one `e2e cache` command against the configured store directory.
|
|
28
|
+
* Returns the process exit code: 2 for a config or filesystem error, 0
|
|
29
|
+
* otherwise — an empty or absent cache is a fact, not a failure.
|
|
30
|
+
*/
|
|
31
|
+
export async function cache(command, options = {}) {
|
|
32
|
+
let directory;
|
|
33
|
+
try {
|
|
34
|
+
directory = await resolveCacheDirectory(options);
|
|
35
|
+
}
|
|
36
|
+
catch (cause) {
|
|
37
|
+
process.stderr.write(`${errorMessage(cause)}\n`);
|
|
38
|
+
return 2;
|
|
39
|
+
}
|
|
40
|
+
try {
|
|
41
|
+
const contents = await readContents(directory);
|
|
42
|
+
switch (command) {
|
|
43
|
+
case 'ls':
|
|
44
|
+
return list(contents);
|
|
45
|
+
case 'stats':
|
|
46
|
+
return stats(contents);
|
|
47
|
+
case 'clear':
|
|
48
|
+
return await clear(contents);
|
|
49
|
+
}
|
|
50
|
+
}
|
|
51
|
+
catch (cause) {
|
|
52
|
+
process.stderr.write(`trace cache at ${directory} could not be read: ${errorMessage(cause)}\n`);
|
|
53
|
+
return 2;
|
|
54
|
+
}
|
|
55
|
+
}
|
|
56
|
+
/**
|
|
57
|
+
* The store directory from the project's resolved config, so `cache.dir` and
|
|
58
|
+
* `--config` mean here what they mean to a run.
|
|
59
|
+
*/
|
|
60
|
+
async function resolveCacheDirectory(options) {
|
|
61
|
+
const cwd = options.cwd ?? process.cwd();
|
|
62
|
+
const discovered = discoverConfig(cwd, options.config);
|
|
63
|
+
if (discovered.configPath === undefined)
|
|
64
|
+
throw missingConfigError(cwd);
|
|
65
|
+
const raw = await loadConfigModule(discovered.configPath);
|
|
66
|
+
const config = resolveConfig(raw, {
|
|
67
|
+
projectRoot: discovered.projectRoot,
|
|
68
|
+
configPath: discovered.configPath,
|
|
69
|
+
env: process.env,
|
|
70
|
+
});
|
|
71
|
+
if (config.cache.store !== undefined) {
|
|
72
|
+
throw new Error('cache.store replaces the file store with a custom one; e2e cache reads files only, so inspect that store with its own tools');
|
|
73
|
+
}
|
|
74
|
+
return config.cache.dir;
|
|
75
|
+
}
|
|
76
|
+
/**
|
|
77
|
+
* Every file in the store directory, classified. Reads go through the store
|
|
78
|
+
* itself, so a file this CLI calls an entry is exactly one a run would
|
|
79
|
+
* replay: an oversized or unparseable file is unreadable here and a miss
|
|
80
|
+
* there. A directory that does not exist is an empty store.
|
|
81
|
+
*/
|
|
82
|
+
async function readContents(directory) {
|
|
83
|
+
const store = new FileTraceCacheStore({ directory, maxBytes: MAX_CACHE_WIRE_BYTES, writable: false });
|
|
84
|
+
const entries = [];
|
|
85
|
+
const unreadable = [];
|
|
86
|
+
const foreign = [];
|
|
87
|
+
let names;
|
|
88
|
+
try {
|
|
89
|
+
names = await readdir(directory);
|
|
90
|
+
}
|
|
91
|
+
catch (cause) {
|
|
92
|
+
if (cause.code === 'ENOENT') {
|
|
93
|
+
return { directory, entries, unreadable, foreign };
|
|
94
|
+
}
|
|
95
|
+
throw cause;
|
|
96
|
+
}
|
|
97
|
+
for (const name of names.toSorted()) {
|
|
98
|
+
const keyHash = ENTRY_FILE.exec(name)?.[1];
|
|
99
|
+
if (keyHash === undefined) {
|
|
100
|
+
if (!TEMPORARY_FILE.test(name))
|
|
101
|
+
foreign.push(name);
|
|
102
|
+
continue;
|
|
103
|
+
}
|
|
104
|
+
const read = await store.read(keyHash);
|
|
105
|
+
if (read.status !== 'hit') {
|
|
106
|
+
unreadable.push({ name, bytes: read.status === 'invalid' ? (read.bytes ?? 0) : 0 });
|
|
107
|
+
continue;
|
|
108
|
+
}
|
|
109
|
+
const trace = read.entry.payload;
|
|
110
|
+
entries.push({
|
|
111
|
+
keyHash,
|
|
112
|
+
bytes: read.bytes,
|
|
113
|
+
createdAt: read.entry.createdAt,
|
|
114
|
+
actions: trace.actions.length,
|
|
115
|
+
truncated: trace.truncated === true,
|
|
116
|
+
testId: trace.recordedFor?.testId,
|
|
117
|
+
targetId: trace.recordedFor?.targetId,
|
|
118
|
+
instructionDigest: trace.recordedFor?.instructionDigest,
|
|
119
|
+
});
|
|
120
|
+
}
|
|
121
|
+
return { directory, entries, unreadable, foreign };
|
|
122
|
+
}
|
|
123
|
+
/**
|
|
124
|
+
* Prints one row per entry, newest last within a test, so a reviewer reads a
|
|
125
|
+
* committed cache test by test. Provenance an entry does not carry — one
|
|
126
|
+
* recorded before entries described themselves — prints as `-`.
|
|
127
|
+
*/
|
|
128
|
+
function list(contents) {
|
|
129
|
+
if (contents.entries.length === 0) {
|
|
130
|
+
process.stdout.write(`no trace cache entries in ${contents.directory}\n`);
|
|
131
|
+
warnAboutSkipped(contents);
|
|
132
|
+
return 0;
|
|
133
|
+
}
|
|
134
|
+
const now = Date.now();
|
|
135
|
+
const rows = contents.entries
|
|
136
|
+
.toSorted((left, right) => (left.testId ?? '').localeCompare(right.testId ?? '') ||
|
|
137
|
+
(left.targetId ?? '').localeCompare(right.targetId ?? '') ||
|
|
138
|
+
left.createdAt.localeCompare(right.createdAt))
|
|
139
|
+
.map((entry) => [
|
|
140
|
+
entry.testId ?? '-',
|
|
141
|
+
entry.targetId ?? '-',
|
|
142
|
+
entry.instructionDigest?.slice(0, DIGEST_PREFIX_CHARS) ?? '-',
|
|
143
|
+
formatAge(entry.createdAt, now),
|
|
144
|
+
`${entry.actions}${entry.truncated ? ' (truncated)' : ''}`,
|
|
145
|
+
]);
|
|
146
|
+
const header = ['TEST', 'TARGET', 'INSTRUCTION', 'AGE', 'ACTIONS'];
|
|
147
|
+
const widths = header.map((title, column) => Math.max(title.length, ...rows.map((row) => row[column].length)));
|
|
148
|
+
const line = (cells) => cells
|
|
149
|
+
.map((cell, column) => (column === cells.length - 1 ? cell : cell.padEnd(widths[column])))
|
|
150
|
+
.join(' ')
|
|
151
|
+
.trimEnd();
|
|
152
|
+
process.stdout.write(`${picocolors.bold(line(header))}\n`);
|
|
153
|
+
for (const row of rows)
|
|
154
|
+
process.stdout.write(`${line(row)}\n`);
|
|
155
|
+
warnAboutSkipped(contents);
|
|
156
|
+
return 0;
|
|
157
|
+
}
|
|
158
|
+
/** Prints the store's size: where it is, how many entries, how many bytes. */
|
|
159
|
+
function stats(contents) {
|
|
160
|
+
const bytes = contents.entries.reduce((total, entry) => total + entry.bytes, 0);
|
|
161
|
+
const rows = [
|
|
162
|
+
['directory', contents.directory],
|
|
163
|
+
['entries', String(contents.entries.length)],
|
|
164
|
+
['size', formatBytes(bytes)],
|
|
165
|
+
];
|
|
166
|
+
if (contents.unreadable.length > 0)
|
|
167
|
+
rows.push(['unreadable', String(contents.unreadable.length)]);
|
|
168
|
+
const width = Math.max(...rows.map(([label]) => label.length));
|
|
169
|
+
for (const [label, value] of rows) {
|
|
170
|
+
process.stdout.write(`${label.padEnd(width)} ${value}\n`);
|
|
171
|
+
}
|
|
172
|
+
warnAboutSkipped(contents);
|
|
173
|
+
return 0;
|
|
174
|
+
}
|
|
175
|
+
/**
|
|
176
|
+
* Deletes the store's own files and the directory when nothing else is left
|
|
177
|
+
* in it. Files the store never wrote stay: `cache.dir` can point anywhere,
|
|
178
|
+
* and a mistyped one must not take a project's files with it.
|
|
179
|
+
*/
|
|
180
|
+
async function clear(contents) {
|
|
181
|
+
const removable = [
|
|
182
|
+
...contents.entries.map((entry) => `${entry.keyHash}.json`),
|
|
183
|
+
...contents.unreadable.map((file) => file.name),
|
|
184
|
+
];
|
|
185
|
+
for (const name of removable) {
|
|
186
|
+
await rm(path.join(contents.directory, name), { force: true });
|
|
187
|
+
}
|
|
188
|
+
// Leftover temporaries are neither entries nor foreign files; they go too.
|
|
189
|
+
const temporaries = await removeTemporaries(contents.directory);
|
|
190
|
+
const removed = removable.length + temporaries;
|
|
191
|
+
if (contents.foreign.length === 0)
|
|
192
|
+
await rmdir(contents.directory).catch(() => undefined);
|
|
193
|
+
process.stdout.write(removed === 0
|
|
194
|
+
? `no trace cache entries to clear in ${contents.directory}\n`
|
|
195
|
+
: `cleared ${removed} file(s) from ${contents.directory}\n`);
|
|
196
|
+
warnAboutSkipped(contents);
|
|
197
|
+
return 0;
|
|
198
|
+
}
|
|
199
|
+
async function removeTemporaries(directory) {
|
|
200
|
+
let names;
|
|
201
|
+
try {
|
|
202
|
+
names = await readdir(directory);
|
|
203
|
+
}
|
|
204
|
+
catch {
|
|
205
|
+
return 0;
|
|
206
|
+
}
|
|
207
|
+
let removed = 0;
|
|
208
|
+
for (const name of names) {
|
|
209
|
+
if (!TEMPORARY_FILE.test(name))
|
|
210
|
+
continue;
|
|
211
|
+
await rm(path.join(directory, name), { force: true });
|
|
212
|
+
removed += 1;
|
|
213
|
+
}
|
|
214
|
+
return removed;
|
|
215
|
+
}
|
|
216
|
+
/** Names what was left alone, so a surprising count has an explanation. */
|
|
217
|
+
function warnAboutSkipped(contents) {
|
|
218
|
+
if (contents.unreadable.length > 0) {
|
|
219
|
+
process.stderr.write(`${contents.unreadable.length} file(s) in ${contents.directory} are not readable trace-1 entries; a run treats each as a miss\n`);
|
|
220
|
+
}
|
|
221
|
+
if (contents.foreign.length > 0) {
|
|
222
|
+
process.stderr.write(`${contents.foreign.length} file(s) in ${contents.directory} are not cache files and were left alone: ${contents.foreign.join(', ')}\n`);
|
|
223
|
+
}
|
|
224
|
+
}
|
|
225
|
+
/** Coarse age of one entry: the unit a reviewer cares about, nothing finer. */
|
|
226
|
+
function formatAge(createdAt, now) {
|
|
227
|
+
const ms = now - Date.parse(createdAt);
|
|
228
|
+
if (!Number.isFinite(ms))
|
|
229
|
+
return '-';
|
|
230
|
+
// A future timestamp is a clock difference between two machines, not an age.
|
|
231
|
+
if (ms < 60_000)
|
|
232
|
+
return ms < 0 ? '0m' : '<1m';
|
|
233
|
+
const minutes = Math.floor(ms / 60_000);
|
|
234
|
+
if (minutes < 60)
|
|
235
|
+
return `${minutes}m`;
|
|
236
|
+
const hours = Math.floor(minutes / 60);
|
|
237
|
+
if (hours < 24)
|
|
238
|
+
return `${hours}h`;
|
|
239
|
+
return `${Math.floor(hours / 24)}d`;
|
|
240
|
+
}
|
|
241
|
+
function formatBytes(bytes) {
|
|
242
|
+
if (bytes < 1024)
|
|
243
|
+
return `${bytes} B`;
|
|
244
|
+
const kib = bytes / 1024;
|
|
245
|
+
if (kib < 1024)
|
|
246
|
+
return `${kib.toFixed(1)} KiB`;
|
|
247
|
+
return `${(kib / 1024).toFixed(1)} MiB`;
|
|
248
|
+
}
|
|
249
|
+
//# sourceMappingURL=cache.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"cache.js","sourceRoot":"","sources":["../../src/cli/cache.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"docs-url.d.ts","sourceRoot":"","sources":["../../src/cli/docs-url.ts"],"names":[],"mappings":"AAAA,gDAAgD;AAChD,eAAO,MAAM,QAAQ,uCAAuC,CAAC"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"docs-url.js","sourceRoot":"","sources":["../../src/cli/docs-url.ts"],"names":[],"mappings":"AAAA,gDAAgD;AAChD,MAAM,CAAC,MAAM,QAAQ,GAAG,oCAAoC,CAAC"}
|
|
@@ -0,0 +1,4 @@
|
|
|
1
|
+
/** `e2e guide`: prints the bundled agent skill for agents and people who do not have it installed. */
|
|
2
|
+
/** Prints the overview or one topic to stdout; an unknown topic exits 2. */
|
|
3
|
+
export declare function guide(topic: string | undefined): number;
|
|
4
|
+
//# sourceMappingURL=guide.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"guide.d.ts","sourceRoot":"","sources":["../../src/cli/guide.ts"],"names":[],"mappings":"AAAA,sGAAsG;AAItG,4EAA4E;AAC5E,wBAAgB,KAAK,CAAC,KAAK,EAAE,MAAM,GAAG,SAAS,GAAG,MAAM,CAavD"}
|
|
@@ -0,0 +1,16 @@
|
|
|
1
|
+
/** `e2e guide`: prints the bundled agent skill for agents and people who do not have it installed. */
|
|
2
|
+
import { MISSING_SKILL_MESSAGE, readGuide, skillTopics } from './skill.js';
|
|
3
|
+
/** Prints the overview or one topic to stdout; an unknown topic exits 2. */
|
|
4
|
+
export function guide(topic) {
|
|
5
|
+
const text = readGuide(topic);
|
|
6
|
+
if (text === undefined) {
|
|
7
|
+
const topics = skillTopics();
|
|
8
|
+
process.stderr.write(topics.length === 0
|
|
9
|
+
? `${MISSING_SKILL_MESSAGE}\n`
|
|
10
|
+
: `unknown topic "${topic}"; topics: ${topics.join(', ')}\n`);
|
|
11
|
+
return 2;
|
|
12
|
+
}
|
|
13
|
+
process.stdout.write(text.endsWith('\n') ? text : `${text}\n`);
|
|
14
|
+
return 0;
|
|
15
|
+
}
|
|
16
|
+
//# sourceMappingURL=guide.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"guide.js","sourceRoot":"","sources":["../../src/cli/guide.ts"],"names":[],"mappings":"AAAA,sGAAsG;AAEtG,OAAO,EAAE,qBAAqB,EAAE,SAAS,EAAE,WAAW,EAAE,MAAM,YAAY,CAAC;AAE3E,4EAA4E;AAC5E,MAAM,UAAU,KAAK,CAAC,KAAyB;IAC7C,MAAM,IAAI,GAAG,SAAS,CAAC,KAAK,CAAC,CAAC;IAC9B,IAAI,IAAI,KAAK,SAAS,EAAE,CAAC;QACvB,MAAM,MAAM,GAAG,WAAW,EAAE,CAAC;QAC7B,OAAO,CAAC,MAAM,CAAC,KAAK,CAClB,MAAM,CAAC,MAAM,KAAK,CAAC;YACjB,CAAC,CAAC,GAAG,qBAAqB,IAAI;YAC9B,CAAC,CAAC,kBAAkB,KAAK,cAAc,MAAM,CAAC,IAAI,CAAC,IAAI,CAAC,IAAI,CAC/D,CAAC;QACF,OAAO,CAAC,CAAC;IACX,CAAC;IACD,OAAO,CAAC,MAAM,CAAC,KAAK,CAAC,IAAI,CAAC,QAAQ,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,GAAG,IAAI,IAAI,CAAC,CAAC;IAC/D,OAAO,CAAC,CAAC;AACX,CAAC"}
|
package/dist/cli/index.d.ts
CHANGED
package/dist/cli/index.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/cli/index.ts"],"names":[],"mappings":"AAAA,
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/cli/index.ts"],"names":[],"mappings":"AAAA,eAAe;AA4Wf,4CAA4C;AAC5C,wBAAsB,IAAI,CAAC,IAAI,EAAE,SAAS,MAAM,EAAE,GAAG,OAAO,CAAC,IAAI,CAAC,CAcjE"}
|