@orkastery/cli 0.5.3 → 0.6.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/adapters/README.md +18 -0
- package/adapters/claude-code/.claude-plugin/plugin.json +1 -0
- package/adapters/claude-code/README.md +195 -5
- package/adapters/claude-code/agents/ork-check.md +1 -0
- package/adapters/claude-code/agents/ork-go.md +1 -0
- package/adapters/claude-code/agents/ork-goal.md +1 -0
- package/adapters/claude-code/agents/ork-master.md +1 -0
- package/adapters/claude-code/agents/ork-plan.md +1 -0
- package/adapters/claude-code/agents/ork-ship.md +1 -0
- package/adapters/claude-code/hooks/hooks.json +2 -1
- package/adapters/claude-code/hooks/ork-guard.js +15 -1
- package/adapters/claude-code/hooks/ork-resposta.js +91 -0
- package/adapters/claude-code/hooks/ork-sensor.js +18 -2
- package/adapters/claude-code/hooks/quota-signal.js +14 -0
- package/adapters/claude-code/mods/autoridade.json +56 -0
- package/adapters/claude-code/mods/ork-clima/.claude-plugin/plugin.json +14 -0
- package/adapters/claude-code/mods/ork-clima/hooks/contas.ts +283 -0
- package/adapters/claude-code/mods/ork-clima/hooks/hooks.json +3 -0
- package/adapters/claude-code/mods/ork-clima/hooks/previsao.ts +393 -0
- package/adapters/claude-code/mods/ork-clima/hooks/register.ts +205 -0
- package/adapters/claude-code/mods/ork-clima/orkastery-mod.json +5 -0
- package/adapters/claude-code/mods/ork-clima/types/index.d.ts +80 -0
- package/adapters/claude-code/mods/ork-freio/.claude-plugin/plugin.json +14 -0
- package/adapters/claude-code/mods/ork-freio/hooks/carga.ts +160 -0
- package/adapters/claude-code/mods/ork-freio/hooks/conferencia.ts +309 -0
- package/adapters/claude-code/mods/ork-freio/hooks/hooks.json +3 -0
- package/adapters/claude-code/mods/ork-freio/hooks/lote.ts +270 -0
- package/adapters/claude-code/mods/ork-freio/hooks/register.ts +285 -0
- package/adapters/claude-code/mods/ork-freio/orkastery-mod.json +5 -0
- package/adapters/claude-code/mods/ork-freio/types/index.d.ts +127 -0
- package/adapters/claude-code/mods/ork-mensageiro/.claude-plugin/plugin.json +14 -0
- package/adapters/claude-code/mods/ork-mensageiro/hooks/caixa.ts +215 -0
- package/adapters/claude-code/mods/ork-mensageiro/hooks/hooks.json +3 -0
- package/adapters/claude-code/mods/ork-mensageiro/hooks/painel.tsx +165 -0
- package/adapters/claude-code/mods/ork-mensageiro/hooks/recepcao.ts +256 -0
- package/adapters/claude-code/mods/ork-mensageiro/hooks/register.tsx +481 -0
- package/adapters/claude-code/mods/ork-mensageiro/orkastery-mod.json +5 -0
- package/adapters/claude-code/mods/ork-mensageiro/types/index.d.ts +85 -0
- package/adapters/claude-code/mods/ork-mesa/.claude-plugin/plugin.json +14 -0
- package/adapters/claude-code/mods/ork-mesa/hooks/cartoes.tsx +246 -0
- package/adapters/claude-code/mods/ork-mesa/hooks/decidir.ts +110 -0
- package/adapters/claude-code/mods/ork-mesa/hooks/fila.ts +253 -0
- package/adapters/claude-code/mods/ork-mesa/hooks/hooks.json +3 -0
- package/adapters/claude-code/mods/ork-mesa/hooks/obvia.ts +98 -0
- package/adapters/claude-code/mods/ork-mesa/hooks/register.tsx +493 -0
- package/adapters/claude-code/mods/ork-mesa/orkastery-mod.json +5 -0
- package/adapters/claude-code/mods/ork-mesa/types/index.d.ts +131 -0
- package/adapters/claude-code/mods/ork-pista/.claude-plugin/plugin.json +14 -0
- package/adapters/claude-code/mods/ork-pista/hooks/acoes.ts +71 -0
- package/adapters/claude-code/mods/ork-pista/hooks/ci.ts +121 -0
- package/adapters/claude-code/mods/ork-pista/hooks/hooks.json +3 -0
- package/adapters/claude-code/mods/ork-pista/hooks/pista.tsx +356 -0
- package/adapters/claude-code/mods/ork-pista/hooks/register.tsx +439 -0
- package/adapters/claude-code/mods/ork-pista/orkastery-mod.json +5 -0
- package/adapters/claude-code/mods/ork-pista/types/index.d.ts +85 -0
- package/adapters/claude-code/mods/ork-ponte/.claude-plugin/plugin.json +13 -0
- package/adapters/claude-code/mods/ork-ponte/hooks/faixa.tsx +57 -0
- package/adapters/claude-code/mods/ork-ponte/hooks/guarda.ts +410 -0
- package/adapters/claude-code/mods/ork-ponte/hooks/hooks.json +3 -0
- package/adapters/claude-code/mods/ork-ponte/hooks/mostrado.ts +55 -0
- package/adapters/claude-code/mods/ork-ponte/hooks/nucleo.ts +157 -0
- package/adapters/claude-code/mods/ork-ponte/hooks/papel.ts +42 -0
- package/adapters/claude-code/mods/ork-ponte/hooks/register.ts +331 -0
- package/adapters/claude-code/mods/ork-ponte/hooks/vigia.ts +76 -0
- package/adapters/claude-code/mods/ork-ponte/orkastery-mod.json +5 -0
- package/adapters/claude-code/mods/ork-ponte/types/index.d.ts +178 -0
- package/adapters/claude-code/mods/ork-portao/.claude-plugin/plugin.json +14 -0
- package/adapters/claude-code/mods/ork-portao/hooks/hooks.json +3 -0
- package/adapters/claude-code/mods/ork-portao/hooks/lease.ts +201 -0
- package/adapters/claude-code/mods/ork-portao/hooks/plano.ts +304 -0
- package/adapters/claude-code/mods/ork-portao/hooks/register.ts +339 -0
- package/adapters/claude-code/mods/ork-portao/hooks/verify.ts +152 -0
- package/adapters/claude-code/mods/ork-portao/orkastery-mod.json +5 -0
- package/adapters/claude-code/mods/ork-portao/types/index.d.ts +60 -0
- package/adapters/claude-code/mods/ork-radar/.claude-plugin/plugin.json +14 -0
- package/adapters/claude-code/mods/ork-radar/hooks/colisao.ts +420 -0
- package/adapters/claude-code/mods/ork-radar/hooks/hooks.json +3 -0
- package/adapters/claude-code/mods/ork-radar/hooks/mapa.tsx +322 -0
- package/adapters/claude-code/mods/ork-radar/hooks/register.tsx +470 -0
- package/adapters/claude-code/mods/ork-radar/orkastery-mod.json +5 -0
- package/adapters/claude-code/mods/ork-radar/types/index.d.ts +72 -0
- package/adapters/claude-code/mods/ork-ritual/.claude-plugin/plugin.json +14 -0
- package/adapters/claude-code/mods/ork-ritual/hooks/hooks.json +3 -0
- package/adapters/claude-code/mods/ork-ritual/hooks/nota.ts +88 -0
- package/adapters/claude-code/mods/ork-ritual/hooks/register.tsx +494 -0
- package/adapters/claude-code/mods/ork-ritual/hooks/replay.tsx +271 -0
- package/adapters/claude-code/mods/ork-ritual/hooks/ritual.ts +218 -0
- package/adapters/claude-code/mods/ork-ritual/orkastery-mod.json +5 -0
- package/adapters/claude-code/mods/ork-ritual/types/index.d.ts +106 -0
- package/adapters/claude-code/mods/ork-sentinela/.claude-plugin/plugin.json +14 -0
- package/adapters/claude-code/mods/ork-sentinela/hooks/alertas.ts +85 -0
- package/adapters/claude-code/mods/ork-sentinela/hooks/despacho.ts +156 -0
- package/adapters/claude-code/mods/ork-sentinela/hooks/hooks.json +3 -0
- package/adapters/claude-code/mods/ork-sentinela/hooks/register.ts +511 -0
- package/adapters/claude-code/mods/ork-sentinela/hooks/vigia.ts +186 -0
- package/adapters/claude-code/mods/ork-sentinela/orkastery-mod.json +5 -0
- package/adapters/claude-code/mods/ork-sentinela/types/index.d.ts +65 -0
- package/adapters/claude-code/mods/ork-torre/.claude-plugin/plugin.json +14 -0
- package/adapters/claude-code/mods/ork-torre/hooks/agenda.ts +60 -0
- package/adapters/claude-code/mods/ork-torre/hooks/detalhe.tsx +236 -0
- package/adapters/claude-code/mods/ork-torre/hooks/frases.ts +42 -0
- package/adapters/claude-code/mods/ork-torre/hooks/hooks.json +3 -0
- package/adapters/claude-code/mods/ork-torre/hooks/painel.tsx +344 -0
- package/adapters/claude-code/mods/ork-torre/hooks/rede.ts +97 -0
- package/adapters/claude-code/mods/ork-torre/hooks/register.tsx +437 -0
- package/adapters/claude-code/mods/ork-torre/orkastery-mod.json +5 -0
- package/adapters/claude-code/mods/ork-torre/types/index.d.ts +108 -0
- package/adapters/codex/skills/ork/SKILL.md +2 -0
- package/adapters/hermes/README.md +64 -1
- package/adapters/hermes/bin/ork-conhecimento-colecoes.sh +14 -0
- package/adapters/hermes/bin/ork-conhecimento-listar.sh +15 -0
- package/adapters/hermes/bin/ork-conhecimento-mostrar.sh +16 -0
- package/adapters/hermes/bin/ork-conhecimento-verificar.sh +15 -0
- package/adapters/hermes/bin/ork-vigia-batida.py +127 -0
- package/adapters/hermes/hermes.plugin.json +4 -0
- package/adapters/hermes/hitl-ingress/__init__.py +101 -8
- package/adapters/hermes/skills/orkastery-devmaster/SKILL.md +3 -3
- package/adapters/openclaw/README.md +83 -10
- package/adapters/openclaw/bin/ork-vigia-batida.js +86 -0
- package/adapters/openclaw/dist/hitl-ingress.js +106 -9
- package/adapters/openclaw/dist/index.js +86 -0
- package/adapters/openclaw/openclaw.plugin.json +34 -4
- package/adapters/openclaw/package.json +2 -2
- package/adapters/openclaw/src/hitl-ingress.ts +103 -9
- package/adapters/openclaw/src/index.ts +94 -0
- package/assets/adapters-en/claude-code/README.md +403 -0
- package/assets/adapters-en/claude-code/agents/ork-check.md +33 -0
- package/assets/adapters-en/claude-code/agents/ork-go.md +33 -0
- package/assets/adapters-en/claude-code/agents/ork-goal.md +34 -0
- package/assets/adapters-en/claude-code/agents/ork-master.md +35 -0
- package/assets/adapters-en/claude-code/agents/ork-plan.md +33 -0
- package/assets/adapters-en/claude-code/agents/ork-ship.md +33 -0
- package/assets/adapters-en/claude-code/commands/check.md +46 -0
- package/assets/adapters-en/claude-code/commands/go.md +46 -0
- package/assets/adapters-en/claude-code/commands/goal.md +55 -0
- package/assets/adapters-en/claude-code/commands/master.md +54 -0
- package/assets/adapters-en/claude-code/commands/onboarding.md +22 -0
- package/assets/adapters-en/claude-code/commands/ork.md +126 -0
- package/assets/adapters-en/claude-code/commands/plan.md +47 -0
- package/assets/adapters-en/claude-code/commands/ship.md +45 -0
- package/assets/adapters-en/codex/skills/ork/SKILL.md +85 -0
- package/assets/adapters-en/hermes/README.md +273 -0
- package/assets/adapters-en/hermes/skills/orkastery-devmaster/SKILL.md +169 -0
- package/assets/docs-en/markdownlint-cli2.jsonc +22 -0
- package/assets/docs-en/padroes/documentacao-de-produto.md +135 -0
- package/assets/docs-en/padroes/roadmap-de-produto.md +100 -0
- package/assets/docs-en/produto/README.md +14 -0
- package/assets/docs-en/produto/_modelo-feature.md +62 -0
- package/assets/docs-en/roadmap/README.md +14 -0
- package/assets/docs-en/roadmap/_modelo-item.md +75 -0
- package/assets/references-en/README.md +25 -0
- package/assets/references-en/code-review-axes.md +82 -0
- package/assets/references-en/definition-of-done.md +74 -0
- package/assets/references-en/performance-checklist.md +53 -0
- package/assets/references-en/security-checklist.md +101 -0
- package/assets/references-en/testing-patterns.md +51 -0
- package/assets/security-scan/defaults/.golangci.yml +2 -0
- package/assets/security-scan/defaults/eslint.config.mjs +11 -0
- package/assets/security-scan/defaults/gitleaks.toml +3 -0
- package/assets/security-scan/defaults/ruff.toml +1 -0
- package/assets/security-scan/tools-agil.json +87 -0
- package/assets/security-scan/tools.json +625 -0
- package/assets/skills-en/core/onboarding/SKILL.md +58 -0
- package/assets/skills-en/core/orkastery-bootstrap/SKILL.md +119 -0
- package/assets/skills-en/core/thread-state/SKILL.md +88 -0
- package/assets/skills-en/governance/decision-triage/SKILL.md +65 -0
- package/assets/skills-en/governance/narrative-guardian/SKILL.md +66 -0
- package/assets/skills-en/governance/roadmap-keeper/SKILL.md +60 -0
- package/assets/skills-en/governance/scope-check-capability-map/SKILL.md +71 -0
- package/assets/skills-en/observability/thread-tracing/SKILL.md +63 -0
- package/assets/skills-en/phases/check-quality/SKILL.md +103 -0
- package/assets/skills-en/phases/go-implementation/SKILL.md +78 -0
- package/assets/skills-en/phases/goal-definition/SKILL.md +69 -0
- package/assets/skills-en/phases/master-metrics/SKILL.md +72 -0
- package/assets/skills-en/phases/plan-specification/SKILL.md +67 -0
- package/assets/skills-en/phases/security-remediation/SKILL.md +70 -0
- package/assets/skills-en/phases/ship-release/SKILL.md +71 -0
- package/assets/skills-en/reviewers/code-reviewer/SKILL.md +61 -0
- package/assets/skills-en/reviewers/security-auditor/SKILL.md +93 -0
- package/assets/skills-en/reviewers/test-engineer/SKILL.md +66 -0
- package/assets/skills-en/reviewers/web-performance-auditor/SKILL.md +63 -0
- package/dist/adapters/claude-bg.js +193 -15
- package/dist/adapters/codex-controller-worker.js +12 -5
- package/dist/adapters/codex-events.js +16 -4
- package/dist/adapters/codex.js +13 -2
- package/dist/agents-md.js +24 -15
- package/dist/atualizar-branch.js +245 -0
- package/dist/auditoria.js +13 -11
- package/dist/auditrun.js +68 -48
- package/dist/autorizacao-duravel.js +327 -0
- package/dist/board.js +98 -43
- package/dist/branch-de-estado.js +39 -9
- package/dist/busca-semantica.js +7 -5
- package/dist/catalogo.js +35 -1
- package/dist/changelog-reconciliacao.js +290 -0
- package/dist/check-agil.js +500 -0
- package/dist/check-modo.js +41 -0
- package/dist/check-paralelo.js +183 -0
- package/dist/ci.js +255 -46
- package/dist/ciclos.js +8 -6
- package/dist/claim-lint.js +12 -8
- package/dist/claims-conferir.js +350 -0
- package/dist/claims.js +13 -10
- package/dist/company-brain-client.js +45 -3
- package/dist/company-brain-journal.js +2 -1
- package/dist/company-brain-migration.js +47 -6
- package/dist/conducao-batida.js +759 -0
- package/dist/conducao-sentinela.js +405 -0
- package/dist/conducao-texto.js +12 -18
- package/dist/conducao.js +206 -59
- package/dist/conhecimento-consulta.js +270 -0
- package/dist/conhecimento.js +514 -0
- package/dist/conta-esgotada.js +127 -0
- package/dist/dado-privado.js +816 -0
- package/dist/decisao-autonoma.js +5 -4
- package/dist/demo.js +14 -12
- package/dist/dependencias-da-worktree.js +25 -0
- package/dist/divida.js +38 -36
- package/dist/docs.js +103 -82
- package/dist/doctor-forja.js +345 -0
- package/dist/doctor-pulse-cron.js +294 -27
- package/dist/doctor-rede.js +18 -17
- package/dist/doctor.js +278 -116
- package/dist/dsn-da-memoria.js +417 -0
- package/dist/entrega-por-mod.js +503 -0
- package/dist/entrega-pr.js +158 -57
- package/dist/escopo-escrita.js +10 -1
- package/dist/esgotamentos.js +13 -11
- package/dist/estado-thread.js +42 -17
- package/dist/evalrunner.js +35 -32
- package/dist/experiencia-instalacao.js +45 -25
- package/dist/fabrica-batida.js +323 -0
- package/dist/fabrica-estado.js +49 -16
- package/dist/fabrica-publicar.js +3 -1
- package/dist/fila-pesada.js +444 -0
- package/dist/fix.js +24 -21
- package/dist/forja/adaptador.js +6 -0
- package/dist/forja/ambiente-de-ci.js +27 -0
- package/dist/forja/api.js +256 -0
- package/dist/forja/cache.js +89 -0
- package/dist/forja/cli.js +60 -0
- package/dist/forja/contrato.js +9 -0
- package/dist/forja/endereco.js +43 -0
- package/dist/forja/estado.js +22 -0
- package/dist/forja/executor.js +73 -0
- package/dist/forja/github/ci.js +95 -0
- package/dist/forja/github/dono-da-rede.js +18 -0
- package/dist/forja/github/metadados.js +15 -0
- package/dist/forja/github/pedidos.js +200 -0
- package/dist/forja/gitlab/ci.js +141 -0
- package/dist/forja/gitlab/consultas.js +59 -0
- package/dist/forja/gitlab/dono-da-rede.js +43 -0
- package/dist/forja/gitlab/metadados.js +15 -0
- package/dist/forja/gitlab/pedidos-abertos.js +158 -0
- package/dist/forja/gitlab/pedidos.js +141 -0
- package/dist/forja/produtor.js +32 -0
- package/dist/forja/registro.js +31 -0
- package/dist/forja/resolver.js +121 -0
- package/dist/forja/texto.js +13 -0
- package/dist/forja/versao.js +71 -0
- package/dist/forja.js +124 -81
- package/dist/gates.js +3 -28
- package/dist/handoff.js +33 -19
- package/dist/hitl-contract.js +46 -43
- package/dist/hitl-curto.js +37 -25
- package/dist/hitl-gates.js +13 -11
- package/dist/hitl-local-receipt.js +53 -0
- package/dist/hitl-local.js +11 -2
- package/dist/hitl-lock.js +5 -11
- package/dist/hitl-public-receipt.js +11 -0
- package/dist/hitl-resumo.js +72 -3
- package/dist/hitl-sessions.js +62 -9
- package/dist/hitl-tempo-parado.js +4 -4
- package/dist/hitl-texto-livre.js +7 -4
- package/dist/hitl.js +63 -64
- package/dist/horario.js +30 -7
- package/dist/hosts.js +155 -134
- package/dist/impedimento.js +108 -14
- package/dist/index.js +1421 -1019
- package/dist/indice-vetorial.js +14 -12
- package/dist/indice.js +7 -1
- package/dist/init.js +54 -49
- package/dist/instabilidade.js +144 -0
- package/dist/integracoes-locais.js +4 -0
- package/dist/intelligence-graph-cli.js +213 -88
- package/dist/intelligence-graph-contexto.js +56 -17
- package/dist/intelligence-graph-contract.js +2 -1
- package/dist/intelligence-graph-extract-md.js +56 -4
- package/dist/intelligence-graph-extract-ts.js +71 -3
- package/dist/intelligence-graph-query.js +96 -34
- package/dist/leases.js +19 -18
- package/dist/ledger-stats.js +17 -16
- package/dist/ledger.js +46 -2
- package/dist/licoes.js +12 -11
- package/dist/liveness.js +6 -3
- package/dist/locale-accounts.js +220 -0
- package/dist/locale-adapter.js +291 -0
- package/dist/locale-ajuda.js +833 -0
- package/dist/locale-audit.js +199 -0
- package/dist/locale-claims.js +213 -0
- package/dist/locale-conducao.js +138 -0
- package/dist/locale-conhecimento.js +181 -0
- package/dist/locale-decisao.js +205 -0
- package/dist/locale-docs.js +230 -0
- package/dist/locale-estado.js +101 -0
- package/dist/locale-forja.js +290 -0
- package/dist/locale-gerados.js +165 -0
- package/dist/locale-grafo.js +129 -0
- package/dist/locale-master.js +182 -0
- package/dist/locale-network.js +524 -0
- package/dist/locale-onboarding.js +92 -0
- package/dist/locale-operacao-restante.js +931 -0
- package/dist/locale-phase.js +151 -0
- package/dist/locale-projetos.js +100 -0
- package/dist/locale-prompts.js +194 -0
- package/dist/locale-pulse.js +349 -0
- package/dist/locale-reservas.js +87 -0
- package/dist/locale-retry.js +524 -0
- package/dist/locale-roadmap.js +102 -0
- package/dist/locale-security-scan.js +69 -0
- package/dist/locale-setup.js +192 -0
- package/dist/locale-ship.js +597 -0
- package/dist/locale-thread.js +421 -0
- package/dist/locale-verify.js +201 -0
- package/dist/locale-worktree.js +246 -0
- package/dist/locale.js +1258 -0
- package/dist/maestro-runtime.js +22 -3
- package/dist/manifest.js +415 -13
- package/dist/maquina-ociosa.js +211 -0
- package/dist/maquina.js +31 -7
- package/dist/master-digest.js +6 -1
- package/dist/master-nota-local.js +200 -0
- package/dist/master-nota.js +14 -8
- package/dist/master.js +139 -65
- package/dist/mcp-artifacts.js +11 -2
- package/dist/mcp-conhecimento.js +52 -0
- package/dist/mcp-experiencia.js +26 -5
- package/dist/mcp-git.js +23 -6
- package/dist/mcp-grafo.js +7 -4
- package/dist/mcp-install.js +73 -8
- package/dist/mcp-noctum.js +101 -0
- package/dist/mcp-server.js +90 -16
- package/dist/mcp-ship-transporte.js +977 -0
- package/dist/mcp-ship.js +71 -25
- package/dist/mcp-transportes.js +17 -0
- package/dist/mcp-verify.js +6 -1
- package/dist/memoria.js +63 -58
- package/dist/modos-migracao.js +8 -6
- package/dist/modos.js +20 -24
- package/dist/network-roadmap.js +90 -51
- package/dist/noctum-aceite.js +789 -0
- package/dist/noctum-arco.js +1418 -0
- package/dist/noctum-capacidade.js +141 -0
- package/dist/noctum-changelog.js +399 -0
- package/dist/noctum-cli.js +482 -0
- package/dist/noctum-coordenacao.js +1225 -0
- package/dist/noctum-entrega.js +1169 -0
- package/dist/noctum-envelope.js +1046 -0
- package/dist/noctum-execucao.js +376 -0
- package/dist/noctum-fechamento.js +405 -0
- package/dist/noctum-fila.js +314 -0
- package/dist/noctum-guarda.js +256 -0
- package/dist/noctum-integracao.js +507 -0
- package/dist/noctum-maquinas.js +383 -0
- package/dist/noctum-medicao.js +450 -0
- package/dist/noctum-modo.js +362 -0
- package/dist/noctum-pergunta-canal.js +96 -0
- package/dist/noctum-pergunta.js +115 -0
- package/dist/noctum-provas.js +838 -0
- package/dist/noctum-reconciliacao.js +591 -0
- package/dist/noctum-registro.js +215 -0
- package/dist/noctum-relatorio.js +827 -0
- package/dist/noctum-resposta.js +207 -0
- package/dist/noctum-sessoes-em-voo.js +93 -0
- package/dist/noctum-supervisao.js +649 -0
- package/dist/noctum-terminal.js +459 -0
- package/dist/noctum-transporte.js +655 -0
- package/dist/noctum-vigia.js +639 -0
- package/dist/ocupacao.js +32 -3
- package/dist/onboarding.js +56 -26
- package/dist/orkmind.js +48 -25
- package/dist/orquestracao.js +44 -47
- package/dist/parado-no-condutor.js +174 -127
- package/dist/phase.js +144 -63
- package/dist/policies.js +37 -4
- package/dist/portfolio.js +4 -2
- package/dist/postura-local.js +235 -0
- package/dist/preflight.js +11 -10
- package/dist/procedencia.js +220 -0
- package/dist/projeto-alvo.js +186 -24
- package/dist/prompts.js +140 -42
- package/dist/prova-minima.js +5 -6
- package/dist/pulse-cadencia.js +5 -4
- package/dist/pulse-consentimento.js +53 -1
- package/dist/pulse-delivery.js +151 -24
- package/dist/pulse-resposta.js +368 -4
- package/dist/pulse.js +188 -22
- package/dist/ratelimit.js +16 -6
- package/dist/recall.js +14 -13
- package/dist/redacao-saida.js +63 -0
- package/dist/rede-adesao.js +13 -8
- package/dist/rede-forja.js +108 -24
- package/dist/rede-status.js +66 -47
- package/dist/rede.js +86 -46
- package/dist/retomada-checkpoint.js +101 -0
- package/dist/retry.js +451 -212
- package/dist/roadmap-reservas.js +45 -28
- package/dist/roadmap-status.js +129 -33
- package/dist/runtime-ambiente.js +5 -0
- package/dist/runtime-context.js +284 -32
- package/dist/runtime-escada.js +423 -0
- package/dist/runtime-profiles.js +103 -46
- package/dist/runtimes.js +2 -1
- package/dist/saida-segura.js +3 -2
- package/dist/security-scan/agil.js +355 -0
- package/dist/security-scan/cli.js +76 -0
- package/dist/security-scan/compare.js +149 -0
- package/dist/security-scan/config.js +93 -0
- package/dist/security-scan/detect.js +97 -0
- package/dist/security-scan/executor.js +188 -0
- package/dist/security-scan/guard.js +180 -0
- package/dist/security-scan/imagem-de-lint.js +96 -0
- package/dist/security-scan/normalize/actionlint.js +12 -0
- package/dist/security-scan/normalize/eslint.js +12 -0
- package/dist/security-scan/normalize/gitleaks.js +13 -0
- package/dist/security-scan/normalize/golangci-lint.js +13 -0
- package/dist/security-scan/normalize/govulncheck.js +36 -0
- package/dist/security-scan/normalize/index.js +25 -0
- package/dist/security-scan/normalize/npm-audit.js +30 -0
- package/dist/security-scan/normalize/osv-scanner.js +32 -0
- package/dist/security-scan/normalize/oxlint.js +51 -0
- package/dist/security-scan/normalize/pip-audit.js +16 -0
- package/dist/security-scan/normalize/ruff.js +12 -0
- package/dist/security-scan/normalize/semgrep.js +20 -0
- package/dist/security-scan/normalize/trivy.js +33 -0
- package/dist/security-scan/normalize/util.js +204 -0
- package/dist/security-scan/normalize/zizmor.js +19 -0
- package/dist/security-scan/report.js +156 -0
- package/dist/security-scan/run.js +448 -0
- package/dist/security-scan/tools.js +62 -0
- package/dist/security-scan/trabalhador.js +74 -0
- package/dist/security-scan/types.js +15 -0
- package/dist/session-events.js +26 -5
- package/dist/session-watcher-claude.js +81 -20
- package/dist/session-watcher.js +340 -42
- package/dist/sessoes-contas.js +10 -1
- package/dist/sessoes-inventario.js +1 -1
- package/dist/sessoes.js +25 -23
- package/dist/setup.js +59 -58
- package/dist/ship-publicar.js +971 -0
- package/dist/ship.js +243 -97
- package/dist/steal.js +77 -0
- package/dist/superficie.js +14 -11
- package/dist/thread-close.js +12 -11
- package/dist/thread.js +274 -100
- package/dist/tokens.js +15 -11
- package/dist/trabalho-thread.js +297 -0
- package/dist/transporte-do-canal.js +189 -0
- package/dist/types.js +12 -1
- package/dist/util.js +13 -3
- package/dist/varredura-acoes.js +507 -0
- package/dist/verify.js +608 -76
- package/dist/vida-da-thread.js +254 -0
- package/dist/worktree-local.js +167 -0
- package/dist/worktree.js +99 -83
- package/dist/yaml.js +27 -8
- package/eval/casos/check-quality.json +77 -0
- package/eval/casos/security-auditor.json +148 -0
- package/eval/casos/security-remediation.json +161 -0
- package/eval/fixtures/security-scan/README.md +8 -0
- package/eval/fixtures/security-scan/go/.github/workflows/ci.yml +12 -0
- package/eval/fixtures/security-scan/go/Dockerfile +4 -0
- package/eval/fixtures/security-scan/go/README.md +4 -0
- package/eval/fixtures/security-scan/go/config.go +4 -0
- package/eval/fixtures/security-scan/go/go.mod +5 -0
- package/eval/fixtures/security-scan/go/go.sum +2 -0
- package/eval/fixtures/security-scan/go/main.go +31 -0
- package/eval/fixtures/security-scan/js/.github/workflows/ci.yml +12 -0
- package/eval/fixtures/security-scan/js/Dockerfile +3 -0
- package/eval/fixtures/security-scan/js/README.md +4 -0
- package/eval/fixtures/security-scan/js/package-lock.json +844 -0
- package/eval/fixtures/security-scan/js/package.json +10 -0
- package/eval/fixtures/security-scan/js/src/config.js +4 -0
- package/eval/fixtures/security-scan/js/src/server.js +17 -0
- package/eval/fixtures/security-scan/js/src/util.ts +4 -0
- package/eval/fixtures/security-scan/js/tsconfig.json +4 -0
- package/eval/fixtures/security-scan/python/.github/workflows/ci.yml +12 -0
- package/eval/fixtures/security-scan/python/Dockerfile +3 -0
- package/eval/fixtures/security-scan/python/README.md +4 -0
- package/eval/fixtures/security-scan/python/app/__init__.py +0 -0
- package/eval/fixtures/security-scan/python/app/config.py +2 -0
- package/eval/fixtures/security-scan/python/app/main.py +19 -0
- package/eval/fixtures/security-scan/python/requirements.txt +1 -0
- package/package.json +9 -4
- package/references/security-checklist.md +3 -3
- package/schemas/code-artifact-graph.v1.schema.json +2 -1
- package/skills/README.md +1 -0
- package/skills/core/orkastery-bootstrap/SKILL.md +2 -2
- package/skills/phases/check-quality/SKILL.md +16 -0
- package/skills/phases/go-implementation/SKILL.md +6 -0
- package/skills/phases/security-remediation/SKILL.md +70 -0
- package/skills/reviewers/security-auditor/SKILL.md +25 -0
package/dist/rede.js
CHANGED
|
@@ -33,9 +33,10 @@ var __importStar = (this && this.__importStar) || (function () {
|
|
|
33
33
|
};
|
|
34
34
|
})();
|
|
35
35
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
36
|
-
exports.RETRATO_PARADO_MS = exports.cachePronto = exports.MAXIMO_DE_ITENS = exports.refDaCasa = exports.PULSACAO_DA_REDE_MS = exports.PAINEL_DA_REDE = exports.DIR_DOS_RETRATOS = exports.BRANCH_DA_REDE = exports.CONTRATO_DO_RETRATO = void 0;
|
|
36
|
+
exports.RETRATO_PARADO_MS = exports.cachePronto = exports.MAXIMO_DE_ITENS = exports.NIVEL_MINIMO_NO_GRUPO = exports.refDaCasa = exports.PULSACAO_DA_REDE_MS = exports.PAINEL_DA_REDE = exports.DIR_DOS_RETRATOS = exports.BRANCH_DA_REDE = exports.CONTRATO_DO_RETRATO = void 0;
|
|
37
37
|
exports.nomeSeguro = nomeSeguro;
|
|
38
38
|
exports.arquivoDoRetrato = arquivoDoRetrato;
|
|
39
|
+
exports.separarRepositorio = separarRepositorio;
|
|
39
40
|
exports.resolverCasa = resolverCasa;
|
|
40
41
|
exports.hostnameSeguro = hostnameSeguro;
|
|
41
42
|
exports.retratoDaMaquina = retratoDaMaquina;
|
|
@@ -94,6 +95,7 @@ const rede_adesao_1 = require("./rede-adesao");
|
|
|
94
95
|
const rede_forja_1 = require("./rede-forja");
|
|
95
96
|
const rede_projetos_1 = require("./rede-projetos");
|
|
96
97
|
const versao_1 = require("./versao");
|
|
98
|
+
const locale_1 = require("./locale");
|
|
97
99
|
exports.CONTRATO_DO_RETRATO = 'ork.rede-maquina/v1';
|
|
98
100
|
exports.BRANCH_DA_REDE = 'main';
|
|
99
101
|
exports.DIR_DOS_RETRATOS = 'maquinas';
|
|
@@ -110,6 +112,8 @@ const BINARIO_DO_HOST = { 'claude-code': 'claude', codex: 'codex', hermes: 'herm
|
|
|
110
112
|
const VERSAO_ESTRITA = /^\d+\.\d+(?:\.\d+)?(?:[-+][0-9A-Za-z.]{1,20})?$/;
|
|
111
113
|
const refDaCasa = (c) => `${c.host}/${c.dono}/${c.repositorio}`;
|
|
112
114
|
exports.refDaCasa = refDaCasa;
|
|
115
|
+
/** O nivel minimo da pessoa no grupo para a casa da rede morar nele (GitLab: Maintainer). */
|
|
116
|
+
exports.NIVEL_MINIMO_NO_GRUPO = 40;
|
|
113
117
|
/**
|
|
114
118
|
* O nome da maquina no que vai a forja: so o que o git e a forja aceitam sem surpresa. E o mesmo no
|
|
115
119
|
* arquivo, no campo `maquina` do retrato, na trava e nos commits (S2 da revisao 2: o leitor recusava o
|
|
@@ -125,6 +129,11 @@ function nomeSeguro(maquina) {
|
|
|
125
129
|
function arquivoDoRetrato(maquina) {
|
|
126
130
|
return `${exports.DIR_DOS_RETRATOS}/${nomeSeguro(maquina)}.json`;
|
|
127
131
|
}
|
|
132
|
+
/** `--repositorio`: dono e nome pelo ULTIMO `/`, para o subgrupo do GitLab (`grupo/sub/casa`) nao ser truncado. */
|
|
133
|
+
function separarRepositorio(texto) {
|
|
134
|
+
const corte = texto?.lastIndexOf('/') ?? -1;
|
|
135
|
+
return texto && corte > 0 ? [texto.slice(0, corte), texto.slice(corte + 1)] : [null, texto ?? null];
|
|
136
|
+
}
|
|
128
137
|
/**
|
|
129
138
|
* A casa: a opcao do comando, senao a adesao gravada, senao o login da primeira forja com login.
|
|
130
139
|
* Nunca lanca: sem forja ou sem login, devolve o motivo tipado.
|
|
@@ -134,21 +143,21 @@ function resolverCasa(opcoes = {}) {
|
|
|
134
143
|
const forjas = (0, rede_forja_1.forjasDaMaquina)(amb);
|
|
135
144
|
const identidades = opcoes.identidades ?? forjas.map((f) => f.identidade());
|
|
136
145
|
const config = (0, rede_adesao_1.lerConfigDaRede)();
|
|
137
|
-
const [donoPedido, nomePedido] =
|
|
146
|
+
const [donoPedido, nomePedido] = separarRepositorio(opcoes.repositorio);
|
|
138
147
|
// B3: `--repositorio` sozinho troca so o repositorio; a forja gravada continua valendo.
|
|
139
148
|
const nomeDaForja = opcoes.forja ?? config?.forja ?? null;
|
|
140
149
|
if (!opcoes.forja && !opcoes.repositorio && config?.forja && config.dono && config.repositorio && config.host) {
|
|
141
150
|
// B9: a forja da casa e a do host gravado (GitLab proprio), nao a do ambiente de quem chamou.
|
|
142
151
|
const forja = (0, rede_forja_1.forjaPorNome)(config.forja, amb, config.host);
|
|
143
152
|
return { casa: { forja: config.forja, host: config.host, dono: config.dono, repositorio: config.repositorio, origem: 'rede.json' },
|
|
144
|
-
forja, identidades, motivo: forja ? null : { tipo: 'forja.ausente', detalhe:
|
|
153
|
+
forja, identidades, motivo: forja ? null : { tipo: 'forja.ausente', detalhe: (0, locale_1.textoDoCatalogo)((m) => m.network.cliAusente(config.forja)) } };
|
|
145
154
|
}
|
|
146
155
|
// A forja gravada vale com o host gravado (GitLab proprio), mesmo quando so o repositorio muda.
|
|
147
156
|
const daCasaGravada = nomeDaForja && config?.forja === nomeDaForja && config.host ? (0, rede_forja_1.forjaPorNome)(nomeDaForja, amb, config.host) : null;
|
|
148
157
|
const candidatas = daCasaGravada ? [daCasaGravada] : nomeDaForja ? forjas.filter((f) => f.nome === nomeDaForja) : forjas;
|
|
149
158
|
if (candidatas.length === 0) {
|
|
150
159
|
return { casa: null, forja: null, identidades, motivo: { tipo: 'forja.ausente',
|
|
151
|
-
detalhe:
|
|
160
|
+
detalhe: (0, locale_1.textoDoCatalogo)((m) => nomeDaForja ? m.network.cliAusente(nomeDaForja) : m.network.nenhumaCli) } };
|
|
152
161
|
}
|
|
153
162
|
const falhas = [];
|
|
154
163
|
for (const forja of candidatas) {
|
|
@@ -166,11 +175,13 @@ function resolverCasa(opcoes = {}) {
|
|
|
166
175
|
// Suspeitas da revisao de 03/10: prazo, erro da forja ou falta de rede no `gh api user` nao e falta de
|
|
167
176
|
// login; mandar a pessoa ao `gh auth login` esconderia o motivo de verdade.
|
|
168
177
|
if (falhas.length) {
|
|
178
|
+
// RM-061 (F3b): o montador de cada falha e guardado agora; o detalhe pode virar erro remontado depois.
|
|
179
|
+
const montarFalhas = falhas.map(locale_1.montadorDe);
|
|
169
180
|
return { casa: null, forja: null, identidades, motivo: { tipo: 'rede.sem-leitura',
|
|
170
|
-
detalhe:
|
|
181
|
+
detalhe: (0, locale_1.textoDoCatalogo)((m) => m.network.loginNaoLido(montarFalhas.map((f) => f(m)).join('; '))) } };
|
|
171
182
|
}
|
|
172
183
|
return { casa: null, forja: null, identidades, motivo: { tipo: 'forja.sem-login',
|
|
173
|
-
detalhe:
|
|
184
|
+
detalhe: (0, locale_1.textoDoCatalogo)((m) => m.network.semLogin(candidatas)) } };
|
|
174
185
|
}
|
|
175
186
|
function versaoDoAdaptador(host, home) {
|
|
176
187
|
const recibo = (0, hosts_1.lerRecibo)(path.join(home, hosts_1.HOSTS[host].destinoPadrao, hosts_1.HOSTS[host].subdir));
|
|
@@ -294,12 +305,12 @@ const CAMPOS = {
|
|
|
294
305
|
};
|
|
295
306
|
function exigirSoCampos(onde, v, permitidos) {
|
|
296
307
|
if (!v || typeof v !== 'object' || Array.isArray(v))
|
|
297
|
-
throw new
|
|
308
|
+
throw new locale_1.ErroDoCatalogo((m) => m.network.foraDoContrato(onde));
|
|
298
309
|
for (const [k, x] of Object.entries(v)) {
|
|
299
310
|
if (!permitidos.includes(k))
|
|
300
|
-
throw new
|
|
311
|
+
throw new locale_1.ErroDoCatalogo((m) => m.network.campoForaDaLista(`${onde}.${k}`));
|
|
301
312
|
if (x !== null && typeof x === 'string' && x.length > 1024)
|
|
302
|
-
throw new
|
|
313
|
+
throw new locale_1.ErroDoCatalogo((m) => m.network.campoLongo(`${onde}.${k}`));
|
|
303
314
|
}
|
|
304
315
|
}
|
|
305
316
|
/**
|
|
@@ -310,15 +321,15 @@ function exigirRetratoSeguro(r) {
|
|
|
310
321
|
exigirSoCampos('retrato', r, CAMPOS.retrato);
|
|
311
322
|
for (const lista of ['forjas', 'runtimes', 'hosts', 'projetos']) {
|
|
312
323
|
if (!Array.isArray(r[lista]))
|
|
313
|
-
throw new
|
|
324
|
+
throw new locale_1.ErroDoCatalogo((m) => m.network.foraDoContrato(lista));
|
|
314
325
|
r[lista].forEach((item, i) => exigirSoCampos(`${lista}[${i}]`, item, CAMPOS[lista]));
|
|
315
326
|
}
|
|
316
327
|
// S2 da revisao 2: o que o escritor publica, o leitor aceita; senao, ninguem ve esta maquina.
|
|
317
328
|
if (!normalizarRetrato(r))
|
|
318
|
-
throw new
|
|
329
|
+
throw new locale_1.ErroDoCatalogo((m) => m.network.contratoDoRetrato);
|
|
319
330
|
const achado = segredoNoRetrato(r);
|
|
320
331
|
if (achado)
|
|
321
|
-
throw new
|
|
332
|
+
throw new locale_1.ErroDoCatalogo((m) => m.network.segredoNoRetrato(achado.padrao, achado.onde));
|
|
322
333
|
}
|
|
323
334
|
/** O primeiro valor do retrato com cara de segredo: o padrao e o campo, nunca o valor. */
|
|
324
335
|
function segredoNoRetrato(r) {
|
|
@@ -351,7 +362,8 @@ function exigirSoOProprioRetrato(maquina, mudancas) {
|
|
|
351
362
|
const proprio = arquivoDoRetrato(maquina);
|
|
352
363
|
for (const m of mudancas) {
|
|
353
364
|
if (m.caminho !== proprio && m.caminho !== exports.PAINEL_DA_REDE) {
|
|
354
|
-
|
|
365
|
+
const caminho = m.caminho;
|
|
366
|
+
throw new locale_1.ErroDoCatalogo((t) => t.network.retratoAlheio(maquina, caminho, proprio));
|
|
355
367
|
}
|
|
356
368
|
}
|
|
357
369
|
}
|
|
@@ -440,7 +452,8 @@ function lerRetratos(cache, ponta) {
|
|
|
440
452
|
for (const arquivo of arquivos) {
|
|
441
453
|
const visivel = JSON.stringify(arquivo).slice(1, -1).slice(0, 120);
|
|
442
454
|
if (!/^maquinas\/[A-Za-z0-9._-]{1,64}\.json$/.test(arquivo)) {
|
|
443
|
-
|
|
455
|
+
// RM-061 (F3b, GO-FIX 1): o motivo nasce pelo catalogo, e a lacuna do status o remonta.
|
|
456
|
+
invalidos.push({ arquivo: visivel, motivo: (0, locale_1.textoDoCatalogo)((m) => m.network.retratoForaDoPadrao) });
|
|
444
457
|
continue;
|
|
445
458
|
}
|
|
446
459
|
let bruto;
|
|
@@ -448,12 +461,12 @@ function lerRetratos(cache, ponta) {
|
|
|
448
461
|
bruto = JSON.parse((0, branch_de_estado_1.exigirGit)(cache, ['show', `${ponta}:${arquivo}`], PREFIXO));
|
|
449
462
|
}
|
|
450
463
|
catch {
|
|
451
|
-
invalidos.push({ arquivo, motivo:
|
|
464
|
+
invalidos.push({ arquivo, motivo: (0, locale_1.textoDoCatalogo)((m) => m.network.retratoIlegivel) });
|
|
452
465
|
continue;
|
|
453
466
|
}
|
|
454
467
|
const retrato = normalizarRetrato(bruto);
|
|
455
468
|
if (!retrato) {
|
|
456
|
-
invalidos.push({ arquivo, motivo:
|
|
469
|
+
invalidos.push({ arquivo, motivo: (0, locale_1.textoDoCatalogo)((m) => m.network.retratoForaDoContrato(exports.CONTRATO_DO_RETRATO)) });
|
|
457
470
|
continue;
|
|
458
471
|
}
|
|
459
472
|
let esperado = null;
|
|
@@ -461,8 +474,9 @@ function lerRetratos(cache, ponta) {
|
|
|
461
474
|
esperado = arquivoDoRetrato(retrato.maquina);
|
|
462
475
|
}
|
|
463
476
|
catch { /* nome impossivel */ }
|
|
477
|
+
const diz = retrato.maquina;
|
|
464
478
|
if (esperado !== arquivo) {
|
|
465
|
-
invalidos.push({ arquivo, motivo:
|
|
479
|
+
invalidos.push({ arquivo, motivo: (0, locale_1.textoDoCatalogo)((m) => m.network.retratoDeOutraMaquina(diz)) });
|
|
466
480
|
continue;
|
|
467
481
|
}
|
|
468
482
|
// V9 da revisao 4: a mesma varredura do escritor; o que ela pega nao vai ao status nem ao REDE.md.
|
|
@@ -472,12 +486,14 @@ function lerRetratos(cache, ponta) {
|
|
|
472
486
|
const projetos = retrato.projetos.filter((_x, i) => !achados[i]);
|
|
473
487
|
const primeiro = achados.find((x) => x !== null);
|
|
474
488
|
if (primeiro) {
|
|
475
|
-
|
|
489
|
+
const fora = retrato.projetos.length - projetos.length, padrao = primeiro.padrao;
|
|
490
|
+
invalidos.push({ arquivo, motivo: (0, locale_1.textoDoCatalogo)((m) => m.network.retratoProjetosOmitidos(fora, padrao)) });
|
|
476
491
|
}
|
|
477
492
|
const lido = { ...retrato, projetos };
|
|
478
493
|
const segredo = segredoNoRetrato(lido);
|
|
479
494
|
if (segredo) {
|
|
480
|
-
|
|
495
|
+
const { padrao, onde } = segredo;
|
|
496
|
+
invalidos.push({ arquivo, motivo: (0, locale_1.textoDoCatalogo)((m) => m.network.retratoComSegredo(padrao, onde)) });
|
|
481
497
|
continue;
|
|
482
498
|
}
|
|
483
499
|
retratos.push(lido);
|
|
@@ -489,7 +505,9 @@ function lerRetratos(cache, ponta) {
|
|
|
489
505
|
// O cache da casa e o git sem prompt.
|
|
490
506
|
// ---------------------------------------------------------------------------
|
|
491
507
|
function dirDoCache(casa) {
|
|
492
|
-
|
|
508
|
+
const nome = `${casa.forja}-${casa.host}-${casa.dono}-${casa.repositorio}`.replace(/[^A-Za-z0-9._-]+/g, '-');
|
|
509
|
+
// O dono com subgrupo (`time/sub`) leva um resumo curto, para nao cair na pasta do dono `time-sub`; sem subgrupo, o nome de sempre.
|
|
510
|
+
return path.join((0, rede_adesao_1.pastaDaRede)(), casa.dono.includes('/') ? `${nome}-${(0, node_crypto_1.createHash)('sha256').update(casa.dono).digest('hex').slice(0, 8)}` : nome);
|
|
493
511
|
}
|
|
494
512
|
/** O cache ja foi criado? */
|
|
495
513
|
const cachePronto = (dir) => fs.existsSync(path.join(dir, '.git', 'HEAD'));
|
|
@@ -577,26 +595,45 @@ function gravarMarca(marca) {
|
|
|
577
595
|
/** A casa com o repositorio conferido: existe e e privado (D3). `criar` so no `ork network entrar`. */
|
|
578
596
|
function casaConferida(opcoes) {
|
|
579
597
|
const r = resolverCasa(opcoes);
|
|
580
|
-
if (!r.casa || !r.forja)
|
|
581
|
-
|
|
598
|
+
if (!r.casa || !r.forja) {
|
|
599
|
+
const detalhe = r.motivo ? (0, locale_1.montadorDe)(r.motivo.detalhe) : null;
|
|
600
|
+
throw new locale_1.ErroDoCatalogo((m) => m.network.semForja(detalhe === null ? null : detalhe(m)));
|
|
601
|
+
}
|
|
602
|
+
const semSuporte = r.forja.nome === 'gitlab' ? (0, rede_forja_1.gitlabSemSuporteNaRede)(opcoes.amb ?? {}, r.forja.host) : null;
|
|
603
|
+
if (semSuporte)
|
|
604
|
+
throw new locale_1.ErroDoCatalogo((m) => m.network.gitlabNaoSuportado(semSuporte));
|
|
582
605
|
let repo = r.forja.repositorio(r.casa.dono, r.casa.repositorio);
|
|
583
606
|
let criado = false;
|
|
584
607
|
if (!repo.existe) {
|
|
608
|
+
const ref = (0, exports.refDaCasa)(r.casa);
|
|
585
609
|
if (!opcoes.criar)
|
|
586
|
-
throw new
|
|
610
|
+
throw new locale_1.ErroDoCatalogo((m) => m.network.semRepositorio(ref));
|
|
587
611
|
const login = (r.identidades.find((i) => i.forja === r.forja.nome && i.host === r.forja.host) ?? r.forja.identidade()).usuario;
|
|
612
|
+
let namespaceId;
|
|
588
613
|
if (r.casa.dono !== login) {
|
|
589
|
-
|
|
614
|
+
// Outro dono so vale quando e um grupo em que a pessoa e Maintainer ou acima; forja sem a capacidade recusa como antes.
|
|
615
|
+
const dono = r.forja.donoDaRede?.(r.casa.dono) ?? null;
|
|
616
|
+
if (dono && !dono.ok && dono.erro.codigo !== 'forja.nao-achei') {
|
|
617
|
+
const erro = dono.erro, cli = r.forja.cli, tipo = r.forja.nome, rota = `namespaces/${r.casa.dono}`;
|
|
618
|
+
throw new locale_1.ErroDoCatalogo((m) => m.network.apiFalhou(cli, rota, m.forja.motivo(erro, tipo)));
|
|
619
|
+
}
|
|
620
|
+
if (!dono || !dono.ok || dono.valor.tipo !== 'grupo')
|
|
621
|
+
throw new locale_1.ErroDoCatalogo((m) => m.network.repositorioAlheio(ref, login));
|
|
622
|
+
const nivel = dono.valor.nivel ?? 0, grupo = dono.valor.caminho;
|
|
623
|
+
if (nivel < exports.NIVEL_MINIMO_NO_GRUPO)
|
|
624
|
+
throw new locale_1.ErroDoCatalogo((m) => m.network.grupoSemNivel(ref, grupo, login, nivel));
|
|
625
|
+
namespaceId = dono.valor.namespaceId;
|
|
590
626
|
}
|
|
591
|
-
repo = r.forja.criarPrivado(r.casa.repositorio, DESCRICAO);
|
|
627
|
+
repo = r.forja.criarPrivado(r.casa.repositorio, DESCRICAO, r.casa.dono, namespaceId);
|
|
592
628
|
criado = true;
|
|
593
629
|
}
|
|
630
|
+
const refDaConferida = (0, exports.refDaCasa)(r.casa), cli = r.forja.cli;
|
|
594
631
|
if (repo.privado !== true)
|
|
595
|
-
throw new
|
|
632
|
+
throw new locale_1.ErroDoCatalogo((m) => m.network.repositorioPublico(refDaConferida));
|
|
596
633
|
if (!repo.url)
|
|
597
|
-
throw new
|
|
634
|
+
throw new locale_1.ErroDoCatalogo((m) => m.network.semUrl(cli, refDaConferida));
|
|
598
635
|
if (!urlDaCasaAceita(repo.url)) {
|
|
599
|
-
throw new
|
|
636
|
+
throw new locale_1.ErroDoCatalogo((m) => m.network.semHttps(cli, refDaConferida));
|
|
600
637
|
}
|
|
601
638
|
return { casa: r.casa, forja: r.forja, url: repo.url, criado, identidades: r.identidades };
|
|
602
639
|
}
|
|
@@ -735,13 +772,13 @@ function gravarNaCasa(conferida, retrato, descartados, opcoes) {
|
|
|
735
772
|
return { acao: 'ocupado', maquina, casa: (0, exports.refDaCasa)(casa), commit: null, tentativas: 0, descartados };
|
|
736
773
|
try {
|
|
737
774
|
if (opcoes.exigirAdesao && !(0, rede_adesao_1.adesaoDaRede)().membro)
|
|
738
|
-
throw new
|
|
775
|
+
throw new locale_1.ErroDoCatalogo((m) => m.network.saiuDaRede);
|
|
739
776
|
const cache = prepararCache(casa, url, forja.helperDeCredencial(), maquina);
|
|
740
777
|
const assinatura = assinaturaDoRetrato(retrato);
|
|
741
778
|
for (let tentativa = 1; tentativa <= TENTATIVAS; tentativa++) {
|
|
742
779
|
const { ponta, atualizado } = (0, rede_forja_1.comGitIsolado)(() => (0, branch_de_estado_1.buscarBranch)(cache, 'origin', exports.BRANCH_DA_REDE, PREFIXO, 30000));
|
|
743
780
|
if (!atualizado)
|
|
744
|
-
throw new
|
|
781
|
+
throw new locale_1.ErroDoCatalogo((m) => m.network.semLeitura((0, exports.refDaCasa)(casa)));
|
|
745
782
|
const { retratos } = retratosDaPonta(cache, ponta);
|
|
746
783
|
const atual = retratos.find((r) => r.maquina === maquina);
|
|
747
784
|
// U2: o arquivo que esta versao nao le ainda pode ser de outra instalacao (contrato mais novo).
|
|
@@ -749,12 +786,9 @@ function gravarNaCasa(conferida, retrato, descartados, opcoes) {
|
|
|
749
786
|
const alheio = !!idDoOutro && idDoOutro !== retrato.id;
|
|
750
787
|
if (alheio && !opcoes.tomarNome) {
|
|
751
788
|
// U7 da revisao 3: o hostname igual sugere a propria maquina, mas duas VMs podem se chamar `ubuntu`.
|
|
752
|
-
const
|
|
753
|
-
|
|
754
|
-
|
|
755
|
-
: '; escolha outro nome com ork network entrar --maquina NOME, ou tome este com --forcar';
|
|
756
|
-
const quem = atual ? ` (hostname ${atual.hostname}, batida ${(0, horario_1.formatarDataHora)(atual.publicadoEm)})` : ' (num retrato que esta versao nao le)';
|
|
757
|
-
throw new Error(`rede.nome-em-uso: outra instalacao ja publica como "${maquina}"${quem}${dica}`);
|
|
789
|
+
const mesmoHostname = atual?.hostname === hostnameSeguro();
|
|
790
|
+
const outro = atual ? { hostname: atual.hostname, publicadoEm: atual.publicadoEm } : null;
|
|
791
|
+
throw new locale_1.ErroDoCatalogo((m) => m.network.nomeEmUso(maquina, outro ? m.network.quemHostname(String(outro.hostname), (0, horario_1.formatarDataHora)(outro.publicadoEm)) : m.network.quemIlegivel, mesmoHostname ? m.network.dicaMesmoHostname : m.network.dicaOutroNome));
|
|
758
792
|
}
|
|
759
793
|
const mudancas = [
|
|
760
794
|
{ caminho: arquivoDoRetrato(maquina), conteudo: JSON.stringify(retrato, null, 2) + '\n' },
|
|
@@ -769,7 +803,7 @@ function gravarNaCasa(conferida, retrato, descartados, opcoes) {
|
|
|
769
803
|
return { acao: 'publicou', maquina, casa: (0, exports.refDaCasa)(casa), commit, tentativas: tentativa, descartados, ...(alheio ? { tomouNome: true } : {}) };
|
|
770
804
|
}
|
|
771
805
|
}
|
|
772
|
-
throw new
|
|
806
|
+
throw new locale_1.ErroDoCatalogo((m) => m.network.concorrencia(TENTATIVAS));
|
|
773
807
|
}
|
|
774
808
|
finally {
|
|
775
809
|
trava.liberar();
|
|
@@ -783,7 +817,7 @@ function gravarNaCasa(conferida, retrato, descartados, opcoes) {
|
|
|
783
817
|
function publicarRede(opcoes = {}) {
|
|
784
818
|
const adesao = (0, rede_adesao_1.adesaoDaRede)();
|
|
785
819
|
if (!adesao.membro)
|
|
786
|
-
throw new
|
|
820
|
+
throw new locale_1.ErroDoCatalogo((m) => m.network.foraDaRede);
|
|
787
821
|
const amb = opcoes.amb ?? {};
|
|
788
822
|
const maquina = nomeSeguro((0, maquina_1.nomeDaMaquina)(opcoes.maquina));
|
|
789
823
|
const id = (0, rede_adesao_1.idDaMaquina)();
|
|
@@ -833,7 +867,7 @@ function entrarNaRede(opcoes = {}) {
|
|
|
833
867
|
const explicito = (opcoes.maquina ?? '').trim();
|
|
834
868
|
const maquina = explicito || nomeSeguro((0, maquina_1.lerConfigDaMaquina)()?.nome || (0, maquina_1.nomeDaMaquina)());
|
|
835
869
|
if (!NOME_DE_MAQUINA.test(maquina)) {
|
|
836
|
-
throw new
|
|
870
|
+
throw new locale_1.ErroDoCatalogo((m) => m.network.nomeInvalido(maquina));
|
|
837
871
|
}
|
|
838
872
|
const amb = opcoes.amb ?? {};
|
|
839
873
|
const lidas = opcoes.identidades ?? (0, rede_forja_1.forjasDaMaquina)(amb).map((f) => f.identidade());
|
|
@@ -847,7 +881,8 @@ function entrarNaRede(opcoes = {}) {
|
|
|
847
881
|
exigirRetratoSeguro(retrato);
|
|
848
882
|
const publicacao = gravarNaCasa(conferida, retrato, descartados, { exigirAdesao: false, tomarNome: opcoes.tomarNome });
|
|
849
883
|
if (publicacao.acao === 'ocupado') {
|
|
850
|
-
|
|
884
|
+
const trava = TRAVA();
|
|
885
|
+
throw new locale_1.ErroDoCatalogo((m) => m.network.ocupadoAoEntrar(trava));
|
|
851
886
|
}
|
|
852
887
|
(0, maquina_1.gravarConfigDaMaquina)({ nome: maquina });
|
|
853
888
|
const { casa } = conferida;
|
|
@@ -875,11 +910,14 @@ function sairDaRede(opcoes = {}) {
|
|
|
875
910
|
if (!repo.existe || !repo.url)
|
|
876
911
|
return { maquina, casa: (0, exports.refDaCasa)(r.casa), commit: null, alheio: false };
|
|
877
912
|
if (!urlDaCasaAceita(repo.url)) {
|
|
878
|
-
|
|
913
|
+
const cli = r.forja.cli, ref = (0, exports.refDaCasa)(r.casa);
|
|
914
|
+
throw new locale_1.ErroDoCatalogo((m) => m.network.semHttpsAoSair(cli, ref));
|
|
879
915
|
}
|
|
880
916
|
const trava = travarCasa(30000);
|
|
881
|
-
if (!trava.ok)
|
|
882
|
-
|
|
917
|
+
if (!trava.ok) {
|
|
918
|
+
const qual = TRAVA();
|
|
919
|
+
throw new locale_1.ErroDoCatalogo((m) => m.network.ocupadoAoSair(qual));
|
|
920
|
+
}
|
|
883
921
|
try {
|
|
884
922
|
// Suspeitas da revisao de 03/10: a publicacao que ja segurava a trava quando o `sair` comecou grava
|
|
885
923
|
// a marca ao terminar o push. Sob a trava ela ja terminou, e a proxima reconfere a adesao e recusa
|
|
@@ -893,8 +931,10 @@ function sairDaRede(opcoes = {}) {
|
|
|
893
931
|
const id = (0, rede_adesao_1.idDaMaquina)();
|
|
894
932
|
for (let tentativa = 1; tentativa <= TENTATIVAS; tentativa++) {
|
|
895
933
|
const { ponta, atualizado } = (0, rede_forja_1.comGitIsolado)(() => (0, branch_de_estado_1.buscarBranch)(cache, 'origin', exports.BRANCH_DA_REDE, PREFIXO, 30000));
|
|
896
|
-
if (!atualizado)
|
|
897
|
-
|
|
934
|
+
if (!atualizado) {
|
|
935
|
+
const ref = (0, exports.refDaCasa)(r.casa);
|
|
936
|
+
throw new locale_1.ErroDoCatalogo((m) => m.network.semLeituraAoSair(ref));
|
|
937
|
+
}
|
|
898
938
|
const { retratos, invalidos } = retratosDaPonta(cache, ponta);
|
|
899
939
|
const atual = retratos.find((x) => x.maquina === maquina);
|
|
900
940
|
// S9 da revisao 2: o arquivo com o nome desta maquina sai tambem quando esta invalido; so o de
|
|
@@ -918,7 +958,7 @@ function sairDaRede(opcoes = {}) {
|
|
|
918
958
|
if (commit)
|
|
919
959
|
return { maquina, casa: (0, exports.refDaCasa)(r.casa), commit, alheio: false };
|
|
920
960
|
}
|
|
921
|
-
throw new
|
|
961
|
+
throw new locale_1.ErroDoCatalogo((m) => m.network.concorrencia(TENTATIVAS));
|
|
922
962
|
}
|
|
923
963
|
finally {
|
|
924
964
|
trava.liberar();
|
|
@@ -0,0 +1,101 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
|
|
3
|
+
if (k2 === undefined) k2 = k;
|
|
4
|
+
var desc = Object.getOwnPropertyDescriptor(m, k);
|
|
5
|
+
if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) {
|
|
6
|
+
desc = { enumerable: true, get: function() { return m[k]; } };
|
|
7
|
+
}
|
|
8
|
+
Object.defineProperty(o, k2, desc);
|
|
9
|
+
}) : (function(o, m, k, k2) {
|
|
10
|
+
if (k2 === undefined) k2 = k;
|
|
11
|
+
o[k2] = m[k];
|
|
12
|
+
}));
|
|
13
|
+
var __setModuleDefault = (this && this.__setModuleDefault) || (Object.create ? (function(o, v) {
|
|
14
|
+
Object.defineProperty(o, "default", { enumerable: true, value: v });
|
|
15
|
+
}) : function(o, v) {
|
|
16
|
+
o["default"] = v;
|
|
17
|
+
});
|
|
18
|
+
var __importStar = (this && this.__importStar) || (function () {
|
|
19
|
+
var ownKeys = function(o) {
|
|
20
|
+
ownKeys = Object.getOwnPropertyNames || function (o) {
|
|
21
|
+
var ar = [];
|
|
22
|
+
for (var k in o) if (Object.prototype.hasOwnProperty.call(o, k)) ar[ar.length] = k;
|
|
23
|
+
return ar;
|
|
24
|
+
};
|
|
25
|
+
return ownKeys(o);
|
|
26
|
+
};
|
|
27
|
+
return function (mod) {
|
|
28
|
+
if (mod && mod.__esModule) return mod;
|
|
29
|
+
var result = {};
|
|
30
|
+
if (mod != null) for (var k = ownKeys(mod), i = 0; i < k.length; i++) if (k[i] !== "default") __createBinding(result, mod, k[i]);
|
|
31
|
+
__setModuleDefault(result, mod);
|
|
32
|
+
return result;
|
|
33
|
+
};
|
|
34
|
+
})();
|
|
35
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
36
|
+
exports.derivarPontoDeParada = derivarPontoDeParada;
|
|
37
|
+
exports.prepararPromptDeRetomada = prepararPromptDeRetomada;
|
|
38
|
+
/** RM-064 T3: checkpoint determinístico para continuar um bloco sem recomeçar GOAL/PLAN. */
|
|
39
|
+
const node_crypto_1 = require("node:crypto");
|
|
40
|
+
const fs = __importStar(require("node:fs"));
|
|
41
|
+
const path = __importStar(require("node:path"));
|
|
42
|
+
const claims_1 = require("./claims");
|
|
43
|
+
const ledger_1 = require("./ledger");
|
|
44
|
+
const procedencia_1 = require("./procedencia");
|
|
45
|
+
const thread_1 = require("./thread");
|
|
46
|
+
const trabalho_thread_1 = require("./trabalho-thread");
|
|
47
|
+
const util_1 = require("./util");
|
|
48
|
+
const hash = (texto) => (0, node_crypto_1.createHash)('sha256').update(texto, 'utf8').digest('hex');
|
|
49
|
+
const SHA = /^[a-f0-9]{40}$/;
|
|
50
|
+
function numero(e) {
|
|
51
|
+
return typeof e.rodada === 'number' && Number.isSafeInteger(e.rodada) && e.rodada > 0 ? e.rodada : null;
|
|
52
|
+
}
|
|
53
|
+
function derivarPontoDeParada(raiz, thread, fase, eventos = (0, ledger_1.lerLedger)((0, thread_1.dirThread)(raiz, thread.id))) {
|
|
54
|
+
const cwdBruto = (0, procedencia_1.diretorioDaThread)(raiz, thread);
|
|
55
|
+
const cwd = (0, procedencia_1.cwdLocalOuNulo)(raiz, thread.id, cwdBruto, 'thread');
|
|
56
|
+
const head = cwd ? (0, util_1.exec)('git', ['rev-parse', '--verify', 'HEAD^{commit}'], cwd, 30_000) : null;
|
|
57
|
+
const ultimoCommit = head?.ok && SHA.test(head.stdout.trim()) ? head.stdout.trim() : null;
|
|
58
|
+
const status = cwd ? (0, util_1.exec)('git', ['status', '--porcelain=v1', '--untracked-files=normal'], cwd, 30_000) : null;
|
|
59
|
+
const gitStatus = status?.ok ? status.stdout.split('\n').filter(Boolean).slice(0, 100) : ['git status indisponível'];
|
|
60
|
+
const claimsPendentes = (0, claims_1.lerClaims)(raiz, thread.id).filter((c) => !['verificado', 'retirada'].includes(c.estado)).map((c) => c.id);
|
|
61
|
+
const rodadaCheck = eventos.filter((e) => e.tipo === ledger_1.TIPOS_DE_EVENTO.verificacao || e.tipo === ledger_1.TIPOS_DE_EVENTO.reverifyConcluido).length;
|
|
62
|
+
const abertas = eventos.filter((e) => e.tipo === ledger_1.TIPOS_DE_EVENTO.fixAberto).map(numero).filter((n) => n !== null);
|
|
63
|
+
const fechadas = new Set(eventos.filter((e) => e.tipo === ledger_1.TIPOS_DE_EVENTO.reverifyConcluido).map(numero).filter((n) => n !== null));
|
|
64
|
+
const goFixEmCurso = abertas.filter((r) => !fechadas.has(r)).at(-1) ?? null;
|
|
65
|
+
const trabalho = (0, trabalho_thread_1.resumirTrabalhoDaThread)(raiz, thread.id);
|
|
66
|
+
return { fase, ultimoCommit, gitStatus, claimsPendentes, rodadaCheck, goFixEmCurso, trabalho };
|
|
67
|
+
}
|
|
68
|
+
function secao(p, originalSha) {
|
|
69
|
+
const status = p.gitStatus.length ? p.gitStatus.map((l) => ` ${l}`).join('\n') : ' (limpa)';
|
|
70
|
+
return `## Ponto de parada\n\n` +
|
|
71
|
+
`Esta sessão retoma uma interrupção por cota. Continue da fase \`${p.fase}\`; não repita GOAL nem PLAN.\n\n` +
|
|
72
|
+
`- Prompt original: \`${originalSha}\`\n` +
|
|
73
|
+
`- Fase: \`${p.fase}\`\n` +
|
|
74
|
+
`- Último commit: ${p.ultimoCommit ? `\`${p.ultimoCommit}\`` : '(indisponível)'}\n` +
|
|
75
|
+
`- Claims pendentes: ${p.claimsPendentes.length ? p.claimsPendentes.map((c) => `\`${c}\``).join(', ') : '(nenhuma)'}\n` +
|
|
76
|
+
`- Rodadas de CHECK observadas: ${p.rodadaCheck}\n` +
|
|
77
|
+
`- GO-FIX em curso: ${p.goFixEmCurso === null ? '(nenhum)' : `rodada ${p.goFixEmCurso}`}\n` +
|
|
78
|
+
`- Trabalho retomável: \`${p.trabalho.caminho}\`\n` +
|
|
79
|
+
`${(0, trabalho_thread_1.formatarResumoDoTrabalho)(p.trabalho)}\n` +
|
|
80
|
+
`- \`git status --porcelain\`:\n\n\`\`\`text\n${status}\n\`\`\`\n\n`;
|
|
81
|
+
}
|
|
82
|
+
/** O original é conferido pelo chamador; este escritor só cria o derivado e nunca o altera. */
|
|
83
|
+
function prepararPromptDeRetomada(raiz, thread, fase, original, gravar = true) {
|
|
84
|
+
const ponto = derivarPontoDeParada(raiz, thread, fase);
|
|
85
|
+
const prompt = `${secao(ponto, original.promptSha256)}${original.prompt}`;
|
|
86
|
+
const promptSha256 = hash(prompt);
|
|
87
|
+
const pasta = path.join((0, thread_1.dirThread)(raiz, thread.id), 'prompts');
|
|
88
|
+
const promptPath = path.join(pasta, `retomada-${fase.toLowerCase()}-${promptSha256.slice(0, 12)}.md`);
|
|
89
|
+
if (gravar) {
|
|
90
|
+
fs.mkdirSync(pasta, { recursive: true });
|
|
91
|
+
try {
|
|
92
|
+
fs.writeFileSync(promptPath, prompt, { flag: 'wx', mode: 0o600 });
|
|
93
|
+
}
|
|
94
|
+
catch (e) {
|
|
95
|
+
if (e.code !== 'EEXIST' || hash(fs.readFileSync(promptPath, 'utf8')) !== promptSha256)
|
|
96
|
+
throw e;
|
|
97
|
+
}
|
|
98
|
+
}
|
|
99
|
+
return { prompt, promptPath, promptSha256, promptOriginalPath: original.promptPath,
|
|
100
|
+
promptOriginalSha256: original.promptSha256, ponto };
|
|
101
|
+
}
|