oxe-cc 1.9.1 → 1.10.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.
Files changed (39) hide show
  1. package/.cursor/commands/oxe-dashboard.md +2 -2
  2. package/.cursor/commands/oxe-execute.md +2 -2
  3. package/.cursor/commands/oxe-plan.md +2 -2
  4. package/.cursor/commands/oxe-quick.md +2 -2
  5. package/.cursor/commands/oxe-spec.md +3 -3
  6. package/.github/prompts/oxe-dashboard.prompt.md +2 -2
  7. package/.github/prompts/oxe-execute.prompt.md +2 -2
  8. package/.github/prompts/oxe-plan.prompt.md +2 -2
  9. package/.github/prompts/oxe-quick.prompt.md +2 -2
  10. package/.github/prompts/oxe-spec.prompt.md +3 -3
  11. package/CHANGELOG.md +14 -0
  12. package/README.md +18 -15
  13. package/bin/lib/oxe-context-engine.cjs +2 -0
  14. package/bin/lib/oxe-operational.cjs +23 -7
  15. package/bin/lib/oxe-project-health.cjs +41 -9
  16. package/bin/lib/oxe-rationality.cjs +146 -1
  17. package/bin/lib/oxe-release.cjs +31 -2
  18. package/bin/oxe-cc.js +38 -24
  19. package/commands/oxe/dashboard.md +2 -2
  20. package/commands/oxe/execute.md +2 -2
  21. package/commands/oxe/plan.md +2 -2
  22. package/commands/oxe/quick.md +2 -2
  23. package/commands/oxe/spec.md +3 -3
  24. package/docs/RELEASE-READINESS.md +2 -0
  25. package/lib/runtime/scheduler/multi-agent-coordinator.d.ts +9 -0
  26. package/lib/runtime/scheduler/multi-agent-coordinator.js +60 -9
  27. package/oxe/templates/REFERENCE-ANCHORS.template.md +12 -5
  28. package/oxe/templates/SPEC.template.md +10 -0
  29. package/oxe/templates/VISUAL-INPUTS.template.json +27 -0
  30. package/oxe/templates/VISUAL-INPUTS.template.md +36 -0
  31. package/oxe/workflows/execute.md +3 -0
  32. package/oxe/workflows/plan.md +13 -9
  33. package/oxe/workflows/references/workflow-runtime-contracts.json +44 -29
  34. package/oxe/workflows/spec.md +19 -8
  35. package/oxe/workflows/ui-spec.md +3 -2
  36. package/package.json +1 -1
  37. package/packages/runtime/package.json +1 -1
  38. package/packages/runtime/src/scheduler/multi-agent-coordinator.ts +67 -9
  39. package/vscode-extension/package.json +1 -1
@@ -9,7 +9,7 @@ oxe_tool_profile: read_heavy
9
9
  oxe_confidence_policy: explicit
10
10
  oxe_context_tier: standard
11
11
  oxe_contract_version: 2.0.0
12
- oxe_semantics_hash: ebb4473c14e5b080
12
+ oxe_semantics_hash: 13daa3c62e0efaa4
13
13
  ---
14
14
 
15
15
  OXE — visualizar runtime, ondas, checkpoints e saúde operacional da trilha
@@ -25,7 +25,7 @@ OXE — visualizar runtime, ondas, checkpoints e saúde operacional da trilha
25
25
  - **Política de confiança:** explícita
26
26
  - **Tier de contexto padrão:** padrão
27
27
  - **Versão do contrato:** 2.0.0
28
- - **Checksum semântico:** `ebb4473c14e5b080`
28
+ - **Checksum semântico:** `13daa3c62e0efaa4`
29
29
  - **Entrada de contexto prioritária:** `.oxe/context/packs/dashboard.md` e `.oxe/context/packs/dashboard.json`
30
30
  - **Regra pack-first:** ler o context pack primeiro; se estiver stale, incompleto ou ausente, cair para leitura direta com fallback explícito.
31
31
  - **Inspeção estruturada:** `oxe-cc context inspect --workflow dashboard --json`
@@ -9,7 +9,7 @@ oxe_tool_profile: write_bounded
9
9
  oxe_confidence_policy: explicit
10
10
  oxe_context_tier: standard
11
11
  oxe_contract_version: 2.0.0
12
- oxe_semantics_hash: 7b3446b77aef9353
12
+ oxe_semantics_hash: 0e6003de070d497f
13
13
  ---
14
14
 
15
15
  OXE — Executar plano (solo ou com agentes): escolha Completo (1 sessão) | Por onda | Por tarefa para controlar requisições
@@ -25,7 +25,7 @@ OXE — Executar plano (solo ou com agentes): escolha Completo (1 sessão) | Por
25
25
  - **Política de confiança:** explícita
26
26
  - **Tier de contexto padrão:** padrão
27
27
  - **Versão do contrato:** 2.0.0
28
- - **Checksum semântico:** `7b3446b77aef9353`
28
+ - **Checksum semântico:** `0e6003de070d497f`
29
29
  - **Entrada de contexto prioritária:** `.oxe/context/packs/execute.md` e `.oxe/context/packs/execute.json`
30
30
  - **Regra pack-first:** ler o context pack primeiro; se estiver stale, incompleto ou ausente, cair para leitura direta com fallback explícito.
31
31
  - **Inspeção estruturada:** `oxe-cc context inspect --workflow execute --json`
@@ -9,7 +9,7 @@ oxe_tool_profile: mixed
9
9
  oxe_confidence_policy: rubric
10
10
  oxe_context_tier: standard
11
11
  oxe_contract_version: 2.0.0
12
- oxe_semantics_hash: 5c589398cb807029
12
+ oxe_semantics_hash: 210518babb4788d0
13
13
  ---
14
14
 
15
15
  OXE — Gera .oxe/PLAN.md com verificação por tarefa
@@ -25,7 +25,7 @@ OXE — Gera .oxe/PLAN.md com verificação por tarefa
25
25
  - **Política de confiança:** rubrica
26
26
  - **Tier de contexto padrão:** padrão
27
27
  - **Versão do contrato:** 2.0.0
28
- - **Checksum semântico:** `5c589398cb807029`
28
+ - **Checksum semântico:** `210518babb4788d0`
29
29
  - **Entrada de contexto prioritária:** `.oxe/context/packs/plan.md` e `.oxe/context/packs/plan.json`
30
30
  - **Regra pack-first:** ler o context pack primeiro; se estiver stale, incompleto ou ausente, cair para leitura direta com fallback explícito.
31
31
  - **Inspeção estruturada:** `oxe-cc context inspect --workflow plan --json`
@@ -9,7 +9,7 @@ oxe_tool_profile: mixed
9
9
  oxe_confidence_policy: rubric
10
10
  oxe_context_tier: standard
11
11
  oxe_contract_version: 2.0.0
12
- oxe_semantics_hash: 2193373eb2691e0d
12
+ oxe_semantics_hash: ea0c06ca7b5c87bb
13
13
  ---
14
14
 
15
15
  OXE — Modo rápido com Plan-Driven Dynamic Agents lean: objetivo → passos → agentes por domínio (opcional) → verificar
@@ -25,7 +25,7 @@ OXE — Modo rápido com Plan-Driven Dynamic Agents lean: objetivo → passos
25
25
  - **Política de confiança:** rubrica
26
26
  - **Tier de contexto padrão:** padrão
27
27
  - **Versão do contrato:** 2.0.0
28
- - **Checksum semântico:** `2193373eb2691e0d`
28
+ - **Checksum semântico:** `ea0c06ca7b5c87bb`
29
29
  - **Entrada de contexto prioritária:** `.oxe/context/packs/quick.md` e `.oxe/context/packs/quick.json`
30
30
  - **Regra pack-first:** ler o context pack primeiro; se estiver stale, incompleto ou ausente, cair para leitura direta com fallback explícito.
31
31
  - **Inspeção estruturada:** `oxe-cc context inspect --workflow quick --json`
@@ -9,7 +9,7 @@ oxe_tool_profile: read_heavy
9
9
  oxe_confidence_policy: explicit
10
10
  oxe_context_tier: standard
11
11
  oxe_contract_version: 2.0.0
12
- oxe_semantics_hash: eea8766eab635c97
12
+ oxe_semantics_hash: 4ec66ac1e704fdbf
13
13
  ---
14
14
 
15
15
  OXE — Spec em 5 fases: perguntas → pesquisa → requisitos (R-ID v1/v2/fora) → roteiro (.oxe/ROADMAP.md) → aprovação → plan
@@ -25,7 +25,7 @@ OXE — Spec em 5 fases: perguntas → pesquisa → requisitos (R-ID v1/v2/fora)
25
25
  - **Política de confiança:** explícita
26
26
  - **Tier de contexto padrão:** padrão
27
27
  - **Versão do contrato:** 2.0.0
28
- - **Checksum semântico:** `eea8766eab635c97`
28
+ - **Checksum semântico:** `4ec66ac1e704fdbf`
29
29
  - **Entrada de contexto prioritária:** `.oxe/context/packs/spec.md` e `.oxe/context/packs/spec.json`
30
30
  - **Regra pack-first:** ler o context pack primeiro; se estiver stale, incompleto ou ausente, cair para leitura direta com fallback explícito.
31
31
  - **Inspeção estruturada:** `oxe-cc context inspect --workflow spec --json`
@@ -44,4 +44,4 @@ OXE — Spec em 5 fases: perguntas → pesquisa → requisitos (R-ID v1/v2/fora)
44
44
 
45
45
  <!-- oxe-workflow-resolution:end -->
46
46
 
47
- Usa o resto desta mensagem e ficheiros anexados como entrada do utilizador.
47
+ Usa o resto desta mensagem e ficheiros anexados como entrada do utilizador. Se houver imagem, screenshot ou mockup e o runtime suportar visão, materializar a interpretação em `VISUAL-INPUTS`; se não suportar, declarar a limitação e não inventar detalhes visuais.
@@ -11,7 +11,7 @@ oxe_tool_profile: read_heavy
11
11
  oxe_confidence_policy: explicit
12
12
  oxe_context_tier: standard
13
13
  oxe_contract_version: 2.0.0
14
- oxe_semantics_hash: ebb4473c14e5b080
14
+ oxe_semantics_hash: 13daa3c62e0efaa4
15
15
  ---
16
16
 
17
17
  <!-- oxe-reasoning-contract:start -->
@@ -25,7 +25,7 @@ oxe_semantics_hash: ebb4473c14e5b080
25
25
  - **Política de confiança:** explícita
26
26
  - **Tier de contexto padrão:** padrão
27
27
  - **Versão do contrato:** 2.0.0
28
- - **Checksum semântico:** `ebb4473c14e5b080`
28
+ - **Checksum semântico:** `13daa3c62e0efaa4`
29
29
  - **Entrada de contexto prioritária:** `.oxe/context/packs/dashboard.md` e `.oxe/context/packs/dashboard.json`
30
30
  - **Regra pack-first:** ler o context pack primeiro; se estiver stale, incompleto ou ausente, cair para leitura direta com fallback explícito.
31
31
  - **Inspeção estruturada:** `oxe-cc context inspect --workflow dashboard --json`
@@ -11,7 +11,7 @@ oxe_tool_profile: write_bounded
11
11
  oxe_confidence_policy: explicit
12
12
  oxe_context_tier: standard
13
13
  oxe_contract_version: 2.0.0
14
- oxe_semantics_hash: 7b3446b77aef9353
14
+ oxe_semantics_hash: 0e6003de070d497f
15
15
  ---
16
16
 
17
17
  <!-- oxe-reasoning-contract:start -->
@@ -25,7 +25,7 @@ oxe_semantics_hash: 7b3446b77aef9353
25
25
  - **Política de confiança:** explícita
26
26
  - **Tier de contexto padrão:** padrão
27
27
  - **Versão do contrato:** 2.0.0
28
- - **Checksum semântico:** `7b3446b77aef9353`
28
+ - **Checksum semântico:** `0e6003de070d497f`
29
29
  - **Entrada de contexto prioritária:** `.oxe/context/packs/execute.md` e `.oxe/context/packs/execute.json`
30
30
  - **Regra pack-first:** ler o context pack primeiro; se estiver stale, incompleto ou ausente, cair para leitura direta com fallback explícito.
31
31
  - **Inspeção estruturada:** `oxe-cc context inspect --workflow execute --json`
@@ -11,7 +11,7 @@ oxe_tool_profile: mixed
11
11
  oxe_confidence_policy: rubric
12
12
  oxe_context_tier: standard
13
13
  oxe_contract_version: 2.0.0
14
- oxe_semantics_hash: 5c589398cb807029
14
+ oxe_semantics_hash: 210518babb4788d0
15
15
  ---
16
16
 
17
17
  <!-- oxe-reasoning-contract:start -->
@@ -25,7 +25,7 @@ oxe_semantics_hash: 5c589398cb807029
25
25
  - **Política de confiança:** rubrica
26
26
  - **Tier de contexto padrão:** padrão
27
27
  - **Versão do contrato:** 2.0.0
28
- - **Checksum semântico:** `5c589398cb807029`
28
+ - **Checksum semântico:** `210518babb4788d0`
29
29
  - **Entrada de contexto prioritária:** `.oxe/context/packs/plan.md` e `.oxe/context/packs/plan.json`
30
30
  - **Regra pack-first:** ler o context pack primeiro; se estiver stale, incompleto ou ausente, cair para leitura direta com fallback explícito.
31
31
  - **Inspeção estruturada:** `oxe-cc context inspect --workflow plan --json`
@@ -11,7 +11,7 @@ oxe_tool_profile: mixed
11
11
  oxe_confidence_policy: rubric
12
12
  oxe_context_tier: standard
13
13
  oxe_contract_version: 2.0.0
14
- oxe_semantics_hash: 2193373eb2691e0d
14
+ oxe_semantics_hash: ea0c06ca7b5c87bb
15
15
  ---
16
16
 
17
17
  <!-- oxe-reasoning-contract:start -->
@@ -25,7 +25,7 @@ oxe_semantics_hash: 2193373eb2691e0d
25
25
  - **Política de confiança:** rubrica
26
26
  - **Tier de contexto padrão:** padrão
27
27
  - **Versão do contrato:** 2.0.0
28
- - **Checksum semântico:** `2193373eb2691e0d`
28
+ - **Checksum semântico:** `ea0c06ca7b5c87bb`
29
29
  - **Entrada de contexto prioritária:** `.oxe/context/packs/quick.md` e `.oxe/context/packs/quick.json`
30
30
  - **Regra pack-first:** ler o context pack primeiro; se estiver stale, incompleto ou ausente, cair para leitura direta com fallback explícito.
31
31
  - **Inspeção estruturada:** `oxe-cc context inspect --workflow quick --json`
@@ -11,7 +11,7 @@ oxe_tool_profile: read_heavy
11
11
  oxe_confidence_policy: explicit
12
12
  oxe_context_tier: standard
13
13
  oxe_contract_version: 2.0.0
14
- oxe_semantics_hash: eea8766eab635c97
14
+ oxe_semantics_hash: 4ec66ac1e704fdbf
15
15
  ---
16
16
 
17
17
  <!-- oxe-reasoning-contract:start -->
@@ -25,7 +25,7 @@ oxe_semantics_hash: eea8766eab635c97
25
25
  - **Política de confiança:** explícita
26
26
  - **Tier de contexto padrão:** padrão
27
27
  - **Versão do contrato:** 2.0.0
28
- - **Checksum semântico:** `eea8766eab635c97`
28
+ - **Checksum semântico:** `4ec66ac1e704fdbf`
29
29
  - **Entrada de contexto prioritária:** `.oxe/context/packs/spec.md` e `.oxe/context/packs/spec.json`
30
30
  - **Regra pack-first:** ler o context pack primeiro; se estiver stale, incompleto ou ausente, cair para leitura direta com fallback explícito.
31
31
  - **Inspeção estruturada:** `oxe-cc context inspect --workflow spec --json`
@@ -44,4 +44,4 @@ oxe_semantics_hash: eea8766eab635c97
44
44
 
45
45
  <!-- oxe-workflow-resolution:end -->
46
46
 
47
- Usa o resto desta mensagem e ficheiros anexados como entrada do utilizador.
47
+ Usa o resto desta mensagem e ficheiros anexados como entrada do utilizador. Se houver imagem, screenshot ou mockup e o runtime suportar visão, materializar a interpretação em `VISUAL-INPUTS`; se não suportar, declarar a limitação e não inventar detalhes visuais.
package/CHANGELOG.md CHANGED
@@ -4,6 +4,20 @@ Todas as versões seguem [Semantic Versioning](https://semver.org/). As mudança
4
4
 
5
5
  ---
6
6
 
7
+ ## [1.10.0] — 2026-05-05
8
+
9
+ ### Operational Maturity
10
+
11
+ Esta release amplia a prova operacional do OXE para cenários mais próximos de uso real, sem abrir novos comandos públicos.
12
+
13
+ - `test:runtime-real` passa a cobrir cenários multi-wave, multi-file, gate pendente, verify parcial e promoção bloqueada por ausência de evidência técnica
14
+ - `workspace-merge-report.json` passa a carregar `evidence_refs`, `diff_summary`, arquivos aplicados, status de verify pós-execução e próxima ação operacional por task
15
+ - `status`, `runtime status` e `runtime agents status` expõem merge readiness, blockers e próxima ação multi-agent de forma mais direta
16
+ - `workspaceMode: product_package` deixa de marcar `contextQuality` como crítico quando não há ciclo OXE ativo no próprio repositório do pacote
17
+ - smoke multi-runtime reforça Codex e Copilot VS Code com validação explícita de prompts/skills, manifesto e referências quebradas
18
+ - `doctor --release` passa a validar o conteúdo mínimo dos relatórios runtime-real e multi-agent-real da linha `1.10.0`
19
+ - `/oxe-spec` passa a ter contrato multimodal: imagens, screenshots e mockups enviados no chat devem virar `VISUAL-INPUTS.md/json`, anchors visuais e readiness bloqueante quando críticos para UI/fluxo
20
+
7
21
  ## [1.9.1] — 2026-05-04
8
22
 
9
23
  ### Multi-Agent Real
package/README.md CHANGED
@@ -7,7 +7,7 @@
7
7
  [![npm](https://img.shields.io/npm/v/oxe-cc.svg?style=flat-square)](https://www.npmjs.com/package/oxe-cc)
8
8
  [![license](https://img.shields.io/npm/l/oxe-cc.svg?style=flat-square)](LICENSE)
9
9
 
10
- **Versão:** `1.9.1` · [package.json](package.json)
10
+ **Versão:** `1.10.0` · [package.json](package.json)
11
11
 
12
12
  **Framework OXE — Orchestrated eXperience Engineering**
13
13
 
@@ -34,9 +34,10 @@ Ele se apoia em três princípios:
34
34
 
35
35
  - **Spec-driven design** — antes de escrever código, você define *o que* construir e *como saber que está pronto*. Essa especificação restringe e guia tudo o que vem depois.
36
36
  - **Context engineering** — o estado do trabalho fica em arquivos pequenos dentro de `.oxe/`, não na memória do chat. O agente lê o que precisa, quando precisa — sem sobrecarregar o contexto com decisões já tomadas.
37
- - **Lessons loop** — ao fim de cada ciclo, `/oxe-retro` extrai 3–5 lições prescritivas que o próximo spec/plan lê automaticamente. Depois de alguns ciclos, os planos ficam dramaticamente melhores porque os erros anteriores não se repetem.
38
- - **Plan-Driven Dynamic Agents** — quando há múltiplos domínios, o plano cria agentes específicos para *aquela demanda*. Agentes não são reaproveitados entre projetos ou demandas.
39
- - **Semântica de raciocínio multi-runtime** — discovery, planning, execution, review e status seguem contratos cognitivos explícitos. O mesmo workflow OXE deve gerar respostas exploratórias, decision-complete e auditáveis em Copilot, Cursor, Claude, Codex e demais runtimes suportados.
37
+ - **Lessons loop** — ao fim de cada ciclo, `/oxe-retro` extrai 3–5 lições prescritivas que o próximo spec/plan lê automaticamente. Depois de alguns ciclos, os planos ficam dramaticamente melhores porque os erros anteriores não se repetem.
38
+ - **Plan-Driven Dynamic Agents** — quando há múltiplos domínios, o plano cria agentes específicos para *aquela demanda*. Agentes não são reaproveitados entre projetos ou demandas.
39
+ - **Semântica de raciocínio multi-runtime** — discovery, planning, execution, review e status seguem contratos cognitivos explícitos. O mesmo workflow OXE deve gerar respostas exploratórias, decision-complete e auditáveis em Copilot, Cursor, Claude, Codex e demais runtimes suportados.
40
+ - **Entradas visuais rastreáveis** — imagens, screenshots e mockups enviados ao chat são interpretados pelo runtime hospedeiro quando ele tem visão, mas o OXE exige que essa interpretação vire `VISUAL-INPUTS.md/json` e anchors antes de alimentar plan/execute.
40
41
 
41
42
  O resultado: **menos requisições**, **mais coerência**, e uma experiência de engenharia orquestrada que funciona do mesmo jeito em qualquer IDE.
42
43
 
@@ -68,15 +69,16 @@ O OXE já não é só um conjunto de prompts e markdowns. Hoje ele combina:
68
69
 
69
70
  Em termos práticos, o estado operacional real agora passa por:
70
71
 
71
- - `ACTIVE-RUN.json`
72
- - `.oxe/runs/<run_id>.json`
73
- - `.oxe/runs/<run_id>/verification-manifest.json`
74
- - `.oxe/runs/<run_id>/residual-risk-ledger.json`
75
- - `.oxe/runs/<run_id>/evidence-coverage.json`
76
- - `.oxe/execution/GATES.json`
77
- - `OXE-EVENTS.ndjson`
78
-
79
- Contrato estável desta release:
72
+ - `ACTIVE-RUN.json`
73
+ - `.oxe/runs/<run_id>.json`
74
+ - `.oxe/runs/<run_id>/verification-manifest.json`
75
+ - `.oxe/runs/<run_id>/residual-risk-ledger.json`
76
+ - `.oxe/runs/<run_id>/evidence-coverage.json`
77
+ - `.oxe/runs/<run_id>/workspace-merge-report.json`
78
+ - `.oxe/execution/GATES.json`
79
+ - `OXE-EVENTS.ndjson`
80
+
81
+ Contrato estável desta release:
80
82
 
81
83
  - `execute` e `verify` são `runtime-first` quando `oxe-cc runtime` está disponível
82
84
  - `status`, `doctor`, dashboard e CLI de runtime leem o mesmo estado canónico
@@ -250,7 +252,7 @@ Cada passo lê o anterior como contexto e escreve seu artefato no escopo correto
250
252
  | Comando | O que entrega |
251
253
  |---------|--------------|
252
254
  | `/oxe` | Sem input → próximo passo. Com pergunta → situação atual (artefatos reais). Com "help" → trilha principal. |
253
- | `/oxe-spec` | **5 fases**: perguntas → pesquisa → requisitos R-ID → roteiro → aprovação. `--refresh` / `--full` fazem scan antes. `--research` ativa spike explícito. `--ui` gera UI-SPEC ao final. **Auto-reflexão semântica** automática antes da aprovação. |
255
+ | `/oxe-spec` | **5 fases**: perguntas → pesquisa → requisitos R-ID → roteiro → aprovação. `--refresh` / `--full` fazem scan antes. `--research` ativa spike explícito. `--ui` gera UI-SPEC ao final. Se houver imagem/screenshot/mockup no chat, materializa `VISUAL-INPUTS` quando o runtime suportar visão ou registra limitação explícita. |
254
256
  | `/oxe-plan` | **Test-first:** `Verificar` vem antes de `Implementar` em cada tarefa. `PLAN.md` com `## Autoavaliação do Plano` (rubrica fixa + confiança determinística). Usa investigações e capabilities como evidência. |
255
257
  | `/oxe-execute` | Execução A/B/C. Valida autoavaliação antes de implementar. `--note` registra observação. `--debug` aciona diagnóstico inline. `--deep-diagnosis` escalona para forensics. `--checkpoint "<nome>"` cria snapshot. `--iterative` ativa loop de retry. Usa `EXECUTION-RUNTIME.md`, `ACTIVE-RUN.json`, `OXE-EVENTS.ndjson`. |
256
258
  | `/oxe-verify` | Até 6 camadas: audit + critérios + decisões + coerência operacional + calibração + UAT. `--gaps` ativa Camada 5 (cobertura). `--security` ativa Camada 6 (OWASP). `--ui` inclui UI-REVIEW. `--pr` / `--diff` incluem revisão de PR. Retro automática ao fechar (`--skip-retro` para desativar). |
@@ -283,7 +285,8 @@ Estes comportamentos continuam existindo, mas agora são ativados como flags dos
283
285
  |---------------|-------------|
284
286
  | Scan / refresh do codebase | `/oxe-spec --refresh` (incremental) ou `--full` (completo) |
285
287
  | Research / spike / engenharia reversa | `/oxe-spec --research` |
286
- | Contrato UI/UX | `/oxe-spec --ui` |
288
+ | Contrato UI/UX | `/oxe-spec --ui` |
289
+ | Imagem, screenshot ou mockup como entrada de spec | anexar no chat junto com `/oxe-spec`; o OXE materializa a interpretação em `.oxe/investigations/visual/VISUAL-INPUTS.*` quando o runtime tiver visão |
287
290
  | Registrar observação durante execução | `/oxe-execute --note "texto"` |
288
291
  | Diagnóstico técnico inline | `/oxe-execute --debug` |
289
292
  | Diagnóstico pós-falha persistente | `/oxe-execute --deep-diagnosis` |
@@ -231,6 +231,8 @@ function resolveArtifactCandidates(projectRoot, activeSession) {
231
231
  reference_anchors: withFallback('reference_anchors', 'reference_anchors', scoped.referenceAnchors, base.referenceAnchors),
232
232
  fixture_pack_md: withFallback('fixture_pack_md', 'fixtures', scoped.fixturePackMd, base.fixturePackMd),
233
233
  fixture_pack_json: withFallback('fixture_pack_json', 'fixtures', scoped.fixturePackJson, base.fixturePackJson),
234
+ visual_inputs_md: withFallback('visual_inputs_md', 'visual_inputs', scoped.visualInputsMd, base.visualInputsMd),
235
+ visual_inputs_json: withFallback('visual_inputs_json', 'visual_inputs', scoped.visualInputsJson, base.visualInputsJson),
234
236
  plan_agents: withFallback('plan_agents', 'plan_agents', scoped.planAgents, base.planAgents),
235
237
  quick: withFallback('quick', 'plan', scoped.quick, base.quick),
236
238
  runtime: withFallback('runtime', 'runtime', scoped.runtime, base.runtime),
@@ -913,9 +913,11 @@ function readRuntimeMultiAgentStatus(projectRoot, activeSession, options = {}) {
913
913
  mergeBlockers: [],
914
914
  mergeReadiness: null,
915
915
  arbitrationRequired: false,
916
+ health: 'unknown',
917
+ nextAction: 'Execute ou compile uma run antes de inspecionar status multi-agent.',
916
918
  summary: null,
917
919
  };
918
- }
920
+ }
919
921
  const runDir = path.join(projectRoot, '.oxe', 'runs', runId);
920
922
  const statePath = path.join(runDir, 'multi-agent-state.json');
921
923
  const summaryPath = path.join(runDir, 'multi-agent-summary.json');
@@ -931,9 +933,21 @@ function readRuntimeMultiAgentStatus(projectRoot, activeSession, options = {}) {
931
933
  const workspaceMergeReport = runtime && typeof runtime.loadWorkspaceMergeReport === 'function'
932
934
  ? runtime.loadWorkspaceMergeReport(projectRoot, runId)
933
935
  : readJsonIfExists(workspaceMergePath);
934
- const handoffs = readJsonIfExists(handoffsPath);
935
- const arbitrationResults = readJsonIfExists(arbitrationPath);
936
- return {
936
+ const handoffs = readJsonIfExists(handoffsPath);
937
+ const arbitrationResults = readJsonIfExists(arbitrationPath);
938
+ const mergeBlockers = workspaceMergeReport && Array.isArray(workspaceMergeReport.blockers) ? workspaceMergeReport.blockers : [];
939
+ const mergeReadiness = workspaceMergeReport && workspaceMergeReport.merge_readiness ? workspaceMergeReport.merge_readiness : null;
940
+ let nextAction = null;
941
+ if (!state) {
942
+ nextAction = 'Execute runtime com plan-agents.json válido para materializar o estado multi-agent.';
943
+ } else if (mergeBlockers.length > 0) {
944
+ nextAction = 'Resolva os merge blockers do workspace antes de promover ou aplicar novos resultados.';
945
+ } else if (mergeReadiness === 'partial') {
946
+ nextAction = 'Conclua verify/evidence pós-merge ou aplique os worktrees pendentes antes de fechar a run.';
947
+ } else if (mergeReadiness === 'ready') {
948
+ nextAction = 'Multi-agent merge pronto; avance para runtime verify ou promotion conforme o ciclo.';
949
+ }
950
+ return {
937
951
  path: statePath,
938
952
  enabled: Boolean(state),
939
953
  runId,
@@ -942,13 +956,15 @@ function readRuntimeMultiAgentStatus(projectRoot, activeSession, options = {}) {
942
956
  agents: state && Array.isArray(state.agent_results) ? state.agent_results : [],
943
957
  ownership: state && Array.isArray(state.ownership) ? state.ownership : [],
944
958
  orphanReassignments: state && Array.isArray(state.orphan_reassignments) ? state.orphan_reassignments : [],
945
- handoffs: Array.isArray(handoffs) ? handoffs : [],
959
+ handoffs: Array.isArray(handoffs) ? handoffs : [],
946
960
  arbitrationResults: Array.isArray(arbitrationResults) ? arbitrationResults : [],
947
961
  workspaceMergeReport: workspaceMergeReport || null,
948
962
  worktrees: workspaceMergeReport && Array.isArray(workspaceMergeReport.records) ? workspaceMergeReport.records : [],
949
- mergeBlockers: workspaceMergeReport && Array.isArray(workspaceMergeReport.blockers) ? workspaceMergeReport.blockers : [],
950
- mergeReadiness: workspaceMergeReport && workspaceMergeReport.merge_readiness ? workspaceMergeReport.merge_readiness : null,
963
+ mergeBlockers,
964
+ mergeReadiness,
951
965
  arbitrationRequired: Boolean(workspaceMergeReport && workspaceMergeReport.arbitration_required),
966
+ health: summary && summary.health ? summary.health : (mergeBlockers.length > 0 ? 'degraded' : 'unknown'),
967
+ nextAction,
952
968
  summary: summary || null,
953
969
  };
954
970
  }
@@ -658,6 +658,8 @@ function oxePaths(target) {
658
658
  referenceAnchors: path.join(oxe, 'REFERENCE-ANCHORS.md'),
659
659
  fixturePackMd: path.join(oxe, 'FIXTURE-PACK.md'),
660
660
  fixturePackJson: path.join(oxe, 'FIXTURE-PACK.json'),
661
+ visualInputsMd: path.join(oxe, 'investigations', 'visual', 'VISUAL-INPUTS.md'),
662
+ visualInputsJson: path.join(oxe, 'investigations', 'visual', 'VISUAL-INPUTS.json'),
661
663
  quick: path.join(oxe, 'QUICK.md'),
662
664
  verify: path.join(oxe, 'VERIFY.md'),
663
665
  discuss: path.join(oxe, 'DISCUSS.md'),
@@ -700,6 +702,8 @@ function scopedOxePaths(target, activeSession) {
700
702
  referenceAnchors: path.join(sessionRoot, 'plan', 'REFERENCE-ANCHORS.md'),
701
703
  fixturePackMd: path.join(sessionRoot, 'plan', 'FIXTURE-PACK.md'),
702
704
  fixturePackJson: path.join(sessionRoot, 'plan', 'FIXTURE-PACK.json'),
705
+ visualInputsMd: path.join(sessionRoot, 'research', 'investigations', 'visual', 'VISUAL-INPUTS.md'),
706
+ visualInputsJson: path.join(sessionRoot, 'research', 'investigations', 'visual', 'VISUAL-INPUTS.json'),
703
707
  quick: path.join(sessionRoot, 'plan', 'QUICK.md'),
704
708
  verify: path.join(sessionRoot, 'verification', 'VERIFY.md'),
705
709
  summary: path.join(sessionRoot, 'verification', 'SUMMARY.md'),
@@ -741,6 +745,8 @@ function resolvedReadableOxePaths(target, activeSession) {
741
745
  referenceAnchors: preferScoped('referenceAnchors'),
742
746
  fixturePackMd: preferScoped('fixturePackMd'),
743
747
  fixturePackJson: preferScoped('fixturePackJson'),
748
+ visualInputsMd: preferScoped('visualInputsMd'),
749
+ visualInputsJson: preferScoped('visualInputsJson'),
744
750
  quick: preferScoped('quick'),
745
751
  verify: preferScoped('verify'),
746
752
  summary: preferScoped('summary'),
@@ -1317,8 +1323,8 @@ function listOxePromptFiles(dir) {
1317
1323
  if (!fs.existsSync(dir)) return [];
1318
1324
  return fs
1319
1325
  .readdirSync(dir, { withFileTypes: true })
1320
- .filter((entry) => entry.isFile() && /^oxe-.*\.prompt\.md$/i.test(entry.name))
1321
- .map((entry) => path.join(dir, entry.name))
1326
+ .filter((entry) => entry.isFile() && (entry.name === 'oxe.prompt.md' || /^oxe-.*\.prompt\.md$/i.test(entry.name)))
1327
+ .map((entry) => path.join(dir, entry.name))
1322
1328
  .sort();
1323
1329
  }
1324
1330
 
@@ -1439,9 +1445,9 @@ function copilotIntegrationReport(target) {
1439
1445
  if (legacyHasOxeBlock) {
1440
1446
  warnings.push('Bloco OXE legado detectado em ~/.copilot/copilot-instructions.md');
1441
1447
  }
1442
- if (legacyHasOtherManagedBlocks) {
1443
- warnings.push('copilot-instructions global contém blocos geridos por outro framework; isso pode contaminar respostas do Copilot');
1444
- }
1448
+ if (legacyHasOtherManagedBlocks) {
1449
+ warnings.push('copilot-instructions global contém blocos geridos por outro framework; isso pode contaminar respostas do Copilot — execute `oxe-cc uninstall --copilot-legacy-clean` se quiser limpar o legado global.');
1450
+ }
1445
1451
  if (!manifestRaw.ok && fs.existsSync(workspace.manifest)) {
1446
1452
  warnings.push(`Manifesto Copilot VS Code inválido: ${manifestRaw.error}`);
1447
1453
  } else if (!fs.existsSync(workspace.manifest) && workspacePromptFiles.length > 0) {
@@ -1856,11 +1862,14 @@ function planSelfEvaluationWarnings(planPath, threshold) {
1856
1862
  * implementationPackReady: boolean,
1857
1863
  * referenceAnchorsReady: boolean,
1858
1864
  * fixturePackReady: boolean,
1865
+ * visualInputReadiness?: string,
1866
+ * visualInputsReady?: boolean,
1859
1867
  * executionRationalityReady: boolean,
1860
1868
  * criticalExecutionGaps: string[],
1861
1869
  * implementationPack: { path?: string | null, tasks?: unknown[] } | null,
1862
1870
  * referenceAnchors: { path?: string | null, anchors?: unknown[], missingCriticalCount?: number } | null,
1863
1871
  * fixturePack: { path?: string | null, fixtures?: unknown[] } | null,
1872
+ * visualInputs?: { path?: string | null, inputCount?: number, criticalInputCount?: number } | null,
1864
1873
  * }} summary
1865
1874
  * @returns {string[]}
1866
1875
  */
@@ -1877,6 +1886,9 @@ function executionRationalityWarningsFromSummary(summary) {
1877
1886
  if (!summary.fixturePackReady) {
1878
1887
  warns.push(`FIXTURE-PACK não está pronto em ${summary.fixturePack && summary.fixturePack.path ? summary.fixturePack.path : '.oxe/FIXTURE-PACK.json'}`);
1879
1888
  }
1889
+ if (summary.visualInputReadiness === 'blocked') {
1890
+ warns.push(`VISUAL-INPUTS bloqueado em ${summary.visualInputs && summary.visualInputs.path ? summary.visualInputs.path : '.oxe/investigations/visual/VISUAL-INPUTS.json'}`);
1891
+ }
1880
1892
  if (Array.isArray(summary.criticalExecutionGaps) && summary.criticalExecutionGaps.length) {
1881
1893
  warns.push(...summary.criticalExecutionGaps);
1882
1894
  }
@@ -2191,6 +2203,9 @@ function suggestNextStep(target, cfg = {}) {
2191
2203
  referenceAnchors: p.referenceAnchors,
2192
2204
  fixturePackJson: p.fixturePackJson,
2193
2205
  fixturePackMd: p.fixturePackMd,
2206
+ spec: p.spec,
2207
+ visualInputsJson: p.visualInputsJson,
2208
+ visualInputsMd: p.visualInputsMd,
2194
2209
  });
2195
2210
  if (
2196
2211
  shouldEnforceExecutionRationalityGate(phase)
@@ -2368,6 +2383,9 @@ function buildHealthReport(target) {
2368
2383
  referenceAnchors: p.referenceAnchors,
2369
2384
  fixturePackJson: p.fixturePackJson,
2370
2385
  fixturePackMd: p.fixturePackMd,
2386
+ spec: p.spec,
2387
+ visualInputsJson: p.visualInputsJson,
2388
+ visualInputsMd: p.visualInputsMd,
2371
2389
  });
2372
2390
  const suppressExecutionWorkspaceGates = shouldSuppressExecutionWorkspaceGates(
2373
2391
  workspaceInfo.workspaceMode,
@@ -2520,10 +2538,22 @@ function buildHealthReport(target) {
2520
2538
  contextQuality.primaryStatus = contextPacks[firstWorkflow].context_quality.status;
2521
2539
  }
2522
2540
  }
2523
- } catch (err) {
2524
- contextWarn.push(`Contexto — falha ao inspecionar context packs: ${err instanceof Error ? err.message : String(err)}`);
2525
- }
2526
- const semanticsManifest = readJsonFileSafe(base.runtimeSemanticsManifest);
2541
+ } catch (err) {
2542
+ contextWarn.push(`Contexto — falha ao inspecionar context packs: ${err instanceof Error ? err.message : String(err)}`);
2543
+ }
2544
+ if (suppressExecutionWorkspaceGates) {
2545
+ for (const key of Object.keys(contextPacks)) delete contextPacks[key];
2546
+ for (const key of Object.keys(packFreshness)) delete packFreshness[key];
2547
+ contextWarn.length = 0;
2548
+ activeSummaryRefs = { project: null, session: null, phase: null };
2549
+ contextQuality = {
2550
+ primaryWorkflow: 'release',
2551
+ primaryScore: null,
2552
+ primaryStatus: 'not_applicable',
2553
+ byWorkflow: {},
2554
+ };
2555
+ }
2556
+ const semanticsManifest = readJsonFileSafe(base.runtimeSemanticsManifest);
2527
2557
  const semanticsAudit = runtimeSemantics.auditRuntimeTargets(target);
2528
2558
  /** @type {string[]} */
2529
2559
  const semanticsWarn = [];
@@ -2626,6 +2656,8 @@ function buildHealthReport(target) {
2626
2656
  implementationPackReady: executionRationality.implementationPackReady,
2627
2657
  referenceAnchorsReady: executionRationality.referenceAnchorsReady,
2628
2658
  fixturePackReady: executionRationality.fixturePackReady,
2659
+ visualInputReadiness: executionRationality.visualInputReadiness,
2660
+ visualInputsReady: executionRationality.visualInputsReady,
2629
2661
  executionRationalityReady: executionRationality.executionRationalityReady,
2630
2662
  criticalExecutionGaps: executionRationality.criticalExecutionGaps,
2631
2663
  executionRationality,