























@@ -124,35 +124,53 @@ function wrapPluginToolCallbacks(entry: PluginToolRegistration, tool: AnyAgentTo
124124}
125125126126const prepareArguments = tool.prepareArguments;
127-const descriptors = Object.getOwnPropertyDescriptors(tool);
128-delete descriptors.execute;
129-delete descriptors.prepareArguments;
130-const wrapped = Object.create(Object.getPrototypeOf(tool)) as AnyAgentTool;
131-Object.defineProperties(wrapped, descriptors);
132-if (prepareArguments) {
133-Object.defineProperty(wrapped, "prepareArguments", {
134- configurable: true,
135- enumerable: Object.prototype.propertyIsEnumerable.call(tool, "prepareArguments"),
136- value(args: unknown) {
137- return runWithPluginToolScope(entry, () => Reflect.apply(prepareArguments, tool, [args]));
138-},
139-writable: true,
140-});
141-}
142-Object.defineProperty(wrapped, "execute", {
143-configurable: true,
144- enumerable: Object.prototype.propertyIsEnumerable.call(tool, "execute"),
145-value(toolCallId: string, params: unknown, signal?: AbortSignal, onUpdate?: unknown) {
146-return runWithPluginToolScope(
147-entry,
148- () =>
149- Reflect.apply(tool.execute, tool, [toolCallId, params, signal, onUpdate]) as ReturnType<
150- AnyAgentTool["execute"]
151- >,
152-);
127+const scopedPrepareArguments = prepareArguments
128+ ? (args: unknown) =>
129+ runWithPluginToolScope(entry, () => Reflect.apply(prepareArguments, tool, [args]))
130+ : undefined;
131+const scopedExecute = (
132+ toolCallId: string,
133+params: unknown,
134+signal?: AbortSignal,
135+onUpdate?: unknown,
136+) =>
137+runWithPluginToolScope(
138+entry,
139+() =>
140+ Reflect.apply(tool.execute, tool, [toolCallId, params, signal, onUpdate]) as ReturnType<
141+ AnyAgentTool["execute"]
142+ >,
143+);
144+const wrapped = new Proxy(tool, {
145+get(target, prop) {
146+if (prop === "prepareArguments" && scopedPrepareArguments) {
147+return scopedPrepareArguments;
148+}
149+if (prop === "execute") {
150+return scopedExecute;
151+}
152+return Reflect.get(target, prop, target);
153153},
154-writable: true,
155-});
154+getOwnPropertyDescriptor(target, prop) {
155+if (prop === "prepareArguments" && scopedPrepareArguments) {
156+return {
157+configurable: true,
158+enumerable: Object.prototype.propertyIsEnumerable.call(target, prop),
159+value: scopedPrepareArguments,
160+writable: true,
161+};
162+}
163+if (prop === "execute") {
164+return {
165+configurable: true,
166+enumerable: Object.prototype.propertyIsEnumerable.call(target, prop),
167+value: scopedExecute,
168+writable: true,
169+};
170+}
171+return Reflect.getOwnPropertyDescriptor(target, prop);
172+},
173+}) as AnyAgentTool;
156174157175copyPluginToolMeta(tool, wrapped);
158176const nextScopedByKey = scopedByKey ?? new Map<string, AnyAgentTool>();
此内容由惯性聚合(RSS阅读器)自动聚合整理,仅供阅读参考。 原文来自 — 版权归原作者所有。