@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/pulse-delivery.js
CHANGED
|
@@ -33,11 +33,14 @@ var __importStar = (this && this.__importStar) || (function () {
|
|
|
33
33
|
};
|
|
34
34
|
})();
|
|
35
35
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
36
|
-
exports.RETEM_PARADO_MS = exports.adquirirLockMonitor = void 0;
|
|
36
|
+
exports.FIM_DO_EPISODIO_OCIOSO_MS = exports.RETEM_PARADO_MS = exports.adquirirLockMonitor = void 0;
|
|
37
37
|
exports.assinaturaPulse = assinaturaPulse;
|
|
38
38
|
exports.assinaturaDoResumo = assinaturaDoResumo;
|
|
39
39
|
exports.mensagemPulse = mensagemPulse;
|
|
40
|
+
exports.idsDaEntrega = idsDaEntrega;
|
|
41
|
+
exports.entregarPeloTransporte = entregarPeloTransporte;
|
|
40
42
|
exports.varrerPulse = varrerPulse;
|
|
43
|
+
exports.agirDepoisDaEntrega = agirDepoisDaEntrega;
|
|
41
44
|
exports.varrerEDepoisPublicarNaRede = varrerEDepoisPublicarNaRede;
|
|
42
45
|
exports.enviarPayloadHost = enviarPayloadHost;
|
|
43
46
|
const manifest_1 = require("./manifest");
|
|
@@ -50,6 +53,7 @@ const node_crypto_1 = require("node:crypto");
|
|
|
50
53
|
const node_child_process_1 = require("node:child_process");
|
|
51
54
|
const pulse_1 = require("./pulse");
|
|
52
55
|
const estado_thread_1 = require("./estado-thread");
|
|
56
|
+
const procedencia_1 = require("./procedencia");
|
|
53
57
|
const hitl_1 = require("./hitl");
|
|
54
58
|
const horario_1 = require("./horario");
|
|
55
59
|
const hitl_resumo_1 = require("./hitl-resumo");
|
|
@@ -63,11 +67,20 @@ const maquina_1 = require("./maquina");
|
|
|
63
67
|
const rede_1 = require("./rede");
|
|
64
68
|
const rede_adesao_1 = require("./rede-adesao");
|
|
65
69
|
const pulse_cadencia_1 = require("./pulse-cadencia");
|
|
70
|
+
const conducao_batida_1 = require("./conducao-batida");
|
|
71
|
+
const doctor_pulse_cron_1 = require("./doctor-pulse-cron");
|
|
72
|
+
const transporte_do_canal_1 = require("./transporte-do-canal");
|
|
73
|
+
const ledger_1 = require("./ledger");
|
|
66
74
|
// O lock dos monitores mudou de modulo (I-41, GO-FIX 1); quem o importava daqui continua importando.
|
|
67
75
|
var monitor_lock_2 = require("./monitor-lock");
|
|
68
76
|
Object.defineProperty(exports, "adquirirLockMonitor", { enumerable: true, get: function () { return monitor_lock_2.adquirirLockMonitor; } });
|
|
69
77
|
/** RM-037 (fatia 4): por quanto tempo a parada ja informada continua sabida depois de sumir de uma batida. */
|
|
70
78
|
exports.RETEM_PARADO_MS = 6 * 60 * 60 * 1000;
|
|
79
|
+
/**
|
|
80
|
+
* RM-063 (F6): o fim de um episodio de maquina ociosa. A marca do alerta fica enquanto ela continua ociosa e por mais
|
|
81
|
+
* duas batidas depois: a maquina que volta a ficar ociosa depois disso e outro episodio, e o dono e avisado de novo.
|
|
82
|
+
*/
|
|
83
|
+
exports.FIM_DO_EPISODIO_OCIOSO_MS = 30 * 60 * 1000;
|
|
71
84
|
/**
|
|
72
85
|
* I-41 (D9): a assinatura de deduplicacao NAO inclui `apresentacao`.
|
|
73
86
|
*
|
|
@@ -113,6 +126,64 @@ function gravarCache(file, vistas) {
|
|
|
113
126
|
fs.writeFileSync(tmp, JSON.stringify({ versao: 1, vistas }) + '\n', { mode: 0o600 });
|
|
114
127
|
fs.renameSync(tmp, file);
|
|
115
128
|
}
|
|
129
|
+
/** Os ids de mensagem que o transporte imprimiu ao entregar: só inteiros positivos do Telegram, no máximo dez. */
|
|
130
|
+
function idsDaEntrega(saida) {
|
|
131
|
+
const texto = String(saida ?? '').trim();
|
|
132
|
+
let j = null;
|
|
133
|
+
for (const candidato of [texto, texto.split('\n').filter(Boolean).at(-1) ?? '']) {
|
|
134
|
+
try {
|
|
135
|
+
j = JSON.parse(candidato);
|
|
136
|
+
break;
|
|
137
|
+
}
|
|
138
|
+
catch {
|
|
139
|
+
j = null;
|
|
140
|
+
}
|
|
141
|
+
}
|
|
142
|
+
if (!j || typeof j !== 'object' || Array.isArray(j))
|
|
143
|
+
return [];
|
|
144
|
+
const o = j;
|
|
145
|
+
const brutos = [...(Array.isArray(o.message_ids) ? o.message_ids : []), o.message_id, o.messageId];
|
|
146
|
+
const ids = brutos.map(v => (typeof v === 'number' && Number.isSafeInteger(v) && v > 0) ? String(v)
|
|
147
|
+
: typeof v === 'string' && /^[1-9][0-9]{0,19}$/.test(v) ? v : null).filter((v) => v !== null);
|
|
148
|
+
return [...new Set(ids)].slice(0, 10);
|
|
149
|
+
}
|
|
150
|
+
/**
|
|
151
|
+
* RM-063 (fatia 3, H4): entrega a mensagem pelo transporte do pulse e, quando ele falha, pelos outros hosts configurados
|
|
152
|
+
* (`alternativos`), na ordem. Cada entrega vai ao `transporte.log` (`transporte_entrega`, com cada tentativa), que o
|
|
153
|
+
* `ork doctor` le: a falha do principal aparece la mesmo quando o outro host entregou. A mensagem entra como texto:
|
|
154
|
+
* `$&` e `$'` nela nao sao padrao de substituicao (CHECK da RM-037, fatia 4).
|
|
155
|
+
*/
|
|
156
|
+
function entregarPeloTransporte(raiz, mensagem, opcoes) {
|
|
157
|
+
const dir = opcoes.dir ?? path.join((0, estado_thread_1.raizDoEstado)(raiz), '.orkastery', 'monitor');
|
|
158
|
+
// RM-047 (P2): o executavel do transporte so sai do arquivo local, nunca de um versionado no git.
|
|
159
|
+
if (!opcoes.config)
|
|
160
|
+
(0, procedencia_1.exigirHostLocal)(raiz, path.join(dir, 'pulse-host.json'));
|
|
161
|
+
const config = opcoes.config ?? JSON.parse(fs.readFileSync(path.join(dir, 'pulse-host.json'), 'utf8'));
|
|
162
|
+
if (!(0, transporte_do_canal_1.transporteValido)(config))
|
|
163
|
+
throw new Error('transporte requer executavel e argumentos com {{mensagem}}');
|
|
164
|
+
const todos = [config, ...(Array.isArray(config.alternativos) ? config.alternativos.filter(transporte_do_canal_1.transporteValido) : [])];
|
|
165
|
+
const tentativas = [];
|
|
166
|
+
let entregue = null, mensagens = [];
|
|
167
|
+
for (const t of todos) {
|
|
168
|
+
const host = (0, transporte_do_canal_1.hostDoTransporte)(t);
|
|
169
|
+
const r = (0, node_child_process_1.spawnSync)(t.executavel, t.argumentos.map((a) => a.replaceAll('{{mensagem}}', () => mensagem)), { cwd: raiz, encoding: 'utf8', input: mensagem, timeout: 30000, maxBuffer: 1024 * 1024 });
|
|
170
|
+
const ok = r.status === 0;
|
|
171
|
+
tentativas.push({ host, ok, codigo: r.status, detalhe: ok ? '' : (0, hitl_1.redigirSegredos)(`${r.error ? r.error.message : ''} ${r.stderr ?? ''}`)
|
|
172
|
+
.replace(/\s+/g, ' ').trim().slice(0, 200) });
|
|
173
|
+
if (ok) {
|
|
174
|
+
entregue = host;
|
|
175
|
+
mensagens = idsDaEntrega(r.stdout ?? '');
|
|
176
|
+
break;
|
|
177
|
+
}
|
|
178
|
+
}
|
|
179
|
+
try {
|
|
180
|
+
fs.mkdirSync(dir, { recursive: true });
|
|
181
|
+
fs.appendFileSync(path.join(dir, doctor_pulse_cron_1.ARQUIVO_DO_TRANSPORTE), JSON.stringify({ ts: opcoes.quando ?? new Date().toISOString(),
|
|
182
|
+
tipo: 'transporte_entrega', oQue: opcoes.oQue, ok: entregue !== null, host: entregue, tentativas }) + '\n', { mode: 0o600 });
|
|
183
|
+
}
|
|
184
|
+
catch { /* o log e do doctor; a entrega vale sem ele */ }
|
|
185
|
+
return { ok: entregue !== null, host: entregue, tentativas, mensagens };
|
|
186
|
+
}
|
|
116
187
|
/**
|
|
117
188
|
* I-41 (escopo do dono, 20/09 16:5x): a varredura entrega UMA mensagem, nunca uma por item.
|
|
118
189
|
*
|
|
@@ -194,41 +265,51 @@ function varrerPulse(opcoes) {
|
|
|
194
265
|
const chaveDoParado = (p) => `parado:${p.thread}:${p.caso}`;
|
|
195
266
|
for (const p of parados)
|
|
196
267
|
presentes.add(chaveDoParado(p));
|
|
268
|
+
// RM-063 (F5): o que a varredura fez sozinha, pela autorizacao do dono, e noticia uma vez, como a decisao informada.
|
|
269
|
+
const feitas = pulse.varredura?.feitas ?? [];
|
|
270
|
+
const chaveDaFeita = (id) => `varredura:${id}`;
|
|
271
|
+
for (const f of feitas)
|
|
272
|
+
presentes.add(chaveDaFeita(f.eventId));
|
|
197
273
|
// A parada que some por uma batida (gh que falhou, um `ork verify` do condutor) e volta nao e noticia
|
|
198
274
|
// nova: a marca fica guardada por `RETEM_PARADO_MS` depois da ultima vez que a parada apareceu.
|
|
199
|
-
|
|
200
|
-
|
|
275
|
+
// RM-063 (F6): a maquina ociosa e alerta uma vez por episodio; a marca guarda a ultima vez que ela apareceu ociosa.
|
|
276
|
+
const ociosa = pulse.maquinaOciosa ?? null;
|
|
277
|
+
const chaveDaOciosa = ociosa ? `ociosa:${ociosa.maquina}` : null;
|
|
278
|
+
if (chaveDaOciosa)
|
|
279
|
+
presentes.add(chaveDaOciosa);
|
|
280
|
+
const guardada = (id, valor) => (id.startsWith('parado:') &&
|
|
281
|
+
Date.parse(quando) - Number(valor.split('|')[1]) < exports.RETEM_PARADO_MS) ||
|
|
282
|
+
(id.startsWith('ociosa:') && Date.parse(quando) - Number(valor.split('|')[1]) < exports.FIM_DO_EPISODIO_OCIOSO_MS);
|
|
201
283
|
vistas = Object.fromEntries(Object.entries(vistas).filter(([id, valor]) => presentes.has(id) || guardada(id, valor)));
|
|
202
284
|
const esperaNovaFora = esperasFora.some(k => vistas[k] === undefined);
|
|
203
285
|
const decisoesNovas = decisoes.filter(d => vistas[chaveDaDecisao(d.id)] === undefined);
|
|
286
|
+
const feitasNovas = feitas.filter(f => vistas[chaveDaFeita(f.eventId)] === undefined);
|
|
204
287
|
const paradosNovos = parados.filter(p => vistas[chaveDoParado(p)] === undefined);
|
|
205
288
|
// A marca guarda o instante em milissegundos: e dado de maquina, nao texto para o dono.
|
|
206
289
|
for (const p of parados)
|
|
207
290
|
if (vistas[chaveDoParado(p)] !== undefined)
|
|
208
291
|
vistas[chaveDoParado(p)] = `informada|${Date.parse(quando)}`;
|
|
292
|
+
const ociosaNova = !!chaveDaOciosa && vistas[chaveDaOciosa] === undefined;
|
|
293
|
+
if (chaveDaOciosa && !ociosaNova)
|
|
294
|
+
vistas[chaveDaOciosa] = `informada|${Date.parse(quando)}`;
|
|
209
295
|
// I-41 (GO-FIX 1): a thread que ja recebeu a pergunta e ainda nao respondeu nao e noticia. A
|
|
210
296
|
// mudanca no item dela (o pedido que o sim do dono abriu) e obra nossa, e avisar sobre ela seria
|
|
211
297
|
// mandar ao dono um resumo sobre a pergunta que ele acabou de receber.
|
|
212
298
|
const servidas = (0, pulse_resposta_1.threadsComPerguntaViva)(raiz, quando, dir);
|
|
213
299
|
const jaServida = (i) => !!i.thread && servidas.has(i.thread);
|
|
214
300
|
novas = itens.filter(i => vistas[i.id] !== assinaturaPulse(i) && !jaServida(i)).length;
|
|
301
|
+
// RM-055 (continuacao, D3): o impedimento que so o dono destrava vai no resumo com o comando de cada um,
|
|
302
|
+
// e o que ele ainda nao viu sai na hora, como pergunta nova: esperar a janela da cadencia deixava a
|
|
303
|
+
// fase parada sem ele saber. O ja avisado nao volta a tocar sozinho.
|
|
304
|
+
const impedimentos = itens.filter(i => i.impedimento && i.thread).map(i => ({ thread: i.thread, fase: i.fase,
|
|
305
|
+
comando: i.impedimento.comando, retry: i.impedimento.retry }));
|
|
306
|
+
const impedimentoNovo = itens.some(i => i.impedimento && vistas[i.id] !== assinaturaPulse(i) && !jaServida(i));
|
|
215
307
|
for (const i of itens)
|
|
216
308
|
if (jaServida(i))
|
|
217
309
|
vistas[i.id] = assinaturaPulse(i);
|
|
218
310
|
const entregar = (mensagem, oQue) => {
|
|
219
|
-
|
|
220
|
-
|
|
221
|
-
entregue = opcoes.enviar(mensagem);
|
|
222
|
-
else {
|
|
223
|
-
const config = opcoes.transporte ?? JSON.parse(fs.readFileSync(path.join(dir, 'pulse-host.json'), 'utf8'));
|
|
224
|
-
if (typeof config.executavel !== 'string' || !config.executavel || !Array.isArray(config.argumentos) ||
|
|
225
|
-
!config.argumentos.every(a => typeof a === 'string') || !config.argumentos.some(a => a.includes('{{mensagem}}'))) {
|
|
226
|
-
throw new Error('transporte requer executavel e argumentos com {{mensagem}}');
|
|
227
|
-
}
|
|
228
|
-
// A mensagem entra como texto: `$&` e `$'` nela nao sao padrao de substituicao (CHECK da RM-037, fatia 4).
|
|
229
|
-
const r = (0, node_child_process_1.spawnSync)(config.executavel, config.argumentos.map(a => a.replaceAll('{{mensagem}}', () => mensagem)), { cwd: raiz, encoding: 'utf8', input: mensagem, timeout: 30000, maxBuffer: 1024 * 1024 });
|
|
230
|
-
entregue = r.status === 0;
|
|
231
|
-
}
|
|
311
|
+
const entregue = opcoes.enviar ? opcoes.enviar(mensagem)
|
|
312
|
+
: entregarPeloTransporte(raiz, mensagem, { dir, oQue, quando, ...(opcoes.transporte ? { config: opcoes.transporte } : {}) }).ok;
|
|
232
313
|
if (!entregue)
|
|
233
314
|
throw new Error(`transporte não confirmou ${oQue}; novidade preservada`);
|
|
234
315
|
enviadas++;
|
|
@@ -250,13 +331,22 @@ function varrerPulse(opcoes) {
|
|
|
250
331
|
// I-50: pergunta nova sai na hora; o resto (status, decisoes informadas) espera a janela da
|
|
251
332
|
// cadencia do dono, e a novidade que esperou continua nao vista ate sair.
|
|
252
333
|
const noPrazo = !opcoes.comCadencia || (0, pulse_cadencia_1.janelaAberta)(cadencia, (0, pulse_cadencia_1.lerUltimoResumo)(opcoes.raiz, dir), quando);
|
|
253
|
-
const informacaoNova = novas > 0 || decisoesNovas.length > 0 || paradosNovos.length > 0;
|
|
254
|
-
|
|
255
|
-
|
|
334
|
+
const informacaoNova = novas > 0 || decisoesNovas.length > 0 || paradosNovos.length > 0 || feitasNovas.length > 0;
|
|
335
|
+
// RM-063 (F6): a maquina ociosa sai na hora, como a pergunta nova: esperar a janela da cadencia (ate 8 h no
|
|
336
|
+
// #OrkPulseOff) e exatamente a maquina parada sem o dono saber.
|
|
337
|
+
const adiada = !conjuntoNovo && !esperaNovaFora && !impedimentoNovo && !ociosaNova && informacaoNova && !noPrazo;
|
|
338
|
+
if (conjuntoNovo || esperaNovaFora || impedimentoNovo || ociosaNova || (noPrazo && informacaoNova)) {
|
|
256
339
|
const guardadas = anterior ? fila.candidatos.filter(c => anterior.candidatos.some(a => a.thread === c.thread)).length : 0;
|
|
257
340
|
const resumo = (0, hitl_resumo_1.resumirHitl)(itens, { quando, janelaMin, prontas: fila.candidatos.length, acumuladas: guardadas,
|
|
258
341
|
consertos: fila.consertos, atoDoItem: i => fila.atos.get(`${i.thread}|${i.fase}`),
|
|
259
342
|
decisoes: decisoesNovas, acimaDoLimiar: pulse.acimaDoLimiar ?? [], outrasMaquinas: outras, paradosNoCondutor: parados,
|
|
343
|
+
impedimentosDoDono: impedimentos,
|
|
344
|
+
// RM-063 (F5): o que espera o dono na varredura, com o comando, e o que ela fez sozinha desde o ultimo resumo.
|
|
345
|
+
acoesDaVarredura: (pulse.varredura?.pendentes ?? []).filter(a => a.quemFaz === 'dono')
|
|
346
|
+
.map(a => ({ thread: a.thread, acao: a.acao, texto: (0, pulse_1.textoDaAcaoDaVarredura)(a), comando: (0, pulse_1.comandoDaAcaoDaVarredura)(a) })),
|
|
347
|
+
feitasPelaVarredura: feitasNovas.map(f => ({ thread: f.thread, acao: f.acao, texto: `${f.acao}: ${f.detalhe}`, comando: null })),
|
|
348
|
+
maquinaOciosa: ociosa ? { maquina: ociosa.maquina, livres: ociosa.livres, limite: ociosa.limite, reservados: ociosa.reservados,
|
|
349
|
+
sugeridas: ociosa.sugeridas.map(x => ({ item: x.item, thread: x.thread, passo: x.passo, comando: x.comando })) } : null,
|
|
260
350
|
// RM-057 (fatia 3): a linha so acompanha o resumo que ja sai; nao e novidade nem fura a cadencia.
|
|
261
351
|
...(pulse.hitlDeConducao ? { hitlDeConducao: pulse.hitlDeConducao } : {}) });
|
|
262
352
|
// Pedir licenca para mandar zero perguntas era o defeito: sem pergunta, nao ha codigo.
|
|
@@ -278,6 +368,19 @@ function varrerPulse(opcoes) {
|
|
|
278
368
|
vistas[k] = 'informada';
|
|
279
369
|
for (const p of parados)
|
|
280
370
|
vistas[chaveDoParado(p)] = `informada|${Date.parse(quando)}`;
|
|
371
|
+
for (const f of feitas)
|
|
372
|
+
vistas[chaveDaFeita(f.eventId)] = 'informada';
|
|
373
|
+
if (chaveDaOciosa)
|
|
374
|
+
vistas[chaveDaOciosa] = `informada|${Date.parse(quando)}`;
|
|
375
|
+
// RM-063 (F6): o aviso de maquina ociosa vai ao ledger do projeto, uma linha por episodio: e a metrica do item.
|
|
376
|
+
if (ociosa && ociosaNova) {
|
|
377
|
+
try {
|
|
378
|
+
(0, ledger_1.registrar)(path.join(raiz, '.orkastery'), 'projeto', ledger_1.TIPOS_DE_EVENTO.maquinaOciosaAvisada, { maquina: ociosa.maquina,
|
|
379
|
+
livres: ociosa.livres, limite: ociosa.limite, reservados: ociosa.reservados, sugeridas: ociosa.sugeridas.map(x => x.item),
|
|
380
|
+
fonte: ociosa.fonte });
|
|
381
|
+
}
|
|
382
|
+
catch { /* o aviso ja saiu; o ledger e a metrica */ }
|
|
383
|
+
}
|
|
281
384
|
(0, pulse_cadencia_1.gravarUltimoResumo)(opcoes.raiz, quando, dir);
|
|
282
385
|
}
|
|
283
386
|
gravarCache(cache, vistas);
|
|
@@ -292,6 +395,21 @@ function varrerPulse(opcoes) {
|
|
|
292
395
|
trava.liberar();
|
|
293
396
|
}
|
|
294
397
|
}
|
|
398
|
+
/**
|
|
399
|
+
* RM-063 (F5 e F7): a parte que age da batida, depois da entrega ao dono (a busca da base, o merge e o registro do PR nao
|
|
400
|
+
* atrasam o resumo): a batida da conducao (`ork conducao batida`), com o merge dos PRs prontos, a varredura da F5 e o
|
|
401
|
+
* despacho da fase seguinte, cada rodada no `hitl.log` (`varredura_acoes`). Uma batida por vez (`varredura-acoes.lock`):
|
|
402
|
+
* a que chega com outra agindo so registra a vez perdida. Nunca lanca.
|
|
403
|
+
*/
|
|
404
|
+
function agirDepoisDaEntrega(carregado, opcoes = {}) {
|
|
405
|
+
try {
|
|
406
|
+
const r = (0, conducao_batida_1.baterConducao)(carregado, opcoes);
|
|
407
|
+
return r.ocupada ? null : r;
|
|
408
|
+
}
|
|
409
|
+
catch {
|
|
410
|
+
return null;
|
|
411
|
+
}
|
|
412
|
+
}
|
|
295
413
|
/**
|
|
296
414
|
* RM-053: a entrega ao dono vem primeiro, e a rede depois, mesmo quando a varredura falha. M4 do
|
|
297
415
|
* CHECK 1: antes da entrega, uma forja lenta atrasava o HITL em minutos. S13 da revisao 2: sem o
|
|
@@ -341,13 +459,22 @@ if (require.main === module) {
|
|
|
341
459
|
// RM-053 (D9): depois da entrega ao dono, a mesma batida publica o retrato desta maquina na rede da
|
|
342
460
|
// pessoa (so membro, uma tentativa a cada 14 min, retrato igual so de hora em hora).
|
|
343
461
|
const r = varrerEDepoisPublicarNaRede(() => varrerPulse({ raiz, escopo, comCadencia: true, outrasMaquinas }), () => {
|
|
462
|
+
// RM-063 (F5 e F7): a batida da conducao vem depois da entrega ao dono e antes da rede: com a autorizacao duravel
|
|
463
|
+
// do dono, mescla o PR pronto, limpa as sessoes fantasmas, registra a entrega do PR ja mesclado, fecha pelo MASTER
|
|
464
|
+
// por omissao e despacha a fase seguinte; o resumo seguinte diz o que ela fez, e o que ficou sem autorizacao ja
|
|
465
|
+
// esta na fila do dono. Ela nunca lanca.
|
|
344
466
|
try {
|
|
345
|
-
|
|
346
|
-
if (rede)
|
|
347
|
-
(0, rede_adesao_1.registrarNaRede)({ ...rede, origem: 'pulse' });
|
|
467
|
+
agirDepoisDaEntrega(carregado);
|
|
348
468
|
}
|
|
349
|
-
|
|
350
|
-
|
|
469
|
+
finally {
|
|
470
|
+
try {
|
|
471
|
+
const rede = (0, rede_1.publicarRedeNaBatida)({ diretorio: carregado.raiz });
|
|
472
|
+
if (rede)
|
|
473
|
+
(0, rede_adesao_1.registrarNaRede)({ ...rede, origem: 'pulse' });
|
|
474
|
+
}
|
|
475
|
+
catch (e) {
|
|
476
|
+
(0, rede_adesao_1.registrarNaRede)({ acao: 'falhou', origem: 'pulse', erro: e.message });
|
|
477
|
+
}
|
|
351
478
|
}
|
|
352
479
|
});
|
|
353
480
|
console.log(JSON.stringify(r));
|