@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
package/dist/rede.js CHANGED
@@ -33,9 +33,10 @@ var __importStar = (this && this.__importStar) || (function () {
33
33
  };
34
34
  })();
35
35
  Object.defineProperty(exports, "__esModule", { value: true });
36
- exports.RETRATO_PARADO_MS = exports.cachePronto = exports.MAXIMO_DE_ITENS = exports.refDaCasa = exports.PULSACAO_DA_REDE_MS = exports.PAINEL_DA_REDE = exports.DIR_DOS_RETRATOS = exports.BRANCH_DA_REDE = exports.CONTRATO_DO_RETRATO = void 0;
36
+ exports.RETRATO_PARADO_MS = exports.cachePronto = exports.MAXIMO_DE_ITENS = exports.NIVEL_MINIMO_NO_GRUPO = exports.refDaCasa = exports.PULSACAO_DA_REDE_MS = exports.PAINEL_DA_REDE = exports.DIR_DOS_RETRATOS = exports.BRANCH_DA_REDE = exports.CONTRATO_DO_RETRATO = void 0;
37
37
  exports.nomeSeguro = nomeSeguro;
38
38
  exports.arquivoDoRetrato = arquivoDoRetrato;
39
+ exports.separarRepositorio = separarRepositorio;
39
40
  exports.resolverCasa = resolverCasa;
40
41
  exports.hostnameSeguro = hostnameSeguro;
41
42
  exports.retratoDaMaquina = retratoDaMaquina;
@@ -94,6 +95,7 @@ const rede_adesao_1 = require("./rede-adesao");
94
95
  const rede_forja_1 = require("./rede-forja");
95
96
  const rede_projetos_1 = require("./rede-projetos");
96
97
  const versao_1 = require("./versao");
98
+ const locale_1 = require("./locale");
97
99
  exports.CONTRATO_DO_RETRATO = 'ork.rede-maquina/v1';
98
100
  exports.BRANCH_DA_REDE = 'main';
99
101
  exports.DIR_DOS_RETRATOS = 'maquinas';
@@ -110,6 +112,8 @@ const BINARIO_DO_HOST = { 'claude-code': 'claude', codex: 'codex', hermes: 'herm
110
112
  const VERSAO_ESTRITA = /^\d+\.\d+(?:\.\d+)?(?:[-+][0-9A-Za-z.]{1,20})?$/;
111
113
  const refDaCasa = (c) => `${c.host}/${c.dono}/${c.repositorio}`;
112
114
  exports.refDaCasa = refDaCasa;
115
+ /** O nivel minimo da pessoa no grupo para a casa da rede morar nele (GitLab: Maintainer). */
116
+ exports.NIVEL_MINIMO_NO_GRUPO = 40;
113
117
  /**
114
118
  * O nome da maquina no que vai a forja: so o que o git e a forja aceitam sem surpresa. E o mesmo no
115
119
  * arquivo, no campo `maquina` do retrato, na trava e nos commits (S2 da revisao 2: o leitor recusava o
@@ -125,6 +129,11 @@ function nomeSeguro(maquina) {
125
129
  function arquivoDoRetrato(maquina) {
126
130
  return `${exports.DIR_DOS_RETRATOS}/${nomeSeguro(maquina)}.json`;
127
131
  }
132
+ /** `--repositorio`: dono e nome pelo ULTIMO `/`, para o subgrupo do GitLab (`grupo/sub/casa`) nao ser truncado. */
133
+ function separarRepositorio(texto) {
134
+ const corte = texto?.lastIndexOf('/') ?? -1;
135
+ return texto && corte > 0 ? [texto.slice(0, corte), texto.slice(corte + 1)] : [null, texto ?? null];
136
+ }
128
137
  /**
129
138
  * A casa: a opcao do comando, senao a adesao gravada, senao o login da primeira forja com login.
130
139
  * Nunca lanca: sem forja ou sem login, devolve o motivo tipado.
@@ -134,21 +143,21 @@ function resolverCasa(opcoes = {}) {
134
143
  const forjas = (0, rede_forja_1.forjasDaMaquina)(amb);
135
144
  const identidades = opcoes.identidades ?? forjas.map((f) => f.identidade());
136
145
  const config = (0, rede_adesao_1.lerConfigDaRede)();
137
- const [donoPedido, nomePedido] = opcoes.repositorio?.includes('/') ? opcoes.repositorio.split('/', 2) : [null, opcoes.repositorio ?? null];
146
+ const [donoPedido, nomePedido] = separarRepositorio(opcoes.repositorio);
138
147
  // B3: `--repositorio` sozinho troca so o repositorio; a forja gravada continua valendo.
139
148
  const nomeDaForja = opcoes.forja ?? config?.forja ?? null;
140
149
  if (!opcoes.forja && !opcoes.repositorio && config?.forja && config.dono && config.repositorio && config.host) {
141
150
  // B9: a forja da casa e a do host gravado (GitLab proprio), nao a do ambiente de quem chamou.
142
151
  const forja = (0, rede_forja_1.forjaPorNome)(config.forja, amb, config.host);
143
152
  return { casa: { forja: config.forja, host: config.host, dono: config.dono, repositorio: config.repositorio, origem: 'rede.json' },
144
- forja, identidades, motivo: forja ? null : { tipo: 'forja.ausente', detalhe: `a CLI da forja ${config.forja} nao esta nesta maquina` } };
153
+ forja, identidades, motivo: forja ? null : { tipo: 'forja.ausente', detalhe: (0, locale_1.textoDoCatalogo)((m) => m.network.cliAusente(config.forja)) } };
145
154
  }
146
155
  // A forja gravada vale com o host gravado (GitLab proprio), mesmo quando so o repositorio muda.
147
156
  const daCasaGravada = nomeDaForja && config?.forja === nomeDaForja && config.host ? (0, rede_forja_1.forjaPorNome)(nomeDaForja, amb, config.host) : null;
148
157
  const candidatas = daCasaGravada ? [daCasaGravada] : nomeDaForja ? forjas.filter((f) => f.nome === nomeDaForja) : forjas;
149
158
  if (candidatas.length === 0) {
150
159
  return { casa: null, forja: null, identidades, motivo: { tipo: 'forja.ausente',
151
- detalhe: nomeDaForja ? `a CLI da forja ${nomeDaForja} nao esta nesta maquina` : 'nenhuma CLI de forja (gh ou glab) nesta maquina' } };
160
+ detalhe: (0, locale_1.textoDoCatalogo)((m) => nomeDaForja ? m.network.cliAusente(nomeDaForja) : m.network.nenhumaCli) } };
152
161
  }
153
162
  const falhas = [];
154
163
  for (const forja of candidatas) {
@@ -166,11 +175,13 @@ function resolverCasa(opcoes = {}) {
166
175
  // Suspeitas da revisao de 03/10: prazo, erro da forja ou falta de rede no `gh api user` nao e falta de
167
176
  // login; mandar a pessoa ao `gh auth login` esconderia o motivo de verdade.
168
177
  if (falhas.length) {
178
+ // RM-061 (F3b): o montador de cada falha e guardado agora; o detalhe pode virar erro remontado depois.
179
+ const montarFalhas = falhas.map(locale_1.montadorDe);
169
180
  return { casa: null, forja: null, identidades, motivo: { tipo: 'rede.sem-leitura',
170
- detalhe: `${falhas.join('; ')}; o login nao foi lido, rode de novo com a forja respondendo` } };
181
+ detalhe: (0, locale_1.textoDoCatalogo)((m) => m.network.loginNaoLido(montarFalhas.map((f) => f(m)).join('; '))) } };
171
182
  }
172
183
  return { casa: null, forja: null, identidades, motivo: { tipo: 'forja.sem-login',
173
- detalhe: `${candidatas.map((f) => f.cli).join(' e ')} sem login nesta maquina (${candidatas.map((f) => `${f.cli} auth login`).join(' ou ')})` } };
184
+ detalhe: (0, locale_1.textoDoCatalogo)((m) => m.network.semLogin(candidatas)) } };
174
185
  }
175
186
  function versaoDoAdaptador(host, home) {
176
187
  const recibo = (0, hosts_1.lerRecibo)(path.join(home, hosts_1.HOSTS[host].destinoPadrao, hosts_1.HOSTS[host].subdir));
@@ -294,12 +305,12 @@ const CAMPOS = {
294
305
  };
295
306
  function exigirSoCampos(onde, v, permitidos) {
296
307
  if (!v || typeof v !== 'object' || Array.isArray(v))
297
- throw new Error(`rede.segredo: ${onde} fora do contrato; nada foi publicado`);
308
+ throw new locale_1.ErroDoCatalogo((m) => m.network.foraDoContrato(onde));
298
309
  for (const [k, x] of Object.entries(v)) {
299
310
  if (!permitidos.includes(k))
300
- throw new Error(`rede.segredo: campo "${onde}.${k}" fora da lista de permissao; nada foi publicado`);
311
+ throw new locale_1.ErroDoCatalogo((m) => m.network.campoForaDaLista(`${onde}.${k}`));
301
312
  if (x !== null && typeof x === 'string' && x.length > 1024)
302
- throw new Error(`rede.segredo: campo "${onde}.${k}" longo demais; nada foi publicado`);
313
+ throw new locale_1.ErroDoCatalogo((m) => m.network.campoLongo(`${onde}.${k}`));
303
314
  }
304
315
  }
305
316
  /**
@@ -310,15 +321,15 @@ function exigirRetratoSeguro(r) {
310
321
  exigirSoCampos('retrato', r, CAMPOS.retrato);
311
322
  for (const lista of ['forjas', 'runtimes', 'hosts', 'projetos']) {
312
323
  if (!Array.isArray(r[lista]))
313
- throw new Error(`rede.segredo: ${lista} fora do contrato; nada foi publicado`);
324
+ throw new locale_1.ErroDoCatalogo((m) => m.network.foraDoContrato(lista));
314
325
  r[lista].forEach((item, i) => exigirSoCampos(`${lista}[${i}]`, item, CAMPOS[lista]));
315
326
  }
316
327
  // S2 da revisao 2: o que o escritor publica, o leitor aceita; senao, ninguem ve esta maquina.
317
328
  if (!normalizarRetrato(r))
318
- throw new Error('rede.contrato: o retrato desta maquina nao passa no contrato ork.rede-maquina/v1; nada foi publicado');
329
+ throw new locale_1.ErroDoCatalogo((m) => m.network.contratoDoRetrato);
319
330
  const achado = segredoNoRetrato(r);
320
331
  if (achado)
321
- throw new Error(`rede.segredo: padrao "${achado.padrao}" em ${achado.onde}; nada foi publicado (valor omitido de proposito)`);
332
+ throw new locale_1.ErroDoCatalogo((m) => m.network.segredoNoRetrato(achado.padrao, achado.onde));
322
333
  }
323
334
  /** O primeiro valor do retrato com cara de segredo: o padrao e o campo, nunca o valor. */
324
335
  function segredoNoRetrato(r) {
@@ -351,7 +362,8 @@ function exigirSoOProprioRetrato(maquina, mudancas) {
351
362
  const proprio = arquivoDoRetrato(maquina);
352
363
  for (const m of mudancas) {
353
364
  if (m.caminho !== proprio && m.caminho !== exports.PAINEL_DA_REDE) {
354
- throw new Error(`rede.retrato-alheio: ${maquina} tentou gravar ${m.caminho}; cada maquina so escreve ${proprio}`);
365
+ const caminho = m.caminho;
366
+ throw new locale_1.ErroDoCatalogo((t) => t.network.retratoAlheio(maquina, caminho, proprio));
355
367
  }
356
368
  }
357
369
  }
@@ -440,7 +452,8 @@ function lerRetratos(cache, ponta) {
440
452
  for (const arquivo of arquivos) {
441
453
  const visivel = JSON.stringify(arquivo).slice(1, -1).slice(0, 120);
442
454
  if (!/^maquinas\/[A-Za-z0-9._-]{1,64}\.json$/.test(arquivo)) {
443
- invalidos.push({ arquivo: visivel, motivo: 'nome de arquivo fora do padrao maquinas/<maquina>.json' });
455
+ // RM-061 (F3b, GO-FIX 1): o motivo nasce pelo catalogo, e a lacuna do status o remonta.
456
+ invalidos.push({ arquivo: visivel, motivo: (0, locale_1.textoDoCatalogo)((m) => m.network.retratoForaDoPadrao) });
444
457
  continue;
445
458
  }
446
459
  let bruto;
@@ -448,12 +461,12 @@ function lerRetratos(cache, ponta) {
448
461
  bruto = JSON.parse((0, branch_de_estado_1.exigirGit)(cache, ['show', `${ponta}:${arquivo}`], PREFIXO));
449
462
  }
450
463
  catch {
451
- invalidos.push({ arquivo, motivo: 'JSON ilegivel' });
464
+ invalidos.push({ arquivo, motivo: (0, locale_1.textoDoCatalogo)((m) => m.network.retratoIlegivel) });
452
465
  continue;
453
466
  }
454
467
  const retrato = normalizarRetrato(bruto);
455
468
  if (!retrato) {
456
- invalidos.push({ arquivo, motivo: `fora do contrato ${exports.CONTRATO_DO_RETRATO}` });
469
+ invalidos.push({ arquivo, motivo: (0, locale_1.textoDoCatalogo)((m) => m.network.retratoForaDoContrato(exports.CONTRATO_DO_RETRATO)) });
457
470
  continue;
458
471
  }
459
472
  let esperado = null;
@@ -461,8 +474,9 @@ function lerRetratos(cache, ponta) {
461
474
  esperado = arquivoDoRetrato(retrato.maquina);
462
475
  }
463
476
  catch { /* nome impossivel */ }
477
+ const diz = retrato.maquina;
464
478
  if (esperado !== arquivo) {
465
- invalidos.push({ arquivo, motivo: `diz ser a maquina "${retrato.maquina}", que nao e a dona deste arquivo` });
479
+ invalidos.push({ arquivo, motivo: (0, locale_1.textoDoCatalogo)((m) => m.network.retratoDeOutraMaquina(diz)) });
466
480
  continue;
467
481
  }
468
482
  // V9 da revisao 4: a mesma varredura do escritor; o que ela pega nao vai ao status nem ao REDE.md.
@@ -472,12 +486,14 @@ function lerRetratos(cache, ponta) {
472
486
  const projetos = retrato.projetos.filter((_x, i) => !achados[i]);
473
487
  const primeiro = achados.find((x) => x !== null);
474
488
  if (primeiro) {
475
- invalidos.push({ arquivo, motivo: `${retrato.projetos.length - projetos.length} projeto(s) fora da leitura: padrao "${primeiro.padrao}" (valor omitido de proposito)` });
489
+ const fora = retrato.projetos.length - projetos.length, padrao = primeiro.padrao;
490
+ invalidos.push({ arquivo, motivo: (0, locale_1.textoDoCatalogo)((m) => m.network.retratoProjetosOmitidos(fora, padrao)) });
476
491
  }
477
492
  const lido = { ...retrato, projetos };
478
493
  const segredo = segredoNoRetrato(lido);
479
494
  if (segredo) {
480
- invalidos.push({ arquivo, motivo: `padrao "${segredo.padrao}" em ${segredo.onde} (valor omitido de proposito)` });
495
+ const { padrao, onde } = segredo;
496
+ invalidos.push({ arquivo, motivo: (0, locale_1.textoDoCatalogo)((m) => m.network.retratoComSegredo(padrao, onde)) });
481
497
  continue;
482
498
  }
483
499
  retratos.push(lido);
@@ -489,7 +505,9 @@ function lerRetratos(cache, ponta) {
489
505
  // O cache da casa e o git sem prompt.
490
506
  // ---------------------------------------------------------------------------
491
507
  function dirDoCache(casa) {
492
- return path.join((0, rede_adesao_1.pastaDaRede)(), `${casa.forja}-${casa.host}-${casa.dono}-${casa.repositorio}`.replace(/[^A-Za-z0-9._-]+/g, '-'));
508
+ const nome = `${casa.forja}-${casa.host}-${casa.dono}-${casa.repositorio}`.replace(/[^A-Za-z0-9._-]+/g, '-');
509
+ // O dono com subgrupo (`time/sub`) leva um resumo curto, para nao cair na pasta do dono `time-sub`; sem subgrupo, o nome de sempre.
510
+ return path.join((0, rede_adesao_1.pastaDaRede)(), casa.dono.includes('/') ? `${nome}-${(0, node_crypto_1.createHash)('sha256').update(casa.dono).digest('hex').slice(0, 8)}` : nome);
493
511
  }
494
512
  /** O cache ja foi criado? */
495
513
  const cachePronto = (dir) => fs.existsSync(path.join(dir, '.git', 'HEAD'));
@@ -577,26 +595,45 @@ function gravarMarca(marca) {
577
595
  /** A casa com o repositorio conferido: existe e e privado (D3). `criar` so no `ork network entrar`. */
578
596
  function casaConferida(opcoes) {
579
597
  const r = resolverCasa(opcoes);
580
- if (!r.casa || !r.forja)
581
- throw new Error(`rede.sem-forja: ${r.motivo?.detalhe ?? 'nenhuma forja utilizavel'}`);
598
+ if (!r.casa || !r.forja) {
599
+ const detalhe = r.motivo ? (0, locale_1.montadorDe)(r.motivo.detalhe) : null;
600
+ throw new locale_1.ErroDoCatalogo((m) => m.network.semForja(detalhe === null ? null : detalhe(m)));
601
+ }
602
+ const semSuporte = r.forja.nome === 'gitlab' ? (0, rede_forja_1.gitlabSemSuporteNaRede)(opcoes.amb ?? {}, r.forja.host) : null;
603
+ if (semSuporte)
604
+ throw new locale_1.ErroDoCatalogo((m) => m.network.gitlabNaoSuportado(semSuporte));
582
605
  let repo = r.forja.repositorio(r.casa.dono, r.casa.repositorio);
583
606
  let criado = false;
584
607
  if (!repo.existe) {
608
+ const ref = (0, exports.refDaCasa)(r.casa);
585
609
  if (!opcoes.criar)
586
- throw new Error(`rede.sem-repositorio: ${(0, exports.refDaCasa)(r.casa)} ainda nao existe; ork network entrar o cria, privado`);
610
+ throw new locale_1.ErroDoCatalogo((m) => m.network.semRepositorio(ref));
587
611
  const login = (r.identidades.find((i) => i.forja === r.forja.nome && i.host === r.forja.host) ?? r.forja.identidade()).usuario;
612
+ let namespaceId;
588
613
  if (r.casa.dono !== login) {
589
- throw new Error(`rede.repositorio-alheio: ${(0, exports.refDaCasa)(r.casa)} nao existe e nao e do login ${login}; crie o repositorio privado na forja e rode de novo`);
614
+ // Outro dono so vale quando e um grupo em que a pessoa e Maintainer ou acima; forja sem a capacidade recusa como antes.
615
+ const dono = r.forja.donoDaRede?.(r.casa.dono) ?? null;
616
+ if (dono && !dono.ok && dono.erro.codigo !== 'forja.nao-achei') {
617
+ const erro = dono.erro, cli = r.forja.cli, tipo = r.forja.nome, rota = `namespaces/${r.casa.dono}`;
618
+ throw new locale_1.ErroDoCatalogo((m) => m.network.apiFalhou(cli, rota, m.forja.motivo(erro, tipo)));
619
+ }
620
+ if (!dono || !dono.ok || dono.valor.tipo !== 'grupo')
621
+ throw new locale_1.ErroDoCatalogo((m) => m.network.repositorioAlheio(ref, login));
622
+ const nivel = dono.valor.nivel ?? 0, grupo = dono.valor.caminho;
623
+ if (nivel < exports.NIVEL_MINIMO_NO_GRUPO)
624
+ throw new locale_1.ErroDoCatalogo((m) => m.network.grupoSemNivel(ref, grupo, login, nivel));
625
+ namespaceId = dono.valor.namespaceId;
590
626
  }
591
- repo = r.forja.criarPrivado(r.casa.repositorio, DESCRICAO);
627
+ repo = r.forja.criarPrivado(r.casa.repositorio, DESCRICAO, r.casa.dono, namespaceId);
592
628
  criado = true;
593
629
  }
630
+ const refDaConferida = (0, exports.refDaCasa)(r.casa), cli = r.forja.cli;
594
631
  if (repo.privado !== true)
595
- throw new Error(`rede.repositorio-publico: ${(0, exports.refDaCasa)(r.casa)} nao e privado; nada foi publicado`);
632
+ throw new locale_1.ErroDoCatalogo((m) => m.network.repositorioPublico(refDaConferida));
596
633
  if (!repo.url)
597
- throw new Error(`rede.forja: ${r.forja.cli} nao devolveu a URL de ${(0, exports.refDaCasa)(r.casa)}`);
634
+ throw new locale_1.ErroDoCatalogo((m) => m.network.semUrl(cli, refDaConferida));
598
635
  if (!urlDaCasaAceita(repo.url)) {
599
- throw new Error(`rede.sem-https: ${r.forja.cli} devolveu para ${(0, exports.refDaCasa)(r.casa)} uma URL sem https; a rede so fala com a forja por https, e nada foi publicado`);
636
+ throw new locale_1.ErroDoCatalogo((m) => m.network.semHttps(cli, refDaConferida));
600
637
  }
601
638
  return { casa: r.casa, forja: r.forja, url: repo.url, criado, identidades: r.identidades };
602
639
  }
@@ -735,13 +772,13 @@ function gravarNaCasa(conferida, retrato, descartados, opcoes) {
735
772
  return { acao: 'ocupado', maquina, casa: (0, exports.refDaCasa)(casa), commit: null, tentativas: 0, descartados };
736
773
  try {
737
774
  if (opcoes.exigirAdesao && !(0, rede_adesao_1.adesaoDaRede)().membro)
738
- throw new Error('rede.fora: esta maquina saiu da rede; nada foi publicado');
775
+ throw new locale_1.ErroDoCatalogo((m) => m.network.saiuDaRede);
739
776
  const cache = prepararCache(casa, url, forja.helperDeCredencial(), maquina);
740
777
  const assinatura = assinaturaDoRetrato(retrato);
741
778
  for (let tentativa = 1; tentativa <= TENTATIVAS; tentativa++) {
742
779
  const { ponta, atualizado } = (0, rede_forja_1.comGitIsolado)(() => (0, branch_de_estado_1.buscarBranch)(cache, 'origin', exports.BRANCH_DA_REDE, PREFIXO, 30000));
743
780
  if (!atualizado)
744
- throw new Error(`rede.sem-leitura: nao consegui ler ${(0, exports.refDaCasa)(casa)}; publicar exige rede`);
781
+ throw new locale_1.ErroDoCatalogo((m) => m.network.semLeitura((0, exports.refDaCasa)(casa)));
745
782
  const { retratos } = retratosDaPonta(cache, ponta);
746
783
  const atual = retratos.find((r) => r.maquina === maquina);
747
784
  // U2: o arquivo que esta versao nao le ainda pode ser de outra instalacao (contrato mais novo).
@@ -749,12 +786,9 @@ function gravarNaCasa(conferida, retrato, descartados, opcoes) {
749
786
  const alheio = !!idDoOutro && idDoOutro !== retrato.id;
750
787
  if (alheio && !opcoes.tomarNome) {
751
788
  // U7 da revisao 3: o hostname igual sugere a propria maquina, mas duas VMs podem se chamar `ubuntu`.
752
- const dica = atual?.hostname === hostnameSeguro()
753
- ? '; o retrato tem o hostname desta maquina: se for ela mesma, com ~/.orkastery apagada ou copiada, retome o nome com ' +
754
- 'ork network entrar --forcar; se for outra maquina ou instalacao com o mesmo hostname, escolha outro nome com --maquina NOME'
755
- : '; escolha outro nome com ork network entrar --maquina NOME, ou tome este com --forcar';
756
- const quem = atual ? ` (hostname ${atual.hostname}, batida ${(0, horario_1.formatarDataHora)(atual.publicadoEm)})` : ' (num retrato que esta versao nao le)';
757
- throw new Error(`rede.nome-em-uso: outra instalacao ja publica como "${maquina}"${quem}${dica}`);
789
+ const mesmoHostname = atual?.hostname === hostnameSeguro();
790
+ const outro = atual ? { hostname: atual.hostname, publicadoEm: atual.publicadoEm } : null;
791
+ throw new locale_1.ErroDoCatalogo((m) => m.network.nomeEmUso(maquina, outro ? m.network.quemHostname(String(outro.hostname), (0, horario_1.formatarDataHora)(outro.publicadoEm)) : m.network.quemIlegivel, mesmoHostname ? m.network.dicaMesmoHostname : m.network.dicaOutroNome));
758
792
  }
759
793
  const mudancas = [
760
794
  { caminho: arquivoDoRetrato(maquina), conteudo: JSON.stringify(retrato, null, 2) + '\n' },
@@ -769,7 +803,7 @@ function gravarNaCasa(conferida, retrato, descartados, opcoes) {
769
803
  return { acao: 'publicou', maquina, casa: (0, exports.refDaCasa)(casa), commit, tentativas: tentativa, descartados, ...(alheio ? { tomouNome: true } : {}) };
770
804
  }
771
805
  }
772
- throw new Error(`rede.concorrencia: ${TENTATIVAS} pushes recusados seguidos; tente de novo em instantes`);
806
+ throw new locale_1.ErroDoCatalogo((m) => m.network.concorrencia(TENTATIVAS));
773
807
  }
774
808
  finally {
775
809
  trava.liberar();
@@ -783,7 +817,7 @@ function gravarNaCasa(conferida, retrato, descartados, opcoes) {
783
817
  function publicarRede(opcoes = {}) {
784
818
  const adesao = (0, rede_adesao_1.adesaoDaRede)();
785
819
  if (!adesao.membro)
786
- throw new Error('rede.fora: esta maquina nao esta na rede; ork network entrar');
820
+ throw new locale_1.ErroDoCatalogo((m) => m.network.foraDaRede);
787
821
  const amb = opcoes.amb ?? {};
788
822
  const maquina = nomeSeguro((0, maquina_1.nomeDaMaquina)(opcoes.maquina));
789
823
  const id = (0, rede_adesao_1.idDaMaquina)();
@@ -833,7 +867,7 @@ function entrarNaRede(opcoes = {}) {
833
867
  const explicito = (opcoes.maquina ?? '').trim();
834
868
  const maquina = explicito || nomeSeguro((0, maquina_1.lerConfigDaMaquina)()?.nome || (0, maquina_1.nomeDaMaquina)());
835
869
  if (!NOME_DE_MAQUINA.test(maquina)) {
836
- throw new Error(`rede.maquina: nome de maquina invalido ("${maquina}"); use ork network entrar --maquina NOME (letras, numeros, ponto, _ ou -)`);
870
+ throw new locale_1.ErroDoCatalogo((m) => m.network.nomeInvalido(maquina));
837
871
  }
838
872
  const amb = opcoes.amb ?? {};
839
873
  const lidas = opcoes.identidades ?? (0, rede_forja_1.forjasDaMaquina)(amb).map((f) => f.identidade());
@@ -847,7 +881,8 @@ function entrarNaRede(opcoes = {}) {
847
881
  exigirRetratoSeguro(retrato);
848
882
  const publicacao = gravarNaCasa(conferida, retrato, descartados, { exigirAdesao: false, tomarNome: opcoes.tomarNome });
849
883
  if (publicacao.acao === 'ocupado') {
850
- throw new Error(`rede.ocupado: outra publicacao desta maquina esta em andamento (${TRAVA()}); rode ork network entrar de novo em instantes`);
884
+ const trava = TRAVA();
885
+ throw new locale_1.ErroDoCatalogo((m) => m.network.ocupadoAoEntrar(trava));
851
886
  }
852
887
  (0, maquina_1.gravarConfigDaMaquina)({ nome: maquina });
853
888
  const { casa } = conferida;
@@ -875,11 +910,14 @@ function sairDaRede(opcoes = {}) {
875
910
  if (!repo.existe || !repo.url)
876
911
  return { maquina, casa: (0, exports.refDaCasa)(r.casa), commit: null, alheio: false };
877
912
  if (!urlDaCasaAceita(repo.url)) {
878
- throw new Error(`rede.sem-https: saiu da rede aqui, mas ${r.forja.cli} devolveu para ${(0, exports.refDaCasa)(r.casa)} uma URL sem https; o retrato fica na casa`);
913
+ const cli = r.forja.cli, ref = (0, exports.refDaCasa)(r.casa);
914
+ throw new locale_1.ErroDoCatalogo((m) => m.network.semHttpsAoSair(cli, ref));
879
915
  }
880
916
  const trava = travarCasa(30000);
881
- if (!trava.ok)
882
- throw new Error(`rede.ocupado: saiu da rede aqui, mas outra publicacao desta maquina segura a casa (${TRAVA()}); rode ork network sair de novo`);
917
+ if (!trava.ok) {
918
+ const qual = TRAVA();
919
+ throw new locale_1.ErroDoCatalogo((m) => m.network.ocupadoAoSair(qual));
920
+ }
883
921
  try {
884
922
  // Suspeitas da revisao de 03/10: a publicacao que ja segurava a trava quando o `sair` comecou grava
885
923
  // a marca ao terminar o push. Sob a trava ela ja terminou, e a proxima reconfere a adesao e recusa
@@ -893,8 +931,10 @@ function sairDaRede(opcoes = {}) {
893
931
  const id = (0, rede_adesao_1.idDaMaquina)();
894
932
  for (let tentativa = 1; tentativa <= TENTATIVAS; tentativa++) {
895
933
  const { ponta, atualizado } = (0, rede_forja_1.comGitIsolado)(() => (0, branch_de_estado_1.buscarBranch)(cache, 'origin', exports.BRANCH_DA_REDE, PREFIXO, 30000));
896
- if (!atualizado)
897
- throw new Error(`rede.sem-leitura: saiu da rede aqui, mas nao consegui ler ${(0, exports.refDaCasa)(r.casa)} para tirar o retrato; rode ork network sair de novo com rede`);
934
+ if (!atualizado) {
935
+ const ref = (0, exports.refDaCasa)(r.casa);
936
+ throw new locale_1.ErroDoCatalogo((m) => m.network.semLeituraAoSair(ref));
937
+ }
898
938
  const { retratos, invalidos } = retratosDaPonta(cache, ponta);
899
939
  const atual = retratos.find((x) => x.maquina === maquina);
900
940
  // S9 da revisao 2: o arquivo com o nome desta maquina sai tambem quando esta invalido; so o de
@@ -918,7 +958,7 @@ function sairDaRede(opcoes = {}) {
918
958
  if (commit)
919
959
  return { maquina, casa: (0, exports.refDaCasa)(r.casa), commit, alheio: false };
920
960
  }
921
- throw new Error(`rede.concorrencia: ${TENTATIVAS} pushes recusados seguidos; tente de novo em instantes`);
961
+ throw new locale_1.ErroDoCatalogo((m) => m.network.concorrencia(TENTATIVAS));
922
962
  }
923
963
  finally {
924
964
  trava.liberar();
@@ -0,0 +1,101 @@
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.derivarPontoDeParada = derivarPontoDeParada;
37
+ exports.prepararPromptDeRetomada = prepararPromptDeRetomada;
38
+ /** RM-064 T3: checkpoint determinístico para continuar um bloco sem recomeçar GOAL/PLAN. */
39
+ const node_crypto_1 = require("node:crypto");
40
+ const fs = __importStar(require("node:fs"));
41
+ const path = __importStar(require("node:path"));
42
+ const claims_1 = require("./claims");
43
+ const ledger_1 = require("./ledger");
44
+ const procedencia_1 = require("./procedencia");
45
+ const thread_1 = require("./thread");
46
+ const trabalho_thread_1 = require("./trabalho-thread");
47
+ const util_1 = require("./util");
48
+ const hash = (texto) => (0, node_crypto_1.createHash)('sha256').update(texto, 'utf8').digest('hex');
49
+ const SHA = /^[a-f0-9]{40}$/;
50
+ function numero(e) {
51
+ return typeof e.rodada === 'number' && Number.isSafeInteger(e.rodada) && e.rodada > 0 ? e.rodada : null;
52
+ }
53
+ function derivarPontoDeParada(raiz, thread, fase, eventos = (0, ledger_1.lerLedger)((0, thread_1.dirThread)(raiz, thread.id))) {
54
+ const cwdBruto = (0, procedencia_1.diretorioDaThread)(raiz, thread);
55
+ const cwd = (0, procedencia_1.cwdLocalOuNulo)(raiz, thread.id, cwdBruto, 'thread');
56
+ const head = cwd ? (0, util_1.exec)('git', ['rev-parse', '--verify', 'HEAD^{commit}'], cwd, 30_000) : null;
57
+ const ultimoCommit = head?.ok && SHA.test(head.stdout.trim()) ? head.stdout.trim() : null;
58
+ const status = cwd ? (0, util_1.exec)('git', ['status', '--porcelain=v1', '--untracked-files=normal'], cwd, 30_000) : null;
59
+ const gitStatus = status?.ok ? status.stdout.split('\n').filter(Boolean).slice(0, 100) : ['git status indisponível'];
60
+ const claimsPendentes = (0, claims_1.lerClaims)(raiz, thread.id).filter((c) => !['verificado', 'retirada'].includes(c.estado)).map((c) => c.id);
61
+ const rodadaCheck = eventos.filter((e) => e.tipo === ledger_1.TIPOS_DE_EVENTO.verificacao || e.tipo === ledger_1.TIPOS_DE_EVENTO.reverifyConcluido).length;
62
+ const abertas = eventos.filter((e) => e.tipo === ledger_1.TIPOS_DE_EVENTO.fixAberto).map(numero).filter((n) => n !== null);
63
+ const fechadas = new Set(eventos.filter((e) => e.tipo === ledger_1.TIPOS_DE_EVENTO.reverifyConcluido).map(numero).filter((n) => n !== null));
64
+ const goFixEmCurso = abertas.filter((r) => !fechadas.has(r)).at(-1) ?? null;
65
+ const trabalho = (0, trabalho_thread_1.resumirTrabalhoDaThread)(raiz, thread.id);
66
+ return { fase, ultimoCommit, gitStatus, claimsPendentes, rodadaCheck, goFixEmCurso, trabalho };
67
+ }
68
+ function secao(p, originalSha) {
69
+ const status = p.gitStatus.length ? p.gitStatus.map((l) => ` ${l}`).join('\n') : ' (limpa)';
70
+ return `## Ponto de parada\n\n` +
71
+ `Esta sessão retoma uma interrupção por cota. Continue da fase \`${p.fase}\`; não repita GOAL nem PLAN.\n\n` +
72
+ `- Prompt original: \`${originalSha}\`\n` +
73
+ `- Fase: \`${p.fase}\`\n` +
74
+ `- Último commit: ${p.ultimoCommit ? `\`${p.ultimoCommit}\`` : '(indisponível)'}\n` +
75
+ `- Claims pendentes: ${p.claimsPendentes.length ? p.claimsPendentes.map((c) => `\`${c}\``).join(', ') : '(nenhuma)'}\n` +
76
+ `- Rodadas de CHECK observadas: ${p.rodadaCheck}\n` +
77
+ `- GO-FIX em curso: ${p.goFixEmCurso === null ? '(nenhum)' : `rodada ${p.goFixEmCurso}`}\n` +
78
+ `- Trabalho retomável: \`${p.trabalho.caminho}\`\n` +
79
+ `${(0, trabalho_thread_1.formatarResumoDoTrabalho)(p.trabalho)}\n` +
80
+ `- \`git status --porcelain\`:\n\n\`\`\`text\n${status}\n\`\`\`\n\n`;
81
+ }
82
+ /** O original é conferido pelo chamador; este escritor só cria o derivado e nunca o altera. */
83
+ function prepararPromptDeRetomada(raiz, thread, fase, original, gravar = true) {
84
+ const ponto = derivarPontoDeParada(raiz, thread, fase);
85
+ const prompt = `${secao(ponto, original.promptSha256)}${original.prompt}`;
86
+ const promptSha256 = hash(prompt);
87
+ const pasta = path.join((0, thread_1.dirThread)(raiz, thread.id), 'prompts');
88
+ const promptPath = path.join(pasta, `retomada-${fase.toLowerCase()}-${promptSha256.slice(0, 12)}.md`);
89
+ if (gravar) {
90
+ fs.mkdirSync(pasta, { recursive: true });
91
+ try {
92
+ fs.writeFileSync(promptPath, prompt, { flag: 'wx', mode: 0o600 });
93
+ }
94
+ catch (e) {
95
+ if (e.code !== 'EEXIST' || hash(fs.readFileSync(promptPath, 'utf8')) !== promptSha256)
96
+ throw e;
97
+ }
98
+ }
99
+ return { prompt, promptPath, promptSha256, promptOriginalPath: original.promptPath,
100
+ promptOriginalSha256: original.promptSha256, ponto };
101
+ }