import type { ActivationIdFactory, ConnectionInvocationId, NodeExecutionContext, NodeId, RunnableNodeConfig, TelemetrySpanScope, } from "../types"; export class ChildExecutionScopeFactory { constructor(private readonly activationIdFactory: ActivationIdFactory) {} forSubAgent>( args: Readonly<{ parentCtx: NodeExecutionContext; childNodeId: NodeId; childConfig: TConfig; parentInvocationId: ConnectionInvocationId; parentSpan: TelemetrySpanScope; }>, ): NodeExecutionContext { const childActivationId = this.activationIdFactory.makeActivationId(); const childTelemetry = args.parentSpan.asNodeTelemetry({ nodeId: args.childNodeId, activationId: childActivationId, }); const childBinary = args.parentCtx.binary.forNode({ nodeId: args.childNodeId, activationId: childActivationId, }); return { ...args.parentCtx, nodeId: args.childNodeId, activationId: childActivationId, config: args.childConfig, telemetry: childTelemetry, binary: childBinary, parentInvocationId: args.parentInvocationId, iterationId: undefined, }; } }