@orkastery/cli 0.5.3 → 0.6.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/adapters/README.md +18 -0
- package/adapters/claude-code/.claude-plugin/plugin.json +1 -0
- package/adapters/claude-code/README.md +195 -5
- package/adapters/claude-code/agents/ork-check.md +1 -0
- package/adapters/claude-code/agents/ork-go.md +1 -0
- package/adapters/claude-code/agents/ork-goal.md +1 -0
- package/adapters/claude-code/agents/ork-master.md +1 -0
- package/adapters/claude-code/agents/ork-plan.md +1 -0
- package/adapters/claude-code/agents/ork-ship.md +1 -0
- package/adapters/claude-code/hooks/hooks.json +2 -1
- package/adapters/claude-code/hooks/ork-guard.js +15 -1
- package/adapters/claude-code/hooks/ork-resposta.js +91 -0
- package/adapters/claude-code/hooks/ork-sensor.js +18 -2
- package/adapters/claude-code/hooks/quota-signal.js +14 -0
- package/adapters/claude-code/mods/autoridade.json +56 -0
- package/adapters/claude-code/mods/ork-clima/.claude-plugin/plugin.json +14 -0
- package/adapters/claude-code/mods/ork-clima/hooks/contas.ts +283 -0
- package/adapters/claude-code/mods/ork-clima/hooks/hooks.json +3 -0
- package/adapters/claude-code/mods/ork-clima/hooks/previsao.ts +393 -0
- package/adapters/claude-code/mods/ork-clima/hooks/register.ts +205 -0
- package/adapters/claude-code/mods/ork-clima/orkastery-mod.json +5 -0
- package/adapters/claude-code/mods/ork-clima/types/index.d.ts +80 -0
- package/adapters/claude-code/mods/ork-freio/.claude-plugin/plugin.json +14 -0
- package/adapters/claude-code/mods/ork-freio/hooks/carga.ts +160 -0
- package/adapters/claude-code/mods/ork-freio/hooks/conferencia.ts +309 -0
- package/adapters/claude-code/mods/ork-freio/hooks/hooks.json +3 -0
- package/adapters/claude-code/mods/ork-freio/hooks/lote.ts +270 -0
- package/adapters/claude-code/mods/ork-freio/hooks/register.ts +285 -0
- package/adapters/claude-code/mods/ork-freio/orkastery-mod.json +5 -0
- package/adapters/claude-code/mods/ork-freio/types/index.d.ts +127 -0
- package/adapters/claude-code/mods/ork-mensageiro/.claude-plugin/plugin.json +14 -0
- package/adapters/claude-code/mods/ork-mensageiro/hooks/caixa.ts +215 -0
- package/adapters/claude-code/mods/ork-mensageiro/hooks/hooks.json +3 -0
- package/adapters/claude-code/mods/ork-mensageiro/hooks/painel.tsx +165 -0
- package/adapters/claude-code/mods/ork-mensageiro/hooks/recepcao.ts +256 -0
- package/adapters/claude-code/mods/ork-mensageiro/hooks/register.tsx +481 -0
- package/adapters/claude-code/mods/ork-mensageiro/orkastery-mod.json +5 -0
- package/adapters/claude-code/mods/ork-mensageiro/types/index.d.ts +85 -0
- package/adapters/claude-code/mods/ork-mesa/.claude-plugin/plugin.json +14 -0
- package/adapters/claude-code/mods/ork-mesa/hooks/cartoes.tsx +246 -0
- package/adapters/claude-code/mods/ork-mesa/hooks/decidir.ts +110 -0
- package/adapters/claude-code/mods/ork-mesa/hooks/fila.ts +253 -0
- package/adapters/claude-code/mods/ork-mesa/hooks/hooks.json +3 -0
- package/adapters/claude-code/mods/ork-mesa/hooks/obvia.ts +98 -0
- package/adapters/claude-code/mods/ork-mesa/hooks/register.tsx +493 -0
- package/adapters/claude-code/mods/ork-mesa/orkastery-mod.json +5 -0
- package/adapters/claude-code/mods/ork-mesa/types/index.d.ts +131 -0
- package/adapters/claude-code/mods/ork-pista/.claude-plugin/plugin.json +14 -0
- package/adapters/claude-code/mods/ork-pista/hooks/acoes.ts +71 -0
- package/adapters/claude-code/mods/ork-pista/hooks/ci.ts +121 -0
- package/adapters/claude-code/mods/ork-pista/hooks/hooks.json +3 -0
- package/adapters/claude-code/mods/ork-pista/hooks/pista.tsx +356 -0
- package/adapters/claude-code/mods/ork-pista/hooks/register.tsx +439 -0
- package/adapters/claude-code/mods/ork-pista/orkastery-mod.json +5 -0
- package/adapters/claude-code/mods/ork-pista/types/index.d.ts +85 -0
- package/adapters/claude-code/mods/ork-ponte/.claude-plugin/plugin.json +13 -0
- package/adapters/claude-code/mods/ork-ponte/hooks/faixa.tsx +57 -0
- package/adapters/claude-code/mods/ork-ponte/hooks/guarda.ts +410 -0
- package/adapters/claude-code/mods/ork-ponte/hooks/hooks.json +3 -0
- package/adapters/claude-code/mods/ork-ponte/hooks/mostrado.ts +55 -0
- package/adapters/claude-code/mods/ork-ponte/hooks/nucleo.ts +157 -0
- package/adapters/claude-code/mods/ork-ponte/hooks/papel.ts +42 -0
- package/adapters/claude-code/mods/ork-ponte/hooks/register.ts +331 -0
- package/adapters/claude-code/mods/ork-ponte/hooks/vigia.ts +76 -0
- package/adapters/claude-code/mods/ork-ponte/orkastery-mod.json +5 -0
- package/adapters/claude-code/mods/ork-ponte/types/index.d.ts +178 -0
- package/adapters/claude-code/mods/ork-portao/.claude-plugin/plugin.json +14 -0
- package/adapters/claude-code/mods/ork-portao/hooks/hooks.json +3 -0
- package/adapters/claude-code/mods/ork-portao/hooks/lease.ts +201 -0
- package/adapters/claude-code/mods/ork-portao/hooks/plano.ts +304 -0
- package/adapters/claude-code/mods/ork-portao/hooks/register.ts +339 -0
- package/adapters/claude-code/mods/ork-portao/hooks/verify.ts +152 -0
- package/adapters/claude-code/mods/ork-portao/orkastery-mod.json +5 -0
- package/adapters/claude-code/mods/ork-portao/types/index.d.ts +60 -0
- package/adapters/claude-code/mods/ork-radar/.claude-plugin/plugin.json +14 -0
- package/adapters/claude-code/mods/ork-radar/hooks/colisao.ts +420 -0
- package/adapters/claude-code/mods/ork-radar/hooks/hooks.json +3 -0
- package/adapters/claude-code/mods/ork-radar/hooks/mapa.tsx +322 -0
- package/adapters/claude-code/mods/ork-radar/hooks/register.tsx +470 -0
- package/adapters/claude-code/mods/ork-radar/orkastery-mod.json +5 -0
- package/adapters/claude-code/mods/ork-radar/types/index.d.ts +72 -0
- package/adapters/claude-code/mods/ork-ritual/.claude-plugin/plugin.json +14 -0
- package/adapters/claude-code/mods/ork-ritual/hooks/hooks.json +3 -0
- package/adapters/claude-code/mods/ork-ritual/hooks/nota.ts +88 -0
- package/adapters/claude-code/mods/ork-ritual/hooks/register.tsx +494 -0
- package/adapters/claude-code/mods/ork-ritual/hooks/replay.tsx +271 -0
- package/adapters/claude-code/mods/ork-ritual/hooks/ritual.ts +218 -0
- package/adapters/claude-code/mods/ork-ritual/orkastery-mod.json +5 -0
- package/adapters/claude-code/mods/ork-ritual/types/index.d.ts +106 -0
- package/adapters/claude-code/mods/ork-sentinela/.claude-plugin/plugin.json +14 -0
- package/adapters/claude-code/mods/ork-sentinela/hooks/alertas.ts +85 -0
- package/adapters/claude-code/mods/ork-sentinela/hooks/despacho.ts +156 -0
- package/adapters/claude-code/mods/ork-sentinela/hooks/hooks.json +3 -0
- package/adapters/claude-code/mods/ork-sentinela/hooks/register.ts +511 -0
- package/adapters/claude-code/mods/ork-sentinela/hooks/vigia.ts +186 -0
- package/adapters/claude-code/mods/ork-sentinela/orkastery-mod.json +5 -0
- package/adapters/claude-code/mods/ork-sentinela/types/index.d.ts +65 -0
- package/adapters/claude-code/mods/ork-torre/.claude-plugin/plugin.json +14 -0
- package/adapters/claude-code/mods/ork-torre/hooks/agenda.ts +60 -0
- package/adapters/claude-code/mods/ork-torre/hooks/detalhe.tsx +236 -0
- package/adapters/claude-code/mods/ork-torre/hooks/frases.ts +42 -0
- package/adapters/claude-code/mods/ork-torre/hooks/hooks.json +3 -0
- package/adapters/claude-code/mods/ork-torre/hooks/painel.tsx +344 -0
- package/adapters/claude-code/mods/ork-torre/hooks/rede.ts +97 -0
- package/adapters/claude-code/mods/ork-torre/hooks/register.tsx +437 -0
- package/adapters/claude-code/mods/ork-torre/orkastery-mod.json +5 -0
- package/adapters/claude-code/mods/ork-torre/types/index.d.ts +108 -0
- package/adapters/codex/skills/ork/SKILL.md +2 -0
- package/adapters/hermes/README.md +64 -1
- package/adapters/hermes/bin/ork-conhecimento-colecoes.sh +14 -0
- package/adapters/hermes/bin/ork-conhecimento-listar.sh +15 -0
- package/adapters/hermes/bin/ork-conhecimento-mostrar.sh +16 -0
- package/adapters/hermes/bin/ork-conhecimento-verificar.sh +15 -0
- package/adapters/hermes/bin/ork-vigia-batida.py +127 -0
- package/adapters/hermes/hermes.plugin.json +4 -0
- package/adapters/hermes/hitl-ingress/__init__.py +101 -8
- package/adapters/hermes/skills/orkastery-devmaster/SKILL.md +3 -3
- package/adapters/openclaw/README.md +83 -10
- package/adapters/openclaw/bin/ork-vigia-batida.js +86 -0
- package/adapters/openclaw/dist/hitl-ingress.js +106 -9
- package/adapters/openclaw/dist/index.js +86 -0
- package/adapters/openclaw/openclaw.plugin.json +34 -4
- package/adapters/openclaw/package.json +2 -2
- package/adapters/openclaw/src/hitl-ingress.ts +103 -9
- package/adapters/openclaw/src/index.ts +94 -0
- package/assets/adapters-en/claude-code/README.md +403 -0
- package/assets/adapters-en/claude-code/agents/ork-check.md +33 -0
- package/assets/adapters-en/claude-code/agents/ork-go.md +33 -0
- package/assets/adapters-en/claude-code/agents/ork-goal.md +34 -0
- package/assets/adapters-en/claude-code/agents/ork-master.md +35 -0
- package/assets/adapters-en/claude-code/agents/ork-plan.md +33 -0
- package/assets/adapters-en/claude-code/agents/ork-ship.md +33 -0
- package/assets/adapters-en/claude-code/commands/check.md +46 -0
- package/assets/adapters-en/claude-code/commands/go.md +46 -0
- package/assets/adapters-en/claude-code/commands/goal.md +55 -0
- package/assets/adapters-en/claude-code/commands/master.md +54 -0
- package/assets/adapters-en/claude-code/commands/onboarding.md +22 -0
- package/assets/adapters-en/claude-code/commands/ork.md +126 -0
- package/assets/adapters-en/claude-code/commands/plan.md +47 -0
- package/assets/adapters-en/claude-code/commands/ship.md +45 -0
- package/assets/adapters-en/codex/skills/ork/SKILL.md +85 -0
- package/assets/adapters-en/hermes/README.md +273 -0
- package/assets/adapters-en/hermes/skills/orkastery-devmaster/SKILL.md +169 -0
- package/assets/docs-en/markdownlint-cli2.jsonc +22 -0
- package/assets/docs-en/padroes/documentacao-de-produto.md +135 -0
- package/assets/docs-en/padroes/roadmap-de-produto.md +100 -0
- package/assets/docs-en/produto/README.md +14 -0
- package/assets/docs-en/produto/_modelo-feature.md +62 -0
- package/assets/docs-en/roadmap/README.md +14 -0
- package/assets/docs-en/roadmap/_modelo-item.md +75 -0
- package/assets/references-en/README.md +25 -0
- package/assets/references-en/code-review-axes.md +82 -0
- package/assets/references-en/definition-of-done.md +74 -0
- package/assets/references-en/performance-checklist.md +53 -0
- package/assets/references-en/security-checklist.md +101 -0
- package/assets/references-en/testing-patterns.md +51 -0
- package/assets/security-scan/defaults/.golangci.yml +2 -0
- package/assets/security-scan/defaults/eslint.config.mjs +11 -0
- package/assets/security-scan/defaults/gitleaks.toml +3 -0
- package/assets/security-scan/defaults/ruff.toml +1 -0
- package/assets/security-scan/tools-agil.json +87 -0
- package/assets/security-scan/tools.json +625 -0
- package/assets/skills-en/core/onboarding/SKILL.md +58 -0
- package/assets/skills-en/core/orkastery-bootstrap/SKILL.md +119 -0
- package/assets/skills-en/core/thread-state/SKILL.md +88 -0
- package/assets/skills-en/governance/decision-triage/SKILL.md +65 -0
- package/assets/skills-en/governance/narrative-guardian/SKILL.md +66 -0
- package/assets/skills-en/governance/roadmap-keeper/SKILL.md +60 -0
- package/assets/skills-en/governance/scope-check-capability-map/SKILL.md +71 -0
- package/assets/skills-en/observability/thread-tracing/SKILL.md +63 -0
- package/assets/skills-en/phases/check-quality/SKILL.md +103 -0
- package/assets/skills-en/phases/go-implementation/SKILL.md +78 -0
- package/assets/skills-en/phases/goal-definition/SKILL.md +69 -0
- package/assets/skills-en/phases/master-metrics/SKILL.md +72 -0
- package/assets/skills-en/phases/plan-specification/SKILL.md +67 -0
- package/assets/skills-en/phases/security-remediation/SKILL.md +70 -0
- package/assets/skills-en/phases/ship-release/SKILL.md +71 -0
- package/assets/skills-en/reviewers/code-reviewer/SKILL.md +61 -0
- package/assets/skills-en/reviewers/security-auditor/SKILL.md +93 -0
- package/assets/skills-en/reviewers/test-engineer/SKILL.md +66 -0
- package/assets/skills-en/reviewers/web-performance-auditor/SKILL.md +63 -0
- package/dist/adapters/claude-bg.js +193 -15
- package/dist/adapters/codex-controller-worker.js +12 -5
- package/dist/adapters/codex-events.js +16 -4
- package/dist/adapters/codex.js +13 -2
- package/dist/agents-md.js +24 -15
- package/dist/atualizar-branch.js +245 -0
- package/dist/auditoria.js +13 -11
- package/dist/auditrun.js +68 -48
- package/dist/autorizacao-duravel.js +327 -0
- package/dist/board.js +98 -43
- package/dist/branch-de-estado.js +39 -9
- package/dist/busca-semantica.js +7 -5
- package/dist/catalogo.js +35 -1
- package/dist/changelog-reconciliacao.js +290 -0
- package/dist/check-agil.js +500 -0
- package/dist/check-modo.js +41 -0
- package/dist/check-paralelo.js +183 -0
- package/dist/ci.js +255 -46
- package/dist/ciclos.js +8 -6
- package/dist/claim-lint.js +12 -8
- package/dist/claims-conferir.js +350 -0
- package/dist/claims.js +13 -10
- package/dist/company-brain-client.js +45 -3
- package/dist/company-brain-journal.js +2 -1
- package/dist/company-brain-migration.js +47 -6
- package/dist/conducao-batida.js +759 -0
- package/dist/conducao-sentinela.js +405 -0
- package/dist/conducao-texto.js +12 -18
- package/dist/conducao.js +206 -59
- package/dist/conhecimento-consulta.js +270 -0
- package/dist/conhecimento.js +514 -0
- package/dist/conta-esgotada.js +127 -0
- package/dist/dado-privado.js +816 -0
- package/dist/decisao-autonoma.js +5 -4
- package/dist/demo.js +14 -12
- package/dist/dependencias-da-worktree.js +25 -0
- package/dist/divida.js +38 -36
- package/dist/docs.js +103 -82
- package/dist/doctor-forja.js +345 -0
- package/dist/doctor-pulse-cron.js +294 -27
- package/dist/doctor-rede.js +18 -17
- package/dist/doctor.js +278 -116
- package/dist/dsn-da-memoria.js +417 -0
- package/dist/entrega-por-mod.js +503 -0
- package/dist/entrega-pr.js +158 -57
- package/dist/escopo-escrita.js +10 -1
- package/dist/esgotamentos.js +13 -11
- package/dist/estado-thread.js +42 -17
- package/dist/evalrunner.js +35 -32
- package/dist/experiencia-instalacao.js +45 -25
- package/dist/fabrica-batida.js +323 -0
- package/dist/fabrica-estado.js +49 -16
- package/dist/fabrica-publicar.js +3 -1
- package/dist/fila-pesada.js +444 -0
- package/dist/fix.js +24 -21
- package/dist/forja/adaptador.js +6 -0
- package/dist/forja/ambiente-de-ci.js +27 -0
- package/dist/forja/api.js +256 -0
- package/dist/forja/cache.js +89 -0
- package/dist/forja/cli.js +60 -0
- package/dist/forja/contrato.js +9 -0
- package/dist/forja/endereco.js +43 -0
- package/dist/forja/estado.js +22 -0
- package/dist/forja/executor.js +73 -0
- package/dist/forja/github/ci.js +95 -0
- package/dist/forja/github/dono-da-rede.js +18 -0
- package/dist/forja/github/metadados.js +15 -0
- package/dist/forja/github/pedidos.js +200 -0
- package/dist/forja/gitlab/ci.js +141 -0
- package/dist/forja/gitlab/consultas.js +59 -0
- package/dist/forja/gitlab/dono-da-rede.js +43 -0
- package/dist/forja/gitlab/metadados.js +15 -0
- package/dist/forja/gitlab/pedidos-abertos.js +158 -0
- package/dist/forja/gitlab/pedidos.js +141 -0
- package/dist/forja/produtor.js +32 -0
- package/dist/forja/registro.js +31 -0
- package/dist/forja/resolver.js +121 -0
- package/dist/forja/texto.js +13 -0
- package/dist/forja/versao.js +71 -0
- package/dist/forja.js +124 -81
- package/dist/gates.js +3 -28
- package/dist/handoff.js +33 -19
- package/dist/hitl-contract.js +46 -43
- package/dist/hitl-curto.js +37 -25
- package/dist/hitl-gates.js +13 -11
- package/dist/hitl-local-receipt.js +53 -0
- package/dist/hitl-local.js +11 -2
- package/dist/hitl-lock.js +5 -11
- package/dist/hitl-public-receipt.js +11 -0
- package/dist/hitl-resumo.js +72 -3
- package/dist/hitl-sessions.js +62 -9
- package/dist/hitl-tempo-parado.js +4 -4
- package/dist/hitl-texto-livre.js +7 -4
- package/dist/hitl.js +63 -64
- package/dist/horario.js +30 -7
- package/dist/hosts.js +155 -134
- package/dist/impedimento.js +108 -14
- package/dist/index.js +1421 -1019
- package/dist/indice-vetorial.js +14 -12
- package/dist/indice.js +7 -1
- package/dist/init.js +54 -49
- package/dist/instabilidade.js +144 -0
- package/dist/integracoes-locais.js +4 -0
- package/dist/intelligence-graph-cli.js +213 -88
- package/dist/intelligence-graph-contexto.js +56 -17
- package/dist/intelligence-graph-contract.js +2 -1
- package/dist/intelligence-graph-extract-md.js +56 -4
- package/dist/intelligence-graph-extract-ts.js +71 -3
- package/dist/intelligence-graph-query.js +96 -34
- package/dist/leases.js +19 -18
- package/dist/ledger-stats.js +17 -16
- package/dist/ledger.js +46 -2
- package/dist/licoes.js +12 -11
- package/dist/liveness.js +6 -3
- package/dist/locale-accounts.js +220 -0
- package/dist/locale-adapter.js +291 -0
- package/dist/locale-ajuda.js +833 -0
- package/dist/locale-audit.js +199 -0
- package/dist/locale-claims.js +213 -0
- package/dist/locale-conducao.js +138 -0
- package/dist/locale-conhecimento.js +181 -0
- package/dist/locale-decisao.js +205 -0
- package/dist/locale-docs.js +230 -0
- package/dist/locale-estado.js +101 -0
- package/dist/locale-forja.js +290 -0
- package/dist/locale-gerados.js +165 -0
- package/dist/locale-grafo.js +129 -0
- package/dist/locale-master.js +182 -0
- package/dist/locale-network.js +524 -0
- package/dist/locale-onboarding.js +92 -0
- package/dist/locale-operacao-restante.js +931 -0
- package/dist/locale-phase.js +151 -0
- package/dist/locale-projetos.js +100 -0
- package/dist/locale-prompts.js +194 -0
- package/dist/locale-pulse.js +349 -0
- package/dist/locale-reservas.js +87 -0
- package/dist/locale-retry.js +524 -0
- package/dist/locale-roadmap.js +102 -0
- package/dist/locale-security-scan.js +69 -0
- package/dist/locale-setup.js +192 -0
- package/dist/locale-ship.js +597 -0
- package/dist/locale-thread.js +421 -0
- package/dist/locale-verify.js +201 -0
- package/dist/locale-worktree.js +246 -0
- package/dist/locale.js +1258 -0
- package/dist/maestro-runtime.js +22 -3
- package/dist/manifest.js +415 -13
- package/dist/maquina-ociosa.js +211 -0
- package/dist/maquina.js +31 -7
- package/dist/master-digest.js +6 -1
- package/dist/master-nota-local.js +200 -0
- package/dist/master-nota.js +14 -8
- package/dist/master.js +139 -65
- package/dist/mcp-artifacts.js +11 -2
- package/dist/mcp-conhecimento.js +52 -0
- package/dist/mcp-experiencia.js +26 -5
- package/dist/mcp-git.js +23 -6
- package/dist/mcp-grafo.js +7 -4
- package/dist/mcp-install.js +73 -8
- package/dist/mcp-noctum.js +101 -0
- package/dist/mcp-server.js +90 -16
- package/dist/mcp-ship-transporte.js +977 -0
- package/dist/mcp-ship.js +71 -25
- package/dist/mcp-transportes.js +17 -0
- package/dist/mcp-verify.js +6 -1
- package/dist/memoria.js +63 -58
- package/dist/modos-migracao.js +8 -6
- package/dist/modos.js +20 -24
- package/dist/network-roadmap.js +90 -51
- package/dist/noctum-aceite.js +789 -0
- package/dist/noctum-arco.js +1418 -0
- package/dist/noctum-capacidade.js +141 -0
- package/dist/noctum-changelog.js +399 -0
- package/dist/noctum-cli.js +482 -0
- package/dist/noctum-coordenacao.js +1225 -0
- package/dist/noctum-entrega.js +1169 -0
- package/dist/noctum-envelope.js +1046 -0
- package/dist/noctum-execucao.js +376 -0
- package/dist/noctum-fechamento.js +405 -0
- package/dist/noctum-fila.js +314 -0
- package/dist/noctum-guarda.js +256 -0
- package/dist/noctum-integracao.js +507 -0
- package/dist/noctum-maquinas.js +383 -0
- package/dist/noctum-medicao.js +450 -0
- package/dist/noctum-modo.js +362 -0
- package/dist/noctum-pergunta-canal.js +96 -0
- package/dist/noctum-pergunta.js +115 -0
- package/dist/noctum-provas.js +838 -0
- package/dist/noctum-reconciliacao.js +591 -0
- package/dist/noctum-registro.js +215 -0
- package/dist/noctum-relatorio.js +827 -0
- package/dist/noctum-resposta.js +207 -0
- package/dist/noctum-sessoes-em-voo.js +93 -0
- package/dist/noctum-supervisao.js +649 -0
- package/dist/noctum-terminal.js +459 -0
- package/dist/noctum-transporte.js +655 -0
- package/dist/noctum-vigia.js +639 -0
- package/dist/ocupacao.js +32 -3
- package/dist/onboarding.js +56 -26
- package/dist/orkmind.js +48 -25
- package/dist/orquestracao.js +44 -47
- package/dist/parado-no-condutor.js +174 -127
- package/dist/phase.js +144 -63
- package/dist/policies.js +37 -4
- package/dist/portfolio.js +4 -2
- package/dist/postura-local.js +235 -0
- package/dist/preflight.js +11 -10
- package/dist/procedencia.js +220 -0
- package/dist/projeto-alvo.js +186 -24
- package/dist/prompts.js +140 -42
- package/dist/prova-minima.js +5 -6
- package/dist/pulse-cadencia.js +5 -4
- package/dist/pulse-consentimento.js +53 -1
- package/dist/pulse-delivery.js +151 -24
- package/dist/pulse-resposta.js +368 -4
- package/dist/pulse.js +188 -22
- package/dist/ratelimit.js +16 -6
- package/dist/recall.js +14 -13
- package/dist/redacao-saida.js +63 -0
- package/dist/rede-adesao.js +13 -8
- package/dist/rede-forja.js +108 -24
- package/dist/rede-status.js +66 -47
- package/dist/rede.js +86 -46
- package/dist/retomada-checkpoint.js +101 -0
- package/dist/retry.js +451 -212
- package/dist/roadmap-reservas.js +45 -28
- package/dist/roadmap-status.js +129 -33
- package/dist/runtime-ambiente.js +5 -0
- package/dist/runtime-context.js +284 -32
- package/dist/runtime-escada.js +423 -0
- package/dist/runtime-profiles.js +103 -46
- package/dist/runtimes.js +2 -1
- package/dist/saida-segura.js +3 -2
- package/dist/security-scan/agil.js +355 -0
- package/dist/security-scan/cli.js +76 -0
- package/dist/security-scan/compare.js +149 -0
- package/dist/security-scan/config.js +93 -0
- package/dist/security-scan/detect.js +97 -0
- package/dist/security-scan/executor.js +188 -0
- package/dist/security-scan/guard.js +180 -0
- package/dist/security-scan/imagem-de-lint.js +96 -0
- package/dist/security-scan/normalize/actionlint.js +12 -0
- package/dist/security-scan/normalize/eslint.js +12 -0
- package/dist/security-scan/normalize/gitleaks.js +13 -0
- package/dist/security-scan/normalize/golangci-lint.js +13 -0
- package/dist/security-scan/normalize/govulncheck.js +36 -0
- package/dist/security-scan/normalize/index.js +25 -0
- package/dist/security-scan/normalize/npm-audit.js +30 -0
- package/dist/security-scan/normalize/osv-scanner.js +32 -0
- package/dist/security-scan/normalize/oxlint.js +51 -0
- package/dist/security-scan/normalize/pip-audit.js +16 -0
- package/dist/security-scan/normalize/ruff.js +12 -0
- package/dist/security-scan/normalize/semgrep.js +20 -0
- package/dist/security-scan/normalize/trivy.js +33 -0
- package/dist/security-scan/normalize/util.js +204 -0
- package/dist/security-scan/normalize/zizmor.js +19 -0
- package/dist/security-scan/report.js +156 -0
- package/dist/security-scan/run.js +448 -0
- package/dist/security-scan/tools.js +62 -0
- package/dist/security-scan/trabalhador.js +74 -0
- package/dist/security-scan/types.js +15 -0
- package/dist/session-events.js +26 -5
- package/dist/session-watcher-claude.js +81 -20
- package/dist/session-watcher.js +340 -42
- package/dist/sessoes-contas.js +10 -1
- package/dist/sessoes-inventario.js +1 -1
- package/dist/sessoes.js +25 -23
- package/dist/setup.js +59 -58
- package/dist/ship-publicar.js +971 -0
- package/dist/ship.js +243 -97
- package/dist/steal.js +77 -0
- package/dist/superficie.js +14 -11
- package/dist/thread-close.js +12 -11
- package/dist/thread.js +274 -100
- package/dist/tokens.js +15 -11
- package/dist/trabalho-thread.js +297 -0
- package/dist/transporte-do-canal.js +189 -0
- package/dist/types.js +12 -1
- package/dist/util.js +13 -3
- package/dist/varredura-acoes.js +507 -0
- package/dist/verify.js +608 -76
- package/dist/vida-da-thread.js +254 -0
- package/dist/worktree-local.js +167 -0
- package/dist/worktree.js +99 -83
- package/dist/yaml.js +27 -8
- package/eval/casos/check-quality.json +77 -0
- package/eval/casos/security-auditor.json +148 -0
- package/eval/casos/security-remediation.json +161 -0
- package/eval/fixtures/security-scan/README.md +8 -0
- package/eval/fixtures/security-scan/go/.github/workflows/ci.yml +12 -0
- package/eval/fixtures/security-scan/go/Dockerfile +4 -0
- package/eval/fixtures/security-scan/go/README.md +4 -0
- package/eval/fixtures/security-scan/go/config.go +4 -0
- package/eval/fixtures/security-scan/go/go.mod +5 -0
- package/eval/fixtures/security-scan/go/go.sum +2 -0
- package/eval/fixtures/security-scan/go/main.go +31 -0
- package/eval/fixtures/security-scan/js/.github/workflows/ci.yml +12 -0
- package/eval/fixtures/security-scan/js/Dockerfile +3 -0
- package/eval/fixtures/security-scan/js/README.md +4 -0
- package/eval/fixtures/security-scan/js/package-lock.json +844 -0
- package/eval/fixtures/security-scan/js/package.json +10 -0
- package/eval/fixtures/security-scan/js/src/config.js +4 -0
- package/eval/fixtures/security-scan/js/src/server.js +17 -0
- package/eval/fixtures/security-scan/js/src/util.ts +4 -0
- package/eval/fixtures/security-scan/js/tsconfig.json +4 -0
- package/eval/fixtures/security-scan/python/.github/workflows/ci.yml +12 -0
- package/eval/fixtures/security-scan/python/Dockerfile +3 -0
- package/eval/fixtures/security-scan/python/README.md +4 -0
- package/eval/fixtures/security-scan/python/app/__init__.py +0 -0
- package/eval/fixtures/security-scan/python/app/config.py +2 -0
- package/eval/fixtures/security-scan/python/app/main.py +19 -0
- package/eval/fixtures/security-scan/python/requirements.txt +1 -0
- package/package.json +9 -4
- package/references/security-checklist.md +3 -3
- package/schemas/code-artifact-graph.v1.schema.json +2 -1
- package/skills/README.md +1 -0
- package/skills/core/orkastery-bootstrap/SKILL.md +2 -2
- package/skills/phases/check-quality/SKILL.md +16 -0
- package/skills/phases/go-implementation/SKILL.md +6 -0
- package/skills/phases/security-remediation/SKILL.md +70 -0
- package/skills/reviewers/security-auditor/SKILL.md +25 -0
package/dist/mcp-install.js
CHANGED
|
@@ -33,7 +33,7 @@ var __importStar = (this && this.__importStar) || (function () {
|
|
|
33
33
|
};
|
|
34
34
|
})();
|
|
35
35
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
36
|
-
exports.ENV_VARS_CODEX_MCP = exports.BRAIN_WRITE_TOOLS = exports.BRAIN_READ_TOOLS = exports.TOOLS_FILHO_CODEX = exports.TOOLS_DONO_CODEX = void 0;
|
|
36
|
+
exports.ENV_VARS_CODEX_MCP = exports.BRAIN_WRITE_TOOLS = exports.BRAIN_READ_TOOLS = exports.TOOLS_FILHO_CODEX = exports.TOOLS_DONO_CODEX = exports.TRANSPORTES_SHIP_MCP = void 0;
|
|
37
37
|
exports.validarGrantsCodex = validarGrantsCodex;
|
|
38
38
|
exports.politicasFilhoCodex = politicasFilhoCodex;
|
|
39
39
|
exports.configuracaoServidorMcp = configuracaoServidorMcp;
|
|
@@ -46,6 +46,11 @@ const node_crypto_1 = require("node:crypto");
|
|
|
46
46
|
const node_util_1 = require("node:util");
|
|
47
47
|
const smol_toml_1 = require("smol-toml");
|
|
48
48
|
const manifest_1 = require("./manifest");
|
|
49
|
+
const mcp_transportes_1 = require("./mcp-transportes");
|
|
50
|
+
Object.defineProperty(exports, "TRANSPORTES_SHIP_MCP", { enumerable: true, get: function () { return mcp_transportes_1.TRANSPORTES_SHIP_MCP; } });
|
|
51
|
+
const mcp_ship_transporte_1 = require("./mcp-ship-transporte");
|
|
52
|
+
const locale_1 = require("./locale");
|
|
53
|
+
const IMPRESSAO_SSH = /^SHA256:[A-Za-z0-9+/]{43}$/;
|
|
49
54
|
exports.TOOLS_DONO_CODEX = ['ork_thread_new', 'ork_phase_run', 'ork_request_decision'];
|
|
50
55
|
// RM-037 (rm037defeito, defeito 1): a decisao autonoma da sessao entra com as outras mutacoes do filho;
|
|
51
56
|
// sem o grant, o codex com approval_policy never recusaria a chamada.
|
|
@@ -132,7 +137,7 @@ function ler(file) {
|
|
|
132
137
|
function configuracaoServidorMcp(raiz, host, threadId, transporteShip = 'github-ssh', permissoesFilho = 'interactive',
|
|
133
138
|
/** I-36 (D4): identidade do despacho da sessao filha; so existe junto com a thread vinculada. */
|
|
134
139
|
dispatchId) {
|
|
135
|
-
if (!
|
|
140
|
+
if (!(0, mcp_transportes_1.ehTransporteShipMcp)(transporteShip))
|
|
136
141
|
throw Error('mcp.install.transport.invalid');
|
|
137
142
|
if (!['interactive', 'worktree'].includes(permissoesFilho))
|
|
138
143
|
throw Error('mcp.install.child-permissions.invalid');
|
|
@@ -199,14 +204,36 @@ function migrarEnvVarsCodex(bruto, entrada) {
|
|
|
199
204
|
}
|
|
200
205
|
return bruto.slice(0, corpoFim) + (corpo.endsWith('\n') ? '' : '\n') + `env_vars = ${valor}\n` + bruto.slice(corpoFim);
|
|
201
206
|
}
|
|
207
|
+
/** O transporte SHIP de cada host do projeto com a entrada orkastery; config que nao se le nao conta. */
|
|
208
|
+
function transportesDosHosts(raiz) {
|
|
209
|
+
const achados = [];
|
|
210
|
+
for (const host of ['claude-code', 'codex']) {
|
|
211
|
+
const arquivo = path.join(raiz, host === 'codex' ? '.codex/config.toml' : '.mcp.json');
|
|
212
|
+
try {
|
|
213
|
+
const lido = ler(arquivo);
|
|
214
|
+
if (!lido)
|
|
215
|
+
continue;
|
|
216
|
+
const bruto = lido.bytes.toString('utf8'), dados = objeto(host === 'codex' ? (0, smol_toml_1.parse)(bruto) : JSON.parse(bruto));
|
|
217
|
+
const servidores = objeto(dados[host === 'codex' ? 'mcp_servers' : 'mcpServers']);
|
|
218
|
+
if (!Object.hasOwn(servidores, 'orkastery'))
|
|
219
|
+
continue;
|
|
220
|
+
const argv = objeto(servidores.orkastery).args, lista = Array.isArray(argv) ? argv : [], i = lista.indexOf('--ship-transport');
|
|
221
|
+
achados.push({ arquivo, transporte: i >= 0 ? String(lista[i + 1]) : 'github-ssh' });
|
|
222
|
+
}
|
|
223
|
+
catch { /* config ilegivel: nenhum servidor sobe dela */ }
|
|
224
|
+
}
|
|
225
|
+
return achados;
|
|
226
|
+
}
|
|
202
227
|
function instalarMcp(opcoes) {
|
|
203
228
|
// Ensaio da 0.5.0: os READMEs dos plugins mandavam `--project .`, recusado sem dizer como acertar.
|
|
204
229
|
if (!path.isAbsolute(opcoes.projeto))
|
|
205
230
|
throw Error('mcp.install.project.invalid: raiz absoluta obrigatoria; na raiz do projeto, use --project "$PWD"');
|
|
206
231
|
if (!['claude-code', 'codex'].includes(opcoes.host))
|
|
207
232
|
throw Error('mcp.install.host.invalid');
|
|
208
|
-
if (opcoes.transporteShip !== undefined && !
|
|
233
|
+
if (opcoes.transporteShip !== undefined && !(0, mcp_transportes_1.ehTransporteShipMcp)(opcoes.transporteShip))
|
|
209
234
|
throw Error('mcp.install.transport.invalid');
|
|
235
|
+
if (opcoes.impressaoSsh !== undefined && (opcoes.transporteShip !== 'forja-ssh' || !IMPRESSAO_SSH.test(opcoes.impressaoSsh)))
|
|
236
|
+
throw Error('mcp.install.ssh-fingerprint.invalid: so com --ship-transport forja-ssh, no formato SHA256:<43 caracteres>');
|
|
210
237
|
if (opcoes.permissoesFilho !== undefined && !['interactive', 'worktree'].includes(opcoes.permissoesFilho))
|
|
211
238
|
throw Error('mcp.install.child-permissions.invalid');
|
|
212
239
|
if (opcoes.permissoesDono !== undefined && (opcoes.host !== 'codex' || !['interactive', 'orchestrate'].includes(opcoes.permissoesDono)))
|
|
@@ -214,6 +241,32 @@ function instalarMcp(opcoes) {
|
|
|
214
241
|
const raiz = fs.realpathSync(opcoes.projeto);
|
|
215
242
|
if (fs.realpathSync((0, manifest_1.exigirManifesto)(raiz).raiz) !== raiz)
|
|
216
243
|
throw Error('mcp.install.project.invalid');
|
|
244
|
+
// O transporte fixado sonda o origin antes de qualquer escrita; sem transporte pedido, so a proposta, sem rede.
|
|
245
|
+
let fixacao;
|
|
246
|
+
const linhas = [];
|
|
247
|
+
if ((0, mcp_transportes_1.ehTransporteFixado)(opcoes.transporteShip)) {
|
|
248
|
+
// A fixacao e uma por projeto: outro host que ainda usa a instalada nao perde a dele.
|
|
249
|
+
const instalada = (0, mcp_ship_transporte_1.fixacaoInstalada)(raiz);
|
|
250
|
+
if (instalada && instalada.transporte !== opcoes.transporteShip) {
|
|
251
|
+
const usa = transportesDosHosts(raiz).find(h => h.transporte === instalada.transporte);
|
|
252
|
+
if (usa)
|
|
253
|
+
throw Error(`mcp.install.conflict: transporte SHIP instalado e ${instalada.transporte} em ${usa.arquivo}; para trocar, remova a entrada orkastery de ${usa.arquivo} e reinstale; configuracao preservada`);
|
|
254
|
+
}
|
|
255
|
+
fixacao = (0, mcp_ship_transporte_1.prepararFixacao)({ raiz, transporte: opcoes.transporteShip, url: (0, mcp_ship_transporte_1.originUnicoMcp)(raiz), manifesto: (0, manifest_1.exigirManifesto)(raiz).manifesto.forja,
|
|
256
|
+
impressao: opcoes.impressaoSsh, sondas: opcoes.sondasDoTransporte ?? (0, mcp_ship_transporte_1.sondasPadraoDoTransporte)() });
|
|
257
|
+
linhas.push((0, mcp_ship_transporte_1.textoDaFixacao)(fixacao.fixacao, (0, mcp_ship_transporte_1.dirDaFixacao)(raiz), !!opcoes.dryRun));
|
|
258
|
+
}
|
|
259
|
+
else if (opcoes.transporteShip === undefined) {
|
|
260
|
+
let proposto = null;
|
|
261
|
+
try {
|
|
262
|
+
proposto = (0, mcp_ship_transporte_1.proporTransporte)((0, mcp_ship_transporte_1.originUnicoMcp)(raiz));
|
|
263
|
+
}
|
|
264
|
+
catch { /* sem origin unico: nada a propor */ }
|
|
265
|
+
if (proposto !== null && proposto !== 'github-ssh')
|
|
266
|
+
linhas.push((0, locale_1.msg)().forja.transporteShip.proposta(proposto));
|
|
267
|
+
}
|
|
268
|
+
const gravarFixacaoSePedida = () => { if (fixacao && !opcoes.dryRun)
|
|
269
|
+
(0, mcp_ship_transporte_1.gravarFixacao)((0, mcp_ship_transporte_1.dirDaFixacao)(raiz), fixacao); };
|
|
217
270
|
const pasta = opcoes.host === 'codex' ? path.join(raiz, '.codex') : raiz;
|
|
218
271
|
const validarPasta = () => {
|
|
219
272
|
try {
|
|
@@ -253,10 +306,18 @@ function instalarMcp(opcoes) {
|
|
|
253
306
|
}
|
|
254
307
|
if (existente) {
|
|
255
308
|
const legadoSSH = (opcoes.permissoesFilho ?? 'interactive') === 'interactive' && (opcoes.transporteShip ?? 'github-ssh') === 'github-ssh' && JSON.stringify(existente.args) === JSON.stringify(args.slice(0, -2));
|
|
256
|
-
if (existente.command !== comando || (JSON.stringify(existente.args) !== JSON.stringify(args) && !legadoSSH))
|
|
309
|
+
if (existente.command !== comando || (JSON.stringify(existente.args) !== JSON.stringify(args) && !legadoSSH)) {
|
|
310
|
+
// Trocar de transporte e reinstalar: a recusa diz qual esta instalado, e a fixacao dele fica como esta.
|
|
311
|
+
const argv = Array.isArray(existente.args) ? existente.args : [], i = argv.indexOf('--ship-transport');
|
|
312
|
+
const instalado = i >= 0 ? argv[i + 1] : undefined;
|
|
313
|
+
if (existente.command === comando && (0, mcp_transportes_1.ehTransporteShipMcp)(instalado) && instalado !== (opcoes.transporteShip ?? 'github-ssh'))
|
|
314
|
+
throw Error(`mcp.install.conflict: transporte SHIP instalado e ${instalado}; para trocar, remova a entrada orkastery de ${arquivo} e reinstale; configuracao preservada`);
|
|
257
315
|
throw Error('mcp.install.conflict: entrada orkastery divergente; configuracao preservada');
|
|
258
|
-
|
|
259
|
-
|
|
316
|
+
}
|
|
317
|
+
if (faltantes.length === 0 && !faltaEnvCodex) {
|
|
318
|
+
gravarFixacaoSePedida();
|
|
319
|
+
return { arquivo, estado: 'igual', dryRun: !!opcoes.dryRun, ativacao: 'pendente-no-cliente', transporte: linhas };
|
|
320
|
+
}
|
|
260
321
|
}
|
|
261
322
|
let proximo;
|
|
262
323
|
if (opcoes.host === 'codex') {
|
|
@@ -290,6 +351,8 @@ function instalarMcp(opcoes) {
|
|
|
290
351
|
proximo = JSON.stringify(dados, null, 2) + '\n';
|
|
291
352
|
}
|
|
292
353
|
if (!opcoes.dryRun) {
|
|
354
|
+
// A fixacao antes da config: um servidor que inicia entre as duas escritas acha a fixacao, nunca a falta dela.
|
|
355
|
+
gravarFixacaoSePedida();
|
|
293
356
|
validarPasta();
|
|
294
357
|
fs.mkdirSync(pasta, { recursive: true });
|
|
295
358
|
validarPasta();
|
|
@@ -306,8 +369,10 @@ function instalarMcp(opcoes) {
|
|
|
306
369
|
fs.rmSync(temp, { force: true });
|
|
307
370
|
}
|
|
308
371
|
}
|
|
309
|
-
return { arquivo, estado: anterior ? 'atualizado' : 'novo', dryRun: !!opcoes.dryRun, ativacao: 'pendente-no-cliente' };
|
|
372
|
+
return { arquivo, estado: anterior ? 'atualizado' : 'novo', dryRun: !!opcoes.dryRun, ativacao: 'pendente-no-cliente', transporte: linhas };
|
|
310
373
|
}
|
|
311
374
|
function textoInstalacaoMcp(r) {
|
|
312
|
-
|
|
375
|
+
const m = (0, locale_1.msg)().operacao.restante.mcp;
|
|
376
|
+
return `${r.dryRun ? m.simulacao : m.preparada} ${r.arquivo} (${r.estado}).\n${m.inicio}\n${m.ativacao}` +
|
|
377
|
+
(r.transporte?.length ? `\n${r.transporte.join('\n')}` : '');
|
|
313
378
|
}
|
|
@@ -0,0 +1,101 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.FERRAMENTAS_DO_NOCTUM = void 0;
|
|
4
|
+
exports.registrarFerramentasDoNoctum = registrarFerramentasDoNoctum;
|
|
5
|
+
/**
|
|
6
|
+
* RM-058, fatia N6 (D12 da ork-rm058n6): as ferramentas do MCP que levam o pedido de abertura do arco até o núcleo e
|
|
7
|
+
* a autorização do dono pelo diálogo nativo do host.
|
|
8
|
+
*
|
|
9
|
+
* - `ork_noctum_propor`: o pedido de abertura vira proposta, com o resumo e o hash; não autoriza nada.
|
|
10
|
+
* - `ork_noctum_autorizar` e `ork_noctum_revogar`: o diálogo nativo do host (`criarDialogoDoArco` da N1, com a elicitação
|
|
11
|
+
* do servidor). Só identificadores nos argumentos, e o esquema recusa qualquer campo a mais: argumento de ferramenta
|
|
12
|
+
* nunca é resposta do dono. Sem formulário no cliente, a recusa vem antes de qualquer escrita.
|
|
13
|
+
* - `ork_noctum_status`: o retrato do arco, somente leitura.
|
|
14
|
+
*
|
|
15
|
+
* Nenhuma delas existe no servidor fixado numa thread (a sessão de fase): quem abre ou autoriza arco é o dono, nunca a
|
|
16
|
+
* sessão filha. A fronteira do diálogo é a de `criarIngressoLocal`: a instalação do cliente MCP é confiável e o modelo não
|
|
17
|
+
* responde por ela (limite dito na N1).
|
|
18
|
+
*/
|
|
19
|
+
const zod_1 = require("zod");
|
|
20
|
+
const noctum_arco_1 = require("./noctum-arco");
|
|
21
|
+
const noctum_pergunta_1 = require("./noctum-pergunta");
|
|
22
|
+
const noctum_pergunta_canal_1 = require("./noctum-pergunta-canal");
|
|
23
|
+
const pulse_resposta_1 = require("./pulse-resposta");
|
|
24
|
+
const noctum_envelope_1 = require("./noctum-envelope");
|
|
25
|
+
const noctum_modo_1 = require("./noctum-modo");
|
|
26
|
+
exports.FERRAMENTAS_DO_NOCTUM = ['ork_noctum_propor', 'ork_noctum_autorizar', 'ork_noctum_revogar', 'ork_noctum_status'];
|
|
27
|
+
const resposta = (valor) => ({ content: [{ type: 'text', text: JSON.stringify(valor) }] });
|
|
28
|
+
const arco = zod_1.z.string().regex(noctum_envelope_1.ID_DO_ARCO);
|
|
29
|
+
function registrarFerramentasDoNoctum(registrar, o) {
|
|
30
|
+
const dialogo = (0, noctum_arco_1.criarDialogoDoArco)(o.raiz, { host: o.host, connectionId: o.conexao }, o.elicitar);
|
|
31
|
+
const exigirFormulario = () => {
|
|
32
|
+
if (!o.temFormulario()) {
|
|
33
|
+
throw Error('noctum.origem.sem-prova: este cliente não oferece o formulário nativo do host; o dono responde à pergunta do arco com a ' +
|
|
34
|
+
'letra em reply no Telegram, com o código no Telegram, ou por um host com diálogo nativo');
|
|
35
|
+
}
|
|
36
|
+
};
|
|
37
|
+
registrar('ork_noctum_propor', {
|
|
38
|
+
description: 'Grava a proposta do envelope de um arco #Noctum (o pedido de abertura com os valores do dono: janela, destinos, ' +
|
|
39
|
+
'orcamento, relatorio, trabalhos e capacidade) e devolve o resumo, o hash e a pergunta ao dono (codigo curto e alternativas), que sai ' +
|
|
40
|
+
'tambem pelo canal dele. Nao autoriza nada: quem autoriza e o dono, respondendo a pergunta com a letra (em reply no Telegram, com o ' +
|
|
41
|
+
'codigo no Telegram ou pelo dialogo nativo, ork_noctum_autorizar; o terminal nao grava resposta). Mostre a pergunta ao dono como ela vem; nunca responda por ele. Nunca ' +
|
|
42
|
+
'invente valor do dono: campo que falta volta listado na recusa.',
|
|
43
|
+
inputSchema: zod_1.z.object({ pedido: zod_1.z.record(zod_1.z.unknown()) }).strict(),
|
|
44
|
+
annotations: { readOnlyHint: false, destructiveHint: false },
|
|
45
|
+
}, async ({ pedido }) => {
|
|
46
|
+
o.carregar();
|
|
47
|
+
// RM-057 (resposta curta, D4 e D9): a proposta é a pergunta ao dono, e ela sai também pelo canal dele quando ele tem um.
|
|
48
|
+
const quando = new Date().toISOString();
|
|
49
|
+
const r = (0, noctum_arco_1.proporEnvelope)(o.raiz, pedido, quando, (0, pulse_resposta_1.codigosEmUso)(o.raiz));
|
|
50
|
+
const q = r.codigo ? (0, noctum_arco_1.perguntasDoArco)(o.raiz, r.arco, quando).find(x => x.codigo === r.codigo && x.situacao === 'pendente') : undefined;
|
|
51
|
+
const entrega = q ? (0, noctum_pergunta_canal_1.entregarPerguntaDoArco)(o.raiz, q, { quando }) : null;
|
|
52
|
+
return resposta({ ...r, autorizado: false,
|
|
53
|
+
comoAutorizar: q ? (0, noctum_pergunta_canal_1.comoResponderAoArco)(q) : [`o envelope já vale no arco ${r.arco}: não há o que autorizar`],
|
|
54
|
+
pergunta: q ? { codigo: q.codigo, prazo: q.prazo, entrega,
|
|
55
|
+
texto: (0, noctum_pergunta_1.textoDaPerguntaDoArco)(q, 'terminal', { quando, ...(entrega?.numero ? { numero: entrega.numero } : {}) }) } : null });
|
|
56
|
+
});
|
|
57
|
+
registrar('ork_noctum_autorizar', {
|
|
58
|
+
description: 'Apresenta ao dono, pelo dialogo nativo do host, o envelope proposto do arco para autorizar. Somente o arco e o hash; ' +
|
|
59
|
+
'nunca forneca resposta nos argumentos. Sem a escolha do dono no dialogo, nada muda.',
|
|
60
|
+
inputSchema: zod_1.z.object({ arco, envelopeSha256: zod_1.z.string().regex(/^[a-f0-9]{64}$/) }).strict(),
|
|
61
|
+
annotations: { readOnlyHint: false, destructiveHint: false },
|
|
62
|
+
}, async (args) => {
|
|
63
|
+
o.carregar();
|
|
64
|
+
exigirFormulario();
|
|
65
|
+
const e = await dialogo.autorizar(args.arco, args.envelopeSha256);
|
|
66
|
+
return resposta({ arco: e.arco, situacao: e.situacao, versao: e.versao, envelopeSha256: e.envelopeSha256 });
|
|
67
|
+
});
|
|
68
|
+
registrar('ork_noctum_revogar', {
|
|
69
|
+
description: 'Apresenta ao dono, pelo dialogo nativo do host, a revogacao do arco: terminal, nenhum efeito novo passa depois. Somente o ' +
|
|
70
|
+
'arco; nunca forneca resposta nos argumentos.',
|
|
71
|
+
inputSchema: zod_1.z.object({ arco }).strict(),
|
|
72
|
+
annotations: { readOnlyHint: false, destructiveHint: true },
|
|
73
|
+
}, async (args) => {
|
|
74
|
+
o.carregar();
|
|
75
|
+
exigirFormulario();
|
|
76
|
+
const e = await dialogo.revogar(args.arco);
|
|
77
|
+
return resposta({ arco: e.arco, situacao: e.situacao, versao: e.versao, envelopeSha256: e.envelopeSha256 });
|
|
78
|
+
});
|
|
79
|
+
registrar('ork_noctum_status', {
|
|
80
|
+
description: 'Retrato de um arco #Noctum, somente leitura: situacao, janela, consumo medido por unidade com as lacunas, fila, ' +
|
|
81
|
+
'fechamento, relatorio da manha com recibos e lacunas. Sem arco, a lista dos arcos. Transporte como vem: lacuna nao e zero.',
|
|
82
|
+
inputSchema: zod_1.z.object({ arco: arco.optional() }).strict(),
|
|
83
|
+
annotations: { readOnlyHint: true },
|
|
84
|
+
}, async (args) => {
|
|
85
|
+
const carregado = o.carregar();
|
|
86
|
+
if (!args.arco) {
|
|
87
|
+
return resposta({ arcos: (0, noctum_modo_1.listarArcos)(o.raiz).map(a => {
|
|
88
|
+
try {
|
|
89
|
+
return { arco: a, situacao: (0, noctum_arco_1.lerArco)(o.raiz, a)?.situacao ?? 'sem-proposta' };
|
|
90
|
+
}
|
|
91
|
+
catch {
|
|
92
|
+
return { arco: a, situacao: 'ilegivel' };
|
|
93
|
+
}
|
|
94
|
+
}) });
|
|
95
|
+
}
|
|
96
|
+
const r = (0, noctum_modo_1.retratoDoArco)(carregado, args.arco);
|
|
97
|
+
if (!r)
|
|
98
|
+
throw Error(`noctum.efeito.sem-autorizacao: o arco ${args.arco} não tem proposta`);
|
|
99
|
+
return resposta(r);
|
|
100
|
+
});
|
|
101
|
+
}
|
package/dist/mcp-server.js
CHANGED
|
@@ -57,17 +57,22 @@ const hitl_gates_1 = require("./hitl-gates");
|
|
|
57
57
|
const hitl_contract_1 = require("./hitl-contract");
|
|
58
58
|
const hitl_presentation_1 = require("./hitl-presentation");
|
|
59
59
|
const roadmap_status_1 = require("./roadmap-status");
|
|
60
|
+
const pulse_1 = require("./pulse");
|
|
60
61
|
const network_roadmap_1 = require("./network-roadmap");
|
|
61
62
|
const rede_status_1 = require("./rede-status");
|
|
62
63
|
const hitl_sessions_1 = require("./hitl-sessions");
|
|
63
64
|
const hitl_local_1 = require("./hitl-local");
|
|
65
|
+
const master_nota_local_1 = require("./master-nota-local");
|
|
66
|
+
const entrega_por_mod_1 = require("./entrega-por-mod");
|
|
64
67
|
const mcp_artifacts_1 = require("./mcp-artifacts");
|
|
65
68
|
const mcp_git_1 = require("./mcp-git");
|
|
66
69
|
const preflight_1 = require("./preflight");
|
|
67
70
|
const modos_1 = require("./modos");
|
|
71
|
+
const mcp_noctum_1 = require("./mcp-noctum");
|
|
68
72
|
const versao_1 = require("./versao");
|
|
69
73
|
const mcp_verify_1 = require("./mcp-verify");
|
|
70
74
|
const conducao_1 = require("./conducao");
|
|
75
|
+
const fila_pesada_1 = require("./fila-pesada");
|
|
71
76
|
const decisao_autonoma_1 = require("./decisao-autonoma");
|
|
72
77
|
const conducao_texto_1 = require("./conducao-texto");
|
|
73
78
|
const mcp_ship_1 = require("./mcp-ship");
|
|
@@ -79,6 +84,8 @@ const mcp_maestro_1 = require("./mcp-maestro");
|
|
|
79
84
|
const projeto_alvo_1 = require("./projeto-alvo");
|
|
80
85
|
const mcp_experiencia_1 = require("./mcp-experiencia");
|
|
81
86
|
const mcp_grafo_1 = require("./mcp-grafo");
|
|
87
|
+
const mcp_conhecimento_1 = require("./mcp-conhecimento");
|
|
88
|
+
const locale_1 = require("./locale");
|
|
82
89
|
const identidade = zod_1.z.string().min(1).max(80).regex(/^[a-zA-Z0-9][a-zA-Z0-9._-]*$/);
|
|
83
90
|
const daThread = zod_1.z.object({ threadId: identidade }).strict();
|
|
84
91
|
const daDecisao = daThread.extend({ pedidoId: identidade }).strict();
|
|
@@ -325,7 +332,7 @@ function criarServidorMcp(opcoes) {
|
|
|
325
332
|
.describe('Nome ou abbrev do projeto pedido; este servidor atende somente o projeto fixado na instalacao');
|
|
326
333
|
const ferramentas = new Map();
|
|
327
334
|
function registrarTool(nome, config, executar) {
|
|
328
|
-
if (opcoes.threadId && ['ork_thread_new', 'ork_phase_run', 'ork_request_decision', 'ork_preflight'].includes(nome))
|
|
335
|
+
if (opcoes.threadId && ['ork_thread_new', 'ork_phase_run', 'ork_request_decision', 'ork_request_master_note', 'ork_preflight'].includes(nome))
|
|
329
336
|
return;
|
|
330
337
|
const entrada = config.inputSchema.extend({ projeto: campoProjeto.optional() });
|
|
331
338
|
const schema = converterSchema(entrada, { $refStrategy: 'none' });
|
|
@@ -352,7 +359,11 @@ function criarServidorMcp(opcoes) {
|
|
|
352
359
|
return { ...resposta({ erro: e.message }), isError: true };
|
|
353
360
|
}
|
|
354
361
|
});
|
|
355
|
-
const
|
|
362
|
+
const conexaoLocal = (0, node_crypto_1.randomUUID)();
|
|
363
|
+
// RM-059 (F9, G3): a caixa de saida do Mensageiro de Sessoes so existe no servidor do dono do Claude Code, na memoria:
|
|
364
|
+
// a resposta a uma sessao claude-bg que entra pelo dialogo deste servidor sai por ela, e o texto nunca vai a disco.
|
|
365
|
+
const caixa = opcoes.host === 'claude-code' && !opcoes.threadId ? (0, entrega_por_mod_1.novaCaixaDeSaida)() : null;
|
|
366
|
+
const ingresso = (0, hitl_local_1.criarIngressoLocal)(raiz, { host: opcoes.host, connectionId: conexaoLocal }, async (pedido, signal) => {
|
|
356
367
|
carregar();
|
|
357
368
|
thread(pedido.thread);
|
|
358
369
|
// D12: pergunta nativa que aceita texto NAO vira menu. Um menu sobre pergunta aberta
|
|
@@ -374,11 +385,33 @@ function criarServidorMcp(opcoes) {
|
|
|
374
385
|
return { action: r.action };
|
|
375
386
|
const parsed = zod_1.z.object({ opcao: zod_1.z.string().min(1).max(limite) }).strict().parse(r.content);
|
|
376
387
|
return { action: 'accept', content: parsed };
|
|
377
|
-
});
|
|
378
|
-
|
|
388
|
+
}, { caixa });
|
|
389
|
+
// RM-059 (fatia F8, T8.1): a nota do MASTER pelo mesmo ingresso local. O formulario e fixo (a nota de 0 a 5 e o
|
|
390
|
+
// porque); sem a capacidade de formulario no cliente, a recusa vem antes de qualquer escrita.
|
|
391
|
+
const ingressoDaNota = (0, master_nota_local_1.criarIngressoDaNota)(raiz, { host: opcoes.host, connectionId: conexaoLocal }, async (apresentacao, signal) => {
|
|
392
|
+
carregar();
|
|
393
|
+
thread(apresentacao.thread);
|
|
394
|
+
const r = await server.elicitInput({ mode: 'form', message: apresentacao.mensagem,
|
|
395
|
+
requestedSchema: apresentacao.esquema }, { signal, timeout: 300000 });
|
|
396
|
+
return r.action === 'accept' ? { action: 'accept', content: r.content } : { action: r.action };
|
|
397
|
+
}, () => Boolean(server.getClientCapabilities()?.elicitation?.form));
|
|
398
|
+
server.onclose = () => { ingresso.fechar(); ingressoDaNota.fechar(); };
|
|
379
399
|
(0, company_brain_mcp_1.registerBrainTools)(registrarTool, carregar, thread, opcoes.brainWrites ?? []);
|
|
380
400
|
(0, mcp_experiencia_1.registrarConsultasExperiencia)(registrarTool, { raiz, carregar, transporte: opcoes.transporteShip ?? 'github-ssh' });
|
|
401
|
+
// RM-026 K7 (fatia 2): o conhecimento escrito, só leitura, do projeto fixado; também na sessão filha vinculada.
|
|
402
|
+
(0, mcp_conhecimento_1.registrarConsultasDoConhecimento)(registrarTool, carregar);
|
|
381
403
|
(0, mcp_maestro_1.registerMaestro)(registrarTool, { root: raiz, threadId: opcoes.threadId, load: carregar, checkThread: thread, tools: () => [...ferramentas.keys()] });
|
|
404
|
+
// RM-058 N6 (D12): o arco #Noctum no host do dono, com o dialogo nativo deste servidor; nunca na sessao de fase.
|
|
405
|
+
if (!opcoes.threadId)
|
|
406
|
+
(0, mcp_noctum_1.registrarFerramentasDoNoctum)(registrarTool, { raiz, carregar, host: opcoes.host, conexao: conexaoLocal,
|
|
407
|
+
elicitar: async (a, signal) => {
|
|
408
|
+
// RM-057 (resposta curta, D7 da ork-rm057respost): a pergunta no contrato curto e o envelope inteiro abaixo dela.
|
|
409
|
+
const r = await server.elicitInput({ mode: 'form', message: a.mensagem,
|
|
410
|
+
requestedSchema: { type: 'object', properties: { opcao: { type: 'string', title: 'Sua decisão', oneOf: a.opcoes.map(x => ({ const: x, title: x })) } },
|
|
411
|
+
required: ['opcao'] } }, { signal, timeout: 300000 });
|
|
412
|
+
return r.action === 'accept' ? { action: 'accept', content: r.content } : { action: r.action };
|
|
413
|
+
},
|
|
414
|
+
temFormulario: () => Boolean(server.getClientCapabilities()?.elicitation?.form) });
|
|
382
415
|
registrarTool('ork_preflight', { description: 'Preflight contextual por modo e bloco, sem inventário global/modelos. Não autoriza despacho nem comprova entrega.',
|
|
383
416
|
inputSchema: zod_1.z.object({ modo: modoDeConducao }).strict(), annotations: { readOnlyHint: true } }, async ({ modo }) => {
|
|
384
417
|
carregar();
|
|
@@ -411,6 +444,9 @@ function criarServidorMcp(opcoes) {
|
|
|
411
444
|
// I-36 (T18): a mesma recusa tipada do CLI, com o mesmo texto, sem reescrever nada no host.
|
|
412
445
|
if (e instanceof conducao_1.ErroDeConducao)
|
|
413
446
|
return { ...resposta(e.recusa), isError: true };
|
|
447
|
+
// RM-058 N2 (A6 do CHECK): a fila pesada que nao deu a vez no prazo responde como a conducao.
|
|
448
|
+
if (e instanceof fila_pesada_1.ErroDaFilaPesada)
|
|
449
|
+
return { ...resposta(e.recusa), isError: true };
|
|
414
450
|
throw e;
|
|
415
451
|
}
|
|
416
452
|
});
|
|
@@ -420,7 +456,7 @@ function criarServidorMcp(opcoes) {
|
|
|
420
456
|
annotations: { readOnlyHint: false, destructiveHint: false } }, async (args, extra) => {
|
|
421
457
|
thread(args.threadId);
|
|
422
458
|
livre(args.threadId);
|
|
423
|
-
const r = await (0, mcp_git_1.commitMcp)(raiz, args, extra.signal);
|
|
459
|
+
const r = await (0, mcp_git_1.commitMcp)(raiz, args, extra.signal, opcoes.dispatchId);
|
|
424
460
|
return { ...resposta(r), ...(r.ok ? {} : { isError: true }) };
|
|
425
461
|
});
|
|
426
462
|
const documento = daThread.extend({ tipo: zod_1.z.enum(['goal', 'plan', 'check']) }).strict();
|
|
@@ -449,15 +485,18 @@ function criarServidorMcp(opcoes) {
|
|
|
449
485
|
annotations: { readOnlyHint: false, destructiveHint: false } }, async ({ threadId, ...e }) => {
|
|
450
486
|
thread(threadId);
|
|
451
487
|
livre(threadId);
|
|
452
|
-
|
|
453
|
-
if (/^\s*(?:o\s+|a\s+)?(?:dono|owner|builder|maestro)\b/i.test(e.quemDecidiu))
|
|
454
|
-
throw Error('mcp.decision.author: quemDecidiu e a sessao que decidiu, nunca o dono');
|
|
488
|
+
const locale = (0, locale_1.resolverLocale)(carregar().manifesto.owner?.language).locale;
|
|
455
489
|
let registro;
|
|
456
490
|
try {
|
|
457
|
-
registro = (0,
|
|
458
|
-
|
|
459
|
-
|
|
460
|
-
|
|
491
|
+
registro = (0, locale_1.comLocale)(locale, () => {
|
|
492
|
+
// A sessao decide por ela: o rastro nao pode nascer assinado em nome do dono.
|
|
493
|
+
if (/^\s*(?:o\s+|a\s+)?(?:dono|owner|builder|maestro)\b/i.test(e.quemDecidiu))
|
|
494
|
+
throw new locale_1.ErroDoCatalogo((m) => m.decisao.autorMcp);
|
|
495
|
+
return (0, decisao_autonoma_1.registrarDecisao)(raiz, threadId, { decidido: e.decidido, porque: e.porque, comoMudar: e.comoMudar,
|
|
496
|
+
custoDeReverter: { agora: e.custoAgora, depois: e.custoDepois }, criterio: e.criterio, quemDecidiu: e.quemDecidiu,
|
|
497
|
+
evidencia: e.evidencia, ...(e.razao ? { razao: e.razao } : {}), ...(e.reverte ? { reverte: e.reverte } : {}), origem: 'mcp', host: opcoes.host,
|
|
498
|
+
despacho: opcoes.dispatchId ?? null });
|
|
499
|
+
});
|
|
461
500
|
}
|
|
462
501
|
catch (erro) {
|
|
463
502
|
throw Error((0, hitl_contract_1.recusaNaSuperficie)(erro.message, hitl_contract_1.CAMPOS_DA_DECISAO_NO_MCP));
|
|
@@ -492,7 +531,8 @@ function criarServidorMcp(opcoes) {
|
|
|
492
531
|
// RM-052: origem `instalacao`; o servidor fixado nao revela os outros projetos da maquina.
|
|
493
532
|
const consulta = (0, projeto_alvo_1.consultaDoProjeto)(c, { origem: 'instalacao', outrosProjetos: false,
|
|
494
533
|
lido: ['roadmap (docs/roadmap)', projeto_alvo_1.FORA_DA_CONSULTA.threadsDaMaquina], naoLido: [projeto_alvo_1.FORA_DA_CONSULTA.reservas, 'threads de outras máquinas (ork network roadmap)'] });
|
|
495
|
-
|
|
534
|
+
// RM-063 (F2): a mesma fila do `ork pulse`; a consulta que falha e dita no fecho, nunca "Nada agora".
|
|
535
|
+
const status = (0, roadmap_status_1.montarStatusDoRoadmap)(raiz, { projeto: c.manifesto.project.name, consulta, fila: (quando) => (0, pulse_1.filaDoDono)(c, { quando }) });
|
|
496
536
|
return resposta({ texto: (0, roadmap_status_1.textoDoStatusDoRoadmap)(status), status });
|
|
497
537
|
});
|
|
498
538
|
/**
|
|
@@ -501,9 +541,11 @@ function criarServidorMcp(opcoes) {
|
|
|
501
541
|
*/
|
|
502
542
|
registrarTool('ork_network_roadmap', { description: 'Roadmap da rede do projeto servido, somente leitura: o status report do roadmap (RM-048) com as threads de TODAS as maquinas, as reservas, as threads por maquina com a idade da batida, a fonte e a hora de cada parte e as lacunas tipadas. E a fonte do status do roadmap: transporte o texto como vem, sem reescrever nem resumir. Lacuna e "Nao consultado" sao o que nao foi lido: nunca conclua "roadmap vazio" nem "nenhuma maquina publicou" a partir deles. Este servidor le so o projeto fixado; os outros projetos vem do CLI ork network roadmap.',
|
|
503
543
|
inputSchema: zod_1.z.object({}).strict(), annotations: { readOnlyHint: true, destructiveHint: false, openWorldHint: true } }, async () => {
|
|
504
|
-
carregar();
|
|
505
|
-
|
|
506
|
-
|
|
544
|
+
const c = carregar();
|
|
545
|
+
// O panorama devolvido continua no contrato pt-BR; somente o texto humano segue o dono.
|
|
546
|
+
const panorama = (0, locale_1.comLocale)('pt-BR', () => (0, network_roadmap_1.montarPanoramaDaRede)({ fixado: raiz }));
|
|
547
|
+
const locale = (0, locale_1.resolverLocale)(c.manifesto.owner?.language).locale;
|
|
548
|
+
return resposta({ texto: (0, locale_1.comLocale)(locale, () => (0, network_roadmap_1.textoDoPanoramaDaRede)(panorama)), panorama });
|
|
507
549
|
});
|
|
508
550
|
/**
|
|
509
551
|
* RM-054 (fatia 3): as maquinas da pessoa (RM-053, `ork.rede-status/v1`), com a fonte, a batida e as
|
|
@@ -558,6 +600,38 @@ function criarServidorMcp(opcoes) {
|
|
|
558
600
|
thread(threadId);
|
|
559
601
|
return resposta(await ingresso.solicitar(threadId, pedidoId, extra.signal));
|
|
560
602
|
});
|
|
603
|
+
registrarTool('ork_request_master_note', { description: 'Pede ao dono, pelo dialogo nativo do host, a nota de 0 a 5 e o porque de uma entrega. Somente o threadId; nunca forneca nota nem porque nos argumentos.',
|
|
604
|
+
inputSchema: daThread, annotations: { readOnlyHint: false, destructiveHint: false } }, async ({ threadId }, extra) => {
|
|
605
|
+
thread(threadId);
|
|
606
|
+
return resposta(await ingressoDaNota.solicitar(threadId, extra.signal));
|
|
607
|
+
});
|
|
608
|
+
// RM-059 (F9, T9.1): o Mensageiro de Sessoes nas duas pontas. Nenhuma das duas entra no --allowedTools do modelo (D8):
|
|
609
|
+
// quem chama e o mod ork-mensageiro, e nenhuma responde, aprova ou abre pedido.
|
|
610
|
+
if (caixa)
|
|
611
|
+
registrarTool('ork_session_outbox', { description: 'Caixa de saida do Mensageiro de Sessoes nesta sessao do dono: lista as respostas do dono que esperam ir a uma sessao de fase claude-bg (listar marca o Mensageiro vivo) e anota o resultado do envio. Nao responde, nao aprova nem abre pedido.',
|
|
612
|
+
inputSchema: zod_1.z.object({ operacao: zod_1.z.enum(['listar', 'enviada']), threadId: identidade.optional(), envioId: zod_1.z.string().uuid().optional(),
|
|
613
|
+
entregue: zod_1.z.boolean().optional(), motivo: zod_1.z.string().max(1000).optional() }).strict(),
|
|
614
|
+
annotations: { readOnlyHint: false, destructiveHint: false } }, async (args) => {
|
|
615
|
+
if (args.operacao === 'listar') {
|
|
616
|
+
carregar();
|
|
617
|
+
return resposta({ contrato: entrega_por_mod_1.CONTRATO_DA_ENTREGA, entregas: caixa.listar(raiz) });
|
|
618
|
+
}
|
|
619
|
+
if (!args.threadId || !args.envioId || args.entregue === undefined)
|
|
620
|
+
throw Error('mcp.outbox.args: enviada exige threadId, envioId e entregue');
|
|
621
|
+
thread(args.threadId);
|
|
622
|
+
return resposta({ contrato: entrega_por_mod_1.CONTRATO_DA_ENTREGA, entrega: caixa.anotarEnvio(raiz, args.threadId, args.envioId, args.entregue, args.motivo) });
|
|
623
|
+
});
|
|
624
|
+
if (opcoes.threadId && opcoes.dispatchId) {
|
|
625
|
+
const despacho = opcoes.dispatchId;
|
|
626
|
+
registrarTool('ork_session_inbox', { description: 'Lado receptor do Mensageiro de Sessoes na sessao de fase deste despacho: confere e reserva uma vez a resposta do dono que chegou de outra sessao (conferir, com o prazo ate) e, depois de ela entrar na fila, grava o recibo (confirmar). A sessao sai do despacho deste servidor, nunca de argumento. Nao responde nem aprova pedido.',
|
|
627
|
+
inputSchema: daThread.extend({ operacao: zod_1.z.enum(['conferir', 'confirmar']), texto: zod_1.z.string().max(entrega_por_mod_1.LIMITE_DA_MENSAGEM),
|
|
628
|
+
envioId: zod_1.z.string().uuid().optional(), ate: zod_1.z.string().max(40).optional() }).strict(),
|
|
629
|
+
annotations: { readOnlyHint: false, destructiveHint: false } }, async ({ threadId, operacao, texto, envioId, ate }) => {
|
|
630
|
+
thread(threadId);
|
|
631
|
+
return resposta(operacao === 'conferir' ? (0, entrega_por_mod_1.conferirNoReceptor)(raiz, threadId, despacho, texto, ate)
|
|
632
|
+
: (0, entrega_por_mod_1.confirmarNoReceptor)(raiz, threadId, despacho, envioId, texto));
|
|
633
|
+
});
|
|
634
|
+
}
|
|
561
635
|
// RM-031 KG5 (D2): as tools do grafo so existem com a flag do manifesto da raiz no startup; sem ela, nada muda.
|
|
562
636
|
// CHECK rodada 1 (S8): o startup le so o manifesto, como antes; as conferencias de estado ficam na chamada.
|
|
563
637
|
if ((0, mcp_grafo_1.grafoLigado)((0, manifest_1.exigirManifesto)(raiz).manifesto))
|