@orkastery/cli 0.5.3 → 0.6.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/adapters/README.md +18 -0
- package/adapters/claude-code/.claude-plugin/plugin.json +1 -0
- package/adapters/claude-code/README.md +195 -5
- package/adapters/claude-code/agents/ork-check.md +1 -0
- package/adapters/claude-code/agents/ork-go.md +1 -0
- package/adapters/claude-code/agents/ork-goal.md +1 -0
- package/adapters/claude-code/agents/ork-master.md +1 -0
- package/adapters/claude-code/agents/ork-plan.md +1 -0
- package/adapters/claude-code/agents/ork-ship.md +1 -0
- package/adapters/claude-code/hooks/hooks.json +2 -1
- package/adapters/claude-code/hooks/ork-guard.js +15 -1
- package/adapters/claude-code/hooks/ork-resposta.js +91 -0
- package/adapters/claude-code/hooks/ork-sensor.js +18 -2
- package/adapters/claude-code/hooks/quota-signal.js +14 -0
- package/adapters/claude-code/mods/autoridade.json +56 -0
- package/adapters/claude-code/mods/ork-clima/.claude-plugin/plugin.json +14 -0
- package/adapters/claude-code/mods/ork-clima/hooks/contas.ts +283 -0
- package/adapters/claude-code/mods/ork-clima/hooks/hooks.json +3 -0
- package/adapters/claude-code/mods/ork-clima/hooks/previsao.ts +393 -0
- package/adapters/claude-code/mods/ork-clima/hooks/register.ts +205 -0
- package/adapters/claude-code/mods/ork-clima/orkastery-mod.json +5 -0
- package/adapters/claude-code/mods/ork-clima/types/index.d.ts +80 -0
- package/adapters/claude-code/mods/ork-freio/.claude-plugin/plugin.json +14 -0
- package/adapters/claude-code/mods/ork-freio/hooks/carga.ts +160 -0
- package/adapters/claude-code/mods/ork-freio/hooks/conferencia.ts +309 -0
- package/adapters/claude-code/mods/ork-freio/hooks/hooks.json +3 -0
- package/adapters/claude-code/mods/ork-freio/hooks/lote.ts +270 -0
- package/adapters/claude-code/mods/ork-freio/hooks/register.ts +285 -0
- package/adapters/claude-code/mods/ork-freio/orkastery-mod.json +5 -0
- package/adapters/claude-code/mods/ork-freio/types/index.d.ts +127 -0
- package/adapters/claude-code/mods/ork-mensageiro/.claude-plugin/plugin.json +14 -0
- package/adapters/claude-code/mods/ork-mensageiro/hooks/caixa.ts +215 -0
- package/adapters/claude-code/mods/ork-mensageiro/hooks/hooks.json +3 -0
- package/adapters/claude-code/mods/ork-mensageiro/hooks/painel.tsx +165 -0
- package/adapters/claude-code/mods/ork-mensageiro/hooks/recepcao.ts +256 -0
- package/adapters/claude-code/mods/ork-mensageiro/hooks/register.tsx +481 -0
- package/adapters/claude-code/mods/ork-mensageiro/orkastery-mod.json +5 -0
- package/adapters/claude-code/mods/ork-mensageiro/types/index.d.ts +85 -0
- package/adapters/claude-code/mods/ork-mesa/.claude-plugin/plugin.json +14 -0
- package/adapters/claude-code/mods/ork-mesa/hooks/cartoes.tsx +246 -0
- package/adapters/claude-code/mods/ork-mesa/hooks/decidir.ts +110 -0
- package/adapters/claude-code/mods/ork-mesa/hooks/fila.ts +253 -0
- package/adapters/claude-code/mods/ork-mesa/hooks/hooks.json +3 -0
- package/adapters/claude-code/mods/ork-mesa/hooks/obvia.ts +98 -0
- package/adapters/claude-code/mods/ork-mesa/hooks/register.tsx +493 -0
- package/adapters/claude-code/mods/ork-mesa/orkastery-mod.json +5 -0
- package/adapters/claude-code/mods/ork-mesa/types/index.d.ts +131 -0
- package/adapters/claude-code/mods/ork-pista/.claude-plugin/plugin.json +14 -0
- package/adapters/claude-code/mods/ork-pista/hooks/acoes.ts +71 -0
- package/adapters/claude-code/mods/ork-pista/hooks/ci.ts +121 -0
- package/adapters/claude-code/mods/ork-pista/hooks/hooks.json +3 -0
- package/adapters/claude-code/mods/ork-pista/hooks/pista.tsx +356 -0
- package/adapters/claude-code/mods/ork-pista/hooks/register.tsx +439 -0
- package/adapters/claude-code/mods/ork-pista/orkastery-mod.json +5 -0
- package/adapters/claude-code/mods/ork-pista/types/index.d.ts +85 -0
- package/adapters/claude-code/mods/ork-ponte/.claude-plugin/plugin.json +13 -0
- package/adapters/claude-code/mods/ork-ponte/hooks/faixa.tsx +57 -0
- package/adapters/claude-code/mods/ork-ponte/hooks/guarda.ts +410 -0
- package/adapters/claude-code/mods/ork-ponte/hooks/hooks.json +3 -0
- package/adapters/claude-code/mods/ork-ponte/hooks/mostrado.ts +55 -0
- package/adapters/claude-code/mods/ork-ponte/hooks/nucleo.ts +157 -0
- package/adapters/claude-code/mods/ork-ponte/hooks/papel.ts +42 -0
- package/adapters/claude-code/mods/ork-ponte/hooks/register.ts +331 -0
- package/adapters/claude-code/mods/ork-ponte/hooks/vigia.ts +76 -0
- package/adapters/claude-code/mods/ork-ponte/orkastery-mod.json +5 -0
- package/adapters/claude-code/mods/ork-ponte/types/index.d.ts +178 -0
- package/adapters/claude-code/mods/ork-portao/.claude-plugin/plugin.json +14 -0
- package/adapters/claude-code/mods/ork-portao/hooks/hooks.json +3 -0
- package/adapters/claude-code/mods/ork-portao/hooks/lease.ts +201 -0
- package/adapters/claude-code/mods/ork-portao/hooks/plano.ts +304 -0
- package/adapters/claude-code/mods/ork-portao/hooks/register.ts +339 -0
- package/adapters/claude-code/mods/ork-portao/hooks/verify.ts +152 -0
- package/adapters/claude-code/mods/ork-portao/orkastery-mod.json +5 -0
- package/adapters/claude-code/mods/ork-portao/types/index.d.ts +60 -0
- package/adapters/claude-code/mods/ork-radar/.claude-plugin/plugin.json +14 -0
- package/adapters/claude-code/mods/ork-radar/hooks/colisao.ts +420 -0
- package/adapters/claude-code/mods/ork-radar/hooks/hooks.json +3 -0
- package/adapters/claude-code/mods/ork-radar/hooks/mapa.tsx +322 -0
- package/adapters/claude-code/mods/ork-radar/hooks/register.tsx +470 -0
- package/adapters/claude-code/mods/ork-radar/orkastery-mod.json +5 -0
- package/adapters/claude-code/mods/ork-radar/types/index.d.ts +72 -0
- package/adapters/claude-code/mods/ork-ritual/.claude-plugin/plugin.json +14 -0
- package/adapters/claude-code/mods/ork-ritual/hooks/hooks.json +3 -0
- package/adapters/claude-code/mods/ork-ritual/hooks/nota.ts +88 -0
- package/adapters/claude-code/mods/ork-ritual/hooks/register.tsx +494 -0
- package/adapters/claude-code/mods/ork-ritual/hooks/replay.tsx +271 -0
- package/adapters/claude-code/mods/ork-ritual/hooks/ritual.ts +218 -0
- package/adapters/claude-code/mods/ork-ritual/orkastery-mod.json +5 -0
- package/adapters/claude-code/mods/ork-ritual/types/index.d.ts +106 -0
- package/adapters/claude-code/mods/ork-sentinela/.claude-plugin/plugin.json +14 -0
- package/adapters/claude-code/mods/ork-sentinela/hooks/alertas.ts +85 -0
- package/adapters/claude-code/mods/ork-sentinela/hooks/despacho.ts +156 -0
- package/adapters/claude-code/mods/ork-sentinela/hooks/hooks.json +3 -0
- package/adapters/claude-code/mods/ork-sentinela/hooks/register.ts +511 -0
- package/adapters/claude-code/mods/ork-sentinela/hooks/vigia.ts +186 -0
- package/adapters/claude-code/mods/ork-sentinela/orkastery-mod.json +5 -0
- package/adapters/claude-code/mods/ork-sentinela/types/index.d.ts +65 -0
- package/adapters/claude-code/mods/ork-torre/.claude-plugin/plugin.json +14 -0
- package/adapters/claude-code/mods/ork-torre/hooks/agenda.ts +60 -0
- package/adapters/claude-code/mods/ork-torre/hooks/detalhe.tsx +236 -0
- package/adapters/claude-code/mods/ork-torre/hooks/frases.ts +42 -0
- package/adapters/claude-code/mods/ork-torre/hooks/hooks.json +3 -0
- package/adapters/claude-code/mods/ork-torre/hooks/painel.tsx +344 -0
- package/adapters/claude-code/mods/ork-torre/hooks/rede.ts +97 -0
- package/adapters/claude-code/mods/ork-torre/hooks/register.tsx +437 -0
- package/adapters/claude-code/mods/ork-torre/orkastery-mod.json +5 -0
- package/adapters/claude-code/mods/ork-torre/types/index.d.ts +108 -0
- package/adapters/codex/skills/ork/SKILL.md +2 -0
- package/adapters/hermes/README.md +64 -1
- package/adapters/hermes/bin/ork-conhecimento-colecoes.sh +14 -0
- package/adapters/hermes/bin/ork-conhecimento-listar.sh +15 -0
- package/adapters/hermes/bin/ork-conhecimento-mostrar.sh +16 -0
- package/adapters/hermes/bin/ork-conhecimento-verificar.sh +15 -0
- package/adapters/hermes/bin/ork-vigia-batida.py +127 -0
- package/adapters/hermes/hermes.plugin.json +4 -0
- package/adapters/hermes/hitl-ingress/__init__.py +101 -8
- package/adapters/hermes/skills/orkastery-devmaster/SKILL.md +3 -3
- package/adapters/openclaw/README.md +83 -10
- package/adapters/openclaw/bin/ork-vigia-batida.js +86 -0
- package/adapters/openclaw/dist/hitl-ingress.js +106 -9
- package/adapters/openclaw/dist/index.js +86 -0
- package/adapters/openclaw/openclaw.plugin.json +34 -4
- package/adapters/openclaw/package.json +2 -2
- package/adapters/openclaw/src/hitl-ingress.ts +103 -9
- package/adapters/openclaw/src/index.ts +94 -0
- package/assets/adapters-en/claude-code/README.md +403 -0
- package/assets/adapters-en/claude-code/agents/ork-check.md +33 -0
- package/assets/adapters-en/claude-code/agents/ork-go.md +33 -0
- package/assets/adapters-en/claude-code/agents/ork-goal.md +34 -0
- package/assets/adapters-en/claude-code/agents/ork-master.md +35 -0
- package/assets/adapters-en/claude-code/agents/ork-plan.md +33 -0
- package/assets/adapters-en/claude-code/agents/ork-ship.md +33 -0
- package/assets/adapters-en/claude-code/commands/check.md +46 -0
- package/assets/adapters-en/claude-code/commands/go.md +46 -0
- package/assets/adapters-en/claude-code/commands/goal.md +55 -0
- package/assets/adapters-en/claude-code/commands/master.md +54 -0
- package/assets/adapters-en/claude-code/commands/onboarding.md +22 -0
- package/assets/adapters-en/claude-code/commands/ork.md +126 -0
- package/assets/adapters-en/claude-code/commands/plan.md +47 -0
- package/assets/adapters-en/claude-code/commands/ship.md +45 -0
- package/assets/adapters-en/codex/skills/ork/SKILL.md +85 -0
- package/assets/adapters-en/hermes/README.md +273 -0
- package/assets/adapters-en/hermes/skills/orkastery-devmaster/SKILL.md +169 -0
- package/assets/docs-en/markdownlint-cli2.jsonc +22 -0
- package/assets/docs-en/padroes/documentacao-de-produto.md +135 -0
- package/assets/docs-en/padroes/roadmap-de-produto.md +100 -0
- package/assets/docs-en/produto/README.md +14 -0
- package/assets/docs-en/produto/_modelo-feature.md +62 -0
- package/assets/docs-en/roadmap/README.md +14 -0
- package/assets/docs-en/roadmap/_modelo-item.md +75 -0
- package/assets/references-en/README.md +25 -0
- package/assets/references-en/code-review-axes.md +82 -0
- package/assets/references-en/definition-of-done.md +74 -0
- package/assets/references-en/performance-checklist.md +53 -0
- package/assets/references-en/security-checklist.md +101 -0
- package/assets/references-en/testing-patterns.md +51 -0
- package/assets/security-scan/defaults/.golangci.yml +2 -0
- package/assets/security-scan/defaults/eslint.config.mjs +11 -0
- package/assets/security-scan/defaults/gitleaks.toml +3 -0
- package/assets/security-scan/defaults/ruff.toml +1 -0
- package/assets/security-scan/tools-agil.json +87 -0
- package/assets/security-scan/tools.json +625 -0
- package/assets/skills-en/core/onboarding/SKILL.md +58 -0
- package/assets/skills-en/core/orkastery-bootstrap/SKILL.md +119 -0
- package/assets/skills-en/core/thread-state/SKILL.md +88 -0
- package/assets/skills-en/governance/decision-triage/SKILL.md +65 -0
- package/assets/skills-en/governance/narrative-guardian/SKILL.md +66 -0
- package/assets/skills-en/governance/roadmap-keeper/SKILL.md +60 -0
- package/assets/skills-en/governance/scope-check-capability-map/SKILL.md +71 -0
- package/assets/skills-en/observability/thread-tracing/SKILL.md +63 -0
- package/assets/skills-en/phases/check-quality/SKILL.md +103 -0
- package/assets/skills-en/phases/go-implementation/SKILL.md +78 -0
- package/assets/skills-en/phases/goal-definition/SKILL.md +69 -0
- package/assets/skills-en/phases/master-metrics/SKILL.md +72 -0
- package/assets/skills-en/phases/plan-specification/SKILL.md +67 -0
- package/assets/skills-en/phases/security-remediation/SKILL.md +70 -0
- package/assets/skills-en/phases/ship-release/SKILL.md +71 -0
- package/assets/skills-en/reviewers/code-reviewer/SKILL.md +61 -0
- package/assets/skills-en/reviewers/security-auditor/SKILL.md +93 -0
- package/assets/skills-en/reviewers/test-engineer/SKILL.md +66 -0
- package/assets/skills-en/reviewers/web-performance-auditor/SKILL.md +63 -0
- package/dist/adapters/claude-bg.js +193 -15
- package/dist/adapters/codex-controller-worker.js +12 -5
- package/dist/adapters/codex-events.js +16 -4
- package/dist/adapters/codex.js +13 -2
- package/dist/agents-md.js +24 -15
- package/dist/atualizar-branch.js +245 -0
- package/dist/auditoria.js +13 -11
- package/dist/auditrun.js +68 -48
- package/dist/autorizacao-duravel.js +327 -0
- package/dist/board.js +98 -43
- package/dist/branch-de-estado.js +39 -9
- package/dist/busca-semantica.js +7 -5
- package/dist/catalogo.js +35 -1
- package/dist/changelog-reconciliacao.js +290 -0
- package/dist/check-agil.js +500 -0
- package/dist/check-modo.js +41 -0
- package/dist/check-paralelo.js +183 -0
- package/dist/ci.js +255 -46
- package/dist/ciclos.js +8 -6
- package/dist/claim-lint.js +12 -8
- package/dist/claims-conferir.js +350 -0
- package/dist/claims.js +13 -10
- package/dist/company-brain-client.js +45 -3
- package/dist/company-brain-journal.js +2 -1
- package/dist/company-brain-migration.js +47 -6
- package/dist/conducao-batida.js +759 -0
- package/dist/conducao-sentinela.js +405 -0
- package/dist/conducao-texto.js +12 -18
- package/dist/conducao.js +206 -59
- package/dist/conhecimento-consulta.js +270 -0
- package/dist/conhecimento.js +514 -0
- package/dist/conta-esgotada.js +127 -0
- package/dist/dado-privado.js +816 -0
- package/dist/decisao-autonoma.js +5 -4
- package/dist/demo.js +14 -12
- package/dist/dependencias-da-worktree.js +25 -0
- package/dist/divida.js +38 -36
- package/dist/docs.js +103 -82
- package/dist/doctor-forja.js +345 -0
- package/dist/doctor-pulse-cron.js +294 -27
- package/dist/doctor-rede.js +18 -17
- package/dist/doctor.js +278 -116
- package/dist/dsn-da-memoria.js +417 -0
- package/dist/entrega-por-mod.js +503 -0
- package/dist/entrega-pr.js +158 -57
- package/dist/escopo-escrita.js +10 -1
- package/dist/esgotamentos.js +13 -11
- package/dist/estado-thread.js +42 -17
- package/dist/evalrunner.js +35 -32
- package/dist/experiencia-instalacao.js +45 -25
- package/dist/fabrica-batida.js +323 -0
- package/dist/fabrica-estado.js +49 -16
- package/dist/fabrica-publicar.js +3 -1
- package/dist/fila-pesada.js +444 -0
- package/dist/fix.js +24 -21
- package/dist/forja/adaptador.js +6 -0
- package/dist/forja/ambiente-de-ci.js +27 -0
- package/dist/forja/api.js +256 -0
- package/dist/forja/cache.js +89 -0
- package/dist/forja/cli.js +60 -0
- package/dist/forja/contrato.js +9 -0
- package/dist/forja/endereco.js +43 -0
- package/dist/forja/estado.js +22 -0
- package/dist/forja/executor.js +73 -0
- package/dist/forja/github/ci.js +95 -0
- package/dist/forja/github/dono-da-rede.js +18 -0
- package/dist/forja/github/metadados.js +15 -0
- package/dist/forja/github/pedidos.js +200 -0
- package/dist/forja/gitlab/ci.js +141 -0
- package/dist/forja/gitlab/consultas.js +59 -0
- package/dist/forja/gitlab/dono-da-rede.js +43 -0
- package/dist/forja/gitlab/metadados.js +15 -0
- package/dist/forja/gitlab/pedidos-abertos.js +158 -0
- package/dist/forja/gitlab/pedidos.js +141 -0
- package/dist/forja/produtor.js +32 -0
- package/dist/forja/registro.js +31 -0
- package/dist/forja/resolver.js +121 -0
- package/dist/forja/texto.js +13 -0
- package/dist/forja/versao.js +71 -0
- package/dist/forja.js +124 -81
- package/dist/gates.js +3 -28
- package/dist/handoff.js +33 -19
- package/dist/hitl-contract.js +46 -43
- package/dist/hitl-curto.js +37 -25
- package/dist/hitl-gates.js +13 -11
- package/dist/hitl-local-receipt.js +53 -0
- package/dist/hitl-local.js +11 -2
- package/dist/hitl-lock.js +5 -11
- package/dist/hitl-public-receipt.js +11 -0
- package/dist/hitl-resumo.js +72 -3
- package/dist/hitl-sessions.js +62 -9
- package/dist/hitl-tempo-parado.js +4 -4
- package/dist/hitl-texto-livre.js +7 -4
- package/dist/hitl.js +63 -64
- package/dist/horario.js +30 -7
- package/dist/hosts.js +155 -134
- package/dist/impedimento.js +108 -14
- package/dist/index.js +1421 -1019
- package/dist/indice-vetorial.js +14 -12
- package/dist/indice.js +7 -1
- package/dist/init.js +54 -49
- package/dist/instabilidade.js +144 -0
- package/dist/integracoes-locais.js +4 -0
- package/dist/intelligence-graph-cli.js +213 -88
- package/dist/intelligence-graph-contexto.js +56 -17
- package/dist/intelligence-graph-contract.js +2 -1
- package/dist/intelligence-graph-extract-md.js +56 -4
- package/dist/intelligence-graph-extract-ts.js +71 -3
- package/dist/intelligence-graph-query.js +96 -34
- package/dist/leases.js +19 -18
- package/dist/ledger-stats.js +17 -16
- package/dist/ledger.js +46 -2
- package/dist/licoes.js +12 -11
- package/dist/liveness.js +6 -3
- package/dist/locale-accounts.js +220 -0
- package/dist/locale-adapter.js +291 -0
- package/dist/locale-ajuda.js +833 -0
- package/dist/locale-audit.js +199 -0
- package/dist/locale-claims.js +213 -0
- package/dist/locale-conducao.js +138 -0
- package/dist/locale-conhecimento.js +181 -0
- package/dist/locale-decisao.js +205 -0
- package/dist/locale-docs.js +230 -0
- package/dist/locale-estado.js +101 -0
- package/dist/locale-forja.js +290 -0
- package/dist/locale-gerados.js +165 -0
- package/dist/locale-grafo.js +129 -0
- package/dist/locale-master.js +182 -0
- package/dist/locale-network.js +524 -0
- package/dist/locale-onboarding.js +92 -0
- package/dist/locale-operacao-restante.js +931 -0
- package/dist/locale-phase.js +151 -0
- package/dist/locale-projetos.js +100 -0
- package/dist/locale-prompts.js +194 -0
- package/dist/locale-pulse.js +349 -0
- package/dist/locale-reservas.js +87 -0
- package/dist/locale-retry.js +524 -0
- package/dist/locale-roadmap.js +102 -0
- package/dist/locale-security-scan.js +69 -0
- package/dist/locale-setup.js +192 -0
- package/dist/locale-ship.js +597 -0
- package/dist/locale-thread.js +421 -0
- package/dist/locale-verify.js +201 -0
- package/dist/locale-worktree.js +246 -0
- package/dist/locale.js +1258 -0
- package/dist/maestro-runtime.js +22 -3
- package/dist/manifest.js +415 -13
- package/dist/maquina-ociosa.js +211 -0
- package/dist/maquina.js +31 -7
- package/dist/master-digest.js +6 -1
- package/dist/master-nota-local.js +200 -0
- package/dist/master-nota.js +14 -8
- package/dist/master.js +139 -65
- package/dist/mcp-artifacts.js +11 -2
- package/dist/mcp-conhecimento.js +52 -0
- package/dist/mcp-experiencia.js +26 -5
- package/dist/mcp-git.js +23 -6
- package/dist/mcp-grafo.js +7 -4
- package/dist/mcp-install.js +73 -8
- package/dist/mcp-noctum.js +101 -0
- package/dist/mcp-server.js +90 -16
- package/dist/mcp-ship-transporte.js +977 -0
- package/dist/mcp-ship.js +71 -25
- package/dist/mcp-transportes.js +17 -0
- package/dist/mcp-verify.js +6 -1
- package/dist/memoria.js +63 -58
- package/dist/modos-migracao.js +8 -6
- package/dist/modos.js +20 -24
- package/dist/network-roadmap.js +90 -51
- package/dist/noctum-aceite.js +789 -0
- package/dist/noctum-arco.js +1418 -0
- package/dist/noctum-capacidade.js +141 -0
- package/dist/noctum-changelog.js +399 -0
- package/dist/noctum-cli.js +482 -0
- package/dist/noctum-coordenacao.js +1225 -0
- package/dist/noctum-entrega.js +1169 -0
- package/dist/noctum-envelope.js +1046 -0
- package/dist/noctum-execucao.js +376 -0
- package/dist/noctum-fechamento.js +405 -0
- package/dist/noctum-fila.js +314 -0
- package/dist/noctum-guarda.js +256 -0
- package/dist/noctum-integracao.js +507 -0
- package/dist/noctum-maquinas.js +383 -0
- package/dist/noctum-medicao.js +450 -0
- package/dist/noctum-modo.js +362 -0
- package/dist/noctum-pergunta-canal.js +96 -0
- package/dist/noctum-pergunta.js +115 -0
- package/dist/noctum-provas.js +838 -0
- package/dist/noctum-reconciliacao.js +591 -0
- package/dist/noctum-registro.js +215 -0
- package/dist/noctum-relatorio.js +827 -0
- package/dist/noctum-resposta.js +207 -0
- package/dist/noctum-sessoes-em-voo.js +93 -0
- package/dist/noctum-supervisao.js +649 -0
- package/dist/noctum-terminal.js +459 -0
- package/dist/noctum-transporte.js +655 -0
- package/dist/noctum-vigia.js +639 -0
- package/dist/ocupacao.js +32 -3
- package/dist/onboarding.js +56 -26
- package/dist/orkmind.js +48 -25
- package/dist/orquestracao.js +44 -47
- package/dist/parado-no-condutor.js +174 -127
- package/dist/phase.js +144 -63
- package/dist/policies.js +37 -4
- package/dist/portfolio.js +4 -2
- package/dist/postura-local.js +235 -0
- package/dist/preflight.js +11 -10
- package/dist/procedencia.js +220 -0
- package/dist/projeto-alvo.js +186 -24
- package/dist/prompts.js +140 -42
- package/dist/prova-minima.js +5 -6
- package/dist/pulse-cadencia.js +5 -4
- package/dist/pulse-consentimento.js +53 -1
- package/dist/pulse-delivery.js +151 -24
- package/dist/pulse-resposta.js +368 -4
- package/dist/pulse.js +188 -22
- package/dist/ratelimit.js +16 -6
- package/dist/recall.js +14 -13
- package/dist/redacao-saida.js +63 -0
- package/dist/rede-adesao.js +13 -8
- package/dist/rede-forja.js +108 -24
- package/dist/rede-status.js +66 -47
- package/dist/rede.js +86 -46
- package/dist/retomada-checkpoint.js +101 -0
- package/dist/retry.js +451 -212
- package/dist/roadmap-reservas.js +45 -28
- package/dist/roadmap-status.js +129 -33
- package/dist/runtime-ambiente.js +5 -0
- package/dist/runtime-context.js +284 -32
- package/dist/runtime-escada.js +423 -0
- package/dist/runtime-profiles.js +103 -46
- package/dist/runtimes.js +2 -1
- package/dist/saida-segura.js +3 -2
- package/dist/security-scan/agil.js +355 -0
- package/dist/security-scan/cli.js +76 -0
- package/dist/security-scan/compare.js +149 -0
- package/dist/security-scan/config.js +93 -0
- package/dist/security-scan/detect.js +97 -0
- package/dist/security-scan/executor.js +188 -0
- package/dist/security-scan/guard.js +180 -0
- package/dist/security-scan/imagem-de-lint.js +96 -0
- package/dist/security-scan/normalize/actionlint.js +12 -0
- package/dist/security-scan/normalize/eslint.js +12 -0
- package/dist/security-scan/normalize/gitleaks.js +13 -0
- package/dist/security-scan/normalize/golangci-lint.js +13 -0
- package/dist/security-scan/normalize/govulncheck.js +36 -0
- package/dist/security-scan/normalize/index.js +25 -0
- package/dist/security-scan/normalize/npm-audit.js +30 -0
- package/dist/security-scan/normalize/osv-scanner.js +32 -0
- package/dist/security-scan/normalize/oxlint.js +51 -0
- package/dist/security-scan/normalize/pip-audit.js +16 -0
- package/dist/security-scan/normalize/ruff.js +12 -0
- package/dist/security-scan/normalize/semgrep.js +20 -0
- package/dist/security-scan/normalize/trivy.js +33 -0
- package/dist/security-scan/normalize/util.js +204 -0
- package/dist/security-scan/normalize/zizmor.js +19 -0
- package/dist/security-scan/report.js +156 -0
- package/dist/security-scan/run.js +448 -0
- package/dist/security-scan/tools.js +62 -0
- package/dist/security-scan/trabalhador.js +74 -0
- package/dist/security-scan/types.js +15 -0
- package/dist/session-events.js +26 -5
- package/dist/session-watcher-claude.js +81 -20
- package/dist/session-watcher.js +340 -42
- package/dist/sessoes-contas.js +10 -1
- package/dist/sessoes-inventario.js +1 -1
- package/dist/sessoes.js +25 -23
- package/dist/setup.js +59 -58
- package/dist/ship-publicar.js +971 -0
- package/dist/ship.js +243 -97
- package/dist/steal.js +77 -0
- package/dist/superficie.js +14 -11
- package/dist/thread-close.js +12 -11
- package/dist/thread.js +274 -100
- package/dist/tokens.js +15 -11
- package/dist/trabalho-thread.js +297 -0
- package/dist/transporte-do-canal.js +189 -0
- package/dist/types.js +12 -1
- package/dist/util.js +13 -3
- package/dist/varredura-acoes.js +507 -0
- package/dist/verify.js +608 -76
- package/dist/vida-da-thread.js +254 -0
- package/dist/worktree-local.js +167 -0
- package/dist/worktree.js +99 -83
- package/dist/yaml.js +27 -8
- package/eval/casos/check-quality.json +77 -0
- package/eval/casos/security-auditor.json +148 -0
- package/eval/casos/security-remediation.json +161 -0
- package/eval/fixtures/security-scan/README.md +8 -0
- package/eval/fixtures/security-scan/go/.github/workflows/ci.yml +12 -0
- package/eval/fixtures/security-scan/go/Dockerfile +4 -0
- package/eval/fixtures/security-scan/go/README.md +4 -0
- package/eval/fixtures/security-scan/go/config.go +4 -0
- package/eval/fixtures/security-scan/go/go.mod +5 -0
- package/eval/fixtures/security-scan/go/go.sum +2 -0
- package/eval/fixtures/security-scan/go/main.go +31 -0
- package/eval/fixtures/security-scan/js/.github/workflows/ci.yml +12 -0
- package/eval/fixtures/security-scan/js/Dockerfile +3 -0
- package/eval/fixtures/security-scan/js/README.md +4 -0
- package/eval/fixtures/security-scan/js/package-lock.json +844 -0
- package/eval/fixtures/security-scan/js/package.json +10 -0
- package/eval/fixtures/security-scan/js/src/config.js +4 -0
- package/eval/fixtures/security-scan/js/src/server.js +17 -0
- package/eval/fixtures/security-scan/js/src/util.ts +4 -0
- package/eval/fixtures/security-scan/js/tsconfig.json +4 -0
- package/eval/fixtures/security-scan/python/.github/workflows/ci.yml +12 -0
- package/eval/fixtures/security-scan/python/Dockerfile +3 -0
- package/eval/fixtures/security-scan/python/README.md +4 -0
- package/eval/fixtures/security-scan/python/app/__init__.py +0 -0
- package/eval/fixtures/security-scan/python/app/config.py +2 -0
- package/eval/fixtures/security-scan/python/app/main.py +19 -0
- package/eval/fixtures/security-scan/python/requirements.txt +1 -0
- package/package.json +9 -4
- package/references/security-checklist.md +3 -3
- package/schemas/code-artifact-graph.v1.schema.json +2 -1
- package/skills/README.md +1 -0
- package/skills/core/orkastery-bootstrap/SKILL.md +2 -2
- package/skills/phases/check-quality/SKILL.md +16 -0
- package/skills/phases/go-implementation/SKILL.md +6 -0
- package/skills/phases/security-remediation/SKILL.md +70 -0
- package/skills/reviewers/security-auditor/SKILL.md +25 -0
package/dist/phase.js
CHANGED
|
@@ -33,12 +33,13 @@ var __importStar = (this && this.__importStar) || (function () {
|
|
|
33
33
|
};
|
|
34
34
|
})();
|
|
35
35
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
36
|
-
exports.REGRAS_DE_EVIDENCIA = exports.CONTRATO_DAS_FASES = void 0;
|
|
36
|
+
exports.REGRAS_DE_EVIDENCIA = exports.REGRA_DAS_ESPERAS = exports.CONTRATO_DAS_FASES = void 0;
|
|
37
37
|
exports.escolherPerfil = escolherPerfil;
|
|
38
38
|
exports.perfilPedido = perfilPedido;
|
|
39
39
|
exports.perfilParaDespacho = perfilParaDespacho;
|
|
40
40
|
exports.runtimeCruzadoParaDespacho = runtimeCruzadoParaDespacho;
|
|
41
41
|
exports.estadoParaDespacho = estadoParaDespacho;
|
|
42
|
+
exports.fechoDoGo = fechoDoGo;
|
|
42
43
|
exports.fasesDoCicloNoPrompt = fasesDoCicloNoPrompt;
|
|
43
44
|
exports.valoresDoPrompt = valoresDoPrompt;
|
|
44
45
|
exports.montarPrompt = montarPrompt;
|
|
@@ -86,6 +87,8 @@ const codex_1 = require("./adapters/codex");
|
|
|
86
87
|
const memoria_1 = require("./memoria");
|
|
87
88
|
const prompts_1 = require("./prompts");
|
|
88
89
|
const slug_1 = require("./slug");
|
|
90
|
+
const locale_1 = require("./locale");
|
|
91
|
+
const locale_prompts_1 = require("./locale-prompts");
|
|
89
92
|
const thread_1 = require("./thread");
|
|
90
93
|
const types_1 = require("./types");
|
|
91
94
|
const util_1 = require("./util");
|
|
@@ -95,6 +98,9 @@ const horario_1 = require("./horario");
|
|
|
95
98
|
const runtime_profiles_1 = require("./runtime-profiles");
|
|
96
99
|
const sessoes_contas_1 = require("./sessoes-contas");
|
|
97
100
|
const maquina_1 = require("./maquina");
|
|
101
|
+
const trabalho_thread_1 = require("./trabalho-thread");
|
|
102
|
+
const procedencia_1 = require("./procedencia");
|
|
103
|
+
const postura_local_1 = require("./postura-local");
|
|
98
104
|
const fabrica_publicar_1 = require("./fabrica-publicar");
|
|
99
105
|
const conducao_1 = require("./conducao");
|
|
100
106
|
/**
|
|
@@ -255,6 +261,8 @@ function estadoParaDespacho(raiz, thread, dryRun = false) {
|
|
|
255
261
|
if (!thread.worktree)
|
|
256
262
|
return null;
|
|
257
263
|
try {
|
|
264
|
+
// RM-047 (P2): a worktree do thread.json so vale registrada no git e com o estado local.
|
|
265
|
+
(0, procedencia_1.diretorioDaThread)(raiz, thread);
|
|
258
266
|
(0, estado_thread_1.vincularEstado)(raiz, thread.id, thread.worktree, dryRun);
|
|
259
267
|
return null;
|
|
260
268
|
}
|
|
@@ -264,19 +272,31 @@ function estadoParaDespacho(raiz, thread, dryRun = false) {
|
|
|
264
272
|
}
|
|
265
273
|
/** O que cada fase canonica entrega. Vai no cabecalho do prompt de toda sessao. */
|
|
266
274
|
exports.CONTRATO_DAS_FASES = {
|
|
267
|
-
|
|
268
|
-
PLAN: 'PLAN (F2): plano com tarefas, touch_paths, decisoes D1..Dn com domicilio unico e verify executavel por tarefa. Nao implementa.',
|
|
269
|
-
GO: 'GO (F3): implementacao slice por slice, um commit atomico por tarefa, dentro da worktree da thread.',
|
|
270
|
-
CHECK: 'CHECK (F4): verificacao contra a baseline (regressao versus divida pre-existente), review de codigo, testes, seguranca e performance.',
|
|
271
|
-
SHIP: 'SHIP (F5): merge serializado, push provado por comando, roadmap atualizado e plano de rollback.',
|
|
272
|
-
MASTER: 'MASTER (F6): MASTER log com postmortem tipado, licoes e o score humano de 0 a 5. Uma entrega sem MASTER log nao aconteceu.',
|
|
275
|
+
...locale_prompts_1.PROMPTS_PT_BR.contratoDasFases,
|
|
273
276
|
};
|
|
277
|
+
/**
|
|
278
|
+
* RM-037 (ork-rm037esperas, D3): a regra das esperas, uma linha so, a mesma no prompt de toda fase e na skill e nos
|
|
279
|
+
* guias que o adaptador instala (`core/test/rm037-esperas.test.ts` confere os arquivos). Em 12/10/2026, sessoes de
|
|
280
|
+
* fase esperaram para sempre por verify ou suite mandados para segundo plano com `&`, cujo processo morreu com a
|
|
281
|
+
* chamada, e por lacos de espera com `pgrep -f` que acham a si mesmos, porque o proprio laco traz o texto procurado.
|
|
282
|
+
*/
|
|
283
|
+
exports.REGRA_DAS_ESPERAS = locale_prompts_1.PROMPTS_PT_BR.regraDasEsperas;
|
|
274
284
|
/** As regras de evidencia que valem em toda fase, em todo modo. */
|
|
275
285
|
exports.REGRAS_DE_EVIDENCIA = [
|
|
276
|
-
|
|
277
|
-
|
|
278
|
-
|
|
286
|
+
...locale_prompts_1.PROMPTS_PT_BR.regrasDeEvidencia,
|
|
287
|
+
// RM-058 N2 (D13 da ork-rm058n2): tres sessoes de 12/10/2026 mandaram verify ou suite para segundo plano com `&`,
|
|
288
|
+
// perderam o processo e esperaram para sempre. RM-037 (ork-rm037esperas, D3): a linha da N2 virou a regra das
|
|
289
|
+
// esperas, que tambem traz a execucao em segundo plano do host e a espera por `pgrep -f`.
|
|
290
|
+
exports.REGRA_DAS_ESPERAS,
|
|
279
291
|
];
|
|
292
|
+
/**
|
|
293
|
+
* RM-016: o rito de saída do GO pertence ao prompt canônico, não a um adaptador. Assim Claude Code
|
|
294
|
+
* e Codex recebem os mesmos artefatos obrigatórios antes de a sessão encerrar. RM-061 F3c: o texto
|
|
295
|
+
* vem do catálogo dos prompts, e o prompt inglês leva o mesmo rito.
|
|
296
|
+
*/
|
|
297
|
+
function fechoDoGo(threadId, locale = (0, locale_1.localeAtivo)()) {
|
|
298
|
+
return (locale === 'en' ? locale_prompts_1.PROMPTS_EN : locale_prompts_1.PROMPTS_PT_BR).fechoDoGo(threadId);
|
|
299
|
+
}
|
|
280
300
|
/**
|
|
281
301
|
* I-42 (D11): as fases que o cabecalho do prompt descreve.
|
|
282
302
|
*
|
|
@@ -299,7 +319,8 @@ function fasesDoCicloNoPrompt(thread) {
|
|
|
299
319
|
* decisao e codigo. E o que permite um projeto reescrever o texto do prompt em
|
|
300
320
|
* `prompts/fase-padrao.md` sem poder mudar o que o `ork` considera verdade.
|
|
301
321
|
*/
|
|
302
|
-
function valoresDoPrompt(thread, fase, pedido, memoriaInjetada = '') {
|
|
322
|
+
function valoresDoPrompt(thread, fase, pedido, memoriaInjetada = '', locale = (0, locale_1.localeAtivo)()) {
|
|
323
|
+
const mp = locale === 'en' ? locale_prompts_1.PROMPTS_EN : locale_prompts_1.PROMPTS_PT_BR;
|
|
303
324
|
const def = (0, modos_1.definicaoDoModo)(thread.modo);
|
|
304
325
|
const bloco = (0, thread_1.blocoDaThread)(thread, fase);
|
|
305
326
|
const pausa = (0, thread_1.pausaNaThread)(thread, fase);
|
|
@@ -308,27 +329,29 @@ function valoresDoPrompt(thread, fase, pedido, memoriaInjetada = '') {
|
|
|
308
329
|
thread: thread.id,
|
|
309
330
|
bloco: bloco.fases.join('-'),
|
|
310
331
|
nome: thread.nome,
|
|
311
|
-
ciclo_canonico: fasesDoCicloNoPrompt(thread).map((f) => `${bloco.fases.includes(f) ? '>' : ' '} ${
|
|
332
|
+
ciclo_canonico: fasesDoCicloNoPrompt(thread).map((f) => `${bloco.fases.includes(f) ? '>' : ' '} ${mp.contratoDasFases[f]}`).join('\n'),
|
|
312
333
|
tag: def.tag,
|
|
313
334
|
blocos: thread.blocos.map((b) => b.fases.join('-')).join(' / '),
|
|
314
335
|
pausas: String(thread.blocos.filter((b) => b.pausa).length),
|
|
315
|
-
linha_variante: thread.variante ?
|
|
336
|
+
linha_variante: thread.variante ? mp.variante(thread.variante) : '',
|
|
316
337
|
regra_de_pausa: pausa
|
|
317
|
-
?
|
|
318
|
-
:
|
|
319
|
-
invariantes:
|
|
338
|
+
? mp.pausa(mp.pausaSobre(bloco.pausaSobre))
|
|
339
|
+
: mp.semPausa,
|
|
340
|
+
invariantes: mp.invariantes.map((i) => `- ${i}`).join('\n'),
|
|
320
341
|
slug: thread.slug,
|
|
321
342
|
projeto_nome: thread.projeto.name,
|
|
322
343
|
projeto_abbrev: thread.projeto.abbrev,
|
|
323
344
|
base_branch: thread.base.branch,
|
|
324
345
|
base_commit: thread.base.commit,
|
|
325
|
-
diretorio: thread.worktree ??
|
|
346
|
+
diretorio: thread.worktree ?? mp.raizDoProjeto,
|
|
347
|
+
trabalho: (0, trabalho_thread_1.caminhoDoTrabalho)(thread.id),
|
|
326
348
|
pedido: pedido.trim(),
|
|
349
|
+
fecho_go: bloco.fases.includes('GO') ? mp.fechoDoGo(thread.id) : '',
|
|
327
350
|
// Bloco B6: o bloco de memoria injetada deterministicamente. Vazio em toda thread sem
|
|
328
351
|
// decisao fechada e sem OrkMind, e ai a linha da variavel some do prompt: o texto fica
|
|
329
352
|
// byte a byte igual ao que o B4 ja despachava.
|
|
330
353
|
memoria_injetada: memoriaInjetada,
|
|
331
|
-
regras_de_evidencia:
|
|
354
|
+
regras_de_evidencia: [...mp.regrasDeEvidencia, mp.regraDasEsperas].map((r) => `- ${r}`).join('\n'),
|
|
332
355
|
};
|
|
333
356
|
}
|
|
334
357
|
/**
|
|
@@ -338,8 +361,10 @@ function valoresDoPrompt(thread, fase, pedido, memoriaInjetada = '') {
|
|
|
338
361
|
* `prompts/fase-padrao.md` (ou `prompts/fase-goal.md` e companhia) versionado no repositorio,
|
|
339
362
|
* vale o do projeto, e `ork prompt lint` e quem garante que ele nao perdeu o contrato.
|
|
340
363
|
*/
|
|
341
|
-
function montarPrompt(thread, fase, pedido, raiz, memoriaInjetada = '') {
|
|
342
|
-
|
|
364
|
+
function montarPrompt(thread, fase, pedido, raiz, memoriaInjetada = '', locale = (0, locale_1.localeAtivo)()) {
|
|
365
|
+
// RM-061 F3c: os valores falam a lingua do template escolhido; o do projeto sem par `.en` sai inteiro em pt-BR.
|
|
366
|
+
const template = (0, prompts_1.templateDaFase)(fase, raiz, locale);
|
|
367
|
+
return (0, prompts_1.renderizar)(template, valoresDoPrompt(thread, fase, pedido, memoriaInjetada, (0, prompts_1.idiomaDoTemplate)(template)));
|
|
343
368
|
}
|
|
344
369
|
/**
|
|
345
370
|
* Monta o prompt da fase JA com a memoria injetada (bloco B6).
|
|
@@ -350,11 +375,15 @@ function montarPrompt(thread, fase, pedido, raiz, memoriaInjetada = '') {
|
|
|
350
375
|
* com as decisoes fechadas lidas do `thread.json`: a garantia nao depende do OrkMind.
|
|
351
376
|
*/
|
|
352
377
|
function montarPromptComMemoria(carregado, thread, fase, pedido, memoria) {
|
|
353
|
-
|
|
378
|
+
// RM-061 F3c: o prompt despachado e dado (arquivo com sha256 no ledger). Segue a lingua declarada do dono
|
|
379
|
+
// (`owner.language`), nunca o locale de quem despacha: sem ela, pt-BR, com qualquer LANG (contrato da F2a). A
|
|
380
|
+
// dica do grafo fala a lingua do template que conduz a fase, como os valores.
|
|
381
|
+
const locale = (0, prompts_1.idiomaDoTemplate)((0, prompts_1.templateDaFase)(fase, carregado.raiz, (0, locale_1.linguaDeclaradaDoDono)(carregado.manifesto.owner?.language)));
|
|
382
|
+
const injecao = (0, memoria_1.injecaoDaFase)(carregado, memoria, thread, fase, locale);
|
|
354
383
|
// Mesma raiz usada pelo MCP e runtime-context; o manifesto da WT nao habilita a dica.
|
|
355
384
|
const ligado = (0, mcp_grafo_1.grafoLigado)((0, manifest_1.exigirManifesto)((0, estado_thread_1.raizDoEstado)(carregado.raiz)).manifesto);
|
|
356
385
|
return {
|
|
357
|
-
prompt: montarPrompt(thread, fase, (0, prompts_1.pedidoComDicaDoGrafo)(pedido, thread.id, ligado), carregado.raiz, injecao.texto),
|
|
386
|
+
prompt: montarPrompt(thread, fase, (0, prompts_1.pedidoComDicaDoGrafo)(pedido, thread.id, ligado, locale), carregado.raiz, injecao.texto, locale),
|
|
358
387
|
injecao,
|
|
359
388
|
};
|
|
360
389
|
}
|
|
@@ -411,10 +440,10 @@ function resolverDespacho(manifesto, opcoes, doBloco) {
|
|
|
411
440
|
const origem = doBloco?.runtime ?? manifesto.runtime.adapter;
|
|
412
441
|
const runtime = opcoes.runtime ?? origem;
|
|
413
442
|
if ((0, runtimes_1.runtimeConhecido)(runtime) && runtime !== origem && !opcoes.model?.trim())
|
|
414
|
-
throw new
|
|
443
|
+
throw new locale_1.ErroDoCatalogo((m) => m.phase.modeloAoTrocarRuntime(origem, runtime));
|
|
415
444
|
const model = opcoes.model ?? doBloco?.model ?? manifesto.runtime.model;
|
|
416
445
|
if (!model.trim())
|
|
417
|
-
throw new
|
|
446
|
+
throw new locale_1.ErroDoCatalogo((m) => m.phase.modeloPendente(runtime));
|
|
418
447
|
const effort = opcoes.effort ??
|
|
419
448
|
(opcoes.model !== undefined ? 'high' : doBloco?.effort ?? manifesto.runtime.effort);
|
|
420
449
|
return { runtime, model, effort };
|
|
@@ -439,6 +468,8 @@ function dadosDoDespacho(ctx, comando) {
|
|
|
439
468
|
cwd: ctx.cwd,
|
|
440
469
|
promptPath: path.relative(ctx.raiz, ctx.promptPath),
|
|
441
470
|
promptSha256: ctx.promptSha256,
|
|
471
|
+
...(ctx.promptOriginal ? { promptOriginalPath: path.relative(ctx.raiz, ctx.promptOriginal.path),
|
|
472
|
+
promptOriginalSha256: ctx.promptOriginal.sha256 } : {}),
|
|
442
473
|
origem: ctx.origem,
|
|
443
474
|
// I-36 (T10): a porta por onde o dono chegou. `runtime` e o motor; `canal` e a porta.
|
|
444
475
|
...(ctx.canal ? { canal: ctx.canal } : {}),
|
|
@@ -557,14 +588,14 @@ function registrarObservacao(ctx, sessao, dir, controlador, sensores) {
|
|
|
557
588
|
const mesmoDespacho = (e) => e.sessionId === sessao.sessionId && e.despachoEm === sessao.despachadaEm;
|
|
558
589
|
try {
|
|
559
590
|
// I-34: claude-bg observa pela fonte nativa; no PLAN o registro guarda o sha de base do artefato.
|
|
560
|
-
// I-33 (N1): o GO codex registra o HEAD do despacho, como a fonte claude-bg;
|
|
591
|
+
// I-33 (N1): o GO codex registra o HEAD do despacho, como a fonte claude-bg; ele revela commit pelo shell no checkpoint.
|
|
561
592
|
const head = ctx.runtime === 'codex' && ctx.fase === 'GO' ? { head: ctx.headNoDespacho ?? null } : {};
|
|
562
593
|
const fonte = ctx.runtime === 'claude-bg' ? (0, session_watcher_claude_1.fonteClaudeDoDespacho)(ctx.raiz, ctx.thread.id, ctx.fase, ctx.cwd)
|
|
563
594
|
: sensores?.logPath ? { logPath: sensores.logPath, processoPath: sensores.processoPath, reciboPath: sensores.reciboPath, ...head }
|
|
564
595
|
: controlador ? { controlador, cwd: ctx.cwd, ...head } : null;
|
|
565
596
|
if (!fonte)
|
|
566
597
|
return;
|
|
567
|
-
(0, session_watcher_1.
|
|
598
|
+
(0, session_watcher_1.prepararFonteWatcher)(ctx.raiz, sessao.sessionId, fonte);
|
|
568
599
|
const eventos = (0, ledger_1.lerLedger)(dir);
|
|
569
600
|
if (!eventos.some(e => e.tipo === 'session_sensor_registered' && mesmoDespacho(e))) {
|
|
570
601
|
(0, ledger_1.registrar)(dir, ctx.thread.id, 'session_sensor_registered', { fase: ctx.fase,
|
|
@@ -619,7 +650,8 @@ function garantirBaselineDoDespacho(carregado, threadId, opcoes, identidade) {
|
|
|
619
650
|
if (!baselineDoDespachoNecessaria(carregado, threadId, opcoes))
|
|
620
651
|
return;
|
|
621
652
|
try {
|
|
622
|
-
(0, verify_1.gravarBaseline)(carregado, threadId, undefined, { canal: opcoes.canal ?? (0, conducao_1.canalDoProcesso)(), correlacao: opcoes.correlacao ?? null, ...(identidade ? { identidade } : {})
|
|
653
|
+
(0, verify_1.gravarBaseline)(carregado, threadId, undefined, { canal: opcoes.canal ?? (0, conducao_1.canalDoProcesso)(), correlacao: opcoes.correlacao ?? null, ...(identidade ? { identidade } : {}),
|
|
654
|
+
filaPesada: { esperarMs: opcoes.esperarMs, ...opcoes.filaPesada } }, 'phase.run');
|
|
623
655
|
}
|
|
624
656
|
catch (e) {
|
|
625
657
|
if (!(e instanceof conducao_1.ErroDeConducao))
|
|
@@ -677,6 +709,8 @@ tomadaPrevia) {
|
|
|
677
709
|
const thread = (0, thread_1.lerThread)(raiz, threadId);
|
|
678
710
|
const fase = opcoes.fase;
|
|
679
711
|
const dir = (0, thread_1.dirThread)(raiz, thread.id);
|
|
712
|
+
if (!opcoes.dryRun)
|
|
713
|
+
(0, trabalho_thread_1.garantirDiretorioDoTrabalho)(raiz, thread.id);
|
|
680
714
|
const slug = slugDaSessao(thread, fase);
|
|
681
715
|
// Resolve UMA vez o trio runtime/modelo/esforco: o mesmo objeto vai ao runtime adapter,
|
|
682
716
|
// ao ledger e a resposta do CLI. Resolver duas vezes e o caminho curto para o ledger
|
|
@@ -762,6 +796,17 @@ tomadaPrevia) {
|
|
|
762
796
|
verificada: false, pausaAoFim: (0, thread_1.pausaNaThread)(thread, fase), dryRun: opcoes.dryRun === true,
|
|
763
797
|
runtime, model, effort, bloqueado: true, motivo: 'runtime.autoconferencia', violacoes, erro: erroDeRuntime };
|
|
764
798
|
}
|
|
799
|
+
// RM-047 (P1): sandbox afrouxado pelo manifesto so despacha com a confirmacao local desta maquina.
|
|
800
|
+
const erroDePostura = (0, postura_local_1.recusaDePostura)(raiz, manifesto, runtime);
|
|
801
|
+
if (erroDePostura) {
|
|
802
|
+
const postura = (0, postura_local_1.posturaAfrouxada)(manifesto) ?? '';
|
|
803
|
+
if (!opcoes.dryRun)
|
|
804
|
+
(0, gates_1.registrarGateBloqueado)(dir, thread.id, { gate: 'phase.dispatch', motivo: 'policy.violation',
|
|
805
|
+
modo: thread.modo, detalhe: erroDePostura, correcao: (0, postura_local_1.comandoDeConfirmacao)(postura), fase, slug });
|
|
806
|
+
return { thread, slug, promptPath, promptSha256: sha, comando: [], sessionId: null,
|
|
807
|
+
verificada: false, pausaAoFim: (0, thread_1.pausaNaThread)(thread, fase), dryRun: opcoes.dryRun === true,
|
|
808
|
+
runtime, model, effort, bloqueado: true, motivo: 'policy.violation', violacoes, erro: erroDePostura };
|
|
809
|
+
}
|
|
765
810
|
const erroDeEstado = estadoParaDespacho(raiz, thread, opcoes.dryRun);
|
|
766
811
|
if (erroDeEstado) {
|
|
767
812
|
(0, gates_1.registrarGateBloqueado)(dir, thread.id, { gate: 'phase.dispatch', motivo: 'tree.blocked',
|
|
@@ -858,7 +903,17 @@ tomadaPrevia) {
|
|
|
858
903
|
return pendente;
|
|
859
904
|
}
|
|
860
905
|
}
|
|
861
|
-
const cwd =
|
|
906
|
+
const cwd = (0, procedencia_1.diretorioDaThread)(raiz, thread);
|
|
907
|
+
// RM-063 (F3): o prompt vai ao disco e ao ledger, com o sha256, ANTES do contexto do runtime e do adaptador. No
|
|
908
|
+
// incidente de 12/10/2026 a fase morreu no despacho e o `ork retry run` saiu com "nao ha despacho falho registrado
|
|
909
|
+
// em GO com prompt gravado"; daqui em diante, toda tentativa deixa o prompt que o retry redespacha sem pedir o texto.
|
|
910
|
+
(0, util_1.gravar)(promptPath, prompt);
|
|
911
|
+
const promptNoLedger = { promptPath: path.relative(raiz, promptPath), promptSha256: sha };
|
|
912
|
+
if (!opcoes.dryRun) {
|
|
913
|
+
(0, ledger_1.registrar)(dir, thread.id, ledger_1.TIPOS_DE_EVENTO.promptGravado, { fase, slug, modo: thread.modo, runtime, model, effort, cwd,
|
|
914
|
+
...promptNoLedger, origem: 'phase.run', canal, ...(opcoes.correlacao ? { correlacao: opcoes.correlacao } : {}), identidade });
|
|
915
|
+
}
|
|
916
|
+
const correcaoDoRetry = `ork retry run ${thread.id} redespacha o mesmo prompt (sha256 ${sha.slice(0, 12)})`;
|
|
862
917
|
let contextoRuntime;
|
|
863
918
|
try {
|
|
864
919
|
contextoRuntime = (0, runtime_context_1.contextoDoProjeto)(raiz, runtime, cwd, thread.id);
|
|
@@ -866,14 +921,13 @@ tomadaPrevia) {
|
|
|
866
921
|
catch (e) {
|
|
867
922
|
const erro = `runtime.unavailable: ${e.message}`;
|
|
868
923
|
(0, gates_1.registrarGateBloqueado)(dir, thread.id, { gate: 'phase.dispatch', motivo: 'runtime.unavailable',
|
|
869
|
-
modo: thread.modo, detalhe: erro, fase, slug });
|
|
924
|
+
modo: thread.modo, detalhe: erro, fase, slug, ...(opcoes.dryRun ? {} : { ...promptNoLedger, correcao: correcaoDoRetry }) });
|
|
870
925
|
return { thread, slug, promptPath, promptSha256: sha, comando: [], sessionId: null,
|
|
871
926
|
verificada: false, pausaAoFim: (0, thread_1.pausaNaThread)(thread, fase), dryRun: opcoes.dryRun === true,
|
|
872
927
|
runtime, model, effort, bloqueado: true, motivo: 'runtime.unavailable', violacoes, erro };
|
|
873
928
|
}
|
|
874
929
|
if (contextoRuntime)
|
|
875
930
|
contextoRuntime.identidade = identidade;
|
|
876
|
-
(0, util_1.gravar)(promptPath, prompt);
|
|
877
931
|
// I-33 (D2, D4, D7): o perfil sai do store com o login conferido. Sem perfil disponivel, o
|
|
878
932
|
// despacho nao sai pela conta errada: o prompt ja gravado fica registrado para a rotacao do
|
|
879
933
|
// retry (outro runtime da ordem de fallback, ou a fila), com o motivo tipado.
|
|
@@ -934,7 +988,7 @@ tomadaPrevia) {
|
|
|
934
988
|
: undefined;
|
|
935
989
|
// I-33 (N1): lido antes de a sessao existir; depois dela, um commit rapido ja estaria no HEAD.
|
|
936
990
|
const headNoDespacho = fase === 'GO' && runtime === 'codex' && !opcoes.dryRun ? (0, session_watcher_claude_1.headDaWorktree)(cwd) : undefined;
|
|
937
|
-
const
|
|
991
|
+
const pedidoAoRuntime = {
|
|
938
992
|
prompt,
|
|
939
993
|
nome: slug,
|
|
940
994
|
cwd,
|
|
@@ -955,7 +1009,7 @@ tomadaPrevia) {
|
|
|
955
1009
|
...(limites ? { duracaoMaximaMs: limites.duracaoMs } : {}),
|
|
956
1010
|
// I-36 (D4): a sessao filha herda a identidade do despacho e o canal; e assim que ela reentra.
|
|
957
1011
|
ambienteExtra: (0, conducao_1.ambienteDaConducao)(identidade.dispatchId, thread.id, canal),
|
|
958
|
-
}
|
|
1012
|
+
};
|
|
959
1013
|
const ctx = {
|
|
960
1014
|
identidade,
|
|
961
1015
|
canal,
|
|
@@ -976,6 +1030,22 @@ tomadaPrevia) {
|
|
|
976
1030
|
...(perfil ? { perfil } : {}),
|
|
977
1031
|
...(headNoDespacho !== undefined ? { headNoDespacho } : {}),
|
|
978
1032
|
};
|
|
1033
|
+
let resultado;
|
|
1034
|
+
try {
|
|
1035
|
+
resultado = rt.despachar(pedidoAoRuntime);
|
|
1036
|
+
}
|
|
1037
|
+
catch (e) {
|
|
1038
|
+
// RM-063 (F3): o adaptador que lanca (o daemon do runtime fora do ar) deixa no ledger a falha do despacho com o
|
|
1039
|
+
// prompt e o sha256, e o gate tipado que o `ork retry run` le; o erro segue para quem chamou, como antes.
|
|
1040
|
+
if (!opcoes.dryRun) {
|
|
1041
|
+
const erro = `runtime.unavailable: o runtime adapter lancou no despacho: ${e.message}`;
|
|
1042
|
+
(0, ledger_1.registrar)(dir, thread.id, ledger_1.TIPOS_DE_EVENTO.despachoFalhou, { ...dadosDoDespacho(ctx, []), erro });
|
|
1043
|
+
(0, gates_1.registrarGateBloqueado)(dir, thread.id, { gate: 'phase.dispatch', motivo: 'runtime.unavailable', modo: thread.modo,
|
|
1044
|
+
detalhe: erro, correcao: correcaoDoRetry, fase, slug, runtime, origem: 'phase.run', ...promptNoLedger,
|
|
1045
|
+
evidencia: 'excecao real do runtime adapter no despacho, nao relato do agente' });
|
|
1046
|
+
}
|
|
1047
|
+
throw e;
|
|
1048
|
+
}
|
|
979
1049
|
const comum = dadosDoDespacho(ctx, resultado.comando);
|
|
980
1050
|
if (opcoes.dryRun) {
|
|
981
1051
|
return {
|
|
@@ -1000,11 +1070,15 @@ tomadaPrevia) {
|
|
|
1000
1070
|
}
|
|
1001
1071
|
if (!resultado.ok || !resultado.sessionId) {
|
|
1002
1072
|
const erro = resultado.erro ?? 'sem sessionId na saida do runtime';
|
|
1073
|
+
// RM-063 (F3, GO-FIX): o `claude --bg` que sai com erro, ou estoura o prazo, depois de dizer o id deixa a sessao
|
|
1074
|
+
// aberta; o id vai a falha e ao gate, para o retry conferir que ela morreu antes de redespachar.
|
|
1075
|
+
const daSessao = resultado.sessionId ? { sessionId: resultado.sessionId } : {};
|
|
1003
1076
|
(0, ledger_1.registrar)(dir, thread.id, ledger_1.TIPOS_DE_EVENTO.despachoFalhou, {
|
|
1004
1077
|
...comum,
|
|
1005
1078
|
controlador: resultado.controlador,
|
|
1006
1079
|
erro,
|
|
1007
1080
|
stderr: resultado.stderr.slice(0, 500),
|
|
1081
|
+
...daSessao,
|
|
1008
1082
|
});
|
|
1009
1083
|
// I-33 (D1, D5): a CONTA recusou o despacho. Nada rodou, entao nada foi produzido: o perfil
|
|
1010
1084
|
// sai do rodizio e o gate tipado fica para a rotacao do retry, que redespacha o mesmo prompt.
|
|
@@ -1046,6 +1120,8 @@ tomadaPrevia) {
|
|
|
1046
1120
|
effort,
|
|
1047
1121
|
sinal,
|
|
1048
1122
|
detalhe: erro,
|
|
1123
|
+
// RM-058 N4 (D17 da ork-rm058n4): o pedido do despacho do arco é do vigia do arco, e o `ork retry resume` não o retoma.
|
|
1124
|
+
...(opcoes.correlacao ? { correlacao: opcoes.correlacao } : {}),
|
|
1049
1125
|
});
|
|
1050
1126
|
(0, ledger_1.registrar)(dir, thread.id, ledger_1.TIPOS_DE_EVENTO.rateLimitEnfileirado, {
|
|
1051
1127
|
fase,
|
|
@@ -1087,6 +1163,11 @@ tomadaPrevia) {
|
|
|
1087
1163
|
sessionId: null, verificada: false, pausaAoFim, dryRun: false, runtime, model, effort, bloqueado: false,
|
|
1088
1164
|
motivo: impedimento.motivo, violacoes, naFila: null, erro: `${impedimento.motivo}: ${impedimento.trecho}` };
|
|
1089
1165
|
}
|
|
1166
|
+
// RM-063 (F3): a falha seca do adaptador vira gate tipado, com o prompt e o sha256. Antes so o `phase_dispatch_failed`
|
|
1167
|
+
// a registrava: o `ork retry plan` nao a via e a fase ficava parada sem ninguem saber.
|
|
1168
|
+
(0, gates_1.registrarGateBloqueado)(dir, thread.id, { gate: 'phase.dispatch', motivo: 'runtime.unavailable', modo: thread.modo,
|
|
1169
|
+
detalhe: erro, correcao: correcaoDoRetry, fase, slug, runtime, origem: 'phase.run', ...promptNoLedger, ...daSessao,
|
|
1170
|
+
evidencia: 'saida real do runtime adapter no despacho, nao relato do agente' });
|
|
1090
1171
|
return {
|
|
1091
1172
|
thread,
|
|
1092
1173
|
slug,
|
|
@@ -1139,8 +1220,11 @@ function tabelaDoLedger(raiz, threadId) {
|
|
|
1139
1220
|
// Thread inexistente e erro, nao ledger vazio: o CLI precisa reprovar o id errado.
|
|
1140
1221
|
(0, thread_1.lerThread)(raiz, threadId);
|
|
1141
1222
|
const eventos = (0, ledger_1.lerLedger)((0, thread_1.dirThread)(raiz, threadId));
|
|
1223
|
+
// RM-061 (F2a): a moldura e os rotulos vem do catalogo; o valor de cada evento (decisao, estado,
|
|
1224
|
+
// erro, detalhe) e dado do ledger e sai como foi gravado.
|
|
1225
|
+
const m = (0, locale_1.msg)().phase;
|
|
1142
1226
|
if (eventos.length === 0) {
|
|
1143
|
-
return
|
|
1227
|
+
return m.ledgerVazio(threadId);
|
|
1144
1228
|
}
|
|
1145
1229
|
const linhas = eventos.map((e) => {
|
|
1146
1230
|
const detalhe = [];
|
|
@@ -1149,91 +1233,88 @@ function tabelaDoLedger(raiz, threadId) {
|
|
|
1149
1233
|
if (e.slug)
|
|
1150
1234
|
detalhe.push(String(e.slug));
|
|
1151
1235
|
if (e.sessionId)
|
|
1152
|
-
detalhe.push(
|
|
1236
|
+
detalhe.push(m.sessao(String(e.sessionId).slice(0, 8)));
|
|
1153
1237
|
if (e.decisao)
|
|
1154
1238
|
detalhe.push(String(e.decisao));
|
|
1155
1239
|
if (e.previstaSobre)
|
|
1156
|
-
detalhe.push(
|
|
1240
|
+
detalhe.push(m.pausaSobre((0, locale_1.msg)().thread.pausaSobre(String(e.previstaSobre))));
|
|
1157
1241
|
if (e.encontrada !== undefined)
|
|
1158
|
-
detalhe.push(
|
|
1242
|
+
detalhe.push(m.noRuntime(!!e.encontrada));
|
|
1159
1243
|
// Fato verificavel do despacho: o par modelo/esforco real, lido do proprio evento.
|
|
1160
1244
|
if (e.model)
|
|
1161
|
-
detalhe.push(
|
|
1245
|
+
detalhe.push(m.modelo(String(e.model), String(e.effort ?? '-')));
|
|
1162
1246
|
// Eventos do bloco B1: motivo tipado, veredito e as provas do ship.
|
|
1163
1247
|
if (e.motivo)
|
|
1164
|
-
detalhe.push(
|
|
1248
|
+
detalhe.push(m.motivo(String(e.motivo)));
|
|
1165
1249
|
if (e.claim)
|
|
1166
1250
|
detalhe.push(`claim ${String(e.claim)}`);
|
|
1167
1251
|
if (e.veredito)
|
|
1168
|
-
detalhe.push(
|
|
1252
|
+
detalhe.push(m.veredito(String(e.veredito)));
|
|
1169
1253
|
if (e.fonte && e.ocupacao !== undefined) {
|
|
1170
|
-
detalhe.push(
|
|
1254
|
+
detalhe.push(m.ocupacao(e.ocupacao === null ? null : String(e.ocupacao), String(e.fonte)));
|
|
1171
1255
|
}
|
|
1172
1256
|
if (e.slugSugerido)
|
|
1173
|
-
detalhe.push(
|
|
1257
|
+
detalhe.push(m.proximoSlug(String(e.slugSugerido)));
|
|
1174
1258
|
if (e.lease)
|
|
1175
1259
|
detalhe.push(`lease ${String(e.lease)}`);
|
|
1176
1260
|
// Eventos do bloco B3: acao de retry, playbook da retomada e rodada de GO-FIX.
|
|
1177
1261
|
if (e.acao)
|
|
1178
|
-
detalhe.push(
|
|
1262
|
+
detalhe.push(m.acao(String(e.acao)));
|
|
1179
1263
|
if (e.playbook)
|
|
1180
1264
|
detalhe.push(`playbook ${String(e.playbook)}`);
|
|
1181
1265
|
// Ensaio de 03/10/2026 (RM-049): na decisao autonoma o pedido e o objeto `ork.hitl/v2`, e a tabela
|
|
1182
1266
|
// mostrava "pedido [object Object]"; do objeto sai o id curto.
|
|
1183
1267
|
if (typeof e.pedido === 'string' && e.pedido !== '')
|
|
1184
|
-
detalhe.push(
|
|
1268
|
+
detalhe.push(m.pedido(e.pedido));
|
|
1185
1269
|
else if (e.pedido && typeof e.pedido === 'object' && typeof e.pedido.id === 'string') {
|
|
1186
|
-
detalhe.push(
|
|
1270
|
+
detalhe.push(m.pedido(e.pedido.id.slice(0, 8)));
|
|
1187
1271
|
}
|
|
1188
1272
|
if (e.rodada !== undefined)
|
|
1189
|
-
detalhe.push(
|
|
1273
|
+
detalhe.push(m.rodada(String(e.rodada)));
|
|
1190
1274
|
if (e.cobertura)
|
|
1191
|
-
detalhe.push(
|
|
1275
|
+
detalhe.push(m.cobertura(String(e.cobertura)));
|
|
1192
1276
|
if (e.liberaEm)
|
|
1193
|
-
detalhe.push(
|
|
1277
|
+
detalhe.push(m.liberaEm((0, horario_1.formatarDataHora)(String(e.liberaEm))));
|
|
1194
1278
|
if (e.tentativa !== undefined && e.limite !== undefined) {
|
|
1195
|
-
detalhe.push(
|
|
1279
|
+
detalhe.push(m.tentativa(String(e.tentativa), String(e.limite)));
|
|
1196
1280
|
}
|
|
1197
1281
|
if (e.mergeSha)
|
|
1198
1282
|
detalhe.push(`merge ${String(e.mergeSha).slice(0, 8)}`);
|
|
1199
1283
|
if (e.shaRemoto)
|
|
1200
|
-
detalhe.push(
|
|
1284
|
+
detalhe.push(m.remoto(String(e.shaRemoto).slice(0, 8)));
|
|
1201
1285
|
if (e.pushVerificado !== undefined)
|
|
1202
|
-
detalhe.push(
|
|
1286
|
+
detalhe.push(m.pushProvado(!!e.pushVerificado));
|
|
1203
1287
|
if (e.autorizadoPor)
|
|
1204
|
-
detalhe.push(
|
|
1288
|
+
detalhe.push(m.autorizadoPor(String(e.autorizadoPor)));
|
|
1205
1289
|
if (e.sobre)
|
|
1206
|
-
detalhe.push(
|
|
1290
|
+
detalhe.push(m.sobre(String(e.sobre)));
|
|
1207
1291
|
if (e.estado)
|
|
1208
1292
|
detalhe.push(String(e.estado));
|
|
1209
1293
|
if (typeof e.de === 'string' && typeof e.para === 'string') {
|
|
1210
1294
|
detalhe.push(`${e.de} -> ${e.para}`);
|
|
1211
1295
|
}
|
|
1212
1296
|
if (e.dryRun === true)
|
|
1213
|
-
detalhe.push(
|
|
1297
|
+
detalhe.push(m.ensaio);
|
|
1214
1298
|
if (e.tipo === ledger_1.TIPOS_DE_EVENTO.worktreeCriada && e.dir) {
|
|
1215
|
-
detalhe.push(
|
|
1299
|
+
detalhe.push(m.worktreeEm(String(e.branch), String(e.dir)));
|
|
1216
1300
|
}
|
|
1217
1301
|
if (e.inline !== undefined) {
|
|
1218
|
-
detalhe.push(
|
|
1302
|
+
detalhe.push(m.triagem(String(e.inline), String(e.pointers), String(e.summaries)));
|
|
1219
1303
|
}
|
|
1220
1304
|
if (e.location)
|
|
1221
|
-
detalhe.push(
|
|
1305
|
+
detalhe.push(m.ponteiro(String(e.location)));
|
|
1222
1306
|
if (e.erro)
|
|
1223
|
-
detalhe.push(
|
|
1307
|
+
detalhe.push(m.erro(String(e.erro)));
|
|
1224
1308
|
if (e.detalhe && !e.decisao)
|
|
1225
1309
|
detalhe.push((0, horario_1.localizarTexto)(String(e.detalhe)).slice(0, 90));
|
|
1226
1310
|
if (e.modo && !e.fase)
|
|
1227
|
-
detalhe.push(
|
|
1311
|
+
detalhe.push(m.modo(String(e.modo)));
|
|
1228
1312
|
return [(0, horario_1.formatarDataHora)(e.ts, { segundos: true }), e.tipo, detalhe.join(' | ')];
|
|
1229
1313
|
});
|
|
1230
|
-
return `${(0, util_1.tabela)([
|
|
1314
|
+
return `${(0, util_1.tabela)([...m.colunas], linhas)}\n${(0, horario_1.legendaDoFuso)()}`;
|
|
1231
1315
|
}
|
|
1232
1316
|
/** Slug legivel por humano de uma sessao (usado nas mensagens do CLI). */
|
|
1233
1317
|
function descreverSlug(slug) {
|
|
1234
1318
|
const p = (0, slug_1.parseSlug)(slug);
|
|
1235
|
-
|
|
1236
|
-
return slug;
|
|
1237
|
-
const rot = p.rotacao ? `, rotacao ${p.rotacao}` : '';
|
|
1238
|
-
return `produto "${p.produto}", assunto "${p.assunto}", fases "${p.fases}"${rot}`;
|
|
1319
|
+
return p ? (0, locale_1.msg)().thread.slug(p.produto, p.assunto, p.fases, p.rotacao) : slug;
|
|
1239
1320
|
}
|
package/dist/policies.js
CHANGED
|
@@ -14,6 +14,7 @@ Object.defineProperty(exports, "__esModule", { value: true });
|
|
|
14
14
|
exports.POLICIES_DE_PROVA_LOCAL = exports.POLICIES_CONHECIDAS = void 0;
|
|
15
15
|
exports.procurarSegredos = procurarSegredos;
|
|
16
16
|
exports.policyDeProvaLocal = policyDeProvaLocal;
|
|
17
|
+
exports.severidadeDeclarada = severidadeDeclarada;
|
|
17
18
|
exports.policiesDesconhecidas = policiesDesconhecidas;
|
|
18
19
|
exports.avaliarPolicies = avaliarPolicies;
|
|
19
20
|
exports.avisos = avisos;
|
|
@@ -21,6 +22,7 @@ exports.bloqueantes = bloqueantes;
|
|
|
21
22
|
exports.motivoDominante = motivoDominante;
|
|
22
23
|
exports.linhasDeAviso = linhasDeAviso;
|
|
23
24
|
exports.textoDeViolacoes = textoDeViolacoes;
|
|
25
|
+
const locale_1 = require("./locale");
|
|
24
26
|
/**
|
|
25
27
|
* Variaveis que REDIRECIONAM o despacho do `claude` para um provider pago.
|
|
26
28
|
* Mesma lista do `ork doctor`: presenca delas com `subscription-only` e bloqueante.
|
|
@@ -106,6 +108,13 @@ exports.POLICIES_CONHECIDAS = {
|
|
|
106
108
|
quando: ['claims.add'],
|
|
107
109
|
descricao: 'a mesma conferencia de claim_sem_prova_local, com o nome que o ork licoes propoe',
|
|
108
110
|
},
|
|
111
|
+
// RM-062 (F2): a barreira de dado privado. Declarada, o `ork verify` varre o diff da thread e o `ork ci prepare`, o
|
|
112
|
+
// diff e o bundle; fora do manifesto, nenhum dos dois varre nada (projeto privado nao paga pelo que nao pediu).
|
|
113
|
+
dado_privado: {
|
|
114
|
+
quando: ['verify', 'ci.prepare'],
|
|
115
|
+
descricao: 'reprova (ou avisa) quando o diff da thread ou o bundle de CI leva caminho de home, e-mail fora da lista, ' +
|
|
116
|
+
'hostname de maquina ou termo da lista local',
|
|
117
|
+
},
|
|
109
118
|
};
|
|
110
119
|
/** RM-008 (B8): as policies que conferem a claim no registro (um aviso so, como verify_regression e verify_failed). */
|
|
111
120
|
exports.POLICIES_DE_PROVA_LOCAL = ['claim_sem_prova_local', 'claims_failed'];
|
|
@@ -134,6 +143,11 @@ function severidade(bruta) {
|
|
|
134
143
|
return bruta;
|
|
135
144
|
return 'warn';
|
|
136
145
|
}
|
|
146
|
+
/** RM-062 (F2): a severidade da policy como o manifesto a declara, ou `null` quando ele nao a declara. */
|
|
147
|
+
function severidadeDeclarada(manifesto, nome) {
|
|
148
|
+
const bruta = manifesto.policies?.[nome];
|
|
149
|
+
return bruta === undefined ? null : severidade(bruta);
|
|
150
|
+
}
|
|
137
151
|
/** Policies declaradas no manifesto que o `ork` nao sabe executar. */
|
|
138
152
|
function policiesDesconhecidas(manifesto) {
|
|
139
153
|
return Object.keys(manifesto.policies ?? {}).filter((p) => !(p in exports.POLICIES_CONHECIDAS));
|
|
@@ -275,6 +289,26 @@ function avaliarPolicies(manifesto, ctx) {
|
|
|
275
289
|
}
|
|
276
290
|
continue;
|
|
277
291
|
}
|
|
292
|
+
if (nome === 'dado_privado') {
|
|
293
|
+
const f = ctx.dadoPrivado;
|
|
294
|
+
if (!f || (f.achados === 0 && !f.erro))
|
|
295
|
+
continue;
|
|
296
|
+
const lista = f.listaLocal ? 'com a lista local' : 'lista local ausente: so os padroes genericos';
|
|
297
|
+
violacoes.push({
|
|
298
|
+
policy: nome,
|
|
299
|
+
severidade: sev,
|
|
300
|
+
motivo: 'policy.violation',
|
|
301
|
+
detalhe: f.erro
|
|
302
|
+
? `a varredura de dado privado nao rodou: ${f.erro}`
|
|
303
|
+
: `${f.achados} achado(s) de dado privado (${f.padroes.join(', ')}) no ${f.escopo}, ${lista}: ` +
|
|
304
|
+
`${f.onde.join(', ')}${f.achados > f.onde.length ? ', ...' : ''} (o valor casado nunca e impresso)`,
|
|
305
|
+
correcao: f.erro
|
|
306
|
+
? 'corrija o orkastery.privado.json (ou tire a lista local do git) e rode de novo'
|
|
307
|
+
: 'troque o dado pelo generico (maquina-a, /home/usuario, pessoa@exemplo.invalid) ou, se for exemplo inventado, ' +
|
|
308
|
+
'ponha a excecao com motivo em orkastery.privado.json, revisada em PR; confira com ork privado varrer --base <base>',
|
|
309
|
+
});
|
|
310
|
+
continue;
|
|
311
|
+
}
|
|
278
312
|
if (nome === 'tree_blocked') {
|
|
279
313
|
if (ctx.branchAtrasDaBase === true) {
|
|
280
314
|
violacoes.push({
|
|
@@ -313,10 +347,9 @@ function motivoDominante(violacoes) {
|
|
|
313
347
|
}
|
|
314
348
|
/** RM-008 (fatia 3): as linhas de aviso (policies em warn) para a saida do CLI. Nada quando nao ha aviso. */
|
|
315
349
|
function linhasDeAviso(violacoes, recuo = ' ') {
|
|
316
|
-
|
|
317
|
-
|
|
318
|
-
|
|
319
|
-
]);
|
|
350
|
+
// RM-061 (F2a): a moldura segue o locale do comando; detalhe e correcao sao dado da policy avaliada.
|
|
351
|
+
const m = (0, locale_1.msg)().phase;
|
|
352
|
+
return avisos(violacoes).flatMap((v) => [m.avisoDaPolicy(recuo, v.policy, v.detalhe), m.avisoCorrecao(recuo, v.correcao)]);
|
|
320
353
|
}
|
|
321
354
|
/** Texto das violacoes para a saida do CLI. */
|
|
322
355
|
function textoDeViolacoes(violacoes) {
|
package/dist/portfolio.js
CHANGED
|
@@ -33,6 +33,7 @@ var __importStar = (this && this.__importStar) || (function () {
|
|
|
33
33
|
};
|
|
34
34
|
})();
|
|
35
35
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
36
|
+
exports.ID_DE_ENTIDADE = void 0;
|
|
36
37
|
exports.readPortfolio = readPortfolio;
|
|
37
38
|
exports.findEntity = findEntity;
|
|
38
39
|
exports.createProduct = createProduct;
|
|
@@ -48,7 +49,8 @@ const estado_thread_1 = require("./estado-thread");
|
|
|
48
49
|
const company_brain_journal_1 = require("./company-brain-journal");
|
|
49
50
|
const util_1 = require("./util");
|
|
50
51
|
const creation_operation_store_1 = require("./creation-operation-store");
|
|
51
|
-
|
|
52
|
+
/** Id de produto, projeto ou iniciativa: o mesmo que o Brain recebe e o conhecimento cita (RM-026 K7, D3). */
|
|
53
|
+
exports.ID_DE_ENTIDADE = /^(prod|proj|init)-[a-z0-9][a-z0-9-]{2,47}$/;
|
|
52
54
|
const PREFIX = { product: 'prod-', project: 'proj-', initiative: 'init-' };
|
|
53
55
|
const statuses = ['idea', 'planned', 'ready', 'in_progress', 'validating', 'delivered', 'blocked', 'cancelled'];
|
|
54
56
|
const unique = (values = []) => [...new Set(values.map((v) => v.trim()).filter(Boolean))];
|
|
@@ -71,7 +73,7 @@ function mutatePortfolio(root, run) {
|
|
|
71
73
|
return (0, creation_operation_store_1.withCreationLock)((0, estado_thread_1.raizDoEstado)(root), 'portfolio', () => (0, company_brain_journal_1.portfolioMutation)(file(root), run));
|
|
72
74
|
}
|
|
73
75
|
function validateBase(kind, input) {
|
|
74
|
-
if (!
|
|
76
|
+
if (!exports.ID_DE_ENTIDADE.test(input.id) || !input.id.startsWith(PREFIX[kind]))
|
|
75
77
|
throw new Error(`${kind} exige id ${PREFIX[kind]}...`);
|
|
76
78
|
if (!input.title.trim() || input.title.length > 160)
|
|
77
79
|
throw new Error('título deve ter entre 1 e 160 caracteres');
|