@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/runtime-profiles.js
CHANGED
|
@@ -54,6 +54,9 @@ exports.prepararDiretorioDoPerfil = prepararDiretorioDoPerfil;
|
|
|
54
54
|
exports.adicionarPerfil = adicionarPerfil;
|
|
55
55
|
exports.desativarPerfil = desativarPerfil;
|
|
56
56
|
exports.reativarPerfil = reativarPerfil;
|
|
57
|
+
exports.expirarPerfisVencidos = expirarPerfisVencidos;
|
|
58
|
+
exports.classificarTipoDeLimite = classificarTipoDeLimite;
|
|
59
|
+
exports.tipoDeLimiteDoPerfil = tipoDeLimiteDoPerfil;
|
|
57
60
|
exports.marcarFalhaDePerfil = marcarFalhaDePerfil;
|
|
58
61
|
exports.registrarConferenciaInconclusiva = registrarConferenciaInconclusiva;
|
|
59
62
|
exports.registrarUsoDePerfil = registrarUsoDePerfil;
|
|
@@ -65,6 +68,7 @@ exports.aplicarContasCompartilhadas = aplicarContasCompartilhadas;
|
|
|
65
68
|
exports.lerPerfisComContas = lerPerfisComContas;
|
|
66
69
|
exports.perfisDoRuntime = perfisDoRuntime;
|
|
67
70
|
exports.perfilDisponivel = perfilDisponivel;
|
|
71
|
+
exports.perfisDisponiveis = perfisDisponiveis;
|
|
68
72
|
exports.politicaDeRotacao = politicaDeRotacao;
|
|
69
73
|
exports.proximoPerfilDisponivel = proximoPerfilDisponivel;
|
|
70
74
|
exports.proximoPerfilPorCarga = proximoPerfilPorCarga;
|
|
@@ -93,6 +97,7 @@ const path = __importStar(require("node:path"));
|
|
|
93
97
|
const node_crypto_1 = require("node:crypto");
|
|
94
98
|
const estado_thread_1 = require("./estado-thread");
|
|
95
99
|
const horario_1 = require("./horario");
|
|
100
|
+
const locale_1 = require("./locale");
|
|
96
101
|
exports.CONTRATO_PERFIS = 'ork.runtime-profiles/v1';
|
|
97
102
|
exports.ARQUIVO_PERFIS = 'runtime-profiles.json';
|
|
98
103
|
/** Runtimes homologados que aceitam perfil, e a variavel que cada um le. */
|
|
@@ -110,7 +115,7 @@ const LIMITE_DETALHE = 200;
|
|
|
110
115
|
const uid = () => {
|
|
111
116
|
const atual = process.getuid?.();
|
|
112
117
|
if (atual === undefined)
|
|
113
|
-
throw new
|
|
118
|
+
throw new locale_1.ErroDoCatalogo((m) => m.accounts.uidIndisponivel);
|
|
114
119
|
return atual;
|
|
115
120
|
};
|
|
116
121
|
function runtimeComPerfil(nome) {
|
|
@@ -120,12 +125,12 @@ function runtimeComPerfil(nome) {
|
|
|
120
125
|
function validarDiretorioDePerfil(dir) {
|
|
121
126
|
if (typeof dir !== 'string' || dir.length === 0 || dir.length > 1024 || /\p{Cc}/u.test(dir) ||
|
|
122
127
|
!path.isAbsolute(dir) || path.normalize(dir) !== dir || dir === '/' || dir.endsWith('/'))
|
|
123
|
-
throw new
|
|
128
|
+
throw new locale_1.ErroDoCatalogo((m) => m.accounts.diretorioNaoNormalizado);
|
|
124
129
|
return dir;
|
|
125
130
|
}
|
|
126
131
|
function validarIdDePerfil(id) {
|
|
127
132
|
if (typeof id !== 'string' || !ID_DE_PERFIL.test(id))
|
|
128
|
-
throw new
|
|
133
|
+
throw new locale_1.ErroDoCatalogo((m) => m.accounts.idInvalido);
|
|
129
134
|
return id;
|
|
130
135
|
}
|
|
131
136
|
/** Diretorio do perfil, pelo campo do seu runtime. */
|
|
@@ -136,15 +141,15 @@ function diretorioDoPerfil(p) {
|
|
|
136
141
|
/** Valida um perfil de despacho vindo do ledger, do thread.json ou do pedido da fila. */
|
|
137
142
|
function validarPerfilDeDespacho(v) {
|
|
138
143
|
if (!v || typeof v !== 'object' || Array.isArray(v))
|
|
139
|
-
throw new
|
|
144
|
+
throw new locale_1.ErroDoCatalogo((m) => m.accounts.despachoAusente);
|
|
140
145
|
const o = v;
|
|
141
146
|
const runtime = o.runtime;
|
|
142
147
|
if (typeof runtime !== 'string' || !runtimeComPerfil(runtime))
|
|
143
|
-
throw new
|
|
148
|
+
throw new locale_1.ErroDoCatalogo((m) => m.accounts.runtimeDesconhecido);
|
|
144
149
|
const campo = runtime === 'claude-bg' ? 'configDir' : 'codexHome';
|
|
145
150
|
const outro = runtime === 'claude-bg' ? 'codexHome' : 'configDir';
|
|
146
151
|
if (o[outro] !== undefined || Object.keys(o).some(k => !['id', 'runtime', campo].includes(k)))
|
|
147
|
-
throw new
|
|
152
|
+
throw new locale_1.ErroDoCatalogo((m) => m.accounts.despachoComCampo);
|
|
148
153
|
const id = validarIdDePerfil(o.id), dir = validarDiretorioDePerfil(o[campo]);
|
|
149
154
|
return runtime === 'claude-bg' ? { id, runtime, configDir: dir } : { id, runtime, codexHome: dir };
|
|
150
155
|
}
|
|
@@ -165,7 +170,7 @@ function diretorioEfetivo(runtime, perfil, env = process.env) {
|
|
|
165
170
|
if (!perfil)
|
|
166
171
|
return diretorioImplicito(runtime, env);
|
|
167
172
|
if (perfil.runtime !== runtime)
|
|
168
|
-
throw new
|
|
173
|
+
throw new locale_1.ErroDoCatalogo((m) => m.accounts.perfilDeOutroRuntime);
|
|
169
174
|
return diretorioDoPerfil(perfil);
|
|
170
175
|
}
|
|
171
176
|
/**
|
|
@@ -194,7 +199,7 @@ function perfilDoRegistro(eventos, sessao) {
|
|
|
194
199
|
const perfil = validarPerfilDeDespacho(bruto);
|
|
195
200
|
if (doSensor?.perfil !== undefined && doDespacho?.perfil !== undefined &&
|
|
196
201
|
JSON.stringify(validarPerfilDeDespacho(doDespacho.perfil)) !== JSON.stringify(perfil))
|
|
197
|
-
throw new
|
|
202
|
+
throw new locale_1.ErroDoCatalogo((m) => m.accounts.sensorDiverge);
|
|
198
203
|
return perfil;
|
|
199
204
|
}
|
|
200
205
|
// ---------------------------------------------------------------------------
|
|
@@ -210,7 +215,7 @@ function validarPasta(pasta) {
|
|
|
210
215
|
const st = fs.lstatSync(pasta);
|
|
211
216
|
if (!st.isDirectory() || st.isSymbolicLink() || st.uid !== uid() || (st.mode & 0o777) !== 0o700 ||
|
|
212
217
|
fs.realpathSync(pasta) !== pasta)
|
|
213
|
-
throw new
|
|
218
|
+
throw new locale_1.ErroDoCatalogo((m) => m.accounts.pastaPrivada);
|
|
214
219
|
return st;
|
|
215
220
|
}
|
|
216
221
|
function garantirPasta(raiz) {
|
|
@@ -218,7 +223,7 @@ function garantirPasta(raiz) {
|
|
|
218
223
|
const estado = path.dirname(pasta);
|
|
219
224
|
const stEstado = fs.lstatSync(estado);
|
|
220
225
|
if (!stEstado.isDirectory() || stEstado.isSymbolicLink() || fs.realpathSync(estado) !== estado)
|
|
221
|
-
throw new
|
|
226
|
+
throw new locale_1.ErroDoCatalogo((m) => m.accounts.diretorioDeEstado);
|
|
222
227
|
try {
|
|
223
228
|
fs.mkdirSync(pasta, { mode: 0o700 });
|
|
224
229
|
fs.chmodSync(pasta, 0o700);
|
|
@@ -234,26 +239,26 @@ function data(v, campo) {
|
|
|
234
239
|
if (v === null)
|
|
235
240
|
return null;
|
|
236
241
|
if (typeof v !== 'string' || !Number.isFinite(Date.parse(v)))
|
|
237
|
-
throw new
|
|
242
|
+
throw new locale_1.ErroDoCatalogo((m) => m.accounts.dataInvalida(campo));
|
|
238
243
|
return v;
|
|
239
244
|
}
|
|
240
245
|
function validarPerfil(v) {
|
|
241
246
|
if (!v || typeof v !== 'object' || Array.isArray(v))
|
|
242
|
-
throw new
|
|
247
|
+
throw new locale_1.ErroDoCatalogo((m) => m.accounts.perfilInvalido);
|
|
243
248
|
const o = v;
|
|
244
249
|
const despacho = validarPerfilDeDespacho({ id: o.id, runtime: o.runtime,
|
|
245
250
|
...(o.configDir !== undefined ? { configDir: o.configDir } : {}), ...(o.codexHome !== undefined ? { codexHome: o.codexHome } : {}) });
|
|
246
251
|
const permitidos = ['id', 'runtime', 'configDir', 'codexHome', 'estado', 'esgotadoAte', 'ultimaFalha', 'ultimoUso', 'criadoEm'];
|
|
247
252
|
if (Object.keys(o).some(k => !permitidos.includes(k)))
|
|
248
|
-
throw new
|
|
253
|
+
throw new locale_1.ErroDoCatalogo((m) => m.accounts.campoInesperado);
|
|
249
254
|
if (!exports.ESTADOS_DE_PERFIL.includes(o.estado))
|
|
250
|
-
throw new
|
|
255
|
+
throw new locale_1.ErroDoCatalogo((m) => m.accounts.estadoDesconhecido);
|
|
251
256
|
let ultimaFalha = null;
|
|
252
257
|
if (o.ultimaFalha !== null) {
|
|
253
258
|
const f = o.ultimaFalha;
|
|
254
259
|
if (!f || typeof f !== 'object' || typeof f.motivo !== 'string' || typeof f.detalhe !== 'string' ||
|
|
255
260
|
f.detalhe.length > LIMITE_DETALHE || Object.keys(f).some(k => !['motivo', 'em', 'detalhe'].includes(k)))
|
|
256
|
-
throw new
|
|
261
|
+
throw new locale_1.ErroDoCatalogo((m) => m.accounts.ultimaFalhaInvalida);
|
|
257
262
|
ultimaFalha = { motivo: f.motivo, em: data(f.em, 'ultimaFalha.em'), detalhe: f.detalhe };
|
|
258
263
|
}
|
|
259
264
|
return { ...despacho, estado: o.estado, esgotadoAte: data(o.esgotadoAte, 'esgotadoAte'),
|
|
@@ -262,15 +267,15 @@ function validarPerfil(v) {
|
|
|
262
267
|
/** Conteudo validado; ids unicos e diretorio unico por runtime. */
|
|
263
268
|
function validarStore(v) {
|
|
264
269
|
if (!v || typeof v !== 'object' || Array.isArray(v))
|
|
265
|
-
throw new
|
|
270
|
+
throw new locale_1.ErroDoCatalogo((m) => m.accounts.storeInvalido);
|
|
266
271
|
const o = v;
|
|
267
272
|
if (o.contrato !== exports.CONTRATO_PERFIS || !Array.isArray(o.perfis) || Object.keys(o).sort().join(',') !== 'contrato,perfis')
|
|
268
|
-
throw new
|
|
273
|
+
throw new locale_1.ErroDoCatalogo((m) => m.accounts.contratoEsperado(exports.CONTRATO_PERFIS));
|
|
269
274
|
const perfis = o.perfis.map(validarPerfil);
|
|
270
275
|
if (new Set(perfis.map(p => p.id)).size !== perfis.length)
|
|
271
|
-
throw new
|
|
276
|
+
throw new locale_1.ErroDoCatalogo((m) => m.accounts.idRepetido);
|
|
272
277
|
if (new Set(perfis.map(p => `${p.runtime}|${diretorioDoPerfil(p)}`)).size !== perfis.length)
|
|
273
|
-
throw new
|
|
278
|
+
throw new locale_1.ErroDoCatalogo((m) => m.accounts.mesmoDiretorio);
|
|
274
279
|
return { contrato: exports.CONTRATO_PERFIS, perfis };
|
|
275
280
|
}
|
|
276
281
|
/** Le o store. Sem pasta privada ou sem arquivo: store vazio (nenhum perfil configurado). */
|
|
@@ -292,19 +297,19 @@ function lerPerfis(raiz) {
|
|
|
292
297
|
catch (e) {
|
|
293
298
|
if (e.code === 'ENOENT')
|
|
294
299
|
return storeVazio();
|
|
295
|
-
throw new
|
|
300
|
+
throw new locale_1.ErroDoCatalogo((m) => m.accounts.arquivoIlegivel);
|
|
296
301
|
}
|
|
297
302
|
try {
|
|
298
303
|
const st = fs.fstatSync(fd), atual = fs.lstatSync(pasta);
|
|
299
304
|
if (!st.isFile() || st.nlink !== 1 || st.uid !== uid() || (st.mode & 0o777) !== 0o600 || st.size > LIMITE_STORE_BYTES ||
|
|
300
305
|
atual.dev !== pastaSt.dev || atual.ino !== pastaSt.ino)
|
|
301
|
-
throw new
|
|
306
|
+
throw new locale_1.ErroDoCatalogo((m) => m.accounts.arquivoSemPermissao);
|
|
302
307
|
let bruto;
|
|
303
308
|
try {
|
|
304
309
|
bruto = JSON.parse(fs.readFileSync(fd, 'utf8'));
|
|
305
310
|
}
|
|
306
311
|
catch {
|
|
307
|
-
throw new
|
|
312
|
+
throw new locale_1.ErroDoCatalogo((m) => m.accounts.arquivoJson);
|
|
308
313
|
}
|
|
309
314
|
return validarStore(bruto);
|
|
310
315
|
}
|
|
@@ -331,7 +336,7 @@ function gravarArquivoPrivado(pasta, pastaSt, arquivo, conteudo) {
|
|
|
331
336
|
const atual = fs.lstatSync(pasta);
|
|
332
337
|
if (atual.dev !== pastaSt.dev || atual.ino !== pastaSt.ino) {
|
|
333
338
|
fs.rmSync(temp, { force: true });
|
|
334
|
-
throw new
|
|
339
|
+
throw new locale_1.ErroDoCatalogo((m) => m.accounts.pastaTrocada);
|
|
335
340
|
}
|
|
336
341
|
fs.renameSync(temp, path.join(pasta, arquivo));
|
|
337
342
|
const dfd = fs.openSync(pasta, fs.constants.O_RDONLY | fs.constants.O_DIRECTORY);
|
|
@@ -429,7 +434,7 @@ function comLockDoStore(pasta, executar, arquivo = exports.ARQUIVO_PERFIS) {
|
|
|
429
434
|
continue;
|
|
430
435
|
}
|
|
431
436
|
if (Date.now() >= prazo)
|
|
432
|
-
throw new
|
|
437
|
+
throw new locale_1.ErroDoCatalogo((m) => m.accounts.storeOcupado);
|
|
433
438
|
Atomics.wait(pausa, 0, 0, 2 + Math.floor(Math.random() * 18));
|
|
434
439
|
}
|
|
435
440
|
try {
|
|
@@ -470,7 +475,7 @@ function atualizarPerfis(raiz, mutar) {
|
|
|
470
475
|
function exigirPerfil(store, id) {
|
|
471
476
|
const p = store.perfis.find(x => x.id === id);
|
|
472
477
|
if (!p)
|
|
473
|
-
throw new
|
|
478
|
+
throw new locale_1.ErroDoCatalogo((m) => m.accounts.perfilNaoExiste(id));
|
|
474
479
|
return p;
|
|
475
480
|
}
|
|
476
481
|
/**
|
|
@@ -507,29 +512,31 @@ function prepararDiretorioDoPerfil(dir) {
|
|
|
507
512
|
fs.mkdirSync(dir, { recursive: true, mode: 0o700 });
|
|
508
513
|
}
|
|
509
514
|
catch (e) {
|
|
510
|
-
|
|
515
|
+
const codigo = e.code ?? 'erro';
|
|
516
|
+
throw new locale_1.ErroDoCatalogo((m) => m.accounts.diretorioInacessivel(codigo));
|
|
511
517
|
}
|
|
512
518
|
let st;
|
|
513
519
|
try {
|
|
514
520
|
st = fs.statSync(dir);
|
|
515
521
|
}
|
|
516
522
|
catch (e) {
|
|
517
|
-
|
|
523
|
+
const codigo = e.code ?? 'erro';
|
|
524
|
+
throw new locale_1.ErroDoCatalogo((m) => m.accounts.diretorioInacessivel(codigo));
|
|
518
525
|
}
|
|
519
526
|
if (!st.isDirectory())
|
|
520
|
-
throw new
|
|
527
|
+
throw new locale_1.ErroDoCatalogo((m) => m.accounts.naoEDiretorio);
|
|
521
528
|
if (st.uid !== uid())
|
|
522
|
-
throw new
|
|
529
|
+
throw new locale_1.ErroDoCatalogo((m) => m.accounts.outroUsuario);
|
|
523
530
|
try {
|
|
524
531
|
fs.accessSync(dir, fs.constants.R_OK | fs.constants.W_OK | fs.constants.X_OK);
|
|
525
532
|
}
|
|
526
533
|
catch {
|
|
527
|
-
throw new
|
|
534
|
+
throw new locale_1.ErroDoCatalogo((m) => m.accounts.semLeituraEscrita);
|
|
528
535
|
}
|
|
529
536
|
}
|
|
530
537
|
function adicionarPerfil(raiz, novo, agoraIso = new Date().toISOString()) {
|
|
531
538
|
if (!runtimeComPerfil(novo.runtime))
|
|
532
|
-
throw new
|
|
539
|
+
throw new locale_1.ErroDoCatalogo((m) => m.accounts.runtimeSemPerfil(novo.runtime));
|
|
533
540
|
const runtime = novo.runtime;
|
|
534
541
|
const dir = validarDiretorioDePerfil(novo.dir);
|
|
535
542
|
const perfil = { id: validarIdDePerfil(novo.id), runtime,
|
|
@@ -544,16 +551,16 @@ function adicionarPerfil(raiz, novo, agoraIso = new Date().toISOString()) {
|
|
|
544
551
|
existente.esgotadoAte = null;
|
|
545
552
|
return { ...existente };
|
|
546
553
|
}
|
|
547
|
-
|
|
548
|
-
|
|
554
|
+
const desativadoEm = existente.estado === 'desativado' ? diretorioDoPerfil(existente) : null;
|
|
555
|
+
throw new locale_1.ErroDoCatalogo((m) => m.accounts.jaExiste(perfil.id, desativadoEm));
|
|
549
556
|
}
|
|
550
557
|
if (store.perfis.some(p => p.runtime === runtime && diretorioDoPerfil(p) === dir))
|
|
551
|
-
throw new
|
|
558
|
+
throw new locale_1.ErroDoCatalogo((m) => m.accounts.jaHaPerfil(runtime, dir));
|
|
552
559
|
// A7: o mesmo diretorio por outro caminho (link simbolico) e a mesma conta, nao outro perfil.
|
|
553
560
|
const real = caminhoRealDoPerfil(dir);
|
|
554
561
|
const mesmo = store.perfis.find(p => p.runtime === runtime && caminhoRealDoPerfil(diretorioDoPerfil(p)) === real);
|
|
555
562
|
if (mesmo)
|
|
556
|
-
throw new
|
|
563
|
+
throw new locale_1.ErroDoCatalogo((m) => m.accounts.mesmoDiretorioDoPerfil(dir, mesmo.id, real));
|
|
557
564
|
store.perfis.push(perfil);
|
|
558
565
|
return perfil;
|
|
559
566
|
});
|
|
@@ -571,7 +578,7 @@ function reativarPerfil(raiz, id) {
|
|
|
571
578
|
const p = atualizarPerfis(raiz, store => {
|
|
572
579
|
const p = exigirPerfil(store, id);
|
|
573
580
|
if (p.estado === 'desativado')
|
|
574
|
-
throw new
|
|
581
|
+
throw new locale_1.ErroDoCatalogo((m) => m.accounts.estaDesativado(id));
|
|
575
582
|
p.estado = 'ativo';
|
|
576
583
|
p.esgotadoAte = null;
|
|
577
584
|
return { ...p };
|
|
@@ -580,13 +587,56 @@ function reativarPerfil(raiz, id) {
|
|
|
580
587
|
publicarEstadoDaConta(p, (0, estado_thread_1.raizDoEstado)(raiz));
|
|
581
588
|
return p;
|
|
582
589
|
}
|
|
590
|
+
/** RM-064 T7: `accounts check` materializa a disponibilidade que antes existia só na leitura pura. */
|
|
591
|
+
function expirarPerfisVencidos(raiz, agoraMs = Date.now()) {
|
|
592
|
+
const temVencido = lerPerfis(raiz).perfis.some(p => p.estado === 'esgotado' && p.esgotadoAte !== null &&
|
|
593
|
+
Date.parse(p.esgotadoAte) <= agoraMs);
|
|
594
|
+
if (!temVencido)
|
|
595
|
+
return [];
|
|
596
|
+
const expirados = atualizarPerfis(raiz, store => {
|
|
597
|
+
const saida = [];
|
|
598
|
+
for (const p of store.perfis) {
|
|
599
|
+
if (p.estado !== 'esgotado' || p.esgotadoAte === null || Date.parse(p.esgotadoAte) > agoraMs)
|
|
600
|
+
continue;
|
|
601
|
+
p.estado = 'ativo';
|
|
602
|
+
p.esgotadoAte = null;
|
|
603
|
+
saida.push({ ...p });
|
|
604
|
+
}
|
|
605
|
+
return saida;
|
|
606
|
+
});
|
|
607
|
+
for (const p of expirados)
|
|
608
|
+
publicarEstadoDaConta(p, (0, estado_thread_1.raizDoEstado)(raiz), agoraMs);
|
|
609
|
+
return expirados;
|
|
610
|
+
}
|
|
611
|
+
/**
|
|
612
|
+
* Classificação conservadora da evidência curta guardada; texto desconhecido continua desconhecido. O limite de gasto
|
|
613
|
+
* dito por extenso vence o semanal: a fala real "individual spend limit ... your weekly limit resets" é de gasto, e
|
|
614
|
+
* a semana ali é só o prazo de volta.
|
|
615
|
+
*/
|
|
616
|
+
function classificarTipoDeLimite(detalhe) {
|
|
617
|
+
const texto = detalhe ?? '';
|
|
618
|
+
if (!texto)
|
|
619
|
+
return 'nenhum';
|
|
620
|
+
if (/spend(?:ing)?\s+(?:cap|limit)|limite\s+de\s+gasto/iu.test(texto))
|
|
621
|
+
return 'gasto-admin';
|
|
622
|
+
if (/weekly|semana(?:l)?/iu.test(texto))
|
|
623
|
+
return 'semanal';
|
|
624
|
+
if (/admin(?:istrator|istrador)?/iu.test(texto))
|
|
625
|
+
return 'gasto-admin';
|
|
626
|
+
if (/session|sess[aã]o|\b\d+(?:[.,]\d+)?\s*(?:hours?|horas?|h)\b/iu.test(texto))
|
|
627
|
+
return 'sessao';
|
|
628
|
+
return 'outro';
|
|
629
|
+
}
|
|
630
|
+
function tipoDeLimiteDoPerfil(p) {
|
|
631
|
+
return p.ultimaFalha?.motivo === 'runtime.quota-exhausted' ? classificarTipoDeLimite(p.ultimaFalha.detalhe) : 'nenhum';
|
|
632
|
+
}
|
|
583
633
|
/**
|
|
584
634
|
* D5: marca a falha de conta. Cota esgotada sai do rodizio ate `esgotadoAte`; auth ausente
|
|
585
635
|
* sai sem prazo, ate o login ser refeito e conferido.
|
|
586
636
|
*/
|
|
587
637
|
function marcarFalhaDePerfil(raiz, id, falha) {
|
|
588
638
|
if (falha.estado === 'esgotado' && (falha.esgotadoAte === null || !Number.isFinite(Date.parse(falha.esgotadoAte))))
|
|
589
|
-
throw new
|
|
639
|
+
throw new locale_1.ErroDoCatalogo((m) => m.accounts.cotaExigePrazo);
|
|
590
640
|
const marcado = atualizarPerfis(raiz, store => {
|
|
591
641
|
const p = exigirPerfil(store, id);
|
|
592
642
|
if (p.estado !== 'desativado')
|
|
@@ -609,7 +659,7 @@ const detalheCurto = (detalhe) => Array.from(detalhe.replace(/\p{Cc}/gu, ' ')).s
|
|
|
609
659
|
function registrarConferenciaInconclusiva(raiz, id, detalhe, em = new Date().toISOString()) {
|
|
610
660
|
return atualizarPerfis(raiz, store => {
|
|
611
661
|
const p = exigirPerfil(store, id);
|
|
612
|
-
p.ultimaFalha = { motivo: 'runtime.unavailable', em, detalhe: detalheCurto(
|
|
662
|
+
p.ultimaFalha = { motivo: 'runtime.unavailable', em, detalhe: detalheCurto((0, locale_1.msg)('pt-BR').accounts.inconclusiva(detalhe)) };
|
|
613
663
|
return { ...p };
|
|
614
664
|
});
|
|
615
665
|
}
|
|
@@ -674,12 +724,12 @@ function chaveDaConta(p) {
|
|
|
674
724
|
function validarRegistroDeContas(v) {
|
|
675
725
|
if (!v || typeof v !== 'object' || v.contrato !== exports.CONTRATO_CONTAS ||
|
|
676
726
|
!Array.isArray(v.contas))
|
|
677
|
-
throw new
|
|
727
|
+
throw new locale_1.ErroDoCatalogo((m) => m.accounts.registroInvalido);
|
|
678
728
|
const contas = v.contas.map((c) => {
|
|
679
729
|
const o = c;
|
|
680
730
|
if (!o || typeof o.chave !== 'string' || !ESTADOS_COMPARTILHADOS.includes(String(o.estado)) ||
|
|
681
731
|
typeof o.motivo !== 'string' || typeof o.detalhe !== 'string' || typeof o.projeto !== 'string' || typeof o.em !== 'string')
|
|
682
|
-
throw new
|
|
732
|
+
throw new locale_1.ErroDoCatalogo((m) => m.accounts.contaInvalida);
|
|
683
733
|
return { chave: o.chave, estado: o.estado, esgotadoAte: data(o.esgotadoAte ?? null, 'esgotadoAte'),
|
|
684
734
|
motivo: o.motivo, detalhe: detalheCurto(o.detalhe), em: data(o.em, 'em'), projeto: o.projeto };
|
|
685
735
|
});
|
|
@@ -760,7 +810,7 @@ function aplicarContasCompartilhadas(store, contas, agoraMs = Date.now()) {
|
|
|
760
810
|
}
|
|
761
811
|
if (!c)
|
|
762
812
|
return p;
|
|
763
|
-
const falha = { motivo: c.motivo, em: c.em, detalhe: detalheCurto(
|
|
813
|
+
const falha = { motivo: c.motivo, em: c.em, detalhe: detalheCurto((0, locale_1.msg)('pt-BR').accounts.vistoEmOutroProjeto(c.detalhe)) };
|
|
764
814
|
if (c.estado === 'esgotado') {
|
|
765
815
|
const ate = c.esgotadoAte === null ? NaN : Date.parse(c.esgotadoAte);
|
|
766
816
|
if (!(ate > agoraMs))
|
|
@@ -790,6 +840,10 @@ function perfilDisponivel(p, agoraMs = Date.now()) {
|
|
|
790
840
|
return true;
|
|
791
841
|
return p.estado === 'esgotado' && p.esgotadoAte !== null && Date.parse(p.esgotadoAte) <= agoraMs;
|
|
792
842
|
}
|
|
843
|
+
/** Única lista de candidatos automáticos: estado configurado continua existindo, mas nunca vira destino. */
|
|
844
|
+
function perfisDisponiveis(store, runtime, agoraMs = Date.now()) {
|
|
845
|
+
return perfisDoRuntime(store, runtime).filter((p) => perfilDisponivel(p, agoraMs));
|
|
846
|
+
}
|
|
793
847
|
/** Defaults da D16: por cota ligada (decisao do dono em 19/09/2026) e por login perdido ligada. */
|
|
794
848
|
exports.POLITICA_PADRAO = { mesmoRuntimePorCota: true, mesmoRuntimePorAuth: true };
|
|
795
849
|
function politicaDeRotacao(manifesto) {
|
|
@@ -833,9 +887,9 @@ function proximoPerfilPorCarga(store, runtime, politica, carga, opcoes = {}) {
|
|
|
833
887
|
if (!daVez)
|
|
834
888
|
return null;
|
|
835
889
|
const agoraMs = opcoes.agoraMs ?? Date.now();
|
|
836
|
-
const candidatos =
|
|
890
|
+
const candidatos = perfisDisponiveis(store, runtime, agoraMs)
|
|
837
891
|
.map((p, i) => ({ p, i }))
|
|
838
|
-
.filter(({ p }) => !(opcoes.excluir ?? []).includes(p.id)
|
|
892
|
+
.filter(({ p }) => !(opcoes.excluir ?? []).includes(p.id));
|
|
839
893
|
const uso = (p) => p.ultimoUso === null ? -Infinity : Date.parse(p.ultimoUso);
|
|
840
894
|
candidatos.sort((x, y) => (carga.get(x.p.id) ?? 0) - (carga.get(y.p.id) ?? 0) || uso(x.p) - uso(y.p) || x.i - y.i);
|
|
841
895
|
return candidatos[0]?.p ?? daVez;
|
|
@@ -879,12 +933,15 @@ function menorEsgotadoAte(store, runtimes, agoraMs = Date.now()) {
|
|
|
879
933
|
* vez, pela `legendaDoFuso()`, quando `perfisComHorario` acusa alguma coluna preenchida.
|
|
880
934
|
*/
|
|
881
935
|
function linhasDePerfis(store) {
|
|
882
|
-
|
|
936
|
+
// RM-061 (F3b): o estado (dado do store e do `--json`) so se traduz aqui, pelo id; o motivo tipado sai igual.
|
|
937
|
+
const m = (0, locale_1.msg)().accounts;
|
|
938
|
+
return store.perfis.map(p => [p.id, p.runtime, diretorioDoPerfil(p), m.estado(p.estado),
|
|
883
939
|
p.esgotadoAte ? (0, horario_1.formatarDataHora)(p.esgotadoAte) : '-', p.ultimoUso ? (0, horario_1.formatarDataHora)(p.ultimoUso) : '-',
|
|
884
|
-
p.ultimaFalha ?
|
|
940
|
+
p.ultimaFalha ? m.falhaEm(p.ultimaFalha.motivo, (0, horario_1.formatarDataHora)(p.ultimaFalha.em)) : '-']);
|
|
885
941
|
}
|
|
886
942
|
/** True quando a tabela mostra algum horario, e a mensagem precisa dizer o fuso uma vez. */
|
|
887
943
|
function perfisComHorario(store) {
|
|
888
944
|
return store.perfis.some(p => p.esgotadoAte !== null || p.ultimoUso !== null || p.ultimaFalha !== null);
|
|
889
945
|
}
|
|
890
|
-
|
|
946
|
+
/** As colunas da tabela em pt-BR; o CLI usa as do catalogo, no locale do comando (`msg().accounts.colunas`). */
|
|
947
|
+
exports.COLUNAS_DE_PERFIS = [...(0, locale_1.msg)('pt-BR').accounts.colunas];
|
package/dist/runtimes.js
CHANGED
|
@@ -55,6 +55,7 @@ exports.resolverRuntime = resolverRuntime;
|
|
|
55
55
|
const claudeBg = __importStar(require("./adapters/claude-bg"));
|
|
56
56
|
const codex = __importStar(require("./adapters/codex"));
|
|
57
57
|
const hitl_ingress_receipt_1 = require("./hitl-ingress-receipt");
|
|
58
|
+
const locale_1 = require("./locale");
|
|
58
59
|
exports.RUNTIME_PADRAO = 'claude-bg';
|
|
59
60
|
/** Phase e retry atravessam o mesmo preparo, antes de retirar segredos do filho. */
|
|
60
61
|
function comRecibosPublicos(p, dispatch) {
|
|
@@ -97,7 +98,7 @@ function runtimeConhecido(nome) {
|
|
|
97
98
|
function resolverRuntime(nome) {
|
|
98
99
|
const adapter = exports.RUNTIMES[nome];
|
|
99
100
|
if (!adapter) {
|
|
100
|
-
throw new
|
|
101
|
+
throw new locale_1.ErroDoCatalogo((m) => m.phase.runtimeDesconhecido(nome, exports.ORDEM_DOS_RUNTIMES.join(', ')));
|
|
101
102
|
}
|
|
102
103
|
return adapter;
|
|
103
104
|
}
|
package/dist/saida-segura.js
CHANGED
|
@@ -51,8 +51,9 @@ function valoresEmUmaLinha(valor) {
|
|
|
51
51
|
/**
|
|
52
52
|
* O JSON para a tela: o mesmo valor, com os caracteres invisiveis escritos como `\uXXXX` (quem le o
|
|
53
53
|
* JSON recebe o mesmo texto; so o terminal deixa de executa-lo). A quebra de linha da indentacao fica.
|
|
54
|
+
* Com `indentacao` 0, o JSON sai compacto (a resposta de uma tool MCP, RM-026 K7).
|
|
54
55
|
*/
|
|
55
|
-
function jsonSemInvisivel(valor) {
|
|
56
|
-
return JSON.stringify(valor, null,
|
|
56
|
+
function jsonSemInvisivel(valor, indentacao = 2) {
|
|
57
|
+
return JSON.stringify(valor, null, indentacao).replace(INVISIVEIS, (c) => c === '\n' ? c
|
|
57
58
|
: Array.from({ length: c.length }, (_, i) => `\\u${c.charCodeAt(i).toString(16).padStart(4, '0')}`).join(''));
|
|
58
59
|
}
|