@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.
Files changed (385) hide show
  1. package/adapters/README.md +18 -0
  2. package/adapters/claude-code/.claude-plugin/plugin.json +1 -0
  3. package/adapters/claude-code/README.md +37 -5
  4. package/adapters/claude-code/agents/ork-check.md +1 -0
  5. package/adapters/claude-code/agents/ork-go.md +1 -0
  6. package/adapters/claude-code/agents/ork-goal.md +1 -0
  7. package/adapters/claude-code/agents/ork-master.md +1 -0
  8. package/adapters/claude-code/agents/ork-plan.md +1 -0
  9. package/adapters/claude-code/agents/ork-ship.md +1 -0
  10. package/adapters/claude-code/hooks/hooks.json +2 -1
  11. package/adapters/claude-code/hooks/ork-guard.js +15 -1
  12. package/adapters/claude-code/hooks/ork-resposta.js +91 -0
  13. package/adapters/claude-code/hooks/ork-sensor.js +18 -2
  14. package/adapters/claude-code/hooks/quota-signal.js +14 -0
  15. package/adapters/claude-code/mods/ork-mensageiro/.claude-plugin/plugin.json +14 -0
  16. package/adapters/claude-code/mods/ork-mensageiro/hooks/caixa.ts +215 -0
  17. package/adapters/claude-code/mods/ork-mensageiro/hooks/hooks.json +3 -0
  18. package/adapters/claude-code/mods/ork-mensageiro/hooks/painel.tsx +165 -0
  19. package/adapters/claude-code/mods/ork-mensageiro/hooks/recepcao.ts +256 -0
  20. package/adapters/claude-code/mods/ork-mensageiro/hooks/register.tsx +481 -0
  21. package/adapters/claude-code/mods/ork-mensageiro/orkastery-mod.json +5 -0
  22. package/adapters/claude-code/mods/ork-mensageiro/types/index.d.ts +85 -0
  23. package/adapters/claude-code/mods/ork-pista/hooks/ci.ts +9 -5
  24. package/adapters/claude-code/mods/ork-ritual/.claude-plugin/plugin.json +14 -0
  25. package/adapters/claude-code/mods/ork-ritual/hooks/hooks.json +3 -0
  26. package/adapters/claude-code/mods/ork-ritual/hooks/nota.ts +88 -0
  27. package/adapters/claude-code/mods/ork-ritual/hooks/register.tsx +494 -0
  28. package/adapters/claude-code/mods/ork-ritual/hooks/replay.tsx +271 -0
  29. package/adapters/claude-code/mods/ork-ritual/hooks/ritual.ts +218 -0
  30. package/adapters/claude-code/mods/ork-ritual/orkastery-mod.json +5 -0
  31. package/adapters/claude-code/mods/ork-ritual/types/index.d.ts +106 -0
  32. package/adapters/claude-code/mods/ork-sentinela/hooks/vigia.ts +1 -1
  33. package/adapters/codex/skills/ork/SKILL.md +2 -0
  34. package/adapters/hermes/README.md +64 -1
  35. package/adapters/hermes/bin/ork-conhecimento-colecoes.sh +14 -0
  36. package/adapters/hermes/bin/ork-conhecimento-listar.sh +15 -0
  37. package/adapters/hermes/bin/ork-conhecimento-mostrar.sh +16 -0
  38. package/adapters/hermes/bin/ork-conhecimento-verificar.sh +15 -0
  39. package/adapters/hermes/bin/ork-vigia-batida.py +127 -0
  40. package/adapters/hermes/hermes.plugin.json +4 -0
  41. package/adapters/hermes/hitl-ingress/__init__.py +101 -8
  42. package/adapters/hermes/skills/orkastery-devmaster/SKILL.md +2 -2
  43. package/adapters/openclaw/README.md +81 -9
  44. package/adapters/openclaw/bin/ork-vigia-batida.js +86 -0
  45. package/adapters/openclaw/dist/hitl-ingress.js +106 -9
  46. package/adapters/openclaw/dist/index.js +86 -0
  47. package/adapters/openclaw/openclaw.plugin.json +34 -4
  48. package/adapters/openclaw/package.json +2 -2
  49. package/adapters/openclaw/src/hitl-ingress.ts +103 -9
  50. package/adapters/openclaw/src/index.ts +94 -0
  51. package/assets/adapters-en/claude-code/README.md +403 -0
  52. package/assets/adapters-en/claude-code/agents/ork-check.md +33 -0
  53. package/assets/adapters-en/claude-code/agents/ork-go.md +33 -0
  54. package/assets/adapters-en/claude-code/agents/ork-goal.md +34 -0
  55. package/assets/adapters-en/claude-code/agents/ork-master.md +35 -0
  56. package/assets/adapters-en/claude-code/agents/ork-plan.md +33 -0
  57. package/assets/adapters-en/claude-code/agents/ork-ship.md +33 -0
  58. package/assets/adapters-en/claude-code/commands/check.md +46 -0
  59. package/assets/adapters-en/claude-code/commands/go.md +46 -0
  60. package/assets/adapters-en/claude-code/commands/goal.md +55 -0
  61. package/assets/adapters-en/claude-code/commands/master.md +54 -0
  62. package/assets/adapters-en/claude-code/commands/onboarding.md +22 -0
  63. package/assets/adapters-en/claude-code/commands/ork.md +126 -0
  64. package/assets/adapters-en/claude-code/commands/plan.md +47 -0
  65. package/assets/adapters-en/claude-code/commands/ship.md +45 -0
  66. package/assets/adapters-en/codex/skills/ork/SKILL.md +85 -0
  67. package/assets/adapters-en/hermes/README.md +273 -0
  68. package/assets/adapters-en/hermes/skills/orkastery-devmaster/SKILL.md +169 -0
  69. package/assets/references-en/README.md +25 -0
  70. package/assets/references-en/code-review-axes.md +82 -0
  71. package/assets/references-en/definition-of-done.md +74 -0
  72. package/assets/references-en/performance-checklist.md +53 -0
  73. package/assets/references-en/security-checklist.md +101 -0
  74. package/assets/references-en/testing-patterns.md +51 -0
  75. package/assets/security-scan/defaults/.golangci.yml +2 -0
  76. package/assets/security-scan/defaults/eslint.config.mjs +11 -0
  77. package/assets/security-scan/defaults/gitleaks.toml +3 -0
  78. package/assets/security-scan/defaults/ruff.toml +1 -0
  79. package/assets/security-scan/tools-agil.json +87 -0
  80. package/assets/security-scan/tools.json +625 -0
  81. package/assets/skills-en/core/onboarding/SKILL.md +58 -0
  82. package/assets/skills-en/core/orkastery-bootstrap/SKILL.md +119 -0
  83. package/assets/skills-en/core/thread-state/SKILL.md +88 -0
  84. package/assets/skills-en/governance/decision-triage/SKILL.md +65 -0
  85. package/assets/skills-en/governance/narrative-guardian/SKILL.md +66 -0
  86. package/assets/skills-en/governance/roadmap-keeper/SKILL.md +60 -0
  87. package/assets/skills-en/governance/scope-check-capability-map/SKILL.md +71 -0
  88. package/assets/skills-en/observability/thread-tracing/SKILL.md +63 -0
  89. package/assets/skills-en/phases/check-quality/SKILL.md +103 -0
  90. package/assets/skills-en/phases/go-implementation/SKILL.md +78 -0
  91. package/assets/skills-en/phases/goal-definition/SKILL.md +69 -0
  92. package/assets/skills-en/phases/master-metrics/SKILL.md +72 -0
  93. package/assets/skills-en/phases/plan-specification/SKILL.md +67 -0
  94. package/assets/skills-en/phases/security-remediation/SKILL.md +70 -0
  95. package/assets/skills-en/phases/ship-release/SKILL.md +71 -0
  96. package/assets/skills-en/reviewers/code-reviewer/SKILL.md +61 -0
  97. package/assets/skills-en/reviewers/security-auditor/SKILL.md +93 -0
  98. package/assets/skills-en/reviewers/test-engineer/SKILL.md +66 -0
  99. package/assets/skills-en/reviewers/web-performance-auditor/SKILL.md +63 -0
  100. package/dist/adapters/claude-bg.js +118 -4
  101. package/dist/adapters/codex-controller-worker.js +12 -5
  102. package/dist/adapters/codex-events.js +16 -4
  103. package/dist/adapters/codex.js +3 -1
  104. package/dist/atualizar-branch.js +245 -0
  105. package/dist/auditoria.js +13 -11
  106. package/dist/auditrun.js +51 -46
  107. package/dist/autorizacao-duravel.js +327 -0
  108. package/dist/board.js +94 -40
  109. package/dist/branch-de-estado.js +16 -8
  110. package/dist/busca-semantica.js +7 -5
  111. package/dist/catalogo.js +2 -1
  112. package/dist/changelog-reconciliacao.js +290 -0
  113. package/dist/check-agil.js +500 -0
  114. package/dist/check-modo.js +41 -0
  115. package/dist/check-paralelo.js +183 -0
  116. package/dist/ci.js +248 -45
  117. package/dist/ciclos.js +8 -6
  118. package/dist/claim-lint.js +12 -8
  119. package/dist/claims-conferir.js +47 -39
  120. package/dist/claims.js +10 -9
  121. package/dist/company-brain-client.js +10 -3
  122. package/dist/company-brain-migration.js +11 -5
  123. package/dist/conducao-batida.js +759 -0
  124. package/dist/conducao-sentinela.js +25 -8
  125. package/dist/conducao.js +84 -29
  126. package/dist/conhecimento-consulta.js +270 -0
  127. package/dist/conhecimento.js +111 -87
  128. package/dist/conta-esgotada.js +127 -0
  129. package/dist/dado-privado.js +816 -0
  130. package/dist/decisao-autonoma.js +5 -4
  131. package/dist/demo.js +14 -12
  132. package/dist/dependencias-da-worktree.js +25 -0
  133. package/dist/divida.js +38 -36
  134. package/dist/docs.js +81 -74
  135. package/dist/doctor-forja.js +345 -0
  136. package/dist/doctor-pulse-cron.js +113 -1
  137. package/dist/doctor.js +164 -6
  138. package/dist/dsn-da-memoria.js +417 -0
  139. package/dist/entrega-por-mod.js +503 -0
  140. package/dist/entrega-pr.js +143 -43
  141. package/dist/esgotamentos.js +13 -11
  142. package/dist/estado-thread.js +21 -18
  143. package/dist/evalrunner.js +35 -32
  144. package/dist/fabrica-batida.js +34 -21
  145. package/dist/fabrica-estado.js +13 -10
  146. package/dist/fix.js +21 -19
  147. package/dist/forja/adaptador.js +6 -0
  148. package/dist/forja/ambiente-de-ci.js +27 -0
  149. package/dist/forja/api.js +256 -0
  150. package/dist/forja/cache.js +89 -0
  151. package/dist/forja/cli.js +60 -0
  152. package/dist/forja/contrato.js +9 -0
  153. package/dist/forja/endereco.js +43 -0
  154. package/dist/forja/estado.js +22 -0
  155. package/dist/forja/executor.js +73 -0
  156. package/dist/forja/github/ci.js +95 -0
  157. package/dist/forja/github/dono-da-rede.js +18 -0
  158. package/dist/forja/github/metadados.js +15 -0
  159. package/dist/forja/github/pedidos.js +200 -0
  160. package/dist/forja/gitlab/ci.js +141 -0
  161. package/dist/forja/gitlab/consultas.js +59 -0
  162. package/dist/forja/gitlab/dono-da-rede.js +43 -0
  163. package/dist/forja/gitlab/metadados.js +15 -0
  164. package/dist/forja/gitlab/pedidos-abertos.js +158 -0
  165. package/dist/forja/gitlab/pedidos.js +141 -0
  166. package/dist/forja/produtor.js +32 -0
  167. package/dist/forja/registro.js +31 -0
  168. package/dist/forja/resolver.js +121 -0
  169. package/dist/forja/texto.js +13 -0
  170. package/dist/forja/versao.js +71 -0
  171. package/dist/forja.js +123 -80
  172. package/dist/handoff.js +23 -13
  173. package/dist/hitl-contract.js +46 -43
  174. package/dist/hitl-curto.js +37 -25
  175. package/dist/hitl-gates.js +13 -11
  176. package/dist/hitl-local-receipt.js +51 -0
  177. package/dist/hitl-local.js +11 -2
  178. package/dist/hitl-lock.js +5 -11
  179. package/dist/hitl-public-receipt.js +11 -0
  180. package/dist/hitl-resumo.js +44 -1
  181. package/dist/hitl-sessions.js +62 -9
  182. package/dist/hitl-texto-livre.js +7 -4
  183. package/dist/hitl.js +34 -31
  184. package/dist/horario.js +16 -0
  185. package/dist/hosts.js +104 -134
  186. package/dist/index.js +848 -548
  187. package/dist/indice-vetorial.js +14 -12
  188. package/dist/init.js +11 -2
  189. package/dist/integracoes-locais.js +2 -0
  190. package/dist/intelligence-graph-cli.js +123 -69
  191. package/dist/intelligence-graph-query.js +37 -22
  192. package/dist/leases.js +19 -18
  193. package/dist/ledger-stats.js +17 -16
  194. package/dist/ledger.js +31 -1
  195. package/dist/licoes.js +12 -11
  196. package/dist/locale-accounts.js +220 -0
  197. package/dist/locale-adapter.js +291 -0
  198. package/dist/locale-ajuda.js +76 -4
  199. package/dist/locale-audit.js +199 -0
  200. package/dist/locale-claims.js +213 -0
  201. package/dist/locale-conducao.js +138 -0
  202. package/dist/locale-conhecimento.js +181 -0
  203. package/dist/locale-decisao.js +205 -0
  204. package/dist/locale-docs.js +230 -0
  205. package/dist/locale-estado.js +101 -0
  206. package/dist/locale-forja.js +290 -0
  207. package/dist/locale-gerados.js +5 -0
  208. package/dist/locale-grafo.js +129 -0
  209. package/dist/locale-master.js +83 -0
  210. package/dist/locale-network.js +524 -0
  211. package/dist/locale-operacao-restante.js +931 -0
  212. package/dist/locale-projetos.js +100 -0
  213. package/dist/locale-prompts.js +194 -0
  214. package/dist/locale-pulse.js +140 -2
  215. package/dist/locale-reservas.js +87 -0
  216. package/dist/locale-retry.js +145 -6
  217. package/dist/locale-security-scan.js +69 -0
  218. package/dist/locale-setup.js +192 -0
  219. package/dist/locale-ship.js +169 -66
  220. package/dist/locale-thread.js +149 -5
  221. package/dist/locale-verify.js +80 -4
  222. package/dist/locale-worktree.js +246 -0
  223. package/dist/locale.js +553 -9
  224. package/dist/maestro-runtime.js +22 -3
  225. package/dist/manifest.js +287 -11
  226. package/dist/maquina-ociosa.js +211 -0
  227. package/dist/maquina.js +10 -5
  228. package/dist/master-nota-local.js +200 -0
  229. package/dist/master-nota.js +10 -2
  230. package/dist/master.js +118 -41
  231. package/dist/mcp-conhecimento.js +52 -0
  232. package/dist/mcp-experiencia.js +26 -5
  233. package/dist/mcp-install.js +73 -8
  234. package/dist/mcp-noctum.js +101 -0
  235. package/dist/mcp-server.js +82 -14
  236. package/dist/mcp-ship-transporte.js +977 -0
  237. package/dist/mcp-ship.js +68 -24
  238. package/dist/mcp-transportes.js +17 -0
  239. package/dist/memoria.js +63 -58
  240. package/dist/modos-migracao.js +8 -6
  241. package/dist/modos.js +17 -18
  242. package/dist/network-roadmap.js +85 -49
  243. package/dist/noctum-aceite.js +789 -0
  244. package/dist/noctum-arco.js +540 -33
  245. package/dist/noctum-capacidade.js +3 -3
  246. package/dist/noctum-changelog.js +399 -0
  247. package/dist/noctum-cli.js +482 -0
  248. package/dist/noctum-coordenacao.js +1225 -0
  249. package/dist/noctum-entrega.js +1169 -0
  250. package/dist/noctum-envelope.js +252 -16
  251. package/dist/noctum-execucao.js +95 -23
  252. package/dist/noctum-fechamento.js +405 -0
  253. package/dist/noctum-fila.js +43 -9
  254. package/dist/noctum-guarda.js +256 -0
  255. package/dist/noctum-integracao.js +507 -0
  256. package/dist/noctum-maquinas.js +383 -0
  257. package/dist/noctum-medicao.js +450 -0
  258. package/dist/noctum-modo.js +362 -0
  259. package/dist/noctum-pergunta-canal.js +96 -0
  260. package/dist/noctum-pergunta.js +115 -0
  261. package/dist/noctum-provas.js +838 -0
  262. package/dist/noctum-reconciliacao.js +591 -0
  263. package/dist/noctum-registro.js +215 -0
  264. package/dist/noctum-relatorio.js +827 -0
  265. package/dist/noctum-resposta.js +207 -0
  266. package/dist/noctum-sessoes-em-voo.js +93 -0
  267. package/dist/noctum-supervisao.js +649 -0
  268. package/dist/noctum-terminal.js +459 -0
  269. package/dist/noctum-transporte.js +655 -0
  270. package/dist/noctum-vigia.js +639 -0
  271. package/dist/ocupacao.js +3 -1
  272. package/dist/onboarding.js +16 -5
  273. package/dist/orkmind.js +39 -23
  274. package/dist/orquestracao.js +31 -35
  275. package/dist/parado-no-condutor.js +146 -124
  276. package/dist/phase.js +53 -27
  277. package/dist/policies.js +33 -0
  278. package/dist/postura-local.js +4 -3
  279. package/dist/procedencia.js +9 -14
  280. package/dist/projeto-alvo.js +59 -20
  281. package/dist/prompts.js +136 -42
  282. package/dist/prova-minima.js +5 -6
  283. package/dist/pulse-cadencia.js +5 -4
  284. package/dist/pulse-consentimento.js +53 -1
  285. package/dist/pulse-delivery.js +143 -27
  286. package/dist/pulse-resposta.js +368 -4
  287. package/dist/pulse.js +136 -3
  288. package/dist/ratelimit.js +12 -4
  289. package/dist/recall.js +14 -13
  290. package/dist/rede-adesao.js +13 -8
  291. package/dist/rede-forja.js +108 -24
  292. package/dist/rede-status.js +63 -45
  293. package/dist/rede.js +86 -46
  294. package/dist/retomada-checkpoint.js +101 -0
  295. package/dist/retry.js +228 -73
  296. package/dist/roadmap-reservas.js +32 -32
  297. package/dist/runtime-ambiente.js +5 -0
  298. package/dist/runtime-context.js +117 -43
  299. package/dist/runtime-escada.js +423 -0
  300. package/dist/runtime-profiles.js +103 -46
  301. package/dist/saida-segura.js +3 -2
  302. package/dist/security-scan/agil.js +355 -0
  303. package/dist/security-scan/cli.js +76 -0
  304. package/dist/security-scan/compare.js +149 -0
  305. package/dist/security-scan/config.js +93 -0
  306. package/dist/security-scan/detect.js +97 -0
  307. package/dist/security-scan/executor.js +188 -0
  308. package/dist/security-scan/guard.js +180 -0
  309. package/dist/security-scan/imagem-de-lint.js +96 -0
  310. package/dist/security-scan/normalize/actionlint.js +12 -0
  311. package/dist/security-scan/normalize/eslint.js +12 -0
  312. package/dist/security-scan/normalize/gitleaks.js +13 -0
  313. package/dist/security-scan/normalize/golangci-lint.js +13 -0
  314. package/dist/security-scan/normalize/govulncheck.js +36 -0
  315. package/dist/security-scan/normalize/index.js +25 -0
  316. package/dist/security-scan/normalize/npm-audit.js +30 -0
  317. package/dist/security-scan/normalize/osv-scanner.js +32 -0
  318. package/dist/security-scan/normalize/oxlint.js +51 -0
  319. package/dist/security-scan/normalize/pip-audit.js +16 -0
  320. package/dist/security-scan/normalize/ruff.js +12 -0
  321. package/dist/security-scan/normalize/semgrep.js +20 -0
  322. package/dist/security-scan/normalize/trivy.js +33 -0
  323. package/dist/security-scan/normalize/util.js +204 -0
  324. package/dist/security-scan/normalize/zizmor.js +19 -0
  325. package/dist/security-scan/report.js +156 -0
  326. package/dist/security-scan/run.js +448 -0
  327. package/dist/security-scan/tools.js +62 -0
  328. package/dist/security-scan/trabalhador.js +74 -0
  329. package/dist/security-scan/types.js +15 -0
  330. package/dist/session-events.js +19 -2
  331. package/dist/session-watcher-claude.js +74 -19
  332. package/dist/session-watcher.js +156 -10
  333. package/dist/sessoes-contas.js +9 -0
  334. package/dist/sessoes-inventario.js +1 -1
  335. package/dist/sessoes.js +25 -23
  336. package/dist/setup.js +59 -58
  337. package/dist/ship-publicar.js +263 -92
  338. package/dist/ship.js +160 -17
  339. package/dist/superficie.js +14 -11
  340. package/dist/thread-close.js +9 -9
  341. package/dist/thread.js +121 -18
  342. package/dist/tokens.js +15 -11
  343. package/dist/trabalho-thread.js +297 -0
  344. package/dist/transporte-do-canal.js +189 -0
  345. package/dist/types.js +12 -1
  346. package/dist/util.js +5 -2
  347. package/dist/varredura-acoes.js +507 -0
  348. package/dist/verify.js +472 -29
  349. package/dist/worktree-local.js +12 -10
  350. package/dist/worktree.js +81 -85
  351. package/eval/casos/check-quality.json +77 -0
  352. package/eval/casos/security-auditor.json +148 -0
  353. package/eval/casos/security-remediation.json +161 -0
  354. package/eval/fixtures/security-scan/README.md +8 -0
  355. package/eval/fixtures/security-scan/go/.github/workflows/ci.yml +12 -0
  356. package/eval/fixtures/security-scan/go/Dockerfile +4 -0
  357. package/eval/fixtures/security-scan/go/README.md +4 -0
  358. package/eval/fixtures/security-scan/go/config.go +4 -0
  359. package/eval/fixtures/security-scan/go/go.mod +5 -0
  360. package/eval/fixtures/security-scan/go/go.sum +2 -0
  361. package/eval/fixtures/security-scan/go/main.go +31 -0
  362. package/eval/fixtures/security-scan/js/.github/workflows/ci.yml +12 -0
  363. package/eval/fixtures/security-scan/js/Dockerfile +3 -0
  364. package/eval/fixtures/security-scan/js/README.md +4 -0
  365. package/eval/fixtures/security-scan/js/package-lock.json +844 -0
  366. package/eval/fixtures/security-scan/js/package.json +10 -0
  367. package/eval/fixtures/security-scan/js/src/config.js +4 -0
  368. package/eval/fixtures/security-scan/js/src/server.js +17 -0
  369. package/eval/fixtures/security-scan/js/src/util.ts +4 -0
  370. package/eval/fixtures/security-scan/js/tsconfig.json +4 -0
  371. package/eval/fixtures/security-scan/python/.github/workflows/ci.yml +12 -0
  372. package/eval/fixtures/security-scan/python/Dockerfile +3 -0
  373. package/eval/fixtures/security-scan/python/README.md +4 -0
  374. package/eval/fixtures/security-scan/python/app/__init__.py +0 -0
  375. package/eval/fixtures/security-scan/python/app/config.py +2 -0
  376. package/eval/fixtures/security-scan/python/app/main.py +19 -0
  377. package/eval/fixtures/security-scan/python/requirements.txt +1 -0
  378. package/package.json +9 -4
  379. package/references/security-checklist.md +3 -3
  380. package/skills/README.md +1 -0
  381. package/skills/core/orkastery-bootstrap/SKILL.md +2 -2
  382. package/skills/phases/check-quality/SKILL.md +16 -0
  383. package/skills/phases/go-implementation/SKILL.md +6 -0
  384. package/skills/phases/security-remediation/SKILL.md +70 -0
  385. 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({
@@ -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 Error('estado.link: .orkastery precisa ser pasta de verdade');
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 Error('estado.link: .orkastery/private precisa ser pasta de verdade');
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 Error(`estado.rastreado: ${nome} está versionado no git; tire-o do índice (git rm --cached) antes de confirmar`);
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);
@@ -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
- throw new Error(`estado.rastreado: ${path.relative(principal, arquivo)} está versionado no git, e estado versionado ` +
138
- 'não escolhe onde o ork roda (ele pode ter vindo de outro repositório). Tire o estado do índice ' +
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
- throw new Error(`estado.worktree-nao-registrada: ${JSON.stringify(String(dir)).slice(0, 200)} não aparece em ` +
143
- `git worktree list deste repositório, e o ork só roda git e agente na raiz do projeto ou numa worktree ` +
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 Error(`transporte.rastreado: ${path.basename(arquivo)} está versionado no git, e o transporte do ` +
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 Error(`transporte.rastreado: ${path.basename(arquivo)} precisa ser um arquivo comum desta máquina, ` +
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
- throw new Error(`ponteiro.fora-da-raiz: ${JSON.stringify(String(origem)).slice(0, 200)} aponta para fora da raiz do ` +
223
- 'projeto e da worktree registrada da thread (também por link simbólico). Um ponteiro guardado no estado só lê ' +
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
  }
@@ -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 ? ['Candidatos:', ...this.candidatos.map((c) => ` • ${linhaDoCandidato(c)}`)] : []),
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
- return `${c.nome} (${c.abbrev || '-'}) · ${c.raiz} · ${c.remoto ?? 'sem remoto'}${c.presente ? '' : ' · ausente do disco'}`;
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(`registro de projetos ocupado (${trava}); tente de novo`);
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('registro de projetos recusado: o conteudo parece carregar segredo');
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', `nenhum manifesto do ork em ${raizParaExibir(path.resolve(caminho))}`, [], 'Rode `ork init` na raiz do projeto antes de registrá-lo.');
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(`registro de projetos: manifesto inválido em ${carregado.caminho}`);
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('registro de projetos recusado: a entrada parece carregar segredo');
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 `aviso: projeto não registrado em ${caminhoDoRegistro()} (${e.message})`;
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', `"${valor}" não está no registro de projetos desta máquina`, registro.projetos.map(candidatoDoRegistro), 'Veja os registrados com `ork projetos`.');
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', `o caminho ${raizParaExibir(dir)} não existe`, [], 'Informe o caminho da raiz de um projeto com orkastery.yaml, ou o nome de um projeto registrado (`ork projetos`).');
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', `nenhum orkastery.yaml em ${raizParaExibir(dir)} nem acima dele`, [], 'Rode `ork init` na raiz do projeto, ou informe o nome de um projeto registrado (`ork projetos`).');
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', `"${valor}" não é um nome de projeto válido`, lerRegistroDeProjetos().projetos.map(candidatoDoRegistro), 'Use o nome ou o abbrev de um projeto de `ork projetos`.');
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', `"${valor}" casa ${presentes.length} projetos registrados nesta máquina`, presentes.map(candidatoDoRegistro), 'Repita com o caminho da raiz (`--projeto <caminho>`), ou tire a cópia que sobra com `ork projetos esquecer <caminho>`.');
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 ? `"${valor}" está registrado, mas o manifesto não está mais na raiz` : `"${valor}" não está no registro de projetos desta máquina`, registrados.map(candidatoDoRegistro), 'Veja os registrados com `ork projetos`; registre uma cópia com `ork projetos registrar <caminho>`.');
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', '--projeto sem valor', lerRegistroDeProjetos().projetos.map(candidatoDoRegistro), 'Uso: --projeto <nome|caminho>; os nomes registrados estão em `ork projetos`.');
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', `no host o projeto vem pelo nome registrado; o caminho "${valor}" não é aceito`, lerRegistroDeProjetos().projetos.map(candidatoDoRegistro), 'Use o nome de um projeto de `ork projetos` (ex.: --projeto orkastery).');
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', `${candidatos.length} projetos conhecidos nesta máquina e nenhum foi pedido; o ork não escolhe pelo diretório do gateway`, candidatos.map((c) => c.candidato), `Repita com o projeto pedido: parâmetro \`projeto\` da tool, ou \`--projeto <nome>\`. ${exports.OFERTA_DA_REDE}`);
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', 'nenhum projeto conhecido nesta máquina e nenhum foi pedido', [], 'Registre o projeto com `ork projetos registrar <caminho>` (ou `ork init` na raiz dele) e repita com o nome. ' +
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
  }