@orkastery/cli 0.5.6 → 0.6.1
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 +123 -9
- 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/adapters/grok-events.js +227 -0
- package/dist/adapters/grok-mcp-servidor.js +612 -0
- package/dist/adapters/grok-mcp.js +178 -0
- package/dist/adapters/grok.js +686 -0
- package/dist/agendador-cpu.js +92 -0
- 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 +23 -10
- 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 +528 -0
- package/dist/check-modo.js +41 -0
- package/dist/check-paralelo.js +238 -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 +89 -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 +89 -89
- package/dist/doctor-forja.js +343 -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 +154 -54
- 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 +33 -21
- 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 +20 -1
- package/dist/hosts.js +104 -134
- package/dist/index.js +864 -554
- package/dist/indice-vetorial.js +14 -12
- package/dist/init.js +11 -2
- package/dist/integracoes-locais.js +4 -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 +228 -0
- package/dist/locale-adapter.js +291 -0
- package/dist/locale-ajuda.js +86 -10
- 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 +288 -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 +183 -6
- package/dist/locale-security-scan.js +69 -0
- package/dist/locale-setup.js +192 -0
- package/dist/locale-ship.js +177 -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 +293 -12
- 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 +90 -15
- package/dist/mcp-noctum.js +101 -0
- package/dist/mcp-server.js +116 -22
- 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/merge-da-entrega.js +85 -0
- package/dist/modos-migracao.js +8 -6
- package/dist/modos.js +17 -18
- package/dist/network-roadmap.js +94 -54
- package/dist/noctum-aceite.js +929 -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 +539 -0
- package/dist/noctum-coordenacao.js +1225 -0
- package/dist/noctum-entrega.js +1217 -0
- package/dist/noctum-envelope.js +253 -17
- package/dist/noctum-execucao.js +100 -24
- package/dist/noctum-fechamento.js +416 -0
- package/dist/noctum-fila.js +49 -10
- package/dist/noctum-guarda.js +333 -0
- package/dist/noctum-integracao.js +507 -0
- package/dist/noctum-maquinas.js +387 -0
- package/dist/noctum-medicao.js +450 -0
- package/dist/noctum-modo.js +390 -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 +594 -0
- package/dist/noctum-rede.js +102 -0
- package/dist/noctum-registro.js +215 -0
- package/dist/noctum-relatorio.js +861 -0
- package/dist/noctum-resposta.js +207 -0
- package/dist/noctum-retomada-rede.js +71 -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 +679 -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 +160 -139
- package/dist/phase.js +96 -42
- package/dist/policies.js +33 -0
- package/dist/postura-local.js +11 -6
- package/dist/preflight.js +2 -1
- 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 +13 -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 +326 -78
- package/dist/roadmap-reservas.js +32 -32
- package/dist/runtime-ambiente.js +5 -0
- package/dist/runtime-context.js +279 -85
- package/dist/runtime-escada.js +429 -0
- package/dist/runtime-profiles.js +130 -63
- package/dist/runtimes.js +42 -5
- package/dist/saida-segura.js +3 -2
- package/dist/security-scan/agil.js +366 -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 +196 -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-grok.js +425 -0
- package/dist/session-watcher.js +174 -13
- package/dist/sessoes-contas.js +42 -5
- package/dist/sessoes-inventario.js +1 -1
- package/dist/sessoes.js +25 -23
- package/dist/setup.js +67 -66
- 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 +500 -0
- package/dist/verify.js +491 -32
- 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 +10 -5
- 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/phase.js
CHANGED
|
@@ -33,12 +33,13 @@ var __importStar = (this && this.__importStar) || (function () {
|
|
|
33
33
|
};
|
|
34
34
|
})();
|
|
35
35
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
36
|
-
exports.REGRAS_DE_EVIDENCIA = exports.CONTRATO_DAS_FASES = void 0;
|
|
36
|
+
exports.REGRAS_DE_EVIDENCIA = exports.REGRA_DAS_ESPERAS = exports.CONTRATO_DAS_FASES = void 0;
|
|
37
37
|
exports.escolherPerfil = escolherPerfil;
|
|
38
38
|
exports.perfilPedido = perfilPedido;
|
|
39
39
|
exports.perfilParaDespacho = perfilParaDespacho;
|
|
40
40
|
exports.runtimeCruzadoParaDespacho = runtimeCruzadoParaDespacho;
|
|
41
41
|
exports.estadoParaDespacho = estadoParaDespacho;
|
|
42
|
+
exports.fechoDoGo = fechoDoGo;
|
|
42
43
|
exports.fasesDoCicloNoPrompt = fasesDoCicloNoPrompt;
|
|
43
44
|
exports.valoresDoPrompt = valoresDoPrompt;
|
|
44
45
|
exports.montarPrompt = montarPrompt;
|
|
@@ -72,6 +73,7 @@ const board_1 = require("./board");
|
|
|
72
73
|
const verify_1 = require("./verify");
|
|
73
74
|
const session_watcher_1 = require("./session-watcher");
|
|
74
75
|
const session_watcher_claude_1 = require("./session-watcher-claude");
|
|
76
|
+
const session_watcher_grok_1 = require("./session-watcher-grok");
|
|
75
77
|
const manifest_1 = require("./manifest");
|
|
76
78
|
const mcp_grafo_1 = require("./mcp-grafo");
|
|
77
79
|
const runtimes_1 = require("./runtimes");
|
|
@@ -83,10 +85,12 @@ const ratelimit_1 = require("./ratelimit");
|
|
|
83
85
|
const impedimento_1 = require("./impedimento");
|
|
84
86
|
const claude_bg_1 = require("./adapters/claude-bg");
|
|
85
87
|
const codex_1 = require("./adapters/codex");
|
|
88
|
+
const grok_1 = require("./adapters/grok");
|
|
86
89
|
const memoria_1 = require("./memoria");
|
|
87
90
|
const prompts_1 = require("./prompts");
|
|
88
91
|
const slug_1 = require("./slug");
|
|
89
92
|
const locale_1 = require("./locale");
|
|
93
|
+
const locale_prompts_1 = require("./locale-prompts");
|
|
90
94
|
const thread_1 = require("./thread");
|
|
91
95
|
const types_1 = require("./types");
|
|
92
96
|
const util_1 = require("./util");
|
|
@@ -96,6 +100,7 @@ const horario_1 = require("./horario");
|
|
|
96
100
|
const runtime_profiles_1 = require("./runtime-profiles");
|
|
97
101
|
const sessoes_contas_1 = require("./sessoes-contas");
|
|
98
102
|
const maquina_1 = require("./maquina");
|
|
103
|
+
const trabalho_thread_1 = require("./trabalho-thread");
|
|
99
104
|
const procedencia_1 = require("./procedencia");
|
|
100
105
|
const postura_local_1 = require("./postura-local");
|
|
101
106
|
const fabrica_publicar_1 = require("./fabrica-publicar");
|
|
@@ -180,8 +185,9 @@ function perfilParaDespacho(carregado, thread, fase, runtime, opcoes) {
|
|
|
180
185
|
const escolha = escolherPerfil(raiz, runtime, { perfil: opcoes.perfil, excluir, politica, carga });
|
|
181
186
|
if (escolha.erro || !escolha.perfil || opcoes.dryRun)
|
|
182
187
|
return escolha;
|
|
188
|
+
// RM-067 (F3): o grok nao tem conferencia de login sem ler a credencial; o despacho prova o login (semConferencia).
|
|
183
189
|
const auth = runtime === 'claude-bg' ? (0, claude_bg_1.conferirAuth)(escolha.perfil) : runtime === 'codex' ? (0, codex_1.conferirAuth)(escolha.perfil)
|
|
184
|
-
: { ok: false, detalhe: `runtime ${runtime} sem conferencia de login` };
|
|
190
|
+
: runtime === 'grok' ? (0, grok_1.conferirAuth)(escolha.perfil) : { ok: false, detalhe: `runtime ${runtime} sem conferencia de login` };
|
|
185
191
|
if (auth.ok)
|
|
186
192
|
return escolha;
|
|
187
193
|
let motivo, razao;
|
|
@@ -269,23 +275,31 @@ function estadoParaDespacho(raiz, thread, dryRun = false) {
|
|
|
269
275
|
}
|
|
270
276
|
/** O que cada fase canonica entrega. Vai no cabecalho do prompt de toda sessao. */
|
|
271
277
|
exports.CONTRATO_DAS_FASES = {
|
|
272
|
-
|
|
273
|
-
PLAN: 'PLAN (F2): plano com tarefas, touch_paths, decisoes D1..Dn com domicilio unico e verify executavel por tarefa. Nao implementa.',
|
|
274
|
-
GO: 'GO (F3): implementacao slice por slice, um commit atomico por tarefa, dentro da worktree da thread.',
|
|
275
|
-
CHECK: 'CHECK (F4): verificacao contra a baseline (regressao versus divida pre-existente), review de codigo, testes, seguranca e performance.',
|
|
276
|
-
SHIP: 'SHIP (F5): merge serializado, push provado por comando, roadmap atualizado e plano de rollback.',
|
|
277
|
-
MASTER: 'MASTER (F6): MASTER log com postmortem tipado, licoes e o score humano de 0 a 5. Uma entrega sem MASTER log nao aconteceu.',
|
|
278
|
+
...locale_prompts_1.PROMPTS_PT_BR.contratoDasFases,
|
|
278
279
|
};
|
|
280
|
+
/**
|
|
281
|
+
* RM-037 (ork-rm037esperas, D3): a regra das esperas, uma linha so, a mesma no prompt de toda fase e na skill e nos
|
|
282
|
+
* guias que o adaptador instala (`core/test/rm037-esperas.test.ts` confere os arquivos). Em 12/10/2026, sessoes de
|
|
283
|
+
* fase esperaram para sempre por verify ou suite mandados para segundo plano com `&`, cujo processo morreu com a
|
|
284
|
+
* chamada, e por lacos de espera com `pgrep -f` que acham a si mesmos, porque o proprio laco traz o texto procurado.
|
|
285
|
+
*/
|
|
286
|
+
exports.REGRA_DAS_ESPERAS = locale_prompts_1.PROMPTS_PT_BR.regraDasEsperas;
|
|
279
287
|
/** As regras de evidencia que valem em toda fase, em todo modo. */
|
|
280
288
|
exports.REGRAS_DE_EVIDENCIA = [
|
|
281
|
-
|
|
282
|
-
'Trabalhe apenas no diretorio de trabalho indicado acima.',
|
|
283
|
-
'Passos irreversiveis (push, merge, delecao) so acontecem quando o modo autoriza.',
|
|
289
|
+
...locale_prompts_1.PROMPTS_PT_BR.regrasDeEvidencia,
|
|
284
290
|
// RM-058 N2 (D13 da ork-rm058n2): tres sessoes de 12/10/2026 mandaram verify ou suite para segundo plano com `&`,
|
|
285
|
-
// perderam o processo e esperaram para sempre.
|
|
286
|
-
|
|
287
|
-
|
|
291
|
+
// perderam o processo e esperaram para sempre. RM-037 (ork-rm037esperas, D3): a linha da N2 virou a regra das
|
|
292
|
+
// esperas, que tambem traz a execucao em segundo plano do host e a espera por `pgrep -f`.
|
|
293
|
+
exports.REGRA_DAS_ESPERAS,
|
|
288
294
|
];
|
|
295
|
+
/**
|
|
296
|
+
* RM-016: o rito de saída do GO pertence ao prompt canônico, não a um adaptador. Assim Claude Code
|
|
297
|
+
* e Codex recebem os mesmos artefatos obrigatórios antes de a sessão encerrar. RM-061 F3c: o texto
|
|
298
|
+
* vem do catálogo dos prompts, e o prompt inglês leva o mesmo rito.
|
|
299
|
+
*/
|
|
300
|
+
function fechoDoGo(threadId, locale = (0, locale_1.localeAtivo)()) {
|
|
301
|
+
return (locale === 'en' ? locale_prompts_1.PROMPTS_EN : locale_prompts_1.PROMPTS_PT_BR).fechoDoGo(threadId);
|
|
302
|
+
}
|
|
289
303
|
/**
|
|
290
304
|
* I-42 (D11): as fases que o cabecalho do prompt descreve.
|
|
291
305
|
*
|
|
@@ -308,7 +322,8 @@ function fasesDoCicloNoPrompt(thread) {
|
|
|
308
322
|
* decisao e codigo. E o que permite um projeto reescrever o texto do prompt em
|
|
309
323
|
* `prompts/fase-padrao.md` sem poder mudar o que o `ork` considera verdade.
|
|
310
324
|
*/
|
|
311
|
-
function valoresDoPrompt(thread, fase, pedido, memoriaInjetada = '') {
|
|
325
|
+
function valoresDoPrompt(thread, fase, pedido, memoriaInjetada = '', locale = (0, locale_1.localeAtivo)()) {
|
|
326
|
+
const mp = locale === 'en' ? locale_prompts_1.PROMPTS_EN : locale_prompts_1.PROMPTS_PT_BR;
|
|
312
327
|
const def = (0, modos_1.definicaoDoModo)(thread.modo);
|
|
313
328
|
const bloco = (0, thread_1.blocoDaThread)(thread, fase);
|
|
314
329
|
const pausa = (0, thread_1.pausaNaThread)(thread, fase);
|
|
@@ -317,27 +332,29 @@ function valoresDoPrompt(thread, fase, pedido, memoriaInjetada = '') {
|
|
|
317
332
|
thread: thread.id,
|
|
318
333
|
bloco: bloco.fases.join('-'),
|
|
319
334
|
nome: thread.nome,
|
|
320
|
-
ciclo_canonico: fasesDoCicloNoPrompt(thread).map((f) => `${bloco.fases.includes(f) ? '>' : ' '} ${
|
|
335
|
+
ciclo_canonico: fasesDoCicloNoPrompt(thread).map((f) => `${bloco.fases.includes(f) ? '>' : ' '} ${mp.contratoDasFases[f]}`).join('\n'),
|
|
321
336
|
tag: def.tag,
|
|
322
337
|
blocos: thread.blocos.map((b) => b.fases.join('-')).join(' / '),
|
|
323
338
|
pausas: String(thread.blocos.filter((b) => b.pausa).length),
|
|
324
|
-
linha_variante: thread.variante ?
|
|
339
|
+
linha_variante: thread.variante ? mp.variante(thread.variante) : '',
|
|
325
340
|
regra_de_pausa: pausa
|
|
326
|
-
?
|
|
327
|
-
:
|
|
328
|
-
invariantes:
|
|
341
|
+
? mp.pausa(mp.pausaSobre(bloco.pausaSobre))
|
|
342
|
+
: mp.semPausa,
|
|
343
|
+
invariantes: mp.invariantes.map((i) => `- ${i}`).join('\n'),
|
|
329
344
|
slug: thread.slug,
|
|
330
345
|
projeto_nome: thread.projeto.name,
|
|
331
346
|
projeto_abbrev: thread.projeto.abbrev,
|
|
332
347
|
base_branch: thread.base.branch,
|
|
333
348
|
base_commit: thread.base.commit,
|
|
334
|
-
diretorio: thread.worktree ??
|
|
349
|
+
diretorio: thread.worktree ?? mp.raizDoProjeto,
|
|
350
|
+
trabalho: (0, trabalho_thread_1.caminhoDoTrabalho)(thread.id),
|
|
335
351
|
pedido: pedido.trim(),
|
|
352
|
+
fecho_go: bloco.fases.includes('GO') ? mp.fechoDoGo(thread.id) : '',
|
|
336
353
|
// Bloco B6: o bloco de memoria injetada deterministicamente. Vazio em toda thread sem
|
|
337
354
|
// decisao fechada e sem OrkMind, e ai a linha da variavel some do prompt: o texto fica
|
|
338
355
|
// byte a byte igual ao que o B4 ja despachava.
|
|
339
356
|
memoria_injetada: memoriaInjetada,
|
|
340
|
-
regras_de_evidencia:
|
|
357
|
+
regras_de_evidencia: [...mp.regrasDeEvidencia, mp.regraDasEsperas].map((r) => `- ${r}`).join('\n'),
|
|
341
358
|
};
|
|
342
359
|
}
|
|
343
360
|
/**
|
|
@@ -347,8 +364,10 @@ function valoresDoPrompt(thread, fase, pedido, memoriaInjetada = '') {
|
|
|
347
364
|
* `prompts/fase-padrao.md` (ou `prompts/fase-goal.md` e companhia) versionado no repositorio,
|
|
348
365
|
* vale o do projeto, e `ork prompt lint` e quem garante que ele nao perdeu o contrato.
|
|
349
366
|
*/
|
|
350
|
-
function montarPrompt(thread, fase, pedido, raiz, memoriaInjetada = '') {
|
|
351
|
-
|
|
367
|
+
function montarPrompt(thread, fase, pedido, raiz, memoriaInjetada = '', locale = (0, locale_1.localeAtivo)()) {
|
|
368
|
+
// RM-061 F3c: os valores falam a lingua do template escolhido; o do projeto sem par `.en` sai inteiro em pt-BR.
|
|
369
|
+
const template = (0, prompts_1.templateDaFase)(fase, raiz, locale);
|
|
370
|
+
return (0, prompts_1.renderizar)(template, valoresDoPrompt(thread, fase, pedido, memoriaInjetada, (0, prompts_1.idiomaDoTemplate)(template)));
|
|
352
371
|
}
|
|
353
372
|
/**
|
|
354
373
|
* Monta o prompt da fase JA com a memoria injetada (bloco B6).
|
|
@@ -359,11 +378,15 @@ function montarPrompt(thread, fase, pedido, raiz, memoriaInjetada = '') {
|
|
|
359
378
|
* com as decisoes fechadas lidas do `thread.json`: a garantia nao depende do OrkMind.
|
|
360
379
|
*/
|
|
361
380
|
function montarPromptComMemoria(carregado, thread, fase, pedido, memoria) {
|
|
362
|
-
|
|
381
|
+
// RM-061 F3c: o prompt despachado e dado (arquivo com sha256 no ledger). Segue a lingua declarada do dono
|
|
382
|
+
// (`owner.language`), nunca o locale de quem despacha: sem ela, pt-BR, com qualquer LANG (contrato da F2a). A
|
|
383
|
+
// dica do grafo fala a lingua do template que conduz a fase, como os valores.
|
|
384
|
+
const locale = (0, prompts_1.idiomaDoTemplate)((0, prompts_1.templateDaFase)(fase, carregado.raiz, (0, locale_1.linguaDeclaradaDoDono)(carregado.manifesto.owner?.language)));
|
|
385
|
+
const injecao = (0, memoria_1.injecaoDaFase)(carregado, memoria, thread, fase, locale);
|
|
363
386
|
// Mesma raiz usada pelo MCP e runtime-context; o manifesto da WT nao habilita a dica.
|
|
364
387
|
const ligado = (0, mcp_grafo_1.grafoLigado)((0, manifest_1.exigirManifesto)((0, estado_thread_1.raizDoEstado)(carregado.raiz)).manifesto);
|
|
365
388
|
return {
|
|
366
|
-
prompt: montarPrompt(thread, fase, (0, prompts_1.pedidoComDicaDoGrafo)(pedido, thread.id, ligado), carregado.raiz, injecao.texto),
|
|
389
|
+
prompt: montarPrompt(thread, fase, (0, prompts_1.pedidoComDicaDoGrafo)(pedido, thread.id, ligado, locale), carregado.raiz, injecao.texto, locale),
|
|
367
390
|
injecao,
|
|
368
391
|
};
|
|
369
392
|
}
|
|
@@ -448,6 +471,8 @@ function dadosDoDespacho(ctx, comando) {
|
|
|
448
471
|
cwd: ctx.cwd,
|
|
449
472
|
promptPath: path.relative(ctx.raiz, ctx.promptPath),
|
|
450
473
|
promptSha256: ctx.promptSha256,
|
|
474
|
+
...(ctx.promptOriginal ? { promptOriginalPath: path.relative(ctx.raiz, ctx.promptOriginal.path),
|
|
475
|
+
promptOriginalSha256: ctx.promptOriginal.sha256 } : {}),
|
|
451
476
|
origem: ctx.origem,
|
|
452
477
|
// I-36 (T10): a porta por onde o dono chegou. `runtime` e o motor; `canal` e a porta.
|
|
453
478
|
...(ctx.canal ? { canal: ctx.canal } : {}),
|
|
@@ -455,6 +480,7 @@ function dadosDoDespacho(ctx, comando) {
|
|
|
455
480
|
...(ctx.identidade ? { identidade: ctx.identidade } : {}),
|
|
456
481
|
// I-33 (D4): so identidade e diretorio do perfil; o store guarda o resto e nada e segredo.
|
|
457
482
|
...(ctx.perfil ? { perfil: ctx.perfil } : {}),
|
|
483
|
+
...(ctx.perfilPedido ? { perfilPedido: ctx.perfilPedido } : {}),
|
|
458
484
|
comando: comandoMascarado(comando, ctx.promptSha256),
|
|
459
485
|
};
|
|
460
486
|
}
|
|
@@ -532,7 +558,7 @@ sensores) {
|
|
|
532
558
|
vincularConducaoDaSessao(ctx, sessionId);
|
|
533
559
|
// I-51 (RM-047): as outras maquinas veem a fase nova; so com a fabrica compartilhada.
|
|
534
560
|
(0, fabrica_publicar_1.publicarEmSegundoPlano)(ctx.raiz);
|
|
535
|
-
if (ctx.runtime === 'codex' || ctx.runtime === 'claude-bg')
|
|
561
|
+
if (ctx.runtime === 'codex' || ctx.runtime === 'claude-bg' || ctx.runtime === 'grok')
|
|
536
562
|
registrarObservacao(ctx, sessao, dir, controlador, sensores);
|
|
537
563
|
return sessao;
|
|
538
564
|
}
|
|
@@ -566,14 +592,19 @@ function registrarObservacao(ctx, sessao, dir, controlador, sensores) {
|
|
|
566
592
|
const mesmoDespacho = (e) => e.sessionId === sessao.sessionId && e.despachoEm === sessao.despachadaEm;
|
|
567
593
|
try {
|
|
568
594
|
// I-34: claude-bg observa pela fonte nativa; no PLAN o registro guarda o sha de base do artefato.
|
|
569
|
-
// I-33 (N1): o GO codex registra o HEAD do despacho, como a fonte claude-bg;
|
|
595
|
+
// I-33 (N1): o GO codex registra o HEAD do despacho, como a fonte claude-bg; ele revela commit pelo shell no checkpoint.
|
|
570
596
|
const head = ctx.runtime === 'codex' && ctx.fase === 'GO' ? { head: ctx.headNoDespacho ?? null } : {};
|
|
571
|
-
|
|
572
|
-
|
|
573
|
-
|
|
597
|
+
// RM-067 (F2, D8): o grok observa o stream e os recibos do supervisor; o HEAD do GO vem de antes do despacho.
|
|
598
|
+
// RM-067 (F3): a pasta da sessao mora na casa do perfil do despacho; sem perfil, na do processo.
|
|
599
|
+
const fonte = ctx.runtime === 'grok' ? (sensores?.logPath && sensores.processoPath && sensores.reciboPath
|
|
600
|
+
? (0, session_watcher_grok_1.fonteGrokDoDespacho)(ctx.raiz, ctx.thread.id, ctx.fase, ctx.cwd, { logPath: sensores.logPath, processoPath: sensores.processoPath, reciboPath: sensores.reciboPath }, ctx.perfil ? (0, runtime_profiles_1.diretorioDoPerfil)(ctx.perfil) : (0, grok_1.casaDoGrok)(), { head: ctx.headNoDespacho, ...(ctx.artefatoNoDespacho !== undefined ? { artefato: ctx.artefatoNoDespacho } : {}) })
|
|
601
|
+
: null)
|
|
602
|
+
: ctx.runtime === 'claude-bg' ? (0, session_watcher_claude_1.fonteClaudeDoDespacho)(ctx.raiz, ctx.thread.id, ctx.fase, ctx.cwd)
|
|
603
|
+
: sensores?.logPath ? { logPath: sensores.logPath, processoPath: sensores.processoPath, reciboPath: sensores.reciboPath, ...head }
|
|
604
|
+
: controlador ? { controlador, cwd: ctx.cwd, ...head } : null;
|
|
574
605
|
if (!fonte)
|
|
575
606
|
return;
|
|
576
|
-
(0, session_watcher_1.
|
|
607
|
+
(0, session_watcher_1.prepararFonteWatcher)(ctx.raiz, sessao.sessionId, fonte);
|
|
577
608
|
const eventos = (0, ledger_1.lerLedger)(dir);
|
|
578
609
|
if (!eventos.some(e => e.tipo === 'session_sensor_registered' && mesmoDespacho(e))) {
|
|
579
610
|
(0, ledger_1.registrar)(dir, ctx.thread.id, 'session_sensor_registered', { fase: ctx.fase,
|
|
@@ -687,6 +718,8 @@ tomadaPrevia) {
|
|
|
687
718
|
const thread = (0, thread_1.lerThread)(raiz, threadId);
|
|
688
719
|
const fase = opcoes.fase;
|
|
689
720
|
const dir = (0, thread_1.dirThread)(raiz, thread.id);
|
|
721
|
+
if (!opcoes.dryRun)
|
|
722
|
+
(0, trabalho_thread_1.garantirDiretorioDoTrabalho)(raiz, thread.id);
|
|
690
723
|
const slug = slugDaSessao(thread, fase);
|
|
691
724
|
// Resolve UMA vez o trio runtime/modelo/esforco: o mesmo objeto vai ao runtime adapter,
|
|
692
725
|
// ao ledger e a resposta do CLI. Resolver duas vezes e o caminho curto para o ledger
|
|
@@ -880,6 +913,9 @@ tomadaPrevia) {
|
|
|
880
913
|
}
|
|
881
914
|
}
|
|
882
915
|
const cwd = (0, procedencia_1.diretorioDaThread)(raiz, thread);
|
|
916
|
+
// O pedido explicito precisa sobreviver mesmo quando o despacho para antes de escolher ou abrir a conta.
|
|
917
|
+
// `perfil` continua sendo o destino efetivo; misturar os dois quebraria a rotacao por falha da propria conta.
|
|
918
|
+
const perfilPedido = opcoes.perfil !== undefined ? { id: opcoes.perfil, runtime } : undefined;
|
|
883
919
|
// RM-063 (F3): o prompt vai ao disco e ao ledger, com o sha256, ANTES do contexto do runtime e do adaptador. No
|
|
884
920
|
// incidente de 12/10/2026 a fase morreu no despacho e o `ork retry run` saiu com "nao ha despacho falho registrado
|
|
885
921
|
// em GO com prompt gravado"; daqui em diante, toda tentativa deixa o prompt que o retry redespacha sem pedir o texto.
|
|
@@ -887,7 +923,8 @@ tomadaPrevia) {
|
|
|
887
923
|
const promptNoLedger = { promptPath: path.relative(raiz, promptPath), promptSha256: sha };
|
|
888
924
|
if (!opcoes.dryRun) {
|
|
889
925
|
(0, ledger_1.registrar)(dir, thread.id, ledger_1.TIPOS_DE_EVENTO.promptGravado, { fase, slug, modo: thread.modo, runtime, model, effort, cwd,
|
|
890
|
-
...promptNoLedger, origem: 'phase.run', canal, ...(opcoes.correlacao ? { correlacao: opcoes.correlacao } : {}), identidade
|
|
926
|
+
...promptNoLedger, origem: 'phase.run', canal, ...(opcoes.correlacao ? { correlacao: opcoes.correlacao } : {}), identidade,
|
|
927
|
+
...(perfilPedido ? { perfilPedido } : {}) });
|
|
891
928
|
}
|
|
892
929
|
const correcaoDoRetry = `ork retry run ${thread.id} redespacha o mesmo prompt (sha256 ${sha.slice(0, 12)})`;
|
|
893
930
|
let contextoRuntime;
|
|
@@ -897,7 +934,8 @@ tomadaPrevia) {
|
|
|
897
934
|
catch (e) {
|
|
898
935
|
const erro = `runtime.unavailable: ${e.message}`;
|
|
899
936
|
(0, gates_1.registrarGateBloqueado)(dir, thread.id, { gate: 'phase.dispatch', motivo: 'runtime.unavailable',
|
|
900
|
-
modo: thread.modo, detalhe: erro, fase, slug, ...(opcoes.dryRun ? {} : { ...promptNoLedger, correcao: correcaoDoRetry })
|
|
937
|
+
modo: thread.modo, detalhe: erro, fase, slug, ...(opcoes.dryRun ? {} : { ...promptNoLedger, correcao: correcaoDoRetry }),
|
|
938
|
+
...(perfilPedido ? { perfilPedido } : {}) });
|
|
901
939
|
return { thread, slug, promptPath, promptSha256: sha, comando: [], sessionId: null,
|
|
902
940
|
verificada: false, pausaAoFim: (0, thread_1.pausaNaThread)(thread, fase), dryRun: opcoes.dryRun === true,
|
|
903
941
|
runtime, model, effort, bloqueado: true, motivo: 'runtime.unavailable', violacoes, erro };
|
|
@@ -916,16 +954,20 @@ tomadaPrevia) {
|
|
|
916
954
|
}
|
|
917
955
|
if (escolha.erro) {
|
|
918
956
|
const motivo = escolha.motivo ?? 'runtime.unavailable';
|
|
919
|
-
const erro =
|
|
957
|
+
const erro = perfilPedido
|
|
958
|
+
? (0, locale_1.textoDoCatalogo)((m) => m.retry.perfilPedidoRecusado(perfilPedido.id, perfilPedido.runtime, motivo, escolha.erro))
|
|
959
|
+
: `${motivo}: ${escolha.erro}`;
|
|
920
960
|
if (!opcoes.dryRun) {
|
|
921
961
|
const semPerfil = { identidade, raiz, thread, fase, slug, promptPath, promptSha256: sha, runtime, cwd, model, effort,
|
|
922
|
-
origem: 'phase.run', canal, correlacao: opcoes.correlacao ?? null };
|
|
962
|
+
origem: 'phase.run', canal, correlacao: opcoes.correlacao ?? null, ...(perfilPedido ? { perfilPedido } : {}) };
|
|
923
963
|
(0, ledger_1.registrar)(dir, thread.id, ledger_1.TIPOS_DE_EVENTO.despachoFalhou, { ...dadosDoDespacho(semPerfil, []), erro });
|
|
924
964
|
(0, gates_1.registrarGateBloqueado)(dir, thread.id, { gate: 'phase.dispatch', motivo, modo: thread.modo, detalhe: erro,
|
|
925
|
-
correcao:
|
|
926
|
-
?
|
|
927
|
-
:
|
|
928
|
-
|
|
965
|
+
correcao: perfilPedido
|
|
966
|
+
? (0, locale_1.textoDoCatalogo)((m) => m.retry.correcaoDoPerfilPedido(perfilPedido.id, perfilPedido.runtime, motivo, thread.id))
|
|
967
|
+
: motivo === 'cost.violation'
|
|
968
|
+
? 'refaca o login do perfil pela assinatura (claude auth login --claudeai ou codex login com ChatGPT) e rode ork accounts check; perfil de provider pago nunca despacha'
|
|
969
|
+
: 'ork accounts list mostra o estado de cada perfil; ork retry run segue pela ordem de fallback ou pela fila',
|
|
970
|
+
fase, slug, runtime, origem: 'phase.run', ...promptNoLedger, ...(perfilPedido ? { perfilPedido } : {}) });
|
|
929
971
|
}
|
|
930
972
|
return { thread, slug, promptPath, promptSha256: sha, comando: [], sessionId: null,
|
|
931
973
|
verificada: false, pausaAoFim: (0, thread_1.pausaNaThread)(thread, fase), dryRun: opcoes.dryRun === true,
|
|
@@ -962,8 +1004,10 @@ tomadaPrevia) {
|
|
|
962
1004
|
const claimsSchema = fase === 'GO' && runtime === 'codex'
|
|
963
1005
|
? schemaDeClaimsDoPacote()
|
|
964
1006
|
: undefined;
|
|
965
|
-
// I-33 (N1): lido antes de a sessao existir; depois dela, um commit rapido ja estaria no HEAD.
|
|
966
|
-
const headNoDespacho = fase === 'GO' && runtime === 'codex' && !opcoes.dryRun ? (0, session_watcher_claude_1.headDaWorktree)(cwd) : undefined;
|
|
1007
|
+
// I-33 (N1): lido antes de a sessao existir; depois dela, um commit rapido ja estaria no HEAD. RM-067: o grok tambem.
|
|
1008
|
+
const headNoDespacho = fase === 'GO' && (runtime === 'codex' || runtime === 'grok') && !opcoes.dryRun ? (0, session_watcher_claude_1.headDaWorktree)(cwd) : undefined;
|
|
1009
|
+
// RM-067 (D8): a base do artefato do grok tambem sai antes do despacho, que espera a pasta da sessao.
|
|
1010
|
+
const artefatoNoDespacho = runtime === 'grok' && !opcoes.dryRun ? (0, session_watcher_grok_1.baseDoArtefato)(raiz, thread.id, fase) : undefined;
|
|
967
1011
|
const pedidoAoRuntime = {
|
|
968
1012
|
prompt,
|
|
969
1013
|
nome: slug,
|
|
@@ -1004,7 +1048,9 @@ tomadaPrevia) {
|
|
|
1004
1048
|
effort,
|
|
1005
1049
|
origem: 'phase.run',
|
|
1006
1050
|
...(perfil ? { perfil } : {}),
|
|
1051
|
+
...(perfilPedido ? { perfilPedido } : {}),
|
|
1007
1052
|
...(headNoDespacho !== undefined ? { headNoDespacho } : {}),
|
|
1053
|
+
...(artefatoNoDespacho !== undefined ? { artefatoNoDespacho } : {}),
|
|
1008
1054
|
};
|
|
1009
1055
|
let resultado;
|
|
1010
1056
|
try {
|
|
@@ -1018,6 +1064,7 @@ tomadaPrevia) {
|
|
|
1018
1064
|
(0, ledger_1.registrar)(dir, thread.id, ledger_1.TIPOS_DE_EVENTO.despachoFalhou, { ...dadosDoDespacho(ctx, []), erro });
|
|
1019
1065
|
(0, gates_1.registrarGateBloqueado)(dir, thread.id, { gate: 'phase.dispatch', motivo: 'runtime.unavailable', modo: thread.modo,
|
|
1020
1066
|
detalhe: erro, correcao: correcaoDoRetry, fase, slug, runtime, origem: 'phase.run', ...promptNoLedger,
|
|
1067
|
+
...(perfilPedido ? { perfilPedido } : {}),
|
|
1021
1068
|
evidencia: 'excecao real do runtime adapter no despacho, nao relato do agente' });
|
|
1022
1069
|
}
|
|
1023
1070
|
throw e;
|
|
@@ -1067,6 +1114,7 @@ tomadaPrevia) {
|
|
|
1067
1114
|
(0, gates_1.registrarGateBloqueado)(dir, thread.id, { gate: 'phase.dispatch', motivo: falha.motivo, modo: thread.modo, detalhe: erro,
|
|
1068
1115
|
correcao: 'ork retry run rotaciona para o proximo perfil, para o runtime de fallback ou para a fila', fase, slug,
|
|
1069
1116
|
runtime, origem: 'phase.run', falhaDeConta: falha, ...(perfil ? { perfil } : {}),
|
|
1117
|
+
...(perfilPedido ? { perfilPedido } : {}),
|
|
1070
1118
|
evidencia: 'saida real do runtime adapter no despacho, nao relato do agente' });
|
|
1071
1119
|
return { thread, slug, promptPath, promptSha256: sha, comando: resultado.comando, controlador: resultado.controlador,
|
|
1072
1120
|
sessionId: null, verificada: false, pausaAoFim, dryRun: false, runtime, model, effort, bloqueado: false,
|
|
@@ -1096,6 +1144,11 @@ tomadaPrevia) {
|
|
|
1096
1144
|
effort,
|
|
1097
1145
|
sinal,
|
|
1098
1146
|
detalhe: erro,
|
|
1147
|
+
// RM-058 N4 (D17 da ork-rm058n4): o pedido do despacho do arco é do vigia do arco, e o `ork retry resume` não o retoma.
|
|
1148
|
+
...(opcoes.correlacao ? { correlacao: opcoes.correlacao } : {}),
|
|
1149
|
+
// RM-067 (GO-FIX 1, A1): o pedido do grok volta pelo grok, com o modelo dele; o dos outros runtimes segue como antes.
|
|
1150
|
+
...(runtime === 'grok' ? { runtime } : {}),
|
|
1151
|
+
...(perfilPedido ? { runtime, perfil: perfilPedido.id, perfilPedido } : {}),
|
|
1099
1152
|
});
|
|
1100
1153
|
(0, ledger_1.registrar)(dir, thread.id, ledger_1.TIPOS_DE_EVENTO.rateLimitEnfileirado, {
|
|
1101
1154
|
fase,
|
|
@@ -1141,6 +1194,7 @@ tomadaPrevia) {
|
|
|
1141
1194
|
// a registrava: o `ork retry plan` nao a via e a fase ficava parada sem ninguem saber.
|
|
1142
1195
|
(0, gates_1.registrarGateBloqueado)(dir, thread.id, { gate: 'phase.dispatch', motivo: 'runtime.unavailable', modo: thread.modo,
|
|
1143
1196
|
detalhe: erro, correcao: correcaoDoRetry, fase, slug, runtime, origem: 'phase.run', ...promptNoLedger, ...daSessao,
|
|
1197
|
+
...(perfilPedido ? { perfilPedido } : {}),
|
|
1144
1198
|
evidencia: 'saida real do runtime adapter no despacho, nao relato do agente' });
|
|
1145
1199
|
return {
|
|
1146
1200
|
thread,
|
package/dist/policies.js
CHANGED
|
@@ -14,6 +14,7 @@ Object.defineProperty(exports, "__esModule", { value: true });
|
|
|
14
14
|
exports.POLICIES_DE_PROVA_LOCAL = exports.POLICIES_CONHECIDAS = void 0;
|
|
15
15
|
exports.procurarSegredos = procurarSegredos;
|
|
16
16
|
exports.policyDeProvaLocal = policyDeProvaLocal;
|
|
17
|
+
exports.severidadeDeclarada = severidadeDeclarada;
|
|
17
18
|
exports.policiesDesconhecidas = policiesDesconhecidas;
|
|
18
19
|
exports.avaliarPolicies = avaliarPolicies;
|
|
19
20
|
exports.avisos = avisos;
|
|
@@ -107,6 +108,13 @@ exports.POLICIES_CONHECIDAS = {
|
|
|
107
108
|
quando: ['claims.add'],
|
|
108
109
|
descricao: 'a mesma conferencia de claim_sem_prova_local, com o nome que o ork licoes propoe',
|
|
109
110
|
},
|
|
111
|
+
// RM-062 (F2): a barreira de dado privado. Declarada, o `ork verify` varre o diff da thread e o `ork ci prepare`, o
|
|
112
|
+
// diff e o bundle; fora do manifesto, nenhum dos dois varre nada (projeto privado nao paga pelo que nao pediu).
|
|
113
|
+
dado_privado: {
|
|
114
|
+
quando: ['verify', 'ci.prepare'],
|
|
115
|
+
descricao: 'reprova (ou avisa) quando o diff da thread ou o bundle de CI leva caminho de home, e-mail fora da lista, ' +
|
|
116
|
+
'hostname de maquina ou termo da lista local',
|
|
117
|
+
},
|
|
110
118
|
};
|
|
111
119
|
/** RM-008 (B8): as policies que conferem a claim no registro (um aviso so, como verify_regression e verify_failed). */
|
|
112
120
|
exports.POLICIES_DE_PROVA_LOCAL = ['claim_sem_prova_local', 'claims_failed'];
|
|
@@ -135,6 +143,11 @@ function severidade(bruta) {
|
|
|
135
143
|
return bruta;
|
|
136
144
|
return 'warn';
|
|
137
145
|
}
|
|
146
|
+
/** RM-062 (F2): a severidade da policy como o manifesto a declara, ou `null` quando ele nao a declara. */
|
|
147
|
+
function severidadeDeclarada(manifesto, nome) {
|
|
148
|
+
const bruta = manifesto.policies?.[nome];
|
|
149
|
+
return bruta === undefined ? null : severidade(bruta);
|
|
150
|
+
}
|
|
138
151
|
/** Policies declaradas no manifesto que o `ork` nao sabe executar. */
|
|
139
152
|
function policiesDesconhecidas(manifesto) {
|
|
140
153
|
return Object.keys(manifesto.policies ?? {}).filter((p) => !(p in exports.POLICIES_CONHECIDAS));
|
|
@@ -276,6 +289,26 @@ function avaliarPolicies(manifesto, ctx) {
|
|
|
276
289
|
}
|
|
277
290
|
continue;
|
|
278
291
|
}
|
|
292
|
+
if (nome === 'dado_privado') {
|
|
293
|
+
const f = ctx.dadoPrivado;
|
|
294
|
+
if (!f || (f.achados === 0 && !f.erro))
|
|
295
|
+
continue;
|
|
296
|
+
const lista = f.listaLocal ? 'com a lista local' : 'lista local ausente: so os padroes genericos';
|
|
297
|
+
violacoes.push({
|
|
298
|
+
policy: nome,
|
|
299
|
+
severidade: sev,
|
|
300
|
+
motivo: 'policy.violation',
|
|
301
|
+
detalhe: f.erro
|
|
302
|
+
? `a varredura de dado privado nao rodou: ${f.erro}`
|
|
303
|
+
: `${f.achados} achado(s) de dado privado (${f.padroes.join(', ')}) no ${f.escopo}, ${lista}: ` +
|
|
304
|
+
`${f.onde.join(', ')}${f.achados > f.onde.length ? ', ...' : ''} (o valor casado nunca e impresso)`,
|
|
305
|
+
correcao: f.erro
|
|
306
|
+
? 'corrija o orkastery.privado.json (ou tire a lista local do git) e rode de novo'
|
|
307
|
+
: 'troque o dado pelo generico (maquina-a, /home/usuario, pessoa@exemplo.invalid) ou, se for exemplo inventado, ' +
|
|
308
|
+
'ponha a excecao com motivo em orkastery.privado.json, revisada em PR; confira com ork privado varrer --base <base>',
|
|
309
|
+
});
|
|
310
|
+
continue;
|
|
311
|
+
}
|
|
279
312
|
if (nome === 'tree_blocked') {
|
|
280
313
|
if (ctx.branchAtrasDaBase === true) {
|
|
281
314
|
violacoes.push({
|
package/dist/postura-local.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.POSTURAS_QUE_AFROUXAM = exports.ARQUIVO_POSTURA_LOCAL = exports.CONTRATO_POSTURA_LOCAL = void 0;
|
|
36
|
+
exports.RUNTIMES_COM_POSTURA = exports.POSTURAS_QUE_AFROUXAM = exports.ARQUIVO_POSTURA_LOCAL = exports.CONTRATO_POSTURA_LOCAL = void 0;
|
|
37
37
|
exports.pastaPrivadaDaPostura = pastaPrivadaDaPostura;
|
|
38
38
|
exports.caminhoDaPosturaLocal = caminhoDaPosturaLocal;
|
|
39
39
|
exports.posturaAfrouxada = posturaAfrouxada;
|
|
@@ -66,6 +66,7 @@ const node_crypto_1 = require("node:crypto");
|
|
|
66
66
|
const codex_1 = require("./adapters/codex");
|
|
67
67
|
const estado_thread_1 = require("./estado-thread");
|
|
68
68
|
const procedencia_1 = require("./procedencia");
|
|
69
|
+
const locale_1 = require("./locale");
|
|
69
70
|
const util_1 = require("./util");
|
|
70
71
|
exports.CONTRATO_POSTURA_LOCAL = 'ork.postura-local/v1';
|
|
71
72
|
exports.ARQUIVO_POSTURA_LOCAL = 'postura-local.json';
|
|
@@ -153,13 +154,17 @@ function lerPosturaLocal(raiz) {
|
|
|
153
154
|
return { postura: null, motivo: 'a confirmação local é de outro checkout' };
|
|
154
155
|
return { postura: o, motivo: null };
|
|
155
156
|
}
|
|
157
|
+
/**
|
|
158
|
+
* Os runtimes que recebem a postura de sandbox do manifesto: o Codex e, desde a F4 da RM-067, o `grok`, em que a postura
|
|
159
|
+
* mais frouxa vira o perfil `off` (sem sandbox). O `claude-bg` não recebe a postura.
|
|
160
|
+
*/
|
|
161
|
+
exports.RUNTIMES_COM_POSTURA = ['codex', 'grok'];
|
|
156
162
|
/**
|
|
157
163
|
* A recusa do despacho: `null` quando a postura do manifesto vale nesta máquina (não afrouxa, ou
|
|
158
164
|
* foi confirmada localmente com o mesmo valor); senão o erro tipado com o comando que confirma.
|
|
159
|
-
* Só o Codex recebe a postura de sandbox do manifesto.
|
|
160
165
|
*/
|
|
161
166
|
function recusaDePostura(raiz, manifesto, runtime) {
|
|
162
|
-
if (runtime
|
|
167
|
+
if (!exports.RUNTIMES_COM_POSTURA.includes(runtime))
|
|
163
168
|
return null;
|
|
164
169
|
const postura = posturaAfrouxada(manifesto);
|
|
165
170
|
if (!postura)
|
|
@@ -182,7 +187,7 @@ function gravarArquivoPrivado(raiz, nome, objeto) {
|
|
|
182
187
|
const estado = path.dirname(pasta);
|
|
183
188
|
const stEstado = fs.lstatSync(estado, { throwIfNoEntry: false });
|
|
184
189
|
if (stEstado && (!stEstado.isDirectory() || stEstado.isSymbolicLink()))
|
|
185
|
-
throw new
|
|
190
|
+
throw new locale_1.ErroDoCatalogo((m) => m.estado.posturaEstadoLink);
|
|
186
191
|
fs.mkdirSync(estado, { recursive: true });
|
|
187
192
|
try {
|
|
188
193
|
fs.mkdirSync(pasta, { mode: 0o700 });
|
|
@@ -193,10 +198,10 @@ function gravarArquivoPrivado(raiz, nome, objeto) {
|
|
|
193
198
|
}
|
|
194
199
|
const stPasta = fs.lstatSync(pasta);
|
|
195
200
|
if (!stPasta.isDirectory() || stPasta.isSymbolicLink())
|
|
196
|
-
throw new
|
|
201
|
+
throw new locale_1.ErroDoCatalogo((m) => m.estado.posturaPrivadaLink);
|
|
197
202
|
fs.chmodSync(pasta, 0o700);
|
|
198
203
|
if ((0, procedencia_1.rastreadoPeloGit)(raiz, arquivo)) {
|
|
199
|
-
throw new
|
|
204
|
+
throw new locale_1.ErroDoCatalogo((m) => m.estado.posturaRastreada(nome));
|
|
200
205
|
}
|
|
201
206
|
const temp = path.join(pasta, `.${nome}.${(0, node_crypto_1.randomUUID)()}.tmp`);
|
|
202
207
|
const fd = fs.openSync(temp, fs.constants.O_WRONLY | fs.constants.O_CREAT | fs.constants.O_EXCL | fs.constants.O_NOFOLLOW, 0o600);
|
package/dist/preflight.js
CHANGED
|
@@ -46,6 +46,7 @@ const manifest_1 = require("./manifest");
|
|
|
46
46
|
const estado_thread_1 = require("./estado-thread");
|
|
47
47
|
const claude_bg_1 = require("./adapters/claude-bg");
|
|
48
48
|
const codex_1 = require("./adapters/codex");
|
|
49
|
+
const grok_1 = require("./adapters/grok");
|
|
49
50
|
const runtime_profiles_1 = require("./runtime-profiles");
|
|
50
51
|
const modos_1 = require("./modos");
|
|
51
52
|
const setup_1 = require("./setup");
|
|
@@ -57,7 +58,7 @@ const runtime_ambiente_1 = require("./runtime-ambiente");
|
|
|
57
58
|
const slug_1 = require("./slug");
|
|
58
59
|
const util_1 = require("./util");
|
|
59
60
|
const horario_1 = require("./horario");
|
|
60
|
-
const authPadrao = (p) => p.runtime === 'claude-bg' ? (0, claude_bg_1.conferirAuth)(p) : (0, codex_1.conferirAuth)(p);
|
|
61
|
+
const authPadrao = (p) => p.runtime === 'claude-bg' ? (0, claude_bg_1.conferirAuth)(p) : p.runtime === 'grok' ? (0, grok_1.conferirAuth)(p) : (0, codex_1.conferirAuth)(p);
|
|
61
62
|
const sensoresPadrao = {
|
|
62
63
|
runtime: nome => !!(0, runtimes_1.resolverRuntime)(nome).disponivel(),
|
|
63
64
|
sandboxCodex: () => (0, codex_2.sondarSandbox)().ok,
|
package/dist/procedencia.js
CHANGED
|
@@ -60,6 +60,7 @@ exports.exigirCaminhoContido = exigirCaminhoContido;
|
|
|
60
60
|
const fs = __importStar(require("node:fs"));
|
|
61
61
|
const path = __importStar(require("node:path"));
|
|
62
62
|
const estado_thread_1 = require("./estado-thread");
|
|
63
|
+
const locale_1 = require("./locale");
|
|
63
64
|
const util_1 = require("./util");
|
|
64
65
|
/** Caminho relativo à árvore principal, com `/` (o formato do `git ls-files`). */
|
|
65
66
|
function relativoAoRepositorio(principal, arquivo) {
|
|
@@ -134,14 +135,12 @@ function exigirCwdLocal(raiz, threadId, dir, origem) {
|
|
|
134
135
|
return dir;
|
|
135
136
|
const arquivo = path.join(principal, ARQUIVO_DA_ORIGEM[origem](threadId));
|
|
136
137
|
if (rastreadoPeloGit(principal, arquivo)) {
|
|
137
|
-
|
|
138
|
-
|
|
139
|
-
'(git rm -r --cached .orkastery e .orkastery/ no .gitignore) e rode o comando de novo.');
|
|
138
|
+
const rel = path.relative(principal, arquivo);
|
|
139
|
+
throw new locale_1.ErroDoCatalogo((m) => m.estado.rastreado(rel));
|
|
140
140
|
}
|
|
141
141
|
if (!path.isAbsolute(dir) || !fs.existsSync(dir) || !worktreesRegistradas(principal).includes(alvo)) {
|
|
142
|
-
|
|
143
|
-
|
|
144
|
-
`registrada. Recrie a worktree da thread com ork worktree ensure ${threadId}.`);
|
|
142
|
+
const citado = JSON.stringify(String(dir)).slice(0, 200);
|
|
143
|
+
throw new locale_1.ErroDoCatalogo((m) => m.estado.worktreeNaoRegistrada(citado, threadId));
|
|
145
144
|
}
|
|
146
145
|
return dir;
|
|
147
146
|
}
|
|
@@ -167,14 +166,11 @@ function diretorioDaThread(raiz, thread) {
|
|
|
167
166
|
*/
|
|
168
167
|
function exigirHostLocal(raiz, arquivo) {
|
|
169
168
|
if (rastreadoPeloGit(raiz, arquivo)) {
|
|
170
|
-
throw new
|
|
171
|
-
'pulse e do digest só vale do arquivo local desta máquina. Tire-o do índice (git rm --cached) e grave-o ' +
|
|
172
|
-
'de novo nesta máquina.');
|
|
169
|
+
throw new locale_1.ErroDoCatalogo((m) => m.estado.transporteRastreado(path.basename(arquivo)));
|
|
173
170
|
}
|
|
174
171
|
const st = fs.lstatSync(arquivo, { throwIfNoEntry: false });
|
|
175
172
|
if (st && !st.isFile()) {
|
|
176
|
-
throw new
|
|
177
|
-
'não link nem diretório.');
|
|
173
|
+
throw new locale_1.ErroDoCatalogo((m) => m.estado.transporteNaoComum(path.basename(arquivo)));
|
|
178
174
|
}
|
|
179
175
|
}
|
|
180
176
|
/** `filho` está dentro de `pai` (ou é o próprio `pai`), pelos caminhos reais? */
|
|
@@ -219,7 +215,6 @@ function exigirCaminhoContido(raiz, thread, caminho, origem) {
|
|
|
219
215
|
const contido = caminhoContidoOuNulo(raiz, thread, caminho);
|
|
220
216
|
if (contido)
|
|
221
217
|
return contido;
|
|
222
|
-
|
|
223
|
-
|
|
224
|
-
'arquivo de dentro do projeto. Exporte o handoff de novo (ork handoff export) ou copie o arquivo para dentro do projeto.');
|
|
218
|
+
const citado = JSON.stringify(String(origem)).slice(0, 200);
|
|
219
|
+
throw new locale_1.ErroDoCatalogo((m) => m.estado.ponteiroForaDaRaiz(citado));
|
|
225
220
|
}
|