@orkastery/cli 0.5.3 → 0.6.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (502) hide show
  1. package/adapters/README.md +18 -0
  2. package/adapters/claude-code/.claude-plugin/plugin.json +1 -0
  3. package/adapters/claude-code/README.md +195 -5
  4. package/adapters/claude-code/agents/ork-check.md +1 -0
  5. package/adapters/claude-code/agents/ork-go.md +1 -0
  6. package/adapters/claude-code/agents/ork-goal.md +1 -0
  7. package/adapters/claude-code/agents/ork-master.md +1 -0
  8. package/adapters/claude-code/agents/ork-plan.md +1 -0
  9. package/adapters/claude-code/agents/ork-ship.md +1 -0
  10. package/adapters/claude-code/hooks/hooks.json +2 -1
  11. package/adapters/claude-code/hooks/ork-guard.js +15 -1
  12. package/adapters/claude-code/hooks/ork-resposta.js +91 -0
  13. package/adapters/claude-code/hooks/ork-sensor.js +18 -2
  14. package/adapters/claude-code/hooks/quota-signal.js +14 -0
  15. package/adapters/claude-code/mods/autoridade.json +56 -0
  16. package/adapters/claude-code/mods/ork-clima/.claude-plugin/plugin.json +14 -0
  17. package/adapters/claude-code/mods/ork-clima/hooks/contas.ts +283 -0
  18. package/adapters/claude-code/mods/ork-clima/hooks/hooks.json +3 -0
  19. package/adapters/claude-code/mods/ork-clima/hooks/previsao.ts +393 -0
  20. package/adapters/claude-code/mods/ork-clima/hooks/register.ts +205 -0
  21. package/adapters/claude-code/mods/ork-clima/orkastery-mod.json +5 -0
  22. package/adapters/claude-code/mods/ork-clima/types/index.d.ts +80 -0
  23. package/adapters/claude-code/mods/ork-freio/.claude-plugin/plugin.json +14 -0
  24. package/adapters/claude-code/mods/ork-freio/hooks/carga.ts +160 -0
  25. package/adapters/claude-code/mods/ork-freio/hooks/conferencia.ts +309 -0
  26. package/adapters/claude-code/mods/ork-freio/hooks/hooks.json +3 -0
  27. package/adapters/claude-code/mods/ork-freio/hooks/lote.ts +270 -0
  28. package/adapters/claude-code/mods/ork-freio/hooks/register.ts +285 -0
  29. package/adapters/claude-code/mods/ork-freio/orkastery-mod.json +5 -0
  30. package/adapters/claude-code/mods/ork-freio/types/index.d.ts +127 -0
  31. package/adapters/claude-code/mods/ork-mensageiro/.claude-plugin/plugin.json +14 -0
  32. package/adapters/claude-code/mods/ork-mensageiro/hooks/caixa.ts +215 -0
  33. package/adapters/claude-code/mods/ork-mensageiro/hooks/hooks.json +3 -0
  34. package/adapters/claude-code/mods/ork-mensageiro/hooks/painel.tsx +165 -0
  35. package/adapters/claude-code/mods/ork-mensageiro/hooks/recepcao.ts +256 -0
  36. package/adapters/claude-code/mods/ork-mensageiro/hooks/register.tsx +481 -0
  37. package/adapters/claude-code/mods/ork-mensageiro/orkastery-mod.json +5 -0
  38. package/adapters/claude-code/mods/ork-mensageiro/types/index.d.ts +85 -0
  39. package/adapters/claude-code/mods/ork-mesa/.claude-plugin/plugin.json +14 -0
  40. package/adapters/claude-code/mods/ork-mesa/hooks/cartoes.tsx +246 -0
  41. package/adapters/claude-code/mods/ork-mesa/hooks/decidir.ts +110 -0
  42. package/adapters/claude-code/mods/ork-mesa/hooks/fila.ts +253 -0
  43. package/adapters/claude-code/mods/ork-mesa/hooks/hooks.json +3 -0
  44. package/adapters/claude-code/mods/ork-mesa/hooks/obvia.ts +98 -0
  45. package/adapters/claude-code/mods/ork-mesa/hooks/register.tsx +493 -0
  46. package/adapters/claude-code/mods/ork-mesa/orkastery-mod.json +5 -0
  47. package/adapters/claude-code/mods/ork-mesa/types/index.d.ts +131 -0
  48. package/adapters/claude-code/mods/ork-pista/.claude-plugin/plugin.json +14 -0
  49. package/adapters/claude-code/mods/ork-pista/hooks/acoes.ts +71 -0
  50. package/adapters/claude-code/mods/ork-pista/hooks/ci.ts +121 -0
  51. package/adapters/claude-code/mods/ork-pista/hooks/hooks.json +3 -0
  52. package/adapters/claude-code/mods/ork-pista/hooks/pista.tsx +356 -0
  53. package/adapters/claude-code/mods/ork-pista/hooks/register.tsx +439 -0
  54. package/adapters/claude-code/mods/ork-pista/orkastery-mod.json +5 -0
  55. package/adapters/claude-code/mods/ork-pista/types/index.d.ts +85 -0
  56. package/adapters/claude-code/mods/ork-ponte/.claude-plugin/plugin.json +13 -0
  57. package/adapters/claude-code/mods/ork-ponte/hooks/faixa.tsx +57 -0
  58. package/adapters/claude-code/mods/ork-ponte/hooks/guarda.ts +410 -0
  59. package/adapters/claude-code/mods/ork-ponte/hooks/hooks.json +3 -0
  60. package/adapters/claude-code/mods/ork-ponte/hooks/mostrado.ts +55 -0
  61. package/adapters/claude-code/mods/ork-ponte/hooks/nucleo.ts +157 -0
  62. package/adapters/claude-code/mods/ork-ponte/hooks/papel.ts +42 -0
  63. package/adapters/claude-code/mods/ork-ponte/hooks/register.ts +331 -0
  64. package/adapters/claude-code/mods/ork-ponte/hooks/vigia.ts +76 -0
  65. package/adapters/claude-code/mods/ork-ponte/orkastery-mod.json +5 -0
  66. package/adapters/claude-code/mods/ork-ponte/types/index.d.ts +178 -0
  67. package/adapters/claude-code/mods/ork-portao/.claude-plugin/plugin.json +14 -0
  68. package/adapters/claude-code/mods/ork-portao/hooks/hooks.json +3 -0
  69. package/adapters/claude-code/mods/ork-portao/hooks/lease.ts +201 -0
  70. package/adapters/claude-code/mods/ork-portao/hooks/plano.ts +304 -0
  71. package/adapters/claude-code/mods/ork-portao/hooks/register.ts +339 -0
  72. package/adapters/claude-code/mods/ork-portao/hooks/verify.ts +152 -0
  73. package/adapters/claude-code/mods/ork-portao/orkastery-mod.json +5 -0
  74. package/adapters/claude-code/mods/ork-portao/types/index.d.ts +60 -0
  75. package/adapters/claude-code/mods/ork-radar/.claude-plugin/plugin.json +14 -0
  76. package/adapters/claude-code/mods/ork-radar/hooks/colisao.ts +420 -0
  77. package/adapters/claude-code/mods/ork-radar/hooks/hooks.json +3 -0
  78. package/adapters/claude-code/mods/ork-radar/hooks/mapa.tsx +322 -0
  79. package/adapters/claude-code/mods/ork-radar/hooks/register.tsx +470 -0
  80. package/adapters/claude-code/mods/ork-radar/orkastery-mod.json +5 -0
  81. package/adapters/claude-code/mods/ork-radar/types/index.d.ts +72 -0
  82. package/adapters/claude-code/mods/ork-ritual/.claude-plugin/plugin.json +14 -0
  83. package/adapters/claude-code/mods/ork-ritual/hooks/hooks.json +3 -0
  84. package/adapters/claude-code/mods/ork-ritual/hooks/nota.ts +88 -0
  85. package/adapters/claude-code/mods/ork-ritual/hooks/register.tsx +494 -0
  86. package/adapters/claude-code/mods/ork-ritual/hooks/replay.tsx +271 -0
  87. package/adapters/claude-code/mods/ork-ritual/hooks/ritual.ts +218 -0
  88. package/adapters/claude-code/mods/ork-ritual/orkastery-mod.json +5 -0
  89. package/adapters/claude-code/mods/ork-ritual/types/index.d.ts +106 -0
  90. package/adapters/claude-code/mods/ork-sentinela/.claude-plugin/plugin.json +14 -0
  91. package/adapters/claude-code/mods/ork-sentinela/hooks/alertas.ts +85 -0
  92. package/adapters/claude-code/mods/ork-sentinela/hooks/despacho.ts +156 -0
  93. package/adapters/claude-code/mods/ork-sentinela/hooks/hooks.json +3 -0
  94. package/adapters/claude-code/mods/ork-sentinela/hooks/register.ts +511 -0
  95. package/adapters/claude-code/mods/ork-sentinela/hooks/vigia.ts +186 -0
  96. package/adapters/claude-code/mods/ork-sentinela/orkastery-mod.json +5 -0
  97. package/adapters/claude-code/mods/ork-sentinela/types/index.d.ts +65 -0
  98. package/adapters/claude-code/mods/ork-torre/.claude-plugin/plugin.json +14 -0
  99. package/adapters/claude-code/mods/ork-torre/hooks/agenda.ts +60 -0
  100. package/adapters/claude-code/mods/ork-torre/hooks/detalhe.tsx +236 -0
  101. package/adapters/claude-code/mods/ork-torre/hooks/frases.ts +42 -0
  102. package/adapters/claude-code/mods/ork-torre/hooks/hooks.json +3 -0
  103. package/adapters/claude-code/mods/ork-torre/hooks/painel.tsx +344 -0
  104. package/adapters/claude-code/mods/ork-torre/hooks/rede.ts +97 -0
  105. package/adapters/claude-code/mods/ork-torre/hooks/register.tsx +437 -0
  106. package/adapters/claude-code/mods/ork-torre/orkastery-mod.json +5 -0
  107. package/adapters/claude-code/mods/ork-torre/types/index.d.ts +108 -0
  108. package/adapters/codex/skills/ork/SKILL.md +2 -0
  109. package/adapters/hermes/README.md +64 -1
  110. package/adapters/hermes/bin/ork-conhecimento-colecoes.sh +14 -0
  111. package/adapters/hermes/bin/ork-conhecimento-listar.sh +15 -0
  112. package/adapters/hermes/bin/ork-conhecimento-mostrar.sh +16 -0
  113. package/adapters/hermes/bin/ork-conhecimento-verificar.sh +15 -0
  114. package/adapters/hermes/bin/ork-vigia-batida.py +127 -0
  115. package/adapters/hermes/hermes.plugin.json +4 -0
  116. package/adapters/hermes/hitl-ingress/__init__.py +101 -8
  117. package/adapters/hermes/skills/orkastery-devmaster/SKILL.md +3 -3
  118. package/adapters/openclaw/README.md +83 -10
  119. package/adapters/openclaw/bin/ork-vigia-batida.js +86 -0
  120. package/adapters/openclaw/dist/hitl-ingress.js +106 -9
  121. package/adapters/openclaw/dist/index.js +86 -0
  122. package/adapters/openclaw/openclaw.plugin.json +34 -4
  123. package/adapters/openclaw/package.json +2 -2
  124. package/adapters/openclaw/src/hitl-ingress.ts +103 -9
  125. package/adapters/openclaw/src/index.ts +94 -0
  126. package/assets/adapters-en/claude-code/README.md +403 -0
  127. package/assets/adapters-en/claude-code/agents/ork-check.md +33 -0
  128. package/assets/adapters-en/claude-code/agents/ork-go.md +33 -0
  129. package/assets/adapters-en/claude-code/agents/ork-goal.md +34 -0
  130. package/assets/adapters-en/claude-code/agents/ork-master.md +35 -0
  131. package/assets/adapters-en/claude-code/agents/ork-plan.md +33 -0
  132. package/assets/adapters-en/claude-code/agents/ork-ship.md +33 -0
  133. package/assets/adapters-en/claude-code/commands/check.md +46 -0
  134. package/assets/adapters-en/claude-code/commands/go.md +46 -0
  135. package/assets/adapters-en/claude-code/commands/goal.md +55 -0
  136. package/assets/adapters-en/claude-code/commands/master.md +54 -0
  137. package/assets/adapters-en/claude-code/commands/onboarding.md +22 -0
  138. package/assets/adapters-en/claude-code/commands/ork.md +126 -0
  139. package/assets/adapters-en/claude-code/commands/plan.md +47 -0
  140. package/assets/adapters-en/claude-code/commands/ship.md +45 -0
  141. package/assets/adapters-en/codex/skills/ork/SKILL.md +85 -0
  142. package/assets/adapters-en/hermes/README.md +273 -0
  143. package/assets/adapters-en/hermes/skills/orkastery-devmaster/SKILL.md +169 -0
  144. package/assets/docs-en/markdownlint-cli2.jsonc +22 -0
  145. package/assets/docs-en/padroes/documentacao-de-produto.md +135 -0
  146. package/assets/docs-en/padroes/roadmap-de-produto.md +100 -0
  147. package/assets/docs-en/produto/README.md +14 -0
  148. package/assets/docs-en/produto/_modelo-feature.md +62 -0
  149. package/assets/docs-en/roadmap/README.md +14 -0
  150. package/assets/docs-en/roadmap/_modelo-item.md +75 -0
  151. package/assets/references-en/README.md +25 -0
  152. package/assets/references-en/code-review-axes.md +82 -0
  153. package/assets/references-en/definition-of-done.md +74 -0
  154. package/assets/references-en/performance-checklist.md +53 -0
  155. package/assets/references-en/security-checklist.md +101 -0
  156. package/assets/references-en/testing-patterns.md +51 -0
  157. package/assets/security-scan/defaults/.golangci.yml +2 -0
  158. package/assets/security-scan/defaults/eslint.config.mjs +11 -0
  159. package/assets/security-scan/defaults/gitleaks.toml +3 -0
  160. package/assets/security-scan/defaults/ruff.toml +1 -0
  161. package/assets/security-scan/tools-agil.json +87 -0
  162. package/assets/security-scan/tools.json +625 -0
  163. package/assets/skills-en/core/onboarding/SKILL.md +58 -0
  164. package/assets/skills-en/core/orkastery-bootstrap/SKILL.md +119 -0
  165. package/assets/skills-en/core/thread-state/SKILL.md +88 -0
  166. package/assets/skills-en/governance/decision-triage/SKILL.md +65 -0
  167. package/assets/skills-en/governance/narrative-guardian/SKILL.md +66 -0
  168. package/assets/skills-en/governance/roadmap-keeper/SKILL.md +60 -0
  169. package/assets/skills-en/governance/scope-check-capability-map/SKILL.md +71 -0
  170. package/assets/skills-en/observability/thread-tracing/SKILL.md +63 -0
  171. package/assets/skills-en/phases/check-quality/SKILL.md +103 -0
  172. package/assets/skills-en/phases/go-implementation/SKILL.md +78 -0
  173. package/assets/skills-en/phases/goal-definition/SKILL.md +69 -0
  174. package/assets/skills-en/phases/master-metrics/SKILL.md +72 -0
  175. package/assets/skills-en/phases/plan-specification/SKILL.md +67 -0
  176. package/assets/skills-en/phases/security-remediation/SKILL.md +70 -0
  177. package/assets/skills-en/phases/ship-release/SKILL.md +71 -0
  178. package/assets/skills-en/reviewers/code-reviewer/SKILL.md +61 -0
  179. package/assets/skills-en/reviewers/security-auditor/SKILL.md +93 -0
  180. package/assets/skills-en/reviewers/test-engineer/SKILL.md +66 -0
  181. package/assets/skills-en/reviewers/web-performance-auditor/SKILL.md +63 -0
  182. package/dist/adapters/claude-bg.js +193 -15
  183. package/dist/adapters/codex-controller-worker.js +12 -5
  184. package/dist/adapters/codex-events.js +16 -4
  185. package/dist/adapters/codex.js +13 -2
  186. package/dist/agents-md.js +24 -15
  187. package/dist/atualizar-branch.js +245 -0
  188. package/dist/auditoria.js +13 -11
  189. package/dist/auditrun.js +68 -48
  190. package/dist/autorizacao-duravel.js +327 -0
  191. package/dist/board.js +98 -43
  192. package/dist/branch-de-estado.js +39 -9
  193. package/dist/busca-semantica.js +7 -5
  194. package/dist/catalogo.js +35 -1
  195. package/dist/changelog-reconciliacao.js +290 -0
  196. package/dist/check-agil.js +500 -0
  197. package/dist/check-modo.js +41 -0
  198. package/dist/check-paralelo.js +183 -0
  199. package/dist/ci.js +255 -46
  200. package/dist/ciclos.js +8 -6
  201. package/dist/claim-lint.js +12 -8
  202. package/dist/claims-conferir.js +350 -0
  203. package/dist/claims.js +13 -10
  204. package/dist/company-brain-client.js +45 -3
  205. package/dist/company-brain-journal.js +2 -1
  206. package/dist/company-brain-migration.js +47 -6
  207. package/dist/conducao-batida.js +759 -0
  208. package/dist/conducao-sentinela.js +405 -0
  209. package/dist/conducao-texto.js +12 -18
  210. package/dist/conducao.js +206 -59
  211. package/dist/conhecimento-consulta.js +270 -0
  212. package/dist/conhecimento.js +514 -0
  213. package/dist/conta-esgotada.js +127 -0
  214. package/dist/dado-privado.js +816 -0
  215. package/dist/decisao-autonoma.js +5 -4
  216. package/dist/demo.js +14 -12
  217. package/dist/dependencias-da-worktree.js +25 -0
  218. package/dist/divida.js +38 -36
  219. package/dist/docs.js +103 -82
  220. package/dist/doctor-forja.js +345 -0
  221. package/dist/doctor-pulse-cron.js +294 -27
  222. package/dist/doctor-rede.js +18 -17
  223. package/dist/doctor.js +278 -116
  224. package/dist/dsn-da-memoria.js +417 -0
  225. package/dist/entrega-por-mod.js +503 -0
  226. package/dist/entrega-pr.js +158 -57
  227. package/dist/escopo-escrita.js +10 -1
  228. package/dist/esgotamentos.js +13 -11
  229. package/dist/estado-thread.js +42 -17
  230. package/dist/evalrunner.js +35 -32
  231. package/dist/experiencia-instalacao.js +45 -25
  232. package/dist/fabrica-batida.js +323 -0
  233. package/dist/fabrica-estado.js +49 -16
  234. package/dist/fabrica-publicar.js +3 -1
  235. package/dist/fila-pesada.js +444 -0
  236. package/dist/fix.js +24 -21
  237. package/dist/forja/adaptador.js +6 -0
  238. package/dist/forja/ambiente-de-ci.js +27 -0
  239. package/dist/forja/api.js +256 -0
  240. package/dist/forja/cache.js +89 -0
  241. package/dist/forja/cli.js +60 -0
  242. package/dist/forja/contrato.js +9 -0
  243. package/dist/forja/endereco.js +43 -0
  244. package/dist/forja/estado.js +22 -0
  245. package/dist/forja/executor.js +73 -0
  246. package/dist/forja/github/ci.js +95 -0
  247. package/dist/forja/github/dono-da-rede.js +18 -0
  248. package/dist/forja/github/metadados.js +15 -0
  249. package/dist/forja/github/pedidos.js +200 -0
  250. package/dist/forja/gitlab/ci.js +141 -0
  251. package/dist/forja/gitlab/consultas.js +59 -0
  252. package/dist/forja/gitlab/dono-da-rede.js +43 -0
  253. package/dist/forja/gitlab/metadados.js +15 -0
  254. package/dist/forja/gitlab/pedidos-abertos.js +158 -0
  255. package/dist/forja/gitlab/pedidos.js +141 -0
  256. package/dist/forja/produtor.js +32 -0
  257. package/dist/forja/registro.js +31 -0
  258. package/dist/forja/resolver.js +121 -0
  259. package/dist/forja/texto.js +13 -0
  260. package/dist/forja/versao.js +71 -0
  261. package/dist/forja.js +124 -81
  262. package/dist/gates.js +3 -28
  263. package/dist/handoff.js +33 -19
  264. package/dist/hitl-contract.js +46 -43
  265. package/dist/hitl-curto.js +37 -25
  266. package/dist/hitl-gates.js +13 -11
  267. package/dist/hitl-local-receipt.js +53 -0
  268. package/dist/hitl-local.js +11 -2
  269. package/dist/hitl-lock.js +5 -11
  270. package/dist/hitl-public-receipt.js +11 -0
  271. package/dist/hitl-resumo.js +72 -3
  272. package/dist/hitl-sessions.js +62 -9
  273. package/dist/hitl-tempo-parado.js +4 -4
  274. package/dist/hitl-texto-livre.js +7 -4
  275. package/dist/hitl.js +63 -64
  276. package/dist/horario.js +30 -7
  277. package/dist/hosts.js +155 -134
  278. package/dist/impedimento.js +108 -14
  279. package/dist/index.js +1421 -1019
  280. package/dist/indice-vetorial.js +14 -12
  281. package/dist/indice.js +7 -1
  282. package/dist/init.js +54 -49
  283. package/dist/instabilidade.js +144 -0
  284. package/dist/integracoes-locais.js +4 -0
  285. package/dist/intelligence-graph-cli.js +213 -88
  286. package/dist/intelligence-graph-contexto.js +56 -17
  287. package/dist/intelligence-graph-contract.js +2 -1
  288. package/dist/intelligence-graph-extract-md.js +56 -4
  289. package/dist/intelligence-graph-extract-ts.js +71 -3
  290. package/dist/intelligence-graph-query.js +96 -34
  291. package/dist/leases.js +19 -18
  292. package/dist/ledger-stats.js +17 -16
  293. package/dist/ledger.js +46 -2
  294. package/dist/licoes.js +12 -11
  295. package/dist/liveness.js +6 -3
  296. package/dist/locale-accounts.js +220 -0
  297. package/dist/locale-adapter.js +291 -0
  298. package/dist/locale-ajuda.js +833 -0
  299. package/dist/locale-audit.js +199 -0
  300. package/dist/locale-claims.js +213 -0
  301. package/dist/locale-conducao.js +138 -0
  302. package/dist/locale-conhecimento.js +181 -0
  303. package/dist/locale-decisao.js +205 -0
  304. package/dist/locale-docs.js +230 -0
  305. package/dist/locale-estado.js +101 -0
  306. package/dist/locale-forja.js +290 -0
  307. package/dist/locale-gerados.js +165 -0
  308. package/dist/locale-grafo.js +129 -0
  309. package/dist/locale-master.js +182 -0
  310. package/dist/locale-network.js +524 -0
  311. package/dist/locale-onboarding.js +92 -0
  312. package/dist/locale-operacao-restante.js +931 -0
  313. package/dist/locale-phase.js +151 -0
  314. package/dist/locale-projetos.js +100 -0
  315. package/dist/locale-prompts.js +194 -0
  316. package/dist/locale-pulse.js +349 -0
  317. package/dist/locale-reservas.js +87 -0
  318. package/dist/locale-retry.js +524 -0
  319. package/dist/locale-roadmap.js +102 -0
  320. package/dist/locale-security-scan.js +69 -0
  321. package/dist/locale-setup.js +192 -0
  322. package/dist/locale-ship.js +597 -0
  323. package/dist/locale-thread.js +421 -0
  324. package/dist/locale-verify.js +201 -0
  325. package/dist/locale-worktree.js +246 -0
  326. package/dist/locale.js +1258 -0
  327. package/dist/maestro-runtime.js +22 -3
  328. package/dist/manifest.js +415 -13
  329. package/dist/maquina-ociosa.js +211 -0
  330. package/dist/maquina.js +31 -7
  331. package/dist/master-digest.js +6 -1
  332. package/dist/master-nota-local.js +200 -0
  333. package/dist/master-nota.js +14 -8
  334. package/dist/master.js +139 -65
  335. package/dist/mcp-artifacts.js +11 -2
  336. package/dist/mcp-conhecimento.js +52 -0
  337. package/dist/mcp-experiencia.js +26 -5
  338. package/dist/mcp-git.js +23 -6
  339. package/dist/mcp-grafo.js +7 -4
  340. package/dist/mcp-install.js +73 -8
  341. package/dist/mcp-noctum.js +101 -0
  342. package/dist/mcp-server.js +90 -16
  343. package/dist/mcp-ship-transporte.js +977 -0
  344. package/dist/mcp-ship.js +71 -25
  345. package/dist/mcp-transportes.js +17 -0
  346. package/dist/mcp-verify.js +6 -1
  347. package/dist/memoria.js +63 -58
  348. package/dist/modos-migracao.js +8 -6
  349. package/dist/modos.js +20 -24
  350. package/dist/network-roadmap.js +90 -51
  351. package/dist/noctum-aceite.js +789 -0
  352. package/dist/noctum-arco.js +1418 -0
  353. package/dist/noctum-capacidade.js +141 -0
  354. package/dist/noctum-changelog.js +399 -0
  355. package/dist/noctum-cli.js +482 -0
  356. package/dist/noctum-coordenacao.js +1225 -0
  357. package/dist/noctum-entrega.js +1169 -0
  358. package/dist/noctum-envelope.js +1046 -0
  359. package/dist/noctum-execucao.js +376 -0
  360. package/dist/noctum-fechamento.js +405 -0
  361. package/dist/noctum-fila.js +314 -0
  362. package/dist/noctum-guarda.js +256 -0
  363. package/dist/noctum-integracao.js +507 -0
  364. package/dist/noctum-maquinas.js +383 -0
  365. package/dist/noctum-medicao.js +450 -0
  366. package/dist/noctum-modo.js +362 -0
  367. package/dist/noctum-pergunta-canal.js +96 -0
  368. package/dist/noctum-pergunta.js +115 -0
  369. package/dist/noctum-provas.js +838 -0
  370. package/dist/noctum-reconciliacao.js +591 -0
  371. package/dist/noctum-registro.js +215 -0
  372. package/dist/noctum-relatorio.js +827 -0
  373. package/dist/noctum-resposta.js +207 -0
  374. package/dist/noctum-sessoes-em-voo.js +93 -0
  375. package/dist/noctum-supervisao.js +649 -0
  376. package/dist/noctum-terminal.js +459 -0
  377. package/dist/noctum-transporte.js +655 -0
  378. package/dist/noctum-vigia.js +639 -0
  379. package/dist/ocupacao.js +32 -3
  380. package/dist/onboarding.js +56 -26
  381. package/dist/orkmind.js +48 -25
  382. package/dist/orquestracao.js +44 -47
  383. package/dist/parado-no-condutor.js +174 -127
  384. package/dist/phase.js +144 -63
  385. package/dist/policies.js +37 -4
  386. package/dist/portfolio.js +4 -2
  387. package/dist/postura-local.js +235 -0
  388. package/dist/preflight.js +11 -10
  389. package/dist/procedencia.js +220 -0
  390. package/dist/projeto-alvo.js +186 -24
  391. package/dist/prompts.js +140 -42
  392. package/dist/prova-minima.js +5 -6
  393. package/dist/pulse-cadencia.js +5 -4
  394. package/dist/pulse-consentimento.js +53 -1
  395. package/dist/pulse-delivery.js +151 -24
  396. package/dist/pulse-resposta.js +368 -4
  397. package/dist/pulse.js +188 -22
  398. package/dist/ratelimit.js +16 -6
  399. package/dist/recall.js +14 -13
  400. package/dist/redacao-saida.js +63 -0
  401. package/dist/rede-adesao.js +13 -8
  402. package/dist/rede-forja.js +108 -24
  403. package/dist/rede-status.js +66 -47
  404. package/dist/rede.js +86 -46
  405. package/dist/retomada-checkpoint.js +101 -0
  406. package/dist/retry.js +451 -212
  407. package/dist/roadmap-reservas.js +45 -28
  408. package/dist/roadmap-status.js +129 -33
  409. package/dist/runtime-ambiente.js +5 -0
  410. package/dist/runtime-context.js +284 -32
  411. package/dist/runtime-escada.js +423 -0
  412. package/dist/runtime-profiles.js +103 -46
  413. package/dist/runtimes.js +2 -1
  414. package/dist/saida-segura.js +3 -2
  415. package/dist/security-scan/agil.js +355 -0
  416. package/dist/security-scan/cli.js +76 -0
  417. package/dist/security-scan/compare.js +149 -0
  418. package/dist/security-scan/config.js +93 -0
  419. package/dist/security-scan/detect.js +97 -0
  420. package/dist/security-scan/executor.js +188 -0
  421. package/dist/security-scan/guard.js +180 -0
  422. package/dist/security-scan/imagem-de-lint.js +96 -0
  423. package/dist/security-scan/normalize/actionlint.js +12 -0
  424. package/dist/security-scan/normalize/eslint.js +12 -0
  425. package/dist/security-scan/normalize/gitleaks.js +13 -0
  426. package/dist/security-scan/normalize/golangci-lint.js +13 -0
  427. package/dist/security-scan/normalize/govulncheck.js +36 -0
  428. package/dist/security-scan/normalize/index.js +25 -0
  429. package/dist/security-scan/normalize/npm-audit.js +30 -0
  430. package/dist/security-scan/normalize/osv-scanner.js +32 -0
  431. package/dist/security-scan/normalize/oxlint.js +51 -0
  432. package/dist/security-scan/normalize/pip-audit.js +16 -0
  433. package/dist/security-scan/normalize/ruff.js +12 -0
  434. package/dist/security-scan/normalize/semgrep.js +20 -0
  435. package/dist/security-scan/normalize/trivy.js +33 -0
  436. package/dist/security-scan/normalize/util.js +204 -0
  437. package/dist/security-scan/normalize/zizmor.js +19 -0
  438. package/dist/security-scan/report.js +156 -0
  439. package/dist/security-scan/run.js +448 -0
  440. package/dist/security-scan/tools.js +62 -0
  441. package/dist/security-scan/trabalhador.js +74 -0
  442. package/dist/security-scan/types.js +15 -0
  443. package/dist/session-events.js +26 -5
  444. package/dist/session-watcher-claude.js +81 -20
  445. package/dist/session-watcher.js +340 -42
  446. package/dist/sessoes-contas.js +10 -1
  447. package/dist/sessoes-inventario.js +1 -1
  448. package/dist/sessoes.js +25 -23
  449. package/dist/setup.js +59 -58
  450. package/dist/ship-publicar.js +971 -0
  451. package/dist/ship.js +243 -97
  452. package/dist/steal.js +77 -0
  453. package/dist/superficie.js +14 -11
  454. package/dist/thread-close.js +12 -11
  455. package/dist/thread.js +274 -100
  456. package/dist/tokens.js +15 -11
  457. package/dist/trabalho-thread.js +297 -0
  458. package/dist/transporte-do-canal.js +189 -0
  459. package/dist/types.js +12 -1
  460. package/dist/util.js +13 -3
  461. package/dist/varredura-acoes.js +507 -0
  462. package/dist/verify.js +608 -76
  463. package/dist/vida-da-thread.js +254 -0
  464. package/dist/worktree-local.js +167 -0
  465. package/dist/worktree.js +99 -83
  466. package/dist/yaml.js +27 -8
  467. package/eval/casos/check-quality.json +77 -0
  468. package/eval/casos/security-auditor.json +148 -0
  469. package/eval/casos/security-remediation.json +161 -0
  470. package/eval/fixtures/security-scan/README.md +8 -0
  471. package/eval/fixtures/security-scan/go/.github/workflows/ci.yml +12 -0
  472. package/eval/fixtures/security-scan/go/Dockerfile +4 -0
  473. package/eval/fixtures/security-scan/go/README.md +4 -0
  474. package/eval/fixtures/security-scan/go/config.go +4 -0
  475. package/eval/fixtures/security-scan/go/go.mod +5 -0
  476. package/eval/fixtures/security-scan/go/go.sum +2 -0
  477. package/eval/fixtures/security-scan/go/main.go +31 -0
  478. package/eval/fixtures/security-scan/js/.github/workflows/ci.yml +12 -0
  479. package/eval/fixtures/security-scan/js/Dockerfile +3 -0
  480. package/eval/fixtures/security-scan/js/README.md +4 -0
  481. package/eval/fixtures/security-scan/js/package-lock.json +844 -0
  482. package/eval/fixtures/security-scan/js/package.json +10 -0
  483. package/eval/fixtures/security-scan/js/src/config.js +4 -0
  484. package/eval/fixtures/security-scan/js/src/server.js +17 -0
  485. package/eval/fixtures/security-scan/js/src/util.ts +4 -0
  486. package/eval/fixtures/security-scan/js/tsconfig.json +4 -0
  487. package/eval/fixtures/security-scan/python/.github/workflows/ci.yml +12 -0
  488. package/eval/fixtures/security-scan/python/Dockerfile +3 -0
  489. package/eval/fixtures/security-scan/python/README.md +4 -0
  490. package/eval/fixtures/security-scan/python/app/__init__.py +0 -0
  491. package/eval/fixtures/security-scan/python/app/config.py +2 -0
  492. package/eval/fixtures/security-scan/python/app/main.py +19 -0
  493. package/eval/fixtures/security-scan/python/requirements.txt +1 -0
  494. package/package.json +9 -4
  495. package/references/security-checklist.md +3 -3
  496. package/schemas/code-artifact-graph.v1.schema.json +2 -1
  497. package/skills/README.md +1 -0
  498. package/skills/core/orkastery-bootstrap/SKILL.md +2 -2
  499. package/skills/phases/check-quality/SKILL.md +16 -0
  500. package/skills/phases/go-implementation/SKILL.md +6 -0
  501. package/skills/phases/security-remediation/SKILL.md +70 -0
  502. package/skills/reviewers/security-auditor/SKILL.md +25 -0
@@ -48,6 +48,7 @@ exports.montarComando = montarComando;
48
48
  exports.extrairThreadId = extrairThreadId;
49
49
  exports.acharRollout = acharRollout;
50
50
  exports.parseRateLimitCodex = parseRateLimitCodex;
51
+ exports.ambienteDoFilho = ambienteDoFilho;
51
52
  exports.despachar = despachar;
52
53
  exports.logs = logs;
53
54
  const codex_controller_1 = require("./codex-controller");
@@ -58,6 +59,7 @@ const util_1 = require("../util");
58
59
  const runtime_ambiente_1 = require("../runtime-ambiente");
59
60
  const claude_bg_1 = require("./claude-bg");
60
61
  const runtime_profiles_1 = require("../runtime-profiles");
62
+ const locale_1 = require("../locale");
61
63
  exports.NOME_ADAPTER = 'codex';
62
64
  /**
63
65
  * Variaveis que REDIRECIONAM o codex para um provider pago por token.
@@ -113,11 +115,12 @@ function casaDoCodex(perfil) {
113
115
  */
114
116
  function conferirAuth(perfil) {
115
117
  let ambiente;
118
+ // RM-061 (F3b, GO-FIX 1): o erro do catalogo fica registrado, e a impressao o remonta.
116
119
  try {
117
120
  ambiente = ambienteDoDespacho(process.env, perfil);
118
121
  }
119
122
  catch (e) {
120
- return { ok: false, detalhe: e.message };
123
+ return { ok: false, detalhe: (0, locale_1.textoDoErro)(e) };
121
124
  }
122
125
  const r = exec('codex', ['login', 'status'], undefined, 30000, ambiente);
123
126
  // A14: sem codigo de saida (timeout, sinal ou binario ausente), a conferencia e inconclusiva.
@@ -351,6 +354,14 @@ function parseRateLimitCodex(saida, agoraMs = Date.now()) {
351
354
  const linha = (saida ?? '').split('\n').find((l) => frase.test(l)) ?? saida;
352
355
  return { resetEm: null, fonte: 'sem-horario', trecho: linha.trim().slice(0, 200) };
353
356
  }
357
+ /**
358
+ * O ambiente do filho do despacho: o do processo, sem provider pago, com o contexto da condução POR
359
+ * CIMA. RM-052 (fatia 2, D2): a ordem importa, porque e o extra que neutraliza o `ORK_PROJETO` e o
360
+ * modo host herdados de quem despachou.
361
+ */
362
+ function ambienteDoFilho(pedido, base = process.env) {
363
+ return { ...ambienteDoDespacho(base, pedido.perfil), ...(pedido.ambienteExtra ?? {}) };
364
+ }
354
365
  /** Despacho governado exige vínculo: nenhum fallback implícito para codex exec. */
355
366
  function despachar(pedido) {
356
367
  if (!pedido.vinculo)
@@ -370,7 +381,7 @@ function despachar(pedido) {
370
381
  }
371
382
  let ambiente;
372
383
  try {
373
- ambiente = { ...ambienteDoDespacho(process.env, pedido.perfil), ...(pedido.ambienteExtra ?? {}) };
384
+ ambiente = ambienteDoFilho(pedido);
374
385
  }
375
386
  catch (e) {
376
387
  return { ok: false, comando: [], sessionId: null, verificada: false, stdout: '', stderr: '', erro: e.message };
package/dist/agents-md.js CHANGED
@@ -39,42 +39,51 @@ exports.atualizarAgentsMd = atualizarAgentsMd;
39
39
  /** Bloco de instrucoes do Orkastery em AGENTS.md, preservando todo texto humano. */
40
40
  const fs = __importStar(require("node:fs"));
41
41
  const path = __importStar(require("node:path"));
42
+ const locale_1 = require("./locale");
42
43
  const util_1 = require("./util");
43
44
  exports.INICIO_AGENTS_ORK = '<!-- orkastery:begin -->';
44
45
  exports.FIM_AGENTS_ORK = '<!-- orkastery:end -->';
45
46
  function seguro(valor) {
46
47
  return valor.replace(/[\r\n\0`]+/g, ' ').trim();
47
48
  }
48
- function blocoAgentsMd(manifesto) {
49
+ /**
50
+ * O bloco do `ork init` no `AGENTS.md`. RM-061 (F3a, D1 e D2): o texto sai na lingua pedida, pela familia `gerados`
51
+ * do catalogo; os marcadores, o titulo e as verificacoes do manifesto sao os mesmos nas duas linguas. Sem locale,
52
+ * pt-BR: so o `ork init` passa a lingua do dono.
53
+ */
54
+ function blocoAgentsMd(manifesto, locale = locale_1.LOCALE_PADRAO) {
55
+ const t = (0, locale_1.msg)(locale).gerados.agents;
49
56
  const comandos = Object.entries(manifesto.verify)
50
57
  .filter((item) => typeof item[1] === 'string' && item[1].trim() !== '')
51
58
  .map(([nome, comando]) => `- ${seguro(nome)}: \`${seguro(comando)}\``);
59
+ const modos = manifesto.conduction.allowed_modes.map(m => `#${m[0].toUpperCase()}${m.slice(1)}`).join(', ');
52
60
  return `${exports.INICIO_AGENTS_ORK}
53
61
  ## Orkastery
54
62
 
55
- Projeto: **${seguro(manifesto.project.name)}** (${seguro(manifesto.project.abbrev)}). Branch base: \`${seguro(manifesto.worktree.base_branch)}\`.
63
+ ${t.projeto(seguro(manifesto.project.name), seguro(manifesto.project.abbrev), seguro(manifesto.worktree.base_branch))}
56
64
 
57
- - Comece com \`ork doctor\`, \`ork onboarding\` e \`ork thread status <thread>\`.
58
- - Conduza o ciclo GOAL → PLAN → GO → CHECK → SHIP → MASTER pelo \`ork\`.
59
- - Respeite o modo da thread: ${manifesto.conduction.allowed_modes.map(m => `#${m[0].toUpperCase()}${m.slice(1)}`).join(', ')}.
60
- - Edite produto somente na worktree vinculada; estado em \`.orkastery/\` pertence ao núcleo.
61
- - PLAN não implementa. GO usa commits atômicos. CHECK não corrige. SHIP acontece por \`ork ship\`.
62
- - Toda alegação exige claim e comando reproduzível; self-report não é evidência.
63
- - MASTER por omissão só da sua thread: \`ork master <thread> --aceitar-omissao\`; sem a thread, fecha também as entregas de outras frentes.
64
- ${comandos.length ? `\nVerificações do manifesto:\n\n${comandos.join('\n')}\n` : ''}
65
- Este bloco é mantido por \`ork init\`. Edite livremente o restante do arquivo.
65
+ - ${t.comece}
66
+ - ${t.ciclo}
67
+ - ${t.modo(modos)}
68
+ - ${t.worktree}
69
+ - ${t.fases}
70
+ - ${t.claims}
71
+ - ${t.master}
72
+ ${comandos.length ? `\n${t.verificacoes}\n\n${comandos.join('\n')}\n` : ''}
73
+ ${t.rodape}
66
74
  ${exports.FIM_AGENTS_ORK}`;
67
75
  }
68
- /** Cria ou substitui somente o bloco delimitado. Marcadores ambiguos recusam sem escrita. */
69
- function atualizarAgentsMd(raiz, manifesto) {
76
+ /** Cria ou substitui somente o bloco delimitado, no `locale` pedido. Marcadores ambiguos recusam sem escrita. */
77
+ function atualizarAgentsMd(raiz, manifesto, locale = locale_1.LOCALE_PADRAO) {
70
78
  const caminho = path.join(raiz, 'AGENTS.md');
71
79
  const anterior = fs.existsSync(caminho) ? fs.readFileSync(caminho, 'utf8') : '';
72
80
  const inicios = anterior.split(exports.INICIO_AGENTS_ORK).length - 1;
73
81
  const fins = anterior.split(exports.FIM_AGENTS_ORK).length - 1;
74
82
  if (inicios !== fins || inicios > 1 || (inicios === 1 && anterior.indexOf(exports.INICIO_AGENTS_ORK) > anterior.indexOf(exports.FIM_AGENTS_ORK))) {
75
- throw new Error('AGENTS.md possui marcadores Orkastery ambiguos; corrija o bloco antes de rodar ork init');
83
+ // RM-061 (F3a): a recusa sai no locale do comando, remontada pela entrada do CLI (D14 da F2a).
84
+ throw new locale_1.ErroDoCatalogo((m) => m.gerados.agents.marcadoresAmbiguos);
76
85
  }
77
- const bloco = blocoAgentsMd(manifesto);
86
+ const bloco = blocoAgentsMd(manifesto, locale);
78
87
  const proximo = inicios === 1
79
88
  ? anterior.slice(0, anterior.indexOf(exports.INICIO_AGENTS_ORK)) + bloco + anterior.slice(anterior.indexOf(exports.FIM_AGENTS_ORK) + exports.FIM_AGENTS_ORK.length)
80
89
  : anterior === '' ? bloco + '\n' : anterior + (anterior.endsWith('\n') ? '\n' : '\n\n') + bloco + '\n';
@@ -0,0 +1,245 @@
1
+ "use strict";
2
+ var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
3
+ if (k2 === undefined) k2 = k;
4
+ var desc = Object.getOwnPropertyDescriptor(m, k);
5
+ if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) {
6
+ desc = { enumerable: true, get: function() { return m[k]; } };
7
+ }
8
+ Object.defineProperty(o, k2, desc);
9
+ }) : (function(o, m, k, k2) {
10
+ if (k2 === undefined) k2 = k;
11
+ o[k2] = m[k];
12
+ }));
13
+ var __setModuleDefault = (this && this.__setModuleDefault) || (Object.create ? (function(o, v) {
14
+ Object.defineProperty(o, "default", { enumerable: true, value: v });
15
+ }) : function(o, v) {
16
+ o["default"] = v;
17
+ });
18
+ var __importStar = (this && this.__importStar) || (function () {
19
+ var ownKeys = function(o) {
20
+ ownKeys = Object.getOwnPropertyNames || function (o) {
21
+ var ar = [];
22
+ for (var k in o) if (Object.prototype.hasOwnProperty.call(o, k)) ar[ar.length] = k;
23
+ return ar;
24
+ };
25
+ return ownKeys(o);
26
+ };
27
+ return function (mod) {
28
+ if (mod && mod.__esModule) return mod;
29
+ var result = {};
30
+ if (mod != null) for (var k = ownKeys(mod), i = 0; i < k.length; i++) if (k[i] !== "default") __createBinding(result, mod, k[i]);
31
+ __setModuleDefault(result, mod);
32
+ return result;
33
+ };
34
+ })();
35
+ Object.defineProperty(exports, "__esModule", { value: true });
36
+ exports.CONTRATO_DA_ATUALIZACAO = void 0;
37
+ exports.atualizarBranchDaThread = atualizarBranchDaThread;
38
+ exports.textoDaAtualizacao = textoDaAtualizacao;
39
+ /**
40
+ * RM-063 (F7): o merge da base remota na branch da thread, com a reconciliacao deterministica do CHANGELOG.
41
+ *
42
+ * Incidente de 12 e 13/10/2026: os PRs #153 e #154 ficaram prontos e esperaram de 5 a 6 horas pelo condutor, e cada
43
+ * merge da outra maquina na `main` reabriu o conflito no CHANGELOG; o condutor resolvia a mao, com um script. Aqui o
44
+ * mesmo passo, sob a conducao da thread (`branch.atualizar`, exclusiva com despacho e verify na mesma worktree):
45
+ *
46
+ * - traz a base remota e faz o merge dela na branch, na worktree da thread, sem commit ainda;
47
+ * - conflito em qualquer arquivo que nao seja o CHANGELOG aborta o merge e volta com a lista: conflito em codigo
48
+ * nunca e resolvido sozinho, e vira item da fila do dono;
49
+ * - com conflito so no CHANGELOG, ou sem conflito, os itens da thread voltam a `## Não publicado`, no mesmo grupo
50
+ * (`changelog-reconciliacao.ts`), e o merge e commitado;
51
+ * - com `enviar`, empurra a branch sem forca e prova pelo `git ls-remote`.
52
+ *
53
+ * A worktree com alteracao nao commitada, outra branch ou um merge em curso recusa antes de tocar em qualquer coisa.
54
+ */
55
+ const fs = __importStar(require("node:fs"));
56
+ const path = __importStar(require("node:path"));
57
+ const changelog_reconciliacao_1 = require("./changelog-reconciliacao");
58
+ const conducao_1 = require("./conducao");
59
+ const estado_thread_1 = require("./estado-thread");
60
+ const noctum_guarda_1 = require("./noctum-guarda");
61
+ const procedencia_1 = require("./procedencia");
62
+ const thread_1 = require("./thread");
63
+ const util_1 = require("./util");
64
+ const worktree_1 = require("./worktree");
65
+ const locale_1 = require("./locale");
66
+ exports.CONTRATO_DA_ATUALIZACAO = 'ork.branch-atualizada/v1';
67
+ /** O teto do merge e do push juntos: a conducao da thread vale por isto, com folga. */
68
+ const PRAZO_DA_ATUALIZACAO_MS = 10 * 60 * 1000;
69
+ const AMBIENTE_DO_GIT = () => ({ ...process.env, GIT_TERMINAL_PROMPT: '0', GIT_MERGE_AUTOEDIT: 'no',
70
+ GIT_SSH_COMMAND: process.env.GIT_SSH_COMMAND ?? 'ssh -o BatchMode=yes' });
71
+ /** O CHANGELOG numa revisao; `null` quando ele nao existe nela. */
72
+ function changelogEm(dir, ref) {
73
+ const r = (0, util_1.exec)('git', ['show', `${ref}:${changelog_reconciliacao_1.ARQUIVO_DO_CHANGELOG}`], dir, 30000);
74
+ return r.ok ? r.stdout : null;
75
+ }
76
+ /** Os arquivos em conflito do merge em curso. */
77
+ function emConflito(dir) {
78
+ const r = (0, util_1.exec)('git', ['diff', '--name-only', '--diff-filter=U', '-z'], dir, 30000);
79
+ return r.ok ? r.stdout.split('\0').filter(Boolean).sort() : null;
80
+ }
81
+ /**
82
+ * Faz o merge da base remota na branch da thread, sob a conducao dela. Nunca resolve conflito em codigo: aborta e
83
+ * devolve a lista. Recusa (com motivo tipado) antes de mexer na worktree que nao esta pronta.
84
+ */
85
+ function atualizarBranchDaThread(carregado, threadId, opcoes = {}) {
86
+ const raiz = (0, estado_thread_1.raizDoEstado)(carregado.raiz);
87
+ const remoto = carregado.manifesto.fabrica.remoto, base = carregado.manifesto.worktree.base_branch;
88
+ const t = (0, thread_1.lerThread)(raiz, threadId);
89
+ const branch = (0, worktree_1.branchDaWorktree)(t);
90
+ const cabeca = { contrato: exports.CONTRATO_DA_ATUALIZACAO, thread: t.id, branch, base: `${remoto}/${base}` };
91
+ const recusa = (motivo, detalhe) => ({ ...cabeca, acao: 'recusada', motivo, detalhe });
92
+ // RM-058, integracao (T1.1, D3 da ork-rm058integra): a branch da thread de um arco #Noctum e atualizada pelo passo da
93
+ // entrega do arco, com a regra do CHANGELOG dele; por fora, nem o comando nem a batida a mesclam.
94
+ const guarda = (0, noctum_guarda_1.guardaDaThread)(raiz, t.id);
95
+ if (guarda)
96
+ return recusa(guarda.motivo, guarda.texto);
97
+ let dir;
98
+ try {
99
+ dir = (0, procedencia_1.diretorioDaThread)(raiz, t);
100
+ }
101
+ catch (e) {
102
+ return recusa('worktree-ausente', e.message);
103
+ }
104
+ if (!t.worktree || !fs.existsSync(dir))
105
+ return recusa('worktree-ausente', `a thread ${t.id} não tem worktree nesta máquina`);
106
+ try {
107
+ // A sessao despachada que conduz a thread reentra pela identidade de despacho dela, como o `ork verify` (R3).
108
+ return (0, conducao_1.comConducao)(raiz, t.id, { canal: opcoes.canal ?? 'cli', correlacao: opcoes.correlacao ?? null, operacao: 'branch.atualizar',
109
+ fase: null, promptSha256: null, prazoMs: PRAZO_DA_ATUALIZACAO_MS, identidade: (0, conducao_1.identidadeDoAmbiente)(t.id, process.env, raiz),
110
+ ...(opcoes.esperarMs ? { esperarMs: opcoes.esperarMs } : {}) }, () => mesclar(dir, branch, remoto, base, opcoes, cabeca, recusa));
111
+ }
112
+ catch (e) {
113
+ if (e instanceof conducao_1.ErroDeConducao)
114
+ return recusa('conduzida', e.recusa.texto.split('\n').slice(0, 2).join(' '));
115
+ throw e;
116
+ }
117
+ }
118
+ function mesclar(dir, branch, remoto, base, opcoes, cabeca, recusa) {
119
+ const env = AMBIENTE_DO_GIT();
120
+ const git = (args, prazo = 60000) => (0, util_1.exec)('git', args, dir, prazo, env);
121
+ const atual = git(['rev-parse', '--abbrev-ref', 'HEAD']);
122
+ if (!atual.ok)
123
+ return recusa('git-sem-resposta', `git rev-parse saiu ${atual.code}: ${atual.stderr.trim().slice(0, 160)}`);
124
+ if (atual.stdout.trim() !== branch)
125
+ return recusa('branch-errada', `a worktree está na branch ${atual.stdout.trim()}, e a da thread é ${branch}`);
126
+ if (git(['rev-parse', '-q', '--verify', 'MERGE_HEAD']).ok)
127
+ return recusa('merge-em-curso', 'há um merge em curso na worktree');
128
+ const status = git(['status', '--porcelain', '--', '.', ':(exclude).orkastery']);
129
+ if (!status.ok)
130
+ return recusa('git-sem-resposta', `git status saiu ${status.code}`);
131
+ if (status.stdout.trim())
132
+ return recusa('worktree-suja', 'a worktree tem alteração não commitada; o merge não vai por cima dela');
133
+ if (opcoes.buscar !== false) {
134
+ const f = git(['fetch', '-q', '--no-tags', '--', remoto, `+refs/heads/${base}:refs/remotes/${remoto}/${base}`], 120000);
135
+ if (!f.ok)
136
+ return recusa('git-sem-resposta', `git fetch ${remoto} ${base} saiu ${f.error ?? f.code}: ${f.stderr.trim().split('\n')[0]?.slice(0, 160) ?? ''}`);
137
+ }
138
+ const deles = `refs/remotes/${remoto}/${base}`;
139
+ const ponta = git(['rev-parse', '--verify', '-q', `${deles}^{commit}`]);
140
+ if (!ponta.ok)
141
+ return recusa('base-ausente', `a cópia da base ${remoto}/${base} não existe neste repositório`);
142
+ if (opcoes.alinharCom && git(['rev-parse', 'HEAD']).stdout.trim() !== opcoes.alinharCom) {
143
+ if (!git(['merge-base', '--is-ancestor', 'HEAD', opcoes.alinharCom]).ok) {
144
+ return recusa('branch-desalinhada', `a branch local divergiu do head do PR (${opcoes.alinharCom.slice(0, 8)}): o merge não vai por cima`);
145
+ }
146
+ const ff = git(['merge', '--ff-only', '-q', opcoes.alinharCom], 120000);
147
+ if (!ff.ok)
148
+ return recusa('git-sem-resposta', `git merge --ff-only saiu ${ff.code}: ${(ff.stderr || ff.stdout).trim().split('\n')[0]?.slice(0, 160) ?? ''}`);
149
+ }
150
+ const shaAntes = git(['rev-parse', 'HEAD']).stdout.trim();
151
+ // O push nunca leva tag (push.followTags do usuario poria a tag de versao no remoto e dispararia a publicacao) nem forca.
152
+ const empurrar = (sha) => {
153
+ const p = git(['push', '-q', '--no-follow-tags', '--', remoto, `HEAD:refs/heads/${branch}`], 120000);
154
+ const remota = git(['ls-remote', '--', remoto, `refs/heads/${branch}`], 60000).stdout.split(/\s+/)[0] ?? '';
155
+ return p.ok && remota === sha ? null : `o merge ${sha.slice(0, 8)} ficou só nesta máquina: git push saiu ${p.code}` +
156
+ (remota ? `, e o remoto está em ${remota.slice(0, 8)}` : '');
157
+ };
158
+ if (git(['merge-base', '--is-ancestor', deles, 'HEAD']).ok) {
159
+ // Ja contem a base. Com `enviar`, a branch remota atras da local (o push que falhou na rodada anterior) e empurrada;
160
+ // a remota que andou para outro lado nao e sobrescrita.
161
+ let enviada = false;
162
+ if (opcoes.enviar) {
163
+ const remota = git(['ls-remote', '--', remoto, `refs/heads/${branch}`], 60000).stdout.split(/\s+/)[0] ?? '';
164
+ if (remota !== shaAntes) {
165
+ if (remota && !git(['merge-base', '--is-ancestor', remota, 'HEAD']).ok) {
166
+ return recusa('push-recusado', `o remoto da ${branch} está em ${remota.slice(0, 8)}, fora da história local: nada é empurrado por cima`);
167
+ }
168
+ const falha = empurrar(shaAntes);
169
+ if (falha)
170
+ return recusa('push-recusado', falha);
171
+ enviada = true;
172
+ }
173
+ }
174
+ return { ...cabeca, acao: 'ja-atualizada', sha: shaAntes, enviada };
175
+ }
176
+ const m = git(['merge', '--no-ff', '--no-commit', '--', deles], 120000);
177
+ const conflitos = emConflito(dir);
178
+ if (conflitos === null) {
179
+ git(['merge', '--abort']);
180
+ return recusa('git-sem-resposta', 'o git não disse os arquivos em conflito');
181
+ }
182
+ if (!m.ok && !git(['rev-parse', '-q', '--verify', 'MERGE_HEAD']).ok) {
183
+ return recusa('git-sem-resposta', `git merge saiu ${m.code}: ${(m.stderr || m.stdout).trim().split('\n')[0]?.slice(0, 160) ?? ''}`);
184
+ }
185
+ const emCodigo = conflitos.filter((a) => a !== changelog_reconciliacao_1.ARQUIVO_DO_CHANGELOG);
186
+ if (emCodigo.length) {
187
+ git(['merge', '--abort']);
188
+ return { ...cabeca, acao: 'conflito-em-codigo', arquivos: emCodigo };
189
+ }
190
+ // O CHANGELOG: os itens da thread voltam a "Não publicado", no mesmo grupo, com ou sem conflito nele.
191
+ let changelog = null;
192
+ const arquivo = path.join(dir, changelog_reconciliacao_1.ARQUIVO_DO_CHANGELOG);
193
+ const nosso = changelogEm(dir, 'HEAD'), delesTexto = changelogEm(dir, deles);
194
+ if (nosso !== null && delesTexto !== null) {
195
+ const mb = git(['merge-base', 'HEAD', deles]);
196
+ const baseTexto = mb.ok ? changelogEm(dir, mb.stdout.trim()) ?? '' : '';
197
+ const conflitou = conflitos.includes(changelog_reconciliacao_1.ARQUIVO_DO_CHANGELOG);
198
+ const mesclado = conflitou ? null : fs.readFileSync(arquivo, 'utf8');
199
+ const r = (0, changelog_reconciliacao_1.reconciliarChangelog)({ base: baseTexto, nosso, deles: delesTexto, mesclado });
200
+ // A reconciliacao so devolve itens de lista; a linha que a thread acrescentou e nao voltou (outra forma de item,
201
+ // edicao numa versao publicada) nunca some calada: o merge e abortado e fica com o dono.
202
+ if ((0, changelog_reconciliacao_1.temMarcadorDeConflito)(r.texto) || r.perdidas.length) {
203
+ git(['merge', '--abort']);
204
+ return { ...cabeca, acao: 'conflito-em-codigo', arquivos: [changelog_reconciliacao_1.ARQUIVO_DO_CHANGELOG] };
205
+ }
206
+ if (conflitou || r.texto !== mesclado) {
207
+ fs.writeFileSync(arquivo, r.texto, 'utf8');
208
+ if (!git(['add', '--', changelog_reconciliacao_1.ARQUIVO_DO_CHANGELOG]).ok) {
209
+ git(['merge', '--abort']);
210
+ return recusa('git-sem-resposta', 'git add do CHANGELOG falhou');
211
+ }
212
+ }
213
+ changelog = { devolvidos: r.devolvidos, itens: r.itens };
214
+ }
215
+ else if (conflitos.includes(changelog_reconciliacao_1.ARQUIVO_DO_CHANGELOG)) {
216
+ git(['merge', '--abort']);
217
+ return { ...cabeca, acao: 'conflito-em-codigo', arquivos: [changelog_reconciliacao_1.ARQUIVO_DO_CHANGELOG] };
218
+ }
219
+ const titulo = `Merge da ${remoto}/${base} na ${branch}` +
220
+ (changelog?.devolvidos ? `: ${changelog.devolvidos} item(ns) da thread de volta a "Não publicado" do CHANGELOG` : '');
221
+ const c = git(['commit', '-q', '--no-edit', '-m', titulo], 120000);
222
+ if (!c.ok) {
223
+ git(['merge', '--abort']);
224
+ return recusa('git-sem-resposta', `git commit do merge saiu ${c.code}: ${(c.stderr || c.stdout).trim().split('\n')[0]?.slice(0, 160) ?? ''}`);
225
+ }
226
+ const sha = git(['rev-parse', 'HEAD']).stdout.trim();
227
+ let enviada = false;
228
+ if (opcoes.enviar) {
229
+ const falha = empurrar(sha);
230
+ if (falha)
231
+ return recusa('push-recusado', falha);
232
+ enviada = true;
233
+ }
234
+ return { ...cabeca, acao: 'mesclada', sha, shaAntes, changelog, enviada };
235
+ }
236
+ /** Uma linha para o terminal e para o resumo ao dono. */
237
+ function textoDaAtualizacao(r) {
238
+ const m = (0, locale_1.msg)().conducao.atualizacao;
239
+ switch (r.acao) {
240
+ case 'ja-atualizada': return m.atualizada(r.branch, r.base, r.enviada);
241
+ case 'mesclada': return m.mesclada(r.base, r.branch, r.sha.slice(0, 8), r.changelog?.devolvidos ?? 0, r.enviada);
242
+ case 'conflito-em-codigo': return m.conflito(r.base, r.branch, r.arquivos.join(', '));
243
+ default: return m.recusada(r.branch, r.motivo, r.detalhe);
244
+ }
245
+ }
package/dist/auditoria.js CHANGED
@@ -78,6 +78,7 @@ const gates_1 = require("./gates");
78
78
  const prompts_1 = require("./prompts");
79
79
  const util_1 = require("./util");
80
80
  const horario_1 = require("./horario");
81
+ const locale_1 = require("./locale");
81
82
  // ---------------------------------------------------------------------------
82
83
  // Motivos tipados da auditoria
83
84
  // ---------------------------------------------------------------------------
@@ -476,9 +477,10 @@ function packAtivo(pack, estagio) {
476
477
  }
477
478
  /** Tabela de `ork audit packs`. */
478
479
  function tabelaDePacks(estagio) {
480
+ const m = (0, locale_1.msg)().audit.packs;
479
481
  const linhas = exports.ORDEM_DOS_PACKS.map((id) => {
480
482
  const p = exports.PACKS[id];
481
- const ativo = estagio ? (packAtivo(id, estagio) ? 'sim' : 'nao') : '-';
483
+ const ativo = estagio ? (packAtivo(id, estagio) ? m.sim : m.nao) : '-';
482
484
  return [
483
485
  p.id,
484
486
  p.estagioMinimo,
@@ -489,31 +491,31 @@ function tabelaDePacks(estagio) {
489
491
  p.titulo,
490
492
  ];
491
493
  });
492
- const cabecalho = (0, util_1.tabela)(['PACK', 'ATIVO A PARTIR DE', 'ATIVO AQUI', 'FONTE', 'REGRAS', 'POSTURA', 'TITULO'], linhas);
493
- const rodape = ['', 'Hardening por estagio (visao, secao 5.2):'];
494
+ const cabecalho = (0, util_1.tabela)([...m.cabecalho], linhas);
495
+ const rodape = ['', m.hardening];
494
496
  for (const e of exports.ORDEM_DOS_ESTAGIOS) {
495
497
  rodape.push(` ${e.padEnd(10)} ${packsAtivos(e).join(', ')}` +
496
- `\n ${' '.repeat(10)} postura: ${exports.DESCRICAO_DA_POSTURA[exports.POSTURA_DO_ESTAGIO[e]]}`);
498
+ `\n ${' '.repeat(10)} ${m.posturaLinha(exports.DESCRICAO_DA_POSTURA[exports.POSTURA_DO_ESTAGIO[e]])}`);
497
499
  }
498
500
  return cabecalho + '\n' + rodape.join('\n');
499
501
  }
500
502
  /** Detalhe de um pack: as regras e as evidencias que ele exige. */
501
503
  function textoDoPack(pack, estagio) {
502
504
  const p = exports.PACKS[pack];
505
+ const m = (0, locale_1.msg)().audit.packs.detalhe;
503
506
  const linhas = [];
504
- linhas.push(`Pack ${p.id}: ${p.titulo}`);
507
+ linhas.push(m.titulo(p.id, p.titulo));
505
508
  linhas.push(` ${p.objetivo}`);
506
- linhas.push(` ativo a partir do estagio: ${p.estagioMinimo}`);
507
- linhas.push(` fonte de evidencia: ${p.fonte === 'ledger' ? 'ledger e MASTER logs' : 'arvore de codigo'}`);
509
+ linhas.push(m.ativoDesde(p.estagioMinimo));
510
+ linhas.push(m.fonte(p.fonte === 'ledger' ? m.fonteLedger : m.fonteCodigo));
508
511
  if (estagio) {
509
- linhas.push(` neste projeto (stage ${estagio}): ${packAtivo(pack, estagio) ? 'ATIVO' : 'inativo'}` +
510
- (packAtivo(pack, estagio) ? `, postura ${posturaDoPack(estagio)}` : ''));
512
+ linhas.push(m.nesteProjeto(estagio, packAtivo(pack, estagio), posturaDoPack(estagio)));
511
513
  }
512
514
  linhas.push('');
513
- linhas.push(' Regras auditadas:');
515
+ linhas.push(m.regras);
514
516
  for (const r of p.regras) {
515
517
  linhas.push(` ${r.id} ${r.regra}`);
516
- linhas.push(` evidencia: ${r.evidencia}`);
518
+ linhas.push(m.evidencia(r.evidencia));
517
519
  }
518
520
  linhas.push('');
519
521
  linhas.push(' Evidencias da rodada:');