@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
@@ -68,6 +68,7 @@ const path = __importStar(require("node:path"));
68
68
  const canarios_1 = require("./canarios");
69
69
  const catalogo_1 = require("./catalogo");
70
70
  const util_1 = require("./util");
71
+ const locale_1 = require("./locale");
71
72
  /** Os tres tipos que toda skill precisa cobrir. Menos que isso e cobertura de fachada. */
72
73
  exports.TIPOS_DE_CASO = ['caminho-feliz', 'racionalizacao', 'borda'];
73
74
  /** Minimo de casos por skill, para o corpus nao virar uma linha por skill. */
@@ -147,7 +148,7 @@ function lerCasos(catalogo) {
147
148
  try {
148
149
  const lido = JSON.parse(fs.readFileSync(caminho, 'utf8'));
149
150
  if (!lido.skill || !Array.isArray(lido.casos)) {
150
- falhas.push({ codigo: 'fixture-invalida', detalhe: `${nome}: esperado { skill, casos[] }` });
151
+ falhas.push({ codigo: 'fixture-invalida', detalhe: (0, locale_1.msg)().operacao.restante.eval.fixtureFormato(nome) });
151
152
  continue;
152
153
  }
153
154
  arquivos.push(lido);
@@ -160,6 +161,7 @@ function lerCasos(catalogo) {
160
161
  }
161
162
  function avaliarSkill(arquivo, textoDaSkill, vistos) {
162
163
  const falhas = [];
164
+ const m = (0, locale_1.msg)().operacao.restante.eval;
163
165
  const skill = arquivo.skill;
164
166
  const tabelaDeDesculpas = intervaloDaTabelaDeDesculpas(textoDaSkill);
165
167
  let assercoes = 0;
@@ -167,17 +169,17 @@ function avaliarSkill(arquivo, textoDaSkill, vistos) {
167
169
  falhas.push({
168
170
  codigo: 'cobertura-minima',
169
171
  skill,
170
- detalhe: `${arquivo.casos.length} caso(s); o minimo do catalogo e ${exports.MINIMO_DE_CASOS}`,
172
+ detalhe: m.casosMinimos(arquivo.casos.length, exports.MINIMO_DE_CASOS),
171
173
  });
172
174
  }
173
175
  for (const tipo of exports.TIPOS_DE_CASO) {
174
176
  if (!arquivo.casos.some((c) => c.tipo === tipo)) {
175
- falhas.push({ codigo: 'tipo-faltando', skill, detalhe: `nenhum caso do tipo "${tipo}"` });
177
+ falhas.push({ codigo: 'tipo-faltando', skill, detalhe: m.tipoFaltando(tipo) });
176
178
  }
177
179
  }
178
180
  for (const caso of arquivo.casos) {
179
181
  if (vistos.has(caso.id)) {
180
- falhas.push({ codigo: 'id-duplicado', skill, caso: caso.id, detalhe: 'id repetido no corpus' });
182
+ falhas.push({ codigo: 'id-duplicado', skill, caso: caso.id, detalhe: m.idRepetido });
181
183
  }
182
184
  vistos.add(caso.id);
183
185
  if (!caso.id.startsWith(`${skill}/`)) {
@@ -185,7 +187,7 @@ function avaliarSkill(arquivo, textoDaSkill, vistos) {
185
187
  codigo: 'id-sem-prefixo',
186
188
  skill,
187
189
  caso: caso.id,
188
- detalhe: `o id precisa comecar com "${skill}/"`,
190
+ detalhe: m.idPrefixo(skill),
189
191
  });
190
192
  }
191
193
  if (caso.tipo === 'racionalizacao' && !(caso.racionalizacao ?? '').trim()) {
@@ -193,7 +195,7 @@ function avaliarSkill(arquivo, textoDaSkill, vistos) {
193
195
  codigo: 'racionalizacao-sem-desculpa',
194
196
  skill,
195
197
  caso: caso.id,
196
- detalhe: 'caso de racionalizacao sem o campo `racionalizacao` com a desculpa',
198
+ detalhe: m.racionalizacao,
197
199
  });
198
200
  }
199
201
  let ancoraForaDaTabela = false;
@@ -204,7 +206,7 @@ function avaliarSkill(arquivo, textoDaSkill, vistos) {
204
206
  codigo: 'assercao-sem-porque',
205
207
  skill,
206
208
  caso: caso.id,
207
- detalhe: `assercao "${a.valor}" sem o campo \`porque\``,
209
+ detalhe: m.assercaoPorque(a.valor),
208
210
  });
209
211
  }
210
212
  let posicoes;
@@ -216,7 +218,7 @@ function avaliarSkill(arquivo, textoDaSkill, vistos) {
216
218
  codigo: 'padrao-invalido',
217
219
  skill,
218
220
  caso: caso.id,
219
- detalhe: `padrao "${a.valor}" invalido: ${e.message}`,
221
+ detalhe: m.padraoInvalido(a.valor, e.message),
220
222
  });
221
223
  continue;
222
224
  }
@@ -226,7 +228,7 @@ function avaliarSkill(arquivo, textoDaSkill, vistos) {
226
228
  codigo: 'assercao',
227
229
  skill,
228
230
  caso: caso.id,
229
- detalhe: `"${a.valor}" deveria estar AUSENTE da skill e aparece ${posicoes.length}x`,
231
+ detalhe: m.deveriaAusente(a.valor, posicoes.length),
230
232
  });
231
233
  }
232
234
  continue;
@@ -236,7 +238,7 @@ function avaliarSkill(arquivo, textoDaSkill, vistos) {
236
238
  codigo: 'assercao',
237
239
  skill,
238
240
  caso: caso.id,
239
- detalhe: `"${a.valor}" nao existe em skills/.../${skill}/SKILL.md (${a.porque})`,
241
+ detalhe: m.naoExiste(a.valor, skill, a.porque),
240
242
  });
241
243
  continue;
242
244
  }
@@ -250,7 +252,7 @@ function avaliarSkill(arquivo, textoDaSkill, vistos) {
250
252
  codigo: 'ancora-fora-da-tabela',
251
253
  skill,
252
254
  caso: caso.id,
253
- detalhe: 'todas as ancoras deste caso estao dentro da tabela de racionalizacoes: a skill lista a desculpa mas nao carrega a regra que responde a ela',
255
+ detalhe: m.ancora,
254
256
  });
255
257
  }
256
258
  }
@@ -274,14 +276,15 @@ function rodarCanarios(catalogo, filtro) {
274
276
  const dir = dirDeFixtures(catalogo);
275
277
  const resultados = [];
276
278
  const falhas = [];
279
+ const m = (0, locale_1.msg)().operacao.restante.eval;
277
280
  const temGit = (0, canarios_1.gitDisponivel)();
278
281
  const nomes = fs.existsSync(dir) ? fs.readdirSync(dir).sort() : [];
279
282
  if (filtro && filtro.length === 0) {
280
- falhas.push({ codigo: 'fixture-invalida', detalhe: 'filtro de canários vazio: nenhuma prova foi executada' });
283
+ falhas.push({ codigo: 'fixture-invalida', detalhe: m.filtroVazio });
281
284
  }
282
285
  for (const id of new Set(filtro ?? [])) {
283
286
  if (!nomes.includes(id) || !(0, canarios_1.canarioPorId)(id)) {
284
- falhas.push({ codigo: 'canario-sem-executor', caso: id, detalhe: `canário solicitado ausente: ${id}` });
287
+ falhas.push({ codigo: 'canario-sem-executor', caso: id, detalhe: m.canarioAusente(id) });
285
288
  }
286
289
  }
287
290
  for (const nome of nomes) {
@@ -291,7 +294,7 @@ function rodarCanarios(catalogo, filtro) {
291
294
  continue;
292
295
  const caminho = path.join(dir, nome, 'caso.json');
293
296
  if (!fs.existsSync(caminho)) {
294
- falhas.push({ codigo: 'fixture-invalida', detalhe: `${nome}: falta caso.json` });
297
+ falhas.push({ codigo: 'fixture-invalida', detalhe: m.casoAusente(nome) });
295
298
  continue;
296
299
  }
297
300
  let fixture;
@@ -304,13 +307,13 @@ function rodarCanarios(catalogo, filtro) {
304
307
  }
305
308
  const canario = (0, canarios_1.canarioPorId)(fixture.id ?? nome);
306
309
  if (fixture.id !== nome) {
307
- falhas.push({ codigo: 'fixture-invalida', caso: nome, detalhe: 'id da fixture diverge do canário solicitado' });
310
+ falhas.push({ codigo: 'fixture-invalida', caso: nome, detalhe: m.fixtureDiverge });
308
311
  continue;
309
312
  }
310
313
  if (!canario) {
311
314
  falhas.push({
312
315
  codigo: 'canario-sem-executor',
313
- detalhe: `${nome}: nenhum executor registrado para o canario "${fixture.id ?? nome}"`,
316
+ detalhe: m.semExecutor(nome, fixture.id ?? nome),
314
317
  });
315
318
  continue;
316
319
  }
@@ -320,7 +323,7 @@ function rodarCanarios(catalogo, filtro) {
320
323
  sobre: canario.sobre,
321
324
  estado: 'unavailable',
322
325
  divergencias: [],
323
- motivo: 'git nao esta nesta maquina: o canario sai unavailable, nunca passing',
326
+ motivo: m.semGit,
324
327
  observado: {},
325
328
  });
326
329
  continue;
@@ -340,7 +343,7 @@ function rodarCanarios(catalogo, filtro) {
340
343
  falhas.push({
341
344
  codigo: 'canario',
342
345
  caso: `${canario.id}/${d.chave}`,
343
- detalhe: `esperado ${JSON.stringify(d.esperado)}, observado ${JSON.stringify(d.observado)}`,
346
+ detalhe: m.divergencia(JSON.stringify(d.esperado), JSON.stringify(d.observado)),
344
347
  });
345
348
  }
346
349
  }
@@ -364,7 +367,7 @@ function rodarCanarios(catalogo, filtro) {
364
367
  falhas.push({
365
368
  codigo: 'fixture-invalida',
366
369
  caso: c.id,
367
- detalhe: `o canario ${c.id} existe no codigo e nao tem eval/fixtures/${c.id}/caso.json`,
370
+ detalhe: m.canarioSemFixture(c.id),
368
371
  });
369
372
  }
370
373
  }
@@ -398,7 +401,7 @@ function rodarEval(opcoes) {
398
401
  falhas.push({
399
402
  codigo: 'skill-sem-eval',
400
403
  skill: skill.nome,
401
- detalhe: `skill sem eval nao entra no catalogo: falta eval/casos/${skill.nome}.json`,
404
+ detalhe: (0, locale_1.msg)().operacao.restante.eval.skillSemEval(skill.nome),
402
405
  });
403
406
  }
404
407
  }
@@ -410,7 +413,7 @@ function rodarEval(opcoes) {
410
413
  falhas.push({
411
414
  codigo: 'eval-sem-skill',
412
415
  skill: arquivo.skill,
413
- detalhe: 'ha casos para uma skill que nao existe no catalogo',
416
+ detalhe: (0, locale_1.msg)().operacao.restante.eval.evalSemSkill,
414
417
  });
415
418
  continue;
416
419
  }
@@ -435,23 +438,24 @@ function rodarEval(opcoes) {
435
438
  }
436
439
  /** Texto de `ork eval`. */
437
440
  function textoDoEval(r) {
441
+ const m = (0, locale_1.msg)().operacao.restante.eval;
438
442
  const linhas = [];
439
- linhas.push(`ork eval, catalogo em ${r.catalogo}`);
443
+ linhas.push(m.titulo(r.catalogo));
440
444
  linhas.push('');
441
445
  if (r.canarios.length > 0) {
442
- linhas.push('Canarios (comportamento real do nucleo, contra git de verdade)');
446
+ linhas.push(m.canarios);
443
447
  linhas.push('');
444
- linhas.push((0, util_1.tabela)(['CANARIO', 'ESTADO', 'SOBRE'], r.canarios.map((c) => [c.id, c.estado, c.estado === 'passou' ? c.sobre : c.motivo || c.sobre])));
448
+ linhas.push((0, util_1.tabela)([...m.colunasCanarios], r.canarios.map((c) => [c.id, m.estados[c.estado] ?? c.estado, c.estado === 'passou' ? c.sobre : c.motivo || c.sobre])));
445
449
  linhas.push('');
446
450
  }
447
451
  if (r.skills.length > 0) {
448
- linhas.push('Corpus das skills (a metade estatica: as regras que precisam existir no arquivo)');
452
+ linhas.push(m.skills);
449
453
  linhas.push('');
450
- linhas.push((0, util_1.tabela)(['SKILL', 'CASOS', 'ASSERCOES', 'FALHAS'], r.skills.map((s) => [s.skill, String(s.casos), String(s.assercoes), String(s.falhas)])));
454
+ linhas.push((0, util_1.tabela)([...m.colunasSkills], r.skills.map((s) => [s.skill, String(s.casos), String(s.assercoes), String(s.falhas)])));
451
455
  linhas.push('');
452
456
  }
453
457
  if (r.falhas.length > 0) {
454
- linhas.push('Falhas');
458
+ linhas.push(m.falhas);
455
459
  for (const f of r.falhas) {
456
460
  const onde = [f.skill, f.caso].filter(Boolean).join(' :: ');
457
461
  linhas.push(` [${f.codigo}] ${onde}`);
@@ -461,10 +465,9 @@ function textoDoEval(r) {
461
465
  }
462
466
  const passaram = r.canarios.filter((c) => c.estado === 'passou').length;
463
467
  const indisponiveis = r.canarios.filter((c) => c.estado === 'unavailable').length;
464
- linhas.push(`canarios: ${passaram}/${r.canarios.length} verdes` +
465
- (indisponiveis > 0 ? ` (${indisponiveis} unavailable)` : ''));
466
- linhas.push(`skills: ${r.skills.length} | casos: ${r.totalDeCasos} | assercoes: ${r.totalDeAssercoes} | falhas: ${r.falhas.length}`);
467
- linhas.push('metade comportamental (o agente resiste a desculpa?): unavailable, julgada por humano ou por modelo, nunca por este runner');
468
- linhas.push(r.ok ? 'VEREDITO: verde' : 'VEREDITO: vermelho');
468
+ linhas.push(m.resumoCanarios(passaram, r.canarios.length, indisponiveis));
469
+ linhas.push(m.resumoSkills(r.skills.length, r.totalDeCasos, r.totalDeAssercoes, r.falhas.length));
470
+ linhas.push(m.metade);
471
+ linhas.push(m.veredito(r.ok));
469
472
  return linhas.join('\n');
470
473
  }
@@ -41,10 +41,14 @@ exports.aplicarExperiencia = aplicarExperiencia;
41
41
  const fs = __importStar(require("node:fs"));
42
42
  const path = __importStar(require("node:path"));
43
43
  const node_crypto_1 = require("node:crypto");
44
+ const locale_1 = require("./locale");
44
45
  exports.INICIO_EXPERIENCIA = '<!-- orkastery:experiencia:begin -->';
45
46
  exports.FIM_EXPERIENCIA = '<!-- orkastery:experiencia:end -->';
46
47
  const CONTRATO = 'ork.experiencia-install/v1';
47
- const LINHA_DO_DIRETORIO = /^Se ativo, leia a skill selecionada pelo campo skill no diretório (".*")\.$/;
48
+ /** RM-061 (F3a, D8): as linguas em que o bloco e escrito e, sem recibo, reconhecido. */
49
+ const LOCALES_DO_BLOCO = ['pt-BR', 'en'];
50
+ /** Marca do diretorio no molde da linha: o texto antes e depois dela reconhece a linha em cada lingua. */
51
+ const MARCA_DO_DIRETORIO = '{{diretorio}}';
48
52
  const conflito = () => { throw Error('experiencia.bloco.conflict: bloco ou recibo alterado/duplicado; preserve os arquivos e revise a instalação'); };
49
53
  /** Recusa symlinks e hardlinks em qualquer componente antes da leitura/escrita. */
50
54
  function caminhoSeguro(projeto, arquivo) {
@@ -83,18 +87,35 @@ function decodificar(s) {
83
87
  return b;
84
88
  }
85
89
  const eolDe = (b) => b.includes('\r\n') ? '\r\n' : '\n';
86
- /** O caminho vai relativo ao projeto: o arquivo de instruções costuma ser versionado. */
87
- function nucleoDoBloco(skill, eol) {
88
- return Buffer.from([exports.INICIO_EXPERIENCIA,
89
- '## Experiência de orquestração',
90
- 'Consulte `ork experiencia show --json` neste projeto. Se experience for false, não ative o pacote.',
91
- `Se ativo, leia a skill selecionada pelo campo skill no diretório ${JSON.stringify(skill)}.`,
92
- 'As preferências são dados do núcleo; preserve gates, proveniência humana e permissões do host.',
90
+ /**
91
+ * O caminho vai relativo ao projeto: o arquivo de instruções costuma ser versionado. RM-061 (F3a, D1 e D2): o texto
92
+ * sai na língua pedida, pela família `gerados` do catálogo; os marcadores são os mesmos nas duas línguas.
93
+ */
94
+ function nucleoDoBloco(skill, eol, locale) {
95
+ const t = (0, locale_1.msg)(locale).gerados.experiencia;
96
+ return Buffer.from([exports.INICIO_EXPERIENCIA, `## ${t.titulo}`, t.consulte, t.diretorio(JSON.stringify(skill)), t.preferencias,
93
97
  exports.FIM_EXPERIENCIA, ''].join(eol));
94
98
  }
99
+ /** O diretório escrito na linha do bloco de uma língua, ou null se a linha não é a dessa língua. */
100
+ function diretorioDaLinha(linha, locale) {
101
+ const molde = (0, locale_1.msg)(locale).gerados.experiencia.diretorio(MARCA_DO_DIRETORIO);
102
+ const corte = molde.indexOf(MARCA_DO_DIRETORIO);
103
+ const antes = molde.slice(0, corte), depois = molde.slice(corte + MARCA_DO_DIRETORIO.length);
104
+ if (linha.length < antes.length + depois.length || !linha.startsWith(antes) || !linha.endsWith(depois))
105
+ return null;
106
+ let skill;
107
+ try {
108
+ skill = JSON.parse(linha.slice(antes.length, linha.length - depois.length));
109
+ }
110
+ catch {
111
+ return null;
112
+ }
113
+ return typeof skill === 'string' && !/[\r\n`]/.test(skill) ? skill : null;
114
+ }
95
115
  /**
96
116
  * Bloco sem recibo (clone novo, `.orkastery/` apagado) só é adotado quando é exatamente o texto
97
- * que esta versão ou a anterior geram, com qualquer diretório; qualquer outra edição é conflito.
117
+ * que esta versão ou a anterior geram, com qualquer diretório e em qualquer das duas línguas (RM-061,
118
+ * F3a, D8); qualquer outra edição é conflito.
98
119
  */
99
120
  function reconhecerBloco(antes) {
100
121
  if (contar(antes, exports.INICIO_EXPERIENCIA) !== 1 || contar(antes, exports.FIM_EXPERIENCIA) !== 1)
@@ -108,18 +129,14 @@ function reconhecerBloco(antes) {
108
129
  fim += eol.length;
109
130
  const texto = antes.subarray(inicio, fim);
110
131
  const linha = texto.toString('utf8').split(eol)[3] ?? '';
111
- const m = LINHA_DO_DIRETORIO.exec(linha);
112
- let skill;
113
- try {
114
- skill = m ? JSON.parse(m[1]) : undefined;
115
- }
116
- catch {
117
- return null;
118
- }
119
- if (typeof skill !== 'string' || /[\r\n`]/.test(skill))
120
- return null;
121
- const esperado = nucleoDoBloco(skill, eol);
122
- if (!texto.equals(esperado) && !texto.equals(esperado.subarray(0, esperado.length - eol.length)))
132
+ const reconhecido = LOCALES_DO_BLOCO.some((locale) => {
133
+ const skill = diretorioDaLinha(linha, locale);
134
+ if (skill === null)
135
+ return false;
136
+ const esperado = nucleoDoBloco(skill, eol, locale);
137
+ return texto.equals(esperado) || texto.equals(esperado.subarray(0, esperado.length - eol.length));
138
+ });
139
+ if (!reconhecido)
123
140
  return null;
124
141
  // Uma linha em branco antes do bloco é o separador que a instalação põe depois de uma linha.
125
142
  const sep = Buffer.from(eol);
@@ -144,8 +161,11 @@ function removerBloco(antes, bloco) {
144
161
  const juncao = prefixo.length && prefixo.at(-1) !== 10 && sufixo.length ? Buffer.from(bloco.eol) : Buffer.alloc(0);
145
162
  return Buffer.concat([prefixo, juncao, sufixo]);
146
163
  }
147
- /** Planejamento puro em relação ao disco: dry-run e preflight usam o mesmo contrato. */
148
- function planejarExperiencia(projeto, host, skill) {
164
+ /**
165
+ * Planejamento puro em relação ao disco: dry-run e preflight usam o mesmo contrato. O bloco sai no `locale` pedido
166
+ * (RM-061, F3a), pt-BR por omissão: só o `ork adapter install` passa a língua do dono (D2).
167
+ */
168
+ function planejarExperiencia(projeto, host, skill, locale = locale_1.LOCALE_PADRAO) {
149
169
  projeto = fs.realpathSync(path.resolve(projeto));
150
170
  if (!['claude-code', 'codex'].includes(host))
151
171
  throw Error('experiencia.host.unsupported');
@@ -189,7 +209,7 @@ function planejarExperiencia(projeto, host, skill) {
189
209
  let separador, nucleo, anterior;
190
210
  if (antes && bloco) {
191
211
  // Atualização no lugar: o que está antes e depois do bloco, inclusive edição externa, fica.
192
- nucleo = nucleoDoBloco(skill, bloco.eol);
212
+ nucleo = nucleoDoBloco(skill, bloco.eol, locale);
193
213
  separador = bloco.separador;
194
214
  depois = Buffer.concat([antes.subarray(0, bloco.inicio), nucleo, antes.subarray(bloco.fim)]);
195
215
  // Adotado sem recibo: se só havia o bloco, o arquivo conta como criado pelo pacote.
@@ -198,7 +218,7 @@ function planejarExperiencia(projeto, host, skill) {
198
218
  }
199
219
  else {
200
220
  const base = antes ?? Buffer.alloc(0), eol = eolDe(base);
201
- nucleo = nucleoDoBloco(skill, eol);
221
+ nucleo = nucleoDoBloco(skill, eol, locale);
202
222
  separador = Buffer.from(base.length ? (base.at(-1) === 10 ? eol : eol + eol) : '');
203
223
  depois = Buffer.concat([base, separador, nucleo]);
204
224
  anterior = antes?.toString('base64') ?? null;