@jmanuelcorral/openteam 0.1.26 → 0.1.27

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.md CHANGED
@@ -180,7 +180,7 @@ Durante desarrollo puedes cargar un plugin local desde `.opencode/plugins/opente
180
180
 
181
181
  ## Quickstart: `openteam setup`
182
182
 
183
- La forma más rápida de dejar un repositorio listo para opencode + openteam es el comando interactivo `openteam setup`. Detecta los runtimes locales instalados (Ollama, LM Studio, Foundry Local), te deja elegir los modelos locales y el modelo **frontier baseline** (ordenados de más barato-capaz a más caro), y genera tres ficheros:
183
+ La forma más rápida de dejar un repositorio listo para opencode + openteam es el comando interactivo `openteam setup`. Detecta los runtimes locales instalados (Ollama, LM Studio, Foundry Local) —que son **opcionales**: puedes usar openteam **solo con frontier**, o apuntar a un Ollama/LM Studio que corra en **otra máquina de la red local**—, te deja elegir los modelos locales y el modelo **frontier baseline** (ordenados de más barato-capaz a más caro), y genera tres ficheros:
184
184
 
185
185
  - `opencode.json` en la raíz: declara el plugin `@jmanuelcorral/openteam`, los `provider` locales OpenAI-compatible, el `model` frontier y el `small_model` local.
186
186
  - `.opencode/openteam.json`: la configuración runtime validada de openteam (baseline, routing, runtimes locales y privacidad).
@@ -198,12 +198,12 @@ openteam setup
198
198
  El asistente:
199
199
 
200
200
  1. Sondea los runtimes locales y marca los detectados.
201
- 2. Te deja habilitar runtimes y elegir el modelo por defecto de cada uno (o escribirlo si no se detectan modelos).
201
+ 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).
202
202
  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.
203
- 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).
203
+ 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).
204
204
  5. Si ya existe `opencode.json` o `.opencode/openteam.json`, pide confirmación antes de sobrescribir.
205
205
 
206
- Tras `init`, autentica el provider frontier (`opencode auth login`), arranca tu runtime local si no estaba activo y abre opencode en el repositorio: openteam enruta local-first automáticamente. Puedes reajustar el baseline después con `openteam baseline set <provider/model>` o `openteam baseline auto`.
206
+ Tras `setup`, autentica el provider frontier (`opencode auth login`), asegúrate de que tu runtime local (en esta máquina o en la red) esté accesible si lo habilitaste, y abre opencode en el repositorio: openteam enruta local-first automáticamente. Puedes reajustar el baseline después con `openteam baseline set <provider/model>` o `openteam baseline auto`.
207
207
 
208
208
  ### El agente `openteam` (estilo Squad)
209
209
 
@@ -244,7 +244,7 @@ Para instalar y probar openteam en otro equipo que ya tenga [opencode](https://o
244
244
  bunx openteam setup
245
245
  ```
246
246
 
247
- El asistente detecta Ollama / LM Studio / Foundry Local, te deja elegir los modelos locales y el frontier baseline, y escribe la configuración.
247
+ El asistente detecta Ollama / LM Studio / Foundry Local, te deja elegir los modelos locales (locales o en otra máquina de la red) o **ninguno** para funcionar solo con frontier, y el frontier baseline, y escribe la configuración.
248
248
 
249
249
  3. **Autentica el provider frontier** que hayas elegido:
250
250
 
@@ -252,7 +252,7 @@ Para instalar y probar openteam en otro equipo que ya tenga [opencode](https://o
252
252
  opencode auth login
253
253
  ```
254
254
 
255
- 4. **Arranca tu runtime local** si no estaba activo (p. ej. `ollama serve`, o abre LM Studio / Foundry Local).
255
+ 4. **Arranca tu runtime local** si lo habilitaste y no estaba activo (p. ej. `ollama serve`, o abre LM Studio / Foundry Local). Si apuntaste a un runtime en **otra máquina de la red**, asegúrate de que sea accesible desde este equipo (host expuesto y puerto abierto); para Ollama esto normalmente implica arrancarlo con `OLLAMA_HOST=0.0.0.0 ollama serve` en la máquina remota. Si configuraste **solo frontier**, sáltate este paso.
256
256
 
257
257
  5. **Abre opencode en el repo**, pulsa **Tab** y elige el agente `openteam`. Dale el primer prompt: creará el equipo de subagentes a demanda y enrutará local-first automáticamente.
258
258
 
@@ -1,6 +1,7 @@
1
1
  import type { ModelCapabilityProfile } from "../capabilities/types";
2
2
  import type { DetectedRuntime, Prompter } from "../commands/setup";
3
3
  import { type ExecLike } from "../local/foundry-local";
4
+ import type { LocalRuntimeId } from "../local/types";
4
5
  /** Prompter interactivo basado en @clack/prompts. */
5
6
  export declare const clackPrompter: Prompter;
6
7
  /**
@@ -9,4 +10,9 @@ export declare const clackPrompter: Prompter;
9
10
  */
10
11
  export declare function createLoadFrontierProfiles(): () => Promise<ModelCapabilityProfile[]>;
11
12
  export declare function createDetect(exec: ExecLike): () => Promise<DetectedRuntime[]>;
13
+ /**
14
+ * Sondea un runtime local en una `baseURL` concreta (p.ej. Ollama/LM Studio en
15
+ * otra máquina de la red local) para listar sus modelos durante `setup`.
16
+ */
17
+ export declare function createProbeRuntime(exec: ExecLike): (id: LocalRuntimeId, baseURL: string) => Promise<DetectedRuntime>;
12
18
  //# sourceMappingURL=setupAdapters.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"setupAdapters.d.ts","sourceRoot":"","sources":["../../src/cli/setupAdapters.ts"],"names":[],"mappings":"AAcA,OAAO,KAAK,EAAE,sBAAsB,EAAE,MAAM,uBAAuB,CAAC;AACpE,OAAO,KAAK,EACV,eAAe,EAEf,QAAQ,EAET,MAAM,mBAAmB,CAAC;AAE3B,OAAO,EACL,KAAK,QAAQ,EAEd,MAAM,wBAAwB,CAAC;AA2BhC,qDAAqD;AACrD,eAAO,MAAM,aAAa,EAAE,QA8D3B,CAAC;AAuBF;;;GAGG;AACH,wBAAgB,0BAA0B,IAAI,MAAM,OAAO,CACzD,sBAAsB,EAAE,CACzB,CAcA;AACD,wBAAgB,YAAY,CAAC,IAAI,EAAE,QAAQ,GAAG,MAAM,OAAO,CAAC,eAAe,EAAE,CAAC,CAuB7E"}
1
+ {"version":3,"file":"setupAdapters.d.ts","sourceRoot":"","sources":["../../src/cli/setupAdapters.ts"],"names":[],"mappings":"AAcA,OAAO,KAAK,EAAE,sBAAsB,EAAE,MAAM,uBAAuB,CAAC;AACpE,OAAO,KAAK,EACV,eAAe,EAEf,QAAQ,EAET,MAAM,mBAAmB,CAAC;AAE3B,OAAO,EACL,KAAK,QAAQ,EAEd,MAAM,wBAAwB,CAAC;AAEhC,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,gBAAgB,CAAC;AAyBrD,qDAAqD;AACrD,eAAO,MAAM,aAAa,EAAE,QA8D3B,CAAC;AAuBF;;;GAGG;AACH,wBAAgB,0BAA0B,IAAI,MAAM,OAAO,CACzD,sBAAsB,EAAE,CACzB,CAcA;AACD,wBAAgB,YAAY,CAAC,IAAI,EAAE,QAAQ,GAAG,MAAM,OAAO,CAAC,eAAe,EAAE,CAAC,CAuB7E;AAED;;;GAGG;AACH,wBAAgB,kBAAkB,CAChC,IAAI,EAAE,QAAQ,GACb,CAAC,EAAE,EAAE,cAAc,EAAE,OAAO,EAAE,MAAM,KAAK,OAAO,CAAC,eAAe,CAAC,CA2BnE"}
package/dist/cli.js CHANGED
@@ -3227,6 +3227,32 @@ function createDetect(exec) {
3227
3227
  });
3228
3228
  };
3229
3229
  }
3230
+ function createProbeRuntime(exec) {
3231
+ return async (id, baseURL) => {
3232
+ const registry = new RuntimeRegistry({
3233
+ fetch: globalThis.fetch,
3234
+ clock: () => new Date().toISOString(),
3235
+ foundryDiscovery: foundryDiscoveryFromExec(exec)
3236
+ });
3237
+ const runtime = {
3238
+ id,
3239
+ enabled: true,
3240
+ baseURL,
3241
+ defaultModel: { providerID: id, modelID: "probe" }
3242
+ };
3243
+ const [snapshot] = await registry.probe([runtime]);
3244
+ const detected = {
3245
+ id,
3246
+ baseURL: snapshot?.baseURL ?? baseURL,
3247
+ reachable: snapshot?.reachable ?? false,
3248
+ models: snapshot?.models.map((model) => model.modelID) ?? []
3249
+ };
3250
+ if (snapshot?.error !== undefined) {
3251
+ detected.error = snapshot.error;
3252
+ }
3253
+ return detected;
3254
+ };
3255
+ }
3230
3256
 
3231
3257
  // src/cli/tunnel.ts
3232
3258
  function parsePort(value) {
@@ -4136,6 +4162,8 @@ function serializeOpencodeConfig(config) {
4136
4162
  var CUSTOM_FRONTIER = "__custom__";
4137
4163
  var BROWSE_FRONTIER = "__browse__";
4138
4164
  var QUICK_FRONTIER_LIMIT = 12;
4165
+ var RUNTIME_LOCATION_LOCAL = "__local__";
4166
+ var RUNTIME_LOCATION_REMOTE = "__remote__";
4139
4167
  function frontierRefKey(choice) {
4140
4168
  return `${choice.providerID}/${choice.modelID}`;
4141
4169
  }
@@ -4216,18 +4244,18 @@ async function chooseFrontier(prompt, profiles) {
4216
4244
  }
4217
4245
  return parseFrontierRef(selected);
4218
4246
  }
4219
- async function chooseRuntimeModel(prompt, detected, meta) {
4220
- if (detected.models.length === 0) {
4247
+ async function chooseRuntimeModel(prompt, models, meta) {
4248
+ if (models.length === 0) {
4221
4249
  return prompt.text({
4222
4250
  message: `Modelo por defecto para ${meta.label} (no se detectaron modelos)`,
4223
4251
  placeholder: meta.fallbackModelID,
4224
4252
  initial: meta.fallbackModelID
4225
4253
  });
4226
4254
  }
4227
- const first = detected.models[0];
4255
+ const first = models[0];
4228
4256
  const opts = {
4229
4257
  message: `Modelo local por defecto para ${meta.label}`,
4230
- choices: detected.models.map((modelID) => ({
4258
+ choices: models.map((modelID) => ({
4231
4259
  value: modelID,
4232
4260
  label: modelID
4233
4261
  }))
@@ -4237,21 +4265,93 @@ async function chooseRuntimeModel(prompt, detected, meta) {
4237
4265
  }
4238
4266
  return prompt.select(opts);
4239
4267
  }
4268
+ function remoteBaseURLExample(meta) {
4269
+ const base = meta.defaultBaseURL ?? "http://localhost:11434/v1";
4270
+ return base.replace("localhost", "192.168.1.50").replace("127.0.0.1", "192.168.1.50");
4271
+ }
4272
+ function normalizeRemoteBaseURL(raw) {
4273
+ const trimmed = raw.trim();
4274
+ if (trimmed.length === 0) {
4275
+ throw new Error("URL de runtime local vacía");
4276
+ }
4277
+ const withScheme = /^https?:\/\//i.test(trimmed) ? trimmed : `http://${trimmed}`;
4278
+ let url;
4279
+ try {
4280
+ url = new URL(withScheme);
4281
+ } catch {
4282
+ throw new Error(`URL de runtime local inválida: "${raw}"`);
4283
+ }
4284
+ if (url.pathname === "/" || url.pathname === "") {
4285
+ return `${url.origin}/v1`;
4286
+ }
4287
+ return `${url.origin}${url.pathname.replace(/\/+$/, "")}`;
4288
+ }
4289
+ async function resolveRuntimeConnection(deps, meta, info) {
4290
+ if (meta.defaultBaseURL === undefined) {
4291
+ return { models: info?.models ?? [] };
4292
+ }
4293
+ const location = await deps.prompt.select({
4294
+ message: `¿Dónde se ejecuta ${meta.label}?`,
4295
+ choices: [
4296
+ {
4297
+ value: RUNTIME_LOCATION_LOCAL,
4298
+ label: "En esta máquina (local)",
4299
+ hint: info?.reachable ? "detectado" : meta.defaultBaseURL
4300
+ },
4301
+ {
4302
+ value: RUNTIME_LOCATION_REMOTE,
4303
+ label: "En otra máquina de la red local (introducir URL)"
4304
+ }
4305
+ ],
4306
+ initial: RUNTIME_LOCATION_LOCAL
4307
+ });
4308
+ if (location === RUNTIME_LOCATION_LOCAL) {
4309
+ const baseURL2 = info?.baseURL !== undefined && info.baseURL.length > 0 ? info.baseURL : meta.defaultBaseURL;
4310
+ return { baseURL: baseURL2, models: info?.models ?? [] };
4311
+ }
4312
+ const entered = await deps.prompt.text({
4313
+ message: `URL de ${meta.label} en la red (endpoint OpenAI-compatible)`,
4314
+ placeholder: remoteBaseURLExample(meta),
4315
+ initial: meta.defaultBaseURL
4316
+ });
4317
+ const baseURL = normalizeRemoteBaseURL(entered);
4318
+ let models = [];
4319
+ if (deps.probeRuntime !== undefined) {
4320
+ try {
4321
+ const probed = await deps.probeRuntime(meta.id, baseURL);
4322
+ models = probed.models;
4323
+ } catch {}
4324
+ }
4325
+ return { baseURL, models };
4326
+ }
4327
+ async function resolveEnabledRuntime(deps, meta, info) {
4328
+ const connection = await resolveRuntimeConnection(deps, meta, info);
4329
+ const defaultModelID = await chooseRuntimeModel(deps.prompt, connection.models, meta);
4330
+ const choice = {
4331
+ id: meta.id,
4332
+ enabled: true,
4333
+ defaultModelID,
4334
+ models: connection.models
4335
+ };
4336
+ if (connection.baseURL !== undefined) {
4337
+ choice.baseURL = connection.baseURL;
4338
+ }
4339
+ return choice;
4340
+ }
4240
4341
  async function runSetup(deps) {
4241
4342
  const { prompt } = deps;
4242
4343
  try {
4243
4344
  prompt.intro("openteam setup — configura opencode con routing local-first");
4244
4345
  const detected = await deps.detect();
4245
4346
  const detectedById = new Map(detected.map((item) => [item.id, item]));
4246
- const reachableIds = detected.filter((item) => item.reachable).map((item) => item.id);
4247
4347
  const enabledIds = await prompt.multiselect({
4248
- message: "¿Qué runtimes locales quieres habilitar?",
4348
+ message: "¿Qué runtimes locales quieres habilitar? (opcional: déjalo vacío para usar solo modelos frontier)",
4249
4349
  choices: KNOWN_RUNTIMES.map((meta) => {
4250
4350
  const info = detectedById.get(meta.id);
4251
4351
  return {
4252
4352
  value: meta.id,
4253
4353
  label: meta.label,
4254
- hint: info?.reachable ? `detectado · ${info.models.length} modelo(s)` : "no detectado",
4354
+ hint: info?.reachable ? `detectado · ${info.models.length} modelo(s)` : "no detectado (puedes apuntarlo a otra máquina)",
4255
4355
  selected: info?.reachable ?? false
4256
4356
  };
4257
4357
  })
@@ -4262,7 +4362,7 @@ async function runSetup(deps) {
4262
4362
  const info = detectedById.get(meta.id);
4263
4363
  const isEnabled = enabled.has(meta.id);
4264
4364
  if (!isEnabled) {
4265
- const choice2 = {
4365
+ const choice = {
4266
4366
  id: meta.id,
4267
4367
  enabled: false,
4268
4368
  defaultModelID: meta.fallbackModelID,
@@ -4270,30 +4370,14 @@ async function runSetup(deps) {
4270
4370
  };
4271
4371
  const disabledBaseURL = info?.baseURL ?? meta.defaultBaseURL;
4272
4372
  if (disabledBaseURL !== undefined && disabledBaseURL.length > 0) {
4273
- choice2.baseURL = disabledBaseURL;
4373
+ choice.baseURL = disabledBaseURL;
4274
4374
  }
4275
- runtimes.push(choice2);
4375
+ runtimes.push(choice);
4276
4376
  continue;
4277
4377
  }
4278
- const detectedRuntime = info ?? {
4279
- id: meta.id,
4280
- baseURL: meta.defaultBaseURL ?? "",
4281
- reachable: false,
4282
- models: []
4283
- };
4284
- const defaultModelID = await chooseRuntimeModel(prompt, detectedRuntime, meta);
4285
- const baseURL = info?.baseURL !== undefined && info.baseURL.length > 0 ? info.baseURL : meta.defaultBaseURL;
4286
- const choice = {
4287
- id: meta.id,
4288
- enabled: true,
4289
- defaultModelID,
4290
- models: detectedRuntime.models
4291
- };
4292
- if (baseURL !== undefined) {
4293
- choice.baseURL = baseURL;
4294
- }
4295
- runtimes.push(choice);
4378
+ runtimes.push(await resolveEnabledRuntime(deps, meta, info));
4296
4379
  }
4380
+ const hasLocalEnabled = enabled.size > 0;
4297
4381
  let frontierProfiles;
4298
4382
  try {
4299
4383
  const loaded = await deps.loadFrontierProfiles();
@@ -4311,12 +4395,23 @@ async function runSetup(deps) {
4311
4395
  ],
4312
4396
  initial: "balanced"
4313
4397
  });
4398
+ if (!hasLocalEnabled) {
4399
+ prompt.note([
4400
+ "No has habilitado ningún runtime local: openteam funcionará solo con",
4401
+ "modelos frontier (el cheapest-capable configurado).",
4402
+ "",
4403
+ "Para prompts sensibles, 'forceLocalOnSensitive' no tendría destino",
4404
+ "local, así que se recomienda 'consentBeforeFrontier'."
4405
+ ].join(`
4406
+ `), "Modo solo frontier");
4407
+ }
4314
4408
  const privacyMode = await prompt.select({
4315
4409
  message: "Privacidad para prompts sensibles",
4316
4410
  choices: [
4317
4411
  {
4318
4412
  value: "forceLocalOnSensitive",
4319
- label: "forceLocalOnSensitive (nunca envía datos sensibles a frontier)"
4413
+ label: "forceLocalOnSensitive (nunca envía datos sensibles a frontier)",
4414
+ ...hasLocalEnabled ? {} : { hint: "requiere un runtime local habilitado" }
4320
4415
  },
4321
4416
  {
4322
4417
  value: "consentBeforeFrontier",
@@ -4324,7 +4419,7 @@ async function runSetup(deps) {
4324
4419
  },
4325
4420
  { value: "off", label: "off (sin protección)" }
4326
4421
  ],
4327
- initial: "forceLocalOnSensitive"
4422
+ initial: hasLocalEnabled ? "forceLocalOnSensitive" : "consentBeforeFrontier"
4328
4423
  });
4329
4424
  const yolo = await prompt.confirm({
4330
4425
  message: "¿Activar modo YOLO? (opencode auto-aprueba todos los permisos; no afecta a la privacidad de openteam)",
@@ -4375,17 +4470,20 @@ async function runSetup(deps) {
4375
4470
  for (const command of slashCommands) {
4376
4471
  await deps.writeFile(join(deps.cwd, command.path), command.contents);
4377
4472
  }
4378
- const enabledSummary = runtimes.filter((runtime) => runtime.enabled).map((runtime) => `${runtime.id} (${runtime.defaultModelID})`).join(", ");
4473
+ const enabledSummary = runtimes.filter((runtime) => runtime.enabled).map((runtime) => {
4474
+ const remote = runtime.baseURL !== undefined && !runtime.baseURL.includes("localhost") && !runtime.baseURL.includes("127.0.0.1") ? ` @ ${runtime.baseURL}` : "";
4475
+ return `${runtime.id} (${runtime.defaultModelID})${remote}`;
4476
+ }).join(", ");
4379
4477
  prompt.note([
4380
4478
  `Baseline frontier: ${frontier.providerID}/${frontier.modelID}`,
4381
- `Runtimes locales: ${enabledSummary || "ninguno habilitado"}`,
4479
+ `Runtimes locales: ${enabledSummary || "ninguno (solo frontier)"}`,
4382
4480
  `Modo YOLO: ${yolo ? "activado (auto-aprueba permisos)" : "desactivado"}`,
4383
4481
  "Console web: se lanza aparte desde la CLI con 'openteam console' (multi-sesión, loopback)",
4384
4482
  `Escrito: ${OPENCODE_CONFIG_PATH}, ${DEFAULT_CONFIG_PATH}, ${ORCHESTRATOR_AGENT_PATH}, ${OPENTEAM_COMMAND_DIR}/*.md (${slashCommands.length} comandos)`,
4385
4483
  "",
4386
4484
  "Siguientes pasos:",
4387
4485
  ` 1. Autentica el provider frontier: opencode auth login`,
4388
- reachableIds.length === 0 ? " 2. Arranca tu runtime local (Ollama/LM Studio/Foundry) antes de usarlo" : " 2. Abre opencode en este repo; openteam enruta local-first automáticamente",
4486
+ hasLocalEnabled ? " 2. Asegúrate de que tu runtime local (local o en la red) esté accesible; openteam enruta local-first automáticamente" : " 2. Abre opencode en este repo; openteam usará solo modelos frontier",
4389
4487
  " 3. Pulsa Tab y elige el agente 'openteam', o teclea / y elige un comando /openteam…"
4390
4488
  ].join(`
4391
4489
  `), "openteam configurado");
@@ -4552,6 +4650,7 @@ function createSetupDeps() {
4552
4650
  return {
4553
4651
  cwd: process.cwd(),
4554
4652
  detect: createDetect(nodeExec),
4653
+ probeRuntime: createProbeRuntime(nodeExec),
4555
4654
  loadFrontierProfiles: createLoadFrontierProfiles(),
4556
4655
  prompt: clackPrompter,
4557
4656
  writeFile: async (path, contents) => {
@@ -125,10 +125,25 @@ export type Prompter = {
125
125
  export type SetupDeps = {
126
126
  cwd: string;
127
127
  detect: () => Promise<DetectedRuntime[]>;
128
+ /**
129
+ * Sondea un runtime local en una `baseURL` concreta (p.ej. otra máquina de la
130
+ * red). Opcional: si no está, la entrada de host remoto cae a introducir el
131
+ * modelo manualmente.
132
+ */
133
+ probeRuntime?: (id: LocalRuntimeId, baseURL: string) => Promise<DetectedRuntime>;
128
134
  loadFrontierProfiles: () => Promise<ModelCapabilityProfile[]>;
129
135
  prompt: Prompter;
130
136
  writeFile: (path: string, contents: string) => Promise<void>;
131
137
  fileExists: (path: string) => Promise<boolean>;
132
138
  };
139
+ /** Runtime local en esta máquina (usa la URL detectada o por defecto). */
140
+ export declare const RUNTIME_LOCATION_LOCAL = "__local__";
141
+ /** Runtime local en otra máquina de la red (se introduce la URL). */
142
+ export declare const RUNTIME_LOCATION_REMOTE = "__remote__";
143
+ /**
144
+ * Normaliza una URL de runtime remoto: añade esquema http:// si falta y asume
145
+ * el endpoint OpenAI-compatible `/v1` cuando no se indica ruta. Pure.
146
+ */
147
+ export declare function normalizeRemoteBaseURL(raw: string): string;
133
148
  export declare function runSetup(deps: SetupDeps): Promise<CliResult>;
134
149
  //# sourceMappingURL=setup.d.ts.map
@@ -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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"}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@jmanuelcorral/openteam",
3
- "version": "0.1.26",
3
+ "version": "0.1.27",
4
4
  "description": "Plugin opencode de routing coste-consciente local-first con orquestación Squad.",
5
5
  "license": "MIT",
6
6
  "author": "Jose Manuel Corral",