@orkastery/cli 0.5.6 → 0.6.1
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 +37 -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/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-pista/hooks/ci.ts +9 -5
- 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/hooks/vigia.ts +1 -1
- 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 +2 -2
- package/adapters/openclaw/README.md +81 -9
- 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/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 +123 -9
- package/dist/adapters/codex-controller-worker.js +12 -5
- package/dist/adapters/codex-events.js +16 -4
- package/dist/adapters/codex.js +3 -1
- package/dist/adapters/grok-events.js +227 -0
- package/dist/adapters/grok-mcp-servidor.js +612 -0
- package/dist/adapters/grok-mcp.js +178 -0
- package/dist/adapters/grok.js +686 -0
- package/dist/agendador-cpu.js +92 -0
- package/dist/atualizar-branch.js +245 -0
- package/dist/auditoria.js +13 -11
- package/dist/auditrun.js +51 -46
- package/dist/autorizacao-duravel.js +327 -0
- package/dist/board.js +94 -40
- package/dist/branch-de-estado.js +23 -10
- package/dist/busca-semantica.js +7 -5
- package/dist/catalogo.js +2 -1
- package/dist/changelog-reconciliacao.js +290 -0
- package/dist/check-agil.js +528 -0
- package/dist/check-modo.js +41 -0
- package/dist/check-paralelo.js +238 -0
- package/dist/ci.js +248 -45
- package/dist/ciclos.js +8 -6
- package/dist/claim-lint.js +12 -8
- package/dist/claims-conferir.js +47 -39
- package/dist/claims.js +10 -9
- package/dist/company-brain-client.js +10 -3
- package/dist/company-brain-migration.js +11 -5
- package/dist/conducao-batida.js +759 -0
- package/dist/conducao-sentinela.js +25 -8
- package/dist/conducao.js +89 -29
- package/dist/conhecimento-consulta.js +270 -0
- package/dist/conhecimento.js +111 -87
- 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 +89 -89
- package/dist/doctor-forja.js +343 -0
- package/dist/doctor-pulse-cron.js +113 -1
- package/dist/doctor.js +164 -6
- package/dist/dsn-da-memoria.js +417 -0
- package/dist/entrega-por-mod.js +503 -0
- package/dist/entrega-pr.js +154 -54
- package/dist/esgotamentos.js +13 -11
- package/dist/estado-thread.js +21 -18
- package/dist/evalrunner.js +35 -32
- package/dist/fabrica-batida.js +34 -21
- package/dist/fabrica-estado.js +33 -21
- package/dist/fix.js +21 -19
- 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 +123 -80
- package/dist/handoff.js +23 -13
- 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 +51 -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 +44 -1
- package/dist/hitl-sessions.js +62 -9
- package/dist/hitl-texto-livre.js +7 -4
- package/dist/hitl.js +34 -31
- package/dist/horario.js +20 -1
- package/dist/hosts.js +104 -134
- package/dist/index.js +864 -554
- package/dist/indice-vetorial.js +14 -12
- package/dist/init.js +11 -2
- package/dist/integracoes-locais.js +4 -0
- package/dist/intelligence-graph-cli.js +123 -69
- package/dist/intelligence-graph-query.js +37 -22
- package/dist/leases.js +19 -18
- package/dist/ledger-stats.js +17 -16
- package/dist/ledger.js +31 -1
- package/dist/licoes.js +12 -11
- package/dist/locale-accounts.js +228 -0
- package/dist/locale-adapter.js +291 -0
- package/dist/locale-ajuda.js +86 -10
- 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 +288 -0
- package/dist/locale-gerados.js +5 -0
- package/dist/locale-grafo.js +129 -0
- package/dist/locale-master.js +83 -0
- package/dist/locale-network.js +524 -0
- package/dist/locale-operacao-restante.js +931 -0
- package/dist/locale-projetos.js +100 -0
- package/dist/locale-prompts.js +194 -0
- package/dist/locale-pulse.js +140 -2
- package/dist/locale-reservas.js +87 -0
- package/dist/locale-retry.js +183 -6
- package/dist/locale-security-scan.js +69 -0
- package/dist/locale-setup.js +192 -0
- package/dist/locale-ship.js +177 -66
- package/dist/locale-thread.js +149 -5
- package/dist/locale-verify.js +80 -4
- package/dist/locale-worktree.js +246 -0
- package/dist/locale.js +553 -9
- package/dist/maestro-runtime.js +22 -3
- package/dist/manifest.js +293 -12
- package/dist/maquina-ociosa.js +211 -0
- package/dist/maquina.js +10 -5
- package/dist/master-nota-local.js +200 -0
- package/dist/master-nota.js +10 -2
- package/dist/master.js +118 -41
- package/dist/mcp-conhecimento.js +52 -0
- package/dist/mcp-experiencia.js +26 -5
- package/dist/mcp-install.js +90 -15
- package/dist/mcp-noctum.js +101 -0
- package/dist/mcp-server.js +116 -22
- package/dist/mcp-ship-transporte.js +977 -0
- package/dist/mcp-ship.js +68 -24
- package/dist/mcp-transportes.js +17 -0
- package/dist/memoria.js +63 -58
- package/dist/merge-da-entrega.js +85 -0
- package/dist/modos-migracao.js +8 -6
- package/dist/modos.js +17 -18
- package/dist/network-roadmap.js +94 -54
- package/dist/noctum-aceite.js +929 -0
- package/dist/noctum-arco.js +540 -33
- package/dist/noctum-capacidade.js +3 -3
- package/dist/noctum-changelog.js +399 -0
- package/dist/noctum-cli.js +539 -0
- package/dist/noctum-coordenacao.js +1225 -0
- package/dist/noctum-entrega.js +1217 -0
- package/dist/noctum-envelope.js +253 -17
- package/dist/noctum-execucao.js +100 -24
- package/dist/noctum-fechamento.js +416 -0
- package/dist/noctum-fila.js +49 -10
- package/dist/noctum-guarda.js +333 -0
- package/dist/noctum-integracao.js +507 -0
- package/dist/noctum-maquinas.js +387 -0
- package/dist/noctum-medicao.js +450 -0
- package/dist/noctum-modo.js +390 -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 +594 -0
- package/dist/noctum-rede.js +102 -0
- package/dist/noctum-registro.js +215 -0
- package/dist/noctum-relatorio.js +861 -0
- package/dist/noctum-resposta.js +207 -0
- package/dist/noctum-retomada-rede.js +71 -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 +679 -0
- package/dist/ocupacao.js +3 -1
- package/dist/onboarding.js +16 -5
- package/dist/orkmind.js +39 -23
- package/dist/orquestracao.js +31 -35
- package/dist/parado-no-condutor.js +160 -139
- package/dist/phase.js +96 -42
- package/dist/policies.js +33 -0
- package/dist/postura-local.js +11 -6
- package/dist/preflight.js +2 -1
- package/dist/procedencia.js +9 -14
- package/dist/projeto-alvo.js +59 -20
- package/dist/prompts.js +136 -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 +143 -27
- package/dist/pulse-resposta.js +368 -4
- package/dist/pulse.js +136 -3
- package/dist/ratelimit.js +13 -4
- package/dist/recall.js +14 -13
- package/dist/rede-adesao.js +13 -8
- package/dist/rede-forja.js +108 -24
- package/dist/rede-status.js +63 -45
- package/dist/rede.js +86 -46
- package/dist/retomada-checkpoint.js +101 -0
- package/dist/retry.js +326 -78
- package/dist/roadmap-reservas.js +32 -32
- package/dist/runtime-ambiente.js +5 -0
- package/dist/runtime-context.js +279 -85
- package/dist/runtime-escada.js +429 -0
- package/dist/runtime-profiles.js +130 -63
- package/dist/runtimes.js +42 -5
- package/dist/saida-segura.js +3 -2
- package/dist/security-scan/agil.js +366 -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 +196 -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 +19 -2
- package/dist/session-watcher-claude.js +74 -19
- package/dist/session-watcher-grok.js +425 -0
- package/dist/session-watcher.js +174 -13
- package/dist/sessoes-contas.js +42 -5
- package/dist/sessoes-inventario.js +1 -1
- package/dist/sessoes.js +25 -23
- package/dist/setup.js +67 -66
- package/dist/ship-publicar.js +263 -92
- package/dist/ship.js +160 -17
- package/dist/superficie.js +14 -11
- package/dist/thread-close.js +9 -9
- package/dist/thread.js +121 -18
- 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 +5 -2
- package/dist/varredura-acoes.js +500 -0
- package/dist/verify.js +491 -32
- package/dist/worktree-local.js +12 -10
- package/dist/worktree.js +81 -85
- 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 +10 -5
- package/references/security-checklist.md +3 -3
- 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/ship.js
CHANGED
|
@@ -59,6 +59,7 @@ exports.shaDaRef = shaDaRef;
|
|
|
59
59
|
exports.shaNoRemoto = shaNoRemoto;
|
|
60
60
|
exports.remotoConfigurado = remotoConfigurado;
|
|
61
61
|
exports.detectarReversaoDaEntrega = detectarReversaoDaEntrega;
|
|
62
|
+
exports.unscannedCategories = unscannedCategories;
|
|
62
63
|
exports.registrarReversaoDaEntrega = registrarReversaoDaEntrega;
|
|
63
64
|
exports.ship = ship;
|
|
64
65
|
exports.textoDoShip = textoDoShip;
|
|
@@ -71,16 +72,22 @@ const ledger_1 = require("./ledger");
|
|
|
71
72
|
const manifest_1 = require("./manifest");
|
|
72
73
|
const modos_1 = require("./modos");
|
|
73
74
|
const policies_1 = require("./policies");
|
|
75
|
+
const estado_thread_1 = require("./estado-thread");
|
|
76
|
+
const report_1 = require("./security-scan/report");
|
|
77
|
+
const types_1 = require("./security-scan/types");
|
|
74
78
|
const thread_1 = require("./thread");
|
|
75
79
|
const util_1 = require("./util");
|
|
76
80
|
const verify_1 = require("./verify");
|
|
77
81
|
const ci_1 = require("./ci");
|
|
82
|
+
const forja_1 = require("./forja");
|
|
78
83
|
const contrato_publico_1 = require("./contrato-publico");
|
|
79
84
|
const prova_minima_1 = require("./prova-minima");
|
|
80
85
|
const horario_1 = require("./horario");
|
|
81
86
|
const fabrica_publicar_1 = require("./fabrica-publicar");
|
|
87
|
+
const mcp_ship_transporte_1 = require("./mcp-ship-transporte");
|
|
82
88
|
const branch_de_estado_1 = require("./branch-de-estado");
|
|
83
89
|
const locale_1 = require("./locale");
|
|
90
|
+
const noctum_guarda_1 = require("./noctum-guarda");
|
|
84
91
|
/**
|
|
85
92
|
* RM-037 (fatia 5, A1): o commit de primeiro pai da base que incorporou o `shaDe`: o merge que trouxe a branch, ou
|
|
86
93
|
* o proprio `shaDe` quando a base avancou por fast-forward ate ele. Com a branch ja incorporada, a ponta da base e
|
|
@@ -235,12 +242,17 @@ function prepararArvore(raiz, para) {
|
|
|
235
242
|
return { dir, temporaria: true };
|
|
236
243
|
}
|
|
237
244
|
/** Remove a worktree temporaria do merge (best effort: o lease ja foi liberado). */
|
|
238
|
-
function descartarArvore(raiz, arvore) {
|
|
245
|
+
function descartarArvore(raiz, arvore, trava = []) {
|
|
239
246
|
if (!arvore.temporaria)
|
|
240
247
|
return;
|
|
241
|
-
(0, util_1.exec)('git', ['worktree', 'remove', '--force', arvore.dir], raiz);
|
|
242
|
-
(0, util_1.exec)('git', ['worktree', 'prune'], raiz);
|
|
248
|
+
(0, util_1.exec)('git', [...trava, 'worktree', 'remove', '--force', arvore.dir], raiz);
|
|
249
|
+
(0, util_1.exec)('git', [...trava, 'worktree', 'prune'], raiz);
|
|
243
250
|
}
|
|
251
|
+
/**
|
|
252
|
+
* O git local que o transporte fixado roda no projeto depois da ultima conferencia: nenhum hook (o
|
|
253
|
+
* `reference-transaction` do `update-ref`, inclusive) e nenhum fsmonitor, que o agente pode ter posto ali durante o push.
|
|
254
|
+
*/
|
|
255
|
+
const TRAVA_LOCAL_DO_FIXADO = ['-c', 'core.hooksPath=/dev/null', '-c', 'core.fsmonitor='];
|
|
244
256
|
/** sha de uma referencia local, ou null quando ela nao existe. */
|
|
245
257
|
function shaDaRef(dir, ref) {
|
|
246
258
|
const r = (0, util_1.exec)('git', ['rev-parse', '--verify', '--quiet', ref], dir);
|
|
@@ -253,9 +265,34 @@ function shaDaRef(dir, ref) {
|
|
|
253
265
|
* E o unico jeito aceito de provar push nesta maquina: `gh api` e imprevisivel aqui, e o
|
|
254
266
|
* codigo de saida do `git push` nao prova que o remoto ficou com o commit certo.
|
|
255
267
|
*/
|
|
256
|
-
function shaNoRemoto(dir, remoto, branch) {
|
|
268
|
+
function shaNoRemoto(dir, remoto, branch, config = []) {
|
|
257
269
|
// RM-047: so nome de remoto chega ao git, e depois do `--` (nunca vira opcao nem transporte).
|
|
258
|
-
const r = (0, util_1.exec)('git', ['ls-remote', '--', (0, branch_de_estado_1.exigirRemoto)(remoto, 'ship'), `refs/heads/${branch}`], dir, 120000);
|
|
270
|
+
const r = (0, util_1.exec)('git', [...configDoRemotoValida(config), 'ls-remote', '--', (0, branch_de_estado_1.exigirRemoto)(remoto, 'ship'), `refs/heads/${branch}`], dir, 120000);
|
|
271
|
+
return shaDoLsRemote(r, branch);
|
|
272
|
+
}
|
|
273
|
+
function validarUrlFixada(url, config) {
|
|
274
|
+
const protocolo = (0, mcp_ship_transporte_1.protocoloDaConfigDeRede)(config);
|
|
275
|
+
const recusa = () => { throw new locale_1.ErroDoCatalogo((m) => m.ship.configDoRemotoInvalida('urlFixada')); };
|
|
276
|
+
if (!protocolo || typeof url !== 'string' || /[\x00-\x20\x7f]/.test(url) || url.startsWith('-'))
|
|
277
|
+
return recusa();
|
|
278
|
+
try {
|
|
279
|
+
const e = (0, mcp_ship_transporte_1.enderecoDoOrigin)(protocolo === 'ssh' ? 'forja-ssh' : 'forja-https', url);
|
|
280
|
+
if (e.transporte === 'forja-https' && (0, mcp_ship_transporte_1.urlDaConfigDeRede)(config) !== url)
|
|
281
|
+
return recusa();
|
|
282
|
+
}
|
|
283
|
+
catch {
|
|
284
|
+
return recusa();
|
|
285
|
+
}
|
|
286
|
+
return { url, protocolo };
|
|
287
|
+
}
|
|
288
|
+
/** O git que vai a rede no transporte fixado: do gitdir privado, so com o protocolo do modo. */
|
|
289
|
+
function gitDoRemotoFixado(f, args, timeoutMs) {
|
|
290
|
+
return (0, util_1.exec)('git', [`--git-dir=${f.gitdir}`, ...f.config, ...args], f.gitdir, timeoutMs, { ...process.env, GIT_ALLOW_PROTOCOL: f.protocolo });
|
|
291
|
+
}
|
|
292
|
+
function shaNoRemotoFixado(f, branch) {
|
|
293
|
+
return shaDoLsRemote(gitDoRemotoFixado(f, ['ls-remote', '--', f.url, `refs/heads/${branch}`], 120000), branch);
|
|
294
|
+
}
|
|
295
|
+
function shaDoLsRemote(r, branch) {
|
|
259
296
|
if (!r.ok)
|
|
260
297
|
return null;
|
|
261
298
|
// RM-059 (S1 da revisao da ork-rm059pista): o padrao do ls-remote casa por sufixo; vale so a linha da ref exata.
|
|
@@ -263,6 +300,14 @@ function shaNoRemoto(dir, remoto, branch) {
|
|
|
263
300
|
const sha = linha?.[0] ?? '';
|
|
264
301
|
return /^[0-9a-f]{40}$/.test(sha) ? sha : null;
|
|
265
302
|
}
|
|
303
|
+
/** So a lista que `configDeRede` emite, chave e valor: nenhuma outra opcao, chave ou valor chega antes do subcomando de rede. */
|
|
304
|
+
function configDoRemotoValida(config) {
|
|
305
|
+
const recusada = (0, mcp_ship_transporte_1.chaveRecusadaDaConfigDeRede)(config);
|
|
306
|
+
// Nunca ecoa o valor: so a chave (ate 80 caracteres) mostra o que foi recusado.
|
|
307
|
+
if (recusada !== null)
|
|
308
|
+
throw new locale_1.ErroDoCatalogo((m) => m.ship.configDoRemotoInvalida(recusada.slice(0, 80)));
|
|
309
|
+
return config;
|
|
310
|
+
}
|
|
266
311
|
/** O remoto esta configurado neste repositorio? */
|
|
267
312
|
function remotoConfigurado(dir, remoto) {
|
|
268
313
|
return (0, util_1.exec)('git', ['remote', 'get-url', '--', (0, branch_de_estado_1.exigirRemoto)(remoto, 'ship')], dir).ok;
|
|
@@ -347,6 +392,23 @@ function detectarReversaoDaEntrega(raiz, thread, para) {
|
|
|
347
392
|
}
|
|
348
393
|
return null;
|
|
349
394
|
}
|
|
395
|
+
/**
|
|
396
|
+
* Loop categories (secret, dependency, sast, iac, workflow) not scanned for `sha` (spec 11.2): `[]` without
|
|
397
|
+
* `verify.security_scan` and with `ci.required_for_ship` (the scan is then in the CI bundle, which the independent CI
|
|
398
|
+
* check covers). Otherwise the report of `sha` decides: a loop tool `unavailable` or `failed` leaves its category
|
|
399
|
+
* unscanned (the spec says `unavailable`; a `failed` loop tool is equally not scanned, never clean), except the
|
|
400
|
+
* "nothing to scan" reasons excused by `isExcusedUnscanned` (same rule as the exit code), and no report at all leaves
|
|
401
|
+
* every loop category unscanned (no evidence is not clean). Sorted, distinct.
|
|
402
|
+
*/
|
|
403
|
+
function unscannedCategories(carregado, sha) {
|
|
404
|
+
if (carregado.manifesto.verify.security_scan === undefined || carregado.manifesto.ci.required_for_ship)
|
|
405
|
+
return [];
|
|
406
|
+
const report = (0, report_1.readReport)((0, estado_thread_1.raizDoEstado)(carregado.raiz), sha);
|
|
407
|
+
if (!report)
|
|
408
|
+
return [...types_1.LOOP_CATEGORIES].sort();
|
|
409
|
+
const missing = (0, report_1.unscannedLoopTools)(report).map(t => t.category);
|
|
410
|
+
return [...new Set(missing)].sort();
|
|
411
|
+
}
|
|
350
412
|
/**
|
|
351
413
|
* Grava `rollback_done` quando a reversao e nova, e devolve o que encontrou.
|
|
352
414
|
*
|
|
@@ -379,7 +441,20 @@ function ship(carregado, threadId, opcoes) {
|
|
|
379
441
|
// so nome de remoto passa; o resto recusa com `ship.remoto-invalido`, e o ship nao entrega sem push provado
|
|
380
442
|
// por um remoto que nunca existiu.
|
|
381
443
|
const remoto = (0, branch_de_estado_1.exigirRemoto)(opcoes.remoto ?? 'origin', 'ship');
|
|
444
|
+
const configDoRemoto = configDoRemotoValida(opcoes.configDoRemoto ?? []);
|
|
445
|
+
const comConfig = (args) => `git ${[...configDoRemoto, ...args].join(' ')}`;
|
|
446
|
+
const urlFixada = opcoes.urlFixada === undefined ? null : validarUrlFixada(opcoes.urlFixada, configDoRemoto);
|
|
447
|
+
// Nos passos, o gitdir privado e a URL fixada vao por nome: o caminho temporario nao diz nada a quem le.
|
|
382
448
|
const r = baseDoResultado(thread, de, opcoes);
|
|
449
|
+
// RM-058, integracao (T1.1, D3 da ork-rm058integra): a thread de um arco #Noctum que a guarda e entregue pelo passo da
|
|
450
|
+
// entrega do arco, nunca por aqui (nem pelo `ork_ship` do MCP, que chama este mesmo ship). A recusa vem antes de qualquer
|
|
451
|
+
// git e nao vai ao ledger da thread: um `ship_blocked` ou um gate por uma tentativa de fora pesaria no indice da thread e
|
|
452
|
+
// apareceria como pausa do dono na fila do arco.
|
|
453
|
+
const guarda = (0, noctum_guarda_1.guardaDaThread)(raiz, threadId);
|
|
454
|
+
if (guarda) {
|
|
455
|
+
return { ...r, autorizacao: autorizacaoDePush(raiz, thread, opcoes), bloqueado: true, ok: false, motivo: 'policy.violation',
|
|
456
|
+
codigo: guarda.motivo, detalhe: guarda.detalhe, correcao: guarda.correcao };
|
|
457
|
+
}
|
|
383
458
|
// I-43 (T7): antes de qualquer coisa, se a entrega ANTERIOR desta thread foi
|
|
384
459
|
// revertida na base, isso vira `rollback_done`. E o insumo de maior peso do indice
|
|
385
460
|
// de qualidade, e o unico fato que diz sem interpretacao que a entrega nao servia.
|
|
@@ -388,7 +463,18 @@ function ship(carregado, threadId, opcoes) {
|
|
|
388
463
|
registrarReversaoDaEntrega(raiz, thread, para);
|
|
389
464
|
}
|
|
390
465
|
catch { /* git indisponivel nao barra o ship */ }
|
|
391
|
-
|
|
466
|
+
// O push pode ter saido: a troca do origin ou da config durante ele bloqueia o gate no ledger e sobe tipada.
|
|
467
|
+
const conferirDepoisDoPush = (passos) => {
|
|
468
|
+
try {
|
|
469
|
+
opcoes.conferirDepoisDoPush?.();
|
|
470
|
+
}
|
|
471
|
+
catch (e) {
|
|
472
|
+
r.passos = passos;
|
|
473
|
+
bloquear('runtime.unavailable', e instanceof locale_1.ErroDoCatalogo ? (0, locale_1.textoDoCatalogo)(e.montar) : e.message, (0, locale_1.textoDoCatalogo)((m) => m.ship.pushSemProvaCorrecao), 'transport.mudou-no-push');
|
|
474
|
+
throw e;
|
|
475
|
+
}
|
|
476
|
+
};
|
|
477
|
+
const bloquear = (motivo, detalhe, correcao, codigo) => {
|
|
392
478
|
(0, gates_1.registrarGateBloqueado)(dir, threadId, {
|
|
393
479
|
gate: 'ship',
|
|
394
480
|
motivo,
|
|
@@ -404,12 +490,13 @@ function ship(carregado, threadId, opcoes) {
|
|
|
404
490
|
de,
|
|
405
491
|
para,
|
|
406
492
|
motivo,
|
|
493
|
+
...(codigo ? { codigo } : {}),
|
|
407
494
|
detalhe,
|
|
408
495
|
correcao,
|
|
409
496
|
modo: thread.modo,
|
|
410
497
|
dryRun: r.dryRun,
|
|
411
498
|
});
|
|
412
|
-
return { ...r, bloqueado: true, ok: false, motivo, detalhe, correcao };
|
|
499
|
+
return { ...r, bloqueado: true, ok: false, motivo, detalhe, correcao, ...(codigo ? { codigo } : {}) };
|
|
413
500
|
};
|
|
414
501
|
// 1. Autorizacao de push pelo gate do modo de conducao.
|
|
415
502
|
const autorizacao = autorizacaoDePush(raiz, thread, opcoes);
|
|
@@ -497,6 +584,21 @@ function ship(carregado, threadId, opcoes) {
|
|
|
497
584
|
if (!ci.ok) {
|
|
498
585
|
return bloquear('ci.failed', (0, locale_1.textoDoCatalogo)((m) => m.ship.ciReprovou((0, locale_1.remontar)(ci.detail), shaDe, ci.context)), (0, locale_1.textoDoCatalogo)((m) => m.ship.ciReprovouCorrecao(ci.context)));
|
|
499
586
|
}
|
|
587
|
+
// Security scan (spec 11.2): com `verify.security_scan` e sem o scan no bundle do CI, categoria do laco sem varredura
|
|
588
|
+
// no SHA da candidata pede autorizacao humana, antes de qualquer push.
|
|
589
|
+
const naoVarridas = unscannedCategories(carregado, shaDe);
|
|
590
|
+
let autorizariaSemScan = null;
|
|
591
|
+
if (naoVarridas.length > 0) {
|
|
592
|
+
const quem = opcoes.allowUnscanned?.trim();
|
|
593
|
+
if (!quem) {
|
|
594
|
+
return bloquear('human.pending', (0, locale_1.textoDoCatalogo)((m) => m.ship.scanNaoVarrido(naoVarridas.join(', '), shaDe)), (0, locale_1.textoDoCatalogo)((m) => m.ship.scanNaoVarridoCorrecao(threadId)));
|
|
595
|
+
}
|
|
596
|
+
// O ensaio nao grava a autorizacao: so diz, nos passos, o que o ship real gravaria.
|
|
597
|
+
if (r.dryRun)
|
|
598
|
+
autorizariaSemScan = (0, locale_1.textoDoCatalogo)((m) => m.ship.passoAutorizariaSemScan(quem, naoVarridas.join(', '), shaDe));
|
|
599
|
+
else
|
|
600
|
+
(0, ledger_1.registrar)(dir, threadId, ledger_1.TIPOS_DE_EVENTO.entregaSemScanAutorizada, { por: quem, categorias: naoVarridas, sha: shaDe });
|
|
601
|
+
}
|
|
500
602
|
// 4. Lease `main-tree`: so uma thread mergeia por vez.
|
|
501
603
|
if (r.dryRun) {
|
|
502
604
|
const ocupado = (0, leases_1.leasesColidentes)(raiz, leases_1.LEASE_MAIN_TREE)[0] ?? null;
|
|
@@ -514,6 +616,7 @@ function ship(carregado, threadId, opcoes) {
|
|
|
514
616
|
? (m) => opcoes.semPush ? m.ship.semPushPorFlag : m.ship.semRemoto(remoto) : null;
|
|
515
617
|
r.passos = [
|
|
516
618
|
r.detalhe,
|
|
619
|
+
...(autorizariaSemScan ? [autorizariaSemScan] : []),
|
|
517
620
|
(0, locale_1.textoDoCatalogo)((m) => m.ship.passoMerge(de)),
|
|
518
621
|
...(semPushNoReal ? [(0, locale_1.textoDoCatalogo)((m) => m.ship.passoSemPush(semPushNoReal(m)))] : [
|
|
519
622
|
`git push ${remoto} ${para}`,
|
|
@@ -632,27 +735,65 @@ function ship(carregado, threadId, opcoes) {
|
|
|
632
735
|
r.pontaDaBase = pontaDaBase;
|
|
633
736
|
opcoes.revalidarGit?.('push', arvore.dir);
|
|
634
737
|
// 6. Push PROVADO por ls-remote.
|
|
635
|
-
const temRemoto = remotoConfigurado(arvore.dir, remoto);
|
|
738
|
+
const temRemoto = urlFixada !== null || remotoConfigurado(arvore.dir, remoto);
|
|
636
739
|
r.remoto = temRemoto ? remoto : null;
|
|
637
|
-
if (opcoes.semPush
|
|
740
|
+
if (urlFixada && !opcoes.semPush) {
|
|
741
|
+
const fixado = { gitdir: (0, mcp_ship_transporte_1.criarGitdirDoPush)(raiz), ...urlFixada, config: configDoRemoto };
|
|
742
|
+
const comFixado = (args) => `git --git-dir=<gitdir privado> ${[...configDoRemoto, ...args].join(' ')}`.replaceAll(urlFixada.url, '<origin fixado>');
|
|
743
|
+
try {
|
|
744
|
+
// O sha e o decidido aqui. Sem `-u`: o gitdir privado nao tem branch para rastrear, e gravar o upstream na
|
|
745
|
+
// config do projeto mudaria a config conferida; o `ls-remote` que so decidia o `-u` sai junto.
|
|
746
|
+
const argsPush = ['push', '--', urlFixada.url, `${pontaDaBase}:refs/heads/${para}`];
|
|
747
|
+
const push = gitDoRemotoFixado(fixado, argsPush, 300000);
|
|
748
|
+
passos.push(comFixado(argsPush));
|
|
749
|
+
if (!push.ok) {
|
|
750
|
+
r.passos = passos;
|
|
751
|
+
const erro = (0, forja_1.detalheDoPush)(push.stderr || push.stdout);
|
|
752
|
+
if ((0, forja_1.pushRecusadoPelaProtecao)(`${push.stderr}\n${push.stdout}`)) {
|
|
753
|
+
return bloquear('runtime.unavailable', (0, locale_1.textoDoCatalogo)((m) => m.ship.pushBaseProtegida(remoto, para, erro)), (0, locale_1.textoDoCatalogo)((m) => m.ship.pushBaseProtegidaCorrecao(threadId)), 'entrega.base-protegida');
|
|
754
|
+
}
|
|
755
|
+
return bloquear('runtime.unavailable', (0, locale_1.textoDoCatalogo)((m) => m.ship.pushFalhou(remoto, para, erro)), (0, locale_1.textoDoCatalogo)((m) => m.ship.pushFalhouCorrecao));
|
|
756
|
+
}
|
|
757
|
+
const shaRemoto = shaNoRemotoFixado(fixado, para);
|
|
758
|
+
passos.push(comFixado(['ls-remote', '--', urlFixada.url, `refs/heads/${para}`]));
|
|
759
|
+
conferirDepoisDoPush(passos);
|
|
760
|
+
r.shaRemoto = shaRemoto;
|
|
761
|
+
r.pushVerificado = shaRemoto !== null && shaRemoto === pontaDaBase;
|
|
762
|
+
if (!r.pushVerificado) {
|
|
763
|
+
r.passos = passos;
|
|
764
|
+
return bloquear('runtime.unavailable', (0, locale_1.textoDoCatalogo)((m) => m.ship.pushSemProva(shaRemoto, pontaDaBase)), (0, locale_1.textoDoCatalogo)((m) => m.ship.pushSemProvaCorrecao));
|
|
765
|
+
}
|
|
766
|
+
// A ref de rastreio do projeto acompanha o remoto provado, como no push por nome; local, sem rede.
|
|
767
|
+
(0, util_1.exec)('git', [...TRAVA_LOCAL_DO_FIXADO, 'update-ref', '--', `refs/remotes/${remoto}/${para}`, pontaDaBase], raiz);
|
|
768
|
+
}
|
|
769
|
+
finally {
|
|
770
|
+
fs.rmSync(fixado.gitdir, { recursive: true, force: true });
|
|
771
|
+
}
|
|
772
|
+
}
|
|
773
|
+
else if (opcoes.semPush || !temRemoto) {
|
|
638
774
|
r.pushVerificado = false;
|
|
639
775
|
r.detalhe = (0, locale_1.textoDoCatalogo)((m) => opcoes.semPush ? m.ship.semPushPorFlag : m.ship.semRemoto(remoto));
|
|
640
776
|
}
|
|
641
777
|
else {
|
|
642
|
-
const existeNoRemoto = shaNoRemoto(arvore.dir, remoto, para) !== null;
|
|
778
|
+
const existeNoRemoto = shaNoRemoto(arvore.dir, remoto, para, configDoRemoto) !== null;
|
|
643
779
|
const argsPush = existeNoRemoto
|
|
644
780
|
? ['push', '--', remoto, `refs/heads/${para}:refs/heads/${para}`]
|
|
645
781
|
: ['push', '-u', '--', remoto, `refs/heads/${para}:refs/heads/${para}`];
|
|
646
|
-
const push = (0, util_1.exec)('git', argsPush, arvore.dir, 300000);
|
|
647
|
-
passos.push(
|
|
782
|
+
const push = (0, util_1.exec)('git', [...configDoRemoto, ...argsPush], arvore.dir, 300000);
|
|
783
|
+
passos.push(comConfig(argsPush));
|
|
648
784
|
if (!push.ok) {
|
|
649
785
|
r.passos = passos;
|
|
650
|
-
const erro = (push.stderr || push.stdout)
|
|
786
|
+
const erro = (0, forja_1.detalheDoPush)(push.stderr || push.stdout);
|
|
787
|
+
// A protecao da base recusou: a entrega e por PR/MR e o registro dele. O motivo do gate nao muda, so a orientacao.
|
|
788
|
+
if ((0, forja_1.pushRecusadoPelaProtecao)(`${push.stderr}\n${push.stdout}`)) {
|
|
789
|
+
return bloquear('runtime.unavailable', (0, locale_1.textoDoCatalogo)((m) => m.ship.pushBaseProtegida(remoto, para, erro)), (0, locale_1.textoDoCatalogo)((m) => m.ship.pushBaseProtegidaCorrecao(threadId)), 'entrega.base-protegida');
|
|
790
|
+
}
|
|
651
791
|
return bloquear('runtime.unavailable', (0, locale_1.textoDoCatalogo)((m) => m.ship.pushFalhou(remoto, para, erro)), (0, locale_1.textoDoCatalogo)((m) => m.ship.pushFalhouCorrecao));
|
|
652
792
|
}
|
|
653
793
|
// A prova: o sha que o REMOTO devolve tem que ser o mesmo do destino local.
|
|
654
|
-
const shaRemoto = shaNoRemoto(arvore.dir, remoto, para);
|
|
655
|
-
passos.push(
|
|
794
|
+
const shaRemoto = shaNoRemoto(arvore.dir, remoto, para, configDoRemoto);
|
|
795
|
+
passos.push(comConfig(['ls-remote', remoto, `refs/heads/${para}`]));
|
|
796
|
+
conferirDepoisDoPush(passos);
|
|
656
797
|
r.shaRemoto = shaRemoto;
|
|
657
798
|
r.pushVerificado = shaRemoto !== null && shaRemoto === pontaDaBase;
|
|
658
799
|
if (!r.pushVerificado) {
|
|
@@ -695,7 +836,9 @@ function ship(carregado, threadId, opcoes) {
|
|
|
695
836
|
passos,
|
|
696
837
|
},
|
|
697
838
|
});
|
|
698
|
-
|
|
839
|
+
// A publicacao da fabrica empurra pelo origin do projeto, sem o transporte fixado: no fixado, nao sai daqui.
|
|
840
|
+
if (!urlFixada)
|
|
841
|
+
(0, fabrica_publicar_1.publicarEmSegundoPlano)(raiz);
|
|
699
842
|
const atualizada = (0, thread_1.lerThread)(raiz, threadId);
|
|
700
843
|
// I-42: ciclo sem SHIP (o `#Fast`) entrega sem trocar de fase; `faseAtual` fica sempre
|
|
701
844
|
// dentro do ciclo, porque board, pulse e prompt resolvem o bloco a partir dela.
|
|
@@ -710,7 +853,7 @@ function ship(carregado, threadId, opcoes) {
|
|
|
710
853
|
}
|
|
711
854
|
finally {
|
|
712
855
|
if (arvore)
|
|
713
|
-
descartarArvore(raiz, arvore);
|
|
856
|
+
descartarArvore(raiz, arvore, urlFixada ? TRAVA_LOCAL_DO_FIXADO : []);
|
|
714
857
|
const solto = (0, leases_1.liberar)(raiz, leases_1.LEASE_MAIN_TREE, threadId);
|
|
715
858
|
(0, ledger_1.registrar)(dir, threadId, ledger_1.TIPOS_DE_EVENTO.leaseLiberado, {
|
|
716
859
|
lease: leases_1.LEASE_MAIN_TREE,
|
package/dist/superficie.js
CHANGED
|
@@ -90,6 +90,7 @@ exports.blocoDoFormato = blocoDoFormato;
|
|
|
90
90
|
const fs = __importStar(require("node:fs"));
|
|
91
91
|
const path = __importStar(require("node:path"));
|
|
92
92
|
const util_1 = require("./util");
|
|
93
|
+
const locale_1 = require("./locale");
|
|
93
94
|
/** Ordem canonica das regras novas, usada no catalogo e nas saidas. */
|
|
94
95
|
exports.REGRAS_DE_SUPERFICIE = ['SP8', 'SP9', 'SP10', 'SP11', 'SP12'];
|
|
95
96
|
/** O que cada nivel de confianca significa, dito por extenso em toda saida. */
|
|
@@ -1286,8 +1287,9 @@ function entradaBrutaDaSuperficie(a) {
|
|
|
1286
1287
|
}
|
|
1287
1288
|
/** Tabela dos achados da varredura. */
|
|
1288
1289
|
function tabelaDaVarredura(r) {
|
|
1290
|
+
const m = (0, locale_1.msg)().audit.superficie;
|
|
1289
1291
|
if (r.achados.length === 0) {
|
|
1290
|
-
return
|
|
1292
|
+
return m.vazia(r.detalhe);
|
|
1291
1293
|
}
|
|
1292
1294
|
const linhas = r.achados.map((a) => [
|
|
1293
1295
|
a.regra,
|
|
@@ -1298,30 +1300,31 @@ function tabelaDaVarredura(r) {
|
|
|
1298
1300
|
`${a.arquivo}:${a.linha}`,
|
|
1299
1301
|
a.titulo,
|
|
1300
1302
|
]);
|
|
1301
|
-
return (0, util_1.tabela)([
|
|
1303
|
+
return (0, util_1.tabela)([...m.cabecalho], linhas);
|
|
1302
1304
|
}
|
|
1303
1305
|
/** Texto completo de `ork audit surface`. */
|
|
1304
1306
|
function textoDaVarredura(r) {
|
|
1307
|
+
const m = (0, locale_1.msg)().audit.superficie;
|
|
1305
1308
|
const L = [];
|
|
1306
|
-
L.push(
|
|
1309
|
+
L.push(m.titulo);
|
|
1307
1310
|
L.push('');
|
|
1308
|
-
L.push(
|
|
1309
|
-
L.push(
|
|
1310
|
-
L.push(
|
|
1311
|
-
L.push(
|
|
1311
|
+
L.push(m.campo(m.campos.raiz, r.raiz));
|
|
1312
|
+
L.push(m.campo(m.campos.escopo, r.detalhe));
|
|
1313
|
+
L.push(m.campo(m.campos.frameworks, r.frameworks.length > 0 ? r.frameworks.join(', ') : m.nenhumFramework));
|
|
1314
|
+
L.push(m.campo(m.campos.teto, m.teto(r.limitePorRegra)));
|
|
1312
1315
|
L.push('');
|
|
1313
1316
|
L.push(tabelaDaVarredura(r));
|
|
1314
1317
|
L.push('');
|
|
1315
1318
|
for (const t of r.truncados) {
|
|
1316
|
-
L.push(
|
|
1319
|
+
L.push(m.truncado(t.ocultos, t.regra));
|
|
1317
1320
|
}
|
|
1318
1321
|
const baixas = r.achados.filter((a) => a.confianca === 'baixa').length;
|
|
1319
1322
|
if (baixas > 0) {
|
|
1320
|
-
L.push(
|
|
1323
|
+
L.push(m.baixa(baixas, exports.DESCRICAO_DA_CONFIANCA.baixa));
|
|
1321
1324
|
}
|
|
1322
1325
|
L.push('');
|
|
1323
|
-
L.push(
|
|
1324
|
-
L.push(
|
|
1326
|
+
L.push(m.claims);
|
|
1327
|
+
L.push(m.registrar);
|
|
1325
1328
|
return L.join('\n');
|
|
1326
1329
|
}
|
|
1327
1330
|
/** O bloco que a rodada deixa no `FORMATO.md` para o auditor nao repetir o que ja foi achado. */
|
package/dist/thread-close.js
CHANGED
|
@@ -51,17 +51,17 @@ const fechamento_1 = require("./fechamento");
|
|
|
51
51
|
const locale_1 = require("./locale");
|
|
52
52
|
function validarArtefato(raiz, arquivo, sha256) {
|
|
53
53
|
if (!/^[a-f0-9]{64}$/.test(sha256))
|
|
54
|
-
throw new
|
|
54
|
+
throw new locale_1.ErroDoCatalogo((m) => m.thread.sha256Invalido);
|
|
55
55
|
const root = fs.realpathSync((0, estado_thread_1.raizDoEstado)(raiz));
|
|
56
56
|
const destino = fs.realpathSync(path.resolve(root, arquivo));
|
|
57
57
|
const relativo = path.relative(root, destino);
|
|
58
58
|
if (!relativo || relativo === '..' || relativo.startsWith(`..${path.sep}`) || path.isAbsolute(relativo)) {
|
|
59
|
-
throw new
|
|
59
|
+
throw new locale_1.ErroDoCatalogo((m) => m.thread.artefatoForaDoProjeto);
|
|
60
60
|
}
|
|
61
61
|
if (!fs.statSync(destino).isFile())
|
|
62
|
-
throw new
|
|
62
|
+
throw new locale_1.ErroDoCatalogo((m) => m.thread.artefatoNaoRegular);
|
|
63
63
|
if ((0, node_crypto_1.createHash)('sha256').update(fs.readFileSync(destino)).digest('hex') !== sha256) {
|
|
64
|
-
throw new
|
|
64
|
+
throw new locale_1.ErroDoCatalogo((m) => m.thread.artefatoDiverge);
|
|
65
65
|
}
|
|
66
66
|
return { tipo: 'artefato', arquivo: relativo, sha256 };
|
|
67
67
|
}
|
|
@@ -90,24 +90,24 @@ function exigirEntrega(raiz, id) {
|
|
|
90
90
|
function registrarArtefato(raiz, id, arquivo, sha256, por) {
|
|
91
91
|
const t = (0, thread_1.lerThread)(raiz, id);
|
|
92
92
|
if (t.status === 'fechada' || !por.trim())
|
|
93
|
-
throw new
|
|
93
|
+
throw new locale_1.ErroDoCatalogo((m) => m.thread.artefatoExige);
|
|
94
94
|
const prova = validarArtefato(raiz, arquivo, sha256);
|
|
95
95
|
(0, ledger_1.registrar)((0, thread_1.dirThread)(raiz, id), id, ledger_1.TIPOS_DE_EVENTO.artefatoEntregue, { arquivo, sha256, fase: 'SHIP', por: por.trim() });
|
|
96
96
|
return prova;
|
|
97
97
|
}
|
|
98
98
|
function fecharAdministrativamente(raiz, id, opcoes) {
|
|
99
99
|
if (!['orfa', 'engano', 'superada'].includes(opcoes.motivo))
|
|
100
|
-
throw new
|
|
100
|
+
throw new locale_1.ErroDoCatalogo((m) => m.thread.motivoDoFechamento);
|
|
101
101
|
if (!opcoes.por.trim() || opcoes.justificativa.trim().length < 3)
|
|
102
|
-
throw new
|
|
102
|
+
throw new locale_1.ErroDoCatalogo((m) => m.thread.fechamentoExige);
|
|
103
103
|
const t = (0, thread_1.lerThread)(raiz, id);
|
|
104
104
|
if (t.fechamentoAdmin) {
|
|
105
105
|
if (t.fechamentoAdmin.motivo !== opcoes.motivo)
|
|
106
|
-
throw new
|
|
106
|
+
throw new locale_1.ErroDoCatalogo((m) => m.thread.encerradaPorOutroMotivo);
|
|
107
107
|
return t;
|
|
108
108
|
}
|
|
109
109
|
if (provaDeEntrega(raiz, id) || t.score)
|
|
110
|
-
throw new
|
|
110
|
+
throw new locale_1.ErroDoCatalogo((m) => m.thread.entregueExigeMaster);
|
|
111
111
|
t.fechamentoAdmin = { motivo: opcoes.motivo, por: opcoes.por.trim(), justificativa: opcoes.justificativa.trim(), fechadoEm: (0, util_1.agora)() };
|
|
112
112
|
(0, ledger_1.registrar)((0, thread_1.dirThread)(raiz, id), id, ledger_1.TIPOS_DE_EVENTO.threadFechadaAdmin, t.fechamentoAdmin);
|
|
113
113
|
t.status = 'fechada';
|