Skip to content

Commit 2225aea

Browse files
committed
refactor(runtime-host): name the forwarding rule, not the durability class
isRuntimeSessionForwardedEvent / RuntimeSessionForwardedEvent describe what the predicate decides — forward live to subscribers — now that the durable steering_message belongs to it. Rename the client projectSessionEvent to match its Host-side counterpart. Addresses review on #3316.
1 parent 18e2905 commit 2225aea

3 files changed

Lines changed: 15 additions & 11 deletions

File tree

packages/runtime-host/src/adapter/session-projector.ts

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -328,7 +328,7 @@ export class RuntimeHostSessionProjector {
328328
return emptyUpdate(events);
329329
}
330330
if (frame.kind === 'subscription.session_event') {
331-
const event = projectToolEvent(frame);
331+
const event = projectSessionEvent(frame);
332332
if (event) {
333333
if (event.type === 'steering_message') {
334334
if (this.#renderedSteeringMessageIds.has(event.messageId)) {
@@ -476,7 +476,7 @@ export function projectRuntimeHostInteractionRequest(
476476
return [];
477477
}
478478

479-
function projectToolEvent(
479+
function projectSessionEvent(
480480
frame: Extract<SubscriptionFrame, { kind: 'subscription.session_event' }>,
481481
): SessionEvent | undefined {
482482
const event = frame.event;

packages/runtime-host/src/server/root-turn-coordinator.ts

Lines changed: 8 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -73,7 +73,7 @@ import type { ConnectionContext, TurnOperationHandlerMap } from './operation-dis
7373
import { RootAdmissionOwner } from './root-admission-owner.js';
7474
import { type SessionAdmissionLease, SessionAdmissionGate } from './session-admission-gate.js';
7575
import {
76-
type RuntimeSessionTransientEvent,
76+
type RuntimeSessionForwardedEvent,
7777
SessionContinuityCoordinator,
7878
} from './session-continuity-coordinator.js';
7979
import type {
@@ -2096,7 +2096,7 @@ export class RootTurnCoordinator implements HostedExecutionAuthority {
20962096
// Presentation observers do not participate in execution authority.
20972097
}
20982098
}
2099-
if (isRuntimeSessionTransientEvent(event)) {
2099+
if (isRuntimeSessionForwardedEvent(event)) {
21002100
await this.continuity.acceptRuntimeEvent(input.sessionId, active.runId, event);
21012101
} else if (isInteractionAnswerAck(event)) {
21022102
await this.continuity.refreshCanonical(input.sessionId);
@@ -2774,9 +2774,13 @@ function isStoppedInteractionAdmission(
27742774
);
27752775
}
27762776

2777-
function isRuntimeSessionTransientEvent(
2777+
// Membership answers one question: forward this event live to subscribers via
2778+
// the continuity coordinator instead of letting the canonical refresh carry
2779+
// it. Persistence is orthogonal — it happens upstream in the run's own event
2780+
// stream, which is why the durable steering_message belongs here.
2781+
function isRuntimeSessionForwardedEvent(
27782782
event: SessionEvent,
2779-
): event is RuntimeSessionTransientEvent {
2783+
): event is RuntimeSessionForwardedEvent {
27802784
return (
27812785
event.type === 'text_delta' ||
27822786
event.type === 'text_complete' ||

packages/runtime-host/src/server/session-continuity-coordinator.ts

Lines changed: 5 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -61,7 +61,7 @@ const MAX_SUBSCRIBER_QUEUED_BYTES = 256 * 1024;
6161

6262
export type { CanonicalSessionProjection } from './canonical-session-projection.js';
6363

64-
export type RuntimeSessionTransientEvent = Extract<
64+
export type RuntimeSessionForwardedEvent = Extract<
6565
SessionEvent,
6666
{
6767
type:
@@ -96,7 +96,7 @@ interface SessionProjectionState {
9696
*/
9797
toolResultPreviews: Map<
9898
string,
99-
Extract<RuntimeSessionTransientEvent, { type: 'tool_result_preview' }>
99+
Extract<RuntimeSessionForwardedEvent, { type: 'tool_result_preview' }>
100100
>;
101101
terminalPublicationFence?: TerminalPublicationFence;
102102
}
@@ -599,7 +599,7 @@ export class SessionContinuityCoordinator implements SessionContinuityService {
599599
async acceptRuntimeEvent(
600600
sessionId: string,
601601
runId: string,
602-
event: RuntimeSessionTransientEvent,
602+
event: RuntimeSessionForwardedEvent,
603603
): Promise<void> {
604604
if (
605605
(event.type === 'text_delta' || event.type === 'thinking_delta') &&
@@ -1397,7 +1397,7 @@ export class SessionContinuityCoordinator implements SessionContinuityService {
13971397
subscriber: Subscriber,
13981398
sessionId: string,
13991399
runId: string,
1400-
event: Extract<RuntimeSessionTransientEvent, { type: 'text_delta' | 'thinking_delta' }>,
1400+
event: Extract<RuntimeSessionForwardedEvent, { type: 'text_delta' | 'thinking_delta' }>,
14011401
kind: SessionAssistantDelta['kind'],
14021402
startOffset: number,
14031403
): void {
@@ -1841,7 +1841,7 @@ function jsonStringContentBytes(value: string): number {
18411841

18421842
function projectSessionEvent(
18431843
event: Exclude<
1844-
RuntimeSessionTransientEvent,
1844+
RuntimeSessionForwardedEvent,
18451845
{
18461846
type:
18471847
| 'text_delta'

0 commit comments

Comments
 (0)