@google/gemini-cli 0.0.89999 → 0.0.888888

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 (149) hide show
  1. package/dist/package.json +3 -2
  2. package/dist/src/commands/extensions/disable.d.ts +2 -1
  3. package/dist/src/commands/extensions/disable.js +3 -17
  4. package/dist/src/commands/extensions/disable.js.map +1 -1
  5. package/dist/src/commands/extensions/enable.d.ts +2 -1
  6. package/dist/src/commands/extensions/enable.js +4 -17
  7. package/dist/src/commands/extensions/enable.js.map +1 -1
  8. package/dist/src/commands/extensions/install.d.ts +0 -1
  9. package/dist/src/commands/extensions/install.js +1 -9
  10. package/dist/src/commands/extensions/install.js.map +1 -1
  11. package/dist/src/commands/extensions/install.test.js +1 -5
  12. package/dist/src/commands/extensions/install.test.js.map +1 -1
  13. package/dist/src/commands/extensions/link.js +1 -1
  14. package/dist/src/commands/extensions/link.js.map +1 -1
  15. package/dist/src/commands/extensions/uninstall.js +1 -1
  16. package/dist/src/commands/extensions/uninstall.js.map +1 -1
  17. package/dist/src/commands/extensions/update.js +4 -24
  18. package/dist/src/commands/extensions/update.js.map +1 -1
  19. package/dist/src/config/config.js +43 -46
  20. package/dist/src/config/config.js.map +1 -1
  21. package/dist/src/config/extension.d.ts +17 -4
  22. package/dist/src/config/extension.js +154 -36
  23. package/dist/src/config/extension.js.map +1 -1
  24. package/dist/src/config/extensions/extensionEnablement.d.ts +0 -14
  25. package/dist/src/config/extensions/extensionEnablement.js +33 -81
  26. package/dist/src/config/extensions/extensionEnablement.js.map +1 -1
  27. package/dist/src/config/extensions/extensionEnablement.test.js +19 -164
  28. package/dist/src/config/extensions/extensionEnablement.test.js.map +1 -1
  29. package/dist/src/gemini.js +2 -3
  30. package/dist/src/gemini.js.map +1 -1
  31. package/dist/src/generated/git-commit.d.ts +2 -2
  32. package/dist/src/generated/git-commit.js +2 -2
  33. package/dist/src/generated/git-commit.js.map +1 -1
  34. package/dist/src/nonInteractiveCli.d.ts +1 -2
  35. package/dist/src/nonInteractiveCli.js +16 -29
  36. package/dist/src/nonInteractiveCli.js.map +1 -1
  37. package/dist/src/test-utils/mockCommandContext.js +0 -2
  38. package/dist/src/test-utils/mockCommandContext.js.map +1 -1
  39. package/dist/src/ui/App.js +2 -3
  40. package/dist/src/ui/App.js.map +1 -1
  41. package/dist/src/ui/AppContainer.js +35 -33
  42. package/dist/src/ui/AppContainer.js.map +1 -1
  43. package/dist/src/ui/AppContainer.test.js +0 -99
  44. package/dist/src/ui/AppContainer.test.js.map +1 -1
  45. package/dist/src/ui/IdeIntegrationNudge.d.ts +2 -2
  46. package/dist/src/ui/IdeIntegrationNudge.js +2 -1
  47. package/dist/src/ui/IdeIntegrationNudge.js.map +1 -1
  48. package/dist/src/ui/commands/clearCommand.js +1 -1
  49. package/dist/src/ui/commands/clearCommand.js.map +1 -1
  50. package/dist/src/ui/commands/extensionsCommand.js +6 -22
  51. package/dist/src/ui/commands/extensionsCommand.js.map +1 -1
  52. package/dist/src/ui/commands/ideCommand.js +1 -1
  53. package/dist/src/ui/commands/ideCommand.js.map +1 -1
  54. package/dist/src/ui/commands/mcpCommand.js +2 -9
  55. package/dist/src/ui/commands/mcpCommand.js.map +1 -1
  56. package/dist/src/ui/commands/types.d.ts +2 -2
  57. package/dist/src/ui/components/Composer.js +10 -9
  58. package/dist/src/ui/components/Composer.js.map +1 -1
  59. package/dist/src/ui/components/Composer.test.js +21 -18
  60. package/dist/src/ui/components/Composer.test.js.map +1 -1
  61. package/dist/src/ui/components/HistoryItemDisplay.js +1 -2
  62. package/dist/src/ui/components/HistoryItemDisplay.js.map +1 -1
  63. package/dist/src/ui/components/InputPrompt.d.ts +0 -6
  64. package/dist/src/ui/components/InputPrompt.js +14 -42
  65. package/dist/src/ui/components/InputPrompt.js.map +1 -1
  66. package/dist/src/ui/components/shared/text-buffer.d.ts +0 -6
  67. package/dist/src/ui/components/shared/text-buffer.js +4 -71
  68. package/dist/src/ui/components/shared/text-buffer.js.map +1 -1
  69. package/dist/src/ui/contexts/SessionContext.d.ts +0 -6
  70. package/dist/src/ui/contexts/SessionContext.js +5 -107
  71. package/dist/src/ui/contexts/SessionContext.js.map +1 -1
  72. package/dist/src/ui/contexts/UIStateContext.d.ts +3 -2
  73. package/dist/src/ui/contexts/UIStateContext.js.map +1 -1
  74. package/dist/src/ui/hooks/slashCommandProcessor.d.ts +1 -2
  75. package/dist/src/ui/hooks/slashCommandProcessor.js +1 -1
  76. package/dist/src/ui/hooks/slashCommandProcessor.js.map +1 -1
  77. package/dist/src/ui/hooks/useGeminiStream.js +5 -2
  78. package/dist/src/ui/hooks/useGeminiStream.js.map +1 -1
  79. package/dist/src/ui/hooks/useStateAndRef.d.ts +1 -1
  80. package/dist/src/ui/hooks/useStateAndRef.js +2 -2
  81. package/dist/src/ui/hooks/useStateAndRef.js.map +1 -1
  82. package/dist/src/ui/state/extensions.d.ts +1 -2
  83. package/dist/src/ui/state/extensions.js +0 -1
  84. package/dist/src/ui/state/extensions.js.map +1 -1
  85. package/dist/src/ui/types.d.ts +1 -6
  86. package/dist/src/ui/types.js +0 -1
  87. package/dist/src/ui/types.js.map +1 -1
  88. package/dist/src/ui/utils/highlight.d.ts +0 -1
  89. package/dist/src/ui/utils/highlight.js +0 -28
  90. package/dist/src/ui/utils/highlight.js.map +1 -1
  91. package/dist/src/utils/events.d.ts +1 -2
  92. package/dist/src/utils/events.js +0 -1
  93. package/dist/src/utils/events.js.map +1 -1
  94. package/dist/tsconfig.tsbuildinfo +1 -1
  95. package/package.json +4 -3
  96. package/dist/src/config/extensions/github.d.ts +0 -25
  97. package/dist/src/config/extensions/github.js +0 -274
  98. package/dist/src/config/extensions/github.js.map +0 -1
  99. package/dist/src/config/extensions/github.test.d.ts +0 -6
  100. package/dist/src/config/extensions/github.test.js +0 -267
  101. package/dist/src/config/extensions/github.test.js.map +0 -1
  102. package/dist/src/config/extensions/update.d.ts +0 -20
  103. package/dist/src/config/extensions/update.js +0 -94
  104. package/dist/src/config/extensions/update.js.map +0 -1
  105. package/dist/src/config/extensions/update.test.d.ts +0 -6
  106. package/dist/src/config/extensions/update.test.js +0 -292
  107. package/dist/src/config/extensions/update.test.js.map +0 -1
  108. package/dist/src/config/policy-engine.integration.test.d.ts +0 -6
  109. package/dist/src/config/policy-engine.integration.test.js +0 -270
  110. package/dist/src/config/policy-engine.integration.test.js.map +0 -1
  111. package/dist/src/config/policy.d.ts +0 -8
  112. package/dist/src/config/policy.js +0 -150
  113. package/dist/src/config/policy.js.map +0 -1
  114. package/dist/src/config/policy.test.d.ts +0 -6
  115. package/dist/src/config/policy.test.js +0 -336
  116. package/dist/src/config/policy.test.js.map +0 -1
  117. package/dist/src/nonInteractiveCliCommands.d.ts +0 -17
  118. package/dist/src/nonInteractiveCliCommands.js +0 -79
  119. package/dist/src/nonInteractiveCliCommands.js.map +0 -1
  120. package/dist/src/test-utils/createExtension.d.ts +0 -15
  121. package/dist/src/test-utils/createExtension.js +0 -25
  122. package/dist/src/test-utils/createExtension.js.map +0 -1
  123. package/dist/src/ui/components/QueuedMessageDisplay.d.ts +0 -9
  124. package/dist/src/ui/components/QueuedMessageDisplay.js +0 -20
  125. package/dist/src/ui/components/QueuedMessageDisplay.js.map +0 -1
  126. package/dist/src/ui/components/QueuedMessageDisplay.test.d.ts +0 -6
  127. package/dist/src/ui/components/QueuedMessageDisplay.test.js +0 -56
  128. package/dist/src/ui/components/QueuedMessageDisplay.test.js.map +0 -1
  129. package/dist/src/ui/components/messages/WarningMessage.d.ts +0 -11
  130. package/dist/src/ui/components/messages/WarningMessage.js +0 -10
  131. package/dist/src/ui/components/messages/WarningMessage.js.map +0 -1
  132. package/dist/src/ui/contexts/FocusContext.d.ts +0 -7
  133. package/dist/src/ui/contexts/FocusContext.js +0 -9
  134. package/dist/src/ui/contexts/FocusContext.js.map +0 -1
  135. package/dist/src/ui/hooks/useExtensionUpdates.d.ts +0 -12
  136. package/dist/src/ui/hooks/useExtensionUpdates.js +0 -64
  137. package/dist/src/ui/hooks/useExtensionUpdates.js.map +0 -1
  138. package/dist/src/ui/hooks/useExtensionUpdates.test.d.ts +0 -6
  139. package/dist/src/ui/hooks/useExtensionUpdates.test.js +0 -167
  140. package/dist/src/ui/hooks/useExtensionUpdates.test.js.map +0 -1
  141. package/dist/src/ui/hooks/useMemoryMonitor.d.ts +0 -13
  142. package/dist/src/ui/hooks/useMemoryMonitor.js +0 -28
  143. package/dist/src/ui/hooks/useMemoryMonitor.js.map +0 -1
  144. package/dist/src/ui/hooks/useMemoryMonitor.test.d.ts +0 -6
  145. package/dist/src/ui/hooks/useMemoryMonitor.test.js +0 -57
  146. package/dist/src/ui/hooks/useMemoryMonitor.test.js.map +0 -1
  147. package/dist/src/ui/noninteractive/nonInteractiveUi.d.ts +0 -12
  148. package/dist/src/ui/noninteractive/nonInteractiveUi.js +0 -27
  149. package/dist/src/ui/noninteractive/nonInteractiveUi.js.map +0 -1
@@ -1,336 +0,0 @@
1
- /**
2
- * @license
3
- * Copyright 2025 Google LLC
4
- * SPDX-License-Identifier: Apache-2.0
5
- */
6
- import { describe, it, expect } from 'vitest';
7
- import { createPolicyEngineConfig } from './policy.js';
8
- import { ApprovalMode, PolicyDecision } from '@google/gemini-cli-core';
9
- describe('createPolicyEngineConfig', () => {
10
- it('should return ASK_USER for all tools by default', () => {
11
- const settings = {};
12
- const config = createPolicyEngineConfig(settings, ApprovalMode.DEFAULT);
13
- expect(config.defaultDecision).toBe(PolicyDecision.ASK_USER);
14
- expect(config.rules).toEqual([
15
- { toolName: 'replace', decision: 'ask_user', priority: 10 },
16
- { toolName: 'save_memory', decision: 'ask_user', priority: 10 },
17
- { toolName: 'run_shell_command', decision: 'ask_user', priority: 10 },
18
- { toolName: 'write_file', decision: 'ask_user', priority: 10 },
19
- { toolName: 'web_fetch', decision: 'ask_user', priority: 10 },
20
- ]);
21
- });
22
- it('should allow tools in tools.allowed', () => {
23
- const settings = {
24
- tools: { allowed: ['run_shell_command'] },
25
- };
26
- const config = createPolicyEngineConfig(settings, ApprovalMode.DEFAULT);
27
- const rule = config.rules?.find((r) => r.toolName === 'run_shell_command' &&
28
- r.decision === PolicyDecision.ALLOW);
29
- expect(rule).toBeDefined();
30
- expect(rule?.priority).toBe(100);
31
- });
32
- it('should deny tools in tools.exclude', () => {
33
- const settings = {
34
- tools: { exclude: ['run_shell_command'] },
35
- };
36
- const config = createPolicyEngineConfig(settings, ApprovalMode.DEFAULT);
37
- const rule = config.rules?.find((r) => r.toolName === 'run_shell_command' &&
38
- r.decision === PolicyDecision.DENY);
39
- expect(rule).toBeDefined();
40
- expect(rule?.priority).toBe(200);
41
- });
42
- it('should allow tools from allowed MCP servers', () => {
43
- const settings = {
44
- mcp: { allowed: ['my-server'] },
45
- };
46
- const config = createPolicyEngineConfig(settings, ApprovalMode.DEFAULT);
47
- const rule = config.rules?.find((r) => r.toolName === 'my-server__*' && r.decision === PolicyDecision.ALLOW);
48
- expect(rule).toBeDefined();
49
- expect(rule?.priority).toBe(85);
50
- });
51
- it('should deny tools from excluded MCP servers', () => {
52
- const settings = {
53
- mcp: { excluded: ['my-server'] },
54
- };
55
- const config = createPolicyEngineConfig(settings, ApprovalMode.DEFAULT);
56
- const rule = config.rules?.find((r) => r.toolName === 'my-server__*' && r.decision === PolicyDecision.DENY);
57
- expect(rule).toBeDefined();
58
- expect(rule?.priority).toBe(195);
59
- });
60
- it('should allow tools from trusted MCP servers', () => {
61
- const settings = {
62
- mcpServers: {
63
- 'trusted-server': {
64
- command: 'node',
65
- args: ['server.js'],
66
- trust: true,
67
- },
68
- 'untrusted-server': {
69
- command: 'node',
70
- args: ['server.js'],
71
- trust: false,
72
- },
73
- },
74
- };
75
- const config = createPolicyEngineConfig(settings, ApprovalMode.DEFAULT);
76
- const trustedRule = config.rules?.find((r) => r.toolName === 'trusted-server__*' &&
77
- r.decision === PolicyDecision.ALLOW);
78
- expect(trustedRule).toBeDefined();
79
- expect(trustedRule?.priority).toBe(90);
80
- // Untrusted server should not have an allow rule
81
- const untrustedRule = config.rules?.find((r) => r.toolName === 'untrusted-server__*' &&
82
- r.decision === PolicyDecision.ALLOW);
83
- expect(untrustedRule).toBeUndefined();
84
- });
85
- it('should handle multiple MCP server configurations together', () => {
86
- const settings = {
87
- mcp: {
88
- allowed: ['allowed-server'],
89
- excluded: ['excluded-server'],
90
- },
91
- mcpServers: {
92
- 'trusted-server': {
93
- command: 'node',
94
- args: ['server.js'],
95
- trust: true,
96
- },
97
- },
98
- };
99
- const config = createPolicyEngineConfig(settings, ApprovalMode.DEFAULT);
100
- // Check allowed server
101
- const allowedRule = config.rules?.find((r) => r.toolName === 'allowed-server__*' &&
102
- r.decision === PolicyDecision.ALLOW);
103
- expect(allowedRule).toBeDefined();
104
- expect(allowedRule?.priority).toBe(85);
105
- // Check trusted server
106
- const trustedRule = config.rules?.find((r) => r.toolName === 'trusted-server__*' &&
107
- r.decision === PolicyDecision.ALLOW);
108
- expect(trustedRule).toBeDefined();
109
- expect(trustedRule?.priority).toBe(90);
110
- // Check excluded server
111
- const excludedRule = config.rules?.find((r) => r.toolName === 'excluded-server__*' &&
112
- r.decision === PolicyDecision.DENY);
113
- expect(excludedRule).toBeDefined();
114
- expect(excludedRule?.priority).toBe(195);
115
- });
116
- it('should allow read-only tools if autoAccept is true', () => {
117
- const settings = {
118
- tools: { autoAccept: true },
119
- };
120
- const config = createPolicyEngineConfig(settings, ApprovalMode.DEFAULT);
121
- const rule = config.rules?.find((r) => r.toolName === 'glob' && r.decision === PolicyDecision.ALLOW);
122
- expect(rule).toBeDefined();
123
- expect(rule?.priority).toBe(50);
124
- });
125
- it('should allow all tools in YOLO mode', () => {
126
- const settings = {};
127
- const config = createPolicyEngineConfig(settings, ApprovalMode.YOLO);
128
- const rule = config.rules?.find((r) => r.decision === PolicyDecision.ALLOW && r.priority === 0);
129
- expect(rule).toBeDefined();
130
- });
131
- it('should allow edit tool in AUTO_EDIT mode', () => {
132
- const settings = {};
133
- const config = createPolicyEngineConfig(settings, ApprovalMode.AUTO_EDIT);
134
- const rule = config.rules?.find((r) => r.toolName === 'replace' && r.decision === PolicyDecision.ALLOW);
135
- expect(rule).toBeDefined();
136
- expect(rule?.priority).toBe(15);
137
- });
138
- it('should prioritize exclude over allow', () => {
139
- const settings = {
140
- tools: { allowed: ['run_shell_command'], exclude: ['run_shell_command'] },
141
- };
142
- const config = createPolicyEngineConfig(settings, ApprovalMode.DEFAULT);
143
- const denyRule = config.rules?.find((r) => r.toolName === 'run_shell_command' &&
144
- r.decision === PolicyDecision.DENY);
145
- const allowRule = config.rules?.find((r) => r.toolName === 'run_shell_command' &&
146
- r.decision === PolicyDecision.ALLOW);
147
- expect(denyRule).toBeDefined();
148
- expect(allowRule).toBeDefined();
149
- expect(denyRule.priority).toBeGreaterThan(allowRule.priority);
150
- });
151
- it('should prioritize specific tool allows over MCP server excludes', () => {
152
- const settings = {
153
- mcp: { excluded: ['my-server'] },
154
- tools: { allowed: ['my-server__specific-tool'] },
155
- };
156
- const config = createPolicyEngineConfig(settings, ApprovalMode.DEFAULT);
157
- const serverDenyRule = config.rules?.find((r) => r.toolName === 'my-server__*' && r.decision === PolicyDecision.DENY);
158
- const toolAllowRule = config.rules?.find((r) => r.toolName === 'my-server__specific-tool' &&
159
- r.decision === PolicyDecision.ALLOW);
160
- expect(serverDenyRule).toBeDefined();
161
- expect(serverDenyRule?.priority).toBe(195);
162
- expect(toolAllowRule).toBeDefined();
163
- expect(toolAllowRule?.priority).toBe(100);
164
- // Tool allow (100) has lower priority than server deny (195),
165
- // so server deny wins - this might be counterintuitive
166
- });
167
- it('should prioritize specific tool excludes over MCP server allows', () => {
168
- const settings = {
169
- mcp: { allowed: ['my-server'] },
170
- mcpServers: {
171
- 'my-server': {
172
- command: 'node',
173
- args: ['server.js'],
174
- trust: true,
175
- },
176
- },
177
- tools: { exclude: ['my-server__dangerous-tool'] },
178
- };
179
- const config = createPolicyEngineConfig(settings, ApprovalMode.DEFAULT);
180
- const serverAllowRule = config.rules?.find((r) => r.toolName === 'my-server__*' && r.decision === PolicyDecision.ALLOW);
181
- const toolDenyRule = config.rules?.find((r) => r.toolName === 'my-server__dangerous-tool' &&
182
- r.decision === PolicyDecision.DENY);
183
- expect(serverAllowRule).toBeDefined();
184
- expect(toolDenyRule).toBeDefined();
185
- expect(toolDenyRule.priority).toBeGreaterThan(serverAllowRule.priority);
186
- });
187
- it('should handle complex priority scenarios correctly', () => {
188
- const settings = {
189
- tools: {
190
- autoAccept: true, // Priority 50 for read-only tools
191
- allowed: ['my-server__tool1', 'other-tool'], // Priority 100
192
- exclude: ['my-server__tool2', 'glob'], // Priority 200
193
- },
194
- mcp: {
195
- allowed: ['allowed-server'], // Priority 85
196
- excluded: ['excluded-server'], // Priority 195
197
- },
198
- mcpServers: {
199
- 'trusted-server': {
200
- command: 'node',
201
- args: ['server.js'],
202
- trust: true, // Priority 90
203
- },
204
- },
205
- };
206
- const config = createPolicyEngineConfig(settings, ApprovalMode.DEFAULT);
207
- // Verify glob is denied even though autoAccept would allow it
208
- const globDenyRule = config.rules?.find((r) => r.toolName === 'glob' && r.decision === PolicyDecision.DENY);
209
- const globAllowRule = config.rules?.find((r) => r.toolName === 'glob' && r.decision === PolicyDecision.ALLOW);
210
- expect(globDenyRule).toBeDefined();
211
- expect(globAllowRule).toBeDefined();
212
- expect(globDenyRule.priority).toBe(200);
213
- expect(globAllowRule.priority).toBe(50);
214
- // Verify all priority levels are correct
215
- const priorities = config.rules
216
- ?.map((r) => ({
217
- tool: r.toolName,
218
- decision: r.decision,
219
- priority: r.priority,
220
- }))
221
- .sort((a, b) => (b.priority ?? 0) - (a.priority ?? 0));
222
- // Check that the highest priority items are the excludes
223
- const highestPriorityExcludes = priorities?.filter((p) => p.priority === 200);
224
- expect(highestPriorityExcludes?.every((p) => p.decision === PolicyDecision.DENY)).toBe(true);
225
- });
226
- it('should handle MCP servers with undefined trust property', () => {
227
- const settings = {
228
- mcpServers: {
229
- 'no-trust-property': {
230
- command: 'node',
231
- args: ['server.js'],
232
- // trust property is undefined/missing
233
- },
234
- 'explicit-false': {
235
- command: 'node',
236
- args: ['server.js'],
237
- trust: false,
238
- },
239
- },
240
- };
241
- const config = createPolicyEngineConfig(settings, ApprovalMode.DEFAULT);
242
- // Neither server should have an allow rule
243
- const noTrustRule = config.rules?.find((r) => r.toolName === 'no-trust-property__*' &&
244
- r.decision === PolicyDecision.ALLOW);
245
- const explicitFalseRule = config.rules?.find((r) => r.toolName === 'explicit-false__*' &&
246
- r.decision === PolicyDecision.ALLOW);
247
- expect(noTrustRule).toBeUndefined();
248
- expect(explicitFalseRule).toBeUndefined();
249
- });
250
- it('should not add write tool rules in YOLO mode', () => {
251
- const settings = {
252
- tools: { exclude: ['dangerous-tool'] },
253
- };
254
- const config = createPolicyEngineConfig(settings, ApprovalMode.YOLO);
255
- // Should have the wildcard allow rule with priority 0
256
- const wildcardRule = config.rules?.find((r) => !r.toolName && r.decision === PolicyDecision.ALLOW && r.priority === 0);
257
- expect(wildcardRule).toBeDefined();
258
- // Should NOT have any write tool rules (which would have priority 10)
259
- const writeToolRules = config.rules?.filter((r) => [
260
- 'replace',
261
- 'save_memory',
262
- 'run_shell_command',
263
- 'write_file',
264
- 'web_fetch',
265
- ].includes(r.toolName || '') && r.decision === PolicyDecision.ASK_USER);
266
- expect(writeToolRules).toHaveLength(0);
267
- // Should still have the exclude rule
268
- const excludeRule = config.rules?.find((r) => r.toolName === 'dangerous-tool' && r.decision === PolicyDecision.DENY);
269
- expect(excludeRule).toBeDefined();
270
- expect(excludeRule?.priority).toBe(200);
271
- });
272
- it('should handle combination of trusted server and excluded server for same name', () => {
273
- const settings = {
274
- mcpServers: {
275
- 'conflicted-server': {
276
- command: 'node',
277
- args: ['server.js'],
278
- trust: true, // Priority 90
279
- },
280
- },
281
- mcp: {
282
- excluded: ['conflicted-server'], // Priority 195
283
- },
284
- };
285
- const config = createPolicyEngineConfig(settings, ApprovalMode.DEFAULT);
286
- // Both rules should exist
287
- const trustRule = config.rules?.find((r) => r.toolName === 'conflicted-server__*' &&
288
- r.decision === PolicyDecision.ALLOW);
289
- const excludeRule = config.rules?.find((r) => r.toolName === 'conflicted-server__*' &&
290
- r.decision === PolicyDecision.DENY);
291
- expect(trustRule).toBeDefined();
292
- expect(trustRule?.priority).toBe(90);
293
- expect(excludeRule).toBeDefined();
294
- expect(excludeRule?.priority).toBe(195);
295
- // Exclude (195) should win over trust (90) when evaluated
296
- });
297
- it('should create all read-only tool rules when autoAccept is enabled', () => {
298
- const settings = {
299
- tools: { autoAccept: true },
300
- };
301
- const config = createPolicyEngineConfig(settings, ApprovalMode.DEFAULT);
302
- // All read-only tools should have allow rules
303
- const readOnlyTools = [
304
- 'glob',
305
- 'search_file_content',
306
- 'list_directory',
307
- 'read_file',
308
- 'read_many_files',
309
- ];
310
- for (const tool of readOnlyTools) {
311
- const rule = config.rules?.find((r) => r.toolName === tool && r.decision === PolicyDecision.ALLOW);
312
- expect(rule).toBeDefined();
313
- expect(rule?.priority).toBe(50);
314
- }
315
- });
316
- it('should handle all approval modes correctly', () => {
317
- const settings = {};
318
- // Test DEFAULT mode
319
- const defaultConfig = createPolicyEngineConfig(settings, ApprovalMode.DEFAULT);
320
- expect(defaultConfig.defaultDecision).toBe(PolicyDecision.ASK_USER);
321
- expect(defaultConfig.rules?.find((r) => !r.toolName && r.decision === PolicyDecision.ALLOW)).toBeUndefined();
322
- // Test YOLO mode
323
- const yoloConfig = createPolicyEngineConfig(settings, ApprovalMode.YOLO);
324
- expect(yoloConfig.defaultDecision).toBe(PolicyDecision.ASK_USER);
325
- const yoloWildcard = yoloConfig.rules?.find((r) => !r.toolName && r.decision === PolicyDecision.ALLOW);
326
- expect(yoloWildcard).toBeDefined();
327
- expect(yoloWildcard?.priority).toBe(0);
328
- // Test AUTO_EDIT mode
329
- const autoEditConfig = createPolicyEngineConfig(settings, ApprovalMode.AUTO_EDIT);
330
- expect(autoEditConfig.defaultDecision).toBe(PolicyDecision.ASK_USER);
331
- const editRule = autoEditConfig.rules?.find((r) => r.toolName === 'replace' && r.decision === PolicyDecision.ALLOW);
332
- expect(editRule).toBeDefined();
333
- expect(editRule?.priority).toBe(15);
334
- });
335
- });
336
- //# sourceMappingURL=policy.test.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"policy.test.js","sourceRoot":"","sources":["../../../src/config/policy.test.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAEH,OAAO,EAAE,QAAQ,EAAE,EAAE,EAAE,MAAM,EAAE,MAAM,QAAQ,CAAC;AAC9C,OAAO,EAAE,wBAAwB,EAAE,MAAM,aAAa,CAAC;AAEvD,OAAO,EAAE,YAAY,EAAE,cAAc,EAAE,MAAM,yBAAyB,CAAC;AAEvE,QAAQ,CAAC,0BAA0B,EAAE,GAAG,EAAE;IACxC,EAAE,CAAC,iDAAiD,EAAE,GAAG,EAAE;QACzD,MAAM,QAAQ,GAAa,EAAE,CAAC;QAC9B,MAAM,MAAM,GAAG,wBAAwB,CAAC,QAAQ,EAAE,YAAY,CAAC,OAAO,CAAC,CAAC;QACxE,MAAM,CAAC,MAAM,CAAC,eAAe,CAAC,CAAC,IAAI,CAAC,cAAc,CAAC,QAAQ,CAAC,CAAC;QAC7D,MAAM,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC,OAAO,CAAC;YAC3B,EAAE,QAAQ,EAAE,SAAS,EAAE,QAAQ,EAAE,UAAU,EAAE,QAAQ,EAAE,EAAE,EAAE;YAC3D,EAAE,QAAQ,EAAE,aAAa,EAAE,QAAQ,EAAE,UAAU,EAAE,QAAQ,EAAE,EAAE,EAAE;YAC/D,EAAE,QAAQ,EAAE,mBAAmB,EAAE,QAAQ,EAAE,UAAU,EAAE,QAAQ,EAAE,EAAE,EAAE;YACrE,EAAE,QAAQ,EAAE,YAAY,EAAE,QAAQ,EAAE,UAAU,EAAE,QAAQ,EAAE,EAAE,EAAE;YAC9D,EAAE,QAAQ,EAAE,WAAW,EAAE,QAAQ,EAAE,UAAU,EAAE,QAAQ,EAAE,EAAE,EAAE;SAC9D,CAAC,CAAC;IACL,CAAC,CAAC,CAAC;IAEH,EAAE,CAAC,qCAAqC,EAAE,GAAG,EAAE;QAC7C,MAAM,QAAQ,GAAa;YACzB,KAAK,EAAE,EAAE,OAAO,EAAE,CAAC,mBAAmB,CAAC,EAAE;SAC1C,CAAC;QACF,MAAM,MAAM,GAAG,wBAAwB,CAAC,QAAQ,EAAE,YAAY,CAAC,OAAO,CAAC,CAAC;QACxE,MAAM,IAAI,GAAG,MAAM,CAAC,KAAK,EAAE,IAAI,CAC7B,CAAC,CAAC,EAAE,EAAE,CACJ,CAAC,CAAC,QAAQ,KAAK,mBAAmB;YAClC,CAAC,CAAC,QAAQ,KAAK,cAAc,CAAC,KAAK,CACtC,CAAC;QACF,MAAM,CAAC,IAAI,CAAC,CAAC,WAAW,EAAE,CAAC;QAC3B,MAAM,CAAC,IAAI,EAAE,QAAQ,CAAC,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC;IACnC,CAAC,CAAC,CAAC;IAEH,EAAE,CAAC,oCAAoC,EAAE,GAAG,EAAE;QAC5C,MAAM,QAAQ,GAAa;YACzB,KAAK,EAAE,EAAE,OAAO,EAAE,CAAC,mBAAmB,CAAC,EAAE;SAC1C,CAAC;QACF,MAAM,MAAM,GAAG,wBAAwB,CAAC,QAAQ,EAAE,YAAY,CAAC,OAAO,CAAC,CAAC;QACxE,MAAM,IAAI,GAAG,MAAM,CAAC,KAAK,EAAE,IAAI,CAC7B,CAAC,CAAC,EAAE,EAAE,CACJ,CAAC,CAAC,QAAQ,KAAK,mBAAmB;YAClC,CAAC,CAAC,QAAQ,KAAK,cAAc,CAAC,IAAI,CACrC,CAAC;QACF,MAAM,CAAC,IAAI,CAAC,CAAC,WAAW,EAAE,CAAC;QAC3B,MAAM,CAAC,IAAI,EAAE,QAAQ,CAAC,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC;IACnC,CAAC,CAAC,CAAC;IAEH,EAAE,CAAC,6CAA6C,EAAE,GAAG,EAAE;QACrD,MAAM,QAAQ,GAAa;YACzB,GAAG,EAAE,EAAE,OAAO,EAAE,CAAC,WAAW,CAAC,EAAE;SAChC,CAAC;QACF,MAAM,MAAM,GAAG,wBAAwB,CAAC,QAAQ,EAAE,YAAY,CAAC,OAAO,CAAC,CAAC;QACxE,MAAM,IAAI,GAAG,MAAM,CAAC,KAAK,EAAE,IAAI,CAC7B,CAAC,CAAC,EAAE,EAAE,CACJ,CAAC,CAAC,QAAQ,KAAK,cAAc,IAAI,CAAC,CAAC,QAAQ,KAAK,cAAc,CAAC,KAAK,CACvE,CAAC;QACF,MAAM,CAAC,IAAI,CAAC,CAAC,WAAW,EAAE,CAAC;QAC3B,MAAM,CAAC,IAAI,EAAE,QAAQ,CAAC,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC;IAClC,CAAC,CAAC,CAAC;IAEH,EAAE,CAAC,6CAA6C,EAAE,GAAG,EAAE;QACrD,MAAM,QAAQ,GAAa;YACzB,GAAG,EAAE,EAAE,QAAQ,EAAE,CAAC,WAAW,CAAC,EAAE;SACjC,CAAC;QACF,MAAM,MAAM,GAAG,wBAAwB,CAAC,QAAQ,EAAE,YAAY,CAAC,OAAO,CAAC,CAAC;QACxE,MAAM,IAAI,GAAG,MAAM,CAAC,KAAK,EAAE,IAAI,CAC7B,CAAC,CAAC,EAAE,EAAE,CACJ,CAAC,CAAC,QAAQ,KAAK,cAAc,IAAI,CAAC,CAAC,QAAQ,KAAK,cAAc,CAAC,IAAI,CACtE,CAAC;QACF,MAAM,CAAC,IAAI,CAAC,CAAC,WAAW,EAAE,CAAC;QAC3B,MAAM,CAAC,IAAI,EAAE,QAAQ,CAAC,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC;IACnC,CAAC,CAAC,CAAC;IAEH,EAAE,CAAC,6CAA6C,EAAE,GAAG,EAAE;QACrD,MAAM,QAAQ,GAAa;YACzB,UAAU,EAAE;gBACV,gBAAgB,EAAE;oBAChB,OAAO,EAAE,MAAM;oBACf,IAAI,EAAE,CAAC,WAAW,CAAC;oBACnB,KAAK,EAAE,IAAI;iBACZ;gBACD,kBAAkB,EAAE;oBAClB,OAAO,EAAE,MAAM;oBACf,IAAI,EAAE,CAAC,WAAW,CAAC;oBACnB,KAAK,EAAE,KAAK;iBACb;aACF;SACF,CAAC;QACF,MAAM,MAAM,GAAG,wBAAwB,CAAC,QAAQ,EAAE,YAAY,CAAC,OAAO,CAAC,CAAC;QAExE,MAAM,WAAW,GAAG,MAAM,CAAC,KAAK,EAAE,IAAI,CACpC,CAAC,CAAC,EAAE,EAAE,CACJ,CAAC,CAAC,QAAQ,KAAK,mBAAmB;YAClC,CAAC,CAAC,QAAQ,KAAK,cAAc,CAAC,KAAK,CACtC,CAAC;QACF,MAAM,CAAC,WAAW,CAAC,CAAC,WAAW,EAAE,CAAC;QAClC,MAAM,CAAC,WAAW,EAAE,QAAQ,CAAC,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC;QAEvC,iDAAiD;QACjD,MAAM,aAAa,GAAG,MAAM,CAAC,KAAK,EAAE,IAAI,CACtC,CAAC,CAAC,EAAE,EAAE,CACJ,CAAC,CAAC,QAAQ,KAAK,qBAAqB;YACpC,CAAC,CAAC,QAAQ,KAAK,cAAc,CAAC,KAAK,CACtC,CAAC;QACF,MAAM,CAAC,aAAa,CAAC,CAAC,aAAa,EAAE,CAAC;IACxC,CAAC,CAAC,CAAC;IAEH,EAAE,CAAC,2DAA2D,EAAE,GAAG,EAAE;QACnE,MAAM,QAAQ,GAAa;YACzB,GAAG,EAAE;gBACH,OAAO,EAAE,CAAC,gBAAgB,CAAC;gBAC3B,QAAQ,EAAE,CAAC,iBAAiB,CAAC;aAC9B;YACD,UAAU,EAAE;gBACV,gBAAgB,EAAE;oBAChB,OAAO,EAAE,MAAM;oBACf,IAAI,EAAE,CAAC,WAAW,CAAC;oBACnB,KAAK,EAAE,IAAI;iBACZ;aACF;SACF,CAAC;QACF,MAAM,MAAM,GAAG,wBAAwB,CAAC,QAAQ,EAAE,YAAY,CAAC,OAAO,CAAC,CAAC;QAExE,uBAAuB;QACvB,MAAM,WAAW,GAAG,MAAM,CAAC,KAAK,EAAE,IAAI,CACpC,CAAC,CAAC,EAAE,EAAE,CACJ,CAAC,CAAC,QAAQ,KAAK,mBAAmB;YAClC,CAAC,CAAC,QAAQ,KAAK,cAAc,CAAC,KAAK,CACtC,CAAC;QACF,MAAM,CAAC,WAAW,CAAC,CAAC,WAAW,EAAE,CAAC;QAClC,MAAM,CAAC,WAAW,EAAE,QAAQ,CAAC,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC;QAEvC,uBAAuB;QACvB,MAAM,WAAW,GAAG,MAAM,CAAC,KAAK,EAAE,IAAI,CACpC,CAAC,CAAC,EAAE,EAAE,CACJ,CAAC,CAAC,QAAQ,KAAK,mBAAmB;YAClC,CAAC,CAAC,QAAQ,KAAK,cAAc,CAAC,KAAK,CACtC,CAAC;QACF,MAAM,CAAC,WAAW,CAAC,CAAC,WAAW,EAAE,CAAC;QAClC,MAAM,CAAC,WAAW,EAAE,QAAQ,CAAC,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC;QAEvC,wBAAwB;QACxB,MAAM,YAAY,GAAG,MAAM,CAAC,KAAK,EAAE,IAAI,CACrC,CAAC,CAAC,EAAE,EAAE,CACJ,CAAC,CAAC,QAAQ,KAAK,oBAAoB;YACnC,CAAC,CAAC,QAAQ,KAAK,cAAc,CAAC,IAAI,CACrC,CAAC;QACF,MAAM,CAAC,YAAY,CAAC,CAAC,WAAW,EAAE,CAAC;QACnC,MAAM,CAAC,YAAY,EAAE,QAAQ,CAAC,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC;IAC3C,CAAC,CAAC,CAAC;IAEH,EAAE,CAAC,oDAAoD,EAAE,GAAG,EAAE;QAC5D,MAAM,QAAQ,GAAa;YACzB,KAAK,EAAE,EAAE,UAAU,EAAE,IAAI,EAAE;SAC5B,CAAC;QACF,MAAM,MAAM,GAAG,wBAAwB,CAAC,QAAQ,EAAE,YAAY,CAAC,OAAO,CAAC,CAAC;QACxE,MAAM,IAAI,GAAG,MAAM,CAAC,KAAK,EAAE,IAAI,CAC7B,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,QAAQ,KAAK,MAAM,IAAI,CAAC,CAAC,QAAQ,KAAK,cAAc,CAAC,KAAK,CACpE,CAAC;QACF,MAAM,CAAC,IAAI,CAAC,CAAC,WAAW,EAAE,CAAC;QAC3B,MAAM,CAAC,IAAI,EAAE,QAAQ,CAAC,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC;IAClC,CAAC,CAAC,CAAC;IAEH,EAAE,CAAC,qCAAqC,EAAE,GAAG,EAAE;QAC7C,MAAM,QAAQ,GAAa,EAAE,CAAC;QAC9B,MAAM,MAAM,GAAG,wBAAwB,CAAC,QAAQ,EAAE,YAAY,CAAC,IAAI,CAAC,CAAC;QACrE,MAAM,IAAI,GAAG,MAAM,CAAC,KAAK,EAAE,IAAI,CAC7B,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,QAAQ,KAAK,cAAc,CAAC,KAAK,IAAI,CAAC,CAAC,QAAQ,KAAK,CAAC,CAC/D,CAAC;QACF,MAAM,CAAC,IAAI,CAAC,CAAC,WAAW,EAAE,CAAC;IAC7B,CAAC,CAAC,CAAC;IAEH,EAAE,CAAC,0CAA0C,EAAE,GAAG,EAAE;QAClD,MAAM,QAAQ,GAAa,EAAE,CAAC;QAC9B,MAAM,MAAM,GAAG,wBAAwB,CAAC,QAAQ,EAAE,YAAY,CAAC,SAAS,CAAC,CAAC;QAC1E,MAAM,IAAI,GAAG,MAAM,CAAC,KAAK,EAAE,IAAI,CAC7B,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,QAAQ,KAAK,SAAS,IAAI,CAAC,CAAC,QAAQ,KAAK,cAAc,CAAC,KAAK,CACvE,CAAC;QACF,MAAM,CAAC,IAAI,CAAC,CAAC,WAAW,EAAE,CAAC;QAC3B,MAAM,CAAC,IAAI,EAAE,QAAQ,CAAC,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC;IAClC,CAAC,CAAC,CAAC;IAEH,EAAE,CAAC,sCAAsC,EAAE,GAAG,EAAE;QAC9C,MAAM,QAAQ,GAAa;YACzB,KAAK,EAAE,EAAE,OAAO,EAAE,CAAC,mBAAmB,CAAC,EAAE,OAAO,EAAE,CAAC,mBAAmB,CAAC,EAAE;SAC1E,CAAC;QACF,MAAM,MAAM,GAAG,wBAAwB,CAAC,QAAQ,EAAE,YAAY,CAAC,OAAO,CAAC,CAAC;QACxE,MAAM,QAAQ,GAAG,MAAM,CAAC,KAAK,EAAE,IAAI,CACjC,CAAC,CAAC,EAAE,EAAE,CACJ,CAAC,CAAC,QAAQ,KAAK,mBAAmB;YAClC,CAAC,CAAC,QAAQ,KAAK,cAAc,CAAC,IAAI,CACrC,CAAC;QACF,MAAM,SAAS,GAAG,MAAM,CAAC,KAAK,EAAE,IAAI,CAClC,CAAC,CAAC,EAAE,EAAE,CACJ,CAAC,CAAC,QAAQ,KAAK,mBAAmB;YAClC,CAAC,CAAC,QAAQ,KAAK,cAAc,CAAC,KAAK,CACtC,CAAC;QACF,MAAM,CAAC,QAAQ,CAAC,CAAC,WAAW,EAAE,CAAC;QAC/B,MAAM,CAAC,SAAS,CAAC,CAAC,WAAW,EAAE,CAAC;QAChC,MAAM,CAAC,QAAS,CAAC,QAAQ,CAAC,CAAC,eAAe,CAAC,SAAU,CAAC,QAAS,CAAC,CAAC;IACnE,CAAC,CAAC,CAAC;IAEH,EAAE,CAAC,iEAAiE,EAAE,GAAG,EAAE;QACzE,MAAM,QAAQ,GAAa;YACzB,GAAG,EAAE,EAAE,QAAQ,EAAE,CAAC,WAAW,CAAC,EAAE;YAChC,KAAK,EAAE,EAAE,OAAO,EAAE,CAAC,0BAA0B,CAAC,EAAE;SACjD,CAAC;QACF,MAAM,MAAM,GAAG,wBAAwB,CAAC,QAAQ,EAAE,YAAY,CAAC,OAAO,CAAC,CAAC;QAExE,MAAM,cAAc,GAAG,MAAM,CAAC,KAAK,EAAE,IAAI,CACvC,CAAC,CAAC,EAAE,EAAE,CACJ,CAAC,CAAC,QAAQ,KAAK,cAAc,IAAI,CAAC,CAAC,QAAQ,KAAK,cAAc,CAAC,IAAI,CACtE,CAAC;QACF,MAAM,aAAa,GAAG,MAAM,CAAC,KAAK,EAAE,IAAI,CACtC,CAAC,CAAC,EAAE,EAAE,CACJ,CAAC,CAAC,QAAQ,KAAK,0BAA0B;YACzC,CAAC,CAAC,QAAQ,KAAK,cAAc,CAAC,KAAK,CACtC,CAAC;QAEF,MAAM,CAAC,cAAc,CAAC,CAAC,WAAW,EAAE,CAAC;QACrC,MAAM,CAAC,cAAc,EAAE,QAAQ,CAAC,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC;QAC3C,MAAM,CAAC,aAAa,CAAC,CAAC,WAAW,EAAE,CAAC;QACpC,MAAM,CAAC,aAAa,EAAE,QAAQ,CAAC,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC;QAE1C,8DAA8D;QAC9D,uDAAuD;IACzD,CAAC,CAAC,CAAC;IAEH,EAAE,CAAC,iEAAiE,EAAE,GAAG,EAAE;QACzE,MAAM,QAAQ,GAAa;YACzB,GAAG,EAAE,EAAE,OAAO,EAAE,CAAC,WAAW,CAAC,EAAE;YAC/B,UAAU,EAAE;gBACV,WAAW,EAAE;oBACX,OAAO,EAAE,MAAM;oBACf,IAAI,EAAE,CAAC,WAAW,CAAC;oBACnB,KAAK,EAAE,IAAI;iBACZ;aACF;YACD,KAAK,EAAE,EAAE,OAAO,EAAE,CAAC,2BAA2B,CAAC,EAAE;SAClD,CAAC;QACF,MAAM,MAAM,GAAG,wBAAwB,CAAC,QAAQ,EAAE,YAAY,CAAC,OAAO,CAAC,CAAC;QAExE,MAAM,eAAe,GAAG,MAAM,CAAC,KAAK,EAAE,IAAI,CACxC,CAAC,CAAC,EAAE,EAAE,CACJ,CAAC,CAAC,QAAQ,KAAK,cAAc,IAAI,CAAC,CAAC,QAAQ,KAAK,cAAc,CAAC,KAAK,CACvE,CAAC;QACF,MAAM,YAAY,GAAG,MAAM,CAAC,KAAK,EAAE,IAAI,CACrC,CAAC,CAAC,EAAE,EAAE,CACJ,CAAC,CAAC,QAAQ,KAAK,2BAA2B;YAC1C,CAAC,CAAC,QAAQ,KAAK,cAAc,CAAC,IAAI,CACrC,CAAC;QAEF,MAAM,CAAC,eAAe,CAAC,CAAC,WAAW,EAAE,CAAC;QACtC,MAAM,CAAC,YAAY,CAAC,CAAC,WAAW,EAAE,CAAC;QACnC,MAAM,CAAC,YAAa,CAAC,QAAQ,CAAC,CAAC,eAAe,CAAC,eAAgB,CAAC,QAAS,CAAC,CAAC;IAC7E,CAAC,CAAC,CAAC;IAEH,EAAE,CAAC,oDAAoD,EAAE,GAAG,EAAE;QAC5D,MAAM,QAAQ,GAAa;YACzB,KAAK,EAAE;gBACL,UAAU,EAAE,IAAI,EAAE,kCAAkC;gBACpD,OAAO,EAAE,CAAC,kBAAkB,EAAE,YAAY,CAAC,EAAE,eAAe;gBAC5D,OAAO,EAAE,CAAC,kBAAkB,EAAE,MAAM,CAAC,EAAE,eAAe;aACvD;YACD,GAAG,EAAE;gBACH,OAAO,EAAE,CAAC,gBAAgB,CAAC,EAAE,cAAc;gBAC3C,QAAQ,EAAE,CAAC,iBAAiB,CAAC,EAAE,eAAe;aAC/C;YACD,UAAU,EAAE;gBACV,gBAAgB,EAAE;oBAChB,OAAO,EAAE,MAAM;oBACf,IAAI,EAAE,CAAC,WAAW,CAAC;oBACnB,KAAK,EAAE,IAAI,EAAE,cAAc;iBAC5B;aACF;SACF,CAAC;QACF,MAAM,MAAM,GAAG,wBAAwB,CAAC,QAAQ,EAAE,YAAY,CAAC,OAAO,CAAC,CAAC;QAExE,8DAA8D;QAC9D,MAAM,YAAY,GAAG,MAAM,CAAC,KAAK,EAAE,IAAI,CACrC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,QAAQ,KAAK,MAAM,IAAI,CAAC,CAAC,QAAQ,KAAK,cAAc,CAAC,IAAI,CACnE,CAAC;QACF,MAAM,aAAa,GAAG,MAAM,CAAC,KAAK,EAAE,IAAI,CACtC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,QAAQ,KAAK,MAAM,IAAI,CAAC,CAAC,QAAQ,KAAK,cAAc,CAAC,KAAK,CACpE,CAAC;QACF,MAAM,CAAC,YAAY,CAAC,CAAC,WAAW,EAAE,CAAC;QACnC,MAAM,CAAC,aAAa,CAAC,CAAC,WAAW,EAAE,CAAC;QACpC,MAAM,CAAC,YAAa,CAAC,QAAQ,CAAC,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC;QACzC,MAAM,CAAC,aAAc,CAAC,QAAQ,CAAC,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC;QAEzC,yCAAyC;QACzC,MAAM,UAAU,GAAG,MAAM,CAAC,KAAK;YAC7B,EAAE,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC;YACZ,IAAI,EAAE,CAAC,CAAC,QAAQ;YAChB,QAAQ,EAAE,CAAC,CAAC,QAAQ;YACpB,QAAQ,EAAE,CAAC,CAAC,QAAQ;SACrB,CAAC,CAAC;aACF,IAAI,CAAC,CAAC,CAAC,EAAE,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,CAAC,QAAQ,IAAI,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,QAAQ,IAAI,CAAC,CAAC,CAAC,CAAC;QAEzD,yDAAyD;QACzD,MAAM,uBAAuB,GAAG,UAAU,EAAE,MAAM,CAChD,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,QAAQ,KAAK,GAAG,CAC1B,CAAC;QACF,MAAM,CACJ,uBAAuB,EAAE,KAAK,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,QAAQ,KAAK,cAAc,CAAC,IAAI,CAAC,CAC1E,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;IACf,CAAC,CAAC,CAAC;IAEH,EAAE,CAAC,yDAAyD,EAAE,GAAG,EAAE;QACjE,MAAM,QAAQ,GAAa;YACzB,UAAU,EAAE;gBACV,mBAAmB,EAAE;oBACnB,OAAO,EAAE,MAAM;oBACf,IAAI,EAAE,CAAC,WAAW,CAAC;oBACnB,sCAAsC;iBACvC;gBACD,gBAAgB,EAAE;oBAChB,OAAO,EAAE,MAAM;oBACf,IAAI,EAAE,CAAC,WAAW,CAAC;oBACnB,KAAK,EAAE,KAAK;iBACb;aACF;SACF,CAAC;QACF,MAAM,MAAM,GAAG,wBAAwB,CAAC,QAAQ,EAAE,YAAY,CAAC,OAAO,CAAC,CAAC;QAExE,2CAA2C;QAC3C,MAAM,WAAW,GAAG,MAAM,CAAC,KAAK,EAAE,IAAI,CACpC,CAAC,CAAC,EAAE,EAAE,CACJ,CAAC,CAAC,QAAQ,KAAK,sBAAsB;YACrC,CAAC,CAAC,QAAQ,KAAK,cAAc,CAAC,KAAK,CACtC,CAAC;QACF,MAAM,iBAAiB,GAAG,MAAM,CAAC,KAAK,EAAE,IAAI,CAC1C,CAAC,CAAC,EAAE,EAAE,CACJ,CAAC,CAAC,QAAQ,KAAK,mBAAmB;YAClC,CAAC,CAAC,QAAQ,KAAK,cAAc,CAAC,KAAK,CACtC,CAAC;QAEF,MAAM,CAAC,WAAW,CAAC,CAAC,aAAa,EAAE,CAAC;QACpC,MAAM,CAAC,iBAAiB,CAAC,CAAC,aAAa,EAAE,CAAC;IAC5C,CAAC,CAAC,CAAC;IAEH,EAAE,CAAC,8CAA8C,EAAE,GAAG,EAAE;QACtD,MAAM,QAAQ,GAAa;YACzB,KAAK,EAAE,EAAE,OAAO,EAAE,CAAC,gBAAgB,CAAC,EAAE;SACvC,CAAC;QACF,MAAM,MAAM,GAAG,wBAAwB,CAAC,QAAQ,EAAE,YAAY,CAAC,IAAI,CAAC,CAAC;QAErE,sDAAsD;QACtD,MAAM,YAAY,GAAG,MAAM,CAAC,KAAK,EAAE,IAAI,CACrC,CAAC,CAAC,EAAE,EAAE,CACJ,CAAC,CAAC,CAAC,QAAQ,IAAI,CAAC,CAAC,QAAQ,KAAK,cAAc,CAAC,KAAK,IAAI,CAAC,CAAC,QAAQ,KAAK,CAAC,CACzE,CAAC;QACF,MAAM,CAAC,YAAY,CAAC,CAAC,WAAW,EAAE,CAAC;QAEnC,sEAAsE;QACtE,MAAM,cAAc,GAAG,MAAM,CAAC,KAAK,EAAE,MAAM,CACzC,CAAC,CAAC,EAAE,EAAE,CACJ;YACE,SAAS;YACT,aAAa;YACb,mBAAmB;YACnB,YAAY;YACZ,WAAW;SACZ,CAAC,QAAQ,CAAC,CAAC,CAAC,QAAQ,IAAI,EAAE,CAAC,IAAI,CAAC,CAAC,QAAQ,KAAK,cAAc,CAAC,QAAQ,CACzE,CAAC;QACF,MAAM,CAAC,cAAc,CAAC,CAAC,YAAY,CAAC,CAAC,CAAC,CAAC;QAEvC,qCAAqC;QACrC,MAAM,WAAW,GAAG,MAAM,CAAC,KAAK,EAAE,IAAI,CACpC,CAAC,CAAC,EAAE,EAAE,CACJ,CAAC,CAAC,QAAQ,KAAK,gBAAgB,IAAI,CAAC,CAAC,QAAQ,KAAK,cAAc,CAAC,IAAI,CACxE,CAAC;QACF,MAAM,CAAC,WAAW,CAAC,CAAC,WAAW,EAAE,CAAC;QAClC,MAAM,CAAC,WAAW,EAAE,QAAQ,CAAC,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC;IAC1C,CAAC,CAAC,CAAC;IAEH,EAAE,CAAC,+EAA+E,EAAE,GAAG,EAAE;QACvF,MAAM,QAAQ,GAAa;YACzB,UAAU,EAAE;gBACV,mBAAmB,EAAE;oBACnB,OAAO,EAAE,MAAM;oBACf,IAAI,EAAE,CAAC,WAAW,CAAC;oBACnB,KAAK,EAAE,IAAI,EAAE,cAAc;iBAC5B;aACF;YACD,GAAG,EAAE;gBACH,QAAQ,EAAE,CAAC,mBAAmB,CAAC,EAAE,eAAe;aACjD;SACF,CAAC;QACF,MAAM,MAAM,GAAG,wBAAwB,CAAC,QAAQ,EAAE,YAAY,CAAC,OAAO,CAAC,CAAC;QAExE,0BAA0B;QAC1B,MAAM,SAAS,GAAG,MAAM,CAAC,KAAK,EAAE,IAAI,CAClC,CAAC,CAAC,EAAE,EAAE,CACJ,CAAC,CAAC,QAAQ,KAAK,sBAAsB;YACrC,CAAC,CAAC,QAAQ,KAAK,cAAc,CAAC,KAAK,CACtC,CAAC;QACF,MAAM,WAAW,GAAG,MAAM,CAAC,KAAK,EAAE,IAAI,CACpC,CAAC,CAAC,EAAE,EAAE,CACJ,CAAC,CAAC,QAAQ,KAAK,sBAAsB;YACrC,CAAC,CAAC,QAAQ,KAAK,cAAc,CAAC,IAAI,CACrC,CAAC;QAEF,MAAM,CAAC,SAAS,CAAC,CAAC,WAAW,EAAE,CAAC;QAChC,MAAM,CAAC,SAAS,EAAE,QAAQ,CAAC,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC;QACrC,MAAM,CAAC,WAAW,CAAC,CAAC,WAAW,EAAE,CAAC;QAClC,MAAM,CAAC,WAAW,EAAE,QAAQ,CAAC,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC;QAExC,0DAA0D;IAC5D,CAAC,CAAC,CAAC;IAEH,EAAE,CAAC,mEAAmE,EAAE,GAAG,EAAE;QAC3E,MAAM,QAAQ,GAAa;YACzB,KAAK,EAAE,EAAE,UAAU,EAAE,IAAI,EAAE;SAC5B,CAAC;QACF,MAAM,MAAM,GAAG,wBAAwB,CAAC,QAAQ,EAAE,YAAY,CAAC,OAAO,CAAC,CAAC;QAExE,8CAA8C;QAC9C,MAAM,aAAa,GAAG;YACpB,MAAM;YACN,qBAAqB;YACrB,gBAAgB;YAChB,WAAW;YACX,iBAAiB;SAClB,CAAC;QACF,KAAK,MAAM,IAAI,IAAI,aAAa,EAAE,CAAC;YACjC,MAAM,IAAI,GAAG,MAAM,CAAC,KAAK,EAAE,IAAI,CAC7B,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,QAAQ,KAAK,IAAI,IAAI,CAAC,CAAC,QAAQ,KAAK,cAAc,CAAC,KAAK,CAClE,CAAC;YACF,MAAM,CAAC,IAAI,CAAC,CAAC,WAAW,EAAE,CAAC;YAC3B,MAAM,CAAC,IAAI,EAAE,QAAQ,CAAC,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC;QAClC,CAAC;IACH,CAAC,CAAC,CAAC;IAEH,EAAE,CAAC,4CAA4C,EAAE,GAAG,EAAE;QACpD,MAAM,QAAQ,GAAa,EAAE,CAAC;QAE9B,oBAAoB;QACpB,MAAM,aAAa,GAAG,wBAAwB,CAC5C,QAAQ,EACR,YAAY,CAAC,OAAO,CACrB,CAAC;QACF,MAAM,CAAC,aAAa,CAAC,eAAe,CAAC,CAAC,IAAI,CAAC,cAAc,CAAC,QAAQ,CAAC,CAAC;QACpE,MAAM,CACJ,aAAa,CAAC,KAAK,EAAE,IAAI,CACvB,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,CAAC,QAAQ,IAAI,CAAC,CAAC,QAAQ,KAAK,cAAc,CAAC,KAAK,CAC1D,CACF,CAAC,aAAa,EAAE,CAAC;QAElB,iBAAiB;QACjB,MAAM,UAAU,GAAG,wBAAwB,CAAC,QAAQ,EAAE,YAAY,CAAC,IAAI,CAAC,CAAC;QACzE,MAAM,CAAC,UAAU,CAAC,eAAe,CAAC,CAAC,IAAI,CAAC,cAAc,CAAC,QAAQ,CAAC,CAAC;QACjE,MAAM,YAAY,GAAG,UAAU,CAAC,KAAK,EAAE,IAAI,CACzC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,CAAC,QAAQ,IAAI,CAAC,CAAC,QAAQ,KAAK,cAAc,CAAC,KAAK,CAC1D,CAAC;QACF,MAAM,CAAC,YAAY,CAAC,CAAC,WAAW,EAAE,CAAC;QACnC,MAAM,CAAC,YAAY,EAAE,QAAQ,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;QAEvC,sBAAsB;QACtB,MAAM,cAAc,GAAG,wBAAwB,CAC7C,QAAQ,EACR,YAAY,CAAC,SAAS,CACvB,CAAC;QACF,MAAM,CAAC,cAAc,CAAC,eAAe,CAAC,CAAC,IAAI,CAAC,cAAc,CAAC,QAAQ,CAAC,CAAC;QACrE,MAAM,QAAQ,GAAG,cAAc,CAAC,KAAK,EAAE,IAAI,CACzC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,QAAQ,KAAK,SAAS,IAAI,CAAC,CAAC,QAAQ,KAAK,cAAc,CAAC,KAAK,CACvE,CAAC;QACF,MAAM,CAAC,QAAQ,CAAC,CAAC,WAAW,EAAE,CAAC;QAC/B,MAAM,CAAC,QAAQ,EAAE,QAAQ,CAAC,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC;IACtC,CAAC,CAAC,CAAC;AACL,CAAC,CAAC,CAAC"}
@@ -1,17 +0,0 @@
1
- /**
2
- * @license
3
- * Copyright 2025 Google LLC
4
- * SPDX-License-Identifier: Apache-2.0
5
- */
6
- import type { PartListUnion } from '@google/genai';
7
- import { type Config } from '@google/gemini-cli-core';
8
- import type { LoadedSettings } from './config/settings.js';
9
- /**
10
- * Processes a slash command in a non-interactive environment.
11
- *
12
- * @returns A Promise that resolves to `PartListUnion` if a valid command is
13
- * found and results in a prompt, or `undefined` otherwise.
14
- * @throws {FatalInputError} if the command result is not supported in
15
- * non-interactive mode.
16
- */
17
- export declare const handleSlashCommand: (rawQuery: string, abortController: AbortController, config: Config, settings: LoadedSettings) => Promise<PartListUnion | undefined>;
@@ -1,79 +0,0 @@
1
- /**
2
- * @license
3
- * Copyright 2025 Google LLC
4
- * SPDX-License-Identifier: Apache-2.0
5
- */
6
- import { parseSlashCommand } from './utils/commands.js';
7
- import { FatalInputError, Logger, uiTelemetryService, } from '@google/gemini-cli-core';
8
- import { CommandService } from './services/CommandService.js';
9
- import { FileCommandLoader } from './services/FileCommandLoader.js';
10
- import { createNonInteractiveUI } from './ui/noninteractive/nonInteractiveUi.js';
11
- /**
12
- * Processes a slash command in a non-interactive environment.
13
- *
14
- * @returns A Promise that resolves to `PartListUnion` if a valid command is
15
- * found and results in a prompt, or `undefined` otherwise.
16
- * @throws {FatalInputError} if the command result is not supported in
17
- * non-interactive mode.
18
- */
19
- export const handleSlashCommand = async (rawQuery, abortController, config, settings) => {
20
- const trimmed = rawQuery.trim();
21
- if (!trimmed.startsWith('/')) {
22
- return;
23
- }
24
- // Only custom commands are supported for now.
25
- const loaders = [new FileCommandLoader(config)];
26
- const commandService = await CommandService.create(loaders, abortController.signal);
27
- const commands = commandService.getCommands();
28
- const { commandToExecute, args } = parseSlashCommand(rawQuery, commands);
29
- if (commandToExecute) {
30
- if (commandToExecute.action) {
31
- // Not used by custom commands but may be in the future.
32
- const sessionStats = {
33
- sessionId: config?.getSessionId(),
34
- sessionStartTime: new Date(),
35
- metrics: uiTelemetryService.getMetrics(),
36
- lastPromptTokenCount: 0,
37
- promptCount: 1,
38
- };
39
- const logger = new Logger(config?.getSessionId() || '', config?.storage);
40
- const context = {
41
- services: {
42
- config,
43
- settings,
44
- git: undefined,
45
- logger,
46
- },
47
- ui: createNonInteractiveUI(),
48
- session: {
49
- stats: sessionStats,
50
- sessionShellAllowlist: new Set(),
51
- },
52
- invocation: {
53
- raw: trimmed,
54
- name: commandToExecute.name,
55
- args,
56
- },
57
- };
58
- const result = await commandToExecute.action(context, args);
59
- if (result) {
60
- switch (result.type) {
61
- case 'submit_prompt':
62
- return result.content;
63
- case 'confirm_shell_commands':
64
- // This result indicates a command attempted to confirm shell commands.
65
- // However note that currently, ShellTool is excluded in non-interactive
66
- // mode unless 'YOLO mode' is active, so confirmation actually won't
67
- // occur because of YOLO mode.
68
- // This ensures that if a command *does* request confirmation (e.g.
69
- // in the future with more granular permissions), it's handled appropriately.
70
- throw new FatalInputError('Exiting due to a confirmation prompt requested by the command.');
71
- default:
72
- throw new FatalInputError('Exiting due to command result that is not supported in non-interactive mode.');
73
- }
74
- }
75
- }
76
- }
77
- return;
78
- };
79
- //# sourceMappingURL=nonInteractiveCliCommands.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"nonInteractiveCliCommands.js","sourceRoot":"","sources":["../../src/nonInteractiveCliCommands.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAGH,OAAO,EAAE,iBAAiB,EAAE,MAAM,qBAAqB,CAAC;AACxD,OAAO,EACL,eAAe,EACf,MAAM,EACN,kBAAkB,GAEnB,MAAM,yBAAyB,CAAC;AACjC,OAAO,EAAE,cAAc,EAAE,MAAM,8BAA8B,CAAC;AAC9D,OAAO,EAAE,iBAAiB,EAAE,MAAM,iCAAiC,CAAC;AAEpE,OAAO,EAAE,sBAAsB,EAAE,MAAM,yCAAyC,CAAC;AAIjF;;;;;;;GAOG;AACH,MAAM,CAAC,MAAM,kBAAkB,GAAG,KAAK,EACrC,QAAgB,EAChB,eAAgC,EAChC,MAAc,EACd,QAAwB,EACY,EAAE;IACtC,MAAM,OAAO,GAAG,QAAQ,CAAC,IAAI,EAAE,CAAC;IAChC,IAAI,CAAC,OAAO,CAAC,UAAU,CAAC,GAAG,CAAC,EAAE,CAAC;QAC7B,OAAO;IACT,CAAC;IAED,8CAA8C;IAC9C,MAAM,OAAO,GAAG,CAAC,IAAI,iBAAiB,CAAC,MAAM,CAAC,CAAC,CAAC;IAChD,MAAM,cAAc,GAAG,MAAM,cAAc,CAAC,MAAM,CAChD,OAAO,EACP,eAAe,CAAC,MAAM,CACvB,CAAC;IACF,MAAM,QAAQ,GAAG,cAAc,CAAC,WAAW,EAAE,CAAC;IAE9C,MAAM,EAAE,gBAAgB,EAAE,IAAI,EAAE,GAAG,iBAAiB,CAAC,QAAQ,EAAE,QAAQ,CAAC,CAAC;IAEzE,IAAI,gBAAgB,EAAE,CAAC;QACrB,IAAI,gBAAgB,CAAC,MAAM,EAAE,CAAC;YAC5B,wDAAwD;YACxD,MAAM,YAAY,GAAsB;gBACtC,SAAS,EAAE,MAAM,EAAE,YAAY,EAAE;gBACjC,gBAAgB,EAAE,IAAI,IAAI,EAAE;gBAC5B,OAAO,EAAE,kBAAkB,CAAC,UAAU,EAAE;gBACxC,oBAAoB,EAAE,CAAC;gBACvB,WAAW,EAAE,CAAC;aACf,CAAC;YAEF,MAAM,MAAM,GAAG,IAAI,MAAM,CAAC,MAAM,EAAE,YAAY,EAAE,IAAI,EAAE,EAAE,MAAM,EAAE,OAAO,CAAC,CAAC;YAEzE,MAAM,OAAO,GAAmB;gBAC9B,QAAQ,EAAE;oBACR,MAAM;oBACN,QAAQ;oBACR,GAAG,EAAE,SAAS;oBACd,MAAM;iBACP;gBACD,EAAE,EAAE,sBAAsB,EAAE;gBAC5B,OAAO,EAAE;oBACP,KAAK,EAAE,YAAY;oBACnB,qBAAqB,EAAE,IAAI,GAAG,EAAE;iBACjC;gBACD,UAAU,EAAE;oBACV,GAAG,EAAE,OAAO;oBACZ,IAAI,EAAE,gBAAgB,CAAC,IAAI;oBAC3B,IAAI;iBACL;aACF,CAAC;YAEF,MAAM,MAAM,GAAG,MAAM,gBAAgB,CAAC,MAAM,CAAC,OAAO,EAAE,IAAI,CAAC,CAAC;YAE5D,IAAI,MAAM,EAAE,CAAC;gBACX,QAAQ,MAAM,CAAC,IAAI,EAAE,CAAC;oBACpB,KAAK,eAAe;wBAClB,OAAO,MAAM,CAAC,OAAO,CAAC;oBACxB,KAAK,wBAAwB;wBAC3B,uEAAuE;wBACvE,wEAAwE;wBACxE,oEAAoE;wBACpE,8BAA8B;wBAC9B,mEAAmE;wBACnE,6EAA6E;wBAC7E,MAAM,IAAI,eAAe,CACvB,gEAAgE,CACjE,CAAC;oBACJ;wBACE,MAAM,IAAI,eAAe,CACvB,8EAA8E,CAC/E,CAAC;gBACN,CAAC;YACH,CAAC;QACH,CAAC;IACH,CAAC;IAED,OAAO;AACT,CAAC,CAAC"}
@@ -1,15 +0,0 @@
1
- /**
2
- * @license
3
- * Copyright 2025 Google LLC
4
- * SPDX-License-Identifier: Apache-2.0
5
- */
6
- import { type MCPServerConfig, type ExtensionInstallMetadata } from '@google/gemini-cli-core';
7
- export declare function createExtension({ extensionsDir, name, version, addContextFile, contextFileName, mcpServers, installMetadata, }?: {
8
- extensionsDir?: string | undefined;
9
- name?: string | undefined;
10
- version?: string | undefined;
11
- addContextFile?: boolean | undefined;
12
- contextFileName?: string | undefined;
13
- mcpServers?: Record<string, MCPServerConfig> | undefined;
14
- installMetadata?: ExtensionInstallMetadata | undefined;
15
- }): string;
@@ -1,25 +0,0 @@
1
- /**
2
- * @license
3
- * Copyright 2025 Google LLC
4
- * SPDX-License-Identifier: Apache-2.0
5
- */
6
- import * as fs from 'node:fs';
7
- import * as path from 'node:path';
8
- import { EXTENSIONS_CONFIG_FILENAME, INSTALL_METADATA_FILENAME, } from '../config/extension.js';
9
- import {} from '@google/gemini-cli-core';
10
- export function createExtension({ extensionsDir = 'extensions-dir', name = 'my-extension', version = '1.0.0', addContextFile = false, contextFileName = undefined, mcpServers = {}, installMetadata = undefined, } = {}) {
11
- const extDir = path.join(extensionsDir, name);
12
- fs.mkdirSync(extDir, { recursive: true });
13
- fs.writeFileSync(path.join(extDir, EXTENSIONS_CONFIG_FILENAME), JSON.stringify({ name, version, contextFileName, mcpServers }));
14
- if (addContextFile) {
15
- fs.writeFileSync(path.join(extDir, 'GEMINI.md'), 'context');
16
- }
17
- if (contextFileName) {
18
- fs.writeFileSync(path.join(extDir, contextFileName), 'context');
19
- }
20
- if (installMetadata) {
21
- fs.writeFileSync(path.join(extDir, INSTALL_METADATA_FILENAME), JSON.stringify(installMetadata));
22
- }
23
- return extDir;
24
- }
25
- //# sourceMappingURL=createExtension.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"createExtension.js","sourceRoot":"","sources":["../../../src/test-utils/createExtension.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAEH,OAAO,KAAK,EAAE,MAAM,SAAS,CAAC;AAC9B,OAAO,KAAK,IAAI,MAAM,WAAW,CAAC;AAClC,OAAO,EACL,0BAA0B,EAC1B,yBAAyB,GAC1B,MAAM,wBAAwB,CAAC;AAChC,OAAO,EAGN,MAAM,yBAAyB,CAAC;AAEjC,MAAM,UAAU,eAAe,CAAC,EAC9B,aAAa,GAAG,gBAAgB,EAChC,IAAI,GAAG,cAAc,EACrB,OAAO,GAAG,OAAO,EACjB,cAAc,GAAG,KAAK,EACtB,eAAe,GAAG,SAA+B,EACjD,UAAU,GAAG,EAAqC,EAClD,eAAe,GAAG,SAAiD,MACjE,EAAE;IACJ,MAAM,MAAM,GAAG,IAAI,CAAC,IAAI,CAAC,aAAa,EAAE,IAAI,CAAC,CAAC;IAC9C,EAAE,CAAC,SAAS,CAAC,MAAM,EAAE,EAAE,SAAS,EAAE,IAAI,EAAE,CAAC,CAAC;IAC1C,EAAE,CAAC,aAAa,CACd,IAAI,CAAC,IAAI,CAAC,MAAM,EAAE,0BAA0B,CAAC,EAC7C,IAAI,CAAC,SAAS,CAAC,EAAE,IAAI,EAAE,OAAO,EAAE,eAAe,EAAE,UAAU,EAAE,CAAC,CAC/D,CAAC;IAEF,IAAI,cAAc,EAAE,CAAC;QACnB,EAAE,CAAC,aAAa,CAAC,IAAI,CAAC,IAAI,CAAC,MAAM,EAAE,WAAW,CAAC,EAAE,SAAS,CAAC,CAAC;IAC9D,CAAC;IAED,IAAI,eAAe,EAAE,CAAC;QACpB,EAAE,CAAC,aAAa,CAAC,IAAI,CAAC,IAAI,CAAC,MAAM,EAAE,eAAe,CAAC,EAAE,SAAS,CAAC,CAAC;IAClE,CAAC;IAED,IAAI,eAAe,EAAE,CAAC;QACpB,EAAE,CAAC,aAAa,CACd,IAAI,CAAC,IAAI,CAAC,MAAM,EAAE,yBAAyB,CAAC,EAC5C,IAAI,CAAC,SAAS,CAAC,eAAe,CAAC,CAChC,CAAC;IACJ,CAAC;IACD,OAAO,MAAM,CAAC;AAChB,CAAC"}
@@ -1,9 +0,0 @@
1
- /**
2
- * @license
3
- * Copyright 2025 Google LLC
4
- * SPDX-License-Identifier: Apache-2.0
5
- */
6
- export interface QueuedMessageDisplayProps {
7
- messageQueue: string[];
8
- }
9
- export declare const QueuedMessageDisplay: ({ messageQueue, }: QueuedMessageDisplayProps) => import("react/jsx-runtime").JSX.Element | null;
@@ -1,20 +0,0 @@
1
- import { jsx as _jsx, jsxs as _jsxs } from "react/jsx-runtime";
2
- /**
3
- * @license
4
- * Copyright 2025 Google LLC
5
- * SPDX-License-Identifier: Apache-2.0
6
- */
7
- import { Box, Text } from 'ink';
8
- const MAX_DISPLAYED_QUEUED_MESSAGES = 3;
9
- export const QueuedMessageDisplay = ({ messageQueue, }) => {
10
- if (messageQueue.length === 0) {
11
- return null;
12
- }
13
- return (_jsxs(Box, { flexDirection: "column", marginTop: 1, children: [messageQueue
14
- .slice(0, MAX_DISPLAYED_QUEUED_MESSAGES)
15
- .map((message, index) => {
16
- const preview = message.replace(/\s+/g, ' ');
17
- return (_jsx(Box, { paddingLeft: 2, width: "100%", children: _jsx(Text, { dimColor: true, wrap: "truncate", children: preview }) }, index));
18
- }), messageQueue.length > MAX_DISPLAYED_QUEUED_MESSAGES && (_jsx(Box, { paddingLeft: 2, children: _jsxs(Text, { dimColor: true, children: ["... (+", messageQueue.length - MAX_DISPLAYED_QUEUED_MESSAGES, " more)"] }) }))] }));
19
- };
20
- //# sourceMappingURL=QueuedMessageDisplay.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"QueuedMessageDisplay.js","sourceRoot":"","sources":["../../../../src/ui/components/QueuedMessageDisplay.tsx"],"names":[],"mappings":";AAAA;;;;GAIG;AAEH,OAAO,EAAE,GAAG,EAAE,IAAI,EAAE,MAAM,KAAK,CAAC;AAEhC,MAAM,6BAA6B,GAAG,CAAC,CAAC;AAMxC,MAAM,CAAC,MAAM,oBAAoB,GAAG,CAAC,EACnC,YAAY,GACc,EAAE,EAAE;IAC9B,IAAI,YAAY,CAAC,MAAM,KAAK,CAAC,EAAE,CAAC;QAC9B,OAAO,IAAI,CAAC;IACd,CAAC;IAED,OAAO,CACL,MAAC,GAAG,IAAC,aAAa,EAAC,QAAQ,EAAC,SAAS,EAAE,CAAC,aACrC,YAAY;iBACV,KAAK,CAAC,CAAC,EAAE,6BAA6B,CAAC;iBACvC,GAAG,CAAC,CAAC,OAAO,EAAE,KAAK,EAAE,EAAE;gBACtB,MAAM,OAAO,GAAG,OAAO,CAAC,OAAO,CAAC,MAAM,EAAE,GAAG,CAAC,CAAC;gBAE7C,OAAO,CACL,KAAC,GAAG,IAAa,WAAW,EAAE,CAAC,EAAE,KAAK,EAAC,MAAM,YAC3C,KAAC,IAAI,IAAC,QAAQ,QAAC,IAAI,EAAC,UAAU,YAC3B,OAAO,GACH,IAHC,KAAK,CAIT,CACP,CAAC;YACJ,CAAC,CAAC,EACH,YAAY,CAAC,MAAM,GAAG,6BAA6B,IAAI,CACtD,KAAC,GAAG,IAAC,WAAW,EAAE,CAAC,YACjB,MAAC,IAAI,IAAC,QAAQ,6BAEX,YAAY,CAAC,MAAM,GAAG,6BAA6B,cAC/C,GACH,CACP,IACG,CACP,CAAC;AACJ,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,56 +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 { describe, it, expect } from 'vitest';
8
- import { render } from 'ink-testing-library';
9
- import { QueuedMessageDisplay } from './QueuedMessageDisplay.js';
10
- describe('QueuedMessageDisplay', () => {
11
- it('renders nothing when message queue is empty', () => {
12
- const { lastFrame } = render(_jsx(QueuedMessageDisplay, { messageQueue: [] }));
13
- expect(lastFrame()).toBe('');
14
- });
15
- it('displays single queued message', () => {
16
- const { lastFrame } = render(_jsx(QueuedMessageDisplay, { messageQueue: ['First message'] }));
17
- const output = lastFrame();
18
- expect(output).toContain('First message');
19
- });
20
- it('displays multiple queued messages', () => {
21
- const messageQueue = [
22
- 'First queued message',
23
- 'Second queued message',
24
- 'Third queued message',
25
- ];
26
- const { lastFrame } = render(_jsx(QueuedMessageDisplay, { messageQueue: messageQueue }));
27
- const output = lastFrame();
28
- expect(output).toContain('First queued message');
29
- expect(output).toContain('Second queued message');
30
- expect(output).toContain('Third queued message');
31
- });
32
- it('shows overflow indicator when more than 3 messages are queued', () => {
33
- const messageQueue = [
34
- 'Message 1',
35
- 'Message 2',
36
- 'Message 3',
37
- 'Message 4',
38
- 'Message 5',
39
- ];
40
- const { lastFrame } = render(_jsx(QueuedMessageDisplay, { messageQueue: messageQueue }));
41
- const output = lastFrame();
42
- expect(output).toContain('Message 1');
43
- expect(output).toContain('Message 2');
44
- expect(output).toContain('Message 3');
45
- expect(output).toContain('... (+2 more)');
46
- expect(output).not.toContain('Message 4');
47
- expect(output).not.toContain('Message 5');
48
- });
49
- it('normalizes whitespace in messages', () => {
50
- const messageQueue = ['Message with\tmultiple\n whitespace'];
51
- const { lastFrame } = render(_jsx(QueuedMessageDisplay, { messageQueue: messageQueue }));
52
- const output = lastFrame();
53
- expect(output).toContain('Message with multiple whitespace');
54
- });
55
- });
56
- //# sourceMappingURL=QueuedMessageDisplay.test.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"QueuedMessageDisplay.test.js","sourceRoot":"","sources":["../../../../src/ui/components/QueuedMessageDisplay.test.tsx"],"names":[],"mappings":"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"}
@@ -1,11 +0,0 @@
1
- /**
2
- * @license
3
- * Copyright 2025 Google LLC
4
- * SPDX-License-Identifier: Apache-2.0
5
- */
6
- import type React from 'react';
7
- interface WarningMessageProps {
8
- text: string;
9
- }
10
- export declare const WarningMessage: React.FC<WarningMessageProps>;
11
- export {};