@mcpolyglot/cli 0.1.0 → 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.
@@ -2,10 +2,13 @@ import { writeFileSync, existsSync } from 'node:fs';
2
2
  import { resolve } from 'node:path';
3
3
  import * as p from '@clack/prompts';
4
4
  import pc from 'picocolors';
5
- import { banner, section, kv, hint, stdoutSink, sym } from '../ui.js';
5
+ import { headerBar, panel, footerBar, step, chip, stdoutSink } from '../ui.js';
6
6
  export async function initCommand(opts) {
7
- banner({ version: '0.0.1', tagline: 'init — scaffold mcpolyglot.config.ts' }, stdoutSink);
8
- p.intro(pc.bgCyan(pc.black(' mcpolyglot init ')));
7
+ headerBar({
8
+ version: '0.0.1',
9
+ command: 'init',
10
+ subtitle: 'scaffold mcpolyglot.config.ts in this directory',
11
+ }, stdoutSink);
9
12
  const target = resolve(opts.cwd, 'mcpolyglot.config.ts');
10
13
  if (existsSync(target)) {
11
14
  const proceed = await p.confirm({
@@ -17,6 +20,7 @@ export async function initCommand(opts) {
17
20
  return;
18
21
  }
19
22
  }
23
+ step(1, 3, 'Pick a data source', stdoutSink);
20
24
  const kind = await p.select({
21
25
  message: 'Pick a data source to start with:',
22
26
  options: [
@@ -28,13 +32,15 @@ export async function initCommand(opts) {
28
32
  p.cancel('Aborted.');
29
33
  return;
30
34
  }
35
+ step(2, 3, 'Name the source', stdoutSink);
31
36
  const id = await p.text({
32
37
  message: 'Source id (used in tool names):',
33
38
  initialValue: kind === 'postgres' ? 'pg.main' : 'sqlite.local',
34
- validate: (v) => /^[a-z0-9._-]+$/i.test(v) ? undefined : 'Use letters, digits, dot, hyphen, underscore.',
39
+ validate: (v) => v && /^[a-z0-9._-]+$/i.test(v) ? undefined : 'Use letters, digits, dot, hyphen, underscore.',
35
40
  });
36
41
  if (p.isCancel(id))
37
42
  return;
43
+ step(3, 3, 'Connection', stdoutSink);
38
44
  let url;
39
45
  if (kind === 'postgres') {
40
46
  url = '${env:DATABASE_URL}';
@@ -44,7 +50,7 @@ export async function initCommand(opts) {
44
50
  const path = await p.text({
45
51
  message: 'Path to SQLite file:',
46
52
  placeholder: './data.db',
47
- validate: (v) => (v.length > 0 ? undefined : 'Required.'),
53
+ validate: (v) => (v && v.length > 0 ? undefined : 'Required.'),
48
54
  });
49
55
  if (p.isCancel(path))
50
56
  return;
@@ -52,19 +58,25 @@ export async function initCommand(opts) {
52
58
  }
53
59
  const config = renderConfig({ kind: kind, id: id, url });
54
60
  writeFileSync(target, config, 'utf8');
55
- p.outro(pc.green(`wrote ${pc.bold(target)}`));
56
- // Slick "next steps" panel — Astro/Vite-flavored
57
- section('Next', stdoutSink);
58
- kv('Validate', pc.cyan('mcpolyglot doctor'), stdoutSink);
59
- kv('List', pc.cyan('mcpolyglot tools'), stdoutSink);
60
- kv('Run', pc.cyan('mcpolyglot serve'), stdoutSink);
61
- section('Wire into your agent', stdoutSink);
62
- process.stdout.write(` ${sym.bullet} ${pc.bold('Claude Desktop')} ${pc.dim('~/Library/Application Support/Claude/claude_desktop_config.json')}\n`);
63
- process.stdout.write(` ${sym.bullet} ${pc.bold('Cursor')} ${pc.dim('~/.cursor/mcp.json')}\n`);
64
- process.stdout.write(` ${sym.bullet} ${pc.bold('Claude Code')} ${pc.dim('claude mcp add mcpolyglot -- npx -y @mcpolyglot/cli serve --config ' + target)}\n`);
65
- process.stdout.write('\n');
66
- hint('docs: github.com/ishay60/mcpolyglot', stdoutSink);
67
- process.stdout.write('\n');
61
+ stdoutSink('');
62
+ stdoutSink(` ${chip('OK', 'ok')} wrote ${pc.bold(target)}`);
63
+ panel({
64
+ title: 'Next',
65
+ lines: [
66
+ `${pc.dim('▸')} ${pc.bold('Validate'.padEnd(10))} ${pc.cyan('mcpolyglot doctor')}`,
67
+ `${pc.dim('▸')} ${pc.bold('List'.padEnd(10))} ${pc.cyan('mcpolyglot tools')}`,
68
+ `${pc.dim('▸')} ${pc.bold('Run'.padEnd(10))} ${pc.cyan('mcpolyglot serve')}`,
69
+ ],
70
+ }, stdoutSink);
71
+ panel({
72
+ title: 'Wire into your agent',
73
+ lines: [
74
+ `${pc.bold('Claude Desktop')} ${pc.dim('~/Library/Application Support/Claude/claude_desktop_config.json')}`,
75
+ `${pc.bold('Cursor')} ${pc.dim('~/.cursor/mcp.json')}`,
76
+ `${pc.bold('Claude Code')} ${pc.dim('claude mcp add mcpolyglot -- npx -y @mcpolyglot/cli serve')}`,
77
+ ],
78
+ }, stdoutSink);
79
+ footerBar(['docs: github.com/ishay60/mcpolyglot'], stdoutSink);
68
80
  }
69
81
  function renderConfig(opts) {
70
82
  return `import { defineConfig } from '@mcpolyglot/config';
@@ -1 +1 @@
1
- {"version":3,"file":"init.js","sourceRoot":"","sources":["../../src/commands/init.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"init.js","sourceRoot":"","sources":["../../src/commands/init.ts"],"names":[],"mappings":"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"}
@@ -1 +1 @@
1
- {"version":3,"file":"serve.d.ts","sourceRoot":"","sources":["../../src/commands/serve.ts"],"names":[],"mappings":"AAUA,MAAM,WAAW,YAAY;IAC3B,MAAM,EAAE,MAAM,CAAC;IACf,IAAI,EAAE,OAAO,CAAC;IACd,IAAI,EAAE,MAAM,CAAC;IACb,IAAI,EAAE,MAAM,CAAC;CACd;AAED,wBAAsB,YAAY,CAAC,IAAI,EAAE,YAAY,GAAG,OAAO,CAAC,IAAI,CAAC,CAiEpE"}
1
+ {"version":3,"file":"serve.d.ts","sourceRoot":"","sources":["../../src/commands/serve.ts"],"names":[],"mappings":"AAaA,MAAM,WAAW,YAAY;IAC3B,MAAM,EAAE,MAAM,CAAC;IACf,IAAI,EAAE,OAAO,CAAC;IACd,IAAI,EAAE,MAAM,CAAC;IACb,IAAI,EAAE,MAAM,CAAC;CACd;AAED,wBAAsB,YAAY,CAAC,IAAI,EAAE,YAAY,GAAG,OAAO,CAAC,IAAI,CAAC,CAgFpE"}
@@ -6,7 +6,7 @@ import { loadConfig } from '@mcpolyglot/config';
6
6
  import { StdioTransport } from '@mcpolyglot/core/transports/stdio';
7
7
  import { StreamableHttpTransport } from '@mcpolyglot/core/transports/streamable-http';
8
8
  import { buildServerFromConfig } from '../factory.js';
9
- import { banner, section, kv, ready, hint, sym, link } from '../ui.js';
9
+ import { headerBar, section, kv, ready, footerBar, sym, link } from '../ui.js';
10
10
  export async function serveCommand(opts) {
11
11
  const startedAt = Date.now();
12
12
  if (extname(opts.config) === '.ts' || extname(opts.config) === '.mts') {
@@ -17,7 +17,11 @@ export async function serveCommand(opts) {
17
17
  // tsx unavailable — config loader will throw a clear error if it tries.
18
18
  }
19
19
  }
20
- banner({ version: '0.0.1', tagline: 'one config, every database your agent needs' });
20
+ headerBar({
21
+ version: '0.0.1',
22
+ command: 'serve',
23
+ subtitle: 'one config, every database your agent needs',
24
+ });
21
25
  const cfg = await loadConfig(opts.config);
22
26
  const { server, connectors } = await buildServerFromConfig(cfg);
23
27
  section('Sources');
@@ -30,21 +34,32 @@ export async function serveCommand(opts) {
30
34
  const wantHttp = opts.http || cfg.transport.kind === 'http';
31
35
  const httpHost = cfg.transport.kind === 'http' && !opts.http ? cfg.transport.host : opts.host;
32
36
  const httpPort = cfg.transport.kind === 'http' && !opts.http ? cfg.transport.port : opts.port;
33
- const configuredToken = cfg.transport.kind === 'http' && cfg.transport.auth.type === 'bearer'
34
- ? cfg.transport.auth.token
35
- : undefined;
37
+ const httpAuth = cfg.transport.kind === 'http' ? cfg.transport.auth : { type: 'bearer' };
36
38
  let transport;
37
39
  if (wantHttp) {
38
40
  const httpTransport = new StreamableHttpTransport({
39
41
  host: httpHost,
40
42
  port: httpPort,
41
- ...(configuredToken ? { bearerToken: configuredToken } : {}),
43
+ auth: httpAuth.type === 'oauth'
44
+ ? {
45
+ kind: 'oauth',
46
+ issuer: httpAuth.issuer,
47
+ audience: httpAuth.audience,
48
+ ...(httpAuth.jwksUri ? { jwksUri: httpAuth.jwksUri } : {}),
49
+ }
50
+ : { kind: 'bearer', ...(httpAuth.token ? { token: httpAuth.token } : {}) },
42
51
  });
43
52
  transport = httpTransport;
44
53
  kv('Mode', pc.cyan('streamable-http'));
45
54
  kv('URL', link(`http://${httpHost}:${httpPort}/mcp`));
46
55
  kv('Health', link(`http://${httpHost}:${httpPort}/healthz`));
47
- kv('Token', pc.yellow(httpTransport.bearerToken));
56
+ if (httpTransport.authKind === 'oauth' && httpAuth.type === 'oauth') {
57
+ kv('Auth', pc.cyan(`oauth · ${httpAuth.issuer}`));
58
+ kv('Audience', pc.dim(httpAuth.audience));
59
+ }
60
+ else if (httpTransport.bearerToken) {
61
+ kv('Token', pc.yellow(httpTransport.bearerToken));
62
+ }
48
63
  kv('Config', pc.dim(basename(opts.config)));
49
64
  }
50
65
  else {
@@ -54,7 +69,7 @@ export async function serveCommand(opts) {
54
69
  }
55
70
  await server.start(transport);
56
71
  ready(Date.now() - startedAt);
57
- hint('Press Ctrl+C to stop. Audit log: ~/.mcpolyglot/audit.log');
72
+ footerBar(['Ctrl+C to stop', 'audit: ~/.mcpolyglot/audit.log']);
58
73
  const shutdown = async () => {
59
74
  process.stderr.write(pc.dim('\n shutting down…\n'));
60
75
  await server.stop().catch(() => { });
@@ -1 +1 @@
1
- {"version":3,"file":"serve.js","sourceRoot":"","sources":["../../src/commands/serve.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"serve.js","sourceRoot":"","sources":["../../src/commands/serve.ts"],"names":[],"mappings":"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"}
@@ -1 +1 @@
1
- {"version":3,"file":"tools.d.ts","sourceRoot":"","sources":["../../src/commands/tools.ts"],"names":[],"mappings":"AAKA,MAAM,WAAW,YAAY;IAC3B,MAAM,EAAE,MAAM,CAAC;CAChB;AAED,wBAAsB,YAAY,CAAC,IAAI,EAAE,YAAY,GAAG,OAAO,CAAC,IAAI,CAAC,CA8BpE"}
1
+ {"version":3,"file":"tools.d.ts","sourceRoot":"","sources":["../../src/commands/tools.ts"],"names":[],"mappings":"AAKA,MAAM,WAAW,YAAY;IAC3B,MAAM,EAAE,MAAM,CAAC;CAChB;AAED,wBAAsB,YAAY,CAAC,IAAI,EAAE,YAAY,GAAG,OAAO,CAAC,IAAI,CAAC,CAsCpE"}
@@ -1,9 +1,9 @@
1
1
  import pc from 'picocolors';
2
2
  import { loadConfig } from '@mcpolyglot/config';
3
3
  import { buildServerFromConfig } from '../factory.js';
4
- import { banner, section, table, hint, stdoutSink } from '../ui.js';
4
+ import { headerBar, section, table, footerBar, stdoutSink } from '../ui.js';
5
5
  export async function toolsCommand(opts) {
6
- banner({ version: '0.0.1', tagline: 'tools — preview generated MCP tools' }, stdoutSink);
6
+ headerBar({ version: '0.0.1', command: 'tools', subtitle: 'preview generated MCP tools' }, stdoutSink);
7
7
  const cfg = await loadConfig(opts.config);
8
8
  const { connectors } = await buildServerFromConfig(cfg);
9
9
  const rows = [];
@@ -23,7 +23,9 @@ export async function toolsCommand(opts) {
23
23
  }
24
24
  section(`${rows.length} tool(s)`, stdoutSink);
25
25
  table([{ header: 'NAME' }, { header: 'MODE' }, { header: 'SCOPES' }, { header: 'DESCRIPTION' }], rows, stdoutSink);
26
- hint('add tools to a host: mcpolyglot serve --config ./mcpolyglot.config.ts', stdoutSink);
27
- process.stdout.write('\n');
26
+ footerBar([
27
+ `serve: ${pc.cyan('mcpolyglot serve --config ' + opts.config)}`,
28
+ `docs: ${pc.cyan('github.com/ishay60/mcpolyglot')}`,
29
+ ], stdoutSink);
28
30
  }
29
31
  //# sourceMappingURL=tools.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"tools.js","sourceRoot":"","sources":["../../src/commands/tools.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,MAAM,YAAY,CAAC;AAC5B,OAAO,EAAE,UAAU,EAAE,MAAM,oBAAoB,CAAC;AAChD,OAAO,EAAE,qBAAqB,EAAE,MAAM,eAAe,CAAC;AACtD,OAAO,EAAE,MAAM,EAAE,OAAO,EAAE,KAAK,EAAE,IAAI,EAAE,UAAU,EAAE,MAAM,UAAU,CAAC;AAMpE,MAAM,CAAC,KAAK,UAAU,YAAY,CAAC,IAAkB;IACnD,MAAM,CAAC,EAAE,OAAO,EAAE,OAAO,EAAE,OAAO,EAAE,qCAAqC,EAAE,EAAE,UAAU,CAAC,CAAC;IAEzF,MAAM,GAAG,GAAG,MAAM,UAAU,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC;IAC1C,MAAM,EAAE,UAAU,EAAE,GAAG,MAAM,qBAAqB,CAAC,GAAG,CAAC,CAAC;IAExD,MAAM,IAAI,GAAe,EAAE,CAAC;IAC5B,KAAK,MAAM,CAAC,IAAI,UAAU,EAAE,CAAC;QAC3B,MAAM,CAAC,CAAC,IAAI,CAAC;YACX,MAAM,EAAE,EAAE,KAAK,EAAE,GAAG,EAAE,GAAE,CAAC,EAAE,IAAI,EAAE,GAAG,EAAE,GAAE,CAAC,EAAE,IAAI,EAAE,GAAG,EAAE,GAAE,CAAC,EAAE,KAAK,EAAE,GAAG,EAAE,GAAE,CAAC,EAAE;SAC7E,CAAC,CAAC;QACH,KAAK,MAAM,IAAI,IAAI,CAAC,CAAC,kBAAkB,EAAE,EAAE,CAAC;YAC1C,IAAI,CAAC,IAAI,CAAC;gBACR,EAAE,CAAC,IAAI,CAAC,IAAI,CAAC,IAAI,CAAC;gBAClB,IAAI,CAAC,QAAQ,CAAC,CAAC,CAAC,EAAE,CAAC,KAAK,CAAC,WAAW,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC,MAAM,CAAC,YAAY,CAAC;gBAC/D,EAAE,CAAC,IAAI,CAAC,IAAI,CAAC,MAAM,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;gBAC/B,EAAE,CAAC,GAAG,CAAC,IAAI,CAAC,WAAW,CAAC;aACzB,CAAC,CAAC;QACL,CAAC;QACD,MAAM,CAAC,CAAC,KAAK,EAAE,CAAC;IAClB,CAAC;IAED,OAAO,CAAC,GAAG,IAAI,CAAC,MAAM,UAAU,EAAE,UAAU,CAAC,CAAC;IAC9C,KAAK,CACH,CAAC,EAAE,MAAM,EAAE,MAAM,EAAE,EAAE,EAAE,MAAM,EAAE,MAAM,EAAE,EAAE,EAAE,MAAM,EAAE,QAAQ,EAAE,EAAE,EAAE,MAAM,EAAE,aAAa,EAAE,CAAC,EACzF,IAAI,EACJ,UAAU,CACX,CAAC;IACF,IAAI,CAAC,uEAAuE,EAAE,UAAU,CAAC,CAAC;IAC1F,OAAO,CAAC,MAAM,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC;AAC7B,CAAC"}
1
+ {"version":3,"file":"tools.js","sourceRoot":"","sources":["../../src/commands/tools.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,MAAM,YAAY,CAAC;AAC5B,OAAO,EAAE,UAAU,EAAE,MAAM,oBAAoB,CAAC;AAChD,OAAO,EAAE,qBAAqB,EAAE,MAAM,eAAe,CAAC;AACtD,OAAO,EAAE,SAAS,EAAE,OAAO,EAAE,KAAK,EAAE,SAAS,EAAE,UAAU,EAAE,MAAM,UAAU,CAAC;AAM5E,MAAM,CAAC,KAAK,UAAU,YAAY,CAAC,IAAkB;IACnD,SAAS,CACP,EAAE,OAAO,EAAE,OAAO,EAAE,OAAO,EAAE,OAAO,EAAE,QAAQ,EAAE,6BAA6B,EAAE,EAC/E,UAAU,CACX,CAAC;IAEF,MAAM,GAAG,GAAG,MAAM,UAAU,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC;IAC1C,MAAM,EAAE,UAAU,EAAE,GAAG,MAAM,qBAAqB,CAAC,GAAG,CAAC,CAAC;IAExD,MAAM,IAAI,GAAe,EAAE,CAAC;IAC5B,KAAK,MAAM,CAAC,IAAI,UAAU,EAAE,CAAC;QAC3B,MAAM,CAAC,CAAC,IAAI,CAAC;YACX,MAAM,EAAE,EAAE,KAAK,EAAE,GAAG,EAAE,GAAE,CAAC,EAAE,IAAI,EAAE,GAAG,EAAE,GAAE,CAAC,EAAE,IAAI,EAAE,GAAG,EAAE,GAAE,CAAC,EAAE,KAAK,EAAE,GAAG,EAAE,GAAE,CAAC,EAAE;SAC7E,CAAC,CAAC;QACH,KAAK,MAAM,IAAI,IAAI,CAAC,CAAC,kBAAkB,EAAE,EAAE,CAAC;YAC1C,IAAI,CAAC,IAAI,CAAC;gBACR,EAAE,CAAC,IAAI,CAAC,IAAI,CAAC,IAAI,CAAC;gBAClB,IAAI,CAAC,QAAQ,CAAC,CAAC,CAAC,EAAE,CAAC,KAAK,CAAC,WAAW,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC,MAAM,CAAC,YAAY,CAAC;gBAC/D,EAAE,CAAC,IAAI,CAAC,IAAI,CAAC,MAAM,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;gBAC/B,EAAE,CAAC,GAAG,CAAC,IAAI,CAAC,WAAW,CAAC;aACzB,CAAC,CAAC;QACL,CAAC;QACD,MAAM,CAAC,CAAC,KAAK,EAAE,CAAC;IAClB,CAAC;IAED,OAAO,CAAC,GAAG,IAAI,CAAC,MAAM,UAAU,EAAE,UAAU,CAAC,CAAC;IAC9C,KAAK,CACH,CAAC,EAAE,MAAM,EAAE,MAAM,EAAE,EAAE,EAAE,MAAM,EAAE,MAAM,EAAE,EAAE,EAAE,MAAM,EAAE,QAAQ,EAAE,EAAE,EAAE,MAAM,EAAE,aAAa,EAAE,CAAC,EACzF,IAAI,EACJ,UAAU,CACX,CAAC;IACF,SAAS,CACP;QACE,UAAU,EAAE,CAAC,IAAI,CAAC,4BAA4B,GAAG,IAAI,CAAC,MAAM,CAAC,EAAE;QAC/D,SAAS,EAAE,CAAC,IAAI,CAAC,+BAA+B,CAAC,EAAE;KACpD,EACD,UAAU,CACX,CAAC;AACJ,CAAC"}
package/dist/ui.d.ts CHANGED
@@ -11,12 +11,32 @@ export declare const sym: {
11
11
  bullet: string;
12
12
  pipe: string;
13
13
  hor: string;
14
+ dot: string;
15
+ branch: string;
14
16
  };
17
+ export type ChipKind = 'ok' | 'err' | 'warn' | 'info' | 'ready' | 'neutral';
15
18
  /**
16
- * Vite/Astro-style banner: triangle, duotone wordmark, version chip, tagline.
17
- *
18
- * ▲ mcpolyglot v0.0.1
19
- * turn your databases into MCP servers
19
+ * Pill-chip status indicator, e.g. ` OK ` on a green background. Inspired
20
+ * by GitHub Actions / Copilot CLI status pills. Falls back gracefully on
21
+ * terminals without color.
22
+ */
23
+ export declare function chip(label: string, kind?: ChipKind): string;
24
+ export interface HeaderOptions {
25
+ version: string;
26
+ /** Sub-command name shown as a pill on the right (e.g. "doctor"). */
27
+ command?: string;
28
+ /** Single-line subtitle rendered under the wordmark. */
29
+ subtitle?: string;
30
+ }
31
+ /**
32
+ * Boxed banner with rounded corners, the duotone wordmark, an optional
33
+ * sub-command pill on the right, and an optional subtitle line. This is the
34
+ * one piece every command opens with — it sets the visual frame.
35
+ */
36
+ export declare function headerBar(opts: HeaderOptions, sink?: Sink): void;
37
+ /**
38
+ * Minimal banner without the box — kept for callers that want the older,
39
+ * lighter look (e.g. nested output). New code should prefer `headerBar`.
20
40
  */
21
41
  export declare function banner(opts: {
22
42
  version: string;
@@ -27,13 +47,34 @@ export declare function err(label: string, detail?: string, sink?: Sink): void;
27
47
  export declare function warn(label: string, detail?: string, sink?: Sink): void;
28
48
  export declare function info(label: string, detail?: string, sink?: Sink): void;
29
49
  export declare function bullet(label: string, detail?: string, sink?: Sink): void;
50
+ /** Section title with a thin underline beneath it. */
30
51
  export declare function section(title: string, sink?: Sink): void;
31
52
  /** Vite-style "Local / Network" key/value column. Right-pads keys for alignment. */
32
53
  export declare function kv(label: string, value: string, sink?: Sink): void;
33
54
  export declare function divider(sink?: Sink): void;
34
- /** "ready in 123 ms" — the universal CLI flex. */
55
+ /** "ready in 123 ms" — Copilot-style ready chip + dim duration. */
35
56
  export declare function ready(ms: number, sink?: Sink): void;
36
57
  export declare function hint(text: string, sink?: Sink): void;
58
+ /**
59
+ * Footer bar — separated row of keybinding / docs hints, each separated by
60
+ * a dim middle dot. Mirrors the bottom strip in modern TUIs.
61
+ */
62
+ export declare function footerBar(items: string[], sink?: Sink): void;
63
+ /**
64
+ * Step indicator for multi-step flows like `init`. Renders as
65
+ * `[2/3] Pick a source`.
66
+ */
67
+ export declare function step(n: number, total: number, label: string, sink?: Sink): void;
68
+ export interface PanelOptions {
69
+ title?: string;
70
+ lines: string[];
71
+ }
72
+ /**
73
+ * Bordered panel with rounded corners. Use sparingly — best for "next steps"
74
+ * or "wire into your agent" callouts where the visual frame helps the reader
75
+ * spot the actionable block.
76
+ */
77
+ export declare function panel(opts: PanelOptions, sink?: Sink): void;
37
78
  export interface Column {
38
79
  header: string;
39
80
  width?: number;
package/dist/ui.d.ts.map CHANGED
@@ -1 +1 @@
1
- {"version":3,"file":"ui.d.ts","sourceRoot":"","sources":["../src/ui.ts"],"names":[],"mappings":"AAEA,+EAA+E;AAC/E,MAAM,MAAM,IAAI,GAAG,CAAC,CAAC,EAAE,MAAM,KAAK,IAAI,CAAC;AACvC,eAAO,MAAM,UAAU,EAAE,IAExB,CAAC;AACF,eAAO,MAAM,UAAU,EAAE,IAGxB,CAAC;AAMF,eAAO,MAAM,GAAG;;;;;;;;;CASf,CAAC;AAMF;;;;;GAKG;AACH,wBAAgB,MAAM,CAAC,IAAI,EAAE;IAAE,OAAO,EAAE,MAAM,CAAC;IAAC,OAAO,CAAC,EAAE,MAAM,CAAA;CAAE,EAAE,IAAI,GAAE,IAAiB,GAAG,IAAI,CAkBjG;AAMD,wBAAgB,EAAE,CAAC,KAAK,EAAE,MAAM,EAAE,MAAM,CAAC,EAAE,MAAM,EAAE,IAAI,GAAE,IAAiB,GAAG,IAAI,CAEhF;AACD,wBAAgB,GAAG,CAAC,KAAK,EAAE,MAAM,EAAE,MAAM,CAAC,EAAE,MAAM,EAAE,IAAI,GAAE,IAAiB,GAAG,IAAI,CAEjF;AACD,wBAAgB,IAAI,CAAC,KAAK,EAAE,MAAM,EAAE,MAAM,CAAC,EAAE,MAAM,EAAE,IAAI,GAAE,IAAiB,GAAG,IAAI,CAElF;AACD,wBAAgB,IAAI,CAAC,KAAK,EAAE,MAAM,EAAE,MAAM,CAAC,EAAE,MAAM,EAAE,IAAI,GAAE,IAAiB,GAAG,IAAI,CAElF;AACD,wBAAgB,MAAM,CAAC,KAAK,EAAE,MAAM,EAAE,MAAM,CAAC,EAAE,MAAM,EAAE,IAAI,GAAE,IAAiB,GAAG,IAAI,CAEpF;AAMD,wBAAgB,OAAO,CAAC,KAAK,EAAE,MAAM,EAAE,IAAI,GAAE,IAAiB,GAAG,IAAI,CAGpE;AAED,oFAAoF;AACpF,wBAAgB,EAAE,CAAC,KAAK,EAAE,MAAM,EAAE,KAAK,EAAE,MAAM,EAAE,IAAI,GAAE,IAAiB,GAAG,IAAI,CAG9E;AAED,wBAAgB,OAAO,CAAC,IAAI,GAAE,IAAiB,GAAG,IAAI,CAErD;AAED,kDAAkD;AAClD,wBAAgB,KAAK,CAAC,EAAE,EAAE,MAAM,EAAE,IAAI,GAAE,IAAiB,GAAG,IAAI,CAI/D;AAED,wBAAgB,IAAI,CAAC,IAAI,EAAE,MAAM,EAAE,IAAI,GAAE,IAAiB,GAAG,IAAI,CAEhE;AAMD,MAAM,WAAW,MAAM;IACrB,MAAM,EAAE,MAAM,CAAC;IACf,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,KAAK,CAAC,EAAE,CAAC,CAAC,EAAE,MAAM,KAAK,MAAM,CAAC;CAC/B;AAED,wBAAgB,KAAK,CAAC,OAAO,EAAE,MAAM,EAAE,EAAE,IAAI,EAAE,MAAM,EAAE,EAAE,EAAE,IAAI,GAAE,IAAiB,GAAG,IAAI,CAiBxF;AAYD,mEAAmE;AACnE,wBAAgB,IAAI,CAAC,GAAG,EAAE,MAAM,EAAE,KAAK,SAAM,GAAG,MAAM,CAErD"}
1
+ {"version":3,"file":"ui.d.ts","sourceRoot":"","sources":["../src/ui.ts"],"names":[],"mappings":"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"}
package/dist/ui.js CHANGED
@@ -18,18 +18,35 @@ export const sym = {
18
18
  bullet: pc.dim('•'),
19
19
  pipe: pc.dim('│'),
20
20
  hor: pc.dim('─'),
21
+ dot: pc.dim('·'),
22
+ branch: pc.dim('└'),
21
23
  };
22
24
  /* ────────────────────────────────────────────────────────────────────── */
23
- /* Banner */
25
+ /* Width */
24
26
  /* ────────────────────────────────────────────────────────────────────── */
25
- /**
26
- * Vite/Astro-style banner: triangle, duotone wordmark, version chip, tagline.
27
- *
28
- * ▲ mcpolyglot v0.0.1
29
- * turn your databases into MCP servers
30
- */
31
- export function banner(opts, sink = stderrSink) {
32
- const wordmark = pc.cyan('m') +
27
+ const MAX_WIDTH = 78;
28
+ const MIN_WIDTH = 56;
29
+ /** Width of the visual column we paint into. Prefers stderr (where banners go). */
30
+ function termWidth() {
31
+ const cols = process.stderr.columns ?? process.stdout.columns ?? 80;
32
+ return Math.max(MIN_WIDTH, Math.min(MAX_WIDTH, cols - 4));
33
+ }
34
+ function stripAnsi(s) {
35
+ // eslint-disable-next-line no-control-regex
36
+ return s.replace(/\x1b\[[0-9;]*m/g, '');
37
+ }
38
+ function visibleLength(s) {
39
+ return stripAnsi(s).length;
40
+ }
41
+ function padRightAnsi(s, width) {
42
+ return s + ' '.repeat(Math.max(0, width - visibleLength(s)));
43
+ }
44
+ /* ────────────────────────────────────────────────────────────────────── */
45
+ /* Wordmark + gradient */
46
+ /* ────────────────────────────────────────────────────────────────────── */
47
+ /** Duotone "mcpolyglot" — cyan → magenta. */
48
+ function wordmark() {
49
+ return (pc.cyan('m') +
33
50
  pc.cyan('c') +
34
51
  pc.cyan('p') +
35
52
  pc.magenta('o') +
@@ -38,11 +55,66 @@ export function banner(opts, sink = stderrSink) {
38
55
  pc.magenta('g') +
39
56
  pc.magenta('l') +
40
57
  pc.magenta('o') +
41
- pc.magenta('t');
58
+ pc.magenta('t'));
59
+ }
60
+ /**
61
+ * Pill-chip status indicator, e.g. ` OK ` on a green background. Inspired
62
+ * by GitHub Actions / Copilot CLI status pills. Falls back gracefully on
63
+ * terminals without color.
64
+ */
65
+ export function chip(label, kind = 'neutral') {
66
+ const text = ` ${label} `;
67
+ switch (kind) {
68
+ case 'ok':
69
+ return pc.bgGreen(pc.black(pc.bold(text)));
70
+ case 'err':
71
+ return pc.bgRed(pc.white(pc.bold(text)));
72
+ case 'warn':
73
+ return pc.bgYellow(pc.black(pc.bold(text)));
74
+ case 'info':
75
+ return pc.bgCyan(pc.black(pc.bold(text)));
76
+ case 'ready':
77
+ return pc.bgGreen(pc.black(pc.bold(text)));
78
+ case 'neutral':
79
+ default:
80
+ return pc.inverse(pc.bold(text));
81
+ }
82
+ }
83
+ /**
84
+ * Boxed banner with rounded corners, the duotone wordmark, an optional
85
+ * sub-command pill on the right, and an optional subtitle line. This is the
86
+ * one piece every command opens with — it sets the visual frame.
87
+ */
88
+ export function headerBar(opts, sink = stderrSink) {
89
+ const w = termWidth();
90
+ const inner = w - 2; // account for │ on each side
91
+ const left = `${pc.cyan('▲')} ${pc.bold(wordmark())}`;
92
+ const versionTag = pc.dim(`v${opts.version}`);
93
+ const cmdPill = opts.command ? `${chip(opts.command, 'info')} ` : '';
94
+ const right = `${cmdPill}${versionTag}`;
95
+ const gap = Math.max(2, inner - visibleLength(left) - visibleLength(right) - 2);
96
+ const top = pc.dim('╭' + '─'.repeat(inner) + '╮');
97
+ const titleLine = pc.dim('│ ') + left + ' '.repeat(gap) + right + pc.dim(' │');
98
+ const bottom = pc.dim('╰' + '─'.repeat(inner) + '╯');
99
+ sink('');
100
+ sink(` ${top}`);
101
+ sink(` ${titleLine}`);
102
+ if (opts.subtitle) {
103
+ const subPad = Math.max(0, inner - visibleLength(opts.subtitle) - 2);
104
+ sink(` ${pc.dim('│ ')}${pc.dim(opts.subtitle)}${' '.repeat(subPad)}${pc.dim(' │')}`);
105
+ }
106
+ sink(` ${bottom}`);
107
+ sink('');
108
+ }
109
+ /**
110
+ * Minimal banner without the box — kept for callers that want the older,
111
+ * lighter look (e.g. nested output). New code should prefer `headerBar`.
112
+ */
113
+ export function banner(opts, sink = stderrSink) {
42
114
  const triangle = pc.cyan('▲');
43
115
  const ver = pc.dim(`v${opts.version}`);
44
116
  sink('');
45
- sink(` ${triangle} ${pc.bold(wordmark)} ${ver}`);
117
+ sink(` ${triangle} ${pc.bold(wordmark())} ${ver}`);
46
118
  if (opts.tagline)
47
119
  sink(` ${pc.dim(opts.tagline)}`);
48
120
  sink('');
@@ -50,17 +122,22 @@ export function banner(opts, sink = stderrSink) {
50
122
  /* ────────────────────────────────────────────────────────────────────── */
51
123
  /* Status lines */
52
124
  /* ────────────────────────────────────────────────────────────────────── */
125
+ function status(k, glyph, label, detail, sink) {
126
+ const tag = chip(glyph, k);
127
+ const main = k === 'err' ? pc.red(label) : k === 'warn' ? pc.yellow(label) : label;
128
+ sink(` ${tag} ${main}${detail ? ' ' + pc.dim(detail) : ''}`);
129
+ }
53
130
  export function ok(label, detail, sink = stderrSink) {
54
- sink(` ${sym.ok} ${label}${detail ? ' ' + pc.dim(detail) : ''}`);
131
+ status('ok', 'OK', label, detail, sink);
55
132
  }
56
133
  export function err(label, detail, sink = stderrSink) {
57
- sink(` ${sym.err} ${pc.red(label)}${detail ? ' ' + pc.dim(detail) : ''}`);
134
+ status('err', 'ERR', label, detail, sink);
58
135
  }
59
136
  export function warn(label, detail, sink = stderrSink) {
60
- sink(` ${sym.warn} ${pc.yellow(label)}${detail ? ' ' + pc.dim(detail) : ''}`);
137
+ status('warn', '!!', label, detail, sink);
61
138
  }
62
139
  export function info(label, detail, sink = stderrSink) {
63
- sink(` ${sym.info} ${label}${detail ? ' ' + pc.dim(detail) : ''}`);
140
+ status('info', 'i', label, detail, sink);
64
141
  }
65
142
  export function bullet(label, detail, sink = stderrSink) {
66
143
  sink(` ${sym.bullet} ${label}${detail ? ' ' + pc.dim(detail) : ''}`);
@@ -68,9 +145,11 @@ export function bullet(label, detail, sink = stderrSink) {
68
145
  /* ────────────────────────────────────────────────────────────────────── */
69
146
  /* Layout */
70
147
  /* ────────────────────────────────────────────────────────────────────── */
148
+ /** Section title with a thin underline beneath it. */
71
149
  export function section(title, sink = stderrSink) {
72
150
  sink('');
73
151
  sink(` ${pc.bold(title)}`);
152
+ sink(` ${pc.dim('─'.repeat(Math.max(4, visibleLength(title))))}`);
74
153
  }
75
154
  /** Vite-style "Local / Network" key/value column. Right-pads keys for alignment. */
76
155
  export function kv(label, value, sink = stderrSink) {
@@ -78,22 +157,64 @@ export function kv(label, value, sink = stderrSink) {
78
157
  sink(` ${sym.arrow} ${pc.bold(pad)} ${value}`);
79
158
  }
80
159
  export function divider(sink = stderrSink) {
81
- sink(` ${sym.hor.repeat(50)}`);
160
+ sink(` ${pc.dim('─'.repeat(termWidth()))}`);
82
161
  }
83
- /** "ready in 123 ms" — the universal CLI flex. */
162
+ /** "ready in 123 ms" — Copilot-style ready chip + dim duration. */
84
163
  export function ready(ms, sink = stderrSink) {
85
164
  sink('');
86
- sink(` ${pc.green('ready')} ${pc.dim(`in ${ms} ms`)}`);
87
- sink('');
165
+ sink(` ${chip('READY', 'ready')} ${pc.dim(`in ${ms} ms`)}`);
88
166
  }
89
167
  export function hint(text, sink = stderrSink) {
90
168
  sink(` ${pc.dim(text)}`);
91
169
  }
170
+ /**
171
+ * Footer bar — separated row of keybinding / docs hints, each separated by
172
+ * a dim middle dot. Mirrors the bottom strip in modern TUIs.
173
+ */
174
+ export function footerBar(items, sink = stderrSink) {
175
+ const sep = ` ${sym.dot} `;
176
+ sink('');
177
+ sink(` ${pc.dim(items.join(sep))}`);
178
+ sink('');
179
+ }
180
+ /**
181
+ * Step indicator for multi-step flows like `init`. Renders as
182
+ * `[2/3] Pick a source`.
183
+ */
184
+ export function step(n, total, label, sink = stderrSink) {
185
+ sink('');
186
+ sink(` ${chip(`${n}/${total}`, 'info')} ${pc.bold(label)}`);
187
+ }
188
+ /**
189
+ * Bordered panel with rounded corners. Use sparingly — best for "next steps"
190
+ * or "wire into your agent" callouts where the visual frame helps the reader
191
+ * spot the actionable block.
192
+ */
193
+ export function panel(opts, sink = stderrSink) {
194
+ const w = termWidth();
195
+ const inner = w - 2;
196
+ const top = pc.dim('╭' + '─'.repeat(inner) + '╮');
197
+ const bottom = pc.dim('╰' + '─'.repeat(inner) + '╯');
198
+ sink('');
199
+ if (opts.title) {
200
+ const t = ` ${pc.bold(opts.title)} `;
201
+ const pad = Math.max(0, inner - visibleLength(t) - 2);
202
+ sink(` ${pc.dim('╭─')}${t}${pc.dim('─'.repeat(pad) + '╮')}`);
203
+ }
204
+ else {
205
+ sink(` ${top}`);
206
+ }
207
+ for (const line of opts.lines) {
208
+ const pad = Math.max(0, inner - visibleLength(line) - 2);
209
+ sink(` ${pc.dim('│ ')}${line}${' '.repeat(pad)}${pc.dim(' │')}`);
210
+ }
211
+ sink(` ${bottom}`);
212
+ }
92
213
  export function table(columns, rows, sink = stderrSink) {
93
- const widths = columns.map((c, i) => Math.max(c.width ?? 0, c.header.length, ...rows.map((r) => stripAnsi(r[i] ?? '').length)));
214
+ const widths = columns.map((c, i) => Math.max(c.width ?? 0, c.header.length, ...rows.map((r) => visibleLength(r[i] ?? ''))));
94
215
  const head = columns.map((c, i) => pc.bold(pc.dim(c.header.padEnd(widths[i])))).join(' ');
95
216
  sink(` ${head}`);
96
- sink(` ${widths.map((w) => sym.hor.repeat(w)).join(' ')}`);
217
+ sink(` ${widths.map((w) => pc.dim('─'.repeat(w))).join(' ')}`);
97
218
  for (const row of rows) {
98
219
  const line = columns
99
220
  .map((c, i) => {
@@ -105,14 +226,6 @@ export function table(columns, rows, sink = stderrSink) {
105
226
  sink(` ${line}`);
106
227
  }
107
228
  }
108
- function stripAnsi(s) {
109
- // eslint-disable-next-line no-control-regex
110
- return s.replace(/\x1b\[[0-9;]*m/g, '');
111
- }
112
- function padRightAnsi(s, width) {
113
- const visible = stripAnsi(s).length;
114
- return s + ' '.repeat(Math.max(0, width - visible));
115
- }
116
229
  /** Styled URL — cyan + underline, the Vite/Astro/Wrangler look. */
117
230
  export function link(url, label = url) {
118
231
  return pc.cyan(pc.underline(label === url ? url : label));
package/dist/ui.js.map CHANGED
@@ -1 +1 @@
1
- {"version":3,"file":"ui.js","sourceRoot":"","sources":["../src/ui.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"ui.js","sourceRoot":"","sources":["../src/ui.ts"],"names":[],"mappings":"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"}