@jmanuelcorral/openteam 0.13.1 → 0.14.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.
@@ -1 +1 @@
1
- {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"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"}
package/dist/index.js CHANGED
@@ -95,8 +95,8 @@ var AgentRoleProfileSchema = z.object({
95
95
  preferredFrontierModels: z.array(z.union([modelSelectionSchema, z.literal("auto")])),
96
96
  localFirst: z.boolean(),
97
97
  requiresLocalRuntime: z.boolean().optional(),
98
- localRuntimes: z.array(z.enum(["ollama", "lmstudio", "foundry-local", "lemonade"])).optional(),
99
- localModels: z.partialRecord(z.enum(["ollama", "lmstudio", "foundry-local", "lemonade"]), z.string().min(1)).optional()
98
+ localRuntimes: z.array(z.string().min(1)).optional(),
99
+ localModels: z.record(z.string().min(1), z.string().min(1)).optional()
100
100
  }).strict();
101
101
  var TEAM_ROLES = {
102
102
  architect: {
@@ -403,14 +403,33 @@ var defaultFrontierModel = {
403
403
  modelID: "claude-sonnet-4-5"
404
404
  };
405
405
  var DEFAULT_LOCAL_MAX_CONCURRENCY = 4;
406
+ var LocalRuntimeKindSchema = z2.enum([
407
+ "ollama",
408
+ "lmstudio",
409
+ "foundry-local",
410
+ "lemonade"
411
+ ]);
406
412
  var LocalRuntimeSchema = z2.object({
407
- id: z2.enum(["ollama", "lmstudio", "foundry-local", "lemonade"]),
413
+ id: z2.string().min(1),
414
+ kind: LocalRuntimeKindSchema.optional(),
408
415
  enabled: z2.boolean().default(true),
409
416
  baseURL: z2.string().url().optional(),
410
417
  discovery: z2.enum(["cli", "sdk", "manual"]).optional(),
411
418
  defaultModel: ModelRefSchema,
412
419
  maxConcurrency: z2.number().int().positive().optional()
413
- }).strict();
420
+ }).strict().superRefine((runtime, ctx) => {
421
+ const resolvedKind = runtime.kind ?? runtime.id;
422
+ if (!LocalRuntimeKindSchema.safeParse(resolvedKind).success) {
423
+ ctx.addIssue({
424
+ code: z2.ZodIssueCode.custom,
425
+ path: ["kind"],
426
+ message: `local runtime "${runtime.id}" has no resolvable kind: add "kind" ` + "(one of ollama, lmstudio, foundry-local, lemonade), since the id is " + "not itself a runtime kind."
427
+ });
428
+ }
429
+ });
430
+ function localRuntimeKind(runtime) {
431
+ return runtime.kind ?? runtime.id;
432
+ }
414
433
  var MemoryScopeSchema = z2.enum(["project", "user"]);
415
434
  var MemoryExtractionModeSchema = z2.enum([
416
435
  "local",
@@ -492,7 +511,23 @@ var OpenTeamConfigObjectSchema = z2.object({
492
511
  localOnly: false
493
512
  }),
494
513
  local: z2.object({
495
- runtimes: z2.array(LocalRuntimeSchema).default([])
514
+ runtimes: z2.array(LocalRuntimeSchema).default([]).superRefine((runtimes, ctx) => {
515
+ const seen = new Set;
516
+ for (let index = 0;index < runtimes.length; index += 1) {
517
+ const runtime = runtimes[index];
518
+ if (runtime === undefined) {
519
+ continue;
520
+ }
521
+ if (seen.has(runtime.id)) {
522
+ ctx.addIssue({
523
+ code: z2.ZodIssueCode.custom,
524
+ path: [index, "id"],
525
+ message: `duplicate local runtime id "${runtime.id}": each local.runtimes[].id must be unique within the array.`
526
+ });
527
+ }
528
+ seen.add(runtime.id);
529
+ }
530
+ })
496
531
  }).strict().default({
497
532
  runtimes: []
498
533
  }),
@@ -2681,6 +2716,7 @@ var KNOWN_CONFIG_KEYS_BY_PATH = new Map([
2681
2716
  "local.runtimes[]",
2682
2717
  [
2683
2718
  "id",
2719
+ "kind",
2684
2720
  "enabled",
2685
2721
  "baseURL",
2686
2722
  "discovery",
@@ -3031,6 +3067,16 @@ var MeetingEventSchema = EventBaseSchema.extend({
3031
3067
  roles: z11.array(z11.string().min(1)),
3032
3068
  decisionIDs: z11.array(z11.string().min(1)).optional()
3033
3069
  });
3070
+ var QueueEventSchema = EventBaseSchema.extend({
3071
+ type: z11.literal("queue"),
3072
+ runtimeId: z11.string().min(1),
3073
+ waitedMs: z11.number().finite().min(0),
3074
+ activeCount: z11.number().int().min(0),
3075
+ queuedCount: z11.number().int().min(0),
3076
+ decisionID: z11.string().min(1).optional(),
3077
+ agent: z11.string().min(1).optional(),
3078
+ batchID: z11.string().min(1).optional()
3079
+ });
3034
3080
  var DecisionEventSchema = EventBaseSchema.extend({
3035
3081
  type: z11.literal("decision"),
3036
3082
  agent: z11.string().min(1).optional(),
@@ -3076,6 +3122,7 @@ var OpenTeamEventSchema = z11.discriminatedUnion("type", [
3076
3122
  MessageEventSchema,
3077
3123
  ToolcallEventSchema,
3078
3124
  MeetingEventSchema,
3125
+ QueueEventSchema,
3079
3126
  DecisionEventSchema,
3080
3127
  ActivityEventSchema,
3081
3128
  SessionEndpointEventSchema,
@@ -5052,11 +5099,14 @@ function createRuntimeConcurrencyLimiter(options) {
5052
5099
  acquire(runtimeId) {
5053
5100
  const immediate = tryAcquire(runtimeId);
5054
5101
  if (immediate !== undefined) {
5055
- return Promise.resolve(immediate);
5102
+ return Promise.resolve({ release: immediate, waitedMs: 0 });
5056
5103
  }
5057
5104
  const state = stateFor(runtimeId);
5105
+ const queuedAt = options.now();
5058
5106
  return new Promise((resolve3) => {
5059
- state.queue.push(resolve3);
5107
+ state.queue.push((release) => {
5108
+ resolve3({ release, waitedMs: options.now() - queuedAt });
5109
+ });
5060
5110
  });
5061
5111
  },
5062
5112
  activeCount(runtimeId) {
@@ -5414,10 +5464,11 @@ class RuntimeRegistry {
5414
5464
  continue;
5415
5465
  }
5416
5466
  const probedAt = this.clock();
5417
- const adapter = this.adapters[runtime.id];
5467
+ const adapter = this.adapters[localRuntimeKind(runtime)];
5418
5468
  const options = this.createProbeOptions(runtime, probedAt);
5419
5469
  try {
5420
- snapshots.push(await adapter.probe(options));
5470
+ const snapshot = await adapter.probe(options);
5471
+ snapshots.push({ ...snapshot, id: runtime.id });
5421
5472
  } catch (error) {
5422
5473
  snapshots.push(unavailableSnapshot({
5423
5474
  id: runtime.id,
@@ -5437,7 +5488,7 @@ class RuntimeRegistry {
5437
5488
  if (runtime.baseURL !== undefined) {
5438
5489
  options.baseURL = runtime.baseURL;
5439
5490
  }
5440
- if (runtime.id === "foundry-local" && runtime.discovery !== "manual" && this.foundryDiscovery !== undefined) {
5491
+ if (localRuntimeKind(runtime) === "foundry-local" && runtime.discovery !== "manual" && this.foundryDiscovery !== undefined) {
5441
5492
  options.discovery = this.foundryDiscovery;
5442
5493
  }
5443
5494
  return options;
@@ -6538,6 +6589,28 @@ async function safeEmit(sink, event) {
6538
6589
  await sink.emit(event);
6539
6590
  } catch {}
6540
6591
  }
6592
+ function buildQueueEvent(observation, sessionID, ts, correlation) {
6593
+ const event = {
6594
+ v: EVENT_SCHEMA_VERSION,
6595
+ type: "queue",
6596
+ ts,
6597
+ sessionID,
6598
+ runtimeId: observation.runtimeId,
6599
+ waitedMs: observation.waitedMs,
6600
+ activeCount: observation.activeCount,
6601
+ queuedCount: observation.queuedCount
6602
+ };
6603
+ if (correlation.decisionID !== undefined) {
6604
+ event.decisionID = correlation.decisionID;
6605
+ }
6606
+ if (correlation.agent !== undefined) {
6607
+ event.agent = correlation.agent;
6608
+ }
6609
+ if (correlation.batchID !== undefined) {
6610
+ event.batchID = correlation.batchID;
6611
+ }
6612
+ return event;
6613
+ }
6541
6614
  async function runRoleTaskWithCorrelation(input, deps, correlation, batch) {
6542
6615
  if (getRoleProfile(input.roleID, input.config.orchestrator?.roles) === undefined) {
6543
6616
  warnUnknownRole(input.roleID, deps.warn, deps.warnedRoles);
@@ -6575,16 +6648,40 @@ async function runRoleTaskWithCorrelation(input, deps, correlation, batch) {
6575
6648
  const subsessionDeps = deps.timeoutMs === undefined ? {} : { timeoutMs: deps.timeoutMs };
6576
6649
  const runtimeId = selection.runtimeId;
6577
6650
  let release;
6651
+ let queueObservation;
6578
6652
  if (runtimeId !== undefined && deps.runtimeLimiter !== undefined) {
6579
- release = deps.runtimeLimiter.tryAcquire(runtimeId);
6653
+ const limiter = deps.runtimeLimiter;
6654
+ release = limiter.tryAcquire(runtimeId);
6655
+ let waitedMs = 0;
6580
6656
  if (release === undefined) {
6581
- release = await deps.runtimeLimiter.acquire(runtimeId);
6582
- }
6657
+ const acquisition = await limiter.acquire(runtimeId);
6658
+ release = acquisition.release;
6659
+ waitedMs = acquisition.waitedMs;
6660
+ }
6661
+ queueObservation = {
6662
+ runtimeId,
6663
+ waitedMs,
6664
+ activeCount: limiter.activeCount(runtimeId),
6665
+ queuedCount: limiter.queuedCount(runtimeId)
6666
+ };
6583
6667
  }
6584
6668
  try {
6585
6669
  const subsession = await runSubsession(deps.client, request, subsessionDeps);
6586
6670
  const record = buildRecord(input, decision2, subsession, deps, correlation.decisionID, correlation.batchID);
6587
6671
  await safeEmit(deps.sink, correlatedCostRecordToRouteEvent(record));
6672
+ if (queueObservation !== undefined) {
6673
+ const sessionID = recordSessionID(input, subsession);
6674
+ if (sessionID !== undefined) {
6675
+ const queueCorrelation = {
6676
+ decisionID: correlation.decisionID,
6677
+ agent: input.roleID
6678
+ };
6679
+ if (correlation.batchID !== undefined) {
6680
+ queueCorrelation.batchID = correlation.batchID;
6681
+ }
6682
+ await safeEmit(deps.sink, buildQueueEvent(queueObservation, sessionID, deps.now(), queueCorrelation));
6683
+ }
6684
+ }
6588
6685
  return { decision: decision2, subsession, record };
6589
6686
  } finally {
6590
6687
  release?.();
@@ -7505,6 +7602,60 @@ function createTelemetryEventSink(options, deps) {
7505
7602
  return { sink, resolution };
7506
7603
  }
7507
7604
 
7605
+ // src/telemetry/queueWait.ts
7606
+ function percentile(sortedAsc, p) {
7607
+ const rank = Math.ceil(p / 100 * sortedAsc.length);
7608
+ const index = Math.min(Math.max(rank, 1), sortedAsc.length) - 1;
7609
+ return sortedAsc[index] ?? 0;
7610
+ }
7611
+ function summarizeGroup(runtimeId, waits, maxQueued, maxActive) {
7612
+ const sorted = [...waits].sort((a, b) => a - b);
7613
+ return {
7614
+ runtimeId,
7615
+ samples: sorted.length,
7616
+ contended: sorted.filter((wait) => wait > 0).length,
7617
+ p50Ms: percentile(sorted, 50),
7618
+ p95Ms: percentile(sorted, 95),
7619
+ maxMs: sorted[sorted.length - 1] ?? 0,
7620
+ maxQueued,
7621
+ maxActive
7622
+ };
7623
+ }
7624
+ function summarizeQueueWaits(events) {
7625
+ if (events.length === 0) {
7626
+ return;
7627
+ }
7628
+ const allWaits = [];
7629
+ let overallMaxQueued = 0;
7630
+ let overallMaxActive = 0;
7631
+ const byRuntime = new Map;
7632
+ for (const event of events) {
7633
+ allWaits.push(event.waitedMs);
7634
+ overallMaxQueued = Math.max(overallMaxQueued, event.queuedCount);
7635
+ overallMaxActive = Math.max(overallMaxActive, event.activeCount);
7636
+ let group = byRuntime.get(event.runtimeId);
7637
+ if (group === undefined) {
7638
+ group = { waits: [], maxQueued: 0, maxActive: 0 };
7639
+ byRuntime.set(event.runtimeId, group);
7640
+ }
7641
+ group.waits.push(event.waitedMs);
7642
+ group.maxQueued = Math.max(group.maxQueued, event.queuedCount);
7643
+ group.maxActive = Math.max(group.maxActive, event.activeCount);
7644
+ }
7645
+ const overall = summarizeGroup("*", allWaits, overallMaxQueued, overallMaxActive);
7646
+ const perRuntime = [...byRuntime.entries()].sort(([a], [b]) => a.localeCompare(b)).map(([runtimeId, group]) => summarizeGroup(runtimeId, group.waits, group.maxQueued, group.maxActive));
7647
+ return {
7648
+ samples: overall.samples,
7649
+ contended: overall.contended,
7650
+ p50Ms: overall.p50Ms,
7651
+ p95Ms: overall.p95Ms,
7652
+ maxMs: overall.maxMs,
7653
+ maxQueued: overall.maxQueued,
7654
+ maxActive: overall.maxActive,
7655
+ perRuntime
7656
+ };
7657
+ }
7658
+
7508
7659
  // src/web/paths.ts
7509
7660
  var DEFAULT_DECISIONS_PATH = ".opencode/openteam/decisions.md";
7510
7661
 
@@ -7982,6 +8133,24 @@ function isNetworkRuntime(baseURL) {
7982
8133
  return false;
7983
8134
  }
7984
8135
  }
8136
+ function queueWaitSection(view) {
8137
+ const lines = [" local queue wait (#144, per openteam process):"];
8138
+ const summary = view.summary;
8139
+ if (summary === undefined || summary.samples === 0) {
8140
+ lines.push(" (no queue samples recorded yet — run an orchestrated load, then re-run doctor)");
8141
+ return lines;
8142
+ }
8143
+ const mark = summary.contended > 0 ? "⚠" : "✓";
8144
+ lines.push(` ${mark} ${summary.samples} dispatch(es), ${summary.contended} queued — ` + `p50 ${summary.p50Ms}ms · p95 ${summary.p95Ms}ms · max ${summary.maxMs}ms`);
8145
+ lines.push(` peak depth: ${summary.maxActive} active · ${summary.maxQueued} queued`);
8146
+ for (const runtime of summary.perRuntime) {
8147
+ lines.push(` ${runtime.runtimeId.padEnd(14)} ${runtime.samples} sample(s), ` + `${runtime.contended} queued — p50 ${runtime.p50Ms}ms · p95 ${runtime.p95Ms}ms · ` + `max ${runtime.maxMs}ms · peak ${runtime.maxActive} active/${runtime.maxQueued} queued`);
8148
+ }
8149
+ if (summary.contended > 0) {
8150
+ lines.push(" Lower a runtime's maxConcurrency in .opencode/openteam.json to leave slots for interactive traffic.");
8151
+ }
8152
+ return lines;
8153
+ }
7985
8154
  function failureReasonText(reason, searchedPaths) {
7986
8155
  switch (reason) {
7987
8156
  case "provider-not-configured": {
@@ -8198,6 +8367,9 @@ function renderDoctor(input) {
8198
8367
  lines.push(` ⚠ ${snapshot.id} is reached over the network: its ${cap}-slot cap is enforced per openteam process, so`, " two processes at once (an opencode session plus 'openteam console') can together exceed it.");
8199
8368
  }
8200
8369
  lines.push(` telemetry: ${input.telemetryPath} — ${input.telemetryRecords} record(s)`);
8370
+ if (input.queueWait !== undefined) {
8371
+ lines.push(...queueWaitSection(input.queueWait));
8372
+ }
8201
8373
  if (input.diagnostics !== undefined) {
8202
8374
  lines.push(...diagnosticsSection(input.diagnostics));
8203
8375
  }
@@ -10250,6 +10422,12 @@ async function runCli(argv, deps) {
10250
10422
  rosterLoadError = err instanceof Error ? err.message : String(err);
10251
10423
  }
10252
10424
  }
10425
+ let queueWait;
10426
+ if (deps.readQueueEvents !== undefined) {
10427
+ const queueEvents = await deps.readQueueEvents();
10428
+ const summary = summarizeQueueWaits(queueEvents);
10429
+ queueWait = summary !== undefined ? { summary } : {};
10430
+ }
10253
10431
  return {
10254
10432
  exitCode: 0,
10255
10433
  stdout: renderDoctor({
@@ -10259,6 +10437,7 @@ async function runCli(argv, deps) {
10259
10437
  telemetryRecords: records.length,
10260
10438
  agentModels,
10261
10439
  opencodeConfigPaths,
10440
+ ...queueWait !== undefined ? { queueWait } : {},
10262
10441
  ...rosterAudit !== undefined ? { rosterAudit } : {},
10263
10442
  ...rosterRoleCount !== undefined ? { rosterRoleCount } : {},
10264
10443
  ...rosterLoadError !== undefined ? { rosterLoadError } : {},
@@ -13087,7 +13266,7 @@ var createOtlpSpanExporter = (connection, config) => {
13087
13266
  // package.json
13088
13267
  var package_default = {
13089
13268
  name: "@jmanuelcorral/openteam",
13090
- version: "0.13.1",
13269
+ version: "0.14.0",
13091
13270
  packageManager: "bun@1.3.14",
13092
13271
  description: "Cost-aware, local-first routing plugin for opencode with cheapest-capable frontier fallback and multi-agent orchestration.",
13093
13272
  license: "MIT",
@@ -13827,7 +14006,8 @@ var server = async (ctx, rawOptions) => {
13827
14006
  return reachableRuntimeIds(snapshots);
13828
14007
  };
13829
14008
  const runtimeLimiter = createRuntimeConcurrencyLimiter({
13830
- capacityFor: (id) => config.local.runtimes.find((runtime) => runtime.id === id)?.maxConcurrency ?? DEFAULT_LOCAL_MAX_CONCURRENCY
14009
+ capacityFor: (id) => config.local.runtimes.find((runtime) => runtime.id === id)?.maxConcurrency ?? DEFAULT_LOCAL_MAX_CONCURRENCY,
14010
+ now
13831
14011
  });
13832
14012
  const orchestrateTool = createOrchestrateTool({
13833
14013
  client: orchestrateClient,
@@ -5,6 +5,17 @@ import type { LocalRuntimeId } from "./types";
5
5
  * on error paths.
6
6
  */
7
7
  export type RuntimeSlotRelease = () => void;
8
+ /**
9
+ * Outcome of an `acquire`: the slot release plus how long the caller waited in
10
+ * the FIFO queue before the slot was granted. `waitedMs` is `0` when a slot was
11
+ * free and the acquisition resolved without queuing. It is measured with the
12
+ * injected clock (`RuntimeConcurrencyLimiterOptions.now`), so tests are
13
+ * deterministic and the limiter never reads wall-clock time inline.
14
+ */
15
+ export type RuntimeSlotAcquisition = {
16
+ readonly release: RuntimeSlotRelease;
17
+ readonly waitedMs: number;
18
+ };
8
19
  /**
9
20
  * Per-runtime concurrency limiter with FIFO queuing (#144).
10
21
  *
@@ -30,11 +41,12 @@ export type RuntimeConcurrencyLimiter = {
30
41
  tryAcquire(runtimeId: LocalRuntimeId): RuntimeSlotRelease | undefined;
31
42
  /**
32
43
  * Takes a slot for `runtimeId`, queuing FIFO when the runtime is saturated.
33
- * Resolves with a release once a slot is available. Prefer `tryAcquire` first
34
- * and only `await acquire` when it returns `undefined`, so the common free
35
- * path stays synchronous.
44
+ * Resolves with a release and the measured queue wait once a slot is
45
+ * available. Prefer `tryAcquire` first and only `await acquire` when it
46
+ * returns `undefined`, so the common free path stays synchronous. When a slot
47
+ * is free, resolves immediately with `waitedMs === 0`.
36
48
  */
37
- acquire(runtimeId: LocalRuntimeId): Promise<RuntimeSlotRelease>;
49
+ acquire(runtimeId: LocalRuntimeId): Promise<RuntimeSlotAcquisition>;
38
50
  /** Current in-flight count for a runtime. Exposed for tests and diagnostics. */
39
51
  activeCount(runtimeId: LocalRuntimeId): number;
40
52
  /** Current queued (waiting) count for a runtime. Exposed for tests. */
@@ -47,6 +59,14 @@ export type RuntimeConcurrencyLimiterOptions = {
47
59
  * runtime does not declare a cap. Must return a positive integer.
48
60
  */
49
61
  capacityFor: (runtimeId: LocalRuntimeId) => number;
62
+ /**
63
+ * Injected clock in epoch milliseconds, used ONLY to measure how long a
64
+ * saturated `acquire` waited in the FIFO queue. The free `tryAcquire` path
65
+ * never reads it, so the happy path stays allocation-free and clock-free.
66
+ * Injected (never `Date.now()` inline) so queue-wait telemetry is
67
+ * deterministic under test.
68
+ */
69
+ now: () => number;
50
70
  };
51
71
  export declare function createRuntimeConcurrencyLimiter(options: RuntimeConcurrencyLimiterOptions): RuntimeConcurrencyLimiter;
52
72
  //# sourceMappingURL=concurrency.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"concurrency.d.ts","sourceRoot":"","sources":["../../src/local/concurrency.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,SAAS,CAAC;AAE9C;;;;GAIG;AACH,MAAM,MAAM,kBAAkB,GAAG,MAAM,IAAI,CAAC;AAE5C;;;;;;;;;;;;;;;;GAgBG;AACH,MAAM,MAAM,yBAAyB,GAAG;IACtC;;;OAGG;IACH,UAAU,CAAC,SAAS,EAAE,cAAc,GAAG,kBAAkB,GAAG,SAAS,CAAC;IACtE;;;;;OAKG;IACH,OAAO,CAAC,SAAS,EAAE,cAAc,GAAG,OAAO,CAAC,kBAAkB,CAAC,CAAC;IAChE,gFAAgF;IAChF,WAAW,CAAC,SAAS,EAAE,cAAc,GAAG,MAAM,CAAC;IAC/C,uEAAuE;IACvE,WAAW,CAAC,SAAS,EAAE,cAAc,GAAG,MAAM,CAAC;CAChD,CAAC;AAOF,MAAM,MAAM,gCAAgC,GAAG;IAC7C;;;;OAIG;IACH,WAAW,EAAE,CAAC,SAAS,EAAE,cAAc,KAAK,MAAM,CAAC;CACpD,CAAC;AAEF,wBAAgB,+BAA+B,CAC7C,OAAO,EAAE,gCAAgC,GACxC,yBAAyB,CA4D3B"}
1
+ {"version":3,"file":"concurrency.d.ts","sourceRoot":"","sources":["../../src/local/concurrency.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,SAAS,CAAC;AAE9C;;;;GAIG;AACH,MAAM,MAAM,kBAAkB,GAAG,MAAM,IAAI,CAAC;AAE5C;;;;;;GAMG;AACH,MAAM,MAAM,sBAAsB,GAAG;IACnC,QAAQ,CAAC,OAAO,EAAE,kBAAkB,CAAC;IACrC,QAAQ,CAAC,QAAQ,EAAE,MAAM,CAAC;CAC3B,CAAC;AAEF;;;;;;;;;;;;;;;;GAgBG;AACH,MAAM,MAAM,yBAAyB,GAAG;IACtC;;;OAGG;IACH,UAAU,CAAC,SAAS,EAAE,cAAc,GAAG,kBAAkB,GAAG,SAAS,CAAC;IACtE;;;;;;OAMG;IACH,OAAO,CAAC,SAAS,EAAE,cAAc,GAAG,OAAO,CAAC,sBAAsB,CAAC,CAAC;IACpE,gFAAgF;IAChF,WAAW,CAAC,SAAS,EAAE,cAAc,GAAG,MAAM,CAAC;IAC/C,uEAAuE;IACvE,WAAW,CAAC,SAAS,EAAE,cAAc,GAAG,MAAM,CAAC;CAChD,CAAC;AAOF,MAAM,MAAM,gCAAgC,GAAG;IAC7C;;;;OAIG;IACH,WAAW,EAAE,CAAC,SAAS,EAAE,cAAc,KAAK,MAAM,CAAC;IACnD;;;;;;OAMG;IACH,GAAG,EAAE,MAAM,MAAM,CAAC;CACnB,CAAC;AAEF,wBAAgB,+BAA+B,CAC7C,OAAO,EAAE,gCAAgC,GACxC,yBAAyB,CA+D3B"}
@@ -1,11 +1,11 @@
1
- import type { LocalRuntime } from "../config/schema";
1
+ import { type LocalRuntime } from "../config/schema";
2
2
  import type { ModelSelection } from "../router/types";
3
- import type { Clock, FetchLike, LocalRuntimeId, LocalRuntimeSnapshot, RuntimeAdapter, RuntimeDiscovery } from "./types";
3
+ import type { Clock, FetchLike, LocalRuntimeId, LocalRuntimeKind, LocalRuntimeSnapshot, RuntimeAdapter, RuntimeDiscovery } from "./types";
4
4
  export type RuntimeRegistryOptions = {
5
5
  fetch: FetchLike;
6
6
  clock: Clock;
7
7
  foundryDiscovery?: RuntimeDiscovery;
8
- adapters?: Partial<Record<LocalRuntimeId, RuntimeAdapter>>;
8
+ adapters?: Partial<Record<LocalRuntimeKind, RuntimeAdapter>>;
9
9
  };
10
10
  export declare class RuntimeRegistry {
11
11
  private readonly adapters;
@@ -1 +1 @@
1
- {"version":3,"file":"registry.d.ts","sourceRoot":"","sources":["../../src/local/registry.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,kBAAkB,CAAC;AACrD,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,iBAAiB,CAAC;AAMtD,OAAO,KAAK,EACV,KAAK,EACL,SAAS,EACT,cAAc,EACd,oBAAoB,EACpB,cAAc,EACd,gBAAgB,EAEjB,MAAM,SAAS,CAAC;AAEjB,MAAM,MAAM,sBAAsB,GAAG;IACnC,KAAK,EAAE,SAAS,CAAC;IACjB,KAAK,EAAE,KAAK,CAAC;IACb,gBAAgB,CAAC,EAAE,gBAAgB,CAAC;IACpC,QAAQ,CAAC,EAAE,OAAO,CAAC,MAAM,CAAC,cAAc,EAAE,cAAc,CAAC,CAAC,CAAC;CAC5D,CAAC;AAEF,qBAAa,eAAe;IAC1B,OAAO,CAAC,QAAQ,CAAC,QAAQ,CAAyC;IAClE,OAAO,CAAC,QAAQ,CAAC,KAAK,CAAQ;IAC9B,OAAO,CAAC,QAAQ,CAAC,KAAK,CAAY;IAClC,OAAO,CAAC,QAAQ,CAAC,gBAAgB,CAA+B;IAEhE,YAAY,OAAO,EAAE,sBAAsB,EAW1C;IAEK,KAAK,CACT,QAAQ,EAAE,SAAS,YAAY,EAAE,GAChC,OAAO,CAAC,oBAAoB,EAAE,CAAC,CA2BjC;IAED,OAAO,CAAC,kBAAkB;CAuB3B;AAED,wBAAgB,2BAA2B,CACzC,SAAS,EAAE,SAAS,oBAAoB,EAAE,GACzC,cAAc,EAAE,CAWlB;AAED;;;;;;GAMG;AACH,wBAAgB,mBAAmB,CACjC,SAAS,EAAE,SAAS,oBAAoB,EAAE,GACzC,OAAO,CAET;AAED;;;;;;GAMG;AACH,wBAAgB,mBAAmB,CACjC,SAAS,EAAE,SAAS,oBAAoB,EAAE,GACzC,GAAG,CAAC,cAAc,CAAC,CAQrB"}
1
+ {"version":3,"file":"registry.d.ts","sourceRoot":"","sources":["../../src/local/registry.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,KAAK,YAAY,EAAoB,MAAM,kBAAkB,CAAC;AACvE,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,iBAAiB,CAAC;AAMtD,OAAO,KAAK,EACV,KAAK,EACL,SAAS,EACT,cAAc,EACd,gBAAgB,EAChB,oBAAoB,EACpB,cAAc,EACd,gBAAgB,EAEjB,MAAM,SAAS,CAAC;AAEjB,MAAM,MAAM,sBAAsB,GAAG;IACnC,KAAK,EAAE,SAAS,CAAC;IACjB,KAAK,EAAE,KAAK,CAAC;IACb,gBAAgB,CAAC,EAAE,gBAAgB,CAAC;IACpC,QAAQ,CAAC,EAAE,OAAO,CAAC,MAAM,CAAC,gBAAgB,EAAE,cAAc,CAAC,CAAC,CAAC;CAC9D,CAAC;AAEF,qBAAa,eAAe;IAC1B,OAAO,CAAC,QAAQ,CAAC,QAAQ,CAA2C;IACpE,OAAO,CAAC,QAAQ,CAAC,KAAK,CAAQ;IAC9B,OAAO,CAAC,QAAQ,CAAC,KAAK,CAAY;IAClC,OAAO,CAAC,QAAQ,CAAC,gBAAgB,CAA+B;IAEhE,YAAY,OAAO,EAAE,sBAAsB,EAW1C;IAEK,KAAK,CACT,QAAQ,EAAE,SAAS,YAAY,EAAE,GAChC,OAAO,CAAC,oBAAoB,EAAE,CAAC,CA+BjC;IAED,OAAO,CAAC,kBAAkB;CAuB3B;AAED,wBAAgB,2BAA2B,CACzC,SAAS,EAAE,SAAS,oBAAoB,EAAE,GACzC,cAAc,EAAE,CAWlB;AAED;;;;;;GAMG;AACH,wBAAgB,mBAAmB,CACjC,SAAS,EAAE,SAAS,oBAAoB,EAAE,GACzC,OAAO,CAET;AAED;;;;;;GAMG;AACH,wBAAgB,mBAAmB,CACjC,SAAS,EAAE,SAAS,oBAAoB,EAAE,GACzC,GAAG,CAAC,cAAc,CAAC,CAQrB"}
@@ -1,4 +1,18 @@
1
- export type LocalRuntimeId = "ollama" | "lmstudio" | "foundry-local" | "lemonade";
1
+ /**
2
+ * The KIND of a local runtime — the closed set of adapters openteam knows how to
3
+ * talk to (#214). The kind selects the adapter (`createLMStudioAdapter`, …) and
4
+ * its default base URL; it is NOT an instance identity.
5
+ */
6
+ export type LocalRuntimeKind = "ollama" | "lmstudio" | "foundry-local" | "lemonade";
7
+ /**
8
+ * Instance identity of a configured local runtime (#214). Free-form and unique
9
+ * within `local.runtimes`, so two machines of the same {@link LocalRuntimeKind}
10
+ * (e.g. two LM Studio boxes `lmstudio-a`/`lmstudio-b`) are distinct identities:
11
+ * each is probed on its own `baseURL`, gets its own `maxConcurrency` cap and is
12
+ * addressable by roles. Pre-#214 configs used the kind as the id, which still
13
+ * validates because a bare kind is a valid instance id.
14
+ */
15
+ export type LocalRuntimeId = string;
2
16
  export type LocalModelInfo = {
3
17
  modelID: string;
4
18
  supportsTools: boolean | "unknown";
@@ -31,7 +45,7 @@ export type RuntimeProbeOptions = RuntimeListModelsOptions & {
31
45
  probedAt: string;
32
46
  };
33
47
  export type RuntimeAdapter = {
34
- id: LocalRuntimeId;
48
+ id: LocalRuntimeKind;
35
49
  defaultBaseURL?: string;
36
50
  listModels(options: RuntimeListModelsOptions): Promise<LocalModelInfo[]>;
37
51
  probe(options: RuntimeProbeOptions): Promise<LocalRuntimeSnapshot>;
@@ -1 +1 @@
1
- {"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../../src/local/types.ts"],"names":[],"mappings":"AAAA,MAAM,MAAM,cAAc,GACtB,QAAQ,GACR,UAAU,GACV,eAAe,GACf,UAAU,CAAC;AAEf,MAAM,MAAM,cAAc,GAAG;IAC3B,OAAO,EAAE,MAAM,CAAC;IAChB,aAAa,EAAE,OAAO,GAAG,SAAS,CAAC;IACnC,aAAa,CAAC,EAAE,MAAM,CAAC;CACxB,CAAC;AAEF,MAAM,MAAM,oBAAoB,GAAG;IACjC,EAAE,EAAE,cAAc,CAAC;IACnB,OAAO,EAAE,MAAM,CAAC;IAChB,SAAS,EAAE,OAAO,CAAC;IACnB,MAAM,EAAE,cAAc,EAAE,CAAC;IACzB,QAAQ,EAAE,MAAM,CAAC;IACjB,KAAK,CAAC,EAAE,MAAM,CAAC;CAChB,CAAC;AAEF,MAAM,MAAM,SAAS,GAAG,OAAO,KAAK,CAAC;AAErC,MAAM,MAAM,KAAK,GAAG,MAAM,MAAM,CAAC;AAEjC,MAAM,MAAM,sBAAsB,GAC9B,MAAM,GACN;IAAE,OAAO,EAAE,MAAM,CAAA;CAAE,GACnB;IAAE,IAAI,EAAE,MAAM,CAAC;IAAC,IAAI,CAAC,EAAE,MAAM,CAAC;IAAC,QAAQ,CAAC,EAAE,MAAM,GAAG,OAAO,CAAA;CAAE,CAAC;AAEjE,MAAM,MAAM,gBAAgB,GAAG,MAAM,OAAO,CAAC,sBAAsB,CAAC,CAAC;AAErE,MAAM,MAAM,wBAAwB,GAAG;IACrC,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,KAAK,EAAE,SAAS,CAAC;IACjB,SAAS,CAAC,EAAE,gBAAgB,CAAC;CAC9B,CAAC;AAEF,MAAM,MAAM,mBAAmB,GAAG,wBAAwB,GAAG;IAC3D,QAAQ,EAAE,MAAM,CAAC;CAClB,CAAC;AAEF,MAAM,MAAM,cAAc,GAAG;IAC3B,EAAE,EAAE,cAAc,CAAC;IACnB,cAAc,CAAC,EAAE,MAAM,CAAC;IACxB,UAAU,CAAC,OAAO,EAAE,wBAAwB,GAAG,OAAO,CAAC,cAAc,EAAE,CAAC,CAAC;IACzE,KAAK,CAAC,OAAO,EAAE,mBAAmB,GAAG,OAAO,CAAC,oBAAoB,CAAC,CAAC;CACpE,CAAC"}
1
+ {"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../../src/local/types.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AACH,MAAM,MAAM,gBAAgB,GACxB,QAAQ,GACR,UAAU,GACV,eAAe,GACf,UAAU,CAAC;AAEf;;;;;;;GAOG;AACH,MAAM,MAAM,cAAc,GAAG,MAAM,CAAC;AAEpC,MAAM,MAAM,cAAc,GAAG;IAC3B,OAAO,EAAE,MAAM,CAAC;IAChB,aAAa,EAAE,OAAO,GAAG,SAAS,CAAC;IACnC,aAAa,CAAC,EAAE,MAAM,CAAC;CACxB,CAAC;AAEF,MAAM,MAAM,oBAAoB,GAAG;IACjC,EAAE,EAAE,cAAc,CAAC;IACnB,OAAO,EAAE,MAAM,CAAC;IAChB,SAAS,EAAE,OAAO,CAAC;IACnB,MAAM,EAAE,cAAc,EAAE,CAAC;IACzB,QAAQ,EAAE,MAAM,CAAC;IACjB,KAAK,CAAC,EAAE,MAAM,CAAC;CAChB,CAAC;AAEF,MAAM,MAAM,SAAS,GAAG,OAAO,KAAK,CAAC;AAErC,MAAM,MAAM,KAAK,GAAG,MAAM,MAAM,CAAC;AAEjC,MAAM,MAAM,sBAAsB,GAC9B,MAAM,GACN;IAAE,OAAO,EAAE,MAAM,CAAA;CAAE,GACnB;IAAE,IAAI,EAAE,MAAM,CAAC;IAAC,IAAI,CAAC,EAAE,MAAM,CAAC;IAAC,QAAQ,CAAC,EAAE,MAAM,GAAG,OAAO,CAAA;CAAE,CAAC;AAEjE,MAAM,MAAM,gBAAgB,GAAG,MAAM,OAAO,CAAC,sBAAsB,CAAC,CAAC;AAErE,MAAM,MAAM,wBAAwB,GAAG;IACrC,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,KAAK,EAAE,SAAS,CAAC;IACjB,SAAS,CAAC,EAAE,gBAAgB,CAAC;CAC9B,CAAC;AAEF,MAAM,MAAM,mBAAmB,GAAG,wBAAwB,GAAG;IAC3D,QAAQ,EAAE,MAAM,CAAC;CAClB,CAAC;AAEF,MAAM,MAAM,cAAc,GAAG;IAC3B,EAAE,EAAE,gBAAgB,CAAC;IACrB,cAAc,CAAC,EAAE,MAAM,CAAC;IACxB,UAAU,CAAC,OAAO,EAAE,wBAAwB,GAAG,OAAO,CAAC,cAAc,EAAE,CAAC,CAAC;IACzE,KAAK,CAAC,OAAO,EAAE,mBAAmB,GAAG,OAAO,CAAC,oBAAoB,CAAC,CAAC;CACpE,CAAC"}
@@ -6,7 +6,7 @@ import type { RuntimeConcurrencyLimiter } from "../local/concurrency";
6
6
  import type { LocalRuntimeId } from "../local/types";
7
7
  import type { AvailableModel, RoutingDecision, TaskSignals } from "../router/types";
8
8
  import { type EventSink } from "../telemetry/eventLog";
9
- import { type MeetingEvent, type RouteEvent } from "../telemetry/events";
9
+ import { type MeetingEvent, type QueueEvent, type RouteEvent } from "../telemetry/events";
10
10
  import type { CostRecord } from "../telemetry/types";
11
11
  import { type AgentRoleProfile } from "./roles";
12
12
  import { type OpencodeSessionClient, type SubsessionResult } from "./subsessions";
@@ -215,6 +215,29 @@ export declare function correlatedCostRecordToRouteEvent(record: CorrelatedCostR
215
215
  * ninguna tarea del batch tiene una sesión padre a la que atribuir la reunión.
216
216
  */
217
217
  export declare function buildMeetingEvent(inputs: readonly RoleTaskInput[], batchID: string, decisionIDs: readonly string[], ts: number): MeetingEvent | undefined;
218
+ /**
219
+ * Per-dispatch queue observation captured at the concurrency limiter's
220
+ * acquisition site (#144). `waitedMs` is the FIFO wait the limiter measured with
221
+ * its injected clock (0 when a slot was free); `activeCount`/`queuedCount` are
222
+ * the limiter's counters read at the instant the slot was granted. Ids, counts
223
+ * and a duration only — no prompt content.
224
+ */
225
+ export type QueueWaitObservation = {
226
+ readonly runtimeId: LocalRuntimeId;
227
+ readonly waitedMs: number;
228
+ readonly activeCount: number;
229
+ readonly queuedCount: number;
230
+ };
231
+ /**
232
+ * Builds the redacted `queue` telemetry event from a per-dispatch observation.
233
+ * Pure: no I/O, clock, random, or env. The producer supplies `ts` (from the
234
+ * injected coordinator clock) and the resolved `sessionID`.
235
+ */
236
+ export declare function buildQueueEvent(observation: QueueWaitObservation, sessionID: string, ts: number, correlation: {
237
+ decisionID?: string;
238
+ agent?: string;
239
+ batchID?: string;
240
+ }): QueueEvent;
218
241
  export declare function runRoleTask(input: RoleTaskInput, deps: CoordinatorDeps): Promise<RoleTaskResult>;
219
242
  export type RoleBatchResult = {
220
243
  readonly batchID: string;
@@ -1 +1 @@
1
- {"version":3,"file":"coordinator.d.ts","sourceRoot":"","sources":["../../src/orchestrator/coordinator.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAC;AAExB,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,wBAAwB,CAAC;AAE1D,OAAO,KAAK,EAEV,sBAAsB,EACvB,MAAM,uBAAuB,CAAC;AAC/B,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,kBAAkB,CAAC;AACvD,OAAO,KAAK,EAAE,yBAAyB,EAAE,MAAM,sBAAsB,CAAC;AACtE,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,gBAAgB,CAAC;AAErD,OAAO,KAAK,EACV,cAAc,EACd,eAAe,EAEf,WAAW,EACZ,MAAM,iBAAiB,CAAC;AAEzB,OAAO,EAA0B,KAAK,SAAS,EAAE,MAAM,uBAAuB,CAAC;AAC/E,OAAO,EAEL,KAAK,YAAY,EAEjB,KAAK,UAAU,EAChB,MAAM,qBAAqB,CAAC;AAE7B,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,oBAAoB,CAAC;AAErD,OAAO,EACL,KAAK,gBAAgB,EAKtB,MAAM,SAAS,CAAC;AAKjB,OAAO,EACL,KAAK,qBAAqB,EAG1B,KAAK,gBAAgB,EACtB,MAAM,eAAe,CAAC;AAEvB,MAAM,MAAM,aAAa,GAAG;IAC1B,MAAM,EAAE,MAAM,CAAC;IACf,IAAI,EAAE,WAAW,CAAC;IAClB,MAAM,EAAE,MAAM,CAAC;IACf,QAAQ,CAAC,EAAE,sBAAsB,EAAE,CAAC;IACpC,eAAe,CAAC,EAAE,cAAc,EAAE,CAAC;IACnC,WAAW,CAAC,EAAE,WAAW,CAAC;IAC1B,eAAe,CAAC,EAAE,MAAM,CAAC;IACzB,MAAM,EAAE,cAAc,CAAC;IACvB,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,YAAY,CAAC,EAAE,MAAM,CAAC;IACtB,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB;;;;;;OAMG;IACH,aAAa,CAAC,EAAE,MAAM,CAAC;IACvB,wEAAwE;IACxE,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,qFAAqF;IACrF,SAAS,CAAC,EAAE,SAAS,MAAM,EAAE,CAAC;CAC/B,CAAC;AAEF,MAAM,MAAM,eAAe,GAAG;IAC5B,MAAM,EAAE,qBAAqB,CAAC;IAC9B,IAAI,EAAE,SAAS,CAAC;IAChB,GAAG,EAAE,MAAM,MAAM,CAAC;IAClB,aAAa,EAAE,MAAM,MAAM,CAAC;IAC5B,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,4EAA4E;IAC5E,IAAI,CAAC,EAAE,CAAC,OAAO,CAAC,EAAE,OAAO,KAAK,IAAI,CAAC;IACnC;;;;;OAKG;IACH,WAAW,CAAC,EAAE,GAAG,CAAC,MAAM,CAAC,CAAC;IAC1B;;;;;;;;;;;;;OAaG;IACH,qBAAqB,EAAE,MAAM,OAAO,GAAG,OAAO,CAAC,OAAO,CAAC,CAAC;IACxD;;;;;;;;;;;;;OAaG;IACH,mBAAmB,CAAC,EAAE,MAClB,WAAW,CAAC,cAAc,CAAC,GAC3B,OAAO,CAAC,WAAW,CAAC,cAAc,CAAC,CAAC,CAAC;IACzC;;;;;;;;;;;OAWG;IACH,cAAc,CAAC,EAAE,yBAAyB,CAAC;CAC5C,CAAC;AAEF,MAAM,MAAM,oBAAoB,GAAG,UAAU,GAAG;IAC9C,UAAU,EAAE,MAAM,CAAC;IACnB,KAAK,EAAE,MAAM,CAAC;IACd,OAAO,EAAE,OAAO,CAAC;IACjB,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,aAAa,CAAC,EAAE,MAAM,CAAC;IACvB,YAAY,CAAC,EAAE,gBAAgB,CAAC,cAAc,CAAC,CAAC;CACjD,CAAC;AAEF,MAAM,MAAM,cAAc,GAAG;IAC3B,QAAQ,EAAE,eAAe,CAAC;IAC1B,UAAU,EAAE,gBAAgB,CAAC;IAC7B,MAAM,EAAE,oBAAoB,CAAC;CAC9B,CAAC;AAEF;;;;;;;;;;;;GAYG;AACH,wBAAgB,eAAe,CAC7B,MAAM,EAAE,MAAM,EACd,IAAI,CAAC,EAAE,CAAC,OAAO,CAAC,EAAE,OAAO,KAAK,IAAI,EAClC,WAAW,CAAC,EAAE,GAAG,CAAC,MAAM,CAAC,GACxB,IAAI,CAaN;AASD;;;;;;GAMG;AACH,wBAAgB,4BAA4B,CAAC,MAAM,EAAE,MAAM,GAAG,MAAM,CAOnE;AAED;;;;;;;;;;;;GAYG;AACH,wBAAgB,yBAAyB,CACvC,IAAI,EAAE,gBAAgB,EACtB,MAAM,EAAE,MAAM,EACd,SAAS,EAAE,OAAO,GAAG,SAAS,GAC7B,IAAI,CAQN;AAED;;;;;;;GAOG;AACH,MAAM,MAAM,iBAAiB,GAAG;IAC9B,QAAQ,CAAC,GAAG,EAAE,OAAO,GAAG,SAAS,CAAC;IAClC,QAAQ,CAAC,GAAG,EAAE,WAAW,CAAC,cAAc,CAAC,GAAG,SAAS,CAAC;CACvD,CAAC;AAoOF;;;;;;;;;;;;;;;GAeG;AACH,eAAO,MAAM,2BAA2B;;;;;;;;;;;;;EAatC,CAAC;AAEH,MAAM,MAAM,qBAAqB,GAAG,CAAC,CAAC,KAAK,CAAC,OAAO,2BAA2B,CAAC,CAAC;AAsHhF,wBAAgB,2BAA2B,CACzC,aAAa,EAAE,MAAM,EACrB,YAAY,EAAE,MAAM,GAAG,SAAS,GAC/B,qBAAqB,CA8BvB;AAED;;;;;;;GAOG;AACH,wBAAgB,4BAA4B,CAC1C,KAAK,EACD;IACE,QAAQ,CAAC,IAAI,CAAC,EAAE,MAAM,GAAG,SAAS,CAAC;IACnC,QAAQ,CAAC,OAAO,CAAC,EAAE,MAAM,GAAG,SAAS,CAAC;CACvC,GACD,SAAS,GACZ,qBAAqB,CASvB;AAED;;;;;;;;GAQG;AACH,wBAAgB,gCAAgC,CAC9C,MAAM,EAAE,oBAAoB,GAC3B,UAAU,CA4BZ;AAED;;;GAGG;AACH,wBAAgB,iBAAiB,CAC/B,MAAM,EAAE,SAAS,aAAa,EAAE,EAChC,OAAO,EAAE,MAAM,EACf,WAAW,EAAE,SAAS,MAAM,EAAE,EAC9B,EAAE,EAAE,MAAM,GACT,YAAY,GAAG,SAAS,CAkB1B;AAkHD,wBAAsB,WAAW,CAC/B,KAAK,EAAE,aAAa,EACpB,IAAI,EAAE,eAAe,GACpB,OAAO,CAAC,cAAc,CAAC,CAUzB;AAED,MAAM,MAAM,eAAe,GAAG;IAC5B,QAAQ,CAAC,OAAO,EAAE,MAAM,CAAC;IACzB,QAAQ,CAAC,OAAO,EAAE,cAAc,EAAE,CAAC;IACnC,oFAAoF;IACpF,QAAQ,CAAC,SAAS,EAAE,SAAS,MAAM,EAAE,CAAC;CACvC,CAAC;AAEF;;;;GAIG;AACH,wBAAgB,gBAAgB,CAC9B,MAAM,EAAE,SAAS,aAAa,EAAE,GAC/B,aAAa,EAAE,EAAE,CA2BnB;AAED,wBAAsB,YAAY,CAChC,MAAM,EAAE,SAAS,aAAa,EAAE,EAChC,IAAI,EAAE,eAAe,GACpB,OAAO,CAAC,eAAe,CAAC,CAiE1B"}
1
+ {"version":3,"file":"coordinator.d.ts","sourceRoot":"","sources":["../../src/orchestrator/coordinator.ts"],"names":[],"mappings":"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"}
@@ -70,18 +70,8 @@ export declare const AgentRoleProfileSchema: z.ZodObject<{
70
70
  }, z.core.$strict>, z.ZodLiteral<"auto">]>>;
71
71
  localFirst: z.ZodBoolean;
72
72
  requiresLocalRuntime: z.ZodOptional<z.ZodBoolean>;
73
- localRuntimes: z.ZodOptional<z.ZodArray<z.ZodEnum<{
74
- "foundry-local": "foundry-local";
75
- lemonade: "lemonade";
76
- lmstudio: "lmstudio";
77
- ollama: "ollama";
78
- }>>>;
79
- localModels: z.ZodOptional<z.ZodRecord<z.ZodEnum<{
80
- "foundry-local": "foundry-local";
81
- lemonade: "lemonade";
82
- lmstudio: "lmstudio";
83
- ollama: "ollama";
84
- }> & z.core.$partial, z.ZodString>>;
73
+ localRuntimes: z.ZodOptional<z.ZodArray<z.ZodString>>;
74
+ localModels: z.ZodOptional<z.ZodRecord<z.ZodString, z.ZodString>>;
85
75
  }, z.core.$strict>;
86
76
  export declare const TEAM_ROLES: Record<string, AgentRoleProfile>;
87
77
  export declare function isKnownNonWorkerRole(roleID: string): boolean;
@@ -1 +1 @@
1
- {"version":3,"file":"roles.d.ts","sourceRoot":"","sources":["../../src/orchestrator/roles.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAC;AAGxB,OAAO,KAAK,EACV,qBAAqB,EACrB,cAAc,EACf,MAAM,uBAAuB,CAAC;AAC/B,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,gBAAgB,CAAC;AACrD,OAAO,KAAK,EAAE,cAAc,EAAE,WAAW,EAAE,MAAM,iBAAiB,CAAC;AAEnE,MAAM,MAAM,gBAAgB,GAAG;IAC7B,MAAM,EAAE,MAAM,CAAC;IACf,aAAa,CAAC,EAAE,MAAM,CAAC;IACvB,WAAW,EAAE,cAAc,CAAC;IAC5B,gBAAgB,EAAE,CAAC,GAAG,CAAC,GAAG,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC;IACpC,kBAAkB,EAAE,CAAC,GAAG,CAAC,GAAG,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC;IACtC,yBAAyB,EAAE,OAAO,CAAC;IACnC,uBAAuB,EAAE,KAAK,CAAC,cAAc,GAAG,MAAM,CAAC,CAAC;IACxD,UAAU,EAAE,OAAO,CAAC;IACpB;;;;;;;;;OASG;IACH,oBAAoB,CAAC,EAAE,OAAO,CAAC;IAC/B;;;;;;;;;;;;;OAaG;IACH,aAAa,CAAC,EAAE,cAAc,EAAE,CAAC;IACjC;;;;;;;;;;;;OAYG;IACH,WAAW,CAAC,EAAE,OAAO,CAAC,MAAM,CAAC,cAAc,EAAE,MAAM,CAAC,CAAC,CAAC;CACvD,CAAC;AAiBF,eAAO,MAAM,sBAAsB;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;kBAwBxB,CAAC;AAGZ,eAAO,MAAM,UAAU,EAAE,MAAM,CAAC,MAAM,EAAE,gBAAgB,CA8FvD,CAAC;AAcF,wBAAgB,oBAAoB,CAAC,MAAM,EAAE,MAAM,GAAG,OAAO,CAI5D;AA6BD;;;;;;;;;;;;;;;;;GAiBG;AACH,wBAAgB,cAAc,CAC5B,MAAM,EAAE,MAAM,EACd,eAAe,CAAC,EAAE,QAAQ,CAAC,MAAM,CAAC,MAAM,EAAE,gBAAgB,CAAC,CAAC,GAC3D,gBAAgB,GAAG,SAAS,CAO9B;AAED;;;;;;;;;;;GAWG;AACH,wBAAgB,yBAAyB,CAAC,MAAM,EAAE,MAAM,GAAG,gBAAgB,CAW1E;AAED,wBAAgB,iBAAiB,CAC/B,IAAI,EAAE,gBAAgB,EACtB,IAAI,EAAE,WAAW,EACjB,IAAI,CAAC,EAAE,cAAc,GACpB,qBAAqB,CAevB"}
1
+ {"version":3,"file":"roles.d.ts","sourceRoot":"","sources":["../../src/orchestrator/roles.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAC;AAGxB,OAAO,KAAK,EACV,qBAAqB,EACrB,cAAc,EACf,MAAM,uBAAuB,CAAC;AAC/B,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,gBAAgB,CAAC;AACrD,OAAO,KAAK,EAAE,cAAc,EAAE,WAAW,EAAE,MAAM,iBAAiB,CAAC;AAEnE,MAAM,MAAM,gBAAgB,GAAG;IAC7B,MAAM,EAAE,MAAM,CAAC;IACf,aAAa,CAAC,EAAE,MAAM,CAAC;IACvB,WAAW,EAAE,cAAc,CAAC;IAC5B,gBAAgB,EAAE,CAAC,GAAG,CAAC,GAAG,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC;IACpC,kBAAkB,EAAE,CAAC,GAAG,CAAC,GAAG,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC;IACtC,yBAAyB,EAAE,OAAO,CAAC;IACnC,uBAAuB,EAAE,KAAK,CAAC,cAAc,GAAG,MAAM,CAAC,CAAC;IACxD,UAAU,EAAE,OAAO,CAAC;IACpB;;;;;;;;;OASG;IACH,oBAAoB,CAAC,EAAE,OAAO,CAAC;IAC/B;;;;;;;;;;;;;OAaG;IACH,aAAa,CAAC,EAAE,cAAc,EAAE,CAAC;IACjC;;;;;;;;;;;;OAYG;IACH,WAAW,CAAC,EAAE,OAAO,CAAC,MAAM,CAAC,cAAc,EAAE,MAAM,CAAC,CAAC,CAAC;CACvD,CAAC;AAiBF,eAAO,MAAM,sBAAsB;;;;;;;;;;;;;;;;;;;;kBAkBxB,CAAC;AAGZ,eAAO,MAAM,UAAU,EAAE,MAAM,CAAC,MAAM,EAAE,gBAAgB,CA8FvD,CAAC;AAcF,wBAAgB,oBAAoB,CAAC,MAAM,EAAE,MAAM,GAAG,OAAO,CAI5D;AA6BD;;;;;;;;;;;;;;;;;GAiBG;AACH,wBAAgB,cAAc,CAC5B,MAAM,EAAE,MAAM,EACd,eAAe,CAAC,EAAE,QAAQ,CAAC,MAAM,CAAC,MAAM,EAAE,gBAAgB,CAAC,CAAC,GAC3D,gBAAgB,GAAG,SAAS,CAO9B;AAED;;;;;;;;;;;GAWG;AACH,wBAAgB,yBAAyB,CAAC,MAAM,EAAE,MAAM,GAAG,gBAAgB,CAW1E;AAED,wBAAgB,iBAAiB,CAC/B,IAAI,EAAE,gBAAgB,EACtB,IAAI,EAAE,WAAW,EACjB,IAAI,CAAC,EAAE,cAAc,GACpB,qBAAqB,CAevB"}
@@ -1,5 +1,5 @@
1
1
  import type { StorageProvider } from "../storage/provider";
2
- import { type DiagnosticEvent, type OpenTeamEvent, type RouteEvent } from "./events";
2
+ import { type DiagnosticEvent, type OpenTeamEvent, type QueueEvent, type RouteEvent } from "./events";
3
3
  import type { CostRecord } from "./types";
4
4
  /** Default directory for session logs that feed the console.
5
5
  * Machine-local runtime output (P15b): lives under `.opencode/openteam-local/`. */
@@ -62,6 +62,12 @@ export declare function routeEventToCostRecord(event: RouteEvent): CostRecord;
62
62
  export declare function readRouteCostRecords(dir: string, deps: ReadSessionEventsDeps): Promise<CostRecord[]>;
63
63
  /** Reads plugin-safe diagnostic events from all session event logs. */
64
64
  export declare function readDiagnosticEvents(dir: string, deps: ReadSessionEventsDeps): Promise<DiagnosticEvent[]>;
65
+ /**
66
+ * Reads the per-dispatch local-runtime queue metric events from all session
67
+ * event logs (#144). These feed the `openteam doctor` queue-wait summary so an
68
+ * operator can see contention that a post-load snapshot cannot reconstruct.
69
+ */
70
+ export declare function readQueueEvents(dir: string, deps: ReadSessionEventsDeps): Promise<QueueEvent[]>;
65
71
  export type ReadSessionEventsDeps = {
66
72
  /** Persistence backend (lists with `list`, reads with `read`). */
67
73
  storage: StorageProvider;
@@ -1 +1 @@
1
- {"version":3,"file":"eventLog.d.ts","sourceRoot":"","sources":["../../src/telemetry/eventLog.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,eAAe,EAAE,MAAM,qBAAqB,CAAC;AAC3D,OAAO,EACL,KAAK,eAAe,EAEpB,KAAK,aAAa,EAElB,KAAK,UAAU,EAChB,MAAM,UAAU,CAAC;AAElB,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,SAAS,CAAC;AAE1C;mFACmF;AACnF,eAAO,MAAM,oBAAoB,sCAAsC,CAAC;AAExE,0EAA0E;AAC1E,eAAO,MAAM,iBAAiB,WAAW,CAAC;AAE1C,mEAAmE;AACnE,MAAM,MAAM,SAAS,GAAG;IACtB,IAAI,EAAE,CAAC,KAAK,EAAE,aAAa,KAAK,OAAO,CAAC,IAAI,CAAC,GAAG,IAAI,CAAC;CACtD,CAAC;AAEF,2DAA2D;AAC3D,wBAAgB,eAAe,CAAC,SAAS,EAAE,MAAM,GAAG,MAAM,CAGzD;AAED,MAAM,MAAM,gBAAgB,GAAG;IAC7B,2CAA2C;IAC3C,GAAG,EAAE,MAAM,CAAC;IACZ,kDAAkD;IAClD,OAAO,EAAE,eAAe,CAAC;IACzB,OAAO,CAAC,EAAE,CAAC,KAAK,EAAE,OAAO,KAAK,IAAI,CAAC;CACpC,CAAC;AAEF;;;GAGG;AACH,wBAAgB,kBAAkB,CAAC,IAAI,EAAE,gBAAgB,GAAG,SAAS,CAepE;AAED,wBAAgB,mBAAmB,IAAI,SAAS,CAE/C;AAED;;GAEG;AACH,MAAM,MAAM,qBAAqB,GAAG;IAClC,QAAQ,CAAC,UAAU,EAAE,MAAM,CAAC;IAC5B,QAAQ,CAAC,MAAM,EAAE,MAAM,CAAC;CACzB,CAAC;AAEF,6CAA6C;AAC7C,MAAM,MAAM,sBAAsB,GAAG;IACnC,QAAQ,CAAC,MAAM,EAAE,aAAa,EAAE,CAAC;IACjC,QAAQ,CAAC,aAAa,EAAE,MAAM,CAAC;IAC/B,QAAQ,CAAC,UAAU,EAAE,SAAS,qBAAqB,EAAE,CAAC;CACvD,CAAC;AAEF;;;;GAIG;AACH,wBAAgB,gBAAgB,CAAC,IAAI,EAAE,MAAM,GAAG,sBAAsB,CA6BrE;AAED,wBAAgB,sBAAsB,CACpC,MAAM,EAAE,sBAAsB,EAC9B,MAAM,EAAE,MAAM,GACb,IAAI,CAaN;AAED,qFAAqF;AACrF,wBAAgB,sBAAsB,CAAC,MAAM,EAAE,UAAU,GAAG,UAAU,CAwBrE;AAED;;;;GAIG;AACH,wBAAgB,sBAAsB,CAAC,KAAK,EAAE,UAAU,GAAG,UAAU,CAsBpE;AAED;;;;;GAKG;AACH,wBAAsB,oBAAoB,CACxC,GAAG,EAAE,MAAM,EACX,IAAI,EAAE,qBAAqB,GAC1B,OAAO,CAAC,UAAU,EAAE,CAAC,CASvB;AAED,uEAAuE;AACvE,wBAAsB,oBAAoB,CACxC,GAAG,EAAE,MAAM,EACX,IAAI,EAAE,qBAAqB,GAC1B,OAAO,CAAC,eAAe,EAAE,CAAC,CAI5B;AAED,MAAM,MAAM,qBAAqB,GAAG;IAClC,kEAAkE;IAClE,OAAO,EAAE,eAAe,CAAC;IACzB,6DAA6D;IAC7D,mBAAmB,CAAC,EAAE,MAAM,CAAC;CAC9B,CAAC;AAEF;;;;GAIG;AACH,wBAAsB,iBAAiB,CACrC,GAAG,EAAE,MAAM,EACX,IAAI,EAAE,qBAAqB,GAC1B,OAAO,CAAC,aAAa,EAAE,CAAC,CAgC1B"}
1
+ {"version":3,"file":"eventLog.d.ts","sourceRoot":"","sources":["../../src/telemetry/eventLog.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,eAAe,EAAE,MAAM,qBAAqB,CAAC;AAC3D,OAAO,EACL,KAAK,eAAe,EAEpB,KAAK,aAAa,EAElB,KAAK,UAAU,EACf,KAAK,UAAU,EAChB,MAAM,UAAU,CAAC;AAElB,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,SAAS,CAAC;AAE1C;mFACmF;AACnF,eAAO,MAAM,oBAAoB,sCAAsC,CAAC;AAExE,0EAA0E;AAC1E,eAAO,MAAM,iBAAiB,WAAW,CAAC;AAE1C,mEAAmE;AACnE,MAAM,MAAM,SAAS,GAAG;IACtB,IAAI,EAAE,CAAC,KAAK,EAAE,aAAa,KAAK,OAAO,CAAC,IAAI,CAAC,GAAG,IAAI,CAAC;CACtD,CAAC;AAEF,2DAA2D;AAC3D,wBAAgB,eAAe,CAAC,SAAS,EAAE,MAAM,GAAG,MAAM,CAGzD;AAED,MAAM,MAAM,gBAAgB,GAAG;IAC7B,2CAA2C;IAC3C,GAAG,EAAE,MAAM,CAAC;IACZ,kDAAkD;IAClD,OAAO,EAAE,eAAe,CAAC;IACzB,OAAO,CAAC,EAAE,CAAC,KAAK,EAAE,OAAO,KAAK,IAAI,CAAC;CACpC,CAAC;AAEF;;;GAGG;AACH,wBAAgB,kBAAkB,CAAC,IAAI,EAAE,gBAAgB,GAAG,SAAS,CAepE;AAED,wBAAgB,mBAAmB,IAAI,SAAS,CAE/C;AAED;;GAEG;AACH,MAAM,MAAM,qBAAqB,GAAG;IAClC,QAAQ,CAAC,UAAU,EAAE,MAAM,CAAC;IAC5B,QAAQ,CAAC,MAAM,EAAE,MAAM,CAAC;CACzB,CAAC;AAEF,6CAA6C;AAC7C,MAAM,MAAM,sBAAsB,GAAG;IACnC,QAAQ,CAAC,MAAM,EAAE,aAAa,EAAE,CAAC;IACjC,QAAQ,CAAC,aAAa,EAAE,MAAM,CAAC;IAC/B,QAAQ,CAAC,UAAU,EAAE,SAAS,qBAAqB,EAAE,CAAC;CACvD,CAAC;AAEF;;;;GAIG;AACH,wBAAgB,gBAAgB,CAAC,IAAI,EAAE,MAAM,GAAG,sBAAsB,CA6BrE;AAED,wBAAgB,sBAAsB,CACpC,MAAM,EAAE,sBAAsB,EAC9B,MAAM,EAAE,MAAM,GACb,IAAI,CAaN;AAED,qFAAqF;AACrF,wBAAgB,sBAAsB,CAAC,MAAM,EAAE,UAAU,GAAG,UAAU,CAwBrE;AAED;;;;GAIG;AACH,wBAAgB,sBAAsB,CAAC,KAAK,EAAE,UAAU,GAAG,UAAU,CAsBpE;AAED;;;;;GAKG;AACH,wBAAsB,oBAAoB,CACxC,GAAG,EAAE,MAAM,EACX,IAAI,EAAE,qBAAqB,GAC1B,OAAO,CAAC,UAAU,EAAE,CAAC,CASvB;AAED,uEAAuE;AACvE,wBAAsB,oBAAoB,CACxC,GAAG,EAAE,MAAM,EACX,IAAI,EAAE,qBAAqB,GAC1B,OAAO,CAAC,eAAe,EAAE,CAAC,CAI5B;AAED;;;;GAIG;AACH,wBAAsB,eAAe,CACnC,GAAG,EAAE,MAAM,EACX,IAAI,EAAE,qBAAqB,GAC1B,OAAO,CAAC,UAAU,EAAE,CAAC,CAIvB;AAED,MAAM,MAAM,qBAAqB,GAAG;IAClC,kEAAkE;IAClE,OAAO,EAAE,eAAe,CAAC;IACzB,6DAA6D;IAC7D,mBAAmB,CAAC,EAAE,MAAM,CAAC;CAC9B,CAAC;AAEF;;;;GAIG;AACH,wBAAsB,iBAAiB,CACrC,GAAG,EAAE,MAAM,EACX,IAAI,EAAE,qBAAqB,GAC1B,OAAO,CAAC,aAAa,EAAE,CAAC,CAgC1B"}