@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/ocupacao.js
CHANGED
|
@@ -21,7 +21,7 @@
|
|
|
21
21
|
* `slot_released` no ledger da thread devolvida.
|
|
22
22
|
*/
|
|
23
23
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
24
|
-
exports.EVENTOS_QUE_DESTRAVAM = exports.PAUSA_PREVISTA = void 0;
|
|
24
|
+
exports.CARENCIA_DO_TURNO_ENCERRADO_MIN = exports.EVENTOS_QUE_DESTRAVAM = exports.PAUSA_PREVISTA = void 0;
|
|
25
25
|
exports.ehAprovacaoHumana = ehAprovacaoHumana;
|
|
26
26
|
exports.ehPausaPrevista = ehPausaPrevista;
|
|
27
27
|
exports.faseTemPausaPrevista = faseTemPausaPrevista;
|
|
@@ -29,6 +29,7 @@ exports.sessaoLivreDaVaga = sessaoLivreDaVaga;
|
|
|
29
29
|
exports.avaliarOcupacao = avaliarOcupacao;
|
|
30
30
|
const ledger_1 = require("./ledger");
|
|
31
31
|
const impedimento_1 = require("./impedimento");
|
|
32
|
+
const types_1 = require("./types");
|
|
32
33
|
const sessoes_adopt_1 = require("./sessoes-adopt");
|
|
33
34
|
/** Estado que o `ork phase run` grava quando o bloco despachado pausa ao fim. */
|
|
34
35
|
exports.PAUSA_PREVISTA = 'prevista ao fim do bloco';
|
|
@@ -90,7 +91,9 @@ function ultimaAtividadeEm(eventos) {
|
|
|
90
91
|
* `human.pending` sem destravamento, ou sessao bloqueada no runtime), e a que o pulse declarou em silencio
|
|
91
92
|
* (`runtime.silencio`). A pausa PREVISTA ao fim do bloco nao entra: ela e gravada no proprio
|
|
92
93
|
* despacho e a sessao roda ate o fim do bloco. O impedimento de verify tambem nao: a sessao corrige e
|
|
93
|
-
* verifica de novo.
|
|
94
|
+
* verifica de novo. RM-058 N2 (D8): a quarta e a sessao com o turno encerrado pelo ledger (`turno-encerrado`), passada
|
|
95
|
+
* a carencia.
|
|
96
|
+
* Somente leitura.
|
|
94
97
|
*/
|
|
95
98
|
function sessaoLivreDaVaga(doLedger, desde, agora, staleMin,
|
|
96
99
|
/** A-3 do CHECK 4: o bloqueio no runtime e por sessao; o de outra sessao (a sucedida) nao libera esta. */
|
|
@@ -116,8 +119,33 @@ sessionId) {
|
|
|
116
119
|
(!sessionId || e.sessionId === sessionId)).at(-1);
|
|
117
120
|
if (bloqueio?.tipo === 'sessao_bloqueada')
|
|
118
121
|
return 'human.pending';
|
|
122
|
+
if (sessionId && turnoEncerrado(eventos, sessionId, desde, agora))
|
|
123
|
+
return 'turno-encerrado';
|
|
119
124
|
return null;
|
|
120
125
|
}
|
|
126
|
+
/**
|
|
127
|
+
* RM-058 N2 (A8 do CHECK da ork-rm058n2): a carencia do turno encerrado. O Stop do Claude Code dispara a cada fim de
|
|
128
|
+
* turno, e a sessao que espera uma tarefa em segundo plano volta sozinha quando ela acaba; nesse intervalo a vaga
|
|
129
|
+
* continua dela. Sem atividade da sessao por toda a carencia, o turno acabou de vez e a vaga sai.
|
|
130
|
+
*/
|
|
131
|
+
exports.CARENCIA_DO_TURNO_ENCERRADO_MIN = 15;
|
|
132
|
+
/**
|
|
133
|
+
* RM-058 N2 (D8 da ork-rm058n2): a sessao cujo turno o ledger prova encerrado (o Stop correlacionado e nenhuma
|
|
134
|
+
* atividade dela depois, ha pelo menos `CARENCIA_DO_TURNO_ENCERRADO_MIN`) nao trabalha mais, mesmo com o lease de pe:
|
|
135
|
+
* e a mesma leitura do pulse (P7). Em 12/10/2026 o `runtime_stop` sem `phase_result` (sessao parada com `claude stop`
|
|
136
|
+
* antes do resultado) prendia a vaga ate a thread fechar. A sessao que volta a trabalhar tem atividade depois do Stop
|
|
137
|
+
* e volta a ocupar.
|
|
138
|
+
*/
|
|
139
|
+
function turnoEncerrado(eventos, sessionId, desde, agora) {
|
|
140
|
+
const despacho = [...eventos].reverse().find((e) => e.tipo === ledger_1.TIPOS_DE_EVENTO.faseDespachada && e.sessionId === sessionId);
|
|
141
|
+
if (!despacho)
|
|
142
|
+
return false;
|
|
143
|
+
// Carregado na hora: `parado-no-condutor` importa este modulo, e o import no topo fecharia um ciclo de modulos.
|
|
144
|
+
const { fimDoTurno } = require('./parado-no-condutor');
|
|
145
|
+
const fim = fimDoTurno(eventos, despacho);
|
|
146
|
+
return !!fim && fim.tipo !== 'outro' && fim.sessionId === sessionId && Date.parse(fim.em) >= Date.parse(desde) &&
|
|
147
|
+
minutos(fim.em, agora) >= exports.CARENCIA_DO_TURNO_ENCERRADO_MIN;
|
|
148
|
+
}
|
|
121
149
|
/** A thread tem pausa humana ABERTA? Mesmas tres fontes do monitor, resumidas. */
|
|
122
150
|
function pausaHumanaAberta(thread, eventos) {
|
|
123
151
|
if (thread.status === 'pausada' && faseTemPausaPrevista(thread)) {
|
|
@@ -224,7 +252,8 @@ function avaliarOcupacao(thread, doLedger, opcoes) {
|
|
|
224
252
|
};
|
|
225
253
|
}
|
|
226
254
|
const registro = (0, sessoes_adopt_1.ehRegistroDeAdocao)(thread);
|
|
227
|
-
|
|
255
|
+
// RM-063 (fatia 3, achado a): `busy` e `running` tambem sao a sessao trabalhando.
|
|
256
|
+
if (!registro && ((0, types_1.estadoDeTrabalho)(sessaoEstado) || (sessaoEstado === '' && sessionId !== null))) {
|
|
228
257
|
return {
|
|
229
258
|
...base,
|
|
230
259
|
classe: 'ativa',
|
package/dist/onboarding.js
CHANGED
|
@@ -33,7 +33,8 @@ var __importStar = (this && this.__importStar) || (function () {
|
|
|
33
33
|
};
|
|
34
34
|
})();
|
|
35
35
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
36
|
-
exports.
|
|
36
|
+
exports.PAUTA_ONBOARDING = exports.ETAPAS_ONBOARDING = exports.ONDE_FICAM_OS_SEGREDOS = exports.CONTRATO_ONBOARDING = void 0;
|
|
37
|
+
exports.perguntaDaEtapa = perguntaDaEtapa;
|
|
37
38
|
exports.caminhoOnboarding = caminhoOnboarding;
|
|
38
39
|
exports.validarConteudo = validarConteudo;
|
|
39
40
|
exports.jsonCanonico = jsonCanonico;
|
|
@@ -42,6 +43,7 @@ exports.lerOnboarding = lerOnboarding;
|
|
|
42
43
|
exports.gravarEtapa = gravarEtapa;
|
|
43
44
|
exports.resetarOnboarding = resetarOnboarding;
|
|
44
45
|
exports.textoDaPauta = textoDaPauta;
|
|
46
|
+
exports.validarPedidoDeEtapa = validarPedidoDeEtapa;
|
|
45
47
|
/** Entrevista determinística; hosts conduzem a conversa a partir desta pauta. */
|
|
46
48
|
const fs = __importStar(require("node:fs"));
|
|
47
49
|
const path = __importStar(require("node:path"));
|
|
@@ -49,28 +51,33 @@ const node_crypto_1 = require("node:crypto");
|
|
|
49
51
|
const manifest_1 = require("./manifest");
|
|
50
52
|
const project_state_1 = require("./project-state");
|
|
51
53
|
const ledger_1 = require("./ledger");
|
|
54
|
+
const transporte_do_canal_1 = require("./transporte-do-canal");
|
|
52
55
|
const policies_1 = require("./policies");
|
|
53
56
|
const horario_1 = require("./horario");
|
|
54
57
|
const experiencia_1 = require("./experiencia");
|
|
55
58
|
const yaml_1 = require("./yaml");
|
|
59
|
+
const locale_1 = require("./locale");
|
|
56
60
|
exports.CONTRATO_ONBOARDING = 'ork.onboarding/v1';
|
|
57
61
|
/**
|
|
58
62
|
* Fatia 2 do ensaio da 0.5.0 (P5): onde ficam os segredos, para quem usa o Hermes e para quem nao
|
|
59
63
|
* usa. Perguntas, erro e ajuda leem daqui; as docs e os hosts repetem a frase, conferida por teste.
|
|
60
64
|
*/
|
|
61
|
-
exports.ONDE_FICAM_OS_SEGREDOS =
|
|
62
|
-
|
|
63
|
-
|
|
64
|
-
|
|
65
|
-
|
|
66
|
-
|
|
67
|
-
|
|
68
|
-
|
|
69
|
-
|
|
70
|
-
|
|
71
|
-
|
|
72
|
-
|
|
73
|
-
|
|
65
|
+
exports.ONDE_FICAM_OS_SEGREDOS = (0, locale_1.msg)('pt-BR').onboarding.segredos;
|
|
66
|
+
/** RM-061 (F2a): as etapas, na ordem da entrevista; a pergunta de cada uma sai do catalogo. */
|
|
67
|
+
exports.ETAPAS_ONBOARDING = ['maestro', 'credenciais', 'bancos', 'memoria', 'produtos', 'topologia', 'arquitetura', 'skills', 'auditores'];
|
|
68
|
+
/** A pergunta da etapa no locale pedido (ou no ativo, que so os comandos cobertos trocam). */
|
|
69
|
+
function perguntaDaEtapa(etapa, locale) {
|
|
70
|
+
const m = (0, locale_1.msg)(locale).onboarding, p = m.perguntas;
|
|
71
|
+
if (etapa === 'maestro')
|
|
72
|
+
return p.maestro(horario_1.FUSO_DE_BRASILIA, horario_1.CHAVE_DO_FUSO);
|
|
73
|
+
if (etapa === 'credenciais')
|
|
74
|
+
return p.credenciais(m.segredos);
|
|
75
|
+
if (etapa === 'bancos')
|
|
76
|
+
return p.bancos(m.segredos);
|
|
77
|
+
return p[etapa];
|
|
78
|
+
}
|
|
79
|
+
/** A pauta em pt-BR, como dado (testes e docs a leem); o texto do CLI usa `perguntaDaEtapa`. */
|
|
80
|
+
exports.PAUTA_ONBOARDING = exports.ETAPAS_ONBOARDING.map((etapa) => ({ etapa, pergunta: perguntaDaEtapa(etapa, 'pt-BR') }));
|
|
74
81
|
function caminhoOnboarding(raiz) {
|
|
75
82
|
return (0, project_state_1.stateFile)(raiz, 'onboarding.json');
|
|
76
83
|
}
|
|
@@ -79,7 +86,7 @@ function objeto(v) {
|
|
|
79
86
|
[Object.prototype, null].includes(Object.getPrototypeOf(v));
|
|
80
87
|
}
|
|
81
88
|
/** Recusa antes de persistir. Diagnósticos nunca incluem a entrada recebida. */
|
|
82
|
-
function invalido() { throw new Error(
|
|
89
|
+
function invalido() { throw new Error((0, locale_1.msg)().onboarding.entradaInvalida((0, locale_1.msg)().onboarding.segredos)); }
|
|
83
90
|
function textoSeguro(v) {
|
|
84
91
|
return !(0, policies_1.procurarSegredos)(v).length &&
|
|
85
92
|
!/[a-z][a-z0-9+.-]*:\/\/[^\s/]*@/i.test(v) &&
|
|
@@ -135,6 +142,9 @@ function validarConteudo(etapa, conteudo) {
|
|
|
135
142
|
invalido();
|
|
136
143
|
}
|
|
137
144
|
}
|
|
145
|
+
// RM-063 (fatia 3, H3): o canal do dono, com o host e o chat autorizado; o transporte pronto sai dele.
|
|
146
|
+
if (etapa === 'maestro' && objeto(conteudo) && Object.hasOwn(conteudo, 'canal') && !(0, transporte_do_canal_1.canalValido)(conteudo.canal))
|
|
147
|
+
invalido();
|
|
138
148
|
// Etapas sensíveis usam um formato fechado: não há espaço para texto de credenciais.
|
|
139
149
|
if (etapa === 'credenciais' || etapa === 'bancos') {
|
|
140
150
|
if (!objeto(conteudo))
|
|
@@ -336,16 +346,23 @@ function gravarEtapa(raiz, nome, conteudo, por = 'owner') {
|
|
|
336
346
|
const etapa = exigirEtapa(nome);
|
|
337
347
|
exigirAutor(por);
|
|
338
348
|
validarConteudo(etapa, conteudo);
|
|
349
|
+
// RM-063 (fatia 3, H3): o transporte pronto do host do canal, resolvido nesta maquina antes de qualquer gravacao.
|
|
350
|
+
const transporte = etapa === 'maestro' && objeto(conteudo) && (0, transporte_do_canal_1.canalValido)(conteudo.canal)
|
|
351
|
+
? (0, transporte_do_canal_1.transporteDoCanal)(raiz, conteudo.canal) : null;
|
|
339
352
|
return comTrava(raiz, () => {
|
|
340
353
|
const solicitadas = conteudo;
|
|
341
354
|
const { estado } = lerParaMutacao(raiz), anterior = estado.etapas[etapa];
|
|
342
|
-
// Configurar preferências não apaga objetivos ou outras respostas da etapa maestro.
|
|
343
|
-
if (etapa === 'maestro' && objeto(conteudo) && objeto(conteudo.owner) && anterior && objeto(anterior.conteudo)) {
|
|
344
|
-
conteudo = { ...anterior.conteudo, ...conteudo, owner: {
|
|
345
|
-
|
|
346
|
-
|
|
355
|
+
// Configurar preferências (ou o canal, RM-063) não apaga objetivos ou outras respostas da etapa maestro.
|
|
356
|
+
if (etapa === 'maestro' && objeto(conteudo) && (objeto(conteudo.owner) || objeto(conteudo.canal)) && anterior && objeto(anterior.conteudo)) {
|
|
357
|
+
conteudo = { ...anterior.conteudo, ...conteudo, ...(objeto(conteudo.owner) ? { owner: {
|
|
358
|
+
...(objeto(anterior.conteudo.owner) ? anterior.conteudo.owner : {}), ...conteudo.owner,
|
|
359
|
+
} } : {}) };
|
|
347
360
|
validarConteudo(etapa, conteudo);
|
|
348
361
|
}
|
|
362
|
+
// RM-063 (fatia 3, H3): o transporte do pulse sai junto com o canal do dono, e antes da resposta: sem o host nesta
|
|
363
|
+
// maquina, nada e gravado. A mesma resposta de novo regrava o transporte (a maquina nunca fica sem ele).
|
|
364
|
+
if (transporte)
|
|
365
|
+
(0, transporte_do_canal_1.gravarTransporteDoCanal)(raiz, transporte);
|
|
349
366
|
validarConteudo(etapa, conteudo);
|
|
350
367
|
// Persistir só chaves deste pedido: uma resposta antiga não vence edição explícita do manifesto.
|
|
351
368
|
validarConteudo(etapa, solicitadas);
|
|
@@ -405,10 +422,23 @@ function resetarOnboarding(raiz, nome, por = 'owner') {
|
|
|
405
422
|
});
|
|
406
423
|
}
|
|
407
424
|
function textoDaPauta(estado = onboardingPadrao(), owner = {}) {
|
|
408
|
-
const p = (0, experiencia_1.resolverExperiencia)(owner);
|
|
409
|
-
return [
|
|
410
|
-
|
|
411
|
-
|
|
412
|
-
...exports.
|
|
413
|
-
|
|
425
|
+
const p = (0, experiencia_1.resolverExperiencia)(owner), m = (0, locale_1.msg)().onboarding;
|
|
426
|
+
return [m.titulo(exports.CONTRATO_ONBOARDING),
|
|
427
|
+
m.recomendada(p.language, p.timezone, p.depth),
|
|
428
|
+
m.registre(p.language, p.timezone, p.depth),
|
|
429
|
+
...exports.ETAPAS_ONBOARDING.map((etapa) => `${estado.etapas[etapa] ? m.respondida : m.pendente} ${etapa}: ${perguntaDaEtapa(etapa)}`),
|
|
430
|
+
m.responda].join('\n');
|
|
431
|
+
}
|
|
432
|
+
/**
|
|
433
|
+
* RM-061 (F2a): a mesma recusa que `gravarEtapa` e `resetarOnboarding` dariam, antes de gravar: o CLI a
|
|
434
|
+
* chama no locale do comando e grava depois em `comLocale('pt-BR')`, entao a recusa de uso sai na
|
|
435
|
+
* lingua do texto e o dado gravado nao muda.
|
|
436
|
+
*/
|
|
437
|
+
function validarPedidoDeEtapa(nome, conteudo, por) {
|
|
438
|
+
exigirAutor(por);
|
|
439
|
+
if (nome !== undefined) {
|
|
440
|
+
const etapa = exigirEtapa(nome);
|
|
441
|
+
if (conteudo !== undefined)
|
|
442
|
+
validarConteudo(etapa, conteudo);
|
|
443
|
+
}
|
|
414
444
|
}
|
package/dist/orkmind.js
CHANGED
|
@@ -84,6 +84,7 @@ const node_child_process_1 = require("node:child_process");
|
|
|
84
84
|
const node_crypto_1 = require("node:crypto");
|
|
85
85
|
const node_util_1 = require("node:util");
|
|
86
86
|
const node_perf_hooks_1 = require("node:perf_hooks");
|
|
87
|
+
const dsn_da_memoria_1 = require("./dsn-da-memoria");
|
|
87
88
|
/** As colecoes do OrkMind que o `ork` grava (guia: docs/guias/memoria-e-handoff.md). */
|
|
88
89
|
exports.COLECOES_DO_ORK = [
|
|
89
90
|
'decision',
|
|
@@ -393,8 +394,12 @@ class DriverCliOrkMind {
|
|
|
393
394
|
}
|
|
394
395
|
python() {
|
|
395
396
|
const cli = this.config.cli;
|
|
396
|
-
|
|
397
|
-
|
|
397
|
+
// RM-047 (fronteira de confiança): caminho relativo resolveria no diretório atual, que é o clone, e
|
|
398
|
+
// entrada relativa do PATH também. Só caminho absoluto ou nome procurado em entrada absoluta do PATH.
|
|
399
|
+
if (cli.includes(path.sep) && !path.isAbsolute(cli))
|
|
400
|
+
throw new Error('cli.ausente: memory.cli relativo recusado');
|
|
401
|
+
const candidatos = path.isAbsolute(cli) ? [cli] :
|
|
402
|
+
(process.env.PATH ?? '').split(path.delimiter).filter(p => path.isAbsolute(p)).map(p => path.join(p, cli));
|
|
398
403
|
const executavel = candidatos.find(p => {
|
|
399
404
|
try {
|
|
400
405
|
fs.accessSync(p, fs.constants.X_OK);
|
|
@@ -410,6 +415,9 @@ class DriverCliOrkMind {
|
|
|
410
415
|
const match = /^#!(\S+)(?:\s+(\S+))?\s*$/.exec(linha);
|
|
411
416
|
if (!match)
|
|
412
417
|
throw new Error('memory.transport.interpreter: shebang nao suportado');
|
|
418
|
+
// RM-047: interpretador relativo resolveria no diretório atual (o clone).
|
|
419
|
+
if (!path.isAbsolute(match[1]))
|
|
420
|
+
throw new Error('memory.transport.interpreter: shebang nao suportado');
|
|
413
421
|
return match[2] ? [match[1], match[2]] : [match[1]];
|
|
414
422
|
}
|
|
415
423
|
/** Valor da chave de embedding no ambiente do `ork`; nunca guardado no driver. */
|
|
@@ -419,26 +427,17 @@ class DriverCliOrkMind {
|
|
|
419
427
|
return chaveDeEmbeddingAceita(valor, this.config.dsn) ? valor : '';
|
|
420
428
|
}
|
|
421
429
|
contemSegredo(valor) {
|
|
422
|
-
|
|
423
|
-
const proibidos =
|
|
430
|
+
// RM-069 (D6, D20, D21): a DSN e a senha dela, de qualquer tamanho, pelos fragmentos e pela barreira de domicilio unico.
|
|
431
|
+
const proibidos = (0, dsn_da_memoria_1.fragmentosDaDsn)(this.config.dsn);
|
|
424
432
|
const nome = this.config.variavelDaChaveDeEmbedding ?? '';
|
|
425
433
|
const chave = nome ? (process.env[nome] ?? '').trim() : '';
|
|
426
434
|
if (chave.length >= 12)
|
|
427
435
|
proibidos.push(chave);
|
|
428
|
-
|
|
429
|
-
const senha = new URL(segredo).password;
|
|
430
|
-
if (senha.length >= 12)
|
|
431
|
-
proibidos.push(senha, decodeURIComponent(senha));
|
|
432
|
-
}
|
|
433
|
-
catch { /* DSN opaca */ }
|
|
434
|
-
const examinar = (x) => typeof x === 'string'
|
|
435
|
-
? proibidos.some(p => p && x.includes(p))
|
|
436
|
-
: !!x && typeof x === 'object' && Object.entries(x).some(([k, v]) => examinar(k) || examinar(v));
|
|
437
|
-
return examinar(valor);
|
|
436
|
+
return (0, dsn_da_memoria_1.contemFragmento)(valor, proibidos);
|
|
438
437
|
}
|
|
439
438
|
rodar(pedido, timeoutMs = this.config.timeoutMs) {
|
|
440
439
|
if (!this.config.dsn.trim())
|
|
441
|
-
throw new Error('dsn.env-ausente');
|
|
440
|
+
throw new Error(this.config.falhaDaDsn ?? 'dsn.env-ausente');
|
|
442
441
|
if (this.contemSegredo(pedido))
|
|
443
442
|
throw new Error('memory.transport.secret: conteudo recusado');
|
|
444
443
|
const [python, ...prefixo] = this.python();
|
|
@@ -913,14 +912,21 @@ class DriverEmMemoria {
|
|
|
913
912
|
}
|
|
914
913
|
}
|
|
915
914
|
exports.DriverEmMemoria = DriverEmMemoria;
|
|
916
|
-
/**
|
|
917
|
-
|
|
918
|
-
|
|
915
|
+
/**
|
|
916
|
+
* Config de memoria efetiva a partir do manifesto, ja com o tenant resolvido. RM-069: a DSN vem da fonte declarada
|
|
917
|
+
* (a variavel de `database_url_env` ou o arquivo de `database_url_file`) pelo resolvedor unico, lida a cada chamada (D12).
|
|
918
|
+
*/
|
|
919
|
+
function configDoManifesto(manifesto, env = process.env) {
|
|
920
|
+
const fonte = (0, dsn_da_memoria_1.resolverDsn)(manifesto.memory, { env });
|
|
919
921
|
return {
|
|
920
922
|
modo: manifesto.memory.mode,
|
|
921
923
|
cli: manifesto.memory.cli || 'orkmind',
|
|
922
|
-
variavel,
|
|
923
|
-
dsn:
|
|
924
|
+
variavel: fonte.fonte === 'ambiente' ? fonte.rotulo : '',
|
|
925
|
+
dsn: fonte.dsn,
|
|
926
|
+
fonteDaDsn: fonte.fonte,
|
|
927
|
+
rotuloDaDsn: fonte.rotulo,
|
|
928
|
+
falhaDaDsn: fonte.falha,
|
|
929
|
+
detalheDaDsn: fonte.detalhe,
|
|
924
930
|
timeoutMs: manifesto.memory.timeout_ms || 15000,
|
|
925
931
|
universoTimeoutMs: prazoDoUniversoMs(manifesto.memory.universo_timeout_ms),
|
|
926
932
|
tenant: manifesto.memory.tenant || manifesto.project.name,
|
|
@@ -936,9 +942,18 @@ function correcaoDe(motivo, config) {
|
|
|
936
942
|
case 'modo.desconhecido':
|
|
937
943
|
return 'memory.mode aceita files ou orkmind';
|
|
938
944
|
case 'dsn.nao-declarado':
|
|
939
|
-
return 'declare memory.
|
|
945
|
+
return 'declare memory.database_url_file (arquivo 0600 em ~/.orkastery/segredos/) ou memory.database_url_env ' +
|
|
946
|
+
'com o NOME da variavel de ambiente da base do tenant';
|
|
940
947
|
case 'dsn.env-ausente':
|
|
941
948
|
return `exporte ${config.variavel} com a DSN da base propria do tenant (o ork nao adivinha base)`;
|
|
949
|
+
case 'dsn.arquivo-ausente':
|
|
950
|
+
return `grave a DSN da base propria do tenant em ${config.rotuloDaDsn}, numa linha e com permissao 0600 (o ork nao adivinha base)`;
|
|
951
|
+
case 'dsn.arquivo-inseguro':
|
|
952
|
+
return `deixe ${config.rotuloDaDsn} como arquivo do usuario que roda o ork, numa pasta dele, com chmod 600 ` +
|
|
953
|
+
'(DSN que outro usuario pode ler nao e lida)';
|
|
954
|
+
case 'dsn.arquivo-invalido':
|
|
955
|
+
return `regrave ${config.rotuloDaDsn} como arquivo comum numa pasta de segredos comum, dentro da casa do usuario e ` +
|
|
956
|
+
'sem link simbolico no caminho, so com a DSN (esquema://...), numa linha e sem NOME= na frente';
|
|
942
957
|
case 'cli.ausente':
|
|
943
958
|
return `instale o OrkMind e garanta "${config.cli}" no PATH`;
|
|
944
959
|
case 'orkmind.indisponivel':
|
|
@@ -959,6 +974,9 @@ function resolverRegime(manifesto, driver) {
|
|
|
959
974
|
dsnPresente: config.dsn.trim() !== '',
|
|
960
975
|
cli: config.cli,
|
|
961
976
|
tenant: config.tenant,
|
|
977
|
+
// RM-069 (D5): a fonte da DSN, aditiva; o arquivo so pelo rotulo com `~`.
|
|
978
|
+
fonteDaDsn: config.fonteDaDsn ?? 'nenhuma',
|
|
979
|
+
...(config.fonteDaDsn === 'arquivo' ? { arquivoDaDsn: config.rotuloDaDsn } : {}),
|
|
962
980
|
};
|
|
963
981
|
const degradar = (motivo, detalhe) => ({
|
|
964
982
|
estado: {
|
|
@@ -976,9 +994,13 @@ function resolverRegime(manifesto, driver) {
|
|
|
976
994
|
if (config.modo !== 'orkmind') {
|
|
977
995
|
return degradar('modo.desconhecido', `memory.mode "${config.modo}" nao e um regime conhecido`);
|
|
978
996
|
}
|
|
979
|
-
// Isolamento por tenant: sem
|
|
980
|
-
if (config.
|
|
981
|
-
return degradar('dsn.nao-declarado', 'memory.database_url_env
|
|
997
|
+
// Isolamento por tenant: sem fonte declarada (variavel ou arquivo) nao ha base, e nao ha palpite.
|
|
998
|
+
if (config.fonteDaDsn === 'nenhuma') {
|
|
999
|
+
return degradar('dsn.nao-declarado', 'memory.database_url_file e memory.database_url_env vazios: sem base declarada o ork nao conecta em base nenhuma');
|
|
1000
|
+
}
|
|
1001
|
+
// RM-069: o arquivo que falha degrada com o motivo dele e nunca cai para a variavel.
|
|
1002
|
+
if (config.dsn.trim() === '' && !driver && config.fonteDaDsn === 'arquivo') {
|
|
1003
|
+
return degradar(config.falhaDaDsn ?? 'dsn.arquivo-ausente', `${config.detalheDaDsn}: o ork nao cai para outra fonte (precedente memory-orkmind)`);
|
|
982
1004
|
}
|
|
983
1005
|
if (config.dsn.trim() === '' && !driver) {
|
|
984
1006
|
return degradar('dsn.env-ausente', `${config.variavel} nao esta no ambiente: o ork nao cai para outra DSN (precedente memory-orkmind)`);
|
|
@@ -996,7 +1018,8 @@ function resolverRegime(manifesto, driver) {
|
|
|
996
1018
|
...base,
|
|
997
1019
|
efetivo: 'orkmind',
|
|
998
1020
|
motivo: null,
|
|
999
|
-
detalhe: `${efetivoDriver.nome} ativo na base declarada por ${config.variavel}:
|
|
1021
|
+
detalhe: `${efetivoDriver.nome} ativo na base declarada por ${config.fonteDaDsn === 'arquivo' ? config.rotuloDaDsn : config.variavel}: ` +
|
|
1022
|
+
saude.detalhe,
|
|
1000
1023
|
correcao: '',
|
|
1001
1024
|
},
|
|
1002
1025
|
driver: efetivoDriver,
|
package/dist/orquestracao.js
CHANGED
|
@@ -74,12 +74,15 @@ const modos_1 = require("./modos");
|
|
|
74
74
|
const ocupacao_1 = require("./ocupacao");
|
|
75
75
|
const ratelimit_1 = require("./ratelimit");
|
|
76
76
|
const impedimento_1 = require("./impedimento");
|
|
77
|
+
const runtime_escada_1 = require("./runtime-escada");
|
|
77
78
|
const thread_1 = require("./thread");
|
|
79
|
+
const types_1 = require("./types");
|
|
78
80
|
const util_1 = require("./util");
|
|
79
81
|
const horario_1 = require("./horario");
|
|
80
82
|
Object.defineProperty(exports, "duracaoCurta", { enumerable: true, get: function () { return horario_1.duracaoCurta; } });
|
|
81
83
|
const conducao_1 = require("./conducao");
|
|
82
84
|
const conducao_texto_1 = require("./conducao-texto");
|
|
85
|
+
const locale_1 = require("./locale");
|
|
83
86
|
/** Limite de atencao padrao, em minutos: parada mais velha que isso e destacada. */
|
|
84
87
|
exports.ATENCAO_PADRAO_MIN = 30;
|
|
85
88
|
/** Minutos inteiros entre dois carimbos ISO (nunca negativo). */
|
|
@@ -157,7 +160,8 @@ function pausasAbertas(thread, eventos, estados, quando) {
|
|
|
157
160
|
// continua listada, e o monitor a lia como uma sessao que ainda ia terminar. Uma
|
|
158
161
|
// sessao `blocked` e o contrario disso -- ela e a pausa, ja chegada.
|
|
159
162
|
const sessaoEstado = estados === null ? null : estados.get(sessionId) ?? null;
|
|
160
|
-
|
|
163
|
+
// RM-063 (fatia 3, achado a): `busy` e `running` tambem sao a sessao trabalhando.
|
|
164
|
+
const sessaoViva = estados === null ? null : (0, types_1.estadoDeTrabalho)(sessaoEstado) || sessaoEstado === '';
|
|
161
165
|
const sobre = typeof e.previstaSobre === 'string' && e.previstaSobre !== ''
|
|
162
166
|
? e.previstaSobre
|
|
163
167
|
: blocoDaFase(thread, fase).pausaSobre;
|
|
@@ -168,16 +172,17 @@ function pausasAbertas(thread, eventos, estados, quando) {
|
|
|
168
172
|
fase,
|
|
169
173
|
bloco: blocoDaFase(thread, fase).bloco,
|
|
170
174
|
pausaSobre: sobre,
|
|
171
|
-
|
|
172
|
-
|
|
175
|
+
// RM-061 (F2b, G2): a parada nasce em pt-BR (o --json do monitor) e o pulse a remonta no locale.
|
|
176
|
+
detalhe: (0, locale_1.textoDoCatalogo)((m) => sessaoViva === true
|
|
177
|
+
? m.pulse.pausaTrabalhando(sessionId.slice(0, 8))
|
|
173
178
|
: sessaoEstado === 'blocked'
|
|
174
|
-
?
|
|
175
|
-
:
|
|
179
|
+
? m.pulse.pausaBloqueada(sessionId.slice(0, 8))
|
|
180
|
+
: m.pulse.blocoFechado(fase ?? '?', sobre ? m.thread.pausaSobre(sobre) : m.pulse.aPausaDoBloco)),
|
|
176
181
|
evidencia: `ledger ${ledger_1.TIPOS_DE_EVENTO.pausaHumana} (${ocupacao_1.PAUSA_PREVISTA})` +
|
|
177
182
|
`${sessionId ? `, sessao ${sessionId.slice(0, 8)}` : ''}` +
|
|
178
183
|
`${sessaoEstado ? ` em state=${sessaoEstado}` : ''}`,
|
|
179
184
|
correcao: sessaoEstado === 'blocked'
|
|
180
|
-
?
|
|
185
|
+
? (0, locale_1.textoDoCatalogo)((m) => m.pulse.responderSessao(sessionId.slice(0, 8), sessionId))
|
|
181
186
|
: comandoDeAprovacao(thread.id, sobre),
|
|
182
187
|
desdeEm: e.ts,
|
|
183
188
|
sessaoViva,
|
|
@@ -203,16 +208,20 @@ function pausasAbertas(thread, eventos, estados, quando) {
|
|
|
203
208
|
return;
|
|
204
209
|
const { bloco, pausaSobre } = blocoDaFase(thread, fase);
|
|
205
210
|
const imp = (0, impedimento_1.ehImpedimentoDoDono)(e.motivo) ? (0, impedimento_1.impedimentoDoEvento)(e) : null;
|
|
211
|
+
// RM-063 (F4): a escada de recuperacao do runtime que acabou chama o dono com as alternativas e o comando que retoma.
|
|
212
|
+
const escada = !imp && e.motivo === 'human.pending' ? (0, runtime_escada_1.escadaDoEvento)(e) : null;
|
|
206
213
|
porFase.set(chave, parada({
|
|
207
214
|
natureza: 'pausa-humana',
|
|
208
215
|
motivo: imp ? e.motivo : 'human.pending',
|
|
209
216
|
fase,
|
|
210
217
|
bloco,
|
|
211
|
-
pausaSobre: imp ? `rodar \`${imp.comando}\` no terminal` :
|
|
218
|
+
pausaSobre: imp ? `rodar \`${imp.comando}\` no terminal` : escada ? 'a escada de recuperacao do runtime'
|
|
219
|
+
: pausaSobre || 'autorizacao da retomada',
|
|
212
220
|
...(imp ? { impedimento: imp } : {}),
|
|
221
|
+
...(escada ? { escada } : {}),
|
|
213
222
|
detalhe: typeof e.detalhe === 'string' && e.detalhe !== ''
|
|
214
223
|
? e.detalhe
|
|
215
|
-
:
|
|
224
|
+
: (0, locale_1.textoDoCatalogo)((m) => m.pulse.motivos['human.pending']),
|
|
216
225
|
evidencia: `ledger ${ledger_1.TIPOS_DE_EVENTO.gateBloqueado} (gate ${String(e.gate ?? '?')})`,
|
|
217
226
|
correcao: typeof e.correcao === 'string' && e.correcao !== ''
|
|
218
227
|
? e.correcao
|
|
@@ -233,7 +242,7 @@ function pausasAbertas(thread, eventos, estados, quando) {
|
|
|
233
242
|
fase: thread.faseAtual,
|
|
234
243
|
bloco,
|
|
235
244
|
pausaSobre: pausaSobre || 'veredito do bloco',
|
|
236
|
-
detalhe:
|
|
245
|
+
detalhe: (0, locale_1.textoDoCatalogo)((m) => m.pulse.threadPausada(thread.faseAtual)),
|
|
237
246
|
evidencia: 'thread.json (status: pausada)',
|
|
238
247
|
correcao: comandoDeAprovacao(thread.id, pausaSobre),
|
|
239
248
|
desdeEm: thread.atualizadaEm,
|
|
@@ -258,9 +267,9 @@ function impedimentosAbertos(item, eventos, raizDoProjeto, quando) {
|
|
|
258
267
|
fase: thread.faseAtual,
|
|
259
268
|
bloco: blocoDaFase(thread, thread.faseAtual).bloco,
|
|
260
269
|
pausaSobre: '',
|
|
261
|
-
detalhe:
|
|
270
|
+
detalhe: (0, locale_1.textoDoCatalogo)((m) => m.pulse.naFilaDoLease(p.nome, p.bloqueadaPor, p.colidiuCom)),
|
|
262
271
|
evidencia: `.orkastery/leases/fila.json (${p.tipo})`,
|
|
263
|
-
correcao:
|
|
272
|
+
correcao: (0, locale_1.textoDoCatalogo)((m) => m.pulse.espereOLease(p.bloqueadaPor, (0, leases_1.argumentoDeLease)(p.colidiuCom), (0, leases_1.argumentoDeLease)(p.bloqueadaPor))),
|
|
264
273
|
desdeEm: p.desdeEm,
|
|
265
274
|
sessaoViva: null,
|
|
266
275
|
fonte: 'fila-de-lease',
|
|
@@ -277,8 +286,7 @@ function impedimentosAbertos(item, eventos, raizDoProjeto, quando) {
|
|
|
277
286
|
fase: p.fase,
|
|
278
287
|
bloco: blocoDaFase(thread, p.fase).bloco,
|
|
279
288
|
pausaSobre: '',
|
|
280
|
-
detalhe:
|
|
281
|
-
`(${p.liberaEm}, ${p.janelaEstimada ? 'janela estimada' : 'hora dita pelo runtime'})`,
|
|
289
|
+
detalhe: (0, locale_1.textoDoCatalogo)((m) => m.pulse.naFilaDeRateLimit(p.id, (0, ratelimit_1.faltaPara)(p, quando), p.liberaEm, p.janelaEstimada)),
|
|
282
290
|
evidencia: `.orkastery/retry/fila.jsonl (${p.id}, ${p.sinal.fonte})`,
|
|
283
291
|
correcao: `ork retry resume --id ${p.id}`,
|
|
284
292
|
desdeEm: p.criadoEm,
|
|
@@ -314,7 +322,7 @@ function impedimentosAbertos(item, eventos, raizDoProjeto, quando) {
|
|
|
314
322
|
pausaSobre: '',
|
|
315
323
|
detalhe: typeof e.detalhe === 'string' && e.detalhe !== ''
|
|
316
324
|
? e.detalhe
|
|
317
|
-
:
|
|
325
|
+
: (0, locale_1.textoDoCatalogo)((m) => m.pulse.motivos[motivo]),
|
|
318
326
|
evidencia: `ledger ${e.tipo} (gate ${String(e.gate ?? '?')})`,
|
|
319
327
|
correcao: typeof e.correcao === 'string' && e.correcao !== ''
|
|
320
328
|
? e.correcao
|
|
@@ -492,61 +500,50 @@ function montarMonitor(carregado, opcoes = {}) {
|
|
|
492
500
|
* ISO (o `--json` e o ledger nao mudam); aqui o horario sai no fuso do dono.
|
|
493
501
|
*/
|
|
494
502
|
function linhaDaParada(p, agora) {
|
|
503
|
+
const m = (0, locale_1.msg)().operacao.restante.monitor;
|
|
495
504
|
const local = (texto) => (0, horario_1.localizarTexto)(texto, { agora });
|
|
496
505
|
const L = [];
|
|
497
|
-
L.push(
|
|
506
|
+
L.push(m.parada(p.motivo, (0, horario_1.duracaoRelativa)(p.paradaHaMin), (0, horario_1.formatarHora)(p.desdeEm, { agora })));
|
|
498
507
|
if (p.pausaSobre)
|
|
499
|
-
L.push(
|
|
500
|
-
L.push(
|
|
501
|
-
L.push(
|
|
502
|
-
L.push(
|
|
508
|
+
L.push(m.humanoDecide(local(p.pausaSobre)));
|
|
509
|
+
L.push(m.detalhe(local(p.detalhe)));
|
|
510
|
+
L.push(m.evidencia(local(p.evidencia)));
|
|
511
|
+
L.push(m.correcao(local(p.correcao)));
|
|
503
512
|
return L;
|
|
504
513
|
}
|
|
505
514
|
/** Texto de `ork orquestracao status`. */
|
|
506
515
|
function textoDoMonitor(m) {
|
|
516
|
+
const t = (0, locale_1.msg)().operacao.restante.monitor;
|
|
507
517
|
const L = [];
|
|
508
|
-
L.push(
|
|
509
|
-
|
|
510
|
-
L.push(
|
|
511
|
-
`em andamento: ${m.resumo.emAndamento} | podem avancar: ${m.resumo.podemAvancar} | ` +
|
|
512
|
-
`fechadas: ${m.resumo.fechadas}`);
|
|
513
|
-
L.push(` limite de atencao: ${m.atencaoMin} min (${m.resumo.acimaDoLimite} parada(s) acima, marcadas com !)`);
|
|
518
|
+
L.push(t.titulo(m.projeto, m.resumo.threads, m.perfis.length, m.perfis.join(', ')));
|
|
519
|
+
L.push(t.resumo(m.resumo.aguardandoHumano, m.resumo.comImpedimento, m.resumo.emAndamento, m.resumo.podemAvancar, m.resumo.fechadas));
|
|
520
|
+
L.push(t.limite(m.atencaoMin, m.resumo.acimaDoLimite));
|
|
514
521
|
L.push(` ${(0, horario_1.legendaDoFuso)(undefined, m.consultadoEm)}`);
|
|
515
522
|
if (!m.runtimeConsultado) {
|
|
516
|
-
L.push(
|
|
523
|
+
L.push(t.runtime(m.runtimeDetalhe));
|
|
517
524
|
}
|
|
518
525
|
L.push('');
|
|
519
526
|
// I-36 (T17): conducao em andamento nao e parada; ela aparece antes, com a linha unica.
|
|
520
527
|
const conduzidas = m.linhas.filter((l) => l.conducao);
|
|
521
528
|
if (conduzidas.length > 0) {
|
|
522
|
-
L.push(
|
|
529
|
+
L.push(t.conduzidas);
|
|
523
530
|
for (const l of conduzidas)
|
|
524
531
|
L.push(` ${l.thread}: ${(0, conducao_texto_1.linhaDeConducao)(l.conducao, { agora: m.consultadoEm })}`);
|
|
525
532
|
L.push('');
|
|
526
533
|
}
|
|
527
534
|
if (m.linhas.length === 0) {
|
|
528
|
-
L.push(
|
|
535
|
+
L.push(t.nenhuma);
|
|
529
536
|
return L.join('\n');
|
|
530
537
|
}
|
|
531
|
-
L.push((0, util_1.tabela)([
|
|
532
|
-
'PERFIL',
|
|
533
|
-
'THREAD',
|
|
534
|
-
'FASE',
|
|
535
|
-
'STATUS',
|
|
536
|
-
'BLOCO QUE PAUSA',
|
|
537
|
-
'AGUARDA DO HUMANO',
|
|
538
|
-
'IMPEDIMENTO',
|
|
539
|
-
'ULTIMO EVENTO',
|
|
540
|
-
'PARADA HA',
|
|
541
|
-
], m.linhas.map((l) => [
|
|
538
|
+
L.push((0, util_1.tabela)([...t.colunas], m.linhas.map((l) => [
|
|
542
539
|
l.perfil,
|
|
543
540
|
l.thread,
|
|
544
541
|
l.faseAtual,
|
|
545
|
-
l.situacao,
|
|
542
|
+
t.situacoes[l.situacao] ?? l.situacao,
|
|
546
543
|
l.pausas.map((p) => p.bloco || '?').join(' ') || '-',
|
|
547
544
|
l.pausas.map((p) => p.pausaSobre).filter((s) => s !== '').join('; ') || '-',
|
|
548
|
-
l.impedimentos.map((p) => p.motivo).join(' ') ||
|
|
549
|
-
l.ultimoEvento ? l.ultimoEvento.tipo :
|
|
545
|
+
l.impedimentos.map((p) => p.motivo).join(' ') || t.nao,
|
|
546
|
+
l.ultimoEvento ? l.ultimoEvento.tipo : t.semLedger,
|
|
550
547
|
l.paradaHaMin === null
|
|
551
548
|
? '-'
|
|
552
549
|
: `${(0, horario_1.duracaoRelativa)(l.paradaHaMin)}${l.acimaDoLimite ? ' !' : ''}`,
|
|
@@ -554,7 +551,7 @@ function textoDoMonitor(m) {
|
|
|
554
551
|
const hitl = m.linhas.filter((l) => l.precisaDeHumano);
|
|
555
552
|
if (hitl.length > 0) {
|
|
556
553
|
L.push('');
|
|
557
|
-
L.push(
|
|
554
|
+
L.push(t.esperando);
|
|
558
555
|
for (const l of hitl) {
|
|
559
556
|
L.push(` ${l.thread} (${l.tag}, ${l.nome})`);
|
|
560
557
|
for (const p of l.pausas.filter((x) => x.sessaoViva !== true))
|
|
@@ -564,7 +561,7 @@ function textoDoMonitor(m) {
|
|
|
564
561
|
const impedidas = m.linhas.filter((l) => l.temImpedimento);
|
|
565
562
|
if (impedidas.length > 0) {
|
|
566
563
|
L.push('');
|
|
567
|
-
L.push(
|
|
564
|
+
L.push(t.impedidas);
|
|
568
565
|
for (const l of impedidas) {
|
|
569
566
|
L.push(` ${l.thread} (${l.tag}, ${l.nome})`);
|
|
570
567
|
for (const p of l.impedimentos)
|
|
@@ -574,16 +571,16 @@ function textoDoMonitor(m) {
|
|
|
574
571
|
const emCurso = m.linhas.filter((l) => l.pausas.some((p) => p.sessaoViva === true));
|
|
575
572
|
if (emCurso.length > 0) {
|
|
576
573
|
L.push('');
|
|
577
|
-
L.push(
|
|
574
|
+
L.push(t.previstas);
|
|
578
575
|
for (const l of emCurso) {
|
|
579
576
|
for (const p of l.pausas.filter((x) => x.sessaoViva === true)) {
|
|
580
|
-
L.push(
|
|
577
|
+
L.push(t.vaiPausar(l.thread, p.bloco || '?', (0, horario_1.localizarTexto)(p.pausaSobre, { agora: m.consultadoEm })));
|
|
581
578
|
}
|
|
582
579
|
}
|
|
583
580
|
}
|
|
584
581
|
if (m.resumo.aguardandoHumano === 0 && m.resumo.comImpedimento === 0) {
|
|
585
582
|
L.push('');
|
|
586
|
-
L.push(
|
|
583
|
+
L.push(t.nenhuma);
|
|
587
584
|
}
|
|
588
585
|
return L.join('\n');
|
|
589
586
|
}
|