@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/sessoes.js CHANGED
@@ -54,24 +54,26 @@ const util_1 = require("./util");
54
54
  const estado_thread_1 = require("./estado-thread");
55
55
  const ledger_1 = require("./ledger");
56
56
  const thread_1 = require("./thread");
57
+ const locale_1 = require("./locale");
57
58
  function textoDoInventario(r) {
59
+ const m = (0, locale_1.msg)().operacao.restante.sessions.inventario;
58
60
  const linhas = [
59
- `Inventário ${r.escopo.global ? 'global' : 'do projeto'} da conta ${r.escopo.usuario}; histórico: ${r.escopo.historico ? 'incluído' : 'omitido'}.`,
60
- `Fontes: ${r.fontes.map(f => `${f.origem} (${f.ausente ? 'ausente' : f.ok ? 'ok' : 'FALHA'})`).join('; ')}`,
61
- `Total: ${r.total}; sem thread: ${r.semThread}; ambíguas: ${r.ambiguas}; fantasmas: ${r.fantasmas}; consulta: ${r.ok ? 'válida' : 'INCOMPLETA'}.`,
61
+ m.abertura(r.escopo.global, r.escopo.usuario, r.escopo.historico),
62
+ m.fontes(r.fontes.map(f => `${f.origem} (${f.ausente ? m.fonteEstado.ausente : f.ok ? m.fonteEstado.ok : m.fonteEstado.falha})`).join('; ')),
63
+ m.resumo(r.total, r.semThread, r.ambiguas, r.fantasmas, r.ok),
62
64
  ];
63
65
  // RM-056 (D4): a coluna PERFIL e o id do perfil (`processo` sem perfil), nunca o diretorio da conta.
64
66
  if (r.sessoes.length)
65
- linhas.push((0, util_1.tabela)(['ID', 'RUNTIME', 'PERFIL', 'ESTADO', 'THREAD/FASE'], r.sessoes.map(s => [s.sessionId, s.runtime, s.perfil ?? 'processo',
66
- `${s.state ?? s.status ?? 'unknown'}${s.fantasma ? ' (fantasma)' : ''}`,
67
- s.vinculos.map(v => `${v.thread}/${v.fase}`).join(', ') || '(fora do ork)'])));
67
+ linhas.push((0, util_1.tabela)([...m.colunas], r.sessoes.map(s => [s.sessionId, s.runtime, s.perfil ?? m.processo,
68
+ `${s.state ?? s.status ?? m.desconhecido}${s.fantasma ? ` (${m.fantasma})` : ''}`,
69
+ s.vinculos.map(v => `${v.thread}/${v.fase}`).join(', ') || m.fora])));
68
70
  if (r.fantasmas > 0)
69
- linhas.push('Fantasma: registro sem processo vivo, não ocupa vaga; `ork sessions limpar-fantasmas` solta o vínculo do ork sem tocar no runtime.');
71
+ linhas.push(m.explicacaoFantasma);
70
72
  for (const f of r.fontes.filter(f => !f.ok))
71
- linhas.push(`Falha: ${f.detalhe}`);
73
+ linhas.push(m.falha(f.detalhe));
72
74
  // Fatia 2 do ensaio da 0.5.0 (P1): a fonte ausente nao e falha, mas diz o que falta e como ter.
73
75
  for (const f of r.fontes.filter(f => f.ausente))
74
- linhas.push(`Ausente: ${f.detalhe}${f.correcao ? `; correção: ${f.correcao}` : ''}`);
76
+ linhas.push(m.ausente(f.detalhe, f.correcao ?? null));
75
77
  return linhas.join('\n');
76
78
  }
77
79
  function tabelaDeSessoes(raiz, todas = false) {
@@ -83,6 +85,7 @@ function tabelaDeSessoes(raiz, todas = false) {
83
85
  * viva). So uma conta pode responder; duas viram recusa, nenhuma mantem a mensagem de antes.
84
86
  */
85
87
  function localizarSessao(chave, raiz) {
88
+ const m = (0, locale_1.msg)().operacao.restante.sessions.localizar;
86
89
  let perfis = [];
87
90
  const falhas = [];
88
91
  if (raiz) {
@@ -99,10 +102,9 @@ function localizarSessao(chave, raiz) {
99
102
  return { achada: r.achadas[0] };
100
103
  if (r.achadas.length > 1) {
101
104
  const contas = r.achadas.map(a => `${a.perfil?.id ?? 'processo'} (${a.sessao.sessionId})`).join(', ');
102
- return { texto: `sessao "${chave}" encontrada em mais de uma conta: ${contas}; use o id completo`, codigo: 1 };
105
+ return { texto: m.ambigua(chave, contas), codigo: 1 };
103
106
  }
104
- return { texto: `sessao "${chave}" nao encontrada no runtime` + (falhas.length ? `; contas sem resposta: ${falhas.join('; ')}` : ''),
105
- codigo: 1 };
107
+ return { texto: m.ausente(chave, falhas.join('; ')), codigo: 1 };
106
108
  }
107
109
  /** Logs de uma sessao pelo id curto, id completo ou nome, lidos na conta onde ela esta. */
108
110
  function logsDaSessao(chave, linhas, raiz) {
@@ -120,7 +122,7 @@ function pararSessao(chave, raiz) {
120
122
  return l;
121
123
  const { sessao, perfil, ambiente } = l.achada;
122
124
  const r = adapter.pararAchada(sessao, ambiente);
123
- return { texto: r.texto || `sessao ${sessao.sessionId} parada${perfil ? ` (perfil ${perfil.id})` : ''}`, codigo: r.ok ? 0 : 1 };
125
+ return { texto: r.texto || (0, locale_1.msg)().operacao.restante.sessions.localizar.parada(sessao.sessionId, perfil?.id ?? null), codigo: r.ok ? 0 : 1 };
124
126
  }
125
127
  /** Comando de attach (precisa de TTY, entao o CLI imprime em vez de executar). */
126
128
  function comandoDeAttach(chave, raiz) {
@@ -138,9 +140,9 @@ const ENCERRAM_A_SESSAO = ['phase_result', 'sessao_morta', 'session_superseded']
138
140
  */
139
141
  function limparFantasmas(raiz, opcoes = {}) {
140
142
  const canonica = (0, estado_thread_1.raizDoEstado)(raiz);
141
- const inv = (0, sessoes_inventario_1.inventariarSessoes)(canonica, { global: true });
143
+ const inv = opcoes.inventario ?? (0, sessoes_inventario_1.inventariarSessoes)(canonica, { global: true });
142
144
  const itens = [];
143
- for (const s of inv.sessoes.filter(x => x.fantasma)) {
145
+ for (const s of inv.sessoes.filter(x => x.fantasma && (!opcoes.sessoes || opcoes.sessoes.includes(x.sessionId)))) {
144
146
  // Fechamento (RM-056, ao fechar): so os vinculos da thread que fecha; o resto fica como estava.
145
147
  const vinculos = opcoes.thread ? s.vinculos.filter(v => v.thread === opcoes.thread && v.raiz === canonica) : s.vinculos;
146
148
  if (opcoes.thread && vinculos.length === 0)
@@ -186,18 +188,18 @@ function sessoesSemFim(raiz, threadId) {
186
188
  return [...new Set(ids)].filter(id => !encerradas.has(id));
187
189
  }
188
190
  function textoDaLimpeza(r) {
191
+ const m = (0, locale_1.msg)().operacao.restante.sessions.limpeza;
189
192
  if (r.itens.length === 0)
190
- return `Nenhuma sessão fantasma${r.ok ? '' : ' nas contas que responderam'}.` +
191
- r.falhas.map(f => `\nFalha: ${f}`).join('');
193
+ return m.nenhuma(!r.ok) + r.falhas.map(f => `\n${m.falha(f)}`).join('');
192
194
  const verbo = {
193
- solto: r.dryRun ? 'soltaria (sessao_morta no ledger)' : 'solto: sessao_morta no ledger',
194
- 'ja-solto': 'já encerrada no ledger', 'sem-thread': 'fora do ork: nada a soltar',
195
- 'outro-projeto': 'vínculo de outro projeto: rode lá',
195
+ solto: r.dryRun ? m.acoes.soltaria : m.acoes.solto,
196
+ 'ja-solto': m.acoes.jaSolto, 'sem-thread': m.acoes.semThread,
197
+ 'outro-projeto': m.acoes.outroProjeto,
196
198
  };
197
199
  return [
198
- `Sessões fantasma (sem pid e sem processo)${r.dryRun ? ', ensaio: nada foi gravado' : ''}. O runtime não foi tocado.`,
199
- (0, util_1.tabela)(['ID', 'PERFIL', 'THREAD/FASE', 'AÇÃO'], r.itens.map(i => [i.sessionId, i.perfil ?? 'processo',
200
+ m.abertura(r.dryRun),
201
+ (0, util_1.tabela)([...m.colunas], r.itens.map(i => [i.sessionId, i.perfil ?? m.processo,
200
202
  i.thread ? `${i.thread}/${i.fase}` : '-', verbo[i.acao]])),
201
- ...r.falhas.map(f => `Falha: ${f}`),
203
+ ...r.falhas.map(f => m.falha(f)),
202
204
  ].join('\n');
203
205
  }
package/dist/setup.js CHANGED
@@ -90,6 +90,7 @@ const manifest_1 = require("./manifest");
90
90
  const modos_1 = require("./modos");
91
91
  const runtimes_1 = require("./runtimes");
92
92
  const util_1 = require("./util");
93
+ const locale_1 = require("./locale");
93
94
  exports.CONTRATO_DO_SETUP = 'ork.setup/v1';
94
95
  exports.NOME_SETUP = 'setup.json';
95
96
  /** I-52: o setup versionado, ao lado do `orkastery.yaml`. */
@@ -99,14 +100,14 @@ const MAX_INSTANTE_MS = 8_640_000_000_000_000;
99
100
  const CAMPOS_LIMITES = ['duracaoMs', 'maxChildren', 'maxDepth', 'maxRetries'];
100
101
  function objeto(valor, campo) {
101
102
  if (!valor || typeof valor !== 'object' || Array.isArray(valor)) {
102
- throw new Error(`${campo} deve ser objeto`);
103
+ throw new Error((0, locale_1.msg)().setup.objeto(campo));
103
104
  }
104
105
  return valor;
105
106
  }
106
107
  function camposExatos(valor, campos, campo) {
107
108
  if (Object.keys(valor).length !== campos.length ||
108
109
  campos.some(c => !Object.hasOwn(valor, c))) {
109
- throw new Error(`${campo} deve conter somente ${campos.join(', ')}`);
110
+ throw new Error((0, locale_1.msg)().setup.camposExatos(campo, campos.join(', ')));
110
111
  }
111
112
  }
112
113
  const ENTRADA_DE_FALLBACK = /^([a-z][a-z0-9-]*):([^\s:]+)(?::([a-z]+))?$/;
@@ -116,11 +117,11 @@ function validarFallback(lista, principal) {
116
117
  return lista.map((item) => {
117
118
  const m = ENTRADA_DE_FALLBACK.exec(item.trim());
118
119
  if (!m)
119
- throw new Error(`fallback invalido: "${item}" (use runtime:modelo[:esforco], por exemplo codex:gpt-5.5)`);
120
+ throw new Error((0, locale_1.msg)().setup.fallbackInvalido(item));
120
121
  if (!(0, runtimes_1.runtimeConhecido)(m[1]))
121
- throw new Error(`fallback com runtime desconhecido: "${m[1]}" (homologados: ${runtimes_1.ORDEM_DOS_RUNTIMES.join(', ')})`);
122
+ throw new Error((0, locale_1.msg)().setup.fallbackDesconhecido(m[1], runtimes_1.ORDEM_DOS_RUNTIMES.join(', ')));
122
123
  if (vistos.has(m[1]))
123
- throw new Error(`fallback repete o runtime ${m[1]} (o runtime do bloco e cada fallback aparecem uma vez)`);
124
+ throw new Error((0, locale_1.msg)().setup.fallbackRepetido(m[1]));
124
125
  vistos.add(m[1]);
125
126
  return item.trim();
126
127
  });
@@ -164,7 +165,7 @@ function validarLimitesDeBloco(valor) {
164
165
  const n = limites[campo];
165
166
  if (typeof n !== 'number' || !Number.isSafeInteger(n) || n < (campo === 'duracaoMs' ? 1 : 0) ||
166
167
  (campo === 'duracaoMs' && n > MAX_INSTANTE_MS)) {
167
- throw new Error(`limites.${campo} deve ser inteiro ${campo === 'duracaoMs' ? 'positivo' : 'nao negativo'}, finito e representavel`);
168
+ throw new Error((0, locale_1.msg)().setup.limiteInvalido(campo, campo === 'duracaoMs'));
168
169
  }
169
170
  }
170
171
  return {
@@ -179,14 +180,14 @@ function validarConfigComLimites(config) {
179
180
  if (typeof config.runtime !== 'string' || !(0, runtimes_1.runtimeConhecido)(config.runtime) ||
180
181
  typeof config.model !== 'string' || config.model.trim() === '' ||
181
182
  typeof config.effort !== 'string' || config.effort.trim() === '') {
182
- throw new Error('bloco com limites exige runtime conhecido, model e effort explicitos validos');
183
+ throw new Error((0, locale_1.msg)().setup.blocoComLimites);
183
184
  }
184
185
  }
185
186
  /** Valida tambem entradas que a normalizacao antiga descartaria. */
186
187
  function validarEstruturaSetup(valor) {
187
188
  const setup = objeto(valor, 'setup');
188
189
  if (setup.contrato !== undefined && setup.contrato !== exports.CONTRATO_DO_SETUP) {
189
- throw new Error('contrato de setup incompativel');
190
+ throw new Error((0, locale_1.msg)().setup.contratoIncompativel);
190
191
  }
191
192
  if (setup.modos === undefined)
192
193
  return;
@@ -195,13 +196,13 @@ function validarEstruturaSetup(valor) {
195
196
  if (configModo.blocos === undefined)
196
197
  continue;
197
198
  if (!Array.isArray(configModo.blocos))
198
- throw new Error(`blocos de ${modo} devem ser array`);
199
+ throw new Error((0, locale_1.msg)().setup.blocosArray(modo));
199
200
  for (const [i, valorBloco] of configModo.blocos.entries()) {
200
201
  const config = objeto(valorBloco, `bloco ${modo}/${i + 1}`);
201
202
  validarConfigComLimites(config);
202
203
  if (Object.hasOwn(config, 'limites') && (setup.contrato !== exports.CONTRATO_DO_SETUP ||
203
204
  !modos_1.ORDEM_DOS_MODOS.includes(modo) || i >= modos_1.MODOS[modo].blocos.length)) {
204
- throw new Error('limites exigem contrato e bloco de modo conhecidos');
205
+ throw new Error((0, locale_1.msg)().setup.limitesConhecidos);
205
206
  }
206
207
  }
207
208
  }
@@ -273,7 +274,7 @@ function lerSetup(raiz) {
273
274
  bruto = (0, util_1.lerJson)(caminho);
274
275
  }
275
276
  catch (e) {
276
- throw new Error(`setup invalido (${caminho}): ${e.message}`);
277
+ throw new Error((0, locale_1.msg)().setup.setupInvalido(caminho, e.message));
277
278
  }
278
279
  validarEstruturaSetup(bruto);
279
280
  const modosBrutos = (bruto.modos ?? {});
@@ -324,7 +325,7 @@ function gravarSetup(raiz, setup) {
324
325
  function versionarSetup(raiz, por = 'owner') {
325
326
  const caminho = caminhoSetupVersionado(raiz);
326
327
  if (fs.existsSync(caminho))
327
- throw new Error(`setup.versionado: ${exports.NOME_SETUP_VERSIONADO} ja existe neste checkout; edite com ork setup <modo> --bloco N`);
328
+ throw new Error((0, locale_1.msg)().setup.versionadoExiste(exports.NOME_SETUP_VERSIONADO));
328
329
  const origem = origemDoSetup(raiz);
329
330
  const setup = lerSetup(raiz);
330
331
  validarEstruturaSetup(setup);
@@ -358,12 +359,12 @@ function limitesDoBloco(manifesto, setup, modo, fase) {
358
359
  if (!Array.isArray(permitidos) || permitidos.length === 0 ||
359
360
  permitidos.some(m => !modos_1.ORDEM_DOS_MODOS.includes(m)) ||
360
361
  !permitidos.includes(modo)) {
361
- throw new Error('playbook ativo exige modo permitido valido');
362
+ throw new Error((0, locale_1.msg)().setup.playbookModo);
362
363
  }
363
364
  for (const permitido of permitidos) {
364
365
  const blocos = setup.modos?.[permitido]?.blocos;
365
366
  if (!blocos || blocos.length !== modos_1.MODOS[permitido].blocos.length) {
366
- throw new Error(`playbook ativo exige todos os blocos de ${permitido}`);
367
+ throw new Error((0, locale_1.msg)().setup.playbookBlocos(permitido));
367
368
  }
368
369
  for (const config of blocos) {
369
370
  validarConfigComLimites(objeto(config, 'config do bloco'));
@@ -372,12 +373,12 @@ function limitesDoBloco(manifesto, setup, modo, fase) {
372
373
  }
373
374
  const config = configDoBloco(setup, modo, fase);
374
375
  if (!config)
375
- throw new Error(`fase ${fase} fora do modo ${modo}`);
376
+ throw new Error((0, locale_1.msg)().setup.faseFora(fase, modo));
376
377
  return validarLimitesDeBloco(config.limites);
377
378
  }
378
379
  function instante(valor, campo) {
379
380
  if (typeof valor !== 'number' || !Number.isSafeInteger(valor) || valor < 0 || valor > MAX_INSTANTE_MS) {
380
- throw new Error(`${campo} deve ser instante inteiro nao negativo e representavel`);
381
+ throw new Error((0, locale_1.msg)().setup.instante(campo));
381
382
  }
382
383
  return valor;
383
384
  }
@@ -389,20 +390,20 @@ function validarIdentidade(valor) {
389
390
  camposExatos(id, ['threadId', 'execucaoId', 'modo', 'bloco'], 'identidade');
390
391
  for (const campo of ['threadId', 'execucaoId']) {
391
392
  if (typeof id[campo] !== 'string' || id[campo].trim() === '') {
392
- throw new Error(`identidade.${campo} deve ser texto nao vazio`);
393
+ throw new Error((0, locale_1.msg)().setup.identidadeTexto(campo));
393
394
  }
394
395
  }
395
396
  if (!modos_1.ORDEM_DOS_MODOS.includes(id.modo) ||
396
397
  typeof id.bloco !== 'number' || !Number.isSafeInteger(id.bloco) ||
397
398
  id.bloco < 1 || id.bloco > modos_1.MODOS[id.modo].blocos.length) {
398
- throw new Error('identidade de modo/bloco invalida');
399
+ throw new Error((0, locale_1.msg)().setup.identidadeModo);
399
400
  }
400
401
  return { threadId: id.threadId, execucaoId: id.execucaoId, modo: id.modo, bloco: id.bloco };
401
402
  }
402
403
  function semAmpliacao(limites, origem) {
403
404
  for (const campo of CAMPOS_LIMITES) {
404
405
  if (limites[campo] > origem[campo])
405
- throw new Error(`heranca nao pode ampliar limites.${campo}`);
406
+ throw new Error((0, locale_1.msg)().setup.herancaAmplia(campo));
406
407
  }
407
408
  }
408
409
  /**
@@ -415,7 +416,7 @@ function iniciarPrazoDoBloco(manifesto, setup, identidade, fase, agoraMs) {
415
416
  return null;
416
417
  const id = validarIdentidade(identidade);
417
418
  if (!modos_1.MODOS[id.modo].blocos[id.bloco - 1].fases.includes(fase)) {
418
- throw new Error('identidade do bloco diverge da fase selecionada');
419
+ throw new Error((0, locale_1.msg)().setup.identidadeFase);
419
420
  }
420
421
  const inicio = instante(agoraMs, 'iniciadaEmMs');
421
422
  const deadline = somarPrazo(inicio, limites.duracaoMs);
@@ -429,11 +430,11 @@ function validarPrazo(valor, esperada) {
429
430
  camposExatos(p, ['versao', 'identidade', 'iniciadaEmMs', 'deadlineOriginalMs',
430
431
  'limitesOriginais', 'deadlineMs', 'limites', 'observadoEmMs'], 'prazo');
431
432
  if (p.versao !== 1)
432
- throw new Error('versao de prazo incompativel');
433
+ throw new Error((0, locale_1.msg)().setup.prazoVersao);
433
434
  const identidade = validarIdentidade(p.identidade);
434
435
  const idEsperada = validarIdentidade(esperada);
435
436
  if (Object.keys(identidade).some(c => identidade[c] !== idEsperada[c])) {
436
- throw new Error('identidade da execucao divergente');
437
+ throw new Error((0, locale_1.msg)().setup.identidadeDivergente);
437
438
  }
438
439
  const limitesOriginais = validarLimitesDeBloco(p.limitesOriginais);
439
440
  const limites = validarLimitesDeBloco(p.limites);
@@ -444,7 +445,7 @@ function validarPrazo(valor, esperada) {
444
445
  const deadlineMs = instante(p.deadlineMs, 'deadlineMs');
445
446
  if (deadlineOriginalMs !== somarPrazo(iniciadaEmMs, limitesOriginais.duracaoMs) ||
446
447
  deadlineMs !== somarPrazo(iniciadaEmMs, limites.duracaoMs) || observadoEmMs < iniciadaEmMs) {
447
- throw new Error('origem/deadline do prazo inconsistente');
448
+ throw new Error((0, locale_1.msg)().setup.prazoInconsistente);
448
449
  }
449
450
  return { versao: 1, identidade, iniciadaEmMs, deadlineOriginalMs, limitesOriginais, deadlineMs, limites, observadoEmMs };
450
451
  }
@@ -457,7 +458,7 @@ function consumirPrazoDoBloco(snapshot, identidadeEsperada, agoraMs, atividade =
457
458
  const prazo = validarPrazo(snapshot, identidadeEsperada);
458
459
  const agoraValidado = instante(agoraMs, 'agoraMs');
459
460
  if (agoraValidado < prazo.observadoEmMs)
460
- throw new Error('relogio regressivo no prazo');
461
+ throw new Error((0, locale_1.msg)().setup.relogioRegressivo);
461
462
  const a = objeto(atividade, 'atividade');
462
463
  if (a.tipo === 'trabalho') {
463
464
  camposExatos(a, ['tipo'], 'atividade');
@@ -465,10 +466,10 @@ function consumirPrazoDoBloco(snapshot, identidadeEsperada, agoraMs, atividade =
465
466
  else if (a.tipo === 'espera_lease' || a.tipo === 'espera_score') {
466
467
  camposExatos(a, ['tipo', 'processosAtivos'], 'atividade');
467
468
  if (a.processosAtivos !== 0)
468
- throw new Error('espera exige ausencia comprovada de processos ativos');
469
+ throw new Error((0, locale_1.msg)().setup.esperaComProcesso);
469
470
  }
470
471
  else {
471
- throw new Error('atividade de prazo desconhecida');
472
+ throw new Error((0, locale_1.msg)().setup.atividadeDesconhecida);
472
473
  }
473
474
  prazo.observadoEmMs = agoraValidado;
474
475
  const restanteMs = Math.max(0, prazo.deadlineMs - agoraValidado);
@@ -481,13 +482,13 @@ function consumirPrazoDoBloco(snapshot, identidadeEsperada, agoraMs, atividade =
481
482
  function herdarPrazoDoBloco(origem, identidadeEsperada, agoraMs, limitesSolicitados) {
482
483
  const consumo = consumirPrazoDoBloco(origem, identidadeEsperada, agoraMs);
483
484
  if (consumo.estado !== 'ativo')
484
- throw new Error('prazo expirado: heranca recusada');
485
+ throw new Error((0, locale_1.msg)().setup.prazoExpirado);
485
486
  const prazo = consumo.prazo;
486
487
  const limites = validarLimitesDeBloco(limitesSolicitados === undefined ? prazo.limites : limitesSolicitados);
487
488
  semAmpliacao(limites, prazo.limites);
488
489
  const deadlineMs = somarPrazo(prazo.iniciadaEmMs, limites.duracaoMs);
489
490
  if (deadlineMs <= agoraMs)
490
- throw new Error('prazo reduzido ja expirado');
491
+ throw new Error((0, locale_1.msg)().setup.prazoReduzido);
491
492
  return { ...prazo, limites, deadlineMs };
492
493
  }
493
494
  /** A config do bloco e o default pos-instalacao? */
@@ -525,20 +526,20 @@ function editarBloco(raiz, modo, bloco, edicao, por = 'owner') {
525
526
  if (!Number.isInteger(bloco) || bloco < 1 || bloco > def.blocos.length) {
526
527
  return {
527
528
  ...base,
528
- erro: `bloco ${bloco} nao existe no modo ${def.tag}: ele tem ${def.blocos.length} bloco(s)`,
529
+ erro: (0, locale_1.msg)().setup.blocoInexistente(bloco, def.tag, def.blocos.length),
529
530
  };
530
531
  }
531
532
  if (edicao.runtime !== undefined && !(0, runtimes_1.runtimeConhecido)(edicao.runtime)) {
532
533
  return {
533
534
  ...base,
534
- erro: `runtime desconhecido: "${edicao.runtime}" (homologados: ${runtimes_1.ORDEM_DOS_RUNTIMES.join(', ')})`,
535
+ erro: (0, locale_1.msg)().setup.runtimeDesconhecido(edicao.runtime, runtimes_1.ORDEM_DOS_RUNTIMES.join(', ')),
535
536
  };
536
537
  }
537
538
  const atual = setup.modos[modo].blocos[bloco - 1];
538
539
  if (edicao.runtime !== undefined && edicao.runtime !== atual.runtime && !edicao.model?.trim())
539
- return { ...base, erro: 'setup.model.required: para mudar o runtime do bloco, informe --runtime e --model juntos; nenhuma configuracao foi gravada.' };
540
+ return { ...base, erro: (0, locale_1.msg)().setup.modeloComRuntime };
540
541
  if (!(edicao.model ?? atual.model).trim())
541
- return { ...base, erro: 'setup.model.required: modelo pendente neste bloco; informe --model antes de salvar.' };
542
+ return { ...base, erro: (0, locale_1.msg)().setup.modeloPendente };
542
543
  const de = { ...atual };
543
544
  const runtimeNovo = edicao.runtime ?? atual.runtime;
544
545
  let fallback;
@@ -613,15 +614,15 @@ function registrarSetupNoLedger(raiz, dados) {
613
614
  function linhaDaOrigemDoSetup(raiz) {
614
615
  const origem = origemDoSetup(raiz);
615
616
  if (origem === 'versionado') {
616
- return `Setup versionado em ${exports.NOME_SETUP_VERSIONADO}: vale para todas as maquinas e muda por PR.` +
617
- (fs.existsSync(caminhoSetupLocal(raiz)) ? ' O .orkastery/setup.json local desta maquina fica ignorado.' : '');
617
+ return (0, locale_1.msg)().setup.origem.versionado(exports.NOME_SETUP_VERSIONADO, fs.existsSync(caminhoSetupLocal(raiz)));
618
618
  }
619
619
  if (origem === 'local')
620
- return 'Setup local desta maquina (.orkastery/setup.json). Para valer em todas: ork setup versionar.';
621
- return 'Nenhum setup gravado: vale o default. Para valer em todas as maquinas: ork setup versionar.';
620
+ return (0, locale_1.msg)().setup.origem.local;
621
+ return (0, locale_1.msg)().setup.origem.padrao;
622
622
  }
623
623
  /** Tabela de um modo: cada bloco com sua config e a marca do que saiu do default. */
624
624
  function textoDoSetup(raiz, modo) {
625
+ const m = (0, locale_1.msg)().setup.tabela;
625
626
  const def = (0, modos_1.definicaoDoModo)(modo);
626
627
  const setup = lerSetup(raiz);
627
628
  const linhas = def.blocos.map((b, i) => {
@@ -630,22 +631,22 @@ function textoDoSetup(raiz, modo) {
630
631
  String(i + 1),
631
632
  b.fases.join('-'),
632
633
  cfg.runtime,
633
- cfg.model || '(modelo pendente)',
634
+ cfg.model || m.modeloPendente,
634
635
  cfg.effort,
635
636
  cfg.fallback?.join(', ') || '-',
636
- ehPadrao(cfg, modo) ? 'default' : 'customizado',
637
+ ehPadrao(cfg, modo) ? m.default : m.customizado,
637
638
  ];
638
639
  });
639
640
  const saida = [];
640
- saida.push(`Setup do modo ${def.tag} (${def.blocos.length} bloco(s), ${def.pausas} pausa(s))`);
641
+ saida.push(m.titulo(def.tag, def.blocos.length, def.pausas));
641
642
  saida.push('');
642
- saida.push((0, util_1.tabela)(['BLOCO', 'FASES', 'RUNTIME', 'MODEL', 'EFFORT', 'FALLBACK', 'ORIGEM'], linhas));
643
+ saida.push((0, util_1.tabela)([...m.cabecalho], linhas));
643
644
  saida.push('');
644
- saida.push(`Editar: ork setup ${modo} --bloco N --runtime R --model M --effort E`);
645
- saida.push(`Fallback: ork setup ${modo} --bloco N --fallback runtime:modelo[:esforco],... (--fallback "" remove)`);
645
+ saida.push(m.editar(modo));
646
+ saida.push(m.fallback(modo));
646
647
  const padrao = blocoPadraoDoModo(modo);
647
- saida.push(`Resetar: ork setup ${modo} --reset (volta para ${padrao.runtime}/${padrao.model}/${padrao.effort})`);
648
- saida.push(`Runtimes homologados: ${runtimes_1.ORDEM_DOS_RUNTIMES.join(', ')}`);
648
+ saida.push(m.resetar(modo, `${padrao.runtime}/${padrao.model}/${padrao.effort}`));
649
+ saida.push(m.runtimes(runtimes_1.ORDEM_DOS_RUNTIMES.join(', ')));
649
650
  saida.push('');
650
651
  saida.push(linhaDaOrigemDoSetup(raiz));
651
652
  return saida.join('\n');
@@ -658,33 +659,33 @@ function textoDoSetup(raiz, modo) {
658
659
  * o owner disser que concluiu, e todo bloco nao respondido fica no default.
659
660
  */
660
661
  function textoDaEntrevista(raiz) {
662
+ const m = (0, locale_1.msg)().setup.entrevista;
661
663
  const setup = lerSetup(raiz);
662
664
  const saida = [];
663
- saida.push('Entrevista #setup: runtime + modelo + esforco por bloco de cada modo');
665
+ saida.push(m.titulo);
664
666
  saida.push('');
665
- saida.push(`Ordem das perguntas: ${modos_1.ORDEM_DOS_MODOS.map((m) => modos_1.MODOS[m].tag).join(' -> ')}.`);
666
- saida.push('A entrevista termina quando todos os modos forem cobertos OU quando o owner');
667
- saida.push('disser que concluiu: o que nao for respondido fica no default.');
667
+ saida.push(m.ordem(modos_1.ORDEM_DOS_MODOS.map((modo) => modos_1.MODOS[modo].tag).join(' -> ')));
668
+ saida.push(m.termina1);
669
+ saida.push(m.termina2);
668
670
  const proprios = modos_1.ORDEM_DOS_MODOS.filter((m) => !ehPadrao(blocoPadraoDoModo(m)));
669
- saida.push(`Default pos-instalacao: ${exports.BLOCO_PADRAO.runtime}/${exports.BLOCO_PADRAO.model}/${exports.BLOCO_PADRAO.effort} em todos os blocos` +
670
- (proprios.length ? `, menos ${proprios.map((m) => {
671
- const b = blocoPadraoDoModo(m);
672
- return `${modos_1.MODOS[m].tag} (${b.runtime}/${b.model}/${b.effort}${b.fallback?.length ? `, fallback ${b.fallback.join(', ')}` : ''})`;
673
- }).join(', ')}.` : '.'));
671
+ saida.push(m.default(`${exports.BLOCO_PADRAO.runtime}/${exports.BLOCO_PADRAO.model}/${exports.BLOCO_PADRAO.effort}`, proprios.length ? m.excecoes(proprios.map((modo) => {
672
+ const b = blocoPadraoDoModo(modo);
673
+ return `${modos_1.MODOS[modo].tag} (${b.runtime}/${b.model}/${b.effort}${b.fallback?.length ? `, fallback ${b.fallback.join(', ')}` : ''})`;
674
+ }).join(', ')) : '.'));
674
675
  saida.push('');
675
676
  for (const modo of modos_1.ORDEM_DOS_MODOS) {
676
677
  const def = modos_1.MODOS[modo];
677
678
  saida.push(`${def.tag}`);
678
679
  def.blocos.forEach((b, i) => {
679
680
  const cfg = setup.modos[modo].blocos[i];
680
- const marca = ehPadrao(cfg, modo) ? '' : ' <- customizado';
681
- saida.push(` bloco ${i + 1}: ${b.fases.join('-')} [${cfg.runtime}/${cfg.model || '(modelo pendente)'}/${cfg.effort}]${marca}`);
681
+ const marca = ehPadrao(cfg, modo) ? '' : m.customizado;
682
+ saida.push(m.bloco(i + 1, b.fases.join('-'), `${cfg.runtime}/${cfg.model || m.modeloPendente}/${cfg.effort}`, marca));
682
683
  });
683
684
  }
684
685
  saida.push('');
685
- saida.push('Ver um modo: ork setup <modo>');
686
- saida.push('Editar bloco: ork setup <modo> --bloco N --runtime R --model M --effort E');
687
- saida.push('Resetar tudo: ork setup --reset');
686
+ saida.push(m.ver);
687
+ saida.push(m.editar);
688
+ saida.push(m.resetar);
688
689
  saida.push('');
689
690
  saida.push(linhaDaOrigemDoSetup(raiz));
690
691
  return saida.join('\n');