@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/board.js CHANGED
@@ -50,7 +50,10 @@ Object.defineProperty(exports, "__esModule", { value: true });
50
50
  exports.perfisDetectados = perfisDetectados;
51
51
  exports.threadsDeTodosOsPerfis = threadsDeTodosOsPerfis;
52
52
  exports.estadosDeSessao = estadosDeSessao;
53
+ exports.leituraDoRuntime = leituraDoRuntime;
54
+ exports.leituraReaproveitada = leituraReaproveitada;
53
55
  exports.vagaDoDespacho = vagaDoDespacho;
56
+ exports.sessoesQueOcupam = sessoesQueOcupam;
54
57
  exports.esperarVaga = esperarVaga;
55
58
  exports.planejar = planejar;
56
59
  exports.devolverVagas = devolverVagas;
@@ -71,6 +74,7 @@ const util_1 = require("./util");
71
74
  const sessoes_adopt_1 = require("./sessoes-adopt");
72
75
  const horario_1 = require("./horario");
73
76
  const conducao_1 = require("./conducao");
77
+ const locale_1 = require("./locale");
74
78
  const conducao_texto_1 = require("./conducao-texto");
75
79
  /**
76
80
  * Perfis detectados no projeto.
@@ -127,6 +131,31 @@ function estadosDeSessao(raiz = null, staleMin) {
127
131
  return null;
128
132
  return (0, sessoes_contas_1.estadosNasContas)(raiz, { staleMin });
129
133
  }
134
+ /** Prazo da consulta do runtime, por conta, dentro do portao: ele roda no despacho e nao pode prende-lo. */
135
+ const PRAZO_DA_CONSULTA_MS = 20_000;
136
+ /** As sessoes de todas as contas, com `--all`: a sessao parada (`stopped`) so aparece nessa lista (medido em 12/10/2026). */
137
+ function leituraDoRuntime(carregado) {
138
+ return () => (0, sessoes_contas_1.consultarContas)(carregado.raiz, { todas: true, staleMin: carregado.manifesto.concurrency.stale_after_min, prazoMs: PRAZO_DA_CONSULTA_MS });
139
+ }
140
+ /** A mesma leitura reaproveitada por `janelaMs`: quem espera a vaga nao consulta o runtime a cada volta. */
141
+ function leituraReaproveitada(ler, janelaMs, relogio = Date.now) {
142
+ let guardada = null;
143
+ return () => {
144
+ const agoraMs = relogio();
145
+ if (!guardada || agoraMs - guardada.em >= janelaMs)
146
+ guardada = { em: agoraMs, leitura: ler() };
147
+ return guardada.leitura;
148
+ };
149
+ }
150
+ /** As sessoes que o runtime mostra encerradas. Leitura que lanca nao prova nada: nenhuma sai da conta. */
151
+ function encerradasNoRuntime(ler) {
152
+ try {
153
+ return new Set(ler().sessoes.filter(sessoes_contas_1.encerradaNaLista).map((s) => s.sessionId));
154
+ }
155
+ catch {
156
+ return new Set();
157
+ }
158
+ }
130
159
  /**
131
160
  * RM-037 (rm037defeito, defeito 3): o portao de vaga do `ork phase run`. Com `max_parallel_threads: 5`,
132
161
  * um sexto despacho saiu as 09h03 de 29/09/2026 com cinco sessoes vivas: o `phase run` nao consultava
@@ -141,9 +170,41 @@ function estadosDeSessao(raiz = null, staleMin) {
141
170
  */
142
171
  function vagaDoDespacho(carregado, threadId, quando = (0, util_1.agora)(),
143
172
  /** S-5 do CHECK 3: o `desde` da tomada deste despacho; despacho em curso de outra thread so conta se veio antes. */
144
- desdeProprio) {
173
+ desdeProprio,
174
+ /** RM-037 (ork-rm037esperas, D6): a leitura do runtime no limite; sem ela, a de todas as contas com `--all`. */
175
+ lerRuntime) {
176
+ const limite = Math.max(1, carregado.manifesto.concurrency.max_parallel_threads);
177
+ let ocupam = sessoesQueOcupam(carregado, { exceto: threadId, quando, desdeProprio });
178
+ if (ocupam.length < limite)
179
+ return null;
180
+ // RM-037 (ork-rm037esperas, D6): no limite, a sessao que o runtime mostra encerrada (estado terminal ou fantasma) nao
181
+ // trabalha mais, mesmo com o lease de pe, e sai da conta: em 12/10/2026, uma sessao parada com `claude stop` antes do
182
+ // `phase_result` prendia a vaga ate a thread fechar. So no limite, para o despacho comum nao pagar a consulta; a
183
+ // sessao ausente da lista e a leitura que falha continuam contando.
184
+ if (ocupam.some((o) => o.sessao !== null)) {
185
+ const encerradas = encerradasNoRuntime(lerRuntime ?? leituraDoRuntime(carregado));
186
+ ocupam = ocupam.filter((o) => o.sessao === null || !encerradas.has(o.sessao));
187
+ if (ocupam.length < limite)
188
+ return null;
189
+ }
190
+ return {
191
+ limite,
192
+ ocupam,
193
+ detalhe: `concurrency.limite: o projeto ja tem ${ocupam.length} sessao(oes) viva(s) em outras threads e o limite e ${limite} ` +
194
+ `(concurrency.max_parallel_threads): ${ocupam.map((o) => `${o.thread} ${o.fase ?? '-'} ` +
195
+ (o.sessao ? `${o.runtime} ${o.sessao.slice(0, 8)}` : 'despacho em curso')).join('; ')}`,
196
+ correcao: 'espere uma sessao terminar e repita com --esperar <min>; sessao que morreu sem evento sai com ' +
197
+ 'ork conducao status <thread>; ou suba concurrency.max_parallel_threads no orkastery.yaml',
198
+ };
199
+ }
200
+ /**
201
+ * As vagas do projeto ocupadas agora, pela regra do portao de vaga do despacho (`vagaDoDespacho`): a conducao de uma
202
+ * sessao viva (salvo a parada ou escalada) e o despacho em curso. RM-063 (F6): a maquina ociosa conta por aqui. `exceto`
203
+ * tira a propria thread; `desdeProprio` desempata dois despachos pela ultima vaga. Somente leitura, mais antiga primeiro.
204
+ */
205
+ function sessoesQueOcupam(carregado, opcoes = {}) {
145
206
  const { raiz, manifesto } = carregado;
146
- const limite = Math.max(1, manifesto.concurrency.max_parallel_threads);
207
+ const quando = opcoes.quando ?? (0, util_1.agora)(), desdeProprio = opcoes.desdeProprio, threadId = opcoes.exceto ?? '';
147
208
  const staleMin = manifesto.concurrency.stale_after_min;
148
209
  const ocupam = [];
149
210
  for (const id of (0, thread_1.listarIds)(raiz)) {
@@ -175,24 +236,17 @@ desdeProprio) {
175
236
  sessao: atual.dono.tipo === 'sessao' ? atual.dono.sessionId : null,
176
237
  runtime: atual.dono.tipo === 'sessao' ? atual.dono.runtime : null });
177
238
  }
178
- if (ocupam.length < limite)
179
- return null;
180
- ocupam.sort((a, b) => a.desde.localeCompare(b.desde));
181
- return {
182
- limite,
183
- ocupam,
184
- detalhe: `concurrency.limite: o projeto ja tem ${ocupam.length} sessao(oes) viva(s) em outras threads e o limite e ${limite} ` +
185
- `(concurrency.max_parallel_threads): ${ocupam.map((o) => `${o.thread} ${o.fase ?? '-'} ` +
186
- (o.sessao ? `${o.runtime} ${o.sessao.slice(0, 8)}` : 'despacho em curso')).join('; ')}`,
187
- correcao: 'espere uma sessao terminar e repita com --esperar <min>; sessao que morreu sem evento sai com ' +
188
- 'ork conducao status <thread>; ou suba concurrency.max_parallel_threads no orkastery.yaml',
189
- };
239
+ return ocupam.sort((a, b) => a.desde.localeCompare(b.desde));
190
240
  }
191
241
  /** `--esperar`: espera a vaga do projeto ate o prazo. Devolve true quando ha vaga. */
192
- function esperarVaga(carregado, threadId, esperarMs) {
242
+ function esperarVaga(carregado, threadId, esperarMs,
243
+ /** RM-037 (ork-rm037esperas, D6): a leitura do runtime; os testes injetam a deles. */
244
+ ler = leituraDoRuntime(carregado)) {
193
245
  const prazo = Date.now() + esperarMs;
246
+ // RM-037 (ork-rm037esperas, D6): a leitura do runtime vale 30 s nesta espera, e nao uma consulta a cada volta.
247
+ const lerRuntime = leituraReaproveitada(ler, 30_000);
194
248
  for (;;) {
195
- if (!vagaDoDespacho(carregado, threadId))
249
+ if (!vagaDoDespacho(carregado, threadId, undefined, undefined, lerRuntime))
196
250
  return true;
197
251
  if (Date.now() >= prazo)
198
252
  return false;
@@ -316,8 +370,8 @@ function planejar(carregado, opcoes = {}) {
316
370
  situacao: 'espera',
317
371
  motivo: 'vaga.stale',
318
372
  detalhe: oc.detalhe,
319
- correcao: `redespache com ork phase run ${t.id} --fase ${t.faseAtual}, ` +
320
- `ou feche com ork master ${t.id}`,
373
+ // RM-061 (F2b, G2): o pulse mostra esta correcao nas acoes automaticas e a remonta no locale.
374
+ correcao: (0, locale_1.textoDoCatalogo)((m) => m.pulse.vagaStaleCorrecao(t.id, t.faseAtual)),
321
375
  leases: meus,
322
376
  });
323
377
  continue;
@@ -347,7 +401,7 @@ function planejar(carregado, opcoes = {}) {
347
401
  situacao: 'espera',
348
402
  motivo: 'concurrency.limite',
349
403
  detalhe: `a maquina ja tem ${ocupadas} thread(s) em andamento, o limite e ${max}`,
350
- correcao: 'espere uma thread liberar, ou suba concurrency.max_parallel_threads no orkastery.yaml',
404
+ correcao: (0, locale_1.textoDoCatalogo)((m) => m.pulse.limiteCorrecao),
351
405
  leases: [],
352
406
  });
353
407
  continue;
@@ -428,34 +482,35 @@ function devolverVagas(carregado, opcoes = {}) {
428
482
  }
429
483
  /** Texto de `ork board reap`. */
430
484
  function textoDoReap(devolvidas) {
485
+ const m = (0, locale_1.msg)().operacao.restante.board;
431
486
  if (devolvidas.length === 0) {
432
- return 'Nenhuma vaga a devolver: toda thread aberta tem procura ativa ou esta pronta para rodar.';
487
+ return m.reapVazio;
433
488
  }
434
489
  // I-35: o ledger guarda o ISO; o texto ao dono sai no fuso dele, rotulado uma vez.
435
- const linhas = [`Vagas devolvidas por falta de procura ativa: ${devolvidas.length}. ${(0, horario_1.legendaDoFuso)()}`, ''];
490
+ const linhas = [m.reapTitulo(devolvidas.length, (0, horario_1.legendaDoFuso)()), ''];
436
491
  for (const d of devolvidas) {
437
- const marca = d.registrada ? 'slot_released gravado no ledger' : 'ja registrado antes (idempotente)';
492
+ const marca = d.registrada ? m.reapMarca.gravada : m.reapMarca.anterior;
438
493
  linhas.push(` ${d.thread.padEnd(20)} [${d.motivo}] ${marca}`);
439
- linhas.push(` detalhe : ${(0, horario_1.localizarTexto)(d.detalhe)}`);
440
- linhas.push(` evidencia: ${(0, horario_1.localizarTexto)(d.evidencia)}`);
494
+ linhas.push(m.detalhe((0, horario_1.localizarTexto)(d.detalhe)));
495
+ linhas.push(m.evidencia((0, horario_1.localizarTexto)(d.evidencia)));
441
496
  }
442
497
  return linhas.join('\n');
443
498
  }
444
499
  function linhaDeFila(p, i, agora) {
445
- return ` ${i + 1}. ${p.thread} quer ${p.nome} (colide com ${p.colidiuCom}, thread ${p.bloqueadaPor}) desde ${(0, horario_1.formatarDesde)(p.desdeEm, { agora })}`;
500
+ return (0, locale_1.msg)().operacao.restante.board.filaItem(i + 1, p.thread, p.nome, p.colidiuCom, p.bloqueadaPor, (0, horario_1.formatarDesde)(p.desdeEm, { agora }));
446
501
  }
447
502
  /** Texto de `ork board plan`. */
448
503
  function textoDoPlano(plano) {
504
+ const m = (0, locale_1.msg)().operacao.restante.board;
449
505
  const linhas = [];
450
- linhas.push(`Escalonador por maquina. ${(0, horario_1.legendaDoFuso)(undefined, plano.decididoEm)}`);
451
- linhas.push(` limite de paralelismo: ${plano.maxParalelas} (concurrency.max_parallel_threads) | ` +
452
- `em andamento agora (procura ativa): ${plano.emAndamento}`);
506
+ linhas.push(m.planoTitulo((0, horario_1.legendaDoFuso)(undefined, plano.decididoEm)));
507
+ linhas.push(m.limite(plano.maxParalelas, plano.emAndamento));
453
508
  linhas.push('');
454
509
  if (plano.vagas.length === 0) {
455
- linhas.push(' Nenhuma thread no projeto.');
510
+ linhas.push(m.nenhumaThread);
456
511
  }
457
512
  else {
458
- linhas.push((0, util_1.tabela)(['THREAD', 'SLUG', 'MODO', 'FASE', 'SITUACAO', 'MOTIVO', 'DETALHE'], plano.vagas.map((v) => [
513
+ linhas.push((0, util_1.tabela)([...m.colunasPlano], plano.vagas.map((v) => [
459
514
  v.thread,
460
515
  v.slug,
461
516
  (0, modos_1.tagDoModo)(v.modo),
@@ -467,23 +522,23 @@ function textoDoPlano(plano) {
467
522
  const comCorrecao = plano.vagas.filter((v) => v.correcao !== '');
468
523
  if (comCorrecao.length > 0) {
469
524
  linhas.push('');
470
- linhas.push(' Correcoes acionaveis:');
525
+ linhas.push(m.correcoes);
471
526
  for (const v of comCorrecao)
472
527
  linhas.push(` ${v.thread}: ${(0, horario_1.localizarTexto)(v.correcao, { agora: plano.decididoEm })}`);
473
528
  }
474
529
  }
475
530
  linhas.push('');
476
- linhas.push(`Merge queue (lease ${leases_1.LEASE_MAIN_TREE}, o unico gate de merge)`);
531
+ linhas.push(m.merge);
477
532
  if (plano.filaDeMerge.length === 0) {
478
- linhas.push(' vazia: nenhuma thread esperando para mergear');
533
+ linhas.push(m.mergeVazia);
479
534
  }
480
535
  else {
481
536
  plano.filaDeMerge.forEach((p, i) => linhas.push(linhaDeFila(p, i, plano.decididoEm)));
482
537
  }
483
538
  linhas.push('');
484
- linhas.push('Fila por colisao de regiao');
539
+ linhas.push(m.regiao);
485
540
  if (plano.filaDeRegiao.length === 0) {
486
- linhas.push(' vazia: nenhuma colisao de path, board ou porta');
541
+ linhas.push(m.regiaoVazia);
487
542
  }
488
543
  else {
489
544
  plano.filaDeRegiao.forEach((p, i) => linhas.push(linhaDeFila(p, i, plano.decididoEm)));
@@ -492,17 +547,17 @@ function textoDoPlano(plano) {
492
547
  }
493
548
  /** Texto de `ork board [--all]`: a visao unica das threads. */
494
549
  function textoDoBoard(carregado, todos) {
550
+ const m = (0, locale_1.msg)().operacao.restante.board;
495
551
  const itens = threadsDeTodosOsPerfis(carregado, todos);
496
552
  const perfis = todos ? perfisDetectados(carregado) : perfisDetectados(carregado).slice(0, 1);
497
553
  const linhas = [];
498
- linhas.push(`Board do Orkastery, projeto ${carregado.manifesto.project.name} ` +
499
- `(${itens.length} thread(s) em ${perfis.length} perfil(is): ${perfis.map((p) => p.nome).join(', ')})`);
554
+ linhas.push(m.titulo(carregado.manifesto.project.name, itens.length, perfis.length, perfis.map((p) => p.nome).join(', ')));
500
555
  linhas.push('');
501
556
  if (itens.length === 0) {
502
- linhas.push(' Nenhuma thread ainda. Crie uma com: ork thread new "<nome>" --modo default');
557
+ linhas.push(m.vazio);
503
558
  return linhas.join('\n');
504
559
  }
505
- linhas.push((0, util_1.tabela)(['PERFIL', 'ID', 'SLUG', 'MODO', 'FASE', 'STATUS', 'PAUSAS', 'SCORE', 'WORKTREE', 'LEASES'], itens.map((i) => [
560
+ linhas.push((0, util_1.tabela)([...m.colunas], itens.map((i) => [
506
561
  i.perfil,
507
562
  i.thread.id,
508
563
  i.thread.slug,
@@ -518,14 +573,14 @@ function textoDoBoard(carregado, todos) {
518
573
  const conduzidas = itens.map((i) => ({ id: i.thread.id, c: (0, conducao_1.conducaoDaThread)(i.raiz, i.thread.id) })).filter((x) => x.c);
519
574
  if (conduzidas.length > 0) {
520
575
  linhas.push('');
521
- linhas.push('Conducao agora');
576
+ linhas.push(m.conducao);
522
577
  for (const x of conduzidas)
523
578
  linhas.push(` ${x.id}: ${(0, conducao_texto_1.linhaDeConducao)(x.c)}`);
524
579
  }
525
580
  const comVariante = itens.filter((i) => i.thread.variante);
526
581
  if (comVariante.length > 0) {
527
582
  linhas.push('');
528
- linhas.push(' Variantes de ciclo em uso:');
583
+ linhas.push(m.variantes);
529
584
  for (const i of comVariante)
530
585
  linhas.push(` ${i.thread.id}: --ciclo ${i.thread.variante}`);
531
586
  }
@@ -534,8 +589,8 @@ function textoDoBoard(carregado, todos) {
534
589
  const semScore = itens.filter((i) => !i.thread.score && i.thread.faseAtual === 'MASTER');
535
590
  if (semScore.length > 0) {
536
591
  linhas.push('');
537
- linhas.push(`Fila de batch scoring: ${semScore.length} thread(s) esperando score humano`);
538
- linhas.push(' veja em: ork master (com o indice derivado do ledger)');
592
+ linhas.push(m.batch(semScore.length));
593
+ linhas.push(m.batchVeja);
539
594
  }
540
595
  return linhas.join('\n');
541
596
  }
@@ -33,11 +33,12 @@ var __importStar = (this && this.__importStar) || (function () {
33
33
  };
34
34
  })();
35
35
  Object.defineProperty(exports, "__esModule", { value: true });
36
- exports.refRemota = exports.remotoValido = exports.REMOTO_DO_GIT = void 0;
36
+ exports.refRemota = exports.shaValido = exports.remotoValido = exports.REMOTO_DO_GIT = void 0;
37
37
  exports.git = git;
38
38
  exports.exigirGit = exigirGit;
39
39
  exports.remotoRedigido = remotoRedigido;
40
40
  exports.exigirRemoto = exigirRemoto;
41
+ exports.branchValida = branchValida;
41
42
  exports.pontaLocal = pontaLocal;
42
43
  exports.buscarBranch = buscarBranch;
43
44
  exports.jsonsDaPonta = jsonsDaPonta;
@@ -60,6 +61,7 @@ const fs = __importStar(require("node:fs"));
60
61
  const os = __importStar(require("node:os"));
61
62
  const path = __importStar(require("node:path"));
62
63
  const redacao_url_1 = require("./redacao-url");
64
+ const locale_1 = require("./locale");
63
65
  function git(raiz, args, extra = {}) {
64
66
  const r = (0, node_child_process_1.spawnSync)('git', args, { cwd: raiz, encoding: 'utf8', input: extra.input, timeout: extra.timeoutMs ?? 60000,
65
67
  env: { ...process.env, ...extra.env } });
@@ -67,8 +69,11 @@ function git(raiz, args, extra = {}) {
67
69
  }
68
70
  function exigirGit(raiz, args, prefixo, extra = {}) {
69
71
  const r = git(raiz, args, extra);
70
- if (!r.ok)
71
- throw new Error(`${prefixo}.git: git ${args[0]} falhou: ${r.stderr.trim().split('\n').pop() ?? ''}`);
72
+ if (!r.ok) {
73
+ // RM-061 (F3b, GO-FIX 1): pelo catalogo, com o codigo `<prefixo>.git` igual; a saida do git vai como veio.
74
+ const comando = args[0], saida = r.stderr.trim().split('\n').pop() ?? '';
75
+ throw new locale_1.ErroDoCatalogo((m) => m.estado.gitFalhou(prefixo, comando, saida));
76
+ }
72
77
  return r.stdout;
73
78
  }
74
79
  /**
@@ -103,10 +108,31 @@ function remotoRedigido(remoto) {
103
108
  function exigirRemoto(remoto, prefixo) {
104
109
  if ((0, exports.remotoValido)(remoto))
105
110
  return remoto;
106
- throw new Error(`${prefixo}.remoto-invalido: o remoto ${remotoRedigido(remoto)} não é nome de remoto do git ` +
107
- '(letras, dígitos, ".", "_", "-" e "/" entre partes, cada parte começando por letra ou dígito, sem URL); nada foi passado ao git. ' +
108
- 'Corrija fabrica.remoto no orkastery.yaml ou --remoto (padrão: origin).');
111
+ // RM-061 (F3b): a recusa nasce do catalogo; o codigo `<prefixo>.remoto-invalido` e o mesmo nas duas linguas.
112
+ const redigido = remotoRedigido(remoto);
113
+ throw new locale_1.ErroDoCatalogo((m) => m.estado.remotoInvalido(prefixo, redigido));
114
+ }
115
+ /**
116
+ * RM-047 (fronteira de confiança): nome de branch que pode ir ao git como argumento. O valor vem do
117
+ * `worktree.base_branch` do manifesto, do campo `para` do ledger ou do frontmatter, e todos podem ser
118
+ * do clone: um nome que começa com `-` viraria opção do git (`--output=<arquivo>` grava arquivo).
119
+ * A regra é a do `git check-ref-format --branch`, então nenhum nome que o git aceite é recusado.
120
+ */
121
+ function branchValida(branch) {
122
+ if (typeof branch !== 'string' || branch.length === 0 || branch.length > 255)
123
+ return false;
124
+ if (branch.startsWith('-') || branch === '@' || branch.includes('..') || branch.includes('@{'))
125
+ return false;
126
+ // eslint-disable-next-line no-control-regex
127
+ if (/[\x00-\x20\x7f~^:?*[\\]/.test(branch))
128
+ return false;
129
+ if (branch.startsWith('/') || branch.endsWith('/') || branch.includes('//') || branch.endsWith('.'))
130
+ return false;
131
+ return branch.split('/').every((parte) => !parte.startsWith('.') && !parte.endsWith('.lock'));
109
132
  }
133
+ /** Sha hexadecimal (abreviado ou inteiro, SHA-1 ou SHA-256): o único formato de commit lido do ledger que vai ao git. */
134
+ const shaValido = (sha) => typeof sha === 'string' && /^[0-9a-f]{7,64}$/i.test(sha);
135
+ exports.shaValido = shaValido;
110
136
  const refRemota = (remoto, branch) => `refs/remotes/${remoto}/${branch}`;
111
137
  exports.refRemota = refRemota;
112
138
  /** A ultima copia lida da branch nesta maquina, sem rede. `null` quando nunca foi lida. */
@@ -157,7 +183,7 @@ function jsonsDaPonta(raiz, ponta, dir, prefixo) {
157
183
  * Grava uma versao nova da branch em cima de `ponta`, sem tocar arvore de trabalho nem indice:
158
184
  * indice temporario, blobs, `write-tree` e `commit-tree`. Push sem forca; recusa volta `false`.
159
185
  */
160
- function gravarNaBranch(raiz, remoto, branch, ponta, mudancas, mensagem, prefixo, rede = {}) {
186
+ function gravarNaBranch(raiz, remoto, branch, ponta, mudancas, mensagem, prefixo, rede = {}, autor) {
161
187
  exigirRemoto(remoto, prefixo);
162
188
  const indice = path.join(fs.mkdtempSync(path.join(os.tmpdir(), 'ork-branch-estado-')), 'index');
163
189
  const env = { GIT_INDEX_FILE: indice };
@@ -176,7 +202,10 @@ function gravarNaBranch(raiz, remoto, branch, ponta, mudancas, mensagem, prefixo
176
202
  }
177
203
  }
178
204
  const arvore = exigirGit(raiz, ['write-tree'], prefixo, { env }).trim();
179
- const commit = exigirGit(raiz, ['commit-tree', arvore, ...(ponta ? ['-p', ponta] : []), '-m', mensagem], prefixo).trim();
205
+ // RM-058 N3 (S6 da revisão da ork-rm058n3): quem grava pode dar a identidade do commit, para a do git da pessoa não ir ao remoto.
206
+ const identidade = autor ? { env: { GIT_AUTHOR_NAME: autor.nome, GIT_AUTHOR_EMAIL: autor.email, GIT_COMMITTER_NAME: autor.nome,
207
+ GIT_COMMITTER_EMAIL: autor.email } } : {};
208
+ const commit = exigirGit(raiz, ['commit-tree', arvore, ...(ponta ? ['-p', ponta] : []), '-m', mensagem], prefixo, identidade).trim();
180
209
  // `rede`: prazo e ambiente so do que vai a rede (RM-037, achado A3: o fechamento nao espera 60 s).
181
210
  const push = git(raiz, ['push', '--quiet', '--', remoto, `${commit}:refs/heads/${branch}`], rede);
182
211
  if (push.ok) {
@@ -185,7 +214,8 @@ function gravarNaBranch(raiz, remoto, branch, ponta, mudancas, mensagem, prefixo
185
214
  }
186
215
  if (/rejected|non-fast-forward|fetch first|stale info|failed to push/i.test(push.stderr))
187
216
  return false;
188
- throw new Error(`${prefixo}.sem-remoto: o push para ${remoto} falhou: ${push.stderr.trim().split('\n').pop() ?? ''}`);
217
+ const saida = push.stderr.trim().split('\n').pop() ?? '';
218
+ throw new locale_1.ErroDoCatalogo((m) => m.estado.pushFalhou(prefixo, remoto, saida));
189
219
  }
190
220
  finally {
191
221
  fs.rmSync(path.dirname(indice), { recursive: true, force: true });
@@ -22,6 +22,7 @@ exports.fundirRrf = fundirRrf;
22
22
  exports.buscarPorSignificado = buscarPorSignificado;
23
23
  exports.textoDaBuscaPorSignificado = textoDaBuscaPorSignificado;
24
24
  const indice_vetorial_1 = require("./indice-vetorial");
25
+ const locale_1 = require("./locale");
25
26
  exports.MODOS_DE_BUSCA = ['hibrido', 'vetor', 'fts'];
26
27
  /** D9: constante da fusao RRF. */
27
28
  exports.RRF_K = 60;
@@ -185,17 +186,18 @@ function buscarPorSignificado(o) {
185
186
  * id do FTS fora do universo e o aviso de cobertura vivem nele, e o texto os perdia na busca que deu certo.
186
187
  */
187
188
  function textoDaBuscaPorSignificado(r) {
188
- const linhas = [`Busca por significado (NAO deterministica; modo ${r.modo}, origem ${r.origem}${r.modeloUsado ? ` ${r.modeloUsado}` : ''})`];
189
+ const m = (0, locale_1.msg)().operacao.restante.memory.busca;
190
+ const linhas = [m.titulo(r.modo, r.origem, r.modeloUsado ?? '')];
189
191
  if (r.motivo)
190
- linhas.push(` motivo: ${r.motivo}${r.detalhe ? `; ${r.detalhe}` : ''}`);
192
+ linhas.push(m.motivo(r.motivo, r.detalhe));
191
193
  else if (r.detalhe)
192
- linhas.push(` detalhe: ${r.detalhe}`);
194
+ linhas.push(m.detalhe(r.detalhe));
193
195
  linhas.push('');
194
196
  r.resultados.forEach((e, i) => {
195
- const sim = e.similaridade === null ? '' : ` similaridade ${e.similaridade}`;
197
+ const sim = e.similaridade === null ? '' : m.similaridade(e.similaridade);
196
198
  linhas.push(` ${i + 1}. [${e.collection}] ${e.id} score ${e.score} ${e.fontes.join('+')}${sim}`);
197
199
  linhas.push(` ${e.resumo}`);
198
200
  });
199
- linhas.push('', ` ${r.resultados.length} resultado(s); busca por tag continua em ork memory search --tags`);
201
+ linhas.push('', m.resumo(r.resultados.length));
200
202
  return linhas.join('\n');
201
203
  }
package/dist/catalogo.js CHANGED
@@ -45,11 +45,14 @@ Object.defineProperty(exports, "__esModule", { value: true });
45
45
  exports.BUCKETS = void 0;
46
46
  exports.raizDoCatalogo = raizDoCatalogo;
47
47
  exports.exigirCatalogo = exigirCatalogo;
48
+ exports.catalogoDoPacote = catalogoDoPacote;
49
+ exports.exigirCatalogoDoPacote = exigirCatalogoDoPacote;
48
50
  exports.cliDoCatalogo = cliDoCatalogo;
49
51
  exports.skillsDoCatalogo = skillsDoCatalogo;
50
52
  exports.referenciasDoCatalogo = referenciasDoCatalogo;
51
53
  const fs = __importStar(require("node:fs"));
52
54
  const path = __importStar(require("node:path"));
55
+ const locale_1 = require("./locale");
53
56
  /** O que precisa existir para um diretorio ser a raiz do catalogo. */
54
57
  const MARCAS = ['skills', 'references', 'eval'];
55
58
  function ehRaizDoCatalogo(dir) {
@@ -79,10 +82,41 @@ function raizDoCatalogo(inicial) {
79
82
  function exigirCatalogo(inicial) {
80
83
  const raiz = raizDoCatalogo(inicial);
81
84
  if (!raiz) {
82
- throw new Error('catalogo do Orkastery nao encontrado (esperado um diretorio com skills/, references/ e eval/)');
85
+ throw new locale_1.ErroDoCatalogo((m) => m.adapter.catalogoNaoEncontrado);
83
86
  }
84
87
  return raiz;
85
88
  }
89
+ /** A raiz do catálogo do pacote que está rodando: subindo a partir do próprio código, nunca do cwd. */
90
+ function catalogoDoPacote() {
91
+ return subirProcurando(__dirname);
92
+ }
93
+ function real(p) {
94
+ try {
95
+ return fs.realpathSync(p);
96
+ }
97
+ catch {
98
+ return path.resolve(p);
99
+ }
100
+ }
101
+ /**
102
+ * RM-047 (P4): o catálogo que o `ork eval` executa. O eval roda os canários, os hooks e o `core/dist`
103
+ * do catálogo, então ele só vale o do pacote que está rodando. Um diretório com `skills/`,
104
+ * `references/` e `eval/` achado a partir do cwd (um clone qualquer) que não seja o próprio pacote é
105
+ * recusado com `eval.catalogo-alheio`, com o comando que roda o eval daquele checkout de propósito.
106
+ */
107
+ function exigirCatalogoDoPacote(inicial) {
108
+ const pacote = catalogoDoPacote();
109
+ if (!pacote) {
110
+ throw new Error('catalogo do Orkastery nao encontrado (esperado um diretorio com skills/, references/ e eval/)');
111
+ }
112
+ const doCwd = subirProcurando(inicial);
113
+ if (doCwd && real(doCwd) !== real(pacote)) {
114
+ throw new Error(`eval.catalogo-alheio: ${doCwd} tem skills/, references/ e eval/, mas nao e o pacote deste ork ` +
115
+ `(${pacote}). O eval executa os canarios, os hooks e o core/dist do catalogo, e so roda o do proprio pacote. ` +
116
+ `Para avaliar aquele checkout de proposito, rode o ork dele: node ${path.join(doCwd, 'core', 'dist', 'index.js')} eval`);
117
+ }
118
+ return pacote;
119
+ }
86
120
  /** Os buckets do catalogo, na ordem em que o README os apresenta. */
87
121
  exports.BUCKETS = [
88
122
  'core',