@google/gemini-cli 0.1.9-nightly.250707.d1c0a211 → 0.1.9-nightly.250708.a4097ae6

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 (80) hide show
  1. package/README.md +14 -0
  2. package/dist/google-gemini-cli-0.1.9.tgz +0 -0
  3. package/dist/package.json +2 -2
  4. package/dist/src/config/auth.js +3 -2
  5. package/dist/src/config/auth.js.map +1 -1
  6. package/dist/src/config/config.d.ts +0 -1
  7. package/dist/src/config/config.js +15 -41
  8. package/dist/src/config/config.js.map +1 -1
  9. package/dist/src/config/settings.d.ts +2 -0
  10. package/dist/src/config/settings.js +63 -1
  11. package/dist/src/config/settings.js.map +1 -1
  12. package/dist/src/gemini.js +16 -17
  13. package/dist/src/gemini.js.map +1 -1
  14. package/dist/src/generated/git-commit.d.ts +1 -1
  15. package/dist/src/generated/git-commit.js +1 -1
  16. package/dist/src/services/CommandService.d.ts +13 -0
  17. package/dist/src/services/CommandService.js +30 -0
  18. package/dist/src/services/CommandService.js.map +1 -0
  19. package/dist/src/test-utils/mockCommandContext.d.ts +18 -0
  20. package/dist/src/test-utils/mockCommandContext.js +75 -0
  21. package/dist/src/test-utils/mockCommandContext.js.map +1 -0
  22. package/dist/src/ui/App.js +8 -5
  23. package/dist/src/ui/App.js.map +1 -1
  24. package/dist/src/ui/App.test.js +1 -0
  25. package/dist/src/ui/App.test.js.map +1 -1
  26. package/dist/src/ui/commands/clearCommand.d.ts +7 -0
  27. package/dist/src/ui/commands/clearCommand.js +15 -0
  28. package/dist/src/ui/commands/clearCommand.js.map +1 -0
  29. package/dist/src/ui/commands/helpCommand.d.ts +7 -0
  30. package/dist/src/ui/commands/helpCommand.js +18 -0
  31. package/dist/src/ui/commands/helpCommand.js.map +1 -0
  32. package/dist/src/ui/commands/memoryCommand.d.ts +7 -0
  33. package/dist/src/ui/commands/memoryCommand.js +81 -0
  34. package/dist/src/ui/commands/memoryCommand.js.map +1 -0
  35. package/dist/src/ui/commands/types.d.ts +63 -0
  36. package/dist/src/ui/commands/types.js +7 -0
  37. package/dist/src/ui/commands/types.js.map +1 -0
  38. package/dist/src/ui/components/AuthDialog.js +21 -2
  39. package/dist/src/ui/components/AuthDialog.js.map +1 -1
  40. package/dist/src/ui/components/AuthDialog.test.js +20 -3
  41. package/dist/src/ui/components/AuthDialog.test.js.map +1 -1
  42. package/dist/src/ui/components/Help.d.ts +1 -1
  43. package/dist/src/ui/components/Help.js +3 -2
  44. package/dist/src/ui/components/Help.js.map +1 -1
  45. package/dist/src/ui/components/InputPrompt.d.ts +2 -1
  46. package/dist/src/ui/components/InputPrompt.js +106 -157
  47. package/dist/src/ui/components/InputPrompt.js.map +1 -1
  48. package/dist/src/ui/components/InputPrompt.test.js +180 -0
  49. package/dist/src/ui/components/InputPrompt.test.js.map +1 -1
  50. package/dist/src/ui/contexts/SessionContext.d.ts +1 -1
  51. package/dist/src/ui/hooks/atCommandProcessor.js +5 -7
  52. package/dist/src/ui/hooks/atCommandProcessor.js.map +1 -1
  53. package/dist/src/ui/hooks/slashCommandProcessor.d.ts +6 -10
  54. package/dist/src/ui/hooks/slashCommandProcessor.js +193 -124
  55. package/dist/src/ui/hooks/slashCommandProcessor.js.map +1 -1
  56. package/dist/src/ui/hooks/useCompletion.d.ts +2 -2
  57. package/dist/src/ui/hooks/useCompletion.js +106 -56
  58. package/dist/src/ui/hooks/useCompletion.js.map +1 -1
  59. package/dist/src/ui/hooks/useGeminiStream.d.ts +2 -2
  60. package/dist/src/ui/hooks/useGeminiStream.js +4 -10
  61. package/dist/src/ui/hooks/useGeminiStream.js.map +1 -1
  62. package/dist/src/ui/hooks/useGeminiStream.test.js +26 -44
  63. package/dist/src/ui/hooks/useGeminiStream.test.js.map +1 -1
  64. package/dist/src/ui/types.d.ts +10 -0
  65. package/dist/src/ui/utils/InlineMarkdownRenderer.d.ts +16 -0
  66. package/dist/src/ui/utils/InlineMarkdownRenderer.js +104 -0
  67. package/dist/src/ui/utils/InlineMarkdownRenderer.js.map +1 -0
  68. package/dist/src/ui/utils/MarkdownDisplay.js +1 -80
  69. package/dist/src/ui/utils/MarkdownDisplay.js.map +1 -1
  70. package/dist/src/ui/utils/MarkdownDisplay.test.js +35 -0
  71. package/dist/src/ui/utils/MarkdownDisplay.test.js.map +1 -1
  72. package/dist/src/ui/utils/TableRenderer.js +50 -32
  73. package/dist/src/ui/utils/TableRenderer.js.map +1 -1
  74. package/dist/src/utils/sandbox-macos-permissive-proxied.sb +1 -1
  75. package/dist/src/utils/sandbox-macos-restrictive-proxied.sb +1 -1
  76. package/dist/src/utils/userStartupWarnings.d.ts +6 -0
  77. package/dist/src/utils/userStartupWarnings.js +33 -0
  78. package/dist/src/utils/userStartupWarnings.js.map +1 -0
  79. package/dist/tsconfig.tsbuildinfo +1 -1
  80. package/package.json +3 -3
@@ -7,60 +7,78 @@ import { jsx as _jsx, jsxs as _jsxs } from "react/jsx-runtime";
7
7
  import React from 'react';
8
8
  import { Text, Box } from 'ink';
9
9
  import { Colors } from '../colors.js';
10
+ import { RenderInline, getPlainTextLength } from './InlineMarkdownRenderer.js';
10
11
  /**
11
12
  * Custom table renderer for markdown tables
12
13
  * We implement our own instead of using ink-table due to module compatibility issues
13
14
  */
14
15
  export const TableRenderer = ({ headers, rows, terminalWidth, }) => {
15
- // Calculate column widths
16
+ // Calculate column widths using actual display width after markdown processing
16
17
  const columnWidths = headers.map((header, index) => {
17
- const headerWidth = header.length;
18
- const maxRowWidth = Math.max(...rows.map((row) => (row[index] || '').length));
18
+ const headerWidth = getPlainTextLength(header);
19
+ const maxRowWidth = Math.max(...rows.map((row) => getPlainTextLength(row[index] || '')));
19
20
  return Math.max(headerWidth, maxRowWidth) + 2; // Add padding
20
21
  });
21
22
  // Ensure table fits within terminal width
22
23
  const totalWidth = columnWidths.reduce((sum, width) => sum + width + 1, 1);
23
24
  const scaleFactor = totalWidth > terminalWidth ? terminalWidth / totalWidth : 1;
24
25
  const adjustedWidths = columnWidths.map((width) => Math.floor(width * scaleFactor));
26
+ // Helper function to render a cell with proper width
25
27
  const renderCell = (content, width, isHeader = false) => {
26
- // The actual space for content inside the padding
27
28
  const contentWidth = Math.max(0, width - 2);
29
+ const displayWidth = getPlainTextLength(content);
28
30
  let cellContent = content;
29
- if (content.length > contentWidth) {
31
+ if (displayWidth > contentWidth) {
30
32
  if (contentWidth <= 3) {
31
- // Not enough space for '...'
32
- cellContent = content.substring(0, contentWidth);
33
+ // Just truncate by character count
34
+ cellContent = content.substring(0, Math.min(content.length, contentWidth));
33
35
  }
34
36
  else {
35
- cellContent = content.substring(0, contentWidth - 3) + '...';
37
+ // Truncate preserving markdown formatting using binary search
38
+ let left = 0;
39
+ let right = content.length;
40
+ let bestTruncated = content;
41
+ // Binary search to find the optimal truncation point
42
+ while (left <= right) {
43
+ const mid = Math.floor((left + right) / 2);
44
+ const candidate = content.substring(0, mid);
45
+ const candidateWidth = getPlainTextLength(candidate);
46
+ if (candidateWidth <= contentWidth - 3) {
47
+ bestTruncated = candidate;
48
+ left = mid + 1;
49
+ }
50
+ else {
51
+ right = mid - 1;
52
+ }
53
+ }
54
+ cellContent = bestTruncated + '...';
36
55
  }
37
56
  }
38
- // Pad the content to fill the cell
39
- const padded = cellContent.padEnd(contentWidth, ' ');
40
- if (isHeader) {
41
- return (_jsx(Text, { bold: true, color: Colors.AccentCyan, children: padded }));
42
- }
43
- return _jsx(Text, { children: padded });
44
- };
45
- const renderRow = (cells, isHeader = false) => (_jsxs(Box, { flexDirection: "row", children: [_jsx(Text, { children: "\u2502 " }), cells.map((cell, index) => (_jsxs(React.Fragment, { children: [renderCell(cell, adjustedWidths[index] || 0, isHeader), _jsx(Text, { children: " \u2502 " })] }, index)))] }));
46
- const renderSeparator = () => {
47
- const separator = adjustedWidths
48
- .map((width) => '─'.repeat(Math.max(0, (width || 0) - 2)))
49
- .join('─┼─');
50
- return _jsxs(Text, { children: ["\u251C\u2500", separator, "\u2500\u2524"] });
57
+ // Calculate exact padding needed
58
+ const actualDisplayWidth = getPlainTextLength(cellContent);
59
+ const paddingNeeded = Math.max(0, contentWidth - actualDisplayWidth);
60
+ return (_jsxs(Text, { children: [isHeader ? (_jsx(Text, { bold: true, color: Colors.AccentCyan, children: _jsx(RenderInline, { text: cellContent }) })) : (_jsx(RenderInline, { text: cellContent })), ' '.repeat(paddingNeeded)] }));
51
61
  };
52
- const renderTopBorder = () => {
53
- const border = adjustedWidths
54
- .map((width) => '─'.repeat(Math.max(0, (width || 0) - 2)))
55
- .join('─┬─');
56
- return _jsxs(Text, { children: ["\u250C\u2500", border, "\u2500\u2510"] });
62
+ // Helper function to render border
63
+ const renderBorder = (type) => {
64
+ const chars = {
65
+ top: { left: '', middle: '┬', right: '┐', horizontal: '─' },
66
+ middle: { left: '├', middle: '┼', right: '┤', horizontal: '─' },
67
+ bottom: { left: '└', middle: '┴', right: '┘', horizontal: '─' },
68
+ };
69
+ const char = chars[type];
70
+ const borderParts = adjustedWidths.map((w) => char.horizontal.repeat(w));
71
+ const border = char.left + borderParts.join(char.middle) + char.right;
72
+ return _jsx(Text, { children: border });
57
73
  };
58
- const renderBottomBorder = () => {
59
- const border = adjustedWidths
60
- .map((width) => '─'.repeat(Math.max(0, (width || 0) - 2)))
61
- .join('─┴─');
62
- return _jsxs(Text, { children: ["\u2514\u2500", border, "\u2500\u2518"] });
74
+ // Helper function to render a table row
75
+ const renderRow = (cells, isHeader = false) => {
76
+ const renderedCells = cells.map((cell, index) => {
77
+ const width = adjustedWidths[index] || 0;
78
+ return renderCell(cell || '', width, isHeader);
79
+ });
80
+ return (_jsxs(Text, { children: ["\u2502", ' ', renderedCells.map((cell, index) => (_jsxs(React.Fragment, { children: [cell, index < renderedCells.length - 1 ? ' │ ' : ''] }, index))), ' ', "\u2502"] }));
63
81
  };
64
- return (_jsxs(Box, { flexDirection: "column", marginY: 1, children: [renderTopBorder(), renderRow(headers, true), renderSeparator(), rows.map((row, index) => (_jsx(React.Fragment, { children: renderRow(row) }, index))), renderBottomBorder()] }));
82
+ return (_jsxs(Box, { flexDirection: "column", marginY: 1, children: [renderBorder('top'), renderRow(headers, true), renderBorder('middle'), rows.map((row, index) => (_jsx(React.Fragment, { children: renderRow(row) }, index))), renderBorder('bottom')] }));
65
83
  };
66
84
  //# sourceMappingURL=TableRenderer.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"TableRenderer.js","sourceRoot":"","sources":["../../../../src/ui/utils/TableRenderer.tsx"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"TableRenderer.js","sourceRoot":"","sources":["../../../../src/ui/utils/TableRenderer.tsx"],"names":[],"mappings":"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"}
@@ -24,7 +24,7 @@
24
24
 
25
25
  ;; deny all outbound network traffic EXCEPT through proxy on localhost:8877
26
26
  ;; set `GEMINI_SANDBOX_PROXY_COMMAND=<command>` to run proxy alongside sandbox
27
- ;; proxy must listen on :::8877 (see scripts/example-proxy.js)
27
+ ;; proxy must listen on :::8877 (see docs/examples/proxy-script.md)
28
28
  (deny network-outbound)
29
29
  (allow network-outbound (remote tcp "localhost:8877"))
30
30
 
@@ -88,5 +88,5 @@
88
88
 
89
89
  ;; allow outbound network traffic through proxy on localhost:8877
90
90
  ;; set `GEMINI_SANDBOX_PROXY_COMMAND=<command>` to run proxy alongside sandbox
91
- ;; proxy must listen on :::8877 (see scripts/example-proxy.js)
91
+ ;; proxy must listen on :::8877 (see docs/examples/proxy-script.md)
92
92
  (allow network-outbound (remote tcp "localhost:8877"))
@@ -0,0 +1,6 @@
1
+ /**
2
+ * @license
3
+ * Copyright 2025 Google LLC
4
+ * SPDX-License-Identifier: Apache-2.0
5
+ */
6
+ export declare function getUserStartupWarnings(workspaceRoot: string): Promise<string[]>;
@@ -0,0 +1,33 @@
1
+ /**
2
+ * @license
3
+ * Copyright 2025 Google LLC
4
+ * SPDX-License-Identifier: Apache-2.0
5
+ */
6
+ import fs from 'fs/promises';
7
+ import * as os from 'os';
8
+ // Individual warning checks
9
+ const homeDirectoryCheck = {
10
+ id: 'home-directory',
11
+ check: async (workspaceRoot) => {
12
+ try {
13
+ const [workspaceRealPath, homeRealPath] = await Promise.all([
14
+ fs.realpath(workspaceRoot),
15
+ fs.realpath(os.homedir()),
16
+ ]);
17
+ if (workspaceRealPath === homeRealPath) {
18
+ return 'You are running Gemini CLI in your home directory. It is recommended to run in a project-specific directory.';
19
+ }
20
+ return null;
21
+ }
22
+ catch (_err) {
23
+ return 'Could not verify the current directory due to a file system error.';
24
+ }
25
+ },
26
+ };
27
+ // All warning checks
28
+ const WARNING_CHECKS = [homeDirectoryCheck];
29
+ export async function getUserStartupWarnings(workspaceRoot) {
30
+ const results = await Promise.all(WARNING_CHECKS.map((check) => check.check(workspaceRoot)));
31
+ return results.filter((msg) => msg !== null);
32
+ }
33
+ //# sourceMappingURL=userStartupWarnings.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"userStartupWarnings.js","sourceRoot":"","sources":["../../../src/utils/userStartupWarnings.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAEH,OAAO,EAAE,MAAM,aAAa,CAAC;AAC7B,OAAO,KAAK,EAAE,MAAM,IAAI,CAAC;AAOzB,4BAA4B;AAC5B,MAAM,kBAAkB,GAAiB;IACvC,EAAE,EAAE,gBAAgB;IACpB,KAAK,EAAE,KAAK,EAAE,aAAqB,EAAE,EAAE;QACrC,IAAI,CAAC;YACH,MAAM,CAAC,iBAAiB,EAAE,YAAY,CAAC,GAAG,MAAM,OAAO,CAAC,GAAG,CAAC;gBAC1D,EAAE,CAAC,QAAQ,CAAC,aAAa,CAAC;gBAC1B,EAAE,CAAC,QAAQ,CAAC,EAAE,CAAC,OAAO,EAAE,CAAC;aAC1B,CAAC,CAAC;YAEH,IAAI,iBAAiB,KAAK,YAAY,EAAE,CAAC;gBACvC,OAAO,8GAA8G,CAAC;YACxH,CAAC;YACD,OAAO,IAAI,CAAC;QACd,CAAC;QAAC,OAAO,IAAa,EAAE,CAAC;YACvB,OAAO,oEAAoE,CAAC;QAC9E,CAAC;IACH,CAAC;CACF,CAAC;AAEF,qBAAqB;AACrB,MAAM,cAAc,GAA4B,CAAC,kBAAkB,CAAC,CAAC;AAErE,MAAM,CAAC,KAAK,UAAU,sBAAsB,CAC1C,aAAqB;IAErB,MAAM,OAAO,GAAG,MAAM,OAAO,CAAC,GAAG,CAC/B,cAAc,CAAC,GAAG,CAAC,CAAC,KAAK,EAAE,EAAE,CAAC,KAAK,CAAC,KAAK,CAAC,aAAa,CAAC,CAAC,CAC1D,CAAC;IACF,OAAO,OAAO,CAAC,MAAM,CAAC,CAAC,GAAG,EAAE,EAAE,CAAC,GAAG,KAAK,IAAI,CAAC,CAAC;AAC/C,CAAC"}