oxe-cc 1.7.0 → 1.8.3

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 (44) hide show
  1. package/CHANGELOG.md +106 -0
  2. package/README.md +37 -37
  3. package/bin/lib/oxe-agent-install.cjs +24 -8
  4. package/bin/lib/oxe-manifest.cjs +20 -13
  5. package/bin/lib/oxe-operational.cjs +234 -41
  6. package/bin/lib/oxe-project-health.cjs +219 -52
  7. package/bin/lib/oxe-rationality.cjs +9 -7
  8. package/bin/oxe-cc.js +443 -236
  9. package/lib/runtime/compiler/graph-compiler.js +1 -1
  10. package/lib/runtime/executor/action-tool-map.js +4 -0
  11. package/lib/runtime/executor/built-in-tools.js +27 -0
  12. package/lib/runtime/executor/llm-task-executor.d.ts +4 -1
  13. package/lib/runtime/executor/llm-task-executor.js +41 -5
  14. package/lib/runtime/executor/node-prompt-builder.d.ts +4 -1
  15. package/lib/runtime/executor/node-prompt-builder.js +13 -2
  16. package/lib/runtime/models/failure.d.ts +1 -1
  17. package/lib/runtime/scheduler/scheduler.d.ts +5 -1
  18. package/lib/runtime/scheduler/scheduler.js +82 -14
  19. package/lib/runtime/verification/verification-compiler.js +7 -5
  20. package/lib/sdk/index.cjs +48 -44
  21. package/oxe/templates/PLAN.template.md +23 -9
  22. package/oxe/templates/SPEC.template.md +55 -22
  23. package/oxe/workflows/plan.md +18 -6
  24. package/oxe/workflows/spec.md +31 -9
  25. package/package.json +103 -100
  26. package/packages/runtime/package.json +14 -14
  27. package/packages/runtime/src/compiler/graph-compiler.ts +1 -1
  28. package/packages/runtime/src/evidence/evidence-store.ts +2 -2
  29. package/packages/runtime/src/executor/action-tool-map.ts +4 -0
  30. package/packages/runtime/src/executor/built-in-tools.ts +29 -0
  31. package/packages/runtime/src/executor/llm-task-executor.ts +46 -4
  32. package/packages/runtime/src/executor/node-prompt-builder.ts +18 -1
  33. package/packages/runtime/src/models/failure.ts +2 -0
  34. package/packages/runtime/src/scheduler/scheduler.ts +93 -15
  35. package/packages/runtime/src/verification/verification-compiler.ts +7 -5
  36. package/vscode-extension/package.json +184 -184
  37. package/vscode-extension/oxe-agents-0.9.1.vsix +0 -0
  38. package/vscode-extension/oxe-agents-0.9.2.vsix +0 -0
  39. package/vscode-extension/oxe-agents-1.0.0.vsix +0 -0
  40. package/vscode-extension/oxe-agents-1.4.0.vsix +0 -0
  41. package/vscode-extension/oxe-agents-1.5.0.vsix +0 -0
  42. package/vscode-extension/oxe-agents-1.5.1.vsix +0 -0
  43. package/vscode-extension/oxe-agents-1.6.0.vsix +0 -0
  44. package/vscode-extension/oxe-agents-1.7.0.vsix +0 -0
package/CHANGELOG.md CHANGED
@@ -4,6 +4,112 @@ Todas as versões seguem [Semantic Versioning](https://semver.org/). As mudança
4
4
 
5
5
  ---
6
6
 
7
+ ## [1.8.3] — 2026-05-04
8
+
9
+ ### Release readiness e higiene de publicação
10
+
11
+ Esta release consolida a linha `1.8.3` para publicação no npm com foco em consistência de versão, alinhamento documental e pacote distribuído mais limpo.
12
+
13
+ #### Publicação
14
+
15
+ - alinhamento da versão `1.8.3` entre manifesto raiz, runtime, extensão VS Code, README e changelog
16
+ - fechamento do gate oficial `doctor --release` para a linha atual
17
+ - preparação do pacote npm para sair sem drift entre versão publicada e documentação principal
18
+
19
+ #### Higiene do pacote
20
+
21
+ - exclusão dos arquivos `.vsix` históricos da extensão VS Code do tarball npm
22
+ - manutenção apenas do código-fonte da extensão dentro do pacote, evitando distribuir binários legados desnecessários
23
+
24
+ ## [1.8.2] — 2026-04-30
25
+
26
+ ### Fluxo inicial mais coerente e geração de `spec`/`plan` mais forte
27
+
28
+ Esta release fecha a linha de robustez do ciclo `install -> status/doctor -> /oxe -> spec -> plan -> execute -> verify` sem abrir nova superfície pública. O foco foi remover ruído operacional em projetos novos e aumentar a densidade executável dos artefatos que o OXE induz.
29
+
30
+ #### Fluxo operacional
31
+
32
+ - `install`, `status` e `doctor` passam a convergir em `/oxe` como próximo passo canônico para projetos recém-inicializados
33
+ - `doctor` e `status` deixam de tratar `IMPLEMENTATION-PACK`, `REFERENCE-ANCHORS` e `FIXTURE-PACK` como blocker primário antes de existir `PLAN.md`
34
+ - o relatório racional agora marca o estado sem plano como `não aplicável ainda`, sem contaminar o próximo passo
35
+ - instalações e desinstalações locais por runtime continuam simétricas, com inferência de artefatos locais preservada
36
+
37
+ #### Indução mais forte de SPEC e PLAN
38
+
39
+ - `SPEC.template.md` passou a exigir outcome observável, público-alvo, restrições técnicas, setup externo, conteúdo/fluxos obrigatórios e contratos esperados para o plano
40
+ - `PLAN.template.md` ganhou contrato operacional da solução, densidade operacional mínima, `symbols alvo`, `estado/fluxo coberto` e `fixture/anchor obrigatório` por tarefa
41
+ - `oxe/workflows/spec.md` agora força extração explícita de blocos de interface, conteúdo mínimo, interações, responsividade e acessibilidade em demandas de produto/app/UI
42
+ - `oxe/workflows/plan.md` agora endurece o gate de confiança `>90%` para tarefas mutáveis vagas e exige fechamento mais forte de interface, conteúdo, estado persistido, anchors e fixtures em apps/UI estáticos
43
+
44
+ #### Testes
45
+
46
+ - novo teste cobrindo o estado racional não bloqueante antes da existência de `PLAN.md`
47
+ - suíte focada de CLI/health atualizada para manter o comportamento novo estável
48
+
49
+ ## [1.8.1] — 2026-04-30
50
+
51
+ ### Hotfix — Gaps implementados no fonte TypeScript (não em arquivos compilados)
52
+
53
+ A v1.8.0 aplicou as 5 correções críticas diretamente nos arquivos `.js` compilados (`lib/runtime/`), que são sobrescritos a cada `npm run build:runtime`. Esta release porta todas as correções para o fonte TypeScript em `packages/runtime/src/`, tornando-as permanentes.
54
+
55
+ #### Correções portadas para TypeScript
56
+
57
+ - **`models/failure.ts`**: `FailureClass` agora inclui `'verify'` e `'llm'` como classes canônicas
58
+ - **`scheduler/scheduler.ts`**: `TaskResult` com campo opcional `completed_by`; `TaskExecutor.execute()` aceita `options?: { previousError? }`; `verifyNode()` importa e chama `verifyRun` da fonte TS; `executeNode()` repassa `options`; `requestGateForNode()` com warning quando manager ausente
59
+ - **`executor/built-in-tools.ts`**: `finishTask` handler + registro em `BUILT_IN_TOOLS`
60
+ - **`executor/action-tool-map.ts`**: `finish_task` injetado universalmente em `selectToolsForActions()`
61
+ - **`executor/node-prompt-builder.ts`**: parâmetro `options`, seção de retry context, instrução `finish_task`
62
+ - **`executor/llm-task-executor.ts`**: detecção de `finish_task`, `completed_by` no retorno, `turn_limit_exhausted` retorna `success: false`
63
+
64
+ #### Testes
65
+ - 542 testes passando (era 542 na v1.8.0, nenhuma regressão)
66
+ - 36 testes de gaps (gap1–gap5) todos passando contra o código compilado
67
+
68
+ ---
69
+
70
+ ## [1.8.0] — 2026-04-29
71
+
72
+ ### Autonomous Execution — 5 Critical Gaps Resolved
73
+
74
+ Esta release eleva a autonomia do runtime de ~65% para ~85%+ em projetos de baixo a médio risco, tornando o OXE capaz de transformar um input bem estruturado em entrega verificada com mínima intervenção humana.
75
+
76
+ #### Gap 1 — GateManager Wiring
77
+ - `createExecutionContext()` exportada de `oxe-operational.cjs`: instancia `GateManager` real sempre que o runtime estiver disponível, eliminando o deadlock silencioso de `'gate-missing-manager'`
78
+ - `scheduler.js`: warning explícito quando `ctx.gateManager` ausente em vez de falha silenciosa
79
+ - Novo subcomando `oxe-cc runtime execute` com roteamento automático single-agent / multi-agent
80
+
81
+ #### Gap 2 — Verificação Inline após cada tarefa
82
+ - `Scheduler.verifyNode()`: executa o `verify.command` do nó logo após execução bem-sucedida, antes de emitir `WorkItemCompleted`
83
+ - Falha de verificação → tarefa reentrada no loop de retry com `failure_class: 'verify'`
84
+ - Falha de infraestrutura de verificação (comando inexistente, timeout) → não bloqueia progresso
85
+ - Eventos `VerificationStarted` / `VerificationCompleted` emitidos por tarefa (reducer já existia)
86
+
87
+ #### Gap 3 — Retry Inteligente com Contexto do Erro Anterior
88
+ - `node-prompt-builder.js`: seção "Contexto da tentativa anterior" injetada automaticamente nas tentativas 2+ com stderr/output truncado em 2000 chars
89
+ - `llm-task-executor.js`: aceita `options.previousError`; repassado para o prompt builder
90
+ - `scheduler.js`: `lastError` rastreado e propagado entre tentativas via `executeNode(options)`
91
+
92
+ #### Gap 4 — Sinal Autoritativo de Conclusão (`finish_task`)
93
+ - Nova tool built-in `finish_task` (idempotente) registrada em `BUILT_IN_TOOLS` e `ALL_BUILT_IN_SCHEMAS`
94
+ - `selectToolsForActions()`: `finish_task` injetada universalmente em todos os tipos de ação
95
+ - `node-prompt-builder.js`: instrução explícita de chamar `finish_task` ao concluir
96
+ - `llm-task-executor.js`: detecta chamada de `finish_task` → `completed_by: 'finish_task'`; turns esgotados sem `finish_task` → `success: false, failure_class: 'llm'`
97
+
98
+ #### Gap 5 — MultiAgentCoordinator Wiring
99
+ - `runRuntimeExecute()` exportada de `oxe-operational.cjs`: detecta `plan-agents.json` (sessão > raiz) e roteia para `MultiAgentCoordinator` (parallel/competitive/cooperative) ou `Scheduler` single-agent
100
+ - `oxe-cc runtime execute`: novo subcomando CLI com output formatado e exit code em falhas
101
+
102
+ #### Testes
103
+ - 5 novos arquivos de teste cobrindo cada gap: `gap1-gate-manager`, `gap2-inline-verify`, `gap3-retry-context`, `gap4-finish-task`, `gap5-multi-agent`
104
+ - Suite total: **543 testes passando**, 0 falhas
105
+
106
+ ### Validation
107
+
108
+ - `node --test tests/*.cjs tests/*.test.js`
109
+ - `node bin/oxe-cc.js --version`
110
+
111
+ ---
112
+
7
113
  ## [1.7.0] — 2026-04-23
8
114
 
9
115
  ### OXE-native Agent Catalog
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.7.0` · [package.json](package.json)
10
+ **Versão:** `1.8.3` · [package.json](package.json)
11
11
 
12
12
  **Framework OXE — Orchestrated eXperience Engineering**
13
13
 
@@ -52,7 +52,7 @@ O OXE agora distingue cinco famílias de raciocínio:
52
52
  - `review` — findings primeiro, severidade, evidência e risco residual
53
53
  - `status` — leitura curta do estado, recomendação única e motivo
54
54
 
55
- Essas regras vivem no núcleo canónico em `oxe/workflows/references/reasoning-*.md`, sobem para os workflows em `oxe/workflows/` e são renderizadas para cada runtime em `.github/prompts/`, `.cursor/commands/`, `commands/oxe/`, `.codex/prompts/` e skills multiagente. Agentes especializados vivem em `oxe/agents/` e são instalados como agentes/skills OXE-native quando o runtime suporta esse conceito. Nesta linha, `oxe/workflows/**`, `oxe/agents/**` e `workflow-runtime-contracts.json` são contratos obrigatórios da release; superfícies geradas permanecem derivadas e sincronizadas.
55
+ Essas regras vivem no núcleo canónico em `oxe/workflows/references/reasoning-*.md`, sobem para os workflows em `oxe/workflows/` e são renderizadas para cada runtime em `.github/prompts/`, `.cursor/commands/`, `commands/oxe/`, `.codex/prompts/` e skills multiagente. Agentes especializados vivem em `oxe/agents/` e são instalados como agentes/skills OXE-native quando o runtime suporta esse conceito. Nesta linha, `oxe/workflows/**`, `oxe/agents/**` e `workflow-runtime-contracts.json` são contratos obrigatórios da release; superfícies geradas permanecem derivadas e sincronizadas.
56
56
 
57
57
  ---
58
58
 
@@ -94,10 +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) |
100
- | Release readiness e publicação | [docs/RELEASE-READINESS.md](docs/RELEASE-READINESS.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) |
101
101
 
102
102
  ---
103
103
 
@@ -459,18 +459,18 @@ O `status --full` mostra em ANSI: readiness do ciclo, autoavaliação do plano,
459
459
 
460
460
  O pacote está pronto para uma publicação robusta quando estes sinais estiverem verdes no repositório da release:
461
461
 
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`
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`
474
474
 
475
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.
476
476
 
@@ -522,23 +522,23 @@ npx oxe-cc@latest
522
522
  | Flag | Efeito |
523
523
  |------|--------|
524
524
  | `--cursor` / `--copilot` | Só uma das stacks da IDE |
525
- | `--copilot-cli` | Skills globais do Copilot CLI em `~/.copilot/skills/` |
526
- | `--all-agents` | Cursor + Copilot + Claude + OpenCode + Gemini + Codex + Windsurf + Antigravity |
527
- | `--global` | Layout clássico: `oxe/` na raiz + `.oxe/` |
528
- | `--local` | Layout do repositório: mínimo, só `.oxe/` (padrão). Não controla onde a integração da IDE é instalada. |
529
- | `--ide-local` | Instala a integração no próprio repositório (`.cursor/`, `.github/`, `.claude/`, `.codex/` etc.) |
530
- | `--ide-global` | Instala a integração no HOME do utilizador quando o runtime suportar esse escopo |
531
- | `--force` / `-f` | Sobrescreve arquivos existentes (use para atualizar) |
532
- | `--dry-run` | Lista ações sem escrever |
533
- | `--oxe-only` | Só workflows em `.oxe/`, sem integrações IDE |
534
- | `--no-global-cli` / `-l` | Não instala `oxe-cc` globalmente (útil em CI) |
525
+ | `--copilot-cli` | Skills globais do Copilot CLI em `~/.copilot/skills/` |
526
+ | `--all-agents` | Cursor + Copilot + Claude + OpenCode + Gemini + Codex + Windsurf + Antigravity |
527
+ | `--global` | Layout clássico: `oxe/` na raiz + `.oxe/` |
528
+ | `--local` | Layout do repositório: mínimo, só `.oxe/` (padrão). Não controla onde a integração da IDE é instalada. |
529
+ | `--ide-local` | Instala a integração no próprio repositório (`.cursor/`, `.github/`, `.claude/`, `.codex/` etc.) |
530
+ | `--ide-global` | Instala a integração no HOME do utilizador quando o runtime suportar esse escopo |
531
+ | `--force` / `-f` | Sobrescreve arquivos existentes (use para atualizar) |
532
+ | `--dry-run` | Lista ações sem escrever |
533
+ | `--oxe-only` | Só workflows em `.oxe/`, sem integrações IDE |
534
+ | `--no-global-cli` / `-l` | Não instala `oxe-cc` globalmente (útil em CI) |
535
535
  | `OXE_NO_PROMPT=1` | Modo não-interativo (CI) |
536
536
 
537
537
  </details>
538
538
 
539
- GitHub Copilot no VS Code é **workspace-first**: o OXE instala prompt files em `.github/prompts/*.prompt.md` e mescla instruções em `.github/copilot-instructions.md`. `~/.copilot/` fica reservado ao legado detectável e ao runtime do Copilot CLI.
540
-
541
- Claude Code recebe comandos em `.claude/commands` e agentes especializados em `.claude/agents`. Codex recebe prompts em `.codex/prompts` e skills OXE em `.agents/skills`, incluindo os agentes especializados derivados de `oxe/agents/`.
539
+ GitHub Copilot no VS Code é **workspace-first**: o OXE instala prompt files em `.github/prompts/*.prompt.md` e mescla instruções em `.github/copilot-instructions.md`. `~/.copilot/` fica reservado ao legado detectável e ao runtime do Copilot CLI.
540
+
541
+ Claude Code recebe comandos em `.claude/commands` e agentes especializados em `.claude/agents`. Codex recebe prompts em `.codex/prompts` e skills OXE em `.agents/skills`, incluindo os agentes especializados derivados de `oxe/agents/`.
542
542
 
543
543
  <details>
544
544
  <summary><strong>Atualizar e desinstalar</strong></summary>
@@ -571,11 +571,11 @@ node bin/oxe-cc.js --help
571
571
  | Comando | O que faz |
572
572
  |---------|-----------|
573
573
  | `oxe-cc` / `oxe-cc install` | Instala workflows e integrações |
574
- | `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 |
575
- | `oxe-cc doctor --release --write-manifest` | Gate de publicação: valida árvore canónica `oxe/`, `workflow-runtime-contracts.json`, versões, topo do `CHANGELOG`, runtime compilado, wrapper sync e relatórios obrigatórios; persiste `release-manifest.json` |
576
- | `oxe-cc status` | Próximo passo sugerido + saúde lógica do fluxo |
577
- | `oxe-cc status --full` | Coverage matrix + readiness gate + active run no terminal (ANSI); em repositório do pacote, troca para release readiness em vez de plan readiness |
578
- | `oxe-cc status --json` | Mesmo, em JSON (schema v5), com `workspaceMode`, `releaseReadiness`, `healthStatus`, `activeSession`, `planSelfEvaluation`, `contextPacks`, `contextQuality`, `semanticsDrift`, `verificationSummary`, `residualRiskSummary`, `evidenceCoverage`, `pendingGates`, `policyDecisionSummary`, `quotaSummary`, `auditSummary`, `promotionSummary`, `runtimeMode`, `fallbackMode`, `gateQueue`, `policyCoverage`, `promotionReadiness`, `recoveryState`, `multiAgent` e `providerCatalog` |
574
+ | `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 |
575
+ | `oxe-cc doctor --release --write-manifest` | Gate de publicação: valida árvore canónica `oxe/`, `workflow-runtime-contracts.json`, versões, topo do `CHANGELOG`, runtime compilado, wrapper sync e relatórios obrigatórios; persiste `release-manifest.json` |
576
+ | `oxe-cc status` | Próximo passo sugerido + saúde lógica do fluxo |
577
+ | `oxe-cc status --full` | Coverage matrix + readiness gate + active run no terminal (ANSI); em repositório do pacote, troca para release readiness em vez de plan readiness |
578
+ | `oxe-cc status --json` | Mesmo, em JSON (schema v5), com `workspaceMode`, `releaseReadiness`, `healthStatus`, `activeSession`, `planSelfEvaluation`, `contextPacks`, `contextQuality`, `semanticsDrift`, `verificationSummary`, `residualRiskSummary`, `evidenceCoverage`, `pendingGates`, `policyDecisionSummary`, `quotaSummary`, `auditSummary`, `promotionSummary`, `runtimeMode`, `fallbackMode`, `gateQueue`, `policyCoverage`, `promotionReadiness`, `recoveryState`, `multiAgent` e `providerCatalog` |
579
579
  | `oxe-cc context build [--workflow <slug>] [--tier <minimal\|standard\|full>]` | Gera context pack(s) em `.oxe/context/packs/` — seleção determinística de artefatos por contrato de workflow |
580
580
  | `oxe-cc context inspect [--workflow <slug>]` | Inspeciona um context pack existente ou resolve sob demanda (sem escrita); útil para diagnóstico antes de iniciar um passo |
581
581
  | `oxe-cc update` | Atualiza workflows para a versão mais recente |
@@ -603,7 +603,7 @@ Arquivo `.oxe/config.json`. Principais opções:
603
603
  |-------|--------|-----------|
604
604
  | `profile` | `"balanced"` | `strict` / `balanced` / `fast` / `legacy` |
605
605
  | `verification_depth` | `"standard"` | `"thorough"` ativa gaps automático no verify (Camada 5) |
606
- | `plan_confidence_threshold` | `90` | Limiar canónico para `execute` aceitar um `PLAN.md`; a confiança precisa ser **maior que** esse valor |
606
+ | `plan_confidence_threshold` | `90` | Limiar canónico para `execute` aceitar um `PLAN.md`; a confiança precisa ser **maior que** esse valor |
607
607
  | `security_in_verify` | `false` | `true` ativa OWASP automático no verify (Camada 6) |
608
608
  | `discuss_before_plan` | `false` | Exige aprovação de decisões antes do plano |
609
609
  | `scale_adaptive` | `true` | Scan sugere o profile pelo tamanho do projeto |
@@ -95,14 +95,30 @@ function parseCursorCommandFrontmatter(text) {
95
95
  if (end === -1) {
96
96
  return { description: '', body: normalized.trim(), frontmatter: {} };
97
97
  }
98
- const yamlBlock = normalized.slice(4, end);
99
- const frontmatter = {};
100
- let description = '';
101
- for (const line of yamlBlock.split('\n')) {
102
- const m = line.match(/^description:\s*(.+)$/);
103
- if (m) {
104
- description = m[1].trim().replace(/^["']|["']$/g, '');
105
- }
98
+ const yamlBlock = normalized.slice(4, end);
99
+ const frontmatter = {};
100
+ let description = '';
101
+ const yamlLines = yamlBlock.split('\n');
102
+ for (let i = 0; i < yamlLines.length; i++) {
103
+ const line = yamlLines[i];
104
+ const foldedDescription = line.match(/^description:\s*[>|]\s*$/);
105
+ if (foldedDescription) {
106
+ const parts = [];
107
+ let j = i + 1;
108
+ while (j < yamlLines.length && /^\s+/.test(yamlLines[j])) {
109
+ const value = yamlLines[j].trim();
110
+ if (value) parts.push(value);
111
+ j += 1;
112
+ }
113
+ description = parts.join(' ').trim();
114
+ frontmatter.description = description;
115
+ i = j - 1;
116
+ continue;
117
+ }
118
+ const m = line.match(/^description:\s*(.+)$/);
119
+ if (m) {
120
+ description = m[1].trim().replace(/^["']|["']$/g, '');
121
+ }
106
122
  const kv = line.match(/^([A-Za-z0-9_-]+):\s*(.+)$/);
107
123
  if (kv) frontmatter[kv[1]] = kv[2].trim().replace(/^["']|["']$/g, '');
108
124
  }
@@ -51,19 +51,26 @@ function writeFileManifest(home, files, version) {
51
51
  * Before overwriting with --force, backup files that diverged from last manifest.
52
52
  * @param {string} home
53
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);
54
+ * @param {{ dryRun: boolean, force: boolean }} opts
55
+ * @param {{ yellow: string, cyan: string, dim: string, reset: string }} colors
56
+ * @param {{ scopeRoots?: string[] }} [scope]
57
+ * @returns {string[]} modified paths
58
+ */
59
+ function backupModifiedFromManifest(home, prevManifest, opts, colors, scope = {}) {
60
+ const { yellow, cyan, dim, reset } = colors;
61
+ if (!opts.force || opts.dryRun) return [];
62
+ const normalizedRoots = Array.isArray(scope.scopeRoots)
63
+ ? scope.scopeRoots.map((root) => path.resolve(root))
64
+ : [];
65
+ const modified = [];
66
+ for (const [absPath, oldHash] of Object.entries(prevManifest)) {
67
+ if (normalizedRoots.length > 0 && !normalizedRoots.some((root) => absPath === root || absPath.startsWith(`${root}${path.sep}`))) {
68
+ continue;
69
+ }
70
+ if (!fs.existsSync(absPath)) continue;
71
+ let now;
72
+ try {
73
+ now = sha256File(absPath);
67
74
  } catch {
68
75
  continue;
69
76
  }