@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,187 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* @license
|
|
3
|
+
* Copyright 2025 Vybestack LLC
|
|
4
|
+
* SPDX-License-Identifier: Apache-2.0
|
|
5
|
+
*/
|
|
6
|
+
import { getFunctionCallsFromParts } from '@vybestack/llxprt-code-core/utils/generateContentResponseUtilities.js';
|
|
7
|
+
import { canonicalizeToolName } from './toolGovernance.js';
|
|
8
|
+
const responseRestrictions = new WeakMap();
|
|
9
|
+
const responseFilteredRestrictedCalls = new WeakMap();
|
|
10
|
+
const functionCallRestrictions = new WeakMap();
|
|
11
|
+
const responseRestrictionsSymbol = Symbol('hookRestrictedAllowedTools');
|
|
12
|
+
const responseFilteredRestrictedCallsSymbol = Symbol('hookRestrictedFilteredCalls');
|
|
13
|
+
const functionCallRestrictionsSymbol = Symbol('hookRestrictedAllowedTools');
|
|
14
|
+
function setResponseRestrictionMetadata(response, allowedTools) {
|
|
15
|
+
responseRestrictions.set(response, [...allowedTools]);
|
|
16
|
+
Object.defineProperty(response, responseRestrictionsSymbol, {
|
|
17
|
+
configurable: true,
|
|
18
|
+
enumerable: false,
|
|
19
|
+
value: [...allowedTools],
|
|
20
|
+
});
|
|
21
|
+
}
|
|
22
|
+
function setResponseFilteredMetadata(response) {
|
|
23
|
+
responseFilteredRestrictedCalls.set(response, true);
|
|
24
|
+
Object.defineProperty(response, responseFilteredRestrictedCallsSymbol, {
|
|
25
|
+
configurable: true,
|
|
26
|
+
enumerable: false,
|
|
27
|
+
value: true,
|
|
28
|
+
});
|
|
29
|
+
}
|
|
30
|
+
function stringifyFunctionCallArgs(args) {
|
|
31
|
+
try {
|
|
32
|
+
// JSON.stringify can return undefined at runtime (e.g. for functions or
|
|
33
|
+
// symbols) even though its type signature says string, so guard the result.
|
|
34
|
+
const serialized = JSON.stringify(args === undefined ? {} : args);
|
|
35
|
+
return serialized ?? '{}';
|
|
36
|
+
}
|
|
37
|
+
catch {
|
|
38
|
+
return String(args);
|
|
39
|
+
}
|
|
40
|
+
}
|
|
41
|
+
function functionCallKey(call) {
|
|
42
|
+
if (typeof call.id === 'string' && call.id.trim() !== '') {
|
|
43
|
+
return `id:${call.id}`;
|
|
44
|
+
}
|
|
45
|
+
const name = typeof call.name === 'string' ? call.name : '';
|
|
46
|
+
return `name:${canonicalizeToolName(name)}:args:${stringifyFunctionCallArgs(call.args)}`;
|
|
47
|
+
}
|
|
48
|
+
export function mergeHookRestrictedFunctionCalls(primaryCalls, secondaryCalls) {
|
|
49
|
+
const seen = new Set(primaryCalls.map(functionCallKey));
|
|
50
|
+
const merged = [...primaryCalls];
|
|
51
|
+
for (const call of secondaryCalls) {
|
|
52
|
+
const key = functionCallKey(call);
|
|
53
|
+
if (!seen.has(key)) {
|
|
54
|
+
seen.add(key);
|
|
55
|
+
merged.push(call);
|
|
56
|
+
}
|
|
57
|
+
}
|
|
58
|
+
return merged;
|
|
59
|
+
}
|
|
60
|
+
export function attachHookRestrictedAllowedTools(response, allowedTools) {
|
|
61
|
+
if (allowedTools === undefined) {
|
|
62
|
+
return response;
|
|
63
|
+
}
|
|
64
|
+
const restrictedResponse = Object.assign(Object.create(Object.getPrototypeOf(response)), response);
|
|
65
|
+
restrictedResponse.candidates = response.candidates?.map((candidate) => ({
|
|
66
|
+
...candidate,
|
|
67
|
+
content: candidate.content === undefined
|
|
68
|
+
? undefined
|
|
69
|
+
: {
|
|
70
|
+
...candidate.content,
|
|
71
|
+
parts: candidate.content.parts === undefined
|
|
72
|
+
? undefined
|
|
73
|
+
: filterResponseCandidateParts(restrictedResponse, candidate.content.parts, allowedTools),
|
|
74
|
+
},
|
|
75
|
+
}));
|
|
76
|
+
restrictedResponse.automaticFunctionCallingHistory =
|
|
77
|
+
response.automaticFunctionCallingHistory === undefined
|
|
78
|
+
? undefined
|
|
79
|
+
: filterHookRestrictedContents(response.automaticFunctionCallingHistory, allowedTools).filter((content) => (content.parts?.length ?? 0) > 0);
|
|
80
|
+
const originalTopLevelCalls = response.functionCalls ?? [];
|
|
81
|
+
const filteredTopLevelCalls = filterHookRestrictedFunctionCalls(originalTopLevelCalls, allowedTools);
|
|
82
|
+
if (filteredTopLevelCalls.length < originalTopLevelCalls.length) {
|
|
83
|
+
setResponseFilteredMetadata(restrictedResponse);
|
|
84
|
+
}
|
|
85
|
+
setResponseRestrictionMetadata(restrictedResponse, allowedTools);
|
|
86
|
+
Object.defineProperty(restrictedResponse, 'functionCalls', {
|
|
87
|
+
configurable: true,
|
|
88
|
+
enumerable: true,
|
|
89
|
+
get() {
|
|
90
|
+
return filteredTopLevelCalls.length > 0
|
|
91
|
+
? filteredTopLevelCalls
|
|
92
|
+
: undefined;
|
|
93
|
+
},
|
|
94
|
+
});
|
|
95
|
+
return restrictedResponse;
|
|
96
|
+
}
|
|
97
|
+
export function hasFilteredHookRestrictedToolCalls(response) {
|
|
98
|
+
return (responseFilteredRestrictedCalls.get(response) === true ||
|
|
99
|
+
response[responseFilteredRestrictedCallsSymbol] === true);
|
|
100
|
+
}
|
|
101
|
+
function filterResponseCandidateParts(response, parts, allowedTools) {
|
|
102
|
+
const originalCalls = getFunctionCallsFromParts(parts) ?? [];
|
|
103
|
+
const filteredParts = filterHookRestrictedParts(parts, allowedTools);
|
|
104
|
+
const filteredCalls = getFunctionCallsFromParts(filteredParts) ?? [];
|
|
105
|
+
if (filteredCalls.length < originalCalls.length ||
|
|
106
|
+
filteredParts.length < parts.length) {
|
|
107
|
+
setResponseFilteredMetadata(response);
|
|
108
|
+
}
|
|
109
|
+
return filteredParts;
|
|
110
|
+
}
|
|
111
|
+
export function filterHookRestrictedContent(content, allowedTools) {
|
|
112
|
+
const parts = content.parts ?? [];
|
|
113
|
+
return {
|
|
114
|
+
...content,
|
|
115
|
+
parts: filterHookRestrictedParts(parts, allowedTools),
|
|
116
|
+
};
|
|
117
|
+
}
|
|
118
|
+
export function filterHookRestrictedContents(contents, allowedTools) {
|
|
119
|
+
if (allowedTools === undefined) {
|
|
120
|
+
return [...contents];
|
|
121
|
+
}
|
|
122
|
+
return contents.map((content) => filterHookRestrictedContent(content, allowedTools));
|
|
123
|
+
}
|
|
124
|
+
export function getHookRestrictedAllowedTools(response) {
|
|
125
|
+
const allowedTools = responseRestrictions.get(response) ??
|
|
126
|
+
response[responseRestrictionsSymbol];
|
|
127
|
+
return allowedTools === undefined ? undefined : [...allowedTools];
|
|
128
|
+
}
|
|
129
|
+
export function setHookRestrictedAllowedToolsOnFunctionCall(functionCall, allowedTools) {
|
|
130
|
+
if (allowedTools !== undefined) {
|
|
131
|
+
functionCallRestrictions.set(functionCall, [...allowedTools]);
|
|
132
|
+
Object.defineProperty(functionCall, functionCallRestrictionsSymbol, {
|
|
133
|
+
configurable: true,
|
|
134
|
+
enumerable: false,
|
|
135
|
+
value: [...allowedTools],
|
|
136
|
+
});
|
|
137
|
+
}
|
|
138
|
+
}
|
|
139
|
+
export function getHookRestrictedAllowedToolsForFunctionCall(functionCall) {
|
|
140
|
+
const allowedTools = functionCallRestrictions.get(functionCall) ??
|
|
141
|
+
functionCall[functionCallRestrictionsSymbol];
|
|
142
|
+
return allowedTools === undefined ? undefined : [...allowedTools];
|
|
143
|
+
}
|
|
144
|
+
export function isHookRestrictedToolCall(fnCall, allowedTools) {
|
|
145
|
+
if (allowedTools === undefined) {
|
|
146
|
+
return false;
|
|
147
|
+
}
|
|
148
|
+
if (typeof fnCall.name !== 'string' || fnCall.name.trim() === '') {
|
|
149
|
+
return true;
|
|
150
|
+
}
|
|
151
|
+
const allowed = new Set(allowedTools.map(canonicalizeToolName));
|
|
152
|
+
return !allowed.has(canonicalizeToolName(fnCall.name));
|
|
153
|
+
}
|
|
154
|
+
export function filterHookRestrictedParts(parts, allowedTools) {
|
|
155
|
+
if (allowedTools === undefined) {
|
|
156
|
+
return [...parts];
|
|
157
|
+
}
|
|
158
|
+
return parts.filter((part) => {
|
|
159
|
+
if (part.functionCall !== undefined) {
|
|
160
|
+
setHookRestrictedAllowedToolsOnFunctionCall(part.functionCall, allowedTools);
|
|
161
|
+
return !isHookRestrictedToolCall(part.functionCall, allowedTools);
|
|
162
|
+
}
|
|
163
|
+
if (part.functionResponse !== undefined) {
|
|
164
|
+
const responseAsCall = {
|
|
165
|
+
id: part.functionResponse.id,
|
|
166
|
+
name: part.functionResponse.name ?? '',
|
|
167
|
+
args: {},
|
|
168
|
+
};
|
|
169
|
+
return !isHookRestrictedToolCall(responseAsCall, allowedTools);
|
|
170
|
+
}
|
|
171
|
+
return true;
|
|
172
|
+
});
|
|
173
|
+
}
|
|
174
|
+
export function getHookRestrictedFunctionCallsFromParts(parts, allowedTools) {
|
|
175
|
+
return (getFunctionCallsFromParts(filterHookRestrictedParts(parts, allowedTools)) ??
|
|
176
|
+
[]);
|
|
177
|
+
}
|
|
178
|
+
export function filterHookRestrictedFunctionCalls(calls, allowedTools) {
|
|
179
|
+
if (allowedTools === undefined) {
|
|
180
|
+
return [...calls];
|
|
181
|
+
}
|
|
182
|
+
return calls.filter((call) => {
|
|
183
|
+
setHookRestrictedAllowedToolsOnFunctionCall(call, allowedTools);
|
|
184
|
+
return !isHookRestrictedToolCall(call, allowedTools);
|
|
185
|
+
});
|
|
186
|
+
}
|
|
187
|
+
//# sourceMappingURL=hookToolRestrictions.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"hookToolRestrictions.js","sourceRoot":"","sources":["../../../src/core/hookToolRestrictions.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 ToolCallRequestInfo } from '@vybestack/llxprt-code-core/core/turn.js';
|
|
7
|
+
import type { MessageBus } from '@vybestack/llxprt-code-core/confirmation-bus/message-bus.js';
|
|
8
|
+
import { type Config } from '@vybestack/llxprt-code-core/config/config.js';
|
|
9
|
+
import { type CompletedToolCall } from './coreToolScheduler.js';
|
|
10
|
+
/**
|
|
11
|
+
* Configuration subset required for non-interactive tool execution.
|
|
12
|
+
* Uses the scheduler singleton via getOrCreateScheduler/disposeScheduler.
|
|
13
|
+
*/
|
|
14
|
+
export type ToolExecutionConfig = Pick<Config, 'getToolRegistry' | 'getEphemeralSettings' | 'getEphemeralSetting' | 'getExcludeTools' | 'getSessionId' | 'getTelemetryLogPromptsEnabled' | 'getOrCreateScheduler' | 'disposeScheduler'> & Partial<Pick<Config, 'getAllowedTools' | 'getApprovalMode'>>;
|
|
15
|
+
export declare function executeToolCall(config: ToolExecutionConfig, toolCallRequest: ToolCallRequestInfo, abortSignal?: AbortSignal, dependencies?: {
|
|
16
|
+
messageBus?: MessageBus;
|
|
17
|
+
}): Promise<CompletedToolCall>;
|
|
@@ -0,0 +1,102 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* @license
|
|
3
|
+
* Copyright 2025 Google LLC
|
|
4
|
+
* SPDX-License-Identifier: Apache-2.0
|
|
5
|
+
*/
|
|
6
|
+
import { DEFAULT_AGENT_ID, } from '@vybestack/llxprt-code-core/core/turn.js';
|
|
7
|
+
import { ToolErrorType } from '@vybestack/llxprt-code-tools';
|
|
8
|
+
import { canonicalizeToolName } from './toolGovernance.js';
|
|
9
|
+
async function createScheduler(config, sessionId, completionResolver, dependencies) {
|
|
10
|
+
return config.getOrCreateScheduler(sessionId, {
|
|
11
|
+
getPreferredEditor: () => undefined,
|
|
12
|
+
onEditorClose: () => { },
|
|
13
|
+
onAllToolCallsComplete: async (completedToolCalls) => {
|
|
14
|
+
completionResolver?.(completedToolCalls);
|
|
15
|
+
},
|
|
16
|
+
}, { interactiveMode: false }, dependencies);
|
|
17
|
+
}
|
|
18
|
+
function isBlockedByHookRestriction(request) {
|
|
19
|
+
const allowedTools = request.hookRestrictedAllowedTools;
|
|
20
|
+
if (allowedTools === undefined) {
|
|
21
|
+
return false;
|
|
22
|
+
}
|
|
23
|
+
const allowed = new Set(allowedTools.map(canonicalizeToolName));
|
|
24
|
+
return !allowed.has(canonicalizeToolName(request.name));
|
|
25
|
+
}
|
|
26
|
+
export async function executeToolCall(config, toolCallRequest, abortSignal, dependencies) {
|
|
27
|
+
const startTime = Date.now();
|
|
28
|
+
if (isBlockedByHookRestriction(toolCallRequest)) {
|
|
29
|
+
return Promise.reject(new Error(`Tool "${toolCallRequest.name}" is disabled by hook restrictions.`));
|
|
30
|
+
}
|
|
31
|
+
const agentId = toolCallRequest.agentId ?? DEFAULT_AGENT_ID;
|
|
32
|
+
toolCallRequest.agentId = agentId;
|
|
33
|
+
const internalAbortController = new AbortController();
|
|
34
|
+
let parentAbortHandler = null;
|
|
35
|
+
if (abortSignal) {
|
|
36
|
+
if (abortSignal.aborted) {
|
|
37
|
+
internalAbortController.abort();
|
|
38
|
+
}
|
|
39
|
+
else {
|
|
40
|
+
parentAbortHandler = () => internalAbortController.abort();
|
|
41
|
+
abortSignal.addEventListener('abort', parentAbortHandler, { once: true });
|
|
42
|
+
}
|
|
43
|
+
}
|
|
44
|
+
let completionResolver = null;
|
|
45
|
+
const completionPromise = new Promise((resolve) => {
|
|
46
|
+
completionResolver = resolve;
|
|
47
|
+
});
|
|
48
|
+
const sessionId = config.getSessionId();
|
|
49
|
+
const scheduler = await createScheduler(config, sessionId, completionResolver, dependencies);
|
|
50
|
+
try {
|
|
51
|
+
const effectiveSignal = internalAbortController.signal;
|
|
52
|
+
await scheduler.schedule([toolCallRequest], effectiveSignal);
|
|
53
|
+
const completedCalls = await completionPromise;
|
|
54
|
+
if (completedCalls.length !== 1) {
|
|
55
|
+
throw new Error('Non-interactive executor expects exactly one tool call');
|
|
56
|
+
}
|
|
57
|
+
const completed = completedCalls[0];
|
|
58
|
+
// eslint-disable-next-line @typescript-eslint/prefer-nullish-coalescing -- intentional falsy coalescing: empty string agentId falls through to default
|
|
59
|
+
if (!completed.response.agentId) {
|
|
60
|
+
completed.response.agentId = agentId;
|
|
61
|
+
}
|
|
62
|
+
return completed;
|
|
63
|
+
}
|
|
64
|
+
catch (e) {
|
|
65
|
+
return createErrorCompletedToolCall(toolCallRequest, e instanceof Error ? e : new Error(String(e)), ToolErrorType.UNHANDLED_EXCEPTION, Date.now() - startTime);
|
|
66
|
+
}
|
|
67
|
+
finally {
|
|
68
|
+
if (abortSignal && parentAbortHandler) {
|
|
69
|
+
abortSignal.removeEventListener('abort', parentAbortHandler);
|
|
70
|
+
}
|
|
71
|
+
if (internalAbortController.signal.aborted) {
|
|
72
|
+
scheduler.cancelAll();
|
|
73
|
+
}
|
|
74
|
+
config.disposeScheduler(sessionId);
|
|
75
|
+
}
|
|
76
|
+
}
|
|
77
|
+
function createErrorCompletedToolCall(request, error, errorType, durationMs) {
|
|
78
|
+
return {
|
|
79
|
+
status: 'error',
|
|
80
|
+
request,
|
|
81
|
+
response: {
|
|
82
|
+
callId: request.callId,
|
|
83
|
+
agentId: request.agentId ?? DEFAULT_AGENT_ID,
|
|
84
|
+
error,
|
|
85
|
+
errorType,
|
|
86
|
+
resultDisplay: error.message,
|
|
87
|
+
responseParts: [
|
|
88
|
+
// Only functionResponse — the functionCall is already recorded in
|
|
89
|
+
// history from the model's assistant message (Issue #244).
|
|
90
|
+
{
|
|
91
|
+
functionResponse: {
|
|
92
|
+
id: request.callId,
|
|
93
|
+
name: request.name,
|
|
94
|
+
response: { error: error.message },
|
|
95
|
+
},
|
|
96
|
+
},
|
|
97
|
+
],
|
|
98
|
+
},
|
|
99
|
+
durationMs,
|
|
100
|
+
};
|
|
101
|
+
}
|
|
102
|
+
//# sourceMappingURL=nonInteractiveToolExecutor.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"nonInteractiveToolExecutor.js","sourceRoot":"","sources":["../../../src/core/nonInteractiveToolExecutor.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,105 @@
|
|
|
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 { AgentRuntimeContext } from '@vybestack/llxprt-code-core/runtime/AgentRuntimeContext.js';
|
|
8
|
+
import type { SubagentSchedulerFactory } from './subagentScheduler.js';
|
|
9
|
+
import type { ContextState } from '@vybestack/llxprt-code-core/core/subagentTypes.js';
|
|
10
|
+
import { type OutputObject, type PromptConfig, type ToolConfig, type OutputConfig, type SubAgentRuntimeOverrides, type ModelConfig, type RunConfig } from '@vybestack/llxprt-code-core/core/subagentTypes.js';
|
|
11
|
+
/**
|
|
12
|
+
* Represents the scope and execution environment for a subagent.
|
|
13
|
+
* This class orchestrates the subagent's lifecycle, managing its chat interactions,
|
|
14
|
+
* runtime context, and the collection of its outputs.
|
|
15
|
+
*
|
|
16
|
+
* @plan PLAN-20251028-STATELESS6.P08
|
|
17
|
+
* @requirement REQ-STAT6-001.1, REQ-STAT6-001.2, REQ-STAT6-003.1, REQ-STAT6-003.2
|
|
18
|
+
* @pseudocode agent-runtime-context.md line 93 (step 007.1)
|
|
19
|
+
*/
|
|
20
|
+
export declare class SubAgentScope {
|
|
21
|
+
readonly name: string;
|
|
22
|
+
readonly runtimeContext: AgentRuntimeContext;
|
|
23
|
+
private readonly modelConfig;
|
|
24
|
+
private readonly runConfig;
|
|
25
|
+
private readonly promptConfig;
|
|
26
|
+
private readonly contentGenerator;
|
|
27
|
+
private readonly toolExecutorContext;
|
|
28
|
+
private readonly environmentContextLoader;
|
|
29
|
+
private readonly config;
|
|
30
|
+
private readonly messageBus?;
|
|
31
|
+
private readonly toolConfig?;
|
|
32
|
+
private readonly outputConfig?;
|
|
33
|
+
output: OutputObject;
|
|
34
|
+
private readonly subagentId;
|
|
35
|
+
private readonly logger;
|
|
36
|
+
private readonly textToolParser;
|
|
37
|
+
private activeAbortController;
|
|
38
|
+
private readonly parentAbortSignal?;
|
|
39
|
+
private parentAbortCleanup?;
|
|
40
|
+
/** Emoji filter instance for subagent output */
|
|
41
|
+
private readonly emojiFilter?;
|
|
42
|
+
/** Optional callback for streaming text messages during execution */
|
|
43
|
+
onMessage?: (message: string) => void;
|
|
44
|
+
private timeoutHandle;
|
|
45
|
+
/** @plan PLAN-20251028-STATELESS6.P08, PLAN-20260303-MESSAGEBUS.P01 */
|
|
46
|
+
private constructor();
|
|
47
|
+
/**
|
|
48
|
+
* Returns the unique agent identifier assigned to this subagent scope.
|
|
49
|
+
*/
|
|
50
|
+
getAgentId(): string;
|
|
51
|
+
/**
|
|
52
|
+
* Creates and validates a new SubAgentScope instance.
|
|
53
|
+
*
|
|
54
|
+
* @plan PLAN-20251028-STATELESS6.P08
|
|
55
|
+
* @requirement REQ-STAT6-001.1, REQ-STAT6-003.1, REQ-STAT6-003.2
|
|
56
|
+
* @plan PLAN-20260309-MESSAGEBUS-DI-REMEDIATION.P05
|
|
57
|
+
* @requirement REQ-D01-001.1
|
|
58
|
+
*/
|
|
59
|
+
static create(name: string, foregroundConfig: Config, promptConfig: PromptConfig, modelConfig: ModelConfig, runConfig: RunConfig, toolConfig?: ToolConfig, outputConfig?: OutputConfig, overrides?: SubAgentRuntimeOverrides, parentSignal?: AbortSignal): Promise<SubAgentScope>;
|
|
60
|
+
private bindParentSignal;
|
|
61
|
+
private armTimeout;
|
|
62
|
+
private clearTimeoutHandle;
|
|
63
|
+
private prepareRun;
|
|
64
|
+
private buildInitialMessages;
|
|
65
|
+
/**
|
|
66
|
+
* Executes the subagent in interactive mode by routing tool calls through the
|
|
67
|
+
* shared CoreToolScheduler. Tests may supply a custom schedulerFactory to
|
|
68
|
+
* observe scheduling behaviour without touching the real scheduler.
|
|
69
|
+
*/
|
|
70
|
+
private runInteractiveGoalCheckLoop;
|
|
71
|
+
runInteractive(context: ContextState, options?: {
|
|
72
|
+
schedulerFactory?: SubagentSchedulerFactory;
|
|
73
|
+
}): Promise<void>;
|
|
74
|
+
private initScheduler;
|
|
75
|
+
private runInteractiveTurn;
|
|
76
|
+
private partitionInteractiveToolRequests;
|
|
77
|
+
private handleInteractiveToolCalls;
|
|
78
|
+
private cleanupInteractive;
|
|
79
|
+
/**
|
|
80
|
+
* Runs the subagent in a non-interactive mode.
|
|
81
|
+
*
|
|
82
|
+
* @plan PLAN-20251028-STATELESS6.P08
|
|
83
|
+
* @requirement REQ-STAT6-001.1
|
|
84
|
+
*/
|
|
85
|
+
runNonInteractive(context: ContextState): Promise<void>;
|
|
86
|
+
private runNonInteractiveTurn;
|
|
87
|
+
private consumeNonInteractiveStream;
|
|
88
|
+
private readNextNonInteractiveEvent;
|
|
89
|
+
private collectNonInteractiveChunk;
|
|
90
|
+
private dispatchNonInteractiveTurnResult;
|
|
91
|
+
private buildExecCtx;
|
|
92
|
+
cancel(reason?: string): void;
|
|
93
|
+
/**
|
|
94
|
+
* Dispose of the subagent scope, cleaning up resources and references.
|
|
95
|
+
* Call this when the subagent is no longer needed to prevent memory leaks.
|
|
96
|
+
*
|
|
97
|
+
* Cleanup performed:
|
|
98
|
+
* - Aborts any active operations
|
|
99
|
+
* - Removes parent abort signal event listeners
|
|
100
|
+
* - Nullifies references to allow garbage collection
|
|
101
|
+
*
|
|
102
|
+
* Safe to call multiple times.
|
|
103
|
+
*/
|
|
104
|
+
dispose(): void;
|
|
105
|
+
}
|