@post-print/agent-test 0.1.10 → 0.1.13
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 +52 -6
- package/dist/cli-entry.d.ts.map +1 -1
- package/dist/cli-entry.js +1 -1
- package/dist/cli-entry.js.map +1 -1
- package/dist/cli.js +54 -5
- package/dist/cli.js.map +1 -1
- package/dist/doctor.d.ts +15 -0
- package/dist/doctor.d.ts.map +1 -0
- package/dist/doctor.js +49 -0
- package/dist/doctor.js.map +1 -0
- package/dist/html-report.d.ts +11 -0
- package/dist/html-report.d.ts.map +1 -0
- package/dist/html-report.js +462 -0
- package/dist/html-report.js.map +1 -0
- package/dist/index.d.ts +2 -1
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +2 -1
- package/dist/index.js.map +1 -1
- package/dist/live-isolation.d.ts +23 -0
- package/dist/live-isolation.d.ts.map +1 -1
- package/dist/live-isolation.js +125 -14
- package/dist/live-isolation.js.map +1 -1
- package/dist/live-timeout.d.ts +11 -0
- package/dist/live-timeout.d.ts.map +1 -0
- package/dist/live-timeout.js +29 -0
- package/dist/live-timeout.js.map +1 -0
- package/dist/progress.d.ts.map +1 -1
- package/dist/progress.js +2 -1
- package/dist/progress.js.map +1 -1
- package/dist/record-trace.d.ts +18 -0
- package/dist/record-trace.d.ts.map +1 -1
- package/dist/record-trace.js +47 -7
- package/dist/record-trace.js.map +1 -1
- package/dist/run-suite.d.ts +6 -0
- package/dist/run-suite.d.ts.map +1 -1
- package/dist/run-suite.js +124 -52
- package/dist/run-suite.js.map +1 -1
- package/dist/scenario-seed.d.ts +8 -0
- package/dist/scenario-seed.d.ts.map +1 -1
- package/dist/scenario-seed.js +31 -0
- package/dist/scenario-seed.js.map +1 -1
- package/dist/theme.d.ts.map +1 -1
- package/dist/theme.js +3 -9
- package/dist/theme.js.map +1 -1
- package/dist/types.d.ts +3 -1
- package/dist/types.d.ts.map +1 -1
- package/dist/warnings.d.ts.map +1 -1
- package/dist/warnings.js +1 -2
- package/dist/warnings.js.map +1 -1
- package/package.json +5 -2
package/README.md
CHANGED
|
@@ -1,29 +1,75 @@
|
|
|
1
1
|
# @post-print/agent-test
|
|
2
2
|
|
|
3
|
+
**Source of truth for** agent-test package.
|
|
4
|
+
|
|
5
|
+
<!-- doc-meta: owner=eng | last-reviewed=2026-07-16 -->
|
|
6
|
+
|
|
3
7
|
Jest-shaped agent scenario runner built on `@post-print/agent-harness`.
|
|
4
8
|
|
|
5
|
-
##
|
|
9
|
+
## In-repo smoke (this monorepo)
|
|
10
|
+
|
|
11
|
+
After `bun run build` at the repo root:
|
|
12
|
+
|
|
13
|
+
```bash
|
|
14
|
+
node packages/test/dist/cli.js --suites-dir packages/test/fixtures --suite smoke
|
|
15
|
+
node packages/test/dist/cli.js --doctor
|
|
16
|
+
```
|
|
17
|
+
|
|
18
|
+
There is no top-level `agent-suites/` here — consumer examples below assume a consuming repo. Live `--live` needs an **exported** `CURSOR_API_KEY` (copy repo-root `.env.example`; the CLI does not auto-load `.env`).
|
|
19
|
+
|
|
20
|
+
## CLI (consumers, Node >= 22)
|
|
6
21
|
|
|
7
22
|
Works under **Node >= 22** (the published `agent-test` bin):
|
|
8
23
|
|
|
9
24
|
```bash
|
|
10
25
|
npx agent-test --suites-dir agent-suites
|
|
11
|
-
npx agent-test --suite ambient-routing
|
|
12
|
-
npx agent-test --live --suite ambient-routing # CURSOR_API_KEY required
|
|
26
|
+
npx agent-test --suites-dir agent-suites --suite ambient-routing
|
|
27
|
+
npx agent-test --suites-dir agent-suites --live --suite ambient-routing # exported CURSOR_API_KEY required
|
|
28
|
+
npx agent-test --doctor
|
|
13
29
|
```
|
|
14
30
|
|
|
15
31
|
Bun is fine for local package development (`bun install` / `bun run build` in this monorepo), but consumers do not need Bun to run suites.
|
|
16
32
|
|
|
17
|
-
Default suites root: `agent-suites
|
|
33
|
+
Default suites root: `agent-suites/` (must exist, or pass `--suites-dir`).
|
|
18
34
|
|
|
19
|
-
Live output always uses ANSI color (including under Cursor agent shells that set `NO_COLOR`).
|
|
35
|
+
Live output always uses ANSI color (including under Cursor agent shells that set `NO_COLOR`).
|
|
36
|
+
|
|
37
|
+
## Environment variables
|
|
38
|
+
|
|
39
|
+
See repo-root `.env.example`. Common knobs:
|
|
40
|
+
|
|
41
|
+
| Variable | Purpose |
|
|
42
|
+
| ------------------------------------------- | ------------------------------------------------ |
|
|
43
|
+
| `CURSOR_API_KEY` | Required for `--live` and judge classifiers |
|
|
44
|
+
| `AGENT_TEST_VERBOSE` | Extra tips (e.g. OOM isolation) when `1` |
|
|
45
|
+
| `AGENT_TEST_VERBOSE_PATHS` | Print full paths when `1` |
|
|
46
|
+
| `AGENT_TEST_QUIET` | Suppress progress when `1` |
|
|
47
|
+
| `AGENT_TEST_TIMEOUT_MS` | Live hard timeout (default 600000; `0` disables) |
|
|
48
|
+
| `AGENT_TEST_ALLOW_IN_PLACE` | Allow `--no-worktree` live runs when `1` |
|
|
49
|
+
| `AGENT_TEST_NO_WORKTREE` | Disable worktree isolation when `1`/`true` |
|
|
50
|
+
| `AGENT_TEST_NO_ISOLATE` | Disable isolated subprocesses when `1` |
|
|
51
|
+
| `AGENT_TEST_SCENARIO_SETTLE_MS` | Settle delay between live scenarios |
|
|
52
|
+
| `CURSOR_AGENT_MODEL` / `CURSOR_JUDGE_MODEL` | Optional model overrides |
|
|
53
|
+
| `CURSOR_JUDGE_TEMPERATURE` | Optional judge temperature |
|
|
20
54
|
|
|
21
55
|
## Live dogfood
|
|
22
56
|
|
|
23
|
-
Live runs need `CURSOR_API_KEY` and a suites directory. Preflight fails when `--suites-dir` is
|
|
57
|
+
Live runs need `CURSOR_API_KEY` and a suites directory that exists. Preflight fails when the resolved suites directory is missing (default `agent-suites/` if `--suites-dir` is omitted).
|
|
24
58
|
|
|
25
59
|
Passing live runs write staging traces under `$TMPDIR/agent-spec/sessions/<pid>-<timestamp>/` (removed on exit unless `--keep-recordings`). Use `--record-fixtures` to overwrite each scenario's committed `replayTrace` path. `--no-worktree` requires `AGENT_TEST_ALLOW_IN_PLACE=1`.
|
|
26
60
|
|
|
61
|
+
Live agent runs have a **hard timeout** (default **10 minutes**, override with `--timeout-ms` or `AGENT_TEST_TIMEOUT_MS`; disable with `--no-timeout` or `AGENT_TEST_TIMEOUT_MS=0`). If the agent invokes `AskQuestion` or similar user-input tools, the harness fails fast with a clear error — live mode is single-shot and cannot supply follow-up turns. Use `--allow-user-input` only for intentional multi-turn dogfood (the run may still hang waiting for stdin).
|
|
62
|
+
|
|
63
|
+
### Dialogue skills in live runs
|
|
64
|
+
|
|
65
|
+
Skills that expect multi-turn Socratic dialogue (for example `crystallize`) will hang or fail in `--live` unless the scenario is written for one-shot completion:
|
|
66
|
+
|
|
67
|
+
- **Replay-only** — commit a golden trace where the agent finishes without asking questions; use `host: "replay"` or `skip: true` with live skipped at suite level.
|
|
68
|
+
- **One-shot live prompt** — instruct the agent to mirror intent and emit the final artifact in a single turn (`no AskQuestion; produce Crystallized idea now`).
|
|
69
|
+
- **Ambient routing** — fuzzy-intent scenarios that only require mirroring + one assumption are naturally one-shot; full crystallize dialogue is not.
|
|
70
|
+
|
|
71
|
+
Do not weaken dialogue-first product skills for CI; reshape the suite contract instead.
|
|
72
|
+
|
|
27
73
|
## Library
|
|
28
74
|
|
|
29
75
|
```ts
|
package/dist/cli-entry.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"cli-entry.d.ts","sourceRoot":"","sources":["../src/cli-entry.ts"],"names":[],"mappings":"AAGA,oFAAoF;AACpF,wBAAgB,eAAe,CAAC,IAAI,EAAE,MAAM,GAAG,MAAM,CAMpD;AAED;;;GAGG;AACH,wBAAgB,SAAS,
|
|
1
|
+
{"version":3,"file":"cli-entry.d.ts","sourceRoot":"","sources":["../src/cli-entry.ts"],"names":[],"mappings":"AAGA,oFAAoF;AACpF,wBAAgB,eAAe,CAAC,IAAI,EAAE,MAAM,GAAG,MAAM,CAMpD;AAED;;;GAGG;AACH,wBAAgB,SAAS,CAAC,KAAK,EAAE,MAAM,GAAG,SAAS,EAAE,SAAS,EAAE,MAAM,GAAG,OAAO,CAE/E"}
|
package/dist/cli-entry.js
CHANGED
|
@@ -14,6 +14,6 @@ export function resolveRealPath(path) {
|
|
|
14
14
|
* Compares real paths so `node_modules/.bin/agent-test` matches `dist/cli.js`.
|
|
15
15
|
*/
|
|
16
16
|
export function isCliMain(argv1, entryPath) {
|
|
17
|
-
return
|
|
17
|
+
return argv1 !== undefined && resolveRealPath(argv1) === resolveRealPath(entryPath);
|
|
18
18
|
}
|
|
19
19
|
//# sourceMappingURL=cli-entry.js.map
|
package/dist/cli-entry.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"cli-entry.js","sourceRoot":"","sources":["../src/cli-entry.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,YAAY,EAAE,MAAM,SAAS,CAAC;AACvC,OAAO,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AAEpC,oFAAoF;AACpF,MAAM,UAAU,eAAe,CAAC,IAAY;IAC3C,IAAI,CAAC;QACJ,OAAO,YAAY,CAAC,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC;IACpC,CAAC;IAAC,MAAM,CAAC;QACR,OAAO,OAAO,CAAC,IAAI,CAAC,CAAC;IACtB,CAAC;AACF,CAAC;AAED;;;GAGG;AACH,MAAM,UAAU,SAAS,
|
|
1
|
+
{"version":3,"file":"cli-entry.js","sourceRoot":"","sources":["../src/cli-entry.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,YAAY,EAAE,MAAM,SAAS,CAAC;AACvC,OAAO,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AAEpC,oFAAoF;AACpF,MAAM,UAAU,eAAe,CAAC,IAAY;IAC3C,IAAI,CAAC;QACJ,OAAO,YAAY,CAAC,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC;IACpC,CAAC;IAAC,MAAM,CAAC;QACR,OAAO,OAAO,CAAC,IAAI,CAAC,CAAC;IACtB,CAAC;AACF,CAAC;AAED;;;GAGG;AACH,MAAM,UAAU,SAAS,CAAC,KAAyB,EAAE,SAAiB;IACrE,OAAO,KAAK,KAAK,SAAS,IAAI,eAAe,CAAC,KAAK,CAAC,KAAK,eAAe,CAAC,SAAS,CAAC,CAAC;AACrF,CAAC"}
|
package/dist/cli.js
CHANGED
|
@@ -1,7 +1,9 @@
|
|
|
1
1
|
#!/usr/bin/env -S node --disable-warning=ExperimentalWarning
|
|
2
2
|
import { fileURLToPath } from "node:url";
|
|
3
|
-
import { cleanupStaleScenarioWorktrees
|
|
3
|
+
import { cleanupStaleScenarioWorktrees } from "@post-print/agent-harness";
|
|
4
4
|
import { isCliMain } from "./cli-entry.js";
|
|
5
|
+
import { runDoctor } from "./doctor.js";
|
|
6
|
+
import { writeHtmlReport } from "./html-report.js";
|
|
5
7
|
import { assertLiveDogfoodPreflight } from "./preflight.js";
|
|
6
8
|
import { logProgress } from "./progress.js";
|
|
7
9
|
import { cleanupLegacyRepoRecordings, cleanupStagingSession, createLiveStagingSessionId, getLiveStagingSessionRoot, } from "./record-trace.js";
|
|
@@ -23,6 +25,11 @@ function parseArgs(argv) {
|
|
|
23
25
|
let judge;
|
|
24
26
|
let worktree;
|
|
25
27
|
let keepRecordings = false;
|
|
28
|
+
let timeoutMs;
|
|
29
|
+
let noTimeout = false;
|
|
30
|
+
let allowUserInput = false;
|
|
31
|
+
let doctor = false;
|
|
32
|
+
let htmlReport = true;
|
|
26
33
|
for (let i = 2; i < argv.length; i++) {
|
|
27
34
|
const token = argv[i];
|
|
28
35
|
if (token === "--host" && argv[i + 1]) {
|
|
@@ -62,6 +69,24 @@ function parseArgs(argv) {
|
|
|
62
69
|
else if (token === "--no-worktree") {
|
|
63
70
|
worktree = false;
|
|
64
71
|
}
|
|
72
|
+
else if (token === "--timeout-ms" && argv[i + 1]) {
|
|
73
|
+
const parsed = Number(argv[++i]);
|
|
74
|
+
if (Number.isFinite(parsed) && parsed > 0) {
|
|
75
|
+
timeoutMs = parsed;
|
|
76
|
+
}
|
|
77
|
+
}
|
|
78
|
+
else if (token === "--no-timeout") {
|
|
79
|
+
noTimeout = true;
|
|
80
|
+
}
|
|
81
|
+
else if (token === "--allow-user-input") {
|
|
82
|
+
allowUserInput = true;
|
|
83
|
+
}
|
|
84
|
+
else if (token === "--doctor") {
|
|
85
|
+
doctor = true;
|
|
86
|
+
}
|
|
87
|
+
else if (token === "--no-html-report") {
|
|
88
|
+
htmlReport = false;
|
|
89
|
+
}
|
|
65
90
|
else if (token && !token.startsWith("-")) {
|
|
66
91
|
filter = token;
|
|
67
92
|
}
|
|
@@ -85,6 +110,11 @@ function parseArgs(argv) {
|
|
|
85
110
|
judge,
|
|
86
111
|
worktree,
|
|
87
112
|
keepRecordings,
|
|
113
|
+
timeoutMs: noTimeout ? 0 : timeoutMs,
|
|
114
|
+
noTimeout,
|
|
115
|
+
allowUserInput,
|
|
116
|
+
doctor,
|
|
117
|
+
htmlReport,
|
|
88
118
|
};
|
|
89
119
|
}
|
|
90
120
|
async function cleanupLiveRunArtifacts(cwd, stagingSessionRoot, keepRecordings) {
|
|
@@ -106,13 +136,18 @@ async function cleanupLiveRunArtifacts(cwd, stagingSessionRoot, keepRecordings)
|
|
|
106
136
|
}
|
|
107
137
|
async function main() {
|
|
108
138
|
const args = parseArgs(process.argv);
|
|
139
|
+
if (args.doctor) {
|
|
140
|
+
const report = runDoctor();
|
|
141
|
+
for (const message of report.messages) {
|
|
142
|
+
console.log(message);
|
|
143
|
+
}
|
|
144
|
+
return report.ok ? 0 : 1;
|
|
145
|
+
}
|
|
109
146
|
const isChild = process.env.AGENT_TEST_CHILD === "1";
|
|
110
147
|
const verbose = process.env.AGENT_TEST_VERBOSE === "1";
|
|
111
148
|
const stagingSessionId = args.stagingSessionId?.trim() ||
|
|
112
149
|
process.env.AGENT_TEST_STAGING_SESSION_ID?.trim() ||
|
|
113
|
-
(args.live || (args.record && !args.recordFixtures)
|
|
114
|
-
? createLiveStagingSessionId()
|
|
115
|
-
: undefined);
|
|
150
|
+
(args.live || (args.record && !args.recordFixtures) ? createLiveStagingSessionId() : undefined);
|
|
116
151
|
const stagingSessionRoot = stagingSessionId
|
|
117
152
|
? getLiveStagingSessionRoot(stagingSessionId)
|
|
118
153
|
: undefined;
|
|
@@ -137,8 +172,8 @@ async function main() {
|
|
|
137
172
|
console.error("Live dogfood requires git worktree isolation. Set AGENT_TEST_ALLOW_IN_PLACE=1 to run in repo cwd (--no-worktree leaks agent edits into your working tree).");
|
|
138
173
|
return 1;
|
|
139
174
|
}
|
|
175
|
+
registerLiveRunHandlers();
|
|
140
176
|
if (!isChild) {
|
|
141
|
-
registerLiveRunHandlers();
|
|
142
177
|
const removed = await cleanupStaleScenarioWorktrees(args.cwd);
|
|
143
178
|
if (removed.length > 0) {
|
|
144
179
|
console.log(theme.warn(`Cleaned ${removed.length} stale agent-test worktree(s) from a prior crash`));
|
|
@@ -164,6 +199,8 @@ async function main() {
|
|
|
164
199
|
const reports = await runAllSuites({
|
|
165
200
|
...args,
|
|
166
201
|
stagingSessionId,
|
|
202
|
+
timeoutMs: args.timeoutMs,
|
|
203
|
+
allowUserInput: args.allowUserInput,
|
|
167
204
|
});
|
|
168
205
|
let exitCode = 0;
|
|
169
206
|
if (!isChild) {
|
|
@@ -183,6 +220,18 @@ async function main() {
|
|
|
183
220
|
}
|
|
184
221
|
console.log(theme.summary(report.suite, report.passed, report.failed, report.skipped));
|
|
185
222
|
}
|
|
223
|
+
if (args.htmlReport && reports.length > 0) {
|
|
224
|
+
try {
|
|
225
|
+
const reportPath = await writeHtmlReport(reports, {
|
|
226
|
+
host: args.host,
|
|
227
|
+
suitesDir: args.suitesDir,
|
|
228
|
+
});
|
|
229
|
+
console.log(`\n${theme.tip(`HTML report: ${reportPath}`)}`);
|
|
230
|
+
}
|
|
231
|
+
catch (error) {
|
|
232
|
+
console.warn(theme.warn(`HTML report failed: ${error instanceof Error ? error.message : String(error)}`));
|
|
233
|
+
}
|
|
234
|
+
}
|
|
186
235
|
}
|
|
187
236
|
else {
|
|
188
237
|
for (const report of reports) {
|
package/dist/cli.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"cli.js","sourceRoot":"","sources":["../src/cli.ts"],"names":[],"mappings":";AACA,OAAO,EAAE,aAAa,EAAE,MAAM,UAAU,CAAC;AAEzC,OAAO,
|
|
1
|
+
{"version":3,"file":"cli.js","sourceRoot":"","sources":["../src/cli.ts"],"names":[],"mappings":"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"}
|
package/dist/doctor.d.ts
ADDED
|
@@ -0,0 +1,15 @@
|
|
|
1
|
+
import { HEALTH_CHECK_PATH } from "@post-print/agent-harness";
|
|
2
|
+
export interface DoctorReport {
|
|
3
|
+
ok: boolean;
|
|
4
|
+
nodeMajor: number;
|
|
5
|
+
nodeOk: boolean;
|
|
6
|
+
cliPresent: boolean;
|
|
7
|
+
cursorApiKeySet: boolean;
|
|
8
|
+
health: typeof HEALTH_CHECK_PATH;
|
|
9
|
+
messages: string[];
|
|
10
|
+
}
|
|
11
|
+
/** Local diagnostics for agent-test install and live-run readiness. */
|
|
12
|
+
export declare function runDoctor(options?: {
|
|
13
|
+
cliPath?: string;
|
|
14
|
+
}): DoctorReport;
|
|
15
|
+
//# sourceMappingURL=doctor.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"doctor.d.ts","sourceRoot":"","sources":["../src/doctor.ts"],"names":[],"mappings":"AAKA,OAAO,EAAmB,iBAAiB,EAAE,MAAM,2BAA2B,CAAC;AAE/E,MAAM,WAAW,YAAY;IAC5B,EAAE,EAAE,OAAO,CAAC;IACZ,SAAS,EAAE,MAAM,CAAC;IAClB,MAAM,EAAE,OAAO,CAAC;IAChB,UAAU,EAAE,OAAO,CAAC;IACpB,eAAe,EAAE,OAAO,CAAC;IACzB,MAAM,EAAE,OAAO,iBAAiB,CAAC;IACjC,QAAQ,EAAE,MAAM,EAAE,CAAC;CACnB;AAED,uEAAuE;AACvE,wBAAgB,SAAS,CAAC,OAAO,CAAC,EAAE;IAAE,OAAO,CAAC,EAAE,MAAM,CAAA;CAAE,GAAG,YAAY,CA4CtE"}
|
package/dist/doctor.js
ADDED
|
@@ -0,0 +1,49 @@
|
|
|
1
|
+
import { accessSync, constants } from "node:fs";
|
|
2
|
+
import { createRequire } from "node:module";
|
|
3
|
+
import { dirname, join } from "node:path";
|
|
4
|
+
import { fileURLToPath } from "node:url";
|
|
5
|
+
import { getHealthStatus, HEALTH_CHECK_PATH } from "@post-print/agent-harness";
|
|
6
|
+
/** Local diagnostics for agent-test install and live-run readiness. */
|
|
7
|
+
export function runDoctor(options) {
|
|
8
|
+
const messages = [];
|
|
9
|
+
const nodeMajor = Number(process.versions.node.split(".")[0] ?? 0);
|
|
10
|
+
const nodeOk = nodeMajor >= 22;
|
|
11
|
+
if (!nodeOk) {
|
|
12
|
+
messages.push(`Node ${process.versions.node} is below the required >=22`);
|
|
13
|
+
}
|
|
14
|
+
const cliPath = options?.cliPath ?? join(dirname(fileURLToPath(import.meta.url)), "cli.js");
|
|
15
|
+
let cliPresent = false;
|
|
16
|
+
try {
|
|
17
|
+
accessSync(cliPath, constants.R_OK);
|
|
18
|
+
cliPresent = true;
|
|
19
|
+
}
|
|
20
|
+
catch {
|
|
21
|
+
messages.push(`CLI entry missing at ${cliPath} (run bun run build)`);
|
|
22
|
+
}
|
|
23
|
+
const cursorApiKeySet = Boolean(process.env.CURSOR_API_KEY?.trim());
|
|
24
|
+
if (!cursorApiKeySet) {
|
|
25
|
+
messages.push("CURSOR_API_KEY unset (required only for --live)");
|
|
26
|
+
}
|
|
27
|
+
try {
|
|
28
|
+
const require = createRequire(import.meta.url);
|
|
29
|
+
require.resolve("@post-print/agent-harness");
|
|
30
|
+
}
|
|
31
|
+
catch {
|
|
32
|
+
messages.push("@post-print/agent-harness not resolvable");
|
|
33
|
+
}
|
|
34
|
+
const health = getHealthStatus();
|
|
35
|
+
const ok = nodeOk && cliPresent && health.ok;
|
|
36
|
+
if (ok) {
|
|
37
|
+
messages.push(`doctor ${HEALTH_CHECK_PATH}: ready`);
|
|
38
|
+
}
|
|
39
|
+
return {
|
|
40
|
+
ok,
|
|
41
|
+
nodeMajor,
|
|
42
|
+
nodeOk,
|
|
43
|
+
cliPresent,
|
|
44
|
+
cursorApiKeySet,
|
|
45
|
+
health: HEALTH_CHECK_PATH,
|
|
46
|
+
messages,
|
|
47
|
+
};
|
|
48
|
+
}
|
|
49
|
+
//# sourceMappingURL=doctor.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"doctor.js","sourceRoot":"","sources":["../src/doctor.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,UAAU,EAAE,SAAS,EAAE,MAAM,SAAS,CAAC;AAChD,OAAO,EAAE,aAAa,EAAE,MAAM,aAAa,CAAC;AAC5C,OAAO,EAAE,OAAO,EAAE,IAAI,EAAE,MAAM,WAAW,CAAC;AAC1C,OAAO,EAAE,aAAa,EAAE,MAAM,UAAU,CAAC;AAEzC,OAAO,EAAE,eAAe,EAAE,iBAAiB,EAAE,MAAM,2BAA2B,CAAC;AAY/E,uEAAuE;AACvE,MAAM,UAAU,SAAS,CAAC,OAA8B;IACvD,MAAM,QAAQ,GAAa,EAAE,CAAC;IAC9B,MAAM,SAAS,GAAG,MAAM,CAAC,OAAO,CAAC,QAAQ,CAAC,IAAI,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC;IACnE,MAAM,MAAM,GAAG,SAAS,IAAI,EAAE,CAAC;IAC/B,IAAI,CAAC,MAAM,EAAE,CAAC;QACb,QAAQ,CAAC,IAAI,CAAC,QAAQ,OAAO,CAAC,QAAQ,CAAC,IAAI,6BAA6B,CAAC,CAAC;IAC3E,CAAC;IAED,MAAM,OAAO,GAAG,OAAO,EAAE,OAAO,IAAI,IAAI,CAAC,OAAO,CAAC,aAAa,CAAC,OAAO,IAAI,CAAC,GAAG,CAAC,CAAC,EAAE,QAAQ,CAAC,CAAC;IAC5F,IAAI,UAAU,GAAG,KAAK,CAAC;IACvB,IAAI,CAAC;QACJ,UAAU,CAAC,OAAO,EAAE,SAAS,CAAC,IAAI,CAAC,CAAC;QACpC,UAAU,GAAG,IAAI,CAAC;IACnB,CAAC;IAAC,MAAM,CAAC;QACR,QAAQ,CAAC,IAAI,CAAC,wBAAwB,OAAO,sBAAsB,CAAC,CAAC;IACtE,CAAC;IAED,MAAM,eAAe,GAAG,OAAO,CAAC,OAAO,CAAC,GAAG,CAAC,cAAc,EAAE,IAAI,EAAE,CAAC,CAAC;IACpE,IAAI,CAAC,eAAe,EAAE,CAAC;QACtB,QAAQ,CAAC,IAAI,CAAC,iDAAiD,CAAC,CAAC;IAClE,CAAC;IAED,IAAI,CAAC;QACJ,MAAM,OAAO,GAAG,aAAa,CAAC,OAAO,IAAI,CAAC,GAAG,CAAC,CAAC;QAC/C,OAAO,CAAC,OAAO,CAAC,2BAA2B,CAAC,CAAC;IAC9C,CAAC;IAAC,MAAM,CAAC;QACR,QAAQ,CAAC,IAAI,CAAC,0CAA0C,CAAC,CAAC;IAC3D,CAAC;IAED,MAAM,MAAM,GAAG,eAAe,EAAE,CAAC;IACjC,MAAM,EAAE,GAAG,MAAM,IAAI,UAAU,IAAI,MAAM,CAAC,EAAE,CAAC;IAC7C,IAAI,EAAE,EAAE,CAAC;QACR,QAAQ,CAAC,IAAI,CAAC,UAAU,iBAAiB,SAAS,CAAC,CAAC;IACrD,CAAC;IAED,OAAO;QACN,EAAE;QACF,SAAS;QACT,MAAM;QACN,UAAU;QACV,eAAe;QACf,MAAM,EAAE,iBAAiB;QACzB,QAAQ;KACR,CAAC;AACH,CAAC"}
|
|
@@ -0,0 +1,11 @@
|
|
|
1
|
+
import type { SuiteRunReport } from "./types.js";
|
|
2
|
+
export interface HtmlReportMeta {
|
|
3
|
+
generatedAt?: Date;
|
|
4
|
+
host?: string;
|
|
5
|
+
suitesDir?: string;
|
|
6
|
+
}
|
|
7
|
+
/** Build a self-contained HTML report for a completed suite run. */
|
|
8
|
+
export declare function renderHtmlReport(reports: SuiteRunReport[], meta?: HtmlReportMeta): string;
|
|
9
|
+
/** Write an HTML report under a fresh temp directory; returns the report file path. */
|
|
10
|
+
export declare function writeHtmlReport(reports: SuiteRunReport[], meta?: HtmlReportMeta): Promise<string>;
|
|
11
|
+
//# sourceMappingURL=html-report.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"html-report.d.ts","sourceRoot":"","sources":["../src/html-report.ts"],"names":[],"mappings":"AAMA,OAAO,KAAK,EAAkB,cAAc,EAAE,MAAM,YAAY,CAAC;AAEjE,MAAM,WAAW,cAAc;IAC9B,WAAW,CAAC,EAAE,IAAI,CAAC;IACnB,IAAI,CAAC,EAAE,MAAM,CAAC;IACd,SAAS,CAAC,EAAE,MAAM,CAAC;CACnB;AAmRD,oEAAoE;AACpE,wBAAgB,gBAAgB,CAAC,OAAO,EAAE,cAAc,EAAE,EAAE,IAAI,GAAE,cAAmB,GAAG,MAAM,CA0N7F;AAED,uFAAuF;AACvF,wBAAsB,eAAe,CACpC,OAAO,EAAE,cAAc,EAAE,EACzB,IAAI,GAAE,cAAmB,GACvB,OAAO,CAAC,MAAM,CAAC,CAMjB"}
|