@jmanuelcorral/openteam 0.9.4 → 0.10.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
package/README.es.md CHANGED
@@ -819,7 +819,7 @@ Consulta [docs/compatibility.md](docs/compatibility.md). Resumen verificado el `
819
819
 
820
820
  | Superficie | Versión / contrato |
821
821
  | --- | --- |
822
- | openteam | `0.9.4`; versión actual del paquete |
822
+ | openteam | `0.10.0`; versión actual del paquete |
823
823
  | `@opencode-ai/plugin` | `1.18.19` |
824
824
  | `@opencode-ai/sdk` | `1.18.19` |
825
825
  | Hook de routing | `chat.message`; no `chat.params` para cambiar modelo |
package/README.md CHANGED
@@ -700,7 +700,7 @@ See [docs/compatibility.md](docs/compatibility.md). Verified summary as of `2026
700
700
 
701
701
  | Surface | Version / contract |
702
702
  | --- | --- |
703
- | openteam | `0.9.4`; current package version |
703
+ | openteam | `0.10.0`; current package version |
704
704
  | `@opencode-ai/plugin` | `1.18.19` |
705
705
  | `@opencode-ai/sdk` | `1.18.19` |
706
706
  | Routing hook | `chat.message`; not `chat.params` for model changes |
package/dist/cli.js CHANGED
@@ -101,7 +101,8 @@ var AgentRoleProfileSchema = z.object({
101
101
  preferredFrontierModels: z.array(z.union([modelSelectionSchema, z.literal("auto")])),
102
102
  localFirst: z.boolean(),
103
103
  requiresLocalRuntime: z.boolean().optional(),
104
- localRuntimes: z.array(z.enum(["ollama", "lmstudio", "foundry-local", "lemonade"])).optional()
104
+ localRuntimes: z.array(z.enum(["ollama", "lmstudio", "foundry-local", "lemonade"])).optional(),
105
+ localModels: z.partialRecord(z.enum(["ollama", "lmstudio", "foundry-local", "lemonade"]), z.string().min(1)).optional()
105
106
  }).strict();
106
107
  var TEAM_ROLES = {
107
108
  architect: {
@@ -392,6 +393,9 @@ var OrchestratorRolesSchema = z2.record(z2.string().min(1), z2.unknown()).defaul
392
393
  if (parsed.data.localRuntimes !== undefined) {
393
394
  profile.localRuntimes = parsed.data.localRuntimes;
394
395
  }
396
+ if (parsed.data.localModels !== undefined) {
397
+ profile.localModels = parsed.data.localModels;
398
+ }
395
399
  parsedRoles[roleID] = profile;
396
400
  }
397
401
  return parsedRoles;
@@ -403,6 +407,7 @@ var defaultFrontierModel = {
403
407
  providerID: "anthropic",
404
408
  modelID: "claude-sonnet-4-5"
405
409
  };
410
+ var DEFAULT_LOCAL_MAX_CONCURRENCY = 4;
406
411
  var LocalRuntimeSchema = z2.object({
407
412
  id: z2.enum(["ollama", "lmstudio", "foundry-local", "lemonade"]),
408
413
  enabled: z2.boolean().default(true),
@@ -473,13 +478,23 @@ var OpenTeamConfigObjectSchema = z2.object({
473
478
  localDefault: ModelRefSchema.nullable().default(null),
474
479
  trivialPromptMaxChars: z2.number().int().positive().default(280),
475
480
  frontierPromptMinChars: z2.number().int().positive().default(2000),
476
- frontierOnly: z2.boolean().default(false)
477
- }).strict().default({
481
+ frontierOnly: z2.boolean().default(false),
482
+ localOnly: z2.boolean().default(false)
483
+ }).strict().superRefine((router, ctx) => {
484
+ if (router.frontierOnly && router.localOnly) {
485
+ ctx.addIssue({
486
+ code: "custom",
487
+ path: ["localOnly"],
488
+ message: "router.localOnly and router.frontierOnly cannot both be true"
489
+ });
490
+ }
491
+ }).default({
478
492
  mode: "balanced",
479
493
  localDefault: null,
480
494
  trivialPromptMaxChars: 280,
481
495
  frontierPromptMinChars: 2000,
482
- frontierOnly: false
496
+ frontierOnly: false,
497
+ localOnly: false
483
498
  }),
484
499
  local: z2.object({
485
500
  runtimes: z2.array(LocalRuntimeSchema).default([])
@@ -863,6 +878,16 @@ function chooseModel(input) {
863
878
  if (override === "alwaysFrontier") {
864
879
  return finalizeDecision(input, tier, frontier, budgetAction, decision(frontier.model, "frontier", ["explicit-always-frontier"], []));
865
880
  }
881
+ if (input.config.router.localOnly) {
882
+ if (local === null) {
883
+ return finalizeDecision(input, tier, frontier, budgetAction, blockedDecision(frontier.model, ["router-local-only", "forced-local-none-configured"], "forced-local-none-configured"));
884
+ }
885
+ return finalizeDecision(input, tier, frontier, budgetAction, resolveLocalPrimary(input, local, frontier.model, {
886
+ baseRationale: ["router-local-only"],
887
+ allowFrontier: false,
888
+ noLocalRationale: "forced-local-unavailable"
889
+ }));
890
+ }
866
891
  if (input.config.router.frontierOnly) {
867
892
  return finalizeDecision(input, tier, frontier, budgetAction, decision(frontier.model, "frontier", ["router-frontier-only"], []));
868
893
  }
@@ -1485,6 +1510,10 @@ function configuredRuntime(runtimeId, config) {
1485
1510
  function runtimeIdOfModel(model, config) {
1486
1511
  return config.local.runtimes.find((runtime) => sameModel(runtime.defaultModel, model))?.id;
1487
1512
  }
1513
+ function roleLocalModel(role, runtimeId, fallback) {
1514
+ const pinned = role.localModels?.[runtimeId];
1515
+ return pinned === undefined ? fallback : { providerID: runtimeId, modelID: pinned };
1516
+ }
1488
1517
  function selectDispatchRuntime(role, decision2, reachable, config) {
1489
1518
  if (decision2.routeKind !== "local") {
1490
1519
  return { runtimeId: undefined, decision: decision2 };
@@ -1499,15 +1528,25 @@ function selectDispatchRuntime(role, decision2, reachable, config) {
1499
1528
  if (runtime === undefined) {
1500
1529
  continue;
1501
1530
  }
1502
- const model = runtime.defaultModel;
1531
+ const model = roleLocalModel(role, runtimeId, runtime.defaultModel);
1503
1532
  return {
1504
1533
  runtimeId,
1505
1534
  decision: { ...decision2, selected: model }
1506
1535
  };
1507
1536
  }
1508
1537
  }
1538
+ const resolvedRuntimeId = runtimeIdOfModel(decision2.selected, config);
1539
+ if (resolvedRuntimeId !== undefined) {
1540
+ const pinned = roleLocalModel(role, resolvedRuntimeId, decision2.selected);
1541
+ if (pinned !== decision2.selected) {
1542
+ return {
1543
+ runtimeId: resolvedRuntimeId,
1544
+ decision: { ...decision2, selected: pinned }
1545
+ };
1546
+ }
1547
+ }
1509
1548
  return {
1510
- runtimeId: runtimeIdOfModel(decision2.selected, config),
1549
+ runtimeId: resolvedRuntimeId,
1511
1550
  decision: decision2
1512
1551
  };
1513
1552
  }
@@ -2877,7 +2916,8 @@ var KNOWN_CONFIG_KEYS_BY_PATH = new Map([
2877
2916
  "localDefault",
2878
2917
  "trivialPromptMaxChars",
2879
2918
  "frontierPromptMinChars",
2880
- "frontierOnly"
2919
+ "frontierOnly",
2920
+ "localOnly"
2881
2921
  ]
2882
2922
  ],
2883
2923
  ["router.localDefault", MODEL_REF_KEYS],
@@ -10320,6 +10360,41 @@ var migrateMessages = {
10320
10360
  manualWorktreeEntry: (label, from, to) => ` · ${label}: ${from} → ${to}`,
10321
10361
  success: " ✓ machine-local runtime output relocated under .opencode/openteam-local/."
10322
10362
  };
10363
+ var rolesInitMessages = {
10364
+ header: "openteam roles init:",
10365
+ title: "openteam roles init",
10366
+ noRoster: (path) => ` ✗ no roster at ${path}.`,
10367
+ noRosterRemedy: " Cast the team first: run `openteam setup`, then ask the orchestrator to register the cast.",
10368
+ unparseableRoster: (path, error) => ` ✗ ${path} is present but unparseable: ${error}`,
10369
+ unparseableRosterRemedy: " Run `openteam doctor` for the remedy, then re-run this command.",
10370
+ allProfiled: (count) => ` ✓ ${count} roster role(s) checked; no unprofiled roles — every role resolves a routing profile.`,
10371
+ whyTitle: "Why you are being asked",
10372
+ why: (count) => [
10373
+ `${count} roster role(s) resolve no routing profile.`,
10374
+ "Until a profile exists they are frontier-eligible: their work can escalate",
10375
+ "to a frontier model. A 'local only' note in the roster prose does not",
10376
+ "prevent this — prose outside the JSON fence is never read."
10377
+ ].join(`
10378
+ `),
10379
+ policyQuestion: (roleID, agentName) => `Routing policy for "${roleID}" (${agentName})`,
10380
+ localOnlyLabel: (roleID, agentName) => `Local only — ${roleID} (${agentName}) never leaves this machine`,
10381
+ localOnlyHint: "sets requiresLocalRuntime; the role fails closed when no local runtime is reachable",
10382
+ frontierOkLabel: "Local first, frontier allowed",
10383
+ frontierOkHint: "records today's implicit behaviour: cheapest-capable frontier when the task warrants it",
10384
+ skipLabel: "Skip for now",
10385
+ skipHint: "leaves the role unprofiled, so it stays frontier-eligible and doctor keeps reporting it",
10386
+ runtimeQuestion: (roleID) => `Preferred local runtime(s) for "${roleID}" (in failover order)`,
10387
+ runtimeHint: "machine-local — written to the git-ignored overlay",
10388
+ cancelled: (reason) => ` ✗ cancelled (${reason}); nothing was written.`,
10389
+ invalidResult: (reason) => ` ✗ refusing to write: the resulting config is invalid — ${reason}`,
10390
+ nothingWritten: (skipped) => ` · skipped ${skipped}; nothing written.`,
10391
+ nothingToWriteOutro: "Nothing to write.",
10392
+ pinnedLocal: (roleIDs, path) => ` ✓ pinned local-only: ${roleIDs} → ${path} (tracked, travels with the roster)`,
10393
+ frontierAllowed: (roleIDs, path) => ` ✓ frontier allowed: ${roleIDs} → ${path} (model choice stays "auto": cheapest-capable per task)`,
10394
+ runtimeBinding: (path) => ` ✓ runtime binding: ${path} (git-ignored, machine-local)`,
10395
+ skippedSummary: (roleIDs) => ` · skipped: ${roleIDs} — still frontier-eligible; re-run this command to revisit.`,
10396
+ outro: "Role policy updated."
10397
+ };
10323
10398
 
10324
10399
  // src/commands/baseline.ts
10325
10400
  function formatRef(ref) {
@@ -10463,10 +10538,23 @@ function renderConsoleStatus(console_) {
10463
10538
  }
10464
10539
 
10465
10540
  // src/commands/doctor.ts
10466
- function runtimeLine(snapshot) {
10541
+ function runtimeLine(snapshot, runtime) {
10467
10542
  const mark = snapshot.reachable ? "✓" : "✗";
10468
10543
  const detail = snapshot.reachable ? `${snapshot.models.length} model(s)` : snapshot.error ?? "unreachable";
10469
- return ` ${mark} ${snapshot.id.padEnd(14)} ${snapshot.baseURL || "(no baseURL)"} — ${detail}`;
10544
+ const declared = runtime?.maxConcurrency;
10545
+ const slots = declared === undefined ? ` · ${DEFAULT_LOCAL_MAX_CONCURRENCY} slot(s) (default)` : ` · ${declared} slot(s) (declared)`;
10546
+ return ` ${mark} ${snapshot.id.padEnd(14)} ${snapshot.baseURL || "(no baseURL)"} — ${detail}${slots}`;
10547
+ }
10548
+ function isNetworkRuntime(baseURL) {
10549
+ if (baseURL.length === 0) {
10550
+ return false;
10551
+ }
10552
+ try {
10553
+ const host = new URL(baseURL).hostname.toLowerCase();
10554
+ return host !== "localhost" && host !== "127.0.0.1" && host !== "::1" && host !== "[::1]" && !host.endsWith(".localhost");
10555
+ } catch {
10556
+ return false;
10557
+ }
10470
10558
  }
10471
10559
  function failureReasonText(reason, searchedPaths) {
10472
10560
  switch (reason) {
@@ -10622,7 +10710,8 @@ function rosterHealthSection(audit, loadError, rosterRoleCount) {
10622
10710
  if (unprofiled.length > 0) {
10623
10711
  const roleIDs = unprofiled.map((entry) => entry.roleID).join(", ");
10624
10712
  lines.push(` · unprofiled roleID(s): ${roleIDs}`);
10625
- lines.push(" remedy: if intentional project roles, no action is required; for curated routing, change roleID to a TEAM_ROLES key or add a profile under orchestrator.roles in .opencode/openteam.json.");
10713
+ lines.push(" routing: no profile means frontier-eligible work for these roles can escalate to a frontier model. A 'local only' note in the roster prose does NOT prevent this: prose outside the JSON fence is never read.");
10714
+ lines.push(' remedy: run `openteam roles init` to compose a profile interactively, or add one by hand under orchestrator.roles in .opencode/openteam.json with "requiresLocalRuntime": true to pin the role local; for curated routing, change roleID to a TEAM_ROLES key instead.');
10626
10715
  }
10627
10716
  return lines;
10628
10717
  }
@@ -10657,9 +10746,17 @@ function renderDoctor(input) {
10657
10746
  lines.push(" (no runtime enabled)");
10658
10747
  } else {
10659
10748
  for (const snapshot of input.snapshots) {
10660
- lines.push(runtimeLine(snapshot));
10749
+ lines.push(runtimeLine(snapshot, enabledRuntimes.find((r) => r.id === snapshot.id)));
10661
10750
  }
10662
10751
  }
10752
+ for (const snapshot of input.snapshots) {
10753
+ if (!isNetworkRuntime(snapshot.baseURL)) {
10754
+ continue;
10755
+ }
10756
+ const runtime = enabledRuntimes.find((r) => r.id === snapshot.id);
10757
+ const cap = runtime?.maxConcurrency ?? DEFAULT_LOCAL_MAX_CONCURRENCY;
10758
+ lines.push(` ⚠ ${snapshot.id} is reached over the network: its ${cap}-slot cap is enforced per openteam process, so`, " two processes at once (an opencode session plus 'openteam console') can together exceed it.");
10759
+ }
10663
10760
  lines.push(` telemetry: ${input.telemetryPath} — ${input.telemetryRecords} record(s)`);
10664
10761
  if (input.diagnostics !== undefined) {
10665
10762
  lines.push(...diagnosticsSection(input.diagnostics));
@@ -11162,7 +11259,8 @@ function buildOpenTeamConfig(answers) {
11162
11259
  const runtime = {
11163
11260
  id: choice.id,
11164
11261
  enabled: choice.enabled,
11165
- defaultModel: { providerID: choice.id, modelID: choice.defaultModelID }
11262
+ defaultModel: { providerID: choice.id, modelID: choice.defaultModelID },
11263
+ maxConcurrency: choice.maxConcurrency ?? DEFAULT_LOCAL_MAX_CONCURRENCY
11166
11264
  };
11167
11265
  if (choice.baseURL !== undefined) {
11168
11266
  runtime.baseURL = choice.baseURL;
@@ -11173,6 +11271,7 @@ function buildOpenTeamConfig(answers) {
11173
11271
  });
11174
11272
  const primaryLocal = firstEnabled(answers.runtimes);
11175
11273
  const localDefault2 = primaryLocal !== undefined ? { providerID: primaryLocal.id, modelID: primaryLocal.defaultModelID } : null;
11274
+ const localOnly = answers.localOnly === true && primaryLocal !== undefined;
11176
11275
  return OpenTeamConfigSchema.parse({
11177
11276
  baseline: {
11178
11277
  mode: "auto",
@@ -11182,7 +11281,8 @@ function buildOpenTeamConfig(answers) {
11182
11281
  router: {
11183
11282
  mode: answers.routerMode,
11184
11283
  localDefault: localDefault2,
11185
- frontierOnly: primaryLocal === undefined
11284
+ frontierOnly: primaryLocal === undefined,
11285
+ localOnly
11186
11286
  },
11187
11287
  local: { runtimes },
11188
11288
  privacyMode: answers.privacyMode,
@@ -11212,15 +11312,17 @@ function buildOpencodeConfig(answers) {
11212
11312
  models
11213
11313
  };
11214
11314
  }
11315
+ const primaryLocal = firstEnabled(answers.runtimes);
11316
+ const localOnly = answers.localOnly === true && primaryLocal !== undefined;
11317
+ const mainModel = localOnly && primaryLocal !== undefined ? `${primaryLocal.id}/${primaryLocal.defaultModelID}` : `${answers.frontier.providerID}/${answers.frontier.modelID}`;
11215
11318
  const config = {
11216
11319
  $schema: "https://opencode.ai/config.json",
11217
11320
  plugin: [OPENTEAM_PLUGIN_SPEC],
11218
- model: `${answers.frontier.providerID}/${answers.frontier.modelID}`
11321
+ model: mainModel
11219
11322
  };
11220
11323
  if (Object.keys(provider).length > 0) {
11221
11324
  config.provider = provider;
11222
11325
  }
11223
- const primaryLocal = firstEnabled(answers.runtimes);
11224
11326
  if (primaryLocal !== undefined) {
11225
11327
  config.small_model = `${primaryLocal.id}/${primaryLocal.defaultModelID}`;
11226
11328
  }
@@ -11281,6 +11383,13 @@ async function browseFrontier(prompt, profiles) {
11281
11383
  const modelID = await prompt.select(opts);
11282
11384
  return { providerID, modelID };
11283
11385
  }
11386
+ function cheapestFrontier(profiles) {
11387
+ const first = sortFrontierByCost(profiles)[0];
11388
+ if (first === undefined) {
11389
+ throw new Error("no frontier profile available for the baseline");
11390
+ }
11391
+ return { providerID: first.ref.providerID, modelID: first.ref.modelID };
11392
+ }
11284
11393
  async function chooseFrontier(prompt, profiles) {
11285
11394
  const sorted = sortFrontierByCost(profiles);
11286
11395
  const first = sorted[0];
@@ -11467,6 +11576,10 @@ async function runSetup(deps) {
11467
11576
  runtimes.push(await resolveEnabledRuntime(deps, meta, info));
11468
11577
  }
11469
11578
  const hasLocalEnabled = enabled.size > 0;
11579
+ const localOnly = hasLocalEnabled ? await prompt.confirm({
11580
+ message: "Run without frontier models? (local runtimes only; openteam never escalates)",
11581
+ initial: false
11582
+ }) : false;
11470
11583
  let frontierProfiles;
11471
11584
  try {
11472
11585
  const loaded = await deps.loadFrontierProfiles();
@@ -11474,7 +11587,18 @@ async function runSetup(deps) {
11474
11587
  } catch {
11475
11588
  frontierProfiles = [...CURATED_FRONTIER_PROFILES];
11476
11589
  }
11477
- const frontier = await chooseFrontier(prompt, frontierProfiles);
11590
+ const frontier = localOnly ? cheapestFrontier(frontierProfiles) : await chooseFrontier(prompt, frontierProfiles);
11591
+ if (localOnly) {
11592
+ prompt.note([
11593
+ "openteam will never escalate to a frontier model.",
11594
+ "opencode's main model is pointed at your local runtime too, so the",
11595
+ "session itself does not reach a frontier provider either.",
11596
+ "",
11597
+ `A baseline is still recorded (${frontier.providerID}/${frontier.modelID})`,
11598
+ "but stays unused. Set router.localOnly to false to re-enable it."
11599
+ ].join(`
11600
+ `), "Local-only mode");
11601
+ }
11478
11602
  const routerMode = await prompt.select({
11479
11603
  message: "Routing mode",
11480
11604
  choices: [
@@ -11519,7 +11643,8 @@ async function runSetup(deps) {
11519
11643
  frontier,
11520
11644
  routerMode,
11521
11645
  privacyMode,
11522
- yolo
11646
+ yolo,
11647
+ localOnly
11523
11648
  };
11524
11649
  const openTeamConfig = buildOpenTeamConfig(answers);
11525
11650
  const opencodeConfig = buildOpencodeConfig(answers);
@@ -11587,14 +11712,14 @@ async function runSetup(deps) {
11587
11712
  return `${runtime.id} (${runtime.defaultModelID})${remote}`;
11588
11713
  }).join(", ");
11589
11714
  prompt.note([
11590
- `Baseline frontier: ${frontier.providerID}/${frontier.modelID}`,
11715
+ `Baseline frontier: ${localOnly ? `${frontier.providerID}/${frontier.modelID} (recorded but unused — local-only)` : `${frontier.providerID}/${frontier.modelID}`}`,
11591
11716
  `Local runtimes: ${enabledSummary || "none (frontier-only)"}`,
11592
11717
  `YOLO mode: ${yolo ? "enabled (auto-approves permissions)" : "disabled"}`,
11593
11718
  "Web Console: launched separately from the CLI with 'openteam console' (multi-session, loopback)",
11594
11719
  `Wrote: ${opencodePath}, ${DEFAULT_CONFIG_PATH}, ${ORCHESTRATOR_AGENT_PATH}, ${AGENT_DIR}/*.md (${roleAgentFiles.length} standard subagents), ${OPENTEAM_COMMAND_DIR}/*.md (${slashCommands.length} commands); ensured ${OPENCODE_GITIGNORE_PATH}`,
11595
11720
  "",
11596
11721
  "Next steps:",
11597
- ` 1. Authenticate the frontier provider: opencode auth login`,
11722
+ localOnly ? " 1. No frontier auth needed; openteam runs entirely on your local runtimes" : ` 1. Authenticate the frontier provider: opencode auth login`,
11598
11723
  hasLocalEnabled ? " 2. Make sure your local runtime (local or on the network) is reachable; openteam routes local-first automatically" : " 2. Open opencode in this repo; openteam will use frontier models only",
11599
11724
  " 3. Press Tab and pick the 'openteam' agent, or type / and pick an /openteam… command"
11600
11725
  ].join(`
@@ -12285,6 +12410,7 @@ var HELP = [
12285
12410
  " openteam local off Use frontier models only (no local runtime)",
12286
12411
  " openteam local on Re-enable local-first routing",
12287
12412
  " openteam doctor Diagnose runtimes and config",
12413
+ " openteam roles init Compose per-role routing policy for unprofiled roster roles",
12288
12414
  " openteam migrate Relocate pre-P15b artifacts to their split homes (idempotent)",
12289
12415
  " openteam agents List agents and each one's LLM (local/frontier)",
12290
12416
  " openteam console Launch the multi-session web Console (Ctrl+C to stop; --open opens the browser)",
@@ -13216,6 +13342,178 @@ ${HELP}`
13216
13342
  }
13217
13343
  }
13218
13344
 
13345
+ // src/commands/rolesInit.ts
13346
+ var ROLES_INIT_LOCAL_ONLY = "local-only";
13347
+ var ROLES_INIT_FRONTIER_OK = "frontier-ok";
13348
+ var ROLES_INIT_SKIP = "skip";
13349
+ function isJsonRecord2(value) {
13350
+ return typeof value === "object" && value !== null && !Array.isArray(value);
13351
+ }
13352
+ function serialize(value) {
13353
+ return `${JSON.stringify(value, null, 2)}
13354
+ `;
13355
+ }
13356
+ async function readJsonFile(deps, path3) {
13357
+ const content = await deps.readFile(path3);
13358
+ if (content === undefined)
13359
+ return {};
13360
+ const raw = parseConfigFileJson(path3, content);
13361
+ return isJsonRecord2(raw) ? raw : {};
13362
+ }
13363
+ function existingRoles(config) {
13364
+ const orchestrator = config.orchestrator;
13365
+ if (!isJsonRecord2(orchestrator))
13366
+ return {};
13367
+ const roles = orchestrator.roles;
13368
+ return isJsonRecord2(roles) ? roles : {};
13369
+ }
13370
+ function withRole(config, roleID, profile) {
13371
+ const orchestrator = isJsonRecord2(config.orchestrator) ? config.orchestrator : {};
13372
+ const roles = isJsonRecord2(orchestrator.roles) ? orchestrator.roles : {};
13373
+ return {
13374
+ ...config,
13375
+ orchestrator: {
13376
+ ...orchestrator,
13377
+ roles: { ...roles, [roleID]: profile }
13378
+ }
13379
+ };
13380
+ }
13381
+ function localOnlyProfile(roleID) {
13382
+ const base = synthesiseFallbackProfile(roleID);
13383
+ return {
13384
+ ...base,
13385
+ preferredFrontierModels: [],
13386
+ localFirst: true,
13387
+ requiresLocalRuntime: true
13388
+ };
13389
+ }
13390
+ function frontierEligibleProfile(roleID) {
13391
+ return { ...synthesiseFallbackProfile(roleID) };
13392
+ }
13393
+ function policyChoices(roleID, agentName) {
13394
+ return [
13395
+ {
13396
+ value: ROLES_INIT_LOCAL_ONLY,
13397
+ label: rolesInitMessages.localOnlyLabel(roleID, agentName),
13398
+ hint: rolesInitMessages.localOnlyHint
13399
+ },
13400
+ {
13401
+ value: ROLES_INIT_FRONTIER_OK,
13402
+ label: rolesInitMessages.frontierOkLabel,
13403
+ hint: rolesInitMessages.frontierOkHint
13404
+ },
13405
+ {
13406
+ value: ROLES_INIT_SKIP,
13407
+ label: rolesInitMessages.skipLabel,
13408
+ hint: rolesInitMessages.skipHint
13409
+ }
13410
+ ];
13411
+ }
13412
+ async function runRolesInit(deps) {
13413
+ const lines = [rolesInitMessages.header];
13414
+ const rosterContent = await deps.readFile(OPENTEAM_ROSTER_PATH);
13415
+ if (rosterContent === undefined) {
13416
+ lines.push(rolesInitMessages.noRoster(OPENTEAM_ROSTER_PATH), rolesInitMessages.noRosterRemedy);
13417
+ return { stdout: lines.join(`
13418
+ `), exitCode: 1 };
13419
+ }
13420
+ const parsed = parseRosterResult(rosterContent);
13421
+ if (!parsed.ok) {
13422
+ lines.push(rolesInitMessages.unparseableRoster(OPENTEAM_ROSTER_PATH, parsed.error.message), rolesInitMessages.unparseableRosterRemedy);
13423
+ return { stdout: lines.join(`
13424
+ `), exitCode: 1 };
13425
+ }
13426
+ const baseConfig = await readJsonFile(deps, DEFAULT_CONFIG_PATH);
13427
+ const configuredRoles = existingRoles(baseConfig);
13428
+ const unprofiled = parsed.roster.entries.filter((entry) => getRoleProfile(entry.roleID, configuredRoles) === undefined && !isKnownNonWorkerRole(entry.roleID));
13429
+ if (unprofiled.length === 0) {
13430
+ lines.push(rolesInitMessages.allProfiled(parsed.roster.entries.length));
13431
+ return { stdout: lines.join(`
13432
+ `), exitCode: 0 };
13433
+ }
13434
+ deps.prompt.intro(rolesInitMessages.title);
13435
+ deps.prompt.note(rolesInitMessages.why(unprofiled.length), rolesInitMessages.whyTitle);
13436
+ const runtimes = (await deps.detectRuntimes?.())?.filter((runtime) => runtime.available);
13437
+ let nextConfig = baseConfig;
13438
+ let nextOverlay;
13439
+ const pinned = [];
13440
+ const relaxed = [];
13441
+ const skipped = [];
13442
+ try {
13443
+ for (const entry of unprofiled) {
13444
+ const choice = await deps.prompt.select({
13445
+ message: rolesInitMessages.policyQuestion(entry.roleID, entry.agentName),
13446
+ choices: policyChoices(entry.roleID, entry.agentName),
13447
+ initial: ROLES_INIT_LOCAL_ONLY
13448
+ });
13449
+ if (choice === ROLES_INIT_SKIP) {
13450
+ skipped.push(entry.roleID);
13451
+ continue;
13452
+ }
13453
+ if (choice === ROLES_INIT_FRONTIER_OK) {
13454
+ nextConfig = withRole(nextConfig, entry.roleID, frontierEligibleProfile(entry.roleID));
13455
+ relaxed.push(entry.roleID);
13456
+ continue;
13457
+ }
13458
+ nextConfig = withRole(nextConfig, entry.roleID, localOnlyProfile(entry.roleID));
13459
+ pinned.push(entry.roleID);
13460
+ if (runtimes !== undefined && runtimes.length > 0) {
13461
+ const selected = await deps.prompt.multiselect({
13462
+ message: rolesInitMessages.runtimeQuestion(entry.roleID),
13463
+ choices: runtimes.map((runtime) => ({
13464
+ value: runtime.id,
13465
+ label: runtime.id,
13466
+ hint: rolesInitMessages.runtimeHint
13467
+ }))
13468
+ });
13469
+ if (selected.length > 0) {
13470
+ nextOverlay = withRole(nextOverlay ?? {}, entry.roleID, {
13471
+ localRuntimes: selected
13472
+ });
13473
+ }
13474
+ }
13475
+ }
13476
+ } catch (error) {
13477
+ const message = error instanceof Error ? error.message : String(error);
13478
+ lines.push(rolesInitMessages.cancelled(message));
13479
+ return { stdout: lines.join(`
13480
+ `), exitCode: 1 };
13481
+ }
13482
+ if (pinned.length === 0 && relaxed.length === 0) {
13483
+ lines.push(rolesInitMessages.nothingWritten(skipped.join(", ")));
13484
+ deps.prompt.outro(rolesInitMessages.nothingToWriteOutro);
13485
+ return { stdout: lines.join(`
13486
+ `), exitCode: 0 };
13487
+ }
13488
+ const merged = mergeConfigInputs(nextConfig, nextOverlay);
13489
+ try {
13490
+ loadOpenTeamConfig(merged);
13491
+ } catch (error) {
13492
+ lines.push(rolesInitMessages.invalidResult(error instanceof Error ? error.message : String(error)));
13493
+ return { stdout: lines.join(`
13494
+ `), exitCode: 1 };
13495
+ }
13496
+ await deps.writeFile(DEFAULT_CONFIG_PATH, serialize(nextConfig));
13497
+ if (nextOverlay !== undefined) {
13498
+ await deps.writeFile(DEFAULT_LOCAL_OVERLAY_PATH, serialize(nextOverlay));
13499
+ }
13500
+ if (pinned.length > 0) {
13501
+ lines.push(rolesInitMessages.pinnedLocal(pinned.join(", "), DEFAULT_CONFIG_PATH));
13502
+ }
13503
+ if (relaxed.length > 0) {
13504
+ lines.push(rolesInitMessages.frontierAllowed(relaxed.join(", "), DEFAULT_CONFIG_PATH));
13505
+ }
13506
+ if (nextOverlay !== undefined) {
13507
+ lines.push(rolesInitMessages.runtimeBinding(DEFAULT_LOCAL_OVERLAY_PATH));
13508
+ }
13509
+ if (skipped.length > 0) {
13510
+ lines.push(rolesInitMessages.skippedSummary(skipped.join(", ")));
13511
+ }
13512
+ deps.prompt.outro(rolesInitMessages.outro);
13513
+ return { stdout: lines.join(`
13514
+ `), exitCode: 0 };
13515
+ }
13516
+
13219
13517
  // src/config/legacyMigration.ts
13220
13518
  async function relocateNode(from, to, port, files) {
13221
13519
  if (!await port.exists(from)) {
@@ -14965,7 +15263,7 @@ async function buildMemoryRuntimeFromConfig(config, deps, options = {}) {
14965
15263
  // package.json
14966
15264
  var package_default = {
14967
15265
  name: "@jmanuelcorral/openteam",
14968
- version: "0.9.4",
15266
+ version: "0.10.0",
14969
15267
  packageManager: "bun@1.3.14",
14970
15268
  description: "Cost-aware, local-first routing plugin for opencode with cheapest-capable frontier fallback and multi-agent orchestration.",
14971
15269
  license: "MIT",
@@ -15382,6 +15680,20 @@ function createSetupDeps() {
15382
15680
  }
15383
15681
  };
15384
15682
  }
15683
+ function createRolesInitDeps() {
15684
+ const detect = createDetect(nodeExec2);
15685
+ return {
15686
+ prompt: clackPrompter,
15687
+ readFile: (path4) => storage.read(path4),
15688
+ writeFile: async (path4, contents) => {
15689
+ await storage.write(path4, contents);
15690
+ },
15691
+ detectRuntimes: async () => (await detect()).map((runtime) => ({
15692
+ id: runtime.id,
15693
+ available: runtime.reachable
15694
+ }))
15695
+ };
15696
+ }
15385
15697
  async function main() {
15386
15698
  const argv = process.argv.slice(2);
15387
15699
  const configSelection = parseConfigSelection(argv);
@@ -15389,6 +15701,15 @@ async function main() {
15389
15701
  const result2 = await runSetup(createSetupDeps());
15390
15702
  if (result2.stdout.length > 0) {
15391
15703
  process.stdout.write(`${result2.stdout}
15704
+ `);
15705
+ }
15706
+ process.exitCode = result2.exitCode;
15707
+ return;
15708
+ }
15709
+ if (argv[0] === "roles" && argv[1] === "init") {
15710
+ const result2 = await runRolesInit(createRolesInitDeps());
15711
+ if (result2.stdout.length > 0) {
15712
+ process.stdout.write(`${result2.stdout}
15392
15713
  `);
15393
15714
  }
15394
15715
  process.exitCode = result2.exitCode;
@@ -1 +1 @@
1
- {"version":3,"file":"dispatch.d.ts","sourceRoot":"","sources":["../../src/commands/dispatch.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"dispatch.d.ts","sourceRoot":"","sources":["../../src/commands/dispatch.ts"],"names":[],"mappings":"AAAA,OAAO,EACL,KAAK,eAAe,EAErB,MAAM,4BAA4B,CAAC;AACpC,OAAO,KAAK,EAAE,qBAAqB,EAAE,MAAM,2BAA2B,CAAC;AACvE,OAAO,KAAK,EAAE,mBAAmB,EAAE,MAAM,uBAAuB,CAAC;AAOjE,OAAO,KAAK,EAAY,cAAc,EAAE,MAAM,kBAAkB,CAAC;AACjE,OAAO,KAAK,EAAE,oBAAoB,EAAE,MAAM,gBAAgB,CAAC;AAE3D,OAAO,KAAK,EACV,uBAAuB,EACvB,YAAY,EAEZ,aAAa,EACd,MAAM,8BAA8B,CAAC;AAGtC,OAAO,EAAE,KAAK,gBAAgB,EAAc,MAAM,uBAAuB,CAAC;AAC1E,OAAO,EAA2B,KAAK,MAAM,EAAE,MAAM,wBAAwB,CAAC;AAC9E,OAAO,KAAK,EAAE,oBAAoB,EAAE,MAAM,mCAAmC,CAAC;AAC9E,OAAO,EAEL,KAAK,mBAAmB,EACxB,KAAK,uBAAuB,EAC7B,MAAM,oCAAoC,CAAC;AAE5C,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,oBAAoB,CAAC;AAErD,OAAO,EACL,KAAK,SAAS,EASf,MAAM,UAAU,CAAC;AAOlB,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,cAAc,CAAC;AAG9C,OAAO,EACL,KAAK,gBAAgB,EACrB,KAAK,iBAAiB,EAEvB,MAAM,UAAU,CAAC;AAClB,OAAO,EACL,KAAK,mBAAmB,EAKzB,MAAM,SAAS,CAAC;AAGjB,OAAO,EAKL,KAAK,YAAY,EAElB,MAAM,SAAS,CAAC;AAKjB,MAAM,MAAM,OAAO,GAAG;IACpB,UAAU,EAAE,CACV,IAAI,EAAE,MAAM,EACZ,OAAO,CAAC,EAAE,oBAAoB,KAC3B,OAAO,CAAC,cAAc,CAAC,CAAC;IAC7B,UAAU,EAAE,CACV,MAAM,EAAE,cAAc,EACtB,IAAI,EAAE,MAAM,EACZ,OAAO,CAAC,EAAE,oBAAoB,KAC3B,OAAO,CAAC,IAAI,CAAC,CAAC;IACnB,KAAK,EAAE,CAAC,MAAM,EAAE,cAAc,KAAK,OAAO,CAAC,oBAAoB,EAAE,CAAC,CAAC;IACnE,aAAa,EAAE,CAAC,IAAI,EAAE,MAAM,KAAK,OAAO,CAAC,UAAU,EAAE,CAAC,CAAC;IACvD;;;OAGG;IACH,eAAe,CAAC,EAAE,MAAM,OAAO,CAAC,gBAAgB,EAAE,CAAC,CAAC;IACpD;;;;OAIG;IACH,mBAAmB,CAAC,EAAE,MAAM,OAAO,CAAC,MAAM,GAAG,MAAM,GAAG,SAAS,CAAC,CAAC;IACjE;;;;OAIG;IACH,WAAW,CAAC,EAAE,CACZ,MAAM,EAAE,MAAM,GAAG,MAAM,EACvB,eAAe,CAAC,EAAE,QAAQ,CAAC,MAAM,CAAC,MAAM,EAAE,gBAAgB,CAAC,CAAC,KACzD,iBAAiB,CAAC;IACvB;;;;OAIG;IACH,kBAAkB,EAAE,CAClB,KAAK,EAAE,SAAS,MAAM,EAAE,KACrB,OAAO,CAAC,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,GAAG,SAAS,CAAC,CAAC;IAClD,mBAAmB,EAAE,CACnB,MAAM,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,EAC/B,IAAI,EAAE,MAAM,KACT,OAAO,CAAC,IAAI,CAAC,CAAC;IACnB;;;;OAIG;IACH,0BAA0B,EAAE,CAC1B,KAAK,EAAE,SAAS,MAAM,EAAE,KACrB,OAAO,CAAC,MAAM,GAAG,SAAS,CAAC,CAAC;IACjC,sBAAsB,EAAE,CAAC,QAAQ,EAAE,MAAM,EAAE,IAAI,EAAE,MAAM,KAAK,OAAO,CAAC,IAAI,CAAC,CAAC;IAC1E,cAAc,EAAE,CAAC,GAAG,EAAE,MAAM,KAAK,OAAO,CAAC,SAAS,EAAE,CAAC,CAAC;IACtD,iBAAiB,EAAE,CACjB,UAAU,EAAE,MAAM,EAClB,OAAO,CAAC,EAAE,oBAAoB,KAC3B,OAAO,CAAC,mBAAmB,CAAC,CAAC;IAClC,aAAa,CAAC,EAAE,iBAAiB,CAAC;IAClC,SAAS,CAAC,EAAE,SAAS,CAAC;IACtB,KAAK,CAAC,EAAE,YAAY,CAAC;IACrB;;;;OAIG;IACH,kBAAkB,CAAC,EAAE,MAAM,OAAO,CAAC,SAAS,mBAAmB,EAAE,CAAC,CAAC;IACnE;;;;;OAKG;IACH,mBAAmB,CAAC,EAAE,MAAM,OAAO,CAAC,qBAAqB,CAAC,CAAC;IAC3D;;;;;;;;OAQG;IACH,WAAW,CAAC,EAAE,WAAW,CAAC;IAC1B,UAAU,EAAE,MAAM,CAAC;IACnB,aAAa,EAAE,MAAM,CAAC;IACtB,mBAAmB,EAAE,SAAS,MAAM,EAAE,CAAC;IACvC,qBAAqB,EAAE,MAAM,CAAC;IAC9B,QAAQ,EAAE,MAAM,CAAC;IACjB,OAAO,EAAE,MAAM,CAAC;CACjB,CAAC;AAEF,MAAM,MAAM,qBAAqB,GAAG;IAClC,QAAQ,CAAC,MAAM,EAAE,MAAM,CAAC;IACxB,QAAQ,CAAC,IAAI,EAAE,mBAAmB,CAAC,SAAS,CAAC,CAAC;CAC/C,CAAC;AAEF,MAAM,MAAM,iBAAiB,GAAG;IAC9B,OAAO,CAAC,MAAM,EAAE,cAAc,GAAG,OAAO,CAAC,qBAAqB,CAAC,CAAC;CACjE,CAAC;AAEF,MAAM,MAAM,iBAAiB,GAAG;IAC9B,gBAAgB,CACd,MAAM,EAAE,cAAc,GACrB,OAAO,CAAC,SAAS,mBAAmB,EAAE,CAAC,CAAC;IAC3C,KAAK,CAAC,MAAM,EAAE,uBAAuB,EAAE,KAAK,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC,CAAC;CACtE,CAAC;AAEF,MAAM,MAAM,iBAAiB,GAAG;IAC9B,QAAQ,CAAC,MAAM,EAAE,MAAM,CAAC;IACxB,QAAQ,CAAC,QAAQ,EAAE,iBAAiB,CAAC;IACrC,QAAQ,CAAC,SAAS,EAAE,iBAAiB,CAAC;IACtC,QAAQ,CAAC,UAAU,CAAC,EAAE,uBAAuB,CAAC;IAC9C,QAAQ,CAAC,SAAS,CAAC,EAAE,SAAS,MAAM,EAAE,CAAC;IACvC,mBAAmB,IAAI,OAAO,CAAC,eAAe,CAAC,CAAC;IAChD,aAAa,CAAC,MAAM,EAAE,aAAa,EAAE,MAAM,EAAE,cAAc,GAAG,YAAY,CAAC;CAC5E,CAAC;AAEF,MAAM,MAAM,oBAAoB,GAAG;IACjC,QAAQ,CAAC,QAAQ,EAAE,OAAO,CAAC;CAC5B,CAAC;AAEF,MAAM,MAAM,SAAS,GAAG;IACtB,QAAQ,EAAE,MAAM,CAAC;IACjB,MAAM,EAAE,MAAM,CAAC;CAChB,CAAC;AAqnBF,gFAAgF;AAChF,eAAO,MAAM,2BAA2B,KAAK,CAAC;AAC9C,wDAAwD;AACxD,eAAO,MAAM,0BAA0B,IAAI,CAAC;AAC5C,mFAAmF;AACnF,eAAO,MAAM,8BAA8B,IAAI,CAAC;AAEhD,0DAA0D;AAC1D,eAAO,MAAM,yBAAyB,kCAAkC,CAAC;AAEzE,+EAA+E;AAC/E,MAAM,MAAM,WAAW,GAAG;IACxB,oEAAoE;IACpE,QAAQ,CAAC,IAAI,EAAE,MAAM,CAAC;IACtB,qEAAqE;IACrE,QAAQ,CAAC,IAAI,EAAE,MAAM,CAAC;IACtB,wDAAwD;IACxD,QAAQ,CAAC,OAAO,EAAE,OAAO,CAAC;IAC1B,sEAAsE;IACtE,QAAQ,CAAC,IAAI,CAAC,EAAE,MAAM,CAAC;CACxB,CAAC;AAKF,+DAA+D;AAC/D,wBAAgB,YAAY,CAAC,IAAI,EAAE,MAAM,GAAG,WAAW,EAAE,CAiBxD;AAED,0DAA0D;AAC1D,wBAAgB,qBAAqB,CACnC,KAAK,EAAE,SAAS,WAAW,EAAE,GAC5B,WAAW,EAAE,CAEf;AAED,oFAAoF;AACpF,wBAAgB,mBAAmB,CAAC,IAAI,EAAE,MAAM,EAAE,IAAI,EAAE,MAAM,GAAG,MAAM,CAQtE;AAED,kFAAkF;AAClF,MAAM,MAAM,cAAc,GACtB,eAAe,GACf,gBAAgB,GAChB,kBAAkB,GAClB,WAAW,GACX,aAAa,CAAC;AAElB,yEAAyE;AACzE,MAAM,MAAM,gBAAgB,GAAG;IAC7B,QAAQ,CAAC,IAAI,EAAE,OAAO,CAAC;IACvB,QAAQ,CAAC,MAAM,CAAC,EAAE,cAAc,CAAC;CAClC,CAAC;AAEF,qEAAqE;AACrE,MAAM,MAAM,aAAa,GAAG;IAC1B,QAAQ,CAAC,cAAc,EAAE,MAAM,CAAC;IAChC,8CAA8C;IAC9C,QAAQ,CAAC,SAAS,EAAE,MAAM,CAAC;IAC3B,QAAQ,CAAC,aAAa,EAAE,MAAM,CAAC;IAC/B,QAAQ,CAAC,SAAS,CAAC,EAAE,MAAM,CAAC;IAC5B,QAAQ,CAAC,QAAQ,EAAE,MAAM,CAAC;IAC1B,QAAQ,CAAC,cAAc,EAAE,OAAO,CAAC;IACjC,QAAQ,CAAC,QAAQ,EAAE,OAAO,CAAC;IAC3B,QAAQ,CAAC,eAAe,EAAE,MAAM,CAAC;IACjC,QAAQ,CAAC,eAAe,EAAE,MAAM,CAAC;CAClC,CAAC;AAEF;;;;GAIG;AACH,wBAAgB,gBAAgB,CAAC,KAAK,EAAE,aAAa,GAAG,gBAAgB,CAiBvE;AAED,oCAAoC;AACpC,MAAM,MAAM,SAAS,GAAG;IACtB,QAAQ,CAAC,aAAa,EAAE,MAAM,CAAC;IAC/B,QAAQ,CAAC,SAAS,CAAC,EAAE,MAAM,CAAC;IAC5B,QAAQ,CAAC,YAAY,EAAE,MAAM,CAAC;IAC9B,QAAQ,CAAC,eAAe,EAAE,MAAM,CAAC;IACjC,QAAQ,CAAC,YAAY,EAAE,OAAO,CAAC;IAC/B,QAAQ,CAAC,cAAc,EAAE,OAAO,CAAC;IACjC,QAAQ,CAAC,MAAM,EAAE,OAAO,CAAC;IACzB,QAAQ,CAAC,GAAG,EAAE,OAAO,CAAC;IACtB,QAAQ,CAAC,WAAW,EAAE,MAAM,CAAC;CAC9B,CAAC;AAEF,wEAAwE;AACxE,MAAM,MAAM,cAAc,GACtB;IAAE,QAAQ,CAAC,EAAE,EAAE,IAAI,CAAC;IAAC,QAAQ,CAAC,KAAK,EAAE,SAAS,CAAA;CAAE,GAChD;IAAE,QAAQ,CAAC,EAAE,EAAE,KAAK,CAAC;IAAC,QAAQ,CAAC,KAAK,EAAE,MAAM,CAAA;CAAE,CAAC;AAgBnD;;;GAGG;AACH,wBAAgB,cAAc,CAAC,IAAI,EAAE,SAAS,MAAM,EAAE,GAAG,cAAc,CAqEtE;AAED,uEAAuE;AACvE,MAAM,MAAM,qBAAqB,GAAG;IAClC,QAAQ,CAAC,MAAM,EAAE,MAAM,CAAC;IACxB,QAAQ,CAAC,SAAS,EAAE,MAAM,CAAC;IAC3B,QAAQ,CAAC,MAAM,EAAE,OAAO,CAAC;CAC1B,CAAC;AAEF,6DAA6D;AAC7D,MAAM,MAAM,YAAY,GAAG;IACzB,QAAQ,CAAC,MAAM,EAAE,MAAM,CAAC;IACxB,QAAQ,CAAC,aAAa,EAAE,MAAM,CAAC;IAC/B,QAAQ,CAAC,MAAM,EAAE,cAAc,CAAC;IAChC,QAAQ,CAAC,YAAY,EAAE,OAAO,CAAC;CAChC,CAAC;AAEF,6CAA6C;AAC7C,MAAM,MAAM,aAAa,GAAG;IAC1B,QAAQ,CAAC,UAAU,EAAE,MAAM,CAAC;IAC5B,QAAQ,CAAC,WAAW,EAAE,MAAM,GAAG,KAAK,CAAC;CACtC,CAAC;AAEF;;;GAGG;AACH,MAAM,MAAM,WAAW,GAAG;IACxB,oEAAoE;IACpE,cAAc,IAAI,OAAO,CAAC,oBAAoB,CAAC,CAAC;IAChD,mFAAmF;IACnF,oBAAoB,IAAI,OAAO,CAAC,MAAM,CAAC,CAAC;IACxC,wEAAwE;IACxE,eAAe,CAAC,SAAS,EAAE,MAAM,GAAG,OAAO,CAAC,OAAO,CAAC,CAAC;IACrD,4EAA4E;IAC5E,WAAW,CAAC,IAAI,EAAE,MAAM,GAAG,OAAO,CAAC,MAAM,GAAG,SAAS,CAAC,CAAC;IACvD,gDAAgD;IAChD,YAAY,CAAC,IAAI,EAAE,MAAM,EAAE,QAAQ,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC,CAAC;IAC5D,yEAAyE;IACzE,GAAG,CAAC,KAAK,EAAE,YAAY,GAAG,OAAO,CAAC,aAAa,CAAC,CAAC;CAClD,CAAC;AAyBF,8EAA8E;AAC9E,MAAM,MAAM,QAAQ,GAAG;IACrB,QAAQ,CAAC,KAAK,EAAE,SAAS,CAAC;IAC1B,QAAQ,CAAC,cAAc,EAAE,MAAM,CAAC;IAChC,QAAQ,CAAC,iBAAiB,EAAE,MAAM,CAAC;IACnC,QAAQ,CAAC,UAAU,EAAE,oBAAoB,CAAC;IAC1C,QAAQ,CAAC,UAAU,EAAE,SAAS,qBAAqB,EAAE,CAAC;CACvD,CAAC;AAaF,mDAAmD;AACnD,wBAAgB,cAAc,CAAC,IAAI,EAAE,QAAQ,GAAG,MAAM,CAuBrD;AA2HD,wBAAsB,MAAM,CAC1B,IAAI,EAAE,SAAS,MAAM,EAAE,EACvB,IAAI,EAAE,OAAO,GACZ,OAAO,CAAC,SAAS,CAAC,CA6RpB"}
@@ -1,5 +1,5 @@
1
1
  import type { LegacyLayoutFinding } from "../config/legacyPaths";
2
- import type { OpenTeamConfig } from "../config/schema";
2
+ import { type OpenTeamConfig } from "../config/schema";
3
3
  import type { LocalRuntimeSnapshot } from "../local/types";
4
4
  import { type DiagnosticCode } from "../telemetry/diagnostics";
5
5
  import type { GraphViewHealth } from "../telemetry/graphView";
@@ -1 +1 @@
1
- {"version":3,"file":"doctor.d.ts","sourceRoot":"","sources":["../../src/commands/doctor.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"doctor.d.ts","sourceRoot":"","sources":["../../src/commands/doctor.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,55 @@
1
+ import type { LocalRuntimeId } from "../local/types";
2
+ import type { Prompter } from "./setup";
3
+ /**
4
+ * `openteam roles init` — assisted composition of per-role routing policy.
5
+ *
6
+ * Background (#206). The roster is the portable answer to *who*: `roleID` ->
7
+ * themed `agentName`. Routing policy is the answer to *how*, and lives under
8
+ * `orchestrator.roles` in the config. Nothing connected the two, so a roster
9
+ * role that is not a `TEAM_ROLES` key resolved no profile and fell through to
10
+ * {@link synthesiseFallbackProfile}, which is deliberately frontier-eligible.
11
+ *
12
+ * The failure mode this closes is a privacy one: humans naturally write "local
13
+ * only" as prose in the roster, but prose lives OUTSIDE the JSON fence and is
14
+ * never read, so the stated intent was silently dropped.
15
+ *
16
+ * Destination split — deliberate, and the reason this command writes two files:
17
+ *
18
+ * - **Intent** (`requiresLocalRuntime`, tiers) -> `.opencode/openteam.json`,
19
+ * which is tracked and portable, so the privacy decision travels with the
20
+ * roster to every clone and to CI. Putting it in an ignored file instead
21
+ * would recreate the exact bug on every fresh clone.
22
+ * - **Binding** (`localRuntimes`) -> `.opencode/openteam-local/config.local.json`,
23
+ * which is git-ignored, because which runtimes exist is a property of one
24
+ * machine. This is the same P15b boundary the rest of the config already uses.
25
+ *
26
+ * Interactivity is why this is a separate command rather than a step inside
27
+ * `doctor`: `doctor` is a pure renderer and also runs as `/openteam doctor`
28
+ * inside opencode, where there is no TTY to answer a prompt.
29
+ */
30
+ export declare const ROLES_INIT_LOCAL_ONLY = "local-only";
31
+ export declare const ROLES_INIT_FRONTIER_OK = "frontier-ok";
32
+ export declare const ROLES_INIT_SKIP = "skip";
33
+ /** A local runtime the host machine can actually reach. */
34
+ export type RolesInitRuntime = {
35
+ readonly id: LocalRuntimeId;
36
+ readonly available: boolean;
37
+ };
38
+ export type RolesInitDeps = {
39
+ prompt: Prompter;
40
+ /** Paths are relative to the project root; the storage is already rooted. */
41
+ readFile: (path: string) => Promise<string | undefined>;
42
+ writeFile: (path: string, contents: string) => Promise<void>;
43
+ /**
44
+ * Optional runtime discovery. When absent (or when nothing is reachable) the
45
+ * command records intent only and leaves the runtime binding unset, which
46
+ * keeps today's behaviour: the role dispatches to whatever local routing picks.
47
+ */
48
+ detectRuntimes?: () => Promise<readonly RolesInitRuntime[]>;
49
+ };
50
+ export type RolesInitResult = {
51
+ readonly stdout: string;
52
+ readonly exitCode: number;
53
+ };
54
+ export declare function runRolesInit(deps: RolesInitDeps): Promise<RolesInitResult>;
55
+ //# sourceMappingURL=rolesInit.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"rolesInit.d.ts","sourceRoot":"","sources":["../../src/commands/rolesInit.ts"],"names":[],"mappings":"AAMA,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,gBAAgB,CAAC;AAUrD,OAAO,KAAK,EAAE,QAAQ,EAAgB,MAAM,SAAS,CAAC;AAEtD;;;;;;;;;;;;;;;;;;;;;;;;;;GA0BG;AAEH,eAAO,MAAM,qBAAqB,eAAe,CAAC;AAClD,eAAO,MAAM,sBAAsB,gBAAgB,CAAC;AACpD,eAAO,MAAM,eAAe,SAAS,CAAC;AAOtC,2DAA2D;AAC3D,MAAM,MAAM,gBAAgB,GAAG;IAC7B,QAAQ,CAAC,EAAE,EAAE,cAAc,CAAC;IAC5B,QAAQ,CAAC,SAAS,EAAE,OAAO,CAAC;CAC7B,CAAC;AAEF,MAAM,MAAM,aAAa,GAAG;IAC1B,MAAM,EAAE,QAAQ,CAAC;IACjB,6EAA6E;IAC7E,QAAQ,EAAE,CAAC,IAAI,EAAE,MAAM,KAAK,OAAO,CAAC,MAAM,GAAG,SAAS,CAAC,CAAC;IACxD,SAAS,EAAE,CAAC,IAAI,EAAE,MAAM,EAAE,QAAQ,EAAE,MAAM,KAAK,OAAO,CAAC,IAAI,CAAC,CAAC;IAC7D;;;;OAIG;IACH,cAAc,CAAC,EAAE,MAAM,OAAO,CAAC,SAAS,gBAAgB,EAAE,CAAC,CAAC;CAC7D,CAAC;AAEF,MAAM,MAAM,eAAe,GAAG;IAC5B,QAAQ,CAAC,MAAM,EAAE,MAAM,CAAC;IACxB,QAAQ,CAAC,QAAQ,EAAE,MAAM,CAAC;CAC3B,CAAC;AAkGF,wBAAsB,YAAY,CAChC,IAAI,EAAE,aAAa,GAClB,OAAO,CAAC,eAAe,CAAC,CA4I1B"}
@@ -79,6 +79,14 @@ export type RuntimeChoice = {
79
79
  baseURL?: string;
80
80
  defaultModelID: string;
81
81
  models: string[];
82
+ /**
83
+ * Concurrent generation slots this runtime really has (#144/#207). Optional on
84
+ * the answer so existing construction sites stay valid; `buildOpenTeamConfig`
85
+ * falls back to `DEFAULT_LOCAL_MAX_CONCURRENCY` and always writes the resolved
86
+ * value, so the cap in force is visible in the generated file instead of being
87
+ * an invisible read-time default nobody knows to override.
88
+ */
89
+ maxConcurrency?: number;
82
90
  };
83
91
  export type FrontierChoice = FrontierChoiceType;
84
92
  export type SetupAnswers = {
@@ -87,6 +95,15 @@ export type SetupAnswers = {
87
95
  routerMode: RouterMode;
88
96
  privacyMode: PrivacyMode;
89
97
  yolo: boolean;
98
+ /**
99
+ * Run without frontier models at all (#209).
100
+ *
101
+ * `frontier` stays populated even when this is true: the schema requires a
102
+ * `baseline.hardDefault`, and keeping it recorded means flipping
103
+ * `router.localOnly` back to false in the file restores a working frontier
104
+ * baseline without re-running setup.
105
+ */
106
+ localOnly?: boolean;
90
107
  };
91
108
  export type OpencodeProviderConfig = {
92
109
  npm: string;
@@ -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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"}
@@ -1 +1 @@
1
- {"version":3,"file":"errors.d.ts","sourceRoot":"","sources":["../../src/config/errors.ts"],"names":[],"mappings":"AAEA,eAAO,MAAM,SAAS,WAAW,CAAC;AAIlC,eAAO,MAAM,yBAAyB,EAAE,WAAW,CAAC,MAAM,EAAE,SAAS,MAAM,EAAE,CA0GzE,CAAC;AAgIL,KAAK,6BAA6B,GAAG;IACnC,QAAQ,CAAC,eAAe,CAAC,EAAE,WAAW,CAAC,MAAM,EAAE,SAAS,MAAM,EAAE,CAAC,CAAC;IAClE,QAAQ,CAAC,oBAAoB,CAAC,EAAE,MAAM,CAAC;CACxC,CAAC;AAEF,wBAAgB,sBAAsB,CACpC,KAAK,EAAE,OAAO,EACd,OAAO,GAAE,6BAAkC,GAC1C,MAAM,CA0BR;AAED,wBAAgB,iBAAiB,CAAC,KAAK,EAAE,OAAO,GAAG,MAAM,CAKxD"}
1
+ {"version":3,"file":"errors.d.ts","sourceRoot":"","sources":["../../src/config/errors.ts"],"names":[],"mappings":"AAEA,eAAO,MAAM,SAAS,WAAW,CAAC;AAIlC,eAAO,MAAM,yBAAyB,EAAE,WAAW,CAAC,MAAM,EAAE,SAAS,MAAM,EAAE,CA2GzE,CAAC;AAgIL,KAAK,6BAA6B,GAAG;IACnC,QAAQ,CAAC,eAAe,CAAC,EAAE,WAAW,CAAC,MAAM,EAAE,SAAS,MAAM,EAAE,CAAC,CAAC;IAClE,QAAQ,CAAC,oBAAoB,CAAC,EAAE,MAAM,CAAC;CACxC,CAAC;AAEF,wBAAgB,sBAAsB,CACpC,KAAK,EAAE,OAAO,EACd,OAAO,GAAE,6BAAkC,GAC1C,MAAM,CA0BR;AAED,wBAAgB,iBAAiB,CAAC,KAAK,EAAE,OAAO,GAAG,MAAM,CAKxD"}
@@ -277,6 +277,7 @@ export declare const OpenTeamConfigObjectSchema: z.ZodObject<{
277
277
  trivialPromptMaxChars: z.ZodDefault<z.ZodNumber>;
278
278
  frontierPromptMinChars: z.ZodDefault<z.ZodNumber>;
279
279
  frontierOnly: z.ZodDefault<z.ZodBoolean>;
280
+ localOnly: z.ZodDefault<z.ZodBoolean>;
280
281
  }, z.core.$strict>>;
281
282
  local: z.ZodDefault<z.ZodObject<{
282
283
  runtimes: z.ZodDefault<z.ZodArray<z.ZodObject<{
@@ -429,6 +430,7 @@ export declare const OpenTeamConfigSchema: z.ZodObject<{
429
430
  trivialPromptMaxChars: z.ZodDefault<z.ZodNumber>;
430
431
  frontierPromptMinChars: z.ZodDefault<z.ZodNumber>;
431
432
  frontierOnly: z.ZodDefault<z.ZodBoolean>;
433
+ localOnly: z.ZodDefault<z.ZodBoolean>;
432
434
  }, z.core.$strict>>;
433
435
  local: z.ZodDefault<z.ZodObject<{
434
436
  runtimes: z.ZodDefault<z.ZodArray<z.ZodObject<{
@@ -1 +1 @@
1
- {"version":3,"file":"schema.d.ts","sourceRoot":"","sources":["../../src/config/schema.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"schema.d.ts","sourceRoot":"","sources":["../../src/config/schema.ts"],"names":[],"mappings":"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"}
@@ -1 +1 @@
1
- {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AACA,OAAO,EACL,KAAK,MAAM,EAEX,KAAK,YAAY,EAGlB,MAAM,qBAAqB,CAAC;AAI7B,OAAO,KAAK,EAAE,OAAO,EAAwB,MAAM,qBAAqB,CAAC;AAEzE,OAAO,EAGL,KAAK,cAAc,EAGpB,MAAM,2BAA2B,CAAC;AAOnC,OAAO,EAEL,KAAK,YAAY,EAElB,MAAM,kBAAkB,CAAC;AAQ1B,OAAO,EAGL,KAAK,cAAc,EACpB,MAAM,iBAAiB,CAAC;AAezB,OAAO,EAEL,eAAe,EAEhB,MAAM,kBAAkB,CAAC;AAgD1B,OAAO,EAEL,KAAK,mBAAmB,EACxB,KAAK,aAAa,EAEnB,MAAM,8BAA8B,CAAC;AAGtC,OAAO,KAAK,EAAE,eAAe,EAAE,MAAM,oBAAoB,CAAC;AAC1D,OAAO,EAEL,KAAK,SAAS,EAGf,MAAM,sBAAsB,CAAC;AAoB9B,wBAAgB,2BAA2B,CACzC,KAAK,EAAE,OAAO,EACd,IAAI,CAAC,EAAE,CAAC,OAAO,CAAC,EAAE,OAAO,KAAK,IAAI,GACjC,IAAI,CAGN;AAED,wBAAgB,iBAAiB,CAC/B,KAAK,EAAE,OAAO,EACd,IAAI,CAAC,EAAE,CAAC,OAAO,CAAC,EAAE,OAAO,KAAK,IAAI,GACjC,IAAI,CAGN;AAED,wBAAgB,mBAAmB,CACjC,OAAO,EAAE,MAAM,EACf,IAAI,CAAC,EAAE,CAAC,OAAO,CAAC,EAAE,OAAO,KAAK,IAAI,GACjC,IAAI,CAEN;AAID,wBAAgB,oBAAoB,CAClC,SAAS,EAAE,GAAG,EACd,IAAI,CAAC,EAAE,CAAC,OAAO,CAAC,EAAE,OAAO,KAAK,IAAI,GACjC,IAAI,CASN;AAED,eAAO,MAAM,0CAA0C,KAAK,CAAC;AAE7D,wBAAgB,sCAAsC,CACpD,SAAS,SAA6C,EACtD,IAAI,CAAC,EAAE,CAAC,OAAO,CAAC,EAAE,OAAO,KAAK,IAAI,GACjC,CAAC,KAAK,EAAE,OAAO,KAAK,IAAI,CAwB1B;AAED,wBAAgB,wBAAwB,CACtC,KAAK,EAAE,SAAS,MAAM,EAAE,EACxB,WAAW,EAAE,OAAO,EACpB,UAAU,EAAE;IAAE,UAAU,EAAE,MAAM,CAAC;IAAC,OAAO,EAAE,MAAM,CAAA;CAAE,GAAG,IAAI,EAC1D,IAAI,CAAC,EAAE,CAAC,OAAO,CAAC,EAAE,OAAO,KAAK,IAAI,GACjC,IAAI,CAsBN;AAED;;;;;;;GAOG;AACH,wBAAgB,uBAAuB,CACrC,KAAK,EAAE,SAAS,MAAM,EAAE,EACxB,IAAI,CAAC,EAAE,CAAC,OAAO,CAAC,EAAE,OAAO,KAAK,IAAI,GACjC,IAAI,CASN;AAED,wBAAgB,0BAA0B,CACxC,MAAM,EAAE,mBAAmB,EAC3B,IAAI,CAAC,EAAE,CAAC,OAAO,CAAC,EAAE,OAAO,KAAK,IAAI,GACjC,IAAI,CAaN;AA0CD;;;;;;;;;;;;;;;;GAgBG;AAEH;;;;;;;;;;;;;;GAcG;AACH,MAAM,MAAM,mBAAmB,GAAG,MAAM,GAAG;IACzC,QAAQ,CAAC,OAAO,EAAE,qBAAqB,CAAC;CACzC,CAAC;AAEF,KAAK,SAAS,GAAG,CAAC,KAAK,EAAE,WAAW,GAAG,GAAG,KAAK,OAAO,CAAC,QAAQ,CAAC,CAAC;AAYjE,KAAK,0BAA0B,GAAG;IAChC,QAAQ,CAAC,KAAK,CAAC,EAAE,SAAS,CAAC;IAC3B,QAAQ,CAAC,MAAM,CAAC,EAAE,OAAO,CAAC;IAC1B,QAAQ,CAAC,SAAS,CAAC,EAAE,CAAC,KAAK,EAAE,OAAO,KAAK,IAAI,CAAC;CAC/C,CAAC;AAiKF,wBAAsB,mBAAmB,CACvC,SAAS,EAAE,GAAG,EACd,OAAO,GAAE,0BAA+B,GACvC,OAAO,CAAC,mBAAmB,CAAC,CAW9B;AAED,KAAK,gCAAgC,GAAG,0BAA0B,GAAG;IACnE,QAAQ,CAAC,KAAK,CAAC,EAAE,CAAC,EAAE,EAAE,MAAM,KAAK,OAAO,CAAC,IAAI,CAAC,CAAC;IAC/C,QAAQ,CAAC,SAAS,CAAC,EAAE,SAAS,MAAM,EAAE,CAAC;CACxC,CAAC;AAUF,wBAAgB,+BAA+B,CAC7C,SAAS,EAAE,GAAG,EACd,OAAO,GAAE,gCAAqC,GAC7C,MAAM,OAAO,CAAC,mBAAmB,CAAC,CAyCpC;AAED;;;;;;;;;;GAUG;AACH,wBAAsB,cAAc,CAClC,MAAM,EAAE,cAAc,EACtB,OAAO,EAAE,eAAe,EACxB,eAAe,EAAE,mBAAmB,EACpC,IAAI,CAAC,EAAE,CAAC,OAAO,CAAC,EAAE,OAAO,KAAK,IAAI,GACjC,OAAO,CAAC,cAAc,CAAC,CAgFzB;AAED,uEAAuE;AACvE,wBAAgB,wBAAwB,CACtC,OAAO,EAAE,eAAe,GACvB,aAAa,CAmBf;AAuCD,wBAAgB,eAAe,CAC7B,UAAU,EAAE,OAAO,EACnB,OAAO,GAAE,eAAwD,EACjE,OAAO,GAAE;IACP,QAAQ,CAAC,OAAO,CAAC,EAAE,CAAC,KAAK,EAAE,OAAO,KAAK,IAAI,CAAC;IAC5C,QAAQ,CAAC,MAAM,CAAC,EAAE,CAAC,OAAO,EAAE,MAAM,KAAK,IAAI,CAAC;CACxC,GACL,SAAS,CAiCX;AAED,wBAAgB,aAAa,CAAC,KAAK,EAAE,OAAO,GAAG,OAAO,CAOrD;AA0CD,wBAAgB,aAAa,CAC3B,MAAM,EAAE,cAAc,EACtB,QAAQ,EAAE,eAAe,EACzB,aAAa,EAAE,MAAM,EACrB,WAAW,GAAE,MAA6B,EAC1C,OAAO,GAAE,eAAwD,EACjE,cAAc,GAAE,YAAwB,EACxC,UAAU,CAAC,EAAE,OAAO,GACnB,OAAO,CA+FT;AA2JD,eAAO,MAAM,MAAM,EAAE,MAsVpB,CAAC;AAEF,QAAA,MAAM,MAAM,EAAE,YAGb,CAAC;AAEF,OAAO,EAAE,eAAe,EAAE,MAAM,WAAW,CAAC;eAE7B,MAAM"}
package/dist/index.js CHANGED
@@ -95,7 +95,8 @@ var AgentRoleProfileSchema = z.object({
95
95
  preferredFrontierModels: z.array(z.union([modelSelectionSchema, z.literal("auto")])),
96
96
  localFirst: z.boolean(),
97
97
  requiresLocalRuntime: z.boolean().optional(),
98
- localRuntimes: z.array(z.enum(["ollama", "lmstudio", "foundry-local", "lemonade"])).optional()
98
+ localRuntimes: z.array(z.enum(["ollama", "lmstudio", "foundry-local", "lemonade"])).optional(),
99
+ localModels: z.partialRecord(z.enum(["ollama", "lmstudio", "foundry-local", "lemonade"]), z.string().min(1)).optional()
99
100
  }).strict();
100
101
  var TEAM_ROLES = {
101
102
  architect: {
@@ -386,6 +387,9 @@ var OrchestratorRolesSchema = z2.record(z2.string().min(1), z2.unknown()).defaul
386
387
  if (parsed.data.localRuntimes !== undefined) {
387
388
  profile.localRuntimes = parsed.data.localRuntimes;
388
389
  }
390
+ if (parsed.data.localModels !== undefined) {
391
+ profile.localModels = parsed.data.localModels;
392
+ }
389
393
  parsedRoles[roleID] = profile;
390
394
  }
391
395
  return parsedRoles;
@@ -468,13 +472,23 @@ var OpenTeamConfigObjectSchema = z2.object({
468
472
  localDefault: ModelRefSchema.nullable().default(null),
469
473
  trivialPromptMaxChars: z2.number().int().positive().default(280),
470
474
  frontierPromptMinChars: z2.number().int().positive().default(2000),
471
- frontierOnly: z2.boolean().default(false)
472
- }).strict().default({
475
+ frontierOnly: z2.boolean().default(false),
476
+ localOnly: z2.boolean().default(false)
477
+ }).strict().superRefine((router, ctx) => {
478
+ if (router.frontierOnly && router.localOnly) {
479
+ ctx.addIssue({
480
+ code: "custom",
481
+ path: ["localOnly"],
482
+ message: "router.localOnly and router.frontierOnly cannot both be true"
483
+ });
484
+ }
485
+ }).default({
473
486
  mode: "balanced",
474
487
  localDefault: null,
475
488
  trivialPromptMaxChars: 280,
476
489
  frontierPromptMinChars: 2000,
477
- frontierOnly: false
490
+ frontierOnly: false,
491
+ localOnly: false
478
492
  }),
479
493
  local: z2.object({
480
494
  runtimes: z2.array(LocalRuntimeSchema).default([])
@@ -2650,7 +2664,8 @@ var KNOWN_CONFIG_KEYS_BY_PATH = new Map([
2650
2664
  "localDefault",
2651
2665
  "trivialPromptMaxChars",
2652
2666
  "frontierPromptMinChars",
2653
- "frontierOnly"
2667
+ "frontierOnly",
2668
+ "localOnly"
2654
2669
  ]
2655
2670
  ],
2656
2671
  ["router.localDefault", MODEL_REF_KEYS],
@@ -5790,6 +5805,16 @@ function chooseModel(input) {
5790
5805
  if (override === "alwaysFrontier") {
5791
5806
  return finalizeDecision(input, tier, frontier, budgetAction, decision(frontier.model, "frontier", ["explicit-always-frontier"], []));
5792
5807
  }
5808
+ if (input.config.router.localOnly) {
5809
+ if (local === null) {
5810
+ return finalizeDecision(input, tier, frontier, budgetAction, blockedDecision(frontier.model, ["router-local-only", "forced-local-none-configured"], "forced-local-none-configured"));
5811
+ }
5812
+ return finalizeDecision(input, tier, frontier, budgetAction, resolveLocalPrimary(input, local, frontier.model, {
5813
+ baseRationale: ["router-local-only"],
5814
+ allowFrontier: false,
5815
+ noLocalRationale: "forced-local-unavailable"
5816
+ }));
5817
+ }
5793
5818
  if (input.config.router.frontierOnly) {
5794
5819
  return finalizeDecision(input, tier, frontier, budgetAction, decision(frontier.model, "frontier", ["router-frontier-only"], []));
5795
5820
  }
@@ -5900,6 +5925,10 @@ function configuredRuntime(runtimeId, config) {
5900
5925
  function runtimeIdOfModel(model, config) {
5901
5926
  return config.local.runtimes.find((runtime) => sameModel(runtime.defaultModel, model))?.id;
5902
5927
  }
5928
+ function roleLocalModel(role, runtimeId, fallback) {
5929
+ const pinned = role.localModels?.[runtimeId];
5930
+ return pinned === undefined ? fallback : { providerID: runtimeId, modelID: pinned };
5931
+ }
5903
5932
  function selectDispatchRuntime(role, decision2, reachable, config) {
5904
5933
  if (decision2.routeKind !== "local") {
5905
5934
  return { runtimeId: undefined, decision: decision2 };
@@ -5914,15 +5943,25 @@ function selectDispatchRuntime(role, decision2, reachable, config) {
5914
5943
  if (runtime === undefined) {
5915
5944
  continue;
5916
5945
  }
5917
- const model = runtime.defaultModel;
5946
+ const model = roleLocalModel(role, runtimeId, runtime.defaultModel);
5918
5947
  return {
5919
5948
  runtimeId,
5920
5949
  decision: { ...decision2, selected: model }
5921
5950
  };
5922
5951
  }
5923
5952
  }
5953
+ const resolvedRuntimeId = runtimeIdOfModel(decision2.selected, config);
5954
+ if (resolvedRuntimeId !== undefined) {
5955
+ const pinned = roleLocalModel(role, resolvedRuntimeId, decision2.selected);
5956
+ if (pinned !== decision2.selected) {
5957
+ return {
5958
+ runtimeId: resolvedRuntimeId,
5959
+ decision: { ...decision2, selected: pinned }
5960
+ };
5961
+ }
5962
+ }
5924
5963
  return {
5925
- runtimeId: runtimeIdOfModel(decision2.selected, config),
5964
+ runtimeId: resolvedRuntimeId,
5926
5965
  decision: decision2
5927
5966
  };
5928
5967
  }
@@ -7897,10 +7936,23 @@ function renderConsoleStatus(console_) {
7897
7936
  }
7898
7937
 
7899
7938
  // src/commands/doctor.ts
7900
- function runtimeLine(snapshot) {
7939
+ function runtimeLine(snapshot, runtime) {
7901
7940
  const mark = snapshot.reachable ? "✓" : "✗";
7902
7941
  const detail = snapshot.reachable ? `${snapshot.models.length} model(s)` : snapshot.error ?? "unreachable";
7903
- return ` ${mark} ${snapshot.id.padEnd(14)} ${snapshot.baseURL || "(no baseURL)"} — ${detail}`;
7942
+ const declared = runtime?.maxConcurrency;
7943
+ const slots = declared === undefined ? ` · ${DEFAULT_LOCAL_MAX_CONCURRENCY} slot(s) (default)` : ` · ${declared} slot(s) (declared)`;
7944
+ return ` ${mark} ${snapshot.id.padEnd(14)} ${snapshot.baseURL || "(no baseURL)"} — ${detail}${slots}`;
7945
+ }
7946
+ function isNetworkRuntime(baseURL) {
7947
+ if (baseURL.length === 0) {
7948
+ return false;
7949
+ }
7950
+ try {
7951
+ const host = new URL(baseURL).hostname.toLowerCase();
7952
+ return host !== "localhost" && host !== "127.0.0.1" && host !== "::1" && host !== "[::1]" && !host.endsWith(".localhost");
7953
+ } catch {
7954
+ return false;
7955
+ }
7904
7956
  }
7905
7957
  function failureReasonText(reason, searchedPaths) {
7906
7958
  switch (reason) {
@@ -8056,7 +8108,8 @@ function rosterHealthSection(audit, loadError, rosterRoleCount) {
8056
8108
  if (unprofiled.length > 0) {
8057
8109
  const roleIDs = unprofiled.map((entry) => entry.roleID).join(", ");
8058
8110
  lines.push(` · unprofiled roleID(s): ${roleIDs}`);
8059
- lines.push(" remedy: if intentional project roles, no action is required; for curated routing, change roleID to a TEAM_ROLES key or add a profile under orchestrator.roles in .opencode/openteam.json.");
8111
+ lines.push(" routing: no profile means frontier-eligible work for these roles can escalate to a frontier model. A 'local only' note in the roster prose does NOT prevent this: prose outside the JSON fence is never read.");
8112
+ lines.push(' remedy: run `openteam roles init` to compose a profile interactively, or add one by hand under orchestrator.roles in .opencode/openteam.json with "requiresLocalRuntime": true to pin the role local; for curated routing, change roleID to a TEAM_ROLES key instead.');
8060
8113
  }
8061
8114
  return lines;
8062
8115
  }
@@ -8091,8 +8144,16 @@ function renderDoctor(input) {
8091
8144
  lines.push(" (no runtime enabled)");
8092
8145
  } else {
8093
8146
  for (const snapshot of input.snapshots) {
8094
- lines.push(runtimeLine(snapshot));
8147
+ lines.push(runtimeLine(snapshot, enabledRuntimes.find((r) => r.id === snapshot.id)));
8148
+ }
8149
+ }
8150
+ for (const snapshot of input.snapshots) {
8151
+ if (!isNetworkRuntime(snapshot.baseURL)) {
8152
+ continue;
8095
8153
  }
8154
+ const runtime = enabledRuntimes.find((r) => r.id === snapshot.id);
8155
+ const cap = runtime?.maxConcurrency ?? DEFAULT_LOCAL_MAX_CONCURRENCY;
8156
+ lines.push(` ⚠ ${snapshot.id} is reached over the network: its ${cap}-slot cap is enforced per openteam process, so`, " two processes at once (an opencode session plus 'openteam console') can together exceed it.");
8096
8157
  }
8097
8158
  lines.push(` telemetry: ${input.telemetryPath} — ${input.telemetryRecords} record(s)`);
8098
8159
  if (input.diagnostics !== undefined) {
@@ -9138,6 +9199,7 @@ var HELP = [
9138
9199
  " openteam local off Use frontier models only (no local runtime)",
9139
9200
  " openteam local on Re-enable local-first routing",
9140
9201
  " openteam doctor Diagnose runtimes and config",
9202
+ " openteam roles init Compose per-role routing policy for unprofiled roster roles",
9141
9203
  " openteam migrate Relocate pre-P15b artifacts to their split homes (idempotent)",
9142
9204
  " openteam agents List agents and each one's LLM (local/frontier)",
9143
9205
  " openteam console Launch the multi-session web Console (Ctrl+C to stop; --open opens the browser)",
@@ -12602,6 +12664,9 @@ async function registerCast(storage, draft, path4 = OPENTEAM_ROSTER_PATH) {
12602
12664
  const written = await persistRosterPreservingProse(storage, roster, path4);
12603
12665
  return { ok: true, path: written, roster };
12604
12666
  }
12667
+ function unprofiledRoleIDs(roster, configuredRoles) {
12668
+ return roster.entries.filter((entry) => getRoleProfile(entry.roleID, configuredRoles) === undefined && !isKnownNonWorkerRole(entry.roleID)).map((entry) => entry.roleID);
12669
+ }
12605
12670
  function createRegisterCastTool(deps) {
12606
12671
  return tool5({
12607
12672
  description: "Registers the orchestrator's cast as the project roster. Use this " + "instead of writing the roster file directly: the payload is validated " + "before anything is persisted, guaranteed roles are added automatically, " + "and curated prose already in the document is preserved.",
@@ -12618,7 +12683,17 @@ function createRegisterCastTool(deps) {
12618
12683
  return `validation error: ${result.error}`;
12619
12684
  }
12620
12685
  const roles = result.roster.entries.map((entry) => `${entry.roleID}=${entry.agentName}`).join(", ");
12621
- return `registered ${result.roster.entries.length} roles in ${result.path} (${roles})`;
12686
+ const registered = `registered ${result.roster.entries.length} roles in ${result.path} (${roles})`;
12687
+ const unprofiled = unprofiledRoleIDs(result.roster, deps.configuredRoles);
12688
+ if (unprofiled.length === 0) {
12689
+ return registered;
12690
+ }
12691
+ return [
12692
+ registered,
12693
+ `warning: ${unprofiled.join(", ")} resolve no routing profile, so they are frontier-eligible — their work can escalate to a frontier model. Describing a role as "local only" in the roster prose does NOT prevent this: prose outside the JSON block is never read.`,
12694
+ 'remedy: tell the human to run `openteam roles init` to pin those roles local, or add a profile under orchestrator.roles in .opencode/openteam.json with "requiresLocalRuntime": true.'
12695
+ ].join(`
12696
+ `);
12622
12697
  }
12623
12698
  });
12624
12699
  }
@@ -12895,7 +12970,7 @@ var createOtlpSpanExporter = (connection, config) => {
12895
12970
  // package.json
12896
12971
  var package_default = {
12897
12972
  name: "@jmanuelcorral/openteam",
12898
- version: "0.9.4",
12973
+ version: "0.10.0",
12899
12974
  packageManager: "bun@1.3.14",
12900
12975
  description: "Cost-aware, local-first routing plugin for opencode with cheapest-capable frontier fallback and multi-agent orchestration.",
12901
12976
  license: "MIT",
@@ -13674,7 +13749,10 @@ var server = async (ctx, rawOptions) => {
13674
13749
  runtimeLimiter
13675
13750
  }
13676
13751
  });
13677
- const registerCastTool = createRegisterCastTool({ storage });
13752
+ const registerCastTool = createRegisterCastTool({
13753
+ storage,
13754
+ configuredRoles: config.orchestrator?.roles
13755
+ });
13678
13756
  return {
13679
13757
  ...hooks,
13680
13758
  tool: {
@@ -81,4 +81,40 @@ export declare const migrateMessages: {
81
81
  readonly manualWorktreeEntry: (label: string, from: string, to: string) => string;
82
82
  readonly success: " ✓ machine-local runtime output relocated under .opencode/openteam-local/.";
83
83
  };
84
+ /**
85
+ * Messages for `openteam roles init` (#206) — assisted composition of per-role
86
+ * routing policy. The wording carries the whole point of the command: a roster
87
+ * role with no profile is frontier-eligible, and the "local only" note a human
88
+ * writes in the roster prose is never read because it sits outside the JSON
89
+ * fence. Keep that consequence stated explicitly; softening it recreates the bug.
90
+ */
91
+ export declare const rolesInitMessages: {
92
+ readonly header: "openteam roles init:";
93
+ readonly title: "openteam roles init";
94
+ readonly noRoster: (path: string) => string;
95
+ readonly noRosterRemedy: " Cast the team first: run `openteam setup`, then ask the orchestrator to register the cast.";
96
+ readonly unparseableRoster: (path: string, error: string) => string;
97
+ readonly unparseableRosterRemedy: " Run `openteam doctor` for the remedy, then re-run this command.";
98
+ readonly allProfiled: (count: number) => string;
99
+ readonly whyTitle: "Why you are being asked";
100
+ readonly why: (count: number) => string;
101
+ readonly policyQuestion: (roleID: string, agentName: string) => string;
102
+ readonly localOnlyLabel: (roleID: string, agentName: string) => string;
103
+ readonly localOnlyHint: "sets requiresLocalRuntime; the role fails closed when no local runtime is reachable";
104
+ readonly frontierOkLabel: "Local first, frontier allowed";
105
+ readonly frontierOkHint: "records today's implicit behaviour: cheapest-capable frontier when the task warrants it";
106
+ readonly skipLabel: "Skip for now";
107
+ readonly skipHint: "leaves the role unprofiled, so it stays frontier-eligible and doctor keeps reporting it";
108
+ readonly runtimeQuestion: (roleID: string) => string;
109
+ readonly runtimeHint: "machine-local — written to the git-ignored overlay";
110
+ readonly cancelled: (reason: string) => string;
111
+ readonly invalidResult: (reason: string) => string;
112
+ readonly nothingWritten: (skipped: string) => string;
113
+ readonly nothingToWriteOutro: "Nothing to write.";
114
+ readonly pinnedLocal: (roleIDs: string, path: string) => string;
115
+ readonly frontierAllowed: (roleIDs: string, path: string) => string;
116
+ readonly runtimeBinding: (path: string) => string;
117
+ readonly skippedSummary: (roleIDs: string) => string;
118
+ readonly outro: "Role policy updated.";
119
+ };
84
120
  //# sourceMappingURL=commands.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"commands.d.ts","sourceRoot":"","sources":["../../src/messages/commands.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;GAaG;AAEH,2CAA2C;AAC3C,eAAO,MAAM,kBAAkB;aAC7B,MAAM,EAAE,qDAAqD;aAC7D,OAAO;iBACL,OAAO,EAAE,UAAU;iBACnB,MAAM,EAAE,aAAa;iBACrB,SAAS,EAAE,WAAW;iBACtB,KAAK,EAAE,OAAO;;aAEhB,iBAAiB,EAAE,0BAA0B;aAC7C,YAAY,EAAE,UAAU;aACxB,WAAW,YAAY,MAAM,KAAG,MAAM;aACtC,kBAAkB,YAAY,MAAM,gBAAgB,MAAM,KAAG,MAAM;aAEnE,SAAS,UAAU,MAAM,KAAG,MAAM;aAClC,KAAK,UAAU,MAAM,KAAG,MAAM;CAEtB,CAAC;AAEX,wCAAwC;AACxC,eAAO,MAAM,gBAAgB;aAC3B,aAAa,EAAE,yBAAyB;aACxC,YAAY,QAAQ,MAAM,KAAG,MAAM;aACnC,OAAO,WAAW;QAChB,IAAI,EAAE,MAAM,CAAC;QACb,MAAM,EAAE,MAAM,CAAC;QACf,WAAW,EAAE,MAAM,CAAC;QACpB,SAAS,EAAE,MAAM,CAAC;KACnB,KAAG,MAAM,EAAE;aAOZ,YAAY,UAAU,MAAM,KAAG,MAAM;aAErC,QAAQ,QAAQ,MAAM,KAAG,MAAM;aAC/B,QAAQ,EAAE,+CAA+C;CACjD,CAAC;AAEX,qCAAqC;AACrC,eAAO,MAAM,aAAa;aACxB,UAAU,EAAE,MAAM;aAClB,gBAAgB,EAAE,8BAA8B;aAChD,cAAc,EAAE,aAAa;aAC7B,OAAO,WAAW;QAChB,IAAI,EAAE,MAAM,CAAC;QACb,YAAY,EAAE,OAAO,CAAC;QACtB,OAAO,EAAE,MAAM,CAAC;QAChB,QAAQ,EAAE,MAAM,CAAC;KAClB,KAAG,MAAM,EAAE;aAOZ,oBAAoB,EAAE,2CAA2C;aACjE,mBAAmB,EACjB,gGAAgG;aAClG,mBAAmB,EAAE,iDAAiD;aACtE,kBAAkB,EAAE,mDAAmD;aACvE,mBAAmB,EACjB,8FAA8F;CACxF,CAAC;AAEX,gEAAgE;AAChE,eAAO,MAAM,uBAAuB;aAClC,IAAI,EAAE,MAAM;aACZ,cAAc,aAAa,MAAM,aAAa,MAAM,KAAG,MAAM;CAErD,CAAC;AAEX,uCAAuC;AACvC,eAAO,MAAM,eAAe;aAC1B,MAAM,EAAE,mBAAmB;aAC3B,gBAAgB,EACd,6DAA6D;aAC/D,MAAM,WAAW;QACf,KAAK,EAAE,MAAM,CAAC;QACd,OAAO,EAAE,MAAM,CAAC;QAChB,SAAS,EAAE,MAAM,CAAC;KACnB,KAAG,MAAM,EAAE;aAKZ,eAAe,EAAE,cAAc;aAC/B,cAAc,SAAS,MAAM,MAAM,MAAM,WAAW,OAAO,KAAG,MAAM;aAEpE,eAAe,EACb,+EAA+E;aACjF,aAAa,SAAS,MAAM,MAAM,MAAM,KAAG,MAAM;aACjD,qBAAqB,EACnB,0EAA0E;aAC5E,mBAAmB,UAAU,MAAM,QAAQ,MAAM,MAAM,MAAM,KAAG,MAAM;aAEtE,OAAO,EACL,6EAA6E;CACvE,CAAC"}
1
+ {"version":3,"file":"commands.d.ts","sourceRoot":"","sources":["../../src/messages/commands.ts"],"names":[],"mappings":"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"}
@@ -37,6 +37,20 @@ export type AgentRoleProfile = {
37
37
  * on that runtime.
38
38
  */
39
39
  localRuntimes?: LocalRuntimeId[];
40
+ /**
41
+ * Per-runtime model override for this role (#210).
42
+ *
43
+ * Without this, every role dispatched to a runtime shares that runtime's
44
+ * `defaultModel`, so a reviewer role cannot run a larger local model than a
45
+ * bookkeeping role on the same box — the local counterpart of
46
+ * `preferredFrontierModels`, which has always been able to pin a concrete
47
+ * frontier model.
48
+ *
49
+ * Keyed BY RUNTIME rather than a single model id so failover stays safe: a
50
+ * model that only exists on lemonade can never be sent to ollama. When the
51
+ * chosen runtime has no entry, the runtime's `defaultModel` stands.
52
+ */
53
+ localModels?: Partial<Record<LocalRuntimeId, string>>;
40
54
  };
41
55
  export declare const AgentRoleProfileSchema: z.ZodObject<{
42
56
  roleID: z.ZodString;
@@ -62,6 +76,12 @@ export declare const AgentRoleProfileSchema: z.ZodObject<{
62
76
  lmstudio: "lmstudio";
63
77
  ollama: "ollama";
64
78
  }>>>;
79
+ localModels: z.ZodOptional<z.ZodRecord<z.ZodEnum<{
80
+ "foundry-local": "foundry-local";
81
+ lemonade: "lemonade";
82
+ lmstudio: "lmstudio";
83
+ ollama: "ollama";
84
+ }> & z.core.$partial, z.ZodString>>;
65
85
  }, z.core.$strict>;
66
86
  export declare const TEAM_ROLES: Record<string, AgentRoleProfile>;
67
87
  export declare function isKnownNonWorkerRole(roleID: string): boolean;
@@ -1 +1 @@
1
- {"version":3,"file":"roles.d.ts","sourceRoot":"","sources":["../../src/orchestrator/roles.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAC;AAGxB,OAAO,KAAK,EACV,qBAAqB,EACrB,cAAc,EACf,MAAM,uBAAuB,CAAC;AAC/B,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,gBAAgB,CAAC;AACrD,OAAO,KAAK,EAAE,cAAc,EAAE,WAAW,EAAE,MAAM,iBAAiB,CAAC;AAEnE,MAAM,MAAM,gBAAgB,GAAG;IAC7B,MAAM,EAAE,MAAM,CAAC;IACf,aAAa,CAAC,EAAE,MAAM,CAAC;IACvB,WAAW,EAAE,cAAc,CAAC;IAC5B,gBAAgB,EAAE,CAAC,GAAG,CAAC,GAAG,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC;IACpC,kBAAkB,EAAE,CAAC,GAAG,CAAC,GAAG,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC;IACtC,yBAAyB,EAAE,OAAO,CAAC;IACnC,uBAAuB,EAAE,KAAK,CAAC,cAAc,GAAG,MAAM,CAAC,CAAC;IACxD,UAAU,EAAE,OAAO,CAAC;IACpB;;;;;;;;;OASG;IACH,oBAAoB,CAAC,EAAE,OAAO,CAAC;IAC/B;;;;;;;;;;;;;OAaG;IACH,aAAa,CAAC,EAAE,cAAc,EAAE,CAAC;CAClC,CAAC;AAiBF,eAAO,MAAM,sBAAsB;;;;;;;;;;;;;;;;;;;;;;;;kBAkBxB,CAAC;AAGZ,eAAO,MAAM,UAAU,EAAE,MAAM,CAAC,MAAM,EAAE,gBAAgB,CA8FvD,CAAC;AAcF,wBAAgB,oBAAoB,CAAC,MAAM,EAAE,MAAM,GAAG,OAAO,CAI5D;AA6BD;;;;;;;;;;;;;;;;;GAiBG;AACH,wBAAgB,cAAc,CAC5B,MAAM,EAAE,MAAM,EACd,eAAe,CAAC,EAAE,QAAQ,CAAC,MAAM,CAAC,MAAM,EAAE,gBAAgB,CAAC,CAAC,GAC3D,gBAAgB,GAAG,SAAS,CAO9B;AAED;;;;;;;;;;;GAWG;AACH,wBAAgB,yBAAyB,CAAC,MAAM,EAAE,MAAM,GAAG,gBAAgB,CAW1E;AAED,wBAAgB,iBAAiB,CAC/B,IAAI,EAAE,gBAAgB,EACtB,IAAI,EAAE,WAAW,EACjB,IAAI,CAAC,EAAE,cAAc,GACpB,qBAAqB,CAevB"}
1
+ {"version":3,"file":"roles.d.ts","sourceRoot":"","sources":["../../src/orchestrator/roles.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAC;AAGxB,OAAO,KAAK,EACV,qBAAqB,EACrB,cAAc,EACf,MAAM,uBAAuB,CAAC;AAC/B,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,gBAAgB,CAAC;AACrD,OAAO,KAAK,EAAE,cAAc,EAAE,WAAW,EAAE,MAAM,iBAAiB,CAAC;AAEnE,MAAM,MAAM,gBAAgB,GAAG;IAC7B,MAAM,EAAE,MAAM,CAAC;IACf,aAAa,CAAC,EAAE,MAAM,CAAC;IACvB,WAAW,EAAE,cAAc,CAAC;IAC5B,gBAAgB,EAAE,CAAC,GAAG,CAAC,GAAG,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC;IACpC,kBAAkB,EAAE,CAAC,GAAG,CAAC,GAAG,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC;IACtC,yBAAyB,EAAE,OAAO,CAAC;IACnC,uBAAuB,EAAE,KAAK,CAAC,cAAc,GAAG,MAAM,CAAC,CAAC;IACxD,UAAU,EAAE,OAAO,CAAC;IACpB;;;;;;;;;OASG;IACH,oBAAoB,CAAC,EAAE,OAAO,CAAC;IAC/B;;;;;;;;;;;;;OAaG;IACH,aAAa,CAAC,EAAE,cAAc,EAAE,CAAC;IACjC;;;;;;;;;;;;OAYG;IACH,WAAW,CAAC,EAAE,OAAO,CAAC,MAAM,CAAC,cAAc,EAAE,MAAM,CAAC,CAAC,CAAC;CACvD,CAAC;AAiBF,eAAO,MAAM,sBAAsB;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;kBAwBxB,CAAC;AAGZ,eAAO,MAAM,UAAU,EAAE,MAAM,CAAC,MAAM,EAAE,gBAAgB,CA8FvD,CAAC;AAcF,wBAAgB,oBAAoB,CAAC,MAAM,EAAE,MAAM,GAAG,OAAO,CAI5D;AA6BD;;;;;;;;;;;;;;;;;GAiBG;AACH,wBAAgB,cAAc,CAC5B,MAAM,EAAE,MAAM,EACd,eAAe,CAAC,EAAE,QAAQ,CAAC,MAAM,CAAC,MAAM,EAAE,gBAAgB,CAAC,CAAC,GAC3D,gBAAgB,GAAG,SAAS,CAO9B;AAED;;;;;;;;;;;GAWG;AACH,wBAAgB,yBAAyB,CAAC,MAAM,EAAE,MAAM,GAAG,gBAAgB,CAW1E;AAED,wBAAgB,iBAAiB,CAC/B,IAAI,EAAE,gBAAgB,EACtB,IAAI,EAAE,WAAW,EACjB,IAAI,CAAC,EAAE,cAAc,GACpB,qBAAqB,CAevB"}
@@ -1 +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;AAED;;;;;;;;;;;;;;;;;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,CA2B1B"}
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,5 +1,6 @@
1
1
  import { type ToolDefinition } from "@opencode-ai/plugin";
2
2
  import { z } from "zod";
3
+ import { type AgentRoleProfile } from "../orchestrator/roles";
3
4
  import { type Roster } from "../orchestrator/roster";
4
5
  import type { StorageProvider } from "../storage/provider";
5
6
  export declare const RegisterCastPayloadSchema: z.ZodObject<{
@@ -27,7 +28,25 @@ export declare function registerCast(storage: StorageProvider, draft: unknown, p
27
28
  export type RegisterCastDeps = {
28
29
  readonly storage: StorageProvider;
29
30
  readonly rosterPath?: string;
31
+ /**
32
+ * Role profiles configured under `orchestrator.roles`. Passed in so the
33
+ * unprofiled-role warning matches what the router will actually resolve;
34
+ * checking built-in roles alone would warn about roles the user already
35
+ * configured, and a warning that fires on correct setups gets ignored.
36
+ */
37
+ readonly configuredRoles?: Readonly<Record<string, AgentRoleProfile>> | undefined;
30
38
  };
39
+ /**
40
+ * Roster roles that resolve no routing profile (#206).
41
+ *
42
+ * The roster is written from inside opencode, where there is no TTY, so the
43
+ * honest hook at creation time is to state the routing consequence and name the
44
+ * remedy rather than to prompt. Without this the orchestrator reports a clean
45
+ * "registered N roles" for a cast whose custom roles are silently
46
+ * frontier-eligible — exactly the case a human describes as "local only" in the
47
+ * roster prose, which lives outside the JSON fence and is never read.
48
+ */
49
+ export declare function unprofiledRoleIDs(roster: Roster, configuredRoles?: Readonly<Record<string, AgentRoleProfile>>): string[];
31
50
  /** Builds the `openteam-register-cast` tool definition. */
32
51
  export declare function createRegisterCastTool(deps: RegisterCastDeps): ToolDefinition;
33
52
  //# sourceMappingURL=registerCastTool.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"registerCastTool.d.ts","sourceRoot":"","sources":["../../src/plugin/registerCastTool.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,KAAK,cAAc,EAAQ,MAAM,qBAAqB,CAAC;AAChE,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAC;AAGxB,OAAO,EAA0B,KAAK,MAAM,EAAE,MAAM,wBAAwB,CAAC;AAE7E,OAAO,KAAK,EAAE,eAAe,EAAE,MAAM,qBAAqB,CAAC;AA0B3D,eAAO,MAAM,yBAAyB;;;;;;kBAK3B,CAAC;AAEZ,MAAM,MAAM,mBAAmB,GAAG,CAAC,CAAC,KAAK,CAAC,OAAO,yBAAyB,CAAC,CAAC;AAE5E,MAAM,MAAM,kBAAkB,GAC1B;IAAE,QAAQ,CAAC,EAAE,EAAE,IAAI,CAAC;IAAC,QAAQ,CAAC,IAAI,EAAE,MAAM,CAAC;IAAC,QAAQ,CAAC,MAAM,EAAE,MAAM,CAAA;CAAE,GACrE;IACE,QAAQ,CAAC,EAAE,EAAE,KAAK,CAAC;IACnB,QAAQ,CAAC,KAAK,EAAE,MAAM,CAAC;IACvB,QAAQ,CAAC,MAAM,EAAE,SAAS,MAAM,EAAE,CAAC;CACpC,CAAC;AAoBN;;;GAGG;AACH,wBAAsB,YAAY,CAChC,OAAO,EAAE,eAAe,EACxB,KAAK,EAAE,OAAO,EACd,IAAI,GAAE,MAA6B,GAClC,OAAO,CAAC,kBAAkB,CAAC,CAiB7B;AAED,MAAM,MAAM,gBAAgB,GAAG;IAC7B,QAAQ,CAAC,OAAO,EAAE,eAAe,CAAC;IAClC,QAAQ,CAAC,UAAU,CAAC,EAAE,MAAM,CAAC;CAC9B,CAAC;AAEF,2DAA2D;AAC3D,wBAAgB,sBAAsB,CAAC,IAAI,EAAE,gBAAgB,GAAG,cAAc,CAuC7E"}
1
+ {"version":3,"file":"registerCastTool.d.ts","sourceRoot":"","sources":["../../src/plugin/registerCastTool.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,KAAK,cAAc,EAAQ,MAAM,qBAAqB,CAAC;AAChE,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAC;AAGxB,OAAO,EACL,KAAK,gBAAgB,EAGtB,MAAM,uBAAuB,CAAC;AAC/B,OAAO,EAA0B,KAAK,MAAM,EAAE,MAAM,wBAAwB,CAAC;AAE7E,OAAO,KAAK,EAAE,eAAe,EAAE,MAAM,qBAAqB,CAAC;AA0B3D,eAAO,MAAM,yBAAyB;;;;;;kBAK3B,CAAC;AAEZ,MAAM,MAAM,mBAAmB,GAAG,CAAC,CAAC,KAAK,CAAC,OAAO,yBAAyB,CAAC,CAAC;AAE5E,MAAM,MAAM,kBAAkB,GAC1B;IAAE,QAAQ,CAAC,EAAE,EAAE,IAAI,CAAC;IAAC,QAAQ,CAAC,IAAI,EAAE,MAAM,CAAC;IAAC,QAAQ,CAAC,MAAM,EAAE,MAAM,CAAA;CAAE,GACrE;IACE,QAAQ,CAAC,EAAE,EAAE,KAAK,CAAC;IACnB,QAAQ,CAAC,KAAK,EAAE,MAAM,CAAC;IACvB,QAAQ,CAAC,MAAM,EAAE,SAAS,MAAM,EAAE,CAAC;CACpC,CAAC;AAoBN;;;GAGG;AACH,wBAAsB,YAAY,CAChC,OAAO,EAAE,eAAe,EACxB,KAAK,EAAE,OAAO,EACd,IAAI,GAAE,MAA6B,GAClC,OAAO,CAAC,kBAAkB,CAAC,CAiB7B;AAED,MAAM,MAAM,gBAAgB,GAAG;IAC7B,QAAQ,CAAC,OAAO,EAAE,eAAe,CAAC;IAClC,QAAQ,CAAC,UAAU,CAAC,EAAE,MAAM,CAAC;IAC7B;;;;;OAKG;IACH,QAAQ,CAAC,eAAe,CAAC,EACrB,QAAQ,CAAC,MAAM,CAAC,MAAM,EAAE,gBAAgB,CAAC,CAAC,GAC1C,SAAS,CAAC;CACf,CAAC;AAEF;;;;;;;;;GASG;AACH,wBAAgB,iBAAiB,CAC/B,MAAM,EAAE,MAAM,EACd,eAAe,CAAC,EAAE,QAAQ,CAAC,MAAM,CAAC,MAAM,EAAE,gBAAgB,CAAC,CAAC,GAC3D,MAAM,EAAE,CAQV;AAED,2DAA2D;AAC3D,wBAAgB,sBAAsB,CAAC,IAAI,EAAE,gBAAgB,GAAG,cAAc,CAgD7E"}
@@ -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,CAwMhE"}
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"}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@jmanuelcorral/openteam",
3
- "version": "0.9.4",
3
+ "version": "0.10.0",
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",