

























@@ -66,10 +66,22 @@ export type NodeEventHandleResult = {
6666reason?: string;
6767};
686869+type NodeAgentCommandInput = Parameters<typeof agentCommandFromIngress>[0];
70+6971function normalizeFiniteInteger(value: unknown): number | null {
7072return typeof value === "number" && Number.isFinite(value) ? Math.trunc(value) : null;
7173}
727475+function dispatchNodeAgentCommand(
76+ctx: NodeEventContext,
77+nodeId: string,
78+input: NodeAgentCommandInput,
79+): void {
80+void agentCommandFromIngress(input, defaultRuntime, ctx.deps).catch((err: unknown) => {
81+ctx.logGateway.warn(`agent failed node=${nodeId}: ${formatForLog(err)}`);
82+});
83+}
84+7385function resolveVoiceTranscriptFingerprint(obj: Record<string, unknown>, text: string): string {
7486const eventId =
7587normalizeOptionalString(obj.eventId) ??
@@ -413,26 +425,20 @@ export const handleNodeEvent = async (
413425clientRunId: `voice-${randomUUID()}`,
414426});
415427416-void agentCommandFromIngress(
417-{
418- runId,
419-message: text,
420- sessionId,
421-sessionKey: canonicalKey,
422-thinking: "low",
423-deliver: false,
424-messageChannel: "node",
425-inputProvenance: {
426-kind: "external_user",
427-sourceChannel: "voice",
428-sourceTool: "gateway.voice.transcript",
429-},
430-allowModelOverride: false,
428+dispatchNodeAgentCommand(ctx, nodeId, {
429+ runId,
430+message: text,
431+ sessionId,
432+sessionKey: canonicalKey,
433+thinking: "low",
434+deliver: false,
435+messageChannel: "node",
436+inputProvenance: {
437+kind: "external_user",
438+sourceChannel: "voice",
439+sourceTool: "gateway.voice.transcript",
431440},
432-defaultRuntime,
433-ctx.deps,
434-).catch((err: unknown) => {
435-ctx.logGateway.warn(`agent failed node=${nodeId}: ${formatForLog(err)}`);
441+allowModelOverride: false,
436442});
437443return undefined;
438444}
@@ -583,27 +589,21 @@ export const handleNodeEvent = async (
583589);
584590}
585591586-void agentCommandFromIngress(
587-{
588-runId: sessionId,
589- message,
590- images,
591- imageOrder,
592- sessionId,
593-sessionKey: canonicalKey,
594-thinking: link?.thinking ?? undefined,
595- deliver,
596-to: deliveryTo,
597-channel: deliveryChannel,
598-timeout:
599-typeof link?.timeoutSeconds === "number" ? link.timeoutSeconds.toString() : undefined,
600-messageChannel: "node",
601-allowModelOverride: false,
602-},
603-defaultRuntime,
604-ctx.deps,
605-).catch((err: unknown) => {
606-ctx.logGateway.warn(`agent failed node=${nodeId}: ${formatForLog(err)}`);
592+dispatchNodeAgentCommand(ctx, nodeId, {
593+runId: sessionId,
594+ message,
595+ images,
596+ imageOrder,
597+ sessionId,
598+sessionKey: canonicalKey,
599+thinking: link?.thinking ?? undefined,
600+ deliver,
601+to: deliveryTo,
602+channel: deliveryChannel,
603+timeout:
604+typeof link?.timeoutSeconds === "number" ? link.timeoutSeconds.toString() : undefined,
605+messageChannel: "node",
606+allowModelOverride: false,
607607});
608608return undefined;
609609}
此内容由惯性聚合(RSS阅读器)自动聚合整理,仅供阅读参考。 原文来自 — 版权归原作者所有。