@nio-cli/cli 0.10.1 → 0.11.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.
Files changed (60) hide show
  1. package/.env.example +118 -114
  2. package/Dockerfile.gateway +20 -20
  3. package/README.md +539 -539
  4. package/dist/adapters/pg/auth-event-repository.js +4 -4
  5. package/dist/adapters/pg/auth-session-repository.js +2 -2
  6. package/dist/adapters/pg/client.js +28 -4
  7. package/dist/adapters/pg/client.js.map +1 -1
  8. package/dist/adapters/pg/dependency-event-repository.js +4 -4
  9. package/dist/adapters/pg/login-challenge-repository.js +2 -2
  10. package/dist/adapters/pg/login-ip-repository.js +3 -3
  11. package/dist/adapters/pg/session-repository.js +3 -3
  12. package/dist/cli/commands/auth.js +38 -16
  13. package/dist/cli/commands/auth.js.map +1 -1
  14. package/dist/cli/commands/completion.js +28 -28
  15. package/dist/cli/commands/docs/html.js +78 -78
  16. package/dist/cli/copy/auth.json +13 -13
  17. package/dist/cli/copy/flows.json +5 -5
  18. package/dist/cli/copy/init.json +15 -15
  19. package/dist/cli/copy/sync.json +3 -3
  20. package/dist/cli.js +3 -7
  21. package/dist/cli.js.map +1 -1
  22. package/dist/gateway/index.js +11 -1
  23. package/dist/gateway/index.js.map +1 -1
  24. package/dist/lib/auth/gateway-process.js +59 -2
  25. package/dist/lib/auth/gateway-process.js.map +1 -1
  26. package/dist/lib/auth/nio-config.js +25 -5
  27. package/dist/lib/auth/nio-config.js.map +1 -1
  28. package/dist/lib/clients/client-configs.js +1 -1
  29. package/dist/lib/clients/client-configs.js.map +1 -1
  30. package/dist/lib/clients/nio-oc-config.js +84 -0
  31. package/dist/lib/clients/nio-oc-config.js.map +1 -0
  32. package/dist/lib/exec/plan-delegate.js.map +1 -1
  33. package/dist/lib/shutdown.js +25 -0
  34. package/dist/lib/shutdown.js.map +1 -0
  35. package/dist/mcp-server-lang.js +0 -0
  36. package/dist/mcp-server.js +0 -0
  37. package/dist/profiles/analyst.js +1 -0
  38. package/dist/profiles/analyst.js.map +1 -1
  39. package/dist/profiles/bi.js +1 -0
  40. package/dist/profiles/bi.js.map +1 -1
  41. package/dist/profiles/dba.js +3 -2
  42. package/dist/profiles/dba.js.map +1 -1
  43. package/dist/profiles/mcps.js.map +1 -1
  44. package/dist/profiles/scientist.js +3 -1
  45. package/dist/profiles/scientist.js.map +1 -1
  46. package/dist/tui/app.js +41 -12
  47. package/dist/tui/app.js.map +1 -1
  48. package/dist/tui/components.js +9 -8
  49. package/dist/tui/components.js.map +1 -1
  50. package/dist/tui/launch.js +13 -1
  51. package/dist/tui/launch.js.map +1 -1
  52. package/dist/tui/opencode.js +17 -0
  53. package/dist/tui/opencode.js.map +1 -1
  54. package/dist/tui/palette.js +29 -0
  55. package/dist/tui/palette.js.map +1 -1
  56. package/dist/tui/state.js +146 -92
  57. package/dist/tui/state.js.map +1 -1
  58. package/docker/docker-compose.yml +114 -114
  59. package/docker/kong.yml +59 -55
  60. package/package.json +97 -97
@@ -4,7 +4,7 @@ const FAILURE_EVENTS = ['password_fail', '2fa_fail', '2fa_expired'];
4
4
  export function createAuthEventRepository() {
5
5
  return {
6
6
  async record(input) {
7
- await query(`INSERT INTO auth_events (event, name, user_id, ip, trace_id, detail)
7
+ await query(`INSERT INTO auth_events (event, name, user_id, ip, trace_id, detail)
8
8
  VALUES ($1, $2, $3, $4, $5, $6)`, [
9
9
  input.event,
10
10
  input.name ? input.name.slice(0, NAME_MAX) : null,
@@ -15,9 +15,9 @@ export function createAuthEventRepository() {
15
15
  ]);
16
16
  },
17
17
  async recentFailures({ userId, name, limit = 5 }) {
18
- const res = await query(`SELECT at, event, host(ip) AS ip FROM auth_events
19
- WHERE event = ANY($1)
20
- AND ( ($2::bigint IS NOT NULL AND user_id = $2) OR ($3::text IS NOT NULL AND name = $3) )
18
+ const res = await query(`SELECT at, event, host(ip) AS ip FROM auth_events
19
+ WHERE event = ANY($1)
20
+ AND ( ($2::bigint IS NOT NULL AND user_id = $2) OR ($3::text IS NOT NULL AND name = $3) )
21
21
  ORDER BY at DESC LIMIT $4`, [FAILURE_EVENTS, userId ?? null, name ?? null, limit]);
22
22
  return res.rows.map((r) => ({ at: r.at, event: r.event, ip: r.ip }));
23
23
  },
@@ -28,8 +28,8 @@ export function createAuthSessionRepository() {
28
28
  await query(`UPDATE auth_sessions SET revoked_at = NOW() WHERE id = $1 AND revoked_at IS NULL`, [id]);
29
29
  },
30
30
  async listActiveByUser(userId) {
31
- const res = await query(`SELECT ${COLS} FROM auth_sessions
32
- WHERE user_id = $1 AND revoked_at IS NULL AND expires_at > NOW()
31
+ const res = await query(`SELECT ${COLS} FROM auth_sessions
32
+ WHERE user_id = $1 AND revoked_at IS NULL AND expires_at > NOW()
33
33
  ORDER BY created_at DESC`, [userId]);
34
34
  return res.rows.map(mapAuthSessionRow);
35
35
  },
@@ -34,6 +34,10 @@ function isLoopbackDbHost(url) {
34
34
  return false;
35
35
  }
36
36
  }
37
+ function verifiedSsl(ca) {
38
+ const servername = process.env.NIO_DATABASE_SSL_SERVERNAME?.trim() || undefined;
39
+ return { rejectUnauthorized: true, ...(ca ? { ca } : {}), ...(servername ? { servername } : {}) };
40
+ }
37
41
  export function readSslOption(url = process.env.NIO_DATABASE_URL?.trim() ?? '') {
38
42
  const explicit = envTriState('NIO_DATABASE_SSL');
39
43
  const enabled = explicit ?? !isLoopbackDbHost(url);
@@ -46,7 +50,7 @@ export function readSslOption(url = process.env.NIO_DATABASE_URL?.trim() ?? '')
46
50
  const ca = readFileSync(caPath, 'utf8');
47
51
  console.error('[pg] NIO_DATABASE_CA e NIO_DATABASE_SSL_INSECURE definidos juntos — ' +
48
52
  'usando a CA (TLS verificado). Remova o flag insecure.');
49
- return { rejectUnauthorized: true, ca };
53
+ return verifiedSsl(ca);
50
54
  }
51
55
  catch {
52
56
  console.error(`[pg] AVISO: NIO_DATABASE_CA ilegível ("${caPath}") — fallback para ` +
@@ -60,13 +64,13 @@ export function readSslOption(url = process.env.NIO_DATABASE_URL?.trim() ?? '')
60
64
  }
61
65
  if (caPath) {
62
66
  try {
63
- return { rejectUnauthorized: true, ca: readFileSync(caPath, 'utf8') };
67
+ return verifiedSsl(readFileSync(caPath, 'utf8'));
64
68
  }
65
69
  catch (err) {
66
70
  throw new Error(`NIO_DATABASE_CA não pôde ser lido ("${caPath}"): ${err.message}`);
67
71
  }
68
72
  }
69
- return { rejectUnauthorized: true };
73
+ return verifiedSsl();
70
74
  }
71
75
  let pool = null;
72
76
  export function getPool() {
@@ -122,6 +126,20 @@ export function isTlsCertError(code, message) {
122
126
  return true;
123
127
  return /self[- ]signed certificate|unable to verify|certificate/i.test(message ?? '');
124
128
  }
129
+ const SERVER_NO_SSL_RE = /does not support SSL|SSL (is not enabled|connections are not)/i;
130
+ const SERVER_REQUIRES_SSL_RE = /SSL off/i;
131
+ export function classifyDbError(code, message) {
132
+ const msg = message ?? '';
133
+ if (code === 'CERT_HAS_EXPIRED' || /certificate has expired/i.test(msg))
134
+ return 'tls-expired';
135
+ if (SERVER_NO_SSL_RE.test(msg))
136
+ return 'tls-server-off';
137
+ if (code === '28000' && SERVER_REQUIRES_SSL_RE.test(msg))
138
+ return 'tls-required';
139
+ if (isTlsCertError(code, msg))
140
+ return 'tls-self-signed';
141
+ return 'unknown';
142
+ }
125
143
  export async function pingDetailed() {
126
144
  try {
127
145
  const res = await query('SELECT 1 AS ok');
@@ -129,7 +147,13 @@ export async function pingDetailed() {
129
147
  }
130
148
  catch (err) {
131
149
  const e = err;
132
- return { ok: false, tlsCertError: isTlsCertError(e.code, e.message), code: e.code, message: e.message };
150
+ return {
151
+ ok: false,
152
+ tlsCertError: isTlsCertError(e.code, e.message),
153
+ tlsKind: classifyDbError(e.code, e.message),
154
+ code: e.code,
155
+ message: e.message,
156
+ };
133
157
  }
134
158
  }
135
159
  export async function ping() {
@@ -1 +1 @@
1
- {"version":3,"file":"client.js","sourceRoot":"","sources":["../../../src/adapters/pg/client.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"client.js","sourceRoot":"","sources":["../../../src/adapters/pg/client.ts"],"names":[],"mappings":"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"}
@@ -16,14 +16,14 @@ export function createDependencyEventRepository() {
16
16
  return {
17
17
  async recordIfNew(input) {
18
18
  return withTransaction(async (tx) => {
19
- const existing = await tx.query(`SELECT ${COLS} FROM dependency_events
20
- WHERE session_id = $1 AND file_path = $2 AND dependency_name = $3
19
+ const existing = await tx.query(`SELECT ${COLS} FROM dependency_events
20
+ WHERE session_id = $1 AND file_path = $2 AND dependency_name = $3
21
21
  ORDER BY detected_at DESC LIMIT 1`, [input.sessionId, input.filePath, input.dependencyName]);
22
22
  if (existing.rows[0]) {
23
23
  return { event: mapDependencyEventRow(existing.rows[0]), created: false };
24
24
  }
25
- const inserted = await tx.query(`INSERT INTO dependency_events (session_id, file_path, dependency_name, dependency_type)
26
- VALUES ($1, $2, $3, $4)
25
+ const inserted = await tx.query(`INSERT INTO dependency_events (session_id, file_path, dependency_name, dependency_type)
26
+ VALUES ($1, $2, $3, $4)
27
27
  RETURNING ${COLS}`, [input.sessionId, input.filePath, input.dependencyName, input.dependencyType]);
28
28
  return { event: mapDependencyEventRow(inserted.rows[0]), created: true };
29
29
  });
@@ -22,8 +22,8 @@ export function createLoginChallengeRepository() {
22
22
  return withTransaction(async (tx) => {
23
23
  await tx.query('DELETE FROM login_challenges WHERE expires_at < NOW()');
24
24
  await tx.query('DELETE FROM login_challenges WHERE user_id = $1 AND consumed_at IS NULL', [input.userId]);
25
- const res = await tx.query(`INSERT INTO login_challenges (user_id, purpose, code_hash, channel, expires_at)
26
- VALUES ($1, $2, $3, $4, $5)
25
+ const res = await tx.query(`INSERT INTO login_challenges (user_id, purpose, code_hash, channel, expires_at)
26
+ VALUES ($1, $2, $3, $4, $5)
27
27
  RETURNING ${COLS}`, [input.userId, input.purpose, input.codeHash, input.channel, input.expiresAt]);
28
28
  return mapLoginChallengeRow(res.rows[0]);
29
29
  });
@@ -8,12 +8,12 @@ const map = (r) => ({
8
8
  export function createLoginIpRepository() {
9
9
  return {
10
10
  async record(userId, ip) {
11
- await query(`INSERT INTO login_ip_events (user_id, ip) VALUES ($1, $2)
12
- ON CONFLICT (user_id, ip)
11
+ await query(`INSERT INTO login_ip_events (user_id, ip) VALUES ($1, $2)
12
+ ON CONFLICT (user_id, ip)
13
13
  DO UPDATE SET last_seen = NOW(), count = login_ip_events.count + 1`, [userId, ip]);
14
14
  },
15
15
  async recent(userId, limit = 10) {
16
- const res = await query(`SELECT host(ip) AS ip, first_seen, last_seen, count FROM login_ip_events
16
+ const res = await query(`SELECT host(ip) AS ip, first_seen, last_seen, count FROM login_ip_events
17
17
  WHERE user_id = $1 ORDER BY last_seen DESC LIMIT $2`, [userId, limit]);
18
18
  return res.rows.map(map);
19
19
  },
@@ -19,8 +19,8 @@ export function createSessionRepository() {
19
19
  async create(input) {
20
20
  return withTransaction(async (tx) => {
21
21
  await tx.query(`UPDATE sessions SET status = 'archived' WHERE user_id = $1 AND status = 'active'`, [input.userId]);
22
- const res = await tx.query(`INSERT INTO sessions (user_id, name, profile, status, project_path, ide, config)
23
- VALUES ($1, $2, $3, 'active', $4, $5, $6)
22
+ const res = await tx.query(`INSERT INTO sessions (user_id, name, profile, status, project_path, ide, config)
23
+ VALUES ($1, $2, $3, 'active', $4, $5, $6)
24
24
  RETURNING ${COLS}`, [
25
25
  input.userId,
26
26
  input.name,
@@ -42,7 +42,7 @@ export function createSessionRepository() {
42
42
  return res.rows.map(mapSessionRow);
43
43
  },
44
44
  async findActiveByUser(userId) {
45
- const res = await query(`SELECT ${COLS} FROM sessions WHERE user_id = $1 AND status = 'active'
45
+ const res = await query(`SELECT ${COLS} FROM sessions WHERE user_id = $1 AND status = 'active'
46
46
  ORDER BY updated_at DESC LIMIT 1`, [userId]);
47
47
  const row = res.rows[0];
48
48
  return row ? mapSessionRow(row) : null;
@@ -7,7 +7,8 @@ import { MIN_PASSWORD_LENGTH } from "../../lib/auth/password.js";
7
7
  import { gatewayLogin, gatewayLogout, gatewayLogoutAll, gatewayRegister, gatewayVerify2fa, } from "../../lib/auth/gateway-client.js";
8
8
  import { loadSession, saveSession, clearSession } from "../../lib/auth/session-store.js";
9
9
  import { ensureConfig } from "../../lib/auth/nio-config.js";
10
- import { ensureGatewayRunning } from "../../lib/auth/gateway-process.js";
10
+ import { checkGatewayVersion, ensureGatewayRunning } from "../../lib/auth/gateway-process.js";
11
+ import { shutdown } from "../../lib/shutdown.js";
11
12
  import { continueChain } from "../flows/onboarding.js";
12
13
  import { box, cmd } from "../../lib/colors.js";
13
14
  import { authCopy } from "../copy.js";
@@ -40,16 +41,27 @@ async function resolveSecondFactor(challengeId, phoneHint, sms) {
40
41
  }
41
42
  async function requireGateway() {
42
43
  const result = await ensureGatewayRunning();
43
- if (result.ok)
44
- return;
45
- console.error(box(`${c.yellow(sym.warn)} ${c.bold("O nio-gateway não está no ar e não consegui subir sozinho.")}\n` +
46
- `${c.dim("abra noutra janela:")} ${cmd("nio-gateway")}\n` +
47
- `${c.dim("e tente de novo.")}`, { borderColor: "yellow", title: "Gateway necessário" }));
48
- process.exit(1);
44
+ if (!result.ok) {
45
+ console.error(box(`${c.yellow(sym.warn)} ${c.bold("O nio-gateway não está no ar e não consegui subir sozinho.")}\n` +
46
+ `${c.dim("abra noutra janela:")} ${cmd("nio-gateway")}\n` +
47
+ `${c.dim("e tente de novo.")}`, { borderColor: "yellow", title: "Gateway necessário" }));
48
+ return false;
49
+ }
50
+ const skew = await checkGatewayVersion();
51
+ if (skew.status === "block") {
52
+ console.error(box(`${c.red(sym.err)} ${c.bold("Gateway incompatível.")}\n\n${c.dim(skew.detail)}`, { borderColor: "red", title: "atualize o gateway" }));
53
+ return false;
54
+ }
55
+ if (skew.status === "warn")
56
+ console.log(` ${c.yellow(sym.warn)} ${skew.detail}`);
57
+ return true;
49
58
  }
50
59
  export async function runLogin() {
51
60
  await ensureConfig({ interactive: true });
52
- await requireGateway();
61
+ if (!(await requireGateway())) {
62
+ await shutdown(1);
63
+ return false;
64
+ }
53
65
  const name = await input({ message: authCopy.login.namePrompt });
54
66
  const pass = await password({ message: authCopy.login.passwordPrompt, mask: "*" });
55
67
  const spinner = startSpinner("Autenticando...");
@@ -58,7 +70,8 @@ export async function runLogin() {
58
70
  const result = await gatewayLogin(name.trim(), pass);
59
71
  if (!result) {
60
72
  spinner.fail(authCopy.login.invalidCredentials);
61
- process.exit(1);
73
+ await shutdown(1);
74
+ return false;
62
75
  }
63
76
  spinner.stop();
64
77
  if (result.step === "done") {
@@ -71,14 +84,16 @@ export async function runLogin() {
71
84
  });
72
85
  if (!s) {
73
86
  console.error(`${c.red(sym.err)} 2º fator não concluído.`);
74
- process.exit(1);
87
+ await shutdown(1);
88
+ return false;
75
89
  }
76
90
  session = s;
77
91
  }
78
92
  }
79
93
  catch (err) {
80
94
  spinner.fail(`Falha ao autenticar: ${err.message}`);
81
- process.exit(1);
95
+ await shutdown(1);
96
+ return false;
82
97
  }
83
98
  await saveSession({
84
99
  userId: session.userId,
@@ -92,10 +107,14 @@ export async function runLogin() {
92
107
  console.log("[ok] Autenticado!");
93
108
  console.log(`Usuário: ${session.name}`);
94
109
  console.log(`ID: ${session.userId}`);
110
+ return true;
95
111
  }
96
112
  export async function runRegister() {
97
113
  await ensureConfig({ interactive: true });
98
- await requireGateway();
114
+ if (!(await requireGateway())) {
115
+ await shutdown(1);
116
+ return false;
117
+ }
99
118
  const name = await input({
100
119
  message: authCopy.register.namePrompt,
101
120
  validate: (v) => v.trim().length > 0 || authCopy.register.nameInvalid,
@@ -118,17 +137,19 @@ export async function runRegister() {
118
137
  }
119
138
  catch (err) {
120
139
  spinner.fail(`Falha ao criar usuário: ${err.message}`);
121
- process.exit(1);
140
+ await shutdown(1);
141
+ return false;
122
142
  }
123
143
  console.log(c.dim("\nVamos entrar:"));
124
- await runLogin();
144
+ return runLogin();
125
145
  }
126
146
  function registerRegisterCommand(program) {
127
147
  program
128
148
  .command("register")
129
149
  .description("Cria um novo usuário via nio-gateway e já entra (login)")
130
150
  .action(async () => {
131
- await runRegister();
151
+ if (!(await runRegister()))
152
+ return;
132
153
  await continueChain({ from: "command" });
133
154
  });
134
155
  }
@@ -137,7 +158,8 @@ function registerLoginCommand(program) {
137
158
  .command("login")
138
159
  .description("Autentica via nio-gateway (túnel HTTP) e salva a sessão localmente (JWT)")
139
160
  .action(async () => {
140
- await runLogin();
161
+ if (!(await runLogin()))
162
+ return;
141
163
  await continueChain({ from: "command" });
142
164
  });
143
165
  }
@@ -1 +1 @@
1
- {"version":3,"file":"auth.js","sourceRoot":"","sources":["../../../src/cli/commands/auth.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"auth.js","sourceRoot":"","sources":["../../../src/cli/commands/auth.ts"],"names":[],"mappings":"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"}
@@ -29,20 +29,20 @@ function bashScript(root) {
29
29
  .filter((s) => s.subs.length > 0 || s.opts.length > 1)
30
30
  .map((s) => ` ${s.name}) __c="${level2(s)}" ;;`)
31
31
  .join("\n");
32
- return `# ${bin} bash completion — gere com: ${bin} completion bash
33
- _${bin}() {
34
- local cur="\${COMP_WORDS[COMP_CWORD]}"
35
- local __c=""
36
- if [ "\$COMP_CWORD" -eq 1 ]; then
37
- __c="${top}"
38
- else
39
- case "\${COMP_WORDS[1]}" in
40
- ${arms}
41
- *) __c="--help" ;;
42
- esac
43
- fi
44
- COMPREPLY=( \$(compgen -W "\$__c" -- "\$cur") )
45
- }
32
+ return `# ${bin} bash completion — gere com: ${bin} completion bash
33
+ _${bin}() {
34
+ local cur="\${COMP_WORDS[COMP_CWORD]}"
35
+ local __c=""
36
+ if [ "\$COMP_CWORD" -eq 1 ]; then
37
+ __c="${top}"
38
+ else
39
+ case "\${COMP_WORDS[1]}" in
40
+ ${arms}
41
+ *) __c="--help" ;;
42
+ esac
43
+ fi
44
+ COMPREPLY=( \$(compgen -W "\$__c" -- "\$cur") )
45
+ }
46
46
  complete -F _${bin} ${bin}`;
47
47
  }
48
48
  function zshScript(root) {
@@ -51,20 +51,20 @@ function zshScript(root) {
51
51
  .filter((s) => s.subs.length > 0 || s.opts.length > 1)
52
52
  .map((s) => ` ${s.name}) __c=(${level2(s)}) ;;`)
53
53
  .join("\n");
54
- return `#compdef ${bin}
55
- # ${bin} zsh completion — gere com: ${bin} completion zsh
56
- _${bin}() {
57
- local -a __c
58
- if (( CURRENT == 2 )); then
59
- __c=(${top})
60
- else
61
- case $words[2] in
62
- ${arms}
63
- *) __c=(--help) ;;
64
- esac
65
- fi
66
- compadd -a __c
67
- }
54
+ return `#compdef ${bin}
55
+ # ${bin} zsh completion — gere com: ${bin} completion zsh
56
+ _${bin}() {
57
+ local -a __c
58
+ if (( CURRENT == 2 )); then
59
+ __c=(${top})
60
+ else
61
+ case $words[2] in
62
+ ${arms}
63
+ *) __c=(--help) ;;
64
+ esac
65
+ fi
66
+ compadd -a __c
67
+ }
68
68
  compdef _${bin} ${bin}`;
69
69
  }
70
70
  function fishScript(root) {
@@ -1,60 +1,60 @@
1
1
  const esc = (s) => s.replace(/[&<>"]/g, (ch) => ({ '&': '&amp;', '<': '&lt;', '>': '&gt;', '"': '&quot;' })[ch]);
2
2
  const inline = (s) => esc(s).replace(/`([^`]+)`/g, (_m, code) => `<code>${code}</code>`);
3
- const STYLE = `
4
- :root{
5
- --bg:#f6f8f5; --surface:#fff; --ink:#16211a; --muted:#5a6b60; --line:#dde5dd;
6
- --accent:#1a7f43; --accent-soft:#e3f2e6; --code-bg:#0d130f; --code-ink:#c8e6cf;
7
- --font:"Inter",ui-sans-serif,-apple-system,"Segoe UI",Roboto,sans-serif;
8
- --mono:ui-monospace,"SF Mono","JetBrains Mono",Menlo,Consolas,monospace;
9
- }
10
- @media (prefers-color-scheme:dark){:root:not([data-theme=light]){
11
- --bg:#0a0e0b; --surface:#0f150f; --ink:#d7e5da; --muted:#7f9285; --line:#1e2a20;
12
- --accent:#4ade80; --accent-soft:#122417; --code-bg:#060907; --code-ink:#bfe9c9;
13
- }}
14
- :root[data-theme=dark]{
15
- --bg:#0a0e0b; --surface:#0f150f; --ink:#d7e5da; --muted:#7f9285; --line:#1e2a20;
16
- --accent:#4ade80; --accent-soft:#122417; --code-bg:#060907; --code-ink:#bfe9c9;
17
- }
18
- *{box-sizing:border-box}
19
- body{margin:0;background:var(--bg);color:var(--ink);font-family:var(--font);
20
- line-height:1.65;-webkit-font-smoothing:antialiased}
21
- a{color:var(--accent);text-decoration:none}
22
- a:hover{text-decoration:underline}
23
- code{font-family:var(--mono);font-size:.88em;background:var(--accent-soft);
24
- color:var(--accent);padding:.1em .38em;border-radius:4px}
25
- header.top{border-bottom:1px solid var(--line);background:var(--surface);
26
- position:sticky;top:0;z-index:5}
27
- .top .inner{max-width:1000px;margin:0 auto;padding:22px 24px;
28
- display:flex;justify-content:space-between;align-items:baseline;gap:20px;flex-wrap:wrap}
29
- .brand{font-family:var(--mono);font-weight:700;font-size:1.35rem;letter-spacing:.02em}
30
- .brand .cursor{color:var(--accent)}
31
- .ver{font-family:var(--mono);font-size:.78rem;color:var(--muted);
32
- border:1px solid var(--line);border-radius:999px;padding:.22em .7em;white-space:nowrap}
33
- button.theme{font:inherit;font-size:.78rem;color:var(--muted);background:none;
34
- border:1px solid var(--line);border-radius:999px;padding:.28em .8em;cursor:pointer;margin-left:8px}
35
- .tag{max-width:1000px;margin:0 auto;padding:16px 24px 0;color:var(--muted);font-size:.95rem}
36
- nav.toc{max-width:1000px;margin:0 auto;padding:14px 24px 26px;display:flex;flex-wrap:wrap;
37
- gap:6px 16px;font-size:.84rem;border-bottom:1px solid var(--line)}
38
- nav.toc a{color:var(--muted)}
39
- nav.toc a:hover,nav.toc a.on{color:var(--accent);text-decoration:none}
40
- main{max-width:1000px;margin:0 auto;padding:40px 24px 96px}
41
- section{margin:0 0 48px;scroll-margin-top:80px}
42
- h2{font-size:1.3rem;margin:0 0 4px;letter-spacing:-.01em}
43
- .blurb{color:var(--muted);margin:0 0 18px;font-size:.95rem}
44
- p{margin:0 0 14px;max-width:72ch}
45
- ul{margin:0 0 16px;padding-left:20px;max-width:74ch}
46
- li{margin:.4em 0}
47
- pre{background:var(--code-bg);color:var(--code-ink);font-family:var(--mono);
48
- font-size:.82rem;line-height:1.6;padding:16px 18px;border-radius:10px;
49
- overflow-x:auto;border:1px solid var(--line);margin:0 0 18px}
50
- pre code{background:none;color:inherit;padding:0;font-size:inherit}
51
- .tbl{overflow-x:auto;margin:0 0 18px;border:1px solid var(--line);border-radius:10px}
52
- table{border-collapse:collapse;width:100%;font-size:.9rem}
53
- th,td{text-align:left;padding:9px 14px;border-bottom:1px solid var(--line);vertical-align:top}
54
- tr:last-child td{border-bottom:0}
55
- th{font-weight:600;color:var(--muted);font-size:.78rem;text-transform:uppercase;letter-spacing:.04em}
56
- td:first-child{font-family:var(--mono);font-size:.85rem;white-space:nowrap}
57
- @media(max-width:640px){td:first-child{white-space:normal}}
3
+ const STYLE = `
4
+ :root{
5
+ --bg:#f6f8f5; --surface:#fff; --ink:#16211a; --muted:#5a6b60; --line:#dde5dd;
6
+ --accent:#1a7f43; --accent-soft:#e3f2e6; --code-bg:#0d130f; --code-ink:#c8e6cf;
7
+ --font:"Inter",ui-sans-serif,-apple-system,"Segoe UI",Roboto,sans-serif;
8
+ --mono:ui-monospace,"SF Mono","JetBrains Mono",Menlo,Consolas,monospace;
9
+ }
10
+ @media (prefers-color-scheme:dark){:root:not([data-theme=light]){
11
+ --bg:#0a0e0b; --surface:#0f150f; --ink:#d7e5da; --muted:#7f9285; --line:#1e2a20;
12
+ --accent:#4ade80; --accent-soft:#122417; --code-bg:#060907; --code-ink:#bfe9c9;
13
+ }}
14
+ :root[data-theme=dark]{
15
+ --bg:#0a0e0b; --surface:#0f150f; --ink:#d7e5da; --muted:#7f9285; --line:#1e2a20;
16
+ --accent:#4ade80; --accent-soft:#122417; --code-bg:#060907; --code-ink:#bfe9c9;
17
+ }
18
+ *{box-sizing:border-box}
19
+ body{margin:0;background:var(--bg);color:var(--ink);font-family:var(--font);
20
+ line-height:1.65;-webkit-font-smoothing:antialiased}
21
+ a{color:var(--accent);text-decoration:none}
22
+ a:hover{text-decoration:underline}
23
+ code{font-family:var(--mono);font-size:.88em;background:var(--accent-soft);
24
+ color:var(--accent);padding:.1em .38em;border-radius:4px}
25
+ header.top{border-bottom:1px solid var(--line);background:var(--surface);
26
+ position:sticky;top:0;z-index:5}
27
+ .top .inner{max-width:1000px;margin:0 auto;padding:22px 24px;
28
+ display:flex;justify-content:space-between;align-items:baseline;gap:20px;flex-wrap:wrap}
29
+ .brand{font-family:var(--mono);font-weight:700;font-size:1.35rem;letter-spacing:.02em}
30
+ .brand .cursor{color:var(--accent)}
31
+ .ver{font-family:var(--mono);font-size:.78rem;color:var(--muted);
32
+ border:1px solid var(--line);border-radius:999px;padding:.22em .7em;white-space:nowrap}
33
+ button.theme{font:inherit;font-size:.78rem;color:var(--muted);background:none;
34
+ border:1px solid var(--line);border-radius:999px;padding:.28em .8em;cursor:pointer;margin-left:8px}
35
+ .tag{max-width:1000px;margin:0 auto;padding:16px 24px 0;color:var(--muted);font-size:.95rem}
36
+ nav.toc{max-width:1000px;margin:0 auto;padding:14px 24px 26px;display:flex;flex-wrap:wrap;
37
+ gap:6px 16px;font-size:.84rem;border-bottom:1px solid var(--line)}
38
+ nav.toc a{color:var(--muted)}
39
+ nav.toc a:hover,nav.toc a.on{color:var(--accent);text-decoration:none}
40
+ main{max-width:1000px;margin:0 auto;padding:40px 24px 96px}
41
+ section{margin:0 0 48px;scroll-margin-top:80px}
42
+ h2{font-size:1.3rem;margin:0 0 4px;letter-spacing:-.01em}
43
+ .blurb{color:var(--muted);margin:0 0 18px;font-size:.95rem}
44
+ p{margin:0 0 14px;max-width:72ch}
45
+ ul{margin:0 0 16px;padding-left:20px;max-width:74ch}
46
+ li{margin:.4em 0}
47
+ pre{background:var(--code-bg);color:var(--code-ink);font-family:var(--mono);
48
+ font-size:.82rem;line-height:1.6;padding:16px 18px;border-radius:10px;
49
+ overflow-x:auto;border:1px solid var(--line);margin:0 0 18px}
50
+ pre code{background:none;color:inherit;padding:0;font-size:inherit}
51
+ .tbl{overflow-x:auto;margin:0 0 18px;border:1px solid var(--line);border-radius:10px}
52
+ table{border-collapse:collapse;width:100%;font-size:.9rem}
53
+ th,td{text-align:left;padding:9px 14px;border-bottom:1px solid var(--line);vertical-align:top}
54
+ tr:last-child td{border-bottom:0}
55
+ th{font-weight:600;color:var(--muted);font-size:.78rem;text-transform:uppercase;letter-spacing:.04em}
56
+ td:first-child{font-family:var(--mono);font-size:.85rem;white-space:nowrap}
57
+ @media(max-width:640px){td:first-child{white-space:normal}}
58
58
  `;
59
59
  function renderBlock(b) {
60
60
  if (b.kind === 'p')
@@ -69,19 +69,19 @@ function renderBlock(b) {
69
69
  .join('');
70
70
  return `<div class="tbl"><table><thead><tr>${head}</tr></thead><tbody>${rows}</tbody></table></div>`;
71
71
  }
72
- const SCRIPT = `
73
- const root=document.documentElement,KEY='nio-docs-theme';
74
- try{const t=localStorage.getItem(KEY);if(t)root.dataset.theme=t}catch(e){}
75
- document.querySelector('button.theme').onclick=()=>{
76
- const sysDark=matchMedia('(prefers-color-scheme:dark)').matches;
77
- const cur=root.dataset.theme||(sysDark?'dark':'light');
78
- const next=cur==='dark'?'light':'dark';root.dataset.theme=next;
79
- try{localStorage.setItem(KEY,next)}catch(e){}};
80
- const links=[...document.querySelectorAll('nav.toc a')];
81
- addEventListener('scroll',()=>{let on=links[0];
82
- for(const l of links){const el=document.getElementById(l.hash.slice(1));
83
- if(el&&el.getBoundingClientRect().top<140)on=l}
84
- links.forEach(l=>l.classList.toggle('on',l===on))},{passive:true});
72
+ const SCRIPT = `
73
+ const root=document.documentElement,KEY='nio-docs-theme';
74
+ try{const t=localStorage.getItem(KEY);if(t)root.dataset.theme=t}catch(e){}
75
+ document.querySelector('button.theme').onclick=()=>{
76
+ const sysDark=matchMedia('(prefers-color-scheme:dark)').matches;
77
+ const cur=root.dataset.theme||(sysDark?'dark':'light');
78
+ const next=cur==='dark'?'light':'dark';root.dataset.theme=next;
79
+ try{localStorage.setItem(KEY,next)}catch(e){}};
80
+ const links=[...document.querySelectorAll('nav.toc a')];
81
+ addEventListener('scroll',()=>{let on=links[0];
82
+ for(const l of links){const el=document.getElementById(l.hash.slice(1));
83
+ if(el&&el.getBoundingClientRect().top<140)on=l}
84
+ links.forEach(l=>l.classList.toggle('on',l===on))},{passive:true});
85
85
  `;
86
86
  export function renderHtml(sections, version, tagline) {
87
87
  const nav = sections
@@ -93,16 +93,16 @@ export function renderHtml(sections, version, tagline) {
93
93
  s.blocks.map(renderBlock).join('') +
94
94
  `</section>`)
95
95
  .join('');
96
- return `<!doctype html><html lang="pt-BR"><head><meta charset="utf-8">
97
- <meta name="viewport" content="width=device-width,initial-scale=1">
98
- <title>NIO-CLI — documentação</title><style>${STYLE}</style></head><body>
99
- <header class="top"><div class="inner">
100
- <div class="brand">nio<span class="cursor">_</span></div>
101
- <div style="white-space:nowrap"><span class="ver">v${esc(version)}</span>
102
- <button class="theme">tema</button></div></div></header>
103
- <p class="tag">${esc(tagline)}</p>
104
- <nav class="toc">${nav}</nav>
105
- <main>${body}</main>
96
+ return `<!doctype html><html lang="pt-BR"><head><meta charset="utf-8">
97
+ <meta name="viewport" content="width=device-width,initial-scale=1">
98
+ <title>NIO-CLI — documentação</title><style>${STYLE}</style></head><body>
99
+ <header class="top"><div class="inner">
100
+ <div class="brand">nio<span class="cursor">_</span></div>
101
+ <div style="white-space:nowrap"><span class="ver">v${esc(version)}</span>
102
+ <button class="theme">tema</button></div></div></header>
103
+ <p class="tag">${esc(tagline)}</p>
104
+ <nav class="toc">${nav}</nav>
105
+ <main>${body}</main>
106
106
  <script>${SCRIPT}</script></body></html>`;
107
107
  }
108
108
  //# sourceMappingURL=html.js.map