@orkastery/cli 0.6.0 → 0.6.2

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 (118) hide show
  1. package/adapters/claude-code/agents/ork-check.md +1 -1
  2. package/adapters/claude-code/agents/ork-go.md +1 -1
  3. package/adapters/claude-code/agents/ork-goal.md +1 -1
  4. package/adapters/claude-code/agents/ork-master.md +1 -1
  5. package/adapters/claude-code/agents/ork-plan.md +1 -1
  6. package/adapters/claude-code/agents/ork-ship.md +1 -1
  7. package/adapters/claude-code/commands/ork.md +1 -1
  8. package/adapters/claude-code/mods/ork-torre/hooks/frases.ts +2 -0
  9. package/adapters/codex/skills/ork/SKILL.md +1 -1
  10. package/adapters/openclaw/openclaw.plugin.json +1 -1
  11. package/adapters/openclaw/package.json +1 -1
  12. package/assets/adapters-en/claude-code/agents/ork-check.md +1 -1
  13. package/assets/adapters-en/claude-code/agents/ork-go.md +1 -1
  14. package/assets/adapters-en/claude-code/agents/ork-goal.md +1 -1
  15. package/assets/adapters-en/claude-code/agents/ork-master.md +1 -1
  16. package/assets/adapters-en/claude-code/agents/ork-plan.md +1 -1
  17. package/assets/adapters-en/claude-code/agents/ork-ship.md +1 -1
  18. package/assets/adapters-en/claude-code/commands/ork.md +1 -1
  19. package/assets/adapters-en/codex/skills/ork/SKILL.md +1 -1
  20. package/assets/orkmind_fixture.py +4 -1
  21. package/assets/skills-en/core/orkastery-bootstrap/SKILL.md +1 -1
  22. package/assets/skills-en/phases/check-quality/SKILL.md +1 -1
  23. package/assets/skills-en/phases/go-implementation/SKILL.md +1 -1
  24. package/dist/adapters/claude-bg.js +9 -7
  25. package/dist/adapters/grok-events.js +227 -0
  26. package/dist/adapters/grok-mcp-servidor.js +622 -0
  27. package/dist/adapters/grok-mcp.js +178 -0
  28. package/dist/adapters/grok.js +686 -0
  29. package/dist/agendador-cpu.js +92 -0
  30. package/dist/branch-de-estado.js +7 -2
  31. package/dist/changelog-check.js +217 -0
  32. package/dist/check-agil.js +289 -25
  33. package/dist/check-paralelo.js +73 -18
  34. package/dist/ci.js +3 -2
  35. package/dist/claim-lint.js +29 -0
  36. package/dist/claims.js +4 -0
  37. package/dist/conducao.js +5 -0
  38. package/dist/docs.js +16 -16
  39. package/dist/doctor-forja.js +1 -3
  40. package/dist/doctor.js +1 -1
  41. package/dist/entrega-pr.js +10 -10
  42. package/dist/fabrica-estado.js +20 -11
  43. package/dist/fila-pesada.js +121 -11
  44. package/dist/hitl-classificacao.js +1 -0
  45. package/dist/horario.js +4 -1
  46. package/dist/index.js +63 -35
  47. package/dist/integracoes-locais.js +2 -0
  48. package/dist/intelligence-graph-cli.js +27 -9
  49. package/dist/locale-accounts.js +11 -3
  50. package/dist/locale-ajuda.js +10 -6
  51. package/dist/locale-claims.js +16 -2
  52. package/dist/locale-forja.js +2 -4
  53. package/dist/locale-grafo.js +56 -1
  54. package/dist/locale-maestro.js +38 -0
  55. package/dist/locale-network.js +8 -6
  56. package/dist/locale-onboarding.js +14 -0
  57. package/dist/locale-operacao-restante.js +2 -2
  58. package/dist/locale-preflight.js +80 -0
  59. package/dist/locale-projetos.js +6 -0
  60. package/dist/locale-prompts.js +8 -8
  61. package/dist/locale-pulse.js +4 -0
  62. package/dist/locale-retry.js +56 -2
  63. package/dist/locale-security-scan.js +35 -1
  64. package/dist/locale-ship.js +10 -2
  65. package/dist/locale-verify.js +15 -0
  66. package/dist/locale.js +24 -7
  67. package/dist/maestro-cli.js +12 -17
  68. package/dist/manifest.js +6 -1
  69. package/dist/mcp-install.js +24 -13
  70. package/dist/mcp-server.js +62 -33
  71. package/dist/mcp-verify-async.js +353 -0
  72. package/dist/mcp-verify-worker.js +17 -0
  73. package/dist/mcp-verify.js +10 -1
  74. package/dist/merge-da-entrega.js +85 -0
  75. package/dist/network-roadmap.js +18 -14
  76. package/dist/noctum-aceite.js +154 -14
  77. package/dist/noctum-cli.js +69 -12
  78. package/dist/noctum-entrega.js +55 -7
  79. package/dist/noctum-envelope.js +1 -1
  80. package/dist/noctum-execucao.js +5 -1
  81. package/dist/noctum-fechamento.js +18 -7
  82. package/dist/noctum-fila.js +6 -1
  83. package/dist/noctum-guarda.js +81 -4
  84. package/dist/noctum-maquinas.js +5 -1
  85. package/dist/noctum-modo.js +35 -7
  86. package/dist/noctum-reconciliacao.js +4 -1
  87. package/dist/noctum-rede.js +102 -0
  88. package/dist/noctum-relatorio.js +44 -10
  89. package/dist/noctum-retomada-rede.js +71 -0
  90. package/dist/noctum-vigia.js +49 -9
  91. package/dist/parado-no-condutor.js +14 -15
  92. package/dist/pedido-conducao.js +51 -0
  93. package/dist/phase.js +43 -15
  94. package/dist/postura-local.js +7 -3
  95. package/dist/preflight.js +27 -27
  96. package/dist/prompts.js +4 -2
  97. package/dist/pulse.js +4 -2
  98. package/dist/ratelimit.js +1 -0
  99. package/dist/rede.js +24 -12
  100. package/dist/retry.js +115 -10
  101. package/dist/runtime-context.js +165 -45
  102. package/dist/runtime-escada.js +7 -1
  103. package/dist/runtime-profiles.js +27 -17
  104. package/dist/runtimes.js +42 -5
  105. package/dist/security-scan/agil.js +18 -7
  106. package/dist/security-scan/cli.js +2 -2
  107. package/dist/security-scan/executor.js +8 -0
  108. package/dist/security-scan/report.js +1 -1
  109. package/dist/session-watcher-grok.js +425 -0
  110. package/dist/session-watcher.js +52 -11
  111. package/dist/sessoes-contas.js +33 -5
  112. package/dist/setup.js +11 -11
  113. package/dist/varredura-acoes.js +8 -15
  114. package/dist/verify.js +191 -43
  115. package/package.json +2 -2
  116. package/skills/core/orkastery-bootstrap/SKILL.md +1 -1
  117. package/skills/phases/check-quality/SKILL.md +1 -1
  118. package/skills/phases/go-implementation/SKILL.md +1 -1
@@ -1,7 +1,42 @@
1
1
  "use strict";
2
2
  Object.defineProperty(exports, "__esModule", { value: true });
3
3
  exports.GRAFO_EN = exports.GRAFO_PT_BR = void 0;
4
- /** RM-061 F3d: moldura humana do grafo; schemas, códigos e JSON continuam em pt-BR. */
4
+ /** RM-061 F3e: traduz somente o detalhe humano; o código tipado continua canônico. */
5
+ const erroDoGrafoEmIngles = (mensagem) => {
6
+ const trocas = [
7
+ [/quem roda o CLI nao le a raiz do repositorio/g, 'the CLI process cannot read the repository root'],
8
+ [/nao e pasta real/g, 'is not a real directory'], [/de outro dono/g, 'has a different owner'],
9
+ [/ com modo /g, ' with mode '], [/ ausente/g, ' missing'], [/\(erro\)/g, '(error)'],
10
+ [/nao bate com o tamanho/g, 'does not match the size'], [/nao bate com o digest/g, 'does not match the digest'],
11
+ [/fora do manifesto/g, 'outside the manifest'], [/sem unidades/g, 'without units'],
12
+ [/o ork grafo limpar o remove/g, 'ork grafo limpar removes it'], [/nenhum indice guardado/g, 'no stored index'],
13
+ [/sem-commit/g, 'no-commit'], [/revisao-mudou/g, 'revision-changed'],
14
+ [/rastreado fora da leitura/g, 'tracked outside the read'], [/ e mais (\d+)/g, ' and $1 more'],
15
+ [/o incremental a partir de ([^ ]+) falhou e a extracao foi completa/g, 'the incremental build from $1 failed and extraction was full'],
16
+ [/o incremental da base ([^ ]+) falhou/g, 'the incremental build from base $1 failed'],
17
+ [/o indice guardado difere da extracao nova/g, 'the stored index differs from the new extraction'],
18
+ [/sem indice do HEAD ([^;]+); rode/g, 'no index for HEAD $1; run'],
19
+ [/ha indice do HEAD ([^ ]+) de outro extrator/g, 'HEAD $1 has an index from another extractor'],
20
+ [/perfil diferente/g, 'different profile'], [/pacotes dos analisadores/g, 'analyzer packages'],
21
+ [/codigo do extrator/g, 'extractor code'], [/ no indice/g, ' in the index'], [/ aqui/g, ' here'],
22
+ [/o HEAD ([^ ]+) nao tem indice; o guardado e de outra revisao/g, 'HEAD $1 has no index; the stored index is from another revision'],
23
+ [/; rode /g, '; run '],
24
+ [/com a mesma instalacao do ork e o mesmo Node de quem consulta/g, 'with the same Ork installation and Node used by the caller'],
25
+ [/\(o servidor MCP consulta com a dele\)/g, '(the MCP server uses its own installation)'],
26
+ [/ tem (\d+) candidatos/g, ' has $1 candidates'], [/no vazio/g, 'empty node'],
27
+ [/ precisa ser inteiro de /g, ' must be an integer from '], [/tipo de aresta desconhecido/g, 'unknown edge type'],
28
+ [/nenhum tipo de aresta/g, 'no edge type'], [/sentido desconhecido/g, 'unknown direction'],
29
+ [/chamadores pede um simbolo; para arquivo, use importadores ou vizinhos/g, 'chamadores expects a symbol; for a file, use importadores or vizinhos'],
30
+ [/importadores pede um arquivo ou um simbolo/g, 'importadores expects a file or symbol'],
31
+ [/teto deve ser inteiro de/g, 'ceiling must be an integer from'], [/borda sem leitor da thread/g, 'edge has no thread reader'],
32
+ [/HEAD mudou durante a leitura; repita a consulta/g, 'HEAD changed during the read; repeat the query'],
33
+ [/ tem (\d+) bytes, acima do teto de (\d+)/g, ' has $1 bytes, above the $2-byte ceiling'],
34
+ [/o caminho nao se corta/g, 'the path cannot be truncated'], [/use --teto-bytes maior/g, 'use a larger --teto-bytes'],
35
+ [/o caminho de (\d+) passo\(s\)/g, 'the $1-step path'], [/a resposta com (\d+) aresta\(s\)/g, 'the response with $1 edge(s)'],
36
+ ];
37
+ return trocas.reduce((texto, [padrao, troca]) => texto.replace(padrao, troca), mensagem);
38
+ };
39
+ /** RM-061 F3d/F3e: moldura humana do grafo; schemas, códigos e JSON continuam em pt-BR. */
5
40
  exports.GRAFO_PT_BR = {
6
41
  uso: [
7
42
  'uso: ork grafo indexar [--verificar] [--forcar] [--json]',
@@ -15,6 +50,7 @@ exports.GRAFO_PT_BR = {
15
50
  ' ork grafo limpar [--tudo] [--json]',
16
51
  ],
17
52
  erroUso: (motivo) => `grafo.uso: ${motivo}`,
53
+ erroTipado: (mensagem) => mensagem,
18
54
  motivos: {
19
55
  semSub: 'falta o subcomando', desconhecido: (sub) => `subcomando desconhecido: ${sub}`,
20
56
  repetida: (nome) => `--${nome} repetida`, semValor: (nome) => `--${nome} nao leva valor`,
@@ -34,6 +70,15 @@ exports.GRAFO_PT_BR = {
34
70
  determinismo: (ordem, digest, relatorio, unidades, igual) => ` determinismo ${ordem}: digest ${digest}, relatorio ${relatorio}, unidades ${unidades}, ${igual ? 'igual' : 'DIFERENTE'}`,
35
71
  incremental: (base, igual) => ` incremental a partir do indice de ${base}: ${igual ? 'igual a completa nos quatro arquivos' : 'DIFERENTE'}`,
36
72
  naoConferido: (motivo) => ` incremental nao conferido: ${motivo}`, aprovado: 'aprovado', semBase: 'sem base',
73
+ extracao: {
74
+ lista: (itens) => itens.length ? ` (${itens.slice(0, 5).join(', ')}${itens.length > 5 ? ` e mais ${itens.length - 5}` : ''})` : '',
75
+ incremental: (base, alterados, novos, removidos) => ` extracao incremental a partir do indice de ${base}: ${alterados} alterado(s), ${novos} novo(s), ${removidos} removido(s)`,
76
+ tsInteiro: (motivo) => `TypeScript inteiro (${motivo ?? ''})`,
77
+ tsParcial: (reextraidos, lista, programa, reaproveitados) => `TypeScript parcial, ${reextraidos} reextraido(s)${lista} num programa de ${programa}, ${reaproveitados} da base`,
78
+ tsBase: (reaproveitados) => `TypeScript todo da base (${reaproveitados})`,
79
+ markdown: (reextraidos, lista, reaproveitados) => ` Markdown: ${reextraidos} reextraido(s)${lista}, ${reaproveitados} da base`,
80
+ completa: (motivo) => ` extracao completa${motivo ? `: ${motivo}` : ''}`,
81
+ },
37
82
  },
38
83
  status: {
39
84
  titulo: (head, arvore) => `grafo: HEAD ${head}, arvore ${arvore}`,
@@ -81,6 +126,7 @@ exports.GRAFO_EN = {
81
126
  ' ork grafo amostra [--por-estrato N] | ork grafo amostra --conferir FILE [--json]', ' ork grafo limpar [--tudo] [--json]',
82
127
  ],
83
128
  erroUso: (reason) => `grafo.uso: ${reason}`,
129
+ erroTipado: erroDoGrafoEmIngles,
84
130
  motivos: {
85
131
  semSub: 'missing subcommand', desconhecido: (sub) => `unknown subcommand: ${sub}`, repetida: (name) => `--${name} repeated`,
86
132
  semValor: (name) => `--${name} takes no value`, exigeValor: (name) => `--${name} requires a value`, opcao: (sub, value) => `unknown option for ${sub}: ${value}`,
@@ -96,6 +142,15 @@ exports.GRAFO_EN = {
96
142
  determinismo: (order, digest, report, units, equal) => ` determinism ${order}: digest ${digest}, report ${report}, units ${units}, ${equal ? 'equal' : 'DIFFERENT'}`,
97
143
  incremental: (base, equal) => ` incremental from index ${base}: ${equal ? 'equal to the full build in all four files' : 'DIFFERENT'}`,
98
144
  naoConferido: (reason) => ` incremental not checked: ${reason}`, aprovado: 'approved', semBase: 'no base',
145
+ extracao: {
146
+ lista: (items) => items.length ? ` (${items.slice(0, 5).join(', ')}${items.length > 5 ? ` and ${items.length - 5} more` : ''})` : '',
147
+ incremental: (base, changed, added, removed) => ` extraction incremental from index ${base}: ${changed} changed, ${added} added, ${removed} removed`,
148
+ tsInteiro: (reason) => `full TypeScript program (${erroDoGrafoEmIngles(reason ?? '')})`,
149
+ tsParcial: (reextracted, list, program, reused) => `partial TypeScript program, ${reextracted} re-extracted${list} in a program of ${program}, ${reused} reused from the base`,
150
+ tsBase: (reused) => `TypeScript entirely from the base (${reused})`,
151
+ markdown: (reextracted, list, reused) => ` Markdown: ${reextracted} re-extracted${list}, ${reused} reused from the base`,
152
+ completa: (reason) => ` extraction full${reason ? `: ${erroDoGrafoEmIngles(reason)}` : ''}`,
153
+ },
99
154
  },
100
155
  status: {
101
156
  titulo: (head, tree) => `graph: HEAD ${head}, tree ${tree}`, indice: (key, state) => ` HEAD index ${key} ${state}`,
@@ -0,0 +1,38 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.MAESTRO_EN = exports.MAESTRO_PT_BR = void 0;
4
+ /** RM-061 F3e: moldura humana do panorama Maestro; o snapshot JSON continua canônico. */
5
+ exports.MAESTRO_PT_BR = {
6
+ help: 'ork maestro [--json] [--thread ID] [--section NOME --offset N]\nConsulta sem criar ou despachar trabalho. Na conversa, diga: orkastery maestro.',
7
+ origem: {
8
+ installation: 'fixado na instalação', cwd: 'pelo diretório atual', worktree: 'pela worktree da thread',
9
+ selection: 'pedido explicitamente (--projeto ou ORK_PROJETO)',
10
+ },
11
+ titulo: (projeto) => `${projeto} · panorama Maestro`,
12
+ consulta: (data) => `• Consulta: ${data}`,
13
+ projeto: (nome, raiz, remoto, origem) => `• Projeto consultado: ${nome}${raiz ? ` · ${raiz}` : ''}${remoto === undefined ? '' : ` · ${remoto}`} · ${origem}`,
14
+ semRemoto: 'sem remoto',
15
+ naoLido: (itens) => `• Não lido: ${itens}`,
16
+ secao: (nome, estado, retornados, total, mais) => `• ${nome}: ${estado} · ${retornados}/${total ?? '?'}${mais ? ' · mais itens disponíveis' : ''}`,
17
+ thread: (titulo, fase, estado) => ` ${titulo}: ${fase} · ${estado}`,
18
+ recomendacao: (conflitos, lacunas) => `• Recomendo: ${conflitos ? 'reler as fontes em conflito'
19
+ : lacunas ? 'conferir as lacunas antes de agir' : 'escolher uma thread para ver o detalhe'}.`,
20
+ final: 'Use ork maestro --json para cobertura e ações; --thread ID consulta o detalhe nativo.',
21
+ };
22
+ exports.MAESTRO_EN = {
23
+ help: 'ork maestro [--json] [--thread ID] [--section NAME --offset N]\nRead without creating or dispatching work. In the conversation, say: orkastery maestro.',
24
+ origem: {
25
+ installation: 'fixed by the installation', cwd: 'from the current directory', worktree: 'from the thread worktree',
26
+ selection: 'explicitly selected (--projeto or ORK_PROJETO)',
27
+ },
28
+ titulo: (project) => `${project} · Maestro overview`,
29
+ consulta: (date) => `• Read at: ${date.replace('(horário de Brasília)', '(Brasilia time)')}`,
30
+ projeto: (name, root, remote, origin) => `• Project read: ${name}${root ? ` · ${root}` : ''}${remote === undefined ? '' : ` · ${remote}`} · ${origin}`,
31
+ semRemoto: 'no remote',
32
+ naoLido: (items) => `• Not read: ${items}`,
33
+ secao: (name, state, returned, total, more) => `• ${name}: ${state} · ${returned}/${total ?? '?'}${more ? ' · more items available' : ''}`,
34
+ thread: (title, phase, state) => ` ${title}: ${phase} · ${state}`,
35
+ recomendacao: (conflicts, gaps) => `• Recommendation: ${conflicts ? 'reread the conflicting sources'
36
+ : gaps ? 'check the gaps before acting' : 'choose a thread to read its details'}.`,
37
+ final: 'Use ork maestro --json for coverage and actions; --thread ID reads the native details.',
38
+ };
@@ -111,12 +111,13 @@ exports.NETWORK_PT_BR = {
111
111
  nomeEmUso: (maquina, quem, dica) => `rede.nome-em-uso: outra instalacao ja publica como "${maquina}"${quem}${dica}`,
112
112
  quemHostname: (hostname, batida) => ` (hostname ${hostname}, batida ${batida})`,
113
113
  quemIlegivel: ' (num retrato que esta versao nao le)',
114
- dicaMesmoHostname: '; o retrato tem o hostname desta maquina: se for ela mesma, com ~/.orkastery apagada ou copiada, retome o nome com ' +
115
- 'ork network entrar --forcar; se for outra maquina ou instalacao com o mesmo hostname, escolha outro nome com --maquina NOME',
116
- dicaOutroNome: '; escolha outro nome com ork network entrar --maquina NOME, ou tome este com --forcar',
114
+ dicaNomeEmUso: '; se for esta maquina com ~/.orkastery apagada ou copiada, retome o nome com ' +
115
+ 'ork network entrar --forcar; se for outra maquina ou instalacao, escolha outro nome com --maquina NOME',
117
116
  concorrencia: (n) => `rede.concorrencia: ${n} pushes recusados seguidos; tente de novo em instantes`,
118
117
  foraDaRede: 'rede.fora: esta maquina nao esta na rede; ork network entrar',
119
118
  nomeInvalido: (maquina) => `rede.maquina: nome de maquina invalido ("${maquina}"); use ork network entrar --maquina NOME (letras, numeros, ponto, _ ou -)`,
119
+ nomeGenericoAusente: 'rede.maquina-generica: escolha um nome generico com ork network entrar --maquina maquina-a; ' +
120
+ 'o mapa fica somente em ~/.orkastery/maquina.json, fora do git',
120
121
  ocupadoAoEntrar: (trava) => `rede.ocupado: outra publicacao desta maquina esta em andamento (${trava}); rode ork network entrar de novo em instantes`,
121
122
  semHttpsAoSair: (cli, ref) => `rede.sem-https: saiu da rede aqui, mas ${cli} devolveu para ${ref} uma URL sem https; o retrato fica na casa`,
122
123
  ocupadoAoSair: (trava) => `rede.ocupado: saiu da rede aqui, mas outra publicacao desta maquina segura a casa (${trava}); rode ork network sair de novo`,
@@ -294,12 +295,13 @@ exports.NETWORK_EN = {
294
295
  nomeEmUso: (maquina, quem, dica) => `rede.nome-em-uso: another installation already publishes as "${maquina}"${quem}${dica}`,
295
296
  quemHostname: (hostname, batida) => ` (hostname ${hostname}, heartbeat ${batida})`,
296
297
  quemIlegivel: ' (in a snapshot this version does not read)',
297
- dicaMesmoHostname: '; the snapshot has this machine\'s hostname: if it is this machine, with ~/.orkastery deleted or copied, take the name back with ' +
298
- '`ork network entrar --forcar`; if it is another machine or installation with the same hostname, pick another name with `--maquina NAME`',
299
- dicaOutroNome: '; pick another name with `ork network entrar --maquina NAME`, or take this one with `--forcar`',
298
+ dicaNomeEmUso: '; if it is this machine with ~/.orkastery deleted or copied, take the name back with ' +
299
+ '`ork network entrar --forcar`; if it is another machine or installation, pick another name with `--maquina NAME`',
300
300
  concorrencia: (n) => `rede.concorrencia: ${n} pushes refused in a row; try again in a moment`,
301
301
  foraDaRede: 'rede.fora: this machine is not in the network; `ork network entrar`',
302
302
  nomeInvalido: (maquina) => `rede.maquina: invalid machine name ("${maquina}"); use \`ork network entrar --maquina NAME\` (letters, digits, dot, _ or -)`,
303
+ nomeGenericoAusente: 'rede.maquina-generica: choose a generic name with `ork network entrar --maquina maquina-a`; ' +
304
+ 'the mapping stays only in ~/.orkastery/maquina.json, outside git',
303
305
  ocupadoAoEntrar: (trava) => `rede.ocupado: another publication from this machine is in progress (${trava}); run \`ork network entrar\` again in a moment`,
304
306
  semHttpsAoSair: (cli, ref) => `rede.sem-https: left the network here, but ${cli} returned a URL without https for ${ref}; the snapshot stays in the home`,
305
307
  ocupadoAoSair: (trava) => `rede.ocupado: left the network here, but another publication from this machine holds the home (${trava}); run \`ork network sair\` again`,
@@ -43,6 +43,13 @@ exports.ONBOARDING_PT_BR = {
43
43
  /** Aviso de preferencia invalida que o manifesto gravou ao carregar (pt-BR): traduzido so na impressao (D14). */
44
44
  avisoDaPreferencia: (aviso) => aviso,
45
45
  experienciaAviso: (aviso) => `Aviso: ${aviso}; o adapter install pula o pacote até ork onboarding set maestro corrigir.`,
46
+ syncPor: 'onboarding.input.invalid: sync não aceita --por; informe autoria em set ou reset.',
47
+ syncResultado: (regime, motivo, respondidas, gravadas, duplicadas, falhas) => `${regime}${motivo ? ` (${motivo})` : ''}: ${regime === 'orkmind' && falhas === 0
48
+ ? `${gravadas} nova(s), ${duplicadas} já existente(s); ${respondidas} etapa(s) publicada(s).`
49
+ : 'Entrevista preservada em arquivos; publicação semântica não concluída. Consulte ork memory status.'}`,
50
+ experienciaUninstallUso: 'uso: ork experiencia uninstall claude-code|codex [--dry-run] [--json]',
51
+ experienciaUninstall: (dryRun, arquivos) => `${dryRun ? 'Simulação de remoção' : 'Remoção concluída'}: ${arquivos} arquivo(s). O adaptador permanece instalado. ` +
52
+ 'Para manter o pacote desativado, configure owner.experience:false no onboarding.',
46
53
  };
47
54
  /** Os avisos de `validarPreferencias` (`core/src/experiencia.ts`), pela frase exata que o manifesto grava. */
48
55
  const AVISOS_DA_PREFERENCIA_EN = {
@@ -89,4 +96,11 @@ exports.ONBOARDING_EN = {
89
96
  return traduzido === undefined ? aviso : traduzido + (texto === aviso ? '' : '; the default is used for now');
90
97
  },
91
98
  experienciaAviso: (aviso) => `Warning: ${aviso}; \`ork adapter install\` skips the package until \`ork onboarding set maestro\` fixes it.`,
99
+ syncPor: 'onboarding.input.invalid: sync does not accept --por; record authorship with set or reset.',
100
+ syncResultado: (regime, motivo, respondidas, gravadas, duplicadas, falhas) => `${regime}${motivo ? ` (${motivo})` : ''}: ${regime === 'orkmind' && falhas === 0
101
+ ? `${gravadas} new, ${duplicadas} already present; ${respondidas} step(s) published.`
102
+ : 'Interview preserved in files; semantic publication did not finish. See ork memory status.'}`,
103
+ experienciaUninstallUso: 'usage: ork experiencia uninstall claude-code|codex [--dry-run] [--json]',
104
+ experienciaUninstall: (dryRun, files) => `${dryRun ? 'Removal dry run' : 'Removal complete'}: ${files} file(s). The adapter remains installed. ` +
105
+ 'To keep the package disabled, set owner.experience:false in onboarding.',
92
106
  };
@@ -446,7 +446,7 @@ exports.OPERACAO_RESTANTE_PT_BR = {
446
446
  },
447
447
  },
448
448
  mcp: {
449
- uso: 'uso: ork mcp serve|install --project <raiz absoluta> --host codex|claude-code [--ship-transport github-ssh|forja-ssh|forja-https|bare-local] [--ssh-fingerprint SHA256:... somente install forja-ssh] [--child-permissions interactive|worktree] [--owner-permissions interactive|orchestrate somente install Codex] [--dry-run somente install]',
449
+ uso: 'uso: ork mcp serve|install --project <raiz absoluta> --host codex|claude-code|grok [--ship-transport github-ssh|forja-ssh|forja-https|bare-local] [--ssh-fingerprint SHA256:... somente install forja-ssh] [--child-permissions interactive|worktree] [--owner-permissions interactive|orchestrate somente install Codex] [--dry-run somente install]',
450
450
  erro: (detalhe) => `mcp: ${detalhe}`,
451
451
  simulacao: 'Simulacao: nenhuma escrita.',
452
452
  preparada: 'Configuracao MCP preparada.',
@@ -921,7 +921,7 @@ exports.OPERACAO_RESTANTE_EN = {
921
921
  },
922
922
  },
923
923
  mcp: {
924
- uso: 'usage: ork mcp serve|install --project <absolute root> --host codex|claude-code [--ship-transport github-ssh|forja-ssh|forja-https|bare-local] [--ssh-fingerprint SHA256:... only for install with forja-ssh] [--child-permissions interactive|worktree] [--owner-permissions interactive|orchestrate only for Codex install] [--dry-run only for install]',
924
+ uso: 'usage: ork mcp serve|install --project <absolute root> --host codex|claude-code|grok [--ship-transport github-ssh|forja-ssh|forja-https|bare-local] [--ssh-fingerprint SHA256:... only for install with forja-ssh] [--child-permissions interactive|worktree] [--owner-permissions interactive|orchestrate only for Codex install] [--dry-run only for install]',
925
925
  erro: (detail) => `mcp: ${detail}`,
926
926
  simulacao: 'Simulation: no writes.',
927
927
  preparada: 'MCP configuration prepared.',
@@ -0,0 +1,80 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.PREFLIGHT_EN = exports.PREFLIGHT_PT_BR = void 0;
4
+ /** RM-061 F3e: apresentação humana de `ork doctor --modo`. */
5
+ exports.PREFLIGHT_PT_BR = {
6
+ nomes: {
7
+ node: 'node', git: 'git', repositorio: 'repositorio', manifesto: 'manifesto', modo: 'modo', abbrev: 'abbrev',
8
+ trio: 'trio', runtime: 'runtime', contas: 'contas', sandbox: 'sandbox de despacho', provider: 'provider', umask: 'umask',
9
+ 'permissoes do estado': 'permissoes do estado', 'pasta privada': 'pasta privada',
10
+ },
11
+ storeInvalido: (detalhe) => `store de perfis invalido: ${detalhe}`,
12
+ semPerfil: (runtime) => `${runtime} sem perfil configurado: despacho pelo ambiente do processo`,
13
+ estadoConta: {
14
+ providerPago: 'provider pago, nunca despacha', loginInconclusivo: 'conferencia de login inconclusiva', semLogin: 'sem login', pronto: 'pronto',
15
+ esgotadoAte: (estado, ate) => `${estado}${ate ? ` ate ${ate}` : ''}`,
16
+ },
17
+ contas: (runtime, estados) => `${runtime}: ${estados}`,
18
+ contasCorrecao: 'ork accounts check marca os perfis; ork accounts add refaz o login pelo proprio CLI',
19
+ limites: [
20
+ 'Sonda contextual local: não inventaria sessões, não inicia modelo e não autoriza despacho.',
21
+ 'Aceitação do modelo, instalação do adaptador/MCP, contexto da thread, gates e policies do pedido são revalidados no despacho; com perfis, o login de cada conta é conferido aqui e de novo no despacho.',
22
+ 'Trio sem override; um override posterior exige resolver e verificar novamente o despacho.',
23
+ 'VERIFY/SHIP MCP exigem executor Codex isolado próprio e transporte SHIP válido; a sonda de despacho não comprova entrega.',
24
+ ],
25
+ node: 'Node 20 ou superior necessário', gitOk: 'Git disponível', gitAusente: 'Git ausente',
26
+ repo: 'Repositório Git local necessário', manifestoAusente: 'Manifesto ausente',
27
+ manifestoInvalido: 'Manifesto inválido; corrija antes do despacho', manifestoValido: 'Manifesto válido',
28
+ modo: (modo) => `Modo solicitado: ${modo}`, abbrev: 'Identidade curta do projeto validada',
29
+ trio: 'Runtime/modelo/esforço resolvidos pelo mesmo contrato do despacho; aceitação nativa não comprovada',
30
+ runtimeOk: (runtime) => `${runtime} disponível`, runtimeAusente: (runtime) => `${runtime} ausente`,
31
+ sandboxOk: 'Sonda Codex sem modelo executou',
32
+ sandboxFalhou: 'Sonda Codex falhou; não altere o sandbox para contornar a falha',
33
+ providerIncompativel: (nomes) => `Nomes de provider incompatíveis com assinatura: ${nomes}`,
34
+ providerAlheio: 'Há nomes de provider alheios ao runtime; não usar credenciais pagas',
35
+ providerNenhum: 'Nenhum nome de provider pago ativo',
36
+ trioInvalido: 'Setup/trio ou sonda inválidos; complete o modelo e confira o runtime no setup canônico',
37
+ titulo: (modo) => `ork doctor contextual: ${modo}`,
38
+ check: (nivel, nome, detalhe) => `${nivel}: ${nome}: ${detalhe}`,
39
+ checkDoBloco: (nivel, nome, detalhe) => ` ${nivel}: ${nome}: ${detalhe}`,
40
+ bloco: (numero, fases, trio) => `bloco ${numero} ${fases}: ${trio ?? 'trio pendente'}`,
41
+ resumo: (primeiro, todos) => `Primeiro bloco: ${primeiro ? 'sonda pronta' : 'bloqueado'}; ` +
42
+ `todos os blocos: ${todos ? 'sonda pronta' : 'dependências pendentes'}`,
43
+ };
44
+ exports.PREFLIGHT_EN = {
45
+ nomes: {
46
+ node: 'node', git: 'git', repositorio: 'repository', manifesto: 'manifest', modo: 'mode', abbrev: 'abbrev',
47
+ trio: 'runtime/model/effort', runtime: 'runtime', contas: 'accounts', sandbox: 'dispatch sandbox', provider: 'provider', umask: 'umask',
48
+ 'permissoes do estado': 'state permissions', 'pasta privada': 'private folder',
49
+ },
50
+ storeInvalido: (detail) => `invalid profile store: ${detail}`,
51
+ semPerfil: (runtime) => `${runtime} has no configured profile: dispatch uses the process environment`,
52
+ estadoConta: {
53
+ providerPago: 'paid provider, never dispatches', loginInconclusivo: 'inconclusive login check', semLogin: 'not signed in',
54
+ pronto: 'ready', esgotadoAte: (state, until) => `${state}${until ? ` until ${until}` : ''}`,
55
+ },
56
+ contas: (runtime, states) => `${runtime}: ${states}`,
57
+ contasCorrecao: '`ork accounts check` marks profiles; `ork accounts add` signs in again through the CLI itself',
58
+ limites: [
59
+ 'Local contextual probe: it does not invent sessions, start a model or authorize dispatch.',
60
+ 'Model acceptance, adapter/MCP installation, thread context, gates and request policies are checked again at dispatch; with profiles, each account login is checked here and again at dispatch.',
61
+ 'No override in the runtime/model/effort set; a later override requires resolving and checking dispatch again.',
62
+ 'MCP VERIFY/SHIP require their own isolated Codex executor and a valid SHIP transport; the dispatch probe does not prove delivery.',
63
+ ],
64
+ node: 'Node 20 or later required', gitOk: 'Git available', gitAusente: 'Git missing',
65
+ repo: 'Local Git repository required', manifestoAusente: 'Manifest missing',
66
+ manifestoInvalido: 'Invalid manifest; fix it before dispatch', manifestoValido: 'Valid manifest',
67
+ modo: (mode) => `Requested mode: ${mode}`, abbrev: 'Short project identity checked',
68
+ trio: 'Runtime/model/effort resolved by the same dispatch contract; native acceptance not proved',
69
+ runtimeOk: (runtime) => `${runtime} available`, runtimeAusente: (runtime) => `${runtime} missing`,
70
+ sandboxOk: 'Codex probe without a model ran', sandboxFalhou: 'Codex probe failed; do not change the sandbox to bypass the failure',
71
+ providerIncompativel: (names) => `Provider names incompatible with subscription-only: ${names}`,
72
+ providerAlheio: 'There are provider names unrelated to the runtime; do not use paid credentials',
73
+ providerNenhum: 'No paid-provider name active',
74
+ trioInvalido: 'Invalid setup/runtime set or probe; complete the model and check the runtime in canonical setup',
75
+ titulo: (mode) => `ork contextual doctor: ${mode}`,
76
+ check: (level, name, detail) => `${level}: ${name}: ${detail}`,
77
+ checkDoBloco: (level, name, detail) => ` ${level}: ${name}: ${detail}`,
78
+ bloco: (number, phases, trio) => `block ${number} ${phases}: ${trio ?? 'runtime/model/effort pending'}`,
79
+ resumo: (first, all) => `First block: ${first ? 'probe ready' : 'blocked'}; all blocks: ${all ? 'probe ready' : 'dependencies pending'}`,
80
+ };
@@ -26,6 +26,9 @@ exports.PROJETOS_PT_BR = {
26
26
  '`ork network roadmap` (tool ork_network_roadmap).',
27
27
  opcaoSemValor: '--projeto sem valor',
28
28
  usoOpcao: 'Uso: --projeto <nome|caminho>; os nomes registrados estão em `ork projetos`.',
29
+ initNaoLeProjeto: 'uso: ork init cria o projeto no diretório atual; entre nele e rode ork init, sem --projeto',
30
+ mcpNaoLeProjeto: 'uso: o servidor MCP recebe a raiz por --project <raiz absoluta>, não por --projeto',
31
+ comandoNaoLeProjeto: (comando) => `uso: ork ${comando} não lê projeto; tire --projeto`,
29
32
  hostCaminho: (valor) => `no host o projeto vem pelo nome registrado; o caminho "${valor}" não é aceito`,
30
33
  hostUseNome: 'Use o nome de um projeto de `ork projetos` (ex.: --projeto orkastery).',
31
34
  precisaEscolher: (total) => `${total} projetos conhecidos nesta máquina e nenhum foi pedido; o ork não escolhe pelo diretório do gateway`,
@@ -74,6 +77,9 @@ exports.PROJETOS_EN = {
74
77
  '`ork network roadmap` (tool ork_network_roadmap).',
75
78
  opcaoSemValor: '--projeto has no value',
76
79
  usoOpcao: 'Usage: --projeto <name|path>; registered names are listed by `ork projetos`.',
80
+ initNaoLeProjeto: 'usage: ork init creates the project in the current directory; enter it and run ork init without --projeto',
81
+ mcpNaoLeProjeto: 'usage: the MCP server receives its root through --project <absolute root>, not --projeto',
82
+ comandoNaoLeProjeto: (command) => `usage: ork ${command} does not read a project; remove --projeto`,
77
83
  hostCaminho: (value) => `on a host, select a project by its registered name; path "${value}" is not accepted`,
78
84
  hostUseNome: 'Use a project name from `ork projetos` (for example: --projeto orkastery).',
79
85
  precisaEscolher: (total) => `${total} projects are known on this machine and none was requested; ork does not choose from the gateway directory`,
@@ -31,15 +31,15 @@ exports.PROMPTS_PT_BR = {
31
31
  'Passos irreversiveis (push, merge, delecao) so acontecem quando o modo autoriza.',
32
32
  ],
33
33
  regraDasEsperas: 'Esperas: nunca dispare verify, build ou suite com `&` dentro do comando, porque o processo se perde e a sessao ' +
34
- 'espera um aviso que nunca vem; rode o `ork verify` em primeiro plano, com `timeout` (ele espera a vez na fila de ' +
35
- 'recursos pesados), ou use a execucao em segundo plano do host, que avisa quando termina; nunca espere com ' +
34
+ 'espera um aviso que nunca vem; prefira `ork_verify` assíncrono e consulte `ork_verify_status` a cada 30–60 s; sem essa ' +
35
+ 'ferramenta, rode o `ork verify` em primeiro plano, com `timeout` (ele espera a vez na fila de recursos pesados), ou use a execucao em segundo plano do host, que avisa quando termina; nunca espere com ' +
36
36
  '`pgrep -f` cujo padrao aparece no proprio comando, porque o laco acha a si mesmo e nao termina: espere pelo ' +
37
37
  'arquivo de saida com prazo, ou pelo PID guardado.',
38
38
  fechoDoGo: (t) => [
39
39
  '## Fecho obrigatório do GO',
40
40
  '',
41
- `Antes de encerrar o bloco com GO, rode \`ork verify ${t}\` e o build declarado no manifesto, ambos em primeiro plano.`,
42
- `Gere o bundle com \`ork ci prepare ${t}\` e faça o commit atômico final \`ci(${t}): bundle ...\`.`,
41
+ `Antes de encerrar o bloco com GO, use \`ork_verify\` e aguarde o veredito verde por \`ork_verify_status\`; sem a consulta assíncrona, rode \`ork verify ${t}\` em primeiro plano. Rode também o build declarado no manifesto em primeiro plano.`,
42
+ `Com o veredito verde, gere o bundle com \`ork ci prepare ${t}\`, faça o commit atômico final \`ci(${t}): bundle ...\` e siga para CHECK e SHIP conforme os gates.`,
43
43
  `Grave \`.orkastery/threads/${t}/pr-body.md\` curto, no idioma do projeto, com o modo do CHECK da rodada (Agile Check ou Classic Check, da linha \`check\` do \`ork verify\`); ` +
44
44
  'se o perfil não puder gravá-lo pelo transporte autorizado, devolva o corpo completo no resumo final.',
45
45
  'O rito é idêntico em Claude Code e Codex. Ele fecha o GO, mas não autoriza SHIP, push, PR ou merge.',
@@ -125,14 +125,14 @@ exports.PROMPTS_EN = {
125
125
  'Irreversible steps (push, merge, deletion) happen only when the mode authorizes them.',
126
126
  ],
127
127
  regraDasEsperas: 'Waiting: never start verify, build, or a test suite with `&` inside the command; the process may be lost while the session ' +
128
- 'waits for a notice that never comes. Run `ork verify` in the foreground with `timeout` (it waits for the heavy-resource queue), ' +
129
- 'or use the host background execution that reports completion. Never wait with `pgrep -f` when its pattern appears in the command itself; ' +
128
+ 'waits for a notice that never comes. Prefer asynchronous `ork_verify` and query `ork_verify_status` every 30–60 seconds; without that ' +
129
+ 'tool, run `ork verify` in the foreground with `timeout` (it waits for the heavy-resource queue), or use the host background execution that reports completion. Never wait with `pgrep -f` when its pattern appears in the command itself; ' +
130
130
  'the loop finds itself and never ends. Wait for an output file with a deadline, or for a stored PID.',
131
131
  fechoDoGo: (t) => [
132
132
  '## Mandatory GO closing',
133
133
  '',
134
- `Before ending a block that includes GO, run \`ork verify ${t}\` and the build declared in the manifest, both in the foreground.`,
135
- `Generate the bundle with \`ork ci prepare ${t}\` and make the final atomic commit \`ci(${t}): bundle ...\`.`,
134
+ `Before ending a block that includes GO, use \`ork_verify\` and wait for its green verdict through \`ork_verify_status\`; without the asynchronous query, run \`ork verify ${t}\` in the foreground. Also run the manifest build in the foreground.`,
135
+ `After the green verdict, generate the bundle with \`ork ci prepare ${t}\`, make the final atomic commit \`ci(${t}): bundle ...\`, and continue to CHECK and SHIP as their gates allow.`,
136
136
  `Write a short \`.orkastery/threads/${t}/pr-body.md\` in the project language, naming the CHECK mode of the round (Agile Check or Classic Check, from the \`check\` line of \`ork verify\`); ` +
137
137
  'if the profile cannot write it through the authorized transport, return the full body in the final summary.',
138
138
  'The ritual is identical in Claude Code and Codex. It closes GO, but it does not authorize SHIP, push, PR, or merge.',
@@ -192,7 +192,9 @@ exports.PULSE_PT_BR = {
192
192
  'tree.blocked': 'a arvore de destino nao esta disponivel para o merge (branch em check-out com alteracao nao commitada, ou worktree que nao pode ser montada)',
193
193
  'lease.busy': 'lease ocupado por outra thread',
194
194
  'lease.resume-unavailable': 'retomada indisponivel; libere o lease explicitamente com --forcar',
195
+ 'concurrency.lease-indeterminado': 'a vida do dono do lease nao pode ser provada deste host ou namespace; desconhecido nunca e orfao',
195
196
  'conducao.em-andamento': 'outra conducao ja executa na worktree da thread (I-36): o pedido foi recusado com quem conduz e as tres acoes (esperar, acompanhar, assumir)',
197
+ 'conducao.acao-necessaria': 'a sessao parou de proposito e deixou um comando exato para a conducao executar fora do sandbox',
196
198
  'hitl.formato': 'o pedido HITL saiu fora do formato obrigatorio (pergunta em uma frase, de 3 a 5 alternativas rotuladas com consequencia, exatamente uma com o selo Recomendacao e o porque, corpo em lista; texto livre so com dependencia tecnica tipada)',
197
199
  'human.pending': 'gate humano do modo de conducao ainda nao autorizou',
198
200
  },
@@ -342,7 +344,9 @@ exports.PULSE_EN = {
342
344
  'tree.blocked': 'the target tree is not available for the merge (branch checked out with uncommitted changes, or a worktree that cannot be set up)',
343
345
  'lease.busy': 'lease held by another thread',
344
346
  'lease.resume-unavailable': 'resume unavailable; release the lease explicitly with `--forcar`',
347
+ 'concurrency.lease-indeterminado': 'the lease owner life cannot be proven from this host or namespace; unknown is never orphaned',
345
348
  'conducao.em-andamento': 'another conduction already runs on the thread worktree (I-36): the request was refused with who conducts and the three actions (wait, follow, take over)',
349
+ 'conducao.acao-necessaria': 'the session stopped on purpose and left an exact command for the conductor to run outside the sandbox',
346
350
  'hitl.formato': 'the HITL request came out of the required format (question in one sentence, 3 to 5 labeled alternatives with a consequence each, exactly one with the Recommendation seal and the reason, body as a list; free text only with a typed technical dependency)',
347
351
  'human.pending': 'the human gate of the conduction mode has not authorized yet',
348
352
  },
@@ -107,10 +107,18 @@ exports.RETRY_PT_BR = {
107
107
  porque: 'o lease e de outra thread e vai ser liberado: a fila ja serializa, entao a acao e tentar de novo quando chegar a vez, nunca furar a fila',
108
108
  correcao: 'ork lease list mostra a fila; a vez chega sem ninguem forcar',
109
109
  },
110
+ 'concurrency.lease-indeterminado': {
111
+ porque: 'o sandbox nao conseguiu provar se o dono do lease esta vivo ou morto: ausencia de PID visivel nao prova orfandade, e reexecutar poderia abrir duas operacoes pesadas',
112
+ correcao: 'espere com --esperar; se a observacao continuar inconclusiva, execute pela conducao o comando exato do pedido aberto',
113
+ },
110
114
  'conducao.em-andamento': {
111
115
  porque: 'outra conducao executa na mesma worktree agora: a vez chega quando ela terminar, e furar a fila e o incidente de 19/09/2026',
112
116
  correcao: 'ork conducao status <thread> mostra quem conduz; repita o pedido com --esperar <min> para seguir sozinho quando liberar',
113
117
  },
118
+ 'conducao.acao-necessaria': {
119
+ porque: 'a sessao parou de proposito porque a proxima operacao exige a autoridade da conducao; reexecutar a fase antes desse comando so repete a mesma parada',
120
+ correcao: 'execute o comando exato do pedido no canal da conducao; depois retome a mesma fase',
121
+ },
114
122
  'hitl.formato': {
115
123
  porque: 'o pedido HITL saiu fora do formato obrigatorio: quem errou foi o emissor, e a correcao e reemitir com alternativas rotuladas, consequencia por alternativa e exatamente uma recomendada com o porque',
116
124
  correcao: 'ork fix open <thread> abre a rodada com a spec exata do formato',
@@ -211,6 +219,24 @@ exports.RETRY_PT_BR = {
211
219
  correcoesNaRodada: (n, rodada, veredito) => `${n} correcao(oes) na rodada ${rodada}` + (veredito !== null ? `; CHECK-REVERIFY: ${veredito}` : ''),
212
220
  semDespachoFalho: (fase, thread) => `nao ha despacho falho registrado em ${fase} com prompt gravado: ` +
213
221
  `rode a fase de novo com \`ork phase run ${thread} ${fase} --prompt "..."\``,
222
+ perfilPedidoRecusado: (id, runtime, motivo, detalhe) => `perfil pedido "${id}" (${runtime}) preservado, mas indisponivel por ${motivo}: ${detalhe}. ` +
223
+ 'Nenhuma outra conta foi usada.',
224
+ correcaoDoPerfilPedido: (id, runtime, motivo, thread) => {
225
+ if (motivo === 'runtime.auth-missing')
226
+ return `refaca o login de assinatura do perfil "${id}" no ${runtime}, rode ` +
227
+ `\`ork accounts check ${id}\` e repita \`ork retry run ${thread}\``;
228
+ if (motivo === 'runtime.quota-exhausted')
229
+ return `aguarde o perfil "${id}" voltar a ativo em \`ork accounts list\` e ` +
230
+ `repita \`ork retry run ${thread}\`; para autorizar outra conta, rode a fase novamente sem \`--perfil\``;
231
+ if (motivo === 'runtime.profile-invalid')
232
+ return `rode \`ork accounts list\` e restaure o perfil "${id}" no runtime ${runtime}, ` +
233
+ 'ou rode a fase novamente com um perfil valido ou sem `--perfil`';
234
+ if (motivo === 'cost.violation')
235
+ return `refaca o login de assinatura do perfil "${id}", rode ` +
236
+ `\`ork accounts check ${id}\` e repita \`ork retry run ${thread}\`; perfil de provider pago nunca despacha`;
237
+ return `confira o runtime ${runtime} e o perfil "${id}" com \`ork accounts check ${id}\`; depois repita ` +
238
+ `\`ork retry run ${thread}\``;
239
+ },
214
240
  semConfianca: (motivo, cwd, thread) => `${motivo}: o runtime ainda nao confia em ${cwd}; nada foi despachado. ` +
215
241
  `Rode \`cd ${cwd} && claude\`, aceite a confianca e repita \`ork retry run ${thread}\``,
216
242
  /** RM-063 (F3): a sessao viva na thread; redespachar abriria a segunda na mesma worktree. */
@@ -254,7 +280,8 @@ exports.RETRY_PT_BR = {
254
280
  pulos: { 'sem-fallback': 'o bloco nao tem fallback de runtime',
255
281
  'adaptador-ausente': 'nenhum fallback tem adaptador instalado neste projeto',
256
282
  'fallback-sem-destino': 'nenhum alvo do fallback do bloco tem perfil disponivel',
257
- 'sem-outro-perfil': 'o runtime nao tem outro perfil disponivel' },
283
+ 'sem-outro-perfil': 'o runtime nao tem outro perfil disponivel',
284
+ 'cota-sem-sinal-tipado': 'o runtime ainda nao tipa a cota esgotada e fica fora da troca automatica de conta' },
258
285
  resultados: { redespachada: 'redespachada', falhou: 'falhou', pulado: 'pulado', interrompido: 'interrompido' },
259
286
  linhaDoDegrau: (n, tipo, resultado, motivo) => `degrau ${n} (${tipo}): ${resultado}${motivo ? ` (${motivo})` : ''}`,
260
287
  noPlano: (n, tipo) => ` escada degrau ${n} de 3, ${tipo}`,
@@ -367,10 +394,18 @@ exports.RETRY_EN = {
367
394
  porque: 'the lease belongs to another thread and will be released: the queue already serializes, so the action is to try again when the turn comes, never to jump the queue',
368
395
  correcao: '`ork lease list` shows the queue; the turn comes with nobody forcing it',
369
396
  },
397
+ 'concurrency.lease-indeterminado': {
398
+ porque: 'the sandbox could not prove whether the lease owner is alive or dead: an invisible PID does not prove orphanhood, and rerunning could open two heavy operations',
399
+ correcao: 'wait with `--esperar`; if observation stays inconclusive, run the exact command from the open request through the conductor',
400
+ },
370
401
  'conducao.em-andamento': {
371
402
  porque: 'another conduction runs on the same worktree now: the turn comes when it finishes, and jumping the queue is the 2026-09-19 incident',
372
403
  correcao: '`ork conducao status <thread>` shows who conducts; repeat the request with `--esperar <min>` to go on by itself when it frees up',
373
404
  },
405
+ 'conducao.acao-necessaria': {
406
+ porque: 'the session stopped on purpose because the next operation needs conductor authority; rerunning the phase before that command only repeats the same stop',
407
+ correcao: 'run the exact request command in the conductor channel; then resume the same phase',
408
+ },
374
409
  'hitl.formato': {
375
410
  porque: 'the HITL request came out of the required format: the issuer made the mistake, and the fix is to issue it again with labeled alternatives, a consequence per alternative and exactly one recommended, with the reason',
376
411
  correcao: '`ork fix open <thread>` opens the round with the exact format spec',
@@ -466,6 +501,24 @@ exports.RETRY_EN = {
466
501
  correcoesNaRodada: (n, rodada, veredito) => `${n} fix(es) in round ${rodada}` + (veredito !== null ? `; CHECK-REVERIFY: ${veredito}` : ''),
467
502
  semDespachoFalho: (fase, thread) => `no failed dispatch with a written prompt is recorded in ${fase}: ` +
468
503
  `run the phase again with \`ork phase run ${thread} ${fase} --prompt "..."\``,
504
+ perfilPedidoRecusado: (id, runtime, motivo, detalhe) => `requested profile "${id}" (${runtime}) was preserved but is unavailable because of ${motivo}: ${detalhe}. ` +
505
+ 'No other account was used.',
506
+ correcaoDoPerfilPedido: (id, runtime, motivo, thread) => {
507
+ if (motivo === 'runtime.auth-missing')
508
+ return `sign profile "${id}" back in to its ${runtime} subscription, run ` +
509
+ `\`ork accounts check ${id}\`, and repeat \`ork retry run ${thread}\``;
510
+ if (motivo === 'runtime.quota-exhausted')
511
+ return `wait until profile "${id}" is active again in \`ork accounts list\`, then ` +
512
+ `repeat \`ork retry run ${thread}\`; to authorize another account, run the phase again without \`--perfil\``;
513
+ if (motivo === 'runtime.profile-invalid')
514
+ return `run \`ork accounts list\` and restore profile "${id}" under runtime ${runtime}, ` +
515
+ 'or run the phase again with a valid profile or without `--perfil`';
516
+ if (motivo === 'cost.violation')
517
+ return `sign profile "${id}" back in through the subscription, run ` +
518
+ `\`ork accounts check ${id}\`, and repeat \`ork retry run ${thread}\`; a paid-provider profile is never dispatched`;
519
+ return `check runtime ${runtime} and profile "${id}" with \`ork accounts check ${id}\`; then repeat ` +
520
+ `\`ork retry run ${thread}\``;
521
+ },
469
522
  semConfianca: (motivo, cwd, thread) => `${motivo}: the runtime does not trust ${cwd} yet; nothing was dispatched. ` +
470
523
  `Run \`cd ${cwd} && claude\`, accept the trust and repeat \`ork retry run ${thread}\``,
471
524
  sessaoAindaViva: (sessao, thread) => `session ${sessao} is still working on the thread in the runtime; nothing was ` +
@@ -505,7 +558,8 @@ exports.RETRY_EN = {
505
558
  'outro-perfil': 'another runtime profile' },
506
559
  pulos: { 'sem-fallback': 'the block has no runtime fallback', 'adaptador-ausente': 'no fallback has an adapter installed in this project',
507
560
  'fallback-sem-destino': 'no target of the block fallback has an available profile',
508
- 'sem-outro-perfil': 'the runtime has no other available profile' },
561
+ 'sem-outro-perfil': 'the runtime has no other available profile',
562
+ 'cota-sem-sinal-tipado': 'the runtime does not type the exhausted quota yet and stays out of the automatic account switch' },
509
563
  resultados: { redespachada: 'dispatched again', falhou: 'failed', pulado: 'skipped', interrompido: 'interrupted' },
510
564
  linhaDoDegrau: (n, tipo, resultado, motivo) => `step ${n} (${tipo}): ${resultado}${motivo ? ` (${motivo})` : ''}`,
511
565
  noPlano: (n, tipo) => ` ladder step ${n} of 3, ${tipo}`,
@@ -2,15 +2,47 @@
2
2
  /**
3
3
  * The `securityScan` family of the message catalog: `ork security-scan` output (stdout summary, `report.md`) and its
4
4
  * usage error. pt-BR is the source; English is typed by it. No import from the core. Values that are data (tool names,
5
- * states, reasons, rule ids, paths) are printed as recorded, in both languages.
5
+ * states, reasons, rule ids, paths) remain unchanged in report.json. The human render translates the known reason
6
+ * vocabulary without rewriting the stored data.
6
7
  */
7
8
  Object.defineProperty(exports, "__esModule", { value: true });
8
9
  exports.SECURITY_SCAN_EN = exports.SECURITY_SCAN_PT_BR = void 0;
10
+ const motivoEmPtBR = (reason) => {
11
+ const exact = new Map([
12
+ ['not in the catalog', 'não está no catálogo'], ['unbalanced JSON', 'JSON desbalanceado'],
13
+ ['truncated JSON', 'JSON truncado'], ['empty stream', 'fluxo vazio'], ['invalid JSON', 'JSON inválido'],
14
+ ['expected a JSON array', 'era esperado um array JSON'], ['expected a JSON object', 'era esperado um objeto JSON'],
15
+ ['unreadable output', 'saída ilegível'], ['commit-range-unresolved', 'intervalo de commits não resolvido'],
16
+ ['timeout', 'tempo esgotado'], ['no-requirements-file', 'nenhum arquivo requirements'],
17
+ ['zero-commits-scanned', 'nenhum commit varrido'], ['disabled', 'desabilitada'], ['unsupported-ci', 'CI não suportada'],
18
+ ]);
19
+ const conhecida = exact.get(reason);
20
+ if (conhecida !== undefined)
21
+ return conhecida;
22
+ return reason
23
+ .replace(/not in the catalog/g, 'não está no catálogo')
24
+ .replace(/unbalanced JSON/g, 'JSON desbalanceado')
25
+ .replace(/truncated JSON/g, 'JSON truncado')
26
+ .replace(/empty stream/g, 'fluxo vazio')
27
+ .replace(/invalid JSON/g, 'JSON inválido')
28
+ .replace(/expected a JSON array/g, 'era esperado um array JSON')
29
+ .replace(/expected a JSON object/g, 'era esperado um objeto JSON')
30
+ .replace(/unexpected "([^"]+)" outside a JSON value/g, '"$1" inesperado fora de um valor JSON')
31
+ .replace(/missing key "([^"]+)"/g, 'chave "$1" ausente')
32
+ .replace(/tool reported "([^"]+)"/g, 'a ferramenta relatou "$1"')
33
+ .replace(/must be a list of strings/g, 'deve ser uma lista de strings')
34
+ .replace(/expected an object/g, 'era esperado um objeto')
35
+ .replace(/expected a list/g, 'era esperada uma lista')
36
+ .replace(/\(no fingerprint\)/g, '(sem fingerprint)')
37
+ .replace(/missing-output/g, 'saída-ausente');
38
+ };
9
39
  exports.SECURITY_SCAN_PT_BR = {
10
40
  usage: 'uso: ork security-scan [--base <ref>] [--json] [--check classic|agile]',
11
41
  // RM-072 (D9): o modo da varredura aceita so os dois valores.
12
42
  checkInvalido: (valor) => `--check inválido: ${valor === null ? '(sem valor)' : JSON.stringify(valor)} (aceitos: classic, agile)`,
13
43
  unknownFlag: (flag) => `opção desconhecida: ${flag}`,
44
+ error: (message) => motivoEmPtBR(message),
45
+ reason: (reason) => motivoEmPtBR(reason),
14
46
  // report.md
15
47
  title: 'Varredura de segurança',
16
48
  headBase: (head, base) => `HEAD \`${head.slice(0, 12)}\`, base \`${base ? base.slice(0, 12) : '(não resolvida)'}\``,
@@ -42,6 +74,8 @@ exports.SECURITY_SCAN_EN = {
42
74
  usage: 'usage: ork security-scan [--base <ref>] [--json] [--check classic|agile]',
43
75
  checkInvalido: (valor) => `invalid --check: ${valor === null ? '(no value)' : JSON.stringify(valor)} (accepted: classic, agile)`,
44
76
  unknownFlag: (flag) => `unknown option: ${flag}`,
77
+ error: (message) => message,
78
+ reason: (reason) => reason,
45
79
  title: 'Security scan',
46
80
  headBase: (head, base) => `HEAD \`${head.slice(0, 12)}\`, base \`${base ? base.slice(0, 12) : '(unresolved)'}\``,
47
81
  generatedAt: (iso) => `Generated at ${iso}`,
@@ -161,11 +161,15 @@ exports.SHIP_PT_BR = {
161
161
  situacoes: { 'proposto': 'proposto', 'agendado': 'agendado', 'vigente': 'vigente', 'expirado': 'expirado', 'revogado': 'revogado',
162
162
  'encerrado': 'encerrado' },
163
163
  origens: { 'envelope': 'pela lista do envelope', 'proposta': 'pela proposta que espera o dono', 'despacho': 'pelo log de despachos do arco',
164
- 'correlacao': 'pelo último despacho da thread' },
164
+ 'correlacao': 'pelo último despacho da thread', 'rede': 'pela rede do arco' },
165
165
  doArco: (thread, arco, situacao, origem) => `noctum.guarda.thread-do-arco: a thread ${thread} é trabalho do arco ${arco} (${situacao}, ${origem})`,
166
166
  doArcoCorrecao: (arco) => `a entrega desta thread é do passo da entrega do arco ${arco}: o SHIP e o MASTER dela são do arco (ork noctum status ${arco})`,
167
167
  arcoIlegivel: (thread, arco, motivo) => `noctum.guarda.arco-ilegivel: o último despacho da thread ${thread} foi do arco ${arco}, e o arco não se lê (${motivo})`,
168
168
  arcoIlegivelCorrecao: (arco) => `inspecione o arco antes de entregar a thread por fora dele (ork noctum status ${arco})`,
169
+ redeIlegivel: (thread, arco, motivo) => `noctum.guarda.rede-ilegivel: a thread ${thread} é trabalho do arco ${arco}, encerrado nesta máquina, e a rede não se lê (${motivo})`,
170
+ redeIlegivelCorrecao: (arco) => `restaure a leitura da rede antes de entregar a thread por fora do arco (ork noctum status ${arco})`,
171
+ redeDoArco: (thread, arco, estado, trabalho) => `noctum.guarda.thread-do-arco: a thread ${thread} é o trabalho ${trabalho} do arco ${arco}, ainda ${estado} na rede`,
172
+ redeDoArcoCorrecao: (arco) => `espere o trabalho terminar na rede ou entregue-o pelo passo da entrega do arco ${arco} (ork noctum status ${arco})`,
169
173
  retencao: (thread, arco, situacao) => `noctum.guarda.thread-do-arco: o arco ${arco} (${situacao}) despachou a thread ${thread} por último; a batida e a Sentinela ` +
170
174
  'não a despacham, não a retomam nem a mesclam até um despacho fora do arco ou um arco novo que a liste',
171
175
  // A2 do CHECK: o arco terminou, e a sessão que ele despachou ainda conduz a thread.
@@ -452,11 +456,15 @@ exports.SHIP_EN = {
452
456
  situacoes: { 'proposto': 'proposed', 'agendado': 'scheduled', 'vigente': 'in force', 'expirado': 'expired', 'revogado': 'revoked',
453
457
  'encerrado': 'closed' },
454
458
  origens: { 'envelope': 'by the envelope list', 'proposta': 'by the proposal waiting for the owner', 'despacho': 'by the arc dispatch log',
455
- 'correlacao': 'by the last dispatch of the thread' },
459
+ 'correlacao': 'by the last dispatch of the thread', 'rede': 'by the arc network' },
456
460
  doArco: (thread, arco, situacao, origem) => `noctum.guarda.thread-do-arco: thread ${thread} is work of arc ${arco} (${situacao}, ${origem})`,
457
461
  doArcoCorrecao: (arco) => `this thread is delivered by the delivery step of arc ${arco}: its SHIP and MASTER belong to the arc (ork noctum status ${arco})`,
458
462
  arcoIlegivel: (thread, arco, motivo) => `noctum.guarda.arco-ilegivel: the last dispatch of thread ${thread} came from arc ${arco}, and the arc cannot be read (${motivo})`,
459
463
  arcoIlegivelCorrecao: (arco) => `inspect the arc before delivering the thread outside it (ork noctum status ${arco})`,
464
+ redeIlegivel: (thread, arco, motivo) => `noctum.guarda.rede-ilegivel: thread ${thread} is work of arc ${arco}, closed on this machine, and its network cannot be read (${motivo})`,
465
+ redeIlegivelCorrecao: (arco) => `restore network reading before delivering the thread outside the arc (ork noctum status ${arco})`,
466
+ redeDoArco: (thread, arco, estado, trabalho) => `noctum.guarda.thread-do-arco: thread ${thread} is work ${trabalho} of arc ${arco}, still ${estado} on the network`,
467
+ redeDoArcoCorrecao: (arco) => `wait for the work to finish on the network or deliver it through the delivery step of arc ${arco} (ork noctum status ${arco})`,
460
468
  retencao: (thread, arco, situacao) => `noctum.guarda.thread-do-arco: arc ${arco} (${situacao}) dispatched thread ${thread} last; the beat and the Sentinel ` +
461
469
  'do not dispatch, resume or merge it until a dispatch outside the arc or a new arc that lists it',
462
470
  sessaoDoArco: (thread, arco, situacao, sessao) => `noctum.guarda.thread-do-arco: arc ${arco} is ${situacao}, and session ${sessao} that it dispatched still conducts thread ${thread}: ` +