llm-relay 0.77.1 → 0.78.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 (90) hide show
  1. package/dist/accounting-store-schema.js +5 -6
  2. package/dist/accounting-store-schema.js.map +1 -1
  3. package/dist/accounting-store.d.ts +10 -0
  4. package/dist/accounting-store.js +60 -6
  5. package/dist/accounting-store.js.map +1 -1
  6. package/dist/backend/envelope-validator.d.ts +1 -1
  7. package/dist/backend/envelope-validator.js +89 -52
  8. package/dist/backend/envelope-validator.js.map +1 -1
  9. package/dist/backend/health-prober.js +3 -1
  10. package/dist/backend/health-prober.js.map +1 -1
  11. package/dist/backend.d.ts +48 -0
  12. package/dist/backend.js +831 -7
  13. package/dist/backend.js.map +1 -1
  14. package/dist/candidate-runner.d.ts +135 -50
  15. package/dist/candidate-runner.js +160 -55
  16. package/dist/candidate-runner.js.map +1 -1
  17. package/dist/cli.d.ts +24 -2
  18. package/dist/cli.js +122 -20
  19. package/dist/cli.js.map +1 -1
  20. package/dist/config/routing-parser.d.ts +5 -4
  21. package/dist/config/routing-parser.js +141 -9
  22. package/dist/config/routing-parser.js.map +1 -1
  23. package/dist/config-types.d.ts +202 -0
  24. package/dist/config-types.js +2 -0
  25. package/dist/config-types.js.map +1 -1
  26. package/dist/config.d.ts +45 -1
  27. package/dist/config.js +87 -22
  28. package/dist/config.js.map +1 -1
  29. package/dist/dashboard-contract.d.ts +38 -0
  30. package/dist/dashboard-contract.js +19 -3
  31. package/dist/dashboard-contract.js.map +1 -1
  32. package/dist/dispatch-lane-stats.d.ts +33 -4
  33. package/dist/dispatch-lane-stats.js +65 -16
  34. package/dist/dispatch-lane-stats.js.map +1 -1
  35. package/dist/dispatch.d.ts +9 -0
  36. package/dist/dispatch.js +36 -4
  37. package/dist/dispatch.js.map +1 -1
  38. package/dist/key-checker.d.ts +21 -1
  39. package/dist/key-checker.js +38 -12
  40. package/dist/key-checker.js.map +1 -1
  41. package/dist/lane-affinity.d.ts +94 -1
  42. package/dist/lane-affinity.js +52 -4
  43. package/dist/lane-affinity.js.map +1 -1
  44. package/dist/mcp/lane-runner.d.ts +69 -16
  45. package/dist/mcp/lane-runner.js +30 -1
  46. package/dist/mcp/lane-runner.js.map +1 -1
  47. package/dist/mcp/server.d.ts +39 -4
  48. package/dist/mcp/server.js +70 -13
  49. package/dist/mcp/server.js.map +1 -1
  50. package/dist/openai-request.d.ts +21 -0
  51. package/dist/openai-request.js +1 -1
  52. package/dist/openai-request.js.map +1 -1
  53. package/dist/ping/cadence.js +9 -1
  54. package/dist/ping/cadence.js.map +1 -1
  55. package/dist/ping/probe-cache.d.ts +13 -0
  56. package/dist/ping/probe-cache.js +12 -0
  57. package/dist/ping/probe-cache.js.map +1 -1
  58. package/dist/responses-request.d.ts +20 -0
  59. package/dist/responses-request.js +7 -7
  60. package/dist/responses-request.js.map +1 -1
  61. package/dist/routes/admin.d.ts +8 -1
  62. package/dist/routes/admin.js +42 -6
  63. package/dist/routes/admin.js.map +1 -1
  64. package/dist/routes/messages.d.ts +1 -0
  65. package/dist/routes/messages.js +13 -8
  66. package/dist/routes/messages.js.map +1 -1
  67. package/dist/routes/openai-front.js +20 -7
  68. package/dist/routes/openai-front.js.map +1 -1
  69. package/dist/server.d.ts +9 -1
  70. package/dist/server.js +21 -3
  71. package/dist/server.js.map +1 -1
  72. package/dist/setup-claude.d.ts +2 -2
  73. package/dist/setup-claude.js +9 -7
  74. package/dist/setup-claude.js.map +1 -1
  75. package/dist/stream-pipeline.d.ts +116 -0
  76. package/dist/stream-pipeline.js +151 -0
  77. package/dist/stream-pipeline.js.map +1 -1
  78. package/dist/target-facts.d.ts +5 -4
  79. package/dist/target-facts.js +5 -0
  80. package/dist/target-facts.js.map +1 -1
  81. package/dist/telemetry.d.ts +15 -2
  82. package/dist/telemetry.js +4 -1
  83. package/dist/telemetry.js.map +1 -1
  84. package/dist/tier-data.d.ts +22 -0
  85. package/dist/tier-data.js +12 -2
  86. package/dist/tier-data.js.map +1 -1
  87. package/package.json +2 -1
  88. package/skills/llm-relay/SKILL.md +8 -3
  89. package/skills/llm-relay/references/dispatch-lanes.md +2 -1
  90. package/skills/llm-relay/references/operations.md +1 -1
@@ -4,6 +4,7 @@ import { relayStatePath } from "./state-paths.js";
4
4
  import { WriteBehindRegistry, WriteBehindTimer } from "./write-behind.js";
5
5
  import { atomicWriteJsonSync, safeReadJsonSync } from "./storage/json-store.js";
6
6
  import { isDashboardSafeId } from "./dashboard-contract.js";
7
+ import { medianWallClockMs, quantileWallClockMs } from "./dispatch-lane-stats.js";
7
8
  export const MAX_AFFINITY_MS = 6 * 60 * 60 * 1000;
8
9
  export const DEFAULT_PIN_MS = 15 * 60 * 1000;
9
10
  export const DEFAULT_DEMOTE_MS = 15 * 60 * 1000;
@@ -11,6 +12,13 @@ const MAX_REASON_CHARS = 200;
11
12
  const MAX_LANE_ID_CHARS = 200;
12
13
  const MAX_TIER_CHARS = 64;
13
14
  export const LANE_AFFINITY_KINDS = Object.freeze(["pin", "demote"]);
15
+ export const LANE_AFFINITY_DEFAULT_TTL_MS = {
16
+ pin: DEFAULT_PIN_MS,
17
+ demote: DEFAULT_DEMOTE_MS,
18
+ };
19
+ function defaultWindowFor(kind) {
20
+ return LANE_AFFINITY_DEFAULT_TTL_MS[kind];
21
+ }
14
22
  const affinity = new WeakMap();
15
23
  function memoryKey(tier, laneId, kind) {
16
24
  return `${kind}:${tier ?? ""}:${laneId}`;
@@ -56,11 +64,11 @@ function recall(cfg, kind, tier, laneId, now) {
56
64
  }
57
65
  return row;
58
66
  }
59
- export function pinLane(cfg, tier, laneId, reason, ttlMs = DEFAULT_PIN_MS, now = Date.now()) {
60
- remember(cfg, "pin", tier, laneId, reason, clampWindow(ttlMs, DEFAULT_PIN_MS), now);
67
+ export function pinLane(cfg, tier, laneId, reason, ttlMs = defaultWindowFor("pin"), now = Date.now()) {
68
+ remember(cfg, "pin", tier, laneId, reason, clampWindow(ttlMs, defaultWindowFor("pin")), now);
61
69
  }
62
- export function demoteLane(cfg, tier, laneId, reason, ttlMs = DEFAULT_DEMOTE_MS, now = Date.now()) {
63
- remember(cfg, "demote", tier, laneId, reason, clampWindow(ttlMs, DEFAULT_DEMOTE_MS), now);
70
+ export function demoteLane(cfg, tier, laneId, reason, ttlMs = defaultWindowFor("demote"), now = Date.now()) {
71
+ remember(cfg, "demote", tier, laneId, reason, clampWindow(ttlMs, defaultWindowFor("demote")), now);
64
72
  }
65
73
  export function lanePin(cfg, tier, laneId, now = Date.now()) {
66
74
  return recall(cfg, "pin", tier, laneId, now);
@@ -68,6 +76,46 @@ export function lanePin(cfg, tier, laneId, now = Date.now()) {
68
76
  export function laneDemotion(cfg, tier, laneId, now = Date.now()) {
69
77
  return recall(cfg, "demote", tier, laneId, now);
70
78
  }
79
+ export const DEFAULT_OUTLIER_RECENT_COUNT = 5;
80
+ export const DEFAULT_OUTLIER_HISTORY_QUANTILE = 0.8;
81
+ export const DEFAULT_OUTLIER_FACTOR = 7.6;
82
+ export function checkLaneOutlier(samples, settings) {
83
+ const { recentCount, historyQuantile, outlierFactor, minSamples } = settings;
84
+ if (!Number.isInteger(recentCount) || recentCount < 1)
85
+ return null;
86
+ if (samples.length < recentCount + minSamples)
87
+ return null;
88
+ const recent = samples.slice(-recentCount);
89
+ const earlier = samples.slice(0, samples.length - recentCount);
90
+ if (recent.length < minSamples || earlier.length < minSamples)
91
+ return null;
92
+ const recentMedian = medianWallClockMs(recent);
93
+ const history = quantileWallClockMs(earlier, historyQuantile);
94
+ if (recentMedian === null || history === null || history <= 0)
95
+ return null;
96
+ if (recentMedian <= history * outlierFactor)
97
+ return null;
98
+ return { recentMedianMs: recentMedian, historyMs: history };
99
+ }
100
+ export function outlierDemotionReason(evidence, opts) {
101
+ const seconds = (ms) => Math.round(ms / 1000);
102
+ const point = Math.round(opts.historyQuantile * 100);
103
+ return `recent median ${seconds(evidence.recentMedianMs)} s vs history p${point} ${seconds(evidence.historyMs)} s ×${opts.outlierFactor}`;
104
+ }
105
+ export function recordLaneOutlier(cfg, tier, laneId, samples, outlier, opts, now = Date.now()) {
106
+ if (outlier === false)
107
+ return null;
108
+ const hit = checkLaneOutlier(samples, { ...outlier, minSamples: opts.minSamples });
109
+ if (!hit)
110
+ return null;
111
+ const reason = outlierDemotionReason(hit, {
112
+ historyQuantile: outlier.historyQuantile,
113
+ outlierFactor: outlier.outlierFactor,
114
+ });
115
+ clearLaneAffinity(cfg, tier, laneId);
116
+ demoteLane(cfg, tier, laneId, reason, opts.demoteMs, now);
117
+ return reason;
118
+ }
71
119
  export function clearLaneAffinity(cfg, tier, laneId) {
72
120
  const map = mapFor(cfg);
73
121
  let changed = false;
@@ -1 +1 @@
1
- {"version":3,"file":"lane-affinity.js","sourceRoot":"","sources":["../src/lane-affinity.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"lane-affinity.js","sourceRoot":"","sources":["../src/lane-affinity.ts"],"names":[],"mappings":"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"}
@@ -9,15 +9,6 @@ export declare const DEPTH_ENV = "LLM_RELAY_DISPATCH_DEPTH";
9
9
  export declare const DEFAULT_MAX_DEPTH = 3;
10
10
  /** Hard ceiling on captured lane output, so one runaway lane cannot exhaust memory. */
11
11
  export declare const MAX_OUTPUT_BYTES: number;
12
- /**
13
- * How long `dispatch` waits before it stops blocking and hands back a job handle instead.
14
- *
15
- * Chosen BELOW a typical MCP client tool timeout on purpose: a fast lane answers in one call, and
16
- * a slow one degrades to polling automatically rather than failing. That is the behaviour the
17
- * Tasks extension would give us natively — see `docs/mcp-dispatch-prior-art-2026-08-30.md` §3.1 for
18
- * why we cannot use it yet.
19
- */
20
- export declare const DEFAULT_WAIT_MS = 60000;
21
12
  /** Ceiling on one lane run. agy's own `--print-timeout` convention here is 30 minutes. */
22
13
  export declare const DEFAULT_LANE_TIMEOUT_MS: number;
23
14
  /**
@@ -67,20 +58,54 @@ export interface RelayAnnouncements {
67
58
  latencyDemoted?: string;
68
59
  degraded?: string;
69
60
  }
61
+ /**
62
+ * "skipped" — a rung the walk never started at all, because it was already at its configured
63
+ * `maxConcurrent` cap when its turn in the ladder came (backlog item "a per-lane CONCURRENCY cap
64
+ * on cli dispatch rungs", 2026-09-09).
65
+ *
66
+ * ⚠ Deliberately NOT a member of `DispatchLaneStatus`. That type is what a settled RUN is reported
67
+ * to the daemon as (`DispatchedTelemetryReport.status`, validated by `routes/admin.ts`'s pin/demote
68
+ * and failure-kind total tables, and folded into `dispatch-lane-stats.json`'s wall-clock window by
69
+ * `recordLaneRun`), and a skipped rung never ran — "spawn nothing … report no telemetry for it,
70
+ * nothing ran" is the brief's whole point. Widening the REPORTED vocabulary to include a state
71
+ * nothing ever reports would be exactly the closed-union defect CLAUDE.md warns about: a member
72
+ * reachable only in theory, decided nowhere real.
73
+ */
74
+ export declare const SKIPPED_LANE_STATUS: "skipped";
75
+ /**
76
+ * Every state one WALK ATTEMPT can end in — `LaneAttempt.status`'s own closed union, strictly wider
77
+ * than `DispatchLaneStatus` by the one member above. The two unions describe different questions
78
+ * (this one is "what happened to this attempt in THIS job's record"; `DispatchLaneStatus` is "what
79
+ * does the daemon's persisted lane history say"), so they are two types on purpose rather than one
80
+ * reused for both.
81
+ */
82
+ export type LaneAttemptStatus = DispatchLaneStatus | typeof SKIPPED_LANE_STATUS;
83
+ /**
84
+ * Did this attempt actually run a lane, or was it skipped before any process started? Total over
85
+ * `LaneAttemptStatus` (`const _never: never` below), so a future member — whether added here or
86
+ * inherited from a `DispatchLaneStatus` that grows — is a compile error at this switch rather than
87
+ * a silent "counts as tried" default (the closed-union gotcha in CLAUDE.md). `mcp/server.ts` uses
88
+ * it to keep a walk's terminal "N tried" message honest when every remaining lane was capped rather
89
+ * than actually attempted — a skipped rung "counts as NOT TRIED" per the backlog item's own wording.
90
+ */
91
+ export declare function attemptWasTried(status: LaneAttemptStatus): boolean;
70
92
  /**
71
93
  * One lane a dispatch WALK tried, in the order it tried them.
72
94
  *
73
- * ⚠ Its `status` is a `DispatchLaneStatus`, IMPORTED rather than restated. Two hand-written copies
74
- * of one closed set is the most-repeated defect in this repository's history, and here the type
75
- * additionally buys a guarantee: that union has no `cancelled` member, so "a caller cancellation is
76
- * never reported as lane evidence" becomes a property the compiler enforces at every call site
77
- * rather than a runtime check somebody can forget.
95
+ * ⚠ Its `status` is a `LaneAttemptStatus`, IMPORTED rather than restated — see that type's own
96
+ * doc comment for why it is not simply `DispatchLaneStatus`. Two hand-written copies of one closed
97
+ * set is the most-repeated defect in this repository's history, and here the type additionally buys
98
+ * a guarantee: that union has no `cancelled` member, so "a caller cancellation is never reported as
99
+ * lane evidence" becomes a property the compiler enforces at every call site rather than a runtime
100
+ * check somebody can forget.
78
101
  */
79
102
  export interface LaneAttempt {
80
103
  laneId: string;
81
104
  spec: string | undefined;
82
- status: DispatchLaneStatus;
83
- /** Wall clock for THIS attempt, not for the walk. */
105
+ status: LaneAttemptStatus;
106
+ /** Wall clock for THIS attempt, not for the walk. Always 0 for a `"skipped"` attempt — nothing
107
+ * ran, so there is no duration to report, the same rule an `"abandoned"` run's OWN duration
108
+ * is withheld from `dispatch-lane-stats.ts`'s persisted window for. */
84
109
  elapsedMs: number;
85
110
  /** Why the attempt ended this way, when it did not succeed. */
86
111
  reason?: string;
@@ -325,6 +350,34 @@ export declare class LaneJobStore {
325
350
  enabled: boolean;
326
351
  lanesNotTried: number;
327
352
  }): void;
353
+ /**
354
+ * A rung the walk SKIPPED for its `maxConcurrent` cap "counts as NOT TRIED" (the backlog item's
355
+ * own wording), so it grows the same counter `noteWalkScope`'s `maxLanes` bound uses — one caller
356
+ * before the walk starts (a fixed bound known in advance), this one during it (a skip discovered
357
+ * lane by lane) — so `jobAnswer` cannot tell them apart and always prefers the PARTIAL advice over
358
+ * the EXHAUSTED one whenever anything was left untried, whichever reason left it untried.
359
+ */
360
+ noteSkippedLane(id: string): void;
361
+ /**
362
+ * How many jobs THIS MCP server process currently has a spawned process running for `laneId` —
363
+ * the job's CURRENT attempt (`job.laneId`, repointed by `setCurrentLane` as the walk advances
364
+ * from lane to lane), never its history. A job counts only while `status === "running"`: the
365
+ * moment an attempt settles (or the whole job ends), it stops occupying a slot.
366
+ *
367
+ * ⚠ `excludeJobId` matters, and omitting it is a real bug, not a cosmetic nicety: `create()` sets
368
+ * a fresh job's `laneId` to its FIRST candidate lane at CREATION, before the walk has attempted
369
+ * anything — so a walk asking "is my own first lane already at its cap?" would count ITSELF and
370
+ * skip its own opening attempt, on every dispatch, the moment any `maxConcurrent` is configured.
371
+ * Passing the asking job's own id excludes it, so this answers "how many OTHER jobs are running
372
+ * this lane right now" — the question a skip check actually needs.
373
+ *
374
+ * ⚠ Per-process by construction, and that is the whole design, not a limitation to work around:
375
+ * the daemon never spawns a lane, so the only process that ever knows a `cli` rung's process is
376
+ * running is the one that spawned it. Two host sessions each running their own `llm-relay mcp`
377
+ * can together exceed a rung's `maxConcurrent` — this bounds one host's own concurrency, and
378
+ * `docs/reference.md` says so rather than implying a machine-wide guarantee this cannot make.
379
+ */
380
+ inFlight(laneId: string, excludeJobId?: string): number;
328
381
  get(id: string): LaneJob | undefined;
329
382
  list(): LaneJob[];
330
383
  /**
@@ -7,7 +7,6 @@ import { laneOfRung } from "../lane-manifest.js";
7
7
  export const DEPTH_ENV = "LLM_RELAY_DISPATCH_DEPTH";
8
8
  export const DEFAULT_MAX_DEPTH = 3;
9
9
  export const MAX_OUTPUT_BYTES = 16 * 1024 * 1024;
10
- export const DEFAULT_WAIT_MS = 60_000;
11
10
  export const DEFAULT_LANE_TIMEOUT_MS = 30 * 60 * 1000;
12
11
  export const TERMINAL_JOB_STATUSES = ["completed", "failed", "cancelled", "timed_out"];
13
12
  const REPORTABLE_JOB_STATUS_MAP = {
@@ -19,6 +18,22 @@ export const REPORTABLE_JOB_STATUSES = Object.freeze(Object.keys(REPORTABLE_JOB_
19
18
  export function isReportableJobStatus(status) {
20
19
  return REPORTABLE_JOB_STATUSES.includes(status);
21
20
  }
21
+ export const SKIPPED_LANE_STATUS = "skipped";
22
+ export function attemptWasTried(status) {
23
+ switch (status) {
24
+ case "completed":
25
+ case "failed":
26
+ case "timed_out":
27
+ case "abandoned":
28
+ return true;
29
+ case SKIPPED_LANE_STATUS:
30
+ return false;
31
+ default: {
32
+ const _never = status;
33
+ return _never;
34
+ }
35
+ }
36
+ }
22
37
  export function classifyLaneAttempt(run, opts = {}) {
23
38
  if (opts.abandoned === true)
24
39
  return "abandoned";
@@ -275,6 +290,20 @@ export class LaneJobStore {
275
290
  if (scope.lanesNotTried > 0)
276
291
  job.lanesNotTried = scope.lanesNotTried;
277
292
  }
293
+ noteSkippedLane(id) {
294
+ const job = this.jobs.get(id);
295
+ if (!job)
296
+ return;
297
+ job.lanesNotTried = (job.lanesNotTried ?? 0) + 1;
298
+ }
299
+ inFlight(laneId, excludeJobId) {
300
+ let count = 0;
301
+ for (const job of this.jobs.values()) {
302
+ if (job.status === "running" && job.laneId === laneId && job.id !== excludeJobId)
303
+ count++;
304
+ }
305
+ return count;
306
+ }
278
307
  get(id) {
279
308
  return this.jobs.get(id);
280
309
  }
@@ -1 +1 @@
1
- {"version":3,"file":"lane-runner.js","sourceRoot":"","sources":["../../src/mcp/lane-runner.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"lane-runner.js","sourceRoot":"","sources":["../../src/mcp/lane-runner.ts"],"names":[],"mappings":"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"}
@@ -83,6 +83,24 @@ export interface McpServerDeps {
83
83
  * Keep it short: every host pays for it in every session. Pinned by `test/mcp-server.test.ts`.
84
84
  */
85
85
  export declare const MCP_INSTRUCTIONS: string;
86
+ /**
87
+ * What one `dispatch` call may block for, decided in exactly one place.
88
+ *
89
+ * An MCP host tool call fails between 45 s and 100 s on this machine and destroys the job
90
+ * handle above that, so no call may block past `routing.mcp.maxWaitMs` (the `ceiling`): absent
91
+ * waits the full ceiling, a larger `waitMs` is clamped to it (and `awaitOrPoll` announces the
92
+ * clamp), and a `waitMs` the server cannot honour at all — negative, zero, non-finite, or not
93
+ * a number — is a `refusal`, the property's second branch. The union is narrowed with `in`
94
+ * at the one call site, never an unconditional `else` resolving to a wait.
95
+ */
96
+ export type ResolvedWaitMs = {
97
+ waitMs: number;
98
+ clamped: boolean;
99
+ requested: number;
100
+ } | {
101
+ refusal: string;
102
+ };
103
+ export declare function resolveWaitMs(requested: unknown, ceiling: number): ResolvedWaitMs;
86
104
  /**
87
105
  * What a caller is told when the walk tried every lane it had and none of them answered.
88
106
  *
@@ -174,6 +192,18 @@ export declare class McpDispatchServer {
174
192
  * with it. Only a caller error ends the walk early — see `refusal` on `LaneAttemptOutcome`.
175
193
  */
176
194
  private runWalk;
195
+ /**
196
+ * A `cli` rung whose configured `maxConcurrent` this MCP server process has already reached for
197
+ * — SKIP it for this walk rather than starting a competing process. Records the skip as an
198
+ * attempt (so the walk's own "lanes tried" rendering shows it) and grows `lanesNotTried` (so a
199
+ * walk that skips everything reports the PARTIAL advice, never the EXHAUSTED one — a skipped
200
+ * rung "counts as NOT TRIED", not as a lane that ran and failed). Spawns nothing, demotes
201
+ * nothing: no telemetry is forwarded for a skip, so `lane-affinity.ts` never hears about it.
202
+ *
203
+ * Only `cli` rungs carry a `maxConcurrent` at all (`dispatch.ts` `toLane`) — a `relay` lane's is
204
+ * always `null`, so this returns `false` for one without needing a `kind` check of its own.
205
+ */
206
+ private skipIfAtConcurrencyCap;
177
207
  /**
178
208
  * Run ONE lane, optionally bounded by an attempt budget. Returns what happened; never throws.
179
209
  *
@@ -220,10 +250,15 @@ export declare class McpDispatchServer {
220
250
  */
221
251
  private runAnswerFetch;
222
252
  /**
223
- * Block for `waitMs`, then hand back a job handle. A fast lane therefore costs ONE call, and a
224
- * slow one degrades to polling instead of hitting the client's tool timeout. Shared by both
225
- * dispatch modes so there is exactly one wait/poll/render policy — the "two paths, one policy"
226
- * shape this repo's own history warns against.
253
+ * Block for the resolved `waitMs`, then hand back a job handle. A fast lane therefore costs
254
+ * ONE call, and a slow one degrades to polling instead of hitting the client's tool timeout.
255
+ * Shared by both dispatch modes so there is exactly one wait/poll/render policy — the "two
256
+ * paths, one policy" shape this repo's own history warns against.
257
+ *
258
+ * When the caller's `waitMs` was clamped to the ceiling, `clamp` carries the ask and the
259
+ * ceiling and the reply announces it on its own line — the SAME code path that renders
260
+ * "Still running after N s", so the announcement can never drift from the wait it explains.
261
+ * Without a clamp the text below is byte-for-byte what it always was.
227
262
  */
228
263
  private awaitOrPoll;
229
264
  }
@@ -1,7 +1,8 @@
1
+ import { DEFAULT_MCP_MAX_WAIT_MS } from "../config-types.js";
1
2
  import { isToolUseBlock } from "../anthropic.js";
2
3
  import { formatAttemptBudget, formatLaneStats } from "../dispatch.js";
3
4
  import { estimateTokensFromCharacters } from "../metadata.js";
4
- import { DEFAULT_LANE_TIMEOUT_MS, DEFAULT_MAX_DEPTH, DEFAULT_WAIT_MS, DEPTH_ENV, EMPTY_OUTPUT_REASON, LaneJobStore, classifyDispatchedResult, classifyLaneAttempt, checkCwd, currentDepth, defaultAnswerFetch, defaultLaneSpawner, isContentEmpty, readRelayAnnouncements, relayLoopbackUrl, } from "./lane-runner.js";
5
+ import { DEFAULT_LANE_TIMEOUT_MS, DEFAULT_MAX_DEPTH, DEPTH_ENV, EMPTY_OUTPUT_REASON, LaneJobStore, SKIPPED_LANE_STATUS, attemptWasTried, classifyDispatchedResult, classifyLaneAttempt, checkCwd, currentDepth, defaultAnswerFetch, defaultLaneSpawner, isContentEmpty, readRelayAnnouncements, relayLoopbackUrl, } from "./lane-runner.js";
5
6
  import { RPC_INTERNAL_ERROR, RPC_INVALID_PARAMS, RPC_METHOD_NOT_FOUND, RPC_PARSE_ERROR, encodeMessage, errorResponse, isJsonRpcNotification, isJsonRpcRequest, logStderr, negotiateProtocolVersion, resultResponse, splitMessages, } from "./protocol.js";
6
7
  export const MCP_SERVER_NAME = "llm-relay";
7
8
  export const DEFAULT_ANSWER_MAX_TOKENS = 4096;
@@ -41,7 +42,9 @@ const TOOLS = [
41
42
  "not answer inside its budget is stopped and the next one is started, and the lane that " +
42
43
  "answers is preferred next time. Runs the lane correctly — working directory, " +
43
44
  "environment and idle timeouts are handled here, so you never build a command line. If the " +
44
- "lane is still running after waitMs, returns a jobId to poll with dispatch_status. In Codex " +
45
+ "lane is still running, returns a jobId to poll with dispatch_status — it blocks at most " +
46
+ "routing.mcp.maxWaitMs first, so a slow lane degrades to polling instead of hitting the " +
47
+ "host's tool timeout. In Codex " +
45
48
  "Desktop, use this instead of a pool/* collaboration child, which the ChatGPT launcher " +
46
49
  "rejects before the custom provider or relay is reached. Set mode to \"answer\" for a " +
47
50
  "question, draft, summary, or second opinion that needs no file access — it posts straight " +
@@ -91,7 +94,8 @@ const TOOLS = [
91
94
  },
92
95
  waitMs: {
93
96
  type: "number",
94
- description: `How long to block before returning a jobId instead (default ${DEFAULT_WAIT_MS}).`,
97
+ description: "How long to block before returning a jobId instead (default routing.mcp.maxWaitMs; " +
98
+ "a larger waitMs is clamped to that ceiling and the clamp is announced in the reply).",
95
99
  },
96
100
  timeoutMs: {
97
101
  type: "number",
@@ -163,6 +167,24 @@ function readNumber(params, key) {
163
167
  function readMode(params) {
164
168
  return params["mode"] === "answer" ? "answer" : "agent";
165
169
  }
170
+ export function resolveWaitMs(requested, ceiling) {
171
+ if (requested === undefined || requested === null) {
172
+ return { waitMs: ceiling, clamped: false, requested: ceiling };
173
+ }
174
+ if (typeof requested !== "number" || !Number.isFinite(requested) || requested <= 0) {
175
+ const seen = typeof requested === "string" ? JSON.stringify(requested) : String(requested);
176
+ return {
177
+ refusal: `dispatch refused: waitMs must be a positive finite number of milliseconds (got ${seen}). ` +
178
+ `The blocking wait is bounded by routing.mcp.maxWaitMs (currently ${ceiling} ms): omit ` +
179
+ `waitMs to wait the full ceiling, or pass a smaller one — a larger one is clamped to the ` +
180
+ `ceiling and the clamp is announced.`,
181
+ };
182
+ }
183
+ if (requested > ceiling) {
184
+ return { waitMs: ceiling, clamped: true, requested };
185
+ }
186
+ return { waitMs: requested, clamped: false, requested };
187
+ }
166
188
  function readRecord(params, key) {
167
189
  const v = params[key];
168
190
  return typeof v === "object" && v !== null && !Array.isArray(v) ? v : undefined;
@@ -282,7 +304,7 @@ function applyLaneEnv(base, deltas) {
282
304
  }
283
305
  return env;
284
306
  }
285
- function laneSummary(lane) {
307
+ function laneSummary(lane, inFlight) {
286
308
  const bits = [`${lane.position}. ${lane.id}`, `[${lane.state}]`];
287
309
  if (lane.spec)
288
310
  bits.push(lane.spec);
@@ -296,6 +318,12 @@ function laneSummary(lane) {
296
318
  bits.push(lane.note);
297
319
  if (lane.attemptBudget)
298
320
  bits.push(formatAttemptBudget(lane.attemptBudget));
321
+ if (lane.maxConcurrent !== null && lane.maxConcurrent !== undefined) {
322
+ bits.push(`in flight: ${inFlight} of ${lane.maxConcurrent}`);
323
+ }
324
+ else if (inFlight > 0) {
325
+ bits.push(`in flight: ${inFlight}`);
326
+ }
299
327
  if (lane.pinned)
300
328
  bits.push(`pinned until ${lane.pinned.until} (${lane.pinned.reason})`);
301
329
  if (lane.demoted)
@@ -426,7 +454,7 @@ export class McpDispatchServer {
426
454
  return textResult(`No dispatch ladder is configured. ${view.reason}\n\n` +
427
455
  "Add rungs under routing.ladder (or routing.ladders.<tier>) in the relay config.");
428
456
  }
429
- const lines = view.ladder.map(laneSummary);
457
+ const lines = view.ladder.map((l) => laneSummary(l, this.jobs.inFlight(l.id)));
430
458
  const next = view.next ? `\n\nnext: ${view.next.id} — ${view.reason}` : `\n\nnext: none — ${view.reason}`;
431
459
  return textResult(`tier: ${view.tier ?? "default"}\n\n${lines.join("\n")}${next}`);
432
460
  }
@@ -497,12 +525,15 @@ export class McpDispatchServer {
497
525
  enabled: walk !== null,
498
526
  lanesNotTried: Math.max(0, order.length - ordered.length),
499
527
  });
500
- const waitMs = readNumber(args, "waitMs") ?? DEFAULT_WAIT_MS;
528
+ const ceiling = this.deps.config.routing?.mcp?.maxWaitMs ?? DEFAULT_MCP_MAX_WAIT_MS;
529
+ const waitMs = resolveWaitMs(args["waitMs"], ceiling);
530
+ if ("refusal" in waitMs)
531
+ return textResult(waitMs.refusal, true);
501
532
  const settled = this.runWalk(job.id, view, ordered, task, opts).catch((e) => {
502
533
  this.jobs.fail(job.id, `dispatch walk failed: ${e.message}`);
503
534
  return "done";
504
535
  });
505
- return this.awaitOrPoll(job.id, settled, waitMs);
536
+ return this.awaitOrPoll(job.id, settled, waitMs.waitMs, waitMs.clamped ? { requested: waitMs.requested, ceiling } : undefined);
506
537
  }
507
538
  async runWalk(jobId, view, laneIds, task, opts) {
508
539
  for (let i = 0; i < laneIds.length; i++) {
@@ -512,6 +543,8 @@ export class McpDispatchServer {
512
543
  const lane = laneId === undefined ? undefined : view.ladder.find((l) => l.id === laneId);
513
544
  if (lane === undefined)
514
545
  continue;
546
+ if (this.skipIfAtConcurrencyCap(jobId, lane))
547
+ continue;
515
548
  this.jobs.setCurrentLane(jobId, lane.id, lane.spec);
516
549
  const isLast = i === laneIds.length - 1;
517
550
  const startedAt = this.now();
@@ -542,12 +575,32 @@ export class McpDispatchServer {
542
575
  return "done";
543
576
  }
544
577
  }
545
- const ran = this.jobs.get(jobId)?.attempts.length ?? 0;
546
- this.jobs.fail(jobId, ran === 0
547
- ? "no lane in the dispatch ladder matched the selection order"
548
- : `no lane answered, and the ladder no longer holds the remaining lanes in the selection order (${ran} tried)`);
578
+ const attempts = this.jobs.get(jobId)?.attempts ?? [];
579
+ const ran = attempts.filter((a) => attemptWasTried(a.status)).length;
580
+ const allSkipped = attempts.length > 0 && ran === 0;
581
+ this.jobs.fail(jobId, allSkipped
582
+ ? "every remaining lane in the selection order is at its maxConcurrent cap"
583
+ : ran === 0
584
+ ? "no lane in the dispatch ladder matched the selection order"
585
+ : `no lane answered, and the ladder no longer holds the remaining lanes in the selection order (${ran} tried)`);
549
586
  return "done";
550
587
  }
588
+ skipIfAtConcurrencyCap(jobId, lane) {
589
+ if (lane.maxConcurrent === null || lane.maxConcurrent === undefined)
590
+ return false;
591
+ const inFlight = this.jobs.inFlight(lane.id, jobId);
592
+ if (inFlight < lane.maxConcurrent)
593
+ return false;
594
+ this.jobs.recordAttempt(jobId, {
595
+ laneId: lane.id,
596
+ spec: lane.spec,
597
+ status: SKIPPED_LANE_STATUS,
598
+ elapsedMs: 0,
599
+ reason: `lane "${lane.id}" is at its maxConcurrent (${inFlight} in flight)`,
600
+ });
601
+ this.jobs.noteSkippedLane(jobId);
602
+ return true;
603
+ }
551
604
  async runOneLane(jobId, lane, task, opts, budgetMs) {
552
605
  const started = this.startLane(jobId, lane, task, opts);
553
606
  if ("refusal" in started)
@@ -730,7 +783,7 @@ export class McpDispatchServer {
730
783
  const text = extractAnswerText(parsed, opts.schema !== undefined);
731
784
  return { run: { code: 0, stdout: text, stderr: "", timedOut: false }, relay };
732
785
  }
733
- async awaitOrPoll(jobId, settled, waitMs) {
786
+ async awaitOrPoll(jobId, settled, waitMs, clamp) {
734
787
  const raced = await Promise.race([
735
788
  settled,
736
789
  new Promise((resolve) => {
@@ -743,7 +796,11 @@ export class McpDispatchServer {
743
796
  if (!current)
744
797
  return textResult(`unknown jobId: ${jobId}`, true);
745
798
  if (raced === "pending") {
746
- return textResult(`${describeJob(current, this.now())}\n\nStill running after ${Math.round(waitMs / 1000)}s. ` +
799
+ const waitedS = Math.round(waitMs / 1000);
800
+ const announcement = clamp === undefined
801
+ ? ""
802
+ : `waited ${waitedS} s (waitMs ${clamp.requested} clamped to routing.mcp.maxWaitMs ${clamp.ceiling})\n`;
803
+ return textResult(`${describeJob(current, this.now())}\n\n${announcement}Still running after ${waitedS}s. ` +
747
804
  `Poll dispatch_status with jobId "${jobId}", then call dispatch_result.`);
748
805
  }
749
806
  return textResult(jobAnswer(current, this.now()), isFailureStatus(current.status));