@iaforged/context-code 1.0.84 → 1.0.86
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 +8 -1118
- package/docs/BRIDGES.md +90 -0
- package/docs/Contex.md +70 -0
- package/docs/LIMITS.md +37 -0
- package/docs/MCP_SERVERS.md +51 -0
- package/docs/MULTI_PROVIDER.md +201 -0
- package/docs/MULTI_SQUAD_ORCHESTRATION_PLAN.md +639 -0
- package/docs/PHASE_1_WORKSPACES_AGENTS_TEAMS.md +161 -0
- package/docs/PHASE_2_SQLITE_ORCHESTRATION.md +127 -0
- package/docs/PHASE_3_DOMAIN_EXECUTION.md +215 -0
- package/docs/PHASE_3_VALIDATION.md +136 -0
- package/docs/PHASE_4_RISKS_AND_TESTS.md +182 -0
- package/docs/RECOVERY_NOTES.md +78 -0
- package/docs/RENAMING_NOTES.md +25 -0
- package/docs/SKILLS.md +27 -0
- package/docs/TEAMS_AND_ORCHESTRATION.md +626 -0
- package/docs/TROUBLESHOOTING.md +72 -0
- package/docs/comandos.md +121 -0
- package/docs/index.md +37 -0
- package/package.json +2 -1
|
@@ -0,0 +1,161 @@
|
|
|
1
|
+
# Fase 1: workspaces, agents, teams y topologia
|
|
2
|
+
|
|
3
|
+
Este documento describe la capa organizacional objetivo que se construye encima de la base actual de `provider + profile + SQLite`.
|
|
4
|
+
|
|
5
|
+
No define comandos nuevos ni cambia el runtime por si solo. Su proposito es fijar el vocabulario y la estructura para que la siguiente evolucion del sistema no mezcle conceptos.
|
|
6
|
+
|
|
7
|
+
## Resumen ejecutivo
|
|
8
|
+
|
|
9
|
+
- `workspace` es la unidad organizacional de un proveedor.
|
|
10
|
+
- `profile` es una cuenta o configuracion concreta dentro de ese workspace.
|
|
11
|
+
- `agent` es un rol operativo o subagente dentro de un workspace o perfil.
|
|
12
|
+
- `team` es una agrupacion transversal que coordina varios workspaces.
|
|
13
|
+
- `topologia` es la relacion entre el orquestador global, los teams, los workspaces, los profiles y los agents.
|
|
14
|
+
|
|
15
|
+
## Lo que ya existe hoy
|
|
16
|
+
|
|
17
|
+
- `provider profiles` en SQLite.
|
|
18
|
+
- `agentName` reservado como nombre operativo.
|
|
19
|
+
- credenciales de Windows/Linux en SQLite cifrado local.
|
|
20
|
+
- perfiles por proveedor con base URL y ultimo modelo.
|
|
21
|
+
|
|
22
|
+
Eso significa que la fase organizacional no parte desde cero. Parte sobre una capa de estado ya estable.
|
|
23
|
+
|
|
24
|
+
## Topologia objetivo
|
|
25
|
+
|
|
26
|
+
```mermaid
|
|
27
|
+
flowchart TD
|
|
28
|
+
GO["Global orchestrator"]
|
|
29
|
+
TM["Team"]
|
|
30
|
+
WS["Workspace / provider"]
|
|
31
|
+
PF["Provider profile"]
|
|
32
|
+
AG["Agent / subagent"]
|
|
33
|
+
|
|
34
|
+
GO --> TM
|
|
35
|
+
TM --> WS
|
|
36
|
+
WS --> PF
|
|
37
|
+
PF --> AG
|
|
38
|
+
```
|
|
39
|
+
|
|
40
|
+
Lectura del diagrama:
|
|
41
|
+
|
|
42
|
+
- el `Global orchestrator` decide la estrategia general
|
|
43
|
+
- cada `Team` agrupa dominios o lineas de trabajo
|
|
44
|
+
- cada `Workspace` representa un proveedor concreto
|
|
45
|
+
- cada `Profile` representa una cuenta o configuracion dentro del workspace
|
|
46
|
+
- cada `Agent` representa un rol interno, un subagente o una especializacion
|
|
47
|
+
|
|
48
|
+
## Entidades de la Fase 1
|
|
49
|
+
|
|
50
|
+
### `provider_workspaces`
|
|
51
|
+
|
|
52
|
+
Representa al proveedor como unidad organizacional.
|
|
53
|
+
|
|
54
|
+
Campos tipicos:
|
|
55
|
+
|
|
56
|
+
- `id`
|
|
57
|
+
- `provider`
|
|
58
|
+
- `display_name`
|
|
59
|
+
- `domain_focus`
|
|
60
|
+
- `is_enabled`
|
|
61
|
+
- `created_at`
|
|
62
|
+
- `updated_at`
|
|
63
|
+
|
|
64
|
+
### `provider_agents`
|
|
65
|
+
|
|
66
|
+
Representa subagentes o roles internos.
|
|
67
|
+
|
|
68
|
+
Campos tipicos:
|
|
69
|
+
|
|
70
|
+
- `id`
|
|
71
|
+
- `workspace_id`
|
|
72
|
+
- `profile_id`
|
|
73
|
+
- `name`
|
|
74
|
+
- `role_kind`
|
|
75
|
+
- `system_prompt`
|
|
76
|
+
- `model_override`
|
|
77
|
+
- `tool_policy`
|
|
78
|
+
- `autonomy_level`
|
|
79
|
+
- `is_orchestrator`
|
|
80
|
+
- `is_enabled`
|
|
81
|
+
- `created_at`
|
|
82
|
+
- `updated_at`
|
|
83
|
+
|
|
84
|
+
### `teams`
|
|
85
|
+
|
|
86
|
+
Representa equipos transversales.
|
|
87
|
+
|
|
88
|
+
Campos tipicos:
|
|
89
|
+
|
|
90
|
+
- `id`
|
|
91
|
+
- `name`
|
|
92
|
+
- `description`
|
|
93
|
+
- `global_orchestrator_agent_id`
|
|
94
|
+
- `is_enabled`
|
|
95
|
+
- `created_at`
|
|
96
|
+
- `updated_at`
|
|
97
|
+
|
|
98
|
+
### `team_domains`
|
|
99
|
+
|
|
100
|
+
Representa dominios de asignacion dentro de un team.
|
|
101
|
+
|
|
102
|
+
Campos tipicos:
|
|
103
|
+
|
|
104
|
+
- `id`
|
|
105
|
+
- `team_id`
|
|
106
|
+
- `domain_name`
|
|
107
|
+
- `workspace_id`
|
|
108
|
+
- `local_orchestrator_agent_id`
|
|
109
|
+
- `lead_agent_id`
|
|
110
|
+
- `selection_mode`
|
|
111
|
+
- `required`
|
|
112
|
+
|
|
113
|
+
## Regla de separacion
|
|
114
|
+
|
|
115
|
+
- `provider` no es `profile`
|
|
116
|
+
- `profile` no es `agent`
|
|
117
|
+
- `agent` no es `team`
|
|
118
|
+
- `team` no es `workspace`
|
|
119
|
+
|
|
120
|
+
La fase 1 existe precisamente para evitar que esos conceptos se vuelvan a mezclar.
|
|
121
|
+
|
|
122
|
+
## Criterio de cierre de la fase
|
|
123
|
+
|
|
124
|
+
La fase 1 queda cerrada cuando se pueda:
|
|
125
|
+
|
|
126
|
+
- definir un workspace por proveedor
|
|
127
|
+
- registrar agentes dentro de ese workspace
|
|
128
|
+
- agrupar workspaces en teams
|
|
129
|
+
- inspeccionar la topologia completa desde la CLI o la UI
|
|
130
|
+
|
|
131
|
+
## Comandos base de la fase
|
|
132
|
+
|
|
133
|
+
La fase ya expone una primera capa manual:
|
|
134
|
+
|
|
135
|
+
- `/workspace`
|
|
136
|
+
- `/workspace show <proveedor>`
|
|
137
|
+
- `/workspace enable <proveedor>`
|
|
138
|
+
- `/workspace disable <proveedor>`
|
|
139
|
+
- `/agent list [proveedor]`
|
|
140
|
+
- `/agent create <proveedor> <name> [profile]`
|
|
141
|
+
- `/agent show <proveedor> <name>`
|
|
142
|
+
- `/agent set-role <proveedor> <name> <role>`
|
|
143
|
+
- `/agent set-orchestrator <proveedor> <name> <true|false>`
|
|
144
|
+
- `/agent set-model <proveedor> <name> <model|clear>`
|
|
145
|
+
- `/team list`
|
|
146
|
+
- `/team create <name>`
|
|
147
|
+
- `/team show <name>`
|
|
148
|
+
- `/team orchestrator <team> <proveedor>/<agente>`
|
|
149
|
+
- `/team domain <team> <domain> <proveedor>/<agente>`
|
|
150
|
+
- `/team add-member <team> <domain> <proveedor>/<agente> [duty]`
|
|
151
|
+
|
|
152
|
+
## Nota de alcance
|
|
153
|
+
|
|
154
|
+
Esta fase no incluye todavia:
|
|
155
|
+
|
|
156
|
+
- ejecucion real de orquestacion
|
|
157
|
+
- reparto automatico de tareas
|
|
158
|
+
- ranking inteligente de agentes
|
|
159
|
+
- trazabilidad de runs
|
|
160
|
+
|
|
161
|
+
Eso pertenece a fases posteriores.
|
|
@@ -0,0 +1,127 @@
|
|
|
1
|
+
# Fase 2: planning y trazabilidad inicial sobre SQLite
|
|
2
|
+
|
|
3
|
+
Este documento describe la capa inicial de orquestacion que se monta encima de la topologia de providers, profiles, agents y teams.
|
|
4
|
+
|
|
5
|
+
La Fase 1 deja la estructura de configuracion y nomenclatura. La Fase 2 usa esa base para registrar decisiones, runs, tareas y mensajes de orquestacion de forma persistente.
|
|
6
|
+
|
|
7
|
+
## Objetivo
|
|
8
|
+
|
|
9
|
+
Transformar la definicion de equipos en una topologia planeable:
|
|
10
|
+
|
|
11
|
+
- provider workspace
|
|
12
|
+
- provider profile
|
|
13
|
+
- provider agent
|
|
14
|
+
- team
|
|
15
|
+
- domain
|
|
16
|
+
- member
|
|
17
|
+
- run
|
|
18
|
+
- task
|
|
19
|
+
- message
|
|
20
|
+
|
|
21
|
+
La meta es que SQLite sea la fuente de verdad para el planning y la trazabilidad inicial, mientras que los comandos de Fase 1 siguen sirviendo como superficie de configuracion.
|
|
22
|
+
|
|
23
|
+
## Base de almacenamiento
|
|
24
|
+
|
|
25
|
+
La orquestacion inicial se apoya en la base SQLite de Context Code:
|
|
26
|
+
|
|
27
|
+
- `~/.context/provider-state.sqlite3`
|
|
28
|
+
|
|
29
|
+
Tablas relevantes:
|
|
30
|
+
|
|
31
|
+
- `provider_workspaces`
|
|
32
|
+
- `provider_profiles`
|
|
33
|
+
- `provider_agents`
|
|
34
|
+
- `teams`
|
|
35
|
+
- `team_domains`
|
|
36
|
+
- `team_domain_members`
|
|
37
|
+
- `orchestration_runs`
|
|
38
|
+
- `orchestration_tasks`
|
|
39
|
+
- `orchestration_messages`
|
|
40
|
+
|
|
41
|
+
## Flujo inicial de planning
|
|
42
|
+
|
|
43
|
+
El flujo recomendado para montar una corrida planeada es:
|
|
44
|
+
|
|
45
|
+
1. configurar el proveedor y el perfil activo
|
|
46
|
+
2. crear un team
|
|
47
|
+
3. asignar un orchestrator para el team
|
|
48
|
+
4. declarar dominios de trabajo
|
|
49
|
+
5. agregar miembros por dominio
|
|
50
|
+
6. inspeccionar la topologia
|
|
51
|
+
7. crear la corrida inicial sobre SQLite
|
|
52
|
+
|
|
53
|
+
En la practica:
|
|
54
|
+
|
|
55
|
+
```sh
|
|
56
|
+
/provider <proveedor> profile <perfil>
|
|
57
|
+
/profile use <proveedor> <perfil>
|
|
58
|
+
|
|
59
|
+
/team create <name>
|
|
60
|
+
/team orchestrator <team> <provider>/<agent>
|
|
61
|
+
/team domain <team> <domain> <provider>/<agent>
|
|
62
|
+
/team add-member <team> <domain> <provider>/<agent> [duty]
|
|
63
|
+
|
|
64
|
+
/team list
|
|
65
|
+
/team show <name>
|
|
66
|
+
|
|
67
|
+
/orchestrate <team> <objetivo>
|
|
68
|
+
```
|
|
69
|
+
|
|
70
|
+
## Estados de tarea
|
|
71
|
+
|
|
72
|
+
La Fase 2 usa estados simples para que la inspeccion sea rapida:
|
|
73
|
+
|
|
74
|
+
- `ready`: la tarea quedo lista para ejecutarse
|
|
75
|
+
- `blocked`: falta una dependencia, un dominio o una asignacion valida
|
|
76
|
+
|
|
77
|
+
## Como inspeccionar una corrida
|
|
78
|
+
|
|
79
|
+
La corrida se revisa desde la CLI con `/run`:
|
|
80
|
+
|
|
81
|
+
- `/run list` muestra los identificadores disponibles
|
|
82
|
+
- `/run show <run-id>` muestra el detalle completo de una corrida
|
|
83
|
+
- `/run tasks <run-id>` muestra tareas por dominio
|
|
84
|
+
- `/run messages <run-id>` muestra la bitacora persistida
|
|
85
|
+
- el detalle debe incluir el team, el objetivo, el orchestrator global y las tareas por dominio
|
|
86
|
+
- cada tarea debe mostrar su estado, de forma que se entienda si quedo `ready` o `blocked`
|
|
87
|
+
|
|
88
|
+
## Limites de Fase 2
|
|
89
|
+
|
|
90
|
+
La Fase 2 no intenta resolver todo el trabajo de forma automatica. En este punto:
|
|
91
|
+
|
|
92
|
+
- no ejecuta subagentes reales automaticamente
|
|
93
|
+
- no hace consolidacion final por dominio
|
|
94
|
+
- no reemplaza el flujo manual de `/team`, `/workspace` y `/agent`
|
|
95
|
+
- no introduce subdelegacion profunda dentro de cada squad
|
|
96
|
+
- deja el run preparado para que Fase 3 pueda arrancar ejecucion por dominio
|
|
97
|
+
|
|
98
|
+
## Comandos de Fase 1 que alimentan Fase 2
|
|
99
|
+
|
|
100
|
+
Los comandos de `team` no ejecutan la orquestacion completa por si solos. Sirven para dejar lista la topologia que la capa de orquestacion consumira:
|
|
101
|
+
|
|
102
|
+
- `/team list`
|
|
103
|
+
- `/team create <name>`
|
|
104
|
+
- `/team show <name>`
|
|
105
|
+
- `/team orchestrator <team> <provider>/<agent>`
|
|
106
|
+
- `/team domain <team> <domain> <provider>/<agent>`
|
|
107
|
+
- `/team add-member <team> <domain> <provider>/<agent> [duty]`
|
|
108
|
+
|
|
109
|
+
## Criterio de cierre
|
|
110
|
+
|
|
111
|
+
La fase queda bien definida cuando se pueda:
|
|
112
|
+
|
|
113
|
+
- guardar la topologia del equipo
|
|
114
|
+
- leer el team completo desde SQLite
|
|
115
|
+
- registrar runs y tareas de orquestacion
|
|
116
|
+
- asignar dominios y miembros sin mezclar provider, profile y agent
|
|
117
|
+
- inspeccionar runs, tareas y mensajes sin depender de estado en memoria
|
|
118
|
+
|
|
119
|
+
## Relacion con otras fases
|
|
120
|
+
|
|
121
|
+
La Fase 1 define la estructura. La Fase 2 usa esa estructura para planear y trazar trabajo distribuido.
|
|
122
|
+
|
|
123
|
+
En otras palabras:
|
|
124
|
+
|
|
125
|
+
- Fase 1 = configuracion y topologia
|
|
126
|
+
- Fase 2 = planning persistido y trazabilidad sobre SQLite
|
|
127
|
+
- Fase 3 = ejecucion real por dominio y reporte consolidado
|
|
@@ -0,0 +1,215 @@
|
|
|
1
|
+
# Fase 3: ejecucion por dominio y reporte consolidado
|
|
2
|
+
|
|
3
|
+
Este documento describe la Fase 3 del sistema multi-squad de Context Code.
|
|
4
|
+
|
|
5
|
+
La Fase 2 crea runs, tareas y mensajes sobre SQLite. La Fase 3 toma esas corridas y las convierte en ejecucion real por dominio, con reportes de escuadron hacia el orquestador global.
|
|
6
|
+
|
|
7
|
+
## Objetivo
|
|
8
|
+
|
|
9
|
+
Ejecutar trabajo distribuido con dos niveles de coordinacion:
|
|
10
|
+
|
|
11
|
+
- `orquestador global`: coordina el objetivo completo y consolida resultados
|
|
12
|
+
- `orquestador local`: lidera un dominio o escuadron concreto
|
|
13
|
+
- `miembros del dominio`: ejecutan tareas especializadas dentro del escuadron
|
|
14
|
+
- `SQLite`: guarda el estado de runs, tasks, messages, resultados de tarea y reportes consolidados
|
|
15
|
+
|
|
16
|
+
La meta no es que todos los agentes sean autonomos desde el primer dia. La meta es que cada dominio pueda avanzar, reportar y dejar trazabilidad consistente.
|
|
17
|
+
|
|
18
|
+
## Flujo de ejecucion
|
|
19
|
+
|
|
20
|
+
El flujo esperado para una corrida de Fase 3 es:
|
|
21
|
+
|
|
22
|
+
1. El usuario crea o arranca una corrida.
|
|
23
|
+
2. El orquestador global carga el team y sus dominios desde SQLite.
|
|
24
|
+
3. Cada dominio recibe una tarea con agente asignado.
|
|
25
|
+
4. El dominio pasa de `ready` a `in_progress`.
|
|
26
|
+
5. El runtime resuelve `agente -> workspace -> perfil -> modelo -> credenciales`.
|
|
27
|
+
6. El dominio termina como `completed`, `failed` o `blocked`.
|
|
28
|
+
7. El orquestador global consolida los reportes de todos los dominios.
|
|
29
|
+
8. La corrida termina como `completed`, `failed`, `cancelled` o queda lista para `resume`.
|
|
30
|
+
|
|
31
|
+
## Comandos principales
|
|
32
|
+
|
|
33
|
+
### Crear y arrancar una corrida
|
|
34
|
+
|
|
35
|
+
```sh
|
|
36
|
+
/run start <team> <goal>
|
|
37
|
+
```
|
|
38
|
+
|
|
39
|
+
Este comando debe:
|
|
40
|
+
|
|
41
|
+
- crear la corrida si todavia no existe
|
|
42
|
+
- mover la corrida a estado de ejecucion
|
|
43
|
+
- registrar mensajes de inicio
|
|
44
|
+
- servir para corridas directas; el flujo multi-dominio recomendado sigue siendo `/orchestrate <team> <goal>` y luego `/run resume <run-id>`
|
|
45
|
+
|
|
46
|
+
Ejemplo:
|
|
47
|
+
|
|
48
|
+
```sh
|
|
49
|
+
/run start core-dev crear login con UI y API
|
|
50
|
+
```
|
|
51
|
+
|
|
52
|
+
### Reanudar una corrida
|
|
53
|
+
|
|
54
|
+
```sh
|
|
55
|
+
/run resume <run-id>
|
|
56
|
+
```
|
|
57
|
+
|
|
58
|
+
Este comando debe:
|
|
59
|
+
|
|
60
|
+
- cargar una corrida existente
|
|
61
|
+
- saltar tareas ya completadas
|
|
62
|
+
- procesar tareas `ready`, `blocked` recuperables o `in_progress` que puedan continuar
|
|
63
|
+
- registrar mensajes nuevos sin borrar la bitacora anterior
|
|
64
|
+
- actualizar el estado final de la corrida segun el resultado de sus dominios
|
|
65
|
+
|
|
66
|
+
### Cancelar una corrida
|
|
67
|
+
|
|
68
|
+
```sh
|
|
69
|
+
/run cancel <run-id>
|
|
70
|
+
```
|
|
71
|
+
|
|
72
|
+
Este comando debe:
|
|
73
|
+
|
|
74
|
+
- marcar la corrida como `cancelled`
|
|
75
|
+
- cancelar tareas pendientes cuando aplique
|
|
76
|
+
- registrar un mensaje de cancelacion
|
|
77
|
+
- evitar que `resume` siga ejecutando trabajo activo sin una decision explicita
|
|
78
|
+
|
|
79
|
+
### Ver tareas por dominio
|
|
80
|
+
|
|
81
|
+
```sh
|
|
82
|
+
/run tasks <run-id>
|
|
83
|
+
/run task <task-id>
|
|
84
|
+
/run domain <run-id> <domain>
|
|
85
|
+
```
|
|
86
|
+
|
|
87
|
+
Este comando debe mostrar:
|
|
88
|
+
|
|
89
|
+
- dominio
|
|
90
|
+
- agente asignado
|
|
91
|
+
- estado de tarea
|
|
92
|
+
- resumen de salida
|
|
93
|
+
- bloqueo o error si existe
|
|
94
|
+
- marca de tiempo relevante
|
|
95
|
+
|
|
96
|
+
### Operaciones manuales de recuperacion
|
|
97
|
+
|
|
98
|
+
```sh
|
|
99
|
+
/run retry <run-id> [task-id]
|
|
100
|
+
/run cancel-task <task-id>
|
|
101
|
+
/run reassign <task-id> <provider>/<agent>
|
|
102
|
+
```
|
|
103
|
+
|
|
104
|
+
Estos comandos permiten reintentar, bloquear o reasignar trabajo sin borrar trazabilidad.
|
|
105
|
+
|
|
106
|
+
### Ver mensajes de la corrida
|
|
107
|
+
|
|
108
|
+
```sh
|
|
109
|
+
/run messages <run-id>
|
|
110
|
+
```
|
|
111
|
+
|
|
112
|
+
Este comando debe mostrar la bitacora persistida:
|
|
113
|
+
|
|
114
|
+
- mensajes del orquestador global
|
|
115
|
+
- reportes de escuadron
|
|
116
|
+
- errores
|
|
117
|
+
- decisiones de planning
|
|
118
|
+
- cambios relevantes de estado
|
|
119
|
+
|
|
120
|
+
## Estados de corrida
|
|
121
|
+
|
|
122
|
+
Los estados esperados son:
|
|
123
|
+
|
|
124
|
+
- `planned`: la corrida existe, pero todavia no ejecuto dominios
|
|
125
|
+
- `in_progress`: la corrida esta procesando dominios
|
|
126
|
+
- `completed`: todos los dominios terminaron correctamente o con resultado aceptado
|
|
127
|
+
- `failed`: la corrida fallo por un error no recuperable
|
|
128
|
+
- `cancelled`: el usuario cancelo la corrida
|
|
129
|
+
|
|
130
|
+
## Estados de tarea
|
|
131
|
+
|
|
132
|
+
Los estados esperados son:
|
|
133
|
+
|
|
134
|
+
- `ready`: la tarea esta preparada para ejecutar
|
|
135
|
+
- `in_progress`: el dominio esta trabajando
|
|
136
|
+
- `completed`: el dominio reporto resultado
|
|
137
|
+
- `failed`: el dominio fallo durante la ejecucion
|
|
138
|
+
- `blocked`: falta configuracion, agente, credencial o dependencia
|
|
139
|
+
- cuando la corrida se cancela, las tareas abiertas quedan bloqueadas o conservan su estado terminal previo
|
|
140
|
+
|
|
141
|
+
## Reporte de escuadron
|
|
142
|
+
|
|
143
|
+
Cada escuadron debe reportar al orquestador global con una estructura minima:
|
|
144
|
+
|
|
145
|
+
- `domain`: dominio ejecutado
|
|
146
|
+
- `lead`: agente responsable del dominio
|
|
147
|
+
- `status`: estado final del dominio
|
|
148
|
+
- `summary`: resumen de lo realizado
|
|
149
|
+
- `artifacts`: archivos, decisiones o resultados relevantes
|
|
150
|
+
- `blockers`: bloqueos encontrados
|
|
151
|
+
- `nextAction`: siguiente accion recomendada
|
|
152
|
+
|
|
153
|
+
Ese reporte queda persistido en tres niveles:
|
|
154
|
+
|
|
155
|
+
- `orchestration_messages`: bitacora cronologica de dispatch, bloqueo y reporte.
|
|
156
|
+
- `orchestration_task_results`: salida estructurada por tarea/agente.
|
|
157
|
+
- `orchestration_domain_reports`: resumen actual del dominio para el orquestador global.
|
|
158
|
+
|
|
159
|
+
La tarea correspondiente en `orchestration_tasks` tambien conserva `result_summary` para lectura rapida.
|
|
160
|
+
|
|
161
|
+
## Reporte consolidado global
|
|
162
|
+
|
|
163
|
+
El orquestador global debe consolidar:
|
|
164
|
+
|
|
165
|
+
- estado general de la corrida
|
|
166
|
+
- dominios completados
|
|
167
|
+
- dominios bloqueados
|
|
168
|
+
- dominios fallidos
|
|
169
|
+
- resumen ejecutivo
|
|
170
|
+
- riesgos pendientes
|
|
171
|
+
- recomendacion de continuar, reintentar, reasignar o cerrar
|
|
172
|
+
|
|
173
|
+
La consolidacion no reemplaza los mensajes. Los mensajes son la bitacora completa; el consolidado se guarda en `orchestration_run_reports` como lectura operativa para decidir el siguiente paso.
|
|
174
|
+
|
|
175
|
+
## Limites actuales
|
|
176
|
+
|
|
177
|
+
Fase 3 debe mantener estos limites claros:
|
|
178
|
+
|
|
179
|
+
- la ejecucion por dominio sigue siendo guiada por comandos mientras se estabiliza el runtime
|
|
180
|
+
- la llamada real al proveedor ocurre cuando el agente tiene workspace, perfil, modelo y credenciales validas
|
|
181
|
+
- la subdelegacion profunda dentro de cada escuadron puede empezar como reporte del lead local
|
|
182
|
+
- si un dominio no tiene agente, perfil, credencial o modelo valido, debe quedar `blocked`
|
|
183
|
+
- los errores de proveedor no deben reintentarse indefinidamente si son de cuota, autenticacion o modelo invalido
|
|
184
|
+
- el usuario debe poder inspeccionar y retomar sin perder trazabilidad
|
|
185
|
+
|
|
186
|
+
## Criterio de cierre de Fase 3
|
|
187
|
+
|
|
188
|
+
Fase 3 queda cerrada cuando:
|
|
189
|
+
|
|
190
|
+
- `/run start` crea o arranca una corrida operativa
|
|
191
|
+
- `/run resume` continua una corrida existente
|
|
192
|
+
- `/run cancel` detiene una corrida de forma persistente
|
|
193
|
+
- `/run tasks` muestra el estado por dominio
|
|
194
|
+
- `/run task` y `/run domain` muestran detalle operativo y resultados persistidos
|
|
195
|
+
- `/run retry`, `/run cancel-task` y `/run reassign` permiten recuperacion manual segura
|
|
196
|
+
- `/run messages` muestra la bitacora
|
|
197
|
+
- cada dominio produce un reporte hacia el orquestador global
|
|
198
|
+
- el orquestador global produce un consolidado
|
|
199
|
+
- los resultados quedan persistidos en `orchestration_task_results`, `orchestration_domain_reports` y `orchestration_run_reports`
|
|
200
|
+
- los estados de runs y tasks sobreviven reinicios de la app
|
|
201
|
+
|
|
202
|
+
## Arranque de Fase 4
|
|
203
|
+
|
|
204
|
+
Cuando Fase 3 este estable, Fase 4 debe agregar autonomia y optimizacion:
|
|
205
|
+
|
|
206
|
+
- seleccion automatica de agentes por capacidades
|
|
207
|
+
- ranking por costo, latencia y calidad
|
|
208
|
+
- fallback entre proveedores cuando un escuadron falle
|
|
209
|
+
- reasignacion automatica de dominios bloqueados
|
|
210
|
+
- politicas de retry por tipo de error
|
|
211
|
+
- autocompletado de teams, agents, dominios y run ids
|
|
212
|
+
- metricas por escuadron y proveedor
|
|
213
|
+
- tests de integracion para runs, tasks, messages y reportes
|
|
214
|
+
|
|
215
|
+
Fase 4 no debe borrar la estructura manual. La configuracion manual debe seguir existiendo como modo explicito y auditable.
|
|
@@ -0,0 +1,136 @@
|
|
|
1
|
+
# Fase 3: validacion de ejecucion por dominio
|
|
2
|
+
|
|
3
|
+
Este documento fija la validacion tecnica actual para la Fase 3 de orquestacion. El repo no tiene un harness unitario propio configurado en `package.json`; por ahora el gate automatizable y reproducible es build, mas pruebas manuales sobre los comandos que escriben en SQLite.
|
|
4
|
+
|
|
5
|
+
## Alcance validado
|
|
6
|
+
|
|
7
|
+
La Fase 3 cubre:
|
|
8
|
+
|
|
9
|
+
- ciclo operativo de corrida desde `/run`
|
|
10
|
+
- cambio de estados de `orchestration_runs`
|
|
11
|
+
- cambio de estados de `orchestration_tasks`
|
|
12
|
+
- mensajes persistidos en `orchestration_messages`
|
|
13
|
+
- reporte consolidado por escuadron desde `/run show` y `/run report`
|
|
14
|
+
- inspeccion detallada con `/run tasks` y `/run messages`
|
|
15
|
+
- inspeccion puntual con `/run task <task-id>` y `/run domain <run-id> <domain>`
|
|
16
|
+
- operaciones manuales seguras con `/run retry`, `/run cancel-task` y `/run reassign`
|
|
17
|
+
|
|
18
|
+
## Verificaciones automatizables disponibles
|
|
19
|
+
|
|
20
|
+
Ejecutar:
|
|
21
|
+
|
|
22
|
+
```sh
|
|
23
|
+
npm run build
|
|
24
|
+
```
|
|
25
|
+
|
|
26
|
+
Resultado esperado:
|
|
27
|
+
|
|
28
|
+
- `tsc -p tsconfig.json` compila.
|
|
29
|
+
- `scripts/postprocess-build.mjs` termina con `Build postprocess completed.`
|
|
30
|
+
|
|
31
|
+
Tambien se puede ejecutar:
|
|
32
|
+
|
|
33
|
+
```sh
|
|
34
|
+
npm run typecheck
|
|
35
|
+
```
|
|
36
|
+
|
|
37
|
+
Estado actual:
|
|
38
|
+
|
|
39
|
+
- no es gate de Fase 3 todavia.
|
|
40
|
+
- falla por deuda global previa en bridge, plugins, secure storage legacy, mensajes SDK y otros modulos fuera del runtime de orquestacion.
|
|
41
|
+
- si se limpia esa deuda, este comando debe pasar a ser gate obligatorio.
|
|
42
|
+
|
|
43
|
+
## Flujo manual recomendado
|
|
44
|
+
|
|
45
|
+
Preparar topologia minima:
|
|
46
|
+
|
|
47
|
+
```text
|
|
48
|
+
/provider claude profile main
|
|
49
|
+
/agent create claude frontend-lead main
|
|
50
|
+
/agent set-orchestrator claude frontend-lead true
|
|
51
|
+
|
|
52
|
+
/provider openai profile work
|
|
53
|
+
/agent create openai backend-lead work
|
|
54
|
+
|
|
55
|
+
/team create core-dev
|
|
56
|
+
/team orchestrator core-dev claude/frontend-lead
|
|
57
|
+
/team domain core-dev frontend claude/frontend-lead
|
|
58
|
+
/team domain core-dev backend openai/backend-lead
|
|
59
|
+
/team show core-dev
|
|
60
|
+
```
|
|
61
|
+
|
|
62
|
+
Crear y revisar planning:
|
|
63
|
+
|
|
64
|
+
```text
|
|
65
|
+
/orchestrate core-dev crear login con UI y API
|
|
66
|
+
/run list
|
|
67
|
+
/run show <run-id>
|
|
68
|
+
/run tasks <run-id>
|
|
69
|
+
/run messages <run-id>
|
|
70
|
+
/run domain <run-id> frontend
|
|
71
|
+
```
|
|
72
|
+
|
|
73
|
+
Ejecutar Fase 3:
|
|
74
|
+
|
|
75
|
+
```text
|
|
76
|
+
/run resume <run-id>
|
|
77
|
+
/run show <run-id>
|
|
78
|
+
/run tasks <run-id>
|
|
79
|
+
/run messages <run-id>
|
|
80
|
+
/run task <task-id>
|
|
81
|
+
```
|
|
82
|
+
|
|
83
|
+
Cancelar o reiniciar escenarios:
|
|
84
|
+
|
|
85
|
+
```text
|
|
86
|
+
/run cancel <run-id>
|
|
87
|
+
/run resume <run-id>
|
|
88
|
+
/run retry <run-id>
|
|
89
|
+
/run retry <run-id> <task-id>
|
|
90
|
+
/run cancel-task <task-id>
|
|
91
|
+
/run reassign <task-id> claude/frontend-lead
|
|
92
|
+
```
|
|
93
|
+
|
|
94
|
+
## Estados esperados
|
|
95
|
+
|
|
96
|
+
Corridas:
|
|
97
|
+
|
|
98
|
+
- `planned`: creada, sin ejecucion.
|
|
99
|
+
- `in_progress`: ejecucion por dominio en curso.
|
|
100
|
+
- `completed`: todos los dominios ejecutables reportaron resultado.
|
|
101
|
+
- `failed`: hay dominios bloqueados o fallidos.
|
|
102
|
+
- `cancelled`: detenida por el usuario.
|
|
103
|
+
|
|
104
|
+
Tareas:
|
|
105
|
+
|
|
106
|
+
- `pending`: creada pero no lista.
|
|
107
|
+
- `ready`: lista para ejecucion.
|
|
108
|
+
- `in_progress`: asignada a un agente de dominio.
|
|
109
|
+
- `completed`: reporto resultado.
|
|
110
|
+
- `failed`: fallo durante ejecucion.
|
|
111
|
+
- `blocked`: falta agente, workspace, credencial o configuracion.
|
|
112
|
+
|
|
113
|
+
## Casos que deben cubrirse antes de cerrar Fase 3
|
|
114
|
+
|
|
115
|
+
- `/run resume <run-id>` cambia tareas `ready` a `completed` cuando tienen agente valido.
|
|
116
|
+
- `/run resume <run-id>` marca `blocked` si el agente asignado no existe.
|
|
117
|
+
- `/run cancel <run-id>` marca la corrida `cancelled` y bloquea tareas abiertas.
|
|
118
|
+
- `/run messages <run-id>` muestra `task.dispatch`, `squad.report` y `global.consolidated-report`.
|
|
119
|
+
- `/run show <run-id>` consolida por dominio y muestra el orquestador local o lead asignado.
|
|
120
|
+
- una corrida con dominios incompletos no debe reportarse como `completed`.
|
|
121
|
+
- `/run task <task-id>` muestra estado, agente, dominio, mensajes y resultados persistidos.
|
|
122
|
+
- `/run domain <run-id> <domain>` filtra tareas, mensajes y resultados por dominio.
|
|
123
|
+
- `/run retry <run-id>` mueve tareas `failed` o `blocked` a `ready` si tienen agente asignado.
|
|
124
|
+
- `/run retry <run-id> <task-id>` reintenta solo una tarea de esa corrida.
|
|
125
|
+
- `/run cancel-task <task-id>` detiene la tarea como `blocked` porque el modelo de estados no tiene `cancelled` por tarea.
|
|
126
|
+
- `/run reassign <task-id> <provider>/<agent>` cambia el agente asignado y deja la tarea `ready` si no estaba completada.
|
|
127
|
+
|
|
128
|
+
## Recomendacion de harness futuro
|
|
129
|
+
|
|
130
|
+
Cuando el repo tenga un harness unitario formal, las primeras pruebas deberian cubrir:
|
|
131
|
+
|
|
132
|
+
- `runStore`: crear/listar/actualizar runs, tasks, messages y reports.
|
|
133
|
+
- `OrchestrationExecutionRuntime`: transiciones validas e invalidas.
|
|
134
|
+
- comandos `/run`: parseo de argumentos, fallback y salida de errores.
|
|
135
|
+
- comandos `/orchestrate`: creacion de tareas `ready` y `blocked`.
|
|
136
|
+
- persistencia SQLite: reinicio de proceso y recuperacion de estado.
|