geotechcli 0.3.0 → 0.4.1

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.
@@ -0,0 +1,3 @@
1
+ import { Command } from 'commander';
2
+ export declare function registerVizCommand(program: Command): void;
3
+ //# sourceMappingURL=viz.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"viz.d.ts","sourceRoot":"","sources":["../../src/commands/viz.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AAgFpC,wBAAgB,kBAAkB,CAAC,OAAO,EAAE,OAAO,GAAG,IAAI,CAoEzD"}
@@ -0,0 +1,131 @@
1
+ import { Command } from 'commander';
2
+ import chalk from 'chalk';
3
+ import { createInterface } from 'node:readline/promises';
4
+ import { stdin as input, stdout as output } from 'node:process';
5
+ import { banner, heading, renderChart, renderMultiChart, warn } from '../ui/terminal.js';
6
+ import { loadVisualizationSource } from '../util/viz.js';
7
+ function summarizeDomain(values) {
8
+ if (values.length === 0) {
9
+ return 'No samples';
10
+ }
11
+ const min = Math.min(...values);
12
+ const max = Math.max(...values);
13
+ return `${min.toFixed(2)} to ${max.toFixed(2)} (${values.length} samples)`;
14
+ }
15
+ function renderVisualization(chart, height) {
16
+ heading(chart.title);
17
+ console.log(chalk.gray(` X-axis: ${chart.xLabel} | Domain: ${summarizeDomain(chart.xValues)}`));
18
+ console.log(chalk.gray(` Y-axis: ${chart.yLabel}`));
19
+ if (chart.note) {
20
+ console.log(chalk.gray(` ${chart.note}`));
21
+ }
22
+ if (chart.series.length > 1) {
23
+ renderMultiChart(chart.series, chart.labels, {
24
+ height,
25
+ title: `${chart.title} (${chart.xLabel})`,
26
+ });
27
+ }
28
+ else {
29
+ renderChart(chart.series[0], {
30
+ height,
31
+ label: `${chart.labels[0]} (${chart.xLabel})`,
32
+ });
33
+ }
34
+ }
35
+ function printChartCatalog(charts) {
36
+ console.log('');
37
+ console.log(chalk.cyan(' Available charts:'));
38
+ charts.forEach((chart, index) => {
39
+ console.log(chalk.gray(` ${String(index + 1).padStart(2, ' ')}. `) + chalk.white(chart.id) + chalk.gray(` — ${chart.title}`));
40
+ });
41
+ console.log('');
42
+ }
43
+ async function browseChartsInteractively(charts, height) {
44
+ const rl = createInterface({ input, output });
45
+ try {
46
+ while (true) {
47
+ printChartCatalog(charts);
48
+ const answer = (await rl.question(' Select chart number, "a" for all, or "q" to quit: ')).trim().toLowerCase();
49
+ if (answer === 'q') {
50
+ console.log('');
51
+ break;
52
+ }
53
+ if (answer === 'a') {
54
+ for (const chart of charts) {
55
+ renderVisualization(chart, height);
56
+ }
57
+ continue;
58
+ }
59
+ const selectedIndex = Number(answer);
60
+ if (!Number.isInteger(selectedIndex) || selectedIndex < 1 || selectedIndex > charts.length) {
61
+ warn(`Invalid selection "${answer}".`);
62
+ continue;
63
+ }
64
+ renderVisualization(charts[selectedIndex - 1], height);
65
+ }
66
+ }
67
+ finally {
68
+ rl.close();
69
+ }
70
+ }
71
+ export function registerVizCommand(program) {
72
+ const cmd = new Command('viz')
73
+ .description('Interactive terminal visualization for saved JSON, CSV, and Excel analysis data')
74
+ .argument('<file>', 'Visualization source file (.json, .csv, .xlsx)')
75
+ .option('--chart <id>', 'Render a specific chart id directly')
76
+ .option('--list', 'List available charts without rendering')
77
+ .option('--all', 'Render all detected charts')
78
+ .option('--sheet <name>', 'Workbook sheet name for .xlsx inputs')
79
+ .option('--x <column>', 'Override the X-axis column for tabular inputs')
80
+ .option('--y <columns>', 'Comma-separated Y columns for tabular inputs')
81
+ .option('--height <rows>', 'Chart height in terminal rows', (value) => parseInt(value, 10), 12)
82
+ .addHelpText('after', `
83
+ Examples:
84
+ geotech viz samples/visualization/geotech-viz-showcase.csv
85
+ geotech viz samples/visualization/geotech-viz-showcase.xlsx --sheet settlement_profile
86
+ geotech viz output/liquefaction.json --list
87
+ geotech viz output/liquefaction.json --chart output-liquefaction-fs-by-depth
88
+ `)
89
+ .action(async (filePath, opts) => {
90
+ const yColumns = typeof opts.y === 'string'
91
+ ? opts.y.split(',').map((value) => value.trim()).filter((value) => value.length > 0)
92
+ : undefined;
93
+ const source = await loadVisualizationSource(filePath, {
94
+ sheetName: opts.sheet,
95
+ xColumn: opts.x,
96
+ yColumns,
97
+ });
98
+ if (source.charts.length === 0) {
99
+ throw new Error(`No chartable data found in ${filePath}. Save JSON output from a supported command, or provide numeric CSV/XLSX columns.`);
100
+ }
101
+ banner();
102
+ console.log(chalk.gray(` Source: ${filePath} (${source.sourceType.toUpperCase()})`));
103
+ console.log(chalk.gray(` Charts detected: ${source.charts.length}`));
104
+ if (opts.list) {
105
+ printChartCatalog(source.charts);
106
+ return;
107
+ }
108
+ if (typeof opts.chart === 'string') {
109
+ const match = source.charts.find((chart) => chart.id === opts.chart);
110
+ if (!match) {
111
+ throw new Error(`Chart "${opts.chart}" not found. Run "geotech viz ${filePath} --list" to inspect available chart ids.`);
112
+ }
113
+ renderVisualization(match, opts.height);
114
+ return;
115
+ }
116
+ if (opts.all || source.charts.length === 1 || !input.isTTY) {
117
+ if (!input.isTTY && source.charts.length > 1 && !opts.all) {
118
+ warn('Interactive mode is unavailable in this shell. Rendering the first chart only.');
119
+ renderVisualization(source.charts[0], opts.height);
120
+ return;
121
+ }
122
+ for (const chart of source.charts) {
123
+ renderVisualization(chart, opts.height);
124
+ }
125
+ return;
126
+ }
127
+ await browseChartsInteractively(source.charts, opts.height);
128
+ });
129
+ program.addCommand(cmd);
130
+ }
131
+ //# sourceMappingURL=viz.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"viz.js","sourceRoot":"","sources":["../../src/commands/viz.ts"],"names":[],"mappings":"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"}
package/dist/index.js CHANGED
@@ -15,6 +15,7 @@ import { registerSlopeCommand } from './commands/slope.js';
15
15
  import { registerRetainingCommand } from './commands/retaining.js';
16
16
  import { registerSettlementCommands } from './commands/settlement.js';
17
17
  import { registerSeepageCommand } from './commands/seepage.js';
18
+ import { registerVizCommand } from './commands/viz.js';
18
19
  import { registerVisionCommand, registerAIClassifyCommand, registerGBRCommand, registerAgentCommand, registerReportCommand, registerChatCommand, } from './commands/ai.js';
19
20
  const program = new Command();
20
21
  program
@@ -37,6 +38,7 @@ registerRetainingCommand(program);
37
38
  registerSettlementCommands(program);
38
39
  // Seepage
39
40
  registerSeepageCommand(program);
41
+ registerVizCommand(program);
40
42
  // Tunnel engineering
41
43
  registerTunnelCommands(program);
42
44
  // ---------------------------------------------------------------------------
@@ -54,9 +56,10 @@ registerBridgeCommand(program);
54
56
  // System
55
57
  registerConfigCommand(program);
56
58
  registerStatusCommand(program);
57
- // Show banner when invoked with no arguments
59
+ // Show help when invoked with no arguments and exit cleanly.
58
60
  if (process.argv.length <= 2) {
59
- banner();
61
+ program.outputHelp();
62
+ process.exit(0);
60
63
  }
61
64
  // ---------------------------------------------------------------------------
62
65
  // Error handling — never leak API keys in stack traces
@@ -70,6 +73,9 @@ catch (err) {
70
73
  if ('exitCode' in err && err.exitCode === 0) {
71
74
  process.exit(0);
72
75
  }
76
+ if ('code' in err && err.code === 'commander.helpDisplayed') {
77
+ process.exit(0);
78
+ }
73
79
  const msg = err.message.replace(/(?:Bearer |sk-|zhipu-|api[_-]?key[=: ]*)[^\s"'\]},]*/gi, '***REDACTED***');
74
80
  console.error(`\n Error: ${msg}\n`);
75
81
  process.exit(1);
package/dist/index.js.map CHANGED
@@ -1 +1 @@
1
- {"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"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"}
@@ -10,7 +10,6 @@ export declare function renderTable(headers: string[], rows: (string | number)[]
10
10
  export declare function renderChart(data: number[], options?: {
11
11
  height?: number;
12
12
  label?: string;
13
- colors?: readonly string[];
14
13
  }): void;
15
14
  export declare function renderMultiChart(series: number[][], labels: string[], options?: {
16
15
  height?: number;
@@ -1 +1 @@
1
- {"version":3,"file":"terminal.d.ts","sourceRoot":"","sources":["../../src/ui/terminal.ts"],"names":[],"mappings":"AAQA,wBAAgB,MAAM,IAAI,IAAI,CAmB7B;AAGD,wBAAgB,OAAO,CAAC,IAAI,EAAE,MAAM,GAAG,IAAI,CAI1C;AAED,wBAAgB,OAAO,CAAC,IAAI,EAAE,MAAM,GAAG,IAAI,CAE1C;AAED,wBAAgB,IAAI,CAAC,IAAI,EAAE,MAAM,GAAG,IAAI,CAEvC;AAED,wBAAgB,KAAK,CAAC,IAAI,EAAE,MAAM,GAAG,IAAI,CAExC;AAED,wBAAgB,IAAI,CAAC,IAAI,EAAE,MAAM,GAAG,IAAI,CAEvC;AAED,wBAAgB,GAAG,CAAC,IAAI,EAAE,MAAM,GAAG,IAAI,CAEtC;AAED,wBAAgB,QAAQ,CAAC,GAAG,EAAE,MAAM,EAAE,KAAK,EAAE,MAAM,GAAG,MAAM,GAAG,IAAI,CAMlE;AAMD,wBAAgB,WAAW,CACzB,OAAO,EAAE,MAAM,EAAE,EACjB,IAAI,EAAE,CAAC,MAAM,GAAG,MAAM,CAAC,EAAE,EAAE,GAC1B,IAAI,CAyCN;AAMD,wBAAgB,WAAW,CACzB,IAAI,EAAE,MAAM,EAAE,EACd,OAAO,CAAC,EAAE;IAAE,MAAM,CAAC,EAAE,MAAM,CAAC;IAAC,KAAK,CAAC,EAAE,MAAM,CAAC;IAAC,MAAM,CAAC,EAAE,SAAS,MAAM,EAAE,CAAA;CAAE,GACxE,IAAI,CAgBN;AAED,wBAAgB,gBAAgB,CAC9B,MAAM,EAAE,MAAM,EAAE,EAAE,EAClB,MAAM,EAAE,MAAM,EAAE,EAChB,OAAO,CAAC,EAAE;IAAE,MAAM,CAAC,EAAE,MAAM,CAAC;IAAC,KAAK,CAAC,EAAE,MAAM,CAAA;CAAE,GAC5C,IAAI,CA8BN;AAMD,wBAAgB,WAAW,CAAC,KAAK,EAAE,MAAM,EAAE,EAAE,OAAO,EAAE,OAAO,GAAG,IAAI,CAQnE;AAMD,wBAAgB,UAAU,CAAC,IAAI,EAAE,OAAO,GAAG,IAAI,CAY9C"}
1
+ {"version":3,"file":"terminal.d.ts","sourceRoot":"","sources":["../../src/ui/terminal.ts"],"names":[],"mappings":"AAaA,wBAAgB,MAAM,IAAI,IAAI,CAU7B;AAED,wBAAgB,OAAO,CAAC,IAAI,EAAE,MAAM,GAAG,IAAI,CAI1C;AAED,wBAAgB,OAAO,CAAC,IAAI,EAAE,MAAM,GAAG,IAAI,CAE1C;AAED,wBAAgB,IAAI,CAAC,IAAI,EAAE,MAAM,GAAG,IAAI,CAEvC;AAED,wBAAgB,KAAK,CAAC,IAAI,EAAE,MAAM,GAAG,IAAI,CAExC;AAED,wBAAgB,IAAI,CAAC,IAAI,EAAE,MAAM,GAAG,IAAI,CAEvC;AAED,wBAAgB,GAAG,CAAC,IAAI,EAAE,MAAM,GAAG,IAAI,CAEtC;AAED,wBAAgB,QAAQ,CAAC,GAAG,EAAE,MAAM,EAAE,KAAK,EAAE,MAAM,GAAG,MAAM,GAAG,IAAI,CAMlE;AAED,wBAAgB,WAAW,CAAC,OAAO,EAAE,MAAM,EAAE,EAAE,IAAI,EAAE,CAAC,MAAM,GAAG,MAAM,CAAC,EAAE,EAAE,GAAG,IAAI,CA8BhF;AAED,wBAAgB,WAAW,CACzB,IAAI,EAAE,MAAM,EAAE,EACd,OAAO,CAAC,EAAE;IAAE,MAAM,CAAC,EAAE,MAAM,CAAC;IAAC,KAAK,CAAC,EAAE,MAAM,CAAA;CAAE,GAC5C,IAAI,CAgBN;AAED,wBAAgB,gBAAgB,CAC9B,MAAM,EAAE,MAAM,EAAE,EAAE,EAClB,MAAM,EAAE,MAAM,EAAE,EAChB,OAAO,CAAC,EAAE;IAAE,MAAM,CAAC,EAAE,MAAM,CAAC;IAAC,KAAK,CAAC,EAAE,MAAM,CAAA;CAAE,GAC5C,IAAI,CA0BN;AAED,wBAAgB,WAAW,CAAC,KAAK,EAAE,MAAM,EAAE,EAAE,OAAO,EAAE,OAAO,GAAG,IAAI,CAQnE;AAED,wBAAgB,UAAU,CAAC,IAAI,EAAE,OAAO,GAAG,IAAI,CAW9C"}
@@ -1,94 +1,70 @@
1
1
  import chalk from 'chalk';
2
2
  import * as asciichart from 'asciichart';
3
3
  import { GEOTECHCLI_VERSION } from '@geotechcli/core';
4
- // ---------------------------------------------------------------------------
5
- // Branded output
6
- // ---------------------------------------------------------------------------
4
+ function stripAnsi(value) {
5
+ return value.replace(/\x1b\[[0-9;]*m/g, '');
6
+ }
7
+ function pad(value, width) {
8
+ const visible = stripAnsi(value).length;
9
+ return `${value}${' '.repeat(Math.max(0, width - visible))}`;
10
+ }
7
11
  export function banner() {
8
- const c = chalk.bold.cyan;
9
- const w = chalk.bold.white;
10
- const g = chalk.gray;
11
- console.log('');
12
- console.log(c(' ██████╗ ███████╗ ██████╗ ████████╗███████╗ ██████╗██╗ ██╗ ██████╗██╗ ██╗'));
13
- console.log(c(' ██╔════╝ ██╔════╝██╔═══██╗╚══██╔══╝██╔════╝██╔════╝██║ ██║██╔════╝██║ ██║'));
14
- console.log(w(' ██║ ███╗█████╗ ██║ ██║ ██║ █████╗ ██║ ███████║██║ ██║ ██║'));
15
- console.log(w(' ██║ ██║██╔══╝ ██║ ██║ ██║ ██╔══╝ ██║ ██╔══██║██║ ██║ ██║'));
16
- console.log(c(' ╚██████╔╝███████╗╚██████╔╝ ██║ ███████╗╚██████╗██║ ██║╚██████╗███████╗██║'));
17
- console.log(c(' ╚═════╝ ╚══════╝ ╚═════╝ ╚═╝ ╚══════╝ ╚═════╝╚═╝ ╚═╝ ╚═════╝╚══════╝╚═╝'));
18
12
  console.log('');
19
- console.log(g(' v') + chalk.cyan(GEOTECHCLI_VERSION) +
20
- g(' · AI-native geotechnical engineering · ') +
21
- chalk.dim('https://beta.geotechcli.com'));
13
+ console.log(chalk.bold.cyan(' ██████╗ ███████╗ ██████╗ ████████╗███████╗ ██████╗██╗ ██╗ ██████╗██╗ ██╗'));
14
+ console.log(chalk.bold.cyan(' ██╔════╝ ██╔════╝██╔═══██╗╚══██╔══╝██╔════╝██╔════╝██║ ██║██╔════╝██║ ██║'));
15
+ console.log(chalk.bold.white(' ██║ ███╗█████╗ ██║ ██║ ██║ █████╗ ██║ ███████║██║ ██║ ██║'));
16
+ console.log(chalk.bold.white(' ██║ ██║██╔══╝ ██║ ██║ ██║ ██╔══╝ ██║ ██╔══██║██║ ██║ ██║'));
17
+ console.log(chalk.bold.cyan(' ╚██████╔╝███████╗╚██████╔╝ ██║ ███████╗╚██████╗██║ ██║╚██████╗███████╗██║'));
18
+ console.log(chalk.bold.cyan(' ╚═════╝ ╚══════╝ ╚═════╝ ╚═╝ ╚══════╝ ╚═════╝╚═╝ ╚═╝ ╚═════╝╚══════╝╚═╝'));
19
+ console.log(chalk.gray(` v${GEOTECHCLI_VERSION} | AI-native geotechnical engineering | https://beta.geotechcli.com`));
22
20
  console.log('');
23
21
  }
24
22
  export function heading(text) {
25
23
  console.log('');
26
24
  console.log(chalk.bold.white(` ${text}`));
27
- console.log(chalk.gray(' ' + '─'.repeat(Math.min(text.length + 4, 60))));
25
+ console.log(chalk.gray(` ${'-'.repeat(Math.min(text.length + 4, 60))}`));
28
26
  }
29
27
  export function success(text) {
30
- console.log(chalk.green(' ✓ ') + text);
28
+ console.log(chalk.green(` OK ${text}`));
31
29
  }
32
30
  export function warn(text) {
33
- console.log(chalk.yellow(' ⚠ ') + text);
31
+ console.log(chalk.yellow(` WARN ${text}`));
34
32
  }
35
33
  export function error(text) {
36
- console.log(chalk.red(' ✗ ') + text);
34
+ console.log(chalk.red(` ERR ${text}`));
37
35
  }
38
36
  export function info(text) {
39
- console.log(chalk.blue(' ℹ ') + text);
37
+ console.log(chalk.blue(` INFO ${text}`));
40
38
  }
41
39
  export function dim(text) {
42
40
  console.log(chalk.gray(` ${text}`));
43
41
  }
44
42
  export function keyValue(key, value) {
45
43
  console.log(chalk.gray(' ') +
46
- chalk.white.bold(key.padEnd(28)) +
44
+ chalk.white.bold(pad(key, 28)) +
47
45
  chalk.cyan(String(value)));
48
46
  }
49
- // ---------------------------------------------------------------------------
50
- // Tables
51
- // ---------------------------------------------------------------------------
52
47
  export function renderTable(headers, rows) {
53
- // Calculate column widths (strip ANSI for measurement)
54
- const stripAnsi = (s) => s.replace(/\x1b\[[0-9;]*m/g, '');
55
- const allRows = [headers, ...rows.map((r) => r.map(String))];
56
- const colWidths = headers.map((_, ci) => Math.max(...allRows.map((r) => stripAnsi(String(r[ci] ?? '')).length)) + 2);
57
- const pad = (s, w) => {
58
- const visible = stripAnsi(s).length;
59
- return ' ' + s + ' '.repeat(Math.max(0, w - visible - 1));
60
- };
61
- const colorCell = (s) => {
62
- if (s === 'SEVERE' || s === 'HIGH')
63
- return chalk.red.bold(s);
64
- if (s === 'MODERATE')
65
- return chalk.yellow(s);
66
- if (s === 'LOW')
67
- return chalk.green(s);
68
- return s;
69
- };
70
- const topBorder = chalk.gray(' ┌' + colWidths.map((w) => '─'.repeat(w)).join('┬') + '┐');
71
- const midBorder = chalk.gray(' ├' + colWidths.map((w) => '─'.repeat(w)).join('┼') + '┤');
72
- const botBorder = chalk.gray(' └' + colWidths.map((w) => '─'.repeat(w)).join('┴') + '┘');
73
- const formatRow = (cells, isHeader = false) => {
74
- const formatted = cells.map((c, i) => {
75
- const display = isHeader ? chalk.cyan.bold(c) : colorCell(c);
76
- return pad(display, colWidths[i]);
77
- });
78
- return chalk.gray(' │') + formatted.join(chalk.gray('│')) + chalk.gray('│');
48
+ const stringRows = rows.map((row) => row.map((cell) => String(cell)));
49
+ const allRows = [headers, ...stringRows];
50
+ const colWidths = headers.map((_, columnIndex) => Math.max(...allRows.map((row) => stripAnsi(row[columnIndex] ?? '').length)) + 2);
51
+ const makeBorder = (left, mid, right) => chalk.gray(` ${left}${colWidths.map((width) => '-'.repeat(width + 2)).join(mid)}${right}`);
52
+ const formatCell = (value, columnIndex, isHeader = false) => {
53
+ const display = isHeader ? chalk.cyan.bold(value) : value;
54
+ return ` ${pad(display, colWidths[columnIndex])} `;
79
55
  };
56
+ const formatRow = (cells, isHeader = false) => chalk.gray(' |') +
57
+ cells.map((cell, index) => formatCell(cell, index, isHeader)).join(chalk.gray('|')) +
58
+ chalk.gray('|');
80
59
  console.log('');
81
- console.log(topBorder);
60
+ console.log(makeBorder('+', '+', '+'));
82
61
  console.log(formatRow(headers, true));
83
- console.log(midBorder);
84
- for (const row of rows) {
85
- console.log(formatRow(row.map(String)));
62
+ console.log(makeBorder('+', '+', '+'));
63
+ for (const row of stringRows) {
64
+ console.log(formatRow(row));
86
65
  }
87
- console.log(botBorder);
66
+ console.log(makeBorder('+', '+', '+'));
88
67
  }
89
- // ---------------------------------------------------------------------------
90
- // Charts (ASCII line chart for --plot)
91
- // ---------------------------------------------------------------------------
92
68
  export function renderChart(data, options) {
93
69
  const height = options?.height ?? 12;
94
70
  console.log('');
@@ -123,16 +99,10 @@ export function renderMultiChart(series, labels, options) {
123
99
  format: (x) => x.toFixed(1).padStart(8),
124
100
  });
125
101
  console.log(chart);
126
- // Legend
127
- const legend = labels
128
- .map((l, i) => chalk.hex(i === 0 ? '#00ffff' : i === 1 ? '#ffff00' : i === 2 ? '#ff0000' : '#00ff00')(`■ ${l}`))
129
- .join(' ');
102
+ const legend = labels.map((label, index) => `${index + 1}:${label}`).join(' ');
130
103
  console.log(` ${legend}`);
131
104
  console.log('');
132
105
  }
133
- // ---------------------------------------------------------------------------
134
- // Steps (verbose output)
135
- // ---------------------------------------------------------------------------
136
106
  export function renderSteps(steps, verbose) {
137
107
  if (!verbose)
138
108
  return;
@@ -142,11 +112,7 @@ export function renderSteps(steps, verbose) {
142
112
  console.log(chalk.gray(` ${step}`));
143
113
  }
144
114
  }
145
- // ---------------------------------------------------------------------------
146
- // JSON output
147
- // ---------------------------------------------------------------------------
148
115
  export function renderJSON(data) {
149
- // Security: strip any apiKey/api_key/token fields before output
150
116
  const sanitized = JSON.parse(JSON.stringify(data, (key, value) => {
151
117
  if (/api.?key|token|secret|password/i.test(key)) {
152
118
  if (typeof value === 'boolean' || typeof value === 'number' || value == null) {
@@ -1 +1 @@
1
- {"version":3,"file":"terminal.js","sourceRoot":"","sources":["../../src/ui/terminal.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"terminal.js","sourceRoot":"","sources":["../../src/ui/terminal.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,40 @@
1
+ export declare const HOSTED_BETA_REQUEST_LIMIT_BYTES: number;
2
+ export declare const HOSTED_BETA_REQUEST_SAFE_BYTES: number;
3
+ export type VisionFileKind = 'image' | 'pdf' | 'unknown';
4
+ export type StructuredOutputKind = 'text' | 'pdf' | 'docx';
5
+ export interface VisionInput {
6
+ base64: string;
7
+ mimeType: string;
8
+ fileBytes: number;
9
+ filePath: string;
10
+ ext: string;
11
+ kind: VisionFileKind;
12
+ }
13
+ export interface VisionPdfPageInput extends VisionInput {
14
+ pageNumber: number;
15
+ totalPages: number;
16
+ }
17
+ export interface HostedBetaVisionRequestDetails {
18
+ prompt: string;
19
+ systemPrompt: string;
20
+ imageBase64: string;
21
+ mimeType: string;
22
+ model: string;
23
+ temperature?: number;
24
+ maxTokens?: number;
25
+ jsonMode?: boolean;
26
+ }
27
+ export declare function readVisionInput(filePath: string): VisionInput;
28
+ export declare function readVisionPdfPageInputs(filePath: string): Promise<VisionPdfPageInput[]>;
29
+ export declare function estimateHostedBetaVisionBodyBytes(details: HostedBetaVisionRequestDetails): number;
30
+ export declare function resolveStructuredOutputTarget(options: {
31
+ outputPath?: string;
32
+ requestedFormat?: string;
33
+ defaultBaseName: string;
34
+ }): {
35
+ outputPath: string;
36
+ kind: StructuredOutputKind;
37
+ warning?: string;
38
+ };
39
+ export declare function formatByteSize(bytes: number): string;
40
+ //# sourceMappingURL=vision-output.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"vision-output.d.ts","sourceRoot":"","sources":["../../src/util/vision-output.ts"],"names":[],"mappings":"AAIA,eAAO,MAAM,+BAA+B,QAAkB,CAAC;AAE/D,eAAO,MAAM,8BAA8B,QACyB,CAAC;AAWrE,MAAM,MAAM,cAAc,GAAG,OAAO,GAAG,KAAK,GAAG,SAAS,CAAC;AACzD,MAAM,MAAM,oBAAoB,GAAG,MAAM,GAAG,KAAK,GAAG,MAAM,CAAC;AAE3D,MAAM,WAAW,WAAW;IAC1B,MAAM,EAAE,MAAM,CAAC;IACf,QAAQ,EAAE,MAAM,CAAC;IACjB,SAAS,EAAE,MAAM,CAAC;IAClB,QAAQ,EAAE,MAAM,CAAC;IACjB,GAAG,EAAE,MAAM,CAAC;IACZ,IAAI,EAAE,cAAc,CAAC;CACtB;AAED,MAAM,WAAW,kBAAmB,SAAQ,WAAW;IACrD,UAAU,EAAE,MAAM,CAAC;IACnB,UAAU,EAAE,MAAM,CAAC;CACpB;AAED,MAAM,WAAW,8BAA8B;IAC7C,MAAM,EAAE,MAAM,CAAC;IACf,YAAY,EAAE,MAAM,CAAC;IACrB,WAAW,EAAE,MAAM,CAAC;IACpB,QAAQ,EAAE,MAAM,CAAC;IACjB,KAAK,EAAE,MAAM,CAAC;IACd,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,QAAQ,CAAC,EAAE,OAAO,CAAC;CACpB;AAED,wBAAgB,eAAe,CAAC,QAAQ,EAAE,MAAM,GAAG,WAAW,CAa7D;AAED,wBAAsB,uBAAuB,CAAC,QAAQ,EAAE,MAAM,GAAG,OAAO,CAAC,kBAAkB,EAAE,CAAC,CA0B7F;AAED,wBAAgB,iCAAiC,CAAC,OAAO,EAAE,8BAA8B,GAAG,MAAM,CA8BjG;AAaD,wBAAgB,6BAA6B,CAAC,OAAO,EAAE;IACrD,UAAU,CAAC,EAAE,MAAM,CAAC;IACpB,eAAe,CAAC,EAAE,MAAM,CAAC;IACzB,eAAe,EAAE,MAAM,CAAC;CACzB,GAAG;IACF,UAAU,EAAE,MAAM,CAAC;IACnB,IAAI,EAAE,oBAAoB,CAAC;IAC3B,OAAO,CAAC,EAAE,MAAM,CAAC;CAClB,CAqDA;AAED,wBAAgB,cAAc,CAAC,KAAK,EAAE,MAAM,GAAG,MAAM,CAEpD"}
@@ -0,0 +1,139 @@
1
+ import { readFileSync } from 'node:fs';
2
+ import { extname } from 'node:path';
3
+ import { PDFDocument } from 'pdf-lib';
4
+ export const HOSTED_BETA_REQUEST_LIMIT_BYTES = 8 * 1024 * 1024;
5
+ const HOSTED_BETA_REQUEST_MARGIN_BYTES = 32 * 1024;
6
+ export const HOSTED_BETA_REQUEST_SAFE_BYTES = HOSTED_BETA_REQUEST_LIMIT_BYTES - HOSTED_BETA_REQUEST_MARGIN_BYTES;
7
+ const MIME_TYPES = {
8
+ jpg: 'image/jpeg',
9
+ jpeg: 'image/jpeg',
10
+ png: 'image/png',
11
+ gif: 'image/gif',
12
+ webp: 'image/webp',
13
+ pdf: 'application/pdf',
14
+ };
15
+ export function readVisionInput(filePath) {
16
+ const buffer = readFileSync(filePath);
17
+ const ext = extname(filePath).slice(1).toLowerCase();
18
+ const kind = ext === 'pdf' ? 'pdf' : MIME_TYPES[ext] ? 'image' : 'unknown';
19
+ return {
20
+ base64: buffer.toString('base64'),
21
+ mimeType: MIME_TYPES[ext] ?? 'image/png',
22
+ fileBytes: buffer.length,
23
+ filePath,
24
+ ext,
25
+ kind,
26
+ };
27
+ }
28
+ export async function readVisionPdfPageInputs(filePath) {
29
+ const buffer = readFileSync(filePath);
30
+ const source = await PDFDocument.load(buffer, { ignoreEncryption: true });
31
+ const totalPages = source.getPageCount();
32
+ const pageInputs = [];
33
+ for (let index = 0; index < totalPages; index++) {
34
+ const pageDoc = await PDFDocument.create();
35
+ const [copiedPage] = await pageDoc.copyPages(source, [index]);
36
+ pageDoc.addPage(copiedPage);
37
+ const pageBytes = await pageDoc.save();
38
+ const pageBuffer = Buffer.from(pageBytes);
39
+ pageInputs.push({
40
+ base64: pageBuffer.toString('base64'),
41
+ mimeType: 'application/pdf',
42
+ fileBytes: pageBuffer.length,
43
+ filePath,
44
+ ext: 'pdf',
45
+ kind: 'pdf',
46
+ pageNumber: index + 1,
47
+ totalPages,
48
+ });
49
+ }
50
+ return pageInputs;
51
+ }
52
+ export function estimateHostedBetaVisionBodyBytes(details) {
53
+ const body = {
54
+ messages: [
55
+ {
56
+ role: 'system',
57
+ content: details.systemPrompt,
58
+ },
59
+ {
60
+ role: 'user',
61
+ content: [
62
+ {
63
+ type: 'image_url',
64
+ image_url: {
65
+ url: `data:${details.mimeType};base64,${details.imageBase64}`,
66
+ },
67
+ },
68
+ {
69
+ type: 'text',
70
+ text: details.prompt,
71
+ },
72
+ ],
73
+ },
74
+ ],
75
+ model: details.model,
76
+ temperature: details.temperature,
77
+ maxTokens: details.maxTokens,
78
+ jsonMode: details.jsonMode ?? false,
79
+ };
80
+ return Buffer.byteLength(JSON.stringify(body), 'utf8');
81
+ }
82
+ function normalizeStructuredOutputKind(value) {
83
+ switch ((value ?? '').toLowerCase()) {
84
+ case 'pdf':
85
+ return 'pdf';
86
+ case 'docx':
87
+ return 'docx';
88
+ default:
89
+ return 'text';
90
+ }
91
+ }
92
+ export function resolveStructuredOutputTarget(options) {
93
+ const requestedKind = normalizeStructuredOutputKind(options.requestedFormat);
94
+ const requestedFormat = options.requestedFormat?.toLowerCase();
95
+ if (!options.outputPath) {
96
+ const outputPath = requestedKind === 'text'
97
+ ? `${options.defaultBaseName}.md`
98
+ : `${options.defaultBaseName}.${requestedKind}`;
99
+ return {
100
+ outputPath,
101
+ kind: requestedKind,
102
+ };
103
+ }
104
+ const ext = extname(options.outputPath).toLowerCase();
105
+ const extKind = ext === '.pdf'
106
+ ? 'pdf'
107
+ : ext === '.docx'
108
+ ? 'docx'
109
+ : ext === '.md' || ext === '.markdown' || ext === '.txt'
110
+ ? 'text'
111
+ : null;
112
+ if (extKind) {
113
+ const warning = requestedFormat && requestedKind !== extKind
114
+ ? `Output path extension ${ext} overrides requested format ${requestedFormat}.`
115
+ : undefined;
116
+ return {
117
+ outputPath: options.outputPath,
118
+ kind: extKind,
119
+ warning,
120
+ };
121
+ }
122
+ if (requestedKind === 'text') {
123
+ return {
124
+ outputPath: options.outputPath,
125
+ kind: 'text',
126
+ };
127
+ }
128
+ return {
129
+ outputPath: options.outputPath.endsWith(`.${requestedKind}`)
130
+ ? options.outputPath
131
+ : `${options.outputPath}.${requestedKind}`,
132
+ kind: requestedKind,
133
+ warning: `Output path extension is not recognized. Using .${requestedKind} for the requested format.`,
134
+ };
135
+ }
136
+ export function formatByteSize(bytes) {
137
+ return `${(bytes / (1024 * 1024)).toFixed(2)} MB`;
138
+ }
139
+ //# sourceMappingURL=vision-output.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"vision-output.js","sourceRoot":"","sources":["../../src/util/vision-output.ts"],"names":[],"mappings":"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"}