oxe-cc 1.11.0 → 1.14.0
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/CHANGELOG.md +106 -0
- package/README.md +736 -681
- package/bin/lib/oxe-event-bus.cjs +118 -0
- package/bin/lib/oxe-memory-kernel.cjs +188 -0
- package/bin/lib/oxe-project-health.cjs +75 -0
- package/bin/lib/oxe-skill-loader.cjs +131 -0
- package/bin/oxe-cc.js +202 -40
- package/docs/INTEGRATION.md +152 -0
- package/docs/oxe-artifact-map.html +1172 -0
- package/lib/sdk/index.cjs +2 -0
- package/lib/sdk/index.d.ts +185 -159
- package/oxe/schemas/swarm-run.schema.json +130 -0
- package/oxe/workflows/agent-mode.md +150 -0
- package/oxe/workflows/conduct.md +149 -0
- package/oxe/workflows/distill.md +164 -0
- package/oxe/workflows/help.md +1 -0
- package/oxe/workflows/memory.md +163 -0
- package/oxe/workflows/oxe.md +2 -1
- package/oxe/workflows/references/workflow-runtime-contracts.json +1113 -960
- package/oxe/workflows/route.md +7 -5
- package/oxe/workflows/swarm/board.md +119 -0
- package/oxe/workflows/swarm/scout.md +170 -0
- package/oxe/workflows/swarm-mode.md +280 -0
- package/package.json +2 -2
- package/packages/runtime/package.json +1 -1
- package/vscode-extension/package.json +1 -1
|
@@ -0,0 +1,150 @@
|
|
|
1
|
+
# OXE — Workflow: agent-mode (Agent Mode)
|
|
2
|
+
|
|
3
|
+
<objective>
|
|
4
|
+
Execução autônoma de objetivos de complexidade simples ou média por um único Conductor Agent.
|
|
5
|
+
O Conductor age diretamente como implementador, adotando a persona primária selecionada pelo `conduct.md`, produzindo o resultado em uma sessão sem necessidade de equipe multi-agente.
|
|
6
|
+
</objective>
|
|
7
|
+
|
|
8
|
+
<context>
|
|
9
|
+
- Invocado por `conduct.md` quando `intent_score` é simples ou médio.
|
|
10
|
+
- Aplicar `oxe/workflows/references/reasoning-execution.md` durante a implementação.
|
|
11
|
+
- Persona primária já foi selecionada e está disponível como parâmetro de entrada.
|
|
12
|
+
- Gravar artefatos em `.oxe/agent/`.
|
|
13
|
+
- Ao final, emitir eventos básicos para `OXE-EVENTS.ndjson` (RunStarted, WorkItemCompleted, RunCompleted).
|
|
14
|
+
</context>
|
|
15
|
+
|
|
16
|
+
---
|
|
17
|
+
|
|
18
|
+
## Fase 1 — Inicialização da Sessão
|
|
19
|
+
|
|
20
|
+
Criar `.oxe/agent/AGENT-SESSION.json` com:
|
|
21
|
+
|
|
22
|
+
```json
|
|
23
|
+
{
|
|
24
|
+
"session_id": "agent-<YYYYMMDD>-<seq>",
|
|
25
|
+
"started_at": "<ISO8601>",
|
|
26
|
+
"status": "running",
|
|
27
|
+
"objective": "<objetivo do usuário>",
|
|
28
|
+
"intent_score": "<simples|médio>",
|
|
29
|
+
"intent_tags": [],
|
|
30
|
+
"primary_persona": "<id>",
|
|
31
|
+
"memory_applied": false,
|
|
32
|
+
"tool_calls": [],
|
|
33
|
+
"work_items": [],
|
|
34
|
+
"reconciliation": null
|
|
35
|
+
}
|
|
36
|
+
```
|
|
37
|
+
|
|
38
|
+
Registrar entrada em `.oxe/agent/INTENT-LOG.ndjson`:
|
|
39
|
+
```json
|
|
40
|
+
{"ts": "<ISO8601>", "objective": "<texto>", "score": "<score>", "tags": [], "persona": "<id>"}
|
|
41
|
+
```
|
|
42
|
+
|
|
43
|
+
---
|
|
44
|
+
|
|
45
|
+
## Fase 2 — Discovery (reasoning-execution: "reconhecimento curto")
|
|
46
|
+
|
|
47
|
+
Antes de mutar qualquer arquivo, executar um reconhecimento mínimo:
|
|
48
|
+
|
|
49
|
+
1. Ler arquivos relevantes ao objetivo (usar Glob + Grep conforme intent_tags)
|
|
50
|
+
2. Identificar:
|
|
51
|
+
- **Arquivos que serão modificados** (write_set)
|
|
52
|
+
- **Padrões existentes** a seguir (naming, estrutura, imports)
|
|
53
|
+
- **Riscos imediatos** (arquivo crítico? Arquivo compartilhado? Arquivo com testes?)
|
|
54
|
+
3. Se o write_set for maior que o esperado para `intent_score=simples` (> 5 arquivos): **parar e elevar para Swarm Mode**
|
|
55
|
+
|
|
56
|
+
Registrar discovery em `.oxe/agent/AGENT-SESSION.json` → campo `work_items`.
|
|
57
|
+
|
|
58
|
+
---
|
|
59
|
+
|
|
60
|
+
## Fase 3 — Execução (sob persona selecionada)
|
|
61
|
+
|
|
62
|
+
Adotar os princípios da persona primária de `oxe/personas/<primary_persona>.md`:
|
|
63
|
+
|
|
64
|
+
- **Write set mínimo** — tocar apenas os arquivos identificados no discovery
|
|
65
|
+
- **Verificar antes de avançar** — executar verificação ao completar cada item
|
|
66
|
+
- **Discoveries fora de escopo** → `.oxe/OBSERVATIONS.md` (não expandir silenciosamente)
|
|
67
|
+
- **Segredos nunca em código**
|
|
68
|
+
|
|
69
|
+
Para cada `work_item`:
|
|
70
|
+
1. Implementar conforme objetivo
|
|
71
|
+
2. Verificar (comando ou checklist)
|
|
72
|
+
3. Atualizar `AGENT-SESSION.json` → `work_items[i].status = "done" | "failed"`
|
|
73
|
+
4. Registrar em `INTENT-LOG.ndjson`: `{"ts": "...", "item": "...", "status": "...", "files_changed": []}`
|
|
74
|
+
|
|
75
|
+
---
|
|
76
|
+
|
|
77
|
+
## Fase 4 — Reconciliação
|
|
78
|
+
|
|
79
|
+
Ao finalizar todos os `work_items`:
|
|
80
|
+
|
|
81
|
+
1. Listar todos os arquivos modificados
|
|
82
|
+
2. Confirmar que o objetivo foi satisfeito (sim/parcialmente/não)
|
|
83
|
+
3. Listar discoveries relevantes registrados em OBSERVATIONS.md
|
|
84
|
+
|
|
85
|
+
Atualizar `AGENT-SESSION.json`:
|
|
86
|
+
```json
|
|
87
|
+
{
|
|
88
|
+
"status": "completed | partial | failed",
|
|
89
|
+
"completed_at": "<ISO8601>",
|
|
90
|
+
"files_changed": ["lista de arquivos"],
|
|
91
|
+
"reconciliation": {
|
|
92
|
+
"objective_satisfied": true,
|
|
93
|
+
"observations_added": 0,
|
|
94
|
+
"next_suggested": "<próximo passo se houver>"
|
|
95
|
+
}
|
|
96
|
+
}
|
|
97
|
+
```
|
|
98
|
+
|
|
99
|
+
Gravar `.oxe/agent/RECONCILIATION.md` com:
|
|
100
|
+
```markdown
|
|
101
|
+
## Reconciliação — <session_id>
|
|
102
|
+
|
|
103
|
+
**Objetivo:** <texto>
|
|
104
|
+
**Resultado:** satisfeito | parcial | falhou
|
|
105
|
+
**Arquivos alterados:** <lista>
|
|
106
|
+
**Observações adicionadas:** <N>
|
|
107
|
+
**Próximo passo:** <texto ou "—">
|
|
108
|
+
```
|
|
109
|
+
|
|
110
|
+
---
|
|
111
|
+
|
|
112
|
+
## Fase 5 — Eventos
|
|
113
|
+
|
|
114
|
+
Emitir no final para `.oxe/OXE-EVENTS.ndjson` (append, uma linha NDJSON por evento):
|
|
115
|
+
|
|
116
|
+
```json
|
|
117
|
+
{"id": "<uuid>", "type": "RunStarted", "timestamp": "<ISO8601>", "session_id": "<id>", "run_id": "<session_id>", "payload": {"mode": "agent", "objective": "<texto>", "persona": "<id>"}}
|
|
118
|
+
{"id": "<uuid>", "type": "WorkItemCompleted", "timestamp": "<ISO8601>", "session_id": "<id>", "run_id": "<session_id>", "payload": {"items_completed": N, "files_changed": []}}
|
|
119
|
+
{"id": "<uuid>", "type": "RunCompleted", "timestamp": "<ISO8601>", "session_id": "<id>", "run_id": "<session_id>", "payload": {"status": "completed", "objective_satisfied": true}}
|
|
120
|
+
```
|
|
121
|
+
|
|
122
|
+
**Se `OXE-EVENTS.ndjson` não existir:** criar com o primeiro evento.
|
|
123
|
+
|
|
124
|
+
---
|
|
125
|
+
|
|
126
|
+
## Saída para o usuário
|
|
127
|
+
|
|
128
|
+
Ao final, reportar:
|
|
129
|
+
|
|
130
|
+
```
|
|
131
|
+
Agent Mode — concluído
|
|
132
|
+
Objetivo: <texto resumido>
|
|
133
|
+
Persona: <id>
|
|
134
|
+
Arquivos alterados: N
|
|
135
|
+
Verificação: passou | falhou
|
|
136
|
+
|
|
137
|
+
<lista de arquivos>
|
|
138
|
+
|
|
139
|
+
Próximo passo: <recomendação ou "—">
|
|
140
|
+
```
|
|
141
|
+
|
|
142
|
+
<success_criteria>
|
|
143
|
+
- [ ] AGENT-SESSION.json criado e atualizado ao longo da execução.
|
|
144
|
+
- [ ] Persona primária adotada (princípios de operação aplicados).
|
|
145
|
+
- [ ] Write set mínimo respeitado.
|
|
146
|
+
- [ ] Verificação executada por work_item.
|
|
147
|
+
- [ ] RECONCILIATION.md gerado.
|
|
148
|
+
- [ ] OXE-EVENTS.ndjson atualizado (RunStarted + WorkItemCompleted + RunCompleted).
|
|
149
|
+
- [ ] Discoveries fora de escopo → OBSERVATIONS.md, não expansão silenciosa.
|
|
150
|
+
</success_criteria>
|
|
@@ -0,0 +1,149 @@
|
|
|
1
|
+
# OXE — Workflow: conduct (Conductor Agent)
|
|
2
|
+
|
|
3
|
+
<objective>
|
|
4
|
+
Ponto de entrada para objetivos em linguagem natural que requerem execução autônoma.
|
|
5
|
+
O Conductor classifica a complexidade do objetivo, recupera memória relevante, carrega as personas adequadas e decide se o trabalho será feito em **Agent Mode** (Conductor age sozinho) ou **Swarm Mode** (equipe de agentes especializados).
|
|
6
|
+
|
|
7
|
+
Invocado automaticamente por `oxe.md` quando o input é um **objetivo ou tarefa de implementação** — não uma pergunta situacional, não um pedido de roteamento simples.
|
|
8
|
+
</objective>
|
|
9
|
+
|
|
10
|
+
<context>
|
|
11
|
+
- Este workflow **gera artefatos**: `AGENT-SESSION.json` (Agent Mode) ou `SWARM-RUN.json` (Swarm Mode).
|
|
12
|
+
- Aplicar `oxe/workflows/references/reasoning-planning.md` para a fase de decisão.
|
|
13
|
+
- Aplicar `oxe/workflows/references/reasoning-execution.md` quando agir diretamente (Agent Mode).
|
|
14
|
+
- Lê: `.oxe/STATE.md`, `.oxe/memory/REPO-MEMORY.md` (se existir), `.oxe/global/LESSONS.md`.
|
|
15
|
+
- Nunca expande escopo além do objetivo declarado. Discoveries vão para OBSERVATIONS.md.
|
|
16
|
+
</context>
|
|
17
|
+
|
|
18
|
+
---
|
|
19
|
+
|
|
20
|
+
## Fase 1 — Intent Classification
|
|
21
|
+
|
|
22
|
+
Ler o objetivo do usuário e classificar em uma das três categorias:
|
|
23
|
+
|
|
24
|
+
| Score | Critérios | Modo |
|
|
25
|
+
|-------|-----------|------|
|
|
26
|
+
| **simples** | 1 domínio, ≤ 3 arquivos esperados, mudança isolada (texto, config, estilo, bug local) | Agent Mode |
|
|
27
|
+
| **médio** | 1–2 domínios, 3–8 arquivos, lógica nova mas contida (endpoint, componente, função) | Agent Mode |
|
|
28
|
+
| **complexo** | 3+ domínios, 8+ arquivos, ou: nova feature com storage + backend + frontend + testes | Swarm Mode |
|
|
29
|
+
|
|
30
|
+
**Sinais de complexidade que forçam Swarm Mode:**
|
|
31
|
+
- Objetivo menciona: "módulo", "sistema", "fluxo completo", "histórico", "relatório", "pipeline"
|
|
32
|
+
- Objetivo envolve: banco de dados + API + UI simultaneamente
|
|
33
|
+
- Objetivo requer scaffold de múltiplos arquivos em diretórios diferentes
|
|
34
|
+
- Estimativa de ondas > 2 no PLAN.md
|
|
35
|
+
|
|
36
|
+
**Saída desta fase:**
|
|
37
|
+
```
|
|
38
|
+
intent_score: simples | médio | complexo
|
|
39
|
+
intent_tags: [lista de domínios detectados: backend, frontend, storage, auth, infra, test, docs, config]
|
|
40
|
+
objective_summary: resumo em 1 frase do que o usuário quer
|
|
41
|
+
```
|
|
42
|
+
|
|
43
|
+
---
|
|
44
|
+
|
|
45
|
+
## Fase 2 — Memory Retrieval
|
|
46
|
+
|
|
47
|
+
Ler as camadas de memória na ordem:
|
|
48
|
+
|
|
49
|
+
1. `.oxe/STATE.md` — estado atual da trilha (fase, sessão ativa, run ativo)
|
|
50
|
+
2. `.oxe/memory/REPO-MEMORY.md` — memória cross-session (decisões, pitfalls, preferências) — **se existir**
|
|
51
|
+
3. `.oxe/global/LESSONS.md` — lições de ciclos anteriores com `Status: ativo` e `Impacto: alto` — **se existir**
|
|
52
|
+
4. `.oxe/OBSERVATIONS.md` — observações pendentes com `Status: pendente` — **se existir**
|
|
53
|
+
|
|
54
|
+
Para cada camada lida, extrair apenas o que é **relevante ao objetivo atual** (usar intent_tags como filtro).
|
|
55
|
+
|
|
56
|
+
Gravar snapshot do contexto injetado:
|
|
57
|
+
- Agent Mode → `.oxe/agent/MEMORY-INJECTIONS.md`
|
|
58
|
+
- Swarm Mode → `.oxe/swarm/DECISIONS.md` (seção "Contexto de Memória")
|
|
59
|
+
|
|
60
|
+
**Se `.oxe/memory/` não existir:** pular silenciosamente e continuar.
|
|
61
|
+
|
|
62
|
+
---
|
|
63
|
+
|
|
64
|
+
## Fase 3 — Skill Loading
|
|
65
|
+
|
|
66
|
+
Com base nos `intent_tags`, selecionar as personas aplicáveis:
|
|
67
|
+
|
|
68
|
+
| Tag | Persona primária | Persona secundária |
|
|
69
|
+
|-----|------------------|--------------------|
|
|
70
|
+
| backend | executor | architect |
|
|
71
|
+
| frontend | ui-specialist | executor |
|
|
72
|
+
| storage | db-specialist | architect |
|
|
73
|
+
| auth | architect | executor |
|
|
74
|
+
| infra | architect | — |
|
|
75
|
+
| test | executor | verifier |
|
|
76
|
+
| docs | executor | — |
|
|
77
|
+
| config | executor | — |
|
|
78
|
+
| research | researcher | — |
|
|
79
|
+
| debug | debugger | — |
|
|
80
|
+
|
|
81
|
+
Registrar personas selecionadas em:
|
|
82
|
+
- Agent Mode → `.oxe/agent/SKILLS-LOADED.json`
|
|
83
|
+
- Swarm Mode → informação vai para fase de atribuição de papéis
|
|
84
|
+
|
|
85
|
+
**Resolução:** tentar `oxe/personas/<id>.md` (global) → `.oxe/skills/active/<id>.md` (projeto). Usar o primeiro encontrado.
|
|
86
|
+
|
|
87
|
+
---
|
|
88
|
+
|
|
89
|
+
## Fase 4 — Decisão de Modo
|
|
90
|
+
|
|
91
|
+
Com base no `intent_score`:
|
|
92
|
+
|
|
93
|
+
### Se simples ou médio → Agent Mode
|
|
94
|
+
|
|
95
|
+
Executar `oxe/workflows/agent-mode.md` com:
|
|
96
|
+
- `objective`: objetivo original do usuário
|
|
97
|
+
- `intent_tags`: tags detectadas
|
|
98
|
+
- `primary_persona`: persona primária selecionada
|
|
99
|
+
- `memory_context`: contexto de memória extraído
|
|
100
|
+
|
|
101
|
+
### Se complexo → Swarm Mode
|
|
102
|
+
|
|
103
|
+
Executar `oxe/workflows/swarm-mode.md` com:
|
|
104
|
+
- `objective`: objetivo original do usuário
|
|
105
|
+
- `intent_tags`: tags detectadas
|
|
106
|
+
- `memory_context`: contexto de memória extraído
|
|
107
|
+
|
|
108
|
+
**Comunicar ao usuário antes de prosseguir:**
|
|
109
|
+
|
|
110
|
+
Para Agent Mode:
|
|
111
|
+
```
|
|
112
|
+
Conductor: modo Agent (complexidade: [score])
|
|
113
|
+
Persona: [primary_persona]
|
|
114
|
+
Domínios: [intent_tags]
|
|
115
|
+
Memória aplicada: [sim/não — N lições, M pitfalls]
|
|
116
|
+
|
|
117
|
+
Executando...
|
|
118
|
+
```
|
|
119
|
+
|
|
120
|
+
Para Swarm Mode:
|
|
121
|
+
```
|
|
122
|
+
Conductor: modo Swarm (complexidade: complexo)
|
|
123
|
+
Domínios: [intent_tags]
|
|
124
|
+
Agentes: Scout + [N] Builders + Reviewer + Verifier
|
|
125
|
+
Memória aplicada: [sim/não — N lições, M pitfalls]
|
|
126
|
+
|
|
127
|
+
Iniciando Scout...
|
|
128
|
+
```
|
|
129
|
+
|
|
130
|
+
---
|
|
131
|
+
|
|
132
|
+
## Artefatos gerados por este workflow
|
|
133
|
+
|
|
134
|
+
| Artefato | Modo | Caminho |
|
|
135
|
+
|----------|------|---------|
|
|
136
|
+
| AGENT-SESSION.json | Agent | `.oxe/agent/AGENT-SESSION.json` |
|
|
137
|
+
| SKILLS-LOADED.json | Agent | `.oxe/agent/SKILLS-LOADED.json` |
|
|
138
|
+
| MEMORY-INJECTIONS.md | Agent | `.oxe/agent/MEMORY-INJECTIONS.md` |
|
|
139
|
+
| SWARM-RUN.json | Swarm | `.oxe/swarm/SWARM-RUN.json` |
|
|
140
|
+
| DECISIONS.md | Swarm | `.oxe/swarm/DECISIONS.md` |
|
|
141
|
+
|
|
142
|
+
<success_criteria>
|
|
143
|
+
- [ ] Intent score determinado (simples/médio/complexo).
|
|
144
|
+
- [ ] Memória lida e filtrada por intent_tags.
|
|
145
|
+
- [ ] Persona(s) selecionada(s) e registrada(s).
|
|
146
|
+
- [ ] Usuário informado do modo escolhido antes da execução.
|
|
147
|
+
- [ ] Delegação correta: agent-mode.md ou swarm-mode.md.
|
|
148
|
+
- [ ] Nenhum artefato de SPEC/PLAN criado por este workflow.
|
|
149
|
+
</success_criteria>
|
|
@@ -0,0 +1,164 @@
|
|
|
1
|
+
# OXE — Workflow: distill (Learning Kernel)
|
|
2
|
+
|
|
3
|
+
<objective>
|
|
4
|
+
Ao final de um Swarm Run (ou Agent Mode run), extrair padrões do que aconteceu,
|
|
5
|
+
detectar lições reutilizáveis e candidatas a novas skills, atualizar LESSONS.md com dedup,
|
|
6
|
+
e enfileirar na PROMOTION-QUEUE.md as skills candidatas para revisão humana.
|
|
7
|
+
</objective>
|
|
8
|
+
|
|
9
|
+
<context>
|
|
10
|
+
- Invocado por `swarm-mode.md` Fase 8 (após Verifier) ou por `/oxe-verify` com `--retro`.
|
|
11
|
+
- Reaproveitamento: LESSONS.md taxonomy e regras de dedup de `.oxe/global/LESSONS.md`.
|
|
12
|
+
- Reaproveitamento: `LessonPromoted` event type de `packages/runtime/src/events/catalog.ts`.
|
|
13
|
+
- Não modifica arquivos de código. Apenas lê run artifacts e grava em `.oxe/learning/` e `.oxe/global/`.
|
|
14
|
+
- Parâmetros de entrada: `run_id`, `mode` (swarm|agent).
|
|
15
|
+
</context>
|
|
16
|
+
|
|
17
|
+
---
|
|
18
|
+
|
|
19
|
+
## Fase 1 — Coleta de evidências do run
|
|
20
|
+
|
|
21
|
+
Ler os seguintes artefatos do run (pular silenciosamente se não existirem):
|
|
22
|
+
|
|
23
|
+
**Para Swarm Mode:**
|
|
24
|
+
- `.oxe/swarm/SWARM-RUN.json` — status geral, agentes, waves
|
|
25
|
+
- `.oxe/swarm/FINAL-INTEGRATION.md` — resultado da integração
|
|
26
|
+
- `.oxe/swarm/BLOCKERS.ndjson` — bloqueios que ocorreram
|
|
27
|
+
- `.oxe/swarm/reviews/*.md` — resultados das revisões
|
|
28
|
+
- `.oxe/swarm/DECISIONS.md` — decisões tomadas pelo coordinator
|
|
29
|
+
|
|
30
|
+
**Para Agent Mode:**
|
|
31
|
+
- `.oxe/agent/AGENT-SESSION.json` — status, work_items, reconciliation
|
|
32
|
+
- `.oxe/agent/RECONCILIATION.md` — resultado final
|
|
33
|
+
|
|
34
|
+
**Sempre:**
|
|
35
|
+
- `.oxe/OBSERVATIONS.md` — observações adicionadas durante o run
|
|
36
|
+
- `.oxe/VERIFY.md` (se existir) — resultado de verificação
|
|
37
|
+
|
|
38
|
+
---
|
|
39
|
+
|
|
40
|
+
## Fase 2 — Detecção de padrões (candidatos)
|
|
41
|
+
|
|
42
|
+
Para cada evidência coletada, identificar padrões nas categorias:
|
|
43
|
+
|
|
44
|
+
| Categoria | Sinal de detecção |
|
|
45
|
+
|-----------|------------------|
|
|
46
|
+
| **blocker_pattern** | Mesmo tipo de bloqueio em 2+ tasks do mesmo run |
|
|
47
|
+
| **success_pattern** | Approach que funcionou e pode ser replicado |
|
|
48
|
+
| **anti_pattern** | Abordagem que causou revisão reprovada ou retrabalho |
|
|
49
|
+
| **file_conflict_pattern** | Conflito de file ownership que exigiu serialização |
|
|
50
|
+
| **integration_gap** | Falha na integração que não foi detectada nas tasks individuais |
|
|
51
|
+
| **scope_expansion** | Observation de tipo `new_constraint` que alargou o escopo |
|
|
52
|
+
|
|
53
|
+
Para cada padrão detectado, criar entrada em `.oxe/learning/CANDIDATES.ndjson`:
|
|
54
|
+
```json
|
|
55
|
+
{"id": "CAND-001", "type": "lesson|skill", "category": "blocker_pattern", "source_run": "swarm-YYYYMMDD-001", "pattern": "descrição do padrão detectado", "draft": "lição prescritiva em 1 frase: faça X ao invés de Y", "evidence": ["BLOCKERS.ndjson#T2", "reviews/T2-REVIEW.md"], "ts": "ISO8601"}
|
|
56
|
+
```
|
|
57
|
+
|
|
58
|
+
---
|
|
59
|
+
|
|
60
|
+
## Fase 3 — Atualização de LESSONS.md
|
|
61
|
+
|
|
62
|
+
Para cada candidato com `type = "lesson"`:
|
|
63
|
+
|
|
64
|
+
1. Verificar se já existe lição com mesma raiz (mesma categoria + padrão similar) em `.oxe/global/LESSONS.md`
|
|
65
|
+
2. **Se existe:** incrementar `Frequência` + atualizar `Última aplicação` (não duplicar)
|
|
66
|
+
3. **Se não existe:** adicionar nova entrada `C-NN-L1` com:
|
|
67
|
+
- `Lição`: texto prescritivo (o que fazer, não o que aconteceu)
|
|
68
|
+
- `Raiz`: causa raiz identificada
|
|
69
|
+
- `Tipo`: spec | plan | execute | verify | process | agents
|
|
70
|
+
- `Aplicar em`: qual workflow consome esta lição
|
|
71
|
+
- `Status`: ativo
|
|
72
|
+
- `Frequência`: 1
|
|
73
|
+
- `Impacto`: alto | médio | baixo (baseado no severity do padrão)
|
|
74
|
+
- `Última aplicação`: data do run
|
|
75
|
+
|
|
76
|
+
Atualizar índice (tabela de conteúdos) em LESSONS.md.
|
|
77
|
+
|
|
78
|
+
---
|
|
79
|
+
|
|
80
|
+
## Fase 4 — Atualização de lessons-metrics.json
|
|
81
|
+
|
|
82
|
+
Se `.oxe/lessons-metrics.json` existir (ou criar a partir do template):
|
|
83
|
+
|
|
84
|
+
Para cada lição atualizada ou criada:
|
|
85
|
+
```json
|
|
86
|
+
{
|
|
87
|
+
"id": "C-NN-L1",
|
|
88
|
+
"cycle": "C-NN",
|
|
89
|
+
"applied_cycles": ["swarm-YYYYMMDD-001"],
|
|
90
|
+
"outcomes": [{"run_id": "...", "result": "success|partial|failure", "ts": "..."}],
|
|
91
|
+
"success_rate": 1.0,
|
|
92
|
+
"status": "active",
|
|
93
|
+
"deprecation_threshold": 0.5
|
|
94
|
+
}
|
|
95
|
+
```
|
|
96
|
+
|
|
97
|
+
**Regra de depreciação automática:** se `success_rate < 0.5` e `apply_count >= 3` → `status = deprecated`.
|
|
98
|
+
|
|
99
|
+
---
|
|
100
|
+
|
|
101
|
+
## Fase 5 — Candidatas a Skill
|
|
102
|
+
|
|
103
|
+
Para candidatos com `type = "skill"` (padrões recorrentes que podem virar persona/capability):
|
|
104
|
+
|
|
105
|
+
Verificar critérios de promoção:
|
|
106
|
+
- Padrão apareceu em 2+ runs diferentes, OU
|
|
107
|
+
- Padrão é um `success_pattern` com alta reprodutibilidade
|
|
108
|
+
|
|
109
|
+
Adicionar à `.oxe/learning/PROMOTION-QUEUE.md`:
|
|
110
|
+
```markdown
|
|
111
|
+
## SKILL-001 — <nome sugerido>
|
|
112
|
+
|
|
113
|
+
**Fonte:** <run_id>
|
|
114
|
+
**Categoria:** <category>
|
|
115
|
+
**Padrão:** <descrição>
|
|
116
|
+
**Draft do skill:** <esboço do comportamento que o skill encapsularia>
|
|
117
|
+
**Ação:** [ ] Revisar e promover com `/oxe-skill new <id>`
|
|
118
|
+
```
|
|
119
|
+
|
|
120
|
+
---
|
|
121
|
+
|
|
122
|
+
## Fase 6 — Atualização de REPO-MEMORY.md
|
|
123
|
+
|
|
124
|
+
Se o run gerou decisões arquiteturais ou pitfalls novos:
|
|
125
|
+
|
|
126
|
+
Adicionar entradas em `.oxe/memory/REPO-MEMORY.md`:
|
|
127
|
+
- Seção "Decisões Arquiteturais" para decisões tomadas pelo Coordinator
|
|
128
|
+
- Seção "Pitfalls Conhecidos" para blockers que ocorreram
|
|
129
|
+
- Seção "Padrões Validados" para success_patterns confirmados
|
|
130
|
+
|
|
131
|
+
Se o arquivo não existir, criá-lo a partir de `.oxe/templates/REPO-MEMORY.template.md`.
|
|
132
|
+
|
|
133
|
+
---
|
|
134
|
+
|
|
135
|
+
## Fase 7 — Eventos
|
|
136
|
+
|
|
137
|
+
Emitir para `.oxe/OXE-EVENTS.ndjson`:
|
|
138
|
+
```json
|
|
139
|
+
{"type": "RetroPublished", "payload": {"run_id": "...", "lessons_added": N, "lessons_updated": M}}
|
|
140
|
+
{"type": "LessonPromoted", "payload": {"lesson_id": "C-NN-L1", "frequency": N, "impact": "alto"}}
|
|
141
|
+
```
|
|
142
|
+
|
|
143
|
+
---
|
|
144
|
+
|
|
145
|
+
## Saída para o usuário (quando invocado explicitamente)
|
|
146
|
+
|
|
147
|
+
```
|
|
148
|
+
Learning Kernel — concluído
|
|
149
|
+
Run: <run_id>
|
|
150
|
+
Candidatos detectados: N
|
|
151
|
+
Lições adicionadas: X | atualizadas: Y | depreciadas: Z
|
|
152
|
+
Skills candidatas para revisão: M (ver .oxe/learning/PROMOTION-QUEUE.md)
|
|
153
|
+
REPO-MEMORY atualizado: sim | não
|
|
154
|
+
```
|
|
155
|
+
|
|
156
|
+
<success_criteria>
|
|
157
|
+
- [ ] CANDIDATES.ndjson populado com padrões detectados do run.
|
|
158
|
+
- [ ] LESSONS.md atualizado com dedup correto (sem duplicatas, Frequência incrementada).
|
|
159
|
+
- [ ] lessons-metrics.json atualizado com outcomes e success_rate.
|
|
160
|
+
- [ ] PROMOTION-QUEUE.md com skills candidatas (se houver).
|
|
161
|
+
- [ ] REPO-MEMORY.md atualizado com decisões e pitfalls.
|
|
162
|
+
- [ ] Eventos LessonPromoted emitidos.
|
|
163
|
+
- [ ] Nenhum arquivo de código do projeto modificado.
|
|
164
|
+
</success_criteria>
|
package/oxe/workflows/help.md
CHANGED
|
@@ -217,6 +217,7 @@ Um pedido → **um** destino (sem gerar contrato). O agente aplica `route.md` ou
|
|
|
217
217
|
|
|
218
218
|
| Se o utilizador disser (exemplos) | Comando / ação |
|
|
219
219
|
|-----------------------------------|----------------|
|
|
220
|
+
| **Objetivo de implementação** (“cria X”, “implementa Y”, “adiciona Z”, “corrige W”, “desenvolve N”) | `/oxe <objetivo>` → Conductor decide automaticamente Agent Mode (simples/médio) ou Swarm Mode (complexo) |
|
|
220
221
|
| Não sei que passo OXE sou / “o que faço agora?” | `/oxe` ou `npx oxe-cc status` |
|
|
221
222
|
| Quero entender rapidamente a situação real da trilha atual | `/oxe “pergunta”` |
|
|
222
223
|
| Acabei de clonar / falta OXE no projeto | `npx oxe-cc@latest` (ou `oxe-cc`) na raiz do repo |
|
|
@@ -0,0 +1,163 @@
|
|
|
1
|
+
# OXE — Workflow: memory (Memory Kernel)
|
|
2
|
+
|
|
3
|
+
<objective>
|
|
4
|
+
Protocolo de recuperação de memória para o Conductor Agent.
|
|
5
|
+
Lê as 4 camadas de memória do OXE na ordem correta, filtra por relevância ao objetivo atual
|
|
6
|
+
e retorna um context pack para injeção antes de qualquer execução (Agent Mode ou Swarm Mode).
|
|
7
|
+
</objective>
|
|
8
|
+
|
|
9
|
+
<context>
|
|
10
|
+
- Invocado por `conduct.md` Fase 2 (Memory Retrieval).
|
|
11
|
+
- Não modifica artefatos de projeto. Apenas lê e grava em `.oxe/memory/retrieved/`.
|
|
12
|
+
- Reaproveitamento: `buildMemoryLayers()` em `bin/lib/oxe-operational.cjs:2364` define a ordem das camadas.
|
|
13
|
+
- Reaproveitamento: `extractSemanticFragment()` em `bin/lib/oxe-context-engine.cjs` para extração filtrada.
|
|
14
|
+
- Parâmetros de entrada: `intent_tags`, `phase` (conduct|spec|plan|execute|verify), `objective`.
|
|
15
|
+
</context>
|
|
16
|
+
|
|
17
|
+
---
|
|
18
|
+
|
|
19
|
+
## Camadas de memória (ordem de leitura)
|
|
20
|
+
|
|
21
|
+
| # | Camada | Arquivo | Conteúdo |
|
|
22
|
+
|---|--------|---------|----------|
|
|
23
|
+
| 1 | runtime_state | `.oxe/STATE.md` | Fase atual, sessão ativa, run ativo |
|
|
24
|
+
| 2 | session_memory | `.oxe/<session>/SESSION.md` | Contexto da sessão ativa (se existir) |
|
|
25
|
+
| 3 | project_memory | `.oxe/memory/REPO-MEMORY.md` | Decisões cross-session, pitfalls, preferências |
|
|
26
|
+
| 4 | lessons | `.oxe/global/LESSONS.md` | Lições de ciclos anteriores |
|
|
27
|
+
| 5 | observations | `.oxe/OBSERVATIONS.md` | Observações pendentes |
|
|
28
|
+
|
|
29
|
+
---
|
|
30
|
+
|
|
31
|
+
## Fase 1 — Leitura das camadas
|
|
32
|
+
|
|
33
|
+
Para cada camada, verificar se o arquivo existe. Se não existir, pular silenciosamente.
|
|
34
|
+
|
|
35
|
+
**Filtro de relevância:** para cada camada, extrair apenas seções que contenham pelo menos uma das `intent_tags` no texto, ou que estejam marcadas com `Aplicar em` compatível com a `phase` atual.
|
|
36
|
+
|
|
37
|
+
**Para LESSONS.md:** filtrar por:
|
|
38
|
+
- `Status: ativo`
|
|
39
|
+
- `Impacto: alto` (prioridade máxima) ou `Frequência >= 2` (lições recorrentes)
|
|
40
|
+
- `Aplicar em` contém a `phase` atual
|
|
41
|
+
|
|
42
|
+
**Para OBSERVATIONS.md:** filtrar por:
|
|
43
|
+
- `Status: pendente`
|
|
44
|
+
- `Impacto` inclui a `phase` atual ou `all`
|
|
45
|
+
|
|
46
|
+
---
|
|
47
|
+
|
|
48
|
+
## Fase 2 — Ranking por relevância
|
|
49
|
+
|
|
50
|
+
Para cada fragmento extraído, atribuir score de relevância:
|
|
51
|
+
|
|
52
|
+
| Critério | Score |
|
|
53
|
+
|---------|-------|
|
|
54
|
+
| Tag exata em intent_tags | +3 |
|
|
55
|
+
| Impacto: alto | +2 |
|
|
56
|
+
| Frequência >= 3 | +2 |
|
|
57
|
+
| Phase match exato | +2 |
|
|
58
|
+
| Frequência >= 2 | +1 |
|
|
59
|
+
| Menção ao objetivo (palavras-chave) | +1 |
|
|
60
|
+
|
|
61
|
+
Ordenar fragmentos por score decrescente. Manter top-10 para injeção (ou todos se < 10).
|
|
62
|
+
|
|
63
|
+
---
|
|
64
|
+
|
|
65
|
+
## Fase 3 — Geração do Context Pack
|
|
66
|
+
|
|
67
|
+
Gerar arquivo de injeção baseado no mode:
|
|
68
|
+
|
|
69
|
+
**Agent Mode** → `.oxe/agent/MEMORY-INJECTIONS.md`
|
|
70
|
+
**Swarm Mode** → `.oxe/swarm/DECISIONS.md` (seção "Contexto de Memória")
|
|
71
|
+
|
|
72
|
+
Formato do context pack:
|
|
73
|
+
```markdown
|
|
74
|
+
## Contexto de Memória — <phase> / <timestamp>
|
|
75
|
+
|
|
76
|
+
**Objetivo:** <texto>
|
|
77
|
+
**Intent Tags:** <lista>
|
|
78
|
+
**Fontes:** <camadas lidas>
|
|
79
|
+
|
|
80
|
+
### Lições aplicáveis
|
|
81
|
+
<fragmentos de LESSONS.md ordenados por relevância>
|
|
82
|
+
|
|
83
|
+
### Pitfalls conhecidos
|
|
84
|
+
<fragmentos de REPO-MEMORY.md relevantes>
|
|
85
|
+
|
|
86
|
+
### Observações pendentes
|
|
87
|
+
<fragmentos de OBSERVATIONS.md com impacto na fase atual>
|
|
88
|
+
|
|
89
|
+
### Estado atual
|
|
90
|
+
<fragmento de STATE.md>
|
|
91
|
+
```
|
|
92
|
+
|
|
93
|
+
---
|
|
94
|
+
|
|
95
|
+
## Fase 4 — Snapshot rastreável
|
|
96
|
+
|
|
97
|
+
Gravar snapshot do contexto injetado em `.oxe/memory/retrieved/<phase>.md` para auditoria.
|
|
98
|
+
|
|
99
|
+
Se o diretório `.oxe/memory/retrieved/` não existir, criar.
|
|
100
|
+
|
|
101
|
+
---
|
|
102
|
+
|
|
103
|
+
## Estrutura `.oxe/memory/REPO-MEMORY.md`
|
|
104
|
+
|
|
105
|
+
Quando criado pela primeira vez (após primeiro swarm run completo), deve seguir:
|
|
106
|
+
|
|
107
|
+
```markdown
|
|
108
|
+
# Memória do Repositório
|
|
109
|
+
|
|
110
|
+
> Memória cross-session. Atualizada automaticamente pelo Learning Kernel ao final de cada Swarm Run.
|
|
111
|
+
> Contém decisões arquiteturais, pitfalls recorrentes e preferências do projeto.
|
|
112
|
+
|
|
113
|
+
## Decisões Arquiteturais
|
|
114
|
+
|
|
115
|
+
| ID | Decisão | Contexto | Data |
|
|
116
|
+
|----|---------|----------|------|
|
|
117
|
+
|
|
118
|
+
## Pitfalls Conhecidos
|
|
119
|
+
|
|
120
|
+
| ID | Problema | Causa | Solução | Frequência |
|
|
121
|
+
|----|---------|-------|---------|-----------|
|
|
122
|
+
|
|
123
|
+
## Preferências do Projeto
|
|
124
|
+
|
|
125
|
+
| Categoria | Preferência | Fonte |
|
|
126
|
+
|-----------|------------|-------|
|
|
127
|
+
|
|
128
|
+
## Padrões Validados
|
|
129
|
+
|
|
130
|
+
| Padrão | Contexto | Data |
|
|
131
|
+
|--------|---------|------|
|
|
132
|
+
```
|
|
133
|
+
|
|
134
|
+
---
|
|
135
|
+
|
|
136
|
+
## Estrutura `.oxe/memory/MEMORY-INDEX.json`
|
|
137
|
+
|
|
138
|
+
```json
|
|
139
|
+
{
|
|
140
|
+
"updated_at": "ISO8601",
|
|
141
|
+
"entries": [
|
|
142
|
+
{
|
|
143
|
+
"id": "MEM-001",
|
|
144
|
+
"type": "lesson | pitfall | decision | preference | pattern",
|
|
145
|
+
"phase": ["spec", "plan", "execute", "verify", "conduct"],
|
|
146
|
+
"relevance_tags": ["backend", "auth"],
|
|
147
|
+
"source": ".oxe/global/LESSONS.md#C-01-L1",
|
|
148
|
+
"summary": "Uma frase resumindo o conteúdo",
|
|
149
|
+
"created_at": "ISO8601",
|
|
150
|
+
"last_applied": "ISO8601",
|
|
151
|
+
"apply_count": 2
|
|
152
|
+
}
|
|
153
|
+
]
|
|
154
|
+
}
|
|
155
|
+
```
|
|
156
|
+
|
|
157
|
+
<success_criteria>
|
|
158
|
+
- [ ] Camadas lidas na ordem correta (runtime_state → session → project → lessons → observations).
|
|
159
|
+
- [ ] Filtro de relevância aplicado por intent_tags e phase.
|
|
160
|
+
- [ ] Context pack gerado no caminho correto (agent ou swarm).
|
|
161
|
+
- [ ] Snapshot gravado em `.oxe/memory/retrieved/<phase>.md`.
|
|
162
|
+
- [ ] Arquivos ausentes pular silenciosamente (sem erro).
|
|
163
|
+
</success_criteria>
|
package/oxe/workflows/oxe.md
CHANGED
|
@@ -135,7 +135,8 @@ Não precisam ser decorados como comandos separados:
|
|
|
135
135
|
- **Sem input ou "next / o que faço / status":** aplicar `<modo_status>`.
|
|
136
136
|
- **"help / comandos / o que é OXE":** aplicar `<modo_help>`.
|
|
137
137
|
- **Pergunta situacional** ("onde estou?", "qual o risco?", "o que está acontecendo?", "me contextualize"): aplicar `<modo_pergunta>`.
|
|
138
|
-
- **
|
|
138
|
+
- **Objetivo de implementação** (linguagem natural descrevendo uma tarefa, feature ou mudança a executar — ex.: "cria X", "implementa Y", "adiciona Z", "corrige W"): carregar e executar diretamente `oxe/workflows/conduct.md`. O Conductor decide Agent Mode vs Swarm Mode automaticamente.
|
|
139
|
+
- **Input de roteamento simples** (pedido que mapeia diretamente a um comando OXE existente sem necessidade de execução): aplicar `<modo_route>` e, se o workflow for claro, carregar e executar diretamente o `oxe/workflows/<nome>.md` correspondente.
|
|
139
140
|
2. Nunca produzir listas longas de alternativas. Um passo, um comando, uma frase.
|
|
140
141
|
3. Se o workflow executado diretamente gerar artefatos, reportar no chat conforme esse workflow.
|
|
141
142
|
</process>
|