@orkastery/cli 0.5.3 → 0.6.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/adapters/README.md +18 -0
- package/adapters/claude-code/.claude-plugin/plugin.json +1 -0
- package/adapters/claude-code/README.md +195 -5
- package/adapters/claude-code/agents/ork-check.md +1 -0
- package/adapters/claude-code/agents/ork-go.md +1 -0
- package/adapters/claude-code/agents/ork-goal.md +1 -0
- package/adapters/claude-code/agents/ork-master.md +1 -0
- package/adapters/claude-code/agents/ork-plan.md +1 -0
- package/adapters/claude-code/agents/ork-ship.md +1 -0
- package/adapters/claude-code/hooks/hooks.json +2 -1
- package/adapters/claude-code/hooks/ork-guard.js +15 -1
- package/adapters/claude-code/hooks/ork-resposta.js +91 -0
- package/adapters/claude-code/hooks/ork-sensor.js +18 -2
- package/adapters/claude-code/hooks/quota-signal.js +14 -0
- package/adapters/claude-code/mods/autoridade.json +56 -0
- package/adapters/claude-code/mods/ork-clima/.claude-plugin/plugin.json +14 -0
- package/adapters/claude-code/mods/ork-clima/hooks/contas.ts +283 -0
- package/adapters/claude-code/mods/ork-clima/hooks/hooks.json +3 -0
- package/adapters/claude-code/mods/ork-clima/hooks/previsao.ts +393 -0
- package/adapters/claude-code/mods/ork-clima/hooks/register.ts +205 -0
- package/adapters/claude-code/mods/ork-clima/orkastery-mod.json +5 -0
- package/adapters/claude-code/mods/ork-clima/types/index.d.ts +80 -0
- package/adapters/claude-code/mods/ork-freio/.claude-plugin/plugin.json +14 -0
- package/adapters/claude-code/mods/ork-freio/hooks/carga.ts +160 -0
- package/adapters/claude-code/mods/ork-freio/hooks/conferencia.ts +309 -0
- package/adapters/claude-code/mods/ork-freio/hooks/hooks.json +3 -0
- package/adapters/claude-code/mods/ork-freio/hooks/lote.ts +270 -0
- package/adapters/claude-code/mods/ork-freio/hooks/register.ts +285 -0
- package/adapters/claude-code/mods/ork-freio/orkastery-mod.json +5 -0
- package/adapters/claude-code/mods/ork-freio/types/index.d.ts +127 -0
- package/adapters/claude-code/mods/ork-mensageiro/.claude-plugin/plugin.json +14 -0
- package/adapters/claude-code/mods/ork-mensageiro/hooks/caixa.ts +215 -0
- package/adapters/claude-code/mods/ork-mensageiro/hooks/hooks.json +3 -0
- package/adapters/claude-code/mods/ork-mensageiro/hooks/painel.tsx +165 -0
- package/adapters/claude-code/mods/ork-mensageiro/hooks/recepcao.ts +256 -0
- package/adapters/claude-code/mods/ork-mensageiro/hooks/register.tsx +481 -0
- package/adapters/claude-code/mods/ork-mensageiro/orkastery-mod.json +5 -0
- package/adapters/claude-code/mods/ork-mensageiro/types/index.d.ts +85 -0
- package/adapters/claude-code/mods/ork-mesa/.claude-plugin/plugin.json +14 -0
- package/adapters/claude-code/mods/ork-mesa/hooks/cartoes.tsx +246 -0
- package/adapters/claude-code/mods/ork-mesa/hooks/decidir.ts +110 -0
- package/adapters/claude-code/mods/ork-mesa/hooks/fila.ts +253 -0
- package/adapters/claude-code/mods/ork-mesa/hooks/hooks.json +3 -0
- package/adapters/claude-code/mods/ork-mesa/hooks/obvia.ts +98 -0
- package/adapters/claude-code/mods/ork-mesa/hooks/register.tsx +493 -0
- package/adapters/claude-code/mods/ork-mesa/orkastery-mod.json +5 -0
- package/adapters/claude-code/mods/ork-mesa/types/index.d.ts +131 -0
- package/adapters/claude-code/mods/ork-pista/.claude-plugin/plugin.json +14 -0
- package/adapters/claude-code/mods/ork-pista/hooks/acoes.ts +71 -0
- package/adapters/claude-code/mods/ork-pista/hooks/ci.ts +121 -0
- package/adapters/claude-code/mods/ork-pista/hooks/hooks.json +3 -0
- package/adapters/claude-code/mods/ork-pista/hooks/pista.tsx +356 -0
- package/adapters/claude-code/mods/ork-pista/hooks/register.tsx +439 -0
- package/adapters/claude-code/mods/ork-pista/orkastery-mod.json +5 -0
- package/adapters/claude-code/mods/ork-pista/types/index.d.ts +85 -0
- package/adapters/claude-code/mods/ork-ponte/.claude-plugin/plugin.json +13 -0
- package/adapters/claude-code/mods/ork-ponte/hooks/faixa.tsx +57 -0
- package/adapters/claude-code/mods/ork-ponte/hooks/guarda.ts +410 -0
- package/adapters/claude-code/mods/ork-ponte/hooks/hooks.json +3 -0
- package/adapters/claude-code/mods/ork-ponte/hooks/mostrado.ts +55 -0
- package/adapters/claude-code/mods/ork-ponte/hooks/nucleo.ts +157 -0
- package/adapters/claude-code/mods/ork-ponte/hooks/papel.ts +42 -0
- package/adapters/claude-code/mods/ork-ponte/hooks/register.ts +331 -0
- package/adapters/claude-code/mods/ork-ponte/hooks/vigia.ts +76 -0
- package/adapters/claude-code/mods/ork-ponte/orkastery-mod.json +5 -0
- package/adapters/claude-code/mods/ork-ponte/types/index.d.ts +178 -0
- package/adapters/claude-code/mods/ork-portao/.claude-plugin/plugin.json +14 -0
- package/adapters/claude-code/mods/ork-portao/hooks/hooks.json +3 -0
- package/adapters/claude-code/mods/ork-portao/hooks/lease.ts +201 -0
- package/adapters/claude-code/mods/ork-portao/hooks/plano.ts +304 -0
- package/adapters/claude-code/mods/ork-portao/hooks/register.ts +339 -0
- package/adapters/claude-code/mods/ork-portao/hooks/verify.ts +152 -0
- package/adapters/claude-code/mods/ork-portao/orkastery-mod.json +5 -0
- package/adapters/claude-code/mods/ork-portao/types/index.d.ts +60 -0
- package/adapters/claude-code/mods/ork-radar/.claude-plugin/plugin.json +14 -0
- package/adapters/claude-code/mods/ork-radar/hooks/colisao.ts +420 -0
- package/adapters/claude-code/mods/ork-radar/hooks/hooks.json +3 -0
- package/adapters/claude-code/mods/ork-radar/hooks/mapa.tsx +322 -0
- package/adapters/claude-code/mods/ork-radar/hooks/register.tsx +470 -0
- package/adapters/claude-code/mods/ork-radar/orkastery-mod.json +5 -0
- package/adapters/claude-code/mods/ork-radar/types/index.d.ts +72 -0
- package/adapters/claude-code/mods/ork-ritual/.claude-plugin/plugin.json +14 -0
- package/adapters/claude-code/mods/ork-ritual/hooks/hooks.json +3 -0
- package/adapters/claude-code/mods/ork-ritual/hooks/nota.ts +88 -0
- package/adapters/claude-code/mods/ork-ritual/hooks/register.tsx +494 -0
- package/adapters/claude-code/mods/ork-ritual/hooks/replay.tsx +271 -0
- package/adapters/claude-code/mods/ork-ritual/hooks/ritual.ts +218 -0
- package/adapters/claude-code/mods/ork-ritual/orkastery-mod.json +5 -0
- package/adapters/claude-code/mods/ork-ritual/types/index.d.ts +106 -0
- package/adapters/claude-code/mods/ork-sentinela/.claude-plugin/plugin.json +14 -0
- package/adapters/claude-code/mods/ork-sentinela/hooks/alertas.ts +85 -0
- package/adapters/claude-code/mods/ork-sentinela/hooks/despacho.ts +156 -0
- package/adapters/claude-code/mods/ork-sentinela/hooks/hooks.json +3 -0
- package/adapters/claude-code/mods/ork-sentinela/hooks/register.ts +511 -0
- package/adapters/claude-code/mods/ork-sentinela/hooks/vigia.ts +186 -0
- package/adapters/claude-code/mods/ork-sentinela/orkastery-mod.json +5 -0
- package/adapters/claude-code/mods/ork-sentinela/types/index.d.ts +65 -0
- package/adapters/claude-code/mods/ork-torre/.claude-plugin/plugin.json +14 -0
- package/adapters/claude-code/mods/ork-torre/hooks/agenda.ts +60 -0
- package/adapters/claude-code/mods/ork-torre/hooks/detalhe.tsx +236 -0
- package/adapters/claude-code/mods/ork-torre/hooks/frases.ts +42 -0
- package/adapters/claude-code/mods/ork-torre/hooks/hooks.json +3 -0
- package/adapters/claude-code/mods/ork-torre/hooks/painel.tsx +344 -0
- package/adapters/claude-code/mods/ork-torre/hooks/rede.ts +97 -0
- package/adapters/claude-code/mods/ork-torre/hooks/register.tsx +437 -0
- package/adapters/claude-code/mods/ork-torre/orkastery-mod.json +5 -0
- package/adapters/claude-code/mods/ork-torre/types/index.d.ts +108 -0
- package/adapters/codex/skills/ork/SKILL.md +2 -0
- package/adapters/hermes/README.md +64 -1
- package/adapters/hermes/bin/ork-conhecimento-colecoes.sh +14 -0
- package/adapters/hermes/bin/ork-conhecimento-listar.sh +15 -0
- package/adapters/hermes/bin/ork-conhecimento-mostrar.sh +16 -0
- package/adapters/hermes/bin/ork-conhecimento-verificar.sh +15 -0
- package/adapters/hermes/bin/ork-vigia-batida.py +127 -0
- package/adapters/hermes/hermes.plugin.json +4 -0
- package/adapters/hermes/hitl-ingress/__init__.py +101 -8
- package/adapters/hermes/skills/orkastery-devmaster/SKILL.md +3 -3
- package/adapters/openclaw/README.md +83 -10
- package/adapters/openclaw/bin/ork-vigia-batida.js +86 -0
- package/adapters/openclaw/dist/hitl-ingress.js +106 -9
- package/adapters/openclaw/dist/index.js +86 -0
- package/adapters/openclaw/openclaw.plugin.json +34 -4
- package/adapters/openclaw/package.json +2 -2
- package/adapters/openclaw/src/hitl-ingress.ts +103 -9
- package/adapters/openclaw/src/index.ts +94 -0
- package/assets/adapters-en/claude-code/README.md +403 -0
- package/assets/adapters-en/claude-code/agents/ork-check.md +33 -0
- package/assets/adapters-en/claude-code/agents/ork-go.md +33 -0
- package/assets/adapters-en/claude-code/agents/ork-goal.md +34 -0
- package/assets/adapters-en/claude-code/agents/ork-master.md +35 -0
- package/assets/adapters-en/claude-code/agents/ork-plan.md +33 -0
- package/assets/adapters-en/claude-code/agents/ork-ship.md +33 -0
- package/assets/adapters-en/claude-code/commands/check.md +46 -0
- package/assets/adapters-en/claude-code/commands/go.md +46 -0
- package/assets/adapters-en/claude-code/commands/goal.md +55 -0
- package/assets/adapters-en/claude-code/commands/master.md +54 -0
- package/assets/adapters-en/claude-code/commands/onboarding.md +22 -0
- package/assets/adapters-en/claude-code/commands/ork.md +126 -0
- package/assets/adapters-en/claude-code/commands/plan.md +47 -0
- package/assets/adapters-en/claude-code/commands/ship.md +45 -0
- package/assets/adapters-en/codex/skills/ork/SKILL.md +85 -0
- package/assets/adapters-en/hermes/README.md +273 -0
- package/assets/adapters-en/hermes/skills/orkastery-devmaster/SKILL.md +169 -0
- package/assets/docs-en/markdownlint-cli2.jsonc +22 -0
- package/assets/docs-en/padroes/documentacao-de-produto.md +135 -0
- package/assets/docs-en/padroes/roadmap-de-produto.md +100 -0
- package/assets/docs-en/produto/README.md +14 -0
- package/assets/docs-en/produto/_modelo-feature.md +62 -0
- package/assets/docs-en/roadmap/README.md +14 -0
- package/assets/docs-en/roadmap/_modelo-item.md +75 -0
- package/assets/references-en/README.md +25 -0
- package/assets/references-en/code-review-axes.md +82 -0
- package/assets/references-en/definition-of-done.md +74 -0
- package/assets/references-en/performance-checklist.md +53 -0
- package/assets/references-en/security-checklist.md +101 -0
- package/assets/references-en/testing-patterns.md +51 -0
- package/assets/security-scan/defaults/.golangci.yml +2 -0
- package/assets/security-scan/defaults/eslint.config.mjs +11 -0
- package/assets/security-scan/defaults/gitleaks.toml +3 -0
- package/assets/security-scan/defaults/ruff.toml +1 -0
- package/assets/security-scan/tools-agil.json +87 -0
- package/assets/security-scan/tools.json +625 -0
- package/assets/skills-en/core/onboarding/SKILL.md +58 -0
- package/assets/skills-en/core/orkastery-bootstrap/SKILL.md +119 -0
- package/assets/skills-en/core/thread-state/SKILL.md +88 -0
- package/assets/skills-en/governance/decision-triage/SKILL.md +65 -0
- package/assets/skills-en/governance/narrative-guardian/SKILL.md +66 -0
- package/assets/skills-en/governance/roadmap-keeper/SKILL.md +60 -0
- package/assets/skills-en/governance/scope-check-capability-map/SKILL.md +71 -0
- package/assets/skills-en/observability/thread-tracing/SKILL.md +63 -0
- package/assets/skills-en/phases/check-quality/SKILL.md +103 -0
- package/assets/skills-en/phases/go-implementation/SKILL.md +78 -0
- package/assets/skills-en/phases/goal-definition/SKILL.md +69 -0
- package/assets/skills-en/phases/master-metrics/SKILL.md +72 -0
- package/assets/skills-en/phases/plan-specification/SKILL.md +67 -0
- package/assets/skills-en/phases/security-remediation/SKILL.md +70 -0
- package/assets/skills-en/phases/ship-release/SKILL.md +71 -0
- package/assets/skills-en/reviewers/code-reviewer/SKILL.md +61 -0
- package/assets/skills-en/reviewers/security-auditor/SKILL.md +93 -0
- package/assets/skills-en/reviewers/test-engineer/SKILL.md +66 -0
- package/assets/skills-en/reviewers/web-performance-auditor/SKILL.md +63 -0
- package/dist/adapters/claude-bg.js +193 -15
- package/dist/adapters/codex-controller-worker.js +12 -5
- package/dist/adapters/codex-events.js +16 -4
- package/dist/adapters/codex.js +13 -2
- package/dist/agents-md.js +24 -15
- package/dist/atualizar-branch.js +245 -0
- package/dist/auditoria.js +13 -11
- package/dist/auditrun.js +68 -48
- package/dist/autorizacao-duravel.js +327 -0
- package/dist/board.js +98 -43
- package/dist/branch-de-estado.js +39 -9
- package/dist/busca-semantica.js +7 -5
- package/dist/catalogo.js +35 -1
- package/dist/changelog-reconciliacao.js +290 -0
- package/dist/check-agil.js +500 -0
- package/dist/check-modo.js +41 -0
- package/dist/check-paralelo.js +183 -0
- package/dist/ci.js +255 -46
- package/dist/ciclos.js +8 -6
- package/dist/claim-lint.js +12 -8
- package/dist/claims-conferir.js +350 -0
- package/dist/claims.js +13 -10
- package/dist/company-brain-client.js +45 -3
- package/dist/company-brain-journal.js +2 -1
- package/dist/company-brain-migration.js +47 -6
- package/dist/conducao-batida.js +759 -0
- package/dist/conducao-sentinela.js +405 -0
- package/dist/conducao-texto.js +12 -18
- package/dist/conducao.js +206 -59
- package/dist/conhecimento-consulta.js +270 -0
- package/dist/conhecimento.js +514 -0
- package/dist/conta-esgotada.js +127 -0
- package/dist/dado-privado.js +816 -0
- package/dist/decisao-autonoma.js +5 -4
- package/dist/demo.js +14 -12
- package/dist/dependencias-da-worktree.js +25 -0
- package/dist/divida.js +38 -36
- package/dist/docs.js +103 -82
- package/dist/doctor-forja.js +345 -0
- package/dist/doctor-pulse-cron.js +294 -27
- package/dist/doctor-rede.js +18 -17
- package/dist/doctor.js +278 -116
- package/dist/dsn-da-memoria.js +417 -0
- package/dist/entrega-por-mod.js +503 -0
- package/dist/entrega-pr.js +158 -57
- package/dist/escopo-escrita.js +10 -1
- package/dist/esgotamentos.js +13 -11
- package/dist/estado-thread.js +42 -17
- package/dist/evalrunner.js +35 -32
- package/dist/experiencia-instalacao.js +45 -25
- package/dist/fabrica-batida.js +323 -0
- package/dist/fabrica-estado.js +49 -16
- package/dist/fabrica-publicar.js +3 -1
- package/dist/fila-pesada.js +444 -0
- package/dist/fix.js +24 -21
- package/dist/forja/adaptador.js +6 -0
- package/dist/forja/ambiente-de-ci.js +27 -0
- package/dist/forja/api.js +256 -0
- package/dist/forja/cache.js +89 -0
- package/dist/forja/cli.js +60 -0
- package/dist/forja/contrato.js +9 -0
- package/dist/forja/endereco.js +43 -0
- package/dist/forja/estado.js +22 -0
- package/dist/forja/executor.js +73 -0
- package/dist/forja/github/ci.js +95 -0
- package/dist/forja/github/dono-da-rede.js +18 -0
- package/dist/forja/github/metadados.js +15 -0
- package/dist/forja/github/pedidos.js +200 -0
- package/dist/forja/gitlab/ci.js +141 -0
- package/dist/forja/gitlab/consultas.js +59 -0
- package/dist/forja/gitlab/dono-da-rede.js +43 -0
- package/dist/forja/gitlab/metadados.js +15 -0
- package/dist/forja/gitlab/pedidos-abertos.js +158 -0
- package/dist/forja/gitlab/pedidos.js +141 -0
- package/dist/forja/produtor.js +32 -0
- package/dist/forja/registro.js +31 -0
- package/dist/forja/resolver.js +121 -0
- package/dist/forja/texto.js +13 -0
- package/dist/forja/versao.js +71 -0
- package/dist/forja.js +124 -81
- package/dist/gates.js +3 -28
- package/dist/handoff.js +33 -19
- package/dist/hitl-contract.js +46 -43
- package/dist/hitl-curto.js +37 -25
- package/dist/hitl-gates.js +13 -11
- package/dist/hitl-local-receipt.js +53 -0
- package/dist/hitl-local.js +11 -2
- package/dist/hitl-lock.js +5 -11
- package/dist/hitl-public-receipt.js +11 -0
- package/dist/hitl-resumo.js +72 -3
- package/dist/hitl-sessions.js +62 -9
- package/dist/hitl-tempo-parado.js +4 -4
- package/dist/hitl-texto-livre.js +7 -4
- package/dist/hitl.js +63 -64
- package/dist/horario.js +30 -7
- package/dist/hosts.js +155 -134
- package/dist/impedimento.js +108 -14
- package/dist/index.js +1421 -1019
- package/dist/indice-vetorial.js +14 -12
- package/dist/indice.js +7 -1
- package/dist/init.js +54 -49
- package/dist/instabilidade.js +144 -0
- package/dist/integracoes-locais.js +4 -0
- package/dist/intelligence-graph-cli.js +213 -88
- package/dist/intelligence-graph-contexto.js +56 -17
- package/dist/intelligence-graph-contract.js +2 -1
- package/dist/intelligence-graph-extract-md.js +56 -4
- package/dist/intelligence-graph-extract-ts.js +71 -3
- package/dist/intelligence-graph-query.js +96 -34
- package/dist/leases.js +19 -18
- package/dist/ledger-stats.js +17 -16
- package/dist/ledger.js +46 -2
- package/dist/licoes.js +12 -11
- package/dist/liveness.js +6 -3
- package/dist/locale-accounts.js +220 -0
- package/dist/locale-adapter.js +291 -0
- package/dist/locale-ajuda.js +833 -0
- package/dist/locale-audit.js +199 -0
- package/dist/locale-claims.js +213 -0
- package/dist/locale-conducao.js +138 -0
- package/dist/locale-conhecimento.js +181 -0
- package/dist/locale-decisao.js +205 -0
- package/dist/locale-docs.js +230 -0
- package/dist/locale-estado.js +101 -0
- package/dist/locale-forja.js +290 -0
- package/dist/locale-gerados.js +165 -0
- package/dist/locale-grafo.js +129 -0
- package/dist/locale-master.js +182 -0
- package/dist/locale-network.js +524 -0
- package/dist/locale-onboarding.js +92 -0
- package/dist/locale-operacao-restante.js +931 -0
- package/dist/locale-phase.js +151 -0
- package/dist/locale-projetos.js +100 -0
- package/dist/locale-prompts.js +194 -0
- package/dist/locale-pulse.js +349 -0
- package/dist/locale-reservas.js +87 -0
- package/dist/locale-retry.js +524 -0
- package/dist/locale-roadmap.js +102 -0
- package/dist/locale-security-scan.js +69 -0
- package/dist/locale-setup.js +192 -0
- package/dist/locale-ship.js +597 -0
- package/dist/locale-thread.js +421 -0
- package/dist/locale-verify.js +201 -0
- package/dist/locale-worktree.js +246 -0
- package/dist/locale.js +1258 -0
- package/dist/maestro-runtime.js +22 -3
- package/dist/manifest.js +415 -13
- package/dist/maquina-ociosa.js +211 -0
- package/dist/maquina.js +31 -7
- package/dist/master-digest.js +6 -1
- package/dist/master-nota-local.js +200 -0
- package/dist/master-nota.js +14 -8
- package/dist/master.js +139 -65
- package/dist/mcp-artifacts.js +11 -2
- package/dist/mcp-conhecimento.js +52 -0
- package/dist/mcp-experiencia.js +26 -5
- package/dist/mcp-git.js +23 -6
- package/dist/mcp-grafo.js +7 -4
- package/dist/mcp-install.js +73 -8
- package/dist/mcp-noctum.js +101 -0
- package/dist/mcp-server.js +90 -16
- package/dist/mcp-ship-transporte.js +977 -0
- package/dist/mcp-ship.js +71 -25
- package/dist/mcp-transportes.js +17 -0
- package/dist/mcp-verify.js +6 -1
- package/dist/memoria.js +63 -58
- package/dist/modos-migracao.js +8 -6
- package/dist/modos.js +20 -24
- package/dist/network-roadmap.js +90 -51
- package/dist/noctum-aceite.js +789 -0
- package/dist/noctum-arco.js +1418 -0
- package/dist/noctum-capacidade.js +141 -0
- package/dist/noctum-changelog.js +399 -0
- package/dist/noctum-cli.js +482 -0
- package/dist/noctum-coordenacao.js +1225 -0
- package/dist/noctum-entrega.js +1169 -0
- package/dist/noctum-envelope.js +1046 -0
- package/dist/noctum-execucao.js +376 -0
- package/dist/noctum-fechamento.js +405 -0
- package/dist/noctum-fila.js +314 -0
- package/dist/noctum-guarda.js +256 -0
- package/dist/noctum-integracao.js +507 -0
- package/dist/noctum-maquinas.js +383 -0
- package/dist/noctum-medicao.js +450 -0
- package/dist/noctum-modo.js +362 -0
- package/dist/noctum-pergunta-canal.js +96 -0
- package/dist/noctum-pergunta.js +115 -0
- package/dist/noctum-provas.js +838 -0
- package/dist/noctum-reconciliacao.js +591 -0
- package/dist/noctum-registro.js +215 -0
- package/dist/noctum-relatorio.js +827 -0
- package/dist/noctum-resposta.js +207 -0
- package/dist/noctum-sessoes-em-voo.js +93 -0
- package/dist/noctum-supervisao.js +649 -0
- package/dist/noctum-terminal.js +459 -0
- package/dist/noctum-transporte.js +655 -0
- package/dist/noctum-vigia.js +639 -0
- package/dist/ocupacao.js +32 -3
- package/dist/onboarding.js +56 -26
- package/dist/orkmind.js +48 -25
- package/dist/orquestracao.js +44 -47
- package/dist/parado-no-condutor.js +174 -127
- package/dist/phase.js +144 -63
- package/dist/policies.js +37 -4
- package/dist/portfolio.js +4 -2
- package/dist/postura-local.js +235 -0
- package/dist/preflight.js +11 -10
- package/dist/procedencia.js +220 -0
- package/dist/projeto-alvo.js +186 -24
- package/dist/prompts.js +140 -42
- package/dist/prova-minima.js +5 -6
- package/dist/pulse-cadencia.js +5 -4
- package/dist/pulse-consentimento.js +53 -1
- package/dist/pulse-delivery.js +151 -24
- package/dist/pulse-resposta.js +368 -4
- package/dist/pulse.js +188 -22
- package/dist/ratelimit.js +16 -6
- package/dist/recall.js +14 -13
- package/dist/redacao-saida.js +63 -0
- package/dist/rede-adesao.js +13 -8
- package/dist/rede-forja.js +108 -24
- package/dist/rede-status.js +66 -47
- package/dist/rede.js +86 -46
- package/dist/retomada-checkpoint.js +101 -0
- package/dist/retry.js +451 -212
- package/dist/roadmap-reservas.js +45 -28
- package/dist/roadmap-status.js +129 -33
- package/dist/runtime-ambiente.js +5 -0
- package/dist/runtime-context.js +284 -32
- package/dist/runtime-escada.js +423 -0
- package/dist/runtime-profiles.js +103 -46
- package/dist/runtimes.js +2 -1
- package/dist/saida-segura.js +3 -2
- package/dist/security-scan/agil.js +355 -0
- package/dist/security-scan/cli.js +76 -0
- package/dist/security-scan/compare.js +149 -0
- package/dist/security-scan/config.js +93 -0
- package/dist/security-scan/detect.js +97 -0
- package/dist/security-scan/executor.js +188 -0
- package/dist/security-scan/guard.js +180 -0
- package/dist/security-scan/imagem-de-lint.js +96 -0
- package/dist/security-scan/normalize/actionlint.js +12 -0
- package/dist/security-scan/normalize/eslint.js +12 -0
- package/dist/security-scan/normalize/gitleaks.js +13 -0
- package/dist/security-scan/normalize/golangci-lint.js +13 -0
- package/dist/security-scan/normalize/govulncheck.js +36 -0
- package/dist/security-scan/normalize/index.js +25 -0
- package/dist/security-scan/normalize/npm-audit.js +30 -0
- package/dist/security-scan/normalize/osv-scanner.js +32 -0
- package/dist/security-scan/normalize/oxlint.js +51 -0
- package/dist/security-scan/normalize/pip-audit.js +16 -0
- package/dist/security-scan/normalize/ruff.js +12 -0
- package/dist/security-scan/normalize/semgrep.js +20 -0
- package/dist/security-scan/normalize/trivy.js +33 -0
- package/dist/security-scan/normalize/util.js +204 -0
- package/dist/security-scan/normalize/zizmor.js +19 -0
- package/dist/security-scan/report.js +156 -0
- package/dist/security-scan/run.js +448 -0
- package/dist/security-scan/tools.js +62 -0
- package/dist/security-scan/trabalhador.js +74 -0
- package/dist/security-scan/types.js +15 -0
- package/dist/session-events.js +26 -5
- package/dist/session-watcher-claude.js +81 -20
- package/dist/session-watcher.js +340 -42
- package/dist/sessoes-contas.js +10 -1
- package/dist/sessoes-inventario.js +1 -1
- package/dist/sessoes.js +25 -23
- package/dist/setup.js +59 -58
- package/dist/ship-publicar.js +971 -0
- package/dist/ship.js +243 -97
- package/dist/steal.js +77 -0
- package/dist/superficie.js +14 -11
- package/dist/thread-close.js +12 -11
- package/dist/thread.js +274 -100
- package/dist/tokens.js +15 -11
- package/dist/trabalho-thread.js +297 -0
- package/dist/transporte-do-canal.js +189 -0
- package/dist/types.js +12 -1
- package/dist/util.js +13 -3
- package/dist/varredura-acoes.js +507 -0
- package/dist/verify.js +608 -76
- package/dist/vida-da-thread.js +254 -0
- package/dist/worktree-local.js +167 -0
- package/dist/worktree.js +99 -83
- package/dist/yaml.js +27 -8
- package/eval/casos/check-quality.json +77 -0
- package/eval/casos/security-auditor.json +148 -0
- package/eval/casos/security-remediation.json +161 -0
- package/eval/fixtures/security-scan/README.md +8 -0
- package/eval/fixtures/security-scan/go/.github/workflows/ci.yml +12 -0
- package/eval/fixtures/security-scan/go/Dockerfile +4 -0
- package/eval/fixtures/security-scan/go/README.md +4 -0
- package/eval/fixtures/security-scan/go/config.go +4 -0
- package/eval/fixtures/security-scan/go/go.mod +5 -0
- package/eval/fixtures/security-scan/go/go.sum +2 -0
- package/eval/fixtures/security-scan/go/main.go +31 -0
- package/eval/fixtures/security-scan/js/.github/workflows/ci.yml +12 -0
- package/eval/fixtures/security-scan/js/Dockerfile +3 -0
- package/eval/fixtures/security-scan/js/README.md +4 -0
- package/eval/fixtures/security-scan/js/package-lock.json +844 -0
- package/eval/fixtures/security-scan/js/package.json +10 -0
- package/eval/fixtures/security-scan/js/src/config.js +4 -0
- package/eval/fixtures/security-scan/js/src/server.js +17 -0
- package/eval/fixtures/security-scan/js/src/util.ts +4 -0
- package/eval/fixtures/security-scan/js/tsconfig.json +4 -0
- package/eval/fixtures/security-scan/python/.github/workflows/ci.yml +12 -0
- package/eval/fixtures/security-scan/python/Dockerfile +3 -0
- package/eval/fixtures/security-scan/python/README.md +4 -0
- package/eval/fixtures/security-scan/python/app/__init__.py +0 -0
- package/eval/fixtures/security-scan/python/app/config.py +2 -0
- package/eval/fixtures/security-scan/python/app/main.py +19 -0
- package/eval/fixtures/security-scan/python/requirements.txt +1 -0
- package/package.json +9 -4
- package/references/security-checklist.md +3 -3
- package/schemas/code-artifact-graph.v1.schema.json +2 -1
- package/skills/README.md +1 -0
- package/skills/core/orkastery-bootstrap/SKILL.md +2 -2
- package/skills/phases/check-quality/SKILL.md +16 -0
- package/skills/phases/go-implementation/SKILL.md +6 -0
- package/skills/phases/security-remediation/SKILL.md +70 -0
- package/skills/reviewers/security-auditor/SKILL.md +25 -0
package/dist/rede-forja.js
CHANGED
|
@@ -33,11 +33,12 @@ var __importStar = (this && this.__importStar) || (function () {
|
|
|
33
33
|
};
|
|
34
34
|
})();
|
|
35
35
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
36
|
-
exports.ORDEM_DAS_FORJAS = void 0;
|
|
36
|
+
exports.helperDeCredencialDaCli = exports.ORDEM_DAS_FORJAS = void 0;
|
|
37
37
|
exports.pastasDeBinarios = pastasDeBinarios;
|
|
38
38
|
exports.acharBinario = acharBinario;
|
|
39
39
|
exports.versaoDoBinario = versaoDoBinario;
|
|
40
40
|
exports.comGitIsolado = comGitIsolado;
|
|
41
|
+
exports.gitlabSemSuporteNaRede = gitlabSemSuporteNaRede;
|
|
41
42
|
exports.forjaPorNome = forjaPorNome;
|
|
42
43
|
exports.forjasDaMaquina = forjasDaMaquina;
|
|
43
44
|
exports.ehNomeDeForja = ehNomeDeForja;
|
|
@@ -58,7 +59,12 @@ const node_child_process_1 = require("node:child_process");
|
|
|
58
59
|
const fs = __importStar(require("node:fs"));
|
|
59
60
|
const os = __importStar(require("node:os"));
|
|
60
61
|
const path = __importStar(require("node:path"));
|
|
62
|
+
const api_1 = require("./forja/api");
|
|
63
|
+
const executor_1 = require("./forja/executor");
|
|
64
|
+
const pedidos_1 = require("./forja/gitlab/pedidos");
|
|
65
|
+
const texto_1 = require("./forja/texto");
|
|
61
66
|
const redacao_url_1 = require("./redacao-url");
|
|
67
|
+
const locale_1 = require("./locale");
|
|
62
68
|
exports.ORDEM_DAS_FORJAS = ['github', 'gitlab'];
|
|
63
69
|
const LOGIN = /^[A-Za-z0-9](?:[A-Za-z0-9._-]{0,254})$/;
|
|
64
70
|
const HOST = /^[A-Za-z0-9.-]+(?::\d+)?$/;
|
|
@@ -170,7 +176,8 @@ function comGitIsolado(f, identidade, opcoes = {}) {
|
|
|
170
176
|
const naoEncontrado = (s) => /HTTP 404|404 Not Found|"status"\s*:\s*"?404/i.test(`${s.stdout}\n${s.stderr}`);
|
|
171
177
|
function falhou(cli, rota, s) {
|
|
172
178
|
const linha = (0, redacao_url_1.redigirCredenciaisUrl)(s.stderr.trim().split('\n').pop() ?? '').slice(0, 200);
|
|
173
|
-
|
|
179
|
+
const montarLinha = (0, locale_1.montadorDe)(linha);
|
|
180
|
+
return new locale_1.ErroDoCatalogo((m) => m.network.apiFalhou(cli, rota, montarLinha(m)));
|
|
174
181
|
}
|
|
175
182
|
/** A resposta de quem nao tem login (ou tem credencial recusada), no `gh` e no `glab`. */
|
|
176
183
|
const SEM_LOGIN = /auth login|not logged|not authenticated|authentication|HTTP 401|401 Unauthorized|Bad credentials|no token/i;
|
|
@@ -178,13 +185,17 @@ const SEM_LOGIN = /auth login|not logged|not authenticated|authentication|HTTP 4
|
|
|
178
185
|
function falhaDoLogin(cli, s) {
|
|
179
186
|
if (!s.ok && SEM_LOGIN.test(`${s.stderr}\n${s.stdout}`))
|
|
180
187
|
return {};
|
|
188
|
+
// RM-061 (F3b): a falha entra no detalhe da lacuna da casa, que a impressao remonta no locale do comando.
|
|
181
189
|
if (s.ok)
|
|
182
|
-
return { falha:
|
|
183
|
-
|
|
190
|
+
return { falha: (0, locale_1.textoDoCatalogo)((m) => m.network.respostaSemLogin(cli)) };
|
|
191
|
+
const erro = falhou(cli, 'user', s.stderr.trim() ? s : { ...s, stderr: (0, locale_1.textoDoCatalogo)((m) => m.network.semRespostaNoPrazo) });
|
|
192
|
+
return { falha: (0, locale_1.textoDoCatalogo)((m) => erro.montar(m).replace(/^rede\.forja: /, '')) };
|
|
184
193
|
}
|
|
185
194
|
/** Caminho seguro para o shell que o git usa no helper: aspas simples, com `'` escapada (B10). */
|
|
186
195
|
const citar = (caminho) => /^[A-Za-z0-9_./+-]+$/.test(caminho) ? caminho : `'${caminho.replace(/'/g, `'\\''`)}'`;
|
|
187
196
|
const helper = (binario) => `!${citar(binario)} auth git-credential`;
|
|
197
|
+
/** O mesmo helper do cache da rede, para o transporte `forja-https` do SHIP. */
|
|
198
|
+
exports.helperDeCredencialDaCli = helper;
|
|
188
199
|
/**
|
|
189
200
|
* Privado de verdade (B1): no GitHub, `internal` vem com `private: true`, e a empresa inteira le.
|
|
190
201
|
* Quando a forja diz a visibilidade, so `private` conta; sem ela, o booleano.
|
|
@@ -198,7 +209,7 @@ function github(binario, amb, host = 'github.com') {
|
|
|
198
209
|
// B2: a casa vai sempre por HTTPS, com o helper da propria CLI; SSH pediria agente, que o cron nao tem.
|
|
199
210
|
const repositorioDe = (v) => {
|
|
200
211
|
if (!v)
|
|
201
|
-
throw new
|
|
212
|
+
throw new locale_1.ErroDoCatalogo((m) => m.network.repositorioIlegivel);
|
|
202
213
|
return { existe: true, privado: privadoDe(v), url: typeof v.clone_url === 'string' ? v.clone_url : null };
|
|
203
214
|
};
|
|
204
215
|
// B9: o host da casa vai em toda chamada; o cron nao tem o ambiente do terminal.
|
|
@@ -235,38 +246,111 @@ function hostDoGitlab(amb) {
|
|
|
235
246
|
const bruto = (ambienteDe(amb).GITLAB_HOST ?? '').trim().replace(/^https?:\/\//, '').replace(/\/.*$/, '');
|
|
236
247
|
return HOST.test(bruto) ? bruto : 'gitlab.com';
|
|
237
248
|
}
|
|
249
|
+
/**
|
|
250
|
+
* O que a casa da rede ainda nao suporta no GitLab da maquina: o `rede.json` guarda so `host[:porta]`, entao um GitLab em
|
|
251
|
+
* subcaminho (`https://host/gitlab`) ou com CA propria (`GLAB_CA_CERT`) nao teria como ser lembrado em outra maquina.
|
|
252
|
+
*/
|
|
253
|
+
function gitlabSemSuporteNaRede(amb, host = hostDoGitlab(amb)) {
|
|
254
|
+
const env = ambienteDe(amb);
|
|
255
|
+
const bruto = (env.GITLAB_HOST ?? '').trim().replace(/^https?:\/\//, '');
|
|
256
|
+
// So o subcaminho do proprio host da casa conta: o `GITLAB_HOST` do terminal pode ser de outra instancia.
|
|
257
|
+
const subcaminho = /^([^/]+)\/+[^/]/.exec(bruto);
|
|
258
|
+
if (subcaminho && subcaminho[1].toLowerCase() === host.toLowerCase())
|
|
259
|
+
return 'subcaminho';
|
|
260
|
+
if ((env.GLAB_CA_CERT ?? '').trim() && host !== 'gitlab.com')
|
|
261
|
+
return 'ca';
|
|
262
|
+
return null;
|
|
263
|
+
}
|
|
264
|
+
/** O `rodarCli` com o ambiente e o PATH da maquina da rede (o cron tem outro ambiente que o terminal). */
|
|
265
|
+
const rodarNaMaquina = (amb) => (c) => {
|
|
266
|
+
if (!amb.env)
|
|
267
|
+
return (0, executor_1.rodarCli)(c);
|
|
268
|
+
// O ambiente da maquina da rede no lugar do do `ork`, e reduzido como o do `ork` seria: so o que a CLI le chega a ela.
|
|
269
|
+
return (0, executor_1.rodarCli)({ ...c, base: c.reduzido ? (0, executor_1.ambienteReduzido)(amb.env) : amb.env });
|
|
270
|
+
};
|
|
271
|
+
/** `host` ou `host:porta` da casa como alvo da API; a rede nao guarda caminho base nem CA. */
|
|
272
|
+
function alvoDoGitlab(host) {
|
|
273
|
+
const m = /^(.+?)(?::(\d+))?$/.exec(host);
|
|
274
|
+
return { tipo: 'gitlab', host: m[1].toLowerCase(), porta: m[2] ? Number(m[2]) : null, caminhoBase: '', ca: null };
|
|
275
|
+
}
|
|
276
|
+
const objeto = (v) => (v && typeof v === 'object' && !Array.isArray(v) ? v : null);
|
|
277
|
+
/** A falha da API com o motivo tipado da forja (`forja.*`) no lugar da ultima linha do stderr. */
|
|
278
|
+
const falhouNaApi = (rota, erro) => new locale_1.ErroDoCatalogo((m) => m.network.apiFalhou('glab', rota, m.forja.motivo(erro, 'gitlab')));
|
|
279
|
+
/** `usuario: null` so e falta de login quando a forja disse isso (`forja.sem-login`); o resto e falha da leitura. */
|
|
280
|
+
function falhaDaApi(r) {
|
|
281
|
+
if (r.ok)
|
|
282
|
+
return { falha: (0, locale_1.textoDoCatalogo)((m) => m.network.respostaSemLogin('glab')) };
|
|
283
|
+
if (r.erro.codigo === 'forja.sem-login')
|
|
284
|
+
return {};
|
|
285
|
+
const erro = r.erro;
|
|
286
|
+
return { falha: (0, locale_1.textoDoCatalogo)((m) => m.network.apiFalhou('glab', 'user', m.forja.motivo(erro, 'gitlab')).replace(/^rede\.forja: /, '')) };
|
|
287
|
+
}
|
|
288
|
+
/**
|
|
289
|
+
* O GitLab da casa pela API da CLI logada (`chamarApi`): o host (com porta) vai por GITLAB_HOST, nunca por
|
|
290
|
+
* `--hostname` (o glab recusa a porta); o login e conferido antes da primeira chamada (sem ele o glab faria o pedido
|
|
291
|
+
* anonimo); o corpo vai pelo stdin com o Content-Type; o erro sai tipado pelo status HTTP.
|
|
292
|
+
*/
|
|
238
293
|
function gitlab(binario, amb, hostPedido) {
|
|
239
294
|
const host = hostPedido ?? hostDoGitlab(amb);
|
|
295
|
+
const alvo = alvoDoGitlab(host);
|
|
296
|
+
const opcoes = { rodar: rodarNaMaquina(amb), logins: new Map() };
|
|
297
|
+
const pedir = (metodo, caminho, corpo, prazoMs = 15000) => (0, api_1.chamarApi)(alvo, { metodo, caminho, prazoMs, ...(corpo !== undefined ? { corpo } : {}) }, opcoes);
|
|
240
298
|
const repositorioDe = (v) => {
|
|
241
299
|
if (!v)
|
|
242
|
-
throw new
|
|
300
|
+
throw new locale_1.ErroDoCatalogo((m) => m.network.projetoIlegivel);
|
|
243
301
|
return { existe: true, privado: privadoDe(v), url: typeof v.http_url_to_repo === 'string' ? v.http_url_to_repo : null };
|
|
244
302
|
};
|
|
245
|
-
const
|
|
303
|
+
const repositorio = (dono, nome) => {
|
|
304
|
+
const rota = (0, pedidos_1.projetoNaApi)(`${dono}/${nome}`);
|
|
305
|
+
const r = pedir('GET', rota);
|
|
306
|
+
if (r.ok)
|
|
307
|
+
return repositorioDe(objeto(r.valor.corpo));
|
|
308
|
+
if (r.erro.codigo === 'forja.nao-achei')
|
|
309
|
+
return { existe: false, privado: null, url: null };
|
|
310
|
+
throw falhouNaApi(rota, r.erro);
|
|
311
|
+
};
|
|
246
312
|
return {
|
|
247
313
|
nome: 'gitlab', host, cli: 'glab', binario,
|
|
248
314
|
identidade() {
|
|
249
|
-
const r =
|
|
250
|
-
const login = r.ok ?
|
|
315
|
+
const r = pedir('GET', 'user');
|
|
316
|
+
const login = r.ok ? objeto(r.valor.corpo)?.username : null;
|
|
251
317
|
const usuario = typeof login === 'string' && LOGIN.test(login) ? login : null;
|
|
252
|
-
return { forja: 'gitlab', host, cli: 'glab', versao: versaoDoBinario(binario, amb), usuario, ...(usuario ? {} :
|
|
318
|
+
return { forja: 'gitlab', host, cli: 'glab', versao: versaoDoBinario(binario, amb), usuario, ...(usuario ? {} : falhaDaApi(r)) };
|
|
253
319
|
},
|
|
254
|
-
repositorio
|
|
255
|
-
|
|
256
|
-
const r =
|
|
257
|
-
|
|
258
|
-
|
|
259
|
-
|
|
260
|
-
|
|
320
|
+
repositorio,
|
|
321
|
+
criarPrivado(nome, descricao, dono, namespaceId) {
|
|
322
|
+
const r = pedir('POST', 'projects', { name: nome, path: nome, visibility: 'private', description: descricao,
|
|
323
|
+
...(namespaceId ? { namespace_id: namespaceId } : {}) }, 30000);
|
|
324
|
+
if (r.ok) {
|
|
325
|
+
const criado = objeto(r.valor.corpo), pedido = `${dono ?? ''}${dono ? '/' : ''}${nome}`;
|
|
326
|
+
// O projeto tem de nascer no caminho pedido: outro namespace seria uma casa que a rede nunca acharia.
|
|
327
|
+
const caminho = typeof criado?.path_with_namespace === 'string' ? criado.path_with_namespace : null;
|
|
328
|
+
if (dono && caminho !== null && caminho.toLowerCase() !== pedido.toLowerCase()) {
|
|
329
|
+
const visto = (0, texto_1.deFora)(caminho, 200);
|
|
330
|
+
throw new locale_1.ErroDoCatalogo((m) => m.network.projetoEmOutroCaminho(pedido, visto));
|
|
331
|
+
}
|
|
332
|
+
return repositorioDe(criado);
|
|
261
333
|
}
|
|
262
|
-
|
|
334
|
+
// Escrita nunca se repete sozinha: relida a casa, o projeto que a forja criou antes de a resposta se perder vale. A
|
|
335
|
+
// releitura que falha nao apaga o motivo do POST.
|
|
336
|
+
if (dono) {
|
|
337
|
+
let relido = null;
|
|
338
|
+
try {
|
|
339
|
+
relido = repositorio(dono, nome);
|
|
340
|
+
}
|
|
341
|
+
catch {
|
|
342
|
+
relido = null;
|
|
343
|
+
}
|
|
344
|
+
if (relido?.existe)
|
|
345
|
+
return relido;
|
|
346
|
+
}
|
|
347
|
+
throw falhouNaApi('projects', r.erro);
|
|
263
348
|
},
|
|
264
|
-
|
|
265
|
-
|
|
266
|
-
|
|
267
|
-
|
|
268
|
-
|
|
269
|
-
return repositorioDe(json(r.stdout));
|
|
349
|
+
donoDaRede(dono) {
|
|
350
|
+
// Carga tardia: o registro chega a este modulo pelo executor da forja; importar no topo fecharia um ciclo de carga.
|
|
351
|
+
// eslint-disable-next-line @typescript-eslint/no-require-imports
|
|
352
|
+
const { adaptadorDaForja, exigirCapacidade } = require('./forja/registro');
|
|
353
|
+
return exigirCapacidade(adaptadorDaForja('gitlab'), 'donoDaRede')({ api: (p) => (0, api_1.chamarApi)(alvo, p, opcoes), dono });
|
|
270
354
|
},
|
|
271
355
|
helperDeCredencial: () => helper(binario),
|
|
272
356
|
};
|
package/dist/rede-status.js
CHANGED
|
@@ -55,6 +55,7 @@ const path = __importStar(require("node:path"));
|
|
|
55
55
|
const branch_de_estado_1 = require("./branch-de-estado");
|
|
56
56
|
const fabrica_estado_1 = require("./fabrica-estado");
|
|
57
57
|
const horario_1 = require("./horario");
|
|
58
|
+
const locale_1 = require("./locale");
|
|
58
59
|
const manifest_1 = require("./manifest");
|
|
59
60
|
const maquina_1 = require("./maquina");
|
|
60
61
|
const rede_1 = require("./rede");
|
|
@@ -68,6 +69,20 @@ exports.SEM_BATIDA_MS = 3 * 60 * 60 * 1000;
|
|
|
68
69
|
/** O que esta leitura nunca olha: quem conclui sobre isso a partir daqui erra. */
|
|
69
70
|
exports.NAO_CONSULTADO = ['roadmap', 'reservas', 'threads'];
|
|
70
71
|
const mensagem = (e) => e.message.replace(/^[a-z.-]+: /, '');
|
|
72
|
+
/**
|
|
73
|
+
* RM-061 (F3b, G4): o detalhe da lacuna vai ao `--json` em pt-BR e nasce pelo catalogo; o erro de dentro (do catalogo
|
|
74
|
+
* ou nao) e remontado com ela.
|
|
75
|
+
*/
|
|
76
|
+
const lacunaDoCatalogo = (montar) => (0, locale_1.textoDoCatalogo)((m) => montar(m.network));
|
|
77
|
+
/**
|
|
78
|
+
* RM-061 (F3b, GO-FIX 1 do CHECK): o montador do texto de um erro, sem o codigo do comeco. O erro do catalogo guarda o
|
|
79
|
+
* proprio montador (o texto dele nao fica no registro); o resto sai como veio, ou pelo montador do texto embutido.
|
|
80
|
+
*/
|
|
81
|
+
function montadorDoErro(e) {
|
|
82
|
+
if (e instanceof locale_1.ErroDoCatalogo)
|
|
83
|
+
return (m) => e.montar(m).replace(/^[a-z.-]+: /, '');
|
|
84
|
+
return (0, locale_1.montadorDe)(mensagem(e));
|
|
85
|
+
}
|
|
71
86
|
/** Sem rede, a casa vem da adesao gravada ou da ultima publicacao desta maquina. */
|
|
72
87
|
function casaSemRede() {
|
|
73
88
|
const cfg = (0, rede_adesao_1.adesaoDaRede)().config;
|
|
@@ -101,7 +116,7 @@ function lerRede(o = {}) {
|
|
|
101
116
|
if (o.semRemoto) {
|
|
102
117
|
casa = casaSemRede();
|
|
103
118
|
if (!casa)
|
|
104
|
-
lacunas.push({ tipo: 'rede.sem-leitura', detalhe:
|
|
119
|
+
lacunas.push({ tipo: 'rede.sem-leitura', detalhe: lacunaDoCatalogo((m) => m.semRedeSemCasa) });
|
|
105
120
|
}
|
|
106
121
|
else {
|
|
107
122
|
const r = (0, rede_1.resolverCasa)({ amb: o.amb });
|
|
@@ -113,22 +128,25 @@ function lerRede(o = {}) {
|
|
|
113
128
|
const repo = r.forja.repositorio(r.casa.dono, r.casa.repositorio);
|
|
114
129
|
if (!repo.existe) {
|
|
115
130
|
ler = false;
|
|
116
|
-
|
|
131
|
+
const ref = (0, rede_1.refDaCasa)(r.casa);
|
|
132
|
+
lacunas.push({ tipo: 'rede.sem-repositorio', detalhe: lacunaDoCatalogo((m) => m.casaNaoExiste(ref)) });
|
|
117
133
|
}
|
|
118
134
|
else {
|
|
135
|
+
const ref = (0, rede_1.refDaCasa)(r.casa);
|
|
119
136
|
if (repo.privado !== true)
|
|
120
|
-
lacunas.push({ tipo: 'rede.repositorio-publico', detalhe:
|
|
137
|
+
lacunas.push({ tipo: 'rede.repositorio-publico', detalhe: lacunaDoCatalogo((m) => m.casaPublica(ref)) });
|
|
121
138
|
if (repo.url && (0, rede_1.urlDaCasaAceita)(repo.url))
|
|
122
139
|
(0, rede_1.prepararCache)(r.casa, repo.url, r.forja.helperDeCredencial(), eu);
|
|
123
140
|
else if (repo.url) {
|
|
124
141
|
// W10 da revisao 5: sem https nao ha leitura nova; o cache fica com a URL antiga e so a copia local vale.
|
|
125
142
|
semHttps = true;
|
|
126
|
-
lacunas.push({ tipo: 'rede.sem-leitura', detalhe:
|
|
143
|
+
lacunas.push({ tipo: 'rede.sem-leitura', detalhe: lacunaDoCatalogo((m) => m.casaSemHttps(ref)) });
|
|
127
144
|
}
|
|
128
145
|
}
|
|
129
146
|
}
|
|
130
147
|
catch (e) {
|
|
131
|
-
|
|
148
|
+
const ref = (0, rede_1.refDaCasa)(r.casa), erro = montadorDoErro(e);
|
|
149
|
+
lacunas.push({ tipo: 'rede.sem-leitura', detalhe: (0, locale_1.textoDoCatalogo)((m) => m.network.comErro(ref, erro(m))) });
|
|
132
150
|
}
|
|
133
151
|
}
|
|
134
152
|
}
|
|
@@ -144,16 +162,20 @@ function lerRede(o = {}) {
|
|
|
144
162
|
: (0, branch_de_estado_1.buscarBranch)(cache, 'origin', rede_1.BRANCH_DA_REDE, 'rede', o.timeoutMs ?? 30000));
|
|
145
163
|
fontes.push({ fonte: 'rede', ref: `${(0, rede_1.refDaCasa)(casa)}#${rede_1.BRANCH_DA_REDE}`, ponta, atualizado });
|
|
146
164
|
if (!atualizado && !soLocal) {
|
|
147
|
-
|
|
165
|
+
const ref = (0, rede_1.refDaCasa)(casa);
|
|
166
|
+
lacunas.push({ tipo: 'rede.sem-leitura', detalhe: lacunaDoCatalogo((m) => m.semLeituraNova(ref, !!ponta)) });
|
|
148
167
|
}
|
|
149
168
|
const lidos = (0, rede_1.retratosDaPonta)(cache, ponta);
|
|
150
169
|
lida = { cache, ponta };
|
|
151
170
|
retratos = lidos.retratos;
|
|
152
|
-
for (const inv of lidos.invalidos)
|
|
153
|
-
|
|
171
|
+
for (const inv of lidos.invalidos) {
|
|
172
|
+
const motivo = (0, locale_1.montadorDe)(inv.motivo);
|
|
173
|
+
lacunas.push({ tipo: 'retrato.invalido', detalhe: (0, locale_1.textoDoCatalogo)((m) => m.network.retratoInvalido(inv.arquivo, motivo(m))) });
|
|
174
|
+
}
|
|
154
175
|
}
|
|
155
176
|
else if (!lacunas.some((l) => l.tipo === 'rede.sem-leitura')) {
|
|
156
|
-
|
|
177
|
+
const ref = (0, rede_1.refDaCasa)(casa);
|
|
178
|
+
lacunas.push({ tipo: 'rede.sem-leitura', detalhe: lacunaDoCatalogo((m) => m.nuncaLida(ref)) });
|
|
157
179
|
}
|
|
158
180
|
}
|
|
159
181
|
for (const r of retratos)
|
|
@@ -171,7 +193,7 @@ function lerRede(o = {}) {
|
|
|
171
193
|
const projetos = o.soRaiz === undefined ? conhecidos : conhecidos.filter((p) => raizDe(p.caminho) === raizDe(o.soRaiz));
|
|
172
194
|
for (const p of projetos) {
|
|
173
195
|
if (!p.presente) {
|
|
174
|
-
lacunas.push({ tipo: 'projeto.sem-clone', projeto: p.nome, detalhe:
|
|
196
|
+
lacunas.push({ tipo: 'projeto.sem-clone', projeto: p.nome, detalhe: lacunaDoCatalogo((m) => m.semClone(p.nome, p.caminho)) });
|
|
175
197
|
continue;
|
|
176
198
|
}
|
|
177
199
|
let remoto = 'origin';
|
|
@@ -183,11 +205,11 @@ function lerRede(o = {}) {
|
|
|
183
205
|
// e o valor recusado sai redigido, sem a credencial de uma URL, no texto e no JSON.
|
|
184
206
|
if (!(0, branch_de_estado_1.remotoValido)(remoto)) {
|
|
185
207
|
lacunas.push({ tipo: 'fabrica.sem-leitura', projeto: p.nome,
|
|
186
|
-
detalhe:
|
|
208
|
+
detalhe: lacunaDoCatalogo((m) => m.remotoInvalido(p.nome, (0, branch_de_estado_1.remotoRedigido)(remoto))) });
|
|
187
209
|
continue;
|
|
188
210
|
}
|
|
189
211
|
if (!(0, rede_forja_1.comGitIsolado)(() => (0, branch_de_estado_1.git)(p.caminho, ['remote', 'get-url', '--', remoto]).ok)) {
|
|
190
|
-
lacunas.push({ tipo: 'fabrica.sem-leitura', projeto: p.nome, detalhe:
|
|
212
|
+
lacunas.push({ tipo: 'fabrica.sem-leitura', projeto: p.nome, detalhe: lacunaDoCatalogo((m) => m.semRemoto(p.nome, remoto)) });
|
|
191
213
|
continue;
|
|
192
214
|
}
|
|
193
215
|
try {
|
|
@@ -197,7 +219,7 @@ function lerRede(o = {}) {
|
|
|
197
219
|
const painel = (0, rede_forja_1.comGitIsolado)(() => (0, fabrica_estado_1.lerFabrica)(p.caminho, { remoto, semRemoto: o.semRemoto, timeoutMs: o.timeoutMs ?? 10000 }), undefined, { ssh: sshProprio ? 'herdado' : 'lote' });
|
|
198
220
|
fontes.push({ fonte: 'fabrica-estado', projeto: p.nome, ref: fabrica_estado_1.BRANCH_DA_FABRICA, ponta: painel.ponta, atualizado: painel.atualizado });
|
|
199
221
|
if (!painel.atualizado && !o.semRemoto) {
|
|
200
|
-
lacunas.push({ tipo: 'fabrica.sem-leitura', projeto: p.nome, detalhe:
|
|
222
|
+
lacunas.push({ tipo: 'fabrica.sem-leitura', projeto: p.nome, detalhe: lacunaDoCatalogo((m) => m.fabricaSemLeituraNova(p.nome, fabrica_estado_1.BRANCH_DA_FABRICA)) });
|
|
201
223
|
}
|
|
202
224
|
for (const bruto of painel.maquinas) {
|
|
203
225
|
// U4 da revisao 3: a fabrica guarda o nome cru, a rede o saneado; casam pelo saneado.
|
|
@@ -222,7 +244,8 @@ function lerRede(o = {}) {
|
|
|
222
244
|
}
|
|
223
245
|
}
|
|
224
246
|
catch (e) {
|
|
225
|
-
|
|
247
|
+
const erro = montadorDoErro(e);
|
|
248
|
+
lacunas.push({ tipo: 'fabrica.sem-leitura', projeto: p.nome, detalhe: (0, locale_1.textoDoCatalogo)((m) => m.network.comErro(p.nome, erro(m))) });
|
|
226
249
|
}
|
|
227
250
|
}
|
|
228
251
|
// S7 da revisao 2: o retrato com o nome desta maquina pode ser de outra instalacao (tomou o nome).
|
|
@@ -241,17 +264,18 @@ function lerRede(o = {}) {
|
|
|
241
264
|
// e o `publicarRede` recusa com `rede.nome-em-uso`; o status diz o mesmo, em vez de chamar de "esta maquina".
|
|
242
265
|
const nomeEmUso = !!idNaCasa && idNaCasa !== meuId;
|
|
243
266
|
if (nomeEmUso) {
|
|
244
|
-
lacunas.push({ tipo: 'maquina.nome-em-uso', maquina: eu, detalhe:
|
|
245
|
-
'publica ate trocar de nome (ork network entrar --maquina NOME) ou retomar este (ork network entrar --forcar)' });
|
|
267
|
+
lacunas.push({ tipo: 'maquina.nome-em-uso', maquina: eu, detalhe: lacunaDoCatalogo((m) => m.nomeEmUsoNaCasa(eu)) });
|
|
246
268
|
}
|
|
247
269
|
// 4. O frescor de cada maquina (D15).
|
|
248
270
|
const lista = [...membros.values()].sort((a, b) => a.maquina.localeCompare(b.maquina));
|
|
249
271
|
for (const m of lista) {
|
|
250
272
|
// X5 da revisao 6: batida ilegivel (a fabrica legada aceita qualquer texto) nao passa por fresca.
|
|
251
273
|
if (!Number.isFinite(m.idadeMs))
|
|
252
|
-
lacunas.push({ tipo: 'maquina.sem-batida', maquina: m.maquina, detalhe:
|
|
253
|
-
else if (m.idadeMs > exports.SEM_BATIDA_MS)
|
|
254
|
-
|
|
274
|
+
lacunas.push({ tipo: 'maquina.sem-batida', maquina: m.maquina, detalhe: lacunaDoCatalogo((t) => t.batidaIlegivel(m.maquina)) });
|
|
275
|
+
else if (m.idadeMs > exports.SEM_BATIDA_MS) {
|
|
276
|
+
const idadeMs = m.idadeMs;
|
|
277
|
+
lacunas.push({ tipo: 'maquina.sem-batida', maquina: m.maquina, detalhe: lacunaDoCatalogo((t) => t.semBatidaHa(m.maquina, duracao(idadeMs))) });
|
|
278
|
+
}
|
|
255
279
|
}
|
|
256
280
|
return {
|
|
257
281
|
contrato: exports.CONTRATO_DO_STATUS, consultadoEm, casa: casa ? { ...casa } : null,
|
|
@@ -261,10 +285,10 @@ function lerRede(o = {}) {
|
|
|
261
285
|
}
|
|
262
286
|
function duracao(ms) {
|
|
263
287
|
if (!Number.isFinite(ms))
|
|
264
|
-
return
|
|
288
|
+
return (0, locale_1.msg)().horario.duracaoDesconhecida;
|
|
265
289
|
const min = Math.round(ms / 60000);
|
|
266
290
|
if (min < 1)
|
|
267
|
-
return
|
|
291
|
+
return (0, locale_1.msg)().horario.menosDeUmMin;
|
|
268
292
|
if (min < 120)
|
|
269
293
|
return `${min} min`;
|
|
270
294
|
const h = Math.round(ms / 3600000);
|
|
@@ -276,53 +300,48 @@ function textoDaRede(status) {
|
|
|
276
300
|
// escrevem. Cada VALOR vai numa linha so e sem nada que o terminal execute ou que ninguem ve, antes de
|
|
277
301
|
// entrar no texto: um `\n` num valor nao abre uma linha que parece do `ork`.
|
|
278
302
|
// X5 da revisao 6: um mapa que so troca texto (a ida e volta em JSON trocava `NaN` por `null`).
|
|
303
|
+
// RM-061 (F3b): a moldura pelo catalogo; o detalhe da lacuna (pt-BR no --json) e remontado e limpo do mesmo jeito.
|
|
279
304
|
const s = (0, saida_segura_1.valoresEmUmaLinha)(status);
|
|
305
|
+
const t = (0, locale_1.msg)().network;
|
|
280
306
|
const linhas = [];
|
|
281
307
|
const rede = s.fontes.find((f) => f.fonte === 'rede');
|
|
282
|
-
const estadoDaCasa = rede ? (rede.atualizado ?
|
|
283
|
-
linhas.push(s.casa
|
|
284
|
-
? `Orkastery Network de ${s.casa.dono} · ${s.casa.forja}: ${(0, rede_1.refDaCasa)(s.casa)} · ${estadoDaCasa}`
|
|
285
|
-
: 'Orkastery Network · sem casa: nenhuma forja com login nesta máquina');
|
|
308
|
+
const estadoDaCasa = rede ? (rede.atualizado ? t.casaLidaAgora : t.casaUltimaCopia) : t.casaNaoLida;
|
|
309
|
+
linhas.push(s.casa ? t.cabecalhoComCasa(s.casa.dono, s.casa.forja, (0, rede_1.refDaCasa)(s.casa), estadoDaCasa) : t.semCasa);
|
|
286
310
|
const consultado = [
|
|
287
|
-
...(rede ? [
|
|
288
|
-
...s.fontes.filter((f) => f.fonte === 'fabrica-estado')
|
|
289
|
-
.map((f) => `fábrica de ${f.projeto} (${f.ref}, ${f.atualizado ? 'lida agora' : 'última cópia'})`),
|
|
311
|
+
...(rede ? [t.repositorioDaRede(rede.ponta ? rede.ponta.slice(0, 7) : null)] : []),
|
|
312
|
+
...s.fontes.filter((f) => f.fonte === 'fabrica-estado').map((f) => t.fabricaDe(String(f.projeto), f.ref, f.atualizado)),
|
|
290
313
|
];
|
|
291
|
-
linhas.push(
|
|
292
|
-
linhas.push(
|
|
314
|
+
linhas.push(t.consultado(consultado.length ? consultado.join('; ') : null));
|
|
315
|
+
linhas.push(t.naoConsultado(s.naoConsultado.map(t.itemNaoConsultado).join(', ')));
|
|
293
316
|
linhas.push('');
|
|
294
317
|
if (s.membros.length === 0)
|
|
295
|
-
linhas.push(
|
|
318
|
+
linhas.push(t.nenhumaMaquina);
|
|
296
319
|
for (const m of s.membros) {
|
|
297
320
|
const esta = m.maquina !== s.estaMaquina.maquina ? ''
|
|
298
|
-
: m.origem === 'rede' && s.estaMaquina.nomeEmUso ?
|
|
299
|
-
const origem = m.origem === 'rede' ?
|
|
300
|
-
|
|
301
|
-
|
|
302
|
-
|
|
303
|
-
...m.forjas.map((f) => `${f.forja}: ${f.usuario ?? 'sem login'}`), m.pessoa ? `pessoa ${m.pessoa}` : null].filter(Boolean);
|
|
321
|
+
: m.origem === 'rede' && s.estaMaquina.nomeEmUso ? t.outraInstalacao : t.estaMaquina;
|
|
322
|
+
const origem = m.origem === 'rede' ? t.origemRede(m.adesao === 'fabrica') : t.origemFabrica(m.projetos.map((p) => p.nome).join(', '));
|
|
323
|
+
linhas.push(t.membro(m.maquina, esta, origem, (0, horario_1.formatarDataHora)(m.publicadoEm), duracao(m.idadeMs)));
|
|
324
|
+
const ficha = [m.hostname ? t.fichaHostname(m.hostname) : null, m.versaoOrk ? t.fichaOrk(m.versaoOrk) : null,
|
|
325
|
+
...m.forjas.map((f) => t.fichaForja(f.forja, f.usuario ?? null)), m.pessoa ? t.fichaPessoa(m.pessoa) : null].filter(Boolean);
|
|
304
326
|
if (ficha.length)
|
|
305
327
|
linhas.push(` ${ficha.join(' · ')}`);
|
|
306
328
|
if (m.runtimes.length)
|
|
307
|
-
linhas.push(
|
|
329
|
+
linhas.push(t.runtimes(m.runtimes.map((r) => `${r.runtime} ${r.versao ?? '?'}`).join(', ')));
|
|
308
330
|
if (m.hosts.length) {
|
|
309
|
-
linhas.push(
|
|
331
|
+
linhas.push(t.hosts(m.hosts.map((h) => `${h.host} ${h.versao ?? '?'}${h.adaptador ? t.hostAdaptador(h.adaptador) : ''}`).join(', ')));
|
|
310
332
|
}
|
|
311
333
|
if (m.projetos.length) {
|
|
312
|
-
linhas.push(
|
|
334
|
+
linhas.push(t.projetos(m.projetos.map((p) => `${p.nome}${p.remoto ? ` (${p.remoto})` : ''}${p.caminho ? t.projetoEm(p.caminho) : ''}`).join('; ')));
|
|
313
335
|
}
|
|
314
336
|
}
|
|
315
337
|
linhas.push('');
|
|
316
338
|
const aqui = s.estaMaquina;
|
|
317
|
-
linhas.push(aqui.membro
|
|
318
|
-
? `Esta máquina (${aqui.maquina}) é membro${aqui.adesao === 'fabrica' ? ', herdado da fábrica' : ''}${aqui.publicada ? '.' : '; o retrato dela ainda não está na casa.'}`
|
|
319
|
-
: `Esta máquina (${aqui.maquina}) não está na rede: ork network entrar.`);
|
|
339
|
+
linhas.push(aqui.membro ? t.estaEMembro(aqui.maquina, aqui.adesao === 'fabrica', aqui.publicada) : t.foraDaRedeLinha(aqui.maquina));
|
|
320
340
|
if (s.lacunas.length === 0)
|
|
321
|
-
linhas.push(
|
|
341
|
+
linhas.push(t.semLacunas);
|
|
322
342
|
else {
|
|
323
|
-
linhas.push(
|
|
324
|
-
|
|
325
|
-
linhas.push(` • ${l.tipo}: ${l.detalhe}`);
|
|
343
|
+
linhas.push(t.lacunas(s.lacunas.length));
|
|
344
|
+
s.lacunas.forEach((l, i) => linhas.push(t.lacuna(l.tipo, (0, saida_segura_1.valoresEmUmaLinha)((0, locale_1.remontar)(status.lacunas[i].detalhe)))));
|
|
326
345
|
}
|
|
327
346
|
linhas.push((0, horario_1.legendaDoFuso)());
|
|
328
347
|
return linhas.join('\n');
|