@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
@@ -33,11 +33,12 @@ var __importStar = (this && this.__importStar) || (function () {
33
33
  };
34
34
  })();
35
35
  Object.defineProperty(exports, "__esModule", { value: true });
36
- exports.ORDEM_DAS_FORJAS = void 0;
36
+ exports.helperDeCredencialDaCli = exports.ORDEM_DAS_FORJAS = void 0;
37
37
  exports.pastasDeBinarios = pastasDeBinarios;
38
38
  exports.acharBinario = acharBinario;
39
39
  exports.versaoDoBinario = versaoDoBinario;
40
40
  exports.comGitIsolado = comGitIsolado;
41
+ exports.gitlabSemSuporteNaRede = gitlabSemSuporteNaRede;
41
42
  exports.forjaPorNome = forjaPorNome;
42
43
  exports.forjasDaMaquina = forjasDaMaquina;
43
44
  exports.ehNomeDeForja = ehNomeDeForja;
@@ -58,7 +59,12 @@ const node_child_process_1 = require("node:child_process");
58
59
  const fs = __importStar(require("node:fs"));
59
60
  const os = __importStar(require("node:os"));
60
61
  const path = __importStar(require("node:path"));
62
+ const api_1 = require("./forja/api");
63
+ const executor_1 = require("./forja/executor");
64
+ const pedidos_1 = require("./forja/gitlab/pedidos");
65
+ const texto_1 = require("./forja/texto");
61
66
  const redacao_url_1 = require("./redacao-url");
67
+ const locale_1 = require("./locale");
62
68
  exports.ORDEM_DAS_FORJAS = ['github', 'gitlab'];
63
69
  const LOGIN = /^[A-Za-z0-9](?:[A-Za-z0-9._-]{0,254})$/;
64
70
  const HOST = /^[A-Za-z0-9.-]+(?::\d+)?$/;
@@ -170,7 +176,8 @@ function comGitIsolado(f, identidade, opcoes = {}) {
170
176
  const naoEncontrado = (s) => /HTTP 404|404 Not Found|"status"\s*:\s*"?404/i.test(`${s.stdout}\n${s.stderr}`);
171
177
  function falhou(cli, rota, s) {
172
178
  const linha = (0, redacao_url_1.redigirCredenciaisUrl)(s.stderr.trim().split('\n').pop() ?? '').slice(0, 200);
173
- return new Error(`rede.forja: ${cli} api ${rota} falhou${linha ? `: ${linha}` : ''}`);
179
+ const montarLinha = (0, locale_1.montadorDe)(linha);
180
+ return new locale_1.ErroDoCatalogo((m) => m.network.apiFalhou(cli, rota, montarLinha(m)));
174
181
  }
175
182
  /** A resposta de quem nao tem login (ou tem credencial recusada), no `gh` e no `glab`. */
176
183
  const SEM_LOGIN = /auth login|not logged|not authenticated|authentication|HTTP 401|401 Unauthorized|Bad credentials|no token/i;
@@ -178,13 +185,17 @@ const SEM_LOGIN = /auth login|not logged|not authenticated|authentication|HTTP 4
178
185
  function falhaDoLogin(cli, s) {
179
186
  if (!s.ok && SEM_LOGIN.test(`${s.stderr}\n${s.stdout}`))
180
187
  return {};
188
+ // RM-061 (F3b): a falha entra no detalhe da lacuna da casa, que a impressao remonta no locale do comando.
181
189
  if (s.ok)
182
- return { falha: `${cli} api user devolveu uma resposta sem login legivel` };
183
- return { falha: falhou(cli, 'user', s.stderr.trim() ? s : { ...s, stderr: 'sem resposta da forja no prazo' }).message.replace(/^rede\.forja: /, '') };
190
+ return { falha: (0, locale_1.textoDoCatalogo)((m) => m.network.respostaSemLogin(cli)) };
191
+ const erro = falhou(cli, 'user', s.stderr.trim() ? s : { ...s, stderr: (0, locale_1.textoDoCatalogo)((m) => m.network.semRespostaNoPrazo) });
192
+ return { falha: (0, locale_1.textoDoCatalogo)((m) => erro.montar(m).replace(/^rede\.forja: /, '')) };
184
193
  }
185
194
  /** Caminho seguro para o shell que o git usa no helper: aspas simples, com `'` escapada (B10). */
186
195
  const citar = (caminho) => /^[A-Za-z0-9_./+-]+$/.test(caminho) ? caminho : `'${caminho.replace(/'/g, `'\\''`)}'`;
187
196
  const helper = (binario) => `!${citar(binario)} auth git-credential`;
197
+ /** O mesmo helper do cache da rede, para o transporte `forja-https` do SHIP. */
198
+ exports.helperDeCredencialDaCli = helper;
188
199
  /**
189
200
  * Privado de verdade (B1): no GitHub, `internal` vem com `private: true`, e a empresa inteira le.
190
201
  * Quando a forja diz a visibilidade, so `private` conta; sem ela, o booleano.
@@ -198,7 +209,7 @@ function github(binario, amb, host = 'github.com') {
198
209
  // B2: a casa vai sempre por HTTPS, com o helper da propria CLI; SSH pediria agente, que o cron nao tem.
199
210
  const repositorioDe = (v) => {
200
211
  if (!v)
201
- throw new Error('rede.forja: gh devolveu um repositorio ilegivel');
212
+ throw new locale_1.ErroDoCatalogo((m) => m.network.repositorioIlegivel);
202
213
  return { existe: true, privado: privadoDe(v), url: typeof v.clone_url === 'string' ? v.clone_url : null };
203
214
  };
204
215
  // B9: o host da casa vai em toda chamada; o cron nao tem o ambiente do terminal.
@@ -235,38 +246,111 @@ function hostDoGitlab(amb) {
235
246
  const bruto = (ambienteDe(amb).GITLAB_HOST ?? '').trim().replace(/^https?:\/\//, '').replace(/\/.*$/, '');
236
247
  return HOST.test(bruto) ? bruto : 'gitlab.com';
237
248
  }
249
+ /**
250
+ * O que a casa da rede ainda nao suporta no GitLab da maquina: o `rede.json` guarda so `host[:porta]`, entao um GitLab em
251
+ * subcaminho (`https://host/gitlab`) ou com CA propria (`GLAB_CA_CERT`) nao teria como ser lembrado em outra maquina.
252
+ */
253
+ function gitlabSemSuporteNaRede(amb, host = hostDoGitlab(amb)) {
254
+ const env = ambienteDe(amb);
255
+ const bruto = (env.GITLAB_HOST ?? '').trim().replace(/^https?:\/\//, '');
256
+ // So o subcaminho do proprio host da casa conta: o `GITLAB_HOST` do terminal pode ser de outra instancia.
257
+ const subcaminho = /^([^/]+)\/+[^/]/.exec(bruto);
258
+ if (subcaminho && subcaminho[1].toLowerCase() === host.toLowerCase())
259
+ return 'subcaminho';
260
+ if ((env.GLAB_CA_CERT ?? '').trim() && host !== 'gitlab.com')
261
+ return 'ca';
262
+ return null;
263
+ }
264
+ /** O `rodarCli` com o ambiente e o PATH da maquina da rede (o cron tem outro ambiente que o terminal). */
265
+ const rodarNaMaquina = (amb) => (c) => {
266
+ if (!amb.env)
267
+ return (0, executor_1.rodarCli)(c);
268
+ // O ambiente da maquina da rede no lugar do do `ork`, e reduzido como o do `ork` seria: so o que a CLI le chega a ela.
269
+ return (0, executor_1.rodarCli)({ ...c, base: c.reduzido ? (0, executor_1.ambienteReduzido)(amb.env) : amb.env });
270
+ };
271
+ /** `host` ou `host:porta` da casa como alvo da API; a rede nao guarda caminho base nem CA. */
272
+ function alvoDoGitlab(host) {
273
+ const m = /^(.+?)(?::(\d+))?$/.exec(host);
274
+ return { tipo: 'gitlab', host: m[1].toLowerCase(), porta: m[2] ? Number(m[2]) : null, caminhoBase: '', ca: null };
275
+ }
276
+ const objeto = (v) => (v && typeof v === 'object' && !Array.isArray(v) ? v : null);
277
+ /** A falha da API com o motivo tipado da forja (`forja.*`) no lugar da ultima linha do stderr. */
278
+ const falhouNaApi = (rota, erro) => new locale_1.ErroDoCatalogo((m) => m.network.apiFalhou('glab', rota, m.forja.motivo(erro, 'gitlab')));
279
+ /** `usuario: null` so e falta de login quando a forja disse isso (`forja.sem-login`); o resto e falha da leitura. */
280
+ function falhaDaApi(r) {
281
+ if (r.ok)
282
+ return { falha: (0, locale_1.textoDoCatalogo)((m) => m.network.respostaSemLogin('glab')) };
283
+ if (r.erro.codigo === 'forja.sem-login')
284
+ return {};
285
+ const erro = r.erro;
286
+ return { falha: (0, locale_1.textoDoCatalogo)((m) => m.network.apiFalhou('glab', 'user', m.forja.motivo(erro, 'gitlab')).replace(/^rede\.forja: /, '')) };
287
+ }
288
+ /**
289
+ * O GitLab da casa pela API da CLI logada (`chamarApi`): o host (com porta) vai por GITLAB_HOST, nunca por
290
+ * `--hostname` (o glab recusa a porta); o login e conferido antes da primeira chamada (sem ele o glab faria o pedido
291
+ * anonimo); o corpo vai pelo stdin com o Content-Type; o erro sai tipado pelo status HTTP.
292
+ */
238
293
  function gitlab(binario, amb, hostPedido) {
239
294
  const host = hostPedido ?? hostDoGitlab(amb);
295
+ const alvo = alvoDoGitlab(host);
296
+ const opcoes = { rodar: rodarNaMaquina(amb), logins: new Map() };
297
+ const pedir = (metodo, caminho, corpo, prazoMs = 15000) => (0, api_1.chamarApi)(alvo, { metodo, caminho, prazoMs, ...(corpo !== undefined ? { corpo } : {}) }, opcoes);
240
298
  const repositorioDe = (v) => {
241
299
  if (!v)
242
- throw new Error('rede.forja: glab devolveu um projeto ilegivel');
300
+ throw new locale_1.ErroDoCatalogo((m) => m.network.projetoIlegivel);
243
301
  return { existe: true, privado: privadoDe(v), url: typeof v.http_url_to_repo === 'string' ? v.http_url_to_repo : null };
244
302
  };
245
- const api = (args, timeoutMs) => rodar(binario, ['api', '--hostname', host, ...args], amb, timeoutMs);
303
+ const repositorio = (dono, nome) => {
304
+ const rota = (0, pedidos_1.projetoNaApi)(`${dono}/${nome}`);
305
+ const r = pedir('GET', rota);
306
+ if (r.ok)
307
+ return repositorioDe(objeto(r.valor.corpo));
308
+ if (r.erro.codigo === 'forja.nao-achei')
309
+ return { existe: false, privado: null, url: null };
310
+ throw falhouNaApi(rota, r.erro);
311
+ };
246
312
  return {
247
313
  nome: 'gitlab', host, cli: 'glab', binario,
248
314
  identidade() {
249
- const r = api(['user'], 15000);
250
- const login = r.ok ? json(r.stdout)?.username : null;
315
+ const r = pedir('GET', 'user');
316
+ const login = r.ok ? objeto(r.valor.corpo)?.username : null;
251
317
  const usuario = typeof login === 'string' && LOGIN.test(login) ? login : null;
252
- return { forja: 'gitlab', host, cli: 'glab', versao: versaoDoBinario(binario, amb), usuario, ...(usuario ? {} : falhaDoLogin('glab', r)) };
318
+ return { forja: 'gitlab', host, cli: 'glab', versao: versaoDoBinario(binario, amb), usuario, ...(usuario ? {} : falhaDaApi(r)) };
253
319
  },
254
- repositorio(dono, nome) {
255
- const rota = `projects/${encodeURIComponent(`${dono}/${nome}`)}`;
256
- const r = api([rota], 15000);
257
- if (!r.ok) {
258
- if (naoEncontrado(r))
259
- return { existe: false, privado: null, url: null };
260
- throw falhou('glab', rota, r);
320
+ repositorio,
321
+ criarPrivado(nome, descricao, dono, namespaceId) {
322
+ const r = pedir('POST', 'projects', { name: nome, path: nome, visibility: 'private', description: descricao,
323
+ ...(namespaceId ? { namespace_id: namespaceId } : {}) }, 30000);
324
+ if (r.ok) {
325
+ const criado = objeto(r.valor.corpo), pedido = `${dono ?? ''}${dono ? '/' : ''}${nome}`;
326
+ // O projeto tem de nascer no caminho pedido: outro namespace seria uma casa que a rede nunca acharia.
327
+ const caminho = typeof criado?.path_with_namespace === 'string' ? criado.path_with_namespace : null;
328
+ if (dono && caminho !== null && caminho.toLowerCase() !== pedido.toLowerCase()) {
329
+ const visto = (0, texto_1.deFora)(caminho, 200);
330
+ throw new locale_1.ErroDoCatalogo((m) => m.network.projetoEmOutroCaminho(pedido, visto));
331
+ }
332
+ return repositorioDe(criado);
261
333
  }
262
- return repositorioDe(json(r.stdout));
334
+ // Escrita nunca se repete sozinha: relida a casa, o projeto que a forja criou antes de a resposta se perder vale. A
335
+ // releitura que falha nao apaga o motivo do POST.
336
+ if (dono) {
337
+ let relido = null;
338
+ try {
339
+ relido = repositorio(dono, nome);
340
+ }
341
+ catch {
342
+ relido = null;
343
+ }
344
+ if (relido?.existe)
345
+ return relido;
346
+ }
347
+ throw falhouNaApi('projects', r.erro);
263
348
  },
264
- criarPrivado(nome, descricao) {
265
- const r = api(['-X', 'POST', 'projects', '-f', `name=${nome}`, '-f', 'visibility=private',
266
- '-f', `description=${descricao}`], 30000);
267
- if (!r.ok)
268
- throw falhou('glab', 'projects', r);
269
- return repositorioDe(json(r.stdout));
349
+ donoDaRede(dono) {
350
+ // Carga tardia: o registro chega a este modulo pelo executor da forja; importar no topo fecharia um ciclo de carga.
351
+ // eslint-disable-next-line @typescript-eslint/no-require-imports
352
+ const { adaptadorDaForja, exigirCapacidade } = require('./forja/registro');
353
+ return exigirCapacidade(adaptadorDaForja('gitlab'), 'donoDaRede')({ api: (p) => (0, api_1.chamarApi)(alvo, p, opcoes), dono });
270
354
  },
271
355
  helperDeCredencial: () => helper(binario),
272
356
  };
@@ -55,6 +55,7 @@ const path = __importStar(require("node:path"));
55
55
  const branch_de_estado_1 = require("./branch-de-estado");
56
56
  const fabrica_estado_1 = require("./fabrica-estado");
57
57
  const horario_1 = require("./horario");
58
+ const locale_1 = require("./locale");
58
59
  const manifest_1 = require("./manifest");
59
60
  const maquina_1 = require("./maquina");
60
61
  const rede_1 = require("./rede");
@@ -68,6 +69,20 @@ exports.SEM_BATIDA_MS = 3 * 60 * 60 * 1000;
68
69
  /** O que esta leitura nunca olha: quem conclui sobre isso a partir daqui erra. */
69
70
  exports.NAO_CONSULTADO = ['roadmap', 'reservas', 'threads'];
70
71
  const mensagem = (e) => e.message.replace(/^[a-z.-]+: /, '');
72
+ /**
73
+ * RM-061 (F3b, G4): o detalhe da lacuna vai ao `--json` em pt-BR e nasce pelo catalogo; o erro de dentro (do catalogo
74
+ * ou nao) e remontado com ela.
75
+ */
76
+ const lacunaDoCatalogo = (montar) => (0, locale_1.textoDoCatalogo)((m) => montar(m.network));
77
+ /**
78
+ * RM-061 (F3b, GO-FIX 1 do CHECK): o montador do texto de um erro, sem o codigo do comeco. O erro do catalogo guarda o
79
+ * proprio montador (o texto dele nao fica no registro); o resto sai como veio, ou pelo montador do texto embutido.
80
+ */
81
+ function montadorDoErro(e) {
82
+ if (e instanceof locale_1.ErroDoCatalogo)
83
+ return (m) => e.montar(m).replace(/^[a-z.-]+: /, '');
84
+ return (0, locale_1.montadorDe)(mensagem(e));
85
+ }
71
86
  /** Sem rede, a casa vem da adesao gravada ou da ultima publicacao desta maquina. */
72
87
  function casaSemRede() {
73
88
  const cfg = (0, rede_adesao_1.adesaoDaRede)().config;
@@ -101,7 +116,7 @@ function lerRede(o = {}) {
101
116
  if (o.semRemoto) {
102
117
  casa = casaSemRede();
103
118
  if (!casa)
104
- lacunas.push({ tipo: 'rede.sem-leitura', detalhe: 'sem rede e sem casa conhecida nesta maquina: rode sem --sem-remoto' });
119
+ lacunas.push({ tipo: 'rede.sem-leitura', detalhe: lacunaDoCatalogo((m) => m.semRedeSemCasa) });
105
120
  }
106
121
  else {
107
122
  const r = (0, rede_1.resolverCasa)({ amb: o.amb });
@@ -113,22 +128,25 @@ function lerRede(o = {}) {
113
128
  const repo = r.forja.repositorio(r.casa.dono, r.casa.repositorio);
114
129
  if (!repo.existe) {
115
130
  ler = false;
116
- lacunas.push({ tipo: 'rede.sem-repositorio', detalhe: `${(0, rede_1.refDaCasa)(r.casa)} ainda nao existe: nenhuma maquina rodou ork network entrar` });
131
+ const ref = (0, rede_1.refDaCasa)(r.casa);
132
+ lacunas.push({ tipo: 'rede.sem-repositorio', detalhe: lacunaDoCatalogo((m) => m.casaNaoExiste(ref)) });
117
133
  }
118
134
  else {
135
+ const ref = (0, rede_1.refDaCasa)(r.casa);
119
136
  if (repo.privado !== true)
120
- lacunas.push({ tipo: 'rede.repositorio-publico', detalhe: `${(0, rede_1.refDaCasa)(r.casa)} nao e privado: nenhuma maquina publica nele` });
137
+ lacunas.push({ tipo: 'rede.repositorio-publico', detalhe: lacunaDoCatalogo((m) => m.casaPublica(ref)) });
121
138
  if (repo.url && (0, rede_1.urlDaCasaAceita)(repo.url))
122
139
  (0, rede_1.prepararCache)(r.casa, repo.url, r.forja.helperDeCredencial(), eu);
123
140
  else if (repo.url) {
124
141
  // W10 da revisao 5: sem https nao ha leitura nova; o cache fica com a URL antiga e so a copia local vale.
125
142
  semHttps = true;
126
- lacunas.push({ tipo: 'rede.sem-leitura', detalhe: `${(0, rede_1.refDaCasa)(r.casa)}: a forja devolveu uma URL sem https; a rede so fala por https (vale a ultima copia local, quando ha)` });
143
+ lacunas.push({ tipo: 'rede.sem-leitura', detalhe: lacunaDoCatalogo((m) => m.casaSemHttps(ref)) });
127
144
  }
128
145
  }
129
146
  }
130
147
  catch (e) {
131
- lacunas.push({ tipo: 'rede.sem-leitura', detalhe: `${(0, rede_1.refDaCasa)(r.casa)}: ${mensagem(e)}` });
148
+ const ref = (0, rede_1.refDaCasa)(r.casa), erro = montadorDoErro(e);
149
+ lacunas.push({ tipo: 'rede.sem-leitura', detalhe: (0, locale_1.textoDoCatalogo)((m) => m.network.comErro(ref, erro(m))) });
132
150
  }
133
151
  }
134
152
  }
@@ -144,16 +162,20 @@ function lerRede(o = {}) {
144
162
  : (0, branch_de_estado_1.buscarBranch)(cache, 'origin', rede_1.BRANCH_DA_REDE, 'rede', o.timeoutMs ?? 30000));
145
163
  fontes.push({ fonte: 'rede', ref: `${(0, rede_1.refDaCasa)(casa)}#${rede_1.BRANCH_DA_REDE}`, ponta, atualizado });
146
164
  if (!atualizado && !soLocal) {
147
- lacunas.push({ tipo: 'rede.sem-leitura', detalhe: `${(0, rede_1.refDaCasa)(casa)} sem leitura nova: ${ponta ? 'mostrando a ultima copia local' : 'nenhuma copia local'}` });
165
+ const ref = (0, rede_1.refDaCasa)(casa);
166
+ lacunas.push({ tipo: 'rede.sem-leitura', detalhe: lacunaDoCatalogo((m) => m.semLeituraNova(ref, !!ponta)) });
148
167
  }
149
168
  const lidos = (0, rede_1.retratosDaPonta)(cache, ponta);
150
169
  lida = { cache, ponta };
151
170
  retratos = lidos.retratos;
152
- for (const inv of lidos.invalidos)
153
- lacunas.push({ tipo: 'retrato.invalido', detalhe: `${inv.arquivo}: ${inv.motivo}` });
171
+ for (const inv of lidos.invalidos) {
172
+ const motivo = (0, locale_1.montadorDe)(inv.motivo);
173
+ lacunas.push({ tipo: 'retrato.invalido', detalhe: (0, locale_1.textoDoCatalogo)((m) => m.network.retratoInvalido(inv.arquivo, motivo(m))) });
174
+ }
154
175
  }
155
176
  else if (!lacunas.some((l) => l.tipo === 'rede.sem-leitura')) {
156
- lacunas.push({ tipo: 'rede.sem-leitura', detalhe: `${(0, rede_1.refDaCasa)(casa)} nunca foi lida nesta maquina` });
177
+ const ref = (0, rede_1.refDaCasa)(casa);
178
+ lacunas.push({ tipo: 'rede.sem-leitura', detalhe: lacunaDoCatalogo((m) => m.nuncaLida(ref)) });
157
179
  }
158
180
  }
159
181
  for (const r of retratos)
@@ -171,7 +193,7 @@ function lerRede(o = {}) {
171
193
  const projetos = o.soRaiz === undefined ? conhecidos : conhecidos.filter((p) => raizDe(p.caminho) === raizDe(o.soRaiz));
172
194
  for (const p of projetos) {
173
195
  if (!p.presente) {
174
- lacunas.push({ tipo: 'projeto.sem-clone', projeto: p.nome, detalhe: `${p.nome}: ${p.caminho} nao tem mais o projeto nesta maquina` });
196
+ lacunas.push({ tipo: 'projeto.sem-clone', projeto: p.nome, detalhe: lacunaDoCatalogo((m) => m.semClone(p.nome, p.caminho)) });
175
197
  continue;
176
198
  }
177
199
  let remoto = 'origin';
@@ -183,11 +205,11 @@ function lerRede(o = {}) {
183
205
  // e o valor recusado sai redigido, sem a credencial de uma URL, no texto e no JSON.
184
206
  if (!(0, branch_de_estado_1.remotoValido)(remoto)) {
185
207
  lacunas.push({ tipo: 'fabrica.sem-leitura', projeto: p.nome,
186
- detalhe: `${p.nome}: fabrica.remoto ${(0, branch_de_estado_1.remotoRedigido)(remoto)} nao e nome de remoto do git; nada foi lido pelo git` });
208
+ detalhe: lacunaDoCatalogo((m) => m.remotoInvalido(p.nome, (0, branch_de_estado_1.remotoRedigido)(remoto))) });
187
209
  continue;
188
210
  }
189
211
  if (!(0, rede_forja_1.comGitIsolado)(() => (0, branch_de_estado_1.git)(p.caminho, ['remote', 'get-url', '--', remoto]).ok)) {
190
- lacunas.push({ tipo: 'fabrica.sem-leitura', projeto: p.nome, detalhe: `${p.nome}: sem o remoto ${remoto}, nao ha fabrica compartilhada para ler` });
212
+ lacunas.push({ tipo: 'fabrica.sem-leitura', projeto: p.nome, detalhe: lacunaDoCatalogo((m) => m.semRemoto(p.nome, remoto)) });
191
213
  continue;
192
214
  }
193
215
  try {
@@ -197,7 +219,7 @@ function lerRede(o = {}) {
197
219
  const painel = (0, rede_forja_1.comGitIsolado)(() => (0, fabrica_estado_1.lerFabrica)(p.caminho, { remoto, semRemoto: o.semRemoto, timeoutMs: o.timeoutMs ?? 10000 }), undefined, { ssh: sshProprio ? 'herdado' : 'lote' });
198
220
  fontes.push({ fonte: 'fabrica-estado', projeto: p.nome, ref: fabrica_estado_1.BRANCH_DA_FABRICA, ponta: painel.ponta, atualizado: painel.atualizado });
199
221
  if (!painel.atualizado && !o.semRemoto) {
200
- lacunas.push({ tipo: 'fabrica.sem-leitura', projeto: p.nome, detalhe: `${p.nome}: ${fabrica_estado_1.BRANCH_DA_FABRICA} sem leitura nova; usei a ultima copia local` });
222
+ lacunas.push({ tipo: 'fabrica.sem-leitura', projeto: p.nome, detalhe: lacunaDoCatalogo((m) => m.fabricaSemLeituraNova(p.nome, fabrica_estado_1.BRANCH_DA_FABRICA)) });
201
223
  }
202
224
  for (const bruto of painel.maquinas) {
203
225
  // U4 da revisao 3: a fabrica guarda o nome cru, a rede o saneado; casam pelo saneado.
@@ -222,7 +244,8 @@ function lerRede(o = {}) {
222
244
  }
223
245
  }
224
246
  catch (e) {
225
- lacunas.push({ tipo: 'fabrica.sem-leitura', projeto: p.nome, detalhe: `${p.nome}: ${mensagem(e)}` });
247
+ const erro = montadorDoErro(e);
248
+ lacunas.push({ tipo: 'fabrica.sem-leitura', projeto: p.nome, detalhe: (0, locale_1.textoDoCatalogo)((m) => m.network.comErro(p.nome, erro(m))) });
226
249
  }
227
250
  }
228
251
  // S7 da revisao 2: o retrato com o nome desta maquina pode ser de outra instalacao (tomou o nome).
@@ -241,17 +264,18 @@ function lerRede(o = {}) {
241
264
  // e o `publicarRede` recusa com `rede.nome-em-uso`; o status diz o mesmo, em vez de chamar de "esta maquina".
242
265
  const nomeEmUso = !!idNaCasa && idNaCasa !== meuId;
243
266
  if (nomeEmUso) {
244
- lacunas.push({ tipo: 'maquina.nome-em-uso', maquina: eu, detalhe: `o retrato "${eu}" na casa e de outra instalacao: esta maquina nao ` +
245
- 'publica ate trocar de nome (ork network entrar --maquina NOME) ou retomar este (ork network entrar --forcar)' });
267
+ lacunas.push({ tipo: 'maquina.nome-em-uso', maquina: eu, detalhe: lacunaDoCatalogo((m) => m.nomeEmUsoNaCasa(eu)) });
246
268
  }
247
269
  // 4. O frescor de cada maquina (D15).
248
270
  const lista = [...membros.values()].sort((a, b) => a.maquina.localeCompare(b.maquina));
249
271
  for (const m of lista) {
250
272
  // X5 da revisao 6: batida ilegivel (a fabrica legada aceita qualquer texto) nao passa por fresca.
251
273
  if (!Number.isFinite(m.idadeMs))
252
- lacunas.push({ tipo: 'maquina.sem-batida', maquina: m.maquina, detalhe: `${m.maquina}: batida ilegivel` });
253
- else if (m.idadeMs > exports.SEM_BATIDA_MS)
254
- lacunas.push({ tipo: 'maquina.sem-batida', maquina: m.maquina, detalhe: `${m.maquina}: sem batida ha ${duracao(m.idadeMs)}` });
274
+ lacunas.push({ tipo: 'maquina.sem-batida', maquina: m.maquina, detalhe: lacunaDoCatalogo((t) => t.batidaIlegivel(m.maquina)) });
275
+ else if (m.idadeMs > exports.SEM_BATIDA_MS) {
276
+ const idadeMs = m.idadeMs;
277
+ lacunas.push({ tipo: 'maquina.sem-batida', maquina: m.maquina, detalhe: lacunaDoCatalogo((t) => t.semBatidaHa(m.maquina, duracao(idadeMs))) });
278
+ }
255
279
  }
256
280
  return {
257
281
  contrato: exports.CONTRATO_DO_STATUS, consultadoEm, casa: casa ? { ...casa } : null,
@@ -261,10 +285,10 @@ function lerRede(o = {}) {
261
285
  }
262
286
  function duracao(ms) {
263
287
  if (!Number.isFinite(ms))
264
- return 'tempo desconhecido';
288
+ return (0, locale_1.msg)().horario.duracaoDesconhecida;
265
289
  const min = Math.round(ms / 60000);
266
290
  if (min < 1)
267
- return 'menos de 1 min';
291
+ return (0, locale_1.msg)().horario.menosDeUmMin;
268
292
  if (min < 120)
269
293
  return `${min} min`;
270
294
  const h = Math.round(ms / 3600000);
@@ -276,53 +300,48 @@ function textoDaRede(status) {
276
300
  // escrevem. Cada VALOR vai numa linha so e sem nada que o terminal execute ou que ninguem ve, antes de
277
301
  // entrar no texto: um `\n` num valor nao abre uma linha que parece do `ork`.
278
302
  // X5 da revisao 6: um mapa que so troca texto (a ida e volta em JSON trocava `NaN` por `null`).
303
+ // RM-061 (F3b): a moldura pelo catalogo; o detalhe da lacuna (pt-BR no --json) e remontado e limpo do mesmo jeito.
279
304
  const s = (0, saida_segura_1.valoresEmUmaLinha)(status);
305
+ const t = (0, locale_1.msg)().network;
280
306
  const linhas = [];
281
307
  const rede = s.fontes.find((f) => f.fonte === 'rede');
282
- const estadoDaCasa = rede ? (rede.atualizado ? 'lida agora' : 'última cópia local') : 'não lida';
283
- linhas.push(s.casa
284
- ? `Orkastery Network de ${s.casa.dono} · ${s.casa.forja}: ${(0, rede_1.refDaCasa)(s.casa)} · ${estadoDaCasa}`
285
- : 'Orkastery Network · sem casa: nenhuma forja com login nesta máquina');
308
+ const estadoDaCasa = rede ? (rede.atualizado ? t.casaLidaAgora : t.casaUltimaCopia) : t.casaNaoLida;
309
+ linhas.push(s.casa ? t.cabecalhoComCasa(s.casa.dono, s.casa.forja, (0, rede_1.refDaCasa)(s.casa), estadoDaCasa) : t.semCasa);
286
310
  const consultado = [
287
- ...(rede ? [`repositório da rede (${rede.ponta ? rede.ponta.slice(0, 7) : 'vazio'})`] : []),
288
- ...s.fontes.filter((f) => f.fonte === 'fabrica-estado')
289
- .map((f) => `fábrica de ${f.projeto} (${f.ref}, ${f.atualizado ? 'lida agora' : 'última cópia'})`),
311
+ ...(rede ? [t.repositorioDaRede(rede.ponta ? rede.ponta.slice(0, 7) : null)] : []),
312
+ ...s.fontes.filter((f) => f.fonte === 'fabrica-estado').map((f) => t.fabricaDe(String(f.projeto), f.ref, f.atualizado)),
290
313
  ];
291
- linhas.push(`Consultado: ${consultado.length ? consultado.join('; ') : 'nada (veja as lacunas)'}.`);
292
- linhas.push(`Não consultado: ${s.naoConsultado.join(', ')}. O roadmap de um projeto sai do ork roadmap status nele.`);
314
+ linhas.push(t.consultado(consultado.length ? consultado.join('; ') : null));
315
+ linhas.push(t.naoConsultado(s.naoConsultado.map(t.itemNaoConsultado).join(', ')));
293
316
  linhas.push('');
294
317
  if (s.membros.length === 0)
295
- linhas.push('Nenhuma máquina lida. Isso não quer dizer que não há máquinas: veja as lacunas.');
318
+ linhas.push(t.nenhumaMaquina);
296
319
  for (const m of s.membros) {
297
320
  const esta = m.maquina !== s.estaMaquina.maquina ? ''
298
- : m.origem === 'rede' && s.estaMaquina.nomeEmUso ? ' (outra instalação com o nome desta máquina)' : ' (esta máquina)';
299
- const origem = m.origem === 'rede' ? `rede${m.adesao === 'fabrica' ? ', adesão herdada da fábrica' : ''}`
300
- : `vista só na fábrica de ${m.projetos.map((p) => p.nome).join(', ')}; sem retrato na rede`;
301
- linhas.push(`${m.maquina}${esta} · ${origem} · batida ${(0, horario_1.formatarDataHora)(m.publicadoEm)} (há ${duracao(m.idadeMs)})`);
302
- const ficha = [m.hostname ? `hostname ${m.hostname}` : null, m.versaoOrk ? `ork ${m.versaoOrk}` : null,
303
- ...m.forjas.map((f) => `${f.forja}: ${f.usuario ?? 'sem login'}`), m.pessoa ? `pessoa ${m.pessoa}` : null].filter(Boolean);
321
+ : m.origem === 'rede' && s.estaMaquina.nomeEmUso ? t.outraInstalacao : t.estaMaquina;
322
+ const origem = m.origem === 'rede' ? t.origemRede(m.adesao === 'fabrica') : t.origemFabrica(m.projetos.map((p) => p.nome).join(', '));
323
+ linhas.push(t.membro(m.maquina, esta, origem, (0, horario_1.formatarDataHora)(m.publicadoEm), duracao(m.idadeMs)));
324
+ const ficha = [m.hostname ? t.fichaHostname(m.hostname) : null, m.versaoOrk ? t.fichaOrk(m.versaoOrk) : null,
325
+ ...m.forjas.map((f) => t.fichaForja(f.forja, f.usuario ?? null)), m.pessoa ? t.fichaPessoa(m.pessoa) : null].filter(Boolean);
304
326
  if (ficha.length)
305
327
  linhas.push(` ${ficha.join(' · ')}`);
306
328
  if (m.runtimes.length)
307
- linhas.push(` runtimes: ${m.runtimes.map((r) => `${r.runtime} ${r.versao ?? '?'}`).join(', ')}`);
329
+ linhas.push(t.runtimes(m.runtimes.map((r) => `${r.runtime} ${r.versao ?? '?'}`).join(', ')));
308
330
  if (m.hosts.length) {
309
- linhas.push(` hosts: ${m.hosts.map((h) => `${h.host} ${h.versao ?? '?'}${h.adaptador ? ` (adaptador ${h.adaptador})` : ''}`).join(', ')}`);
331
+ linhas.push(t.hosts(m.hosts.map((h) => `${h.host} ${h.versao ?? '?'}${h.adaptador ? t.hostAdaptador(h.adaptador) : ''}`).join(', ')));
310
332
  }
311
333
  if (m.projetos.length) {
312
- linhas.push(` projetos: ${m.projetos.map((p) => `${p.nome}${p.remoto ? ` (${p.remoto})` : ''}${p.caminho ? ` em ${p.caminho}` : ''}`).join('; ')}`);
334
+ linhas.push(t.projetos(m.projetos.map((p) => `${p.nome}${p.remoto ? ` (${p.remoto})` : ''}${p.caminho ? t.projetoEm(p.caminho) : ''}`).join('; ')));
313
335
  }
314
336
  }
315
337
  linhas.push('');
316
338
  const aqui = s.estaMaquina;
317
- linhas.push(aqui.membro
318
- ? `Esta máquina (${aqui.maquina}) é membro${aqui.adesao === 'fabrica' ? ', herdado da fábrica' : ''}${aqui.publicada ? '.' : '; o retrato dela ainda não está na casa.'}`
319
- : `Esta máquina (${aqui.maquina}) não está na rede: ork network entrar.`);
339
+ linhas.push(aqui.membro ? t.estaEMembro(aqui.maquina, aqui.adesao === 'fabrica', aqui.publicada) : t.foraDaRedeLinha(aqui.maquina));
320
340
  if (s.lacunas.length === 0)
321
- linhas.push('Lacunas: nenhuma.');
341
+ linhas.push(t.semLacunas);
322
342
  else {
323
- linhas.push(`Lacunas (${s.lacunas.length}), o que faltou ler:`);
324
- for (const l of s.lacunas)
325
- linhas.push(` • ${l.tipo}: ${l.detalhe}`);
343
+ linhas.push(t.lacunas(s.lacunas.length));
344
+ s.lacunas.forEach((l, i) => linhas.push(t.lacuna(l.tipo, (0, saida_segura_1.valoresEmUmaLinha)((0, locale_1.remontar)(status.lacunas[i].detalhe)))));
326
345
  }
327
346
  linhas.push((0, horario_1.legendaDoFuso)());
328
347
  return linhas.join('\n');