@orkastery/cli 0.5.6 → 0.6.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/adapters/README.md +18 -0
- package/adapters/claude-code/.claude-plugin/plugin.json +1 -0
- package/adapters/claude-code/README.md +37 -5
- package/adapters/claude-code/agents/ork-check.md +1 -0
- package/adapters/claude-code/agents/ork-go.md +1 -0
- package/adapters/claude-code/agents/ork-goal.md +1 -0
- package/adapters/claude-code/agents/ork-master.md +1 -0
- package/adapters/claude-code/agents/ork-plan.md +1 -0
- package/adapters/claude-code/agents/ork-ship.md +1 -0
- package/adapters/claude-code/hooks/hooks.json +2 -1
- package/adapters/claude-code/hooks/ork-guard.js +15 -1
- package/adapters/claude-code/hooks/ork-resposta.js +91 -0
- package/adapters/claude-code/hooks/ork-sensor.js +18 -2
- package/adapters/claude-code/hooks/quota-signal.js +14 -0
- package/adapters/claude-code/mods/ork-mensageiro/.claude-plugin/plugin.json +14 -0
- package/adapters/claude-code/mods/ork-mensageiro/hooks/caixa.ts +215 -0
- package/adapters/claude-code/mods/ork-mensageiro/hooks/hooks.json +3 -0
- package/adapters/claude-code/mods/ork-mensageiro/hooks/painel.tsx +165 -0
- package/adapters/claude-code/mods/ork-mensageiro/hooks/recepcao.ts +256 -0
- package/adapters/claude-code/mods/ork-mensageiro/hooks/register.tsx +481 -0
- package/adapters/claude-code/mods/ork-mensageiro/orkastery-mod.json +5 -0
- package/adapters/claude-code/mods/ork-mensageiro/types/index.d.ts +85 -0
- package/adapters/claude-code/mods/ork-pista/hooks/ci.ts +9 -5
- package/adapters/claude-code/mods/ork-ritual/.claude-plugin/plugin.json +14 -0
- package/adapters/claude-code/mods/ork-ritual/hooks/hooks.json +3 -0
- package/adapters/claude-code/mods/ork-ritual/hooks/nota.ts +88 -0
- package/adapters/claude-code/mods/ork-ritual/hooks/register.tsx +494 -0
- package/adapters/claude-code/mods/ork-ritual/hooks/replay.tsx +271 -0
- package/adapters/claude-code/mods/ork-ritual/hooks/ritual.ts +218 -0
- package/adapters/claude-code/mods/ork-ritual/orkastery-mod.json +5 -0
- package/adapters/claude-code/mods/ork-ritual/types/index.d.ts +106 -0
- package/adapters/claude-code/mods/ork-sentinela/hooks/vigia.ts +1 -1
- package/adapters/codex/skills/ork/SKILL.md +2 -0
- package/adapters/hermes/README.md +64 -1
- package/adapters/hermes/bin/ork-conhecimento-colecoes.sh +14 -0
- package/adapters/hermes/bin/ork-conhecimento-listar.sh +15 -0
- package/adapters/hermes/bin/ork-conhecimento-mostrar.sh +16 -0
- package/adapters/hermes/bin/ork-conhecimento-verificar.sh +15 -0
- package/adapters/hermes/bin/ork-vigia-batida.py +127 -0
- package/adapters/hermes/hermes.plugin.json +4 -0
- package/adapters/hermes/hitl-ingress/__init__.py +101 -8
- package/adapters/hermes/skills/orkastery-devmaster/SKILL.md +2 -2
- package/adapters/openclaw/README.md +81 -9
- package/adapters/openclaw/bin/ork-vigia-batida.js +86 -0
- package/adapters/openclaw/dist/hitl-ingress.js +106 -9
- package/adapters/openclaw/dist/index.js +86 -0
- package/adapters/openclaw/openclaw.plugin.json +34 -4
- package/adapters/openclaw/package.json +2 -2
- package/adapters/openclaw/src/hitl-ingress.ts +103 -9
- package/adapters/openclaw/src/index.ts +94 -0
- package/assets/adapters-en/claude-code/README.md +403 -0
- package/assets/adapters-en/claude-code/agents/ork-check.md +33 -0
- package/assets/adapters-en/claude-code/agents/ork-go.md +33 -0
- package/assets/adapters-en/claude-code/agents/ork-goal.md +34 -0
- package/assets/adapters-en/claude-code/agents/ork-master.md +35 -0
- package/assets/adapters-en/claude-code/agents/ork-plan.md +33 -0
- package/assets/adapters-en/claude-code/agents/ork-ship.md +33 -0
- package/assets/adapters-en/claude-code/commands/check.md +46 -0
- package/assets/adapters-en/claude-code/commands/go.md +46 -0
- package/assets/adapters-en/claude-code/commands/goal.md +55 -0
- package/assets/adapters-en/claude-code/commands/master.md +54 -0
- package/assets/adapters-en/claude-code/commands/onboarding.md +22 -0
- package/assets/adapters-en/claude-code/commands/ork.md +126 -0
- package/assets/adapters-en/claude-code/commands/plan.md +47 -0
- package/assets/adapters-en/claude-code/commands/ship.md +45 -0
- package/assets/adapters-en/codex/skills/ork/SKILL.md +85 -0
- package/assets/adapters-en/hermes/README.md +273 -0
- package/assets/adapters-en/hermes/skills/orkastery-devmaster/SKILL.md +169 -0
- package/assets/references-en/README.md +25 -0
- package/assets/references-en/code-review-axes.md +82 -0
- package/assets/references-en/definition-of-done.md +74 -0
- package/assets/references-en/performance-checklist.md +53 -0
- package/assets/references-en/security-checklist.md +101 -0
- package/assets/references-en/testing-patterns.md +51 -0
- package/assets/security-scan/defaults/.golangci.yml +2 -0
- package/assets/security-scan/defaults/eslint.config.mjs +11 -0
- package/assets/security-scan/defaults/gitleaks.toml +3 -0
- package/assets/security-scan/defaults/ruff.toml +1 -0
- package/assets/security-scan/tools-agil.json +87 -0
- package/assets/security-scan/tools.json +625 -0
- package/assets/skills-en/core/onboarding/SKILL.md +58 -0
- package/assets/skills-en/core/orkastery-bootstrap/SKILL.md +119 -0
- package/assets/skills-en/core/thread-state/SKILL.md +88 -0
- package/assets/skills-en/governance/decision-triage/SKILL.md +65 -0
- package/assets/skills-en/governance/narrative-guardian/SKILL.md +66 -0
- package/assets/skills-en/governance/roadmap-keeper/SKILL.md +60 -0
- package/assets/skills-en/governance/scope-check-capability-map/SKILL.md +71 -0
- package/assets/skills-en/observability/thread-tracing/SKILL.md +63 -0
- package/assets/skills-en/phases/check-quality/SKILL.md +103 -0
- package/assets/skills-en/phases/go-implementation/SKILL.md +78 -0
- package/assets/skills-en/phases/goal-definition/SKILL.md +69 -0
- package/assets/skills-en/phases/master-metrics/SKILL.md +72 -0
- package/assets/skills-en/phases/plan-specification/SKILL.md +67 -0
- package/assets/skills-en/phases/security-remediation/SKILL.md +70 -0
- package/assets/skills-en/phases/ship-release/SKILL.md +71 -0
- package/assets/skills-en/reviewers/code-reviewer/SKILL.md +61 -0
- package/assets/skills-en/reviewers/security-auditor/SKILL.md +93 -0
- package/assets/skills-en/reviewers/test-engineer/SKILL.md +66 -0
- package/assets/skills-en/reviewers/web-performance-auditor/SKILL.md +63 -0
- package/dist/adapters/claude-bg.js +118 -4
- package/dist/adapters/codex-controller-worker.js +12 -5
- package/dist/adapters/codex-events.js +16 -4
- package/dist/adapters/codex.js +3 -1
- package/dist/atualizar-branch.js +245 -0
- package/dist/auditoria.js +13 -11
- package/dist/auditrun.js +51 -46
- package/dist/autorizacao-duravel.js +327 -0
- package/dist/board.js +94 -40
- package/dist/branch-de-estado.js +16 -8
- package/dist/busca-semantica.js +7 -5
- package/dist/catalogo.js +2 -1
- package/dist/changelog-reconciliacao.js +290 -0
- package/dist/check-agil.js +500 -0
- package/dist/check-modo.js +41 -0
- package/dist/check-paralelo.js +183 -0
- package/dist/ci.js +248 -45
- package/dist/ciclos.js +8 -6
- package/dist/claim-lint.js +12 -8
- package/dist/claims-conferir.js +47 -39
- package/dist/claims.js +10 -9
- package/dist/company-brain-client.js +10 -3
- package/dist/company-brain-migration.js +11 -5
- package/dist/conducao-batida.js +759 -0
- package/dist/conducao-sentinela.js +25 -8
- package/dist/conducao.js +84 -29
- package/dist/conhecimento-consulta.js +270 -0
- package/dist/conhecimento.js +111 -87
- package/dist/conta-esgotada.js +127 -0
- package/dist/dado-privado.js +816 -0
- package/dist/decisao-autonoma.js +5 -4
- package/dist/demo.js +14 -12
- package/dist/dependencias-da-worktree.js +25 -0
- package/dist/divida.js +38 -36
- package/dist/docs.js +81 -74
- package/dist/doctor-forja.js +345 -0
- package/dist/doctor-pulse-cron.js +113 -1
- package/dist/doctor.js +164 -6
- package/dist/dsn-da-memoria.js +417 -0
- package/dist/entrega-por-mod.js +503 -0
- package/dist/entrega-pr.js +143 -43
- package/dist/esgotamentos.js +13 -11
- package/dist/estado-thread.js +21 -18
- package/dist/evalrunner.js +35 -32
- package/dist/fabrica-batida.js +34 -21
- package/dist/fabrica-estado.js +13 -10
- package/dist/fix.js +21 -19
- package/dist/forja/adaptador.js +6 -0
- package/dist/forja/ambiente-de-ci.js +27 -0
- package/dist/forja/api.js +256 -0
- package/dist/forja/cache.js +89 -0
- package/dist/forja/cli.js +60 -0
- package/dist/forja/contrato.js +9 -0
- package/dist/forja/endereco.js +43 -0
- package/dist/forja/estado.js +22 -0
- package/dist/forja/executor.js +73 -0
- package/dist/forja/github/ci.js +95 -0
- package/dist/forja/github/dono-da-rede.js +18 -0
- package/dist/forja/github/metadados.js +15 -0
- package/dist/forja/github/pedidos.js +200 -0
- package/dist/forja/gitlab/ci.js +141 -0
- package/dist/forja/gitlab/consultas.js +59 -0
- package/dist/forja/gitlab/dono-da-rede.js +43 -0
- package/dist/forja/gitlab/metadados.js +15 -0
- package/dist/forja/gitlab/pedidos-abertos.js +158 -0
- package/dist/forja/gitlab/pedidos.js +141 -0
- package/dist/forja/produtor.js +32 -0
- package/dist/forja/registro.js +31 -0
- package/dist/forja/resolver.js +121 -0
- package/dist/forja/texto.js +13 -0
- package/dist/forja/versao.js +71 -0
- package/dist/forja.js +123 -80
- package/dist/handoff.js +23 -13
- package/dist/hitl-contract.js +46 -43
- package/dist/hitl-curto.js +37 -25
- package/dist/hitl-gates.js +13 -11
- package/dist/hitl-local-receipt.js +51 -0
- package/dist/hitl-local.js +11 -2
- package/dist/hitl-lock.js +5 -11
- package/dist/hitl-public-receipt.js +11 -0
- package/dist/hitl-resumo.js +44 -1
- package/dist/hitl-sessions.js +62 -9
- package/dist/hitl-texto-livre.js +7 -4
- package/dist/hitl.js +34 -31
- package/dist/horario.js +16 -0
- package/dist/hosts.js +104 -134
- package/dist/index.js +848 -548
- package/dist/indice-vetorial.js +14 -12
- package/dist/init.js +11 -2
- package/dist/integracoes-locais.js +2 -0
- package/dist/intelligence-graph-cli.js +123 -69
- package/dist/intelligence-graph-query.js +37 -22
- package/dist/leases.js +19 -18
- package/dist/ledger-stats.js +17 -16
- package/dist/ledger.js +31 -1
- package/dist/licoes.js +12 -11
- package/dist/locale-accounts.js +220 -0
- package/dist/locale-adapter.js +291 -0
- package/dist/locale-ajuda.js +76 -4
- package/dist/locale-audit.js +199 -0
- package/dist/locale-claims.js +213 -0
- package/dist/locale-conducao.js +138 -0
- package/dist/locale-conhecimento.js +181 -0
- package/dist/locale-decisao.js +205 -0
- package/dist/locale-docs.js +230 -0
- package/dist/locale-estado.js +101 -0
- package/dist/locale-forja.js +290 -0
- package/dist/locale-gerados.js +5 -0
- package/dist/locale-grafo.js +129 -0
- package/dist/locale-master.js +83 -0
- package/dist/locale-network.js +524 -0
- package/dist/locale-operacao-restante.js +931 -0
- package/dist/locale-projetos.js +100 -0
- package/dist/locale-prompts.js +194 -0
- package/dist/locale-pulse.js +140 -2
- package/dist/locale-reservas.js +87 -0
- package/dist/locale-retry.js +145 -6
- package/dist/locale-security-scan.js +69 -0
- package/dist/locale-setup.js +192 -0
- package/dist/locale-ship.js +169 -66
- package/dist/locale-thread.js +149 -5
- package/dist/locale-verify.js +80 -4
- package/dist/locale-worktree.js +246 -0
- package/dist/locale.js +553 -9
- package/dist/maestro-runtime.js +22 -3
- package/dist/manifest.js +287 -11
- package/dist/maquina-ociosa.js +211 -0
- package/dist/maquina.js +10 -5
- package/dist/master-nota-local.js +200 -0
- package/dist/master-nota.js +10 -2
- package/dist/master.js +118 -41
- package/dist/mcp-conhecimento.js +52 -0
- package/dist/mcp-experiencia.js +26 -5
- package/dist/mcp-install.js +73 -8
- package/dist/mcp-noctum.js +101 -0
- package/dist/mcp-server.js +82 -14
- package/dist/mcp-ship-transporte.js +977 -0
- package/dist/mcp-ship.js +68 -24
- package/dist/mcp-transportes.js +17 -0
- package/dist/memoria.js +63 -58
- package/dist/modos-migracao.js +8 -6
- package/dist/modos.js +17 -18
- package/dist/network-roadmap.js +85 -49
- package/dist/noctum-aceite.js +789 -0
- package/dist/noctum-arco.js +540 -33
- package/dist/noctum-capacidade.js +3 -3
- package/dist/noctum-changelog.js +399 -0
- package/dist/noctum-cli.js +482 -0
- package/dist/noctum-coordenacao.js +1225 -0
- package/dist/noctum-entrega.js +1169 -0
- package/dist/noctum-envelope.js +252 -16
- package/dist/noctum-execucao.js +95 -23
- package/dist/noctum-fechamento.js +405 -0
- package/dist/noctum-fila.js +43 -9
- package/dist/noctum-guarda.js +256 -0
- package/dist/noctum-integracao.js +507 -0
- package/dist/noctum-maquinas.js +383 -0
- package/dist/noctum-medicao.js +450 -0
- package/dist/noctum-modo.js +362 -0
- package/dist/noctum-pergunta-canal.js +96 -0
- package/dist/noctum-pergunta.js +115 -0
- package/dist/noctum-provas.js +838 -0
- package/dist/noctum-reconciliacao.js +591 -0
- package/dist/noctum-registro.js +215 -0
- package/dist/noctum-relatorio.js +827 -0
- package/dist/noctum-resposta.js +207 -0
- package/dist/noctum-sessoes-em-voo.js +93 -0
- package/dist/noctum-supervisao.js +649 -0
- package/dist/noctum-terminal.js +459 -0
- package/dist/noctum-transporte.js +655 -0
- package/dist/noctum-vigia.js +639 -0
- package/dist/ocupacao.js +3 -1
- package/dist/onboarding.js +16 -5
- package/dist/orkmind.js +39 -23
- package/dist/orquestracao.js +31 -35
- package/dist/parado-no-condutor.js +146 -124
- package/dist/phase.js +53 -27
- package/dist/policies.js +33 -0
- package/dist/postura-local.js +4 -3
- package/dist/procedencia.js +9 -14
- package/dist/projeto-alvo.js +59 -20
- package/dist/prompts.js +136 -42
- package/dist/prova-minima.js +5 -6
- package/dist/pulse-cadencia.js +5 -4
- package/dist/pulse-consentimento.js +53 -1
- package/dist/pulse-delivery.js +143 -27
- package/dist/pulse-resposta.js +368 -4
- package/dist/pulse.js +136 -3
- package/dist/ratelimit.js +12 -4
- package/dist/recall.js +14 -13
- package/dist/rede-adesao.js +13 -8
- package/dist/rede-forja.js +108 -24
- package/dist/rede-status.js +63 -45
- package/dist/rede.js +86 -46
- package/dist/retomada-checkpoint.js +101 -0
- package/dist/retry.js +228 -73
- package/dist/roadmap-reservas.js +32 -32
- package/dist/runtime-ambiente.js +5 -0
- package/dist/runtime-context.js +117 -43
- package/dist/runtime-escada.js +423 -0
- package/dist/runtime-profiles.js +103 -46
- package/dist/saida-segura.js +3 -2
- package/dist/security-scan/agil.js +355 -0
- package/dist/security-scan/cli.js +76 -0
- package/dist/security-scan/compare.js +149 -0
- package/dist/security-scan/config.js +93 -0
- package/dist/security-scan/detect.js +97 -0
- package/dist/security-scan/executor.js +188 -0
- package/dist/security-scan/guard.js +180 -0
- package/dist/security-scan/imagem-de-lint.js +96 -0
- package/dist/security-scan/normalize/actionlint.js +12 -0
- package/dist/security-scan/normalize/eslint.js +12 -0
- package/dist/security-scan/normalize/gitleaks.js +13 -0
- package/dist/security-scan/normalize/golangci-lint.js +13 -0
- package/dist/security-scan/normalize/govulncheck.js +36 -0
- package/dist/security-scan/normalize/index.js +25 -0
- package/dist/security-scan/normalize/npm-audit.js +30 -0
- package/dist/security-scan/normalize/osv-scanner.js +32 -0
- package/dist/security-scan/normalize/oxlint.js +51 -0
- package/dist/security-scan/normalize/pip-audit.js +16 -0
- package/dist/security-scan/normalize/ruff.js +12 -0
- package/dist/security-scan/normalize/semgrep.js +20 -0
- package/dist/security-scan/normalize/trivy.js +33 -0
- package/dist/security-scan/normalize/util.js +204 -0
- package/dist/security-scan/normalize/zizmor.js +19 -0
- package/dist/security-scan/report.js +156 -0
- package/dist/security-scan/run.js +448 -0
- package/dist/security-scan/tools.js +62 -0
- package/dist/security-scan/trabalhador.js +74 -0
- package/dist/security-scan/types.js +15 -0
- package/dist/session-events.js +19 -2
- package/dist/session-watcher-claude.js +74 -19
- package/dist/session-watcher.js +156 -10
- package/dist/sessoes-contas.js +9 -0
- package/dist/sessoes-inventario.js +1 -1
- package/dist/sessoes.js +25 -23
- package/dist/setup.js +59 -58
- package/dist/ship-publicar.js +263 -92
- package/dist/ship.js +160 -17
- package/dist/superficie.js +14 -11
- package/dist/thread-close.js +9 -9
- package/dist/thread.js +121 -18
- package/dist/tokens.js +15 -11
- package/dist/trabalho-thread.js +297 -0
- package/dist/transporte-do-canal.js +189 -0
- package/dist/types.js +12 -1
- package/dist/util.js +5 -2
- package/dist/varredura-acoes.js +507 -0
- package/dist/verify.js +472 -29
- package/dist/worktree-local.js +12 -10
- package/dist/worktree.js +81 -85
- package/eval/casos/check-quality.json +77 -0
- package/eval/casos/security-auditor.json +148 -0
- package/eval/casos/security-remediation.json +161 -0
- package/eval/fixtures/security-scan/README.md +8 -0
- package/eval/fixtures/security-scan/go/.github/workflows/ci.yml +12 -0
- package/eval/fixtures/security-scan/go/Dockerfile +4 -0
- package/eval/fixtures/security-scan/go/README.md +4 -0
- package/eval/fixtures/security-scan/go/config.go +4 -0
- package/eval/fixtures/security-scan/go/go.mod +5 -0
- package/eval/fixtures/security-scan/go/go.sum +2 -0
- package/eval/fixtures/security-scan/go/main.go +31 -0
- package/eval/fixtures/security-scan/js/.github/workflows/ci.yml +12 -0
- package/eval/fixtures/security-scan/js/Dockerfile +3 -0
- package/eval/fixtures/security-scan/js/README.md +4 -0
- package/eval/fixtures/security-scan/js/package-lock.json +844 -0
- package/eval/fixtures/security-scan/js/package.json +10 -0
- package/eval/fixtures/security-scan/js/src/config.js +4 -0
- package/eval/fixtures/security-scan/js/src/server.js +17 -0
- package/eval/fixtures/security-scan/js/src/util.ts +4 -0
- package/eval/fixtures/security-scan/js/tsconfig.json +4 -0
- package/eval/fixtures/security-scan/python/.github/workflows/ci.yml +12 -0
- package/eval/fixtures/security-scan/python/Dockerfile +3 -0
- package/eval/fixtures/security-scan/python/README.md +4 -0
- package/eval/fixtures/security-scan/python/app/__init__.py +0 -0
- package/eval/fixtures/security-scan/python/app/config.py +2 -0
- package/eval/fixtures/security-scan/python/app/main.py +19 -0
- package/eval/fixtures/security-scan/python/requirements.txt +1 -0
- package/package.json +9 -4
- package/references/security-checklist.md +3 -3
- package/skills/README.md +1 -0
- package/skills/core/orkastery-bootstrap/SKILL.md +2 -2
- package/skills/phases/check-quality/SKILL.md +16 -0
- package/skills/phases/go-implementation/SKILL.md +6 -0
- package/skills/phases/security-remediation/SKILL.md +70 -0
- package/skills/reviewers/security-auditor/SKILL.md +25 -0
package/dist/retry.js
CHANGED
|
@@ -33,7 +33,7 @@ var __importStar = (this && this.__importStar) || (function () {
|
|
|
33
33
|
};
|
|
34
34
|
})();
|
|
35
35
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
36
|
-
exports.TETO_DO_PROMPT_GRAVADO = exports.POLITICA_DE_RETRY = exports.ESCADA_DE_ESFORCO = void 0;
|
|
36
|
+
exports.LIMITE_SEM_PROVA = exports.TETO_DO_PROMPT_GRAVADO = exports.POLITICA_DE_RETRY = exports.ESCADA_DE_ESFORCO = void 0;
|
|
37
37
|
exports.proximoEsforco = proximoEsforco;
|
|
38
38
|
exports.politicaDoMotivo = politicaDoMotivo;
|
|
39
39
|
exports.podeReexecutar = podeReexecutar;
|
|
@@ -55,6 +55,7 @@ exports.cancelarPedido = cancelarPedido;
|
|
|
55
55
|
exports.alvosDeFallback = alvosDeFallback;
|
|
56
56
|
exports.proximoAlvo = proximoAlvo;
|
|
57
57
|
exports.producaoNoIntervalo = producaoNoIntervalo;
|
|
58
|
+
exports.recusasSemProvaSeguidas = recusasSemProvaSeguidas;
|
|
58
59
|
exports.executarRetry = executarRetry;
|
|
59
60
|
exports.textoDoPlano = textoDoPlano;
|
|
60
61
|
exports.textoDoRetry = textoDoRetry;
|
|
@@ -90,6 +91,8 @@ const gates_1 = require("./gates");
|
|
|
90
91
|
const ledger_1 = require("./ledger");
|
|
91
92
|
const estado_thread_1 = require("./estado-thread");
|
|
92
93
|
const vida_da_thread_1 = require("./vida-da-thread");
|
|
94
|
+
const runtime_escada_1 = require("./runtime-escada");
|
|
95
|
+
const claude_bg_2 = require("./adapters/claude-bg");
|
|
93
96
|
const phase_1 = require("./phase");
|
|
94
97
|
const runtime_context_1 = require("./runtime-context");
|
|
95
98
|
const slug_1 = require("./slug");
|
|
@@ -112,6 +115,7 @@ const procedencia_1 = require("./procedencia");
|
|
|
112
115
|
const postura_local_1 = require("./postura-local");
|
|
113
116
|
const locale_1 = require("./locale");
|
|
114
117
|
const locale_retry_1 = require("./locale-retry");
|
|
118
|
+
const retomada_checkpoint_1 = require("./retomada-checkpoint");
|
|
115
119
|
/** RM-061 (F2b, D3): `porque` e `correcao` de cada motivo tem a fonte no catalogo pt-BR; o `--json` nao muda. */
|
|
116
120
|
const TEXTOS_DA_POLITICA = locale_retry_1.RETRY_PT_BR.politica;
|
|
117
121
|
/**
|
|
@@ -228,10 +232,9 @@ exports.POLITICA_DE_RETRY = {
|
|
|
228
232
|
automatica: true,
|
|
229
233
|
...TEXTOS_DA_POLITICA['runtime.rate-limited'],
|
|
230
234
|
},
|
|
231
|
-
// I-33 (D5, D11): a falha e da CONTA. O perfil sai do rodizio e o
|
|
232
|
-
// perfil ativo, depois ao
|
|
233
|
-
//
|
|
234
|
-
// producao parcial sob cota esgotada vira `human.pending`, nunca redespacho sobre a worktree.
|
|
235
|
+
// I-33 (D5, D11) + RM-064 T3: a falha e da CONTA. O perfil sai do rodizio e o pedido segue ao
|
|
236
|
+
// proximo perfil ativo, depois ao fallback e por ultimo a fila. Interrupcao no meio da fase leva
|
|
237
|
+
// checkpoint derivado do ledger/Git; o prompt original permanece gravado e referenciado.
|
|
235
238
|
'runtime.quota-exhausted': {
|
|
236
239
|
motivo: 'runtime.quota-exhausted',
|
|
237
240
|
acao: 'reexecutar',
|
|
@@ -317,13 +320,15 @@ function podeReexecutar(motivo) {
|
|
|
317
320
|
}
|
|
318
321
|
/** Tabela de `ork retry policy`. */
|
|
319
322
|
function tabelaDaPolitica() {
|
|
323
|
+
const m = (0, locale_1.msg)().retry;
|
|
324
|
+
const c = m.complementar;
|
|
320
325
|
const linhas = Object.values(exports.POLITICA_DE_RETRY).map((p) => [
|
|
321
326
|
p.motivo,
|
|
322
327
|
p.acao,
|
|
323
|
-
p.automatica ?
|
|
324
|
-
p.porque,
|
|
328
|
+
p.automatica ? c.sim : c.nao,
|
|
329
|
+
m.politica[p.motivo].porque,
|
|
325
330
|
]);
|
|
326
|
-
return (0, util_1.tabela)([
|
|
331
|
+
return (0, util_1.tabela)([...c.colunasPolitica], linhas);
|
|
327
332
|
}
|
|
328
333
|
/** A fase a que um evento de gate reprovado se refere. */
|
|
329
334
|
function faseDoEvento(evento, thread) {
|
|
@@ -353,8 +358,12 @@ function ultimaReprovacao(raiz, threadId) {
|
|
|
353
358
|
* planejou: planejar nao gasta janela nem toca no repositorio.
|
|
354
359
|
*/
|
|
355
360
|
function tentativasFeitas(raiz, threadId, fase, motivo) {
|
|
361
|
+
const eventos = (0, ledger_1.lerLedger)((0, thread_1.dirThread)(raiz, threadId));
|
|
362
|
+
// RM-063 (F4): a escada de `runtime.unavailable` vale por episodio, e as tentativas dela tambem: o pedido novo da fase
|
|
363
|
+
// (`ork phase run`) recomeca a contagem.
|
|
364
|
+
const desde = motivo === 'runtime.unavailable' ? (0, runtime_escada_1.inicioDoEpisodio)(eventos, fase) : -1;
|
|
356
365
|
// RM-055 (continuacao, D2): a recusa pelo impedimento do dono fica no ledger com `conta: false` e nao conta.
|
|
357
|
-
return
|
|
366
|
+
return eventos.filter((e, i) => i > desde && e.tipo === ledger_1.TIPOS_DE_EVENTO.retryTentado && e.fase === fase && e.motivo === motivo && e.conta !== false).length;
|
|
358
367
|
}
|
|
359
368
|
/** O bloco de loop desta fase pausa para o humano neste modo? */
|
|
360
369
|
function blocoPausa(thread, fase) {
|
|
@@ -417,6 +426,17 @@ function planejarRetry(carregado, threadId, opcoes = {}) {
|
|
|
417
426
|
razao: (0, locale_1.textoDoCatalogo)((m) => m.retry.politica[motivo].porque),
|
|
418
427
|
};
|
|
419
428
|
}
|
|
429
|
+
// RM-063 (F4): a escada de `runtime.unavailable` diz o proximo degrau do episodio; sem degrau, o dono e chamado.
|
|
430
|
+
const escada = motivo === 'runtime.unavailable' ? (0, runtime_escada_1.estadoDaEscada)((0, ledger_1.lerLedger)((0, thread_1.dirThread)(raiz, threadId)), fase) : null;
|
|
431
|
+
const naEscada = escada ? { degrau: escada.proximo, tipo: escada.proximo ? runtime_escada_1.DEGRAUS_DA_ESCADA[escada.proximo - 1] : null,
|
|
432
|
+
consumidos: escada.consumidos.map((d) => ({ degrau: d.degrau, tipo: d.tipo, resultado: d.resultado, em: d.em })) } : null;
|
|
433
|
+
if (escada && escada.proximo === null) {
|
|
434
|
+
return {
|
|
435
|
+
thread: threadId, modo: thread.modo, fase, motivo, detalhe, politica, acao: 'escalar-humano', tentativas, limite,
|
|
436
|
+
effort: effortBase, effortAnterior: effortBase, automatica: false, bloqueio: 'escalacao.limite',
|
|
437
|
+
razao: (0, locale_1.textoDoCatalogo)((m) => m.retry.escada.esgotada((0, runtime_escada_1.resumoDosDegraus)(escada.consumidos))), escada: naEscada,
|
|
438
|
+
};
|
|
439
|
+
}
|
|
420
440
|
// Limite de escalacao: pausa QUALQUER modo, inclusive #Auto.
|
|
421
441
|
if (tentativas >= limite) {
|
|
422
442
|
return {
|
|
@@ -439,7 +459,8 @@ function planejarRetry(carregado, threadId, opcoes = {}) {
|
|
|
439
459
|
// Da 2a tentativa em diante o esforco sobe um degrau, quando o manifesto permite.
|
|
440
460
|
// `tentativas` e quantas JA rodaram, entao a 1a tentativa (tentativas 0) sai no
|
|
441
461
|
// esforco base do manifesto e so a partir da 2a a escada anda.
|
|
442
|
-
|
|
462
|
+
// RM-063 (F4): runtime fora nao e prompt fraco. A escada de `runtime.unavailable` troca o destino, nunca o esforco.
|
|
463
|
+
const escala = manifesto.retry.escalar_esforco && tentativas >= 1 && !escada;
|
|
443
464
|
const effortAnterior = escalarEsforco(effortBase, Math.max(0, tentativas - 1));
|
|
444
465
|
const effort = escala ? escalarEsforco(effortBase, tentativas) : effortBase;
|
|
445
466
|
const acao = escala ? 'escalar-esforco' : politica.acao;
|
|
@@ -450,6 +471,10 @@ function planejarRetry(carregado, threadId, opcoes = {}) {
|
|
|
450
471
|
let bloqueio = null;
|
|
451
472
|
let automatica = politica.automatica;
|
|
452
473
|
let razao = (0, locale_1.textoDoCatalogo)((m) => m.retry.politica[motivo].porque);
|
|
474
|
+
// RM-063 (F4): o plano de `runtime.unavailable` diz o degrau da escada que a execucao sobe.
|
|
475
|
+
const degrau = escada?.proximo ?? null;
|
|
476
|
+
if (degrau)
|
|
477
|
+
razao = (0, locale_1.textoDoCatalogo)((m) => m.retry.escada.proximo(degrau, m.retry.escada.degraus[runtime_escada_1.DEGRAUS_DA_ESCADA[degrau - 1]]));
|
|
453
478
|
if (delegacao.permitida && politica.automatica) {
|
|
454
479
|
razao = (0, locale_1.textoDoCatalogo)((m) => m.retry.comDelegacao(m.retry.politica[motivo].porque, delegacao.razao, String(delegacao.delegado), String(delegacao.evidencia)));
|
|
455
480
|
}
|
|
@@ -476,7 +501,7 @@ function planejarRetry(carregado, threadId, opcoes = {}) {
|
|
|
476
501
|
}
|
|
477
502
|
return {
|
|
478
503
|
thread: threadId, modo: thread.modo, fase, motivo, detalhe, politica, acao, tentativas,
|
|
479
|
-
limite, effort, effortAnterior, automatica, bloqueio, razao,
|
|
504
|
+
limite, effort, effortAnterior, automatica, bloqueio, razao, ...(naEscada ? { escada: naEscada } : {}),
|
|
480
505
|
};
|
|
481
506
|
}
|
|
482
507
|
/** O esforco depois de `n` escaladas a partir do esforco base do manifesto. */
|
|
@@ -606,8 +631,8 @@ tomadaPrevia) {
|
|
|
606
631
|
dryRun: opcoes.dryRun === true,
|
|
607
632
|
};
|
|
608
633
|
}
|
|
609
|
-
const
|
|
610
|
-
const shaAtual = (0, phase_1.hashDoPrompt)(
|
|
634
|
+
const promptOriginal = fs.readFileSync(absoluto, 'utf8');
|
|
635
|
+
const shaAtual = (0, phase_1.hashDoPrompt)(promptOriginal);
|
|
611
636
|
if (shaAtual !== sha) {
|
|
612
637
|
return {
|
|
613
638
|
...vazio,
|
|
@@ -617,6 +642,10 @@ tomadaPrevia) {
|
|
|
617
642
|
dryRun: opcoes.dryRun === true,
|
|
618
643
|
};
|
|
619
644
|
}
|
|
645
|
+
const retomada = opcoes.checkpoint ? (0, retomada_checkpoint_1.prepararPromptDeRetomada)(raiz, thread, fase, { prompt: promptOriginal, promptPath: absoluto, promptSha256: sha }, !opcoes.dryRun) : null;
|
|
646
|
+
const prompt = retomada?.prompt ?? promptOriginal;
|
|
647
|
+
const promptExecutadoPath = retomada?.promptPath ?? absoluto;
|
|
648
|
+
const promptExecutadoSha = retomada?.promptSha256 ?? sha;
|
|
620
649
|
const violacoes = (0, policies_1.bloqueantes)((0, policies_1.avaliarPolicies)(manifesto, { gate: 'phase.dispatch', prompt }));
|
|
621
650
|
if (violacoes.length > 0) {
|
|
622
651
|
const motivo = (0, policies_1.motivoDominante)(violacoes);
|
|
@@ -630,7 +659,7 @@ tomadaPrevia) {
|
|
|
630
659
|
fase,
|
|
631
660
|
slug,
|
|
632
661
|
origem: opcoes.origem ?? 'retry',
|
|
633
|
-
evidencia: `prompt sha256 ${sha}
|
|
662
|
+
evidencia: `prompt sha256 ${promptExecutadoSha} (origem ${sha}; retomada recusada antes de despachar)`,
|
|
634
663
|
});
|
|
635
664
|
return { ...vazio, ok: false, motivo, detalhe, dryRun: opcoes.dryRun === true };
|
|
636
665
|
}
|
|
@@ -641,7 +670,7 @@ tomadaPrevia) {
|
|
|
641
670
|
: (0, runtime_context_1.novaIdentidadeDeDespacho)(thread.id, fase);
|
|
642
671
|
const canal = opcoes.canal ?? (0, conducao_1.canalDoProcesso)();
|
|
643
672
|
const doBlocoDaConducao = (0, setup_1.limitesDoBloco)(manifesto, (0, setup_1.lerSetup)(raiz), thread.modo, fase);
|
|
644
|
-
const pedidoDeConducao = { canal, correlacao: null, operacao: 'retry.run', fase, promptSha256:
|
|
673
|
+
const pedidoDeConducao = { canal, correlacao: null, operacao: 'retry.run', fase, promptSha256: promptExecutadoSha,
|
|
645
674
|
identidade: identidade.dispatchId, prazoMs: (0, phase_1.prazoDaSessao)(doBlocoDaConducao) };
|
|
646
675
|
let conducao = null;
|
|
647
676
|
if (tomadaPrevia) {
|
|
@@ -658,7 +687,7 @@ tomadaPrevia) {
|
|
|
658
687
|
const tomada = (0, conducao_1.tomarConducao)(raiz, thread.id, pedidoDeConducao);
|
|
659
688
|
if (!tomada.ok) {
|
|
660
689
|
if (tomada.idempotente && tomada.atual) {
|
|
661
|
-
(0, ledger_1.registrar)((0, thread_1.dirThread)(raiz, thread.id), thread.id, ledger_1.TIPOS_DE_EVENTO.despachoIdempotente, { fase, promptSha256:
|
|
690
|
+
(0, ledger_1.registrar)((0, thread_1.dirThread)(raiz, thread.id), thread.id, ledger_1.TIPOS_DE_EVENTO.despachoIdempotente, { fase, promptSha256: promptExecutadoSha, canal,
|
|
662
691
|
sessionId: tomada.atual.sessao, origem: opcoes.origem ?? 'retry',
|
|
663
692
|
razao: 'mesma fase e mesmo prompt de quem ja conduz: a sessao em andamento atende a retomada, sem sessao nova' });
|
|
664
693
|
const sessao = String(tomada.atual.sessao).slice(0, 8);
|
|
@@ -677,8 +706,9 @@ tomadaPrevia) {
|
|
|
677
706
|
try {
|
|
678
707
|
cwd = opcoes.cwd !== undefined ? (0, procedencia_1.exigirCwdLocal)(raiz, thread.id, opcoes.cwd, 'fila') : (0, procedencia_1.diretorioDaThread)(raiz, thread);
|
|
679
708
|
}
|
|
709
|
+
// RM-061 (F3b, GO-FIX 1): o erro do catalogo fica registrado, e a impressao o remonta.
|
|
680
710
|
catch (e) {
|
|
681
|
-
return { ...vazio, ok: false, motivo: 'tree.blocked', detalhe: e
|
|
711
|
+
return { ...vazio, ok: false, motivo: 'tree.blocked', detalhe: (0, locale_1.textoDoErro)(e), dryRun: opcoes.dryRun === true };
|
|
682
712
|
}
|
|
683
713
|
// Mesma resolucao do `ork phase run`: a retomada carimba no ledger o trio que ela de
|
|
684
714
|
// fato despachou, inclusive quando o pedido da fila trazia um modelo proprio. O setup
|
|
@@ -711,22 +741,19 @@ tomadaPrevia) {
|
|
|
711
741
|
}
|
|
712
742
|
return pendente;
|
|
713
743
|
}
|
|
714
|
-
//
|
|
715
|
-
//
|
|
716
|
-
// NotebookEdit e sem a allowlist do núcleo. O ramo Codex não muda.
|
|
744
|
+
// RM-064 T8: toda retomada abre com o mesmo contexto de runtime do `ork phase run`.
|
|
745
|
+
// Sem ele, a escada que troca para Codex perde o MCP vinculado à thread e ao despacho.
|
|
717
746
|
let contextoRuntime;
|
|
718
|
-
|
|
719
|
-
|
|
720
|
-
|
|
721
|
-
|
|
722
|
-
|
|
723
|
-
|
|
724
|
-
|
|
725
|
-
detalhe: (0, locale_1.textoDoCatalogo)((m) => m.retry.runtimeIndisponivel(erro)), dryRun: opcoes.dryRun === true };
|
|
726
|
-
}
|
|
727
|
-
if (contextoRuntime)
|
|
728
|
-
contextoRuntime.identidade = identidade;
|
|
747
|
+
try {
|
|
748
|
+
contextoRuntime = (0, runtime_context_1.contextoDoProjeto)(raiz, runtime, cwd, thread.id);
|
|
749
|
+
}
|
|
750
|
+
catch (e) {
|
|
751
|
+
const erro = e.message;
|
|
752
|
+
return { ...vazio, ok: false, motivo: 'runtime.unavailable',
|
|
753
|
+
detalhe: (0, locale_1.textoDoCatalogo)((m) => m.retry.runtimeIndisponivel(erro)), dryRun: opcoes.dryRun === true };
|
|
729
754
|
}
|
|
755
|
+
if (contextoRuntime)
|
|
756
|
+
contextoRuntime.identidade = identidade;
|
|
730
757
|
// I-33 (D4, D7): a retomada escolhe o perfil como o `ork phase run`, com o login conferido.
|
|
731
758
|
let escolha;
|
|
732
759
|
try {
|
|
@@ -754,10 +781,11 @@ tomadaPrevia) {
|
|
|
754
781
|
dryRun: opcoes.dryRun,
|
|
755
782
|
sandbox: manifesto.runtime.sandbox,
|
|
756
783
|
logDir: path.join((0, thread_1.dirThread)(raiz, thread.id), 'sessoes'),
|
|
757
|
-
vinculo: { thread: thread.id, fase, promptSha256:
|
|
784
|
+
vinculo: { thread: thread.id, fase, promptSha256: promptExecutadoSha },
|
|
758
785
|
...(perfil ? { perfil } : {}),
|
|
759
786
|
// RM-037 (defeito 2): o modo plano segue a mesma regra do `ork phase run`, pelo bloco.
|
|
760
|
-
|
|
787
|
+
contextoRuntime,
|
|
788
|
+
...(runtime === 'claude-bg' && (0, phase_1.modoDaSessaoDoBloco)(thread, fase).plano ? { colaboracao: 'plan' } : {}),
|
|
761
789
|
// I-36 (D4): a sessao retomada herda a identidade do despacho e o canal, como no `ork phase run`.
|
|
762
790
|
ambienteExtra: (0, conducao_1.ambienteDaConducao)(identidade.dispatchId, thread.id, canal),
|
|
763
791
|
});
|
|
@@ -775,15 +803,21 @@ tomadaPrevia) {
|
|
|
775
803
|
};
|
|
776
804
|
}
|
|
777
805
|
if (!resultado.ok || !resultado.sessionId) {
|
|
806
|
+
// RM-063 (F4, GO-FIX): o `claude --bg` lento diz o id e estoura o prazo com a sessao aberta. A falha guarda a sessao,
|
|
807
|
+
// como no `ork phase run`: e por ela que o retry e a escada provam que ninguem trabalha na worktree antes de outro
|
|
808
|
+
// destino.
|
|
809
|
+
const daSessao = resultado.sessionId ? { sessionId: resultado.sessionId } : {};
|
|
778
810
|
(0, ledger_1.registrar)((0, thread_1.dirThread)(raiz, thread.id), thread.id, 'phase_dispatch_failed', { fase, runtime, slug, cwd,
|
|
779
|
-
promptPath:
|
|
811
|
+
promptPath: promptExecutadoPath, promptSha256: promptExecutadoSha,
|
|
812
|
+
...(retomada ? { promptOriginalPath: absoluto, promptOriginalSha256: sha } : {}),
|
|
813
|
+
controlador: resultado.controlador, model, effort,
|
|
780
814
|
erro: resultado.erro ?? 'runtime.unavailable: sem sessionId', stderr: (resultado.stderr ?? '').slice(0, 500),
|
|
781
|
-
origem: 'retry', ...(perfil ? { perfil } : {}) });
|
|
815
|
+
origem: 'retry', ...(perfil ? { perfil } : {}), ...daSessao });
|
|
782
816
|
const sinal = resultado.rateLimit ?? null;
|
|
783
817
|
// RM-055: o redespacho recusado pelo que so o dono resolve reabre a pausa dele, com o mesmo comando.
|
|
784
818
|
const impedimento = !resultado.falhaDeConta && !sinal
|
|
785
819
|
? (0, impedimento_1.registrarImpedimentoDoDono)((0, thread_1.dirThread)(raiz, thread.id), thread, { fase, slug, runtime, cwd, origem: 'retry',
|
|
786
|
-
promptPath:
|
|
820
|
+
promptPath: promptExecutadoPath, promptSha256: promptExecutadoSha, perfil, saida: `${resultado.stderr ?? ''}\n${resultado.erro ?? ''}` })
|
|
787
821
|
: null;
|
|
788
822
|
if (impedimento) {
|
|
789
823
|
return { ok: false, slug, sessionId: null, verificada: false, motivo: impedimento.motivo,
|
|
@@ -800,7 +834,7 @@ tomadaPrevia) {
|
|
|
800
834
|
return {
|
|
801
835
|
ok: false,
|
|
802
836
|
slug,
|
|
803
|
-
sessionId: null,
|
|
837
|
+
sessionId: resultado.sessionId ?? null,
|
|
804
838
|
verificada: false,
|
|
805
839
|
// I-33 (D11b): falha de conta reconhecida na saida e o motivo mais especifico.
|
|
806
840
|
motivo: resultado.falhaDeConta?.motivo ?? (sinal ? 'runtime.rate-limited' : 'runtime.unavailable'),
|
|
@@ -822,8 +856,9 @@ tomadaPrevia) {
|
|
|
822
856
|
thread,
|
|
823
857
|
fase,
|
|
824
858
|
slug,
|
|
825
|
-
promptPath:
|
|
826
|
-
promptSha256:
|
|
859
|
+
promptPath: promptExecutadoPath,
|
|
860
|
+
promptSha256: promptExecutadoSha,
|
|
861
|
+
...(retomada ? { promptOriginal: { path: absoluto, sha256: sha } } : {}),
|
|
827
862
|
runtime,
|
|
828
863
|
cwd,
|
|
829
864
|
model,
|
|
@@ -839,10 +874,11 @@ tomadaPrevia) {
|
|
|
839
874
|
sessionId: resultado.sessionId,
|
|
840
875
|
verificada: resultado.verificada,
|
|
841
876
|
motivo: null,
|
|
842
|
-
detalhe: (0, locale_1.textoDoCatalogo)((m) => m.retry.redespachada(String(resultado.sessionId),
|
|
877
|
+
detalhe: (0, locale_1.textoDoCatalogo)((m) => m.retry.redespachada(String(resultado.sessionId), promptExecutadoSha.slice(0, 12), perfil ? perfil.id : null, runtime)),
|
|
843
878
|
sinal: null,
|
|
844
879
|
perfil: perfil ?? null,
|
|
845
880
|
comando: resultado.comando,
|
|
881
|
+
controlador: resultado.controlador,
|
|
846
882
|
dryRun: false,
|
|
847
883
|
};
|
|
848
884
|
}
|
|
@@ -895,6 +931,15 @@ function playbookDaRetomada(carregado, pedido, opcoes = {}) {
|
|
|
895
931
|
function retomarPedido(carregado, pedidoOriginal, opcoes = {}) {
|
|
896
932
|
const { raiz } = carregado;
|
|
897
933
|
const quando = opcoes.quando ?? (0, util_1.agora)();
|
|
934
|
+
// RM-058 N4 (D17 da ork-rm058n4): o pedido do despacho de um arco #Noctum é retomado pelo vigia do arco, pelo passo dele
|
|
935
|
+
// (conferência do envelope e reserva). Aqui ele não é redespachado nem regravado, e o ledger da thread não muda.
|
|
936
|
+
const arco = (0, ratelimit_1.arcoDoPedido)(pedidoOriginal);
|
|
937
|
+
if (arco) {
|
|
938
|
+
return { pedido: pedidoOriginal, playbook: 'mesma-sessao', slug: pedidoOriginal.slug, despachada: false, sessionId: null, verificada: false,
|
|
939
|
+
motivo: null, dryRun: opcoes.dryRun === true,
|
|
940
|
+
detalhe: `o pedido ${pedidoOriginal.id} é do arco ${arco}: quem o retoma é o vigia do arco, com a conferência do envelope e a reserva; ` +
|
|
941
|
+
`nada foi despachado (sem o vigia, o dono tira o pedido da fila com ork retry cancel ${pedidoOriginal.id} --motivo "..." e retoma a fase à mão)` };
|
|
942
|
+
}
|
|
898
943
|
const thread = (0, thread_1.lerThread)(raiz, pedidoOriginal.thread);
|
|
899
944
|
const dir = (0, thread_1.dirThread)(raiz, thread.id);
|
|
900
945
|
let pedido = pedidoOriginal;
|
|
@@ -973,6 +1018,7 @@ function retomarPedido(carregado, pedidoOriginal, opcoes = {}) {
|
|
|
973
1018
|
effort: alvo.effort,
|
|
974
1019
|
cwd: pedido.cwd,
|
|
975
1020
|
origem: 'retry.rate-limit',
|
|
1021
|
+
checkpoint: doPedido.checkpoint === true,
|
|
976
1022
|
dryRun: opcoes.dryRun,
|
|
977
1023
|
});
|
|
978
1024
|
(0, ledger_1.registrar)(dir, thread.id, ledger_1.TIPOS_DE_EVENTO.retryTentado, {
|
|
@@ -1084,7 +1130,8 @@ function alvoDaRetomada(carregado, thread, pedido) {
|
|
|
1084
1130
|
const principal = pedido.runtime ?? doBloco?.runtime ?? manifesto.runtime.adapter;
|
|
1085
1131
|
const candidatos = [{ runtime: principal, model: pedido.model, effort: pedido.effort },
|
|
1086
1132
|
...alvosDeFallback(doBloco, doBloco?.runtime ?? manifesto.runtime.adapter).filter(f => f.runtime !== principal)
|
|
1087
|
-
.map(f => ({ runtime: f.runtime, model: f.model, effort: f.effort ?? pedido.effort }))]
|
|
1133
|
+
.map(f => ({ runtime: f.runtime, model: f.model, effort: f.effort ?? pedido.effort }))]
|
|
1134
|
+
.filter(c => (0, runtime_context_1.capacidadeDoRuntimeNoProjeto)(raiz, c.runtime).capaz);
|
|
1088
1135
|
const runtimes = candidatos.map(c => c.runtime);
|
|
1089
1136
|
const store = (0, runtime_profiles_1.lerPerfisComContas)(raiz), politica = (0, runtime_profiles_1.politicaDeRotacao)(manifesto);
|
|
1090
1137
|
for (const c of candidatos) {
|
|
@@ -1145,11 +1192,12 @@ function alvosDeFallback(bloco, principal) {
|
|
|
1145
1192
|
function proximoAlvo(raiz, atual, fallback, excluir, politica, agoraMs = Date.now()) {
|
|
1146
1193
|
const store = (0, runtime_profiles_1.lerPerfisComContas)(raiz, agoraMs);
|
|
1147
1194
|
const perfis = [...excluir.perfis, ...(atual.perfil ? [atual.perfil.id] : [])];
|
|
1148
|
-
const mesmo = (0,
|
|
1195
|
+
const mesmo = (0, runtime_context_1.capacidadeDoRuntimeNoProjeto)(raiz, atual.runtime).capaz
|
|
1196
|
+
? (0, runtime_profiles_1.proximoPerfilDisponivel)(store, atual.runtime, politica, { excluir: perfis, agoraMs }) : null;
|
|
1149
1197
|
if (mesmo)
|
|
1150
1198
|
return { runtime: atual.runtime, perfil: (0, runtime_profiles_1.perfilDeDespacho)(mesmo), model: null, effort: null };
|
|
1151
1199
|
for (const f of fallback) {
|
|
1152
|
-
if (f.runtime === atual.runtime)
|
|
1200
|
+
if (f.runtime === atual.runtime || !(0, runtime_context_1.capacidadeDoRuntimeNoProjeto)(raiz, f.runtime).capaz)
|
|
1153
1201
|
continue;
|
|
1154
1202
|
if ((0, runtime_profiles_1.perfisDoRuntime)(store, f.runtime).length > 0) {
|
|
1155
1203
|
const p = (0, runtime_profiles_1.proximoPerfilDisponivel)(store, f.runtime, politica, { excluir: perfis, agoraMs });
|
|
@@ -1263,6 +1311,25 @@ function ultimoDespachoFalho(raiz, threadId, fase, silencio = false) {
|
|
|
1263
1311
|
}
|
|
1264
1312
|
return null;
|
|
1265
1313
|
}
|
|
1314
|
+
/**
|
|
1315
|
+
* RM-063 (F4, GO-FIX): quantas recusas seguidas, no episodio da fase, sairam porque o runtime nao respondeu a prova de
|
|
1316
|
+
* vida (`semProva`). Uma tentativa que andou (contada, ou recusada com sessao viva) zera a conta.
|
|
1317
|
+
*/
|
|
1318
|
+
function recusasSemProvaSeguidas(eventos, fase) {
|
|
1319
|
+
const desde = (0, runtime_escada_1.inicioDoEpisodio)(eventos, fase);
|
|
1320
|
+
let seguidas = 0;
|
|
1321
|
+
for (let i = eventos.length - 1; i > desde; i--) {
|
|
1322
|
+
const e = eventos[i];
|
|
1323
|
+
if (e.tipo !== ledger_1.TIPOS_DE_EVENTO.retryTentado || e.fase !== fase || e.motivo !== 'runtime.unavailable')
|
|
1324
|
+
continue;
|
|
1325
|
+
if (e.semProva !== true)
|
|
1326
|
+
break;
|
|
1327
|
+
seguidas += 1;
|
|
1328
|
+
}
|
|
1329
|
+
return seguidas;
|
|
1330
|
+
}
|
|
1331
|
+
/** Recusas seguidas sem resposta do runtime, no mesmo episodio, ate o dono ser chamado. */
|
|
1332
|
+
exports.LIMITE_SEM_PROVA = 3;
|
|
1266
1333
|
/**
|
|
1267
1334
|
* Executa a acao de retry do ultimo gate reprovado da thread.
|
|
1268
1335
|
*
|
|
@@ -1308,6 +1375,28 @@ function executarRetry(carregado, threadId, opcoes = {}) {
|
|
|
1308
1375
|
razao: plano.razao,
|
|
1309
1376
|
});
|
|
1310
1377
|
if (!plano.automatica || plano.motivo === null) {
|
|
1378
|
+
// RM-063 (F4, GO-FIX, achado 9): a escada esgotada pelo plano (a sessao do ultimo degrau morreu depois) chama o dono
|
|
1379
|
+
// pela escada, com as alternativas e o comando que retoma com o mesmo prompt; a escalada generica so repetia o retry.
|
|
1380
|
+
if (plano.motivo === 'runtime.unavailable' && plano.escada && plano.escada.degrau === null && plano.fase && !opcoes.dryRun) {
|
|
1381
|
+
const eventos = (0, ledger_1.lerLedger)(dir);
|
|
1382
|
+
const ultimo = despachoParaRedespachar(eventos, plano.fase, null);
|
|
1383
|
+
if (ultimo && typeof ultimo.promptPath === 'string' && typeof ultimo.promptSha256 === 'string') {
|
|
1384
|
+
const origem = (0, runtime_escada_1.destinoDoEpisodio)(eventos, plano.fase);
|
|
1385
|
+
let perfil = null;
|
|
1386
|
+
try {
|
|
1387
|
+
perfil = perfilDoEvento(ultimo);
|
|
1388
|
+
}
|
|
1389
|
+
catch {
|
|
1390
|
+
perfil = null;
|
|
1391
|
+
}
|
|
1392
|
+
const despacho = { promptPath: localizarPromptGravado(raiz, threadId, ultimo.promptPath, ultimo.promptSha256) ?? ultimo.promptPath,
|
|
1393
|
+
promptSha256: ultimo.promptSha256, perfil: origem?.perfil ?? perfil,
|
|
1394
|
+
runtime: origem?.runtime ?? (typeof ultimo.runtime === 'string' ? ultimo.runtime : carregado.manifesto.runtime.adapter),
|
|
1395
|
+
model: origem?.model ?? null, effort: origem?.effort ?? null };
|
|
1396
|
+
const detalhe = (0, runtime_escada_1.escalarEscada)(carregado, thread, plano.fase, despacho, (0, runtime_escada_1.estadoDaEscada)(eventos, plano.fase).consumidos, plano.tentativas, plano.limite);
|
|
1397
|
+
return { ...vazio, detalhe };
|
|
1398
|
+
}
|
|
1399
|
+
}
|
|
1311
1400
|
// Escalacao e custo viram gate humano explicito no ledger, nao silencio.
|
|
1312
1401
|
if (plano.bloqueio === 'escalacao.limite' || plano.acao === 'sem-retry') {
|
|
1313
1402
|
(0, gates_1.registrarGateBloqueado)(dir, threadId, {
|
|
@@ -1372,7 +1461,8 @@ function executarRetry(carregado, threadId, opcoes = {}) {
|
|
|
1372
1461
|
}
|
|
1373
1462
|
if (acaoBase === 'sincronizar-worktree') {
|
|
1374
1463
|
const sync = (0, worktree_1.sincronizarWorktree)(carregado, threadId, { dryRun: opcoes.dryRun });
|
|
1375
|
-
|
|
1464
|
+
// RM-061 (F3b): o detalhe da worktree tambem vem do catalogo; remontado aqui, ele segue o locale da impressao.
|
|
1465
|
+
const detalhe = (0, locale_1.textoDoCatalogo)((m) => sync.ok ? m.retry.sincronizada(sync.passos.join('; ')) : m.retry.sincronizacaoFalhou((0, locale_1.remontar)(sync.detalhe)));
|
|
1376
1466
|
registrarTentativa(sync.ok, detalhe);
|
|
1377
1467
|
return { ...vazio, executada: sync.ok, sync, detalhe };
|
|
1378
1468
|
}
|
|
@@ -1419,7 +1509,60 @@ function executarRetry(carregado, threadId, opcoes = {}) {
|
|
|
1419
1509
|
// despacho que falhou depois de abrir a sessao (o `claude --bg` lento) e o adaptador que lanca deixariam duas sessoes
|
|
1420
1510
|
// na mesma worktree. Sem a prova, nada e redespachado, e a tentativa nao conta.
|
|
1421
1511
|
const ids = [falho.sessionId, gateDoPlano?.sessionId].filter((x) => typeof x === 'string' && !!x);
|
|
1422
|
-
const
|
|
1512
|
+
const provar = (conhecidos) => (0, vida_da_thread_1.sessaoVivaNaThread)(raiz, thread, conhecidos);
|
|
1513
|
+
let viva = provar(ids);
|
|
1514
|
+
// RM-063 (F4): `runtime.unavailable` sobe a escada de recuperacao (reerguer o daemon, o fallback do bloco, outro perfil),
|
|
1515
|
+
// sempre com o mesmo prompt e o mesmo sha256. Ate aqui o retry so sabia repetir o destino que tinha acabado de falhar.
|
|
1516
|
+
if (plano.motivo === 'runtime.unavailable') {
|
|
1517
|
+
let perfilFalho = null;
|
|
1518
|
+
try {
|
|
1519
|
+
perfilFalho = perfilDoEvento(falho);
|
|
1520
|
+
}
|
|
1521
|
+
catch {
|
|
1522
|
+
perfilFalho = null;
|
|
1523
|
+
}
|
|
1524
|
+
// O destino de origem e o do pedido novo que abriu o episodio; o despacho do gate completa o que faltar.
|
|
1525
|
+
const origem = (0, runtime_escada_1.destinoDoEpisodio)((0, ledger_1.lerLedger)(dir), plano.fase);
|
|
1526
|
+
const sha = falho.promptSha256;
|
|
1527
|
+
// GO-FIX (achado 10): o caminho do ledger e relativo a quem despachou; o absoluto e o que o dono roda de qualquer lugar.
|
|
1528
|
+
const promptPath = localizarPromptGravado(raiz, threadId, falho.promptPath, sha) ?? falho.promptPath;
|
|
1529
|
+
const despacho = { promptPath, promptSha256: sha, perfil: origem?.perfil ?? perfilFalho,
|
|
1530
|
+
runtime: origem?.runtime ?? (typeof falho.runtime === 'string' ? falho.runtime : carregado.manifesto.runtime.adapter),
|
|
1531
|
+
model: origem?.model ?? (typeof falho.model === 'string' ? falho.model : null),
|
|
1532
|
+
effort: origem?.effort ?? (typeof falho.effort === 'string' ? falho.effort : plano.effort) };
|
|
1533
|
+
// GO-FIX (a conferir da revisao): com o daemon travado, o proprio `claude agents` pode nao responder, e a prova de vida
|
|
1534
|
+
// segurava a escada para sempre. No claude-bg, o degrau 1 reergue o daemon antes (o `--keep-workers` deixa as sessoes
|
|
1535
|
+
// de pe) e a prova e refeita; sem resposta de novo, nada sai, e na terceira vez seguida no episodio o dono e chamado.
|
|
1536
|
+
let daemonJaReerguido = null;
|
|
1537
|
+
if (!viva.respondeu && despacho.runtime === 'claude-bg' && !opcoes.dryRun) {
|
|
1538
|
+
daemonJaReerguido = (0, runtime_escada_1.reerguerDaemon)(opcoes.daemon ?? claude_bg_2.DAEMON_DO_CLAUDE, despacho.perfil);
|
|
1539
|
+
viva = provar(ids);
|
|
1540
|
+
}
|
|
1541
|
+
if (!viva.respondeu || viva.sessionId) {
|
|
1542
|
+
const { sessionId: sessao, detalhe: falhaDaConsulta } = viva;
|
|
1543
|
+
const detalhe = sessao ? (0, locale_1.textoDoCatalogo)((m) => m.retry.sessaoAindaViva(sessao.slice(0, 8), threadId))
|
|
1544
|
+
: (0, locale_1.textoDoCatalogo)((m) => m.retry.runtimeSemProva(falhaDaConsulta ?? '', threadId));
|
|
1545
|
+
registrarTentativa(false, detalhe, { conta: false, ...(sessao ? {} : { semProva: true }),
|
|
1546
|
+
...(daemonJaReerguido ? { daemon: daemonJaReerguido } : {}) });
|
|
1547
|
+
const seguidas = sessao ? 0 : recusasSemProvaSeguidas((0, ledger_1.lerLedger)(dir), plano.fase);
|
|
1548
|
+
if (seguidas >= exports.LIMITE_SEM_PROVA && !opcoes.dryRun) {
|
|
1549
|
+
const escada = (0, runtime_escada_1.estadoDaEscada)((0, ledger_1.lerLedger)(dir), plano.fase);
|
|
1550
|
+
const motivo = (0, locale_1.textoDoCatalogo)((m) => m.retry.escada.semResposta(seguidas, falhaDaConsulta ?? '-'));
|
|
1551
|
+
return { ...vazio, detalhe: (0, runtime_escada_1.escalarEscada)(carregado, thread, plano.fase, despacho, escada.consumidos, plano.tentativas, plano.limite, motivo) };
|
|
1552
|
+
}
|
|
1553
|
+
return { ...vazio, detalhe };
|
|
1554
|
+
}
|
|
1555
|
+
const saida = (0, runtime_escada_1.subirAEscada)({
|
|
1556
|
+
carregado, thread, fase: plano.fase, despacho,
|
|
1557
|
+
tentativas: plano.tentativas, limite: plano.limite, dryRun: opcoes.dryRun, daemon: opcoes.daemon, daemonJaReerguido,
|
|
1558
|
+
idsConhecidos: ids, provaDeVida: provar,
|
|
1559
|
+
redespachar: (d) => redespachar(carregado, thread, plano.fase, promptPath, sha, { runtime: d.runtime, perfil: d.perfil,
|
|
1560
|
+
model: d.model, effort: d.effort, origem: 'retry.escada', dryRun: opcoes.dryRun }),
|
|
1561
|
+
// RM-055 (D2): a recusa do runtime por um impedimento do dono nao gasta tentativa, tambem na escada.
|
|
1562
|
+
registrarTentativa: (ok, detalhe, extra = {}) => registrarTentativa(ok, detalhe, { ...extra, ...((0, impedimento_1.ehImpedimentoDoDono)(extra.motivoDoRedespacho) ? { conta: false } : {}) }),
|
|
1563
|
+
});
|
|
1564
|
+
return { ...vazio, executada: saida.executada, redespacho: saida.redespacho, detalhe: saida.detalhe };
|
|
1565
|
+
}
|
|
1423
1566
|
if (!viva.respondeu || viva.sessionId) {
|
|
1424
1567
|
const { sessionId: sessao, detalhe: falhaDaConsulta } = viva;
|
|
1425
1568
|
const detalhe = sessao ? (0, locale_1.textoDoCatalogo)((m) => m.retry.sessaoAindaViva(sessao.slice(0, 8), threadId))
|
|
@@ -1447,11 +1590,10 @@ function executarRetry(carregado, threadId, opcoes = {}) {
|
|
|
1447
1590
|
};
|
|
1448
1591
|
}
|
|
1449
1592
|
/**
|
|
1450
|
-
* D5 +
|
|
1451
|
-
*
|
|
1452
|
-
*
|
|
1453
|
-
*
|
|
1454
|
-
* tentativas. Sem destino: fila ate o menor prazo, ou o humano quando nenhum prazo existe.
|
|
1593
|
+
* D5 + RM-064 T2/T3: rotação depois de falha da conta. Produção parcial sob cota segue com um
|
|
1594
|
+
* checkpoint derivado do ledger e do Git; sem produção, o prompt original segue no próximo
|
|
1595
|
+
* destino. Recusa da conta no redespacho continua a rotação dentro do limite de tentativas.
|
|
1596
|
+
* Sem destino: fila até o menor prazo, ou o humano quando nenhum prazo existe.
|
|
1455
1597
|
*/
|
|
1456
1598
|
function rotacionarConta(carregado, thread, plano, opcoes, vazio, registrarTentativa) {
|
|
1457
1599
|
const { raiz, manifesto } = carregado;
|
|
@@ -1486,15 +1628,18 @@ function rotacionarConta(carregado, thread, plano, opcoes, vazio, registrarTenta
|
|
|
1486
1628
|
const erro = e.message;
|
|
1487
1629
|
return escalar('perfil registrado invalido', (0, locale_1.textoDoCatalogo)((m) => m.retry.rotacaoRecusada(erro)));
|
|
1488
1630
|
}
|
|
1489
|
-
//
|
|
1631
|
+
// RM-064 T3: produção parcial sob cota é preservada no checkpoint; não é razão para recomeçar nem escalar.
|
|
1632
|
+
let checkpoint = false;
|
|
1490
1633
|
if (typeof gate?.sessionId === 'string' && typeof gate.despachoEm === 'string') {
|
|
1491
1634
|
const producao = producaoNoIntervalo(raiz, thread, { sessionId: gate.sessionId, fase, despachadaEm: gate.despachoEm }, eventos);
|
|
1492
|
-
|
|
1493
|
-
|
|
1494
|
-
}
|
|
1635
|
+
checkpoint = motivo === 'runtime.quota-exhausted' &&
|
|
1636
|
+
(producao.produziu || gate?.origem === 'account.quota-exhausted');
|
|
1495
1637
|
}
|
|
1638
|
+
const promptOriginalPath = typeof despacho.promptOriginalPath === 'string' ? despacho.promptOriginalPath : despacho.promptPath;
|
|
1639
|
+
const promptOriginalSha = typeof despacho.promptOriginalSha256 === 'string' ? despacho.promptOriginalSha256 : despacho.promptSha256;
|
|
1496
1640
|
const doBloco = (0, setup_1.configDoBloco)((0, setup_1.lerSetup)(raiz), thread.modo, fase);
|
|
1497
|
-
const fallback = alvosDeFallback(doBloco, doBloco?.runtime ?? manifesto.runtime.adapter)
|
|
1641
|
+
const fallback = alvosDeFallback(doBloco, doBloco?.runtime ?? manifesto.runtime.adapter)
|
|
1642
|
+
.filter(f => (0, runtime_context_1.capacidadeDoRuntimeNoProjeto)(raiz, f.runtime).capaz);
|
|
1498
1643
|
const politica = (0, runtime_profiles_1.politicaDeRotacao)(manifesto);
|
|
1499
1644
|
const falha = sinalDoGate(gate, motivo);
|
|
1500
1645
|
// I-33 (D12): o observador ja marca o perfil no caminho terminal; remarcar empurraria o prazo a cada retry.
|
|
@@ -1516,7 +1661,7 @@ function rotacionarConta(carregado, thread, plano, opcoes, vazio, registrarTenta
|
|
|
1516
1661
|
(0, ledger_1.registrar)(dir, thread.id, ledger_1.TIPOS_DE_EVENTO.perfilRotacionado, { fase, motivo: falhaAtual.motivo, origem: 'retry.rotacao',
|
|
1517
1662
|
de: { runtime: atual.runtime, perfil: atual.perfil?.id ?? null },
|
|
1518
1663
|
para: para ? { runtime: para.runtime, perfil: para.perfil?.id ?? null } : null,
|
|
1519
|
-
evidencia: falhaAtual.trecho, razao, promptSha256:
|
|
1664
|
+
evidencia: falhaAtual.trecho, razao, promptSha256: promptOriginalSha, modo: thread.modo,
|
|
1520
1665
|
autorizadoPor: `politica de retry da I-33 (D5), bloco sem pausa ou delegado no modo ${thread.modo}` });
|
|
1521
1666
|
};
|
|
1522
1667
|
for (;;) {
|
|
@@ -1525,11 +1670,11 @@ function rotacionarConta(carregado, thread, plano, opcoes, vazio, registrarTenta
|
|
|
1525
1670
|
break;
|
|
1526
1671
|
emitir(alvo, alvo.runtime === atual.runtime ? 'proximo perfil ativo do mesmo runtime' : 'fallback de runtime pela ordem do bloco');
|
|
1527
1672
|
const mudouRuntime = alvo.runtime !== runtime;
|
|
1528
|
-
ultimo = redespachar(carregado, thread, fase,
|
|
1673
|
+
ultimo = redespachar(carregado, thread, fase, promptOriginalPath, promptOriginalSha, {
|
|
1529
1674
|
runtime: alvo.runtime, perfil: alvo.perfil?.id ?? null,
|
|
1530
1675
|
model: mudouRuntime ? alvo.model : typeof despacho.model === 'string' ? despacho.model : null,
|
|
1531
1676
|
effort: mudouRuntime ? alvo.effort ?? (typeof despacho.effort === 'string' ? despacho.effort : null) : plano.effort,
|
|
1532
|
-
origem: 'retry.rotacao', dryRun: opcoes.dryRun,
|
|
1677
|
+
origem: 'retry.rotacao', checkpoint, dryRun: opcoes.dryRun,
|
|
1533
1678
|
});
|
|
1534
1679
|
registrarTentativa(ultimo.ok, ultimo.detalhe);
|
|
1535
1680
|
tentativas += 1;
|
|
@@ -1565,14 +1710,16 @@ function rotacionarConta(carregado, thread, plano, opcoes, vazio, registrarTenta
|
|
|
1565
1710
|
emitir(null, `nenhum perfil ativo em ${runtimes.join(', ')}: fila duravel ate ${liberaEm}`);
|
|
1566
1711
|
if (opcoes.dryRun)
|
|
1567
1712
|
return { ...vazio, detalhe: (0, locale_1.textoDoCatalogo)((m) => m.retry.entrariaNaFila(liberaEm)) };
|
|
1568
|
-
|
|
1569
|
-
promptPath:
|
|
1713
|
+
let pedido = (0, ratelimit_1.enfileirar)(carregado, { thread: thread.id, fase, slug: typeof despacho.slug === 'string' ? despacho.slug : (0, phase_1.slugDaSessao)(thread, fase),
|
|
1714
|
+
promptPath: promptOriginalPath, promptSha256: promptOriginalSha,
|
|
1570
1715
|
cwd: typeof despacho.cwd === 'string' ? despacho.cwd : thread.worktree ?? raiz,
|
|
1571
1716
|
model: typeof despacho.model === 'string' ? despacho.model : null, effort: typeof despacho.effort === 'string' ? despacho.effort : null,
|
|
1572
1717
|
sinal: { resetEm: prazo, fonte: prazo ? 'iso' : 'sem-horario', trecho: falhaAtual.trecho },
|
|
1573
1718
|
detalhe: `${falhaAtual.motivo}: nenhum perfil ativo em ${runtimes.join(', ')}`, runtime, perfil: null, motivo: falhaAtual.motivo });
|
|
1719
|
+
if (checkpoint)
|
|
1720
|
+
pedido = (0, ratelimit_1.gravarPedido)(raiz, { ...pedido, checkpoint: true });
|
|
1574
1721
|
(0, ledger_1.registrar)(dir, thread.id, ledger_1.TIPOS_DE_EVENTO.rateLimitEnfileirado, { fase, slug: pedido.slug, pedido: pedido.id, liberaEm: pedido.liberaEm,
|
|
1575
|
-
janelaEstimada: pedido.janelaEstimada, motivo: falhaAtual.motivo, promptSha256:
|
|
1722
|
+
janelaEstimada: pedido.janelaEstimada, motivo: falhaAtual.motivo, promptSha256: promptOriginalSha, checkpoint,
|
|
1576
1723
|
correcao: `ork retry resume (ou aguarde ate ${pedido.liberaEm})` });
|
|
1577
1724
|
registrarTentativa(true, `fila duravel: pedido ${pedido.id} libera em ${pedido.liberaEm}`);
|
|
1578
1725
|
return { ...vazio, executada: true, fila: [pedido], redespacho: ultimo, detalhe: (0, locale_1.textoDoCatalogo)((m) => m.retry.pedidoAte(pedido.id, pedido.liberaEm)) };
|
|
@@ -1625,14 +1772,16 @@ function destinosQueRecusaramOModelo(eventos, fase) {
|
|
|
1625
1772
|
*/
|
|
1626
1773
|
function proximoDestinoDoModelo(raiz, runtime, model, fallback, recusados) {
|
|
1627
1774
|
const store = (0, runtime_profiles_1.lerPerfisComContas)(raiz);
|
|
1628
|
-
const
|
|
1629
|
-
|
|
1775
|
+
const mesmo = (0, runtime_context_1.capacidadeDoRuntimeNoProjeto)(raiz, runtime).capaz
|
|
1776
|
+
? (0, runtime_profiles_1.perfisDisponiveis)(store, runtime).find(p => !recusados.has(chaveDoModelo(runtime, p.id, model))) : null;
|
|
1630
1777
|
if (mesmo)
|
|
1631
1778
|
return { runtime, perfil: (0, runtime_profiles_1.perfilDeDespacho)(mesmo), model, effort: null };
|
|
1632
1779
|
for (const f of fallback) {
|
|
1780
|
+
if (!(0, runtime_context_1.capacidadeDoRuntimeNoProjeto)(raiz, f.runtime).capaz)
|
|
1781
|
+
continue;
|
|
1633
1782
|
const perfis = (0, runtime_profiles_1.perfisDoRuntime)(store, f.runtime);
|
|
1634
1783
|
if (perfis.length) {
|
|
1635
|
-
const p =
|
|
1784
|
+
const p = (0, runtime_profiles_1.perfisDisponiveis)(store, f.runtime).find(x => !recusados.has(chaveDoModelo(f.runtime, x.id, f.model)));
|
|
1636
1785
|
if (p)
|
|
1637
1786
|
return { runtime: f.runtime, perfil: (0, runtime_profiles_1.perfilDeDespacho)(p), model: f.model, effort: f.effort ?? null };
|
|
1638
1787
|
continue;
|
|
@@ -1697,7 +1846,8 @@ function trocarDestinoDoModelo(carregado, thread, plano, opcoes, vazio, registra
|
|
|
1697
1846
|
}
|
|
1698
1847
|
const recusados = new Set([...destinosQueRecusaramOModelo(eventos, fase), chaveDoModelo(runtime, perfil?.id ?? null, model)]);
|
|
1699
1848
|
const doBloco = (0, setup_1.configDoBloco)((0, setup_1.lerSetup)(raiz), thread.modo, fase);
|
|
1700
|
-
const fallback = alvosDeFallback(doBloco, doBloco?.runtime ?? manifesto.runtime.adapter)
|
|
1849
|
+
const fallback = alvosDeFallback(doBloco, doBloco?.runtime ?? manifesto.runtime.adapter)
|
|
1850
|
+
.filter(f => (0, runtime_context_1.capacidadeDoRuntimeNoProjeto)(raiz, f.runtime).capaz);
|
|
1701
1851
|
let atual = { runtime, perfil, model };
|
|
1702
1852
|
let tentativas = plano.tentativas;
|
|
1703
1853
|
for (;;) {
|
|
@@ -1753,6 +1903,10 @@ function textoDoPlano(p) {
|
|
|
1753
1903
|
linhas.push(m.tentativas(p.tentativas, p.limite));
|
|
1754
1904
|
linhas.push(m.esforco(p.effort, p.effort !== p.effortAnterior ? p.effortAnterior : null));
|
|
1755
1905
|
linhas.push(m.automatica(p.automatica));
|
|
1906
|
+
// RM-063 (F4): o degrau da escada de `runtime.unavailable`, ou o fim dela.
|
|
1907
|
+
const escada = p.escada;
|
|
1908
|
+
if (escada)
|
|
1909
|
+
linhas.push(escada.degrau && escada.tipo ? m.escada.noPlano(escada.degrau, m.escada.degraus[escada.tipo]) : m.escada.noPlanoEsgotada);
|
|
1756
1910
|
if (p.bloqueio)
|
|
1757
1911
|
linhas.push(m.bloqueio(p.bloqueio));
|
|
1758
1912
|
linhas.push(m.razao((0, locale_1.remontar)(p.razao)));
|
|
@@ -1791,19 +1945,20 @@ function textoDoRetry(r) {
|
|
|
1791
1945
|
}
|
|
1792
1946
|
/** Texto de `ork retry resume`. */
|
|
1793
1947
|
function textoDaRetomada(rs) {
|
|
1948
|
+
const m = (0, locale_1.msg)().retry.complementar;
|
|
1794
1949
|
if (rs.length === 0) {
|
|
1795
|
-
return
|
|
1950
|
+
return m.retomadaVazia;
|
|
1796
1951
|
}
|
|
1797
1952
|
const linhas = [];
|
|
1798
1953
|
for (const r of rs) {
|
|
1799
|
-
linhas.push(
|
|
1800
|
-
linhas.push(
|
|
1801
|
-
linhas.push(
|
|
1802
|
-
linhas.push(
|
|
1954
|
+
linhas.push(m.retomadaCabecalho(r.pedido.id, r.pedido.thread, r.pedido.fase));
|
|
1955
|
+
linhas.push(m.playbook(r.playbook));
|
|
1956
|
+
linhas.push(m.slug(r.slug));
|
|
1957
|
+
linhas.push(m.retomada(r.despachada, r.sessionId));
|
|
1803
1958
|
if (r.motivo)
|
|
1804
|
-
linhas.push(
|
|
1805
|
-
linhas.push(
|
|
1806
|
-
linhas.push(
|
|
1959
|
+
linhas.push(m.motivoRetomada(r.motivo));
|
|
1960
|
+
linhas.push(m.detalhe((0, horario_1.localizarTexto)(r.detalhe)));
|
|
1961
|
+
linhas.push(m.estado(m.estados[r.pedido.estado] ?? r.pedido.estado));
|
|
1807
1962
|
}
|
|
1808
1963
|
if (rs.some((r) => (0, horario_1.localizarTexto)(r.detalhe) !== r.detalhe))
|
|
1809
1964
|
linhas.push((0, horario_1.legendaDoFuso)());
|