@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/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,12 @@ 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
- if (!(0, runtimes_1.runtimeConhecido)(m[1]))
121
- throw new Error(`fallback com runtime desconhecido: "${m[1]}" (homologados: ${runtimes_1.ORDEM_DOS_RUNTIMES.join(', ')})`);
120
+ throw new Error((0, locale_1.msg)().setup.fallbackInvalido(item));
121
+ // RM-067 (F4b, G9): desde a F4 todo runtime do registro e de bloco; a recusa lista os que o fallback aceita.
122
+ if (!(0, runtimes_1.runtimeDeBloco)(m[1]))
123
+ throw new Error((0, locale_1.msg)().setup.fallbackDesconhecido(m[1], runtimes_1.RUNTIMES_DE_BLOCO.join(', ')));
122
124
  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)`);
125
+ throw new Error((0, locale_1.msg)().setup.fallbackRepetido(m[1]));
124
126
  vistos.add(m[1]);
125
127
  return item.trim();
126
128
  });
@@ -133,7 +135,7 @@ function normalizarFallback(valor, principal) {
133
135
  const saida = [];
134
136
  for (const item of valor) {
135
137
  const m = typeof item === 'string' ? ENTRADA_DE_FALLBACK.exec(item) : null;
136
- if (!m || !(0, runtimes_1.runtimeConhecido)(m[1]) || vistos.has(m[1]))
138
+ if (!m || !(0, runtimes_1.runtimeDeBloco)(m[1]) || vistos.has(m[1]))
137
139
  continue;
138
140
  vistos.add(m[1]);
139
141
  saida.push(item);
@@ -164,7 +166,7 @@ function validarLimitesDeBloco(valor) {
164
166
  const n = limites[campo];
165
167
  if (typeof n !== 'number' || !Number.isSafeInteger(n) || n < (campo === 'duracaoMs' ? 1 : 0) ||
166
168
  (campo === 'duracaoMs' && n > MAX_INSTANTE_MS)) {
167
- throw new Error(`limites.${campo} deve ser inteiro ${campo === 'duracaoMs' ? 'positivo' : 'nao negativo'}, finito e representavel`);
169
+ throw new Error((0, locale_1.msg)().setup.limiteInvalido(campo, campo === 'duracaoMs'));
168
170
  }
169
171
  }
170
172
  return {
@@ -176,17 +178,17 @@ function validarConfigComLimites(config) {
176
178
  if (!Object.hasOwn(config, 'limites'))
177
179
  return;
178
180
  validarLimitesDeBloco(config.limites);
179
- if (typeof config.runtime !== 'string' || !(0, runtimes_1.runtimeConhecido)(config.runtime) ||
181
+ if (typeof config.runtime !== 'string' || !(0, runtimes_1.runtimeDeBloco)(config.runtime) ||
180
182
  typeof config.model !== 'string' || config.model.trim() === '' ||
181
183
  typeof config.effort !== 'string' || config.effort.trim() === '') {
182
- throw new Error('bloco com limites exige runtime conhecido, model e effort explicitos validos');
184
+ throw new Error((0, locale_1.msg)().setup.blocoComLimites);
183
185
  }
184
186
  }
185
187
  /** Valida tambem entradas que a normalizacao antiga descartaria. */
186
188
  function validarEstruturaSetup(valor) {
187
189
  const setup = objeto(valor, 'setup');
188
190
  if (setup.contrato !== undefined && setup.contrato !== exports.CONTRATO_DO_SETUP) {
189
- throw new Error('contrato de setup incompativel');
191
+ throw new Error((0, locale_1.msg)().setup.contratoIncompativel);
190
192
  }
191
193
  if (setup.modos === undefined)
192
194
  return;
@@ -195,13 +197,13 @@ function validarEstruturaSetup(valor) {
195
197
  if (configModo.blocos === undefined)
196
198
  continue;
197
199
  if (!Array.isArray(configModo.blocos))
198
- throw new Error(`blocos de ${modo} devem ser array`);
200
+ throw new Error((0, locale_1.msg)().setup.blocosArray(modo));
199
201
  for (const [i, valorBloco] of configModo.blocos.entries()) {
200
202
  const config = objeto(valorBloco, `bloco ${modo}/${i + 1}`);
201
203
  validarConfigComLimites(config);
202
204
  if (Object.hasOwn(config, 'limites') && (setup.contrato !== exports.CONTRATO_DO_SETUP ||
203
205
  !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');
206
+ throw new Error((0, locale_1.msg)().setup.limitesConhecidos);
205
207
  }
206
208
  }
207
209
  }
@@ -273,7 +275,7 @@ function lerSetup(raiz) {
273
275
  bruto = (0, util_1.lerJson)(caminho);
274
276
  }
275
277
  catch (e) {
276
- throw new Error(`setup invalido (${caminho}): ${e.message}`);
278
+ throw new Error((0, locale_1.msg)().setup.setupInvalido(caminho, e.message));
277
279
  }
278
280
  validarEstruturaSetup(bruto);
279
281
  const modosBrutos = (bruto.modos ?? {});
@@ -287,7 +289,7 @@ function lerSetup(raiz) {
287
289
  if (doArquivo[i] === undefined)
288
290
  return blocoPadraoDoModo(modo);
289
291
  const b = doArquivo[i];
290
- const runtime = typeof b.runtime === 'string' && (0, runtimes_1.runtimeConhecido)(b.runtime)
292
+ const runtime = typeof b.runtime === 'string' && (0, runtimes_1.runtimeDeBloco)(b.runtime)
291
293
  ? b.runtime
292
294
  : doModo.runtime;
293
295
  return {
@@ -324,7 +326,7 @@ function gravarSetup(raiz, setup) {
324
326
  function versionarSetup(raiz, por = 'owner') {
325
327
  const caminho = caminhoSetupVersionado(raiz);
326
328
  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`);
329
+ throw new Error((0, locale_1.msg)().setup.versionadoExiste(exports.NOME_SETUP_VERSIONADO));
328
330
  const origem = origemDoSetup(raiz);
329
331
  const setup = lerSetup(raiz);
330
332
  validarEstruturaSetup(setup);
@@ -358,12 +360,12 @@ function limitesDoBloco(manifesto, setup, modo, fase) {
358
360
  if (!Array.isArray(permitidos) || permitidos.length === 0 ||
359
361
  permitidos.some(m => !modos_1.ORDEM_DOS_MODOS.includes(m)) ||
360
362
  !permitidos.includes(modo)) {
361
- throw new Error('playbook ativo exige modo permitido valido');
363
+ throw new Error((0, locale_1.msg)().setup.playbookModo);
362
364
  }
363
365
  for (const permitido of permitidos) {
364
366
  const blocos = setup.modos?.[permitido]?.blocos;
365
367
  if (!blocos || blocos.length !== modos_1.MODOS[permitido].blocos.length) {
366
- throw new Error(`playbook ativo exige todos os blocos de ${permitido}`);
368
+ throw new Error((0, locale_1.msg)().setup.playbookBlocos(permitido));
367
369
  }
368
370
  for (const config of blocos) {
369
371
  validarConfigComLimites(objeto(config, 'config do bloco'));
@@ -372,12 +374,12 @@ function limitesDoBloco(manifesto, setup, modo, fase) {
372
374
  }
373
375
  const config = configDoBloco(setup, modo, fase);
374
376
  if (!config)
375
- throw new Error(`fase ${fase} fora do modo ${modo}`);
377
+ throw new Error((0, locale_1.msg)().setup.faseFora(fase, modo));
376
378
  return validarLimitesDeBloco(config.limites);
377
379
  }
378
380
  function instante(valor, campo) {
379
381
  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`);
382
+ throw new Error((0, locale_1.msg)().setup.instante(campo));
381
383
  }
382
384
  return valor;
383
385
  }
@@ -389,20 +391,20 @@ function validarIdentidade(valor) {
389
391
  camposExatos(id, ['threadId', 'execucaoId', 'modo', 'bloco'], 'identidade');
390
392
  for (const campo of ['threadId', 'execucaoId']) {
391
393
  if (typeof id[campo] !== 'string' || id[campo].trim() === '') {
392
- throw new Error(`identidade.${campo} deve ser texto nao vazio`);
394
+ throw new Error((0, locale_1.msg)().setup.identidadeTexto(campo));
393
395
  }
394
396
  }
395
397
  if (!modos_1.ORDEM_DOS_MODOS.includes(id.modo) ||
396
398
  typeof id.bloco !== 'number' || !Number.isSafeInteger(id.bloco) ||
397
399
  id.bloco < 1 || id.bloco > modos_1.MODOS[id.modo].blocos.length) {
398
- throw new Error('identidade de modo/bloco invalida');
400
+ throw new Error((0, locale_1.msg)().setup.identidadeModo);
399
401
  }
400
402
  return { threadId: id.threadId, execucaoId: id.execucaoId, modo: id.modo, bloco: id.bloco };
401
403
  }
402
404
  function semAmpliacao(limites, origem) {
403
405
  for (const campo of CAMPOS_LIMITES) {
404
406
  if (limites[campo] > origem[campo])
405
- throw new Error(`heranca nao pode ampliar limites.${campo}`);
407
+ throw new Error((0, locale_1.msg)().setup.herancaAmplia(campo));
406
408
  }
407
409
  }
408
410
  /**
@@ -415,7 +417,7 @@ function iniciarPrazoDoBloco(manifesto, setup, identidade, fase, agoraMs) {
415
417
  return null;
416
418
  const id = validarIdentidade(identidade);
417
419
  if (!modos_1.MODOS[id.modo].blocos[id.bloco - 1].fases.includes(fase)) {
418
- throw new Error('identidade do bloco diverge da fase selecionada');
420
+ throw new Error((0, locale_1.msg)().setup.identidadeFase);
419
421
  }
420
422
  const inicio = instante(agoraMs, 'iniciadaEmMs');
421
423
  const deadline = somarPrazo(inicio, limites.duracaoMs);
@@ -429,11 +431,11 @@ function validarPrazo(valor, esperada) {
429
431
  camposExatos(p, ['versao', 'identidade', 'iniciadaEmMs', 'deadlineOriginalMs',
430
432
  'limitesOriginais', 'deadlineMs', 'limites', 'observadoEmMs'], 'prazo');
431
433
  if (p.versao !== 1)
432
- throw new Error('versao de prazo incompativel');
434
+ throw new Error((0, locale_1.msg)().setup.prazoVersao);
433
435
  const identidade = validarIdentidade(p.identidade);
434
436
  const idEsperada = validarIdentidade(esperada);
435
437
  if (Object.keys(identidade).some(c => identidade[c] !== idEsperada[c])) {
436
- throw new Error('identidade da execucao divergente');
438
+ throw new Error((0, locale_1.msg)().setup.identidadeDivergente);
437
439
  }
438
440
  const limitesOriginais = validarLimitesDeBloco(p.limitesOriginais);
439
441
  const limites = validarLimitesDeBloco(p.limites);
@@ -444,7 +446,7 @@ function validarPrazo(valor, esperada) {
444
446
  const deadlineMs = instante(p.deadlineMs, 'deadlineMs');
445
447
  if (deadlineOriginalMs !== somarPrazo(iniciadaEmMs, limitesOriginais.duracaoMs) ||
446
448
  deadlineMs !== somarPrazo(iniciadaEmMs, limites.duracaoMs) || observadoEmMs < iniciadaEmMs) {
447
- throw new Error('origem/deadline do prazo inconsistente');
449
+ throw new Error((0, locale_1.msg)().setup.prazoInconsistente);
448
450
  }
449
451
  return { versao: 1, identidade, iniciadaEmMs, deadlineOriginalMs, limitesOriginais, deadlineMs, limites, observadoEmMs };
450
452
  }
@@ -457,7 +459,7 @@ function consumirPrazoDoBloco(snapshot, identidadeEsperada, agoraMs, atividade =
457
459
  const prazo = validarPrazo(snapshot, identidadeEsperada);
458
460
  const agoraValidado = instante(agoraMs, 'agoraMs');
459
461
  if (agoraValidado < prazo.observadoEmMs)
460
- throw new Error('relogio regressivo no prazo');
462
+ throw new Error((0, locale_1.msg)().setup.relogioRegressivo);
461
463
  const a = objeto(atividade, 'atividade');
462
464
  if (a.tipo === 'trabalho') {
463
465
  camposExatos(a, ['tipo'], 'atividade');
@@ -465,10 +467,10 @@ function consumirPrazoDoBloco(snapshot, identidadeEsperada, agoraMs, atividade =
465
467
  else if (a.tipo === 'espera_lease' || a.tipo === 'espera_score') {
466
468
  camposExatos(a, ['tipo', 'processosAtivos'], 'atividade');
467
469
  if (a.processosAtivos !== 0)
468
- throw new Error('espera exige ausencia comprovada de processos ativos');
470
+ throw new Error((0, locale_1.msg)().setup.esperaComProcesso);
469
471
  }
470
472
  else {
471
- throw new Error('atividade de prazo desconhecida');
473
+ throw new Error((0, locale_1.msg)().setup.atividadeDesconhecida);
472
474
  }
473
475
  prazo.observadoEmMs = agoraValidado;
474
476
  const restanteMs = Math.max(0, prazo.deadlineMs - agoraValidado);
@@ -481,13 +483,13 @@ function consumirPrazoDoBloco(snapshot, identidadeEsperada, agoraMs, atividade =
481
483
  function herdarPrazoDoBloco(origem, identidadeEsperada, agoraMs, limitesSolicitados) {
482
484
  const consumo = consumirPrazoDoBloco(origem, identidadeEsperada, agoraMs);
483
485
  if (consumo.estado !== 'ativo')
484
- throw new Error('prazo expirado: heranca recusada');
486
+ throw new Error((0, locale_1.msg)().setup.prazoExpirado);
485
487
  const prazo = consumo.prazo;
486
488
  const limites = validarLimitesDeBloco(limitesSolicitados === undefined ? prazo.limites : limitesSolicitados);
487
489
  semAmpliacao(limites, prazo.limites);
488
490
  const deadlineMs = somarPrazo(prazo.iniciadaEmMs, limites.duracaoMs);
489
491
  if (deadlineMs <= agoraMs)
490
- throw new Error('prazo reduzido ja expirado');
492
+ throw new Error((0, locale_1.msg)().setup.prazoReduzido);
491
493
  return { ...prazo, limites, deadlineMs };
492
494
  }
493
495
  /** A config do bloco e o default pos-instalacao? */
@@ -525,20 +527,18 @@ function editarBloco(raiz, modo, bloco, edicao, por = 'owner') {
525
527
  if (!Number.isInteger(bloco) || bloco < 1 || bloco > def.blocos.length) {
526
528
  return {
527
529
  ...base,
528
- erro: `bloco ${bloco} nao existe no modo ${def.tag}: ele tem ${def.blocos.length} bloco(s)`,
530
+ erro: (0, locale_1.msg)().setup.blocoInexistente(bloco, def.tag, def.blocos.length),
529
531
  };
530
532
  }
531
- if (edicao.runtime !== undefined && !(0, runtimes_1.runtimeConhecido)(edicao.runtime)) {
532
- return {
533
- ...base,
534
- erro: `runtime desconhecido: "${edicao.runtime}" (homologados: ${runtimes_1.ORDEM_DOS_RUNTIMES.join(', ')})`,
535
- };
533
+ if (edicao.runtime !== undefined && !(0, runtimes_1.runtimeDeBloco)(edicao.runtime)) {
534
+ // RM-067 (F4b, G9): a recusa lista os runtimes que o bloco aceita, o grok entre eles desde a F4.
535
+ return { ...base, erro: (0, locale_1.msg)().setup.runtimeDesconhecido(edicao.runtime, runtimes_1.RUNTIMES_DE_BLOCO.join(', ')) };
536
536
  }
537
537
  const atual = setup.modos[modo].blocos[bloco - 1];
538
538
  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.' };
539
+ return { ...base, erro: (0, locale_1.msg)().setup.modeloComRuntime };
540
540
  if (!(edicao.model ?? atual.model).trim())
541
- return { ...base, erro: 'setup.model.required: modelo pendente neste bloco; informe --model antes de salvar.' };
541
+ return { ...base, erro: (0, locale_1.msg)().setup.modeloPendente };
542
542
  const de = { ...atual };
543
543
  const runtimeNovo = edicao.runtime ?? atual.runtime;
544
544
  let fallback;
@@ -613,15 +613,15 @@ function registrarSetupNoLedger(raiz, dados) {
613
613
  function linhaDaOrigemDoSetup(raiz) {
614
614
  const origem = origemDoSetup(raiz);
615
615
  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.' : '');
616
+ return (0, locale_1.msg)().setup.origem.versionado(exports.NOME_SETUP_VERSIONADO, fs.existsSync(caminhoSetupLocal(raiz)));
618
617
  }
619
618
  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.';
619
+ return (0, locale_1.msg)().setup.origem.local;
620
+ return (0, locale_1.msg)().setup.origem.padrao;
622
621
  }
623
622
  /** Tabela de um modo: cada bloco com sua config e a marca do que saiu do default. */
624
623
  function textoDoSetup(raiz, modo) {
624
+ const m = (0, locale_1.msg)().setup.tabela;
625
625
  const def = (0, modos_1.definicaoDoModo)(modo);
626
626
  const setup = lerSetup(raiz);
627
627
  const linhas = def.blocos.map((b, i) => {
@@ -630,22 +630,23 @@ function textoDoSetup(raiz, modo) {
630
630
  String(i + 1),
631
631
  b.fases.join('-'),
632
632
  cfg.runtime,
633
- cfg.model || '(modelo pendente)',
633
+ cfg.model || m.modeloPendente,
634
634
  cfg.effort,
635
635
  cfg.fallback?.join(', ') || '-',
636
- ehPadrao(cfg, modo) ? 'default' : 'customizado',
636
+ ehPadrao(cfg, modo) ? m.default : m.customizado,
637
637
  ];
638
638
  });
639
639
  const saida = [];
640
- saida.push(`Setup do modo ${def.tag} (${def.blocos.length} bloco(s), ${def.pausas} pausa(s))`);
640
+ saida.push(m.titulo(def.tag, def.blocos.length, def.pausas));
641
641
  saida.push('');
642
- saida.push((0, util_1.tabela)(['BLOCO', 'FASES', 'RUNTIME', 'MODEL', 'EFFORT', 'FALLBACK', 'ORIGEM'], linhas));
642
+ saida.push((0, util_1.tabela)([...m.cabecalho], linhas));
643
643
  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)`);
644
+ saida.push(m.editar(modo));
645
+ saida.push(m.fallback(modo));
646
646
  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(', ')}`);
647
+ saida.push(m.resetar(modo, `${padrao.runtime}/${padrao.model}/${padrao.effort}`));
648
+ // RM-067 (F4b, G9): a tela lista os runtimes de bloco, os que o `--runtime` e o `--fallback` do setup aceitam.
649
+ saida.push(m.runtimes(runtimes_1.RUNTIMES_DE_BLOCO.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');