@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/locale.js CHANGED
@@ -25,8 +25,8 @@
25
25
  * ausente, os erros de argumento de `thread new`, `--runtime` e o modelo ao trocar de runtime no `phase run`)
26
26
  * e remontado no locale do comando pela entrada do CLI. Seguem como o modulo dono escreve, ate a familia dele migrar: o validador
27
27
  * do manifesto (fora os avisos de preferencia da experiencia, traduzidos na impressao), o regime de
28
- * memoria, o erro de estado durante a gravacao e, na F2b, a recusa `ship.remoto-invalido` do `exigirRemoto`
29
- * (`branch-de-estado.ts`, modulo compartilhado com a fabrica e a rede). O cabecalho `Projeto consultado:` e `Não lido:` e
28
+ * memoria e o erro de estado durante a gravacao; a recusa `<prefixo>.remoto-invalido` do `exigirRemoto` (`branch-de-estado.ts`),
29
+ * que a F2b deixou em pt-BR, vai ao catalogo na F3b. O cabecalho `Projeto consultado:` e `Não lido:` e
30
30
  * contrato do RM-052 com os hosts e fica igual nas duas linguas.
31
31
  *
32
32
  * F2b (G2 e D1 da thread ork-rm061f2b): o texto que o proprio comando monta e que tambem vai ao ledger ou
@@ -47,6 +47,15 @@
47
47
  * O gerador recebe o locale por parametro, com pt-BR por omissao, e so a entrada do CLI passa a lingua do dono: o
48
48
  * locale ativo nunca escolhe a lingua de um arquivo. Chave, valor e marcador do arquivo nao mudam com a lingua.
49
49
  *
50
+ * F3b (G4 e D1 a D5 da thread ork-rm061f3b): o resto da lista do dono (`thread list|close|entrega`, `worktree`,
51
+ * `claims`, `decisao placar`, `accounts`, `network`, `roadmap reservas|pegar|soltar|feat`, `docs verificar|sincronizar`,
52
+ * `adapter` e os erros de estado) sai pelo catalogo, com o que vai ao ledger, ao `claims.jsonl` ou ao `--json` nascido em
53
+ * pt-BR e remontado na impressao. O `ork adapter install` copia, com o dono em ingles, as variantes de
54
+ * `core/assets/{skills,references,adapters}-en/`. Seguem em pt-BR, para a F3c: `decisao registrar` (G5), `network roadmap`
55
+ * (G6), `thread new --from-finding` e os prompts de fase (G7).
56
+ *
57
+ * A família `forja` (o motivo dos erros `forja.*` e a seção forja do `ork doctor`) nasce coberta.
58
+ *
50
59
  * Ingles (D8): curto, no imperativo onde e instrucao, com os mesmos termos em todo o CLI (`thread`,
51
60
  * `phase`, `claim`, `verify`, `ship`, `pulse`, `lease`, `ledger`, `worktree`, `slug`). Comando, flag
52
61
  * e identificador dentro de frase vao entre crases; valor que e so um comando (a linha `fix:`) fica nu.
@@ -57,13 +66,16 @@ exports.chaveDoLocale = chaveDoLocale;
57
66
  exports.cobreLocale = cobreLocale;
58
67
  exports.localeDe = localeDe;
59
68
  exports.resolverLocale = resolverLocale;
69
+ exports.linguaDeclaradaDoDono = linguaDeclaradaDoDono;
60
70
  exports.ativarLocale = ativarLocale;
61
71
  exports.localeAtivo = localeAtivo;
62
72
  exports.comLocale = comLocale;
63
73
  exports.msg = msg;
64
74
  exports.mensagemDoErro = mensagemDoErro;
75
+ exports.textoDoErro = textoDoErro;
65
76
  exports.ligarRemontagem = ligarRemontagem;
66
77
  exports.textoDoCatalogo = textoDoCatalogo;
78
+ exports.montadorDe = montadorDe;
67
79
  exports.remontar = remontar;
68
80
  exports.nomeDoCheck = nomeDoCheck;
69
81
  const locale_onboarding_1 = require("./locale-onboarding");
@@ -77,20 +89,73 @@ const locale_master_1 = require("./locale-master");
77
89
  const locale_pulse_1 = require("./locale-pulse");
78
90
  const locale_roadmap_1 = require("./locale-roadmap");
79
91
  const locale_gerados_1 = require("./locale-gerados");
92
+ const locale_worktree_1 = require("./locale-worktree");
93
+ const locale_estado_1 = require("./locale-estado");
94
+ const locale_security_scan_1 = require("./locale-security-scan");
95
+ const locale_claims_1 = require("./locale-claims");
96
+ const locale_decisao_1 = require("./locale-decisao");
97
+ const locale_accounts_1 = require("./locale-accounts");
98
+ const locale_network_1 = require("./locale-network");
99
+ const locale_reservas_1 = require("./locale-reservas");
100
+ const locale_docs_1 = require("./locale-docs");
101
+ const locale_adapter_1 = require("./locale-adapter");
102
+ const locale_prompts_1 = require("./locale-prompts");
103
+ const locale_conhecimento_1 = require("./locale-conhecimento");
104
+ const locale_forja_1 = require("./locale-forja");
105
+ const locale_setup_1 = require("./locale-setup");
106
+ const locale_projetos_1 = require("./locale-projetos");
107
+ const locale_operacao_restante_1 = require("./locale-operacao-restante");
108
+ const locale_conducao_1 = require("./locale-conducao");
109
+ const locale_grafo_1 = require("./locale-grafo");
110
+ const locale_audit_1 = require("./locale-audit");
80
111
  exports.LOCALE_PADRAO = 'pt-BR';
81
112
  /**
82
113
  * Comandos cujo texto ja sai pelo catalogo, por `comando` ou por `comando subcomando`; `comando ?` e o
83
114
  * subcomando desconhecido (o erro de uso e do proprio comando). Os demais seguem em pt-BR. Ficam de
84
- * fora por decisao (D2 da F2a): `doctor --modo`, `thread new --from-finding`, `onboarding sync`,
85
- * `experiencia uninstall` e `thread list|close|entrega`. A F2b (G3) acrescenta `verify` (com `--baseline`),
115
+ * fora por decisao (D2 da F2a): `doctor --modo`, `thread new --from-finding`, `onboarding sync` e
116
+ * `experiencia uninstall`. A F2b (G3) acrescenta `verify` (com `--baseline`),
86
117
  * `ship`, `ship registrar-pr`, `retry plan`, `retry run`, `master` (o indice), `master aceitar-omissao` e
87
- * `master pedir`, `pulse` (sem `responder` nem `cadencia`) e `roadmap status`. A F3a (D5) acrescenta `docs init`;
88
- * `docs verificar` e `docs sincronizar` seguem em pt-BR.
118
+ * `master pedir`, `pulse` (sem `responder` nem `cadencia`) e `roadmap status`. A F3a (D5) acrescenta `docs init`, e a
119
+ * F3b (D1), o resto da lista do dono; a F3c completa `decisao registrar` e `network roadmap`. O conhecimento escrito
120
+ * (RM-026 K7, fatia 2) nasce coberto: `conhecimento listar|mostrar|colecoes|verificar` e o uso errado dele.
89
121
  */
90
122
  exports.COMANDOS_COM_LOCALE = ['doctor', 'init', 'onboarding show', 'onboarding set', 'onboarding reset',
91
123
  'onboarding ?', 'experiencia show', 'experiencia ?', 'thread new', 'thread status', 'thread ?',
92
124
  'phase list', 'phase run', 'phase ?', 'verify', 'ship', 'ship registrar-pr', 'retry plan', 'retry run',
93
- 'master', 'master aceitar-omissao', 'master pedir', 'pulse', 'roadmap status', 'docs init'];
125
+ 'retry policy', 'retry parse', 'retry list', 'retry resume', 'retry cancel', 'retry ?',
126
+ 'master', 'master <thread>', 'master aceitar-omissao', 'master pedir', 'master classes', 'master batch',
127
+ 'pulse', 'roadmap status', 'docs init',
128
+ // F3b (D1): o resto do CLI, na ordem do pedido.
129
+ 'thread list', 'thread close', 'thread entrega', 'worktree ensure', 'worktree sync', 'worktree audit', 'worktree release', 'worktree ?',
130
+ 'claims add', 'claims conferir', 'claims verificar', 'claims retirar', 'claims ausente', 'claims list', 'claims ?',
131
+ 'decisao registrar', 'decisao placar', 'decisao ?',
132
+ 'accounts list', 'accounts add', 'accounts remove', 'accounts check', 'accounts esgotamentos', 'accounts ?',
133
+ // F3c preserva as tres linhas contratuais do panorama; o restante do texto segue o locale.
134
+ 'network status', 'network entrar', 'network sair', 'network publicar', 'network roadmap', 'network ?',
135
+ 'roadmap reservas', 'roadmap pegar', 'roadmap soltar', 'roadmap feat', 'roadmap ?',
136
+ // O contrato que o `docs verificar` le nas paginas (chaves, valores, secoes, marcadores) segue em pt-BR; so a mensagem muda.
137
+ 'docs verificar', 'docs sincronizar', 'docs ?',
138
+ 'adapter list', 'adapter show', 'adapter install', 'adapter ?',
139
+ 'prompt list', 'prompt lint', 'prompt render', 'prompt ?',
140
+ 'conhecimento listar', 'conhecimento mostrar', 'conhecimento colecoes', 'conhecimento verificar', 'conhecimento ?', 'security-scan',
141
+ // F3d: familias restantes, acrescentadas somente quando a familia inteira entra no catalogo.
142
+ 'modos', 'ciclos', 'setup', 'projetos', 'pulse cadencia', 'pulse responder', 'ledger',
143
+ 'portfolio', 'creation', 'objective', 'ci',
144
+ 'sessions watch', 'sessions event', 'sessions list', 'sessions limpar-fantasmas', 'sessions hitl',
145
+ 'sessions request', 'sessions answer', 'sessions reconcile', 'sessions supersede', 'sessions adopt',
146
+ 'sessions logs', 'sessions stop', 'sessions attach', 'sessions ?',
147
+ 'gate context', 'gate request', 'gate answer', 'gate next', 'gate approve', 'gate ?',
148
+ 'fix open', 'fix list', 'fix reverify', 'fix ?', 'handoff export', 'handoff recall', 'handoff ?', 'recall',
149
+ 'lease list', 'lease acquire', 'lease take', 'lease release', 'lease ?',
150
+ 'board list', 'board plan', 'board plano', 'board reap', 'board ?',
151
+ 'orquestracao status', 'orquestracao ?', 'monitor', 'licoes', 'demo',
152
+ 'fabrica list', 'fabrica publicar', 'fabrica entrar', 'fabrica sair', 'fabrica batida', 'fabrica ?', 'eval',
153
+ 'memory status', 'memory inventory', 'memory migrate', 'memory sync', 'memory search', 'memory index', 'memory ?',
154
+ 'mcp install', 'conducao status', 'conducao assumir', 'conducao atualizar', 'conducao autorizar',
155
+ 'conducao autorizacao', 'conducao batida', 'conducao sentinela', 'conducao ?', 'grafo',
156
+ 'audit packs', 'audit pack', 'audit lint', 'audit run', 'audit list', 'audit show', 'audit prompt',
157
+ 'audit ingest', 'audit finding', 'audit achado', 'audit verify', 'audit report', 'audit relatorio',
158
+ 'audit divida', 'audit board', 'audit surface', 'audit superficie', 'audit ?'];
94
159
  /** Os comandos com subcomando: o padrao (sem subcomando) e os conhecidos; o resto vira `?`. */
95
160
  const FAMILIAS = new Map([
96
161
  ['onboarding', { padrao: 'show', conhecidos: ['show', 'set', 'reset', 'sync'] }],
@@ -100,6 +165,27 @@ const FAMILIAS = new Map([
100
165
  ['retry', { padrao: null, conhecidos: ['plan', 'run', 'policy', 'parse', 'list', 'resume', 'cancel'] }],
101
166
  ['roadmap', { padrao: 'reservas', conhecidos: ['reservas', 'status', 'feat', 'pegar', 'soltar'] }],
102
167
  ['docs', { padrao: 'verificar', conhecidos: ['verificar', 'sincronizar', 'init'] }],
168
+ ['worktree', { padrao: null, conhecidos: ['ensure', 'sync', 'audit', 'release'] }],
169
+ ['claims', { padrao: 'list', conhecidos: ['add', 'conferir', 'verificar', 'retirar', 'ausente', 'list'] }],
170
+ ['decisao', { padrao: null, conhecidos: ['registrar', 'placar'] }],
171
+ ['accounts', { padrao: 'list', conhecidos: ['list', 'add', 'remove', 'check', 'esgotamentos'] }],
172
+ ['network', { padrao: 'status', conhecidos: ['status', 'entrar', 'sair', 'publicar', 'roadmap'] }],
173
+ ['adapter', { padrao: 'list', conhecidos: ['list', 'show', 'install'] }],
174
+ ['prompt', { padrao: 'list', conhecidos: ['list', 'lint', 'render'] }],
175
+ ['conhecimento', { padrao: 'listar', conhecidos: ['listar', 'mostrar', 'colecoes', 'verificar'] }],
176
+ ['sessions', { padrao: 'list', conhecidos: ['watch', 'event', 'list', 'limpar-fantasmas', 'hitl', 'request', 'answer',
177
+ 'reconcile', 'supersede', 'adopt', 'logs', 'stop', 'attach'] }],
178
+ ['gate', { padrao: null, conhecidos: ['context', 'request', 'answer', 'next', 'approve'] }],
179
+ ['fix', { padrao: null, conhecidos: ['open', 'list', 'reverify'] }],
180
+ ['handoff', { padrao: null, conhecidos: ['export', 'recall'] }],
181
+ ['lease', { padrao: 'list', conhecidos: ['list', 'acquire', 'take', 'release'] }],
182
+ ['board', { padrao: 'list', conhecidos: ['list', 'plan', 'plano', 'reap'] }],
183
+ ['orquestracao', { padrao: 'status', conhecidos: ['status'] }],
184
+ ['fabrica', { padrao: 'list', conhecidos: ['list', 'publicar', 'entrar', 'sair', 'batida'] }],
185
+ ['memory', { padrao: 'status', conhecidos: ['status', 'inventory', 'migrate', 'sync', 'search', 'index'] }],
186
+ ['mcp', { padrao: null, conhecidos: ['install', 'serve'] }],
187
+ ['conducao', { padrao: null, conhecidos: ['status', 'assumir', 'atualizar', 'autorizar', 'autorizacao', 'batida', 'sentinela'] }],
188
+ ['audit', { padrao: 'packs', conhecidos: ['packs', 'pack', 'lint', 'run', 'list', 'show', 'prompt', 'ingest', 'finding', 'achado', 'verify', 'report', 'relatorio', 'divida', 'board', 'surface', 'superficie'] }],
103
189
  ]);
104
190
  /** A entrada de `COMANDOS_COM_LOCALE` que a linha de comando pede, com o subcomando padrao de cada um. */
105
191
  function chaveDoLocale(posicionais, opcoes) {
@@ -142,8 +228,6 @@ function cobreLocale(posicionais, opcoes) {
142
228
  return false;
143
229
  if (posicionais[0] === 'doctor' && opcoes.modo !== undefined)
144
230
  return false;
145
- if (opcoes['from-finding'] !== undefined || opcoes['do-achado'] !== undefined)
146
- return false;
147
231
  return exports.COMANDOS_COM_LOCALE.includes(chaveDoLocale(posicionais, opcoes));
148
232
  }
149
233
  /** `en_US.UTF-8`, `en-GB`, `en` viram `en`; `pt_BR.UTF-8`, `pt` viram pt-BR; o resto, undefined. */
@@ -169,6 +253,14 @@ function resolverLocale(ownerLanguage, env = process.env) {
169
253
  }
170
254
  return { locale: exports.LOCALE_PADRAO, origem: 'padrao' };
171
255
  }
256
+ /**
257
+ * RM-061 F3c: a lingua do que o `ork` gera e grava para depois (o prompt despachado, o pedido do achado): so a
258
+ * declarada pelo dono em `owner.language`; sem ela, pt-BR. Nunca o locale de quem roda, nem o `--json`: o mesmo
259
+ * projeto grava o mesmo dado em qualquer maquina. O texto impresso segue o locale do CLI.
260
+ */
261
+ function linguaDeclaradaDoDono(ownerLanguage) {
262
+ return resolverLocale(ownerLanguage, {}).locale;
263
+ }
172
264
  let ativo = exports.LOCALE_PADRAO;
173
265
  /** Fixa o locale do processo (o CLI, nos comandos de `COMANDOS_COM_LOCALE`; os testes). */
174
266
  function ativarLocale(locale) {
@@ -223,6 +315,10 @@ const PT_BR = {
223
315
  instaleNode: 'instale Node 20 ou superior',
224
316
  gitAusente: 'nao encontrado no PATH',
225
317
  instaleGit: 'instale o git',
318
+ securityScanDocker: 'Docker disponivel: as ferramentas do security scan rodam em container',
319
+ securityScanNativo: 'sem Docker; todas as ferramentas do laco tem binario nativo aceito',
320
+ securityScanSemFerramenta: (lista) => `sem Docker, nao rodariam (unavailable): ${lista}`,
321
+ securityScanCorrecao: (nativos) => `instale o Docker (CLI e daemon ativo); alternativa, instale os binarios nativos na versao do catalogo: ${nativos}. pip-audit e govulncheck so rodam no Docker`,
226
322
  branch: (branch, semCommit) => `branch ${branch}${semCommit ? ' (sem commit)' : ''}`,
227
323
  foraDeRepo: 'fora de um repositorio git',
228
324
  rodeDentroDeRepo: 'rode o ork dentro de um repositorio git',
@@ -281,6 +377,10 @@ const PT_BR = {
281
377
  contaFora: (estado, ate) => `${estado}${ate ? ` ate ${ate}` : ''}`,
282
378
  contasCorrecao: 'ork accounts check marca os perfis (sem-auth, provider-pago); ork accounts add refaz o login de assinatura ' +
283
379
  'pelo proprio CLI, nunca copiando credencial',
380
+ condutorCompartilha: (runtime, conta, fases) => `o condutor LLM (${runtime}, ${conta}) divide a conta com fases vivas: ${fases}`,
381
+ condutorSeparado: (runtime, conta) => `o condutor LLM (${runtime}, ${conta}) nao divide a conta com fase viva`,
382
+ contaDoAmbiente: 'ambiente do processo',
383
+ condutorCompartilhaCorrecao: 'rode o condutor em outra conta ou deixe a reacao a cota com `ork conducao batida`',
284
384
  embeddingPago: (variavel) => `memory.embedding.api_key_env declara ${variavel}, nome da lista de provider pago`,
285
385
  embeddingPagoCorrecao: 'use uma chave dedicada ao Orkastery com nome proprio, por exemplo ORKASTERY_EMBEDDING_API_KEY',
286
386
  embeddingSemVariavel: (provider) => `memory.embedding com provider ${provider} sem api_key_env`,
@@ -326,6 +426,51 @@ const PT_BR = {
326
426
  fonteDaMemoria: (fonte, divergente) => `${fonte}${divergente ? ' (cópia da worktree divergente preservada)' : ''}`,
327
427
  regimeDegradado: (motivo, detalhe) => `pedido orkmind, efetivo files (${motivo}): ${detalhe}`,
328
428
  regimeOrkmind: (tenant, variavel) => `orkmind ativo no tenant "${tenant}" pela variavel ${variavel}`,
429
+ // RM-069: a fonte da DSN e a DSN no ambiente, pelo nome da variavel ou pelo rotulo do arquivo, nunca o valor.
430
+ regimeOrkmindPorArquivo: (tenant, arquivo) => `orkmind ativo no tenant "${tenant}" pelo arquivo ${arquivo}`,
431
+ dsnDaVariavel: (variavel) => `variável de ambiente ${variavel}, presente (valor nunca impresso)`,
432
+ dsnVariavelAusente: (variavel) => `variável de ambiente ${variavel} ausente: a memória cai para files`,
433
+ dsnVariavelAusenteCorrecao: (variavel) => `exporte ${variavel} com a DSN da base própria do tenant, ` +
434
+ 'ou passe-a por memory.database_url_file (arquivo 0600 em ~/.orkastery/segredos/)',
435
+ dsnDoArquivo: (rotulo, permissao) => `arquivo ${rotulo}, do usuário que roda o ork, permissão ${permissao}, uma linha (valor nunca impresso)`,
436
+ dsnArquivoFalhou: (rotulo, motivo, causa) => `arquivo ${rotulo} recusado (${motivo}): ${causa}; a memória cai para files, sem outra fonte`,
437
+ // O mesmo texto de `textoDaCausa` (dsn-da-memoria.ts); o teste DD11 confere causa por causa.
438
+ dsnCausa: (causa, permissao) => ({
439
+ forma: 'memory.database_url_file fora da forma ~/.orkastery/segredos/<nome> (valor omitido)',
440
+ raiz: 'a pasta do usuário do ork precisa ser caminho absoluto sem .., dentro da casa do usuário (HOME)',
441
+ 'nao-existe': 'não existe',
442
+ 'nao-abre': 'não foi possível abrir para leitura',
443
+ pasta: 'o caminho da pasta de segredos tem link simbólico ou algo que não é pasta',
444
+ 'dono-da-pasta': 'a pasta do usuário do ork não é do usuário que roda o ork',
445
+ link: 'link simbólico não é aceito',
446
+ 'nao-e-arquivo': 'não é arquivo comum',
447
+ plataforma: 'esta plataforma não confere dono nem permissão',
448
+ dono: 'o dono não é o usuário que roda o ork',
449
+ permissao: `permissão ${permissao}, diferente de 0600 e de 0400`,
450
+ tamanho: 'maior que 4 KiB',
451
+ vazio: 'vazio',
452
+ codificacao: 'não é texto UTF-8',
453
+ linhas: 'mais de uma linha',
454
+ controle: 'caractere de controle',
455
+ 'nome-valor': 'formato NOME=valor de arquivo de ambiente; grave só a DSN',
456
+ esquema: 'não é DSN com esquema (como postgresql://)',
457
+ espaco: 'espaço dentro da DSN',
458
+ leitura: 'não foi possível ler',
459
+ })[causa] ?? causa,
460
+ dsnArquivoCorrecao: (motivo, rotulo) => motivo === 'dsn.arquivo-ausente'
461
+ ? `grave a DSN da base própria do tenant em ${rotulo}, numa linha e com permissão 0600, sem passar pelo histórico do shell: ` +
462
+ `(umask 077; cat > ${rotulo})`
463
+ : motivo === 'dsn.arquivo-inseguro'
464
+ ? `deixe ${rotulo} como arquivo do usuário que roda o ork, numa pasta dele, com chmod 600 ${rotulo}`
465
+ : `regrave ${rotulo} como arquivo comum numa pasta de segredos comum, dentro da casa do usuário e sem link simbólico ` +
466
+ 'no caminho, só com a DSN (esquema://...), numa linha e sem NOME= na frente',
467
+ dsnNaSessao: (doProjeto, comSenha) => `no ambiente desta sessão despachada, o agente lê com env: ${[...doProjeto.map((n) => `${n} (DSN do projeto)`),
468
+ ...comSenha.map((n) => `${n} (URL com senha)`)].join(', ')} (valor nunca impresso)`,
469
+ dsnNoProcesso: (nomes) => `a DSN do arquivo também está no ambiente deste processo, em ${nomes.join(', ')}: quem herda este ambiente a vê (valor nunca impresso)`,
470
+ dsnSessaoLimpa: 'nenhuma DSN nem URL com senha no ambiente desta sessão despachada',
471
+ dsnProcessoLimpo: 'a DSN do arquivo não está no ambiente deste processo',
472
+ dsnNoAmbienteCorrecao: 'tire essas variáveis do ambiente que o host repassa aos agentes (no Hermes, ~/.hermes/.env), com backup, ' +
473
+ 'e passe a DSN do projeto por memory.database_url_file',
329
474
  filaEscaladoCorrecao: 'pedido escalado alem do limite de retry.max_tentativas: ork retry list e ork gate request <thread>',
330
475
  filaEsperaCorrecao: 'ork retry resume retoma o que ja liberou',
331
476
  governanca: (g) => `${g.usuario}, Claude e Codex, global com histórico: ${g.total} sessões; ` +
@@ -360,6 +505,14 @@ const PT_BR = {
360
505
  batidaSemLinha: (script) => `nenhuma linha do crontab roda ${script} para este projeto`,
361
506
  batidaInstale: (comando) => `${comando} (instala a linha do template monitor/pulse.cron no crontab desta maquina)`,
362
507
  batidaPeloLog: (minutos) => `nenhuma linha no crontab, mas a varredura rodou ha ${minutos} min (hitl.log): a batida vem de outro agendador`,
508
+ // RM-063 (fatia 3, H1): a linha instalada nao prova a batida; a ultima rodada velha reprova.
509
+ batidaAtrasada: (minutos, linhas) => `a varredura esta no crontab (${linhas} linha(s)), mas a ultima rodada foi ha ${minutos} min (hitl.log): a batida parou`,
510
+ batidaAtrasadaCorrecao: 'ork fabrica batida status (a ultima rodada diz o codigo e o detalhe; confira o cron, o script e o PATH da linha)',
511
+ // RM-063 (fatia 3, H4): a falha do transporte do pulse, lida do transporte.log.
512
+ transporteOk: (host, quando) => `ultima entrega pelo ${host} em ${quando}`,
513
+ transporteDesvio: (falhou, host, quando) => `o transporte ${falhou} falhou em ${quando}, e o resumo saiu pelo ${host} (o outro host configurado)`,
514
+ transporteFalhou: (quando, tentativas) => `o resumo de ${quando} nao saiu por nenhum transporte configurado (${tentativas}): a novidade fica guardada para a proxima batida`,
515
+ transporteCorrecao: 'confira o executavel e o destino em .orkastery/monitor/pulse-host.json (o adaptador do host: openclaw message send ou o ork-pulse-enviar.py do Hermes)',
363
516
  redeSaiu: 'fora da rede (saiu com ork network sair)',
364
517
  redeMembroHerdado: 'membro herdado da fabrica',
365
518
  redeMembro: 'membro',
@@ -403,6 +556,158 @@ const PT_BR = {
403
556
  pulse: locale_pulse_1.PULSE_PT_BR,
404
557
  roadmap: locale_roadmap_1.ROADMAP_PT_BR,
405
558
  gerados: locale_gerados_1.GERADOS_PT_BR,
559
+ worktree: locale_worktree_1.WORKTREE_PT_BR,
560
+ estado: locale_estado_1.ESTADO_PT_BR,
561
+ securityScan: locale_security_scan_1.SECURITY_SCAN_PT_BR,
562
+ claims: locale_claims_1.CLAIMS_PT_BR,
563
+ decisao: locale_decisao_1.DECISAO_PT_BR,
564
+ accounts: locale_accounts_1.ACCOUNTS_PT_BR,
565
+ network: locale_network_1.NETWORK_PT_BR,
566
+ reservas: locale_reservas_1.RESERVAS_PT_BR,
567
+ docs: locale_docs_1.DOCS_PT_BR,
568
+ adapter: locale_adapter_1.ADAPTER_PT_BR,
569
+ prompts: locale_prompts_1.PROMPTS_PT_BR,
570
+ conhecimento: locale_conhecimento_1.CONHECIMENTO_PT_BR,
571
+ conducao: locale_conducao_1.CONDUCAO_PT_BR,
572
+ grafo: locale_grafo_1.GRAFO_PT_BR,
573
+ audit: locale_audit_1.AUDIT_PT_BR,
574
+ forja: locale_forja_1.FORJA_PT_BR,
575
+ operacao: {
576
+ restante: locale_operacao_restante_1.OPERACAO_RESTANTE_PT_BR,
577
+ modos: {
578
+ titulo: 'Modos de conducao (a #TAG vai no proprio pedido ao orquestrador)',
579
+ cabecalho: ['#TAG', 'BLOCOS', 'PAUSAS', 'CICLO'],
580
+ marcaDaPausa: '* = bloco que pausa e espera veredito humano',
581
+ detalhe: 'Detalhe por modo:',
582
+ slug: 'slug das sessoes',
583
+ pausas: 'pausas',
584
+ nenhuma: 'nenhuma',
585
+ uso: 'uso',
586
+ pausaSobre: {
587
+ objetivo: 'objetivo', plano: 'plano', implementacao: 'implementacao', evidencias: 'evidencias',
588
+ push: 'push', score: 'score', premissas: 'premissas',
589
+ 'evidencias, com autorizacao antecipada de push': 'evidencias, com autorizacao antecipada de push',
590
+ },
591
+ recomendado: {
592
+ classic: 'O padrao: premissas delicadas com entrega confiavel',
593
+ maestro: 'Solucoes claras e ageis, sem muitos riscos ou tradeoffs',
594
+ auto: 'Solucoes menores, docs, estudos, pesquisas, configuracoes, auditorias, migracoes',
595
+ fast: 'Pedido pequeno e claro, de minutos: uma fase so (GO), sem cerimonia; o push pede autorizacao',
596
+ },
597
+ regra: 'REGRA CENTRAL: o modo afrouxa a pausa, NUNCA a verificacao.',
598
+ migracao: {
599
+ nada: 'Nada a migrar: nenhum modo aposentado na configuracao deste projeto.',
600
+ simulacao: 'Simulacao (--dry-run), nada foi gravado.',
601
+ aplicada: 'Migracao aplicada.',
602
+ de: 'de', para: 'para', backup: 'backup',
603
+ historico: 'Nenhum historico foi tocado: thread, ledger e recibo em modo aposentado ficam como estao.',
604
+ },
605
+ },
606
+ ciclos: {
607
+ titulo: 'Variantes de ciclo (`ork thread new --ciclo <variante>`)',
608
+ descricoes: {
609
+ greenfield: 'Comeco do zero: worktree isolada obrigatoria, partindo da base do manifesto',
610
+ 'merge-branch': 'Parte de uma branch que ja existe (`--branch`), sem criar branch nova',
611
+ 'goal-plan': 'Funde GOAL e PLAN num bloco so: uma pausa a menos quando o modo os separava',
612
+ gap: 'Analise de lacuna: sem GO e sem SHIP, a lacuna e publicada como lacuna',
613
+ 'feature-xl-faseada': 'Feature grande em fatias: o PLAN se compromete com N fatias verificaveis',
614
+ },
615
+ worktree: 'worktree isolada',
616
+ exige: 'exige', nada: 'nada', muda: 'muda os blocos do modo', sim: 'sim', nao: 'nao',
617
+ fecho: 'A variante muda como a thread NASCE. Verificacao e gates nao mudam.',
618
+ },
619
+ pulseCadencia: {
620
+ umaTag: 'pulse cadencia: uma tag por vez',
621
+ desconhecida: (tag, aceitas) => `pulse cadencia: tag desconhecida "${tag}"; use ${aceitas}`,
622
+ trocaSemAutor: 'pulse.cadencia: informe quem trocou a cadencia',
623
+ desconhecidaInterna: (tag) => `pulse.cadencia: tag desconhecida ${tag}`,
624
+ descricoes: {
625
+ '#OrkPulseOff': 'de 8 em 8 horas, as 08h, 16h e 00h', '#OrkPulseOn': 'de 2 em 2 horas',
626
+ '#OrkPulseOn-15m': 'de 15 em 15 minutos', '#OrkPulseOn-30m': 'de 30 em 30 minutos',
627
+ '#OrkPulseOn-60m': 'de hora em hora',
628
+ },
629
+ texto: (descricao, tag, proxima) => `Pulse ${descricao} (${tag}). Pergunta para você continua saindo na hora. Próximo resumo com novidade a partir de ${proxima}.`,
630
+ trocada: (por, canal, quando) => `Trocada por ${por} (${canal}) em ${quando}.`,
631
+ padrao: 'Nenhuma tag gravada: vale a cadência padrão.',
632
+ responderUso: 'pulse responder exige --resposta-stdin e o envelope do ingresso autenticado',
633
+ responderFormato: 'pulse responder: --formato telegram|terminal',
634
+ responderReferencia: 'pulse responder: --em-resposta-a recebe o código da pergunta e o id da mensagem respondida (por exemplo NX4K:4521), ou outra, a palavra solta em reply a outra mensagem',
635
+ },
636
+ ledger: {
637
+ usoStats: 'uso: ork ledger stats --desde 7d [--ate ISO] [--thread T] [--modo M] [--runtime R] [--json]',
638
+ usoEstimate: 'uso: ork ledger estimate <thread-id> --sem-ia H --ia-sem-ork H --por Q --metodo M --premissas P [--incerteza I]',
639
+ uso: 'uso: ork ledger stats|estimate ...',
640
+ estimativa: (thread, semIa, ia) => `Estimativa PLAN registrada em ${thread}: sem IA ${semIa} h; IA sem Orkastery ${ia} h.`,
641
+ periodo: (desde, ate, intervalo) => `Ledger stats ${desde} ate ${ate} ${intervalo}`,
642
+ sessoes: (threads, concluidas, despachos) => ` threads/sessoes ${threads} / ${concluidas} concluidas (${despachos} despachos)`,
643
+ throughput: (ships, retries) => ` throughput ${ships} ship(s); ${retries} retry(ies)`,
644
+ execucao: (horas, medidas, ausentes) => ` execucao ${horas} h (${medidas} medidas; ${ausentes} ausentes)`,
645
+ tokens: (total, input, cached, output) => ` tokens ${total} total; input ${input} (cached ${cached}); output ${output}`,
646
+ semCobertura: 'sem cobertura',
647
+ // GO-FIX 1: o travessao da base vira parenteses nas duas linguas (o catalogo nao leva U+2014).
648
+ custo: (valor) => ` custo referencia ${valor} (estimativa por tarifa publica, nao gasto/fatura)`,
649
+ espera: (horas, abertas) => ` espera humana ${horas} h; ${abertas} aberta(s)`,
650
+ semResposta: 'sem resposta medida',
651
+ metaDentro: ' (dentro da meta de 5 min)', metaFora: ' (acima da meta de 5 min)',
652
+ hitl: (pedidos, horas, mediana, meta, abertas, fora) => ` HITL de conducao ${pedidos} pergunta(s); parado ${horas} h; mediana ${mediana}${meta}; ${abertas} aberta(s); texto fora da excecao ${fora}`,
653
+ riscos: (total) => ` riscos evitados ${total} gate(s) preventivo(s)`,
654
+ estimativas: (total) => ` estimativas PLAN ${total} amostra(s)`,
655
+ cobertura: (texto) => ` cobertura ${texto}`,
656
+ observacao: (texto) => texto,
657
+ },
658
+ produto: {
659
+ portfolio: {
660
+ opcaoAposentada: (opcao) => `portfolio.opcao-aposentada: --${opcao} era do Objective Envelope, aposentado na I-43, e o\n` +
661
+ ' portfolio show nunca a leu. As duas vigas do envelope viraram propriedade de thread comum:\n' +
662
+ ' ork thread new "<nome>" --modo <MODO> --exige-runtime-diferente\n' +
663
+ ' o CHECK precisa de runtime que o GO nao usou\n' +
664
+ ' ork thread new "<nome>" --modo <MODO> --done "<criterio> :: <comando>"\n' +
665
+ ' criterio de pronto EXECUTAVEL, que vira claim e roda no ork verify',
666
+ usoInspect: 'uso: ork portfolio inspect <id> --json',
667
+ tipo: 'tipo deve ser product, project ou initiative',
668
+ vazio: 'Portfólio vazio.',
669
+ usoShow: 'uso: ork portfolio show <id>',
670
+ naoEncontrada: (id) => `entidade ${id} não encontrada`,
671
+ estado: (id, titulo, estado) => `${id}\n${titulo}\nEstado: ${estado}`,
672
+ usoCreate: 'uso: ork portfolio create <product|project|initiative> <id> --title T [--parent ID]',
673
+ desconhecido: (sub) => `subcomando desconhecido: portfolio ${sub}`,
674
+ },
675
+ creation: {
676
+ identidade: 'creation.identity: payload não escolhe principal',
677
+ usoStart: 'uso: ork creation start --input-file F --json',
678
+ arquivoGrande: 'creation.input: arquivo excede limite',
679
+ exigeId: 'creation exige id',
680
+ versao: 'creation exige --expected-version inteiro positivo',
681
+ desconhecido: 'subcomando creation desconhecido',
682
+ },
683
+ objective: (sub) => `objective.aposentado: o Objective Envelope saiu do produto na I-43 (subcomando "${sub}").\n` +
684
+ ' Ele descrevia um gate que nao bloqueava nada: das 137 threads do projeto, zero\n' +
685
+ ' tinham creationOrigin, que era a unica via pela qual o despacho o consultava.\n' +
686
+ ' As duas vigas que ele guardava viraram propriedade de thread comum:\n' +
687
+ ' ork thread new "<nome>" --modo <MODO> --exige-runtime-diferente\n' +
688
+ ' o CHECK precisa de runtime que o GO nao usou\n' +
689
+ ' ork thread new "<nome>" --modo <MODO> --done "<criterio> :: <comando>"\n' +
690
+ ' criterio de pronto EXECUTAVEL, que vira claim e roda no ork verify\n' +
691
+ ' Os envelopes ja gravados continuam em .orkastery/objectives, intocados.',
692
+ ci: {
693
+ usoPrepare: 'uso: ork ci prepare <thread-id>', aviso: (linha) => `AVISO: ${linha}`,
694
+ bundle: (arquivo) => `Bundle de CI: ${arquivo}`,
695
+ usoRun: 'uso: ork ci run <thread-id> [--json] | ork ci run --bundle <arquivo> | ork ci run --branch <branch>',
696
+ resultado: (ok, detalhe) => `${ok ? 'CI APROVADO' : 'CI REPROVADO'}: ${detalhe}`,
697
+ sha: 'erro: ci status: --sha exige o sha completo, de 40 caracteres hexadecimais minusculos ' +
698
+ '(git rev-parse HEAD); o check e consultado no commit exato, nunca por ref nem prefixo',
699
+ usoStatus: 'uso: ork ci status --sha <sha de 40 caracteres> [--remoto origin]',
700
+ status: (ok, detalhe) => `${ok ? 'CI VERDE' : 'CI NÃO LIBEROU'}: ${detalhe}`,
701
+ desconhecido: (sub) => `subcomando desconhecido: ci ${sub}`,
702
+ // GO-FIX 1: o lint do bundle nasce em pt-BR, que e o que vai ao ledger, e a impressao o remonta no locale do comando.
703
+ anteriorAoLint: (linha) => `${linha} (claim anterior ao lint: so aviso)`,
704
+ worktreeSumiu: (worktree) => `a worktree ${worktree} da thread nao existe mais; o bundle vai para a raiz do projeto`,
705
+ lintRecusado: (recusas) => `claims.lint: o bundle nao foi gerado; retire a claim e registre de novo com o comando focado:\n ${recusas}`,
706
+ },
707
+ },
708
+ },
709
+ setup: locale_setup_1.SETUP_PT_BR,
710
+ projetos: locale_projetos_1.PROJETOS_PT_BR,
406
711
  init: {
407
712
  foraDoRepositorio: (dir) => `init.fora-do-repositorio: ${dir} não está num repositório git; nada foi criado. ` +
408
713
  'Entre no repositório do projeto (ou crie um com git init e o primeiro commit) e rode ork init de novo.',
@@ -455,10 +760,13 @@ const EN = {
455
760
  'provider efetivo da fabrica': 'effective factory provider',
456
761
  'fonte da memoria': 'memory source',
457
762
  'regime de memoria': 'memory regime',
763
+ 'fonte da DSN': 'DSN source',
764
+ 'DSN no ambiente': 'DSN in environment',
458
765
  'chave de embedding': 'embedding key',
459
766
  'fila de rate limit': 'rate limit queue',
460
767
  'estado do projeto': 'project state',
461
768
  'contas por runtime': 'accounts per runtime',
769
+ 'separacao da conducao': 'conduction account separation',
462
770
  'governanca de sessoes': 'session governance',
463
771
  'dono do .git': '.git owner',
464
772
  'onboarding memoria': 'onboarding memory',
@@ -468,12 +776,27 @@ const EN = {
468
776
  'permissoes do estado': 'state permissions',
469
777
  'pasta privada': 'private folder',
470
778
  'cadencia do pulse no cron': 'pulse cron cadence',
779
+ 'transporte do pulse': 'pulse transport',
471
780
  'fabrica compartilhada': 'shared factory',
472
781
  'pasta das worktrees': 'worktree folder',
782
+ 'forja identidade': 'forge identity',
783
+ 'forja alcance': 'forge reach',
784
+ 'forja tls': 'forge TLS',
785
+ 'forja subcaminho': 'forge base path',
786
+ 'forja cli': 'forge CLI',
787
+ 'forja login': 'forge login',
788
+ 'forja servidor': 'forge server',
789
+ 'forja escopo': 'forge token scope',
790
+ 'forja projeto': 'forge project',
791
+ 'forja capacidades': 'forge capabilities',
473
792
  },
474
793
  instaleNode: 'install Node 20 or later',
475
794
  gitAusente: 'not found on PATH',
476
795
  instaleGit: 'install git',
796
+ securityScanDocker: 'Docker available: the security scan tools run in containers',
797
+ securityScanNativo: 'no Docker; every loop tool has an accepted native binary',
798
+ securityScanSemFerramenta: (lista) => `without Docker these would be unavailable: ${lista}`,
799
+ securityScanCorrecao: (nativos) => `install Docker (CLI and a running daemon); alternatively install the native binaries at the catalog version: ${nativos}. pip-audit and govulncheck only run in Docker`,
477
800
  branch: (branch, semCommit) => `branch ${branch}${semCommit ? ' (no commit)' : ''}`,
478
801
  foraDeRepo: 'outside a git repository',
479
802
  rodeDentroDeRepo: 'run `ork` inside a git repository',
@@ -531,6 +854,10 @@ const EN = {
531
854
  contaFora: (estado, ate) => `${estado}${ate ? ` until ${ate}` : ''}`,
532
855
  contasCorrecao: '`ork accounts check` marks the profiles (sem-auth, provider-pago); `ork accounts add` redoes the subscription ' +
533
856
  'login through the CLI itself, never copying a credential',
857
+ condutorCompartilha: (runtime, conta, fases) => `the LLM conductor (${runtime}, ${conta}) shares its account with live phases: ${fases}`,
858
+ condutorSeparado: (runtime, conta) => `the LLM conductor (${runtime}, ${conta}) does not share its account with a live phase`,
859
+ contaDoAmbiente: 'process environment',
860
+ condutorCompartilhaCorrecao: 'run the conductor on another account or leave quota reaction to `ork conducao batida`',
534
861
  embeddingPago: (variavel) => `memory.embedding.api_key_env declares ${variavel}, a name from the paid provider list`,
535
862
  embeddingPagoCorrecao: 'use a key dedicated to Orkastery, with its own name, for example ORKASTERY_EMBEDDING_API_KEY',
536
863
  embeddingSemVariavel: (provider) => `memory.embedding with provider ${provider} and no api_key_env`,
@@ -576,6 +903,49 @@ const EN = {
576
903
  fonteDaMemoria: (fonte, divergente) => `${fonte}${divergente ? ' (divergent worktree copy kept)' : ''}`,
577
904
  regimeDegradado: (motivo, detalhe) => `orkmind requested, files in effect (${motivo}): ${detalhe}`,
578
905
  regimeOrkmind: (tenant, variavel) => `orkmind active in tenant "${tenant}" through the variable ${variavel}`,
906
+ regimeOrkmindPorArquivo: (tenant, arquivo) => `orkmind active in tenant "${tenant}" through the file \`${arquivo}\``,
907
+ dsnDaVariavel: (variavel) => `environment variable ${variavel}, present (value never printed)`,
908
+ dsnVariavelAusente: (variavel) => `environment variable ${variavel} missing: memory falls back to files`,
909
+ dsnVariavelAusenteCorrecao: (variavel) => `export ${variavel} with the DSN of the tenant's own database, ` +
910
+ 'or pass it through `memory.database_url_file` (a 0600 file in `~/.orkastery/segredos/`)',
911
+ dsnDoArquivo: (rotulo, permissao) => `file \`${rotulo}\`, owned by the user running ork, permission ${permissao}, one line (value never printed)`,
912
+ dsnArquivoFalhou: (rotulo, motivo, causa) => `file \`${rotulo}\` refused (\`${motivo}\`): ${causa}; memory falls back to files, with no other source`,
913
+ dsnCausa: (causa, permissao) => ({
914
+ forma: '`memory.database_url_file` outside the form `~/.orkastery/segredos/<name>` (value omitted)',
915
+ raiz: 'the ork user folder must be an absolute path without `..`, inside the user home (`HOME`)',
916
+ 'nao-existe': 'does not exist',
917
+ 'nao-abre': 'could not be opened for reading',
918
+ pasta: 'the path to the secrets folder has a symbolic link or something that is not a folder',
919
+ 'dono-da-pasta': 'the ork user folder is not owned by the user running ork',
920
+ link: 'symbolic link not accepted',
921
+ 'nao-e-arquivo': 'not a regular file',
922
+ plataforma: 'this platform checks neither owner nor permission',
923
+ dono: 'the owner is not the user running ork',
924
+ permissao: `permission ${permissao}, neither 0600 nor 0400`,
925
+ tamanho: 'larger than 4 KiB',
926
+ vazio: 'empty',
927
+ codificacao: 'not UTF-8 text',
928
+ linhas: 'more than one line',
929
+ controle: 'control character',
930
+ 'nome-valor': 'NAME=value environment file format; write only the DSN',
931
+ esquema: 'not a DSN with a scheme (such as `postgresql://`)',
932
+ espaco: 'whitespace inside the DSN',
933
+ leitura: 'could not be read',
934
+ })[causa] ?? causa,
935
+ dsnArquivoCorrecao: (motivo, rotulo) => motivo === 'dsn.arquivo-ausente'
936
+ ? `write the DSN of the tenant's own database to \`${rotulo}\`, on one line and with permission 0600, without the shell history: ` +
937
+ `\`(umask 077; cat > ${rotulo})\``
938
+ : motivo === 'dsn.arquivo-inseguro'
939
+ ? `make \`${rotulo}\` a file owned by the user running ork, in a folder of theirs, with \`chmod 600 ${rotulo}\``
940
+ : `rewrite \`${rotulo}\` as a regular file in a regular secrets folder, inside the user home and with no symbolic ` +
941
+ 'link on the path, with only the DSN (`scheme://...`), on one line and without a NAME= prefix',
942
+ dsnNaSessao: (doProjeto, comSenha) => `in this dispatched session's environment, the agent reads with \`env\`: ${[...doProjeto.map((n) => `${n} (project DSN)`),
943
+ ...comSenha.map((n) => `${n} (URL with password)`)].join(', ')} (value never printed)`,
944
+ dsnNoProcesso: (nomes) => `the file's DSN is also in this process environment, in ${nomes.join(', ')}: whoever inherits this environment sees it (value never printed)`,
945
+ dsnSessaoLimpa: 'no DSN and no URL with password in this dispatched session environment',
946
+ dsnProcessoLimpo: "the file's DSN is not in this process environment",
947
+ dsnNoAmbienteCorrecao: 'remove these variables from the environment the host passes to agents (in Hermes, `~/.hermes/.env`), ' +
948
+ 'with a backup, and pass the project DSN through `memory.database_url_file`',
579
949
  filaEscaladoCorrecao: 'request escalated past the retry.max_tentativas limit: `ork retry list` and `ork gate request <thread>`',
580
950
  filaEsperaCorrecao: '`ork retry resume` picks up what is already released',
581
951
  governanca: (g) => `${g.usuario}, Claude and Codex, global with history: ${g.total} sessions; ` +
@@ -609,6 +979,12 @@ const EN = {
609
979
  batidaSemLinha: (script) => `no crontab line runs ${script} for this project`,
610
980
  batidaInstale: (comando) => `\`${comando}\` (installs the \`monitor/pulse.cron\` template line in this machine's crontab)`,
611
981
  batidaPeloLog: (minutos) => `no crontab line, but the scan ran ${minutos} min ago (hitl.log): the beat comes from another scheduler`,
982
+ batidaAtrasada: (minutos, linhas) => `the scan is in the crontab (${linhas} line(s)), but the last round was ${minutos} min ago (hitl.log): the beat stopped`,
983
+ batidaAtrasadaCorrecao: '`ork fabrica batida status` (the last round tells the code and the detail; check the cron, the script and the line PATH)',
984
+ transporteOk: (host, quando) => `last delivery through ${host} at ${quando}`,
985
+ transporteDesvio: (falhou, host, quando) => `transport ${falhou} failed at ${quando}, and the summary went out through ${host} (the other configured host)`,
986
+ transporteFalhou: (quando, tentativas) => `the summary of ${quando} went out through no configured transport (${tentativas}): the news stays kept for the next beat`,
987
+ transporteCorrecao: 'check the executable and the target in `.orkastery/monitor/pulse-host.json` (the host adapter: `openclaw message send` or the Hermes `ork-pulse-enviar.py`)',
612
988
  redeSaiu: 'outside the network (left with `ork network sair`)',
613
989
  redeMembroHerdado: 'member inherited from the factory',
614
990
  redeMembro: 'member',
@@ -646,6 +1022,159 @@ const EN = {
646
1022
  pulse: locale_pulse_1.PULSE_EN,
647
1023
  roadmap: locale_roadmap_1.ROADMAP_EN,
648
1024
  gerados: locale_gerados_1.GERADOS_EN,
1025
+ worktree: locale_worktree_1.WORKTREE_EN,
1026
+ estado: locale_estado_1.ESTADO_EN,
1027
+ securityScan: locale_security_scan_1.SECURITY_SCAN_EN,
1028
+ claims: locale_claims_1.CLAIMS_EN,
1029
+ decisao: locale_decisao_1.DECISAO_EN,
1030
+ accounts: locale_accounts_1.ACCOUNTS_EN,
1031
+ network: locale_network_1.NETWORK_EN,
1032
+ reservas: locale_reservas_1.RESERVAS_EN,
1033
+ docs: locale_docs_1.DOCS_EN,
1034
+ adapter: locale_adapter_1.ADAPTER_EN,
1035
+ prompts: locale_prompts_1.PROMPTS_EN,
1036
+ conhecimento: locale_conhecimento_1.CONHECIMENTO_EN,
1037
+ conducao: locale_conducao_1.CONDUCAO_EN,
1038
+ grafo: locale_grafo_1.GRAFO_EN,
1039
+ audit: locale_audit_1.AUDIT_EN,
1040
+ forja: locale_forja_1.FORJA_EN,
1041
+ operacao: {
1042
+ restante: locale_operacao_restante_1.OPERACAO_RESTANTE_EN,
1043
+ modos: {
1044
+ titulo: 'Conduction modes (put the #TAG in the request to the orchestrator)',
1045
+ cabecalho: ['#TAG', 'BLOCKS', 'PAUSES', 'CYCLE'],
1046
+ marcaDaPausa: '* = block that pauses and waits for a human verdict',
1047
+ detalhe: 'Details by mode:',
1048
+ slug: 'session slugs',
1049
+ pausas: 'pauses',
1050
+ nenhuma: 'none',
1051
+ uso: 'use',
1052
+ pausaSobre: {
1053
+ objetivo: 'goal', plano: 'plan', implementacao: 'implementation', evidencias: 'evidence',
1054
+ push: 'push', score: 'score', premissas: 'assumptions',
1055
+ 'evidencias, com autorizacao antecipada de push': 'evidence, with push authorized in advance',
1056
+ },
1057
+ recomendado: {
1058
+ classic: 'The default: careful assumptions with reliable delivery',
1059
+ maestro: 'Clear, agile solutions without many risks or tradeoffs',
1060
+ auto: 'Smaller solutions, docs, studies, research, configuration, audits, and migrations',
1061
+ fast: 'A small, clear request measured in minutes: GO only, no ceremony; push still requires authorization',
1062
+ },
1063
+ regra: 'CENTRAL RULE: the mode loosens pauses, NEVER verification.',
1064
+ migracao: {
1065
+ nada: 'Nothing to migrate: this project configuration has no retired mode.',
1066
+ simulacao: 'Simulation (`--dry-run`): nothing was written.',
1067
+ aplicada: 'Migration applied.',
1068
+ de: 'from', para: 'to', backup: 'backup',
1069
+ historico: 'No history was changed: threads, ledgers, and receipts in a retired mode stay as they are.',
1070
+ },
1071
+ },
1072
+ ciclos: {
1073
+ titulo: 'Cycle variants (`ork thread new --ciclo <variant>`)',
1074
+ descricoes: {
1075
+ greenfield: 'Start from scratch: requires an isolated worktree based on the manifest base',
1076
+ 'merge-branch': 'Start from an existing branch (`--branch`) without creating a new branch',
1077
+ 'goal-plan': 'Merge GOAL and PLAN into one block: one less pause when the mode separates them',
1078
+ gap: 'Gap analysis: no GO or SHIP; publish the gap as a gap',
1079
+ 'feature-xl-faseada': 'Large feature in slices: PLAN commits to N verifiable slices',
1080
+ },
1081
+ worktree: 'isolated worktree',
1082
+ exige: 'requires', nada: 'nothing', muda: 'changes the mode blocks', sim: 'yes', nao: 'no',
1083
+ fecho: 'The variant changes how the thread STARTS. Verification and gates do not change.',
1084
+ },
1085
+ pulseCadencia: {
1086
+ umaTag: 'pulse cadencia: provide one tag at a time',
1087
+ desconhecida: (tag, allowed) => `pulse cadencia: unknown tag "${tag}"; use ${allowed}`,
1088
+ trocaSemAutor: 'pulse.cadencia: provide who changed the cadence',
1089
+ desconhecidaInterna: (tag) => `pulse.cadencia: unknown tag ${tag}`,
1090
+ descricoes: {
1091
+ '#OrkPulseOff': 'every 8 hours, at 08:00, 16:00, and 00:00', '#OrkPulseOn': 'every 2 hours',
1092
+ '#OrkPulseOn-15m': 'every 15 minutes', '#OrkPulseOn-30m': 'every 30 minutes',
1093
+ '#OrkPulseOn-60m': 'hourly',
1094
+ },
1095
+ texto: (description, tag, next) => `Pulse ${description} (${tag}). Questions for you still go out immediately. Next summary with news starts at ${next}.`,
1096
+ trocada: (by, channel, when) => `Changed by ${by} (${channel}) at ${when}.`,
1097
+ padrao: 'No saved tag: the default cadence applies.',
1098
+ responderUso: 'pulse responder requires --resposta-stdin and the authenticated ingress envelope',
1099
+ responderFormato: 'pulse responder: --formato telegram|terminal',
1100
+ responderReferencia: 'pulse responder: --em-resposta-a takes the question code and the id of the replied message (for example NX4K:4521), or outra, the bare word in reply to another message',
1101
+ },
1102
+ ledger: {
1103
+ usoStats: 'usage: ork ledger stats --desde 7d [--ate ISO] [--thread T] [--modo M] [--runtime R] [--json]',
1104
+ usoEstimate: 'usage: ork ledger estimate <thread-id> --sem-ia H --ia-sem-ork H --por Q --metodo M --premissas P [--incerteza I]',
1105
+ uso: 'usage: ork ledger stats|estimate ...',
1106
+ estimativa: (thread, noAi, aiWithoutOrk) => `PLAN estimate recorded in ${thread}: no AI ${noAi} h; AI without Orkastery ${aiWithoutOrk} h.`,
1107
+ periodo: (from, to, interval) => `Ledger stats ${from} to ${to} ${interval}`,
1108
+ sessoes: (threads, completed, dispatches) => ` threads/sessions ${threads} / ${completed} completed (${dispatches} dispatches)`,
1109
+ throughput: (ships, retries) => ` throughput ${ships} ship(s); ${retries} retry(ies)`,
1110
+ execucao: (hours, measured, missing) => ` execution ${hours} h (${measured} measured; ${missing} missing)`,
1111
+ tokens: (total, input, cached, output) => ` tokens ${total} total; input ${input} (cached ${cached}); output ${output}`,
1112
+ semCobertura: 'no coverage',
1113
+ custo: (value) => ` reference cost ${value} (estimate from public rates, not spend or billing)`,
1114
+ espera: (hours, open) => ` human wait ${hours} h; ${open} open`,
1115
+ semResposta: 'no measured response',
1116
+ metaDentro: ' (within the 5 min target)', metaFora: ' (above the 5 min target)',
1117
+ hitl: (requests, hours, median, target, open, outside) => ` conduction HITL ${requests} question(s); stopped ${hours} h; median ${median}${target}; ${open} open; text outside exception ${outside}`,
1118
+ riscos: (total) => ` risks prevented ${total} preventive gate(s)`,
1119
+ estimativas: (total) => ` PLAN estimates ${total} sample(s)`,
1120
+ cobertura: (text) => ` coverage ${text}`,
1121
+ observacao: (text) => text
1122
+ .replace(/sessao\(oes\) sem medicao de tokens$/, 'session(s) without token measurement')
1123
+ .replace(/sessao\(oes\) com tokens, mas sem tarifa de referencia$/, 'session(s) with tokens but no reference rate')
1124
+ .replace(/linha\(s\) de ledger corrompida\(s\) ignorada\(s\)$/, 'corrupt ledger line(s) ignored'),
1125
+ },
1126
+ produto: {
1127
+ portfolio: {
1128
+ opcaoAposentada: (option) => `portfolio.opcao-aposentada: --${option} belonged to the Objective Envelope, retired in I-43, and\n` +
1129
+ ' portfolio show never read it. The envelope\'s two beams became regular thread properties:\n' +
1130
+ ' ork thread new "<name>" --modo <MODE> --exige-runtime-diferente\n' +
1131
+ ' CHECK requires a runtime that GO did not use\n' +
1132
+ ' ork thread new "<name>" --modo <MODE> --done "<criterion> :: <command>"\n' +
1133
+ ' an EXECUTABLE done criterion that becomes a claim and runs in ork verify',
1134
+ usoInspect: 'usage: ork portfolio inspect <id> --json',
1135
+ tipo: 'type must be product, project, or initiative',
1136
+ vazio: 'Portfolio is empty.',
1137
+ usoShow: 'usage: ork portfolio show <id>',
1138
+ naoEncontrada: (id) => `entity ${id} not found`,
1139
+ estado: (id, title, status) => `${id}\n${title}\nStatus: ${status}`,
1140
+ usoCreate: 'usage: ork portfolio create <product|project|initiative> <id> --title T [--parent ID]',
1141
+ desconhecido: (sub) => `unknown subcommand: portfolio ${sub}`,
1142
+ },
1143
+ creation: {
1144
+ identidade: 'creation.identity: payload cannot choose the principal',
1145
+ usoStart: 'usage: ork creation start --input-file F --json',
1146
+ arquivoGrande: 'creation.input: file exceeds the limit',
1147
+ exigeId: 'creation requires an id',
1148
+ versao: 'creation requires a positive integer --expected-version',
1149
+ desconhecido: 'unknown creation subcommand',
1150
+ },
1151
+ objective: (sub) => `objective.aposentado: the Objective Envelope left the product in I-43 (subcommand "${sub}").\n` +
1152
+ ' It described a gate that blocked nothing: of the project\'s 137 threads, zero\n' +
1153
+ ' had creationOrigin, the only path through which dispatch consulted it.\n' +
1154
+ ' Its two beams became regular thread properties:\n' +
1155
+ ' ork thread new "<name>" --modo <MODE> --exige-runtime-diferente\n' +
1156
+ ' CHECK requires a runtime that GO did not use\n' +
1157
+ ' ork thread new "<name>" --modo <MODE> --done "<criterion> :: <command>"\n' +
1158
+ ' an EXECUTABLE done criterion that becomes a claim and runs in ork verify\n' +
1159
+ ' Existing envelopes remain untouched in .orkastery/objectives.',
1160
+ ci: {
1161
+ usoPrepare: 'usage: ork ci prepare <thread-id>', aviso: (line) => `WARNING: ${line}`,
1162
+ bundle: (file) => `CI bundle: ${file}`,
1163
+ usoRun: 'usage: ork ci run <thread-id> [--json] | ork ci run --bundle <file> | ork ci run --branch <branch>',
1164
+ resultado: (ok, detail) => `${ok ? 'CI PASSED' : 'CI FAILED'}: ${detail}`,
1165
+ sha: 'error: ci status: --sha requires the full 40-character lowercase hexadecimal SHA ' +
1166
+ '(git rev-parse HEAD); the check is queried at the exact commit, never by ref or prefix',
1167
+ usoStatus: 'usage: ork ci status --sha <40-character sha> [--remoto origin]',
1168
+ status: (ok, detail) => `${ok ? 'CI GREEN' : 'CI NOT CLEARED'}: ${detail}`,
1169
+ desconhecido: (sub) => `unknown subcommand: ci ${sub}`,
1170
+ anteriorAoLint: (line) => `${line} (claim predates the lint: warning only)`,
1171
+ worktreeSumiu: (worktree) => `the thread worktree ${worktree} no longer exists; the bundle goes to the project root`,
1172
+ lintRecusado: (refusals) => `claims.lint: the bundle was not generated; withdraw the claim and register it again with the focused command:\n ${refusals}`,
1173
+ },
1174
+ },
1175
+ },
1176
+ setup: locale_setup_1.SETUP_EN,
1177
+ projetos: locale_projetos_1.PROJETOS_EN,
649
1178
  init: {
650
1179
  foraDoRepositorio: (dir) => `init.fora-do-repositorio: ${dir} is not inside a git repository; nothing was created. ` +
651
1180
  'Enter the project repository (or create one with `git init` and a first commit) and run `ork init` again.',
@@ -685,6 +1214,13 @@ exports.ErroDoCatalogo = ErroDoCatalogo;
685
1214
  function mensagemDoErro(e) {
686
1215
  return e instanceof ErroDoCatalogo ? e.montar(msg()) : e instanceof Error ? e.message : String(e);
687
1216
  }
1217
+ /**
1218
+ * F3b (D3): o texto de um erro para guardar num resultado que o comando coberto imprime depois. O do catalogo e
1219
+ * registrado para a remontagem, como `textoDoCatalogo`; os demais saem como vieram.
1220
+ */
1221
+ function textoDoErro(e) {
1222
+ return e instanceof ErroDoCatalogo ? textoDoCatalogo(e.montar) : e instanceof Error ? e.message : String(e);
1223
+ }
688
1224
  /** G2 e D1 da F2b: os montadores dos textos que o comando coberto guardou num resultado, pelo texto. */
689
1225
  let remontagem = null;
690
1226
  /**
@@ -703,6 +1239,14 @@ function textoDoCatalogo(montar) {
703
1239
  remontagem?.set(texto, montar);
704
1240
  return texto;
705
1241
  }
1242
+ /**
1243
+ * F3b: o montador registrado de um texto do catalogo, ou um que devolve o texto como veio. Serve ao erro que embute um
1244
+ * texto ja montado: o `ErroDoCatalogo` e remontado na entrada do CLI depois que o registro foi desligado, entao ele
1245
+ * guarda o montador do texto de dentro no momento em que nasce.
1246
+ */
1247
+ function montadorDe(texto) {
1248
+ return remontagem?.get(texto) ?? (() => texto);
1249
+ }
706
1250
  /** O texto como a pessoa o le no locale ativo: o que veio do catalogo e remontado; o resto sai como veio. */
707
1251
  function remontar(texto) {
708
1252
  const montar = remontagem?.get(texto);