@jmanuelcorral/openteam 0.1.34 → 0.1.36
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 +14 -0
- package/dist/cli.js +87 -3
- package/dist/commands/dispatch.d.ts.map +1 -1
- package/dist/commands/local.d.ts +6 -0
- package/dist/commands/local.d.ts.map +1 -0
- package/dist/commands/setup.d.ts.map +1 -1
- package/dist/config/schema.d.ts +2 -0
- package/dist/config/schema.d.ts.map +1 -1
- package/dist/index.js +88 -2
- package/dist/orchestrator/coordinator.d.ts +3 -0
- package/dist/orchestrator/coordinator.d.ts.map +1 -1
- package/dist/orchestrator/ledger.d.ts +47 -0
- package/dist/orchestrator/ledger.d.ts.map +1 -0
- package/dist/orchestrator/permissions.d.ts.map +1 -1
- package/dist/orchestrator/roles.d.ts.map +1 -1
- package/dist/orchestrator/sdd.d.ts +90 -0
- package/dist/orchestrator/sdd.d.ts.map +1 -0
- package/dist/router/chooseModel.d.ts.map +1 -1
- package/dist/telemetry/events.d.ts +2 -0
- package/dist/telemetry/events.d.ts.map +1 -1
- package/package.json +1 -1
package/README.md
CHANGED
|
@@ -375,6 +375,8 @@ openteam console
|
|
|
375
375
|
openteam report --telemetry .opencode/openteam-telemetry.jsonl
|
|
376
376
|
openteam yolo status
|
|
377
377
|
openteam yolo on
|
|
378
|
+
openteam local status
|
|
379
|
+
openteam local off
|
|
378
380
|
```
|
|
379
381
|
|
|
380
382
|
Flags: `--config <path>` y `--telemetry <path>` sobrescriben las rutas por defecto; `--opencode <path>` apunta el comando `yolo` a un `opencode.json` concreto.
|
|
@@ -417,6 +419,18 @@ También puedes activarlo durante `openteam setup` (te lo pregunta), o al vuelo
|
|
|
417
419
|
|
|
418
420
|
> **YOLO no desactiva la privacidad de openteam.** Solo afecta a las aprobaciones de permisos de opencode; con `privacyMode: "forceLocalOnSensitive"`, los prompts sensibles siguen sin salir a frontier. Úsalo solo en entornos de confianza: auto-aprueba también `bash`, escrituras y accesos fuera del workspace (salvo reglas `deny` explícitas).
|
|
419
421
|
|
|
422
|
+
### Solo frontier (sin runtime local): `openteam local`
|
|
423
|
+
|
|
424
|
+
Si **no tienes ningún runtime local** (Ollama/LM Studio/Foundry Local) o prefieres no usarlo, puedes forzar que openteam enrute **siempre a modelos frontier**. `openteam setup` ya activa este modo automáticamente cuando no habilitas ningún runtime, pero puedes alternarlo en cualquier momento sin repetir el setup:
|
|
425
|
+
|
|
426
|
+
```powershell
|
|
427
|
+
openteam local status # ¿local-first o solo frontier? + runtimes configurados
|
|
428
|
+
openteam local off # solo frontier (desactiva el routing local-first)
|
|
429
|
+
openteam local on # vuelve al routing local-first
|
|
430
|
+
```
|
|
431
|
+
|
|
432
|
+
Esto persiste el flag `router.frontierOnly` en `.opencode/openteam.json`. Con `frontierOnly` activo, el router escoge el **frontier cheapest-capable** en lugar de la heurística local-first, pero **respeta la privacidad, los presupuestos y los overrides explícitos por tarea**: los prompts sensibles con `forceLocalOnSensitive` no salen a frontier, y `local off` degrada esa política a `consentBeforeFrontier` (imposible forzar local sin runtime) informándote del cambio.
|
|
433
|
+
|
|
420
434
|
### Modo desatendido: `openteam loop` (patrón Ralph) 🎯 *(diseño)*
|
|
421
435
|
|
|
422
436
|
Segundo modo de operación: un **bucle externo** que invoca `opencode run` contra un backlog persistente hasta vaciarlo, con contexto fresco por iteración y topes de seguridad (presupuesto, máx. iteraciones, sin-progreso). Complementa al orquestador interactivo, no lo sustituye. Consulta el diseño y los ejemplos en **[docs/loop.md](docs/loop.md)**.
|
package/dist/cli.js
CHANGED
|
@@ -688,12 +688,14 @@ var OpenTeamConfigObjectSchema = z3.object({
|
|
|
688
688
|
mode: RouterModeSchema.default("balanced"),
|
|
689
689
|
localDefault: ModelRefSchema.default(defaultLocalModel),
|
|
690
690
|
trivialPromptMaxChars: z3.number().int().positive().default(280),
|
|
691
|
-
frontierPromptMinChars: z3.number().int().positive().default(2000)
|
|
691
|
+
frontierPromptMinChars: z3.number().int().positive().default(2000),
|
|
692
|
+
frontierOnly: z3.boolean().default(false)
|
|
692
693
|
}).default({
|
|
693
694
|
mode: "balanced",
|
|
694
695
|
localDefault: defaultLocalModel,
|
|
695
696
|
trivialPromptMaxChars: 280,
|
|
696
|
-
frontierPromptMinChars: 2000
|
|
697
|
+
frontierPromptMinChars: 2000,
|
|
698
|
+
frontierOnly: false
|
|
697
699
|
}),
|
|
698
700
|
local: z3.object({
|
|
699
701
|
runtimes: z3.array(LocalRuntimeSchema).min(1).default([
|
|
@@ -751,6 +753,7 @@ var RouteEventSchema = EventBaseSchema.extend({
|
|
|
751
753
|
agent: z4.string().min(1).optional(),
|
|
752
754
|
success: z4.boolean().optional(),
|
|
753
755
|
batchID: z4.string().min(1).optional(),
|
|
756
|
+
taskID: z4.string().min(1).optional(),
|
|
754
757
|
failureReason: z4.string().min(1).optional(),
|
|
755
758
|
failureStage: z4.string().min(1).optional()
|
|
756
759
|
});
|
|
@@ -3944,6 +3947,60 @@ function renderDoctor(input) {
|
|
|
3944
3947
|
`);
|
|
3945
3948
|
}
|
|
3946
3949
|
|
|
3950
|
+
// src/commands/local.ts
|
|
3951
|
+
function enabledRuntimesSummary(config) {
|
|
3952
|
+
const enabled = config.local.runtimes.filter((runtime) => runtime.enabled);
|
|
3953
|
+
if (enabled.length === 0) {
|
|
3954
|
+
return "ninguno";
|
|
3955
|
+
}
|
|
3956
|
+
return enabled.map((runtime) => {
|
|
3957
|
+
const model = `${runtime.defaultModel.providerID}/${runtime.defaultModel.modelID}`;
|
|
3958
|
+
const remote = runtime.baseURL !== undefined && !runtime.baseURL.includes("localhost") && !runtime.baseURL.includes("127.0.0.1") ? ` @ ${runtime.baseURL}` : "";
|
|
3959
|
+
return `${runtime.id} (${model})${remote}`;
|
|
3960
|
+
}).join(", ");
|
|
3961
|
+
}
|
|
3962
|
+
function showLocal(config) {
|
|
3963
|
+
const mode = config.router.frontierOnly ? "solo frontier (frontierOnly)" : "local-first";
|
|
3964
|
+
const lines = [
|
|
3965
|
+
"openteam local:",
|
|
3966
|
+
` modo: ${mode}`,
|
|
3967
|
+
` frontierOnly: ${config.router.frontierOnly}`,
|
|
3968
|
+
` privacidad: ${config.privacyMode}`,
|
|
3969
|
+
` runtimes: ${enabledRuntimesSummary(config)}`
|
|
3970
|
+
];
|
|
3971
|
+
return { message: lines.join(`
|
|
3972
|
+
`) };
|
|
3973
|
+
}
|
|
3974
|
+
function setFrontierOnly(config) {
|
|
3975
|
+
if (config.router.frontierOnly) {
|
|
3976
|
+
return { message: "Sin cambios: ya estás en modo solo frontier." };
|
|
3977
|
+
}
|
|
3978
|
+
const flipsPrivacy = config.privacyMode === "forceLocalOnSensitive";
|
|
3979
|
+
const next = {
|
|
3980
|
+
...config,
|
|
3981
|
+
router: { ...config.router, frontierOnly: true },
|
|
3982
|
+
privacyMode: flipsPrivacy ? "consentBeforeFrontier" : config.privacyMode
|
|
3983
|
+
};
|
|
3984
|
+
const privacyNote = flipsPrivacy ? " Privacidad ajustada a 'consentBeforeFrontier' (forceLocalOnSensitive requiere un runtime local)." : "";
|
|
3985
|
+
return {
|
|
3986
|
+
config: next,
|
|
3987
|
+
message: `Modo solo frontier activado (frontierOnly=true).${privacyNote}`
|
|
3988
|
+
};
|
|
3989
|
+
}
|
|
3990
|
+
function setLocalFirst(config) {
|
|
3991
|
+
if (!config.router.frontierOnly) {
|
|
3992
|
+
return { message: "Sin cambios: el routing local-first ya está activo." };
|
|
3993
|
+
}
|
|
3994
|
+
const next = {
|
|
3995
|
+
...config,
|
|
3996
|
+
router: { ...config.router, frontierOnly: false }
|
|
3997
|
+
};
|
|
3998
|
+
return {
|
|
3999
|
+
config: next,
|
|
4000
|
+
message: "Routing local-first reactivado (frontierOnly=false). Asegúrate de tener un runtime local accesible."
|
|
4001
|
+
};
|
|
4002
|
+
}
|
|
4003
|
+
|
|
3947
4004
|
// src/commands/orchestratorAgent.ts
|
|
3948
4005
|
var ORCHESTRATOR_AGENT_PATH = ".opencode/agent/openteam.md";
|
|
3949
4006
|
function buildOrchestratorAgent(frontier, options = {}) {
|
|
@@ -4179,6 +4236,9 @@ var HELP = [
|
|
|
4179
4236
|
" openteam baseline show Muestra el baseline efectivo",
|
|
4180
4237
|
" openteam baseline set <p/model> Fija el baseline (modo pinned)",
|
|
4181
4238
|
" openteam baseline auto Baseline cheapest-capable (modo auto)",
|
|
4239
|
+
" openteam local status Muestra el modo de routing (local-first / solo frontier)",
|
|
4240
|
+
" openteam local off Usa solo modelos frontier (sin runtime local)",
|
|
4241
|
+
" openteam local on Reactiva el routing local-first",
|
|
4182
4242
|
" openteam doctor Diagnóstico de runtimes y config",
|
|
4183
4243
|
" openteam agents Lista los agentes y el LLM (local/frontier) de cada uno",
|
|
4184
4244
|
" openteam console Lanza la Console web multi-sesión (Ctrl+C para parar; --open abre el navegador)",
|
|
@@ -4261,6 +4321,26 @@ async function runBaseline(positionals, deps, configPath) {
|
|
|
4261
4321
|
${HELP}`
|
|
4262
4322
|
};
|
|
4263
4323
|
}
|
|
4324
|
+
async function runLocal(positionals, deps, configPath) {
|
|
4325
|
+
const sub = positionals[1] ?? "status";
|
|
4326
|
+
if (sub !== "status" && sub !== "off" && sub !== "on") {
|
|
4327
|
+
return {
|
|
4328
|
+
exitCode: 1,
|
|
4329
|
+
stdout: `Subcomando de local desconocido: ${sub}
|
|
4330
|
+
|
|
4331
|
+
${HELP}`
|
|
4332
|
+
};
|
|
4333
|
+
}
|
|
4334
|
+
const config = await deps.loadConfig(configPath);
|
|
4335
|
+
if (sub === "status") {
|
|
4336
|
+
return { exitCode: 0, stdout: showLocal(config).message };
|
|
4337
|
+
}
|
|
4338
|
+
const outcome = sub === "off" ? setFrontierOnly(config) : setLocalFirst(config);
|
|
4339
|
+
if (outcome.config !== undefined) {
|
|
4340
|
+
await deps.saveConfig(outcome.config, configPath);
|
|
4341
|
+
}
|
|
4342
|
+
return { exitCode: 0, stdout: outcome.message };
|
|
4343
|
+
}
|
|
4264
4344
|
async function runYolo(positionals, deps, opencodeConfigPath) {
|
|
4265
4345
|
const sub = positionals[1] ?? "status";
|
|
4266
4346
|
if (sub !== "status" && sub !== "on" && sub !== "off") {
|
|
@@ -4345,6 +4425,9 @@ async function runCli(argv, deps) {
|
|
|
4345
4425
|
if (command === "baseline") {
|
|
4346
4426
|
return await runBaseline(parsed.positionals, deps, configPath);
|
|
4347
4427
|
}
|
|
4428
|
+
if (command === "local") {
|
|
4429
|
+
return await runLocal(parsed.positionals, deps, configPath);
|
|
4430
|
+
}
|
|
4348
4431
|
if (command === "yolo") {
|
|
4349
4432
|
return await runYolo(parsed.positionals, deps, opencodeConfigPath);
|
|
4350
4433
|
}
|
|
@@ -4551,7 +4634,8 @@ function buildOpenTeamConfig(answers) {
|
|
|
4551
4634
|
},
|
|
4552
4635
|
router: {
|
|
4553
4636
|
mode: answers.routerMode,
|
|
4554
|
-
localDefault
|
|
4637
|
+
localDefault,
|
|
4638
|
+
frontierOnly: primaryLocal === undefined
|
|
4555
4639
|
},
|
|
4556
4640
|
local: { runtimes },
|
|
4557
4641
|
privacyMode: answers.privacyMode
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"dispatch.d.ts","sourceRoot":"","sources":["../../src/commands/dispatch.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,kBAAkB,CAAC;AACvD,OAAO,KAAK,EAAE,oBAAoB,EAAE,MAAM,gBAAgB,CAAC;AAC3D,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,oBAAoB,CAAC;AACrD,OAAO,EACL,KAAK,SAAS,EAIf,MAAM,UAAU,CAAC;
|
|
1
|
+
{"version":3,"file":"dispatch.d.ts","sourceRoot":"","sources":["../../src/commands/dispatch.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,kBAAkB,CAAC;AACvD,OAAO,KAAK,EAAE,oBAAoB,EAAE,MAAM,gBAAgB,CAAC;AAC3D,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,oBAAoB,CAAC;AACrD,OAAO,EACL,KAAK,SAAS,EAIf,MAAM,UAAU,CAAC;AAclB,MAAM,MAAM,OAAO,GAAG;IACpB,UAAU,EAAE,CAAC,IAAI,EAAE,MAAM,KAAK,OAAO,CAAC,cAAc,CAAC,CAAC;IACtD,UAAU,EAAE,CAAC,MAAM,EAAE,cAAc,EAAE,IAAI,EAAE,MAAM,KAAK,OAAO,CAAC,IAAI,CAAC,CAAC;IACpE,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,kBAAkB,EAAE,CAClB,IAAI,EAAE,MAAM,KACT,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,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,UAAU,EAAE,MAAM,CAAC;IACnB,aAAa,EAAE,MAAM,CAAC;IACtB,kBAAkB,EAAE,MAAM,CAAC;IAC3B,qBAAqB,EAAE,MAAM,CAAC;IAC9B,QAAQ,EAAE,MAAM,CAAC;CAClB,CAAC;AAEF,MAAM,MAAM,SAAS,GAAG;IACtB,QAAQ,EAAE,MAAM,CAAC;IACjB,MAAM,EAAE,MAAM,CAAC;CAChB,CAAC;AA0PF,wBAAsB,MAAM,CAC1B,IAAI,EAAE,SAAS,MAAM,EAAE,EACvB,IAAI,EAAE,OAAO,GACZ,OAAO,CAAC,SAAS,CAAC,CAmEpB"}
|
|
@@ -0,0 +1,6 @@
|
|
|
1
|
+
import type { OpenTeamConfig } from "../config/schema";
|
|
2
|
+
import type { CommandOutcome } from "./types";
|
|
3
|
+
export declare function showLocal(config: OpenTeamConfig): CommandOutcome;
|
|
4
|
+
export declare function setFrontierOnly(config: OpenTeamConfig): CommandOutcome;
|
|
5
|
+
export declare function setLocalFirst(config: OpenTeamConfig): CommandOutcome;
|
|
6
|
+
//# sourceMappingURL=local.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"local.d.ts","sourceRoot":"","sources":["../../src/commands/local.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,kBAAkB,CAAC;AACvD,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,SAAS,CAAC;AAkC9C,wBAAgB,SAAS,CAAC,MAAM,EAAE,cAAc,GAAG,cAAc,CAahE;AAED,wBAAgB,eAAe,CAAC,MAAM,EAAE,cAAc,GAAG,cAAc,CAsBtE;AAED,wBAAgB,aAAa,CAAC,MAAM,EAAE,cAAc,GAAG,cAAc,CAepE"}
|
|
@@ -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/dist/config/schema.d.ts
CHANGED
|
@@ -96,6 +96,7 @@ export declare const OpenTeamConfigObjectSchema: z.ZodObject<{
|
|
|
96
96
|
}, z.core.$strip>>;
|
|
97
97
|
trivialPromptMaxChars: z.ZodDefault<z.ZodNumber>;
|
|
98
98
|
frontierPromptMinChars: z.ZodDefault<z.ZodNumber>;
|
|
99
|
+
frontierOnly: z.ZodDefault<z.ZodBoolean>;
|
|
99
100
|
}, z.core.$strip>>;
|
|
100
101
|
local: z.ZodDefault<z.ZodObject<{
|
|
101
102
|
runtimes: z.ZodDefault<z.ZodArray<z.ZodObject<{
|
|
@@ -179,6 +180,7 @@ export declare const OpenTeamConfigSchema: z.ZodObject<{
|
|
|
179
180
|
}, z.core.$strip>>;
|
|
180
181
|
trivialPromptMaxChars: z.ZodDefault<z.ZodNumber>;
|
|
181
182
|
frontierPromptMinChars: z.ZodDefault<z.ZodNumber>;
|
|
183
|
+
frontierOnly: z.ZodDefault<z.ZodBoolean>;
|
|
182
184
|
}, z.core.$strip>>;
|
|
183
185
|
local: z.ZodDefault<z.ZodObject<{
|
|
184
186
|
runtimes: z.ZodDefault<z.ZodArray<z.ZodObject<{
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"schema.d.ts","sourceRoot":"","sources":["../../src/config/schema.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAC;AAExB,eAAO,MAAM,cAAc;;;iBAGzB,CAAC;AAEH,eAAO,MAAM,gBAAgB;;;;EAA6C,CAAC;AAC3E,eAAO,MAAM,iBAAiB;;;;EAI5B,CAAC;AACH,eAAO,MAAM,kBAAkB;;;EAA6B,CAAC;AAE7D,eAAO,MAAM,iBAAiB;;;EAAqC,CAAC;AAEpE,eAAO,MAAM,mBAAmB;;;;;;;;;;;;;;;kBAmC5B,CAAC;AAEL;;GAEG;AAEH;;;;GAIG;AACH,eAAO,MAAM,mBAAmB;;;;;kBAW5B,CAAC;AAWL,eAAO,MAAM,kBAAkB;;;;;;;;;;;;;;;;;iBAM7B,CAAC;AAEH,eAAO,MAAM,0BAA0B
|
|
1
|
+
{"version":3,"file":"schema.d.ts","sourceRoot":"","sources":["../../src/config/schema.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAC;AAExB,eAAO,MAAM,cAAc;;;iBAGzB,CAAC;AAEH,eAAO,MAAM,gBAAgB;;;;EAA6C,CAAC;AAC3E,eAAO,MAAM,iBAAiB;;;;EAI5B,CAAC;AACH,eAAO,MAAM,kBAAkB;;;EAA6B,CAAC;AAE7D,eAAO,MAAM,iBAAiB;;;EAAqC,CAAC;AAEpE,eAAO,MAAM,mBAAmB;;;;;;;;;;;;;;;kBAmC5B,CAAC;AAEL;;GAEG;AAEH;;;;GAIG;AACH,eAAO,MAAM,mBAAmB;;;;;kBAW5B,CAAC;AAWL,eAAO,MAAM,kBAAkB;;;;;;;;;;;;;;;;;iBAM7B,CAAC;AAEH,eAAO,MAAM,0BAA0B;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;iBA8DrC,CAAC;AAEH,gDAAgD;AAChD,eAAO,MAAM,oBAAoB;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;iBAA6B,CAAC;AAE/D,MAAM,MAAM,QAAQ,GAAG,CAAC,CAAC,KAAK,CAAC,OAAO,cAAc,CAAC,CAAC;AACtD,MAAM,MAAM,UAAU,GAAG,CAAC,CAAC,KAAK,CAAC,OAAO,gBAAgB,CAAC,CAAC;AAC1D,MAAM,MAAM,WAAW,GAAG,CAAC,CAAC,KAAK,CAAC,OAAO,iBAAiB,CAAC,CAAC;AAC5D,MAAM,MAAM,cAAc,GAAG,CAAC,CAAC,KAAK,CAAC,OAAO,oBAAoB,CAAC,CAAC;AAClE,MAAM,MAAM,YAAY,GAAG,CAAC,CAAC,KAAK,CAAC,OAAO,kBAAkB,CAAC,CAAC;AAC9D,MAAM,MAAM,aAAa,GAAG,CAAC,CAAC,KAAK,CAAC,OAAO,mBAAmB,CAAC,CAAC;AAChE,MAAM,MAAM,aAAa,GAAG,CAAC,CAAC,KAAK,CAAC,OAAO,mBAAmB,CAAC,CAAC"}
|
package/dist/index.js
CHANGED
|
@@ -393,12 +393,14 @@ var OpenTeamConfigObjectSchema = z.object({
|
|
|
393
393
|
mode: RouterModeSchema.default("balanced"),
|
|
394
394
|
localDefault: ModelRefSchema.default(defaultLocalModel),
|
|
395
395
|
trivialPromptMaxChars: z.number().int().positive().default(280),
|
|
396
|
-
frontierPromptMinChars: z.number().int().positive().default(2000)
|
|
396
|
+
frontierPromptMinChars: z.number().int().positive().default(2000),
|
|
397
|
+
frontierOnly: z.boolean().default(false)
|
|
397
398
|
}).default({
|
|
398
399
|
mode: "balanced",
|
|
399
400
|
localDefault: defaultLocalModel,
|
|
400
401
|
trivialPromptMaxChars: 280,
|
|
401
|
-
frontierPromptMinChars: 2000
|
|
402
|
+
frontierPromptMinChars: 2000,
|
|
403
|
+
frontierOnly: false
|
|
402
404
|
}),
|
|
403
405
|
local: z.object({
|
|
404
406
|
runtimes: z.array(LocalRuntimeSchema).min(1).default([
|
|
@@ -949,6 +951,7 @@ var RouteEventSchema = EventBaseSchema.extend({
|
|
|
949
951
|
agent: z3.string().min(1).optional(),
|
|
950
952
|
success: z3.boolean().optional(),
|
|
951
953
|
batchID: z3.string().min(1).optional(),
|
|
954
|
+
taskID: z3.string().min(1).optional(),
|
|
952
955
|
failureReason: z3.string().min(1).optional(),
|
|
953
956
|
failureStage: z3.string().min(1).optional()
|
|
954
957
|
});
|
|
@@ -1383,6 +1386,60 @@ function renderDoctor(input) {
|
|
|
1383
1386
|
`);
|
|
1384
1387
|
}
|
|
1385
1388
|
|
|
1389
|
+
// src/commands/local.ts
|
|
1390
|
+
function enabledRuntimesSummary(config) {
|
|
1391
|
+
const enabled = config.local.runtimes.filter((runtime) => runtime.enabled);
|
|
1392
|
+
if (enabled.length === 0) {
|
|
1393
|
+
return "ninguno";
|
|
1394
|
+
}
|
|
1395
|
+
return enabled.map((runtime) => {
|
|
1396
|
+
const model = `${runtime.defaultModel.providerID}/${runtime.defaultModel.modelID}`;
|
|
1397
|
+
const remote = runtime.baseURL !== undefined && !runtime.baseURL.includes("localhost") && !runtime.baseURL.includes("127.0.0.1") ? ` @ ${runtime.baseURL}` : "";
|
|
1398
|
+
return `${runtime.id} (${model})${remote}`;
|
|
1399
|
+
}).join(", ");
|
|
1400
|
+
}
|
|
1401
|
+
function showLocal(config) {
|
|
1402
|
+
const mode = config.router.frontierOnly ? "solo frontier (frontierOnly)" : "local-first";
|
|
1403
|
+
const lines = [
|
|
1404
|
+
"openteam local:",
|
|
1405
|
+
` modo: ${mode}`,
|
|
1406
|
+
` frontierOnly: ${config.router.frontierOnly}`,
|
|
1407
|
+
` privacidad: ${config.privacyMode}`,
|
|
1408
|
+
` runtimes: ${enabledRuntimesSummary(config)}`
|
|
1409
|
+
];
|
|
1410
|
+
return { message: lines.join(`
|
|
1411
|
+
`) };
|
|
1412
|
+
}
|
|
1413
|
+
function setFrontierOnly(config) {
|
|
1414
|
+
if (config.router.frontierOnly) {
|
|
1415
|
+
return { message: "Sin cambios: ya estás en modo solo frontier." };
|
|
1416
|
+
}
|
|
1417
|
+
const flipsPrivacy = config.privacyMode === "forceLocalOnSensitive";
|
|
1418
|
+
const next = {
|
|
1419
|
+
...config,
|
|
1420
|
+
router: { ...config.router, frontierOnly: true },
|
|
1421
|
+
privacyMode: flipsPrivacy ? "consentBeforeFrontier" : config.privacyMode
|
|
1422
|
+
};
|
|
1423
|
+
const privacyNote = flipsPrivacy ? " Privacidad ajustada a 'consentBeforeFrontier' (forceLocalOnSensitive requiere un runtime local)." : "";
|
|
1424
|
+
return {
|
|
1425
|
+
config: next,
|
|
1426
|
+
message: `Modo solo frontier activado (frontierOnly=true).${privacyNote}`
|
|
1427
|
+
};
|
|
1428
|
+
}
|
|
1429
|
+
function setLocalFirst(config) {
|
|
1430
|
+
if (!config.router.frontierOnly) {
|
|
1431
|
+
return { message: "Sin cambios: el routing local-first ya está activo." };
|
|
1432
|
+
}
|
|
1433
|
+
const next = {
|
|
1434
|
+
...config,
|
|
1435
|
+
router: { ...config.router, frontierOnly: false }
|
|
1436
|
+
};
|
|
1437
|
+
return {
|
|
1438
|
+
config: next,
|
|
1439
|
+
message: "Routing local-first reactivado (frontierOnly=false). Asegúrate de tener un runtime local accesible."
|
|
1440
|
+
};
|
|
1441
|
+
}
|
|
1442
|
+
|
|
1386
1443
|
// src/commands/report.ts
|
|
1387
1444
|
var TIERS = [
|
|
1388
1445
|
"trivial",
|
|
@@ -1500,6 +1557,9 @@ var HELP = [
|
|
|
1500
1557
|
" openteam baseline show Muestra el baseline efectivo",
|
|
1501
1558
|
" openteam baseline set <p/model> Fija el baseline (modo pinned)",
|
|
1502
1559
|
" openteam baseline auto Baseline cheapest-capable (modo auto)",
|
|
1560
|
+
" openteam local status Muestra el modo de routing (local-first / solo frontier)",
|
|
1561
|
+
" openteam local off Usa solo modelos frontier (sin runtime local)",
|
|
1562
|
+
" openteam local on Reactiva el routing local-first",
|
|
1503
1563
|
" openteam doctor Diagnóstico de runtimes y config",
|
|
1504
1564
|
" openteam agents Lista los agentes y el LLM (local/frontier) de cada uno",
|
|
1505
1565
|
" openteam console Lanza la Console web multi-sesión (Ctrl+C para parar; --open abre el navegador)",
|
|
@@ -1582,6 +1642,26 @@ async function runBaseline(positionals, deps, configPath) {
|
|
|
1582
1642
|
${HELP}`
|
|
1583
1643
|
};
|
|
1584
1644
|
}
|
|
1645
|
+
async function runLocal(positionals, deps, configPath) {
|
|
1646
|
+
const sub = positionals[1] ?? "status";
|
|
1647
|
+
if (sub !== "status" && sub !== "off" && sub !== "on") {
|
|
1648
|
+
return {
|
|
1649
|
+
exitCode: 1,
|
|
1650
|
+
stdout: `Subcomando de local desconocido: ${sub}
|
|
1651
|
+
|
|
1652
|
+
${HELP}`
|
|
1653
|
+
};
|
|
1654
|
+
}
|
|
1655
|
+
const config = await deps.loadConfig(configPath);
|
|
1656
|
+
if (sub === "status") {
|
|
1657
|
+
return { exitCode: 0, stdout: showLocal(config).message };
|
|
1658
|
+
}
|
|
1659
|
+
const outcome = sub === "off" ? setFrontierOnly(config) : setLocalFirst(config);
|
|
1660
|
+
if (outcome.config !== undefined) {
|
|
1661
|
+
await deps.saveConfig(outcome.config, configPath);
|
|
1662
|
+
}
|
|
1663
|
+
return { exitCode: 0, stdout: outcome.message };
|
|
1664
|
+
}
|
|
1585
1665
|
async function runYolo(positionals, deps, opencodeConfigPath) {
|
|
1586
1666
|
const sub = positionals[1] ?? "status";
|
|
1587
1667
|
if (sub !== "status" && sub !== "on" && sub !== "off") {
|
|
@@ -1666,6 +1746,9 @@ async function runCli(argv, deps) {
|
|
|
1666
1746
|
if (command === "baseline") {
|
|
1667
1747
|
return await runBaseline(parsed.positionals, deps, configPath);
|
|
1668
1748
|
}
|
|
1749
|
+
if (command === "local") {
|
|
1750
|
+
return await runLocal(parsed.positionals, deps, configPath);
|
|
1751
|
+
}
|
|
1669
1752
|
if (command === "yolo") {
|
|
1670
1753
|
return await runYolo(parsed.positionals, deps, opencodeConfigPath);
|
|
1671
1754
|
}
|
|
@@ -2121,6 +2204,9 @@ function chooseModel(input) {
|
|
|
2121
2204
|
if (override === "alwaysFrontier") {
|
|
2122
2205
|
return finalizeDecision(input, tier, frontier, budgetAction, decision(frontier.model, "frontier", ["explicit-always-frontier"], []));
|
|
2123
2206
|
}
|
|
2207
|
+
if (input.config.router.frontierOnly) {
|
|
2208
|
+
return finalizeDecision(input, tier, frontier, budgetAction, decision(frontier.model, "frontier", ["router-frontier-only"], []));
|
|
2209
|
+
}
|
|
2124
2210
|
const shortEnoughForLocal = input.task.promptChars <= input.config.router.trivialPromptMaxChars;
|
|
2125
2211
|
const largeEnoughForFrontier = input.task.promptChars >= input.config.router.frontierPromptMinChars;
|
|
2126
2212
|
if (!input.task.hasCode && shortEnoughForLocal && !largeEnoughForFrontier) {
|
|
@@ -18,6 +18,8 @@ export type RoleTaskInput = {
|
|
|
18
18
|
title?: string;
|
|
19
19
|
systemPrompt?: string;
|
|
20
20
|
directory?: string;
|
|
21
|
+
/** Correlación opcional con una tarea del loop SDD/backlog (Fase D). */
|
|
22
|
+
taskID?: string;
|
|
21
23
|
};
|
|
22
24
|
export type CoordinatorDeps = {
|
|
23
25
|
client: OpencodeSessionClient;
|
|
@@ -31,6 +33,7 @@ export type CorrelatedCostRecord = CostRecord & {
|
|
|
31
33
|
agent: string;
|
|
32
34
|
success: boolean;
|
|
33
35
|
batchID?: string;
|
|
36
|
+
taskID?: string;
|
|
34
37
|
failureReason?: string;
|
|
35
38
|
failureStage?: SubsessionResult["failureStage"];
|
|
36
39
|
};
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"coordinator.d.ts","sourceRoot":"","sources":["../../src/orchestrator/coordinator.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,wBAAwB,CAAC;AAE1D,OAAO,KAAK,EAEV,sBAAsB,EACvB,MAAM,uBAAuB,CAAC;AAC/B,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,kBAAkB,CAAC;AAEvD,OAAO,KAAK,EACV,cAAc,EACd,eAAe,EAEf,WAAW,EACZ,MAAM,iBAAiB,CAAC;AAEzB,OAAO,EAA0B,KAAK,SAAS,EAAE,MAAM,uBAAuB,CAAC;AAC/E,OAAO,EAEL,KAAK,YAAY,EAEjB,KAAK,UAAU,EAChB,MAAM,qBAAqB,CAAC;AAE7B,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,oBAAoB,CAAC;AAQrD,OAAO,EACL,KAAK,qBAAqB,EAG1B,KAAK,gBAAgB,EACtB,MAAM,eAAe,CAAC;AAEvB,MAAM,MAAM,aAAa,GAAG;IAC1B,MAAM,EAAE,MAAM,CAAC;IACf,IAAI,EAAE,WAAW,CAAC;IAClB,MAAM,EAAE,MAAM,CAAC;IACf,QAAQ,CAAC,EAAE,sBAAsB,EAAE,CAAC;IACpC,eAAe,CAAC,EAAE,cAAc,EAAE,CAAC;IACnC,WAAW,CAAC,EAAE,WAAW,CAAC;IAC1B,eAAe,CAAC,EAAE,MAAM,CAAC;IACzB,MAAM,EAAE,cAAc,CAAC;IACvB,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,YAAY,CAAC,EAAE,MAAM,CAAC;IACtB,SAAS,CAAC,EAAE,MAAM,CAAC;
|
|
1
|
+
{"version":3,"file":"coordinator.d.ts","sourceRoot":"","sources":["../../src/orchestrator/coordinator.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,wBAAwB,CAAC;AAE1D,OAAO,KAAK,EAEV,sBAAsB,EACvB,MAAM,uBAAuB,CAAC;AAC/B,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,kBAAkB,CAAC;AAEvD,OAAO,KAAK,EACV,cAAc,EACd,eAAe,EAEf,WAAW,EACZ,MAAM,iBAAiB,CAAC;AAEzB,OAAO,EAA0B,KAAK,SAAS,EAAE,MAAM,uBAAuB,CAAC;AAC/E,OAAO,EAEL,KAAK,YAAY,EAEjB,KAAK,UAAU,EAChB,MAAM,qBAAqB,CAAC;AAE7B,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,oBAAoB,CAAC;AAQrD,OAAO,EACL,KAAK,qBAAqB,EAG1B,KAAK,gBAAgB,EACtB,MAAM,eAAe,CAAC;AAEvB,MAAM,MAAM,aAAa,GAAG;IAC1B,MAAM,EAAE,MAAM,CAAC;IACf,IAAI,EAAE,WAAW,CAAC;IAClB,MAAM,EAAE,MAAM,CAAC;IACf,QAAQ,CAAC,EAAE,sBAAsB,EAAE,CAAC;IACpC,eAAe,CAAC,EAAE,cAAc,EAAE,CAAC;IACnC,WAAW,CAAC,EAAE,WAAW,CAAC;IAC1B,eAAe,CAAC,EAAE,MAAM,CAAC;IACzB,MAAM,EAAE,cAAc,CAAC;IACvB,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,YAAY,CAAC,EAAE,MAAM,CAAC;IACtB,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,wEAAwE;IACxE,MAAM,CAAC,EAAE,MAAM,CAAC;CACjB,CAAC;AAEF,MAAM,MAAM,eAAe,GAAG;IAC5B,MAAM,EAAE,qBAAqB,CAAC;IAC9B,IAAI,EAAE,SAAS,CAAC;IAChB,GAAG,EAAE,MAAM,MAAM,CAAC;IAClB,aAAa,EAAE,MAAM,MAAM,CAAC;IAC5B,SAAS,CAAC,EAAE,MAAM,CAAC;CACpB,CAAC;AAEF,MAAM,MAAM,oBAAoB,GAAG,UAAU,GAAG;IAC9C,UAAU,EAAE,MAAM,CAAC;IACnB,KAAK,EAAE,MAAM,CAAC;IACd,OAAO,EAAE,OAAO,CAAC;IACjB,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,aAAa,CAAC,EAAE,MAAM,CAAC;IACvB,YAAY,CAAC,EAAE,gBAAgB,CAAC,cAAc,CAAC,CAAC;CACjD,CAAC;AAEF,MAAM,MAAM,cAAc,GAAG;IAC3B,QAAQ,EAAE,eAAe,CAAC;IAC1B,UAAU,EAAE,gBAAgB,CAAC;IAC7B,MAAM,EAAE,oBAAoB,CAAC;CAC9B,CAAC;AAiLF;;;;GAIG;AACH,wBAAgB,gCAAgC,CAC9C,MAAM,EAAE,oBAAoB,GAC3B,UAAU,CAyBZ;AAED;;;GAGG;AACH,wBAAgB,iBAAiB,CAC/B,MAAM,EAAE,SAAS,aAAa,EAAE,EAChC,OAAO,EAAE,MAAM,EACf,WAAW,EAAE,SAAS,MAAM,EAAE,EAC9B,EAAE,EAAE,MAAM,GACT,YAAY,GAAG,SAAS,CAkB1B;AA4DD,wBAAsB,WAAW,CAC/B,KAAK,EAAE,aAAa,EACpB,IAAI,EAAE,eAAe,GACpB,OAAO,CAAC,cAAc,CAAC,CAIzB;AAED,wBAAsB,YAAY,CAChC,MAAM,EAAE,SAAS,aAAa,EAAE,EAChC,IAAI,EAAE,eAAe,GACpB,OAAO,CAAC,cAAc,EAAE,CAAC,CAuB3B"}
|
|
@@ -0,0 +1,47 @@
|
|
|
1
|
+
import type { StorageProvider } from "../storage/provider";
|
|
2
|
+
/**
|
|
3
|
+
* Ledger de progreso durable del orquestador.
|
|
4
|
+
*
|
|
5
|
+
* Registra, una línea por tarea, el estado de las tareas ya procesadas para que
|
|
6
|
+
* un flujo largo (loop SDD, `openteam loop`) pueda **reanudarse** tras una
|
|
7
|
+
* compactación de contexto o un reinicio sin repetir trabajo hecho. Vive detrás
|
|
8
|
+
* del `StorageProvider` (misma fuente de verdad que roster/decisions/telemetría)
|
|
9
|
+
* y es **privacy-safe**: solo `taskID`, estado y un `detail` ya redactado; nunca
|
|
10
|
+
* prompts ni datos sensibles.
|
|
11
|
+
*
|
|
12
|
+
* Formato de línea (Markdown, inspirado en obra/superpowers):
|
|
13
|
+
* `- <taskID>: complete (<detail>)`
|
|
14
|
+
* `- <taskID>: failed (<detail>)`
|
|
15
|
+
*
|
|
16
|
+
* Las funciones de parse/format son puras; el I/O se hace vía un
|
|
17
|
+
* `StorageProvider` inyectado.
|
|
18
|
+
*/
|
|
19
|
+
/** Ruta por defecto del ledger (estado derivado del equipo). */
|
|
20
|
+
export declare const DEFAULT_LEDGER_PATH = ".opencode/openteam/progress.md";
|
|
21
|
+
export type LedgerStatus = "complete" | "failed";
|
|
22
|
+
export type LedgerEntry = {
|
|
23
|
+
taskID: string;
|
|
24
|
+
status: LedgerStatus;
|
|
25
|
+
/** Metadatos redactados (modelo, tier, resultado de review). Nunca prompts. */
|
|
26
|
+
detail?: string;
|
|
27
|
+
};
|
|
28
|
+
/** Serializa una entrada a su línea Markdown canónica. Puro. */
|
|
29
|
+
export declare function formatLedgerEntry(entry: LedgerEntry): string;
|
|
30
|
+
/** Parsea una línea; `undefined` si no es una entrada de ledger válida. Puro. */
|
|
31
|
+
export declare function parseLedgerLine(line: string): LedgerEntry | undefined;
|
|
32
|
+
/** Parsea todo el ledger, saltando cabeceras/blancos/líneas inválidas. Puro. */
|
|
33
|
+
export declare function parseLedger(text: string): LedgerEntry[];
|
|
34
|
+
/**
|
|
35
|
+
* Estado más reciente por `taskID` (las líneas posteriores sobrescriben a las
|
|
36
|
+
* anteriores: un `failed` seguido de `complete` cuenta como `complete`). Puro.
|
|
37
|
+
*/
|
|
38
|
+
export declare function latestStatuses(entries: readonly LedgerEntry[]): Map<string, LedgerStatus>;
|
|
39
|
+
/** `true` si el último estado registrado para la tarea es `complete`. Puro. */
|
|
40
|
+
export declare function isTaskComplete(entries: readonly LedgerEntry[], taskID: string): boolean;
|
|
41
|
+
/** Conjunto de `taskID` cuyo estado más reciente es `complete`. Puro. */
|
|
42
|
+
export declare function completedTaskIDs(entries: readonly LedgerEntry[]): Set<string>;
|
|
43
|
+
/** Lee y parsea el ledger; `[]` si el fichero no existe. */
|
|
44
|
+
export declare function readLedger(storage: StorageProvider, path?: string): Promise<LedgerEntry[]>;
|
|
45
|
+
/** Añade una entrada al ledger (crea el fichero si no existe). */
|
|
46
|
+
export declare function appendLedgerEntry(storage: StorageProvider, entry: LedgerEntry, path?: string): Promise<void>;
|
|
47
|
+
//# sourceMappingURL=ledger.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"ledger.d.ts","sourceRoot":"","sources":["../../src/orchestrator/ledger.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,eAAe,EAAE,MAAM,qBAAqB,CAAC;AAE3D;;;;;;;;;;;;;;;;GAgBG;AAEH,gEAAgE;AAChE,eAAO,MAAM,mBAAmB,mCAAmC,CAAC;AAEpE,MAAM,MAAM,YAAY,GAAG,UAAU,GAAG,QAAQ,CAAC;AAEjD,MAAM,MAAM,WAAW,GAAG;IACxB,MAAM,EAAE,MAAM,CAAC;IACf,MAAM,EAAE,YAAY,CAAC;IACrB,+EAA+E;IAC/E,MAAM,CAAC,EAAE,MAAM,CAAC;CACjB,CAAC;AAIF,gEAAgE;AAChE,wBAAgB,iBAAiB,CAAC,KAAK,EAAE,WAAW,GAAG,MAAM,CAM5D;AAED,iFAAiF;AACjF,wBAAgB,eAAe,CAAC,IAAI,EAAE,MAAM,GAAG,WAAW,GAAG,SAAS,CAgBrE;AAED,gFAAgF;AAChF,wBAAgB,WAAW,CAAC,IAAI,EAAE,MAAM,GAAG,WAAW,EAAE,CASvD;AAED;;;GAGG;AACH,wBAAgB,cAAc,CAC5B,OAAO,EAAE,SAAS,WAAW,EAAE,GAC9B,GAAG,CAAC,MAAM,EAAE,YAAY,CAAC,CAM3B;AAED,+EAA+E;AAC/E,wBAAgB,cAAc,CAC5B,OAAO,EAAE,SAAS,WAAW,EAAE,EAC/B,MAAM,EAAE,MAAM,GACb,OAAO,CAET;AAED,yEAAyE;AACzE,wBAAgB,gBAAgB,CAAC,OAAO,EAAE,SAAS,WAAW,EAAE,GAAG,GAAG,CAAC,MAAM,CAAC,CAQ7E;AAED,4DAA4D;AAC5D,wBAAsB,UAAU,CAC9B,OAAO,EAAE,eAAe,EACxB,IAAI,GAAE,MAA4B,GACjC,OAAO,CAAC,WAAW,EAAE,CAAC,CAGxB;AAED,kEAAkE;AAClE,wBAAsB,iBAAiB,CACrC,OAAO,EAAE,eAAe,EACxB,KAAK,EAAE,WAAW,EAClB,IAAI,GAAE,MAA4B,GACjC,OAAO,CAAC,IAAI,CAAC,CAEf"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"permissions.d.ts","sourceRoot":"","sources":["../../src/orchestrator/permissions.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,uBAAuB,CAAC;AAE5D,MAAM,MAAM,cAAc,GACtB,MAAM,GACN,MAAM,GACN,eAAe,GACf,aAAa,GACb,SAAS,GACT,OAAO,CAAC;AAEZ,MAAM,MAAM,iBAAiB,GAAG;IAC9B,MAAM,EAAE,MAAM,CAAC;IACf,OAAO,EAAE,cAAc,EAAE,CAAC;CAC3B,CAAC;AAEF,eAAO,MAAM,gBAAgB,EAAE,MAAM,CAAC,MAAM,EAAE,cAAc,EAAE,
|
|
1
|
+
{"version":3,"file":"permissions.d.ts","sourceRoot":"","sources":["../../src/orchestrator/permissions.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,uBAAuB,CAAC;AAE5D,MAAM,MAAM,cAAc,GACtB,MAAM,GACN,MAAM,GACN,eAAe,GACf,aAAa,GACb,SAAS,GACT,OAAO,CAAC;AAEZ,MAAM,MAAM,iBAAiB,GAAG;IAC9B,MAAM,EAAE,MAAM,CAAC;IACf,OAAO,EAAE,cAAc,EAAE,CAAC;CAC3B,CAAC;AAEF,eAAO,MAAM,gBAAgB,EAAE,MAAM,CAAC,MAAM,EAAE,cAAc,EAAE,CAQ7D,CAAC;AASF,wBAAgB,aAAa,CAAC,MAAM,EAAE,MAAM,EAAE,IAAI,EAAE,cAAc,GAAG,OAAO,CAE3E;AAED,wBAAgB,yBAAyB,CACvC,QAAQ,EAAE,cAAc,EACxB,KAAK,EAAE,cAAc,EAAE,GACtB,cAAc,CAKhB;AAED,wBAAgB,aAAa,CAC3B,MAAM,EAAE,MAAM,EACd,IAAI,EAAE,cAAc,GACnB;IAAE,OAAO,EAAE,OAAO,CAAC;IAAC,MAAM,CAAC,EAAE,MAAM,CAAA;CAAE,CASvC"}
|
|
@@ -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,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,oBAAoB,EAAE,cAAc,EAAE,CAAC;IACvC,uBAAuB,EAAE,KAAK,CAAC,cAAc,GAAG,MAAM,CAAC,CAAC;IACxD,UAAU,EAAE,OAAO,CAAC;CACrB,CAAC;AAeF,eAAO,MAAM,sBAAsB;;;;;;;;;;;;;;;;;;;;;iBAYjC,CAAC;AAGH,eAAO,MAAM,WAAW,EAAE,MAAM,CAAC,MAAM,EAAE,gBAAgB,
|
|
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,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,oBAAoB,EAAE,cAAc,EAAE,CAAC;IACvC,uBAAuB,EAAE,KAAK,CAAC,cAAc,GAAG,MAAM,CAAC,CAAC;IACxD,UAAU,EAAE,OAAO,CAAC;CACrB,CAAC;AAeF,eAAO,MAAM,sBAAsB;;;;;;;;;;;;;;;;;;;;;iBAYjC,CAAC;AAGH,eAAO,MAAM,WAAW,EAAE,MAAM,CAAC,MAAM,EAAE,gBAAgB,CAgFxD,CAAC;AAEF,wBAAgB,cAAc,CAAC,MAAM,EAAE,MAAM,GAAG,gBAAgB,GAAG,SAAS,CAE3E;AAED,wBAAgB,iBAAiB,CAC/B,IAAI,EAAE,gBAAgB,EACtB,IAAI,EAAE,WAAW,EACjB,IAAI,CAAC,EAAE,cAAc,GACpB,qBAAqB,CAevB"}
|
|
@@ -0,0 +1,90 @@
|
|
|
1
|
+
import type { OpenTeamConfig } from "../config/schema";
|
|
2
|
+
import type { TaskSignals } from "../router/types";
|
|
3
|
+
import type { StorageProvider } from "../storage/provider";
|
|
4
|
+
import { type CoordinatorDeps, type RoleTaskResult } from "./coordinator";
|
|
5
|
+
/**
|
|
6
|
+
* Loop de **subagent-driven-development** (SDD), adaptado de obra/superpowers al
|
|
7
|
+
* boundary de openteam. Por cada tarea:
|
|
8
|
+
*
|
|
9
|
+
* 1. Reanuda desde el ledger: si la tarea ya está `complete`, la salta.
|
|
10
|
+
* 2. Persiste un **task brief** como fichero (higiene de contexto: el
|
|
11
|
+
* implementer recibe solo su tarea, no el historial acumulado).
|
|
12
|
+
* 3. Despacha el **implementer** con el brief.
|
|
13
|
+
* 4. Despacha el **reviewer** (rol con alto code-quality) para revisar el
|
|
14
|
+
* cambio; la generación del diff vive en el propio agente reviewer.
|
|
15
|
+
* 5. Si el veredicto pide arreglos, despacha **UN** fix subagent con TODOS los
|
|
16
|
+
* findings (no uno por finding), con un número de rondas acotado.
|
|
17
|
+
* 6. Escribe el resultado en el ledger durable.
|
|
18
|
+
*
|
|
19
|
+
* Es una capa de orquestación **inyectable y determinista**: cliente opencode,
|
|
20
|
+
* storage, reloj, generadores de id y el intérprete de review se inyectan, así
|
|
21
|
+
* que se prueba con fakes/memory provider. No hace I/O de git ni shell: los
|
|
22
|
+
* artefactos persistidos son metadatos **redactados** (nunca prompts ni la
|
|
23
|
+
* respuesta cruda del modelo).
|
|
24
|
+
*/
|
|
25
|
+
/** Directorio de artefactos del loop SDD (estado derivado). */
|
|
26
|
+
export declare const DEFAULT_SDD_WORKSPACE_DIR = ".opencode/openteam/sdd";
|
|
27
|
+
/** Rol reviewer por defecto. */
|
|
28
|
+
export declare const DEFAULT_REVIEWER_ROLE_ID = "reviewer";
|
|
29
|
+
export type SddTask = {
|
|
30
|
+
/** Id estable y sin `:` (kebab-case) usado para ledger y artefactos. */
|
|
31
|
+
id: string;
|
|
32
|
+
/** Rol que implementa (y arregla) la tarea. */
|
|
33
|
+
implementerRoleID: string;
|
|
34
|
+
/** Título humano corto. */
|
|
35
|
+
title: string;
|
|
36
|
+
/** Brief accionable de la tarea (cuerpo del prompt del implementer). */
|
|
37
|
+
brief: string;
|
|
38
|
+
/** Señales de routing para la tarea. */
|
|
39
|
+
task: TaskSignals;
|
|
40
|
+
/** Rol reviewer específico (sobreescribe `deps.reviewerRoleID`). */
|
|
41
|
+
reviewerRoleID?: string;
|
|
42
|
+
};
|
|
43
|
+
export type ReviewVerdict = {
|
|
44
|
+
needsFix: boolean;
|
|
45
|
+
/** Resumen redactado de findings para el fix dispatch. */
|
|
46
|
+
findings?: string;
|
|
47
|
+
};
|
|
48
|
+
export type SddDeps = CoordinatorDeps & {
|
|
49
|
+
storage: StorageProvider;
|
|
50
|
+
config: OpenTeamConfig;
|
|
51
|
+
workspaceDir?: string;
|
|
52
|
+
ledgerPath?: string;
|
|
53
|
+
reviewerRoleID?: string;
|
|
54
|
+
interpretReview?: (review: RoleTaskResult) => ReviewVerdict;
|
|
55
|
+
/** Máximo de rondas de fix+re-review (def: 1). */
|
|
56
|
+
maxFixRounds?: number;
|
|
57
|
+
parentSessionID?: string;
|
|
58
|
+
directory?: string;
|
|
59
|
+
};
|
|
60
|
+
export type SddTaskStatus = "complete" | "failed" | "skipped";
|
|
61
|
+
export type SddTaskOutcome = {
|
|
62
|
+
taskID: string;
|
|
63
|
+
status: SddTaskStatus;
|
|
64
|
+
implement?: RoleTaskResult;
|
|
65
|
+
review?: RoleTaskResult;
|
|
66
|
+
fixes: RoleTaskResult[];
|
|
67
|
+
};
|
|
68
|
+
export type SddPlanResult = {
|
|
69
|
+
outcomes: SddTaskOutcome[];
|
|
70
|
+
completed: string[];
|
|
71
|
+
failed: string[];
|
|
72
|
+
skipped: string[];
|
|
73
|
+
};
|
|
74
|
+
/** Extrae texto de una respuesta opaca del modelo (best-effort). Puro. */
|
|
75
|
+
export declare function extractResponseText(response: unknown): string;
|
|
76
|
+
/**
|
|
77
|
+
* Veredicto por defecto: escanea el texto de la review en busca de marcadores de
|
|
78
|
+
* severidad. Conservador y determinista; los llamadores pueden inyectar su
|
|
79
|
+
* propio intérprete vía `deps.interpretReview`.
|
|
80
|
+
*/
|
|
81
|
+
export declare function defaultReviewVerdict(review: RoleTaskResult): ReviewVerdict;
|
|
82
|
+
/** Ejecuta una única tarea del loop SDD (con reanudación desde el ledger). */
|
|
83
|
+
export declare function runSddTask(task: SddTask, deps: SddDeps): Promise<SddTaskOutcome>;
|
|
84
|
+
/**
|
|
85
|
+
* Ejecuta un plan SDD **en orden** (las tareas son secuenciales por diseño; la
|
|
86
|
+
* paralelización de tareas independientes es otra capa). Reanuda saltando las ya
|
|
87
|
+
* completas y resume el resultado por estado.
|
|
88
|
+
*/
|
|
89
|
+
export declare function runSddPlan(tasks: readonly SddTask[], deps: SddDeps): Promise<SddPlanResult>;
|
|
90
|
+
//# sourceMappingURL=sdd.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"sdd.d.ts","sourceRoot":"","sources":["../../src/orchestrator/sdd.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,kBAAkB,CAAC;AACvD,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,iBAAiB,CAAC;AAEnD,OAAO,KAAK,EAAE,eAAe,EAAE,MAAM,qBAAqB,CAAC;AAC3D,OAAO,EACL,KAAK,eAAe,EAEpB,KAAK,cAAc,EAEpB,MAAM,eAAe,CAAC;AASvB;;;;;;;;;;;;;;;;;;;GAmBG;AAEH,+DAA+D;AAC/D,eAAO,MAAM,yBAAyB,2BAA2B,CAAC;AAElE,gCAAgC;AAChC,eAAO,MAAM,wBAAwB,aAAa,CAAC;AAEnD,MAAM,MAAM,OAAO,GAAG;IACpB,wEAAwE;IACxE,EAAE,EAAE,MAAM,CAAC;IACX,+CAA+C;IAC/C,iBAAiB,EAAE,MAAM,CAAC;IAC1B,2BAA2B;IAC3B,KAAK,EAAE,MAAM,CAAC;IACd,wEAAwE;IACxE,KAAK,EAAE,MAAM,CAAC;IACd,wCAAwC;IACxC,IAAI,EAAE,WAAW,CAAC;IAClB,oEAAoE;IACpE,cAAc,CAAC,EAAE,MAAM,CAAC;CACzB,CAAC;AAEF,MAAM,MAAM,aAAa,GAAG;IAC1B,QAAQ,EAAE,OAAO,CAAC;IAClB,0DAA0D;IAC1D,QAAQ,CAAC,EAAE,MAAM,CAAC;CACnB,CAAC;AAEF,MAAM,MAAM,OAAO,GAAG,eAAe,GAAG;IACtC,OAAO,EAAE,eAAe,CAAC;IACzB,MAAM,EAAE,cAAc,CAAC;IACvB,YAAY,CAAC,EAAE,MAAM,CAAC;IACtB,UAAU,CAAC,EAAE,MAAM,CAAC;IACpB,cAAc,CAAC,EAAE,MAAM,CAAC;IACxB,eAAe,CAAC,EAAE,CAAC,MAAM,EAAE,cAAc,KAAK,aAAa,CAAC;IAC5D,kDAAkD;IAClD,YAAY,CAAC,EAAE,MAAM,CAAC;IACtB,eAAe,CAAC,EAAE,MAAM,CAAC;IACzB,SAAS,CAAC,EAAE,MAAM,CAAC;CACpB,CAAC;AAEF,MAAM,MAAM,aAAa,GAAG,UAAU,GAAG,QAAQ,GAAG,SAAS,CAAC;AAE9D,MAAM,MAAM,cAAc,GAAG;IAC3B,MAAM,EAAE,MAAM,CAAC;IACf,MAAM,EAAE,aAAa,CAAC;IACtB,SAAS,CAAC,EAAE,cAAc,CAAC;IAC3B,MAAM,CAAC,EAAE,cAAc,CAAC;IACxB,KAAK,EAAE,cAAc,EAAE,CAAC;CACzB,CAAC;AAEF,MAAM,MAAM,aAAa,GAAG;IAC1B,QAAQ,EAAE,cAAc,EAAE,CAAC;IAC3B,SAAS,EAAE,MAAM,EAAE,CAAC;IACpB,MAAM,EAAE,MAAM,EAAE,CAAC;IACjB,OAAO,EAAE,MAAM,EAAE,CAAC;CACnB,CAAC;AA2FF,0EAA0E;AAC1E,wBAAgB,mBAAmB,CAAC,QAAQ,EAAE,OAAO,GAAG,MAAM,CAuB7D;AAKD;;;;GAIG;AACH,wBAAgB,oBAAoB,CAAC,MAAM,EAAE,cAAc,GAAG,aAAa,CAO1E;AAuBD,8EAA8E;AAC9E,wBAAsB,UAAU,CAC9B,IAAI,EAAE,OAAO,EACb,IAAI,EAAE,OAAO,GACZ,OAAO,CAAC,cAAc,CAAC,CAyHzB;AAED;;;;GAIG;AACH,wBAAsB,UAAU,CAC9B,KAAK,EAAE,SAAS,OAAO,EAAE,EACzB,IAAI,EAAE,OAAO,GACZ,OAAO,CAAC,aAAa,CAAC,CAoBxB"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"chooseModel.d.ts","sourceRoot":"","sources":["../../src/router/chooseModel.ts"],"names":[],"mappings":"AAQA,OAAO,KAAK,EAIV,eAAe,EACf,YAAY,EACb,MAAM,SAAS,CAAC;AAoXjB,wBAAgB,WAAW,CAAC,KAAK,EAAE,YAAY,GAAG,eAAe,
|
|
1
|
+
{"version":3,"file":"chooseModel.d.ts","sourceRoot":"","sources":["../../src/router/chooseModel.ts"],"names":[],"mappings":"AAQA,OAAO,KAAK,EAIV,eAAe,EACf,YAAY,EACb,MAAM,SAAS,CAAC;AAoXjB,wBAAgB,WAAW,CAAC,KAAK,EAAE,YAAY,GAAG,eAAe,CA8HhE"}
|
|
@@ -42,6 +42,7 @@ export declare const RouteEventSchema: z.ZodObject<{
|
|
|
42
42
|
agent: z.ZodOptional<z.ZodString>;
|
|
43
43
|
success: z.ZodOptional<z.ZodBoolean>;
|
|
44
44
|
batchID: z.ZodOptional<z.ZodString>;
|
|
45
|
+
taskID: z.ZodOptional<z.ZodString>;
|
|
45
46
|
failureReason: z.ZodOptional<z.ZodString>;
|
|
46
47
|
failureStage: z.ZodOptional<z.ZodString>;
|
|
47
48
|
}, z.core.$strip>;
|
|
@@ -162,6 +163,7 @@ export declare const OpenTeamEventSchema: z.ZodDiscriminatedUnion<[z.ZodObject<{
|
|
|
162
163
|
agent: z.ZodOptional<z.ZodString>;
|
|
163
164
|
success: z.ZodOptional<z.ZodBoolean>;
|
|
164
165
|
batchID: z.ZodOptional<z.ZodString>;
|
|
166
|
+
taskID: z.ZodOptional<z.ZodString>;
|
|
165
167
|
failureReason: z.ZodOptional<z.ZodString>;
|
|
166
168
|
failureStage: z.ZodOptional<z.ZodString>;
|
|
167
169
|
}, z.core.$strip>, z.ZodObject<{
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"events.d.ts","sourceRoot":"","sources":["../../src/telemetry/events.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAC;AAKxB;;;;;;;;GAQG;AACH,eAAO,MAAM,oBAAoB,EAAG,CAAU,CAAC;AAW/C,yEAAyE;AACzE,eAAO,MAAM,gBAAgB
|
|
1
|
+
{"version":3,"file":"events.d.ts","sourceRoot":"","sources":["../../src/telemetry/events.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAC;AAKxB;;;;;;;;GAQG;AACH,eAAO,MAAM,oBAAoB,EAAG,CAAU,CAAC;AAW/C,yEAAyE;AACzE,eAAO,MAAM,gBAAgB;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;iBAqB3B,CAAC;AAEH,+EAA+E;AAC/E,eAAO,MAAM,kBAAkB;;;;;;;;;;;;;;;;;iBAc7B,CAAC;AAEH,sEAAsE;AACtE,eAAO,MAAM,mBAAmB;;;;;;;;;;;iBAS9B,CAAC;AAEH,iEAAiE;AACjE,eAAO,MAAM,kBAAkB;;;;;;;;;iBAM7B,CAAC;AAEH,yEAAyE;AACzE,eAAO,MAAM,mBAAmB;;;;;;;;iBAK9B,CAAC;AAEH,0DAA0D;AAC1D,eAAO,MAAM,mBAAmB;;;;;;;;;;;;;iBAK9B,CAAC;AAEH;;;;;;GAMG;AACH,eAAO,MAAM,0BAA0B;;;;;;;;;iBAMrC,CAAC;AAEH,eAAO,MAAM,mBAAmB;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;2BAQ9B,CAAC;AAEH,MAAM,MAAM,aAAa,GAAG,CAAC,CAAC,KAAK,CAAC,OAAO,mBAAmB,CAAC,CAAC;AAChE,MAAM,MAAM,UAAU,GAAG,CAAC,CAAC,KAAK,CAAC,OAAO,gBAAgB,CAAC,CAAC;AAC1D,MAAM,MAAM,YAAY,GAAG,CAAC,CAAC,KAAK,CAAC,OAAO,kBAAkB,CAAC,CAAC;AAC9D,MAAM,MAAM,aAAa,GAAG,CAAC,CAAC,KAAK,CAAC,OAAO,mBAAmB,CAAC,CAAC;AAChE,MAAM,MAAM,YAAY,GAAG,CAAC,CAAC,KAAK,CAAC,OAAO,kBAAkB,CAAC,CAAC;AAC9D,MAAM,MAAM,aAAa,GAAG,CAAC,CAAC,KAAK,CAAC,OAAO,mBAAmB,CAAC,CAAC;AAChE,MAAM,MAAM,aAAa,GAAG,CAAC,CAAC,KAAK,CAAC,OAAO,mBAAmB,CAAC,CAAC;AAChE,MAAM,MAAM,oBAAoB,GAAG,CAAC,CAAC,KAAK,CAAC,OAAO,0BAA0B,CAAC,CAAC;AAC9E,MAAM,MAAM,iBAAiB,GAAG,aAAa,CAAC,MAAM,CAAC,CAAC"}
|