feat: port CLI, TUI, and launcher from v1.5 into v2 (#1452)

Ports the CLI, TUI, and launcher from v1.5 into v2 behind a single
`mcp-inspector` entrypoint (launcher → web/cli/tui). Includes the
`mcp-inspector --web --dev` launcher fix (Vite alias resolution + prod-server
double-start), the root `postinstall` install cascade with simplified CI, and
spec/AGENTS docs (no-workspaces rationale, Development setup).

Closes #1246.

Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
This commit is contained in:
Bob Dickinson 2026-06-14 17:27:49 -07:00 • committed by GitHub
commit 2488ca5e38
No known key found for this signature in database
GPG key ID: B5690EEEBB952194

View file

@ -1,7 +1,39 @@
import pino from "pino";
import type { Bindings, LevelWithSilentOrString, LogFn } from "pino";
/**
* Silent logger for use when no logger is injected. Satisfies pino.Logger,
* does not output anything. InspectorClient uses this as the default.
* Logging surface InspectorClient uses. Real pino loggers satisfy this;
* the default silent logger implements it without opening a stream.
*/
export const silentLogger = pino({ level: "silent" });
export interface InspectorLogger {
level: LevelWithSilentOrString;
fatal: LogFn;
error: LogFn;
warn: LogFn;
info: LogFn;
debug: LogFn;
trace: LogFn;
silent: LogFn;
child(bindings?: Bindings): InspectorLogger;
}
const noop: LogFn = () => {};
function createSilentLogger(): InspectorLogger {
const logger: InspectorLogger = {
level: "silent",
fatal: noop,
error: noop,
warn: noop,
info: noop,
debug: noop,
trace: noop,
silent: noop,
child: () => logger,
};
return logger;
}
/**
* Default logger when none is injected. No-op at all levels; no SonicBoom stream.
*/
export const silentLogger: InspectorLogger = createSilentLogger();