@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
|
@@ -33,11 +33,12 @@ var __importStar = (this && this.__importStar) || (function () {
|
|
|
33
33
|
};
|
|
34
34
|
})();
|
|
35
35
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
36
|
-
exports.CORRECAO_DO_INDICE = exports.USO_DO_GRAFO = exports.AMOSTRA_SCHEMA = exports.STATUS_SCHEMA = void 0;
|
|
36
|
+
exports.CORRECAO_DO_INDICE = exports.TEXTOS_DO_GRAFO = exports.USO_DO_GRAFO = exports.AMOSTRA_SCHEMA = exports.REDACAO_DOS_ANALISADORES = exports.STATUS_SCHEMA = void 0;
|
|
37
37
|
exports.descreverVersoes = descreverVersoes;
|
|
38
38
|
exports.correcaoDosAnalisadores = correcaoDosAnalisadores;
|
|
39
39
|
exports.checarAnalisadoresDoGrafo = checarAnalisadoresDoGrafo;
|
|
40
40
|
exports.lerPedido = lerPedido;
|
|
41
|
+
exports.situacaoNaArvore = situacaoNaArvore;
|
|
41
42
|
exports.executarGrafo = executarGrafo;
|
|
42
43
|
/**
|
|
43
44
|
* RM-031 KG3 (D7, D8): `ork grafo`, o CLI do indice e da consulta do grafo de codigo.
|
|
@@ -78,17 +79,21 @@ const RECUSA_DOS_ANALISADORES = 'grafo.parser.indisponivel';
|
|
|
78
79
|
* de `MODULOS_DO_EXTRATOR`, para a redacao nao entrar na chave do indice; a versao vem de quem chama
|
|
79
80
|
* (o `index.ts`), porque o CLI do grafo so importa a propria familia (fronteira do KG3).
|
|
80
81
|
*/
|
|
81
|
-
function correcaoDosAnalisadores(motivo, versao) {
|
|
82
|
-
if (/ERR_REQUIRE_ESM/.test(motivo))
|
|
83
|
-
return
|
|
84
|
-
'sem a opcao --no-experimental-require-module (na linha de comando ou no NODE_OPTIONS)';
|
|
85
|
-
}
|
|
82
|
+
function correcaoDosAnalisadores(motivo, versao, redacao = exports.REDACAO_DOS_ANALISADORES) {
|
|
83
|
+
if (/ERR_REQUIRE_ESM/.test(motivo))
|
|
84
|
+
return redacao.soEsm(process.version);
|
|
86
85
|
// Sem a versao do pacote (`0.0.0-desconhecida` quando o package.json dele nao e achado), o comando
|
|
87
86
|
// sai sem `@<versao>` e o npm instala a ultima publicada.
|
|
88
87
|
const fixada = versao && /^\d+\.\d+\.\d+/.test(versao) && !versao.startsWith('0.0.0') ? `@${versao}` : '';
|
|
89
|
-
return
|
|
90
|
-
' (instalado dentro de um projeto ou pelo npx, o npm deixa os analisadores fora do pacote do ork, e o grafo os recusa)';
|
|
88
|
+
return redacao.reinstale(fixada);
|
|
91
89
|
}
|
|
90
|
+
exports.REDACAO_DOS_ANALISADORES = {
|
|
91
|
+
recusa: (motivo) => `${motivo}: o ork grafo indexar recusa nesta instalacao, e sem o indice as consultas e as tools ork_grafo_* tambem`,
|
|
92
|
+
soEsm: (versaoDoNode) => `o micromark e so ESM, e este Node (${versaoDoNode}) nao o carrega por require: use Node 20.19, 22.12 ou mais novo, ` +
|
|
93
|
+
'sem a opcao --no-experimental-require-module (na linha de comando ou no NODE_OPTIONS)',
|
|
94
|
+
reinstale: (fixada) => `reinstale o ork global, que traz os analisadores como dependencias: npm install -g @orkastery/cli${fixada}` +
|
|
95
|
+
' (instalado dentro de um projeto ou pelo npx, o npm deixa os analisadores fora do pacote do ork, e o grafo os recusa)',
|
|
96
|
+
};
|
|
92
97
|
/**
|
|
93
98
|
* RM-031 (pacote do npm): o check "analisadores do grafo" do `ork doctor`. Carrega o que o
|
|
94
99
|
* `ork grafo indexar` carrega (`carregarAnalisadores`), entao diz o que o indexar faria, inclusive no
|
|
@@ -96,7 +101,7 @@ function correcaoDosAnalisadores(motivo, versao) {
|
|
|
96
101
|
* fase. Fora da familia do grafo so o `index.ts` e o worker do MCP a abrem (fronteira do KG1), entao o
|
|
97
102
|
* `index.ts` passa este check ao doctor, que nao importa o grafo.
|
|
98
103
|
*/
|
|
99
|
-
function checarAnalisadoresDoGrafo(versao, carregar = intelligence_graph_parsers_1.carregarAnalisadores, versoes = intelligence_graph_parsers_1.versoesDosAnalisadores) {
|
|
104
|
+
function checarAnalisadoresDoGrafo(versao, carregar = intelligence_graph_parsers_1.carregarAnalisadores, versoes = intelligence_graph_parsers_1.versoesDosAnalisadores, redacao = exports.REDACAO_DOS_ANALISADORES) {
|
|
100
105
|
const nome = 'analisadores do grafo';
|
|
101
106
|
try {
|
|
102
107
|
carregar();
|
|
@@ -104,9 +109,7 @@ function checarAnalisadoresDoGrafo(versao, carregar = intelligence_graph_parsers
|
|
|
104
109
|
}
|
|
105
110
|
catch (e) {
|
|
106
111
|
const motivo = e.message;
|
|
107
|
-
return { nome, nivel: 'warn',
|
|
108
|
-
detalhe: `${motivo}: o ork grafo indexar recusa nesta instalacao, e sem o indice as consultas e as tools ork_grafo_* tambem`,
|
|
109
|
-
correcao: correcaoDosAnalisadores(motivo, versao) };
|
|
112
|
+
return { nome, nivel: 'warn', detalhe: redacao.recusa(motivo), correcao: correcaoDosAnalisadores(motivo, versao, redacao) };
|
|
110
113
|
}
|
|
111
114
|
}
|
|
112
115
|
/** O mesmo schema da amostra do KG2: as amostras auditadas continuam validas. */
|
|
@@ -122,6 +125,62 @@ exports.USO_DO_GRAFO = [
|
|
|
122
125
|
' ork grafo amostra [--por-estrato N] | ork grafo amostra --conferir ARQ [--json]',
|
|
123
126
|
' ork grafo limpar [--tudo] [--json]',
|
|
124
127
|
].join('\n');
|
|
128
|
+
exports.TEXTOS_DO_GRAFO = {
|
|
129
|
+
uso: exports.USO_DO_GRAFO.split('\n'),
|
|
130
|
+
erroUso: (motivo) => `grafo.uso: ${motivo}`,
|
|
131
|
+
motivos: {
|
|
132
|
+
semSub: 'falta o subcomando', desconhecido: (sub) => `subcomando desconhecido: ${sub}`,
|
|
133
|
+
repetida: (nome) => `--${nome} repetida`, semValor: (nome) => `--${nome} nao leva valor`,
|
|
134
|
+
exigeValor: (nome) => `--${nome} exige valor`, opcao: (sub, valor) => `opcao desconhecida para ${sub}: ${valor}`,
|
|
135
|
+
argumentos: (sub, esperados, recebidos) => `${sub} pede ${esperados} argumento(s), veio ${recebidos}`,
|
|
136
|
+
inteiro: (nome) => `--${nome} precisa ser inteiro`, tipo: (tipo, lista) => `--tipo desconhecido: ${tipo} (use ${lista})`,
|
|
137
|
+
sentido: (valor) => `--sentido desconhecido: ${valor}`, tetoJson: '--teto-bytes exige --json', tetoMin: '--teto-bytes precisa ser ao menos 1',
|
|
138
|
+
amostraExclusiva: '--conferir e --por-estrato nao combinam', estratoMin: '--por-estrato precisa ser ao menos 1',
|
|
139
|
+
},
|
|
140
|
+
indexar: {
|
|
141
|
+
titulo: (repositorio, estado) => `indice do grafo de ${repositorio}: ${estado}`,
|
|
142
|
+
// O rotulo ocupa 13 colunas antes do valor, como na base: 12 do nome e um espaco.
|
|
143
|
+
campo: (nome, valor) => ` ${nome.padEnd(12)} ${valor}`,
|
|
144
|
+
campos: { revisao: 'revisao', chave: 'chave', snapshot: 'snapshot', digest: 'digest', conferencia: 'conferencia',
|
|
145
|
+
nos: 'nos', arestas: 'arestas', lugar: 'lugar', motivo: 'motivo', tempo: 'tempo' },
|
|
146
|
+
conferencia: (fontes, evidencias) => `conferirFontes verificada: ${fontes} fontes e ${evidencias} evidencias contra os bytes`,
|
|
147
|
+
determinismo: (ordem, digest, relatorio, unidades, igual) => ` determinismo ${ordem}: digest ${digest}, relatorio ${relatorio}, unidades ${unidades}, ${igual ? 'igual' : 'DIFERENTE'}`,
|
|
148
|
+
incremental: (base, igual) => ` incremental a partir do indice de ${base}: ${igual ? 'igual a completa nos quatro arquivos' : 'DIFERENTE'}`,
|
|
149
|
+
naoConferido: (motivo) => ` incremental nao conferido: ${motivo}`,
|
|
150
|
+
aprovado: 'aprovado',
|
|
151
|
+
semBase: 'sem base',
|
|
152
|
+
},
|
|
153
|
+
status: {
|
|
154
|
+
titulo: (head, arvore) => `grafo: HEAD ${head}, arvore ${arvore}`,
|
|
155
|
+
indice: (chave, estado) => ` indice do HEAD ${chave} ${estado}`,
|
|
156
|
+
ausente: '(ausente: rode ork grafo indexar)',
|
|
157
|
+
semAnalisadores: '(sem os analisadores nesta instalacao, nem a consulta nem o indexar rodam)',
|
|
158
|
+
semChave: '(sem a chave do indice: o erro esta na linha de baixo)',
|
|
159
|
+
analisadores: (versoes) => ` analisadores ${versoes}`,
|
|
160
|
+
correcao: (correcao) => ` correcao ${correcao}`,
|
|
161
|
+
pasta: (dir, indices, tamanho) => ` pasta ${dir} (${indices} indice(s), ${tamanho})`,
|
|
162
|
+
semCommit: 'sem commit', indisponivel: 'indisponivel', naoCriada: 'ainda nao criada',
|
|
163
|
+
sobras: (sobras) => ` sobras ${sobras}`,
|
|
164
|
+
},
|
|
165
|
+
contexto: {
|
|
166
|
+
titulo: (thread, revisao) => `Contexto ${thread} @ ${revisao}`,
|
|
167
|
+
resumo: (sementes, total, arestas, ligacoes, bytes) => ` ${sementes}/${total} sementes, ${arestas}/${ligacoes} ligacoes agregadas; ${bytes} bytes JSON`,
|
|
168
|
+
tamanho: (bytes) => ` tamanho dos arquivos no pacote (nao descoberta): ${bytes} bytes (revisao indexada); tokens: unavailable`,
|
|
169
|
+
diff: (diff) => ` diff: ${diff}`,
|
|
170
|
+
mudadas: (n) => ` ligacoes com fonte modificada na arvore: ${n}`,
|
|
171
|
+
final: (truncado, arvore) => ` truncado: ${truncado}; arvore: ${arvore}; use --json para nos e evidencias`,
|
|
172
|
+
},
|
|
173
|
+
amostra: {
|
|
174
|
+
titulo: (arestas, estratos, revisao) => `amostra: ${arestas} arestas em ${estratos} estratos, auditada na revisao ${revisao}`,
|
|
175
|
+
vereditos: (vereditos) => ` vereditos ${vereditos}`,
|
|
176
|
+
conferidas: (ok, total) => ` conferidas contra o indice do HEAD: ${ok} de ${total}`,
|
|
177
|
+
falha: (falha) => `FALHA ${falha}`,
|
|
178
|
+
reprovado: (n) => `reprovado: ${n} falha(s)`,
|
|
179
|
+
aprovado: 'aprovado',
|
|
180
|
+
},
|
|
181
|
+
limpar: (removidos, tamanho) => `grafo limpar: ${removidos} removido(s), ${tamanho}`,
|
|
182
|
+
consulta: intelligence_graph_query_1.TEXTOS_DA_CONSULTA,
|
|
183
|
+
};
|
|
125
184
|
/** KG5 (D5): a correcao das recusas de indice que a proxima indexacao resolve. */
|
|
126
185
|
exports.CORRECAO_DO_INDICE = 'ork grafo indexar';
|
|
127
186
|
/** KG5 (D5): o estado do indice do HEAD que cada recusa declara no JSON, ao lado da correcao. */
|
|
@@ -131,6 +190,7 @@ const ESTADO_DO_INDICE = Object.freeze({
|
|
|
131
190
|
'grafo.indice.outro-extrator': 'outro-extrator',
|
|
132
191
|
'grafo.indice.corrompido': 'corrompido',
|
|
133
192
|
});
|
|
193
|
+
const textosDe = (ctx) => ctx.textos ?? exports.TEXTOS_DO_GRAFO;
|
|
134
194
|
const SUBCOMANDOS = Object.freeze({
|
|
135
195
|
indexar: { posicionais: 0, bandeiras: ['verificar', 'forcar', 'json'], valores: [] },
|
|
136
196
|
status: { posicionais: 0, bandeiras: ['json'], valores: [] },
|
|
@@ -142,16 +202,16 @@ const SUBCOMANDOS = Object.freeze({
|
|
|
142
202
|
amostra: { posicionais: 0, bandeiras: ['json'], valores: ['por-estrato', 'conferir'] },
|
|
143
203
|
limpar: { posicionais: 0, bandeiras: ['tudo', 'json'], valores: [] },
|
|
144
204
|
});
|
|
145
|
-
function uso(motivo) {
|
|
146
|
-
throw new Error(
|
|
205
|
+
function uso(motivo, t) {
|
|
206
|
+
throw new Error(`${t.erroUso(motivo)}\n${t.uso.join('\n')}`);
|
|
147
207
|
}
|
|
148
|
-
function lerPedido(argv) {
|
|
208
|
+
function lerPedido(argv, t = exports.TEXTOS_DO_GRAFO) {
|
|
149
209
|
const [sub, ...resto] = argv;
|
|
150
210
|
if (!sub)
|
|
151
|
-
uso(
|
|
211
|
+
uso(t.motivos.semSub, t);
|
|
152
212
|
const esp = SUBCOMANDOS[sub];
|
|
153
213
|
if (!Object.prototype.hasOwnProperty.call(SUBCOMANDOS, sub) || !esp)
|
|
154
|
-
uso(
|
|
214
|
+
uso(t.motivos.desconhecido(sub), t);
|
|
155
215
|
const posicionais = [], bandeiras = new Set(), valores = new Map();
|
|
156
216
|
for (let i = 0; i < resto.length; i++) {
|
|
157
217
|
const a = resto[i];
|
|
@@ -162,59 +222,59 @@ function lerPedido(argv) {
|
|
|
162
222
|
const igual = a.indexOf('=');
|
|
163
223
|
const nome = igual > 0 ? a.slice(2, igual) : a.slice(2);
|
|
164
224
|
if (bandeiras.has(nome) || valores.has(nome))
|
|
165
|
-
uso(
|
|
225
|
+
uso(t.motivos.repetida(nome), t);
|
|
166
226
|
if (esp.bandeiras.includes(nome)) {
|
|
167
227
|
if (igual > 0)
|
|
168
|
-
uso(
|
|
228
|
+
uso(t.motivos.semValor(nome), t);
|
|
169
229
|
bandeiras.add(nome);
|
|
170
230
|
}
|
|
171
231
|
else if (esp.valores.includes(nome)) {
|
|
172
232
|
const valor = igual > 0 ? a.slice(igual + 1) : resto[++i];
|
|
173
233
|
if (valor === undefined || valor === '' || (igual < 0 && valor.startsWith('--')))
|
|
174
|
-
uso(
|
|
234
|
+
uso(t.motivos.exigeValor(nome), t);
|
|
175
235
|
valores.set(nome, valor);
|
|
176
236
|
}
|
|
177
237
|
else {
|
|
178
|
-
uso(
|
|
238
|
+
uso(t.motivos.opcao(sub, a), t);
|
|
179
239
|
}
|
|
180
240
|
}
|
|
181
241
|
if (posicionais.length !== esp.posicionais)
|
|
182
|
-
uso(
|
|
242
|
+
uso(t.motivos.argumentos(sub, esp.posicionais, posicionais.length), t);
|
|
183
243
|
return { sub, posicionais, bandeiras, valores };
|
|
184
244
|
}
|
|
185
|
-
function inteiro(p, nome) {
|
|
245
|
+
function inteiro(p, nome, t) {
|
|
186
246
|
const v = p.valores.get(nome);
|
|
187
247
|
if (v === undefined)
|
|
188
248
|
return undefined;
|
|
189
249
|
if (!/^[0-9]{1,6}$/.test(v))
|
|
190
|
-
uso(
|
|
250
|
+
uso(t.motivos.inteiro(nome), t);
|
|
191
251
|
return Number(v);
|
|
192
252
|
}
|
|
193
|
-
function tipos(p) {
|
|
253
|
+
function tipos(p, t) {
|
|
194
254
|
const v = p.valores.get('tipo');
|
|
195
255
|
if (v === undefined)
|
|
196
256
|
return undefined;
|
|
197
257
|
const lista = v.split(',');
|
|
198
|
-
for (const
|
|
199
|
-
if (!intelligence_graph_contract_1.TIPOS_DE_ARESTA.includes(
|
|
200
|
-
uso(
|
|
258
|
+
for (const x of lista)
|
|
259
|
+
if (!intelligence_graph_contract_1.TIPOS_DE_ARESTA.includes(x))
|
|
260
|
+
uso(t.motivos.tipo(x, intelligence_graph_contract_1.TIPOS_DE_ARESTA.join(',')), t);
|
|
201
261
|
return lista;
|
|
202
262
|
}
|
|
203
|
-
function sentido(p) {
|
|
263
|
+
function sentido(p, t) {
|
|
204
264
|
const v = p.valores.get('sentido');
|
|
205
265
|
if (v !== undefined && !['entrada', 'saida', 'ambos'].includes(v))
|
|
206
|
-
uso(
|
|
266
|
+
uso(t.motivos.sentido(v), t);
|
|
207
267
|
return v;
|
|
208
268
|
}
|
|
209
269
|
/** KG5 (D4): o teto vale para o JSON, que e o que vai ao contexto de quem consulta. */
|
|
210
|
-
function tetoDeBytes(p) {
|
|
211
|
-
const teto = inteiro(p, 'teto-bytes');
|
|
270
|
+
function tetoDeBytes(p, t) {
|
|
271
|
+
const teto = inteiro(p, 'teto-bytes', t);
|
|
212
272
|
if (teto === undefined)
|
|
213
273
|
return undefined;
|
|
214
274
|
if (!p.bandeiras.has('json'))
|
|
215
|
-
uso(
|
|
275
|
+
uso(t.motivos.tetoJson, t);
|
|
216
276
|
if (teto < 1)
|
|
217
|
-
uso(
|
|
277
|
+
uso(t.motivos.tetoMin, t);
|
|
218
278
|
return teto;
|
|
219
279
|
}
|
|
220
280
|
const mb = (bytes) => `${(bytes / 1024 / 1024).toFixed(1)} MB`;
|
|
@@ -247,30 +307,27 @@ function indexar(ctx, p) {
|
|
|
247
307
|
return 0;
|
|
248
308
|
}
|
|
249
309
|
const m = r.manifesto;
|
|
310
|
+
const mi = textosDe(ctx).indexar;
|
|
250
311
|
const linhas = [
|
|
251
|
-
|
|
252
|
-
|
|
253
|
-
|
|
254
|
-
|
|
255
|
-
|
|
256
|
-
` conferencia conferirFontes verificada: ${m.conferencia.fontes} fontes e ${m.conferencia.evidencias} evidencias contra os bytes`,
|
|
257
|
-
` nos ${contagem(m.contagens.nos)}`,
|
|
258
|
-
` arestas ${contagem(m.contagens.arestas)}`,
|
|
259
|
-
` lugar ${r.dir} (${mb(m.graph_bytes + m.report_bytes + m.units_bytes)})`,
|
|
312
|
+
mi.titulo(m.repository_id, r.estado), mi.campo(mi.campos.revisao, m.revision), mi.campo(mi.campos.chave, r.chave),
|
|
313
|
+
mi.campo(mi.campos.snapshot, m.snapshot_id), mi.campo(mi.campos.digest, m.graph_digest),
|
|
314
|
+
mi.campo(mi.campos.conferencia, mi.conferencia(m.conferencia.fontes, m.conferencia.evidencias)),
|
|
315
|
+
mi.campo(mi.campos.nos, contagem(m.contagens.nos)), mi.campo(mi.campos.arestas, contagem(m.contagens.arestas)),
|
|
316
|
+
mi.campo(mi.campos.lugar, `${r.dir} (${mb(m.graph_bytes + m.report_bytes + m.units_bytes)})`),
|
|
260
317
|
...linhasDaExtracao(r),
|
|
261
318
|
];
|
|
262
319
|
if (r.motivo)
|
|
263
|
-
linhas.push(
|
|
320
|
+
linhas.push(mi.campo(mi.campos.motivo, r.motivo));
|
|
264
321
|
for (const d of r.determinismo ?? []) {
|
|
265
|
-
linhas.push(
|
|
322
|
+
linhas.push(mi.determinismo(d.ordem, d.digest.slice(0, 16), d.relatorio.slice(0, 16), d.unidades.slice(0, 16), d.igual));
|
|
266
323
|
}
|
|
267
324
|
if (r.incremental)
|
|
268
|
-
linhas.push(
|
|
325
|
+
linhas.push(mi.incremental(r.incremental.base.slice(0, 12), r.incremental.igual));
|
|
269
326
|
else if (r.determinismo)
|
|
270
|
-
linhas.push(
|
|
271
|
-
linhas.push(
|
|
327
|
+
linhas.push(mi.naoConferido(r.motivo_completo ?? mi.semBase));
|
|
328
|
+
linhas.push(mi.campo(mi.campos.tempo, `${r.ms} ms`));
|
|
272
329
|
if (r.determinismo)
|
|
273
|
-
linhas.push(
|
|
330
|
+
linhas.push(mi.aprovado);
|
|
274
331
|
ctx.escrever(linhas.join('\n'));
|
|
275
332
|
return 0;
|
|
276
333
|
}
|
|
@@ -301,21 +358,22 @@ function status(ctx, p) {
|
|
|
301
358
|
ctx.escrever(JSON.stringify(r, null, 2));
|
|
302
359
|
return 0;
|
|
303
360
|
}
|
|
361
|
+
const ms = textosDe(ctx).status;
|
|
304
362
|
const linhas = [
|
|
305
|
-
|
|
306
|
-
|
|
363
|
+
ms.titulo(arvore.head ? arvore.head.slice(0, 12) : ms.semCommit, r.arvore),
|
|
364
|
+
ms.indice(chave ?? ms.indisponivel, r.indice_do_head === 'ausente' ? ms.ausente
|
|
307
365
|
: r.indice_do_head === 'indisponivel'
|
|
308
|
-
? (correcao ?
|
|
309
|
-
: `(${r.indice_do_head})`
|
|
310
|
-
|
|
311
|
-
...(correcao ? [
|
|
312
|
-
|
|
366
|
+
? (correcao ? ms.semAnalisadores : ms.semChave)
|
|
367
|
+
: `(${r.indice_do_head})`),
|
|
368
|
+
ms.analisadores(erro ?? descreverVersoes(analisadores)),
|
|
369
|
+
...(correcao ? [ms.correcao(correcao)] : []),
|
|
370
|
+
ms.pasta(estado.dir ?? ms.naoCriada, estado.indices.length, mb(estado.bytes)),
|
|
313
371
|
];
|
|
314
372
|
for (const i of estado.indices) {
|
|
315
373
|
linhas.push(` ${i.chave.slice(0, 20)} ${i.revision ? i.revision.slice(0, 12) : '?'} ${i.repository_id ?? '?'} ${mb(i.bytes)} ${i.problema ?? 'ok'}`);
|
|
316
374
|
}
|
|
317
375
|
if (estado.sobras.length)
|
|
318
|
-
linhas.push(
|
|
376
|
+
linhas.push(ms.sobras(estado.sobras.join(', ')));
|
|
319
377
|
ctx.escrever(linhas.join('\n'));
|
|
320
378
|
return 0;
|
|
321
379
|
}
|
|
@@ -366,7 +424,10 @@ function semIndiceDoHead(ctx, original) {
|
|
|
366
424
|
}
|
|
367
425
|
throw original;
|
|
368
426
|
}
|
|
369
|
-
/**
|
|
427
|
+
/**
|
|
428
|
+
* O indice do HEAD pronto para consulta, com a concessao local e o cabecalho; `grafo` ja vem filtrado por ela.
|
|
429
|
+
* KG5 fatia 5 (D3): `situacao` so le a arvore quando o cabecalho diz `modificada`; limpa, tudo vale `igual`.
|
|
430
|
+
*/
|
|
370
431
|
function consultavel(ctx) {
|
|
371
432
|
let doHead;
|
|
372
433
|
try {
|
|
@@ -385,10 +446,11 @@ function consultavel(ctx) {
|
|
|
385
446
|
arvore: arvore.motivo === null ? 'limpa' : 'modificada',
|
|
386
447
|
extratores: grafo.snapshot.extractors.map((e) => ({ extractor_id: e.extractor_id, extractor_version: e.extractor_version })),
|
|
387
448
|
};
|
|
388
|
-
|
|
449
|
+
const situacao = cabecalho.arvore === 'limpa' ? intelligence_graph_query_1.TUDO_IGUAL : situacaoNaArvore(arvore.raiz, grafo.snapshot.source_manifest);
|
|
450
|
+
return { g: (0, intelligence_graph_query_1.prepararConsulta)(grafo, concessao), cabecalho, grafo, raiz: arvore.raiz, situacao };
|
|
389
451
|
}
|
|
390
452
|
function responder(ctx, p, r) {
|
|
391
|
-
ctx.escrever(p.bandeiras.has('json') ? (0, intelligence_graph_query_1.jsonDaResposta)(r) : (0, intelligence_graph_query_1.textoDaResposta)(r));
|
|
453
|
+
ctx.escrever(p.bandeiras.has('json') ? (0, intelligence_graph_query_1.jsonDaResposta)(r) : (0, intelligence_graph_query_1.textoDaResposta)(r, textosDe(ctx).consulta));
|
|
392
454
|
return 0;
|
|
393
455
|
}
|
|
394
456
|
/**
|
|
@@ -428,17 +490,18 @@ function respostaComTeto(perguntar, limite, teto) {
|
|
|
428
490
|
}
|
|
429
491
|
function consultar(ctx, p) {
|
|
430
492
|
// As opcoes sao conferidas antes de carregar o indice: erro de uso nao custa a leitura do grafo.
|
|
431
|
-
const [a, b] = p.posicionais;
|
|
432
|
-
const profundidade = inteiro(p, 'profundidade'), limite = inteiro(p, 'limite'), s = sentido(p), t = tipos(p), teto = tetoDeBytes(p);
|
|
433
|
-
const { g, cabecalho } = consultavel(ctx);
|
|
493
|
+
const [a, b] = p.posicionais, x = textosDe(ctx);
|
|
494
|
+
const profundidade = inteiro(p, 'profundidade', x), limite = inteiro(p, 'limite', x), s = sentido(p, x), t = tipos(p, x), teto = tetoDeBytes(p, x);
|
|
495
|
+
const { g, cabecalho, situacao } = consultavel(ctx);
|
|
496
|
+
// A busca binaria do teto pergunta de novo com outro limite; a situacao guarda o que ja leu da arvore.
|
|
434
497
|
const perguntar = (lim) => {
|
|
435
498
|
if (p.sub === 'vizinhos')
|
|
436
|
-
return (0, intelligence_graph_query_1.vizinhos)(g, cabecalho, a, { profundidade, limite: lim, sentido: s, tipos: t });
|
|
499
|
+
return (0, intelligence_graph_query_1.vizinhos)(g, cabecalho, a, { profundidade, limite: lim, sentido: s, tipos: t }, situacao);
|
|
437
500
|
if (p.sub === 'chamadores')
|
|
438
|
-
return (0, intelligence_graph_query_1.chamadores)(g, cabecalho, a, { profundidade, limite: lim });
|
|
501
|
+
return (0, intelligence_graph_query_1.chamadores)(g, cabecalho, a, { profundidade, limite: lim }, situacao);
|
|
439
502
|
if (p.sub === 'importadores')
|
|
440
|
-
return (0, intelligence_graph_query_1.importadores)(g, cabecalho, a, { profundidade, limite: lim });
|
|
441
|
-
return (0, intelligence_graph_query_1.caminho)(g, cabecalho, a, b, { sentido: s, tipos: t });
|
|
503
|
+
return (0, intelligence_graph_query_1.importadores)(g, cabecalho, a, { profundidade, limite: lim }, situacao);
|
|
504
|
+
return (0, intelligence_graph_query_1.caminho)(g, cabecalho, a, b, { sentido: s, tipos: t }, situacao);
|
|
442
505
|
};
|
|
443
506
|
if (teto === undefined)
|
|
444
507
|
return responder(ctx, p, perguntar(limite));
|
|
@@ -446,25 +509,27 @@ function consultar(ctx, p) {
|
|
|
446
509
|
return 0;
|
|
447
510
|
}
|
|
448
511
|
function contexto(ctx, p) {
|
|
449
|
-
const teto = tetoDeBytes(p);
|
|
512
|
+
const teto = tetoDeBytes(p, textosDe(ctx));
|
|
450
513
|
if (teto !== undefined && (teto < 4096 || teto > 65536))
|
|
451
514
|
throw new intelligence_graph_query_1.ErroDeConsulta('grafo.contexto.teto-invalido', 'teto deve ser inteiro de 4096 a 65536 bytes');
|
|
452
515
|
if (!ctx.contextoDaThread)
|
|
453
516
|
throw new intelligence_graph_query_1.ErroDeConsulta('grafo.contexto.indisponivel', 'borda sem leitor da thread');
|
|
454
517
|
const lido = ctx.contextoDaThread(p.posicionais[0]);
|
|
455
|
-
const { grafo, cabecalho } = consultavel({ ...ctx, raiz: lido.raiz });
|
|
518
|
+
const { grafo, cabecalho, situacao } = consultavel({ ...ctx, raiz: lido.raiz });
|
|
456
519
|
if (lido.head !== cabecalho.revision)
|
|
457
520
|
throw new intelligence_graph_query_1.ErroDeConsulta('grafo.contexto.revisao-mudou', 'HEAD mudou durante a leitura; repita a consulta');
|
|
458
|
-
const json = (0, intelligence_graph_contexto_1.pacoteDeContexto)(grafo, cabecalho, lido.entrada, teto);
|
|
521
|
+
const json = (0, intelligence_graph_contexto_1.pacoteDeContexto)(grafo, cabecalho, lido.entrada, teto, situacao);
|
|
459
522
|
if (p.bandeiras.has('json'))
|
|
460
523
|
ctx.escrever(json);
|
|
461
524
|
else {
|
|
462
525
|
const r = JSON.parse(json);
|
|
463
|
-
|
|
464
|
-
|
|
465
|
-
|
|
466
|
-
|
|
467
|
-
|
|
526
|
+
// KG5 fatia 5 (D9): o resumo conta as ligacoes cuja fonte mudou na arvore, como o JSON marca.
|
|
527
|
+
const mudadas = r.arestas.filter((a) => a.arvore === 'modificada').length;
|
|
528
|
+
const mc = textosDe(ctx).contexto;
|
|
529
|
+
ctx.escrever([mc.titulo(r.thread, r.indice.revision),
|
|
530
|
+
mc.resumo(r.sementes.length, r.total_sementes, r.arestas.length, r.total_ligacoes, r.medida.pacote_bytes),
|
|
531
|
+
mc.tamanho(r.medida.leitura_crua_bytes), mc.diff(r.fontes.diff), ...(mudadas ? [mc.mudadas(mudadas)] : []),
|
|
532
|
+
mc.final(r.truncado, r.indice.arvore), json].join('\n'));
|
|
468
533
|
}
|
|
469
534
|
return 0;
|
|
470
535
|
}
|
|
@@ -507,6 +572,66 @@ function leitorDaArvore(raiz, grafo) {
|
|
|
507
572
|
return bytes;
|
|
508
573
|
};
|
|
509
574
|
}
|
|
575
|
+
/**
|
|
576
|
+
* KG5 fatia 5 (D3, D6): a situacao de cada fonte do indice na arvore, pelos bytes. So caminho do manifesto;
|
|
577
|
+
* sem seguir link, nem no ultimo nome nem numa pasta do caminho: o caminho real tem de ser o proprio caminho
|
|
578
|
+
* indexado dentro da raiz (CHECK rodada 1, A1). So arquivo regular; tamanho diferente do indexado e
|
|
579
|
+
* `modificada` sem ler, e o sha256 dos bytes decide o resto, lidos ate o tamanho indexado mais um. O arquivo
|
|
580
|
+
* aberto tem de ser o mesmo do `lstat` (dispositivo e inode, CHECK rodada 1, S3): troca entre a conferencia e
|
|
581
|
+
* a abertura vira `ausente`; duas trocas no intervalo ainda passam, e revelariam so se os bytes sao os
|
|
582
|
+
* indexados. Qualquer falha e `ausente`: nao ha arquivo regular legivel no caminho. Cada caminho e lido uma
|
|
583
|
+
* vez, sob demanda, e nada e escrito.
|
|
584
|
+
*/
|
|
585
|
+
function situacaoNaArvore(raiz, manifesto) {
|
|
586
|
+
const porCaminho = new Map(manifesto.map((m) => [m.path, m]));
|
|
587
|
+
const vistas = new Map();
|
|
588
|
+
let raizReal = null;
|
|
589
|
+
const ler = (p) => {
|
|
590
|
+
const m = porCaminho.get(p);
|
|
591
|
+
if (!m)
|
|
592
|
+
return 'ausente';
|
|
593
|
+
const absoluto = path.join(raiz, p);
|
|
594
|
+
try {
|
|
595
|
+
raizReal ??= fs.realpathSync(raiz);
|
|
596
|
+
const st = fs.lstatSync(absoluto, { throwIfNoEntry: false });
|
|
597
|
+
if (!st || !st.isFile())
|
|
598
|
+
return 'ausente';
|
|
599
|
+
// CHECK rodada 2 (R2-S1): caminho de manifesto adulterado com `..` coincidiria com o real fora da raiz.
|
|
600
|
+
const real = fs.realpathSync(absoluto);
|
|
601
|
+
if (real !== path.join(raizReal, p) || !real.startsWith(raizReal + path.sep))
|
|
602
|
+
return 'ausente';
|
|
603
|
+
if (st.size !== m.size_bytes)
|
|
604
|
+
return 'modificada';
|
|
605
|
+
const fd = fs.openSync(absoluto, fs.constants.O_RDONLY | fs.constants.O_NOFOLLOW | fs.constants.O_NONBLOCK);
|
|
606
|
+
try {
|
|
607
|
+
const aberto = fs.fstatSync(fd);
|
|
608
|
+
if (!aberto.isFile() || aberto.dev !== st.dev || aberto.ino !== st.ino)
|
|
609
|
+
return 'ausente';
|
|
610
|
+
if (aberto.size !== m.size_bytes)
|
|
611
|
+
return 'modificada';
|
|
612
|
+
const bytes = Buffer.alloc(m.size_bytes + 1);
|
|
613
|
+
let lidos = 0;
|
|
614
|
+
for (let n = 1; n > 0 && lidos < bytes.length; lidos += n)
|
|
615
|
+
n = fs.readSync(fd, bytes, lidos, bytes.length - lidos, null);
|
|
616
|
+
return lidos === m.size_bytes && sha256(bytes.subarray(0, lidos)) === m.source_hash ? 'igual' : 'modificada';
|
|
617
|
+
}
|
|
618
|
+
finally {
|
|
619
|
+
fs.closeSync(fd);
|
|
620
|
+
}
|
|
621
|
+
}
|
|
622
|
+
catch {
|
|
623
|
+
return 'ausente';
|
|
624
|
+
}
|
|
625
|
+
};
|
|
626
|
+
return (p) => {
|
|
627
|
+
const vista = vistas.get(p);
|
|
628
|
+
if (vista !== undefined)
|
|
629
|
+
return vista;
|
|
630
|
+
const s = ler(p);
|
|
631
|
+
vistas.set(p, s);
|
|
632
|
+
return s;
|
|
633
|
+
};
|
|
634
|
+
}
|
|
510
635
|
const localizadorDe = (g) => new Map(g.nodes.map((n) => [n.node_id, { kind: n.kind, path: n.locator.path, fragment: n.locator.fragment }]));
|
|
511
636
|
const rotulo = (l) => `${l.kind}:${l.path}${l.fragment === null ? '' : `#${l.fragment}`}`;
|
|
512
637
|
const chaveDaAresta = (kind, de, para) => `${kind} ${rotulo(de)} -> ${rotulo(para)}`;
|
|
@@ -547,7 +672,7 @@ function amostrar(grafo, ler, porEstrato, digest) {
|
|
|
547
672
|
};
|
|
548
673
|
}
|
|
549
674
|
/** Confere a amostra auditada contra o indice do HEAD: aresta, trecho pelo hash, veredito com nota. */
|
|
550
|
-
function conferirAmostra(grafo, ler, arquivo) {
|
|
675
|
+
function conferirAmostra(grafo, ler, arquivo, ma) {
|
|
551
676
|
const amostra = JSON.parse(fs.readFileSync(arquivo, 'utf8'));
|
|
552
677
|
if (amostra.schema !== exports.AMOSTRA_SCHEMA || !Array.isArray(amostra.arestas))
|
|
553
678
|
return { linhas: [], falhas: [`schema da amostra: ${amostra.schema}`] };
|
|
@@ -575,32 +700,32 @@ function conferirAmostra(grafo, ler, arquivo) {
|
|
|
575
700
|
if (!bate)
|
|
576
701
|
falhas.push(`${chave}: nenhuma evidencia com o trecho auditado`);
|
|
577
702
|
}
|
|
578
|
-
const linhas = [
|
|
579
|
-
|
|
580
|
-
|
|
581
|
-
` conferidas contra o indice do HEAD: ${amostra.arestas.length - falhas.length} de ${amostra.arestas.length}`,
|
|
582
|
-
];
|
|
703
|
+
const linhas = [ma.titulo(amostra.arestas.length, estratos.size, amostra.revision ?? amostra.revision_unavailable_reason),
|
|
704
|
+
ma.vereditos(Object.entries(vereditos).sort(([x], [y]) => (0, intelligence_graph_contract_1.compararUtf8)(x, y)).map(([k, v]) => `${k}=${v}`).join(' ')),
|
|
705
|
+
ma.conferidas(amostra.arestas.length - falhas.length, amostra.arestas.length)];
|
|
583
706
|
return { linhas, falhas };
|
|
584
707
|
}
|
|
585
708
|
function amostra(ctx, p) {
|
|
709
|
+
const t = textosDe(ctx);
|
|
586
710
|
if (p.valores.has('conferir') && p.valores.has('por-estrato'))
|
|
587
|
-
uso(
|
|
711
|
+
uso(t.motivos.amostraExclusiva, t);
|
|
588
712
|
const { grafo, raiz, cabecalho } = consultavel(ctx);
|
|
589
713
|
const ler = leitorDaArvore(raiz, grafo);
|
|
590
714
|
const arquivo = p.valores.get('conferir');
|
|
591
715
|
if (arquivo === undefined) {
|
|
592
|
-
const n = inteiro(p, 'por-estrato') ?? 3;
|
|
716
|
+
const n = inteiro(p, 'por-estrato', t) ?? 3;
|
|
593
717
|
if (n < 1)
|
|
594
|
-
uso(
|
|
718
|
+
uso(t.motivos.estratoMin, t);
|
|
595
719
|
ctx.escrever(JSON.stringify(amostrar(grafo, ler, n, cabecalho.graph_digest), null, 2));
|
|
596
720
|
return 0;
|
|
597
721
|
}
|
|
598
|
-
const { linhas, falhas } = conferirAmostra(grafo, ler, arquivo);
|
|
722
|
+
const { linhas, falhas } = conferirAmostra(grafo, ler, arquivo, t.amostra);
|
|
599
723
|
if (p.bandeiras.has('json')) {
|
|
600
724
|
ctx.escrever(JSON.stringify({ schema: exports.AMOSTRA_SCHEMA, conferencia: linhas, falhas, aprovado: falhas.length === 0 }, null, 2));
|
|
601
725
|
}
|
|
602
726
|
else {
|
|
603
|
-
|
|
727
|
+
const ma = t.amostra;
|
|
728
|
+
ctx.escrever([...linhas, ...falhas.map((f) => ma.falha(f)), falhas.length ? ma.reprovado(falhas.length) : ma.aprovado].join('\n'));
|
|
604
729
|
}
|
|
605
730
|
return falhas.length ? 1 : 0;
|
|
606
731
|
}
|
|
@@ -617,7 +742,7 @@ function limpar(ctx, p) {
|
|
|
617
742
|
if (p.bandeiras.has('json'))
|
|
618
743
|
ctx.escrever(JSON.stringify({ schema: exports.STATUS_SCHEMA, manter, manter_revisoes: manterRevisoes, ...r }, null, 2));
|
|
619
744
|
else
|
|
620
|
-
ctx.escrever([
|
|
745
|
+
ctx.escrever([textosDe(ctx).limpar(r.removidos.length, mb(r.bytes)), ...r.removidos.map((x) => ` ${x.nome} ${mb(x.bytes)}`)].join('\n'));
|
|
621
746
|
return 0;
|
|
622
747
|
}
|
|
623
748
|
/** KG5 (D4, D5): com `--teto-bytes` o erro tambem sai compacto; recusa de indice traz o estado e a correcao. */
|
|
@@ -638,7 +763,7 @@ function executarGrafo(argv, ctx) {
|
|
|
638
763
|
const compacto = argv[0] === 'contexto' || argv.some((a) => a === '--teto-bytes' || a.startsWith('--teto-bytes='));
|
|
639
764
|
let p;
|
|
640
765
|
try {
|
|
641
|
-
p = lerPedido(argv);
|
|
766
|
+
p = lerPedido(argv, textosDe(ctx));
|
|
642
767
|
}
|
|
643
768
|
catch (e) {
|
|
644
769
|
// Com `--json` no argv, tambem o erro de uso sai como objeto, como os demais.
|