@orkastery/cli 0.5.3 → 0.6.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/adapters/README.md +18 -0
- package/adapters/claude-code/.claude-plugin/plugin.json +1 -0
- package/adapters/claude-code/README.md +195 -5
- package/adapters/claude-code/agents/ork-check.md +1 -0
- package/adapters/claude-code/agents/ork-go.md +1 -0
- package/adapters/claude-code/agents/ork-goal.md +1 -0
- package/adapters/claude-code/agents/ork-master.md +1 -0
- package/adapters/claude-code/agents/ork-plan.md +1 -0
- package/adapters/claude-code/agents/ork-ship.md +1 -0
- package/adapters/claude-code/hooks/hooks.json +2 -1
- package/adapters/claude-code/hooks/ork-guard.js +15 -1
- package/adapters/claude-code/hooks/ork-resposta.js +91 -0
- package/adapters/claude-code/hooks/ork-sensor.js +18 -2
- package/adapters/claude-code/hooks/quota-signal.js +14 -0
- package/adapters/claude-code/mods/autoridade.json +56 -0
- package/adapters/claude-code/mods/ork-clima/.claude-plugin/plugin.json +14 -0
- package/adapters/claude-code/mods/ork-clima/hooks/contas.ts +283 -0
- package/adapters/claude-code/mods/ork-clima/hooks/hooks.json +3 -0
- package/adapters/claude-code/mods/ork-clima/hooks/previsao.ts +393 -0
- package/adapters/claude-code/mods/ork-clima/hooks/register.ts +205 -0
- package/adapters/claude-code/mods/ork-clima/orkastery-mod.json +5 -0
- package/adapters/claude-code/mods/ork-clima/types/index.d.ts +80 -0
- package/adapters/claude-code/mods/ork-freio/.claude-plugin/plugin.json +14 -0
- package/adapters/claude-code/mods/ork-freio/hooks/carga.ts +160 -0
- package/adapters/claude-code/mods/ork-freio/hooks/conferencia.ts +309 -0
- package/adapters/claude-code/mods/ork-freio/hooks/hooks.json +3 -0
- package/adapters/claude-code/mods/ork-freio/hooks/lote.ts +270 -0
- package/adapters/claude-code/mods/ork-freio/hooks/register.ts +285 -0
- package/adapters/claude-code/mods/ork-freio/orkastery-mod.json +5 -0
- package/adapters/claude-code/mods/ork-freio/types/index.d.ts +127 -0
- package/adapters/claude-code/mods/ork-mensageiro/.claude-plugin/plugin.json +14 -0
- package/adapters/claude-code/mods/ork-mensageiro/hooks/caixa.ts +215 -0
- package/adapters/claude-code/mods/ork-mensageiro/hooks/hooks.json +3 -0
- package/adapters/claude-code/mods/ork-mensageiro/hooks/painel.tsx +165 -0
- package/adapters/claude-code/mods/ork-mensageiro/hooks/recepcao.ts +256 -0
- package/adapters/claude-code/mods/ork-mensageiro/hooks/register.tsx +481 -0
- package/adapters/claude-code/mods/ork-mensageiro/orkastery-mod.json +5 -0
- package/adapters/claude-code/mods/ork-mensageiro/types/index.d.ts +85 -0
- package/adapters/claude-code/mods/ork-mesa/.claude-plugin/plugin.json +14 -0
- package/adapters/claude-code/mods/ork-mesa/hooks/cartoes.tsx +246 -0
- package/adapters/claude-code/mods/ork-mesa/hooks/decidir.ts +110 -0
- package/adapters/claude-code/mods/ork-mesa/hooks/fila.ts +253 -0
- package/adapters/claude-code/mods/ork-mesa/hooks/hooks.json +3 -0
- package/adapters/claude-code/mods/ork-mesa/hooks/obvia.ts +98 -0
- package/adapters/claude-code/mods/ork-mesa/hooks/register.tsx +493 -0
- package/adapters/claude-code/mods/ork-mesa/orkastery-mod.json +5 -0
- package/adapters/claude-code/mods/ork-mesa/types/index.d.ts +131 -0
- package/adapters/claude-code/mods/ork-pista/.claude-plugin/plugin.json +14 -0
- package/adapters/claude-code/mods/ork-pista/hooks/acoes.ts +71 -0
- package/adapters/claude-code/mods/ork-pista/hooks/ci.ts +121 -0
- package/adapters/claude-code/mods/ork-pista/hooks/hooks.json +3 -0
- package/adapters/claude-code/mods/ork-pista/hooks/pista.tsx +356 -0
- package/adapters/claude-code/mods/ork-pista/hooks/register.tsx +439 -0
- package/adapters/claude-code/mods/ork-pista/orkastery-mod.json +5 -0
- package/adapters/claude-code/mods/ork-pista/types/index.d.ts +85 -0
- package/adapters/claude-code/mods/ork-ponte/.claude-plugin/plugin.json +13 -0
- package/adapters/claude-code/mods/ork-ponte/hooks/faixa.tsx +57 -0
- package/adapters/claude-code/mods/ork-ponte/hooks/guarda.ts +410 -0
- package/adapters/claude-code/mods/ork-ponte/hooks/hooks.json +3 -0
- package/adapters/claude-code/mods/ork-ponte/hooks/mostrado.ts +55 -0
- package/adapters/claude-code/mods/ork-ponte/hooks/nucleo.ts +157 -0
- package/adapters/claude-code/mods/ork-ponte/hooks/papel.ts +42 -0
- package/adapters/claude-code/mods/ork-ponte/hooks/register.ts +331 -0
- package/adapters/claude-code/mods/ork-ponte/hooks/vigia.ts +76 -0
- package/adapters/claude-code/mods/ork-ponte/orkastery-mod.json +5 -0
- package/adapters/claude-code/mods/ork-ponte/types/index.d.ts +178 -0
- package/adapters/claude-code/mods/ork-portao/.claude-plugin/plugin.json +14 -0
- package/adapters/claude-code/mods/ork-portao/hooks/hooks.json +3 -0
- package/adapters/claude-code/mods/ork-portao/hooks/lease.ts +201 -0
- package/adapters/claude-code/mods/ork-portao/hooks/plano.ts +304 -0
- package/adapters/claude-code/mods/ork-portao/hooks/register.ts +339 -0
- package/adapters/claude-code/mods/ork-portao/hooks/verify.ts +152 -0
- package/adapters/claude-code/mods/ork-portao/orkastery-mod.json +5 -0
- package/adapters/claude-code/mods/ork-portao/types/index.d.ts +60 -0
- package/adapters/claude-code/mods/ork-radar/.claude-plugin/plugin.json +14 -0
- package/adapters/claude-code/mods/ork-radar/hooks/colisao.ts +420 -0
- package/adapters/claude-code/mods/ork-radar/hooks/hooks.json +3 -0
- package/adapters/claude-code/mods/ork-radar/hooks/mapa.tsx +322 -0
- package/adapters/claude-code/mods/ork-radar/hooks/register.tsx +470 -0
- package/adapters/claude-code/mods/ork-radar/orkastery-mod.json +5 -0
- package/adapters/claude-code/mods/ork-radar/types/index.d.ts +72 -0
- package/adapters/claude-code/mods/ork-ritual/.claude-plugin/plugin.json +14 -0
- package/adapters/claude-code/mods/ork-ritual/hooks/hooks.json +3 -0
- package/adapters/claude-code/mods/ork-ritual/hooks/nota.ts +88 -0
- package/adapters/claude-code/mods/ork-ritual/hooks/register.tsx +494 -0
- package/adapters/claude-code/mods/ork-ritual/hooks/replay.tsx +271 -0
- package/adapters/claude-code/mods/ork-ritual/hooks/ritual.ts +218 -0
- package/adapters/claude-code/mods/ork-ritual/orkastery-mod.json +5 -0
- package/adapters/claude-code/mods/ork-ritual/types/index.d.ts +106 -0
- package/adapters/claude-code/mods/ork-sentinela/.claude-plugin/plugin.json +14 -0
- package/adapters/claude-code/mods/ork-sentinela/hooks/alertas.ts +85 -0
- package/adapters/claude-code/mods/ork-sentinela/hooks/despacho.ts +156 -0
- package/adapters/claude-code/mods/ork-sentinela/hooks/hooks.json +3 -0
- package/adapters/claude-code/mods/ork-sentinela/hooks/register.ts +511 -0
- package/adapters/claude-code/mods/ork-sentinela/hooks/vigia.ts +186 -0
- package/adapters/claude-code/mods/ork-sentinela/orkastery-mod.json +5 -0
- package/adapters/claude-code/mods/ork-sentinela/types/index.d.ts +65 -0
- package/adapters/claude-code/mods/ork-torre/.claude-plugin/plugin.json +14 -0
- package/adapters/claude-code/mods/ork-torre/hooks/agenda.ts +60 -0
- package/adapters/claude-code/mods/ork-torre/hooks/detalhe.tsx +236 -0
- package/adapters/claude-code/mods/ork-torre/hooks/frases.ts +42 -0
- package/adapters/claude-code/mods/ork-torre/hooks/hooks.json +3 -0
- package/adapters/claude-code/mods/ork-torre/hooks/painel.tsx +344 -0
- package/adapters/claude-code/mods/ork-torre/hooks/rede.ts +97 -0
- package/adapters/claude-code/mods/ork-torre/hooks/register.tsx +437 -0
- package/adapters/claude-code/mods/ork-torre/orkastery-mod.json +5 -0
- package/adapters/claude-code/mods/ork-torre/types/index.d.ts +108 -0
- package/adapters/codex/skills/ork/SKILL.md +2 -0
- package/adapters/hermes/README.md +64 -1
- package/adapters/hermes/bin/ork-conhecimento-colecoes.sh +14 -0
- package/adapters/hermes/bin/ork-conhecimento-listar.sh +15 -0
- package/adapters/hermes/bin/ork-conhecimento-mostrar.sh +16 -0
- package/adapters/hermes/bin/ork-conhecimento-verificar.sh +15 -0
- package/adapters/hermes/bin/ork-vigia-batida.py +127 -0
- package/adapters/hermes/hermes.plugin.json +4 -0
- package/adapters/hermes/hitl-ingress/__init__.py +101 -8
- package/adapters/hermes/skills/orkastery-devmaster/SKILL.md +3 -3
- package/adapters/openclaw/README.md +83 -10
- package/adapters/openclaw/bin/ork-vigia-batida.js +86 -0
- package/adapters/openclaw/dist/hitl-ingress.js +106 -9
- package/adapters/openclaw/dist/index.js +86 -0
- package/adapters/openclaw/openclaw.plugin.json +34 -4
- package/adapters/openclaw/package.json +2 -2
- package/adapters/openclaw/src/hitl-ingress.ts +103 -9
- package/adapters/openclaw/src/index.ts +94 -0
- package/assets/adapters-en/claude-code/README.md +403 -0
- package/assets/adapters-en/claude-code/agents/ork-check.md +33 -0
- package/assets/adapters-en/claude-code/agents/ork-go.md +33 -0
- package/assets/adapters-en/claude-code/agents/ork-goal.md +34 -0
- package/assets/adapters-en/claude-code/agents/ork-master.md +35 -0
- package/assets/adapters-en/claude-code/agents/ork-plan.md +33 -0
- package/assets/adapters-en/claude-code/agents/ork-ship.md +33 -0
- package/assets/adapters-en/claude-code/commands/check.md +46 -0
- package/assets/adapters-en/claude-code/commands/go.md +46 -0
- package/assets/adapters-en/claude-code/commands/goal.md +55 -0
- package/assets/adapters-en/claude-code/commands/master.md +54 -0
- package/assets/adapters-en/claude-code/commands/onboarding.md +22 -0
- package/assets/adapters-en/claude-code/commands/ork.md +126 -0
- package/assets/adapters-en/claude-code/commands/plan.md +47 -0
- package/assets/adapters-en/claude-code/commands/ship.md +45 -0
- package/assets/adapters-en/codex/skills/ork/SKILL.md +85 -0
- package/assets/adapters-en/hermes/README.md +273 -0
- package/assets/adapters-en/hermes/skills/orkastery-devmaster/SKILL.md +169 -0
- package/assets/docs-en/markdownlint-cli2.jsonc +22 -0
- package/assets/docs-en/padroes/documentacao-de-produto.md +135 -0
- package/assets/docs-en/padroes/roadmap-de-produto.md +100 -0
- package/assets/docs-en/produto/README.md +14 -0
- package/assets/docs-en/produto/_modelo-feature.md +62 -0
- package/assets/docs-en/roadmap/README.md +14 -0
- package/assets/docs-en/roadmap/_modelo-item.md +75 -0
- package/assets/references-en/README.md +25 -0
- package/assets/references-en/code-review-axes.md +82 -0
- package/assets/references-en/definition-of-done.md +74 -0
- package/assets/references-en/performance-checklist.md +53 -0
- package/assets/references-en/security-checklist.md +101 -0
- package/assets/references-en/testing-patterns.md +51 -0
- package/assets/security-scan/defaults/.golangci.yml +2 -0
- package/assets/security-scan/defaults/eslint.config.mjs +11 -0
- package/assets/security-scan/defaults/gitleaks.toml +3 -0
- package/assets/security-scan/defaults/ruff.toml +1 -0
- package/assets/security-scan/tools-agil.json +87 -0
- package/assets/security-scan/tools.json +625 -0
- package/assets/skills-en/core/onboarding/SKILL.md +58 -0
- package/assets/skills-en/core/orkastery-bootstrap/SKILL.md +119 -0
- package/assets/skills-en/core/thread-state/SKILL.md +88 -0
- package/assets/skills-en/governance/decision-triage/SKILL.md +65 -0
- package/assets/skills-en/governance/narrative-guardian/SKILL.md +66 -0
- package/assets/skills-en/governance/roadmap-keeper/SKILL.md +60 -0
- package/assets/skills-en/governance/scope-check-capability-map/SKILL.md +71 -0
- package/assets/skills-en/observability/thread-tracing/SKILL.md +63 -0
- package/assets/skills-en/phases/check-quality/SKILL.md +103 -0
- package/assets/skills-en/phases/go-implementation/SKILL.md +78 -0
- package/assets/skills-en/phases/goal-definition/SKILL.md +69 -0
- package/assets/skills-en/phases/master-metrics/SKILL.md +72 -0
- package/assets/skills-en/phases/plan-specification/SKILL.md +67 -0
- package/assets/skills-en/phases/security-remediation/SKILL.md +70 -0
- package/assets/skills-en/phases/ship-release/SKILL.md +71 -0
- package/assets/skills-en/reviewers/code-reviewer/SKILL.md +61 -0
- package/assets/skills-en/reviewers/security-auditor/SKILL.md +93 -0
- package/assets/skills-en/reviewers/test-engineer/SKILL.md +66 -0
- package/assets/skills-en/reviewers/web-performance-auditor/SKILL.md +63 -0
- package/dist/adapters/claude-bg.js +193 -15
- package/dist/adapters/codex-controller-worker.js +12 -5
- package/dist/adapters/codex-events.js +16 -4
- package/dist/adapters/codex.js +13 -2
- package/dist/agents-md.js +24 -15
- package/dist/atualizar-branch.js +245 -0
- package/dist/auditoria.js +13 -11
- package/dist/auditrun.js +68 -48
- package/dist/autorizacao-duravel.js +327 -0
- package/dist/board.js +98 -43
- package/dist/branch-de-estado.js +39 -9
- package/dist/busca-semantica.js +7 -5
- package/dist/catalogo.js +35 -1
- package/dist/changelog-reconciliacao.js +290 -0
- package/dist/check-agil.js +500 -0
- package/dist/check-modo.js +41 -0
- package/dist/check-paralelo.js +183 -0
- package/dist/ci.js +255 -46
- package/dist/ciclos.js +8 -6
- package/dist/claim-lint.js +12 -8
- package/dist/claims-conferir.js +350 -0
- package/dist/claims.js +13 -10
- package/dist/company-brain-client.js +45 -3
- package/dist/company-brain-journal.js +2 -1
- package/dist/company-brain-migration.js +47 -6
- package/dist/conducao-batida.js +759 -0
- package/dist/conducao-sentinela.js +405 -0
- package/dist/conducao-texto.js +12 -18
- package/dist/conducao.js +206 -59
- package/dist/conhecimento-consulta.js +270 -0
- package/dist/conhecimento.js +514 -0
- package/dist/conta-esgotada.js +127 -0
- package/dist/dado-privado.js +816 -0
- package/dist/decisao-autonoma.js +5 -4
- package/dist/demo.js +14 -12
- package/dist/dependencias-da-worktree.js +25 -0
- package/dist/divida.js +38 -36
- package/dist/docs.js +103 -82
- package/dist/doctor-forja.js +345 -0
- package/dist/doctor-pulse-cron.js +294 -27
- package/dist/doctor-rede.js +18 -17
- package/dist/doctor.js +278 -116
- package/dist/dsn-da-memoria.js +417 -0
- package/dist/entrega-por-mod.js +503 -0
- package/dist/entrega-pr.js +158 -57
- package/dist/escopo-escrita.js +10 -1
- package/dist/esgotamentos.js +13 -11
- package/dist/estado-thread.js +42 -17
- package/dist/evalrunner.js +35 -32
- package/dist/experiencia-instalacao.js +45 -25
- package/dist/fabrica-batida.js +323 -0
- package/dist/fabrica-estado.js +49 -16
- package/dist/fabrica-publicar.js +3 -1
- package/dist/fila-pesada.js +444 -0
- package/dist/fix.js +24 -21
- package/dist/forja/adaptador.js +6 -0
- package/dist/forja/ambiente-de-ci.js +27 -0
- package/dist/forja/api.js +256 -0
- package/dist/forja/cache.js +89 -0
- package/dist/forja/cli.js +60 -0
- package/dist/forja/contrato.js +9 -0
- package/dist/forja/endereco.js +43 -0
- package/dist/forja/estado.js +22 -0
- package/dist/forja/executor.js +73 -0
- package/dist/forja/github/ci.js +95 -0
- package/dist/forja/github/dono-da-rede.js +18 -0
- package/dist/forja/github/metadados.js +15 -0
- package/dist/forja/github/pedidos.js +200 -0
- package/dist/forja/gitlab/ci.js +141 -0
- package/dist/forja/gitlab/consultas.js +59 -0
- package/dist/forja/gitlab/dono-da-rede.js +43 -0
- package/dist/forja/gitlab/metadados.js +15 -0
- package/dist/forja/gitlab/pedidos-abertos.js +158 -0
- package/dist/forja/gitlab/pedidos.js +141 -0
- package/dist/forja/produtor.js +32 -0
- package/dist/forja/registro.js +31 -0
- package/dist/forja/resolver.js +121 -0
- package/dist/forja/texto.js +13 -0
- package/dist/forja/versao.js +71 -0
- package/dist/forja.js +124 -81
- package/dist/gates.js +3 -28
- package/dist/handoff.js +33 -19
- package/dist/hitl-contract.js +46 -43
- package/dist/hitl-curto.js +37 -25
- package/dist/hitl-gates.js +13 -11
- package/dist/hitl-local-receipt.js +53 -0
- package/dist/hitl-local.js +11 -2
- package/dist/hitl-lock.js +5 -11
- package/dist/hitl-public-receipt.js +11 -0
- package/dist/hitl-resumo.js +72 -3
- package/dist/hitl-sessions.js +62 -9
- package/dist/hitl-tempo-parado.js +4 -4
- package/dist/hitl-texto-livre.js +7 -4
- package/dist/hitl.js +63 -64
- package/dist/horario.js +30 -7
- package/dist/hosts.js +155 -134
- package/dist/impedimento.js +108 -14
- package/dist/index.js +1421 -1019
- package/dist/indice-vetorial.js +14 -12
- package/dist/indice.js +7 -1
- package/dist/init.js +54 -49
- package/dist/instabilidade.js +144 -0
- package/dist/integracoes-locais.js +4 -0
- package/dist/intelligence-graph-cli.js +213 -88
- package/dist/intelligence-graph-contexto.js +56 -17
- package/dist/intelligence-graph-contract.js +2 -1
- package/dist/intelligence-graph-extract-md.js +56 -4
- package/dist/intelligence-graph-extract-ts.js +71 -3
- package/dist/intelligence-graph-query.js +96 -34
- package/dist/leases.js +19 -18
- package/dist/ledger-stats.js +17 -16
- package/dist/ledger.js +46 -2
- package/dist/licoes.js +12 -11
- package/dist/liveness.js +6 -3
- package/dist/locale-accounts.js +220 -0
- package/dist/locale-adapter.js +291 -0
- package/dist/locale-ajuda.js +833 -0
- package/dist/locale-audit.js +199 -0
- package/dist/locale-claims.js +213 -0
- package/dist/locale-conducao.js +138 -0
- package/dist/locale-conhecimento.js +181 -0
- package/dist/locale-decisao.js +205 -0
- package/dist/locale-docs.js +230 -0
- package/dist/locale-estado.js +101 -0
- package/dist/locale-forja.js +290 -0
- package/dist/locale-gerados.js +165 -0
- package/dist/locale-grafo.js +129 -0
- package/dist/locale-master.js +182 -0
- package/dist/locale-network.js +524 -0
- package/dist/locale-onboarding.js +92 -0
- package/dist/locale-operacao-restante.js +931 -0
- package/dist/locale-phase.js +151 -0
- package/dist/locale-projetos.js +100 -0
- package/dist/locale-prompts.js +194 -0
- package/dist/locale-pulse.js +349 -0
- package/dist/locale-reservas.js +87 -0
- package/dist/locale-retry.js +524 -0
- package/dist/locale-roadmap.js +102 -0
- package/dist/locale-security-scan.js +69 -0
- package/dist/locale-setup.js +192 -0
- package/dist/locale-ship.js +597 -0
- package/dist/locale-thread.js +421 -0
- package/dist/locale-verify.js +201 -0
- package/dist/locale-worktree.js +246 -0
- package/dist/locale.js +1258 -0
- package/dist/maestro-runtime.js +22 -3
- package/dist/manifest.js +415 -13
- package/dist/maquina-ociosa.js +211 -0
- package/dist/maquina.js +31 -7
- package/dist/master-digest.js +6 -1
- package/dist/master-nota-local.js +200 -0
- package/dist/master-nota.js +14 -8
- package/dist/master.js +139 -65
- package/dist/mcp-artifacts.js +11 -2
- package/dist/mcp-conhecimento.js +52 -0
- package/dist/mcp-experiencia.js +26 -5
- package/dist/mcp-git.js +23 -6
- package/dist/mcp-grafo.js +7 -4
- package/dist/mcp-install.js +73 -8
- package/dist/mcp-noctum.js +101 -0
- package/dist/mcp-server.js +90 -16
- package/dist/mcp-ship-transporte.js +977 -0
- package/dist/mcp-ship.js +71 -25
- package/dist/mcp-transportes.js +17 -0
- package/dist/mcp-verify.js +6 -1
- package/dist/memoria.js +63 -58
- package/dist/modos-migracao.js +8 -6
- package/dist/modos.js +20 -24
- package/dist/network-roadmap.js +90 -51
- package/dist/noctum-aceite.js +789 -0
- package/dist/noctum-arco.js +1418 -0
- package/dist/noctum-capacidade.js +141 -0
- package/dist/noctum-changelog.js +399 -0
- package/dist/noctum-cli.js +482 -0
- package/dist/noctum-coordenacao.js +1225 -0
- package/dist/noctum-entrega.js +1169 -0
- package/dist/noctum-envelope.js +1046 -0
- package/dist/noctum-execucao.js +376 -0
- package/dist/noctum-fechamento.js +405 -0
- package/dist/noctum-fila.js +314 -0
- package/dist/noctum-guarda.js +256 -0
- package/dist/noctum-integracao.js +507 -0
- package/dist/noctum-maquinas.js +383 -0
- package/dist/noctum-medicao.js +450 -0
- package/dist/noctum-modo.js +362 -0
- package/dist/noctum-pergunta-canal.js +96 -0
- package/dist/noctum-pergunta.js +115 -0
- package/dist/noctum-provas.js +838 -0
- package/dist/noctum-reconciliacao.js +591 -0
- package/dist/noctum-registro.js +215 -0
- package/dist/noctum-relatorio.js +827 -0
- package/dist/noctum-resposta.js +207 -0
- package/dist/noctum-sessoes-em-voo.js +93 -0
- package/dist/noctum-supervisao.js +649 -0
- package/dist/noctum-terminal.js +459 -0
- package/dist/noctum-transporte.js +655 -0
- package/dist/noctum-vigia.js +639 -0
- package/dist/ocupacao.js +32 -3
- package/dist/onboarding.js +56 -26
- package/dist/orkmind.js +48 -25
- package/dist/orquestracao.js +44 -47
- package/dist/parado-no-condutor.js +174 -127
- package/dist/phase.js +144 -63
- package/dist/policies.js +37 -4
- package/dist/portfolio.js +4 -2
- package/dist/postura-local.js +235 -0
- package/dist/preflight.js +11 -10
- package/dist/procedencia.js +220 -0
- package/dist/projeto-alvo.js +186 -24
- package/dist/prompts.js +140 -42
- package/dist/prova-minima.js +5 -6
- package/dist/pulse-cadencia.js +5 -4
- package/dist/pulse-consentimento.js +53 -1
- package/dist/pulse-delivery.js +151 -24
- package/dist/pulse-resposta.js +368 -4
- package/dist/pulse.js +188 -22
- package/dist/ratelimit.js +16 -6
- package/dist/recall.js +14 -13
- package/dist/redacao-saida.js +63 -0
- package/dist/rede-adesao.js +13 -8
- package/dist/rede-forja.js +108 -24
- package/dist/rede-status.js +66 -47
- package/dist/rede.js +86 -46
- package/dist/retomada-checkpoint.js +101 -0
- package/dist/retry.js +451 -212
- package/dist/roadmap-reservas.js +45 -28
- package/dist/roadmap-status.js +129 -33
- package/dist/runtime-ambiente.js +5 -0
- package/dist/runtime-context.js +284 -32
- package/dist/runtime-escada.js +423 -0
- package/dist/runtime-profiles.js +103 -46
- package/dist/runtimes.js +2 -1
- package/dist/saida-segura.js +3 -2
- package/dist/security-scan/agil.js +355 -0
- package/dist/security-scan/cli.js +76 -0
- package/dist/security-scan/compare.js +149 -0
- package/dist/security-scan/config.js +93 -0
- package/dist/security-scan/detect.js +97 -0
- package/dist/security-scan/executor.js +188 -0
- package/dist/security-scan/guard.js +180 -0
- package/dist/security-scan/imagem-de-lint.js +96 -0
- package/dist/security-scan/normalize/actionlint.js +12 -0
- package/dist/security-scan/normalize/eslint.js +12 -0
- package/dist/security-scan/normalize/gitleaks.js +13 -0
- package/dist/security-scan/normalize/golangci-lint.js +13 -0
- package/dist/security-scan/normalize/govulncheck.js +36 -0
- package/dist/security-scan/normalize/index.js +25 -0
- package/dist/security-scan/normalize/npm-audit.js +30 -0
- package/dist/security-scan/normalize/osv-scanner.js +32 -0
- package/dist/security-scan/normalize/oxlint.js +51 -0
- package/dist/security-scan/normalize/pip-audit.js +16 -0
- package/dist/security-scan/normalize/ruff.js +12 -0
- package/dist/security-scan/normalize/semgrep.js +20 -0
- package/dist/security-scan/normalize/trivy.js +33 -0
- package/dist/security-scan/normalize/util.js +204 -0
- package/dist/security-scan/normalize/zizmor.js +19 -0
- package/dist/security-scan/report.js +156 -0
- package/dist/security-scan/run.js +448 -0
- package/dist/security-scan/tools.js +62 -0
- package/dist/security-scan/trabalhador.js +74 -0
- package/dist/security-scan/types.js +15 -0
- package/dist/session-events.js +26 -5
- package/dist/session-watcher-claude.js +81 -20
- package/dist/session-watcher.js +340 -42
- package/dist/sessoes-contas.js +10 -1
- package/dist/sessoes-inventario.js +1 -1
- package/dist/sessoes.js +25 -23
- package/dist/setup.js +59 -58
- package/dist/ship-publicar.js +971 -0
- package/dist/ship.js +243 -97
- package/dist/steal.js +77 -0
- package/dist/superficie.js +14 -11
- package/dist/thread-close.js +12 -11
- package/dist/thread.js +274 -100
- package/dist/tokens.js +15 -11
- package/dist/trabalho-thread.js +297 -0
- package/dist/transporte-do-canal.js +189 -0
- package/dist/types.js +12 -1
- package/dist/util.js +13 -3
- package/dist/varredura-acoes.js +507 -0
- package/dist/verify.js +608 -76
- package/dist/vida-da-thread.js +254 -0
- package/dist/worktree-local.js +167 -0
- package/dist/worktree.js +99 -83
- package/dist/yaml.js +27 -8
- package/eval/casos/check-quality.json +77 -0
- package/eval/casos/security-auditor.json +148 -0
- package/eval/casos/security-remediation.json +161 -0
- package/eval/fixtures/security-scan/README.md +8 -0
- package/eval/fixtures/security-scan/go/.github/workflows/ci.yml +12 -0
- package/eval/fixtures/security-scan/go/Dockerfile +4 -0
- package/eval/fixtures/security-scan/go/README.md +4 -0
- package/eval/fixtures/security-scan/go/config.go +4 -0
- package/eval/fixtures/security-scan/go/go.mod +5 -0
- package/eval/fixtures/security-scan/go/go.sum +2 -0
- package/eval/fixtures/security-scan/go/main.go +31 -0
- package/eval/fixtures/security-scan/js/.github/workflows/ci.yml +12 -0
- package/eval/fixtures/security-scan/js/Dockerfile +3 -0
- package/eval/fixtures/security-scan/js/README.md +4 -0
- package/eval/fixtures/security-scan/js/package-lock.json +844 -0
- package/eval/fixtures/security-scan/js/package.json +10 -0
- package/eval/fixtures/security-scan/js/src/config.js +4 -0
- package/eval/fixtures/security-scan/js/src/server.js +17 -0
- package/eval/fixtures/security-scan/js/src/util.ts +4 -0
- package/eval/fixtures/security-scan/js/tsconfig.json +4 -0
- package/eval/fixtures/security-scan/python/.github/workflows/ci.yml +12 -0
- package/eval/fixtures/security-scan/python/Dockerfile +3 -0
- package/eval/fixtures/security-scan/python/README.md +4 -0
- package/eval/fixtures/security-scan/python/app/__init__.py +0 -0
- package/eval/fixtures/security-scan/python/app/config.py +2 -0
- package/eval/fixtures/security-scan/python/app/main.py +19 -0
- package/eval/fixtures/security-scan/python/requirements.txt +1 -0
- package/package.json +9 -4
- package/references/security-checklist.md +3 -3
- package/schemas/code-artifact-graph.v1.schema.json +2 -1
- package/skills/README.md +1 -0
- package/skills/core/orkastery-bootstrap/SKILL.md +2 -2
- package/skills/phases/check-quality/SKILL.md +16 -0
- package/skills/phases/go-implementation/SKILL.md +6 -0
- package/skills/phases/security-remediation/SKILL.md +70 -0
- package/skills/reviewers/security-auditor/SKILL.md +25 -0
package/dist/session-events.js
CHANGED
|
@@ -49,6 +49,9 @@ const ledger_1 = require("./ledger");
|
|
|
49
49
|
exports.LIMITE_EVENTO_BYTES = 16384;
|
|
50
50
|
exports.TIPOS_SENSOR = ['permission_prompt', 'permission_request', 'notification',
|
|
51
51
|
'stop', 'subagent_stop', 'commit', 'heartbeat', 'resumed'];
|
|
52
|
+
/** As contagens de trabalho pendente que o Stop aceita, cada uma um inteiro de 0 a `LIMITE_CONTAGEM_DO_STOP`. */
|
|
53
|
+
const CONTAGENS_DO_STOP = ['backgroundTasks', 'sessionCrons'];
|
|
54
|
+
const LIMITE_CONTAGEM_DO_STOP = 10000;
|
|
52
55
|
/**
|
|
53
56
|
* A adoção governa a identidade de uma sessão que já estava rodando e, por decisão da
|
|
54
57
|
* higiene de runtimes, não inventa data de despacho nem prompt executado. O sensor ancora
|
|
@@ -63,10 +66,12 @@ function exigirSessaoDespachada(sessao, sessionId) {
|
|
|
63
66
|
}
|
|
64
67
|
return sessao;
|
|
65
68
|
}
|
|
66
|
-
function resolverSessao(raiz, sessionId) {
|
|
69
|
+
function resolverSessao(raiz, sessionId, threadId) {
|
|
67
70
|
if (!/^[a-zA-Z0-9][a-zA-Z0-9_-]{0,127}$/.test(sessionId))
|
|
68
71
|
throw new Error('sessionId inválido');
|
|
69
|
-
|
|
72
|
+
// Um watcher já vinculado não depende da leitura de threads alheias a cada poll.
|
|
73
|
+
// O vínculo explícito continua exigindo uma única sessão e o estado canônico.
|
|
74
|
+
const achadas = (threadId === undefined ? (0, thread_1.listarIds)(raiz) : [threadId]).flatMap(id => {
|
|
70
75
|
const thread = (0, thread_1.lerThread)(raiz, id);
|
|
71
76
|
return thread.sessoes.filter(s => s.sessionId === sessionId).map(sessao => ({ thread, sessao }));
|
|
72
77
|
});
|
|
@@ -75,8 +80,10 @@ function resolverSessao(raiz, sessionId) {
|
|
|
75
80
|
const achada = achadas[0];
|
|
76
81
|
if (achada.thread.worktree) {
|
|
77
82
|
const estado = (0, estado_thread_1.auditarEstado)(raiz, achada.thread.id, achada.thread.worktree);
|
|
83
|
+
// comEstadoParaGit materializa o estado local durante commit/rebase. Não leia essa
|
|
84
|
+
// cópia: o watcher pode repetir a auditoria, com seu orçamento finito de falhas.
|
|
78
85
|
if (estado.nivel !== 'ok')
|
|
79
|
-
throw new Error(estado.detalhe);
|
|
86
|
+
throw Object.assign(new Error(estado.detalhe), { code: 'SESSION_STATE_SPLIT' });
|
|
80
87
|
}
|
|
81
88
|
return achada;
|
|
82
89
|
}
|
|
@@ -86,11 +93,16 @@ function validarPayload(bruto, tipo, agoraMs) {
|
|
|
86
93
|
const p = JSON.parse(bruto.trim() || '{}');
|
|
87
94
|
if (!p || typeof p !== 'object' || Array.isArray(p))
|
|
88
95
|
throw new Error('payload deve ser objeto JSON');
|
|
89
|
-
const campos = ['observedAt', 'eventId', 'notificationType', 'commit'];
|
|
96
|
+
const campos = ['observedAt', 'eventId', 'notificationType', 'commit', 'accountFailure'];
|
|
90
97
|
for (const [k, v] of Object.entries(p)) {
|
|
91
|
-
|
|
98
|
+
const valido = CONTAGENS_DO_STOP.includes(k)
|
|
99
|
+
? Number.isSafeInteger(v) && v >= 0 && v <= LIMITE_CONTAGEM_DO_STOP
|
|
100
|
+
: campos.includes(k) && typeof v === 'string';
|
|
101
|
+
if (!valido)
|
|
92
102
|
throw new Error(`campo de payload inválido: ${k}`);
|
|
93
103
|
}
|
|
104
|
+
if (tipo !== 'stop' && CONTAGENS_DO_STOP.some((k) => k in p))
|
|
105
|
+
throw new Error('contagem de trabalho pendente só vale no stop');
|
|
94
106
|
const payload = p;
|
|
95
107
|
if (payload.observedAt !== undefined && (!/^\d{4}-\d\d-\d\dT\d\d:\d\d:\d\d\.\d{3}Z$/.test(payload.observedAt) ||
|
|
96
108
|
!Number.isFinite(Date.parse(payload.observedAt)) || new Date(payload.observedAt).toISOString() !== payload.observedAt ||
|
|
@@ -101,6 +113,10 @@ function validarPayload(bruto, tipo, agoraMs) {
|
|
|
101
113
|
if (payload.notificationType !== undefined && !['permission_prompt', 'idle_prompt', 'auth_success', 'elicitation_dialog'].includes(payload.notificationType)) {
|
|
102
114
|
throw new Error('notificationType inválido');
|
|
103
115
|
}
|
|
116
|
+
if (payload.accountFailure !== undefined &&
|
|
117
|
+
(payload.accountFailure !== 'runtime.quota-exhausted' || !['notification', 'stop'].includes(tipo))) {
|
|
118
|
+
throw new Error('accountFailure inválido');
|
|
119
|
+
}
|
|
104
120
|
if ((tipo === 'commit' && !payload.commit) || (payload.commit !== undefined &&
|
|
105
121
|
(tipo !== 'commit' || !/^(?:[a-f0-9]{40}|[a-f0-9]{64})$/.test(payload.commit))))
|
|
106
122
|
throw new Error('commit exige SHA completo');
|
|
@@ -179,6 +195,11 @@ function ingerirEvento(raiz, sessionId, tipoBruto, bruto = '{}', agoraMs = Date.
|
|
|
179
195
|
// I-34: a notificação de ociosidade depois do Stop não é atividade; sem o tipo gravado,
|
|
180
196
|
// o observador claude-bg não teria como distingui-la e trataria o Stop como superado.
|
|
181
197
|
...(tipo === 'notification' && payload.notificationType ? { notificationType: payload.notificationType } : {}),
|
|
198
|
+
// RM-037 (CHECK 3 da ork-rm037defeit2): sem as contagens gravadas, o observador não toma a ociosidade por fim do turno.
|
|
199
|
+
...(payload.backgroundTasks !== undefined ? { backgroundTasks: payload.backgroundTasks } : {}),
|
|
200
|
+
...(payload.sessionCrons !== undefined ? { sessionCrons: payload.sessionCrons } : {}),
|
|
201
|
+
...(payload.accountFailure ? { motivo: payload.accountFailure,
|
|
202
|
+
falhaDeConta: { motivo: payload.accountFailure, resetEm: null, fonte: 'hook', trecho: 'sinal tipado do hook' } } : {}),
|
|
182
203
|
...(bloqueio ? { tipoDeHitl: 'permissao', pergunta: null, estadoRuntime: 'blocked' } : {}) };
|
|
183
204
|
if (retomada && ultimo?.tipo === 'sessao_bloqueada' && Date.parse(observedAt) > Date.parse(ultimo.ts)) {
|
|
184
205
|
(0, ledger_1.registrar)(dir, thread.id, 'sessao_destravada', { ...dados, sensorEventId: eventId + ':resume' });
|
|
@@ -33,11 +33,13 @@ var __importStar = (this && this.__importStar) || (function () {
|
|
|
33
33
|
};
|
|
34
34
|
})();
|
|
35
35
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
36
|
-
exports.THREAD_REMOVIDA = exports.ARTEFATO_DA_FASE = exports.INTERVALO_WATCH_CLAUDE_MS = void 0;
|
|
36
|
+
exports.THREAD_REMOVIDA = exports.ARTEFATO_DA_FASE = exports.OCIOSA_DEPOIS_DO_STOP_MS = exports.INTERVALO_WATCH_CLAUDE_MS = void 0;
|
|
37
37
|
exports.normalizarNativo = normalizarNativo;
|
|
38
38
|
exports.stopCorrelacionado = stopCorrelacionado;
|
|
39
|
+
exports.trabalhoPendenteDoStop = trabalhoPendenteDoStop;
|
|
39
40
|
exports.bloqueioPendente = bloqueioPendente;
|
|
40
41
|
exports.classificarSessaoClaude = classificarSessaoClaude;
|
|
42
|
+
exports.arquivoDaTranscricao = arquivoDaTranscricao;
|
|
41
43
|
exports.ultimoErroDeApi = ultimoErroDeApi;
|
|
42
44
|
exports.falhaDeContaDaTranscricao = falhaDeContaDaTranscricao;
|
|
43
45
|
exports.comFalhaDeConta = comFalhaDeConta;
|
|
@@ -75,9 +77,21 @@ const session_events_1 = require("./session-events");
|
|
|
75
77
|
const ledger_1 = require("./ledger");
|
|
76
78
|
const thread_1 = require("./thread");
|
|
77
79
|
const util_1 = require("./util");
|
|
80
|
+
const procedencia_1 = require("./procedencia");
|
|
78
81
|
const hitl_1 = require("./hitl");
|
|
82
|
+
const conta_esgotada_1 = require("./conta-esgotada");
|
|
79
83
|
/** Uma consulta nativa custa cerca de 0,3 s; cinco segundos mantém o custo abaixo de 10%. */
|
|
80
84
|
exports.INTERVALO_WATCH_CLAUDE_MS = 5000;
|
|
85
|
+
/**
|
|
86
|
+
* RM-037 (defeitos de 19 e 20/10/2026, defeito 4): quanto a sessão fica ociosa no prompt (`working` com `status: idle`)
|
|
87
|
+
* depois do Stop correlacionado até o observador tomar o turno por encerrado. O Claude Code mantém `working` a sessão cuja
|
|
88
|
+
* resposta final ele lê como "ainda há passo" e só a encerra (`done`) depois de 60 min ociosa (`bg retire <id>:
|
|
89
|
+
* idle-prompt, idle 60m` no log do daemon, medido em 20/10/2026), e nesse tempo a sessão segurava a condução. O `status`
|
|
90
|
+
* ocioso não basta (CHECK 3 da ork-rm037defeit2, medido no Claude Code 2.1.304): com só um despertar agendado a sessão
|
|
91
|
+
* aparece `idle` e volta a escrever quando ele dispara. Só conta a ociosidade depois do Stop que disse zero tarefa em
|
|
92
|
+
* segundo plano e zero despertar (`trabalhoPendenteDoStop`).
|
|
93
|
+
*/
|
|
94
|
+
exports.OCIOSA_DEPOIS_DO_STOP_MS = 5 * 60 * 1000;
|
|
81
95
|
const LIMITE_EVIDENCIA_BYTES = 4096;
|
|
82
96
|
/** D15 (5): teto dos textos nativos (`state`, `status`, `id`, `kind`) e do erro do diagnóstico. */
|
|
83
97
|
const LIMITE_TEXTO_NATIVO = 64;
|
|
@@ -128,6 +142,22 @@ function stopCorrelacionado(eventos, sessao) {
|
|
|
128
142
|
return null;
|
|
129
143
|
return correlacionados[ultimo];
|
|
130
144
|
}
|
|
145
|
+
/**
|
|
146
|
+
* RM-037 (CHECK 3 da ork-rm037defeit2): o trabalho que o Stop disse que ainda vai acordar a sessão, ou `null` quando ele
|
|
147
|
+
* gravou as duas contagens (`backgroundTasks` e `sessionCrons`, da entrada do hook) e as duas são zero. No Claude Code
|
|
148
|
+
* 2.1.304 o `status` fica `shell` com Bash em segundo plano e `idle` com despertar agendado (`CronCreate`,
|
|
149
|
+
* `ScheduleWakeup`, `/loop`) ou tarefa MCP. O Stop sem as contagens (hook ou runtime de antes) não prova que nada vai
|
|
150
|
+
* voltar: a sessão segue esperando, como antes desta regra, o `done` do runtime.
|
|
151
|
+
*/
|
|
152
|
+
function trabalhoPendenteDoStop(stop) {
|
|
153
|
+
const { backgroundTasks: tarefas, sessionCrons: despertares } = stop;
|
|
154
|
+
if (tarefas === 0 && despertares === 0)
|
|
155
|
+
return null;
|
|
156
|
+
if (typeof tarefas !== 'number' || typeof despertares !== 'number') {
|
|
157
|
+
return 'o Stop não disse se há tarefa em segundo plano ou despertar agendado (sem background_tasks e session_crons)';
|
|
158
|
+
}
|
|
159
|
+
return `o Stop registrou ${tarefas} tarefa(s) em segundo plano e ${despertares} despertar(es) agendado(s)`;
|
|
160
|
+
}
|
|
131
161
|
/**
|
|
132
162
|
* O último entre bloqueio, destravamento e Stop da sessão, depois do despacho, é bloqueio?
|
|
133
163
|
* O Stop resolve o bloqueio anterior: o turno só termina depois que o prompt de permissão
|
|
@@ -200,6 +230,8 @@ function classificarSessaoClaude(e) {
|
|
|
200
230
|
delete cursor.mortoDesde;
|
|
201
231
|
if (estado !== 'blocked')
|
|
202
232
|
delete cursor.bloqueadoDesde;
|
|
233
|
+
if (estado !== 'working')
|
|
234
|
+
delete cursor.ociosaDesde;
|
|
203
235
|
if (['done', 'failed', 'stopped', 'working', 'blocked'].includes(estado ?? ''))
|
|
204
236
|
delete cursor.desconhecidoDesde;
|
|
205
237
|
switch (estado) {
|
|
@@ -247,6 +279,27 @@ function classificarSessaoClaude(e) {
|
|
|
247
279
|
return esperaHumana();
|
|
248
280
|
}
|
|
249
281
|
delete cursor.bloqueadoDesde;
|
|
282
|
+
// RM-037 (defeito 4 de 19 e 20/10/2026): turno encerrado pelo Stop e a sessão ociosa no prompt (`status: idle`). O
|
|
283
|
+
// runtime só a encerra depois de 60 min; passado `OCIOSA_DEPOIS_DO_STOP_MS` sem atividade, vale a prova do `ork`, como
|
|
284
|
+
// no `done`, mas só depois do Stop que disse zero tarefa em segundo plano e zero despertar agendado (CHECK 3): o
|
|
285
|
+
// despertar deixa a sessão `idle` até disparar. O prazo conta da primeira leitura ociosa e nunca de antes do Stop: a
|
|
286
|
+
// sessão que voltou e parou de novo recomeça a contagem.
|
|
287
|
+
if (estado === 'working' && r.status === 'idle' && stop && !bloqueioPendente(e.eventos, e.sessao)) {
|
|
288
|
+
const pendente = trabalhoPendenteDoStop(stop);
|
|
289
|
+
if (pendente !== null) {
|
|
290
|
+
delete cursor.ociosaDesde;
|
|
291
|
+
return espera(`turno encerrado pelo Stop com a sessão ociosa no prompt (working/idle), mas ${pendente}; ` +
|
|
292
|
+
'a ociosidade não encerra o turno');
|
|
293
|
+
}
|
|
294
|
+
cursor.ociosaDesde ??= agora;
|
|
295
|
+
const desde = Math.max(cursor.ociosaDesde, Date.parse(stop.ts) || 0);
|
|
296
|
+
if (agora - desde < exports.OCIOSA_DEPOIS_DO_STOP_MS) {
|
|
297
|
+
return espera('turno encerrado pelo Stop com a sessão ociosa no prompt (working/idle); aguardando o prazo da ociosidade');
|
|
298
|
+
}
|
|
299
|
+
return concluir(`Stop correlacionado e sessão ociosa no prompt (working/idle) por ${exports.OCIOSA_DEPOIS_DO_STOP_MS / 60000} min, ` +
|
|
300
|
+
'sem tarefa em segundo plano nem despertar agendado no Stop', false);
|
|
301
|
+
}
|
|
302
|
+
delete cursor.ociosaDesde;
|
|
250
303
|
return espera(estado === 'blocked' ? 'sessão bloqueada à espera humana' : 'sessão trabalhando');
|
|
251
304
|
}
|
|
252
305
|
default:
|
|
@@ -270,7 +323,10 @@ function textoDoErroDeApi(e) {
|
|
|
270
323
|
return (0, hitl_1.redigirSegredos)([codigo, textos.filter(Boolean).join(' ')].filter(Boolean).join(': ')).slice(0, 4096);
|
|
271
324
|
}
|
|
272
325
|
const UUID = /^[0-9a-f]{8}(?:-[0-9a-f]{4}){3}-[0-9a-f]{12}$/i;
|
|
273
|
-
/**
|
|
326
|
+
/**
|
|
327
|
+
* A transcricao da sessao no diretorio do perfil (ou no implicito, sem perfil); `null` com sessao que nao e uuid.
|
|
328
|
+
* RM-059 (F9): o Mensageiro de Sessoes (`entrega-por-mod.ts`) acha nela o turno em que a sessao parou.
|
|
329
|
+
*/
|
|
274
330
|
function arquivoDaTranscricao(perfil, cwd, sessionId) {
|
|
275
331
|
if (!UUID.test(sessionId))
|
|
276
332
|
return null;
|
|
@@ -336,15 +392,6 @@ function falhaDeContaDaTranscricao(perfil, cwd, sessionId, agoraMs = Date.now())
|
|
|
336
392
|
function falhaDoErro(erro, agoraMs) {
|
|
337
393
|
return erro ? (0, claude_bg_1.parseFalhaDeConta)(erro.texto, erro.em ? Date.parse(erro.em) : agoraMs) : null;
|
|
338
394
|
}
|
|
339
|
-
/**
|
|
340
|
-
* RM-037 (fatia 5): a cota vista com a sessao viva. Em 02/10/2026 as sessoes de uma conta pararam as 06:00Z no
|
|
341
|
-
* limite de gasto ("your session limit resets 4:40am (<fuso>)"), sem Stop e com o processo vivo por mais uma
|
|
342
|
-
* hora; o perfil so saiu do rodizio as 07:15Z, quando o processo morreu, e o redespacho das 06:14Z caiu na mesma
|
|
343
|
-
* conta. Aqui, a cada volta com a transcricao maior que na anterior, o ultimo erro de API depois do despacho passa
|
|
344
|
-
* pelo criterio unico da D16; esgotamento com prazo futuro marca o perfil ate a hora dita (ou a janela padrao
|
|
345
|
-
* contada da mensagem) e grava `runtime_quota_detected` uma vez por erro. A fase nao fecha e a conducao nao muda:
|
|
346
|
-
* a sessao continua viva, e o fecho segue o caminho de sempre, sem marcar de novo o mesmo erro.
|
|
347
|
-
*/
|
|
348
395
|
function cotaAoVivo(ctx, perfil, cwd, cursor, erroDaTranscricao, gravar) {
|
|
349
396
|
const { sessao, dir } = ctx;
|
|
350
397
|
const arquivo = arquivoDaTranscricao(perfil, cwd, sessao.sessionId);
|
|
@@ -355,22 +402,22 @@ function cotaAoVivo(ctx, perfil, cwd, cursor, erroDaTranscricao, gravar) {
|
|
|
355
402
|
tamanho = st?.isFile() ? st.size : NaN;
|
|
356
403
|
}
|
|
357
404
|
catch {
|
|
358
|
-
return;
|
|
405
|
+
return null;
|
|
359
406
|
}
|
|
360
407
|
if (!Number.isFinite(tamanho) || cursor.transcricaoBytes === tamanho)
|
|
361
|
-
return;
|
|
408
|
+
return null;
|
|
362
409
|
cursor.transcricaoBytes = tamanho;
|
|
363
410
|
const erro = erroDaTranscricao();
|
|
364
411
|
const erroMs = erro?.em ? Date.parse(erro.em) : NaN;
|
|
365
412
|
// Linha sem instante, ou de antes deste despacho (sessao retomada), nao prova que a cota e deste turno.
|
|
366
413
|
if (!erro || !Number.isFinite(erroMs) || erroMs < Date.parse(sessao.despachadaEm))
|
|
367
|
-
return;
|
|
414
|
+
return null;
|
|
368
415
|
const falha = falhaDoErro(erro, ctx.agoraMs);
|
|
369
416
|
if (falha?.motivo !== 'runtime.quota-exhausted' || !ctx.carregado)
|
|
370
|
-
return;
|
|
417
|
+
return null;
|
|
371
418
|
const esgotadoAte = (0, ratelimit_1.prazoDaCotaVista)(ctx.carregado.manifesto, falha, erroMs, ctx.agoraMs);
|
|
372
419
|
if (!esgotadoAte)
|
|
373
|
-
return;
|
|
420
|
+
return null;
|
|
374
421
|
// A chave do erro: o uuid da linha ou, sem ele, o instante e o trecho (dado de maquina, nunca texto).
|
|
375
422
|
const sensorEventId = (0, node_crypto_1.createHash)('sha256')
|
|
376
423
|
.update(JSON.stringify([sessao.sessionId, sessao.despachadaEm, erro.uuid ?? [erro.em, falha.trecho]])).digest('hex');
|
|
@@ -393,6 +440,7 @@ function cotaAoVivo(ctx, perfil, cwd, cursor, erroDaTranscricao, gravar) {
|
|
|
393
440
|
esgotadoAte, trecho: falha.trecho.replace(/\p{Cc}/gu, ' '), perfil: perfil ? { id: perfil.id, runtime: perfil.runtime } : null,
|
|
394
441
|
perfilMarcado: !!perfil, origem: 'sessions.watch' });
|
|
395
442
|
});
|
|
443
|
+
return { falha, esgotadoAte, erroEm: erro.em };
|
|
396
444
|
}
|
|
397
445
|
/**
|
|
398
446
|
* I-33 (D11): precedencia entre a prova da I-34 e a falha de conta. Com Stop correlacionado vale
|
|
@@ -471,11 +519,11 @@ function saidaDoArtefato(raiz, threadId, sessao, fonte, eventos) {
|
|
|
471
519
|
: atual.mtimeMs !== null && atual.mtimeMs >= Date.parse(sessao.despachadaEm);
|
|
472
520
|
return { arquivo, produzido, sha256: atual.sha256, sha256Base: base?.sha256 ?? null, texto: atual.texto };
|
|
473
521
|
}
|
|
474
|
-
/** Exatamente um veredito legível numa linha `Veredito:
|
|
522
|
+
/** Exatamente um veredito legível numa linha `Veredito: ...`, incluindo a reprovação curta do prompt de CHECK. */
|
|
475
523
|
function vereditoDoParecer(texto) {
|
|
476
524
|
const achados = new Set();
|
|
477
525
|
for (const linha of texto.split('\n')) {
|
|
478
|
-
const m = /^[#>*_`\s-]*veredito[*_`\s]*:[*_`\s]*(passou|precisa de mudan[cç]a|bloqueado)(?![\p{L}\p{N}])/iu.exec(linha);
|
|
526
|
+
const m = /^[#>*_`\s-]*veredito[*_`\s]*:[*_`\s]*(passou|reprovou|precisa de mudan[cç]a|bloqueado)(?![\p{L}\p{N}])/iu.exec(linha);
|
|
479
527
|
if (m)
|
|
480
528
|
achados.add(m[1].toUpperCase().replace('Ç', 'C'));
|
|
481
529
|
}
|
|
@@ -546,6 +594,9 @@ function provaDoOrk(raiz, threadId, sessao, eventos, fonte) {
|
|
|
546
594
|
const cwd = fonte?.cwd, headNoDespacho = fonte?.head;
|
|
547
595
|
if (!cwd || typeof headNoDespacho !== 'string')
|
|
548
596
|
return falta('HEAD da worktree no despacho não registrado; commit não conferível', { commits: [], recusados: registrados });
|
|
597
|
+
// RM-047 (P2): o git da prova só roda na worktree registrada; o cwd vem do ledger.
|
|
598
|
+
if ((0, procedencia_1.cwdLocalOuNulo)(raiz, threadId, cwd, 'ledger') === null)
|
|
599
|
+
return falta('cwd do despacho fora das worktrees registradas no git; commit não conferível', { commits: [], recusados: registrados });
|
|
549
600
|
const commits = registrados.filter(sha => commitConferido(cwd, sha, headNoDespacho));
|
|
550
601
|
const recusados = registrados.filter(sha => !commits.includes(sha));
|
|
551
602
|
if (!commits.length)
|
|
@@ -622,7 +673,9 @@ function garantirFonteClaude(raiz, thread, sessao) {
|
|
|
622
673
|
if (atual)
|
|
623
674
|
return atual;
|
|
624
675
|
const despacho = eventos.filter(e => e.tipo === 'phase_dispatch' && e.sessionId === sessao.sessionId).at(-1);
|
|
625
|
-
|
|
676
|
+
// RM-047 (P2): o cwd do ledger ou do thread.json so vale como worktree registrada no git.
|
|
677
|
+
const cwd = typeof despacho?.cwd === 'string' ? (0, procedencia_1.exigirCwdLocal)(raiz, thread.id, despacho.cwd, 'ledger')
|
|
678
|
+
: (0, procedencia_1.diretorioDaThread)(raiz, thread);
|
|
626
679
|
const fonte = { nativo: 'claude-agents', cwd, origem: 'sessions.watch' };
|
|
627
680
|
validarFonteClaude(eventos, sessao.sessionId, fonte);
|
|
628
681
|
if (!(0, ledger_1.registrarSeExiste)(dir, thread.id, 'session_sensor_registered', { fase: sessao.fase, sessionId: sessao.sessionId,
|
|
@@ -692,9 +745,17 @@ function observarClaudeSobLock(ctx) {
|
|
|
692
745
|
}
|
|
693
746
|
if (!c.terminal) {
|
|
694
747
|
const lidos = cursor.transcricaoBytes;
|
|
695
|
-
cotaAoVivo(ctx, perfil, fonte.cwd, cursor, erroDaTranscricao, gravar);
|
|
748
|
+
const cota = cotaAoVivo(ctx, perfil, fonte.cwd, cursor, erroDaTranscricao, gravar);
|
|
696
749
|
if (cursor.transcricaoBytes !== lidos)
|
|
697
750
|
(0, codex_runner_1.gravarAtomico)(arquivoCursor, cursor);
|
|
751
|
+
if (cota && perfil && ctx.carregado) {
|
|
752
|
+
(0, conta_esgotada_1.reconciliarContaEsgotada)({ raiz, perfil, falha: cota.falha, esgotadoAte: cota.esgotadoAte,
|
|
753
|
+
erroEm: cota.erroEm, agoraMs: ctx.agoraMs });
|
|
754
|
+
const terminal = (0, ledger_1.lerLedger)(dir).find(e => e.tipo === 'phase_result' && e.sessionId === sessao.sessionId &&
|
|
755
|
+
e.motivo === 'runtime.quota-exhausted');
|
|
756
|
+
if (terminal)
|
|
757
|
+
return { ...base, concluido: true, classificacao: 'gate_blocked' };
|
|
758
|
+
}
|
|
698
759
|
}
|
|
699
760
|
if (!c.terminal && c.inconclusivo)
|
|
700
761
|
return (0, session_events_1.comLockDeSessao)(dir, () => {
|