@jmanuelcorral/openteam 0.1.19 → 0.1.21
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 +30 -14
- package/dist/cli/dashboardServe.d.ts +45 -0
- package/dist/cli/dashboardServe.d.ts.map +1 -0
- package/dist/cli/{initAdapters.d.ts → setupAdapters.d.ts} +2 -2
- package/dist/cli/setupAdapters.d.ts.map +1 -0
- package/dist/cli.js +1199 -495
- package/dist/commands/dashboard.d.ts.map +1 -1
- package/dist/commands/dispatch.d.ts.map +1 -1
- package/dist/commands/orchestratorAgent.d.ts +2 -2
- package/dist/commands/orchestratorAgent.d.ts.map +1 -1
- package/dist/commands/{init.d.ts → setup.d.ts} +7 -7
- package/dist/commands/setup.d.ts.map +1 -0
- package/dist/commands/slashCommand.d.ts +1 -1
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +220 -198
- package/dist/web/git.d.ts +9 -0
- package/dist/web/git.d.ts.map +1 -0
- package/dist/web/server.d.ts +8 -7
- package/dist/web/server.d.ts.map +1 -1
- package/dist/web/start.d.ts +2 -2
- package/dist/web/start.d.ts.map +1 -1
- package/package.json +1 -1
- package/dist/cli/initAdapters.d.ts.map +0 -1
- package/dist/commands/init.d.ts.map +0 -1
package/README.md
CHANGED
|
@@ -8,7 +8,7 @@
|
|
|
8
8
|
- [Características](#características)
|
|
9
9
|
- [Requisitos](#requisitos)
|
|
10
10
|
- [Instalación](#instalación)
|
|
11
|
-
- [Quickstart: `openteam
|
|
11
|
+
- [Quickstart: `openteam setup`](#quickstart-openteam-setup)
|
|
12
12
|
- [Probar en otra máquina](#probar-en-otra-máquina)
|
|
13
13
|
- [Actualizar openteam](#actualizar-openteam)
|
|
14
14
|
- [Configuración](#configuración)
|
|
@@ -178,9 +178,9 @@ Durante desarrollo puedes cargar un plugin local desde `.opencode/plugins/opente
|
|
|
178
178
|
}
|
|
179
179
|
```
|
|
180
180
|
|
|
181
|
-
## Quickstart: `openteam
|
|
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
|
|
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:
|
|
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).
|
|
@@ -188,11 +188,13 @@ La forma más rápida de dejar un repositorio listo para opencode + openteam es
|
|
|
188
188
|
|
|
189
189
|
```powershell
|
|
190
190
|
# Con el paquete instalado como dependencia del proyecto
|
|
191
|
-
bunx openteam
|
|
191
|
+
bunx openteam setup
|
|
192
192
|
# o, si lo tienes global
|
|
193
|
-
openteam
|
|
193
|
+
openteam setup
|
|
194
194
|
```
|
|
195
195
|
|
|
196
|
+
> El antiguo comando `openteam init` sigue funcionando como **alias obsoleto** de `openteam setup`.
|
|
197
|
+
|
|
196
198
|
El asistente:
|
|
197
199
|
|
|
198
200
|
1. Sondea los runtimes locales y marca los detectados.
|
|
@@ -205,7 +207,7 @@ Tras `init`, autentica el provider frontier (`opencode auth login`), arranca tu
|
|
|
205
207
|
|
|
206
208
|
### El agente `openteam` (estilo Squad)
|
|
207
209
|
|
|
208
|
-
`openteam
|
|
210
|
+
`openteam setup` genera un único **agente primario** llamado `openteam` (`.opencode/agent/openteam.md`). Pulsa **Tab** en opencode para seleccionarlo: así sabes explícitamente que estás en modo openteam, mientras el plugin sigue optimizando el modelo por debajo.
|
|
209
211
|
|
|
210
212
|
Ese orquestador funciona al estilo [Squad](https://bradygaster.github.io/squad/): **no trae subagentes precreados**. En **cada petición** su primera acción es comprobar si ya existe equipo (`.opencode/openteam-roster.md` + subagentes en `.opencode/agent/`). Si **existe**, reparte el trabajo entre los especialistas adecuados; si **no existe**, entiende las tareas que implica tu petición, diseña el equipo mínimo y **lo crea a demanda** —sin que tengas que pedírselo explícitamente— antes de pasarle esas tareas (escribiendo `.opencode/agent/<nombre>.md` con `mode: subagent`), reutilizando los existentes antes de crear nuevos. Los roles mecánicos/bulk se dejan enrutar a modelos locales y solo se escala a frontier para arquitectura, seguridad o debugging ambiguo.
|
|
211
213
|
|
|
@@ -237,9 +239,9 @@ Para instalar y probar openteam en otro equipo que ya tenga [opencode](https://o
|
|
|
237
239
|
|
|
238
240
|
```powershell
|
|
239
241
|
cd C:\ruta\a\tu\repo
|
|
240
|
-
openteam
|
|
242
|
+
openteam setup # global
|
|
241
243
|
# …o, si lo instalaste como dependencia del proyecto:
|
|
242
|
-
bunx openteam
|
|
244
|
+
bunx openteam setup
|
|
243
245
|
```
|
|
244
246
|
|
|
245
247
|
El asistente detecta Ollama / LM Studio / Foundry Local, te deja elegir los modelos locales y el frontier baseline, y escribe la configuración.
|
|
@@ -277,8 +279,8 @@ npm ls -g @jmanuelcorral/openteam # instalada globalmente (o `npm ls
|
|
|
277
279
|
|
|
278
280
|
Notas al actualizar:
|
|
279
281
|
|
|
280
|
-
- **No necesitas volver a ejecutar `openteam
|
|
281
|
-
- Vuelve a ejecutar `openteam
|
|
282
|
+
- **No necesitas volver a ejecutar `openteam setup`** para actualizar el plugin: opencode resuelve el paquete `@jmanuelcorral/openteam` declarado en `opencode.json` a la versión instalada. Reinicia opencode para que recargue el plugin.
|
|
283
|
+
- Vuelve a ejecutar `openteam setup` **solo** si quieres regenerar la configuración (cambiar runtimes, modelos o baseline). Pedirá confirmación antes de sobrescribir `opencode.json`, `.opencode/openteam.json` o `.opencode/agent/openteam.md`; **no toca los subagentes** que el orquestador haya creado a demanda.
|
|
282
284
|
- Ajustes puntuales sin reinit: `openteam baseline set <provider/model>` o `openteam baseline auto`.
|
|
283
285
|
|
|
284
286
|
## Configuración
|
|
@@ -345,7 +347,7 @@ Los cambios de `set`/`auto` se persisten en `.opencode/openteam.json` y aplican
|
|
|
345
347
|
|
|
346
348
|
### 2. Slash command `/openteam`
|
|
347
349
|
|
|
348
|
-
`openteam
|
|
350
|
+
`openteam setup` **genera automáticamente** `.opencode/command/openteam.md`, así que el comando `/openteam` aparece en opencode sin pasos manuales. (Si vienes de una versión anterior, vuelve a ejecutar `openteam setup` para crearlo, o cópialo a mano a tu proyecto o a `~/.config/opencode/command/`.) Después:
|
|
349
351
|
|
|
350
352
|
```text
|
|
351
353
|
/openteam baseline show
|
|
@@ -357,7 +359,7 @@ Los cambios de `set`/`auto` se persisten en `.opencode/openteam.json` y aplican
|
|
|
357
359
|
/openteam report
|
|
358
360
|
```
|
|
359
361
|
|
|
360
|
-
> ¿No ves `/openteam` en opencode? Asegúrate de que existe `.opencode/command/openteam.md` (lo crea `openteam
|
|
362
|
+
> ¿No ves `/openteam` en opencode? Asegúrate de que existe `.opencode/command/openteam.md` (lo crea `openteam setup`) y **reinicia/recarga opencode** para que descubra el comando.
|
|
361
363
|
|
|
362
364
|
### 3. CLI (`bin`)
|
|
363
365
|
|
|
@@ -409,7 +411,7 @@ openteam yolo on # activa YOLO
|
|
|
409
411
|
openteam yolo off # desactiva YOLO
|
|
410
412
|
```
|
|
411
413
|
|
|
412
|
-
También puedes activarlo durante `openteam
|
|
414
|
+
También puedes activarlo durante `openteam setup` (te lo pregunta), o al vuelo con `opencode --auto` sin tocar la config.
|
|
413
415
|
|
|
414
416
|
> **Importante: el permiso del agente anula al global.** opencode fusiona el permiso del frontmatter de cada agente **después** del global y gana la última regla que casa; por eso `openteam yolo on/off` regenera `.opencode/agent/openteam.md` para que su `permission` coincida con el estado YOLO. Sin esto, un `bash: ask`/`external_directory: deny` en el agente seguiría pidiendo confirmación aunque el global fuese `"*": allow`. Tras cambiar el modo, **reinicia o recarga opencode** para que los agentes tomen los nuevos permisos, y crea los subagentes con el mismo comodín cuando YOLO esté activo (el orquestador ya lo hace).
|
|
415
417
|
|
|
@@ -423,7 +425,7 @@ Segundo modo de operación: un **bucle externo** que invoca `opencode run` contr
|
|
|
423
425
|
|
|
424
426
|
openteam puede exponer un **panel web local** que se sirve **dentro del proceso de opencode** (hook `server()`), mientras la sesión está abierta. Muestra en vivo: ruteo reciente (coste/ahorro y modelo elegido, **solo hashes de prompt, nunca el texto**), progreso del backlog del loop, el equipo de agentes (LLM local/frontier de cada uno), últimos commits y actividad. Se actualiza por **SSE** (con *polling* de respaldo).
|
|
425
427
|
|
|
426
|
-
`openteam
|
|
428
|
+
`openteam setup` **te pregunta si quieres activarlo** (puerto 4599 por defecto). También puedes activarlo a mano en `.opencode/openteam.json`:
|
|
427
429
|
|
|
428
430
|
```json
|
|
429
431
|
{
|
|
@@ -451,6 +453,20 @@ Recarga opencode. Al arrancar, el plugin registra la URL en el log:
|
|
|
451
453
|
openteam dashboard
|
|
452
454
|
```
|
|
453
455
|
|
|
456
|
+
#### Verlo fuera de opencode: `openteam dashboard --serve`
|
|
457
|
+
|
|
458
|
+
¿No lo ves dentro de opencode (config sin `enabled`, o quieres inspeccionarlo
|
|
459
|
+
aparte)? Levanta el mismo panel **standalone** contra el repo actual, sin editar
|
|
460
|
+
la config. Escucha en loopback y corre hasta que lo pares con **Ctrl+C**:
|
|
461
|
+
|
|
462
|
+
```powershell
|
|
463
|
+
openteam dashboard --serve # imprime la URL y sirve el panel
|
|
464
|
+
openteam dashboard --serve --open # además abre el navegador
|
|
465
|
+
```
|
|
466
|
+
|
|
467
|
+
Fuerza el servidor aunque `dashboard.enabled` sea `false`. Es de solo lectura y
|
|
468
|
+
usa las mismas fuentes que dentro de opencode (telemetría, backlog, agentes).
|
|
469
|
+
|
|
454
470
|
> **Seguridad**: el servidor escucha **solo en loopback** (`127.0.0.1`/`localhost`, validado por Zod) y **nunca expone prompts** (solo `promptHash`). Se cierra al terminar la sesión de opencode. Si el puerto está ocupado y `autoPortFallback` es `true`, prueba el siguiente libre.
|
|
455
471
|
|
|
456
472
|
|
|
@@ -0,0 +1,45 @@
|
|
|
1
|
+
import type { AgentFile } from "../commands/agents";
|
|
2
|
+
import type { OpenTeamConfig } from "../config/schema";
|
|
3
|
+
import type { CommitView } from "../dashboard/types";
|
|
4
|
+
import type { DashboardRuntime, DashboardRuntimeDeps } from "../web/start";
|
|
5
|
+
/** Dependencias inyectables del launcher `openteam dashboard --serve`. */
|
|
6
|
+
export type DashboardServeDeps = {
|
|
7
|
+
loadConfig: (path: string) => Promise<OpenTeamConfig>;
|
|
8
|
+
configPath: string;
|
|
9
|
+
telemetryPath: string;
|
|
10
|
+
backlogPath: string;
|
|
11
|
+
agentDir: string;
|
|
12
|
+
readText: (path: string) => Promise<string | undefined>;
|
|
13
|
+
listAgentFiles: (dir: string) => Promise<AgentFile[]>;
|
|
14
|
+
now: () => string;
|
|
15
|
+
gitLastCommit?: () => Promise<CommitView | undefined>;
|
|
16
|
+
/** Espera hasta que el usuario pare el proceso (SIGINT/SIGTERM). */
|
|
17
|
+
waitForSignal: () => Promise<void>;
|
|
18
|
+
log: (message: string) => void;
|
|
19
|
+
/** Inyectable para tests; por defecto `startDashboard`. */
|
|
20
|
+
startDashboard?: (deps: DashboardRuntimeDeps) => DashboardRuntime | Promise<DashboardRuntime>;
|
|
21
|
+
/** Abre el navegador en la URL dada (opcional; solo con `--open`). */
|
|
22
|
+
openBrowser?: (url: string) => void | Promise<void>;
|
|
23
|
+
};
|
|
24
|
+
export type DashboardServeOptions = {
|
|
25
|
+
open: boolean;
|
|
26
|
+
};
|
|
27
|
+
/**
|
|
28
|
+
* Parsea los flags de `openteam dashboard`. `--serve` levanta el servidor real;
|
|
29
|
+
* `--open` (solo con `--serve`) abre el navegador.
|
|
30
|
+
*/
|
|
31
|
+
export declare function parseDashboardServeArgs(rest: readonly string[]): {
|
|
32
|
+
serve: boolean;
|
|
33
|
+
open: boolean;
|
|
34
|
+
};
|
|
35
|
+
export type DashboardServeResult = {
|
|
36
|
+
exitCode: number;
|
|
37
|
+
};
|
|
38
|
+
/**
|
|
39
|
+
* `openteam dashboard --serve`: arranca el dashboard web **standalone** (fuera de
|
|
40
|
+
* opencode) contra el repo actual, imprime la URL y corre hasta que el usuario lo
|
|
41
|
+
* para (Ctrl+C). Fuerza el servidor aunque `dashboard.enabled` sea `false` en la
|
|
42
|
+
* config, para poder verlo sin editar ficheros. Solo escucha en loopback.
|
|
43
|
+
*/
|
|
44
|
+
export declare function runDashboardServe(deps: DashboardServeDeps, options: DashboardServeOptions): Promise<DashboardServeResult>;
|
|
45
|
+
//# sourceMappingURL=dashboardServe.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"dashboardServe.d.ts","sourceRoot":"","sources":["../../src/cli/dashboardServe.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,oBAAoB,CAAC;AACpD,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,kBAAkB,CAAC;AACvD,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,oBAAoB,CAAC;AACrD,OAAO,KAAK,EAAE,gBAAgB,EAAE,oBAAoB,EAAE,MAAM,cAAc,CAAC;AAG3E,0EAA0E;AAC1E,MAAM,MAAM,kBAAkB,GAAG;IAC/B,UAAU,EAAE,CAAC,IAAI,EAAE,MAAM,KAAK,OAAO,CAAC,cAAc,CAAC,CAAC;IACtD,UAAU,EAAE,MAAM,CAAC;IACnB,aAAa,EAAE,MAAM,CAAC;IACtB,WAAW,EAAE,MAAM,CAAC;IACpB,QAAQ,EAAE,MAAM,CAAC;IACjB,QAAQ,EAAE,CAAC,IAAI,EAAE,MAAM,KAAK,OAAO,CAAC,MAAM,GAAG,SAAS,CAAC,CAAC;IACxD,cAAc,EAAE,CAAC,GAAG,EAAE,MAAM,KAAK,OAAO,CAAC,SAAS,EAAE,CAAC,CAAC;IACtD,GAAG,EAAE,MAAM,MAAM,CAAC;IAClB,aAAa,CAAC,EAAE,MAAM,OAAO,CAAC,UAAU,GAAG,SAAS,CAAC,CAAC;IACtD,oEAAoE;IACpE,aAAa,EAAE,MAAM,OAAO,CAAC,IAAI,CAAC,CAAC;IACnC,GAAG,EAAE,CAAC,OAAO,EAAE,MAAM,KAAK,IAAI,CAAC;IAC/B,2DAA2D;IAC3D,cAAc,CAAC,EAAE,CACf,IAAI,EAAE,oBAAoB,KACvB,gBAAgB,GAAG,OAAO,CAAC,gBAAgB,CAAC,CAAC;IAClD,sEAAsE;IACtE,WAAW,CAAC,EAAE,CAAC,GAAG,EAAE,MAAM,KAAK,IAAI,GAAG,OAAO,CAAC,IAAI,CAAC,CAAC;CACrD,CAAC;AAEF,MAAM,MAAM,qBAAqB,GAAG;IAClC,IAAI,EAAE,OAAO,CAAC;CACf,CAAC;AAEF;;;GAGG;AACH,wBAAgB,uBAAuB,CAAC,IAAI,EAAE,SAAS,MAAM,EAAE,GAAG;IAChE,KAAK,EAAE,OAAO,CAAC;IACf,IAAI,EAAE,OAAO,CAAC;CACf,CAKA;AAED,MAAM,MAAM,oBAAoB,GAAG;IAAE,QAAQ,EAAE,MAAM,CAAA;CAAE,CAAC;AAExD;;;;;GAKG;AACH,wBAAsB,iBAAiB,CACrC,IAAI,EAAE,kBAAkB,EACxB,OAAO,EAAE,qBAAqB,GAC7B,OAAO,CAAC,oBAAoB,CAAC,CAuC/B"}
|
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
import type { ModelCapabilityProfile } from "../capabilities/types";
|
|
2
|
-
import type { DetectedRuntime, Prompter } from "../commands/
|
|
2
|
+
import type { DetectedRuntime, Prompter } from "../commands/setup";
|
|
3
3
|
import { type ExecLike } from "../local/foundry-local";
|
|
4
4
|
/** Prompter interactivo basado en @clack/prompts. */
|
|
5
5
|
export declare const clackPrompter: Prompter;
|
|
@@ -9,4 +9,4 @@ export declare const clackPrompter: Prompter;
|
|
|
9
9
|
*/
|
|
10
10
|
export declare function createLoadFrontierProfiles(): () => Promise<ModelCapabilityProfile[]>;
|
|
11
11
|
export declare function createDetect(exec: ExecLike): () => Promise<DetectedRuntime[]>;
|
|
12
|
-
//# sourceMappingURL=
|
|
12
|
+
//# sourceMappingURL=setupAdapters.d.ts.map
|
|
@@ -0,0 +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"}
|