@jmanuelcorral/openteam 0.14.0 → 0.15.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/README.es.md CHANGED
@@ -218,7 +218,7 @@ openteam setup
218
218
  El asistente:
219
219
 
220
220
  1. Sondea los runtimes locales y marca los detectados.
221
- 2. Te deja habilitar runtimes (o **ninguno**: puedes usar openteam **solo con modelos frontier**) y, por cada runtime que habilites, elegir si corre **en esta máquina** o **en otra máquina de la red local** (introduciendo su URL, p. ej. `http://192.168.1.50:11434/v1`); luego eliges el modelo por defecto de cada uno (o lo escribes si no se detectan modelos).
221
+ 2. Te deja habilitar runtimes (o **ninguno**: puedes usar openteam **solo con modelos frontier**) y, por cada runtime que habilites, elegir si corre **en esta máquina** o **en otra máquina de la red local** (introduciendo su URL, p. ej. `http://192.168.1.50:11434/v1`); luego eliges el modelo por defecto de cada uno (o lo escribes si no se detectan modelos). Si tienes **más de una máquina del mismo tipo** (p. ej. dos hosts LM Studio), declara cada una como una instancia aparte con su propio id (`lmstudio-a`, `lmstudio-b`), URL y modelos. Para cada instancia también pregunta cuántos **slots de generación concurrente** tiene el runtime (por defecto `4`), para que puedas dejar un slot libre para el trabajo interactivo en vez de saturar el servidor.
222
222
  3. Ofrece el modelo frontier baseline a partir del **catálogo completo de [Models.dev](https://models.dev)** que openteam ya integra: una lista rápida con los más **baratos-capaces primero** (incluidos los **gratuitos**, etiquetados como `gratis`), una opción **«Ver todos los modelos por proveedor…»** para navegar el catálogo completo, y **«Otro (custom)»** para escribir un `provider/model`. Si el catálogo no se puede cargar (offline), cae a la lista curada.
223
223
  4. Pregunta el modo de routing (`balanced`/`economy`/`quality`), la política de privacidad y si quieres activar el **modo YOLO** (auto-aprobar permisos de opencode). Si no habilitas ningún runtime local, avisa de que estás en **modo solo frontier** y recomienda `consentBeforeFrontier` (porque `forceLocalOnSensitive` no tendría destino local).
224
224
  5. Si ya existe `opencode.json` o `.opencode/openteam.json`, pide confirmación antes de sobrescribir.
@@ -824,7 +824,7 @@ Consulta [docs/compatibility.md](docs/compatibility.md). Resumen verificado el `
824
824
 
825
825
  | Superficie | Versión / contrato |
826
826
  | --- | --- |
827
- | openteam | `0.14.0`; versión actual del paquete |
827
+ | openteam | `0.15.1`; versión actual del paquete |
828
828
  | `@opencode-ai/plugin` | `1.18.19` |
829
829
  | `@opencode-ai/sdk` | `1.18.19` |
830
830
  | Hook de routing | `chat.message`; no `chat.params` para cambiar modelo |
package/README.md CHANGED
@@ -177,7 +177,7 @@ openteam setup
177
177
  The wizard:
178
178
 
179
179
  1. Probes local runtimes and marks the detected ones.
180
- 2. Lets you enable runtimes (or **none** — frontier-only) and, per enabled runtime, choose whether it runs **on this machine** or **on another machine on the LAN** (by entering its URL, e.g. `http://192.168.1.50:11434/v1`), then pick each default model.
180
+ 2. Lets you enable runtimes (or **none** — frontier-only) and, per enabled runtime, choose whether it runs **on this machine** or **on another machine on the LAN** (by entering its URL, e.g. `http://192.168.1.50:11434/v1`), then pick each default model. If you run **more than one machine of the same kind** (e.g. two LM Studio hosts), it declares each as a separate instance with its own id (`lmstudio-a`, `lmstudio-b`), URL and models. For every instance it also asks how many **concurrent generation slots** the runtime has (defaulting to `4`), so you can leave a slot free for interactive work instead of saturating the server.
181
181
  3. Offers the frontier baseline from the **full [Models.dev](https://models.dev) catalog** that openteam integrates: a quick list with the **cheapest-capable first** (including **free** models, tagged `free`), a "Browse all models by provider…" option, and "Other (custom)" to type a `provider/model`. If the catalog can't be loaded (offline), it falls back to the curated list.
182
182
  4. Asks for the routing mode (`balanced` / `economy` / `quality`), the privacy policy, and whether to enable **YOLO mode** (auto-approve opencode permissions). If you enable no local runtime, it warns you are in **frontier-only mode** and recommends `consentBeforeFrontier`.
183
183
  5. If `opencode.json` or `.opencode/openteam.json` already exist, it asks for confirmation before overwriting.
@@ -713,7 +713,7 @@ See [docs/compatibility.md](docs/compatibility.md). Verified summary as of `2026
713
713
 
714
714
  | Surface | Version / contract |
715
715
  | --- | --- |
716
- | openteam | `0.14.0`; current package version |
716
+ | openteam | `0.15.1`; current package version |
717
717
  | `@opencode-ai/plugin` | `1.18.19` |
718
718
  | `@opencode-ai/sdk` | `1.18.19` |
719
719
  | Routing hook | `chat.message`; not `chat.params` for model changes |
@@ -1 +1 @@
1
- {"version":3,"file":"consoleServe.d.ts","sourceRoot":"","sources":["../../src/cli/consoleServe.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"consoleServe.d.ts","sourceRoot":"","sources":["../../src/cli/consoleServe.ts"],"names":[],"mappings":"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"}
@@ -16,9 +16,9 @@ export type GraphViewProviderDeps = {
16
16
  };
17
17
  /**
18
18
  * Builds the `readView` provider that `startConsole` expects. Reads the most
19
- * recent persisted journal from `journalRoot`, projects it through
19
+ * recent loadable persisted journal from `journalRoot`, projects it through
20
20
  * `buildGraphView`, and returns a `GraphViewProjectionV1`. Returns `null` when
21
- * there are no runs, the journal is corrupt, or the root is missing.
21
+ * there are no runs, every candidate journal is corrupt, or the root is missing.
22
22
  *
23
23
  * This is the production wire that closes the gap: `runConsoleServe` never
24
24
  * supplied a `graphView` to `startConsole`, so the DAG render was permanently
@@ -1 +1 @@
1
- {"version":3,"file":"graphViewProvider.d.ts","sourceRoot":"","sources":["../../src/cli/graphViewProvider.ts"],"names":[],"mappings":"AAQA,OAAO,EAEL,KAAK,qBAAqB,EAC3B,MAAM,wBAAwB,CAAC;AAEhC;;;;;GAKG;AACH,wBAAgB,mBAAmB,CAAC,WAAW,EAAE,MAAM,GAAG,MAAM,GAAG,SAAS,CAiC3E;AAED,mEAAmE;AACnE,MAAM,MAAM,qBAAqB,GAAG;IAClC,WAAW,EAAE,MAAM,CAAC;IACpB,UAAU,EAAE,OAAO,CAAC;IACpB,GAAG,EAAE,CAAC,OAAO,EAAE,MAAM,KAAK,IAAI,CAAC;IAC/B,qEAAqE;IACrE,SAAS,CAAC,EAAE,CAAC,WAAW,EAAE,MAAM,KAAK,MAAM,GAAG,SAAS,CAAC;CACzD,CAAC;AAEF;;;;;;;;;GASG;AACH,wBAAgB,uBAAuB,CAAC,IAAI,EAAE,qBAAqB,GAAG;IACpE,QAAQ,EAAE,MAAM,OAAO,CAAC,qBAAqB,GAAG,IAAI,CAAC,CAAC;CACvD,CA0CA"}
1
+ {"version":3,"file":"graphViewProvider.d.ts","sourceRoot":"","sources":["../../src/cli/graphViewProvider.ts"],"names":[],"mappings":"AAQA,OAAO,EAEL,KAAK,qBAAqB,EAC3B,MAAM,wBAAwB,CAAC;AA4ChC;;;;;GAKG;AACH,wBAAgB,mBAAmB,CAAC,WAAW,EAAE,MAAM,GAAG,MAAM,GAAG,SAAS,CAE3E;AAED,mEAAmE;AACnE,MAAM,MAAM,qBAAqB,GAAG;IAClC,WAAW,EAAE,MAAM,CAAC;IACpB,UAAU,EAAE,OAAO,CAAC;IACpB,GAAG,EAAE,CAAC,OAAO,EAAE,MAAM,KAAK,IAAI,CAAC;IAC/B,qEAAqE;IACrE,SAAS,CAAC,EAAE,CAAC,WAAW,EAAE,MAAM,KAAK,MAAM,GAAG,SAAS,CAAC;CACzD,CAAC;AAEF;;;;;;;;;GASG;AACH,wBAAgB,uBAAuB,CAAC,IAAI,EAAE,qBAAqB,GAAG;IACpE,QAAQ,EAAE,MAAM,OAAO,CAAC,qBAAqB,GAAG,IAAI,CAAC,CAAC;CACvD,CAyDA"}
package/dist/cli.js CHANGED
@@ -16,6 +16,32 @@ import { createOpencodeClient } from "@opencode-ai/sdk";
16
16
  // src/cli/consoleServe.ts
17
17
  import { randomBytes } from "node:crypto";
18
18
 
19
+ // src/config/resolve.ts
20
+ function resolveGraphConfig(config, source) {
21
+ const configuredMode = config.graph?.mode ?? "shadow";
22
+ const killSwitch = config.graph?.killSwitch ?? false;
23
+ const effectiveMode = killSwitch ? "off" : configuredMode;
24
+ return {
25
+ configuredMode,
26
+ effectiveMode,
27
+ executorEnabled: effectiveMode === "active",
28
+ killSwitch,
29
+ source
30
+ };
31
+ }
32
+ function applyGraphGate(resolved, gateResult) {
33
+ if (gateResult.allowed) {
34
+ return { ...resolved, gateDenied: false, gateViolations: [] };
35
+ }
36
+ return {
37
+ ...resolved,
38
+ effectiveMode: "off",
39
+ executorEnabled: false,
40
+ gateDenied: true,
41
+ gateViolations: gateResult.violations
42
+ };
43
+ }
44
+
19
45
  // src/config/schema.ts
20
46
  import { z as z2 } from "zod";
21
47
 
@@ -877,6 +903,13 @@ function chooseModel(input) {
877
903
  const override = input.task.explicitOverride;
878
904
  if (input.task.privacySensitive === true && input.config.privacyMode === "forceLocalOnSensitive") {
879
905
  if (local === null) {
906
+ if (input.config.router.localOnly) {
907
+ return finalizeDecision(input, tier, frontier, budgetAction, blockedDecision(frontier.model, [
908
+ "privacy-force-local",
909
+ "privacy-force-local-none-configured",
910
+ "router-local-only"
911
+ ], "privacy-local-only-none-configured"));
912
+ }
880
913
  return finalizeDecision(input, tier, frontier, budgetAction, resolveFrontierPrimary(input, frontier.model, [
881
914
  "privacy-force-local",
882
915
  "privacy-force-local-none-configured"
@@ -1568,7 +1601,7 @@ function runtimeIdOfModel(model, config) {
1568
1601
  }
1569
1602
  function roleLocalModel(role, runtimeId, fallback) {
1570
1603
  const pinned = role.localModels?.[runtimeId];
1571
- return pinned === undefined ? fallback : { providerID: runtimeId, modelID: pinned };
1604
+ return pinned === undefined ? fallback : { ...fallback, modelID: pinned };
1572
1605
  }
1573
1606
  function selectDispatchRuntime(role, decision2, reachable, config) {
1574
1607
  if (decision2.routeKind !== "local") {
@@ -2016,7 +2049,7 @@ var FAILURE_CAUSE_RULES = [
2016
2049
  "rate limit",
2017
2050
  "rate-limit",
2018
2051
  "ratelimit",
2019
- "429",
2052
+ /(?<!\d)429(?!\d)/,
2020
2053
  "too many requests",
2021
2054
  "quota exceeded"
2022
2055
  ],
@@ -2026,8 +2059,7 @@ var FAILURE_CAUSE_RULES = [
2026
2059
  [
2027
2060
  "unauthorized",
2028
2061
  "authentication",
2029
- "401",
2030
- "403",
2062
+ /(?<!\d)(?:401|403)(?!\d)/,
2031
2063
  "forbidden",
2032
2064
  "api key",
2033
2065
  "invalid key",
@@ -2063,7 +2095,7 @@ var FAILURE_CAUSE_RULES = [
2063
2095
  "invalid_request",
2064
2096
  "validation",
2065
2097
  "bad request",
2066
- "400",
2098
+ /(?<!\d)400(?!\d)/,
2067
2099
  "unprocessable",
2068
2100
  "malformed"
2069
2101
  ],
@@ -2085,10 +2117,7 @@ var FAILURE_CAUSE_RULES = [
2085
2117
  [
2086
2118
  [
2087
2119
  "internal server error",
2088
- "500",
2089
- "502",
2090
- "503",
2091
- "504",
2120
+ /(?<!\d)(?:500|502|503|504)(?!\d)/,
2092
2121
  "service unavailable",
2093
2122
  "bad gateway",
2094
2123
  "overloaded"
@@ -2105,7 +2134,7 @@ var TIMEOUT_NEEDLES = [
2105
2134
  ];
2106
2135
  function matchFailureCause(lowerReason) {
2107
2136
  for (const [needles, cls] of FAILURE_CAUSE_RULES) {
2108
- if (needles.some((needle) => lowerReason.includes(needle))) {
2137
+ if (needles.some((needle) => typeof needle === "string" ? lowerReason.includes(needle) : needle.test(lowerReason))) {
2109
2138
  return cls;
2110
2139
  }
2111
2140
  }
@@ -3358,9 +3387,9 @@ async function loadRuntimeOpenTeamConfig(storage, options, path = DEFAULT_CONFIG
3358
3387
  }
3359
3388
  const configOptions = configOptionsFromPluginOptions(options);
3360
3389
  const optionsFound = configOptions !== undefined;
3361
- const overlayContent = await storage.read(overlayPath);
3390
+ const overlayContent = overlayPath === null ? undefined : await storage.read(overlayPath);
3362
3391
  const overlayFound = overlayContent !== undefined;
3363
- const overlayRaw = overlayFound ? parseConfigFileJson(overlayPath, overlayContent) : undefined;
3392
+ const overlayRaw = overlayFound && overlayPath !== null ? parseConfigFileJson(overlayPath, overlayContent) : undefined;
3364
3393
  const mergedRaw = mergeConfigInputs(mergeConfigInputs(fileRaw, configOptions), overlayRaw);
3365
3394
  const mergedSources = [
3366
3395
  fileFound ? path : undefined,
@@ -3376,7 +3405,7 @@ async function loadRuntimeOpenTeamConfig(storage, options, path = DEFAULT_CONFIG
3376
3405
  fileFound,
3377
3406
  optionsFound,
3378
3407
  overlayFound,
3379
- searchedPaths: [path, overlayPath]
3408
+ searchedPaths: overlayPath === null ? [path] : [path, overlayPath]
3380
3409
  };
3381
3410
  }
3382
3411
 
@@ -4551,10 +4580,10 @@ function drillPanel() {
4551
4580
  "</aside>"
4552
4581
  ].join("");
4553
4582
  }
4554
- function treeGraphPanel(projection, drilldownEnabled, disabled) {
4583
+ function treeGraphPanel(projection, drilldownEnabled, disabled, mode) {
4555
4584
  return [
4556
4585
  '<section class="panel graph-panel" id="panel-graph">',
4557
- "<h3>Live graph</h3>",
4586
+ `<h3>${graphPanelHeading(mode, disabled)}</h3>`,
4558
4587
  disabled || projection === null ? "" : healthBanner(projection.health),
4559
4588
  '<div id="tree-content" data-graph-mount>',
4560
4589
  renderGraphView(projection, { disabled }),
@@ -4563,6 +4592,39 @@ function treeGraphPanel(projection, drilldownEnabled, disabled) {
4563
4592
  "</section>"
4564
4593
  ].join("");
4565
4594
  }
4595
+ var ACTIVE_TREE_COPY = {
4596
+ label: "Live agent tree",
4597
+ heading: "Agent tree · live",
4598
+ description: "Live agent topology. Graph updates arrive over the <code>graph</code> event on <code>/events</code>."
4599
+ };
4600
+ var SHADOW_TREE_COPY = {
4601
+ label: "Agent tree — last completed batch",
4602
+ heading: "Agent tree · last completed batch",
4603
+ description: 'Terminal states from the most recently completed batch. This is not work in progress; live updates require <code>graph.mode</code>: <code>"active"</code>.'
4604
+ };
4605
+ var DISABLED_TREE_COPY = {
4606
+ label: "Agent tree",
4607
+ heading: "Agent tree",
4608
+ description: 'Agent tree is disabled because the effective graph mode is <code>"off"</code>.'
4609
+ };
4610
+ function treeScreenCopy(mode, disabled) {
4611
+ if (disabled || mode === "off") {
4612
+ return DISABLED_TREE_COPY;
4613
+ }
4614
+ if (mode === "shadow") {
4615
+ return SHADOW_TREE_COPY;
4616
+ }
4617
+ return ACTIVE_TREE_COPY;
4618
+ }
4619
+ function graphPanelHeading(mode, disabled) {
4620
+ if (disabled || mode === "off") {
4621
+ return "Agent tree";
4622
+ }
4623
+ if (mode === "shadow") {
4624
+ return "Last completed batch";
4625
+ }
4626
+ return "Live graph";
4627
+ }
4566
4628
  function graphDisabledHint() {
4567
4629
  return [
4568
4630
  '<div class="graph-disabled" role="status">',
@@ -4652,12 +4714,14 @@ function renderConsoleHtml(state, options = {}) {
4652
4714
  const graphOptionProvided = options.graphView !== undefined;
4653
4715
  const graphDrilldown = graphOptionProvided && options.drilldownEnabled === true;
4654
4716
  const graphProjection = options.graphView?.projection ?? null;
4655
- const graphDisabled = options.graphView === undefined || options.graphView.disabled === true;
4717
+ const graphMode = options.graphView?.mode ?? "off";
4718
+ const graphDisabled = options.graphView === undefined || options.graphView.disabled === true || graphMode === "off";
4656
4719
  const liveCount = graphOptionProvided && graphProjection !== null && !graphDisabled ? graphProjection.nodes.length : state.sessionsDetail.length;
4657
4720
  const configEnabled = options.configEditor !== undefined;
4658
- const treeBody = treeGraphPanel(graphProjection, graphDrilldown, graphDisabled);
4721
+ const treeCopy = treeScreenCopy(graphMode, graphDisabled);
4722
+ const treeBody = treeGraphPanel(graphProjection, graphDrilldown, graphDisabled, graphMode);
4659
4723
  const body = [
4660
- screenSection("tree", "Live agent tree", "Agent tree · live", "Live agent topology. Graph updates arrive over the <code>graph</code> event on <code>/events</code>.", treeBody, true),
4724
+ screenSection("tree", treeCopy.label, treeCopy.heading, treeCopy.description, treeBody, true),
4661
4725
  screenSection("routing", "Routing and telemetry", "Routing + telemetry", "Aggregate routing and cost telemetry from <code>GET /api/state</code> across all sessions.", routingScreenBody(state)),
4662
4726
  screenSection("logs", "Logs and session activity", "Logs / activity", "Per-session activity. Prompts are referenced by hash only and never rendered in clear text.", logsScreenBody(state, terminalEnabled, ptyEnabled)),
4663
4727
  screenSection("config", "Editable configuration", 'Configuration <span class="pill warn">editable</span>', "Edit the whole openteam JSON configuration. Roles are editable inside the JSON when present; unsupported surfaces are not shown.", configScreenBody(options.configEditor?.hasToken === true))
@@ -5558,7 +5622,10 @@ function readAuthorized2(request, url, token) {
5558
5622
  return provided !== undefined && safeEqualToken(provided, token);
5559
5623
  }
5560
5624
  async function renderState(deps) {
5561
- const graphView = deps.graphApi !== undefined ? { projection: await deps.graphApi.readView() } : deps.graphDisabled === true ? { projection: null, disabled: true } : undefined;
5625
+ const graphView = deps.graphApi !== undefined ? {
5626
+ projection: await deps.graphApi.readView(),
5627
+ mode: deps.graphMode ?? "active"
5628
+ } : deps.graphDisabled === true ? { projection: null, disabled: true, mode: "off" } : undefined;
5562
5629
  const liveConfig = deps.getConsoleConfig?.() ?? deps.config;
5563
5630
  return renderConsoleHtml(buildConsoleState(await deps.readSnapshot()), {
5564
5631
  refreshMs: liveConfig.refreshMs,
@@ -6229,6 +6296,7 @@ async function createConsoleRuntime(deps) {
6229
6296
  ...deps.console !== undefined ? { console: deps.console } : {},
6230
6297
  ...deps.storageApi !== undefined ? { storageApi: deps.storageApi } : {},
6231
6298
  ...graphApi !== undefined ? { graphApi } : {},
6299
+ ...deps.graphMode !== undefined ? { graphMode: deps.graphMode } : {},
6232
6300
  ...graphDisabled ? { graphDisabled: true } : {}
6233
6301
  });
6234
6302
  const watchFn = deps.watch ?? ((path, listener) => fsWatch(path, { persistent: false }, listener));
@@ -7083,20 +7151,20 @@ function buildGraphView(input) {
7083
7151
  }
7084
7152
 
7085
7153
  // src/cli/graphViewProvider.ts
7086
- function selectMostRecentRun(journalRoot) {
7154
+ function selectRunsByRecency(journalRoot) {
7087
7155
  if (!pathExists(journalRoot)) {
7088
- return;
7156
+ return [];
7089
7157
  }
7090
7158
  let entries;
7091
7159
  try {
7092
7160
  entries = readdirSync(journalRoot);
7093
7161
  } catch {
7094
- return;
7162
+ return [];
7095
7163
  }
7096
7164
  if (entries.length === 0) {
7097
- return;
7165
+ return [];
7098
7166
  }
7099
- let best;
7167
+ const runs = [];
7100
7168
  for (const name of entries) {
7101
7169
  const specFile = join4(journalRoot, name, "spec.json");
7102
7170
  let mtime;
@@ -7105,47 +7173,66 @@ function selectMostRecentRun(journalRoot) {
7105
7173
  } catch {
7106
7174
  continue;
7107
7175
  }
7108
- if (best === undefined || mtime > best.mtime || mtime === best.mtime && name > best.runID) {
7109
- best = { runID: name, mtime };
7110
- }
7176
+ runs.push({ runID: name, mtime });
7111
7177
  }
7112
- return best?.runID;
7178
+ return runs.sort((a, b) => {
7179
+ if (a.mtime !== b.mtime) {
7180
+ return b.mtime - a.mtime;
7181
+ }
7182
+ if (a.runID < b.runID) {
7183
+ return 1;
7184
+ }
7185
+ if (a.runID > b.runID) {
7186
+ return -1;
7187
+ }
7188
+ return 0;
7189
+ }).map((run) => run.runID);
7190
+ }
7191
+ function selectMostRecentRun(journalRoot) {
7192
+ return selectRunsByRecency(journalRoot)[0];
7113
7193
  }
7114
7194
  function createGraphViewProvider(deps) {
7115
7195
  const selectRun = deps.selectRun ?? selectMostRecentRun;
7116
7196
  const journal = createFsGraphJournal(deps.journalRoot);
7117
7197
  return {
7118
7198
  async readView() {
7119
- const runID = selectRun(deps.journalRoot);
7120
- if (runID === undefined) {
7199
+ const selected = selectRun(deps.journalRoot);
7200
+ const runIDs = selected === undefined ? [] : deps.selectRun === undefined ? [
7201
+ selected,
7202
+ ...selectRunsByRecency(deps.journalRoot).filter((runID) => runID !== selected)
7203
+ ] : [selected];
7204
+ if (runIDs.length === 0) {
7121
7205
  return null;
7122
7206
  }
7123
- try {
7124
- const loaded = await journal.load(runID);
7125
- const telemetry = loaded.events.map(projectGraphEvent);
7126
- const health = computeGraphRuntimeHealth({
7127
- events: loaded.events,
7128
- journal: "clean",
7129
- lease: undefined,
7130
- holder: "console",
7131
- killSwitch: deps.killSwitch
7132
- });
7133
- return buildGraphView({
7134
- spec: loaded.spec,
7135
- state: loaded.state,
7136
- telemetry,
7137
- health
7138
- });
7139
- } catch (error) {
7140
- if (error instanceof JournalError && error.code === "corrupt") {
7141
- deps.log(`Graph view: journal for run "${runID}" is corrupt (${error.detail}); skipping.`);
7142
- return null;
7143
- }
7144
- if (error instanceof JournalError && error.code === "not-found") {
7145
- return null;
7207
+ for (const runID of runIDs) {
7208
+ try {
7209
+ const loaded = await journal.load(runID);
7210
+ const telemetry = loaded.events.map(projectGraphEvent);
7211
+ const health = computeGraphRuntimeHealth({
7212
+ events: loaded.events,
7213
+ journal: "clean",
7214
+ lease: undefined,
7215
+ holder: "console",
7216
+ killSwitch: deps.killSwitch
7217
+ });
7218
+ return buildGraphView({
7219
+ spec: loaded.spec,
7220
+ state: loaded.state,
7221
+ telemetry,
7222
+ health
7223
+ });
7224
+ } catch (error) {
7225
+ if (error instanceof JournalError && error.code === "corrupt") {
7226
+ deps.log(`Graph view: journal for run "${runID}" is corrupt (${error.detail}); skipping.`);
7227
+ continue;
7228
+ }
7229
+ if (error instanceof JournalError && error.code === "not-found") {
7230
+ continue;
7231
+ }
7232
+ throw error;
7146
7233
  }
7147
- throw error;
7148
7234
  }
7235
+ return null;
7149
7236
  }
7150
7237
  };
7151
7238
  }
@@ -7197,7 +7284,7 @@ async function runConsoleServe(deps, options) {
7197
7284
  endpoint,
7198
7285
  ...deps.serverPassword !== undefined ? { password: deps.serverPassword } : {}
7199
7286
  }));
7200
- const graphMode = config.graph?.mode ?? "shadow";
7287
+ const graphMode = resolveGraphConfig(config, "file").effectiveMode;
7201
7288
  const graphViewEnabled = config.console.graphView?.enabled === true;
7202
7289
  const buildGraphView2 = deps.createGraphViewProvider ?? createGraphViewProvider;
7203
7290
  const graphViewProvider = graphMode !== "off" && graphViewEnabled ? buildGraphView2({
@@ -7246,6 +7333,7 @@ async function runConsoleServe(deps, options) {
7246
7333
  createPtyClient: makePtyClient
7247
7334
  },
7248
7335
  ...graphViewProvider !== undefined ? { graphView: graphViewProvider } : {},
7336
+ graphMode,
7249
7337
  ...config.console.remoteStorage ? {
7250
7338
  storageApi: {
7251
7339
  storage: deps.storage,
@@ -8597,34 +8685,6 @@ function createGraphOperator(options) {
8597
8685
 
8598
8686
  // src/cli/graphStatusSnapshot.ts
8599
8687
  import { z as z16 } from "zod";
8600
-
8601
- // src/config/resolve.ts
8602
- function resolveGraphConfig(config, source) {
8603
- const configuredMode = config.graph?.mode ?? "shadow";
8604
- const killSwitch = config.graph?.killSwitch ?? false;
8605
- const effectiveMode = killSwitch ? "off" : configuredMode;
8606
- return {
8607
- configuredMode,
8608
- effectiveMode,
8609
- executorEnabled: effectiveMode === "active",
8610
- killSwitch,
8611
- source
8612
- };
8613
- }
8614
- function applyGraphGate(resolved, gateResult) {
8615
- if (gateResult.allowed) {
8616
- return { ...resolved, gateDenied: false, gateViolations: [] };
8617
- }
8618
- return {
8619
- ...resolved,
8620
- effectiveMode: "off",
8621
- executorEnabled: false,
8622
- gateDenied: true,
8623
- gateViolations: gateResult.violations
8624
- };
8625
- }
8626
-
8627
- // src/cli/graphStatusSnapshot.ts
8628
8688
  var activeRunRegistrySchema = z16.object({
8629
8689
  runs: z16.array(z16.string().min(1))
8630
8690
  }).strict();
@@ -11635,23 +11695,38 @@ function knownRuntime(id) {
11635
11695
  function firstEnabled(runtimes) {
11636
11696
  return runtimes.find((runtime) => runtime.enabled);
11637
11697
  }
11698
+ function choiceKind(choice) {
11699
+ return choice.kind ?? choice.id;
11700
+ }
11701
+ function choiceProviderID(choice) {
11702
+ return choice.providerID ?? choice.id;
11703
+ }
11638
11704
  function buildOpenTeamConfig(answers) {
11639
11705
  const runtimes = answers.runtimes.filter((choice) => choice.enabled).map((choice) => {
11640
11706
  const runtime = {
11641
11707
  id: choice.id,
11642
11708
  enabled: choice.enabled,
11643
- defaultModel: { providerID: choice.id, modelID: choice.defaultModelID },
11709
+ defaultModel: {
11710
+ providerID: choiceProviderID(choice),
11711
+ modelID: choice.defaultModelID
11712
+ },
11644
11713
  maxConcurrency: choice.maxConcurrency ?? DEFAULT_LOCAL_MAX_CONCURRENCY
11645
11714
  };
11715
+ if (choice.kind !== undefined && choice.kind !== choice.id) {
11716
+ runtime.kind = choice.kind;
11717
+ }
11646
11718
  if (choice.baseURL !== undefined) {
11647
11719
  runtime.baseURL = choice.baseURL;
11648
- } else if (knownRuntime(choice.id).dynamicPort === true) {
11720
+ } else if (knownRuntime(choiceKind(choice)).dynamicPort === true) {
11649
11721
  runtime.discovery = "cli";
11650
11722
  }
11651
11723
  return runtime;
11652
11724
  });
11653
11725
  const primaryLocal = firstEnabled(answers.runtimes);
11654
- const localDefault2 = primaryLocal !== undefined ? { providerID: primaryLocal.id, modelID: primaryLocal.defaultModelID } : null;
11726
+ const localDefault2 = primaryLocal !== undefined ? {
11727
+ providerID: choiceProviderID(primaryLocal),
11728
+ modelID: primaryLocal.defaultModelID
11729
+ } : null;
11655
11730
  const localOnly = answers.localOnly === true && primaryLocal !== undefined;
11656
11731
  return OpenTeamConfigSchema.parse({
11657
11732
  baseline: {
@@ -11672,11 +11747,12 @@ function buildOpenTeamConfig(answers) {
11672
11747
  }
11673
11748
  function buildOpencodeConfig(answers) {
11674
11749
  const provider = {};
11750
+ const providerOwner = new Map;
11675
11751
  for (const choice of answers.runtimes) {
11676
11752
  if (!choice.enabled) {
11677
11753
  continue;
11678
11754
  }
11679
- const meta = knownRuntime(choice.id);
11755
+ const meta = knownRuntime(choiceKind(choice));
11680
11756
  const baseURL = choice.baseURL ?? meta.defaultBaseURL;
11681
11757
  if (baseURL === undefined) {
11682
11758
  continue;
@@ -11686,16 +11762,33 @@ function buildOpencodeConfig(answers) {
11686
11762
  for (const modelID of modelIDs) {
11687
11763
  models[modelID] = { name: modelID };
11688
11764
  }
11689
- provider[choice.id] = {
11765
+ const providerID = choiceProviderID(choice);
11766
+ const owner = providerOwner.get(providerID);
11767
+ if (owner !== undefined) {
11768
+ if (owner.baseURL !== baseURL) {
11769
+ throw new Error(`local runtimes "${owner.instanceId}" and "${choice.id}" both use ` + `opencode provider "${providerID}" but declare different baseURLs ` + `(${owner.baseURL} vs ${baseURL}); give each instance a distinct ` + "providerID so opencode can reach both machines.");
11770
+ }
11771
+ const existing = provider[providerID];
11772
+ if (existing !== undefined) {
11773
+ provider[providerID] = {
11774
+ ...existing,
11775
+ models: { ...existing.models, ...models }
11776
+ };
11777
+ }
11778
+ continue;
11779
+ }
11780
+ const name = choice.id === choiceKind(choice) ? `${meta.label} (local)` : `${meta.label} (local · ${choice.id})`;
11781
+ provider[providerID] = {
11690
11782
  npm: "@ai-sdk/openai-compatible",
11691
- name: `${meta.label} (local)`,
11783
+ name,
11692
11784
  options: { baseURL },
11693
11785
  models
11694
11786
  };
11787
+ providerOwner.set(providerID, { instanceId: choice.id, baseURL });
11695
11788
  }
11696
11789
  const primaryLocal = firstEnabled(answers.runtimes);
11697
11790
  const localOnly = answers.localOnly === true && primaryLocal !== undefined;
11698
- const mainModel = localOnly && primaryLocal !== undefined ? `${primaryLocal.id}/${primaryLocal.defaultModelID}` : `${answers.frontier.providerID}/${answers.frontier.modelID}`;
11791
+ const mainModel = localOnly && primaryLocal !== undefined ? `${choiceProviderID(primaryLocal)}/${primaryLocal.defaultModelID}` : `${answers.frontier.providerID}/${answers.frontier.modelID}`;
11699
11792
  const config = {
11700
11793
  $schema: "https://opencode.ai/config.json",
11701
11794
  plugin: [OPENTEAM_PLUGIN_SPEC],
@@ -11705,7 +11798,7 @@ function buildOpencodeConfig(answers) {
11705
11798
  config.provider = provider;
11706
11799
  }
11707
11800
  if (primaryLocal !== undefined) {
11708
- config.small_model = `${primaryLocal.id}/${primaryLocal.defaultModelID}`;
11801
+ config.small_model = `${choiceProviderID(primaryLocal)}/${primaryLocal.defaultModelID}`;
11709
11802
  }
11710
11803
  if (answers.yolo) {
11711
11804
  config.permission = { "*": "allow" };
@@ -11910,6 +12003,62 @@ async function resolveEnabledRuntime(deps, meta, info) {
11910
12003
  }
11911
12004
  return choice;
11912
12005
  }
12006
+ function instanceSuffix(index) {
12007
+ return index < 26 ? String.fromCharCode(97 + index) : String(index + 1);
12008
+ }
12009
+ async function promptSlotCount(prompt, meta) {
12010
+ const raw = await prompt.text({
12011
+ message: `How many concurrent generation slots does ${meta.label} have? (match its real capacity; leaving one free keeps interactive work responsive)`,
12012
+ placeholder: String(DEFAULT_LOCAL_MAX_CONCURRENCY),
12013
+ initial: String(DEFAULT_LOCAL_MAX_CONCURRENCY)
12014
+ });
12015
+ const parsed = Number.parseInt(raw.trim(), 10);
12016
+ return Number.isInteger(parsed) && parsed > 0 ? parsed : DEFAULT_LOCAL_MAX_CONCURRENCY;
12017
+ }
12018
+ async function promptInstanceId(prompt, meta, defaultId, usedIds) {
12019
+ for (;; ) {
12020
+ const raw = await prompt.text({
12021
+ message: `Instance id for this ${meta.label} machine (unique across your fleet)`,
12022
+ placeholder: defaultId,
12023
+ initial: defaultId
12024
+ });
12025
+ const id = raw.trim().length > 0 ? raw.trim() : defaultId;
12026
+ if (!usedIds.has(id)) {
12027
+ return id;
12028
+ }
12029
+ prompt.note(`Instance id "${id}" is already used; enter a different one.`, "Duplicate instance id");
12030
+ }
12031
+ }
12032
+ async function resolveRuntimeInstances(deps, meta, info, usedIds) {
12033
+ const fleet = await deps.prompt.confirm({
12034
+ message: `Do you run more than one ${meta.label} machine? (declare each host with its own URL and slot count)`,
12035
+ initial: false
12036
+ });
12037
+ if (!fleet) {
12038
+ const choice = await resolveEnabledRuntime(deps, meta, info);
12039
+ choice.maxConcurrency = await promptSlotCount(deps.prompt, meta);
12040
+ usedIds.add(choice.id);
12041
+ return [choice];
12042
+ }
12043
+ const instances = [];
12044
+ for (;; ) {
12045
+ const defaultId = `${meta.id}-${instanceSuffix(instances.length)}`;
12046
+ const id = await promptInstanceId(deps.prompt, meta, defaultId, usedIds);
12047
+ const choice = await resolveEnabledRuntime(deps, meta, info);
12048
+ choice.id = id;
12049
+ choice.kind = meta.id;
12050
+ choice.maxConcurrency = await promptSlotCount(deps.prompt, meta);
12051
+ usedIds.add(id);
12052
+ instances.push(choice);
12053
+ const another = await deps.prompt.confirm({
12054
+ message: `Add another ${meta.label} machine?`,
12055
+ initial: false
12056
+ });
12057
+ if (!another) {
12058
+ return instances;
12059
+ }
12060
+ }
12061
+ }
11913
12062
  async function runSetup(deps) {
11914
12063
  const { prompt } = deps;
11915
12064
  try {
@@ -11937,6 +12086,7 @@ async function runSetup(deps) {
11937
12086
  });
11938
12087
  const enabled = new Set(enabledIds.filter((id) => id !== RUNTIME_NONE));
11939
12088
  const runtimes = [];
12089
+ const usedIds = new Set;
11940
12090
  for (const meta of KNOWN_RUNTIMES) {
11941
12091
  const info = detectedById.get(meta.id);
11942
12092
  const isEnabled = enabled.has(meta.id);
@@ -11954,7 +12104,7 @@ async function runSetup(deps) {
11954
12104
  runtimes.push(choice);
11955
12105
  continue;
11956
12106
  }
11957
- runtimes.push(await resolveEnabledRuntime(deps, meta, info));
12107
+ runtimes.push(...await resolveRuntimeInstances(deps, meta, info, usedIds));
11958
12108
  }
11959
12109
  const hasLocalEnabled = enabled.size > 0;
11960
12110
  const localOnly = hasLocalEnabled ? await prompt.confirm({
@@ -11976,11 +12126,15 @@ async function runSetup(deps) {
11976
12126
  "session itself does not reach a frontier provider either.",
11977
12127
  "",
11978
12128
  `A baseline is still recorded (${frontier.providerID}/${frontier.modelID})`,
11979
- "but stays unused. Set router.localOnly to false to re-enable it."
12129
+ "but stays unused. Set router.localOnly to false to re-enable it.",
12130
+ "",
12131
+ "Routing mode set to 'balanced' and privacy to 'forceLocalOnSensitive'",
12132
+ "automatically — in local-only mode every task stays local regardless,",
12133
+ "so these settings cannot change behaviour."
11980
12134
  ].join(`
11981
12135
  `), "Local-only mode");
11982
12136
  }
11983
- const routerMode = await prompt.select({
12137
+ const routerMode = localOnly ? "balanced" : await prompt.select({
11984
12138
  message: "Routing mode",
11985
12139
  choices: [
11986
12140
  { value: "balanced", label: "balanced (recommended)" },
@@ -11999,7 +12153,7 @@ async function runSetup(deps) {
11999
12153
  ].join(`
12000
12154
  `), "Frontier-only mode");
12001
12155
  }
12002
- const privacyMode = await prompt.select({
12156
+ const privacyMode = localOnly ? "forceLocalOnSensitive" : await prompt.select({
12003
12157
  message: "Privacy for sensitive prompts",
12004
12158
  choices: [
12005
12159
  {
@@ -15685,7 +15839,7 @@ async function buildMemoryRuntimeFromConfig(config, deps, options = {}) {
15685
15839
  // package.json
15686
15840
  var package_default = {
15687
15841
  name: "@jmanuelcorral/openteam",
15688
- version: "0.14.0",
15842
+ version: "0.15.1",
15689
15843
  packageManager: "bun@1.3.14",
15690
15844
  description: "Cost-aware, local-first routing plugin for opencode with cheapest-capable frontier fallback and multi-agent orchestration.",
15691
15845
  license: "MIT",
@@ -15857,12 +16011,12 @@ async function readConfigFile(path4, resolution) {
15857
16011
  }
15858
16012
  }
15859
16013
  async function loadConfig(path4, resolution = { explicit: false }) {
15860
- const content = await readConfigFile(path4, resolution);
15861
- if (content === undefined) {
15862
- return loadOpenTeamConfig({});
15863
- }
15864
- const raw = parseConfigFileJson(path4, content);
15865
- return validateConfigFile(path4, raw);
16014
+ const configStorage = resolution.explicit ? {
16015
+ ...storage,
16016
+ read: (requestedPath) => requestedPath === path4 ? readConfigFile(path4, resolution) : storage.read(requestedPath)
16017
+ } : storage;
16018
+ const overlayPath = resolution.explicit ? null : DEFAULT_LOCAL_OVERLAY_PATH;
16019
+ return (await loadRuntimeOpenTeamConfig(configStorage, undefined, path4, overlayPath)).config;
15866
16020
  }
15867
16021
  async function saveConfig(config, path4, resolution = { explicit: false }) {
15868
16022
  if (!resolution.explicit) {
@@ -1,6 +1,6 @@
1
1
  import type { ModelCapabilityProfile } from "../capabilities/types";
2
2
  import { type OpenTeamConfig, type PrivacyMode, type RouterMode } from "../config/schema";
3
- import type { LocalRuntimeId } from "../local/types";
3
+ import type { LocalRuntimeId, LocalRuntimeKind } from "../local/types";
4
4
  import type { CliResult } from "./dispatch";
5
5
  import { type FrontierChoice as FrontierChoiceType } from "./frontierCatalog";
6
6
  /** Nombre del paquete npm del plugin, declarado en el opencode.json generado. */
@@ -73,7 +73,7 @@ export declare function buildOpencodeGitignore(existing?: string): string;
73
73
  */
74
74
  export declare function missingGeneratedStateRules(gitignore: string): string[];
75
75
  export type KnownRuntime = {
76
- id: LocalRuntimeId;
76
+ id: LocalRuntimeKind;
77
77
  label: string;
78
78
  defaultBaseURL?: string;
79
79
  fallbackModelID: string;
@@ -93,16 +93,36 @@ export type DetectedRuntime = {
93
93
  };
94
94
  export type RuntimeChoice = {
95
95
  id: LocalRuntimeId;
96
+ /**
97
+ * Adapter kind of this instance (#214/#217). Optional so pre-fleet
98
+ * construction sites (where the id IS the kind) stay valid; when absent the
99
+ * id is treated as the kind. `buildOpenTeamConfig` emits an explicit `kind`
100
+ * only when it differs from the instance id, keeping single-instance output
101
+ * byte-identical.
102
+ */
103
+ kind?: LocalRuntimeKind;
104
+ /**
105
+ * opencode provider this instance's model resolves against (#216/#217).
106
+ * Optional and defaults to the instance `id`, never the kind: opencode holds a
107
+ * single `baseURL` per provider entry, so two same-kind hosts must resolve to
108
+ * two distinct providers or the fleet silently collapses onto one machine. For
109
+ * a single-instance install id == kind, so the default keeps output
110
+ * byte-identical. Kept separately settable for the rare case where two
111
+ * instances genuinely share one endpoint.
112
+ */
113
+ providerID?: string;
96
114
  enabled: boolean;
97
115
  baseURL?: string;
98
116
  defaultModelID: string;
99
117
  models: string[];
100
118
  /**
101
- * Concurrent generation slots this runtime really has (#144/#207). Optional on
102
- * the answer so existing construction sites stay valid; `buildOpenTeamConfig`
103
- * falls back to `DEFAULT_LOCAL_MAX_CONCURRENCY` and always writes the resolved
104
- * value, so the cap in force is visible in the generated file instead of being
105
- * an invisible read-time default nobody knows to override.
119
+ * Concurrent generation slots this runtime really has (#144/#207/#217).
120
+ * Elicited per instance by the wizard (gap #217 was that it never asked).
121
+ * Optional on the answer so existing construction sites stay valid;
122
+ * `buildOpenTeamConfig` falls back to `DEFAULT_LOCAL_MAX_CONCURRENCY` and
123
+ * always writes the resolved value, so the cap in force is visible in the
124
+ * generated file instead of being an invisible read-time default nobody knows
125
+ * to override.
106
126
  */
107
127
  maxConcurrency?: number;
108
128
  };
@@ -1 +1 @@
1
- {"version":3,"file":"setup.d.ts","sourceRoot":"","sources":["../../src/commands/setup.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"setup.d.ts","sourceRoot":"","sources":["../../src/commands/setup.ts"],"names":[],"mappings":"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"}
@@ -57,6 +57,6 @@ export declare function mergeConfigInputs(fileConfig: unknown, options: unknown)
57
57
  export declare function parseConfigFileJson(path: string, content: string): unknown;
58
58
  export declare function validateConfigFile(path: string, raw: unknown): OpenTeamConfig;
59
59
  export declare function validateConfigInput(label: string, raw: unknown): OpenTeamConfig;
60
- export declare function loadRuntimeOpenTeamConfig(storage: StorageProvider, options: unknown, path?: string, overlayPath?: string): Promise<RuntimeConfigResolution>;
60
+ export declare function loadRuntimeOpenTeamConfig(storage: StorageProvider, options: unknown, path?: string, overlayPath?: string | null): Promise<RuntimeConfigResolution>;
61
61
  export {};
62
62
  //# sourceMappingURL=runtime.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"runtime.d.ts","sourceRoot":"","sources":["../../src/config/runtime.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAC;AACxB,OAAO,KAAK,EAAE,eAAe,EAAE,MAAM,qBAAqB,CAAC;AAM3D,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,WAAW,CAAC;AAC9C,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,UAAU,CAAC;AAE/C,KAAK,UAAU,GAAG,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;AAE1C,MAAM,MAAM,uBAAuB,GAAG;IACpC,QAAQ,CAAC,MAAM,EAAE,cAAc,CAAC;IAChC,QAAQ,CAAC,MAAM,EAAE,YAAY,CAAC;IAC9B,QAAQ,CAAC,SAAS,EAAE,OAAO,CAAC;IAC5B,QAAQ,CAAC,YAAY,EAAE,OAAO,CAAC;IAC/B;;;;;OAKG;IACH,QAAQ,CAAC,YAAY,EAAE,OAAO,CAAC;IAC/B,QAAQ,CAAC,aAAa,EAAE,SAAS,MAAM,EAAE,CAAC;CAC3C,CAAC;AAEF,eAAO,MAAM,WAAW,YACtB,UAAU,EACV,QAAQ,EACR,OAAO,EACP,SAAS,EACT,aAAa,EACb,SAAS,EACT,SAAS,EACT,QAAQ,EACR,OAAO,EACP,cAAc,EACd,eAAe,CACP,CAAC;AAGX,eAAO,MAAM,2BAA2B,cAAc,CAAC;AAMvD,eAAO,MAAM,kCAAkC;;;;kBAMpC,CAAC;AAEZ,eAAO,MAAM,4BAA4B;;;;mBAKrC,CAAC;AAEL,eAAO,MAAM,yBAAyB;;;;;;;;;;;;;;;;;kBAM3B,CAAC;AAEZ,eAAO,MAAM,gCAAgC,EAAE,WAAW,CACxD,MAAM,EACN,SAAS,MAAM,EAAE,CAOjB,CAAC;AAEH,MAAM,MAAM,aAAa,GAAG,CAAC,CAAC,KAAK,CAAC,OAAO,yBAAyB,CAAC,CAAC;AACtE,MAAM,MAAM,gBAAgB,GAAG,CAAC,CAAC,KAAK,CAAC,OAAO,4BAA4B,CAAC,CAAC;AAa5E,wBAAgB,kBAAkB,CAAC,UAAU,EAAE,OAAO,GAAG,aAAa,CAgBrE;AAED,wBAAgB,gBAAgB,CAAC,UAAU,EAAE,OAAO,GAAG,gBAAgB,CAKtE;AAED,wBAAgB,8BAA8B,CAC5C,KAAK,EAAE,OAAO,GACb,UAAU,GAAG,SAAS,CAcxB;AAcD,wBAAgB,iBAAiB,CAC/B,UAAU,EAAE,OAAO,EACnB,OAAO,EAAE,OAAO,GACf,OAAO,CAWT;AAED,wBAAgB,mBAAmB,CAAC,IAAI,EAAE,MAAM,EAAE,OAAO,EAAE,MAAM,GAAG,OAAO,CAU1E;AAED,wBAAgB,kBAAkB,CAAC,IAAI,EAAE,MAAM,EAAE,GAAG,EAAE,OAAO,GAAG,cAAc,CAE7E;AAED,wBAAgB,mBAAmB,CACjC,KAAK,EAAE,MAAM,EACb,GAAG,EAAE,OAAO,GACX,cAAc,CAMhB;AAED,wBAAsB,yBAAyB,CAC7C,OAAO,EAAE,eAAe,EACxB,OAAO,EAAE,OAAO,EAChB,IAAI,SAAsB,EAC1B,WAAW,SAA6B,GACvC,OAAO,CAAC,uBAAuB,CAAC,CAoDlC"}
1
+ {"version":3,"file":"runtime.d.ts","sourceRoot":"","sources":["../../src/config/runtime.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAC;AACxB,OAAO,KAAK,EAAE,eAAe,EAAE,MAAM,qBAAqB,CAAC;AAM3D,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,WAAW,CAAC;AAC9C,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,UAAU,CAAC;AAE/C,KAAK,UAAU,GAAG,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;AAE1C,MAAM,MAAM,uBAAuB,GAAG;IACpC,QAAQ,CAAC,MAAM,EAAE,cAAc,CAAC;IAChC,QAAQ,CAAC,MAAM,EAAE,YAAY,CAAC;IAC9B,QAAQ,CAAC,SAAS,EAAE,OAAO,CAAC;IAC5B,QAAQ,CAAC,YAAY,EAAE,OAAO,CAAC;IAC/B;;;;;OAKG;IACH,QAAQ,CAAC,YAAY,EAAE,OAAO,CAAC;IAC/B,QAAQ,CAAC,aAAa,EAAE,SAAS,MAAM,EAAE,CAAC;CAC3C,CAAC;AAEF,eAAO,MAAM,WAAW,YACtB,UAAU,EACV,QAAQ,EACR,OAAO,EACP,SAAS,EACT,aAAa,EACb,SAAS,EACT,SAAS,EACT,QAAQ,EACR,OAAO,EACP,cAAc,EACd,eAAe,CACP,CAAC;AAGX,eAAO,MAAM,2BAA2B,cAAc,CAAC;AAMvD,eAAO,MAAM,kCAAkC;;;;kBAMpC,CAAC;AAEZ,eAAO,MAAM,4BAA4B;;;;mBAKrC,CAAC;AAEL,eAAO,MAAM,yBAAyB;;;;;;;;;;;;;;;;;kBAM3B,CAAC;AAEZ,eAAO,MAAM,gCAAgC,EAAE,WAAW,CACxD,MAAM,EACN,SAAS,MAAM,EAAE,CAOjB,CAAC;AAEH,MAAM,MAAM,aAAa,GAAG,CAAC,CAAC,KAAK,CAAC,OAAO,yBAAyB,CAAC,CAAC;AACtE,MAAM,MAAM,gBAAgB,GAAG,CAAC,CAAC,KAAK,CAAC,OAAO,4BAA4B,CAAC,CAAC;AAa5E,wBAAgB,kBAAkB,CAAC,UAAU,EAAE,OAAO,GAAG,aAAa,CAgBrE;AAED,wBAAgB,gBAAgB,CAAC,UAAU,EAAE,OAAO,GAAG,gBAAgB,CAKtE;AAED,wBAAgB,8BAA8B,CAC5C,KAAK,EAAE,OAAO,GACb,UAAU,GAAG,SAAS,CAcxB;AAcD,wBAAgB,iBAAiB,CAC/B,UAAU,EAAE,OAAO,EACnB,OAAO,EAAE,OAAO,GACf,OAAO,CAWT;AAED,wBAAgB,mBAAmB,CAAC,IAAI,EAAE,MAAM,EAAE,OAAO,EAAE,MAAM,GAAG,OAAO,CAU1E;AAED,wBAAgB,kBAAkB,CAAC,IAAI,EAAE,MAAM,EAAE,GAAG,EAAE,OAAO,GAAG,cAAc,CAE7E;AAED,wBAAgB,mBAAmB,CACjC,KAAK,EAAE,MAAM,EACb,GAAG,EAAE,OAAO,GACX,cAAc,CAMhB;AAED,wBAAsB,yBAAyB,CAC7C,OAAO,EAAE,eAAe,EACxB,OAAO,EAAE,OAAO,EAChB,IAAI,SAAsB,EAC1B,WAAW,GAAE,MAAM,GAAG,IAAiC,GACtD,OAAO,CAAC,uBAAuB,CAAC,CAsDlC"}
@@ -1,3 +1,4 @@
1
+ import type { GraphMode } from "../config/schema";
1
2
  import type { GraphViewProjectionV1 } from "../telemetry/graphView";
2
3
  import type { ConsoleState } from "./types";
3
4
  export declare const GRAPH_EMPTY_REMEDIATION: "No graph run yet. The tree fills when openteam-orchestrate dispatches roles; ordinary chat does not create a graph run.";
@@ -27,6 +28,8 @@ export type RenderOptions = {
27
28
  */
28
29
  graphView?: {
29
30
  readonly projection: GraphViewProjectionV1 | null;
31
+ /** Effective graph mode resolved by the caller; render stays pure. */
32
+ readonly mode: GraphMode;
30
33
  /**
31
34
  * `true` when the graph is disabled by config (`graph.mode` == `off`): the
32
35
  * tree screen renders remediation guidance instead of the DAG.
@@ -1 +1 @@
1
- {"version":3,"file":"render.d.ts","sourceRoot":"","sources":["../../src/console/render.ts"],"names":[],"mappings":"AAUA,OAAO,KAAK,EAGV,qBAAqB,EACtB,MAAM,wBAAwB,CAAC;AAKhC,OAAO,KAAK,EAGV,YAAY,EAIb,MAAM,SAAS,CAAC;AAEjB,eAAO,MAAM,uBAAuB,EAClC,yHAAkI,CAAC;AASrI,mFAAmF;AACnF,wBAAgB,UAAU,CAAC,KAAK,EAAE,MAAM,GAAG,MAAM,CAOhD;AAwmBD;;;;GAIG;AACH,wBAAgB,eAAe,CAC7B,UAAU,EAAE,qBAAqB,GAAG,IAAI,EACxC,OAAO,GAAE;IAAE,QAAQ,CAAC,EAAE,OAAO,CAAA;CAAO,GACnC,MAAM,CA2BR;AAuLD,MAAM,MAAM,aAAa,GAAG;IAC1B,uDAAuD;IACvD,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,4EAA4E;IAC5E,YAAY,CAAC,EAAE,MAAM,CAAC;IACtB,kEAAkE;IAClE,eAAe,CAAC,EAAE,OAAO,CAAC;IAC1B,oDAAoD;IACpD,UAAU,CAAC,EAAE,OAAO,CAAC;IACrB;;;;OAIG;IACH,SAAS,CAAC,EAAE;QACV,QAAQ,CAAC,UAAU,EAAE,qBAAqB,GAAG,IAAI,CAAC;QAClD;;;WAGG;QACH,QAAQ,CAAC,QAAQ,CAAC,EAAE,OAAO,CAAC;KAC7B,CAAC;IACF;;;;OAIG;IACH,gBAAgB,CAAC,EAAE,OAAO,CAAC;IAC3B;;;OAGG;IACH,gBAAgB,CAAC,EAAE,OAAO,CAAC;IAC3B;;;;;;;OAOG;IACH,YAAY,CAAC,EAAE;QAAE,QAAQ,CAAC,QAAQ,EAAE,OAAO,CAAA;KAAE,CAAC;CAC/C,CAAC;AAEF;;;;GAIG;AACH,wBAAgB,iBAAiB,CAC/B,KAAK,EAAE,YAAY,EACnB,OAAO,GAAE,aAAkB,GAC1B,MAAM,CA8FR"}
1
+ {"version":3,"file":"render.d.ts","sourceRoot":"","sources":["../../src/console/render.ts"],"names":[],"mappings":"AAGA,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,kBAAkB,CAAC;AAQlD,OAAO,KAAK,EAGV,qBAAqB,EACtB,MAAM,wBAAwB,CAAC;AAKhC,OAAO,KAAK,EAGV,YAAY,EAIb,MAAM,SAAS,CAAC;AAEjB,eAAO,MAAM,uBAAuB,EAClC,yHAAkI,CAAC;AASrI,mFAAmF;AACnF,wBAAgB,UAAU,CAAC,KAAK,EAAE,MAAM,GAAG,MAAM,CAOhD;AAwmBD;;;;GAIG;AACH,wBAAgB,eAAe,CAC7B,UAAU,EAAE,qBAAqB,GAAG,IAAI,EACxC,OAAO,GAAE;IAAE,QAAQ,CAAC,EAAE,OAAO,CAAA;CAAO,GACnC,MAAM,CA2BR;AAuOD,MAAM,MAAM,aAAa,GAAG;IAC1B,uDAAuD;IACvD,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,4EAA4E;IAC5E,YAAY,CAAC,EAAE,MAAM,CAAC;IACtB,kEAAkE;IAClE,eAAe,CAAC,EAAE,OAAO,CAAC;IAC1B,oDAAoD;IACpD,UAAU,CAAC,EAAE,OAAO,CAAC;IACrB;;;;OAIG;IACH,SAAS,CAAC,EAAE;QACV,QAAQ,CAAC,UAAU,EAAE,qBAAqB,GAAG,IAAI,CAAC;QAClD,sEAAsE;QACtE,QAAQ,CAAC,IAAI,EAAE,SAAS,CAAC;QACzB;;;WAGG;QACH,QAAQ,CAAC,QAAQ,CAAC,EAAE,OAAO,CAAC;KAC7B,CAAC;IACF;;;;OAIG;IACH,gBAAgB,CAAC,EAAE,OAAO,CAAC;IAC3B;;;OAGG;IACH,gBAAgB,CAAC,EAAE,OAAO,CAAC;IAC3B;;;;;;;OAOG;IACH,YAAY,CAAC,EAAE;QAAE,QAAQ,CAAC,QAAQ,EAAE,OAAO,CAAA;KAAE,CAAC;CAC/C,CAAC;AAEF;;;;GAIG;AACH,wBAAgB,iBAAiB,CAC/B,KAAK,EAAE,YAAY,EACnB,OAAO,GAAE,aAAkB,GAC1B,MAAM,CAmGR"}
package/dist/index.js CHANGED
@@ -3473,9 +3473,9 @@ async function loadRuntimeOpenTeamConfig(storage, options, path = DEFAULT_CONFIG
3473
3473
  }
3474
3474
  const configOptions = configOptionsFromPluginOptions(options);
3475
3475
  const optionsFound = configOptions !== undefined;
3476
- const overlayContent = await storage.read(overlayPath);
3476
+ const overlayContent = overlayPath === null ? undefined : await storage.read(overlayPath);
3477
3477
  const overlayFound = overlayContent !== undefined;
3478
- const overlayRaw = overlayFound ? parseConfigFileJson(overlayPath, overlayContent) : undefined;
3478
+ const overlayRaw = overlayFound && overlayPath !== null ? parseConfigFileJson(overlayPath, overlayContent) : undefined;
3479
3479
  const mergedRaw = mergeConfigInputs(mergeConfigInputs(fileRaw, configOptions), overlayRaw);
3480
3480
  const mergedSources = [
3481
3481
  fileFound ? path : undefined,
@@ -3491,7 +3491,7 @@ async function loadRuntimeOpenTeamConfig(storage, options, path = DEFAULT_CONFIG
3491
3491
  fileFound,
3492
3492
  optionsFound,
3493
3493
  overlayFound,
3494
- searchedPaths: [path, overlayPath]
3494
+ searchedPaths: overlayPath === null ? [path] : [path, overlayPath]
3495
3495
  };
3496
3496
  }
3497
3497
 
@@ -5820,6 +5820,13 @@ function chooseModel(input) {
5820
5820
  const override = input.task.explicitOverride;
5821
5821
  if (input.task.privacySensitive === true && input.config.privacyMode === "forceLocalOnSensitive") {
5822
5822
  if (local === null) {
5823
+ if (input.config.router.localOnly) {
5824
+ return finalizeDecision(input, tier, frontier, budgetAction, blockedDecision(frontier.model, [
5825
+ "privacy-force-local",
5826
+ "privacy-force-local-none-configured",
5827
+ "router-local-only"
5828
+ ], "privacy-local-only-none-configured"));
5829
+ }
5823
5830
  return finalizeDecision(input, tier, frontier, budgetAction, resolveFrontierPrimary(input, frontier.model, [
5824
5831
  "privacy-force-local",
5825
5832
  "privacy-force-local-none-configured"
@@ -5985,7 +5992,7 @@ function runtimeIdOfModel(model, config) {
5985
5992
  }
5986
5993
  function roleLocalModel(role, runtimeId, fallback) {
5987
5994
  const pinned = role.localModels?.[runtimeId];
5988
- return pinned === undefined ? fallback : { providerID: runtimeId, modelID: pinned };
5995
+ return pinned === undefined ? fallback : { ...fallback, modelID: pinned };
5989
5996
  }
5990
5997
  function selectDispatchRuntime(role, decision2, reachable, config) {
5991
5998
  if (decision2.routeKind !== "local") {
@@ -6433,7 +6440,7 @@ var FAILURE_CAUSE_RULES = [
6433
6440
  "rate limit",
6434
6441
  "rate-limit",
6435
6442
  "ratelimit",
6436
- "429",
6443
+ /(?<!\d)429(?!\d)/,
6437
6444
  "too many requests",
6438
6445
  "quota exceeded"
6439
6446
  ],
@@ -6443,8 +6450,7 @@ var FAILURE_CAUSE_RULES = [
6443
6450
  [
6444
6451
  "unauthorized",
6445
6452
  "authentication",
6446
- "401",
6447
- "403",
6453
+ /(?<!\d)(?:401|403)(?!\d)/,
6448
6454
  "forbidden",
6449
6455
  "api key",
6450
6456
  "invalid key",
@@ -6480,7 +6486,7 @@ var FAILURE_CAUSE_RULES = [
6480
6486
  "invalid_request",
6481
6487
  "validation",
6482
6488
  "bad request",
6483
- "400",
6489
+ /(?<!\d)400(?!\d)/,
6484
6490
  "unprocessable",
6485
6491
  "malformed"
6486
6492
  ],
@@ -6502,10 +6508,7 @@ var FAILURE_CAUSE_RULES = [
6502
6508
  [
6503
6509
  [
6504
6510
  "internal server error",
6505
- "500",
6506
- "502",
6507
- "503",
6508
- "504",
6511
+ /(?<!\d)(?:500|502|503|504)(?!\d)/,
6509
6512
  "service unavailable",
6510
6513
  "bad gateway",
6511
6514
  "overloaded"
@@ -6522,7 +6525,7 @@ var TIMEOUT_NEEDLES = [
6522
6525
  ];
6523
6526
  function matchFailureCause(lowerReason) {
6524
6527
  for (const [needles, cls] of FAILURE_CAUSE_RULES) {
6525
- if (needles.some((needle) => lowerReason.includes(needle))) {
6528
+ if (needles.some((needle) => typeof needle === "string" ? lowerReason.includes(needle) : needle.test(lowerReason))) {
6526
6529
  return cls;
6527
6530
  }
6528
6531
  }
@@ -12690,6 +12693,42 @@ function buildGraphSpecFromAssignments(assignments, batchID) {
12690
12693
  }));
12691
12694
  return { version: 1, runID: batchID, nodes };
12692
12695
  }
12696
+ function assertNeverTelemetryFailureClass(cls) {
12697
+ throw new Error(`unhandled telemetry failure class: ${cls}`);
12698
+ }
12699
+ function mapTelemetryFailureClassToErrorClass(cls) {
12700
+ switch (cls) {
12701
+ case "prompt-timeout":
12702
+ return "timeout";
12703
+ case "prompt-rate-limited":
12704
+ case "prompt-connection":
12705
+ case "prompt-server":
12706
+ return "transient";
12707
+ case "create-rejected":
12708
+ case "create-no-id":
12709
+ case "prompt-rejected":
12710
+ case "prompt-auth":
12711
+ case "prompt-content-filter":
12712
+ case "prompt-context-length":
12713
+ case "prompt-validation":
12714
+ return "permanent";
12715
+ case "unknown":
12716
+ return "unknown";
12717
+ default:
12718
+ return assertNeverTelemetryFailureClass(cls);
12719
+ }
12720
+ }
12721
+ function classifyShadowNodeError(result) {
12722
+ if (result === undefined || result.subsession.success) {
12723
+ return "unknown";
12724
+ }
12725
+ const failureReason = result.subsession.failureReason ?? result.record.failureReason;
12726
+ const failureStage = result.subsession.failureStage ?? result.record.failureStage;
12727
+ if (failureReason !== undefined || failureStage !== undefined) {
12728
+ return mapTelemetryFailureClassToErrorClass(classifyFailureForTelemetry(failureReason ?? "", failureStage));
12729
+ }
12730
+ return "unknown";
12731
+ }
12693
12732
  function synthesizeJournalEvents(spec, results, cancelled = []) {
12694
12733
  const runID = spec.runID;
12695
12734
  const events = [
@@ -12706,8 +12745,9 @@ function synthesizeJournalEvents(spec, results, cancelled = []) {
12706
12745
  resultByRole.set(r.subsession.roleID, r);
12707
12746
  }
12708
12747
  const cancelledSet = new Set(cancelled);
12748
+ const succeededNodes = new Set;
12709
12749
  for (const node of spec.nodes) {
12710
- if (cancelledSet.has(node.id)) {
12750
+ if (cancelledSet.has(node.id) || node.dependsOn.some((dep) => !succeededNodes.has(dep))) {
12711
12751
  events.push({
12712
12752
  v: 1,
12713
12753
  seq: events.length,
@@ -12738,7 +12778,7 @@ function synthesizeJournalEvents(spec, results, cancelled = []) {
12738
12778
  nodeID: node.id,
12739
12779
  operationID: operation,
12740
12780
  attemptID: attempt,
12741
- errorClass: "unknown"
12781
+ errorClass: classifyShadowNodeError(result)
12742
12782
  });
12743
12783
  } else {
12744
12784
  events.push({
@@ -12751,9 +12791,10 @@ function synthesizeJournalEvents(spec, results, cancelled = []) {
12751
12791
  attemptID: attempt,
12752
12792
  artifact: shadowArtifact2(runID, node.id)
12753
12793
  });
12794
+ succeededNodes.add(node.id);
12754
12795
  }
12755
12796
  }
12756
- const allSucceeded = cancelled.length === 0 && results.every((r) => r.subsession.success);
12797
+ const allSucceeded = cancelled.length === 0 && spec.nodes.every((node) => succeededNodes.has(node.id));
12757
12798
  events.push({
12758
12799
  v: 1,
12759
12800
  seq: events.length,
@@ -12762,8 +12803,9 @@ function synthesizeJournalEvents(spec, results, cancelled = []) {
12762
12803
  });
12763
12804
  return events;
12764
12805
  }
12765
- function buildObservation(batchID, _assignments, results, parentSessionID, cancelled = []) {
12766
- const allSucceeded = cancelled.length === 0 && results.every((r) => r.subsession.success);
12806
+ function buildObservation(batchID, assignments, results, parentSessionID, cancelled = []) {
12807
+ const resultByRole = new Map(results.map((result) => [result.subsession.roleID, result]));
12808
+ const allSucceeded = cancelled.length === 0 && assignments.every((assignment) => resultByRole.get(assignment.roleID)?.subsession.success === true);
12767
12809
  return {
12768
12810
  runID: batchID,
12769
12811
  executed: true,
@@ -13266,7 +13308,7 @@ var createOtlpSpanExporter = (connection, config) => {
13266
13308
  // package.json
13267
13309
  var package_default = {
13268
13310
  name: "@jmanuelcorral/openteam",
13269
- version: "0.14.0",
13311
+ version: "0.15.1",
13270
13312
  packageManager: "bun@1.3.14",
13271
13313
  description: "Cost-aware, local-first routing plugin for opencode with cheapest-capable frontier fallback and multi-agent orchestration.",
13272
13314
  license: "MIT",
@@ -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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"}
@@ -1 +1 @@
1
- {"version":3,"file":"runtimeSelection.d.ts","sourceRoot":"","sources":["../../src/orchestrator/runtimeSelection.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAgB,cAAc,EAAE,MAAM,kBAAkB,CAAC;AACrE,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,gBAAgB,CAAC;AAErD,OAAO,KAAK,EAAE,cAAc,EAAE,eAAe,EAAE,MAAM,iBAAiB,CAAC;AACvE,OAAO,KAAK,EAAE,gBAAgB,EAAE,MAAM,SAAS,CAAC;AAEhD;;;;;;;;;;GAUG;AACH,MAAM,MAAM,wBAAwB,GAAG;IACrC,QAAQ,CAAC,SAAS,EAAE,cAAc,GAAG,SAAS,CAAC;IAC/C,QAAQ,CAAC,QAAQ,EAAE,eAAe,CAAC;CACpC,CAAC;AASF;;;;;GAKG;AACH,wBAAgB,gBAAgB,CAC9B,KAAK,EAAE,cAAc,EACrB,MAAM,EAAE,cAAc,GACrB,cAAc,GAAG,SAAS,CAI5B;AAoBD;;;;;;;;;;;;;;;;;GAiBG;AACH,wBAAgB,qBAAqB,CACnC,IAAI,EAAE,gBAAgB,EACtB,QAAQ,EAAE,eAAe,EACzB,SAAS,EAAE,WAAW,CAAC,cAAc,CAAC,GAAG,SAAS,EAClD,MAAM,EAAE,cAAc,GACrB,wBAAwB,CAsC1B"}
1
+ {"version":3,"file":"runtimeSelection.d.ts","sourceRoot":"","sources":["../../src/orchestrator/runtimeSelection.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAgB,cAAc,EAAE,MAAM,kBAAkB,CAAC;AACrE,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,gBAAgB,CAAC;AAErD,OAAO,KAAK,EAAE,cAAc,EAAE,eAAe,EAAE,MAAM,iBAAiB,CAAC;AACvE,OAAO,KAAK,EAAE,gBAAgB,EAAE,MAAM,SAAS,CAAC;AAEhD;;;;;;;;;;GAUG;AACH,MAAM,MAAM,wBAAwB,GAAG;IACrC,QAAQ,CAAC,SAAS,EAAE,cAAc,GAAG,SAAS,CAAC;IAC/C,QAAQ,CAAC,QAAQ,EAAE,eAAe,CAAC;CACpC,CAAC;AASF;;;;;GAKG;AACH,wBAAgB,gBAAgB,CAC9B,KAAK,EAAE,cAAc,EACrB,MAAM,EAAE,cAAc,GACrB,cAAc,GAAG,SAAS,CAI5B;AAuBD;;;;;;;;;;;;;;;;;GAiBG;AACH,wBAAgB,qBAAqB,CACnC,IAAI,EAAE,gBAAgB,EACtB,QAAQ,EAAE,eAAe,EACzB,SAAS,EAAE,WAAW,CAAC,cAAc,CAAC,GAAG,SAAS,EAClD,MAAM,EAAE,cAAc,GACrB,wBAAwB,CAsC1B"}
@@ -1 +1 @@
1
- {"version":3,"file":"orchestrateTool.d.ts","sourceRoot":"","sources":["../../src/plugin/orchestrateTool.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"orchestrateTool.d.ts","sourceRoot":"","sources":["../../src/plugin/orchestrateTool.ts"],"names":[],"mappings":"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"}
@@ -1 +1 @@
1
- {"version":3,"file":"chooseModel.d.ts","sourceRoot":"","sources":["../../src/router/chooseModel.ts"],"names":[],"mappings":"AAgBA,OAAO,KAAK,EAIV,eAAe,EACf,YAAY,EACb,MAAM,SAAS,CAAC;AA+NjB,wBAAgB,WAAW,CAAC,KAAK,EAAE,YAAY,GAAG,eAAe,CAoOhE"}
1
+ {"version":3,"file":"chooseModel.d.ts","sourceRoot":"","sources":["../../src/router/chooseModel.ts"],"names":[],"mappings":"AAgBA,OAAO,KAAK,EAIV,eAAe,EACf,YAAY,EACb,MAAM,SAAS,CAAC;AA+NjB,wBAAgB,WAAW,CAAC,KAAK,EAAE,YAAY,GAAG,eAAe,CAyPhE"}
@@ -1,5 +1,5 @@
1
1
  import { createServer as createHttpServer } from "node:http";
2
- import type { ConsoleConfig } from "../config/schema";
2
+ import type { ConsoleConfig, GraphMode } from "../config/schema";
3
3
  import type { ConsoleClient } from "../console/opencodeClient";
4
4
  import type { PtyClient } from "../console/pty";
5
5
  import type { ConsoleInputs } from "../console/state";
@@ -62,6 +62,8 @@ export type ConsoleServerDeps = {
62
62
  graphApi?: {
63
63
  readView: () => Promise<GraphViewProjectionV1 | null>;
64
64
  };
65
+ /** Effective graph mode resolved by the caller; used only for presentation copy. */
66
+ graphMode?: GraphMode;
65
67
  /**
66
68
  * `true` when the operator enabled the console agent-tree view
67
69
  * (`console.graphView.enabled`) but the graph engine is off (`graph.mode` ==
@@ -1 +1 @@
1
- {"version":3,"file":"server.d.ts","sourceRoot":"","sources":["../../src/web/server.ts"],"names":[],"mappings":"AAAA,OAAO,EACL,YAAY,IAAI,gBAAgB,EAIjC,MAAM,WAAW,CAAC;AACnB,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,kBAAkB,CAAC;AACtD,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,2BAA2B,CAAC;AAC/D,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,gBAAgB,CAAC;AAEhD,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,kBAAkB,CAAC;AAGtD,OAAO,KAAK,EAAE,qBAAqB,EAAE,MAAM,wBAAwB,CAAC;AACpE,OAAO,EAAE,KAAK,eAAe,EAAqB,MAAM,eAAe,CAAC;AAQxE,OAAO,EAAsB,KAAK,gBAAgB,EAAE,MAAM,gBAAgB,CAAC;AAW3E,MAAM,MAAM,iBAAiB,GAAG;IAC9B,iEAAiE;IACjE,YAAY,EAAE,MAAM,OAAO,CAAC,aAAa,CAAC,CAAC;IAC3C,MAAM,EAAE,aAAa,CAAC;IACtB;;;;;OAKG;IACH,gBAAgB,CAAC,EAAE,MAAM,aAAa,CAAC;IACvC;;;OAGG;IACH,SAAS,CAAC,EAAE,eAAe,CAAC;IAC5B,2EAA2E;IAC3E,YAAY,CAAC,EAAE,OAAO,gBAAgB,CAAC;IACvC,sCAAsC;IACtC,GAAG,CAAC,EAAE,CAAC,OAAO,EAAE,MAAM,KAAK,IAAI,CAAC;IAChC,8EAA8E;IAC9E,OAAO,CAAC,EAAE;QACR,KAAK,EAAE,MAAM,CAAC;QACd,eAAe,EAAE,OAAO,CAAC;QACzB;;;;;WAKG;QACH,gBAAgB,CAAC,EAAE,OAAO,CAAC;QAC3B,+DAA+D;QAC/D,UAAU,CAAC,EAAE,OAAO,CAAC;QACrB;;;;WAIG;QACH,iBAAiB,CAAC,EAAE,OAAO,CAAC;QAC5B,YAAY,EAAE,CAAC,QAAQ,EAAE,MAAM,KAAK,aAAa,CAAC;QAClD,eAAe,CAAC,EAAE,CAAC,QAAQ,EAAE,MAAM,KAAK,SAAS,CAAC;KACnD,CAAC;IACF;;;OAGG;IACH,UAAU,CAAC,EAAE,gBAAgB,CAAC;IAC9B;;;;;OAKG;IACH,QAAQ,CAAC,EAAE;QACT,QAAQ,EAAE,MAAM,OAAO,CAAC,qBAAqB,GAAG,IAAI,CAAC,CAAC;KACvD,CAAC;IACF;;;;;;;;OAQG;IACH,aAAa,CAAC,EAAE,OAAO,CAAC;CACzB,CAAC;AAEF,MAAM,MAAM,aAAa,GAAG;IAC1B,GAAG,EAAE,MAAM,CAAC;IACZ,IAAI,EAAE,MAAM,CAAC;IACb,oEAAoE;IACpE,MAAM,EAAE,MAAM,OAAO,CAAC,IAAI,CAAC,CAAC;IAC5B,KAAK,EAAE,MAAM,IAAI,CAAC;CACnB,CAAC;AAuGF;;;;;;;;;;;GAWG;AACH,wBAAsB,mBAAmB,CACvC,IAAI,EAAE,iBAAiB,GACtB,OAAO,CAAC,aAAa,CAAC,CAuNxB"}
1
+ {"version":3,"file":"server.d.ts","sourceRoot":"","sources":["../../src/web/server.ts"],"names":[],"mappings":"AAAA,OAAO,EACL,YAAY,IAAI,gBAAgB,EAIjC,MAAM,WAAW,CAAC;AACnB,OAAO,KAAK,EAAE,aAAa,EAAE,SAAS,EAAE,MAAM,kBAAkB,CAAC;AACjE,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,2BAA2B,CAAC;AAC/D,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,gBAAgB,CAAC;AAEhD,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,kBAAkB,CAAC;AAGtD,OAAO,KAAK,EAAE,qBAAqB,EAAE,MAAM,wBAAwB,CAAC;AACpE,OAAO,EAAE,KAAK,eAAe,EAAqB,MAAM,eAAe,CAAC;AAQxE,OAAO,EAAsB,KAAK,gBAAgB,EAAE,MAAM,gBAAgB,CAAC;AAW3E,MAAM,MAAM,iBAAiB,GAAG;IAC9B,iEAAiE;IACjE,YAAY,EAAE,MAAM,OAAO,CAAC,aAAa,CAAC,CAAC;IAC3C,MAAM,EAAE,aAAa,CAAC;IACtB;;;;;OAKG;IACH,gBAAgB,CAAC,EAAE,MAAM,aAAa,CAAC;IACvC;;;OAGG;IACH,SAAS,CAAC,EAAE,eAAe,CAAC;IAC5B,2EAA2E;IAC3E,YAAY,CAAC,EAAE,OAAO,gBAAgB,CAAC;IACvC,sCAAsC;IACtC,GAAG,CAAC,EAAE,CAAC,OAAO,EAAE,MAAM,KAAK,IAAI,CAAC;IAChC,8EAA8E;IAC9E,OAAO,CAAC,EAAE;QACR,KAAK,EAAE,MAAM,CAAC;QACd,eAAe,EAAE,OAAO,CAAC;QACzB;;;;;WAKG;QACH,gBAAgB,CAAC,EAAE,OAAO,CAAC;QAC3B,+DAA+D;QAC/D,UAAU,CAAC,EAAE,OAAO,CAAC;QACrB;;;;WAIG;QACH,iBAAiB,CAAC,EAAE,OAAO,CAAC;QAC5B,YAAY,EAAE,CAAC,QAAQ,EAAE,MAAM,KAAK,aAAa,CAAC;QAClD,eAAe,CAAC,EAAE,CAAC,QAAQ,EAAE,MAAM,KAAK,SAAS,CAAC;KACnD,CAAC;IACF;;;OAGG;IACH,UAAU,CAAC,EAAE,gBAAgB,CAAC;IAC9B;;;;;OAKG;IACH,QAAQ,CAAC,EAAE;QACT,QAAQ,EAAE,MAAM,OAAO,CAAC,qBAAqB,GAAG,IAAI,CAAC,CAAC;KACvD,CAAC;IACF,oFAAoF;IACpF,SAAS,CAAC,EAAE,SAAS,CAAC;IACtB;;;;;;;;OAQG;IACH,aAAa,CAAC,EAAE,OAAO,CAAC;CACzB,CAAC;AAEF,MAAM,MAAM,aAAa,GAAG;IAC1B,GAAG,EAAE,MAAM,CAAC;IACZ,IAAI,EAAE,MAAM,CAAC;IACb,oEAAoE;IACpE,MAAM,EAAE,MAAM,OAAO,CAAC,IAAI,CAAC,CAAC;IAC5B,KAAK,EAAE,MAAM,IAAI,CAAC;CACnB,CAAC;AA0GF;;;;;;;;;;;GAWG;AACH,wBAAsB,mBAAmB,CACvC,IAAI,EAAE,iBAAiB,GACtB,OAAO,CAAC,aAAa,CAAC,CAuNxB"}
@@ -1,6 +1,6 @@
1
1
  import { watch as fsWatch } from "node:fs";
2
2
  import type { AgentFile } from "../commands/agents";
3
- import type { ConsoleConfig } from "../config/schema";
3
+ import type { ConsoleConfig, GraphMode } from "../config/schema";
4
4
  import type { ConsoleClient } from "../console/opencodeClient";
5
5
  import type { PtyClient } from "../console/pty";
6
6
  import type { CommitView } from "../console/types";
@@ -59,6 +59,8 @@ export type ConsoleRuntimeDeps = {
59
59
  graphView?: {
60
60
  readView: () => Promise<GraphViewProjectionV1 | null>;
61
61
  };
62
+ /** Effective graph mode resolved by the CLI/plugin composition root. */
63
+ graphMode?: GraphMode;
62
64
  /** Inyectables para tests. */
63
65
  serve?: typeof import("./server").createConsoleServer;
64
66
  watch?: (path: string, listener: () => void) => ReturnType<typeof fsWatch>;
@@ -1 +1 @@
1
- {"version":3,"file":"start.d.ts","sourceRoot":"","sources":["../../src/web/start.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,KAAK,IAAI,OAAO,EAAE,MAAM,SAAS,CAAC;AAE3C,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,oBAAoB,CAAC;AACpD,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,kBAAkB,CAAC;AACtD,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,2BAA2B,CAAC;AAC/D,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,gBAAgB,CAAC;AAChD,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,kBAAkB,CAAC;AACnD,OAAO,KAAK,EAAE,eAAe,EAAE,MAAM,qBAAqB,CAAC;AAC3D,OAAO,KAAK,EAAE,qBAAqB,EAAE,MAAM,wBAAwB,CAAC;AAIpE,OAAO,KAAK,EAAE,gBAAgB,EAAE,MAAM,gBAAgB,CAAC;AAGvD,MAAM,MAAM,kBAAkB,GAAG;IAC/B,MAAM,EAAE,aAAa,CAAC;IACtB;;;OAGG;IACH,gBAAgB,CAAC,EAAE,MAAM,aAAa,CAAC;IACvC;;OAEG;IACH,SAAS,CAAC,EAAE,OAAO,eAAe,EAAE,eAAe,CAAC;IACpD;;;;OAIG;IACH,UAAU,CAAC,EAAE,MAAM,CAAC;IACpB,yDAAyD;IACzD,WAAW,EAAE,MAAM,CAAC;IACpB,QAAQ,EAAE,MAAM,CAAC;IACjB,aAAa,CAAC,EAAE,MAAM,CAAC;IACvB,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,+DAA+D;IAC/D,mBAAmB,CAAC,EAAE,MAAM,CAAC;IAC7B,qEAAqE;IACrE,OAAO,EAAE,eAAe,CAAC;IACzB,cAAc,EAAE,CAAC,GAAG,EAAE,MAAM,KAAK,OAAO,CAAC,SAAS,EAAE,CAAC,CAAC;IACtD,GAAG,EAAE,MAAM,MAAM,CAAC;IAClB,aAAa,CAAC,EAAE,MAAM,OAAO,CAAC,UAAU,GAAG,SAAS,CAAC,CAAC;IACtD,OAAO,CAAC,EAAE;QAAE,EAAE,CAAC,EAAE,MAAM,CAAC;QAAC,SAAS,CAAC,EAAE,MAAM,CAAA;KAAE,CAAC;IAC9C,sEAAsE;IACtE,OAAO,CAAC,EAAE;QACR,KAAK,EAAE,MAAM,CAAC;QACd,eAAe,EAAE,OAAO,CAAC;QACzB,gBAAgB,CAAC,EAAE,OAAO,CAAC;QAC3B,UAAU,CAAC,EAAE,OAAO,CAAC;QACrB,YAAY,EAAE,CAAC,QAAQ,EAAE,MAAM,KAAK,aAAa,CAAC;QAClD,eAAe,CAAC,EAAE,CAAC,QAAQ,EAAE,MAAM,KAAK,SAAS,CAAC;KACnD,CAAC;IACF,oEAAoE;IACpE,UAAU,CAAC,EAAE,gBAAgB,CAAC;IAC9B;;;;OAIG;IACH,SAAS,CAAC,EAAE;QACV,QAAQ,EAAE,MAAM,OAAO,CAAC,qBAAqB,GAAG,IAAI,CAAC,CAAC;KACvD,CAAC;IACF,8BAA8B;IAC9B,KAAK,CAAC,EAAE,cAAc,UAAU,EAAE,mBAAmB,CAAC;IACtD,KAAK,CAAC,EAAE,CAAC,IAAI,EAAE,MAAM,EAAE,QAAQ,EAAE,MAAM,IAAI,KAAK,UAAU,CAAC,OAAO,OAAO,CAAC,CAAC;IAC3E,GAAG,CAAC,EAAE,CAAC,OAAO,EAAE,MAAM,KAAK,IAAI,CAAC;CACjC,CAAC;AAEF,MAAM,MAAM,cAAc,GAAG;IAC3B,GAAG,EAAE,MAAM,CAAC;IACZ,IAAI,EAAE,MAAM,CAAC;IACb,KAAK,EAAE,MAAM,IAAI,CAAC;CACnB,CAAC;AAEF;;;;GAIG;AACH,wBAAgB,YAAY,CAC1B,IAAI,EAAE,kBAAkB,GACvB,OAAO,CAAC,cAAc,CAAC,CAEzB"}
1
+ {"version":3,"file":"start.d.ts","sourceRoot":"","sources":["../../src/web/start.ts"],"names":[],"mappings":"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"}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@jmanuelcorral/openteam",
3
- "version": "0.14.0",
3
+ "version": "0.15.1",
4
4
  "packageManager": "bun@1.3.14",
5
5
  "description": "Cost-aware, local-first routing plugin for opencode with cheapest-capable frontier fallback and multi-agent orchestration.",
6
6
  "license": "MIT",