oxe-cc 0.3.3 → 0.3.4

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.
@@ -1,15 +1,15 @@
1
1
  # OXE — fluxo spec-driven (Cursor + Copilot)
2
2
 
3
- Este repositório define o **OXE**: artefatos em `.oxe/` na raiz do projeto alvo e workflows em `oxe/workflows/*.md`.
3
+ Este repositório (ou o pacote **oxe-cc** instalado) define o **OXE**: artefatos em **`.oxe/`** na raiz do projeto alvo e workflows em **`oxe/workflows/*.md`** ou **`.oxe/workflows/*.md`**, conforme a instalação.
4
4
 
5
5
  ## Quando aplicar
6
6
 
7
- Se o utilizador mencionar **OXE**, **oxe**, **/oxe-**, ou pedidos como “mapear o projeto”, “criar spec OXE”, “plano OXE com testes”, “verificar OXE”, trata como fluxo OXE e segue o ficheiro de workflow correspondente abaixo.
7
+ Se o usuário mencionar **OXE**, **oxe**, **/oxe-**, ou pedidos como “mapear o projeto”, “criar spec OXE”, “plano OXE com testes”, “verificar OXE”, trate como fluxo OXE e siga o arquivo de workflow correspondente abaixo.
8
8
 
9
9
  ## Workflows (fonte única)
10
10
 
11
- | Passo | Ficheiro | Gatilhos naturais (exemplos) |
12
- |-------|----------|----------------------------|
11
+ | Passo | Arquivo | Gatilhos naturais (exemplos) |
12
+ |-------|---------|-------------------------------|
13
13
  | Scan | `oxe/workflows/scan.md` | “oxe scan”, “mapear o repo”, “atualizar codebase OXE” |
14
14
  | Spec | `oxe/workflows/spec.md` | “oxe spec”, “escrever SPEC.md”, “requisitos OXE” |
15
15
  | Discuss | `oxe/workflows/discuss.md` | “oxe discuss”, “perguntas antes do plano”, “DISCUSS.md” |
@@ -18,22 +18,27 @@ Se o utilizador mencionar **OXE**, **oxe**, **/oxe-**, ou pedidos como “mapear
18
18
  | Execute | `oxe/workflows/execute.md` | “oxe execute”, “executar onda”, “onda 2 OXE” |
19
19
  | Verify | `oxe/workflows/verify.md` | “oxe verify”, “validar plano OXE”, “VERIFY.md” |
20
20
  | Next | `oxe/workflows/next.md` | “oxe next”, “próximo passo OXE” |
21
- | Review PR | `oxe/workflows/review-pr.md` | “revisar PR”, link `…/pull/10`, “diff entre branches”, “code review OXE” *(prompt: `/oxe-review-pr`)* |
21
+ | Review PR | `oxe/workflows/review-pr.md` | “revisar PR”, link `…/pull/10`, “diff entre branches” *(prompt: `/oxe-review-pr` no Copilot)* |
22
22
  | Help | `oxe/workflows/help.md` | “oxe help”, “como usar OXE” |
23
23
 
24
- **Regra:** o Markdown indicado e executa **todos** os passos e critérios de sucesso descritos nesse ficheiro. Não atalhes: cria ou atualiza os ficheiros em `.oxe/` conforme o workflow.
24
+ **Regra:** leia o Markdown indicado e execute **todos** os passos e critérios de sucesso descritos nesse arquivo. Não atalhe: crie ou atualize os arquivos em `.oxe/` conforme o workflow.
25
+
26
+ ## Onde ficam as integrações (após `npx oxe-cc`)
27
+
28
+ - **Cursor:** comandos em **`~/.cursor/commands/`** (slash `/oxe-*`).
29
+ - **GitHub Copilot (VS Code):** instruções mescladas em **`~/.copilot/copilot-instructions.md`** (bloco OXE) e **prompt files** em **`~/.copilot/prompts/`** (`oxe-*.prompt.md`). **Não** espere `.github/prompts/` no repositório do projeto para o Copilot — o instalador usa a pasta do **usuário**, alinhado ao GSD.
30
+ - **Copilot CLI (experimental):** com `oxe-cc --copilot-cli`, textos também em **`~/.claude/commands/`** e **`~/.copilot/commands/`** — depende da versão do CLI.
25
31
 
26
32
  ## Artefatos
27
33
 
28
34
  - `.oxe/STATE.md`, `.oxe/config.json` (opcional), `.oxe/codebase/*.md`, `.oxe/SPEC.md`, `.oxe/DISCUSS.md` (opcional), `.oxe/PLAN.md`, `.oxe/VERIFY.md`, `.oxe/QUICK.md`, `.oxe/SUMMARY.md`
29
- - Templates: `oxe/templates/`
35
+ - Templates: `oxe/templates/` (ou `.oxe/templates/` em layout aninhado)
30
36
 
31
- ## Cursor vs Copilot
37
+ ## CLI útil
32
38
 
33
- - **Cursor:** slash commands em `.cursor/commands/oxe-*.md` apontam para os mesmos workflows.
34
- - **Copilot (VS Code Chat):** prompt files em `.github/prompts/oxe-*.prompt.md`; cada um indica o workflow em `oxe/workflows/<passo>.md` na raiz do repo. **`oxe-review-pr`** existe só como prompt Copilot (não há slash command Cursor correspondente).
35
- - **Copilot CLI (terminal, experimental):** com `oxe-cc --copilot-cli`, os mesmos textos são copiados para **`.claude/commands/oxe-*.md`** — versões recentes do CLI podem expor **`/oxe-scan`**, etc. Isto depende da versão do `copilot`; não faz parte do contrato estável do OXE.
39
+ - **`npx oxe-cc doctor`** validação completa (workflows do pacote, `config.json`, mapas, coerência STATE).
40
+ - **`npx oxe-cc status`** um único próximo passo sugerido + coerência `.oxe/`.
36
41
 
37
- ## Manutenção deste pacote (oxe-build)
42
+ ## Manutenção do pacote oxe-build
38
43
 
39
- Ao alterar comportamento OXE, edita primeiro `oxe/workflows/*.md`; mantém comandos Cursor e prompts Copilot alinhados com essa pasta.
44
+ Ao alterar comportamento OXE, edite primeiro **`oxe/workflows/*.md`**; mantenha comandos Cursor e prompts Copilot alinhados a essa pasta.
package/AGENTS.md CHANGED
@@ -5,7 +5,7 @@ Este repositório empacota o fluxo **OXE** (spec-driven, artefatos em `.oxe/`).
5
5
  - **npm:** o nome do pacote é **`oxe-cc`** (`npx oxe-cc@latest` quando estiver publicado; se `npm view oxe-cc` der 404, usar `npm link` a partir deste repo ou `node bin/oxe-cc.js`).
6
6
  - **Instruções do repositório:** [.github/copilot-instructions.md](.github/copilot-instructions.md) — aplicadas automaticamente no Copilot Chat quando o repo está em contexto.
7
7
  - **Workflows canónicos:** [oxe/workflows/](oxe/workflows/) — editar aqui primeiro; Cursor e Copilot apontam para estes ficheiros (inclui `quick.md`, `execute.md`).
8
- - **CLI:** `oxe-cc` instala assets e bootstrap (`.oxe/STATE.md`, `config.json`, `codebase/`); `oxe-cc doctor` valida workflows, JSON de config e mapa scan; `oxe-cc init-oxe` só inicializa `.oxe/`.
8
+ - **CLI:** `oxe-cc` instala assets e bootstrap (`.oxe/STATE.md`, `config.json`, `codebase/`); `oxe-cc doctor` valida workflows, JSON de config, coerência STATE vs artefatos e regras opcionais de SPEC/PLAN; `oxe-cc status` mostra coerência `.oxe/` e **um** próximo passo; `oxe-cc init-oxe` só inicializa `.oxe/`.
9
9
  - **Prompt files (Copilot / VS Code):** [.github/prompts/*.prompt.md](.github/prompts/) — invocar com `/` no chat (ex. `/oxe-scan`, `/oxe-review-pr` para diff tipo PR) após `chat.promptFiles` estar ativo.
10
10
  - **Copilot CLI (experimental):** `oxe-cc --copilot-cli` → `.claude/commands/oxe-*.md` para testar `/oxe-scan` no terminal.
11
11
 
package/README.md CHANGED
@@ -4,7 +4,7 @@
4
4
  <img src="assets/readme-banner.svg" alt="OXE" width="920" />
5
5
  </p>
6
6
 
7
- **Fluxo spec-driven e context engineering para [Cursor](https://cursor.com) e [GitHub Copilot](https://github.com/features/copilot) — inspirado na ideia do [GSD](https://github.com/gsd-build/get-shit-done), com **menos comandos** e foco em **`.oxe/`** + **`oxe/workflows/`**.**
7
+ **Fluxo spec-driven e context engineering para [Cursor](https://cursor.com) e [GitHub Copilot](https://github.com/features/copilot) — inspirado no [GSD](https://github.com/gsd-build/get-shit-done), com **menos comandos** e foco em **`.oxe/`** (workflows em **`.oxe/workflows/`** por padrão, ou **`oxe/workflows/`** com `--global`). Textos do CLI e resumos pós-comando estão em **português (Brasil)**.**
8
8
 
9
9
  [![npm](https://img.shields.io/npm/v/oxe-cc.svg?style=flat-square)](https://www.npmjs.com/package/oxe-cc)
10
10
  [![license](https://img.shields.io/npm/l/oxe-cc.svg?style=flat-square)](LICENSE)
@@ -13,7 +13,7 @@
13
13
  npx oxe-cc@latest
14
14
  ```
15
15
 
16
- **Manter atualizado:** `npx oxe-cc@latest --force` (na raiz do projeto).
16
+ **Manter atualizado:** `npx oxe-cc@latest --force` ou `npx oxe-cc update` (na raiz do projeto). Com **`--force`**, alterações locais em arquivos rastreados geram backup em **`~/.oxe-cc/oxe-local-patches/`** (estilo GSD).
17
17
 
18
18
  [Para quem é](#para-quem-é) · [Começar](#começar) · [Como funciona](#como-funciona) · [Modo rápido](#modo-rápido) · [Porque funciona](#porque-funciona) · [Comandos](#comandos) · [Configuração](#configuração) · [Problemas](#resolução-de-problemas)
19
19
 
@@ -25,7 +25,7 @@ npx oxe-cc@latest
25
25
 
26
26
  Para quem quer **descrever o que quer e ver isso construído de forma consistente** — **sem** simular uma organização enorme de processos em cima do repositório.
27
27
 
28
- OXE é **enxuto**: não há dezenas de slash commands nem instalador multi-runtime. Há **um CLI** que copia ficheiros para o projeto, **workflows em Markdown** que o agente segue, e **estado em disco** para a sessão principal não “inchada” com tudo o que já foi decidido.
28
+ OXE é **enxuto**: não há dezenas de slash commands. Há **um CLI** que deixa o repositório **só com `.oxe/`** (layout **padrão**) ou **`oxe/` + `.oxe/`** com **`--global`**, e instala integrações em **`~/.cursor`**, **`~/.copilot`** e **`~/.claude`** **workflows em Markdown** e **estado em disco** para a sessão não ficar **sobrecarregada** com tudo o que já foi decidido.
29
29
 
30
30
  ---
31
31
 
@@ -33,50 +33,64 @@ OXE é **enxuto**: não há dezenas de slash commands nem instalador multi-runti
33
33
 
34
34
  **Requisito:** [Node.js 18+](https://nodejs.org/).
35
35
 
36
- Na **raiz do repositório** do teu projeto:
36
+ Na **raiz do repositório** do seu projeto:
37
37
 
38
38
  ```bash
39
39
  npx oxe-cc@latest
40
40
  ```
41
41
 
42
- Isto copia, entre outros: **`oxe/`** (workflows + templates), **`.cursor/`** (slash commands), **`.github/`** (instruções Copilot + prompt files), **`commands/oxe/`** (atalhos estilo `oxe:*` para outros clientes), **`AGENTS.md`**, e cria um **`.oxe/`** mínimo (`STATE.md`, `config.json` a partir de template, pasta `codebase/`) salvo flags como `--no-init-oxe`.
42
+ Em **terminal interativo**, o instalador pergunta em dois passos (como no **GSD**): (1) **onde integrar** o OXE (Cursor, Copilot, núcleo com `.oxe/`, etc.); (2) **layout no repositório** — **clássico** (`oxe/` na raiz + `.oxe/`, com opcional `commands/oxe/`, `AGENTS.md`) ou **mínimo** (**só `.oxe/`**, com **`.oxe/workflows/`** e templates). **Cursor, Copilot e CLI** usam **sempre** as pastas do **usuário** (`~/.cursor`, `~/.copilot`, `~/.claude`); **não** são criados `.cursor` / `.github` / `.claude` dentro do repo. Com layout clássico e **`--vscode`**, **`.vscode/`** fica no projeto.
43
43
 
44
- Em **terminal interativo**, no fim pergunta se queres instalar o **`oxe-cc` globalmente** (`npm install -g`) ou continuar com **`npx`**. Em CI ou scripts usa **`--no-global-cli`** / **`-l`**, ou define **`OXE_NO_PROMPT=1`**. Para instalar o CLI sem pergunta: **`--global-cli`** / **`-g`**.
44
+ Ao terminar, o CLI mostra um **resumo do que foi criado ou atualizado** e **próximos passos sugeridos** (por exemplo `npx oxe-cc doctor`, `/oxe-scan`), no mesmo espírito do GSD.
45
45
 
46
- **GitHub Copilot CLI (experimental):** para testar slash commands no terminal, instala com **`--copilot-cli`** copia **`.cursor/commands/*.md`** para **`.claude/commands/`** (ficheiros `oxe-scan.md`, etc., sem `prompt` no nome). Usa na raiz do repo: `npx oxe-cc@latest --force --copilot --copilot-cli`. Depois, na sessão do Copilot CLI, experimenta **`/oxe-scan`**. O suporte depende da versão do CLI; vê [discussão no copilot-cli](https://github.com/github/copilot-cli/issues/1113).
46
+ Sem TTY (CI), o **layout mínimo** (só `.oxe/`) e integrações no **HOME** são o padrão. Use **`--global`** para também ter **`oxe/`** na raiz. Flags: **`--cursor`**, **`--copilot`**, **`--oxe-only`**, **`OXE_NO_PROMPT=1`**, etc.
47
+
48
+ No fim, em modo interativo, pergunta se você quer instalar o **`oxe-cc` globalmente** (`npm install -g`) ou continuar só com **`npx`**. Em CI ou scripts use **`--no-global-cli`** / **`-l`**, ou defina **`OXE_NO_PROMPT=1`**. Para instalar o CLI sem pergunta: **`--global-cli`** / **`-g`**.
49
+
50
+ **GitHub Copilot CLI (experimental):** **`--copilot-cli`** copia os mesmos comandos para **`~/.claude/commands/`** e **`~/.copilot/commands/`** (não para o repositório). Na raiz do repo: `npx oxe-cc@latest --force --copilot --copilot-cli`. Depois teste **`/oxe-scan`** na sessão do CLI. O suporte depende da versão; veja [discussão no copilot-cli](https://github.com/github/copilot-cli/issues/1113).
47
51
 
48
52
  **Confirmar instalação no agente**
49
53
 
50
- | Onde | O que correr |
54
+ | Onde | O que executar |
51
55
  |------|----------------|
52
56
  | **Cursor** | `/oxe-help` |
53
57
  | **Copilot** (VS Code) | `/oxe-help` no chat, se [prompt files](https://code.visualstudio.com/docs/copilot/customization/prompt-files) estiverem ativos (`"chat.promptFiles": true` — exemplo em [`.vscode/settings.json`](.vscode/settings.json)) |
54
58
 
55
- > **Nota:** O Copilot usa **instruções do repositório** (`.github/copilot-instructions.md`) **e** os ficheiros em `.github/prompts/*.prompt.md`. Sem prompt files, ainda podes pedir em linguagem natural (“executa o workflow OXE scan”) com o repo em contexto.
59
+ > **Nota:** Instruções e prompt files do Copilot ficam em **`~/.copilot/`** (alinhado ao GSD), não em `.github/` no repo. **`oxe-cc doctor`** aceita workflows em **`.oxe/workflows/`** ou **`oxe/workflows/`**. Sem prompt files, você ainda pode pedir em linguagem natural com o repositório em contexto.
56
60
 
57
- **Sem pacote no npm** (`npm view oxe-cc version` → 404): clone este repo, `npm link` na pasta **oxe-build**, `npm link oxe-cc` no teu projeto, e corre `oxe-cc`. Alternativa: `node /caminho/oxe-build/bin/oxe-cc.js`.
61
+ **Sem pacote no npm** (`npm view oxe-cc version` → 404): clone este repo, `npm link` na pasta **oxe-build**, `npm link oxe-cc` no seu projeto e execute `oxe-cc`. Alternativa: `node /caminho/oxe-build/bin/oxe-cc.js`.
58
62
 
59
63
  <details>
60
64
  <summary><strong>Instalação: flags úteis (CI, ou só parte do pacote)</strong></summary>
61
65
 
62
66
  | Flag | Efeito |
63
67
  |------|--------|
64
- | `--force` / `-f` | Sobrescreve ficheiros já existentes (**obrigatório** para atualizar cópias antigas) |
68
+ | `--force` / `-f` | Sobrescreve arquivos já existentes (**obrigatório** para atualizar cópias antigas) |
65
69
  | `--dry-run` | Lista ações sem escrever |
66
70
  | `--cursor` / `--copilot` | Instala só uma das stacks |
67
- | `--oxe-only` | Só a pasta `oxe/` (workflows) |
68
- | `--no-init-oxe` | Não cria `.oxe/` no fim |
71
+ | `--oxe-only` | Só workflows + templates dentro de **`.oxe/`** (sem integrações IDE) |
72
+ | `--no-init-oxe` | Não executa o bootstrap de `STATE.md` / `config.json` / `codebase/` (mantém `.oxe/workflows` se copiados) |
73
+ | `--global` | Layout **clássico**: **`oxe/`** na raiz do repo + **`.oxe/`**; IDE em `~/.cursor`, `~/.copilot`, `~/.claude` |
74
+ | `--local` | Layout **mínimo** (padrão): **só `.oxe/`** com **`.oxe/workflows/`**; IDE nas mesmas pastas do usuário |
69
75
  | `--global-cli` / `-g` | Após copiar: `npm install -g oxe-cc@versão` (sem pergunta) |
70
76
  | `--no-global-cli` / `-l` | Não pergunta nem instala o CLI global (útil em CI) |
71
- | `--copilot-cli` | Copia comandos OXE para `.claude/commands/` (teste com GitHub Copilot CLI) |
72
- | `--vscode` | Copia `.vscode/settings.json` de exemplo |
77
+ | `--copilot-cli` | Copia comandos OXE para **`~/.claude/commands/`** e **`~/.copilot/commands/`** |
78
+ | `--vscode` | Copia `.vscode/settings.json` (só com layout **`--global`**) |
73
79
  | `--no-commands` | Omite `commands/oxe/` |
74
80
  | `--no-agents` | Omite `AGENTS.md` |
75
81
  | `--dir <pasta>` ou argumento posicional | Destino em vez do diretório atual |
76
82
 
77
83
  **Global:** `npm install -g oxe-cc`.
78
84
 
79
- **Subcomandos:** `oxe-cc doctor` (valida Node, workflows, `.oxe/`), `oxe-cc init-oxe` (só bootstrap `.oxe/`).
85
+ **Subcomandos**
86
+
87
+ | Comando | Função |
88
+ |---------|--------|
89
+ | `oxe-cc doctor` | Valida Node, workflows do pacote, `.oxe/`, coerência STATE vs arquivos, scan antigo (`scan_max_age_days`), seções da SPEC, ondas do PLAN |
90
+ | `oxe-cc status` | Leve: coerência `.oxe/` + **um** próximo passo sugerido (espelha o workflow `next`) |
91
+ | `oxe-cc init-oxe` | Só o bootstrap `.oxe/` (STATE, config, codebase) |
92
+ | `oxe-cc uninstall` | Remove integrações OXE em `~/.cursor`, `~/.copilot`, `~/.claude` e pastas de workflows no repo (`--ide-only` só no HOME) |
93
+ | `oxe-cc update` | Executa `npx oxe-cc@latest --force` na pasta do projeto (útil para atualizar tudo de uma vez) |
80
94
 
81
95
  </details>
82
96
 
@@ -90,7 +104,7 @@ npm test
90
104
  node bin/oxe-cc.js --help
91
105
  ```
92
106
 
93
- Para testar no teu app: `npm link` aqui, depois `npm link oxe-cc` no projeto alvo.
107
+ Para testar no seu app: `npm link` aqui, depois `npm link oxe-cc` no projeto alvo.
94
108
 
95
109
  </details>
96
110
 
@@ -98,33 +112,33 @@ Para testar no teu app: `npm link` aqui, depois `npm link oxe-cc` no projeto alv
98
112
 
99
113
  ## Como funciona
100
114
 
101
- **Já tens código?** Começa por **`/oxe-scan`**. Gera mapas em **`.oxe/codebase/`** (stack, estrutura, testes, convenções, etc.). Assim o **spec** e o **plan** alinham com o repo real — à semelhança de correres *map-codebase* antes do roadmap no GSD.
115
+ **Já tem código no repositório?** Comece por **`/oxe-scan`**. Isso gera mapas em **`.oxe/codebase/`** (stack, estrutura, testes, convenções, etc.). Assim o **spec** e o **plan** alinham com o repo real — no mesmo espírito de rodar *map-codebase* antes do roadmap no GSD.
102
116
 
103
117
  ### 1. Mapear — `/oxe-scan`
104
118
 
105
- Inventaria o projeto e preenche **`.oxe/codebase/*.md`**, atualiza **`.oxe/STATE.md`**. Podes indicar foco opcional (ex. “só API”).
119
+ Inventaria o projeto e preenche **`.oxe/codebase/*.md`**, atualiza **`.oxe/STATE.md`**. Você pode indicar foco opcional (ex.: “só API”).
106
120
 
107
121
  ### 2. Especificar — `/oxe-spec`
108
122
 
109
- Produz ou atualiza **`.oxe/SPEC.md`**: objetivo, escopo, critérios de aceite, riscos. Isto é o contrato antes do plano.
123
+ Produz ou atualiza **`.oxe/SPEC.md`**: objetivo, escopo, critérios de aceite, riscos. Isso é o contrato antes do plano.
110
124
 
111
125
  ### 3. Discutir *(opcional)* — `/oxe-discuss`
112
126
 
113
- Captura decisões de implementação (UI, API, tom, edge cases) em **`.oxe/DISCUSS.md`**, para o plano não “adivinhar” o que preferes. Útil quando `discuss_before_plan` está ativo em `.oxe/config.json`. Saltar = defaults razoáveis; usar = mais próximo da tua visão.
127
+ Captura decisões de implementação (UI, API, tom, edge cases) em **`.oxe/DISCUSS.md`**, para o plano não “adivinhar” o que você prefere. Útil quando `discuss_before_plan` está ativo em `.oxe/config.json`. **Pular** este passo = defaults razoáveis; **usar** = mais próximo da sua visão.
114
128
 
115
129
  ### 4. Planear — `/oxe-plan`
116
130
 
117
- Gera **`.oxe/PLAN.md`**: tarefas **atómicas**, **ondas** (paralelo vs sequencial), e bloco **Verificar** (comando de teste ou checklist) **por tarefa**. Ideia: cada tarefa cabe num contexto de agente focado, com verificação explícita — mesmo espírito dos planos XML pequenos do GSD, em Markdown.
131
+ Gera **`.oxe/PLAN.md`**: tarefas **atômicas**, **ondas** (paralelo vs sequencial), e bloco **Verificar** (comando de teste ou checklist) **por tarefa**. Ideia: cada tarefa cabe num contexto de agente focado, com verificação explícita — mesmo espírito dos planos XML pequenos do GSD, em Markdown.
118
132
 
119
- Ondas em resumo: tarefas **independentes** na mesma onda podem correr em paralelo; **dependentes** vão para ondas posteriores (como no diagrama de *waves* do GSD, só que com menos cerimónia).
133
+ Ondas em resumo: tarefas **independentes** na mesma onda podem **rodar** em paralelo; **dependentes** vão para ondas posteriores (como no diagrama de *waves* do GSD, só que com menos cerimônia).
120
134
 
121
135
  ### 5. Executar — implementação + `/oxe-execute` *(opcional)*
122
136
 
123
- Implementas no editor ou deixas o agente seguir **`/oxe-execute`** sobre o plano (ou QUICK). O OXE não impõe subagentes nem commits atómicos por tarefa como o GSD; isso fica ao teu fluxo Git.
137
+ Implemente no editor ou deixe o agente seguir **`/oxe-execute`** sobre o plano (ou QUICK). O OXE não impõe subagentes nem commits atômicos por tarefa como o GSD; isso fica a cargo do **seu** fluxo com Git.
124
138
 
125
139
  ### 6. Verificar — `/oxe-verify`
126
140
 
127
- Cruza **SPEC** + **PLAN** com o código; escreve **`.oxe/VERIFY.md`**. Se algo falhar, corrigis ou replanejas (`/oxe-plan` com lógica de replanejamento descrita no workflow).
141
+ Cruza **SPEC** + **PLAN** com o código; escreve **`.oxe/VERIFY.md`**. Se algo falhar, corrija ou replaneje (`/oxe-plan` com lógica de replanejamento descrita no workflow).
128
142
 
129
143
  ### 7. Seguir em frente — `/oxe-next` e ciclo
130
144
 
@@ -134,17 +148,17 @@ Para a **próxima** feature ou fase: de novo **spec → plan → …** ou **`/ox
134
148
 
135
149
  ## Modo rápido
136
150
 
137
- Para trabalho **adhoc** sem roadmap completo — equivalente conceptual ao **`/gsd:quick`**:
151
+ Para trabalho **ad hoc** sem roadmap completo — equivalente **conceitual** ao **`/gsd:quick`**:
138
152
 
139
- **`/oxe-quick`** gera **`.oxe/QUICK.md`** com passos curtos e verificação. Depois podes usar **`/oxe-execute`** em cima disso ou implementar direto e fechar com **`/oxe-verify`**.
153
+ **`/oxe-quick`** gera **`.oxe/QUICK.md`** com passos curtos e verificação. Depois você pode usar **`/oxe-execute`** em cima disso ou implementar direto e fechar com **`/oxe-verify`**.
140
154
 
141
- Se o trabalho crescer, **promove** para spec + plan completos.
155
+ Se o trabalho crescer, **promova** para spec + plan completos.
142
156
 
143
157
  ---
144
158
 
145
159
  ## Porque funciona
146
160
 
147
- **Context engineering:** o agente não precisa de “lembrar” tudo na janela principal — o que importa está em ficheiros **pequenos e por etapa**.
161
+ **Context engineering:** o agente não precisa de “lembrar” tudo na janela principal — o que importa está em arquivos **pequenos e por etapa**.
148
162
 
149
163
  | Artefato | Função |
150
164
  |----------|--------|
@@ -152,12 +166,12 @@ Se o trabalho crescer, **promove** para spec + plan completos.
152
166
  | `.oxe/codebase/*.md` | Mapa do repo após scan |
153
167
  | `.oxe/SPEC.md` | O que entregar e como saber que está certo |
154
168
  | `.oxe/DISCUSS.md` | Preferências antes do plano *(opcional)* |
155
- | `.oxe/PLAN.md` | Tarefas atómicas + **Verificar** por item |
169
+ | `.oxe/PLAN.md` | Tarefas atômicas + **Verificar** por item |
156
170
  | `.oxe/QUICK.md` | Modo rápido |
157
171
  | `.oxe/VERIFY.md` | Resultado das verificações |
158
172
  | `oxe/workflows/*.md` | **Fonte única** dos passos (Cursor e Copilot só delegam aqui) |
159
173
 
160
- **Formato:** planos em Markdown com secções fixas (incl. verificação), legíveis por humanos e por modelos — sem XML obrigatório, mas com a mesma ideia de *precise instructions + verify*.
174
+ **Formato:** planos em Markdown com seções fixas (incl. verificação), legíveis por humanos e por modelos — sem XML obrigatório, mas com a mesma ideia de *precise instructions + verify*.
161
175
 
162
176
  ---
163
177
 
@@ -186,7 +200,7 @@ Se o trabalho crescer, **promove** para spec + plan completos.
186
200
 
187
201
  | Prompt | O que faz |
188
202
  |--------|-----------|
189
- | `/oxe-review-pr` | Segue `oxe/workflows/review-pr.md`: diff estilo PR (`git diff base...head`, `gh pr diff <n>`, ou fetch `pull/<n>/head`), riscos, testes e checklist. Podes colar o **link da PR** (ex. `https://github.com/org/repo/pull/10`) ou indicar `main` e `feature/x`. **Não** há slash command em `.cursor/commands/`; no Cursor podes pedir o mesmo em linguagem natural com o workflow em contexto. |
203
+ | `/oxe-review-pr` | Segue `oxe/workflows/review-pr.md`: diff estilo PR (`git diff base...head`, `gh pr diff <n>`, ou fetch `pull/<n>/head`), riscos, testes e checklist. Você pode colar o **link da PR** (ex.: `https://github.com/org/repo/pull/10`) ou indicar `main` e `feature/x`. **Não** há slash command em `.cursor/commands/`; no Cursor você pode pedir o mesmo em linguagem natural com o workflow em contexto. |
190
204
 
191
205
  ### Outros clientes
192
206
 
@@ -196,7 +210,7 @@ Em **Claude Code** (ou ferramentas que leem `commands/oxe/`), os mesmos passos e
196
210
 
197
211
  ## Configuração
198
212
 
199
- Preferências do projeto em **`.oxe/config.json`** (criado no bootstrap a partir de `oxe/templates/config.template.json`). Chaves e comportamento: [`oxe/templates/CONFIG.md`](oxe/templates/CONFIG.md) (ex.: `discuss_before_plan`, texto pós-verify, comando de teste por defeito).
213
+ Preferências do projeto em **`.oxe/config.json`** (criado no bootstrap a partir de `oxe/templates/config.template.json`). Chaves e comportamento: [`oxe/templates/CONFIG.md`](oxe/templates/CONFIG.md) (ex.: `discuss_before_plan`, texto pós-verify, comando de teste padrão).
200
214
 
201
215
  ---
202
216
 
@@ -204,21 +218,21 @@ Preferências do projeto em **`.oxe/config.json`** (criado no bootstrap a partir
204
218
 
205
219
  | Situação | O que tentar |
206
220
  |----------|----------------|
207
- | Comandos não aparecem no Cursor | Confirma que `.cursor/commands/` existe; reinicia o Cursor |
208
- | Prompts `/oxe-*` não aparecem no Copilot | Ativa `"chat.promptFiles": true`; confirma `.github/prompts/*.prompt.md` |
209
- | Slash `/oxe-*` no **Copilot CLI** | Instala com **`--copilot-cli`** (pasta `.claude/commands/`); atualiza o CLI; comportamento ainda experimental |
210
- | **`ETARGET`** / versão não encontrada no `npx` | `npm cache clean --force`, `npx clear-npx-cache`, ou fixa versão: `npx oxe-cc@0.3.0`. Verifica `npm config get registry` |
211
- | **404** no `npm view oxe-cc` | Pacote com outro nome (scope) ou ainda não publicado — usa `npm link` ou `node …/bin/oxe-cc.js` |
212
- | Ficheiros não atualizam | Reinstala com **`--force`** |
221
+ | Comandos não aparecem no Cursor | Confirme que `~/.cursor/commands/` (ou a pasta configurada) existe; reinicie o Cursor |
222
+ | Prompts `/oxe-*` não aparecem no Copilot | Ative `"chat.promptFiles": true`; confirme prompts em **`~/.copilot/prompts/`** (o OXE não coloca `.github/` no repo para o Copilot) |
223
+ | Slash `/oxe-*` no **Copilot CLI** | Instale com **`--copilot-cli`** (`~/.claude/commands` e `~/.copilot/commands`); comportamento ainda experimental |
224
+ | **`ETARGET`** / versão não encontrada no `npx` | `npm cache clean --force`, `npx clear-npx-cache`, ou fixe a versão: `npx oxe-cc@0.3.0`. Verifique `npm config get registry` |
225
+ | **404** no `npm view oxe-cc` | Pacote com outro nome (scope) ou ainda não publicado — use `npm link` ou `node …/bin/oxe-cc.js` |
226
+ | Arquivos não atualizam | Reinstale com **`--force`** (com backup local se você tiver editado arquivos rastreados) |
213
227
 
214
228
  **Ajuda no terminal:** `oxe-cc --help`. **Diagnóstico:** `oxe-cc doctor`.
215
229
 
216
- **Banner no CLI:** [`bin/banner.txt`](bin/banner.txt) (`{version}`). `OXE_NO_BANNER=1` desliga; `NO_COLOR` remove cores.
230
+ **Banner no CLI:** [`bin/banner.txt`](bin/banner.txt) (`{version}`). `OXE_NO_BANNER=1` desativa o banner; `NO_COLOR` remove cores.
217
231
 
218
232
  <details>
219
233
  <summary><strong>Publicar no npm (mantenedores)</strong></summary>
220
234
 
221
- Sobe `version` em `package.json`, `npm login` (2FA se exigido), `npm publish --access public`. O `prepublishOnly` corre testes e `scan:assets`.
235
+ Incremente `version` em `package.json`, rode `npm login` (2FA se exigido) e `npm publish --access public`. O script `prepublishOnly` **executa** os testes e o `scan:assets`.
222
236
 
223
237
  </details>
224
238
 
@@ -229,7 +243,7 @@ Sobe `version` em `package.json`, `npm login` (2FA se exigido), `npm publish --a
229
243
  |---------|--------|
230
244
  | `assets/readme-banner.svg` | Banner deste README |
231
245
  | `bin/oxe-cc.js`, `bin/banner.txt` | CLI |
232
- | `oxe/workflows/` | Workflows canónicos |
246
+ | `oxe/workflows/` | Workflows canônicos |
233
247
  | `oxe/templates/` | Modelos e CONFIG |
234
248
  | `.cursor/`, `.github/` | Cursor e Copilot |
235
249
  | `commands/oxe/` | `oxe:*` para outros runtimes |
@@ -1,18 +1,19 @@
1
- <svg xmlns="http://www.w3.org/2000/svg" width="920" height="200" viewBox="0 0 920 200" role="img" aria-label="OXE  spec-driven workflows">
1
+ <?xml version="1.0" encoding="UTF-8"?>
2
+ <svg xmlns="http://www.w3.org/2000/svg" width="920" height="200" viewBox="0 0 920 200" role="img" aria-label="OXE spec-driven workflows">
2
3
  <defs>
3
4
  <linearGradient id="oxe-bg" x1="0%" y1="0%" x2="100%" y2="100%">
4
- <stop offset="0%" style="stop-color:#0d1117"/>
5
- <stop offset="50%" style="stop-color:#161b22"/>
6
- <stop offset="100%" style="stop-color:#21262d"/>
5
+ <stop offset="0%" stop-color="#0d1117"/>
6
+ <stop offset="50%" stop-color="#161b22"/>
7
+ <stop offset="100%" stop-color="#21262d"/>
7
8
  </linearGradient>
8
9
  <linearGradient id="oxe-accent" x1="0%" y1="0%" x2="100%" y2="0%">
9
- <stop offset="0%" style="stop-color:#58a6ff"/>
10
- <stop offset="100%" style="stop-color:#79c0ff"/>
10
+ <stop offset="0%" stop-color="#58a6ff"/>
11
+ <stop offset="100%" stop-color="#79c0ff"/>
11
12
  </linearGradient>
12
13
  </defs>
13
14
  <rect width="920" height="200" rx="16" fill="url(#oxe-bg)"/>
14
15
  <rect x="2" y="2" width="916" height="196" rx="14" fill="none" stroke="url(#oxe-accent)" stroke-width="2" opacity="0.45"/>
15
- <text x="460" y="100" text-anchor="middle" font-family="ui-sans-serif, system-ui, -apple-system, Segoe UI, sans-serif" font-size="72" font-weight="800" fill="url(#oxe-accent)" letter-spacing="0.12em">OXE</text>
16
- <text x="460" y="138" text-anchor="middle" font-family="ui-sans-serif, system-ui, -apple-system, Segoe UI, sans-serif" font-size="17" fill="#8b949e">Fluxo spec-driven Cursor &amp; GitHub Copilot CLI npm</text>
17
- <text x="460" y="168" text-anchor="middle" font-family="ui-monospace, SFMono-Regular, Consolas, monospace" font-size="13" fill="#6e7681">npx oxe-cc@latest</text>
16
+ <text x="460" y="100" text-anchor="middle" font-family="ui-sans-serif,system-ui,-apple-system,Segoe UI,sans-serif" font-size="72" font-weight="800" fill="url(#oxe-accent)" letter-spacing="0.12em">OXE</text>
17
+ <text x="460" y="138" text-anchor="middle" font-family="ui-sans-serif,system-ui,-apple-system,Segoe UI,sans-serif" font-size="17" fill="#8b949e">Fluxo spec-driven &#xb7; Cursor &amp; GitHub Copilot &#xb7; CLI npm</text>
18
+ <text x="460" y="168" text-anchor="middle" font-family="ui-monospace,SFMono-Regular,Consolas,monospace" font-size="13" fill="#6e7681">npx oxe-cc@latest</text>
18
19
  </svg>
@@ -0,0 +1,117 @@
1
+ 'use strict';
2
+
3
+ const fs = require('fs');
4
+ const path = require('path');
5
+ const crypto = require('crypto');
6
+
7
+ const MANIFEST_DIR = '.oxe-cc';
8
+ const MANIFEST_FILE = 'manifest.json';
9
+ const PATCHES_DIR = 'oxe-local-patches';
10
+
11
+ function manifestPath(home) {
12
+ return path.join(home, MANIFEST_DIR, MANIFEST_FILE);
13
+ }
14
+
15
+ function sha256File(filePath) {
16
+ return crypto.createHash('sha256').update(fs.readFileSync(filePath)).digest('hex');
17
+ }
18
+
19
+ /**
20
+ * @param {string} home
21
+ * @returns {Record<string, string>}
22
+ */
23
+ function loadFileManifest(home) {
24
+ const p = manifestPath(home);
25
+ if (!fs.existsSync(p)) return {};
26
+ try {
27
+ const j = JSON.parse(fs.readFileSync(p, 'utf8'));
28
+ return j && typeof j.files === 'object' ? j.files : {};
29
+ } catch {
30
+ return {};
31
+ }
32
+ }
33
+
34
+ /**
35
+ * @param {string} home
36
+ * @param {Record<string, string>} files absPath -> sha256
37
+ * @param {string} version
38
+ */
39
+ function writeFileManifest(home, files, version) {
40
+ const dir = path.join(home, MANIFEST_DIR);
41
+ fs.mkdirSync(dir, { recursive: true });
42
+ const payload = {
43
+ version,
44
+ updated_at: new Date().toISOString(),
45
+ files,
46
+ };
47
+ fs.writeFileSync(manifestPath(home), JSON.stringify(payload, null, 2) + '\n', 'utf8');
48
+ }
49
+
50
+ /**
51
+ * GSD-style: before overwriting with --force, backup files that diverged from last manifest.
52
+ * @param {string} home
53
+ * @param {Record<string, string>} prevManifest
54
+ * @param {{ dryRun: boolean, force: boolean }} opts
55
+ * @param {{ yellow: string, cyan: string, dim: string, reset: string }} colors
56
+ * @returns {string[]} modified paths
57
+ */
58
+ function backupModifiedFromManifest(home, prevManifest, opts, colors) {
59
+ const { yellow, cyan, dim, reset } = colors;
60
+ if (!opts.force || opts.dryRun) return [];
61
+ const modified = [];
62
+ for (const [absPath, oldHash] of Object.entries(prevManifest)) {
63
+ if (!fs.existsSync(absPath)) continue;
64
+ let now;
65
+ try {
66
+ now = sha256File(absPath);
67
+ } catch {
68
+ continue;
69
+ }
70
+ if (now !== oldHash) modified.push(absPath);
71
+ }
72
+ if (modified.length === 0) return [];
73
+ const stamp = new Date().toISOString().replace(/[:.]/g, '-');
74
+ const patchesRoot = path.join(home, MANIFEST_DIR, PATCHES_DIR, stamp);
75
+ for (const absPath of modified) {
76
+ const rel = path.basename(absPath);
77
+ const dest = path.join(patchesRoot, rel.replace(/[^a-zA-Z0-9._-]+/g, '_'));
78
+ fs.mkdirSync(path.dirname(dest), { recursive: true });
79
+ fs.copyFileSync(absPath, dest);
80
+ }
81
+ const meta = { backed_up_at: new Date().toISOString(), files: modified };
82
+ fs.writeFileSync(path.join(patchesRoot, 'backup-meta.json'), JSON.stringify(meta, null, 2) + '\n', 'utf8');
83
+ console.log(
84
+ ` ${yellow}i${reset} ${modified.length} arquivo(s) OXE alterado(s) localmente — backup em ${cyan}${path.relative(home, patchesRoot)}${reset}`
85
+ );
86
+ for (const f of modified) console.log(` ${dim}${f}${reset}`);
87
+ return modified;
88
+ }
89
+
90
+ /**
91
+ * @param {string} dir
92
+ * @param {(f: string) => boolean} filter
93
+ */
94
+ function collectFilesRecursive(dir, filter) {
95
+ /** @type {string[]} */
96
+ const out = [];
97
+ if (!fs.existsSync(dir)) return out;
98
+ const walk = (d) => {
99
+ for (const e of fs.readdirSync(d, { withFileTypes: true })) {
100
+ const p = path.join(d, e.name);
101
+ if (e.isDirectory()) walk(p);
102
+ else if (filter(e.name)) out.push(p);
103
+ }
104
+ };
105
+ walk(dir);
106
+ return out;
107
+ }
108
+
109
+ module.exports = {
110
+ loadFileManifest,
111
+ writeFileManifest,
112
+ backupModifiedFromManifest,
113
+ collectFilesRecursive,
114
+ sha256File,
115
+ MANIFEST_DIR,
116
+ PATCHES_DIR,
117
+ };