@orkastery/cli 0.5.3 → 0.6.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (502) hide show
  1. package/adapters/README.md +18 -0
  2. package/adapters/claude-code/.claude-plugin/plugin.json +1 -0
  3. package/adapters/claude-code/README.md +195 -5
  4. package/adapters/claude-code/agents/ork-check.md +1 -0
  5. package/adapters/claude-code/agents/ork-go.md +1 -0
  6. package/adapters/claude-code/agents/ork-goal.md +1 -0
  7. package/adapters/claude-code/agents/ork-master.md +1 -0
  8. package/adapters/claude-code/agents/ork-plan.md +1 -0
  9. package/adapters/claude-code/agents/ork-ship.md +1 -0
  10. package/adapters/claude-code/hooks/hooks.json +2 -1
  11. package/adapters/claude-code/hooks/ork-guard.js +15 -1
  12. package/adapters/claude-code/hooks/ork-resposta.js +91 -0
  13. package/adapters/claude-code/hooks/ork-sensor.js +18 -2
  14. package/adapters/claude-code/hooks/quota-signal.js +14 -0
  15. package/adapters/claude-code/mods/autoridade.json +56 -0
  16. package/adapters/claude-code/mods/ork-clima/.claude-plugin/plugin.json +14 -0
  17. package/adapters/claude-code/mods/ork-clima/hooks/contas.ts +283 -0
  18. package/adapters/claude-code/mods/ork-clima/hooks/hooks.json +3 -0
  19. package/adapters/claude-code/mods/ork-clima/hooks/previsao.ts +393 -0
  20. package/adapters/claude-code/mods/ork-clima/hooks/register.ts +205 -0
  21. package/adapters/claude-code/mods/ork-clima/orkastery-mod.json +5 -0
  22. package/adapters/claude-code/mods/ork-clima/types/index.d.ts +80 -0
  23. package/adapters/claude-code/mods/ork-freio/.claude-plugin/plugin.json +14 -0
  24. package/adapters/claude-code/mods/ork-freio/hooks/carga.ts +160 -0
  25. package/adapters/claude-code/mods/ork-freio/hooks/conferencia.ts +309 -0
  26. package/adapters/claude-code/mods/ork-freio/hooks/hooks.json +3 -0
  27. package/adapters/claude-code/mods/ork-freio/hooks/lote.ts +270 -0
  28. package/adapters/claude-code/mods/ork-freio/hooks/register.ts +285 -0
  29. package/adapters/claude-code/mods/ork-freio/orkastery-mod.json +5 -0
  30. package/adapters/claude-code/mods/ork-freio/types/index.d.ts +127 -0
  31. package/adapters/claude-code/mods/ork-mensageiro/.claude-plugin/plugin.json +14 -0
  32. package/adapters/claude-code/mods/ork-mensageiro/hooks/caixa.ts +215 -0
  33. package/adapters/claude-code/mods/ork-mensageiro/hooks/hooks.json +3 -0
  34. package/adapters/claude-code/mods/ork-mensageiro/hooks/painel.tsx +165 -0
  35. package/adapters/claude-code/mods/ork-mensageiro/hooks/recepcao.ts +256 -0
  36. package/adapters/claude-code/mods/ork-mensageiro/hooks/register.tsx +481 -0
  37. package/adapters/claude-code/mods/ork-mensageiro/orkastery-mod.json +5 -0
  38. package/adapters/claude-code/mods/ork-mensageiro/types/index.d.ts +85 -0
  39. package/adapters/claude-code/mods/ork-mesa/.claude-plugin/plugin.json +14 -0
  40. package/adapters/claude-code/mods/ork-mesa/hooks/cartoes.tsx +246 -0
  41. package/adapters/claude-code/mods/ork-mesa/hooks/decidir.ts +110 -0
  42. package/adapters/claude-code/mods/ork-mesa/hooks/fila.ts +253 -0
  43. package/adapters/claude-code/mods/ork-mesa/hooks/hooks.json +3 -0
  44. package/adapters/claude-code/mods/ork-mesa/hooks/obvia.ts +98 -0
  45. package/adapters/claude-code/mods/ork-mesa/hooks/register.tsx +493 -0
  46. package/adapters/claude-code/mods/ork-mesa/orkastery-mod.json +5 -0
  47. package/adapters/claude-code/mods/ork-mesa/types/index.d.ts +131 -0
  48. package/adapters/claude-code/mods/ork-pista/.claude-plugin/plugin.json +14 -0
  49. package/adapters/claude-code/mods/ork-pista/hooks/acoes.ts +71 -0
  50. package/adapters/claude-code/mods/ork-pista/hooks/ci.ts +121 -0
  51. package/adapters/claude-code/mods/ork-pista/hooks/hooks.json +3 -0
  52. package/adapters/claude-code/mods/ork-pista/hooks/pista.tsx +356 -0
  53. package/adapters/claude-code/mods/ork-pista/hooks/register.tsx +439 -0
  54. package/adapters/claude-code/mods/ork-pista/orkastery-mod.json +5 -0
  55. package/adapters/claude-code/mods/ork-pista/types/index.d.ts +85 -0
  56. package/adapters/claude-code/mods/ork-ponte/.claude-plugin/plugin.json +13 -0
  57. package/adapters/claude-code/mods/ork-ponte/hooks/faixa.tsx +57 -0
  58. package/adapters/claude-code/mods/ork-ponte/hooks/guarda.ts +410 -0
  59. package/adapters/claude-code/mods/ork-ponte/hooks/hooks.json +3 -0
  60. package/adapters/claude-code/mods/ork-ponte/hooks/mostrado.ts +55 -0
  61. package/adapters/claude-code/mods/ork-ponte/hooks/nucleo.ts +157 -0
  62. package/adapters/claude-code/mods/ork-ponte/hooks/papel.ts +42 -0
  63. package/adapters/claude-code/mods/ork-ponte/hooks/register.ts +331 -0
  64. package/adapters/claude-code/mods/ork-ponte/hooks/vigia.ts +76 -0
  65. package/adapters/claude-code/mods/ork-ponte/orkastery-mod.json +5 -0
  66. package/adapters/claude-code/mods/ork-ponte/types/index.d.ts +178 -0
  67. package/adapters/claude-code/mods/ork-portao/.claude-plugin/plugin.json +14 -0
  68. package/adapters/claude-code/mods/ork-portao/hooks/hooks.json +3 -0
  69. package/adapters/claude-code/mods/ork-portao/hooks/lease.ts +201 -0
  70. package/adapters/claude-code/mods/ork-portao/hooks/plano.ts +304 -0
  71. package/adapters/claude-code/mods/ork-portao/hooks/register.ts +339 -0
  72. package/adapters/claude-code/mods/ork-portao/hooks/verify.ts +152 -0
  73. package/adapters/claude-code/mods/ork-portao/orkastery-mod.json +5 -0
  74. package/adapters/claude-code/mods/ork-portao/types/index.d.ts +60 -0
  75. package/adapters/claude-code/mods/ork-radar/.claude-plugin/plugin.json +14 -0
  76. package/adapters/claude-code/mods/ork-radar/hooks/colisao.ts +420 -0
  77. package/adapters/claude-code/mods/ork-radar/hooks/hooks.json +3 -0
  78. package/adapters/claude-code/mods/ork-radar/hooks/mapa.tsx +322 -0
  79. package/adapters/claude-code/mods/ork-radar/hooks/register.tsx +470 -0
  80. package/adapters/claude-code/mods/ork-radar/orkastery-mod.json +5 -0
  81. package/adapters/claude-code/mods/ork-radar/types/index.d.ts +72 -0
  82. package/adapters/claude-code/mods/ork-ritual/.claude-plugin/plugin.json +14 -0
  83. package/adapters/claude-code/mods/ork-ritual/hooks/hooks.json +3 -0
  84. package/adapters/claude-code/mods/ork-ritual/hooks/nota.ts +88 -0
  85. package/adapters/claude-code/mods/ork-ritual/hooks/register.tsx +494 -0
  86. package/adapters/claude-code/mods/ork-ritual/hooks/replay.tsx +271 -0
  87. package/adapters/claude-code/mods/ork-ritual/hooks/ritual.ts +218 -0
  88. package/adapters/claude-code/mods/ork-ritual/orkastery-mod.json +5 -0
  89. package/adapters/claude-code/mods/ork-ritual/types/index.d.ts +106 -0
  90. package/adapters/claude-code/mods/ork-sentinela/.claude-plugin/plugin.json +14 -0
  91. package/adapters/claude-code/mods/ork-sentinela/hooks/alertas.ts +85 -0
  92. package/adapters/claude-code/mods/ork-sentinela/hooks/despacho.ts +156 -0
  93. package/adapters/claude-code/mods/ork-sentinela/hooks/hooks.json +3 -0
  94. package/adapters/claude-code/mods/ork-sentinela/hooks/register.ts +511 -0
  95. package/adapters/claude-code/mods/ork-sentinela/hooks/vigia.ts +186 -0
  96. package/adapters/claude-code/mods/ork-sentinela/orkastery-mod.json +5 -0
  97. package/adapters/claude-code/mods/ork-sentinela/types/index.d.ts +65 -0
  98. package/adapters/claude-code/mods/ork-torre/.claude-plugin/plugin.json +14 -0
  99. package/adapters/claude-code/mods/ork-torre/hooks/agenda.ts +60 -0
  100. package/adapters/claude-code/mods/ork-torre/hooks/detalhe.tsx +236 -0
  101. package/adapters/claude-code/mods/ork-torre/hooks/frases.ts +42 -0
  102. package/adapters/claude-code/mods/ork-torre/hooks/hooks.json +3 -0
  103. package/adapters/claude-code/mods/ork-torre/hooks/painel.tsx +344 -0
  104. package/adapters/claude-code/mods/ork-torre/hooks/rede.ts +97 -0
  105. package/adapters/claude-code/mods/ork-torre/hooks/register.tsx +437 -0
  106. package/adapters/claude-code/mods/ork-torre/orkastery-mod.json +5 -0
  107. package/adapters/claude-code/mods/ork-torre/types/index.d.ts +108 -0
  108. package/adapters/codex/skills/ork/SKILL.md +2 -0
  109. package/adapters/hermes/README.md +64 -1
  110. package/adapters/hermes/bin/ork-conhecimento-colecoes.sh +14 -0
  111. package/adapters/hermes/bin/ork-conhecimento-listar.sh +15 -0
  112. package/adapters/hermes/bin/ork-conhecimento-mostrar.sh +16 -0
  113. package/adapters/hermes/bin/ork-conhecimento-verificar.sh +15 -0
  114. package/adapters/hermes/bin/ork-vigia-batida.py +127 -0
  115. package/adapters/hermes/hermes.plugin.json +4 -0
  116. package/adapters/hermes/hitl-ingress/__init__.py +101 -8
  117. package/adapters/hermes/skills/orkastery-devmaster/SKILL.md +3 -3
  118. package/adapters/openclaw/README.md +83 -10
  119. package/adapters/openclaw/bin/ork-vigia-batida.js +86 -0
  120. package/adapters/openclaw/dist/hitl-ingress.js +106 -9
  121. package/adapters/openclaw/dist/index.js +86 -0
  122. package/adapters/openclaw/openclaw.plugin.json +34 -4
  123. package/adapters/openclaw/package.json +2 -2
  124. package/adapters/openclaw/src/hitl-ingress.ts +103 -9
  125. package/adapters/openclaw/src/index.ts +94 -0
  126. package/assets/adapters-en/claude-code/README.md +403 -0
  127. package/assets/adapters-en/claude-code/agents/ork-check.md +33 -0
  128. package/assets/adapters-en/claude-code/agents/ork-go.md +33 -0
  129. package/assets/adapters-en/claude-code/agents/ork-goal.md +34 -0
  130. package/assets/adapters-en/claude-code/agents/ork-master.md +35 -0
  131. package/assets/adapters-en/claude-code/agents/ork-plan.md +33 -0
  132. package/assets/adapters-en/claude-code/agents/ork-ship.md +33 -0
  133. package/assets/adapters-en/claude-code/commands/check.md +46 -0
  134. package/assets/adapters-en/claude-code/commands/go.md +46 -0
  135. package/assets/adapters-en/claude-code/commands/goal.md +55 -0
  136. package/assets/adapters-en/claude-code/commands/master.md +54 -0
  137. package/assets/adapters-en/claude-code/commands/onboarding.md +22 -0
  138. package/assets/adapters-en/claude-code/commands/ork.md +126 -0
  139. package/assets/adapters-en/claude-code/commands/plan.md +47 -0
  140. package/assets/adapters-en/claude-code/commands/ship.md +45 -0
  141. package/assets/adapters-en/codex/skills/ork/SKILL.md +85 -0
  142. package/assets/adapters-en/hermes/README.md +273 -0
  143. package/assets/adapters-en/hermes/skills/orkastery-devmaster/SKILL.md +169 -0
  144. package/assets/docs-en/markdownlint-cli2.jsonc +22 -0
  145. package/assets/docs-en/padroes/documentacao-de-produto.md +135 -0
  146. package/assets/docs-en/padroes/roadmap-de-produto.md +100 -0
  147. package/assets/docs-en/produto/README.md +14 -0
  148. package/assets/docs-en/produto/_modelo-feature.md +62 -0
  149. package/assets/docs-en/roadmap/README.md +14 -0
  150. package/assets/docs-en/roadmap/_modelo-item.md +75 -0
  151. package/assets/references-en/README.md +25 -0
  152. package/assets/references-en/code-review-axes.md +82 -0
  153. package/assets/references-en/definition-of-done.md +74 -0
  154. package/assets/references-en/performance-checklist.md +53 -0
  155. package/assets/references-en/security-checklist.md +101 -0
  156. package/assets/references-en/testing-patterns.md +51 -0
  157. package/assets/security-scan/defaults/.golangci.yml +2 -0
  158. package/assets/security-scan/defaults/eslint.config.mjs +11 -0
  159. package/assets/security-scan/defaults/gitleaks.toml +3 -0
  160. package/assets/security-scan/defaults/ruff.toml +1 -0
  161. package/assets/security-scan/tools-agil.json +87 -0
  162. package/assets/security-scan/tools.json +625 -0
  163. package/assets/skills-en/core/onboarding/SKILL.md +58 -0
  164. package/assets/skills-en/core/orkastery-bootstrap/SKILL.md +119 -0
  165. package/assets/skills-en/core/thread-state/SKILL.md +88 -0
  166. package/assets/skills-en/governance/decision-triage/SKILL.md +65 -0
  167. package/assets/skills-en/governance/narrative-guardian/SKILL.md +66 -0
  168. package/assets/skills-en/governance/roadmap-keeper/SKILL.md +60 -0
  169. package/assets/skills-en/governance/scope-check-capability-map/SKILL.md +71 -0
  170. package/assets/skills-en/observability/thread-tracing/SKILL.md +63 -0
  171. package/assets/skills-en/phases/check-quality/SKILL.md +103 -0
  172. package/assets/skills-en/phases/go-implementation/SKILL.md +78 -0
  173. package/assets/skills-en/phases/goal-definition/SKILL.md +69 -0
  174. package/assets/skills-en/phases/master-metrics/SKILL.md +72 -0
  175. package/assets/skills-en/phases/plan-specification/SKILL.md +67 -0
  176. package/assets/skills-en/phases/security-remediation/SKILL.md +70 -0
  177. package/assets/skills-en/phases/ship-release/SKILL.md +71 -0
  178. package/assets/skills-en/reviewers/code-reviewer/SKILL.md +61 -0
  179. package/assets/skills-en/reviewers/security-auditor/SKILL.md +93 -0
  180. package/assets/skills-en/reviewers/test-engineer/SKILL.md +66 -0
  181. package/assets/skills-en/reviewers/web-performance-auditor/SKILL.md +63 -0
  182. package/dist/adapters/claude-bg.js +193 -15
  183. package/dist/adapters/codex-controller-worker.js +12 -5
  184. package/dist/adapters/codex-events.js +16 -4
  185. package/dist/adapters/codex.js +13 -2
  186. package/dist/agents-md.js +24 -15
  187. package/dist/atualizar-branch.js +245 -0
  188. package/dist/auditoria.js +13 -11
  189. package/dist/auditrun.js +68 -48
  190. package/dist/autorizacao-duravel.js +327 -0
  191. package/dist/board.js +98 -43
  192. package/dist/branch-de-estado.js +39 -9
  193. package/dist/busca-semantica.js +7 -5
  194. package/dist/catalogo.js +35 -1
  195. package/dist/changelog-reconciliacao.js +290 -0
  196. package/dist/check-agil.js +500 -0
  197. package/dist/check-modo.js +41 -0
  198. package/dist/check-paralelo.js +183 -0
  199. package/dist/ci.js +255 -46
  200. package/dist/ciclos.js +8 -6
  201. package/dist/claim-lint.js +12 -8
  202. package/dist/claims-conferir.js +350 -0
  203. package/dist/claims.js +13 -10
  204. package/dist/company-brain-client.js +45 -3
  205. package/dist/company-brain-journal.js +2 -1
  206. package/dist/company-brain-migration.js +47 -6
  207. package/dist/conducao-batida.js +759 -0
  208. package/dist/conducao-sentinela.js +405 -0
  209. package/dist/conducao-texto.js +12 -18
  210. package/dist/conducao.js +206 -59
  211. package/dist/conhecimento-consulta.js +270 -0
  212. package/dist/conhecimento.js +514 -0
  213. package/dist/conta-esgotada.js +127 -0
  214. package/dist/dado-privado.js +816 -0
  215. package/dist/decisao-autonoma.js +5 -4
  216. package/dist/demo.js +14 -12
  217. package/dist/dependencias-da-worktree.js +25 -0
  218. package/dist/divida.js +38 -36
  219. package/dist/docs.js +103 -82
  220. package/dist/doctor-forja.js +345 -0
  221. package/dist/doctor-pulse-cron.js +294 -27
  222. package/dist/doctor-rede.js +18 -17
  223. package/dist/doctor.js +278 -116
  224. package/dist/dsn-da-memoria.js +417 -0
  225. package/dist/entrega-por-mod.js +503 -0
  226. package/dist/entrega-pr.js +158 -57
  227. package/dist/escopo-escrita.js +10 -1
  228. package/dist/esgotamentos.js +13 -11
  229. package/dist/estado-thread.js +42 -17
  230. package/dist/evalrunner.js +35 -32
  231. package/dist/experiencia-instalacao.js +45 -25
  232. package/dist/fabrica-batida.js +323 -0
  233. package/dist/fabrica-estado.js +49 -16
  234. package/dist/fabrica-publicar.js +3 -1
  235. package/dist/fila-pesada.js +444 -0
  236. package/dist/fix.js +24 -21
  237. package/dist/forja/adaptador.js +6 -0
  238. package/dist/forja/ambiente-de-ci.js +27 -0
  239. package/dist/forja/api.js +256 -0
  240. package/dist/forja/cache.js +89 -0
  241. package/dist/forja/cli.js +60 -0
  242. package/dist/forja/contrato.js +9 -0
  243. package/dist/forja/endereco.js +43 -0
  244. package/dist/forja/estado.js +22 -0
  245. package/dist/forja/executor.js +73 -0
  246. package/dist/forja/github/ci.js +95 -0
  247. package/dist/forja/github/dono-da-rede.js +18 -0
  248. package/dist/forja/github/metadados.js +15 -0
  249. package/dist/forja/github/pedidos.js +200 -0
  250. package/dist/forja/gitlab/ci.js +141 -0
  251. package/dist/forja/gitlab/consultas.js +59 -0
  252. package/dist/forja/gitlab/dono-da-rede.js +43 -0
  253. package/dist/forja/gitlab/metadados.js +15 -0
  254. package/dist/forja/gitlab/pedidos-abertos.js +158 -0
  255. package/dist/forja/gitlab/pedidos.js +141 -0
  256. package/dist/forja/produtor.js +32 -0
  257. package/dist/forja/registro.js +31 -0
  258. package/dist/forja/resolver.js +121 -0
  259. package/dist/forja/texto.js +13 -0
  260. package/dist/forja/versao.js +71 -0
  261. package/dist/forja.js +124 -81
  262. package/dist/gates.js +3 -28
  263. package/dist/handoff.js +33 -19
  264. package/dist/hitl-contract.js +46 -43
  265. package/dist/hitl-curto.js +37 -25
  266. package/dist/hitl-gates.js +13 -11
  267. package/dist/hitl-local-receipt.js +53 -0
  268. package/dist/hitl-local.js +11 -2
  269. package/dist/hitl-lock.js +5 -11
  270. package/dist/hitl-public-receipt.js +11 -0
  271. package/dist/hitl-resumo.js +72 -3
  272. package/dist/hitl-sessions.js +62 -9
  273. package/dist/hitl-tempo-parado.js +4 -4
  274. package/dist/hitl-texto-livre.js +7 -4
  275. package/dist/hitl.js +63 -64
  276. package/dist/horario.js +30 -7
  277. package/dist/hosts.js +155 -134
  278. package/dist/impedimento.js +108 -14
  279. package/dist/index.js +1421 -1019
  280. package/dist/indice-vetorial.js +14 -12
  281. package/dist/indice.js +7 -1
  282. package/dist/init.js +54 -49
  283. package/dist/instabilidade.js +144 -0
  284. package/dist/integracoes-locais.js +4 -0
  285. package/dist/intelligence-graph-cli.js +213 -88
  286. package/dist/intelligence-graph-contexto.js +56 -17
  287. package/dist/intelligence-graph-contract.js +2 -1
  288. package/dist/intelligence-graph-extract-md.js +56 -4
  289. package/dist/intelligence-graph-extract-ts.js +71 -3
  290. package/dist/intelligence-graph-query.js +96 -34
  291. package/dist/leases.js +19 -18
  292. package/dist/ledger-stats.js +17 -16
  293. package/dist/ledger.js +46 -2
  294. package/dist/licoes.js +12 -11
  295. package/dist/liveness.js +6 -3
  296. package/dist/locale-accounts.js +220 -0
  297. package/dist/locale-adapter.js +291 -0
  298. package/dist/locale-ajuda.js +833 -0
  299. package/dist/locale-audit.js +199 -0
  300. package/dist/locale-claims.js +213 -0
  301. package/dist/locale-conducao.js +138 -0
  302. package/dist/locale-conhecimento.js +181 -0
  303. package/dist/locale-decisao.js +205 -0
  304. package/dist/locale-docs.js +230 -0
  305. package/dist/locale-estado.js +101 -0
  306. package/dist/locale-forja.js +290 -0
  307. package/dist/locale-gerados.js +165 -0
  308. package/dist/locale-grafo.js +129 -0
  309. package/dist/locale-master.js +182 -0
  310. package/dist/locale-network.js +524 -0
  311. package/dist/locale-onboarding.js +92 -0
  312. package/dist/locale-operacao-restante.js +931 -0
  313. package/dist/locale-phase.js +151 -0
  314. package/dist/locale-projetos.js +100 -0
  315. package/dist/locale-prompts.js +194 -0
  316. package/dist/locale-pulse.js +349 -0
  317. package/dist/locale-reservas.js +87 -0
  318. package/dist/locale-retry.js +524 -0
  319. package/dist/locale-roadmap.js +102 -0
  320. package/dist/locale-security-scan.js +69 -0
  321. package/dist/locale-setup.js +192 -0
  322. package/dist/locale-ship.js +597 -0
  323. package/dist/locale-thread.js +421 -0
  324. package/dist/locale-verify.js +201 -0
  325. package/dist/locale-worktree.js +246 -0
  326. package/dist/locale.js +1258 -0
  327. package/dist/maestro-runtime.js +22 -3
  328. package/dist/manifest.js +415 -13
  329. package/dist/maquina-ociosa.js +211 -0
  330. package/dist/maquina.js +31 -7
  331. package/dist/master-digest.js +6 -1
  332. package/dist/master-nota-local.js +200 -0
  333. package/dist/master-nota.js +14 -8
  334. package/dist/master.js +139 -65
  335. package/dist/mcp-artifacts.js +11 -2
  336. package/dist/mcp-conhecimento.js +52 -0
  337. package/dist/mcp-experiencia.js +26 -5
  338. package/dist/mcp-git.js +23 -6
  339. package/dist/mcp-grafo.js +7 -4
  340. package/dist/mcp-install.js +73 -8
  341. package/dist/mcp-noctum.js +101 -0
  342. package/dist/mcp-server.js +90 -16
  343. package/dist/mcp-ship-transporte.js +977 -0
  344. package/dist/mcp-ship.js +71 -25
  345. package/dist/mcp-transportes.js +17 -0
  346. package/dist/mcp-verify.js +6 -1
  347. package/dist/memoria.js +63 -58
  348. package/dist/modos-migracao.js +8 -6
  349. package/dist/modos.js +20 -24
  350. package/dist/network-roadmap.js +90 -51
  351. package/dist/noctum-aceite.js +789 -0
  352. package/dist/noctum-arco.js +1418 -0
  353. package/dist/noctum-capacidade.js +141 -0
  354. package/dist/noctum-changelog.js +399 -0
  355. package/dist/noctum-cli.js +482 -0
  356. package/dist/noctum-coordenacao.js +1225 -0
  357. package/dist/noctum-entrega.js +1169 -0
  358. package/dist/noctum-envelope.js +1046 -0
  359. package/dist/noctum-execucao.js +376 -0
  360. package/dist/noctum-fechamento.js +405 -0
  361. package/dist/noctum-fila.js +314 -0
  362. package/dist/noctum-guarda.js +256 -0
  363. package/dist/noctum-integracao.js +507 -0
  364. package/dist/noctum-maquinas.js +383 -0
  365. package/dist/noctum-medicao.js +450 -0
  366. package/dist/noctum-modo.js +362 -0
  367. package/dist/noctum-pergunta-canal.js +96 -0
  368. package/dist/noctum-pergunta.js +115 -0
  369. package/dist/noctum-provas.js +838 -0
  370. package/dist/noctum-reconciliacao.js +591 -0
  371. package/dist/noctum-registro.js +215 -0
  372. package/dist/noctum-relatorio.js +827 -0
  373. package/dist/noctum-resposta.js +207 -0
  374. package/dist/noctum-sessoes-em-voo.js +93 -0
  375. package/dist/noctum-supervisao.js +649 -0
  376. package/dist/noctum-terminal.js +459 -0
  377. package/dist/noctum-transporte.js +655 -0
  378. package/dist/noctum-vigia.js +639 -0
  379. package/dist/ocupacao.js +32 -3
  380. package/dist/onboarding.js +56 -26
  381. package/dist/orkmind.js +48 -25
  382. package/dist/orquestracao.js +44 -47
  383. package/dist/parado-no-condutor.js +174 -127
  384. package/dist/phase.js +144 -63
  385. package/dist/policies.js +37 -4
  386. package/dist/portfolio.js +4 -2
  387. package/dist/postura-local.js +235 -0
  388. package/dist/preflight.js +11 -10
  389. package/dist/procedencia.js +220 -0
  390. package/dist/projeto-alvo.js +186 -24
  391. package/dist/prompts.js +140 -42
  392. package/dist/prova-minima.js +5 -6
  393. package/dist/pulse-cadencia.js +5 -4
  394. package/dist/pulse-consentimento.js +53 -1
  395. package/dist/pulse-delivery.js +151 -24
  396. package/dist/pulse-resposta.js +368 -4
  397. package/dist/pulse.js +188 -22
  398. package/dist/ratelimit.js +16 -6
  399. package/dist/recall.js +14 -13
  400. package/dist/redacao-saida.js +63 -0
  401. package/dist/rede-adesao.js +13 -8
  402. package/dist/rede-forja.js +108 -24
  403. package/dist/rede-status.js +66 -47
  404. package/dist/rede.js +86 -46
  405. package/dist/retomada-checkpoint.js +101 -0
  406. package/dist/retry.js +451 -212
  407. package/dist/roadmap-reservas.js +45 -28
  408. package/dist/roadmap-status.js +129 -33
  409. package/dist/runtime-ambiente.js +5 -0
  410. package/dist/runtime-context.js +284 -32
  411. package/dist/runtime-escada.js +423 -0
  412. package/dist/runtime-profiles.js +103 -46
  413. package/dist/runtimes.js +2 -1
  414. package/dist/saida-segura.js +3 -2
  415. package/dist/security-scan/agil.js +355 -0
  416. package/dist/security-scan/cli.js +76 -0
  417. package/dist/security-scan/compare.js +149 -0
  418. package/dist/security-scan/config.js +93 -0
  419. package/dist/security-scan/detect.js +97 -0
  420. package/dist/security-scan/executor.js +188 -0
  421. package/dist/security-scan/guard.js +180 -0
  422. package/dist/security-scan/imagem-de-lint.js +96 -0
  423. package/dist/security-scan/normalize/actionlint.js +12 -0
  424. package/dist/security-scan/normalize/eslint.js +12 -0
  425. package/dist/security-scan/normalize/gitleaks.js +13 -0
  426. package/dist/security-scan/normalize/golangci-lint.js +13 -0
  427. package/dist/security-scan/normalize/govulncheck.js +36 -0
  428. package/dist/security-scan/normalize/index.js +25 -0
  429. package/dist/security-scan/normalize/npm-audit.js +30 -0
  430. package/dist/security-scan/normalize/osv-scanner.js +32 -0
  431. package/dist/security-scan/normalize/oxlint.js +51 -0
  432. package/dist/security-scan/normalize/pip-audit.js +16 -0
  433. package/dist/security-scan/normalize/ruff.js +12 -0
  434. package/dist/security-scan/normalize/semgrep.js +20 -0
  435. package/dist/security-scan/normalize/trivy.js +33 -0
  436. package/dist/security-scan/normalize/util.js +204 -0
  437. package/dist/security-scan/normalize/zizmor.js +19 -0
  438. package/dist/security-scan/report.js +156 -0
  439. package/dist/security-scan/run.js +448 -0
  440. package/dist/security-scan/tools.js +62 -0
  441. package/dist/security-scan/trabalhador.js +74 -0
  442. package/dist/security-scan/types.js +15 -0
  443. package/dist/session-events.js +26 -5
  444. package/dist/session-watcher-claude.js +81 -20
  445. package/dist/session-watcher.js +340 -42
  446. package/dist/sessoes-contas.js +10 -1
  447. package/dist/sessoes-inventario.js +1 -1
  448. package/dist/sessoes.js +25 -23
  449. package/dist/setup.js +59 -58
  450. package/dist/ship-publicar.js +971 -0
  451. package/dist/ship.js +243 -97
  452. package/dist/steal.js +77 -0
  453. package/dist/superficie.js +14 -11
  454. package/dist/thread-close.js +12 -11
  455. package/dist/thread.js +274 -100
  456. package/dist/tokens.js +15 -11
  457. package/dist/trabalho-thread.js +297 -0
  458. package/dist/transporte-do-canal.js +189 -0
  459. package/dist/types.js +12 -1
  460. package/dist/util.js +13 -3
  461. package/dist/varredura-acoes.js +507 -0
  462. package/dist/verify.js +608 -76
  463. package/dist/vida-da-thread.js +254 -0
  464. package/dist/worktree-local.js +167 -0
  465. package/dist/worktree.js +99 -83
  466. package/dist/yaml.js +27 -8
  467. package/eval/casos/check-quality.json +77 -0
  468. package/eval/casos/security-auditor.json +148 -0
  469. package/eval/casos/security-remediation.json +161 -0
  470. package/eval/fixtures/security-scan/README.md +8 -0
  471. package/eval/fixtures/security-scan/go/.github/workflows/ci.yml +12 -0
  472. package/eval/fixtures/security-scan/go/Dockerfile +4 -0
  473. package/eval/fixtures/security-scan/go/README.md +4 -0
  474. package/eval/fixtures/security-scan/go/config.go +4 -0
  475. package/eval/fixtures/security-scan/go/go.mod +5 -0
  476. package/eval/fixtures/security-scan/go/go.sum +2 -0
  477. package/eval/fixtures/security-scan/go/main.go +31 -0
  478. package/eval/fixtures/security-scan/js/.github/workflows/ci.yml +12 -0
  479. package/eval/fixtures/security-scan/js/Dockerfile +3 -0
  480. package/eval/fixtures/security-scan/js/README.md +4 -0
  481. package/eval/fixtures/security-scan/js/package-lock.json +844 -0
  482. package/eval/fixtures/security-scan/js/package.json +10 -0
  483. package/eval/fixtures/security-scan/js/src/config.js +4 -0
  484. package/eval/fixtures/security-scan/js/src/server.js +17 -0
  485. package/eval/fixtures/security-scan/js/src/util.ts +4 -0
  486. package/eval/fixtures/security-scan/js/tsconfig.json +4 -0
  487. package/eval/fixtures/security-scan/python/.github/workflows/ci.yml +12 -0
  488. package/eval/fixtures/security-scan/python/Dockerfile +3 -0
  489. package/eval/fixtures/security-scan/python/README.md +4 -0
  490. package/eval/fixtures/security-scan/python/app/__init__.py +0 -0
  491. package/eval/fixtures/security-scan/python/app/config.py +2 -0
  492. package/eval/fixtures/security-scan/python/app/main.py +19 -0
  493. package/eval/fixtures/security-scan/python/requirements.txt +1 -0
  494. package/package.json +9 -4
  495. package/references/security-checklist.md +3 -3
  496. package/schemas/code-artifact-graph.v1.schema.json +2 -1
  497. package/skills/README.md +1 -0
  498. package/skills/core/orkastery-bootstrap/SKILL.md +2 -2
  499. package/skills/phases/check-quality/SKILL.md +16 -0
  500. package/skills/phases/go-implementation/SKILL.md +6 -0
  501. package/skills/phases/security-remediation/SKILL.md +70 -0
  502. package/skills/reviewers/security-auditor/SKILL.md +25 -0
@@ -33,11 +33,12 @@ var __importStar = (this && this.__importStar) || (function () {
33
33
  };
34
34
  })();
35
35
  Object.defineProperty(exports, "__esModule", { value: true });
36
- exports.CORRECAO_DO_INDICE = exports.USO_DO_GRAFO = exports.AMOSTRA_SCHEMA = exports.STATUS_SCHEMA = void 0;
36
+ exports.CORRECAO_DO_INDICE = exports.TEXTOS_DO_GRAFO = exports.USO_DO_GRAFO = exports.AMOSTRA_SCHEMA = exports.REDACAO_DOS_ANALISADORES = exports.STATUS_SCHEMA = void 0;
37
37
  exports.descreverVersoes = descreverVersoes;
38
38
  exports.correcaoDosAnalisadores = correcaoDosAnalisadores;
39
39
  exports.checarAnalisadoresDoGrafo = checarAnalisadoresDoGrafo;
40
40
  exports.lerPedido = lerPedido;
41
+ exports.situacaoNaArvore = situacaoNaArvore;
41
42
  exports.executarGrafo = executarGrafo;
42
43
  /**
43
44
  * RM-031 KG3 (D7, D8): `ork grafo`, o CLI do indice e da consulta do grafo de codigo.
@@ -78,17 +79,21 @@ const RECUSA_DOS_ANALISADORES = 'grafo.parser.indisponivel';
78
79
  * de `MODULOS_DO_EXTRATOR`, para a redacao nao entrar na chave do indice; a versao vem de quem chama
79
80
  * (o `index.ts`), porque o CLI do grafo so importa a propria familia (fronteira do KG3).
80
81
  */
81
- function correcaoDosAnalisadores(motivo, versao) {
82
- if (/ERR_REQUIRE_ESM/.test(motivo)) {
83
- return `o micromark e so ESM, e este Node (${process.version}) nao o carrega por require: use Node 20.19, 22.12 ou mais novo, ` +
84
- 'sem a opcao --no-experimental-require-module (na linha de comando ou no NODE_OPTIONS)';
85
- }
82
+ function correcaoDosAnalisadores(motivo, versao, redacao = exports.REDACAO_DOS_ANALISADORES) {
83
+ if (/ERR_REQUIRE_ESM/.test(motivo))
84
+ return redacao.soEsm(process.version);
86
85
  // Sem a versao do pacote (`0.0.0-desconhecida` quando o package.json dele nao e achado), o comando
87
86
  // sai sem `@<versao>` e o npm instala a ultima publicada.
88
87
  const fixada = versao && /^\d+\.\d+\.\d+/.test(versao) && !versao.startsWith('0.0.0') ? `@${versao}` : '';
89
- return `reinstale o ork global, que traz os analisadores como dependencias: npm install -g @orkastery/cli${fixada}` +
90
- ' (instalado dentro de um projeto ou pelo npx, o npm deixa os analisadores fora do pacote do ork, e o grafo os recusa)';
88
+ return redacao.reinstale(fixada);
91
89
  }
90
+ exports.REDACAO_DOS_ANALISADORES = {
91
+ recusa: (motivo) => `${motivo}: o ork grafo indexar recusa nesta instalacao, e sem o indice as consultas e as tools ork_grafo_* tambem`,
92
+ soEsm: (versaoDoNode) => `o micromark e so ESM, e este Node (${versaoDoNode}) nao o carrega por require: use Node 20.19, 22.12 ou mais novo, ` +
93
+ 'sem a opcao --no-experimental-require-module (na linha de comando ou no NODE_OPTIONS)',
94
+ reinstale: (fixada) => `reinstale o ork global, que traz os analisadores como dependencias: npm install -g @orkastery/cli${fixada}` +
95
+ ' (instalado dentro de um projeto ou pelo npx, o npm deixa os analisadores fora do pacote do ork, e o grafo os recusa)',
96
+ };
92
97
  /**
93
98
  * RM-031 (pacote do npm): o check "analisadores do grafo" do `ork doctor`. Carrega o que o
94
99
  * `ork grafo indexar` carrega (`carregarAnalisadores`), entao diz o que o indexar faria, inclusive no
@@ -96,7 +101,7 @@ function correcaoDosAnalisadores(motivo, versao) {
96
101
  * fase. Fora da familia do grafo so o `index.ts` e o worker do MCP a abrem (fronteira do KG1), entao o
97
102
  * `index.ts` passa este check ao doctor, que nao importa o grafo.
98
103
  */
99
- function checarAnalisadoresDoGrafo(versao, carregar = intelligence_graph_parsers_1.carregarAnalisadores, versoes = intelligence_graph_parsers_1.versoesDosAnalisadores) {
104
+ function checarAnalisadoresDoGrafo(versao, carregar = intelligence_graph_parsers_1.carregarAnalisadores, versoes = intelligence_graph_parsers_1.versoesDosAnalisadores, redacao = exports.REDACAO_DOS_ANALISADORES) {
100
105
  const nome = 'analisadores do grafo';
101
106
  try {
102
107
  carregar();
@@ -104,9 +109,7 @@ function checarAnalisadoresDoGrafo(versao, carregar = intelligence_graph_parsers
104
109
  }
105
110
  catch (e) {
106
111
  const motivo = e.message;
107
- return { nome, nivel: 'warn',
108
- detalhe: `${motivo}: o ork grafo indexar recusa nesta instalacao, e sem o indice as consultas e as tools ork_grafo_* tambem`,
109
- correcao: correcaoDosAnalisadores(motivo, versao) };
112
+ return { nome, nivel: 'warn', detalhe: redacao.recusa(motivo), correcao: correcaoDosAnalisadores(motivo, versao, redacao) };
110
113
  }
111
114
  }
112
115
  /** O mesmo schema da amostra do KG2: as amostras auditadas continuam validas. */
@@ -122,6 +125,62 @@ exports.USO_DO_GRAFO = [
122
125
  ' ork grafo amostra [--por-estrato N] | ork grafo amostra --conferir ARQ [--json]',
123
126
  ' ork grafo limpar [--tudo] [--json]',
124
127
  ].join('\n');
128
+ exports.TEXTOS_DO_GRAFO = {
129
+ uso: exports.USO_DO_GRAFO.split('\n'),
130
+ erroUso: (motivo) => `grafo.uso: ${motivo}`,
131
+ motivos: {
132
+ semSub: 'falta o subcomando', desconhecido: (sub) => `subcomando desconhecido: ${sub}`,
133
+ repetida: (nome) => `--${nome} repetida`, semValor: (nome) => `--${nome} nao leva valor`,
134
+ exigeValor: (nome) => `--${nome} exige valor`, opcao: (sub, valor) => `opcao desconhecida para ${sub}: ${valor}`,
135
+ argumentos: (sub, esperados, recebidos) => `${sub} pede ${esperados} argumento(s), veio ${recebidos}`,
136
+ inteiro: (nome) => `--${nome} precisa ser inteiro`, tipo: (tipo, lista) => `--tipo desconhecido: ${tipo} (use ${lista})`,
137
+ sentido: (valor) => `--sentido desconhecido: ${valor}`, tetoJson: '--teto-bytes exige --json', tetoMin: '--teto-bytes precisa ser ao menos 1',
138
+ amostraExclusiva: '--conferir e --por-estrato nao combinam', estratoMin: '--por-estrato precisa ser ao menos 1',
139
+ },
140
+ indexar: {
141
+ titulo: (repositorio, estado) => `indice do grafo de ${repositorio}: ${estado}`,
142
+ // O rotulo ocupa 13 colunas antes do valor, como na base: 12 do nome e um espaco.
143
+ campo: (nome, valor) => ` ${nome.padEnd(12)} ${valor}`,
144
+ campos: { revisao: 'revisao', chave: 'chave', snapshot: 'snapshot', digest: 'digest', conferencia: 'conferencia',
145
+ nos: 'nos', arestas: 'arestas', lugar: 'lugar', motivo: 'motivo', tempo: 'tempo' },
146
+ conferencia: (fontes, evidencias) => `conferirFontes verificada: ${fontes} fontes e ${evidencias} evidencias contra os bytes`,
147
+ determinismo: (ordem, digest, relatorio, unidades, igual) => ` determinismo ${ordem}: digest ${digest}, relatorio ${relatorio}, unidades ${unidades}, ${igual ? 'igual' : 'DIFERENTE'}`,
148
+ incremental: (base, igual) => ` incremental a partir do indice de ${base}: ${igual ? 'igual a completa nos quatro arquivos' : 'DIFERENTE'}`,
149
+ naoConferido: (motivo) => ` incremental nao conferido: ${motivo}`,
150
+ aprovado: 'aprovado',
151
+ semBase: 'sem base',
152
+ },
153
+ status: {
154
+ titulo: (head, arvore) => `grafo: HEAD ${head}, arvore ${arvore}`,
155
+ indice: (chave, estado) => ` indice do HEAD ${chave} ${estado}`,
156
+ ausente: '(ausente: rode ork grafo indexar)',
157
+ semAnalisadores: '(sem os analisadores nesta instalacao, nem a consulta nem o indexar rodam)',
158
+ semChave: '(sem a chave do indice: o erro esta na linha de baixo)',
159
+ analisadores: (versoes) => ` analisadores ${versoes}`,
160
+ correcao: (correcao) => ` correcao ${correcao}`,
161
+ pasta: (dir, indices, tamanho) => ` pasta ${dir} (${indices} indice(s), ${tamanho})`,
162
+ semCommit: 'sem commit', indisponivel: 'indisponivel', naoCriada: 'ainda nao criada',
163
+ sobras: (sobras) => ` sobras ${sobras}`,
164
+ },
165
+ contexto: {
166
+ titulo: (thread, revisao) => `Contexto ${thread} @ ${revisao}`,
167
+ resumo: (sementes, total, arestas, ligacoes, bytes) => ` ${sementes}/${total} sementes, ${arestas}/${ligacoes} ligacoes agregadas; ${bytes} bytes JSON`,
168
+ tamanho: (bytes) => ` tamanho dos arquivos no pacote (nao descoberta): ${bytes} bytes (revisao indexada); tokens: unavailable`,
169
+ diff: (diff) => ` diff: ${diff}`,
170
+ mudadas: (n) => ` ligacoes com fonte modificada na arvore: ${n}`,
171
+ final: (truncado, arvore) => ` truncado: ${truncado}; arvore: ${arvore}; use --json para nos e evidencias`,
172
+ },
173
+ amostra: {
174
+ titulo: (arestas, estratos, revisao) => `amostra: ${arestas} arestas em ${estratos} estratos, auditada na revisao ${revisao}`,
175
+ vereditos: (vereditos) => ` vereditos ${vereditos}`,
176
+ conferidas: (ok, total) => ` conferidas contra o indice do HEAD: ${ok} de ${total}`,
177
+ falha: (falha) => `FALHA ${falha}`,
178
+ reprovado: (n) => `reprovado: ${n} falha(s)`,
179
+ aprovado: 'aprovado',
180
+ },
181
+ limpar: (removidos, tamanho) => `grafo limpar: ${removidos} removido(s), ${tamanho}`,
182
+ consulta: intelligence_graph_query_1.TEXTOS_DA_CONSULTA,
183
+ };
125
184
  /** KG5 (D5): a correcao das recusas de indice que a proxima indexacao resolve. */
126
185
  exports.CORRECAO_DO_INDICE = 'ork grafo indexar';
127
186
  /** KG5 (D5): o estado do indice do HEAD que cada recusa declara no JSON, ao lado da correcao. */
@@ -131,6 +190,7 @@ const ESTADO_DO_INDICE = Object.freeze({
131
190
  'grafo.indice.outro-extrator': 'outro-extrator',
132
191
  'grafo.indice.corrompido': 'corrompido',
133
192
  });
193
+ const textosDe = (ctx) => ctx.textos ?? exports.TEXTOS_DO_GRAFO;
134
194
  const SUBCOMANDOS = Object.freeze({
135
195
  indexar: { posicionais: 0, bandeiras: ['verificar', 'forcar', 'json'], valores: [] },
136
196
  status: { posicionais: 0, bandeiras: ['json'], valores: [] },
@@ -142,16 +202,16 @@ const SUBCOMANDOS = Object.freeze({
142
202
  amostra: { posicionais: 0, bandeiras: ['json'], valores: ['por-estrato', 'conferir'] },
143
203
  limpar: { posicionais: 0, bandeiras: ['tudo', 'json'], valores: [] },
144
204
  });
145
- function uso(motivo) {
146
- throw new Error(`grafo.uso: ${motivo}\n${exports.USO_DO_GRAFO}`);
205
+ function uso(motivo, t) {
206
+ throw new Error(`${t.erroUso(motivo)}\n${t.uso.join('\n')}`);
147
207
  }
148
- function lerPedido(argv) {
208
+ function lerPedido(argv, t = exports.TEXTOS_DO_GRAFO) {
149
209
  const [sub, ...resto] = argv;
150
210
  if (!sub)
151
- uso('falta o subcomando');
211
+ uso(t.motivos.semSub, t);
152
212
  const esp = SUBCOMANDOS[sub];
153
213
  if (!Object.prototype.hasOwnProperty.call(SUBCOMANDOS, sub) || !esp)
154
- uso(`subcomando desconhecido: ${sub}`);
214
+ uso(t.motivos.desconhecido(sub), t);
155
215
  const posicionais = [], bandeiras = new Set(), valores = new Map();
156
216
  for (let i = 0; i < resto.length; i++) {
157
217
  const a = resto[i];
@@ -162,59 +222,59 @@ function lerPedido(argv) {
162
222
  const igual = a.indexOf('=');
163
223
  const nome = igual > 0 ? a.slice(2, igual) : a.slice(2);
164
224
  if (bandeiras.has(nome) || valores.has(nome))
165
- uso(`--${nome} repetida`);
225
+ uso(t.motivos.repetida(nome), t);
166
226
  if (esp.bandeiras.includes(nome)) {
167
227
  if (igual > 0)
168
- uso(`--${nome} nao leva valor`);
228
+ uso(t.motivos.semValor(nome), t);
169
229
  bandeiras.add(nome);
170
230
  }
171
231
  else if (esp.valores.includes(nome)) {
172
232
  const valor = igual > 0 ? a.slice(igual + 1) : resto[++i];
173
233
  if (valor === undefined || valor === '' || (igual < 0 && valor.startsWith('--')))
174
- uso(`--${nome} exige valor`);
234
+ uso(t.motivos.exigeValor(nome), t);
175
235
  valores.set(nome, valor);
176
236
  }
177
237
  else {
178
- uso(`opcao desconhecida para ${sub}: ${a}`);
238
+ uso(t.motivos.opcao(sub, a), t);
179
239
  }
180
240
  }
181
241
  if (posicionais.length !== esp.posicionais)
182
- uso(`${sub} pede ${esp.posicionais} argumento(s), veio ${posicionais.length}`);
242
+ uso(t.motivos.argumentos(sub, esp.posicionais, posicionais.length), t);
183
243
  return { sub, posicionais, bandeiras, valores };
184
244
  }
185
- function inteiro(p, nome) {
245
+ function inteiro(p, nome, t) {
186
246
  const v = p.valores.get(nome);
187
247
  if (v === undefined)
188
248
  return undefined;
189
249
  if (!/^[0-9]{1,6}$/.test(v))
190
- uso(`--${nome} precisa ser inteiro`);
250
+ uso(t.motivos.inteiro(nome), t);
191
251
  return Number(v);
192
252
  }
193
- function tipos(p) {
253
+ function tipos(p, t) {
194
254
  const v = p.valores.get('tipo');
195
255
  if (v === undefined)
196
256
  return undefined;
197
257
  const lista = v.split(',');
198
- for (const t of lista)
199
- if (!intelligence_graph_contract_1.TIPOS_DE_ARESTA.includes(t))
200
- uso(`--tipo desconhecido: ${t} (use ${intelligence_graph_contract_1.TIPOS_DE_ARESTA.join(',')})`);
258
+ for (const x of lista)
259
+ if (!intelligence_graph_contract_1.TIPOS_DE_ARESTA.includes(x))
260
+ uso(t.motivos.tipo(x, intelligence_graph_contract_1.TIPOS_DE_ARESTA.join(',')), t);
201
261
  return lista;
202
262
  }
203
- function sentido(p) {
263
+ function sentido(p, t) {
204
264
  const v = p.valores.get('sentido');
205
265
  if (v !== undefined && !['entrada', 'saida', 'ambos'].includes(v))
206
- uso(`--sentido desconhecido: ${v}`);
266
+ uso(t.motivos.sentido(v), t);
207
267
  return v;
208
268
  }
209
269
  /** KG5 (D4): o teto vale para o JSON, que e o que vai ao contexto de quem consulta. */
210
- function tetoDeBytes(p) {
211
- const teto = inteiro(p, 'teto-bytes');
270
+ function tetoDeBytes(p, t) {
271
+ const teto = inteiro(p, 'teto-bytes', t);
212
272
  if (teto === undefined)
213
273
  return undefined;
214
274
  if (!p.bandeiras.has('json'))
215
- uso('--teto-bytes exige --json');
275
+ uso(t.motivos.tetoJson, t);
216
276
  if (teto < 1)
217
- uso('--teto-bytes precisa ser ao menos 1');
277
+ uso(t.motivos.tetoMin, t);
218
278
  return teto;
219
279
  }
220
280
  const mb = (bytes) => `${(bytes / 1024 / 1024).toFixed(1)} MB`;
@@ -247,30 +307,27 @@ function indexar(ctx, p) {
247
307
  return 0;
248
308
  }
249
309
  const m = r.manifesto;
310
+ const mi = textosDe(ctx).indexar;
250
311
  const linhas = [
251
- `indice do grafo de ${m.repository_id}: ${r.estado}`,
252
- ` revisao ${m.revision}`,
253
- ` chave ${r.chave}`,
254
- ` snapshot ${m.snapshot_id}`,
255
- ` digest ${m.graph_digest}`,
256
- ` conferencia conferirFontes verificada: ${m.conferencia.fontes} fontes e ${m.conferencia.evidencias} evidencias contra os bytes`,
257
- ` nos ${contagem(m.contagens.nos)}`,
258
- ` arestas ${contagem(m.contagens.arestas)}`,
259
- ` lugar ${r.dir} (${mb(m.graph_bytes + m.report_bytes + m.units_bytes)})`,
312
+ mi.titulo(m.repository_id, r.estado), mi.campo(mi.campos.revisao, m.revision), mi.campo(mi.campos.chave, r.chave),
313
+ mi.campo(mi.campos.snapshot, m.snapshot_id), mi.campo(mi.campos.digest, m.graph_digest),
314
+ mi.campo(mi.campos.conferencia, mi.conferencia(m.conferencia.fontes, m.conferencia.evidencias)),
315
+ mi.campo(mi.campos.nos, contagem(m.contagens.nos)), mi.campo(mi.campos.arestas, contagem(m.contagens.arestas)),
316
+ mi.campo(mi.campos.lugar, `${r.dir} (${mb(m.graph_bytes + m.report_bytes + m.units_bytes)})`),
260
317
  ...linhasDaExtracao(r),
261
318
  ];
262
319
  if (r.motivo)
263
- linhas.push(` motivo ${r.motivo}`);
320
+ linhas.push(mi.campo(mi.campos.motivo, r.motivo));
264
321
  for (const d of r.determinismo ?? []) {
265
- linhas.push(` determinismo ${d.ordem}: digest ${d.digest.slice(0, 16)}, relatorio ${d.relatorio.slice(0, 16)}, unidades ${d.unidades.slice(0, 16)}, ${d.igual ? 'igual' : 'DIFERENTE'}`);
322
+ linhas.push(mi.determinismo(d.ordem, d.digest.slice(0, 16), d.relatorio.slice(0, 16), d.unidades.slice(0, 16), d.igual));
266
323
  }
267
324
  if (r.incremental)
268
- linhas.push(` incremental a partir do indice de ${r.incremental.base.slice(0, 12)}: ${r.incremental.igual ? 'igual a completa nos quatro arquivos' : 'DIFERENTE'}`);
325
+ linhas.push(mi.incremental(r.incremental.base.slice(0, 12), r.incremental.igual));
269
326
  else if (r.determinismo)
270
- linhas.push(` incremental nao conferido: ${r.motivo_completo ?? 'sem base'}`);
271
- linhas.push(` tempo ${r.ms} ms`);
327
+ linhas.push(mi.naoConferido(r.motivo_completo ?? mi.semBase));
328
+ linhas.push(mi.campo(mi.campos.tempo, `${r.ms} ms`));
272
329
  if (r.determinismo)
273
- linhas.push('aprovado');
330
+ linhas.push(mi.aprovado);
274
331
  ctx.escrever(linhas.join('\n'));
275
332
  return 0;
276
333
  }
@@ -301,21 +358,22 @@ function status(ctx, p) {
301
358
  ctx.escrever(JSON.stringify(r, null, 2));
302
359
  return 0;
303
360
  }
361
+ const ms = textosDe(ctx).status;
304
362
  const linhas = [
305
- `grafo: HEAD ${arvore.head ? arvore.head.slice(0, 12) : 'sem commit'}, arvore ${r.arvore}`,
306
- ` indice do HEAD ${chave ?? 'indisponivel'} ${r.indice_do_head === 'ausente' ? '(ausente: rode ork grafo indexar)'
363
+ ms.titulo(arvore.head ? arvore.head.slice(0, 12) : ms.semCommit, r.arvore),
364
+ ms.indice(chave ?? ms.indisponivel, r.indice_do_head === 'ausente' ? ms.ausente
307
365
  : r.indice_do_head === 'indisponivel'
308
- ? (correcao ? '(sem os analisadores nesta instalacao, nem a consulta nem o indexar rodam)' : '(sem a chave do indice: o erro esta na linha de baixo)')
309
- : `(${r.indice_do_head})`}`,
310
- ` analisadores ${erro ?? descreverVersoes(analisadores)}`,
311
- ...(correcao ? [` correcao ${correcao}`] : []),
312
- ` pasta ${estado.dir ?? 'ainda nao criada'} (${estado.indices.length} indice(s), ${mb(estado.bytes)})`,
366
+ ? (correcao ? ms.semAnalisadores : ms.semChave)
367
+ : `(${r.indice_do_head})`),
368
+ ms.analisadores(erro ?? descreverVersoes(analisadores)),
369
+ ...(correcao ? [ms.correcao(correcao)] : []),
370
+ ms.pasta(estado.dir ?? ms.naoCriada, estado.indices.length, mb(estado.bytes)),
313
371
  ];
314
372
  for (const i of estado.indices) {
315
373
  linhas.push(` ${i.chave.slice(0, 20)} ${i.revision ? i.revision.slice(0, 12) : '?'} ${i.repository_id ?? '?'} ${mb(i.bytes)} ${i.problema ?? 'ok'}`);
316
374
  }
317
375
  if (estado.sobras.length)
318
- linhas.push(` sobras ${estado.sobras.join(', ')}`);
376
+ linhas.push(ms.sobras(estado.sobras.join(', ')));
319
377
  ctx.escrever(linhas.join('\n'));
320
378
  return 0;
321
379
  }
@@ -366,7 +424,10 @@ function semIndiceDoHead(ctx, original) {
366
424
  }
367
425
  throw original;
368
426
  }
369
- /** O indice do HEAD pronto para consulta, com a concessao local e o cabecalho; `grafo` ja vem filtrado por ela. */
427
+ /**
428
+ * O indice do HEAD pronto para consulta, com a concessao local e o cabecalho; `grafo` ja vem filtrado por ela.
429
+ * KG5 fatia 5 (D3): `situacao` so le a arvore quando o cabecalho diz `modificada`; limpa, tudo vale `igual`.
430
+ */
370
431
  function consultavel(ctx) {
371
432
  let doHead;
372
433
  try {
@@ -385,10 +446,11 @@ function consultavel(ctx) {
385
446
  arvore: arvore.motivo === null ? 'limpa' : 'modificada',
386
447
  extratores: grafo.snapshot.extractors.map((e) => ({ extractor_id: e.extractor_id, extractor_version: e.extractor_version })),
387
448
  };
388
- return { g: (0, intelligence_graph_query_1.prepararConsulta)(grafo, concessao), cabecalho, grafo, raiz: arvore.raiz };
449
+ const situacao = cabecalho.arvore === 'limpa' ? intelligence_graph_query_1.TUDO_IGUAL : situacaoNaArvore(arvore.raiz, grafo.snapshot.source_manifest);
450
+ return { g: (0, intelligence_graph_query_1.prepararConsulta)(grafo, concessao), cabecalho, grafo, raiz: arvore.raiz, situacao };
389
451
  }
390
452
  function responder(ctx, p, r) {
391
- ctx.escrever(p.bandeiras.has('json') ? (0, intelligence_graph_query_1.jsonDaResposta)(r) : (0, intelligence_graph_query_1.textoDaResposta)(r));
453
+ ctx.escrever(p.bandeiras.has('json') ? (0, intelligence_graph_query_1.jsonDaResposta)(r) : (0, intelligence_graph_query_1.textoDaResposta)(r, textosDe(ctx).consulta));
392
454
  return 0;
393
455
  }
394
456
  /**
@@ -428,17 +490,18 @@ function respostaComTeto(perguntar, limite, teto) {
428
490
  }
429
491
  function consultar(ctx, p) {
430
492
  // As opcoes sao conferidas antes de carregar o indice: erro de uso nao custa a leitura do grafo.
431
- const [a, b] = p.posicionais;
432
- const profundidade = inteiro(p, 'profundidade'), limite = inteiro(p, 'limite'), s = sentido(p), t = tipos(p), teto = tetoDeBytes(p);
433
- const { g, cabecalho } = consultavel(ctx);
493
+ const [a, b] = p.posicionais, x = textosDe(ctx);
494
+ const profundidade = inteiro(p, 'profundidade', x), limite = inteiro(p, 'limite', x), s = sentido(p, x), t = tipos(p, x), teto = tetoDeBytes(p, x);
495
+ const { g, cabecalho, situacao } = consultavel(ctx);
496
+ // A busca binaria do teto pergunta de novo com outro limite; a situacao guarda o que ja leu da arvore.
434
497
  const perguntar = (lim) => {
435
498
  if (p.sub === 'vizinhos')
436
- return (0, intelligence_graph_query_1.vizinhos)(g, cabecalho, a, { profundidade, limite: lim, sentido: s, tipos: t });
499
+ return (0, intelligence_graph_query_1.vizinhos)(g, cabecalho, a, { profundidade, limite: lim, sentido: s, tipos: t }, situacao);
437
500
  if (p.sub === 'chamadores')
438
- return (0, intelligence_graph_query_1.chamadores)(g, cabecalho, a, { profundidade, limite: lim });
501
+ return (0, intelligence_graph_query_1.chamadores)(g, cabecalho, a, { profundidade, limite: lim }, situacao);
439
502
  if (p.sub === 'importadores')
440
- return (0, intelligence_graph_query_1.importadores)(g, cabecalho, a, { profundidade, limite: lim });
441
- return (0, intelligence_graph_query_1.caminho)(g, cabecalho, a, b, { sentido: s, tipos: t });
503
+ return (0, intelligence_graph_query_1.importadores)(g, cabecalho, a, { profundidade, limite: lim }, situacao);
504
+ return (0, intelligence_graph_query_1.caminho)(g, cabecalho, a, b, { sentido: s, tipos: t }, situacao);
442
505
  };
443
506
  if (teto === undefined)
444
507
  return responder(ctx, p, perguntar(limite));
@@ -446,25 +509,27 @@ function consultar(ctx, p) {
446
509
  return 0;
447
510
  }
448
511
  function contexto(ctx, p) {
449
- const teto = tetoDeBytes(p);
512
+ const teto = tetoDeBytes(p, textosDe(ctx));
450
513
  if (teto !== undefined && (teto < 4096 || teto > 65536))
451
514
  throw new intelligence_graph_query_1.ErroDeConsulta('grafo.contexto.teto-invalido', 'teto deve ser inteiro de 4096 a 65536 bytes');
452
515
  if (!ctx.contextoDaThread)
453
516
  throw new intelligence_graph_query_1.ErroDeConsulta('grafo.contexto.indisponivel', 'borda sem leitor da thread');
454
517
  const lido = ctx.contextoDaThread(p.posicionais[0]);
455
- const { grafo, cabecalho } = consultavel({ ...ctx, raiz: lido.raiz });
518
+ const { grafo, cabecalho, situacao } = consultavel({ ...ctx, raiz: lido.raiz });
456
519
  if (lido.head !== cabecalho.revision)
457
520
  throw new intelligence_graph_query_1.ErroDeConsulta('grafo.contexto.revisao-mudou', 'HEAD mudou durante a leitura; repita a consulta');
458
- const json = (0, intelligence_graph_contexto_1.pacoteDeContexto)(grafo, cabecalho, lido.entrada, teto);
521
+ const json = (0, intelligence_graph_contexto_1.pacoteDeContexto)(grafo, cabecalho, lido.entrada, teto, situacao);
459
522
  if (p.bandeiras.has('json'))
460
523
  ctx.escrever(json);
461
524
  else {
462
525
  const r = JSON.parse(json);
463
- ctx.escrever([`Contexto ${r.thread} @ ${r.indice.revision}`,
464
- ` ${r.sementes.length}/${r.total_sementes} sementes, ${r.arestas.length}/${r.total_ligacoes} ligacoes agregadas; ${r.medida.pacote_bytes} bytes JSON`,
465
- ` tamanho dos arquivos no pacote (nao descoberta): ${r.medida.leitura_crua_bytes} bytes (revisao indexada); tokens: unavailable`,
466
- ` diff: ${r.fontes.diff}`,
467
- ` truncado: ${r.truncado}; arvore: ${r.indice.arvore}; use --json para nos e evidencias`, json].join('\n'));
526
+ // KG5 fatia 5 (D9): o resumo conta as ligacoes cuja fonte mudou na arvore, como o JSON marca.
527
+ const mudadas = r.arestas.filter((a) => a.arvore === 'modificada').length;
528
+ const mc = textosDe(ctx).contexto;
529
+ ctx.escrever([mc.titulo(r.thread, r.indice.revision),
530
+ mc.resumo(r.sementes.length, r.total_sementes, r.arestas.length, r.total_ligacoes, r.medida.pacote_bytes),
531
+ mc.tamanho(r.medida.leitura_crua_bytes), mc.diff(r.fontes.diff), ...(mudadas ? [mc.mudadas(mudadas)] : []),
532
+ mc.final(r.truncado, r.indice.arvore), json].join('\n'));
468
533
  }
469
534
  return 0;
470
535
  }
@@ -507,6 +572,66 @@ function leitorDaArvore(raiz, grafo) {
507
572
  return bytes;
508
573
  };
509
574
  }
575
+ /**
576
+ * KG5 fatia 5 (D3, D6): a situacao de cada fonte do indice na arvore, pelos bytes. So caminho do manifesto;
577
+ * sem seguir link, nem no ultimo nome nem numa pasta do caminho: o caminho real tem de ser o proprio caminho
578
+ * indexado dentro da raiz (CHECK rodada 1, A1). So arquivo regular; tamanho diferente do indexado e
579
+ * `modificada` sem ler, e o sha256 dos bytes decide o resto, lidos ate o tamanho indexado mais um. O arquivo
580
+ * aberto tem de ser o mesmo do `lstat` (dispositivo e inode, CHECK rodada 1, S3): troca entre a conferencia e
581
+ * a abertura vira `ausente`; duas trocas no intervalo ainda passam, e revelariam so se os bytes sao os
582
+ * indexados. Qualquer falha e `ausente`: nao ha arquivo regular legivel no caminho. Cada caminho e lido uma
583
+ * vez, sob demanda, e nada e escrito.
584
+ */
585
+ function situacaoNaArvore(raiz, manifesto) {
586
+ const porCaminho = new Map(manifesto.map((m) => [m.path, m]));
587
+ const vistas = new Map();
588
+ let raizReal = null;
589
+ const ler = (p) => {
590
+ const m = porCaminho.get(p);
591
+ if (!m)
592
+ return 'ausente';
593
+ const absoluto = path.join(raiz, p);
594
+ try {
595
+ raizReal ??= fs.realpathSync(raiz);
596
+ const st = fs.lstatSync(absoluto, { throwIfNoEntry: false });
597
+ if (!st || !st.isFile())
598
+ return 'ausente';
599
+ // CHECK rodada 2 (R2-S1): caminho de manifesto adulterado com `..` coincidiria com o real fora da raiz.
600
+ const real = fs.realpathSync(absoluto);
601
+ if (real !== path.join(raizReal, p) || !real.startsWith(raizReal + path.sep))
602
+ return 'ausente';
603
+ if (st.size !== m.size_bytes)
604
+ return 'modificada';
605
+ const fd = fs.openSync(absoluto, fs.constants.O_RDONLY | fs.constants.O_NOFOLLOW | fs.constants.O_NONBLOCK);
606
+ try {
607
+ const aberto = fs.fstatSync(fd);
608
+ if (!aberto.isFile() || aberto.dev !== st.dev || aberto.ino !== st.ino)
609
+ return 'ausente';
610
+ if (aberto.size !== m.size_bytes)
611
+ return 'modificada';
612
+ const bytes = Buffer.alloc(m.size_bytes + 1);
613
+ let lidos = 0;
614
+ for (let n = 1; n > 0 && lidos < bytes.length; lidos += n)
615
+ n = fs.readSync(fd, bytes, lidos, bytes.length - lidos, null);
616
+ return lidos === m.size_bytes && sha256(bytes.subarray(0, lidos)) === m.source_hash ? 'igual' : 'modificada';
617
+ }
618
+ finally {
619
+ fs.closeSync(fd);
620
+ }
621
+ }
622
+ catch {
623
+ return 'ausente';
624
+ }
625
+ };
626
+ return (p) => {
627
+ const vista = vistas.get(p);
628
+ if (vista !== undefined)
629
+ return vista;
630
+ const s = ler(p);
631
+ vistas.set(p, s);
632
+ return s;
633
+ };
634
+ }
510
635
  const localizadorDe = (g) => new Map(g.nodes.map((n) => [n.node_id, { kind: n.kind, path: n.locator.path, fragment: n.locator.fragment }]));
511
636
  const rotulo = (l) => `${l.kind}:${l.path}${l.fragment === null ? '' : `#${l.fragment}`}`;
512
637
  const chaveDaAresta = (kind, de, para) => `${kind} ${rotulo(de)} -> ${rotulo(para)}`;
@@ -547,7 +672,7 @@ function amostrar(grafo, ler, porEstrato, digest) {
547
672
  };
548
673
  }
549
674
  /** Confere a amostra auditada contra o indice do HEAD: aresta, trecho pelo hash, veredito com nota. */
550
- function conferirAmostra(grafo, ler, arquivo) {
675
+ function conferirAmostra(grafo, ler, arquivo, ma) {
551
676
  const amostra = JSON.parse(fs.readFileSync(arquivo, 'utf8'));
552
677
  if (amostra.schema !== exports.AMOSTRA_SCHEMA || !Array.isArray(amostra.arestas))
553
678
  return { linhas: [], falhas: [`schema da amostra: ${amostra.schema}`] };
@@ -575,32 +700,32 @@ function conferirAmostra(grafo, ler, arquivo) {
575
700
  if (!bate)
576
701
  falhas.push(`${chave}: nenhuma evidencia com o trecho auditado`);
577
702
  }
578
- const linhas = [
579
- `amostra: ${amostra.arestas.length} arestas em ${estratos.size} estratos, auditada na revisao ${amostra.revision ?? amostra.revision_unavailable_reason}`,
580
- ` vereditos ${Object.entries(vereditos).sort(([x], [y]) => (0, intelligence_graph_contract_1.compararUtf8)(x, y)).map(([k, v]) => `${k}=${v}`).join(' ')}`,
581
- ` conferidas contra o indice do HEAD: ${amostra.arestas.length - falhas.length} de ${amostra.arestas.length}`,
582
- ];
703
+ const linhas = [ma.titulo(amostra.arestas.length, estratos.size, amostra.revision ?? amostra.revision_unavailable_reason),
704
+ ma.vereditos(Object.entries(vereditos).sort(([x], [y]) => (0, intelligence_graph_contract_1.compararUtf8)(x, y)).map(([k, v]) => `${k}=${v}`).join(' ')),
705
+ ma.conferidas(amostra.arestas.length - falhas.length, amostra.arestas.length)];
583
706
  return { linhas, falhas };
584
707
  }
585
708
  function amostra(ctx, p) {
709
+ const t = textosDe(ctx);
586
710
  if (p.valores.has('conferir') && p.valores.has('por-estrato'))
587
- uso('--conferir e --por-estrato nao combinam');
711
+ uso(t.motivos.amostraExclusiva, t);
588
712
  const { grafo, raiz, cabecalho } = consultavel(ctx);
589
713
  const ler = leitorDaArvore(raiz, grafo);
590
714
  const arquivo = p.valores.get('conferir');
591
715
  if (arquivo === undefined) {
592
- const n = inteiro(p, 'por-estrato') ?? 3;
716
+ const n = inteiro(p, 'por-estrato', t) ?? 3;
593
717
  if (n < 1)
594
- uso('--por-estrato precisa ser ao menos 1');
718
+ uso(t.motivos.estratoMin, t);
595
719
  ctx.escrever(JSON.stringify(amostrar(grafo, ler, n, cabecalho.graph_digest), null, 2));
596
720
  return 0;
597
721
  }
598
- const { linhas, falhas } = conferirAmostra(grafo, ler, arquivo);
722
+ const { linhas, falhas } = conferirAmostra(grafo, ler, arquivo, t.amostra);
599
723
  if (p.bandeiras.has('json')) {
600
724
  ctx.escrever(JSON.stringify({ schema: exports.AMOSTRA_SCHEMA, conferencia: linhas, falhas, aprovado: falhas.length === 0 }, null, 2));
601
725
  }
602
726
  else {
603
- ctx.escrever([...linhas, ...falhas.map((f) => `FALHA ${f}`), falhas.length ? `reprovado: ${falhas.length} falha(s)` : 'aprovado'].join('\n'));
727
+ const ma = t.amostra;
728
+ ctx.escrever([...linhas, ...falhas.map((f) => ma.falha(f)), falhas.length ? ma.reprovado(falhas.length) : ma.aprovado].join('\n'));
604
729
  }
605
730
  return falhas.length ? 1 : 0;
606
731
  }
@@ -617,7 +742,7 @@ function limpar(ctx, p) {
617
742
  if (p.bandeiras.has('json'))
618
743
  ctx.escrever(JSON.stringify({ schema: exports.STATUS_SCHEMA, manter, manter_revisoes: manterRevisoes, ...r }, null, 2));
619
744
  else
620
- ctx.escrever([`grafo limpar: ${r.removidos.length} removido(s), ${mb(r.bytes)}`, ...r.removidos.map((x) => ` ${x.nome} ${mb(x.bytes)}`)].join('\n'));
745
+ ctx.escrever([textosDe(ctx).limpar(r.removidos.length, mb(r.bytes)), ...r.removidos.map((x) => ` ${x.nome} ${mb(x.bytes)}`)].join('\n'));
621
746
  return 0;
622
747
  }
623
748
  /** KG5 (D4, D5): com `--teto-bytes` o erro tambem sai compacto; recusa de indice traz o estado e a correcao. */
@@ -638,7 +763,7 @@ function executarGrafo(argv, ctx) {
638
763
  const compacto = argv[0] === 'contexto' || argv.some((a) => a === '--teto-bytes' || a.startsWith('--teto-bytes='));
639
764
  let p;
640
765
  try {
641
- p = lerPedido(argv);
766
+ p = lerPedido(argv, textosDe(ctx));
642
767
  }
643
768
  catch (e) {
644
769
  // Com `--json` no argv, tambem o erro de uso sai como objeto, como os demais.