
























@@ -299,12 +299,43 @@ function emitTrackedItemEvent(ctx: ToolHandlerContext, itemData: AgentItemEventD
299299 ...(ctx.params.sessionKey ? { sessionKey: ctx.params.sessionKey } : {}),
300300data: itemData,
301301});
302-void ctx.params.onAgentEvent?.({
302+emitAgentEventCallbackBestEffort(ctx, {
303303stream: "item",
304304data: itemData,
305305});
306306}
307307308+function warnBestEffortEventFailure(ctx: ToolHandlerContext, label: string, error: unknown): void {
309+ctx.log.warn(`${label} callback failed: ${String(error)}`);
310+}
311+312+function emitExecutionPhaseBestEffort(
313+ctx: ToolHandlerContext,
314+info: Parameters<NonNullable<ToolHandlerContext["params"]["onExecutionPhase"]>>[0],
315+): void {
316+try {
317+ctx.params.onExecutionPhase?.(info);
318+} catch (error) {
319+warnBestEffortEventFailure(ctx, "tool execution phase", error);
320+}
321+}
322+323+function emitAgentEventCallbackBestEffort(
324+ctx: ToolHandlerContext,
325+event: Parameters<NonNullable<ToolHandlerContext["params"]["onAgentEvent"]>>[0],
326+): void {
327+try {
328+const result = ctx.params.onAgentEvent?.(event);
329+if (isPromiseLike<void>(result)) {
330+void Promise.resolve(result).catch((error: unknown) => {
331+warnBestEffortEventFailure(ctx, "tool agent event", error);
332+});
333+}
334+} catch (error) {
335+warnBestEffortEventFailure(ctx, "tool agent event", error);
336+}
337+}
338+308339function readToolResultDetailsRecord(result: unknown): Record<string, unknown> | undefined {
309340return readRecordField(asOptionalObjectRecord(result)?.details);
310341}
@@ -780,7 +811,7 @@ export function handleToolExecutionStart(
780811const args = evt.args;
781812const runId = ctx.params.runId;
782813ctx.state.toolExecutionSinceLastBlockReply = true;
783-ctx.params.onExecutionPhase?.({
814+emitExecutionPhaseBestEffort(ctx, {
784815phase: "tool_execution_started",
785816tool: toolName,
786817 toolCallId,
@@ -898,7 +929,7 @@ export function handleToolExecutionStart(
898929};
899930emitTrackedItemEvent(ctx, itemData);
900931// Best-effort typing signal; do not block tool summaries on slow emitters.
901-void ctx.params.onAgentEvent?.({
932+emitAgentEventCallbackBestEffort(ctx, {
902933stream: "tool",
903934data: {
904935phase: "start",
@@ -1037,7 +1068,7 @@ export function handleToolExecutionUpdate(
10371068};
10381069emitTrackedItemEvent(ctx, itemData);
10391070if (!toolProgress) {
1040-void ctx.params.onAgentEvent?.({
1071+emitAgentEventCallbackBestEffort(ctx, {
10411072stream: "tool",
10421073data: {
10431074phase: "update",
@@ -1075,7 +1106,7 @@ export function handleToolExecutionUpdate(
10751106 ...(ctx.params.sessionKey ? { sessionKey: ctx.params.sessionKey } : {}),
10761107data: outputData,
10771108});
1078-void ctx.params.onAgentEvent?.({
1109+emitAgentEventCallbackBestEffort(ctx, {
10791110stream: "command_output",
10801111data: outputData,
10811112});
@@ -1322,7 +1353,7 @@ export async function handleToolExecutionEnd(
13221353 : {}),
13231354};
13241355emitTrackedItemEvent(ctx, itemData);
1325-void ctx.params.onAgentEvent?.({
1356+emitAgentEventCallbackBestEffort(ctx, {
13261357stream: "tool",
13271358data: {
13281359phase: "result",
@@ -1368,7 +1399,7 @@ export async function handleToolExecutionEnd(
13681399 ...(ctx.params.sessionKey ? { sessionKey: ctx.params.sessionKey } : {}),
13691400data: approvalData,
13701401});
1371-void ctx.params.onAgentEvent?.({
1402+emitAgentEventCallbackBestEffort(ctx, {
13721403stream: "approval",
13731404data: approvalData,
13741405});
@@ -1435,7 +1466,7 @@ export async function handleToolExecutionEnd(
14351466 ...(ctx.params.sessionKey ? { sessionKey: ctx.params.sessionKey } : {}),
14361467data: outputData,
14371468});
1438-void ctx.params.onAgentEvent?.({
1469+emitAgentEventCallbackBestEffort(ctx, {
14391470stream: "command_output",
14401471data: outputData,
14411472});
@@ -1461,7 +1492,7 @@ export async function handleToolExecutionEnd(
14611492 ...(ctx.params.sessionKey ? { sessionKey: ctx.params.sessionKey } : {}),
14621493data: approvalData,
14631494});
1464-void ctx.params.onAgentEvent?.({
1495+emitAgentEventCallbackBestEffort(ctx, {
14651496stream: "approval",
14661497data: approvalData,
14671498});
@@ -1507,7 +1538,7 @@ export async function handleToolExecutionEnd(
15071538 ...(ctx.params.sessionKey ? { sessionKey: ctx.params.sessionKey } : {}),
15081539data: patchData,
15091540});
1510-void ctx.params.onAgentEvent?.({
1541+emitAgentEventCallbackBestEffort(ctx, {
15111542stream: "patch",
15121543data: patchData,
15131544});
此内容由惯性聚合(RSS阅读器)自动聚合整理,仅供阅读参考。 原文来自 — 版权归原作者所有。