@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/projeto-alvo.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.ORIGENS_DO_PROJETO = exports.FORA_DA_CONSULTA = exports.OFERTA_DA_REDE = exports.ErroDeProjeto = exports.PADRAO_DO_NOME_DE_PROJETO = exports.SAIDA_DE_PROJETO = exports.ENV_PROJETO_EXPLICITO = exports.ENV_PROJETO = exports.CONTRATO_CONSULTA = exports.CONTRATO_PROJETOS = void 0;
|
|
36
|
+
exports.ORIGENS_DO_PROJETO = exports.FORA_DA_CONSULTA = exports.OFERTA_DA_REDE = exports.ErroDeProjeto = exports.PADRAO_DO_NOME_DE_PROJETO = exports.AMBIENTE_SEM_PROJETO_HERDADO = exports.SAIDA_DE_PROJETO = exports.ENV_PROJETO_EXPLICITO = exports.ENV_PROJETO = exports.CONTRATO_CONSULTA = exports.CONTRATO_PROJETOS = void 0;
|
|
37
37
|
exports.caminhoDoRegistro = caminhoDoRegistro;
|
|
38
38
|
exports.lerRegistroDeProjetos = lerRegistroDeProjetos;
|
|
39
39
|
exports.listarProjetos = listarProjetos;
|
|
@@ -41,6 +41,7 @@ exports.raizCanonica = raizCanonica;
|
|
|
41
41
|
exports.remotoSemCredencial = remotoSemCredencial;
|
|
42
42
|
exports.remotoDoProjeto = remotoDoProjeto;
|
|
43
43
|
exports.registrarProjeto = registrarProjeto;
|
|
44
|
+
exports.diretorioEfemero = diretorioEfemero;
|
|
44
45
|
exports.registrarProjetoEmSilencio = registrarProjetoEmSilencio;
|
|
45
46
|
exports.esquecerProjeto = esquecerProjeto;
|
|
46
47
|
exports.candidatosDoHost = candidatosDoHost;
|
|
@@ -51,7 +52,12 @@ exports.raizParaExibir = raizParaExibir;
|
|
|
51
52
|
exports.outrosProjetosConhecidos = outrosProjetosConhecidos;
|
|
52
53
|
exports.semRemoto = semRemoto;
|
|
53
54
|
exports.consultaDoProjeto = consultaDoProjeto;
|
|
55
|
+
exports.linhaDoProjeto = linhaDoProjeto;
|
|
54
56
|
exports.linhasDaConsulta = linhasDaConsulta;
|
|
57
|
+
exports.iniciarDeclaracaoDoProjeto = iniciarDeclaracaoDoProjeto;
|
|
58
|
+
exports.pedirDeclaracaoDoProjeto = pedirDeclaracaoDoProjeto;
|
|
59
|
+
exports.remotoParaExibir = remotoParaExibir;
|
|
60
|
+
exports.declaracaoQueFaltou = declaracaoQueFaltou;
|
|
55
61
|
/**
|
|
56
62
|
* RM-052: o projeto-alvo explicito.
|
|
57
63
|
*
|
|
@@ -82,6 +88,7 @@ const maquina_1 = require("./maquina");
|
|
|
82
88
|
const policies_1 = require("./policies");
|
|
83
89
|
const redacao_url_1 = require("./redacao-url");
|
|
84
90
|
const util_1 = require("./util");
|
|
91
|
+
const locale_1 = require("./locale");
|
|
85
92
|
exports.CONTRATO_PROJETOS = 'ork.projetos/v1';
|
|
86
93
|
exports.CONTRATO_CONSULTA = 'ork.consulta/v1';
|
|
87
94
|
/** O projeto pedido pelo ambiente, abaixo de `--projeto` e acima do cwd. */
|
|
@@ -90,6 +97,18 @@ exports.ENV_PROJETO = 'ORK_PROJETO';
|
|
|
90
97
|
exports.ENV_PROJETO_EXPLICITO = 'ORK_PROJETO_EXPLICITO';
|
|
91
98
|
/** Codigo de saida da recusa de projeto-alvo no CLI (D3). */
|
|
92
99
|
exports.SAIDA_DE_PROJETO = 4;
|
|
100
|
+
/**
|
|
101
|
+
* RM-052 (fatia 2, D2): o ambiente de quem o nucleo inicia ja dentro do projeto resolvido, a sessao
|
|
102
|
+
* despachada na worktree da thread e o filho `fabrica publicar`. O modo host e o `ORK_PROJETO` sao do
|
|
103
|
+
* gateway que pediu: herdados, recusavam todo `ork` da sessao com `projeto.escolha`, ou liam outro
|
|
104
|
+
* projeto. Valores neutros, e nao a ausencia das variaveis: o `claude --bg` entrega a sessao a um daemon
|
|
105
|
+
* que guarda o ambiente de quem o iniciou, e so o `env` do `--settings` vence o herdado. Com eles, o
|
|
106
|
+
* projeto da sessao e o do proprio cwd.
|
|
107
|
+
*/
|
|
108
|
+
exports.AMBIENTE_SEM_PROJETO_HERDADO = Object.freeze({
|
|
109
|
+
[exports.ENV_PROJETO]: '',
|
|
110
|
+
[exports.ENV_PROJETO_EXPLICITO]: '0',
|
|
111
|
+
});
|
|
93
112
|
const ARQUIVO = 'projetos.json';
|
|
94
113
|
const TRAVA = 'projetos.json.lock';
|
|
95
114
|
/** Nome ou abbrev de projeto: o mesmo alfabeto dos identificadores de thread, sem barra. */
|
|
@@ -112,16 +131,18 @@ class ErroDeProjeto extends Error {
|
|
|
112
131
|
return { erro: this.codigo, detalhe: this.detalhe, candidatos: this.candidatos, correcao: this.correcao };
|
|
113
132
|
}
|
|
114
133
|
get texto() {
|
|
134
|
+
const m = (0, locale_1.msg)().projetos;
|
|
115
135
|
return [
|
|
116
136
|
`${this.codigo}: ${this.detalhe}`,
|
|
117
|
-
...(this.candidatos.length ? [
|
|
137
|
+
...(this.candidatos.length ? [m.candidatos, ...this.candidatos.map((c) => ` • ${linhaDoCandidato(c)}`)] : []),
|
|
118
138
|
this.correcao,
|
|
119
139
|
].join('\n');
|
|
120
140
|
}
|
|
121
141
|
}
|
|
122
142
|
exports.ErroDeProjeto = ErroDeProjeto;
|
|
123
143
|
function linhaDoCandidato(c) {
|
|
124
|
-
|
|
144
|
+
const m = (0, locale_1.msg)().projetos;
|
|
145
|
+
return `${c.nome} (${c.abbrev || '-'}) · ${c.raiz} · ${c.remoto ?? m.semRemoto}${c.presente ? '' : ` · ${m.ausente}`}`;
|
|
125
146
|
}
|
|
126
147
|
// ---------------------------------------------------------------------------
|
|
127
148
|
// O registro.
|
|
@@ -233,7 +254,7 @@ function comTrava(alterar, esperaMs = 2000) {
|
|
|
233
254
|
continue;
|
|
234
255
|
}
|
|
235
256
|
if (Date.now() >= limite)
|
|
236
|
-
throw new Error(
|
|
257
|
+
throw new Error((0, locale_1.msg)().projetos.ocupado(trava));
|
|
237
258
|
Atomics.wait(new Int32Array(new SharedArrayBuffer(4)), 0, 0, 10);
|
|
238
259
|
}
|
|
239
260
|
}
|
|
@@ -260,7 +281,7 @@ function gravarRegistro(registro) {
|
|
|
260
281
|
const conteudo = JSON.stringify(registro, null, 2) + '\n';
|
|
261
282
|
// Varredura final: o arquivo nunca carrega credencial, nem por um remoto mal redigido.
|
|
262
283
|
if ((0, policies_1.procurarSegredos)(conteudo).length)
|
|
263
|
-
throw new Error(
|
|
284
|
+
throw new Error((0, locale_1.msg)().projetos.segredoConteudo);
|
|
264
285
|
const temp = path.join(dir, `.${ARQUIVO}.${process.pid}.${Date.now()}.tmp`);
|
|
265
286
|
try {
|
|
266
287
|
fs.writeFileSync(temp, conteudo, { mode: 0o600, flag: 'wx' });
|
|
@@ -293,18 +314,18 @@ function projetoDoCaminho(caminho) {
|
|
|
293
314
|
function registrarProjeto(caminho, fonte, opcoes = {}) {
|
|
294
315
|
const achado = projetoDoCaminho(caminho);
|
|
295
316
|
if (!achado) {
|
|
296
|
-
throw new ErroDeProjeto('projeto.sem-manifesto',
|
|
317
|
+
throw new ErroDeProjeto('projeto.sem-manifesto', (0, locale_1.msg)().projetos.semManifesto(raizParaExibir(path.resolve(caminho))), [], (0, locale_1.msg)().projetos.rodeInit);
|
|
297
318
|
}
|
|
298
319
|
const { raiz: canonica, carregado } = achado;
|
|
299
320
|
if (carregado.erros.length)
|
|
300
|
-
throw new Error(
|
|
321
|
+
throw new Error((0, locale_1.msg)().projetos.manifestoInvalido(carregado.caminho));
|
|
301
322
|
const quando = opcoes.quando ?? new Date().toISOString();
|
|
302
323
|
const novo = {
|
|
303
324
|
nome: carregado.manifesto.project.name, abbrev: carregado.manifesto.project.abbrev, raiz: canonica,
|
|
304
325
|
remoto: remotoDoProjeto(canonica, carregado.manifesto.fabrica?.remoto ?? 'origin'), atualizadoEm: quando, fonte,
|
|
305
326
|
};
|
|
306
327
|
if ((0, policies_1.procurarSegredos)(JSON.stringify(novo)).length) {
|
|
307
|
-
throw new Error(
|
|
328
|
+
throw new Error((0, locale_1.msg)().projetos.segredoEntrada);
|
|
308
329
|
}
|
|
309
330
|
return comTrava(() => {
|
|
310
331
|
const registro = lerRegistroDeProjetos();
|
|
@@ -317,16 +338,52 @@ function registrarProjeto(caminho, fonte, opcoes = {}) {
|
|
|
317
338
|
return entrada;
|
|
318
339
|
}, opcoes.esperaMs);
|
|
319
340
|
}
|
|
341
|
+
/** As pastas efemeras desta maquina: a temporaria do sistema e as que o `/tmp` costuma ter. */
|
|
342
|
+
function pastasTemporarias() {
|
|
343
|
+
const raizes = [os.tmpdir(), '/tmp', '/var/tmp', '/dev/shm'];
|
|
344
|
+
const job = (process.env.CLAUDE_JOB_DIR ?? '').trim();
|
|
345
|
+
if (job && path.isAbsolute(job))
|
|
346
|
+
raizes.push(job);
|
|
347
|
+
return [...new Set(raizes.flatMap((r) => { try {
|
|
348
|
+
return [path.resolve(r), fs.realpathSync(r)];
|
|
349
|
+
}
|
|
350
|
+
catch {
|
|
351
|
+
return [path.resolve(r)];
|
|
352
|
+
} }))];
|
|
353
|
+
}
|
|
354
|
+
/**
|
|
355
|
+
* RM-063 (fatia 3, achado b): o caminho esta numa pasta que some sozinha? A temporaria do sistema (`/tmp`, `TMPDIR`,
|
|
356
|
+
* `/var/tmp`, `/dev/shm`) e a pasta de um job de fundo do Claude Code (`~/.claude*\/jobs/<id>/`, ou `CLAUDE_JOB_DIR`).
|
|
357
|
+
*/
|
|
358
|
+
function diretorioEfemero(caminho) {
|
|
359
|
+
let real = path.resolve(caminho);
|
|
360
|
+
try {
|
|
361
|
+
real = fs.realpathSync(real);
|
|
362
|
+
}
|
|
363
|
+
catch { /* o caminho que ja sumiu vale como foi escrito */ }
|
|
364
|
+
if (/\/\.claude[^/]*\/jobs\/[^/]+(\/|$)/.test(real))
|
|
365
|
+
return true;
|
|
366
|
+
return pastasTemporarias().some((r) => real === r || real.startsWith(r.endsWith(path.sep) ? r : r + path.sep));
|
|
367
|
+
}
|
|
320
368
|
/**
|
|
321
369
|
* D7: o registro nunca derruba o comando que o alimenta. Devolve o aviso para o terminal, ou `null`.
|
|
370
|
+
*
|
|
371
|
+
* RM-063 (fatia 3, achado b): provas e testes que rodam o `ork` em projetos de `/tmp` e da pasta dos jobs do Claude
|
|
372
|
+
* Code encheram o `~/.orkastery/projetos.json` real de projetos que somem. O registro automatico (init, thread new,
|
|
373
|
+
* fabrica entrar) nao grava projeto efemero num registro duravel: o projeto de `/tmp` so entra no registro que tambem
|
|
374
|
+
* e efemero (o `ORKASTERY_HOME` temporario dos testes). `ork projetos registrar`, pedido explicito, continua valendo.
|
|
322
375
|
*/
|
|
323
|
-
function registrarProjetoEmSilencio(raiz, fonte) {
|
|
376
|
+
function registrarProjetoEmSilencio(raiz, fonte, opcoes = {}) {
|
|
377
|
+
const efemero = opcoes.efemero ?? diretorioEfemero;
|
|
324
378
|
try {
|
|
379
|
+
if (efemero(raiz) && !efemero((0, maquina_1.pastaDoUsuario)())) {
|
|
380
|
+
return (0, locale_1.msg)().projetos.avisoTemporario(raizParaExibir(path.resolve(raiz)), caminhoDoRegistro());
|
|
381
|
+
}
|
|
325
382
|
registrarProjeto(raiz, fonte);
|
|
326
383
|
return null;
|
|
327
384
|
}
|
|
328
385
|
catch (e) {
|
|
329
|
-
return
|
|
386
|
+
return (0, locale_1.msg)().projetos.avisoRegistro(caminhoDoRegistro(), e.message);
|
|
330
387
|
}
|
|
331
388
|
}
|
|
332
389
|
/** Tira do registro por nome, abbrev ou caminho. Nada casou e recusa, com os registrados. */
|
|
@@ -337,7 +394,7 @@ function esquecerProjeto(alvo, cwd = process.cwd()) {
|
|
|
337
394
|
const porCaminho = ehCaminho(valor) ? caminhoPossivel(valor, cwd) : null;
|
|
338
395
|
const sai = registro.projetos.filter((p) => porCaminho ? p.raiz === porCaminho : casaNome(p, valor));
|
|
339
396
|
if (!sai.length) {
|
|
340
|
-
throw new ErroDeProjeto('projeto.desconhecido',
|
|
397
|
+
throw new ErroDeProjeto('projeto.desconhecido', (0, locale_1.msg)().projetos.naoRegistrado(valor), registro.projetos.map(candidatoDoRegistro), (0, locale_1.msg)().projetos.vejaRegistrados);
|
|
341
398
|
}
|
|
342
399
|
registro.projetos = registro.projetos.filter((p) => !sai.includes(p));
|
|
343
400
|
registro.atualizadoEm = new Date().toISOString();
|
|
@@ -375,17 +432,17 @@ function candidatoDoRegistro(p) {
|
|
|
375
432
|
function raizPorCaminho(valor, cwd) {
|
|
376
433
|
const dir = path.resolve(cwd, expandirHome(valor));
|
|
377
434
|
if (!fs.existsSync(dir)) {
|
|
378
|
-
throw new ErroDeProjeto('projeto.sem-manifesto',
|
|
435
|
+
throw new ErroDeProjeto('projeto.sem-manifesto', (0, locale_1.msg)().projetos.caminhoNaoExiste(raizParaExibir(dir)), [], (0, locale_1.msg)().projetos.informeRaiz);
|
|
379
436
|
}
|
|
380
437
|
const achada = (0, util_1.subirAte)(dir, manifest_1.NOME_MANIFESTO) ?? (0, util_1.subirAte)(dir, manifest_1.NOME_MANIFESTO_LEGADO);
|
|
381
438
|
if (!achada) {
|
|
382
|
-
throw new ErroDeProjeto('projeto.sem-manifesto',
|
|
439
|
+
throw new ErroDeProjeto('projeto.sem-manifesto', (0, locale_1.msg)().projetos.yamlAusente(raizParaExibir(dir)), [], (0, locale_1.msg)().projetos.initOuNome);
|
|
383
440
|
}
|
|
384
441
|
return fs.realpathSync(achada);
|
|
385
442
|
}
|
|
386
443
|
function raizPorNome(valor) {
|
|
387
444
|
if (!exports.PADRAO_DO_NOME_DE_PROJETO.test(valor)) {
|
|
388
|
-
throw new ErroDeProjeto('projeto.desconhecido',
|
|
445
|
+
throw new ErroDeProjeto('projeto.desconhecido', (0, locale_1.msg)().projetos.nomeInvalido(valor), lerRegistroDeProjetos().projetos.map(candidatoDoRegistro), (0, locale_1.msg)().projetos.useNome);
|
|
389
446
|
}
|
|
390
447
|
const registrados = lerRegistroDeProjetos().projetos;
|
|
391
448
|
const casados = registrados.filter((p) => casaNome(p, valor));
|
|
@@ -393,9 +450,9 @@ function raizPorNome(valor) {
|
|
|
393
450
|
if (presentes.length === 1)
|
|
394
451
|
return presentes[0].raiz;
|
|
395
452
|
if (presentes.length > 1) {
|
|
396
|
-
throw new ErroDeProjeto('projeto.ambiguo',
|
|
453
|
+
throw new ErroDeProjeto('projeto.ambiguo', (0, locale_1.msg)().projetos.ambiguo(valor, presentes.length), presentes.map(candidatoDoRegistro), (0, locale_1.msg)().projetos.escolhaRaiz);
|
|
397
454
|
}
|
|
398
|
-
throw new ErroDeProjeto('projeto.desconhecido', casados.length ?
|
|
455
|
+
throw new ErroDeProjeto('projeto.desconhecido', casados.length ? (0, locale_1.msg)().projetos.semManifestoRegistrado(valor) : (0, locale_1.msg)().projetos.naoRegistrado(valor), registrados.map(candidatoDoRegistro), (0, locale_1.msg)().projetos.registreCopia);
|
|
399
456
|
}
|
|
400
457
|
/**
|
|
401
458
|
* F2 do CHECK: o nome aponta a arvore principal; quem ja esta numa copia DESSE projeto (a worktree de
|
|
@@ -450,12 +507,12 @@ function resolverProjetoAlvo(entrada = {}) {
|
|
|
450
507
|
if (entrada.opcao !== undefined && entrada.opcao !== null) {
|
|
451
508
|
const valor = entrada.opcao.trim();
|
|
452
509
|
if (!valor) {
|
|
453
|
-
throw new ErroDeProjeto('projeto.desconhecido',
|
|
510
|
+
throw new ErroDeProjeto('projeto.desconhecido', (0, locale_1.msg)().projetos.opcaoSemValor, lerRegistroDeProjetos().projetos.map(candidatoDoRegistro), (0, locale_1.msg)().projetos.usoOpcao);
|
|
454
511
|
}
|
|
455
512
|
// D4 (F1 do CHECK): no host, quem pede escolhe entre os projetos da maquina pelo NOME. Caminho nao
|
|
456
513
|
// entra por nenhuma tool, nem pela que repassa os argumentos como dados (os scripts do Hermes).
|
|
457
514
|
if (host && ehCaminho(valor)) {
|
|
458
|
-
throw new ErroDeProjeto('projeto.desconhecido',
|
|
515
|
+
throw new ErroDeProjeto('projeto.desconhecido', (0, locale_1.msg)().projetos.hostCaminho(valor), lerRegistroDeProjetos().projetos.map(candidatoDoRegistro), (0, locale_1.msg)().projetos.hostUseNome);
|
|
459
516
|
}
|
|
460
517
|
return { raiz: resolverValor(valor, cwd), origem: 'opcao', pedido: valor };
|
|
461
518
|
}
|
|
@@ -467,10 +524,9 @@ function resolverProjetoAlvo(entrada = {}) {
|
|
|
467
524
|
if (candidatos.length === 1)
|
|
468
525
|
return { raiz: copiaDoCwd(candidatos[0].raiz, cwd), origem: 'unico-conhecido', pedido: null };
|
|
469
526
|
if (candidatos.length > 1) {
|
|
470
|
-
throw new ErroDeProjeto('projeto.escolha',
|
|
527
|
+
throw new ErroDeProjeto('projeto.escolha', (0, locale_1.msg)().projetos.precisaEscolher(candidatos.length), candidatos.map((c) => c.candidato), (0, locale_1.msg)().projetos.repitaEscolha((0, locale_1.msg)().projetos.ofertaRede));
|
|
471
528
|
}
|
|
472
|
-
throw new ErroDeProjeto('projeto.nenhum',
|
|
473
|
-
'Sem clone nesta máquina, o roadmap de um projeto vem da forja: `ork network roadmap --projeto github:dono/repo` (tool ork_network_roadmap).');
|
|
529
|
+
throw new ErroDeProjeto('projeto.nenhum', (0, locale_1.msg)().projetos.nenhum, [], (0, locale_1.msg)().projetos.registrePrimeiro);
|
|
474
530
|
}
|
|
475
531
|
return null;
|
|
476
532
|
}
|
|
@@ -532,6 +588,10 @@ exports.ORIGENS_DO_PROJETO = Object.freeze({
|
|
|
532
588
|
* e nao revela os demais).
|
|
533
589
|
*/
|
|
534
590
|
function consultaDoProjeto(carregado, opcoes) {
|
|
591
|
+
// Fatia 2 (D3): o comando monta o proprio cabecalho DO ALVO; a linha generica do fim nao se repete.
|
|
592
|
+
// A consulta de outro projeto (sugestao A3 do CHECK) nao apaga a declaracao pedida.
|
|
593
|
+
if (declaracao && mesmaRaiz(carregado.raiz, declaracao.alvo.raiz))
|
|
594
|
+
declaracao.feita = true;
|
|
535
595
|
const alvo = projetoAlvoAtual();
|
|
536
596
|
const origem = opcoes.origem ?? (alvo && path.resolve(alvo.raiz) === path.resolve(carregado.raiz) ? alvo.origem : 'cwd');
|
|
537
597
|
const outros = opcoes.outrosProjetos === false ? 0 : outrosProjetosConhecidos(carregado.raiz);
|
|
@@ -540,16 +600,118 @@ function consultaDoProjeto(carregado, opcoes) {
|
|
|
540
600
|
return {
|
|
541
601
|
contrato: exports.CONTRATO_CONSULTA,
|
|
542
602
|
projeto: { nome: carregado.manifesto.project.name, abbrev: carregado.manifesto.project.abbrev,
|
|
543
|
-
raiz: raizParaExibir(carregado.raiz), remoto, origem },
|
|
603
|
+
raiz: raizParaExibir(carregado.raiz), remoto: remotoParaExibir(remoto), origem },
|
|
544
604
|
lido: [...opcoes.lido],
|
|
545
605
|
naoLido: [...opcoes.naoLido, ...(outros > 0 ? [`outros projetos desta máquina: ${outros} (ork projetos)`] : [])],
|
|
546
606
|
};
|
|
547
607
|
}
|
|
608
|
+
/** A linha do projeto consultado: a primeira do cabecalho e a que a declaracao da fatia 2 escreve. */
|
|
609
|
+
function linhaDoProjeto(p) {
|
|
610
|
+
return `Projeto consultado: ${p.nome} (${p.abbrev || '-'}) · ${p.raiz} · ${p.remoto ?? 'sem remoto'} · ${exports.ORIGENS_DO_PROJETO[p.origem]}`;
|
|
611
|
+
}
|
|
548
612
|
/** As duas linhas do cabecalho em texto: o projeto consultado e o que nao foi lido. */
|
|
549
613
|
function linhasDaConsulta(c) {
|
|
550
|
-
const p = c.projeto;
|
|
551
614
|
return [
|
|
552
|
-
|
|
615
|
+
linhaDoProjeto(c.projeto),
|
|
553
616
|
`Não lido: ${c.naoLido.length ? c.naoLido.join(' · ') : 'nada fora do projeto consultado'}`,
|
|
554
617
|
];
|
|
555
618
|
}
|
|
619
|
+
// ---------------------------------------------------------------------------
|
|
620
|
+
// A declaracao do projeto consultado (fatia 2, D3).
|
|
621
|
+
// ---------------------------------------------------------------------------
|
|
622
|
+
/**
|
|
623
|
+
* Na fatia 1, so maestro, board, fabrica e roadmap status diziam qual projeto leram; dez das catorze
|
|
624
|
+
* tools de projeto do OpenClaw respondiam sem nomea-lo, e com um so projeto conhecido a resposta era a
|
|
625
|
+
* dele, sem aviso. Agora todo comando que le um projeto que o leitor nao tem como adivinhar termina com
|
|
626
|
+
* a linha `Projeto consultado: ...` no stderr: o OpenClaw junta stdout e stderr no texto da tool, e o
|
|
627
|
+
* JSON do stdout continua inteiro para quem o consome.
|
|
628
|
+
*/
|
|
629
|
+
let declaracao = null;
|
|
630
|
+
/** Zera o pedido de declaracao do processo (os testes chamam `main` em serie no mesmo processo). */
|
|
631
|
+
function iniciarDeclaracaoDoProjeto() {
|
|
632
|
+
declaracao = null;
|
|
633
|
+
}
|
|
634
|
+
/**
|
|
635
|
+
* Pede a linha para o comando que vai ler `alvo`, so quando o leitor nao sabe qual projeto foi lido:
|
|
636
|
+
* no host (`ORK_PROJETO_EXPLICITO=1`), cuja resposta vai a um canal de conversa, ou quando o projeto nao
|
|
637
|
+
* e o do diretorio atual. No terminal, dentro do proprio projeto, nada muda (BR-030-02).
|
|
638
|
+
*/
|
|
639
|
+
function pedirDeclaracaoDoProjeto(alvo, entrada = {}) {
|
|
640
|
+
declaracao = null;
|
|
641
|
+
if (!alvo)
|
|
642
|
+
return;
|
|
643
|
+
const ambiente = entrada.ambiente ?? process.env;
|
|
644
|
+
const host = (ambiente[exports.ENV_PROJETO_EXPLICITO] ?? '').trim() === '1';
|
|
645
|
+
if (!host && raizDoDiretorio(entrada.cwd ?? process.cwd()) === alvo.raiz)
|
|
646
|
+
return;
|
|
647
|
+
declaracao = { alvo, feita: false };
|
|
648
|
+
}
|
|
649
|
+
/** As duas raizes sao a mesma copia (caminho real; o resolvido quando o disco nao responde). */
|
|
650
|
+
function mesmaRaiz(a, b) {
|
|
651
|
+
const real = (p) => { try {
|
|
652
|
+
return fs.realpathSync(p);
|
|
653
|
+
}
|
|
654
|
+
catch {
|
|
655
|
+
return path.resolve(p);
|
|
656
|
+
} };
|
|
657
|
+
return real(a) === real(b);
|
|
658
|
+
}
|
|
659
|
+
/**
|
|
660
|
+
* Fatia 2 (sugestao S1 do CHECK): o remoto que vai a um canal de conversa. Ele ja chega sem usuario e
|
|
661
|
+
* senha (`remotoSemCredencial`); aqui sai tambem o que vem depois de `?` ou `#` na URL (token em query,
|
|
662
|
+
* como `?private_token=`), o caminho local mostra `~` no lugar da pasta da conta (D8) e o remoto que
|
|
663
|
+
* ainda parecer segredo sai omitido. So a exibicao muda: o registro guarda o remoto como sempre.
|
|
664
|
+
*/
|
|
665
|
+
function remotoParaExibir(remoto) {
|
|
666
|
+
if (remoto === null)
|
|
667
|
+
return null;
|
|
668
|
+
let exibido = remoto;
|
|
669
|
+
if (/^[a-z][a-z0-9+.-]*:\/\//i.test(exibido)) {
|
|
670
|
+
try {
|
|
671
|
+
const u = new URL(exibido);
|
|
672
|
+
u.search = '';
|
|
673
|
+
u.hash = '';
|
|
674
|
+
exibido = u.toString();
|
|
675
|
+
}
|
|
676
|
+
catch {
|
|
677
|
+
exibido = exibido.replace(/[?#].*$/, '');
|
|
678
|
+
}
|
|
679
|
+
}
|
|
680
|
+
else if (path.isAbsolute(exibido))
|
|
681
|
+
exibido = raizParaExibir(exibido);
|
|
682
|
+
return (0, policies_1.procurarSegredos)(exibido).length ? 'remoto omitido (parece carregar segredo)' : exibido;
|
|
683
|
+
}
|
|
684
|
+
/** A raiz do manifesto que o diretorio enxerga subindo, com caminho real; `null` fora de projeto. */
|
|
685
|
+
function raizDoDiretorio(cwd) {
|
|
686
|
+
const achada = (0, util_1.subirAte)(path.resolve(cwd), manifest_1.NOME_MANIFESTO) ?? (0, util_1.subirAte)(path.resolve(cwd), manifest_1.NOME_MANIFESTO_LEGADO);
|
|
687
|
+
if (!achada)
|
|
688
|
+
return null;
|
|
689
|
+
try {
|
|
690
|
+
return fs.realpathSync(achada);
|
|
691
|
+
}
|
|
692
|
+
catch {
|
|
693
|
+
return null;
|
|
694
|
+
}
|
|
695
|
+
}
|
|
696
|
+
/**
|
|
697
|
+
* A linha que faltou, e consome o pedido: `null` sem pedido, ou quando o comando montou o proprio
|
|
698
|
+
* cabecalho (`consultaDoProjeto`).
|
|
699
|
+
*/
|
|
700
|
+
function declaracaoQueFaltou() {
|
|
701
|
+
const d = declaracao;
|
|
702
|
+
declaracao = null;
|
|
703
|
+
if (!d || d.feita)
|
|
704
|
+
return null;
|
|
705
|
+
let carregado;
|
|
706
|
+
try {
|
|
707
|
+
carregado = (0, manifest_1.carregarManifesto)(d.alvo.raiz);
|
|
708
|
+
}
|
|
709
|
+
catch {
|
|
710
|
+
return null;
|
|
711
|
+
}
|
|
712
|
+
if (!carregado)
|
|
713
|
+
return null;
|
|
714
|
+
const m = carregado.manifesto;
|
|
715
|
+
return linhaDoProjeto({ nome: m.project.name, abbrev: m.project.abbrev, raiz: raizParaExibir(carregado.raiz),
|
|
716
|
+
remoto: remotoParaExibir(remotoDoProjeto(carregado.raiz, m.fabrica?.remoto ?? 'origin')), origem: d.alvo.origem });
|
|
717
|
+
}
|