nomoreide 0.1.25 → 0.1.27
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/dist/core/config-store.d.ts +3 -1
- package/dist/core/config-store.js +25 -0
- package/dist/core/config-store.js.map +1 -1
- package/dist/core/db/driver.d.ts +43 -0
- package/dist/core/db/driver.js +41 -0
- package/dist/core/db/driver.js.map +1 -0
- package/dist/core/db/mysql-driver.d.ts +19 -0
- package/dist/core/db/mysql-driver.js +95 -0
- package/dist/core/db/mysql-driver.js.map +1 -0
- package/dist/core/db/postgres-driver.d.ts +19 -0
- package/dist/core/db/postgres-driver.js +109 -0
- package/dist/core/db/postgres-driver.js.map +1 -0
- package/dist/core/db/sqlite-driver.d.ts +17 -0
- package/dist/core/db/sqlite-driver.js +68 -0
- package/dist/core/db/sqlite-driver.js.map +1 -0
- package/dist/core/db-peek.d.ts +49 -0
- package/dist/core/db-peek.js +150 -0
- package/dist/core/db-peek.js.map +1 -0
- package/dist/core/error-inbox.d.ts +20 -0
- package/dist/core/error-inbox.js +21 -6
- package/dist/core/error-inbox.js.map +1 -1
- package/dist/core/repro-bundle.d.ts +30 -0
- package/dist/core/repro-bundle.js +116 -0
- package/dist/core/repro-bundle.js.map +1 -0
- package/dist/core/test-runner.d.ts +69 -0
- package/dist/core/test-runner.js +199 -0
- package/dist/core/test-runner.js.map +1 -0
- package/dist/core/types.d.ts +14 -0
- package/dist/mcp/server.js +3 -0
- package/dist/mcp/server.js.map +1 -1
- package/dist/mcp/tools/context.d.ts +2 -0
- package/dist/mcp/tools/context.js.map +1 -1
- package/dist/mcp/tools/database.d.ts +8 -0
- package/dist/mcp/tools/database.js +52 -0
- package/dist/mcp/tools/database.js.map +1 -0
- package/dist/mcp/tools/index.d.ts +1 -1
- package/dist/mcp/tools/index.js +3 -0
- package/dist/mcp/tools/index.js.map +1 -1
- package/dist/web/client/assets/index-BSh_mD42.css +1 -0
- package/dist/web/client/assets/index-CD6SvvAp.js +26 -0
- package/dist/web/client/index.html +2 -2
- package/dist/web/routes/context.d.ts +6 -0
- package/dist/web/routes/context.js.map +1 -1
- package/dist/web/routes/database-routes.d.ts +3 -0
- package/dist/web/routes/database-routes.js +78 -0
- package/dist/web/routes/database-routes.js.map +1 -0
- package/dist/web/routes/errors-routes.js +13 -0
- package/dist/web/routes/errors-routes.js.map +1 -1
- package/dist/web/routes/index.js +2 -0
- package/dist/web/routes/index.js.map +1 -1
- package/dist/web/routes/service-routes.js +39 -0
- package/dist/web/routes/service-routes.js.map +1 -1
- package/dist/web/routes/shell-routes.js +1 -1
- package/dist/web/routes/shell-routes.js.map +1 -1
- package/dist/web/server.js +13 -0
- package/dist/web/server.js.map +1 -1
- package/package.json +8 -2
- package/dist/web/client/assets/index-Bxl18w2X.js +0 -24
- package/dist/web/client/assets/index-CgtUFH5U.css +0 -1
|
@@ -0,0 +1,150 @@
|
|
|
1
|
+
import { join } from "node:path";
|
|
2
|
+
import { readEnvFile, entriesFromLines } from "./env-file.js";
|
|
3
|
+
import { MysqlDriver } from "./db/mysql-driver.js";
|
|
4
|
+
import { PostgresDriver } from "./db/postgres-driver.js";
|
|
5
|
+
import { SqliteDriver } from "./db/sqlite-driver.js";
|
|
6
|
+
/**
|
|
7
|
+
* DB Peek: a read-only table browser. Owns its own bundled drivers (Postgres,
|
|
8
|
+
* MySQL, SQLite) — it never borrows the agent's MCP database tooling. Drivers
|
|
9
|
+
* are cached per connection URL and reused across requests.
|
|
10
|
+
*/
|
|
11
|
+
export class DbPeek {
|
|
12
|
+
configStore;
|
|
13
|
+
drivers = new Map();
|
|
14
|
+
constructor(options) {
|
|
15
|
+
this.configStore = options.configStore;
|
|
16
|
+
}
|
|
17
|
+
async listConnections() {
|
|
18
|
+
const config = await this.configStore.load();
|
|
19
|
+
return config.databases.map((connection) => ({
|
|
20
|
+
name: connection.name,
|
|
21
|
+
engine: connection.engine,
|
|
22
|
+
url: maskConnectionUrl(connection.engine, connection.url),
|
|
23
|
+
}));
|
|
24
|
+
}
|
|
25
|
+
async listTables(name) {
|
|
26
|
+
const driver = await this.driverFor(await this.resolve(name));
|
|
27
|
+
return driver.listTables();
|
|
28
|
+
}
|
|
29
|
+
async sampleRows(name, qualifiedName, limit) {
|
|
30
|
+
const connection = await this.resolve(name);
|
|
31
|
+
const driver = await this.driverFor(connection);
|
|
32
|
+
const table = await this.resolveTable(driver, qualifiedName);
|
|
33
|
+
const sample = await driver.sampleRows(table, limit);
|
|
34
|
+
return { engine: connection.engine, table, ...sample };
|
|
35
|
+
}
|
|
36
|
+
/** Test an unsaved connection without caching it. */
|
|
37
|
+
async test(engine, url) {
|
|
38
|
+
const driver = createDriver(engine, url);
|
|
39
|
+
try {
|
|
40
|
+
await driver.testConnection();
|
|
41
|
+
}
|
|
42
|
+
finally {
|
|
43
|
+
await driver.close().catch(() => { });
|
|
44
|
+
}
|
|
45
|
+
}
|
|
46
|
+
/** Scan registered services' `.env` files for usable connection strings. */
|
|
47
|
+
async detectFromEnv() {
|
|
48
|
+
const config = await this.configStore.load();
|
|
49
|
+
const found = [];
|
|
50
|
+
const seen = new Set();
|
|
51
|
+
for (const service of config.services) {
|
|
52
|
+
if (!service.cwd)
|
|
53
|
+
continue;
|
|
54
|
+
const { exists, lines } = await readEnvFile(join(service.cwd, ".env"));
|
|
55
|
+
if (!exists)
|
|
56
|
+
continue;
|
|
57
|
+
for (const { key, value } of entriesFromLines(lines)) {
|
|
58
|
+
const engine = engineFromUrl(value);
|
|
59
|
+
if (!engine)
|
|
60
|
+
continue;
|
|
61
|
+
const dedupe = `${engine}:${value}`;
|
|
62
|
+
if (seen.has(dedupe))
|
|
63
|
+
continue;
|
|
64
|
+
seen.add(dedupe);
|
|
65
|
+
found.push({
|
|
66
|
+
service: service.name,
|
|
67
|
+
key,
|
|
68
|
+
engine,
|
|
69
|
+
url: value,
|
|
70
|
+
maskedUrl: maskConnectionUrl(engine, value),
|
|
71
|
+
});
|
|
72
|
+
}
|
|
73
|
+
}
|
|
74
|
+
return found;
|
|
75
|
+
}
|
|
76
|
+
async closeAll() {
|
|
77
|
+
await Promise.all([...this.drivers.values()].map((driver) => driver.close().catch(() => { })));
|
|
78
|
+
this.drivers.clear();
|
|
79
|
+
}
|
|
80
|
+
async resolve(name) {
|
|
81
|
+
const config = await this.configStore.load();
|
|
82
|
+
const connection = config.databases.find((item) => item.name === name);
|
|
83
|
+
if (!connection) {
|
|
84
|
+
throw new Error(`Database connection "${name}" is not registered.`);
|
|
85
|
+
}
|
|
86
|
+
return connection;
|
|
87
|
+
}
|
|
88
|
+
async driverFor(connection) {
|
|
89
|
+
const key = `${connection.engine}::${connection.url}`;
|
|
90
|
+
let driver = this.drivers.get(key);
|
|
91
|
+
if (!driver) {
|
|
92
|
+
driver = createDriver(connection.engine, connection.url);
|
|
93
|
+
this.drivers.set(key, driver);
|
|
94
|
+
}
|
|
95
|
+
return driver;
|
|
96
|
+
}
|
|
97
|
+
/** Only browse tables that actually exist — blocks identifier injection. */
|
|
98
|
+
async resolveTable(driver, qualifiedName) {
|
|
99
|
+
const tables = await driver.listTables();
|
|
100
|
+
const table = tables.find((item) => item.qualifiedName === qualifiedName);
|
|
101
|
+
if (!table) {
|
|
102
|
+
throw new Error(`Table "${qualifiedName}" not found.`);
|
|
103
|
+
}
|
|
104
|
+
return table;
|
|
105
|
+
}
|
|
106
|
+
}
|
|
107
|
+
function createDriver(engine, url) {
|
|
108
|
+
switch (engine) {
|
|
109
|
+
case "postgres":
|
|
110
|
+
return new PostgresDriver(url);
|
|
111
|
+
case "mysql":
|
|
112
|
+
return new MysqlDriver(url);
|
|
113
|
+
case "sqlite":
|
|
114
|
+
return new SqliteDriver(url);
|
|
115
|
+
default:
|
|
116
|
+
throw new Error(`Unsupported database engine: ${engine}`);
|
|
117
|
+
}
|
|
118
|
+
}
|
|
119
|
+
/** Guess an engine from a connection string or file path; null if unrecognized. */
|
|
120
|
+
export function engineFromUrl(value) {
|
|
121
|
+
const v = value.trim();
|
|
122
|
+
if (/^postgres(ql)?:\/\//i.test(v))
|
|
123
|
+
return "postgres";
|
|
124
|
+
if (/^mysql:\/\//i.test(v) || /^mariadb:\/\//i.test(v))
|
|
125
|
+
return "mysql";
|
|
126
|
+
if (/^sqlite:\/\//i.test(v) || /^file:.+\.(db|sqlite|sqlite3)/i.test(v)) {
|
|
127
|
+
return "sqlite";
|
|
128
|
+
}
|
|
129
|
+
if (/\.(db|sqlite|sqlite3)$/i.test(v))
|
|
130
|
+
return "sqlite";
|
|
131
|
+
return null;
|
|
132
|
+
}
|
|
133
|
+
/** Redact the password from a URL; SQLite paths are returned unchanged. */
|
|
134
|
+
export function maskConnectionUrl(engine, url) {
|
|
135
|
+
if (engine === "sqlite")
|
|
136
|
+
return url;
|
|
137
|
+
try {
|
|
138
|
+
const parsed = new URL(url);
|
|
139
|
+
if (parsed.password)
|
|
140
|
+
parsed.password = "****";
|
|
141
|
+
return parsed.toString();
|
|
142
|
+
}
|
|
143
|
+
catch {
|
|
144
|
+
// Not a parseable URL — mask the middle defensively.
|
|
145
|
+
if (url.length <= 8)
|
|
146
|
+
return "****";
|
|
147
|
+
return `${url.slice(0, 4)}****${url.slice(-4)}`;
|
|
148
|
+
}
|
|
149
|
+
}
|
|
150
|
+
//# sourceMappingURL=db-peek.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"db-peek.js","sourceRoot":"","sources":["../../src/core/db-peek.ts"],"names":[],"mappings":"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"}
|
|
@@ -26,6 +26,20 @@ export interface ErrorInboxPrompt {
|
|
|
26
26
|
/** Markdown payload ready to paste into an agent. */
|
|
27
27
|
prompt: string;
|
|
28
28
|
}
|
|
29
|
+
/** The raw building blocks behind an incident's prompt — reused by the repro bundle. */
|
|
30
|
+
export interface ErrorInboxContext {
|
|
31
|
+
incident: ErrorIncident;
|
|
32
|
+
/** Base service name (any `:test` suffix stripped). */
|
|
33
|
+
service: string;
|
|
34
|
+
/** Working directory used for diff/env resolution. */
|
|
35
|
+
serviceCwd: string;
|
|
36
|
+
/** Resolved absolute file path used for the diff, if any. */
|
|
37
|
+
file?: string;
|
|
38
|
+
/** Git diff of the affected file (empty when none/unavailable). */
|
|
39
|
+
diff: string;
|
|
40
|
+
/** Recent log lines from the service. */
|
|
41
|
+
recentLogs: string[];
|
|
42
|
+
}
|
|
29
43
|
interface ErrorInboxOptions {
|
|
30
44
|
logStore: LogStore;
|
|
31
45
|
configStore: ConfigStore;
|
|
@@ -63,6 +77,12 @@ export declare class ErrorInbox {
|
|
|
63
77
|
private recordIncident;
|
|
64
78
|
/** Assemble the copy-to-agent payload for an incident. */
|
|
65
79
|
buildPrompt(id: number): Promise<ErrorInboxPrompt | null>;
|
|
80
|
+
/**
|
|
81
|
+
* Gather the raw context for an incident — the affected file, its diff, and
|
|
82
|
+
* recent service logs — so callers (the prompt, the repro bundle) render their
|
|
83
|
+
* own markdown without duplicating the gathering logic.
|
|
84
|
+
*/
|
|
85
|
+
context(id: number): Promise<ErrorInboxContext | null>;
|
|
66
86
|
private serviceCwd;
|
|
67
87
|
private stateFor;
|
|
68
88
|
private evictOverflow;
|
package/dist/core/error-inbox.js
CHANGED
|
@@ -123,9 +123,25 @@ export class ErrorInbox {
|
|
|
123
123
|
}
|
|
124
124
|
/** Assemble the copy-to-agent payload for an incident. */
|
|
125
125
|
async buildPrompt(id) {
|
|
126
|
+
const context = await this.context(id);
|
|
127
|
+
if (!context)
|
|
128
|
+
return null;
|
|
129
|
+
return {
|
|
130
|
+
incident: context.incident,
|
|
131
|
+
file: context.file,
|
|
132
|
+
prompt: renderPrompt(context.incident, context.file, context.diff, context.recentLogs),
|
|
133
|
+
};
|
|
134
|
+
}
|
|
135
|
+
/**
|
|
136
|
+
* Gather the raw context for an incident — the affected file, its diff, and
|
|
137
|
+
* recent service logs — so callers (the prompt, the repro bundle) render their
|
|
138
|
+
* own markdown without duplicating the gathering logic.
|
|
139
|
+
*/
|
|
140
|
+
async context(id) {
|
|
126
141
|
const incident = this.byId.get(id);
|
|
127
142
|
if (!incident)
|
|
128
143
|
return null;
|
|
144
|
+
const service = incident.service.replace(/:test$/, "");
|
|
129
145
|
const serviceCwd = await this.serviceCwd(incident.service);
|
|
130
146
|
const resolvedFile = incident.file
|
|
131
147
|
? isAbsolute(incident.file)
|
|
@@ -144,16 +160,15 @@ export class ErrorInbox {
|
|
|
144
160
|
const recentLogs = this.logStore
|
|
145
161
|
.read(incident.service, PROMPT_LOG_LINES)
|
|
146
162
|
.map((entry) => entry.text);
|
|
147
|
-
return {
|
|
148
|
-
incident,
|
|
149
|
-
file: resolvedFile,
|
|
150
|
-
prompt: renderPrompt(incident, resolvedFile, diff, recentLogs),
|
|
151
|
-
};
|
|
163
|
+
return { incident, service, serviceCwd, file: resolvedFile, diff, recentLogs };
|
|
152
164
|
}
|
|
153
165
|
async serviceCwd(service) {
|
|
166
|
+
// Test-runner incidents are tagged `<service>:test`; resolve the base
|
|
167
|
+
// service so the affected-file diff still uses its working directory.
|
|
168
|
+
const baseService = service.replace(/:test$/, "");
|
|
154
169
|
try {
|
|
155
170
|
const config = await this.configStore.load();
|
|
156
|
-
const definition = config.services.find((item) => item.name ===
|
|
171
|
+
const definition = config.services.find((item) => item.name === baseService);
|
|
157
172
|
if (definition?.cwd) {
|
|
158
173
|
return isAbsolute(definition.cwd)
|
|
159
174
|
? definition.cwd
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"error-inbox.js","sourceRoot":"","sources":["../../src/core/error-inbox.ts"],"names":[],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"error-inbox.js","sourceRoot":"","sources":["../../src/core/error-inbox.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,30 @@
|
|
|
1
|
+
import type { ErrorInbox } from "./error-inbox.js";
|
|
2
|
+
import type { ProcessManager } from "./process-manager.js";
|
|
3
|
+
export interface ReproBundle {
|
|
4
|
+
incidentId: number;
|
|
5
|
+
markdown: string;
|
|
6
|
+
/** Set when the bundle was also written to disk. */
|
|
7
|
+
savedPath?: string;
|
|
8
|
+
}
|
|
9
|
+
interface ReproBundleOptions {
|
|
10
|
+
errorInbox: ErrorInbox;
|
|
11
|
+
manager: ProcessManager;
|
|
12
|
+
/** Directory for saved bundles; defaults to `.nomoreide/repros`. */
|
|
13
|
+
reproDir?: string;
|
|
14
|
+
}
|
|
15
|
+
/**
|
|
16
|
+
* Assembles a "share my bug" artifact for an Error Inbox incident: the error
|
|
17
|
+
* excerpt, the affected-file diff, recent logs, the service's runtime state,
|
|
18
|
+
* and its `.env` with secrets masked — rendered to one markdown document that
|
|
19
|
+
* can be copied to the clipboard or saved under `.nomoreide/repros/`.
|
|
20
|
+
*/
|
|
21
|
+
export declare class ReproBundleBuilder {
|
|
22
|
+
private readonly errorInbox;
|
|
23
|
+
private readonly manager;
|
|
24
|
+
private readonly reproDir;
|
|
25
|
+
constructor(options: ReproBundleOptions);
|
|
26
|
+
build(id: number, options?: {
|
|
27
|
+
save?: boolean;
|
|
28
|
+
}): Promise<ReproBundle | null>;
|
|
29
|
+
}
|
|
30
|
+
export {};
|
|
@@ -0,0 +1,116 @@
|
|
|
1
|
+
import { mkdir, writeFile } from "node:fs/promises";
|
|
2
|
+
import { join } from "node:path";
|
|
3
|
+
import { entriesFromLines, envFilePath, looksSecret, readEnvFile } from "./env-file.js";
|
|
4
|
+
const MASK = "••••••";
|
|
5
|
+
/**
|
|
6
|
+
* Assembles a "share my bug" artifact for an Error Inbox incident: the error
|
|
7
|
+
* excerpt, the affected-file diff, recent logs, the service's runtime state,
|
|
8
|
+
* and its `.env` with secrets masked — rendered to one markdown document that
|
|
9
|
+
* can be copied to the clipboard or saved under `.nomoreide/repros/`.
|
|
10
|
+
*/
|
|
11
|
+
export class ReproBundleBuilder {
|
|
12
|
+
errorInbox;
|
|
13
|
+
manager;
|
|
14
|
+
reproDir;
|
|
15
|
+
constructor(options) {
|
|
16
|
+
this.errorInbox = options.errorInbox;
|
|
17
|
+
this.manager = options.manager;
|
|
18
|
+
this.reproDir = options.reproDir ?? join(process.cwd(), ".nomoreide", "repros");
|
|
19
|
+
}
|
|
20
|
+
async build(id, options = {}) {
|
|
21
|
+
const context = await this.errorInbox.context(id);
|
|
22
|
+
if (!context)
|
|
23
|
+
return null;
|
|
24
|
+
const status = this.manager.status().services[context.service];
|
|
25
|
+
const env = await readMaskedEnv(context.serviceCwd);
|
|
26
|
+
const markdown = renderBundle(context, status, env);
|
|
27
|
+
let savedPath;
|
|
28
|
+
if (options.save) {
|
|
29
|
+
savedPath = join(this.reproDir, `${stamp()}-incident-${id}.md`);
|
|
30
|
+
await mkdir(this.reproDir, { recursive: true });
|
|
31
|
+
await writeFile(savedPath, markdown);
|
|
32
|
+
}
|
|
33
|
+
return { incidentId: id, markdown, savedPath };
|
|
34
|
+
}
|
|
35
|
+
}
|
|
36
|
+
async function readMaskedEnv(serviceCwd) {
|
|
37
|
+
const { exists, lines } = await readEnvFile(envFilePath(serviceCwd));
|
|
38
|
+
if (!exists)
|
|
39
|
+
return [];
|
|
40
|
+
return entriesFromLines(lines).map((entry) => {
|
|
41
|
+
const masked = looksSecret(entry.key);
|
|
42
|
+
return { key: entry.key, value: masked ? MASK : entry.value, masked };
|
|
43
|
+
});
|
|
44
|
+
}
|
|
45
|
+
function stamp() {
|
|
46
|
+
return new Date().toISOString().replace(/[:.]/g, "-");
|
|
47
|
+
}
|
|
48
|
+
function renderBundle(context, status, env) {
|
|
49
|
+
const { incident, file, diff, recentLogs } = context;
|
|
50
|
+
const parts = [];
|
|
51
|
+
parts.push(`# Bug report: ${incident.title}`);
|
|
52
|
+
parts.push("");
|
|
53
|
+
const seen = `seen ×${incident.count} · first ${incident.firstSeen} · last ${incident.lastSeen}`;
|
|
54
|
+
parts.push(`**Service:** \`${context.service}\` · **Level:** ${incident.level} · ${seen}`);
|
|
55
|
+
parts.push("");
|
|
56
|
+
parts.push("## Error");
|
|
57
|
+
parts.push("```");
|
|
58
|
+
parts.push(...incident.logExcerpt);
|
|
59
|
+
parts.push("```");
|
|
60
|
+
if (file) {
|
|
61
|
+
parts.push("");
|
|
62
|
+
parts.push(`**Affected file:** \`${file}\`${incident.line ? ` (line ${incident.line})` : ""}`);
|
|
63
|
+
}
|
|
64
|
+
if (diff.trim()) {
|
|
65
|
+
parts.push("");
|
|
66
|
+
parts.push("## Diff of the affected file");
|
|
67
|
+
parts.push("```diff");
|
|
68
|
+
parts.push(diff.trimEnd());
|
|
69
|
+
parts.push("```");
|
|
70
|
+
}
|
|
71
|
+
if (recentLogs.length) {
|
|
72
|
+
parts.push("");
|
|
73
|
+
parts.push(`## Last ${recentLogs.length} log lines`);
|
|
74
|
+
parts.push("```");
|
|
75
|
+
parts.push(...recentLogs);
|
|
76
|
+
parts.push("```");
|
|
77
|
+
}
|
|
78
|
+
parts.push("");
|
|
79
|
+
parts.push("## Service state");
|
|
80
|
+
parts.push(...renderServiceState(context.service, status));
|
|
81
|
+
parts.push("");
|
|
82
|
+
parts.push("## Environment (`.env`, secrets masked)");
|
|
83
|
+
if (env.length) {
|
|
84
|
+
parts.push("");
|
|
85
|
+
parts.push("| Key | Value |");
|
|
86
|
+
parts.push("| --- | --- |");
|
|
87
|
+
for (const entry of env) {
|
|
88
|
+
parts.push(`| \`${entry.key}\` | ${entry.masked ? MASK : `\`${entry.value}\``} |`);
|
|
89
|
+
}
|
|
90
|
+
}
|
|
91
|
+
else {
|
|
92
|
+
parts.push("");
|
|
93
|
+
parts.push("_No `.env` file found for this service._");
|
|
94
|
+
}
|
|
95
|
+
return parts.join("\n");
|
|
96
|
+
}
|
|
97
|
+
function renderServiceState(service, status) {
|
|
98
|
+
if (!status) {
|
|
99
|
+
return [`- **${service}** is not currently managed (no run state).`];
|
|
100
|
+
}
|
|
101
|
+
const lines = [`- **State:** ${status.state}`];
|
|
102
|
+
if (status.kind)
|
|
103
|
+
lines.push(`- **Kind:** ${status.kind}`);
|
|
104
|
+
if (status.pid)
|
|
105
|
+
lines.push(`- **PID:** ${status.pid}`);
|
|
106
|
+
if (status.url)
|
|
107
|
+
lines.push(`- **URL:** ${status.url}`);
|
|
108
|
+
if (status.startedAt)
|
|
109
|
+
lines.push(`- **Started:** ${status.startedAt}`);
|
|
110
|
+
if (status.exitedAt)
|
|
111
|
+
lines.push(`- **Exited:** ${status.exitedAt}`);
|
|
112
|
+
if (status.exitCode != null)
|
|
113
|
+
lines.push(`- **Exit code:** ${status.exitCode}`);
|
|
114
|
+
return lines;
|
|
115
|
+
}
|
|
116
|
+
//# sourceMappingURL=repro-bundle.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"repro-bundle.js","sourceRoot":"","sources":["../../src/core/repro-bundle.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,69 @@
|
|
|
1
|
+
import type { ConfigStore } from "./config-store.js";
|
|
2
|
+
import type { LogStore } from "./log-store.js";
|
|
3
|
+
import type { LogStream } from "./types.js";
|
|
4
|
+
export type TestRunStatus = "running" | "passed" | "failed" | "error";
|
|
5
|
+
export interface TestRun {
|
|
6
|
+
id: number;
|
|
7
|
+
service: string;
|
|
8
|
+
command: string;
|
|
9
|
+
pattern?: string;
|
|
10
|
+
status: TestRunStatus;
|
|
11
|
+
startedAt: string;
|
|
12
|
+
endedAt?: string;
|
|
13
|
+
exitCode?: number | null;
|
|
14
|
+
/** Failing test count parsed from the runner output (best-effort). */
|
|
15
|
+
failingCount: number;
|
|
16
|
+
}
|
|
17
|
+
export interface TestRunEvent {
|
|
18
|
+
type: "output" | "status";
|
|
19
|
+
run: TestRun;
|
|
20
|
+
/** Present on `output` events. */
|
|
21
|
+
line?: {
|
|
22
|
+
stream: LogStream;
|
|
23
|
+
text: string;
|
|
24
|
+
};
|
|
25
|
+
}
|
|
26
|
+
type RunListener = (event: TestRunEvent) => void;
|
|
27
|
+
interface TestRunnerOptions {
|
|
28
|
+
logStore: LogStore;
|
|
29
|
+
configStore: ConfigStore;
|
|
30
|
+
/** Workspace root used when a service has no own cwd. */
|
|
31
|
+
cwd?: string;
|
|
32
|
+
}
|
|
33
|
+
/** The log channel a service's test output is appended under. */
|
|
34
|
+
export declare function testChannel(service: string): string;
|
|
35
|
+
/**
|
|
36
|
+
* Runs a service's test command, streaming output into {@link LogStore} under a
|
|
37
|
+
* synthetic `<service>:test` channel so the {@link ErrorInbox} (which subscribes
|
|
38
|
+
* to the log store) turns assertion failures and stack traces into incidents.
|
|
39
|
+
* On a non-zero exit it appends a synthetic summary line so every failed run
|
|
40
|
+
* also surfaces a top-level incident.
|
|
41
|
+
*/
|
|
42
|
+
export declare class TestRunner {
|
|
43
|
+
private readonly logStore;
|
|
44
|
+
private readonly configStore;
|
|
45
|
+
private readonly cwd;
|
|
46
|
+
private readonly runs;
|
|
47
|
+
private readonly children;
|
|
48
|
+
private readonly listeners;
|
|
49
|
+
private nextId;
|
|
50
|
+
/** Serialises log appends so the ErrorInbox sees lines in order. */
|
|
51
|
+
private appendChain;
|
|
52
|
+
constructor(options: TestRunnerOptions);
|
|
53
|
+
isRunning(service: string): boolean;
|
|
54
|
+
/** The current or most recent run for a service. */
|
|
55
|
+
current(service: string): TestRun | undefined;
|
|
56
|
+
subscribe(service: string, listener: RunListener): () => void;
|
|
57
|
+
/** Spawn the test command for a service. Rejects if a run is already active. */
|
|
58
|
+
run(service: string, pattern?: string): Promise<TestRun>;
|
|
59
|
+
/** Terminate the active run for a service, if any. */
|
|
60
|
+
stop(service: string): void;
|
|
61
|
+
private handleLine;
|
|
62
|
+
private flush;
|
|
63
|
+
private finish;
|
|
64
|
+
/** Append to the synthetic test channel, preserving order for the ErrorInbox. */
|
|
65
|
+
private append;
|
|
66
|
+
private emit;
|
|
67
|
+
private resolveCommand;
|
|
68
|
+
}
|
|
69
|
+
export {};
|