@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/policies.js
CHANGED
|
@@ -14,6 +14,7 @@ Object.defineProperty(exports, "__esModule", { value: true });
|
|
|
14
14
|
exports.POLICIES_DE_PROVA_LOCAL = exports.POLICIES_CONHECIDAS = void 0;
|
|
15
15
|
exports.procurarSegredos = procurarSegredos;
|
|
16
16
|
exports.policyDeProvaLocal = policyDeProvaLocal;
|
|
17
|
+
exports.severidadeDeclarada = severidadeDeclarada;
|
|
17
18
|
exports.policiesDesconhecidas = policiesDesconhecidas;
|
|
18
19
|
exports.avaliarPolicies = avaliarPolicies;
|
|
19
20
|
exports.avisos = avisos;
|
|
@@ -107,6 +108,13 @@ exports.POLICIES_CONHECIDAS = {
|
|
|
107
108
|
quando: ['claims.add'],
|
|
108
109
|
descricao: 'a mesma conferencia de claim_sem_prova_local, com o nome que o ork licoes propoe',
|
|
109
110
|
},
|
|
111
|
+
// RM-062 (F2): a barreira de dado privado. Declarada, o `ork verify` varre o diff da thread e o `ork ci prepare`, o
|
|
112
|
+
// diff e o bundle; fora do manifesto, nenhum dos dois varre nada (projeto privado nao paga pelo que nao pediu).
|
|
113
|
+
dado_privado: {
|
|
114
|
+
quando: ['verify', 'ci.prepare'],
|
|
115
|
+
descricao: 'reprova (ou avisa) quando o diff da thread ou o bundle de CI leva caminho de home, e-mail fora da lista, ' +
|
|
116
|
+
'hostname de maquina ou termo da lista local',
|
|
117
|
+
},
|
|
110
118
|
};
|
|
111
119
|
/** RM-008 (B8): as policies que conferem a claim no registro (um aviso so, como verify_regression e verify_failed). */
|
|
112
120
|
exports.POLICIES_DE_PROVA_LOCAL = ['claim_sem_prova_local', 'claims_failed'];
|
|
@@ -135,6 +143,11 @@ function severidade(bruta) {
|
|
|
135
143
|
return bruta;
|
|
136
144
|
return 'warn';
|
|
137
145
|
}
|
|
146
|
+
/** RM-062 (F2): a severidade da policy como o manifesto a declara, ou `null` quando ele nao a declara. */
|
|
147
|
+
function severidadeDeclarada(manifesto, nome) {
|
|
148
|
+
const bruta = manifesto.policies?.[nome];
|
|
149
|
+
return bruta === undefined ? null : severidade(bruta);
|
|
150
|
+
}
|
|
138
151
|
/** Policies declaradas no manifesto que o `ork` nao sabe executar. */
|
|
139
152
|
function policiesDesconhecidas(manifesto) {
|
|
140
153
|
return Object.keys(manifesto.policies ?? {}).filter((p) => !(p in exports.POLICIES_CONHECIDAS));
|
|
@@ -276,6 +289,26 @@ function avaliarPolicies(manifesto, ctx) {
|
|
|
276
289
|
}
|
|
277
290
|
continue;
|
|
278
291
|
}
|
|
292
|
+
if (nome === 'dado_privado') {
|
|
293
|
+
const f = ctx.dadoPrivado;
|
|
294
|
+
if (!f || (f.achados === 0 && !f.erro))
|
|
295
|
+
continue;
|
|
296
|
+
const lista = f.listaLocal ? 'com a lista local' : 'lista local ausente: so os padroes genericos';
|
|
297
|
+
violacoes.push({
|
|
298
|
+
policy: nome,
|
|
299
|
+
severidade: sev,
|
|
300
|
+
motivo: 'policy.violation',
|
|
301
|
+
detalhe: f.erro
|
|
302
|
+
? `a varredura de dado privado nao rodou: ${f.erro}`
|
|
303
|
+
: `${f.achados} achado(s) de dado privado (${f.padroes.join(', ')}) no ${f.escopo}, ${lista}: ` +
|
|
304
|
+
`${f.onde.join(', ')}${f.achados > f.onde.length ? ', ...' : ''} (o valor casado nunca e impresso)`,
|
|
305
|
+
correcao: f.erro
|
|
306
|
+
? 'corrija o orkastery.privado.json (ou tire a lista local do git) e rode de novo'
|
|
307
|
+
: 'troque o dado pelo generico (maquina-a, /home/usuario, pessoa@exemplo.invalid) ou, se for exemplo inventado, ' +
|
|
308
|
+
'ponha a excecao com motivo em orkastery.privado.json, revisada em PR; confira com ork privado varrer --base <base>',
|
|
309
|
+
});
|
|
310
|
+
continue;
|
|
311
|
+
}
|
|
279
312
|
if (nome === 'tree_blocked') {
|
|
280
313
|
if (ctx.branchAtrasDaBase === true) {
|
|
281
314
|
violacoes.push({
|
package/dist/postura-local.js
CHANGED
|
@@ -66,6 +66,7 @@ const node_crypto_1 = require("node:crypto");
|
|
|
66
66
|
const codex_1 = require("./adapters/codex");
|
|
67
67
|
const estado_thread_1 = require("./estado-thread");
|
|
68
68
|
const procedencia_1 = require("./procedencia");
|
|
69
|
+
const locale_1 = require("./locale");
|
|
69
70
|
const util_1 = require("./util");
|
|
70
71
|
exports.CONTRATO_POSTURA_LOCAL = 'ork.postura-local/v1';
|
|
71
72
|
exports.ARQUIVO_POSTURA_LOCAL = 'postura-local.json';
|
|
@@ -182,7 +183,7 @@ function gravarArquivoPrivado(raiz, nome, objeto) {
|
|
|
182
183
|
const estado = path.dirname(pasta);
|
|
183
184
|
const stEstado = fs.lstatSync(estado, { throwIfNoEntry: false });
|
|
184
185
|
if (stEstado && (!stEstado.isDirectory() || stEstado.isSymbolicLink()))
|
|
185
|
-
throw new
|
|
186
|
+
throw new locale_1.ErroDoCatalogo((m) => m.estado.posturaEstadoLink);
|
|
186
187
|
fs.mkdirSync(estado, { recursive: true });
|
|
187
188
|
try {
|
|
188
189
|
fs.mkdirSync(pasta, { mode: 0o700 });
|
|
@@ -193,10 +194,10 @@ function gravarArquivoPrivado(raiz, nome, objeto) {
|
|
|
193
194
|
}
|
|
194
195
|
const stPasta = fs.lstatSync(pasta);
|
|
195
196
|
if (!stPasta.isDirectory() || stPasta.isSymbolicLink())
|
|
196
|
-
throw new
|
|
197
|
+
throw new locale_1.ErroDoCatalogo((m) => m.estado.posturaPrivadaLink);
|
|
197
198
|
fs.chmodSync(pasta, 0o700);
|
|
198
199
|
if ((0, procedencia_1.rastreadoPeloGit)(raiz, arquivo)) {
|
|
199
|
-
throw new
|
|
200
|
+
throw new locale_1.ErroDoCatalogo((m) => m.estado.posturaRastreada(nome));
|
|
200
201
|
}
|
|
201
202
|
const temp = path.join(pasta, `.${nome}.${(0, node_crypto_1.randomUUID)()}.tmp`);
|
|
202
203
|
const fd = fs.openSync(temp, fs.constants.O_WRONLY | fs.constants.O_CREAT | fs.constants.O_EXCL | fs.constants.O_NOFOLLOW, 0o600);
|
package/dist/procedencia.js
CHANGED
|
@@ -60,6 +60,7 @@ exports.exigirCaminhoContido = exigirCaminhoContido;
|
|
|
60
60
|
const fs = __importStar(require("node:fs"));
|
|
61
61
|
const path = __importStar(require("node:path"));
|
|
62
62
|
const estado_thread_1 = require("./estado-thread");
|
|
63
|
+
const locale_1 = require("./locale");
|
|
63
64
|
const util_1 = require("./util");
|
|
64
65
|
/** Caminho relativo à árvore principal, com `/` (o formato do `git ls-files`). */
|
|
65
66
|
function relativoAoRepositorio(principal, arquivo) {
|
|
@@ -134,14 +135,12 @@ function exigirCwdLocal(raiz, threadId, dir, origem) {
|
|
|
134
135
|
return dir;
|
|
135
136
|
const arquivo = path.join(principal, ARQUIVO_DA_ORIGEM[origem](threadId));
|
|
136
137
|
if (rastreadoPeloGit(principal, arquivo)) {
|
|
137
|
-
|
|
138
|
-
|
|
139
|
-
'(git rm -r --cached .orkastery e .orkastery/ no .gitignore) e rode o comando de novo.');
|
|
138
|
+
const rel = path.relative(principal, arquivo);
|
|
139
|
+
throw new locale_1.ErroDoCatalogo((m) => m.estado.rastreado(rel));
|
|
140
140
|
}
|
|
141
141
|
if (!path.isAbsolute(dir) || !fs.existsSync(dir) || !worktreesRegistradas(principal).includes(alvo)) {
|
|
142
|
-
|
|
143
|
-
|
|
144
|
-
`registrada. Recrie a worktree da thread com ork worktree ensure ${threadId}.`);
|
|
142
|
+
const citado = JSON.stringify(String(dir)).slice(0, 200);
|
|
143
|
+
throw new locale_1.ErroDoCatalogo((m) => m.estado.worktreeNaoRegistrada(citado, threadId));
|
|
145
144
|
}
|
|
146
145
|
return dir;
|
|
147
146
|
}
|
|
@@ -167,14 +166,11 @@ function diretorioDaThread(raiz, thread) {
|
|
|
167
166
|
*/
|
|
168
167
|
function exigirHostLocal(raiz, arquivo) {
|
|
169
168
|
if (rastreadoPeloGit(raiz, arquivo)) {
|
|
170
|
-
throw new
|
|
171
|
-
'pulse e do digest só vale do arquivo local desta máquina. Tire-o do índice (git rm --cached) e grave-o ' +
|
|
172
|
-
'de novo nesta máquina.');
|
|
169
|
+
throw new locale_1.ErroDoCatalogo((m) => m.estado.transporteRastreado(path.basename(arquivo)));
|
|
173
170
|
}
|
|
174
171
|
const st = fs.lstatSync(arquivo, { throwIfNoEntry: false });
|
|
175
172
|
if (st && !st.isFile()) {
|
|
176
|
-
throw new
|
|
177
|
-
'não link nem diretório.');
|
|
173
|
+
throw new locale_1.ErroDoCatalogo((m) => m.estado.transporteNaoComum(path.basename(arquivo)));
|
|
178
174
|
}
|
|
179
175
|
}
|
|
180
176
|
/** `filho` está dentro de `pai` (ou é o próprio `pai`), pelos caminhos reais? */
|
|
@@ -219,7 +215,6 @@ function exigirCaminhoContido(raiz, thread, caminho, origem) {
|
|
|
219
215
|
const contido = caminhoContidoOuNulo(raiz, thread, caminho);
|
|
220
216
|
if (contido)
|
|
221
217
|
return contido;
|
|
222
|
-
|
|
223
|
-
|
|
224
|
-
'arquivo de dentro do projeto. Exporte o handoff de novo (ork handoff export) ou copie o arquivo para dentro do projeto.');
|
|
218
|
+
const citado = JSON.stringify(String(origem)).slice(0, 200);
|
|
219
|
+
throw new locale_1.ErroDoCatalogo((m) => m.estado.ponteiroForaDaRaiz(citado));
|
|
225
220
|
}
|
package/dist/projeto-alvo.js
CHANGED
|
@@ -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;
|
|
@@ -87,6 +88,7 @@ const maquina_1 = require("./maquina");
|
|
|
87
88
|
const policies_1 = require("./policies");
|
|
88
89
|
const redacao_url_1 = require("./redacao-url");
|
|
89
90
|
const util_1 = require("./util");
|
|
91
|
+
const locale_1 = require("./locale");
|
|
90
92
|
exports.CONTRATO_PROJETOS = 'ork.projetos/v1';
|
|
91
93
|
exports.CONTRATO_CONSULTA = 'ork.consulta/v1';
|
|
92
94
|
/** O projeto pedido pelo ambiente, abaixo de `--projeto` e acima do cwd. */
|
|
@@ -129,16 +131,18 @@ class ErroDeProjeto extends Error {
|
|
|
129
131
|
return { erro: this.codigo, detalhe: this.detalhe, candidatos: this.candidatos, correcao: this.correcao };
|
|
130
132
|
}
|
|
131
133
|
get texto() {
|
|
134
|
+
const m = (0, locale_1.msg)().projetos;
|
|
132
135
|
return [
|
|
133
136
|
`${this.codigo}: ${this.detalhe}`,
|
|
134
|
-
...(this.candidatos.length ? [
|
|
137
|
+
...(this.candidatos.length ? [m.candidatos, ...this.candidatos.map((c) => ` • ${linhaDoCandidato(c)}`)] : []),
|
|
135
138
|
this.correcao,
|
|
136
139
|
].join('\n');
|
|
137
140
|
}
|
|
138
141
|
}
|
|
139
142
|
exports.ErroDeProjeto = ErroDeProjeto;
|
|
140
143
|
function linhaDoCandidato(c) {
|
|
141
|
-
|
|
144
|
+
const m = (0, locale_1.msg)().projetos;
|
|
145
|
+
return `${c.nome} (${c.abbrev || '-'}) · ${c.raiz} · ${c.remoto ?? m.semRemoto}${c.presente ? '' : ` · ${m.ausente}`}`;
|
|
142
146
|
}
|
|
143
147
|
// ---------------------------------------------------------------------------
|
|
144
148
|
// O registro.
|
|
@@ -250,7 +254,7 @@ function comTrava(alterar, esperaMs = 2000) {
|
|
|
250
254
|
continue;
|
|
251
255
|
}
|
|
252
256
|
if (Date.now() >= limite)
|
|
253
|
-
throw new Error(
|
|
257
|
+
throw new Error((0, locale_1.msg)().projetos.ocupado(trava));
|
|
254
258
|
Atomics.wait(new Int32Array(new SharedArrayBuffer(4)), 0, 0, 10);
|
|
255
259
|
}
|
|
256
260
|
}
|
|
@@ -277,7 +281,7 @@ function gravarRegistro(registro) {
|
|
|
277
281
|
const conteudo = JSON.stringify(registro, null, 2) + '\n';
|
|
278
282
|
// Varredura final: o arquivo nunca carrega credencial, nem por um remoto mal redigido.
|
|
279
283
|
if ((0, policies_1.procurarSegredos)(conteudo).length)
|
|
280
|
-
throw new Error(
|
|
284
|
+
throw new Error((0, locale_1.msg)().projetos.segredoConteudo);
|
|
281
285
|
const temp = path.join(dir, `.${ARQUIVO}.${process.pid}.${Date.now()}.tmp`);
|
|
282
286
|
try {
|
|
283
287
|
fs.writeFileSync(temp, conteudo, { mode: 0o600, flag: 'wx' });
|
|
@@ -310,18 +314,18 @@ function projetoDoCaminho(caminho) {
|
|
|
310
314
|
function registrarProjeto(caminho, fonte, opcoes = {}) {
|
|
311
315
|
const achado = projetoDoCaminho(caminho);
|
|
312
316
|
if (!achado) {
|
|
313
|
-
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);
|
|
314
318
|
}
|
|
315
319
|
const { raiz: canonica, carregado } = achado;
|
|
316
320
|
if (carregado.erros.length)
|
|
317
|
-
throw new Error(
|
|
321
|
+
throw new Error((0, locale_1.msg)().projetos.manifestoInvalido(carregado.caminho));
|
|
318
322
|
const quando = opcoes.quando ?? new Date().toISOString();
|
|
319
323
|
const novo = {
|
|
320
324
|
nome: carregado.manifesto.project.name, abbrev: carregado.manifesto.project.abbrev, raiz: canonica,
|
|
321
325
|
remoto: remotoDoProjeto(canonica, carregado.manifesto.fabrica?.remoto ?? 'origin'), atualizadoEm: quando, fonte,
|
|
322
326
|
};
|
|
323
327
|
if ((0, policies_1.procurarSegredos)(JSON.stringify(novo)).length) {
|
|
324
|
-
throw new Error(
|
|
328
|
+
throw new Error((0, locale_1.msg)().projetos.segredoEntrada);
|
|
325
329
|
}
|
|
326
330
|
return comTrava(() => {
|
|
327
331
|
const registro = lerRegistroDeProjetos();
|
|
@@ -334,16 +338,52 @@ function registrarProjeto(caminho, fonte, opcoes = {}) {
|
|
|
334
338
|
return entrada;
|
|
335
339
|
}, opcoes.esperaMs);
|
|
336
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
|
+
}
|
|
337
368
|
/**
|
|
338
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.
|
|
339
375
|
*/
|
|
340
|
-
function registrarProjetoEmSilencio(raiz, fonte) {
|
|
376
|
+
function registrarProjetoEmSilencio(raiz, fonte, opcoes = {}) {
|
|
377
|
+
const efemero = opcoes.efemero ?? diretorioEfemero;
|
|
341
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
|
+
}
|
|
342
382
|
registrarProjeto(raiz, fonte);
|
|
343
383
|
return null;
|
|
344
384
|
}
|
|
345
385
|
catch (e) {
|
|
346
|
-
return
|
|
386
|
+
return (0, locale_1.msg)().projetos.avisoRegistro(caminhoDoRegistro(), e.message);
|
|
347
387
|
}
|
|
348
388
|
}
|
|
349
389
|
/** Tira do registro por nome, abbrev ou caminho. Nada casou e recusa, com os registrados. */
|
|
@@ -354,7 +394,7 @@ function esquecerProjeto(alvo, cwd = process.cwd()) {
|
|
|
354
394
|
const porCaminho = ehCaminho(valor) ? caminhoPossivel(valor, cwd) : null;
|
|
355
395
|
const sai = registro.projetos.filter((p) => porCaminho ? p.raiz === porCaminho : casaNome(p, valor));
|
|
356
396
|
if (!sai.length) {
|
|
357
|
-
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);
|
|
358
398
|
}
|
|
359
399
|
registro.projetos = registro.projetos.filter((p) => !sai.includes(p));
|
|
360
400
|
registro.atualizadoEm = new Date().toISOString();
|
|
@@ -392,17 +432,17 @@ function candidatoDoRegistro(p) {
|
|
|
392
432
|
function raizPorCaminho(valor, cwd) {
|
|
393
433
|
const dir = path.resolve(cwd, expandirHome(valor));
|
|
394
434
|
if (!fs.existsSync(dir)) {
|
|
395
|
-
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);
|
|
396
436
|
}
|
|
397
437
|
const achada = (0, util_1.subirAte)(dir, manifest_1.NOME_MANIFESTO) ?? (0, util_1.subirAte)(dir, manifest_1.NOME_MANIFESTO_LEGADO);
|
|
398
438
|
if (!achada) {
|
|
399
|
-
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);
|
|
400
440
|
}
|
|
401
441
|
return fs.realpathSync(achada);
|
|
402
442
|
}
|
|
403
443
|
function raizPorNome(valor) {
|
|
404
444
|
if (!exports.PADRAO_DO_NOME_DE_PROJETO.test(valor)) {
|
|
405
|
-
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);
|
|
406
446
|
}
|
|
407
447
|
const registrados = lerRegistroDeProjetos().projetos;
|
|
408
448
|
const casados = registrados.filter((p) => casaNome(p, valor));
|
|
@@ -410,9 +450,9 @@ function raizPorNome(valor) {
|
|
|
410
450
|
if (presentes.length === 1)
|
|
411
451
|
return presentes[0].raiz;
|
|
412
452
|
if (presentes.length > 1) {
|
|
413
|
-
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);
|
|
414
454
|
}
|
|
415
|
-
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);
|
|
416
456
|
}
|
|
417
457
|
/**
|
|
418
458
|
* F2 do CHECK: o nome aponta a arvore principal; quem ja esta numa copia DESSE projeto (a worktree de
|
|
@@ -467,12 +507,12 @@ function resolverProjetoAlvo(entrada = {}) {
|
|
|
467
507
|
if (entrada.opcao !== undefined && entrada.opcao !== null) {
|
|
468
508
|
const valor = entrada.opcao.trim();
|
|
469
509
|
if (!valor) {
|
|
470
|
-
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);
|
|
471
511
|
}
|
|
472
512
|
// D4 (F1 do CHECK): no host, quem pede escolhe entre os projetos da maquina pelo NOME. Caminho nao
|
|
473
513
|
// entra por nenhuma tool, nem pela que repassa os argumentos como dados (os scripts do Hermes).
|
|
474
514
|
if (host && ehCaminho(valor)) {
|
|
475
|
-
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);
|
|
476
516
|
}
|
|
477
517
|
return { raiz: resolverValor(valor, cwd), origem: 'opcao', pedido: valor };
|
|
478
518
|
}
|
|
@@ -484,10 +524,9 @@ function resolverProjetoAlvo(entrada = {}) {
|
|
|
484
524
|
if (candidatos.length === 1)
|
|
485
525
|
return { raiz: copiaDoCwd(candidatos[0].raiz, cwd), origem: 'unico-conhecido', pedido: null };
|
|
486
526
|
if (candidatos.length > 1) {
|
|
487
|
-
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));
|
|
488
528
|
}
|
|
489
|
-
throw new ErroDeProjeto('projeto.nenhum',
|
|
490
|
-
'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);
|
|
491
530
|
}
|
|
492
531
|
return null;
|
|
493
532
|
}
|