@orkastery/cli 0.5.6 → 0.6.1

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 (396) hide show
  1. package/adapters/README.md +18 -0
  2. package/adapters/claude-code/.claude-plugin/plugin.json +1 -0
  3. package/adapters/claude-code/README.md +37 -5
  4. package/adapters/claude-code/agents/ork-check.md +1 -0
  5. package/adapters/claude-code/agents/ork-go.md +1 -0
  6. package/adapters/claude-code/agents/ork-goal.md +1 -0
  7. package/adapters/claude-code/agents/ork-master.md +1 -0
  8. package/adapters/claude-code/agents/ork-plan.md +1 -0
  9. package/adapters/claude-code/agents/ork-ship.md +1 -0
  10. package/adapters/claude-code/hooks/hooks.json +2 -1
  11. package/adapters/claude-code/hooks/ork-guard.js +15 -1
  12. package/adapters/claude-code/hooks/ork-resposta.js +91 -0
  13. package/adapters/claude-code/hooks/ork-sensor.js +18 -2
  14. package/adapters/claude-code/hooks/quota-signal.js +14 -0
  15. package/adapters/claude-code/mods/ork-mensageiro/.claude-plugin/plugin.json +14 -0
  16. package/adapters/claude-code/mods/ork-mensageiro/hooks/caixa.ts +215 -0
  17. package/adapters/claude-code/mods/ork-mensageiro/hooks/hooks.json +3 -0
  18. package/adapters/claude-code/mods/ork-mensageiro/hooks/painel.tsx +165 -0
  19. package/adapters/claude-code/mods/ork-mensageiro/hooks/recepcao.ts +256 -0
  20. package/adapters/claude-code/mods/ork-mensageiro/hooks/register.tsx +481 -0
  21. package/adapters/claude-code/mods/ork-mensageiro/orkastery-mod.json +5 -0
  22. package/adapters/claude-code/mods/ork-mensageiro/types/index.d.ts +85 -0
  23. package/adapters/claude-code/mods/ork-pista/hooks/ci.ts +9 -5
  24. package/adapters/claude-code/mods/ork-ritual/.claude-plugin/plugin.json +14 -0
  25. package/adapters/claude-code/mods/ork-ritual/hooks/hooks.json +3 -0
  26. package/adapters/claude-code/mods/ork-ritual/hooks/nota.ts +88 -0
  27. package/adapters/claude-code/mods/ork-ritual/hooks/register.tsx +494 -0
  28. package/adapters/claude-code/mods/ork-ritual/hooks/replay.tsx +271 -0
  29. package/adapters/claude-code/mods/ork-ritual/hooks/ritual.ts +218 -0
  30. package/adapters/claude-code/mods/ork-ritual/orkastery-mod.json +5 -0
  31. package/adapters/claude-code/mods/ork-ritual/types/index.d.ts +106 -0
  32. package/adapters/claude-code/mods/ork-sentinela/hooks/vigia.ts +1 -1
  33. package/adapters/codex/skills/ork/SKILL.md +2 -0
  34. package/adapters/hermes/README.md +64 -1
  35. package/adapters/hermes/bin/ork-conhecimento-colecoes.sh +14 -0
  36. package/adapters/hermes/bin/ork-conhecimento-listar.sh +15 -0
  37. package/adapters/hermes/bin/ork-conhecimento-mostrar.sh +16 -0
  38. package/adapters/hermes/bin/ork-conhecimento-verificar.sh +15 -0
  39. package/adapters/hermes/bin/ork-vigia-batida.py +127 -0
  40. package/adapters/hermes/hermes.plugin.json +4 -0
  41. package/adapters/hermes/hitl-ingress/__init__.py +101 -8
  42. package/adapters/hermes/skills/orkastery-devmaster/SKILL.md +2 -2
  43. package/adapters/openclaw/README.md +81 -9
  44. package/adapters/openclaw/bin/ork-vigia-batida.js +86 -0
  45. package/adapters/openclaw/dist/hitl-ingress.js +106 -9
  46. package/adapters/openclaw/dist/index.js +86 -0
  47. package/adapters/openclaw/openclaw.plugin.json +34 -4
  48. package/adapters/openclaw/package.json +2 -2
  49. package/adapters/openclaw/src/hitl-ingress.ts +103 -9
  50. package/adapters/openclaw/src/index.ts +94 -0
  51. package/assets/adapters-en/claude-code/README.md +403 -0
  52. package/assets/adapters-en/claude-code/agents/ork-check.md +33 -0
  53. package/assets/adapters-en/claude-code/agents/ork-go.md +33 -0
  54. package/assets/adapters-en/claude-code/agents/ork-goal.md +34 -0
  55. package/assets/adapters-en/claude-code/agents/ork-master.md +35 -0
  56. package/assets/adapters-en/claude-code/agents/ork-plan.md +33 -0
  57. package/assets/adapters-en/claude-code/agents/ork-ship.md +33 -0
  58. package/assets/adapters-en/claude-code/commands/check.md +46 -0
  59. package/assets/adapters-en/claude-code/commands/go.md +46 -0
  60. package/assets/adapters-en/claude-code/commands/goal.md +55 -0
  61. package/assets/adapters-en/claude-code/commands/master.md +54 -0
  62. package/assets/adapters-en/claude-code/commands/onboarding.md +22 -0
  63. package/assets/adapters-en/claude-code/commands/ork.md +126 -0
  64. package/assets/adapters-en/claude-code/commands/plan.md +47 -0
  65. package/assets/adapters-en/claude-code/commands/ship.md +45 -0
  66. package/assets/adapters-en/codex/skills/ork/SKILL.md +85 -0
  67. package/assets/adapters-en/hermes/README.md +273 -0
  68. package/assets/adapters-en/hermes/skills/orkastery-devmaster/SKILL.md +169 -0
  69. package/assets/references-en/README.md +25 -0
  70. package/assets/references-en/code-review-axes.md +82 -0
  71. package/assets/references-en/definition-of-done.md +74 -0
  72. package/assets/references-en/performance-checklist.md +53 -0
  73. package/assets/references-en/security-checklist.md +101 -0
  74. package/assets/references-en/testing-patterns.md +51 -0
  75. package/assets/security-scan/defaults/.golangci.yml +2 -0
  76. package/assets/security-scan/defaults/eslint.config.mjs +11 -0
  77. package/assets/security-scan/defaults/gitleaks.toml +3 -0
  78. package/assets/security-scan/defaults/ruff.toml +1 -0
  79. package/assets/security-scan/tools-agil.json +87 -0
  80. package/assets/security-scan/tools.json +625 -0
  81. package/assets/skills-en/core/onboarding/SKILL.md +58 -0
  82. package/assets/skills-en/core/orkastery-bootstrap/SKILL.md +119 -0
  83. package/assets/skills-en/core/thread-state/SKILL.md +88 -0
  84. package/assets/skills-en/governance/decision-triage/SKILL.md +65 -0
  85. package/assets/skills-en/governance/narrative-guardian/SKILL.md +66 -0
  86. package/assets/skills-en/governance/roadmap-keeper/SKILL.md +60 -0
  87. package/assets/skills-en/governance/scope-check-capability-map/SKILL.md +71 -0
  88. package/assets/skills-en/observability/thread-tracing/SKILL.md +63 -0
  89. package/assets/skills-en/phases/check-quality/SKILL.md +103 -0
  90. package/assets/skills-en/phases/go-implementation/SKILL.md +78 -0
  91. package/assets/skills-en/phases/goal-definition/SKILL.md +69 -0
  92. package/assets/skills-en/phases/master-metrics/SKILL.md +72 -0
  93. package/assets/skills-en/phases/plan-specification/SKILL.md +67 -0
  94. package/assets/skills-en/phases/security-remediation/SKILL.md +70 -0
  95. package/assets/skills-en/phases/ship-release/SKILL.md +71 -0
  96. package/assets/skills-en/reviewers/code-reviewer/SKILL.md +61 -0
  97. package/assets/skills-en/reviewers/security-auditor/SKILL.md +93 -0
  98. package/assets/skills-en/reviewers/test-engineer/SKILL.md +66 -0
  99. package/assets/skills-en/reviewers/web-performance-auditor/SKILL.md +63 -0
  100. package/dist/adapters/claude-bg.js +123 -9
  101. package/dist/adapters/codex-controller-worker.js +12 -5
  102. package/dist/adapters/codex-events.js +16 -4
  103. package/dist/adapters/codex.js +3 -1
  104. package/dist/adapters/grok-events.js +227 -0
  105. package/dist/adapters/grok-mcp-servidor.js +612 -0
  106. package/dist/adapters/grok-mcp.js +178 -0
  107. package/dist/adapters/grok.js +686 -0
  108. package/dist/agendador-cpu.js +92 -0
  109. package/dist/atualizar-branch.js +245 -0
  110. package/dist/auditoria.js +13 -11
  111. package/dist/auditrun.js +51 -46
  112. package/dist/autorizacao-duravel.js +327 -0
  113. package/dist/board.js +94 -40
  114. package/dist/branch-de-estado.js +23 -10
  115. package/dist/busca-semantica.js +7 -5
  116. package/dist/catalogo.js +2 -1
  117. package/dist/changelog-reconciliacao.js +290 -0
  118. package/dist/check-agil.js +528 -0
  119. package/dist/check-modo.js +41 -0
  120. package/dist/check-paralelo.js +238 -0
  121. package/dist/ci.js +248 -45
  122. package/dist/ciclos.js +8 -6
  123. package/dist/claim-lint.js +12 -8
  124. package/dist/claims-conferir.js +47 -39
  125. package/dist/claims.js +10 -9
  126. package/dist/company-brain-client.js +10 -3
  127. package/dist/company-brain-migration.js +11 -5
  128. package/dist/conducao-batida.js +759 -0
  129. package/dist/conducao-sentinela.js +25 -8
  130. package/dist/conducao.js +89 -29
  131. package/dist/conhecimento-consulta.js +270 -0
  132. package/dist/conhecimento.js +111 -87
  133. package/dist/conta-esgotada.js +127 -0
  134. package/dist/dado-privado.js +816 -0
  135. package/dist/decisao-autonoma.js +5 -4
  136. package/dist/demo.js +14 -12
  137. package/dist/dependencias-da-worktree.js +25 -0
  138. package/dist/divida.js +38 -36
  139. package/dist/docs.js +89 -89
  140. package/dist/doctor-forja.js +343 -0
  141. package/dist/doctor-pulse-cron.js +113 -1
  142. package/dist/doctor.js +164 -6
  143. package/dist/dsn-da-memoria.js +417 -0
  144. package/dist/entrega-por-mod.js +503 -0
  145. package/dist/entrega-pr.js +154 -54
  146. package/dist/esgotamentos.js +13 -11
  147. package/dist/estado-thread.js +21 -18
  148. package/dist/evalrunner.js +35 -32
  149. package/dist/fabrica-batida.js +34 -21
  150. package/dist/fabrica-estado.js +33 -21
  151. package/dist/fix.js +21 -19
  152. package/dist/forja/adaptador.js +6 -0
  153. package/dist/forja/ambiente-de-ci.js +27 -0
  154. package/dist/forja/api.js +256 -0
  155. package/dist/forja/cache.js +89 -0
  156. package/dist/forja/cli.js +60 -0
  157. package/dist/forja/contrato.js +9 -0
  158. package/dist/forja/endereco.js +43 -0
  159. package/dist/forja/estado.js +22 -0
  160. package/dist/forja/executor.js +73 -0
  161. package/dist/forja/github/ci.js +95 -0
  162. package/dist/forja/github/dono-da-rede.js +18 -0
  163. package/dist/forja/github/metadados.js +15 -0
  164. package/dist/forja/github/pedidos.js +200 -0
  165. package/dist/forja/gitlab/ci.js +141 -0
  166. package/dist/forja/gitlab/consultas.js +59 -0
  167. package/dist/forja/gitlab/dono-da-rede.js +43 -0
  168. package/dist/forja/gitlab/metadados.js +15 -0
  169. package/dist/forja/gitlab/pedidos-abertos.js +158 -0
  170. package/dist/forja/gitlab/pedidos.js +141 -0
  171. package/dist/forja/produtor.js +32 -0
  172. package/dist/forja/registro.js +31 -0
  173. package/dist/forja/resolver.js +121 -0
  174. package/dist/forja/texto.js +13 -0
  175. package/dist/forja/versao.js +71 -0
  176. package/dist/forja.js +123 -80
  177. package/dist/handoff.js +23 -13
  178. package/dist/hitl-contract.js +46 -43
  179. package/dist/hitl-curto.js +37 -25
  180. package/dist/hitl-gates.js +13 -11
  181. package/dist/hitl-local-receipt.js +51 -0
  182. package/dist/hitl-local.js +11 -2
  183. package/dist/hitl-lock.js +5 -11
  184. package/dist/hitl-public-receipt.js +11 -0
  185. package/dist/hitl-resumo.js +44 -1
  186. package/dist/hitl-sessions.js +62 -9
  187. package/dist/hitl-texto-livre.js +7 -4
  188. package/dist/hitl.js +34 -31
  189. package/dist/horario.js +20 -1
  190. package/dist/hosts.js +104 -134
  191. package/dist/index.js +864 -554
  192. package/dist/indice-vetorial.js +14 -12
  193. package/dist/init.js +11 -2
  194. package/dist/integracoes-locais.js +4 -0
  195. package/dist/intelligence-graph-cli.js +123 -69
  196. package/dist/intelligence-graph-query.js +37 -22
  197. package/dist/leases.js +19 -18
  198. package/dist/ledger-stats.js +17 -16
  199. package/dist/ledger.js +31 -1
  200. package/dist/licoes.js +12 -11
  201. package/dist/locale-accounts.js +228 -0
  202. package/dist/locale-adapter.js +291 -0
  203. package/dist/locale-ajuda.js +86 -10
  204. package/dist/locale-audit.js +199 -0
  205. package/dist/locale-claims.js +213 -0
  206. package/dist/locale-conducao.js +138 -0
  207. package/dist/locale-conhecimento.js +181 -0
  208. package/dist/locale-decisao.js +205 -0
  209. package/dist/locale-docs.js +230 -0
  210. package/dist/locale-estado.js +101 -0
  211. package/dist/locale-forja.js +288 -0
  212. package/dist/locale-gerados.js +5 -0
  213. package/dist/locale-grafo.js +129 -0
  214. package/dist/locale-master.js +83 -0
  215. package/dist/locale-network.js +524 -0
  216. package/dist/locale-operacao-restante.js +931 -0
  217. package/dist/locale-projetos.js +100 -0
  218. package/dist/locale-prompts.js +194 -0
  219. package/dist/locale-pulse.js +140 -2
  220. package/dist/locale-reservas.js +87 -0
  221. package/dist/locale-retry.js +183 -6
  222. package/dist/locale-security-scan.js +69 -0
  223. package/dist/locale-setup.js +192 -0
  224. package/dist/locale-ship.js +177 -66
  225. package/dist/locale-thread.js +149 -5
  226. package/dist/locale-verify.js +80 -4
  227. package/dist/locale-worktree.js +246 -0
  228. package/dist/locale.js +553 -9
  229. package/dist/maestro-runtime.js +22 -3
  230. package/dist/manifest.js +293 -12
  231. package/dist/maquina-ociosa.js +211 -0
  232. package/dist/maquina.js +10 -5
  233. package/dist/master-nota-local.js +200 -0
  234. package/dist/master-nota.js +10 -2
  235. package/dist/master.js +118 -41
  236. package/dist/mcp-conhecimento.js +52 -0
  237. package/dist/mcp-experiencia.js +26 -5
  238. package/dist/mcp-install.js +90 -15
  239. package/dist/mcp-noctum.js +101 -0
  240. package/dist/mcp-server.js +116 -22
  241. package/dist/mcp-ship-transporte.js +977 -0
  242. package/dist/mcp-ship.js +68 -24
  243. package/dist/mcp-transportes.js +17 -0
  244. package/dist/memoria.js +63 -58
  245. package/dist/merge-da-entrega.js +85 -0
  246. package/dist/modos-migracao.js +8 -6
  247. package/dist/modos.js +17 -18
  248. package/dist/network-roadmap.js +94 -54
  249. package/dist/noctum-aceite.js +929 -0
  250. package/dist/noctum-arco.js +540 -33
  251. package/dist/noctum-capacidade.js +3 -3
  252. package/dist/noctum-changelog.js +399 -0
  253. package/dist/noctum-cli.js +539 -0
  254. package/dist/noctum-coordenacao.js +1225 -0
  255. package/dist/noctum-entrega.js +1217 -0
  256. package/dist/noctum-envelope.js +253 -17
  257. package/dist/noctum-execucao.js +100 -24
  258. package/dist/noctum-fechamento.js +416 -0
  259. package/dist/noctum-fila.js +49 -10
  260. package/dist/noctum-guarda.js +333 -0
  261. package/dist/noctum-integracao.js +507 -0
  262. package/dist/noctum-maquinas.js +387 -0
  263. package/dist/noctum-medicao.js +450 -0
  264. package/dist/noctum-modo.js +390 -0
  265. package/dist/noctum-pergunta-canal.js +96 -0
  266. package/dist/noctum-pergunta.js +115 -0
  267. package/dist/noctum-provas.js +838 -0
  268. package/dist/noctum-reconciliacao.js +594 -0
  269. package/dist/noctum-rede.js +102 -0
  270. package/dist/noctum-registro.js +215 -0
  271. package/dist/noctum-relatorio.js +861 -0
  272. package/dist/noctum-resposta.js +207 -0
  273. package/dist/noctum-retomada-rede.js +71 -0
  274. package/dist/noctum-sessoes-em-voo.js +93 -0
  275. package/dist/noctum-supervisao.js +649 -0
  276. package/dist/noctum-terminal.js +459 -0
  277. package/dist/noctum-transporte.js +655 -0
  278. package/dist/noctum-vigia.js +679 -0
  279. package/dist/ocupacao.js +3 -1
  280. package/dist/onboarding.js +16 -5
  281. package/dist/orkmind.js +39 -23
  282. package/dist/orquestracao.js +31 -35
  283. package/dist/parado-no-condutor.js +160 -139
  284. package/dist/phase.js +96 -42
  285. package/dist/policies.js +33 -0
  286. package/dist/postura-local.js +11 -6
  287. package/dist/preflight.js +2 -1
  288. package/dist/procedencia.js +9 -14
  289. package/dist/projeto-alvo.js +59 -20
  290. package/dist/prompts.js +136 -42
  291. package/dist/prova-minima.js +5 -6
  292. package/dist/pulse-cadencia.js +5 -4
  293. package/dist/pulse-consentimento.js +53 -1
  294. package/dist/pulse-delivery.js +143 -27
  295. package/dist/pulse-resposta.js +368 -4
  296. package/dist/pulse.js +136 -3
  297. package/dist/ratelimit.js +13 -4
  298. package/dist/recall.js +14 -13
  299. package/dist/rede-adesao.js +13 -8
  300. package/dist/rede-forja.js +108 -24
  301. package/dist/rede-status.js +63 -45
  302. package/dist/rede.js +86 -46
  303. package/dist/retomada-checkpoint.js +101 -0
  304. package/dist/retry.js +326 -78
  305. package/dist/roadmap-reservas.js +32 -32
  306. package/dist/runtime-ambiente.js +5 -0
  307. package/dist/runtime-context.js +279 -85
  308. package/dist/runtime-escada.js +429 -0
  309. package/dist/runtime-profiles.js +130 -63
  310. package/dist/runtimes.js +42 -5
  311. package/dist/saida-segura.js +3 -2
  312. package/dist/security-scan/agil.js +366 -0
  313. package/dist/security-scan/cli.js +76 -0
  314. package/dist/security-scan/compare.js +149 -0
  315. package/dist/security-scan/config.js +93 -0
  316. package/dist/security-scan/detect.js +97 -0
  317. package/dist/security-scan/executor.js +196 -0
  318. package/dist/security-scan/guard.js +180 -0
  319. package/dist/security-scan/imagem-de-lint.js +96 -0
  320. package/dist/security-scan/normalize/actionlint.js +12 -0
  321. package/dist/security-scan/normalize/eslint.js +12 -0
  322. package/dist/security-scan/normalize/gitleaks.js +13 -0
  323. package/dist/security-scan/normalize/golangci-lint.js +13 -0
  324. package/dist/security-scan/normalize/govulncheck.js +36 -0
  325. package/dist/security-scan/normalize/index.js +25 -0
  326. package/dist/security-scan/normalize/npm-audit.js +30 -0
  327. package/dist/security-scan/normalize/osv-scanner.js +32 -0
  328. package/dist/security-scan/normalize/oxlint.js +51 -0
  329. package/dist/security-scan/normalize/pip-audit.js +16 -0
  330. package/dist/security-scan/normalize/ruff.js +12 -0
  331. package/dist/security-scan/normalize/semgrep.js +20 -0
  332. package/dist/security-scan/normalize/trivy.js +33 -0
  333. package/dist/security-scan/normalize/util.js +204 -0
  334. package/dist/security-scan/normalize/zizmor.js +19 -0
  335. package/dist/security-scan/report.js +156 -0
  336. package/dist/security-scan/run.js +448 -0
  337. package/dist/security-scan/tools.js +62 -0
  338. package/dist/security-scan/trabalhador.js +74 -0
  339. package/dist/security-scan/types.js +15 -0
  340. package/dist/session-events.js +19 -2
  341. package/dist/session-watcher-claude.js +74 -19
  342. package/dist/session-watcher-grok.js +425 -0
  343. package/dist/session-watcher.js +174 -13
  344. package/dist/sessoes-contas.js +42 -5
  345. package/dist/sessoes-inventario.js +1 -1
  346. package/dist/sessoes.js +25 -23
  347. package/dist/setup.js +67 -66
  348. package/dist/ship-publicar.js +263 -92
  349. package/dist/ship.js +160 -17
  350. package/dist/superficie.js +14 -11
  351. package/dist/thread-close.js +9 -9
  352. package/dist/thread.js +121 -18
  353. package/dist/tokens.js +15 -11
  354. package/dist/trabalho-thread.js +297 -0
  355. package/dist/transporte-do-canal.js +189 -0
  356. package/dist/types.js +12 -1
  357. package/dist/util.js +5 -2
  358. package/dist/varredura-acoes.js +500 -0
  359. package/dist/verify.js +491 -32
  360. package/dist/worktree-local.js +12 -10
  361. package/dist/worktree.js +81 -85
  362. package/eval/casos/check-quality.json +77 -0
  363. package/eval/casos/security-auditor.json +148 -0
  364. package/eval/casos/security-remediation.json +161 -0
  365. package/eval/fixtures/security-scan/README.md +8 -0
  366. package/eval/fixtures/security-scan/go/.github/workflows/ci.yml +12 -0
  367. package/eval/fixtures/security-scan/go/Dockerfile +4 -0
  368. package/eval/fixtures/security-scan/go/README.md +4 -0
  369. package/eval/fixtures/security-scan/go/config.go +4 -0
  370. package/eval/fixtures/security-scan/go/go.mod +5 -0
  371. package/eval/fixtures/security-scan/go/go.sum +2 -0
  372. package/eval/fixtures/security-scan/go/main.go +31 -0
  373. package/eval/fixtures/security-scan/js/.github/workflows/ci.yml +12 -0
  374. package/eval/fixtures/security-scan/js/Dockerfile +3 -0
  375. package/eval/fixtures/security-scan/js/README.md +4 -0
  376. package/eval/fixtures/security-scan/js/package-lock.json +844 -0
  377. package/eval/fixtures/security-scan/js/package.json +10 -0
  378. package/eval/fixtures/security-scan/js/src/config.js +4 -0
  379. package/eval/fixtures/security-scan/js/src/server.js +17 -0
  380. package/eval/fixtures/security-scan/js/src/util.ts +4 -0
  381. package/eval/fixtures/security-scan/js/tsconfig.json +4 -0
  382. package/eval/fixtures/security-scan/python/.github/workflows/ci.yml +12 -0
  383. package/eval/fixtures/security-scan/python/Dockerfile +3 -0
  384. package/eval/fixtures/security-scan/python/README.md +4 -0
  385. package/eval/fixtures/security-scan/python/app/__init__.py +0 -0
  386. package/eval/fixtures/security-scan/python/app/config.py +2 -0
  387. package/eval/fixtures/security-scan/python/app/main.py +19 -0
  388. package/eval/fixtures/security-scan/python/requirements.txt +1 -0
  389. package/package.json +10 -5
  390. package/references/security-checklist.md +3 -3
  391. package/skills/README.md +1 -0
  392. package/skills/core/orkastery-bootstrap/SKILL.md +2 -2
  393. package/skills/phases/check-quality/SKILL.md +16 -0
  394. package/skills/phases/go-implementation/SKILL.md +6 -0
  395. package/skills/phases/security-remediation/SKILL.md +70 -0
  396. package/skills/reviewers/security-auditor/SKILL.md +25 -0
package/dist/leases.js CHANGED
@@ -97,6 +97,7 @@ const horario_1 = require("./horario");
97
97
  const conducao_texto_1 = require("./conducao-texto");
98
98
  const ledger_1 = require("./ledger");
99
99
  const thread_1 = require("./thread");
100
+ const locale_1 = require("./locale");
100
101
  /** Nome do lease que serializa o merge na base (visao, paridade 5). */
101
102
  exports.LEASE_MAIN_TREE = 'main-tree';
102
103
  /** TTL padrao de 30 minutos: um SHIP que passe disso deixou de existir. */
@@ -1033,24 +1034,25 @@ function adquirirRegiao(raiz, nome, opcoes) {
1033
1034
  }
1034
1035
  /** Texto de `ork lease list`: leases ativos, familias e a fila por colisao. */
1035
1036
  function tabelaDeLeases(raiz) {
1037
+ const m = (0, locale_1.msg)().operacao.restante.lease;
1036
1038
  const emDisco = leasesEmDisco(raiz);
1037
1039
  const fila = lerFila(raiz);
1038
- const linhas = ['Leases do projeto', ''];
1040
+ const linhas = [m.titulo, ''];
1039
1041
  const principal = (0, estado_thread_1.raizDoEstado)(raiz);
1040
1042
  if (emDisco.length === 0) {
1041
- linhas.push(' Nenhum lease tomado. O merge na base esta liberado.');
1043
+ linhas.push(m.nenhum);
1042
1044
  }
1043
1045
  else {
1044
1046
  for (const { lease: l, legado } of emDisco) {
1045
- const situacao = expirado(l) ? 'VENCIDO (tomavel)' : 'ativo';
1046
- linhas.push(` ${textoSeguro(l.nome).padEnd(28)} [${tipoDoLease(l.nome)}] thread ${textoSeguro(l.thread).padEnd(18)} ${situacao}`);
1047
- linhas.push(` desde ${(0, horario_1.formatarDataHora)(l.adquiridoEm)} ate ${(0, horario_1.formatarDataHora)(l.expiraEm)} (pid ${l.pid})`);
1048
- linhas.push(` motivo: ${textoSeguro(l.motivo)}`);
1047
+ const situacao = expirado(l) ? m.situacao.vencido : m.situacao.ativo;
1048
+ linhas.push(m.item(textoSeguro(l.nome), tipoDoLease(l.nome), textoSeguro(l.thread), situacao));
1049
+ linhas.push(m.periodo((0, horario_1.formatarDataHora)(l.adquiridoEm), (0, horario_1.formatarDataHora)(l.expiraEm), l.pid));
1050
+ linhas.push(m.motivo(textoSeguro(l.motivo)));
1049
1051
  // RM-036: a copia antiga e somente lida, ate vencer ou encerrar a janela.
1050
1052
  if (legado) {
1051
1053
  const relativo = path.relative(principal, legado);
1052
1054
  const onde = relativo && !relativo.startsWith('..') && !path.isAbsolute(relativo) ? relativo : legado;
1053
- linhas.push(` legado: ${textoSeguro(onde)} (vale enquanto vivo, dentro da janela de 30 min da troca)`);
1055
+ linhas.push(m.legado(textoSeguro(onde)));
1054
1056
  }
1055
1057
  // I-36: o lease de execucao diz quem conduz, com a mesma linha das outras superficies.
1056
1058
  const conducao = (0, conducao_texto_1.conducaoDoLease)(l);
@@ -1088,15 +1090,15 @@ function tabelaDeLeases(raiz) {
1088
1090
  }
1089
1091
  if (tipoDoLease(nome) === 'exec')
1090
1092
  continue;
1091
- linhas.push(` legado: ${textoSeguro(arquivo)} INVALIDO ou ILEGIVEL (ignorado)`);
1092
- linhas.push(' arquivo legado preservado; ignorado sem alterar o lease canonico');
1093
+ linhas.push(m.legadoInvalido(textoSeguro(arquivo)));
1094
+ linhas.push(m.legadoPreservado);
1093
1095
  }
1094
1096
  }
1095
1097
  linhas.push('');
1096
1098
  // Consulta nao recolhe candidatos: mostra a fila, inclusive sobras de SIGKILL.
1097
1099
  const pasta = dirLeases(raiz);
1098
1100
  const retomadas = fs.existsSync(pasta) ? fs.readdirSync(pasta).filter((n) => n.endsWith('.json.retomadas')).sort() : [];
1099
- linhas.push(`Fila de retomada: ${retomadas.length === 0 ? 'vazia' : `${retomadas.length} lease(s)`}`);
1101
+ linhas.push(m.filaRetomada(retomadas.length));
1100
1102
  for (const nome of retomadas) {
1101
1103
  const dir = path.join(pasta, nome);
1102
1104
  linhas.push(` ${textoSeguro(nome)}`);
@@ -1108,25 +1110,24 @@ function tabelaDeLeases(raiz) {
1108
1110
  if (!c)
1109
1111
  continue;
1110
1112
  const idade = Math.max(0, Date.now() - c.stat.mtimeMs), vencido = idade >= exports.TTL_PADRAO_MS;
1111
- linhas.push(` ${textoSeguro(c.nome)} pid ${c.pid} ${c.ticket === null ? 'temporario' : `ticket ${c.ticket}`} idade ${Math.floor(idade / 1000)}s`);
1113
+ linhas.push(m.candidato(textoSeguro(c.nome), c.pid, c.ticket, Math.floor(idade / 1000)));
1112
1114
  if (vencido)
1113
- linhas.push(' lease.resume-unavailable: prazo de 30 min excedido; repita a aquisicao para recolher e consulte ork lease list');
1115
+ linhas.push(m.prazo);
1114
1116
  }
1115
1117
  }
1116
1118
  catch {
1117
- linhas.push(' lease.resume-unavailable: fila ilegivel ou insegura; inspecione candidatos antes de repetir a aquisicao');
1119
+ linhas.push(m.filaInsegura);
1118
1120
  }
1119
1121
  }
1120
1122
  const merge = fila.filter((p) => p.tipo === 'main-tree');
1121
1123
  const regiao = fila.filter((p) => p.tipo !== 'main-tree');
1122
- linhas.push(`Fila de merge (lease ${exports.LEASE_MAIN_TREE}): ${merge.length === 0 ? 'vazia' : `${merge.length} na espera`}`);
1124
+ linhas.push(m.filaMerge(merge.length));
1123
1125
  merge.forEach((p, i) => {
1124
- linhas.push(` ${i + 1}. thread ${textoSeguro(p.thread)} desde ${(0, horario_1.formatarDesde)(p.desdeEm)} (bloqueada por ${textoSeguro(p.bloqueadaPor)})`);
1126
+ linhas.push(m.esperaMerge(i + 1, textoSeguro(p.thread), (0, horario_1.formatarDesde)(p.desdeEm), textoSeguro(p.bloqueadaPor)));
1125
1127
  });
1126
- linhas.push(`Fila por colisao de regiao: ${regiao.length === 0 ? 'vazia' : `${regiao.length} na espera`}`);
1128
+ linhas.push(m.filaRegiao(regiao.length));
1127
1129
  regiao.forEach((p, i) => {
1128
- linhas.push(` ${i + 1}. thread ${textoSeguro(p.thread)} quer ${textoSeguro(p.nome)}, colide com ${textoSeguro(p.colidiuCom)} ` +
1129
- `(thread ${textoSeguro(p.bloqueadaPor)}) desde ${(0, horario_1.formatarDesde)(p.desdeEm)}`);
1130
+ linhas.push(m.esperaRegiao(i + 1, textoSeguro(p.thread), textoSeguro(p.nome), textoSeguro(p.colidiuCom), textoSeguro(p.bloqueadaPor), (0, horario_1.formatarDesde)(p.desdeEm)));
1130
1131
  });
1131
1132
  if (emDisco.length > 0 || fila.length > 0)
1132
1133
  linhas.push((0, horario_1.legendaDoFuso)());
@@ -45,6 +45,7 @@ const ledger_1 = require("./ledger");
45
45
  const util_1 = require("./util");
46
46
  const horario_1 = require("./horario");
47
47
  const hitl_tempo_parado_1 = require("./hitl-tempo-parado");
48
+ const locale_1 = require("./locale");
48
49
  const MOTIVOS_PREVENTIVOS = new Set([
49
50
  'policy.violation', 'cost.violation', 'verify.regression', 'claims.failed', 'claims.unverifiable',
50
51
  ]);
@@ -260,27 +261,27 @@ function registrarEstimativaPlano(raiz, threadId, dados) {
260
261
  throw Error('ledger.estimate.head-unavailable');
261
262
  return (0, ledger_1.registrar)((0, thread_1.dirThread)(raiz, threadId), threadId, 'plan_estimate', { fase: 'PLAN', unidade: 'hours', semIaHoras: dados.semIaHoras, iaSemOrkHoras: dados.iaSemOrkHoras, por: dados.por, metodo: dados.metodo, premissas: dados.premissas, incerteza: dados.incerteza ?? 'nao informada', head: head.stdout.trim() });
262
263
  }
263
- const minutos = (ms) => ms === null ? 'sem resposta medida' : `${(ms / 60_000).toFixed(1)} min`;
264
+ const minutos = (ms) => ms === null ? (0, locale_1.msg)().operacao.ledger.semResposta : `${(ms / 60_000).toFixed(1)} min`;
264
265
  /** RM-057: uma linha, com a meta ao lado da mediana, para o dono ver o tempo parado sem abrir o JSON. */
265
266
  function linhaDoHitlDeConducao(h) {
266
- const meta = h.dentroDaMeta === null ? '' : h.dentroDaMeta ? ' (dentro da meta de 5 min)' : ' (acima da meta de 5 min)';
267
- return ` HITL de conducao ${h.pedidos} pergunta(s); parado ${(h.paradoMs / 3_600_000).toFixed(2)} h; ` +
268
- `mediana ${minutos(h.medianaRespostaMs)}${meta}; ${h.abertos} aberta(s); ` +
269
- `texto fora da excecao ${h.emTexto.foraDaExcecao}`;
267
+ const m = (0, locale_1.msg)().operacao.ledger;
268
+ const meta = h.dentroDaMeta === null ? '' : h.dentroDaMeta ? m.metaDentro : m.metaFora;
269
+ return m.hitl(h.pedidos, (h.paradoMs / 3_600_000).toFixed(2), minutos(h.medianaRespostaMs), meta, h.abertos, h.emTexto.foraDaExcecao);
270
270
  }
271
271
  function textoDasEstatisticas(r) {
272
- const dinheiro = r.custoReferencia.valor === null ? 'sem cobertura' : `USD ${r.custoReferencia.valor.toFixed(6)}`;
272
+ const m = (0, locale_1.msg)().operacao.ledger;
273
+ const dinheiro = r.custoReferencia.valor === null ? m.semCobertura : `USD ${r.custoReferencia.valor.toFixed(6)}`;
273
274
  return [
274
- `Ledger stats ${(0, horario_1.formatarDataHora)(r.periodo.desde)} ate ${(0, horario_1.formatarDataHoraRotulada)(r.periodo.ate)} ${r.periodo.intervalo}`,
275
- ` threads/sessoes ${r.threads} / ${r.sessoes.concluidas} concluidas (${r.sessoes.despachadas} despachos)`,
276
- ` throughput ${r.throughput.ships} ship(s); ${r.sessoes.retries} retry(ies)`,
277
- ` execucao ${r.execucao.horas.toFixed(2)} h (${r.execucao.cobertura.medidas} medidas; ${r.execucao.cobertura.semMedida} ausentes)`,
278
- ` tokens ${r.tokens.total} total; input ${r.tokens.input} (cached ${r.tokens.cachedInput}); output ${r.tokens.output}`,
279
- ` custo referencia ${dinheiro} — estimativa por tarifa publica, nao gasto/fatura`,
280
- ` espera humana ${(r.esperaHumana.milissegundos / 3_600_000).toFixed(2)} h; ${r.esperaHumana.abertas} aberta(s)`,
275
+ m.periodo((0, horario_1.formatarDataHora)(r.periodo.desde), (0, horario_1.formatarDataHoraRotulada)(r.periodo.ate), r.periodo.intervalo),
276
+ m.sessoes(r.threads, r.sessoes.concluidas, r.sessoes.despachadas),
277
+ m.throughput(r.throughput.ships, r.sessoes.retries),
278
+ m.execucao(r.execucao.horas.toFixed(2), r.execucao.cobertura.medidas, r.execucao.cobertura.semMedida),
279
+ m.tokens(r.tokens.total, r.tokens.input, r.tokens.cachedInput, r.tokens.output),
280
+ m.custo(dinheiro),
281
+ m.espera((r.esperaHumana.milissegundos / 3_600_000).toFixed(2), r.esperaHumana.abertas),
281
282
  linhaDoHitlDeConducao(r.hitlDeConducao),
282
- ` riscos evitados ${r.riscosPreventivos.total} gate(s) preventivo(s)`,
283
- ` estimativas PLAN ${r.estimativasPlano.amostras} amostra(s)`,
284
- ...r.qualidade.observacoes.map(o => ` cobertura ${o}`),
283
+ m.riscos(r.riscosPreventivos.total),
284
+ m.estimativas(r.estimativasPlano.amostras),
285
+ ...r.qualidade.observacoes.map(o => m.cobertura(m.observacao(o))),
285
286
  ].join('\n');
286
287
  }
package/dist/ledger.js CHANGED
@@ -52,6 +52,7 @@ const path = __importStar(require("node:path"));
52
52
  const util_1 = require("./util");
53
53
  const node_crypto_1 = require("node:crypto");
54
54
  const company_brain_journal_1 = require("./company-brain-journal");
55
+ const locale_1 = require("./locale");
55
56
  /** Tipos de evento do ledger. B0 abriu a lista; o B1 acrescenta os seus. */
56
57
  exports.TIPOS_DE_EVENTO = {
57
58
  // Bloco B0
@@ -77,6 +78,8 @@ exports.TIPOS_DE_EVENTO = {
77
78
  shipIniciado: 'ship_started',
78
79
  shipConcluido: 'ship_done',
79
80
  shipBloqueado: 'ship_blocked',
81
+ // Security scan: a loop category was not scanned for the candidate SHA and a human authorized the delivery anyway.
82
+ entregaSemScanAutorizada: 'ship_unscanned_authorized',
80
83
  // RM-059 (F7, T7.1): o `ork ship publicar` publicou a branch ou abriu o PR, com a prova do `ls-remote`.
81
84
  shipPublicado: 'ship_published',
82
85
  /**
@@ -102,6 +105,13 @@ exports.TIPOS_DE_EVENTO = {
102
105
  handoffRecuperado: 'handoff_recalled',
103
106
  // Bloco B2: worktree gerenciada, fila de leases, escalonador e MASTER/score
104
107
  worktreeGarantida: 'worktree_ensured',
108
+ /** RM-037 (defeito 2 de 19 e 20/10/2026): o preparo de `worktree.dependencias` na worktree nova. */
109
+ worktreeDependencias: 'worktree_dependencias',
110
+ /**
111
+ * RM-037 (CHECK 3 da ork-rm037defeit2): o preparo que a criacao adiou (o passo do arco abre a thread sob a trava de
112
+ * despacho); a baseline e o verify o rodam antes do primeiro comando.
113
+ */
114
+ worktreeDependenciasPendentes: 'worktree_dependencias_pendentes',
105
115
  worktreeSincronizada: 'worktree_synced',
106
116
  worktreeAuditada: 'worktree_audited',
107
117
  worktreeLiberada: 'worktree_released',
@@ -186,9 +196,28 @@ exports.TIPOS_DE_EVENTO = {
186
196
  // o crontab e do usuario na maquina, nao de uma thread. Escritor: `fabrica-batida.ts`.
187
197
  batidaInstalada: 'batida_instalada',
188
198
  batidaRemovida: 'batida_removida',
199
+ // RM-063 (F4): um degrau da escada de recuperacao do runtime (reerguer o daemon, o fallback do bloco, outro
200
+ // perfil), feito, pulado ou falho, com o destino e o mesmo sha256 do prompt. Escritor: `runtime-escada.ts`.
201
+ recuperacaoDoRuntime: 'runtime_recuperacao',
202
+ // RM-063 (F5): uma acao da varredura (limpar sessao fantasma, registrar a entrega de PR mesclado, MASTER por omissao),
203
+ // feita ou recusada, com a autorizacao duravel do dono que a permitiu. Escritor: `varredura-acoes.ts`.
204
+ acaoDaVarredura: 'varredura_acao',
205
+ // RM-063 (F6): o dono foi avisado de que a maquina esta ociosa (vaga livre e item reservado para ela sem ninguem
206
+ // trabalhando), uma linha por episodio, no ledger do projeto. Escritor: a varredura (`pulse-delivery.ts`).
207
+ maquinaOciosaAvisada: 'maquina_ociosa_avisada',
208
+ // RM-063 (F7): o dono gravou a autorizacao duravel desta maquina (`ork conducao autorizar`), no ledger do projeto, com
209
+ // quem autorizou, ate quando, o que pode e a que ela substituiu. Escritor: `autorizacao-duravel.ts`.
210
+ autorizacaoConcedida: 'autorizacao_concedida',
189
211
  // RM-059 (F6, T6.4): a Sentinela do Condutor ligou ou desligou nesta maquina (ledger do projeto, so na troca).
190
212
  sentinelaLigada: 'sentinela_ligada',
191
213
  sentinelaDesligada: 'sentinela_desligada',
214
+ // RM-059 (F9, T9.1): a resposta de sessao `claude-bg` pelo Mensageiro de Sessoes (`entrega-por-mod.ts`), sem o
215
+ // texto, so o sha256 do corpo. Na fila: o `enviar` do controle por mod, no servidor do dono que recebeu a resposta.
216
+ // Enviada: a `ork_session_outbox` com o resultado do `$.session.send`. Reservada: a `ork_session_inbox` do servidor
217
+ // preso ao despacho, quando a conferencia no receptor passa. O `session_answered` sai da reconciliacao de sempre.
218
+ entregaNaFila: 'session_delivery_queued',
219
+ entregaEnviada: 'session_delivery_sent',
220
+ entregaReservada: 'session_delivery_reserved',
192
221
  };
193
222
  /**
194
223
  * I-41 (GO-FIX 1, B4 e D11): o rastro tipado da decisao autonoma.
@@ -204,7 +233,8 @@ function exigirRastroDeDecisaoAutonoma(dados) {
204
233
  for (const campo of ['quemDecidiu', 'evidencia', 'razao']) {
205
234
  const v = dados[campo];
206
235
  if (typeof v !== 'string' || !v.trim() || v.length > 1000 || /[\x00-\x08\x0b-\x1f\x7f]/.test(v)) {
207
- throw new Error(`decisão autônoma exige ${campo}: quem decidiu, com que evidência e por quê`);
236
+ // RM-061 F3c: a recusa sai do catalogo, na lingua de quem a le; o pt-BR e o de sempre.
237
+ throw new locale_1.ErroDoCatalogo((m) => m.decisao.rastroObrigatorio(campo));
208
238
  }
209
239
  }
210
240
  }
package/dist/licoes.js CHANGED
@@ -58,6 +58,7 @@ const path = __importStar(require("node:path"));
58
58
  const estado_thread_1 = require("./estado-thread");
59
59
  const ledger_1 = require("./ledger");
60
60
  const policies_1 = require("./policies");
61
+ const locale_1 = require("./locale");
61
62
  /** O que evita cada bloqueio, na forma de comando. Sem dica, a licao so conta a recorrencia. */
62
63
  exports.DICA_DO_MOTIVO = {
63
64
  'claims.failed': 'rode o comando da claim antes de registra-la; claim sem prova local volta como GO-FIX',
@@ -154,17 +155,16 @@ const curto = (t, teto) => (t.length > teto ? `${t.slice(0, teto - 3)}...` : t);
154
155
  function textoDasLicoes(r) {
155
156
  if (r.threads === 0 || (r.motivos.length === 0 && r.classes.length === 0 && r.recentes.length === 0))
156
157
  return '';
157
- const linhas = [`Das ${r.threads} threads ja fechadas pelo MASTER neste produto:`];
158
+ const m = (0, locale_1.msg)().operacao.restante.licoes;
159
+ const linhas = [m.resumo(r.threads)];
158
160
  for (const m of r.motivos) {
159
- linhas.push(`- o bloqueio ${m.nome} apareceu em ${m.threads.length} ${m.threads.length === 1 ? 'thread' : 'threads'}` +
160
- (m.dica ? `; o que evita: ${m.dica}` : ''));
161
+ linhas.push((0, locale_1.msg)().operacao.restante.licoes.bloqueio(m.nome, m.threads.length, m.threads.length === 1 ? 'thread' : 'threads', m.dica));
161
162
  }
162
163
  for (const c of r.classes) {
163
- linhas.push(`- a classe de falha ${c.nome} fechou ${c.threads.length} ${c.threads.length === 1 ? 'thread' : 'threads'}` +
164
- (c.dica ? `; o que evita: ${c.dica}` : ''));
164
+ linhas.push(m.classe(c.nome, c.threads.length, c.threads.length === 1 ? 'thread' : 'threads', c.dica));
165
165
  }
166
166
  for (const l of r.recentes)
167
- linhas.push(`- ${l.thread} fechou com ${l.score}/5: ${curto(l.justificativa, 160)}`);
167
+ linhas.push(m.nota(l.thread, l.score, curto(l.justificativa, 160)));
168
168
  return linhas.join('\n');
169
169
  }
170
170
  /** Janela e piso da recorrencia que vira proposta de policy. */
@@ -208,16 +208,17 @@ function registrarPropostasNovas(raiz, agoraIso = new Date().toISOString()) {
208
208
  }
209
209
  /** `ork licoes`: o que volta no proximo GOAL e PLAN, e as propostas de policy. */
210
210
  function textoDeLicoes(raiz, agoraIso = new Date().toISOString()) {
211
+ const m = (0, locale_1.msg)().operacao.restante.licoes;
211
212
  const resumo = resumoDasLicoes(raiz, null);
212
- const linhas = ['Licoes que voltam no GOAL e no PLAN da proxima thread', ''];
213
- linhas.push(textoDasLicoes(resumo) || 'Nenhuma thread fechada pelo MASTER ainda: nada a ensinar.');
213
+ const linhas = [m.titulo, ''];
214
+ linhas.push(textoDasLicoes(resumo) || m.nenhuma);
214
215
  const propostas = propostasDePolicy(raiz, agoraIso);
215
216
  linhas.push('');
216
- linhas.push(`Propostas de policy (a mesma falha em ${exports.PISO_DA_PROPOSTA}+ threads nos ultimos ${exports.JANELA_DA_PROPOSTA_DIAS} dias):`);
217
+ linhas.push(m.propostas(exports.PISO_DA_PROPOSTA, exports.JANELA_DA_PROPOSTA_DIAS));
217
218
  if (propostas.length === 0)
218
- linhas.push(' nenhuma');
219
+ linhas.push(m.propostaNenhuma);
219
220
  for (const p of propostas)
220
221
  linhas.push(` ${p.chave} em ${p.threads.length} threads (${p.threads.slice(0, 5).join(', ')})`, ` ${p.sugestao}`);
221
- linhas.push('', 'Proposta nao bloqueia nada: vira policy so quando o dono a declara em `policies:` no orkastery.yaml.');
222
+ linhas.push('', m.fecho);
222
223
  return linhas.join('\n');
223
224
  }
@@ -0,0 +1,228 @@
1
+ "use strict";
2
+ /**
3
+ * RM-061, fatia F3b: a familia `accounts` do catalogo de mensagens (`ork accounts list|add|remove|check|esgotamentos`),
4
+ * a tabela dos perfis, o relatorio dos esgotamentos e as recusas do registro de perfis (`runtime-profiles.ts`). O pt-BR e
5
+ * a fonte; o ingles e tipado por ele. Sem import do nucleo.
6
+ *
7
+ * O id, o runtime, o diretorio e o motivo tipado sao dado e saem iguais; o estado de um perfil (dado do store e do
8
+ * `--json`) so se traduz na impressao, pelo id. O que o store grava (`ultimaFalha.detalhe`) e o limite que o `--json`
9
+ * dos esgotamentos leva saem sempre do pt-BR. As recusas `runtime.profiles.*` nascem por `ErroDoCatalogo`, com o codigo
10
+ * tipado igual nas duas linguas.
11
+ */
12
+ Object.defineProperty(exports, "__esModule", { value: true });
13
+ exports.ACCOUNTS_EN = exports.ACCOUNTS_PT_BR = void 0;
14
+ /**
15
+ * O detalhe da conferencia de login que o proprio ork escreve (`conferirAuth` do claude, do codex e do grok) e dado: vai ao store
16
+ * em pt-BR e so a impressao o traduz, pela frase exata. A saida do CLI que vem dentro dele (o trecho do `codex`) segue
17
+ * como veio.
18
+ */
19
+ const DETALHES_DO_LOGIN_EN = [
20
+ [/^claude auth status sem resposta \(timeout, sinal ou binario ausente\)$/, () => 'claude auth status gave no answer (timeout, signal or missing binary)'],
21
+ [/^claude auth status sem JSON legivel \(codigo (.+)\)$/, (codigo) => `claude auth status gave no readable JSON (exit code ${codigo})`],
22
+ [/^claude auth status sem JSON legivel$/, () => 'claude auth status gave no readable JSON'],
23
+ [/^claude auth status respondeu por outro diretorio de configuracao; perfil nao aplicado$/,
24
+ () => 'claude auth status answered for another configuration directory; profile not applied'],
25
+ [/^claude auth status: provider pago \((.+)\); so a assinatura claude\.ai despacha$/,
26
+ (partes) => `claude auth status: paid provider (${partes}); only the claude.ai subscription dispatches`],
27
+ [/^codex login status sem resposta \(timeout, sinal ou binario ausente\)$/, () => 'codex login status gave no answer (timeout, signal or missing binary)'],
28
+ [/^codex login status saiu (-?\d+)(: [\s\S]*)?$/, (codigo, resto) => `codex login status exited ${codigo}${resto ?? ''}`],
29
+ [/^codex login status: login por API key \(provider pago\)$/, () => 'codex login status: API key login (paid provider)'],
30
+ [/^codex login status: login sem assinatura ChatGPT comprovada \(tratado como provider pago\)$/,
31
+ () => 'codex login status: login without a proven ChatGPT subscription (treated as a paid provider)'],
32
+ [/^o grok nao documenta conferencia de login; o despacho prova o login \(erro de login do runtime vira runtime\.auth-missing\)$/,
33
+ () => 'grok documents no login check; the dispatch proves the login (a runtime login error becomes runtime.auth-missing)'],
34
+ [/^runtime\.profiles\.invalid: perfil sem grokHome no despacho grok$/,
35
+ () => 'runtime.profiles.invalid: profile without grokHome in the grok dispatch'],
36
+ ];
37
+ const ESTADOS_EN = {
38
+ ativo: 'active', esgotado: 'exhausted', 'sem-auth': 'no-auth', 'provider-pago': 'paid-provider', desativado: 'disabled',
39
+ };
40
+ exports.ACCOUNTS_PT_BR = {
41
+ semPerfis: 'Nenhum perfil configurado: cada runtime despacha pelo ambiente do processo.',
42
+ colunas: ['PERFIL', 'RUNTIME', 'DIRETORIO', 'ESTADO', 'ESGOTADO ATE', 'ULTIMO USO', 'ULTIMA FALHA'],
43
+ /** O estado gravado no store, como o texto o mostra. */
44
+ estado: (estado) => estado,
45
+ falhaEm: (motivo, quando) => `${motivo} em ${quando}`,
46
+ usoAdd: 'uso: ork accounts add <id> --runtime claude-bg|codex|grok --dir <diretorio> [--sem-login] [--device-auth (so grok)]',
47
+ reativado: (id) => `Perfil ${id} reativado: mesmo id, runtime e diretorio do perfil desativado.`,
48
+ recusado: (erro) => `perfil recusado: ${erro}`,
49
+ loginPendente: (variavel, dir, comando, id) => `Login pendente: rode ${variavel}=${dir} ${comando} e depois ork accounts check ${id}`,
50
+ resultadoAdd: (id, runtime, dir, situacao) => `Perfil ${id} (${runtime}) em ${dir}: ${situacao}`,
51
+ conferido: 'login de assinatura conferido',
52
+ /** O detalhe da conferencia de login (dado do store), como a impressao o mostra. */
53
+ detalheDoLogin: (detalhe) => detalhe,
54
+ inconclusivaAdd: (detalhe) => `conferencia de login inconclusiva (${detalhe}); o proximo despacho confere de novo`,
55
+ semConferenciaAdd: (detalhe) => `login sem conferencia previa (${detalhe}); o perfil entra no rodizio`,
56
+ pagoAdd: (detalhe) => `provider pago (${detalhe}); nunca recebe despacho`,
57
+ semLoginAdd: (detalhe) => `sem login (${detalhe}); fora do rodizio`,
58
+ usoRemove: 'uso: ork accounts remove <id>',
59
+ desativado: (id) => `Perfil ${id} desativado: o diretorio e o login do CLI ficam onde estao.`,
60
+ perfilAtivoNaoExiste: (alvo) => `perfil ativo "${alvo}" nao existe (veja: ork accounts list)`,
61
+ resultadoCheck: (id, runtime, situacao) => `${id} (${runtime}): ${situacao}`,
62
+ inconclusivaCheck: (detalhe) => `conferencia de login inconclusiva, estado mantido (${detalhe})`,
63
+ semConferenciaCheck: (detalhe) => `login sem conferencia previa, estado mantido (${detalhe})`,
64
+ pagoCheck: (detalhe) => `provider pago, nunca despacha (${detalhe})`,
65
+ semLoginCheck: (detalhe) => `sem login (${detalhe})`,
66
+ tipoDeLimite: (tipo) => ({ sessao: 'sessao', semanal: 'semanal', 'gasto-admin': 'gasto definido pelo admin',
67
+ outro: 'outro limite', nenhum: 'nenhum limite observado' }[tipo] ?? tipo),
68
+ limiteDaConta: (limite) => `limite: ${limite}`,
69
+ cotaMedida: (usada, limite, unidade) => `${usada}/${limite}${unidade === '%' ? '%' : ` ${unidade ?? 'unidades'}`} (medida pelo runtime)`,
70
+ cotaIndisponivel: 'nao exposta pelo runtime',
71
+ cotaDaConta: (cota) => `cota: ${cota}`,
72
+ sessaoSemVinculo: (sessao) => `sessao:${sessao}`,
73
+ cargaDaConta: (carga) => `roda agora: ${carga}`,
74
+ cargaVazia: 'roda agora: nada',
75
+ cargaInconclusiva: 'roda agora: inventario inconclusivo',
76
+ voltaEm: (quando) => `volta: ${quando}`,
77
+ voltaSemMedida: 'volta: sem prazo medido',
78
+ marcaExpirada: 'marca vencida expirada nesta conferencia',
79
+ periodoInvalido: (erro) => `${erro} (use --desde 7d, 24h, 30m ou uma data ISO)`,
80
+ desconhecido: (sub) => `subcomando desconhecido: accounts ${sub} (use list, add, remove, check ou esgotamentos)`,
81
+ // ork accounts esgotamentos
82
+ esgotamentosTitulo: (desde, ate, intervalo) => `Esgotamentos de conta ${desde} ate ${ate} ${intervalo}`,
83
+ marcasVivas: (n) => ` marcas vivas no registro: ${n}`,
84
+ marca: (conta, runtime, estado, desde, ate, projeto, motivo) => ` conta ${conta} ${runtime} ${estado} desde ${desde}, ${ate === null ? 'sem prazo' : `ate ${ate}`} visto em ${projeto} (${motivo})`,
85
+ projetosLidos: (lista) => ` projetos lidos: ${lista ?? 'nenhum registrado'}`,
86
+ projetoLido: (nome, despachos) => `${nome} (${despachos === null ? 'fora do disco' : `${despachos} despacho(s) com perfil`})`,
87
+ despachosMarcados: (n) => ` despachos em conta marcada por outro projeto: ${n}`,
88
+ colunasDosDespachos: ['QUANDO', 'PROJETO', 'THREAD', 'FASE', 'PERFIL', 'CONTA', 'MARCADA POR'],
89
+ limite: (limite) => ` limite: ${limite}`,
90
+ /** O limite que o `--json` dos esgotamentos leva (dado, sempre em pt-BR); a impressao o mostra no locale do comando. */
91
+ limiteDoRelatorio: 'o registro guarda so as marcas vivas (uso bem sucedido, login reconferido e prazo vencido ' +
92
+ 'apagam a marca): o total e um piso, valido enquanto a marca existe',
93
+ // O que o store grava (sempre em pt-BR).
94
+ inconclusiva: (detalhe) => `conferencia de login inconclusiva: ${detalhe}`,
95
+ vistoEmOutroProjeto: (detalhe) => `visto em outro projeto: ${detalhe}`,
96
+ // As recusas do registro de perfis (runtime-profiles.ts).
97
+ uidIndisponivel: 'runtime.profiles.invalid: uid do processo indisponivel',
98
+ diretorioNaoNormalizado: 'runtime.profiles.invalid: diretorio do perfil precisa ser caminho absoluto normalizado',
99
+ idInvalido: 'runtime.profiles.invalid: id do perfil aceita letras, digitos, ponto, hifen e sublinhado (ate 63)',
100
+ despachoAusente: 'runtime.profiles.invalid: perfil de despacho ausente',
101
+ runtimeDesconhecido: 'runtime.profiles.invalid: runtime do perfil desconhecido',
102
+ despachoComCampo: 'runtime.profiles.invalid: perfil de despacho com campo inesperado',
103
+ perfilDeOutroRuntime: 'runtime.profiles.invalid: perfil de outro runtime',
104
+ sensorDiverge: 'runtime.profiles.invalid: perfil do sensor diverge do despacho',
105
+ pastaPrivada: 'runtime.profiles.invalid: pasta privada precisa ser 0700 do proprio usuario',
106
+ diretorioDeEstado: 'runtime.profiles.invalid: diretorio de estado invalido',
107
+ dataInvalida: (campo) => `runtime.profiles.invalid: ${campo} invalido`,
108
+ perfilInvalido: 'runtime.profiles.invalid: perfil invalido',
109
+ campoInesperado: 'runtime.profiles.invalid: campo inesperado no perfil',
110
+ estadoDesconhecido: 'runtime.profiles.invalid: estado do perfil desconhecido',
111
+ ultimaFalhaInvalida: 'runtime.profiles.invalid: ultimaFalha invalida',
112
+ storeInvalido: 'runtime.profiles.invalid: store invalido',
113
+ contratoEsperado: (contrato) => `runtime.profiles.invalid: contrato ${contrato} esperado`,
114
+ idRepetido: 'runtime.profiles.invalid: id de perfil repetido',
115
+ mesmoDiretorio: 'runtime.profiles.invalid: dois perfis do mesmo runtime no mesmo diretorio',
116
+ arquivoIlegivel: 'runtime.profiles.invalid: arquivo de perfis ilegivel ou link simbolico',
117
+ arquivoSemPermissao: 'runtime.profiles.invalid: arquivo de perfis precisa ser 0600 do proprio usuario',
118
+ arquivoJson: 'runtime.profiles.invalid: arquivo de perfis com JSON invalido',
119
+ pastaTrocada: 'runtime.profiles.invalid: pasta privada trocada durante a gravacao',
120
+ storeOcupado: 'runtime.profiles.busy: store de perfis ocupado; tente novamente',
121
+ perfilNaoExiste: (id) => `runtime.profiles.unknown: perfil "${id}" nao existe (veja: ork accounts list)`,
122
+ diretorioInacessivel: (codigo) => `runtime.profiles.invalid: diretorio do perfil inacessivel (${codigo})`,
123
+ naoEDiretorio: 'runtime.profiles.invalid: o caminho do perfil nao e diretorio',
124
+ outroUsuario: 'runtime.profiles.invalid: diretorio do perfil pertence a outro usuario',
125
+ semLeituraEscrita: 'runtime.profiles.invalid: diretorio do perfil sem leitura e escrita para este usuario',
126
+ runtimeSemPerfil: (runtime) => `runtime.profiles.invalid: runtime "${runtime}" nao aceita perfil`,
127
+ jaExiste: (id, desativadoEm) => `runtime.profiles.invalid: perfil "${id}" ja existe` +
128
+ (desativadoEm !== null ? ` (desativado em ${desativadoEm}; reative com o mesmo --runtime e --dir)` : ''),
129
+ jaHaPerfil: (runtime, dir) => `runtime.profiles.invalid: ja ha perfil ${runtime} em ${dir}`,
130
+ mesmoDiretorioDoPerfil: (dir, id, real) => `runtime.profiles.invalid: ${dir} e o mesmo diretorio do perfil "${id}" (${real})`,
131
+ estaDesativado: (id) => `runtime.profiles.invalid: perfil "${id}" esta desativado`,
132
+ cotaExigePrazo: 'runtime.profiles.invalid: cota esgotada exige esgotadoAte',
133
+ registroInvalido: 'runtime.profiles.invalid: registro de contas invalido',
134
+ contaInvalida: 'runtime.profiles.invalid: conta compartilhada invalida',
135
+ };
136
+ exports.ACCOUNTS_EN = {
137
+ semPerfis: 'No profile configured: each runtime dispatches with the process environment.',
138
+ colunas: ['PROFILE', 'RUNTIME', 'DIRECTORY', 'STATE', 'EXHAUSTED UNTIL', 'LAST USE', 'LAST FAILURE'],
139
+ estado: (estado) => ESTADOS_EN[estado] ?? estado,
140
+ falhaEm: (motivo, quando) => `${motivo} at ${quando}`,
141
+ usoAdd: 'usage: ork accounts add <id> --runtime claude-bg|codex|grok --dir <directory> [--sem-login] [--device-auth (grok only)]',
142
+ reativado: (id) => `Profile ${id} reactivated: same id, runtime and directory as the disabled profile.`,
143
+ recusado: (erro) => `profile refused: ${erro}`,
144
+ loginPendente: (variavel, dir, comando, id) => `Login pending: run \`${variavel}=${dir} ${comando}\`, then \`ork accounts check ${id}\``,
145
+ resultadoAdd: (id, runtime, dir, situacao) => `Profile ${id} (${runtime}) in ${dir}: ${situacao}`,
146
+ conferido: 'subscription login checked',
147
+ detalheDoLogin: (detalhe) => {
148
+ const regra = DETALHES_DO_LOGIN_EN.find(([re]) => re.test(detalhe));
149
+ return regra ? regra[1](...(regra[0].exec(detalhe) ?? []).slice(1)) : detalhe;
150
+ },
151
+ inconclusivaAdd: (detalhe) => `login check inconclusive (${detalhe}); the next dispatch checks again`,
152
+ semConferenciaAdd: (detalhe) => `login without a prior check (${detalhe}); the profile joins the rotation`,
153
+ pagoAdd: (detalhe) => `paid provider (${detalhe}); never receives a dispatch`,
154
+ semLoginAdd: (detalhe) => `no login (${detalhe}); out of the rotation`,
155
+ usoRemove: 'usage: ork accounts remove <id>',
156
+ desativado: (id) => `Profile ${id} disabled: the directory and the CLI login stay where they are.`,
157
+ perfilAtivoNaoExiste: (alvo) => `active profile "${alvo}" does not exist (see: \`ork accounts list\`)`,
158
+ resultadoCheck: (id, runtime, situacao) => `${id} (${runtime}): ${situacao}`,
159
+ inconclusivaCheck: (detalhe) => `login check inconclusive, state kept (${detalhe})`,
160
+ semConferenciaCheck: (detalhe) => `login without a prior check, state kept (${detalhe})`,
161
+ pagoCheck: (detalhe) => `paid provider, never dispatches (${detalhe})`,
162
+ semLoginCheck: (detalhe) => `no login (${detalhe})`,
163
+ tipoDeLimite: (tipo) => ({ sessao: 'session', semanal: 'weekly', 'gasto-admin': 'admin-defined spend',
164
+ outro: 'other limit', nenhum: 'no observed limit' }[tipo] ?? tipo),
165
+ limiteDaConta: (limite) => `limit: ${limite}`,
166
+ cotaMedida: (usada, limite, unidade) => `${usada}/${limite}${unidade === '%' ? '%' : ` ${unidade ?? 'units'}`} (measured by the runtime)`,
167
+ cotaIndisponivel: 'not exposed by the runtime',
168
+ cotaDaConta: (cota) => `quota: ${cota}`,
169
+ sessaoSemVinculo: (sessao) => `session:${sessao}`,
170
+ cargaDaConta: (carga) => `running now: ${carga}`,
171
+ cargaVazia: 'running now: nothing',
172
+ cargaInconclusiva: 'running now: inconclusive inventory',
173
+ voltaEm: (quando) => `returns: ${quando}`,
174
+ voltaSemMedida: 'returns: no measured deadline',
175
+ marcaExpirada: 'expired mark cleared in this check',
176
+ periodoInvalido: (erro) => `${erro} (use \`--desde\` 7d, 24h, 30m or an ISO date)`,
177
+ desconhecido: (sub) => `unknown subcommand: accounts ${sub} (use list, add, remove, check or esgotamentos)`,
178
+ esgotamentosTitulo: (desde, ate, intervalo) => `Account exhaustions ${desde} to ${ate} ${intervalo}`,
179
+ marcasVivas: (n) => ` live marks in the registry: ${n}`,
180
+ marca: (conta, runtime, estado, desde, ate, projeto, motivo) => ` account ${conta} ${runtime} ${estado} since ${desde}, ${ate === null ? 'no deadline' : `until ${ate}`} seen in ${projeto} (${motivo})`,
181
+ projetosLidos: (lista) => ` projects read: ${lista ?? 'none registered'}`,
182
+ projetoLido: (nome, despachos) => `${nome} (${despachos === null ? 'off disk' : `${despachos} dispatch(es) with a profile`})`,
183
+ despachosMarcados: (n) => ` dispatches on an account marked by another project: ${n}`,
184
+ colunasDosDespachos: ['WHEN', 'PROJECT', 'THREAD', 'PHASE', 'PROFILE', 'ACCOUNT', 'MARKED BY'],
185
+ limite: (limite) => ` limit: ${limite}`,
186
+ limiteDoRelatorio: 'the registry only keeps live marks (a successful use, a rechecked login and an expired deadline clear the ' +
187
+ 'mark): the total is a floor, valid while the mark exists',
188
+ inconclusiva: (detalhe) => `login check inconclusive: ${detalhe}`,
189
+ vistoEmOutroProjeto: (detalhe) => `seen in another project: ${detalhe}`,
190
+ uidIndisponivel: 'runtime.profiles.invalid: process uid unavailable',
191
+ diretorioNaoNormalizado: 'runtime.profiles.invalid: the profile directory must be a normalized absolute path',
192
+ idInvalido: 'runtime.profiles.invalid: a profile id takes letters, digits, dot, hyphen and underscore (up to 63)',
193
+ despachoAusente: 'runtime.profiles.invalid: dispatch profile missing',
194
+ runtimeDesconhecido: 'runtime.profiles.invalid: unknown profile runtime',
195
+ despachoComCampo: 'runtime.profiles.invalid: dispatch profile with an unexpected field',
196
+ perfilDeOutroRuntime: 'runtime.profiles.invalid: profile of another runtime',
197
+ sensorDiverge: 'runtime.profiles.invalid: the sensor profile differs from the dispatch',
198
+ pastaPrivada: 'runtime.profiles.invalid: the private folder must be 0700 and owned by this user',
199
+ diretorioDeEstado: 'runtime.profiles.invalid: invalid state directory',
200
+ dataInvalida: (campo) => `runtime.profiles.invalid: invalid ${campo}`,
201
+ perfilInvalido: 'runtime.profiles.invalid: invalid profile',
202
+ campoInesperado: 'runtime.profiles.invalid: unexpected field in the profile',
203
+ estadoDesconhecido: 'runtime.profiles.invalid: unknown profile state',
204
+ ultimaFalhaInvalida: 'runtime.profiles.invalid: invalid `ultimaFalha`',
205
+ storeInvalido: 'runtime.profiles.invalid: invalid store',
206
+ contratoEsperado: (contrato) => `runtime.profiles.invalid: contract ${contrato} expected`,
207
+ idRepetido: 'runtime.profiles.invalid: repeated profile id',
208
+ mesmoDiretorio: 'runtime.profiles.invalid: two profiles of the same runtime in the same directory',
209
+ arquivoIlegivel: 'runtime.profiles.invalid: profiles file unreadable or a symbolic link',
210
+ arquivoSemPermissao: 'runtime.profiles.invalid: the profiles file must be 0600 and owned by this user',
211
+ arquivoJson: 'runtime.profiles.invalid: profiles file with invalid JSON',
212
+ pastaTrocada: 'runtime.profiles.invalid: private folder swapped during the write',
213
+ storeOcupado: 'runtime.profiles.busy: profile store busy; try again',
214
+ perfilNaoExiste: (id) => `runtime.profiles.unknown: profile "${id}" does not exist (see: \`ork accounts list\`)`,
215
+ diretorioInacessivel: (codigo) => `runtime.profiles.invalid: profile directory not accessible (${codigo})`,
216
+ naoEDiretorio: 'runtime.profiles.invalid: the profile path is not a directory',
217
+ outroUsuario: 'runtime.profiles.invalid: the profile directory belongs to another user',
218
+ semLeituraEscrita: 'runtime.profiles.invalid: the profile directory lacks read and write access for this user',
219
+ runtimeSemPerfil: (runtime) => `runtime.profiles.invalid: runtime "${runtime}" does not take a profile`,
220
+ jaExiste: (id, desativadoEm) => `runtime.profiles.invalid: profile "${id}" already exists` +
221
+ (desativadoEm !== null ? ` (disabled on ${desativadoEm}; reactivate it with the same \`--runtime\` and \`--dir\`)` : ''),
222
+ jaHaPerfil: (runtime, dir) => `runtime.profiles.invalid: there is already a ${runtime} profile in ${dir}`,
223
+ mesmoDiretorioDoPerfil: (dir, id, real) => `runtime.profiles.invalid: ${dir} is the same directory as profile "${id}" (${real})`,
224
+ estaDesativado: (id) => `runtime.profiles.invalid: profile "${id}" is disabled`,
225
+ cotaExigePrazo: 'runtime.profiles.invalid: an exhausted quota needs `esgotadoAte`',
226
+ registroInvalido: 'runtime.profiles.invalid: invalid account registry',
227
+ contaInvalida: 'runtime.profiles.invalid: invalid shared account',
228
+ };