@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,207 @@
|
|
|
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.perguntasDosArcos = perguntasDosArcos;
|
|
37
|
+
exports.perguntasPendentes = perguntasPendentes;
|
|
38
|
+
exports.perguntasPorCodigo = perguntasPorCodigo;
|
|
39
|
+
exports.perguntasComRespostaSemEfeito = perguntasComRespostaSemEfeito;
|
|
40
|
+
exports.rotuloDaPergunta = rotuloDaPergunta;
|
|
41
|
+
exports.responderPerguntaDoArco = responderPerguntaDoArco;
|
|
42
|
+
/**
|
|
43
|
+
* RM-057 (resposta curta, ork-rm057respost): a resposta curta do dono contra as perguntas dos arcos #Noctum.
|
|
44
|
+
*
|
|
45
|
+
* Quem chega aqui já provou a origem: o receptor do pulse conferiu o envelope assinado do Telegram, e o ingresso do
|
|
46
|
+
* terminal conferiu a origem da sessão. Este módulo só acha a pergunta (pelo código, ou a única que cabe), lê a escolha
|
|
47
|
+
* pela letra ou pela palavra do vocabulário fechado, chama o ato do arco com a prova e devolve a frase ao dono. Ele nunca
|
|
48
|
+
* escolhe pelo dono: ambígua, fora do vocabulário ou sem pergunta, a resposta volta como pergunta e nada é gravado.
|
|
49
|
+
*
|
|
50
|
+
* As alternativas b (adiar) e c (mudar algo) não gravam nada no arco (D13): a pergunta segue pendente até o prazo. Elas
|
|
51
|
+
* ficam só num registro à parte (GO-FIX 1, achado 3): depois de "b" ou "c", a palavra solta não responde mais àquela
|
|
52
|
+
* pergunta no terminal, e só o código dela vale.
|
|
53
|
+
*/
|
|
54
|
+
const fs = __importStar(require("node:fs"));
|
|
55
|
+
const path = __importStar(require("node:path"));
|
|
56
|
+
const estado_thread_1 = require("./estado-thread");
|
|
57
|
+
const horario_1 = require("./horario");
|
|
58
|
+
const noctum_arco_1 = require("./noctum-arco");
|
|
59
|
+
const noctum_envelope_1 = require("./noctum-envelope");
|
|
60
|
+
const noctum_pergunta_1 = require("./noctum-pergunta");
|
|
61
|
+
/** Os arcos desta raiz de estado, pelos nomes das pastas. */
|
|
62
|
+
function arcosDaRaiz(raiz) {
|
|
63
|
+
try {
|
|
64
|
+
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();
|
|
65
|
+
}
|
|
66
|
+
catch {
|
|
67
|
+
return [];
|
|
68
|
+
}
|
|
69
|
+
}
|
|
70
|
+
/** Todas as perguntas de todos os arcos, com a situação de cada uma no instante. Arco que não se lê fica de fora. */
|
|
71
|
+
function perguntasDosArcos(raiz, quando) {
|
|
72
|
+
const todas = [];
|
|
73
|
+
for (const arco of arcosDaRaiz(raiz)) {
|
|
74
|
+
try {
|
|
75
|
+
todas.push(...(0, noctum_arco_1.perguntasDoArco)(raiz, arco, quando));
|
|
76
|
+
}
|
|
77
|
+
catch { /* arco ilegível não responde por pergunta */ }
|
|
78
|
+
}
|
|
79
|
+
return todas;
|
|
80
|
+
}
|
|
81
|
+
/** As perguntas que ainda esperam o dono agora. */
|
|
82
|
+
function perguntasPendentes(raiz, quando) {
|
|
83
|
+
return perguntasDosArcos(raiz, quando).filter(p => p.situacao === 'pendente');
|
|
84
|
+
}
|
|
85
|
+
/** As perguntas com este código, em qualquer situação: a resposta atrasada ouve o porquê, e o código em dois lugares é ambíguo. */
|
|
86
|
+
function perguntasPorCodigo(raiz, codigo, quando) {
|
|
87
|
+
const alvo = codigo.trim().toUpperCase();
|
|
88
|
+
return perguntasDosArcos(raiz, quando).filter(p => p.codigo === alvo);
|
|
89
|
+
}
|
|
90
|
+
const ARQUIVO_SEM_EFEITO = 'respostas-sem-efeito.jsonl';
|
|
91
|
+
/**
|
|
92
|
+
* GO-FIX 1 (achado 3 da ork-rm057respost): as perguntas que já ouviram "b" ou "c" do dono, por qualquer canal. Não é prova
|
|
93
|
+
* nem ato do arco (D13 segue: b e c não gravam nada nele); é a regra de rota que tira a palavra solta do terminal dessas
|
|
94
|
+
* perguntas, para o "ok" dito depois de "adiar" nunca autorizar. `null` quando o registro existe e não se lê: quem lê
|
|
95
|
+
* trata como se todas tivessem ouvido (falha fechada).
|
|
96
|
+
*/
|
|
97
|
+
function perguntasComRespostaSemEfeito(raiz) {
|
|
98
|
+
const arquivo = path.join((0, estado_thread_1.raizDoEstado)(raiz), '.orkastery', 'noctum', ARQUIVO_SEM_EFEITO);
|
|
99
|
+
let bruto;
|
|
100
|
+
try {
|
|
101
|
+
bruto = fs.readFileSync(arquivo, 'utf8');
|
|
102
|
+
}
|
|
103
|
+
catch (e) {
|
|
104
|
+
return e.code === 'ENOENT' ? new Set() : null;
|
|
105
|
+
}
|
|
106
|
+
const codigos = new Set();
|
|
107
|
+
for (const linha of bruto.split('\n').filter(Boolean)) {
|
|
108
|
+
try {
|
|
109
|
+
const v = JSON.parse(linha);
|
|
110
|
+
if (typeof v.codigo === 'string')
|
|
111
|
+
codigos.add(v.codigo);
|
|
112
|
+
}
|
|
113
|
+
catch {
|
|
114
|
+
return null;
|
|
115
|
+
}
|
|
116
|
+
}
|
|
117
|
+
return codigos;
|
|
118
|
+
}
|
|
119
|
+
function registrarSemEfeito(raiz, codigo, letra, canal, quando) {
|
|
120
|
+
const principal = (0, estado_thread_1.raizDoEstado)(raiz);
|
|
121
|
+
(0, estado_thread_1.exigirEstadoSemLink)(principal, ['.orkastery', 'noctum']);
|
|
122
|
+
const dir = path.join(principal, '.orkastery', 'noctum');
|
|
123
|
+
fs.mkdirSync(dir, { recursive: true, mode: 0o700 });
|
|
124
|
+
fs.appendFileSync(path.join(dir, ARQUIVO_SEM_EFEITO), JSON.stringify({ contrato: 'ork.noctum-sem-efeito/v1', codigo, letra, canal, em: quando }) + '\n', { mode: 0o600 });
|
|
125
|
+
}
|
|
126
|
+
/** O rótulo da pergunta para a lista de "qual?": o código e a letra, com o arco e o ato. */
|
|
127
|
+
function rotuloDaPergunta(p) {
|
|
128
|
+
return `${p.codigo} a (arco ${p.arco}: ${p.ato === 'autorizar' ? 'autorizar' : 'revogar'})`;
|
|
129
|
+
}
|
|
130
|
+
const marca = (canal, tipo) => canal === 'telegram' ? (tipo === 'ok' ? '✅ ' : '⚠️ ') : (tipo === 'ok' ? '' : '! ');
|
|
131
|
+
/** A frase de uma recusa tipada do arco, para o dono, sem caminho de máquina e sem mensagem interna crua. */
|
|
132
|
+
function textoDaRecusa(raiz, p, e, o) {
|
|
133
|
+
const aviso = marca(o.canal, 'aviso');
|
|
134
|
+
const nada = p.ato === 'autorizar' ? 'nada foi autorizado' : 'nada foi revogado';
|
|
135
|
+
switch (e.motivo) {
|
|
136
|
+
case 'noctum.efeito.hash-antigo': {
|
|
137
|
+
const agora = (0, noctum_arco_1.perguntasDoArco)(raiz, p.arco, o.quando).find(q => q.situacao === 'pendente' && q.ato === p.ato);
|
|
138
|
+
return `${aviso}A proposta do arco ${p.arco} mudou desde a pergunta ${p.codigo}; ${nada}.` +
|
|
139
|
+
(agora ? ` A pergunta de agora é ${agora.codigo}: responda ${agora.codigo} a para a proposta ${agora.versao}.` : '');
|
|
140
|
+
}
|
|
141
|
+
case 'noctum.envelope.invalido':
|
|
142
|
+
case 'noctum.pergunta.vencida': {
|
|
143
|
+
const venceuAs = (0, horario_1.formatarHora)(p.prazo, { fuso: p.conteudo?.janela.fuso, agora: o.quando });
|
|
144
|
+
return `${aviso}A pergunta ${p.codigo} venceu às ${venceuAs}; ${nada}. ` +
|
|
145
|
+
(p.ato === 'autorizar' ? 'Para seguir, a proposta precisa sair de novo, com outra pergunta.' : 'Para revogar, peça a revogação de novo.');
|
|
146
|
+
}
|
|
147
|
+
case 'noctum.pergunta.substituida':
|
|
148
|
+
return `${aviso}A pergunta ${p.codigo} foi substituída por outra; ${nada}.`;
|
|
149
|
+
case 'noctum.efeito.expirado':
|
|
150
|
+
return `${aviso}O arco ${p.arco} já terminou; ${nada}.`;
|
|
151
|
+
case 'noctum.efeito.encerrado':
|
|
152
|
+
return `${aviso}O arco ${p.arco} está encerrado, e encerrado é terminal; ${nada}.`;
|
|
153
|
+
case 'noctum.efeito.revogado':
|
|
154
|
+
return `${aviso}O arco ${p.arco} foi revogado, e a revogação é terminal; ${nada}.`;
|
|
155
|
+
case 'noctum.origem.sem-prova':
|
|
156
|
+
return `${aviso}Não consegui provar que a resposta a ${p.codigo} veio de você, a tempo; ${nada}. Mande de novo.`;
|
|
157
|
+
default:
|
|
158
|
+
return `${aviso}Não consegui registrar a resposta a ${p.codigo} (${e.motivo}); ${nada}.`;
|
|
159
|
+
}
|
|
160
|
+
}
|
|
161
|
+
/**
|
|
162
|
+
* Responde à pergunta do arco com o trecho que o dono digitou. A prova é montada só depois de a letra ser lida, e o ato
|
|
163
|
+
* (autorizar ou revogar) confere tudo de novo sob o lock do arco: a pergunta de agora, o prazo, a janela e a prova.
|
|
164
|
+
*/
|
|
165
|
+
function responderPerguntaDoArco(raiz, p, trecho, o) {
|
|
166
|
+
const r = (0, noctum_pergunta_1.escolhaDaPergunta)(p, trecho);
|
|
167
|
+
const aviso = marca(o.canal, 'aviso');
|
|
168
|
+
if (r.tipo === 'detalhe')
|
|
169
|
+
return { tipo: 'detalhe', mensagem: (0, noctum_pergunta_1.detalhesDaPergunta)(p) };
|
|
170
|
+
if (r.tipo === 'ambigua' || r.tipo === 'nenhuma') {
|
|
171
|
+
const dito = trecho.tipo === 'intencao' ? trecho.palavra : trecho.tipo === 'letra' ? trecho.letra : String(trecho.numero);
|
|
172
|
+
return { tipo: 'recusada', motivo: r.tipo === 'ambigua' ? 'ambigua' : 'nao-entendida',
|
|
173
|
+
mensagem: `${aviso}${r.tipo === 'ambigua' ? `"${dito}" serve para mais de uma alternativa de ${p.codigo}` : `Não entendi "${dito}" para ${p.codigo}`}; ` +
|
|
174
|
+
`nada foi registrado. Responda com uma destas: ${(0, noctum_pergunta_1.opcoesDaPergunta)(p)}.` };
|
|
175
|
+
}
|
|
176
|
+
const alternativa = (0, noctum_pergunta_1.alternativasDaPergunta)(p)[r.indice];
|
|
177
|
+
if (alternativa.letra !== 'a') {
|
|
178
|
+
const hora = (0, horario_1.formatarHora)(p.prazo, { fuso: p.conteudo?.janela.fuso, agora: o.quando });
|
|
179
|
+
const seguir = alternativa.letra === 'b'
|
|
180
|
+
? (p.ato === 'autorizar' ? `nada muda, e a proposta vence às ${hora} se você não autorizar antes.` : 'nada muda; o arco segue até o fim da janela.')
|
|
181
|
+
: (p.ato === 'autorizar' ? 'nada foi autorizado. Diga o que mudar, e uma proposta nova sai com outra pergunta.'
|
|
182
|
+
: 'nada foi revogado. Diga o que mudar, e uma emenda é proposta.');
|
|
183
|
+
// Sem o registro, o "ok" seguinte poderia valer no terminal: a falha de gravação sobe, e o dono manda de novo.
|
|
184
|
+
registrarSemEfeito(raiz, p.codigo, alternativa.letra, o.canal, o.quando);
|
|
185
|
+
return { tipo: 'sem-efeito', letra: alternativa.letra, mensagem: `${p.codigo} → ${alternativa.letra}) ${alternativa.texto}: ${seguir}` };
|
|
186
|
+
}
|
|
187
|
+
const info = { repetida: false, mesmaProva: false };
|
|
188
|
+
const prova = o.provar({ codigo: p.codigo, letra: 'a', ...(o.numero ? { numero: o.numero } : {}) });
|
|
189
|
+
try {
|
|
190
|
+
const estado = p.ato === 'autorizar'
|
|
191
|
+
? (0, noctum_arco_1.autorizarPelaResposta)(raiz, p.arco, p.codigo, prova, o.quando, info)
|
|
192
|
+
: (0, noctum_arco_1.revogarPelaResposta)(raiz, p.arco, p.codigo, prova, o.quando, info);
|
|
193
|
+
const ok = marca(o.canal, 'ok');
|
|
194
|
+
const fim = estado.conteudo ? (0, horario_1.formatarHora)(estado.conteudo.janela.fim, { fuso: estado.conteudo.janela.fuso, agora: o.quando }) : '';
|
|
195
|
+
const mensagem = p.ato === 'autorizar'
|
|
196
|
+
? (info.repetida ? `${p.codigo}: o arco ${p.arco} já estava autorizado; nada muda.`
|
|
197
|
+
: `${ok}${p.codigo} → a) ${alternativa.texto}: o arco ${p.arco} está autorizado (${estado.situacao}), até ${fim}.`)
|
|
198
|
+
: (info.repetida ? `${p.codigo}: o arco ${p.arco} já estava revogado; nada muda.`
|
|
199
|
+
: `${ok}${p.codigo} → a) ${alternativa.texto}: o arco ${p.arco} está revogado; nenhum efeito novo passa.`);
|
|
200
|
+
return { tipo: 'registrada', ato: p.ato, letra: 'a', repetida: info.repetida, mesmaProva: info.mesmaProva, mensagem };
|
|
201
|
+
}
|
|
202
|
+
catch (e) {
|
|
203
|
+
if (e instanceof noctum_envelope_1.RecusaDoArco)
|
|
204
|
+
return { tipo: 'recusada', motivo: e.motivo, mensagem: textoDaRecusa(raiz, p, e, o) };
|
|
205
|
+
throw e;
|
|
206
|
+
}
|
|
207
|
+
}
|
|
@@ -0,0 +1,71 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.CARENCIA_DA_RETOMADA_MS = void 0;
|
|
4
|
+
exports.retomadaNaRede = retomadaNaRede;
|
|
5
|
+
const maquina_1 = require("./maquina");
|
|
6
|
+
const noctum_arco_1 = require("./noctum-arco");
|
|
7
|
+
const noctum_coordenacao_1 = require("./noctum-coordenacao");
|
|
8
|
+
const noctum_envelope_1 = require("./noctum-envelope");
|
|
9
|
+
/** O cancelamento exige duas carências de batida: uma partição de 15 min não transfere trabalho. */
|
|
10
|
+
exports.CARENCIA_DA_RETOMADA_MS = 2 * noctum_coordenacao_1.BATIDA_VENCIDA_MS;
|
|
11
|
+
const idadeDoSinal = (estado, maquina, quando) => {
|
|
12
|
+
const sinal = estado.sinais.get(maquina);
|
|
13
|
+
return sinal ? Date.parse(quando) - Date.parse(sinal) : Number.POSITIVE_INFINITY;
|
|
14
|
+
};
|
|
15
|
+
const canceladasDestaMaquina = (estado, maquina) => [...estado.ordens.values()].filter(o => o.maquina === maquina && o.estado === 'isolada' && !!o.cancelada)
|
|
16
|
+
.map(o => ({ ordem: o.ordem, trabalho: o.trabalho }));
|
|
17
|
+
/**
|
|
18
|
+
* Executa no máximo uma mudança de coordenação por chamada. Releituras e corridas continuam sob as trocas atômicas da N3;
|
|
19
|
+
* uma recusa tipada vira lacuna do tique, nunca estado vazio.
|
|
20
|
+
*/
|
|
21
|
+
function retomadaNaRede(carregado, arco, opcoes = {}) {
|
|
22
|
+
const quando = opcoes.quando ?? new Date().toISOString();
|
|
23
|
+
const local = (0, noctum_arco_1.lerArco)(carregado.raiz, arco, quando);
|
|
24
|
+
if (!local?.conteudo || !(0, noctum_envelope_1.envelopeMultimaquina)(local.conteudo)) {
|
|
25
|
+
return { aplicavel: false, acoes: [], canceladasLocais: [], lacuna: null };
|
|
26
|
+
}
|
|
27
|
+
const eu = (0, maquina_1.nomeDaMaquina)(opcoes.maquina);
|
|
28
|
+
const acoes = [];
|
|
29
|
+
try {
|
|
30
|
+
let estado = (0, noctum_coordenacao_1.lerCoordenacao)(carregado, arco, { ...opcoes, quando });
|
|
31
|
+
const cessao = estado.autoridade ? estado.cessoes.get(estado.autoridade.geracao) : null;
|
|
32
|
+
if (estado.autoridade && estado.autoridade.maquina !== eu && cessao?.para === eu && local.situacao === 'vigente') {
|
|
33
|
+
(0, noctum_coordenacao_1.assumirAutoridade)(carregado, arco, { ...opcoes, quando });
|
|
34
|
+
acoes.push('autoridade-assumida-por-cessao');
|
|
35
|
+
estado = (0, noctum_coordenacao_1.lerCoordenacao)(carregado, arco, { ...opcoes, quando });
|
|
36
|
+
}
|
|
37
|
+
else if (estado.autoridade && estado.autoridade.maquina !== eu && local.situacao === 'vigente' &&
|
|
38
|
+
idadeDoSinal(estado, estado.autoridade.maquina, quando) > noctum_coordenacao_1.BATIDA_VENCIDA_MS) {
|
|
39
|
+
(0, noctum_coordenacao_1.assumirAutoridade)(carregado, arco, { ...opcoes, quando,
|
|
40
|
+
forcar: { motivo: 'noctum.retomada.autoridade-sem-sinal' } });
|
|
41
|
+
acoes.push('autoridade-tomada-sem-sinal');
|
|
42
|
+
estado = (0, noctum_coordenacao_1.lerCoordenacao)(carregado, arco, { ...opcoes, quando });
|
|
43
|
+
}
|
|
44
|
+
if (estado.autoridade?.maquina === eu && local.situacao === 'encerrado') {
|
|
45
|
+
const para = (estado.vigente.conteudo.maquinas ?? []).filter(m => m.nome !== eu)
|
|
46
|
+
.map(m => ({ nome: m.nome, em: estado.sinais.get(m.nome) ?? '' }))
|
|
47
|
+
.sort((a, b) => Date.parse(b.em || '1970-01-01') - Date.parse(a.em || '1970-01-01'))[0];
|
|
48
|
+
if (para && !estado.cessoes.has(estado.autoridade.geracao)) {
|
|
49
|
+
(0, noctum_coordenacao_1.cederAutoridade)(carregado, arco, para.nome, 'noctum.retomada.cessao-no-encerramento', { ...opcoes, quando });
|
|
50
|
+
acoes.push(`autoridade-cedida:${para.nome}`);
|
|
51
|
+
estado = (0, noctum_coordenacao_1.lerCoordenacao)(carregado, arco, { ...opcoes, quando });
|
|
52
|
+
}
|
|
53
|
+
}
|
|
54
|
+
else if (estado.autoridade?.maquina === eu && local.situacao === 'vigente') {
|
|
55
|
+
const presa = new Map((estado.vigente.conteudo.trabalhos ?? []).map(t => [t.id, t.maquina ?? null]));
|
|
56
|
+
const ordem = [...estado.ordens.values()].find(o => o.maquina !== eu && (0, noctum_coordenacao_1.ordemViva)(o) && !o.cancelada &&
|
|
57
|
+
presa.get(o.trabalho) !== o.maquina && idadeDoSinal(estado, o.maquina, quando) > exports.CARENCIA_DA_RETOMADA_MS);
|
|
58
|
+
if (ordem) {
|
|
59
|
+
(0, noctum_coordenacao_1.cancelarOrdem)(carregado, arco, ordem.ordem, 'noctum.retomada.maquina-sem-sinal', { ...opcoes, quando });
|
|
60
|
+
acoes.push(`ordem-cancelada:${ordem.ordem}`);
|
|
61
|
+
estado = (0, noctum_coordenacao_1.lerCoordenacao)(carregado, arco, { ...opcoes, quando });
|
|
62
|
+
}
|
|
63
|
+
}
|
|
64
|
+
return { aplicavel: true, acoes, canceladasLocais: canceladasDestaMaquina(estado, eu), lacuna: null };
|
|
65
|
+
}
|
|
66
|
+
catch (e) {
|
|
67
|
+
if (!(e instanceof noctum_envelope_1.RecusaDoArco))
|
|
68
|
+
throw e;
|
|
69
|
+
return { aplicavel: true, acoes, canceladasLocais: [], lacuna: { motivo: e.motivo, detalhe: e.message } };
|
|
70
|
+
}
|
|
71
|
+
}
|
|
@@ -0,0 +1,93 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.sessoesEmVooDoArco = sessoesEmVooDoArco;
|
|
4
|
+
/**
|
|
5
|
+
* RM-058, integração (N4 do CHECK 2 da ork-rm058integra): as sessões do arco que podem estar em voo, numa conta só para o
|
|
6
|
+
* fechamento (que pede a parada delas) e para a guarda das threads do arco (que não deixa a sessão do arco terminal entregar
|
|
7
|
+
* por fora). O módulo só lê o log do arco, os ledgers e as threads: a guarda o importa sem o ciclo
|
|
8
|
+
* `ship` -> `noctum-guarda` -> `noctum-fechamento` -> `master` -> `ship`, que deixava constantes do `ship` sem valor no
|
|
9
|
+
* carregamento.
|
|
10
|
+
*/
|
|
11
|
+
const ledger_1 = require("./ledger");
|
|
12
|
+
const noctum_envelope_1 = require("./noctum-envelope");
|
|
13
|
+
const thread_1 = require("./thread");
|
|
14
|
+
const FIM_DA_SESSAO = ['phase_result', 'sessao_morta', 'session_superseded'];
|
|
15
|
+
/**
|
|
16
|
+
* A thread de uma reserva: a do log do arco ou, no trabalho de pedido que o arco abriu depois de reservar, a única que
|
|
17
|
+
* casa com o item e o sha256 do pedido (a mesma regra da fila). Ambígua ou ilegível: nenhuma.
|
|
18
|
+
*/
|
|
19
|
+
function threadDaReserva(raiz, estado, d) {
|
|
20
|
+
const gravada = d.threadDespachada ?? d.thread;
|
|
21
|
+
if (gravada)
|
|
22
|
+
return gravada;
|
|
23
|
+
const t = estado.conteudo && (0, noctum_envelope_1.envelopeComTrabalhos)(estado.conteudo) ? estado.conteudo.trabalhos.find(x => x.id === d.trabalho) : undefined;
|
|
24
|
+
if (!t?.pedido)
|
|
25
|
+
return null;
|
|
26
|
+
const sha = (0, noctum_envelope_1.shaDoPedido)(t.pedido);
|
|
27
|
+
const casam = [];
|
|
28
|
+
for (const id of (0, thread_1.listarIds)(raiz)) {
|
|
29
|
+
try {
|
|
30
|
+
const th = (0, thread_1.lerThread)(raiz, id);
|
|
31
|
+
if (th.roadmap === t.item && th.pedido?.sha256 === sha)
|
|
32
|
+
casam.push(id);
|
|
33
|
+
}
|
|
34
|
+
catch {
|
|
35
|
+
return null;
|
|
36
|
+
}
|
|
37
|
+
}
|
|
38
|
+
return casam.length === 1 ? casam[0] : null;
|
|
39
|
+
}
|
|
40
|
+
/**
|
|
41
|
+
* As sessões do arco que podem estar em voo: a sessão concluída sem resultado no ledger e a reserva pendente. A reserva
|
|
42
|
+
* pendente leva o id que a falha do runtime disse depois dela (o `claude --bg` que diz o id e sai com erro deixa a sessão
|
|
43
|
+
* aberta), e fica sem id quando nada foi dito.
|
|
44
|
+
*/
|
|
45
|
+
function sessoesEmVooDoArco(raiz, estado) {
|
|
46
|
+
const vistas = new Set();
|
|
47
|
+
const emVoo = [];
|
|
48
|
+
const ledgers = new Map();
|
|
49
|
+
const eventosDe = (thread) => {
|
|
50
|
+
if (!thread)
|
|
51
|
+
return null;
|
|
52
|
+
if (!ledgers.has(thread)) {
|
|
53
|
+
let e;
|
|
54
|
+
try {
|
|
55
|
+
e = (0, ledger_1.lerLedger)((0, thread_1.dirThread)(raiz, thread));
|
|
56
|
+
}
|
|
57
|
+
catch {
|
|
58
|
+
e = null;
|
|
59
|
+
}
|
|
60
|
+
ledgers.set(thread, e);
|
|
61
|
+
}
|
|
62
|
+
return ledgers.get(thread);
|
|
63
|
+
};
|
|
64
|
+
// Ledger que não se lê: a sessão pode estar em voo; o fechamento pede a parada em vez de presumir o fim.
|
|
65
|
+
const acabou = (eventos, sid) => !!eventos?.some(e => FIM_DA_SESSAO.includes(e.tipo) && e.sessionId === sid);
|
|
66
|
+
for (const d of estado.despachos) {
|
|
67
|
+
if (d.desfecho === 'recusado')
|
|
68
|
+
continue;
|
|
69
|
+
if (d.desfecho === 'pendente') {
|
|
70
|
+
const thread = threadDaReserva(raiz, estado, d);
|
|
71
|
+
const eventos = eventosDe(thread);
|
|
72
|
+
const dita = eventos?.filter(e => (e.tipo === ledger_1.TIPOS_DE_EVENTO.despachoFalhou || e.tipo === ledger_1.TIPOS_DE_EVENTO.faseDespachada) &&
|
|
73
|
+
typeof e.sessionId === 'string' && Date.parse(e.ts) >= Date.parse(d.reservadoEm)).at(-1);
|
|
74
|
+
const sessionId = typeof dita?.sessionId === 'string' ? dita.sessionId : null;
|
|
75
|
+
if (sessionId && (vistas.has(sessionId) || acabou(eventos, sessionId))) {
|
|
76
|
+
vistas.add(sessionId);
|
|
77
|
+
continue;
|
|
78
|
+
}
|
|
79
|
+
if (sessionId)
|
|
80
|
+
vistas.add(sessionId);
|
|
81
|
+
emVoo.push({ seq: d.seq, sessionId, trabalho: d.trabalho, thread, runtime: d.runtime, conta: d.conta, daReservaPendente: true });
|
|
82
|
+
continue;
|
|
83
|
+
}
|
|
84
|
+
if (!d.sessionId || vistas.has(d.sessionId))
|
|
85
|
+
continue;
|
|
86
|
+
vistas.add(d.sessionId);
|
|
87
|
+
const thread = d.threadDespachada ?? d.thread;
|
|
88
|
+
if (!acabou(eventosDe(thread), d.sessionId)) {
|
|
89
|
+
emVoo.push({ seq: d.seq, sessionId: d.sessionId, trabalho: d.trabalho, thread, runtime: d.runtime, conta: d.conta });
|
|
90
|
+
}
|
|
91
|
+
}
|
|
92
|
+
return emVoo;
|
|
93
|
+
}
|