@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/hitl-resumo.js
CHANGED
|
@@ -1,9 +1,12 @@
|
|
|
1
1
|
"use strict";
|
|
2
2
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
-
exports.SEM_PERGUNTA_NO_RESUMO = exports.TETO_DE_DECISOES_DETALHADAS = exports.TETO_DE_ESPERAS_POR_MAQUINA = exports.TETO_DE_PARADOS_NO_CONDUTOR = exports.TETO_DE_THREADS_NOMEADAS = exports.PERGUNTA_DO_RESUMO = exports.CONTRATO_RESUMO = void 0;
|
|
3
|
+
exports.SEM_PERGUNTA_COM_IMPEDIMENTO = exports.SEM_PERGUNTA_NO_RESUMO = exports.TETO_DE_DECISOES_DETALHADAS = exports.TETO_DE_ESPERAS_POR_MAQUINA = exports.TETO_DE_IMPEDIMENTOS = exports.TETO_DE_PARADOS_NO_CONDUTOR = exports.TETO_DA_VARREDURA = exports.TETO_DE_THREADS_NOMEADAS = exports.PERGUNTA_DO_RESUMO = exports.CONTRATO_RESUMO = void 0;
|
|
4
4
|
exports.resumirHitl = resumirHitl;
|
|
5
|
+
exports.linhasDaOciosidade = linhasDaOciosidade;
|
|
6
|
+
exports.linhasDaVarredura = linhasDaVarredura;
|
|
5
7
|
exports.linhaDoParadoNoCondutor = linhaDoParadoNoCondutor;
|
|
6
8
|
exports.linhasDoCondutor = linhasDoCondutor;
|
|
9
|
+
exports.linhasDosImpedimentos = linhasDosImpedimentos;
|
|
7
10
|
exports.linhaDosTecnicos = linhaDosTecnicos;
|
|
8
11
|
exports.linhasDasOutrasMaquinas = linhasDasOutrasMaquinas;
|
|
9
12
|
exports.linhasDasDecisoes = linhasDasDecisoes;
|
|
@@ -29,6 +32,7 @@ exports.textoDoResumo = textoDoResumo;
|
|
|
29
32
|
* mensagem do canal. Quem entrega chama a segunda.
|
|
30
33
|
*/
|
|
31
34
|
const horario_1 = require("./horario");
|
|
35
|
+
const locale_1 = require("./locale");
|
|
32
36
|
const hitl_tempo_parado_1 = require("./hitl-tempo-parado");
|
|
33
37
|
const decisao_autonoma_1 = require("./decisao-autonoma");
|
|
34
38
|
const hitl_classificacao_1 = require("./hitl-classificacao");
|
|
@@ -60,9 +64,48 @@ function resumirHitl(itens, opcoes) {
|
|
|
60
64
|
threadsTecnicas: [...new Set(tecnicos.map(i => i.thread).filter((t) => !!t))].sort(),
|
|
61
65
|
...(opcoes.paradosNoCondutor?.length ? { paradosNoCondutor: opcoes.paradosNoCondutor.map(p => ({ thread: p.thread, caso: p.caso,
|
|
62
66
|
desdeEm: p.desdeEm, proximoPasso: p.proximoPasso })) } : {}),
|
|
67
|
+
...(opcoes.impedimentosDoDono?.length ? { impedimentosDoDono: opcoes.impedimentosDoDono.map(i => ({ thread: i.thread,
|
|
68
|
+
fase: i.fase, comando: i.comando, retry: i.retry })) } : {}),
|
|
69
|
+
...(opcoes.acoesDaVarredura?.length ? { acoesDaVarredura: opcoes.acoesDaVarredura.map(a => ({ ...a })) } : {}),
|
|
70
|
+
...(opcoes.feitasPelaVarredura?.length ? { feitasPelaVarredura: opcoes.feitasPelaVarredura.map(a => ({ ...a })) } : {}),
|
|
71
|
+
...(opcoes.maquinaOciosa ? { maquinaOciosa: { ...opcoes.maquinaOciosa, sugeridas: opcoes.maquinaOciosa.sugeridas.map(x => ({ ...x })) } } : {}),
|
|
63
72
|
...(opcoes.hitlDeConducao?.acimaDaMeta ? { hitlDeConducao: opcoes.hitlDeConducao } : {}),
|
|
64
73
|
};
|
|
65
74
|
}
|
|
75
|
+
/**
|
|
76
|
+
* RM-063 (F6): a maquina ociosa no resumo, igual nos dois canais: as vagas livres, o trabalho reservado parado e as
|
|
77
|
+
* proximas threads sugeridas, cada uma com o comando.
|
|
78
|
+
*/
|
|
79
|
+
function linhasDaOciosidade(r, marcador, recuo) {
|
|
80
|
+
const o = r.maquinaOciosa;
|
|
81
|
+
if (!o)
|
|
82
|
+
return [];
|
|
83
|
+
return [`${marcador}Máquina ociosa: ${semQuebra(o.maquina)}, com ${o.livres} de ${o.limite} vagas livres e ${o.reservados} ` +
|
|
84
|
+
`${o.reservados === 1 ? 'item reservado parado' : 'itens reservados parados'}. Próximas sugeridas:`,
|
|
85
|
+
...o.sugeridas.map(x => `${recuo}• ${semQuebra(x.item)}${x.thread ? ` (${semQuebra(x.thread)})` : ''}: ${uma(x.passo, 120)} ` +
|
|
86
|
+
`(\`${semQuebra(x.comando)}\`)`)];
|
|
87
|
+
}
|
|
88
|
+
/** Quantas acoes da varredura o resumo detalha antes de contar o resto. */
|
|
89
|
+
exports.TETO_DA_VARREDURA = 5;
|
|
90
|
+
/**
|
|
91
|
+
* RM-063 (F5): as acoes da varredura no resumo, iguais nos dois canais: as que esperam o dono, com o comando (o
|
|
92
|
+
* incidente do PR #112, mesclado e dois dias sem registro sem nenhum canal avisar), e as que ela fez sozinha.
|
|
93
|
+
*/
|
|
94
|
+
function linhasDaVarredura(r, marcadores, recuo) {
|
|
95
|
+
const linhas = [];
|
|
96
|
+
const bloco = (lista, titulo) => {
|
|
97
|
+
if (!lista.length)
|
|
98
|
+
return;
|
|
99
|
+
const mostradas = lista.slice(0, exports.TETO_DA_VARREDURA), sobra = lista.length - mostradas.length;
|
|
100
|
+
if (linhas.length)
|
|
101
|
+
linhas.push('');
|
|
102
|
+
linhas.push(titulo, ...mostradas.map(a => `${recuo}• ${semQuebra(a.thread)}: ${uma(a.texto, 140)}` +
|
|
103
|
+
(a.comando ? ` (\`${semQuebra(a.comando)}\`)` : '')), ...(sobra > 0 ? [`${recuo}e mais ${sobra}: ork pulse`] : []));
|
|
104
|
+
};
|
|
105
|
+
bloco(r.acoesDaVarredura ?? [], `${marcadores.dono}Arrumação que a varredura faria com a sua autorização: ${(r.acoesDaVarredura ?? []).length}`);
|
|
106
|
+
bloco(r.feitasPelaVarredura ?? [], `${marcadores.feitas}A varredura fez sozinha, pela sua autorização: ${(r.feitasPelaVarredura ?? []).length}`);
|
|
107
|
+
return linhas;
|
|
108
|
+
}
|
|
66
109
|
/** Quantas linhas do condutor o resumo mostra antes de contar o resto. */
|
|
67
110
|
exports.TETO_DE_PARADOS_NO_CONDUTOR = 5;
|
|
68
111
|
/**
|
|
@@ -71,7 +114,7 @@ exports.TETO_DE_PARADOS_NO_CONDUTOR = 5;
|
|
|
71
114
|
*/
|
|
72
115
|
function linhaDoParadoNoCondutor(p, opcoes) {
|
|
73
116
|
const { desdeEm: desde } = p;
|
|
74
|
-
return
|
|
117
|
+
return (0, locale_1.msg)().pulse.linhaDoCondutor(p.thread, (0, horario_1.formatarHora)(desde, opcoes), p.proximoPasso);
|
|
75
118
|
}
|
|
76
119
|
/** As linhas do condutor no resumo, uma por thread, com o resto contado. */
|
|
77
120
|
function linhasDoCondutor(r, marcador, recuo) {
|
|
@@ -80,6 +123,24 @@ function linhasDoCondutor(r, marcador, recuo) {
|
|
|
80
123
|
return [...mostradas.map(p => `${marcador}${linhaDoParadoNoCondutor(p, { agora: r.consultadoEm })}`),
|
|
81
124
|
...(sobra > 0 ? [`${recuo}e mais ${sobra}: ork pulse`] : [])];
|
|
82
125
|
}
|
|
126
|
+
/** Quantos impedimentos do dono o resumo detalha antes de contar o resto. */
|
|
127
|
+
exports.TETO_DE_IMPEDIMENTOS = 5;
|
|
128
|
+
/** Uma linha so, sem caractere de controle e sem corte: o comando precisa chegar inteiro para ser copiado. */
|
|
129
|
+
const semQuebra = (texto) => String(texto).replace(/\p{Cc}/gu, ' ').replace(/\s+/g, ' ').trim();
|
|
130
|
+
/**
|
|
131
|
+
* RM-055 (continuacao, D3): o titulo e uma linha por impedimento do dono, iguais nos dois canais (so o
|
|
132
|
+
* marcador e o recuo mudam). Cada linha diz a thread, a fase, o comando exato e o retry que vem depois.
|
|
133
|
+
*/
|
|
134
|
+
function linhasDosImpedimentos(r, marcador, recuo) {
|
|
135
|
+
const impedimentos = r.impedimentosDoDono ?? [];
|
|
136
|
+
if (!impedimentos.length)
|
|
137
|
+
return [];
|
|
138
|
+
const mostrados = impedimentos.slice(0, exports.TETO_DE_IMPEDIMENTOS), sobra = impedimentos.length - mostrados.length;
|
|
139
|
+
return [`${marcador}Só você destrava, no terminal: ${impedimentos.length}`,
|
|
140
|
+
...mostrados.map(i => `${recuo}• ${semQuebra(i.thread)}${i.fase ? ` ${semQuebra(i.fase)}` : ''}: ` +
|
|
141
|
+
`rode \`${semQuebra(i.comando)}\`; depois \`${semQuebra(i.retry)}\``),
|
|
142
|
+
...(sobra > 0 ? [`${recuo}e mais ${sobra}: ork pulse`] : [])];
|
|
143
|
+
}
|
|
83
144
|
/** RM-057 (fatia 3): a linha do tempo parado por HITL de conducao, a mesma nos dois canais. */
|
|
84
145
|
function linhaDoHitlParado(r) {
|
|
85
146
|
const linha = (0, hitl_tempo_parado_1.linhaDoHitlAcimaDaMeta)(r.hitlDeConducao, { agora: r.consultadoEm });
|
|
@@ -143,6 +204,8 @@ function linhasDasDecisoes(r, marcador, recuo) {
|
|
|
143
204
|
}
|
|
144
205
|
/** Quando nao ha pergunta, o resumo diz isso em vez de pedir licenca para mandar nada. */
|
|
145
206
|
exports.SEM_PERGUNTA_NO_RESUMO = 'Nada aqui pede resposta sua por este canal agora.';
|
|
207
|
+
/** RM-055 (continuacao, D3): sem pergunta, mas com impedimento do dono: o que fazer esta no bloco acima. */
|
|
208
|
+
exports.SEM_PERGUNTA_COM_IMPEDIMENTO = 'Nada aqui pede resposta sua por este canal agora; o que só você destrava está acima, no terminal.';
|
|
146
209
|
/** A linha das perguntas prontas, uma so para os dois canais, pelo mesmo motivo da de baixo. */
|
|
147
210
|
function linhaDasPerguntas(n) {
|
|
148
211
|
return `Perguntas para você: ${n}`;
|
|
@@ -192,7 +255,7 @@ function abertura(r, codigo, marca, resposta) {
|
|
|
192
255
|
return r.pergunta ? [`${marca}${r.pergunta}`, ...linhaDeResposta(codigo).map(l => `${resposta}${l}`), ''] : [];
|
|
193
256
|
}
|
|
194
257
|
function fecho(r) {
|
|
195
|
-
return r.pergunta ? [] : ['', exports.SEM_PERGUNTA_NO_RESUMO];
|
|
258
|
+
return r.pergunta ? [] : ['', r.impedimentosDoDono?.length ? exports.SEM_PERGUNTA_COM_IMPEDIMENTO : exports.SEM_PERGUNTA_NO_RESUMO];
|
|
196
259
|
}
|
|
197
260
|
function textoTelegram(r, codigo) {
|
|
198
261
|
const quando = (0, horario_1.formatarDataHoraRotulada)(r.consultadoEm, { agora: r.consultadoEm });
|
|
@@ -209,6 +272,9 @@ function textoTelegram(r, codigo) {
|
|
|
209
272
|
...(r.tecnicos ? [`🔧 ${linhaDosTecnicos(r)}`] : []),
|
|
210
273
|
...(r.consertos ? [`🔧 ${linhaDosConsertos(r.consertos)}`] : []),
|
|
211
274
|
...linhaDoHitlParado(r).map(l => `⏳ ${l}`),
|
|
275
|
+
...(r.maquinaOciosa ? ['', ...linhasDaOciosidade(r, '💤 ', ' ')] : []),
|
|
276
|
+
...(r.impedimentosDoDono?.length ? ['', ...linhasDosImpedimentos(r, '🔑 ', ' ')] : []),
|
|
277
|
+
...(r.acoesDaVarredura?.length || r.feitasPelaVarredura?.length ? ['', ...linhasDaVarredura(r, { dono: '🧹 ', feitas: '🤖 ' }, ' ')] : []),
|
|
212
278
|
...(r.paradosNoCondutor?.length ? ['', ...linhasDoCondutor(r, '🚧 ', ' ')] : []),
|
|
213
279
|
...(r.acumuladas ? ['', `📥 ${linhaDoLoteGuardado(r.acumuladas)}`] : []),
|
|
214
280
|
...(r.decisoes.length || r.acimaDoLimiar.length ? ['', ...linhasDasDecisoes(r, '🧭 ', ' ')] : []),
|
|
@@ -241,6 +307,9 @@ function textoTerminal(r, codigo) {
|
|
|
241
307
|
...(r.tecnicos ? ['', ` ${linhaDosTecnicos(r)}`] : []),
|
|
242
308
|
...(r.consertos ? ['', ` ${linhaDosConsertos(r.consertos)}`] : []),
|
|
243
309
|
...linhaDoHitlParado(r).flatMap(l => ['', ` ${l}`]),
|
|
310
|
+
...(r.maquinaOciosa ? ['', ...linhasDaOciosidade(r, ' ', ' ')] : []),
|
|
311
|
+
...(r.impedimentosDoDono?.length ? ['', ...linhasDosImpedimentos(r, ' ', ' ')] : []),
|
|
312
|
+
...(r.acoesDaVarredura?.length || r.feitasPelaVarredura?.length ? ['', ...linhasDaVarredura(r, { dono: ' ', feitas: ' ' }, ' ')] : []),
|
|
244
313
|
...(r.paradosNoCondutor?.length ? ['', ...linhasDoCondutor(r, ' ', ' ')] : []),
|
|
245
314
|
...(r.acumuladas ? ['', ` ${linhaDoLoteGuardado(r.acumuladas)}`] : []),
|
|
246
315
|
...(r.decisoes.length || r.acimaDoLimiar.length ? ['', ...linhasDasDecisoes(r, '', ' ').map(l => l.startsWith(' ') ? l : ` ${l}`)] : []),
|
package/dist/hitl-sessions.js
CHANGED
|
@@ -33,6 +33,7 @@ var __importStar = (this && this.__importStar) || (function () {
|
|
|
33
33
|
};
|
|
34
34
|
})();
|
|
35
35
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
36
|
+
exports.impedimentoDaEntrega = impedimentoDaEntrega;
|
|
36
37
|
exports.abrirPedidoSessao = abrirPedidoSessao;
|
|
37
38
|
exports.responderSessao = responderSessao;
|
|
38
39
|
exports.responderSessaoLocal = responderSessaoLocal;
|
|
@@ -56,15 +57,37 @@ const hitl_ingress_receipt_1 = require("./hitl-ingress-receipt");
|
|
|
56
57
|
const hitl_1 = require("./hitl");
|
|
57
58
|
const hitl_canais_1 = require("./hitl-canais");
|
|
58
59
|
const codex_question_1 = require("./adapters/codex-question");
|
|
60
|
+
const entrega_por_mod_1 = require("./entrega-por-mod");
|
|
59
61
|
const uuidCompleto = (s) => /^[a-f0-9]{8}(?:-[a-f0-9]{4}){3}-[a-f0-9]{12}$/i.test(s);
|
|
60
62
|
const reciboDaProva = (r) => (0, node_crypto_1.createHash)('sha256').update(r.prova).digest('hex');
|
|
61
63
|
const mesmaInstancia = (a, b) => a.sessionId === b.sessionId && a.runtime === b.runtime && a.cwd === b.cwd && a.instancia === b.instancia;
|
|
62
|
-
|
|
63
|
-
|
|
64
|
+
/**
|
|
65
|
+
* O controle que responde a sessao. RM-059 (F9, D2): para `claude-bg`, o controle por mod do Mensageiro de Sessoes,
|
|
66
|
+
* com a caixa de saida do servidor do dono quando a resposta entrou por ele; o `controleNativo` dos outros
|
|
67
|
+
* chamadores (conducao, superacao, maestro), que so consultam e param, segue igual.
|
|
68
|
+
*/
|
|
69
|
+
function controleDeResposta(raiz, id, sessionId, runtime, controle, caixa) {
|
|
70
|
+
const ctl = controle ?? (runtime === 'claude-bg' ? (0, entrega_por_mod_1.controleClaudeBgPorMod)(raiz, id, sessionId, caixa)
|
|
71
|
+
: controleNativo(runtime, raiz, id, sessionId));
|
|
64
72
|
if (!ctl.enviar || !ctl.confirmar)
|
|
65
73
|
throw new Error('runtime.unavailable: adapter não comprova entrada e recibo na mesma sessão; attach/resume não são fallback');
|
|
66
74
|
return ctl;
|
|
67
75
|
}
|
|
76
|
+
/**
|
|
77
|
+
* RM-059 (F9, D4): o que impede de levar agora a resposta de um pedido de sessao `claude-bg` (sem caixa de saida no
|
|
78
|
+
* processo, ou sem Mensageiro vivo nela), conferido antes do dialogo e antes de gravar o ingresso. `null` para os
|
|
79
|
+
* outros alvos e runtimes, que seguem o caminho de antes.
|
|
80
|
+
*/
|
|
81
|
+
function impedimentoDaEntrega(raiz, id, pedido, controle, caixa) {
|
|
82
|
+
if (pedido.alvo.tipo !== 'session' || pedido.alvo.runtime !== 'claude-bg')
|
|
83
|
+
return null;
|
|
84
|
+
try {
|
|
85
|
+
return controleDeResposta(raiz, id, pedido.alvo.sessionId, pedido.alvo.runtime, controle, caixa).impedimentoDoEnvio?.() ?? null;
|
|
86
|
+
}
|
|
87
|
+
catch (e) {
|
|
88
|
+
return e.message;
|
|
89
|
+
}
|
|
90
|
+
}
|
|
68
91
|
function observarBloqueio(ctl, sessionId, runtime, cwd) {
|
|
69
92
|
const consulta = ctl.consultar();
|
|
70
93
|
if (!consulta.ok)
|
|
@@ -73,7 +96,8 @@ function observarBloqueio(ctl, sessionId, runtime, cwd) {
|
|
|
73
96
|
const s = matches[0];
|
|
74
97
|
if (matches.length !== 1 || !s || s.runtime !== runtime || s.cwd !== cwd || s.estado !== 'blocked' ||
|
|
75
98
|
!s.instancia || !s.bloqueio)
|
|
76
|
-
throw new Error('runtime.unavailable: identidade, cwd e prompt bloqueado exatos não comprovados'
|
|
99
|
+
throw new Error('runtime.unavailable: identidade, cwd e prompt bloqueado exatos não comprovados' +
|
|
100
|
+
(matches.length === 1 && s?.limitacao ? ` (${s.limitacao.codigo})` : ''));
|
|
77
101
|
return { sessionId: s.sessionId, runtime: s.runtime, cwd: s.cwd, estado: s.estado, instancia: s.instancia, bloqueio: s.bloqueio, perguntaNativa: s.perguntaNativa };
|
|
78
102
|
}
|
|
79
103
|
/** Cria somente um pedido vinculado ao despacho corrente e ao prompt nativo observado. */
|
|
@@ -94,7 +118,18 @@ function abrirPedidoSessao(raiz, id, sessionId, opcoes, controle) {
|
|
|
94
118
|
if (!mesmaInstancia(sessao, revalidada) || sessao.bloqueio !== revalidada.bloqueio)
|
|
95
119
|
throw new Error('prompt ou instância mudou durante o pedido');
|
|
96
120
|
const nativa = sessao.perguntaNativa;
|
|
97
|
-
if (!nativa
|
|
121
|
+
if (!nativa) {
|
|
122
|
+
// RM-059 (F9): o codigo da limitacao (turno ausente, pergunta longa) diz ao operador por que nao abriu.
|
|
123
|
+
let codigo;
|
|
124
|
+
try {
|
|
125
|
+
codigo = ctl.consultar().sessoes.find(s => s.sessionId === sessionId)?.limitacao?.codigo;
|
|
126
|
+
}
|
|
127
|
+
catch {
|
|
128
|
+
codigo = undefined;
|
|
129
|
+
}
|
|
130
|
+
throw new Error('runtime.unavailable: conteúdo nativo da pergunta não comprovado' + (codigo ? ` (${codigo})` : ''));
|
|
131
|
+
}
|
|
132
|
+
if (JSON.stringify(nativa) !== JSON.stringify(revalidada.perguntaNativa) ||
|
|
98
133
|
(0, codex_question_1.projetarPergunta)({ isBlocking: true, questions: [nativa] }).sha256 !== nativa.sha256)
|
|
99
134
|
throw new Error('runtime.unavailable: conteúdo nativo da pergunta não comprovado');
|
|
100
135
|
if (opcoes.pergunta !== undefined && opcoes.pergunta !== nativa.question)
|
|
@@ -156,7 +191,7 @@ function orientacaoDaResposta(tipo, quantasOpcoes) {
|
|
|
156
191
|
* O núcleo da entrega, comum aos quatro canais: conferência do vínculo nativo, reserva
|
|
157
192
|
* durável, envio único e confirmação correlacionada. Nenhum canal ganha atalho aqui.
|
|
158
193
|
*/
|
|
159
|
-
function entregarNaSessao(raiz, id, pedido, prov, controle) {
|
|
194
|
+
function entregarNaSessao(raiz, id, pedido, prov, controle, caixa) {
|
|
160
195
|
if (pedido.alvo.tipo !== 'session')
|
|
161
196
|
throw new Error('pedido destina-se ao gate, não à sessão');
|
|
162
197
|
const pedidoId = pedido.id;
|
|
@@ -169,7 +204,7 @@ function entregarNaSessao(raiz, id, pedido, prov, controle) {
|
|
|
169
204
|
!sessao.instancia || !sessao.bloqueio || sessao.cwd !== path.resolve((0, thread_1.lerThread)(raiz, id).worktree ?? raiz)) {
|
|
170
205
|
throw new Error('runtime.unavailable: pedido sem vínculo nativo exato');
|
|
171
206
|
}
|
|
172
|
-
const ctl = controleDeResposta(raiz, id, sessionId, runtime, controle);
|
|
207
|
+
const ctl = controleDeResposta(raiz, id, sessionId, runtime, controle, caixa);
|
|
173
208
|
const pendente = eventos.find(e => e.tipo === 'session_answer_sending' && e.pedidoId === pedidoId);
|
|
174
209
|
if (pendente && (pendente.recibo !== prov.recibo || pendente.mensagem !== prov.mensagem || pendente.autorizadoPor !== prov.autorizadoPor)) {
|
|
175
210
|
throw new Error('envio já iniciado; resposta divergente recusada');
|
|
@@ -180,12 +215,18 @@ function entregarNaSessao(raiz, id, pedido, prov, controle) {
|
|
|
180
215
|
const entrega = { contrato: 'ork.session-answer/v1',
|
|
181
216
|
envioId: pendente ? String(pendente.envioId) : (0, node_crypto_1.randomUUID)(), pedidoId, thread: id, fase: pedido.fase, sessao, recibo: prov.recibo };
|
|
182
217
|
if (!pendente) {
|
|
218
|
+
// RM-059 (F9, D4): sem quem leve a mensagem (sem caixa de saida, sem Mensageiro vivo), nada se reserva.
|
|
219
|
+
const impedimento = ctl.impedimentoDoEnvio?.() ?? null;
|
|
220
|
+
if (impedimento)
|
|
221
|
+
throw new Error(impedimento);
|
|
183
222
|
for (let i = 0; i < 2; i++) {
|
|
184
223
|
const atual = observarBloqueio(ctl, sessionId, runtime, sessao.cwd);
|
|
185
224
|
if (!mesmaInstancia(atual, sessao) || atual.bloqueio !== sessao.bloqueio || JSON.stringify(atual.perguntaNativa) !== JSON.stringify(sessao.perguntaNativa))
|
|
186
225
|
throw new Error('prompt ou instância mudou antes do envio');
|
|
187
226
|
}
|
|
188
|
-
(
|
|
227
|
+
// RM-059 (F9, D3): no envio por mod, a reconciliacao fecha pelo recibo do receptor, que confere o `recibo` deste
|
|
228
|
+
// evento; o ingresso local nao o levava aqui (so o `reciboEntrega`), e o Telegram ja leva o mesmo valor.
|
|
229
|
+
(0, ledger_1.registrar)(dir, id, 'session_answer_sending', { ...(ctl.assincrono ? { recibo: prov.recibo } : {}), ...prov.dados, sessionId, runtime,
|
|
189
230
|
instancia: sessao.instancia, bloqueio: sessao.bloqueio, envioId: entrega.envioId });
|
|
190
231
|
// O número só vira rótulo nativo quando o pedido aceita OPÇÃO. Em texto livre a
|
|
191
232
|
// resposta humana chega literal ao receptor, inclusive quando é "1" ou "12".
|
|
@@ -206,6 +247,9 @@ function entregarNaSessao(raiz, id, pedido, prov, controle) {
|
|
|
206
247
|
catch {
|
|
207
248
|
throw new Error('runtime.unavailable: consulta do recibo falhou; envio não será repetido');
|
|
208
249
|
}
|
|
250
|
+
// RM-059 (F9, D3): o envio por mod ainda sem recibo do receptor nao e falha; a reconciliacao fecha depois.
|
|
251
|
+
if (!ack && ctl.assincrono)
|
|
252
|
+
return { ...resultado, estado: 'aguardando-receptor', repetida: !!pendente };
|
|
209
253
|
if (!ack || ack.estado !== 'recebida' || ack.contrato !== entrega.contrato || ack.envioId !== entrega.envioId ||
|
|
210
254
|
ack.pedidoId !== pedidoId || ack.thread !== id || ack.fase !== pedido.fase || ack.recibo !== entrega.recibo ||
|
|
211
255
|
!ack.sessao || !mesmaInstancia(ack.sessao, sessao) || ack.sessao.bloqueio !== sessao.bloqueio) {
|
|
@@ -221,6 +265,15 @@ function entregarNaSessao(raiz, id, pedido, prov, controle) {
|
|
|
221
265
|
}
|
|
222
266
|
/** Uma intenção durável impede reenvio após crash, timeout ou confirmação divergente. */
|
|
223
267
|
function responderSessao(raiz, id, pedidoId, r, controle, quando) {
|
|
268
|
+
// RM-059 (F9, D4): a sessao `claude-bg` so recebe pelo Mensageiro, e este caminho (o `ork sessions answer` do
|
|
269
|
+
// Telegram) nao tem caixa de saida: recusa antes de gravar o ingresso, e o pedido segue aberto. Resposta ja
|
|
270
|
+
// entregue ou envio ja reservado seguem o caminho de antes (a repeticao e idempotente e nada reserva de novo).
|
|
271
|
+
const eventos = (0, ledger_1.lerLedger)((0, thread_1.dirThread)(raiz, id));
|
|
272
|
+
const solicitado = eventos.find(e => e.tipo === 'hitl_requested' && e.pedido?.id === pedidoId);
|
|
273
|
+
const andamento = eventos.some(e => ['session_answered', 'session_answer_sending'].includes(e.tipo) && e.pedidoId === pedidoId);
|
|
274
|
+
const impedimento = solicitado?.pedido && !andamento ? impedimentoDaEntrega(raiz, id, solicitado.pedido, controle) : null;
|
|
275
|
+
if (impedimento)
|
|
276
|
+
throw new Error(impedimento);
|
|
224
277
|
(0, hitl_gates_1.receberResposta)(raiz, id, pedidoId, r, quando);
|
|
225
278
|
return (0, hitl_gates_1.comLockHitl)(raiz, id, () => {
|
|
226
279
|
const { pedido, anterior } = (0, hitl_gates_1.conferirResposta)(raiz, id, pedidoId, r, quando);
|
|
@@ -248,7 +301,7 @@ function responderSessao(raiz, id, pedidoId, r, controle, quando) {
|
|
|
248
301
|
* Aceita texto livre quando a pergunta nativa aceita, porque uma pergunta aberta respondida
|
|
249
302
|
* por menu vira outra pergunta.
|
|
250
303
|
*/
|
|
251
|
-
function responderSessaoLocal(raiz, id, pedidoId, token, controle) {
|
|
304
|
+
function responderSessaoLocal(raiz, id, pedidoId, token, controle, caixa) {
|
|
252
305
|
const atestado = (0, hitl_local_atestado_1.consumirAtestadoLocal)(token, raiz, id, pedidoId);
|
|
253
306
|
return (0, hitl_gates_1.comLockHitl)(raiz, id, () => {
|
|
254
307
|
const eventos = (0, ledger_1.lerLedger)((0, thread_1.dirThread)(raiz, id));
|
|
@@ -284,7 +337,7 @@ function responderSessaoLocal(raiz, id, pedidoId, token, controle) {
|
|
|
284
337
|
evidenciar: (entrega) => (0, hitl_local_receipt_1.gravarEvidenciaLocalSessao)(atestado, { fase: String(pedido.fase),
|
|
285
338
|
sessionId: entrega.sessao.sessionId, runtime: entrega.sessao.runtime,
|
|
286
339
|
instancia: entrega.sessao.instancia, bloqueio: String(entrega.sessao.bloqueio), envioId: entrega.envioId }),
|
|
287
|
-
}, controle);
|
|
340
|
+
}, controle, caixa);
|
|
288
341
|
});
|
|
289
342
|
}
|
|
290
343
|
/**
|
|
@@ -42,6 +42,7 @@ const hitl_contract_1 = require("./hitl-contract");
|
|
|
42
42
|
const horario_1 = require("./horario");
|
|
43
43
|
const ledger_1 = require("./ledger");
|
|
44
44
|
const thread_1 = require("./thread");
|
|
45
|
+
const locale_1 = require("./locale");
|
|
45
46
|
/** A meta da RM-057: mediana de resposta abaixo de 5 minutos. */
|
|
46
47
|
exports.META_DA_MEDIANA_DE_RESPOSTA_MS = 5 * 60_000;
|
|
47
48
|
const RESPOSTAS = ['human_gate', 'session_answered'];
|
|
@@ -178,13 +179,12 @@ const emMinutos = (ms) => `${(ms / 60_000).toFixed(1)} min`;
|
|
|
178
179
|
function textoDaMediana(h) {
|
|
179
180
|
const s = h.seteDias;
|
|
180
181
|
if (s.medianaRespostaMs === null)
|
|
181
|
-
return
|
|
182
|
-
return
|
|
183
|
-
`${s.respondidos} resposta(s))`;
|
|
182
|
+
return (0, locale_1.msg)().pulse.medianaSemResposta;
|
|
183
|
+
return (0, locale_1.msg)().pulse.mediana(emMinutos(s.medianaRespostaMs), s.dentroDaMeta, s.respondidos);
|
|
184
184
|
}
|
|
185
185
|
/** "<thread> (<fase>) parada ha 12min, desde 01:02": a hora no fuso do dono (RM-035). */
|
|
186
186
|
function linhaDaPerguntaParada(p, opcoes) {
|
|
187
|
-
return
|
|
187
|
+
return (0, locale_1.msg)().pulse.perguntaParada(p.thread, p.fase, (0, horario_1.duracaoRelativa)(p.paradaHaMin), (0, horario_1.formatarHora)(p.desdeEm, opcoes));
|
|
188
188
|
}
|
|
189
189
|
/**
|
|
190
190
|
* A linha unica do resumo do pulse, so quando passou da meta: quantas abertas, a mais antiga e a
|
package/dist/hitl-texto-livre.js
CHANGED
|
@@ -34,11 +34,13 @@ exports.consentimentoDoTrecho = consentimentoDoTrecho;
|
|
|
34
34
|
* com teste, e nunca efeito colateral de alguem achar que "entendeu" o dono.
|
|
35
35
|
*/
|
|
36
36
|
exports.VOCABULARIO_LIVRE = Object.freeze({
|
|
37
|
+
// RM-057 (resposta curta, D8 da ork-rm057respost): "autorizo" e as variações, que o dono usa para o arco #Noctum.
|
|
37
38
|
afirmar: ['sim', 's', 'ok', 'pode', 'pode seguir', 'pode ir', 'segue', 'siga', 'seguir', 'manda', 'aprovo', 'aprovado',
|
|
38
|
-
'aprovada', 'aprovar', 'aprova', 'confirmo', 'confirmado', 'de acordo'
|
|
39
|
+
'aprovada', 'aprovar', 'aprova', 'confirmo', 'confirmado', 'de acordo', 'autorizo', 'autorizado', 'autorizada', 'autorizar',
|
|
40
|
+
'autoriza'],
|
|
39
41
|
negar: ['nao', 'n'],
|
|
40
42
|
revisar: ['recuso', 'recusado', 'recusar', 'reprovo', 'reprovado', 'revisar', 'revisao', 'refazer', 'volta', 'voltar'],
|
|
41
|
-
esperar: ['esperar', 'espera', 'aguardar', 'aguarda', 'aguarde', 'depois', 'mais tarde', 'agora nao'],
|
|
43
|
+
esperar: ['esperar', 'espera', 'aguardar', 'aguarda', 'aguarde', 'depois', 'mais tarde', 'agora nao', 'adiar', 'adia', 'adio'],
|
|
42
44
|
detalhe: ['detalhe', 'detalhes', 'evidencia', 'evidencias'],
|
|
43
45
|
});
|
|
44
46
|
/** Que acoes de alternativa cada intencao casa. `negar` casa duas de proposito: e ambigua num gate. */
|
|
@@ -59,8 +61,9 @@ exports.JANELA_DO_TEXTO_LIVRE_MIN = 60;
|
|
|
59
61
|
* formas `lista` e `livre` de `GRAMATICA_DO_PULSE`, que os adaptadores copiam texto a texto.
|
|
60
62
|
*/
|
|
61
63
|
const PALAVRAS_DA_FORMA = 'pode seguir|pode ir|pode|sim|s|ok|aprovo|aprovado|aprovada|aprovar|aprova|segue|siga|seguir|manda|' +
|
|
62
|
-
'confirmo|confirmado|de acordo|agora n[aã]o|n[aã]o|n|recuso|recusado|recusar|
|
|
63
|
-
'volta|voltar|esperar|espera|aguardar|aguarda|aguarde|depois|mais tarde|
|
|
64
|
+
'confirmo|confirmado|de acordo|autorizo|autorizado|autorizada|autorizar|autoriza|agora n[aã]o|n[aã]o|n|recuso|recusado|recusar|' +
|
|
65
|
+
'reprovo|reprovado|revisar|revis[aã]o|refazer|volta|voltar|esperar|espera|aguardar|aguarda|aguarde|depois|mais tarde|adiar|adia|' +
|
|
66
|
+
'adio|detalhes?|evid[eê]ncias?';
|
|
64
67
|
/** Uma resposta: letra, ou palavra do vocabulario. */
|
|
65
68
|
const RESPOSTA_DA_FORMA = `(?:[a-e]|${PALAVRAS_DA_FORMA})`;
|
|
66
69
|
/**
|
package/dist/hitl.js
CHANGED
|
@@ -88,6 +88,8 @@ const horario_1 = require("./horario");
|
|
|
88
88
|
Object.defineProperty(exports, "duracaoCurta", { enumerable: true, get: function () { return horario_1.duracaoCurta; } });
|
|
89
89
|
const hitl_estado_1 = require("./hitl-estado");
|
|
90
90
|
const redacao_url_1 = require("./redacao-url");
|
|
91
|
+
const locale_1 = require("./locale");
|
|
92
|
+
const locale_pulse_1 = require("./locale-pulse");
|
|
91
93
|
/** Limite de atencao padrao, em minutos, igual ao do monitor de orquestracao. */
|
|
92
94
|
exports.ATENCAO_PADRAO_MIN = 30;
|
|
93
95
|
function redigirSegredos(texto) {
|
|
@@ -110,28 +112,34 @@ function contextoSeguro(texto, linhas = 20) {
|
|
|
110
112
|
* `stopped` NAO pede humano: a sessao foi parada por decisao de alguem. `failed` pede,
|
|
111
113
|
* porque alguem precisa decidir entre retomar, corrigir ou abandonar.
|
|
112
114
|
*/
|
|
115
|
+
// RM-061 (F2b): o detalhe de cada estado tem a fonte no catalogo pt-BR (`locale-pulse.ts`), com o ingles ao lado.
|
|
113
116
|
const REGRA_POR_ESTADO = {
|
|
114
117
|
blocked: {
|
|
115
118
|
classe: 'hitl',
|
|
116
119
|
precisaDeHumano: true,
|
|
117
|
-
detalhe:
|
|
120
|
+
detalhe: locale_pulse_1.PULSE_PT_BR.sessao.blocked,
|
|
118
121
|
},
|
|
119
122
|
failed: {
|
|
120
123
|
classe: 'falha',
|
|
121
124
|
precisaDeHumano: true,
|
|
122
|
-
detalhe:
|
|
125
|
+
detalhe: locale_pulse_1.PULSE_PT_BR.sessao.failed,
|
|
123
126
|
},
|
|
124
|
-
working: { classe: 'trabalhando', precisaDeHumano: false, detalhe:
|
|
125
|
-
|
|
127
|
+
working: { classe: 'trabalhando', precisaDeHumano: false, detalhe: locale_pulse_1.PULSE_PT_BR.sessao.working },
|
|
128
|
+
// RM-063 (fatia 3, achado a): a sessao interativa do Claude Code aparece `busy` enquanto executa um turno, e o
|
|
129
|
+
// runtime tambem diz `running`. Fora do catalogo elas viravam "possivel parada" no pulse e em "O que precisa de
|
|
130
|
+
// voce": e trabalho, como o observador (`session-watcher-claude.ts`) e a capacidade do #Noctum ja as liam.
|
|
131
|
+
busy: { classe: 'trabalhando', precisaDeHumano: false, detalhe: locale_pulse_1.PULSE_PT_BR.sessao.busy },
|
|
132
|
+
running: { classe: 'trabalhando', precisaDeHumano: false, detalhe: locale_pulse_1.PULSE_PT_BR.sessao.running },
|
|
133
|
+
done: { classe: 'concluida', precisaDeHumano: false, detalhe: locale_pulse_1.PULSE_PT_BR.sessao.done },
|
|
126
134
|
stopped: {
|
|
127
135
|
classe: 'interrompida',
|
|
128
136
|
precisaDeHumano: false,
|
|
129
|
-
detalhe:
|
|
137
|
+
detalhe: locale_pulse_1.PULSE_PT_BR.sessao.stopped,
|
|
130
138
|
},
|
|
131
139
|
idle: {
|
|
132
140
|
classe: 'interativa',
|
|
133
141
|
precisaDeHumano: false,
|
|
134
|
-
detalhe:
|
|
142
|
+
detalhe: locale_pulse_1.PULSE_PT_BR.sessao.idle,
|
|
135
143
|
},
|
|
136
144
|
};
|
|
137
145
|
/** Estado cru da sessao: `state` manda, `status` e o fallback historico. */
|
|
@@ -142,14 +150,13 @@ function estadoBruto(s) {
|
|
|
142
150
|
/** Classifica o estado cru do runtime. Estado que nao esta no mapa avisa a mais. */
|
|
143
151
|
function classificarEstado(estado) {
|
|
144
152
|
const regra = REGRA_POR_ESTADO[estado];
|
|
153
|
+
// RM-061 (F2b, G2): o detalhe vem do catalogo (o mesmo pt-BR da tabela) e o pulse o remonta no locale.
|
|
145
154
|
if (regra)
|
|
146
|
-
return regra;
|
|
155
|
+
return { ...regra, detalhe: (0, locale_1.textoDoCatalogo)((m) => m.pulse.sessao[estado] ?? regra.detalhe) };
|
|
147
156
|
return {
|
|
148
157
|
classe: 'desconhecida',
|
|
149
158
|
precisaDeHumano: true,
|
|
150
|
-
detalhe: estado === ''
|
|
151
|
-
? 'runtime nao informou estado desta sessao: tratada como possivel parada'
|
|
152
|
-
: `estado "${estado}" nao esta no catalogo do ork: tratado como possivel parada`,
|
|
159
|
+
detalhe: (0, locale_1.textoDoCatalogo)((m) => estado === '' ? m.pulse.sessaoSemEstado : m.pulse.sessaoEstadoForaDoCatalogo(estado)),
|
|
153
160
|
};
|
|
154
161
|
}
|
|
155
162
|
/** Resposta do `claude logs` quando o job da sessao ja saiu do runtime. */
|
|
@@ -279,28 +286,22 @@ function lerPerguntaDaTela(textoLimpo) {
|
|
|
279
286
|
* inventa opcao que a sessao nao deu.
|
|
280
287
|
*/
|
|
281
288
|
function recomendarPara(classe, tipo, id) {
|
|
282
|
-
|
|
283
|
-
|
|
284
|
-
|
|
285
|
-
|
|
286
|
-
|
|
287
|
-
|
|
288
|
-
|
|
289
|
-
|
|
290
|
-
|
|
291
|
-
|
|
292
|
-
|
|
293
|
-
|
|
294
|
-
|
|
295
|
-
|
|
296
|
-
|
|
297
|
-
|
|
298
|
-
'coloque-o na allowlist de permissoes para nao parar de novo pelo mesmo motivo.');
|
|
299
|
-
case 'hitl.pergunta':
|
|
300
|
-
return `abra a sessao (\`claude attach ${id}\`) e escolha entre as opcoes que ela listou.`;
|
|
301
|
-
default:
|
|
302
|
-
return `veja o que a sessao pede com \`ork sessions logs ${id}\` antes de responder.`;
|
|
303
|
-
}
|
|
289
|
+
// RM-061 (F2b, G2): nasce em pt-BR pelo catalogo (o --json guarda) e o pulse a remonta no locale.
|
|
290
|
+
return (0, locale_1.textoDoCatalogo)((m) => {
|
|
291
|
+
const r = m.pulse.recomendacaoDoRadar;
|
|
292
|
+
if (classe === 'abandonada')
|
|
293
|
+
return r.abandonada;
|
|
294
|
+
if (classe === 'falha')
|
|
295
|
+
return r.falha(id);
|
|
296
|
+
if (classe === 'desconhecida')
|
|
297
|
+
return r.desconhecida(id);
|
|
298
|
+
switch (tipo) {
|
|
299
|
+
case 'hitl.credencial': return r.credencial(id);
|
|
300
|
+
case 'hitl.permissao': return r.permissao(id);
|
|
301
|
+
case 'hitl.pergunta': return r.pergunta(id);
|
|
302
|
+
default: return r.outra(id);
|
|
303
|
+
}
|
|
304
|
+
});
|
|
304
305
|
}
|
|
305
306
|
/** Minutos inteiros entre um epoch em ms e um carimbo ISO (nunca negativo). */
|
|
306
307
|
function idadeEmMinutos(inicioMs, ateEm) {
|
|
@@ -440,7 +441,7 @@ function varrerSessoes(opcoes = {}) {
|
|
|
440
441
|
}
|
|
441
442
|
const consultaClaude = opcoes.consulta ?? (adapter.disponivel()
|
|
442
443
|
? adapter.consultarSessoes(opcoes.soDaRaiz && raiz ? raiz : undefined, true)
|
|
443
|
-
: { ok: false, sessoes: [], detalhe:
|
|
444
|
+
: { ok: false, sessoes: [], detalhe: (0, locale_1.textoDoCatalogo)((m) => m.pulse.adapterIndisponivel) });
|
|
444
445
|
const consulta = { ...consultaClaude, ok: consultaClaude.ok || nativas.size > 0,
|
|
445
446
|
sessoes: [...consultaClaude.sessoes, ...nativas.values()] };
|
|
446
447
|
if (!consulta.ok) {
|
|
@@ -637,74 +638,72 @@ function dirCurto(cwd) {
|
|
|
637
638
|
}
|
|
638
639
|
/** Texto de `ork sessions hitl`. */
|
|
639
640
|
function textoDoRadar(r) {
|
|
641
|
+
const m = (0, locale_1.msg)().operacao.restante.sessions.radar;
|
|
640
642
|
const L = [];
|
|
641
|
-
L.push(
|
|
642
|
-
L.push(
|
|
643
|
-
|
|
644
|
-
`estado desconhecido ${r.resumo.desconhecidas}) | ` +
|
|
645
|
-
`trabalhando: ${r.resumo.trabalhando} | fora do ork: ${r.resumo.foraDoOrk}`);
|
|
646
|
-
L.push(` limite de atencao: ${r.atencaoMin} min (${r.resumo.acimaDoLimite} parada(s) acima, marcadas com !)`);
|
|
643
|
+
L.push(m.titulo(r.resumo.total));
|
|
644
|
+
L.push(m.resumo(r.resumo.precisamDeHumano, r.resumo.hitl, r.resumo.abandonadas, r.resumo.falhas, r.resumo.desconhecidas, r.resumo.trabalhando, r.resumo.foraDoOrk));
|
|
645
|
+
L.push(m.limite(r.atencaoMin, r.resumo.acimaDoLimite));
|
|
647
646
|
if (!r.runtimeConsultado) {
|
|
648
|
-
L.push(
|
|
647
|
+
L.push(m.falha(r.runtimeDetalhe));
|
|
649
648
|
return L.join('\n');
|
|
650
649
|
}
|
|
651
650
|
if (!r.logsLidos) {
|
|
652
|
-
L.push(
|
|
651
|
+
L.push(m.semLogs);
|
|
653
652
|
}
|
|
654
653
|
L.push('');
|
|
655
654
|
if (r.sessoes.length === 0) {
|
|
656
|
-
L.push(
|
|
655
|
+
L.push(m.nenhuma);
|
|
657
656
|
return L.join('\n');
|
|
658
657
|
}
|
|
659
|
-
L.push((0, util_1.tabela)([
|
|
658
|
+
L.push((0, util_1.tabela)([...m.colunas], r.sessoes.map((s) => [
|
|
660
659
|
s.id,
|
|
661
660
|
s.nome,
|
|
662
661
|
s.classe,
|
|
663
|
-
s.estadoBruto ||
|
|
662
|
+
s.estadoBruto || m.vazio,
|
|
664
663
|
s.tipoDeHitl ?? '-',
|
|
665
664
|
dirCurto(s.cwd),
|
|
666
|
-
s.thread ? `${s.thread.id}/${s.thread.fase}` :
|
|
665
|
+
s.thread ? `${s.thread.id}/${s.thread.fase}` : m.fora,
|
|
667
666
|
`${(0, horario_1.duracaoRelativa)(s.idadeMin)}${s.precisaDeHumano && s.acimaDoLimite ? ' !' : ''}`,
|
|
668
667
|
])));
|
|
669
668
|
const travadas = r.sessoes.filter((s) => s.precisaDeHumano);
|
|
670
669
|
if (travadas.length === 0) {
|
|
671
670
|
L.push('');
|
|
672
|
-
L.push(
|
|
671
|
+
L.push(m.nenhumaEsperando);
|
|
673
672
|
return L.join('\n');
|
|
674
673
|
}
|
|
675
674
|
const vivas = travadas.filter((s) => s.classe !== 'abandonada');
|
|
676
675
|
if (vivas.length > 0) {
|
|
677
676
|
L.push('');
|
|
678
|
-
L.push(
|
|
677
|
+
L.push(m.vivas);
|
|
679
678
|
for (const s of vivas) {
|
|
680
679
|
L.push(` ${s.id} ${s.nome} [${s.classe}${s.tipoDeHitl ? '/' + s.tipoDeHitl : ''}]`);
|
|
681
|
-
L.push(` onde
|
|
682
|
-
(s.thread ?
|
|
683
|
-
L.push(`
|
|
680
|
+
L.push(` ${m.onde.padEnd(9)}: ${s.cwd}` +
|
|
681
|
+
` (${s.thread ? m.thread(s.thread.id, s.thread.fase) : m.sessaoFora})`);
|
|
682
|
+
L.push(` ${m.porque.padEnd(9)}: ${s.detalhe}`);
|
|
684
683
|
if (s.pergunta)
|
|
685
|
-
L.push(` pergunta
|
|
684
|
+
L.push(` ${m.pergunta.padEnd(9)}: ${s.pergunta}`);
|
|
686
685
|
for (const linha of s.contextoLogs ?? [])
|
|
687
|
-
L.push(` log
|
|
686
|
+
L.push(` ${m.log.padEnd(9)}: ${linha}`);
|
|
688
687
|
for (const a of s.alternativas)
|
|
689
|
-
L.push(` opcao
|
|
690
|
-
L.push(` parada
|
|
691
|
-
L.push(` viva
|
|
692
|
-
L.push(` ver
|
|
693
|
-
L.push(` responder: ${s.comandos.attach}`);
|
|
694
|
-
L.push(` recomendo: ${s.recomendacao}`);
|
|
688
|
+
L.push(` ${m.opcao.padEnd(9)}: ${a}`);
|
|
689
|
+
L.push(` ${m.parada.padEnd(9)}: ${s.paradaHaMin == null ? m.paradaDesconhecida : (0, horario_1.duracaoRelativa)(s.paradaHaMin) + ` (${m.desdeObservacao})`}`);
|
|
690
|
+
L.push(` ${m.viva.padEnd(9)}: ${(0, horario_1.duracaoRelativa)(s.idadeMin)} (${m.idade})`);
|
|
691
|
+
L.push(` ${m.ver.padEnd(9)}: ${s.comandos.logs}`);
|
|
692
|
+
L.push(` ${m.responder.padEnd(9)}: ${s.comandos.attach}`);
|
|
693
|
+
L.push(` ${m.recomendo.padEnd(9)}: ${s.recomendacao}`);
|
|
695
694
|
}
|
|
696
695
|
}
|
|
697
696
|
const abandonadas = travadas.filter((s) => s.classe === 'abandonada');
|
|
698
697
|
if (abandonadas.length > 0) {
|
|
699
698
|
L.push('');
|
|
700
|
-
L.push(
|
|
699
|
+
L.push(m.mortas);
|
|
701
700
|
for (const s of abandonadas) {
|
|
702
701
|
L.push(` ${s.id} ${s.nome}`);
|
|
703
|
-
L.push(` onde
|
|
704
|
-
(s.thread ?
|
|
705
|
-
L.push(`
|
|
706
|
-
L.push(` viva
|
|
707
|
-
L.push(` recomendo: ${s.recomendacao}`);
|
|
702
|
+
L.push(` ${m.onde.padEnd(9)}: ${s.cwd}` +
|
|
703
|
+
` (${s.thread ? m.thread(s.thread.id, s.thread.fase) : m.sessaoFora})`);
|
|
704
|
+
L.push(` ${m.porque.padEnd(9)}: ${s.detalhe}`);
|
|
705
|
+
L.push(` ${m.viva.padEnd(9)}: ${(0, horario_1.duracaoRelativa)(s.idadeMin)} ${m.desdeInicio}`);
|
|
706
|
+
L.push(` ${m.recomendo.padEnd(9)}: ${s.recomendacao}`);
|
|
708
707
|
}
|
|
709
708
|
}
|
|
710
709
|
return L.join('\n');
|