@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.
- package/dist/.last_build +0 -0
- package/dist/index.d.ts +10 -0
- package/dist/index.js +11 -0
- package/dist/index.js.map +1 -0
- package/dist/src/agents/executor-prompt-builder.d.ts +19 -0
- package/dist/src/agents/executor-prompt-builder.js +44 -0
- package/dist/src/agents/executor-prompt-builder.js.map +1 -0
- package/dist/src/agents/executor-termination.d.ts +22 -0
- package/dist/src/agents/executor-termination.js +44 -0
- package/dist/src/agents/executor-termination.js.map +1 -0
- package/dist/src/agents/executor-validation.d.ts +17 -0
- package/dist/src/agents/executor-validation.js +35 -0
- package/dist/src/agents/executor-validation.js.map +1 -0
- package/dist/src/agents/executor.d.ts +136 -0
- package/dist/src/agents/executor.js +874 -0
- package/dist/src/agents/executor.js.map +1 -0
- package/dist/src/agents/invocation.d.ts +45 -0
- package/dist/src/agents/invocation.js +118 -0
- package/dist/src/agents/invocation.js.map +1 -0
- package/dist/src/agents/recovery.d.ts +75 -0
- package/dist/src/agents/recovery.js +107 -0
- package/dist/src/agents/recovery.js.map +1 -0
- package/dist/src/agents/types.d.ts +149 -0
- package/dist/src/agents/types.js +18 -0
- package/dist/src/agents/types.js.map +1 -0
- package/dist/src/agents/utils.d.ts +15 -0
- package/dist/src/agents/utils.js +28 -0
- package/dist/src/agents/utils.js.map +1 -0
- package/dist/src/compression/CompressionHandler.d.ts +178 -0
- package/dist/src/compression/CompressionHandler.js +630 -0
- package/dist/src/compression/CompressionHandler.js.map +1 -0
- package/dist/src/compression/HighDensityStrategy.d.ts +113 -0
- package/dist/src/compression/HighDensityStrategy.js +769 -0
- package/dist/src/compression/HighDensityStrategy.js.map +1 -0
- package/dist/src/compression/MiddleOutStrategy.d.ts +27 -0
- package/dist/src/compression/MiddleOutStrategy.js +347 -0
- package/dist/src/compression/MiddleOutStrategy.js.map +1 -0
- package/dist/src/compression/OneShotStrategy.d.ts +22 -0
- package/dist/src/compression/OneShotStrategy.js +235 -0
- package/dist/src/compression/OneShotStrategy.js.map +1 -0
- package/dist/src/compression/TopDownTruncationStrategy.d.ts +13 -0
- package/dist/src/compression/TopDownTruncationStrategy.js +74 -0
- package/dist/src/compression/TopDownTruncationStrategy.js.map +1 -0
- package/dist/src/compression/compressionBudgeting.d.ts +34 -0
- package/dist/src/compression/compressionBudgeting.js +139 -0
- package/dist/src/compression/compressionBudgeting.js.map +1 -0
- package/dist/src/compression/compressionStrategyFactory.d.ts +23 -0
- package/dist/src/compression/compressionStrategyFactory.js +40 -0
- package/dist/src/compression/compressionStrategyFactory.js.map +1 -0
- package/dist/src/compression/index.d.ts +16 -0
- package/dist/src/compression/index.js +17 -0
- package/dist/src/compression/index.js.map +1 -0
- package/dist/src/compression/reasoningUtils.d.ts +18 -0
- package/dist/src/compression/reasoningUtils.js +22 -0
- package/dist/src/compression/reasoningUtils.js.map +1 -0
- package/dist/src/compression/utils.d.ts +114 -0
- package/dist/src/compression/utils.js +316 -0
- package/dist/src/compression/utils.js.map +1 -0
- package/dist/src/core/AgentHookManager.d.ts +41 -0
- package/dist/src/core/AgentHookManager.js +65 -0
- package/dist/src/core/AgentHookManager.js.map +1 -0
- package/dist/src/core/ChatSessionFactory.d.ts +50 -0
- package/dist/src/core/ChatSessionFactory.js +216 -0
- package/dist/src/core/ChatSessionFactory.js.map +1 -0
- package/dist/src/core/ConversationManager.d.ts +113 -0
- package/dist/src/core/ConversationManager.js +311 -0
- package/dist/src/core/ConversationManager.js.map +1 -0
- package/dist/src/core/DirectMessageProcessor.d.ts +79 -0
- package/dist/src/core/DirectMessageProcessor.js +478 -0
- package/dist/src/core/DirectMessageProcessor.js.map +1 -0
- package/dist/src/core/IdeContextTracker.d.ts +56 -0
- package/dist/src/core/IdeContextTracker.js +207 -0
- package/dist/src/core/IdeContextTracker.js.map +1 -0
- package/dist/src/core/MessageConverter.d.ts +78 -0
- package/dist/src/core/MessageConverter.js +492 -0
- package/dist/src/core/MessageConverter.js.map +1 -0
- package/dist/src/core/MessageStreamOrchestrator.d.ts +85 -0
- package/dist/src/core/MessageStreamOrchestrator.js +448 -0
- package/dist/src/core/MessageStreamOrchestrator.js.map +1 -0
- package/dist/src/core/MessageStreamTerminalHandler.d.ts +16 -0
- package/dist/src/core/MessageStreamTerminalHandler.js +170 -0
- package/dist/src/core/MessageStreamTerminalHandler.js.map +1 -0
- package/dist/src/core/StreamProcessor.d.ts +105 -0
- package/dist/src/core/StreamProcessor.js +660 -0
- package/dist/src/core/StreamProcessor.js.map +1 -0
- package/dist/src/core/TodoContinuationService.d.ts +74 -0
- package/dist/src/core/TodoContinuationService.js +312 -0
- package/dist/src/core/TodoContinuationService.js.map +1 -0
- package/dist/src/core/TurnProcessor.d.ts +91 -0
- package/dist/src/core/TurnProcessor.js +540 -0
- package/dist/src/core/TurnProcessor.js.map +1 -0
- package/dist/src/core/baseLlmClient.d.ts +115 -0
- package/dist/src/core/baseLlmClient.js +231 -0
- package/dist/src/core/baseLlmClient.js.map +1 -0
- package/dist/src/core/bucketFailoverIntegration.d.ts +62 -0
- package/dist/src/core/bucketFailoverIntegration.js +186 -0
- package/dist/src/core/bucketFailoverIntegration.js.map +1 -0
- package/dist/src/core/chatSession.d.ts +121 -0
- package/dist/src/core/chatSession.js +720 -0
- package/dist/src/core/chatSession.js.map +1 -0
- package/dist/src/core/client.d.ts +132 -0
- package/dist/src/core/client.js +524 -0
- package/dist/src/core/client.js.map +1 -0
- package/dist/src/core/clientHelpers.d.ts +15 -0
- package/dist/src/core/clientHelpers.js +122 -0
- package/dist/src/core/clientHelpers.js.map +1 -0
- package/dist/src/core/clientLlmUtilities.d.ts +30 -0
- package/dist/src/core/clientLlmUtilities.js +125 -0
- package/dist/src/core/clientLlmUtilities.js.map +1 -0
- package/dist/src/core/clientToolGovernance.d.ts +37 -0
- package/dist/src/core/clientToolGovernance.js +104 -0
- package/dist/src/core/clientToolGovernance.js.map +1 -0
- package/dist/src/core/compression-config.d.ts +12 -0
- package/dist/src/core/compression-config.js +21 -0
- package/dist/src/core/compression-config.js.map +1 -0
- package/dist/src/core/coreToolScheduler.d.ts +105 -0
- package/dist/src/core/coreToolScheduler.js +453 -0
- package/dist/src/core/coreToolScheduler.js.map +1 -0
- package/dist/src/core/hookToolRestrictions.d.ts +18 -0
- package/dist/src/core/hookToolRestrictions.js +187 -0
- package/dist/src/core/hookToolRestrictions.js.map +1 -0
- package/dist/src/core/nonInteractiveToolExecutor.d.ts +17 -0
- package/dist/src/core/nonInteractiveToolExecutor.js +102 -0
- package/dist/src/core/nonInteractiveToolExecutor.js.map +1 -0
- package/dist/src/core/subagent.d.ts +105 -0
- package/dist/src/core/subagent.js +650 -0
- package/dist/src/core/subagent.js.map +1 -0
- package/dist/src/core/subagentExecution.d.ts +104 -0
- package/dist/src/core/subagentExecution.js +275 -0
- package/dist/src/core/subagentExecution.js.map +1 -0
- package/dist/src/core/subagentOrchestrator.d.ts +84 -0
- package/dist/src/core/subagentOrchestrator.js +503 -0
- package/dist/src/core/subagentOrchestrator.js.map +1 -0
- package/dist/src/core/subagentRuntimeSetup.d.ts +75 -0
- package/dist/src/core/subagentRuntimeSetup.js +387 -0
- package/dist/src/core/subagentRuntimeSetup.js.map +1 -0
- package/dist/src/core/subagentScheduler.d.ts +17 -0
- package/dist/src/core/subagentScheduler.js +7 -0
- package/dist/src/core/subagentScheduler.js.map +1 -0
- package/dist/src/core/subagentToolProcessing.d.ts +51 -0
- package/dist/src/core/subagentToolProcessing.js +359 -0
- package/dist/src/core/subagentToolProcessing.js.map +1 -0
- package/dist/src/core/toolGovernance.d.ts +18 -0
- package/dist/src/core/toolGovernance.js +50 -0
- package/dist/src/core/toolGovernance.js.map +1 -0
- package/dist/src/core/turn.d.ts +47 -0
- package/dist/src/core/turn.js +455 -0
- package/dist/src/core/turn.js.map +1 -0
- package/dist/src/core/turnLogging.d.ts +35 -0
- package/dist/src/core/turnLogging.js +80 -0
- package/dist/src/core/turnLogging.js.map +1 -0
- package/dist/src/index.d.ts +32 -0
- package/dist/src/index.js +44 -0
- package/dist/src/index.js.map +1 -0
- package/dist/src/scheduler/confirmation-coordinator.d.ts +139 -0
- package/dist/src/scheduler/confirmation-coordinator.js +443 -0
- package/dist/src/scheduler/confirmation-coordinator.js.map +1 -0
- package/dist/src/scheduler/result-aggregator.d.ts +127 -0
- package/dist/src/scheduler/result-aggregator.js +302 -0
- package/dist/src/scheduler/result-aggregator.js.map +1 -0
- package/dist/src/scheduler/status-transitions.d.ts +39 -0
- package/dist/src/scheduler/status-transitions.js +184 -0
- package/dist/src/scheduler/status-transitions.js.map +1 -0
- package/dist/src/scheduler/tool-dispatcher.d.ts +40 -0
- package/dist/src/scheduler/tool-dispatcher.js +120 -0
- package/dist/src/scheduler/tool-dispatcher.js.map +1 -0
- package/dist/src/scheduler/tool-executor.d.ts +44 -0
- package/dist/src/scheduler/tool-executor.js +117 -0
- package/dist/src/scheduler/tool-executor.js.map +1 -0
- package/dist/src/scheduler/utils.d.ts +11 -0
- package/dist/src/scheduler/utils.js +19 -0
- package/dist/src/scheduler/utils.js.map +1 -0
- package/dist/src/tools/task.d.ts +128 -0
- package/dist/src/tools/task.js +932 -0
- package/dist/src/tools/task.js.map +1 -0
- package/package.json +54 -0
|
@@ -0,0 +1,455 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* @license
|
|
3
|
+
* Copyright 2025 Google LLC
|
|
4
|
+
* SPDX-License-Identifier: Apache-2.0
|
|
5
|
+
*/
|
|
6
|
+
/**
|
|
7
|
+
* Turn class — extracted from core/turn.ts as part of issue #1592.
|
|
8
|
+
* Protocol types (GeminiEventType, ServerGeminiStreamEvent, etc.) remain in core.
|
|
9
|
+
*/
|
|
10
|
+
import { createHash } from 'node:crypto';
|
|
11
|
+
import { getFunctionCallsFromParts, analyzeResponseOutcome, } from '@vybestack/llxprt-code-core/utils/generateContentResponseUtilities.js';
|
|
12
|
+
import { isThoughtPart } from '@vybestack/llxprt-code-core/core/chatSessionTypes.js';
|
|
13
|
+
import { filterHookRestrictedParts, filterHookRestrictedFunctionCalls, getHookRestrictedAllowedTools, getHookRestrictedFunctionCallsFromParts, getHookRestrictedAllowedToolsForFunctionCall, mergeHookRestrictedFunctionCalls, } from './hookToolRestrictions.js';
|
|
14
|
+
import { reportError } from '@vybestack/llxprt-code-core/utils/errorReporting.js';
|
|
15
|
+
import { getErrorMessage, UnauthorizedError, toFriendlyError, } from '@vybestack/llxprt-code-core/utils/errors.js';
|
|
16
|
+
import { normalizeToolName } from '@vybestack/llxprt-code-tools';
|
|
17
|
+
import { InvalidStreamError, StreamEventType, } from './chatSession.js';
|
|
18
|
+
import { DebugLogger } from '@vybestack/llxprt-code-core/debug/index.js';
|
|
19
|
+
import { getCodeAssistServer } from '@vybestack/llxprt-code-core/code_assist/codeAssist.js';
|
|
20
|
+
import { UserTierId } from '@vybestack/llxprt-code-core/code_assist/types.js';
|
|
21
|
+
import { parseThought } from '@vybestack/llxprt-code-core/utils/thoughtUtils.js';
|
|
22
|
+
import { nextStreamEventWithIdleTimeout, resolveStreamIdleTimeoutMs, DEFAULT_STREAM_IDLE_TIMEOUT_MS, } from '@vybestack/llxprt-code-core/utils/streamIdleTimeout.js';
|
|
23
|
+
import { DEFAULT_AGENT_ID, GeminiEventType, } from '@vybestack/llxprt-code-core/core/turn.js';
|
|
24
|
+
/** @deprecated Use DEFAULT_STREAM_IDLE_TIMEOUT_MS from streamIdleTimeout.js instead */
|
|
25
|
+
export const TURN_STREAM_IDLE_TIMEOUT_MS = DEFAULT_STREAM_IDLE_TIMEOUT_MS;
|
|
26
|
+
const TURN_STREAM_IDLE_TIMEOUT_ERROR_MESSAGE = 'Stream idle timeout: no response received within the allowed time.';
|
|
27
|
+
function createSafeJsonReplacer() {
|
|
28
|
+
const seen = new WeakSet();
|
|
29
|
+
return (_key, value) => {
|
|
30
|
+
if (typeof value === 'bigint') {
|
|
31
|
+
return value.toString();
|
|
32
|
+
}
|
|
33
|
+
if (typeof value !== 'object' || value === null) {
|
|
34
|
+
return value;
|
|
35
|
+
}
|
|
36
|
+
if (seen.has(value)) {
|
|
37
|
+
return '[Circular]';
|
|
38
|
+
}
|
|
39
|
+
seen.add(value);
|
|
40
|
+
if (Array.isArray(value)) {
|
|
41
|
+
return value;
|
|
42
|
+
}
|
|
43
|
+
const record = value;
|
|
44
|
+
return Object.keys(record)
|
|
45
|
+
.sort()
|
|
46
|
+
.reduce((sorted, key) => {
|
|
47
|
+
sorted[key] = record[key];
|
|
48
|
+
return sorted;
|
|
49
|
+
}, {});
|
|
50
|
+
};
|
|
51
|
+
}
|
|
52
|
+
function safeJsonStringify(value, space) {
|
|
53
|
+
try {
|
|
54
|
+
return JSON.stringify(value, createSafeJsonReplacer(), space);
|
|
55
|
+
}
|
|
56
|
+
catch (error) {
|
|
57
|
+
return `[Unserializable request: ${getErrorMessage(error)}]`;
|
|
58
|
+
}
|
|
59
|
+
}
|
|
60
|
+
// Re-export types that consumers need from this module
|
|
61
|
+
export { DEFAULT_AGENT_ID, GeminiEventType, CompressionStatus, PerformCompressionResult, } from '@vybestack/llxprt-code-core/core/turn.js';
|
|
62
|
+
// A turn manages the agentic loop turn within the server context.
|
|
63
|
+
export class Turn {
|
|
64
|
+
chat;
|
|
65
|
+
prompt_id;
|
|
66
|
+
agentId;
|
|
67
|
+
providerName;
|
|
68
|
+
pendingToolCalls;
|
|
69
|
+
debugResponses;
|
|
70
|
+
finishReason;
|
|
71
|
+
logger;
|
|
72
|
+
constructor(chat, prompt_id, agentId = DEFAULT_AGENT_ID, providerName = 'backend') {
|
|
73
|
+
this.chat = chat;
|
|
74
|
+
this.prompt_id = prompt_id;
|
|
75
|
+
this.agentId = agentId;
|
|
76
|
+
this.providerName = providerName;
|
|
77
|
+
this.pendingToolCalls = [];
|
|
78
|
+
this.debugResponses = [];
|
|
79
|
+
this.finishReason = undefined;
|
|
80
|
+
this.logger = new DebugLogger('llxprt:core:turn');
|
|
81
|
+
}
|
|
82
|
+
/**
|
|
83
|
+
* Check if citations should be shown for the current user/settings.
|
|
84
|
+
* Based on the upstream implementation from commit 997136ae.
|
|
85
|
+
*/
|
|
86
|
+
shouldShowCitations() {
|
|
87
|
+
try {
|
|
88
|
+
const config = this.chat.getConfig();
|
|
89
|
+
const settingsService = config?.getSettingsService();
|
|
90
|
+
if (settingsService) {
|
|
91
|
+
const enabled = settingsService.get('ui.showCitations');
|
|
92
|
+
if (enabled !== undefined) {
|
|
93
|
+
return enabled;
|
|
94
|
+
}
|
|
95
|
+
}
|
|
96
|
+
// Fallback: check user tier for code assist server
|
|
97
|
+
const server = getCodeAssistServer(config);
|
|
98
|
+
return (server && server.userTier !== UserTierId.FREE) ?? false;
|
|
99
|
+
}
|
|
100
|
+
catch {
|
|
101
|
+
return false;
|
|
102
|
+
}
|
|
103
|
+
}
|
|
104
|
+
/**
|
|
105
|
+
* Emits a citation event with the given text.
|
|
106
|
+
* This integrates with llxprt's provider abstraction to work across all providers.
|
|
107
|
+
*/
|
|
108
|
+
emitCitation(text) {
|
|
109
|
+
if (!this.shouldShowCitations()) {
|
|
110
|
+
return null;
|
|
111
|
+
}
|
|
112
|
+
return {
|
|
113
|
+
type: GeminiEventType.Citation,
|
|
114
|
+
value: text,
|
|
115
|
+
};
|
|
116
|
+
}
|
|
117
|
+
*emitFinishReason(finishReason, allParts, functionCalls, text, usageMetadata, traceId, cumulativeOutcome) {
|
|
118
|
+
const outcome = cumulativeOutcome;
|
|
119
|
+
this.logger.debug(() => `[stream:turn] emitting Finished event`, {
|
|
120
|
+
finishReason,
|
|
121
|
+
traceId,
|
|
122
|
+
partCount: allParts.length,
|
|
123
|
+
toolCallCount: functionCalls.length,
|
|
124
|
+
textLength: text?.length ?? 0,
|
|
125
|
+
hasUsageMetadata: Boolean(usageMetadata),
|
|
126
|
+
outcome,
|
|
127
|
+
});
|
|
128
|
+
this.finishReason = finishReason;
|
|
129
|
+
yield {
|
|
130
|
+
type: GeminiEventType.Finished,
|
|
131
|
+
value: {
|
|
132
|
+
reason: finishReason,
|
|
133
|
+
usageMetadata,
|
|
134
|
+
outcome: {
|
|
135
|
+
hadVisibleOutput: outcome.hasVisibleText,
|
|
136
|
+
hadThinking: outcome.hasThinking,
|
|
137
|
+
hadToolCalls: outcome.hasToolCalls,
|
|
138
|
+
},
|
|
139
|
+
},
|
|
140
|
+
};
|
|
141
|
+
}
|
|
142
|
+
logNoFinishReason(allParts, functionCalls, text, usageMetadata, traceId) {
|
|
143
|
+
this.logger.debug(() => `[stream:turn] chunk had no finishReason`, {
|
|
144
|
+
traceId,
|
|
145
|
+
partCount: allParts.length,
|
|
146
|
+
toolCallCount: functionCalls.length,
|
|
147
|
+
textLength: text?.length ?? 0,
|
|
148
|
+
hasUsageMetadata: Boolean(usageMetadata),
|
|
149
|
+
});
|
|
150
|
+
}
|
|
151
|
+
pushFilteredDebugResponse(resp, allowedParts) {
|
|
152
|
+
this.debugResponses.push(resp.candidates === undefined
|
|
153
|
+
? resp
|
|
154
|
+
: {
|
|
155
|
+
...resp,
|
|
156
|
+
candidates: resp.candidates.map((candidate, index) => index === 0
|
|
157
|
+
? {
|
|
158
|
+
...candidate,
|
|
159
|
+
content: candidate.content === undefined
|
|
160
|
+
? undefined
|
|
161
|
+
: { ...candidate.content, parts: allowedParts },
|
|
162
|
+
}
|
|
163
|
+
: candidate),
|
|
164
|
+
});
|
|
165
|
+
}
|
|
166
|
+
*processStreamChunk(resp, traceId, cumulativeOutcome) {
|
|
167
|
+
// Check ALL parts for thinking, not just parts[0]
|
|
168
|
+
// Bug fix: Previously only checked parts[0], missing thoughts in other positions
|
|
169
|
+
// @plan PLAN-20251202-THINKING.P16
|
|
170
|
+
const allParts = resp.candidates?.[0]?.content?.parts ?? [];
|
|
171
|
+
const allowedParts = filterHookRestrictedParts(allParts, getHookRestrictedAllowedTools(resp));
|
|
172
|
+
this.pushFilteredDebugResponse(resp, allowedParts);
|
|
173
|
+
for (const part of allowedParts) {
|
|
174
|
+
if (part.thought === true) {
|
|
175
|
+
const thought = parseThought(part.text ?? '');
|
|
176
|
+
yield {
|
|
177
|
+
type: GeminiEventType.Thought,
|
|
178
|
+
value: thought,
|
|
179
|
+
traceId,
|
|
180
|
+
};
|
|
181
|
+
}
|
|
182
|
+
}
|
|
183
|
+
const chunkOutcome = analyzeResponseOutcome(allowedParts);
|
|
184
|
+
const text = allowedParts
|
|
185
|
+
.filter((part) => !isThoughtPart(part))
|
|
186
|
+
.map((part) => part.text)
|
|
187
|
+
.filter((partText) => typeof partText === 'string')
|
|
188
|
+
.join('');
|
|
189
|
+
if (chunkOutcome.hasVisibleText && text !== '') {
|
|
190
|
+
yield { type: GeminiEventType.Content, value: text, traceId };
|
|
191
|
+
// Emit citation event if conditions are met
|
|
192
|
+
// Based on upstream implementation - emit citation after content
|
|
193
|
+
const citationEvent = this.emitCitation('Response may contain information from external sources. Please verify important details independently.');
|
|
194
|
+
if (citationEvent) {
|
|
195
|
+
yield citationEvent;
|
|
196
|
+
}
|
|
197
|
+
}
|
|
198
|
+
// Handle function calls (requesting tool execution)
|
|
199
|
+
const partFunctionCalls = getFunctionCallsFromParts(allowedParts) ?? [];
|
|
200
|
+
const topLevelFunctionCalls = filterHookRestrictedFunctionCalls(resp.functionCalls ?? [], getHookRestrictedAllowedTools(resp));
|
|
201
|
+
const functionCalls = mergeHookRestrictedFunctionCalls(partFunctionCalls, topLevelFunctionCalls);
|
|
202
|
+
for (const [functionCallIndex, fnCall] of functionCalls.entries()) {
|
|
203
|
+
const event = this.handlePendingFunctionCall(fnCall, functionCallIndex);
|
|
204
|
+
if (event) {
|
|
205
|
+
yield event;
|
|
206
|
+
}
|
|
207
|
+
}
|
|
208
|
+
// Check if response was truncated or stopped for various reasons
|
|
209
|
+
const finishReason = resp.candidates?.[0]?.finishReason;
|
|
210
|
+
// This is the key change: Only yield 'Finished' if there is a finishReason.
|
|
211
|
+
// Pass only allowed function calls so logging/outcome reflect executable calls.
|
|
212
|
+
if (finishReason != null) {
|
|
213
|
+
yield* this.emitFinishReason(finishReason, allowedParts, functionCalls, text, resp.usageMetadata, traceId, cumulativeOutcome);
|
|
214
|
+
}
|
|
215
|
+
else {
|
|
216
|
+
this.logNoFinishReason(allowedParts, functionCalls, text, resp.usageMetadata, traceId);
|
|
217
|
+
}
|
|
218
|
+
}
|
|
219
|
+
createEmptyResponseOutcome() {
|
|
220
|
+
return {
|
|
221
|
+
hasVisibleText: false,
|
|
222
|
+
hasThinking: false,
|
|
223
|
+
hasToolCalls: false,
|
|
224
|
+
isActionable: false,
|
|
225
|
+
};
|
|
226
|
+
}
|
|
227
|
+
async *consumeStreamEvents(streamIterator, timeoutController, signal, effectiveTimeoutMs, idleFlag) {
|
|
228
|
+
let cumulativeOutcome = this.createEmptyResponseOutcome();
|
|
229
|
+
// eslint-disable-next-line @typescript-eslint/no-unnecessary-condition, sonarjs/too-many-break-or-continue-in-loop -- Turn events cross provider/runtime boundaries despite declared types.
|
|
230
|
+
while (true) {
|
|
231
|
+
// Use watchdog if timeout > 0, otherwise call iterator.next() directly
|
|
232
|
+
let result;
|
|
233
|
+
if (effectiveTimeoutMs > 0) {
|
|
234
|
+
result = await nextStreamEventWithIdleTimeout({
|
|
235
|
+
iterator: streamIterator,
|
|
236
|
+
timeoutMs: effectiveTimeoutMs,
|
|
237
|
+
signal: timeoutController.signal,
|
|
238
|
+
onTimeout: () => {
|
|
239
|
+
if (signal.aborted) {
|
|
240
|
+
return;
|
|
241
|
+
}
|
|
242
|
+
idleFlag.timedOut = true;
|
|
243
|
+
timeoutController.abort();
|
|
244
|
+
},
|
|
245
|
+
createTimeoutError: () => new Error(TURN_STREAM_IDLE_TIMEOUT_ERROR_MESSAGE),
|
|
246
|
+
});
|
|
247
|
+
}
|
|
248
|
+
else {
|
|
249
|
+
// Watchdog disabled: call iterator.next() directly
|
|
250
|
+
result = await streamIterator.next();
|
|
251
|
+
}
|
|
252
|
+
if (result.done === true) {
|
|
253
|
+
break;
|
|
254
|
+
}
|
|
255
|
+
const streamEvent = result.value;
|
|
256
|
+
// eslint-disable-next-line @typescript-eslint/no-unnecessary-condition -- Turn events cross provider/runtime boundaries despite declared types.
|
|
257
|
+
if (signal?.aborted) {
|
|
258
|
+
yield { type: GeminiEventType.UserCancelled };
|
|
259
|
+
return;
|
|
260
|
+
}
|
|
261
|
+
// Handle the RETRY event
|
|
262
|
+
if (streamEvent.type === StreamEventType.RETRY) {
|
|
263
|
+
cumulativeOutcome = this.createEmptyResponseOutcome();
|
|
264
|
+
yield { type: GeminiEventType.Retry };
|
|
265
|
+
continue;
|
|
266
|
+
}
|
|
267
|
+
// Handle AGENT_EXECUTION_STOPPED event
|
|
268
|
+
if (streamEvent.type === StreamEventType.AGENT_EXECUTION_STOPPED) {
|
|
269
|
+
yield {
|
|
270
|
+
type: GeminiEventType.AgentExecutionStopped,
|
|
271
|
+
reason: streamEvent.reason,
|
|
272
|
+
systemMessage: streamEvent.systemMessage,
|
|
273
|
+
contextCleared: streamEvent.contextCleared,
|
|
274
|
+
};
|
|
275
|
+
return;
|
|
276
|
+
}
|
|
277
|
+
// Handle AGENT_EXECUTION_BLOCKED event
|
|
278
|
+
if (streamEvent.type === StreamEventType.AGENT_EXECUTION_BLOCKED) {
|
|
279
|
+
yield {
|
|
280
|
+
type: GeminiEventType.AgentExecutionBlocked,
|
|
281
|
+
reason: streamEvent.reason,
|
|
282
|
+
systemMessage: streamEvent.systemMessage,
|
|
283
|
+
contextCleared: streamEvent.contextCleared,
|
|
284
|
+
};
|
|
285
|
+
continue;
|
|
286
|
+
}
|
|
287
|
+
// Narrow to CHUNK — the only other variant in the discriminated union
|
|
288
|
+
const resp = streamEvent.value;
|
|
289
|
+
// eslint-disable-next-line @typescript-eslint/no-unnecessary-condition -- Turn events cross provider/runtime boundaries despite declared types.
|
|
290
|
+
if (resp === null || resp === undefined)
|
|
291
|
+
continue;
|
|
292
|
+
cumulativeOutcome = this.mergeResponseOutcome(cumulativeOutcome, resp);
|
|
293
|
+
const traceId = resp.responseId ?? undefined;
|
|
294
|
+
yield* this.processStreamChunk(resp, traceId, cumulativeOutcome);
|
|
295
|
+
}
|
|
296
|
+
}
|
|
297
|
+
mergeResponseOutcome(cumulativeOutcome, resp) {
|
|
298
|
+
const parts = resp.candidates?.[0]?.content?.parts ?? [];
|
|
299
|
+
const allowedParts = filterHookRestrictedParts(parts, getHookRestrictedAllowedTools(resp));
|
|
300
|
+
const allowedPartCalls = getHookRestrictedFunctionCallsFromParts(allowedParts, getHookRestrictedAllowedTools(resp));
|
|
301
|
+
const allowedMergedCalls = mergeHookRestrictedFunctionCalls(allowedPartCalls, filterHookRestrictedFunctionCalls(resp.functionCalls ?? [], getHookRestrictedAllowedTools(resp)));
|
|
302
|
+
const allowedTopLevelCallParts = allowedMergedCalls
|
|
303
|
+
.slice(allowedPartCalls.length)
|
|
304
|
+
.map((functionCall) => ({ functionCall }));
|
|
305
|
+
const chunkOutcome = analyzeResponseOutcome([
|
|
306
|
+
...allowedParts,
|
|
307
|
+
...allowedTopLevelCallParts,
|
|
308
|
+
]);
|
|
309
|
+
return {
|
|
310
|
+
hasVisibleText: cumulativeOutcome.hasVisibleText || chunkOutcome.hasVisibleText,
|
|
311
|
+
hasThinking: cumulativeOutcome.hasThinking || chunkOutcome.hasThinking,
|
|
312
|
+
hasToolCalls: cumulativeOutcome.hasToolCalls || chunkOutcome.hasToolCalls,
|
|
313
|
+
isActionable: cumulativeOutcome.isActionable || chunkOutcome.isActionable,
|
|
314
|
+
};
|
|
315
|
+
}
|
|
316
|
+
extractErrorStatus(error) {
|
|
317
|
+
// eslint-disable-next-line sonarjs/expression-complexity -- Existing structure is intentionally preserved; refactoring this boundary is outside the lint slice.
|
|
318
|
+
return typeof error === 'object' &&
|
|
319
|
+
error !== null &&
|
|
320
|
+
'status' in error &&
|
|
321
|
+
typeof error.status === 'number'
|
|
322
|
+
? error.status
|
|
323
|
+
: undefined;
|
|
324
|
+
}
|
|
325
|
+
async *handleRunError(e, req, signal, idleFlag) {
|
|
326
|
+
if (signal.aborted) {
|
|
327
|
+
yield { type: GeminiEventType.UserCancelled };
|
|
328
|
+
return;
|
|
329
|
+
}
|
|
330
|
+
if (idleFlag.timedOut) {
|
|
331
|
+
yield {
|
|
332
|
+
type: GeminiEventType.StreamIdleTimeout,
|
|
333
|
+
value: {
|
|
334
|
+
error: {
|
|
335
|
+
message: TURN_STREAM_IDLE_TIMEOUT_ERROR_MESSAGE,
|
|
336
|
+
status: undefined,
|
|
337
|
+
},
|
|
338
|
+
},
|
|
339
|
+
};
|
|
340
|
+
return;
|
|
341
|
+
}
|
|
342
|
+
if (e instanceof InvalidStreamError) {
|
|
343
|
+
yield { type: GeminiEventType.InvalidStream };
|
|
344
|
+
return;
|
|
345
|
+
}
|
|
346
|
+
const error = toFriendlyError(e);
|
|
347
|
+
if (error instanceof UnauthorizedError) {
|
|
348
|
+
throw error;
|
|
349
|
+
}
|
|
350
|
+
const contextForReport = [...this.chat.getHistory(/*curated*/ true), req];
|
|
351
|
+
await reportError(error, `Error when talking to ${this.providerName} API`, contextForReport, 'Turn.run-sendMessageStream');
|
|
352
|
+
const status = this.extractErrorStatus(error);
|
|
353
|
+
const structuredError = {
|
|
354
|
+
message: getErrorMessage(error),
|
|
355
|
+
status,
|
|
356
|
+
};
|
|
357
|
+
yield { type: GeminiEventType.Error, value: { error: structuredError } };
|
|
358
|
+
}
|
|
359
|
+
// The run method yields simpler events suitable for server logic
|
|
360
|
+
async *run(req, signal) {
|
|
361
|
+
const idleFlag = { timedOut: false };
|
|
362
|
+
this.logger.debug('Turn.run called', {
|
|
363
|
+
req: safeJsonStringify(req, 2),
|
|
364
|
+
typeofReq: typeof req,
|
|
365
|
+
isArray: Array.isArray(req),
|
|
366
|
+
});
|
|
367
|
+
try {
|
|
368
|
+
if (signal.aborted) {
|
|
369
|
+
yield { type: GeminiEventType.UserCancelled };
|
|
370
|
+
return;
|
|
371
|
+
}
|
|
372
|
+
const timeoutController = new AbortController();
|
|
373
|
+
const timeoutSignal = timeoutController.signal;
|
|
374
|
+
const onParentAbort = () => timeoutController.abort();
|
|
375
|
+
signal.addEventListener('abort', onParentAbort, { once: true });
|
|
376
|
+
let streamIterator;
|
|
377
|
+
const effectiveTimeoutMs = resolveStreamIdleTimeoutMs(this.chat.getConfig());
|
|
378
|
+
try {
|
|
379
|
+
const responseStream = await this.chat.sendMessageStream({
|
|
380
|
+
message: req,
|
|
381
|
+
config: {
|
|
382
|
+
abortSignal: timeoutSignal,
|
|
383
|
+
},
|
|
384
|
+
}, this.prompt_id);
|
|
385
|
+
streamIterator = responseStream[Symbol.asyncIterator]();
|
|
386
|
+
yield* this.consumeStreamEvents(streamIterator, timeoutController, signal, effectiveTimeoutMs, idleFlag);
|
|
387
|
+
}
|
|
388
|
+
finally {
|
|
389
|
+
streamIterator?.return?.().catch(() => { });
|
|
390
|
+
timeoutController.abort();
|
|
391
|
+
signal.removeEventListener('abort', onParentAbort);
|
|
392
|
+
}
|
|
393
|
+
}
|
|
394
|
+
catch (e) {
|
|
395
|
+
yield* this.handleRunError(e, req, signal, idleFlag);
|
|
396
|
+
}
|
|
397
|
+
}
|
|
398
|
+
handlePendingFunctionCall(fnCall, functionCallIndex) {
|
|
399
|
+
const callId = fnCall.id ??
|
|
400
|
+
this.createSyntheticFunctionCallId(fnCall, functionCallIndex);
|
|
401
|
+
// REAL FIX: Turn.ts also gets fragmented data - handle properly
|
|
402
|
+
let name = fnCall.name;
|
|
403
|
+
if (!name || name.trim() === '') {
|
|
404
|
+
// Turn may get incomplete data from fragmented FunctionCalls
|
|
405
|
+
// Keep undefined_tool_name for proper error detection
|
|
406
|
+
name = 'undefined_tool_name';
|
|
407
|
+
}
|
|
408
|
+
else {
|
|
409
|
+
// Apply shared normalization for defined names
|
|
410
|
+
const normalized = normalizeToolName(name);
|
|
411
|
+
if (normalized) {
|
|
412
|
+
name = normalized;
|
|
413
|
+
}
|
|
414
|
+
else {
|
|
415
|
+
name = 'undefined_tool_name';
|
|
416
|
+
}
|
|
417
|
+
}
|
|
418
|
+
const args = fnCall.args ?? {};
|
|
419
|
+
const allowedTools = getHookRestrictedAllowedToolsForFunctionCall(fnCall);
|
|
420
|
+
const toolCallRequest = {
|
|
421
|
+
callId,
|
|
422
|
+
name: name || 'undefined_tool_name',
|
|
423
|
+
args,
|
|
424
|
+
isClientInitiated: false,
|
|
425
|
+
prompt_id: this.prompt_id,
|
|
426
|
+
// eslint-disable-next-line @typescript-eslint/no-unnecessary-condition -- Turn events cross provider/runtime boundaries despite declared types.
|
|
427
|
+
agentId: this.agentId ?? DEFAULT_AGENT_ID,
|
|
428
|
+
...(allowedTools !== undefined
|
|
429
|
+
? { hookRestrictedAllowedTools: allowedTools }
|
|
430
|
+
: {}),
|
|
431
|
+
};
|
|
432
|
+
this.pendingToolCalls.push(toolCallRequest);
|
|
433
|
+
// Yield a request for the tool call, not the pending/confirming status
|
|
434
|
+
return { type: GeminiEventType.ToolCallRequest, value: toolCallRequest };
|
|
435
|
+
}
|
|
436
|
+
createSyntheticFunctionCallId(fnCall, functionCallIndex) {
|
|
437
|
+
const payload = safeJsonStringify({
|
|
438
|
+
promptId: this.prompt_id,
|
|
439
|
+
agentId: this.agentId,
|
|
440
|
+
functionCallIndex,
|
|
441
|
+
name: fnCall.name ?? '',
|
|
442
|
+
args: fnCall.args ?? {},
|
|
443
|
+
});
|
|
444
|
+
const digest = createHash('sha256')
|
|
445
|
+
.update(payload)
|
|
446
|
+
.digest('hex')
|
|
447
|
+
.slice(0, 16);
|
|
448
|
+
const name = normalizeToolName(fnCall.name ?? '') ?? 'undefined_tool_name';
|
|
449
|
+
return `${name}-${functionCallIndex}-${digest}`;
|
|
450
|
+
}
|
|
451
|
+
getDebugResponses() {
|
|
452
|
+
return this.debugResponses;
|
|
453
|
+
}
|
|
454
|
+
}
|
|
455
|
+
//# sourceMappingURL=turn.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"turn.js","sourceRoot":"","sources":["../../../src/core/turn.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,35 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* @license
|
|
3
|
+
* Copyright 2025 Google LLC
|
|
4
|
+
* SPDX-License-Identifier: Apache-2.0
|
|
5
|
+
*/
|
|
6
|
+
/**
|
|
7
|
+
* Pure logging and configuration utilities for turn execution.
|
|
8
|
+
* Extracted from chatSession.ts Phase 05.
|
|
9
|
+
*/
|
|
10
|
+
import type { Content, GenerateContentConfig, GenerateContentResponseUsageMetadata } from '@google/genai';
|
|
11
|
+
import type { AgentRuntimeContext } from '@vybestack/llxprt-code-core/runtime/AgentRuntimeContext.js';
|
|
12
|
+
import type { AgentRuntimeState } from '@vybestack/llxprt-code-core/runtime/AgentRuntimeState.js';
|
|
13
|
+
/**
|
|
14
|
+
* Extract request text from contents for logging
|
|
15
|
+
*/
|
|
16
|
+
export declare function getRequestTextFromContents(contents: Content[]): string;
|
|
17
|
+
/**
|
|
18
|
+
* Extract direct Gemini SDK overrides from generation config
|
|
19
|
+
*/
|
|
20
|
+
export declare function extractDirectGeminiOverrides(config?: GenerateContentConfig): {
|
|
21
|
+
serverTools?: unknown;
|
|
22
|
+
toolConfig?: GenerateContentConfig['toolConfig'];
|
|
23
|
+
} | undefined;
|
|
24
|
+
/**
|
|
25
|
+
* Log API request to telemetry
|
|
26
|
+
*/
|
|
27
|
+
export declare function logApiRequest(runtimeContext: AgentRuntimeContext, runtimeState: AgentRuntimeState, contents: Content[], model: string, promptId: string): void;
|
|
28
|
+
/**
|
|
29
|
+
* Log API response to telemetry
|
|
30
|
+
*/
|
|
31
|
+
export declare function logApiResponse(runtimeContext: AgentRuntimeContext, runtimeState: AgentRuntimeState, model: string, promptId: string, durationMs: number, usageMetadata?: GenerateContentResponseUsageMetadata, responseText?: string): void;
|
|
32
|
+
/**
|
|
33
|
+
* Log API error to telemetry
|
|
34
|
+
*/
|
|
35
|
+
export declare function logApiError(runtimeContext: AgentRuntimeContext, runtimeState: AgentRuntimeState, model: string, promptId: string, durationMs: number, error: unknown): void;
|
|
@@ -0,0 +1,80 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* @license
|
|
3
|
+
* Copyright 2025 Google LLC
|
|
4
|
+
* SPDX-License-Identifier: Apache-2.0
|
|
5
|
+
*/
|
|
6
|
+
/**
|
|
7
|
+
* Extract request text from contents for logging
|
|
8
|
+
*/
|
|
9
|
+
export function getRequestTextFromContents(contents) {
|
|
10
|
+
return JSON.stringify(contents);
|
|
11
|
+
}
|
|
12
|
+
/**
|
|
13
|
+
* Extract direct Gemini SDK overrides from generation config
|
|
14
|
+
*/
|
|
15
|
+
export function extractDirectGeminiOverrides(config) {
|
|
16
|
+
if (!config || typeof config !== 'object') {
|
|
17
|
+
return undefined;
|
|
18
|
+
}
|
|
19
|
+
const overrides = {};
|
|
20
|
+
const rawConfig = config;
|
|
21
|
+
if (Object.prototype.hasOwnProperty.call(rawConfig, 'serverTools')) {
|
|
22
|
+
overrides.serverTools = rawConfig.serverTools;
|
|
23
|
+
}
|
|
24
|
+
if (config.toolConfig) {
|
|
25
|
+
overrides.toolConfig = config.toolConfig;
|
|
26
|
+
}
|
|
27
|
+
if (typeof overrides.serverTools === 'undefined' &&
|
|
28
|
+
typeof overrides.toolConfig === 'undefined') {
|
|
29
|
+
return undefined;
|
|
30
|
+
}
|
|
31
|
+
return overrides;
|
|
32
|
+
}
|
|
33
|
+
/**
|
|
34
|
+
* Log API request to telemetry
|
|
35
|
+
*/
|
|
36
|
+
export function logApiRequest(runtimeContext, runtimeState, contents, model, promptId) {
|
|
37
|
+
const requestText = getRequestTextFromContents(contents);
|
|
38
|
+
runtimeContext.telemetry.logApiRequest({
|
|
39
|
+
model,
|
|
40
|
+
promptId,
|
|
41
|
+
requestText,
|
|
42
|
+
sessionId: runtimeState.sessionId,
|
|
43
|
+
runtimeId: runtimeState.runtimeId,
|
|
44
|
+
provider: runtimeState.provider,
|
|
45
|
+
timestamp: Date.now(),
|
|
46
|
+
});
|
|
47
|
+
}
|
|
48
|
+
/**
|
|
49
|
+
* Log API response to telemetry
|
|
50
|
+
*/
|
|
51
|
+
export function logApiResponse(runtimeContext, runtimeState, model, promptId, durationMs, usageMetadata, responseText) {
|
|
52
|
+
runtimeContext.telemetry.logApiResponse({
|
|
53
|
+
model,
|
|
54
|
+
promptId,
|
|
55
|
+
durationMs,
|
|
56
|
+
sessionId: runtimeState.sessionId,
|
|
57
|
+
runtimeId: runtimeState.runtimeId,
|
|
58
|
+
provider: runtimeState.provider,
|
|
59
|
+
usageMetadata,
|
|
60
|
+
responseText,
|
|
61
|
+
});
|
|
62
|
+
}
|
|
63
|
+
/**
|
|
64
|
+
* Log API error to telemetry
|
|
65
|
+
*/
|
|
66
|
+
export function logApiError(runtimeContext, runtimeState, model, promptId, durationMs, error) {
|
|
67
|
+
const errorMessage = error instanceof Error ? error.message : String(error);
|
|
68
|
+
const errorType = error instanceof Error ? error.name : 'unknown';
|
|
69
|
+
runtimeContext.telemetry.logApiError({
|
|
70
|
+
model,
|
|
71
|
+
promptId,
|
|
72
|
+
durationMs,
|
|
73
|
+
error: errorMessage,
|
|
74
|
+
errorType,
|
|
75
|
+
sessionId: runtimeState.sessionId,
|
|
76
|
+
runtimeId: runtimeState.runtimeId,
|
|
77
|
+
provider: runtimeState.provider,
|
|
78
|
+
});
|
|
79
|
+
}
|
|
80
|
+
//# sourceMappingURL=turnLogging.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"turnLogging.js","sourceRoot":"","sources":["../../../src/core/turnLogging.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAeH;;GAEG;AACH,MAAM,UAAU,0BAA0B,CAAC,QAAmB;IAC5D,OAAO,IAAI,CAAC,SAAS,CAAC,QAAQ,CAAC,CAAC;AAClC,CAAC;AAED;;GAEG;AACH,MAAM,UAAU,4BAA4B,CAAC,MAA8B;IAMzE,IAAI,CAAC,MAAM,IAAI,OAAO,MAAM,KAAK,QAAQ,EAAE,CAAC;QAC1C,OAAO,SAAS,CAAC;IACnB,CAAC;IACD,MAAM,SAAS,GAGX,EAAE,CAAC;IACP,MAAM,SAAS,GAAG,MAAiC,CAAC;IACpD,IAAI,MAAM,CAAC,SAAS,CAAC,cAAc,CAAC,IAAI,CAAC,SAAS,EAAE,aAAa,CAAC,EAAE,CAAC;QACnE,SAAS,CAAC,WAAW,GAAG,SAAS,CAAC,WAAW,CAAC;IAChD,CAAC;IACD,IAAI,MAAM,CAAC,UAAU,EAAE,CAAC;QACtB,SAAS,CAAC,UAAU,GAAG,MAAM,CAAC,UAAU,CAAC;IAC3C,CAAC;IAED,IACE,OAAO,SAAS,CAAC,WAAW,KAAK,WAAW;QAC5C,OAAO,SAAS,CAAC,UAAU,KAAK,WAAW,EAC3C,CAAC;QACD,OAAO,SAAS,CAAC;IACnB,CAAC;IACD,OAAO,SAAS,CAAC;AACnB,CAAC;AAED;;GAEG;AACH,MAAM,UAAU,aAAa,CAC3B,cAAmC,EACnC,YAA+B,EAC/B,QAAmB,EACnB,KAAa,EACb,QAAgB;IAEhB,MAAM,WAAW,GAAG,0BAA0B,CAAC,QAAQ,CAAC,CAAC;IACzD,cAAc,CAAC,SAAS,CAAC,aAAa,CAAC;QACrC,KAAK;QACL,QAAQ;QACR,WAAW;QACX,SAAS,EAAE,YAAY,CAAC,SAAS;QACjC,SAAS,EAAE,YAAY,CAAC,SAAS;QACjC,QAAQ,EAAE,YAAY,CAAC,QAAQ;QAC/B,SAAS,EAAE,IAAI,CAAC,GAAG,EAAE;KACtB,CAAC,CAAC;AACL,CAAC;AAED;;GAEG;AACH,MAAM,UAAU,cAAc,CAC5B,cAAmC,EACnC,YAA+B,EAC/B,KAAa,EACb,QAAgB,EAChB,UAAkB,EAClB,aAAoD,EACpD,YAAqB;IAErB,cAAc,CAAC,SAAS,CAAC,cAAc,CAAC;QACtC,KAAK;QACL,QAAQ;QACR,UAAU;QACV,SAAS,EAAE,YAAY,CAAC,SAAS;QACjC,SAAS,EAAE,YAAY,CAAC,SAAS;QACjC,QAAQ,EAAE,YAAY,CAAC,QAAQ;QAC/B,aAAa;QACb,YAAY;KACb,CAAC,CAAC;AACL,CAAC;AAED;;GAEG;AACH,MAAM,UAAU,WAAW,CACzB,cAAmC,EACnC,YAA+B,EAC/B,KAAa,EACb,QAAgB,EAChB,UAAkB,EAClB,KAAc;IAEd,MAAM,YAAY,GAAG,KAAK,YAAY,KAAK,CAAC,CAAC,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC;IAC5E,MAAM,SAAS,GAAG,KAAK,YAAY,KAAK,CAAC,CAAC,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC,CAAC,SAAS,CAAC;IAElE,cAAc,CAAC,SAAS,CAAC,WAAW,CAAC;QACnC,KAAK;QACL,QAAQ;QACR,UAAU;QACV,KAAK,EAAE,YAAY;QACnB,SAAS;QACT,SAAS,EAAE,YAAY,CAAC,SAAS;QACjC,SAAS,EAAE,YAAY,CAAC,SAAS;QACjC,QAAQ,EAAE,YAAY,CAAC,QAAQ;KAChC,CAAC,CAAC;AACL,CAAC"}
|
|
@@ -0,0 +1,32 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* @plan:PLAN-20260610-ISSUE1592.P02
|
|
3
|
+
* @requirement:REQ-PKG-001
|
|
4
|
+
*/
|
|
5
|
+
import type { TaskToolRegistration } from '@vybestack/llxprt-code-core/config/toolRegistryFactory.js';
|
|
6
|
+
export { AgentClient, PostTurnAction } from './core/client.js';
|
|
7
|
+
export { ChatSession, StreamEventType, InvalidStreamError, type StreamEvent, } from './core/chatSession.js';
|
|
8
|
+
export * from './core/ChatSessionFactory.js';
|
|
9
|
+
export { CoreToolScheduler } from './core/coreToolScheduler.js';
|
|
10
|
+
export { executeToolCall } from './core/nonInteractiveToolExecutor.js';
|
|
11
|
+
export { SubagentOrchestrator } from './core/subagentOrchestrator.js';
|
|
12
|
+
export { TaskTool } from './tools/task.js';
|
|
13
|
+
export type { TaskToolDependencies, TaskToolParams } from './tools/task.js';
|
|
14
|
+
export * from './core/turn.js';
|
|
15
|
+
export * from './core/subagent.js';
|
|
16
|
+
export * from './core/subagentExecution.js';
|
|
17
|
+
export * from './core/subagentRuntimeSetup.js';
|
|
18
|
+
export * from './core/subagentToolProcessing.js';
|
|
19
|
+
export * from './core/subagentScheduler.js';
|
|
20
|
+
export { buildToolGovernance, isToolBlocked, type ToolGovernance, type ToolGovernanceConfig, } from './core/toolGovernance.js';
|
|
21
|
+
export * from './compression/index.js';
|
|
22
|
+
export * from './agents/types.js';
|
|
23
|
+
export * from './agents/invocation.js';
|
|
24
|
+
export * from './agents/executor.js';
|
|
25
|
+
/**
|
|
26
|
+
* @plan PLAN-20260610-ISSUE1592.P03
|
|
27
|
+
* @requirement REQ-INV-003
|
|
28
|
+
*
|
|
29
|
+
* Creates the core-owned TaskToolRegistration descriptor without requiring core
|
|
30
|
+
* to import the concrete agents-owned TaskTool class.
|
|
31
|
+
*/
|
|
32
|
+
export declare function createTaskToolRegistration(): TaskToolRegistration;
|