@orkastery/cli 0.5.6 → 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 +37 -5
- package/adapters/claude-code/agents/ork-check.md +1 -0
- package/adapters/claude-code/agents/ork-go.md +1 -0
- package/adapters/claude-code/agents/ork-goal.md +1 -0
- package/adapters/claude-code/agents/ork-master.md +1 -0
- package/adapters/claude-code/agents/ork-plan.md +1 -0
- package/adapters/claude-code/agents/ork-ship.md +1 -0
- package/adapters/claude-code/hooks/hooks.json +2 -1
- package/adapters/claude-code/hooks/ork-guard.js +15 -1
- package/adapters/claude-code/hooks/ork-resposta.js +91 -0
- package/adapters/claude-code/hooks/ork-sensor.js +18 -2
- package/adapters/claude-code/hooks/quota-signal.js +14 -0
- package/adapters/claude-code/mods/ork-mensageiro/.claude-plugin/plugin.json +14 -0
- package/adapters/claude-code/mods/ork-mensageiro/hooks/caixa.ts +215 -0
- package/adapters/claude-code/mods/ork-mensageiro/hooks/hooks.json +3 -0
- package/adapters/claude-code/mods/ork-mensageiro/hooks/painel.tsx +165 -0
- package/adapters/claude-code/mods/ork-mensageiro/hooks/recepcao.ts +256 -0
- package/adapters/claude-code/mods/ork-mensageiro/hooks/register.tsx +481 -0
- package/adapters/claude-code/mods/ork-mensageiro/orkastery-mod.json +5 -0
- package/adapters/claude-code/mods/ork-mensageiro/types/index.d.ts +85 -0
- package/adapters/claude-code/mods/ork-pista/hooks/ci.ts +9 -5
- package/adapters/claude-code/mods/ork-ritual/.claude-plugin/plugin.json +14 -0
- package/adapters/claude-code/mods/ork-ritual/hooks/hooks.json +3 -0
- package/adapters/claude-code/mods/ork-ritual/hooks/nota.ts +88 -0
- package/adapters/claude-code/mods/ork-ritual/hooks/register.tsx +494 -0
- package/adapters/claude-code/mods/ork-ritual/hooks/replay.tsx +271 -0
- package/adapters/claude-code/mods/ork-ritual/hooks/ritual.ts +218 -0
- package/adapters/claude-code/mods/ork-ritual/orkastery-mod.json +5 -0
- package/adapters/claude-code/mods/ork-ritual/types/index.d.ts +106 -0
- package/adapters/claude-code/mods/ork-sentinela/hooks/vigia.ts +1 -1
- package/adapters/codex/skills/ork/SKILL.md +2 -0
- package/adapters/hermes/README.md +64 -1
- package/adapters/hermes/bin/ork-conhecimento-colecoes.sh +14 -0
- package/adapters/hermes/bin/ork-conhecimento-listar.sh +15 -0
- package/adapters/hermes/bin/ork-conhecimento-mostrar.sh +16 -0
- package/adapters/hermes/bin/ork-conhecimento-verificar.sh +15 -0
- package/adapters/hermes/bin/ork-vigia-batida.py +127 -0
- package/adapters/hermes/hermes.plugin.json +4 -0
- package/adapters/hermes/hitl-ingress/__init__.py +101 -8
- package/adapters/hermes/skills/orkastery-devmaster/SKILL.md +2 -2
- package/adapters/openclaw/README.md +81 -9
- package/adapters/openclaw/bin/ork-vigia-batida.js +86 -0
- package/adapters/openclaw/dist/hitl-ingress.js +106 -9
- package/adapters/openclaw/dist/index.js +86 -0
- package/adapters/openclaw/openclaw.plugin.json +34 -4
- package/adapters/openclaw/package.json +2 -2
- package/adapters/openclaw/src/hitl-ingress.ts +103 -9
- package/adapters/openclaw/src/index.ts +94 -0
- package/assets/adapters-en/claude-code/README.md +403 -0
- package/assets/adapters-en/claude-code/agents/ork-check.md +33 -0
- package/assets/adapters-en/claude-code/agents/ork-go.md +33 -0
- package/assets/adapters-en/claude-code/agents/ork-goal.md +34 -0
- package/assets/adapters-en/claude-code/agents/ork-master.md +35 -0
- package/assets/adapters-en/claude-code/agents/ork-plan.md +33 -0
- package/assets/adapters-en/claude-code/agents/ork-ship.md +33 -0
- package/assets/adapters-en/claude-code/commands/check.md +46 -0
- package/assets/adapters-en/claude-code/commands/go.md +46 -0
- package/assets/adapters-en/claude-code/commands/goal.md +55 -0
- package/assets/adapters-en/claude-code/commands/master.md +54 -0
- package/assets/adapters-en/claude-code/commands/onboarding.md +22 -0
- package/assets/adapters-en/claude-code/commands/ork.md +126 -0
- package/assets/adapters-en/claude-code/commands/plan.md +47 -0
- package/assets/adapters-en/claude-code/commands/ship.md +45 -0
- package/assets/adapters-en/codex/skills/ork/SKILL.md +85 -0
- package/assets/adapters-en/hermes/README.md +273 -0
- package/assets/adapters-en/hermes/skills/orkastery-devmaster/SKILL.md +169 -0
- package/assets/references-en/README.md +25 -0
- package/assets/references-en/code-review-axes.md +82 -0
- package/assets/references-en/definition-of-done.md +74 -0
- package/assets/references-en/performance-checklist.md +53 -0
- package/assets/references-en/security-checklist.md +101 -0
- package/assets/references-en/testing-patterns.md +51 -0
- package/assets/security-scan/defaults/.golangci.yml +2 -0
- package/assets/security-scan/defaults/eslint.config.mjs +11 -0
- package/assets/security-scan/defaults/gitleaks.toml +3 -0
- package/assets/security-scan/defaults/ruff.toml +1 -0
- package/assets/security-scan/tools-agil.json +87 -0
- package/assets/security-scan/tools.json +625 -0
- package/assets/skills-en/core/onboarding/SKILL.md +58 -0
- package/assets/skills-en/core/orkastery-bootstrap/SKILL.md +119 -0
- package/assets/skills-en/core/thread-state/SKILL.md +88 -0
- package/assets/skills-en/governance/decision-triage/SKILL.md +65 -0
- package/assets/skills-en/governance/narrative-guardian/SKILL.md +66 -0
- package/assets/skills-en/governance/roadmap-keeper/SKILL.md +60 -0
- package/assets/skills-en/governance/scope-check-capability-map/SKILL.md +71 -0
- package/assets/skills-en/observability/thread-tracing/SKILL.md +63 -0
- package/assets/skills-en/phases/check-quality/SKILL.md +103 -0
- package/assets/skills-en/phases/go-implementation/SKILL.md +78 -0
- package/assets/skills-en/phases/goal-definition/SKILL.md +69 -0
- package/assets/skills-en/phases/master-metrics/SKILL.md +72 -0
- package/assets/skills-en/phases/plan-specification/SKILL.md +67 -0
- package/assets/skills-en/phases/security-remediation/SKILL.md +70 -0
- package/assets/skills-en/phases/ship-release/SKILL.md +71 -0
- package/assets/skills-en/reviewers/code-reviewer/SKILL.md +61 -0
- package/assets/skills-en/reviewers/security-auditor/SKILL.md +93 -0
- package/assets/skills-en/reviewers/test-engineer/SKILL.md +66 -0
- package/assets/skills-en/reviewers/web-performance-auditor/SKILL.md +63 -0
- package/dist/adapters/claude-bg.js +118 -4
- package/dist/adapters/codex-controller-worker.js +12 -5
- package/dist/adapters/codex-events.js +16 -4
- package/dist/adapters/codex.js +3 -1
- package/dist/atualizar-branch.js +245 -0
- package/dist/auditoria.js +13 -11
- package/dist/auditrun.js +51 -46
- package/dist/autorizacao-duravel.js +327 -0
- package/dist/board.js +94 -40
- package/dist/branch-de-estado.js +16 -8
- package/dist/busca-semantica.js +7 -5
- package/dist/catalogo.js +2 -1
- package/dist/changelog-reconciliacao.js +290 -0
- package/dist/check-agil.js +500 -0
- package/dist/check-modo.js +41 -0
- package/dist/check-paralelo.js +183 -0
- package/dist/ci.js +248 -45
- package/dist/ciclos.js +8 -6
- package/dist/claim-lint.js +12 -8
- package/dist/claims-conferir.js +47 -39
- package/dist/claims.js +10 -9
- package/dist/company-brain-client.js +10 -3
- package/dist/company-brain-migration.js +11 -5
- package/dist/conducao-batida.js +759 -0
- package/dist/conducao-sentinela.js +25 -8
- package/dist/conducao.js +84 -29
- package/dist/conhecimento-consulta.js +270 -0
- package/dist/conhecimento.js +111 -87
- package/dist/conta-esgotada.js +127 -0
- package/dist/dado-privado.js +816 -0
- package/dist/decisao-autonoma.js +5 -4
- package/dist/demo.js +14 -12
- package/dist/dependencias-da-worktree.js +25 -0
- package/dist/divida.js +38 -36
- package/dist/docs.js +81 -74
- package/dist/doctor-forja.js +345 -0
- package/dist/doctor-pulse-cron.js +113 -1
- package/dist/doctor.js +164 -6
- package/dist/dsn-da-memoria.js +417 -0
- package/dist/entrega-por-mod.js +503 -0
- package/dist/entrega-pr.js +143 -43
- package/dist/esgotamentos.js +13 -11
- package/dist/estado-thread.js +21 -18
- package/dist/evalrunner.js +35 -32
- package/dist/fabrica-batida.js +34 -21
- package/dist/fabrica-estado.js +13 -10
- package/dist/fix.js +21 -19
- package/dist/forja/adaptador.js +6 -0
- package/dist/forja/ambiente-de-ci.js +27 -0
- package/dist/forja/api.js +256 -0
- package/dist/forja/cache.js +89 -0
- package/dist/forja/cli.js +60 -0
- package/dist/forja/contrato.js +9 -0
- package/dist/forja/endereco.js +43 -0
- package/dist/forja/estado.js +22 -0
- package/dist/forja/executor.js +73 -0
- package/dist/forja/github/ci.js +95 -0
- package/dist/forja/github/dono-da-rede.js +18 -0
- package/dist/forja/github/metadados.js +15 -0
- package/dist/forja/github/pedidos.js +200 -0
- package/dist/forja/gitlab/ci.js +141 -0
- package/dist/forja/gitlab/consultas.js +59 -0
- package/dist/forja/gitlab/dono-da-rede.js +43 -0
- package/dist/forja/gitlab/metadados.js +15 -0
- package/dist/forja/gitlab/pedidos-abertos.js +158 -0
- package/dist/forja/gitlab/pedidos.js +141 -0
- package/dist/forja/produtor.js +32 -0
- package/dist/forja/registro.js +31 -0
- package/dist/forja/resolver.js +121 -0
- package/dist/forja/texto.js +13 -0
- package/dist/forja/versao.js +71 -0
- package/dist/forja.js +123 -80
- package/dist/handoff.js +23 -13
- package/dist/hitl-contract.js +46 -43
- package/dist/hitl-curto.js +37 -25
- package/dist/hitl-gates.js +13 -11
- package/dist/hitl-local-receipt.js +51 -0
- package/dist/hitl-local.js +11 -2
- package/dist/hitl-lock.js +5 -11
- package/dist/hitl-public-receipt.js +11 -0
- package/dist/hitl-resumo.js +44 -1
- package/dist/hitl-sessions.js +62 -9
- package/dist/hitl-texto-livre.js +7 -4
- package/dist/hitl.js +34 -31
- package/dist/horario.js +16 -0
- package/dist/hosts.js +104 -134
- package/dist/index.js +848 -548
- package/dist/indice-vetorial.js +14 -12
- package/dist/init.js +11 -2
- package/dist/integracoes-locais.js +2 -0
- package/dist/intelligence-graph-cli.js +123 -69
- package/dist/intelligence-graph-query.js +37 -22
- package/dist/leases.js +19 -18
- package/dist/ledger-stats.js +17 -16
- package/dist/ledger.js +31 -1
- package/dist/licoes.js +12 -11
- package/dist/locale-accounts.js +220 -0
- package/dist/locale-adapter.js +291 -0
- package/dist/locale-ajuda.js +76 -4
- 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 +5 -0
- package/dist/locale-grafo.js +129 -0
- package/dist/locale-master.js +83 -0
- package/dist/locale-network.js +524 -0
- package/dist/locale-operacao-restante.js +931 -0
- package/dist/locale-projetos.js +100 -0
- package/dist/locale-prompts.js +194 -0
- package/dist/locale-pulse.js +140 -2
- package/dist/locale-reservas.js +87 -0
- package/dist/locale-retry.js +145 -6
- package/dist/locale-security-scan.js +69 -0
- package/dist/locale-setup.js +192 -0
- package/dist/locale-ship.js +169 -66
- package/dist/locale-thread.js +149 -5
- package/dist/locale-verify.js +80 -4
- package/dist/locale-worktree.js +246 -0
- package/dist/locale.js +553 -9
- package/dist/maestro-runtime.js +22 -3
- package/dist/manifest.js +287 -11
- package/dist/maquina-ociosa.js +211 -0
- package/dist/maquina.js +10 -5
- package/dist/master-nota-local.js +200 -0
- package/dist/master-nota.js +10 -2
- package/dist/master.js +118 -41
- package/dist/mcp-conhecimento.js +52 -0
- package/dist/mcp-experiencia.js +26 -5
- package/dist/mcp-install.js +73 -8
- package/dist/mcp-noctum.js +101 -0
- package/dist/mcp-server.js +82 -14
- package/dist/mcp-ship-transporte.js +977 -0
- package/dist/mcp-ship.js +68 -24
- package/dist/mcp-transportes.js +17 -0
- package/dist/memoria.js +63 -58
- package/dist/modos-migracao.js +8 -6
- package/dist/modos.js +17 -18
- package/dist/network-roadmap.js +85 -49
- package/dist/noctum-aceite.js +789 -0
- package/dist/noctum-arco.js +540 -33
- package/dist/noctum-capacidade.js +3 -3
- package/dist/noctum-changelog.js +399 -0
- package/dist/noctum-cli.js +482 -0
- package/dist/noctum-coordenacao.js +1225 -0
- package/dist/noctum-entrega.js +1169 -0
- package/dist/noctum-envelope.js +252 -16
- package/dist/noctum-execucao.js +95 -23
- package/dist/noctum-fechamento.js +405 -0
- package/dist/noctum-fila.js +43 -9
- 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 +3 -1
- package/dist/onboarding.js +16 -5
- package/dist/orkmind.js +39 -23
- package/dist/orquestracao.js +31 -35
- package/dist/parado-no-condutor.js +146 -124
- package/dist/phase.js +53 -27
- package/dist/policies.js +33 -0
- package/dist/postura-local.js +4 -3
- package/dist/procedencia.js +9 -14
- package/dist/projeto-alvo.js +59 -20
- package/dist/prompts.js +136 -42
- package/dist/prova-minima.js +5 -6
- package/dist/pulse-cadencia.js +5 -4
- package/dist/pulse-consentimento.js +53 -1
- package/dist/pulse-delivery.js +143 -27
- package/dist/pulse-resposta.js +368 -4
- package/dist/pulse.js +136 -3
- package/dist/ratelimit.js +12 -4
- package/dist/recall.js +14 -13
- package/dist/rede-adesao.js +13 -8
- package/dist/rede-forja.js +108 -24
- package/dist/rede-status.js +63 -45
- package/dist/rede.js +86 -46
- package/dist/retomada-checkpoint.js +101 -0
- package/dist/retry.js +228 -73
- package/dist/roadmap-reservas.js +32 -32
- package/dist/runtime-ambiente.js +5 -0
- package/dist/runtime-context.js +117 -43
- package/dist/runtime-escada.js +423 -0
- package/dist/runtime-profiles.js +103 -46
- 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 +19 -2
- package/dist/session-watcher-claude.js +74 -19
- package/dist/session-watcher.js +156 -10
- package/dist/sessoes-contas.js +9 -0
- package/dist/sessoes-inventario.js +1 -1
- package/dist/sessoes.js +25 -23
- package/dist/setup.js +59 -58
- package/dist/ship-publicar.js +263 -92
- package/dist/ship.js +160 -17
- package/dist/superficie.js +14 -11
- package/dist/thread-close.js +9 -9
- package/dist/thread.js +121 -18
- package/dist/tokens.js +15 -11
- package/dist/trabalho-thread.js +297 -0
- package/dist/transporte-do-canal.js +189 -0
- package/dist/types.js +12 -1
- package/dist/util.js +5 -2
- package/dist/varredura-acoes.js +507 -0
- package/dist/verify.js +472 -29
- package/dist/worktree-local.js +12 -10
- package/dist/worktree.js +81 -85
- package/eval/casos/check-quality.json +77 -0
- package/eval/casos/security-auditor.json +148 -0
- package/eval/casos/security-remediation.json +161 -0
- package/eval/fixtures/security-scan/README.md +8 -0
- package/eval/fixtures/security-scan/go/.github/workflows/ci.yml +12 -0
- package/eval/fixtures/security-scan/go/Dockerfile +4 -0
- package/eval/fixtures/security-scan/go/README.md +4 -0
- package/eval/fixtures/security-scan/go/config.go +4 -0
- package/eval/fixtures/security-scan/go/go.mod +5 -0
- package/eval/fixtures/security-scan/go/go.sum +2 -0
- package/eval/fixtures/security-scan/go/main.go +31 -0
- package/eval/fixtures/security-scan/js/.github/workflows/ci.yml +12 -0
- package/eval/fixtures/security-scan/js/Dockerfile +3 -0
- package/eval/fixtures/security-scan/js/README.md +4 -0
- package/eval/fixtures/security-scan/js/package-lock.json +844 -0
- package/eval/fixtures/security-scan/js/package.json +10 -0
- package/eval/fixtures/security-scan/js/src/config.js +4 -0
- package/eval/fixtures/security-scan/js/src/server.js +17 -0
- package/eval/fixtures/security-scan/js/src/util.ts +4 -0
- package/eval/fixtures/security-scan/js/tsconfig.json +4 -0
- package/eval/fixtures/security-scan/python/.github/workflows/ci.yml +12 -0
- package/eval/fixtures/security-scan/python/Dockerfile +3 -0
- package/eval/fixtures/security-scan/python/README.md +4 -0
- package/eval/fixtures/security-scan/python/app/__init__.py +0 -0
- package/eval/fixtures/security-scan/python/app/config.py +2 -0
- package/eval/fixtures/security-scan/python/app/main.py +19 -0
- package/eval/fixtures/security-scan/python/requirements.txt +1 -0
- package/package.json +9 -4
- package/references/security-checklist.md +3 -3
- package/skills/README.md +1 -0
- package/skills/core/orkastery-bootstrap/SKILL.md +2 -2
- package/skills/phases/check-quality/SKILL.md +16 -0
- package/skills/phases/go-implementation/SKILL.md +6 -0
- package/skills/phases/security-remediation/SKILL.md +70 -0
- package/skills/reviewers/security-auditor/SKILL.md +25 -0
package/dist/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");
|
|
@@ -64,11 +67,20 @@ const maquina_1 = require("./maquina");
|
|
|
64
67
|
const rede_1 = require("./rede");
|
|
65
68
|
const rede_adesao_1 = require("./rede-adesao");
|
|
66
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");
|
|
67
74
|
// O lock dos monitores mudou de modulo (I-41, GO-FIX 1); quem o importava daqui continua importando.
|
|
68
75
|
var monitor_lock_2 = require("./monitor-lock");
|
|
69
76
|
Object.defineProperty(exports, "adquirirLockMonitor", { enumerable: true, get: function () { return monitor_lock_2.adquirirLockMonitor; } });
|
|
70
77
|
/** RM-037 (fatia 4): por quanto tempo a parada ja informada continua sabida depois de sumir de uma batida. */
|
|
71
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;
|
|
72
84
|
/**
|
|
73
85
|
* I-41 (D9): a assinatura de deduplicacao NAO inclui `apresentacao`.
|
|
74
86
|
*
|
|
@@ -114,6 +126,64 @@ function gravarCache(file, vistas) {
|
|
|
114
126
|
fs.writeFileSync(tmp, JSON.stringify({ versao: 1, vistas }) + '\n', { mode: 0o600 });
|
|
115
127
|
fs.renameSync(tmp, file);
|
|
116
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
|
+
}
|
|
117
187
|
/**
|
|
118
188
|
* I-41 (escopo do dono, 20/09 16:5x): a varredura entrega UMA mensagem, nunca uma por item.
|
|
119
189
|
*
|
|
@@ -195,18 +265,33 @@ function varrerPulse(opcoes) {
|
|
|
195
265
|
const chaveDoParado = (p) => `parado:${p.thread}:${p.caso}`;
|
|
196
266
|
for (const p of parados)
|
|
197
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));
|
|
198
273
|
// A parada que some por uma batida (gh que falhou, um `ork verify` do condutor) e volta nao e noticia
|
|
199
274
|
// nova: a marca fica guardada por `RETEM_PARADO_MS` depois da ultima vez que a parada apareceu.
|
|
200
|
-
|
|
201
|
-
|
|
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);
|
|
202
283
|
vistas = Object.fromEntries(Object.entries(vistas).filter(([id, valor]) => presentes.has(id) || guardada(id, valor)));
|
|
203
284
|
const esperaNovaFora = esperasFora.some(k => vistas[k] === undefined);
|
|
204
285
|
const decisoesNovas = decisoes.filter(d => vistas[chaveDaDecisao(d.id)] === undefined);
|
|
286
|
+
const feitasNovas = feitas.filter(f => vistas[chaveDaFeita(f.eventId)] === undefined);
|
|
205
287
|
const paradosNovos = parados.filter(p => vistas[chaveDoParado(p)] === undefined);
|
|
206
288
|
// A marca guarda o instante em milissegundos: e dado de maquina, nao texto para o dono.
|
|
207
289
|
for (const p of parados)
|
|
208
290
|
if (vistas[chaveDoParado(p)] !== undefined)
|
|
209
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)}`;
|
|
210
295
|
// I-41 (GO-FIX 1): a thread que ja recebeu a pergunta e ainda nao respondeu nao e noticia. A
|
|
211
296
|
// mudanca no item dela (o pedido que o sim do dono abriu) e obra nossa, e avisar sobre ela seria
|
|
212
297
|
// mandar ao dono um resumo sobre a pergunta que ele acabou de receber.
|
|
@@ -223,22 +308,8 @@ function varrerPulse(opcoes) {
|
|
|
223
308
|
if (jaServida(i))
|
|
224
309
|
vistas[i.id] = assinaturaPulse(i);
|
|
225
310
|
const entregar = (mensagem, oQue) => {
|
|
226
|
-
|
|
227
|
-
|
|
228
|
-
entregue = opcoes.enviar(mensagem);
|
|
229
|
-
else {
|
|
230
|
-
// RM-047 (P2): o executavel do transporte so sai do arquivo local, nunca de um versionado no git.
|
|
231
|
-
if (!opcoes.transporte)
|
|
232
|
-
(0, procedencia_1.exigirHostLocal)(raiz, path.join(dir, 'pulse-host.json'));
|
|
233
|
-
const config = opcoes.transporte ?? JSON.parse(fs.readFileSync(path.join(dir, 'pulse-host.json'), 'utf8'));
|
|
234
|
-
if (typeof config.executavel !== 'string' || !config.executavel || !Array.isArray(config.argumentos) ||
|
|
235
|
-
!config.argumentos.every(a => typeof a === 'string') || !config.argumentos.some(a => a.includes('{{mensagem}}'))) {
|
|
236
|
-
throw new Error('transporte requer executavel e argumentos com {{mensagem}}');
|
|
237
|
-
}
|
|
238
|
-
// A mensagem entra como texto: `$&` e `$'` nela nao sao padrao de substituicao (CHECK da RM-037, fatia 4).
|
|
239
|
-
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 });
|
|
240
|
-
entregue = r.status === 0;
|
|
241
|
-
}
|
|
311
|
+
const entregue = opcoes.enviar ? opcoes.enviar(mensagem)
|
|
312
|
+
: entregarPeloTransporte(raiz, mensagem, { dir, oQue, quando, ...(opcoes.transporte ? { config: opcoes.transporte } : {}) }).ok;
|
|
242
313
|
if (!entregue)
|
|
243
314
|
throw new Error(`transporte não confirmou ${oQue}; novidade preservada`);
|
|
244
315
|
enviadas++;
|
|
@@ -260,14 +331,22 @@ function varrerPulse(opcoes) {
|
|
|
260
331
|
// I-50: pergunta nova sai na hora; o resto (status, decisoes informadas) espera a janela da
|
|
261
332
|
// cadencia do dono, e a novidade que esperou continua nao vista ate sair.
|
|
262
333
|
const noPrazo = !opcoes.comCadencia || (0, pulse_cadencia_1.janelaAberta)(cadencia, (0, pulse_cadencia_1.lerUltimoResumo)(opcoes.raiz, dir), quando);
|
|
263
|
-
const informacaoNova = novas > 0 || decisoesNovas.length > 0 || paradosNovos.length > 0;
|
|
264
|
-
|
|
265
|
-
|
|
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)) {
|
|
266
339
|
const guardadas = anterior ? fila.candidatos.filter(c => anterior.candidatos.some(a => a.thread === c.thread)).length : 0;
|
|
267
340
|
const resumo = (0, hitl_resumo_1.resumirHitl)(itens, { quando, janelaMin, prontas: fila.candidatos.length, acumuladas: guardadas,
|
|
268
341
|
consertos: fila.consertos, atoDoItem: i => fila.atos.get(`${i.thread}|${i.fase}`),
|
|
269
342
|
decisoes: decisoesNovas, acimaDoLimiar: pulse.acimaDoLimiar ?? [], outrasMaquinas: outras, paradosNoCondutor: parados,
|
|
270
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,
|
|
271
350
|
// RM-057 (fatia 3): a linha so acompanha o resumo que ja sai; nao e novidade nem fura a cadencia.
|
|
272
351
|
...(pulse.hitlDeConducao ? { hitlDeConducao: pulse.hitlDeConducao } : {}) });
|
|
273
352
|
// Pedir licenca para mandar zero perguntas era o defeito: sem pergunta, nao ha codigo.
|
|
@@ -289,6 +368,19 @@ function varrerPulse(opcoes) {
|
|
|
289
368
|
vistas[k] = 'informada';
|
|
290
369
|
for (const p of parados)
|
|
291
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
|
+
}
|
|
292
384
|
(0, pulse_cadencia_1.gravarUltimoResumo)(opcoes.raiz, quando, dir);
|
|
293
385
|
}
|
|
294
386
|
gravarCache(cache, vistas);
|
|
@@ -303,6 +395,21 @@ function varrerPulse(opcoes) {
|
|
|
303
395
|
trava.liberar();
|
|
304
396
|
}
|
|
305
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
|
+
}
|
|
306
413
|
/**
|
|
307
414
|
* RM-053: a entrega ao dono vem primeiro, e a rede depois, mesmo quando a varredura falha. M4 do
|
|
308
415
|
* CHECK 1: antes da entrega, uma forja lenta atrasava o HITL em minutos. S13 da revisao 2: sem o
|
|
@@ -352,13 +459,22 @@ if (require.main === module) {
|
|
|
352
459
|
// RM-053 (D9): depois da entrega ao dono, a mesma batida publica o retrato desta maquina na rede da
|
|
353
460
|
// pessoa (so membro, uma tentativa a cada 14 min, retrato igual so de hora em hora).
|
|
354
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.
|
|
355
466
|
try {
|
|
356
|
-
|
|
357
|
-
if (rede)
|
|
358
|
-
(0, rede_adesao_1.registrarNaRede)({ ...rede, origem: 'pulse' });
|
|
467
|
+
agirDepoisDaEntrega(carregado);
|
|
359
468
|
}
|
|
360
|
-
|
|
361
|
-
|
|
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
|
+
}
|
|
362
478
|
}
|
|
363
479
|
});
|
|
364
480
|
console.log(JSON.stringify(r));
|