@orkastery/cli 0.5.6 → 0.6.1
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 +123 -9
- 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/adapters/grok-events.js +227 -0
- package/dist/adapters/grok-mcp-servidor.js +612 -0
- package/dist/adapters/grok-mcp.js +178 -0
- package/dist/adapters/grok.js +686 -0
- package/dist/agendador-cpu.js +92 -0
- 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 +23 -10
- 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 +528 -0
- package/dist/check-modo.js +41 -0
- package/dist/check-paralelo.js +238 -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 +89 -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 +89 -89
- package/dist/doctor-forja.js +343 -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 +154 -54
- 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 +33 -21
- 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 +20 -1
- package/dist/hosts.js +104 -134
- package/dist/index.js +864 -554
- package/dist/indice-vetorial.js +14 -12
- package/dist/init.js +11 -2
- package/dist/integracoes-locais.js +4 -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 +228 -0
- package/dist/locale-adapter.js +291 -0
- package/dist/locale-ajuda.js +86 -10
- 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 +288 -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 +183 -6
- package/dist/locale-security-scan.js +69 -0
- package/dist/locale-setup.js +192 -0
- package/dist/locale-ship.js +177 -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 +293 -12
- 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 +90 -15
- package/dist/mcp-noctum.js +101 -0
- package/dist/mcp-server.js +116 -22
- 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/merge-da-entrega.js +85 -0
- package/dist/modos-migracao.js +8 -6
- package/dist/modos.js +17 -18
- package/dist/network-roadmap.js +94 -54
- package/dist/noctum-aceite.js +929 -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 +539 -0
- package/dist/noctum-coordenacao.js +1225 -0
- package/dist/noctum-entrega.js +1217 -0
- package/dist/noctum-envelope.js +253 -17
- package/dist/noctum-execucao.js +100 -24
- package/dist/noctum-fechamento.js +416 -0
- package/dist/noctum-fila.js +49 -10
- package/dist/noctum-guarda.js +333 -0
- package/dist/noctum-integracao.js +507 -0
- package/dist/noctum-maquinas.js +387 -0
- package/dist/noctum-medicao.js +450 -0
- package/dist/noctum-modo.js +390 -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 +594 -0
- package/dist/noctum-rede.js +102 -0
- package/dist/noctum-registro.js +215 -0
- package/dist/noctum-relatorio.js +861 -0
- package/dist/noctum-resposta.js +207 -0
- package/dist/noctum-retomada-rede.js +71 -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 +679 -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 +160 -139
- package/dist/phase.js +96 -42
- package/dist/policies.js +33 -0
- package/dist/postura-local.js +11 -6
- package/dist/preflight.js +2 -1
- 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 +13 -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 +326 -78
- package/dist/roadmap-reservas.js +32 -32
- package/dist/runtime-ambiente.js +5 -0
- package/dist/runtime-context.js +279 -85
- package/dist/runtime-escada.js +429 -0
- package/dist/runtime-profiles.js +130 -63
- package/dist/runtimes.js +42 -5
- package/dist/saida-segura.js +3 -2
- package/dist/security-scan/agil.js +366 -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 +196 -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-grok.js +425 -0
- package/dist/session-watcher.js +174 -13
- package/dist/sessoes-contas.js +42 -5
- package/dist/sessoes-inventario.js +1 -1
- package/dist/sessoes.js +25 -23
- package/dist/setup.js +67 -66
- 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 +500 -0
- package/dist/verify.js +491 -32
- 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 +10 -5
- 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
|
@@ -0,0 +1,333 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
|
|
3
|
+
if (k2 === undefined) k2 = k;
|
|
4
|
+
var desc = Object.getOwnPropertyDescriptor(m, k);
|
|
5
|
+
if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) {
|
|
6
|
+
desc = { enumerable: true, get: function() { return m[k]; } };
|
|
7
|
+
}
|
|
8
|
+
Object.defineProperty(o, k2, desc);
|
|
9
|
+
}) : (function(o, m, k, k2) {
|
|
10
|
+
if (k2 === undefined) k2 = k;
|
|
11
|
+
o[k2] = m[k];
|
|
12
|
+
}));
|
|
13
|
+
var __setModuleDefault = (this && this.__setModuleDefault) || (Object.create ? (function(o, v) {
|
|
14
|
+
Object.defineProperty(o, "default", { enumerable: true, value: v });
|
|
15
|
+
}) : function(o, v) {
|
|
16
|
+
o["default"] = v;
|
|
17
|
+
});
|
|
18
|
+
var __importStar = (this && this.__importStar) || (function () {
|
|
19
|
+
var ownKeys = function(o) {
|
|
20
|
+
ownKeys = Object.getOwnPropertyNames || function (o) {
|
|
21
|
+
var ar = [];
|
|
22
|
+
for (var k in o) if (Object.prototype.hasOwnProperty.call(o, k)) ar[ar.length] = k;
|
|
23
|
+
return ar;
|
|
24
|
+
};
|
|
25
|
+
return ownKeys(o);
|
|
26
|
+
};
|
|
27
|
+
return function (mod) {
|
|
28
|
+
if (mod && mod.__esModule) return mod;
|
|
29
|
+
var result = {};
|
|
30
|
+
if (mod != null) for (var k = ownKeys(mod), i = 0; i < k.length; i++) if (k[i] !== "default") __createBinding(result, mod, k[i]);
|
|
31
|
+
__setModuleDefault(result, mod);
|
|
32
|
+
return result;
|
|
33
|
+
};
|
|
34
|
+
})();
|
|
35
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
36
|
+
exports.pedidoDoArco = exports.linhaDoArco = exports.MOTIVO_DA_REDE_ILEGIVEL = exports.MOTIVO_DO_ARCO_ILEGIVEL = exports.MOTIVO_DA_GUARDA = void 0;
|
|
37
|
+
exports.lerArcosDaRaiz = lerArcosDaRaiz;
|
|
38
|
+
exports.arcoDosEventos = arcoDosEventos;
|
|
39
|
+
exports.arcoDoUltimoDespacho = arcoDoUltimoDespacho;
|
|
40
|
+
exports.vinculosDaThread = vinculosDaThread;
|
|
41
|
+
exports.guardaOsCaminhosManuais = guardaOsCaminhosManuais;
|
|
42
|
+
exports.guardaDaThread = guardaDaThread;
|
|
43
|
+
exports.arcoDoPasso = arcoDoPasso;
|
|
44
|
+
/**
|
|
45
|
+
* RM-058, integração das fatias N1 a N6 (T1.1 da ork-rm058integra, D3 e D5): quem é thread de um arco #Noctum.
|
|
46
|
+
*
|
|
47
|
+
* O arco entrega as threads dele pelo passo da entrega da N5: a revisão independente, o verify no SHA, o envelope conferido
|
|
48
|
+
* antes de cada efeito e o MASTER por omissão. Os caminhos de fora do arco não sabiam disso: a sessão do bloco chegava ao
|
|
49
|
+
* SHIP e mesclava pelo `ork ship`, sem a revisão, e nada impedia o `ork ship registrar-pr` de gravar a entrega dela.
|
|
50
|
+
*
|
|
51
|
+
* A regra (D3) mora aqui, e os chamadores só leem as funções. É thread de um arco a que está:
|
|
52
|
+
*
|
|
53
|
+
* - na lista do envelope vigente ou na da proposta que espera o dono no prazo: a thread fixada no trabalho, ou a que casa
|
|
54
|
+
* com o item e o sha256 do pedido do trabalho (a regra da fila e da supervisão);
|
|
55
|
+
* - no log de despachos do arco (a thread reservada e a que o despacho abriu);
|
|
56
|
+
* - ou cujo último `phase_dispatch` tem a correlação `noctum:<arco>`.
|
|
57
|
+
*
|
|
58
|
+
* Nos caminhos manuais (`ork ship`, o `ork_ship` do MCP, `ork ship publicar`, `ork ship registrar-pr` e
|
|
59
|
+
* `ork conducao atualizar`), guardam o arco agendado, o vigente e o proposto com a proposta no prazo. O proposto sem
|
|
60
|
+
* proposta no prazo (o nunca autorizado fica `proposto` para sempre), o expirado, o revogado e o encerrado não guardam. O
|
|
61
|
+
* arco que não se lê recusa só a thread cujo último despacho tem a correlação dele (`noctum.guarda.arco-ilegivel`); as
|
|
62
|
+
* outras seguem. Sem nenhum arco nesta raiz, nada é lido além da pasta dos arcos: quem não usa o #Noctum não paga nada.
|
|
63
|
+
*
|
|
64
|
+
* Nos caminhos automáticos (T1.2, D4), a batida, a varredura, a Sentinela e a máquina ociosa leem o campo `arco` do passo
|
|
65
|
+
* do condutor (`arcoDoPasso`): a guarda segura toda ação; a retenção, a do arco terminal que despachou a thread por último,
|
|
66
|
+
* segura o despacho, a retomada e o merge até um despacho fora do arco ou um arco novo, autorizado depois, que a liste.
|
|
67
|
+
*/
|
|
68
|
+
const fs = __importStar(require("node:fs"));
|
|
69
|
+
const path = __importStar(require("node:path"));
|
|
70
|
+
const estado_thread_1 = require("./estado-thread");
|
|
71
|
+
const ledger_1 = require("./ledger");
|
|
72
|
+
const locale_1 = require("./locale");
|
|
73
|
+
const manifest_1 = require("./manifest");
|
|
74
|
+
const noctum_arco_1 = require("./noctum-arco");
|
|
75
|
+
const noctum_sessoes_em_voo_1 = require("./noctum-sessoes-em-voo");
|
|
76
|
+
const noctum_envelope_1 = require("./noctum-envelope");
|
|
77
|
+
const thread_1 = require("./thread");
|
|
78
|
+
exports.MOTIVO_DA_GUARDA = 'noctum.guarda.thread-do-arco';
|
|
79
|
+
exports.MOTIVO_DO_ARCO_ILEGIVEL = 'noctum.guarda.arco-ilegivel';
|
|
80
|
+
exports.MOTIVO_DA_REDE_ILEGIVEL = 'noctum.guarda.rede-ilegivel';
|
|
81
|
+
/** A recusa com os três textos do catálogo, cada um remontável no locale de quem imprime. */
|
|
82
|
+
function recusa(motivo, thread, arco, situacao, origem, detalhe, correcao) {
|
|
83
|
+
return { motivo, thread, arco, situacao, origem, detalhe: (0, locale_1.textoDoCatalogo)(detalhe), correcao: (0, locale_1.textoDoCatalogo)(correcao),
|
|
84
|
+
texto: (0, locale_1.textoDoCatalogo)((m) => `${detalhe(m)}; ${correcao(m)}`) };
|
|
85
|
+
}
|
|
86
|
+
/** Os nomes das pastas de arco desta raiz de estado (o `listarArcos` do modo, sem puxar o passo, a entrega e o relatório). */
|
|
87
|
+
function nomesDosArcos(raiz) {
|
|
88
|
+
try {
|
|
89
|
+
return fs.readdirSync(path.join((0, estado_thread_1.raizDoEstado)(raiz), '.orkastery', 'noctum', 'arcos')).filter(n => noctum_envelope_1.ID_DO_ARCO.test(n)).sort();
|
|
90
|
+
}
|
|
91
|
+
catch {
|
|
92
|
+
return [];
|
|
93
|
+
}
|
|
94
|
+
}
|
|
95
|
+
/** Lê cada arco desta raiz uma vez. O arco que não se lê fica com o motivo, e os outros seguem. */
|
|
96
|
+
function lerArcosDaRaiz(raiz, quando = new Date().toISOString()) {
|
|
97
|
+
const arcos = { quando, lidos: new Map(), ilegiveis: new Map(), redes: new Map(), redesIlegiveis: new Map() };
|
|
98
|
+
for (const arco of nomesDosArcos(raiz)) {
|
|
99
|
+
try {
|
|
100
|
+
const lido = (0, noctum_arco_1.lerArcoComProposta)(raiz, arco, quando);
|
|
101
|
+
if (lido)
|
|
102
|
+
arcos.lidos.set(arco, lido);
|
|
103
|
+
}
|
|
104
|
+
catch (e) {
|
|
105
|
+
arcos.ilegiveis.set(arco, e instanceof noctum_envelope_1.RecusaDoArco ? e.motivo : (e instanceof Error ? e.message : String(e)).split('\n')[0].slice(0, 160));
|
|
106
|
+
}
|
|
107
|
+
}
|
|
108
|
+
return arcos;
|
|
109
|
+
}
|
|
110
|
+
/** O arco da correlação `noctum:<arco>` do último `phase_dispatch` entre os eventos dados; `null` sem ele. */
|
|
111
|
+
function arcoDosEventos(eventos) {
|
|
112
|
+
for (let i = eventos.length - 1; i >= 0; i--) {
|
|
113
|
+
if (eventos[i].tipo !== ledger_1.TIPOS_DE_EVENTO.faseDespachada)
|
|
114
|
+
continue;
|
|
115
|
+
const c = eventos[i].correlacao;
|
|
116
|
+
const arco = typeof c === 'string' && c.startsWith('noctum:') ? c.slice('noctum:'.length) : '';
|
|
117
|
+
return noctum_envelope_1.ID_DO_ARCO.test(arco) ? arco : null;
|
|
118
|
+
}
|
|
119
|
+
return null;
|
|
120
|
+
}
|
|
121
|
+
/** O arco da correlação `noctum:<arco>` do último `phase_dispatch` da thread; `null` sem despacho ou com outra correlação. */
|
|
122
|
+
function arcoDoUltimoDespacho(raiz, thread) {
|
|
123
|
+
try {
|
|
124
|
+
return arcoDosEventos((0, ledger_1.lerLedger)((0, thread_1.dirThread)(raiz, thread)));
|
|
125
|
+
}
|
|
126
|
+
catch {
|
|
127
|
+
return null;
|
|
128
|
+
}
|
|
129
|
+
}
|
|
130
|
+
/** A thread está na lista? A fixada no trabalho, ou a que casa com o item e o sha256 do pedido dele. */
|
|
131
|
+
function naLista(conteudo, thread, dados) {
|
|
132
|
+
return !!trabalhoNaLista(conteudo, thread, dados);
|
|
133
|
+
}
|
|
134
|
+
/** O trabalho da thread na lista, pela fixação ou pelo pedido, quando existe. */
|
|
135
|
+
function trabalhoNaLista(conteudo, thread, dados) {
|
|
136
|
+
return conteudo?.trabalhos?.find(w => w.thread !== undefined ? w.thread === thread
|
|
137
|
+
: w.pedido !== undefined && dados().roadmap === w.item && dados().pedido === (0, noctum_envelope_1.shaDoPedido)(w.pedido)) ?? null;
|
|
138
|
+
}
|
|
139
|
+
/** O id do trabalho que liga esta thread ao arco, na lista vigente ou no despacho mais recente. */
|
|
140
|
+
function trabalhoDaThread(estado, thread, dados) {
|
|
141
|
+
const listado = trabalhoNaLista(estado.conteudo, thread, dados);
|
|
142
|
+
if (listado)
|
|
143
|
+
return listado.id;
|
|
144
|
+
for (let i = estado.despachos.length - 1; i >= 0; i--) {
|
|
145
|
+
const d = estado.despachos[i];
|
|
146
|
+
if (d.thread === thread || d.threadDespachada === thread)
|
|
147
|
+
return d.trabalho;
|
|
148
|
+
}
|
|
149
|
+
return null;
|
|
150
|
+
}
|
|
151
|
+
/** A rede do arco, uma vez por `ArcosDaRaiz`; falha inesperada também fica cacheada e falha fechada. */
|
|
152
|
+
function redeDoArco(arco, arcos, ler) {
|
|
153
|
+
const pronta = arcos.redes.get(arco);
|
|
154
|
+
if (pronta)
|
|
155
|
+
return pronta;
|
|
156
|
+
const falha = arcos.redesIlegiveis.get(arco);
|
|
157
|
+
if (falha !== undefined)
|
|
158
|
+
return falha;
|
|
159
|
+
try {
|
|
160
|
+
const rede = ler(arco);
|
|
161
|
+
arcos.redes.set(arco, rede);
|
|
162
|
+
return rede;
|
|
163
|
+
}
|
|
164
|
+
catch (e) {
|
|
165
|
+
const detalhe = (e instanceof Error ? e.message : String(e)).split('\n')[0].slice(0, 200);
|
|
166
|
+
arcos.redesIlegiveis.set(arco, detalhe);
|
|
167
|
+
return detalhe;
|
|
168
|
+
}
|
|
169
|
+
}
|
|
170
|
+
/**
|
|
171
|
+
* A fila carrega a Sentinela, que carrega esta guarda. Resolver a projeção só quando uma thread de arco v3 encerrado
|
|
172
|
+
* realmente precisar dela evita o ciclo de inicialização fila -> guarda -> rede -> coordenação -> fila.
|
|
173
|
+
*/
|
|
174
|
+
function lerRedePadrao(raiz, arco, quando) {
|
|
175
|
+
const { lerRede } = require('./noctum-rede');
|
|
176
|
+
return lerRede((0, manifest_1.exigirManifesto)(raiz), arco, { quando });
|
|
177
|
+
}
|
|
178
|
+
/**
|
|
179
|
+
* Os vínculos da thread com os arcos lidos, um por arco, na ordem das origens: a lista do envelope vigente, a da proposta
|
|
180
|
+
* no prazo, o log de despachos e a correlação do último despacho (`ultimo`, quando o chamador já a leu).
|
|
181
|
+
*/
|
|
182
|
+
function vinculosDaThread(raiz, arcos, thread, ultimo) {
|
|
183
|
+
if (!arcos.lidos.size)
|
|
184
|
+
return [];
|
|
185
|
+
const doUltimo = ultimo === undefined ? arcoDoUltimoDespacho(raiz, thread) : ultimo;
|
|
186
|
+
let lidos = null;
|
|
187
|
+
const dados = () => {
|
|
188
|
+
if (!lidos) {
|
|
189
|
+
try {
|
|
190
|
+
const t = (0, thread_1.lerThread)(raiz, thread);
|
|
191
|
+
lidos = { roadmap: t.roadmap ?? null, pedido: t.pedido?.sha256 ?? null };
|
|
192
|
+
}
|
|
193
|
+
catch {
|
|
194
|
+
lidos = { roadmap: null, pedido: null };
|
|
195
|
+
}
|
|
196
|
+
}
|
|
197
|
+
return lidos;
|
|
198
|
+
};
|
|
199
|
+
const vinculos = [];
|
|
200
|
+
for (const [arco, { estado, proposta }] of arcos.lidos) {
|
|
201
|
+
const origem = naLista(estado.conteudo, thread, dados) ? 'envelope'
|
|
202
|
+
: naLista(proposta, thread, dados) ? 'proposta'
|
|
203
|
+
: estado.despachos.some(d => d.thread === thread || d.threadDespachada === thread) ? 'despacho'
|
|
204
|
+
: doUltimo === arco ? 'correlacao' : null;
|
|
205
|
+
if (origem)
|
|
206
|
+
vinculos.push({ arco, situacao: estado.situacao, origem });
|
|
207
|
+
}
|
|
208
|
+
return vinculos;
|
|
209
|
+
}
|
|
210
|
+
/** D3: guardam os caminhos manuais o arco agendado, o vigente e o proposto pela proposta no prazo (a única que dá vínculo). */
|
|
211
|
+
function guardaOsCaminhosManuais(v) {
|
|
212
|
+
return v.situacao === 'agendado' || v.situacao === 'vigente' || (v.situacao === 'proposto' && v.origem === 'proposta');
|
|
213
|
+
}
|
|
214
|
+
/**
|
|
215
|
+
* A guarda dos caminhos manuais: a recusa tipada quando a thread é trabalho de um arco que a guarda agora, ou `null`. O
|
|
216
|
+
* `doArco` é o arco que entrega pelo próprio passo (o da entrega da N5 publica com ele): a guarda dele não o recusa, e a de
|
|
217
|
+
* outro arco recusa. `arcos` reaproveita a leitura de quem confere várias threads de uma vez (o `registrar-pr --todas`).
|
|
218
|
+
*/
|
|
219
|
+
function guardaDaThread(raiz, thread, quando = new Date().toISOString(), opcoes = {}) {
|
|
220
|
+
const arcos = opcoes.arcos ?? lerArcosDaRaiz(raiz, quando);
|
|
221
|
+
if (!arcos.lidos.size && !arcos.ilegiveis.size)
|
|
222
|
+
return null;
|
|
223
|
+
const ultimo = arcoDoUltimoDespacho(raiz, thread);
|
|
224
|
+
const ilegivel = ultimo !== null && ultimo !== opcoes.doArco ? arcos.ilegiveis.get(ultimo) : undefined;
|
|
225
|
+
if (ultimo !== null && ilegivel !== undefined) {
|
|
226
|
+
return recusa(exports.MOTIVO_DO_ARCO_ILEGIVEL, thread, ultimo, null, 'correlacao', (m) => m.ship.guarda.arcoIlegivel(thread, ultimo, ilegivel), (m) => m.ship.guarda.arcoIlegivelCorrecao(ultimo));
|
|
227
|
+
}
|
|
228
|
+
const vinculos = vinculosDaThread(raiz, arcos, thread, ultimo);
|
|
229
|
+
const v = vinculos.find(x => x.arco !== opcoes.doArco && guardaOsCaminhosManuais(x));
|
|
230
|
+
if (!v) {
|
|
231
|
+
let dadosLidos = null;
|
|
232
|
+
const dados = () => {
|
|
233
|
+
if (dadosLidos)
|
|
234
|
+
return dadosLidos;
|
|
235
|
+
try {
|
|
236
|
+
const t = (0, thread_1.lerThread)(raiz, thread);
|
|
237
|
+
dadosLidos = { roadmap: t.roadmap ?? null, pedido: t.pedido?.sha256 ?? null };
|
|
238
|
+
}
|
|
239
|
+
catch {
|
|
240
|
+
dadosLidos = { roadmap: null, pedido: null };
|
|
241
|
+
}
|
|
242
|
+
return dadosLidos;
|
|
243
|
+
};
|
|
244
|
+
// Num v3 encerrado localmente, o trabalho pode seguir em outra máquina. A rede só é lida depois de provar o vínculo,
|
|
245
|
+
// e a leitura fica no `ArcosDaRaiz` para o registrar-pr --todas não consultar o mesmo arco de novo.
|
|
246
|
+
for (const t of vinculos.filter(x => x.arco !== opcoes.doArco && x.situacao === 'encerrado')) {
|
|
247
|
+
const lido = arcos.lidos.get(t.arco);
|
|
248
|
+
if (!lido?.estado.conteudo || !(0, noctum_envelope_1.envelopeMultimaquina)(lido.estado.conteudo))
|
|
249
|
+
continue;
|
|
250
|
+
const trabalho = trabalhoDaThread(lido.estado, thread, dados);
|
|
251
|
+
if (!trabalho)
|
|
252
|
+
continue;
|
|
253
|
+
const rede = redeDoArco(t.arco, arcos, opcoes.lerRede ?? ((arco) => lerRedePadrao(raiz, arco, arcos.quando)));
|
|
254
|
+
if (typeof rede === 'string' || rede.lacuna) {
|
|
255
|
+
const falha = typeof rede === 'string' ? rede : `${rede.lacuna.motivo}: ${rede.lacuna.detalhe}`;
|
|
256
|
+
return recusa(exports.MOTIVO_DA_REDE_ILEGIVEL, thread, t.arco, t.situacao, 'rede', (m) => m.ship.guarda.redeIlegivel(thread, t.arco, falha), (m) => m.ship.guarda.redeIlegivelCorrecao(t.arco));
|
|
257
|
+
}
|
|
258
|
+
const naRede = rede.trabalhos.find(x => x.id === trabalho);
|
|
259
|
+
if (!rede.revogada && naRede && naRede.estado !== 'entregue' && naRede.estado !== 'encerrado') {
|
|
260
|
+
return recusa(exports.MOTIVO_DA_GUARDA, thread, t.arco, t.situacao, 'rede', (m) => m.ship.guarda.redeDoArco(thread, t.arco, naRede.estado, trabalho), (m) => m.ship.guarda.redeDoArcoCorrecao(t.arco));
|
|
261
|
+
}
|
|
262
|
+
}
|
|
263
|
+
// A2 do CHECK: no arco que terminou (revogado, expirado ou encerrado), a sessão que ele despachou e que ainda conduz a
|
|
264
|
+
// thread não entrega fora dele; sem sessão dele em voo, a thread se entrega à mão, como antes.
|
|
265
|
+
for (const t of vinculos.filter(x => x.arco !== opcoes.doArco && TERMINAIS.includes(x.situacao))) {
|
|
266
|
+
const lido = arcos.lidos.get(t.arco);
|
|
267
|
+
const sessao = lido ? sessaoDoArcoEmVoo(raiz, thread, lido.estado) : null;
|
|
268
|
+
if (!sessao)
|
|
269
|
+
continue;
|
|
270
|
+
if ('seq' in sessao) {
|
|
271
|
+
return recusa(exports.MOTIVO_DA_GUARDA, thread, t.arco, t.situacao, t.origem, (m) => m.ship.guarda.reservaDoArco(thread, t.arco, m.ship.guarda.situacoes[t.situacao] ?? t.situacao, sessao.seq), (m) => m.ship.guarda.reservaDoArcoCorrecao(t.arco));
|
|
272
|
+
}
|
|
273
|
+
return recusa(exports.MOTIVO_DA_GUARDA, thread, t.arco, t.situacao, t.origem, (m) => m.ship.guarda.sessaoDoArco(thread, t.arco, m.ship.guarda.situacoes[t.situacao] ?? t.situacao, sessao.sessionId), (m) => m.ship.guarda.sessaoDoArcoCorrecao(t.arco));
|
|
274
|
+
}
|
|
275
|
+
return null;
|
|
276
|
+
}
|
|
277
|
+
return recusa(exports.MOTIVO_DA_GUARDA, thread, v.arco, v.situacao, v.origem, (m) => m.ship.guarda.doArco(thread, v.arco, m.ship.guarda.situacoes[v.situacao] ?? v.situacao, m.ship.guarda.origens[v.origem] ?? v.origem), (m) => m.ship.guarda.doArcoCorrecao(v.arco));
|
|
278
|
+
}
|
|
279
|
+
/** As situações do arco que já terminou: nada novo sai dele, e a retenção vale (D4). */
|
|
280
|
+
const TERMINAIS = ['expirado', 'revogado', 'encerrado'];
|
|
281
|
+
/**
|
|
282
|
+
* A2 do CHECK: a sessão que o arco despachou nesta thread e que ainda não acabou, ou `null`. É a conta do fechamento
|
|
283
|
+
* (`sessoesEmVooDoArco`): a sessão concluída sem resultado, morte nem superação no ledger, e a da reserva pendente, que o
|
|
284
|
+
* runtime abriu antes de o condutor morrer (N4 do CHECK 2), com o id que ele disse ou, sem id, a reserva (M3 do CHECK 3).
|
|
285
|
+
* O ledger que não se lê não prova o fim: a guarda falha fechada. Só os despachos desta thread entram, e a reserva pendente
|
|
286
|
+
* ainda sem thread gravada (M2 do CHECK 3): a guarda não lê os ledgers do arco inteiro a cada consulta.
|
|
287
|
+
*/
|
|
288
|
+
function sessaoDoArcoEmVoo(raiz, thread, estado) {
|
|
289
|
+
const despachos = estado.despachos.filter(d => (d.threadDespachada ?? d.thread) === thread || (d.desfecho === 'pendente' && !(d.threadDespachada ?? d.thread)));
|
|
290
|
+
const s = (0, noctum_sessoes_em_voo_1.sessoesEmVooDoArco)(raiz, { ...estado, despachos }).find(x => x.thread === thread);
|
|
291
|
+
return !s ? null : s.sessionId ? { sessionId: s.sessionId } : { seq: s.seq };
|
|
292
|
+
}
|
|
293
|
+
/**
|
|
294
|
+
* O arco que segura ou retém a thread nos caminhos automáticos, ou `null`. `eventos` é o ledger da thread que o chamador
|
|
295
|
+
* já leu (o passo do condutor lê todos), e `arcos` é a leitura única desta raiz.
|
|
296
|
+
*/
|
|
297
|
+
function arcoDoPasso(raiz, arcos, thread, eventos) {
|
|
298
|
+
if (!arcos.lidos.size && !arcos.ilegiveis.size)
|
|
299
|
+
return null;
|
|
300
|
+
const ultimo = arcoDosEventos(eventos);
|
|
301
|
+
const ilegivel = ultimo === null ? undefined : arcos.ilegiveis.get(ultimo);
|
|
302
|
+
if (ultimo !== null && ilegivel !== undefined) {
|
|
303
|
+
return { arco: ultimo, situacao: null, efeito: 'guarda', motivo: exports.MOTIVO_DO_ARCO_ILEGIVEL,
|
|
304
|
+
detalhe: (0, locale_1.textoDoCatalogo)((m) => m.ship.guarda.arcoIlegivel(thread, ultimo, ilegivel)) };
|
|
305
|
+
}
|
|
306
|
+
const vinculos = vinculosDaThread(raiz, arcos, thread, ultimo);
|
|
307
|
+
const g = vinculos.find(guardaOsCaminhosManuais);
|
|
308
|
+
if (g) {
|
|
309
|
+
return { arco: g.arco, situacao: g.situacao, efeito: 'guarda', motivo: exports.MOTIVO_DA_GUARDA,
|
|
310
|
+
detalhe: (0, locale_1.textoDoCatalogo)((m) => m.ship.guarda.doArco(thread, g.arco, m.ship.guarda.situacoes[g.situacao] ?? g.situacao, m.ship.guarda.origens[g.origem] ?? g.origem)) };
|
|
311
|
+
}
|
|
312
|
+
const doUltimo = ultimo === null ? undefined : arcos.lidos.get(ultimo);
|
|
313
|
+
if (ultimo === null || !doUltimo || !TERMINAIS.includes(doUltimo.estado.situacao))
|
|
314
|
+
return null;
|
|
315
|
+
// Um arco novo, autorizado depois deste, que lista a thread (na lista dele ou no log de despachos) acaba a retenção.
|
|
316
|
+
const desde = Date.parse(doUltimo.estado.autorizadoPor?.recebidoEm ?? '');
|
|
317
|
+
const novo = vinculos.some(v => v.arco !== ultimo && (v.origem === 'envelope' || v.origem === 'despacho') &&
|
|
318
|
+
Date.parse(arcos.lidos.get(v.arco)?.estado.autorizadoPor?.recebidoEm ?? '') > desde);
|
|
319
|
+
if (novo)
|
|
320
|
+
return null;
|
|
321
|
+
const situacao = doUltimo.estado.situacao;
|
|
322
|
+
return { arco: ultimo, situacao, efeito: 'retencao', motivo: exports.MOTIVO_DA_GUARDA,
|
|
323
|
+
detalhe: (0, locale_1.textoDoCatalogo)((m) => m.ship.guarda.retencao(thread, ultimo, m.ship.guarda.situacoes[situacao] ?? situacao)) };
|
|
324
|
+
}
|
|
325
|
+
/**
|
|
326
|
+
* D5: a linha que o passo do arco anexa ao pedido de toda sessão que ele despacha. Fixa e determinística: o mesmo arco dá
|
|
327
|
+
* o mesmo texto em toda chamada, e o `rodarFase` segue idempotente para a mesma fase e o mesmo prompt.
|
|
328
|
+
*/
|
|
329
|
+
const linhaDoArco = (arco) => `Esta thread é trabalho do arco \`${arco}\` do #Noctum: o SHIP e o MASTER dela são do arco; não faça push, não abra PR e não mescle.`;
|
|
330
|
+
exports.linhaDoArco = linhaDoArco;
|
|
331
|
+
/** O pedido da sessão do arco: o do dono e, no fim, a linha do arco. */
|
|
332
|
+
const pedidoDoArco = (pedido, arco) => `${pedido.trimEnd()}\n\n${(0, exports.linhaDoArco)(arco)}`;
|
|
333
|
+
exports.pedidoDoArco = pedidoDoArco;
|