oxe-cc 1.4.1 → 1.5.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/.cursor/commands/oxe-verify-audit.md +46 -0
- package/.cursor/commands/oxe-workflow-authoring.md +47 -0
- package/.github/prompts/oxe-compact.prompt.md +1 -1
- package/.github/prompts/oxe-plan-agent.prompt.md +1 -0
- package/.github/prompts/oxe-verify-audit.prompt.md +46 -0
- package/.github/prompts/oxe-workflow-authoring.prompt.md +47 -0
- package/.github/workflows/ci.yml +1 -0
- package/.github/workflows/release.yml +1 -0
- package/AGENTS.md +3 -1
- package/CHANGELOG.md +25 -0
- package/QUICKSTART.md +99 -0
- package/README.md +19 -10
- package/bin/lib/oxe-install-resolve.cjs +10 -0
- package/bin/lib/oxe-operational.cjs +34 -28
- package/bin/lib/oxe-project-health.cjs +38 -6
- package/bin/lib/oxe-release.cjs +423 -0
- package/bin/oxe-cc.js +389 -294
- package/commands/oxe/verify-audit.md +50 -0
- package/commands/oxe/workflow-authoring.md +50 -0
- package/docs/INCIDENT-PLAYBOOK.md +181 -0
- package/docs/RELEASE-READINESS.md +46 -0
- package/docs/ROLES.md +129 -0
- package/docs/RUNTIME-SMOKE-MATRIX.md +128 -0
- package/docs/TEAM-ADOPTION.md +153 -0
- package/docs/WALKTHROUGH.md +241 -0
- package/lib/runtime/scheduler/multi-agent-coordinator.d.ts +28 -0
- package/lib/runtime/scheduler/multi-agent-coordinator.js +152 -26
- package/lib/sdk/README.md +2 -0
- package/lib/sdk/index.cjs +22 -8
- package/lib/sdk/index.d.ts +60 -16
- package/oxe/templates/config.template.json +1 -0
- package/package.json +28 -20
- package/packages/runtime/package.json +1 -1
- package/packages/runtime/src/scheduler/multi-agent-coordinator.ts +357 -193
- package/vscode-extension/oxe-agents-1.5.0.vsix +0 -0
- package/vscode-extension/package.json +1 -1
|
@@ -0,0 +1,46 @@
|
|
|
1
|
+
---
|
|
2
|
+
description: "OXE — Auditoria adversarial de VERIFY.md (Verify Auditor)"
|
|
3
|
+
oxe_workflow_slug: verify-audit
|
|
4
|
+
oxe_reasoning_mode: review
|
|
5
|
+
oxe_question_policy: none
|
|
6
|
+
oxe_output_contract: findings
|
|
7
|
+
oxe_tool_profile: review_heavy
|
|
8
|
+
oxe_confidence_policy: explicit
|
|
9
|
+
oxe_context_tier: standard
|
|
10
|
+
oxe_contract_version: 2.0.0
|
|
11
|
+
oxe_semantics_hash: da71d7eafdce81aa
|
|
12
|
+
---
|
|
13
|
+
|
|
14
|
+
OXE — Auditoria adversarial de VERIFY.md (Verify Auditor)
|
|
15
|
+
|
|
16
|
+
<!-- oxe-reasoning-contract:start -->
|
|
17
|
+
|
|
18
|
+
**Contrato de raciocínio OXE deste comando**
|
|
19
|
+
- **Workflow:** verify-audit
|
|
20
|
+
- **Modo:** revisão
|
|
21
|
+
- **Perguntas:** nenhuma
|
|
22
|
+
- **Saída esperada:** achados
|
|
23
|
+
- **Perfil de ferramentas:** revisão intensa
|
|
24
|
+
- **Política de confiança:** explícita
|
|
25
|
+
- **Tier de contexto padrão:** padrão
|
|
26
|
+
- **Versão do contrato:** 2.0.0
|
|
27
|
+
- **Checksum semântico:** `da71d7eafdce81aa`
|
|
28
|
+
- **Entrada de contexto prioritária:** `.oxe/context/packs/verify-audit.md` e `.oxe/context/packs/verify-audit.json`
|
|
29
|
+
- **Regra pack-first:** ler o context pack primeiro; se estiver stale, incompleto ou ausente, cair para leitura direta com fallback explícito.
|
|
30
|
+
- **Inspeção estruturada:** `oxe-cc context inspect --workflow verify-audit --json`
|
|
31
|
+
- Apresentar findings primeiro, ordenados por severidade e evidência.
|
|
32
|
+
- Separar bug, risco, regressão e lacuna de teste.
|
|
33
|
+
- Se não houver findings, declarar isso explicitamente e listar riscos residuais.
|
|
34
|
+
- **Seções esperadas:** Findings · Perguntas abertas · Riscos residuais · Resumo
|
|
35
|
+
- **Bloqueios formais:** missing:state
|
|
36
|
+
- **Referência canónica:** `oxe/workflows/references/reasoning-review.md`
|
|
37
|
+
|
|
38
|
+
<!-- oxe-reasoning-contract:end -->
|
|
39
|
+
|
|
40
|
+
<!-- oxe-workflow-resolution:start -->
|
|
41
|
+
|
|
42
|
+
**Resolução do workflow canónico:** a partir do CWD atual, subir diretórios até encontrar .oxe/workflows/verify-audit.md ou oxe/workflows/verify-audit.md. Ler e aplicar integralmente o primeiro ficheiro encontrado. Não assumir que o CWD já é a raiz do repositório. Se nenhum existir, reportar os paths tentados e parar.
|
|
43
|
+
|
|
44
|
+
<!-- oxe-workflow-resolution:end -->
|
|
45
|
+
|
|
46
|
+
Opera com contexto propositalmente restrito: só `SPEC.md` (critérios A*) e `VERIFY.md`. Escreve a seção `## Auditoria Adversarial` no VERIFY.md com resultado APROVADO / CONDICIONADO / REPROVADO.
|
|
@@ -0,0 +1,47 @@
|
|
|
1
|
+
---
|
|
2
|
+
description: "OXE — Revisa um workflow contra o guia de autoria"
|
|
3
|
+
argument-hint: "<path/to/workflow.md>"
|
|
4
|
+
oxe_workflow_slug: workflow-authoring
|
|
5
|
+
oxe_reasoning_mode: review
|
|
6
|
+
oxe_question_policy: none
|
|
7
|
+
oxe_output_contract: findings
|
|
8
|
+
oxe_tool_profile: review_heavy
|
|
9
|
+
oxe_confidence_policy: explicit
|
|
10
|
+
oxe_context_tier: standard
|
|
11
|
+
oxe_contract_version: 2.0.0
|
|
12
|
+
oxe_semantics_hash: 430a364fe5aa3494
|
|
13
|
+
---
|
|
14
|
+
|
|
15
|
+
OXE — Revisa um workflow contra o guia de autoria
|
|
16
|
+
|
|
17
|
+
<!-- oxe-reasoning-contract:start -->
|
|
18
|
+
|
|
19
|
+
**Contrato de raciocínio OXE deste comando**
|
|
20
|
+
- **Workflow:** workflow-authoring
|
|
21
|
+
- **Modo:** revisão
|
|
22
|
+
- **Perguntas:** nenhuma
|
|
23
|
+
- **Saída esperada:** achados
|
|
24
|
+
- **Perfil de ferramentas:** revisão intensa
|
|
25
|
+
- **Política de confiança:** explícita
|
|
26
|
+
- **Tier de contexto padrão:** padrão
|
|
27
|
+
- **Versão do contrato:** 2.0.0
|
|
28
|
+
- **Checksum semântico:** `430a364fe5aa3494`
|
|
29
|
+
- **Entrada de contexto prioritária:** `.oxe/context/packs/workflow-authoring.md` e `.oxe/context/packs/workflow-authoring.json`
|
|
30
|
+
- **Regra pack-first:** ler o context pack primeiro; se estiver stale, incompleto ou ausente, cair para leitura direta com fallback explícito.
|
|
31
|
+
- **Inspeção estruturada:** `oxe-cc context inspect --workflow workflow-authoring --json`
|
|
32
|
+
- Apresentar findings primeiro, ordenados por severidade e evidência.
|
|
33
|
+
- Separar bug, risco, regressão e lacuna de teste.
|
|
34
|
+
- Se não houver findings, declarar isso explicitamente e listar riscos residuais.
|
|
35
|
+
- **Seções esperadas:** Findings · Perguntas abertas · Riscos residuais · Resumo
|
|
36
|
+
- **Bloqueios formais:** missing:state
|
|
37
|
+
- **Referência canónica:** `oxe/workflows/references/reasoning-review.md`
|
|
38
|
+
|
|
39
|
+
<!-- oxe-reasoning-contract:end -->
|
|
40
|
+
|
|
41
|
+
<!-- oxe-workflow-resolution:start -->
|
|
42
|
+
|
|
43
|
+
**Resolução do workflow canónico:** a partir do CWD atual, subir diretórios até encontrar .oxe/workflows/workflow-authoring.md ou oxe/workflows/workflow-authoring.md. Ler e aplicar integralmente o primeiro ficheiro encontrado. Não assumir que o CWD já é a raiz do repositório. Se nenhum existir, reportar os paths tentados e parar.
|
|
44
|
+
|
|
45
|
+
<!-- oxe-workflow-resolution:end -->
|
|
46
|
+
|
|
47
|
+
Indica o path do workflow a revisar (ex.: `oxe/workflows/spec.md`). Se omitido, o agente vai pedir.
|
|
@@ -0,0 +1,46 @@
|
|
|
1
|
+
---
|
|
2
|
+
name: oxe-verify-audit
|
|
3
|
+
agent: agent
|
|
4
|
+
description: OXE — Auditoria adversarial de VERIFY.md (Verify Auditor)
|
|
5
|
+
oxe_workflow_slug: verify-audit
|
|
6
|
+
oxe_reasoning_mode: review
|
|
7
|
+
oxe_question_policy: none
|
|
8
|
+
oxe_output_contract: findings
|
|
9
|
+
oxe_tool_profile: review_heavy
|
|
10
|
+
oxe_confidence_policy: explicit
|
|
11
|
+
oxe_context_tier: standard
|
|
12
|
+
oxe_contract_version: 2.0.0
|
|
13
|
+
oxe_semantics_hash: da71d7eafdce81aa
|
|
14
|
+
---
|
|
15
|
+
|
|
16
|
+
<!-- oxe-reasoning-contract:start -->
|
|
17
|
+
|
|
18
|
+
**Contrato de raciocínio OXE deste comando**
|
|
19
|
+
- **Workflow:** verify-audit
|
|
20
|
+
- **Modo:** revisão
|
|
21
|
+
- **Perguntas:** nenhuma
|
|
22
|
+
- **Saída esperada:** achados
|
|
23
|
+
- **Perfil de ferramentas:** revisão intensa
|
|
24
|
+
- **Política de confiança:** explícita
|
|
25
|
+
- **Tier de contexto padrão:** padrão
|
|
26
|
+
- **Versão do contrato:** 2.0.0
|
|
27
|
+
- **Checksum semântico:** `da71d7eafdce81aa`
|
|
28
|
+
- **Entrada de contexto prioritária:** `.oxe/context/packs/verify-audit.md` e `.oxe/context/packs/verify-audit.json`
|
|
29
|
+
- **Regra pack-first:** ler o context pack primeiro; se estiver stale, incompleto ou ausente, cair para leitura direta com fallback explícito.
|
|
30
|
+
- **Inspeção estruturada:** `oxe-cc context inspect --workflow verify-audit --json`
|
|
31
|
+
- Apresentar findings primeiro, ordenados por severidade e evidência.
|
|
32
|
+
- Separar bug, risco, regressão e lacuna de teste.
|
|
33
|
+
- Se não houver findings, declarar isso explicitamente e listar riscos residuais.
|
|
34
|
+
- **Seções esperadas:** Findings · Perguntas abertas · Riscos residuais · Resumo
|
|
35
|
+
- **Bloqueios formais:** missing:state
|
|
36
|
+
- **Referência canónica:** `oxe/workflows/references/reasoning-review.md`
|
|
37
|
+
|
|
38
|
+
<!-- oxe-reasoning-contract:end -->
|
|
39
|
+
|
|
40
|
+
<!-- oxe-workflow-resolution:start -->
|
|
41
|
+
|
|
42
|
+
**Resolução do workflow canónico:** a partir do CWD atual, subir diretórios até encontrar .oxe/workflows/verify-audit.md ou oxe/workflows/verify-audit.md. Ler e aplicar integralmente o primeiro ficheiro encontrado. Não assumir que o CWD já é a raiz do repositório. Se nenhum existir, reportar os paths tentados e parar.
|
|
43
|
+
|
|
44
|
+
<!-- oxe-workflow-resolution:end -->
|
|
45
|
+
|
|
46
|
+
Opera com contexto propositalmente restrito: só `SPEC.md` (critérios A*) e `VERIFY.md`. Escreve a seção `## Auditoria Adversarial` no VERIFY.md com resultado APROVADO / CONDICIONADO / REPROVADO.
|
|
@@ -0,0 +1,47 @@
|
|
|
1
|
+
---
|
|
2
|
+
name: oxe-workflow-authoring
|
|
3
|
+
agent: agent
|
|
4
|
+
description: "OXE — Revisa um workflow contra o guia de autoria"
|
|
5
|
+
argument-hint: "<path/to/workflow.md>"
|
|
6
|
+
oxe_workflow_slug: workflow-authoring
|
|
7
|
+
oxe_reasoning_mode: review
|
|
8
|
+
oxe_question_policy: none
|
|
9
|
+
oxe_output_contract: findings
|
|
10
|
+
oxe_tool_profile: review_heavy
|
|
11
|
+
oxe_confidence_policy: explicit
|
|
12
|
+
oxe_context_tier: standard
|
|
13
|
+
oxe_contract_version: 2.0.0
|
|
14
|
+
oxe_semantics_hash: 430a364fe5aa3494
|
|
15
|
+
---
|
|
16
|
+
|
|
17
|
+
<!-- oxe-reasoning-contract:start -->
|
|
18
|
+
|
|
19
|
+
**Contrato de raciocínio OXE deste comando**
|
|
20
|
+
- **Workflow:** workflow-authoring
|
|
21
|
+
- **Modo:** revisão
|
|
22
|
+
- **Perguntas:** nenhuma
|
|
23
|
+
- **Saída esperada:** achados
|
|
24
|
+
- **Perfil de ferramentas:** revisão intensa
|
|
25
|
+
- **Política de confiança:** explícita
|
|
26
|
+
- **Tier de contexto padrão:** padrão
|
|
27
|
+
- **Versão do contrato:** 2.0.0
|
|
28
|
+
- **Checksum semântico:** `430a364fe5aa3494`
|
|
29
|
+
- **Entrada de contexto prioritária:** `.oxe/context/packs/workflow-authoring.md` e `.oxe/context/packs/workflow-authoring.json`
|
|
30
|
+
- **Regra pack-first:** ler o context pack primeiro; se estiver stale, incompleto ou ausente, cair para leitura direta com fallback explícito.
|
|
31
|
+
- **Inspeção estruturada:** `oxe-cc context inspect --workflow workflow-authoring --json`
|
|
32
|
+
- Apresentar findings primeiro, ordenados por severidade e evidência.
|
|
33
|
+
- Separar bug, risco, regressão e lacuna de teste.
|
|
34
|
+
- Se não houver findings, declarar isso explicitamente e listar riscos residuais.
|
|
35
|
+
- **Seções esperadas:** Findings · Perguntas abertas · Riscos residuais · Resumo
|
|
36
|
+
- **Bloqueios formais:** missing:state
|
|
37
|
+
- **Referência canónica:** `oxe/workflows/references/reasoning-review.md`
|
|
38
|
+
|
|
39
|
+
<!-- oxe-reasoning-contract:end -->
|
|
40
|
+
|
|
41
|
+
<!-- oxe-workflow-resolution:start -->
|
|
42
|
+
|
|
43
|
+
**Resolução do workflow canónico:** a partir do CWD atual, subir diretórios até encontrar .oxe/workflows/workflow-authoring.md ou oxe/workflows/workflow-authoring.md. Ler e aplicar integralmente o primeiro ficheiro encontrado. Não assumir que o CWD já é a raiz do repositório. Se nenhum existir, reportar os paths tentados e parar.
|
|
44
|
+
|
|
45
|
+
<!-- oxe-workflow-resolution:end -->
|
|
46
|
+
|
|
47
|
+
Indica o path do workflow a revisar (ex.: `oxe/workflows/spec.md`). Se omitido, o agente vai pedir.
|
package/.github/workflows/ci.yml
CHANGED
package/AGENTS.md
CHANGED
|
@@ -4,7 +4,7 @@ Este repositório empacota o fluxo **OXE** (spec-driven, artefatos em `.oxe/`).
|
|
|
4
4
|
|
|
5
5
|
- **npm:** `npx oxe-cc@latest` · pacote `oxe-cc` · [README.md](README.md)
|
|
6
6
|
- **Workflows canónicos:** [oxe/workflows/](oxe/workflows/) — editar aqui primeiro; todas as integrações apontam para estes ficheiros. Referência **legado / brownfield:** [oxe/workflows/references/legacy-brownfield.md](oxe/workflows/references/legacy-brownfield.md).
|
|
7
|
-
- **CLI:** `oxe-cc install | doctor | status | init-oxe | update | uninstall` + `oxe-cc runtime <status|compile|verify|gates|replay|recover|ci|promote|agents>` — ver [README.md](README.md#cli-oxe-cc).
|
|
7
|
+
- **CLI:** `oxe-cc install | doctor | doctor --release | status | init-oxe | update | uninstall` + `oxe-cc runtime <status|compile|verify|gates|replay|recover|ci|promote|agents>` — ver [README.md](README.md#cli-oxe-cc).
|
|
8
8
|
- **SDK:** `require('oxe-cc')` expõe `runDoctorChecks`, `health`, `workflows`, `install`, `manifest`, `agents`, `verifyRun` e bridges `operational.*` do runtime enterprise — ver [lib/sdk/README.md](lib/sdk/README.md).
|
|
9
9
|
|
|
10
10
|
---
|
|
@@ -98,3 +98,5 @@ Quando o utilizador pedir uma etapa OXE por linguagem natural, seguir o ficheiro
|
|
|
98
98
|
Os wrappers por runtime podem carregar metadata cognitiva (`oxe_reasoning_mode`, `oxe_question_policy`, `oxe_output_contract`, `oxe_tool_profile`, `oxe_confidence_policy`), mas o comportamento canónico continua no workflow. Use essa metadata para adaptar a postura do agente sem bifurcar a lógica do OXE por ferramenta.
|
|
99
99
|
|
|
100
100
|
Para `execute` e `verify`, o comportamento atual esperado é **runtime-first**: se `oxe-cc runtime` estiver disponível, preferir `runtime compile/project/verify/gates` e tratar markdown como projeção derivada; se o runtime não puder ser executado, declarar `fallback legado` explicitamente.
|
|
101
|
+
|
|
102
|
+
Para publicação, o gate local esperado passa por `oxe-cc doctor --release --write-manifest`. Essa verificação deve falhar se houver drift de versão, topo inválido no `CHANGELOG`, wrapper dirty após sync, runtime não compilado ou ausência dos relatórios `.oxe/release/*.json` exigidos pela release.
|
package/CHANGELOG.md
CHANGED
|
@@ -4,6 +4,31 @@ Todas as versões seguem [Semantic Versioning](https://semver.org/). As mudança
|
|
|
4
4
|
|
|
5
5
|
---
|
|
6
6
|
|
|
7
|
+
## [1.5.0] — 2026-04-21
|
|
8
|
+
|
|
9
|
+
### Release Readiness 5/5
|
|
10
|
+
|
|
11
|
+
- `doctor --release --write-manifest` virou gate formal de publicação, com verificação bloqueante de versões, topo do `CHANGELOG`, runtime compilado, wrapper sync e relatórios obrigatórios
|
|
12
|
+
- a release agora persiste `release-manifest.json`, `runtime-smoke-report.json`, `recovery-fixture-report.json` e `multi-agent-soak-report.json` em `.oxe/release/`
|
|
13
|
+
- `npm test` passou a incluir smoke matrix multi-runtime, fixtures reproduzíveis de recovery/incidente e soak multi-agent
|
|
14
|
+
|
|
15
|
+
### Operational Proof
|
|
16
|
+
|
|
17
|
+
- nova smoke matrix obrigatória para Cursor, Copilot VS Code, Claude Code, Codex, OpenCode, Gemini, Windsurf e Antigravity, cobrindo install, entrypoint `oxe`, resolução de workflow e uninstall granular
|
|
18
|
+
- novo corpus de incidentes em `tests/fixtures/runtime-incidents/` para provar `runtime replay` e `runtime recover` fora do caminho feliz
|
|
19
|
+
- multi-agent passou a gerar e auditar `multi-agent-summary.json`, incluindo timeouts e reassignments
|
|
20
|
+
|
|
21
|
+
### Publication Contract
|
|
22
|
+
|
|
23
|
+
- versão alinhada para `1.5.0` em pacote raiz, runtime package, extensão VS Code, README e lockfile
|
|
24
|
+
- README, AGENTS e SDK docs atualizados para refletir o gate de release, os relatórios obrigatórios e o contrato estável desta publicação
|
|
25
|
+
|
|
26
|
+
### Validation
|
|
27
|
+
|
|
28
|
+
- `npm test`
|
|
29
|
+
- `npm run scan:assets`
|
|
30
|
+
- `npm run release:doctor`
|
|
31
|
+
|
|
7
32
|
## [1.4.0] — 2026-04-20
|
|
8
33
|
|
|
9
34
|
### Runtime Publication Stabilization
|
package/QUICKSTART.md
ADDED
|
@@ -0,0 +1,99 @@
|
|
|
1
|
+
# OXE — Primeiros 15 Minutos
|
|
2
|
+
|
|
3
|
+
> Leitura: ~5 min. Você sai daqui com o projeto configurado e o primeiro ciclo rodando.
|
|
4
|
+
|
|
5
|
+
---
|
|
6
|
+
|
|
7
|
+
## 1. Instalar
|
|
8
|
+
|
|
9
|
+
```bash
|
|
10
|
+
npx oxe-cc@latest
|
|
11
|
+
```
|
|
12
|
+
|
|
13
|
+
Responda as perguntas do wizard (IDE, perfil, workstream). O OXE cria `.oxe/` no projeto com STATE.md, config.json e os workflows.
|
|
14
|
+
|
|
15
|
+
Verifique:
|
|
16
|
+
|
|
17
|
+
```bash
|
|
18
|
+
npx oxe-cc doctor
|
|
19
|
+
```
|
|
20
|
+
|
|
21
|
+
Deve mostrar `✓ Pronto` para Node, workflows e estrutura base. Se aparecer algum `⚠`, siga o conselho na linha.
|
|
22
|
+
|
|
23
|
+
---
|
|
24
|
+
|
|
25
|
+
## 2. Primeiro ciclo (modo padrão)
|
|
26
|
+
|
|
27
|
+
Execute na sua IDE (Cursor, Copilot, Claude Code, etc.):
|
|
28
|
+
|
|
29
|
+
```
|
|
30
|
+
/oxe
|
|
31
|
+
```
|
|
32
|
+
|
|
33
|
+
O router lê STATE.md e sugere exatamente um próximo passo. Siga a recomendação.
|
|
34
|
+
|
|
35
|
+
**Sequência mínima completa:**
|
|
36
|
+
|
|
37
|
+
```
|
|
38
|
+
/oxe → descobre onde você está
|
|
39
|
+
/oxe-scan → mapeia o codebase em .oxe/codebase/
|
|
40
|
+
/oxe-spec → gera SPEC.md com critérios de aceite
|
|
41
|
+
/oxe-plan → gera PLAN.md com ondas e tarefas
|
|
42
|
+
/oxe-execute → implementa a onda atual
|
|
43
|
+
/oxe-verify → valida os critérios do SPEC
|
|
44
|
+
```
|
|
45
|
+
|
|
46
|
+
Para uma tarefa pequena (S/M), use o modo rápido:
|
|
47
|
+
|
|
48
|
+
```
|
|
49
|
+
/oxe-quick → spec + plan + execute + verify em uma sessão
|
|
50
|
+
```
|
|
51
|
+
|
|
52
|
+
---
|
|
53
|
+
|
|
54
|
+
## 3. Quando usar runtime-first
|
|
55
|
+
|
|
56
|
+
Se o projeto tem o runtime compilado (`lib/runtime/index.js`), os comandos enterprise ficam disponíveis:
|
|
57
|
+
|
|
58
|
+
```bash
|
|
59
|
+
# Verificação formal com manifesto de evidências
|
|
60
|
+
npx oxe-cc runtime verify --dir .
|
|
61
|
+
|
|
62
|
+
# Listar gates pendentes
|
|
63
|
+
npx oxe-cc runtime gates list --dir .
|
|
64
|
+
|
|
65
|
+
# Promover run verificada para PR draft
|
|
66
|
+
npx oxe-cc runtime promote --dir . --target pr_draft
|
|
67
|
+
|
|
68
|
+
# Recuperar run pausada ou interrompida
|
|
69
|
+
npx oxe-cc runtime recover --dir . --run-id <id>
|
|
70
|
+
```
|
|
71
|
+
|
|
72
|
+
Se o runtime não estiver compilado, os comandos OXE continuam funcionando no modo legado — sem perda de UX.
|
|
73
|
+
|
|
74
|
+
---
|
|
75
|
+
|
|
76
|
+
## 4. Validação dos 5 minutos
|
|
77
|
+
|
|
78
|
+
Após o primeiro ciclo completo, estas 5 coisas devem estar verdes:
|
|
79
|
+
|
|
80
|
+
| # | O que checar | Como |
|
|
81
|
+
|---|-------------|------|
|
|
82
|
+
| 1 | STATE.md mostra `verify_complete` ou `plan_complete` | `cat .oxe/STATE.md` |
|
|
83
|
+
| 2 | Nenhum `ERROR` em `oxe-cc doctor` | `npx oxe-cc doctor` |
|
|
84
|
+
| 3 | `oxe-cc status` retorna próximo passo claro | `npx oxe-cc status` |
|
|
85
|
+
| 4 | SPEC.md tem critérios de aceite preenchidos | `cat .oxe/SPEC.md` |
|
|
86
|
+
| 5 | VERIFY.md existe (se ciclo completo) | `cat .oxe/VERIFY.md` |
|
|
87
|
+
|
|
88
|
+
Se algum falhar, rode `/oxe` — o router vai diagnosticar e sugerir a ação correta.
|
|
89
|
+
|
|
90
|
+
---
|
|
91
|
+
|
|
92
|
+
## 5. Próximos passos
|
|
93
|
+
|
|
94
|
+
- **Para times** → [`docs/TEAM-ADOPTION.md`](docs/TEAM-ADOPTION.md)
|
|
95
|
+
- **Por papel (executor/reviewer/operador)** → [`docs/ROLES.md`](docs/ROLES.md)
|
|
96
|
+
- **Exemplo completo reproduzível** → [`docs/WALKTHROUGH.md`](docs/WALKTHROUGH.md)
|
|
97
|
+
- **Incidentes e gates** → [`docs/INCIDENT-PLAYBOOK.md`](docs/INCIDENT-PLAYBOOK.md)
|
|
98
|
+
- **Suporte por runtime** → [`docs/RUNTIME-SMOKE-MATRIX.md`](docs/RUNTIME-SMOKE-MATRIX.md)
|
|
99
|
+
- **Referência completa** → [`README.md`](README.md)
|
package/README.md
CHANGED
|
@@ -7,7 +7,7 @@
|
|
|
7
7
|
[](https://www.npmjs.com/package/oxe-cc)
|
|
8
8
|
[](LICENSE)
|
|
9
9
|
|
|
10
|
-
**Versão:** `1.
|
|
10
|
+
**Versão:** `1.5.0` · [package.json](package.json)
|
|
11
11
|
|
|
12
12
|
**Framework OXE — Orchestrated eXperience Engineering**
|
|
13
13
|
|
|
@@ -94,9 +94,10 @@ Contrato estável desta release:
|
|
|
94
94
|
| Primeiros 15 minutos | [QUICKSTART.md](QUICKSTART.md) |
|
|
95
95
|
| Guia por papel (executor / reviewer / operador) | [docs/ROLES.md](docs/ROLES.md) |
|
|
96
96
|
| Fluxo recomendado para times | [docs/TEAM-ADOPTION.md](docs/TEAM-ADOPTION.md) |
|
|
97
|
-
| Exemplo completo reproduzível | [docs/WALKTHROUGH.md](docs/WALKTHROUGH.md) |
|
|
98
|
-
| Incidentes e gates | [docs/INCIDENT-PLAYBOOK.md](docs/INCIDENT-PLAYBOOK.md) |
|
|
99
|
-
| Suporte por runtime (Cursor, Copilot, Claude Code…) | [docs/RUNTIME-SMOKE-MATRIX.md](docs/RUNTIME-SMOKE-MATRIX.md) |
|
|
97
|
+
| Exemplo completo reproduzível | [docs/WALKTHROUGH.md](docs/WALKTHROUGH.md) |
|
|
98
|
+
| Incidentes e gates | [docs/INCIDENT-PLAYBOOK.md](docs/INCIDENT-PLAYBOOK.md) |
|
|
99
|
+
| Suporte por runtime (Cursor, Copilot, Claude Code…) | [docs/RUNTIME-SMOKE-MATRIX.md](docs/RUNTIME-SMOKE-MATRIX.md) |
|
|
100
|
+
| Release readiness e publicação | [docs/RELEASE-READINESS.md](docs/RELEASE-READINESS.md) |
|
|
100
101
|
|
|
101
102
|
---
|
|
102
103
|
|
|
@@ -458,11 +459,18 @@ O `status --full` mostra em ANSI: readiness do ciclo, autoavaliação do plano,
|
|
|
458
459
|
|
|
459
460
|
O pacote está pronto para uma publicação robusta quando estes sinais estiverem verdes no repositório da release:
|
|
460
461
|
|
|
461
|
-
- `npm test`
|
|
462
|
-
- `npm run scan:assets`
|
|
463
|
-
- `npm run build:vscode-ext`
|
|
464
|
-
- `node bin/oxe-cc.js doctor`
|
|
465
|
-
- `node bin/oxe-cc.js status --full`
|
|
462
|
+
- `npm test`
|
|
463
|
+
- `npm run scan:assets`
|
|
464
|
+
- `npm run build:vscode-ext`
|
|
465
|
+
- `node bin/oxe-cc.js doctor --release --write-manifest`
|
|
466
|
+
- `node bin/oxe-cc.js status --full`
|
|
467
|
+
|
|
468
|
+
Artefatos obrigatórios desta fase:
|
|
469
|
+
|
|
470
|
+
- `.oxe/release/release-manifest.json`
|
|
471
|
+
- `.oxe/release/runtime-smoke-report.json`
|
|
472
|
+
- `.oxe/release/recovery-fixture-report.json`
|
|
473
|
+
- `.oxe/release/multi-agent-soak-report.json`
|
|
466
474
|
|
|
467
475
|
Não há outro bloqueador funcional do plano runtime core para esta publicação. O que sobra depois dela é evolução de ergonomia e expansão de targets, não correção estrutural do contrato atual.
|
|
468
476
|
|
|
@@ -559,7 +567,8 @@ node bin/oxe-cc.js --help
|
|
|
559
567
|
| Comando | O que faz |
|
|
560
568
|
|---------|-----------|
|
|
561
569
|
| `oxe-cc` / `oxe-cc install` | Instala workflows e integrações |
|
|
562
|
-
| `oxe-cc doctor` | Diagnóstico completo: Node, workflows, config, bootstrap `.oxe/`, sessão ativa, autoavaliação do plano, saúde lógica (`healthy` \| `warning` \| `broken`), drift semântico multi-runtime e workflows sem contrato no registry |
|
|
570
|
+
| `oxe-cc doctor` | Diagnóstico completo: Node, workflows, config, bootstrap `.oxe/`, sessão ativa, autoavaliação do plano, saúde lógica (`healthy` \| `warning` \| `broken`), drift semântico multi-runtime e workflows sem contrato no registry |
|
|
571
|
+
| `oxe-cc doctor --release --write-manifest` | Gate de publicação: valida versões, topo do `CHANGELOG`, runtime compilado, wrapper sync e relatórios obrigatórios; persiste `release-manifest.json` |
|
|
563
572
|
| `oxe-cc status` | Próximo passo sugerido + saúde lógica do fluxo |
|
|
564
573
|
| `oxe-cc status --full` | Coverage matrix + readiness gate + active run no terminal (ANSI) |
|
|
565
574
|
| `oxe-cc status --json` | Mesmo, em JSON (schema v5), com `healthStatus`, `activeSession`, `planSelfEvaluation`, `contextPacks`, `contextQuality`, `semanticsDrift`, `verificationSummary`, `residualRiskSummary`, `evidenceCoverage`, `pendingGates`, `policyDecisionSummary`, `quotaSummary`, `auditSummary`, `promotionSummary`, `runtimeMode`, `fallbackMode`, `gateQueue`, `policyCoverage`, `promotionReadiness`, `recoveryState`, `multiAgent` e `providerCatalog` |
|
|
@@ -36,6 +36,16 @@ function resolveInstallOptionsFromConfig(projectRoot, optsIn) {
|
|
|
36
36
|
opts.explicitScope = true;
|
|
37
37
|
}
|
|
38
38
|
|
|
39
|
+
if (!opts.explicitIdeScope && !opts.oxeOnly && typeof inst.ide_scope === 'string') {
|
|
40
|
+
if (inst.ide_scope === 'local') {
|
|
41
|
+
opts.ideLocal = true;
|
|
42
|
+
opts.explicitIdeScope = true;
|
|
43
|
+
} else if (inst.ide_scope === 'global') {
|
|
44
|
+
opts.ideLocal = false;
|
|
45
|
+
opts.explicitIdeScope = true;
|
|
46
|
+
}
|
|
47
|
+
}
|
|
48
|
+
|
|
39
49
|
if (!opts.oxeOnly && inst.vscode === true) {
|
|
40
50
|
opts.vscode = true;
|
|
41
51
|
}
|
|
@@ -637,11 +637,11 @@ async function resolveRuntimeGate(projectRoot, activeSession, options = {}) {
|
|
|
637
637
|
};
|
|
638
638
|
}
|
|
639
639
|
|
|
640
|
-
function readRuntimeMultiAgentStatus(projectRoot, activeSession, options = {}) {
|
|
641
|
-
const runtime = loadRuntimeModule();
|
|
642
|
-
const current = readRunState(projectRoot, activeSession);
|
|
643
|
-
const runId = options.runId || (current && current.run_id) || null;
|
|
644
|
-
if (!runId) {
|
|
640
|
+
function readRuntimeMultiAgentStatus(projectRoot, activeSession, options = {}) {
|
|
641
|
+
const runtime = loadRuntimeModule();
|
|
642
|
+
const current = readRunState(projectRoot, activeSession);
|
|
643
|
+
const runId = options.runId || (current && current.run_id) || null;
|
|
644
|
+
if (!runId) {
|
|
645
645
|
return {
|
|
646
646
|
path: null,
|
|
647
647
|
enabled: false,
|
|
@@ -649,34 +649,40 @@ function readRuntimeMultiAgentStatus(projectRoot, activeSession, options = {}) {
|
|
|
649
649
|
mode: null,
|
|
650
650
|
workspaceIsolationEnforced: false,
|
|
651
651
|
agents: [],
|
|
652
|
-
ownership: [],
|
|
653
|
-
orphanReassignments: [],
|
|
654
|
-
handoffs: [],
|
|
655
|
-
arbitrationResults: [],
|
|
656
|
-
|
|
657
|
-
|
|
658
|
-
|
|
659
|
-
const
|
|
660
|
-
const
|
|
661
|
-
const
|
|
662
|
-
const
|
|
663
|
-
|
|
664
|
-
|
|
665
|
-
|
|
666
|
-
|
|
667
|
-
|
|
668
|
-
|
|
669
|
-
|
|
652
|
+
ownership: [],
|
|
653
|
+
orphanReassignments: [],
|
|
654
|
+
handoffs: [],
|
|
655
|
+
arbitrationResults: [],
|
|
656
|
+
summary: null,
|
|
657
|
+
};
|
|
658
|
+
}
|
|
659
|
+
const runDir = path.join(projectRoot, '.oxe', 'runs', runId);
|
|
660
|
+
const statePath = path.join(runDir, 'multi-agent-state.json');
|
|
661
|
+
const summaryPath = path.join(runDir, 'multi-agent-summary.json');
|
|
662
|
+
const handoffsPath = path.join(runDir, 'handoffs.json');
|
|
663
|
+
const arbitrationPath = path.join(runDir, 'arbitration-results.json');
|
|
664
|
+
const state = runtime && typeof runtime.loadMultiAgentState === 'function'
|
|
665
|
+
? runtime.loadMultiAgentState(projectRoot, runId)
|
|
666
|
+
: readJsonIfExists(statePath);
|
|
667
|
+
const summary = runtime && typeof runtime.loadMultiAgentSummary === 'function'
|
|
668
|
+
? runtime.loadMultiAgentSummary(projectRoot, runId)
|
|
669
|
+
: readJsonIfExists(summaryPath);
|
|
670
|
+
const handoffs = readJsonIfExists(handoffsPath);
|
|
671
|
+
const arbitrationResults = readJsonIfExists(arbitrationPath);
|
|
672
|
+
return {
|
|
673
|
+
path: statePath,
|
|
674
|
+
enabled: Boolean(state),
|
|
670
675
|
runId,
|
|
671
676
|
mode: state && state.mode ? state.mode : null,
|
|
672
677
|
workspaceIsolationEnforced: Boolean(state && state.workspace_isolation_enforced),
|
|
673
678
|
agents: state && Array.isArray(state.agent_results) ? state.agent_results : [],
|
|
674
679
|
ownership: state && Array.isArray(state.ownership) ? state.ownership : [],
|
|
675
|
-
orphanReassignments: state && Array.isArray(state.orphan_reassignments) ? state.orphan_reassignments : [],
|
|
676
|
-
handoffs: Array.isArray(handoffs) ? handoffs : [],
|
|
677
|
-
arbitrationResults: Array.isArray(arbitrationResults) ? arbitrationResults : [],
|
|
678
|
-
|
|
679
|
-
}
|
|
680
|
+
orphanReassignments: state && Array.isArray(state.orphan_reassignments) ? state.orphan_reassignments : [],
|
|
681
|
+
handoffs: Array.isArray(handoffs) ? handoffs : [],
|
|
682
|
+
arbitrationResults: Array.isArray(arbitrationResults) ? arbitrationResults : [],
|
|
683
|
+
summary: summary || null,
|
|
684
|
+
};
|
|
685
|
+
}
|
|
680
686
|
|
|
681
687
|
function loadRuntimeVerificationArtifacts(projectRoot, runState) {
|
|
682
688
|
const runtime = loadRuntimeModule();
|
|
@@ -24,6 +24,7 @@ const ALLOWED_CONFIG_KEYS = [
|
|
|
24
24
|
'verification_depth',
|
|
25
25
|
'plan_confidence_threshold',
|
|
26
26
|
'security_in_verify',
|
|
27
|
+
'adversarial_verify',
|
|
27
28
|
'install',
|
|
28
29
|
'plugins',
|
|
29
30
|
'workstreams',
|
|
@@ -52,7 +53,7 @@ const INSTALL_PROFILES = ['recommended', 'cursor', 'copilot', 'core', 'cli', 'al
|
|
|
52
53
|
const INSTALL_REPO_LAYOUTS = ['nested', 'classic'];
|
|
53
54
|
|
|
54
55
|
/** @type {string[]} */
|
|
55
|
-
const INSTALL_OBJECT_KEYS = ['profile', 'repo_layout', 'vscode', 'include_commands_dir', 'include_agents_md'];
|
|
56
|
+
const INSTALL_OBJECT_KEYS = ['profile', 'repo_layout', 'ide_scope', 'vscode', 'include_commands_dir', 'include_agents_md'];
|
|
56
57
|
|
|
57
58
|
const EXPECTED_CODEBASE_MAPS = [
|
|
58
59
|
'OVERVIEW.md',
|
|
@@ -152,6 +153,8 @@ function loadOxeConfigMerged(targetProject) {
|
|
|
152
153
|
scan_ignore_globs: [],
|
|
153
154
|
spec_required_sections: [],
|
|
154
155
|
plan_max_tasks_per_wave: 0,
|
|
156
|
+
lessons_max_age_days: 0,
|
|
157
|
+
install: {},
|
|
155
158
|
azure: {
|
|
156
159
|
enabled: false,
|
|
157
160
|
default_resource_group: '',
|
|
@@ -212,15 +215,18 @@ function loadOxeConfigMerged(targetProject) {
|
|
|
212
215
|
if (typeof layer.profile === 'string') {
|
|
213
216
|
Object.assign(merged, expandExecutionProfile(layer.profile));
|
|
214
217
|
}
|
|
218
|
+
const layerFlat = { ...layer };
|
|
215
219
|
// Azure: merge aninhado para não sobrescrever campos não especificados
|
|
216
220
|
if (layer.azure && typeof layer.azure === 'object' && !Array.isArray(layer.azure)) {
|
|
217
221
|
merged.azure = { .../** @type {any} */ (merged.azure), ...layer.azure };
|
|
218
|
-
|
|
219
|
-
|
|
220
|
-
|
|
221
|
-
|
|
222
|
-
|
|
222
|
+
delete layerFlat.azure;
|
|
223
|
+
}
|
|
224
|
+
// Install: merge aninhado para não sobrescrever campos não especificados
|
|
225
|
+
if (layer.install && typeof layer.install === 'object' && !Array.isArray(layer.install)) {
|
|
226
|
+
merged.install = { .../** @type {any} */ (merged.install || {}), ...layer.install };
|
|
227
|
+
delete layerFlat.install;
|
|
223
228
|
}
|
|
229
|
+
Object.assign(merged, layerFlat);
|
|
224
230
|
}
|
|
225
231
|
|
|
226
232
|
const primaryPath = sources.project || sources.user || sources.system || null;
|
|
@@ -262,6 +268,11 @@ function validateConfigShape(cfg) {
|
|
|
262
268
|
);
|
|
263
269
|
}
|
|
264
270
|
}
|
|
271
|
+
if (inst.ide_scope != null) {
|
|
272
|
+
if (typeof inst.ide_scope !== 'string' || !['global', 'local'].includes(inst.ide_scope)) {
|
|
273
|
+
typeErrors.push('install.ide_scope deve ser "global" ou "local"');
|
|
274
|
+
}
|
|
275
|
+
}
|
|
265
276
|
if (inst.vscode != null && typeof inst.vscode !== 'boolean') {
|
|
266
277
|
typeErrors.push('install.vscode deve ser boolean');
|
|
267
278
|
}
|
|
@@ -314,6 +325,27 @@ function validateConfigShape(cfg) {
|
|
|
314
325
|
if (cfg.scale_adaptive != null && typeof cfg.scale_adaptive !== 'boolean') {
|
|
315
326
|
typeErrors.push('scale_adaptive deve ser boolean');
|
|
316
327
|
}
|
|
328
|
+
if (cfg.discuss_before_plan != null && typeof cfg.discuss_before_plan !== 'boolean') {
|
|
329
|
+
typeErrors.push('discuss_before_plan deve ser boolean');
|
|
330
|
+
}
|
|
331
|
+
if (cfg.after_verify_suggest_pr != null && typeof cfg.after_verify_suggest_pr !== 'boolean') {
|
|
332
|
+
typeErrors.push('after_verify_suggest_pr deve ser boolean');
|
|
333
|
+
}
|
|
334
|
+
if (cfg.after_verify_draft_commit != null && typeof cfg.after_verify_draft_commit !== 'boolean') {
|
|
335
|
+
typeErrors.push('after_verify_draft_commit deve ser boolean');
|
|
336
|
+
}
|
|
337
|
+
if (cfg.security_in_verify != null && typeof cfg.security_in_verify !== 'boolean') {
|
|
338
|
+
typeErrors.push('security_in_verify deve ser boolean');
|
|
339
|
+
}
|
|
340
|
+
if (cfg.adversarial_verify != null && typeof cfg.adversarial_verify !== 'boolean') {
|
|
341
|
+
typeErrors.push('adversarial_verify deve ser boolean');
|
|
342
|
+
}
|
|
343
|
+
if (cfg.lessons_max_age_days != null && typeof cfg.lessons_max_age_days !== 'number') {
|
|
344
|
+
typeErrors.push('lessons_max_age_days deve ser número (use 0 para desligar)');
|
|
345
|
+
}
|
|
346
|
+
if (cfg.default_verify_command != null && typeof cfg.default_verify_command !== 'string') {
|
|
347
|
+
typeErrors.push('default_verify_command deve ser string');
|
|
348
|
+
}
|
|
317
349
|
if (cfg.azure != null) {
|
|
318
350
|
if (typeof cfg.azure !== 'object' || Array.isArray(cfg.azure)) {
|
|
319
351
|
typeErrors.push('azure deve ser um objeto');
|