@orkastery/cli 0.5.3 → 0.5.6

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 (212) hide show
  1. package/adapters/claude-code/README.md +158 -0
  2. package/adapters/claude-code/mods/autoridade.json +56 -0
  3. package/adapters/claude-code/mods/ork-clima/.claude-plugin/plugin.json +14 -0
  4. package/adapters/claude-code/mods/ork-clima/hooks/contas.ts +283 -0
  5. package/adapters/claude-code/mods/ork-clima/hooks/hooks.json +3 -0
  6. package/adapters/claude-code/mods/ork-clima/hooks/previsao.ts +393 -0
  7. package/adapters/claude-code/mods/ork-clima/hooks/register.ts +205 -0
  8. package/adapters/claude-code/mods/ork-clima/orkastery-mod.json +5 -0
  9. package/adapters/claude-code/mods/ork-clima/types/index.d.ts +80 -0
  10. package/adapters/claude-code/mods/ork-freio/.claude-plugin/plugin.json +14 -0
  11. package/adapters/claude-code/mods/ork-freio/hooks/carga.ts +160 -0
  12. package/adapters/claude-code/mods/ork-freio/hooks/conferencia.ts +309 -0
  13. package/adapters/claude-code/mods/ork-freio/hooks/hooks.json +3 -0
  14. package/adapters/claude-code/mods/ork-freio/hooks/lote.ts +270 -0
  15. package/adapters/claude-code/mods/ork-freio/hooks/register.ts +285 -0
  16. package/adapters/claude-code/mods/ork-freio/orkastery-mod.json +5 -0
  17. package/adapters/claude-code/mods/ork-freio/types/index.d.ts +127 -0
  18. package/adapters/claude-code/mods/ork-mesa/.claude-plugin/plugin.json +14 -0
  19. package/adapters/claude-code/mods/ork-mesa/hooks/cartoes.tsx +246 -0
  20. package/adapters/claude-code/mods/ork-mesa/hooks/decidir.ts +110 -0
  21. package/adapters/claude-code/mods/ork-mesa/hooks/fila.ts +253 -0
  22. package/adapters/claude-code/mods/ork-mesa/hooks/hooks.json +3 -0
  23. package/adapters/claude-code/mods/ork-mesa/hooks/obvia.ts +98 -0
  24. package/adapters/claude-code/mods/ork-mesa/hooks/register.tsx +493 -0
  25. package/adapters/claude-code/mods/ork-mesa/orkastery-mod.json +5 -0
  26. package/adapters/claude-code/mods/ork-mesa/types/index.d.ts +131 -0
  27. package/adapters/claude-code/mods/ork-pista/.claude-plugin/plugin.json +14 -0
  28. package/adapters/claude-code/mods/ork-pista/hooks/acoes.ts +71 -0
  29. package/adapters/claude-code/mods/ork-pista/hooks/ci.ts +117 -0
  30. package/adapters/claude-code/mods/ork-pista/hooks/hooks.json +3 -0
  31. package/adapters/claude-code/mods/ork-pista/hooks/pista.tsx +356 -0
  32. package/adapters/claude-code/mods/ork-pista/hooks/register.tsx +439 -0
  33. package/adapters/claude-code/mods/ork-pista/orkastery-mod.json +5 -0
  34. package/adapters/claude-code/mods/ork-pista/types/index.d.ts +85 -0
  35. package/adapters/claude-code/mods/ork-ponte/.claude-plugin/plugin.json +13 -0
  36. package/adapters/claude-code/mods/ork-ponte/hooks/faixa.tsx +57 -0
  37. package/adapters/claude-code/mods/ork-ponte/hooks/guarda.ts +410 -0
  38. package/adapters/claude-code/mods/ork-ponte/hooks/hooks.json +3 -0
  39. package/adapters/claude-code/mods/ork-ponte/hooks/mostrado.ts +55 -0
  40. package/adapters/claude-code/mods/ork-ponte/hooks/nucleo.ts +157 -0
  41. package/adapters/claude-code/mods/ork-ponte/hooks/papel.ts +42 -0
  42. package/adapters/claude-code/mods/ork-ponte/hooks/register.ts +331 -0
  43. package/adapters/claude-code/mods/ork-ponte/hooks/vigia.ts +76 -0
  44. package/adapters/claude-code/mods/ork-ponte/orkastery-mod.json +5 -0
  45. package/adapters/claude-code/mods/ork-ponte/types/index.d.ts +178 -0
  46. package/adapters/claude-code/mods/ork-portao/.claude-plugin/plugin.json +14 -0
  47. package/adapters/claude-code/mods/ork-portao/hooks/hooks.json +3 -0
  48. package/adapters/claude-code/mods/ork-portao/hooks/lease.ts +201 -0
  49. package/adapters/claude-code/mods/ork-portao/hooks/plano.ts +304 -0
  50. package/adapters/claude-code/mods/ork-portao/hooks/register.ts +339 -0
  51. package/adapters/claude-code/mods/ork-portao/hooks/verify.ts +152 -0
  52. package/adapters/claude-code/mods/ork-portao/orkastery-mod.json +5 -0
  53. package/adapters/claude-code/mods/ork-portao/types/index.d.ts +60 -0
  54. package/adapters/claude-code/mods/ork-radar/.claude-plugin/plugin.json +14 -0
  55. package/adapters/claude-code/mods/ork-radar/hooks/colisao.ts +420 -0
  56. package/adapters/claude-code/mods/ork-radar/hooks/hooks.json +3 -0
  57. package/adapters/claude-code/mods/ork-radar/hooks/mapa.tsx +322 -0
  58. package/adapters/claude-code/mods/ork-radar/hooks/register.tsx +470 -0
  59. package/adapters/claude-code/mods/ork-radar/orkastery-mod.json +5 -0
  60. package/adapters/claude-code/mods/ork-radar/types/index.d.ts +72 -0
  61. package/adapters/claude-code/mods/ork-sentinela/.claude-plugin/plugin.json +14 -0
  62. package/adapters/claude-code/mods/ork-sentinela/hooks/alertas.ts +85 -0
  63. package/adapters/claude-code/mods/ork-sentinela/hooks/despacho.ts +156 -0
  64. package/adapters/claude-code/mods/ork-sentinela/hooks/hooks.json +3 -0
  65. package/adapters/claude-code/mods/ork-sentinela/hooks/register.ts +511 -0
  66. package/adapters/claude-code/mods/ork-sentinela/hooks/vigia.ts +186 -0
  67. package/adapters/claude-code/mods/ork-sentinela/orkastery-mod.json +5 -0
  68. package/adapters/claude-code/mods/ork-sentinela/types/index.d.ts +65 -0
  69. package/adapters/claude-code/mods/ork-torre/.claude-plugin/plugin.json +14 -0
  70. package/adapters/claude-code/mods/ork-torre/hooks/agenda.ts +60 -0
  71. package/adapters/claude-code/mods/ork-torre/hooks/detalhe.tsx +236 -0
  72. package/adapters/claude-code/mods/ork-torre/hooks/frases.ts +42 -0
  73. package/adapters/claude-code/mods/ork-torre/hooks/hooks.json +3 -0
  74. package/adapters/claude-code/mods/ork-torre/hooks/painel.tsx +344 -0
  75. package/adapters/claude-code/mods/ork-torre/hooks/rede.ts +97 -0
  76. package/adapters/claude-code/mods/ork-torre/hooks/register.tsx +437 -0
  77. package/adapters/claude-code/mods/ork-torre/orkastery-mod.json +5 -0
  78. package/adapters/claude-code/mods/ork-torre/types/index.d.ts +108 -0
  79. package/adapters/hermes/skills/orkastery-devmaster/SKILL.md +1 -1
  80. package/adapters/openclaw/README.md +2 -1
  81. package/adapters/openclaw/openclaw.plugin.json +1 -1
  82. package/adapters/openclaw/package.json +1 -1
  83. package/assets/docs-en/markdownlint-cli2.jsonc +22 -0
  84. package/assets/docs-en/padroes/documentacao-de-produto.md +135 -0
  85. package/assets/docs-en/padroes/roadmap-de-produto.md +100 -0
  86. package/assets/docs-en/produto/README.md +14 -0
  87. package/assets/docs-en/produto/_modelo-feature.md +62 -0
  88. package/assets/docs-en/roadmap/README.md +14 -0
  89. package/assets/docs-en/roadmap/_modelo-item.md +75 -0
  90. package/dist/adapters/claude-bg.js +77 -13
  91. package/dist/adapters/codex.js +10 -1
  92. package/dist/agents-md.js +24 -15
  93. package/dist/auditrun.js +17 -2
  94. package/dist/board.js +4 -3
  95. package/dist/branch-de-estado.js +23 -1
  96. package/dist/catalogo.js +33 -0
  97. package/dist/ci.js +13 -7
  98. package/dist/claims-conferir.js +342 -0
  99. package/dist/claims.js +3 -1
  100. package/dist/company-brain-client.js +36 -1
  101. package/dist/company-brain-journal.js +2 -1
  102. package/dist/company-brain-migration.js +36 -1
  103. package/dist/conducao-sentinela.js +388 -0
  104. package/dist/conducao-texto.js +12 -18
  105. package/dist/conducao.js +122 -30
  106. package/dist/conhecimento.js +490 -0
  107. package/dist/docs.js +22 -8
  108. package/dist/doctor-pulse-cron.js +182 -27
  109. package/dist/doctor-rede.js +18 -17
  110. package/dist/doctor.js +115 -111
  111. package/dist/entrega-pr.js +22 -21
  112. package/dist/escopo-escrita.js +10 -1
  113. package/dist/estado-thread.js +23 -1
  114. package/dist/experiencia-instalacao.js +45 -25
  115. package/dist/fabrica-batida.js +310 -0
  116. package/dist/fabrica-estado.js +38 -8
  117. package/dist/fabrica-publicar.js +3 -1
  118. package/dist/fila-pesada.js +444 -0
  119. package/dist/fix.js +3 -2
  120. package/dist/forja.js +1 -1
  121. package/dist/gates.js +3 -28
  122. package/dist/handoff.js +10 -6
  123. package/dist/hitl-local-receipt.js +2 -0
  124. package/dist/hitl-resumo.js +29 -3
  125. package/dist/hitl-tempo-parado.js +4 -4
  126. package/dist/hitl.js +29 -33
  127. package/dist/horario.js +14 -7
  128. package/dist/hosts.js +52 -1
  129. package/dist/impedimento.js +108 -14
  130. package/dist/index.js +623 -521
  131. package/dist/indice.js +7 -1
  132. package/dist/init.js +43 -47
  133. package/dist/instabilidade.js +144 -0
  134. package/dist/integracoes-locais.js +2 -0
  135. package/dist/intelligence-graph-cli.js +92 -21
  136. package/dist/intelligence-graph-contexto.js +56 -17
  137. package/dist/intelligence-graph-contract.js +2 -1
  138. package/dist/intelligence-graph-extract-md.js +56 -4
  139. package/dist/intelligence-graph-extract-ts.js +71 -3
  140. package/dist/intelligence-graph-query.js +66 -19
  141. package/dist/ledger.js +15 -1
  142. package/dist/liveness.js +6 -3
  143. package/dist/locale-ajuda.js +761 -0
  144. package/dist/locale-gerados.js +160 -0
  145. package/dist/locale-master.js +99 -0
  146. package/dist/locale-onboarding.js +92 -0
  147. package/dist/locale-phase.js +151 -0
  148. package/dist/locale-pulse.js +211 -0
  149. package/dist/locale-retry.js +385 -0
  150. package/dist/locale-roadmap.js +102 -0
  151. package/dist/locale-ship.js +494 -0
  152. package/dist/locale-thread.js +277 -0
  153. package/dist/locale-verify.js +125 -0
  154. package/dist/locale.js +714 -0
  155. package/dist/manifest.js +129 -3
  156. package/dist/maquina.js +23 -4
  157. package/dist/master-digest.js +6 -1
  158. package/dist/master-nota.js +4 -6
  159. package/dist/master.js +21 -24
  160. package/dist/mcp-artifacts.js +11 -2
  161. package/dist/mcp-git.js +23 -6
  162. package/dist/mcp-grafo.js +7 -4
  163. package/dist/mcp-server.js +8 -2
  164. package/dist/mcp-ship.js +3 -1
  165. package/dist/mcp-verify.js +6 -1
  166. package/dist/modos.js +3 -6
  167. package/dist/network-roadmap.js +5 -2
  168. package/dist/noctum-arco.js +911 -0
  169. package/dist/noctum-capacidade.js +141 -0
  170. package/dist/noctum-envelope.js +810 -0
  171. package/dist/noctum-execucao.js +304 -0
  172. package/dist/noctum-fila.js +280 -0
  173. package/dist/ocupacao.js +29 -2
  174. package/dist/onboarding.js +40 -21
  175. package/dist/orkmind.js +9 -2
  176. package/dist/orquestracao.js +13 -12
  177. package/dist/parado-no-condutor.js +34 -9
  178. package/dist/phase.js +94 -39
  179. package/dist/policies.js +4 -4
  180. package/dist/portfolio.js +4 -2
  181. package/dist/postura-local.js +234 -0
  182. package/dist/preflight.js +11 -10
  183. package/dist/procedencia.js +225 -0
  184. package/dist/projeto-alvo.js +127 -4
  185. package/dist/prompts.js +6 -2
  186. package/dist/pulse-delivery.js +13 -2
  187. package/dist/pulse.js +52 -19
  188. package/dist/ratelimit.js +4 -2
  189. package/dist/redacao-saida.js +63 -0
  190. package/dist/rede-status.js +3 -2
  191. package/dist/retry.js +232 -148
  192. package/dist/roadmap-reservas.js +20 -3
  193. package/dist/roadmap-status.js +129 -33
  194. package/dist/runtime-context.js +181 -3
  195. package/dist/runtimes.js +2 -1
  196. package/dist/session-events.js +7 -3
  197. package/dist/session-watcher-claude.js +7 -1
  198. package/dist/session-watcher.js +185 -33
  199. package/dist/sessoes-contas.js +1 -1
  200. package/dist/ship-publicar.js +800 -0
  201. package/dist/ship.js +84 -81
  202. package/dist/steal.js +77 -0
  203. package/dist/thread-close.js +3 -2
  204. package/dist/thread.js +153 -82
  205. package/dist/util.js +8 -1
  206. package/dist/verify.js +141 -52
  207. package/dist/vida-da-thread.js +254 -0
  208. package/dist/worktree-local.js +165 -0
  209. package/dist/worktree.js +20 -0
  210. package/dist/yaml.js +27 -8
  211. package/package.json +1 -1
  212. package/schemas/code-artifact-graph.v1.schema.json +2 -1
@@ -0,0 +1,160 @@
1
+ "use strict";
2
+ /**
3
+ * RM-061, fatia F3a: a familia `gerados` do catalogo, o texto dos arquivos que o CLI escreve para pessoas e
4
+ * agentes lerem: os comentarios do `orkastery.yaml` e o bloco do `AGENTS.md` que o `ork init` gera, o bloco da
5
+ * experiencia que o `ork adapter install` escreve e o que o `ork docs init` imprime. O pt-BR e a fonte; o ingles e
6
+ * tipado por ele. Sem import do nucleo.
7
+ *
8
+ * A lingua de um arquivo gerado e a do dono no momento da geracao (D1 da thread ork-rm061f3a): o gerador recebe
9
+ * o locale por parametro, com pt-BR por omissao, e so a entrada do CLI passa a lingua do dono (D2). So o texto
10
+ * para pessoas mora aqui (D3): as chaves, os valores e os exemplos comentados do YAML ficam no esqueleto de
11
+ * `init.ts`, um so para as duas linguas, e os marcadores dos blocos ficam nos modulos donos. Cada comentario do
12
+ * YAML e uma ou mais linhas de texto, sem o `#` e sem o recuo, que o esqueleto acrescenta. O valor de exemplo
13
+ * de `owner.language` (comentado) mostra a lingua do proprio arquivo: quem o descomenta fica na lingua em que leu.
14
+ */
15
+ Object.defineProperty(exports, "__esModule", { value: true });
16
+ exports.GERADOS_EN = exports.GERADOS_PT_BR = void 0;
17
+ exports.GERADOS_PT_BR = {
18
+ /** Os comentarios do `orkastery.yaml` (`manifestoYaml`, em `init.ts`). */
19
+ manifesto: {
20
+ cabecalho: 'Manifesto do Orkastery (v1, bloco B0)\nGerado por `ork init`. Fonte unica da configuracao do projeto.\n' +
21
+ 'Limite duro de 16 KB: prosa longa vai para a memoria com tag, nao para este arquivo.',
22
+ abbrev: 'abbrev: ate 3 caracteres [a-z0-9], parte 1 do slug de sessao, unica no workspace',
23
+ fuso: 'fuso do dono (nome IANA): todo horario mostrado a pessoas usa este fuso.\nAusente: fuso do sistema. Exemplo:',
24
+ preferencias: (comando) => `Preferências: ${comando}`,
25
+ exemploDeIdioma: 'pt-BR',
26
+ idiomaAusente: 'ausente: locale do sistema',
27
+ experienciaFalse: 'false desativa o pacote na próxima instalação do adaptador',
28
+ runtimes: 'Runtimes homologados:\n claude-bg (padrao, mais maduro): despacha `claude --bg`, sessao visivel no app\n' +
29
+ ' e em `claude agents --json`\n codex: despacha `codex exec` headless na sessao autenticada do Codex CLI,\n' +
30
+ ' verificado no rollout de $CODEX_HOME/sessions (requer `codex login`)',
31
+ providerPolicy: 'subscription-only: proibido despachar por provider pago (cobra por token, fora da assinatura)',
32
+ sandbox: 'sandbox do runtime codex: read-only | workspace-write | danger-full-access\n' +
33
+ '(danger-full-access SO onde o bubblewrap nao roda; `ork doctor` tem a sonda)',
34
+ modoPadrao: 'modo usado quando o pedido do builder nao traz #TAG',
35
+ porThread: 'true: o ork thread new cria a worktree e a branch da thread sem flag (--sem-worktree cria sem);\n' +
36
+ 'false ou ausente: só com --worktree auto',
37
+ naoDetectado: 'nao detectado',
38
+ ci: 'Ative depois de publicar o workflow e tornar ork-verify um check obrigatório.',
39
+ ciComando: 'perfil hermético opcional do runner; sem ele, usa verify acima',
40
+ staleAfter: 'thread despachada sem atividade (ledger parado, sessao nao-working) por mais que\n' +
41
+ 'isto NAO ocupa vaga do escalonador: a vaga volta para quem esta pronto para rodar',
42
+ handoff: 'gate de tokens (bloco B1): rotaciona a sessao acima destas ocupacoes de janela',
43
+ retry: 'autonomia do bloco B3: retry tipado por motivo de gate e fila duravel de rate limit\n' +
44
+ 'max_tentativas e o LIMITE DE ESCALACAO: estourado, pausa qualquer modo, ate #Auto',
45
+ janelaPadrao: 'janela usada so quando o runtime diz "rate limit" e NAO diz a hora do reset\n' +
46
+ '(fica marcada como estimativa na fila; o ork nunca inventa horario medido)',
47
+ memoriaModo: 'files = fallback honesto sem OrkMind (handoff por arquivos, ponteiro path#ancora)\n' +
48
+ 'orkmind = camada semantica do bloco B6 por cima, com degradacao honesta para files',
49
+ databaseUrl: 'NOME da variavel de ambiente com a DSN da base PROPRIA deste tenant, nunca a DSN.\n' +
50
+ 'Vazio = o regime orkmind nao liga (o ork nao adivinha base: base alheia e pior que\n' +
51
+ 'base nenhuma, precedente do incidente memory-orkmind).',
52
+ embedding: 'busca por significado (ork memory search --texto): sem o bloco, provider none (desligada).\n' +
53
+ 'api_key_env recebe o NOME da variavel com a chave dedicada, nunca o valor.',
54
+ modeloOffline: 'modelo local offline, ex.: intfloat/multilingual-e5-small',
55
+ audit: 'governanca de custo dos auditores periodicos (bloco B5)\n' +
56
+ 'janela ociosa da assinatura: fora dela a rodada so anda com --agora <quem>',
57
+ },
58
+ /** O bloco do `AGENTS.md` (`blocoAgentsMd`, em `agents-md.ts`), entre os marcadores do `ork init`. */
59
+ agents: {
60
+ projeto: (nome, abbrev, branch) => `Projeto: **${nome}** (${abbrev}). Branch base: \`${branch}\`.`,
61
+ comece: 'Comece com `ork doctor`, `ork onboarding` e `ork thread status <thread>`.',
62
+ ciclo: 'Conduza o ciclo GOAL → PLAN → GO → CHECK → SHIP → MASTER pelo `ork`.',
63
+ modo: (modos) => `Respeite o modo da thread: ${modos}.`,
64
+ worktree: 'Edite produto somente na worktree vinculada; estado em `.orkastery/` pertence ao núcleo.',
65
+ fases: 'PLAN não implementa. GO usa commits atômicos. CHECK não corrige. SHIP acontece por `ork ship`.',
66
+ claims: 'Toda alegação exige claim e comando reproduzível; self-report não é evidência.',
67
+ master: 'MASTER por omissão só da sua thread: `ork master <thread> --aceitar-omissao`; sem a thread, fecha também as ' +
68
+ 'entregas de outras frentes.',
69
+ verificacoes: 'Verificações do manifesto:',
70
+ rodape: 'Este bloco é mantido por `ork init`. Edite livremente o restante do arquivo.',
71
+ /** O `ork init` recusa o `AGENTS.md` com marcadores repetidos ou fora de ordem, sem escrever. */
72
+ marcadoresAmbiguos: 'AGENTS.md possui marcadores Orkastery ambiguos; corrija o bloco antes de rodar ork init',
73
+ },
74
+ /**
75
+ * O bloco da experiencia que `ork adapter install` poe no `CLAUDE.md` (no `AGENTS.md`, para o Codex), entre os
76
+ * marcadores de `experiencia-instalacao.ts`. O diretorio das skills entra como JSON; sem recibo, o bloco e
77
+ * reconhecido pelo texto antes e depois dele, em qualquer das duas linguas (D8).
78
+ */
79
+ experiencia: {
80
+ titulo: 'Experiência de orquestração',
81
+ consulte: 'Consulte `ork experiencia show --json` neste projeto. Se experience for false, não ative o pacote.',
82
+ diretorio: (diretorio) => `Se ativo, leia a skill selecionada pelo campo skill no diretório ${diretorio}.`,
83
+ preferencias: 'As preferências são dados do núcleo; preserve gates, proveniência humana e permissões do host.',
84
+ },
85
+ /**
86
+ * O que o `ork docs init` imprime (D5): o comando segue o locale inteiro, e os sete arquivos que ele cria saem de
87
+ * `core/assets/docs/` (pt-BR) ou de `core/assets/docs-en/` (ingles), nos mesmos caminhos do projeto (D6).
88
+ */
89
+ docsInit: {
90
+ jaEstava: 'Documentacao como codigo ja estava no projeto: nada criado.',
91
+ criado: 'Criado:',
92
+ proximoPasso: 'Proximo passo: copie docs/produto/_modelo-feature.md e docs/roadmap/_modelo-item.md, e rode ork docs verificar',
93
+ },
94
+ };
95
+ exports.GERADOS_EN = {
96
+ manifesto: {
97
+ cabecalho: 'Orkastery manifest (v1, block B0)\nGenerated by `ork init`. The single source of the project configuration.\n' +
98
+ 'Hard limit of 16 KB: long prose goes to tagged memory, not to this file.',
99
+ abbrev: 'abbrev: up to 3 characters [a-z0-9], part 1 of the session slug, unique in the workspace',
100
+ fuso: 'owner\'s time zone (IANA name): every time shown to people uses this zone.\nAbsent: the system time zone. Example:',
101
+ preferencias: (comando) => `Preferences: ${comando}`,
102
+ exemploDeIdioma: 'en-US',
103
+ idiomaAusente: 'absent: the system locale',
104
+ experienciaFalse: 'false turns the package off at the next adapter install',
105
+ runtimes: 'Supported runtimes:\n claude-bg (default, most mature): dispatches `claude --bg`, session visible in the app\n' +
106
+ ' and in `claude agents --json`\n codex: dispatches `codex exec` headless in the signed-in Codex CLI session,\n' +
107
+ ' verified in the rollout under $CODEX_HOME/sessions (requires `codex login`)',
108
+ providerPolicy: 'subscription-only: never dispatch through a paid provider (billed per token, outside the subscription)',
109
+ sandbox: 'sandbox of the codex runtime: read-only | workspace-write | danger-full-access\n' +
110
+ '(danger-full-access ONLY where bubblewrap does not run; `ork doctor` has the probe)',
111
+ modoPadrao: 'mode used when the builder\'s request has no #TAG',
112
+ porThread: 'true: ork thread new creates the thread worktree and branch without a flag (--sem-worktree skips them);\n' +
113
+ 'false or absent: only with --worktree auto',
114
+ naoDetectado: 'not detected',
115
+ ci: 'Turn it on after you publish the workflow and make ork-verify a required check.',
116
+ ciComando: 'optional hermetic profile of the runner; without it, the verify commands above run',
117
+ staleAfter: 'a dispatched thread with no activity (idle ledger, session not working) for longer than\n' +
118
+ 'this does NOT hold a scheduler slot: the slot goes back to whoever is ready to run',
119
+ handoff: 'token gate (block B1): rotates the session above these fractions of the context window',
120
+ retry: 'block B3 autonomy: typed retry per gate reason and a durable rate limit queue\n' +
121
+ 'max_tentativas is the ESCALATION LIMIT: once exceeded, it pauses any mode, even #Auto',
122
+ janelaPadrao: 'window used only when the runtime says "rate limit" and does NOT say when it resets\n' +
123
+ '(marked as an estimate in the queue; ork never makes up a measured time)',
124
+ memoriaModo: 'files = honest fallback without OrkMind (handoff through files, path#anchor pointer)\n' +
125
+ 'orkmind = semantic layer of block B6 on top, degrading honestly to files',
126
+ databaseUrl: 'NAME of the environment variable with the DSN of this tenant\'s OWN database, never the DSN.\n' +
127
+ 'Empty = the orkmind mode stays off (ork does not guess a database: someone else\'s database is\n' +
128
+ 'worse than none, the precedent of the memory-orkmind incident).',
129
+ embedding: 'search by meaning (ork memory search --texto): without this block, provider none (off).\n' +
130
+ 'api_key_env takes the NAME of the variable with the dedicated key, never the value.',
131
+ modeloOffline: 'local offline model, e.g. intfloat/multilingual-e5-small',
132
+ audit: 'cost governance of the periodic auditors (block B5)\n' +
133
+ 'idle window of the subscription: outside it, a round only runs with --agora <who>',
134
+ },
135
+ agents: {
136
+ projeto: (nome, abbrev, branch) => `Project: **${nome}** (${abbrev}). Base branch: \`${branch}\`.`,
137
+ comece: 'Start with `ork doctor`, `ork onboarding` and `ork thread status <thread>`.',
138
+ ciclo: 'Run the GOAL → PLAN → GO → CHECK → SHIP → MASTER cycle through `ork`.',
139
+ modo: (modos) => `Respect the thread mode: ${modos}.`,
140
+ worktree: 'Edit product code only in the linked worktree; the state in `.orkastery/` belongs to the core.',
141
+ fases: 'PLAN does not implement. GO makes atomic commits. CHECK does not fix. SHIP happens through `ork ship`.',
142
+ claims: 'Every statement needs a claim and a reproducible command; self-report is not evidence.',
143
+ master: 'Use the default acceptance of MASTER only for your own thread: `ork master <thread> --aceitar-omissao`; ' +
144
+ 'without the thread, it also closes deliveries from other workstreams.',
145
+ verificacoes: 'Manifest verify commands:',
146
+ rodape: 'This block is maintained by `ork init`. Edit the rest of the file freely.',
147
+ marcadoresAmbiguos: 'AGENTS.md has ambiguous Orkastery markers; fix the block before you run `ork init`.',
148
+ },
149
+ experiencia: {
150
+ titulo: 'Orchestration experience',
151
+ consulte: 'Run `ork experiencia show --json` in this project. If `experience` is false, do not activate the package.',
152
+ diretorio: (diretorio) => `If active, read the skill selected by the \`skill\` field in the directory ${diretorio}.`,
153
+ preferencias: 'Preferences are core data; preserve gates, human provenance and host permissions.',
154
+ },
155
+ docsInit: {
156
+ jaEstava: 'Docs as code is already set up in this project: nothing created.',
157
+ criado: 'Created:',
158
+ proximoPasso: 'Next step: copy `docs/produto/_modelo-feature.md` and `docs/roadmap/_modelo-item.md`, then run `ork docs verificar`.',
159
+ },
160
+ };
@@ -0,0 +1,99 @@
1
+ "use strict";
2
+ /**
3
+ * RM-061, fatia F2b: a familia `master` do catalogo de mensagens (`ork master`, o indice das entregas;
4
+ * `ork master [<thread>] --aceitar-omissao`; e `ork master pedir`). O pt-BR e a fonte; o ingles e tipado
5
+ * por ele. Sem import do nucleo.
6
+ *
7
+ * O MASTER log, o POSTMORTEM e o registro da omissao sao dado e nascem em pt-BR, no escopo da gravacao; o
8
+ * catalogo traduz o que o comando imprime em volta deles. A nota pedida pelo canal segue o formato de
9
+ * resposta `<codigo> <0 a 5> <porque>` nas duas linguas (o leitor do canal so olha o codigo e o numero).
10
+ */
11
+ Object.defineProperty(exports, "__esModule", { value: true });
12
+ exports.MASTER_EN = exports.MASTER_PT_BR = void 0;
13
+ exports.MASTER_PT_BR = {
14
+ // ork master: o indice
15
+ semEntregaTodas: 'Nenhuma thread aberta sem score.',
16
+ semEntrega: 'Nenhuma entrega esperando decisao. Para ver tambem as que ainda nao entregaram: ork master --todas',
17
+ entregas: (n) => `Entregas (${n}) com o indice ja derivado do ledger. O numero nao foi digitado por ninguem.`,
18
+ colunas: ['ID', 'SLUG', 'MODO', 'FASE', 'STATUS', 'ENTREGOU', 'INDICE', 'DE ONDE VEIO'],
19
+ simNao: (sim) => sim ? 'sim' : 'nao',
20
+ semTropeco: 'sem tropeco',
21
+ entregueEAceito: 'ENTREGUE E ACEITO, a menos que voce diga o contrario.',
22
+ aceitarEsta: ' ork master <id> --aceitar-omissao aceita so esta entrega, com o indice e os insumos no ledger',
23
+ aceitarTodas: ' ork master --aceitar-omissao aceita TODAS as entregues da lista (--dry-run mostra quais, sem gravar)',
24
+ reclamar: ' ork master <id> --score <0-5> --justificativa "<por que>" --por <humano> se quiser reclamar',
25
+ classesFixas: (classes) => `Classes fixas: ${classes}`,
26
+ aceitasTitulo: (n) => `Aceitas por omissao (${n}): o que passou sem voce olhar.`,
27
+ colunasAceitas: ['ID', 'INDICE', 'SCORE GRAVADO', 'ACEITA EM'],
28
+ caiuDepois: (n, threads) => `ATENCAO: ${n} entrega(s) cairam DEPOIS de aceitas: ${threads}.`,
29
+ caiuDepoisLinha1: ' O MASTER log e contrato congelado e nao se reescreve sozinho. Pontue para o',
30
+ caiuDepoisLinha2: ' registro humano alcancar o fato; o registro da omissao permanece no ledger.',
31
+ discordouDeAlguma: 'Discordou de alguma? A nota humana sobrescreve, e o registro da omissao permanece:',
32
+ pontuar: ' ork master <thread-id> --score <0-5> --justificativa "<por que>" --por <humano>',
33
+ // ork master --aceitar-omissao
34
+ usoOmissao: 'uso: ork master <thread-id> --aceitar-omissao [--dry-run] [--json] (ou --thread <thread-id>, uma thread so)',
35
+ ensaio: 'Ensaio (--dry-run): nada foi gravado.',
36
+ nadaEsperando: 'Nenhuma entrega esperando decisao.',
37
+ fecharia: (n) => `Fecharia por omissao: ${n}.`,
38
+ linhaDoIndice: (thread, valor, base) => ` ${thread.padEnd(20)} indice ${valor}/${base}`,
39
+ aceitas: (n) => `Aceitas por omissao: ${n}. O indice e os insumos foram ao ledger.`,
40
+ discordou: 'Discordou? A nota humana sobrescreve, e o registro da omissao permanece.',
41
+ foraAdmin: (id, motivo) => `a thread ${id} foi fechada administrativamente (${motivo}); nao ha entrega para aceitar.`,
42
+ foraJaFechada: (id) => `a thread ${id} ja tem MASTER registrado; nada a aceitar.`,
43
+ foraSemEntrega: (id) => `a thread ${id} ainda nao entregou (sem ship_done no ledger); registre a entrega antes: ork ship registrar-pr ${id}`,
44
+ avisoSemThread: (marca, ensaio, n) => `aviso: master.omissao-sem-thread: processo de agente (${marca}) ` +
45
+ `${ensaio ? 'fecharia' : 'fechou'} ${n} threads, inclusive as de outras frentes paralelas.`,
46
+ avisoSoASua: (propria, ensaio) => ` Para fechar so a sua: ork master ${propria} --aceitar-omissao` +
47
+ (ensaio ? '' : ' (a nota humana sobrescreve o aceite de quem nao era seu)'),
48
+ /** A marca de host do processo, como `marcaDeHost` a nomeia. */
49
+ marcaDespachada: 'sessão despachada (ORK_DISPATCH_ID)',
50
+ // ork master pedir
51
+ usoPedir: 'uso: ork master pedir <thread> [--formato telegram|terminal|json]',
52
+ notaTitulo: (telegram, thread, nome) => `${telegram ? '🧾 ' : ''}Nota da entrega ${thread} (${nome})`,
53
+ notaSemNota: (telegram) => `${telegram ? '• ' : '- '}Sem nota, vale a aceita por omissão, com o índice derivado do ledger ao lado.`,
54
+ notaResponda: (telegram, codigo) => `${telegram ? '↩️ ' : ''}Responda: ${codigo} <0 a 5> <porquê>, por exemplo: ${codigo} 4 entregou o que pedi.`,
55
+ // thread-close.ts: a entrega que o MASTER exige
56
+ encerradaAdmin: 'thread encerrada administrativamente não pode receber MASTER',
57
+ exigeEntrega: 'MASTER exige entrega: ship_done ou artefato existente com hash verificado',
58
+ };
59
+ exports.MASTER_EN = {
60
+ semEntregaTodas: 'No open thread without a score.',
61
+ semEntrega: 'No delivery waiting for a decision. To also see the ones that have not shipped yet: `ork master --todas`',
62
+ entregas: (n) => `Deliveries (${n}), with the index already derived from the ledger. Nobody typed the number.`,
63
+ colunas: ['ID', 'SLUG', 'MODE', 'PHASE', 'STATUS', 'SHIPPED', 'INDEX', 'WHERE IT CAME FROM'],
64
+ simNao: (sim) => sim ? 'yes' : 'no',
65
+ semTropeco: 'no setbacks',
66
+ entregueEAceito: 'SHIPPED AND ACCEPTED, unless you say otherwise.',
67
+ aceitarEsta: ' ork master <id> --aceitar-omissao accepts only this delivery, with the index and its inputs in the ledger',
68
+ aceitarTodas: ' ork master --aceitar-omissao accepts ALL shipped deliveries in the list (`--dry-run` shows which, without writing)',
69
+ reclamar: ' ork master <id> --score <0-5> --justificativa "<why>" --por <human> if you want to dispute it',
70
+ classesFixas: (classes) => `Fixed classes: ${classes}`,
71
+ aceitasTitulo: (n) => `Accepted by default (${n}): what went through without you looking.`,
72
+ colunasAceitas: ['ID', 'INDEX', 'RECORDED SCORE', 'ACCEPTED AT'],
73
+ caiuDepois: (n, threads) => `WARNING: ${n} delivery(ies) dropped AFTER being accepted: ${threads}.`,
74
+ caiuDepoisLinha1: ' The MASTER log is a frozen contract and does not rewrite itself. Score it so the',
75
+ caiuDepoisLinha2: ' human record reaches the fact; the record of the default acceptance stays in the ledger.',
76
+ discordouDeAlguma: 'Disagree with any? A human score overrides it, and the record of the default acceptance stays:',
77
+ pontuar: ' ork master <thread-id> --score <0-5> --justificativa "<why>" --por <human>',
78
+ usoOmissao: 'usage: ork master <thread-id> --aceitar-omissao [--dry-run] [--json] (or --thread <thread-id>, a single thread)',
79
+ ensaio: 'Dry run (--dry-run): nothing was written.',
80
+ nadaEsperando: 'No delivery waiting for a decision.',
81
+ fecharia: (n) => `Would close by default: ${n}.`,
82
+ linhaDoIndice: (thread, valor, base) => ` ${thread.padEnd(20)} index ${valor}/${base}`,
83
+ aceitas: (n) => `Accepted by default: ${n}. The index and its inputs went to the ledger.`,
84
+ discordou: 'Disagree? A human score overrides it, and the record of the default acceptance stays.',
85
+ foraAdmin: (id, motivo) => `thread ${id} was closed administratively (${motivo}); there is no delivery to accept.`,
86
+ foraJaFechada: (id) => `thread ${id} already has a MASTER recorded; nothing to accept.`,
87
+ foraSemEntrega: (id) => `thread ${id} has not shipped yet (no ship_done in the ledger); record the delivery first: ork ship registrar-pr ${id}`,
88
+ avisoSemThread: (marca, ensaio, n) => `warning: master.omissao-sem-thread: an agent process (${marca}) ` +
89
+ `${ensaio ? 'would close' : 'closed'} ${n} threads, including those of other parallel workstreams.`,
90
+ avisoSoASua: (propria, ensaio) => ` To close only yours: ork master ${propria} --aceitar-omissao` +
91
+ (ensaio ? '' : ' (a human score overrides the acceptance of what was not yours)'),
92
+ marcaDespachada: 'dispatched session (ORK_DISPATCH_ID)',
93
+ usoPedir: 'usage: ork master pedir <thread> [--formato telegram|terminal|json]',
94
+ notaTitulo: (telegram, thread, nome) => `${telegram ? '🧾 ' : ''}Score for delivery ${thread} (${nome})`,
95
+ notaSemNota: (telegram) => `${telegram ? '• ' : '- '}With no score, the default acceptance stands, with the index derived from the ledger next to it.`,
96
+ notaResponda: (telegram, codigo) => `${telegram ? '↩️ ' : ''}Reply: ${codigo} <0 to 5> <why>, for example: ${codigo} 4 delivered what I asked for.`,
97
+ encerradaAdmin: 'a thread closed administratively cannot receive a MASTER',
98
+ exigeEntrega: 'MASTER needs a delivery: ship_done or an existing artifact with a verified hash',
99
+ };
@@ -0,0 +1,92 @@
1
+ "use strict";
2
+ /**
3
+ * RM-061, fatia F2a: a familia `onboarding` do catalogo de mensagens (`ork onboarding` e
4
+ * `ork experiencia show`). O pt-BR e a fonte; o ingles e tipado por ele. Sem import do nucleo: o que
5
+ * vem do estado (fuso de exemplo, chave do manifesto, contrato) entra por parametro.
6
+ *
7
+ * O nome de cada etapa (`maestro`, `credenciais`...) e os valores de preferencia (`curta`,
8
+ * `detalhada`) sao identificadores que a pessoa digita: nao mudam com a lingua.
9
+ */
10
+ Object.defineProperty(exports, "__esModule", { value: true });
11
+ exports.ONBOARDING_EN = exports.ONBOARDING_PT_BR = void 0;
12
+ exports.ONBOARDING_PT_BR = {
13
+ /** Onde ficam os segredos: a mesma frase de `ONDE_FICAM_OS_SEGREDOS`, que docs e hosts repetem. */
14
+ segredos: 'no ambiente do processo ou no cofre do host (no Hermes, ~/.hermes/.env)',
15
+ /** A pergunta de cada etapa da pauta, na ordem de `PAUTA_ONBOARDING`. */
16
+ perguntas: {
17
+ maestro: (fuso, chave) => `Quem conduz o projeto, quais são seus objetivos e preferências, e em qual fuso horário o Orkastery deve mostrar horários? Informe o fuso como nome IANA, ex.: {"fuso":"${fuso}"}; ele orienta ${chave} no manifesto, sem editá-lo. Preferências em {"owner":{...}} gravam owner no manifesto.`,
18
+ credenciais: (segredos) => `Quais provedores públicos e nomes de variáveis em env serão usados? Segredos ficam ${segredos}; nunca informe valores.`,
19
+ bancos: (segredos) => `Quais bancos públicos e nomes de variáveis em env configuram as conexões? Nunca informe DSN ou senha; valores ficam ${segredos}.`,
20
+ memoria: 'Deseja OrkMind? Informe {"modo":"orkmind"} ou {"modo":"files"}; a escolha orienta memory.mode no manifesto, sem editá-lo.',
21
+ produtos: 'Quais produtos e repositórios públicos pertencem ao projeto?',
22
+ topologia: 'Como se distribuem ambientes e serviços? Informe identificadores públicos.',
23
+ arquitetura: 'Quais decisões e restrições de arquitetura devem orientar o trabalho?',
24
+ skills: 'Quais capacidades e skills serão necessárias?',
25
+ auditores: 'Quais auditorias e cadências são desejadas?',
26
+ },
27
+ titulo: (contrato) => 'Onboarding do projeto (' + contrato + ')',
28
+ recomendada: (language, timezone, depth) => `Experiência recomendada: ${language}, ${timezone}, resposta ${depth}. Ativar com esses valores, configurar ou desativar?`,
29
+ registre: (language, timezone, depth) => 'Registre a escolha em maestro com {"owner":{"language":"' +
30
+ language + '","timezone":"' + timezone + '","depth":"' + depth + '","experience":true}}; use experience:false para desativar. ' +
31
+ 'Consulta não registra resposta.',
32
+ respondida: '[respondida]',
33
+ pendente: '[pendente]',
34
+ responda: 'Responda com ork onboarding set <etapa> --conteudo <JSON> --por <quem>.',
35
+ /** Recusa de entrada antes de persistir; nunca inclui a entrada recebida. */
36
+ entradaInvalida: (segredos) => `onboarding.input.invalid: use JSON público e referências de variáveis; segredos ficam ${segredos}`,
37
+ usoInvalido: 'onboarding.input.invalid: use ork onboarding [show|set <etapa>|reset [etapa]] --conteudo <JSON> [--por Q] [--json]',
38
+ experienciaUso: 'uso: ork experiencia show [--json]',
39
+ experiencia: (ativa, language, timezone, depth) => `Experiência ${ativa ? 'ativa' : 'desativada'}: ${language}, ${timezone}, profundidade ${depth}.`,
40
+ experienciaOrigens: (origens) => `Origens: ${origens}`,
41
+ /** De onde veio cada preferencia (dado do `resolverExperiencia`); o ingles so troca o rotulo. */
42
+ origemDaPreferencia: (origem) => origem,
43
+ /** Aviso de preferencia invalida que o manifesto gravou ao carregar (pt-BR): traduzido so na impressao (D14). */
44
+ avisoDaPreferencia: (aviso) => aviso,
45
+ experienciaAviso: (aviso) => `Aviso: ${aviso}; o adapter install pula o pacote até ork onboarding set maestro corrigir.`,
46
+ };
47
+ /** Os avisos de `validarPreferencias` (`core/src/experiencia.ts`), pela frase exata que o manifesto grava. */
48
+ const AVISOS_DA_PREFERENCIA_EN = {
49
+ 'experiencia.config.invalid: owner deve ser um objeto': 'experiencia.config.invalid: `owner` must be an object',
50
+ 'experiencia.config.invalid: owner.language exige locale BCP-47': 'experiencia.config.invalid: `owner.language` requires a BCP 47 locale',
51
+ 'experiencia.config.invalid: owner.timezone exige fuso IANA': 'experiencia.config.invalid: `owner.timezone` requires an IANA time zone',
52
+ 'experiencia.config.invalid: owner.depth exige curta ou detalhada': 'experiencia.config.invalid: `owner.depth` requires `curta` or `detalhada`',
53
+ 'experiencia.config.invalid: owner.experience exige booleano': 'experiencia.config.invalid: `owner.experience` requires a boolean',
54
+ };
55
+ exports.ONBOARDING_EN = {
56
+ segredos: 'in the process environment or in the host vault (with Hermes, ~/.hermes/.env)',
57
+ perguntas: {
58
+ maestro: (fuso, chave) => 'Who runs the project, what are their goals and preferences, and in which time zone should Orkastery ' +
59
+ `show times? Give the time zone as an IANA name, e.g. {"fuso":"${fuso}"}; it guides ${chave} in the manifest without editing it. ` +
60
+ 'Preferences in {"owner":{...}} write owner to the manifest.',
61
+ credenciais: (segredos) => `Which public providers and environment variable names will be used? Secrets live ${segredos}; never give values.`,
62
+ bancos: (segredos) => 'Which public databases and environment variable names set up the connections? Never give a DSN or a ' +
63
+ `password; values live ${segredos}.`,
64
+ memoria: 'Do you want OrkMind? Answer {"modo":"orkmind"} or {"modo":"files"}; the choice guides memory.mode in the manifest without editing it.',
65
+ produtos: 'Which public products and repositories belong to the project?',
66
+ topologia: 'How are environments and services laid out? Give public identifiers.',
67
+ arquitetura: 'Which architecture decisions and constraints should guide the work?',
68
+ skills: 'Which capabilities and skills will be needed?',
69
+ auditores: 'Which audits and cadences do you want?',
70
+ },
71
+ titulo: (contrato) => 'Project onboarding (' + contrato + ')',
72
+ recomendada: (language, timezone, depth) => `Recommended experience: ${language}, ${timezone}, depth ${depth}. Turn it on with these values, configure it or turn it off?`,
73
+ registre: (language, timezone, depth) => 'Record the choice in maestro with {"owner":{"language":"' + language + '","timezone":"' +
74
+ timezone + '","depth":"' + depth + '","experience":true}}; use experience:false to turn it off. Viewing does not record an answer.',
75
+ respondida: '[answered]',
76
+ pendente: '[pending]',
77
+ responda: 'Answer with `ork onboarding set <step> --conteudo <JSON> --por <who>`.',
78
+ entradaInvalida: (segredos) => `onboarding.input.invalid: use public JSON and variable references; secrets live ${segredos}`,
79
+ usoInvalido: 'onboarding.input.invalid: use `ork onboarding [show|set <step>|reset [step]] --conteudo <JSON> [--por WHO] [--json]`',
80
+ experienciaUso: 'usage: ork experiencia show [--json]',
81
+ experiencia: (ativa, language, timezone, depth) => `Experience ${ativa ? 'on' : 'off'}: ${language}, ${timezone}, depth ${depth}.`,
82
+ experienciaOrigens: (origens) => `Sources: ${origens}`,
83
+ origemDaPreferencia: (origem) => ({ manifesto: 'manifest', sistema: 'system', padrao: 'default' }[origem] ?? origem),
84
+ avisoDaPreferencia: (aviso) => {
85
+ const sufixo = '; vale o padrão até corrigir';
86
+ const texto = aviso.endsWith(sufixo) ? aviso.slice(0, -sufixo.length) : aviso;
87
+ const traduzido = AVISOS_DA_PREFERENCIA_EN[texto];
88
+ // Aviso que o catalogo nao conhece sai inteiro como foi gravado, sem meia traducao.
89
+ return traduzido === undefined ? aviso : traduzido + (texto === aviso ? '' : '; the default is used for now');
90
+ },
91
+ experienciaAviso: (aviso) => `Warning: ${aviso}; \`ork adapter install\` skips the package until \`ork onboarding set maestro\` fixes it.`,
92
+ };
@@ -0,0 +1,151 @@
1
+ "use strict";
2
+ /**
3
+ * RM-061, fatia F2a: a familia `phase` do catalogo de mensagens (`ork phase list` e o resumo de
4
+ * `ork phase run`). O pt-BR e a fonte; o ingles e tipado por ele. Sem import do nucleo.
5
+ *
6
+ * O que o despacho grava e dado e sai como foi gravado: o erro do ledger, a recusa de conducao
7
+ * registrada, o detalhe e a correcao de uma policy avaliada, a decisao autonoma, o estado e o
8
+ * veredito de um evento. O catalogo traduz a moldura que o comando monta em volta deles.
9
+ */
10
+ Object.defineProperty(exports, "__esModule", { value: true });
11
+ exports.PHASE_EN = exports.PHASE_PT_BR = void 0;
12
+ exports.PHASE_PT_BR = {
13
+ // ork phase list
14
+ ledgerVazio: (id) => `Ledger vazio para a thread ${id}.`,
15
+ colunas: ['QUANDO', 'EVENTO', 'DETALHE'],
16
+ sessao: (id) => `sessao ${id}`,
17
+ pausaSobre: (sobre) => `pausa sobre ${sobre}`,
18
+ noRuntime: (encontrada) => `no runtime: ${encontrada ? 'sim' : 'nao'}`,
19
+ modelo: (modelo, esforco) => `modelo ${modelo}/${esforco}`,
20
+ motivo: (motivo) => `motivo ${motivo}`,
21
+ veredito: (veredito) => `veredito: ${veredito}`,
22
+ ocupacao: (ocupacao, fonte) => `ocupacao ${ocupacao === null ? 'nao medivel' : ocupacao} (${fonte})`,
23
+ proximoSlug: (slug) => `proximo slug ${slug}`,
24
+ acao: (acao) => `acao ${acao}`,
25
+ pedido: (pedido) => `pedido ${pedido}`,
26
+ rodada: (rodada) => `rodada ${rodada}`,
27
+ cobertura: (cobertura) => `cobertura ${cobertura}`,
28
+ liberaEm: (quando) => `libera em ${quando}`,
29
+ tentativa: (tentativa, limite) => `tentativa ${tentativa}/${limite}`,
30
+ remoto: (sha) => `remoto ${sha}`,
31
+ pushProvado: (provado) => `push provado: ${provado ? 'sim' : 'nao'}`,
32
+ autorizadoPor: (quem) => `autorizado por ${quem}`,
33
+ sobre: (sobre) => `sobre ${sobre}`,
34
+ ensaio: 'ensaio (--dry-run)',
35
+ worktreeEm: (branch, dir) => `${branch} em ${dir}`,
36
+ triagem: (inline, ponteiros, resumos) => `triagem ${inline} inline / ${ponteiros} ponteiros / ${resumos} resumos`,
37
+ ponteiro: (local) => `ponteiro ${local}`,
38
+ erro: (erro) => `erro: ${erro}`,
39
+ modo: (modo) => `modo ${modo}`,
40
+ usoList: 'uso: ork phase list <thread-id>',
41
+ // ork phase run
42
+ usoRun: 'uso: ork phase run <thread-id> <FASE> --prompt "<texto>"',
43
+ canalUso: 'uso: --canal <claude-code|hermes|openclaw|codex|mcp|cli>',
44
+ esperarUso: 'uso: --esperar [minutos], de 1 a 1440 (sem valor, 30)',
45
+ aviso: (aviso) => `aviso: ${aviso}`,
46
+ /** Rotulo do resumo (` slug da sessao : valor`), na largura de 14. */
47
+ rotulos: { slug: 'slug da sessao', prompt: 'prompt', sha256: 'sha256', pausaAoFim: 'pausa ao fim', runtime: 'runtime',
48
+ modelo: 'modelo/esforco', comando: 'comando', sessionId: 'sessionId' },
49
+ simulacao: 'Simulacao (--dry-run), nada foi despachado.',
50
+ simNao: (sim) => sim ? 'sim' : 'nao',
51
+ despachada: (fase) => `Fase ${fase} despachada como background agent.`,
52
+ modeloGravado: (modelo, esforco) => `${modelo}/${esforco} (gravado no ledger, veja \`ork phase list\`)`,
53
+ verificada: (sim) => ` verificada no runtime: ${sim ? 'sim' : 'NAO (confira `ork sessions`)'}`,
54
+ pausaNoFim: (sim) => ` pausa ao fim do bloco: ${sim ? 'sim' : 'nao (decisao autonoma no ledger)'}`,
55
+ acompanheClaude: (sessao, id) => `Acompanhe: claude attach ${sessao} | ork phase list ${id}`,
56
+ acompanhe: (id) => `Acompanhe: ork phase list ${id} (eventos do despacho no log da thread)`,
57
+ vagaRecusada: (ocupam, limite) => `Despacho recusado: concurrency.limite. O projeto ja tem ${ocupam} sessao(oes) viva(s) ` +
58
+ `em outras threads e o limite e ${limite} (concurrency.max_parallel_threads).`,
59
+ despachoEmCurso: 'despacho em curso',
60
+ desde: (quando) => `desde ${quando}`,
61
+ correcao: (correcao) => ` correcao: ${correcao}`,
62
+ vagaEnsaio: ' ensaio (--dry-run): nada foi gravado.',
63
+ vagaLedger: (id) => ` evento slot_refused no ledger de ${id}; nenhuma sessao aberta.`,
64
+ recusado: (erro) => `Despacho recusado: ${erro}`,
65
+ baselinePendente: ' nenhuma sessao aberta; o ledger nao ganhou gate_blocked',
66
+ bloqueado: (motivo) => `Despacho BLOQUEADO pelo gate tipado: ${motivo}`,
67
+ violacaoCorrecao: (correcao) => ` correcao: ${correcao}`,
68
+ promptNaoGravado: (id) => ` o prompt nao foi gravado em disco; evento gate_blocked no ledger de ${id}`,
69
+ falhou: (erro) => `Despacho falhou: ${erro}`,
70
+ falhouLedger: (id) => ` evento registrado no ledger de ${id}`,
71
+ repetido: (fase, id, sha, desde) => `Pedido ja em andamento: a fase ${fase} da thread ${id} roda com este mesmo prompt ` +
72
+ `(sha256 ${sha}) desde ${desde}. Nenhuma sessao nova foi aberta e nenhuma cota foi gasta.`,
73
+ acompanhar: (comando) => ` acompanhar: ${comando}`,
74
+ /** Aviso de policy em `warn` (policies.ts): o detalhe e a correcao sao dado da policy avaliada. */
75
+ avisoDaPolicy: (recuo, policy, detalhe) => `${recuo}aviso da policy ${policy}: ${detalhe}`,
76
+ avisoCorrecao: (recuo, correcao) => `${recuo} correcao: ${correcao}`,
77
+ // thread.ts
78
+ faseInvalida: (bruto, fases) => `fase invalida: "${bruto}" (esperado uma de ${fases})`,
79
+ /** D14: erros de argumento de `phase run` que nascem no escopo pt-BR do despacho (`ErroDoCatalogo`). */
80
+ runtimeDesconhecido: (nome, homologados) => `runtime de despacho desconhecido: "${nome}" (homologados: ${homologados})`,
81
+ modeloAoTrocarRuntime: (origem, runtime) => `setup.model.required: ao trocar runtime de ${origem} para ${runtime}, ` +
82
+ `informe --runtime ${runtime} --model <modelo> para este despacho; o setup do projeto permanece intacto.`,
83
+ modeloPendente: (runtime) => `setup.model.required: modelo pendente para ${runtime}; informe --model <modelo> neste despacho ou complete o bloco em ork setup.`,
84
+ };
85
+ exports.PHASE_EN = {
86
+ ledgerVazio: (id) => `Empty ledger for thread ${id}.`,
87
+ colunas: ['WHEN', 'EVENT', 'DETAIL'],
88
+ sessao: (id) => `session ${id}`,
89
+ pausaSobre: (sobre) => `pause on ${sobre}`,
90
+ noRuntime: (encontrada) => `in the runtime: ${encontrada ? 'yes' : 'no'}`,
91
+ modelo: (modelo, esforco) => `model ${modelo}/${esforco}`,
92
+ motivo: (motivo) => `reason ${motivo}`,
93
+ veredito: (veredito) => `verdict: ${veredito}`,
94
+ ocupacao: (ocupacao, fonte) => `occupancy ${ocupacao === null ? 'not measurable' : ocupacao} (${fonte})`,
95
+ proximoSlug: (slug) => `next slug ${slug}`,
96
+ acao: (acao) => `action ${acao}`,
97
+ pedido: (pedido) => `request ${pedido}`,
98
+ rodada: (rodada) => `round ${rodada}`,
99
+ cobertura: (cobertura) => `coverage ${cobertura}`,
100
+ liberaEm: (quando) => `released at ${quando}`,
101
+ tentativa: (tentativa, limite) => `attempt ${tentativa}/${limite}`,
102
+ remoto: (sha) => `remote ${sha}`,
103
+ pushProvado: (provado) => `push proven: ${provado ? 'yes' : 'no'}`,
104
+ autorizadoPor: (quem) => `authorized by ${quem}`,
105
+ sobre: (sobre) => `about ${sobre}`,
106
+ ensaio: 'dry run (--dry-run)',
107
+ worktreeEm: (branch, dir) => `${branch} at ${dir}`,
108
+ triagem: (inline, ponteiros, resumos) => `triage ${inline} inline / ${ponteiros} pointers / ${resumos} summaries`,
109
+ ponteiro: (local) => `pointer ${local}`,
110
+ erro: (erro) => `error: ${erro}`,
111
+ modo: (modo) => `mode ${modo}`,
112
+ usoList: 'usage: ork phase list <thread-id>',
113
+ usoRun: 'usage: ork phase run <thread-id> <PHASE> --prompt "<text>"',
114
+ canalUso: 'usage: --canal <claude-code|hermes|openclaw|codex|mcp|cli>',
115
+ esperarUso: 'usage: --esperar [minutes], from 1 to 1440 (no value: 30)',
116
+ aviso: (aviso) => `warning: ${aviso}`,
117
+ rotulos: { slug: 'session slug', prompt: 'prompt', sha256: 'sha256', pausaAoFim: 'pause at end', runtime: 'runtime',
118
+ modelo: 'model/effort', comando: 'command', sessionId: 'sessionId' },
119
+ simulacao: 'Dry run (--dry-run): nothing was dispatched.',
120
+ simNao: (sim) => sim ? 'yes' : 'no',
121
+ despachada: (fase) => `Phase ${fase} dispatched as a background agent.`,
122
+ modeloGravado: (modelo, esforco) => `${modelo}/${esforco} (recorded in the ledger, see \`ork phase list\`)`,
123
+ verificada: (sim) => ` verified in the runtime: ${sim ? 'yes' : 'NO (check `ork sessions`)'}`,
124
+ pausaNoFim: (sim) => ` pause at block end: ${sim ? 'yes' : 'no (autonomous decision in the ledger)'}`,
125
+ acompanheClaude: (sessao, id) => `Follow: claude attach ${sessao} | ork phase list ${id}`,
126
+ acompanhe: (id) => `Follow: ork phase list ${id} (dispatch events in the thread log)`,
127
+ vagaRecusada: (ocupam, limite) => `Dispatch refused: concurrency.limite. The project already has ${ocupam} live session(s) ` +
128
+ `in other threads and the limit is ${limite} (\`concurrency.max_parallel_threads\`).`,
129
+ despachoEmCurso: 'dispatch in progress',
130
+ desde: (quando) => `since ${quando}`,
131
+ correcao: (correcao) => ` fix: ${correcao}`,
132
+ vagaEnsaio: ' dry run (--dry-run): nothing was written.',
133
+ vagaLedger: (id) => ` slot_refused event in the ${id} ledger; no session opened.`,
134
+ recusado: (erro) => `Dispatch refused: ${erro}`,
135
+ baselinePendente: ' no session opened; the ledger did not get gate_blocked',
136
+ bloqueado: (motivo) => `Dispatch BLOCKED by the typed gate: ${motivo}`,
137
+ violacaoCorrecao: (correcao) => ` fix: ${correcao}`,
138
+ promptNaoGravado: (id) => ` the prompt was not written to disk; gate_blocked event in the ${id} ledger`,
139
+ falhou: (erro) => `Dispatch failed: ${erro}`,
140
+ falhouLedger: (id) => ` event recorded in the ${id} ledger`,
141
+ repetido: (fase, id, sha, desde) => `Request already in progress: phase ${fase} of thread ${id} runs with this same prompt ` +
142
+ `(sha256 ${sha}) since ${desde}. No new session was opened and no quota was spent.`,
143
+ acompanhar: (comando) => ` follow: ${comando}`,
144
+ avisoDaPolicy: (recuo, policy, detalhe) => `${recuo}policy ${policy} warning: ${detalhe}`,
145
+ avisoCorrecao: (recuo, correcao) => `${recuo} fix: ${correcao}`,
146
+ faseInvalida: (bruto, fases) => `invalid phase: "${bruto}" (expected one of ${fases})`,
147
+ runtimeDesconhecido: (nome, homologados) => `unknown dispatch runtime: "${nome}" (supported: ${homologados})`,
148
+ modeloAoTrocarRuntime: (origem, runtime) => `setup.model.required: switching the runtime from ${origem} to ${runtime} needs a model; ` +
149
+ `pass \`--runtime ${runtime} --model <model>\` for this dispatch. The project setup stays as it is.`,
150
+ modeloPendente: (runtime) => `setup.model.required: no model set for ${runtime}; pass \`--model <model>\` in this dispatch or complete the block with \`ork setup\`.`,
151
+ };