@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
@@ -77,6 +77,7 @@ const node_crypto_1 = require("node:crypto");
77
77
  const estado_thread_1 = require("./estado-thread");
78
78
  const orkmind_1 = require("./orkmind");
79
79
  const policies_1 = require("./policies");
80
+ const locale_1 = require("./locale");
80
81
  exports.CONTRATO_INDICE = 'ork.indice-vetorial/v1';
81
82
  /** D11: lote por chamada da ponte na indexacao. */
82
83
  exports.TAMANHO_DO_LOTE = 16;
@@ -360,23 +361,24 @@ function avisoDeCobertura(coerentes, entradas, alvo, onde = '') {
360
361
  }
361
362
  /** RM-038: a linha do que fica fora da busca, a mesma no `ork memory index` e no `ork memory status`. */
362
363
  function textoForaDaBusca(f) {
363
- return f ? `${f.injecao} com injection_risk e ${f.expiradas} expirada(s) (governanca da biblioteca), ` +
364
- `${f.outrasColecoes} em outras colecoes (fora da busca do ork); nada disso vai ao embed` : 'nao medido nesta base';
364
+ const m = (0, locale_1.msg)().operacao.restante.memory.indice;
365
+ return f ? m.foraMedido(f.injecao, f.expiradas, f.outrasColecoes) : m.foraNaoMedido;
365
366
  }
366
367
  /** Texto de `ork memory index`: de que universo, o que foi (ou seria) embedado e quanto custa estimado. */
367
368
  function textoDoIndice(r) {
368
- const custo = r.custoEstimadoUsd === null ? 'nao estimado' : `US$ ${r.custoEstimadoUsd.toFixed(8)}`;
369
+ const m = (0, locale_1.msg)().operacao.restante.memory.indice;
370
+ const custo = r.custoEstimadoUsd === null ? m.custoNaoEstimado : `US$ ${r.custoEstimadoUsd.toFixed(8)}`;
369
371
  const colecoes = Object.entries(r.porColecao).map(([c, n]) => `${c} ${n}`).join(', ');
370
372
  return [
371
- `Indice vetorial (${r.alvo}${r.dryRun ? ', --dry-run' : ''}): ${r.modelo ?? '(sem modelo)'}${r.dim ? ` / ${r.dim} dim` : ''}`,
372
- ` universo da busca ${r.universo} entrada(s): ${colecoes}; coerentes ${r.coerentes}`,
373
- ` fora da busca ${textoForaDaBusca(r.foraDaBusca)}`,
374
- ` embedados ${r.embedados} (reescritos ${r.reescritos}); removidos ${r.removidos}`,
375
- ` fora do indice ${r.recusados} recusada(s) por padrao de segredo, ${r.foraDoLimite} acima do limite`,
376
- ...(r.truncados ? [` truncados ${r.truncados} acima do contexto do modelo local, embedados pelo comeco`] : []),
377
- ` estimativa ${r.tokensEstimados} token(s), ${custo}; chamadas ao provider ${r.chamadasAoProvider}`,
378
- ...(r.arquivo ? [` arquivo ${r.arquivo}`] : []),
379
- ...(r.motivo ? [` motivo ${r.motivo}: ${r.detalhe}`] : r.detalhe ? [` ${r.detalhe}`] : []),
373
+ m.titulo(r.alvo, r.dryRun, r.modelo ?? m.semModelo, r.dim),
374
+ m.universo(r.universo, colecoes, r.coerentes),
375
+ m.fora(textoForaDaBusca(r.foraDaBusca)),
376
+ m.embedados(r.embedados, r.reescritos, r.removidos),
377
+ m.recusados(r.recusados, r.foraDoLimite),
378
+ ...(r.truncados ? [m.truncados(r.truncados)] : []),
379
+ m.estimativa(r.tokensEstimados, custo, r.chamadasAoProvider),
380
+ ...(r.arquivo ? [m.arquivo(r.arquivo)] : []),
381
+ ...(r.motivo ? [m.motivo(r.motivo, r.detalhe)] : r.detalhe ? [` ${r.detalhe}`] : []),
380
382
  ].join('\n');
381
383
  }
382
384
  /** Vetores coerentes de um indice para o universo informado: a base da busca e da cobertura. */
package/dist/indice.js CHANGED
@@ -59,13 +59,19 @@ exports.INSUMOS_DO_INDICE = [
59
59
  * reversao e `ship.ts`, que e quem sabe de merge e de base; aqui so se conta o evento
60
60
  * que ele gravou.
61
61
  */
62
+ function pausaPrevistaDoFast(e) {
63
+ return e.tipo === ledger_1.TIPOS_DE_EVENTO.shipBloqueado && e.modo === 'fast' && e.motivo === 'human.pending';
64
+ }
62
65
  function calcularIndice(eventos) {
63
66
  const parcelas = [];
64
67
  let valor = exports.INDICE_BASE;
65
68
  for (const insumo of exports.INSUMOS_DO_INDICE) {
66
69
  // Ensaio de 03/10/2026 (RM-049): o `ork ship --dry-run` barrado grava `ship_blocked` com `dryRun: true`;
67
70
  // ensaio nao e tropeco da entrega, como ja nao e pausa no board (fatia 2 do ensaio da 0.5.0, P2).
68
- const ocorrencias = eventos.filter((e) => e.tipo === insumo.evento && e.dryRun !== true).length;
71
+ // EN8 (a), decisao do dono de 11/10/2026: no #Fast, o ship sem autorizacao de push e a pausa prevista
72
+ // do modo, e o `ship_blocked` com `human.pending` tambem nao conta.
73
+ const ocorrencias = eventos.filter((e) => e.tipo === insumo.evento && e.dryRun !== true &&
74
+ !pausaPrevistaDoFast(e)).length;
69
75
  if (ocorrencias === 0)
70
76
  continue;
71
77
  const bruto = insumo.peso * ocorrencias;
package/dist/init.js CHANGED
@@ -48,6 +48,7 @@ exports.detectar = detectar;
48
48
  exports.manifestoYaml = manifestoYaml;
49
49
  exports.exigirRepositorioParaInit = exigirRepositorioParaInit;
50
50
  exports.init = init;
51
+ const locale_1 = require("./locale");
51
52
  const fs = __importStar(require("node:fs"));
52
53
  const path = __importStar(require("node:path"));
53
54
  const manifest_1 = require("./manifest");
@@ -55,7 +56,9 @@ const slug_1 = require("./slug");
55
56
  const util_1 = require("./util");
56
57
  const horario_1 = require("./horario");
57
58
  const modos_1 = require("./modos");
58
- exports.PROXIMO_PASSO_INIT = 'Proximo passo: ork doctor; depois ork onboarding para conduzir a entrevista do projeto.';
59
+ const detect_1 = require("./security-scan/detect");
60
+ /** O proximo passo do `ork init` em pt-BR; o texto do CLI sai pelo catalogo (`msg().init.proximoPasso`). */
61
+ exports.PROXIMO_PASSO_INIT = (0, locale_1.msg)('pt-BR').init.proximoPasso;
59
62
  /** Raiz do repositorio git, resolvendo tambem o caso de worktree. */
60
63
  function raizDoRepo(dirInicial) {
61
64
  const r = (0, util_1.exec)('git', ['rev-parse', '--show-toplevel'], dirInicial);
@@ -142,115 +145,112 @@ function detectar(dirInicial, nomeForcado, abbrevForcada) {
142
145
  baseBranch: baseBranchDetectada(raiz),
143
146
  gerenciador: gerenciadorDetectado(raiz),
144
147
  verify: verifyDetectado(raiz),
148
+ stacks: [...new Set((0, detect_1.detectStacks)(raiz).map((e) => e.stack))],
145
149
  };
146
150
  }
147
- /** Serializa o manifesto v1 a partir da deteccao. */
148
- function manifestoYaml(d) {
149
- const linhaVerify = (chave, valor) => valor ? ` ${chave}: "${valor}"` : ` # ${chave}: nao detectado`;
150
- return `# Manifesto do Orkastery (v1, bloco B0)
151
- # Gerado por \`ork init\`. Fonte unica da configuracao do projeto.
152
- # Limite duro de 16 KB: prosa longa vai para a memoria com tag, nao para este arquivo.
151
+ /** Cada linha do texto vira comentario do YAML, com o recuo da chave em que ele fica. */
152
+ function comentario(texto, recuo = ' ') {
153
+ return texto.split('\n').map((linha) => `${recuo}# ${linha}`).join('\n');
154
+ }
155
+ /**
156
+ * Serializa o manifesto v1 a partir da deteccao. RM-061 (F3a, D1 a D3): os comentarios saem na lingua pedida, pela
157
+ * familia `gerados` do catalogo; chaves, valores e exemplos comentados sao este esqueleto, o mesmo nas duas linguas.
158
+ * Sem locale, pt-BR: so o `ork init` passa a lingua do dono (D2).
159
+ */
160
+ function manifestoYaml(d, locale = locale_1.LOCALE_PADRAO) {
161
+ const c = (0, locale_1.msg)(locale).gerados.manifesto;
162
+ const linhaVerify = (chave, valor) => valor ? ` ${chave}: "${valor}"` : ` # ${chave}: ${c.naoDetectado}`;
163
+ return `${comentario(c.cabecalho, '')}
153
164
 
154
165
  project:
155
166
  name: "${d.nome}"
156
- # abbrev: ate 3 caracteres [a-z0-9], parte 1 do slug de sessao, unica no workspace
167
+ ${comentario(c.abbrev)}
157
168
  abbrev: "${d.abbrev}"
158
169
  stage: nascente
159
170
 
160
171
  owner:
161
- # fuso do dono (nome IANA): todo horario mostrado a pessoas usa este fuso.
162
- # Ausente: fuso do sistema. Exemplo:
172
+ ${comentario(c.fuso)}
163
173
  # timezone: "${horario_1.FUSO_DE_BRASILIA}"
164
- # Preferências: ork onboarding set maestro --conteudo '{"owner":{"experience":true}}'
165
- # language: pt-BR # ausente: locale do sistema
174
+ ${comentario(c.preferencias(`ork onboarding set maestro --conteudo '{"owner":{"experience":true}}'`))}
175
+ # language: ${c.exemploDeIdioma} # ${c.idiomaAusente}
166
176
  # depth: curta # curta | detalhada
167
- # experience: true # false desativa o pacote na próxima instalação do adaptador
177
+ # experience: true # ${c.experienciaFalse}
168
178
 
169
179
  board:
170
180
  adapter: hermes-kanban
171
181
  default: default
172
182
 
173
183
  runtime:
174
- # Runtimes homologados:
175
- # claude-bg (padrao, mais maduro): despacha \`claude --bg\`, sessao visivel no app
176
- # e em \`claude agents --json\`
177
- # codex: despacha \`codex exec\` headless na sessao autenticada do Codex CLI,
178
- # verificado no rollout de $CODEX_HOME/sessions (requer \`codex login\`)
184
+ ${comentario(c.runtimes)}
179
185
  adapter: claude-bg
180
186
  model: opus
181
187
  effort: high
182
- # subscription-only: proibido despachar por provider pago (cobra por token, fora da assinatura)
188
+ ${comentario(c.providerPolicy)}
183
189
  provider_policy: subscription-only
184
- # sandbox do runtime codex: read-only | workspace-write | danger-full-access
185
- # (danger-full-access SO onde o bubblewrap nao roda; \`ork doctor\` tem a sonda)
190
+ ${comentario(c.sandbox)}
186
191
  sandbox: workspace-write
187
192
 
188
193
  conduction:
189
- # modo usado quando o pedido do builder nao traz #TAG
194
+ ${comentario(c.modoPadrao)}
190
195
  default_mode: classic
191
196
  allowed_modes: [${modos_1.ORDEM_DOS_MODOS.join(', ')}]
192
197
 
193
198
  worktree:
194
199
  base_branch: "${d.baseBranch}"
195
200
  dir: ".claude/worktrees"
196
- # true: o ork thread new cria a worktree e a branch da thread sem flag (--sem-worktree cria sem);
197
- # false ou ausente: só com --worktree auto
201
+ ${comentario(c.porThread)}
198
202
  por_thread: true
199
203
 
200
204
  verify:
201
205
  ${linhaVerify('build', d.verify.build)}
202
206
  ${linhaVerify('test', d.verify.test)}
203
207
  ${linhaVerify('typecheck', d.verify.typecheck)}
208
+ ${comentario(c.securityScan)}
209
+ ${d.stacks.length > 0 ? '' : '# '}security_scan: "ork security-scan"
210
+ ${d.stacks.length > 0 ? '' : '# '}timeout_ms_por_comando:
211
+ ${d.stacks.length > 0 ? '' : '# '} security_scan: 900000
204
212
 
205
213
  ci:
206
- # Ative depois de publicar o workflow e tornar ork-verify um check obrigatório.
214
+ ${comentario(c.ci)}
207
215
  required_for_ship: false
208
216
  context: ork-verify
209
- # command: "npm test" # perfil hermético opcional do runner; sem ele, usa verify acima
217
+ # command: "npm test" # ${c.ciComando}
210
218
 
211
219
  concurrency:
212
220
  max_parallel_threads: 3
213
- # thread despachada sem atividade (ledger parado, sessao nao-working) por mais que
214
- # isto NAO ocupa vaga do escalonador: a vaga volta para quem esta pronto para rodar
221
+ ${comentario(c.staleAfter)}
215
222
  stale_after_min: 240
216
223
 
217
224
  handoff:
218
- # gate de tokens (bloco B1): rotaciona a sessao acima destas ocupacoes de janela
225
+ ${comentario(c.handoff)}
219
226
  rotate_above: 0.70
220
227
  force_rotate_above: 0.85
221
228
 
222
229
  retry:
223
- # autonomia do bloco B3: retry tipado por motivo de gate e fila duravel de rate limit
224
- # max_tentativas e o LIMITE DE ESCALACAO: estourado, pausa qualquer modo, ate #Auto
230
+ ${comentario(c.retry)}
225
231
  max_tentativas: 3
226
- # janela usada so quando o runtime diz "rate limit" e NAO diz a hora do reset
227
- # (fica marcada como estimativa na fila; o ork nunca inventa horario medido)
232
+ ${comentario(c.janelaPadrao)}
228
233
  janela_padrao_min: 60
229
234
  escalar_esforco: true
230
235
 
231
236
  memory:
232
- # files = fallback honesto sem OrkMind (handoff por arquivos, ponteiro path#ancora)
233
- # orkmind = camada semantica do bloco B6 por cima, com degradacao honesta para files
237
+ ${comentario(c.memoriaModo)}
234
238
  mode: files
235
- # NOME da variavel de ambiente com a DSN da base PROPRIA deste tenant, nunca a DSN.
236
- # Vazio = o regime orkmind nao liga (o ork nao adivinha base: base alheia e pior que
237
- # base nenhuma, precedente do incidente memory-orkmind).
239
+ ${comentario(c.databaseUrl)}
238
240
  database_url_env: ""
239
241
  cli: orkmind
240
242
  timeout_ms: 15000
241
- # busca por significado (ork memory search --texto): sem o bloco, provider none (desligada).
242
- # api_key_env recebe o NOME da variavel com a chave dedicada, nunca o valor.
243
+ ${comentario(c.embedding)}
243
244
  # embedding:
244
245
  # provider: "none" # none | openrouter
245
246
  # model: "qwen/qwen3-embedding-8b"
246
247
  # dim: 1024
247
248
  # api_key_env: "ORKASTERY_EMBEDDING_API_KEY"
248
- # fallback_model: "" # modelo local offline, ex.: intfloat/multilingual-e5-small
249
+ # fallback_model: "" # ${c.modeloOffline}
249
250
  # max_tokens_por_execucao: 1000000
250
251
 
251
252
  audit:
252
- # governanca de custo dos auditores periodicos (bloco B5)
253
- # janela ociosa da assinatura: fora dela a rodada so anda com --agora <quem>
253
+ ${comentario(c.audit)}
254
254
  janela_ociosa: "22:00-06:00"
255
255
  effort: eco
256
256
  since_padrao: 7d
@@ -273,10 +273,12 @@ function exigirRepositorioParaInit(dir) {
273
273
  const r = (0, util_1.exec)('git', ['rev-parse', '--is-inside-work-tree'], dir);
274
274
  if (r.ok && r.stdout.trim() === 'true')
275
275
  return;
276
- throw new Error(`init.fora-do-repositorio: ${path.resolve(dir)} não está num repositório git; nada foi criado. ` +
277
- 'Entre no repositório do projeto (ou crie um com git init e o primeiro commit) e rode ork init de novo.');
276
+ throw new Error((0, locale_1.msg)().init.foraDoRepositorio(path.resolve(dir)));
278
277
  }
279
- /** Gera o manifesto e o esqueleto de `.orkastery/`. Nao sobrescreve sem `force`. */
278
+ /**
279
+ * Gera o manifesto e o esqueleto de `.orkastery/`. Nao sobrescreve sem `force`. Os comentarios do manifesto saem
280
+ * no `locale` pedido (RM-061, F3a), pt-BR por omissao.
281
+ */
280
282
  function init(dirInicial, opcoes = {}) {
281
283
  const deteccao = detectar(dirInicial, opcoes.nome, opcoes.abbrev);
282
284
  const caminho = path.join(deteccao.raiz, manifest_1.NOME_MANIFESTO);
@@ -284,9 +286,12 @@ function init(dirInicial, opcoes = {}) {
284
286
  if (existe && !opcoes.force) {
285
287
  return { caminho, criado: false, deteccao };
286
288
  }
287
- (0, util_1.gravar)(caminho, manifestoYaml(deteccao));
289
+ (0, util_1.gravar)(caminho, manifestoYaml(deteccao, opcoes.locale));
288
290
  const estado = path.join(deteccao.raiz, manifest_1.DIR_ESTADO);
289
291
  fs.mkdirSync(path.join(estado, 'threads'), { recursive: true });
290
- // Fatia 2 do ensaio da 0.5.0 (P3): o estado e da maquina; fica fora do git sem mexer no `.gitignore` do usuario.
291
- return { caminho, criado: true, deteccao, estadoIgnorado: (0, util_1.ignorarPastaNoGit)(estado, deteccao.raiz) };
292
+ // RM-061 F3c: so o arquivo do estado criado pelo `init` segue a lingua pedida. O `*` e a protecao
293
+ // contra sobrescrita continuam no util; a pasta de worktrees preserva o default historico.
294
+ const locale = opcoes.locale ?? locale_1.LOCALE_PADRAO;
295
+ const gitignore = `# ${(0, locale_1.msg)(locale).gerados.gitignoreDaMaquina}\n*\n`;
296
+ return { caminho, criado: true, deteccao, estadoIgnorado: (0, util_1.ignorarPastaNoGit)(estado, deteccao.raiz, gitignore) };
292
297
  }
@@ -0,0 +1,144 @@
1
+ "use strict";
2
+ /**
3
+ * RM-037 (fatia 6, P6/T15): o registro de instabilidade, contrato `ork.instabilidade/v1`.
4
+ *
5
+ * Arquivo `core/instabilidade.json` na arvore verificada. Nasce vazio. Uma entrada diz que um teste
6
+ * depende do relogio e por isso reprova sob steal alto; ela so entra com a taxa MEDIDA (falhas em
7
+ * rodadas, com o comando que mediu e a data) e com revalidacao em ate 30 dias da medida. Vencida a
8
+ * revalidacao, a entrada deixa de valer ate alguem medir de novo.
9
+ *
10
+ * O registro nunca atenua uma falha sozinho: ele so diz ao verify que aquele teste e de relogio, e
11
+ * a reprovacao so vira `verify.timeout` com o steal medido acima de 40% na janela do comando. Sem
12
+ * steal, o teste registrado reprova como qualquer outro.
13
+ */
14
+ Object.defineProperty(exports, "__esModule", { value: true });
15
+ exports.CAUSAS_DE_INSTABILIDADE = exports.REVALIDACAO_MAXIMA_DIAS = exports.ARQUIVO_INSTABILIDADE = exports.CONTRATO_INSTABILIDADE = void 0;
16
+ exports.validarRegistro = validarRegistro;
17
+ exports.vigente = vigente;
18
+ exports.lerRegistroDeInstabilidade = lerRegistroDeInstabilidade;
19
+ exports.testesDeRelogioVigentes = testesDeRelogioVigentes;
20
+ const node_fs_1 = require("node:fs");
21
+ const node_path_1 = require("node:path");
22
+ exports.CONTRATO_INSTABILIDADE = 'ork.instabilidade/v1';
23
+ exports.ARQUIVO_INSTABILIDADE = 'core/instabilidade.json';
24
+ /** Prazo maximo entre a medida e a revalidacao. */
25
+ exports.REVALIDACAO_MAXIMA_DIAS = 30;
26
+ exports.CAUSAS_DE_INSTABILIDADE = ['relogio'];
27
+ const DIA_MS = 24 * 60 * 60 * 1000;
28
+ const CHAVES_DA_ENTRADA = new Set(['teste', 'arquivo', 'causa', 'taxa', 'revalidarAte', 'nota']);
29
+ const CHAVES_DA_TAXA = new Set(['falhas', 'rodadas', 'comando', 'medidaEm']);
30
+ function data(valor) {
31
+ if (typeof valor !== 'string' || !/^\d{4}-\d{2}-\d{2}$/.test(valor))
32
+ return null;
33
+ const ms = Date.parse(`${valor}T00:00:00Z`);
34
+ return Number.isFinite(ms) && new Date(ms).toISOString().slice(0, 10) === valor ? ms : null;
35
+ }
36
+ const texto = (v) => typeof v === 'string' && v.trim() !== '';
37
+ const inteiro = (v) => typeof v === 'number' && Number.isInteger(v);
38
+ /** Os erros de contrato de um registro ja desserializado. Lista vazia: o registro vale. */
39
+ function validarRegistro(bruto) {
40
+ const erros = [];
41
+ if (!bruto || typeof bruto !== 'object' || Array.isArray(bruto))
42
+ return ['o registro precisa ser um objeto JSON'];
43
+ const r = bruto;
44
+ if (r.contrato !== exports.CONTRATO_INSTABILIDADE)
45
+ erros.push(`contrato precisa ser "${exports.CONTRATO_INSTABILIDADE}"`);
46
+ for (const chave of Object.keys(r)) {
47
+ if (chave !== 'contrato' && chave !== 'entradas')
48
+ erros.push(`chave desconhecida no registro: ${chave}`);
49
+ }
50
+ if (!Array.isArray(r.entradas))
51
+ return [...erros, 'entradas precisa ser uma lista (vazia no nascimento)'];
52
+ const vistos = new Set();
53
+ r.entradas.forEach((e, i) => {
54
+ const onde = `entradas[${i}]`;
55
+ if (!e || typeof e !== 'object' || Array.isArray(e)) {
56
+ erros.push(`${onde}: precisa ser um objeto`);
57
+ return;
58
+ }
59
+ const entrada = e;
60
+ for (const chave of Object.keys(entrada)) {
61
+ if (!CHAVES_DA_ENTRADA.has(chave))
62
+ erros.push(`${onde}: chave desconhecida ${chave}`);
63
+ }
64
+ if (!texto(entrada.teste))
65
+ erros.push(`${onde}.teste: nome do teste como o runner reporta`);
66
+ else if (vistos.has(entrada.teste))
67
+ erros.push(`${onde}.teste: "${entrada.teste}" repetido`);
68
+ else
69
+ vistos.add(entrada.teste);
70
+ if (!texto(entrada.arquivo))
71
+ erros.push(`${onde}.arquivo: caminho do teste`);
72
+ if (!exports.CAUSAS_DE_INSTABILIDADE.includes(entrada.causa)) {
73
+ erros.push(`${onde}.causa: ${exports.CAUSAS_DE_INSTABILIDADE.join(' ou ')}`);
74
+ }
75
+ if (entrada.nota !== undefined && typeof entrada.nota !== 'string')
76
+ erros.push(`${onde}.nota: texto`);
77
+ const taxa = entrada.taxa;
78
+ let medida = null;
79
+ if (!taxa || typeof taxa !== 'object' || Array.isArray(taxa)) {
80
+ erros.push(`${onde}.taxa: sem taxa medida a entrada nao entra (falhas, rodadas, comando, medidaEm)`);
81
+ }
82
+ else {
83
+ for (const chave of Object.keys(taxa)) {
84
+ if (!CHAVES_DA_TAXA.has(chave))
85
+ erros.push(`${onde}.taxa: chave desconhecida ${chave}`);
86
+ }
87
+ if (!inteiro(taxa.rodadas) || taxa.rodadas < 1)
88
+ erros.push(`${onde}.taxa.rodadas: inteiro de rodadas medidas, 1 ou mais`);
89
+ if (!inteiro(taxa.falhas) || taxa.falhas < 1)
90
+ erros.push(`${onde}.taxa.falhas: inteiro de reprovacoes medidas, 1 ou mais`);
91
+ else if (inteiro(taxa.rodadas) && taxa.falhas > taxa.rodadas)
92
+ erros.push(`${onde}.taxa.falhas: maior que rodadas`);
93
+ if (!texto(taxa.comando))
94
+ erros.push(`${onde}.taxa.comando: o comando que mediu, reproduzivel`);
95
+ medida = data(taxa.medidaEm);
96
+ if (medida === null)
97
+ erros.push(`${onde}.taxa.medidaEm: data AAAA-MM-DD valida`);
98
+ }
99
+ const revalidar = data(entrada.revalidarAte);
100
+ if (revalidar === null)
101
+ erros.push(`${onde}.revalidarAte: data AAAA-MM-DD valida`);
102
+ else if (medida !== null) {
103
+ if (revalidar < medida)
104
+ erros.push(`${onde}.revalidarAte: antes da medida`);
105
+ else if (revalidar - medida > exports.REVALIDACAO_MAXIMA_DIAS * DIA_MS) {
106
+ erros.push(`${onde}.revalidarAte: no maximo ${exports.REVALIDACAO_MAXIMA_DIAS} dias depois de taxa.medidaEm`);
107
+ }
108
+ }
109
+ });
110
+ return erros;
111
+ }
112
+ /** A entrada vale hoje? Vale ate o fim do dia de `revalidarAte`, em UTC. */
113
+ function vigente(entrada, agoraMs = Date.now()) {
114
+ const ate = data(entrada.revalidarAte);
115
+ return ate !== null && agoraMs < ate + DIA_MS;
116
+ }
117
+ /** Le o registro da arvore `cwd`. Ausente: vazio. Ilegivel ou fora do contrato: erros e nada vale. */
118
+ function lerRegistroDeInstabilidade(cwd, agoraMs = Date.now()) {
119
+ const arquivo = (0, node_path_1.join)(cwd, exports.ARQUIVO_INSTABILIDADE);
120
+ if (!(0, node_fs_1.existsSync)(arquivo))
121
+ return { arquivo: exports.ARQUIVO_INSTABILIDADE, presente: false, erros: [], vigentes: [], vencidas: [] };
122
+ let bruto;
123
+ try {
124
+ bruto = JSON.parse((0, node_fs_1.readFileSync)(arquivo, 'utf8'));
125
+ }
126
+ catch (e) {
127
+ return { arquivo: exports.ARQUIVO_INSTABILIDADE, presente: true, erros: [`JSON ilegivel: ${e.message}`], vigentes: [], vencidas: [] };
128
+ }
129
+ const erros = validarRegistro(bruto);
130
+ if (erros.length > 0)
131
+ return { arquivo: exports.ARQUIVO_INSTABILIDADE, presente: true, erros, vigentes: [], vencidas: [] };
132
+ const entradas = bruto.entradas;
133
+ return {
134
+ arquivo: exports.ARQUIVO_INSTABILIDADE,
135
+ presente: true,
136
+ erros: [],
137
+ vigentes: entradas.filter((e) => vigente(e, agoraMs)),
138
+ vencidas: entradas.filter((e) => !vigente(e, agoraMs)),
139
+ };
140
+ }
141
+ /** Os nomes dos testes de relogio que o verify pode considerar nesta rodada. */
142
+ function testesDeRelogioVigentes(registro) {
143
+ return new Set(registro.vigentes.filter((e) => e.causa === 'relogio').map((e) => e.teste));
144
+ }
@@ -18,4 +18,8 @@ exports.TESTES_DE_INTEGRACAO_LOCAL = new Set([
18
18
  'rm037-fatia3-hard-link-mcp-git.test.js', 'rm037-fatia3-lease-mcp-git.test.js',
19
19
  // RM-038 (fatia de correcao): a ponte com o GovernedStore real da biblioteca instalada.
20
20
  'rm038-universo-ponte.test.js',
21
+ // RM-059 (T0.10): a conferencia pontual com o sandbox real do codex, como o mcp-verify.test.js.
22
+ 'claims-conferir-sandbox.test.js',
23
+ // Security scan (Task 13a): o scanner com o Docker real e as imagens do catalogo.
24
+ 'security-scan-integracao.test.js',
21
25
  ]);