@openai/agents-core 0.5.4 → 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.js +116 -67
- package/dist/runContext.js.map +1 -1
- package/dist/runContext.mjs +116 -67
- package/dist/runContext.mjs.map +1 -1
- package/dist/runState.d.ts +493 -17
- package/dist/runState.js +303 -12
- package/dist/runState.js.map +1 -1
- package/dist/runState.mjs +304 -13
- package/dist/runState.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 +102 -67
- package/dist/runner/toolExecution.js.map +1 -1
- package/dist/runner/toolExecution.mjs +102 -67
- 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.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,54 +124,8 @@ 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
|
-
const mergeMessages = (current, incoming) => {
|
|
77
|
-
if (current.rejected === true) {
|
|
78
|
-
return current.messages;
|
|
79
|
-
}
|
|
80
|
-
const merged = current.messages || incoming.messages
|
|
81
|
-
? { ...incoming.messages, ...current.messages }
|
|
82
|
-
: undefined;
|
|
83
|
-
if (!merged) {
|
|
84
|
-
return undefined;
|
|
85
|
-
}
|
|
86
|
-
if (Array.isArray(current.rejected)) {
|
|
87
|
-
for (const callId of current.rejected) {
|
|
88
|
-
if (!current.messages ||
|
|
89
|
-
!Object.prototype.hasOwnProperty.call(current.messages, callId)) {
|
|
90
|
-
delete merged[callId];
|
|
91
|
-
}
|
|
92
|
-
}
|
|
93
|
-
}
|
|
94
|
-
return Object.keys(merged).length > 0 ? merged : undefined;
|
|
95
|
-
};
|
|
96
|
-
const mergeStickyRejectMessage = (current, incoming) => {
|
|
97
|
-
if (current.rejected === true) {
|
|
98
|
-
return current.stickyRejectMessage;
|
|
99
|
-
}
|
|
100
|
-
return current.stickyRejectMessage ?? incoming.stickyRejectMessage;
|
|
101
|
-
};
|
|
102
127
|
for (const [toolName, incoming] of Object.entries(approvals)) {
|
|
103
|
-
|
|
104
|
-
if (!existing) {
|
|
105
|
-
this.#approvals.set(toolName, incoming);
|
|
106
|
-
continue;
|
|
107
|
-
}
|
|
108
|
-
const mergedMessages = mergeMessages(existing, incoming);
|
|
109
|
-
const stickyRejectMessage = mergeStickyRejectMessage(existing, incoming);
|
|
110
|
-
this.#approvals.set(toolName, {
|
|
111
|
-
approved: mergeApproval(existing.approved, incoming.approved),
|
|
112
|
-
rejected: mergeApproval(existing.rejected, incoming.rejected),
|
|
113
|
-
...(mergedMessages ? { messages: mergedMessages } : {}),
|
|
114
|
-
...(stickyRejectMessage !== undefined ? { stickyRejectMessage } : {}),
|
|
115
|
-
});
|
|
128
|
+
this.#setApprovalRecord(toolName, incoming);
|
|
116
129
|
}
|
|
117
130
|
}
|
|
118
131
|
/**
|
|
@@ -123,11 +136,17 @@ class RunContext {
|
|
|
123
136
|
* @returns The message string if one was provided, `undefined` otherwise.
|
|
124
137
|
*/
|
|
125
138
|
getRejectionMessage(toolName, callId) {
|
|
126
|
-
const approvalEntry
|
|
127
|
-
|
|
128
|
-
|
|
129
|
-
|
|
130
|
-
|
|
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;
|
|
147
|
+
}
|
|
148
|
+
}
|
|
149
|
+
return undefined;
|
|
131
150
|
}
|
|
132
151
|
#getCallId(approvalItem) {
|
|
133
152
|
if ('callId' in approvalItem.rawItem) {
|
|
@@ -144,23 +163,25 @@ class RunContext {
|
|
|
144
163
|
*/
|
|
145
164
|
isToolApproved(approval) {
|
|
146
165
|
const { toolName, callId } = approval;
|
|
147
|
-
const
|
|
148
|
-
|
|
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) {
|
|
149
170
|
logger_1.default.warn('Tool is permanently approved and rejected at the same time. Approval takes precedence');
|
|
150
171
|
return true;
|
|
151
172
|
}
|
|
152
|
-
if (
|
|
173
|
+
if (hasPermanentApproval) {
|
|
153
174
|
return true;
|
|
154
175
|
}
|
|
155
|
-
if (
|
|
176
|
+
if (hasPermanentRejection) {
|
|
156
177
|
return false;
|
|
157
178
|
}
|
|
158
|
-
const individualCallApproval = Array.isArray(approvalEntry
|
|
179
|
+
const individualCallApproval = approvalEntries.some((approvalEntry) => Array.isArray(approvalEntry.approved)
|
|
159
180
|
? approvalEntry.approved.includes(callId)
|
|
160
|
-
: false;
|
|
161
|
-
const individualCallRejection = Array.isArray(approvalEntry
|
|
181
|
+
: false);
|
|
182
|
+
const individualCallRejection = approvalEntries.some((approvalEntry) => Array.isArray(approvalEntry.rejected)
|
|
162
183
|
? approvalEntry.rejected.includes(callId)
|
|
163
|
-
: false;
|
|
184
|
+
: false);
|
|
164
185
|
if (individualCallApproval && individualCallRejection) {
|
|
165
186
|
logger_1.default.warn(`Tool call ${callId} is both approved and rejected at the same time. Approval takes precedence`);
|
|
166
187
|
return true;
|
|
@@ -181,21 +202,22 @@ class RunContext {
|
|
|
181
202
|
*/
|
|
182
203
|
approveTool(approvalItem, { alwaysApprove = false } = {}) {
|
|
183
204
|
const toolName = approvalItem.toolName ?? approvalItem.rawItem.name;
|
|
205
|
+
const approvalKey = this.#getApprovalStorageKey(toolName);
|
|
184
206
|
if (alwaysApprove) {
|
|
185
|
-
this.#approvals.set(
|
|
207
|
+
this.#approvals.set(approvalKey, {
|
|
186
208
|
approved: true,
|
|
187
209
|
rejected: [],
|
|
188
210
|
});
|
|
189
211
|
return;
|
|
190
212
|
}
|
|
191
|
-
const approvalEntry = this.#approvals.get(
|
|
213
|
+
const approvalEntry = this.#approvals.get(approvalKey) ?? {
|
|
192
214
|
approved: [],
|
|
193
215
|
rejected: [],
|
|
194
216
|
};
|
|
195
217
|
if (Array.isArray(approvalEntry.approved)) {
|
|
196
218
|
approvalEntry.approved.push(this.#getCallId(approvalItem));
|
|
197
219
|
}
|
|
198
|
-
this.#approvals.set(
|
|
220
|
+
this.#approvals.set(approvalKey, approvalEntry);
|
|
199
221
|
}
|
|
200
222
|
/**
|
|
201
223
|
* Reject a tool call.
|
|
@@ -204,9 +226,10 @@ class RunContext {
|
|
|
204
226
|
*/
|
|
205
227
|
rejectTool(approvalItem, { alwaysReject = false, message, } = {}) {
|
|
206
228
|
const toolName = approvalItem.toolName ?? approvalItem.rawItem.name;
|
|
229
|
+
const approvalKey = this.#getApprovalStorageKey(toolName);
|
|
207
230
|
if (alwaysReject) {
|
|
208
231
|
const callId = this.#getCallId(approvalItem);
|
|
209
|
-
this.#approvals.set(
|
|
232
|
+
this.#approvals.set(approvalKey, {
|
|
210
233
|
approved: false,
|
|
211
234
|
rejected: true,
|
|
212
235
|
...(message !== undefined
|
|
@@ -218,7 +241,7 @@ class RunContext {
|
|
|
218
241
|
});
|
|
219
242
|
return;
|
|
220
243
|
}
|
|
221
|
-
const approvalEntry = this.#approvals.get(
|
|
244
|
+
const approvalEntry = this.#approvals.get(approvalKey) ?? {
|
|
222
245
|
approved: [],
|
|
223
246
|
rejected: [],
|
|
224
247
|
};
|
|
@@ -230,7 +253,7 @@ class RunContext {
|
|
|
230
253
|
approvalEntry.messages[callId] = message;
|
|
231
254
|
}
|
|
232
255
|
}
|
|
233
|
-
this.#approvals.set(
|
|
256
|
+
this.#approvals.set(approvalKey, approvalEntry);
|
|
234
257
|
}
|
|
235
258
|
/**
|
|
236
259
|
* Creates a child context that shares approvals and usage, with tool input set.
|
|
@@ -261,6 +284,32 @@ class RunContext {
|
|
|
261
284
|
}
|
|
262
285
|
return json;
|
|
263
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
|
+
}
|
|
264
313
|
}
|
|
265
314
|
exports.RunContext = RunContext;
|
|
266
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,54 +118,8 @@ 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
|
-
const mergeMessages = (current, incoming) => {
|
|
71
|
-
if (current.rejected === true) {
|
|
72
|
-
return current.messages;
|
|
73
|
-
}
|
|
74
|
-
const merged = current.messages || incoming.messages
|
|
75
|
-
? { ...incoming.messages, ...current.messages }
|
|
76
|
-
: undefined;
|
|
77
|
-
if (!merged) {
|
|
78
|
-
return undefined;
|
|
79
|
-
}
|
|
80
|
-
if (Array.isArray(current.rejected)) {
|
|
81
|
-
for (const callId of current.rejected) {
|
|
82
|
-
if (!current.messages ||
|
|
83
|
-
!Object.prototype.hasOwnProperty.call(current.messages, callId)) {
|
|
84
|
-
delete merged[callId];
|
|
85
|
-
}
|
|
86
|
-
}
|
|
87
|
-
}
|
|
88
|
-
return Object.keys(merged).length > 0 ? merged : undefined;
|
|
89
|
-
};
|
|
90
|
-
const mergeStickyRejectMessage = (current, incoming) => {
|
|
91
|
-
if (current.rejected === true) {
|
|
92
|
-
return current.stickyRejectMessage;
|
|
93
|
-
}
|
|
94
|
-
return current.stickyRejectMessage ?? incoming.stickyRejectMessage;
|
|
95
|
-
};
|
|
96
121
|
for (const [toolName, incoming] of Object.entries(approvals)) {
|
|
97
|
-
|
|
98
|
-
if (!existing) {
|
|
99
|
-
this.#approvals.set(toolName, incoming);
|
|
100
|
-
continue;
|
|
101
|
-
}
|
|
102
|
-
const mergedMessages = mergeMessages(existing, incoming);
|
|
103
|
-
const stickyRejectMessage = mergeStickyRejectMessage(existing, incoming);
|
|
104
|
-
this.#approvals.set(toolName, {
|
|
105
|
-
approved: mergeApproval(existing.approved, incoming.approved),
|
|
106
|
-
rejected: mergeApproval(existing.rejected, incoming.rejected),
|
|
107
|
-
...(mergedMessages ? { messages: mergedMessages } : {}),
|
|
108
|
-
...(stickyRejectMessage !== undefined ? { stickyRejectMessage } : {}),
|
|
109
|
-
});
|
|
122
|
+
this.#setApprovalRecord(toolName, incoming);
|
|
110
123
|
}
|
|
111
124
|
}
|
|
112
125
|
/**
|
|
@@ -117,11 +130,17 @@ export class RunContext {
|
|
|
117
130
|
* @returns The message string if one was provided, `undefined` otherwise.
|
|
118
131
|
*/
|
|
119
132
|
getRejectionMessage(toolName, callId) {
|
|
120
|
-
const approvalEntry
|
|
121
|
-
|
|
122
|
-
|
|
123
|
-
|
|
124
|
-
|
|
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;
|
|
141
|
+
}
|
|
142
|
+
}
|
|
143
|
+
return undefined;
|
|
125
144
|
}
|
|
126
145
|
#getCallId(approvalItem) {
|
|
127
146
|
if ('callId' in approvalItem.rawItem) {
|
|
@@ -138,23 +157,25 @@ export class RunContext {
|
|
|
138
157
|
*/
|
|
139
158
|
isToolApproved(approval) {
|
|
140
159
|
const { toolName, callId } = approval;
|
|
141
|
-
const
|
|
142
|
-
|
|
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) {
|
|
143
164
|
logger.warn('Tool is permanently approved and rejected at the same time. Approval takes precedence');
|
|
144
165
|
return true;
|
|
145
166
|
}
|
|
146
|
-
if (
|
|
167
|
+
if (hasPermanentApproval) {
|
|
147
168
|
return true;
|
|
148
169
|
}
|
|
149
|
-
if (
|
|
170
|
+
if (hasPermanentRejection) {
|
|
150
171
|
return false;
|
|
151
172
|
}
|
|
152
|
-
const individualCallApproval = Array.isArray(approvalEntry
|
|
173
|
+
const individualCallApproval = approvalEntries.some((approvalEntry) => Array.isArray(approvalEntry.approved)
|
|
153
174
|
? approvalEntry.approved.includes(callId)
|
|
154
|
-
: false;
|
|
155
|
-
const individualCallRejection = Array.isArray(approvalEntry
|
|
175
|
+
: false);
|
|
176
|
+
const individualCallRejection = approvalEntries.some((approvalEntry) => Array.isArray(approvalEntry.rejected)
|
|
156
177
|
? approvalEntry.rejected.includes(callId)
|
|
157
|
-
: false;
|
|
178
|
+
: false);
|
|
158
179
|
if (individualCallApproval && individualCallRejection) {
|
|
159
180
|
logger.warn(`Tool call ${callId} is both approved and rejected at the same time. Approval takes precedence`);
|
|
160
181
|
return true;
|
|
@@ -175,21 +196,22 @@ export class RunContext {
|
|
|
175
196
|
*/
|
|
176
197
|
approveTool(approvalItem, { alwaysApprove = false } = {}) {
|
|
177
198
|
const toolName = approvalItem.toolName ?? approvalItem.rawItem.name;
|
|
199
|
+
const approvalKey = this.#getApprovalStorageKey(toolName);
|
|
178
200
|
if (alwaysApprove) {
|
|
179
|
-
this.#approvals.set(
|
|
201
|
+
this.#approvals.set(approvalKey, {
|
|
180
202
|
approved: true,
|
|
181
203
|
rejected: [],
|
|
182
204
|
});
|
|
183
205
|
return;
|
|
184
206
|
}
|
|
185
|
-
const approvalEntry = this.#approvals.get(
|
|
207
|
+
const approvalEntry = this.#approvals.get(approvalKey) ?? {
|
|
186
208
|
approved: [],
|
|
187
209
|
rejected: [],
|
|
188
210
|
};
|
|
189
211
|
if (Array.isArray(approvalEntry.approved)) {
|
|
190
212
|
approvalEntry.approved.push(this.#getCallId(approvalItem));
|
|
191
213
|
}
|
|
192
|
-
this.#approvals.set(
|
|
214
|
+
this.#approvals.set(approvalKey, approvalEntry);
|
|
193
215
|
}
|
|
194
216
|
/**
|
|
195
217
|
* Reject a tool call.
|
|
@@ -198,9 +220,10 @@ export class RunContext {
|
|
|
198
220
|
*/
|
|
199
221
|
rejectTool(approvalItem, { alwaysReject = false, message, } = {}) {
|
|
200
222
|
const toolName = approvalItem.toolName ?? approvalItem.rawItem.name;
|
|
223
|
+
const approvalKey = this.#getApprovalStorageKey(toolName);
|
|
201
224
|
if (alwaysReject) {
|
|
202
225
|
const callId = this.#getCallId(approvalItem);
|
|
203
|
-
this.#approvals.set(
|
|
226
|
+
this.#approvals.set(approvalKey, {
|
|
204
227
|
approved: false,
|
|
205
228
|
rejected: true,
|
|
206
229
|
...(message !== undefined
|
|
@@ -212,7 +235,7 @@ export class RunContext {
|
|
|
212
235
|
});
|
|
213
236
|
return;
|
|
214
237
|
}
|
|
215
|
-
const approvalEntry = this.#approvals.get(
|
|
238
|
+
const approvalEntry = this.#approvals.get(approvalKey) ?? {
|
|
216
239
|
approved: [],
|
|
217
240
|
rejected: [],
|
|
218
241
|
};
|
|
@@ -224,7 +247,7 @@ export class RunContext {
|
|
|
224
247
|
approvalEntry.messages[callId] = message;
|
|
225
248
|
}
|
|
226
249
|
}
|
|
227
|
-
this.#approvals.set(
|
|
250
|
+
this.#approvals.set(approvalKey, approvalEntry);
|
|
228
251
|
}
|
|
229
252
|
/**
|
|
230
253
|
* Creates a child context that shares approvals and usage, with tool input set.
|
|
@@ -255,5 +278,31 @@ export class RunContext {
|
|
|
255
278
|
}
|
|
256
279
|
return json;
|
|
257
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
|
+
}
|
|
258
307
|
}
|
|
259
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":"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"}
|