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