@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,503 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* @license
|
|
3
|
+
* Copyright 2025 Vybestack LLC
|
|
4
|
+
* SPDX-License-Identifier: Apache-2.0
|
|
5
|
+
*/
|
|
6
|
+
/* eslint-disable complexity, sonarjs/cognitive-complexity -- Phase 5: legacy core boundary retained while larger decomposition continues. */
|
|
7
|
+
import { randomUUID } from 'node:crypto';
|
|
8
|
+
import { isLoadBalancerProfile, } from '@vybestack/llxprt-code-settings';
|
|
9
|
+
import { SubAgentScope } from './subagent.js';
|
|
10
|
+
import fs from 'node:fs';
|
|
11
|
+
import path from 'node:path';
|
|
12
|
+
import { homedir } from 'node:os';
|
|
13
|
+
import { createAgentRuntimeState, } from '@vybestack/llxprt-code-core/runtime/AgentRuntimeState.js';
|
|
14
|
+
import { createRuntimeSettingsService, createSettingsProviderRuntimeContext, } from '@vybestack/llxprt-code-core/runtime/settingsRuntimeAdapter.js';
|
|
15
|
+
import { loadAgentRuntime, } from '@vybestack/llxprt-code-core/runtime/AgentRuntimeLoader.js';
|
|
16
|
+
import { getEnvironmentContext } from '@vybestack/llxprt-code-core/utils/environmentContext.js';
|
|
17
|
+
import { debugLogger } from '@vybestack/llxprt-code-core/utils/debugLogger.js';
|
|
18
|
+
import { canonicalizeToolName } from './toolGovernance.js';
|
|
19
|
+
const createAbortError = (message) => {
|
|
20
|
+
const error = new Error(message);
|
|
21
|
+
error.name = 'AbortError';
|
|
22
|
+
return error;
|
|
23
|
+
};
|
|
24
|
+
const DEFAULT_DISABLED_TOOLS = ['google_web_fetch'];
|
|
25
|
+
const normalizeDefaultToolSet = (tools) => new Set(tools.map((tool) => canonicalizeToolName(tool)).filter(Boolean));
|
|
26
|
+
/**
|
|
27
|
+
* Light-weight orchestrator responsible for resolving subagent configuration,
|
|
28
|
+
* building isolated runtime bundles, and launching {@link SubAgentScope} instances.
|
|
29
|
+
*
|
|
30
|
+
* @plan PLAN-20251029-SUBAGENTORCHESTRATION
|
|
31
|
+
* @requirement REQ-SUBAGENT-ORCH-001, REQ-SUBAGENT-ORCH-002
|
|
32
|
+
*/
|
|
33
|
+
export class SubagentOrchestrator {
|
|
34
|
+
options;
|
|
35
|
+
runtimeLoader;
|
|
36
|
+
scopeFactory;
|
|
37
|
+
idFactory;
|
|
38
|
+
defaultDisabledTools = normalizeDefaultToolSet(DEFAULT_DISABLED_TOOLS);
|
|
39
|
+
constructor(options) {
|
|
40
|
+
this.options = options;
|
|
41
|
+
this.runtimeLoader = options.runtimeLoader ?? loadAgentRuntime;
|
|
42
|
+
this.scopeFactory =
|
|
43
|
+
options.scopeFactory ?? SubAgentScope.create.bind(SubAgentScope);
|
|
44
|
+
this.idFactory = options.idFactory ?? randomUUID;
|
|
45
|
+
}
|
|
46
|
+
buildScopeDispose(scope, runtimeResult) {
|
|
47
|
+
return async () => {
|
|
48
|
+
if (typeof scope.dispose === 'function') {
|
|
49
|
+
scope.dispose();
|
|
50
|
+
}
|
|
51
|
+
// eslint-disable-next-line @typescript-eslint/no-unnecessary-condition -- Subagent settings cross persisted/runtime boundaries despite declared types.
|
|
52
|
+
const history = runtimeResult.history ?? scope.runtimeContext.history;
|
|
53
|
+
// eslint-disable-next-line @typescript-eslint/no-unnecessary-condition -- Subagent settings cross persisted/runtime boundaries despite declared types.
|
|
54
|
+
if (history !== undefined) {
|
|
55
|
+
const disposable = history.dispose;
|
|
56
|
+
if (typeof disposable === 'function') {
|
|
57
|
+
disposable.call(history);
|
|
58
|
+
}
|
|
59
|
+
else if (typeof history.clear === 'function') {
|
|
60
|
+
history.clear();
|
|
61
|
+
history.removeAllListeners?.();
|
|
62
|
+
}
|
|
63
|
+
}
|
|
64
|
+
};
|
|
65
|
+
}
|
|
66
|
+
async createScopeWithEnvironment(subagent, promptConfig, modelConfig, runConfig, request, runtimeResult, signal) {
|
|
67
|
+
return this.scopeFactory(subagent.name, this.options.foregroundConfig, promptConfig, modelConfig, runConfig, request.toolConfig, request.outputConfig, {
|
|
68
|
+
runtimeBundle: runtimeResult,
|
|
69
|
+
environmentContextLoader: async (_runtime) => getEnvironmentContext(this.options.foregroundConfig),
|
|
70
|
+
}, signal);
|
|
71
|
+
}
|
|
72
|
+
/**
|
|
73
|
+
* Launches a subagent by name, returning the created {@link SubAgentScope}
|
|
74
|
+
* and associated agent metadata.
|
|
75
|
+
*/
|
|
76
|
+
async launch(request, signal) {
|
|
77
|
+
this.throwIfAborted(signal, 'Subagent launch aborted before start.');
|
|
78
|
+
const subagent = await this.loadSubagentConfig(request.name);
|
|
79
|
+
this.throwIfAborted(signal, 'Subagent launch aborted while loading config.');
|
|
80
|
+
const profile = await this.options.profileManager.loadProfile(subagent.profile);
|
|
81
|
+
this.throwIfAborted(signal, 'Subagent launch aborted while loading profile.');
|
|
82
|
+
const runtimeProfile = await this.resolveRuntimeProfile(profile);
|
|
83
|
+
this.throwIfAborted(signal, 'Subagent launch aborted while resolving runtime profile.');
|
|
84
|
+
const promptConfig = this.buildPromptConfig(subagent.systemPrompt, request.behaviourPrompts);
|
|
85
|
+
const modelConfig = this.buildModelConfig(runtimeProfile.effectiveProfile);
|
|
86
|
+
const runConfig = this.buildRunConfig(profile, request.runConfig);
|
|
87
|
+
this.throwIfAborted(signal, 'Subagent launch aborted before runtime assembly.');
|
|
88
|
+
const agentRuntimeId = this.createRuntimeId(subagent.name);
|
|
89
|
+
const runtimeResult = await this.createRuntimeBundle({ subagent, runtimeProfile, modelConfig, agentRuntimeId }, signal);
|
|
90
|
+
this.throwIfAborted(signal, 'Subagent launch aborted after runtime assembly completed.');
|
|
91
|
+
const scope = await this.createScopeWithEnvironment(subagent, promptConfig, modelConfig, runConfig, request, runtimeResult, signal);
|
|
92
|
+
this.throwIfAborted(signal, 'Subagent launch aborted before completion.');
|
|
93
|
+
const agentId = typeof scope.getAgentId === 'function'
|
|
94
|
+
? scope.getAgentId()
|
|
95
|
+
: `${subagent.name}-${agentRuntimeId}`;
|
|
96
|
+
return {
|
|
97
|
+
agentId,
|
|
98
|
+
scope,
|
|
99
|
+
prompt: promptConfig,
|
|
100
|
+
profile,
|
|
101
|
+
config: subagent,
|
|
102
|
+
runtime: runtimeResult,
|
|
103
|
+
dispose: this.buildScopeDispose(scope, runtimeResult),
|
|
104
|
+
};
|
|
105
|
+
}
|
|
106
|
+
throwIfAborted(signal, message) {
|
|
107
|
+
if (signal?.aborted === true) {
|
|
108
|
+
throw createAbortError(message);
|
|
109
|
+
}
|
|
110
|
+
}
|
|
111
|
+
async loadSubagentConfig(name) {
|
|
112
|
+
// eslint-disable-next-line @typescript-eslint/no-unnecessary-condition -- Subagent settings cross persisted/runtime boundaries despite declared types.
|
|
113
|
+
if (!name?.trim()) {
|
|
114
|
+
throw new Error('Subagent name is required.');
|
|
115
|
+
}
|
|
116
|
+
try {
|
|
117
|
+
return await this.options.subagentManager.loadSubagent(name);
|
|
118
|
+
}
|
|
119
|
+
catch (error) {
|
|
120
|
+
if (error instanceof Error) {
|
|
121
|
+
// Check if this is a "subagent not found" error
|
|
122
|
+
if (error.message.includes(`'${name}' not found`)) {
|
|
123
|
+
throw new Error(`Unable to load subagent '${name}': Subagent not found. Use the list_subagents tool to discover available subagents before calling the task tool.`);
|
|
124
|
+
}
|
|
125
|
+
throw new Error(`Unable to load subagent '${name}': ${error.message}`);
|
|
126
|
+
}
|
|
127
|
+
throw error;
|
|
128
|
+
}
|
|
129
|
+
}
|
|
130
|
+
buildPromptConfig(basePrompt, additions) {
|
|
131
|
+
// eslint-disable-next-line @typescript-eslint/no-unnecessary-condition -- Subagent settings cross persisted/runtime boundaries despite declared types.
|
|
132
|
+
const trimmedBase = basePrompt?.trim();
|
|
133
|
+
const trimmedAdditions = (additions ?? [])
|
|
134
|
+
// eslint-disable-next-line @typescript-eslint/no-unnecessary-condition -- Subagent settings cross persisted/runtime boundaries despite declared types.
|
|
135
|
+
.map((part) => part?.trim())
|
|
136
|
+
.filter((part) => part.length > 0);
|
|
137
|
+
const promptSections = [];
|
|
138
|
+
if (trimmedBase) {
|
|
139
|
+
promptSections.push(trimmedBase);
|
|
140
|
+
}
|
|
141
|
+
if (trimmedAdditions.length > 0) {
|
|
142
|
+
const numberedInstructions = trimmedAdditions
|
|
143
|
+
.map((instruction, index) => `(${index + 1}) ${instruction}`)
|
|
144
|
+
.join('\n');
|
|
145
|
+
promptSections.push([
|
|
146
|
+
'--- CURRENT TASK DIRECTIVES ---',
|
|
147
|
+
'Follow these instructions precisely for this run. They take precedence over any default behaviours.',
|
|
148
|
+
numberedInstructions,
|
|
149
|
+
].join('\n'));
|
|
150
|
+
}
|
|
151
|
+
const merged = promptSections.join('\n\n');
|
|
152
|
+
return {
|
|
153
|
+
systemPrompt: merged,
|
|
154
|
+
};
|
|
155
|
+
}
|
|
156
|
+
buildModelConfig(profile) {
|
|
157
|
+
return {
|
|
158
|
+
model: profile.model,
|
|
159
|
+
temp: profile.modelParams.temperature ?? 0.7,
|
|
160
|
+
top_p: profile.modelParams.top_p ?? 1,
|
|
161
|
+
};
|
|
162
|
+
}
|
|
163
|
+
buildRunConfig(profile, custom) {
|
|
164
|
+
const profileMaxTime = this.getNumberSetting(profile.ephemeralSettings, [
|
|
165
|
+
'subagent.max_time_minutes',
|
|
166
|
+
'max_time_minutes',
|
|
167
|
+
]);
|
|
168
|
+
const runConfig = {
|
|
169
|
+
max_time_minutes: custom?.max_time_minutes ?? profileMaxTime ?? Number.POSITIVE_INFINITY,
|
|
170
|
+
};
|
|
171
|
+
const profileMaxTurns = this.getNumberSetting(profile.ephemeralSettings, [
|
|
172
|
+
'maxTurnsPerPrompt',
|
|
173
|
+
]);
|
|
174
|
+
const maxTurns = custom?.max_turns ?? profileMaxTurns ?? 200;
|
|
175
|
+
// eslint-disable-next-line @typescript-eslint/no-unnecessary-condition -- Subagent settings cross persisted/runtime boundaries despite declared types.
|
|
176
|
+
if (maxTurns !== undefined && maxTurns > 0) {
|
|
177
|
+
runConfig.max_turns = Math.floor(maxTurns);
|
|
178
|
+
}
|
|
179
|
+
if (custom?.grace_period_seconds !== undefined) {
|
|
180
|
+
runConfig.grace_period_seconds = custom.grace_period_seconds;
|
|
181
|
+
}
|
|
182
|
+
return runConfig;
|
|
183
|
+
}
|
|
184
|
+
async resolveRuntimeProfile(profile) {
|
|
185
|
+
if (!isLoadBalancerProfile(profile)) {
|
|
186
|
+
return { effectiveProfile: profile };
|
|
187
|
+
}
|
|
188
|
+
const firstProfileName = profile.profiles[0];
|
|
189
|
+
if (!firstProfileName) {
|
|
190
|
+
throw new Error('Load balancer subagent profile must reference a profile.');
|
|
191
|
+
}
|
|
192
|
+
const effectiveProfile = await this.options.profileManager.loadProfile(firstProfileName);
|
|
193
|
+
if (isLoadBalancerProfile(effectiveProfile)) {
|
|
194
|
+
throw new Error(`Load balancer subagent profile cannot use nested load balancer profile '${firstProfileName}'.`);
|
|
195
|
+
}
|
|
196
|
+
return { effectiveProfile };
|
|
197
|
+
}
|
|
198
|
+
baseSessionId() {
|
|
199
|
+
const { foregroundConfig } = this.options;
|
|
200
|
+
if (typeof foregroundConfig.getSessionId === 'function') {
|
|
201
|
+
const session = foregroundConfig.getSessionId();
|
|
202
|
+
if (session) {
|
|
203
|
+
return String(session);
|
|
204
|
+
}
|
|
205
|
+
}
|
|
206
|
+
return 'llxprt-session';
|
|
207
|
+
}
|
|
208
|
+
createRuntimeId(subagentName) {
|
|
209
|
+
const suffix = this.idFactory().slice(0, 8);
|
|
210
|
+
return `${this.baseSessionId()}#${subagentName}#${suffix}`;
|
|
211
|
+
}
|
|
212
|
+
buildContentGeneratorConfig(profile, modelConfig) {
|
|
213
|
+
const authKey = this.getStringSetting(profile.ephemeralSettings, [
|
|
214
|
+
'auth-key',
|
|
215
|
+
]);
|
|
216
|
+
const proxy = this.getStringSetting(profile.ephemeralSettings, [
|
|
217
|
+
'proxy',
|
|
218
|
+
'proxy-url',
|
|
219
|
+
]);
|
|
220
|
+
return {
|
|
221
|
+
model: modelConfig.model,
|
|
222
|
+
apiKey: authKey,
|
|
223
|
+
proxy,
|
|
224
|
+
};
|
|
225
|
+
}
|
|
226
|
+
createSettingsSnapshot(profile) {
|
|
227
|
+
const allowed = this.getStringArraySetting(profile.ephemeralSettings, [
|
|
228
|
+
'tools.allowed',
|
|
229
|
+
'tools_allowed',
|
|
230
|
+
]);
|
|
231
|
+
const disabled = this.mergeDefaultDisabledTools(this.getStringArraySetting(profile.ephemeralSettings, [
|
|
232
|
+
'tools.disabled',
|
|
233
|
+
'disabled-tools',
|
|
234
|
+
]), allowed);
|
|
235
|
+
return {
|
|
236
|
+
compressionThreshold: this.getNumberSetting(profile.ephemeralSettings, [
|
|
237
|
+
'compression-threshold',
|
|
238
|
+
]),
|
|
239
|
+
contextLimit: this.getNumberSetting(profile.ephemeralSettings, [
|
|
240
|
+
'context-limit',
|
|
241
|
+
]),
|
|
242
|
+
preserveThreshold: this.getNumberSetting(profile.ephemeralSettings, [
|
|
243
|
+
'compression-preserve-threshold',
|
|
244
|
+
]),
|
|
245
|
+
toolFormatOverride: this.getStringSetting(profile.ephemeralSettings, [
|
|
246
|
+
'tool-format',
|
|
247
|
+
]),
|
|
248
|
+
tools: {
|
|
249
|
+
allowed,
|
|
250
|
+
disabled,
|
|
251
|
+
},
|
|
252
|
+
};
|
|
253
|
+
}
|
|
254
|
+
populateProviderSettings(service, provider, profile) {
|
|
255
|
+
const temperature = profile.modelParams.temperature;
|
|
256
|
+
if (typeof temperature === 'number') {
|
|
257
|
+
service.set(`providers.${provider}.temperature`, temperature);
|
|
258
|
+
}
|
|
259
|
+
const maxTokens = profile.modelParams.max_tokens;
|
|
260
|
+
if (typeof maxTokens === 'number') {
|
|
261
|
+
service.set(`providers.${provider}.maxTokens`, maxTokens);
|
|
262
|
+
}
|
|
263
|
+
const baseUrl = this.getStringSetting(profile.ephemeralSettings, [
|
|
264
|
+
'base-url',
|
|
265
|
+
]);
|
|
266
|
+
if (baseUrl) {
|
|
267
|
+
service.set(`providers.${provider}.base-url`, baseUrl);
|
|
268
|
+
}
|
|
269
|
+
else {
|
|
270
|
+
service.set(`providers.${provider}.base-url`, undefined);
|
|
271
|
+
}
|
|
272
|
+
}
|
|
273
|
+
populateAuthSettings(service, provider, profile) {
|
|
274
|
+
const authKey = this.getStringSetting(profile.ephemeralSettings, [
|
|
275
|
+
'auth-key',
|
|
276
|
+
]);
|
|
277
|
+
if (authKey) {
|
|
278
|
+
service.set('auth-key', authKey);
|
|
279
|
+
service.set(`providers.${provider}.auth-key`, authKey);
|
|
280
|
+
}
|
|
281
|
+
const authKeyName = this.getStringSetting(profile.ephemeralSettings, [
|
|
282
|
+
'auth-key-name',
|
|
283
|
+
]);
|
|
284
|
+
if (authKeyName) {
|
|
285
|
+
service.set('auth-key-name', authKeyName);
|
|
286
|
+
}
|
|
287
|
+
const authKeyfile = this.getStringSetting(profile.ephemeralSettings, [
|
|
288
|
+
'auth-keyfile',
|
|
289
|
+
]);
|
|
290
|
+
if (authKeyfile) {
|
|
291
|
+
const expandedKeyfile = authKeyfile.replace(/^~(?=$|[\\/])/, homedir());
|
|
292
|
+
service.set('auth-keyfile', expandedKeyfile);
|
|
293
|
+
service.set(`providers.${provider}.auth-keyfile`, expandedKeyfile);
|
|
294
|
+
const authKey = service.get(`providers.${provider}.auth-key`);
|
|
295
|
+
const shouldLoadApiKeyfile =
|
|
296
|
+
// eslint-disable-next-line sonarjs/expression-complexity -- Existing structure is intentionally preserved; refactoring this boundary is outside the lint slice.
|
|
297
|
+
authKey === undefined ||
|
|
298
|
+
authKey === null ||
|
|
299
|
+
authKey === '' ||
|
|
300
|
+
authKey === false ||
|
|
301
|
+
authKey === 0 ||
|
|
302
|
+
(typeof authKey === 'number' && Number.isNaN(authKey));
|
|
303
|
+
if (shouldLoadApiKeyfile) {
|
|
304
|
+
this.tryLoadApiKeyFromKeyfile(provider, expandedKeyfile, service);
|
|
305
|
+
}
|
|
306
|
+
}
|
|
307
|
+
}
|
|
308
|
+
tryLoadApiKeyFromKeyfile(provider, expandedKeyfile, service) {
|
|
309
|
+
try {
|
|
310
|
+
const resolvedPath = path.resolve(expandedKeyfile);
|
|
311
|
+
if (fs.existsSync(resolvedPath)) {
|
|
312
|
+
const content = fs.readFileSync(resolvedPath, 'utf8').trim();
|
|
313
|
+
if (content !== '') {
|
|
314
|
+
service.set(`providers.${provider}.auth-key`, content);
|
|
315
|
+
}
|
|
316
|
+
}
|
|
317
|
+
}
|
|
318
|
+
catch (error) {
|
|
319
|
+
debugLogger.warn(`SubagentOrchestrator: unable to read auth key file '${expandedKeyfile}': ${error instanceof Error ? error.message : String(error)}`);
|
|
320
|
+
}
|
|
321
|
+
}
|
|
322
|
+
populateCompressionSettings(service, profile) {
|
|
323
|
+
const contextLimit = this.getNumberSetting(profile.ephemeralSettings, [
|
|
324
|
+
'context-limit',
|
|
325
|
+
]);
|
|
326
|
+
if (contextLimit !== undefined) {
|
|
327
|
+
service.set('context-limit', contextLimit);
|
|
328
|
+
}
|
|
329
|
+
const compressionThreshold = this.getNumberSetting(profile.ephemeralSettings, ['compression-threshold']);
|
|
330
|
+
if (compressionThreshold !== undefined) {
|
|
331
|
+
service.set('compression-threshold', compressionThreshold);
|
|
332
|
+
}
|
|
333
|
+
const preserveThreshold = this.getNumberSetting(profile.ephemeralSettings, [
|
|
334
|
+
'compression-preserve-threshold',
|
|
335
|
+
]);
|
|
336
|
+
if (preserveThreshold !== undefined) {
|
|
337
|
+
service.set('compression-preserve-threshold', preserveThreshold);
|
|
338
|
+
}
|
|
339
|
+
}
|
|
340
|
+
populateToolAndMiscSettings(service, profile) {
|
|
341
|
+
const toolFormat = this.getStringSetting(profile.ephemeralSettings, [
|
|
342
|
+
'tool-format',
|
|
343
|
+
]);
|
|
344
|
+
if (toolFormat) {
|
|
345
|
+
service.set('tool-format-override', toolFormat);
|
|
346
|
+
}
|
|
347
|
+
const allowed = this.getStringArraySetting(profile.ephemeralSettings, [
|
|
348
|
+
'tools.allowed',
|
|
349
|
+
'tools_allowed',
|
|
350
|
+
]);
|
|
351
|
+
if (allowed) {
|
|
352
|
+
service.set('tools.allowed', allowed);
|
|
353
|
+
}
|
|
354
|
+
const disabled = this.mergeDefaultDisabledTools(this.getStringArraySetting(profile.ephemeralSettings, [
|
|
355
|
+
'tools.disabled',
|
|
356
|
+
'disabled-tools',
|
|
357
|
+
]), allowed);
|
|
358
|
+
if (disabled) {
|
|
359
|
+
service.set('tools.disabled', disabled);
|
|
360
|
+
}
|
|
361
|
+
const userAgent = this.getStringSetting(profile.ephemeralSettings, [
|
|
362
|
+
'user-agent',
|
|
363
|
+
]);
|
|
364
|
+
if (userAgent) {
|
|
365
|
+
service.set('user-agent', userAgent);
|
|
366
|
+
}
|
|
367
|
+
}
|
|
368
|
+
populateSettingsService(service, profile, profileName) {
|
|
369
|
+
const provider = profile.provider;
|
|
370
|
+
service.setCurrentProfileName(profileName);
|
|
371
|
+
service.set('activeProvider', provider);
|
|
372
|
+
service.set(`providers.${provider}.model`, profile.model);
|
|
373
|
+
this.populateProviderSettings(service, provider, profile);
|
|
374
|
+
this.populateAuthSettings(service, provider, profile);
|
|
375
|
+
this.populateCompressionSettings(service, profile);
|
|
376
|
+
this.populateToolAndMiscSettings(service, profile);
|
|
377
|
+
}
|
|
378
|
+
getNumberSetting(settings, keys) {
|
|
379
|
+
for (const key of keys) {
|
|
380
|
+
const value = this.getSetting(settings, key);
|
|
381
|
+
if (typeof value === 'number' && Number.isFinite(value)) {
|
|
382
|
+
return value;
|
|
383
|
+
}
|
|
384
|
+
if (typeof value === 'string' && value.trim().length > 0) {
|
|
385
|
+
const parsed = Number(value);
|
|
386
|
+
if (Number.isFinite(parsed)) {
|
|
387
|
+
return parsed;
|
|
388
|
+
}
|
|
389
|
+
}
|
|
390
|
+
}
|
|
391
|
+
return undefined;
|
|
392
|
+
}
|
|
393
|
+
getStringSetting(settings, keys) {
|
|
394
|
+
for (const key of keys) {
|
|
395
|
+
const value = this.getSetting(settings, key);
|
|
396
|
+
if (typeof value === 'string' && value.trim().length > 0) {
|
|
397
|
+
return value;
|
|
398
|
+
}
|
|
399
|
+
}
|
|
400
|
+
return undefined;
|
|
401
|
+
}
|
|
402
|
+
getStringArraySetting(settings, keys) {
|
|
403
|
+
for (const key of keys) {
|
|
404
|
+
const value = this.getSetting(settings, key);
|
|
405
|
+
if (Array.isArray(value)) {
|
|
406
|
+
return value.map(String);
|
|
407
|
+
}
|
|
408
|
+
}
|
|
409
|
+
return undefined;
|
|
410
|
+
}
|
|
411
|
+
getSetting(settings, key) {
|
|
412
|
+
return settings[key];
|
|
413
|
+
}
|
|
414
|
+
mergeDefaultDisabledTools(disabled, allowed) {
|
|
415
|
+
const disabledSource = Array.isArray(disabled) ? disabled : [];
|
|
416
|
+
const allowedSet = new Set((allowed ?? [])
|
|
417
|
+
.map((tool) => canonicalizeToolName(tool))
|
|
418
|
+
.filter((tool) => tool.length > 0));
|
|
419
|
+
const merged = [];
|
|
420
|
+
const seen = new Set();
|
|
421
|
+
const addTool = (toolName, respectAllowed) => {
|
|
422
|
+
const canonical = canonicalizeToolName(toolName);
|
|
423
|
+
if (!canonical ||
|
|
424
|
+
seen.has(canonical) ||
|
|
425
|
+
(respectAllowed && allowedSet.has(canonical))) {
|
|
426
|
+
return;
|
|
427
|
+
}
|
|
428
|
+
seen.add(canonical);
|
|
429
|
+
merged.push(canonical);
|
|
430
|
+
};
|
|
431
|
+
for (const tool of disabledSource) {
|
|
432
|
+
addTool(tool, false);
|
|
433
|
+
}
|
|
434
|
+
for (const tool of this.defaultDisabledTools) {
|
|
435
|
+
addTool(tool, true);
|
|
436
|
+
}
|
|
437
|
+
return merged.length > 0 ? merged : undefined;
|
|
438
|
+
}
|
|
439
|
+
createRuntimeState(profile, modelConfig, agentRuntimeId) {
|
|
440
|
+
const sessionId = `${this.baseSessionId()}::${agentRuntimeId}`;
|
|
441
|
+
const baseUrl = this.getStringSetting(profile.ephemeralSettings, [
|
|
442
|
+
'base-url',
|
|
443
|
+
]);
|
|
444
|
+
return createAgentRuntimeState({
|
|
445
|
+
runtimeId: agentRuntimeId,
|
|
446
|
+
provider: profile.provider,
|
|
447
|
+
model: modelConfig.model,
|
|
448
|
+
baseUrl,
|
|
449
|
+
proxyUrl: this.getStringSetting(profile.ephemeralSettings, [
|
|
450
|
+
'proxy',
|
|
451
|
+
'proxy-url',
|
|
452
|
+
]),
|
|
453
|
+
modelParams: {
|
|
454
|
+
temperature: modelConfig.temp,
|
|
455
|
+
topP: modelConfig.top_p,
|
|
456
|
+
maxTokens: profile.modelParams.max_tokens ?? undefined,
|
|
457
|
+
},
|
|
458
|
+
sessionId,
|
|
459
|
+
});
|
|
460
|
+
}
|
|
461
|
+
async createRuntimeBundle(params, signal) {
|
|
462
|
+
const { runtimeProfile, modelConfig, agentRuntimeId, subagent } = params;
|
|
463
|
+
const { effectiveProfile } = runtimeProfile;
|
|
464
|
+
this.throwIfAborted(signal, 'Subagent launch aborted before runtime state.');
|
|
465
|
+
const runtimeState = this.createRuntimeState(effectiveProfile, modelConfig, agentRuntimeId);
|
|
466
|
+
const settingsService = createRuntimeSettingsService();
|
|
467
|
+
this.populateSettingsService(settingsService, effectiveProfile, subagent.profile);
|
|
468
|
+
const providerRuntime = createSettingsProviderRuntimeContext({
|
|
469
|
+
settingsService,
|
|
470
|
+
config: this.options.foregroundConfig,
|
|
471
|
+
runtimeId: agentRuntimeId,
|
|
472
|
+
metadata: {
|
|
473
|
+
source: 'SubagentOrchestrator',
|
|
474
|
+
subagent: subagent.name,
|
|
475
|
+
},
|
|
476
|
+
});
|
|
477
|
+
const settingsSnapshot = this.createSettingsSnapshot(effectiveProfile);
|
|
478
|
+
const contentGeneratorConfig = this.buildContentGeneratorConfig(effectiveProfile, modelConfig);
|
|
479
|
+
const providerManager = typeof this.options.foregroundConfig.getProviderManager === 'function'
|
|
480
|
+
? this.options.foregroundConfig.getProviderManager()
|
|
481
|
+
: undefined;
|
|
482
|
+
if (providerManager) {
|
|
483
|
+
contentGeneratorConfig.providerManager = providerManager;
|
|
484
|
+
}
|
|
485
|
+
const toolRegistry = typeof this.options.foregroundConfig.getToolRegistry === 'function'
|
|
486
|
+
? this.options.foregroundConfig.getToolRegistry()
|
|
487
|
+
: undefined;
|
|
488
|
+
const loaderOptions = {
|
|
489
|
+
profile: {
|
|
490
|
+
config: this.options.foregroundConfig,
|
|
491
|
+
state: runtimeState,
|
|
492
|
+
settings: settingsSnapshot,
|
|
493
|
+
providerRuntime,
|
|
494
|
+
contentGeneratorConfig,
|
|
495
|
+
toolRegistry,
|
|
496
|
+
providerManager,
|
|
497
|
+
},
|
|
498
|
+
signal,
|
|
499
|
+
};
|
|
500
|
+
return this.runtimeLoader(loaderOptions);
|
|
501
|
+
}
|
|
502
|
+
}
|
|
503
|
+
//# sourceMappingURL=subagentOrchestrator.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"subagentOrchestrator.js","sourceRoot":"","sources":["../../../src/core/subagentOrchestrator.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAEH,6IAA6I;AAE7I,OAAO,EAAE,UAAU,EAAE,MAAM,aAAa,CAAC;AAGzC,OAAO,EACL,qBAAqB,GAGtB,MAAM,iCAAiC,CAAC;AAEzC,OAAO,EAAE,aAAa,EAAE,MAAM,eAAe,CAAC;AAQ9C,OAAO,EAAE,MAAM,SAAS,CAAC;AACzB,OAAO,IAAI,MAAM,WAAW,CAAC;AAC7B,OAAO,EAAE,OAAO,EAAE,MAAM,SAAS,CAAC;AAClC,OAAO,EACL,uBAAuB,GAExB,MAAM,0DAA0D,CAAC;AAElE,OAAO,EACL,4BAA4B,EAC5B,oCAAoC,GACrC,MAAM,+DAA+D,CAAC;AACvE,OAAO,EACL,gBAAgB,GAGjB,MAAM,2DAA2D,CAAC;AAKnE,OAAO,EAAE,qBAAqB,EAAE,MAAM,yDAAyD,CAAC;AAChG,OAAO,EAAE,WAAW,EAAE,MAAM,kDAAkD,CAAC;AAC/E,OAAO,EAAE,oBAAoB,EAAE,MAAM,qBAAqB,CAAC;AAY3D,MAAM,gBAAgB,GAAG,CAAC,OAAe,EAAS,EAAE;IAClD,MAAM,KAAK,GAAG,IAAI,KAAK,CAAC,OAAO,CAAC,CAAC;IACjC,KAAK,CAAC,IAAI,GAAG,YAAY,CAAC;IAC1B,OAAO,KAAK,CAAC;AACf,CAAC,CAAC;AAEF,MAAM,sBAAsB,GAAG,CAAC,kBAAkB,CAAU,CAAC;AAE7D,MAAM,uBAAuB,GAAG,CAAC,KAAwB,EAAe,EAAE,CACxE,IAAI,GAAG,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC,IAAI,EAAE,EAAE,CAAC,oBAAoB,CAAC,IAAI,CAAC,CAAC,CAAC,MAAM,CAAC,OAAO,CAAC,CAAC,CAAC;AA6B3E;;;;;;GAMG;AACH,MAAM,OAAO,oBAAoB;IAQF;IAPZ,aAAa,CAAgB;IAC7B,YAAY,CAAe;IAC3B,SAAS,CAAe;IACxB,oBAAoB,GAAG,uBAAuB,CAC7D,sBAAsB,CACvB,CAAC;IAEF,YAA6B,OAAoC;QAApC,YAAO,GAAP,OAAO,CAA6B;QAC/D,IAAI,CAAC,aAAa,GAAG,OAAO,CAAC,aAAa,IAAI,gBAAgB,CAAC;QAC/D,IAAI,CAAC,YAAY;YACf,OAAO,CAAC,YAAY,IAAI,aAAa,CAAC,MAAM,CAAC,IAAI,CAAC,aAAa,CAAC,CAAC;QACnE,IAAI,CAAC,SAAS,GAAG,OAAO,CAAC,SAAS,IAAI,UAAU,CAAC;IACnD,CAAC;IAEO,iBAAiB,CACvB,KAAoB,EACpB,aAAuC;QAEvC,OAAO,KAAK,IAAI,EAAE;YAChB,IAAI,OAAO,KAAK,CAAC,OAAO,KAAK,UAAU,EAAE,CAAC;gBACxC,KAAK,CAAC,OAAO,EAAE,CAAC;YAClB,CAAC;YAED,uJAAuJ;YACvJ,MAAM,OAAO,GAAG,aAAa,CAAC,OAAO,IAAI,KAAK,CAAC,cAAc,CAAC,OAAO,CAAC;YACtE,uJAAuJ;YACvJ,IAAI,OAAO,KAAK,SAAS,EAAE,CAAC;gBAC1B,MAAM,UAAU,GAAI,OAAoC,CAAC,OAAO,CAAC;gBACjE,IAAI,OAAO,UAAU,KAAK,UAAU,EAAE,CAAC;oBACrC,UAAU,CAAC,IAAI,CAAC,OAAO,CAAC,CAAC;gBAC3B,CAAC;qBAAM,IAAI,OAAO,OAAO,CAAC,KAAK,KAAK,UAAU,EAAE,CAAC;oBAC/C,OAAO,CAAC,KAAK,EAAE,CAAC;oBAEd,OACD,CAAC,kBAAkB,EAAE,EAAE,CAAC;gBAC3B,CAAC;YACH,CAAC;QACH,CAAC,CAAC;IACJ,CAAC;IAEO,KAAK,CAAC,0BAA0B,CACtC,QAAwB,EACxB,YAA0B,EAC1B,WAAwB,EACxB,SAAoB,EACpB,OAA8B,EAC9B,aAAuC,EACvC,MAAoB;QAEpB,OAAO,IAAI,CAAC,YAAY,CACtB,QAAQ,CAAC,IAAI,EACb,IAAI,CAAC,OAAO,CAAC,gBAAgB,EAC7B,YAAY,EACZ,WAAW,EACX,SAAS,EACT,OAAO,CAAC,UAAU,EAClB,OAAO,CAAC,YAAY,EACpB;YACE,aAAa,EAAE,aAAa;YAC5B,wBAAwB,EAAE,KAAK,EAAE,QAAQ,EAAE,EAAE,CAC3C,qBAAqB,CAAC,IAAI,CAAC,OAAO,CAAC,gBAAgB,CAAC;SACvD,EACD,MAAM,CACP,CAAC;IACJ,CAAC;IAED;;;OAGG;IACH,KAAK,CAAC,MAAM,CACV,OAA8B,EAC9B,MAAoB;QAEpB,IAAI,CAAC,cAAc,CAAC,MAAM,EAAE,uCAAuC,CAAC,CAAC;QACrE,MAAM,QAAQ,GAAG,MAAM,IAAI,CAAC,kBAAkB,CAAC,OAAO,CAAC,IAAI,CAAC,CAAC;QAC7D,IAAI,CAAC,cAAc,CACjB,MAAM,EACN,+CAA+C,CAChD,CAAC;QACF,MAAM,OAAO,GAAG,MAAM,IAAI,CAAC,OAAO,CAAC,cAAc,CAAC,WAAW,CAC3D,QAAQ,CAAC,OAAO,CACjB,CAAC;QACF,IAAI,CAAC,cAAc,CACjB,MAAM,EACN,gDAAgD,CACjD,CAAC;QACF,MAAM,cAAc,GAAG,MAAM,IAAI,CAAC,qBAAqB,CAAC,OAAO,CAAC,CAAC;QACjE,IAAI,CAAC,cAAc,CACjB,MAAM,EACN,0DAA0D,CAC3D,CAAC;QAEF,MAAM,YAAY,GAAG,IAAI,CAAC,iBAAiB,CACzC,QAAQ,CAAC,YAAY,EACrB,OAAO,CAAC,gBAAgB,CACzB,CAAC;QACF,MAAM,WAAW,GAAG,IAAI,CAAC,gBAAgB,CAAC,cAAc,CAAC,gBAAgB,CAAC,CAAC;QAC3E,MAAM,SAAS,GAAG,IAAI,CAAC,cAAc,CAAC,OAAO,EAAE,OAAO,CAAC,SAAS,CAAC,CAAC;QAClE,IAAI,CAAC,cAAc,CACjB,MAAM,EACN,kDAAkD,CACnD,CAAC;QAEF,MAAM,cAAc,GAAG,IAAI,CAAC,eAAe,CAAC,QAAQ,CAAC,IAAI,CAAC,CAAC;QAC3D,MAAM,aAAa,GAAG,MAAM,IAAI,CAAC,mBAAmB,CAClD,EAAE,QAAQ,EAAE,cAAc,EAAE,WAAW,EAAE,cAAc,EAAE,EACzD,MAAM,CACP,CAAC;QACF,IAAI,CAAC,cAAc,CACjB,MAAM,EACN,2DAA2D,CAC5D,CAAC;QAEF,MAAM,KAAK,GAAG,MAAM,IAAI,CAAC,0BAA0B,CACjD,QAAQ,EACR,YAAY,EACZ,WAAW,EACX,SAAS,EACT,OAAO,EACP,aAAa,EACb,MAAM,CACP,CAAC;QACF,IAAI,CAAC,cAAc,CAAC,MAAM,EAAE,4CAA4C,CAAC,CAAC;QAE1E,MAAM,OAAO,GACX,OAAO,KAAK,CAAC,UAAU,KAAK,UAAU;YACpC,CAAC,CAAC,KAAK,CAAC,UAAU,EAAE;YACpB,CAAC,CAAC,GAAG,QAAQ,CAAC,IAAI,IAAI,cAAc,EAAE,CAAC;QAE3C,OAAO;YACL,OAAO;YACP,KAAK;YACL,MAAM,EAAE,YAAY;YACpB,OAAO;YACP,MAAM,EAAE,QAAQ;YAChB,OAAO,EAAE,aAAa;YACtB,OAAO,EAAE,IAAI,CAAC,iBAAiB,CAAC,KAAK,EAAE,aAAa,CAAC;SACtD,CAAC;IACJ,CAAC;IAEO,cAAc,CAAC,MAA+B,EAAE,OAAe;QACrE,IAAI,MAAM,EAAE,OAAO,KAAK,IAAI,EAAE,CAAC;YAC7B,MAAM,gBAAgB,CAAC,OAAO,CAAC,CAAC;QAClC,CAAC;IACH,CAAC;IAEO,KAAK,CAAC,kBAAkB,CAAC,IAAY;QAC3C,uJAAuJ;QACvJ,IAAI,CAAC,IAAI,EAAE,IAAI,EAAE,EAAE,CAAC;YAClB,MAAM,IAAI,KAAK,CAAC,4BAA4B,CAAC,CAAC;QAChD,CAAC;QACD,IAAI,CAAC;YACH,OAAO,MAAM,IAAI,CAAC,OAAO,CAAC,eAAe,CAAC,YAAY,CAAC,IAAI,CAAC,CAAC;QAC/D,CAAC;QAAC,OAAO,KAAK,EAAE,CAAC;YACf,IAAI,KAAK,YAAY,KAAK,EAAE,CAAC;gBAC3B,gDAAgD;gBAChD,IAAI,KAAK,CAAC,OAAO,CAAC,QAAQ,CAAC,IAAI,IAAI,aAAa,CAAC,EAAE,CAAC;oBAClD,MAAM,IAAI,KAAK,CACb,4BAA4B,IAAI,kHAAkH,CACnJ,CAAC;gBACJ,CAAC;gBACD,MAAM,IAAI,KAAK,CAAC,4BAA4B,IAAI,MAAM,KAAK,CAAC,OAAO,EAAE,CAAC,CAAC;YACzE,CAAC;YACD,MAAM,KAAK,CAAC;QACd,CAAC;IACH,CAAC;IAEO,iBAAiB,CACvB,UAAkB,EAClB,SAAoB;QAEpB,uJAAuJ;QACvJ,MAAM,WAAW,GAAG,UAAU,EAAE,IAAI,EAAE,CAAC;QACvC,MAAM,gBAAgB,GAAG,CAAC,SAAS,IAAI,EAAE,CAAC;YACxC,uJAAuJ;aACtJ,GAAG,CAAC,CAAC,IAAI,EAAE,EAAE,CAAC,IAAI,EAAE,IAAI,EAAE,CAAC;aAC3B,MAAM,CAAC,CAAC,IAAI,EAAkB,EAAE,CAAC,IAAI,CAAC,MAAM,GAAG,CAAC,CAAC,CAAC;QAErD,MAAM,cAAc,GAAa,EAAE,CAAC;QAEpC,IAAI,WAAW,EAAE,CAAC;YAChB,cAAc,CAAC,IAAI,CAAC,WAAW,CAAC,CAAC;QACnC,CAAC;QAED,IAAI,gBAAgB,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;YAChC,MAAM,oBAAoB,GAAG,gBAAgB;iBAC1C,GAAG,CAAC,CAAC,WAAW,EAAE,KAAK,EAAE,EAAE,CAAC,IAAI,KAAK,GAAG,CAAC,KAAK,WAAW,EAAE,CAAC;iBAC5D,IAAI,CAAC,IAAI,CAAC,CAAC;YACd,cAAc,CAAC,IAAI,CACjB;gBACE,iCAAiC;gBACjC,qGAAqG;gBACrG,oBAAoB;aACrB,CAAC,IAAI,CAAC,IAAI,CAAC,CACb,CAAC;QACJ,CAAC;QAED,MAAM,MAAM,GAAG,cAAc,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC;QAE3C,OAAO;YACL,YAAY,EAAE,MAAM;SACrB,CAAC;IACJ,CAAC;IAEO,gBAAgB,CAAC,OAAgB;QACvC,OAAO;YACL,KAAK,EAAE,OAAO,CAAC,KAAK;YACpB,IAAI,EAAE,OAAO,CAAC,WAAW,CAAC,WAAW,IAAI,GAAG;YAC5C,KAAK,EAAE,OAAO,CAAC,WAAW,CAAC,KAAK,IAAI,CAAC;SACtC,CAAC;IACJ,CAAC;IAEO,cAAc,CAAC,OAAgB,EAAE,MAAkB;QACzD,MAAM,cAAc,GAAG,IAAI,CAAC,gBAAgB,CAAC,OAAO,CAAC,iBAAiB,EAAE;YACtE,2BAA2B;YAC3B,kBAAkB;SACnB,CAAC,CAAC;QAEH,MAAM,SAAS,GAAc;YAC3B,gBAAgB,EACd,MAAM,EAAE,gBAAgB,IAAI,cAAc,IAAI,MAAM,CAAC,iBAAiB;SACzE,CAAC;QAEF,MAAM,eAAe,GAAG,IAAI,CAAC,gBAAgB,CAAC,OAAO,CAAC,iBAAiB,EAAE;YACvE,mBAAmB;SACpB,CAAC,CAAC;QAEH,MAAM,QAAQ,GAAG,MAAM,EAAE,SAAS,IAAI,eAAe,IAAI,GAAG,CAAC;QAE7D,uJAAuJ;QACvJ,IAAI,QAAQ,KAAK,SAAS,IAAI,QAAQ,GAAG,CAAC,EAAE,CAAC;YAC3C,SAAS,CAAC,SAAS,GAAG,IAAI,CAAC,KAAK,CAAC,QAAQ,CAAC,CAAC;QAC7C,CAAC;QAED,IAAI,MAAM,EAAE,oBAAoB,KAAK,SAAS,EAAE,CAAC;YAC/C,SAAS,CAAC,oBAAoB,GAAG,MAAM,CAAC,oBAAoB,CAAC;QAC/D,CAAC;QAED,OAAO,SAAS,CAAC;IACnB,CAAC;IAEO,KAAK,CAAC,qBAAqB,CACjC,OAAgB;QAEhB,IAAI,CAAC,qBAAqB,CAAC,OAAO,CAAC,EAAE,CAAC;YACpC,OAAO,EAAE,gBAAgB,EAAE,OAAO,EAAE,CAAC;QACvC,CAAC;QAED,MAAM,gBAAgB,GAAG,OAAO,CAAC,QAAQ,CAAC,CAAC,CAAC,CAAC;QAC7C,IAAI,CAAC,gBAAgB,EAAE,CAAC;YACtB,MAAM,IAAI,KAAK,CACb,0DAA0D,CAC3D,CAAC;QACJ,CAAC;QAED,MAAM,gBAAgB,GACpB,MAAM,IAAI,CAAC,OAAO,CAAC,cAAc,CAAC,WAAW,CAAC,gBAAgB,CAAC,CAAC;QAClE,IAAI,qBAAqB,CAAC,gBAAgB,CAAC,EAAE,CAAC;YAC5C,MAAM,IAAI,KAAK,CACb,2EAA2E,gBAAgB,IAAI,CAChG,CAAC;QACJ,CAAC;QAED,OAAO,EAAE,gBAAgB,EAAE,CAAC;IAC9B,CAAC;IAEO,aAAa;QACnB,MAAM,EAAE,gBAAgB,EAAE,GAAG,IAAI,CAAC,OAAO,CAAC;QAC1C,IAAI,OAAO,gBAAgB,CAAC,YAAY,KAAK,UAAU,EAAE,CAAC;YACxD,MAAM,OAAO,GAAG,gBAAgB,CAAC,YAAY,EAAE,CAAC;YAChD,IAAI,OAAO,EAAE,CAAC;gBACZ,OAAO,MAAM,CAAC,OAAO,CAAC,CAAC;YACzB,CAAC;QACH,CAAC;QACD,OAAO,gBAAgB,CAAC;IAC1B,CAAC;IAEO,eAAe,CAAC,YAAoB;QAC1C,MAAM,MAAM,GAAG,IAAI,CAAC,SAAS,EAAE,CAAC,KAAK,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC;QAC5C,OAAO,GAAG,IAAI,CAAC,aAAa,EAAE,IAAI,YAAY,IAAI,MAAM,EAAE,CAAC;IAC7D,CAAC;IAEO,2BAA2B,CACjC,OAAgB,EAChB,WAAwB;QAExB,MAAM,OAAO,GAAG,IAAI,CAAC,gBAAgB,CAAC,OAAO,CAAC,iBAAiB,EAAE;YAC/D,UAAU;SACX,CAAC,CAAC;QACH,MAAM,KAAK,GAAG,IAAI,CAAC,gBAAgB,CAAC,OAAO,CAAC,iBAAiB,EAAE;YAC7D,OAAO;YACP,WAAW;SACZ,CAAC,CAAC;QAEH,OAAO;YACL,KAAK,EAAE,WAAW,CAAC,KAAK;YACxB,MAAM,EAAE,OAAO;YACf,KAAK;SACN,CAAC;IACJ,CAAC;IAEO,sBAAsB,CAAC,OAAgB;QAC7C,MAAM,OAAO,GAAG,IAAI,CAAC,qBAAqB,CAAC,OAAO,CAAC,iBAAiB,EAAE;YACpE,eAAe;YACf,eAAe;SAChB,CAAC,CAAC;QACH,MAAM,QAAQ,GAAG,IAAI,CAAC,yBAAyB,CAC7C,IAAI,CAAC,qBAAqB,CAAC,OAAO,CAAC,iBAAiB,EAAE;YACpD,gBAAgB;YAChB,gBAAgB;SACjB,CAAC,EACF,OAAO,CACR,CAAC;QAEF,OAAO;YACL,oBAAoB,EAAE,IAAI,CAAC,gBAAgB,CAAC,OAAO,CAAC,iBAAiB,EAAE;gBACrE,uBAAuB;aACxB,CAAC;YACF,YAAY,EAAE,IAAI,CAAC,gBAAgB,CAAC,OAAO,CAAC,iBAAiB,EAAE;gBAC7D,eAAe;aAChB,CAAC;YACF,iBAAiB,EAAE,IAAI,CAAC,gBAAgB,CAAC,OAAO,CAAC,iBAAiB,EAAE;gBAClE,gCAAgC;aACjC,CAAC;YACF,kBAAkB,EAAE,IAAI,CAAC,gBAAgB,CAAC,OAAO,CAAC,iBAAiB,EAAE;gBACnE,aAAa;aACd,CAAC;YACF,KAAK,EAAE;gBACL,OAAO;gBACP,QAAQ;aACT;SACF,CAAC;IACJ,CAAC;IAEO,wBAAwB,CAC9B,OAAwB,EACxB,QAAgB,EAChB,OAAgB;QAEhB,MAAM,WAAW,GAAG,OAAO,CAAC,WAAW,CAAC,WAAW,CAAC;QACpD,IAAI,OAAO,WAAW,KAAK,QAAQ,EAAE,CAAC;YACpC,OAAO,CAAC,GAAG,CAAC,aAAa,QAAQ,cAAc,EAAE,WAAW,CAAC,CAAC;QAChE,CAAC;QAED,MAAM,SAAS,GAAG,OAAO,CAAC,WAAW,CAAC,UAAU,CAAC;QACjD,IAAI,OAAO,SAAS,KAAK,QAAQ,EAAE,CAAC;YAClC,OAAO,CAAC,GAAG,CAAC,aAAa,QAAQ,YAAY,EAAE,SAAS,CAAC,CAAC;QAC5D,CAAC;QAED,MAAM,OAAO,GAAG,IAAI,CAAC,gBAAgB,CAAC,OAAO,CAAC,iBAAiB,EAAE;YAC/D,UAAU;SACX,CAAC,CAAC;QACH,IAAI,OAAO,EAAE,CAAC;YACZ,OAAO,CAAC,GAAG,CAAC,aAAa,QAAQ,WAAW,EAAE,OAAO,CAAC,CAAC;QACzD,CAAC;aAAM,CAAC;YACN,OAAO,CAAC,GAAG,CAAC,aAAa,QAAQ,WAAW,EAAE,SAAS,CAAC,CAAC;QAC3D,CAAC;IACH,CAAC;IAEO,oBAAoB,CAC1B,OAAwB,EACxB,QAAgB,EAChB,OAAgB;QAEhB,MAAM,OAAO,GAAG,IAAI,CAAC,gBAAgB,CAAC,OAAO,CAAC,iBAAiB,EAAE;YAC/D,UAAU;SACX,CAAC,CAAC;QACH,IAAI,OAAO,EAAE,CAAC;YACZ,OAAO,CAAC,GAAG,CAAC,UAAU,EAAE,OAAO,CAAC,CAAC;YACjC,OAAO,CAAC,GAAG,CAAC,aAAa,QAAQ,WAAW,EAAE,OAAO,CAAC,CAAC;QACzD,CAAC;QACD,MAAM,WAAW,GAAG,IAAI,CAAC,gBAAgB,CAAC,OAAO,CAAC,iBAAiB,EAAE;YACnE,eAAe;SAChB,CAAC,CAAC;QACH,IAAI,WAAW,EAAE,CAAC;YAChB,OAAO,CAAC,GAAG,CAAC,eAAe,EAAE,WAAW,CAAC,CAAC;QAC5C,CAAC;QAED,MAAM,WAAW,GAAG,IAAI,CAAC,gBAAgB,CAAC,OAAO,CAAC,iBAAiB,EAAE;YACnE,cAAc;SACf,CAAC,CAAC;QACH,IAAI,WAAW,EAAE,CAAC;YAChB,MAAM,eAAe,GAAG,WAAW,CAAC,OAAO,CAAC,eAAe,EAAE,OAAO,EAAE,CAAC,CAAC;YACxE,OAAO,CAAC,GAAG,CAAC,cAAc,EAAE,eAAe,CAAC,CAAC;YAC7C,OAAO,CAAC,GAAG,CAAC,aAAa,QAAQ,eAAe,EAAE,eAAe,CAAC,CAAC;YACnE,MAAM,OAAO,GAAG,OAAO,CAAC,GAAG,CAAC,aAAa,QAAQ,WAAW,CAAC,CAAC;YAC9D,MAAM,oBAAoB;YACxB,gKAAgK;YAChK,OAAO,KAAK,SAAS;gBACrB,OAAO,KAAK,IAAI;gBAChB,OAAO,KAAK,EAAE;gBACd,OAAO,KAAK,KAAK;gBACjB,OAAO,KAAK,CAAC;gBACb,CAAC,OAAO,OAAO,KAAK,QAAQ,IAAI,MAAM,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC,CAAC;YACzD,IAAI,oBAAoB,EAAE,CAAC;gBACzB,IAAI,CAAC,wBAAwB,CAAC,QAAQ,EAAE,eAAe,EAAE,OAAO,CAAC,CAAC;YACpE,CAAC;QACH,CAAC;IACH,CAAC;IAEO,wBAAwB,CAC9B,QAAgB,EAChB,eAAuB,EACvB,OAAwB;QAExB,IAAI,CAAC;YACH,MAAM,YAAY,GAAG,IAAI,CAAC,OAAO,CAAC,eAAe,CAAC,CAAC;YACnD,IAAI,EAAE,CAAC,UAAU,CAAC,YAAY,CAAC,EAAE,CAAC;gBAChC,MAAM,OAAO,GAAG,EAAE,CAAC,YAAY,CAAC,YAAY,EAAE,MAAM,CAAC,CAAC,IAAI,EAAE,CAAC;gBAC7D,IAAI,OAAO,KAAK,EAAE,EAAE,CAAC;oBACnB,OAAO,CAAC,GAAG,CAAC,aAAa,QAAQ,WAAW,EAAE,OAAO,CAAC,CAAC;gBACzD,CAAC;YACH,CAAC;QACH,CAAC;QAAC,OAAO,KAAK,EAAE,CAAC;YACf,WAAW,CAAC,IAAI,CACd,uDAAuD,eAAe,MACpE,KAAK,YAAY,KAAK,CAAC,CAAC,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC,CAAC,MAAM,CAAC,KAAK,CACvD,EAAE,CACH,CAAC;QACJ,CAAC;IACH,CAAC;IAEO,2BAA2B,CACjC,OAAwB,EACxB,OAAgB;QAEhB,MAAM,YAAY,GAAG,IAAI,CAAC,gBAAgB,CAAC,OAAO,CAAC,iBAAiB,EAAE;YACpE,eAAe;SAChB,CAAC,CAAC;QACH,IAAI,YAAY,KAAK,SAAS,EAAE,CAAC;YAC/B,OAAO,CAAC,GAAG,CAAC,eAAe,EAAE,YAAY,CAAC,CAAC;QAC7C,CAAC;QAED,MAAM,oBAAoB,GAAG,IAAI,CAAC,gBAAgB,CAChD,OAAO,CAAC,iBAAiB,EACzB,CAAC,uBAAuB,CAAC,CAC1B,CAAC;QACF,IAAI,oBAAoB,KAAK,SAAS,EAAE,CAAC;YACvC,OAAO,CAAC,GAAG,CAAC,uBAAuB,EAAE,oBAAoB,CAAC,CAAC;QAC7D,CAAC;QAED,MAAM,iBAAiB,GAAG,IAAI,CAAC,gBAAgB,CAAC,OAAO,CAAC,iBAAiB,EAAE;YACzE,gCAAgC;SACjC,CAAC,CAAC;QACH,IAAI,iBAAiB,KAAK,SAAS,EAAE,CAAC;YACpC,OAAO,CAAC,GAAG,CAAC,gCAAgC,EAAE,iBAAiB,CAAC,CAAC;QACnE,CAAC;IACH,CAAC;IAEO,2BAA2B,CACjC,OAAwB,EACxB,OAAgB;QAEhB,MAAM,UAAU,GAAG,IAAI,CAAC,gBAAgB,CAAC,OAAO,CAAC,iBAAiB,EAAE;YAClE,aAAa;SACd,CAAC,CAAC;QACH,IAAI,UAAU,EAAE,CAAC;YACf,OAAO,CAAC,GAAG,CAAC,sBAAsB,EAAE,UAAU,CAAC,CAAC;QAClD,CAAC;QAED,MAAM,OAAO,GAAG,IAAI,CAAC,qBAAqB,CAAC,OAAO,CAAC,iBAAiB,EAAE;YACpE,eAAe;YACf,eAAe;SAChB,CAAC,CAAC;QACH,IAAI,OAAO,EAAE,CAAC;YACZ,OAAO,CAAC,GAAG,CAAC,eAAe,EAAE,OAAO,CAAC,CAAC;QACxC,CAAC;QAED,MAAM,QAAQ,GAAG,IAAI,CAAC,yBAAyB,CAC7C,IAAI,CAAC,qBAAqB,CAAC,OAAO,CAAC,iBAAiB,EAAE;YACpD,gBAAgB;YAChB,gBAAgB;SACjB,CAAC,EACF,OAAO,CACR,CAAC;QACF,IAAI,QAAQ,EAAE,CAAC;YACb,OAAO,CAAC,GAAG,CAAC,gBAAgB,EAAE,QAAQ,CAAC,CAAC;QAC1C,CAAC;QAED,MAAM,SAAS,GAAG,IAAI,CAAC,gBAAgB,CAAC,OAAO,CAAC,iBAAiB,EAAE;YACjE,YAAY;SACb,CAAC,CAAC;QACH,IAAI,SAAS,EAAE,CAAC;YACd,OAAO,CAAC,GAAG,CAAC,YAAY,EAAE,SAAS,CAAC,CAAC;QACvC,CAAC;IACH,CAAC;IAEO,uBAAuB,CAC7B,OAAwB,EACxB,OAAgB,EAChB,WAAmB;QAEnB,MAAM,QAAQ,GAAG,OAAO,CAAC,QAAQ,CAAC;QAClC,OAAO,CAAC,qBAAqB,CAAC,WAAW,CAAC,CAAC;QAC3C,OAAO,CAAC,GAAG,CAAC,gBAAgB,EAAE,QAAQ,CAAC,CAAC;QACxC,OAAO,CAAC,GAAG,CAAC,aAAa,QAAQ,QAAQ,EAAE,OAAO,CAAC,KAAK,CAAC,CAAC;QAC1D,IAAI,CAAC,wBAAwB,CAAC,OAAO,EAAE,QAAQ,EAAE,OAAO,CAAC,CAAC;QAC1D,IAAI,CAAC,oBAAoB,CAAC,OAAO,EAAE,QAAQ,EAAE,OAAO,CAAC,CAAC;QACtD,IAAI,CAAC,2BAA2B,CAAC,OAAO,EAAE,OAAO,CAAC,CAAC;QACnD,IAAI,CAAC,2BAA2B,CAAC,OAAO,EAAE,OAAO,CAAC,CAAC;IACrD,CAAC;IAEO,gBAAgB,CACtB,QAAsC,EACtC,IAAc;QAEd,KAAK,MAAM,GAAG,IAAI,IAAI,EAAE,CAAC;YACvB,MAAM,KAAK,GAAG,IAAI,CAAC,UAAU,CAAC,QAAQ,EAAE,GAAG,CAAC,CAAC;YAC7C,IAAI,OAAO,KAAK,KAAK,QAAQ,IAAI,MAAM,CAAC,QAAQ,CAAC,KAAK,CAAC,EAAE,CAAC;gBACxD,OAAO,KAAK,CAAC;YACf,CAAC;YACD,IAAI,OAAO,KAAK,KAAK,QAAQ,IAAI,KAAK,CAAC,IAAI,EAAE,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;gBACzD,MAAM,MAAM,GAAG,MAAM,CAAC,KAAK,CAAC,CAAC;gBAC7B,IAAI,MAAM,CAAC,QAAQ,CAAC,MAAM,CAAC,EAAE,CAAC;oBAC5B,OAAO,MAAM,CAAC;gBAChB,CAAC;YACH,CAAC;QACH,CAAC;QACD,OAAO,SAAS,CAAC;IACnB,CAAC;IAEO,gBAAgB,CACtB,QAAsC,EACtC,IAAc;QAEd,KAAK,MAAM,GAAG,IAAI,IAAI,EAAE,CAAC;YACvB,MAAM,KAAK,GAAG,IAAI,CAAC,UAAU,CAAC,QAAQ,EAAE,GAAG,CAAC,CAAC;YAC7C,IAAI,OAAO,KAAK,KAAK,QAAQ,IAAI,KAAK,CAAC,IAAI,EAAE,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;gBACzD,OAAO,KAAK,CAAC;YACf,CAAC;QACH,CAAC;QACD,OAAO,SAAS,CAAC;IACnB,CAAC;IAEO,qBAAqB,CAC3B,QAAsC,EACtC,IAAc;QAEd,KAAK,MAAM,GAAG,IAAI,IAAI,EAAE,CAAC;YACvB,MAAM,KAAK,GAAG,IAAI,CAAC,UAAU,CAAC,QAAQ,EAAE,GAAG,CAAC,CAAC;YAC7C,IAAI,KAAK,CAAC,OAAO,CAAC,KAAK,CAAC,EAAE,CAAC;gBACzB,OAAO,KAAK,CAAC,GAAG,CAAC,MAAM,CAAC,CAAC;YAC3B,CAAC;QACH,CAAC;QACD,OAAO,SAAS,CAAC;IACnB,CAAC;IAEO,UAAU,CAChB,QAAsC,EACtC,GAAW;QAEX,OAAQ,QAAoC,CAAC,GAAG,CAAC,CAAC;IACpD,CAAC;IAEO,yBAAyB,CAC/B,QAA8B,EAC9B,OAA6B;QAE7B,MAAM,cAAc,GAAG,KAAK,CAAC,OAAO,CAAC,QAAQ,CAAC,CAAC,CAAC,CAAC,QAAQ,CAAC,CAAC,CAAC,EAAE,CAAC;QAC/D,MAAM,UAAU,GAAG,IAAI,GAAG,CACxB,CAAC,OAAO,IAAI,EAAE,CAAC;aACZ,GAAG,CAAC,CAAC,IAAI,EAAE,EAAE,CAAC,oBAAoB,CAAC,IAAI,CAAC,CAAC;aACzC,MAAM,CAAC,CAAC,IAAI,EAAE,EAAE,CAAC,IAAI,CAAC,MAAM,GAAG,CAAC,CAAC,CACrC,CAAC;QAEF,MAAM,MAAM,GAAa,EAAE,CAAC;QAC5B,MAAM,IAAI,GAAG,IAAI,GAAG,EAAU,CAAC;QAC/B,MAAM,OAAO,GAAG,CAAC,QAAgB,EAAE,cAAuB,EAAE,EAAE;YAC5D,MAAM,SAAS,GAAG,oBAAoB,CAAC,QAAQ,CAAC,CAAC;YACjD,IACE,CAAC,SAAS;gBACV,IAAI,CAAC,GAAG,CAAC,SAAS,CAAC;gBACnB,CAAC,cAAc,IAAI,UAAU,CAAC,GAAG,CAAC,SAAS,CAAC,CAAC,EAC7C,CAAC;gBACD,OAAO;YACT,CAAC;YACD,IAAI,CAAC,GAAG,CAAC,SAAS,CAAC,CAAC;YACpB,MAAM,CAAC,IAAI,CAAC,SAAS,CAAC,CAAC;QACzB,CAAC,CAAC;QAEF,KAAK,MAAM,IAAI,IAAI,cAAc,EAAE,CAAC;YAClC,OAAO,CAAC,IAAI,EAAE,KAAK,CAAC,CAAC;QACvB,CAAC;QAED,KAAK,MAAM,IAAI,IAAI,IAAI,CAAC,oBAAoB,EAAE,CAAC;YAC7C,OAAO,CAAC,IAAI,EAAE,IAAI,CAAC,CAAC;QACtB,CAAC;QAED,OAAO,MAAM,CAAC,MAAM,GAAG,CAAC,CAAC,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,SAAS,CAAC;IAChD,CAAC;IAEO,kBAAkB,CACxB,OAAgB,EAChB,WAAwB,EACxB,cAAsB;QAEtB,MAAM,SAAS,GAAG,GAAG,IAAI,CAAC,aAAa,EAAE,KAAK,cAAc,EAAE,CAAC;QAC/D,MAAM,OAAO,GAAG,IAAI,CAAC,gBAAgB,CAAC,OAAO,CAAC,iBAAiB,EAAE;YAC/D,UAAU;SACX,CAAC,CAAC;QAEH,OAAO,uBAAuB,CAAC;YAC7B,SAAS,EAAE,cAAc;YACzB,QAAQ,EAAE,OAAO,CAAC,QAAQ;YAC1B,KAAK,EAAE,WAAW,CAAC,KAAK;YACxB,OAAO;YACP,QAAQ,EAAE,IAAI,CAAC,gBAAgB,CAAC,OAAO,CAAC,iBAAiB,EAAE;gBACzD,OAAO;gBACP,WAAW;aACZ,CAAC;YACF,WAAW,EAAE;gBACX,WAAW,EAAE,WAAW,CAAC,IAAI;gBAC7B,IAAI,EAAE,WAAW,CAAC,KAAK;gBACvB,SAAS,EAAE,OAAO,CAAC,WAAW,CAAC,UAAU,IAAI,SAAS;aACvD;YACD,SAAS;SACV,CAAC,CAAC;IACL,CAAC;IAEO,KAAK,CAAC,mBAAmB,CAC/B,MAKC,EACD,MAAoB;QAEpB,MAAM,EAAE,cAAc,EAAE,WAAW,EAAE,cAAc,EAAE,QAAQ,EAAE,GAAG,MAAM,CAAC;QACzE,MAAM,EAAE,gBAAgB,EAAE,GAAG,cAAc,CAAC;QAE5C,IAAI,CAAC,cAAc,CACjB,MAAM,EACN,+CAA+C,CAChD,CAAC;QACF,MAAM,YAAY,GAAG,IAAI,CAAC,kBAAkB,CAC1C,gBAAgB,EAChB,WAAW,EACX,cAAc,CACf,CAAC;QACF,MAAM,eAAe,GAAG,4BAA4B,EAAE,CAAC;QACvD,IAAI,CAAC,uBAAuB,CAC1B,eAAe,EACf,gBAAgB,EAChB,QAAQ,CAAC,OAAO,CACjB,CAAC;QAEF,MAAM,eAAe,GACnB,oCAAoC,CAAC;YACnC,eAAe;YACf,MAAM,EAAE,IAAI,CAAC,OAAO,CAAC,gBAAgB;YACrC,SAAS,EAAE,cAAc;YACzB,QAAQ,EAAE;gBACR,MAAM,EAAE,sBAAsB;gBAC9B,QAAQ,EAAE,QAAQ,CAAC,IAAI;aACxB;SACF,CAAC,CAAC;QAEL,MAAM,gBAAgB,GAAG,IAAI,CAAC,sBAAsB,CAAC,gBAAgB,CAAC,CAAC;QACvE,MAAM,sBAAsB,GAAG,IAAI,CAAC,2BAA2B,CAC7D,gBAAgB,EAChB,WAAW,CACZ,CAAC;QACF,MAAM,eAAe,GACnB,OAAO,IAAI,CAAC,OAAO,CAAC,gBAAgB,CAAC,kBAAkB,KAAK,UAAU;YACpE,CAAC,CAAC,IAAI,CAAC,OAAO,CAAC,gBAAgB,CAAC,kBAAkB,EAAE;YACpD,CAAC,CAAC,SAAS,CAAC;QAChB,IAAI,eAAe,EAAE,CAAC;YACpB,sBAAsB,CAAC,eAAe,GAAG,eAAe,CAAC;QAC3D,CAAC;QAED,MAAM,YAAY,GAChB,OAAO,IAAI,CAAC,OAAO,CAAC,gBAAgB,CAAC,eAAe,KAAK,UAAU;YACjE,CAAC,CAAC,IAAI,CAAC,OAAO,CAAC,gBAAgB,CAAC,eAAe,EAAE;YACjD,CAAC,CAAC,SAAS,CAAC;QAEhB,MAAM,aAAa,GAA8B;YAC/C,OAAO,EAAE;gBACP,MAAM,EAAE,IAAI,CAAC,OAAO,CAAC,gBAAgB;gBACrC,KAAK,EAAE,YAAY;gBACnB,QAAQ,EAAE,gBAAgB;gBAC1B,eAAe;gBACf,sBAAsB;gBACtB,YAAY;gBACZ,eAAe;aAChB;YACD,MAAM;SACP,CAAC;QAEF,OAAO,IAAI,CAAC,aAAa,CAAC,aAAa,CAAC,CAAC;IAC3C,CAAC;CACF"}
|
|
@@ -0,0 +1,75 @@
|
|
|
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 ToolExecutionConfig } from './nonInteractiveToolExecutor.js';
|
|
8
|
+
import { type FunctionDeclaration } from '@google/genai';
|
|
9
|
+
import { ChatSession } from './chatSession.js';
|
|
10
|
+
import type { AgentRuntimeContext, ReadonlySettingsSnapshot, ToolRegistryView, ToolMetadata } from '@vybestack/llxprt-code-core/runtime/AgentRuntimeContext.js';
|
|
11
|
+
import type { AgentRuntimeLoaderResult } from '@vybestack/llxprt-code-core/runtime/AgentRuntimeLoader.js';
|
|
12
|
+
import type { ToolRegistry } from '@vybestack/llxprt-code-tools';
|
|
13
|
+
import type { ContentGenerator } from '@vybestack/llxprt-code-core/core/contentGenerator.js';
|
|
14
|
+
import type { MessageBus } from '@vybestack/llxprt-code-core/confirmation-bus/message-bus.js';
|
|
15
|
+
import { EmojiFilter } from '@vybestack/llxprt-code-core/filters/EmojiFilter.js';
|
|
16
|
+
import type { ContextState } from '@vybestack/llxprt-code-core/core/subagentTypes.js';
|
|
17
|
+
import { type ToolConfig, type OutputConfig, type ModelConfig, type PromptConfig, type EnvironmentContextLoader } from '@vybestack/llxprt-code-core/core/subagentTypes.js';
|
|
18
|
+
/** Canonicalizes a tool name for whitelist matching (trim + lowercase). */
|
|
19
|
+
export declare const canonicalizeToolName: (name: string) => string;
|
|
20
|
+
/**
|
|
21
|
+
* Converts a ToolMetadata object into a FunctionDeclaration for the Gemini API.
|
|
22
|
+
*/
|
|
23
|
+
export declare function convertMetadataToFunctionDeclaration(fallbackName: string, metadata: ToolMetadata): FunctionDeclaration;
|
|
24
|
+
/**
|
|
25
|
+
* Filters the tools in toolConfig against the allowed set from the runtime view.
|
|
26
|
+
* Returns a new ToolConfig with only the tools that are permitted.
|
|
27
|
+
* Tools not in the allowed set are logged as warnings and removed.
|
|
28
|
+
*
|
|
29
|
+
* @param params - Object containing toolConfig and toolsView
|
|
30
|
+
* @returns A Promise that resolves to a filtered ToolConfig
|
|
31
|
+
*/
|
|
32
|
+
export declare function filterToolsAgainstRuntime(params: {
|
|
33
|
+
toolConfig: ToolConfig;
|
|
34
|
+
toolsView: ToolRegistryView;
|
|
35
|
+
}): Promise<ToolConfig>;
|
|
36
|
+
export declare function buildEphemeralSettings(snapshot?: ReadonlySettingsSnapshot): Record<string, unknown>;
|
|
37
|
+
/**
|
|
38
|
+
* Creates the bottom-layer tool execution configuration for subagents.
|
|
39
|
+
*
|
|
40
|
+
* This is the single source of truth for tool-related configuration in the
|
|
41
|
+
* subagent, including scheduler creation. It interfaces directly with
|
|
42
|
+
* `foregroundConfig` and is responsible for injecting default dependencies
|
|
43
|
+
* (`messageBus` and `toolRegistry`) that callers may not provide.
|
|
44
|
+
*
|
|
45
|
+
* Delegation chain: createSchedulerConfig → toolExecutorContext → foregroundConfig
|
|
46
|
+
*/
|
|
47
|
+
export declare function createToolExecutionConfig(runtimeBundle: AgentRuntimeLoaderResult, toolRegistry: ToolRegistry, foregroundConfig: Config, messageBus?: MessageBus, settingsSnapshot?: ReadonlySettingsSnapshot, toolConfig?: ToolConfig): ToolExecutionConfig;
|
|
48
|
+
export declare function createEmojiFilter(settingsSnapshot?: ReadonlySettingsSnapshot): EmojiFilter | undefined;
|
|
49
|
+
export declare function buildRuntimeFunctionDeclarations(toolsView: ToolRegistryView, toolConfig: ToolConfig | undefined): FunctionDeclaration[];
|
|
50
|
+
export declare function getScopeLocalFuncDefs(outputConfig?: OutputConfig): FunctionDeclaration[];
|
|
51
|
+
export declare function buildChatSystemPrompt(promptConfig: PromptConfig, outputConfig: OutputConfig | undefined, context: ContextState): string;
|
|
52
|
+
/**
|
|
53
|
+
* Creates a higher-level Config facade for the CoreToolScheduler.
|
|
54
|
+
*
|
|
55
|
+
* This facade delegates scheduler operations (`getOrCreateScheduler`,
|
|
56
|
+
* `disposeScheduler`) through `toolExecutorContext` rather than bypassing
|
|
57
|
+
* it. The only policy this layer adds is the `interactiveMode` flag.
|
|
58
|
+
*
|
|
59
|
+
* Delegation chain: createSchedulerConfig → toolExecutorContext → foregroundConfig
|
|
60
|
+
*/
|
|
61
|
+
export declare function createSchedulerConfig(toolExecutorContext: ToolExecutionConfig, foregroundConfig: Config, options?: {
|
|
62
|
+
interactive?: boolean;
|
|
63
|
+
}): Config;
|
|
64
|
+
export interface CreateChatObjectParams {
|
|
65
|
+
promptConfig: PromptConfig;
|
|
66
|
+
modelConfig: ModelConfig;
|
|
67
|
+
outputConfig?: OutputConfig;
|
|
68
|
+
toolConfig?: ToolConfig;
|
|
69
|
+
runtimeContext: AgentRuntimeContext;
|
|
70
|
+
contentGenerator: ContentGenerator;
|
|
71
|
+
environmentContextLoader: EnvironmentContextLoader;
|
|
72
|
+
foregroundConfig: Config;
|
|
73
|
+
context: ContextState;
|
|
74
|
+
}
|
|
75
|
+
export declare function createChatObject(params: CreateChatObjectParams): Promise<ChatSession | null>;
|