@orkastery/cli 0.5.6 → 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 (385) 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 +37 -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/ork-mensageiro/.claude-plugin/plugin.json +14 -0
  16. package/adapters/claude-code/mods/ork-mensageiro/hooks/caixa.ts +215 -0
  17. package/adapters/claude-code/mods/ork-mensageiro/hooks/hooks.json +3 -0
  18. package/adapters/claude-code/mods/ork-mensageiro/hooks/painel.tsx +165 -0
  19. package/adapters/claude-code/mods/ork-mensageiro/hooks/recepcao.ts +256 -0
  20. package/adapters/claude-code/mods/ork-mensageiro/hooks/register.tsx +481 -0
  21. package/adapters/claude-code/mods/ork-mensageiro/orkastery-mod.json +5 -0
  22. package/adapters/claude-code/mods/ork-mensageiro/types/index.d.ts +85 -0
  23. package/adapters/claude-code/mods/ork-pista/hooks/ci.ts +9 -5
  24. package/adapters/claude-code/mods/ork-ritual/.claude-plugin/plugin.json +14 -0
  25. package/adapters/claude-code/mods/ork-ritual/hooks/hooks.json +3 -0
  26. package/adapters/claude-code/mods/ork-ritual/hooks/nota.ts +88 -0
  27. package/adapters/claude-code/mods/ork-ritual/hooks/register.tsx +494 -0
  28. package/adapters/claude-code/mods/ork-ritual/hooks/replay.tsx +271 -0
  29. package/adapters/claude-code/mods/ork-ritual/hooks/ritual.ts +218 -0
  30. package/adapters/claude-code/mods/ork-ritual/orkastery-mod.json +5 -0
  31. package/adapters/claude-code/mods/ork-ritual/types/index.d.ts +106 -0
  32. package/adapters/claude-code/mods/ork-sentinela/hooks/vigia.ts +1 -1
  33. package/adapters/codex/skills/ork/SKILL.md +2 -0
  34. package/adapters/hermes/README.md +64 -1
  35. package/adapters/hermes/bin/ork-conhecimento-colecoes.sh +14 -0
  36. package/adapters/hermes/bin/ork-conhecimento-listar.sh +15 -0
  37. package/adapters/hermes/bin/ork-conhecimento-mostrar.sh +16 -0
  38. package/adapters/hermes/bin/ork-conhecimento-verificar.sh +15 -0
  39. package/adapters/hermes/bin/ork-vigia-batida.py +127 -0
  40. package/adapters/hermes/hermes.plugin.json +4 -0
  41. package/adapters/hermes/hitl-ingress/__init__.py +101 -8
  42. package/adapters/hermes/skills/orkastery-devmaster/SKILL.md +2 -2
  43. package/adapters/openclaw/README.md +81 -9
  44. package/adapters/openclaw/bin/ork-vigia-batida.js +86 -0
  45. package/adapters/openclaw/dist/hitl-ingress.js +106 -9
  46. package/adapters/openclaw/dist/index.js +86 -0
  47. package/adapters/openclaw/openclaw.plugin.json +34 -4
  48. package/adapters/openclaw/package.json +2 -2
  49. package/adapters/openclaw/src/hitl-ingress.ts +103 -9
  50. package/adapters/openclaw/src/index.ts +94 -0
  51. package/assets/adapters-en/claude-code/README.md +403 -0
  52. package/assets/adapters-en/claude-code/agents/ork-check.md +33 -0
  53. package/assets/adapters-en/claude-code/agents/ork-go.md +33 -0
  54. package/assets/adapters-en/claude-code/agents/ork-goal.md +34 -0
  55. package/assets/adapters-en/claude-code/agents/ork-master.md +35 -0
  56. package/assets/adapters-en/claude-code/agents/ork-plan.md +33 -0
  57. package/assets/adapters-en/claude-code/agents/ork-ship.md +33 -0
  58. package/assets/adapters-en/claude-code/commands/check.md +46 -0
  59. package/assets/adapters-en/claude-code/commands/go.md +46 -0
  60. package/assets/adapters-en/claude-code/commands/goal.md +55 -0
  61. package/assets/adapters-en/claude-code/commands/master.md +54 -0
  62. package/assets/adapters-en/claude-code/commands/onboarding.md +22 -0
  63. package/assets/adapters-en/claude-code/commands/ork.md +126 -0
  64. package/assets/adapters-en/claude-code/commands/plan.md +47 -0
  65. package/assets/adapters-en/claude-code/commands/ship.md +45 -0
  66. package/assets/adapters-en/codex/skills/ork/SKILL.md +85 -0
  67. package/assets/adapters-en/hermes/README.md +273 -0
  68. package/assets/adapters-en/hermes/skills/orkastery-devmaster/SKILL.md +169 -0
  69. package/assets/references-en/README.md +25 -0
  70. package/assets/references-en/code-review-axes.md +82 -0
  71. package/assets/references-en/definition-of-done.md +74 -0
  72. package/assets/references-en/performance-checklist.md +53 -0
  73. package/assets/references-en/security-checklist.md +101 -0
  74. package/assets/references-en/testing-patterns.md +51 -0
  75. package/assets/security-scan/defaults/.golangci.yml +2 -0
  76. package/assets/security-scan/defaults/eslint.config.mjs +11 -0
  77. package/assets/security-scan/defaults/gitleaks.toml +3 -0
  78. package/assets/security-scan/defaults/ruff.toml +1 -0
  79. package/assets/security-scan/tools-agil.json +87 -0
  80. package/assets/security-scan/tools.json +625 -0
  81. package/assets/skills-en/core/onboarding/SKILL.md +58 -0
  82. package/assets/skills-en/core/orkastery-bootstrap/SKILL.md +119 -0
  83. package/assets/skills-en/core/thread-state/SKILL.md +88 -0
  84. package/assets/skills-en/governance/decision-triage/SKILL.md +65 -0
  85. package/assets/skills-en/governance/narrative-guardian/SKILL.md +66 -0
  86. package/assets/skills-en/governance/roadmap-keeper/SKILL.md +60 -0
  87. package/assets/skills-en/governance/scope-check-capability-map/SKILL.md +71 -0
  88. package/assets/skills-en/observability/thread-tracing/SKILL.md +63 -0
  89. package/assets/skills-en/phases/check-quality/SKILL.md +103 -0
  90. package/assets/skills-en/phases/go-implementation/SKILL.md +78 -0
  91. package/assets/skills-en/phases/goal-definition/SKILL.md +69 -0
  92. package/assets/skills-en/phases/master-metrics/SKILL.md +72 -0
  93. package/assets/skills-en/phases/plan-specification/SKILL.md +67 -0
  94. package/assets/skills-en/phases/security-remediation/SKILL.md +70 -0
  95. package/assets/skills-en/phases/ship-release/SKILL.md +71 -0
  96. package/assets/skills-en/reviewers/code-reviewer/SKILL.md +61 -0
  97. package/assets/skills-en/reviewers/security-auditor/SKILL.md +93 -0
  98. package/assets/skills-en/reviewers/test-engineer/SKILL.md +66 -0
  99. package/assets/skills-en/reviewers/web-performance-auditor/SKILL.md +63 -0
  100. package/dist/adapters/claude-bg.js +118 -4
  101. package/dist/adapters/codex-controller-worker.js +12 -5
  102. package/dist/adapters/codex-events.js +16 -4
  103. package/dist/adapters/codex.js +3 -1
  104. package/dist/atualizar-branch.js +245 -0
  105. package/dist/auditoria.js +13 -11
  106. package/dist/auditrun.js +51 -46
  107. package/dist/autorizacao-duravel.js +327 -0
  108. package/dist/board.js +94 -40
  109. package/dist/branch-de-estado.js +16 -8
  110. package/dist/busca-semantica.js +7 -5
  111. package/dist/catalogo.js +2 -1
  112. package/dist/changelog-reconciliacao.js +290 -0
  113. package/dist/check-agil.js +500 -0
  114. package/dist/check-modo.js +41 -0
  115. package/dist/check-paralelo.js +183 -0
  116. package/dist/ci.js +248 -45
  117. package/dist/ciclos.js +8 -6
  118. package/dist/claim-lint.js +12 -8
  119. package/dist/claims-conferir.js +47 -39
  120. package/dist/claims.js +10 -9
  121. package/dist/company-brain-client.js +10 -3
  122. package/dist/company-brain-migration.js +11 -5
  123. package/dist/conducao-batida.js +759 -0
  124. package/dist/conducao-sentinela.js +25 -8
  125. package/dist/conducao.js +84 -29
  126. package/dist/conhecimento-consulta.js +270 -0
  127. package/dist/conhecimento.js +111 -87
  128. package/dist/conta-esgotada.js +127 -0
  129. package/dist/dado-privado.js +816 -0
  130. package/dist/decisao-autonoma.js +5 -4
  131. package/dist/demo.js +14 -12
  132. package/dist/dependencias-da-worktree.js +25 -0
  133. package/dist/divida.js +38 -36
  134. package/dist/docs.js +81 -74
  135. package/dist/doctor-forja.js +345 -0
  136. package/dist/doctor-pulse-cron.js +113 -1
  137. package/dist/doctor.js +164 -6
  138. package/dist/dsn-da-memoria.js +417 -0
  139. package/dist/entrega-por-mod.js +503 -0
  140. package/dist/entrega-pr.js +143 -43
  141. package/dist/esgotamentos.js +13 -11
  142. package/dist/estado-thread.js +21 -18
  143. package/dist/evalrunner.js +35 -32
  144. package/dist/fabrica-batida.js +34 -21
  145. package/dist/fabrica-estado.js +13 -10
  146. package/dist/fix.js +21 -19
  147. package/dist/forja/adaptador.js +6 -0
  148. package/dist/forja/ambiente-de-ci.js +27 -0
  149. package/dist/forja/api.js +256 -0
  150. package/dist/forja/cache.js +89 -0
  151. package/dist/forja/cli.js +60 -0
  152. package/dist/forja/contrato.js +9 -0
  153. package/dist/forja/endereco.js +43 -0
  154. package/dist/forja/estado.js +22 -0
  155. package/dist/forja/executor.js +73 -0
  156. package/dist/forja/github/ci.js +95 -0
  157. package/dist/forja/github/dono-da-rede.js +18 -0
  158. package/dist/forja/github/metadados.js +15 -0
  159. package/dist/forja/github/pedidos.js +200 -0
  160. package/dist/forja/gitlab/ci.js +141 -0
  161. package/dist/forja/gitlab/consultas.js +59 -0
  162. package/dist/forja/gitlab/dono-da-rede.js +43 -0
  163. package/dist/forja/gitlab/metadados.js +15 -0
  164. package/dist/forja/gitlab/pedidos-abertos.js +158 -0
  165. package/dist/forja/gitlab/pedidos.js +141 -0
  166. package/dist/forja/produtor.js +32 -0
  167. package/dist/forja/registro.js +31 -0
  168. package/dist/forja/resolver.js +121 -0
  169. package/dist/forja/texto.js +13 -0
  170. package/dist/forja/versao.js +71 -0
  171. package/dist/forja.js +123 -80
  172. package/dist/handoff.js +23 -13
  173. package/dist/hitl-contract.js +46 -43
  174. package/dist/hitl-curto.js +37 -25
  175. package/dist/hitl-gates.js +13 -11
  176. package/dist/hitl-local-receipt.js +51 -0
  177. package/dist/hitl-local.js +11 -2
  178. package/dist/hitl-lock.js +5 -11
  179. package/dist/hitl-public-receipt.js +11 -0
  180. package/dist/hitl-resumo.js +44 -1
  181. package/dist/hitl-sessions.js +62 -9
  182. package/dist/hitl-texto-livre.js +7 -4
  183. package/dist/hitl.js +34 -31
  184. package/dist/horario.js +16 -0
  185. package/dist/hosts.js +104 -134
  186. package/dist/index.js +848 -548
  187. package/dist/indice-vetorial.js +14 -12
  188. package/dist/init.js +11 -2
  189. package/dist/integracoes-locais.js +2 -0
  190. package/dist/intelligence-graph-cli.js +123 -69
  191. package/dist/intelligence-graph-query.js +37 -22
  192. package/dist/leases.js +19 -18
  193. package/dist/ledger-stats.js +17 -16
  194. package/dist/ledger.js +31 -1
  195. package/dist/licoes.js +12 -11
  196. package/dist/locale-accounts.js +220 -0
  197. package/dist/locale-adapter.js +291 -0
  198. package/dist/locale-ajuda.js +76 -4
  199. package/dist/locale-audit.js +199 -0
  200. package/dist/locale-claims.js +213 -0
  201. package/dist/locale-conducao.js +138 -0
  202. package/dist/locale-conhecimento.js +181 -0
  203. package/dist/locale-decisao.js +205 -0
  204. package/dist/locale-docs.js +230 -0
  205. package/dist/locale-estado.js +101 -0
  206. package/dist/locale-forja.js +290 -0
  207. package/dist/locale-gerados.js +5 -0
  208. package/dist/locale-grafo.js +129 -0
  209. package/dist/locale-master.js +83 -0
  210. package/dist/locale-network.js +524 -0
  211. package/dist/locale-operacao-restante.js +931 -0
  212. package/dist/locale-projetos.js +100 -0
  213. package/dist/locale-prompts.js +194 -0
  214. package/dist/locale-pulse.js +140 -2
  215. package/dist/locale-reservas.js +87 -0
  216. package/dist/locale-retry.js +145 -6
  217. package/dist/locale-security-scan.js +69 -0
  218. package/dist/locale-setup.js +192 -0
  219. package/dist/locale-ship.js +169 -66
  220. package/dist/locale-thread.js +149 -5
  221. package/dist/locale-verify.js +80 -4
  222. package/dist/locale-worktree.js +246 -0
  223. package/dist/locale.js +553 -9
  224. package/dist/maestro-runtime.js +22 -3
  225. package/dist/manifest.js +287 -11
  226. package/dist/maquina-ociosa.js +211 -0
  227. package/dist/maquina.js +10 -5
  228. package/dist/master-nota-local.js +200 -0
  229. package/dist/master-nota.js +10 -2
  230. package/dist/master.js +118 -41
  231. package/dist/mcp-conhecimento.js +52 -0
  232. package/dist/mcp-experiencia.js +26 -5
  233. package/dist/mcp-install.js +73 -8
  234. package/dist/mcp-noctum.js +101 -0
  235. package/dist/mcp-server.js +82 -14
  236. package/dist/mcp-ship-transporte.js +977 -0
  237. package/dist/mcp-ship.js +68 -24
  238. package/dist/mcp-transportes.js +17 -0
  239. package/dist/memoria.js +63 -58
  240. package/dist/modos-migracao.js +8 -6
  241. package/dist/modos.js +17 -18
  242. package/dist/network-roadmap.js +85 -49
  243. package/dist/noctum-aceite.js +789 -0
  244. package/dist/noctum-arco.js +540 -33
  245. package/dist/noctum-capacidade.js +3 -3
  246. package/dist/noctum-changelog.js +399 -0
  247. package/dist/noctum-cli.js +482 -0
  248. package/dist/noctum-coordenacao.js +1225 -0
  249. package/dist/noctum-entrega.js +1169 -0
  250. package/dist/noctum-envelope.js +252 -16
  251. package/dist/noctum-execucao.js +95 -23
  252. package/dist/noctum-fechamento.js +405 -0
  253. package/dist/noctum-fila.js +43 -9
  254. package/dist/noctum-guarda.js +256 -0
  255. package/dist/noctum-integracao.js +507 -0
  256. package/dist/noctum-maquinas.js +383 -0
  257. package/dist/noctum-medicao.js +450 -0
  258. package/dist/noctum-modo.js +362 -0
  259. package/dist/noctum-pergunta-canal.js +96 -0
  260. package/dist/noctum-pergunta.js +115 -0
  261. package/dist/noctum-provas.js +838 -0
  262. package/dist/noctum-reconciliacao.js +591 -0
  263. package/dist/noctum-registro.js +215 -0
  264. package/dist/noctum-relatorio.js +827 -0
  265. package/dist/noctum-resposta.js +207 -0
  266. package/dist/noctum-sessoes-em-voo.js +93 -0
  267. package/dist/noctum-supervisao.js +649 -0
  268. package/dist/noctum-terminal.js +459 -0
  269. package/dist/noctum-transporte.js +655 -0
  270. package/dist/noctum-vigia.js +639 -0
  271. package/dist/ocupacao.js +3 -1
  272. package/dist/onboarding.js +16 -5
  273. package/dist/orkmind.js +39 -23
  274. package/dist/orquestracao.js +31 -35
  275. package/dist/parado-no-condutor.js +146 -124
  276. package/dist/phase.js +53 -27
  277. package/dist/policies.js +33 -0
  278. package/dist/postura-local.js +4 -3
  279. package/dist/procedencia.js +9 -14
  280. package/dist/projeto-alvo.js +59 -20
  281. package/dist/prompts.js +136 -42
  282. package/dist/prova-minima.js +5 -6
  283. package/dist/pulse-cadencia.js +5 -4
  284. package/dist/pulse-consentimento.js +53 -1
  285. package/dist/pulse-delivery.js +143 -27
  286. package/dist/pulse-resposta.js +368 -4
  287. package/dist/pulse.js +136 -3
  288. package/dist/ratelimit.js +12 -4
  289. package/dist/recall.js +14 -13
  290. package/dist/rede-adesao.js +13 -8
  291. package/dist/rede-forja.js +108 -24
  292. package/dist/rede-status.js +63 -45
  293. package/dist/rede.js +86 -46
  294. package/dist/retomada-checkpoint.js +101 -0
  295. package/dist/retry.js +228 -73
  296. package/dist/roadmap-reservas.js +32 -32
  297. package/dist/runtime-ambiente.js +5 -0
  298. package/dist/runtime-context.js +117 -43
  299. package/dist/runtime-escada.js +423 -0
  300. package/dist/runtime-profiles.js +103 -46
  301. package/dist/saida-segura.js +3 -2
  302. package/dist/security-scan/agil.js +355 -0
  303. package/dist/security-scan/cli.js +76 -0
  304. package/dist/security-scan/compare.js +149 -0
  305. package/dist/security-scan/config.js +93 -0
  306. package/dist/security-scan/detect.js +97 -0
  307. package/dist/security-scan/executor.js +188 -0
  308. package/dist/security-scan/guard.js +180 -0
  309. package/dist/security-scan/imagem-de-lint.js +96 -0
  310. package/dist/security-scan/normalize/actionlint.js +12 -0
  311. package/dist/security-scan/normalize/eslint.js +12 -0
  312. package/dist/security-scan/normalize/gitleaks.js +13 -0
  313. package/dist/security-scan/normalize/golangci-lint.js +13 -0
  314. package/dist/security-scan/normalize/govulncheck.js +36 -0
  315. package/dist/security-scan/normalize/index.js +25 -0
  316. package/dist/security-scan/normalize/npm-audit.js +30 -0
  317. package/dist/security-scan/normalize/osv-scanner.js +32 -0
  318. package/dist/security-scan/normalize/oxlint.js +51 -0
  319. package/dist/security-scan/normalize/pip-audit.js +16 -0
  320. package/dist/security-scan/normalize/ruff.js +12 -0
  321. package/dist/security-scan/normalize/semgrep.js +20 -0
  322. package/dist/security-scan/normalize/trivy.js +33 -0
  323. package/dist/security-scan/normalize/util.js +204 -0
  324. package/dist/security-scan/normalize/zizmor.js +19 -0
  325. package/dist/security-scan/report.js +156 -0
  326. package/dist/security-scan/run.js +448 -0
  327. package/dist/security-scan/tools.js +62 -0
  328. package/dist/security-scan/trabalhador.js +74 -0
  329. package/dist/security-scan/types.js +15 -0
  330. package/dist/session-events.js +19 -2
  331. package/dist/session-watcher-claude.js +74 -19
  332. package/dist/session-watcher.js +156 -10
  333. package/dist/sessoes-contas.js +9 -0
  334. package/dist/sessoes-inventario.js +1 -1
  335. package/dist/sessoes.js +25 -23
  336. package/dist/setup.js +59 -58
  337. package/dist/ship-publicar.js +263 -92
  338. package/dist/ship.js +160 -17
  339. package/dist/superficie.js +14 -11
  340. package/dist/thread-close.js +9 -9
  341. package/dist/thread.js +121 -18
  342. package/dist/tokens.js +15 -11
  343. package/dist/trabalho-thread.js +297 -0
  344. package/dist/transporte-do-canal.js +189 -0
  345. package/dist/types.js +12 -1
  346. package/dist/util.js +5 -2
  347. package/dist/varredura-acoes.js +507 -0
  348. package/dist/verify.js +472 -29
  349. package/dist/worktree-local.js +12 -10
  350. package/dist/worktree.js +81 -85
  351. package/eval/casos/check-quality.json +77 -0
  352. package/eval/casos/security-auditor.json +148 -0
  353. package/eval/casos/security-remediation.json +161 -0
  354. package/eval/fixtures/security-scan/README.md +8 -0
  355. package/eval/fixtures/security-scan/go/.github/workflows/ci.yml +12 -0
  356. package/eval/fixtures/security-scan/go/Dockerfile +4 -0
  357. package/eval/fixtures/security-scan/go/README.md +4 -0
  358. package/eval/fixtures/security-scan/go/config.go +4 -0
  359. package/eval/fixtures/security-scan/go/go.mod +5 -0
  360. package/eval/fixtures/security-scan/go/go.sum +2 -0
  361. package/eval/fixtures/security-scan/go/main.go +31 -0
  362. package/eval/fixtures/security-scan/js/.github/workflows/ci.yml +12 -0
  363. package/eval/fixtures/security-scan/js/Dockerfile +3 -0
  364. package/eval/fixtures/security-scan/js/README.md +4 -0
  365. package/eval/fixtures/security-scan/js/package-lock.json +844 -0
  366. package/eval/fixtures/security-scan/js/package.json +10 -0
  367. package/eval/fixtures/security-scan/js/src/config.js +4 -0
  368. package/eval/fixtures/security-scan/js/src/server.js +17 -0
  369. package/eval/fixtures/security-scan/js/src/util.ts +4 -0
  370. package/eval/fixtures/security-scan/js/tsconfig.json +4 -0
  371. package/eval/fixtures/security-scan/python/.github/workflows/ci.yml +12 -0
  372. package/eval/fixtures/security-scan/python/Dockerfile +3 -0
  373. package/eval/fixtures/security-scan/python/README.md +4 -0
  374. package/eval/fixtures/security-scan/python/app/__init__.py +0 -0
  375. package/eval/fixtures/security-scan/python/app/config.py +2 -0
  376. package/eval/fixtures/security-scan/python/app/main.py +19 -0
  377. package/eval/fixtures/security-scan/python/requirements.txt +1 -0
  378. package/package.json +9 -4
  379. package/references/security-checklist.md +3 -3
  380. package/skills/README.md +1 -0
  381. package/skills/core/orkastery-bootstrap/SKILL.md +2 -2
  382. package/skills/phases/check-quality/SKILL.md +16 -0
  383. package/skills/phases/go-implementation/SKILL.md +6 -0
  384. package/skills/phases/security-remediation/SKILL.md +70 -0
  385. package/skills/reviewers/security-auditor/SKILL.md +25 -0
package/dist/doctor.js CHANGED
@@ -39,18 +39,23 @@ var __importStar = (this && this.__importStar) || (function () {
39
39
  };
40
40
  })();
41
41
  Object.defineProperty(exports, "__esModule", { value: true });
42
- exports.TETO_DO_DONO_DO_GIT = void 0;
42
+ exports.CONTRATO_DO_DOCTOR = exports.TETO_DO_DONO_DO_GIT = void 0;
43
+ exports.checarSeparacaoDaConducao = checarSeparacaoDaConducao;
43
44
  exports.manifestoForaDoRepositorio = manifestoForaDoRepositorio;
44
45
  exports.checarContas = checarContas;
45
46
  exports.checarChaveDeEmbedding = checarChaveDeEmbedding;
47
+ exports.checarFonteDaDsn = checarFonteDaDsn;
48
+ exports.checarDsnNoAmbiente = checarDsnNoAmbiente;
46
49
  exports.checarDonoDoGit = checarDonoDoGit;
47
50
  exports.checarOnboarding = checarOnboarding;
48
51
  exports.blocosDoRuntime = blocosDoRuntime;
49
52
  exports.checarRuntimeClaude = checarRuntimeClaude;
50
53
  exports.checarDespachoPeloCodex = checarDespachoPeloCodex;
54
+ exports.checarSecurityScan = checarSecurityScan;
51
55
  exports.checar = checar;
52
56
  exports.relatorio = relatorio;
53
57
  exports.doctor = doctor;
58
+ exports.doctorJson = doctorJson;
54
59
  const fs = __importStar(require("node:fs"));
55
60
  const path = __importStar(require("node:path"));
56
61
  const adapter = __importStar(require("./adapters/claude-bg"));
@@ -62,11 +67,16 @@ const onboarding_1 = require("./onboarding");
62
67
  const ratelimit_1 = require("./ratelimit");
63
68
  const slug_1 = require("./slug");
64
69
  const horario_1 = require("./horario");
70
+ const executor_1 = require("./security-scan/executor");
71
+ const detect_1 = require("./security-scan/detect");
72
+ const tools_1 = require("./security-scan/tools");
73
+ const types_1 = require("./security-scan/types");
65
74
  const util_1 = require("./util");
66
75
  const sessoes_inventario_1 = require("./sessoes-inventario");
67
76
  const estado_thread_1 = require("./estado-thread");
68
77
  const project_state_1 = require("./project-state");
69
78
  const runtime_ambiente_1 = require("./runtime-ambiente");
79
+ const dsn_da_memoria_1 = require("./dsn-da-memoria");
70
80
  const runtime_profiles_1 = require("./runtime-profiles");
71
81
  const preflight_1 = require("./preflight");
72
82
  const setup_1 = require("./setup");
@@ -76,6 +86,41 @@ const worktree_local_1 = require("./worktree-local");
76
86
  const maquina_1 = require("./maquina");
77
87
  const doctor_rede_1 = require("./doctor-rede");
78
88
  const locale_1 = require("./locale");
89
+ const real = (dir) => { try {
90
+ return fs.realpathSync(dir);
91
+ }
92
+ catch {
93
+ return path.resolve(dir);
94
+ } };
95
+ /**
96
+ * RM-064 T5: avisa quando o LLM que roda o doctor usa a mesma conta das fases vivas. Sessão de fase
97
+ * despachada pelo `ork` (com a identidade do despacho no ambiente) não é o condutor e não entra na comparação.
98
+ */
99
+ function checarSeparacaoDaConducao(raiz, inventario, env = process.env) {
100
+ const runtime = env.CLAUDECODE ? 'claude-bg' : env.CODEX_THREAD_ID ? 'codex' : null;
101
+ if (!runtime || (0, runtime_ambiente_1.sessaoDespachada)(env))
102
+ return null;
103
+ const dirAtual = runtime === 'claude-bg' ? env.CLAUDE_CONFIG_DIR : env.CODEX_HOME;
104
+ let perfil = null;
105
+ try {
106
+ if (dirAtual) {
107
+ const p = (0, runtime_profiles_1.lerPerfisComContas)(raiz).perfis.find((x) => x.runtime === runtime &&
108
+ real(((0, runtime_profiles_1.perfilDeDespacho)(x).configDir ?? (0, runtime_profiles_1.perfilDeDespacho)(x).codexHome)) === real(dirAtual));
109
+ perfil = p?.id ?? null;
110
+ }
111
+ }
112
+ catch { /* o check de contas relata o store inválido; aqui não inventamos perfil */ }
113
+ const fases = inventario.sessoes.filter((s) => s.viva && s.runtime === runtime && s.perfil === perfil && s.vinculos.length > 0)
114
+ .flatMap((s) => s.vinculos.map((v) => `${v.thread}:${v.fase}`));
115
+ const conta = perfil ?? (0, locale_1.msg)().doctor.contaDoAmbiente;
116
+ return {
117
+ nome: 'separacao da conducao',
118
+ nivel: fases.length ? 'warn' : 'ok',
119
+ detalhe: fases.length ? (0, locale_1.msg)().doctor.condutorCompartilha(runtime, conta, fases.slice(0, 3).join(', '))
120
+ : (0, locale_1.msg)().doctor.condutorSeparado(runtime, conta),
121
+ correcao: fases.length ? (0, locale_1.msg)().doctor.condutorCompartilhaCorrecao : undefined,
122
+ };
123
+ }
79
124
  /**
80
125
  * Ensaio de 03/10/2026 (RM-049): o manifesto e achado subindo a partir do diretorio atual. Um
81
126
  * `orkastery.yaml` de uma pasta acima do repositorio (um `ork init` rodado por engano no HOME) era
@@ -182,7 +227,8 @@ function checarChaveDeEmbedding(carregado, env = process.env) {
182
227
  correcao: (0, locale_1.msg)().doctor.embeddingSemVariavelCorrecao };
183
228
  }
184
229
  const valor = (env[variavel] ?? '').trim();
185
- const dsn = carregado.manifesto.memory.database_url_env ? (env[carregado.manifesto.memory.database_url_env] ?? '') : '';
230
+ // RM-069: a DSN da fonte declarada (a variavel ou o arquivo da pasta de segredos), pelo resolvedor unico.
231
+ const dsn = (0, dsn_da_memoria_1.resolverDsn)(carregado.manifesto.memory, { env }).dsn;
186
232
  if (valor !== '' && !(0, orkmind_1.chaveDeEmbeddingAceita)(valor, dsn)) {
187
233
  return { nome, nivel: 'fail', detalhe: (0, locale_1.msg)().doctor.embeddingRecusada(variavel), correcao: (0, locale_1.msg)().doctor.embeddingRecusadaCorrecao(variavel) };
188
234
  }
@@ -191,6 +237,47 @@ function checarChaveDeEmbedding(carregado, env = process.env) {
191
237
  }
192
238
  return { nome, nivel: 'warn', detalhe: (0, locale_1.msg)().doctor.embeddingAusente(variavel), correcao: (0, locale_1.msg)().doctor.embeddingAusenteCorrecao(variavel) };
193
239
  }
240
+ /**
241
+ * RM-069 (G5): de onde vem a DSN da memoria, a variavel pelo NOME ou o arquivo pelo rotulo com `~`, nunca o valor. So
242
+ * com `memory.mode: orkmind` e uma fonte declarada; a falha e aviso, porque memoria degradada nao bloqueia despacho.
243
+ */
244
+ function checarFonteDaDsn(carregado, env = process.env) {
245
+ const memoria = carregado.manifesto.memory;
246
+ if (memoria.mode !== 'orkmind')
247
+ return null;
248
+ const r = (0, dsn_da_memoria_1.resolverDsn)(memoria, { env });
249
+ const nome = 'fonte da DSN';
250
+ if (r.fonte === 'nenhuma')
251
+ return null;
252
+ if (r.fonte === 'ambiente') {
253
+ return r.falha
254
+ ? { nome, nivel: 'warn', detalhe: (0, locale_1.msg)().doctor.dsnVariavelAusente(r.rotulo), correcao: (0, locale_1.msg)().doctor.dsnVariavelAusenteCorrecao(r.rotulo) }
255
+ : { nome, nivel: 'ok', detalhe: (0, locale_1.msg)().doctor.dsnDaVariavel(r.rotulo) };
256
+ }
257
+ if (!r.falha)
258
+ return { nome, nivel: 'ok', detalhe: (0, locale_1.msg)().doctor.dsnDoArquivo(r.rotulo, r.permissao ?? '') };
259
+ return { nome, nivel: 'warn', detalhe: (0, locale_1.msg)().doctor.dsnArquivoFalhou(r.rotulo, r.falha, (0, locale_1.msg)().doctor.dsnCausa(r.causa ?? '', r.permissao ?? '')),
260
+ correcao: (0, locale_1.msg)().doctor.dsnArquivoCorrecao(r.falha, r.rotulo) };
261
+ }
262
+ /**
263
+ * RM-069 (G6, D8): a DSN no ambiente DESTE processo, pelo NOME da variavel, nunca o valor. Numa sessao despachada, as
264
+ * variaveis com a DSN do projeto e toda URL com senha: o agente as le com `env`. Fora dela, so com a fonte de arquivo
265
+ * lida, as variaveis que repetem a DSN do arquivo. Nos outros casos (fonte de ambiente fora do despacho), nenhum check.
266
+ */
267
+ function checarDsnNoAmbiente(carregado, env = process.env) {
268
+ const despachada = (0, runtime_ambiente_1.sessaoDespachada)(env);
269
+ const r = (0, dsn_da_memoria_1.resolverDsn)(carregado.manifesto.memory, { env });
270
+ if (!despachada && !(r.fonte === 'arquivo' && r.dsn))
271
+ return null;
272
+ const nome = 'DSN no ambiente';
273
+ const doProjeto = r.dsn ? (0, dsn_da_memoria_1.variaveisComDsn)(env, r.dsn) : [];
274
+ const comSenha = despachada ? (0, dsn_da_memoria_1.variaveisComUrlComSenha)(env).filter((n) => !doProjeto.includes(n)) : [];
275
+ if (doProjeto.length === 0 && comSenha.length === 0) {
276
+ return { nome, nivel: 'ok', detalhe: despachada ? (0, locale_1.msg)().doctor.dsnSessaoLimpa : (0, locale_1.msg)().doctor.dsnProcessoLimpo };
277
+ }
278
+ return { nome, nivel: 'warn', detalhe: despachada ? (0, locale_1.msg)().doctor.dsnNaSessao(doProjeto, comSenha) : (0, locale_1.msg)().doctor.dsnNoProcesso(doProjeto),
279
+ correcao: (0, locale_1.msg)().doctor.dsnNoAmbienteCorrecao };
280
+ }
194
281
  /** Acima disso a conferencia do dono do `.git` fica parcial (aviso), para o doctor nao pesar. */
195
282
  exports.TETO_DO_DONO_DO_GIT = 200_000;
196
283
  /**
@@ -407,12 +494,33 @@ function checarDespachoPeloCodex(carregado, codex, sonda) {
407
494
  : undefined,
408
495
  };
409
496
  }
497
+ /**
498
+ * Check `security scan` (spec section 11): only when `verify.security_scan` is declared. `ok` with Docker (CLI and daemon);
499
+ * without it, `ok` only when every loop-category tool for the detected stacks has an acceptable native binary (pip-audit
500
+ * and govulncheck have none, so a Python or Go repo always lands on `warn`). Never `fail`: a missing scanner is the
501
+ * `unavailable` of the ship gate, not a broken machine. The probe is injectable so tests never touch a real Docker.
502
+ */
503
+ function checarSecurityScan(carregado, probe = (0, executor_1.defaultProbe)()) {
504
+ if (!carregado || carregado.manifesto.verify.security_scan === undefined)
505
+ return null;
506
+ const nome = 'security scan';
507
+ const m = (0, locale_1.msg)().doctor;
508
+ const tools = (0, tools_1.toolsFor)((0, detect_1.detectStacks)(carregado.raiz).map(s => s.stack), (0, tools_1.loadTools)());
509
+ const faltando = tools.filter(t => types_1.LOOP_CATEGORIES.includes(t.category) && (0, executor_1.chooseExecutor)(t, probe).kind === 'unavailable');
510
+ if (probe.dockerCli() && probe.dockerDaemon())
511
+ return { nome, nivel: 'ok', detalhe: m.securityScanDocker };
512
+ if (faltando.length === 0)
513
+ return { nome, nivel: 'ok', detalhe: m.securityScanNativo };
514
+ const lista = faltando.map(t => `${t.category}/${t.name}`).join(', ');
515
+ const nativos = [...new Set(tools.filter(t => t.native && !t.install).map(t => t.native.bin))].join(', ');
516
+ return { nome, nivel: 'warn', detalhe: m.securityScanSemFerramenta(lista), correcao: m.securityScanCorrecao(nativos) };
517
+ }
410
518
  /**
411
519
  * Roda todos os checks a partir do diretorio informado. RM-031: `analisadores` e o check do grafo
412
520
  * (`checarAnalisadoresDoGrafo` do CLI do grafo), que o `index.ts` passa: fora da familia do grafo so
413
521
  * ele e o worker do MCP a abrem (fronteira do KG1), e o doctor nao a importa.
414
522
  */
415
- function checar(dirInicial = process.cwd(), nomesHerdados = (0, runtime_ambiente_1.nomesDeProviderAtivos)(), lerCrontab = doctor_pulse_cron_1.lerCrontabDoSistema, conferirAuthDoClaude = () => adapter.conferirAuth(null), analisadores) {
523
+ function checar(dirInicial = process.cwd(), nomesHerdados = (0, runtime_ambiente_1.nomesDeProviderAtivos)(), lerCrontab = doctor_pulse_cron_1.lerCrontabDoSistema, conferirAuthDoClaude = () => adapter.conferirAuth(null), analisadores, forja) {
416
524
  const checks = [];
417
525
  const major = versaoNode();
418
526
  checks.push({
@@ -450,6 +558,9 @@ function checar(dirInicial = process.cwd(), nomesHerdados = (0, runtime_ambiente
450
558
  // Fatia 2 do ensaio da 0.5.0 (P1): o manifesto e lido antes dos runtimes, porque e o setup dos
451
559
  // modos permitidos que diz se o `claude` e obrigatorio; a ordem das linhas do relatorio nao muda.
452
560
  const carregado = (0, manifest_1.carregarManifesto)(dirInicial);
561
+ const scan = checarSecurityScan(carregado);
562
+ if (scan)
563
+ checks.push(scan);
453
564
  const claude = adapter.disponivel();
454
565
  const v = claude ? adapter.versao() : null;
455
566
  checks.push(checarRuntimeClaude(carregado, claude, v, claude && !temPerfilAtivo(carregado, 'claude-bg') ? conferirAuthDoClaude() : null));
@@ -596,10 +707,19 @@ function checar(dirInicial = process.cwd(), nomesHerdados = (0, runtime_ambiente
596
707
  detalhe: estado.pedido === 'orkmind' && estado.efetivo === 'files'
597
708
  ? (0, locale_1.msg)().doctor.regimeDegradado(estado.motivo, estado.detalhe)
598
709
  : estado.efetivo === 'orkmind'
599
- ? (0, locale_1.msg)().doctor.regimeOrkmind(estado.tenant, estado.variavel)
710
+ ? estado.fonteDaDsn === 'arquivo'
711
+ ? (0, locale_1.msg)().doctor.regimeOrkmindPorArquivo(estado.tenant, estado.arquivoDaDsn ?? '')
712
+ : (0, locale_1.msg)().doctor.regimeOrkmind(estado.tenant, estado.variavel)
600
713
  : (0, locale_1.msg)().doctor.memoriaFiles,
601
714
  correcao: estado.pedido === 'orkmind' && estado.efetivo === 'files' ? estado.correcao : undefined,
602
715
  });
716
+ // RM-069: a fonte da DSN e a DSN no ambiente, so quando ha o que dizer (fonte declarada ou sessao despachada).
717
+ const fonteDaDsn = checarFonteDaDsn(context.loaded);
718
+ if (fonteDaDsn)
719
+ checks.push(fonteDaDsn);
720
+ const dsnNoAmbiente = checarDsnNoAmbiente(context.loaded);
721
+ if (dsnNoAmbiente)
722
+ checks.push(dsnNoAmbiente);
603
723
  checks.push(checarChaveDeEmbedding(context.loaded));
604
724
  // Bloco B3: a fila de rate limit e estado do mundo, nao detalhe interno. Uma fase
605
725
  // esperando janela e uma fase que NAO esta rodando, e quem olha o doctor precisa
@@ -638,11 +758,22 @@ function checar(dirInicial = process.cwd(), nomesHerdados = (0, runtime_ambiente
638
758
  const cronDoPulse = (0, doctor_pulse_cron_1.checarCronDoPulse)(path.join(dirEstadoProjeto, 'monitor'), (0, estado_thread_1.raizDoEstado)(carregado.raiz), lerCrontab);
639
759
  if (cronDoPulse)
640
760
  checks.push(cronDoPulse);
761
+ // RM-063 (fatia 3, H4): a falha do transporte do pulse (e o desvio para o outro host configurado) aparece aqui.
762
+ const transporte = (0, doctor_pulse_cron_1.checarTransporteDoPulse)(path.join(dirEstadoProjeto, 'monitor'));
763
+ if (transporte)
764
+ checks.push(transporte);
641
765
  checks.push(checarContas(carregado.raiz));
642
766
  // I-33 (D7): umask e permissoes do estado, na mesma regra do sensor (sem bits 0o022).
643
767
  checks.push(...(0, preflight_1.sondasDeAmbiente)(carregado.raiz));
768
+ // A forja do remoto (identidade, alcance, TLS, CLI, login, servidor, escopo, projeto, capacidades): so com o
769
+ // manifesto valido, e so quando a entrada do CLI a passa, como os analisadores.
770
+ if (forja && carregado.erros.length === 0)
771
+ checks.push(...forja(carregado));
644
772
  {
645
773
  const inventario = (0, sessoes_inventario_1.inventariarSessoes)(carregado.raiz, { global: true, todas: true });
774
+ const separacao = checarSeparacaoDaConducao(carregado.raiz, inventario);
775
+ if (separacao)
776
+ checks.push(separacao);
646
777
  // Fatia 2 do ensaio da 0.5.0 (P1): binario ausente e fonte ausente, dita no detalhe.
647
778
  const ausentes = inventario.fontes.filter((f) => f.ausente).map((f) => f.origem);
648
779
  checks.push({
@@ -692,8 +823,35 @@ function relatorio(checks) {
692
823
  return linhas.join('\n');
693
824
  }
694
825
  /** Executa o doctor e devolve o codigo de saida (0 = pronto). */
695
- function doctor(dirInicial = process.cwd(), nomesHerdados = (0, runtime_ambiente_1.nomesDeProviderAtivos)(), analisadores) {
696
- const checks = checar(dirInicial, nomesHerdados, undefined, undefined, analisadores);
826
+ function doctor(dirInicial = process.cwd(), nomesHerdados = (0, runtime_ambiente_1.nomesDeProviderAtivos)(), analisadores, forja) {
827
+ const checks = checar(dirInicial, nomesHerdados, undefined, undefined, analisadores, forja);
697
828
  const falhas = checks.filter((c) => c.nivel === 'fail').length;
698
829
  return { texto: relatorio(checks), codigo: falhas > 0 ? 1 : 0 };
699
830
  }
831
+ exports.CONTRATO_DO_DOCTOR = 'ork.doctor/v1';
832
+ function doctorJson(dirInicial = process.cwd(), nomesHerdados = (0, runtime_ambiente_1.nomesDeProviderAtivos)(), analisadores, lerCrontab = doctor_pulse_cron_1.lerCrontabDoSistema, forja) {
833
+ const checks = checar(dirInicial, nomesHerdados, lerCrontab, undefined, analisadores, forja);
834
+ const falhas = checks.filter((c) => c.nivel === 'fail').length;
835
+ const avisos = checks.filter((c) => c.nivel === 'warn').length;
836
+ let carregado = null;
837
+ try {
838
+ carregado = (0, manifest_1.carregarManifesto)(dirInicial);
839
+ }
840
+ catch {
841
+ carregado = null;
842
+ }
843
+ let batida = null;
844
+ if (carregado && !carregado.erros.length) {
845
+ const raiz = (0, estado_thread_1.raizDoEstado)(carregado.raiz);
846
+ try {
847
+ batida = (0, doctor_pulse_cron_1.batidaNoDoctor)(path.join(raiz, manifest_1.DIR_ESTADO, 'monitor'), raiz, { projeto: carregado.manifesto.project.name,
848
+ maquina: (0, maquina_1.nomeDaMaquina)(), ler: lerCrontab });
849
+ }
850
+ catch {
851
+ batida = null;
852
+ }
853
+ }
854
+ return { codigo: falhas > 0 ? 1 : 0, json: { contrato: exports.CONTRATO_DO_DOCTOR, consultadoEm: new Date().toISOString(),
855
+ veredito: falhas > 0 ? 'bloqueado' : 'pronto', falhas, avisos, projeto: carregado?.manifesto.project.name ?? null,
856
+ maquina: (0, maquina_1.nomeDaMaquina)(), checks, forja: forja ? 'medida' : 'nao-medida', batida } };
857
+ }