@google/gemini-cli-core 0.13.0-nightly.20251102.d7243fb8 → 0.13.0-preview.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (204) hide show
  1. package/dist/google-gemini-cli-core-0.13.0-nightly.20251031.c89bc30d.tgz +0 -0
  2. package/dist/index.d.ts +2 -0
  3. package/dist/index.js +2 -0
  4. package/dist/index.js.map +1 -1
  5. package/dist/src/agents/executor.d.ts +19 -0
  6. package/dist/src/agents/executor.js +226 -32
  7. package/dist/src/agents/executor.js.map +1 -1
  8. package/dist/src/agents/executor.test.js +335 -9
  9. package/dist/src/agents/executor.test.js.map +1 -1
  10. package/dist/src/agents/types.d.ts +2 -1
  11. package/dist/src/agents/types.js +1 -0
  12. package/dist/src/agents/types.js.map +1 -1
  13. package/dist/src/code_assist/experiments/client_metadata.d.ts +12 -0
  14. package/dist/src/code_assist/experiments/client_metadata.js +49 -0
  15. package/dist/src/code_assist/experiments/client_metadata.js.map +1 -0
  16. package/dist/src/code_assist/experiments/experiments.d.ts +17 -0
  17. package/dist/src/code_assist/experiments/experiments.js +36 -0
  18. package/dist/src/code_assist/experiments/experiments.js.map +1 -0
  19. package/dist/src/code_assist/experiments/types.d.ts +35 -0
  20. package/dist/src/code_assist/experiments/types.js +7 -0
  21. package/dist/src/code_assist/experiments/types.js.map +1 -0
  22. package/dist/src/code_assist/server.d.ts +3 -1
  23. package/dist/src/code_assist/server.js +11 -0
  24. package/dist/src/code_assist/server.js.map +1 -1
  25. package/dist/src/code_assist/server.test.js +17 -0
  26. package/dist/src/code_assist/server.test.js.map +1 -1
  27. package/dist/src/code_assist/types.d.ts +1 -1
  28. package/dist/src/code_assist/types.js.map +1 -1
  29. package/dist/src/config/config.d.ts +51 -15
  30. package/dist/src/config/config.js +130 -30
  31. package/dist/src/config/config.js.map +1 -1
  32. package/dist/src/config/config.test.js +231 -1
  33. package/dist/src/config/config.test.js.map +1 -1
  34. package/dist/src/config/models.d.ts +1 -1
  35. package/dist/src/config/models.js +2 -2
  36. package/dist/src/config/models.js.map +1 -1
  37. package/dist/src/config/storage.d.ts +2 -0
  38. package/dist/src/config/storage.js +17 -0
  39. package/dist/src/config/storage.js.map +1 -1
  40. package/dist/src/core/apiKeyCredentialStorage.js +7 -7
  41. package/dist/src/core/apiKeyCredentialStorage.js.map +1 -1
  42. package/dist/src/core/apiKeyCredentialStorage.test.js +5 -0
  43. package/dist/src/core/apiKeyCredentialStorage.test.js.map +1 -1
  44. package/dist/src/core/logger.js +10 -9
  45. package/dist/src/core/logger.js.map +1 -1
  46. package/dist/src/core/prompts.js +104 -55
  47. package/dist/src/core/prompts.js.map +1 -1
  48. package/dist/src/generated/git-commit.d.ts +2 -2
  49. package/dist/src/generated/git-commit.js +2 -2
  50. package/dist/src/generated/git-commit.js.map +1 -1
  51. package/dist/src/hooks/hookPlanner.d.ts +46 -0
  52. package/dist/src/hooks/hookPlanner.js +108 -0
  53. package/dist/src/hooks/hookPlanner.js.map +1 -0
  54. package/dist/src/hooks/hookPlanner.test.d.ts +6 -0
  55. package/dist/src/hooks/hookPlanner.test.js +255 -0
  56. package/dist/src/hooks/hookPlanner.test.js.map +1 -0
  57. package/dist/src/hooks/hookRegistry.d.ts +87 -0
  58. package/dist/src/hooks/hookRegistry.js +198 -0
  59. package/dist/src/hooks/hookRegistry.js.map +1 -0
  60. package/dist/src/hooks/hookRegistry.test.d.ts +6 -0
  61. package/dist/src/hooks/hookRegistry.test.js +341 -0
  62. package/dist/src/hooks/hookRegistry.test.js.map +1 -0
  63. package/dist/src/hooks/hookTranslator.d.ts +113 -0
  64. package/dist/src/hooks/hookTranslator.js +232 -0
  65. package/dist/src/hooks/hookTranslator.js.map +1 -0
  66. package/dist/src/hooks/hookTranslator.test.d.ts +6 -0
  67. package/dist/src/hooks/hookTranslator.test.js +192 -0
  68. package/dist/src/hooks/hookTranslator.test.js.map +1 -0
  69. package/dist/src/hooks/types.d.ts +384 -0
  70. package/dist/src/hooks/types.js +284 -0
  71. package/dist/src/hooks/types.js.map +1 -0
  72. package/dist/src/hooks/types.test.d.ts +6 -0
  73. package/dist/src/hooks/types.test.js +35 -0
  74. package/dist/src/hooks/types.test.js.map +1 -0
  75. package/dist/src/index.d.ts +3 -0
  76. package/dist/src/index.js +4 -0
  77. package/dist/src/index.js.map +1 -1
  78. package/dist/src/mcp/oauth-provider.d.ts +8 -5
  79. package/dist/src/mcp/oauth-provider.js +114 -31
  80. package/dist/src/mcp/oauth-provider.js.map +1 -1
  81. package/dist/src/mcp/oauth-provider.test.js +54 -1
  82. package/dist/src/mcp/oauth-provider.test.js.map +1 -1
  83. package/dist/src/mcp/token-storage/file-token-storage.js +1 -1
  84. package/dist/src/mcp/token-storage/file-token-storage.js.map +1 -1
  85. package/dist/src/mcp/token-storage/file-token-storage.test.js +7 -5
  86. package/dist/src/mcp/token-storage/file-token-storage.test.js.map +1 -1
  87. package/dist/src/mcp/token-storage/keychain-token-storage.js +2 -2
  88. package/dist/src/mcp/token-storage/keychain-token-storage.js.map +1 -1
  89. package/dist/src/policy/config.d.ts +31 -0
  90. package/dist/src/policy/config.js +197 -0
  91. package/dist/src/policy/config.js.map +1 -0
  92. package/dist/src/policy/config.test.d.ts +6 -0
  93. package/dist/src/policy/config.test.js +404 -0
  94. package/dist/src/policy/config.test.js.map +1 -0
  95. package/dist/src/policy/index.d.ts +2 -0
  96. package/dist/src/policy/index.js +2 -0
  97. package/dist/src/policy/index.js.map +1 -1
  98. package/dist/src/policy/policies/read-only.toml +56 -0
  99. package/dist/src/policy/policies/write.toml +63 -0
  100. package/dist/src/policy/policies/yolo.toml +31 -0
  101. package/dist/src/policy/toml-loader.d.ts +46 -0
  102. package/dist/src/policy/toml-loader.js +314 -0
  103. package/dist/src/policy/toml-loader.js.map +1 -0
  104. package/dist/src/policy/toml-loader.test.d.ts +6 -0
  105. package/dist/src/policy/toml-loader.test.js +522 -0
  106. package/dist/src/policy/toml-loader.test.js.map +1 -0
  107. package/dist/src/policy/types.d.ts +18 -0
  108. package/dist/src/policy/types.js +6 -0
  109. package/dist/src/policy/types.js.map +1 -1
  110. package/dist/src/services/chatCompressionService.js +2 -1
  111. package/dist/src/services/chatCompressionService.js.map +1 -1
  112. package/dist/src/services/chatRecordingService.js +9 -8
  113. package/dist/src/services/chatRecordingService.js.map +1 -1
  114. package/dist/src/services/loopDetectionService.d.ts +1 -1
  115. package/dist/src/services/loopDetectionService.js +3 -3
  116. package/dist/src/services/loopDetectionService.js.map +1 -1
  117. package/dist/src/services/loopDetectionService.test.js +69 -0
  118. package/dist/src/services/loopDetectionService.test.js.map +1 -1
  119. package/dist/src/services/shellExecutionService.js +18 -4
  120. package/dist/src/services/shellExecutionService.js.map +1 -1
  121. package/dist/src/services/shellExecutionService.test.js +16 -4
  122. package/dist/src/services/shellExecutionService.test.js.map +1 -1
  123. package/dist/src/telemetry/clearcut-logger/clearcut-logger.d.ts +3 -1
  124. package/dist/src/telemetry/clearcut-logger/clearcut-logger.js +31 -0
  125. package/dist/src/telemetry/clearcut-logger/clearcut-logger.js.map +1 -1
  126. package/dist/src/telemetry/clearcut-logger/event-metadata-key.d.ts +4 -1
  127. package/dist/src/telemetry/clearcut-logger/event-metadata-key.js +6 -0
  128. package/dist/src/telemetry/clearcut-logger/event-metadata-key.js.map +1 -1
  129. package/dist/src/telemetry/loggers.d.ts +2 -1
  130. package/dist/src/telemetry/loggers.js +13 -1
  131. package/dist/src/telemetry/loggers.js.map +1 -1
  132. package/dist/src/telemetry/loggers.test.js +10 -5
  133. package/dist/src/telemetry/loggers.test.js.map +1 -1
  134. package/dist/src/telemetry/metrics.d.ts +21 -1
  135. package/dist/src/telemetry/metrics.js +34 -0
  136. package/dist/src/telemetry/metrics.js.map +1 -1
  137. package/dist/src/telemetry/metrics.test.js +43 -126
  138. package/dist/src/telemetry/metrics.test.js.map +1 -1
  139. package/dist/src/telemetry/types.d.ts +24 -10
  140. package/dist/src/telemetry/types.js +47 -19
  141. package/dist/src/telemetry/types.js.map +1 -1
  142. package/dist/src/tools/edit.js +1 -1
  143. package/dist/src/tools/edit.js.map +1 -1
  144. package/dist/src/tools/edit.test.js +1 -1
  145. package/dist/src/tools/edit.test.js.map +1 -1
  146. package/dist/src/tools/mcp-client-manager.d.ts +31 -6
  147. package/dist/src/tools/mcp-client-manager.js +111 -41
  148. package/dist/src/tools/mcp-client-manager.js.map +1 -1
  149. package/dist/src/tools/mcp-client-manager.test.js +130 -38
  150. package/dist/src/tools/mcp-client-manager.test.js.map +1 -1
  151. package/dist/src/tools/mcp-client.d.ts +1 -0
  152. package/dist/src/tools/mcp-client.js +4 -4
  153. package/dist/src/tools/mcp-client.js.map +1 -1
  154. package/dist/src/tools/mcp-client.test.js +49 -0
  155. package/dist/src/tools/mcp-client.test.js.map +1 -1
  156. package/dist/src/tools/shell.js +1 -1
  157. package/dist/src/tools/shell.js.map +1 -1
  158. package/dist/src/tools/smart-edit.d.ts +1 -1
  159. package/dist/src/tools/smart-edit.js +12 -1
  160. package/dist/src/tools/smart-edit.js.map +1 -1
  161. package/dist/src/tools/smart-edit.test.js +2 -1
  162. package/dist/src/tools/smart-edit.test.js.map +1 -1
  163. package/dist/src/tools/tool-registry.d.ts +1 -18
  164. package/dist/src/tools/tool-registry.js +1 -44
  165. package/dist/src/tools/tool-registry.js.map +1 -1
  166. package/dist/src/tools/tool-registry.test.js +2 -24
  167. package/dist/src/tools/tool-registry.test.js.map +1 -1
  168. package/dist/src/tools/web-fetch.js +3 -6
  169. package/dist/src/tools/web-fetch.js.map +1 -1
  170. package/dist/src/tools/web-fetch.test.js +1 -1
  171. package/dist/src/tools/web-fetch.test.js.map +1 -1
  172. package/dist/src/tools/write-file.js +1 -1
  173. package/dist/src/tools/write-file.js.map +1 -1
  174. package/dist/src/tools/write-file.test.js +1 -1
  175. package/dist/src/tools/write-file.test.js.map +1 -1
  176. package/dist/src/utils/channel.d.ts +1 -0
  177. package/dist/src/utils/channel.js +4 -4
  178. package/dist/src/utils/channel.js.map +1 -1
  179. package/dist/src/utils/channel.test.js +35 -1
  180. package/dist/src/utils/channel.test.js.map +1 -1
  181. package/dist/src/utils/events.d.ts +18 -1
  182. package/dist/src/utils/events.js +8 -0
  183. package/dist/src/utils/events.js.map +1 -1
  184. package/dist/src/utils/events.test.js +10 -0
  185. package/dist/src/utils/events.test.js.map +1 -1
  186. package/dist/src/utils/extensionLoader.d.ts +67 -27
  187. package/dist/src/utils/extensionLoader.js +149 -7
  188. package/dist/src/utils/extensionLoader.js.map +1 -1
  189. package/dist/src/utils/extensionLoader.test.d.ts +6 -0
  190. package/dist/src/utils/extensionLoader.test.js +90 -0
  191. package/dist/src/utils/extensionLoader.test.js.map +1 -0
  192. package/dist/src/utils/fetch.js +1 -6
  193. package/dist/src/utils/fetch.js.map +1 -1
  194. package/dist/src/utils/llm-edit-fixer.d.ts +1 -1
  195. package/dist/src/utils/llm-edit-fixer.js +27 -3
  196. package/dist/src/utils/llm-edit-fixer.js.map +1 -1
  197. package/dist/src/utils/llm-edit-fixer.test.js +21 -0
  198. package/dist/src/utils/llm-edit-fixer.test.js.map +1 -1
  199. package/dist/src/utils/shell-utils.js +29 -1
  200. package/dist/src/utils/shell-utils.js.map +1 -1
  201. package/dist/src/utils/shell-utils.test.js +18 -0
  202. package/dist/src/utils/shell-utils.test.js.map +1 -1
  203. package/dist/tsconfig.tsbuildinfo +1 -1
  204. package/package.json +4 -2
@@ -0,0 +1,384 @@
1
+ /**
2
+ * @license
3
+ * Copyright 2025 Google LLC
4
+ * SPDX-License-Identifier: Apache-2.0
5
+ */
6
+ import type { GenerateContentResponse, GenerateContentParameters, ToolConfig as GenAIToolConfig, ToolListUnion } from '@google/genai';
7
+ import type { LLMRequest, LLMResponse, HookToolConfig } from './hookTranslator.js';
8
+ /**
9
+ * Event names for the hook system
10
+ */
11
+ export declare enum HookEventName {
12
+ BeforeTool = "BeforeTool",
13
+ AfterTool = "AfterTool",
14
+ BeforeAgent = "BeforeAgent",
15
+ Notification = "Notification",
16
+ AfterAgent = "AfterAgent",
17
+ SessionStart = "SessionStart",
18
+ SessionEnd = "SessionEnd",
19
+ PreCompress = "PreCompress",
20
+ BeforeModel = "BeforeModel",
21
+ AfterModel = "AfterModel",
22
+ BeforeToolSelection = "BeforeToolSelection"
23
+ }
24
+ /**
25
+ * Hook configuration entry
26
+ */
27
+ export interface CommandHookConfig {
28
+ type: HookType.Command;
29
+ command: string;
30
+ timeout?: number;
31
+ }
32
+ export type HookConfig = CommandHookConfig;
33
+ /**
34
+ * Hook definition with matcher
35
+ */
36
+ export interface HookDefinition {
37
+ matcher?: string;
38
+ sequential?: boolean;
39
+ hooks: HookConfig[];
40
+ }
41
+ /**
42
+ * Hook implementation types
43
+ */
44
+ export declare enum HookType {
45
+ Command = "command"
46
+ }
47
+ /**
48
+ * Decision types for hook outputs
49
+ */
50
+ export type HookDecision = 'ask' | 'block' | 'deny' | 'approve' | 'allow' | undefined;
51
+ /**
52
+ * Base hook input - common fields for all events
53
+ */
54
+ export interface HookInput {
55
+ session_id: string;
56
+ transcript_path: string;
57
+ cwd: string;
58
+ hook_event_name: string;
59
+ timestamp: string;
60
+ }
61
+ /**
62
+ * Base hook output - common fields for all events
63
+ */
64
+ export interface HookOutput {
65
+ continue?: boolean;
66
+ stopReason?: string;
67
+ suppressOutput?: boolean;
68
+ systemMessage?: string;
69
+ decision?: HookDecision;
70
+ reason?: string;
71
+ hookSpecificOutput?: Record<string, unknown>;
72
+ }
73
+ /**
74
+ * Factory function to create the appropriate hook output class based on event name
75
+ * Returns DefaultHookOutput for all events since it contains all necessary methods
76
+ */
77
+ export declare function createHookOutput(eventName: string, data: Partial<HookOutput>): DefaultHookOutput;
78
+ /**
79
+ * Default implementation of HookOutput with utility methods
80
+ */
81
+ export declare class DefaultHookOutput implements HookOutput {
82
+ continue?: boolean;
83
+ stopReason?: string;
84
+ suppressOutput?: boolean;
85
+ systemMessage?: string;
86
+ decision?: HookDecision;
87
+ reason?: string;
88
+ hookSpecificOutput?: Record<string, unknown>;
89
+ constructor(data?: Partial<HookOutput>);
90
+ /**
91
+ * Check if this output represents a blocking decision
92
+ */
93
+ isBlockingDecision(): boolean;
94
+ /**
95
+ * Check if this output requests to stop execution
96
+ */
97
+ shouldStopExecution(): boolean;
98
+ /**
99
+ * Get the effective reason for blocking or stopping
100
+ */
101
+ getEffectiveReason(): string;
102
+ /**
103
+ * Apply LLM request modifications (specific method for BeforeModel hooks)
104
+ */
105
+ applyLLMRequestModifications(target: GenerateContentParameters): GenerateContentParameters;
106
+ /**
107
+ * Apply tool config modifications (specific method for BeforeToolSelection hooks)
108
+ */
109
+ applyToolConfigModifications(target: {
110
+ toolConfig?: GenAIToolConfig;
111
+ tools?: ToolListUnion;
112
+ }): {
113
+ toolConfig?: GenAIToolConfig;
114
+ tools?: ToolListUnion;
115
+ };
116
+ /**
117
+ * Get additional context for adding to responses
118
+ */
119
+ getAdditionalContext(): string | undefined;
120
+ /**
121
+ * Check if execution should be blocked and return error info
122
+ */
123
+ getBlockingError(): {
124
+ blocked: boolean;
125
+ reason: string;
126
+ };
127
+ }
128
+ /**
129
+ * Specific hook output class for BeforeTool events with compatibility support
130
+ */
131
+ export declare class BeforeToolHookOutput extends DefaultHookOutput {
132
+ /**
133
+ * Get the effective blocking reason, considering compatibility fields
134
+ */
135
+ getEffectiveReason(): string;
136
+ /**
137
+ * Check if this output represents a blocking decision, considering compatibility fields
138
+ */
139
+ isBlockingDecision(): boolean;
140
+ }
141
+ /**
142
+ * Specific hook output class for BeforeModel events
143
+ */
144
+ export declare class BeforeModelHookOutput extends DefaultHookOutput {
145
+ /**
146
+ * Get synthetic LLM response if provided by hook
147
+ */
148
+ getSyntheticResponse(): GenerateContentResponse | undefined;
149
+ /**
150
+ * Apply modifications to LLM request
151
+ */
152
+ applyLLMRequestModifications(target: GenerateContentParameters): GenerateContentParameters;
153
+ }
154
+ /**
155
+ * Specific hook output class for BeforeToolSelection events
156
+ */
157
+ export declare class BeforeToolSelectionHookOutput extends DefaultHookOutput {
158
+ /**
159
+ * Apply tool configuration modifications
160
+ */
161
+ applyToolConfigModifications(target: {
162
+ toolConfig?: GenAIToolConfig;
163
+ tools?: ToolListUnion;
164
+ }): {
165
+ toolConfig?: GenAIToolConfig;
166
+ tools?: ToolListUnion;
167
+ };
168
+ }
169
+ /**
170
+ * Specific hook output class for AfterModel events
171
+ */
172
+ export declare class AfterModelHookOutput extends DefaultHookOutput {
173
+ /**
174
+ * Get modified LLM response if provided by hook
175
+ */
176
+ getModifiedResponse(): GenerateContentResponse | undefined;
177
+ }
178
+ /**
179
+ * BeforeTool hook input
180
+ */
181
+ export interface BeforeToolInput extends HookInput {
182
+ tool_name: string;
183
+ tool_input: Record<string, unknown>;
184
+ }
185
+ /**
186
+ * BeforeTool hook output
187
+ */
188
+ export interface BeforeToolOutput extends HookOutput {
189
+ hookSpecificOutput?: {
190
+ hookEventName: 'BeforeTool';
191
+ permissionDecision?: HookDecision;
192
+ permissionDecisionReason?: string;
193
+ };
194
+ }
195
+ /**
196
+ * AfterTool hook input
197
+ */
198
+ export interface AfterToolInput extends HookInput {
199
+ tool_name: string;
200
+ tool_input: Record<string, unknown>;
201
+ tool_response: Record<string, unknown>;
202
+ }
203
+ /**
204
+ * AfterTool hook output
205
+ */
206
+ export interface AfterToolOutput extends HookOutput {
207
+ hookSpecificOutput?: {
208
+ hookEventName: 'AfterTool';
209
+ additionalContext?: string;
210
+ };
211
+ }
212
+ /**
213
+ * BeforeAgent hook input
214
+ */
215
+ export interface BeforeAgentInput extends HookInput {
216
+ prompt: string;
217
+ }
218
+ /**
219
+ * BeforeAgent hook output
220
+ */
221
+ export interface BeforeAgentOutput extends HookOutput {
222
+ hookSpecificOutput?: {
223
+ hookEventName: 'BeforeAgent';
224
+ additionalContext?: string;
225
+ };
226
+ }
227
+ /**
228
+ * Notification types
229
+ */
230
+ export declare enum NotificationType {
231
+ ToolPermission = "ToolPermission"
232
+ }
233
+ /**
234
+ * Notification hook input
235
+ */
236
+ export interface NotificationInput extends HookInput {
237
+ notification_type: NotificationType;
238
+ message: string;
239
+ details: Record<string, unknown>;
240
+ }
241
+ /**
242
+ * Notification hook output
243
+ */
244
+ export interface NotificationOutput {
245
+ suppressOutput?: boolean;
246
+ systemMessage?: string;
247
+ }
248
+ /**
249
+ * AfterAgent hook input
250
+ */
251
+ export interface AfterAgentInput extends HookInput {
252
+ prompt: string;
253
+ prompt_response: string;
254
+ stop_hook_active: boolean;
255
+ }
256
+ /**
257
+ * SessionStart source types
258
+ */
259
+ export declare enum SessionStartSource {
260
+ Startup = "startup",
261
+ Resume = "resume",
262
+ Clear = "clear",
263
+ Compress = "compress"
264
+ }
265
+ /**
266
+ * SessionStart hook input
267
+ */
268
+ export interface SessionStartInput extends HookInput {
269
+ source: SessionStartSource;
270
+ }
271
+ /**
272
+ * SessionStart hook output
273
+ */
274
+ export interface SessionStartOutput extends HookOutput {
275
+ hookSpecificOutput?: {
276
+ hookEventName: 'SessionStart';
277
+ additionalContext?: string;
278
+ };
279
+ }
280
+ /**
281
+ * SessionEnd reason types
282
+ */
283
+ export declare enum SessionEndReason {
284
+ Exit = "exit",
285
+ Clear = "clear",
286
+ Logout = "logout",
287
+ PromptInputExit = "prompt_input_exit",
288
+ Other = "other"
289
+ }
290
+ /**
291
+ * SessionEnd hook input
292
+ */
293
+ export interface SessionEndInput extends HookInput {
294
+ reason: SessionEndReason;
295
+ }
296
+ /**
297
+ * PreCompress trigger types
298
+ */
299
+ export declare enum PreCompressTrigger {
300
+ Manual = "manual",
301
+ Auto = "auto"
302
+ }
303
+ /**
304
+ * PreCompress hook input
305
+ */
306
+ export interface PreCompressInput extends HookInput {
307
+ trigger: PreCompressTrigger;
308
+ }
309
+ /**
310
+ * PreCompress hook output
311
+ */
312
+ export interface PreCompressOutput {
313
+ suppressOutput?: boolean;
314
+ systemMessage?: string;
315
+ }
316
+ /**
317
+ * BeforeModel hook input - uses decoupled types
318
+ */
319
+ export interface BeforeModelInput extends HookInput {
320
+ llm_request: LLMRequest;
321
+ }
322
+ /**
323
+ * BeforeModel hook output
324
+ */
325
+ export interface BeforeModelOutput extends HookOutput {
326
+ hookSpecificOutput?: {
327
+ hookEventName: 'BeforeModel';
328
+ llm_request?: Partial<LLMRequest>;
329
+ llm_response?: LLMResponse;
330
+ };
331
+ }
332
+ /**
333
+ * AfterModel hook input - uses decoupled types
334
+ */
335
+ export interface AfterModelInput extends HookInput {
336
+ llm_request: LLMRequest;
337
+ llm_response: LLMResponse;
338
+ }
339
+ /**
340
+ * AfterModel hook output
341
+ */
342
+ export interface AfterModelOutput extends HookOutput {
343
+ hookSpecificOutput?: {
344
+ hookEventName: 'AfterModel';
345
+ llm_response?: Partial<LLMResponse>;
346
+ };
347
+ }
348
+ /**
349
+ * BeforeToolSelection hook input - uses decoupled types
350
+ */
351
+ export interface BeforeToolSelectionInput extends HookInput {
352
+ llm_request: LLMRequest;
353
+ }
354
+ /**
355
+ * BeforeToolSelection hook output
356
+ */
357
+ export interface BeforeToolSelectionOutput extends HookOutput {
358
+ hookSpecificOutput?: {
359
+ hookEventName: 'BeforeToolSelection';
360
+ toolConfig?: HookToolConfig;
361
+ };
362
+ }
363
+ /**
364
+ * Hook execution result
365
+ */
366
+ export interface HookExecutionResult {
367
+ hookConfig: HookConfig;
368
+ eventName: HookEventName;
369
+ success: boolean;
370
+ output?: HookOutput;
371
+ stdout?: string;
372
+ stderr?: string;
373
+ exitCode?: number;
374
+ duration: number;
375
+ error?: Error;
376
+ }
377
+ /**
378
+ * Hook execution plan for an event
379
+ */
380
+ export interface HookExecutionPlan {
381
+ eventName: HookEventName;
382
+ hookConfigs: HookConfig[];
383
+ sequential: boolean;
384
+ }
@@ -0,0 +1,284 @@
1
+ /**
2
+ * @license
3
+ * Copyright 2025 Google LLC
4
+ * SPDX-License-Identifier: Apache-2.0
5
+ */
6
+ import { defaultHookTranslator } from './hookTranslator.js';
7
+ /**
8
+ * Event names for the hook system
9
+ */
10
+ export var HookEventName;
11
+ (function (HookEventName) {
12
+ HookEventName["BeforeTool"] = "BeforeTool";
13
+ HookEventName["AfterTool"] = "AfterTool";
14
+ HookEventName["BeforeAgent"] = "BeforeAgent";
15
+ HookEventName["Notification"] = "Notification";
16
+ HookEventName["AfterAgent"] = "AfterAgent";
17
+ HookEventName["SessionStart"] = "SessionStart";
18
+ HookEventName["SessionEnd"] = "SessionEnd";
19
+ HookEventName["PreCompress"] = "PreCompress";
20
+ HookEventName["BeforeModel"] = "BeforeModel";
21
+ HookEventName["AfterModel"] = "AfterModel";
22
+ HookEventName["BeforeToolSelection"] = "BeforeToolSelection";
23
+ })(HookEventName || (HookEventName = {}));
24
+ /**
25
+ * Hook implementation types
26
+ */
27
+ export var HookType;
28
+ (function (HookType) {
29
+ HookType["Command"] = "command";
30
+ })(HookType || (HookType = {}));
31
+ /**
32
+ * Factory function to create the appropriate hook output class based on event name
33
+ * Returns DefaultHookOutput for all events since it contains all necessary methods
34
+ */
35
+ export function createHookOutput(eventName, data) {
36
+ switch (eventName) {
37
+ case 'BeforeModel':
38
+ return new BeforeModelHookOutput(data);
39
+ case 'AfterModel':
40
+ return new AfterModelHookOutput(data);
41
+ case 'BeforeToolSelection':
42
+ return new BeforeToolSelectionHookOutput(data);
43
+ default:
44
+ return new DefaultHookOutput(data);
45
+ }
46
+ }
47
+ /**
48
+ * Default implementation of HookOutput with utility methods
49
+ */
50
+ export class DefaultHookOutput {
51
+ continue;
52
+ stopReason;
53
+ suppressOutput;
54
+ systemMessage;
55
+ decision;
56
+ reason;
57
+ hookSpecificOutput;
58
+ constructor(data = {}) {
59
+ this.continue = data.continue;
60
+ this.stopReason = data.stopReason;
61
+ this.suppressOutput = data.suppressOutput;
62
+ this.systemMessage = data.systemMessage;
63
+ this.decision = data.decision;
64
+ this.reason = data.reason;
65
+ this.hookSpecificOutput = data.hookSpecificOutput;
66
+ }
67
+ /**
68
+ * Check if this output represents a blocking decision
69
+ */
70
+ isBlockingDecision() {
71
+ return this.decision === 'block' || this.decision === 'deny';
72
+ }
73
+ /**
74
+ * Check if this output requests to stop execution
75
+ */
76
+ shouldStopExecution() {
77
+ return this.continue === false;
78
+ }
79
+ /**
80
+ * Get the effective reason for blocking or stopping
81
+ */
82
+ getEffectiveReason() {
83
+ return this.reason || this.stopReason || 'No reason provided';
84
+ }
85
+ /**
86
+ * Apply LLM request modifications (specific method for BeforeModel hooks)
87
+ */
88
+ applyLLMRequestModifications(target) {
89
+ // Base implementation - overridden by BeforeModelHookOutput
90
+ return target;
91
+ }
92
+ /**
93
+ * Apply tool config modifications (specific method for BeforeToolSelection hooks)
94
+ */
95
+ applyToolConfigModifications(target) {
96
+ // Base implementation - overridden by BeforeToolSelectionHookOutput
97
+ return target;
98
+ }
99
+ /**
100
+ * Get additional context for adding to responses
101
+ */
102
+ getAdditionalContext() {
103
+ if (this.hookSpecificOutput &&
104
+ 'additionalContext' in this.hookSpecificOutput) {
105
+ const context = this.hookSpecificOutput['additionalContext'];
106
+ return typeof context === 'string' ? context : undefined;
107
+ }
108
+ return undefined;
109
+ }
110
+ /**
111
+ * Check if execution should be blocked and return error info
112
+ */
113
+ getBlockingError() {
114
+ if (this.isBlockingDecision()) {
115
+ return {
116
+ blocked: true,
117
+ reason: this.getEffectiveReason(),
118
+ };
119
+ }
120
+ return { blocked: false, reason: '' };
121
+ }
122
+ }
123
+ /**
124
+ * Specific hook output class for BeforeTool events with compatibility support
125
+ */
126
+ export class BeforeToolHookOutput extends DefaultHookOutput {
127
+ /**
128
+ * Get the effective blocking reason, considering compatibility fields
129
+ */
130
+ getEffectiveReason() {
131
+ // Check for compatibility fields first
132
+ if (this.hookSpecificOutput) {
133
+ if ('permissionDecisionReason' in this.hookSpecificOutput) {
134
+ const compatReason = this.hookSpecificOutput['permissionDecisionReason'];
135
+ if (typeof compatReason === 'string') {
136
+ return compatReason;
137
+ }
138
+ }
139
+ }
140
+ return super.getEffectiveReason();
141
+ }
142
+ /**
143
+ * Check if this output represents a blocking decision, considering compatibility fields
144
+ */
145
+ isBlockingDecision() {
146
+ // Check compatibility field first
147
+ if (this.hookSpecificOutput &&
148
+ 'permissionDecision' in this.hookSpecificOutput) {
149
+ const compatDecision = this.hookSpecificOutput['permissionDecision'];
150
+ if (compatDecision === 'block' || compatDecision === 'deny') {
151
+ return true;
152
+ }
153
+ }
154
+ return super.isBlockingDecision();
155
+ }
156
+ }
157
+ /**
158
+ * Specific hook output class for BeforeModel events
159
+ */
160
+ export class BeforeModelHookOutput extends DefaultHookOutput {
161
+ /**
162
+ * Get synthetic LLM response if provided by hook
163
+ */
164
+ getSyntheticResponse() {
165
+ if (this.hookSpecificOutput && 'llm_response' in this.hookSpecificOutput) {
166
+ const hookResponse = this.hookSpecificOutput['llm_response'];
167
+ if (hookResponse) {
168
+ // Convert hook format to SDK format
169
+ return defaultHookTranslator.fromHookLLMResponse(hookResponse);
170
+ }
171
+ }
172
+ return undefined;
173
+ }
174
+ /**
175
+ * Apply modifications to LLM request
176
+ */
177
+ applyLLMRequestModifications(target) {
178
+ if (this.hookSpecificOutput && 'llm_request' in this.hookSpecificOutput) {
179
+ const hookRequest = this.hookSpecificOutput['llm_request'];
180
+ if (hookRequest) {
181
+ // Convert hook format to SDK format
182
+ const sdkRequest = defaultHookTranslator.fromHookLLMRequest(hookRequest, target);
183
+ return {
184
+ ...target,
185
+ ...sdkRequest,
186
+ };
187
+ }
188
+ }
189
+ return target;
190
+ }
191
+ }
192
+ /**
193
+ * Specific hook output class for BeforeToolSelection events
194
+ */
195
+ export class BeforeToolSelectionHookOutput extends DefaultHookOutput {
196
+ /**
197
+ * Apply tool configuration modifications
198
+ */
199
+ applyToolConfigModifications(target) {
200
+ if (this.hookSpecificOutput && 'toolConfig' in this.hookSpecificOutput) {
201
+ const hookToolConfig = this.hookSpecificOutput['toolConfig'];
202
+ if (hookToolConfig) {
203
+ // Convert hook format to SDK format
204
+ const sdkToolConfig = defaultHookTranslator.fromHookToolConfig(hookToolConfig);
205
+ return {
206
+ ...target,
207
+ tools: target.tools || [],
208
+ toolConfig: sdkToolConfig,
209
+ };
210
+ }
211
+ }
212
+ return target;
213
+ }
214
+ }
215
+ /**
216
+ * Specific hook output class for AfterModel events
217
+ */
218
+ export class AfterModelHookOutput extends DefaultHookOutput {
219
+ /**
220
+ * Get modified LLM response if provided by hook
221
+ */
222
+ getModifiedResponse() {
223
+ if (this.hookSpecificOutput && 'llm_response' in this.hookSpecificOutput) {
224
+ const hookResponse = this.hookSpecificOutput['llm_response'];
225
+ if (hookResponse?.candidates?.[0]?.content) {
226
+ // Convert hook format to SDK format
227
+ return defaultHookTranslator.fromHookLLMResponse(hookResponse);
228
+ }
229
+ }
230
+ // If hook wants to stop execution, create a synthetic stop response
231
+ if (this.shouldStopExecution()) {
232
+ const stopResponse = {
233
+ candidates: [
234
+ {
235
+ content: {
236
+ role: 'model',
237
+ parts: [this.getEffectiveReason() || 'Execution stopped by hook'],
238
+ },
239
+ finishReason: 'STOP',
240
+ },
241
+ ],
242
+ };
243
+ return defaultHookTranslator.fromHookLLMResponse(stopResponse);
244
+ }
245
+ return undefined;
246
+ }
247
+ }
248
+ /**
249
+ * Notification types
250
+ */
251
+ export var NotificationType;
252
+ (function (NotificationType) {
253
+ NotificationType["ToolPermission"] = "ToolPermission";
254
+ })(NotificationType || (NotificationType = {}));
255
+ /**
256
+ * SessionStart source types
257
+ */
258
+ export var SessionStartSource;
259
+ (function (SessionStartSource) {
260
+ SessionStartSource["Startup"] = "startup";
261
+ SessionStartSource["Resume"] = "resume";
262
+ SessionStartSource["Clear"] = "clear";
263
+ SessionStartSource["Compress"] = "compress";
264
+ })(SessionStartSource || (SessionStartSource = {}));
265
+ /**
266
+ * SessionEnd reason types
267
+ */
268
+ export var SessionEndReason;
269
+ (function (SessionEndReason) {
270
+ SessionEndReason["Exit"] = "exit";
271
+ SessionEndReason["Clear"] = "clear";
272
+ SessionEndReason["Logout"] = "logout";
273
+ SessionEndReason["PromptInputExit"] = "prompt_input_exit";
274
+ SessionEndReason["Other"] = "other";
275
+ })(SessionEndReason || (SessionEndReason = {}));
276
+ /**
277
+ * PreCompress trigger types
278
+ */
279
+ export var PreCompressTrigger;
280
+ (function (PreCompressTrigger) {
281
+ PreCompressTrigger["Manual"] = "manual";
282
+ PreCompressTrigger["Auto"] = "auto";
283
+ })(PreCompressTrigger || (PreCompressTrigger = {}));
284
+ //# sourceMappingURL=types.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"types.js","sourceRoot":"","sources":["../../../src/hooks/types.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,6 @@
1
+ /**
2
+ * @license
3
+ * Copyright 2025 Google LLC
4
+ * SPDX-License-Identifier: Apache-2.0
5
+ */
6
+ export {};