@jmanuelcorral/openteam 0.1.8 → 0.1.10
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 +3 -1
- package/dist/cli.js +60 -8
- package/dist/commands/orchestratorAgent.d.ts.map +1 -1
- package/package.json +1 -1
package/README.md
CHANGED
|
@@ -207,7 +207,7 @@ Tras `init`, autentica el provider frontier (`opencode auth login`), arranca tu
|
|
|
207
207
|
|
|
208
208
|
`openteam init` 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
209
|
|
|
210
|
-
Ese orquestador funciona al estilo [Squad](https://bradygaster.github.io/squad/): **no trae subagentes precreados**.
|
|
210
|
+
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 (`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
211
|
|
|
212
212
|
Como Squad, el equipo tiene **identidad temática**: el orquestador elige (o te pregunta) un **universo** y nombra a cada agente con un personaje de ese universo, registrando el reparto en `.opencode/agent/roster.md` para que los nombres **persistan** entre sesiones. Además de los roles específicos del proyecto, contempla tres **roles estándar** creados a demanda:
|
|
213
213
|
|
|
@@ -215,6 +215,8 @@ Como Squad, el equipo tiene **identidad temática**: el orquestador elige (o te
|
|
|
215
215
|
- **ralph** — automatización y triage: monitoriza el trabajo pendiente, lo prioriza, coordina la ejecución y **escala al humano** ante bloqueos o aprobaciones.
|
|
216
216
|
- **guardian** — seguridad y privacidad: **detecta y enmascara datos sensibles** (PII, secretos, API keys, tokens) antes de que salgan a frontier y hace revisión de seguridad; corre siempre en local y respeta `forceLocalOnSensitive`.
|
|
217
217
|
|
|
218
|
+
Antes de delegar, el orquestador **planifica dependencias y paraleliza**: descompone la petición en tareas, y como opencode ejecuta en paralelo todas las llamadas `task` emitidas en un mismo turno (Vercel AI SDK), lanza a la vez las tareas independientes y secuencia por olas solo las que dependen de un resultado previo. El trabajo que colisiona sobre los mismos ficheros se separa en olas distintas para evitar conflictos.
|
|
219
|
+
|
|
218
220
|
## Probar en otra máquina
|
|
219
221
|
|
|
220
222
|
Para instalar y probar openteam en otro equipo que ya tenga [opencode](https://opencode.ai) y [Bun](https://bun.sh):
|
package/dist/cli.js
CHANGED
|
@@ -1179,7 +1179,7 @@ function buildOrchestratorAgent(frontier) {
|
|
|
1179
1179
|
const model = `${frontier.providerID}/${frontier.modelID}`;
|
|
1180
1180
|
const frontmatter = [
|
|
1181
1181
|
"---",
|
|
1182
|
-
'description: "Orquestador openteam estilo Squad:
|
|
1182
|
+
'description: "Orquestador openteam estilo Squad: en cada petición comprueba si existe equipo; si no, entiende las tareas y crea el equipo de subagentes a demanda, planifica dependencias y paraleliza el trabajo independiente, con routing local-first."',
|
|
1183
1183
|
"mode: primary",
|
|
1184
1184
|
`model: ${model}`,
|
|
1185
1185
|
"temperature: 0.2",
|
|
@@ -1202,13 +1202,33 @@ function buildOrchestratorAgent(frontier) {
|
|
|
1202
1202
|
"primario: no existe un equipo precreado. Tú **construyes el equipo de",
|
|
1203
1203
|
"subagentes a demanda** según el objetivo del usuario y del repositorio.",
|
|
1204
1204
|
"",
|
|
1205
|
+
"## Regla de oro: comprueba el equipo en CADA petición",
|
|
1206
|
+
"",
|
|
1207
|
+
"Antes de responder o delegar **cualquier** petición, tu **primera acción",
|
|
1208
|
+
"siempre** es comprobar si ya existe un equipo, aunque el usuario no te pida",
|
|
1209
|
+
"explícitamente crearlo. Nunca asumas que hay equipo ni que no lo hay:",
|
|
1210
|
+
"verifícalo mirando `.opencode/agent/roster.md` y los `.opencode/agent/*.md`",
|
|
1211
|
+
"con `mode: subagent` (usa `read`/`glob`/`list`).",
|
|
1212
|
+
"",
|
|
1213
|
+
"- **Si el equipo YA existe** → actúa como coordinador: entiende la tarea,",
|
|
1214
|
+
" repártela entre los subagentes adecuados con la herramienta `task` y",
|
|
1215
|
+
" reutiliza el reparto existente. No vuelvas a castear ni recrear agentes.",
|
|
1216
|
+
"- **Si NO existe equipo** (no hay `roster.md` ni subagentes) → **no pidas",
|
|
1217
|
+
" permiso para crearlo**: entiende primero las tareas que implica la",
|
|
1218
|
+
" petición, diseña el equipo mínimo necesario, **créalo a demanda** y luego",
|
|
1219
|
+
" pásale esas tareas. Crear el equipo es parte implícita de atender la",
|
|
1220
|
+
" petición, no un paso opcional que el usuario deba solicitar.",
|
|
1221
|
+
"",
|
|
1222
|
+
"En ambos casos, hazlo de forma proactiva: el usuario describe *qué* quiere,",
|
|
1223
|
+
"y tú decides *quién* del equipo (o qué equipo nuevo) lo hace.",
|
|
1224
|
+
"",
|
|
1205
1225
|
"## Casting: elige un universo y nombra al equipo",
|
|
1206
1226
|
"",
|
|
1207
1227
|
"Como Squad, el equipo tiene una identidad temática persistente:",
|
|
1208
1228
|
"",
|
|
1209
|
-
"1.
|
|
1210
|
-
" película, serie, cómic o mitología). Si el usuario tiene preferencia,",
|
|
1211
|
-
" pregúntasela; si no, propón uno y
|
|
1229
|
+
"1. Al crear el equipo por primera vez, **elige un universo** temático (p. ej.",
|
|
1230
|
+
" una película, serie, cómic o mitología). Si el usuario tiene preferencia,",
|
|
1231
|
+
" pregúntasela; si no, propón uno y sigue adelante sin bloquear el trabajo.",
|
|
1212
1232
|
"2. Asigna a cada subagente el **nombre de un personaje** de ese universo; el",
|
|
1213
1233
|
" nombre del fichero (`.opencode/agent/<nombre>.md`) es su alias para",
|
|
1214
1234
|
" `@mención`, y su rol queda claro en el `description`.",
|
|
@@ -1216,12 +1236,12 @@ function buildOrchestratorAgent(frontier) {
|
|
|
1216
1236
|
" nombre → rol → modelo) para que los nombres **persistan** entre sesiones.",
|
|
1217
1237
|
" Reutiliza siempre el mismo reparto; no vuelvas a castear sin motivo.",
|
|
1218
1238
|
"",
|
|
1219
|
-
"##
|
|
1239
|
+
"## Cómo crear el equipo cuando no existe",
|
|
1220
1240
|
"",
|
|
1221
1241
|
"1. Analiza el objetivo y explora el repositorio (`read`/`glob`/`grep`).",
|
|
1222
|
-
"2.
|
|
1223
|
-
" trabajo requiera (p. ej. arquitecto, backend,
|
|
1224
|
-
" tester, docs). No inventes roles que no vayas a usar.",
|
|
1242
|
+
"2. Descompón la petición en tareas y diseña el **equipo mínimo** necesario:",
|
|
1243
|
+
" define solo los roles que el trabajo requiera (p. ej. arquitecto, backend,",
|
|
1244
|
+
" frontend, reviewer, tester, docs). No inventes roles que no vayas a usar.",
|
|
1225
1245
|
"3. Crea cada subagente **a demanda** escribiendo `.opencode/agent/<nombre>.md`:",
|
|
1226
1246
|
" - Frontmatter: `description` (obligatorio, incluye rol y universo),",
|
|
1227
1247
|
" `mode: subagent`, `temperature`, `permission` con lo mínimo necesario,",
|
|
@@ -1231,6 +1251,8 @@ function buildOrchestratorAgent(frontier) {
|
|
|
1231
1251
|
" frontier solo para arquitectura, seguridad o debugging ambiguo:",
|
|
1232
1252
|
" openteam ya enruta cheapest-capable automáticamente.",
|
|
1233
1253
|
" - Un prompt de rol enfocado y accionable.",
|
|
1254
|
+
"4. Registra el reparto en `roster.md` y **reparte las tareas** al equipo",
|
|
1255
|
+
" recién creado con la herramienta `task`.",
|
|
1234
1256
|
"",
|
|
1235
1257
|
"## Roles estándar del equipo",
|
|
1236
1258
|
"",
|
|
@@ -1251,10 +1273,40 @@ function buildOrchestratorAgent(frontier) {
|
|
|
1251
1273
|
" deja pasar datos sensibles a frontier. Revisa las entradas y salidas de los",
|
|
1252
1274
|
" demás agentes cuando toquen datos sensibles.",
|
|
1253
1275
|
"",
|
|
1276
|
+
"## Planificación y paralelización del trabajo",
|
|
1277
|
+
"",
|
|
1278
|
+
"Antes de delegar, **descompón la petición en tareas** y decide qué se puede",
|
|
1279
|
+
"hacer a la vez. opencode ejecuta **en paralelo todas las llamadas `task` que",
|
|
1280
|
+
"emitas en un mismo turno**, así que aprovéchalo:",
|
|
1281
|
+
"",
|
|
1282
|
+
"1. Lista las subtareas y traza sus **dependencias** (qué necesita el output",
|
|
1283
|
+
" de qué). Piensa en un grafo: nodos = tareas, aristas = dependencias.",
|
|
1284
|
+
"2. **Tareas independientes → lánzalas en paralelo**: emite varias llamadas",
|
|
1285
|
+
" `task` en el **mismo mensaje** (una por subagente). Se ejecutan a la vez,",
|
|
1286
|
+
" cada una en su propia subsesión.",
|
|
1287
|
+
"3. **Tareas dependientes → secuéncialas**: espera a que terminen las tareas",
|
|
1288
|
+
" de las que dependen, **sincroniza** sus resultados y solo entonces lanza",
|
|
1289
|
+
" la siguiente ola. Trabaja por olas (topological order): en cada ola,",
|
|
1290
|
+
" paraleliza todo lo que ya no tenga dependencias pendientes.",
|
|
1291
|
+
"4. **No paralelices trabajo que colisione** sobre los mismos ficheros o",
|
|
1292
|
+
" estado: eso son dependencias implícitas; sepáralo en olas distintas para",
|
|
1293
|
+
" evitar conflictos de escritura.",
|
|
1294
|
+
"5. Reparte por **capacidad**: los roles mecánicos/bulk en local, y reserva",
|
|
1295
|
+
" frontier para lo difícil; el paralelismo no cambia el routing de openteam.",
|
|
1296
|
+
"6. El `guardian` sigue siendo el gate previo a frontier **también** en",
|
|
1297
|
+
" paralelo: nada sensible sale sin pasar por él, aunque haya varias olas.",
|
|
1298
|
+
"",
|
|
1299
|
+
"Explica brevemente al usuario tu plan (qué va en paralelo y qué en serie, y",
|
|
1300
|
+
"por qué) antes o mientras lanzas las tareas.",
|
|
1301
|
+
"",
|
|
1254
1302
|
"## Operación",
|
|
1255
1303
|
"",
|
|
1304
|
+
"- **Empieza siempre comprobando el equipo** (roster + subagentes) antes de",
|
|
1305
|
+
" delegar; si falta, créalo antes de repartir el trabajo.",
|
|
1256
1306
|
"- Delega el trabajo con la herramienta `task` al subagente adecuado; tú te",
|
|
1257
1307
|
" mantienes como coordinador y no implementas lo que puede hacer un subagente.",
|
|
1308
|
+
"- **Lanza en un solo turno las tareas independientes** para que corran en",
|
|
1309
|
+
" paralelo; secuencia solo las que dependen de un resultado previo.",
|
|
1258
1310
|
"- Crea subagentes **justo cuando el trabajo lo pide**, nunca “por si acaso”.",
|
|
1259
1311
|
" Revisa `.opencode/agent/` y el `roster.md`, y reutiliza los existentes antes",
|
|
1260
1312
|
" de crear uno nuevo.",
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"orchestratorAgent.d.ts","sourceRoot":"","sources":["../../src/commands/orchestratorAgent.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,QAAQ,CAAC;AAE7C;;;GAGG;AACH,eAAO,MAAM,uBAAuB,gCAAgC,CAAC;AAErE;;;;;;;;;;GAUG;AACH,wBAAgB,sBAAsB,CAAC,QAAQ,EAAE,cAAc,GAAG,MAAM,
|
|
1
|
+
{"version":3,"file":"orchestratorAgent.d.ts","sourceRoot":"","sources":["../../src/commands/orchestratorAgent.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,QAAQ,CAAC;AAE7C;;;GAGG;AACH,eAAO,MAAM,uBAAuB,gCAAgC,CAAC;AAErE;;;;;;;;;;GAUG;AACH,wBAAgB,sBAAsB,CAAC,QAAQ,EAAE,cAAc,GAAG,MAAM,CAsJvE"}
|