@jmanuelcorral/openteam 0.16.3 → 0.17.1

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.
package/dist/index.js CHANGED
@@ -97,7 +97,8 @@ var AgentRoleProfileSchema = z.object({
97
97
  localFirst: z.boolean(),
98
98
  requiresLocalRuntime: z.boolean().optional(),
99
99
  localRuntimes: z.array(z.string().min(1)).optional(),
100
- localModels: z.record(z.string().min(1), z.string().min(1)).optional()
100
+ localModels: z.record(z.string().min(1), z.string().min(1)).optional(),
101
+ localModelClass: z.enum(["thinking", "coder"]).optional()
101
102
  }).strict();
102
103
  var TEAM_ROLES = {
103
104
  architect: {
@@ -108,7 +109,8 @@ var TEAM_ROLES = {
108
109
  minCodeQualityTier: 5,
109
110
  needsToolCallingByDefault: true,
110
111
  preferredFrontierModels: ["auto"],
111
- localFirst: false
112
+ localFirst: false,
113
+ localModelClass: "thinking"
112
114
  },
113
115
  integration: {
114
116
  roleID: "integration",
@@ -118,7 +120,8 @@ var TEAM_ROLES = {
118
120
  minCodeQualityTier: 4,
119
121
  needsToolCallingByDefault: true,
120
122
  preferredFrontierModels: ["auto"],
121
- localFirst: false
123
+ localFirst: false,
124
+ localModelClass: "coder"
122
125
  },
123
126
  "local-runtime": {
124
127
  roleID: "local-runtime",
@@ -128,7 +131,8 @@ var TEAM_ROLES = {
128
131
  minCodeQualityTier: 4,
129
132
  needsToolCallingByDefault: true,
130
133
  preferredFrontierModels: ["auto"],
131
- localFirst: true
134
+ localFirst: true,
135
+ localModelClass: "coder"
132
136
  },
133
137
  "routing-cost": {
134
138
  roleID: "routing-cost",
@@ -138,7 +142,8 @@ var TEAM_ROLES = {
138
142
  minCodeQualityTier: 4,
139
143
  needsToolCallingByDefault: false,
140
144
  preferredFrontierModels: ["auto"],
141
- localFirst: true
145
+ localFirst: true,
146
+ localModelClass: "thinking"
142
147
  },
143
148
  scribe: {
144
149
  roleID: "scribe",
@@ -171,7 +176,8 @@ var TEAM_ROLES = {
171
176
  needsToolCallingByDefault: false,
172
177
  preferredFrontierModels: [],
173
178
  localFirst: true,
174
- requiresLocalRuntime: true
179
+ requiresLocalRuntime: true,
180
+ localModelClass: "thinking"
175
181
  },
176
182
  tester: {
177
183
  roleID: "tester",
@@ -181,7 +187,8 @@ var TEAM_ROLES = {
181
187
  minCodeQualityTier: 3,
182
188
  needsToolCallingByDefault: true,
183
189
  preferredFrontierModels: ["auto"],
184
- localFirst: true
190
+ localFirst: true,
191
+ localModelClass: "coder"
185
192
  },
186
193
  reviewer: {
187
194
  roleID: "reviewer",
@@ -191,7 +198,8 @@ var TEAM_ROLES = {
191
198
  minCodeQualityTier: 5,
192
199
  needsToolCallingByDefault: false,
193
200
  preferredFrontierModels: ["auto"],
194
- localFirst: true
201
+ localFirst: true,
202
+ localModelClass: "coder"
195
203
  }
196
204
  };
197
205
  var LEGACY_TEAM_ROLE_ALIASES = {
@@ -294,11 +302,11 @@ var GraphEngineSchema = z2.enum(["builtin", "langgraph"]);
294
302
  var DEFAULT_GRAPH_JOURNAL_ROOT = ".opencode/openteam-local/graph/runs";
295
303
  var DEFAULT_GRAPH_WORKTREES_DIR = ".opencode/openteam-local/graph/worktrees";
296
304
  var GraphConfigSchema = z2.object({
297
- mode: GraphModeSchema.default("shadow"),
305
+ mode: GraphModeSchema.default("active"),
298
306
  engine: GraphEngineSchema.optional(),
299
307
  killSwitch: z2.boolean().default(false),
300
308
  journalRoot: z2.string().min(1).default(DEFAULT_GRAPH_JOURNAL_ROOT),
301
- operatorApproval: z2.boolean().default(false),
309
+ operatorApproval: z2.boolean().default(true),
302
310
  worktrees: z2.object({
303
311
  enabled: z2.boolean().default(false)
304
312
  }).strict().default({ enabled: false })
@@ -392,6 +400,9 @@ var OrchestratorRolesSchema = z2.record(z2.string().min(1), z2.unknown()).defaul
392
400
  if (parsed.data.localModels !== undefined) {
393
401
  profile.localModels = parsed.data.localModels;
394
402
  }
403
+ if (parsed.data.localModelClass !== undefined) {
404
+ profile.localModelClass = parsed.data.localModelClass;
405
+ }
395
406
  parsedRoles[roleID] = profile;
396
407
  }
397
408
  return parsedRoles;
@@ -418,7 +429,10 @@ var LocalRuntimeSchema = z2.object({
418
429
  discovery: z2.enum(["cli", "sdk", "manual"]).optional(),
419
430
  defaultModel: ModelRefSchema,
420
431
  maxConcurrency: z2.number().int().positive().optional(),
421
- reservedInteractiveSlots: z2.number().int().nonnegative().optional()
432
+ modelConcurrency: z2.record(z2.string().min(1), z2.number().int().positive()).optional(),
433
+ reservedInteractiveSlots: z2.number().int().nonnegative().optional(),
434
+ thinkingModel: z2.string().min(1).optional(),
435
+ coderModel: z2.string().min(1).optional()
422
436
  }).strict().superRefine((runtime, ctx) => {
423
437
  const resolvedKind = runtime.kind ?? runtime.id;
424
438
  if (!LocalRuntimeKindSchema.safeParse(resolvedKind).success) {
@@ -435,12 +449,6 @@ function localRuntimeKind(runtime) {
435
449
  function effectiveMaxConcurrency(runtime) {
436
450
  return runtime.maxConcurrency ?? DEFAULT_LOCAL_MAX_CONCURRENCY;
437
451
  }
438
- function effectiveReservedInteractiveSlots(runtime) {
439
- if (runtime.reservedInteractiveSlots !== undefined) {
440
- return runtime.reservedInteractiveSlots;
441
- }
442
- return effectiveMaxConcurrency(runtime) >= 2 ? 1 : 0;
443
- }
444
452
  var MemoryScopeSchema = z2.enum(["project", "user"]);
445
453
  var MemoryExtractionModeSchema = z2.enum([
446
454
  "local",
@@ -553,10 +561,10 @@ var OpenTeamConfigObjectSchema = z2.object({
553
561
  storage: StorageConfigSchema,
554
562
  memory: MemoryConfigSchema.optional(),
555
563
  graph: GraphConfigSchema.default({
556
- mode: "shadow",
564
+ mode: "active",
557
565
  killSwitch: false,
558
566
  journalRoot: DEFAULT_GRAPH_JOURNAL_ROOT,
559
- operatorApproval: false,
567
+ operatorApproval: true,
560
568
  worktrees: { enabled: false }
561
569
  }),
562
570
  orchestrator: OrchestratorConfigSchema.optional()
@@ -2741,7 +2749,10 @@ var KNOWN_CONFIG_KEYS_BY_PATH = new Map([
2741
2749
  "discovery",
2742
2750
  "defaultModel",
2743
2751
  "maxConcurrency",
2744
- "reservedInteractiveSlots"
2752
+ "modelConcurrency",
2753
+ "reservedInteractiveSlots",
2754
+ "thinkingModel",
2755
+ "coderModel"
2745
2756
  ]
2746
2757
  ],
2747
2758
  ["local.runtimes[].defaultModel", MODEL_REF_KEYS],
@@ -2918,7 +2929,7 @@ function loadOpenTeamConfig(raw) {
2918
2929
 
2919
2930
  // src/config/resolve.ts
2920
2931
  function resolveGraphConfig(config, source) {
2921
- const configuredMode = config.graph?.mode ?? "shadow";
2932
+ const configuredMode = config.graph?.mode ?? "active";
2922
2933
  const killSwitch = config.graph?.killSwitch ?? false;
2923
2934
  const effectiveMode = killSwitch ? "off" : configuredMode;
2924
2935
  return {
@@ -5499,24 +5510,141 @@ function ensureFoundryV1BaseURL(endpoint) {
5499
5510
  }
5500
5511
 
5501
5512
  // src/local/lemonade.ts
5502
- var LEMONADE_DEFAULT_BASE_URL = "http://localhost:8000/api/v1";
5513
+ var LEMONADE_DEFAULT_BASE_URL = "http://localhost:13305/api/v1";
5514
+ var NON_TEXT_LABELS = new Set([
5515
+ "image",
5516
+ "tts",
5517
+ "transcription",
5518
+ "embedding",
5519
+ "reranking"
5520
+ ]);
5521
+ var PARALLEL_ARG = /(?:^|\s)(?:--parallel|-np)[\s=]+(\d+)(?!\d)/;
5503
5522
  function createLemonadeAdapter() {
5523
+ const listModels = async (options) => {
5524
+ const baseURL = normalizeBaseURL(options.baseURL ?? LEMONADE_DEFAULT_BASE_URL);
5525
+ const downloaded = await listLemonadeModels(baseURL, options.fetch);
5526
+ const loaded = await readLoadedModels(baseURL, options.fetch);
5527
+ return enrichWithLoadState(downloaded, loaded);
5528
+ };
5504
5529
  return {
5505
5530
  id: "lemonade",
5506
5531
  defaultBaseURL: LEMONADE_DEFAULT_BASE_URL,
5507
- listModels(options) {
5508
- return listOpenAICompatibleModels(normalizeBaseURL(options.baseURL ?? LEMONADE_DEFAULT_BASE_URL), options.fetch);
5509
- },
5510
- probe(options) {
5511
- return probeOpenAICompatibleRuntime({
5512
- id: "lemonade",
5513
- baseURL: options.baseURL ?? LEMONADE_DEFAULT_BASE_URL,
5514
- fetch: options.fetch,
5515
- probedAt: options.probedAt
5516
- });
5532
+ listModels,
5533
+ async probe(options) {
5534
+ const baseURL = normalizeBaseURL(options.baseURL ?? LEMONADE_DEFAULT_BASE_URL);
5535
+ try {
5536
+ return {
5537
+ id: "lemonade",
5538
+ baseURL,
5539
+ reachable: true,
5540
+ models: await listModels({ ...options, baseURL }),
5541
+ probedAt: options.probedAt
5542
+ };
5543
+ } catch (error) {
5544
+ return unavailableSnapshot({
5545
+ id: "lemonade",
5546
+ baseURL,
5547
+ probedAt: options.probedAt,
5548
+ error
5549
+ });
5550
+ }
5517
5551
  }
5518
5552
  };
5519
5553
  }
5554
+ async function listLemonadeModels(baseURL, fetch) {
5555
+ const response = await fetch(`${baseURL}/models`, {
5556
+ method: "GET",
5557
+ headers: { accept: "application/json" }
5558
+ });
5559
+ if (!response.ok) {
5560
+ throw new Error(`GET /models failed with HTTP ${response.status}`);
5561
+ }
5562
+ let payload;
5563
+ try {
5564
+ payload = await response.json();
5565
+ } catch (error) {
5566
+ throw new Error(`Malformed JSON from /models: ${errorMessage(error)}`);
5567
+ }
5568
+ const nonText = readNonTextModelIDs(payload);
5569
+ return parseOpenAIModels(payload).filter((model) => !nonText.has(model.modelID));
5570
+ }
5571
+ function readNonTextModelIDs(payload) {
5572
+ const ids = new Set;
5573
+ if (!isObject2(payload) || !Array.isArray(payload.data)) {
5574
+ return ids;
5575
+ }
5576
+ for (const entry of payload.data) {
5577
+ if (!isObject2(entry) || typeof entry.id !== "string") {
5578
+ continue;
5579
+ }
5580
+ if (isNonTextModel(entry)) {
5581
+ ids.add(entry.id);
5582
+ }
5583
+ }
5584
+ return ids;
5585
+ }
5586
+ function isNonTextModel(entry) {
5587
+ if (!Array.isArray(entry.labels)) {
5588
+ return false;
5589
+ }
5590
+ return entry.labels.some((label) => typeof label === "string" && NON_TEXT_LABELS.has(label));
5591
+ }
5592
+ async function readLoadedModels(baseURL, fetch) {
5593
+ let payload;
5594
+ try {
5595
+ const response = await fetch(`${baseURL}/health`, {
5596
+ method: "GET",
5597
+ headers: { accept: "application/json" }
5598
+ });
5599
+ if (!response.ok) {
5600
+ return;
5601
+ }
5602
+ payload = await response.json();
5603
+ } catch {
5604
+ return;
5605
+ }
5606
+ if (!isObject2(payload) || !Array.isArray(payload.all_models_loaded)) {
5607
+ return;
5608
+ }
5609
+ const loaded = new Map;
5610
+ for (const entry of payload.all_models_loaded) {
5611
+ if (!isObject2(entry) || typeof entry.model_name !== "string") {
5612
+ continue;
5613
+ }
5614
+ if (entry.loaded === false) {
5615
+ continue;
5616
+ }
5617
+ loaded.set(entry.model_name, { slots: readSlotCount(entry) });
5618
+ }
5619
+ return loaded;
5620
+ }
5621
+ function readSlotCount(entry) {
5622
+ const options = entry.recipe_options;
5623
+ if (!isObject2(options) || typeof options.llamacpp_args !== "string") {
5624
+ return;
5625
+ }
5626
+ const match = PARALLEL_ARG.exec(options.llamacpp_args);
5627
+ if (match === null) {
5628
+ return;
5629
+ }
5630
+ const parsed = Number.parseInt(match[1], 10);
5631
+ return Number.isInteger(parsed) && parsed > 0 ? parsed : undefined;
5632
+ }
5633
+ function enrichWithLoadState(models, loaded) {
5634
+ if (loaded === undefined) {
5635
+ return [...models];
5636
+ }
5637
+ return models.map((model) => {
5638
+ const hit = loaded.get(model.modelID);
5639
+ if (hit === undefined) {
5640
+ return { ...model, loaded: false };
5641
+ }
5642
+ return hit.slots === undefined ? { ...model, loaded: true } : { ...model, loaded: true, slots: hit.slots };
5643
+ });
5644
+ }
5645
+ function isObject2(value) {
5646
+ return typeof value === "object" && value !== null && !Array.isArray(value);
5647
+ }
5520
5648
 
5521
5649
  // src/local/lmstudio.ts
5522
5650
  var LMSTUDIO_DEFAULT_BASE_URL = "http://localhost:1234/v1";
@@ -5626,6 +5754,37 @@ function reachableRuntimeIds(snapshots) {
5626
5754
  return ids;
5627
5755
  }
5628
5756
 
5757
+ // src/local/slotPool.ts
5758
+ var POOL_SEPARATOR = "::";
5759
+ function slotPoolKey(runtime, modelID) {
5760
+ if (modelID === undefined) {
5761
+ return runtime.id;
5762
+ }
5763
+ const declared = runtime.modelConcurrency?.[modelID];
5764
+ return declared === undefined ? runtime.id : `${runtime.id}${POOL_SEPARATOR}${modelID}`;
5765
+ }
5766
+ function slotPoolRuntimeID(key) {
5767
+ const index = key.indexOf(POOL_SEPARATOR);
5768
+ return index === -1 ? key : key.slice(0, index);
5769
+ }
5770
+ function slotPoolModelID(key) {
5771
+ const index = key.indexOf(POOL_SEPARATOR);
5772
+ return index === -1 ? undefined : key.slice(index + POOL_SEPARATOR.length);
5773
+ }
5774
+ function slotPoolCapacity(runtime, modelID) {
5775
+ const declared = modelID === undefined ? undefined : runtime.modelConcurrency?.[modelID];
5776
+ return declared ?? effectiveMaxConcurrency(runtime);
5777
+ }
5778
+ function slotPoolReservedInteractive(runtime, modelID) {
5779
+ if (runtime.reservedInteractiveSlots !== undefined) {
5780
+ return runtime.reservedInteractiveSlots;
5781
+ }
5782
+ return slotPoolCapacity(runtime, modelID) >= 2 ? 1 : 0;
5783
+ }
5784
+ function unknownPoolCapacity() {
5785
+ return DEFAULT_LOCAL_MAX_CONCURRENCY;
5786
+ }
5787
+
5629
5788
  // src/orchestrator/coordinator.ts
5630
5789
  import { z as z17 } from "zod";
5631
5790
 
@@ -6109,9 +6268,19 @@ function configuredRuntime(runtimeId, config) {
6109
6268
  function runtimeIdOfModel(model, config) {
6110
6269
  return config.local.runtimes.find((runtime) => sameModel(runtime.defaultModel, model))?.id;
6111
6270
  }
6112
- function roleLocalModel(role, runtimeId, fallback) {
6271
+ function roleLocalModel(role, runtimeId, fallback, runtime) {
6113
6272
  const pinned = role.localModels?.[runtimeId];
6114
- return pinned === undefined ? fallback : { ...fallback, modelID: pinned };
6273
+ if (pinned !== undefined) {
6274
+ return { ...fallback, modelID: pinned };
6275
+ }
6276
+ const classModel = runtimeClassModel(role.localModelClass, runtime);
6277
+ return classModel === undefined ? fallback : { ...fallback, modelID: classModel };
6278
+ }
6279
+ function runtimeClassModel(modelClass, runtime) {
6280
+ if (modelClass === undefined || runtime === undefined) {
6281
+ return;
6282
+ }
6283
+ return modelClass === "thinking" ? runtime.thinkingModel : runtime.coderModel;
6115
6284
  }
6116
6285
  function selectDispatchRuntime(role, decision2, reachable, config) {
6117
6286
  if (decision2.routeKind !== "local") {
@@ -6127,7 +6296,7 @@ function selectDispatchRuntime(role, decision2, reachable, config) {
6127
6296
  if (runtime === undefined) {
6128
6297
  continue;
6129
6298
  }
6130
- const model = roleLocalModel(role, runtimeId, runtime.defaultModel);
6299
+ const model = roleLocalModel(role, runtimeId, runtime.defaultModel, runtime);
6131
6300
  return {
6132
6301
  runtimeId,
6133
6302
  decision: { ...decision2, selected: model }
@@ -6136,7 +6305,7 @@ function selectDispatchRuntime(role, decision2, reachable, config) {
6136
6305
  }
6137
6306
  const resolvedRuntimeId = runtimeIdOfModel(decision2.selected, config);
6138
6307
  if (resolvedRuntimeId !== undefined) {
6139
- const pinned = roleLocalModel(role, resolvedRuntimeId, decision2.selected);
6308
+ const pinned = roleLocalModel(role, resolvedRuntimeId, decision2.selected, configuredRuntime(resolvedRuntimeId, config));
6140
6309
  if (pinned !== decision2.selected) {
6141
6310
  return {
6142
6311
  runtimeId: resolvedRuntimeId,
@@ -6156,7 +6325,7 @@ var TRUNCATED_REASON_SUFFIX = "…[truncated]";
6156
6325
  var MAX_SERIALIZED_ARRAY_ITEMS = 20;
6157
6326
  var MAX_SERIALIZED_OBJECT_PROPERTIES = 25;
6158
6327
  var MAX_SERIALIZED_DEPTH = 4;
6159
- function isObject2(value) {
6328
+ function isObject3(value) {
6160
6329
  return typeof value === "object" && value !== null;
6161
6330
  }
6162
6331
  function isError(value) {
@@ -6186,7 +6355,7 @@ function stringProperty(value, key) {
6186
6355
  }
6187
6356
  function nestedMessage(value, key) {
6188
6357
  const container = safeGet(value, key);
6189
- if (!isObject2(container)) {
6358
+ if (!isObject3(container)) {
6190
6359
  return;
6191
6360
  }
6192
6361
  const message = stringProperty(container, "message");
@@ -6270,7 +6439,7 @@ function errorReason(error) {
6270
6439
  return message;
6271
6440
  }
6272
6441
  }
6273
- if (isObject2(error)) {
6442
+ if (isObject3(error)) {
6274
6443
  const message = stringProperty(error, "message");
6275
6444
  if (message !== undefined) {
6276
6445
  return message;
@@ -6777,18 +6946,19 @@ async function runRoleTaskWithCorrelation(input, deps, correlation, batch) {
6777
6946
  if (runtimeId !== undefined && deps.runtimeLimiter !== undefined) {
6778
6947
  const limiter = deps.runtimeLimiter;
6779
6948
  const priority = priorityForRole(role);
6780
- release = limiter.tryAcquire(runtimeId, priority);
6949
+ const poolKey = slotPoolKey(configuredRuntime(runtimeId, input.config) ?? { id: runtimeId }, decision2.selected.modelID);
6950
+ release = limiter.tryAcquire(poolKey, priority);
6781
6951
  let waitedMs = 0;
6782
6952
  if (release === undefined) {
6783
- const acquisition = await limiter.acquire(runtimeId, priority);
6953
+ const acquisition = await limiter.acquire(poolKey, priority);
6784
6954
  release = acquisition.release;
6785
6955
  waitedMs = acquisition.waitedMs;
6786
6956
  }
6787
6957
  queueObservation = {
6788
6958
  runtimeId,
6789
6959
  waitedMs,
6790
- activeCount: limiter.activeCount(runtimeId),
6791
- queuedCount: limiter.queuedCount(runtimeId)
6960
+ activeCount: limiter.activeCount(poolKey),
6961
+ queuedCount: limiter.queuedCount(poolKey)
6792
6962
  };
6793
6963
  }
6794
6964
  try {
@@ -8241,6 +8411,22 @@ function renderConsoleStatus(console_) {
8241
8411
  }
8242
8412
 
8243
8413
  // src/commands/doctor.ts
8414
+ function runtimeClassLine(runtime) {
8415
+ if (runtime === undefined) {
8416
+ return;
8417
+ }
8418
+ const thinking = runtime.thinkingModel;
8419
+ const coder = runtime.coderModel;
8420
+ if (thinking === undefined && coder === undefined) {
8421
+ return;
8422
+ }
8423
+ const parts = [
8424
+ `thinking ${thinking ?? "(default)"}`,
8425
+ `coder ${coder ?? "(default)"}`,
8426
+ `default ${runtime.defaultModel.modelID}`
8427
+ ];
8428
+ return ` ↳ ${parts.join(" · ")}`;
8429
+ }
8244
8430
  function runtimeLine(snapshot, runtime) {
8245
8431
  const mark = snapshot.reachable ? "✓" : "✗";
8246
8432
  const detail = snapshot.reachable ? `${snapshot.models.length} model(s)` : snapshot.error ?? "unreachable";
@@ -8248,6 +8434,14 @@ function runtimeLine(snapshot, runtime) {
8248
8434
  const slots = declared === undefined ? ` · ${DEFAULT_LOCAL_MAX_CONCURRENCY} slot(s) (default)` : ` · ${declared} slot(s) (declared)`;
8249
8435
  return ` ${mark} ${snapshot.id.padEnd(14)} ${snapshot.baseURL || "(no baseURL)"} — ${detail}${slots}`;
8250
8436
  }
8437
+ function runtimeModelSlotsLine(runtime) {
8438
+ const entries = Object.entries(runtime?.modelConcurrency ?? {});
8439
+ if (entries.length === 0) {
8440
+ return;
8441
+ }
8442
+ const detail = entries.map(([modelID, slots]) => `${modelID} ${slots} slot(s)`).join(" · ");
8443
+ return ` ↳ per-model slots: ${detail}`;
8444
+ }
8251
8445
  function isNetworkRuntime(baseURL) {
8252
8446
  if (baseURL.length === 0) {
8253
8447
  return false;
@@ -8497,7 +8691,16 @@ function renderDoctor(input) {
8497
8691
  lines.push(" (no runtime enabled)");
8498
8692
  } else {
8499
8693
  for (const snapshot of input.snapshots) {
8500
- lines.push(runtimeLine(snapshot, enabledRuntimes.find((r) => r.id === snapshot.id)));
8694
+ const runtime = enabledRuntimes.find((r) => r.id === snapshot.id);
8695
+ lines.push(runtimeLine(snapshot, runtime));
8696
+ const classLine = runtimeClassLine(runtime);
8697
+ if (classLine !== undefined) {
8698
+ lines.push(classLine);
8699
+ }
8700
+ const modelSlots = runtimeModelSlotsLine(runtime);
8701
+ if (modelSlots !== undefined) {
8702
+ lines.push(modelSlots);
8703
+ }
8501
8704
  }
8502
8705
  }
8503
8706
  for (const snapshot of input.snapshots) {
@@ -13510,7 +13713,7 @@ var createOtlpSpanExporter = (connection, config) => {
13510
13713
  // package.json
13511
13714
  var package_default = {
13512
13715
  name: "@jmanuelcorral/openteam",
13513
- version: "0.16.3",
13716
+ version: "0.17.1",
13514
13717
  packageManager: "bun@1.3.14",
13515
13718
  description: "Cost-aware, local-first routing plugin for opencode with cheapest-capable frontier fallback and multi-agent orchestration.",
13516
13719
  license: "MIT",
@@ -13877,7 +14080,7 @@ async function buildGateInput(config, storage, opencodeVersion, warn, packagedRe
13877
14080
  } catch {}
13878
14081
  const soak = await readAndParseCertificate(storage, SOAK_CERT_PATH, (raw) => parseSoakCertificate(raw, DEFAULT_SOAK_POLICY, soakLedgerDigest), (cert) => cert.digest);
13879
14082
  const migration = "complete";
13880
- const operatorApproval = config.graph?.operatorApproval ?? false;
14083
+ const operatorApproval = config.graph?.operatorApproval ?? true;
13881
14084
  return { shadow, release, soak, migration, operatorApproval };
13882
14085
  }
13883
14086
  var OPENCODE_VERSION_UNRESOLVED_REASON = "the opencode version is not determinable outside a running opencode session, " + "so the cutover gate cannot be verified here — the running plugin logs the " + "authoritative gate result and warns loudly on a real denial";
@@ -14266,15 +14469,18 @@ var server = async (ctx, rawOptions) => {
14266
14469
  const snapshots = await registry.probe(config.local.runtimes.filter((runtime) => runtime.enabled));
14267
14470
  return reachableRuntimeIds(snapshots);
14268
14471
  };
14269
- const runtimeById = (id) => config.local.runtimes.find((runtime) => runtime.id === id);
14472
+ const runtimeById = (key2) => {
14473
+ const runtimeId = slotPoolRuntimeID(key2);
14474
+ return config.local.runtimes.find((runtime) => runtime.id === runtimeId);
14475
+ };
14270
14476
  const runtimeLimiter = createRuntimeConcurrencyLimiter({
14271
- capacityFor: (id) => {
14272
- const runtime = runtimeById(id);
14273
- return runtime === undefined ? DEFAULT_LOCAL_MAX_CONCURRENCY : effectiveMaxConcurrency(runtime);
14477
+ capacityFor: (key2) => {
14478
+ const runtime = runtimeById(key2);
14479
+ return runtime === undefined ? unknownPoolCapacity() : slotPoolCapacity(runtime, slotPoolModelID(key2));
14274
14480
  },
14275
- reservedInteractiveFor: (id) => {
14276
- const runtime = runtimeById(id);
14277
- return runtime === undefined ? 0 : effectiveReservedInteractiveSlots(runtime);
14481
+ reservedInteractiveFor: (key2) => {
14482
+ const runtime = runtimeById(key2);
14483
+ return runtime === undefined ? 0 : slotPoolReservedInteractive(runtime, slotPoolModelID(key2));
14278
14484
  },
14279
14485
  now
14280
14486
  });
@@ -1,4 +1,8 @@
1
1
  import type { RuntimeAdapter } from "./types";
2
- export declare const LEMONADE_DEFAULT_BASE_URL = "http://localhost:8000/api/v1";
2
+ /**
3
+ * Lemonade Server's documented default port is 13305, not 8000 — verified
4
+ * against both the project's configuration reference and a live 11.7.0 host.
5
+ */
6
+ export declare const LEMONADE_DEFAULT_BASE_URL = "http://localhost:13305/api/v1";
3
7
  export declare function createLemonadeAdapter(): RuntimeAdapter;
4
8
  //# sourceMappingURL=lemonade.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"lemonade.d.ts","sourceRoot":"","sources":["../../src/local/lemonade.ts"],"names":[],"mappings":"AAKA,OAAO,KAAK,EAEV,cAAc,EAGf,MAAM,SAAS,CAAC;AAEjB,eAAO,MAAM,yBAAyB,iCAAiC,CAAC;AAExE,wBAAgB,qBAAqB,IAAI,cAAc,CAmBtD"}
1
+ {"version":3,"file":"lemonade.d.ts","sourceRoot":"","sources":["../../src/local/lemonade.ts"],"names":[],"mappings":"AAMA,OAAO,KAAK,EAIV,cAAc,EAGf,MAAM,SAAS,CAAC;AAEjB;;;GAGG;AACH,eAAO,MAAM,yBAAyB,kCAAkC,CAAC;AA6BzE,wBAAgB,qBAAqB,IAAI,cAAc,CA0CtD"}
@@ -0,0 +1,58 @@
1
+ import { effectiveReservedInteractiveSlots, type LocalRuntime } from "../config/schema";
2
+ import type { LocalRuntimeId } from "./types";
3
+ /**
4
+ * Key identifying the concurrency pool a generation competes in.
5
+ *
6
+ * Concurrency slots are a property of the LOADED MODEL, not of the server: on a
7
+ * real Lemonade 11.7.0 host measured with two resident models, the coder model
8
+ * served `--parallel 3` while the thinking model served `--parallel 1` — one
9
+ * box, two different capacities. Modelling that as a single server-wide cap lets
10
+ * the orchestrator dispatch four concurrent thinking generations, three of which
11
+ * then queue inside the server where openteam can neither see nor prioritise
12
+ * them.
13
+ *
14
+ * The pool is therefore per model — but ONLY for models the runtime explicitly
15
+ * declares a slot count for. A runtime with no `modelConcurrency` keeps exactly
16
+ * one pool keyed by its bare instance id, so no existing config silently gains
17
+ * capacity by happening to run two models at once. That back-compat property is
18
+ * the reason this returns the bare id rather than always composing a key.
19
+ *
20
+ * Pure.
21
+ */
22
+ export declare function slotPoolKey(runtime: Pick<LocalRuntime, "id" | "modelConcurrency">, modelID: string | undefined): string;
23
+ /**
24
+ * The runtime instance id carried by a slot-pool key, whether the key is a bare
25
+ * runtime id or a composite one. Pure.
26
+ */
27
+ export declare function slotPoolRuntimeID(key: string): LocalRuntimeId;
28
+ /**
29
+ * The model id carried by a composite slot-pool key, or `undefined` for a bare
30
+ * runtime key (a runtime-wide shared pool). Pure.
31
+ */
32
+ export declare function slotPoolModelID(key: string): string | undefined;
33
+ /**
34
+ * Capacity of the pool a model competes in: the runtime's declared per-model
35
+ * slot count when it has one, otherwise the runtime-wide
36
+ * {@link effectiveMaxConcurrency}. Pure.
37
+ */
38
+ export declare function slotPoolCapacity(runtime: Pick<LocalRuntime, "maxConcurrency" | "modelConcurrency">, modelID: string | undefined): number;
39
+ /**
40
+ * Interactive-reserved slots for the pool a model competes in.
41
+ *
42
+ * An explicit `reservedInteractiveSlots` is honoured verbatim for every pool of
43
+ * the runtime. Otherwise the same rule as
44
+ * {@link effectiveReservedInteractiveSlots} is applied to the POOL's capacity
45
+ * rather than the server's: a 3-slot coder pool reserves 1 and leaves 2 for
46
+ * workers, while a 1-slot thinking pool reserves 0 so its only slot is not
47
+ * withheld from every worker forever. Pure.
48
+ */
49
+ export declare function slotPoolReservedInteractive(runtime: Pick<LocalRuntime, "maxConcurrency" | "modelConcurrency" | "reservedInteractiveSlots">, modelID: string | undefined): number;
50
+ /**
51
+ * Capacity for a pool key when the runtime it names is not configured. Mirrors
52
+ * the pre-existing unknown-runtime fallback so an unresolvable key never gets
53
+ * unbounded capacity. Pure.
54
+ */
55
+ export declare function unknownPoolCapacity(): number;
56
+ /** Re-exported so callers resolving pools do not also import the schema module. */
57
+ export { effectiveReservedInteractiveSlots };
58
+ //# sourceMappingURL=slotPool.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"slotPool.d.ts","sourceRoot":"","sources":["../../src/local/slotPool.ts"],"names":[],"mappings":"AAAA,OAAO,EAGL,iCAAiC,EACjC,KAAK,YAAY,EAClB,MAAM,kBAAkB,CAAC;AAC1B,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,SAAS,CAAC;AAW9C;;;;;;;;;;;;;;;;;;GAkBG;AACH,wBAAgB,WAAW,CACzB,OAAO,EAAE,IAAI,CAAC,YAAY,EAAE,IAAI,GAAG,kBAAkB,CAAC,EACtD,OAAO,EAAE,MAAM,GAAG,SAAS,GAC1B,MAAM,CAQR;AAED;;;GAGG;AACH,wBAAgB,iBAAiB,CAAC,GAAG,EAAE,MAAM,GAAG,cAAc,CAG7D;AAED;;;GAGG;AACH,wBAAgB,eAAe,CAAC,GAAG,EAAE,MAAM,GAAG,MAAM,GAAG,SAAS,CAG/D;AAED;;;;GAIG;AACH,wBAAgB,gBAAgB,CAC9B,OAAO,EAAE,IAAI,CAAC,YAAY,EAAE,gBAAgB,GAAG,kBAAkB,CAAC,EAClE,OAAO,EAAE,MAAM,GAAG,SAAS,GAC1B,MAAM,CAIR;AAED;;;;;;;;;GASG;AACH,wBAAgB,2BAA2B,CACzC,OAAO,EAAE,IAAI,CACX,YAAY,EACZ,gBAAgB,GAAG,kBAAkB,GAAG,0BAA0B,CACnE,EACD,OAAO,EAAE,MAAM,GAAG,SAAS,GAC1B,MAAM,CAKR;AAED;;;;GAIG;AACH,wBAAgB,mBAAmB,IAAI,MAAM,CAE5C;AAED,mFAAmF;AACnF,OAAO,EAAE,iCAAiC,EAAE,CAAC"}
@@ -17,6 +17,25 @@ export type LocalModelInfo = {
17
17
  modelID: string;
18
18
  supportsTools: boolean | "unknown";
19
19
  contextWindow?: number;
20
+ /**
21
+ * Whether the runtime currently has this model RESIDENT and serving, as
22
+ * opposed to merely downloaded to disk.
23
+ *
24
+ * `undefined` means the runtime did not report load state (an adapter that
25
+ * cannot tell, or a server too old to expose it) — deliberately distinct from
26
+ * `false`, so a caller never presents "not loaded" when the truth is "not
27
+ * known". Optional, so the adapters that cannot report it are unchanged.
28
+ */
29
+ loaded?: boolean;
30
+ /**
31
+ * Concurrent generation slots THIS model serves, when the runtime reports it.
32
+ *
33
+ * Per model rather than per server because that is how the runtimes actually
34
+ * behave: a single Lemonade host was measured serving one model at
35
+ * `--parallel 3` and another at `--parallel 1` simultaneously. `undefined`
36
+ * when the runtime does not report it — never guessed.
37
+ */
38
+ slots?: number;
20
39
  };
21
40
  export type LocalRuntimeSnapshot = {
22
41
  id: LocalRuntimeId;
@@ -1 +1 @@
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"}
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;IACvB;;;;;;;;OAQG;IACH,MAAM,CAAC,EAAE,OAAO,CAAC;IACjB;;;;;;;OAOG;IACH,KAAK,CAAC,EAAE,MAAM,CAAC;CAChB,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"}
@@ -1 +1 @@
1
- {"version":3,"file":"coordinator.d.ts","sourceRoot":"","sources":["../../src/orchestrator/coordinator.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"coordinator.d.ts","sourceRoot":"","sources":["../../src/orchestrator/coordinator.ts"],"names":[],"mappings":"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"}