@orkastery/cli 0.5.6 → 0.6.1

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 (396) 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 +123 -9
  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/adapters/grok-events.js +227 -0
  105. package/dist/adapters/grok-mcp-servidor.js +612 -0
  106. package/dist/adapters/grok-mcp.js +178 -0
  107. package/dist/adapters/grok.js +686 -0
  108. package/dist/agendador-cpu.js +92 -0
  109. package/dist/atualizar-branch.js +245 -0
  110. package/dist/auditoria.js +13 -11
  111. package/dist/auditrun.js +51 -46
  112. package/dist/autorizacao-duravel.js +327 -0
  113. package/dist/board.js +94 -40
  114. package/dist/branch-de-estado.js +23 -10
  115. package/dist/busca-semantica.js +7 -5
  116. package/dist/catalogo.js +2 -1
  117. package/dist/changelog-reconciliacao.js +290 -0
  118. package/dist/check-agil.js +528 -0
  119. package/dist/check-modo.js +41 -0
  120. package/dist/check-paralelo.js +238 -0
  121. package/dist/ci.js +248 -45
  122. package/dist/ciclos.js +8 -6
  123. package/dist/claim-lint.js +12 -8
  124. package/dist/claims-conferir.js +47 -39
  125. package/dist/claims.js +10 -9
  126. package/dist/company-brain-client.js +10 -3
  127. package/dist/company-brain-migration.js +11 -5
  128. package/dist/conducao-batida.js +759 -0
  129. package/dist/conducao-sentinela.js +25 -8
  130. package/dist/conducao.js +89 -29
  131. package/dist/conhecimento-consulta.js +270 -0
  132. package/dist/conhecimento.js +111 -87
  133. package/dist/conta-esgotada.js +127 -0
  134. package/dist/dado-privado.js +816 -0
  135. package/dist/decisao-autonoma.js +5 -4
  136. package/dist/demo.js +14 -12
  137. package/dist/dependencias-da-worktree.js +25 -0
  138. package/dist/divida.js +38 -36
  139. package/dist/docs.js +89 -89
  140. package/dist/doctor-forja.js +343 -0
  141. package/dist/doctor-pulse-cron.js +113 -1
  142. package/dist/doctor.js +164 -6
  143. package/dist/dsn-da-memoria.js +417 -0
  144. package/dist/entrega-por-mod.js +503 -0
  145. package/dist/entrega-pr.js +154 -54
  146. package/dist/esgotamentos.js +13 -11
  147. package/dist/estado-thread.js +21 -18
  148. package/dist/evalrunner.js +35 -32
  149. package/dist/fabrica-batida.js +34 -21
  150. package/dist/fabrica-estado.js +33 -21
  151. package/dist/fix.js +21 -19
  152. package/dist/forja/adaptador.js +6 -0
  153. package/dist/forja/ambiente-de-ci.js +27 -0
  154. package/dist/forja/api.js +256 -0
  155. package/dist/forja/cache.js +89 -0
  156. package/dist/forja/cli.js +60 -0
  157. package/dist/forja/contrato.js +9 -0
  158. package/dist/forja/endereco.js +43 -0
  159. package/dist/forja/estado.js +22 -0
  160. package/dist/forja/executor.js +73 -0
  161. package/dist/forja/github/ci.js +95 -0
  162. package/dist/forja/github/dono-da-rede.js +18 -0
  163. package/dist/forja/github/metadados.js +15 -0
  164. package/dist/forja/github/pedidos.js +200 -0
  165. package/dist/forja/gitlab/ci.js +141 -0
  166. package/dist/forja/gitlab/consultas.js +59 -0
  167. package/dist/forja/gitlab/dono-da-rede.js +43 -0
  168. package/dist/forja/gitlab/metadados.js +15 -0
  169. package/dist/forja/gitlab/pedidos-abertos.js +158 -0
  170. package/dist/forja/gitlab/pedidos.js +141 -0
  171. package/dist/forja/produtor.js +32 -0
  172. package/dist/forja/registro.js +31 -0
  173. package/dist/forja/resolver.js +121 -0
  174. package/dist/forja/texto.js +13 -0
  175. package/dist/forja/versao.js +71 -0
  176. package/dist/forja.js +123 -80
  177. package/dist/handoff.js +23 -13
  178. package/dist/hitl-contract.js +46 -43
  179. package/dist/hitl-curto.js +37 -25
  180. package/dist/hitl-gates.js +13 -11
  181. package/dist/hitl-local-receipt.js +51 -0
  182. package/dist/hitl-local.js +11 -2
  183. package/dist/hitl-lock.js +5 -11
  184. package/dist/hitl-public-receipt.js +11 -0
  185. package/dist/hitl-resumo.js +44 -1
  186. package/dist/hitl-sessions.js +62 -9
  187. package/dist/hitl-texto-livre.js +7 -4
  188. package/dist/hitl.js +34 -31
  189. package/dist/horario.js +20 -1
  190. package/dist/hosts.js +104 -134
  191. package/dist/index.js +864 -554
  192. package/dist/indice-vetorial.js +14 -12
  193. package/dist/init.js +11 -2
  194. package/dist/integracoes-locais.js +4 -0
  195. package/dist/intelligence-graph-cli.js +123 -69
  196. package/dist/intelligence-graph-query.js +37 -22
  197. package/dist/leases.js +19 -18
  198. package/dist/ledger-stats.js +17 -16
  199. package/dist/ledger.js +31 -1
  200. package/dist/licoes.js +12 -11
  201. package/dist/locale-accounts.js +228 -0
  202. package/dist/locale-adapter.js +291 -0
  203. package/dist/locale-ajuda.js +86 -10
  204. package/dist/locale-audit.js +199 -0
  205. package/dist/locale-claims.js +213 -0
  206. package/dist/locale-conducao.js +138 -0
  207. package/dist/locale-conhecimento.js +181 -0
  208. package/dist/locale-decisao.js +205 -0
  209. package/dist/locale-docs.js +230 -0
  210. package/dist/locale-estado.js +101 -0
  211. package/dist/locale-forja.js +288 -0
  212. package/dist/locale-gerados.js +5 -0
  213. package/dist/locale-grafo.js +129 -0
  214. package/dist/locale-master.js +83 -0
  215. package/dist/locale-network.js +524 -0
  216. package/dist/locale-operacao-restante.js +931 -0
  217. package/dist/locale-projetos.js +100 -0
  218. package/dist/locale-prompts.js +194 -0
  219. package/dist/locale-pulse.js +140 -2
  220. package/dist/locale-reservas.js +87 -0
  221. package/dist/locale-retry.js +183 -6
  222. package/dist/locale-security-scan.js +69 -0
  223. package/dist/locale-setup.js +192 -0
  224. package/dist/locale-ship.js +177 -66
  225. package/dist/locale-thread.js +149 -5
  226. package/dist/locale-verify.js +80 -4
  227. package/dist/locale-worktree.js +246 -0
  228. package/dist/locale.js +553 -9
  229. package/dist/maestro-runtime.js +22 -3
  230. package/dist/manifest.js +293 -12
  231. package/dist/maquina-ociosa.js +211 -0
  232. package/dist/maquina.js +10 -5
  233. package/dist/master-nota-local.js +200 -0
  234. package/dist/master-nota.js +10 -2
  235. package/dist/master.js +118 -41
  236. package/dist/mcp-conhecimento.js +52 -0
  237. package/dist/mcp-experiencia.js +26 -5
  238. package/dist/mcp-install.js +90 -15
  239. package/dist/mcp-noctum.js +101 -0
  240. package/dist/mcp-server.js +116 -22
  241. package/dist/mcp-ship-transporte.js +977 -0
  242. package/dist/mcp-ship.js +68 -24
  243. package/dist/mcp-transportes.js +17 -0
  244. package/dist/memoria.js +63 -58
  245. package/dist/merge-da-entrega.js +85 -0
  246. package/dist/modos-migracao.js +8 -6
  247. package/dist/modos.js +17 -18
  248. package/dist/network-roadmap.js +94 -54
  249. package/dist/noctum-aceite.js +929 -0
  250. package/dist/noctum-arco.js +540 -33
  251. package/dist/noctum-capacidade.js +3 -3
  252. package/dist/noctum-changelog.js +399 -0
  253. package/dist/noctum-cli.js +539 -0
  254. package/dist/noctum-coordenacao.js +1225 -0
  255. package/dist/noctum-entrega.js +1217 -0
  256. package/dist/noctum-envelope.js +253 -17
  257. package/dist/noctum-execucao.js +100 -24
  258. package/dist/noctum-fechamento.js +416 -0
  259. package/dist/noctum-fila.js +49 -10
  260. package/dist/noctum-guarda.js +333 -0
  261. package/dist/noctum-integracao.js +507 -0
  262. package/dist/noctum-maquinas.js +387 -0
  263. package/dist/noctum-medicao.js +450 -0
  264. package/dist/noctum-modo.js +390 -0
  265. package/dist/noctum-pergunta-canal.js +96 -0
  266. package/dist/noctum-pergunta.js +115 -0
  267. package/dist/noctum-provas.js +838 -0
  268. package/dist/noctum-reconciliacao.js +594 -0
  269. package/dist/noctum-rede.js +102 -0
  270. package/dist/noctum-registro.js +215 -0
  271. package/dist/noctum-relatorio.js +861 -0
  272. package/dist/noctum-resposta.js +207 -0
  273. package/dist/noctum-retomada-rede.js +71 -0
  274. package/dist/noctum-sessoes-em-voo.js +93 -0
  275. package/dist/noctum-supervisao.js +649 -0
  276. package/dist/noctum-terminal.js +459 -0
  277. package/dist/noctum-transporte.js +655 -0
  278. package/dist/noctum-vigia.js +679 -0
  279. package/dist/ocupacao.js +3 -1
  280. package/dist/onboarding.js +16 -5
  281. package/dist/orkmind.js +39 -23
  282. package/dist/orquestracao.js +31 -35
  283. package/dist/parado-no-condutor.js +160 -139
  284. package/dist/phase.js +96 -42
  285. package/dist/policies.js +33 -0
  286. package/dist/postura-local.js +11 -6
  287. package/dist/preflight.js +2 -1
  288. package/dist/procedencia.js +9 -14
  289. package/dist/projeto-alvo.js +59 -20
  290. package/dist/prompts.js +136 -42
  291. package/dist/prova-minima.js +5 -6
  292. package/dist/pulse-cadencia.js +5 -4
  293. package/dist/pulse-consentimento.js +53 -1
  294. package/dist/pulse-delivery.js +143 -27
  295. package/dist/pulse-resposta.js +368 -4
  296. package/dist/pulse.js +136 -3
  297. package/dist/ratelimit.js +13 -4
  298. package/dist/recall.js +14 -13
  299. package/dist/rede-adesao.js +13 -8
  300. package/dist/rede-forja.js +108 -24
  301. package/dist/rede-status.js +63 -45
  302. package/dist/rede.js +86 -46
  303. package/dist/retomada-checkpoint.js +101 -0
  304. package/dist/retry.js +326 -78
  305. package/dist/roadmap-reservas.js +32 -32
  306. package/dist/runtime-ambiente.js +5 -0
  307. package/dist/runtime-context.js +279 -85
  308. package/dist/runtime-escada.js +429 -0
  309. package/dist/runtime-profiles.js +130 -63
  310. package/dist/runtimes.js +42 -5
  311. package/dist/saida-segura.js +3 -2
  312. package/dist/security-scan/agil.js +366 -0
  313. package/dist/security-scan/cli.js +76 -0
  314. package/dist/security-scan/compare.js +149 -0
  315. package/dist/security-scan/config.js +93 -0
  316. package/dist/security-scan/detect.js +97 -0
  317. package/dist/security-scan/executor.js +196 -0
  318. package/dist/security-scan/guard.js +180 -0
  319. package/dist/security-scan/imagem-de-lint.js +96 -0
  320. package/dist/security-scan/normalize/actionlint.js +12 -0
  321. package/dist/security-scan/normalize/eslint.js +12 -0
  322. package/dist/security-scan/normalize/gitleaks.js +13 -0
  323. package/dist/security-scan/normalize/golangci-lint.js +13 -0
  324. package/dist/security-scan/normalize/govulncheck.js +36 -0
  325. package/dist/security-scan/normalize/index.js +25 -0
  326. package/dist/security-scan/normalize/npm-audit.js +30 -0
  327. package/dist/security-scan/normalize/osv-scanner.js +32 -0
  328. package/dist/security-scan/normalize/oxlint.js +51 -0
  329. package/dist/security-scan/normalize/pip-audit.js +16 -0
  330. package/dist/security-scan/normalize/ruff.js +12 -0
  331. package/dist/security-scan/normalize/semgrep.js +20 -0
  332. package/dist/security-scan/normalize/trivy.js +33 -0
  333. package/dist/security-scan/normalize/util.js +204 -0
  334. package/dist/security-scan/normalize/zizmor.js +19 -0
  335. package/dist/security-scan/report.js +156 -0
  336. package/dist/security-scan/run.js +448 -0
  337. package/dist/security-scan/tools.js +62 -0
  338. package/dist/security-scan/trabalhador.js +74 -0
  339. package/dist/security-scan/types.js +15 -0
  340. package/dist/session-events.js +19 -2
  341. package/dist/session-watcher-claude.js +74 -19
  342. package/dist/session-watcher-grok.js +425 -0
  343. package/dist/session-watcher.js +174 -13
  344. package/dist/sessoes-contas.js +42 -5
  345. package/dist/sessoes-inventario.js +1 -1
  346. package/dist/sessoes.js +25 -23
  347. package/dist/setup.js +67 -66
  348. package/dist/ship-publicar.js +263 -92
  349. package/dist/ship.js +160 -17
  350. package/dist/superficie.js +14 -11
  351. package/dist/thread-close.js +9 -9
  352. package/dist/thread.js +121 -18
  353. package/dist/tokens.js +15 -11
  354. package/dist/trabalho-thread.js +297 -0
  355. package/dist/transporte-do-canal.js +189 -0
  356. package/dist/types.js +12 -1
  357. package/dist/util.js +5 -2
  358. package/dist/varredura-acoes.js +500 -0
  359. package/dist/verify.js +491 -32
  360. package/dist/worktree-local.js +12 -10
  361. package/dist/worktree.js +81 -85
  362. package/eval/casos/check-quality.json +77 -0
  363. package/eval/casos/security-auditor.json +148 -0
  364. package/eval/casos/security-remediation.json +161 -0
  365. package/eval/fixtures/security-scan/README.md +8 -0
  366. package/eval/fixtures/security-scan/go/.github/workflows/ci.yml +12 -0
  367. package/eval/fixtures/security-scan/go/Dockerfile +4 -0
  368. package/eval/fixtures/security-scan/go/README.md +4 -0
  369. package/eval/fixtures/security-scan/go/config.go +4 -0
  370. package/eval/fixtures/security-scan/go/go.mod +5 -0
  371. package/eval/fixtures/security-scan/go/go.sum +2 -0
  372. package/eval/fixtures/security-scan/go/main.go +31 -0
  373. package/eval/fixtures/security-scan/js/.github/workflows/ci.yml +12 -0
  374. package/eval/fixtures/security-scan/js/Dockerfile +3 -0
  375. package/eval/fixtures/security-scan/js/README.md +4 -0
  376. package/eval/fixtures/security-scan/js/package-lock.json +844 -0
  377. package/eval/fixtures/security-scan/js/package.json +10 -0
  378. package/eval/fixtures/security-scan/js/src/config.js +4 -0
  379. package/eval/fixtures/security-scan/js/src/server.js +17 -0
  380. package/eval/fixtures/security-scan/js/src/util.ts +4 -0
  381. package/eval/fixtures/security-scan/js/tsconfig.json +4 -0
  382. package/eval/fixtures/security-scan/python/.github/workflows/ci.yml +12 -0
  383. package/eval/fixtures/security-scan/python/Dockerfile +3 -0
  384. package/eval/fixtures/security-scan/python/README.md +4 -0
  385. package/eval/fixtures/security-scan/python/app/__init__.py +0 -0
  386. package/eval/fixtures/security-scan/python/app/config.py +2 -0
  387. package/eval/fixtures/security-scan/python/app/main.py +19 -0
  388. package/eval/fixtures/security-scan/python/requirements.txt +1 -0
  389. package/package.json +10 -5
  390. package/references/security-checklist.md +3 -3
  391. package/skills/README.md +1 -0
  392. package/skills/core/orkastery-bootstrap/SKILL.md +2 -2
  393. package/skills/phases/check-quality/SKILL.md +16 -0
  394. package/skills/phases/go-implementation/SKILL.md +6 -0
  395. package/skills/phases/security-remediation/SKILL.md +70 -0
  396. package/skills/reviewers/security-auditor/SKILL.md +25 -0
@@ -0,0 +1,101 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.FERRAMENTAS_DO_NOCTUM = void 0;
4
+ exports.registrarFerramentasDoNoctum = registrarFerramentasDoNoctum;
5
+ /**
6
+ * RM-058, fatia N6 (D12 da ork-rm058n6): as ferramentas do MCP que levam o pedido de abertura do arco até o núcleo e
7
+ * a autorização do dono pelo diálogo nativo do host.
8
+ *
9
+ * - `ork_noctum_propor`: o pedido de abertura vira proposta, com o resumo e o hash; não autoriza nada.
10
+ * - `ork_noctum_autorizar` e `ork_noctum_revogar`: o diálogo nativo do host (`criarDialogoDoArco` da N1, com a elicitação
11
+ * do servidor). Só identificadores nos argumentos, e o esquema recusa qualquer campo a mais: argumento de ferramenta
12
+ * nunca é resposta do dono. Sem formulário no cliente, a recusa vem antes de qualquer escrita.
13
+ * - `ork_noctum_status`: o retrato do arco, somente leitura.
14
+ *
15
+ * Nenhuma delas existe no servidor fixado numa thread (a sessão de fase): quem abre ou autoriza arco é o dono, nunca a
16
+ * sessão filha. A fronteira do diálogo é a de `criarIngressoLocal`: a instalação do cliente MCP é confiável e o modelo não
17
+ * responde por ela (limite dito na N1).
18
+ */
19
+ const zod_1 = require("zod");
20
+ const noctum_arco_1 = require("./noctum-arco");
21
+ const noctum_pergunta_1 = require("./noctum-pergunta");
22
+ const noctum_pergunta_canal_1 = require("./noctum-pergunta-canal");
23
+ const pulse_resposta_1 = require("./pulse-resposta");
24
+ const noctum_envelope_1 = require("./noctum-envelope");
25
+ const noctum_modo_1 = require("./noctum-modo");
26
+ exports.FERRAMENTAS_DO_NOCTUM = ['ork_noctum_propor', 'ork_noctum_autorizar', 'ork_noctum_revogar', 'ork_noctum_status'];
27
+ const resposta = (valor) => ({ content: [{ type: 'text', text: JSON.stringify(valor) }] });
28
+ const arco = zod_1.z.string().regex(noctum_envelope_1.ID_DO_ARCO);
29
+ function registrarFerramentasDoNoctum(registrar, o) {
30
+ const dialogo = (0, noctum_arco_1.criarDialogoDoArco)(o.raiz, { host: o.host, connectionId: o.conexao }, o.elicitar);
31
+ const exigirFormulario = () => {
32
+ if (!o.temFormulario()) {
33
+ throw Error('noctum.origem.sem-prova: este cliente não oferece o formulário nativo do host; o dono responde à pergunta do arco com a ' +
34
+ 'letra em reply no Telegram, com o código no Telegram, ou por um host com diálogo nativo');
35
+ }
36
+ };
37
+ registrar('ork_noctum_propor', {
38
+ description: 'Grava a proposta do envelope de um arco #Noctum (o pedido de abertura com os valores do dono: janela, destinos, ' +
39
+ 'orcamento, relatorio, trabalhos e capacidade) e devolve o resumo, o hash e a pergunta ao dono (codigo curto e alternativas), que sai ' +
40
+ 'tambem pelo canal dele. Nao autoriza nada: quem autoriza e o dono, respondendo a pergunta com a letra (em reply no Telegram, com o ' +
41
+ 'codigo no Telegram ou pelo dialogo nativo, ork_noctum_autorizar; o terminal nao grava resposta). Mostre a pergunta ao dono como ela vem; nunca responda por ele. Nunca ' +
42
+ 'invente valor do dono: campo que falta volta listado na recusa.',
43
+ inputSchema: zod_1.z.object({ pedido: zod_1.z.record(zod_1.z.unknown()) }).strict(),
44
+ annotations: { readOnlyHint: false, destructiveHint: false },
45
+ }, async ({ pedido }) => {
46
+ o.carregar();
47
+ // RM-057 (resposta curta, D4 e D9): a proposta é a pergunta ao dono, e ela sai também pelo canal dele quando ele tem um.
48
+ const quando = new Date().toISOString();
49
+ const r = (0, noctum_arco_1.proporEnvelope)(o.raiz, pedido, quando, (0, pulse_resposta_1.codigosEmUso)(o.raiz));
50
+ const q = r.codigo ? (0, noctum_arco_1.perguntasDoArco)(o.raiz, r.arco, quando).find(x => x.codigo === r.codigo && x.situacao === 'pendente') : undefined;
51
+ const entrega = q ? (0, noctum_pergunta_canal_1.entregarPerguntaDoArco)(o.raiz, q, { quando }) : null;
52
+ return resposta({ ...r, autorizado: false,
53
+ comoAutorizar: q ? (0, noctum_pergunta_canal_1.comoResponderAoArco)(q) : [`o envelope já vale no arco ${r.arco}: não há o que autorizar`],
54
+ pergunta: q ? { codigo: q.codigo, prazo: q.prazo, entrega,
55
+ texto: (0, noctum_pergunta_1.textoDaPerguntaDoArco)(q, 'terminal', { quando, ...(entrega?.numero ? { numero: entrega.numero } : {}) }) } : null });
56
+ });
57
+ registrar('ork_noctum_autorizar', {
58
+ description: 'Apresenta ao dono, pelo dialogo nativo do host, o envelope proposto do arco para autorizar. Somente o arco e o hash; ' +
59
+ 'nunca forneca resposta nos argumentos. Sem a escolha do dono no dialogo, nada muda.',
60
+ inputSchema: zod_1.z.object({ arco, envelopeSha256: zod_1.z.string().regex(/^[a-f0-9]{64}$/) }).strict(),
61
+ annotations: { readOnlyHint: false, destructiveHint: false },
62
+ }, async (args) => {
63
+ o.carregar();
64
+ exigirFormulario();
65
+ const e = await dialogo.autorizar(args.arco, args.envelopeSha256);
66
+ return resposta({ arco: e.arco, situacao: e.situacao, versao: e.versao, envelopeSha256: e.envelopeSha256 });
67
+ });
68
+ registrar('ork_noctum_revogar', {
69
+ description: 'Apresenta ao dono, pelo dialogo nativo do host, a revogacao do arco: terminal, nenhum efeito novo passa depois. Somente o ' +
70
+ 'arco; nunca forneca resposta nos argumentos.',
71
+ inputSchema: zod_1.z.object({ arco }).strict(),
72
+ annotations: { readOnlyHint: false, destructiveHint: true },
73
+ }, async (args) => {
74
+ o.carregar();
75
+ exigirFormulario();
76
+ const e = await dialogo.revogar(args.arco);
77
+ return resposta({ arco: e.arco, situacao: e.situacao, versao: e.versao, envelopeSha256: e.envelopeSha256 });
78
+ });
79
+ registrar('ork_noctum_status', {
80
+ description: 'Retrato de um arco #Noctum, somente leitura: situacao, janela, consumo medido por unidade com as lacunas, fila, ' +
81
+ 'fechamento, relatorio da manha com recibos e lacunas. Sem arco, a lista dos arcos. Transporte como vem: lacuna nao e zero.',
82
+ inputSchema: zod_1.z.object({ arco: arco.optional() }).strict(),
83
+ annotations: { readOnlyHint: true },
84
+ }, async (args) => {
85
+ const carregado = o.carregar();
86
+ if (!args.arco) {
87
+ return resposta({ arcos: (0, noctum_modo_1.listarArcos)(o.raiz).map(a => {
88
+ try {
89
+ return { arco: a, situacao: (0, noctum_arco_1.lerArco)(o.raiz, a)?.situacao ?? 'sem-proposta' };
90
+ }
91
+ catch {
92
+ return { arco: a, situacao: 'ilegivel' };
93
+ }
94
+ }) });
95
+ }
96
+ const r = (0, noctum_modo_1.retratoDoArco)(carregado, args.arco);
97
+ if (!r)
98
+ throw Error(`noctum.efeito.sem-autorizacao: o arco ${args.arco} não tem proposta`);
99
+ return resposta(r);
100
+ });
101
+ }
@@ -62,10 +62,13 @@ const network_roadmap_1 = require("./network-roadmap");
62
62
  const rede_status_1 = require("./rede-status");
63
63
  const hitl_sessions_1 = require("./hitl-sessions");
64
64
  const hitl_local_1 = require("./hitl-local");
65
+ const master_nota_local_1 = require("./master-nota-local");
66
+ const entrega_por_mod_1 = require("./entrega-por-mod");
65
67
  const mcp_artifacts_1 = require("./mcp-artifacts");
66
68
  const mcp_git_1 = require("./mcp-git");
67
69
  const preflight_1 = require("./preflight");
68
70
  const modos_1 = require("./modos");
71
+ const mcp_noctum_1 = require("./mcp-noctum");
69
72
  const versao_1 = require("./versao");
70
73
  const mcp_verify_1 = require("./mcp-verify");
71
74
  const conducao_1 = require("./conducao");
@@ -73,6 +76,7 @@ const fila_pesada_1 = require("./fila-pesada");
73
76
  const decisao_autonoma_1 = require("./decisao-autonoma");
74
77
  const conducao_texto_1 = require("./conducao-texto");
75
78
  const mcp_ship_1 = require("./mcp-ship");
79
+ const grok_1 = require("./adapters/grok");
76
80
  const company_brain_mcp_1 = require("./company-brain-mcp");
77
81
  const claude_bg_1 = require("./adapters/claude-bg");
78
82
  const session_watcher_claude_1 = require("./session-watcher-claude");
@@ -81,6 +85,8 @@ const mcp_maestro_1 = require("./mcp-maestro");
81
85
  const projeto_alvo_1 = require("./projeto-alvo");
82
86
  const mcp_experiencia_1 = require("./mcp-experiencia");
83
87
  const mcp_grafo_1 = require("./mcp-grafo");
88
+ const mcp_conhecimento_1 = require("./mcp-conhecimento");
89
+ const locale_1 = require("./locale");
84
90
  const identidade = zod_1.z.string().min(1).max(80).regex(/^[a-zA-Z0-9][a-zA-Z0-9._-]*$/);
85
91
  const daThread = zod_1.z.object({ threadId: identidade }).strict();
86
92
  const daDecisao = daThread.extend({ pedidoId: identidade }).strict();
@@ -108,7 +114,8 @@ const modoDeConducao = zod_1.z.string().trim().min(1).max(40)
108
114
  const nova = zod_1.z.object({ nome: zod_1.z.string().trim().min(1).max(200),
109
115
  modo: modoDeConducao.optional() }).strict();
110
116
  const fase = daThread.extend({ fase: zod_1.z.enum(['GOAL', 'PLAN', 'GO', 'CHECK', 'SHIP', 'MASTER']),
111
- prompt: zod_1.z.string().min(1).max(65536), runtime: zod_1.z.enum(['claude-bg', 'codex']).optional(),
117
+ // RM-067 (F4b): o grok tambem, como o --runtime do CLI, sempre com o model dele.
118
+ prompt: zod_1.z.string().min(1).max(65536), runtime: zod_1.z.enum(['claude-bg', 'codex', 'grok']).optional(),
112
119
  model: zod_1.z.string().trim().min(1).max(200).optional(),
113
120
  effort: zod_1.z.enum(['low', 'medium', 'high', 'xhigh', 'max']).optional(),
114
121
  // RM-056 (D1): o perfil pedido, validado contra o store pelo mesmo caminho do CLI.
@@ -120,8 +127,11 @@ const resposta = (valor) => ({ content: [{ type: 'text', text: JSON.stringify(va
120
127
  function criarServidorMcp(opcoes) {
121
128
  if (!path.isAbsolute(opcoes.projeto))
122
129
  throw Error('mcp.project.invalid: raiz absoluta obrigatoria');
123
- if (!['claude-code', 'codex'].includes(opcoes.host))
130
+ if (!['claude-code', 'codex', 'grok'].includes(opcoes.host))
124
131
  throw Error('mcp.host.invalid');
132
+ // RM-067 (F4b, G1): o servidor do grok so serve a sessao filha; o despacho grava --thread na config da worktree.
133
+ if (opcoes.host === 'grok' && opcoes.threadId === undefined)
134
+ throw Error('mcp.host.child-only: --host grok serve so a sessao filha vinculada a uma thread (--thread), que o despacho do ork grava na config da worktree');
125
135
  if (opcoes.permissoesFilho !== undefined && !['interactive', 'worktree'].includes(opcoes.permissoesFilho))
126
136
  throw Error('mcp.child-permissions.invalid');
127
137
  if (opcoes.threadId !== undefined)
@@ -182,6 +192,18 @@ function criarServidorMcp(opcoes) {
182
192
  };
183
193
  if (opcoes.threadId)
184
194
  thread(opcoes.threadId);
195
+ // RM-067 (F4b, G1): o servidor do grok lista so as ferramentas do perfil filho; o headless nao aprova outra em dialogo.
196
+ const doGrok = opcoes.host === 'grok'
197
+ ? new Set((0, grok_1.ferramentasServidasAoGrok)(opcoes.permissoesFilho ?? 'interactive', (0, mcp_grafo_1.grafoLigado)((0, manifest_1.exigirManifesto)(raiz).manifesto))) : null;
198
+ // RM-067 (F4c, D4): a lista do despacho e um subconjunto da uniao do perfil filho; fora dela, ou sem o host grok, recusa.
199
+ if (opcoes.ferramentas !== undefined) {
200
+ const pedidas = opcoes.ferramentas;
201
+ if (!doGrok || pedidas.some(n => !doGrok.has(n)) || new Set(pedidas).size !== pedidas.length)
202
+ throw Error('mcp.tools.invalid: a lista do despacho sai do perfil filho do grok');
203
+ for (const nome of [...doGrok])
204
+ if (!pedidas.includes(nome))
205
+ doGrok.delete(nome);
206
+ }
185
207
  const pendencias = (id) => {
186
208
  const t = thread(id), eventos = (0, ledger_1.lerLedger)((0, thread_1.dirThread)(raiz, id)), contexto = (0, hitl_gates_1.contextoHitl)(raiz, id);
187
209
  const pedidos = [(0, hitl_presentation_1.pedidoHitlAberto)(raiz, id, t.faseAtual, null),
@@ -190,7 +212,7 @@ function criarServidorMcp(opcoes) {
190
212
  // e so ele. Nenhum outro canal mcp-local sai `disponivel` daqui por suposicao.
191
213
  return pedidos.filter(p => p && eventos.some(e => e.tipo === 'hitl_requested' && e.contexto === contexto &&
192
214
  e.pedido?.id === p.id)).map(p => ({ pedido: p, estado: (0, hitl_contract_1.estadoDoPedido)(p),
193
- canais: (0, hitl_presentation_1.ofertaDoPedido)(p, [opcoes.host]), prazoLocal: (0, hitl_presentation_1.prazoLocalDoPedido)(p) }));
215
+ canais: (0, hitl_presentation_1.ofertaDoPedido)(p, opcoes.host === 'grok' ? [] : [opcoes.host]), prazoLocal: (0, hitl_presentation_1.prazoLocalDoPedido)(p) }));
194
216
  };
195
217
  const fases = (id) => {
196
218
  thread(id);
@@ -327,7 +349,9 @@ function criarServidorMcp(opcoes) {
327
349
  .describe('Nome ou abbrev do projeto pedido; este servidor atende somente o projeto fixado na instalacao');
328
350
  const ferramentas = new Map();
329
351
  function registrarTool(nome, config, executar) {
330
- if (opcoes.threadId && ['ork_thread_new', 'ork_phase_run', 'ork_request_decision', 'ork_preflight'].includes(nome))
352
+ if (opcoes.threadId && ['ork_thread_new', 'ork_phase_run', 'ork_request_decision', 'ork_request_master_note', 'ork_preflight'].includes(nome))
353
+ return;
354
+ if (doGrok && !doGrok.has(nome))
331
355
  return;
332
356
  const entrada = config.inputSchema.extend({ projeto: campoProjeto.optional() });
333
357
  const schema = converterSchema(entrada, { $refStrategy: 'none' });
@@ -342,6 +366,7 @@ function criarServidorMcp(opcoes) {
342
366
  }
343
367
  server.setRequestHandler(types_js_1.ListToolsRequestSchema, async () => ({ tools: [...ferramentas.values()].map(f => f.tool) }));
344
368
  server.setRequestHandler(types_js_1.CallToolRequestSchema, async (request, extra) => {
369
+ opcoes.emCurso?.(1);
345
370
  try {
346
371
  const f = ferramentas.get(request.params.name);
347
372
  if (!f)
@@ -353,8 +378,16 @@ function criarServidorMcp(opcoes) {
353
378
  return { ...resposta(e.recusa), isError: true };
354
379
  return { ...resposta({ erro: e.message }), isError: true };
355
380
  }
381
+ finally {
382
+ opcoes.emCurso?.(-1);
383
+ }
356
384
  });
357
- const ingresso = (0, hitl_local_1.criarIngressoLocal)(raiz, { host: opcoes.host, connectionId: (0, node_crypto_1.randomUUID)() }, async (pedido, signal) => {
385
+ const conexaoLocal = (0, node_crypto_1.randomUUID)();
386
+ // RM-059 (F9, G3): a caixa de saida do Mensageiro de Sessoes so existe no servidor do dono do Claude Code, na memoria:
387
+ // a resposta a uma sessao claude-bg que entra pelo dialogo deste servidor sai por ela, e o texto nunca vai a disco.
388
+ const caixa = opcoes.host === 'claude-code' && !opcoes.threadId ? (0, entrega_por_mod_1.novaCaixaDeSaida)() : null;
389
+ // RM-067 (F4b, G5): o headless do grok nao tem dialogo, e a sessao filha nao pede decisao nem nota: sem ingresso local.
390
+ const ingresso = opcoes.host === 'grok' ? null : (0, hitl_local_1.criarIngressoLocal)(raiz, { host: opcoes.host, connectionId: conexaoLocal }, async (pedido, signal) => {
358
391
  carregar();
359
392
  thread(pedido.thread);
360
393
  // D12: pergunta nativa que aceita texto NAO vira menu. Um menu sobre pergunta aberta
@@ -376,11 +409,33 @@ function criarServidorMcp(opcoes) {
376
409
  return { action: r.action };
377
410
  const parsed = zod_1.z.object({ opcao: zod_1.z.string().min(1).max(limite) }).strict().parse(r.content);
378
411
  return { action: 'accept', content: parsed };
379
- });
380
- server.onclose = () => ingresso.fechar();
412
+ }, { caixa });
413
+ // RM-059 (fatia F8, T8.1): a nota do MASTER pelo mesmo ingresso local. O formulario e fixo (a nota de 0 a 5 e o
414
+ // porque); sem a capacidade de formulario no cliente, a recusa vem antes de qualquer escrita.
415
+ const ingressoDaNota = opcoes.host === 'grok' ? null : (0, master_nota_local_1.criarIngressoDaNota)(raiz, { host: opcoes.host, connectionId: conexaoLocal }, async (apresentacao, signal) => {
416
+ carregar();
417
+ thread(apresentacao.thread);
418
+ const r = await server.elicitInput({ mode: 'form', message: apresentacao.mensagem,
419
+ requestedSchema: apresentacao.esquema }, { signal, timeout: 300000 });
420
+ return r.action === 'accept' ? { action: 'accept', content: r.content } : { action: r.action };
421
+ }, () => Boolean(server.getClientCapabilities()?.elicitation?.form));
422
+ server.onclose = () => { ingresso?.fechar(); ingressoDaNota?.fechar(); };
381
423
  (0, company_brain_mcp_1.registerBrainTools)(registrarTool, carregar, thread, opcoes.brainWrites ?? []);
382
424
  (0, mcp_experiencia_1.registrarConsultasExperiencia)(registrarTool, { raiz, carregar, transporte: opcoes.transporteShip ?? 'github-ssh' });
425
+ // RM-026 K7 (fatia 2): o conhecimento escrito, só leitura, do projeto fixado; também na sessão filha vinculada.
426
+ (0, mcp_conhecimento_1.registrarConsultasDoConhecimento)(registrarTool, carregar);
383
427
  (0, mcp_maestro_1.registerMaestro)(registrarTool, { root: raiz, threadId: opcoes.threadId, load: carregar, checkThread: thread, tools: () => [...ferramentas.keys()] });
428
+ // RM-058 N6 (D12): o arco #Noctum no host do dono, com o dialogo nativo deste servidor; nunca na sessao de fase.
429
+ if (!opcoes.threadId)
430
+ (0, mcp_noctum_1.registrarFerramentasDoNoctum)(registrarTool, { raiz, carregar, host: opcoes.host, conexao: conexaoLocal,
431
+ elicitar: async (a, signal) => {
432
+ // RM-057 (resposta curta, D7 da ork-rm057respost): a pergunta no contrato curto e o envelope inteiro abaixo dela.
433
+ const r = await server.elicitInput({ mode: 'form', message: a.mensagem,
434
+ requestedSchema: { type: 'object', properties: { opcao: { type: 'string', title: 'Sua decisão', oneOf: a.opcoes.map(x => ({ const: x, title: x })) } },
435
+ required: ['opcao'] } }, { signal, timeout: 300000 });
436
+ return r.action === 'accept' ? { action: 'accept', content: r.content } : { action: r.action };
437
+ },
438
+ temFormulario: () => Boolean(server.getClientCapabilities()?.elicitation?.form) });
384
439
  registrarTool('ork_preflight', { description: 'Preflight contextual por modo e bloco, sem inventário global/modelos. Não autoriza despacho nem comprova entrega.',
385
440
  inputSchema: zod_1.z.object({ modo: modoDeConducao }).strict(), annotations: { readOnlyHint: true } }, async ({ modo }) => {
386
441
  carregar();
@@ -454,15 +509,18 @@ function criarServidorMcp(opcoes) {
454
509
  annotations: { readOnlyHint: false, destructiveHint: false } }, async ({ threadId, ...e }) => {
455
510
  thread(threadId);
456
511
  livre(threadId);
457
- // A sessao decide por ela: o rastro nao pode nascer assinado em nome do dono.
458
- if (/^\s*(?:o\s+|a\s+)?(?:dono|owner|builder|maestro)\b/i.test(e.quemDecidiu))
459
- throw Error('mcp.decision.author: quemDecidiu e a sessao que decidiu, nunca o dono');
512
+ const locale = (0, locale_1.resolverLocale)(carregar().manifesto.owner?.language).locale;
460
513
  let registro;
461
514
  try {
462
- registro = (0, decisao_autonoma_1.registrarDecisao)(raiz, threadId, { decidido: e.decidido, porque: e.porque, comoMudar: e.comoMudar,
463
- custoDeReverter: { agora: e.custoAgora, depois: e.custoDepois }, criterio: e.criterio, quemDecidiu: e.quemDecidiu,
464
- evidencia: e.evidencia, ...(e.razao ? { razao: e.razao } : {}), ...(e.reverte ? { reverte: e.reverte } : {}), origem: 'mcp', host: opcoes.host,
465
- despacho: opcoes.dispatchId ?? null });
515
+ registro = (0, locale_1.comLocale)(locale, () => {
516
+ // A sessao decide por ela: o rastro nao pode nascer assinado em nome do dono.
517
+ if (/^\s*(?:o\s+|a\s+)?(?:dono|owner|builder|maestro)\b/i.test(e.quemDecidiu))
518
+ throw new locale_1.ErroDoCatalogo((m) => m.decisao.autorMcp);
519
+ return (0, decisao_autonoma_1.registrarDecisao)(raiz, threadId, { decidido: e.decidido, porque: e.porque, comoMudar: e.comoMudar,
520
+ custoDeReverter: { agora: e.custoAgora, depois: e.custoDepois }, criterio: e.criterio, quemDecidiu: e.quemDecidiu,
521
+ evidencia: e.evidencia, ...(e.razao ? { razao: e.razao } : {}), ...(e.reverte ? { reverte: e.reverte } : {}), origem: 'mcp', host: opcoes.host,
522
+ despacho: opcoes.dispatchId ?? null });
523
+ });
466
524
  }
467
525
  catch (erro) {
468
526
  throw Error((0, hitl_contract_1.recusaNaSuperficie)(erro.message, hitl_contract_1.CAMPOS_DA_DECISAO_NO_MCP));
@@ -507,9 +565,11 @@ function criarServidorMcp(opcoes) {
507
565
  */
508
566
  registrarTool('ork_network_roadmap', { description: 'Roadmap da rede do projeto servido, somente leitura: o status report do roadmap (RM-048) com as threads de TODAS as maquinas, as reservas, as threads por maquina com a idade da batida, a fonte e a hora de cada parte e as lacunas tipadas. E a fonte do status do roadmap: transporte o texto como vem, sem reescrever nem resumir. Lacuna e "Nao consultado" sao o que nao foi lido: nunca conclua "roadmap vazio" nem "nenhuma maquina publicou" a partir deles. Este servidor le so o projeto fixado; os outros projetos vem do CLI ork network roadmap.',
509
567
  inputSchema: zod_1.z.object({}).strict(), annotations: { readOnlyHint: true, destructiveHint: false, openWorldHint: true } }, async () => {
510
- carregar();
511
- const panorama = (0, network_roadmap_1.montarPanoramaDaRede)({ fixado: raiz });
512
- return resposta({ texto: (0, network_roadmap_1.textoDoPanoramaDaRede)(panorama), panorama });
568
+ const c = carregar();
569
+ // O panorama devolvido continua no contrato pt-BR; somente o texto humano segue o dono.
570
+ const panorama = (0, locale_1.comLocale)('pt-BR', () => (0, network_roadmap_1.montarPanoramaDaRede)({ fixado: raiz }));
571
+ const locale = (0, locale_1.resolverLocale)(c.manifesto.owner?.language).locale;
572
+ return resposta({ texto: (0, locale_1.comLocale)(locale, () => (0, network_roadmap_1.textoDoPanoramaDaRede)(panorama)), panorama });
513
573
  });
514
574
  /**
515
575
  * RM-054 (fatia 3): as maquinas da pessoa (RM-053, `ork.rede-status/v1`), com a fonte, a batida e as
@@ -559,11 +619,45 @@ function criarServidorMcp(opcoes) {
559
619
  livre(threadId);
560
620
  return resposta((0, hitl_gates_1.abrirPedidoGate)(raiz, threadId, motivo));
561
621
  });
562
- registrarTool('ork_request_decision', { description: 'Apresenta pedido existente ao dono por dialogo nativo. Somente IDs; nunca forneca resposta nos argumentos.',
563
- inputSchema: daDecisao, annotations: { readOnlyHint: false, destructiveHint: false } }, async ({ threadId, pedidoId }, extra) => {
564
- thread(threadId);
565
- return resposta(await ingresso.solicitar(threadId, pedidoId, extra.signal));
566
- });
622
+ if (ingresso)
623
+ registrarTool('ork_request_decision', { description: 'Apresenta pedido existente ao dono por dialogo nativo. Somente IDs; nunca forneca resposta nos argumentos.',
624
+ inputSchema: daDecisao, annotations: { readOnlyHint: false, destructiveHint: false } }, async ({ threadId, pedidoId }, extra) => {
625
+ thread(threadId);
626
+ return resposta(await ingresso.solicitar(threadId, pedidoId, extra.signal));
627
+ });
628
+ if (ingressoDaNota)
629
+ registrarTool('ork_request_master_note', { description: 'Pede ao dono, pelo dialogo nativo do host, a nota de 0 a 5 e o porque de uma entrega. Somente o threadId; nunca forneca nota nem porque nos argumentos.',
630
+ inputSchema: daThread, annotations: { readOnlyHint: false, destructiveHint: false } }, async ({ threadId }, extra) => {
631
+ thread(threadId);
632
+ return resposta(await ingressoDaNota.solicitar(threadId, extra.signal));
633
+ });
634
+ // RM-059 (F9, T9.1): o Mensageiro de Sessoes nas duas pontas. Nenhuma das duas entra no --allowedTools do modelo (D8):
635
+ // quem chama e o mod ork-mensageiro, e nenhuma responde, aprova ou abre pedido.
636
+ if (caixa)
637
+ registrarTool('ork_session_outbox', { description: 'Caixa de saida do Mensageiro de Sessoes nesta sessao do dono: lista as respostas do dono que esperam ir a uma sessao de fase claude-bg (listar marca o Mensageiro vivo) e anota o resultado do envio. Nao responde, nao aprova nem abre pedido.',
638
+ inputSchema: zod_1.z.object({ operacao: zod_1.z.enum(['listar', 'enviada']), threadId: identidade.optional(), envioId: zod_1.z.string().uuid().optional(),
639
+ entregue: zod_1.z.boolean().optional(), motivo: zod_1.z.string().max(1000).optional() }).strict(),
640
+ annotations: { readOnlyHint: false, destructiveHint: false } }, async (args) => {
641
+ if (args.operacao === 'listar') {
642
+ carregar();
643
+ return resposta({ contrato: entrega_por_mod_1.CONTRATO_DA_ENTREGA, entregas: caixa.listar(raiz) });
644
+ }
645
+ if (!args.threadId || !args.envioId || args.entregue === undefined)
646
+ throw Error('mcp.outbox.args: enviada exige threadId, envioId e entregue');
647
+ thread(args.threadId);
648
+ return resposta({ contrato: entrega_por_mod_1.CONTRATO_DA_ENTREGA, entrega: caixa.anotarEnvio(raiz, args.threadId, args.envioId, args.entregue, args.motivo) });
649
+ });
650
+ if (opcoes.threadId && opcoes.dispatchId) {
651
+ const despacho = opcoes.dispatchId;
652
+ registrarTool('ork_session_inbox', { description: 'Lado receptor do Mensageiro de Sessoes na sessao de fase deste despacho: confere e reserva uma vez a resposta do dono que chegou de outra sessao (conferir, com o prazo ate) e, depois de ela entrar na fila, grava o recibo (confirmar). A sessao sai do despacho deste servidor, nunca de argumento. Nao responde nem aprova pedido.',
653
+ inputSchema: daThread.extend({ operacao: zod_1.z.enum(['conferir', 'confirmar']), texto: zod_1.z.string().max(entrega_por_mod_1.LIMITE_DA_MENSAGEM),
654
+ envioId: zod_1.z.string().uuid().optional(), ate: zod_1.z.string().max(40).optional() }).strict(),
655
+ annotations: { readOnlyHint: false, destructiveHint: false } }, async ({ threadId, operacao, texto, envioId, ate }) => {
656
+ thread(threadId);
657
+ return resposta(operacao === 'conferir' ? (0, entrega_por_mod_1.conferirNoReceptor)(raiz, threadId, despacho, texto, ate)
658
+ : (0, entrega_por_mod_1.confirmarNoReceptor)(raiz, threadId, despacho, envioId, texto));
659
+ });
660
+ }
567
661
  // RM-031 KG5 (D2): as tools do grafo so existem com a flag do manifesto da raiz no startup; sem ela, nada muda.
568
662
  // CHECK rodada 1 (S8): o startup le so o manifesto, como antes; as conferencias de estado ficam na chamada.
569
663
  if ((0, mcp_grafo_1.grafoLigado)((0, manifest_1.exigirManifesto)(raiz).manifesto))