@vybestack/llxprt-code-agents 0.10.0-nightly.260613.1adad3b34

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 (176) hide show
  1. package/dist/.last_build +0 -0
  2. package/dist/index.d.ts +10 -0
  3. package/dist/index.js +11 -0
  4. package/dist/index.js.map +1 -0
  5. package/dist/src/agents/executor-prompt-builder.d.ts +19 -0
  6. package/dist/src/agents/executor-prompt-builder.js +44 -0
  7. package/dist/src/agents/executor-prompt-builder.js.map +1 -0
  8. package/dist/src/agents/executor-termination.d.ts +22 -0
  9. package/dist/src/agents/executor-termination.js +44 -0
  10. package/dist/src/agents/executor-termination.js.map +1 -0
  11. package/dist/src/agents/executor-validation.d.ts +17 -0
  12. package/dist/src/agents/executor-validation.js +35 -0
  13. package/dist/src/agents/executor-validation.js.map +1 -0
  14. package/dist/src/agents/executor.d.ts +136 -0
  15. package/dist/src/agents/executor.js +874 -0
  16. package/dist/src/agents/executor.js.map +1 -0
  17. package/dist/src/agents/invocation.d.ts +45 -0
  18. package/dist/src/agents/invocation.js +118 -0
  19. package/dist/src/agents/invocation.js.map +1 -0
  20. package/dist/src/agents/recovery.d.ts +75 -0
  21. package/dist/src/agents/recovery.js +107 -0
  22. package/dist/src/agents/recovery.js.map +1 -0
  23. package/dist/src/agents/types.d.ts +149 -0
  24. package/dist/src/agents/types.js +18 -0
  25. package/dist/src/agents/types.js.map +1 -0
  26. package/dist/src/agents/utils.d.ts +15 -0
  27. package/dist/src/agents/utils.js +28 -0
  28. package/dist/src/agents/utils.js.map +1 -0
  29. package/dist/src/compression/CompressionHandler.d.ts +178 -0
  30. package/dist/src/compression/CompressionHandler.js +630 -0
  31. package/dist/src/compression/CompressionHandler.js.map +1 -0
  32. package/dist/src/compression/HighDensityStrategy.d.ts +113 -0
  33. package/dist/src/compression/HighDensityStrategy.js +769 -0
  34. package/dist/src/compression/HighDensityStrategy.js.map +1 -0
  35. package/dist/src/compression/MiddleOutStrategy.d.ts +27 -0
  36. package/dist/src/compression/MiddleOutStrategy.js +347 -0
  37. package/dist/src/compression/MiddleOutStrategy.js.map +1 -0
  38. package/dist/src/compression/OneShotStrategy.d.ts +22 -0
  39. package/dist/src/compression/OneShotStrategy.js +235 -0
  40. package/dist/src/compression/OneShotStrategy.js.map +1 -0
  41. package/dist/src/compression/TopDownTruncationStrategy.d.ts +13 -0
  42. package/dist/src/compression/TopDownTruncationStrategy.js +74 -0
  43. package/dist/src/compression/TopDownTruncationStrategy.js.map +1 -0
  44. package/dist/src/compression/compressionBudgeting.d.ts +34 -0
  45. package/dist/src/compression/compressionBudgeting.js +139 -0
  46. package/dist/src/compression/compressionBudgeting.js.map +1 -0
  47. package/dist/src/compression/compressionStrategyFactory.d.ts +23 -0
  48. package/dist/src/compression/compressionStrategyFactory.js +40 -0
  49. package/dist/src/compression/compressionStrategyFactory.js.map +1 -0
  50. package/dist/src/compression/index.d.ts +16 -0
  51. package/dist/src/compression/index.js +17 -0
  52. package/dist/src/compression/index.js.map +1 -0
  53. package/dist/src/compression/reasoningUtils.d.ts +18 -0
  54. package/dist/src/compression/reasoningUtils.js +22 -0
  55. package/dist/src/compression/reasoningUtils.js.map +1 -0
  56. package/dist/src/compression/utils.d.ts +114 -0
  57. package/dist/src/compression/utils.js +316 -0
  58. package/dist/src/compression/utils.js.map +1 -0
  59. package/dist/src/core/AgentHookManager.d.ts +41 -0
  60. package/dist/src/core/AgentHookManager.js +65 -0
  61. package/dist/src/core/AgentHookManager.js.map +1 -0
  62. package/dist/src/core/ChatSessionFactory.d.ts +50 -0
  63. package/dist/src/core/ChatSessionFactory.js +216 -0
  64. package/dist/src/core/ChatSessionFactory.js.map +1 -0
  65. package/dist/src/core/ConversationManager.d.ts +113 -0
  66. package/dist/src/core/ConversationManager.js +311 -0
  67. package/dist/src/core/ConversationManager.js.map +1 -0
  68. package/dist/src/core/DirectMessageProcessor.d.ts +79 -0
  69. package/dist/src/core/DirectMessageProcessor.js +478 -0
  70. package/dist/src/core/DirectMessageProcessor.js.map +1 -0
  71. package/dist/src/core/IdeContextTracker.d.ts +56 -0
  72. package/dist/src/core/IdeContextTracker.js +207 -0
  73. package/dist/src/core/IdeContextTracker.js.map +1 -0
  74. package/dist/src/core/MessageConverter.d.ts +78 -0
  75. package/dist/src/core/MessageConverter.js +492 -0
  76. package/dist/src/core/MessageConverter.js.map +1 -0
  77. package/dist/src/core/MessageStreamOrchestrator.d.ts +85 -0
  78. package/dist/src/core/MessageStreamOrchestrator.js +448 -0
  79. package/dist/src/core/MessageStreamOrchestrator.js.map +1 -0
  80. package/dist/src/core/MessageStreamTerminalHandler.d.ts +16 -0
  81. package/dist/src/core/MessageStreamTerminalHandler.js +170 -0
  82. package/dist/src/core/MessageStreamTerminalHandler.js.map +1 -0
  83. package/dist/src/core/StreamProcessor.d.ts +105 -0
  84. package/dist/src/core/StreamProcessor.js +660 -0
  85. package/dist/src/core/StreamProcessor.js.map +1 -0
  86. package/dist/src/core/TodoContinuationService.d.ts +74 -0
  87. package/dist/src/core/TodoContinuationService.js +312 -0
  88. package/dist/src/core/TodoContinuationService.js.map +1 -0
  89. package/dist/src/core/TurnProcessor.d.ts +91 -0
  90. package/dist/src/core/TurnProcessor.js +540 -0
  91. package/dist/src/core/TurnProcessor.js.map +1 -0
  92. package/dist/src/core/baseLlmClient.d.ts +115 -0
  93. package/dist/src/core/baseLlmClient.js +231 -0
  94. package/dist/src/core/baseLlmClient.js.map +1 -0
  95. package/dist/src/core/bucketFailoverIntegration.d.ts +62 -0
  96. package/dist/src/core/bucketFailoverIntegration.js +186 -0
  97. package/dist/src/core/bucketFailoverIntegration.js.map +1 -0
  98. package/dist/src/core/chatSession.d.ts +121 -0
  99. package/dist/src/core/chatSession.js +720 -0
  100. package/dist/src/core/chatSession.js.map +1 -0
  101. package/dist/src/core/client.d.ts +132 -0
  102. package/dist/src/core/client.js +524 -0
  103. package/dist/src/core/client.js.map +1 -0
  104. package/dist/src/core/clientHelpers.d.ts +15 -0
  105. package/dist/src/core/clientHelpers.js +122 -0
  106. package/dist/src/core/clientHelpers.js.map +1 -0
  107. package/dist/src/core/clientLlmUtilities.d.ts +30 -0
  108. package/dist/src/core/clientLlmUtilities.js +125 -0
  109. package/dist/src/core/clientLlmUtilities.js.map +1 -0
  110. package/dist/src/core/clientToolGovernance.d.ts +37 -0
  111. package/dist/src/core/clientToolGovernance.js +104 -0
  112. package/dist/src/core/clientToolGovernance.js.map +1 -0
  113. package/dist/src/core/compression-config.d.ts +12 -0
  114. package/dist/src/core/compression-config.js +21 -0
  115. package/dist/src/core/compression-config.js.map +1 -0
  116. package/dist/src/core/coreToolScheduler.d.ts +105 -0
  117. package/dist/src/core/coreToolScheduler.js +453 -0
  118. package/dist/src/core/coreToolScheduler.js.map +1 -0
  119. package/dist/src/core/hookToolRestrictions.d.ts +18 -0
  120. package/dist/src/core/hookToolRestrictions.js +187 -0
  121. package/dist/src/core/hookToolRestrictions.js.map +1 -0
  122. package/dist/src/core/nonInteractiveToolExecutor.d.ts +17 -0
  123. package/dist/src/core/nonInteractiveToolExecutor.js +102 -0
  124. package/dist/src/core/nonInteractiveToolExecutor.js.map +1 -0
  125. package/dist/src/core/subagent.d.ts +105 -0
  126. package/dist/src/core/subagent.js +650 -0
  127. package/dist/src/core/subagent.js.map +1 -0
  128. package/dist/src/core/subagentExecution.d.ts +104 -0
  129. package/dist/src/core/subagentExecution.js +275 -0
  130. package/dist/src/core/subagentExecution.js.map +1 -0
  131. package/dist/src/core/subagentOrchestrator.d.ts +84 -0
  132. package/dist/src/core/subagentOrchestrator.js +503 -0
  133. package/dist/src/core/subagentOrchestrator.js.map +1 -0
  134. package/dist/src/core/subagentRuntimeSetup.d.ts +75 -0
  135. package/dist/src/core/subagentRuntimeSetup.js +387 -0
  136. package/dist/src/core/subagentRuntimeSetup.js.map +1 -0
  137. package/dist/src/core/subagentScheduler.d.ts +17 -0
  138. package/dist/src/core/subagentScheduler.js +7 -0
  139. package/dist/src/core/subagentScheduler.js.map +1 -0
  140. package/dist/src/core/subagentToolProcessing.d.ts +51 -0
  141. package/dist/src/core/subagentToolProcessing.js +359 -0
  142. package/dist/src/core/subagentToolProcessing.js.map +1 -0
  143. package/dist/src/core/toolGovernance.d.ts +18 -0
  144. package/dist/src/core/toolGovernance.js +50 -0
  145. package/dist/src/core/toolGovernance.js.map +1 -0
  146. package/dist/src/core/turn.d.ts +47 -0
  147. package/dist/src/core/turn.js +455 -0
  148. package/dist/src/core/turn.js.map +1 -0
  149. package/dist/src/core/turnLogging.d.ts +35 -0
  150. package/dist/src/core/turnLogging.js +80 -0
  151. package/dist/src/core/turnLogging.js.map +1 -0
  152. package/dist/src/index.d.ts +32 -0
  153. package/dist/src/index.js +44 -0
  154. package/dist/src/index.js.map +1 -0
  155. package/dist/src/scheduler/confirmation-coordinator.d.ts +139 -0
  156. package/dist/src/scheduler/confirmation-coordinator.js +443 -0
  157. package/dist/src/scheduler/confirmation-coordinator.js.map +1 -0
  158. package/dist/src/scheduler/result-aggregator.d.ts +127 -0
  159. package/dist/src/scheduler/result-aggregator.js +302 -0
  160. package/dist/src/scheduler/result-aggregator.js.map +1 -0
  161. package/dist/src/scheduler/status-transitions.d.ts +39 -0
  162. package/dist/src/scheduler/status-transitions.js +184 -0
  163. package/dist/src/scheduler/status-transitions.js.map +1 -0
  164. package/dist/src/scheduler/tool-dispatcher.d.ts +40 -0
  165. package/dist/src/scheduler/tool-dispatcher.js +120 -0
  166. package/dist/src/scheduler/tool-dispatcher.js.map +1 -0
  167. package/dist/src/scheduler/tool-executor.d.ts +44 -0
  168. package/dist/src/scheduler/tool-executor.js +117 -0
  169. package/dist/src/scheduler/tool-executor.js.map +1 -0
  170. package/dist/src/scheduler/utils.d.ts +11 -0
  171. package/dist/src/scheduler/utils.js +19 -0
  172. package/dist/src/scheduler/utils.js.map +1 -0
  173. package/dist/src/tools/task.d.ts +128 -0
  174. package/dist/src/tools/task.js +932 -0
  175. package/dist/src/tools/task.js.map +1 -0
  176. package/package.json +54 -0
@@ -0,0 +1,359 @@
1
+ /**
2
+ * @license
3
+ * Copyright 2025 Google LLC
4
+ * SPDX-License-Identifier: Apache-2.0
5
+ */
6
+ import { executeToolCall, } from './nonInteractiveToolExecutor.js';
7
+ import { ToolErrorType } from '@vybestack/llxprt-code-tools';
8
+ import { LocalTodoStore as TodoStore } from '@vybestack/llxprt-code-tools';
9
+ import { debugLogger } from '@vybestack/llxprt-code-core/utils/debugLogger.js';
10
+ import { SubagentTerminateMode, } from '@vybestack/llxprt-code-core/core/subagentTypes.js';
11
+ import { createSchedulerConfig } from './subagentRuntimeSetup.js';
12
+ import { getHookRestrictedAllowedToolsForFunctionCall, isHookRestrictedToolCall, } from './hookToolRestrictions.js';
13
+ // ---------------------------------------------------------------------------
14
+ // Pure helpers
15
+ // ---------------------------------------------------------------------------
16
+ export function toSnakeCase(value) {
17
+ return value
18
+ .replace(/([a-z0-9])([A-Z])/g, '$1_$2')
19
+ .replace(/[\s-]+/g, '_')
20
+ .toLowerCase();
21
+ }
22
+ export function isFatalToolError(errorType) {
23
+ return (errorType === ToolErrorType.TOOL_DISABLED ||
24
+ errorType === ToolErrorType.TOOL_NOT_REGISTERED);
25
+ }
26
+ export function extractToolDetail(resultDisplay, error) {
27
+ if (error?.message) {
28
+ return error.message;
29
+ }
30
+ if (typeof resultDisplay === 'string') {
31
+ return resultDisplay;
32
+ }
33
+ if (resultDisplay &&
34
+ typeof resultDisplay === 'object' &&
35
+ 'message' in resultDisplay &&
36
+ typeof resultDisplay.message === 'string') {
37
+ return resultDisplay.message;
38
+ }
39
+ const missingResultDisplay = void 0;
40
+ return missingResultDisplay;
41
+ }
42
+ export function buildToolUnavailableMessage(toolName, resultDisplay, error) {
43
+ const detail = extractToolDetail(resultDisplay, error);
44
+ const baseMessage = `Tool "${toolName}" is not available in this environment.`;
45
+ return detail
46
+ ? `${baseMessage} ${detail}`
47
+ : `${baseMessage} Please continue without using it.`;
48
+ }
49
+ // ---------------------------------------------------------------------------
50
+ // Fuzzy tool name resolution
51
+ // ---------------------------------------------------------------------------
52
+ export function resolveToolName(rawName, toolsView) {
53
+ if (!rawName) {
54
+ const missingToolName = null;
55
+ return missingToolName;
56
+ }
57
+ const candidates = new Set();
58
+ const trimmed = rawName.trim();
59
+ if (trimmed) {
60
+ candidates.add(trimmed);
61
+ candidates.add(trimmed.toLowerCase());
62
+ }
63
+ if (trimmed.endsWith('Tool')) {
64
+ const withoutSuffix = trimmed.slice(0, -4);
65
+ if (withoutSuffix) {
66
+ candidates.add(withoutSuffix);
67
+ candidates.add(withoutSuffix.toLowerCase());
68
+ candidates.add(toSnakeCase(withoutSuffix));
69
+ }
70
+ }
71
+ candidates.add(toSnakeCase(trimmed));
72
+ for (const candidate of candidates) {
73
+ if (!candidate) {
74
+ continue;
75
+ }
76
+ if (toolsView.getToolMetadata(candidate)) {
77
+ return candidate;
78
+ }
79
+ }
80
+ const unresolvedToolName = null;
81
+ return unresolvedToolName;
82
+ }
83
+ // ---------------------------------------------------------------------------
84
+ // Output finalization
85
+ // ---------------------------------------------------------------------------
86
+ export function finalizeOutput(output) {
87
+ const message = output.final_message;
88
+ if (typeof message === 'string' && message.trim().length > 0) {
89
+ return;
90
+ }
91
+ // eslint-disable-next-line @typescript-eslint/no-unnecessary-condition -- Subagent tool-call runtime payloads.
92
+ const emittedVars = output.emitted_vars ?? {};
93
+ const emittedEntries = Object.entries(emittedVars)
94
+ .filter(([, value]) =>
95
+ // eslint-disable-next-line @typescript-eslint/no-unnecessary-condition -- Subagent tool-call runtime payloads.
96
+ value !== undefined &&
97
+ // eslint-disable-next-line @typescript-eslint/no-unnecessary-condition -- Subagent tool-call runtime payloads.
98
+ value !== null &&
99
+ String(value).trim().length > 0)
100
+ .map(([key, value]) => `${key}=${String(value)}`);
101
+ let baseMessage;
102
+ switch (output.terminate_reason) {
103
+ case SubagentTerminateMode.GOAL:
104
+ baseMessage = 'Completed the requested task.';
105
+ break;
106
+ case SubagentTerminateMode.TIMEOUT:
107
+ baseMessage = 'Stopped because the time limit was reached.';
108
+ break;
109
+ case SubagentTerminateMode.MAX_TURNS:
110
+ baseMessage = 'Stopped because the maximum number of turns was reached.';
111
+ break;
112
+ case SubagentTerminateMode.ERROR:
113
+ default:
114
+ baseMessage = 'Stopped due to an unrecoverable error.';
115
+ break;
116
+ }
117
+ const varsSuffix = emittedEntries.length > 0
118
+ ? ` Emitted variables: ${emittedEntries.join(', ')}.`
119
+ : '';
120
+ output.final_message = `${baseMessage}${varsSuffix}`.trim();
121
+ }
122
+ export function handleEmitValueCall(request, ctx) {
123
+ // eslint-disable-next-line @typescript-eslint/no-unnecessary-condition -- Subagent tool-call runtime payloads.
124
+ const args = request.args ?? {};
125
+ const variableName = typeof args.emit_variable_name === 'string'
126
+ ? args.emit_variable_name
127
+ : // eslint-disable-next-line sonarjs/no-nested-conditional -- Existing structure is intentionally preserved; refactoring this boundary is outside the lint slice.
128
+ typeof args.emitVariableName === 'string'
129
+ ? args.emitVariableName
130
+ : '';
131
+ const variableValue = typeof args.emit_variable_value === 'string'
132
+ ? args.emit_variable_value
133
+ : // eslint-disable-next-line sonarjs/no-nested-conditional -- Existing structure is intentionally preserved; refactoring this boundary is outside the lint slice.
134
+ typeof args.emitVariableValue === 'string'
135
+ ? args.emitVariableValue
136
+ : '';
137
+ if (variableName && variableValue) {
138
+ ctx.output.emitted_vars[variableName] = variableValue;
139
+ const message = `Emitted variable ${variableName} successfully`;
140
+ if (ctx.onMessage) {
141
+ ctx.onMessage(`[${ctx.subagentId}] ${message}`);
142
+ }
143
+ return [
144
+ {
145
+ functionResponse: {
146
+ id: request.callId,
147
+ name: request.name,
148
+ response: {
149
+ emit_variable_name: variableName,
150
+ emit_variable_value: variableValue,
151
+ message,
152
+ },
153
+ },
154
+ },
155
+ ];
156
+ }
157
+ const errorMessage = 'self_emitvalue requires emit_variable_name and emit_variable_value arguments.';
158
+ ctx.logger.warn(() => `Subagent ${ctx.subagentId} failed to emit value: ${errorMessage}`);
159
+ return [
160
+ {
161
+ functionResponse: {
162
+ id: request.callId,
163
+ name: request.name,
164
+ response: { error: errorMessage },
165
+ },
166
+ },
167
+ ];
168
+ }
169
+ export function buildPartsFromCompletedCalls(completedCalls, ctx) {
170
+ const aggregate = [];
171
+ for (const call of completedCalls) {
172
+ // eslint-disable-next-line @typescript-eslint/no-unnecessary-condition -- Subagent tool-call runtime payloads may be malformed at boundaries.
173
+ const responseParts = call.response?.responseParts;
174
+ // eslint-disable-next-line @typescript-eslint/no-unnecessary-condition -- Subagent tool-call runtime payloads may omit response parts.
175
+ if (responseParts !== undefined && responseParts.length > 0) {
176
+ for (const part of responseParts) {
177
+ // eslint-disable-next-line sonarjs/nested-control-flow -- Existing structure is intentionally preserved; refactoring this boundary is outside the lint slice.
178
+ if ('functionCall' in part) {
179
+ continue;
180
+ }
181
+ aggregate.push(part);
182
+ }
183
+ }
184
+ else {
185
+ aggregate.push({
186
+ functionResponse: {
187
+ id: call.request.callId,
188
+ name: call.request.name,
189
+ response: {
190
+ output: `Tool ${call.request.name} completed without response.`,
191
+ },
192
+ },
193
+ });
194
+ }
195
+ if (call.status === 'error') {
196
+ const errorMessage =
197
+ // eslint-disable-next-line @typescript-eslint/no-unnecessary-condition -- Subagent tool-call runtime payloads.
198
+ call.response?.error?.message ??
199
+ // eslint-disable-next-line @typescript-eslint/no-unnecessary-condition -- Subagent tool-call runtime payloads.
200
+ call.response?.resultDisplay ??
201
+ 'Tool execution failed.';
202
+ ctx.logger.warn(() => `Subagent ${ctx.subagentId} tool '${call.request.name}' failed: ${errorMessage}`);
203
+ }
204
+ else if (call.status === 'cancelled') {
205
+ ctx.logger.warn(() => `Subagent ${ctx.subagentId} tool '${call.request.name}' was cancelled.`);
206
+ }
207
+ const toolCanUpdateOutput =
208
+ // eslint-disable-next-line @typescript-eslint/no-unnecessary-condition -- Subagent tool-call runtime payloads.
209
+ call.status === 'success' && call.tool?.canUpdateOutput === true;
210
+ // eslint-disable-next-line @typescript-eslint/no-unnecessary-condition -- Subagent tool-call runtime payloads.
211
+ const display = call.response?.resultDisplay;
212
+ if (typeof display === 'string' &&
213
+ ctx.onMessage &&
214
+ display.trim() &&
215
+ !toolCanUpdateOutput) {
216
+ ctx.onMessage(display);
217
+ }
218
+ }
219
+ return aggregate;
220
+ }
221
+ export async function processFunctionCalls(functionCalls, abortController, promptId, ctx) {
222
+ const toolResponseParts = [];
223
+ let executedFunctionCallCount = 0;
224
+ for (const functionCall of functionCalls) {
225
+ const allowedTools = getHookRestrictedAllowedToolsForFunctionCall(functionCall);
226
+ if (isHookRestrictedToolCall(functionCall, allowedTools)) {
227
+ ctx.logger.debug(() => `Subagent ${ctx.subagentId} skipped hook-restricted tool '${functionCall.name}'`);
228
+ }
229
+ else {
230
+ executedFunctionCallCount += 1;
231
+ const callId = functionCall.id ?? `${functionCall.name}-${Date.now()}`;
232
+ const requestInfo = {
233
+ callId,
234
+ name: functionCall.name,
235
+ args: functionCall.args ?? {},
236
+ isClientInitiated: true,
237
+ prompt_id: promptId,
238
+ agentId: ctx.subagentId,
239
+ ...(allowedTools !== undefined
240
+ ? { hookRestrictedAllowedTools: allowedTools }
241
+ : {}),
242
+ };
243
+ ctx.logger.debug(() => `Subagent ${ctx.subagentId} executing tool '${requestInfo.name}' with args=${JSON.stringify(requestInfo.args)}`);
244
+ const toolResponse = await executeNonInteractiveTool(functionCall, requestInfo, callId, abortController, ctx);
245
+ logToolResult(functionCall, toolResponse, ctx);
246
+ if (isFatalToolError(toolResponse.errorType)) {
247
+ const fatalMessage = buildToolUnavailableMessage(functionCall.name, toolResponse.resultDisplay, toolResponse.error);
248
+ ctx.logger.warn(() => `Subagent ${ctx.subagentId} cannot use tool '${functionCall.name}': ${fatalMessage}`);
249
+ toolResponseParts.push({ text: fatalMessage });
250
+ ctx.output.final_message = fatalMessage;
251
+ }
252
+ else {
253
+ pushNonFunctionCallResponseParts(toolResponse.responseParts, toolResponseParts);
254
+ }
255
+ }
256
+ }
257
+ if (executedFunctionCallCount === 0) {
258
+ return [];
259
+ }
260
+ if (toolResponseParts.length === 0) {
261
+ toolResponseParts.push({
262
+ text: 'All tool calls failed. Please analyze the errors and try an alternative approach.',
263
+ });
264
+ }
265
+ return [{ role: 'user', parts: toolResponseParts }];
266
+ }
267
+ function pushNonFunctionCallResponseParts(responseParts, toolResponseParts) {
268
+ for (const part of responseParts) {
269
+ if (!('functionCall' in part)) {
270
+ toolResponseParts.push(part);
271
+ }
272
+ }
273
+ }
274
+ async function executeNonInteractiveTool(functionCall, requestInfo, callId, abortController, ctx) {
275
+ if (functionCall.name === 'self_emitvalue') {
276
+ const valName = String(requestInfo.args['emit_variable_name']);
277
+ const valVal = String(requestInfo.args['emit_variable_value']);
278
+ ctx.output.emitted_vars[valName] = valVal;
279
+ const successMessage = `Emitted variable ${valName} successfully`;
280
+ return {
281
+ callId,
282
+ responseParts: [
283
+ {
284
+ functionResponse: {
285
+ id: callId,
286
+ name: requestInfo.name,
287
+ response: {
288
+ emit_variable_name: valName,
289
+ emit_variable_value: valVal,
290
+ message: successMessage,
291
+ },
292
+ },
293
+ },
294
+ ],
295
+ resultDisplay: successMessage,
296
+ error: undefined,
297
+ errorType: undefined,
298
+ agentId: requestInfo.agentId,
299
+ };
300
+ }
301
+ const schedulerConfig = createSchedulerConfig(ctx.toolExecutorContext, ctx.config, { interactive: false });
302
+ const completed = await executeToolCall(schedulerConfig, requestInfo, abortController.signal, { messageBus: ctx.messageBus });
303
+ return completed.response;
304
+ }
305
+ function logToolResult(functionCall, toolResponse, ctx) {
306
+ if (toolResponse.error) {
307
+ debugLogger.error(`Error executing tool ${functionCall.name}: ${toolResponse.resultDisplay ?? toolResponse.error.message}`);
308
+ ctx.logger.warn(() => `Subagent ${ctx.subagentId} tool '${functionCall.name}' failed: ${toolResponse.error?.message}`);
309
+ }
310
+ else {
311
+ ctx.logger.debug(() => `Subagent ${ctx.subagentId} tool '${functionCall.name}' completed successfully`);
312
+ }
313
+ }
314
+ // ---------------------------------------------------------------------------
315
+ // Task-list completion prompt
316
+ // ---------------------------------------------------------------------------
317
+ export async function buildTodoCompletionPrompt(runtimeContext, subagentId, logger) {
318
+ const sessionId = runtimeContext.state.sessionId;
319
+ if (!sessionId) {
320
+ const missingSessionPrompt = null;
321
+ return missingSessionPrompt;
322
+ }
323
+ try {
324
+ let todos = await new TodoStore(sessionId, subagentId).readTodos();
325
+ if (todos.length === 0) {
326
+ todos = await new TodoStore(sessionId).readTodos();
327
+ }
328
+ if (todos.length === 0) {
329
+ const noTodosPrompt = null;
330
+ return noTodosPrompt;
331
+ }
332
+ const outstanding = todos.filter((todo) => todo.status !== 'completed');
333
+ if (outstanding.length === 0) {
334
+ const noOutstandingPrompt = null;
335
+ return noOutstandingPrompt;
336
+ }
337
+ const previewCount = Math.min(3, outstanding.length);
338
+ const previewLines = outstanding
339
+ .slice(0, previewCount)
340
+ .map((todo) => `- ${todo.content}`);
341
+ if (outstanding.length > previewCount) {
342
+ previewLines.push(`- ... and ${outstanding.length - previewCount} more`);
343
+ }
344
+ return [
345
+ 'You still have todos in your todo list. Complete them before finishing.',
346
+ previewLines.length > 0
347
+ ? `Outstanding items:\n${previewLines.join('\n')}`
348
+ : undefined,
349
+ ]
350
+ .filter(Boolean)
351
+ .join('\n\n');
352
+ }
353
+ catch (error) {
354
+ logger.warn(() => `Subagent ${subagentId} could not inspect todos: ${error instanceof Error ? error.message : String(error)}`);
355
+ const todoInspectionUnavailable = null;
356
+ return todoInspectionUnavailable;
357
+ }
358
+ }
359
+ //# sourceMappingURL=subagentToolProcessing.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"subagentToolProcessing.js","sourceRoot":"","sources":["../../../src/core/subagentToolProcessing.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAcH,OAAO,EACL,eAAe,GAEhB,MAAM,iCAAiC,CAAC;AAMzC,OAAO,EAAE,aAAa,EAAE,MAAM,8BAA8B,CAAC;AAG7D,OAAO,EAAE,cAAc,IAAI,SAAS,EAAE,MAAM,8BAA8B,CAAC;AAC3E,OAAO,EAAE,WAAW,EAAE,MAAM,kDAAkD,CAAC;AAC/E,OAAO,EACL,qBAAqB,GAEtB,MAAM,mDAAmD,CAAC;AAE3D,OAAO,EAAE,qBAAqB,EAAE,MAAM,2BAA2B,CAAC;AAClE,OAAO,EACL,4CAA4C,EAC5C,wBAAwB,GACzB,MAAM,2BAA2B,CAAC;AAEnC,8EAA8E;AAC9E,eAAe;AACf,8EAA8E;AAE9E,MAAM,UAAU,WAAW,CAAC,KAAa;IACvC,OAAO,KAAK;SACT,OAAO,CAAC,oBAAoB,EAAE,OAAO,CAAC;SACtC,OAAO,CAAC,SAAS,EAAE,GAAG,CAAC;SACvB,WAAW,EAAE,CAAC;AACnB,CAAC;AAED,MAAM,UAAU,gBAAgB,CAC9B,SAAoC;IAEpC,OAAO,CACL,SAAS,KAAK,aAAa,CAAC,aAAa;QACzC,SAAS,KAAK,aAAa,CAAC,mBAAmB,CAChD,CAAC;AACJ,CAAC;AAED,MAAM,UAAU,iBAAiB,CAC/B,aAAiC,EACjC,KAAa;IAEb,IAAI,KAAK,EAAE,OAAO,EAAE,CAAC;QACnB,OAAO,KAAK,CAAC,OAAO,CAAC;IACvB,CAAC;IACD,IAAI,OAAO,aAAa,KAAK,QAAQ,EAAE,CAAC;QACtC,OAAO,aAAa,CAAC;IACvB,CAAC;IACD,IACE,aAAa;QACb,OAAO,aAAa,KAAK,QAAQ;QACjC,SAAS,IAAI,aAAa;QAC1B,OAAQ,aAAuC,CAAC,OAAO,KAAK,QAAQ,EACpE,CAAC;QACD,OAAQ,aAAqC,CAAC,OAAO,CAAC;IACxD,CAAC;IACD,MAAM,oBAAoB,GAAuB,KAAK,CAAC,CAAC;IACxD,OAAO,oBAAoB,CAAC;AAC9B,CAAC;AAED,MAAM,UAAU,2BAA2B,CACzC,QAAgB,EAChB,aAAiC,EACjC,KAAa;IAEb,MAAM,MAAM,GAAG,iBAAiB,CAAC,aAAa,EAAE,KAAK,CAAC,CAAC;IACvD,MAAM,WAAW,GAAG,SAAS,QAAQ,yCAAyC,CAAC;IAC/E,OAAO,MAAM;QACX,CAAC,CAAC,GAAG,WAAW,IAAI,MAAM,EAAE;QAC5B,CAAC,CAAC,GAAG,WAAW,oCAAoC,CAAC;AACzD,CAAC;AAED,8EAA8E;AAC9E,6BAA6B;AAC7B,8EAA8E;AAE9E,MAAM,UAAU,eAAe,CAC7B,OAA2B,EAC3B,SAA2B;IAE3B,IAAI,CAAC,OAAO,EAAE,CAAC;QACb,MAAM,eAAe,GAAkB,IAAI,CAAC;QAC5C,OAAO,eAAe,CAAC;IACzB,CAAC;IAED,MAAM,UAAU,GAAG,IAAI,GAAG,EAAU,CAAC;IACrC,MAAM,OAAO,GAAG,OAAO,CAAC,IAAI,EAAE,CAAC;IAC/B,IAAI,OAAO,EAAE,CAAC;QACZ,UAAU,CAAC,GAAG,CAAC,OAAO,CAAC,CAAC;QACxB,UAAU,CAAC,GAAG,CAAC,OAAO,CAAC,WAAW,EAAE,CAAC,CAAC;IACxC,CAAC;IAED,IAAI,OAAO,CAAC,QAAQ,CAAC,MAAM,CAAC,EAAE,CAAC;QAC7B,MAAM,aAAa,GAAG,OAAO,CAAC,KAAK,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC;QAC3C,IAAI,aAAa,EAAE,CAAC;YAClB,UAAU,CAAC,GAAG,CAAC,aAAa,CAAC,CAAC;YAC9B,UAAU,CAAC,GAAG,CAAC,aAAa,CAAC,WAAW,EAAE,CAAC,CAAC;YAC5C,UAAU,CAAC,GAAG,CAAC,WAAW,CAAC,aAAa,CAAC,CAAC,CAAC;QAC7C,CAAC;IACH,CAAC;IAED,UAAU,CAAC,GAAG,CAAC,WAAW,CAAC,OAAO,CAAC,CAAC,CAAC;IAErC,KAAK,MAAM,SAAS,IAAI,UAAU,EAAE,CAAC;QACnC,IAAI,CAAC,SAAS,EAAE,CAAC;YACf,SAAS;QACX,CAAC;QACD,IAAI,SAAS,CAAC,eAAe,CAAC,SAAS,CAAC,EAAE,CAAC;YACzC,OAAO,SAAS,CAAC;QACnB,CAAC;IACH,CAAC;IAED,MAAM,kBAAkB,GAAkB,IAAI,CAAC;IAC/C,OAAO,kBAAkB,CAAC;AAC5B,CAAC;AAED,8EAA8E;AAC9E,sBAAsB;AACtB,8EAA8E;AAE9E,MAAM,UAAU,cAAc,CAAC,MAAoB;IACjD,MAAM,OAAO,GAAG,MAAM,CAAC,aAAa,CAAC;IACrC,IAAI,OAAO,OAAO,KAAK,QAAQ,IAAI,OAAO,CAAC,IAAI,EAAE,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;QAC7D,OAAO;IACT,CAAC;IAED,+GAA+G;IAC/G,MAAM,WAAW,GAAG,MAAM,CAAC,YAAY,IAAI,EAAE,CAAC;IAC9C,MAAM,cAAc,GAAG,MAAM,CAAC,OAAO,CAAC,WAAW,CAAC;SAC/C,MAAM,CACL,CAAC,CAAC,EAAE,KAAK,CAAC,EAAE,EAAE;IACZ,+GAA+G;IAC/G,KAAK,KAAK,SAAS;QACnB,+GAA+G;QAC/G,KAAK,KAAK,IAAI;QACd,MAAM,CAAC,KAAK,CAAC,CAAC,IAAI,EAAE,CAAC,MAAM,GAAG,CAAC,CAClC;SACA,GAAG,CAAC,CAAC,CAAC,GAAG,EAAE,KAAK,CAAC,EAAE,EAAE,CAAC,GAAG,GAAG,IAAI,MAAM,CAAC,KAAK,CAAC,EAAE,CAAC,CAAC;IAEpD,IAAI,WAAmB,CAAC;IACxB,QAAQ,MAAM,CAAC,gBAAgB,EAAE,CAAC;QAChC,KAAK,qBAAqB,CAAC,IAAI;YAC7B,WAAW,GAAG,+BAA+B,CAAC;YAC9C,MAAM;QACR,KAAK,qBAAqB,CAAC,OAAO;YAChC,WAAW,GAAG,6CAA6C,CAAC;YAC5D,MAAM;QACR,KAAK,qBAAqB,CAAC,SAAS;YAClC,WAAW,GAAG,0DAA0D,CAAC;YACzE,MAAM;QACR,KAAK,qBAAqB,CAAC,KAAK,CAAC;QACjC;YACE,WAAW,GAAG,wCAAwC,CAAC;YACvD,MAAM;IACV,CAAC;IAED,MAAM,UAAU,GACd,cAAc,CAAC,MAAM,GAAG,CAAC;QACvB,CAAC,CAAC,uBAAuB,cAAc,CAAC,IAAI,CAAC,IAAI,CAAC,GAAG;QACrD,CAAC,CAAC,EAAE,CAAC;IAET,MAAM,CAAC,aAAa,GAAG,GAAG,WAAW,GAAG,UAAU,EAAE,CAAC,IAAI,EAAE,CAAC;AAC9D,CAAC;AAaD,MAAM,UAAU,mBAAmB,CACjC,OAA4B,EAC5B,GAAqB;IAErB,+GAA+G;IAC/G,MAAM,IAAI,GAAG,OAAO,CAAC,IAAI,IAAI,EAAE,CAAC;IAChC,MAAM,YAAY,GAChB,OAAO,IAAI,CAAC,kBAAkB,KAAK,QAAQ;QACzC,CAAC,CAAC,IAAI,CAAC,kBAAkB;QACzB,CAAC,CAAC,gKAAgK;YAChK,OAAO,IAAI,CAAC,gBAAgB,KAAK,QAAQ;gBACzC,CAAC,CAAC,IAAI,CAAC,gBAAgB;gBACvB,CAAC,CAAC,EAAE,CAAC;IACX,MAAM,aAAa,GACjB,OAAO,IAAI,CAAC,mBAAmB,KAAK,QAAQ;QAC1C,CAAC,CAAC,IAAI,CAAC,mBAAmB;QAC1B,CAAC,CAAC,gKAAgK;YAChK,OAAO,IAAI,CAAC,iBAAiB,KAAK,QAAQ;gBAC1C,CAAC,CAAC,IAAI,CAAC,iBAAiB;gBACxB,CAAC,CAAC,EAAE,CAAC;IAEX,IAAI,YAAY,IAAI,aAAa,EAAE,CAAC;QAClC,GAAG,CAAC,MAAM,CAAC,YAAY,CAAC,YAAY,CAAC,GAAG,aAAa,CAAC;QACtD,MAAM,OAAO,GAAG,oBAAoB,YAAY,eAAe,CAAC;QAChE,IAAI,GAAG,CAAC,SAAS,EAAE,CAAC;YAClB,GAAG,CAAC,SAAS,CAAC,IAAI,GAAG,CAAC,UAAU,KAAK,OAAO,EAAE,CAAC,CAAC;QAClD,CAAC;QACD,OAAO;YACL;gBACE,gBAAgB,EAAE;oBAChB,EAAE,EAAE,OAAO,CAAC,MAAM;oBAClB,IAAI,EAAE,OAAO,CAAC,IAAI;oBAClB,QAAQ,EAAE;wBACR,kBAAkB,EAAE,YAAY;wBAChC,mBAAmB,EAAE,aAAa;wBAClC,OAAO;qBACR;iBACF;aACF;SACF,CAAC;IACJ,CAAC;IAED,MAAM,YAAY,GAChB,+EAA+E,CAAC;IAClF,GAAG,CAAC,MAAM,CAAC,IAAI,CACb,GAAG,EAAE,CAAC,YAAY,GAAG,CAAC,UAAU,0BAA0B,YAAY,EAAE,CACzE,CAAC;IACF,OAAO;QACL;YACE,gBAAgB,EAAE;gBAChB,EAAE,EAAE,OAAO,CAAC,MAAM;gBAClB,IAAI,EAAE,OAAO,CAAC,IAAI;gBAClB,QAAQ,EAAE,EAAE,KAAK,EAAE,YAAY,EAAE;aAClC;SACF;KACF,CAAC;AACJ,CAAC;AAYD,MAAM,UAAU,4BAA4B,CAC1C,cAAmC,EACnC,GAAsB;IAEtB,MAAM,SAAS,GAAW,EAAE,CAAC;IAC7B,KAAK,MAAM,IAAI,IAAI,cAAc,EAAE,CAAC;QAClC,8IAA8I;QAC9I,MAAM,aAAa,GAAG,IAAI,CAAC,QAAQ,EAAE,aAAa,CAAC;QACnD,uIAAuI;QACvI,IAAI,aAAa,KAAK,SAAS,IAAI,aAAa,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;YAC5D,KAAK,MAAM,IAAI,IAAI,aAAa,EAAE,CAAC;gBACjC,8JAA8J;gBAC9J,IAAI,cAAc,IAAI,IAAI,EAAE,CAAC;oBAC3B,SAAS;gBACX,CAAC;gBACD,SAAS,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;YACvB,CAAC;QACH,CAAC;aAAM,CAAC;YACN,SAAS,CAAC,IAAI,CAAC;gBACb,gBAAgB,EAAE;oBAChB,EAAE,EAAE,IAAI,CAAC,OAAO,CAAC,MAAM;oBACvB,IAAI,EAAE,IAAI,CAAC,OAAO,CAAC,IAAI;oBACvB,QAAQ,EAAE;wBACR,MAAM,EAAE,QAAQ,IAAI,CAAC,OAAO,CAAC,IAAI,8BAA8B;qBAChE;iBACF;aACF,CAAC,CAAC;QACL,CAAC;QAED,IAAI,IAAI,CAAC,MAAM,KAAK,OAAO,EAAE,CAAC;YAC5B,MAAM,YAAY;YAChB,+GAA+G;YAC/G,IAAI,CAAC,QAAQ,EAAE,KAAK,EAAE,OAAO;gBAC7B,+GAA+G;gBAC/G,IAAI,CAAC,QAAQ,EAAE,aAAa;gBAC5B,wBAAwB,CAAC;YAC3B,GAAG,CAAC,MAAM,CAAC,IAAI,CACb,GAAG,EAAE,CACH,YAAY,GAAG,CAAC,UAAU,UAAU,IAAI,CAAC,OAAO,CAAC,IAAI,aAAa,YAAY,EAAE,CACnF,CAAC;QACJ,CAAC;aAAM,IAAI,IAAI,CAAC,MAAM,KAAK,WAAW,EAAE,CAAC;YACvC,GAAG,CAAC,MAAM,CAAC,IAAI,CACb,GAAG,EAAE,CACH,YAAY,GAAG,CAAC,UAAU,UAAU,IAAI,CAAC,OAAO,CAAC,IAAI,kBAAkB,CAC1E,CAAC;QACJ,CAAC;QAED,MAAM,mBAAmB;QACvB,+GAA+G;QAC/G,IAAI,CAAC,MAAM,KAAK,SAAS,IAAI,IAAI,CAAC,IAAI,EAAE,eAAe,KAAK,IAAI,CAAC;QAEnE,+GAA+G;QAC/G,MAAM,OAAO,GAAG,IAAI,CAAC,QAAQ,EAAE,aAAa,CAAC;QAC7C,IACE,OAAO,OAAO,KAAK,QAAQ;YAC3B,GAAG,CAAC,SAAS;YACb,OAAO,CAAC,IAAI,EAAE;YACd,CAAC,mBAAmB,EACpB,CAAC;YACD,GAAG,CAAC,SAAS,CAAC,OAAO,CAAC,CAAC;QACzB,CAAC;IACH,CAAC;IACD,OAAO,SAAS,CAAC;AACnB,CAAC;AAeD,MAAM,CAAC,KAAK,UAAU,oBAAoB,CACxC,aAA6B,EAC7B,eAAgC,EAChC,QAAgB,EAChB,GAAgC;IAEhC,MAAM,iBAAiB,GAAW,EAAE,CAAC;IAErC,IAAI,yBAAyB,GAAG,CAAC,CAAC;IAClC,KAAK,MAAM,YAAY,IAAI,aAAa,EAAE,CAAC;QACzC,MAAM,YAAY,GAChB,4CAA4C,CAAC,YAAY,CAAC,CAAC;QAC7D,IAAI,wBAAwB,CAAC,YAAY,EAAE,YAAY,CAAC,EAAE,CAAC;YACzD,GAAG,CAAC,MAAM,CAAC,KAAK,CACd,GAAG,EAAE,CACH,YAAY,GAAG,CAAC,UAAU,kCAAkC,YAAY,CAAC,IAAI,GAAG,CACnF,CAAC;QACJ,CAAC;aAAM,CAAC;YACN,yBAAyB,IAAI,CAAC,CAAC;YAC/B,MAAM,MAAM,GAAG,YAAY,CAAC,EAAE,IAAI,GAAG,YAAY,CAAC,IAAI,IAAI,IAAI,CAAC,GAAG,EAAE,EAAE,CAAC;YACvE,MAAM,WAAW,GAAwB;gBACvC,MAAM;gBACN,IAAI,EAAE,YAAY,CAAC,IAAc;gBACjC,IAAI,EAAE,YAAY,CAAC,IAAI,IAAI,EAAE;gBAC7B,iBAAiB,EAAE,IAAI;gBACvB,SAAS,EAAE,QAAQ;gBACnB,OAAO,EAAE,GAAG,CAAC,UAAU;gBACvB,GAAG,CAAC,YAAY,KAAK,SAAS;oBAC5B,CAAC,CAAC,EAAE,0BAA0B,EAAE,YAAY,EAAE;oBAC9C,CAAC,CAAC,EAAE,CAAC;aACR,CAAC;YAEF,GAAG,CAAC,MAAM,CAAC,KAAK,CACd,GAAG,EAAE,CACH,YAAY,GAAG,CAAC,UAAU,oBAAoB,WAAW,CAAC,IAAI,eAAe,IAAI,CAAC,SAAS,CAAC,WAAW,CAAC,IAAI,CAAC,EAAE,CAClH,CAAC;YAEF,MAAM,YAAY,GAAG,MAAM,yBAAyB,CAClD,YAAY,EACZ,WAAW,EACX,MAAM,EACN,eAAe,EACf,GAAG,CACJ,CAAC;YAEF,aAAa,CAAC,YAAY,EAAE,YAAY,EAAE,GAAG,CAAC,CAAC;YAE/C,IAAI,gBAAgB,CAAC,YAAY,CAAC,SAAS,CAAC,EAAE,CAAC;gBAC7C,MAAM,YAAY,GAAG,2BAA2B,CAC9C,YAAY,CAAC,IAAc,EAC3B,YAAY,CAAC,aAAa,EAC1B,YAAY,CAAC,KAAK,CACnB,CAAC;gBACF,GAAG,CAAC,MAAM,CAAC,IAAI,CACb,GAAG,EAAE,CACH,YAAY,GAAG,CAAC,UAAU,qBAAqB,YAAY,CAAC,IAAI,MAAM,YAAY,EAAE,CACvF,CAAC;gBACF,iBAAiB,CAAC,IAAI,CAAC,EAAE,IAAI,EAAE,YAAY,EAAE,CAAC,CAAC;gBAC/C,GAAG,CAAC,MAAM,CAAC,aAAa,GAAG,YAAY,CAAC;YAC1C,CAAC;iBAAM,CAAC;gBACN,gCAAgC,CAC9B,YAAY,CAAC,aAAa,EAC1B,iBAAiB,CAClB,CAAC;YACJ,CAAC;QACH,CAAC;IACH,CAAC;IAED,IAAI,yBAAyB,KAAK,CAAC,EAAE,CAAC;QACpC,OAAO,EAAE,CAAC;IACZ,CAAC;IAED,IAAI,iBAAiB,CAAC,MAAM,KAAK,CAAC,EAAE,CAAC;QACnC,iBAAiB,CAAC,IAAI,CAAC;YACrB,IAAI,EAAE,mFAAmF;SAC1F,CAAC,CAAC;IACL,CAAC;IAED,OAAO,CAAC,EAAE,IAAI,EAAE,MAAM,EAAE,KAAK,EAAE,iBAAiB,EAAE,CAAC,CAAC;AACtD,CAAC;AAED,SAAS,gCAAgC,CACvC,aAAqB,EACrB,iBAAyB;IAEzB,KAAK,MAAM,IAAI,IAAI,aAAa,EAAE,CAAC;QACjC,IAAI,CAAC,CAAC,cAAc,IAAI,IAAI,CAAC,EAAE,CAAC;YAC9B,iBAAiB,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;QAC/B,CAAC;IACH,CAAC;AACH,CAAC;AAED,KAAK,UAAU,yBAAyB,CACtC,YAA0B,EAC1B,WAAgC,EAChC,MAAc,EACd,eAAgC,EAChC,GAAgC;IAEhC,IAAI,YAAY,CAAC,IAAI,KAAK,gBAAgB,EAAE,CAAC;QAC3C,MAAM,OAAO,GAAG,MAAM,CAAC,WAAW,CAAC,IAAI,CAAC,oBAAoB,CAAC,CAAC,CAAC;QAC/D,MAAM,MAAM,GAAG,MAAM,CAAC,WAAW,CAAC,IAAI,CAAC,qBAAqB,CAAC,CAAC,CAAC;QAC/D,GAAG,CAAC,MAAM,CAAC,YAAY,CAAC,OAAO,CAAC,GAAG,MAAM,CAAC;QAE1C,MAAM,cAAc,GAAG,oBAAoB,OAAO,eAAe,CAAC;QAClE,OAAO;YACL,MAAM;YACN,aAAa,EAAE;gBACb;oBACE,gBAAgB,EAAE;wBAChB,EAAE,EAAE,MAAM;wBACV,IAAI,EAAE,WAAW,CAAC,IAAI;wBACtB,QAAQ,EAAE;4BACR,kBAAkB,EAAE,OAAO;4BAC3B,mBAAmB,EAAE,MAAM;4BAC3B,OAAO,EAAE,cAAc;yBACxB;qBACF;iBACF;aACF;YACD,aAAa,EAAE,cAAc;YAC7B,KAAK,EAAE,SAAS;YAChB,SAAS,EAAE,SAAS;YACpB,OAAO,EAAE,WAAW,CAAC,OAAO;SAC7B,CAAC;IACJ,CAAC;IAED,MAAM,eAAe,GAAG,qBAAqB,CAC3C,GAAG,CAAC,mBAAmB,EACvB,GAAG,CAAC,MAAM,EACV,EAAE,WAAW,EAAE,KAAK,EAAE,CACvB,CAAC;IACF,MAAM,SAAS,GAAG,MAAM,eAAe,CACrC,eAAe,EACf,WAAW,EACX,eAAe,CAAC,MAAM,EACtB,EAAE,UAAU,EAAE,GAAG,CAAC,UAAU,EAAE,CAC/B,CAAC;IACF,OAAO,SAAS,CAAC,QAAQ,CAAC;AAC5B,CAAC;AAED,SAAS,aAAa,CACpB,YAA0B,EAC1B,YAAkC,EAClC,GAAgC;IAEhC,IAAI,YAAY,CAAC,KAAK,EAAE,CAAC;QACvB,WAAW,CAAC,KAAK,CACf,wBAAwB,YAAY,CAAC,IAAI,KAAK,YAAY,CAAC,aAAa,IAAI,YAAY,CAAC,KAAK,CAAC,OAAO,EAAE,CACzG,CAAC;QACF,GAAG,CAAC,MAAM,CAAC,IAAI,CACb,GAAG,EAAE,CACH,YAAY,GAAG,CAAC,UAAU,UAAU,YAAY,CAAC,IAAI,aAAa,YAAY,CAAC,KAAK,EAAE,OAAO,EAAE,CAClG,CAAC;IACJ,CAAC;SAAM,CAAC;QACN,GAAG,CAAC,MAAM,CAAC,KAAK,CACd,GAAG,EAAE,CACH,YAAY,GAAG,CAAC,UAAU,UAAU,YAAY,CAAC,IAAI,0BAA0B,CAClF,CAAC;IACJ,CAAC;AACH,CAAC;AAED,8EAA8E;AAC9E,8BAA8B;AAC9B,8EAA8E;AAE9E,MAAM,CAAC,KAAK,UAAU,yBAAyB,CAC7C,cAAmC,EACnC,UAAkB,EAClB,MAAmB;IAEnB,MAAM,SAAS,GAAG,cAAc,CAAC,KAAK,CAAC,SAAS,CAAC;IACjD,IAAI,CAAC,SAAS,EAAE,CAAC;QACf,MAAM,oBAAoB,GAAkB,IAAI,CAAC;QACjD,OAAO,oBAAoB,CAAC;IAC9B,CAAC;IAED,IAAI,CAAC;QACH,IAAI,KAAK,GAAG,MAAM,IAAI,SAAS,CAAC,SAAS,EAAE,UAAU,CAAC,CAAC,SAAS,EAAE,CAAC;QACnE,IAAI,KAAK,CAAC,MAAM,KAAK,CAAC,EAAE,CAAC;YACvB,KAAK,GAAG,MAAM,IAAI,SAAS,CAAC,SAAS,CAAC,CAAC,SAAS,EAAE,CAAC;QACrD,CAAC;QAED,IAAI,KAAK,CAAC,MAAM,KAAK,CAAC,EAAE,CAAC;YACvB,MAAM,aAAa,GAAkB,IAAI,CAAC;YAC1C,OAAO,aAAa,CAAC;QACvB,CAAC;QAED,MAAM,WAAW,GAAG,KAAK,CAAC,MAAM,CAAC,CAAC,IAAI,EAAE,EAAE,CAAC,IAAI,CAAC,MAAM,KAAK,WAAW,CAAC,CAAC;QAExE,IAAI,WAAW,CAAC,MAAM,KAAK,CAAC,EAAE,CAAC;YAC7B,MAAM,mBAAmB,GAAkB,IAAI,CAAC;YAChD,OAAO,mBAAmB,CAAC;QAC7B,CAAC;QAED,MAAM,YAAY,GAAG,IAAI,CAAC,GAAG,CAAC,CAAC,EAAE,WAAW,CAAC,MAAM,CAAC,CAAC;QACrD,MAAM,YAAY,GAAG,WAAW;aAC7B,KAAK,CAAC,CAAC,EAAE,YAAY,CAAC;aACtB,GAAG,CAAC,CAAC,IAAI,EAAE,EAAE,CAAC,KAAK,IAAI,CAAC,OAAO,EAAE,CAAC,CAAC;QACtC,IAAI,WAAW,CAAC,MAAM,GAAG,YAAY,EAAE,CAAC;YACtC,YAAY,CAAC,IAAI,CAAC,aAAa,WAAW,CAAC,MAAM,GAAG,YAAY,OAAO,CAAC,CAAC;QAC3E,CAAC;QAED,OAAO;YACL,yEAAyE;YACzE,YAAY,CAAC,MAAM,GAAG,CAAC;gBACrB,CAAC,CAAC,uBAAuB,YAAY,CAAC,IAAI,CAAC,IAAI,CAAC,EAAE;gBAClD,CAAC,CAAC,SAAS;SACd;aACE,MAAM,CAAC,OAAO,CAAC;aACf,IAAI,CAAC,MAAM,CAAC,CAAC;IAClB,CAAC;IAAC,OAAO,KAAK,EAAE,CAAC;QACf,MAAM,CAAC,IAAI,CACT,GAAG,EAAE,CACH,YAAY,UAAU,6BAA6B,KAAK,YAAY,KAAK,CAAC,CAAC,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC,CAAC,MAAM,CAAC,KAAK,CAAC,EAAE,CAC9G,CAAC;QACF,MAAM,yBAAyB,GAAkB,IAAI,CAAC;QACtD,OAAO,yBAAyB,CAAC;IACnC,CAAC;AACH,CAAC"}
@@ -0,0 +1,18 @@
1
+ /**
2
+ * @license
3
+ * Copyright 2025 Vybestack LLC
4
+ * SPDX-License-Identifier: Apache-2.0
5
+ */
6
+ import { canonicalizeToolName } from '@vybestack/llxprt-code-tools';
7
+ export { canonicalizeToolName };
8
+ export interface ToolGovernanceConfig {
9
+ getEphemeralSettings?: () => Record<string, unknown> | undefined;
10
+ getExcludeTools?: () => string[] | undefined;
11
+ }
12
+ export interface ToolGovernance {
13
+ allowed: Set<string>;
14
+ disabled: Set<string>;
15
+ excluded: Set<string>;
16
+ }
17
+ export declare function buildToolGovernance(config: ToolGovernanceConfig): ToolGovernance;
18
+ export declare function isToolBlocked(toolName: string, governance: ToolGovernance): boolean;
@@ -0,0 +1,50 @@
1
+ /**
2
+ * @license
3
+ * Copyright 2025 Vybestack LLC
4
+ * SPDX-License-Identifier: Apache-2.0
5
+ */
6
+ import { canonicalizeToolName } from '@vybestack/llxprt-code-tools';
7
+ export { canonicalizeToolName };
8
+ function isStringArray(value) {
9
+ return (Array.isArray(value) && value.every((item) => typeof item === 'string'));
10
+ }
11
+ export function buildToolGovernance(config) {
12
+ const ephemerals = typeof config.getEphemeralSettings === 'function'
13
+ ? (config.getEphemeralSettings() ?? {})
14
+ : {};
15
+ const allowedRaw = isStringArray(ephemerals['tools.allowed'])
16
+ ? ephemerals['tools.allowed']
17
+ : [];
18
+ let disabledRaw;
19
+ if (isStringArray(ephemerals['tools.disabled'])) {
20
+ disabledRaw = ephemerals['tools.disabled'];
21
+ }
22
+ else if (isStringArray(ephemerals['disabled-tools'])) {
23
+ disabledRaw = ephemerals['disabled-tools'];
24
+ }
25
+ else {
26
+ disabledRaw = [];
27
+ }
28
+ const excludedRaw = typeof config.getExcludeTools === 'function'
29
+ ? (config.getExcludeTools() ?? [])
30
+ : [];
31
+ return {
32
+ allowed: new Set(allowedRaw.map(canonicalizeToolName)),
33
+ disabled: new Set(disabledRaw.map(canonicalizeToolName)),
34
+ excluded: new Set(excludedRaw.map(canonicalizeToolName)),
35
+ };
36
+ }
37
+ export function isToolBlocked(toolName, governance) {
38
+ const canonical = canonicalizeToolName(toolName);
39
+ if (governance.excluded.has(canonical)) {
40
+ return true;
41
+ }
42
+ if (governance.disabled.has(canonical)) {
43
+ return true;
44
+ }
45
+ if (governance.allowed.size > 0 && !governance.allowed.has(canonical)) {
46
+ return true;
47
+ }
48
+ return false;
49
+ }
50
+ //# sourceMappingURL=toolGovernance.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"toolGovernance.js","sourceRoot":"","sources":["../../../src/core/toolGovernance.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAEH,OAAO,EAAE,oBAAoB,EAAE,MAAM,8BAA8B,CAAC;AAEpE,OAAO,EAAE,oBAAoB,EAAE,CAAC;AAEhC,SAAS,aAAa,CAAC,KAAc;IACnC,OAAO,CACL,KAAK,CAAC,OAAO,CAAC,KAAK,CAAC,IAAI,KAAK,CAAC,KAAK,CAAC,CAAC,IAAI,EAAE,EAAE,CAAC,OAAO,IAAI,KAAK,QAAQ,CAAC,CACxE,CAAC;AACJ,CAAC;AAaD,MAAM,UAAU,mBAAmB,CACjC,MAA4B;IAE5B,MAAM,UAAU,GACd,OAAO,MAAM,CAAC,oBAAoB,KAAK,UAAU;QAC/C,CAAC,CAAC,CAAC,MAAM,CAAC,oBAAoB,EAAE,IAAI,EAAE,CAAC;QACvC,CAAC,CAAC,EAAE,CAAC;IAET,MAAM,UAAU,GAAG,aAAa,CAAC,UAAU,CAAC,eAAe,CAAC,CAAC;QAC3D,CAAC,CAAC,UAAU,CAAC,eAAe,CAAC;QAC7B,CAAC,CAAC,EAAE,CAAC;IAEP,IAAI,WAAqB,CAAC;IAC1B,IAAI,aAAa,CAAC,UAAU,CAAC,gBAAgB,CAAC,CAAC,EAAE,CAAC;QAChD,WAAW,GAAG,UAAU,CAAC,gBAAgB,CAAC,CAAC;IAC7C,CAAC;SAAM,IAAI,aAAa,CAAC,UAAU,CAAC,gBAAgB,CAAC,CAAC,EAAE,CAAC;QACvD,WAAW,GAAG,UAAU,CAAC,gBAAgB,CAAC,CAAC;IAC7C,CAAC;SAAM,CAAC;QACN,WAAW,GAAG,EAAE,CAAC;IACnB,CAAC;IAED,MAAM,WAAW,GACf,OAAO,MAAM,CAAC,eAAe,KAAK,UAAU;QAC1C,CAAC,CAAC,CAAC,MAAM,CAAC,eAAe,EAAE,IAAI,EAAE,CAAC;QAClC,CAAC,CAAC,EAAE,CAAC;IAET,OAAO;QACL,OAAO,EAAE,IAAI,GAAG,CAAC,UAAU,CAAC,GAAG,CAAC,oBAAoB,CAAC,CAAC;QACtD,QAAQ,EAAE,IAAI,GAAG,CAAC,WAAW,CAAC,GAAG,CAAC,oBAAoB,CAAC,CAAC;QACxD,QAAQ,EAAE,IAAI,GAAG,CAAC,WAAW,CAAC,GAAG,CAAC,oBAAoB,CAAC,CAAC;KACzD,CAAC;AACJ,CAAC;AAED,MAAM,UAAU,aAAa,CAC3B,QAAgB,EAChB,UAA0B;IAE1B,MAAM,SAAS,GAAG,oBAAoB,CAAC,QAAQ,CAAC,CAAC;IAEjD,IAAI,UAAU,CAAC,QAAQ,CAAC,GAAG,CAAC,SAAS,CAAC,EAAE,CAAC;QACvC,OAAO,IAAI,CAAC;IACd,CAAC;IAED,IAAI,UAAU,CAAC,QAAQ,CAAC,GAAG,CAAC,SAAS,CAAC,EAAE,CAAC;QACvC,OAAO,IAAI,CAAC;IACd,CAAC;IAED,IAAI,UAAU,CAAC,OAAO,CAAC,IAAI,GAAG,CAAC,IAAI,CAAC,UAAU,CAAC,OAAO,CAAC,GAAG,CAAC,SAAS,CAAC,EAAE,CAAC;QACtE,OAAO,IAAI,CAAC;IACd,CAAC;IAED,OAAO,KAAK,CAAC;AACf,CAAC"}
@@ -0,0 +1,47 @@
1
+ /**
2
+ * @license
3
+ * Copyright 2025 Google LLC
4
+ * SPDX-License-Identifier: Apache-2.0
5
+ */
6
+ import type { GenerateContentResponse, FinishReason } from '@google/genai';
7
+ import { type PartListUnion } from '@google/genai';
8
+ import type { ChatSession } from './chatSession.js';
9
+ import { type ToolCallRequestInfo, type ServerGeminiStreamEvent } from '@vybestack/llxprt-code-core/core/turn.js';
10
+ /** @deprecated Use DEFAULT_STREAM_IDLE_TIMEOUT_MS from streamIdleTimeout.js instead */
11
+ export declare const TURN_STREAM_IDLE_TIMEOUT_MS = 0;
12
+ export { DEFAULT_AGENT_ID, GeminiEventType, CompressionStatus, PerformCompressionResult, } from '@vybestack/llxprt-code-core/core/turn.js';
13
+ export type { ToolCallRequestInfo, ToolCallResponseInfo, ServerGeminiStreamEvent, ServerGeminiContentEvent, ServerGeminiThoughtEvent, ServerGeminiToolCallRequestEvent, ServerGeminiToolCallResponseEvent, ServerGeminiToolCallConfirmationEvent, ServerGeminiUserCancelledEvent, ServerGeminiStreamIdleTimeoutEvent, ServerGeminiErrorEvent, ServerGeminiChatCompressedEvent, ServerGeminiUsageMetadataEvent, ServerGeminiMaxSessionTurnsEvent, ServerGeminiFinishedEvent, ServerGeminiLoopDetectedEvent, ServerGeminiCitationEvent, ServerGeminiRetryEvent, ServerGeminiInvalidStreamEvent, ServerGeminiAgentExecutionStoppedEvent, ServerGeminiAgentExecutionBlockedEvent, ServerGeminiContextWindowWillOverflowEvent, ServerGeminiModelInfoEvent, ServerToolCallConfirmationDetails, ChatCompressionInfo, ModelInfo, ServerGeminiFinishedOutcome, StructuredError, ServerTool, } from '@vybestack/llxprt-code-core/core/turn.js';
14
+ export declare class Turn {
15
+ private readonly chat;
16
+ private readonly prompt_id;
17
+ private readonly agentId;
18
+ private readonly providerName;
19
+ readonly pendingToolCalls: ToolCallRequestInfo[];
20
+ private debugResponses;
21
+ finishReason: FinishReason | undefined;
22
+ private logger;
23
+ constructor(chat: ChatSession, prompt_id: string, agentId?: string, providerName?: string);
24
+ /**
25
+ * Check if citations should be shown for the current user/settings.
26
+ * Based on the upstream implementation from commit 997136ae.
27
+ */
28
+ private shouldShowCitations;
29
+ /**
30
+ * Emits a citation event with the given text.
31
+ * This integrates with llxprt's provider abstraction to work across all providers.
32
+ */
33
+ private emitCitation;
34
+ private emitFinishReason;
35
+ private logNoFinishReason;
36
+ private pushFilteredDebugResponse;
37
+ private processStreamChunk;
38
+ private createEmptyResponseOutcome;
39
+ private consumeStreamEvents;
40
+ private mergeResponseOutcome;
41
+ private extractErrorStatus;
42
+ private handleRunError;
43
+ run(req: PartListUnion, signal: AbortSignal): AsyncGenerator<ServerGeminiStreamEvent>;
44
+ private handlePendingFunctionCall;
45
+ private createSyntheticFunctionCallId;
46
+ getDebugResponses(): GenerateContentResponse[];
47
+ }