@@ -16,6 +16,7 @@ import type { IDaemonPaths } from '@rushstack/rush-daemon-transport';
1616import type { IDaemonPhasedRequest } from ' @rushstack/rush-daemon-protocol' ;
1717import type { IDaemonPhasedRequestResult } from ' @rushstack/rush-daemon-protocol' ;
1818import type { IDaemonRequestAdmissionOptions } from ' @rushstack/rush-daemon-protocol' ;
19+ import type { IDaemonRequestEnvelope } from ' @rushstack/rush-daemon-protocol' ;
1920import type { IDaemonRequestQueuePositionMessage } from ' @rushstack/rush-daemon-protocol' ;
2021import type { IDaemonSetRawModeMessage } from ' @rushstack/rush-daemon-protocol' ;
2122import type { IDaemonTerminalPolicyResult } from ' @rushstack/rush-daemon-protocol' ;
@@ -33,6 +34,25 @@ export type CreateWorkspaceEngineComponentsAsync = (options: ICreateWorkspaceEng
3334// @beta
3435export type CreateWorkspaceSessionComponentsAsync = (options : ICreateWorkspaceSessionComponentsOptions ) => Promise <IWorkspaceSessionComponents >;
3536
37+ // @beta
38+ export class DaemonRequestDispatcher implements AsyncDisposable {
39+ // (undocumented)
40+ [Symbol .asyncDispose ](): Promise <void >;
41+ constructor (workspaceSession : IWorkspaceSession , resolver ? : IDaemonRequestResolver );
42+ // (undocumented)
43+ dispatchAsync(envelope : IDaemonRequestEnvelope , client : IDaemonRequestDispatchClient ): Promise <void >;
44+ }
45+
46+ // @beta
47+ export class DaemonRequestDispatchError extends Error {
48+ constructor (code : DaemonRequestDispatchErrorCode , message : string , options ? : ErrorOptions );
49+ // (undocumented)
50+ readonly code: DaemonRequestDispatchErrorCode ;
51+ }
52+
53+ // @beta
54+ export type DaemonRequestDispatchErrorCode = ' invalidRequest' | ' routingFailed' | ' unsupported' ;
55+
3656// @beta
3757export class DaemonRequiresInProcessError extends Error {
3858 constructor (policy : IDaemonTerminalPolicyResult );
@@ -100,6 +120,40 @@ export interface IDaemonInteractiveRequestOptions {
100120 readonly requestId: string ;
101121}
102122
123+ // @beta
124+ export interface IDaemonRequestDispatchClient {
125+ // (undocumented)
126+ readonly abortSignal: AbortSignal ;
127+ // (undocumented)
128+ getNextEventSequence(): number ;
129+ // (undocumented)
130+ readonly interactiveSession: IInteractiveRequestSession ;
131+ // (undocumented)
132+ readonly sessionId: string ;
133+ // (undocumented)
134+ readonly supportsRequestAdmission: boolean ;
135+ // (undocumented)
136+ writeEventAsync(event : IDaemonEventEnvelope ): Promise <void >;
137+ // (undocumented)
138+ writeLogChunkAsync(operationId : string , stream : ' stdout' | ' stderr' , chunk : Uint8Array ): Promise <void >;
139+ // (undocumented)
140+ writeQueuePositionAsync(message : IDaemonRequestQueuePositionMessage ): Promise <void >;
141+ // (undocumented)
142+ writeResultAsync(result : IDaemonCommandResult | IDaemonPhasedRequestResult ): Promise <void >;
143+ // (undocumented)
144+ writeTerminalChunkAsync(stream : ' stdout' | ' stderr' , chunk : Uint8Array ): Promise <void >;
145+ // (undocumented)
146+ writeTerminalPolicyAsync(result : IDaemonTerminalPolicyResult ): Promise <void >;
147+ }
148+
149+ // @beta
150+ export interface IDaemonRequestResolver {
151+ // (undocumented)
152+ readonly [Symbol .asyncDispose ]? : () => Promise <void >;
153+ // (undocumented)
154+ resolveRequestAsync(options : IResolveDaemonRequestOptions ): Promise <ResolvedDaemonRequest >;
155+ }
156+
103157// @beta
104158export interface IGlobalCommandEnvironment {
105159 // (undocumented)
@@ -236,10 +290,12 @@ export class InteractiveInputRoutingError extends Error {
236290}
237291
238292// @beta
239- export type InteractiveInputRoutingErrorCode = ' duplicateRequest' | ' unknownRequest' | ' completedRequest' | ' nonInteractiveRequest' ;
293+ export type InteractiveInputRoutingErrorCode = ' duplicateRequest' | ' unknownRequest' | ' completedRequest' | ' nonInteractiveRequest' | ' requestLimitExceeded ' ;
240294
241295// @beta
242296export class InteractiveRequestInputRouter {
297+ // @internal
298+ markRequestCompleted(requestId : string ): void ;
243299 // (undocumented)
244300 register(options : IInteractiveRequestRegistrationOptions ): IInteractiveRequestSession ;
245301 // (undocumented)
@@ -278,6 +334,31 @@ export interface IRequestSchedulerAcquireOptions {
278334 waitTimeoutMs? : number ;
279335}
280336
337+ // @beta
338+ export interface IResolveDaemonRequestOptions {
339+ readonly abortSignal: AbortSignal ;
340+ // (undocumented)
341+ readonly envelope: IDaemonRequestEnvelope ;
342+ // (undocumented)
343+ readonly workspaceSession: IWorkspaceSession ;
344+ }
345+
346+ // @beta
347+ export interface IResolvedDaemonGlobalRequest {
348+ // (undocumented)
349+ readonly executor: GlobalCommandExecutor ;
350+ // (undocumented)
351+ readonly kind: ' global' ;
352+ }
353+
354+ // @beta
355+ export interface IResolvedDaemonPhasedRequest {
356+ // (undocumented)
357+ readonly kind: ' phased' ;
358+ // (undocumented)
359+ readonly request: IDaemonPhasedRequest ;
360+ }
361+
281362// @beta
282363export interface IResolvedGlobalCommandRequest {
283364 // (undocumented)
@@ -321,6 +402,7 @@ export interface IRushDaemonHostOptions {
321402 readonly onError? : (error : Error ) => void ;
322403 readonly onInteractiveConnection? : (connection : IDaemonInteractiveConnection ) => void ;
323404 readonly repoRoot: string ;
405+ readonly requestResolver? : IDaemonRequestResolver ;
324406 readonly rushVersion: string ;
325407 readonly startupOptions? : Readonly <Record <string , unknown >>;
326408}
@@ -497,6 +579,9 @@ export enum RequestSchedulerErrorCode {
497579 WaitTimeout = " WAIT_TIMEOUT"
498580}
499581
582+ // @beta
583+ export type ResolvedDaemonRequest = IResolvedDaemonPhasedRequest | IResolvedDaemonGlobalRequest ;
584+
500585// @beta
501586export class RushDaemonHost {
502587 closeAsync(): Promise <void >;
0 commit comments