@openai/agents-core 0.5.3 → 0.6.0
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/computer.d.ts +10 -2
- package/dist/events.d.ts +1 -1
- package/dist/events.js.map +1 -1
- package/dist/events.mjs.map +1 -1
- package/dist/extensions/handoffFilters.d.ts +4 -3
- package/dist/extensions/handoffFilters.js +8 -3
- package/dist/extensions/handoffFilters.js.map +1 -1
- package/dist/extensions/handoffFilters.mjs +9 -4
- package/dist/extensions/handoffFilters.mjs.map +1 -1
- package/dist/index.d.ts +4 -4
- package/dist/index.js +8 -2
- package/dist/index.js.map +1 -1
- package/dist/index.mjs +2 -2
- package/dist/index.mjs.map +1 -1
- package/dist/items.d.ts +1158 -32
- package/dist/items.js +56 -2
- package/dist/items.js.map +1 -1
- package/dist/items.mjs +53 -1
- package/dist/items.mjs.map +1 -1
- package/dist/metadata.js +3 -3
- package/dist/metadata.mjs +3 -3
- package/dist/model.d.ts +14 -2
- package/dist/run.js +2 -2
- package/dist/run.js.map +1 -1
- package/dist/run.mjs +3 -3
- package/dist/run.mjs.map +1 -1
- package/dist/runContext.d.ts +12 -1
- package/dist/runContext.js +145 -41
- package/dist/runContext.js.map +1 -1
- package/dist/runContext.mjs +145 -41
- package/dist/runContext.mjs.map +1 -1
- package/dist/runState.d.ts +506 -18
- package/dist/runState.js +321 -15
- package/dist/runState.js.map +1 -1
- package/dist/runState.mjs +322 -16
- package/dist/runState.mjs.map +1 -1
- package/dist/runner/approvalRejection.d.ts +13 -0
- package/dist/runner/approvalRejection.js +44 -0
- package/dist/runner/approvalRejection.js.map +1 -0
- package/dist/runner/approvalRejection.mjs +37 -0
- package/dist/runner/approvalRejection.mjs.map +1 -0
- package/dist/runner/mcpApprovals.js +4 -1
- package/dist/runner/mcpApprovals.js.map +1 -1
- package/dist/runner/mcpApprovals.mjs +4 -1
- package/dist/runner/mcpApprovals.mjs.map +1 -1
- package/dist/runner/modelOutputs.d.ts +5 -1
- package/dist/runner/modelOutputs.js +552 -12
- package/dist/runner/modelOutputs.js.map +1 -1
- package/dist/runner/modelOutputs.mjs +552 -13
- package/dist/runner/modelOutputs.mjs.map +1 -1
- package/dist/runner/modelPreparation.js +5 -2
- package/dist/runner/modelPreparation.js.map +1 -1
- package/dist/runner/modelPreparation.mjs +5 -2
- package/dist/runner/modelPreparation.mjs.map +1 -1
- package/dist/runner/sessionPersistence.js +17 -3
- package/dist/runner/sessionPersistence.js.map +1 -1
- package/dist/runner/sessionPersistence.mjs +17 -3
- package/dist/runner/sessionPersistence.mjs.map +1 -1
- package/dist/runner/streaming.js +8 -0
- package/dist/runner/streaming.js.map +1 -1
- package/dist/runner/streaming.mjs +9 -1
- package/dist/runner/streaming.mjs.map +1 -1
- package/dist/runner/toolExecution.js +105 -95
- package/dist/runner/toolExecution.js.map +1 -1
- package/dist/runner/toolExecution.mjs +100 -90
- package/dist/runner/toolExecution.mjs.map +1 -1
- package/dist/runner/toolSearch.d.ts +23 -0
- package/dist/runner/toolSearch.js +426 -0
- package/dist/runner/toolSearch.js.map +1 -0
- package/dist/runner/toolSearch.mjs +416 -0
- package/dist/runner/toolSearch.mjs.map +1 -0
- package/dist/runner/turnResolution.js +2 -1
- package/dist/runner/turnResolution.js.map +1 -1
- package/dist/runner/turnResolution.mjs +2 -1
- package/dist/runner/turnResolution.mjs.map +1 -1
- package/dist/tool.d.ts +50 -0
- package/dist/tool.js +79 -0
- package/dist/tool.js.map +1 -1
- package/dist/tool.mjs +74 -0
- package/dist/tool.mjs.map +1 -1
- package/dist/toolIdentity.d.ts +23 -0
- package/dist/toolIdentity.js +105 -0
- package/dist/toolIdentity.js.map +1 -0
- package/dist/toolIdentity.mjs +89 -0
- package/dist/toolIdentity.mjs.map +1 -0
- package/dist/tooling.d.ts +24 -0
- package/dist/tooling.js +110 -0
- package/dist/tooling.js.map +1 -0
- package/dist/tooling.mjs +97 -0
- package/dist/tooling.mjs.map +1 -0
- package/dist/types/aliases.d.ts +3 -3
- package/dist/types/protocol.d.ts +417 -12
- package/dist/types/protocol.js +59 -4
- package/dist/types/protocol.js.map +1 -1
- package/dist/types/protocol.mjs +57 -2
- package/dist/types/protocol.mjs.map +1 -1
- package/dist/types/providerData.d.ts +2 -0
- package/dist/utils/index.d.ts +2 -0
- package/dist/utils/index.js +15 -1
- package/dist/utils/index.js.map +1 -1
- package/dist/utils/index.mjs +2 -0
- package/dist/utils/index.mjs.map +1 -1
- package/dist/utils/serialize.js +37 -6
- package/dist/utils/serialize.js.map +1 -1
- package/dist/utils/serialize.mjs +37 -6
- package/dist/utils/serialize.mjs.map +1 -1
- package/dist/utils/toolSearch.d.ts +1 -0
- package/dist/utils/toolSearch.js +13 -0
- package/dist/utils/toolSearch.js.map +1 -0
- package/dist/utils/toolSearch.mjs +2 -0
- package/dist/utils/toolSearch.mjs.map +1 -0
- package/package.json +2 -2
package/dist/runContext.d.ts
CHANGED
|
@@ -4,6 +4,8 @@ import { Usage } from './usage';
|
|
|
4
4
|
type ApprovalRecord = {
|
|
5
5
|
approved: boolean | string[];
|
|
6
6
|
rejected: boolean | string[];
|
|
7
|
+
messages?: Record<string, string>;
|
|
8
|
+
stickyRejectMessage?: string;
|
|
7
9
|
};
|
|
8
10
|
type RunContextJson = {
|
|
9
11
|
context: any;
|
|
@@ -29,6 +31,14 @@ export declare class RunContext<TContext = UnknownContext> {
|
|
|
29
31
|
*/
|
|
30
32
|
toolInput?: unknown;
|
|
31
33
|
constructor(context?: TContext);
|
|
34
|
+
/**
|
|
35
|
+
* Retrieve the caller-provided rejection message for a specific tool call.
|
|
36
|
+
*
|
|
37
|
+
* @param toolName - The name of the tool.
|
|
38
|
+
* @param callId - The call ID of the tool invocation.
|
|
39
|
+
* @returns The message string if one was provided, `undefined` otherwise.
|
|
40
|
+
*/
|
|
41
|
+
getRejectionMessage(toolName: string, callId: string): string | undefined;
|
|
32
42
|
/**
|
|
33
43
|
* Check if a tool call has been approved.
|
|
34
44
|
*
|
|
@@ -53,8 +63,9 @@ export declare class RunContext<TContext = UnknownContext> {
|
|
|
53
63
|
*
|
|
54
64
|
* @param approvalItem - The tool approval item to reject.
|
|
55
65
|
*/
|
|
56
|
-
rejectTool(approvalItem: RunToolApprovalItem, { alwaysReject }?: {
|
|
66
|
+
rejectTool(approvalItem: RunToolApprovalItem, { alwaysReject, message, }?: {
|
|
57
67
|
alwaysReject?: boolean;
|
|
68
|
+
message?: string;
|
|
58
69
|
}): void;
|
|
59
70
|
toJSON(): RunContextJson;
|
|
60
71
|
}
|
package/dist/runContext.js
CHANGED
|
@@ -6,6 +6,62 @@ Object.defineProperty(exports, "__esModule", { value: true });
|
|
|
6
6
|
exports.RunContext = void 0;
|
|
7
7
|
const logger_1 = __importDefault(require("./logger.js"));
|
|
8
8
|
const usage_1 = require("./usage.js");
|
|
9
|
+
const COMPUTER_APPROVAL_TOOL_NAMES = new Set([
|
|
10
|
+
'computer',
|
|
11
|
+
'computer_use_preview',
|
|
12
|
+
]);
|
|
13
|
+
function getApprovalToolNameCandidates(toolName) {
|
|
14
|
+
if (!COMPUTER_APPROVAL_TOOL_NAMES.has(toolName)) {
|
|
15
|
+
return [toolName];
|
|
16
|
+
}
|
|
17
|
+
return toolName === 'computer'
|
|
18
|
+
? ['computer', 'computer_use_preview']
|
|
19
|
+
: ['computer_use_preview', 'computer'];
|
|
20
|
+
}
|
|
21
|
+
function mergeApprovalList(current, incoming) {
|
|
22
|
+
if (current === true || incoming === true) {
|
|
23
|
+
return true;
|
|
24
|
+
}
|
|
25
|
+
const currentList = Array.isArray(current) ? current : [];
|
|
26
|
+
const incomingList = Array.isArray(incoming) ? incoming : [];
|
|
27
|
+
return Array.from(new Set([...currentList, ...incomingList]));
|
|
28
|
+
}
|
|
29
|
+
function mergeApprovalMessages(current, incoming) {
|
|
30
|
+
if (current.rejected === true) {
|
|
31
|
+
return current.messages;
|
|
32
|
+
}
|
|
33
|
+
const merged = current.messages || incoming.messages
|
|
34
|
+
? { ...incoming.messages, ...current.messages }
|
|
35
|
+
: undefined;
|
|
36
|
+
if (!merged) {
|
|
37
|
+
return undefined;
|
|
38
|
+
}
|
|
39
|
+
if (Array.isArray(current.rejected)) {
|
|
40
|
+
for (const callId of current.rejected) {
|
|
41
|
+
if (!current.messages ||
|
|
42
|
+
!Object.prototype.hasOwnProperty.call(current.messages, callId)) {
|
|
43
|
+
delete merged[callId];
|
|
44
|
+
}
|
|
45
|
+
}
|
|
46
|
+
}
|
|
47
|
+
return Object.keys(merged).length > 0 ? merged : undefined;
|
|
48
|
+
}
|
|
49
|
+
function mergeStickyRejectMessage(current, incoming) {
|
|
50
|
+
if (current.rejected === true) {
|
|
51
|
+
return current.stickyRejectMessage;
|
|
52
|
+
}
|
|
53
|
+
return current.stickyRejectMessage ?? incoming.stickyRejectMessage;
|
|
54
|
+
}
|
|
55
|
+
function mergeApprovalRecords(current, incoming) {
|
|
56
|
+
const mergedMessages = mergeApprovalMessages(current, incoming);
|
|
57
|
+
const stickyRejectMessage = mergeStickyRejectMessage(current, incoming);
|
|
58
|
+
return {
|
|
59
|
+
approved: mergeApprovalList(current.approved, incoming.approved),
|
|
60
|
+
rejected: mergeApprovalList(current.rejected, incoming.rejected),
|
|
61
|
+
...(mergedMessages ? { messages: mergedMessages } : {}),
|
|
62
|
+
...(stickyRejectMessage !== undefined ? { stickyRejectMessage } : {}),
|
|
63
|
+
};
|
|
64
|
+
}
|
|
9
65
|
/**
|
|
10
66
|
* A context object that is passed to the `Runner.run()` method.
|
|
11
67
|
*/
|
|
@@ -56,7 +112,10 @@ class RunContext {
|
|
|
56
112
|
* @param approvals - The approvals map to rebuild.
|
|
57
113
|
*/
|
|
58
114
|
_rebuildApprovals(approvals) {
|
|
59
|
-
this.#approvals = new Map(
|
|
115
|
+
this.#approvals = new Map();
|
|
116
|
+
for (const [toolName, approval] of Object.entries(approvals)) {
|
|
117
|
+
this.#setApprovalRecord(toolName, approval);
|
|
118
|
+
}
|
|
60
119
|
}
|
|
61
120
|
/**
|
|
62
121
|
* Merge approvals from a serialized state without discarding existing entries.
|
|
@@ -65,25 +124,36 @@ class RunContext {
|
|
|
65
124
|
* @param approvals - The approvals map to merge.
|
|
66
125
|
*/
|
|
67
126
|
_mergeApprovals(approvals) {
|
|
68
|
-
const mergeApproval = (current, incoming) => {
|
|
69
|
-
if (current === true || incoming === true) {
|
|
70
|
-
return true;
|
|
71
|
-
}
|
|
72
|
-
const currentList = Array.isArray(current) ? current : [];
|
|
73
|
-
const incomingList = Array.isArray(incoming) ? incoming : [];
|
|
74
|
-
return Array.from(new Set([...currentList, ...incomingList]));
|
|
75
|
-
};
|
|
76
127
|
for (const [toolName, incoming] of Object.entries(approvals)) {
|
|
77
|
-
|
|
78
|
-
|
|
79
|
-
|
|
80
|
-
|
|
128
|
+
this.#setApprovalRecord(toolName, incoming);
|
|
129
|
+
}
|
|
130
|
+
}
|
|
131
|
+
/**
|
|
132
|
+
* Retrieve the caller-provided rejection message for a specific tool call.
|
|
133
|
+
*
|
|
134
|
+
* @param toolName - The name of the tool.
|
|
135
|
+
* @param callId - The call ID of the tool invocation.
|
|
136
|
+
* @returns The message string if one was provided, `undefined` otherwise.
|
|
137
|
+
*/
|
|
138
|
+
getRejectionMessage(toolName, callId) {
|
|
139
|
+
for (const approvalEntry of this.#getApprovalEntries(toolName)) {
|
|
140
|
+
if (typeof approvalEntry.messages?.[callId] === 'string') {
|
|
141
|
+
return approvalEntry.messages[callId];
|
|
142
|
+
}
|
|
143
|
+
}
|
|
144
|
+
for (const approvalEntry of this.#getApprovalEntries(toolName)) {
|
|
145
|
+
if (approvalEntry.rejected === true) {
|
|
146
|
+
return approvalEntry.stickyRejectMessage;
|
|
81
147
|
}
|
|
82
|
-
this.#approvals.set(toolName, {
|
|
83
|
-
approved: mergeApproval(existing.approved, incoming.approved),
|
|
84
|
-
rejected: mergeApproval(existing.rejected, incoming.rejected),
|
|
85
|
-
});
|
|
86
148
|
}
|
|
149
|
+
return undefined;
|
|
150
|
+
}
|
|
151
|
+
#getCallId(approvalItem) {
|
|
152
|
+
if ('callId' in approvalItem.rawItem) {
|
|
153
|
+
return approvalItem.rawItem.callId;
|
|
154
|
+
}
|
|
155
|
+
const providerData = approvalItem.rawItem.providerData;
|
|
156
|
+
return (approvalItem.rawItem.id ?? providerData?.itemId ?? providerData?.id ?? '');
|
|
87
157
|
}
|
|
88
158
|
/**
|
|
89
159
|
* Check if a tool call has been approved.
|
|
@@ -93,23 +163,25 @@ class RunContext {
|
|
|
93
163
|
*/
|
|
94
164
|
isToolApproved(approval) {
|
|
95
165
|
const { toolName, callId } = approval;
|
|
96
|
-
const
|
|
97
|
-
|
|
166
|
+
const approvalEntries = this.#getApprovalEntries(toolName);
|
|
167
|
+
const hasPermanentApproval = approvalEntries.some((approvalEntry) => approvalEntry.approved === true);
|
|
168
|
+
const hasPermanentRejection = approvalEntries.some((approvalEntry) => approvalEntry.rejected === true);
|
|
169
|
+
if (hasPermanentApproval && hasPermanentRejection) {
|
|
98
170
|
logger_1.default.warn('Tool is permanently approved and rejected at the same time. Approval takes precedence');
|
|
99
171
|
return true;
|
|
100
172
|
}
|
|
101
|
-
if (
|
|
173
|
+
if (hasPermanentApproval) {
|
|
102
174
|
return true;
|
|
103
175
|
}
|
|
104
|
-
if (
|
|
176
|
+
if (hasPermanentRejection) {
|
|
105
177
|
return false;
|
|
106
178
|
}
|
|
107
|
-
const individualCallApproval = Array.isArray(approvalEntry
|
|
179
|
+
const individualCallApproval = approvalEntries.some((approvalEntry) => Array.isArray(approvalEntry.approved)
|
|
108
180
|
? approvalEntry.approved.includes(callId)
|
|
109
|
-
: false;
|
|
110
|
-
const individualCallRejection = Array.isArray(approvalEntry
|
|
181
|
+
: false);
|
|
182
|
+
const individualCallRejection = approvalEntries.some((approvalEntry) => Array.isArray(approvalEntry.rejected)
|
|
111
183
|
? approvalEntry.rejected.includes(callId)
|
|
112
|
-
: false;
|
|
184
|
+
: false);
|
|
113
185
|
if (individualCallApproval && individualCallRejection) {
|
|
114
186
|
logger_1.default.warn(`Tool call ${callId} is both approved and rejected at the same time. Approval takes precedence`);
|
|
115
187
|
return true;
|
|
@@ -130,52 +202,58 @@ class RunContext {
|
|
|
130
202
|
*/
|
|
131
203
|
approveTool(approvalItem, { alwaysApprove = false } = {}) {
|
|
132
204
|
const toolName = approvalItem.toolName ?? approvalItem.rawItem.name;
|
|
205
|
+
const approvalKey = this.#getApprovalStorageKey(toolName);
|
|
133
206
|
if (alwaysApprove) {
|
|
134
|
-
this.#approvals.set(
|
|
207
|
+
this.#approvals.set(approvalKey, {
|
|
135
208
|
approved: true,
|
|
136
209
|
rejected: [],
|
|
137
210
|
});
|
|
138
211
|
return;
|
|
139
212
|
}
|
|
140
|
-
const approvalEntry = this.#approvals.get(
|
|
213
|
+
const approvalEntry = this.#approvals.get(approvalKey) ?? {
|
|
141
214
|
approved: [],
|
|
142
215
|
rejected: [],
|
|
143
216
|
};
|
|
144
217
|
if (Array.isArray(approvalEntry.approved)) {
|
|
145
|
-
|
|
146
|
-
const callId = 'callId' in approvalItem.rawItem
|
|
147
|
-
? approvalItem.rawItem.callId // function tools
|
|
148
|
-
: approvalItem.rawItem.id; // hosted tools
|
|
149
|
-
approvalEntry.approved.push(callId);
|
|
218
|
+
approvalEntry.approved.push(this.#getCallId(approvalItem));
|
|
150
219
|
}
|
|
151
|
-
this.#approvals.set(
|
|
220
|
+
this.#approvals.set(approvalKey, approvalEntry);
|
|
152
221
|
}
|
|
153
222
|
/**
|
|
154
223
|
* Reject a tool call.
|
|
155
224
|
*
|
|
156
225
|
* @param approvalItem - The tool approval item to reject.
|
|
157
226
|
*/
|
|
158
|
-
rejectTool(approvalItem, { alwaysReject = false } = {}) {
|
|
227
|
+
rejectTool(approvalItem, { alwaysReject = false, message, } = {}) {
|
|
159
228
|
const toolName = approvalItem.toolName ?? approvalItem.rawItem.name;
|
|
229
|
+
const approvalKey = this.#getApprovalStorageKey(toolName);
|
|
160
230
|
if (alwaysReject) {
|
|
161
|
-
this.#
|
|
231
|
+
const callId = this.#getCallId(approvalItem);
|
|
232
|
+
this.#approvals.set(approvalKey, {
|
|
162
233
|
approved: false,
|
|
163
234
|
rejected: true,
|
|
235
|
+
...(message !== undefined
|
|
236
|
+
? {
|
|
237
|
+
messages: { [callId]: message },
|
|
238
|
+
stickyRejectMessage: message,
|
|
239
|
+
}
|
|
240
|
+
: {}),
|
|
164
241
|
});
|
|
165
242
|
return;
|
|
166
243
|
}
|
|
167
|
-
const approvalEntry = this.#approvals.get(
|
|
244
|
+
const approvalEntry = this.#approvals.get(approvalKey) ?? {
|
|
168
245
|
approved: [],
|
|
169
246
|
rejected: [],
|
|
170
247
|
};
|
|
171
248
|
if (Array.isArray(approvalEntry.rejected)) {
|
|
172
|
-
|
|
173
|
-
const callId = 'callId' in approvalItem.rawItem
|
|
174
|
-
? approvalItem.rawItem.callId // function tools
|
|
175
|
-
: approvalItem.rawItem.id; // hosted tools
|
|
249
|
+
const callId = this.#getCallId(approvalItem);
|
|
176
250
|
approvalEntry.rejected.push(callId);
|
|
251
|
+
if (message !== undefined) {
|
|
252
|
+
approvalEntry.messages = approvalEntry.messages ?? {};
|
|
253
|
+
approvalEntry.messages[callId] = message;
|
|
254
|
+
}
|
|
177
255
|
}
|
|
178
|
-
this.#approvals.set(
|
|
256
|
+
this.#approvals.set(approvalKey, approvalEntry);
|
|
179
257
|
}
|
|
180
258
|
/**
|
|
181
259
|
* Creates a child context that shares approvals and usage, with tool input set.
|
|
@@ -206,6 +284,32 @@ class RunContext {
|
|
|
206
284
|
}
|
|
207
285
|
return json;
|
|
208
286
|
}
|
|
287
|
+
#getApprovalEntries(toolName) {
|
|
288
|
+
return getApprovalToolNameCandidates(toolName)
|
|
289
|
+
.map((candidate) => this.#approvals.get(candidate))
|
|
290
|
+
.filter((approval) => approval !== undefined);
|
|
291
|
+
}
|
|
292
|
+
#getApprovalStorageKey(toolName) {
|
|
293
|
+
return (getApprovalToolNameCandidates(toolName).find((candidate) => this.#approvals.has(candidate)) ?? toolName);
|
|
294
|
+
}
|
|
295
|
+
#setApprovalRecord(toolName, incoming) {
|
|
296
|
+
const candidates = getApprovalToolNameCandidates(toolName);
|
|
297
|
+
const existingEntries = candidates
|
|
298
|
+
.map((candidate) => this.#approvals.get(candidate))
|
|
299
|
+
.filter((approval) => approval !== undefined);
|
|
300
|
+
const mergedExisting = existingEntries.reduce((current, approval) => current ? mergeApprovalRecords(current, approval) : approval, undefined);
|
|
301
|
+
const merged = mergedExisting
|
|
302
|
+
? mergeApprovalRecords(mergedExisting, incoming)
|
|
303
|
+
: incoming;
|
|
304
|
+
const targetKey = candidates.find((candidate) => this.#approvals.has(candidate)) ??
|
|
305
|
+
toolName;
|
|
306
|
+
this.#approvals.set(targetKey, merged);
|
|
307
|
+
for (const candidate of candidates) {
|
|
308
|
+
if (candidate !== targetKey) {
|
|
309
|
+
this.#approvals.delete(candidate);
|
|
310
|
+
}
|
|
311
|
+
}
|
|
312
|
+
}
|
|
209
313
|
}
|
|
210
314
|
exports.RunContext = RunContext;
|
|
211
315
|
//# sourceMappingURL=runContext.js.map
|
package/dist/runContext.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"runContext.js","sourceRoot":"","sources":["../src/runContext.ts"],"names":[],"mappings":";;;;;;AACA,yDAA8B;AAE9B,sCAAgC;
|
|
1
|
+
{"version":3,"file":"runContext.js","sourceRoot":"","sources":["../src/runContext.ts"],"names":[],"mappings":"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"}
|
package/dist/runContext.mjs
CHANGED
|
@@ -1,5 +1,61 @@
|
|
|
1
1
|
import logger from "./logger.mjs";
|
|
2
2
|
import { Usage } from "./usage.mjs";
|
|
3
|
+
const COMPUTER_APPROVAL_TOOL_NAMES = new Set([
|
|
4
|
+
'computer',
|
|
5
|
+
'computer_use_preview',
|
|
6
|
+
]);
|
|
7
|
+
function getApprovalToolNameCandidates(toolName) {
|
|
8
|
+
if (!COMPUTER_APPROVAL_TOOL_NAMES.has(toolName)) {
|
|
9
|
+
return [toolName];
|
|
10
|
+
}
|
|
11
|
+
return toolName === 'computer'
|
|
12
|
+
? ['computer', 'computer_use_preview']
|
|
13
|
+
: ['computer_use_preview', 'computer'];
|
|
14
|
+
}
|
|
15
|
+
function mergeApprovalList(current, incoming) {
|
|
16
|
+
if (current === true || incoming === true) {
|
|
17
|
+
return true;
|
|
18
|
+
}
|
|
19
|
+
const currentList = Array.isArray(current) ? current : [];
|
|
20
|
+
const incomingList = Array.isArray(incoming) ? incoming : [];
|
|
21
|
+
return Array.from(new Set([...currentList, ...incomingList]));
|
|
22
|
+
}
|
|
23
|
+
function mergeApprovalMessages(current, incoming) {
|
|
24
|
+
if (current.rejected === true) {
|
|
25
|
+
return current.messages;
|
|
26
|
+
}
|
|
27
|
+
const merged = current.messages || incoming.messages
|
|
28
|
+
? { ...incoming.messages, ...current.messages }
|
|
29
|
+
: undefined;
|
|
30
|
+
if (!merged) {
|
|
31
|
+
return undefined;
|
|
32
|
+
}
|
|
33
|
+
if (Array.isArray(current.rejected)) {
|
|
34
|
+
for (const callId of current.rejected) {
|
|
35
|
+
if (!current.messages ||
|
|
36
|
+
!Object.prototype.hasOwnProperty.call(current.messages, callId)) {
|
|
37
|
+
delete merged[callId];
|
|
38
|
+
}
|
|
39
|
+
}
|
|
40
|
+
}
|
|
41
|
+
return Object.keys(merged).length > 0 ? merged : undefined;
|
|
42
|
+
}
|
|
43
|
+
function mergeStickyRejectMessage(current, incoming) {
|
|
44
|
+
if (current.rejected === true) {
|
|
45
|
+
return current.stickyRejectMessage;
|
|
46
|
+
}
|
|
47
|
+
return current.stickyRejectMessage ?? incoming.stickyRejectMessage;
|
|
48
|
+
}
|
|
49
|
+
function mergeApprovalRecords(current, incoming) {
|
|
50
|
+
const mergedMessages = mergeApprovalMessages(current, incoming);
|
|
51
|
+
const stickyRejectMessage = mergeStickyRejectMessage(current, incoming);
|
|
52
|
+
return {
|
|
53
|
+
approved: mergeApprovalList(current.approved, incoming.approved),
|
|
54
|
+
rejected: mergeApprovalList(current.rejected, incoming.rejected),
|
|
55
|
+
...(mergedMessages ? { messages: mergedMessages } : {}),
|
|
56
|
+
...(stickyRejectMessage !== undefined ? { stickyRejectMessage } : {}),
|
|
57
|
+
};
|
|
58
|
+
}
|
|
3
59
|
/**
|
|
4
60
|
* A context object that is passed to the `Runner.run()` method.
|
|
5
61
|
*/
|
|
@@ -50,7 +106,10 @@ export class RunContext {
|
|
|
50
106
|
* @param approvals - The approvals map to rebuild.
|
|
51
107
|
*/
|
|
52
108
|
_rebuildApprovals(approvals) {
|
|
53
|
-
this.#approvals = new Map(
|
|
109
|
+
this.#approvals = new Map();
|
|
110
|
+
for (const [toolName, approval] of Object.entries(approvals)) {
|
|
111
|
+
this.#setApprovalRecord(toolName, approval);
|
|
112
|
+
}
|
|
54
113
|
}
|
|
55
114
|
/**
|
|
56
115
|
* Merge approvals from a serialized state without discarding existing entries.
|
|
@@ -59,25 +118,36 @@ export class RunContext {
|
|
|
59
118
|
* @param approvals - The approvals map to merge.
|
|
60
119
|
*/
|
|
61
120
|
_mergeApprovals(approvals) {
|
|
62
|
-
const mergeApproval = (current, incoming) => {
|
|
63
|
-
if (current === true || incoming === true) {
|
|
64
|
-
return true;
|
|
65
|
-
}
|
|
66
|
-
const currentList = Array.isArray(current) ? current : [];
|
|
67
|
-
const incomingList = Array.isArray(incoming) ? incoming : [];
|
|
68
|
-
return Array.from(new Set([...currentList, ...incomingList]));
|
|
69
|
-
};
|
|
70
121
|
for (const [toolName, incoming] of Object.entries(approvals)) {
|
|
71
|
-
|
|
72
|
-
|
|
73
|
-
|
|
74
|
-
|
|
122
|
+
this.#setApprovalRecord(toolName, incoming);
|
|
123
|
+
}
|
|
124
|
+
}
|
|
125
|
+
/**
|
|
126
|
+
* Retrieve the caller-provided rejection message for a specific tool call.
|
|
127
|
+
*
|
|
128
|
+
* @param toolName - The name of the tool.
|
|
129
|
+
* @param callId - The call ID of the tool invocation.
|
|
130
|
+
* @returns The message string if one was provided, `undefined` otherwise.
|
|
131
|
+
*/
|
|
132
|
+
getRejectionMessage(toolName, callId) {
|
|
133
|
+
for (const approvalEntry of this.#getApprovalEntries(toolName)) {
|
|
134
|
+
if (typeof approvalEntry.messages?.[callId] === 'string') {
|
|
135
|
+
return approvalEntry.messages[callId];
|
|
136
|
+
}
|
|
137
|
+
}
|
|
138
|
+
for (const approvalEntry of this.#getApprovalEntries(toolName)) {
|
|
139
|
+
if (approvalEntry.rejected === true) {
|
|
140
|
+
return approvalEntry.stickyRejectMessage;
|
|
75
141
|
}
|
|
76
|
-
this.#approvals.set(toolName, {
|
|
77
|
-
approved: mergeApproval(existing.approved, incoming.approved),
|
|
78
|
-
rejected: mergeApproval(existing.rejected, incoming.rejected),
|
|
79
|
-
});
|
|
80
142
|
}
|
|
143
|
+
return undefined;
|
|
144
|
+
}
|
|
145
|
+
#getCallId(approvalItem) {
|
|
146
|
+
if ('callId' in approvalItem.rawItem) {
|
|
147
|
+
return approvalItem.rawItem.callId;
|
|
148
|
+
}
|
|
149
|
+
const providerData = approvalItem.rawItem.providerData;
|
|
150
|
+
return (approvalItem.rawItem.id ?? providerData?.itemId ?? providerData?.id ?? '');
|
|
81
151
|
}
|
|
82
152
|
/**
|
|
83
153
|
* Check if a tool call has been approved.
|
|
@@ -87,23 +157,25 @@ export class RunContext {
|
|
|
87
157
|
*/
|
|
88
158
|
isToolApproved(approval) {
|
|
89
159
|
const { toolName, callId } = approval;
|
|
90
|
-
const
|
|
91
|
-
|
|
160
|
+
const approvalEntries = this.#getApprovalEntries(toolName);
|
|
161
|
+
const hasPermanentApproval = approvalEntries.some((approvalEntry) => approvalEntry.approved === true);
|
|
162
|
+
const hasPermanentRejection = approvalEntries.some((approvalEntry) => approvalEntry.rejected === true);
|
|
163
|
+
if (hasPermanentApproval && hasPermanentRejection) {
|
|
92
164
|
logger.warn('Tool is permanently approved and rejected at the same time. Approval takes precedence');
|
|
93
165
|
return true;
|
|
94
166
|
}
|
|
95
|
-
if (
|
|
167
|
+
if (hasPermanentApproval) {
|
|
96
168
|
return true;
|
|
97
169
|
}
|
|
98
|
-
if (
|
|
170
|
+
if (hasPermanentRejection) {
|
|
99
171
|
return false;
|
|
100
172
|
}
|
|
101
|
-
const individualCallApproval = Array.isArray(approvalEntry
|
|
173
|
+
const individualCallApproval = approvalEntries.some((approvalEntry) => Array.isArray(approvalEntry.approved)
|
|
102
174
|
? approvalEntry.approved.includes(callId)
|
|
103
|
-
: false;
|
|
104
|
-
const individualCallRejection = Array.isArray(approvalEntry
|
|
175
|
+
: false);
|
|
176
|
+
const individualCallRejection = approvalEntries.some((approvalEntry) => Array.isArray(approvalEntry.rejected)
|
|
105
177
|
? approvalEntry.rejected.includes(callId)
|
|
106
|
-
: false;
|
|
178
|
+
: false);
|
|
107
179
|
if (individualCallApproval && individualCallRejection) {
|
|
108
180
|
logger.warn(`Tool call ${callId} is both approved and rejected at the same time. Approval takes precedence`);
|
|
109
181
|
return true;
|
|
@@ -124,52 +196,58 @@ export class RunContext {
|
|
|
124
196
|
*/
|
|
125
197
|
approveTool(approvalItem, { alwaysApprove = false } = {}) {
|
|
126
198
|
const toolName = approvalItem.toolName ?? approvalItem.rawItem.name;
|
|
199
|
+
const approvalKey = this.#getApprovalStorageKey(toolName);
|
|
127
200
|
if (alwaysApprove) {
|
|
128
|
-
this.#approvals.set(
|
|
201
|
+
this.#approvals.set(approvalKey, {
|
|
129
202
|
approved: true,
|
|
130
203
|
rejected: [],
|
|
131
204
|
});
|
|
132
205
|
return;
|
|
133
206
|
}
|
|
134
|
-
const approvalEntry = this.#approvals.get(
|
|
207
|
+
const approvalEntry = this.#approvals.get(approvalKey) ?? {
|
|
135
208
|
approved: [],
|
|
136
209
|
rejected: [],
|
|
137
210
|
};
|
|
138
211
|
if (Array.isArray(approvalEntry.approved)) {
|
|
139
|
-
|
|
140
|
-
const callId = 'callId' in approvalItem.rawItem
|
|
141
|
-
? approvalItem.rawItem.callId // function tools
|
|
142
|
-
: approvalItem.rawItem.id; // hosted tools
|
|
143
|
-
approvalEntry.approved.push(callId);
|
|
212
|
+
approvalEntry.approved.push(this.#getCallId(approvalItem));
|
|
144
213
|
}
|
|
145
|
-
this.#approvals.set(
|
|
214
|
+
this.#approvals.set(approvalKey, approvalEntry);
|
|
146
215
|
}
|
|
147
216
|
/**
|
|
148
217
|
* Reject a tool call.
|
|
149
218
|
*
|
|
150
219
|
* @param approvalItem - The tool approval item to reject.
|
|
151
220
|
*/
|
|
152
|
-
rejectTool(approvalItem, { alwaysReject = false } = {}) {
|
|
221
|
+
rejectTool(approvalItem, { alwaysReject = false, message, } = {}) {
|
|
153
222
|
const toolName = approvalItem.toolName ?? approvalItem.rawItem.name;
|
|
223
|
+
const approvalKey = this.#getApprovalStorageKey(toolName);
|
|
154
224
|
if (alwaysReject) {
|
|
155
|
-
this.#
|
|
225
|
+
const callId = this.#getCallId(approvalItem);
|
|
226
|
+
this.#approvals.set(approvalKey, {
|
|
156
227
|
approved: false,
|
|
157
228
|
rejected: true,
|
|
229
|
+
...(message !== undefined
|
|
230
|
+
? {
|
|
231
|
+
messages: { [callId]: message },
|
|
232
|
+
stickyRejectMessage: message,
|
|
233
|
+
}
|
|
234
|
+
: {}),
|
|
158
235
|
});
|
|
159
236
|
return;
|
|
160
237
|
}
|
|
161
|
-
const approvalEntry = this.#approvals.get(
|
|
238
|
+
const approvalEntry = this.#approvals.get(approvalKey) ?? {
|
|
162
239
|
approved: [],
|
|
163
240
|
rejected: [],
|
|
164
241
|
};
|
|
165
242
|
if (Array.isArray(approvalEntry.rejected)) {
|
|
166
|
-
|
|
167
|
-
const callId = 'callId' in approvalItem.rawItem
|
|
168
|
-
? approvalItem.rawItem.callId // function tools
|
|
169
|
-
: approvalItem.rawItem.id; // hosted tools
|
|
243
|
+
const callId = this.#getCallId(approvalItem);
|
|
170
244
|
approvalEntry.rejected.push(callId);
|
|
245
|
+
if (message !== undefined) {
|
|
246
|
+
approvalEntry.messages = approvalEntry.messages ?? {};
|
|
247
|
+
approvalEntry.messages[callId] = message;
|
|
248
|
+
}
|
|
171
249
|
}
|
|
172
|
-
this.#approvals.set(
|
|
250
|
+
this.#approvals.set(approvalKey, approvalEntry);
|
|
173
251
|
}
|
|
174
252
|
/**
|
|
175
253
|
* Creates a child context that shares approvals and usage, with tool input set.
|
|
@@ -200,5 +278,31 @@ export class RunContext {
|
|
|
200
278
|
}
|
|
201
279
|
return json;
|
|
202
280
|
}
|
|
281
|
+
#getApprovalEntries(toolName) {
|
|
282
|
+
return getApprovalToolNameCandidates(toolName)
|
|
283
|
+
.map((candidate) => this.#approvals.get(candidate))
|
|
284
|
+
.filter((approval) => approval !== undefined);
|
|
285
|
+
}
|
|
286
|
+
#getApprovalStorageKey(toolName) {
|
|
287
|
+
return (getApprovalToolNameCandidates(toolName).find((candidate) => this.#approvals.has(candidate)) ?? toolName);
|
|
288
|
+
}
|
|
289
|
+
#setApprovalRecord(toolName, incoming) {
|
|
290
|
+
const candidates = getApprovalToolNameCandidates(toolName);
|
|
291
|
+
const existingEntries = candidates
|
|
292
|
+
.map((candidate) => this.#approvals.get(candidate))
|
|
293
|
+
.filter((approval) => approval !== undefined);
|
|
294
|
+
const mergedExisting = existingEntries.reduce((current, approval) => current ? mergeApprovalRecords(current, approval) : approval, undefined);
|
|
295
|
+
const merged = mergedExisting
|
|
296
|
+
? mergeApprovalRecords(mergedExisting, incoming)
|
|
297
|
+
: incoming;
|
|
298
|
+
const targetKey = candidates.find((candidate) => this.#approvals.has(candidate)) ??
|
|
299
|
+
toolName;
|
|
300
|
+
this.#approvals.set(targetKey, merged);
|
|
301
|
+
for (const candidate of candidates) {
|
|
302
|
+
if (candidate !== targetKey) {
|
|
303
|
+
this.#approvals.delete(candidate);
|
|
304
|
+
}
|
|
305
|
+
}
|
|
306
|
+
}
|
|
203
307
|
}
|
|
204
308
|
//# sourceMappingURL=runContext.mjs.map
|
package/dist/runContext.mjs.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"runContext.mjs","sourceRoot":"","sources":["../src/runContext.ts"],"names":[],"mappings":"OACO,MAAM;OAEN,EAAE,KAAK,EAAE;
|
|
1
|
+
{"version":3,"file":"runContext.mjs","sourceRoot":"","sources":["../src/runContext.ts"],"names":[],"mappings":"OACO,MAAM;OAEN,EAAE,KAAK,EAAE;AAShB,MAAM,4BAA4B,GAAG,IAAI,GAAG,CAAC;IAC3C,UAAU;IACV,sBAAsB;CACvB,CAAC,CAAC;AAEH,SAAS,6BAA6B,CAAC,QAAgB;IACrD,IAAI,CAAC,4BAA4B,CAAC,GAAG,CAAC,QAAQ,CAAC,EAAE,CAAC;QAChD,OAAO,CAAC,QAAQ,CAAC,CAAC;IACpB,CAAC;IAED,OAAO,QAAQ,KAAK,UAAU;QAC5B,CAAC,CAAC,CAAC,UAAU,EAAE,sBAAsB,CAAC;QACtC,CAAC,CAAC,CAAC,sBAAsB,EAAE,UAAU,CAAC,CAAC;AAC3C,CAAC;AAED,SAAS,iBAAiB,CACxB,OAAmC,EACnC,QAAoC;IAEpC,IAAI,OAAO,KAAK,IAAI,IAAI,QAAQ,KAAK,IAAI,EAAE,CAAC;QAC1C,OAAO,IAAI,CAAC;IACd,CAAC;IACD,MAAM,WAAW,GAAG,KAAK,CAAC,OAAO,CAAC,OAAO,CAAC,CAAC,CAAC,CAAC,OAAO,CAAC,CAAC,CAAC,EAAE,CAAC;IAC1D,MAAM,YAAY,GAAG,KAAK,CAAC,OAAO,CAAC,QAAQ,CAAC,CAAC,CAAC,CAAC,QAAQ,CAAC,CAAC,CAAC,EAAE,CAAC;IAC7D,OAAO,KAAK,CAAC,IAAI,CAAC,IAAI,GAAG,CAAC,CAAC,GAAG,WAAW,EAAE,GAAG,YAAY,CAAC,CAAC,CAAC,CAAC;AAChE,CAAC;AAED,SAAS,qBAAqB,CAC5B,OAAuB,EACvB,QAAwB;IAExB,IAAI,OAAO,CAAC,QAAQ,KAAK,IAAI,EAAE,CAAC;QAC9B,OAAO,OAAO,CAAC,QAAQ,CAAC;IAC1B,CAAC;IAED,MAAM,MAAM,GACV,OAAO,CAAC,QAAQ,IAAI,QAAQ,CAAC,QAAQ;QACnC,CAAC,CAAC,EAAE,GAAG,QAAQ,CAAC,QAAQ,EAAE,GAAG,OAAO,CAAC,QAAQ,EAAE;QAC/C,CAAC,CAAC,SAAS,CAAC;IAChB,IAAI,CAAC,MAAM,EAAE,CAAC;QACZ,OAAO,SAAS,CAAC;IACnB,CAAC;IAED,IAAI,KAAK,CAAC,OAAO,CAAC,OAAO,CAAC,QAAQ,CAAC,EAAE,CAAC;QACpC,KAAK,MAAM,MAAM,IAAI,OAAO,CAAC,QAAQ,EAAE,CAAC;YACtC,IACE,CAAC,OAAO,CAAC,QAAQ;gBACjB,CAAC,MAAM,CAAC,SAAS,CAAC,cAAc,CAAC,IAAI,CAAC,OAAO,CAAC,QAAQ,EAAE,MAAM,CAAC,EAC/D,CAAC;gBACD,OAAO,MAAM,CAAC,MAAM,CAAC,CAAC;YACxB,CAAC;QACH,CAAC;IACH,CAAC;IAED,OAAO,MAAM,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC,MAAM,GAAG,CAAC,CAAC,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,SAAS,CAAC;AAC7D,CAAC;AAED,SAAS,wBAAwB,CAC/B,OAAuB,EACvB,QAAwB;IAExB,IAAI,OAAO,CAAC,QAAQ,KAAK,IAAI,EAAE,CAAC;QAC9B,OAAO,OAAO,CAAC,mBAAmB,CAAC;IACrC,CAAC;IACD,OAAO,OAAO,CAAC,mBAAmB,IAAI,QAAQ,CAAC,mBAAmB,CAAC;AACrE,CAAC;AAED,SAAS,oBAAoB,CAC3B,OAAuB,EACvB,QAAwB;IAExB,MAAM,cAAc,GAAG,qBAAqB,CAAC,OAAO,EAAE,QAAQ,CAAC,CAAC;IAChE,MAAM,mBAAmB,GAAG,wBAAwB,CAAC,OAAO,EAAE,QAAQ,CAAC,CAAC;IACxE,OAAO;QACL,QAAQ,EAAE,iBAAiB,CAAC,OAAO,CAAC,QAAQ,EAAE,QAAQ,CAAC,QAAQ,CAAC;QAChE,QAAQ,EAAE,iBAAiB,CAAC,OAAO,CAAC,QAAQ,EAAE,QAAQ,CAAC,QAAQ,CAAC;QAChE,GAAG,CAAC,cAAc,CAAC,CAAC,CAAC,EAAE,QAAQ,EAAE,cAAc,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC;QACvD,GAAG,CAAC,mBAAmB,KAAK,SAAS,CAAC,CAAC,CAAC,EAAE,mBAAmB,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC;KACtE,CAAC;AACJ,CAAC;AASD;;GAEG;AACH,MAAM,OAAO,UAAU;IACrB;;OAEG;IACH,OAAO,CAAW;IAElB;;OAEG;IACH,KAAK,CAAQ;IAEb;;OAEG;IACH,SAAS,CAAW;IAEpB;;OAEG;IACH,UAAU,CAA8B;IAExC,YAAY,UAAoB,EAAc;QAC5C,IAAI,CAAC,OAAO,GAAG,OAAO,CAAC;QACvB,IAAI,CAAC,KAAK,GAAG,IAAI,KAAK,EAAE,CAAC;QACzB,IAAI,CAAC,UAAU,GAAG,IAAI,GAAG,EAAE,CAAC;IAC9B,CAAC;IAED;;;;OAIG;IACO,WAAW;QACnB,OAAO,IAAI,UAAU,CAAC,IAAI,CAAC,OAAO,CAAC,CAAC;IACtC,CAAC;IAED;;;OAGG;IACO,iBAAiB,CACzB,MAAe;QAEf,MAAM,CAAC,OAAO,GAAG,IAAI,CAAC,OAAO,CAAC;QAC9B,MAAM,CAAC,KAAK,GAAG,IAAI,CAAC,KAAK,CAAC;QAC1B,MAAM,CAAC,UAAU,GAAG,IAAI,CAAC,UAAU,CAAC;QACpC,OAAO,MAAM,CAAC;IAChB,CAAC;IAED;;;;;OAKG;IACH,iBAAiB,CAAC,SAAyC;QACzD,IAAI,CAAC,UAAU,GAAG,IAAI,GAAG,EAAE,CAAC;QAC5B,KAAK,MAAM,CAAC,QAAQ,EAAE,QAAQ,CAAC,IAAI,MAAM,CAAC,OAAO,CAAC,SAAS,CAAC,EAAE,CAAC;YAC7D,IAAI,CAAC,kBAAkB,CAAC,QAAQ,EAAE,QAAQ,CAAC,CAAC;QAC9C,CAAC;IACH,CAAC;IAED;;;;;OAKG;IACH,eAAe,CAAC,SAAyC;QACvD,KAAK,MAAM,CAAC,QAAQ,EAAE,QAAQ,CAAC,IAAI,MAAM,CAAC,OAAO,CAAC,SAAS,CAAC,EAAE,CAAC;YAC7D,IAAI,CAAC,kBAAkB,CAAC,QAAQ,EAAE,QAAQ,CAAC,CAAC;QAC9C,CAAC;IACH,CAAC;IAED;;;;;;OAMG;IACH,mBAAmB,CAAC,QAAgB,EAAE,MAAc;QAClD,KAAK,MAAM,aAAa,IAAI,IAAI,CAAC,mBAAmB,CAAC,QAAQ,CAAC,EAAE,CAAC;YAC/D,IAAI,OAAO,aAAa,CAAC,QAAQ,EAAE,CAAC,MAAM,CAAC,KAAK,QAAQ,EAAE,CAAC;gBACzD,OAAO,aAAa,CAAC,QAAQ,CAAC,MAAM,CAAC,CAAC;YACxC,CAAC;QACH,CAAC;QAED,KAAK,MAAM,aAAa,IAAI,IAAI,CAAC,mBAAmB,CAAC,QAAQ,CAAC,EAAE,CAAC;YAC/D,IAAI,aAAa,CAAC,QAAQ,KAAK,IAAI,EAAE,CAAC;gBACpC,OAAO,aAAa,CAAC,mBAAmB,CAAC;YAC3C,CAAC;QACH,CAAC;QAED,OAAO,SAAS,CAAC;IACnB,CAAC;IAED,UAAU,CAAC,YAAiC;QAC1C,IAAI,QAAQ,IAAI,YAAY,CAAC,OAAO,EAAE,CAAC;YACrC,OAAO,YAAY,CAAC,OAAO,CAAC,MAAM,CAAC;QACrC,CAAC;QAED,MAAM,YAAY,GAAG,YAAY,CAAC,OAAO,CAAC,YAE7B,CAAC;QACd,OAAO,CACL,YAAY,CAAC,OAAO,CAAC,EAAE,IAAI,YAAY,EAAE,MAAM,IAAI,YAAY,EAAE,EAAE,IAAI,EAAE,CAC1E,CAAC;IACJ,CAAC;IAED;;;;;OAKG;IACH,cAAc,CAAC,QAA8C;QAC3D,MAAM,EAAE,QAAQ,EAAE,MAAM,EAAE,GAAG,QAAQ,CAAC;QACtC,MAAM,eAAe,GAAG,IAAI,CAAC,mBAAmB,CAAC,QAAQ,CAAC,CAAC;QAC3D,MAAM,oBAAoB,GAAG,eAAe,CAAC,IAAI,CAC/C,CAAC,aAAa,EAAE,EAAE,CAAC,aAAa,CAAC,QAAQ,KAAK,IAAI,CACnD,CAAC;QACF,MAAM,qBAAqB,GAAG,eAAe,CAAC,IAAI,CAChD,CAAC,aAAa,EAAE,EAAE,CAAC,aAAa,CAAC,QAAQ,KAAK,IAAI,CACnD,CAAC;QAEF,IAAI,oBAAoB,IAAI,qBAAqB,EAAE,CAAC;YAClD,MAAM,CAAC,IAAI,CACT,uFAAuF,CACxF,CAAC;YACF,OAAO,IAAI,CAAC;QACd,CAAC;QAED,IAAI,oBAAoB,EAAE,CAAC;YACzB,OAAO,IAAI,CAAC;QACd,CAAC;QAED,IAAI,qBAAqB,EAAE,CAAC;YAC1B,OAAO,KAAK,CAAC;QACf,CAAC;QAED,MAAM,sBAAsB,GAAG,eAAe,CAAC,IAAI,CAAC,CAAC,aAAa,EAAE,EAAE,CACpE,KAAK,CAAC,OAAO,CAAC,aAAa,CAAC,QAAQ,CAAC;YACnC,CAAC,CAAC,aAAa,CAAC,QAAQ,CAAC,QAAQ,CAAC,MAAM,CAAC;YACzC,CAAC,CAAC,KAAK,CACV,CAAC;QACF,MAAM,uBAAuB,GAAG,eAAe,CAAC,IAAI,CAAC,CAAC,aAAa,EAAE,EAAE,CACrE,KAAK,CAAC,OAAO,CAAC,aAAa,CAAC,QAAQ,CAAC;YACnC,CAAC,CAAC,aAAa,CAAC,QAAQ,CAAC,QAAQ,CAAC,MAAM,CAAC;YACzC,CAAC,CAAC,KAAK,CACV,CAAC;QAEF,IAAI,sBAAsB,IAAI,uBAAuB,EAAE,CAAC;YACtD,MAAM,CAAC,IAAI,CACT,aAAa,MAAM,4EAA4E,CAChG,CAAC;YACF,OAAO,IAAI,CAAC;QACd,CAAC;QAED,IAAI,sBAAsB,EAAE,CAAC;YAC3B,OAAO,IAAI,CAAC;QACd,CAAC;QAED,IAAI,uBAAuB,EAAE,CAAC;YAC5B,OAAO,KAAK,CAAC;QACf,CAAC;QAED,OAAO,SAAS,CAAC;IACnB,CAAC;IAED;;;;;OAKG;IACH,WAAW,CACT,YAAiC,EACjC,EAAE,aAAa,GAAG,KAAK,KAAkC,EAAE;QAE3D,MAAM,QAAQ,GACZ,YAAY,CAAC,QAAQ,IAAK,YAAY,CAAC,OAAe,CAAC,IAAI,CAAC;QAC9D,MAAM,WAAW,GAAG,IAAI,CAAC,sBAAsB,CAAC,QAAQ,CAAC,CAAC;QAC1D,IAAI,aAAa,EAAE,CAAC;YAClB,IAAI,CAAC,UAAU,CAAC,GAAG,CAAC,WAAW,EAAE;gBAC/B,QAAQ,EAAE,IAAI;gBACd,QAAQ,EAAE,EAAE;aACb,CAAC,CAAC;YACH,OAAO;QACT,CAAC;QAED,MAAM,aAAa,GAAG,IAAI,CAAC,UAAU,CAAC,GAAG,CAAC,WAAW,CAAC,IAAI;YACxD,QAAQ,EAAE,EAAE;YACZ,QAAQ,EAAE,EAAE;SACb,CAAC;QACF,IAAI,KAAK,CAAC,OAAO,CAAC,aAAa,CAAC,QAAQ,CAAC,EAAE,CAAC;YAC1C,aAAa,CAAC,QAAQ,CAAC,IAAI,CAAC,IAAI,CAAC,UAAU,CAAC,YAAY,CAAC,CAAC,CAAC;QAC7D,CAAC;QACD,IAAI,CAAC,UAAU,CAAC,GAAG,CAAC,WAAW,EAAE,aAAa,CAAC,CAAC;IAClD,CAAC;IAED;;;;OAIG;IACH,UAAU,CACR,YAAiC,EACjC,EACE,YAAY,GAAG,KAAK,EACpB,OAAO,MACyC,EAAE;QAEpD,MAAM,QAAQ,GACZ,YAAY,CAAC,QAAQ,IAAK,YAAY,CAAC,OAAe,CAAC,IAAI,CAAC;QAC9D,MAAM,WAAW,GAAG,IAAI,CAAC,sBAAsB,CAAC,QAAQ,CAAC,CAAC;QAC1D,IAAI,YAAY,EAAE,CAAC;YACjB,MAAM,MAAM,GAAG,IAAI,CAAC,UAAU,CAAC,YAAY,CAAC,CAAC;YAC7C,IAAI,CAAC,UAAU,CAAC,GAAG,CAAC,WAAW,EAAE;gBAC/B,QAAQ,EAAE,KAAK;gBACf,QAAQ,EAAE,IAAI;gBACd,GAAG,CAAC,OAAO,KAAK,SAAS;oBACvB,CAAC,CAAC;wBACE,QAAQ,EAAE,EAAE,CAAC,MAAM,CAAC,EAAE,OAAO,EAAE;wBAC/B,mBAAmB,EAAE,OAAO;qBAC7B;oBACH,CAAC,CAAC,EAAE,CAAC;aACR,CAAC,CAAC;YACH,OAAO;QACT,CAAC;QAED,MAAM,aAAa,GAAG,IAAI,CAAC,UAAU,CAAC,GAAG,CAAC,WAAW,CAAC,IAAI;YACxD,QAAQ,EAAE,EAAc;YACxB,QAAQ,EAAE,EAAc;SACzB,CAAC;QAEF,IAAI,KAAK,CAAC,OAAO,CAAC,aAAa,CAAC,QAAQ,CAAC,EAAE,CAAC;YAC1C,MAAM,MAAM,GAAG,IAAI,CAAC,UAAU,CAAC,YAAY,CAAC,CAAC;YAC7C,aAAa,CAAC,QAAQ,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC;YACpC,IAAI,OAAO,KAAK,SAAS,EAAE,CAAC;gBAC1B,aAAa,CAAC,QAAQ,GAAG,aAAa,CAAC,QAAQ,IAAI,EAAE,CAAC;gBACtD,aAAa,CAAC,QAAQ,CAAC,MAAM,CAAC,GAAG,OAAO,CAAC;YAC3C,CAAC;QACH,CAAC;QACD,IAAI,CAAC,UAAU,CAAC,GAAG,CAAC,WAAW,EAAE,aAAa,CAAC,CAAC;IAClD,CAAC;IAED;;;OAGG;IACH,kBAAkB,CAAC,SAAkB;QACnC,MAAM,IAAI,GAAG,IAAI,CAAC,iBAAiB,CAAC,IAAI,CAAC,WAAW,EAAE,CAAC,CAAC;QACxD,IAAI,CAAC,SAAS,GAAG,SAAS,CAAC;QAC3B,OAAO,IAAI,CAAC;IACd,CAAC;IAED;;;OAGG;IACH,qBAAqB;QACnB,MAAM,IAAI,GAAG,IAAI,CAAC,iBAAiB,CAAC,IAAI,CAAC,WAAW,EAAE,CAAC,CAAC;QACxD,IAAI,CAAC,SAAS,GAAG,SAAS,CAAC;QAC3B,OAAO,IAAI,CAAC;IACd,CAAC;IAED,MAAM;QACJ,MAAM,IAAI,GAAmB;YAC3B,OAAO,EAAE,IAAI,CAAC,OAAO;YACrB,KAAK,EAAE,IAAI,CAAC,KAAK;YACjB,SAAS,EAAE,MAAM,CAAC,WAAW,CAAC,IAAI,CAAC,UAAU,CAAC,OAAO,EAAE,CAAC;SACzD,CAAC;QACF,IAAI,OAAO,IAAI,CAAC,SAAS,KAAK,WAAW,EAAE,CAAC;YAC1C,IAAI,CAAC,SAAS,GAAG,IAAI,CAAC,SAAS,CAAC;QAClC,CAAC;QACD,OAAO,IAAI,CAAC;IACd,CAAC;IAED,mBAAmB,CAAC,QAAgB;QAClC,OAAO,6BAA6B,CAAC,QAAQ,CAAC;aAC3C,GAAG,CAAC,CAAC,SAAS,EAAE,EAAE,CAAC,IAAI,CAAC,UAAU,CAAC,GAAG,CAAC,SAAS,CAAC,CAAC;aAClD,MAAM,CAAC,CAAC,QAAQ,EAA8B,EAAE,CAAC,QAAQ,KAAK,SAAS,CAAC,CAAC;IAC9E,CAAC;IAED,sBAAsB,CAAC,QAAgB;QACrC,OAAO,CACL,6BAA6B,CAAC,QAAQ,CAAC,CAAC,IAAI,CAAC,CAAC,SAAS,EAAE,EAAE,CACzD,IAAI,CAAC,UAAU,CAAC,GAAG,CAAC,SAAS,CAAC,CAC/B,IAAI,QAAQ,CACd,CAAC;IACJ,CAAC;IAED,kBAAkB,CAAC,QAAgB,EAAE,QAAwB;QAC3D,MAAM,UAAU,GAAG,6BAA6B,CAAC,QAAQ,CAAC,CAAC;QAC3D,MAAM,eAAe,GAAG,UAAU;aAC/B,GAAG,CAAC,CAAC,SAAS,EAAE,EAAE,CAAC,IAAI,CAAC,UAAU,CAAC,GAAG,CAAC,SAAS,CAAC,CAAC;aAClD,MAAM,CAAC,CAAC,QAAQ,EAA8B,EAAE,CAAC,QAAQ,KAAK,SAAS,CAAC,CAAC;QAC5E,MAAM,cAAc,GAAG,eAAe,CAAC,MAAM,CAC3C,CAAC,OAAO,EAAE,QAAQ,EAAE,EAAE,CACpB,OAAO,CAAC,CAAC,CAAC,oBAAoB,CAAC,OAAO,EAAE,QAAQ,CAAC,CAAC,CAAC,CAAC,QAAQ,EAC9D,SAAS,CACV,CAAC;QACF,MAAM,MAAM,GAAG,cAAc;YAC3B,CAAC,CAAC,oBAAoB,CAAC,cAAc,EAAE,QAAQ,CAAC;YAChD,CAAC,CAAC,QAAQ,CAAC;QACb,MAAM,SAAS,GACb,UAAU,CAAC,IAAI,CAAC,CAAC,SAAS,EAAE,EAAE,CAAC,IAAI,CAAC,UAAU,CAAC,GAAG,CAAC,SAAS,CAAC,CAAC;YAC9D,QAAQ,CAAC;QAEX,IAAI,CAAC,UAAU,CAAC,GAAG,CAAC,SAAS,EAAE,MAAM,CAAC,CAAC;QACvC,KAAK,MAAM,SAAS,IAAI,UAAU,EAAE,CAAC;YACnC,IAAI,SAAS,KAAK,SAAS,EAAE,CAAC;gBAC5B,IAAI,CAAC,UAAU,CAAC,MAAM,CAAC,SAAS,CAAC,CAAC;YACpC,CAAC;QACH,CAAC;IACH,CAAC;CACF"}
|