@google/gemini-cli 0.1.10-dev.15 → 0.1.10

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 (141) hide show
  1. package/README.md +16 -2
  2. package/dist/google-gemini-cli-0.1.9.tgz +0 -0
  3. package/dist/package.json +7 -7
  4. package/dist/src/config/auth.js +6 -5
  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 +62 -50
  8. package/dist/src/config/config.js.map +1 -1
  9. package/dist/src/config/extension.d.ts +1 -0
  10. package/dist/src/config/extension.js +34 -6
  11. package/dist/src/config/extension.js.map +1 -1
  12. package/dist/src/config/sandboxConfig.d.ts +1 -1
  13. package/dist/src/config/sandboxConfig.js +1 -1
  14. package/dist/src/config/sandboxConfig.js.map +1 -1
  15. package/dist/src/config/settings.d.ts +7 -2
  16. package/dist/src/config/settings.js +101 -3
  17. package/dist/src/config/settings.js.map +1 -1
  18. package/dist/src/gemini.js +30 -21
  19. package/dist/src/gemini.js.map +1 -1
  20. package/dist/src/generated/git-commit.d.ts +1 -1
  21. package/dist/src/generated/git-commit.js +1 -1
  22. package/dist/src/nonInteractiveCli.d.ts +1 -1
  23. package/dist/src/nonInteractiveCli.js +4 -2
  24. package/dist/src/nonInteractiveCli.js.map +1 -1
  25. package/dist/src/services/CommandService.d.ts +13 -0
  26. package/dist/src/services/CommandService.js +30 -0
  27. package/dist/src/services/CommandService.js.map +1 -0
  28. package/dist/src/ui/App.js +71 -12
  29. package/dist/src/ui/App.js.map +1 -1
  30. package/dist/src/ui/commands/clearCommand.d.ts +7 -0
  31. package/dist/src/ui/commands/clearCommand.js +15 -0
  32. package/dist/src/ui/commands/clearCommand.js.map +1 -0
  33. package/dist/src/ui/commands/helpCommand.d.ts +7 -0
  34. package/dist/src/ui/commands/helpCommand.js +18 -0
  35. package/dist/src/ui/commands/helpCommand.js.map +1 -0
  36. package/dist/src/ui/commands/memoryCommand.d.ts +7 -0
  37. package/dist/src/ui/commands/memoryCommand.js +81 -0
  38. package/dist/src/ui/commands/memoryCommand.js.map +1 -0
  39. package/dist/src/ui/commands/types.d.ts +63 -0
  40. package/dist/src/{gemini.test.d.ts → ui/commands/types.js} +1 -0
  41. package/dist/src/ui/commands/types.js.map +1 -0
  42. package/dist/src/ui/components/AuthDialog.js +36 -8
  43. package/dist/src/ui/components/AuthDialog.js.map +1 -1
  44. package/dist/src/ui/components/Help.d.ts +1 -1
  45. package/dist/src/ui/components/Help.js +3 -2
  46. package/dist/src/ui/components/Help.js.map +1 -1
  47. package/dist/src/ui/components/InputPrompt.d.ts +2 -1
  48. package/dist/src/ui/components/InputPrompt.js +106 -157
  49. package/dist/src/ui/components/InputPrompt.js.map +1 -1
  50. package/dist/src/ui/components/LoadingIndicator.js +2 -1
  51. package/dist/src/ui/components/LoadingIndicator.js.map +1 -1
  52. package/dist/src/ui/components/ThemeDialog.js +10 -9
  53. package/dist/src/ui/components/ThemeDialog.js.map +1 -1
  54. package/dist/src/ui/components/messages/CompressionMessage.js +1 -1
  55. package/dist/src/ui/components/shared/MaxSizedBox.js +1 -1
  56. package/dist/src/ui/components/shared/MaxSizedBox.js.map +1 -1
  57. package/dist/src/ui/components/shared/text-buffer.d.ts +2 -1
  58. package/dist/src/ui/components/shared/text-buffer.js +3 -3
  59. package/dist/src/ui/components/shared/text-buffer.js.map +1 -1
  60. package/dist/src/ui/contexts/SessionContext.d.ts +4 -1
  61. package/dist/src/ui/contexts/SessionContext.js +12 -2
  62. package/dist/src/ui/contexts/SessionContext.js.map +1 -1
  63. package/dist/src/ui/hooks/atCommandProcessor.js +5 -7
  64. package/dist/src/ui/hooks/atCommandProcessor.js.map +1 -1
  65. package/dist/src/ui/hooks/slashCommandProcessor.d.ts +6 -10
  66. package/dist/src/ui/hooks/slashCommandProcessor.js +217 -121
  67. package/dist/src/ui/hooks/slashCommandProcessor.js.map +1 -1
  68. package/dist/src/ui/hooks/useCompletion.d.ts +2 -2
  69. package/dist/src/ui/hooks/useCompletion.js +106 -56
  70. package/dist/src/ui/hooks/useCompletion.js.map +1 -1
  71. package/dist/src/ui/hooks/useGeminiStream.d.ts +3 -3
  72. package/dist/src/ui/hooks/useGeminiStream.js +45 -28
  73. package/dist/src/ui/hooks/useGeminiStream.js.map +1 -1
  74. package/dist/src/ui/types.d.ts +10 -0
  75. package/dist/src/ui/utils/InlineMarkdownRenderer.d.ts +16 -0
  76. package/dist/src/ui/utils/InlineMarkdownRenderer.js +104 -0
  77. package/dist/src/ui/utils/InlineMarkdownRenderer.js.map +1 -0
  78. package/dist/src/ui/utils/MarkdownDisplay.js +1 -80
  79. package/dist/src/ui/utils/MarkdownDisplay.js.map +1 -1
  80. package/dist/src/ui/utils/TableRenderer.js +50 -32
  81. package/dist/src/ui/utils/TableRenderer.js.map +1 -1
  82. package/dist/src/ui/utils/errorParsing.d.ts +2 -10
  83. package/dist/src/ui/utils/errorParsing.js +34 -23
  84. package/dist/src/ui/utils/errorParsing.js.map +1 -1
  85. package/dist/src/utils/sandbox-macos-permissive-proxied.sb +1 -1
  86. package/dist/src/utils/sandbox-macos-restrictive-proxied.sb +1 -1
  87. package/dist/src/utils/userStartupWarnings.d.ts +6 -0
  88. package/dist/src/utils/userStartupWarnings.js +33 -0
  89. package/dist/src/utils/userStartupWarnings.js.map +1 -0
  90. package/dist/tsconfig.tsbuildinfo +1 -1
  91. package/package.json +8 -8
  92. package/dist/src/gemini.test.js +0 -122
  93. package/dist/src/gemini.test.js.map +0 -1
  94. package/dist/src/ui/App.test.d.ts +0 -6
  95. package/dist/src/ui/App.test.js +0 -299
  96. package/dist/src/ui/App.test.js.map +0 -1
  97. package/dist/src/ui/components/AuthDialog.test.d.ts +0 -6
  98. package/dist/src/ui/components/AuthDialog.test.js +0 -69
  99. package/dist/src/ui/components/AuthDialog.test.js.map +0 -1
  100. package/dist/src/ui/components/HistoryItemDisplay.test.d.ts +0 -6
  101. package/dist/src/ui/components/HistoryItemDisplay.test.js +0 -81
  102. package/dist/src/ui/components/HistoryItemDisplay.test.js.map +0 -1
  103. package/dist/src/ui/components/InputPrompt.test.d.ts +0 -6
  104. package/dist/src/ui/components/InputPrompt.test.js +0 -154
  105. package/dist/src/ui/components/InputPrompt.test.js.map +0 -1
  106. package/dist/src/ui/components/LoadingIndicator.test.d.ts +0 -6
  107. package/dist/src/ui/components/LoadingIndicator.test.js +0 -141
  108. package/dist/src/ui/components/LoadingIndicator.test.js.map +0 -1
  109. package/dist/src/ui/components/ModelStatsDisplay.test.d.ts +0 -6
  110. package/dist/src/ui/components/ModelStatsDisplay.test.js +0 -217
  111. package/dist/src/ui/components/ModelStatsDisplay.test.js.map +0 -1
  112. package/dist/src/ui/components/SessionSummaryDisplay.test.d.ts +0 -6
  113. package/dist/src/ui/components/SessionSummaryDisplay.test.js +0 -60
  114. package/dist/src/ui/components/SessionSummaryDisplay.test.js.map +0 -1
  115. package/dist/src/ui/components/StatsDisplay.test.d.ts +0 -6
  116. package/dist/src/ui/components/StatsDisplay.test.js +0 -275
  117. package/dist/src/ui/components/StatsDisplay.test.js.map +0 -1
  118. package/dist/src/ui/components/ToolStatsDisplay.test.d.ts +0 -6
  119. package/dist/src/ui/components/ToolStatsDisplay.test.js +0 -160
  120. package/dist/src/ui/components/ToolStatsDisplay.test.js.map +0 -1
  121. package/dist/src/ui/components/messages/DiffRenderer.test.d.ts +0 -6
  122. package/dist/src/ui/components/messages/DiffRenderer.test.js +0 -239
  123. package/dist/src/ui/components/messages/DiffRenderer.test.js.map +0 -1
  124. package/dist/src/ui/components/messages/ToolConfirmationMessage.test.d.ts +0 -6
  125. package/dist/src/ui/components/messages/ToolConfirmationMessage.test.js +0 -37
  126. package/dist/src/ui/components/messages/ToolConfirmationMessage.test.js.map +0 -1
  127. package/dist/src/ui/components/messages/ToolMessage.test.d.ts +0 -6
  128. package/dist/src/ui/components/messages/ToolMessage.test.js +0 -116
  129. package/dist/src/ui/components/messages/ToolMessage.test.js.map +0 -1
  130. package/dist/src/ui/components/shared/MaxSizedBox.test.d.ts +0 -6
  131. package/dist/src/ui/components/shared/MaxSizedBox.test.js +0 -134
  132. package/dist/src/ui/components/shared/MaxSizedBox.test.js.map +0 -1
  133. package/dist/src/ui/contexts/SessionContext.test.d.ts +0 -6
  134. package/dist/src/ui/contexts/SessionContext.test.js +0 -96
  135. package/dist/src/ui/contexts/SessionContext.test.js.map +0 -1
  136. package/dist/src/ui/hooks/useGeminiStream.test.d.ts +0 -6
  137. package/dist/src/ui/hooks/useGeminiStream.test.js +0 -775
  138. package/dist/src/ui/hooks/useGeminiStream.test.js.map +0 -1
  139. package/dist/src/ui/utils/MarkdownDisplay.test.d.ts +0 -6
  140. package/dist/src/ui/utils/MarkdownDisplay.test.js +0 -176
  141. package/dist/src/ui/utils/MarkdownDisplay.test.js.map +0 -1
@@ -1,6 +0,0 @@
1
- /**
2
- * @license
3
- * Copyright 2025 Google LLC
4
- * SPDX-License-Identifier: Apache-2.0
5
- */
6
- export {};
@@ -1,60 +0,0 @@
1
- import { jsx as _jsx } from "react/jsx-runtime";
2
- /**
3
- * @license
4
- * Copyright 2025 Google LLC
5
- * SPDX-License-Identifier: Apache-2.0
6
- */
7
- import { render } from 'ink-testing-library';
8
- import { describe, it, expect, vi } from 'vitest';
9
- import { SessionSummaryDisplay } from './SessionSummaryDisplay.js';
10
- import * as SessionContext from '../contexts/SessionContext.js';
11
- vi.mock('../contexts/SessionContext.js', async (importOriginal) => {
12
- const actual = await importOriginal();
13
- return {
14
- ...actual,
15
- useSessionStats: vi.fn(),
16
- };
17
- });
18
- const useSessionStatsMock = vi.mocked(SessionContext.useSessionStats);
19
- const renderWithMockedStats = (metrics) => {
20
- useSessionStatsMock.mockReturnValue({
21
- stats: {
22
- sessionStartTime: new Date(),
23
- metrics,
24
- lastPromptTokenCount: 0,
25
- },
26
- });
27
- return render(_jsx(SessionSummaryDisplay, { duration: "1h 23m 45s" }));
28
- };
29
- describe('<SessionSummaryDisplay />', () => {
30
- it('renders the summary display with a title', () => {
31
- const metrics = {
32
- models: {
33
- 'gemini-2.5-pro': {
34
- api: { totalRequests: 10, totalErrors: 1, totalLatencyMs: 50234 },
35
- tokens: {
36
- prompt: 1000,
37
- candidates: 2000,
38
- total: 3500,
39
- cached: 500,
40
- thoughts: 300,
41
- tool: 200,
42
- },
43
- },
44
- },
45
- tools: {
46
- totalCalls: 0,
47
- totalSuccess: 0,
48
- totalFail: 0,
49
- totalDurationMs: 0,
50
- totalDecisions: { accept: 0, reject: 0, modify: 0 },
51
- byName: {},
52
- },
53
- };
54
- const { lastFrame } = renderWithMockedStats(metrics);
55
- const output = lastFrame();
56
- expect(output).toContain('Agent powering down. Goodbye!');
57
- expect(output).toMatchSnapshot();
58
- });
59
- });
60
- //# sourceMappingURL=SessionSummaryDisplay.test.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"SessionSummaryDisplay.test.js","sourceRoot":"","sources":["../../../../src/ui/components/SessionSummaryDisplay.test.tsx"],"names":[],"mappings":";AAAA;;;;GAIG;AAEH,OAAO,EAAE,MAAM,EAAE,MAAM,qBAAqB,CAAC;AAC7C,OAAO,EAAE,QAAQ,EAAE,EAAE,EAAE,MAAM,EAAE,EAAE,EAAE,MAAM,QAAQ,CAAC;AAClD,OAAO,EAAE,qBAAqB,EAAE,MAAM,4BAA4B,CAAC;AACnE,OAAO,KAAK,cAAc,MAAM,+BAA+B,CAAC;AAGhE,EAAE,CAAC,IAAI,CAAC,+BAA+B,EAAE,KAAK,EAAE,cAAc,EAAE,EAAE;IAChE,MAAM,MAAM,GAAG,MAAM,cAAc,EAAyB,CAAC;IAC7D,OAAO;QACL,GAAG,MAAM;QACT,eAAe,EAAE,EAAE,CAAC,EAAE,EAAE;KACzB,CAAC;AACJ,CAAC,CAAC,CAAC;AAEH,MAAM,mBAAmB,GAAG,EAAE,CAAC,MAAM,CAAC,cAAc,CAAC,eAAe,CAAC,CAAC;AAEtE,MAAM,qBAAqB,GAAG,CAAC,OAAuB,EAAE,EAAE;IACxD,mBAAmB,CAAC,eAAe,CAAC;QAClC,KAAK,EAAE;YACL,gBAAgB,EAAE,IAAI,IAAI,EAAE;YAC5B,OAAO;YACP,oBAAoB,EAAE,CAAC;SACxB;KACF,CAAC,CAAC;IAEH,OAAO,MAAM,CAAC,KAAC,qBAAqB,IAAC,QAAQ,EAAC,YAAY,GAAG,CAAC,CAAC;AACjE,CAAC,CAAC;AAEF,QAAQ,CAAC,2BAA2B,EAAE,GAAG,EAAE;IACzC,EAAE,CAAC,0CAA0C,EAAE,GAAG,EAAE;QAClD,MAAM,OAAO,GAAmB;YAC9B,MAAM,EAAE;gBACN,gBAAgB,EAAE;oBAChB,GAAG,EAAE,EAAE,aAAa,EAAE,EAAE,EAAE,WAAW,EAAE,CAAC,EAAE,cAAc,EAAE,KAAK,EAAE;oBACjE,MAAM,EAAE;wBACN,MAAM,EAAE,IAAI;wBACZ,UAAU,EAAE,IAAI;wBAChB,KAAK,EAAE,IAAI;wBACX,MAAM,EAAE,GAAG;wBACX,QAAQ,EAAE,GAAG;wBACb,IAAI,EAAE,GAAG;qBACV;iBACF;aACF;YACD,KAAK,EAAE;gBACL,UAAU,EAAE,CAAC;gBACb,YAAY,EAAE,CAAC;gBACf,SAAS,EAAE,CAAC;gBACZ,eAAe,EAAE,CAAC;gBAClB,cAAc,EAAE,EAAE,MAAM,EAAE,CAAC,EAAE,MAAM,EAAE,CAAC,EAAE,MAAM,EAAE,CAAC,EAAE;gBACnD,MAAM,EAAE,EAAE;aACX;SACF,CAAC;QAEF,MAAM,EAAE,SAAS,EAAE,GAAG,qBAAqB,CAAC,OAAO,CAAC,CAAC;QACrD,MAAM,MAAM,GAAG,SAAS,EAAE,CAAC;QAE3B,MAAM,CAAC,MAAM,CAAC,CAAC,SAAS,CAAC,+BAA+B,CAAC,CAAC;QAC1D,MAAM,CAAC,MAAM,CAAC,CAAC,eAAe,EAAE,CAAC;IACnC,CAAC,CAAC,CAAC;AACL,CAAC,CAAC,CAAC"}
@@ -1,6 +0,0 @@
1
- /**
2
- * @license
3
- * Copyright 2025 Google LLC
4
- * SPDX-License-Identifier: Apache-2.0
5
- */
6
- export {};
@@ -1,275 +0,0 @@
1
- import { jsx as _jsx } from "react/jsx-runtime";
2
- /**
3
- * @license
4
- * Copyright 2025 Google LLC
5
- * SPDX-License-Identifier: Apache-2.0
6
- */
7
- import { render } from 'ink-testing-library';
8
- import { describe, it, expect, vi } from 'vitest';
9
- import { StatsDisplay } from './StatsDisplay.js';
10
- import * as SessionContext from '../contexts/SessionContext.js';
11
- // Mock the context to provide controlled data for testing
12
- vi.mock('../contexts/SessionContext.js', async (importOriginal) => {
13
- const actual = await importOriginal();
14
- return {
15
- ...actual,
16
- useSessionStats: vi.fn(),
17
- };
18
- });
19
- const useSessionStatsMock = vi.mocked(SessionContext.useSessionStats);
20
- const renderWithMockedStats = (metrics) => {
21
- useSessionStatsMock.mockReturnValue({
22
- stats: {
23
- sessionStartTime: new Date(),
24
- metrics,
25
- lastPromptTokenCount: 0,
26
- },
27
- });
28
- return render(_jsx(StatsDisplay, { duration: "1s" }));
29
- };
30
- describe('<StatsDisplay />', () => {
31
- it('renders only the Performance section in its zero state', () => {
32
- const zeroMetrics = {
33
- models: {},
34
- tools: {
35
- totalCalls: 0,
36
- totalSuccess: 0,
37
- totalFail: 0,
38
- totalDurationMs: 0,
39
- totalDecisions: { accept: 0, reject: 0, modify: 0 },
40
- byName: {},
41
- },
42
- };
43
- const { lastFrame } = renderWithMockedStats(zeroMetrics);
44
- const output = lastFrame();
45
- expect(output).toContain('Performance');
46
- expect(output).not.toContain('Interaction Summary');
47
- expect(output).not.toContain('Efficiency & Optimizations');
48
- expect(output).not.toContain('Model'); // The table header
49
- expect(output).toMatchSnapshot();
50
- });
51
- it('renders a table with two models correctly', () => {
52
- const metrics = {
53
- models: {
54
- 'gemini-2.5-pro': {
55
- api: { totalRequests: 3, totalErrors: 0, totalLatencyMs: 15000 },
56
- tokens: {
57
- prompt: 1000,
58
- candidates: 2000,
59
- total: 43234,
60
- cached: 500,
61
- thoughts: 100,
62
- tool: 50,
63
- },
64
- },
65
- 'gemini-2.5-flash': {
66
- api: { totalRequests: 5, totalErrors: 1, totalLatencyMs: 4500 },
67
- tokens: {
68
- prompt: 25000,
69
- candidates: 15000,
70
- total: 150000000,
71
- cached: 10000,
72
- thoughts: 2000,
73
- tool: 1000,
74
- },
75
- },
76
- },
77
- tools: {
78
- totalCalls: 0,
79
- totalSuccess: 0,
80
- totalFail: 0,
81
- totalDurationMs: 0,
82
- totalDecisions: { accept: 0, reject: 0, modify: 0 },
83
- byName: {},
84
- },
85
- };
86
- const { lastFrame } = renderWithMockedStats(metrics);
87
- const output = lastFrame();
88
- expect(output).toContain('gemini-2.5-pro');
89
- expect(output).toContain('gemini-2.5-flash');
90
- expect(output).toContain('1,000');
91
- expect(output).toContain('25,000');
92
- expect(output).toMatchSnapshot();
93
- });
94
- it('renders all sections when all data is present', () => {
95
- const metrics = {
96
- models: {
97
- 'gemini-2.5-pro': {
98
- api: { totalRequests: 1, totalErrors: 0, totalLatencyMs: 100 },
99
- tokens: {
100
- prompt: 100,
101
- candidates: 100,
102
- total: 250,
103
- cached: 50,
104
- thoughts: 0,
105
- tool: 0,
106
- },
107
- },
108
- },
109
- tools: {
110
- totalCalls: 2,
111
- totalSuccess: 1,
112
- totalFail: 1,
113
- totalDurationMs: 123,
114
- totalDecisions: { accept: 1, reject: 0, modify: 0 },
115
- byName: {
116
- 'test-tool': {
117
- count: 2,
118
- success: 1,
119
- fail: 1,
120
- durationMs: 123,
121
- decisions: { accept: 1, reject: 0, modify: 0 },
122
- },
123
- },
124
- },
125
- };
126
- const { lastFrame } = renderWithMockedStats(metrics);
127
- const output = lastFrame();
128
- expect(output).toContain('Performance');
129
- expect(output).toContain('Interaction Summary');
130
- expect(output).toContain('User Agreement');
131
- expect(output).toContain('Savings Highlight');
132
- expect(output).toContain('gemini-2.5-pro');
133
- expect(output).toMatchSnapshot();
134
- });
135
- describe('Conditional Rendering Tests', () => {
136
- it('hides User Agreement when no decisions are made', () => {
137
- const metrics = {
138
- models: {},
139
- tools: {
140
- totalCalls: 2,
141
- totalSuccess: 1,
142
- totalFail: 1,
143
- totalDurationMs: 123,
144
- totalDecisions: { accept: 0, reject: 0, modify: 0 }, // No decisions
145
- byName: {
146
- 'test-tool': {
147
- count: 2,
148
- success: 1,
149
- fail: 1,
150
- durationMs: 123,
151
- decisions: { accept: 0, reject: 0, modify: 0 },
152
- },
153
- },
154
- },
155
- };
156
- const { lastFrame } = renderWithMockedStats(metrics);
157
- const output = lastFrame();
158
- expect(output).toContain('Interaction Summary');
159
- expect(output).toContain('Success Rate');
160
- expect(output).not.toContain('User Agreement');
161
- expect(output).toMatchSnapshot();
162
- });
163
- it('hides Efficiency section when cache is not used', () => {
164
- const metrics = {
165
- models: {
166
- 'gemini-2.5-pro': {
167
- api: { totalRequests: 1, totalErrors: 0, totalLatencyMs: 100 },
168
- tokens: {
169
- prompt: 100,
170
- candidates: 100,
171
- total: 200,
172
- cached: 0,
173
- thoughts: 0,
174
- tool: 0,
175
- },
176
- },
177
- },
178
- tools: {
179
- totalCalls: 0,
180
- totalSuccess: 0,
181
- totalFail: 0,
182
- totalDurationMs: 0,
183
- totalDecisions: { accept: 0, reject: 0, modify: 0 },
184
- byName: {},
185
- },
186
- };
187
- const { lastFrame } = renderWithMockedStats(metrics);
188
- const output = lastFrame();
189
- expect(output).not.toContain('Efficiency & Optimizations');
190
- expect(output).toMatchSnapshot();
191
- });
192
- });
193
- describe('Conditional Color Tests', () => {
194
- it('renders success rate in green for high values', () => {
195
- const metrics = {
196
- models: {},
197
- tools: {
198
- totalCalls: 10,
199
- totalSuccess: 10,
200
- totalFail: 0,
201
- totalDurationMs: 0,
202
- totalDecisions: { accept: 0, reject: 0, modify: 0 },
203
- byName: {},
204
- },
205
- };
206
- const { lastFrame } = renderWithMockedStats(metrics);
207
- expect(lastFrame()).toMatchSnapshot();
208
- });
209
- it('renders success rate in yellow for medium values', () => {
210
- const metrics = {
211
- models: {},
212
- tools: {
213
- totalCalls: 10,
214
- totalSuccess: 9,
215
- totalFail: 1,
216
- totalDurationMs: 0,
217
- totalDecisions: { accept: 0, reject: 0, modify: 0 },
218
- byName: {},
219
- },
220
- };
221
- const { lastFrame } = renderWithMockedStats(metrics);
222
- expect(lastFrame()).toMatchSnapshot();
223
- });
224
- it('renders success rate in red for low values', () => {
225
- const metrics = {
226
- models: {},
227
- tools: {
228
- totalCalls: 10,
229
- totalSuccess: 5,
230
- totalFail: 5,
231
- totalDurationMs: 0,
232
- totalDecisions: { accept: 0, reject: 0, modify: 0 },
233
- byName: {},
234
- },
235
- };
236
- const { lastFrame } = renderWithMockedStats(metrics);
237
- expect(lastFrame()).toMatchSnapshot();
238
- });
239
- });
240
- describe('Title Rendering', () => {
241
- const zeroMetrics = {
242
- models: {},
243
- tools: {
244
- totalCalls: 0,
245
- totalSuccess: 0,
246
- totalFail: 0,
247
- totalDurationMs: 0,
248
- totalDecisions: { accept: 0, reject: 0, modify: 0 },
249
- byName: {},
250
- },
251
- };
252
- it('renders the default title when no title prop is provided', () => {
253
- const { lastFrame } = renderWithMockedStats(zeroMetrics);
254
- const output = lastFrame();
255
- expect(output).toContain('Session Stats');
256
- expect(output).not.toContain('Agent powering down');
257
- expect(output).toMatchSnapshot();
258
- });
259
- it('renders the custom title when a title prop is provided', () => {
260
- useSessionStatsMock.mockReturnValue({
261
- stats: {
262
- sessionStartTime: new Date(),
263
- metrics: zeroMetrics,
264
- lastPromptTokenCount: 0,
265
- },
266
- });
267
- const { lastFrame } = render(_jsx(StatsDisplay, { duration: "1s", title: "Agent powering down. Goodbye!" }));
268
- const output = lastFrame();
269
- expect(output).toContain('Agent powering down. Goodbye!');
270
- expect(output).not.toContain('Session Stats');
271
- expect(output).toMatchSnapshot();
272
- });
273
- });
274
- });
275
- //# sourceMappingURL=StatsDisplay.test.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"StatsDisplay.test.js","sourceRoot":"","sources":["../../../../src/ui/components/StatsDisplay.test.tsx"],"names":[],"mappings":"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"}
@@ -1,6 +0,0 @@
1
- /**
2
- * @license
3
- * Copyright 2025 Google LLC
4
- * SPDX-License-Identifier: Apache-2.0
5
- */
6
- export {};
@@ -1,160 +0,0 @@
1
- import { jsx as _jsx } from "react/jsx-runtime";
2
- /**
3
- * @license
4
- * Copyright 2025 Google LLC
5
- * SPDX-License-Identifier: Apache-2.0
6
- */
7
- import { render } from 'ink-testing-library';
8
- import { describe, it, expect, vi } from 'vitest';
9
- import { ToolStatsDisplay } from './ToolStatsDisplay.js';
10
- import * as SessionContext from '../contexts/SessionContext.js';
11
- // Mock the context to provide controlled data for testing
12
- vi.mock('../contexts/SessionContext.js', async (importOriginal) => {
13
- const actual = await importOriginal();
14
- return {
15
- ...actual,
16
- useSessionStats: vi.fn(),
17
- };
18
- });
19
- const useSessionStatsMock = vi.mocked(SessionContext.useSessionStats);
20
- const renderWithMockedStats = (metrics) => {
21
- useSessionStatsMock.mockReturnValue({
22
- stats: {
23
- sessionStartTime: new Date(),
24
- metrics,
25
- lastPromptTokenCount: 0,
26
- },
27
- });
28
- return render(_jsx(ToolStatsDisplay, {}));
29
- };
30
- describe('<ToolStatsDisplay />', () => {
31
- it('should render "no tool calls" message when there are no active tools', () => {
32
- const { lastFrame } = renderWithMockedStats({
33
- models: {},
34
- tools: {
35
- totalCalls: 0,
36
- totalSuccess: 0,
37
- totalFail: 0,
38
- totalDurationMs: 0,
39
- totalDecisions: { accept: 0, reject: 0, modify: 0 },
40
- byName: {},
41
- },
42
- });
43
- expect(lastFrame()).toContain('No tool calls have been made in this session.');
44
- expect(lastFrame()).toMatchSnapshot();
45
- });
46
- it('should display stats for a single tool correctly', () => {
47
- const { lastFrame } = renderWithMockedStats({
48
- models: {},
49
- tools: {
50
- totalCalls: 1,
51
- totalSuccess: 1,
52
- totalFail: 0,
53
- totalDurationMs: 100,
54
- totalDecisions: { accept: 1, reject: 0, modify: 0 },
55
- byName: {
56
- 'test-tool': {
57
- count: 1,
58
- success: 1,
59
- fail: 0,
60
- durationMs: 100,
61
- decisions: { accept: 1, reject: 0, modify: 0 },
62
- },
63
- },
64
- },
65
- });
66
- const output = lastFrame();
67
- expect(output).toContain('test-tool');
68
- expect(output).toMatchSnapshot();
69
- });
70
- it('should display stats for multiple tools correctly', () => {
71
- const { lastFrame } = renderWithMockedStats({
72
- models: {},
73
- tools: {
74
- totalCalls: 3,
75
- totalSuccess: 2,
76
- totalFail: 1,
77
- totalDurationMs: 300,
78
- totalDecisions: { accept: 1, reject: 1, modify: 1 },
79
- byName: {
80
- 'tool-a': {
81
- count: 2,
82
- success: 1,
83
- fail: 1,
84
- durationMs: 200,
85
- decisions: { accept: 1, reject: 1, modify: 0 },
86
- },
87
- 'tool-b': {
88
- count: 1,
89
- success: 1,
90
- fail: 0,
91
- durationMs: 100,
92
- decisions: { accept: 0, reject: 0, modify: 1 },
93
- },
94
- },
95
- },
96
- });
97
- const output = lastFrame();
98
- expect(output).toContain('tool-a');
99
- expect(output).toContain('tool-b');
100
- expect(output).toMatchSnapshot();
101
- });
102
- it('should handle large values without wrapping or overlapping', () => {
103
- const { lastFrame } = renderWithMockedStats({
104
- models: {},
105
- tools: {
106
- totalCalls: 999999999,
107
- totalSuccess: 888888888,
108
- totalFail: 111111111,
109
- totalDurationMs: 987654321,
110
- totalDecisions: {
111
- accept: 123456789,
112
- reject: 98765432,
113
- modify: 12345,
114
- },
115
- byName: {
116
- 'long-named-tool-for-testing-wrapping-and-such': {
117
- count: 999999999,
118
- success: 888888888,
119
- fail: 111111111,
120
- durationMs: 987654321,
121
- decisions: {
122
- accept: 123456789,
123
- reject: 98765432,
124
- modify: 12345,
125
- },
126
- },
127
- },
128
- },
129
- });
130
- expect(lastFrame()).toMatchSnapshot();
131
- });
132
- it('should handle zero decisions gracefully', () => {
133
- const { lastFrame } = renderWithMockedStats({
134
- models: {},
135
- tools: {
136
- totalCalls: 1,
137
- totalSuccess: 1,
138
- totalFail: 0,
139
- totalDurationMs: 100,
140
- totalDecisions: { accept: 0, reject: 0, modify: 0 },
141
- byName: {
142
- 'test-tool': {
143
- count: 1,
144
- success: 1,
145
- fail: 0,
146
- durationMs: 100,
147
- decisions: { accept: 0, reject: 0, modify: 0 },
148
- },
149
- },
150
- },
151
- });
152
- const output = lastFrame();
153
- expect(output).toContain('Total Reviewed Suggestions:');
154
- expect(output).toContain('0');
155
- expect(output).toContain('Overall Agreement Rate:');
156
- expect(output).toContain('--');
157
- expect(output).toMatchSnapshot();
158
- });
159
- });
160
- //# sourceMappingURL=ToolStatsDisplay.test.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"ToolStatsDisplay.test.js","sourceRoot":"","sources":["../../../../src/ui/components/ToolStatsDisplay.test.tsx"],"names":[],"mappings":"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"}
@@ -1,6 +0,0 @@
1
- /**
2
- * @license
3
- * Copyright 2025 Google LLC
4
- * SPDX-License-Identifier: Apache-2.0
5
- */
6
- export {};