@inspectr/mcplab 1.28.5 → 1.29.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (162) hide show
  1. package/README.md +52 -5
  2. package/dist/app/assets/index-256LN2cO.css +2 -0
  3. package/dist/app/assets/index-DVIaEnjQ.js +243 -0
  4. package/dist/app/assets/sse-queue-worker-Iwmqd2oW.js +1 -0
  5. package/dist/app/index.html +2 -2
  6. package/dist/app-server/app-context.d.ts +75 -115
  7. package/dist/app-server/app-context.d.ts.map +1 -1
  8. package/dist/app-server/app-dist.d.ts +3 -3
  9. package/dist/app-server/app-dist.js.map +1 -1
  10. package/dist/app-server/app-run-artifacts.d.ts +4 -0
  11. package/dist/app-server/app-run-artifacts.d.ts.map +1 -0
  12. package/dist/app-server/app-run-artifacts.js +66 -0
  13. package/dist/app-server/app-run-artifacts.js.map +1 -0
  14. package/dist/app-server/assistant-common.d.ts +27 -37
  15. package/dist/app-server/assistant-common.d.ts.map +1 -1
  16. package/dist/app-server/assistant-common.js +110 -1
  17. package/dist/app-server/assistant-common.js.map +1 -1
  18. package/dist/app-server/assistant-events.d.ts +8 -28
  19. package/dist/app-server/browser-launch.d.ts +3 -3
  20. package/dist/app-server/browser-launch.js.map +1 -1
  21. package/dist/app-server/browser-provider-learning.d.ts +26 -0
  22. package/dist/app-server/browser-provider-learning.d.ts.map +1 -0
  23. package/dist/app-server/browser-provider-learning.js +353 -0
  24. package/dist/app-server/browser-provider-learning.js.map +1 -0
  25. package/dist/app-server/config-store.d.ts +13 -21
  26. package/dist/app-server/dev-mcp.d.ts +2 -5
  27. package/dist/app-server/evals-routes.d.ts +8 -18
  28. package/dist/app-server/evaluation-group-results.d.ts +11 -0
  29. package/dist/app-server/evaluation-group-results.d.ts.map +1 -0
  30. package/dist/app-server/evaluation-group-results.js +46 -0
  31. package/dist/app-server/evaluation-group-results.js.map +1 -0
  32. package/dist/app-server/evaluation-journal-projection.d.ts +9 -0
  33. package/dist/app-server/evaluation-journal-projection.d.ts.map +1 -0
  34. package/dist/app-server/evaluation-journal-projection.js +76 -0
  35. package/dist/app-server/evaluation-journal-projection.js.map +1 -0
  36. package/dist/app-server/evaluation-journal-writer.d.ts +23 -0
  37. package/dist/app-server/evaluation-journal-writer.d.ts.map +1 -0
  38. package/dist/app-server/evaluation-journal-writer.js +41 -0
  39. package/dist/app-server/evaluation-journal-writer.js.map +1 -0
  40. package/dist/app-server/evaluation-result-projection.d.ts +12 -0
  41. package/dist/app-server/evaluation-result-projection.d.ts.map +1 -0
  42. package/dist/app-server/evaluation-result-projection.js +107 -0
  43. package/dist/app-server/evaluation-result-projection.js.map +1 -0
  44. package/dist/app-server/execution-journal.d.ts +13 -0
  45. package/dist/app-server/execution-journal.d.ts.map +1 -0
  46. package/dist/app-server/execution-journal.js +39 -0
  47. package/dist/app-server/execution-journal.js.map +1 -0
  48. package/dist/app-server/http.d.ts +1 -1
  49. package/dist/app-server/index.d.ts +1 -1
  50. package/dist/app-server/inspectr-session-manager.d.ts +45 -0
  51. package/dist/app-server/inspectr-session-manager.d.ts.map +1 -0
  52. package/dist/app-server/inspectr-session-manager.js +203 -0
  53. package/dist/app-server/inspectr-session-manager.js.map +1 -0
  54. package/dist/app-server/jobs.d.ts +6 -9
  55. package/dist/app-server/libraries-store.d.ts +26 -10
  56. package/dist/app-server/libraries-store.d.ts.map +1 -1
  57. package/dist/app-server/libraries-store.js +130 -3
  58. package/dist/app-server/libraries-store.js.map +1 -1
  59. package/dist/app-server/live-tests-routes.d.ts +17 -0
  60. package/dist/app-server/live-tests-routes.d.ts.map +1 -0
  61. package/dist/app-server/live-tests-routes.js +82 -0
  62. package/dist/app-server/live-tests-routes.js.map +1 -0
  63. package/dist/app-server/live-tests.d.ts +81 -0
  64. package/dist/app-server/live-tests.d.ts.map +1 -0
  65. package/dist/app-server/live-tests.js +272 -0
  66. package/dist/app-server/live-tests.js.map +1 -0
  67. package/dist/app-server/markdown-reports.d.ts +7 -7
  68. package/dist/app-server/oauth-debugger-domain.d.ts +183 -207
  69. package/dist/app-server/oauth-debugger-domain.js.map +1 -1
  70. package/dist/app-server/oauth-debugger.d.ts +10 -17
  71. package/dist/app-server/oauth-debugger.js +1 -1
  72. package/dist/app-server/oauth-debugger.js.map +1 -1
  73. package/dist/app-server/oauth-runtime-domain.d.ts +42 -53
  74. package/dist/app-server/oauth-runtime-domain.js.map +1 -1
  75. package/dist/app-server/oauth-runtime-routes.d.ts +12 -12
  76. package/dist/app-server/oauth-session-manager.d.ts +44 -50
  77. package/dist/app-server/oauth-session-manager.d.ts.map +1 -1
  78. package/dist/app-server/oauth-session-manager.js.map +1 -1
  79. package/dist/app-server/provider-models.d.ts +5 -5
  80. package/dist/app-server/result-assistant-domain.d.ts +66 -82
  81. package/dist/app-server/result-assistant-domain.d.ts.map +1 -1
  82. package/dist/app-server/result-assistant-domain.js.map +1 -1
  83. package/dist/app-server/result-assistant-tools.d.ts +5 -5
  84. package/dist/app-server/result-assistant.d.ts +9 -21
  85. package/dist/app-server/result-assistant.js.map +1 -1
  86. package/dist/app-server/router.d.ts +9 -1
  87. package/dist/app-server/router.d.ts.map +1 -1
  88. package/dist/app-server/router.js +328 -10
  89. package/dist/app-server/router.js.map +1 -1
  90. package/dist/app-server/rover-connection.d.ts +48 -0
  91. package/dist/app-server/rover-connection.d.ts.map +1 -0
  92. package/dist/app-server/rover-connection.js +172 -0
  93. package/dist/app-server/rover-connection.js.map +1 -0
  94. package/dist/app-server/run-agent-selection.d.ts +2 -5
  95. package/dist/app-server/run-queue-domain.d.ts +89 -65
  96. package/dist/app-server/run-queue-domain.d.ts.map +1 -1
  97. package/dist/app-server/run-queue-domain.js +723 -9
  98. package/dist/app-server/run-queue-domain.js.map +1 -1
  99. package/dist/app-server/run-queue-events.d.ts +3 -10
  100. package/dist/app-server/run-queue-events.d.ts.map +1 -1
  101. package/dist/app-server/run-queue-events.js +114 -14
  102. package/dist/app-server/run-queue-events.js.map +1 -1
  103. package/dist/app-server/run-queue-executor.d.ts +33 -47
  104. package/dist/app-server/run-queue-executor.d.ts.map +1 -1
  105. package/dist/app-server/run-queue-executor.js +85 -15
  106. package/dist/app-server/run-queue-executor.js.map +1 -1
  107. package/dist/app-server/run-queue-state.d.ts +81 -47
  108. package/dist/app-server/run-queue-state.d.ts.map +1 -1
  109. package/dist/app-server/run-queue-state.js.map +1 -1
  110. package/dist/app-server/runs-routes.d.ts +13 -35
  111. package/dist/app-server/runs-routes.d.ts.map +1 -1
  112. package/dist/app-server/runs-routes.js +182 -16
  113. package/dist/app-server/runs-routes.js.map +1 -1
  114. package/dist/app-server/runs-routes.test-helpers.d.ts +42 -38
  115. package/dist/app-server/runs-routes.test-helpers.d.ts.map +1 -1
  116. package/dist/app-server/runs-routes.test-helpers.js +4 -1
  117. package/dist/app-server/runs-routes.test-helpers.js.map +1 -1
  118. package/dist/app-server/runs-store.d.ts +60 -43
  119. package/dist/app-server/runs-store.d.ts.map +1 -1
  120. package/dist/app-server/runs-store.js +157 -70
  121. package/dist/app-server/runs-store.js.map +1 -1
  122. package/dist/app-server/scenario-assistant-domain.d.ts +131 -157
  123. package/dist/app-server/scenario-assistant-domain.d.ts.map +1 -1
  124. package/dist/app-server/scenario-assistant-domain.js +7 -15
  125. package/dist/app-server/scenario-assistant-domain.js.map +1 -1
  126. package/dist/app-server/scenario-assistant.d.ts +10 -26
  127. package/dist/app-server/scenario-assistant.js.map +1 -1
  128. package/dist/app-server/settings-store.d.ts +4 -4
  129. package/dist/app-server/static-serving.d.ts +7 -13
  130. package/dist/app-server/store-utils.d.ts +1 -1
  131. package/dist/app-server/tool-analysis-domain.d.ts +167 -183
  132. package/dist/app-server/tool-analysis-domain.d.ts.map +1 -1
  133. package/dist/app-server/tool-analysis-domain.js +2 -59
  134. package/dist/app-server/tool-analysis-domain.js.map +1 -1
  135. package/dist/app-server/tool-analysis-storage.d.ts +20 -34
  136. package/dist/app-server/tool-analysis.d.ts +10 -19
  137. package/dist/app-server/types.d.ts +25 -25
  138. package/dist/app-server/version-info.d.ts +6 -6
  139. package/dist/app-server/version-info.js.map +1 -1
  140. package/dist/app-server/workspace-paths.d.ts +2 -1
  141. package/dist/app-server/workspace-paths.d.ts.map +1 -1
  142. package/dist/app-server/workspace-paths.js +5 -1
  143. package/dist/app-server/workspace-paths.js.map +1 -1
  144. package/dist/cli-branding.d.ts +1 -1
  145. package/dist/cli-branding.js.map +1 -1
  146. package/dist/cli.d.ts +1 -1
  147. package/dist/cli.js +1 -1
  148. package/dist/cli.js.map +1 -1
  149. package/dist/eval-config-files.d.ts +5 -8
  150. package/dist/interactive-helpers.d.ts +11 -15
  151. package/dist/migrate-utils.d.ts +1 -1
  152. package/dist/results/context.d.ts +1 -1
  153. package/dist/results/format.d.ts +7 -14
  154. package/dist/results/indexer.d.ts +2 -9
  155. package/dist/results/search.d.ts +1 -1
  156. package/dist/results/types.d.ts +2 -11
  157. package/dist/run-interactive.d.ts +21 -23
  158. package/dist/test-results-fixture.d.ts +4 -4
  159. package/package.json +8 -6
  160. package/dist/app/assets/index-Bxq-wlTN.css +0 -1
  161. package/dist/app/assets/index-j_NpCqyK.js +0 -258
  162. package/dist/app/assets/sse-queue-worker-BMo6aPaB.js +0 -1
@@ -0,0 +1,172 @@
1
+ import { WebSocketServer, WebSocket } from 'ws';
2
+ import { randomUUID } from 'node:crypto';
3
+ import { ROVER_CAPABILITIES, ROVER_PROTOCOL_VERSION as CORE_ROVER_PROTOCOL_VERSION } from '@inspectr/mcplab-core';
4
+ export const ROVER_ASSIGNMENT_LEASE_CAPABILITY = ROVER_CAPABILITIES[1];
5
+ export const ROVER_PROTOCOL_VERSION = CORE_ROVER_PROTOCOL_VERSION;
6
+ export function validateRoverRegistration(message) {
7
+ if (message.type !== 'register' ||
8
+ message.protocolVersion !== ROVER_PROTOCOL_VERSION ||
9
+ typeof message.provider !== 'string' ||
10
+ typeof message.pageUrl !== 'string' ||
11
+ typeof message.extensionVersion !== 'string') {
12
+ return { ok: false, code: 'invalid_registration', message: 'Rover registration required' };
13
+ }
14
+ if (!Array.isArray(message.capabilities) ||
15
+ !message.capabilities.includes(ROVER_ASSIGNMENT_LEASE_CAPABILITY)) {
16
+ return { ok: false, code: 'lease_required', message: 'Rover assignment leases are required' };
17
+ }
18
+ return { ok: true };
19
+ }
20
+ function timestampedLog(message) {
21
+ return `[mcplab-app] [${new Date().toISOString()}] ${message}`;
22
+ }
23
+ export function createRoverConnectionService(options = {}) {
24
+ const log = options.log ?? console.log;
25
+ const wss = new WebSocketServer({ noServer: true });
26
+ let current = null;
27
+ let closed = false;
28
+ const heartbeat = setInterval(() => {
29
+ if (closed || !current)
30
+ return;
31
+ if (Date.now() - Date.parse(current.lastSeenAt) > 45_000) {
32
+ current.socket.terminate();
33
+ return;
34
+ }
35
+ if (current.socket.readyState === WebSocket.OPEN)
36
+ current.socket.ping();
37
+ }, 15_000);
38
+ const parse = (raw) => {
39
+ try {
40
+ const value = JSON.parse(raw.toString());
41
+ return value &&
42
+ typeof value === 'object' &&
43
+ typeof value.type === 'string'
44
+ ? value
45
+ : null;
46
+ }
47
+ catch {
48
+ return null;
49
+ }
50
+ };
51
+ const send = (socket, message) => {
52
+ if (socket.readyState !== WebSocket.OPEN)
53
+ return false;
54
+ socket.send(JSON.stringify(message));
55
+ return true;
56
+ };
57
+ wss.on('connection', (socket) => {
58
+ let connection = null;
59
+ socket.on('message', (raw) => {
60
+ const message = parse(raw);
61
+ if (!message) {
62
+ socket.close(1003, 'Invalid Rover message');
63
+ return;
64
+ }
65
+ if (!connection) {
66
+ const registrationError = validateRoverRegistration(message);
67
+ if (!registrationError.ok && registrationError.code === 'invalid_registration') {
68
+ socket.close(1008, registrationError.message);
69
+ return;
70
+ }
71
+ if (!registrationError.ok) {
72
+ send(socket, { type: 'rejected', reason: registrationError.message });
73
+ socket.close(1008, registrationError.message);
74
+ return;
75
+ }
76
+ if (current && current.socket.readyState === WebSocket.OPEN) {
77
+ send(socket, { type: 'rejected', reason: 'another Rover is already connected' });
78
+ socket.close(1008, 'Another Rover is already connected');
79
+ return;
80
+ }
81
+ const now = new Date().toISOString();
82
+ const provider = message.provider;
83
+ const pageUrl = message.pageUrl;
84
+ const extensionVersion = message.extensionVersion;
85
+ connection = {
86
+ connectionId: randomUUID(),
87
+ registrationVersion: 1,
88
+ registration: {
89
+ protocolVersion: ROVER_PROTOCOL_VERSION,
90
+ provider,
91
+ ...(typeof message.providerRevision === 'string'
92
+ ? { providerRevision: message.providerRevision }
93
+ : {}),
94
+ pageUrl,
95
+ extensionVersion,
96
+ capabilities: Array.isArray(message.capabilities)
97
+ ? message.capabilities.filter((value) => typeof value === 'string')
98
+ : []
99
+ },
100
+ socket,
101
+ connectedAt: now,
102
+ lastSeenAt: now
103
+ };
104
+ current = connection;
105
+ const registeredConnection = connection;
106
+ send(socket, {
107
+ type: 'registered',
108
+ protocolVersion: ROVER_PROTOCOL_VERSION,
109
+ connectedAt: now,
110
+ capabilities: [ROVER_ASSIGNMENT_LEASE_CAPABILITY]
111
+ });
112
+ log(timestampedLog(`Rover connected: ${registeredConnection.registration.provider}`));
113
+ void options.onRegister?.(registeredConnection);
114
+ return;
115
+ }
116
+ connection.lastSeenAt = new Date().toISOString();
117
+ if (message.type === 'register_update') {
118
+ if (typeof message.provider !== 'string' || !message.provider.trim())
119
+ return;
120
+ connection.registrationVersion += 1;
121
+ connection.registration = {
122
+ ...connection.registration,
123
+ provider: message.provider,
124
+ ...(typeof message.providerRevision === 'string'
125
+ ? { providerRevision: message.providerRevision }
126
+ : {}),
127
+ pageUrl: String(message.pageUrl ?? connection.registration.pageUrl)
128
+ };
129
+ send(socket, {
130
+ type: 'registered',
131
+ protocolVersion: ROVER_PROTOCOL_VERSION,
132
+ connectedAt: connection.connectedAt,
133
+ capabilities: [ROVER_ASSIGNMENT_LEASE_CAPABILITY]
134
+ });
135
+ log(timestampedLog(`Rover provider updated: ${connection.registration.provider} (${connection.registration.pageUrl})`));
136
+ }
137
+ void options.onMessage?.(connection, message);
138
+ });
139
+ socket.on('close', () => {
140
+ if (current?.socket !== socket)
141
+ return;
142
+ const disconnected = current;
143
+ current = null;
144
+ log(timestampedLog(`Rover disconnected: ${disconnected.registration.provider}`));
145
+ void options.onDisconnect?.(disconnected);
146
+ });
147
+ socket.on('pong', () => {
148
+ if (connection)
149
+ connection.lastSeenAt = new Date().toISOString();
150
+ });
151
+ socket.on('error', () => undefined);
152
+ });
153
+ return {
154
+ upgrade(req, socket, head) {
155
+ if (closed || req.url?.split('?')[0] !== '/api/rover/ws')
156
+ return false;
157
+ wss.handleUpgrade(req, socket, head, (upgraded) => wss.emit('connection', upgraded, req));
158
+ return true;
159
+ },
160
+ connection: () => current,
161
+ send: (message) => (current ? send(current.socket, message) : false),
162
+ broadcast: (message) => (current ? send(current.socket, message) : false),
163
+ close: () => {
164
+ closed = true;
165
+ clearInterval(heartbeat);
166
+ current?.socket.close(1001, 'MCPLab shutting down');
167
+ current = null;
168
+ wss.close();
169
+ }
170
+ };
171
+ }
172
+ //# sourceMappingURL=rover-connection.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"rover-connection.js","sourceRoot":"","sources":["../../src/app-server/rover-connection.ts"],"names":[],"mappings":"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"}
@@ -1,6 +1,3 @@
1
1
  import type { EvalConfig } from '@inspectr/mcplab-core';
2
- export declare function resolveRunSelectedAgents(
3
- config: EvalConfig,
4
- requestedAgents?: string[]
5
- ): string[];
6
- //# sourceMappingURL=run-agent-selection.d.ts.map
2
+ export declare function resolveRunSelectedAgents(config: EvalConfig, requestedAgents?: string[]): string[];
3
+ //# sourceMappingURL=run-agent-selection.d.ts.map
@@ -1,80 +1,104 @@
1
1
  import type { IncomingMessage, ServerResponse } from 'node:http';
2
2
  import type { AppRouteDeps, AppRouteRequestContext } from './app-context.js';
3
3
  import { buildQueueState } from './run-queue-events.js';
4
- import {
5
- type QueueAdvanceOptions,
6
- type RunJob,
7
- type RunParams,
8
- type RunQueueState
9
- } from './run-queue-state.js';
4
+ import { type QueueAdvanceOptions, type RunJob, type RunParams, type RunQueueState } from './run-queue-state.js';
10
5
  import type { OAuthSessionManager } from './oauth-session-manager.js';
11
- export type QueueServiceDeps = Pick<
12
- AppRouteDeps,
13
- | 'addJobEvent'
14
- | 'sendSseEvent'
15
- | 'getScenarioRunTraceRecords'
16
- | 'selectScenarioIds'
17
- | 'expandConfigForAgents'
18
- | 'resolveRunSelectedAgents'
19
- | 'readLibraries'
20
- | 'pkgVersion'
21
- >;
6
+ import type { RoverSocketMessage } from './rover-connection.js';
7
+ export type QueueServiceDeps = Pick<AppRouteDeps, 'addJobEvent' | 'sendSseEvent' | 'getScenarioRunTraceRecords' | 'selectScenarioIds' | 'expandConfigForAgents' | 'resolveRunSelectedAgents' | 'readLibraries' | 'pkgVersion' | 'getRunResults'>;
22
8
  export type EnqueueResult = {
23
- jobId: string;
24
- queued?: boolean;
25
- position?: number;
9
+ jobId: string;
10
+ queued?: boolean;
11
+ position?: number;
12
+ };
13
+ export type RoverAssignmentWorker = {
14
+ connectionId: string;
15
+ registrationVersion?: number;
16
+ provider: string;
17
+ providerRevision?: string;
18
+ capabilities?: string[];
26
19
  };
27
20
  export interface RunQueueService {
28
- jobs: Map<string, RunJob>;
29
- state: RunQueueState;
30
- enqueueRun(
31
- runParams: RunParams,
32
- options?: {
33
- hostHeader?: string;
34
- }
35
- ): EnqueueResult;
36
- stopJob(
37
- jobId: string,
38
- options?: {
39
- hostHeader?: string;
40
- }
41
- ): {
42
- ok: boolean;
43
- status: string;
44
- } | null;
45
- removeQueuedJob(
46
- jobId: string,
47
- options?: {
48
- hostHeader?: string;
49
- }
50
- ):
51
- | {
21
+ jobs: Map<string, RunJob>;
22
+ state: RunQueueState;
23
+ enqueueRun(runParams: RunParams, options?: {
24
+ hostHeader?: string;
25
+ }): EnqueueResult;
26
+ stopJob(jobId: string, options?: {
27
+ hostHeader?: string;
28
+ }): {
29
+ ok: boolean;
30
+ status: string;
31
+ } | null;
32
+ stopEvaluationRun(evaluationRunId: string, options?: {
33
+ hostHeader?: string;
34
+ }): {
35
+ ok: true;
36
+ stopped: number;
37
+ } | null;
38
+ removeEvaluationRun(evaluationRunId: string, options?: {
39
+ hostHeader?: string;
40
+ }): {
52
41
  ok: true;
42
+ removed: number;
43
+ } | {
44
+ error: string;
45
+ statusCode: number;
46
+ } | null;
47
+ removeQueuedJob(jobId: string, options?: {
48
+ hostHeader?: string;
49
+ }): {
50
+ ok: true;
51
+ jobId: string;
52
+ status: 'stopped';
53
+ } | {
54
+ error: string;
55
+ statusCode: number;
56
+ } | null;
57
+ resumeBlockedJobs(options?: {
58
+ hostHeader?: string;
59
+ }): void;
60
+ getQueueState(): ReturnType<typeof buildQueueState>;
61
+ getWaitingRoverJobs(provider: string): Array<{
53
62
  jobId: string;
63
+ evaluationName?: string;
64
+ provider: string;
65
+ position: number;
66
+ }>;
67
+ subscribeQueue(req: IncomingMessage, res: ServerResponse): void;
68
+ advance(options?: QueueAdvanceOptions): Promise<void>;
69
+ setWorkerCount(workerCount: number, options?: {
70
+ hostHeader?: string;
71
+ }): void;
72
+ closeSubscribers(): void;
73
+ assignRoverJob(provider: string, send: (message: RoverSocketMessage) => boolean, worker?: RoverAssignmentWorker): RunJob | null;
74
+ rebindRoverLeases(provider: string, worker: RoverAssignmentWorker): void;
75
+ pauseRoverJob(jobId: string, connectionId?: string): void;
76
+ resumeRoverJob(jobId: string): boolean;
77
+ completeRoverJob(jobId: string, payload?: Record<string, unknown>): void;
78
+ stopRoverScenario(jobId: string, scenarioId: string): {
79
+ ok: true;
80
+ status: 'stopped';
81
+ } | {
82
+ error: string;
83
+ statusCode: number;
84
+ } | null;
85
+ stopScenario(jobId: string, scenarioId: string, agentName?: string): {
86
+ ok: true;
54
87
  status: 'stopped';
55
- }
56
- | {
88
+ } | {
57
89
  error: string;
58
90
  statusCode: number;
59
- }
60
- | null;
61
- resumeBlockedJobs(options?: { hostHeader?: string }): void;
62
- getQueueState(): ReturnType<typeof buildQueueState>;
63
- subscribeQueue(req: IncomingMessage, res: ServerResponse): void;
64
- advance(options?: QueueAdvanceOptions): Promise<void>;
65
- setWorkerCount(
66
- workerCount: number,
67
- options?: {
68
- hostHeader?: string;
69
- }
70
- ): void;
71
- closeSubscribers(): void;
91
+ } | null;
92
+ handleRoverMessage(message: RoverSocketMessage, provider: string, send: (message: RoverSocketMessage) => boolean, worker?: RoverAssignmentWorker): string | null;
72
93
  }
73
94
  export declare function createRunQueueService(params: {
74
- settings: AppRouteRequestContext['settings'];
75
- oauthSessionManager: OAuthSessionManager;
76
- deps: QueueServiceDeps;
77
- jobs?: Map<string, RunJob>;
78
- state?: RunQueueState;
95
+ settings: AppRouteRequestContext['settings'];
96
+ oauthSessionManager: OAuthSessionManager;
97
+ deps: QueueServiceDeps;
98
+ jobs?: Map<string, RunJob>;
99
+ state?: RunQueueState;
100
+ sendRoverMessage?: (message: RoverSocketMessage) => boolean;
101
+ assignRoverJob?: (provider: string, worker?: RoverAssignmentWorker) => RunJob | null;
102
+ onRoverJobReleased?: (provider: string, jobId: string) => void;
79
103
  }): RunQueueService;
80
- //# sourceMappingURL=run-queue-domain.d.ts.map
104
+ //# sourceMappingURL=run-queue-domain.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"run-queue-domain.d.ts","sourceRoot":"","sources":["../../src/app-server/run-queue-domain.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,eAAe,EAAE,cAAc,EAAE,MAAM,WAAW,CAAC;AACjE,OAAO,KAAK,EAAE,YAAY,EAAE,sBAAsB,EAAE,MAAM,kBAAkB,CAAC;AAC7E,OAAO,EAAkB,eAAe,EAAmB,MAAM,uBAAuB,CAAC;AAEzF,OAAO,EAIL,KAAK,mBAAmB,EACxB,KAAK,MAAM,EACX,KAAK,SAAS,EACd,KAAK,aAAa,EACnB,MAAM,sBAAsB,CAAC;AAC9B,OAAO,KAAK,EAAE,mBAAmB,EAAE,MAAM,4BAA4B,CAAC;AAEtE,MAAM,MAAM,gBAAgB,GAAG,IAAI,CACjC,YAAY,EACV,aAAa,GACb,cAAc,GACd,4BAA4B,GAC5B,mBAAmB,GACnB,uBAAuB,GACvB,0BAA0B,GAC1B,eAAe,GACf,YAAY,CACf,CAAC;AAEF,MAAM,MAAM,aAAa,GAAG;IAAE,KAAK,EAAE,MAAM,CAAC;IAAC,MAAM,CAAC,EAAE,OAAO,CAAC;IAAC,QAAQ,CAAC,EAAE,MAAM,CAAA;CAAE,CAAC;AAEnF,MAAM,WAAW,eAAe;IAC9B,IAAI,EAAE,GAAG,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;IAC1B,KAAK,EAAE,aAAa,CAAC;IACrB,UAAU,CAAC,SAAS,EAAE,SAAS,EAAE,OAAO,CAAC,EAAE;QAAE,UAAU,CAAC,EAAE,MAAM,CAAA;KAAE,GAAG,aAAa,CAAC;IACnF,OAAO,CAAC,KAAK,EAAE,MAAM,EAAE,OAAO,CAAC,EAAE;QAAE,UAAU,CAAC,EAAE,MAAM,CAAA;KAAE,GAAG;QAAE,EAAE,EAAE,OAAO,CAAC;QAAC,MAAM,EAAE,MAAM,CAAA;KAAE,GAAG,IAAI,CAAC;IAClG,eAAe,CACb,KAAK,EAAE,MAAM,EACb,OAAO,CAAC,EAAE;QAAE,UAAU,CAAC,EAAE,MAAM,CAAA;KAAE,GAChC;QAAE,EAAE,EAAE,IAAI,CAAC;QAAC,KAAK,EAAE,MAAM,CAAC;QAAC,MAAM,EAAE,SAAS,CAAA;KAAE,GAAG;QAAE,KAAK,EAAE,MAAM,CAAC;QAAC,UAAU,EAAE,MAAM,CAAA;KAAE,GAAG,IAAI,CAAC;IACjG,iBAAiB,CAAC,OAAO,CAAC,EAAE;QAAE,UAAU,CAAC,EAAE,MAAM,CAAA;KAAE,GAAG,IAAI,CAAC;IAC3D,aAAa,IAAI,UAAU,CAAC,OAAO,eAAe,CAAC,CAAC;IACpD,cAAc,CAAC,GAAG,EAAE,eAAe,EAAE,GAAG,EAAE,cAAc,GAAG,IAAI,CAAC;IAChE,OAAO,CAAC,OAAO,CAAC,EAAE,mBAAmB,GAAG,OAAO,CAAC,IAAI,CAAC,CAAC;IACtD,cAAc,CAAC,WAAW,EAAE,MAAM,EAAE,OAAO,CAAC,EAAE;QAAE,UAAU,CAAC,EAAE,MAAM,CAAA;KAAE,GAAG,IAAI,CAAC;IAC7E,gBAAgB,IAAI,IAAI,CAAC;CAC1B;AAED,wBAAgB,qBAAqB,CAAC,MAAM,EAAE;IAC5C,QAAQ,EAAE,sBAAsB,CAAC,UAAU,CAAC,CAAC;IAC7C,mBAAmB,EAAE,mBAAmB,CAAC;IACzC,IAAI,EAAE,gBAAgB,CAAC;IACvB,IAAI,CAAC,EAAE,GAAG,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;IAC3B,KAAK,CAAC,EAAE,aAAa,CAAC;CACvB,GAAG,eAAe,CAkZlB"}
1
+ {"version":3,"file":"run-queue-domain.d.ts","sourceRoot":"","sources":["../../src/app-server/run-queue-domain.ts"],"names":[],"mappings":"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"}