@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,387 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* @license
|
|
3
|
+
* Copyright 2025 Google LLC
|
|
4
|
+
* SPDX-License-Identifier: Apache-2.0
|
|
5
|
+
*/
|
|
6
|
+
/**
|
|
7
|
+
* @fileoverview Execution environment preparation for subagents.
|
|
8
|
+
* Contains standalone functions for validation, configuration building,
|
|
9
|
+
* chat object creation, and prompt assembly.
|
|
10
|
+
*
|
|
11
|
+
* Extracted from subagent.ts as part of Issue #1581 (Phase 2).
|
|
12
|
+
*/
|
|
13
|
+
import { reportError } from '@vybestack/llxprt-code-core/utils/errorReporting.js';
|
|
14
|
+
import { DebugLogger } from '@vybestack/llxprt-code-core/debug/DebugLogger.js';
|
|
15
|
+
import { ApprovalMode, } from '@vybestack/llxprt-code-core/config/config.js';
|
|
16
|
+
import { Type, } from '@google/genai';
|
|
17
|
+
import { ChatSession } from './chatSession.js';
|
|
18
|
+
import { getCoreSystemPromptAsync } from '@vybestack/llxprt-code-core/core/prompts.js';
|
|
19
|
+
import { EmojiFilter, } from '@vybestack/llxprt-code-core/filters/EmojiFilter.js';
|
|
20
|
+
import { debugLogger } from '@vybestack/llxprt-code-core/utils/debugLogger.js';
|
|
21
|
+
import { templateString, } from '@vybestack/llxprt-code-core/core/subagentTypes.js';
|
|
22
|
+
// ---------------------------------------------------------------------------
|
|
23
|
+
// Simple utilities
|
|
24
|
+
// ---------------------------------------------------------------------------
|
|
25
|
+
/** Canonicalizes a tool name for whitelist matching (trim + lowercase). */
|
|
26
|
+
export const canonicalizeToolName = (name) => name.trim().toLowerCase();
|
|
27
|
+
/**
|
|
28
|
+
* Converts a ToolMetadata object into a FunctionDeclaration for the Gemini API.
|
|
29
|
+
*/
|
|
30
|
+
export function convertMetadataToFunctionDeclaration(fallbackName, metadata) {
|
|
31
|
+
const rawSchema = metadata.parameterSchema && typeof metadata.parameterSchema === 'object'
|
|
32
|
+
? { ...metadata.parameterSchema }
|
|
33
|
+
: {};
|
|
34
|
+
const properties = rawSchema.properties ?? {};
|
|
35
|
+
const parameterType = rawSchema.type ?? Type.OBJECT;
|
|
36
|
+
const parameterProperties = { ...properties };
|
|
37
|
+
const parametersJsonSchema = {
|
|
38
|
+
...rawSchema,
|
|
39
|
+
type: parameterType,
|
|
40
|
+
properties: parameterProperties,
|
|
41
|
+
};
|
|
42
|
+
return {
|
|
43
|
+
// eslint-disable-next-line @typescript-eslint/no-unnecessary-condition -- BN4-C-P01: preserve defensive runtime boundary guard despite current static types.
|
|
44
|
+
name: metadata.name ?? fallbackName,
|
|
45
|
+
// eslint-disable-next-line @typescript-eslint/no-unnecessary-condition -- BN4-C-P01: preserve defensive runtime boundary guard despite current static types.
|
|
46
|
+
description: metadata.description ?? '',
|
|
47
|
+
parametersJsonSchema,
|
|
48
|
+
};
|
|
49
|
+
}
|
|
50
|
+
// ---------------------------------------------------------------------------
|
|
51
|
+
// Validation
|
|
52
|
+
// ---------------------------------------------------------------------------
|
|
53
|
+
/**
|
|
54
|
+
* Filters the tools in toolConfig against the allowed set from the runtime view.
|
|
55
|
+
* Returns a new ToolConfig with only the tools that are permitted.
|
|
56
|
+
* Tools not in the allowed set are logged as warnings and removed.
|
|
57
|
+
*
|
|
58
|
+
* @param params - Object containing toolConfig and toolsView
|
|
59
|
+
* @returns A Promise that resolves to a filtered ToolConfig
|
|
60
|
+
*/
|
|
61
|
+
export async function filterToolsAgainstRuntime(params) {
|
|
62
|
+
const { toolConfig, toolsView } = params;
|
|
63
|
+
const allowedNames = new Set((typeof toolsView.listToolNames === 'function'
|
|
64
|
+
? toolsView.listToolNames()
|
|
65
|
+
: []).map(canonicalizeToolName));
|
|
66
|
+
const filteredTools = [];
|
|
67
|
+
// eslint-disable-next-line sonarjs/too-many-break-or-continue-in-loop -- Existing structure is intentionally preserved; refactoring this boundary is outside the lint slice.
|
|
68
|
+
for (const toolEntry of toolConfig.tools) {
|
|
69
|
+
if (typeof toolEntry !== 'string') {
|
|
70
|
+
// Non-string entries (e.g., FunctionDeclaration objects) are preserved
|
|
71
|
+
filteredTools.push(toolEntry);
|
|
72
|
+
continue;
|
|
73
|
+
}
|
|
74
|
+
if (allowedNames.size > 0 &&
|
|
75
|
+
!allowedNames.has(canonicalizeToolName(toolEntry))) {
|
|
76
|
+
debugLogger.warn(`Tool "${toolEntry}" is not permitted by the runtime view and is skipped.`);
|
|
77
|
+
continue;
|
|
78
|
+
}
|
|
79
|
+
filteredTools.push(toolEntry);
|
|
80
|
+
}
|
|
81
|
+
return {
|
|
82
|
+
...toolConfig,
|
|
83
|
+
tools: filteredTools,
|
|
84
|
+
};
|
|
85
|
+
}
|
|
86
|
+
// ---------------------------------------------------------------------------
|
|
87
|
+
// Ephemeral settings & tool execution config
|
|
88
|
+
// ---------------------------------------------------------------------------
|
|
89
|
+
export function buildEphemeralSettings(snapshot) {
|
|
90
|
+
const ephemerals = {};
|
|
91
|
+
if (!snapshot) {
|
|
92
|
+
ephemerals.emojifilter = 'auto';
|
|
93
|
+
return ephemerals;
|
|
94
|
+
}
|
|
95
|
+
if (snapshot.emojifilter !== undefined) {
|
|
96
|
+
ephemerals.emojifilter = snapshot.emojifilter;
|
|
97
|
+
}
|
|
98
|
+
else {
|
|
99
|
+
ephemerals.emojifilter = 'auto';
|
|
100
|
+
}
|
|
101
|
+
if (snapshot.tools?.allowed) {
|
|
102
|
+
ephemerals['tools.allowed'] = [...snapshot.tools.allowed];
|
|
103
|
+
}
|
|
104
|
+
if (snapshot.tools?.disabled) {
|
|
105
|
+
ephemerals['tools.disabled'] = [...snapshot.tools.disabled];
|
|
106
|
+
}
|
|
107
|
+
return ephemerals;
|
|
108
|
+
}
|
|
109
|
+
/**
|
|
110
|
+
* Creates the bottom-layer tool execution configuration for subagents.
|
|
111
|
+
*
|
|
112
|
+
* This is the single source of truth for tool-related configuration in the
|
|
113
|
+
* subagent, including scheduler creation. It interfaces directly with
|
|
114
|
+
* `foregroundConfig` and is responsible for injecting default dependencies
|
|
115
|
+
* (`messageBus` and `toolRegistry`) that callers may not provide.
|
|
116
|
+
*
|
|
117
|
+
* Delegation chain: createSchedulerConfig → toolExecutorContext → foregroundConfig
|
|
118
|
+
*/
|
|
119
|
+
export function createToolExecutionConfig(runtimeBundle, toolRegistry, foregroundConfig, messageBus, settingsSnapshot, toolConfig) {
|
|
120
|
+
const ephemerals = buildEphemeralSettings(settingsSnapshot);
|
|
121
|
+
if (toolConfig && Array.isArray(toolConfig.tools)) {
|
|
122
|
+
applyToolWhitelistToEphemerals(ephemerals, toolConfig);
|
|
123
|
+
}
|
|
124
|
+
return {
|
|
125
|
+
getToolRegistry: () => toolRegistry,
|
|
126
|
+
getEphemeralSettings: () => ({ ...ephemerals }),
|
|
127
|
+
getEphemeralSetting: (key) => ephemerals[key],
|
|
128
|
+
getExcludeTools: () => [],
|
|
129
|
+
getSessionId: () => runtimeBundle.runtimeContext.state.sessionId,
|
|
130
|
+
getTelemetryLogPromptsEnabled: () => Boolean(settingsSnapshot?.telemetry?.enabled),
|
|
131
|
+
getOrCreateScheduler: (sessionId, callbacks, options, dependencies) => foregroundConfig.getOrCreateScheduler(sessionId, callbacks, options, {
|
|
132
|
+
messageBus: dependencies?.messageBus ?? messageBus,
|
|
133
|
+
toolRegistry: dependencies?.toolRegistry ?? toolRegistry,
|
|
134
|
+
}),
|
|
135
|
+
disposeScheduler: (sessionId) => foregroundConfig.disposeScheduler(sessionId),
|
|
136
|
+
};
|
|
137
|
+
}
|
|
138
|
+
/** @internal — applies tool whitelist from toolConfig onto ephemeral settings */
|
|
139
|
+
function applyToolWhitelistToEphemerals(ephemerals, toolConfig) {
|
|
140
|
+
const normalizedWhitelist = toolConfig.tools
|
|
141
|
+
.filter((entry) => typeof entry === 'string')
|
|
142
|
+
.map((entry) => entry.trim())
|
|
143
|
+
.filter((entry) => entry.length > 0)
|
|
144
|
+
.map((entry) => entry.toLowerCase());
|
|
145
|
+
if (normalizedWhitelist.length === 0)
|
|
146
|
+
return;
|
|
147
|
+
const existingAllowed = Array.isArray(ephemerals['tools.allowed'])
|
|
148
|
+
? ephemerals['tools.allowed']
|
|
149
|
+
.map((entry) => (typeof entry === 'string' ? entry.trim() : ''))
|
|
150
|
+
.filter((entry) => entry.length > 0)
|
|
151
|
+
.map((entry) => entry.toLowerCase())
|
|
152
|
+
: [];
|
|
153
|
+
const allowedSet = existingAllowed.length > 0
|
|
154
|
+
? normalizedWhitelist.filter((entry) => existingAllowed.includes(entry))
|
|
155
|
+
: normalizedWhitelist;
|
|
156
|
+
ephemerals['tools.allowed'] = Array.from(new Set(allowedSet));
|
|
157
|
+
}
|
|
158
|
+
// ---------------------------------------------------------------------------
|
|
159
|
+
// Emoji filter
|
|
160
|
+
// ---------------------------------------------------------------------------
|
|
161
|
+
export function createEmojiFilter(settingsSnapshot) {
|
|
162
|
+
const filterMode =
|
|
163
|
+
// eslint-disable-next-line @typescript-eslint/no-unnecessary-condition -- BN4-C-P01: preserve defensive runtime boundary guard despite current static types.
|
|
164
|
+
settingsSnapshot?.emojifilter ?? 'auto';
|
|
165
|
+
if (filterMode === 'allowed') {
|
|
166
|
+
const noFilter = void 0;
|
|
167
|
+
return noFilter;
|
|
168
|
+
}
|
|
169
|
+
return new EmojiFilter({ mode: filterMode });
|
|
170
|
+
}
|
|
171
|
+
// ---------------------------------------------------------------------------
|
|
172
|
+
// Function declarations
|
|
173
|
+
// ---------------------------------------------------------------------------
|
|
174
|
+
export function buildRuntimeFunctionDeclarations(toolsView, toolConfig) {
|
|
175
|
+
if (!toolConfig || toolConfig.tools.length === 0) {
|
|
176
|
+
const noFunctionDeclarations = [];
|
|
177
|
+
return noFunctionDeclarations;
|
|
178
|
+
}
|
|
179
|
+
const listedNames = typeof toolsView.listToolNames === 'function'
|
|
180
|
+
? toolsView.listToolNames()
|
|
181
|
+
: [];
|
|
182
|
+
const allowedNames = new Set(listedNames.map(canonicalizeToolName));
|
|
183
|
+
const declarations = [];
|
|
184
|
+
// eslint-disable-next-line sonarjs/too-many-break-or-continue-in-loop -- Existing structure is intentionally preserved; refactoring this boundary is outside the lint slice.
|
|
185
|
+
for (const entry of toolConfig.tools) {
|
|
186
|
+
if (typeof entry !== 'string') {
|
|
187
|
+
declarations.push(entry);
|
|
188
|
+
continue;
|
|
189
|
+
}
|
|
190
|
+
if (allowedNames.size > 0 &&
|
|
191
|
+
!allowedNames.has(canonicalizeToolName(entry))) {
|
|
192
|
+
debugLogger.warn(`Tool "${entry}" is not permitted by the runtime view and is skipped.`);
|
|
193
|
+
continue;
|
|
194
|
+
}
|
|
195
|
+
const metadata = toolsView.getToolMetadata(entry);
|
|
196
|
+
if (!metadata) {
|
|
197
|
+
debugLogger.warn(`Tool "${entry}" is not available in the runtime view and is skipped.`);
|
|
198
|
+
continue;
|
|
199
|
+
}
|
|
200
|
+
declarations.push(convertMetadataToFunctionDeclaration(entry, metadata));
|
|
201
|
+
}
|
|
202
|
+
return declarations;
|
|
203
|
+
}
|
|
204
|
+
export function getScopeLocalFuncDefs(outputConfig) {
|
|
205
|
+
if (!outputConfig?.outputs) {
|
|
206
|
+
return [];
|
|
207
|
+
}
|
|
208
|
+
const emitValueTool = {
|
|
209
|
+
name: 'self_emitvalue',
|
|
210
|
+
description: `* This tool emits A SINGLE return value from this execution, such that it can be collected and presented to the calling function.
|
|
211
|
+
* You can only emit ONE VALUE each time you call this tool. You are expected to call this tool MULTIPLE TIMES if you have MULTIPLE OUTPUTS.`,
|
|
212
|
+
parametersJsonSchema: {
|
|
213
|
+
type: Type.OBJECT,
|
|
214
|
+
properties: {
|
|
215
|
+
emit_variable_name: {
|
|
216
|
+
description: 'This is the name of the variable to be returned.',
|
|
217
|
+
type: Type.STRING,
|
|
218
|
+
},
|
|
219
|
+
emit_variable_value: {
|
|
220
|
+
description: 'This is the _value_ to be returned for this variable.',
|
|
221
|
+
type: Type.STRING,
|
|
222
|
+
},
|
|
223
|
+
},
|
|
224
|
+
required: ['emit_variable_name', 'emit_variable_value'],
|
|
225
|
+
},
|
|
226
|
+
};
|
|
227
|
+
return [emitValueTool];
|
|
228
|
+
}
|
|
229
|
+
// ---------------------------------------------------------------------------
|
|
230
|
+
// System prompt
|
|
231
|
+
// ---------------------------------------------------------------------------
|
|
232
|
+
export function buildChatSystemPrompt(promptConfig, outputConfig, context) {
|
|
233
|
+
let finalPrompt = templateString(promptConfig.systemPrompt, context);
|
|
234
|
+
if (outputConfig?.outputs) {
|
|
235
|
+
let outputInstructions = '\n\nAfter you have achieved all other goals, you MUST emit the required output variables. For each expected output, make one final call to the `self_emitvalue` tool.';
|
|
236
|
+
for (const [key, value] of Object.entries(outputConfig.outputs)) {
|
|
237
|
+
outputInstructions += `\n* Use 'self_emitvalue' to emit the '${key}' key, with a value described as: '${value}'`;
|
|
238
|
+
}
|
|
239
|
+
finalPrompt += outputInstructions;
|
|
240
|
+
}
|
|
241
|
+
finalPrompt += `
|
|
242
|
+
|
|
243
|
+
Important Rules:
|
|
244
|
+
* You are running in a non-interactive mode. You CANNOT ask the user for input or clarification. You must proceed with the information you have.
|
|
245
|
+
* Once you believe all goals have been met and all required outputs have been emitted, stop calling tools.`;
|
|
246
|
+
return finalPrompt;
|
|
247
|
+
}
|
|
248
|
+
// ---------------------------------------------------------------------------
|
|
249
|
+
// Scheduler config
|
|
250
|
+
// ---------------------------------------------------------------------------
|
|
251
|
+
/**
|
|
252
|
+
* Creates a higher-level Config facade for the CoreToolScheduler.
|
|
253
|
+
*
|
|
254
|
+
* This facade delegates scheduler operations (`getOrCreateScheduler`,
|
|
255
|
+
* `disposeScheduler`) through `toolExecutorContext` rather than bypassing
|
|
256
|
+
* it. The only policy this layer adds is the `interactiveMode` flag.
|
|
257
|
+
*
|
|
258
|
+
* Delegation chain: createSchedulerConfig → toolExecutorContext → foregroundConfig
|
|
259
|
+
*/
|
|
260
|
+
export function createSchedulerConfig(toolExecutorContext, foregroundConfig, options) {
|
|
261
|
+
const isInteractive = options?.interactive ?? false;
|
|
262
|
+
const getEphemeralSettings = typeof toolExecutorContext.getEphemeralSettings === 'function'
|
|
263
|
+
? () => ({
|
|
264
|
+
...toolExecutorContext.getEphemeralSettings(),
|
|
265
|
+
})
|
|
266
|
+
: () => foregroundConfig.getEphemeralSettings();
|
|
267
|
+
const getEphemeralSetting = (key) => {
|
|
268
|
+
const settings = getEphemeralSettings();
|
|
269
|
+
return settings[key];
|
|
270
|
+
};
|
|
271
|
+
const getExcludeTools = typeof toolExecutorContext.getExcludeTools === 'function'
|
|
272
|
+
? () => toolExecutorContext.getExcludeTools()
|
|
273
|
+
: // eslint-disable-next-line @typescript-eslint/no-unnecessary-condition -- BN4-C-P01: preserve defensive runtime boundary guard despite current static types.
|
|
274
|
+
() => foregroundConfig.getExcludeTools?.() ?? [];
|
|
275
|
+
const getTelemetryLogPromptsEnabled = typeof toolExecutorContext.getTelemetryLogPromptsEnabled === 'function'
|
|
276
|
+
? () => toolExecutorContext.getTelemetryLogPromptsEnabled()
|
|
277
|
+
: () => foregroundConfig.getTelemetryLogPromptsEnabled();
|
|
278
|
+
const getAllowedTools = () => {
|
|
279
|
+
const ephemerals = getEphemeralSettings();
|
|
280
|
+
const allowed = ephemerals['tools.allowed'];
|
|
281
|
+
if (Array.isArray(allowed)) {
|
|
282
|
+
return allowed.filter((entry) => typeof entry === 'string');
|
|
283
|
+
}
|
|
284
|
+
return typeof foregroundConfig.getAllowedTools === 'function'
|
|
285
|
+
? foregroundConfig.getAllowedTools()
|
|
286
|
+
: undefined;
|
|
287
|
+
};
|
|
288
|
+
// Partial Config adapter for CoreToolScheduler — only the methods the
|
|
289
|
+
// scheduler and tool-execution paths actually call are implemented.
|
|
290
|
+
return {
|
|
291
|
+
getToolRegistry: () => toolExecutorContext.getToolRegistry(),
|
|
292
|
+
getSessionId: () => toolExecutorContext.getSessionId(),
|
|
293
|
+
getEphemeralSettings,
|
|
294
|
+
getEphemeralSetting,
|
|
295
|
+
getExcludeTools,
|
|
296
|
+
getTelemetryLogPromptsEnabled,
|
|
297
|
+
getAllowedTools,
|
|
298
|
+
getApprovalMode: () => typeof foregroundConfig.getApprovalMode === 'function'
|
|
299
|
+
? foregroundConfig.getApprovalMode()
|
|
300
|
+
: ApprovalMode.DEFAULT,
|
|
301
|
+
getPolicyEngine: () => foregroundConfig.getPolicyEngine(),
|
|
302
|
+
getOrCreateScheduler: (sessionId, callbacks, schedulerOptions, dependencies) => toolExecutorContext.getOrCreateScheduler(sessionId, callbacks, { ...schedulerOptions, interactiveMode: isInteractive }, dependencies),
|
|
303
|
+
disposeScheduler: (sessionId) => {
|
|
304
|
+
toolExecutorContext.disposeScheduler(sessionId);
|
|
305
|
+
},
|
|
306
|
+
// eslint-disable-next-line @typescript-eslint/no-unnecessary-condition -- BN4-C-P01: preserve defensive runtime boundary guard despite current static types.
|
|
307
|
+
getEnableHooks: () => foregroundConfig.getEnableHooks?.() ?? false,
|
|
308
|
+
// eslint-disable-next-line @typescript-eslint/no-unnecessary-condition -- BN4-C-P01: preserve defensive runtime boundary guard despite current static types.
|
|
309
|
+
getHooks: () => foregroundConfig.getHooks?.(),
|
|
310
|
+
// eslint-disable-next-line @typescript-eslint/no-unnecessary-condition -- BN4-C-P01: preserve defensive runtime boundary guard despite current static types.
|
|
311
|
+
getHookSystem: () => foregroundConfig.getHookSystem?.(),
|
|
312
|
+
// eslint-disable-next-line @typescript-eslint/no-unnecessary-condition -- BN4-C-P01: preserve defensive runtime boundary guard despite current static types.
|
|
313
|
+
getWorkingDir: () => foregroundConfig.getWorkingDir?.() ?? process.cwd(),
|
|
314
|
+
// eslint-disable-next-line @typescript-eslint/no-unnecessary-condition -- BN4-C-P01: preserve defensive runtime boundary guard despite current static types.
|
|
315
|
+
getTargetDir: () => foregroundConfig.getTargetDir?.() ?? process.cwd(),
|
|
316
|
+
};
|
|
317
|
+
}
|
|
318
|
+
export async function createChatObject(params) {
|
|
319
|
+
const { promptConfig, modelConfig, outputConfig, toolConfig } = params;
|
|
320
|
+
const { runtimeContext, contentGenerator, environmentContextLoader } = params;
|
|
321
|
+
const { foregroundConfig: config, context } = params;
|
|
322
|
+
const logger = new DebugLogger('llxprt:subagent');
|
|
323
|
+
if (typeof promptConfig.systemPrompt !== 'string' ||
|
|
324
|
+
promptConfig.systemPrompt.trim().length === 0) {
|
|
325
|
+
throw new Error('PromptConfig.systemPrompt must be a non-empty string.');
|
|
326
|
+
}
|
|
327
|
+
const startHistory = [];
|
|
328
|
+
const personaPrompt = buildChatSystemPrompt(promptConfig, outputConfig, context);
|
|
329
|
+
const runtimeDecls = buildRuntimeFunctionDeclarations(runtimeContext.tools, toolConfig);
|
|
330
|
+
const scopeLocalDecls = getScopeLocalFuncDefs(outputConfig);
|
|
331
|
+
const combinedDeclarations = [...runtimeDecls, ...scopeLocalDecls];
|
|
332
|
+
const systemInstruction = await buildSystemInstruction(environmentContextLoader, runtimeContext, modelConfig, combinedDeclarations, config, personaPrompt, logger);
|
|
333
|
+
return instantiateChat(modelConfig, systemInstruction, combinedDeclarations, startHistory, runtimeContext, contentGenerator, logger);
|
|
334
|
+
}
|
|
335
|
+
async function buildSystemInstruction(environmentContextLoader, runtimeContext, modelConfig, combinedDeclarations, config, personaPrompt, logger) {
|
|
336
|
+
const envParts = await environmentContextLoader(runtimeContext);
|
|
337
|
+
const envContextText = envParts
|
|
338
|
+
.map((part) => ('text' in part ? part.text : ''))
|
|
339
|
+
.join('\n')
|
|
340
|
+
.trim();
|
|
341
|
+
const toolNames = Array.from(new Set(combinedDeclarations
|
|
342
|
+
// eslint-disable-next-line @typescript-eslint/no-unnecessary-condition -- BN4-C-P01: preserve defensive runtime boundary guard despite current static types.
|
|
343
|
+
.map((d) => d?.name?.trim())
|
|
344
|
+
.filter((name) => Boolean(name && name.length > 0))));
|
|
345
|
+
const mcpInstructions = config.getMcpClientManager()?.getMcpInstructions();
|
|
346
|
+
const coreSystemPrompt = await getCoreSystemPromptAsync({
|
|
347
|
+
mcpInstructions,
|
|
348
|
+
model: modelConfig.model,
|
|
349
|
+
tools: toolNames,
|
|
350
|
+
includeSubagentDelegation: false,
|
|
351
|
+
interactionMode: 'subagent',
|
|
352
|
+
});
|
|
353
|
+
const instructionSections = [
|
|
354
|
+
envContextText,
|
|
355
|
+
// eslint-disable-next-line @typescript-eslint/no-unnecessary-condition -- BN4-C-P01: preserve defensive runtime boundary guard despite current static types.
|
|
356
|
+
coreSystemPrompt?.trim() ?? '',
|
|
357
|
+
// eslint-disable-next-line @typescript-eslint/no-unnecessary-condition -- BN4-C-P01: preserve defensive runtime boundary guard despite current static types.
|
|
358
|
+
personaPrompt?.trim() ?? '',
|
|
359
|
+
].filter((section) => section.length > 0);
|
|
360
|
+
const systemInstruction = instructionSections.length > 0 ? instructionSections.join('\n\n') : '';
|
|
361
|
+
logger.debug(() => {
|
|
362
|
+
const preview = systemInstruction && systemInstruction.length > 0
|
|
363
|
+
? systemInstruction.slice(0, 1200)
|
|
364
|
+
: '<empty>';
|
|
365
|
+
return `System instruction preview: ${preview}`;
|
|
366
|
+
});
|
|
367
|
+
return systemInstruction;
|
|
368
|
+
}
|
|
369
|
+
function instantiateChat(modelConfig, systemInstruction, combinedDeclarations, startHistory, runtimeContext, contentGenerator, _logger) {
|
|
370
|
+
try {
|
|
371
|
+
const generationConfig = {
|
|
372
|
+
temperature: modelConfig.temp,
|
|
373
|
+
topP: modelConfig.top_p,
|
|
374
|
+
systemInstruction: systemInstruction || undefined,
|
|
375
|
+
tools: combinedDeclarations.length > 0
|
|
376
|
+
? [{ functionDeclarations: combinedDeclarations }]
|
|
377
|
+
: undefined,
|
|
378
|
+
};
|
|
379
|
+
return new ChatSession(runtimeContext, contentGenerator, generationConfig, startHistory);
|
|
380
|
+
}
|
|
381
|
+
catch (error) {
|
|
382
|
+
void reportError(error, 'Error initializing Gemini chat session.', startHistory, 'startChat');
|
|
383
|
+
const missingChatObject = null;
|
|
384
|
+
return missingChatObject;
|
|
385
|
+
}
|
|
386
|
+
}
|
|
387
|
+
//# sourceMappingURL=subagentRuntimeSetup.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"subagentRuntimeSetup.js","sourceRoot":"","sources":["../../../src/core/subagentRuntimeSetup.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,17 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* @license
|
|
3
|
+
* Copyright 2025 Google LLC
|
|
4
|
+
* SPDX-License-Identifier: Apache-2.0
|
|
5
|
+
*/
|
|
6
|
+
import type { Config } from '@vybestack/llxprt-code-core/config/config.js';
|
|
7
|
+
import type { ToolCallRequestInfo } from './turn.js';
|
|
8
|
+
import type { CompletedToolCall, OutputUpdateHandler, ToolCallsUpdateHandler } from './coreToolScheduler.js';
|
|
9
|
+
export type SubagentSchedulerFactory = (args: {
|
|
10
|
+
schedulerConfig: Config;
|
|
11
|
+
onAllToolCallsComplete: (calls: CompletedToolCall[]) => Promise<void>;
|
|
12
|
+
outputUpdateHandler: OutputUpdateHandler;
|
|
13
|
+
onToolCallsUpdate?: ToolCallsUpdateHandler;
|
|
14
|
+
}) => {
|
|
15
|
+
schedule(request: ToolCallRequestInfo | ToolCallRequestInfo[], signal: AbortSignal): Promise<void> | void;
|
|
16
|
+
dispose?: () => void;
|
|
17
|
+
};
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"subagentScheduler.js","sourceRoot":"","sources":["../../../src/core/subagentScheduler.ts"],"names":[],"mappings":"AAAA;;;;GAIG"}
|
|
@@ -0,0 +1,51 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* @license
|
|
3
|
+
* Copyright 2025 Google LLC
|
|
4
|
+
* SPDX-License-Identifier: Apache-2.0
|
|
5
|
+
*/
|
|
6
|
+
/**
|
|
7
|
+
* @fileoverview Tool call dispatch, emit handling, and response building
|
|
8
|
+
* for subagents.
|
|
9
|
+
*
|
|
10
|
+
* Extracted from subagent.ts as part of Issue #1581 (Phase 3).
|
|
11
|
+
*/
|
|
12
|
+
import type { DebugLogger } from '@vybestack/llxprt-code-core/debug/DebugLogger.js';
|
|
13
|
+
import type { Config } from '@vybestack/llxprt-code-core/config/config.js';
|
|
14
|
+
import { type ToolCallRequestInfo } from './turn.js';
|
|
15
|
+
import { type ToolExecutionConfig } from './nonInteractiveToolExecutor.js';
|
|
16
|
+
import { type Part, type FunctionCall, type Content } from '@google/genai';
|
|
17
|
+
import type { AgentRuntimeContext, ToolRegistryView } from '@vybestack/llxprt-code-core/runtime/AgentRuntimeContext.js';
|
|
18
|
+
import { ToolErrorType } from '@vybestack/llxprt-code-tools';
|
|
19
|
+
import { type ToolResultDisplay } from '@vybestack/llxprt-code-tools';
|
|
20
|
+
import { type CompletedToolCall } from './coreToolScheduler.js';
|
|
21
|
+
import { type OutputObject } from '@vybestack/llxprt-code-core/core/subagentTypes.js';
|
|
22
|
+
import type { MessageBus } from '@vybestack/llxprt-code-core/confirmation-bus/message-bus.js';
|
|
23
|
+
export declare function toSnakeCase(value: string): string;
|
|
24
|
+
export declare function isFatalToolError(errorType: ToolErrorType | undefined): boolean;
|
|
25
|
+
export declare function extractToolDetail(resultDisplay?: ToolResultDisplay, error?: Error): string | undefined;
|
|
26
|
+
export declare function buildToolUnavailableMessage(toolName: string, resultDisplay?: ToolResultDisplay, error?: Error): string;
|
|
27
|
+
export declare function resolveToolName(rawName: string | undefined, toolsView: ToolRegistryView): string | null;
|
|
28
|
+
export declare function finalizeOutput(output: OutputObject): void;
|
|
29
|
+
export interface EmitValueContext {
|
|
30
|
+
output: OutputObject;
|
|
31
|
+
onMessage?: (message: string) => void;
|
|
32
|
+
subagentId: string;
|
|
33
|
+
logger: DebugLogger;
|
|
34
|
+
}
|
|
35
|
+
export declare function handleEmitValueCall(request: ToolCallRequestInfo, ctx: EmitValueContext): Part[];
|
|
36
|
+
export interface BuildPartsContext {
|
|
37
|
+
onMessage?: (message: string) => void;
|
|
38
|
+
subagentId: string;
|
|
39
|
+
logger: DebugLogger;
|
|
40
|
+
}
|
|
41
|
+
export declare function buildPartsFromCompletedCalls(completedCalls: CompletedToolCall[], ctx: BuildPartsContext): Part[];
|
|
42
|
+
export interface ProcessFunctionCallsContext {
|
|
43
|
+
output: OutputObject;
|
|
44
|
+
subagentId: string;
|
|
45
|
+
logger: DebugLogger;
|
|
46
|
+
toolExecutorContext: ToolExecutionConfig;
|
|
47
|
+
config: Config;
|
|
48
|
+
messageBus?: MessageBus;
|
|
49
|
+
}
|
|
50
|
+
export declare function processFunctionCalls(functionCalls: FunctionCall[], abortController: AbortController, promptId: string, ctx: ProcessFunctionCallsContext): Promise<Content[]>;
|
|
51
|
+
export declare function buildTodoCompletionPrompt(runtimeContext: AgentRuntimeContext, subagentId: string, logger: DebugLogger): Promise<string | null>;
|