@jmanuelcorral/openteam 0.1.25 → 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 +26 -6
- package/dist/cli/setupAdapters.d.ts +6 -0
- package/dist/cli/setupAdapters.d.ts.map +1 -1
- package/dist/cli.js +132 -33
- package/dist/commands/setup.d.ts +15 -0
- package/dist/commands/setup.d.ts.map +1 -1
- package/package.json +4 -2
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)
|
|
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
|
|
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 `
|
|
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
|
|
|
@@ -543,6 +543,26 @@ bun run format:check
|
|
|
543
543
|
bun run build
|
|
544
544
|
```
|
|
545
545
|
|
|
546
|
+
### Desarrollo local en modo dev (sin registry)
|
|
547
|
+
|
|
548
|
+
Para que la CLI global `openteam` y opencode usen la build local de este repo en
|
|
549
|
+
lugar de la versión publicada (sin pasar por ningún registry), se enlaza el
|
|
550
|
+
paquete con un symlink global:
|
|
551
|
+
|
|
552
|
+
```powershell
|
|
553
|
+
Set-Location -Path "C:\gitrepos\openteam"
|
|
554
|
+
bun run link:local # = bun run build && npm link
|
|
555
|
+
```
|
|
556
|
+
|
|
557
|
+
`npm link` crea un enlace global (junction/symlink) hacia este repo, así que tras
|
|
558
|
+
cada `bun run build` la CLI global refleja el código local.
|
|
559
|
+
|
|
560
|
+
Un hook `pre-push` versionado (`.githooks/pre-push`) ejecuta `bun run link:local`
|
|
561
|
+
automáticamente antes de cada `git push`, manteniendo la instalación local al día.
|
|
562
|
+
El hook se activa vía `core.hooksPath=.githooks`, que el script `prepare` configura
|
|
563
|
+
automáticamente al ejecutar `bun install` en el repo. Es best-effort: si el build o
|
|
564
|
+
el link fallan, avisa pero **no bloquea** el push.
|
|
565
|
+
|
|
546
566
|
## Privacidad
|
|
547
567
|
|
|
548
568
|
Con `privacyMode: "forceLocalOnSensitive"`, si `TaskSignals.privacySensitive` es `true`, `chooseModel` usa local y no permite fallback frontier. Si no hay local utilizable, la decisión conserva la ruta local y registra la razón en `rationale`.
|
|
@@ -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;
|
|
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,
|
|
4220
|
-
if (
|
|
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 =
|
|
4255
|
+
const first = models[0];
|
|
4228
4256
|
const opts = {
|
|
4229
4257
|
message: `Modelo local por defecto para ${meta.label}`,
|
|
4230
|
-
choices:
|
|
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
|
|
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
|
-
|
|
4373
|
+
choice.baseURL = disabledBaseURL;
|
|
4274
4374
|
}
|
|
4275
|
-
runtimes.push(
|
|
4375
|
+
runtimes.push(choice);
|
|
4276
4376
|
continue;
|
|
4277
4377
|
}
|
|
4278
|
-
|
|
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) =>
|
|
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
|
|
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
|
-
|
|
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) => {
|
package/dist/commands/setup.d.ts
CHANGED
|
@@ -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.
|
|
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",
|
|
@@ -66,7 +66,9 @@
|
|
|
66
66
|
"typecheck": "tsc --noEmit",
|
|
67
67
|
"lint": "biome check .",
|
|
68
68
|
"format:check": "biome format .",
|
|
69
|
-
"prepublishOnly": "bun run build"
|
|
69
|
+
"prepublishOnly": "bun run build",
|
|
70
|
+
"link:local": "bun run build && npm link",
|
|
71
|
+
"prepare": "node -e \"try{require('node:child_process').execSync('git config core.hooksPath .githooks',{stdio:'ignore'})}catch{}\""
|
|
70
72
|
},
|
|
71
73
|
"dependencies": {
|
|
72
74
|
"@clack/prompts": "1.7.0",
|