@orkastery/cli 0.5.3 → 0.6.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (502) 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 +195 -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/autoridade.json +56 -0
  16. package/adapters/claude-code/mods/ork-clima/.claude-plugin/plugin.json +14 -0
  17. package/adapters/claude-code/mods/ork-clima/hooks/contas.ts +283 -0
  18. package/adapters/claude-code/mods/ork-clima/hooks/hooks.json +3 -0
  19. package/adapters/claude-code/mods/ork-clima/hooks/previsao.ts +393 -0
  20. package/adapters/claude-code/mods/ork-clima/hooks/register.ts +205 -0
  21. package/adapters/claude-code/mods/ork-clima/orkastery-mod.json +5 -0
  22. package/adapters/claude-code/mods/ork-clima/types/index.d.ts +80 -0
  23. package/adapters/claude-code/mods/ork-freio/.claude-plugin/plugin.json +14 -0
  24. package/adapters/claude-code/mods/ork-freio/hooks/carga.ts +160 -0
  25. package/adapters/claude-code/mods/ork-freio/hooks/conferencia.ts +309 -0
  26. package/adapters/claude-code/mods/ork-freio/hooks/hooks.json +3 -0
  27. package/adapters/claude-code/mods/ork-freio/hooks/lote.ts +270 -0
  28. package/adapters/claude-code/mods/ork-freio/hooks/register.ts +285 -0
  29. package/adapters/claude-code/mods/ork-freio/orkastery-mod.json +5 -0
  30. package/adapters/claude-code/mods/ork-freio/types/index.d.ts +127 -0
  31. package/adapters/claude-code/mods/ork-mensageiro/.claude-plugin/plugin.json +14 -0
  32. package/adapters/claude-code/mods/ork-mensageiro/hooks/caixa.ts +215 -0
  33. package/adapters/claude-code/mods/ork-mensageiro/hooks/hooks.json +3 -0
  34. package/adapters/claude-code/mods/ork-mensageiro/hooks/painel.tsx +165 -0
  35. package/adapters/claude-code/mods/ork-mensageiro/hooks/recepcao.ts +256 -0
  36. package/adapters/claude-code/mods/ork-mensageiro/hooks/register.tsx +481 -0
  37. package/adapters/claude-code/mods/ork-mensageiro/orkastery-mod.json +5 -0
  38. package/adapters/claude-code/mods/ork-mensageiro/types/index.d.ts +85 -0
  39. package/adapters/claude-code/mods/ork-mesa/.claude-plugin/plugin.json +14 -0
  40. package/adapters/claude-code/mods/ork-mesa/hooks/cartoes.tsx +246 -0
  41. package/adapters/claude-code/mods/ork-mesa/hooks/decidir.ts +110 -0
  42. package/adapters/claude-code/mods/ork-mesa/hooks/fila.ts +253 -0
  43. package/adapters/claude-code/mods/ork-mesa/hooks/hooks.json +3 -0
  44. package/adapters/claude-code/mods/ork-mesa/hooks/obvia.ts +98 -0
  45. package/adapters/claude-code/mods/ork-mesa/hooks/register.tsx +493 -0
  46. package/adapters/claude-code/mods/ork-mesa/orkastery-mod.json +5 -0
  47. package/adapters/claude-code/mods/ork-mesa/types/index.d.ts +131 -0
  48. package/adapters/claude-code/mods/ork-pista/.claude-plugin/plugin.json +14 -0
  49. package/adapters/claude-code/mods/ork-pista/hooks/acoes.ts +71 -0
  50. package/adapters/claude-code/mods/ork-pista/hooks/ci.ts +121 -0
  51. package/adapters/claude-code/mods/ork-pista/hooks/hooks.json +3 -0
  52. package/adapters/claude-code/mods/ork-pista/hooks/pista.tsx +356 -0
  53. package/adapters/claude-code/mods/ork-pista/hooks/register.tsx +439 -0
  54. package/adapters/claude-code/mods/ork-pista/orkastery-mod.json +5 -0
  55. package/adapters/claude-code/mods/ork-pista/types/index.d.ts +85 -0
  56. package/adapters/claude-code/mods/ork-ponte/.claude-plugin/plugin.json +13 -0
  57. package/adapters/claude-code/mods/ork-ponte/hooks/faixa.tsx +57 -0
  58. package/adapters/claude-code/mods/ork-ponte/hooks/guarda.ts +410 -0
  59. package/adapters/claude-code/mods/ork-ponte/hooks/hooks.json +3 -0
  60. package/adapters/claude-code/mods/ork-ponte/hooks/mostrado.ts +55 -0
  61. package/adapters/claude-code/mods/ork-ponte/hooks/nucleo.ts +157 -0
  62. package/adapters/claude-code/mods/ork-ponte/hooks/papel.ts +42 -0
  63. package/adapters/claude-code/mods/ork-ponte/hooks/register.ts +331 -0
  64. package/adapters/claude-code/mods/ork-ponte/hooks/vigia.ts +76 -0
  65. package/adapters/claude-code/mods/ork-ponte/orkastery-mod.json +5 -0
  66. package/adapters/claude-code/mods/ork-ponte/types/index.d.ts +178 -0
  67. package/adapters/claude-code/mods/ork-portao/.claude-plugin/plugin.json +14 -0
  68. package/adapters/claude-code/mods/ork-portao/hooks/hooks.json +3 -0
  69. package/adapters/claude-code/mods/ork-portao/hooks/lease.ts +201 -0
  70. package/adapters/claude-code/mods/ork-portao/hooks/plano.ts +304 -0
  71. package/adapters/claude-code/mods/ork-portao/hooks/register.ts +339 -0
  72. package/adapters/claude-code/mods/ork-portao/hooks/verify.ts +152 -0
  73. package/adapters/claude-code/mods/ork-portao/orkastery-mod.json +5 -0
  74. package/adapters/claude-code/mods/ork-portao/types/index.d.ts +60 -0
  75. package/adapters/claude-code/mods/ork-radar/.claude-plugin/plugin.json +14 -0
  76. package/adapters/claude-code/mods/ork-radar/hooks/colisao.ts +420 -0
  77. package/adapters/claude-code/mods/ork-radar/hooks/hooks.json +3 -0
  78. package/adapters/claude-code/mods/ork-radar/hooks/mapa.tsx +322 -0
  79. package/adapters/claude-code/mods/ork-radar/hooks/register.tsx +470 -0
  80. package/adapters/claude-code/mods/ork-radar/orkastery-mod.json +5 -0
  81. package/adapters/claude-code/mods/ork-radar/types/index.d.ts +72 -0
  82. package/adapters/claude-code/mods/ork-ritual/.claude-plugin/plugin.json +14 -0
  83. package/adapters/claude-code/mods/ork-ritual/hooks/hooks.json +3 -0
  84. package/adapters/claude-code/mods/ork-ritual/hooks/nota.ts +88 -0
  85. package/adapters/claude-code/mods/ork-ritual/hooks/register.tsx +494 -0
  86. package/adapters/claude-code/mods/ork-ritual/hooks/replay.tsx +271 -0
  87. package/adapters/claude-code/mods/ork-ritual/hooks/ritual.ts +218 -0
  88. package/adapters/claude-code/mods/ork-ritual/orkastery-mod.json +5 -0
  89. package/adapters/claude-code/mods/ork-ritual/types/index.d.ts +106 -0
  90. package/adapters/claude-code/mods/ork-sentinela/.claude-plugin/plugin.json +14 -0
  91. package/adapters/claude-code/mods/ork-sentinela/hooks/alertas.ts +85 -0
  92. package/adapters/claude-code/mods/ork-sentinela/hooks/despacho.ts +156 -0
  93. package/adapters/claude-code/mods/ork-sentinela/hooks/hooks.json +3 -0
  94. package/adapters/claude-code/mods/ork-sentinela/hooks/register.ts +511 -0
  95. package/adapters/claude-code/mods/ork-sentinela/hooks/vigia.ts +186 -0
  96. package/adapters/claude-code/mods/ork-sentinela/orkastery-mod.json +5 -0
  97. package/adapters/claude-code/mods/ork-sentinela/types/index.d.ts +65 -0
  98. package/adapters/claude-code/mods/ork-torre/.claude-plugin/plugin.json +14 -0
  99. package/adapters/claude-code/mods/ork-torre/hooks/agenda.ts +60 -0
  100. package/adapters/claude-code/mods/ork-torre/hooks/detalhe.tsx +236 -0
  101. package/adapters/claude-code/mods/ork-torre/hooks/frases.ts +42 -0
  102. package/adapters/claude-code/mods/ork-torre/hooks/hooks.json +3 -0
  103. package/adapters/claude-code/mods/ork-torre/hooks/painel.tsx +344 -0
  104. package/adapters/claude-code/mods/ork-torre/hooks/rede.ts +97 -0
  105. package/adapters/claude-code/mods/ork-torre/hooks/register.tsx +437 -0
  106. package/adapters/claude-code/mods/ork-torre/orkastery-mod.json +5 -0
  107. package/adapters/claude-code/mods/ork-torre/types/index.d.ts +108 -0
  108. package/adapters/codex/skills/ork/SKILL.md +2 -0
  109. package/adapters/hermes/README.md +64 -1
  110. package/adapters/hermes/bin/ork-conhecimento-colecoes.sh +14 -0
  111. package/adapters/hermes/bin/ork-conhecimento-listar.sh +15 -0
  112. package/adapters/hermes/bin/ork-conhecimento-mostrar.sh +16 -0
  113. package/adapters/hermes/bin/ork-conhecimento-verificar.sh +15 -0
  114. package/adapters/hermes/bin/ork-vigia-batida.py +127 -0
  115. package/adapters/hermes/hermes.plugin.json +4 -0
  116. package/adapters/hermes/hitl-ingress/__init__.py +101 -8
  117. package/adapters/hermes/skills/orkastery-devmaster/SKILL.md +3 -3
  118. package/adapters/openclaw/README.md +83 -10
  119. package/adapters/openclaw/bin/ork-vigia-batida.js +86 -0
  120. package/adapters/openclaw/dist/hitl-ingress.js +106 -9
  121. package/adapters/openclaw/dist/index.js +86 -0
  122. package/adapters/openclaw/openclaw.plugin.json +34 -4
  123. package/adapters/openclaw/package.json +2 -2
  124. package/adapters/openclaw/src/hitl-ingress.ts +103 -9
  125. package/adapters/openclaw/src/index.ts +94 -0
  126. package/assets/adapters-en/claude-code/README.md +403 -0
  127. package/assets/adapters-en/claude-code/agents/ork-check.md +33 -0
  128. package/assets/adapters-en/claude-code/agents/ork-go.md +33 -0
  129. package/assets/adapters-en/claude-code/agents/ork-goal.md +34 -0
  130. package/assets/adapters-en/claude-code/agents/ork-master.md +35 -0
  131. package/assets/adapters-en/claude-code/agents/ork-plan.md +33 -0
  132. package/assets/adapters-en/claude-code/agents/ork-ship.md +33 -0
  133. package/assets/adapters-en/claude-code/commands/check.md +46 -0
  134. package/assets/adapters-en/claude-code/commands/go.md +46 -0
  135. package/assets/adapters-en/claude-code/commands/goal.md +55 -0
  136. package/assets/adapters-en/claude-code/commands/master.md +54 -0
  137. package/assets/adapters-en/claude-code/commands/onboarding.md +22 -0
  138. package/assets/adapters-en/claude-code/commands/ork.md +126 -0
  139. package/assets/adapters-en/claude-code/commands/plan.md +47 -0
  140. package/assets/adapters-en/claude-code/commands/ship.md +45 -0
  141. package/assets/adapters-en/codex/skills/ork/SKILL.md +85 -0
  142. package/assets/adapters-en/hermes/README.md +273 -0
  143. package/assets/adapters-en/hermes/skills/orkastery-devmaster/SKILL.md +169 -0
  144. package/assets/docs-en/markdownlint-cli2.jsonc +22 -0
  145. package/assets/docs-en/padroes/documentacao-de-produto.md +135 -0
  146. package/assets/docs-en/padroes/roadmap-de-produto.md +100 -0
  147. package/assets/docs-en/produto/README.md +14 -0
  148. package/assets/docs-en/produto/_modelo-feature.md +62 -0
  149. package/assets/docs-en/roadmap/README.md +14 -0
  150. package/assets/docs-en/roadmap/_modelo-item.md +75 -0
  151. package/assets/references-en/README.md +25 -0
  152. package/assets/references-en/code-review-axes.md +82 -0
  153. package/assets/references-en/definition-of-done.md +74 -0
  154. package/assets/references-en/performance-checklist.md +53 -0
  155. package/assets/references-en/security-checklist.md +101 -0
  156. package/assets/references-en/testing-patterns.md +51 -0
  157. package/assets/security-scan/defaults/.golangci.yml +2 -0
  158. package/assets/security-scan/defaults/eslint.config.mjs +11 -0
  159. package/assets/security-scan/defaults/gitleaks.toml +3 -0
  160. package/assets/security-scan/defaults/ruff.toml +1 -0
  161. package/assets/security-scan/tools-agil.json +87 -0
  162. package/assets/security-scan/tools.json +625 -0
  163. package/assets/skills-en/core/onboarding/SKILL.md +58 -0
  164. package/assets/skills-en/core/orkastery-bootstrap/SKILL.md +119 -0
  165. package/assets/skills-en/core/thread-state/SKILL.md +88 -0
  166. package/assets/skills-en/governance/decision-triage/SKILL.md +65 -0
  167. package/assets/skills-en/governance/narrative-guardian/SKILL.md +66 -0
  168. package/assets/skills-en/governance/roadmap-keeper/SKILL.md +60 -0
  169. package/assets/skills-en/governance/scope-check-capability-map/SKILL.md +71 -0
  170. package/assets/skills-en/observability/thread-tracing/SKILL.md +63 -0
  171. package/assets/skills-en/phases/check-quality/SKILL.md +103 -0
  172. package/assets/skills-en/phases/go-implementation/SKILL.md +78 -0
  173. package/assets/skills-en/phases/goal-definition/SKILL.md +69 -0
  174. package/assets/skills-en/phases/master-metrics/SKILL.md +72 -0
  175. package/assets/skills-en/phases/plan-specification/SKILL.md +67 -0
  176. package/assets/skills-en/phases/security-remediation/SKILL.md +70 -0
  177. package/assets/skills-en/phases/ship-release/SKILL.md +71 -0
  178. package/assets/skills-en/reviewers/code-reviewer/SKILL.md +61 -0
  179. package/assets/skills-en/reviewers/security-auditor/SKILL.md +93 -0
  180. package/assets/skills-en/reviewers/test-engineer/SKILL.md +66 -0
  181. package/assets/skills-en/reviewers/web-performance-auditor/SKILL.md +63 -0
  182. package/dist/adapters/claude-bg.js +193 -15
  183. package/dist/adapters/codex-controller-worker.js +12 -5
  184. package/dist/adapters/codex-events.js +16 -4
  185. package/dist/adapters/codex.js +13 -2
  186. package/dist/agents-md.js +24 -15
  187. package/dist/atualizar-branch.js +245 -0
  188. package/dist/auditoria.js +13 -11
  189. package/dist/auditrun.js +68 -48
  190. package/dist/autorizacao-duravel.js +327 -0
  191. package/dist/board.js +98 -43
  192. package/dist/branch-de-estado.js +39 -9
  193. package/dist/busca-semantica.js +7 -5
  194. package/dist/catalogo.js +35 -1
  195. package/dist/changelog-reconciliacao.js +290 -0
  196. package/dist/check-agil.js +500 -0
  197. package/dist/check-modo.js +41 -0
  198. package/dist/check-paralelo.js +183 -0
  199. package/dist/ci.js +255 -46
  200. package/dist/ciclos.js +8 -6
  201. package/dist/claim-lint.js +12 -8
  202. package/dist/claims-conferir.js +350 -0
  203. package/dist/claims.js +13 -10
  204. package/dist/company-brain-client.js +45 -3
  205. package/dist/company-brain-journal.js +2 -1
  206. package/dist/company-brain-migration.js +47 -6
  207. package/dist/conducao-batida.js +759 -0
  208. package/dist/conducao-sentinela.js +405 -0
  209. package/dist/conducao-texto.js +12 -18
  210. package/dist/conducao.js +206 -59
  211. package/dist/conhecimento-consulta.js +270 -0
  212. package/dist/conhecimento.js +514 -0
  213. package/dist/conta-esgotada.js +127 -0
  214. package/dist/dado-privado.js +816 -0
  215. package/dist/decisao-autonoma.js +5 -4
  216. package/dist/demo.js +14 -12
  217. package/dist/dependencias-da-worktree.js +25 -0
  218. package/dist/divida.js +38 -36
  219. package/dist/docs.js +103 -82
  220. package/dist/doctor-forja.js +345 -0
  221. package/dist/doctor-pulse-cron.js +294 -27
  222. package/dist/doctor-rede.js +18 -17
  223. package/dist/doctor.js +278 -116
  224. package/dist/dsn-da-memoria.js +417 -0
  225. package/dist/entrega-por-mod.js +503 -0
  226. package/dist/entrega-pr.js +158 -57
  227. package/dist/escopo-escrita.js +10 -1
  228. package/dist/esgotamentos.js +13 -11
  229. package/dist/estado-thread.js +42 -17
  230. package/dist/evalrunner.js +35 -32
  231. package/dist/experiencia-instalacao.js +45 -25
  232. package/dist/fabrica-batida.js +323 -0
  233. package/dist/fabrica-estado.js +49 -16
  234. package/dist/fabrica-publicar.js +3 -1
  235. package/dist/fila-pesada.js +444 -0
  236. package/dist/fix.js +24 -21
  237. package/dist/forja/adaptador.js +6 -0
  238. package/dist/forja/ambiente-de-ci.js +27 -0
  239. package/dist/forja/api.js +256 -0
  240. package/dist/forja/cache.js +89 -0
  241. package/dist/forja/cli.js +60 -0
  242. package/dist/forja/contrato.js +9 -0
  243. package/dist/forja/endereco.js +43 -0
  244. package/dist/forja/estado.js +22 -0
  245. package/dist/forja/executor.js +73 -0
  246. package/dist/forja/github/ci.js +95 -0
  247. package/dist/forja/github/dono-da-rede.js +18 -0
  248. package/dist/forja/github/metadados.js +15 -0
  249. package/dist/forja/github/pedidos.js +200 -0
  250. package/dist/forja/gitlab/ci.js +141 -0
  251. package/dist/forja/gitlab/consultas.js +59 -0
  252. package/dist/forja/gitlab/dono-da-rede.js +43 -0
  253. package/dist/forja/gitlab/metadados.js +15 -0
  254. package/dist/forja/gitlab/pedidos-abertos.js +158 -0
  255. package/dist/forja/gitlab/pedidos.js +141 -0
  256. package/dist/forja/produtor.js +32 -0
  257. package/dist/forja/registro.js +31 -0
  258. package/dist/forja/resolver.js +121 -0
  259. package/dist/forja/texto.js +13 -0
  260. package/dist/forja/versao.js +71 -0
  261. package/dist/forja.js +124 -81
  262. package/dist/gates.js +3 -28
  263. package/dist/handoff.js +33 -19
  264. package/dist/hitl-contract.js +46 -43
  265. package/dist/hitl-curto.js +37 -25
  266. package/dist/hitl-gates.js +13 -11
  267. package/dist/hitl-local-receipt.js +53 -0
  268. package/dist/hitl-local.js +11 -2
  269. package/dist/hitl-lock.js +5 -11
  270. package/dist/hitl-public-receipt.js +11 -0
  271. package/dist/hitl-resumo.js +72 -3
  272. package/dist/hitl-sessions.js +62 -9
  273. package/dist/hitl-tempo-parado.js +4 -4
  274. package/dist/hitl-texto-livre.js +7 -4
  275. package/dist/hitl.js +63 -64
  276. package/dist/horario.js +30 -7
  277. package/dist/hosts.js +155 -134
  278. package/dist/impedimento.js +108 -14
  279. package/dist/index.js +1421 -1019
  280. package/dist/indice-vetorial.js +14 -12
  281. package/dist/indice.js +7 -1
  282. package/dist/init.js +54 -49
  283. package/dist/instabilidade.js +144 -0
  284. package/dist/integracoes-locais.js +4 -0
  285. package/dist/intelligence-graph-cli.js +213 -88
  286. package/dist/intelligence-graph-contexto.js +56 -17
  287. package/dist/intelligence-graph-contract.js +2 -1
  288. package/dist/intelligence-graph-extract-md.js +56 -4
  289. package/dist/intelligence-graph-extract-ts.js +71 -3
  290. package/dist/intelligence-graph-query.js +96 -34
  291. package/dist/leases.js +19 -18
  292. package/dist/ledger-stats.js +17 -16
  293. package/dist/ledger.js +46 -2
  294. package/dist/licoes.js +12 -11
  295. package/dist/liveness.js +6 -3
  296. package/dist/locale-accounts.js +220 -0
  297. package/dist/locale-adapter.js +291 -0
  298. package/dist/locale-ajuda.js +833 -0
  299. package/dist/locale-audit.js +199 -0
  300. package/dist/locale-claims.js +213 -0
  301. package/dist/locale-conducao.js +138 -0
  302. package/dist/locale-conhecimento.js +181 -0
  303. package/dist/locale-decisao.js +205 -0
  304. package/dist/locale-docs.js +230 -0
  305. package/dist/locale-estado.js +101 -0
  306. package/dist/locale-forja.js +290 -0
  307. package/dist/locale-gerados.js +165 -0
  308. package/dist/locale-grafo.js +129 -0
  309. package/dist/locale-master.js +182 -0
  310. package/dist/locale-network.js +524 -0
  311. package/dist/locale-onboarding.js +92 -0
  312. package/dist/locale-operacao-restante.js +931 -0
  313. package/dist/locale-phase.js +151 -0
  314. package/dist/locale-projetos.js +100 -0
  315. package/dist/locale-prompts.js +194 -0
  316. package/dist/locale-pulse.js +349 -0
  317. package/dist/locale-reservas.js +87 -0
  318. package/dist/locale-retry.js +524 -0
  319. package/dist/locale-roadmap.js +102 -0
  320. package/dist/locale-security-scan.js +69 -0
  321. package/dist/locale-setup.js +192 -0
  322. package/dist/locale-ship.js +597 -0
  323. package/dist/locale-thread.js +421 -0
  324. package/dist/locale-verify.js +201 -0
  325. package/dist/locale-worktree.js +246 -0
  326. package/dist/locale.js +1258 -0
  327. package/dist/maestro-runtime.js +22 -3
  328. package/dist/manifest.js +415 -13
  329. package/dist/maquina-ociosa.js +211 -0
  330. package/dist/maquina.js +31 -7
  331. package/dist/master-digest.js +6 -1
  332. package/dist/master-nota-local.js +200 -0
  333. package/dist/master-nota.js +14 -8
  334. package/dist/master.js +139 -65
  335. package/dist/mcp-artifacts.js +11 -2
  336. package/dist/mcp-conhecimento.js +52 -0
  337. package/dist/mcp-experiencia.js +26 -5
  338. package/dist/mcp-git.js +23 -6
  339. package/dist/mcp-grafo.js +7 -4
  340. package/dist/mcp-install.js +73 -8
  341. package/dist/mcp-noctum.js +101 -0
  342. package/dist/mcp-server.js +90 -16
  343. package/dist/mcp-ship-transporte.js +977 -0
  344. package/dist/mcp-ship.js +71 -25
  345. package/dist/mcp-transportes.js +17 -0
  346. package/dist/mcp-verify.js +6 -1
  347. package/dist/memoria.js +63 -58
  348. package/dist/modos-migracao.js +8 -6
  349. package/dist/modos.js +20 -24
  350. package/dist/network-roadmap.js +90 -51
  351. package/dist/noctum-aceite.js +789 -0
  352. package/dist/noctum-arco.js +1418 -0
  353. package/dist/noctum-capacidade.js +141 -0
  354. package/dist/noctum-changelog.js +399 -0
  355. package/dist/noctum-cli.js +482 -0
  356. package/dist/noctum-coordenacao.js +1225 -0
  357. package/dist/noctum-entrega.js +1169 -0
  358. package/dist/noctum-envelope.js +1046 -0
  359. package/dist/noctum-execucao.js +376 -0
  360. package/dist/noctum-fechamento.js +405 -0
  361. package/dist/noctum-fila.js +314 -0
  362. package/dist/noctum-guarda.js +256 -0
  363. package/dist/noctum-integracao.js +507 -0
  364. package/dist/noctum-maquinas.js +383 -0
  365. package/dist/noctum-medicao.js +450 -0
  366. package/dist/noctum-modo.js +362 -0
  367. package/dist/noctum-pergunta-canal.js +96 -0
  368. package/dist/noctum-pergunta.js +115 -0
  369. package/dist/noctum-provas.js +838 -0
  370. package/dist/noctum-reconciliacao.js +591 -0
  371. package/dist/noctum-registro.js +215 -0
  372. package/dist/noctum-relatorio.js +827 -0
  373. package/dist/noctum-resposta.js +207 -0
  374. package/dist/noctum-sessoes-em-voo.js +93 -0
  375. package/dist/noctum-supervisao.js +649 -0
  376. package/dist/noctum-terminal.js +459 -0
  377. package/dist/noctum-transporte.js +655 -0
  378. package/dist/noctum-vigia.js +639 -0
  379. package/dist/ocupacao.js +32 -3
  380. package/dist/onboarding.js +56 -26
  381. package/dist/orkmind.js +48 -25
  382. package/dist/orquestracao.js +44 -47
  383. package/dist/parado-no-condutor.js +174 -127
  384. package/dist/phase.js +144 -63
  385. package/dist/policies.js +37 -4
  386. package/dist/portfolio.js +4 -2
  387. package/dist/postura-local.js +235 -0
  388. package/dist/preflight.js +11 -10
  389. package/dist/procedencia.js +220 -0
  390. package/dist/projeto-alvo.js +186 -24
  391. package/dist/prompts.js +140 -42
  392. package/dist/prova-minima.js +5 -6
  393. package/dist/pulse-cadencia.js +5 -4
  394. package/dist/pulse-consentimento.js +53 -1
  395. package/dist/pulse-delivery.js +151 -24
  396. package/dist/pulse-resposta.js +368 -4
  397. package/dist/pulse.js +188 -22
  398. package/dist/ratelimit.js +16 -6
  399. package/dist/recall.js +14 -13
  400. package/dist/redacao-saida.js +63 -0
  401. package/dist/rede-adesao.js +13 -8
  402. package/dist/rede-forja.js +108 -24
  403. package/dist/rede-status.js +66 -47
  404. package/dist/rede.js +86 -46
  405. package/dist/retomada-checkpoint.js +101 -0
  406. package/dist/retry.js +451 -212
  407. package/dist/roadmap-reservas.js +45 -28
  408. package/dist/roadmap-status.js +129 -33
  409. package/dist/runtime-ambiente.js +5 -0
  410. package/dist/runtime-context.js +284 -32
  411. package/dist/runtime-escada.js +423 -0
  412. package/dist/runtime-profiles.js +103 -46
  413. package/dist/runtimes.js +2 -1
  414. package/dist/saida-segura.js +3 -2
  415. package/dist/security-scan/agil.js +355 -0
  416. package/dist/security-scan/cli.js +76 -0
  417. package/dist/security-scan/compare.js +149 -0
  418. package/dist/security-scan/config.js +93 -0
  419. package/dist/security-scan/detect.js +97 -0
  420. package/dist/security-scan/executor.js +188 -0
  421. package/dist/security-scan/guard.js +180 -0
  422. package/dist/security-scan/imagem-de-lint.js +96 -0
  423. package/dist/security-scan/normalize/actionlint.js +12 -0
  424. package/dist/security-scan/normalize/eslint.js +12 -0
  425. package/dist/security-scan/normalize/gitleaks.js +13 -0
  426. package/dist/security-scan/normalize/golangci-lint.js +13 -0
  427. package/dist/security-scan/normalize/govulncheck.js +36 -0
  428. package/dist/security-scan/normalize/index.js +25 -0
  429. package/dist/security-scan/normalize/npm-audit.js +30 -0
  430. package/dist/security-scan/normalize/osv-scanner.js +32 -0
  431. package/dist/security-scan/normalize/oxlint.js +51 -0
  432. package/dist/security-scan/normalize/pip-audit.js +16 -0
  433. package/dist/security-scan/normalize/ruff.js +12 -0
  434. package/dist/security-scan/normalize/semgrep.js +20 -0
  435. package/dist/security-scan/normalize/trivy.js +33 -0
  436. package/dist/security-scan/normalize/util.js +204 -0
  437. package/dist/security-scan/normalize/zizmor.js +19 -0
  438. package/dist/security-scan/report.js +156 -0
  439. package/dist/security-scan/run.js +448 -0
  440. package/dist/security-scan/tools.js +62 -0
  441. package/dist/security-scan/trabalhador.js +74 -0
  442. package/dist/security-scan/types.js +15 -0
  443. package/dist/session-events.js +26 -5
  444. package/dist/session-watcher-claude.js +81 -20
  445. package/dist/session-watcher.js +340 -42
  446. package/dist/sessoes-contas.js +10 -1
  447. package/dist/sessoes-inventario.js +1 -1
  448. package/dist/sessoes.js +25 -23
  449. package/dist/setup.js +59 -58
  450. package/dist/ship-publicar.js +971 -0
  451. package/dist/ship.js +243 -97
  452. package/dist/steal.js +77 -0
  453. package/dist/superficie.js +14 -11
  454. package/dist/thread-close.js +12 -11
  455. package/dist/thread.js +274 -100
  456. package/dist/tokens.js +15 -11
  457. package/dist/trabalho-thread.js +297 -0
  458. package/dist/transporte-do-canal.js +189 -0
  459. package/dist/types.js +12 -1
  460. package/dist/util.js +13 -3
  461. package/dist/varredura-acoes.js +507 -0
  462. package/dist/verify.js +608 -76
  463. package/dist/vida-da-thread.js +254 -0
  464. package/dist/worktree-local.js +167 -0
  465. package/dist/worktree.js +99 -83
  466. package/dist/yaml.js +27 -8
  467. package/eval/casos/check-quality.json +77 -0
  468. package/eval/casos/security-auditor.json +148 -0
  469. package/eval/casos/security-remediation.json +161 -0
  470. package/eval/fixtures/security-scan/README.md +8 -0
  471. package/eval/fixtures/security-scan/go/.github/workflows/ci.yml +12 -0
  472. package/eval/fixtures/security-scan/go/Dockerfile +4 -0
  473. package/eval/fixtures/security-scan/go/README.md +4 -0
  474. package/eval/fixtures/security-scan/go/config.go +4 -0
  475. package/eval/fixtures/security-scan/go/go.mod +5 -0
  476. package/eval/fixtures/security-scan/go/go.sum +2 -0
  477. package/eval/fixtures/security-scan/go/main.go +31 -0
  478. package/eval/fixtures/security-scan/js/.github/workflows/ci.yml +12 -0
  479. package/eval/fixtures/security-scan/js/Dockerfile +3 -0
  480. package/eval/fixtures/security-scan/js/README.md +4 -0
  481. package/eval/fixtures/security-scan/js/package-lock.json +844 -0
  482. package/eval/fixtures/security-scan/js/package.json +10 -0
  483. package/eval/fixtures/security-scan/js/src/config.js +4 -0
  484. package/eval/fixtures/security-scan/js/src/server.js +17 -0
  485. package/eval/fixtures/security-scan/js/src/util.ts +4 -0
  486. package/eval/fixtures/security-scan/js/tsconfig.json +4 -0
  487. package/eval/fixtures/security-scan/python/.github/workflows/ci.yml +12 -0
  488. package/eval/fixtures/security-scan/python/Dockerfile +3 -0
  489. package/eval/fixtures/security-scan/python/README.md +4 -0
  490. package/eval/fixtures/security-scan/python/app/__init__.py +0 -0
  491. package/eval/fixtures/security-scan/python/app/config.py +2 -0
  492. package/eval/fixtures/security-scan/python/app/main.py +19 -0
  493. package/eval/fixtures/security-scan/python/requirements.txt +1 -0
  494. package/package.json +9 -4
  495. package/references/security-checklist.md +3 -3
  496. package/schemas/code-artifact-graph.v1.schema.json +2 -1
  497. package/skills/README.md +1 -0
  498. package/skills/core/orkastery-bootstrap/SKILL.md +2 -2
  499. package/skills/phases/check-quality/SKILL.md +16 -0
  500. package/skills/phases/go-implementation/SKILL.md +6 -0
  501. package/skills/phases/security-remediation/SKILL.md +70 -0
  502. package/skills/reviewers/security-auditor/SKILL.md +25 -0
package/dist/mcp-ship.js CHANGED
@@ -33,7 +33,10 @@ var __importStar = (this && this.__importStar) || (function () {
33
33
  };
34
34
  })();
35
35
  Object.defineProperty(exports, "__esModule", { value: true });
36
+ exports.ambienteDoWorkerDoTransporte = exports.ambienteDoWorkerShip = void 0;
37
+ exports.conferenciaDepoisDoPush = conferenciaDepoisDoPush;
36
38
  exports.criarPerfilShipMcp = criarPerfilShipMcp;
39
+ exports.configDeRedeDoPerfil = configDeRedeDoPerfil;
37
40
  exports.shipMcp = shipMcp;
38
41
  /** SHIP instalado: o cliente escolhe identidade/HEADs, nunca transporte ou autorização.
39
42
  * SSH do dono é infraestrutura confiável explícita; não é uma promessa de SSH sem helpers.
@@ -47,6 +50,10 @@ const thread_1 = require("./thread");
47
50
  const worktree_1 = require("./worktree");
48
51
  const mcp_artifacts_1 = require("./mcp-artifacts");
49
52
  const mcp_git_1 = require("./mcp-git");
53
+ const mcp_ship_transporte_1 = require("./mcp-ship-transporte");
54
+ Object.defineProperty(exports, "ambienteDoWorkerShip", { enumerable: true, get: function () { return mcp_ship_transporte_1.ambienteDoWorkerShip; } });
55
+ Object.defineProperty(exports, "ambienteDoWorkerDoTransporte", { enumerable: true, get: function () { return mcp_ship_transporte_1.ambienteDoWorkerDoTransporte; } });
56
+ const mcp_transportes_1 = require("./mcp-transportes");
50
57
  const leases_1 = require("./leases");
51
58
  const ship_1 = require("./ship");
52
59
  const verify_1 = require("./verify");
@@ -110,7 +117,7 @@ const PRAZO = 240000, RESERVA = 15000, LIMITE = 1048576;
110
117
  const perfis = new WeakMap();
111
118
  function erro(m) { throw Error('mcp.ship.' + m); }
112
119
  function digest(s) { return (0, node_crypto_1.createHash)('sha256').update(s).digest('hex'); }
113
- /** Somente SSH fixado/bare físico: ambos nunca usam credential helpers HTTP. HTTPS é recusado na factory. */
120
+ /** SSH (do GitHub ou fixado) e bare fisico nunca usam helper HTTP; o HTTPS fixado zera os helpers da config no push. */
114
121
  function config(raiz) {
115
122
  const raw = (0, mcp_git_1.gitPassivoMcp)(raiz, ['config', '--null', '--list']);
116
123
  for (const item of raw.split('\0').filter(Boolean)) {
@@ -120,22 +127,7 @@ function config(raiz) {
120
127
  }
121
128
  return digest(raw);
122
129
  }
123
- /** Push usa todas as URLs configuradas; nunca fixar somente a primeira. */
124
- function originUnico(raiz) {
125
- const ler = (push) => {
126
- const raw = (0, mcp_git_1.gitPassivoMcp)(raiz, ['remote', 'get-url', ...(push ? ['--push'] : []), '--all', 'origin']);
127
- const urls = raw.split('\n');
128
- if (urls[urls.length - 1] === '')
129
- urls.pop();
130
- if (urls.length !== 1 || !urls[0] || /[\x00-\x1f\x7f]/.test(urls[0]))
131
- erro('transport.urls: origin exige uma URL efetiva');
132
- return urls[0];
133
- };
134
- const fetch = ler(false), push = ler(true);
135
- if (fetch !== push)
136
- erro('transport.pushurl');
137
- return fetch;
138
- }
130
+ const originUnico = mcp_ship_transporte_1.originUnicoMcp;
139
131
  function guardarBare(url) {
140
132
  if (!path.isAbsolute(url))
141
133
  erro('transport.bare.invalid');
@@ -169,6 +161,42 @@ function guardarBare(url) {
169
161
  erro('transport.bare.invalid');
170
162
  return { dev: st.dev, ino: st.ino };
171
163
  }
164
+ /**
165
+ * A fixacao de agora tem de ser a do startup, byte a byte no que importa: a mesma pasta, o mesmo `transporte.json`
166
+ * (modo, origin, chaves, CLI, hash da CA) e os mesmos arquivos fixados (`lerFixacao` confere pasta, known_hosts, CLI
167
+ * e CA). O `-c` do push nao e recalculado: e o do startup.
168
+ */
169
+ function guardarPino(f, url) {
170
+ const p = f.pino, atual = (0, mcp_ship_transporte_1.lerFixacao)(f.raiz, p.fixacao.transporte, url, f.env);
171
+ if (atual.dir !== p.dir || JSON.stringify(atual.fixacao) !== JSON.stringify(p.fixacao))
172
+ (0, mcp_ship_transporte_1.recusar)('fixacao-divergente', 'transporte.json');
173
+ (0, mcp_ship_transporte_1.conferirFixacao)(p.fixacao, p.dir);
174
+ (0, mcp_ship_transporte_1.conferirConfigDaCli)(p.fixacao, f.env);
175
+ }
176
+ /**
177
+ * Depois do push e da prova, o origin e a config tem de ser os do startup, e a fixacao a mesma: o git releu os dois a
178
+ * cada comando de rede, e uma troca no meio levaria o push a outro lugar que a prova tambem leria.
179
+ */
180
+ function depoisDoPush(f) {
181
+ return () => {
182
+ let url, cfg;
183
+ try {
184
+ url = originUnico(f.raiz);
185
+ cfg = config(f.raiz);
186
+ }
187
+ catch { /* origin ou config ilegivel tambem e troca */ }
188
+ if (url !== f.url || cfg !== f.config)
189
+ (0, mcp_ship_transporte_1.recusar)('mudou-no-push', 'origin');
190
+ guardarPino(f, url);
191
+ };
192
+ }
193
+ /** A conferencia de depois do push do perfil; so os transportes fixados a tem. */
194
+ function conferenciaDepoisDoPush(perfil) {
195
+ const f = perfis.get(perfil);
196
+ if (!f)
197
+ erro('profile.invalid');
198
+ return f.pino ? depoisDoPush(f) : undefined;
199
+ }
172
200
  /** Somente instalação/startup confiável chama esta factory. O objeto é uma capacidade privada. */
173
201
  function criarPerfilShipMcp(raiz, transporte = 'github-ssh') {
174
202
  if (process.platform !== 'linux' || !path.isAbsolute(raiz))
@@ -181,21 +209,34 @@ function criarPerfilShipMcp(raiz, transporte = 'github-ssh') {
181
209
  if (!/^[A-Za-z0-9][A-Za-z0-9._/-]*$/.test(destino) || destino.includes('..') || destino.endsWith('/'))
182
210
  erro('destination.invalid');
183
211
  const cfg = config(raiz), url = originUnico(raiz);
184
- let bare;
212
+ let bare, pino;
185
213
  if (transporte === 'github-ssh') {
186
- if (!/^git@github\.com:[A-Za-z0-9][A-Za-z0-9-]*\/[A-Za-z0-9][A-Za-z0-9._-]*\.git$/.test(url))
214
+ if (!mcp_ship_transporte_1.URL_GITHUB_SSH.test(url))
187
215
  erro('transport.unsupported: GitHub SSH exigido; HTTPS requer autenticacao instalada auditada');
188
216
  }
189
217
  else if (transporte === 'bare-local')
190
218
  bare = guardarBare(url);
219
+ else if ((0, mcp_transportes_1.ehTransporteFixado)(transporte))
220
+ pino = (0, mcp_ship_transporte_1.lerFixacao)(raiz, transporte, url);
191
221
  else
192
222
  erro('transport.invalid');
223
+ const rede = pino ? (0, mcp_ship_transporte_1.configDeRede)(pino.fixacao, pino.dir) : [];
224
+ if ((0, mcp_ship_transporte_1.chaveRecusadaDaConfigDeRede)(rede) !== null)
225
+ erro('transport.invalid');
193
226
  const perfil = Object.freeze({ transporte, destino }), st = fs.statSync(raiz);
194
- const env = { HOME: process.env.HOME, USER: process.env.USER, LOGNAME: process.env.LOGNAME, XDG_CONFIG_HOME: process.env.XDG_CONFIG_HOME,
195
- SSH_AUTH_SOCK: process.env.SSH_AUTH_SOCK, PATH: '/usr/bin:/bin', LANG: 'C.UTF-8', TMPDIR: '/tmp' };
196
- perfis.set(perfil, { raiz, dev: st.dev, ino: st.ino, url, config: cfg, perfil, env, ...(bare ? { bare } : {}) });
227
+ const env = (0, mcp_ship_transporte_1.ambienteDoWorkerDoTransporte)(transporte, process.env, pino?.fixacao.transporte === 'forja-https' ? pino.fixacao.cli : undefined);
228
+ if (pino)
229
+ (0, mcp_ship_transporte_1.conferirConfigDaCli)(pino.fixacao, env);
230
+ perfis.set(perfil, { raiz, dev: st.dev, ino: st.ino, url, config: cfg, perfil, env, rede, ...(bare ? { bare } : {}), ...(pino ? { pino } : {}) });
197
231
  return perfil;
198
232
  }
233
+ /** O `-c` que o push e o `ls-remote` do perfil levam; vazio no `github-ssh` e no `bare-local`. */
234
+ function configDeRedeDoPerfil(perfil) {
235
+ const f = perfis.get(perfil);
236
+ if (!f)
237
+ erro('profile.invalid');
238
+ return [...f.rede];
239
+ }
199
240
  function validar(p) {
200
241
  if (!p || Object.keys(p).sort().join(',') !== 'expectedDestination,expectedSource,threadId' ||
201
242
  typeof p.threadId !== 'string' || !/^[A-Za-z0-9][A-Za-z0-9._-]{0,79}$/.test(p.threadId) ||
@@ -299,8 +340,11 @@ function executar(f, p) {
299
340
  guardEstado();
300
341
  if (Date.now() > deadline - RESERVA)
301
342
  erro('deadline');
302
- if (originUnico(raiz) !== f.url || config(raiz) !== f.config)
343
+ const url = originUnico(raiz);
344
+ if (url !== f.url || config(raiz) !== f.config)
303
345
  erro('transport.changed');
346
+ if (f.pino)
347
+ guardarPino(f, url);
304
348
  if (f.bare) {
305
349
  const b = guardarBare(f.url);
306
350
  if (b.dev !== f.bare.dev || b.ino !== f.bare.ino)
@@ -353,7 +397,9 @@ function executar(f, p) {
353
397
  sandbox.fechar();
354
398
  }
355
399
  };
356
- return (0, ship_1.ship)(c, t.id, { de, para, remoto: 'origin', executorVerify: executor, ttlLeaseMs: PRAZO + RESERVA, retomarLeaseVencido: false,
400
+ // RM-058 N2 (B1 do CHECK): a fila pesada espera so o que cabe no prazo do worker, para o finally soltar as leases.
401
+ return (0, ship_1.ship)(c, t.id, { de, para, remoto: 'origin', configDoRemoto: f.rede, ...(f.pino ? { conferirDepoisDoPush: depoisDoPush(f), urlFixada: f.pino.fixacao.url } : {}), executorVerify: executor, ttlLeaseMs: PRAZO + RESERVA, retomarLeaseVencido: false,
402
+ esperarFilaPesadaMs: Math.max(0, Math.min(20000, deadline - Date.now() - RESERVA)),
357
403
  revalidarGit: (etapa, dir) => { if (!leasesIntactas())
358
404
  erro('lease.changed'); guard(etapa, dir); } });
359
405
  }
@@ -433,6 +479,6 @@ if (require.main === module && process.argv[2] === '--worker') {
433
479
  }
434
480
  catch (e) {
435
481
  const m = e.message;
436
- process.stdout.write(JSON.stringify({ ok: false, erro: m.startsWith('mcp.') ? m : 'mcp.ship.operation.failed: conferir estado antes de repetir' }));
482
+ process.stdout.write(JSON.stringify({ ok: false, erro: m.startsWith('mcp.') || m.startsWith('fila-pesada.') ? m : 'mcp.ship.operation.failed: conferir estado antes de repetir' }));
437
483
  }
438
484
  }
@@ -0,0 +1,17 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.TRANSPORTES_SHIP_MCP = void 0;
4
+ exports.ehTransporteShipMcp = ehTransporteShipMcp;
5
+ exports.ehTransporteFixado = ehTransporteFixado;
6
+ /**
7
+ * Os transportes do `ork_ship` do MCP. `github-ssh` e o SSH do GitHub de sempre; `bare-local`, um repositorio bare
8
+ * fisico; `forja-ssh` e `forja-https` sao fixados na instalacao (`mcp-ship-transporte.ts`). Sem dependencia: o CLI
9
+ * valida o argumento sem carregar o MCP.
10
+ */
11
+ exports.TRANSPORTES_SHIP_MCP = ['github-ssh', 'forja-ssh', 'forja-https', 'bare-local'];
12
+ function ehTransporteShipMcp(v) {
13
+ return typeof v === 'string' && exports.TRANSPORTES_SHIP_MCP.includes(v);
14
+ }
15
+ function ehTransporteFixado(v) {
16
+ return v === 'forja-ssh' || v === 'forja-https';
17
+ }
@@ -33,6 +33,7 @@ var __importStar = (this && this.__importStar) || (function () {
33
33
  };
34
34
  })();
35
35
  Object.defineProperty(exports, "__esModule", { value: true });
36
+ exports.ESPERA_DA_FILA_PESADA_MCP_MS = void 0;
36
37
  exports.verificarMcp = verificarMcp;
37
38
  /** Operação estruturada: argumentos só identificam a thread; execução sempre confinada. */
38
39
  const fs = __importStar(require("node:fs"));
@@ -46,6 +47,8 @@ const mcp_artifacts_1 = require("./mcp-artifacts");
46
47
  const verify_1 = require("./verify");
47
48
  const verify_sandbox_1 = require("./verify-sandbox");
48
49
  const worktree_1 = require("./worktree");
50
+ /** RM-058 N2 (D10 da ork-rm058n2): a espera maxima do MCP pela fila de recursos pesados, dentro do prazo total. */
51
+ exports.ESPERA_DA_FILA_PESADA_MCP_MS = 20_000;
49
52
  const PRAZO_TOTAL_MS = 180_000;
50
53
  const RESERVA_MS = 10_000;
51
54
  // I-37 (D4): o teto por comando cabe o `test:ci` medido (196 s); quem limita e o prazo total.
@@ -154,7 +157,9 @@ function verificarMcp(raizEntrada, threadId, conducao = {}) {
154
157
  }
155
158
  };
156
159
  // I-36 (T8): o MESMO lease de execucao do CLI; a sessao filha reentra pela identidade do despacho.
157
- const r = (0, verify_1.verificar)(carregado, threadId, { executor, operacao: 'mcp.verify', conducao });
160
+ // RM-058 N2 (D10): o MCP tem prazo total curto; espera a fila pesada no maximo ESPERA_DA_FILA_PESADA_MCP_MS.
161
+ const r = (0, verify_1.verificar)(carregado, threadId, { executor, operacao: 'mcp.verify',
162
+ conducao: { ...conducao, filaPesada: { esperarMs: Math.min(exports.ESPERA_DA_FILA_PESADA_MCP_MS, conducao.filaPesada?.esperarMs ?? exports.ESPERA_DA_FILA_PESADA_MCP_MS) } } });
158
163
  const execucoes = r.claims.flatMap(c => c.execucoes).concat(r.comandos);
159
164
  return {
160
165
  threadId, ok: r.ok, commit: r.commit, motivos: r.motivos,
package/dist/memoria.js CHANGED
@@ -97,6 +97,8 @@ const onboarding_1 = require("./onboarding");
97
97
  const node_crypto_1 = require("node:crypto");
98
98
  const node_util_1 = require("node:util");
99
99
  const memoria_humana_1 = require("./memoria-humana");
100
+ const locale_1 = require("./locale");
101
+ const locale_prompts_1 = require("./locale-prompts");
100
102
  const master_1 = require("./master");
101
103
  const modos_1 = require("./modos");
102
104
  const orkmind_1 = require("./orkmind");
@@ -804,9 +806,10 @@ function primeiraLinha(texto) {
804
806
  * - Entradas `mandatory` do OrkMind entram sempre que as tags casam, em qualquer fase.
805
807
  * - Todo item declara a proveniencia: `path#ancora` ou `orkmind://<colecao>/<id>`.
806
808
  */
807
- function injecaoDaFase(carregado, memoria, thread, fase) {
809
+ function injecaoDaFase(carregado, memoria, thread, fase, locale = (0, locale_1.localeAtivo)()) {
808
810
  carregado = (0, project_state_1.memoryState)(carregado).loaded;
809
811
  const { manifesto } = carregado;
812
+ const m = (locale === 'en' ? locale_prompts_1.PROMPTS_EN : locale_prompts_1.PROMPTS_PT_BR).memoria;
810
813
  const itens = [];
811
814
  const caminhoThread = `.orkastery/threads/${thread.id}/thread.json`;
812
815
  let n = 0;
@@ -823,7 +826,7 @@ function injecaoDaFase(carregado, memoria, thread, fase) {
823
826
  vistas.add(d.id);
824
827
  add({
825
828
  colecao: 'decision',
826
- titulo: `Decisao ${d.id} (fechada por ${d.decididaPor})`,
829
+ titulo: m.decisaoFechada(d.id, d.decididaPor),
827
830
  conteudo: d.texto,
828
831
  origem: 'thread.json',
829
832
  location: `${caminhoThread}#json:decisoes.${d.id}`,
@@ -839,7 +842,7 @@ function injecaoDaFase(carregado, memoria, thread, fase) {
839
842
  vistas.add(id);
840
843
  add({
841
844
  colecao: 'decision',
842
- titulo: id ? `Decisao ${id} (memoria semantica)` : 'Decisao fechada (memoria semantica)',
845
+ titulo: id ? m.decisaoSemantica(id) : m.decisaoSemId,
843
846
  conteudo: e.content,
844
847
  origem: 'orkmind',
845
848
  location: (0, orkmind_1.enderecoDeMemoria)('decision', e.id),
@@ -856,7 +859,7 @@ function injecaoDaFase(carregado, memoria, thread, fase) {
856
859
  licoes += 1;
857
860
  add({
858
861
  colecao: 'learning',
859
- titulo: `Licao da thread ${threadDaEntrada(e) ?? '(anterior)'}`,
862
+ titulo: m.licaoDaThread(threadDaEntrada(e) ?? (locale === 'en' ? '(previous)' : '(anterior)')),
860
863
  conteudo: e.content,
861
864
  origem: 'orkmind',
862
865
  location: (0, orkmind_1.enderecoDeMemoria)('learning', e.id),
@@ -873,7 +876,7 @@ function injecaoDaFase(carregado, memoria, thread, fase) {
873
876
  licoes += 1;
874
877
  add({
875
878
  colecao: 'learning',
876
- titulo: 'Licoes das threads fechadas deste produto (POSTMORTEM e MASTER)',
879
+ titulo: m.licoesDoProduto,
877
880
  conteudo: texto,
878
881
  origem: 'postmortem',
879
882
  location: '.orkastery/threads/*/POSTMORTEM.json',
@@ -891,7 +894,7 @@ function injecaoDaFase(carregado, memoria, thread, fase) {
891
894
  regras += 1;
892
895
  add({
893
896
  colecao: 'rule',
894
- titulo: `Regra mandatoria: ${primeiraLinha(e.content).slice(0, 70)}`,
897
+ titulo: m.regraMandatoria(primeiraLinha(e.content).slice(0, 70)),
895
898
  conteudo: e.content,
896
899
  origem: 'orkmind',
897
900
  location: (0, orkmind_1.enderecoDeMemoria)('rule', e.id),
@@ -907,7 +910,7 @@ function injecaoDaFase(carregado, memoria, thread, fase) {
907
910
  decisoes,
908
911
  licoes,
909
912
  regras,
910
- texto: textoDaInjecao(itens, memoria.regime),
913
+ texto: textoDaInjecao(itens, memoria.regime, locale),
911
914
  };
912
915
  }
913
916
  /**
@@ -916,38 +919,30 @@ function injecaoDaFase(carregado, memoria, thread, fase) {
916
919
  * Vazio quando nao ha item: a linha da variavel some do prompt e o texto fica byte a byte
917
920
  * igual ao que o B4 ja despachava. Uma thread sem decisao fechada nao ganha secao vazia.
918
921
  */
919
- function textoDaInjecao(itens, regime) {
922
+ function textoDaInjecao(itens, regime, locale = (0, locale_1.localeAtivo)()) {
920
923
  if (itens.length === 0)
921
924
  return '';
925
+ const m = (locale === 'en' ? locale_prompts_1.PROMPTS_EN : locale_prompts_1.PROMPTS_PT_BR).memoria;
922
926
  const linhas = [];
923
927
  linhas.push('');
924
- linhas.push(`## Memoria injetada (regime ${regime})`);
925
- linhas.push('Recuperacao deterministica por tag. Todo item declara de onde veio: nada entra neste ' +
926
- 'prompt sem proveniencia. O que NAO esta aqui esta nos ponteiros do handoff, ' +
927
- 'recuperavel por `ork recall`.');
928
+ linhas.push(m.titulo(regime));
929
+ linhas.push(m.explicacao);
928
930
  const porColecao = {};
929
931
  for (const i of itens)
930
932
  (porColecao[i.colecao] ??= []).push(i);
931
- const rotulos = {
932
- decision: 'Decisoes fechadas desta thread (entram em TODA fase)',
933
- learning: 'Licoes de threads anteriores deste produto',
934
- rule: 'Regras mandatorias do ecossistema',
935
- handoff: 'Handoffs anteriores',
936
- roadmap: 'Roadmap',
937
- };
938
933
  for (const colecao of ['decision', 'learning', 'rule', 'handoff', 'roadmap']) {
939
934
  const doGrupo = porColecao[colecao];
940
935
  if (!doGrupo || doGrupo.length === 0)
941
936
  continue;
942
937
  linhas.push('');
943
- linhas.push(`### ${rotulos[colecao] ?? colecao} (${doGrupo.length})`);
938
+ linhas.push(`### ${m.grupos[colecao] ?? colecao} (${doGrupo.length})`);
944
939
  for (const i of doGrupo) {
945
- linhas.push(`- ${i.titulo}${i.mandatory ? ' [MANDATORY]' : ''}`);
940
+ linhas.push(`- ${i.titulo}${i.mandatory ? m.mandatory : ''}`);
946
941
  for (const l of i.conteudo.split('\n')) {
947
942
  if (l.trim() !== '')
948
943
  linhas.push(` ${l}`);
949
944
  }
950
- linhas.push(` origem: ${i.location}`);
945
+ linhas.push(` ${m.origem(i.location)}`);
951
946
  }
952
947
  }
953
948
  return linhas.join('\n');
@@ -1092,29 +1087,37 @@ function publicarPropostas(carregado, achados, memoriaAberta) {
1092
1087
  }
1093
1088
  /** Texto de `ork memory status`. */
1094
1089
  function textoDoEstado(estado) {
1090
+ const m = (0, locale_1.msg)().operacao.restante.memory.estado;
1095
1091
  const linhas = [];
1096
- linhas.push('Regime de memoria do projeto');
1092
+ linhas.push(m.titulo);
1097
1093
  linhas.push('');
1098
- linhas.push(` pedido no manifesto ${estado.pedido}`);
1099
- linhas.push(` regime efetivo ${estado.efetivo}`);
1100
- linhas.push(` tenant ${estado.tenant}`);
1101
- linhas.push(` variavel da base ${estado.variavel || '(nao declarada)'}`);
1102
- linhas.push(` DSN no ambiente ${estado.dsnPresente ? 'sim (valor nunca impresso)' : 'nao'}`);
1103
- linhas.push(` cli do OrkMind ${estado.cli}`);
1094
+ linhas.push(m.pedido(estado.pedido));
1095
+ linhas.push(m.efetivo(estado.efetivo));
1096
+ linhas.push(m.tenant(estado.tenant));
1097
+ // RM-069 (D5): com a fonte de arquivo, o arquivo pelo rotulo com `~`; com ambiente, as linhas de sempre.
1098
+ if (estado.fonteDaDsn === 'arquivo') {
1099
+ linhas.push(m.arquivo(estado.arquivoDaDsn ?? ''));
1100
+ linhas.push(m.dsnNoArquivo(estado.dsnPresente));
1101
+ }
1102
+ else {
1103
+ linhas.push(m.variavel(estado.variavel));
1104
+ linhas.push(m.dsn(estado.dsnPresente));
1105
+ }
1106
+ linhas.push(m.cli(estado.cli));
1104
1107
  linhas.push('');
1105
1108
  if (estado.motivo) {
1106
- linhas.push(` degradacao: ${estado.motivo}`);
1109
+ linhas.push(m.degradacao(estado.motivo));
1107
1110
  linhas.push(` ${estado.detalhe}`);
1108
- linhas.push(` correcao: ${estado.correcao}`);
1111
+ linhas.push(m.correcao(estado.correcao));
1109
1112
  linhas.push('');
1110
- linhas.push(' O ciclo NAO para por isso: em regime files o handoff continua triado em 3 niveis,');
1111
- linhas.push(' os ponteiros continuam `path#ancora` e `ork recall` continua resolvendo.');
1113
+ linhas.push(m.continua1);
1114
+ linhas.push(m.continua2);
1112
1115
  }
1113
1116
  else {
1114
1117
  linhas.push(` ${estado.detalhe}`);
1115
1118
  linhas.push('');
1116
- linhas.push(` colecoes gravadas: ${orkmind_1.COLECOES_DO_ORK.join(', ')}`);
1117
- linhas.push(' governanca: source=agent; decision/human exige human_gate comprovado; mandatory=false e regra nunca critical.');
1119
+ linhas.push(m.colecoes(orkmind_1.COLECOES_DO_ORK.join(', ')));
1120
+ linhas.push(m.governanca);
1118
1121
  }
1119
1122
  if (estado.embeddings)
1120
1123
  linhas.push('', ...textoDosEmbeddings(estado.embeddings));
@@ -1122,37 +1125,38 @@ function textoDoEstado(estado) {
1122
1125
  }
1123
1126
  /** Secao de embeddings do `ork memory status` (I-38 D6): nome da variavel, nunca o valor. */
1124
1127
  function textoDosEmbeddings(e) {
1125
- const linhas = ['Busca por significado (embeddings, nao deterministica; o recall por tag nao muda)', ''];
1126
- linhas.push(` provider ${e.configurado ? `${e.provider} ${e.modelo} (${e.dim} dim)` : 'none (desligada)'}`);
1128
+ const m = (0, locale_1.msg)().operacao.restante.memory.embeddings;
1129
+ const linhas = [m.titulo, ''];
1130
+ linhas.push(m.provider(e.configurado ? `${e.provider} ${e.modelo} (${e.dim} dim)` : m.desligada));
1127
1131
  if (e.configurado) {
1128
- linhas.push(` chave ${e.variavelDaChave} ${e.chavePresente ? 'presente' : 'ausente'} no ambiente (valor nunca impresso)`);
1129
- linhas.push(` fallback local ${e.fallback.modelo ? `${e.fallback.modelo}: ${e.fallback.presente ? `no cache (${e.fallback.dim} dim)` : 'ausente do cache'}, ` +
1130
- `dependencias ${e.fallback.dependencias ? 'ok' : e.sondado ? 'ausentes' : 'nao sondadas'}` : '(nao declarado)'}`);
1131
- linhas.push(` caminho ativo ${e.ativo}${e.sondado ? '' : ' (ponte nao sondada)'}`);
1132
+ linhas.push(m.chave(e.variavelDaChave, e.chavePresente));
1133
+ linhas.push(m.fallback(e.fallback.modelo ? `${e.fallback.modelo}: ${e.fallback.presente ? m.cache(e.fallback.dim) : m.foraCache}, ` +
1134
+ m.deps(e.fallback.dependencias ? m.depsOk : e.sondado ? m.depsAusentes : m.depsNaoSondadas) : m.naoDeclarado));
1135
+ linhas.push(m.ativo(e.ativo, e.sondado));
1132
1136
  }
1133
1137
  if (e.universo) {
1134
1138
  const colecoes = Object.entries(e.universo.porColecao).map(([c, n]) => `${c} ${n}`).join(', ');
1135
- linhas.push(` universo da busca ${e.entradas} entrada(s) do tenant: ${colecoes}`);
1136
- linhas.push(` fora da busca ${(0, indice_vetorial_1.textoForaDaBusca)(e.universo.foraDaBusca)}`);
1139
+ linhas.push(m.universo(e.entradas, colecoes));
1140
+ linhas.push(m.fora((0, indice_vetorial_1.textoForaDaBusca)(e.universo.foraDaBusca)));
1137
1141
  }
1138
1142
  else if (e.falhaDoUniverso) {
1139
- linhas.push(` universo da busca nao lido (${e.falhaDoUniverso}); cobertura nao calculada`);
1143
+ linhas.push(m.universoFalhou(e.falhaDoUniverso));
1140
1144
  }
1141
1145
  for (const i of e.indices) {
1142
- linhas.push(` indice ${i.modelo} / ${i.dim} dim: ${i.vetores} vetor(es), ${i.coerentes ?? '?'} coerente(s), ${i.desatualizados ?? '?'} desatualizado(s)`);
1146
+ linhas.push(m.indice(i.modelo, i.dim, i.vetores, i.coerentes ?? null, i.desatualizados ?? null));
1143
1147
  }
1144
1148
  if (e.entradas !== null) {
1145
- linhas.push(` cobertura ${e.cobertura === null ? '-' : `${Math.round(e.cobertura * 1000) / 10}%`} de ${e.entradas} entrada(s) do universo da busca`);
1149
+ linhas.push(m.cobertura(e.cobertura === null ? '-' : `${Math.round(e.cobertura * 1000) / 10}%`, e.entradas));
1146
1150
  }
1147
1151
  if (e.aviso)
1148
- linhas.push(` aviso ${e.aviso}`);
1152
+ linhas.push(m.aviso(e.aviso));
1149
1153
  if (e.sonda) {
1150
- linhas.push(` sonda ${e.sonda.ok ? `${e.sonda.alvo} respondeu em ${e.sonda.latenciaMs} ms` : `sem resposta (${e.sonda.motivo ?? 'sem caminho ativo'})`}`);
1154
+ linhas.push(m.sonda(e.sonda.ok ? m.sondaOk(e.sonda.alvo, e.sonda.latenciaMs) : m.sondaFalha(e.sonda.motivo ?? m.semCaminho)));
1151
1155
  }
1152
1156
  if (e.motivo) {
1153
- linhas.push(` motivo ${e.motivo}`);
1157
+ linhas.push(m.motivo(e.motivo));
1154
1158
  linhas.push(` ${e.detalhe}`);
1155
- linhas.push(` correcao: ${e.correcao}`);
1159
+ linhas.push((0, locale_1.msg)().operacao.restante.memory.estado.correcao(e.correcao));
1156
1160
  }
1157
1161
  else
1158
1162
  linhas.push(` ${e.detalhe}`);
@@ -1160,30 +1164,31 @@ function textoDosEmbeddings(e) {
1160
1164
  }
1161
1165
  /** Texto de `ork memory sync`. */
1162
1166
  function textoDoSync(r) {
1167
+ const m = (0, locale_1.msg)().operacao.restante.memory.sync;
1163
1168
  const linhas = [];
1164
- linhas.push(`Sincronizacao de memoria (regime ${r.regime})${r.thread ? ` da thread ${r.thread}` : ''}`);
1165
- linhas.push(`Perfil: ${r.perfil ?? 'integral'}; fora do perfil: ${(r.colecoesForaDoPerfil ?? []).join(', ') || '(nenhuma)'}`);
1169
+ linhas.push(m.titulo(r.regime, r.thread));
1170
+ linhas.push(m.perfil(r.perfil ?? 'integral', (r.colecoesForaDoPerfil ?? []).join(', ')));
1166
1171
  if (r.publicacao?.estado === 'pendente')
1167
- linhas.push(`Publicacao pendente: ${r.publicacao.motivo}`);
1172
+ linhas.push(m.pendente(r.publicacao.motivo));
1168
1173
  linhas.push('');
1169
1174
  const linha = (nome, s) => {
1170
- linhas.push(` ${nome.padEnd(10)} ${s.gravadas.length} entrada(s): ${s.detalhe}`);
1175
+ linhas.push(m.entradas(nome, s.gravadas.length, s.detalhe));
1171
1176
  };
1172
1177
  linha('decision', r.decisoes);
1173
1178
  linha('rule', r.policies);
1174
- linhas.push(` human_gate ${r.humanos.elegiveis} elegiveis, ${r.humanos.excluidos} excluidos, ${r.humanos.falhas} falhas`);
1179
+ linhas.push(m.humanos(r.humanos.elegiveis, r.humanos.excluidos, r.humanos.falhas));
1175
1180
  const um = (nome, g) => {
1176
- linhas.push(` ${nome.padEnd(10)} ${g ? (g.ok ? `${g.duplicada ? 'ja existente' : 'gravado'} (${g.id})` : `nao gravado: ${g.detalhe}`) : '(nada a gravar)'}`);
1181
+ linhas.push(m.gravacao(nome, g ? (g.ok ? `${g.duplicada ? m.jaExiste : m.gravado} (${g.id})` : m.naoGravado(g.detalhe)) : m.nada));
1177
1182
  };
1178
1183
  um('handoff', r.handoff);
1179
1184
  um('learning', r.learning);
1180
1185
  um('roadmap', r.roadmap);
1181
1186
  linhas.push('');
1182
- linhas.push(` total ${r.total} tentativa(s), ${r.falhas} sem gravacao`);
1187
+ linhas.push(m.total(r.total, r.falhas));
1183
1188
  if (r.regime === 'files') {
1184
1189
  linhas.push('');
1185
1190
  linhas.push(` ${r.estado.detalhe}`);
1186
- linhas.push(` correcao: ${r.estado.correcao}`);
1191
+ linhas.push(m.correcao(r.estado.correcao));
1187
1192
  }
1188
1193
  return linhas.join('\n');
1189
1194
  }
@@ -67,6 +67,7 @@ const manifest_1 = require("./manifest");
67
67
  const ledger_1 = require("./ledger");
68
68
  const modos_1 = require("./modos");
69
69
  const util_1 = require("./util");
70
+ const locale_1 = require("./locale");
70
71
  const MARCA_BACKUP = 'migracao-modos-i43';
71
72
  /** Le a lista `[a, b, c]` de uma linha de YAML simples, como o manifesto escreve. */
72
73
  function lerListaInline(linha) {
@@ -178,14 +179,15 @@ function migrarModosAposentados(raiz, opcoes = {}) {
178
179
  }
179
180
  /** Texto do `ork modos migrar`, com o antes e o depois de cada campo. */
180
181
  function textoDaMigracaoModos(r) {
182
+ const m = (0, locale_1.msg)().operacao.modos.migracao;
181
183
  if (r.mudancas.length === 0) {
182
- return 'Nada a migrar: nenhum modo aposentado na configuracao deste projeto.';
184
+ return m.nada;
183
185
  }
184
- const linhas = [r.dryRun ? 'Simulacao (--dry-run), nada foi gravado.' : 'Migracao aplicada.'];
185
- for (const m of r.mudancas)
186
- linhas.push(` ${m.arquivo} ${m.campo}`, ` de ${m.de}`, ` para ${m.para}`);
186
+ const linhas = [r.dryRun ? m.simulacao : m.aplicada];
187
+ for (const mudanca of r.mudancas)
188
+ linhas.push(` ${mudanca.arquivo} ${mudanca.campo}`, ` ${m.de.padEnd(4)} ${mudanca.de}`, ` ${m.para} ${mudanca.para}`);
187
189
  if (r.backup)
188
- linhas.push(` backup ${r.backup}`);
189
- linhas.push('', 'Nenhum historico foi tocado: thread, ledger e recibo em modo aposentado ficam como estao.');
190
+ linhas.push(` ${m.backup} ${r.backup}`);
191
+ linhas.push('', m.historico);
190
192
  return linhas.join('\n');
191
193
  }
package/dist/modos.js CHANGED
@@ -24,14 +24,13 @@ exports.blocoDaFase = blocoDaFase;
24
24
  exports.fasePausa = fasePausa;
25
25
  exports.tabelaDeModos = tabelaDeModos;
26
26
  const types_1 = require("./types");
27
- /** Invariantes que valem em TODOS os modos, inclusive `#Auto`. */
28
- exports.INVARIANTES = [
29
- 'Claims, verify e policies rodam identicos em todos os modos.',
30
- 'Policy `block` pausa qualquer modo, inclusive #Auto.',
31
- 'Escalacao tipada para humano pausa qualquer modo, inclusive #Auto.',
32
- 'Toda entrega fecha com indice derivado do ledger; a nota humana, quando vier, sobrescreve.',
33
- 'Toda decisao autonoma vai ao ledger com quem decidiu, evidencia e razao.',
34
- ];
27
+ const locale_1 = require("./locale");
28
+ const locale_prompts_1 = require("./locale-prompts");
29
+ /**
30
+ * Invariantes que valem em TODOS os modos, inclusive `#Auto`. RM-061 F3c: o texto mora no catalogo dos prompts (o
31
+ * pt-BR e a fonte, o ingles e tipado por ele); a tabela do `ork modos` e o prompt de fase leem o mesmo.
32
+ */
33
+ exports.INVARIANTES = locale_prompts_1.PROMPTS_PT_BR.invariantes;
35
34
  /** Monta a parte 3 do slug para um conjunto de fases (visao, secao 3.4). */
36
35
  function slugDasFases(fases) {
37
36
  if (fases.length === 0)
@@ -190,10 +189,7 @@ exports.MOTIVO_MODO_APOSENTADO = 'modo.aposentado';
190
189
  * O texto e DERIVADO de `ORDEM_DOS_MODOS` (ver `substitutosVivos`), nunca escrito a mao.
191
190
  */
192
191
  function recusaDeModoAposentado(modo) {
193
- const tag = exports.MODOS[modo].tag;
194
- return `${exports.MOTIVO_MODO_APOSENTADO}: ${tag} foi aposentado e nao abre trabalho novo. `
195
- + `Use ${substitutosVivos().join(' ou ')}. `
196
- + `Thread ja gravada em ${tag} continua abrindo normalmente.`;
192
+ return (0, locale_1.msg)().thread.modoAposentado(exports.MOTIVO_MODO_APOSENTADO, exports.MODOS[modo].tag, substitutosVivos());
197
193
  }
198
194
  /**
199
195
  * O portao de ESCRITA de modo, com recusa tipada em vez de silencio.
@@ -209,8 +205,7 @@ function exigirModoVivo(entrada) {
209
205
  const cru = (entrada ?? '').trim().replace(/^--?modo[= ]/i, '').replace(/^#/, '').toLowerCase();
210
206
  if (modoAposentado(cru))
211
207
  throw new Error(recusaDeModoAposentado(cru));
212
- throw new Error(`modo.desconhecido: "${entrada ?? ''}" nao e um modo de conducao. `
213
- + `Use um de: ${exports.ORDEM_DOS_MODOS.map((m) => exports.MODOS[m].tag).join(', ')}.`);
208
+ throw new Error((0, locale_1.msg)().thread.modoDesconhecido(entrada ?? '', exports.ORDEM_DOS_MODOS.map((m) => exports.MODOS[m].tag).join(', ')));
214
209
  }
215
210
  /**
216
211
  * Parseia a #TAG de modo de conducao.
@@ -318,10 +313,11 @@ function fasePausa(modo, fase) {
318
313
  }
319
314
  /** Tabela dos modos VIVOS em texto, usada por `ork modos`. O numero vem da lista. */
320
315
  function tabelaDeModos() {
316
+ const m = (0, locale_1.msg)().operacao.modos;
321
317
  const linhas = [];
322
- linhas.push('Modos de conducao (a #TAG vai no proprio pedido ao orquestrador)');
318
+ linhas.push(m.titulo);
323
319
  linhas.push('');
324
- const cab = ['#TAG'.padEnd(10), 'BLOCOS'.padEnd(6), 'PAUSAS'.padEnd(7), 'CICLO'];
320
+ const cab = [m.cabecalho[0].padEnd(10), m.cabecalho[1].padEnd(6), m.cabecalho[2].padEnd(7), m.cabecalho[3]];
325
321
  linhas.push(' ' + cab.join(' '));
326
322
  linhas.push(' ' + '-'.repeat(78));
327
323
  for (const modo of exports.ORDEM_DOS_MODOS) {
@@ -338,19 +334,19 @@ function tabelaDeModos() {
338
334
  ].join(' '));
339
335
  }
340
336
  linhas.push(' ' + '-'.repeat(78));
341
- linhas.push(' * = bloco que pausa e espera veredito humano');
337
+ linhas.push(` ${m.marcaDaPausa}`);
342
338
  linhas.push('');
343
- linhas.push('Detalhe por modo:');
339
+ linhas.push(m.detalhe);
344
340
  for (const modo of exports.ORDEM_DOS_MODOS) {
345
341
  const def = exports.MODOS[modo];
346
- const pausas = def.blocos.filter((b) => b.pausa).map((b) => b.pausaSobre);
347
- linhas.push(` ${def.tag.padEnd(10)} slug das sessoes: ${def.blocos.map((b) => b.slugFases).join(', ')}`);
348
- linhas.push(` pausas: ${pausas.length > 0 ? pausas.join(', ') : 'nenhuma'}`);
349
- linhas.push(` uso: ${def.recomendadoPara}`);
342
+ const pausas = def.blocos.filter((b) => b.pausa).map((b) => m.pausaSobre[b.pausaSobre] ?? b.pausaSobre);
343
+ linhas.push(` ${def.tag.padEnd(10)} ${m.slug}: ${def.blocos.map((b) => b.slugFases).join(', ')}`);
344
+ linhas.push(` ${m.pausas}: ${pausas.length > 0 ? pausas.join(', ') : m.nenhuma}`);
345
+ linhas.push(` ${m.uso}: ${m.recomendado[modo] ?? def.recomendadoPara}`);
350
346
  }
351
347
  linhas.push('');
352
- linhas.push('REGRA CENTRAL: o modo afrouxa a pausa, NUNCA a verificacao.');
353
- for (const inv of exports.INVARIANTES)
348
+ linhas.push(m.regra);
349
+ for (const inv of (0, locale_1.msg)().prompts.invariantes)
354
350
  linhas.push(' - ' + inv);
355
351
  return linhas.join('\n');
356
352
  }