@orkastery/cli 0.5.6 → 0.6.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/adapters/README.md +18 -0
- package/adapters/claude-code/.claude-plugin/plugin.json +1 -0
- package/adapters/claude-code/README.md +37 -5
- package/adapters/claude-code/agents/ork-check.md +1 -0
- package/adapters/claude-code/agents/ork-go.md +1 -0
- package/adapters/claude-code/agents/ork-goal.md +1 -0
- package/adapters/claude-code/agents/ork-master.md +1 -0
- package/adapters/claude-code/agents/ork-plan.md +1 -0
- package/adapters/claude-code/agents/ork-ship.md +1 -0
- package/adapters/claude-code/hooks/hooks.json +2 -1
- package/adapters/claude-code/hooks/ork-guard.js +15 -1
- package/adapters/claude-code/hooks/ork-resposta.js +91 -0
- package/adapters/claude-code/hooks/ork-sensor.js +18 -2
- package/adapters/claude-code/hooks/quota-signal.js +14 -0
- package/adapters/claude-code/mods/ork-mensageiro/.claude-plugin/plugin.json +14 -0
- package/adapters/claude-code/mods/ork-mensageiro/hooks/caixa.ts +215 -0
- package/adapters/claude-code/mods/ork-mensageiro/hooks/hooks.json +3 -0
- package/adapters/claude-code/mods/ork-mensageiro/hooks/painel.tsx +165 -0
- package/adapters/claude-code/mods/ork-mensageiro/hooks/recepcao.ts +256 -0
- package/adapters/claude-code/mods/ork-mensageiro/hooks/register.tsx +481 -0
- package/adapters/claude-code/mods/ork-mensageiro/orkastery-mod.json +5 -0
- package/adapters/claude-code/mods/ork-mensageiro/types/index.d.ts +85 -0
- package/adapters/claude-code/mods/ork-pista/hooks/ci.ts +9 -5
- package/adapters/claude-code/mods/ork-ritual/.claude-plugin/plugin.json +14 -0
- package/adapters/claude-code/mods/ork-ritual/hooks/hooks.json +3 -0
- package/adapters/claude-code/mods/ork-ritual/hooks/nota.ts +88 -0
- package/adapters/claude-code/mods/ork-ritual/hooks/register.tsx +494 -0
- package/adapters/claude-code/mods/ork-ritual/hooks/replay.tsx +271 -0
- package/adapters/claude-code/mods/ork-ritual/hooks/ritual.ts +218 -0
- package/adapters/claude-code/mods/ork-ritual/orkastery-mod.json +5 -0
- package/adapters/claude-code/mods/ork-ritual/types/index.d.ts +106 -0
- package/adapters/claude-code/mods/ork-sentinela/hooks/vigia.ts +1 -1
- package/adapters/codex/skills/ork/SKILL.md +2 -0
- package/adapters/hermes/README.md +64 -1
- package/adapters/hermes/bin/ork-conhecimento-colecoes.sh +14 -0
- package/adapters/hermes/bin/ork-conhecimento-listar.sh +15 -0
- package/adapters/hermes/bin/ork-conhecimento-mostrar.sh +16 -0
- package/adapters/hermes/bin/ork-conhecimento-verificar.sh +15 -0
- package/adapters/hermes/bin/ork-vigia-batida.py +127 -0
- package/adapters/hermes/hermes.plugin.json +4 -0
- package/adapters/hermes/hitl-ingress/__init__.py +101 -8
- package/adapters/hermes/skills/orkastery-devmaster/SKILL.md +2 -2
- package/adapters/openclaw/README.md +81 -9
- package/adapters/openclaw/bin/ork-vigia-batida.js +86 -0
- package/adapters/openclaw/dist/hitl-ingress.js +106 -9
- package/adapters/openclaw/dist/index.js +86 -0
- package/adapters/openclaw/openclaw.plugin.json +34 -4
- package/adapters/openclaw/package.json +2 -2
- package/adapters/openclaw/src/hitl-ingress.ts +103 -9
- package/adapters/openclaw/src/index.ts +94 -0
- package/assets/adapters-en/claude-code/README.md +403 -0
- package/assets/adapters-en/claude-code/agents/ork-check.md +33 -0
- package/assets/adapters-en/claude-code/agents/ork-go.md +33 -0
- package/assets/adapters-en/claude-code/agents/ork-goal.md +34 -0
- package/assets/adapters-en/claude-code/agents/ork-master.md +35 -0
- package/assets/adapters-en/claude-code/agents/ork-plan.md +33 -0
- package/assets/adapters-en/claude-code/agents/ork-ship.md +33 -0
- package/assets/adapters-en/claude-code/commands/check.md +46 -0
- package/assets/adapters-en/claude-code/commands/go.md +46 -0
- package/assets/adapters-en/claude-code/commands/goal.md +55 -0
- package/assets/adapters-en/claude-code/commands/master.md +54 -0
- package/assets/adapters-en/claude-code/commands/onboarding.md +22 -0
- package/assets/adapters-en/claude-code/commands/ork.md +126 -0
- package/assets/adapters-en/claude-code/commands/plan.md +47 -0
- package/assets/adapters-en/claude-code/commands/ship.md +45 -0
- package/assets/adapters-en/codex/skills/ork/SKILL.md +85 -0
- package/assets/adapters-en/hermes/README.md +273 -0
- package/assets/adapters-en/hermes/skills/orkastery-devmaster/SKILL.md +169 -0
- package/assets/references-en/README.md +25 -0
- package/assets/references-en/code-review-axes.md +82 -0
- package/assets/references-en/definition-of-done.md +74 -0
- package/assets/references-en/performance-checklist.md +53 -0
- package/assets/references-en/security-checklist.md +101 -0
- package/assets/references-en/testing-patterns.md +51 -0
- package/assets/security-scan/defaults/.golangci.yml +2 -0
- package/assets/security-scan/defaults/eslint.config.mjs +11 -0
- package/assets/security-scan/defaults/gitleaks.toml +3 -0
- package/assets/security-scan/defaults/ruff.toml +1 -0
- package/assets/security-scan/tools-agil.json +87 -0
- package/assets/security-scan/tools.json +625 -0
- package/assets/skills-en/core/onboarding/SKILL.md +58 -0
- package/assets/skills-en/core/orkastery-bootstrap/SKILL.md +119 -0
- package/assets/skills-en/core/thread-state/SKILL.md +88 -0
- package/assets/skills-en/governance/decision-triage/SKILL.md +65 -0
- package/assets/skills-en/governance/narrative-guardian/SKILL.md +66 -0
- package/assets/skills-en/governance/roadmap-keeper/SKILL.md +60 -0
- package/assets/skills-en/governance/scope-check-capability-map/SKILL.md +71 -0
- package/assets/skills-en/observability/thread-tracing/SKILL.md +63 -0
- package/assets/skills-en/phases/check-quality/SKILL.md +103 -0
- package/assets/skills-en/phases/go-implementation/SKILL.md +78 -0
- package/assets/skills-en/phases/goal-definition/SKILL.md +69 -0
- package/assets/skills-en/phases/master-metrics/SKILL.md +72 -0
- package/assets/skills-en/phases/plan-specification/SKILL.md +67 -0
- package/assets/skills-en/phases/security-remediation/SKILL.md +70 -0
- package/assets/skills-en/phases/ship-release/SKILL.md +71 -0
- package/assets/skills-en/reviewers/code-reviewer/SKILL.md +61 -0
- package/assets/skills-en/reviewers/security-auditor/SKILL.md +93 -0
- package/assets/skills-en/reviewers/test-engineer/SKILL.md +66 -0
- package/assets/skills-en/reviewers/web-performance-auditor/SKILL.md +63 -0
- package/dist/adapters/claude-bg.js +118 -4
- package/dist/adapters/codex-controller-worker.js +12 -5
- package/dist/adapters/codex-events.js +16 -4
- package/dist/adapters/codex.js +3 -1
- package/dist/atualizar-branch.js +245 -0
- package/dist/auditoria.js +13 -11
- package/dist/auditrun.js +51 -46
- package/dist/autorizacao-duravel.js +327 -0
- package/dist/board.js +94 -40
- package/dist/branch-de-estado.js +16 -8
- package/dist/busca-semantica.js +7 -5
- package/dist/catalogo.js +2 -1
- package/dist/changelog-reconciliacao.js +290 -0
- package/dist/check-agil.js +500 -0
- package/dist/check-modo.js +41 -0
- package/dist/check-paralelo.js +183 -0
- package/dist/ci.js +248 -45
- package/dist/ciclos.js +8 -6
- package/dist/claim-lint.js +12 -8
- package/dist/claims-conferir.js +47 -39
- package/dist/claims.js +10 -9
- package/dist/company-brain-client.js +10 -3
- package/dist/company-brain-migration.js +11 -5
- package/dist/conducao-batida.js +759 -0
- package/dist/conducao-sentinela.js +25 -8
- package/dist/conducao.js +84 -29
- package/dist/conhecimento-consulta.js +270 -0
- package/dist/conhecimento.js +111 -87
- package/dist/conta-esgotada.js +127 -0
- package/dist/dado-privado.js +816 -0
- package/dist/decisao-autonoma.js +5 -4
- package/dist/demo.js +14 -12
- package/dist/dependencias-da-worktree.js +25 -0
- package/dist/divida.js +38 -36
- package/dist/docs.js +81 -74
- package/dist/doctor-forja.js +345 -0
- package/dist/doctor-pulse-cron.js +113 -1
- package/dist/doctor.js +164 -6
- package/dist/dsn-da-memoria.js +417 -0
- package/dist/entrega-por-mod.js +503 -0
- package/dist/entrega-pr.js +143 -43
- package/dist/esgotamentos.js +13 -11
- package/dist/estado-thread.js +21 -18
- package/dist/evalrunner.js +35 -32
- package/dist/fabrica-batida.js +34 -21
- package/dist/fabrica-estado.js +13 -10
- package/dist/fix.js +21 -19
- package/dist/forja/adaptador.js +6 -0
- package/dist/forja/ambiente-de-ci.js +27 -0
- package/dist/forja/api.js +256 -0
- package/dist/forja/cache.js +89 -0
- package/dist/forja/cli.js +60 -0
- package/dist/forja/contrato.js +9 -0
- package/dist/forja/endereco.js +43 -0
- package/dist/forja/estado.js +22 -0
- package/dist/forja/executor.js +73 -0
- package/dist/forja/github/ci.js +95 -0
- package/dist/forja/github/dono-da-rede.js +18 -0
- package/dist/forja/github/metadados.js +15 -0
- package/dist/forja/github/pedidos.js +200 -0
- package/dist/forja/gitlab/ci.js +141 -0
- package/dist/forja/gitlab/consultas.js +59 -0
- package/dist/forja/gitlab/dono-da-rede.js +43 -0
- package/dist/forja/gitlab/metadados.js +15 -0
- package/dist/forja/gitlab/pedidos-abertos.js +158 -0
- package/dist/forja/gitlab/pedidos.js +141 -0
- package/dist/forja/produtor.js +32 -0
- package/dist/forja/registro.js +31 -0
- package/dist/forja/resolver.js +121 -0
- package/dist/forja/texto.js +13 -0
- package/dist/forja/versao.js +71 -0
- package/dist/forja.js +123 -80
- package/dist/handoff.js +23 -13
- package/dist/hitl-contract.js +46 -43
- package/dist/hitl-curto.js +37 -25
- package/dist/hitl-gates.js +13 -11
- package/dist/hitl-local-receipt.js +51 -0
- package/dist/hitl-local.js +11 -2
- package/dist/hitl-lock.js +5 -11
- package/dist/hitl-public-receipt.js +11 -0
- package/dist/hitl-resumo.js +44 -1
- package/dist/hitl-sessions.js +62 -9
- package/dist/hitl-texto-livre.js +7 -4
- package/dist/hitl.js +34 -31
- package/dist/horario.js +16 -0
- package/dist/hosts.js +104 -134
- package/dist/index.js +848 -548
- package/dist/indice-vetorial.js +14 -12
- package/dist/init.js +11 -2
- package/dist/integracoes-locais.js +2 -0
- package/dist/intelligence-graph-cli.js +123 -69
- package/dist/intelligence-graph-query.js +37 -22
- package/dist/leases.js +19 -18
- package/dist/ledger-stats.js +17 -16
- package/dist/ledger.js +31 -1
- package/dist/licoes.js +12 -11
- package/dist/locale-accounts.js +220 -0
- package/dist/locale-adapter.js +291 -0
- package/dist/locale-ajuda.js +76 -4
- package/dist/locale-audit.js +199 -0
- package/dist/locale-claims.js +213 -0
- package/dist/locale-conducao.js +138 -0
- package/dist/locale-conhecimento.js +181 -0
- package/dist/locale-decisao.js +205 -0
- package/dist/locale-docs.js +230 -0
- package/dist/locale-estado.js +101 -0
- package/dist/locale-forja.js +290 -0
- package/dist/locale-gerados.js +5 -0
- package/dist/locale-grafo.js +129 -0
- package/dist/locale-master.js +83 -0
- package/dist/locale-network.js +524 -0
- package/dist/locale-operacao-restante.js +931 -0
- package/dist/locale-projetos.js +100 -0
- package/dist/locale-prompts.js +194 -0
- package/dist/locale-pulse.js +140 -2
- package/dist/locale-reservas.js +87 -0
- package/dist/locale-retry.js +145 -6
- package/dist/locale-security-scan.js +69 -0
- package/dist/locale-setup.js +192 -0
- package/dist/locale-ship.js +169 -66
- package/dist/locale-thread.js +149 -5
- package/dist/locale-verify.js +80 -4
- package/dist/locale-worktree.js +246 -0
- package/dist/locale.js +553 -9
- package/dist/maestro-runtime.js +22 -3
- package/dist/manifest.js +287 -11
- package/dist/maquina-ociosa.js +211 -0
- package/dist/maquina.js +10 -5
- package/dist/master-nota-local.js +200 -0
- package/dist/master-nota.js +10 -2
- package/dist/master.js +118 -41
- package/dist/mcp-conhecimento.js +52 -0
- package/dist/mcp-experiencia.js +26 -5
- package/dist/mcp-install.js +73 -8
- package/dist/mcp-noctum.js +101 -0
- package/dist/mcp-server.js +82 -14
- package/dist/mcp-ship-transporte.js +977 -0
- package/dist/mcp-ship.js +68 -24
- package/dist/mcp-transportes.js +17 -0
- package/dist/memoria.js +63 -58
- package/dist/modos-migracao.js +8 -6
- package/dist/modos.js +17 -18
- package/dist/network-roadmap.js +85 -49
- package/dist/noctum-aceite.js +789 -0
- package/dist/noctum-arco.js +540 -33
- package/dist/noctum-capacidade.js +3 -3
- package/dist/noctum-changelog.js +399 -0
- package/dist/noctum-cli.js +482 -0
- package/dist/noctum-coordenacao.js +1225 -0
- package/dist/noctum-entrega.js +1169 -0
- package/dist/noctum-envelope.js +252 -16
- package/dist/noctum-execucao.js +95 -23
- package/dist/noctum-fechamento.js +405 -0
- package/dist/noctum-fila.js +43 -9
- package/dist/noctum-guarda.js +256 -0
- package/dist/noctum-integracao.js +507 -0
- package/dist/noctum-maquinas.js +383 -0
- package/dist/noctum-medicao.js +450 -0
- package/dist/noctum-modo.js +362 -0
- package/dist/noctum-pergunta-canal.js +96 -0
- package/dist/noctum-pergunta.js +115 -0
- package/dist/noctum-provas.js +838 -0
- package/dist/noctum-reconciliacao.js +591 -0
- package/dist/noctum-registro.js +215 -0
- package/dist/noctum-relatorio.js +827 -0
- package/dist/noctum-resposta.js +207 -0
- package/dist/noctum-sessoes-em-voo.js +93 -0
- package/dist/noctum-supervisao.js +649 -0
- package/dist/noctum-terminal.js +459 -0
- package/dist/noctum-transporte.js +655 -0
- package/dist/noctum-vigia.js +639 -0
- package/dist/ocupacao.js +3 -1
- package/dist/onboarding.js +16 -5
- package/dist/orkmind.js +39 -23
- package/dist/orquestracao.js +31 -35
- package/dist/parado-no-condutor.js +146 -124
- package/dist/phase.js +53 -27
- package/dist/policies.js +33 -0
- package/dist/postura-local.js +4 -3
- package/dist/procedencia.js +9 -14
- package/dist/projeto-alvo.js +59 -20
- package/dist/prompts.js +136 -42
- package/dist/prova-minima.js +5 -6
- package/dist/pulse-cadencia.js +5 -4
- package/dist/pulse-consentimento.js +53 -1
- package/dist/pulse-delivery.js +143 -27
- package/dist/pulse-resposta.js +368 -4
- package/dist/pulse.js +136 -3
- package/dist/ratelimit.js +12 -4
- package/dist/recall.js +14 -13
- package/dist/rede-adesao.js +13 -8
- package/dist/rede-forja.js +108 -24
- package/dist/rede-status.js +63 -45
- package/dist/rede.js +86 -46
- package/dist/retomada-checkpoint.js +101 -0
- package/dist/retry.js +228 -73
- package/dist/roadmap-reservas.js +32 -32
- package/dist/runtime-ambiente.js +5 -0
- package/dist/runtime-context.js +117 -43
- package/dist/runtime-escada.js +423 -0
- package/dist/runtime-profiles.js +103 -46
- package/dist/saida-segura.js +3 -2
- package/dist/security-scan/agil.js +355 -0
- package/dist/security-scan/cli.js +76 -0
- package/dist/security-scan/compare.js +149 -0
- package/dist/security-scan/config.js +93 -0
- package/dist/security-scan/detect.js +97 -0
- package/dist/security-scan/executor.js +188 -0
- package/dist/security-scan/guard.js +180 -0
- package/dist/security-scan/imagem-de-lint.js +96 -0
- package/dist/security-scan/normalize/actionlint.js +12 -0
- package/dist/security-scan/normalize/eslint.js +12 -0
- package/dist/security-scan/normalize/gitleaks.js +13 -0
- package/dist/security-scan/normalize/golangci-lint.js +13 -0
- package/dist/security-scan/normalize/govulncheck.js +36 -0
- package/dist/security-scan/normalize/index.js +25 -0
- package/dist/security-scan/normalize/npm-audit.js +30 -0
- package/dist/security-scan/normalize/osv-scanner.js +32 -0
- package/dist/security-scan/normalize/oxlint.js +51 -0
- package/dist/security-scan/normalize/pip-audit.js +16 -0
- package/dist/security-scan/normalize/ruff.js +12 -0
- package/dist/security-scan/normalize/semgrep.js +20 -0
- package/dist/security-scan/normalize/trivy.js +33 -0
- package/dist/security-scan/normalize/util.js +204 -0
- package/dist/security-scan/normalize/zizmor.js +19 -0
- package/dist/security-scan/report.js +156 -0
- package/dist/security-scan/run.js +448 -0
- package/dist/security-scan/tools.js +62 -0
- package/dist/security-scan/trabalhador.js +74 -0
- package/dist/security-scan/types.js +15 -0
- package/dist/session-events.js +19 -2
- package/dist/session-watcher-claude.js +74 -19
- package/dist/session-watcher.js +156 -10
- package/dist/sessoes-contas.js +9 -0
- package/dist/sessoes-inventario.js +1 -1
- package/dist/sessoes.js +25 -23
- package/dist/setup.js +59 -58
- package/dist/ship-publicar.js +263 -92
- package/dist/ship.js +160 -17
- package/dist/superficie.js +14 -11
- package/dist/thread-close.js +9 -9
- package/dist/thread.js +121 -18
- package/dist/tokens.js +15 -11
- package/dist/trabalho-thread.js +297 -0
- package/dist/transporte-do-canal.js +189 -0
- package/dist/types.js +12 -1
- package/dist/util.js +5 -2
- package/dist/varredura-acoes.js +507 -0
- package/dist/verify.js +472 -29
- package/dist/worktree-local.js +12 -10
- package/dist/worktree.js +81 -85
- package/eval/casos/check-quality.json +77 -0
- package/eval/casos/security-auditor.json +148 -0
- package/eval/casos/security-remediation.json +161 -0
- package/eval/fixtures/security-scan/README.md +8 -0
- package/eval/fixtures/security-scan/go/.github/workflows/ci.yml +12 -0
- package/eval/fixtures/security-scan/go/Dockerfile +4 -0
- package/eval/fixtures/security-scan/go/README.md +4 -0
- package/eval/fixtures/security-scan/go/config.go +4 -0
- package/eval/fixtures/security-scan/go/go.mod +5 -0
- package/eval/fixtures/security-scan/go/go.sum +2 -0
- package/eval/fixtures/security-scan/go/main.go +31 -0
- package/eval/fixtures/security-scan/js/.github/workflows/ci.yml +12 -0
- package/eval/fixtures/security-scan/js/Dockerfile +3 -0
- package/eval/fixtures/security-scan/js/README.md +4 -0
- package/eval/fixtures/security-scan/js/package-lock.json +844 -0
- package/eval/fixtures/security-scan/js/package.json +10 -0
- package/eval/fixtures/security-scan/js/src/config.js +4 -0
- package/eval/fixtures/security-scan/js/src/server.js +17 -0
- package/eval/fixtures/security-scan/js/src/util.ts +4 -0
- package/eval/fixtures/security-scan/js/tsconfig.json +4 -0
- package/eval/fixtures/security-scan/python/.github/workflows/ci.yml +12 -0
- package/eval/fixtures/security-scan/python/Dockerfile +3 -0
- package/eval/fixtures/security-scan/python/README.md +4 -0
- package/eval/fixtures/security-scan/python/app/__init__.py +0 -0
- package/eval/fixtures/security-scan/python/app/config.py +2 -0
- package/eval/fixtures/security-scan/python/app/main.py +19 -0
- package/eval/fixtures/security-scan/python/requirements.txt +1 -0
- package/package.json +9 -4
- package/references/security-checklist.md +3 -3
- package/skills/README.md +1 -0
- package/skills/core/orkastery-bootstrap/SKILL.md +2 -2
- package/skills/phases/check-quality/SKILL.md +16 -0
- package/skills/phases/go-implementation/SKILL.md +6 -0
- package/skills/phases/security-remediation/SKILL.md +70 -0
- package/skills/reviewers/security-auditor/SKILL.md +25 -0
package/dist/hitl-resumo.js
CHANGED
|
@@ -1,7 +1,9 @@
|
|
|
1
1
|
"use strict";
|
|
2
2
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
-
exports.SEM_PERGUNTA_COM_IMPEDIMENTO = exports.SEM_PERGUNTA_NO_RESUMO = exports.TETO_DE_DECISOES_DETALHADAS = exports.TETO_DE_ESPERAS_POR_MAQUINA = exports.TETO_DE_IMPEDIMENTOS = exports.TETO_DE_PARADOS_NO_CONDUTOR = exports.TETO_DE_THREADS_NOMEADAS = exports.PERGUNTA_DO_RESUMO = exports.CONTRATO_RESUMO = void 0;
|
|
3
|
+
exports.SEM_PERGUNTA_COM_IMPEDIMENTO = exports.SEM_PERGUNTA_NO_RESUMO = exports.TETO_DE_DECISOES_DETALHADAS = exports.TETO_DE_ESPERAS_POR_MAQUINA = exports.TETO_DE_IMPEDIMENTOS = exports.TETO_DE_PARADOS_NO_CONDUTOR = exports.TETO_DA_VARREDURA = exports.TETO_DE_THREADS_NOMEADAS = exports.PERGUNTA_DO_RESUMO = exports.CONTRATO_RESUMO = void 0;
|
|
4
4
|
exports.resumirHitl = resumirHitl;
|
|
5
|
+
exports.linhasDaOciosidade = linhasDaOciosidade;
|
|
6
|
+
exports.linhasDaVarredura = linhasDaVarredura;
|
|
5
7
|
exports.linhaDoParadoNoCondutor = linhaDoParadoNoCondutor;
|
|
6
8
|
exports.linhasDoCondutor = linhasDoCondutor;
|
|
7
9
|
exports.linhasDosImpedimentos = linhasDosImpedimentos;
|
|
@@ -64,9 +66,46 @@ function resumirHitl(itens, opcoes) {
|
|
|
64
66
|
desdeEm: p.desdeEm, proximoPasso: p.proximoPasso })) } : {}),
|
|
65
67
|
...(opcoes.impedimentosDoDono?.length ? { impedimentosDoDono: opcoes.impedimentosDoDono.map(i => ({ thread: i.thread,
|
|
66
68
|
fase: i.fase, comando: i.comando, retry: i.retry })) } : {}),
|
|
69
|
+
...(opcoes.acoesDaVarredura?.length ? { acoesDaVarredura: opcoes.acoesDaVarredura.map(a => ({ ...a })) } : {}),
|
|
70
|
+
...(opcoes.feitasPelaVarredura?.length ? { feitasPelaVarredura: opcoes.feitasPelaVarredura.map(a => ({ ...a })) } : {}),
|
|
71
|
+
...(opcoes.maquinaOciosa ? { maquinaOciosa: { ...opcoes.maquinaOciosa, sugeridas: opcoes.maquinaOciosa.sugeridas.map(x => ({ ...x })) } } : {}),
|
|
67
72
|
...(opcoes.hitlDeConducao?.acimaDaMeta ? { hitlDeConducao: opcoes.hitlDeConducao } : {}),
|
|
68
73
|
};
|
|
69
74
|
}
|
|
75
|
+
/**
|
|
76
|
+
* RM-063 (F6): a maquina ociosa no resumo, igual nos dois canais: as vagas livres, o trabalho reservado parado e as
|
|
77
|
+
* proximas threads sugeridas, cada uma com o comando.
|
|
78
|
+
*/
|
|
79
|
+
function linhasDaOciosidade(r, marcador, recuo) {
|
|
80
|
+
const o = r.maquinaOciosa;
|
|
81
|
+
if (!o)
|
|
82
|
+
return [];
|
|
83
|
+
return [`${marcador}Máquina ociosa: ${semQuebra(o.maquina)}, com ${o.livres} de ${o.limite} vagas livres e ${o.reservados} ` +
|
|
84
|
+
`${o.reservados === 1 ? 'item reservado parado' : 'itens reservados parados'}. Próximas sugeridas:`,
|
|
85
|
+
...o.sugeridas.map(x => `${recuo}• ${semQuebra(x.item)}${x.thread ? ` (${semQuebra(x.thread)})` : ''}: ${uma(x.passo, 120)} ` +
|
|
86
|
+
`(\`${semQuebra(x.comando)}\`)`)];
|
|
87
|
+
}
|
|
88
|
+
/** Quantas acoes da varredura o resumo detalha antes de contar o resto. */
|
|
89
|
+
exports.TETO_DA_VARREDURA = 5;
|
|
90
|
+
/**
|
|
91
|
+
* RM-063 (F5): as acoes da varredura no resumo, iguais nos dois canais: as que esperam o dono, com o comando (o
|
|
92
|
+
* incidente do PR #112, mesclado e dois dias sem registro sem nenhum canal avisar), e as que ela fez sozinha.
|
|
93
|
+
*/
|
|
94
|
+
function linhasDaVarredura(r, marcadores, recuo) {
|
|
95
|
+
const linhas = [];
|
|
96
|
+
const bloco = (lista, titulo) => {
|
|
97
|
+
if (!lista.length)
|
|
98
|
+
return;
|
|
99
|
+
const mostradas = lista.slice(0, exports.TETO_DA_VARREDURA), sobra = lista.length - mostradas.length;
|
|
100
|
+
if (linhas.length)
|
|
101
|
+
linhas.push('');
|
|
102
|
+
linhas.push(titulo, ...mostradas.map(a => `${recuo}• ${semQuebra(a.thread)}: ${uma(a.texto, 140)}` +
|
|
103
|
+
(a.comando ? ` (\`${semQuebra(a.comando)}\`)` : '')), ...(sobra > 0 ? [`${recuo}e mais ${sobra}: ork pulse`] : []));
|
|
104
|
+
};
|
|
105
|
+
bloco(r.acoesDaVarredura ?? [], `${marcadores.dono}Arrumação que a varredura faria com a sua autorização: ${(r.acoesDaVarredura ?? []).length}`);
|
|
106
|
+
bloco(r.feitasPelaVarredura ?? [], `${marcadores.feitas}A varredura fez sozinha, pela sua autorização: ${(r.feitasPelaVarredura ?? []).length}`);
|
|
107
|
+
return linhas;
|
|
108
|
+
}
|
|
70
109
|
/** Quantas linhas do condutor o resumo mostra antes de contar o resto. */
|
|
71
110
|
exports.TETO_DE_PARADOS_NO_CONDUTOR = 5;
|
|
72
111
|
/**
|
|
@@ -233,7 +272,9 @@ function textoTelegram(r, codigo) {
|
|
|
233
272
|
...(r.tecnicos ? [`🔧 ${linhaDosTecnicos(r)}`] : []),
|
|
234
273
|
...(r.consertos ? [`🔧 ${linhaDosConsertos(r.consertos)}`] : []),
|
|
235
274
|
...linhaDoHitlParado(r).map(l => `⏳ ${l}`),
|
|
275
|
+
...(r.maquinaOciosa ? ['', ...linhasDaOciosidade(r, '💤 ', ' ')] : []),
|
|
236
276
|
...(r.impedimentosDoDono?.length ? ['', ...linhasDosImpedimentos(r, '🔑 ', ' ')] : []),
|
|
277
|
+
...(r.acoesDaVarredura?.length || r.feitasPelaVarredura?.length ? ['', ...linhasDaVarredura(r, { dono: '🧹 ', feitas: '🤖 ' }, ' ')] : []),
|
|
237
278
|
...(r.paradosNoCondutor?.length ? ['', ...linhasDoCondutor(r, '🚧 ', ' ')] : []),
|
|
238
279
|
...(r.acumuladas ? ['', `📥 ${linhaDoLoteGuardado(r.acumuladas)}`] : []),
|
|
239
280
|
...(r.decisoes.length || r.acimaDoLimiar.length ? ['', ...linhasDasDecisoes(r, '🧭 ', ' ')] : []),
|
|
@@ -266,7 +307,9 @@ function textoTerminal(r, codigo) {
|
|
|
266
307
|
...(r.tecnicos ? ['', ` ${linhaDosTecnicos(r)}`] : []),
|
|
267
308
|
...(r.consertos ? ['', ` ${linhaDosConsertos(r.consertos)}`] : []),
|
|
268
309
|
...linhaDoHitlParado(r).flatMap(l => ['', ` ${l}`]),
|
|
310
|
+
...(r.maquinaOciosa ? ['', ...linhasDaOciosidade(r, ' ', ' ')] : []),
|
|
269
311
|
...(r.impedimentosDoDono?.length ? ['', ...linhasDosImpedimentos(r, ' ', ' ')] : []),
|
|
312
|
+
...(r.acoesDaVarredura?.length || r.feitasPelaVarredura?.length ? ['', ...linhasDaVarredura(r, { dono: ' ', feitas: ' ' }, ' ')] : []),
|
|
270
313
|
...(r.paradosNoCondutor?.length ? ['', ...linhasDoCondutor(r, ' ', ' ')] : []),
|
|
271
314
|
...(r.acumuladas ? ['', ` ${linhaDoLoteGuardado(r.acumuladas)}`] : []),
|
|
272
315
|
...(r.decisoes.length || r.acimaDoLimiar.length ? ['', ...linhasDasDecisoes(r, '', ' ').map(l => l.startsWith(' ') ? l : ` ${l}`)] : []),
|
package/dist/hitl-sessions.js
CHANGED
|
@@ -33,6 +33,7 @@ var __importStar = (this && this.__importStar) || (function () {
|
|
|
33
33
|
};
|
|
34
34
|
})();
|
|
35
35
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
36
|
+
exports.impedimentoDaEntrega = impedimentoDaEntrega;
|
|
36
37
|
exports.abrirPedidoSessao = abrirPedidoSessao;
|
|
37
38
|
exports.responderSessao = responderSessao;
|
|
38
39
|
exports.responderSessaoLocal = responderSessaoLocal;
|
|
@@ -56,15 +57,37 @@ const hitl_ingress_receipt_1 = require("./hitl-ingress-receipt");
|
|
|
56
57
|
const hitl_1 = require("./hitl");
|
|
57
58
|
const hitl_canais_1 = require("./hitl-canais");
|
|
58
59
|
const codex_question_1 = require("./adapters/codex-question");
|
|
60
|
+
const entrega_por_mod_1 = require("./entrega-por-mod");
|
|
59
61
|
const uuidCompleto = (s) => /^[a-f0-9]{8}(?:-[a-f0-9]{4}){3}-[a-f0-9]{12}$/i.test(s);
|
|
60
62
|
const reciboDaProva = (r) => (0, node_crypto_1.createHash)('sha256').update(r.prova).digest('hex');
|
|
61
63
|
const mesmaInstancia = (a, b) => a.sessionId === b.sessionId && a.runtime === b.runtime && a.cwd === b.cwd && a.instancia === b.instancia;
|
|
62
|
-
|
|
63
|
-
|
|
64
|
+
/**
|
|
65
|
+
* O controle que responde a sessao. RM-059 (F9, D2): para `claude-bg`, o controle por mod do Mensageiro de Sessoes,
|
|
66
|
+
* com a caixa de saida do servidor do dono quando a resposta entrou por ele; o `controleNativo` dos outros
|
|
67
|
+
* chamadores (conducao, superacao, maestro), que so consultam e param, segue igual.
|
|
68
|
+
*/
|
|
69
|
+
function controleDeResposta(raiz, id, sessionId, runtime, controle, caixa) {
|
|
70
|
+
const ctl = controle ?? (runtime === 'claude-bg' ? (0, entrega_por_mod_1.controleClaudeBgPorMod)(raiz, id, sessionId, caixa)
|
|
71
|
+
: controleNativo(runtime, raiz, id, sessionId));
|
|
64
72
|
if (!ctl.enviar || !ctl.confirmar)
|
|
65
73
|
throw new Error('runtime.unavailable: adapter não comprova entrada e recibo na mesma sessão; attach/resume não são fallback');
|
|
66
74
|
return ctl;
|
|
67
75
|
}
|
|
76
|
+
/**
|
|
77
|
+
* RM-059 (F9, D4): o que impede de levar agora a resposta de um pedido de sessao `claude-bg` (sem caixa de saida no
|
|
78
|
+
* processo, ou sem Mensageiro vivo nela), conferido antes do dialogo e antes de gravar o ingresso. `null` para os
|
|
79
|
+
* outros alvos e runtimes, que seguem o caminho de antes.
|
|
80
|
+
*/
|
|
81
|
+
function impedimentoDaEntrega(raiz, id, pedido, controle, caixa) {
|
|
82
|
+
if (pedido.alvo.tipo !== 'session' || pedido.alvo.runtime !== 'claude-bg')
|
|
83
|
+
return null;
|
|
84
|
+
try {
|
|
85
|
+
return controleDeResposta(raiz, id, pedido.alvo.sessionId, pedido.alvo.runtime, controle, caixa).impedimentoDoEnvio?.() ?? null;
|
|
86
|
+
}
|
|
87
|
+
catch (e) {
|
|
88
|
+
return e.message;
|
|
89
|
+
}
|
|
90
|
+
}
|
|
68
91
|
function observarBloqueio(ctl, sessionId, runtime, cwd) {
|
|
69
92
|
const consulta = ctl.consultar();
|
|
70
93
|
if (!consulta.ok)
|
|
@@ -73,7 +96,8 @@ function observarBloqueio(ctl, sessionId, runtime, cwd) {
|
|
|
73
96
|
const s = matches[0];
|
|
74
97
|
if (matches.length !== 1 || !s || s.runtime !== runtime || s.cwd !== cwd || s.estado !== 'blocked' ||
|
|
75
98
|
!s.instancia || !s.bloqueio)
|
|
76
|
-
throw new Error('runtime.unavailable: identidade, cwd e prompt bloqueado exatos não comprovados'
|
|
99
|
+
throw new Error('runtime.unavailable: identidade, cwd e prompt bloqueado exatos não comprovados' +
|
|
100
|
+
(matches.length === 1 && s?.limitacao ? ` (${s.limitacao.codigo})` : ''));
|
|
77
101
|
return { sessionId: s.sessionId, runtime: s.runtime, cwd: s.cwd, estado: s.estado, instancia: s.instancia, bloqueio: s.bloqueio, perguntaNativa: s.perguntaNativa };
|
|
78
102
|
}
|
|
79
103
|
/** Cria somente um pedido vinculado ao despacho corrente e ao prompt nativo observado. */
|
|
@@ -94,7 +118,18 @@ function abrirPedidoSessao(raiz, id, sessionId, opcoes, controle) {
|
|
|
94
118
|
if (!mesmaInstancia(sessao, revalidada) || sessao.bloqueio !== revalidada.bloqueio)
|
|
95
119
|
throw new Error('prompt ou instância mudou durante o pedido');
|
|
96
120
|
const nativa = sessao.perguntaNativa;
|
|
97
|
-
if (!nativa
|
|
121
|
+
if (!nativa) {
|
|
122
|
+
// RM-059 (F9): o codigo da limitacao (turno ausente, pergunta longa) diz ao operador por que nao abriu.
|
|
123
|
+
let codigo;
|
|
124
|
+
try {
|
|
125
|
+
codigo = ctl.consultar().sessoes.find(s => s.sessionId === sessionId)?.limitacao?.codigo;
|
|
126
|
+
}
|
|
127
|
+
catch {
|
|
128
|
+
codigo = undefined;
|
|
129
|
+
}
|
|
130
|
+
throw new Error('runtime.unavailable: conteúdo nativo da pergunta não comprovado' + (codigo ? ` (${codigo})` : ''));
|
|
131
|
+
}
|
|
132
|
+
if (JSON.stringify(nativa) !== JSON.stringify(revalidada.perguntaNativa) ||
|
|
98
133
|
(0, codex_question_1.projetarPergunta)({ isBlocking: true, questions: [nativa] }).sha256 !== nativa.sha256)
|
|
99
134
|
throw new Error('runtime.unavailable: conteúdo nativo da pergunta não comprovado');
|
|
100
135
|
if (opcoes.pergunta !== undefined && opcoes.pergunta !== nativa.question)
|
|
@@ -156,7 +191,7 @@ function orientacaoDaResposta(tipo, quantasOpcoes) {
|
|
|
156
191
|
* O núcleo da entrega, comum aos quatro canais: conferência do vínculo nativo, reserva
|
|
157
192
|
* durável, envio único e confirmação correlacionada. Nenhum canal ganha atalho aqui.
|
|
158
193
|
*/
|
|
159
|
-
function entregarNaSessao(raiz, id, pedido, prov, controle) {
|
|
194
|
+
function entregarNaSessao(raiz, id, pedido, prov, controle, caixa) {
|
|
160
195
|
if (pedido.alvo.tipo !== 'session')
|
|
161
196
|
throw new Error('pedido destina-se ao gate, não à sessão');
|
|
162
197
|
const pedidoId = pedido.id;
|
|
@@ -169,7 +204,7 @@ function entregarNaSessao(raiz, id, pedido, prov, controle) {
|
|
|
169
204
|
!sessao.instancia || !sessao.bloqueio || sessao.cwd !== path.resolve((0, thread_1.lerThread)(raiz, id).worktree ?? raiz)) {
|
|
170
205
|
throw new Error('runtime.unavailable: pedido sem vínculo nativo exato');
|
|
171
206
|
}
|
|
172
|
-
const ctl = controleDeResposta(raiz, id, sessionId, runtime, controle);
|
|
207
|
+
const ctl = controleDeResposta(raiz, id, sessionId, runtime, controle, caixa);
|
|
173
208
|
const pendente = eventos.find(e => e.tipo === 'session_answer_sending' && e.pedidoId === pedidoId);
|
|
174
209
|
if (pendente && (pendente.recibo !== prov.recibo || pendente.mensagem !== prov.mensagem || pendente.autorizadoPor !== prov.autorizadoPor)) {
|
|
175
210
|
throw new Error('envio já iniciado; resposta divergente recusada');
|
|
@@ -180,12 +215,18 @@ function entregarNaSessao(raiz, id, pedido, prov, controle) {
|
|
|
180
215
|
const entrega = { contrato: 'ork.session-answer/v1',
|
|
181
216
|
envioId: pendente ? String(pendente.envioId) : (0, node_crypto_1.randomUUID)(), pedidoId, thread: id, fase: pedido.fase, sessao, recibo: prov.recibo };
|
|
182
217
|
if (!pendente) {
|
|
218
|
+
// RM-059 (F9, D4): sem quem leve a mensagem (sem caixa de saida, sem Mensageiro vivo), nada se reserva.
|
|
219
|
+
const impedimento = ctl.impedimentoDoEnvio?.() ?? null;
|
|
220
|
+
if (impedimento)
|
|
221
|
+
throw new Error(impedimento);
|
|
183
222
|
for (let i = 0; i < 2; i++) {
|
|
184
223
|
const atual = observarBloqueio(ctl, sessionId, runtime, sessao.cwd);
|
|
185
224
|
if (!mesmaInstancia(atual, sessao) || atual.bloqueio !== sessao.bloqueio || JSON.stringify(atual.perguntaNativa) !== JSON.stringify(sessao.perguntaNativa))
|
|
186
225
|
throw new Error('prompt ou instância mudou antes do envio');
|
|
187
226
|
}
|
|
188
|
-
(
|
|
227
|
+
// RM-059 (F9, D3): no envio por mod, a reconciliacao fecha pelo recibo do receptor, que confere o `recibo` deste
|
|
228
|
+
// evento; o ingresso local nao o levava aqui (so o `reciboEntrega`), e o Telegram ja leva o mesmo valor.
|
|
229
|
+
(0, ledger_1.registrar)(dir, id, 'session_answer_sending', { ...(ctl.assincrono ? { recibo: prov.recibo } : {}), ...prov.dados, sessionId, runtime,
|
|
189
230
|
instancia: sessao.instancia, bloqueio: sessao.bloqueio, envioId: entrega.envioId });
|
|
190
231
|
// O número só vira rótulo nativo quando o pedido aceita OPÇÃO. Em texto livre a
|
|
191
232
|
// resposta humana chega literal ao receptor, inclusive quando é "1" ou "12".
|
|
@@ -206,6 +247,9 @@ function entregarNaSessao(raiz, id, pedido, prov, controle) {
|
|
|
206
247
|
catch {
|
|
207
248
|
throw new Error('runtime.unavailable: consulta do recibo falhou; envio não será repetido');
|
|
208
249
|
}
|
|
250
|
+
// RM-059 (F9, D3): o envio por mod ainda sem recibo do receptor nao e falha; a reconciliacao fecha depois.
|
|
251
|
+
if (!ack && ctl.assincrono)
|
|
252
|
+
return { ...resultado, estado: 'aguardando-receptor', repetida: !!pendente };
|
|
209
253
|
if (!ack || ack.estado !== 'recebida' || ack.contrato !== entrega.contrato || ack.envioId !== entrega.envioId ||
|
|
210
254
|
ack.pedidoId !== pedidoId || ack.thread !== id || ack.fase !== pedido.fase || ack.recibo !== entrega.recibo ||
|
|
211
255
|
!ack.sessao || !mesmaInstancia(ack.sessao, sessao) || ack.sessao.bloqueio !== sessao.bloqueio) {
|
|
@@ -221,6 +265,15 @@ function entregarNaSessao(raiz, id, pedido, prov, controle) {
|
|
|
221
265
|
}
|
|
222
266
|
/** Uma intenção durável impede reenvio após crash, timeout ou confirmação divergente. */
|
|
223
267
|
function responderSessao(raiz, id, pedidoId, r, controle, quando) {
|
|
268
|
+
// RM-059 (F9, D4): a sessao `claude-bg` so recebe pelo Mensageiro, e este caminho (o `ork sessions answer` do
|
|
269
|
+
// Telegram) nao tem caixa de saida: recusa antes de gravar o ingresso, e o pedido segue aberto. Resposta ja
|
|
270
|
+
// entregue ou envio ja reservado seguem o caminho de antes (a repeticao e idempotente e nada reserva de novo).
|
|
271
|
+
const eventos = (0, ledger_1.lerLedger)((0, thread_1.dirThread)(raiz, id));
|
|
272
|
+
const solicitado = eventos.find(e => e.tipo === 'hitl_requested' && e.pedido?.id === pedidoId);
|
|
273
|
+
const andamento = eventos.some(e => ['session_answered', 'session_answer_sending'].includes(e.tipo) && e.pedidoId === pedidoId);
|
|
274
|
+
const impedimento = solicitado?.pedido && !andamento ? impedimentoDaEntrega(raiz, id, solicitado.pedido, controle) : null;
|
|
275
|
+
if (impedimento)
|
|
276
|
+
throw new Error(impedimento);
|
|
224
277
|
(0, hitl_gates_1.receberResposta)(raiz, id, pedidoId, r, quando);
|
|
225
278
|
return (0, hitl_gates_1.comLockHitl)(raiz, id, () => {
|
|
226
279
|
const { pedido, anterior } = (0, hitl_gates_1.conferirResposta)(raiz, id, pedidoId, r, quando);
|
|
@@ -248,7 +301,7 @@ function responderSessao(raiz, id, pedidoId, r, controle, quando) {
|
|
|
248
301
|
* Aceita texto livre quando a pergunta nativa aceita, porque uma pergunta aberta respondida
|
|
249
302
|
* por menu vira outra pergunta.
|
|
250
303
|
*/
|
|
251
|
-
function responderSessaoLocal(raiz, id, pedidoId, token, controle) {
|
|
304
|
+
function responderSessaoLocal(raiz, id, pedidoId, token, controle, caixa) {
|
|
252
305
|
const atestado = (0, hitl_local_atestado_1.consumirAtestadoLocal)(token, raiz, id, pedidoId);
|
|
253
306
|
return (0, hitl_gates_1.comLockHitl)(raiz, id, () => {
|
|
254
307
|
const eventos = (0, ledger_1.lerLedger)((0, thread_1.dirThread)(raiz, id));
|
|
@@ -284,7 +337,7 @@ function responderSessaoLocal(raiz, id, pedidoId, token, controle) {
|
|
|
284
337
|
evidenciar: (entrega) => (0, hitl_local_receipt_1.gravarEvidenciaLocalSessao)(atestado, { fase: String(pedido.fase),
|
|
285
338
|
sessionId: entrega.sessao.sessionId, runtime: entrega.sessao.runtime,
|
|
286
339
|
instancia: entrega.sessao.instancia, bloqueio: String(entrega.sessao.bloqueio), envioId: entrega.envioId }),
|
|
287
|
-
}, controle);
|
|
340
|
+
}, controle, caixa);
|
|
288
341
|
});
|
|
289
342
|
}
|
|
290
343
|
/**
|
package/dist/hitl-texto-livre.js
CHANGED
|
@@ -34,11 +34,13 @@ exports.consentimentoDoTrecho = consentimentoDoTrecho;
|
|
|
34
34
|
* com teste, e nunca efeito colateral de alguem achar que "entendeu" o dono.
|
|
35
35
|
*/
|
|
36
36
|
exports.VOCABULARIO_LIVRE = Object.freeze({
|
|
37
|
+
// RM-057 (resposta curta, D8 da ork-rm057respost): "autorizo" e as variações, que o dono usa para o arco #Noctum.
|
|
37
38
|
afirmar: ['sim', 's', 'ok', 'pode', 'pode seguir', 'pode ir', 'segue', 'siga', 'seguir', 'manda', 'aprovo', 'aprovado',
|
|
38
|
-
'aprovada', 'aprovar', 'aprova', 'confirmo', 'confirmado', 'de acordo'
|
|
39
|
+
'aprovada', 'aprovar', 'aprova', 'confirmo', 'confirmado', 'de acordo', 'autorizo', 'autorizado', 'autorizada', 'autorizar',
|
|
40
|
+
'autoriza'],
|
|
39
41
|
negar: ['nao', 'n'],
|
|
40
42
|
revisar: ['recuso', 'recusado', 'recusar', 'reprovo', 'reprovado', 'revisar', 'revisao', 'refazer', 'volta', 'voltar'],
|
|
41
|
-
esperar: ['esperar', 'espera', 'aguardar', 'aguarda', 'aguarde', 'depois', 'mais tarde', 'agora nao'],
|
|
43
|
+
esperar: ['esperar', 'espera', 'aguardar', 'aguarda', 'aguarde', 'depois', 'mais tarde', 'agora nao', 'adiar', 'adia', 'adio'],
|
|
42
44
|
detalhe: ['detalhe', 'detalhes', 'evidencia', 'evidencias'],
|
|
43
45
|
});
|
|
44
46
|
/** Que acoes de alternativa cada intencao casa. `negar` casa duas de proposito: e ambigua num gate. */
|
|
@@ -59,8 +61,9 @@ exports.JANELA_DO_TEXTO_LIVRE_MIN = 60;
|
|
|
59
61
|
* formas `lista` e `livre` de `GRAMATICA_DO_PULSE`, que os adaptadores copiam texto a texto.
|
|
60
62
|
*/
|
|
61
63
|
const PALAVRAS_DA_FORMA = 'pode seguir|pode ir|pode|sim|s|ok|aprovo|aprovado|aprovada|aprovar|aprova|segue|siga|seguir|manda|' +
|
|
62
|
-
'confirmo|confirmado|de acordo|agora n[aã]o|n[aã]o|n|recuso|recusado|recusar|
|
|
63
|
-
'volta|voltar|esperar|espera|aguardar|aguarda|aguarde|depois|mais tarde|
|
|
64
|
+
'confirmo|confirmado|de acordo|autorizo|autorizado|autorizada|autorizar|autoriza|agora n[aã]o|n[aã]o|n|recuso|recusado|recusar|' +
|
|
65
|
+
'reprovo|reprovado|revisar|revis[aã]o|refazer|volta|voltar|esperar|espera|aguardar|aguarda|aguarde|depois|mais tarde|adiar|adia|' +
|
|
66
|
+
'adio|detalhes?|evid[eê]ncias?';
|
|
64
67
|
/** Uma resposta: letra, ou palavra do vocabulario. */
|
|
65
68
|
const RESPOSTA_DA_FORMA = `(?:[a-e]|${PALAVRAS_DA_FORMA})`;
|
|
66
69
|
/**
|
package/dist/hitl.js
CHANGED
|
@@ -125,6 +125,11 @@ const REGRA_POR_ESTADO = {
|
|
|
125
125
|
detalhe: locale_pulse_1.PULSE_PT_BR.sessao.failed,
|
|
126
126
|
},
|
|
127
127
|
working: { classe: 'trabalhando', precisaDeHumano: false, detalhe: locale_pulse_1.PULSE_PT_BR.sessao.working },
|
|
128
|
+
// RM-063 (fatia 3, achado a): a sessao interativa do Claude Code aparece `busy` enquanto executa um turno, e o
|
|
129
|
+
// runtime tambem diz `running`. Fora do catalogo elas viravam "possivel parada" no pulse e em "O que precisa de
|
|
130
|
+
// voce": e trabalho, como o observador (`session-watcher-claude.ts`) e a capacidade do #Noctum ja as liam.
|
|
131
|
+
busy: { classe: 'trabalhando', precisaDeHumano: false, detalhe: locale_pulse_1.PULSE_PT_BR.sessao.busy },
|
|
132
|
+
running: { classe: 'trabalhando', precisaDeHumano: false, detalhe: locale_pulse_1.PULSE_PT_BR.sessao.running },
|
|
128
133
|
done: { classe: 'concluida', precisaDeHumano: false, detalhe: locale_pulse_1.PULSE_PT_BR.sessao.done },
|
|
129
134
|
stopped: {
|
|
130
135
|
classe: 'interrompida',
|
|
@@ -633,74 +638,72 @@ function dirCurto(cwd) {
|
|
|
633
638
|
}
|
|
634
639
|
/** Texto de `ork sessions hitl`. */
|
|
635
640
|
function textoDoRadar(r) {
|
|
641
|
+
const m = (0, locale_1.msg)().operacao.restante.sessions.radar;
|
|
636
642
|
const L = [];
|
|
637
|
-
L.push(
|
|
638
|
-
L.push(
|
|
639
|
-
|
|
640
|
-
`estado desconhecido ${r.resumo.desconhecidas}) | ` +
|
|
641
|
-
`trabalhando: ${r.resumo.trabalhando} | fora do ork: ${r.resumo.foraDoOrk}`);
|
|
642
|
-
L.push(` limite de atencao: ${r.atencaoMin} min (${r.resumo.acimaDoLimite} parada(s) acima, marcadas com !)`);
|
|
643
|
+
L.push(m.titulo(r.resumo.total));
|
|
644
|
+
L.push(m.resumo(r.resumo.precisamDeHumano, r.resumo.hitl, r.resumo.abandonadas, r.resumo.falhas, r.resumo.desconhecidas, r.resumo.trabalhando, r.resumo.foraDoOrk));
|
|
645
|
+
L.push(m.limite(r.atencaoMin, r.resumo.acimaDoLimite));
|
|
643
646
|
if (!r.runtimeConsultado) {
|
|
644
|
-
L.push(
|
|
647
|
+
L.push(m.falha(r.runtimeDetalhe));
|
|
645
648
|
return L.join('\n');
|
|
646
649
|
}
|
|
647
650
|
if (!r.logsLidos) {
|
|
648
|
-
L.push(
|
|
651
|
+
L.push(m.semLogs);
|
|
649
652
|
}
|
|
650
653
|
L.push('');
|
|
651
654
|
if (r.sessoes.length === 0) {
|
|
652
|
-
L.push(
|
|
655
|
+
L.push(m.nenhuma);
|
|
653
656
|
return L.join('\n');
|
|
654
657
|
}
|
|
655
|
-
L.push((0, util_1.tabela)([
|
|
658
|
+
L.push((0, util_1.tabela)([...m.colunas], r.sessoes.map((s) => [
|
|
656
659
|
s.id,
|
|
657
660
|
s.nome,
|
|
658
661
|
s.classe,
|
|
659
|
-
s.estadoBruto ||
|
|
662
|
+
s.estadoBruto || m.vazio,
|
|
660
663
|
s.tipoDeHitl ?? '-',
|
|
661
664
|
dirCurto(s.cwd),
|
|
662
|
-
s.thread ? `${s.thread.id}/${s.thread.fase}` :
|
|
665
|
+
s.thread ? `${s.thread.id}/${s.thread.fase}` : m.fora,
|
|
663
666
|
`${(0, horario_1.duracaoRelativa)(s.idadeMin)}${s.precisaDeHumano && s.acimaDoLimite ? ' !' : ''}`,
|
|
664
667
|
])));
|
|
665
668
|
const travadas = r.sessoes.filter((s) => s.precisaDeHumano);
|
|
666
669
|
if (travadas.length === 0) {
|
|
667
670
|
L.push('');
|
|
668
|
-
L.push(
|
|
671
|
+
L.push(m.nenhumaEsperando);
|
|
669
672
|
return L.join('\n');
|
|
670
673
|
}
|
|
671
674
|
const vivas = travadas.filter((s) => s.classe !== 'abandonada');
|
|
672
675
|
if (vivas.length > 0) {
|
|
673
676
|
L.push('');
|
|
674
|
-
L.push(
|
|
677
|
+
L.push(m.vivas);
|
|
675
678
|
for (const s of vivas) {
|
|
676
679
|
L.push(` ${s.id} ${s.nome} [${s.classe}${s.tipoDeHitl ? '/' + s.tipoDeHitl : ''}]`);
|
|
677
|
-
L.push(` onde
|
|
678
|
-
(s.thread ?
|
|
679
|
-
L.push(`
|
|
680
|
+
L.push(` ${m.onde.padEnd(9)}: ${s.cwd}` +
|
|
681
|
+
` (${s.thread ? m.thread(s.thread.id, s.thread.fase) : m.sessaoFora})`);
|
|
682
|
+
L.push(` ${m.porque.padEnd(9)}: ${s.detalhe}`);
|
|
680
683
|
if (s.pergunta)
|
|
681
|
-
L.push(` pergunta
|
|
684
|
+
L.push(` ${m.pergunta.padEnd(9)}: ${s.pergunta}`);
|
|
682
685
|
for (const linha of s.contextoLogs ?? [])
|
|
683
|
-
L.push(` log
|
|
686
|
+
L.push(` ${m.log.padEnd(9)}: ${linha}`);
|
|
684
687
|
for (const a of s.alternativas)
|
|
685
|
-
L.push(` opcao
|
|
686
|
-
L.push(` parada
|
|
687
|
-
L.push(` viva
|
|
688
|
-
L.push(` ver
|
|
689
|
-
L.push(` responder: ${s.comandos.attach}`);
|
|
690
|
-
L.push(` recomendo: ${s.recomendacao}`);
|
|
688
|
+
L.push(` ${m.opcao.padEnd(9)}: ${a}`);
|
|
689
|
+
L.push(` ${m.parada.padEnd(9)}: ${s.paradaHaMin == null ? m.paradaDesconhecida : (0, horario_1.duracaoRelativa)(s.paradaHaMin) + ` (${m.desdeObservacao})`}`);
|
|
690
|
+
L.push(` ${m.viva.padEnd(9)}: ${(0, horario_1.duracaoRelativa)(s.idadeMin)} (${m.idade})`);
|
|
691
|
+
L.push(` ${m.ver.padEnd(9)}: ${s.comandos.logs}`);
|
|
692
|
+
L.push(` ${m.responder.padEnd(9)}: ${s.comandos.attach}`);
|
|
693
|
+
L.push(` ${m.recomendo.padEnd(9)}: ${s.recomendacao}`);
|
|
691
694
|
}
|
|
692
695
|
}
|
|
693
696
|
const abandonadas = travadas.filter((s) => s.classe === 'abandonada');
|
|
694
697
|
if (abandonadas.length > 0) {
|
|
695
698
|
L.push('');
|
|
696
|
-
L.push(
|
|
699
|
+
L.push(m.mortas);
|
|
697
700
|
for (const s of abandonadas) {
|
|
698
701
|
L.push(` ${s.id} ${s.nome}`);
|
|
699
|
-
L.push(` onde
|
|
700
|
-
(s.thread ?
|
|
701
|
-
L.push(`
|
|
702
|
-
L.push(` viva
|
|
703
|
-
L.push(` recomendo: ${s.recomendacao}`);
|
|
702
|
+
L.push(` ${m.onde.padEnd(9)}: ${s.cwd}` +
|
|
703
|
+
` (${s.thread ? m.thread(s.thread.id, s.thread.fase) : m.sessaoFora})`);
|
|
704
|
+
L.push(` ${m.porque.padEnd(9)}: ${s.detalhe}`);
|
|
705
|
+
L.push(` ${m.viva.padEnd(9)}: ${(0, horario_1.duracaoRelativa)(s.idadeMin)} ${m.desdeInicio}`);
|
|
706
|
+
L.push(` ${m.recomendo.padEnd(9)}: ${s.recomendacao}`);
|
|
704
707
|
}
|
|
705
708
|
}
|
|
706
709
|
return L.join('\n');
|
package/dist/horario.js
CHANGED
|
@@ -22,6 +22,7 @@ exports.definirFusoDoDono = definirFusoDoDono;
|
|
|
22
22
|
exports.fusoDoDono = fusoDoDono;
|
|
23
23
|
exports.partesLocais = partesLocais;
|
|
24
24
|
exports.dataLocal = dataLocal;
|
|
25
|
+
exports.isoComFuso = isoComFuso;
|
|
25
26
|
exports.instanteNoFuso = instanteNoFuso;
|
|
26
27
|
exports.duracaoCurta = duracaoCurta;
|
|
27
28
|
exports.duracaoRelativa = duracaoRelativa;
|
|
@@ -161,6 +162,21 @@ function desvioDoFuso(ms, fuso) {
|
|
|
161
162
|
return Date.UTC(Number(p.ano), Number(p.mes) - 1, Number(p.dia), Number(p.hora), Number(p.minuto), Number(p.segundo)) -
|
|
162
163
|
Math.floor(ms / 1000) * 1000;
|
|
163
164
|
}
|
|
165
|
+
/**
|
|
166
|
+
* RM-063 (F7): o instante em ISO com o deslocamento do fuso escrito (`2026-10-18T23:59:00-03:00`, ou `Z` no UTC). O
|
|
167
|
+
* prazo da autorização durável é gravado assim: quem o lê em outro fuso chega ao mesmo instante.
|
|
168
|
+
*/
|
|
169
|
+
function isoComFuso(quando, fuso = fusoDoDono().fuso) {
|
|
170
|
+
const ms = instante(quando);
|
|
171
|
+
if (!Number.isFinite(ms))
|
|
172
|
+
throw new Error('data inválida');
|
|
173
|
+
const p = partesLocais(ms, fuso);
|
|
174
|
+
const desvio = Math.round(desvioDoFuso(ms, fuso) / 60000);
|
|
175
|
+
const abs = Math.abs(desvio);
|
|
176
|
+
const deslocamento = desvio === 0 ? 'Z'
|
|
177
|
+
: `${desvio < 0 ? '-' : '+'}${String(Math.floor(abs / 60)).padStart(2, '0')}:${String(abs % 60).padStart(2, '0')}`;
|
|
178
|
+
return `${p.ano}-${p.mes}-${p.dia}T${p.hora}:${p.minuto}:${p.segundo}${deslocamento}`;
|
|
179
|
+
}
|
|
164
180
|
/**
|
|
165
181
|
* RM-037 (fatia 5): o instante de um relógio num fuso IANA (mês de 1 a 12). O runtime diz a hora de
|
|
166
182
|
* volta da cota no fuso dele (`resets 4:40am (<fuso>)`), e lê-la no relógio desta máquina errava o
|