@orkastery/cli 0.5.6 → 0.6.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/adapters/README.md +18 -0
- package/adapters/claude-code/.claude-plugin/plugin.json +1 -0
- package/adapters/claude-code/README.md +37 -5
- package/adapters/claude-code/agents/ork-check.md +1 -0
- package/adapters/claude-code/agents/ork-go.md +1 -0
- package/adapters/claude-code/agents/ork-goal.md +1 -0
- package/adapters/claude-code/agents/ork-master.md +1 -0
- package/adapters/claude-code/agents/ork-plan.md +1 -0
- package/adapters/claude-code/agents/ork-ship.md +1 -0
- package/adapters/claude-code/hooks/hooks.json +2 -1
- package/adapters/claude-code/hooks/ork-guard.js +15 -1
- package/adapters/claude-code/hooks/ork-resposta.js +91 -0
- package/adapters/claude-code/hooks/ork-sensor.js +18 -2
- package/adapters/claude-code/hooks/quota-signal.js +14 -0
- package/adapters/claude-code/mods/ork-mensageiro/.claude-plugin/plugin.json +14 -0
- package/adapters/claude-code/mods/ork-mensageiro/hooks/caixa.ts +215 -0
- package/adapters/claude-code/mods/ork-mensageiro/hooks/hooks.json +3 -0
- package/adapters/claude-code/mods/ork-mensageiro/hooks/painel.tsx +165 -0
- package/adapters/claude-code/mods/ork-mensageiro/hooks/recepcao.ts +256 -0
- package/adapters/claude-code/mods/ork-mensageiro/hooks/register.tsx +481 -0
- package/adapters/claude-code/mods/ork-mensageiro/orkastery-mod.json +5 -0
- package/adapters/claude-code/mods/ork-mensageiro/types/index.d.ts +85 -0
- package/adapters/claude-code/mods/ork-pista/hooks/ci.ts +9 -5
- package/adapters/claude-code/mods/ork-ritual/.claude-plugin/plugin.json +14 -0
- package/adapters/claude-code/mods/ork-ritual/hooks/hooks.json +3 -0
- package/adapters/claude-code/mods/ork-ritual/hooks/nota.ts +88 -0
- package/adapters/claude-code/mods/ork-ritual/hooks/register.tsx +494 -0
- package/adapters/claude-code/mods/ork-ritual/hooks/replay.tsx +271 -0
- package/adapters/claude-code/mods/ork-ritual/hooks/ritual.ts +218 -0
- package/adapters/claude-code/mods/ork-ritual/orkastery-mod.json +5 -0
- package/adapters/claude-code/mods/ork-ritual/types/index.d.ts +106 -0
- package/adapters/claude-code/mods/ork-sentinela/hooks/vigia.ts +1 -1
- package/adapters/codex/skills/ork/SKILL.md +2 -0
- package/adapters/hermes/README.md +64 -1
- package/adapters/hermes/bin/ork-conhecimento-colecoes.sh +14 -0
- package/adapters/hermes/bin/ork-conhecimento-listar.sh +15 -0
- package/adapters/hermes/bin/ork-conhecimento-mostrar.sh +16 -0
- package/adapters/hermes/bin/ork-conhecimento-verificar.sh +15 -0
- package/adapters/hermes/bin/ork-vigia-batida.py +127 -0
- package/adapters/hermes/hermes.plugin.json +4 -0
- package/adapters/hermes/hitl-ingress/__init__.py +101 -8
- package/adapters/hermes/skills/orkastery-devmaster/SKILL.md +2 -2
- package/adapters/openclaw/README.md +81 -9
- package/adapters/openclaw/bin/ork-vigia-batida.js +86 -0
- package/adapters/openclaw/dist/hitl-ingress.js +106 -9
- package/adapters/openclaw/dist/index.js +86 -0
- package/adapters/openclaw/openclaw.plugin.json +34 -4
- package/adapters/openclaw/package.json +2 -2
- package/adapters/openclaw/src/hitl-ingress.ts +103 -9
- package/adapters/openclaw/src/index.ts +94 -0
- package/assets/adapters-en/claude-code/README.md +403 -0
- package/assets/adapters-en/claude-code/agents/ork-check.md +33 -0
- package/assets/adapters-en/claude-code/agents/ork-go.md +33 -0
- package/assets/adapters-en/claude-code/agents/ork-goal.md +34 -0
- package/assets/adapters-en/claude-code/agents/ork-master.md +35 -0
- package/assets/adapters-en/claude-code/agents/ork-plan.md +33 -0
- package/assets/adapters-en/claude-code/agents/ork-ship.md +33 -0
- package/assets/adapters-en/claude-code/commands/check.md +46 -0
- package/assets/adapters-en/claude-code/commands/go.md +46 -0
- package/assets/adapters-en/claude-code/commands/goal.md +55 -0
- package/assets/adapters-en/claude-code/commands/master.md +54 -0
- package/assets/adapters-en/claude-code/commands/onboarding.md +22 -0
- package/assets/adapters-en/claude-code/commands/ork.md +126 -0
- package/assets/adapters-en/claude-code/commands/plan.md +47 -0
- package/assets/adapters-en/claude-code/commands/ship.md +45 -0
- package/assets/adapters-en/codex/skills/ork/SKILL.md +85 -0
- package/assets/adapters-en/hermes/README.md +273 -0
- package/assets/adapters-en/hermes/skills/orkastery-devmaster/SKILL.md +169 -0
- package/assets/references-en/README.md +25 -0
- package/assets/references-en/code-review-axes.md +82 -0
- package/assets/references-en/definition-of-done.md +74 -0
- package/assets/references-en/performance-checklist.md +53 -0
- package/assets/references-en/security-checklist.md +101 -0
- package/assets/references-en/testing-patterns.md +51 -0
- package/assets/security-scan/defaults/.golangci.yml +2 -0
- package/assets/security-scan/defaults/eslint.config.mjs +11 -0
- package/assets/security-scan/defaults/gitleaks.toml +3 -0
- package/assets/security-scan/defaults/ruff.toml +1 -0
- package/assets/security-scan/tools-agil.json +87 -0
- package/assets/security-scan/tools.json +625 -0
- package/assets/skills-en/core/onboarding/SKILL.md +58 -0
- package/assets/skills-en/core/orkastery-bootstrap/SKILL.md +119 -0
- package/assets/skills-en/core/thread-state/SKILL.md +88 -0
- package/assets/skills-en/governance/decision-triage/SKILL.md +65 -0
- package/assets/skills-en/governance/narrative-guardian/SKILL.md +66 -0
- package/assets/skills-en/governance/roadmap-keeper/SKILL.md +60 -0
- package/assets/skills-en/governance/scope-check-capability-map/SKILL.md +71 -0
- package/assets/skills-en/observability/thread-tracing/SKILL.md +63 -0
- package/assets/skills-en/phases/check-quality/SKILL.md +103 -0
- package/assets/skills-en/phases/go-implementation/SKILL.md +78 -0
- package/assets/skills-en/phases/goal-definition/SKILL.md +69 -0
- package/assets/skills-en/phases/master-metrics/SKILL.md +72 -0
- package/assets/skills-en/phases/plan-specification/SKILL.md +67 -0
- package/assets/skills-en/phases/security-remediation/SKILL.md +70 -0
- package/assets/skills-en/phases/ship-release/SKILL.md +71 -0
- package/assets/skills-en/reviewers/code-reviewer/SKILL.md +61 -0
- package/assets/skills-en/reviewers/security-auditor/SKILL.md +93 -0
- package/assets/skills-en/reviewers/test-engineer/SKILL.md +66 -0
- package/assets/skills-en/reviewers/web-performance-auditor/SKILL.md +63 -0
- package/dist/adapters/claude-bg.js +118 -4
- package/dist/adapters/codex-controller-worker.js +12 -5
- package/dist/adapters/codex-events.js +16 -4
- package/dist/adapters/codex.js +3 -1
- package/dist/atualizar-branch.js +245 -0
- package/dist/auditoria.js +13 -11
- package/dist/auditrun.js +51 -46
- package/dist/autorizacao-duravel.js +327 -0
- package/dist/board.js +94 -40
- package/dist/branch-de-estado.js +16 -8
- package/dist/busca-semantica.js +7 -5
- package/dist/catalogo.js +2 -1
- package/dist/changelog-reconciliacao.js +290 -0
- package/dist/check-agil.js +500 -0
- package/dist/check-modo.js +41 -0
- package/dist/check-paralelo.js +183 -0
- package/dist/ci.js +248 -45
- package/dist/ciclos.js +8 -6
- package/dist/claim-lint.js +12 -8
- package/dist/claims-conferir.js +47 -39
- package/dist/claims.js +10 -9
- package/dist/company-brain-client.js +10 -3
- package/dist/company-brain-migration.js +11 -5
- package/dist/conducao-batida.js +759 -0
- package/dist/conducao-sentinela.js +25 -8
- package/dist/conducao.js +84 -29
- package/dist/conhecimento-consulta.js +270 -0
- package/dist/conhecimento.js +111 -87
- package/dist/conta-esgotada.js +127 -0
- package/dist/dado-privado.js +816 -0
- package/dist/decisao-autonoma.js +5 -4
- package/dist/demo.js +14 -12
- package/dist/dependencias-da-worktree.js +25 -0
- package/dist/divida.js +38 -36
- package/dist/docs.js +81 -74
- package/dist/doctor-forja.js +345 -0
- package/dist/doctor-pulse-cron.js +113 -1
- package/dist/doctor.js +164 -6
- package/dist/dsn-da-memoria.js +417 -0
- package/dist/entrega-por-mod.js +503 -0
- package/dist/entrega-pr.js +143 -43
- package/dist/esgotamentos.js +13 -11
- package/dist/estado-thread.js +21 -18
- package/dist/evalrunner.js +35 -32
- package/dist/fabrica-batida.js +34 -21
- package/dist/fabrica-estado.js +13 -10
- package/dist/fix.js +21 -19
- package/dist/forja/adaptador.js +6 -0
- package/dist/forja/ambiente-de-ci.js +27 -0
- package/dist/forja/api.js +256 -0
- package/dist/forja/cache.js +89 -0
- package/dist/forja/cli.js +60 -0
- package/dist/forja/contrato.js +9 -0
- package/dist/forja/endereco.js +43 -0
- package/dist/forja/estado.js +22 -0
- package/dist/forja/executor.js +73 -0
- package/dist/forja/github/ci.js +95 -0
- package/dist/forja/github/dono-da-rede.js +18 -0
- package/dist/forja/github/metadados.js +15 -0
- package/dist/forja/github/pedidos.js +200 -0
- package/dist/forja/gitlab/ci.js +141 -0
- package/dist/forja/gitlab/consultas.js +59 -0
- package/dist/forja/gitlab/dono-da-rede.js +43 -0
- package/dist/forja/gitlab/metadados.js +15 -0
- package/dist/forja/gitlab/pedidos-abertos.js +158 -0
- package/dist/forja/gitlab/pedidos.js +141 -0
- package/dist/forja/produtor.js +32 -0
- package/dist/forja/registro.js +31 -0
- package/dist/forja/resolver.js +121 -0
- package/dist/forja/texto.js +13 -0
- package/dist/forja/versao.js +71 -0
- package/dist/forja.js +123 -80
- package/dist/handoff.js +23 -13
- package/dist/hitl-contract.js +46 -43
- package/dist/hitl-curto.js +37 -25
- package/dist/hitl-gates.js +13 -11
- package/dist/hitl-local-receipt.js +51 -0
- package/dist/hitl-local.js +11 -2
- package/dist/hitl-lock.js +5 -11
- package/dist/hitl-public-receipt.js +11 -0
- package/dist/hitl-resumo.js +44 -1
- package/dist/hitl-sessions.js +62 -9
- package/dist/hitl-texto-livre.js +7 -4
- package/dist/hitl.js +34 -31
- package/dist/horario.js +16 -0
- package/dist/hosts.js +104 -134
- package/dist/index.js +848 -548
- package/dist/indice-vetorial.js +14 -12
- package/dist/init.js +11 -2
- package/dist/integracoes-locais.js +2 -0
- package/dist/intelligence-graph-cli.js +123 -69
- package/dist/intelligence-graph-query.js +37 -22
- package/dist/leases.js +19 -18
- package/dist/ledger-stats.js +17 -16
- package/dist/ledger.js +31 -1
- package/dist/licoes.js +12 -11
- package/dist/locale-accounts.js +220 -0
- package/dist/locale-adapter.js +291 -0
- package/dist/locale-ajuda.js +76 -4
- package/dist/locale-audit.js +199 -0
- package/dist/locale-claims.js +213 -0
- package/dist/locale-conducao.js +138 -0
- package/dist/locale-conhecimento.js +181 -0
- package/dist/locale-decisao.js +205 -0
- package/dist/locale-docs.js +230 -0
- package/dist/locale-estado.js +101 -0
- package/dist/locale-forja.js +290 -0
- package/dist/locale-gerados.js +5 -0
- package/dist/locale-grafo.js +129 -0
- package/dist/locale-master.js +83 -0
- package/dist/locale-network.js +524 -0
- package/dist/locale-operacao-restante.js +931 -0
- package/dist/locale-projetos.js +100 -0
- package/dist/locale-prompts.js +194 -0
- package/dist/locale-pulse.js +140 -2
- package/dist/locale-reservas.js +87 -0
- package/dist/locale-retry.js +145 -6
- package/dist/locale-security-scan.js +69 -0
- package/dist/locale-setup.js +192 -0
- package/dist/locale-ship.js +169 -66
- package/dist/locale-thread.js +149 -5
- package/dist/locale-verify.js +80 -4
- package/dist/locale-worktree.js +246 -0
- package/dist/locale.js +553 -9
- package/dist/maestro-runtime.js +22 -3
- package/dist/manifest.js +287 -11
- package/dist/maquina-ociosa.js +211 -0
- package/dist/maquina.js +10 -5
- package/dist/master-nota-local.js +200 -0
- package/dist/master-nota.js +10 -2
- package/dist/master.js +118 -41
- package/dist/mcp-conhecimento.js +52 -0
- package/dist/mcp-experiencia.js +26 -5
- package/dist/mcp-install.js +73 -8
- package/dist/mcp-noctum.js +101 -0
- package/dist/mcp-server.js +82 -14
- package/dist/mcp-ship-transporte.js +977 -0
- package/dist/mcp-ship.js +68 -24
- package/dist/mcp-transportes.js +17 -0
- package/dist/memoria.js +63 -58
- package/dist/modos-migracao.js +8 -6
- package/dist/modos.js +17 -18
- package/dist/network-roadmap.js +85 -49
- package/dist/noctum-aceite.js +789 -0
- package/dist/noctum-arco.js +540 -33
- package/dist/noctum-capacidade.js +3 -3
- package/dist/noctum-changelog.js +399 -0
- package/dist/noctum-cli.js +482 -0
- package/dist/noctum-coordenacao.js +1225 -0
- package/dist/noctum-entrega.js +1169 -0
- package/dist/noctum-envelope.js +252 -16
- package/dist/noctum-execucao.js +95 -23
- package/dist/noctum-fechamento.js +405 -0
- package/dist/noctum-fila.js +43 -9
- package/dist/noctum-guarda.js +256 -0
- package/dist/noctum-integracao.js +507 -0
- package/dist/noctum-maquinas.js +383 -0
- package/dist/noctum-medicao.js +450 -0
- package/dist/noctum-modo.js +362 -0
- package/dist/noctum-pergunta-canal.js +96 -0
- package/dist/noctum-pergunta.js +115 -0
- package/dist/noctum-provas.js +838 -0
- package/dist/noctum-reconciliacao.js +591 -0
- package/dist/noctum-registro.js +215 -0
- package/dist/noctum-relatorio.js +827 -0
- package/dist/noctum-resposta.js +207 -0
- package/dist/noctum-sessoes-em-voo.js +93 -0
- package/dist/noctum-supervisao.js +649 -0
- package/dist/noctum-terminal.js +459 -0
- package/dist/noctum-transporte.js +655 -0
- package/dist/noctum-vigia.js +639 -0
- package/dist/ocupacao.js +3 -1
- package/dist/onboarding.js +16 -5
- package/dist/orkmind.js +39 -23
- package/dist/orquestracao.js +31 -35
- package/dist/parado-no-condutor.js +146 -124
- package/dist/phase.js +53 -27
- package/dist/policies.js +33 -0
- package/dist/postura-local.js +4 -3
- package/dist/procedencia.js +9 -14
- package/dist/projeto-alvo.js +59 -20
- package/dist/prompts.js +136 -42
- package/dist/prova-minima.js +5 -6
- package/dist/pulse-cadencia.js +5 -4
- package/dist/pulse-consentimento.js +53 -1
- package/dist/pulse-delivery.js +143 -27
- package/dist/pulse-resposta.js +368 -4
- package/dist/pulse.js +136 -3
- package/dist/ratelimit.js +12 -4
- package/dist/recall.js +14 -13
- package/dist/rede-adesao.js +13 -8
- package/dist/rede-forja.js +108 -24
- package/dist/rede-status.js +63 -45
- package/dist/rede.js +86 -46
- package/dist/retomada-checkpoint.js +101 -0
- package/dist/retry.js +228 -73
- package/dist/roadmap-reservas.js +32 -32
- package/dist/runtime-ambiente.js +5 -0
- package/dist/runtime-context.js +117 -43
- package/dist/runtime-escada.js +423 -0
- package/dist/runtime-profiles.js +103 -46
- package/dist/saida-segura.js +3 -2
- package/dist/security-scan/agil.js +355 -0
- package/dist/security-scan/cli.js +76 -0
- package/dist/security-scan/compare.js +149 -0
- package/dist/security-scan/config.js +93 -0
- package/dist/security-scan/detect.js +97 -0
- package/dist/security-scan/executor.js +188 -0
- package/dist/security-scan/guard.js +180 -0
- package/dist/security-scan/imagem-de-lint.js +96 -0
- package/dist/security-scan/normalize/actionlint.js +12 -0
- package/dist/security-scan/normalize/eslint.js +12 -0
- package/dist/security-scan/normalize/gitleaks.js +13 -0
- package/dist/security-scan/normalize/golangci-lint.js +13 -0
- package/dist/security-scan/normalize/govulncheck.js +36 -0
- package/dist/security-scan/normalize/index.js +25 -0
- package/dist/security-scan/normalize/npm-audit.js +30 -0
- package/dist/security-scan/normalize/osv-scanner.js +32 -0
- package/dist/security-scan/normalize/oxlint.js +51 -0
- package/dist/security-scan/normalize/pip-audit.js +16 -0
- package/dist/security-scan/normalize/ruff.js +12 -0
- package/dist/security-scan/normalize/semgrep.js +20 -0
- package/dist/security-scan/normalize/trivy.js +33 -0
- package/dist/security-scan/normalize/util.js +204 -0
- package/dist/security-scan/normalize/zizmor.js +19 -0
- package/dist/security-scan/report.js +156 -0
- package/dist/security-scan/run.js +448 -0
- package/dist/security-scan/tools.js +62 -0
- package/dist/security-scan/trabalhador.js +74 -0
- package/dist/security-scan/types.js +15 -0
- package/dist/session-events.js +19 -2
- package/dist/session-watcher-claude.js +74 -19
- package/dist/session-watcher.js +156 -10
- package/dist/sessoes-contas.js +9 -0
- package/dist/sessoes-inventario.js +1 -1
- package/dist/sessoes.js +25 -23
- package/dist/setup.js +59 -58
- package/dist/ship-publicar.js +263 -92
- package/dist/ship.js +160 -17
- package/dist/superficie.js +14 -11
- package/dist/thread-close.js +9 -9
- package/dist/thread.js +121 -18
- package/dist/tokens.js +15 -11
- package/dist/trabalho-thread.js +297 -0
- package/dist/transporte-do-canal.js +189 -0
- package/dist/types.js +12 -1
- package/dist/util.js +5 -2
- package/dist/varredura-acoes.js +507 -0
- package/dist/verify.js +472 -29
- package/dist/worktree-local.js +12 -10
- package/dist/worktree.js +81 -85
- package/eval/casos/check-quality.json +77 -0
- package/eval/casos/security-auditor.json +148 -0
- package/eval/casos/security-remediation.json +161 -0
- package/eval/fixtures/security-scan/README.md +8 -0
- package/eval/fixtures/security-scan/go/.github/workflows/ci.yml +12 -0
- package/eval/fixtures/security-scan/go/Dockerfile +4 -0
- package/eval/fixtures/security-scan/go/README.md +4 -0
- package/eval/fixtures/security-scan/go/config.go +4 -0
- package/eval/fixtures/security-scan/go/go.mod +5 -0
- package/eval/fixtures/security-scan/go/go.sum +2 -0
- package/eval/fixtures/security-scan/go/main.go +31 -0
- package/eval/fixtures/security-scan/js/.github/workflows/ci.yml +12 -0
- package/eval/fixtures/security-scan/js/Dockerfile +3 -0
- package/eval/fixtures/security-scan/js/README.md +4 -0
- package/eval/fixtures/security-scan/js/package-lock.json +844 -0
- package/eval/fixtures/security-scan/js/package.json +10 -0
- package/eval/fixtures/security-scan/js/src/config.js +4 -0
- package/eval/fixtures/security-scan/js/src/server.js +17 -0
- package/eval/fixtures/security-scan/js/src/util.ts +4 -0
- package/eval/fixtures/security-scan/js/tsconfig.json +4 -0
- package/eval/fixtures/security-scan/python/.github/workflows/ci.yml +12 -0
- package/eval/fixtures/security-scan/python/Dockerfile +3 -0
- package/eval/fixtures/security-scan/python/README.md +4 -0
- package/eval/fixtures/security-scan/python/app/__init__.py +0 -0
- package/eval/fixtures/security-scan/python/app/config.py +2 -0
- package/eval/fixtures/security-scan/python/app/main.py +19 -0
- package/eval/fixtures/security-scan/python/requirements.txt +1 -0
- package/package.json +9 -4
- package/references/security-checklist.md +3 -3
- package/skills/README.md +1 -0
- package/skills/core/orkastery-bootstrap/SKILL.md +2 -2
- package/skills/phases/check-quality/SKILL.md +16 -0
- package/skills/phases/go-implementation/SKILL.md +6 -0
- package/skills/phases/security-remediation/SKILL.md +70 -0
- package/skills/reviewers/security-auditor/SKILL.md +25 -0
package/dist/indice-vetorial.js
CHANGED
|
@@ -77,6 +77,7 @@ const node_crypto_1 = require("node:crypto");
|
|
|
77
77
|
const estado_thread_1 = require("./estado-thread");
|
|
78
78
|
const orkmind_1 = require("./orkmind");
|
|
79
79
|
const policies_1 = require("./policies");
|
|
80
|
+
const locale_1 = require("./locale");
|
|
80
81
|
exports.CONTRATO_INDICE = 'ork.indice-vetorial/v1';
|
|
81
82
|
/** D11: lote por chamada da ponte na indexacao. */
|
|
82
83
|
exports.TAMANHO_DO_LOTE = 16;
|
|
@@ -360,23 +361,24 @@ function avisoDeCobertura(coerentes, entradas, alvo, onde = '') {
|
|
|
360
361
|
}
|
|
361
362
|
/** RM-038: a linha do que fica fora da busca, a mesma no `ork memory index` e no `ork memory status`. */
|
|
362
363
|
function textoForaDaBusca(f) {
|
|
363
|
-
|
|
364
|
-
|
|
364
|
+
const m = (0, locale_1.msg)().operacao.restante.memory.indice;
|
|
365
|
+
return f ? m.foraMedido(f.injecao, f.expiradas, f.outrasColecoes) : m.foraNaoMedido;
|
|
365
366
|
}
|
|
366
367
|
/** Texto de `ork memory index`: de que universo, o que foi (ou seria) embedado e quanto custa estimado. */
|
|
367
368
|
function textoDoIndice(r) {
|
|
368
|
-
const
|
|
369
|
+
const m = (0, locale_1.msg)().operacao.restante.memory.indice;
|
|
370
|
+
const custo = r.custoEstimadoUsd === null ? m.custoNaoEstimado : `US$ ${r.custoEstimadoUsd.toFixed(8)}`;
|
|
369
371
|
const colecoes = Object.entries(r.porColecao).map(([c, n]) => `${c} ${n}`).join(', ');
|
|
370
372
|
return [
|
|
371
|
-
|
|
372
|
-
|
|
373
|
-
|
|
374
|
-
|
|
375
|
-
|
|
376
|
-
...(r.truncados ? [
|
|
377
|
-
|
|
378
|
-
...(r.arquivo ? [
|
|
379
|
-
...(r.motivo ? [
|
|
373
|
+
m.titulo(r.alvo, r.dryRun, r.modelo ?? m.semModelo, r.dim),
|
|
374
|
+
m.universo(r.universo, colecoes, r.coerentes),
|
|
375
|
+
m.fora(textoForaDaBusca(r.foraDaBusca)),
|
|
376
|
+
m.embedados(r.embedados, r.reescritos, r.removidos),
|
|
377
|
+
m.recusados(r.recusados, r.foraDoLimite),
|
|
378
|
+
...(r.truncados ? [m.truncados(r.truncados)] : []),
|
|
379
|
+
m.estimativa(r.tokensEstimados, custo, r.chamadasAoProvider),
|
|
380
|
+
...(r.arquivo ? [m.arquivo(r.arquivo)] : []),
|
|
381
|
+
...(r.motivo ? [m.motivo(r.motivo, r.detalhe)] : r.detalhe ? [` ${r.detalhe}`] : []),
|
|
380
382
|
].join('\n');
|
|
381
383
|
}
|
|
382
384
|
/** Vetores coerentes de um indice para o universo informado: a base da busca e da cobertura. */
|
package/dist/init.js
CHANGED
|
@@ -56,6 +56,7 @@ const slug_1 = require("./slug");
|
|
|
56
56
|
const util_1 = require("./util");
|
|
57
57
|
const horario_1 = require("./horario");
|
|
58
58
|
const modos_1 = require("./modos");
|
|
59
|
+
const detect_1 = require("./security-scan/detect");
|
|
59
60
|
/** O proximo passo do `ork init` em pt-BR; o texto do CLI sai pelo catalogo (`msg().init.proximoPasso`). */
|
|
60
61
|
exports.PROXIMO_PASSO_INIT = (0, locale_1.msg)('pt-BR').init.proximoPasso;
|
|
61
62
|
/** Raiz do repositorio git, resolvendo tambem o caso de worktree. */
|
|
@@ -144,6 +145,7 @@ function detectar(dirInicial, nomeForcado, abbrevForcada) {
|
|
|
144
145
|
baseBranch: baseBranchDetectada(raiz),
|
|
145
146
|
gerenciador: gerenciadorDetectado(raiz),
|
|
146
147
|
verify: verifyDetectado(raiz),
|
|
148
|
+
stacks: [...new Set((0, detect_1.detectStacks)(raiz).map((e) => e.stack))],
|
|
147
149
|
};
|
|
148
150
|
}
|
|
149
151
|
/** Cada linha do texto vira comentario do YAML, com o recuo da chave em que ele fica. */
|
|
@@ -203,6 +205,10 @@ verify:
|
|
|
203
205
|
${linhaVerify('build', d.verify.build)}
|
|
204
206
|
${linhaVerify('test', d.verify.test)}
|
|
205
207
|
${linhaVerify('typecheck', d.verify.typecheck)}
|
|
208
|
+
${comentario(c.securityScan)}
|
|
209
|
+
${d.stacks.length > 0 ? '' : '# '}security_scan: "ork security-scan"
|
|
210
|
+
${d.stacks.length > 0 ? '' : '# '}timeout_ms_por_comando:
|
|
211
|
+
${d.stacks.length > 0 ? '' : '# '} security_scan: 900000
|
|
206
212
|
|
|
207
213
|
ci:
|
|
208
214
|
${comentario(c.ci)}
|
|
@@ -283,6 +289,9 @@ function init(dirInicial, opcoes = {}) {
|
|
|
283
289
|
(0, util_1.gravar)(caminho, manifestoYaml(deteccao, opcoes.locale));
|
|
284
290
|
const estado = path.join(deteccao.raiz, manifest_1.DIR_ESTADO);
|
|
285
291
|
fs.mkdirSync(path.join(estado, 'threads'), { recursive: true });
|
|
286
|
-
//
|
|
287
|
-
|
|
292
|
+
// RM-061 F3c: so o arquivo do estado criado pelo `init` segue a lingua pedida. O `*` e a protecao
|
|
293
|
+
// contra sobrescrita continuam no util; a pasta de worktrees preserva o default historico.
|
|
294
|
+
const locale = opcoes.locale ?? locale_1.LOCALE_PADRAO;
|
|
295
|
+
const gitignore = `# ${(0, locale_1.msg)(locale).gerados.gitignoreDaMaquina}\n*\n`;
|
|
296
|
+
return { caminho, criado: true, deteccao, estadoIgnorado: (0, util_1.ignorarPastaNoGit)(estado, deteccao.raiz, gitignore) };
|
|
288
297
|
}
|
|
@@ -20,4 +20,6 @@ exports.TESTES_DE_INTEGRACAO_LOCAL = new Set([
|
|
|
20
20
|
'rm038-universo-ponte.test.js',
|
|
21
21
|
// RM-059 (T0.10): a conferencia pontual com o sandbox real do codex, como o mcp-verify.test.js.
|
|
22
22
|
'claims-conferir-sandbox.test.js',
|
|
23
|
+
// Security scan (Task 13a): o scanner com o Docker real e as imagens do catalogo.
|
|
24
|
+
'security-scan-integracao.test.js',
|
|
23
25
|
]);
|
|
@@ -33,7 +33,7 @@ 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.REDACAO_DOS_ANALISADORES = 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;
|
|
@@ -125,6 +125,62 @@ exports.USO_DO_GRAFO = [
|
|
|
125
125
|
' ork grafo amostra [--por-estrato N] | ork grafo amostra --conferir ARQ [--json]',
|
|
126
126
|
' ork grafo limpar [--tudo] [--json]',
|
|
127
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
|
+
};
|
|
128
184
|
/** KG5 (D5): a correcao das recusas de indice que a proxima indexacao resolve. */
|
|
129
185
|
exports.CORRECAO_DO_INDICE = 'ork grafo indexar';
|
|
130
186
|
/** KG5 (D5): o estado do indice do HEAD que cada recusa declara no JSON, ao lado da correcao. */
|
|
@@ -134,6 +190,7 @@ const ESTADO_DO_INDICE = Object.freeze({
|
|
|
134
190
|
'grafo.indice.outro-extrator': 'outro-extrator',
|
|
135
191
|
'grafo.indice.corrompido': 'corrompido',
|
|
136
192
|
});
|
|
193
|
+
const textosDe = (ctx) => ctx.textos ?? exports.TEXTOS_DO_GRAFO;
|
|
137
194
|
const SUBCOMANDOS = Object.freeze({
|
|
138
195
|
indexar: { posicionais: 0, bandeiras: ['verificar', 'forcar', 'json'], valores: [] },
|
|
139
196
|
status: { posicionais: 0, bandeiras: ['json'], valores: [] },
|
|
@@ -145,16 +202,16 @@ const SUBCOMANDOS = Object.freeze({
|
|
|
145
202
|
amostra: { posicionais: 0, bandeiras: ['json'], valores: ['por-estrato', 'conferir'] },
|
|
146
203
|
limpar: { posicionais: 0, bandeiras: ['tudo', 'json'], valores: [] },
|
|
147
204
|
});
|
|
148
|
-
function uso(motivo) {
|
|
149
|
-
throw new Error(
|
|
205
|
+
function uso(motivo, t) {
|
|
206
|
+
throw new Error(`${t.erroUso(motivo)}\n${t.uso.join('\n')}`);
|
|
150
207
|
}
|
|
151
|
-
function lerPedido(argv) {
|
|
208
|
+
function lerPedido(argv, t = exports.TEXTOS_DO_GRAFO) {
|
|
152
209
|
const [sub, ...resto] = argv;
|
|
153
210
|
if (!sub)
|
|
154
|
-
uso(
|
|
211
|
+
uso(t.motivos.semSub, t);
|
|
155
212
|
const esp = SUBCOMANDOS[sub];
|
|
156
213
|
if (!Object.prototype.hasOwnProperty.call(SUBCOMANDOS, sub) || !esp)
|
|
157
|
-
uso(
|
|
214
|
+
uso(t.motivos.desconhecido(sub), t);
|
|
158
215
|
const posicionais = [], bandeiras = new Set(), valores = new Map();
|
|
159
216
|
for (let i = 0; i < resto.length; i++) {
|
|
160
217
|
const a = resto[i];
|
|
@@ -165,59 +222,59 @@ function lerPedido(argv) {
|
|
|
165
222
|
const igual = a.indexOf('=');
|
|
166
223
|
const nome = igual > 0 ? a.slice(2, igual) : a.slice(2);
|
|
167
224
|
if (bandeiras.has(nome) || valores.has(nome))
|
|
168
|
-
uso(
|
|
225
|
+
uso(t.motivos.repetida(nome), t);
|
|
169
226
|
if (esp.bandeiras.includes(nome)) {
|
|
170
227
|
if (igual > 0)
|
|
171
|
-
uso(
|
|
228
|
+
uso(t.motivos.semValor(nome), t);
|
|
172
229
|
bandeiras.add(nome);
|
|
173
230
|
}
|
|
174
231
|
else if (esp.valores.includes(nome)) {
|
|
175
232
|
const valor = igual > 0 ? a.slice(igual + 1) : resto[++i];
|
|
176
233
|
if (valor === undefined || valor === '' || (igual < 0 && valor.startsWith('--')))
|
|
177
|
-
uso(
|
|
234
|
+
uso(t.motivos.exigeValor(nome), t);
|
|
178
235
|
valores.set(nome, valor);
|
|
179
236
|
}
|
|
180
237
|
else {
|
|
181
|
-
uso(
|
|
238
|
+
uso(t.motivos.opcao(sub, a), t);
|
|
182
239
|
}
|
|
183
240
|
}
|
|
184
241
|
if (posicionais.length !== esp.posicionais)
|
|
185
|
-
uso(
|
|
242
|
+
uso(t.motivos.argumentos(sub, esp.posicionais, posicionais.length), t);
|
|
186
243
|
return { sub, posicionais, bandeiras, valores };
|
|
187
244
|
}
|
|
188
|
-
function inteiro(p, nome) {
|
|
245
|
+
function inteiro(p, nome, t) {
|
|
189
246
|
const v = p.valores.get(nome);
|
|
190
247
|
if (v === undefined)
|
|
191
248
|
return undefined;
|
|
192
249
|
if (!/^[0-9]{1,6}$/.test(v))
|
|
193
|
-
uso(
|
|
250
|
+
uso(t.motivos.inteiro(nome), t);
|
|
194
251
|
return Number(v);
|
|
195
252
|
}
|
|
196
|
-
function tipos(p) {
|
|
253
|
+
function tipos(p, t) {
|
|
197
254
|
const v = p.valores.get('tipo');
|
|
198
255
|
if (v === undefined)
|
|
199
256
|
return undefined;
|
|
200
257
|
const lista = v.split(',');
|
|
201
|
-
for (const
|
|
202
|
-
if (!intelligence_graph_contract_1.TIPOS_DE_ARESTA.includes(
|
|
203
|
-
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);
|
|
204
261
|
return lista;
|
|
205
262
|
}
|
|
206
|
-
function sentido(p) {
|
|
263
|
+
function sentido(p, t) {
|
|
207
264
|
const v = p.valores.get('sentido');
|
|
208
265
|
if (v !== undefined && !['entrada', 'saida', 'ambos'].includes(v))
|
|
209
|
-
uso(
|
|
266
|
+
uso(t.motivos.sentido(v), t);
|
|
210
267
|
return v;
|
|
211
268
|
}
|
|
212
269
|
/** KG5 (D4): o teto vale para o JSON, que e o que vai ao contexto de quem consulta. */
|
|
213
|
-
function tetoDeBytes(p) {
|
|
214
|
-
const teto = inteiro(p, 'teto-bytes');
|
|
270
|
+
function tetoDeBytes(p, t) {
|
|
271
|
+
const teto = inteiro(p, 'teto-bytes', t);
|
|
215
272
|
if (teto === undefined)
|
|
216
273
|
return undefined;
|
|
217
274
|
if (!p.bandeiras.has('json'))
|
|
218
|
-
uso(
|
|
275
|
+
uso(t.motivos.tetoJson, t);
|
|
219
276
|
if (teto < 1)
|
|
220
|
-
uso(
|
|
277
|
+
uso(t.motivos.tetoMin, t);
|
|
221
278
|
return teto;
|
|
222
279
|
}
|
|
223
280
|
const mb = (bytes) => `${(bytes / 1024 / 1024).toFixed(1)} MB`;
|
|
@@ -250,30 +307,27 @@ function indexar(ctx, p) {
|
|
|
250
307
|
return 0;
|
|
251
308
|
}
|
|
252
309
|
const m = r.manifesto;
|
|
310
|
+
const mi = textosDe(ctx).indexar;
|
|
253
311
|
const linhas = [
|
|
254
|
-
|
|
255
|
-
|
|
256
|
-
|
|
257
|
-
|
|
258
|
-
|
|
259
|
-
` conferencia conferirFontes verificada: ${m.conferencia.fontes} fontes e ${m.conferencia.evidencias} evidencias contra os bytes`,
|
|
260
|
-
` nos ${contagem(m.contagens.nos)}`,
|
|
261
|
-
` arestas ${contagem(m.contagens.arestas)}`,
|
|
262
|
-
` 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)})`),
|
|
263
317
|
...linhasDaExtracao(r),
|
|
264
318
|
];
|
|
265
319
|
if (r.motivo)
|
|
266
|
-
linhas.push(
|
|
320
|
+
linhas.push(mi.campo(mi.campos.motivo, r.motivo));
|
|
267
321
|
for (const d of r.determinismo ?? []) {
|
|
268
|
-
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));
|
|
269
323
|
}
|
|
270
324
|
if (r.incremental)
|
|
271
|
-
linhas.push(
|
|
325
|
+
linhas.push(mi.incremental(r.incremental.base.slice(0, 12), r.incremental.igual));
|
|
272
326
|
else if (r.determinismo)
|
|
273
|
-
linhas.push(
|
|
274
|
-
linhas.push(
|
|
327
|
+
linhas.push(mi.naoConferido(r.motivo_completo ?? mi.semBase));
|
|
328
|
+
linhas.push(mi.campo(mi.campos.tempo, `${r.ms} ms`));
|
|
275
329
|
if (r.determinismo)
|
|
276
|
-
linhas.push(
|
|
330
|
+
linhas.push(mi.aprovado);
|
|
277
331
|
ctx.escrever(linhas.join('\n'));
|
|
278
332
|
return 0;
|
|
279
333
|
}
|
|
@@ -304,21 +358,22 @@ function status(ctx, p) {
|
|
|
304
358
|
ctx.escrever(JSON.stringify(r, null, 2));
|
|
305
359
|
return 0;
|
|
306
360
|
}
|
|
361
|
+
const ms = textosDe(ctx).status;
|
|
307
362
|
const linhas = [
|
|
308
|
-
|
|
309
|
-
|
|
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
|
|
310
365
|
: r.indice_do_head === 'indisponivel'
|
|
311
|
-
? (correcao ?
|
|
312
|
-
: `(${r.indice_do_head})`
|
|
313
|
-
|
|
314
|
-
...(correcao ? [
|
|
315
|
-
|
|
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)),
|
|
316
371
|
];
|
|
317
372
|
for (const i of estado.indices) {
|
|
318
373
|
linhas.push(` ${i.chave.slice(0, 20)} ${i.revision ? i.revision.slice(0, 12) : '?'} ${i.repository_id ?? '?'} ${mb(i.bytes)} ${i.problema ?? 'ok'}`);
|
|
319
374
|
}
|
|
320
375
|
if (estado.sobras.length)
|
|
321
|
-
linhas.push(
|
|
376
|
+
linhas.push(ms.sobras(estado.sobras.join(', ')));
|
|
322
377
|
ctx.escrever(linhas.join('\n'));
|
|
323
378
|
return 0;
|
|
324
379
|
}
|
|
@@ -395,7 +450,7 @@ function consultavel(ctx) {
|
|
|
395
450
|
return { g: (0, intelligence_graph_query_1.prepararConsulta)(grafo, concessao), cabecalho, grafo, raiz: arvore.raiz, situacao };
|
|
396
451
|
}
|
|
397
452
|
function responder(ctx, p, r) {
|
|
398
|
-
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));
|
|
399
454
|
return 0;
|
|
400
455
|
}
|
|
401
456
|
/**
|
|
@@ -435,8 +490,8 @@ function respostaComTeto(perguntar, limite, teto) {
|
|
|
435
490
|
}
|
|
436
491
|
function consultar(ctx, p) {
|
|
437
492
|
// As opcoes sao conferidas antes de carregar o indice: erro de uso nao custa a leitura do grafo.
|
|
438
|
-
const [a, b] = p.posicionais;
|
|
439
|
-
const profundidade = inteiro(p, 'profundidade'), limite = inteiro(p, 'limite'), s = sentido(p), t = tipos(p), teto = tetoDeBytes(p);
|
|
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);
|
|
440
495
|
const { g, cabecalho, situacao } = consultavel(ctx);
|
|
441
496
|
// A busca binaria do teto pergunta de novo com outro limite; a situacao guarda o que ja leu da arvore.
|
|
442
497
|
const perguntar = (lim) => {
|
|
@@ -454,7 +509,7 @@ function consultar(ctx, p) {
|
|
|
454
509
|
return 0;
|
|
455
510
|
}
|
|
456
511
|
function contexto(ctx, p) {
|
|
457
|
-
const teto = tetoDeBytes(p);
|
|
512
|
+
const teto = tetoDeBytes(p, textosDe(ctx));
|
|
458
513
|
if (teto !== undefined && (teto < 4096 || teto > 65536))
|
|
459
514
|
throw new intelligence_graph_query_1.ErroDeConsulta('grafo.contexto.teto-invalido', 'teto deve ser inteiro de 4096 a 65536 bytes');
|
|
460
515
|
if (!ctx.contextoDaThread)
|
|
@@ -470,12 +525,11 @@ function contexto(ctx, p) {
|
|
|
470
525
|
const r = JSON.parse(json);
|
|
471
526
|
// KG5 fatia 5 (D9): o resumo conta as ligacoes cuja fonte mudou na arvore, como o JSON marca.
|
|
472
527
|
const mudadas = r.arestas.filter((a) => a.arvore === 'modificada').length;
|
|
473
|
-
|
|
474
|
-
|
|
475
|
-
|
|
476
|
-
|
|
477
|
-
|
|
478
|
-
` truncado: ${r.truncado}; arvore: ${r.indice.arvore}; use --json para nos e evidencias`, json].join('\n'));
|
|
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'));
|
|
479
533
|
}
|
|
480
534
|
return 0;
|
|
481
535
|
}
|
|
@@ -618,7 +672,7 @@ function amostrar(grafo, ler, porEstrato, digest) {
|
|
|
618
672
|
};
|
|
619
673
|
}
|
|
620
674
|
/** Confere a amostra auditada contra o indice do HEAD: aresta, trecho pelo hash, veredito com nota. */
|
|
621
|
-
function conferirAmostra(grafo, ler, arquivo) {
|
|
675
|
+
function conferirAmostra(grafo, ler, arquivo, ma) {
|
|
622
676
|
const amostra = JSON.parse(fs.readFileSync(arquivo, 'utf8'));
|
|
623
677
|
if (amostra.schema !== exports.AMOSTRA_SCHEMA || !Array.isArray(amostra.arestas))
|
|
624
678
|
return { linhas: [], falhas: [`schema da amostra: ${amostra.schema}`] };
|
|
@@ -646,32 +700,32 @@ function conferirAmostra(grafo, ler, arquivo) {
|
|
|
646
700
|
if (!bate)
|
|
647
701
|
falhas.push(`${chave}: nenhuma evidencia com o trecho auditado`);
|
|
648
702
|
}
|
|
649
|
-
const linhas = [
|
|
650
|
-
|
|
651
|
-
|
|
652
|
-
` conferidas contra o indice do HEAD: ${amostra.arestas.length - falhas.length} de ${amostra.arestas.length}`,
|
|
653
|
-
];
|
|
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)];
|
|
654
706
|
return { linhas, falhas };
|
|
655
707
|
}
|
|
656
708
|
function amostra(ctx, p) {
|
|
709
|
+
const t = textosDe(ctx);
|
|
657
710
|
if (p.valores.has('conferir') && p.valores.has('por-estrato'))
|
|
658
|
-
uso(
|
|
711
|
+
uso(t.motivos.amostraExclusiva, t);
|
|
659
712
|
const { grafo, raiz, cabecalho } = consultavel(ctx);
|
|
660
713
|
const ler = leitorDaArvore(raiz, grafo);
|
|
661
714
|
const arquivo = p.valores.get('conferir');
|
|
662
715
|
if (arquivo === undefined) {
|
|
663
|
-
const n = inteiro(p, 'por-estrato') ?? 3;
|
|
716
|
+
const n = inteiro(p, 'por-estrato', t) ?? 3;
|
|
664
717
|
if (n < 1)
|
|
665
|
-
uso(
|
|
718
|
+
uso(t.motivos.estratoMin, t);
|
|
666
719
|
ctx.escrever(JSON.stringify(amostrar(grafo, ler, n, cabecalho.graph_digest), null, 2));
|
|
667
720
|
return 0;
|
|
668
721
|
}
|
|
669
|
-
const { linhas, falhas } = conferirAmostra(grafo, ler, arquivo);
|
|
722
|
+
const { linhas, falhas } = conferirAmostra(grafo, ler, arquivo, t.amostra);
|
|
670
723
|
if (p.bandeiras.has('json')) {
|
|
671
724
|
ctx.escrever(JSON.stringify({ schema: exports.AMOSTRA_SCHEMA, conferencia: linhas, falhas, aprovado: falhas.length === 0 }, null, 2));
|
|
672
725
|
}
|
|
673
726
|
else {
|
|
674
|
-
|
|
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'));
|
|
675
729
|
}
|
|
676
730
|
return falhas.length ? 1 : 0;
|
|
677
731
|
}
|
|
@@ -688,7 +742,7 @@ function limpar(ctx, p) {
|
|
|
688
742
|
if (p.bandeiras.has('json'))
|
|
689
743
|
ctx.escrever(JSON.stringify({ schema: exports.STATUS_SCHEMA, manter, manter_revisoes: manterRevisoes, ...r }, null, 2));
|
|
690
744
|
else
|
|
691
|
-
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'));
|
|
692
746
|
return 0;
|
|
693
747
|
}
|
|
694
748
|
/** KG5 (D4, D5): com `--teto-bytes` o erro tambem sai compacto; recusa de indice traz o estado e a correcao. */
|
|
@@ -709,7 +763,7 @@ function executarGrafo(argv, ctx) {
|
|
|
709
763
|
const compacto = argv[0] === 'contexto' || argv.some((a) => a === '--teto-bytes' || a.startsWith('--teto-bytes='));
|
|
710
764
|
let p;
|
|
711
765
|
try {
|
|
712
|
-
p = lerPedido(argv);
|
|
766
|
+
p = lerPedido(argv, textosDe(ctx));
|
|
713
767
|
}
|
|
714
768
|
catch (e) {
|
|
715
769
|
// Com `--json` no argv, tambem o erro de uso sai como objeto, como os demais.
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
"use strict";
|
|
2
2
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
-
exports.rotuloDoNo = exports.ErroDeConsulta = exports.TUDO_IGUAL = exports.AVISO_DE_PARCIALIDADE = exports.CANDIDATOS_LISTADOS = exports.LIMITE_MAXIMO = exports.LIMITE_PADRAO = exports.PROFUNDIDADE_MAXIMA = exports.CONSULTA_SCHEMA = void 0;
|
|
3
|
+
exports.rotuloDoNo = exports.ErroDeConsulta = exports.TUDO_IGUAL = exports.TEXTOS_DA_CONSULTA = exports.AVISO_DE_PARCIALIDADE = exports.CANDIDATOS_LISTADOS = exports.LIMITE_MAXIMO = exports.LIMITE_PADRAO = exports.PROFUNDIDADE_MAXIMA = exports.CONSULTA_SCHEMA = void 0;
|
|
4
4
|
exports.filtrarGrafo = filtrarGrafo;
|
|
5
5
|
exports.prepararConsulta = prepararConsulta;
|
|
6
6
|
exports.resolverNo = resolverNo;
|
|
@@ -36,6 +36,22 @@ exports.LIMITE_MAXIMO = 10_000;
|
|
|
36
36
|
/** Candidatos listados quando um nome solto e ambiguo. */
|
|
37
37
|
exports.CANDIDATOS_LISTADOS = 20;
|
|
38
38
|
exports.AVISO_DE_PARCIALIDADE = 'parcial: so arestas que o extrator prova; chamada por despacho de tipo, import nao resolvido e as lacunas do relatorio de extracao ficam fora';
|
|
39
|
+
exports.TEXTOS_DA_CONSULTA = {
|
|
40
|
+
titulo: (repositorio, revisao, chave, snapshot) => `grafo de ${repositorio} na revisao ${revisao}, indice ${chave}, snapshot ${snapshot}`,
|
|
41
|
+
arvore: 'aviso: a arvore tem mudanca rastreada; a resposta e do HEAD, nao da arvore',
|
|
42
|
+
fontes: (lista, resto) => `fontes que mudaram na arvore: ${lista}${resto ? ` e mais ${resto}` : ''}`,
|
|
43
|
+
marca: ' [fonte modificada na arvore]',
|
|
44
|
+
pagina: (pagina) => `pagina ${pagina}`,
|
|
45
|
+
extratores: (lista) => `extratores: ${lista}`,
|
|
46
|
+
semCaminho: (de, para, sentido, nos) => `sem caminho de ${de} para ${para} (sentido ${sentido}): ${nos} nos explorados`,
|
|
47
|
+
caminho: (de, para, sentido, passos) => `caminho de ${de} para ${para} (sentido ${sentido}): ${passos} passo(s)`,
|
|
48
|
+
contra: '(contra a aresta) ',
|
|
49
|
+
todos: 'todos',
|
|
50
|
+
resultado: (tipo, alvo, profundidade, filtro, arestas, nos) => `${tipo} de ${alvo} (profundidade ${profundidade}${filtro}): ${arestas} aresta(s), ${nos} no(s)`,
|
|
51
|
+
filtro: (sentido, tipos) => `, sentido ${sentido}, tipos ${tipos}`,
|
|
52
|
+
truncado: (devolvidas, total) => `truncado: ${devolvidas} de ${total} arestas, as mais perto do alvo; use --limite`,
|
|
53
|
+
parcial: exports.AVISO_DE_PARCIALIDADE,
|
|
54
|
+
};
|
|
39
55
|
/** Sem saber da arvore, toda fonte vale `igual`: e o que a arvore limpa garante. */
|
|
40
56
|
const TUDO_IGUAL = () => 'igual';
|
|
41
57
|
exports.TUDO_IGUAL = TUDO_IGUAL;
|
|
@@ -339,53 +355,52 @@ function caminho(g, cabecalho, de, para, opcoes = {}, situacao = exports.TUDO_IG
|
|
|
339
355
|
function jsonDaResposta(r) {
|
|
340
356
|
return JSON.stringify(r, null, 2);
|
|
341
357
|
}
|
|
342
|
-
function linhasDaEvidencia(e) {
|
|
358
|
+
function linhasDaEvidencia(e, m) {
|
|
343
359
|
const s = e.span;
|
|
344
360
|
const onde = s.type === 'text'
|
|
345
361
|
? `${e.path}:${s.line_start ?? '?'}${s.line_end !== null && s.line_end !== s.line_start ? `-${s.line_end}` : ''}`
|
|
346
|
-
: `${e.path}
|
|
362
|
+
: `${e.path} ${m.pagina(s.page)}`;
|
|
347
363
|
return ` ${e.extractor_id} ${e.extraction_method} ${onde} bytes ${s.byte_start}-${s.byte_end}`;
|
|
348
364
|
}
|
|
349
365
|
/** KG5 fatia 5 (D9): a aresta cuja fonte mudou diz isso na propria linha, como o JSON diz no campo `arvore`. */
|
|
350
|
-
function linhasDaAresta(a, prefixo = ' ') {
|
|
351
|
-
const marca = a.arvore === 'modificada' ?
|
|
352
|
-
return [`${prefixo}${a.kind} ${a.from} -> ${a.to}${marca}`, ...a.evidencias.map(linhasDaEvidencia)];
|
|
366
|
+
function linhasDaAresta(a, m, prefixo = ' ') {
|
|
367
|
+
const marca = a.arvore === 'modificada' ? m.marca : '';
|
|
368
|
+
return [`${prefixo}${a.kind} ${a.from} -> ${a.to}${marca}`, ...a.evidencias.map((e) => linhasDaEvidencia(e, m))];
|
|
353
369
|
}
|
|
354
370
|
/** KG5 fatia 5 (D9): ate cinco fontes que nao tem na arvore os bytes do indice, com a situacao de cada uma. */
|
|
355
|
-
function linhaDasFontesMudadas(fontes) {
|
|
371
|
+
function linhaDasFontesMudadas(fontes, m) {
|
|
356
372
|
const mudaram = fontes.filter((f) => f.arvore !== 'igual');
|
|
357
373
|
if (!mudaram.length)
|
|
358
374
|
return [];
|
|
359
|
-
|
|
360
|
-
return [`fontes que mudaram na arvore: ${mudaram.slice(0, 5).map((f) => `${f.path} (${f.arvore})`).join(', ')}${resto}`];
|
|
375
|
+
return [m.fontes(mudaram.slice(0, 5).map((f) => `${f.path} (${f.arvore})`).join(', '), Math.max(0, mudaram.length - 5))];
|
|
361
376
|
}
|
|
362
|
-
function textoDaResposta(r) {
|
|
377
|
+
function textoDaResposta(r, m = exports.TEXTOS_DA_CONSULTA) {
|
|
363
378
|
const c = r.consulta, i = r.indice;
|
|
364
379
|
const linhas = [
|
|
365
|
-
|
|
380
|
+
m.titulo(i.repository_id, i.revision.slice(0, 12), i.chave.slice(0, 16), i.snapshot_id.slice(0, 17)),
|
|
366
381
|
];
|
|
367
382
|
if (i.arvore === 'modificada')
|
|
368
|
-
linhas.push(
|
|
369
|
-
linhas.push(...linhaDasFontesMudadas(r.fontes));
|
|
370
|
-
linhas.push(
|
|
383
|
+
linhas.push(m.arvore);
|
|
384
|
+
linhas.push(...linhaDasFontesMudadas(r.fontes, m));
|
|
385
|
+
linhas.push(m.extratores(i.extratores.map((e) => `${e.extractor_id} ${e.extractor_version}`).join(', ')));
|
|
371
386
|
if (c.tipo === 'caminho') {
|
|
372
387
|
const para = r.para;
|
|
373
388
|
if (!r.caminho) {
|
|
374
|
-
linhas.push(
|
|
389
|
+
linhas.push(m.semCaminho(r.alvo.rotulo, para.rotulo, c.sentido, r.nos_explorados));
|
|
375
390
|
}
|
|
376
391
|
else {
|
|
377
|
-
linhas.push(
|
|
378
|
-
r.caminho.forEach((p, n) => linhas.push(...linhasDaAresta(p.aresta, ` ${n + 1}. ${p.sentido === 'entrada' ?
|
|
392
|
+
linhas.push(m.caminho(r.alvo.rotulo, para.rotulo, c.sentido, r.caminho.length));
|
|
393
|
+
r.caminho.forEach((p, n) => linhas.push(...linhasDaAresta(p.aresta, m, ` ${n + 1}. ${p.sentido === 'entrada' ? m.contra : ''}`)));
|
|
379
394
|
}
|
|
380
395
|
}
|
|
381
396
|
else {
|
|
382
|
-
const filtro = c.tipo === 'vizinhos' ?
|
|
383
|
-
linhas.push(
|
|
397
|
+
const filtro = c.tipo === 'vizinhos' ? m.filtro(c.sentido, c.tipos.length === intelligence_graph_contract_1.TIPOS_DE_ARESTA.length ? m.todos : c.tipos.join(',')) : '';
|
|
398
|
+
linhas.push(m.resultado(c.tipo, r.alvo.rotulo, c.profundidade, filtro, r.total_arestas, r.total_nos - 1));
|
|
384
399
|
for (const a of r.arestas)
|
|
385
|
-
linhas.push(...linhasDaAresta(a));
|
|
400
|
+
linhas.push(...linhasDaAresta(a, m));
|
|
386
401
|
if (r.truncado)
|
|
387
|
-
linhas.push(
|
|
402
|
+
linhas.push(m.truncado(r.arestas.length, r.total_arestas));
|
|
388
403
|
}
|
|
389
|
-
linhas.push(
|
|
404
|
+
linhas.push(m.parcial);
|
|
390
405
|
return linhas.join('\n');
|
|
391
406
|
}
|