@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
@@ -3,7 +3,13 @@ Object.defineProperty(exports, "__esModule", { value: true });
3
3
  exports.CONTEXTO_FORA_DO_INDICE = exports.CONTEXTO_POR_ALVO = exports.CONTEXTO_TETO_PADRAO = exports.CONTEXTO_SCHEMA = void 0;
4
4
  exports.sementesDaThread = sementesDaThread;
5
5
  exports.pacoteDeContexto = pacoteDeContexto;
6
- /** KG5 fatia 3: composicao pura do contexto da thread. Sem E/S, relogio ou inferencia. */
6
+ /**
7
+ * KG5: composicao pura do contexto da thread. Sem E/S, relogio ou inferencia.
8
+ *
9
+ * KG5 fatia 5 (D5): quem chama passa a situacao das fontes na arvore (o CLI le os bytes); o grupo cuja
10
+ * origem ou alvo nao confere ganha `arvore: "modificada"`, e o que confere sai sem o campo. Sem a situacao,
11
+ * ou com a arvore limpa, o pacote e o de antes, byte a byte.
12
+ */
7
13
  const node_crypto_1 = require("node:crypto");
8
14
  const intelligence_graph_contract_1 = require("./intelligence-graph-contract");
9
15
  const intelligence_graph_query_1 = require("./intelligence-graph-query");
@@ -11,6 +17,7 @@ exports.CONTEXTO_SCHEMA = 'ork.thread-graph-context/v2';
11
17
  exports.CONTEXTO_TETO_PADRAO = 32768;
12
18
  exports.CONTEXTO_POR_ALVO = 8;
13
19
  exports.CONTEXTO_FORA_DO_INDICE = 3;
20
+ const LIMITE_REJEICOES_SEGUNDO_SALTO = 8;
14
21
  const hash = (texto) => (0, node_crypto_1.createHash)('sha256').update(texto).digest('hex');
15
22
  /** Caminho relativo do repositorio, nunca caminho de maquina, URL ou estado privado. */
16
23
  function caminhoPublico(bruto) {
@@ -63,8 +70,9 @@ function sementesDaThread(entrada, caminhosDoRepositorio = []) {
63
70
  return [...mapa].sort(([a], [b]) => (0, intelligence_graph_contract_1.compararUtf8)(a, b))
64
71
  .map(([arquivo, origens]) => ({ arquivo, origens: [...origens].sort(intelligence_graph_contract_1.compararUtf8) }));
65
72
  }
73
+ const compararTipo = (a, b) => Number(a === 'cites') - Number(b === 'cites') || (0, intelligence_graph_contract_1.compararUtf8)(a, b);
66
74
  /** O grafo recebido ja deve estar filtrado pela concessao de quem consulta. */
67
- function pacoteDeContexto(grafo, indice, entrada, tetoBytes = exports.CONTEXTO_TETO_PADRAO) {
75
+ function pacoteDeContexto(grafo, indice, entrada, tetoBytes = exports.CONTEXTO_TETO_PADRAO, situacao = intelligence_graph_query_1.TUDO_IGUAL) {
68
76
  if (!Number.isInteger(tetoBytes) || tetoBytes < 4096 || tetoBytes > 65536)
69
77
  throw new intelligence_graph_query_1.ErroDeConsulta('grafo.contexto.teto-invalido', 'teto deve ser inteiro de 4096 a 65536 bytes');
70
78
  const porId = new Map(grafo.nodes.map((n) => [n.node_id, n]));
@@ -86,6 +94,7 @@ function pacoteDeContexto(grafo, indice, entrada, tetoBytes = exports.CONTEXTO_T
86
94
  adj.get(de).add(para);
87
95
  adj.get(para).add(de);
88
96
  }
97
+ const vizinhos = new Set([...alvos].flatMap((p) => [...(adj.get(p) ?? [])]));
89
98
  const dist = new Map(diff.filter((p) => arquivos.has(p)).map((p) => [p, 0]));
90
99
  const fila = [...dist.keys()];
91
100
  for (let i = 0; i < fila.length; i++)
@@ -98,18 +107,24 @@ function pacoteDeContexto(grafo, indice, entrada, tetoBytes = exports.CONTEXTO_T
98
107
  const extratores = [...indice.extratores].sort((a, b) => (0, intelligence_graph_contract_1.compararUtf8)((0, intelligence_graph_contract_1.canonico)(a), (0, intelligence_graph_contract_1.canonico)(b)));
99
108
  const extratorIds = new Map(extratores.map((e, i) => [(0, intelligence_graph_contract_1.canonico)(e), i]));
100
109
  const grupos = new Map();
101
- let totalArestas = 0, estruturais = 0, evidenciasAuxiliares = 0;
110
+ let totalArestas = 0, arestasDiretas = 0, estruturais = 0, evidenciasAuxiliares = 0, auxiliaresDiretas = 0;
102
111
  for (const a of grafo.edges) {
103
112
  const de = porId.get(a.from), para = porId.get(a.to);
104
- if (!alvos.has(de.locator.path) && !alvos.has(para.locator.path))
113
+ const direto = alvos.has(de.locator.path) || alvos.has(para.locator.path);
114
+ if (!direto && (de.locator.path === para.locator.path
115
+ || (!vizinhos.has(de.locator.path) && !vizinhos.has(para.locator.path))))
105
116
  continue;
106
117
  totalArestas++;
118
+ if (direto)
119
+ arestasDiretas++;
107
120
  if ((a.kind === 'declares' || a.kind === 'contains') && de.locator.path === para.locator.path && alvos.has(de.locator.path)) {
108
121
  estruturais++;
109
122
  continue;
110
123
  }
111
124
  const proprias = a.evidence.filter((e) => e.path === de.locator.path);
112
125
  evidenciasAuxiliares += a.evidence.length - proprias.length;
126
+ if (direto)
127
+ auxiliaresDiretas += a.evidence.length - proprias.length;
113
128
  // Sem evidencia no arquivo de origem, a aresta fica em omitidos.arestas.
114
129
  if (!proprias.length)
115
130
  continue;
@@ -117,6 +132,7 @@ function pacoteDeContexto(grafo, indice, entrada, tetoBytes = exports.CONTEXTO_T
117
132
  const chave = (0, intelligence_graph_contract_1.canonico)([a.kind, destino, de.locator.path]);
118
133
  const grupo = grupos.get(chave) ?? { kind: a.kind, origem, destino, alvo: para.node_id, quantidade: 0,
119
134
  evidencias: new Map(), entreArquivos: de.locator.path !== para.locator.path,
135
+ salto: direto ? 1 : 2,
120
136
  distancia: Math.min(dist.get(de.locator.path) ?? Infinity, dist.get(para.locator.path) ?? Infinity) };
121
137
  grupo.quantidade++;
122
138
  for (const e of proprias) {
@@ -131,19 +147,19 @@ function pacoteDeContexto(grafo, indice, entrada, tetoBytes = exports.CONTEXTO_T
131
147
  grupos.set(chave, grupo);
132
148
  }
133
149
  // Entre arquivos > perto do diff > tipo > rotulos; empates independem da ordem do indice.
134
- const ordenados = [...grupos.values()].sort((a, b) => Number(b.entreArquivos) - Number(a.entreArquivos)
150
+ const ordenados = [...grupos.values()].sort((a, b) => a.salto - b.salto || Number(b.entreArquivos) - Number(a.entreArquivos)
135
151
  || (a.distancia === b.distancia ? 0 : a.distancia < b.distancia ? -1 : 1)
136
- || (0, intelligence_graph_contract_1.compararUtf8)(a.kind, b.kind) || (0, intelligence_graph_contract_1.compararUtf8)(a.destino, b.destino) || (0, intelligence_graph_contract_1.compararUtf8)(a.origem, b.origem));
152
+ || compararTipo(a.kind, b.kind) || (0, intelligence_graph_contract_1.compararUtf8)(a.destino, b.destino) || (0, intelligence_graph_contract_1.compararUtf8)(a.origem, b.origem));
137
153
  // Dentro da mesma prioridade, intercalar tipos impede calls de expulsar imports/references.
138
154
  const rodadas = new Map();
139
155
  const justos = ordenados.map((g) => {
140
- const chave = JSON.stringify([g.alvo, g.entreArquivos, g.distancia, g.kind]);
156
+ const chave = JSON.stringify([g.salto, g.alvo, g.entreArquivos, g.distancia, g.kind]);
141
157
  const rodada = rodadas.get(chave) ?? 0;
142
158
  rodadas.set(chave, rodada + 1);
143
159
  return { g, rodada };
144
- }).sort((a, b) => Number(b.g.entreArquivos) - Number(a.g.entreArquivos)
160
+ }).sort((a, b) => a.g.salto - b.g.salto || Number(b.g.entreArquivos) - Number(a.g.entreArquivos)
145
161
  || (a.g.distancia === b.g.distancia ? 0 : a.g.distancia < b.g.distancia ? -1 : 1)
146
- || a.rodada - b.rodada || (0, intelligence_graph_contract_1.compararUtf8)(a.g.kind, b.g.kind)
162
+ || a.rodada - b.rodada || compararTipo(a.g.kind, b.g.kind)
147
163
  || (0, intelligence_graph_contract_1.compararUtf8)(a.g.destino, b.g.destino) || (0, intelligence_graph_contract_1.compararUtf8)(a.g.origem, b.g.origem)).map(({ g }) => g);
148
164
  const normalizada = { ...entrada, diff, diffEstado: entrada.diffEstado ?? 'coletado-na-worktree',
149
165
  claims: [...entrada.claims].sort((a, b) => (0, intelligence_graph_contract_1.compararUtf8)((0, intelligence_graph_contract_1.canonico)(a), (0, intelligence_graph_contract_1.canonico)(b))) };
@@ -151,10 +167,14 @@ function pacoteDeContexto(grafo, indice, entrada, tetoBytes = exports.CONTEXTO_T
151
167
  indice: { ...indice, extratores },
152
168
  fontes: { goal: entrada.goal === null ? 'ausente' : hash(entrada.goal), plan: entrada.plan === null ? 'ausente' : hash(entrada.plan),
153
169
  diff: normalizada.diffEstado },
154
- consulta: { profundidade: 1, sentido: 'ambos', por_alvo: exports.CONTEXTO_POR_ALVO, fora_do_indice: exports.CONTEXTO_FORA_DO_INDICE },
170
+ consulta: { profundidade: 2, sentido: 'ambos', por_alvo: exports.CONTEXTO_POR_ALVO, fora_do_indice: exports.CONTEXTO_FORA_DO_INDICE },
155
171
  total_sementes: sementes.length, sementes_fora_do_indice: ausentes.length, total_arestas: totalArestas,
156
172
  total_ligacoes: ordenados.length, resumidas: { estruturais }, parcial: intelligence_graph_query_1.AVISO_DE_PARCIALIDADE };
157
173
  const selecionadas = [], ligacoes = [];
174
+ // D4 e D5: as evidencias do grupo estao no arquivo da origem; o alvo pesa como nas consultas por no.
175
+ const modificado = (a) => (a.modificada ??= situacao(a.origem.slice(5)) !== 'igual' || situacao(porId.get(a.alvo).locator.path) !== 'igual');
176
+ const totalDiretas = ordenados.filter((a) => a.salto === 1).length;
177
+ const totalSegundoSalto = ordenados.length - totalDiretas;
158
178
  const montar = () => {
159
179
  const caminhos = new Set(selecionadas.filter((s) => s.estado === 'indexado').map((s) => s.arquivo));
160
180
  const rotulos = new Set([...caminhos].map((p) => `file ${p}`));
@@ -166,11 +186,15 @@ function pacoteDeContexto(grafo, indice, entrada, tetoBytes = exports.CONTEXTO_T
166
186
  }
167
187
  const refs = new Map([...rotulos].sort(intelligence_graph_contract_1.compararUtf8).map((r, i) => [r, `n${i + 1}`]));
168
188
  const fontes = grafo.snapshot.source_manifest.filter((m) => caminhos.has(m.path)).sort((a, b) => (0, intelligence_graph_contract_1.compararUtf8)(a.path, b.path));
169
- const omitidos = { sementes: sementes.length - selecionadas.length, ligacoes: ordenados.length - ligacoes.length,
189
+ const diretas = ligacoes.filter((a) => a.salto === 1);
190
+ const omitidos = { sementes: sementes.length - selecionadas.length, ligacoes: totalDiretas - diretas.length,
191
+ segundo_salto: totalSegundoSalto - (ligacoes.length - diretas.length),
170
192
  arestas: totalArestas - estruturais - ligacoes.reduce((s, a) => s + a.quantidade, 0), evidencias_auxiliares: evidenciasAuxiliares };
171
- const cortado = omitidos.sementes > 0 || omitidos.ligacoes > 0 || omitidos.arestas > 0 || evidenciasAuxiliares > 0;
193
+ const diretasOmitidas = arestasDiretas - estruturais - diretas.reduce((s, a) => s + a.quantidade, 0);
194
+ const cortado = omitidos.sementes > 0 || omitidos.ligacoes > 0 || diretasOmitidas > 0 || auxiliaresDiretas > 0;
172
195
  const r = { ...fixo, sementes: selecionadas, nos: Object.fromEntries([...refs].map(([r, ref]) => [ref, r])),
173
196
  arestas: ligacoes.map((a) => ({ kind: a.kind, from: refs.get(a.origem), to: refs.get(a.destino), quantidade: a.quantidade,
197
+ ...(a.salto === 2 ? { salto: 2 } : {}), ...(modificado(a) ? { arvore: 'modificada' } : {}),
174
198
  evidencias: [...a.evidencias].sort(([a], [b]) => (0, intelligence_graph_contract_1.compararUtf8)(a, b)).map(([, e]) => e) })),
175
199
  truncado: cortado, omitidos, teto: { bytes: tetoBytes, cortado },
176
200
  medida: { pacote_bytes: 0, leitura_crua_bytes: fontes.reduce((s, f) => s + f.size_bytes, 0),
@@ -197,19 +221,34 @@ function pacoteDeContexto(grafo, indice, entrada, tetoBytes = exports.CONTEXTO_T
197
221
  for (const s of indexadas)
198
222
  tentarSemente(s);
199
223
  const porAlvo = new Map();
200
- for (const a of justos) {
224
+ const tentarLigacao = (a) => {
201
225
  if ((porAlvo.get(a.alvo) ?? 0) >= exports.CONTEXTO_POR_ALVO)
202
- continue;
226
+ return 'por-alvo';
203
227
  ligacoes.push(a);
204
228
  const texto = montar();
205
229
  if (Buffer.byteLength(texto) <= tetoBytes) {
206
230
  melhor = texto;
207
231
  porAlvo.set(a.alvo, (porAlvo.get(a.alvo) ?? 0) + 1);
232
+ return 'incluida';
208
233
  }
209
- else
210
- ligacoes.pop(); // Um hub grande nao impede uma ligacao menor e relevante de entrar.
211
- }
234
+ ligacoes.pop(); // Um hub grande nao impede uma ligacao menor e relevante de entrar.
235
+ return 'sem-espaco';
236
+ };
237
+ for (const a of justos)
238
+ if (a.salto === 1)
239
+ tentarLigacao(a);
212
240
  for (const s of ausentes.slice(0, exports.CONTEXTO_FORA_DO_INDICE))
213
241
  tentarSemente(s);
242
+ // Expande somente pontes que sobreviveram ao corte direto; a fronteira fica fixa nesta rodada.
243
+ const pontes = new Set(ligacoes.flatMap((a) => [a.origem.slice(5), porId.get(a.alvo).locator.path]));
244
+ let rejeicoes = 0;
245
+ for (const a of justos)
246
+ if (a.salto === 2 && (pontes.has(a.origem.slice(5)) || pontes.has(porId.get(a.alvo).locator.path))) {
247
+ const resultado = tentarLigacao(a);
248
+ if (resultado === 'incluida')
249
+ rejeicoes = 0;
250
+ else if (resultado === 'sem-espaco' && ++rejeicoes >= LIMITE_REJEICOES_SEGUNDO_SALTO)
251
+ break;
252
+ }
214
253
  return melhor;
215
254
  }
@@ -29,7 +29,7 @@ exports.GRAFO_LIMITES = Object.freeze({
29
29
  extratores: 32, diagnosticos: 100_000, caminho: 1024, fragmento: 512, paginas: 100_000,
30
30
  });
31
31
  exports.TIPOS_DE_NO = ['file', 'symbol', 'section', 'artifact'];
32
- exports.TIPOS_DE_ARESTA = ['contains', 'declares', 'imports', 'calls', 'references', 'derived_from'];
32
+ exports.TIPOS_DE_ARESTA = ['contains', 'declares', 'imports', 'calls', 'references', 'derived_from', 'cites'];
33
33
  /** D4: so metodo deterministico sustenta aresta. Embedding, similaridade e inferencia ficam fora. */
34
34
  exports.METODOS_DE_EXTRACAO = ['ast', 'structured', 'explicit-link', 'text-location'];
35
35
  exports.CLASSE_DE_CONFIANCA = 'EXTRACTED';
@@ -45,6 +45,7 @@ exports.MATRIZ_DE_ARESTAS = Object.freeze({
45
45
  imports: { file: ['file', 'symbol'], symbol: ['file', 'symbol'], section: nenhum, artifact: nenhum },
46
46
  calls: { file: nenhum, symbol: ['symbol'], section: nenhum, artifact: nenhum },
47
47
  references: { file: exports.TIPOS_DE_NO, symbol: exports.TIPOS_DE_NO, section: exports.TIPOS_DE_NO, artifact: exports.TIPOS_DE_NO },
48
+ cites: { file: ['file'], symbol: nenhum, section: ['file'], artifact: nenhum },
48
49
  derived_from: { file: nenhum, symbol: nenhum, section: nenhum, artifact: ['file', 'section', 'artifact'] },
49
50
  });
50
51
  const inteiro = zod_1.z.number().int().min(0).max(Number.MAX_SAFE_INTEGER);
@@ -2,6 +2,7 @@
2
2
  Object.defineProperty(exports, "__esModule", { value: true });
3
3
  exports.TETO_DE_LINHAS_DE_TABELA = exports.TOKENS_SEM_MENCAO = exports.CHAVES_DO_FRONTMATTER = exports.PADRAO_DE_ID = void 0;
4
4
  exports.slugDeTexto = slugDeTexto;
5
+ exports.caminhoDaCitacao = caminhoDaCitacao;
5
6
  exports.estruturarMarkdown = estruturarMarkdown;
6
7
  exports.extrairMarkdown = extrairMarkdown;
7
8
  exports.ligarMarkdown = ligarMarkdown;
@@ -191,9 +192,10 @@ function estruturar(fonte, aceitaFragmento, analisar, referencia) {
191
192
  comDelimitador = true;
192
193
  }
193
194
  if (linhasDeTabela > exports.TETO_DE_LINHAS_DE_TABELA) {
194
- return { fonte, secoes: [], links: [], textoDeMencao: [], frontmatter, frontmatterInvalido, tabelaGrande: true };
195
+ return { fonte, secoes: [], links: [], citacoes: [], textoDeMencao: [], frontmatter, frontmatterInvalido, tabelaGrande: true };
195
196
  }
196
197
  const secoes = [], links = [], semMencao = [];
198
+ const citacoes = [];
197
199
  const slug = contadorDeSlugs(), abertos = [];
198
200
  // B5: referencia de caractere pelo decodificador do micromark (as entidades do HTML5); a crua fica.
199
201
  const decodificada = (i, f) => referencia(corpo.slice(i + 1, f - 1)) ?? corpo.slice(i, f);
@@ -239,6 +241,10 @@ function estruturar(fonte, aceitaFragmento, analisar, referencia) {
239
241
  semMencao.push([e.inicio, e.fim]);
240
242
  }
241
243
  // Titulo, lido em paralelo: o texto dele junta dado, codigo, escape e entidade.
244
+ if (e.tipo === 'codeTextData' && !emExcesso)
245
+ citacoes.push({
246
+ destino: corpo.slice(e.inicio, e.fim), inicio: no(e.inicio), fim: no(e.fim),
247
+ });
242
248
  if (e.tipo === 'atxHeading' || e.tipo === 'setextHeading')
243
249
  titulo = { inicio: no(e.inicio), fim: no(e.fim), partes: [], noTexto: 0, foraDoTexto: 0, noCodigo: 0 };
244
250
  else if (titulo) {
@@ -304,7 +310,7 @@ function estruturar(fonte, aceitaFragmento, analisar, referencia) {
304
310
  }
305
311
  }
306
312
  const textoDeMencao = linhasDe(apagarTrechos(corpo, semMencao)).map((l) => ({ inicio: no(l.inicio), texto: l.texto }));
307
- return { fonte, secoes: secoes.sort((a, b) => a.inicio - b.inicio), links, textoDeMencao, frontmatter, frontmatterInvalido, tabelaGrande: false };
313
+ return { fonte, secoes: secoes.sort((a, b) => a.inicio - b.inicio), links, citacoes, textoDeMencao, frontmatter, frontmatterInvalido, tabelaGrande: false };
308
314
  }
309
315
  /** Caminho relativo a raiz a partir do arquivo do link; `null` se sair do repositorio. */
310
316
  function resolverCaminho(base, destino) {
@@ -323,6 +329,23 @@ function resolverCaminho(base, destino) {
323
329
  }
324
330
  return r.join('/');
325
331
  }
332
+ /** Citacao nao e resolucao de runtime: so caminho literal dentro do manifesto. */
333
+ function caminhoDaCitacao(base, literal, modulo = false) {
334
+ if (!literal || /[\s\\:#?%\u0000-\u001f\u007f]/u.test(literal) || literal.startsWith('/') || literal.startsWith('~'))
335
+ return null;
336
+ if (literal.split('/').some((p) => p === '.git' || p === '.orkastery'))
337
+ return null;
338
+ // Argumento sem prefixo de caminho e nome de pacote, nao candidato local.
339
+ if (modulo && !/^\.{1,2}\//.test(literal))
340
+ return null;
341
+ // Palavras e diretorios nao sao citacoes de arquivo. Modulos podem omitir extensao.
342
+ if (!modulo && (!literal.includes('/') || !/\.(?:[cm]?[jt]s|[jt]sx|json|md|markdown|ya?ml|toml|py|rs|go|c|h|css|html|svg|png|jpe?g|gif|webp|pdf|txt|sh|sql)$/i.test(literal)))
343
+ return null;
344
+ if (['', '.', '..'].includes(literal.split('/').at(-1)))
345
+ return null;
346
+ const caminho = literal.startsWith('./') || literal.startsWith('../') ? resolverCaminho(base, literal) : literal;
347
+ return caminho || null;
348
+ }
326
349
  const decodificar = (t) => {
327
350
  try {
328
351
  return decodeURIComponent(t);
@@ -339,7 +362,7 @@ function estruturarMarkdown(fonte, e) {
339
362
  mencoes.push({ inicio: l.inicio + m.index, id: m[0] });
340
363
  const d = s.frontmatter?.dados;
341
364
  return {
342
- path: fonte.path, secoes: s.secoes, links: s.links, mencoes,
365
+ path: fonte.path, secoes: s.secoes, links: s.links, citacoes: s.citacoes, mencoes,
343
366
  frontmatter: s.frontmatter && d
344
367
  ? { id: typeof d.id === 'string' ? d.id : null, tipo: typeof d.tipo === 'string' && d.tipo !== '', valores: s.frontmatter.valores }
345
368
  : null,
@@ -414,6 +437,13 @@ function ligarMarkdown(e) {
414
437
  };
415
438
  for (const s of estruturas) {
416
439
  const path = s.path, arquivo = { kind: 'file', path, fragment: null };
440
+ const citar = (alvo, k, metodo) => {
441
+ if (alvo === null || alvo === path || !arquivos.has(alvo))
442
+ return false;
443
+ aresta('cites', secaoEm(s, arquivo, k.inicio), { kind: 'file', path: alvo, fragment: null }, e.extratorMd, metodo, { path, inicio: k.inicio, fim: k.fim });
444
+ return true;
445
+ };
446
+ const linksReferenciados = [];
417
447
  for (const x of s.secoes) {
418
448
  if (x.slug === null) {
419
449
  lacuna('secao-recusada', path, x.inicio, null);
@@ -438,7 +468,15 @@ function ligarMarkdown(e) {
438
468
  lacuna('link-invalido', path, k.inicio, destino);
439
469
  continue;
440
470
  }
441
- const alvo = caminhoDecodificado === '' ? path : resolverCaminho(path, caminhoDecodificado);
471
+ const relativo = caminhoDecodificado === '' ? path : resolverCaminho(path, caminhoDecodificado);
472
+ // Links seguem o diretorio do documento; a citacao tambem admite caminho desde a raiz.
473
+ const literal = caminhoDaCitacao(path, caminhoDecodificado);
474
+ // Uma referencia ao arquivo ou a uma secao ja representa esta ocorrencia do link.
475
+ if (relativo === null || !arquivos.has(relativo)) {
476
+ if (citar(literal, k, 'explicit-link'))
477
+ linksReferenciados.push(k);
478
+ }
479
+ const alvo = relativo;
442
480
  if (alvo === null) {
443
481
  lacuna('link-fora-do-repositorio', path, k.inicio, destino);
444
482
  continue;
@@ -450,6 +488,7 @@ function ligarMarkdown(e) {
450
488
  const secoesDoAlvo = slugs.get(alvo);
451
489
  if (ancora && secoesDoAlvo?.has(ancora)) {
452
490
  aresta('references', origem, { kind: 'section', path: alvo, fragment: ancora }, e.extratorMd, 'explicit-link', t);
491
+ linksReferenciados.push(k);
453
492
  continue;
454
493
  }
455
494
  // P6: ancora que nao bate fica declarada; o link ainda prova a referencia ao arquivo.
@@ -458,6 +497,19 @@ function ligarMarkdown(e) {
458
497
  if (alvo === path)
459
498
  continue;
460
499
  aresta('references', origem, { kind: 'file', path: alvo, fragment: null }, e.extratorMd, 'explicit-link', t);
500
+ linksReferenciados.push(k);
501
+ }
502
+ // Codigo inline no rotulo pertence a mesma ocorrencia do link ja resolvido.
503
+ // Varredura por spans preserva citacoes independentes, inclusive na mesma linha.
504
+ linksReferenciados.sort((a, b) => a.inicio - b.inicio || b.fim - a.fim);
505
+ let link = 0;
506
+ for (const k of s.citacoes) {
507
+ while (link < linksReferenciados.length && linksReferenciados[link].fim <= k.inicio)
508
+ link++;
509
+ const l = linksReferenciados[link];
510
+ if (l && l.inicio <= k.inicio && k.fim <= l.fim)
511
+ continue;
512
+ citar(caminhoDaCitacao(path, k.destino), k, 'text-location');
461
513
  }
462
514
  const artefato = s.frontmatter && s.frontmatter.id !== null ? artefatos.get(s.frontmatter.id) : undefined;
463
515
  if (artefato && artefato.path === path && s.frontmatter) {
@@ -3,9 +3,26 @@ Object.defineProperty(exports, "__esModule", { value: true });
3
3
  exports.OPCOES_TS_DESCRITAS = void 0;
4
4
  exports.casaSonda = casaSonda;
5
5
  exports.extrairTypeScript = extrairTypeScript;
6
+ const intelligence_graph_extract_md_1 = require("./intelligence-graph-extract-md");
6
7
  /** Extensoes que o extrator TS le; as do `extensaoDe` do KG2. */
7
8
  const EXTENSOES_DO_PROGRAMA = ['.cjs', '.cts', '.js', '.jsx', '.mjs', '.mts', '.ts', '.tsx'];
8
9
  const DECLARACOES_TS = ['.d.ts', '.d.mts', '.d.cts'];
10
+ /** KG5: candidatos literais; dist -> src e uma convencao de citacao, nunca prova de import. */
11
+ function candidatosDaCitacao(base) {
12
+ const formas = (p) => {
13
+ const semJs = p.replace(/\.(?:[cm]?js|jsx)$/, '');
14
+ if (semJs !== p)
15
+ return [semJs + '.ts', semJs + '.tsx', semJs + '.mts', semJs + '.cts'];
16
+ if (/\.[^/]+$/.test(p))
17
+ return [];
18
+ return EXTENSOES_DO_PROGRAMA.flatMap((ext) => [p + ext, p + '/index' + ext]);
19
+ };
20
+ const grupos = [[base], formas(base)];
21
+ const fonte = base.replace(/(^|\/)dist\//, '$1src/');
22
+ if (fonte !== base)
23
+ grupos.push([fonte], formas(fonte));
24
+ return grupos;
25
+ }
9
26
  /** A base sem a extensao (o TypeScript troca `.js` por `.ts`, e `.d.ts` conta inteira). */
10
27
  function semExtensao(base) {
11
28
  const nome = base.slice(base.lastIndexOf('/') + 1);
@@ -283,12 +300,19 @@ function extrairTypeScript(e, ts) {
283
300
  /** Fonte TypeScript, que o compilador transforma; JavaScript roda como esta. */
284
301
  const compiladoEm = (arquivo) => !EXTENSOES_JS.includes(extensao(arquivo));
285
302
  /** Chaves de todos os imports dentro de um no. */
286
- function especificadoresEm(raiz) {
303
+ function especificadoresEm(raiz, literais) {
287
304
  const r = [], compilado = compiladoEm(raiz.getSourceFile().fileName);
288
305
  const coletar = (n) => {
289
306
  const chave = chaveDoImport(n, compilado);
290
- if (chave !== null)
307
+ if (chave !== null) {
291
308
  r.push(chave);
309
+ const esp = ts.isImportDeclaration(n) || ts.isExportDeclaration(n) ? n.moduleSpecifier
310
+ : ts.isImportEqualsDeclaration(n) && ts.isExternalModuleReference(n.moduleReference) ? n.moduleReference.expression
311
+ : ts.isImportTypeNode(n) && ts.isLiteralTypeNode(n.argument) ? n.argument.literal
312
+ : ts.isCallExpression(n) ? n.arguments[0] : undefined;
313
+ if (esp)
314
+ literais?.set(esp, chave);
315
+ }
292
316
  ts.forEachChild(n, coletar);
293
317
  };
294
318
  coletar(raiz);
@@ -597,13 +621,15 @@ function extrairTypeScript(e, ts) {
597
621
  const divergentesGlobais = new Set();
598
622
  // KG4 (D3): por fonte, os caminhos a que as referencias de modulo resolvem e as bases das relativas.
599
623
  const dependenciasDe = new Map(), sondasDe = new Map();
624
+ const citacoesDe = new Map();
600
625
  for (const fonte of e.fontes) {
601
626
  const sf = programa.getSourceFile(absoluto(fonte.path));
602
627
  if (!sf || sf.fileName !== absoluto(fonte.path))
603
628
  continue;
604
629
  const ext = extensao(fonte.path), mapa = new Map();
605
630
  const dependencias = new Set(), sondas = new Set();
606
- for (const chave of especificadoresEm(sf)) {
631
+ const literaisDeModulo = new Map();
632
+ for (const chave of especificadoresEm(sf, literaisDeModulo)) {
607
633
  if (mapa.has(chave))
608
634
  continue;
609
635
  const esp = especificadorDaChave(chave), doCompilador = resolver(esp, fonte.path);
@@ -632,6 +658,46 @@ function extrairTypeScript(e, ts) {
632
658
  if (divergente)
633
659
  divergentesGlobais.add(`${fonte.path}\u0000${chave}`);
634
660
  }
661
+ // Strings so em testes/scripts. Comentarios, interpolacoes e concatenacoes nao sao avaliados.
662
+ const citacoes = [];
663
+ if (/(?:^|\/)(?:tests?|__tests__|scripts?)\/|\.(?:test|spec)\.[cm]?[jt]sx?$/.test(fonte.path)) {
664
+ const citar = (literal, n, modulo = false) => {
665
+ const base = (0, intelligence_graph_extract_md_1.caminhoDaCitacao)(fonte.path, literal, modulo);
666
+ if (base === null)
667
+ return;
668
+ const grupos = candidatosDaCitacao(base);
669
+ // Inclui ausentes e diretorios: a troca para arquivo invalida a unidade incremental.
670
+ // So arquivos presentes podem virar alvo; diretorios conservam apenas a sonda.
671
+ for (const grupo of grupos)
672
+ for (const p of grupo)
673
+ sondas.add(p);
674
+ for (const grupo of grupos) {
675
+ const presentes = grupo.filter((p) => arquivos.has(p));
676
+ if (!presentes.length)
677
+ continue;
678
+ if (presentes.length === 1 && presentes[0] !== fonte.path) {
679
+ dependencias.add(presentes[0]);
680
+ citacoes.push({ alvo: presentes[0], trecho: { path: fonte.path, inicio: n.getStart(sf), fim: n.getEnd() } });
681
+ }
682
+ break; // Ambiguidade nao autoriza escolher uma fonte nem tentar outro grupo.
683
+ }
684
+ };
685
+ const literais = (n) => {
686
+ if (ts.isStringLiteral(n) || ts.isNoSubstitutionTemplateLiteral(n)) {
687
+ const chave = literaisDeModulo.get(n);
688
+ // O resolver de import ja provou esta ocorrencia; outra string igual ainda pode citar.
689
+ if (chave !== undefined && mapa.get(chave)?.alvo != null)
690
+ return;
691
+ citar(n.text, n, chave !== undefined);
692
+ // Codigo citado por fixture: so argumentos literais de require/import dentro da string.
693
+ for (const m of n.text.matchAll(/\b(?:require|import)\s*\(\s*(['"])([^'"\r\n]+)\1\s*\)/g))
694
+ citar(m[2], n, true);
695
+ }
696
+ ts.forEachChild(n, literais);
697
+ };
698
+ literais(sf);
699
+ }
700
+ citacoesDe.set(fonte.path, citacoes);
635
701
  // O que o TypeScript coleta e a varredura nao ve (tipo importado no JSDoc) tambem liga o checker a outro arquivo.
636
702
  for (const nome of nomesDeModulo(sf)) {
637
703
  sondar(baseDaSonda(fonte.path, nome), sondas);
@@ -739,6 +805,8 @@ function extrairTypeScript(e, ts) {
739
805
  const aresta = (kind, from, to, t) => {
740
806
  saida.arestas.push({ kind, from, to, extrator: e.extrator, metodo: 'ast', trecho: t });
741
807
  };
808
+ for (const c of citacoesDe.get(fonte.path) ?? [])
809
+ aresta('cites', arquivo, { kind: 'file', path: c.alvo, fragment: null }, c.trecho);
742
810
  const lacuna = (categoria, n, detalhe = null) => {
743
811
  saida.lacunas.push({ categoria, path: fonte.path, inicio: n ? n.getStart(sf) : null, detalhe });
744
812
  };