@orkastery/cli 0.5.6 → 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 +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 +118 -4
- 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/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 +16 -8
- 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 +500 -0
- package/dist/check-modo.js +41 -0
- package/dist/check-paralelo.js +183 -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 +84 -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 +81 -74
- package/dist/doctor-forja.js +345 -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 +143 -43
- 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 +13 -10
- 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 +16 -0
- package/dist/hosts.js +104 -134
- package/dist/index.js +848 -548
- package/dist/indice-vetorial.js +14 -12
- package/dist/init.js +11 -2
- package/dist/integracoes-locais.js +2 -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 +220 -0
- package/dist/locale-adapter.js +291 -0
- package/dist/locale-ajuda.js +76 -4
- 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 +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 +145 -6
- package/dist/locale-security-scan.js +69 -0
- package/dist/locale-setup.js +192 -0
- package/dist/locale-ship.js +169 -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 +287 -11
- 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 +73 -8
- package/dist/mcp-noctum.js +101 -0
- package/dist/mcp-server.js +82 -14
- 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/modos-migracao.js +8 -6
- package/dist/modos.js +17 -18
- package/dist/network-roadmap.js +85 -49
- package/dist/noctum-aceite.js +789 -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 +482 -0
- package/dist/noctum-coordenacao.js +1225 -0
- package/dist/noctum-entrega.js +1169 -0
- package/dist/noctum-envelope.js +252 -16
- package/dist/noctum-execucao.js +95 -23
- package/dist/noctum-fechamento.js +405 -0
- package/dist/noctum-fila.js +43 -9
- 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 +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 +146 -124
- package/dist/phase.js +53 -27
- package/dist/policies.js +33 -0
- package/dist/postura-local.js +4 -3
- 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 +12 -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 +228 -73
- package/dist/roadmap-reservas.js +32 -32
- package/dist/runtime-ambiente.js +5 -0
- package/dist/runtime-context.js +117 -43
- package/dist/runtime-escada.js +423 -0
- package/dist/runtime-profiles.js +103 -46
- 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 +19 -2
- package/dist/session-watcher-claude.js +74 -19
- package/dist/session-watcher.js +156 -10
- package/dist/sessoes-contas.js +9 -0
- package/dist/sessoes-inventario.js +1 -1
- package/dist/sessoes.js +25 -23
- package/dist/setup.js +59 -58
- 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 +507 -0
- package/dist/verify.js +472 -29
- 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 +9 -4
- 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/index.js
CHANGED
|
@@ -40,8 +40,12 @@ exports.avisoRoadmapSemAssociacao = avisoRoadmapSemAssociacao;
|
|
|
40
40
|
exports.extrairOpcaoDeProjeto = extrairOpcaoDeProjeto;
|
|
41
41
|
exports.main = main;
|
|
42
42
|
const company_brain_cli_1 = require("./company-brain-cli");
|
|
43
|
+
const conhecimento_1 = require("./conhecimento");
|
|
44
|
+
const conhecimento_consulta_1 = require("./conhecimento-consulta");
|
|
43
45
|
const estado_thread_1 = require("./estado-thread");
|
|
44
46
|
const intelligence_graph_cli_1 = require("./intelligence-graph-cli");
|
|
47
|
+
const cli_1 = require("./security-scan/cli");
|
|
48
|
+
const check_modo_1 = require("./check-modo");
|
|
45
49
|
const mcp_grafo_1 = require("./mcp-grafo");
|
|
46
50
|
const maestro_cli_1 = require("./maestro-cli");
|
|
47
51
|
const hitl_public_receipt_1 = require("./hitl-public-receipt");
|
|
@@ -86,6 +90,7 @@ const board_1 = require("./board");
|
|
|
86
90
|
const hitl_1 = require("./hitl");
|
|
87
91
|
const pulse_1 = require("./pulse");
|
|
88
92
|
const pulse_resposta_1 = require("./pulse-resposta");
|
|
93
|
+
const pulse_consentimento_1 = require("./pulse-consentimento");
|
|
89
94
|
const pulse_cadencia_1 = require("./pulse-cadencia");
|
|
90
95
|
const decisao_autonoma_1 = require("./decisao-autonoma");
|
|
91
96
|
const hitl_contract_1 = require("./hitl-contract");
|
|
@@ -96,6 +101,7 @@ const claims_1 = require("./claims");
|
|
|
96
101
|
const claims_conferir_1 = require("./claims-conferir");
|
|
97
102
|
const catalogo_1 = require("./catalogo");
|
|
98
103
|
const doctor_1 = require("./doctor");
|
|
104
|
+
const doctor_forja_1 = require("./doctor-forja");
|
|
99
105
|
const preflight_1 = require("./preflight");
|
|
100
106
|
const evalrunner_1 = require("./evalrunner");
|
|
101
107
|
const gates_1 = require("./gates");
|
|
@@ -131,6 +137,9 @@ const ratelimit_1 = require("./ratelimit");
|
|
|
131
137
|
const retry_1 = require("./retry");
|
|
132
138
|
const prova_minima_1 = require("./prova-minima");
|
|
133
139
|
const versao_1 = require("./versao");
|
|
140
|
+
const noctum_cli_1 = require("./noctum-cli");
|
|
141
|
+
const noctum_envelope_1 = require("./noctum-envelope");
|
|
142
|
+
const noctum_modo_1 = require("./noctum-modo");
|
|
134
143
|
const modos_1 = require("./modos");
|
|
135
144
|
const modos_migracao_1 = require("./modos-migracao");
|
|
136
145
|
const setup_1 = require("./setup");
|
|
@@ -139,12 +148,17 @@ const claude_bg_1 = require("./adapters/claude-bg");
|
|
|
139
148
|
const codex_1 = require("./adapters/codex");
|
|
140
149
|
const conducao_1 = require("./conducao");
|
|
141
150
|
const conducao_sentinela_1 = require("./conducao-sentinela");
|
|
151
|
+
const autorizacao_duravel_1 = require("./autorizacao-duravel");
|
|
152
|
+
const atualizar_branch_1 = require("./atualizar-branch");
|
|
153
|
+
const conducao_batida_1 = require("./conducao-batida");
|
|
154
|
+
const pulse_delivery_1 = require("./pulse-delivery");
|
|
142
155
|
const phase_1 = require("./phase");
|
|
143
156
|
const prompts_1 = require("./prompts");
|
|
144
157
|
const sessoes_2 = require("./sessoes");
|
|
145
158
|
const util_1 = require("./util");
|
|
146
159
|
const ship_1 = require("./ship");
|
|
147
160
|
const ci_1 = require("./ci");
|
|
161
|
+
const dado_privado_1 = require("./dado-privado");
|
|
148
162
|
const thread_1 = require("./thread");
|
|
149
163
|
const docs_1 = require("./docs");
|
|
150
164
|
const roadmap_reservas_1 = require("./roadmap-reservas");
|
|
@@ -162,6 +176,7 @@ const rede_status_1 = require("./rede-status");
|
|
|
162
176
|
const ledger_1 = require("./ledger");
|
|
163
177
|
const tokens_1 = require("./tokens");
|
|
164
178
|
const types_1 = require("./types");
|
|
179
|
+
const dependencias_da_worktree_1 = require("./dependencias-da-worktree");
|
|
165
180
|
const verify_1 = require("./verify");
|
|
166
181
|
const fila_pesada_1 = require("./fila-pesada");
|
|
167
182
|
const worktree_1 = require("./worktree");
|
|
@@ -172,6 +187,7 @@ const entrega_pr_1 = require("./entrega-pr");
|
|
|
172
187
|
const ship_publicar_1 = require("./ship-publicar");
|
|
173
188
|
const projeto_alvo_1 = require("./projeto-alvo");
|
|
174
189
|
const worktree_local_1 = require("./worktree-local");
|
|
190
|
+
const mcp_transportes_1 = require("./mcp-transportes");
|
|
175
191
|
const postura_local_1 = require("./postura-local");
|
|
176
192
|
/** A versao publicada em `@orkastery/cli`, lida do package.json (`versao.ts`). */
|
|
177
193
|
// Antes de qualquer arquivo ou despacho: sem escrita de grupo nem de outros, que o sensor recusaria.
|
|
@@ -267,11 +283,13 @@ function comandoThread(args) {
|
|
|
267
283
|
if (args.posicionais[1] === 'close' || args.posicionais[1] === 'entrega') {
|
|
268
284
|
const raiz = (0, manifest_1.exigirManifesto)().raiz, id = args.posicionais[2];
|
|
269
285
|
if (!id)
|
|
270
|
-
throw new
|
|
286
|
+
throw new locale_1.ErroDoCatalogo((m) => m.thread.informeOId);
|
|
271
287
|
const por = texto(args.opcoes.por) ?? '';
|
|
272
|
-
|
|
288
|
+
// RM-061 (F3b, D3): o fechamento e a entrega gravam (ledger, thread.json, a soltura do que a thread segurava) no
|
|
289
|
+
// escopo pt-BR; a recusa vem do catalogo e a entrada do CLI a remonta no locale do comando. O resultado e JSON.
|
|
290
|
+
const r = (0, locale_1.comLocale)('pt-BR', () => args.posicionais[1] === 'close'
|
|
273
291
|
? (0, thread_close_1.fecharAdministrativamente)(raiz, id, { motivo: texto(args.opcoes.motivo) ?? '', por, justificativa: texto(args.opcoes.justificativa) ?? '' })
|
|
274
|
-
: (0, thread_close_1.registrarArtefato)(raiz, id, texto(args.opcoes.arquivo) ?? '', texto(args.opcoes.sha256) ?? '', por);
|
|
292
|
+
: (0, thread_close_1.registrarArtefato)(raiz, id, texto(args.opcoes.arquivo) ?? '', texto(args.opcoes.sha256) ?? '', por));
|
|
275
293
|
console.log(JSON.stringify(r, null, 2));
|
|
276
294
|
return 0;
|
|
277
295
|
}
|
|
@@ -282,8 +300,14 @@ function comandoThread(args) {
|
|
|
282
300
|
// O nome posicional passa a ser opcional, porque o titulo do achado ja serve de nome.
|
|
283
301
|
const doAchado = texto(args.opcoes['from-finding']) ?? texto(args.opcoes['do-achado']);
|
|
284
302
|
if (doAchado) {
|
|
303
|
+
const mf = (0, locale_1.msg)().thread.fromFinding;
|
|
285
304
|
const brutoModoAchado = texto(args.opcoes.modo) ?? texto(args.opcoes.mode);
|
|
286
305
|
let modoAchado;
|
|
306
|
+
// RM-058 N6 (D1): thread em modo #Noctum não existe; a recusa diz se falta o envelope ou se a lista do arco é fechada.
|
|
307
|
+
if (brutoModoAchado !== undefined && (0, noctum_modo_1.ehModoNoctum)(brutoModoAchado)) {
|
|
308
|
+
console.error((0, noctum_modo_1.recusaDoModoNaThread)(carregado.raiz).message);
|
|
309
|
+
return 2;
|
|
310
|
+
}
|
|
287
311
|
if (brutoModoAchado !== undefined) {
|
|
288
312
|
try {
|
|
289
313
|
modoAchado = (0, modos_1.exigirModoVivo)(brutoModoAchado);
|
|
@@ -313,11 +337,12 @@ function comandoThread(args) {
|
|
|
313
337
|
dryRun: args.opcoes['dry-run'] === true,
|
|
314
338
|
});
|
|
315
339
|
if (!r.ok) {
|
|
316
|
-
|
|
317
|
-
console.error(
|
|
318
|
-
console.error(`
|
|
319
|
-
console.error(
|
|
320
|
-
console.error(
|
|
340
|
+
const motivo = r.motivo ?? 'claims.failed';
|
|
341
|
+
console.error(mf.recusada(r.achado.id));
|
|
342
|
+
console.error(` ${mf.descricaoDoMotivo(motivo, auditoria_1.DESCRICAO_DO_MOTIVO_DE_AUDITORIA[motivo])}`);
|
|
343
|
+
console.error(mf.motivoTipado(r.motivo));
|
|
344
|
+
console.error(mf.detalhe(r.detalhe));
|
|
345
|
+
console.error(mf.correcao(r.correcao));
|
|
321
346
|
return 1;
|
|
322
347
|
}
|
|
323
348
|
const gravadaDoAchado = args.opcoes['dry-run'] !== true;
|
|
@@ -326,8 +351,8 @@ function comandoThread(args) {
|
|
|
326
351
|
if (avisoDoRegistroDoAchado)
|
|
327
352
|
console.error(avisoDoRegistroDoAchado);
|
|
328
353
|
console.log(gravadaDoAchado
|
|
329
|
-
?
|
|
330
|
-
:
|
|
354
|
+
? mf.criada(r.achado.id)
|
|
355
|
+
: mf.simulacao);
|
|
331
356
|
console.log((0, divida_1.textoDoAchado)(r.achado));
|
|
332
357
|
console.log('');
|
|
333
358
|
if (r.thread) {
|
|
@@ -357,14 +382,14 @@ function comandoThread(args) {
|
|
|
357
382
|
}));
|
|
358
383
|
}
|
|
359
384
|
if (gravadaDoAchado && r.thread) {
|
|
360
|
-
console.log(
|
|
385
|
+
console.log(mf.origemDoGoal(r.thread.id));
|
|
361
386
|
console.log('');
|
|
362
|
-
console.log(
|
|
387
|
+
console.log(mf.pedidoMontado);
|
|
363
388
|
console.log('');
|
|
364
389
|
console.log(r.pedido);
|
|
365
390
|
console.log('');
|
|
366
|
-
console.log(
|
|
367
|
-
console.log(
|
|
391
|
+
console.log(mf.proximoPasso);
|
|
392
|
+
console.log(mf.comandoDoProximoPasso(r.thread.id));
|
|
368
393
|
}
|
|
369
394
|
return 0;
|
|
370
395
|
}
|
|
@@ -378,6 +403,11 @@ function comandoThread(args) {
|
|
|
378
403
|
if (avisoRoadmap)
|
|
379
404
|
console.error(avisoRoadmap);
|
|
380
405
|
const brutoModo = texto(args.opcoes.modo) ?? texto(args.opcoes.mode);
|
|
406
|
+
// RM-058 N6 (D1): thread em modo #Noctum não existe; a recusa diz se falta o envelope ou se a lista do arco é fechada.
|
|
407
|
+
if (brutoModo !== undefined && (0, noctum_modo_1.ehModoNoctum)(brutoModo)) {
|
|
408
|
+
console.error((0, noctum_modo_1.recusaDoModoNaThread)(carregado.raiz).message);
|
|
409
|
+
return 2;
|
|
410
|
+
}
|
|
381
411
|
let modo;
|
|
382
412
|
try {
|
|
383
413
|
modo = brutoModo !== undefined
|
|
@@ -500,6 +530,7 @@ function comandoThread(args) {
|
|
|
500
530
|
const linhaDaWorktreeNova = (0, thread_1.linhaDaWorktree)(criada.worktreePor, gravada, variante);
|
|
501
531
|
if (linhaDaWorktreeNova)
|
|
502
532
|
console.log(linhaDaWorktreeNova);
|
|
533
|
+
relatarDependencias(criada.dependencias, thread.worktree ?? '');
|
|
503
534
|
const avisoDaWorktreeNova = criada.worktreeFalharia ? (0, thread_1.avisoDeWorktreeQueFalharia)(criada.worktreeFalharia)
|
|
504
535
|
: (0, thread_1.avisoDaWorktree)(pedido.origem, criada, carregado.manifesto);
|
|
505
536
|
const avisoSemBase = (0, thread_1.avisoDeThreadSemBase)(thread, gravada);
|
|
@@ -653,7 +684,12 @@ function comandoAccounts(args) {
|
|
|
653
684
|
avisarChavesDePerfis(carregado);
|
|
654
685
|
const raiz = carregado.raiz;
|
|
655
686
|
const sub = args.posicionais[1] ?? 'list';
|
|
656
|
-
|
|
687
|
+
// RM-061 (F3b, GO-FIX 1): a conferencia roda no escopo pt-BR (o detalhe vai ao store), e a impressao o traduz.
|
|
688
|
+
const conferir = (p) => (0, locale_1.comLocale)('pt-BR', () => p.runtime === 'claude-bg' ? (0, claude_bg_1.conferirAuth)(p) : (0, codex_1.conferirAuth)(p));
|
|
689
|
+
const detalhe = (auth) => ma.detalheDoLogin((0, locale_1.remontar)(auth.detalhe));
|
|
690
|
+
// RM-061 (F3b, D3): o texto pelo catalogo; o que se grava (store de perfis, registro de contas) roda no escopo pt-BR,
|
|
691
|
+
// e o id, o runtime, o diretorio, o motivo tipado e o detalhe que o CLI do runtime devolve saem como vieram.
|
|
692
|
+
const ma = (0, locale_1.msg)().accounts;
|
|
657
693
|
const imprimir = () => {
|
|
658
694
|
const store = (0, runtime_profiles_1.lerPerfis)(raiz);
|
|
659
695
|
if (args.opcoes.json === true) {
|
|
@@ -662,8 +698,7 @@ function comandoAccounts(args) {
|
|
|
662
698
|
}
|
|
663
699
|
// I-49: a tabela mostra o que o despacho enxerga, com o que outra fabrica viu na mesma conta.
|
|
664
700
|
const visto = (0, runtime_profiles_1.lerPerfisComContas)(raiz);
|
|
665
|
-
console.log(visto.perfis.length === 0 ?
|
|
666
|
-
: (0, util_1.tabela)(runtime_profiles_1.COLUNAS_DE_PERFIS, (0, runtime_profiles_1.linhasDePerfis)(visto)));
|
|
701
|
+
console.log(visto.perfis.length === 0 ? ma.semPerfis : (0, util_1.tabela)([...ma.colunas], (0, runtime_profiles_1.linhasDePerfis)(visto)));
|
|
667
702
|
// I-35: a tabela mostra horario do dono; o fuso sai uma vez, no fim da mensagem.
|
|
668
703
|
if ((0, runtime_profiles_1.perfisComHorario)(store))
|
|
669
704
|
console.log((0, horario_1.legendaDoFuso)());
|
|
@@ -675,7 +710,7 @@ function comandoAccounts(args) {
|
|
|
675
710
|
if (sub === 'add') {
|
|
676
711
|
const id = args.posicionais[2], runtime = texto(args.opcoes.runtime), dirBruto = texto(args.opcoes.dir);
|
|
677
712
|
if (!id || !runtime || !dirBruto) {
|
|
678
|
-
console.error(
|
|
713
|
+
console.error(ma.usoAdd);
|
|
679
714
|
return 2;
|
|
680
715
|
}
|
|
681
716
|
const dir = path.resolve(dirBruto);
|
|
@@ -684,12 +719,12 @@ function comandoAccounts(args) {
|
|
|
684
719
|
// A7: diretorio inacessivel ou de outro usuario e recusado antes de qualquer gravacao no store.
|
|
685
720
|
(0, runtime_profiles_1.prepararDiretorioDoPerfil)(dir);
|
|
686
721
|
const desativado = (0, runtime_profiles_1.lerPerfis)(raiz).perfis.some(p => p.id === id && p.estado === 'desativado');
|
|
687
|
-
perfil = (0, runtime_profiles_1.adicionarPerfil)(raiz, { id, runtime, dir });
|
|
722
|
+
perfil = (0, locale_1.comLocale)('pt-BR', () => (0, runtime_profiles_1.adicionarPerfil)(raiz, { id, runtime, dir }));
|
|
688
723
|
if (desativado)
|
|
689
|
-
console.log(
|
|
724
|
+
console.log(ma.reativado(id));
|
|
690
725
|
}
|
|
691
726
|
catch (e) {
|
|
692
|
-
console.error(
|
|
727
|
+
console.error(ma.recusado((0, locale_1.mensagemDoErro)(e)));
|
|
693
728
|
return 1;
|
|
694
729
|
}
|
|
695
730
|
const despacho = (0, runtime_profiles_1.perfilDeDespacho)(perfil);
|
|
@@ -702,59 +737,76 @@ function comandoAccounts(args) {
|
|
|
702
737
|
(0, node_child_process_1.spawnSync)(comando[0], comando.slice(1), { stdio: 'inherit', env });
|
|
703
738
|
}
|
|
704
739
|
else {
|
|
705
|
-
console.log(
|
|
740
|
+
console.log(ma.loginPendente(variavel, aspasDeShell(dir), comando.join(' '), id));
|
|
706
741
|
}
|
|
707
742
|
const auth = conferir(despacho);
|
|
708
743
|
// A14: conferencia inconclusiva nao marca sem-auth; o preflight do proximo despacho confere de novo.
|
|
709
744
|
if (!auth.ok && !auth.transitorio)
|
|
710
|
-
(0, runtime_profiles_1.marcarFalhaDePerfil)(raiz, id, auth.pago
|
|
745
|
+
(0, locale_1.comLocale)('pt-BR', () => (0, runtime_profiles_1.marcarFalhaDePerfil)(raiz, id, auth.pago
|
|
711
746
|
? { estado: 'provider-pago', esgotadoAte: null, motivo: 'cost.violation', detalhe: auth.detalhe }
|
|
712
|
-
: { estado: 'sem-auth', esgotadoAte: null, motivo: 'runtime.auth-missing', detalhe: auth.detalhe });
|
|
713
|
-
console.log(
|
|
714
|
-
: auth.transitorio ?
|
|
715
|
-
: auth.pago ?
|
|
747
|
+
: { estado: 'sem-auth', esgotadoAte: null, motivo: 'runtime.auth-missing', detalhe: auth.detalhe }));
|
|
748
|
+
console.log(ma.resultadoAdd(id, perfil.runtime, dir, auth.ok ? ma.conferido
|
|
749
|
+
: auth.transitorio ? ma.inconclusivaAdd(detalhe(auth))
|
|
750
|
+
: auth.pago ? ma.pagoAdd(detalhe(auth)) : ma.semLoginAdd(detalhe(auth))));
|
|
716
751
|
return 0;
|
|
717
752
|
}
|
|
718
753
|
if (sub === 'remove') {
|
|
719
754
|
const id = args.posicionais[2];
|
|
720
755
|
if (!id) {
|
|
721
|
-
console.error(
|
|
756
|
+
console.error(ma.usoRemove);
|
|
722
757
|
return 2;
|
|
723
758
|
}
|
|
724
759
|
try {
|
|
725
|
-
(0, runtime_profiles_1.desativarPerfil)(raiz, id);
|
|
760
|
+
(0, locale_1.comLocale)('pt-BR', () => (0, runtime_profiles_1.desativarPerfil)(raiz, id));
|
|
726
761
|
}
|
|
727
762
|
catch (e) {
|
|
728
|
-
console.error(
|
|
763
|
+
console.error((0, locale_1.mensagemDoErro)(e));
|
|
729
764
|
return 1;
|
|
730
765
|
}
|
|
731
|
-
console.log(
|
|
766
|
+
console.log(ma.desativado(id));
|
|
732
767
|
return 0;
|
|
733
768
|
}
|
|
734
769
|
if (sub === 'check') {
|
|
735
770
|
const alvo = args.posicionais[2];
|
|
771
|
+
const expirados = new Set((0, locale_1.comLocale)('pt-BR', () => (0, runtime_profiles_1.expirarPerfisVencidos)(raiz)).map(p => p.id));
|
|
736
772
|
const perfis = (0, runtime_profiles_1.lerPerfis)(raiz).perfis.filter(p => p.estado !== 'desativado' && (alvo === undefined || p.id === alvo));
|
|
737
773
|
if (alvo !== undefined && perfis.length === 0) {
|
|
738
|
-
console.error(
|
|
774
|
+
console.error(ma.perfilAtivoNaoExiste(alvo));
|
|
739
775
|
return 1;
|
|
740
776
|
}
|
|
777
|
+
const inventario = (0, sessoes_inventario_1.inventariarSessoes)(raiz, { global: true });
|
|
741
778
|
let falhas = 0;
|
|
742
779
|
for (const p of perfis) {
|
|
743
780
|
const auth = conferir((0, runtime_profiles_1.perfilDeDespacho)(p));
|
|
744
|
-
|
|
745
|
-
(
|
|
781
|
+
(0, locale_1.comLocale)('pt-BR', () => {
|
|
782
|
+
if (auth.ok && (p.estado === 'sem-auth' || p.estado === 'provider-pago'))
|
|
783
|
+
(0, runtime_profiles_1.reativarPerfil)(raiz, p.id);
|
|
784
|
+
if (!auth.ok && auth.transitorio)
|
|
785
|
+
(0, runtime_profiles_1.registrarConferenciaInconclusiva)(raiz, p.id, auth.detalhe);
|
|
786
|
+
else if (!auth.ok) {
|
|
787
|
+
(0, runtime_profiles_1.marcarFalhaDePerfil)(raiz, p.id, auth.pago
|
|
788
|
+
? { estado: 'provider-pago', esgotadoAte: null, motivo: 'cost.violation', detalhe: auth.detalhe }
|
|
789
|
+
: { estado: 'sem-auth', esgotadoAte: null, motivo: 'runtime.auth-missing', detalhe: auth.detalhe });
|
|
790
|
+
}
|
|
791
|
+
});
|
|
746
792
|
if (!auth.ok)
|
|
747
793
|
falhas++;
|
|
748
|
-
|
|
749
|
-
|
|
750
|
-
|
|
751
|
-
|
|
752
|
-
|
|
753
|
-
|
|
754
|
-
|
|
755
|
-
|
|
756
|
-
|
|
757
|
-
|
|
794
|
+
const atual = (0, runtime_profiles_1.lerPerfis)(raiz).perfis.find(x => x.id === p.id) ?? p;
|
|
795
|
+
const sessoes = inventario.sessoes.filter(s => s.viva && s.runtime === p.runtime && s.perfil === p.id);
|
|
796
|
+
const cargas = [...new Set(sessoes.flatMap(s => s.vinculos.length
|
|
797
|
+
? s.vinculos.map(v => `${v.thread}:${v.fase}`) : [ma.sessaoSemVinculo(s.sessionId.slice(0, 8))]))];
|
|
798
|
+
const carga = !inventario.ok ? ma.cargaInconclusiva : cargas.length ? ma.cargaDaConta(cargas.join(', ')) : ma.cargaVazia;
|
|
799
|
+
const volta = atual.esgotadoAte ?? auth.cota?.resetEm ?? null;
|
|
800
|
+
const operacional = [
|
|
801
|
+
ma.limiteDaConta(ma.tipoDeLimite((0, runtime_profiles_1.tipoDeLimiteDoPerfil)(atual))),
|
|
802
|
+
ma.cotaDaConta(auth.cota ? ma.cotaMedida(auth.cota.usada, auth.cota.limite, auth.cota.unidade) : ma.cotaIndisponivel),
|
|
803
|
+
carga,
|
|
804
|
+
volta ? ma.voltaEm((0, horario_1.formatarDataHoraRotulada)(volta)) : ma.voltaSemMedida,
|
|
805
|
+
...(expirados.has(p.id) ? [ma.marcaExpirada] : []),
|
|
806
|
+
].join('; ');
|
|
807
|
+
console.log(`${ma.resultadoCheck(p.id, p.runtime, auth.ok ? ma.conferido
|
|
808
|
+
: auth.transitorio ? ma.inconclusivaCheck(detalhe(auth))
|
|
809
|
+
: auth.pago ? ma.pagoCheck(detalhe(auth)) : ma.semLoginCheck(detalhe(auth)))}; ${operacional}`);
|
|
758
810
|
}
|
|
759
811
|
console.log('');
|
|
760
812
|
imprimir();
|
|
@@ -767,13 +819,13 @@ function comandoAccounts(args) {
|
|
|
767
819
|
relatorio = (0, esgotamentos_1.relatorioDeEsgotamentos)({ desde: texto(args.opcoes.desde) ?? '7d' });
|
|
768
820
|
}
|
|
769
821
|
catch (e) {
|
|
770
|
-
console.error(
|
|
822
|
+
console.error(ma.periodoInvalido(e.message));
|
|
771
823
|
return 2;
|
|
772
824
|
}
|
|
773
825
|
console.log(args.opcoes.json === true ? JSON.stringify(relatorio, null, 2) : (0, esgotamentos_1.textoDosEsgotamentos)(relatorio));
|
|
774
826
|
return 0;
|
|
775
827
|
}
|
|
776
|
-
console.error(
|
|
828
|
+
console.error(ma.desconhecido(sub));
|
|
777
829
|
return 2;
|
|
778
830
|
}
|
|
779
831
|
function comandoSetup(args) {
|
|
@@ -781,6 +833,7 @@ function comandoSetup(args) {
|
|
|
781
833
|
const raiz = carregado.raiz;
|
|
782
834
|
const modoBruto = args.posicionais[1];
|
|
783
835
|
const por = texto(args.opcoes.por) ?? 'owner';
|
|
836
|
+
const ms = (0, locale_1.msg)().setup.cli;
|
|
784
837
|
if (modoBruto === 'versionar') {
|
|
785
838
|
// I-52 (RM-047): o setup que vale agora vai para orkastery.setup.json, para entrar por PR.
|
|
786
839
|
const r = (0, setup_1.versionarSetup)(raiz, por);
|
|
@@ -788,8 +841,8 @@ function comandoSetup(args) {
|
|
|
788
841
|
console.log(JSON.stringify({ caminho: r.caminho, setup: r.setup }, null, 2));
|
|
789
842
|
return 0;
|
|
790
843
|
}
|
|
791
|
-
console.log(
|
|
792
|
-
console.log(
|
|
844
|
+
console.log(ms.versionado(r.caminho));
|
|
845
|
+
console.log(ms.levePorPr);
|
|
793
846
|
return 0;
|
|
794
847
|
}
|
|
795
848
|
if (modoBruto === 'worktree') {
|
|
@@ -802,8 +855,8 @@ function comandoSetup(args) {
|
|
|
802
855
|
console.log(JSON.stringify(local, null, 2));
|
|
803
856
|
return 0;
|
|
804
857
|
}
|
|
805
|
-
console.log(
|
|
806
|
-
console.log(
|
|
858
|
+
console.log(ms.worktreeConfirmada(local.dir, local.raiz));
|
|
859
|
+
console.log(ms.worktreeGravada(worktree_local_1.ARQUIVO_WORKTREE_LOCAL));
|
|
807
860
|
return 0;
|
|
808
861
|
}
|
|
809
862
|
if (acao === 'revogar') {
|
|
@@ -812,11 +865,11 @@ function comandoSetup(args) {
|
|
|
812
865
|
console.log(JSON.stringify({ revogada: havia }, null, 2));
|
|
813
866
|
return 0;
|
|
814
867
|
}
|
|
815
|
-
console.log(havia ?
|
|
868
|
+
console.log(havia ? ms.worktreeRevogada : ms.worktreeNaoHavia);
|
|
816
869
|
return 0;
|
|
817
870
|
}
|
|
818
871
|
if (acao !== undefined) {
|
|
819
|
-
console.error(
|
|
872
|
+
console.error(ms.worktreeSubcomando(acao));
|
|
820
873
|
return 2;
|
|
821
874
|
}
|
|
822
875
|
const pedida = (0, worktree_local_1.pastaDasWorktreesPedida)(raiz, carregado.manifesto);
|
|
@@ -827,9 +880,9 @@ function comandoSetup(args) {
|
|
|
827
880
|
confirmadaNestaMaquina: local.local?.dir ?? null, criacao: recusa === null ? 'permitida' : 'recusada' }, null, 2));
|
|
828
881
|
return 0;
|
|
829
882
|
}
|
|
830
|
-
console.log(
|
|
831
|
-
console.log(
|
|
832
|
-
console.log(recusa === null ?
|
|
883
|
+
console.log(ms.worktreeManifesto(carregado.manifesto.worktree.dir, pedida.dir, pedida.dentro));
|
|
884
|
+
console.log(ms.confirmacaoLocal(local.local ? local.local.dir : ms.nenhumaConfirmacao(String(local.motivo))));
|
|
885
|
+
console.log(recusa === null ? ms.criacaoPermitida : ms.criacaoRecusada(worktree_local_1.COMANDO_CONFIRMAR_WORKTREE));
|
|
833
886
|
return 0;
|
|
834
887
|
}
|
|
835
888
|
if (modoBruto === 'sandbox') {
|
|
@@ -839,7 +892,7 @@ function comandoSetup(args) {
|
|
|
839
892
|
if (acao === 'confirmar') {
|
|
840
893
|
const postura = args.posicionais[3];
|
|
841
894
|
if (!postura) {
|
|
842
|
-
console.error(
|
|
895
|
+
console.error(ms.sandboxUso);
|
|
843
896
|
return 2;
|
|
844
897
|
}
|
|
845
898
|
const p = (0, postura_local_1.confirmarPosturaLocal)(raiz, postura, por);
|
|
@@ -847,8 +900,8 @@ function comandoSetup(args) {
|
|
|
847
900
|
console.log(JSON.stringify(p, null, 2));
|
|
848
901
|
return 0;
|
|
849
902
|
}
|
|
850
|
-
console.log(
|
|
851
|
-
console.log(
|
|
903
|
+
console.log(ms.sandboxConfirmada(p.sandbox, p.raiz));
|
|
904
|
+
console.log(ms.sandboxGravada((0, postura_local_1.caminhoDaPosturaLocal)(raiz)));
|
|
852
905
|
return 0;
|
|
853
906
|
}
|
|
854
907
|
if (acao === 'revogar') {
|
|
@@ -857,11 +910,11 @@ function comandoSetup(args) {
|
|
|
857
910
|
console.log(JSON.stringify({ revogada: havia }, null, 2));
|
|
858
911
|
return 0;
|
|
859
912
|
}
|
|
860
|
-
console.log(havia ?
|
|
913
|
+
console.log(havia ? ms.sandboxRevogada : ms.sandboxNaoHavia);
|
|
861
914
|
return 0;
|
|
862
915
|
}
|
|
863
916
|
if (acao !== undefined) {
|
|
864
|
-
console.error(
|
|
917
|
+
console.error(ms.sandboxSubcomando(acao));
|
|
865
918
|
return 2;
|
|
866
919
|
}
|
|
867
920
|
const pedida = carregado.manifesto.runtime.sandbox;
|
|
@@ -872,9 +925,9 @@ function comandoSetup(args) {
|
|
|
872
925
|
confirmadaNestaMaquina: local.postura?.sandbox ?? null, despachoCodex: recusa === null ? 'permitido' : 'recusado' }, null, 2));
|
|
873
926
|
return 0;
|
|
874
927
|
}
|
|
875
|
-
console.log(
|
|
876
|
-
console.log(
|
|
877
|
-
console.log(recusa === null ?
|
|
928
|
+
console.log(ms.sandboxManifesto(pedida));
|
|
929
|
+
console.log(ms.confirmacaoLocal(local.postura ? local.postura.sandbox : ms.nenhumaConfirmacao(String(local.motivo))));
|
|
930
|
+
console.log(recusa === null ? ms.despachoPermitido : ms.despachoRecusado((0, postura_local_1.comandoDeConfirmacao)(pedida)));
|
|
878
931
|
return 0;
|
|
879
932
|
}
|
|
880
933
|
if (!modoBruto) {
|
|
@@ -884,7 +937,7 @@ function comandoSetup(args) {
|
|
|
884
937
|
console.log(JSON.stringify((0, setup_1.lerSetup)(raiz), null, 2));
|
|
885
938
|
return 0;
|
|
886
939
|
}
|
|
887
|
-
console.log(
|
|
940
|
+
console.log(ms.resetado);
|
|
888
941
|
console.log((0, setup_1.textoDaEntrevista)(raiz));
|
|
889
942
|
return 0;
|
|
890
943
|
}
|
|
@@ -893,7 +946,7 @@ function comandoSetup(args) {
|
|
|
893
946
|
}
|
|
894
947
|
const modo = (0, modos_1.parseModo)(modoBruto);
|
|
895
948
|
if (!modo) {
|
|
896
|
-
console.error(
|
|
949
|
+
console.error(ms.modoDesconhecido(modoBruto, modos_1.ORDEM_DOS_MODOS.join(', ')));
|
|
897
950
|
return 2;
|
|
898
951
|
}
|
|
899
952
|
if (args.opcoes.reset === true) {
|
|
@@ -902,7 +955,7 @@ function comandoSetup(args) {
|
|
|
902
955
|
console.log(JSON.stringify((0, setup_1.lerSetup)(raiz).modos[modo], null, 2));
|
|
903
956
|
return 0;
|
|
904
957
|
}
|
|
905
|
-
console.log(
|
|
958
|
+
console.log(ms.modoResetado(modos_1.MODOS[modo].tag));
|
|
906
959
|
console.log('');
|
|
907
960
|
console.log((0, setup_1.textoDoSetup)(raiz, modo));
|
|
908
961
|
return 0;
|
|
@@ -915,26 +968,25 @@ function comandoSetup(args) {
|
|
|
915
968
|
const fallbackBruto = args.opcoes.fallback === true ? '' : texto(args.opcoes.fallback);
|
|
916
969
|
const fallback = fallbackBruto === undefined ? undefined : fallbackBruto.split(',').map(s => s.trim()).filter(s => s !== '');
|
|
917
970
|
if (bloco === undefined && (runtime !== undefined || model !== undefined || effort !== undefined || fallback !== undefined)) {
|
|
918
|
-
console.error(
|
|
971
|
+
console.error(ms.informeBloco);
|
|
919
972
|
return 2;
|
|
920
973
|
}
|
|
921
974
|
if (bloco !== undefined) {
|
|
922
975
|
if (runtime === undefined && model === undefined && effort === undefined && fallback === undefined) {
|
|
923
|
-
console.error(
|
|
976
|
+
console.error(ms.nadaParaEditar);
|
|
924
977
|
return 2;
|
|
925
978
|
}
|
|
926
979
|
const r = (0, setup_1.editarBloco)(raiz, modo, Number(bloco), { runtime, model, effort, ...(fallback !== undefined ? { fallback } : {}) }, por);
|
|
927
980
|
if (!r.ok) {
|
|
928
|
-
console.error(
|
|
981
|
+
console.error(ms.edicaoRecusada(r.erro ?? ''));
|
|
929
982
|
return 1;
|
|
930
983
|
}
|
|
931
984
|
if (args.opcoes.json === true) {
|
|
932
985
|
console.log(JSON.stringify(r.setup.modos[modo], null, 2));
|
|
933
986
|
return 0;
|
|
934
987
|
}
|
|
935
|
-
console.log(
|
|
936
|
-
|
|
937
|
-
console.log(` gravado em ${r.caminho}; evento setup_configured no ledger do projeto`);
|
|
988
|
+
console.log(ms.blocoAlterado(r.bloco, modos_1.MODOS[modo].tag, `${r.de?.runtime}/${r.de?.model}/${r.de?.effort}`, `${r.para?.runtime}/${r.para?.model}/${r.para?.effort}`));
|
|
989
|
+
console.log(ms.gravado(r.caminho));
|
|
938
990
|
console.log('');
|
|
939
991
|
console.log((0, setup_1.textoDoSetup)(raiz, modo));
|
|
940
992
|
return 0;
|
|
@@ -1073,10 +1125,11 @@ function comandoPhase(args) {
|
|
|
1073
1125
|
function comandoLedger(args) {
|
|
1074
1126
|
const carregado = (0, manifest_1.exigirManifesto)();
|
|
1075
1127
|
const sub = args.posicionais[1];
|
|
1128
|
+
const m = (0, locale_1.msg)().operacao.ledger;
|
|
1076
1129
|
if (sub === 'stats') {
|
|
1077
1130
|
const desde = texto(args.opcoes.desde);
|
|
1078
1131
|
if (!desde)
|
|
1079
|
-
throw Error(
|
|
1132
|
+
throw Error(m.usoStats);
|
|
1080
1133
|
const r = (0, ledger_stats_1.coletarEstatisticas)(carregado.raiz, { desde, ate: texto(args.opcoes.ate), thread: texto(args.opcoes.thread), modo: texto(args.opcoes.modo), runtime: texto(args.opcoes.runtime) });
|
|
1081
1134
|
console.log(args.opcoes.json === true ? JSON.stringify(r, null, 2) : (0, ledger_stats_1.textoDasEstatisticas)(r));
|
|
1082
1135
|
return 0;
|
|
@@ -1085,12 +1138,12 @@ function comandoLedger(args) {
|
|
|
1085
1138
|
const thread = args.posicionais[2], semIa = Number(texto(args.opcoes['sem-ia'])), iaSemOrk = Number(texto(args.opcoes['ia-sem-ork']));
|
|
1086
1139
|
const por = texto(args.opcoes.por), metodo = texto(args.opcoes.metodo), premissas = texto(args.opcoes.premissas);
|
|
1087
1140
|
if (!thread || !por || !metodo || !premissas)
|
|
1088
|
-
throw Error(
|
|
1141
|
+
throw Error(m.usoEstimate);
|
|
1089
1142
|
const e = (0, ledger_stats_1.registrarEstimativaPlano)(carregado.raiz, thread, { semIaHoras: semIa, iaSemOrkHoras: iaSemOrk, por, metodo, premissas, incerteza: texto(args.opcoes.incerteza) });
|
|
1090
|
-
console.log(args.opcoes.json === true ? JSON.stringify(e, null, 2) :
|
|
1143
|
+
console.log(args.opcoes.json === true ? JSON.stringify(e, null, 2) : m.estimativa(thread, semIa, iaSemOrk));
|
|
1091
1144
|
return 0;
|
|
1092
1145
|
}
|
|
1093
|
-
throw Error(
|
|
1146
|
+
throw Error(m.uso);
|
|
1094
1147
|
}
|
|
1095
1148
|
/**
|
|
1096
1149
|
* `ork sessions hitl`: quem, entre as sessoes do runtime, espera o humano AGORA.
|
|
@@ -1104,10 +1157,11 @@ function comandoLedger(args) {
|
|
|
1104
1157
|
* como falha acionavel, sem precisar interpretar texto.
|
|
1105
1158
|
*/
|
|
1106
1159
|
function comandoSessionsHitl(args, raiz) {
|
|
1160
|
+
const ms = (0, locale_1.msg)().operacao.restante.sessions;
|
|
1107
1161
|
const bruto = texto(args.opcoes.atencao);
|
|
1108
1162
|
const atencaoMin = bruto === undefined ? undefined : Number(bruto);
|
|
1109
1163
|
if (atencaoMin !== undefined && (!Number.isFinite(atencaoMin) || atencaoMin < 0)) {
|
|
1110
|
-
console.error(
|
|
1164
|
+
console.error(ms.atencao(bruto ?? ''));
|
|
1111
1165
|
return 2;
|
|
1112
1166
|
}
|
|
1113
1167
|
const radar = (0, hitl_1.varrerSessoes)({
|
|
@@ -1129,26 +1183,27 @@ function comandoSessionsHitl(args, raiz) {
|
|
|
1129
1183
|
return 0;
|
|
1130
1184
|
}
|
|
1131
1185
|
function comandoSessions(args) {
|
|
1186
|
+
const ms = (0, locale_1.msg)().operacao.restante.sessions;
|
|
1132
1187
|
const sub = args.posicionais[1];
|
|
1133
1188
|
const carregado = (0, manifest_1.carregarManifesto)();
|
|
1134
1189
|
const raiz = carregado?.raiz ?? (0, manifest_1.diretorioDoProjeto)();
|
|
1135
1190
|
if (sub === 'watch') {
|
|
1136
1191
|
const id = texto(args.opcoes.thread);
|
|
1137
1192
|
if (!carregado || !id) {
|
|
1138
|
-
console.error(
|
|
1193
|
+
console.error(ms.usoWatch);
|
|
1139
1194
|
return 2;
|
|
1140
1195
|
}
|
|
1141
1196
|
const thread = (0, thread_1.lerThread)(raiz, id);
|
|
1142
1197
|
const sessionId = texto(args.opcoes.sessao) ?? thread.sessoes.at(-1)?.sessionId;
|
|
1143
1198
|
if (!sessionId || !thread.sessoes.some(s => s.sessionId === sessionId))
|
|
1144
|
-
throw new Error(
|
|
1199
|
+
throw new Error(ms.sessaoDaThread);
|
|
1145
1200
|
console.log(JSON.stringify(args.opcoes.once === true ? (0, session_watcher_1.observarSessao)(carregado, sessionId) : { pid: (0, session_watcher_1.iniciarWatcher)(raiz, sessionId) }));
|
|
1146
1201
|
return 0;
|
|
1147
1202
|
}
|
|
1148
1203
|
if (sub === 'event') {
|
|
1149
1204
|
const tipo = texto(args.opcoes.tipo), sessao = texto(args.opcoes.sessao);
|
|
1150
1205
|
if (!carregado || !tipo || !sessao) {
|
|
1151
|
-
console.error(
|
|
1206
|
+
console.error(ms.usoEvent);
|
|
1152
1207
|
return 2;
|
|
1153
1208
|
}
|
|
1154
1209
|
try {
|
|
@@ -1156,7 +1211,7 @@ function comandoSessions(args) {
|
|
|
1156
1211
|
return 0;
|
|
1157
1212
|
}
|
|
1158
1213
|
catch (e) {
|
|
1159
|
-
console.error(
|
|
1214
|
+
console.error(ms.eventoRecusado(e.message));
|
|
1160
1215
|
return 1;
|
|
1161
1216
|
}
|
|
1162
1217
|
}
|
|
@@ -1167,7 +1222,7 @@ function comandoSessions(args) {
|
|
|
1167
1222
|
}
|
|
1168
1223
|
if (sub === 'limpar-fantasmas') {
|
|
1169
1224
|
if (!carregado) {
|
|
1170
|
-
console.error(
|
|
1225
|
+
console.error(ms.exigeProjeto);
|
|
1171
1226
|
return 2;
|
|
1172
1227
|
}
|
|
1173
1228
|
const r = (0, sessoes_2.limparFantasmas)(raiz, { dryRun: args.opcoes['dry-run'] === true });
|
|
@@ -1181,14 +1236,14 @@ function comandoSessions(args) {
|
|
|
1181
1236
|
const id = args.posicionais[2], sessionId = args.posicionais[3];
|
|
1182
1237
|
const fase = texto(args.opcoes.fase), runtime = texto(args.opcoes.runtime), pergunta = texto(args.opcoes.pergunta);
|
|
1183
1238
|
if (!id || !sessionId || !fase || !types_1.FASES.includes(fase) || !runtime)
|
|
1184
|
-
throw new Error(
|
|
1239
|
+
throw new Error(ms.request);
|
|
1185
1240
|
console.log(JSON.stringify((0, hitl_sessions_1.abrirPedidoSessao)(raiz, id, sessionId, { fase: fase, runtime, pergunta, prazo: texto(args.opcoes.prazo) })));
|
|
1186
1241
|
return 0;
|
|
1187
1242
|
}
|
|
1188
1243
|
if (sub === 'answer') {
|
|
1189
1244
|
const id = args.posicionais[2], pedido = args.posicionais[3];
|
|
1190
1245
|
if (!id || !pedido || args.opcoes.stdin !== true)
|
|
1191
|
-
throw new Error(
|
|
1246
|
+
throw new Error(ms.answer);
|
|
1192
1247
|
const r = (0, hitl_gates_1.lerRespostaStdin)({ origem: texto(args.opcoes.origem), por: texto(args.opcoes.por),
|
|
1193
1248
|
mensagem: texto(args.opcoes.mensagem), canal: texto(args.opcoes.canal), conta: texto(args.opcoes.conta) });
|
|
1194
1249
|
console.log(JSON.stringify((0, hitl_sessions_1.responderSessao)(raiz, id, pedido, r)));
|
|
@@ -1199,7 +1254,7 @@ function comandoSessions(args) {
|
|
|
1199
1254
|
// pergunta ao receptor, pelo recibo correlacionado, se ele recebeu aquele envioId.
|
|
1200
1255
|
const id = args.posicionais[2], pedido = args.posicionais[3];
|
|
1201
1256
|
if (!id || !pedido)
|
|
1202
|
-
throw new Error(
|
|
1257
|
+
throw new Error(ms.reconcile);
|
|
1203
1258
|
const r = (0, hitl_sessions_1.reconciliarEnvioDeSessao)(raiz, id, pedido);
|
|
1204
1259
|
console.log(JSON.stringify(r));
|
|
1205
1260
|
return r.estado === 'entregue' ? 0 : 1;
|
|
@@ -1208,13 +1263,13 @@ function comandoSessions(args) {
|
|
|
1208
1263
|
const id = args.posicionais[2], sessionId = args.posicionais[3];
|
|
1209
1264
|
const fase = texto(args.opcoes.fase), runtime = texto(args.opcoes.runtime);
|
|
1210
1265
|
if (!id || !sessionId || !fase || !types_1.FASES.includes(fase) || !runtime)
|
|
1211
|
-
throw new Error(
|
|
1266
|
+
throw new Error(ms.supersede);
|
|
1212
1267
|
console.log(JSON.stringify((0, hitl_sessions_1.superarSessao)(raiz, id, sessionId, fase, runtime)));
|
|
1213
1268
|
return 0;
|
|
1214
1269
|
}
|
|
1215
1270
|
const chave = args.posicionais[2];
|
|
1216
1271
|
if (!chave) {
|
|
1217
|
-
console.error(
|
|
1272
|
+
console.error(ms.usoSub(sub));
|
|
1218
1273
|
return 2;
|
|
1219
1274
|
}
|
|
1220
1275
|
if (sub === 'adopt') {
|
|
@@ -1239,7 +1294,7 @@ function comandoSessions(args) {
|
|
|
1239
1294
|
console.log(r.texto);
|
|
1240
1295
|
return r.codigo;
|
|
1241
1296
|
}
|
|
1242
|
-
console.error(
|
|
1297
|
+
console.error(ms.desconhecido(sub));
|
|
1243
1298
|
return 2;
|
|
1244
1299
|
}
|
|
1245
1300
|
/**
|
|
@@ -1254,15 +1309,15 @@ function comandoDecisao(args) {
|
|
|
1254
1309
|
const campo = (nome) => {
|
|
1255
1310
|
const v = texto(args.opcoes[nome]);
|
|
1256
1311
|
if (!v)
|
|
1257
|
-
throw new
|
|
1312
|
+
throw new locale_1.ErroDoCatalogo((m) => m.decisao.exigeFlag(nome));
|
|
1258
1313
|
return v;
|
|
1259
1314
|
};
|
|
1260
1315
|
if (!id)
|
|
1261
|
-
throw new
|
|
1316
|
+
throw new locale_1.ErroDoCatalogo((m) => m.decisao.usoRegistrar);
|
|
1262
1317
|
const bruto = campo('criterio'), separador = bruto.indexOf(':');
|
|
1263
1318
|
const tipo = bruto.slice(0, separador), referencia = bruto.slice(separador + 1);
|
|
1264
1319
|
if (separador < 1 || !['manifesto', 'ledger', 'medicao'].includes(tipo) || !referencia.trim()) {
|
|
1265
|
-
throw new
|
|
1320
|
+
throw new locale_1.ErroDoCatalogo((m) => m.decisao.criterioUso);
|
|
1266
1321
|
}
|
|
1267
1322
|
const entrada = {
|
|
1268
1323
|
decidido: campo('decidido'), porque: campo('porque'), comoMudar: campo('como-mudar'),
|
|
@@ -1284,8 +1339,10 @@ function comandoDecisao(args) {
|
|
|
1284
1339
|
return 0;
|
|
1285
1340
|
}
|
|
1286
1341
|
if (sub === 'placar') {
|
|
1342
|
+
// RM-061 (F3b): o placar pelo catalogo; o `--json` e a fase de cada linha sao dado e nao mudam.
|
|
1343
|
+
const md = (0, locale_1.msg)().decisao;
|
|
1287
1344
|
if (!id)
|
|
1288
|
-
throw new
|
|
1345
|
+
throw new locale_1.ErroDoCatalogo((m) => m.decisao.usoPlacar);
|
|
1289
1346
|
(0, thread_1.lerThread)(carregado.raiz, id);
|
|
1290
1347
|
const placar = (0, decisao_autonoma_1.placarDaThread)((0, ledger_1.lerLedger)((0, thread_1.dirThread)(carregado.raiz, id)));
|
|
1291
1348
|
const taxa = (0, decisao_autonoma_1.taxaDeReversao)(placar);
|
|
@@ -1293,12 +1350,12 @@ function comandoDecisao(args) {
|
|
|
1293
1350
|
console.log(JSON.stringify({ thread: id, limiar: decisao_autonoma_1.LIMIAR_DE_DECISOES_POR_FASE, taxaDeReversao: taxa, fases: placar }, null, 2));
|
|
1294
1351
|
return 0;
|
|
1295
1352
|
}
|
|
1296
|
-
console.log((0, util_1.tabela)([
|
|
1297
|
-
String(f.semRastro), f.acimaDoLimiar ?
|
|
1298
|
-
console.log(
|
|
1353
|
+
console.log((0, util_1.tabela)([...md.colunasDoPlacar], placar.map(f => [f.fase, String(f.decididas), String(f.informadas), String(f.perguntas), String(f.revertidas),
|
|
1354
|
+
String(f.semRastro), f.acimaDoLimiar ? md.acimaDoLimiar(decisao_autonoma_1.LIMIAR_DE_DECISOES_POR_FASE) : md.dentroDoLimiar])));
|
|
1355
|
+
console.log(md.taxaDeReversao(taxa));
|
|
1299
1356
|
return 0;
|
|
1300
1357
|
}
|
|
1301
|
-
throw new
|
|
1358
|
+
throw new locale_1.ErroDoCatalogo((m) => m.decisao.uso);
|
|
1302
1359
|
}
|
|
1303
1360
|
/**
|
|
1304
1361
|
* I-50 (RM-039): a tag que o dono manda no Telegram, pelo terminal. Sem tag, mostra a cadencia em
|
|
@@ -1306,14 +1363,15 @@ function comandoDecisao(args) {
|
|
|
1306
1363
|
*/
|
|
1307
1364
|
function comandoCadenciaDoPulse(args) {
|
|
1308
1365
|
const carregado = (0, manifest_1.exigirManifesto)();
|
|
1366
|
+
const m = (0, locale_1.msg)().operacao.pulseCadencia;
|
|
1309
1367
|
if (args.posicionais.length > 3)
|
|
1310
|
-
throw new Error(
|
|
1368
|
+
throw new Error(m.umaTag);
|
|
1311
1369
|
const bruta = args.posicionais[2];
|
|
1312
1370
|
const agora = new Date().toISOString();
|
|
1313
1371
|
if (bruta !== undefined) {
|
|
1314
1372
|
const lido = (0, pulse_resposta_1.interpretarRespostaDoPulse)(bruta.trim().startsWith('#') ? bruta : `#${bruta.trim()}`);
|
|
1315
1373
|
if (lido.forma !== 'cadencia') {
|
|
1316
|
-
throw new Error(
|
|
1374
|
+
throw new Error(m.desconhecida(bruta, Object.keys(pulse_cadencia_1.CADENCIAS).join(', ')));
|
|
1317
1375
|
}
|
|
1318
1376
|
(0, pulse_cadencia_1.gravarCadencia)(carregado.raiz, lido.tag, { por: texto(args.opcoes.por) ?? (0, node_os_1.userInfo)().username,
|
|
1319
1377
|
canal: texto(args.opcoes.canal) ?? 'terminal', em: agora });
|
|
@@ -1326,39 +1384,42 @@ function comandoCadenciaDoPulse(args) {
|
|
|
1326
1384
|
}
|
|
1327
1385
|
console.log((0, pulse_cadencia_1.textoDaCadencia)(vigente, agora));
|
|
1328
1386
|
console.log(vigente.gravada
|
|
1329
|
-
?
|
|
1330
|
-
:
|
|
1387
|
+
? m.trocada(vigente.gravada.por, vigente.gravada.canal, (0, horario_1.formatarDataHoraRotulada)(vigente.gravada.em))
|
|
1388
|
+
: m.padrao);
|
|
1331
1389
|
return 0;
|
|
1332
1390
|
}
|
|
1333
1391
|
function comandoClaims(args) {
|
|
1334
1392
|
const carregado = (0, manifest_1.exigirManifesto)();
|
|
1335
1393
|
const sub = args.posicionais[1];
|
|
1394
|
+
// RM-061 (F3b, D3): o texto pelo catalogo; o que se grava (claims.jsonl, ledger) roda no escopo pt-BR, e a alegacao,
|
|
1395
|
+
// o arquivo, o comando e o motivo digitado saem como vieram. O estado da claim so se traduz na impressao.
|
|
1396
|
+
const mc = (0, locale_1.msg)().claims;
|
|
1336
1397
|
if (sub === 'add') {
|
|
1337
1398
|
const id = args.posicionais[2];
|
|
1338
1399
|
const arquivo = args.posicionais[3];
|
|
1339
1400
|
const alegacao = texto(args.opcoes.claim) ?? texto(args.opcoes.alegacao);
|
|
1340
1401
|
if (!id || !arquivo || !alegacao) {
|
|
1341
|
-
console.error(
|
|
1402
|
+
console.error(mc.usoAdd);
|
|
1342
1403
|
return 2;
|
|
1343
1404
|
}
|
|
1344
1405
|
const comando = texto(args.opcoes.verificar) ?? texto(args.opcoes.verify);
|
|
1345
1406
|
const faseBruta = texto(args.opcoes.fase);
|
|
1346
1407
|
const thread = (0, thread_1.lerThread)(carregado.raiz, id);
|
|
1347
|
-
const claim = (0, claims_1.adicionarClaim)(carregado.raiz, id, {
|
|
1408
|
+
const claim = (0, locale_1.comLocale)('pt-BR', () => (0, claims_1.adicionarClaim)(carregado.raiz, id, {
|
|
1348
1409
|
arquivo,
|
|
1349
1410
|
alegacao,
|
|
1350
1411
|
verificar: comando ? [comando] : [],
|
|
1351
1412
|
fase: faseBruta ? (0, thread_1.exigirFase)(thread, faseBruta) : undefined,
|
|
1352
|
-
});
|
|
1353
|
-
console.log(
|
|
1354
|
-
console.log(
|
|
1355
|
-
console.log(
|
|
1356
|
-
console.log(
|
|
1357
|
-
console.log(
|
|
1358
|
-
console.log(
|
|
1413
|
+
}));
|
|
1414
|
+
console.log(mc.registrada(claim.id, id));
|
|
1415
|
+
console.log(mc.campoArquivo(claim.arquivo));
|
|
1416
|
+
console.log(mc.campoAlegacao(claim.alegacao));
|
|
1417
|
+
console.log(mc.campoNegativa(claim.negativa));
|
|
1418
|
+
console.log(mc.campoVerificar(claim.verificar.join(' && ')));
|
|
1419
|
+
console.log(mc.campoEstado(mc.estado(claim.estado)));
|
|
1359
1420
|
if (claim.negativa && claim.verificar.length === 0) {
|
|
1360
1421
|
console.log('');
|
|
1361
|
-
console.log(
|
|
1422
|
+
console.log(mc.avisoNegativa);
|
|
1362
1423
|
}
|
|
1363
1424
|
// RM-008 (B8): a conferencia local da policy claim_sem_prova_local avisa e segue.
|
|
1364
1425
|
const linhasDePolicy = (0, policies_1.linhasDeAviso)(claim.avisosDePolicy ?? []);
|
|
@@ -1370,7 +1431,7 @@ function comandoClaims(args) {
|
|
|
1370
1431
|
// I-53 (RM-037, P6): o lint avisa aqui; a suite inteira e recusada no `ci prepare`.
|
|
1371
1432
|
for (const a of claim.lint ?? []) {
|
|
1372
1433
|
console.log('');
|
|
1373
|
-
console.log(
|
|
1434
|
+
console.log(mc.avisoDoLint((0, claim_lint_1.linhaDoLintDeClaim)(claim.id, a), a.regra === 'suite-inteira'));
|
|
1374
1435
|
}
|
|
1375
1436
|
return 0;
|
|
1376
1437
|
}
|
|
@@ -1383,18 +1444,19 @@ function comandoClaims(args) {
|
|
|
1383
1444
|
const prazo = texto(args.opcoes.prazo);
|
|
1384
1445
|
const semValor = ['claims', 'tarefa', 'prazo'].some((o) => args.opcoes[o] === true);
|
|
1385
1446
|
if (!id || semValor || (claims === undefined) === (tarefa === undefined)) {
|
|
1386
|
-
console.error(
|
|
1447
|
+
console.error(mc.usoConferir);
|
|
1387
1448
|
return 2;
|
|
1388
1449
|
}
|
|
1389
1450
|
const conducao = conducaoDoCli(args);
|
|
1390
1451
|
try {
|
|
1391
|
-
|
|
1452
|
+
// O resultado e as recusas nascem em pt-BR, como o --json os leva; o texto os remonta no locale do comando.
|
|
1453
|
+
const r = (0, locale_1.comLocale)('pt-BR', () => (0, claims_conferir_1.conferirClaims)(carregado, id, {
|
|
1392
1454
|
claims: claims !== undefined ? (0, claims_conferir_1.idsDeClaims)(claims) : undefined,
|
|
1393
1455
|
tarefa,
|
|
1394
1456
|
prazoMs: prazo !== undefined ? Number(prazo) * 1000 : undefined,
|
|
1395
1457
|
canal: conducao.canal,
|
|
1396
1458
|
correlacao: conducao.correlacao,
|
|
1397
|
-
});
|
|
1459
|
+
}));
|
|
1398
1460
|
console.log(json ? JSON.stringify(r, null, 2) : (0, claims_conferir_1.textoDaConferencia)(r));
|
|
1399
1461
|
return r.ok ? 0 : 1;
|
|
1400
1462
|
}
|
|
@@ -1404,7 +1466,7 @@ function comandoClaims(args) {
|
|
|
1404
1466
|
if (json)
|
|
1405
1467
|
console.log(JSON.stringify({ formato: claims_conferir_1.FORMATO_DA_CONFERENCIA, thread: id, ok: false, erro: e.message }, null, 2));
|
|
1406
1468
|
else
|
|
1407
|
-
console.error(
|
|
1469
|
+
console.error((0, locale_1.mensagemDoErro)(e));
|
|
1408
1470
|
return 2;
|
|
1409
1471
|
}
|
|
1410
1472
|
}
|
|
@@ -1413,15 +1475,15 @@ function comandoClaims(args) {
|
|
|
1413
1475
|
const claimId = args.posicionais[3];
|
|
1414
1476
|
const comando = texto(args.opcoes.comando) ?? texto(args.opcoes.verificar);
|
|
1415
1477
|
if (!id || !claimId || !comando) {
|
|
1416
|
-
console.error(
|
|
1478
|
+
console.error(mc.usoVerificar);
|
|
1417
1479
|
return 2;
|
|
1418
1480
|
}
|
|
1419
|
-
const claim = (0, claims_1.anexarComando)(carregado.raiz, id, claimId, comando);
|
|
1420
|
-
console.log(
|
|
1421
|
-
console.log(
|
|
1422
|
-
console.log(
|
|
1481
|
+
const claim = (0, locale_1.comLocale)('pt-BR', () => (0, claims_1.anexarComando)(carregado.raiz, id, claimId, comando));
|
|
1482
|
+
console.log(mc.comandoAnexado(claim.id));
|
|
1483
|
+
console.log(mc.campoVerificar(claim.verificar.join(' && ')));
|
|
1484
|
+
console.log(mc.campoEstado(mc.estado(claim.estado)));
|
|
1423
1485
|
console.log('');
|
|
1424
|
-
console.log(
|
|
1486
|
+
console.log(mc.proveAgora(id));
|
|
1425
1487
|
return 0;
|
|
1426
1488
|
}
|
|
1427
1489
|
if (sub === 'retirar') {
|
|
@@ -1429,14 +1491,14 @@ function comandoClaims(args) {
|
|
|
1429
1491
|
const claimId = args.posicionais[3];
|
|
1430
1492
|
const motivo = texto(args.opcoes.motivo);
|
|
1431
1493
|
if (!id || !claimId || !motivo) {
|
|
1432
|
-
console.error(
|
|
1494
|
+
console.error(mc.usoRetirar);
|
|
1433
1495
|
return 2;
|
|
1434
1496
|
}
|
|
1435
|
-
const claim = (0, claims_1.retirarClaim)(carregado.raiz, id, claimId, motivo);
|
|
1436
|
-
console.log(
|
|
1437
|
-
console.log(
|
|
1438
|
-
console.log(
|
|
1439
|
-
console.log(
|
|
1497
|
+
const claim = (0, locale_1.comLocale)('pt-BR', () => (0, claims_1.retirarClaim)(carregado.raiz, id, claimId, motivo));
|
|
1498
|
+
console.log(mc.retirada(claim.id, id));
|
|
1499
|
+
console.log(mc.campoAlegacao(claim.alegacao));
|
|
1500
|
+
console.log(mc.campoMotivo(motivo));
|
|
1501
|
+
console.log(mc.historicoContinua);
|
|
1440
1502
|
return 0;
|
|
1441
1503
|
}
|
|
1442
1504
|
if (sub === 'ausente') {
|
|
@@ -1444,24 +1506,24 @@ function comandoClaims(args) {
|
|
|
1444
1506
|
const paths = (texto(args.opcoes.paths) ?? '').split(',').map((p) => p.trim()).filter(Boolean);
|
|
1445
1507
|
const motivo = texto(args.opcoes.motivo);
|
|
1446
1508
|
if (!id || paths.length === 0 || !motivo) {
|
|
1447
|
-
console.error(
|
|
1509
|
+
console.error(mc.usoAusente);
|
|
1448
1510
|
return 2;
|
|
1449
1511
|
}
|
|
1450
|
-
(0, prova_minima_1.registrarProvaAusente)(carregado.raiz, id, { paths, motivo, commit: texto(args.opcoes.commit) });
|
|
1451
|
-
console.log(
|
|
1452
|
-
console.log(
|
|
1512
|
+
(0, locale_1.comLocale)('pt-BR', () => (0, prova_minima_1.registrarProvaAusente)(carregado.raiz, id, { paths, motivo, commit: texto(args.opcoes.commit) }));
|
|
1513
|
+
console.log(mc.ausenciaRegistrada(id, paths.join(', ')));
|
|
1514
|
+
console.log(mc.campoMotivo(motivo));
|
|
1453
1515
|
return 0;
|
|
1454
1516
|
}
|
|
1455
1517
|
if (sub === 'list' || sub === undefined) {
|
|
1456
1518
|
const id = args.posicionais[2];
|
|
1457
1519
|
if (!id) {
|
|
1458
|
-
console.error(
|
|
1520
|
+
console.error(mc.usoList);
|
|
1459
1521
|
return 2;
|
|
1460
1522
|
}
|
|
1461
1523
|
console.log((0, claims_1.tabelaDeClaims)(carregado.raiz, id));
|
|
1462
1524
|
return 0;
|
|
1463
1525
|
}
|
|
1464
|
-
console.error(
|
|
1526
|
+
console.error((0, locale_1.msg)().cli.subcomandoDesconhecido('claims', sub));
|
|
1465
1527
|
return 2;
|
|
1466
1528
|
}
|
|
1467
1529
|
function comandoVerify(args) {
|
|
@@ -1472,6 +1534,13 @@ function comandoVerify(args) {
|
|
|
1472
1534
|
console.error(m.uso);
|
|
1473
1535
|
return 2;
|
|
1474
1536
|
}
|
|
1537
|
+
// RM-072 (D1): `--check classic|agile` vence o `check.mode` do manifesto; outro valor sai com 2 e os dois aceitos.
|
|
1538
|
+
const brutoDoCheck = args.opcoes.check;
|
|
1539
|
+
const check = brutoDoCheck === undefined ? undefined : (0, check_modo_1.lerModo)(brutoDoCheck);
|
|
1540
|
+
if (check === null) {
|
|
1541
|
+
console.error(m.checkInvalido(typeof brutoDoCheck === 'string' ? brutoDoCheck : null));
|
|
1542
|
+
return 2;
|
|
1543
|
+
}
|
|
1475
1544
|
// RM-058 N2 (D10): enquanto a fila de recursos pesados nao da a vez, o CLI diz uma vez por quem espera.
|
|
1476
1545
|
const aoEsperar = (ocupantes) => console.error(m.filaPesadaEsperando(args.opcoes.baseline === true ? 'baseline' : 'verify', ocupantes.map((o) => m.filaPesadaOcupante(o.operacao, o.thread, (0, horario_1.formatarDataHora)(o.desde))).join('; ')));
|
|
1477
1546
|
const doCli = conducaoDoCli(args);
|
|
@@ -1480,12 +1549,12 @@ function comandoVerify(args) {
|
|
|
1480
1549
|
comandoDeEsperar: `ork verify ${id}${args.opcoes.baseline === true ? ' --baseline' : ''} --esperar 120` } };
|
|
1481
1550
|
if (args.opcoes.baseline === true) {
|
|
1482
1551
|
// RM-061 (F2b, G2): a baseline e o ledger sao gravados em pt-BR; so a impressao segue o locale.
|
|
1483
|
-
const b = (0, locale_1.comLocale)('pt-BR', () => (0, verify_1.gravarBaseline)(carregado, id, undefined, conducao));
|
|
1552
|
+
const b = (0, locale_1.comLocale)('pt-BR', () => (0, verify_1.gravarBaseline)(carregado, id, undefined, conducao, 'cli', undefined, check));
|
|
1484
1553
|
console.log(m.baselineGravada(id));
|
|
1485
1554
|
console.log(m.baselineCommit(b.commit));
|
|
1486
|
-
|
|
1487
|
-
|
|
1488
|
-
|
|
1555
|
+
// RM-037 (defeito 1 de 19 e 20/10/2026): o comando sem veredito nao sai como "ja falhava".
|
|
1556
|
+
for (const linha of (0, verify_1.linhasDaBaseline)(b, id))
|
|
1557
|
+
console.log(linha);
|
|
1489
1558
|
if (b.comandos.some((c) => !c.ok)) {
|
|
1490
1559
|
// Ensaio de 03/10 (R7): "ja falhava" sem dizer onde ver a saida do comando.
|
|
1491
1560
|
console.log(m.baselineSaida((0, thread_1.caminhoThread)(carregado.raiz, id), id));
|
|
@@ -1496,7 +1565,7 @@ function comandoVerify(args) {
|
|
|
1496
1565
|
}
|
|
1497
1566
|
return 0;
|
|
1498
1567
|
}
|
|
1499
|
-
const r = (0, locale_1.comLocale)('pt-BR', () => (0, verify_1.verificar)(carregado, id, { soClaims: args.opcoes['so-claims'] === true, conducao }));
|
|
1568
|
+
const r = (0, locale_1.comLocale)('pt-BR', () => (0, verify_1.verificar)(carregado, id, { soClaims: args.opcoes['so-claims'] === true, conducao, check }));
|
|
1500
1569
|
console.log((0, verify_1.textoDoVerify)(r));
|
|
1501
1570
|
return r.ok ? 0 : 1;
|
|
1502
1571
|
}
|
|
@@ -1510,6 +1579,7 @@ function comandoVerify(args) {
|
|
|
1510
1579
|
* `status --json` para ceder o despacho enquanto a presenca vale. Nada aqui despacha.
|
|
1511
1580
|
*/
|
|
1512
1581
|
function comandoSentinela(carregado, args) {
|
|
1582
|
+
const m = (0, locale_1.msg)().conducao.cli;
|
|
1513
1583
|
const acao = args.posicionais[2] ?? 'status';
|
|
1514
1584
|
const json = args.opcoes.json === true;
|
|
1515
1585
|
if (acao === 'status') {
|
|
@@ -1518,34 +1588,101 @@ function comandoSentinela(carregado, args) {
|
|
|
1518
1588
|
return 0;
|
|
1519
1589
|
}
|
|
1520
1590
|
if (acao !== 'bater' && acao !== 'desligar')
|
|
1521
|
-
throw new Error(
|
|
1591
|
+
throw new Error(m.sentinelaUso);
|
|
1522
1592
|
const sessao = texto(args.opcoes.sessao);
|
|
1523
1593
|
if (!sessao)
|
|
1524
|
-
throw new Error(
|
|
1594
|
+
throw new Error(m.sentinelaSessao(acao));
|
|
1525
1595
|
if (acao === 'bater') {
|
|
1526
1596
|
const r = (0, conducao_sentinela_1.baterSentinela)(carregado.raiz, { sessao });
|
|
1527
1597
|
const curta = r.presenca.sessao.slice(0, 8);
|
|
1528
1598
|
console.log(json ? JSON.stringify(r, null, 2) : r.ok
|
|
1529
|
-
?
|
|
1530
|
-
:
|
|
1599
|
+
? m.sentinelaLigada(r.ligou, r.presenca.maquina, curta)
|
|
1600
|
+
: m.sentinelaOutra(curta, r.presenca.maquina));
|
|
1531
1601
|
return r.ok ? 0 : 3;
|
|
1532
1602
|
}
|
|
1533
1603
|
const motivo = texto(args.opcoes.motivo);
|
|
1534
1604
|
const r = (0, conducao_sentinela_1.desligarSentinela)(carregado.raiz, { sessao, ...(motivo ? { motivo } : {}) });
|
|
1535
|
-
console.log(json ? JSON.stringify(r, null, 2) : r.desligada
|
|
1536
|
-
|
|
1537
|
-
|
|
1605
|
+
console.log(json ? JSON.stringify(r, null, 2) : r.desligada ? m.sentinelaOff : m.sentinelaNada);
|
|
1606
|
+
return 0;
|
|
1607
|
+
}
|
|
1608
|
+
/**
|
|
1609
|
+
* RM-063 (F7): `ork conducao autorizar|autorizacao`. A autorizacao duravel do dono nesta maquina
|
|
1610
|
+
* (`ork.autorizacao-duravel/v1`, fora do git): o que a batida da conducao pode fazer sozinha e ate quando.
|
|
1611
|
+
*/
|
|
1612
|
+
function comandoAutorizacao(carregado, args, sub) {
|
|
1613
|
+
const m = (0, locale_1.msg)().conducao.cli;
|
|
1614
|
+
const json = args.opcoes.json === true;
|
|
1615
|
+
const projeto = carregado.manifesto.project.name;
|
|
1616
|
+
if (sub === 'autorizacao') {
|
|
1617
|
+
if (args.posicionais.length > 2)
|
|
1618
|
+
throw new Error(m.autorizacaoUso);
|
|
1619
|
+
const leitura = (0, autorizacao_duravel_1.lerAutorizacao)(carregado.raiz, { projeto });
|
|
1620
|
+
console.log(json ? JSON.stringify(leitura, null, 2) : (0, autorizacao_duravel_1.textoDaAutorizacao)(leitura));
|
|
1621
|
+
return 0;
|
|
1622
|
+
}
|
|
1623
|
+
const ate = texto(args.opcoes.ate), pode = texto(args.opcoes.pode);
|
|
1624
|
+
if (!ate || !pode || args.posicionais.length > 2) {
|
|
1625
|
+
throw new Error(m.autorizarUso);
|
|
1626
|
+
}
|
|
1627
|
+
const r = (0, autorizacao_duravel_1.gravarAutorizacao)(carregado.raiz, { ate, pode, por: texto(args.opcoes.por), nota: texto(args.opcoes.nota), projeto,
|
|
1628
|
+
fuso: (0, horario_1.fusoDoManifesto)(carregado).fuso, canal: conducaoDoCli(args).canal });
|
|
1629
|
+
if (!r.ok) {
|
|
1630
|
+
console.log(json ? JSON.stringify(r, null, 2) : m.autorizacaoRecusada(r.motivo, r.detalhe));
|
|
1631
|
+
return 1;
|
|
1632
|
+
}
|
|
1633
|
+
const a = r.anterior;
|
|
1634
|
+
console.log(json ? JSON.stringify({ ok: true, leitura: r.leitura, anterior: a }, null, 2) : [
|
|
1635
|
+
m.autorizacaoGravada((0, autorizacao_duravel_1.linhaDaAutorizacao)(r.leitura)),
|
|
1636
|
+
...(a ? [m.substitui(a.por, (0, horario_1.formatarDataHoraRotulada)(a.ate), a.pode.join(', '))] : []),
|
|
1637
|
+
m.arquivo(r.leitura.arquivo)
|
|
1638
|
+
].join('\n'));
|
|
1538
1639
|
return 0;
|
|
1539
1640
|
}
|
|
1540
1641
|
function comandoConducao(args) {
|
|
1541
1642
|
const carregado = (0, manifest_1.exigirManifesto)();
|
|
1643
|
+
const m = (0, locale_1.msg)().conducao.cli;
|
|
1542
1644
|
const sub = args.posicionais[1];
|
|
1543
1645
|
const id = args.posicionais[2];
|
|
1544
1646
|
if (sub === 'sentinela')
|
|
1545
1647
|
return comandoSentinela(carregado, args);
|
|
1648
|
+
if (sub === 'autorizar' || sub === 'autorizacao')
|
|
1649
|
+
return comandoAutorizacao(carregado, args, sub);
|
|
1650
|
+
if (sub === 'batida') {
|
|
1651
|
+
// RM-063 (F7): o passo deterministico da conducao, o mesmo que a varredura do cron roda depois do resumo.
|
|
1652
|
+
if (args.posicionais.length > 2)
|
|
1653
|
+
throw new Error(m.batidaUso);
|
|
1654
|
+
const r = (0, conducao_batida_1.baterConducao)(carregado, { canal: conducaoDoCli(args).canal });
|
|
1655
|
+
const textoDaRodada = (0, conducao_batida_1.textoDaBatida)(r);
|
|
1656
|
+
console.log(args.opcoes.json === true ? JSON.stringify(r, null, 2) : textoDaRodada);
|
|
1657
|
+
// RM-063 (H2): o `#OrkRetomar` do canal roda esta batida em segundo plano; o que voltou a andar volta ao dono pelo
|
|
1658
|
+
// transporte do pulse (com o outro host configurado, se o primeiro falhar).
|
|
1659
|
+
if (args.opcoes.entregar === true) {
|
|
1660
|
+
const mensagem = `🔁 Orkastery, retomada em ${(0, maquina_1.nomeDaMaquina)()}:\n${textoDaRodada}`.slice(0, 3900);
|
|
1661
|
+
try {
|
|
1662
|
+
const e = (0, pulse_delivery_1.entregarPeloTransporte)(carregado.raiz, mensagem, { oQue: 'a retomada' });
|
|
1663
|
+
if (!e.ok)
|
|
1664
|
+
console.error(m.pulseAviso);
|
|
1665
|
+
}
|
|
1666
|
+
catch (e) {
|
|
1667
|
+
console.error(m.pulseFalha(e.message));
|
|
1668
|
+
}
|
|
1669
|
+
}
|
|
1670
|
+
return r.ocupada ? 3 : 0;
|
|
1671
|
+
}
|
|
1672
|
+
if (sub === 'atualizar') {
|
|
1673
|
+
// RM-063 (F7): o merge da base remota na branch da thread, com a reconciliacao do CHANGELOG; conflito em codigo aborta.
|
|
1674
|
+
if (!id || args.posicionais.length > 3)
|
|
1675
|
+
throw new Error(m.atualizarUso);
|
|
1676
|
+
(0, thread_1.lerThread)(carregado.raiz, id);
|
|
1677
|
+
const doCli = conducaoDoCli(args);
|
|
1678
|
+
const r = (0, atualizar_branch_1.atualizarBranchDaThread)(carregado, id, { enviar: args.opcoes.enviar === true, canal: doCli.canal, correlacao: doCli.correlacao,
|
|
1679
|
+
...(doCli.esperarMs ? { esperarMs: doCli.esperarMs } : {}) });
|
|
1680
|
+
console.log(args.opcoes.json === true ? JSON.stringify(r, null, 2) : (0, atualizar_branch_1.textoDaAtualizacao)(r));
|
|
1681
|
+
return r.acao === 'mesclada' || r.acao === 'ja-atualizada' ? 0 : r.acao === 'recusada' && r.motivo === 'conduzida' ? 3 : 1;
|
|
1682
|
+
}
|
|
1546
1683
|
if (sub === 'status') {
|
|
1547
1684
|
if (!id)
|
|
1548
|
-
throw new Error(
|
|
1685
|
+
throw new Error(m.statusUso);
|
|
1549
1686
|
(0, thread_1.lerThread)(carregado.raiz, id);
|
|
1550
1687
|
(0, conducao_1.liberarSeOrfa)(carregado.raiz, id);
|
|
1551
1688
|
const atual = (0, conducao_1.conducaoDaThread)(carregado.raiz, id);
|
|
@@ -1555,12 +1692,12 @@ function comandoConducao(args) {
|
|
|
1555
1692
|
if (sub === 'assumir') {
|
|
1556
1693
|
const por = texto(args.opcoes.por), motivo = texto(args.opcoes.motivo);
|
|
1557
1694
|
if (!id || !por || !motivo)
|
|
1558
|
-
throw new Error(
|
|
1695
|
+
throw new Error(m.assumirUso);
|
|
1559
1696
|
const r = (0, conducao_1.assumirConducao)(carregado.raiz, id, { por, motivo, canal: conducaoDoCli(args).canal });
|
|
1560
|
-
console.log(args.opcoes.json === true ? JSON.stringify(r, null, 2) :
|
|
1697
|
+
console.log(args.opcoes.json === true ? JSON.stringify(r, null, 2) : m.assumida(r.ok, r.detalhe));
|
|
1561
1698
|
return r.ok ? 0 : 3;
|
|
1562
1699
|
}
|
|
1563
|
-
throw new Error(
|
|
1700
|
+
throw new Error(m.uso);
|
|
1564
1701
|
}
|
|
1565
1702
|
/** RM-048 (D1): o gate aberto no contrato curto, com o codigo estavel e o "desde" do ledger. */
|
|
1566
1703
|
function textoDoGateCurto(raiz, pedido, canal) {
|
|
@@ -1573,11 +1710,12 @@ function textoDoGateCurto(raiz, pedido, canal) {
|
|
|
1573
1710
|
function comandoGate(args) {
|
|
1574
1711
|
const carregado = (0, manifest_1.exigirManifesto)();
|
|
1575
1712
|
const sub = args.posicionais[1];
|
|
1713
|
+
const mg = (0, locale_1.msg)().operacao.restante.gate;
|
|
1576
1714
|
if (sub === 'context') {
|
|
1577
1715
|
const id = args.posicionais[2], pedido = args.posicionais[3];
|
|
1578
1716
|
if (!id || !pedido || args.posicionais.length !== 4 ||
|
|
1579
1717
|
Object.entries(args.opcoes).some(([k, v]) => k !== 'native-offer-stdin' || v !== true))
|
|
1580
|
-
throw Error(
|
|
1718
|
+
throw Error(mg.usoContext);
|
|
1581
1719
|
const view = (0, hitl_gates_1.contextoDoPedidoNativo)(carregado.raiz, id, pedido);
|
|
1582
1720
|
const callback = args.opcoes['native-offer-stdin'] ? (0, hitl_native_offer_1.readNativeOfferStdin)() : undefined;
|
|
1583
1721
|
console.log(JSON.stringify({ ...view, canais: (0, hitl_presentation_1.ofertaDoPedido)(view.pedido, [], callback === undefined ? undefined : { callback, raiz: carregado.raiz }),
|
|
@@ -1587,10 +1725,10 @@ function comandoGate(args) {
|
|
|
1587
1725
|
if (sub === 'request') {
|
|
1588
1726
|
const id = args.posicionais[2];
|
|
1589
1727
|
if (!id)
|
|
1590
|
-
throw new Error(
|
|
1728
|
+
throw new Error(mg.requestThread);
|
|
1591
1729
|
const formato = texto(args.opcoes.formato);
|
|
1592
1730
|
if (formato !== undefined && formato !== 'telegram' && formato !== 'terminal')
|
|
1593
|
-
throw new Error(
|
|
1731
|
+
throw new Error(mg.formato);
|
|
1594
1732
|
const pedido = (0, hitl_gates_1.abrirPedidoGate)(carregado.raiz, id, texto(args.opcoes.motivo));
|
|
1595
1733
|
// RM-048 (D1): com --formato, o que sai e o pedido no contrato curto, pronto para o canal, com
|
|
1596
1734
|
// o codigo estavel na ultima linha. Sem ele, o JSON de sempre, para quem integra.
|
|
@@ -1600,7 +1738,7 @@ function comandoGate(args) {
|
|
|
1600
1738
|
if (sub === 'answer') {
|
|
1601
1739
|
const id = args.posicionais[2], pedido = args.posicionais[3];
|
|
1602
1740
|
if (!id || !pedido || args.opcoes['resposta-stdin'] !== true || args.opcoes.resposta !== undefined)
|
|
1603
|
-
throw new Error(
|
|
1741
|
+
throw new Error(mg.answer);
|
|
1604
1742
|
const r = (0, hitl_gates_1.lerRespostaStdin)({ por: texto(args.opcoes.por), mensagem: texto(args.opcoes.mensagem),
|
|
1605
1743
|
origem: texto(args.opcoes.origem), canal: texto(args.opcoes.canal), conta: texto(args.opcoes.conta) });
|
|
1606
1744
|
console.log(JSON.stringify((0, hitl_gates_1.responderGate)(carregado.raiz, id, pedido, r)));
|
|
@@ -1609,7 +1747,7 @@ function comandoGate(args) {
|
|
|
1609
1747
|
if (sub === 'next') {
|
|
1610
1748
|
const id = args.posicionais[2];
|
|
1611
1749
|
if (!id) {
|
|
1612
|
-
console.error(
|
|
1750
|
+
console.error(mg.usoNext);
|
|
1613
1751
|
return 2;
|
|
1614
1752
|
}
|
|
1615
1753
|
const thread = (0, thread_1.lerThread)(carregado.raiz, id);
|
|
@@ -1633,18 +1771,18 @@ function comandoGate(args) {
|
|
|
1633
1771
|
const sobre = args.posicionais[3];
|
|
1634
1772
|
const por = texto(args.opcoes.por) ?? texto(args.opcoes.quem);
|
|
1635
1773
|
if (!id || !sobre || !por) {
|
|
1636
|
-
console.error(
|
|
1774
|
+
console.error(mg.approveAposentado);
|
|
1637
1775
|
return 2;
|
|
1638
1776
|
}
|
|
1639
1777
|
(0, thread_1.lerThread)(carregado.raiz, id);
|
|
1640
1778
|
const e = (0, gates_1.aprovarGateHumano)(carregado.raiz, id, sobre, por, texto(args.opcoes.obs));
|
|
1641
|
-
console.log(
|
|
1642
|
-
console.log(
|
|
1643
|
-
console.log(
|
|
1644
|
-
console.log(
|
|
1779
|
+
console.log(mg.registrado(id));
|
|
1780
|
+
console.log(mg.sobre(sobre));
|
|
1781
|
+
console.log(mg.autorizado(por));
|
|
1782
|
+
console.log(mg.quando((0, horario_1.formatarDataHoraRotulada)(e.ts)));
|
|
1645
1783
|
return 0;
|
|
1646
1784
|
}
|
|
1647
|
-
console.error(
|
|
1785
|
+
console.error(mg.desconhecido(sub));
|
|
1648
1786
|
return 2;
|
|
1649
1787
|
}
|
|
1650
1788
|
/**
|
|
@@ -1656,44 +1794,44 @@ function comandoGate(args) {
|
|
|
1656
1794
|
*/
|
|
1657
1795
|
function comandoRetry(args) {
|
|
1658
1796
|
const sub = args.posicionais[1];
|
|
1797
|
+
const mr = (0, locale_1.msg)().retry, mc = mr.complementar;
|
|
1659
1798
|
if (sub === 'policy') {
|
|
1660
1799
|
const alvo = texto(args.opcoes.motivo);
|
|
1661
1800
|
if (alvo) {
|
|
1662
1801
|
const politica = retry_1.POLITICA_DE_RETRY[alvo];
|
|
1663
1802
|
if (!politica) {
|
|
1664
|
-
console.error(
|
|
1665
|
-
console.error(
|
|
1803
|
+
console.error(mc.motivoDesconhecido(alvo));
|
|
1804
|
+
console.error(mc.conhecidos(Object.keys(retry_1.POLITICA_DE_RETRY).join(', ')));
|
|
1666
1805
|
return 2;
|
|
1667
1806
|
}
|
|
1668
1807
|
if (args.opcoes.json === true) {
|
|
1669
1808
|
console.log(JSON.stringify(politica, null, 2));
|
|
1670
1809
|
return 0;
|
|
1671
1810
|
}
|
|
1672
|
-
console.log(
|
|
1673
|
-
console.log(
|
|
1674
|
-
console.log(
|
|
1675
|
-
console.log(
|
|
1676
|
-
console.log(
|
|
1677
|
-
console.log(
|
|
1811
|
+
console.log(mc.motivo(politica.motivo));
|
|
1812
|
+
console.log(mc.significado((0, locale_1.localeAtivo)() === 'en' ? mr.politica[politica.motivo].porque : auditoria_1.DESCRICAO_DO_MOTIVO_DE_AUDITORIA[politica.motivo]));
|
|
1813
|
+
console.log(mc.acao(politica.acao));
|
|
1814
|
+
console.log(mc.automatica(politica.automatica ? mc.sim : mc.nao));
|
|
1815
|
+
console.log(mc.porque(mr.politica[politica.motivo].porque));
|
|
1816
|
+
console.log(mc.correcao(mr.politica[politica.motivo].correcao));
|
|
1678
1817
|
return 0;
|
|
1679
1818
|
}
|
|
1680
1819
|
if (args.opcoes.json === true) {
|
|
1681
1820
|
console.log(JSON.stringify(Object.values(retry_1.POLITICA_DE_RETRY), null, 2));
|
|
1682
1821
|
return 0;
|
|
1683
1822
|
}
|
|
1684
|
-
console.log(
|
|
1823
|
+
console.log(mc.politicaTitulo);
|
|
1685
1824
|
console.log('');
|
|
1686
1825
|
console.log((0, retry_1.tabelaDaPolitica)());
|
|
1687
1826
|
console.log('');
|
|
1688
|
-
|
|
1689
|
-
|
|
1690
|
-
console.log('escalacao (retry.max_tentativas) pausa qualquer modo, inclusive #Auto.');
|
|
1827
|
+
for (const linha of mc.politicaFecho)
|
|
1828
|
+
console.log(linha);
|
|
1691
1829
|
return 0;
|
|
1692
1830
|
}
|
|
1693
1831
|
if (sub === 'parse') {
|
|
1694
1832
|
const bruto = texto(args.opcoes.stderr) ?? args.posicionais.slice(2).join(' ');
|
|
1695
1833
|
if (!bruto) {
|
|
1696
|
-
console.error(
|
|
1834
|
+
console.error(mc.usoParse);
|
|
1697
1835
|
return 2;
|
|
1698
1836
|
}
|
|
1699
1837
|
const sinal = (0, ratelimit_1.parseRateLimit)(bruto);
|
|
@@ -1702,17 +1840,17 @@ function comandoRetry(args) {
|
|
|
1702
1840
|
return sinal ? 0 : 1;
|
|
1703
1841
|
}
|
|
1704
1842
|
if (!sinal) {
|
|
1705
|
-
console.log(
|
|
1843
|
+
console.log(mc.semSinal);
|
|
1706
1844
|
return 1;
|
|
1707
1845
|
}
|
|
1708
|
-
console.log(
|
|
1709
|
-
console.log(
|
|
1710
|
-
console.log(
|
|
1711
|
-
console.log(
|
|
1846
|
+
console.log(mc.sinal);
|
|
1847
|
+
console.log(mc.fonte(sinal.fonte));
|
|
1848
|
+
console.log(mc.reset(sinal.resetEm ? (0, horario_1.formatarDataHoraRotulada)(sinal.resetEm) : mc.semHora));
|
|
1849
|
+
console.log(mc.trecho(sinal.trecho));
|
|
1712
1850
|
if (sinal.resetEm === null) {
|
|
1713
1851
|
console.log('');
|
|
1714
|
-
|
|
1715
|
-
|
|
1852
|
+
for (const linha of mc.estimada)
|
|
1853
|
+
console.log(linha);
|
|
1716
1854
|
}
|
|
1717
1855
|
return 0;
|
|
1718
1856
|
}
|
|
@@ -1769,8 +1907,8 @@ function comandoRetry(args) {
|
|
|
1769
1907
|
const espera = (0, ratelimit_1.lerFilaDeRetomada)(carregado.raiz).filter((p) => p.estado === 'aguardando');
|
|
1770
1908
|
if (espera.length > 0) {
|
|
1771
1909
|
console.log('');
|
|
1772
|
-
console.log(
|
|
1773
|
-
console.log(
|
|
1910
|
+
console.log(mc.proxima((0, horario_1.formatarDataHora)(espera[0].liberaEm), (0, ratelimit_1.faltaPara)(espera[0])));
|
|
1911
|
+
console.log(mc.retome);
|
|
1774
1912
|
}
|
|
1775
1913
|
return 0;
|
|
1776
1914
|
}
|
|
@@ -1800,17 +1938,17 @@ function comandoRetry(args) {
|
|
|
1800
1938
|
const idPedido = args.posicionais[2];
|
|
1801
1939
|
const motivo = texto(args.opcoes.motivo);
|
|
1802
1940
|
if (!idPedido || !motivo) {
|
|
1803
|
-
console.error(
|
|
1941
|
+
console.error(mc.usoCancel);
|
|
1804
1942
|
return 2;
|
|
1805
1943
|
}
|
|
1806
1944
|
const p = (0, retry_1.cancelarPedido)(carregado, idPedido, motivo);
|
|
1807
|
-
console.log(
|
|
1808
|
-
console.log(
|
|
1809
|
-
console.log(
|
|
1810
|
-
console.log(
|
|
1945
|
+
console.log(mc.cancelado(p.id));
|
|
1946
|
+
console.log(mc.thread(p.thread));
|
|
1947
|
+
console.log(mc.fase(p.fase));
|
|
1948
|
+
console.log(mc.motivoLinha(motivo));
|
|
1811
1949
|
return 0;
|
|
1812
1950
|
}
|
|
1813
|
-
console.error(
|
|
1951
|
+
console.error(mc.desconhecido(sub ?? ''));
|
|
1814
1952
|
return 2;
|
|
1815
1953
|
}
|
|
1816
1954
|
/**
|
|
@@ -1824,15 +1962,16 @@ function comandoFix(args) {
|
|
|
1824
1962
|
const carregado = (0, manifest_1.exigirManifesto)();
|
|
1825
1963
|
const sub = args.posicionais[1];
|
|
1826
1964
|
const id = args.posicionais[2];
|
|
1965
|
+
const mf = (0, locale_1.msg)().operacao.restante.fix;
|
|
1827
1966
|
if (sub === 'open') {
|
|
1828
1967
|
if (!id) {
|
|
1829
|
-
console.error(
|
|
1968
|
+
console.error(mf.usoOpen);
|
|
1830
1969
|
return 2;
|
|
1831
1970
|
}
|
|
1832
1971
|
const conducao = { ...conducaoDoCli(args), filaPesada: filaPesadaDoCli(args, 'verify', `ork fix open ${id} --esperar 30`) };
|
|
1833
|
-
const rodada = (0, fix_1.abrirRodada)(carregado, id, { soClaims: args.opcoes['so-claims'] === true, conducao });
|
|
1972
|
+
const rodada = (0, locale_1.comLocale)('pt-BR', () => (0, fix_1.abrirRodada)(carregado, id, { soClaims: args.opcoes['so-claims'] === true, conducao }));
|
|
1834
1973
|
const reverify = args.opcoes.reverify === true && rodada.correcoes.length > 0
|
|
1835
|
-
? (0, fix_1.reverificar)(carregado, id, { rodada: rodada.rodada, conducao })
|
|
1974
|
+
? (0, locale_1.comLocale)('pt-BR', () => (0, fix_1.reverificar)(carregado, id, { rodada: rodada.rodada, conducao }))
|
|
1836
1975
|
: null;
|
|
1837
1976
|
if (args.opcoes.json === true) {
|
|
1838
1977
|
console.log(JSON.stringify({ rodada, reverify }, null, 2));
|
|
@@ -1850,14 +1989,14 @@ function comandoFix(args) {
|
|
|
1850
1989
|
}
|
|
1851
1990
|
if (sub === 'list') {
|
|
1852
1991
|
if (!id) {
|
|
1853
|
-
console.error(
|
|
1992
|
+
console.error(mf.usoList);
|
|
1854
1993
|
return 2;
|
|
1855
1994
|
}
|
|
1856
1995
|
(0, thread_1.lerThread)(carregado.raiz, id);
|
|
1857
1996
|
const rodadaBruta = texto(args.opcoes.rodada);
|
|
1858
1997
|
const rodada = rodadaBruta ? Number(rodadaBruta) : (0, fix_1.ultimaRodada)(carregado.raiz, id);
|
|
1859
1998
|
if (rodada === 0) {
|
|
1860
|
-
console.log(
|
|
1999
|
+
console.log(mf.semRodada(id));
|
|
1861
2000
|
return 0;
|
|
1862
2001
|
}
|
|
1863
2002
|
const correcoes = (0, fix_1.correcoesDaRodada)(carregado.raiz, id, rodada);
|
|
@@ -1865,29 +2004,29 @@ function comandoFix(args) {
|
|
|
1865
2004
|
console.log(JSON.stringify(correcoes, null, 2));
|
|
1866
2005
|
return 0;
|
|
1867
2006
|
}
|
|
1868
|
-
console.log(
|
|
2007
|
+
console.log(mf.lista(rodada, id));
|
|
1869
2008
|
console.log('');
|
|
1870
|
-
console.log((0, util_1.tabela)([
|
|
2009
|
+
console.log((0, util_1.tabela)([...mf.colunasLista], correcoes.map((c) => [
|
|
1871
2010
|
c.id,
|
|
1872
2011
|
c.tipo,
|
|
1873
2012
|
c.origem,
|
|
1874
2013
|
c.alvo,
|
|
1875
2014
|
c.estado,
|
|
1876
|
-
c.verificar.join(' && ') ||
|
|
2015
|
+
c.verificar.join(' && ') || mf.verifyCompleto,
|
|
1877
2016
|
])));
|
|
1878
2017
|
return 0;
|
|
1879
2018
|
}
|
|
1880
2019
|
if (sub === 'reverify') {
|
|
1881
2020
|
if (!id) {
|
|
1882
|
-
console.error(
|
|
2021
|
+
console.error(mf.usoReverify);
|
|
1883
2022
|
return 2;
|
|
1884
2023
|
}
|
|
1885
2024
|
const rodadaBruta = texto(args.opcoes.rodada);
|
|
1886
|
-
const r = (0, fix_1.reverificar)(carregado, id, {
|
|
2025
|
+
const r = (0, locale_1.comLocale)('pt-BR', () => (0, fix_1.reverificar)(carregado, id, {
|
|
1887
2026
|
conducao: { ...conducaoDoCli(args), filaPesada: filaPesadaDoCli(args, 'verify', `ork fix reverify ${id} --esperar 30`) },
|
|
1888
2027
|
rodada: rodadaBruta ? Number(rodadaBruta) : undefined,
|
|
1889
2028
|
parcial: args.opcoes.parcial === true,
|
|
1890
|
-
});
|
|
2029
|
+
}));
|
|
1891
2030
|
if (args.opcoes.json === true) {
|
|
1892
2031
|
console.log(JSON.stringify(r, null, 2));
|
|
1893
2032
|
}
|
|
@@ -1896,45 +2035,46 @@ function comandoFix(args) {
|
|
|
1896
2035
|
}
|
|
1897
2036
|
return r.veredito === 'PASSOU' ? 0 : 1;
|
|
1898
2037
|
}
|
|
1899
|
-
console.error(
|
|
2038
|
+
console.error(mf.desconhecido(sub ?? ''));
|
|
1900
2039
|
return 2;
|
|
1901
2040
|
}
|
|
1902
2041
|
function comandoHandoff(args) {
|
|
1903
2042
|
const carregado = (0, manifest_1.exigirManifesto)();
|
|
1904
2043
|
const sub = args.posicionais[1];
|
|
1905
2044
|
const id = args.posicionais[2];
|
|
2045
|
+
const mh = (0, locale_1.msg)().operacao.restante.handoff;
|
|
1906
2046
|
if (sub === 'export') {
|
|
1907
2047
|
if (!id) {
|
|
1908
|
-
console.error(
|
|
2048
|
+
console.error(mh.usoExport);
|
|
1909
2049
|
return 2;
|
|
1910
2050
|
}
|
|
1911
2051
|
const thread = (0, thread_1.lerThread)(carregado.raiz, id);
|
|
1912
2052
|
const faseBruta = texto(args.opcoes['proxima-fase']) ?? texto(args.opcoes.fase);
|
|
1913
|
-
const r = (0, handoff_1.exportarHandoff)(carregado, id, {
|
|
2053
|
+
const r = (0, locale_1.comLocale)('pt-BR', () => (0, handoff_1.exportarHandoff)(carregado, id, {
|
|
1914
2054
|
proximaFase: faseBruta ? (0, thread_1.exigirFase)(thread, faseBruta) : undefined,
|
|
1915
2055
|
slugDestino: texto(args.opcoes.slug),
|
|
1916
|
-
});
|
|
2056
|
+
}));
|
|
1917
2057
|
console.log((0, handoff_1.textoDoHandoff)(r.handoff, r.caminho));
|
|
1918
2058
|
console.log('');
|
|
1919
|
-
console.log(
|
|
2059
|
+
console.log(mh.historico(r.caminhoHistorico));
|
|
1920
2060
|
return 0;
|
|
1921
2061
|
}
|
|
1922
2062
|
if (sub === 'recall') {
|
|
1923
2063
|
const ponteiro = args.posicionais[3];
|
|
1924
2064
|
if (!id || !ponteiro) {
|
|
1925
|
-
console.error(
|
|
2065
|
+
console.error(mh.usoRecall);
|
|
1926
2066
|
return 2;
|
|
1927
2067
|
}
|
|
1928
|
-
const r = (0, handoff_1.recall)(carregado, id, ponteiro);
|
|
1929
|
-
console.log(
|
|
1930
|
-
console.log(
|
|
1931
|
-
console.log(
|
|
1932
|
-
console.log(
|
|
2068
|
+
const r = (0, locale_1.comLocale)('pt-BR', () => (0, handoff_1.recall)(carregado, id, ponteiro));
|
|
2069
|
+
console.log(mh.resolvido(r.location));
|
|
2070
|
+
console.log(mh.metodo(r.metodo));
|
|
2071
|
+
console.log(mh.sha(r.sha256));
|
|
2072
|
+
console.log(mh.linhas(r.intervalo ? `${r.intervalo.inicio}-${r.intervalo.fim}` : mh.naoAplicavel));
|
|
1933
2073
|
console.log('');
|
|
1934
2074
|
console.log(r.conteudo);
|
|
1935
2075
|
return 0;
|
|
1936
2076
|
}
|
|
1937
|
-
console.error(
|
|
2077
|
+
console.error(mh.desconhecido(sub));
|
|
1938
2078
|
return 2;
|
|
1939
2079
|
}
|
|
1940
2080
|
/**
|
|
@@ -2024,7 +2164,7 @@ function comandoShip(args) {
|
|
|
2024
2164
|
const dryRun = args.opcoes['dry-run'] === true;
|
|
2025
2165
|
// RM-061 (F2b, G2): o ship_done e o motivo nascem em pt-BR; so a impressao segue o locale.
|
|
2026
2166
|
const r = (0, locale_1.comLocale)('pt-BR', () => alvo && repo
|
|
2027
|
-
? [(0, entrega_pr_1.registrarEntregaExternaPorPr)(carregado, alvo, { repositorio: repo, pr: Number(numeroDoPr), dryRun })]
|
|
2167
|
+
? [(0, entrega_pr_1.registrarEntregaExternaPorPr)(carregado, alvo, { repositorio: repo, pr: Number(numeroDoPr), dryRun, remoto })]
|
|
2028
2168
|
: alvo ? [(0, entrega_pr_1.registrarEntregaPorPr)(carregado, alvo, { remoto, dryRun })] : (0, entrega_pr_1.registrarEntregasPorPr)(carregado, { remoto, dryRun }));
|
|
2029
2169
|
if (args.opcoes.json === true) {
|
|
2030
2170
|
console.log(JSON.stringify(r, null, 2));
|
|
@@ -2074,6 +2214,12 @@ function comandoShip(args) {
|
|
|
2074
2214
|
if (args.opcoes.remoto !== undefined)
|
|
2075
2215
|
(0, branch_de_estado_1.exigirRemoto)(args.opcoes.remoto, 'ship');
|
|
2076
2216
|
const autorizar = args.opcoes['autorizar-push'];
|
|
2217
|
+
// Security scan: `--allow-unscanned` exige quem autoriza; sem valor nao vira autorizacao em silencio.
|
|
2218
|
+
const semScan = args.opcoes['allow-unscanned'];
|
|
2219
|
+
if (semScan !== undefined && (typeof semScan !== 'string' || !semScan.trim())) {
|
|
2220
|
+
console.error(m.allowUnscannedSemValor);
|
|
2221
|
+
return 2;
|
|
2222
|
+
}
|
|
2077
2223
|
// RM-061 (F2b, G2): o que o ship grava (ledger, verificacao, mensagem do merge) nasce em pt-BR.
|
|
2078
2224
|
const r = (0, locale_1.comLocale)('pt-BR', () => (0, ship_1.ship)(carregado, id, {
|
|
2079
2225
|
para,
|
|
@@ -2082,6 +2228,7 @@ function comandoShip(args) {
|
|
|
2082
2228
|
mensagem: texto(args.opcoes.mensagem),
|
|
2083
2229
|
dryRun: args.opcoes['dry-run'] === true,
|
|
2084
2230
|
autorizarPush: typeof autorizar === 'string' ? autorizar : undefined,
|
|
2231
|
+
allowUnscanned: typeof semScan === 'string' ? semScan.trim() : undefined,
|
|
2085
2232
|
semPush: args.opcoes['sem-push'] === true,
|
|
2086
2233
|
// RM-058 N2 (A1 da rodada 2 do CHECK): o `--esperar` chega à fila pesada da verificação do ship, com aviso.
|
|
2087
2234
|
...((f) => ({ esperarFilaPesadaMs: f.esperarMs, avisoDaFilaPesada: { aoEsperar: f.aoEsperar, comandoDeEsperar: f.comandoDeEsperar } }))(filaPesadaDoCli(args, 'verify', `ork ship ${id} --para ${para} --esperar 30`)),
|
|
@@ -2097,21 +2244,17 @@ function comandoShip(args) {
|
|
|
2097
2244
|
*/
|
|
2098
2245
|
const SOBRAS_DO_OBJECTIVE = ['constraints', 'outcomes', 'threads', 'execution-runtime', 'validation-runtimes'];
|
|
2099
2246
|
function recusarSobraDoObjective(opcao) {
|
|
2100
|
-
console.error(
|
|
2101
|
-
' portfolio show nunca a leu. As duas vigas do envelope viraram propriedade de thread comum:\n' +
|
|
2102
|
-
' ork thread new "<nome>" --modo <MODO> --exige-runtime-diferente\n' +
|
|
2103
|
-
' o CHECK precisa de runtime que o GO nao usou\n' +
|
|
2104
|
-
' ork thread new "<nome>" --modo <MODO> --done "<criterio> :: <comando>"\n' +
|
|
2105
|
-
' criterio de pronto EXECUTAVEL, que vira claim e roda no ork verify');
|
|
2247
|
+
console.error((0, locale_1.msg)().operacao.produto.portfolio.opcaoAposentada(opcao));
|
|
2106
2248
|
return 2;
|
|
2107
2249
|
}
|
|
2108
2250
|
function comandoPortfolio(args) {
|
|
2109
2251
|
const root = (0, manifest_1.exigirManifesto)().raiz;
|
|
2110
2252
|
const sub = args.posicionais[1] ?? 'list';
|
|
2253
|
+
const m = (0, locale_1.msg)().operacao.produto.portfolio;
|
|
2111
2254
|
if (sub === 'inspect') {
|
|
2112
2255
|
const id = args.posicionais[2];
|
|
2113
2256
|
if (!id) {
|
|
2114
|
-
console.error(
|
|
2257
|
+
console.error(m.usoInspect);
|
|
2115
2258
|
return 2;
|
|
2116
2259
|
}
|
|
2117
2260
|
console.log(JSON.stringify((0, portfolio_context_1.inspectPortfolio)(root, id), null, 2));
|
|
@@ -2123,12 +2266,12 @@ function comandoPortfolio(args) {
|
|
|
2123
2266
|
const rawKind = args.posicionais[2];
|
|
2124
2267
|
const kind = rawKind ? aliases[rawKind] : undefined;
|
|
2125
2268
|
if (rawKind && !kind) {
|
|
2126
|
-
console.error(
|
|
2269
|
+
console.error(m.tipo);
|
|
2127
2270
|
return 2;
|
|
2128
2271
|
}
|
|
2129
2272
|
const items = (0, portfolio_1.listEntities)(root, kind, texto(args.opcoes.parent));
|
|
2130
2273
|
console.log(args.opcoes.json === true ? JSON.stringify({ schema: 'ork.portfolio-list/v1', updatedAt: (0, portfolio_1.readPortfolio)(root).updatedAt, items }, null, 2)
|
|
2131
|
-
: items.length ? items.map((item) => `${item.id}\t${item.kind}\t${item.status}\t${item.title}`).join('\n') :
|
|
2274
|
+
: items.length ? items.map((item) => `${item.id}\t${item.kind}\t${item.status}\t${item.title}`).join('\n') : m.vazio);
|
|
2132
2275
|
return 0;
|
|
2133
2276
|
}
|
|
2134
2277
|
if (sub === 'show') {
|
|
@@ -2137,22 +2280,22 @@ function comandoPortfolio(args) {
|
|
|
2137
2280
|
return recusarSobraDoObjective(sobra);
|
|
2138
2281
|
const id = args.posicionais[2];
|
|
2139
2282
|
if (!id) {
|
|
2140
|
-
console.error(
|
|
2283
|
+
console.error(m.usoShow);
|
|
2141
2284
|
return 2;
|
|
2142
2285
|
}
|
|
2143
2286
|
const item = (0, portfolio_1.findEntity)(root, id);
|
|
2144
2287
|
if (!item) {
|
|
2145
|
-
console.error(
|
|
2288
|
+
console.error(m.naoEncontrada(id));
|
|
2146
2289
|
return 1;
|
|
2147
2290
|
}
|
|
2148
|
-
console.log(args.opcoes.json === true ? JSON.stringify(item, null, 2) :
|
|
2291
|
+
console.log(args.opcoes.json === true ? JSON.stringify(item, null, 2) : m.estado(item.id, item.title, item.status));
|
|
2149
2292
|
return 0;
|
|
2150
2293
|
}
|
|
2151
2294
|
if (sub === 'create') {
|
|
2152
2295
|
const kind = aliases[args.posicionais[2] ?? ''];
|
|
2153
2296
|
const id = args.posicionais[3], title = texto(args.opcoes.title), parent = texto(args.opcoes.parent);
|
|
2154
2297
|
if (!kind || !id || !title) {
|
|
2155
|
-
console.error(
|
|
2298
|
+
console.error(m.usoCreate);
|
|
2156
2299
|
return 2;
|
|
2157
2300
|
}
|
|
2158
2301
|
const common = { id, title, description: texto(args.opcoes.description), ownerId: texto(args.opcoes.owner), status: texto(args.opcoes.status), acceptanceCriteria: split(texto(args.opcoes.acceptance), ';') };
|
|
@@ -2162,7 +2305,7 @@ function comandoPortfolio(args) {
|
|
|
2162
2305
|
console.log(JSON.stringify({ schema: 'ork.portfolio-created/v1', item }, null, 2));
|
|
2163
2306
|
return 0;
|
|
2164
2307
|
}
|
|
2165
|
-
console.error(
|
|
2308
|
+
console.error(m.desconhecido(sub));
|
|
2166
2309
|
return 2;
|
|
2167
2310
|
}
|
|
2168
2311
|
function comandoCreation(args) {
|
|
@@ -2171,8 +2314,9 @@ function comandoCreation(args) {
|
|
|
2171
2314
|
// Fachadas HTTP devem usar a API com principal e authorize autenticados no servidor.
|
|
2172
2315
|
const actor = { principal: `local:uid:${(0, node_os_1.userInfo)().uid}`, authorize: () => { } };
|
|
2173
2316
|
const sub = args.posicionais[1], id = args.posicionais[2];
|
|
2317
|
+
const m = (0, locale_1.msg)().operacao.produto.creation;
|
|
2174
2318
|
if (args.opcoes.principal !== undefined || args.opcoes.por !== undefined)
|
|
2175
|
-
throw new Error(
|
|
2319
|
+
throw new Error(m.identidade);
|
|
2176
2320
|
let result;
|
|
2177
2321
|
if (sub === 'session') {
|
|
2178
2322
|
const portfolio = (0, portfolio_1.readPortfolio)(loaded.raiz);
|
|
@@ -2186,18 +2330,18 @@ function comandoCreation(args) {
|
|
|
2186
2330
|
else if (sub === 'start') {
|
|
2187
2331
|
const file = texto(args.opcoes['input-file']);
|
|
2188
2332
|
if (!file) {
|
|
2189
|
-
console.error(
|
|
2333
|
+
console.error(m.usoStart);
|
|
2190
2334
|
return 2;
|
|
2191
2335
|
}
|
|
2192
2336
|
const content = fs.readFileSync(file, 'utf8');
|
|
2193
2337
|
if (Buffer.byteLength(content) > 100_000)
|
|
2194
|
-
throw new Error(
|
|
2338
|
+
throw new Error(m.arquivoGrande);
|
|
2195
2339
|
result = (0, creation_operation_1.startCreation)(loaded, actor, JSON.parse(content));
|
|
2196
2340
|
}
|
|
2197
2341
|
else if (sub === 'list')
|
|
2198
2342
|
result = (0, creation_operation_store_1.listCreationOperations)(loaded.raiz, actor.principal);
|
|
2199
2343
|
else if (!id) {
|
|
2200
|
-
console.error(
|
|
2344
|
+
console.error(m.exigeId);
|
|
2201
2345
|
return 2;
|
|
2202
2346
|
}
|
|
2203
2347
|
else if (sub === 'show' || sub === 'events') {
|
|
@@ -2207,13 +2351,13 @@ function comandoCreation(args) {
|
|
|
2207
2351
|
else if (sub === 'resume' || sub === 'compensate') {
|
|
2208
2352
|
const version = Number(texto(args.opcoes['expected-version']));
|
|
2209
2353
|
if (!Number.isSafeInteger(version) || version < 1) {
|
|
2210
|
-
console.error(
|
|
2354
|
+
console.error(m.versao);
|
|
2211
2355
|
return 2;
|
|
2212
2356
|
}
|
|
2213
2357
|
result = sub === 'resume' ? (0, creation_operation_1.resumeCreation)(loaded, actor, id, version) : (0, creation_operation_1.compensateCreation)(loaded, actor, id, version);
|
|
2214
2358
|
}
|
|
2215
2359
|
else {
|
|
2216
|
-
console.error(
|
|
2360
|
+
console.error(m.desconhecido);
|
|
2217
2361
|
return 2;
|
|
2218
2362
|
}
|
|
2219
2363
|
console.log(JSON.stringify(result, null, 2));
|
|
@@ -2239,28 +2383,33 @@ function comandoCreation(args) {
|
|
|
2239
2383
|
*/
|
|
2240
2384
|
function comandoObjective(args) {
|
|
2241
2385
|
const sub = args.posicionais[1] ?? 'list';
|
|
2242
|
-
console.error(
|
|
2243
|
-
' Ele descrevia um gate que nao bloqueava nada: das 137 threads do projeto, zero\n' +
|
|
2244
|
-
' tinham creationOrigin, que era a unica via pela qual o despacho o consultava.\n' +
|
|
2245
|
-
' As duas vigas que ele guardava viraram propriedade de thread comum:\n' +
|
|
2246
|
-
' ork thread new "<nome>" --modo <MODO> --exige-runtime-diferente\n' +
|
|
2247
|
-
' o CHECK precisa de runtime que o GO nao usou\n' +
|
|
2248
|
-
' ork thread new "<nome>" --modo <MODO> --done "<criterio> :: <comando>"\n' +
|
|
2249
|
-
' criterio de pronto EXECUTAVEL, que vira claim e roda no ork verify\n' +
|
|
2250
|
-
' Os envelopes ja gravados continuam em .orkastery/objectives, intocados.');
|
|
2386
|
+
console.error((0, locale_1.msg)().operacao.produto.objective(sub));
|
|
2251
2387
|
return 2;
|
|
2252
2388
|
}
|
|
2253
2389
|
function comandoCi(args) {
|
|
2254
2390
|
const carregado = (0, manifest_1.exigirManifesto)();
|
|
2255
2391
|
const sub = args.posicionais[1] ?? 'status';
|
|
2392
|
+
const m = (0, locale_1.msg)().operacao.produto.ci;
|
|
2256
2393
|
if (sub === 'prepare') {
|
|
2257
2394
|
const thread = args.posicionais[2];
|
|
2258
2395
|
if (!thread) {
|
|
2259
|
-
console.error(
|
|
2396
|
+
console.error(m.usoPrepare);
|
|
2260
2397
|
return 2;
|
|
2261
2398
|
}
|
|
2262
|
-
|
|
2263
|
-
|
|
2399
|
+
// RM-061 (F3d, GO-FIX 1): o lint vai ao ledger e o bundle ao disco no escopo pt-BR, como antes do `ci` entrar na
|
|
2400
|
+
// lista (D2); o aviso sai remontado no locale do comando, e a recusa, pela entrada do CLI. As linhas da barreira de
|
|
2401
|
+
// dado privado (RM-062) saem junto com os avisos, na ordem em que nascem.
|
|
2402
|
+
const linhas = [];
|
|
2403
|
+
let arquivo;
|
|
2404
|
+
try {
|
|
2405
|
+
arquivo = (0, locale_1.comLocale)('pt-BR', () => (0, ci_1.prepararBundleCi)(carregado, thread, { aoAvisar: (linha) => linhas.push({ aviso: true, linha }),
|
|
2406
|
+
aoInformar: (linha) => linhas.push({ aviso: false, linha }) }));
|
|
2407
|
+
}
|
|
2408
|
+
finally {
|
|
2409
|
+
for (const { aviso, linha } of linhas)
|
|
2410
|
+
console.log(aviso ? m.aviso((0, locale_1.remontar)(linha)) : (0, locale_1.remontar)(linha));
|
|
2411
|
+
}
|
|
2412
|
+
console.log(m.bundle(arquivo));
|
|
2264
2413
|
return 0;
|
|
2265
2414
|
}
|
|
2266
2415
|
if (sub === 'run') {
|
|
@@ -2279,34 +2428,86 @@ function comandoCi(args) {
|
|
|
2279
2428
|
}
|
|
2280
2429
|
const thread = args.posicionais[2];
|
|
2281
2430
|
if (!thread) {
|
|
2282
|
-
console.error(
|
|
2431
|
+
console.error(m.usoRun);
|
|
2283
2432
|
return 2;
|
|
2284
2433
|
}
|
|
2285
2434
|
const result = (0, ci_1.executarCi)(carregado, thread);
|
|
2286
|
-
console.log(args.opcoes.json === true ? JSON.stringify(result, null, 2) :
|
|
2435
|
+
console.log(args.opcoes.json === true ? JSON.stringify(result, null, 2) : m.resultado(result.status.ok, result.status.detail));
|
|
2287
2436
|
return result.status.ok ? 0 : 1;
|
|
2288
2437
|
}
|
|
2289
2438
|
if (sub === 'status') {
|
|
2290
2439
|
const sha = texto(args.opcoes.sha) ?? args.posicionais[2] ?? (0, util_1.exec)('git', ['rev-parse', 'HEAD'], carregado.raiz).stdout.trim();
|
|
2291
2440
|
if (!/^[0-9a-f]{40}$/.test(sha)) {
|
|
2292
2441
|
// Ensaio de 03/10 (R4): `--sha HEAD` ou um sha curto respondiam so a linha de uso, sem dizer por que.
|
|
2293
|
-
console.error(
|
|
2294
|
-
|
|
2295
|
-
console.error('uso: ork ci status --sha <sha de 40 caracteres> [--remoto origin]');
|
|
2442
|
+
console.error(m.sha);
|
|
2443
|
+
console.error(m.usoStatus);
|
|
2296
2444
|
return 2;
|
|
2297
2445
|
}
|
|
2298
2446
|
// RM-047: recusa o `--remoto` que nao e nome de remoto mesmo com o gate de CI desligado.
|
|
2299
2447
|
const remoto = (0, branch_de_estado_1.exigirRemoto)(args.opcoes.remoto === undefined ? 'origin' : args.opcoes.remoto, 'ci');
|
|
2300
2448
|
const result = (0, ci_1.consultarCi)(carregado, sha, remoto);
|
|
2301
|
-
console.log(args.opcoes.json === true ? JSON.stringify(result, null, 2) :
|
|
2449
|
+
console.log(args.opcoes.json === true ? JSON.stringify(result, null, 2) : m.status(result.ok, result.detail));
|
|
2302
2450
|
return result.ok ? 0 : 1;
|
|
2303
2451
|
}
|
|
2304
|
-
console.error(
|
|
2452
|
+
console.error(m.desconhecido(sub));
|
|
2305
2453
|
return 2;
|
|
2306
2454
|
}
|
|
2455
|
+
/**
|
|
2456
|
+
* RM-062 (F1): `ork privado varrer [--base REF] [--json]`, a varredura de dado privado do repositorio do diretorio
|
|
2457
|
+
* atual. Sem `--base`, os nomes e as linhas dos arquivos versionados (o passo do CI); com ela, o diff contra a
|
|
2458
|
+
* merge-base com `REF` e os nao rastreados. Sai 1 com achado sob a policy `dado_privado` em `block` ou sem a policy
|
|
2459
|
+
* (quem roda o comando pediu a varredura); em `warn` e `off`, 0 com o aviso. Sai 2 quando a varredura nao roda.
|
|
2460
|
+
*/
|
|
2461
|
+
function comandoPrivado(args) {
|
|
2462
|
+
const uso = 'uso: ork privado varrer [--base REF] [--json]';
|
|
2463
|
+
const opcoes = Object.keys(args.opcoes);
|
|
2464
|
+
if (args.posicionais[1] !== 'varrer' || args.posicionais.length > 2 || opcoes.some((k) => k !== 'base' && k !== 'json') ||
|
|
2465
|
+
('json' in args.opcoes && args.opcoes.json !== true) || ('base' in args.opcoes && typeof args.opcoes.base !== 'string')) {
|
|
2466
|
+
console.error(uso);
|
|
2467
|
+
return 2;
|
|
2468
|
+
}
|
|
2469
|
+
const topo = (0, util_1.exec)('git', ['rev-parse', '--show-toplevel'], process.cwd());
|
|
2470
|
+
if (!topo.ok) {
|
|
2471
|
+
console.error('erro: privado varrer: o diretorio atual nao esta num repositorio git');
|
|
2472
|
+
return 2;
|
|
2473
|
+
}
|
|
2474
|
+
const raiz = topo.stdout.trim();
|
|
2475
|
+
const carregado = (0, manifest_1.carregarManifesto)(raiz);
|
|
2476
|
+
const severidade = carregado ? (0, policies_1.severidadeDeclarada)(carregado.manifesto, 'dado_privado') : null;
|
|
2477
|
+
let estado = null;
|
|
2478
|
+
try {
|
|
2479
|
+
estado = (0, estado_thread_1.raizDoEstado)(raiz);
|
|
2480
|
+
}
|
|
2481
|
+
catch {
|
|
2482
|
+
estado = null;
|
|
2483
|
+
}
|
|
2484
|
+
const contexto = (0, dado_privado_1.contextoDaVarredura)(raiz, estado);
|
|
2485
|
+
const ref = texto(args.opcoes.base);
|
|
2486
|
+
const base = contexto.ok && ref ? (0, dado_privado_1.mergeBase)(raiz, ref) : null;
|
|
2487
|
+
const v = !contexto.ok ? null : ref ? (base ? (0, dado_privado_1.varrerDiff)(contexto.valor, base) : null) : (0, dado_privado_1.varrerArvore)(contexto.valor);
|
|
2488
|
+
const erro = !contexto.ok ? contexto.erro : !v ? `--base ${ref} nao tem merge-base com HEAD` : v.erro;
|
|
2489
|
+
const achados = v?.achados.length ?? 0;
|
|
2490
|
+
const reprova = !erro && achados > 0 && (severidade === null || severidade === 'block');
|
|
2491
|
+
if (args.opcoes.json === true) {
|
|
2492
|
+
console.log(JSON.stringify({ ...(v ?? {}), erro, severidade, ok: !erro && !reprova }, null, 2));
|
|
2493
|
+
}
|
|
2494
|
+
else {
|
|
2495
|
+
if (v)
|
|
2496
|
+
for (const linha of (0, dado_privado_1.relatorioDoDadoPrivado)(v))
|
|
2497
|
+
console.log(linha);
|
|
2498
|
+
const policy = severidade === null ? 'policy dado_privado nao declarada: o comando explicito reprova'
|
|
2499
|
+
: `policy dado_privado em ${severidade}`;
|
|
2500
|
+
console.log(erro ? `Veredito: NAO RODOU (${erro})`
|
|
2501
|
+
: !achados ? 'Veredito: nenhum dado privado nas linhas e nos nomes varridos.'
|
|
2502
|
+
: reprova ? `Veredito: REPROVADO (${achados} achado(s) de dado privado; ${policy})`
|
|
2503
|
+
: `Veredito: AVISO (${achados} achado(s) de dado privado; ${policy}, que nao reprova)`);
|
|
2504
|
+
}
|
|
2505
|
+
return erro ? 2 : reprova ? 1 : 0;
|
|
2506
|
+
}
|
|
2307
2507
|
function comandoLease(args) {
|
|
2308
2508
|
const carregado = (0, manifest_1.exigirManifesto)();
|
|
2309
2509
|
const sub = args.posicionais[1];
|
|
2510
|
+
const ml = (0, locale_1.msg)().operacao.restante.lease;
|
|
2310
2511
|
if (sub === undefined || sub === 'list') {
|
|
2311
2512
|
console.log((0, leases_1.tabelaDeLeases)(carregado.raiz));
|
|
2312
2513
|
return 0;
|
|
@@ -2314,38 +2515,38 @@ function comandoLease(args) {
|
|
|
2314
2515
|
if (sub === 'acquire' || sub === 'take') {
|
|
2315
2516
|
const nome = args.posicionais[2];
|
|
2316
2517
|
const thread = texto(args.opcoes.thread);
|
|
2317
|
-
const motivo = texto(args.opcoes.motivo) ??
|
|
2518
|
+
const motivo = texto(args.opcoes.motivo) ?? (0, locale_1.msg)('pt-BR').operacao.restante.lease.semMotivo;
|
|
2318
2519
|
if (!nome || !thread) {
|
|
2319
|
-
console.error(
|
|
2520
|
+
console.error(ml.usoAcquire);
|
|
2320
2521
|
return 2;
|
|
2321
2522
|
}
|
|
2322
2523
|
(0, thread_1.lerThread)(carregado.raiz, thread);
|
|
2323
|
-
const r = (0, leases_1.adquirirRegiao)(carregado.raiz, nome, { thread, motivo });
|
|
2524
|
+
const r = (0, locale_1.comLocale)('pt-BR', () => (0, leases_1.adquirirRegiao)(carregado.raiz, nome, { thread, motivo }));
|
|
2324
2525
|
if (r.ok) {
|
|
2325
|
-
console.log(
|
|
2326
|
-
console.log(
|
|
2526
|
+
console.log(ml.adquirido(r.nome, r.tipo, thread));
|
|
2527
|
+
console.log(ml.expira((0, horario_1.formatarDataHoraRotulada)(r.lease?.expiraEm)));
|
|
2327
2528
|
if (r.tomadoDeVencido)
|
|
2328
|
-
console.log(
|
|
2529
|
+
console.log(ml.tomado);
|
|
2329
2530
|
return 0;
|
|
2330
2531
|
}
|
|
2331
|
-
console.error(
|
|
2332
|
-
console.error(
|
|
2333
|
-
console.error(
|
|
2334
|
-
console.error(
|
|
2335
|
-
console.error(
|
|
2532
|
+
console.error(ml.naoAdquirido(r.nome));
|
|
2533
|
+
console.error(ml.motivoTipado(r.motivo));
|
|
2534
|
+
console.error(ml.detalhe((0, horario_1.localizarTextoRotulado)(r.detalhe)));
|
|
2535
|
+
console.error(ml.posicao(r.posicaoNaFila));
|
|
2536
|
+
console.error(ml.correcao(r.correcao));
|
|
2336
2537
|
return 1;
|
|
2337
2538
|
}
|
|
2338
2539
|
if (sub === 'release') {
|
|
2339
2540
|
const nome = args.posicionais[2];
|
|
2340
2541
|
if (!nome) {
|
|
2341
|
-
console.error(
|
|
2542
|
+
console.error(ml.usoRelease);
|
|
2342
2543
|
return 2;
|
|
2343
2544
|
}
|
|
2344
|
-
const r = (0, leases_1.liberar)(carregado.raiz, nome, texto(args.opcoes.thread) ?? '', args.opcoes.forcar === true);
|
|
2545
|
+
const r = (0, locale_1.comLocale)('pt-BR', () => (0, leases_1.liberar)(carregado.raiz, nome, texto(args.opcoes.thread) ?? '', args.opcoes.forcar === true));
|
|
2345
2546
|
console.log(r.detalhe);
|
|
2346
2547
|
return r.ok ? 0 : 1;
|
|
2347
2548
|
}
|
|
2348
|
-
console.error(
|
|
2549
|
+
console.error(ml.desconhecido(sub));
|
|
2349
2550
|
return 2;
|
|
2350
2551
|
}
|
|
2351
2552
|
/**
|
|
@@ -2369,6 +2570,7 @@ function comandoBoard(args) {
|
|
|
2369
2570
|
const carregado = (0, manifest_1.exigirManifesto)();
|
|
2370
2571
|
const sub = args.posicionais[1];
|
|
2371
2572
|
const todos = args.opcoes.all === true || args.opcoes.todos === true;
|
|
2573
|
+
const mb = (0, locale_1.msg)().operacao.restante.board;
|
|
2372
2574
|
if (sub === 'plan' || sub === 'plano') {
|
|
2373
2575
|
const plano = (0, board_1.planejar)(carregado);
|
|
2374
2576
|
const consulta = consultaDoBoard(carregado, { plano: true, todos: false });
|
|
@@ -2379,7 +2581,7 @@ function comandoBoard(args) {
|
|
|
2379
2581
|
return 0;
|
|
2380
2582
|
}
|
|
2381
2583
|
if (sub === 'reap') {
|
|
2382
|
-
const devolvidas = (0, board_1.devolverVagas)(carregado, { por: texto(args.opcoes.por) });
|
|
2584
|
+
const devolvidas = (0, locale_1.comLocale)('pt-BR', () => (0, board_1.devolverVagas)(carregado, { por: texto(args.opcoes.por) }));
|
|
2383
2585
|
if (args.opcoes.json === true)
|
|
2384
2586
|
console.log(JSON.stringify(devolvidas, null, 2));
|
|
2385
2587
|
else
|
|
@@ -2387,8 +2589,8 @@ function comandoBoard(args) {
|
|
|
2387
2589
|
return 0;
|
|
2388
2590
|
}
|
|
2389
2591
|
if (sub !== undefined && sub !== 'list') {
|
|
2390
|
-
console.error(
|
|
2391
|
-
console.error(
|
|
2592
|
+
console.error(mb.desconhecido(sub));
|
|
2593
|
+
console.error(mb.uso);
|
|
2392
2594
|
return 2;
|
|
2393
2595
|
}
|
|
2394
2596
|
const consulta = consultaDoBoard(carregado, { plano: false, todos });
|
|
@@ -2404,7 +2606,7 @@ function comandoBoard(args) {
|
|
|
2404
2606
|
console.log('');
|
|
2405
2607
|
// RM-052: sem o remoto, nada foi lido; dizer "nenhuma publicou" seria a frase do incidente de 29/09.
|
|
2406
2608
|
if (consulta.projeto.remoto === null) {
|
|
2407
|
-
console.log(
|
|
2609
|
+
console.log(mb.semRemoto(carregado.manifesto.project.name, carregado.manifesto.fabrica.remoto));
|
|
2408
2610
|
}
|
|
2409
2611
|
else {
|
|
2410
2612
|
const painel = (0, fabrica_estado_1.lerFabrica)(carregado.raiz, { remoto: carregado.manifesto.fabrica.remoto,
|
|
@@ -2424,6 +2626,7 @@ const CONTRATO_DO_BOARD = 'ork.board/v1';
|
|
|
2424
2626
|
function comandoFabrica(args) {
|
|
2425
2627
|
const carregado = (0, manifest_1.exigirManifesto)();
|
|
2426
2628
|
const sub = args.posicionais[1];
|
|
2629
|
+
const mf = (0, locale_1.msg)().operacao.restante.fabrica;
|
|
2427
2630
|
// RM-063 (F1): a batida e do crontab desta maquina; nao le nem escreve o remoto.
|
|
2428
2631
|
if (sub === 'batida')
|
|
2429
2632
|
return comandoDaBatida(carregado, args);
|
|
@@ -2444,15 +2647,13 @@ function comandoFabrica(args) {
|
|
|
2444
2647
|
console.log(JSON.stringify(r, null, 2));
|
|
2445
2648
|
else
|
|
2446
2649
|
console.log(r.acao === 'publicou'
|
|
2447
|
-
?
|
|
2448
|
-
: r.acao === 'ocupado'
|
|
2449
|
-
? `Fabrica: outra publicacao desta maquina esta em andamento; tente de novo em instantes.`
|
|
2450
|
-
: `Fabrica: retrato de ${r.maquina} igual ao ultimo publicado; nada a enviar (use --forcar para publicar mesmo assim).`);
|
|
2650
|
+
? mf.publicou(r.maquina, r.threads, r.commit?.slice(0, 7), r.tentativas)
|
|
2651
|
+
: r.acao === 'ocupado' ? mf.ocupada : mf.igual(r.maquina));
|
|
2451
2652
|
if (!(0, maquina_1.fabricaCompartilhada)(carregado.manifesto) && !silencioso) {
|
|
2452
|
-
console.log(
|
|
2653
|
+
console.log(mf.soQuandoPede);
|
|
2453
2654
|
// RM-047 (P5): o manifesto que pede a fabrica nao liga a publicacao desta maquina.
|
|
2454
2655
|
if (carregado.manifesto.fabrica.compartilhada)
|
|
2455
|
-
console.log(
|
|
2656
|
+
console.log(mf.manifestoPede);
|
|
2456
2657
|
}
|
|
2457
2658
|
return 0;
|
|
2458
2659
|
}
|
|
@@ -2473,27 +2674,25 @@ function comandoFabrica(args) {
|
|
|
2473
2674
|
const avisoDoRegistro = (0, projeto_alvo_1.registrarProjetoEmSilencio)(carregado.raiz, 'fabrica entrar');
|
|
2474
2675
|
if (avisoDoRegistro)
|
|
2475
2676
|
console.error(avisoDoRegistro);
|
|
2476
|
-
console.log(
|
|
2477
|
-
console.log(
|
|
2677
|
+
console.log(mf.entrou(config.nome));
|
|
2678
|
+
console.log(mf.primeiro(r.threads, r.commit?.slice(0, 7)));
|
|
2478
2679
|
if (process.env.ORK_MAQUINA && process.env.ORK_MAQUINA.trim() !== config.nome) {
|
|
2479
|
-
console.log(
|
|
2680
|
+
console.log(mf.maquinaAmbiente(process.env.ORK_MAQUINA));
|
|
2480
2681
|
}
|
|
2481
2682
|
return 0;
|
|
2482
2683
|
}
|
|
2483
2684
|
if (sub === 'sair') {
|
|
2484
2685
|
const config = (0, maquina_1.gravarConfigDaMaquina)({ fabricaCompartilhada: false });
|
|
2485
2686
|
const r = (0, fabrica_estado_1.removerMaquina)(carregado, { remoto });
|
|
2486
|
-
console.log(
|
|
2487
|
-
(r ? ` Retrato removido de ork/fabrica-estado (${r.slice(0, 7)}).` : ' Nao havia retrato desta maquina na branch.'));
|
|
2687
|
+
console.log(mf.saiu((0, maquina_1.nomeDaMaquina)(), r ? r.slice(0, 7) : null));
|
|
2488
2688
|
if ((0, maquina_1.fabricaCompartilhada)(carregado.manifesto))
|
|
2489
|
-
console.log(
|
|
2689
|
+
console.log(mf.ambienteLiga);
|
|
2490
2690
|
void config;
|
|
2491
2691
|
return 0;
|
|
2492
2692
|
}
|
|
2493
2693
|
if (sub !== undefined && sub !== 'list') {
|
|
2494
|
-
console.error(
|
|
2495
|
-
console.error(
|
|
2496
|
-
' | fabrica batida [status|instalar|remover] [--por Q] [--json]');
|
|
2694
|
+
console.error(mf.desconhecido(sub));
|
|
2695
|
+
console.error(mf.uso);
|
|
2497
2696
|
return 2;
|
|
2498
2697
|
}
|
|
2499
2698
|
// RM-052: a fabrica le a branch de UM projeto, no remoto dele; o cabecalho diz qual e o que ficou de fora.
|
|
@@ -2512,7 +2711,7 @@ function comandoFabrica(args) {
|
|
|
2512
2711
|
}
|
|
2513
2712
|
console.log([...(0, projeto_alvo_1.linhasDaConsulta)(consulta), ''].join('\n'));
|
|
2514
2713
|
console.log(url === null
|
|
2515
|
-
?
|
|
2714
|
+
? mf.semRemoto(carregado.manifesto.project.name, remoto)
|
|
2516
2715
|
: (0, fabrica_estado_1.textoDaFabrica)(painel, (0, maquina_1.nomeDaMaquina)()));
|
|
2517
2716
|
// RM-047 (P5): o manifesto pede a fabrica, mas quem liga a publicacao e a maquina.
|
|
2518
2717
|
const pedida = (0, maquina_1.avisoDaFabricaPedida)(carregado.manifesto);
|
|
@@ -2529,7 +2728,7 @@ function comandoDaBatida(carregado, args) {
|
|
|
2529
2728
|
const acao = args.posicionais[2] ?? 'status';
|
|
2530
2729
|
const json = args.opcoes.json === true;
|
|
2531
2730
|
if (acao === 'status') {
|
|
2532
|
-
const estado = (0, fabrica_batida_1.estadoDaBatida)(carregado.raiz);
|
|
2731
|
+
const estado = (0, fabrica_batida_1.estadoDaBatida)(carregado.raiz, { projeto: carregado.manifesto.project.name });
|
|
2533
2732
|
console.log(json ? JSON.stringify(estado, null, 2) : (0, fabrica_batida_1.textoDoEstadoDaBatida)(estado));
|
|
2534
2733
|
return estado.leitura.ok && estado.instalada ? 0 : 1;
|
|
2535
2734
|
}
|
|
@@ -2539,7 +2738,7 @@ function comandoDaBatida(carregado, args) {
|
|
|
2539
2738
|
console.log(json ? JSON.stringify(r, null, 2) : (0, fabrica_batida_1.textoDoResultadoDaBatida)(r));
|
|
2540
2739
|
return 0;
|
|
2541
2740
|
}
|
|
2542
|
-
console.error(
|
|
2741
|
+
console.error((0, locale_1.msg)().operacao.restante.fabrica.batida.uso);
|
|
2543
2742
|
return 2;
|
|
2544
2743
|
}
|
|
2545
2744
|
/**
|
|
@@ -2549,84 +2748,77 @@ function comandoDaBatida(carregado, args) {
|
|
|
2549
2748
|
*/
|
|
2550
2749
|
function comandoNetwork(args) {
|
|
2551
2750
|
const sub = args.posicionais[1];
|
|
2552
|
-
// RM-054: `network roadmap` tem o proprio --projeto e o proprio uso.
|
|
2751
|
+
// RM-054: `network roadmap` tem o proprio --projeto e o proprio uso (e segue em pt-BR, G6 da RM-061 F3b).
|
|
2553
2752
|
if (sub === 'roadmap')
|
|
2554
2753
|
return comandoNetworkRoadmap(args);
|
|
2555
2754
|
const diretorio = process.cwd();
|
|
2556
|
-
|
|
2557
|
-
|
|
2558
|
-
|
|
2755
|
+
// RM-061 (F3b, D3): o texto pelo catalogo; o que se grava (adesao, retrato, casa) roda no escopo pt-BR, e o nome da
|
|
2756
|
+
// maquina, a casa, a forja e o commit saem como vieram.
|
|
2757
|
+
const mn = (0, locale_1.msg)().network;
|
|
2559
2758
|
const forja = texto(args.opcoes.forja), repositorio = texto(args.opcoes.repositorio);
|
|
2560
2759
|
if ((args.opcoes.forja !== undefined && !(0, rede_forja_1.ehNomeDeForja)(forja)) || args.opcoes.repositorio === true ||
|
|
2561
2760
|
(repositorio !== undefined && !/^(?:[A-Za-z0-9][A-Za-z0-9._-]{0,99}\/)?[A-Za-z0-9][A-Za-z0-9._-]{0,99}$/.test(repositorio))) {
|
|
2562
|
-
console.error(uso);
|
|
2761
|
+
console.error(mn.uso);
|
|
2563
2762
|
return 2;
|
|
2564
2763
|
}
|
|
2565
2764
|
if (sub === 'entrar') {
|
|
2566
|
-
const r = (0, rede_1.entrarNaRede)({ maquina: texto(args.opcoes.maquina), forja: (0, rede_forja_1.ehNomeDeForja)(forja) ? forja : undefined,
|
|
2567
|
-
tomarNome: args.opcoes.forcar === true });
|
|
2568
|
-
console.log(
|
|
2569
|
-
|
|
2570
|
-
console.log(` Primeiro retrato publicado (${r.publicacao.commit?.slice(0, 7)}). Depois, esta maquina publica sozinha na batida do pulse`);
|
|
2765
|
+
const r = (0, locale_1.comLocale)('pt-BR', () => (0, rede_1.entrarNaRede)({ maquina: texto(args.opcoes.maquina), forja: (0, rede_forja_1.ehNomeDeForja)(forja) ? forja : undefined,
|
|
2766
|
+
repositorio, diretorio, tomarNome: args.opcoes.forcar === true }));
|
|
2767
|
+
console.log(mn.entrou(r.publicacao.maquina, r.casa.dono, r.casa.forja, (0, rede_1.refDaCasa)(r.casa), r.criado));
|
|
2768
|
+
console.log(mn.primeiroRetrato(String(r.publicacao.commit?.slice(0, 7))));
|
|
2571
2769
|
if (r.publicacao.tomouNome)
|
|
2572
|
-
console.log(
|
|
2573
|
-
console.log(
|
|
2574
|
-
for (const d of r.publicacao.descartados)
|
|
2575
|
-
console.log(
|
|
2576
|
-
}
|
|
2770
|
+
console.log(mn.tomouNome(r.publicacao.maquina));
|
|
2771
|
+
console.log(mn.eAoCriar);
|
|
2772
|
+
for (const d of r.publicacao.descartados)
|
|
2773
|
+
console.log(mn.avisoDescartado(d.padrao, d.campo));
|
|
2577
2774
|
if (process.env.ORK_MAQUINA && process.env.ORK_MAQUINA.trim() !== r.publicacao.maquina) {
|
|
2578
|
-
console.log(
|
|
2775
|
+
console.log(mn.avisoOrkMaquina(process.env.ORK_MAQUINA));
|
|
2579
2776
|
}
|
|
2580
2777
|
return 0;
|
|
2581
2778
|
}
|
|
2582
2779
|
if (sub === 'sair') {
|
|
2583
|
-
const r = (0, rede_1.sairDaRede)({ forja: (0, rede_forja_1.ehNomeDeForja)(forja) ? forja : undefined, repositorio });
|
|
2584
|
-
console.log(
|
|
2585
|
-
|
|
2586
|
-
|
|
2587
|
-
|
|
2588
|
-
|
|
2589
|
-
: ` Nao havia retrato desta maquina${r.casa ? ` em ${r.casa}` : ' numa casa alcancavel'}.`));
|
|
2590
|
-
if ((0, maquina_1.lerConfigDaMaquina)()?.fabricaCompartilhada) {
|
|
2591
|
-
console.log(' A fabrica compartilhada dos projetos continua publicando daqui (ork/fabrica-estado); ork fabrica sair em cada um para parar.');
|
|
2592
|
-
}
|
|
2780
|
+
const r = (0, locale_1.comLocale)('pt-BR', () => (0, rede_1.sairDaRede)({ forja: (0, rede_forja_1.ehNomeDeForja)(forja) ? forja : undefined, repositorio }));
|
|
2781
|
+
console.log(mn.saiu(r.maquina, r.commit ? mn.retratoRemovido(r.casa, r.commit.slice(0, 7))
|
|
2782
|
+
: r.alheio ? mn.retratoDeOutraInstalacao(r.maquina, r.casa, r.mesmoHostname === true)
|
|
2783
|
+
: mn.semRetrato(r.casa)));
|
|
2784
|
+
if ((0, maquina_1.lerConfigDaMaquina)()?.fabricaCompartilhada)
|
|
2785
|
+
console.log(mn.fabricaContinua);
|
|
2593
2786
|
return 0;
|
|
2594
2787
|
}
|
|
2595
2788
|
if (sub === 'publicar') {
|
|
2596
2789
|
if (args.opcoes.silencioso === true) {
|
|
2597
2790
|
// O filho do evento de thread: quem disparou ja tomou a vez (teto de 14 min) e nao espera.
|
|
2791
|
+
// RM-061 (F3b): o rede.log guarda o que aconteceu em pt-BR, com qualquer lingua no ambiente.
|
|
2598
2792
|
try {
|
|
2599
|
-
(0, rede_adesao_1.registrarNaRede)({ ...(0, rede_1.publicarRede)({ diretorio }), origem: 'evento' });
|
|
2793
|
+
(0, locale_1.comLocale)('pt-BR', () => (0, rede_adesao_1.registrarNaRede)({ ...(0, rede_1.publicarRede)({ diretorio }), origem: 'evento' }));
|
|
2600
2794
|
return 0;
|
|
2601
2795
|
}
|
|
2602
2796
|
catch (e) {
|
|
2603
|
-
(0, rede_adesao_1.registrarNaRede)({ acao: 'falhou', origem: 'evento', erro: e.message });
|
|
2797
|
+
(0, locale_1.comLocale)('pt-BR', () => (0, rede_adesao_1.registrarNaRede)({ acao: 'falhou', origem: 'evento', erro: e.message }));
|
|
2604
2798
|
return 1;
|
|
2605
2799
|
}
|
|
2606
2800
|
}
|
|
2607
|
-
const r = (0, rede_1.publicarRede)({ diretorio, forcar: args.opcoes.forcar === true,
|
|
2801
|
+
const r = (0, locale_1.comLocale)('pt-BR', () => (0, rede_1.publicarRede)({ diretorio, forcar: args.opcoes.forcar === true,
|
|
2802
|
+
forja: (0, rede_forja_1.ehNomeDeForja)(forja) ? forja : undefined, repositorio }));
|
|
2608
2803
|
if (args.opcoes.json === true)
|
|
2609
2804
|
console.log(JSON.stringify(r, null, 2));
|
|
2610
2805
|
else
|
|
2611
|
-
console.log(r.acao === 'publicou'
|
|
2612
|
-
|
|
2613
|
-
: r.acao === 'ocupado'
|
|
2614
|
-
? 'Rede: outra publicacao desta maquina esta em andamento; tente de novo em instantes.'
|
|
2615
|
-
: `Rede: retrato de ${r.maquina} igual ao ultimo publicado em ${r.casa}; nada a enviar (use --forcar para publicar mesmo assim).`);
|
|
2806
|
+
console.log(r.acao === 'publicou' ? mn.publicou(r.maquina, r.casa, r.commit?.slice(0, 7), r.tentativas)
|
|
2807
|
+
: r.acao === 'ocupado' ? mn.ocupado : mn.igual(r.maquina, r.casa));
|
|
2616
2808
|
if (args.opcoes.json !== true) {
|
|
2617
2809
|
for (const d of r.descartados)
|
|
2618
|
-
console.log(
|
|
2810
|
+
console.log(mn.avisoDescartado(d.padrao, d.campo));
|
|
2619
2811
|
}
|
|
2620
2812
|
return 0;
|
|
2621
2813
|
}
|
|
2622
2814
|
if (sub !== undefined && sub !== 'status') {
|
|
2623
|
-
console.error(
|
|
2624
|
-
console.error(uso);
|
|
2815
|
+
console.error((0, locale_1.msg)().cli.subcomandoDesconhecido('network', sub));
|
|
2816
|
+
console.error(mn.uso);
|
|
2625
2817
|
return 2;
|
|
2626
2818
|
}
|
|
2627
2819
|
// RM-054 (fatia 3): o host sem cwd de projeto (RM-052, D3) nao faz do diretorio do gateway um projeto lido.
|
|
2628
2820
|
const doHost = (process.env[projeto_alvo_1.ENV_PROJETO_EXPLICITO] ?? '').trim() === '1';
|
|
2629
|
-
const status = (0, rede_status_1.lerRede)({ semRemoto: args.opcoes['sem-remoto'] === true, diretorio: doHost ? null : diretorio });
|
|
2821
|
+
const status = (0, locale_1.comLocale)('pt-BR', () => (0, rede_status_1.lerRede)({ semRemoto: args.opcoes['sem-remoto'] === true, diretorio: doHost ? null : diretorio }));
|
|
2630
2822
|
console.log(args.opcoes.json === true ? (0, rede_status_1.jsonDaRede)(status) : (0, rede_status_1.textoDaRede)(status));
|
|
2631
2823
|
return 0;
|
|
2632
2824
|
}
|
|
@@ -2637,54 +2829,55 @@ function comandoNetwork(args) {
|
|
|
2637
2829
|
*/
|
|
2638
2830
|
function comandoProjetos(args, projeto) {
|
|
2639
2831
|
const sub = args.posicionais[1] ?? 'list';
|
|
2832
|
+
const m = (0, locale_1.msg)().projetos.cli;
|
|
2640
2833
|
if (sub === 'list' || sub === 'listar') {
|
|
2641
2834
|
const projetos = (0, projeto_alvo_1.listarProjetos)();
|
|
2642
2835
|
if (args.opcoes.json === true) {
|
|
2643
2836
|
console.log(JSON.stringify({ contrato: projeto_alvo_1.CONTRATO_PROJETOS, arquivo: (0, projeto_alvo_1.caminhoDoRegistro)(), projetos }, null, 2));
|
|
2644
2837
|
return 0;
|
|
2645
2838
|
}
|
|
2646
|
-
console.log(
|
|
2839
|
+
console.log(m.titulo((0, projeto_alvo_1.raizParaExibir)((0, projeto_alvo_1.caminhoDoRegistro)())));
|
|
2647
2840
|
console.log('');
|
|
2648
2841
|
if (projetos.length === 0) {
|
|
2649
|
-
console.log(
|
|
2842
|
+
console.log(m.nenhum);
|
|
2650
2843
|
return 0;
|
|
2651
2844
|
}
|
|
2652
|
-
console.log((0, util_1.tabela)([
|
|
2653
|
-
p.nome, p.abbrev || '-', (0, projeto_alvo_1.raizParaExibir)(p.raiz), p.remoto ??
|
|
2845
|
+
console.log((0, util_1.tabela)([...m.cabecalho], projetos.map((p) => [
|
|
2846
|
+
p.nome, p.abbrev || '-', (0, projeto_alvo_1.raizParaExibir)(p.raiz), p.remoto ?? m.semRemoto, p.presente ? m.sim : m.ausente,
|
|
2654
2847
|
(0, horario_1.formatarDataHora)(p.atualizadoEm)
|
|
2655
2848
|
])));
|
|
2656
2849
|
console.log('');
|
|
2657
|
-
console.log(
|
|
2850
|
+
console.log(`${m.selecao} ${(0, horario_1.legendaDoFuso)()}`);
|
|
2658
2851
|
return 0;
|
|
2659
2852
|
}
|
|
2660
2853
|
if (sub === 'registrar') {
|
|
2661
2854
|
const caminho = args.posicionais[2];
|
|
2662
2855
|
if (caminho !== undefined && projeto !== undefined)
|
|
2663
|
-
throw new Error(
|
|
2856
|
+
throw new Error(m.usoRegistrar);
|
|
2664
2857
|
const alvo = caminho === undefined ? (0, projeto_alvo_1.resolverProjetoAlvo)({ opcao: projeto ?? null }) : null;
|
|
2665
2858
|
const p = (0, projeto_alvo_1.registrarProjeto)(caminho ?? alvo?.raiz ?? process.cwd(), 'projetos registrar');
|
|
2666
2859
|
if (args.opcoes.json === true) {
|
|
2667
2860
|
console.log(JSON.stringify(p, null, 2));
|
|
2668
2861
|
return 0;
|
|
2669
2862
|
}
|
|
2670
|
-
console.log(
|
|
2863
|
+
console.log(m.registrado(p.nome, p.abbrev || '-', (0, projeto_alvo_1.raizParaExibir)(p.raiz), p.remoto ?? m.semRemoto));
|
|
2671
2864
|
return 0;
|
|
2672
2865
|
}
|
|
2673
2866
|
if (sub === 'esquecer') {
|
|
2674
2867
|
const alvo = args.posicionais[2] ?? projeto;
|
|
2675
2868
|
if (!alvo)
|
|
2676
|
-
throw new Error(
|
|
2869
|
+
throw new Error(m.usoEsquecer);
|
|
2677
2870
|
const sairam = (0, projeto_alvo_1.esquecerProjeto)(alvo);
|
|
2678
2871
|
if (args.opcoes.json === true) {
|
|
2679
2872
|
console.log(JSON.stringify(sairam, null, 2));
|
|
2680
2873
|
return 0;
|
|
2681
2874
|
}
|
|
2682
2875
|
for (const p of sairam)
|
|
2683
|
-
console.log(
|
|
2876
|
+
console.log(m.esquecido(p.nome, (0, projeto_alvo_1.raizParaExibir)(p.raiz)));
|
|
2684
2877
|
return 0;
|
|
2685
2878
|
}
|
|
2686
|
-
console.error(
|
|
2687
|
-
console.error(
|
|
2879
|
+
console.error(m.desconhecido(sub));
|
|
2880
|
+
console.error(m.uso);
|
|
2688
2881
|
return 2;
|
|
2689
2882
|
}
|
|
2690
2883
|
/**
|
|
@@ -2698,15 +2891,16 @@ function comandoProjetos(args, projeto) {
|
|
|
2698
2891
|
function comandoOrquestracao(args) {
|
|
2699
2892
|
const carregado = (0, manifest_1.exigirManifesto)();
|
|
2700
2893
|
const sub = args.posicionais[1];
|
|
2894
|
+
const m = (0, locale_1.msg)().operacao.restante.monitor;
|
|
2701
2895
|
if (sub !== undefined && sub !== 'status') {
|
|
2702
|
-
console.error(
|
|
2703
|
-
console.error(
|
|
2896
|
+
console.error(m.desconhecido(sub));
|
|
2897
|
+
console.error(m.uso);
|
|
2704
2898
|
return 2;
|
|
2705
2899
|
}
|
|
2706
2900
|
const bruto = texto(args.opcoes.atencao);
|
|
2707
2901
|
const atencaoMin = bruto === undefined ? undefined : Number(bruto);
|
|
2708
2902
|
if (atencaoMin !== undefined && (!Number.isFinite(atencaoMin) || atencaoMin < 0)) {
|
|
2709
|
-
console.error(
|
|
2903
|
+
console.error(m.atencao(bruto ?? ''));
|
|
2710
2904
|
return 2;
|
|
2711
2905
|
}
|
|
2712
2906
|
const monitor = (0, orquestracao_1.montarMonitor)(carregado, {
|
|
@@ -2724,74 +2918,88 @@ function comandoOrquestracao(args) {
|
|
|
2724
2918
|
}
|
|
2725
2919
|
return 0;
|
|
2726
2920
|
}
|
|
2921
|
+
/**
|
|
2922
|
+
* RM-037 (defeito 2 de 19 e 20/10/2026): o preparo de `worktree.dependencias` na worktree nova, dito ao lado dela. A
|
|
2923
|
+
* falha vai ao stderr com o comando exato e o diretorio, e a thread continua criada.
|
|
2924
|
+
*/
|
|
2925
|
+
function relatarDependencias(p, dir) {
|
|
2926
|
+
if (!p)
|
|
2927
|
+
return;
|
|
2928
|
+
const m = (0, locale_1.msg)().worktree;
|
|
2929
|
+
if (p.ok)
|
|
2930
|
+
console.log(m.dependenciasProntas(p.comando, Math.round(p.duracaoMs / 1000)));
|
|
2931
|
+
else
|
|
2932
|
+
console.error(m.dependenciasFalharam(p.comando, p.code, p.causa === 'timeout', dir, (0, dependencias_da_worktree_1.ultimaLinhaDoPreparo)(p)));
|
|
2933
|
+
}
|
|
2727
2934
|
function comandoWorktree(args) {
|
|
2728
2935
|
const carregado = (0, manifest_1.exigirManifesto)();
|
|
2729
2936
|
const sub = args.posicionais[1];
|
|
2730
2937
|
const id = args.posicionais[2];
|
|
2938
|
+
// RM-061 (F3b, D3): a moldura pelo catalogo; o que os quatro subcomandos gravam (ledger, thread.json, a soltura dos
|
|
2939
|
+
// leases) roda no escopo pt-BR, e o detalhe e a correcao do resultado sao remontados no locale do comando.
|
|
2940
|
+
const m = (0, locale_1.msg)().worktree;
|
|
2731
2941
|
if (!sub || !id) {
|
|
2732
|
-
console.error(
|
|
2942
|
+
console.error(m.uso);
|
|
2733
2943
|
return 2;
|
|
2734
2944
|
}
|
|
2945
|
+
const bloqueio = (titulo, r) => {
|
|
2946
|
+
console.error(titulo);
|
|
2947
|
+
console.error(m.motivoTipado(r.motivo));
|
|
2948
|
+
console.error(m.detalhe((0, locale_1.remontar)(r.detalhe)));
|
|
2949
|
+
console.error(m.correcao((0, locale_1.remontar)(r.correcao)));
|
|
2950
|
+
};
|
|
2735
2951
|
if (sub === 'ensure') {
|
|
2736
|
-
const r = (0, worktree_1.garantirWorktree)(carregado, id);
|
|
2952
|
+
const r = (0, locale_1.comLocale)('pt-BR', () => (0, worktree_1.garantirWorktree)(carregado, id));
|
|
2737
2953
|
if (!r.ok) {
|
|
2738
|
-
|
|
2739
|
-
console.error(` motivo tipado: ${r.motivo}`);
|
|
2740
|
-
console.error(` detalhe: ${r.detalhe}`);
|
|
2741
|
-
console.error(` correcao: ${r.correcao}`);
|
|
2954
|
+
bloqueio(m.naoGarantida(id), r);
|
|
2742
2955
|
return 1;
|
|
2743
2956
|
}
|
|
2744
|
-
console.log(r.criada ?
|
|
2745
|
-
console.log(
|
|
2746
|
-
console.log(
|
|
2747
|
-
console.log(
|
|
2748
|
-
console.log(` ${r.detalhe}`);
|
|
2957
|
+
console.log(r.criada ? m.criada(id) : m.jaExistia(id));
|
|
2958
|
+
console.log(m.linhaDir(r.dir));
|
|
2959
|
+
console.log(m.linhaBranch(r.branch));
|
|
2960
|
+
console.log(m.linhaBase(r.base));
|
|
2961
|
+
console.log(` ${(0, locale_1.remontar)(r.detalhe)}`);
|
|
2962
|
+
relatarDependencias(r.dependencias, r.dir);
|
|
2749
2963
|
return 0;
|
|
2750
2964
|
}
|
|
2751
2965
|
if (sub === 'sync') {
|
|
2752
|
-
const r = (0, worktree_1.sincronizarWorktree)(carregado, id, { dryRun: args.opcoes['dry-run'] === true });
|
|
2966
|
+
const r = (0, locale_1.comLocale)('pt-BR', () => (0, worktree_1.sincronizarWorktree)(carregado, id, { dryRun: args.opcoes['dry-run'] === true }));
|
|
2753
2967
|
if (!r.ok) {
|
|
2754
|
-
|
|
2755
|
-
console.error(` motivo tipado: ${r.motivo}`);
|
|
2756
|
-
console.error(` detalhe: ${r.detalhe}`);
|
|
2757
|
-
console.error(` correcao: ${r.correcao}`);
|
|
2968
|
+
bloqueio(m.syncBloqueado(id), r);
|
|
2758
2969
|
return 1;
|
|
2759
2970
|
}
|
|
2760
|
-
console.log(r.dryRun ?
|
|
2761
|
-
console.log(
|
|
2762
|
-
console.log(
|
|
2763
|
-
console.log(
|
|
2764
|
-
console.log(` ${r.detalhe}`);
|
|
2971
|
+
console.log(r.dryRun ? m.syncEnsaio(id) : m.syncFeito(id));
|
|
2972
|
+
console.log(m.syncBase(r.base, r.shaBase.slice(0, 8)));
|
|
2973
|
+
console.log(m.syncBranch(r.branch, r.shaAntes.slice(0, 8), r.shaDepois.slice(0, 8)));
|
|
2974
|
+
console.log(m.syncRebase(r.rebaseFeito ? 'feito' : r.jaAtualizada ? 'desnecessario' : 'seria feito'));
|
|
2975
|
+
console.log(` ${(0, locale_1.remontar)(r.detalhe)}`);
|
|
2765
2976
|
if (r.passos.length > 0) {
|
|
2766
2977
|
console.log('');
|
|
2767
|
-
console.log(
|
|
2978
|
+
console.log(m.comandosReais);
|
|
2768
2979
|
for (const passo of r.passos)
|
|
2769
|
-
console.log(` ${passo}`);
|
|
2980
|
+
console.log(` ${(0, locale_1.remontar)(passo)}`);
|
|
2770
2981
|
}
|
|
2771
2982
|
return 0;
|
|
2772
2983
|
}
|
|
2773
2984
|
if (sub === 'audit') {
|
|
2774
|
-
const r = (0, worktree_1.auditarWorktree)(carregado, id);
|
|
2985
|
+
const r = (0, locale_1.comLocale)('pt-BR', () => (0, worktree_1.auditarWorktree)(carregado, id));
|
|
2775
2986
|
console.log((0, worktree_1.textoDoAudit)(id, r));
|
|
2776
2987
|
return r.ok ? 0 : 1;
|
|
2777
2988
|
}
|
|
2778
2989
|
if (sub === 'release') {
|
|
2779
|
-
const r = (0, worktree_1.liberarWorktree)(carregado, id, { forcar: args.opcoes.forcar === true });
|
|
2990
|
+
const r = (0, locale_1.comLocale)('pt-BR', () => (0, worktree_1.liberarWorktree)(carregado, id, { forcar: args.opcoes.forcar === true }));
|
|
2780
2991
|
if (!r.ok) {
|
|
2781
|
-
|
|
2782
|
-
console.error(` motivo tipado: ${r.motivo}`);
|
|
2783
|
-
console.error(` detalhe: ${r.detalhe}`);
|
|
2784
|
-
console.error(` correcao: ${r.correcao}`);
|
|
2992
|
+
bloqueio(m.releaseBloqueado(id), r);
|
|
2785
2993
|
return 1;
|
|
2786
2994
|
}
|
|
2787
|
-
console.log(
|
|
2788
|
-
console.log(
|
|
2789
|
-
console.log(
|
|
2790
|
-
console.log(
|
|
2791
|
-
console.log(` ${r.detalhe}`);
|
|
2995
|
+
console.log(m.liberada(id));
|
|
2996
|
+
console.log(m.releaseDir(r.dir));
|
|
2997
|
+
console.log(m.releaseRemovida(r.removida));
|
|
2998
|
+
console.log(m.releaseLeases(r.leasesLiberados.join(', ')));
|
|
2999
|
+
console.log(` ${(0, locale_1.remontar)(r.detalhe)}`);
|
|
2792
3000
|
return 0;
|
|
2793
3001
|
}
|
|
2794
|
-
console.error(
|
|
3002
|
+
console.error((0, locale_1.msg)().cli.subcomandoDesconhecido('worktree', sub));
|
|
2795
3003
|
return 2;
|
|
2796
3004
|
}
|
|
2797
3005
|
function comandoMaster(args) {
|
|
@@ -2864,12 +3072,7 @@ function comandoMaster(args) {
|
|
|
2864
3072
|
// mudou, e para onde ir. Desaparecer sem dizer nada seria o mesmo pecado da #TAG
|
|
2865
3073
|
// aposentada virando default.
|
|
2866
3074
|
if (args.opcoes.batch === true || primeiro === 'batch') {
|
|
2867
|
-
console.error(
|
|
2868
|
-
'Entregue e aceito, a menos que voce diga o contrario.\n' +
|
|
2869
|
-
' ork master as entregas, com o indice ja derivado do ledger\n' +
|
|
2870
|
-
' ork master <id> --aceitar-omissao aceita so esta entrega, com indice e insumos no ledger\n' +
|
|
2871
|
-
' ork master --aceitar-omissao aceita todas as entregues (--dry-run mostra quais)\n' +
|
|
2872
|
-
' ork master <id> --score <0-5> --justificativa "<por que>" --por <humano> para reclamar');
|
|
3075
|
+
console.error((0, locale_1.msg)().master.complementar.batchAposentado);
|
|
2873
3076
|
return 2;
|
|
2874
3077
|
}
|
|
2875
3078
|
if (args.opcoes['aceitar-omissao'] !== undefined) {
|
|
@@ -2884,19 +3087,20 @@ function comandoMaster(args) {
|
|
|
2884
3087
|
}
|
|
2885
3088
|
const propor = primeiro === 'propor';
|
|
2886
3089
|
const id = propor ? args.posicionais[2] : primeiro;
|
|
3090
|
+
const mm = (0, locale_1.msg)().master.complementar;
|
|
2887
3091
|
if (!id)
|
|
2888
|
-
throw new Error(
|
|
3092
|
+
throw new Error(mm.informeThread);
|
|
2889
3093
|
const brutoScore = texto(args.opcoes.score);
|
|
2890
3094
|
const justificativa = texto(args.opcoes.justificativa) ?? texto(args.opcoes.porque);
|
|
2891
3095
|
if (brutoScore === undefined) {
|
|
2892
|
-
console.error(
|
|
2893
|
-
console.error(
|
|
3096
|
+
console.error(mm.usoScore);
|
|
3097
|
+
console.error(mm.scoreHumano);
|
|
2894
3098
|
return 2;
|
|
2895
3099
|
}
|
|
2896
3100
|
if (!justificativa) {
|
|
2897
|
-
console.error(
|
|
2898
|
-
console.error(
|
|
2899
|
-
console.error(
|
|
3101
|
+
console.error(mm.justificativa(id));
|
|
3102
|
+
console.error(mm.justificativaRazao);
|
|
3103
|
+
console.error(mm.justificativaComando(id, brutoScore));
|
|
2900
3104
|
return 2;
|
|
2901
3105
|
}
|
|
2902
3106
|
const brutasClasses = texto(args.opcoes.classe) ?? texto(args.opcoes.classes);
|
|
@@ -2904,8 +3108,8 @@ function comandoMaster(args) {
|
|
|
2904
3108
|
for (const bruta of (brutasClasses ?? '').split(',').map((c) => c.trim()).filter(Boolean)) {
|
|
2905
3109
|
const classe = (0, master_2.parseClasse)(bruta);
|
|
2906
3110
|
if (!classe) {
|
|
2907
|
-
console.error(
|
|
2908
|
-
console.error(
|
|
3111
|
+
console.error(mm.classeInvalida(bruta));
|
|
3112
|
+
console.error(mm.classesFixas(master_2.ORDEM_DAS_CLASSES.join(', ')));
|
|
2909
3113
|
return 2;
|
|
2910
3114
|
}
|
|
2911
3115
|
classes.push(classe);
|
|
@@ -2933,12 +3137,12 @@ function comandoMaster(args) {
|
|
|
2933
3137
|
// vai ao ledger do projeto uma vez por janela; virar policy continua sendo do dono.
|
|
2934
3138
|
for (const p of (0, licoes_1.registrarPropostasNovas)(carregado.raiz)) {
|
|
2935
3139
|
console.log('');
|
|
2936
|
-
console.log(
|
|
3140
|
+
console.log(mm.proposta(p.chave, p.threads.length, p.janelaDias));
|
|
2937
3141
|
console.log(` ${p.sugestao}`);
|
|
2938
|
-
console.log(
|
|
3142
|
+
console.log(mm.soProposta);
|
|
2939
3143
|
}
|
|
2940
3144
|
console.log('');
|
|
2941
|
-
console.log(
|
|
3145
|
+
console.log(mm.proximo);
|
|
2942
3146
|
return 0;
|
|
2943
3147
|
}
|
|
2944
3148
|
/**
|
|
@@ -3053,12 +3257,14 @@ function comandoRoadmap(args) {
|
|
|
3053
3257
|
if (sub === 'reservas') {
|
|
3054
3258
|
// RM-037 (rm037noite, defeito 3): a reserva de thread ja fechada aparece como orfa e sai com registro.
|
|
3055
3259
|
if (args.opcoes['soltar-orfas'] === true) {
|
|
3056
|
-
|
|
3260
|
+
// RM-061 (F3b, D3): a soltura grava no escopo pt-BR (ledger, branch de reservas); o detalhe e remontado no texto.
|
|
3261
|
+
const soltas = (0, locale_1.comLocale)('pt-BR', () => (0, roadmap_reservas_1.soltarReservasOrfas)(carregado.raiz, { remoto }));
|
|
3262
|
+
const mr = (0, locale_1.msg)().reservas;
|
|
3057
3263
|
if (args.opcoes.json === true)
|
|
3058
3264
|
console.log(JSON.stringify(soltas, null, 2));
|
|
3059
3265
|
else
|
|
3060
|
-
console.log(soltas.length === 0 ?
|
|
3061
|
-
: soltas.map((s) =>
|
|
3266
|
+
console.log(soltas.length === 0 ? mr.nenhumaOrfa
|
|
3267
|
+
: soltas.map((s) => mr.soltura(s.item, (0, locale_1.remontar)(s.detalhe), s.thread)).join('\n'));
|
|
3062
3268
|
return 0;
|
|
3063
3269
|
}
|
|
3064
3270
|
// RM-052 (fatia 2, D4): as reservas moram no remoto do projeto. Sem ele, nada e lido; com ele mudo e
|
|
@@ -3098,21 +3304,21 @@ function comandoRoadmap(args) {
|
|
|
3098
3304
|
}
|
|
3099
3305
|
// RM-037 (rm037noite, defeito 6): o numero da FEAT nova sai da mesma branch de reservas.
|
|
3100
3306
|
if (sub === 'feat') {
|
|
3101
|
-
const r = (0, roadmap_reservas_1.reservarFeat)(carregado.raiz, { remoto, por: texto(args.opcoes.por), maquina: texto(args.opcoes.maquina),
|
|
3102
|
-
thread: texto(args.opcoes.thread) ?? null, nota: texto(args.opcoes.nota) ?? null });
|
|
3307
|
+
const r = (0, locale_1.comLocale)('pt-BR', () => (0, roadmap_reservas_1.reservarFeat)(carregado.raiz, { remoto, por: texto(args.opcoes.por), maquina: texto(args.opcoes.maquina),
|
|
3308
|
+
thread: texto(args.opcoes.thread) ?? null, nota: texto(args.opcoes.nota) ?? null }));
|
|
3309
|
+
const mr = (0, locale_1.msg)().reservas;
|
|
3103
3310
|
if (args.opcoes.json === true)
|
|
3104
3311
|
console.log(JSON.stringify(r, null, 2));
|
|
3105
3312
|
else {
|
|
3106
|
-
console.log(
|
|
3107
|
-
console.log(
|
|
3108
|
-
console.log(
|
|
3313
|
+
console.log(mr.feat(r.feat, r.reserva.thread ?? null));
|
|
3314
|
+
console.log(mr.crieAPagina(r.feat));
|
|
3315
|
+
console.log(mr.branch(r.commit.slice(0, 7)));
|
|
3109
3316
|
}
|
|
3110
3317
|
return 0;
|
|
3111
3318
|
}
|
|
3112
3319
|
const item = args.posicionais[2];
|
|
3113
3320
|
if ((sub !== 'pegar' && sub !== 'soltar') || !item) {
|
|
3114
|
-
console.error(
|
|
3115
|
-
'soltar <RM-NNN> [--forcar --motivo M] | feat [--thread T] [--nota N]');
|
|
3321
|
+
console.error((0, locale_1.msg)().reservas.uso);
|
|
3116
3322
|
return 2;
|
|
3117
3323
|
}
|
|
3118
3324
|
const opcoes = {
|
|
@@ -3124,18 +3330,17 @@ function comandoRoadmap(args) {
|
|
|
3124
3330
|
forcar: args.opcoes.forcar === true,
|
|
3125
3331
|
motivo: texto(args.opcoes.motivo),
|
|
3126
3332
|
};
|
|
3127
|
-
const r = sub === 'pegar' ? (0, roadmap_reservas_1.pegarItem)(carregado.raiz, item, opcoes) : (0, roadmap_reservas_1.soltarItem)(carregado.raiz, item, opcoes);
|
|
3333
|
+
const r = (0, locale_1.comLocale)('pt-BR', () => sub === 'pegar' ? (0, roadmap_reservas_1.pegarItem)(carregado.raiz, item, opcoes) : (0, roadmap_reservas_1.soltarItem)(carregado.raiz, item, opcoes));
|
|
3128
3334
|
if (args.opcoes.json === true) {
|
|
3129
3335
|
console.log(JSON.stringify(r, null, 2));
|
|
3130
3336
|
return 0;
|
|
3131
3337
|
}
|
|
3132
|
-
const
|
|
3133
|
-
|
|
3134
|
-
console.log(`${r.item}: ${verbo}.`);
|
|
3338
|
+
const mr = (0, locale_1.msg)().reservas;
|
|
3339
|
+
console.log(mr.itemAcao(r.item, mr.acao(r.acao)));
|
|
3135
3340
|
if (r.reserva && r.acao !== 'soltou')
|
|
3136
|
-
console.log(
|
|
3341
|
+
console.log(mr.com(r.reserva.por, r.reserva.maquina, r.reserva.thread ?? null));
|
|
3137
3342
|
if (r.commit)
|
|
3138
|
-
console.log(
|
|
3343
|
+
console.log(mr.branch(r.commit.slice(0, 7)));
|
|
3139
3344
|
return 0;
|
|
3140
3345
|
}
|
|
3141
3346
|
/**
|
|
@@ -3145,7 +3350,7 @@ function comandoRoadmap(args) {
|
|
|
3145
3350
|
function comandoNetworkRoadmap(args) {
|
|
3146
3351
|
const pedido = texto(args.opcoes.projeto);
|
|
3147
3352
|
if (args.posicionais[1] !== 'roadmap' || args.posicionais.length > 2 || (args.opcoes.projeto !== undefined && !pedido)) {
|
|
3148
|
-
console.error(
|
|
3353
|
+
console.error((0, locale_1.msg)().network.roadmap.uso);
|
|
3149
3354
|
return 2;
|
|
3150
3355
|
}
|
|
3151
3356
|
try {
|
|
@@ -3163,14 +3368,41 @@ function comandoNetworkRoadmap(args) {
|
|
|
3163
3368
|
return network_roadmap_1.SAIDA_DO_PEDIDO;
|
|
3164
3369
|
}
|
|
3165
3370
|
}
|
|
3371
|
+
/**
|
|
3372
|
+
* RM-026 K7 (fatia 2, D11 e D13): o conhecimento escrito, so leitura. O JSON e o das tools `ork_conhecimento_*`,
|
|
3373
|
+
* em pt-BR nas duas linguas; so o texto segue o locale. Sai 1 quando a consulta nao responde e 2 com uso errado
|
|
3374
|
+
* (D13 revista no CHECK: o gate de CI separa o erro de digitacao da lacuna).
|
|
3375
|
+
*/
|
|
3376
|
+
function comandoConhecimento(args) {
|
|
3377
|
+
const [, sub = 'listar', id, ...resto] = args.posicionais;
|
|
3378
|
+
const colecao = args.opcoes.colecao;
|
|
3379
|
+
const valido = conhecimento_consulta_1.CONSULTAS_DO_CONHECIMENTO.includes(sub) && !resto.length &&
|
|
3380
|
+
(args.opcoes.json === undefined || args.opcoes.json === true) &&
|
|
3381
|
+
Object.keys(args.opcoes).every((k) => k === 'json' || (k === 'colecao' && sub === 'listar')) &&
|
|
3382
|
+
(colecao === undefined || (typeof colecao === 'string' && conhecimento_1.NOME_DE_COLECAO.test(colecao))) &&
|
|
3383
|
+
(sub === 'mostrar' ? typeof id === 'string' && conhecimento_1.ID_DE_DOCUMENTO.test(id) : id === undefined);
|
|
3384
|
+
if (!valido) {
|
|
3385
|
+
console.error((0, locale_1.msg)().cli.erro((0, locale_1.msg)().conhecimento.uso));
|
|
3386
|
+
return 2;
|
|
3387
|
+
}
|
|
3388
|
+
const pedido = sub === 'mostrar' ? { consulta: 'mostrar', id }
|
|
3389
|
+
: sub === 'listar' ? { consulta: 'listar', ...(typeof colecao === 'string' ? { colecao } : {}) }
|
|
3390
|
+
: { consulta: sub };
|
|
3391
|
+
const carregado = (0, manifest_1.exigirManifesto)();
|
|
3392
|
+
const r = (0, conhecimento_consulta_1.consultarConhecimento)(carregado, pedido);
|
|
3393
|
+
console.log(args.opcoes.json === true ? (0, saida_segura_1.jsonSemInvisivel)(r) : (0, conhecimento_consulta_1.textoDoConhecimento)(r));
|
|
3394
|
+
return (0, conhecimento_consulta_1.consultaRespondeu)(r) ? 0 : 1;
|
|
3395
|
+
}
|
|
3166
3396
|
function comandoDocs(args) {
|
|
3167
3397
|
const sub = args.posicionais[1] ?? 'verificar';
|
|
3168
3398
|
const carregado = (0, manifest_1.carregarManifesto)();
|
|
3169
3399
|
const raiz = carregado?.raiz ?? (0, manifest_1.diretorioDoProjeto)();
|
|
3170
3400
|
const baseBranch = carregado?.manifesto.worktree?.base_branch ?? 'main';
|
|
3401
|
+
const md = (0, locale_1.msg)().docs;
|
|
3171
3402
|
if (sub === 'verificar') {
|
|
3172
3403
|
// RM-037 (fatia 3, GO-FIX 2): o CI passa --pr no pull_request; no push da main as duas regras novas reprovam.
|
|
3173
|
-
|
|
3404
|
+
// RM-061 (F3b, G4): verifica no escopo pt-BR, como o `--json` leva os achados; o texto os remonta no locale do comando.
|
|
3405
|
+
const { docs, achados } = (0, locale_1.comLocale)('pt-BR', () => (0, docs_1.verificarDocs)(raiz, { baseBranch, ajudaDoCli: AJUDA, pr: args.opcoes.pr === true }));
|
|
3174
3406
|
if (args.opcoes.json === true) {
|
|
3175
3407
|
console.log(JSON.stringify({ paginas: docs.length, erros: achados.filter((a) => a.gravidade === 'erro').length,
|
|
3176
3408
|
achados }, null, 2));
|
|
@@ -3187,31 +3419,31 @@ function comandoDocs(args) {
|
|
|
3187
3419
|
// Sugestao 4 do CHECK 1 (e 8 do CHECK 2, `--so=`): `--so` sem item e erro de uso, nunca o escopo
|
|
3188
3420
|
// padrao em silencio.
|
|
3189
3421
|
if (args.opcoes.so === true || (typeof args.opcoes.so === 'string' && !args.opcoes.so.trim())) {
|
|
3190
|
-
console.error(
|
|
3422
|
+
console.error(md.usoSoSemItem);
|
|
3191
3423
|
return 2;
|
|
3192
3424
|
}
|
|
3193
3425
|
const so = texto(args.opcoes.so);
|
|
3194
3426
|
let itens;
|
|
3195
|
-
let escopo =
|
|
3427
|
+
let escopo = md.escopoTodos;
|
|
3196
3428
|
if (so) {
|
|
3197
3429
|
itens = so.split(',').map((i) => i.trim().toUpperCase()).filter(Boolean);
|
|
3198
3430
|
const fora = itens.filter((i) => !/^RM-\d{3}$/.test(i));
|
|
3199
3431
|
if (fora.length || itens.length === 0) {
|
|
3200
|
-
console.error(
|
|
3432
|
+
console.error(md.usoSoInvalido(so));
|
|
3201
3433
|
return 2;
|
|
3202
3434
|
}
|
|
3203
|
-
escopo =
|
|
3435
|
+
escopo = md.escopoSo(itens.join(', '));
|
|
3204
3436
|
}
|
|
3205
3437
|
else if (args.opcoes.todos !== true) {
|
|
3206
3438
|
const padrao = (0, docs_1.escopoPadraoDoSync)(raiz);
|
|
3207
3439
|
if (padrao.itens) {
|
|
3208
3440
|
itens = padrao.itens;
|
|
3209
|
-
escopo =
|
|
3441
|
+
escopo = md.escopoDaThread(itens.join(', '), String(padrao.thread));
|
|
3210
3442
|
}
|
|
3211
3443
|
}
|
|
3212
|
-
const r = (0, docs_1.sincronizarDocs)(raiz, { baseBranch, escrever, itens });
|
|
3444
|
+
const r = (0, locale_1.comLocale)('pt-BR', () => (0, docs_1.sincronizarDocs)(raiz, { baseBranch, escrever, itens }));
|
|
3213
3445
|
console.log(args.opcoes.json === true ? JSON.stringify({ ...r, escopo: itens ?? null }, null, 2)
|
|
3214
|
-
:
|
|
3446
|
+
: `${md.escopo(escopo)}\n${(0, docs_1.textoDaSincronizacao)(r, escrever)}`);
|
|
3215
3447
|
return 0;
|
|
3216
3448
|
}
|
|
3217
3449
|
if (sub === 'init') {
|
|
@@ -3224,29 +3456,36 @@ function comandoDocs(args) {
|
|
|
3224
3456
|
: [m.criado, ...criados.map((c) => ` ${c}`), '', m.proximoPasso].join('\n'));
|
|
3225
3457
|
return 0;
|
|
3226
3458
|
}
|
|
3227
|
-
console.error(
|
|
3459
|
+
console.error(md.uso);
|
|
3228
3460
|
return 2;
|
|
3229
3461
|
}
|
|
3230
3462
|
function comandoPrompt(args) {
|
|
3231
3463
|
const sub = args.posicionais[1] ?? 'list';
|
|
3232
3464
|
const carregado = (0, manifest_1.carregarManifesto)();
|
|
3233
3465
|
const raiz = carregado?.raiz;
|
|
3466
|
+
const mp = (0, locale_1.msg)().prompts.cli;
|
|
3467
|
+
// RM-061 F3c: o template e a lingua do prompt sao os do despacho (a lingua declarada do dono, `owner.language`;
|
|
3468
|
+
// sem ela, pt-BR), para o render mostrar o que o `phase run` grava; so o texto do CLI em volta segue o locale ativo.
|
|
3469
|
+
// Os templates do projeto sempre aparecem; dos embutidos, o da lingua do prompt.
|
|
3470
|
+
const linguaDoPrompt = (0, locale_1.linguaDeclaradaDoDono)(carregado?.manifesto.owner?.language);
|
|
3471
|
+
const templatesDaLingua = () => (0, prompts_1.carregarTemplates)(raiz).filter((t) => t.origem !== 'embutido' || (linguaDoPrompt === 'en' ? t.id.endsWith('.en') : !t.id.endsWith('.en')));
|
|
3234
3472
|
if (sub === 'list') {
|
|
3235
|
-
console.log((0, prompts_1.tabelaDeTemplates)((
|
|
3473
|
+
console.log((0, prompts_1.tabelaDeTemplates)(templatesDaLingua()));
|
|
3236
3474
|
return 0;
|
|
3237
3475
|
}
|
|
3238
3476
|
if (sub === 'lint') {
|
|
3239
3477
|
const id = texto(args.opcoes.template);
|
|
3240
|
-
const templates = id ? [(0, prompts_1.exigirTemplate)(id, raiz)] : (
|
|
3241
|
-
const problemas = templates.flatMap((t) => (0, prompts_1.lintTemplate)(t))
|
|
3242
|
-
|
|
3478
|
+
const templates = id ? [(0, prompts_1.exigirTemplate)(id, raiz)] : templatesDaLingua();
|
|
3479
|
+
const problemas = [...templates.flatMap((t) => (0, prompts_1.lintTemplate)(t)),
|
|
3480
|
+
...(id ? [] : (0, prompts_1.avisosDeLingua)(templates, linguaDoPrompt))];
|
|
3481
|
+
console.log(mp.lintTitulo(raiz ?? null));
|
|
3243
3482
|
console.log('');
|
|
3244
3483
|
console.log((0, prompts_1.textoDoLint)(problemas, templates.length));
|
|
3245
3484
|
return problemas.some((p) => p.gravidade === 'erro') ? 2 : 0;
|
|
3246
3485
|
}
|
|
3247
3486
|
if (sub === 'render') {
|
|
3248
3487
|
const fase = exigirFaseCanonica(texto(args.opcoes.fase) ?? args.posicionais[3]);
|
|
3249
|
-
const pedido = texto(args.opcoes.pedido) ??
|
|
3488
|
+
const pedido = texto(args.opcoes.pedido) ?? mp.pedidoExemplo;
|
|
3250
3489
|
const idTemplate = texto(args.opcoes.template);
|
|
3251
3490
|
// Modo exemplo: renderiza sem thread nenhuma, para revisar o texto de um modo antes de
|
|
3252
3491
|
// abrir trabalho. Nada e gravado, e o `ork` diz em voz alta que a thread e ficticia.
|
|
@@ -3261,10 +3500,10 @@ function comandoPrompt(args) {
|
|
|
3261
3500
|
return 2;
|
|
3262
3501
|
}
|
|
3263
3502
|
const exemplo = (0, prompts_1.threadDeExemplo)(modo, fase, carregado?.manifesto.project);
|
|
3264
|
-
const template = idTemplate ? (0, prompts_1.exigirTemplate)(idTemplate, raiz) : (0, prompts_1.templateDaFase)(fase, raiz);
|
|
3265
|
-
const prompt = (0, prompts_1.renderizar)(template, (0, phase_1.valoresDoPrompt)(exemplo, fase, pedido));
|
|
3266
|
-
console.log(
|
|
3267
|
-
console.log(
|
|
3503
|
+
const template = idTemplate ? (0, prompts_1.exigirTemplate)(idTemplate, raiz) : (0, prompts_1.templateDaFase)(fase, raiz, linguaDoPrompt);
|
|
3504
|
+
const prompt = (0, prompts_1.renderizar)(template, (0, phase_1.valoresDoPrompt)(exemplo, fase, pedido, '', (0, prompts_1.idiomaDoTemplate)(template)));
|
|
3505
|
+
console.log(mp.cabecalhoTemplate(template.id, template.versao, template.origem));
|
|
3506
|
+
console.log(mp.cabecalhoExemplo(modos_1.MODOS[modo].tag, (0, phase_1.hashDoPrompt)(prompt)));
|
|
3268
3507
|
console.log('');
|
|
3269
3508
|
console.log(prompt);
|
|
3270
3509
|
return 0;
|
|
@@ -3272,8 +3511,8 @@ function comandoPrompt(args) {
|
|
|
3272
3511
|
const obrigatorio = (0, manifest_1.exigirManifesto)();
|
|
3273
3512
|
const threadId = args.posicionais[2];
|
|
3274
3513
|
if (!threadId) {
|
|
3275
|
-
console.error(
|
|
3276
|
-
console.error(
|
|
3514
|
+
console.error(mp.usoRenderThread);
|
|
3515
|
+
console.error(mp.usoRenderExemplo);
|
|
3277
3516
|
return 2;
|
|
3278
3517
|
}
|
|
3279
3518
|
const thread = (0, thread_1.lerThread)(obrigatorio.raiz, threadId);
|
|
@@ -3281,26 +3520,26 @@ function comandoPrompt(args) {
|
|
|
3281
3520
|
// guardado segue com o texto de exemplo, como antes.
|
|
3282
3521
|
const guardado = texto(args.opcoes.pedido) === undefined ? (0, thread_1.pedidoDaThread)(obrigatorio.raiz, thread) : null;
|
|
3283
3522
|
const pedidoDaFase = guardado?.texto ?? pedido;
|
|
3284
|
-
const template = idTemplate ? (0, prompts_1.exigirTemplate)(idTemplate, obrigatorio.raiz) : (0, prompts_1.templateDaFase)(fase, obrigatorio.raiz);
|
|
3523
|
+
const template = idTemplate ? (0, prompts_1.exigirTemplate)(idTemplate, obrigatorio.raiz) : (0, prompts_1.templateDaFase)(fase, obrigatorio.raiz, linguaDoPrompt);
|
|
3285
3524
|
const prompt = idTemplate
|
|
3286
|
-
? (0, prompts_1.renderizar)(template, (0, phase_1.valoresDoPrompt)(thread, fase, pedidoDaFase))
|
|
3287
|
-
: (0, phase_1.montarPrompt)(thread, fase, pedidoDaFase, obrigatorio.raiz);
|
|
3288
|
-
console.log(
|
|
3289
|
-
console.log(
|
|
3525
|
+
? (0, prompts_1.renderizar)(template, (0, phase_1.valoresDoPrompt)(thread, fase, pedidoDaFase, '', (0, prompts_1.idiomaDoTemplate)(template)))
|
|
3526
|
+
: (0, phase_1.montarPrompt)(thread, fase, pedidoDaFase, obrigatorio.raiz, '', linguaDoPrompt);
|
|
3527
|
+
console.log(mp.cabecalhoTemplate(template.id, template.versao, template.origem));
|
|
3528
|
+
console.log(mp.cabecalhoThread(thread.id, fase, (0, phase_1.hashDoPrompt)(prompt)));
|
|
3290
3529
|
if (guardado)
|
|
3291
|
-
console.log(
|
|
3530
|
+
console.log(mp.pedidoGuardado((0, util_1.shaCurto)(guardado.sha256)));
|
|
3292
3531
|
console.log('');
|
|
3293
3532
|
console.log(prompt);
|
|
3294
3533
|
return 0;
|
|
3295
3534
|
}
|
|
3296
|
-
console.error(
|
|
3535
|
+
console.error(mp.subcomandoDesconhecido(sub));
|
|
3297
3536
|
return 2;
|
|
3298
3537
|
}
|
|
3299
3538
|
/** Fase canonica a partir do texto do usuario, com erro tipado quando nao existe. */
|
|
3300
3539
|
function exigirFaseCanonica(bruto) {
|
|
3301
3540
|
const alvo = (bruto ?? '').toUpperCase();
|
|
3302
3541
|
if (!types_1.FASES.includes(alvo)) {
|
|
3303
|
-
throw new Error(
|
|
3542
|
+
throw new Error((0, locale_1.msg)().prompts.cli.faseForaDoCiclo(bruto ?? '', types_1.FASES.join(' ')));
|
|
3304
3543
|
}
|
|
3305
3544
|
return alvo;
|
|
3306
3545
|
}
|
|
@@ -3322,6 +3561,7 @@ function orkEmExecucao() {
|
|
|
3322
3561
|
}
|
|
3323
3562
|
function comandoAdapter(args) {
|
|
3324
3563
|
const sub = args.posicionais[1] ?? 'list';
|
|
3564
|
+
const ma = (0, locale_1.msg)().adapter;
|
|
3325
3565
|
if (sub === 'list') {
|
|
3326
3566
|
console.log((0, hosts_1.tabelaDeHosts)());
|
|
3327
3567
|
return 0;
|
|
@@ -3329,13 +3569,12 @@ function comandoAdapter(args) {
|
|
|
3329
3569
|
if (sub === 'show') {
|
|
3330
3570
|
const host = (0, hosts_1.parseHost)(args.posicionais[2]);
|
|
3331
3571
|
if (!host) {
|
|
3332
|
-
console.error(
|
|
3572
|
+
console.error(ma.hostDesconhecido(args.posicionais[2] ?? '', hosts_1.ORDEM_DOS_HOSTS.join(' | ')));
|
|
3333
3573
|
return 2;
|
|
3334
3574
|
}
|
|
3335
|
-
|
|
3336
|
-
console.log(`
|
|
3337
|
-
console.log(` ${
|
|
3338
|
-
console.log(` destino padrao: <projeto>/${def.destinoPadrao}${def.subdir ? '/' + def.subdir : ''}`);
|
|
3575
|
+
console.log(ma.adaptador(host));
|
|
3576
|
+
console.log(` ${ma.hosts[host].descricao}`);
|
|
3577
|
+
console.log(` ${ma.destinoPadrao((0, hosts_1.destinoPadraoDe)(host))}`);
|
|
3339
3578
|
console.log('');
|
|
3340
3579
|
console.log((0, hosts_1.textoDosPitfalls)(host));
|
|
3341
3580
|
return 0;
|
|
@@ -3343,11 +3582,12 @@ function comandoAdapter(args) {
|
|
|
3343
3582
|
if (sub === 'install') {
|
|
3344
3583
|
const host = (0, hosts_1.parseHost)(args.posicionais[2]);
|
|
3345
3584
|
if (!host) {
|
|
3346
|
-
console.error(
|
|
3585
|
+
console.error(ma.hostDesconhecido(args.posicionais[2] ?? '', hosts_1.ORDEM_DOS_HOSTS.join(' | ')));
|
|
3347
3586
|
return 2;
|
|
3348
3587
|
}
|
|
3349
3588
|
const carregado = (0, manifest_1.carregarManifesto)();
|
|
3350
|
-
|
|
3589
|
+
// RM-061 (F3b, G4): instala no escopo pt-BR; os avisos nascem pelo catalogo e o texto os remonta no locale do comando.
|
|
3590
|
+
const r = (0, locale_1.comLocale)('pt-BR', () => (0, hosts_1.instalarAdaptador)(host, {
|
|
3351
3591
|
projeto: carregado?.raiz ?? (0, manifest_1.diretorioDoProjeto)(),
|
|
3352
3592
|
dir: texto(args.opcoes.dir),
|
|
3353
3593
|
dryRun: args.opcoes['dry-run'] === true,
|
|
@@ -3360,13 +3600,13 @@ function comandoAdapter(args) {
|
|
|
3360
3600
|
// unico caminho de saida. `;` separa varios, como o resto do CLI ja faz.
|
|
3361
3601
|
aceitarCatalogo: (texto(args.opcoes['aceitar-catalogo']) ?? '').split(';').map(x => x.trim()).filter(Boolean),
|
|
3362
3602
|
manterCopia: (texto(args.opcoes['manter-copia']) ?? '').split(';').map(x => x.trim()).filter(Boolean),
|
|
3363
|
-
// RM-061 (F3a, D1 e D9): o bloco da experiência nasce na língua do dono; o texto impresso segue
|
|
3603
|
+
// RM-061 (F3a, D1 e D9): o bloco da experiência nasce na língua do dono; na F3b, o texto impresso segue o locale.
|
|
3364
3604
|
locale: (0, locale_1.resolverLocale)(carregado?.manifesto.owner?.language).locale,
|
|
3365
|
-
});
|
|
3605
|
+
}));
|
|
3366
3606
|
console.log((0, hosts_1.textoDaInstalacao)(r));
|
|
3367
3607
|
return r.ok ? 0 : 2;
|
|
3368
3608
|
}
|
|
3369
|
-
console.error(
|
|
3609
|
+
console.error(ma.subcomandoDesconhecido(sub));
|
|
3370
3610
|
return 2;
|
|
3371
3611
|
}
|
|
3372
3612
|
/**
|
|
@@ -3405,6 +3645,7 @@ function comandoEval(args) {
|
|
|
3405
3645
|
* diferente de zero quando reprova, para o agendador do host perceber sem ler texto.
|
|
3406
3646
|
*/
|
|
3407
3647
|
function comandoAudit(args) {
|
|
3648
|
+
const m = (0, locale_1.msg)().audit;
|
|
3408
3649
|
if (args.posicionais[1] === 'process') {
|
|
3409
3650
|
const r = (0, process_audit_1.auditarProcesso)((0, manifest_1.exigirManifesto)(), args.opcoes.registrar === true);
|
|
3410
3651
|
console.log(JSON.stringify(r, null, 2));
|
|
@@ -3418,26 +3659,26 @@ function comandoAudit(args) {
|
|
|
3418
3659
|
const bruto = texto(args.opcoes.estagio) ?? texto(args.opcoes.stage);
|
|
3419
3660
|
const estagio = bruto ? (0, auditoria_1.parseEstagio)(bruto) : carregado?.manifesto.project.stage;
|
|
3420
3661
|
if (bruto && !estagio) {
|
|
3421
|
-
console.error(
|
|
3662
|
+
console.error(m.erro.estagio(bruto));
|
|
3422
3663
|
return 2;
|
|
3423
3664
|
}
|
|
3424
3665
|
const pack = texto(args.opcoes.pack) ?? args.posicionais[2];
|
|
3425
3666
|
if (pack) {
|
|
3426
3667
|
const alvo = (0, auditoria_1.parsePack)(pack);
|
|
3427
3668
|
if (!alvo) {
|
|
3428
|
-
console.error(
|
|
3669
|
+
console.error(m.erro.pack(pack, auditoria_1.ORDEM_DOS_PACKS.join(', ')));
|
|
3429
3670
|
return 2;
|
|
3430
3671
|
}
|
|
3431
3672
|
console.log((0, auditoria_1.textoDoPack)(alvo, estagio ?? undefined));
|
|
3432
3673
|
return 0;
|
|
3433
3674
|
}
|
|
3434
|
-
console.log(
|
|
3675
|
+
console.log(m.packs.titulo(estagio ?? undefined));
|
|
3435
3676
|
console.log('');
|
|
3436
3677
|
console.log((0, auditoria_1.tabelaDePacks)(estagio ?? undefined));
|
|
3437
3678
|
if (estagio) {
|
|
3438
3679
|
console.log('');
|
|
3439
|
-
console.log(
|
|
3440
|
-
console.log(
|
|
3680
|
+
console.log(m.packs.ativo((0, auditoria_1.packsAtivos)(estagio).join(', ')));
|
|
3681
|
+
console.log(m.packs.postura((0, auditoria_1.posturaDoPack)(estagio)));
|
|
3441
3682
|
}
|
|
3442
3683
|
return 0;
|
|
3443
3684
|
}
|
|
@@ -3445,25 +3686,24 @@ function comandoAudit(args) {
|
|
|
3445
3686
|
const raiz = (0, manifest_1.carregarManifesto)()?.raiz;
|
|
3446
3687
|
const templates = (0, auditoria_1.carregarTemplatesDeAuditoria)(raiz);
|
|
3447
3688
|
const problemas = templates.flatMap((t) => (0, auditoria_1.lintTemplateDeAuditoria)(t));
|
|
3448
|
-
console.log(
|
|
3689
|
+
console.log(m.cli.lintTitulo(raiz));
|
|
3449
3690
|
console.log('');
|
|
3450
3691
|
for (const p of problemas) {
|
|
3451
|
-
console.log(
|
|
3452
|
-
console.log(
|
|
3692
|
+
console.log(m.cli.lintItem(p.gravidade, p.template, p.regra));
|
|
3693
|
+
console.log(m.cli.lintDetalhe(p.detalhe));
|
|
3453
3694
|
}
|
|
3454
3695
|
if (problemas.length === 0)
|
|
3455
|
-
console.log(
|
|
3696
|
+
console.log(m.cli.lintOk(templates.length));
|
|
3456
3697
|
console.log('');
|
|
3457
|
-
console.log(
|
|
3458
|
-
`avisos: ${problemas.filter((p) => p.gravidade === 'aviso').length}`);
|
|
3698
|
+
console.log(m.cli.lintResumo(templates.length, problemas.filter((p) => p.gravidade === 'erro').length, problemas.filter((p) => p.gravidade === 'aviso').length));
|
|
3459
3699
|
return problemas.some((p) => p.gravidade === 'erro') ? 2 : 0;
|
|
3460
3700
|
}
|
|
3461
3701
|
const carregado = (0, manifest_1.exigirManifesto)();
|
|
3462
3702
|
if (sub === 'run') {
|
|
3463
3703
|
const pack = (0, auditoria_1.parsePack)(args.posicionais[2]);
|
|
3464
3704
|
if (!pack) {
|
|
3465
|
-
console.error('
|
|
3466
|
-
console.error(
|
|
3705
|
+
console.error(m.uso('run'));
|
|
3706
|
+
console.error(m.cli.packs(auditoria_1.ORDEM_DOS_PACKS.join(', ')));
|
|
3467
3707
|
return 2;
|
|
3468
3708
|
}
|
|
3469
3709
|
const autorizar = args.opcoes.agora;
|
|
@@ -3478,15 +3718,15 @@ function comandoAudit(args) {
|
|
|
3478
3718
|
forcar: args.opcoes.forcar === true || args.opcoes.force === true,
|
|
3479
3719
|
});
|
|
3480
3720
|
if (r.status === 'bloqueada') {
|
|
3481
|
-
console.error(
|
|
3721
|
+
console.error(m.cli.bloqueada(r.id));
|
|
3482
3722
|
console.error(` ${auditoria_1.DESCRICAO_DO_MOTIVO_DE_AUDITORIA[r.motivo ?? 'runtime.unavailable']}`);
|
|
3483
|
-
console.error(
|
|
3484
|
-
console.error(
|
|
3485
|
-
console.error(
|
|
3723
|
+
console.error(m.cli.motivo(String(r.motivo)));
|
|
3724
|
+
console.error(m.cli.detalhe(r.detalhe));
|
|
3725
|
+
console.error(m.cli.estado(r.id));
|
|
3486
3726
|
return 1;
|
|
3487
3727
|
}
|
|
3488
3728
|
if (r.status === 'ensaio') {
|
|
3489
|
-
console.log(
|
|
3729
|
+
console.log(m.cli.ensaio(r.id));
|
|
3490
3730
|
console.log(` pack ${r.pack} (postura ${r.postura} no estagio ${r.estagio})`);
|
|
3491
3731
|
console.log(` escopo ${r.escopo.detalhe}`);
|
|
3492
3732
|
console.log(` graphify ${r.escopo.graphify}`);
|
|
@@ -3495,11 +3735,11 @@ function comandoAudit(args) {
|
|
|
3495
3735
|
console.log(` comando claude --bg "<prompt>" --name ${r.slug} --model ${r.custo.model} --effort ${r.custo.effort}`);
|
|
3496
3736
|
if (r.superficie) {
|
|
3497
3737
|
console.log(` superficie ${r.superficie.detalhe}`);
|
|
3498
|
-
console.log(
|
|
3738
|
+
console.log(m.cli.superficieDry(r.id));
|
|
3499
3739
|
}
|
|
3500
3740
|
return 0;
|
|
3501
3741
|
}
|
|
3502
|
-
console.log(
|
|
3742
|
+
console.log(m.cli.despachada(r.id, r.runtime));
|
|
3503
3743
|
console.log(` pack ${r.pack} (${auditoria_1.PACKS[r.pack].titulo})`);
|
|
3504
3744
|
console.log(` produto ${r.produto} (perfil ${r.perfil}), estagio ${r.estagio}, postura ${r.postura}`);
|
|
3505
3745
|
console.log(` escopo ${r.escopo.detalhe}`);
|
|
@@ -3508,23 +3748,20 @@ function comandoAudit(args) {
|
|
|
3508
3748
|
console.log(` janela ${r.custo.janela.detalhe}`);
|
|
3509
3749
|
console.log(` sessionId ${r.sessionId}`);
|
|
3510
3750
|
console.log(` prompt ${r.promptPath} (sha256 ${r.promptSha256})`);
|
|
3511
|
-
console.log(
|
|
3751
|
+
console.log(m.cli.verificada(r.verificada));
|
|
3512
3752
|
if (r.superficie) {
|
|
3513
3753
|
console.log(` superficie ${r.superficie.detalhe}`);
|
|
3514
|
-
console.log(
|
|
3515
|
-
(r.superficie.aConfirmar > 0
|
|
3516
|
-
? `, ${r.superficie.aConfirmar} com confianca baixa (pedem confirmacao humana)`
|
|
3517
|
-
: ''));
|
|
3754
|
+
console.log(m.cli.superficieBoard(r.superficie.registrados, r.superficie.aConfirmar));
|
|
3518
3755
|
}
|
|
3519
3756
|
console.log('');
|
|
3520
|
-
console.log(
|
|
3521
|
-
console.log(
|
|
3757
|
+
console.log(m.cli.proposta);
|
|
3758
|
+
console.log(m.cli.depois(r.id));
|
|
3522
3759
|
return r.verificada ? 0 : 1;
|
|
3523
3760
|
}
|
|
3524
3761
|
if (sub === 'list') {
|
|
3525
3762
|
console.log((0, auditrun_1.tabelaDeRodadas)(carregado.raiz));
|
|
3526
3763
|
console.log('');
|
|
3527
|
-
console.log(
|
|
3764
|
+
console.log(m.cli.board((0, auditrun_1.resumoDoBoard)(carregado.raiz)));
|
|
3528
3765
|
return 0;
|
|
3529
3766
|
}
|
|
3530
3767
|
if (sub === 'show') {
|
|
@@ -3533,7 +3770,7 @@ function comandoAudit(args) {
|
|
|
3533
3770
|
return recusarSobraDoObjective(sobra);
|
|
3534
3771
|
const id = args.posicionais[2];
|
|
3535
3772
|
if (!id) {
|
|
3536
|
-
console.error('
|
|
3773
|
+
console.error(m.uso('show'));
|
|
3537
3774
|
return 2;
|
|
3538
3775
|
}
|
|
3539
3776
|
if (args.opcoes.ledger === true) {
|
|
@@ -3546,8 +3783,8 @@ function comandoAudit(args) {
|
|
|
3546
3783
|
if (sub === 'prompt') {
|
|
3547
3784
|
const pack = (0, auditoria_1.parsePack)(args.posicionais[2]);
|
|
3548
3785
|
if (!pack) {
|
|
3549
|
-
console.error('
|
|
3550
|
-
console.error(
|
|
3786
|
+
console.error(m.uso('prompt'));
|
|
3787
|
+
console.error(m.cli.packs(auditoria_1.ORDEM_DOS_PACKS.join(', ')));
|
|
3551
3788
|
return 2;
|
|
3552
3789
|
}
|
|
3553
3790
|
const { raiz, manifesto } = carregado;
|
|
@@ -3580,16 +3817,16 @@ function comandoAudit(args) {
|
|
|
3580
3817
|
const id = args.posicionais[2];
|
|
3581
3818
|
const arquivo = texto(args.opcoes.arquivo) ?? texto(args.opcoes.file);
|
|
3582
3819
|
if (!id || !arquivo) {
|
|
3583
|
-
console.error('
|
|
3820
|
+
console.error(m.uso('ingest'));
|
|
3584
3821
|
return 2;
|
|
3585
3822
|
}
|
|
3586
3823
|
const r = (0, auditrun_1.ingerirAchados)(carregado, id, arquivo);
|
|
3587
|
-
console.log(
|
|
3824
|
+
console.log(m.cli.ingestao(r.rodada, r.registrados.length));
|
|
3588
3825
|
// Bloco B6: cada proposta enderecada ao roadmap tambem vai para a colecao `roadmap`.
|
|
3589
3826
|
if (r.registrados.length > 0) {
|
|
3590
3827
|
const naMemoria = (0, memoria_1.publicarPropostas)(carregado, r.registrados);
|
|
3591
3828
|
if (naMemoria.regime === 'orkmind') {
|
|
3592
|
-
console.log(
|
|
3829
|
+
console.log(m.cli.memoriaMuitas(naMemoria.detalhe));
|
|
3593
3830
|
}
|
|
3594
3831
|
}
|
|
3595
3832
|
for (const a of r.registrados) {
|
|
@@ -3597,18 +3834,17 @@ function comandoAudit(args) {
|
|
|
3597
3834
|
}
|
|
3598
3835
|
if (r.duplicados.length > 0) {
|
|
3599
3836
|
console.log('');
|
|
3600
|
-
console.log(
|
|
3601
|
-
r.duplicados.map((a) => a.id).join(', '));
|
|
3837
|
+
console.log(m.cli.duplicados(r.duplicados.map((a) => a.id).join(', ')));
|
|
3602
3838
|
}
|
|
3603
3839
|
if (r.recusados.length > 0) {
|
|
3604
3840
|
console.log('');
|
|
3605
|
-
console.error(
|
|
3841
|
+
console.error(m.cli.recusados(r.recusados.length));
|
|
3606
3842
|
for (const rec of r.recusados) {
|
|
3607
|
-
console.error(
|
|
3843
|
+
console.error(m.cli.recusado(rec.indice + 1, rec.erro));
|
|
3608
3844
|
}
|
|
3609
3845
|
}
|
|
3610
3846
|
console.log('');
|
|
3611
|
-
console.log(
|
|
3847
|
+
console.log(m.cli.prove(r.rodada));
|
|
3612
3848
|
return r.recusados.length > 0 ? 1 : 0;
|
|
3613
3849
|
}
|
|
3614
3850
|
if (sub === 'finding' || sub === 'achado') {
|
|
@@ -3633,11 +3869,11 @@ function comandoAudit(args) {
|
|
|
3633
3869
|
irreversivel: texto(args.opcoes.irreversivel) ?? 'nenhum',
|
|
3634
3870
|
estimativa: texto(args.opcoes.estimativa),
|
|
3635
3871
|
});
|
|
3636
|
-
console.log(
|
|
3872
|
+
console.log(m.cli.achadoRegistrado(achado.id, id));
|
|
3637
3873
|
console.log((0, divida_1.textoDoAchado)(achado));
|
|
3638
3874
|
const naMemoria = (0, memoria_1.publicarPropostas)(carregado, [achado]);
|
|
3639
3875
|
if (naMemoria.regime === 'orkmind') {
|
|
3640
|
-
console.log(
|
|
3876
|
+
console.log(m.cli.memoriaUma(naMemoria.detalhe));
|
|
3641
3877
|
}
|
|
3642
3878
|
return 0;
|
|
3643
3879
|
}
|
|
@@ -3649,66 +3885,66 @@ function comandoAudit(args) {
|
|
|
3649
3885
|
return 2;
|
|
3650
3886
|
}
|
|
3651
3887
|
if (estado === 'virou-thread') {
|
|
3652
|
-
console.error(
|
|
3888
|
+
console.error(m.cli.estadoReservado);
|
|
3653
3889
|
return 2;
|
|
3654
3890
|
}
|
|
3655
3891
|
const achado = (0, divida_1.exigirAchado)(carregado.raiz, id);
|
|
3656
3892
|
const atualizado = (0, divida_1.carimbarAchado)(carregado.raiz, achado, { estado });
|
|
3657
|
-
console.log(
|
|
3893
|
+
console.log(m.cli.achadoEstado(atualizado.id, atualizado.estado));
|
|
3658
3894
|
console.log((0, divida_1.textoDoAchado)(atualizado));
|
|
3659
3895
|
return 0;
|
|
3660
3896
|
}
|
|
3661
|
-
console.error(
|
|
3897
|
+
console.error(m.cli.findingDesconhecido(acao ?? ''));
|
|
3662
3898
|
return 2;
|
|
3663
3899
|
}
|
|
3664
3900
|
if (sub === 'verify') {
|
|
3665
3901
|
const id = args.posicionais[2];
|
|
3666
3902
|
if (!id) {
|
|
3667
|
-
console.error('
|
|
3903
|
+
console.error(m.uso('verify'));
|
|
3668
3904
|
return 2;
|
|
3669
3905
|
}
|
|
3670
3906
|
const v = (0, auditrun_1.verificarRodada)(carregado, id);
|
|
3671
|
-
console.log(
|
|
3672
|
-
console.log(
|
|
3673
|
-
console.log(
|
|
3907
|
+
console.log(m.cli.verifyTitulo(v.rodada));
|
|
3908
|
+
console.log(m.cli.verifyHead(v.commit));
|
|
3909
|
+
console.log(m.cli.verifyDir(v.cwd));
|
|
3674
3910
|
console.log('');
|
|
3675
3911
|
if (v.resultados.length === 0) {
|
|
3676
|
-
console.log(
|
|
3912
|
+
console.log(m.cli.verifyVazio);
|
|
3677
3913
|
}
|
|
3678
3914
|
for (const r of v.resultados) {
|
|
3679
|
-
console.log(
|
|
3680
|
-
console.log(
|
|
3681
|
-
console.log(
|
|
3915
|
+
console.log(m.cli.verifyClaim(r.claim.id, r.verificado, r.claim.alegacao));
|
|
3916
|
+
console.log(m.cli.arquivo(r.claim.arquivo));
|
|
3917
|
+
console.log(r.claim.verificar.length > 0 ? m.cli.comandos(r.claim.verificar.join(' && ')) : m.cli.semComando);
|
|
3682
3918
|
if (!r.verificado)
|
|
3683
|
-
console.log(
|
|
3919
|
+
console.log(m.cli.motivoDetalhe(String(r.motivo), r.detalhe));
|
|
3684
3920
|
}
|
|
3685
3921
|
console.log('');
|
|
3686
3922
|
console.log(v.ok
|
|
3687
|
-
?
|
|
3688
|
-
:
|
|
3923
|
+
? m.cli.vereditoOk
|
|
3924
|
+
: m.cli.vereditoRuim(v.motivos.join(', ')));
|
|
3689
3925
|
if (v.motivos.includes('claims.unverifiable')) {
|
|
3690
|
-
console.log(
|
|
3926
|
+
console.log(m.cli.unverifiable);
|
|
3691
3927
|
}
|
|
3692
3928
|
return v.ok ? 0 : 1;
|
|
3693
3929
|
}
|
|
3694
3930
|
if (sub === 'report' || sub === 'relatorio') {
|
|
3695
3931
|
const id = args.posicionais[2];
|
|
3696
3932
|
if (!id) {
|
|
3697
|
-
console.error('
|
|
3933
|
+
console.error(m.uso('report'));
|
|
3698
3934
|
return 2;
|
|
3699
3935
|
}
|
|
3700
3936
|
const r = (0, auditrun_1.relatorioDaRodada)(carregado, id, { publicar: args.opcoes.publicar === true });
|
|
3701
3937
|
console.log(r.texto);
|
|
3702
|
-
console.log(
|
|
3938
|
+
console.log(m.cli.relatorio(r.caminho));
|
|
3703
3939
|
if (r.publicado)
|
|
3704
|
-
console.log(
|
|
3940
|
+
console.log(m.cli.publicado(r.publicado));
|
|
3705
3941
|
return 0;
|
|
3706
3942
|
}
|
|
3707
3943
|
if (sub === 'divida' || sub === 'board') {
|
|
3708
3944
|
const bruto = texto(args.opcoes.pack);
|
|
3709
3945
|
const pack = bruto ? (0, auditoria_1.parsePack)(bruto) : undefined;
|
|
3710
3946
|
if (bruto && !pack) {
|
|
3711
|
-
console.error(
|
|
3947
|
+
console.error(m.erro.pack(bruto, auditoria_1.ORDEM_DOS_PACKS.join(', ')));
|
|
3712
3948
|
return 2;
|
|
3713
3949
|
}
|
|
3714
3950
|
console.log((0, divida_1.tabelaDaDivida)(carregado.raiz, {
|
|
@@ -3724,14 +3960,14 @@ function comandoAudit(args) {
|
|
|
3724
3960
|
if (sub === 'surface' || sub === 'superficie') {
|
|
3725
3961
|
const bruta = texto(args.opcoes.regra);
|
|
3726
3962
|
if (bruta && !superficie_1.REGRAS_DE_SUPERFICIE.includes(bruta.toUpperCase())) {
|
|
3727
|
-
console.error(
|
|
3963
|
+
console.error(m.erro.regra(bruta, superficie_1.REGRAS_DE_SUPERFICIE.join(', ')));
|
|
3728
3964
|
return 2;
|
|
3729
3965
|
}
|
|
3730
3966
|
const regra = bruta ? bruta.toUpperCase() : undefined;
|
|
3731
3967
|
const limiteBruto = texto(args.opcoes.limite);
|
|
3732
3968
|
const limite = limiteBruto ? Number(limiteBruto) : undefined;
|
|
3733
3969
|
if (limite !== undefined && (!Number.isFinite(limite) || limite < 1)) {
|
|
3734
|
-
console.error(
|
|
3970
|
+
console.error(m.erro.limite(limiteBruto ?? ''));
|
|
3735
3971
|
return 2;
|
|
3736
3972
|
}
|
|
3737
3973
|
const rodadaAlvo = texto(args.opcoes.registrar);
|
|
@@ -3739,17 +3975,17 @@ function comandoAudit(args) {
|
|
|
3739
3975
|
const r = (0, auditrun_1.varrerSuperficieDaRodada)(carregado, rodadaAlvo, { registrar: true, limitePorRegra: limite });
|
|
3740
3976
|
console.log((0, superficie_1.textoDaVarredura)(r.resultado));
|
|
3741
3977
|
console.log('');
|
|
3742
|
-
console.log(
|
|
3978
|
+
console.log(m.cli.rodadaRegistrada(r.rodada, r.registrados.length));
|
|
3743
3979
|
for (const a of r.registrados)
|
|
3744
3980
|
console.log(` ${a.id} ${a.regra} ${a.arquivo}:${a.linha} ${a.titulo}`);
|
|
3745
3981
|
if (r.duplicados.length > 0) {
|
|
3746
|
-
console.log(
|
|
3982
|
+
console.log(m.cli.jaRegistrados(r.duplicados.map((a) => a.id).join(', ')));
|
|
3747
3983
|
}
|
|
3748
3984
|
for (const rec of r.recusados) {
|
|
3749
|
-
console.error(
|
|
3985
|
+
console.error(m.cli.recusadoSuperficie(rec.achado.regra, rec.achado.arquivo, rec.achado.linha, rec.erro));
|
|
3750
3986
|
}
|
|
3751
3987
|
console.log('');
|
|
3752
|
-
console.log(
|
|
3988
|
+
console.log(m.cli.prove(r.rodada));
|
|
3753
3989
|
if (r.recusados.length > 0)
|
|
3754
3990
|
return 1;
|
|
3755
3991
|
return r.registrados.length > 0 ? 1 : 0;
|
|
@@ -3768,7 +4004,7 @@ function comandoAudit(args) {
|
|
|
3768
4004
|
// Codigo != 0 com achado: o agendador do host percebe a superficie aberta sem ler texto.
|
|
3769
4005
|
return resultado.achados.length > 0 ? 1 : 0;
|
|
3770
4006
|
}
|
|
3771
|
-
console.error(
|
|
4007
|
+
console.error(m.uso(sub));
|
|
3772
4008
|
return 2;
|
|
3773
4009
|
}
|
|
3774
4010
|
/** Roteia o comando. Devolve o codigo de saida do processo. */
|
|
@@ -3812,19 +4048,19 @@ function comandoRecall(args) {
|
|
|
3812
4048
|
const carregado = (0, project_state_1.memoryState)((0, manifest_1.exigirManifesto)()).loaded;
|
|
3813
4049
|
const id = args.posicionais[1];
|
|
3814
4050
|
if (!id) {
|
|
3815
|
-
console.error(
|
|
4051
|
+
console.error((0, locale_1.msg)().operacao.restante.recall.uso);
|
|
3816
4052
|
return 2;
|
|
3817
4053
|
}
|
|
3818
4054
|
const thread = (0, thread_1.lerThread)(carregado.raiz, id);
|
|
3819
4055
|
const faseBruta = texto(args.opcoes.fase) ?? texto(args.opcoes.momento);
|
|
3820
4056
|
const momento = faseBruta ? (0, thread_1.exigirFase)(thread, faseBruta) : undefined;
|
|
3821
4057
|
const memoria = (0, memoria_1.abrirMemoria)(carregado, { leituraRestrita: { thread: id, limite: limiteDeLeitura(args.opcoes.janela) } });
|
|
3822
|
-
const r = (0, recall_1.recallDaThread)(carregado, memoria, id, {
|
|
4058
|
+
const r = (0, locale_1.comLocale)('pt-BR', () => (0, recall_1.recallDaThread)(carregado, memoria, id, {
|
|
3823
4059
|
momento,
|
|
3824
4060
|
id: texto(args.opcoes.id),
|
|
3825
4061
|
todos: args.opcoes.todos === true,
|
|
3826
4062
|
forcar: args.opcoes.forcar === true,
|
|
3827
|
-
});
|
|
4063
|
+
}));
|
|
3828
4064
|
if (args.opcoes.json === true) {
|
|
3829
4065
|
console.log(JSON.stringify(r, null, 2));
|
|
3830
4066
|
}
|
|
@@ -3839,15 +4075,16 @@ function comandoMemory(args) {
|
|
|
3839
4075
|
const candidate = (0, manifest_1.exigirManifesto)();
|
|
3840
4076
|
const carregado = (0, project_state_1.memoryState)(candidate).loaded;
|
|
3841
4077
|
const sub = args.posicionais[1] ?? 'status';
|
|
4078
|
+
const mm = (0, locale_1.msg)().operacao.restante.memory.cli;
|
|
3842
4079
|
const escopo = texto(args.opcoes.escopo)?.split(',').map(s => s.trim());
|
|
3843
4080
|
if (sub === 'inventory' || (sub === 'migrate' && args.opcoes['dry-run'] === true)) {
|
|
3844
4081
|
const r = (0, memory_migration_1.inventariarHandoffs)(carregado, escopo);
|
|
3845
4082
|
if (args.opcoes.json === true)
|
|
3846
4083
|
console.log(JSON.stringify(r, null, 2));
|
|
3847
4084
|
else {
|
|
3848
|
-
console.log(
|
|
4085
|
+
console.log(mm.inventario(r.tenant, r.incluidos, r.excluidos));
|
|
3849
4086
|
for (const f of r.fontes)
|
|
3850
|
-
console.log(
|
|
4087
|
+
console.log(mm.fonte(f.incluir, f.arquivo, f.motivo));
|
|
3851
4088
|
}
|
|
3852
4089
|
return r.fontes.some(f => f.bloqueante) ? 1 : 0;
|
|
3853
4090
|
}
|
|
@@ -3864,7 +4101,7 @@ function comandoMemory(args) {
|
|
|
3864
4101
|
if (args.opcoes.json === true)
|
|
3865
4102
|
console.log(JSON.stringify(r, null, 2));
|
|
3866
4103
|
else {
|
|
3867
|
-
console.log(
|
|
4104
|
+
console.log(mm.migracao(r.inventario.tenant, r.resultados.filter(i => i.ok).length, r.falhas, r.inventario.excluidos));
|
|
3868
4105
|
for (const item of r.resultados)
|
|
3869
4106
|
console.log(` ${item.arquivo}: ${item.ok ? item.gravacao?.id : item.erro}`);
|
|
3870
4107
|
}
|
|
@@ -3905,13 +4142,13 @@ function comandoMemory(args) {
|
|
|
3905
4142
|
const motivo = error instanceof Error
|
|
3906
4143
|
? /^(?:write\.activation|scope|memory)\.[a-z.-]+/.exec(error.message)?.[0] ?? 'write.activation.invalid'
|
|
3907
4144
|
: 'write.activation.invalid';
|
|
3908
|
-
const detalhe = '
|
|
4145
|
+
const detalhe = (0, locale_1.comLocale)('pt-BR', () => (0, locale_1.textoDoCatalogo)(m => m.operacao.restante.memory.cli.syncDetalhe));
|
|
3909
4146
|
if (args.opcoes.json === true)
|
|
3910
4147
|
console.log(JSON.stringify({
|
|
3911
4148
|
regime: memoria.regime, estado: memoria.estado, thread: threadId ?? null, perfil,
|
|
3912
4149
|
publicacao: { estado: 'pendente', motivo }, falhas: 1, gravadas: [], erro: motivo, detalhe,
|
|
3913
4150
|
}, null, 2));
|
|
3914
|
-
console.error(`${motivo}: ${detalhe}`);
|
|
4151
|
+
console.error(`${motivo}: ${(0, locale_1.remontar)(detalhe)}`);
|
|
3915
4152
|
return 1;
|
|
3916
4153
|
}
|
|
3917
4154
|
}
|
|
@@ -3935,7 +4172,7 @@ function comandoMemory(args) {
|
|
|
3935
4172
|
const janela = limiteDeLeitura(args.opcoes.janela);
|
|
3936
4173
|
const tagsBrutas = texto(args.opcoes.tags);
|
|
3937
4174
|
if (!tagsBrutas) {
|
|
3938
|
-
console.error(
|
|
4175
|
+
console.error(mm.tagsUso);
|
|
3939
4176
|
return 2;
|
|
3940
4177
|
}
|
|
3941
4178
|
let tags;
|
|
@@ -3943,7 +4180,7 @@ function comandoMemory(args) {
|
|
|
3943
4180
|
tags = JSON.parse(tagsBrutas);
|
|
3944
4181
|
}
|
|
3945
4182
|
catch (e) {
|
|
3946
|
-
console.error(
|
|
4183
|
+
console.error(mm.tagsInvalidas(e.message));
|
|
3947
4184
|
return 2;
|
|
3948
4185
|
}
|
|
3949
4186
|
const colecao = texto(args.opcoes.colecao) ?? texto(args.opcoes.collection);
|
|
@@ -3960,16 +4197,16 @@ function comandoMemory(args) {
|
|
|
3960
4197
|
limite,
|
|
3961
4198
|
});
|
|
3962
4199
|
if (threadId && memoria.regime === 'files')
|
|
3963
|
-
console.error(
|
|
4200
|
+
console.error(mm.files(`${memoria.estado.motivo}`));
|
|
3964
4201
|
if (args.opcoes.json === true) {
|
|
3965
4202
|
console.log(JSON.stringify(entradas, null, 2));
|
|
3966
4203
|
return 0;
|
|
3967
4204
|
}
|
|
3968
|
-
console.log(
|
|
4205
|
+
console.log(mm.buscaTag(memoria.regime));
|
|
3969
4206
|
console.log('');
|
|
3970
4207
|
if (memoria.regime === 'files') {
|
|
3971
4208
|
console.log(` ${memoria.estado.detalhe}`);
|
|
3972
|
-
console.log(
|
|
4209
|
+
console.log(mm.correcao(memoria.estado.correcao));
|
|
3973
4210
|
return 0;
|
|
3974
4211
|
}
|
|
3975
4212
|
for (const e of entradas) {
|
|
@@ -3977,13 +4214,13 @@ function comandoMemory(args) {
|
|
|
3977
4214
|
console.log(` ${e.content.split('\n')[0].slice(0, 100)}`);
|
|
3978
4215
|
}
|
|
3979
4216
|
console.log('');
|
|
3980
|
-
console.log(
|
|
4217
|
+
console.log(mm.entradas(entradas.length));
|
|
3981
4218
|
return 0;
|
|
3982
4219
|
}
|
|
3983
4220
|
if (sub === 'index') {
|
|
3984
4221
|
const modelo = texto(args.opcoes.modelo) ?? 'primario';
|
|
3985
4222
|
if (!['primario', 'fallback', 'todos'].includes(modelo)) {
|
|
3986
|
-
console.error(
|
|
4223
|
+
console.error(mm.indexUso);
|
|
3987
4224
|
return 2;
|
|
3988
4225
|
}
|
|
3989
4226
|
const memoria = (0, memoria_1.abrirMemoria)(carregado);
|
|
@@ -3992,7 +4229,7 @@ function comandoMemory(args) {
|
|
|
3992
4229
|
if (args.opcoes.json === true)
|
|
3993
4230
|
console.log(JSON.stringify(falha, null, 2));
|
|
3994
4231
|
else
|
|
3995
|
-
console.error(
|
|
4232
|
+
console.error(mm.indexFalha(memoria.regime, `${memoria.estado.motivo}`, memoria.estado.correcao));
|
|
3996
4233
|
return 1;
|
|
3997
4234
|
}
|
|
3998
4235
|
const config = (0, manifest_1.configDeEmbedding)(carregado.manifesto);
|
|
@@ -4005,11 +4242,11 @@ function comandoMemory(args) {
|
|
|
4005
4242
|
}
|
|
4006
4243
|
catch (erro) {
|
|
4007
4244
|
const motivo = (0, indice_vetorial_1.codigoDaFalha)(erro);
|
|
4008
|
-
const detalhe =
|
|
4245
|
+
const detalhe = mm.universoDetalhe;
|
|
4009
4246
|
if (args.opcoes.json === true)
|
|
4010
4247
|
console.log(JSON.stringify({ motivo, detalhe }, null, 2));
|
|
4011
4248
|
else
|
|
4012
|
-
console.error(
|
|
4249
|
+
console.error(mm.universoFalhou(motivo, detalhe));
|
|
4013
4250
|
return 1;
|
|
4014
4251
|
}
|
|
4015
4252
|
const alvos = modelo === 'todos' ? ['primario', 'fallback'] : [modelo];
|
|
@@ -4028,7 +4265,7 @@ function comandoMemory(args) {
|
|
|
4028
4265
|
}
|
|
4029
4266
|
return resultados.some(r => !r.dryRun && r.motivo) ? 1 : 0;
|
|
4030
4267
|
}
|
|
4031
|
-
console.error(
|
|
4268
|
+
console.error(mm.desconhecido(sub));
|
|
4032
4269
|
return 2;
|
|
4033
4270
|
}
|
|
4034
4271
|
/** Aviso informativo: não consulta rede, não reserva e não bloqueia criação. */
|
|
@@ -4043,10 +4280,11 @@ function avisoRoadmapSemAssociacao(nome, roadmap) {
|
|
|
4043
4280
|
* Nao combina com --tags nem com a leitura restrita por thread nesta versao (erro tipado).
|
|
4044
4281
|
*/
|
|
4045
4282
|
function buscaPorTexto(args, carregado) {
|
|
4283
|
+
const mm = (0, locale_1.msg)().operacao.restante.memory.cli;
|
|
4046
4284
|
const frase = texto(args.opcoes.texto);
|
|
4047
4285
|
if (args.opcoes.tags !== undefined || args.opcoes.thread !== undefined || args.opcoes.restrito !== undefined ||
|
|
4048
4286
|
args.opcoes.janela !== undefined) {
|
|
4049
|
-
console.error(
|
|
4287
|
+
console.error(mm.textoExclusivo);
|
|
4050
4288
|
return 2;
|
|
4051
4289
|
}
|
|
4052
4290
|
const modo = (texto(args.opcoes.modo) ?? 'hibrido');
|
|
@@ -4056,7 +4294,7 @@ function buscaPorTexto(args, carregado) {
|
|
|
4056
4294
|
if (!(0, orkmind_1.textoDeBuscaValido)(frase) || !busca_semantica_1.MODOS_DE_BUSCA.includes(modo) ||
|
|
4057
4295
|
(colecao !== undefined && !orkmind_1.COLECOES_DO_ORK.includes(colecao)) ||
|
|
4058
4296
|
!Number.isInteger(limite) || limite < 1 || limite > busca_semantica_1.LIMITE_MAXIMO_DA_BUSCA) {
|
|
4059
|
-
console.error(
|
|
4297
|
+
console.error(mm.textoUso(busca_semantica_1.MODOS_DE_BUSCA.join('|'), orkmind_1.COLECOES_DO_ORK.join('|'), busca_semantica_1.LIMITE_MAXIMO_DA_BUSCA));
|
|
4060
4298
|
return 2;
|
|
4061
4299
|
}
|
|
4062
4300
|
const memoria = (0, memoria_1.abrirMemoria)(carregado);
|
|
@@ -4079,7 +4317,7 @@ function buscaPorTexto(args, carregado) {
|
|
|
4079
4317
|
}
|
|
4080
4318
|
else if (!universo) {
|
|
4081
4319
|
// RM-038: sem o universo inteiro nao ha busca; o motivo tipado sai, nunca um resultado parcial.
|
|
4082
|
-
r = { ...vazio, motivo: falhaDoUniverso, detalhe:
|
|
4320
|
+
r = { ...vazio, motivo: falhaDoUniverso, detalhe: mm.buscaUniversoDetalhe };
|
|
4083
4321
|
}
|
|
4084
4322
|
else {
|
|
4085
4323
|
const driver = (0, orkmind_1.configDoManifesto)(carregado.manifesto);
|
|
@@ -4127,7 +4365,8 @@ function extrairOpcaoDeProjeto(argv) {
|
|
|
4127
4365
|
return { argv: resto, projeto };
|
|
4128
4366
|
}
|
|
4129
4367
|
/** Comandos que nao leem projeto: o alvo nao e resolvido (nem recusado) para eles. */
|
|
4130
|
-
|
|
4368
|
+
// RM-062 (F1): `privado varrer` le o repositorio do diretorio atual (o checkout do CI, o clone de um site), nao o alvo.
|
|
4369
|
+
const COMANDOS_SEM_PROJETO = new Set(['demo', 'ciclos', 'mcp', 'init', 'projetos', 'privado']);
|
|
4131
4370
|
/**
|
|
4132
4371
|
* Fatia 2 (D3): os comandos que leem projeto e nao terminam com a linha `Projeto consultado`. Hoje so
|
|
4133
4372
|
* o `sessions event`, o sensor dos hooks do Claude Code: maquina falando com maquina, e o sensor compara
|
|
@@ -4245,8 +4484,8 @@ function executarComando(argvBruto) {
|
|
|
4245
4484
|
delete process.env[nome];
|
|
4246
4485
|
}
|
|
4247
4486
|
// CLI por locale (RM-061, EN1 e EN7): a escolha do onboarding (owner.language) ou o LC_ALL/LC_MESSAGES/LANG
|
|
4248
|
-
// decidem a lingua do TEXTO dos comandos cobertos (`cobreLocale`); `--json` e contrato, e os recortes
|
|
4249
|
-
//
|
|
4487
|
+
// decidem a lingua do TEXTO dos comandos cobertos (`cobreLocale`); `--json` e contrato, e os recortes ainda
|
|
4488
|
+
// fora do catalogo (`doctor --modo` e os subcomandos fora da lista) ficam em pt-BR.
|
|
4250
4489
|
if ((0, locale_1.cobreLocale)(args.posicionais, args.opcoes)) {
|
|
4251
4490
|
(0, locale_1.ativarLocale)((0, locale_1.resolverLocale)(ambienteManifesto?.manifesto.owner?.language).locale);
|
|
4252
4491
|
(0, locale_1.ligarRemontagem)(true);
|
|
@@ -4256,28 +4495,34 @@ function executarComando(argvBruto) {
|
|
|
4256
4495
|
const projeto = texto(args.opcoes.project), host = texto(args.opcoes.host), threadId = texto(args.opcoes.thread);
|
|
4257
4496
|
// I-36 (D4): a identidade do despacho so chega com a thread vinculada da sessao filha.
|
|
4258
4497
|
const dispatchId = texto(args.opcoes.dispatch);
|
|
4259
|
-
const
|
|
4498
|
+
const transporteDado = texto(args.opcoes['ship-transport']);
|
|
4499
|
+
const transporteShip = transporteDado ?? 'github-ssh';
|
|
4500
|
+
const impressaoSsh = texto(args.opcoes['ssh-fingerprint']);
|
|
4260
4501
|
const permissoesFilho = texto(args.opcoes['child-permissions']) ?? 'interactive';
|
|
4261
4502
|
const permissoesDono = texto(args.opcoes['owner-permissions']);
|
|
4262
4503
|
const acao = args.posicionais[1];
|
|
4263
4504
|
if (args.posicionais.length !== 2 || !['serve', 'install'].includes(acao) || !projeto ||
|
|
4264
4505
|
(host !== 'codex' && host !== 'claude-code') ||
|
|
4265
|
-
Object.keys(args.opcoes).some(k => !['project', 'host', 'ship-transport', 'child-permissions', ...(acao === 'install' ? ['dry-run', 'owner-permissions'] : ['thread', 'dispatch'])].includes(k)) ||
|
|
4506
|
+
Object.keys(args.opcoes).some(k => !['project', 'host', 'ship-transport', 'child-permissions', ...(acao === 'install' ? ['dry-run', 'owner-permissions', 'ssh-fingerprint'] : ['thread', 'dispatch'])].includes(k)) ||
|
|
4266
4507
|
(args.opcoes.dispatch !== undefined && (!threadId || !dispatchId || !/^[a-f0-9-]{36}$/.test(dispatchId))) ||
|
|
4267
4508
|
argv.filter(a => a === '--ship-transport' || a.startsWith('--ship-transport=')).length > 1 ||
|
|
4268
4509
|
argv.filter(a => a === '--child-permissions' || a.startsWith('--child-permissions=')).length > 1 ||
|
|
4510
|
+
argv.filter(a => a === '--ssh-fingerprint' || a.startsWith('--ssh-fingerprint=')).length > 1 ||
|
|
4511
|
+
(args.opcoes['ssh-fingerprint'] !== undefined && (transporteShip !== 'forja-ssh' || typeof args.opcoes['ssh-fingerprint'] !== 'string' || !/^SHA256:[A-Za-z0-9+/]{43}$/.test(impressaoSsh ?? ''))) ||
|
|
4269
4512
|
(args.opcoes['owner-permissions'] !== undefined && (host !== 'codex' || typeof args.opcoes['owner-permissions'] !== 'string' || !['interactive', 'orchestrate'].includes(permissoesDono ?? ''))) ||
|
|
4270
4513
|
argv.filter(a => a === '--owner-permissions' || a.startsWith('--owner-permissions=')).length > 1 ||
|
|
4271
4514
|
!['interactive', 'worktree'].includes(permissoesFilho) ||
|
|
4272
4515
|
(args.opcoes['child-permissions'] !== undefined && typeof args.opcoes['child-permissions'] !== 'string') ||
|
|
4273
|
-
!
|
|
4516
|
+
!(0, mcp_transportes_1.ehTransporteShipMcp)(transporteShip) ||
|
|
4274
4517
|
(args.opcoes['ship-transport'] !== undefined && typeof args.opcoes['ship-transport'] !== 'string') ||
|
|
4275
4518
|
(args.opcoes.thread !== undefined && (!threadId || !/^[a-zA-Z0-9][a-zA-Z0-9._-]{0,79}$/.test(threadId))) ||
|
|
4276
4519
|
(args.opcoes['dry-run'] !== undefined && args.opcoes['dry-run'] !== true))
|
|
4277
|
-
throw new Error(
|
|
4520
|
+
throw new Error((0, locale_1.msg)().operacao.restante.mcp.uso);
|
|
4278
4521
|
if (acao === 'install') {
|
|
4279
|
-
void Promise.resolve().then(() => __importStar(require('./mcp-install'))).then(({ instalarMcp, textoInstalacaoMcp }) => console.log(textoInstalacaoMcp(instalarMcp({ projeto, host, dryRun: args.opcoes['dry-run'] === true,
|
|
4280
|
-
|
|
4522
|
+
void Promise.resolve().then(() => __importStar(require('./mcp-install'))).then(({ instalarMcp, textoInstalacaoMcp }) => console.log(textoInstalacaoMcp(instalarMcp({ projeto, host, dryRun: args.opcoes['dry-run'] === true,
|
|
4523
|
+
transporteShip: transporteDado === undefined ? undefined : transporteShip, impressaoSsh,
|
|
4524
|
+
permissoesFilho: permissoesFilho, permissoesDono: permissoesDono }))))
|
|
4525
|
+
.catch(e => { console.error((0, locale_1.msg)().operacao.restante.mcp.erro(e.message)); process.exitCode = 1; });
|
|
4281
4526
|
return 0;
|
|
4282
4527
|
}
|
|
4283
4528
|
void Promise.resolve().then(() => __importStar(require('./mcp-server'))).then(({ servirMcp }) => servirMcp({ projeto, host, threadId, dispatchId, nomesProviderHerdados: nomesHerdados, transporteShip: transporteShip, permissoesFilho: permissoesFilho })).catch(e => { console.error(`mcp: ${e.message}`); process.exitCode = 1; });
|
|
@@ -4295,7 +4540,20 @@ function executarComando(argvBruto) {
|
|
|
4295
4540
|
}
|
|
4296
4541
|
// RM-031: o check dos analisadores do grafo entra por aqui, a porta da familia do grafo (fronteira do KG1).
|
|
4297
4542
|
// RM-061 (F2a): a redacao do check vem do catalogo, no locale do comando (a familia do grafo nao o importa).
|
|
4298
|
-
const
|
|
4543
|
+
const analisadores = () => (0, intelligence_graph_cli_1.checarAnalisadoresDoGrafo)(versao_1.VERSAO_DO_ORK, undefined, undefined, (0, locale_1.msg)().doctor.grafo);
|
|
4544
|
+
// `--forja=false` ou `--forja <valor>` nao vira `nao-medida` calado: a flag e booleana.
|
|
4545
|
+
if (args.opcoes.forja !== undefined && args.opcoes.forja !== true) {
|
|
4546
|
+
console.error((0, locale_1.msg)().forja.doctor.flagComValor);
|
|
4547
|
+
return 2;
|
|
4548
|
+
}
|
|
4549
|
+
// RM-063 (fatia 3, H1): `--json` e o contrato `ork.doctor/v1` que a batida do host le, com a idade da batida.
|
|
4550
|
+
if (args.opcoes.json === true) {
|
|
4551
|
+
// A batida dos hosts le o --json com frequencia: a secao forja (rede e CLI) so com --forja.
|
|
4552
|
+
const j = (0, doctor_1.doctorJson)((0, manifest_1.diretorioDoProjeto)(), nomesHerdados, analisadores, undefined, args.opcoes.forja === true ? doctor_forja_1.checarForja : undefined);
|
|
4553
|
+
console.log(JSON.stringify(j.json, null, 2));
|
|
4554
|
+
return j.codigo;
|
|
4555
|
+
}
|
|
4556
|
+
const r = (0, doctor_1.doctor)((0, manifest_1.diretorioDoProjeto)(), nomesHerdados, analisadores, doctor_forja_1.checarForja);
|
|
4299
4557
|
console.log(r.texto);
|
|
4300
4558
|
return r.codigo;
|
|
4301
4559
|
}
|
|
@@ -4358,6 +4616,23 @@ function executarComando(argvBruto) {
|
|
|
4358
4616
|
const carregado = (0, manifest_1.carregarManifesto)();
|
|
4359
4617
|
// I-43: `#Look` no pedido nao pode cair no default em silencio. O adaptador
|
|
4360
4618
|
// recebe a recusa tipada e saida != 0, e quem escreveu a #TAG fica sabendo.
|
|
4619
|
+
// RM-058 N6 (D1): `#Noctum` é o modo do arco e só vale com envelope vigente; sem ele, recusa tipada, nunca o padrão.
|
|
4620
|
+
if ((0, noctum_modo_1.tagNoctumNoPedido)(pedido)) {
|
|
4621
|
+
let arcos;
|
|
4622
|
+
try {
|
|
4623
|
+
arcos = (0, noctum_modo_1.aceitarModoNoctum)(carregado?.raiz ?? null);
|
|
4624
|
+
}
|
|
4625
|
+
catch (e) {
|
|
4626
|
+
if (e instanceof noctum_envelope_1.RecusaDoArco) {
|
|
4627
|
+
console.error(e.message);
|
|
4628
|
+
return 2;
|
|
4629
|
+
}
|
|
4630
|
+
throw e;
|
|
4631
|
+
}
|
|
4632
|
+
console.log(args.opcoes.json === true ? JSON.stringify({ modo: 'noctum', tag: '#Noctum', daTag: true, origem: 'tag no pedido',
|
|
4633
|
+
arcos, modoDasThreads: 'auto' }) : 'noctum');
|
|
4634
|
+
return 0;
|
|
4635
|
+
}
|
|
4361
4636
|
const aposentado = (0, modos_1.extrairTagAposentadaDoPedido)(pedido);
|
|
4362
4637
|
if (aposentado) {
|
|
4363
4638
|
console.error((0, modos_1.recusaDeModoAposentado)(aposentado));
|
|
@@ -4429,20 +4704,31 @@ function executarComando(argvBruto) {
|
|
|
4429
4704
|
return comandoLedger(args);
|
|
4430
4705
|
case 'sessions':
|
|
4431
4706
|
return comandoSessions(args);
|
|
4707
|
+
case 'noctum':
|
|
4708
|
+
// RM-058 N6: a porta do CLI para o arco #Noctum (propor, responder, status, tique e relatorio).
|
|
4709
|
+
return (0, noctum_cli_1.comandoNoctum)(args);
|
|
4432
4710
|
case 'pulse': {
|
|
4433
4711
|
if (args.posicionais[1] === 'responder') {
|
|
4434
4712
|
// I-41 (GO-FIX 1, B1 e B2): o caminho de volta do resumo. So o ingresso autenticado chama;
|
|
4435
4713
|
// argv traz identificadores e o envelope assinado vem por stdin, como no `gate answer`.
|
|
4436
4714
|
if (args.opcoes['resposta-stdin'] !== true || args.opcoes.resposta !== undefined || args.posicionais.length !== 2) {
|
|
4437
|
-
throw new Error(
|
|
4715
|
+
throw new Error((0, locale_1.msg)().operacao.pulseCadencia.responderUso);
|
|
4438
4716
|
}
|
|
4439
4717
|
const carregado = (0, manifest_1.exigirManifesto)();
|
|
4440
4718
|
const envelope = (0, hitl_gates_1.lerRespostaStdin)({ por: texto(args.opcoes.por), mensagem: texto(args.opcoes.mensagem),
|
|
4441
4719
|
origem: texto(args.opcoes.origem), canal: texto(args.opcoes.canal), conta: texto(args.opcoes.conta) });
|
|
4442
4720
|
const formato = texto(args.opcoes.formato);
|
|
4443
4721
|
if (formato !== undefined && formato !== 'telegram' && formato !== 'terminal')
|
|
4444
|
-
throw new Error(
|
|
4445
|
-
|
|
4722
|
+
throw new Error((0, locale_1.msg)().operacao.pulseCadencia.responderFormato);
|
|
4723
|
+
// RM-057 (resposta curta, D3; GO-FIX 1, achado 2): a mensagem respondida (reply), `<código>:<id>`, que o gateway
|
|
4724
|
+
// assinou no endereço do pulse; o núcleo só a aceita quando o id é o da mensagem em que a pergunta foi entregue.
|
|
4725
|
+
// GO-FIX 2 (R1): `outra` é a palavra solta em reply a outra mensagem, que o núcleo recusa dizendo por quê.
|
|
4726
|
+
const referencia = args.opcoes['em-resposta-a'];
|
|
4727
|
+
if (referencia !== undefined && !(0, pulse_consentimento_1.referenciaDoReplyValida)(referencia)) {
|
|
4728
|
+
throw new Error((0, locale_1.msg)().operacao.pulseCadencia.responderReferencia);
|
|
4729
|
+
}
|
|
4730
|
+
console.log(JSON.stringify((0, pulse_resposta_1.responderPeloPulse)(carregado.raiz, envelope, { canal: formato ?? 'telegram',
|
|
4731
|
+
...(typeof referencia === 'string' ? { referencia } : {}) })));
|
|
4446
4732
|
return 0;
|
|
4447
4733
|
}
|
|
4448
4734
|
if (args.posicionais[1] === 'cadencia')
|
|
@@ -4464,6 +4750,8 @@ function executarComando(argvBruto) {
|
|
|
4464
4750
|
return comandoVerify(args);
|
|
4465
4751
|
case 'ci':
|
|
4466
4752
|
return comandoCi(args);
|
|
4753
|
+
case 'privado':
|
|
4754
|
+
return comandoPrivado(args);
|
|
4467
4755
|
case 'gate':
|
|
4468
4756
|
return comandoGate(args);
|
|
4469
4757
|
case 'retry':
|
|
@@ -4479,6 +4767,8 @@ function executarComando(argvBruto) {
|
|
|
4479
4767
|
console.log(JSON.stringify(result, null, 2));
|
|
4480
4768
|
return ['ok', 'empty', 'unknown', 'withheld', 'applied', 'rolled-back'].includes(result.state) ? 0 : 1;
|
|
4481
4769
|
}
|
|
4770
|
+
case 'conhecimento':
|
|
4771
|
+
return comandoConhecimento(args);
|
|
4482
4772
|
case 'memory':
|
|
4483
4773
|
return comandoMemory(args);
|
|
4484
4774
|
case 'grafo': {
|
|
@@ -4486,8 +4776,18 @@ function executarComando(argvBruto) {
|
|
|
4486
4776
|
const carregado = (0, manifest_1.exigirManifesto)();
|
|
4487
4777
|
return (0, intelligence_graph_cli_1.executarGrafo)(argv.slice(argv.indexOf('grafo') + 1), { raiz: carregado.raiz, estado: (0, estado_thread_1.raizDoEstado)(carregado.raiz), repositorio: carregado.manifesto.project.name, versao: versao_1.VERSAO_DO_ORK,
|
|
4488
4778
|
contextoDaThread: (id) => (0, mcp_grafo_1.lerEntradaDaThread)(carregado.raiz, id),
|
|
4779
|
+
// RM-061 (F3d): a familia do grafo nao importa o catalogo (fronteira do KG3); a redacao vem daqui, no locale do comando.
|
|
4780
|
+
textos: (0, locale_1.msg)().grafo,
|
|
4489
4781
|
escrever: (texto) => console.log(texto) });
|
|
4490
4782
|
}
|
|
4783
|
+
case 'security-scan': {
|
|
4784
|
+
// Relatorio por SHA no estado da arvore principal; o argv cru depois do comando (o parser e estrito).
|
|
4785
|
+
const carregado = (0, manifest_1.exigirManifesto)();
|
|
4786
|
+
return (0, cli_1.executarSecurityScan)(argv.slice(argv.indexOf('security-scan') + 1), { raiz: carregado.raiz, estado: (0, estado_thread_1.raizDoEstado)(carregado.raiz), escrever: (texto) => console.log(texto),
|
|
4787
|
+
...(carregado.manifesto.check?.mode ? { modoDoManifesto: carregado.manifesto.check.mode } : {}),
|
|
4788
|
+
...(carregado.manifesto.check?.agile ? { agile: { osv_scanner: carregado.manifesto.check.agile.osv_scanner,
|
|
4789
|
+
oxlint: carregado.manifesto.check.agile.oxlint } } : {}) });
|
|
4790
|
+
}
|
|
4491
4791
|
case 'ship':
|
|
4492
4792
|
return comandoShip(args);
|
|
4493
4793
|
case 'activation':
|