@orkastery/cli 0.5.3 → 0.6.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (502) hide show
  1. package/adapters/README.md +18 -0
  2. package/adapters/claude-code/.claude-plugin/plugin.json +1 -0
  3. package/adapters/claude-code/README.md +195 -5
  4. package/adapters/claude-code/agents/ork-check.md +1 -0
  5. package/adapters/claude-code/agents/ork-go.md +1 -0
  6. package/adapters/claude-code/agents/ork-goal.md +1 -0
  7. package/adapters/claude-code/agents/ork-master.md +1 -0
  8. package/adapters/claude-code/agents/ork-plan.md +1 -0
  9. package/adapters/claude-code/agents/ork-ship.md +1 -0
  10. package/adapters/claude-code/hooks/hooks.json +2 -1
  11. package/adapters/claude-code/hooks/ork-guard.js +15 -1
  12. package/adapters/claude-code/hooks/ork-resposta.js +91 -0
  13. package/adapters/claude-code/hooks/ork-sensor.js +18 -2
  14. package/adapters/claude-code/hooks/quota-signal.js +14 -0
  15. package/adapters/claude-code/mods/autoridade.json +56 -0
  16. package/adapters/claude-code/mods/ork-clima/.claude-plugin/plugin.json +14 -0
  17. package/adapters/claude-code/mods/ork-clima/hooks/contas.ts +283 -0
  18. package/adapters/claude-code/mods/ork-clima/hooks/hooks.json +3 -0
  19. package/adapters/claude-code/mods/ork-clima/hooks/previsao.ts +393 -0
  20. package/adapters/claude-code/mods/ork-clima/hooks/register.ts +205 -0
  21. package/adapters/claude-code/mods/ork-clima/orkastery-mod.json +5 -0
  22. package/adapters/claude-code/mods/ork-clima/types/index.d.ts +80 -0
  23. package/adapters/claude-code/mods/ork-freio/.claude-plugin/plugin.json +14 -0
  24. package/adapters/claude-code/mods/ork-freio/hooks/carga.ts +160 -0
  25. package/adapters/claude-code/mods/ork-freio/hooks/conferencia.ts +309 -0
  26. package/adapters/claude-code/mods/ork-freio/hooks/hooks.json +3 -0
  27. package/adapters/claude-code/mods/ork-freio/hooks/lote.ts +270 -0
  28. package/adapters/claude-code/mods/ork-freio/hooks/register.ts +285 -0
  29. package/adapters/claude-code/mods/ork-freio/orkastery-mod.json +5 -0
  30. package/adapters/claude-code/mods/ork-freio/types/index.d.ts +127 -0
  31. package/adapters/claude-code/mods/ork-mensageiro/.claude-plugin/plugin.json +14 -0
  32. package/adapters/claude-code/mods/ork-mensageiro/hooks/caixa.ts +215 -0
  33. package/adapters/claude-code/mods/ork-mensageiro/hooks/hooks.json +3 -0
  34. package/adapters/claude-code/mods/ork-mensageiro/hooks/painel.tsx +165 -0
  35. package/adapters/claude-code/mods/ork-mensageiro/hooks/recepcao.ts +256 -0
  36. package/adapters/claude-code/mods/ork-mensageiro/hooks/register.tsx +481 -0
  37. package/adapters/claude-code/mods/ork-mensageiro/orkastery-mod.json +5 -0
  38. package/adapters/claude-code/mods/ork-mensageiro/types/index.d.ts +85 -0
  39. package/adapters/claude-code/mods/ork-mesa/.claude-plugin/plugin.json +14 -0
  40. package/adapters/claude-code/mods/ork-mesa/hooks/cartoes.tsx +246 -0
  41. package/adapters/claude-code/mods/ork-mesa/hooks/decidir.ts +110 -0
  42. package/adapters/claude-code/mods/ork-mesa/hooks/fila.ts +253 -0
  43. package/adapters/claude-code/mods/ork-mesa/hooks/hooks.json +3 -0
  44. package/adapters/claude-code/mods/ork-mesa/hooks/obvia.ts +98 -0
  45. package/adapters/claude-code/mods/ork-mesa/hooks/register.tsx +493 -0
  46. package/adapters/claude-code/mods/ork-mesa/orkastery-mod.json +5 -0
  47. package/adapters/claude-code/mods/ork-mesa/types/index.d.ts +131 -0
  48. package/adapters/claude-code/mods/ork-pista/.claude-plugin/plugin.json +14 -0
  49. package/adapters/claude-code/mods/ork-pista/hooks/acoes.ts +71 -0
  50. package/adapters/claude-code/mods/ork-pista/hooks/ci.ts +121 -0
  51. package/adapters/claude-code/mods/ork-pista/hooks/hooks.json +3 -0
  52. package/adapters/claude-code/mods/ork-pista/hooks/pista.tsx +356 -0
  53. package/adapters/claude-code/mods/ork-pista/hooks/register.tsx +439 -0
  54. package/adapters/claude-code/mods/ork-pista/orkastery-mod.json +5 -0
  55. package/adapters/claude-code/mods/ork-pista/types/index.d.ts +85 -0
  56. package/adapters/claude-code/mods/ork-ponte/.claude-plugin/plugin.json +13 -0
  57. package/adapters/claude-code/mods/ork-ponte/hooks/faixa.tsx +57 -0
  58. package/adapters/claude-code/mods/ork-ponte/hooks/guarda.ts +410 -0
  59. package/adapters/claude-code/mods/ork-ponte/hooks/hooks.json +3 -0
  60. package/adapters/claude-code/mods/ork-ponte/hooks/mostrado.ts +55 -0
  61. package/adapters/claude-code/mods/ork-ponte/hooks/nucleo.ts +157 -0
  62. package/adapters/claude-code/mods/ork-ponte/hooks/papel.ts +42 -0
  63. package/adapters/claude-code/mods/ork-ponte/hooks/register.ts +331 -0
  64. package/adapters/claude-code/mods/ork-ponte/hooks/vigia.ts +76 -0
  65. package/adapters/claude-code/mods/ork-ponte/orkastery-mod.json +5 -0
  66. package/adapters/claude-code/mods/ork-ponte/types/index.d.ts +178 -0
  67. package/adapters/claude-code/mods/ork-portao/.claude-plugin/plugin.json +14 -0
  68. package/adapters/claude-code/mods/ork-portao/hooks/hooks.json +3 -0
  69. package/adapters/claude-code/mods/ork-portao/hooks/lease.ts +201 -0
  70. package/adapters/claude-code/mods/ork-portao/hooks/plano.ts +304 -0
  71. package/adapters/claude-code/mods/ork-portao/hooks/register.ts +339 -0
  72. package/adapters/claude-code/mods/ork-portao/hooks/verify.ts +152 -0
  73. package/adapters/claude-code/mods/ork-portao/orkastery-mod.json +5 -0
  74. package/adapters/claude-code/mods/ork-portao/types/index.d.ts +60 -0
  75. package/adapters/claude-code/mods/ork-radar/.claude-plugin/plugin.json +14 -0
  76. package/adapters/claude-code/mods/ork-radar/hooks/colisao.ts +420 -0
  77. package/adapters/claude-code/mods/ork-radar/hooks/hooks.json +3 -0
  78. package/adapters/claude-code/mods/ork-radar/hooks/mapa.tsx +322 -0
  79. package/adapters/claude-code/mods/ork-radar/hooks/register.tsx +470 -0
  80. package/adapters/claude-code/mods/ork-radar/orkastery-mod.json +5 -0
  81. package/adapters/claude-code/mods/ork-radar/types/index.d.ts +72 -0
  82. package/adapters/claude-code/mods/ork-ritual/.claude-plugin/plugin.json +14 -0
  83. package/adapters/claude-code/mods/ork-ritual/hooks/hooks.json +3 -0
  84. package/adapters/claude-code/mods/ork-ritual/hooks/nota.ts +88 -0
  85. package/adapters/claude-code/mods/ork-ritual/hooks/register.tsx +494 -0
  86. package/adapters/claude-code/mods/ork-ritual/hooks/replay.tsx +271 -0
  87. package/adapters/claude-code/mods/ork-ritual/hooks/ritual.ts +218 -0
  88. package/adapters/claude-code/mods/ork-ritual/orkastery-mod.json +5 -0
  89. package/adapters/claude-code/mods/ork-ritual/types/index.d.ts +106 -0
  90. package/adapters/claude-code/mods/ork-sentinela/.claude-plugin/plugin.json +14 -0
  91. package/adapters/claude-code/mods/ork-sentinela/hooks/alertas.ts +85 -0
  92. package/adapters/claude-code/mods/ork-sentinela/hooks/despacho.ts +156 -0
  93. package/adapters/claude-code/mods/ork-sentinela/hooks/hooks.json +3 -0
  94. package/adapters/claude-code/mods/ork-sentinela/hooks/register.ts +511 -0
  95. package/adapters/claude-code/mods/ork-sentinela/hooks/vigia.ts +186 -0
  96. package/adapters/claude-code/mods/ork-sentinela/orkastery-mod.json +5 -0
  97. package/adapters/claude-code/mods/ork-sentinela/types/index.d.ts +65 -0
  98. package/adapters/claude-code/mods/ork-torre/.claude-plugin/plugin.json +14 -0
  99. package/adapters/claude-code/mods/ork-torre/hooks/agenda.ts +60 -0
  100. package/adapters/claude-code/mods/ork-torre/hooks/detalhe.tsx +236 -0
  101. package/adapters/claude-code/mods/ork-torre/hooks/frases.ts +42 -0
  102. package/adapters/claude-code/mods/ork-torre/hooks/hooks.json +3 -0
  103. package/adapters/claude-code/mods/ork-torre/hooks/painel.tsx +344 -0
  104. package/adapters/claude-code/mods/ork-torre/hooks/rede.ts +97 -0
  105. package/adapters/claude-code/mods/ork-torre/hooks/register.tsx +437 -0
  106. package/adapters/claude-code/mods/ork-torre/orkastery-mod.json +5 -0
  107. package/adapters/claude-code/mods/ork-torre/types/index.d.ts +108 -0
  108. package/adapters/codex/skills/ork/SKILL.md +2 -0
  109. package/adapters/hermes/README.md +64 -1
  110. package/adapters/hermes/bin/ork-conhecimento-colecoes.sh +14 -0
  111. package/adapters/hermes/bin/ork-conhecimento-listar.sh +15 -0
  112. package/adapters/hermes/bin/ork-conhecimento-mostrar.sh +16 -0
  113. package/adapters/hermes/bin/ork-conhecimento-verificar.sh +15 -0
  114. package/adapters/hermes/bin/ork-vigia-batida.py +127 -0
  115. package/adapters/hermes/hermes.plugin.json +4 -0
  116. package/adapters/hermes/hitl-ingress/__init__.py +101 -8
  117. package/adapters/hermes/skills/orkastery-devmaster/SKILL.md +3 -3
  118. package/adapters/openclaw/README.md +83 -10
  119. package/adapters/openclaw/bin/ork-vigia-batida.js +86 -0
  120. package/adapters/openclaw/dist/hitl-ingress.js +106 -9
  121. package/adapters/openclaw/dist/index.js +86 -0
  122. package/adapters/openclaw/openclaw.plugin.json +34 -4
  123. package/adapters/openclaw/package.json +2 -2
  124. package/adapters/openclaw/src/hitl-ingress.ts +103 -9
  125. package/adapters/openclaw/src/index.ts +94 -0
  126. package/assets/adapters-en/claude-code/README.md +403 -0
  127. package/assets/adapters-en/claude-code/agents/ork-check.md +33 -0
  128. package/assets/adapters-en/claude-code/agents/ork-go.md +33 -0
  129. package/assets/adapters-en/claude-code/agents/ork-goal.md +34 -0
  130. package/assets/adapters-en/claude-code/agents/ork-master.md +35 -0
  131. package/assets/adapters-en/claude-code/agents/ork-plan.md +33 -0
  132. package/assets/adapters-en/claude-code/agents/ork-ship.md +33 -0
  133. package/assets/adapters-en/claude-code/commands/check.md +46 -0
  134. package/assets/adapters-en/claude-code/commands/go.md +46 -0
  135. package/assets/adapters-en/claude-code/commands/goal.md +55 -0
  136. package/assets/adapters-en/claude-code/commands/master.md +54 -0
  137. package/assets/adapters-en/claude-code/commands/onboarding.md +22 -0
  138. package/assets/adapters-en/claude-code/commands/ork.md +126 -0
  139. package/assets/adapters-en/claude-code/commands/plan.md +47 -0
  140. package/assets/adapters-en/claude-code/commands/ship.md +45 -0
  141. package/assets/adapters-en/codex/skills/ork/SKILL.md +85 -0
  142. package/assets/adapters-en/hermes/README.md +273 -0
  143. package/assets/adapters-en/hermes/skills/orkastery-devmaster/SKILL.md +169 -0
  144. package/assets/docs-en/markdownlint-cli2.jsonc +22 -0
  145. package/assets/docs-en/padroes/documentacao-de-produto.md +135 -0
  146. package/assets/docs-en/padroes/roadmap-de-produto.md +100 -0
  147. package/assets/docs-en/produto/README.md +14 -0
  148. package/assets/docs-en/produto/_modelo-feature.md +62 -0
  149. package/assets/docs-en/roadmap/README.md +14 -0
  150. package/assets/docs-en/roadmap/_modelo-item.md +75 -0
  151. package/assets/references-en/README.md +25 -0
  152. package/assets/references-en/code-review-axes.md +82 -0
  153. package/assets/references-en/definition-of-done.md +74 -0
  154. package/assets/references-en/performance-checklist.md +53 -0
  155. package/assets/references-en/security-checklist.md +101 -0
  156. package/assets/references-en/testing-patterns.md +51 -0
  157. package/assets/security-scan/defaults/.golangci.yml +2 -0
  158. package/assets/security-scan/defaults/eslint.config.mjs +11 -0
  159. package/assets/security-scan/defaults/gitleaks.toml +3 -0
  160. package/assets/security-scan/defaults/ruff.toml +1 -0
  161. package/assets/security-scan/tools-agil.json +87 -0
  162. package/assets/security-scan/tools.json +625 -0
  163. package/assets/skills-en/core/onboarding/SKILL.md +58 -0
  164. package/assets/skills-en/core/orkastery-bootstrap/SKILL.md +119 -0
  165. package/assets/skills-en/core/thread-state/SKILL.md +88 -0
  166. package/assets/skills-en/governance/decision-triage/SKILL.md +65 -0
  167. package/assets/skills-en/governance/narrative-guardian/SKILL.md +66 -0
  168. package/assets/skills-en/governance/roadmap-keeper/SKILL.md +60 -0
  169. package/assets/skills-en/governance/scope-check-capability-map/SKILL.md +71 -0
  170. package/assets/skills-en/observability/thread-tracing/SKILL.md +63 -0
  171. package/assets/skills-en/phases/check-quality/SKILL.md +103 -0
  172. package/assets/skills-en/phases/go-implementation/SKILL.md +78 -0
  173. package/assets/skills-en/phases/goal-definition/SKILL.md +69 -0
  174. package/assets/skills-en/phases/master-metrics/SKILL.md +72 -0
  175. package/assets/skills-en/phases/plan-specification/SKILL.md +67 -0
  176. package/assets/skills-en/phases/security-remediation/SKILL.md +70 -0
  177. package/assets/skills-en/phases/ship-release/SKILL.md +71 -0
  178. package/assets/skills-en/reviewers/code-reviewer/SKILL.md +61 -0
  179. package/assets/skills-en/reviewers/security-auditor/SKILL.md +93 -0
  180. package/assets/skills-en/reviewers/test-engineer/SKILL.md +66 -0
  181. package/assets/skills-en/reviewers/web-performance-auditor/SKILL.md +63 -0
  182. package/dist/adapters/claude-bg.js +193 -15
  183. package/dist/adapters/codex-controller-worker.js +12 -5
  184. package/dist/adapters/codex-events.js +16 -4
  185. package/dist/adapters/codex.js +13 -2
  186. package/dist/agents-md.js +24 -15
  187. package/dist/atualizar-branch.js +245 -0
  188. package/dist/auditoria.js +13 -11
  189. package/dist/auditrun.js +68 -48
  190. package/dist/autorizacao-duravel.js +327 -0
  191. package/dist/board.js +98 -43
  192. package/dist/branch-de-estado.js +39 -9
  193. package/dist/busca-semantica.js +7 -5
  194. package/dist/catalogo.js +35 -1
  195. package/dist/changelog-reconciliacao.js +290 -0
  196. package/dist/check-agil.js +500 -0
  197. package/dist/check-modo.js +41 -0
  198. package/dist/check-paralelo.js +183 -0
  199. package/dist/ci.js +255 -46
  200. package/dist/ciclos.js +8 -6
  201. package/dist/claim-lint.js +12 -8
  202. package/dist/claims-conferir.js +350 -0
  203. package/dist/claims.js +13 -10
  204. package/dist/company-brain-client.js +45 -3
  205. package/dist/company-brain-journal.js +2 -1
  206. package/dist/company-brain-migration.js +47 -6
  207. package/dist/conducao-batida.js +759 -0
  208. package/dist/conducao-sentinela.js +405 -0
  209. package/dist/conducao-texto.js +12 -18
  210. package/dist/conducao.js +206 -59
  211. package/dist/conhecimento-consulta.js +270 -0
  212. package/dist/conhecimento.js +514 -0
  213. package/dist/conta-esgotada.js +127 -0
  214. package/dist/dado-privado.js +816 -0
  215. package/dist/decisao-autonoma.js +5 -4
  216. package/dist/demo.js +14 -12
  217. package/dist/dependencias-da-worktree.js +25 -0
  218. package/dist/divida.js +38 -36
  219. package/dist/docs.js +103 -82
  220. package/dist/doctor-forja.js +345 -0
  221. package/dist/doctor-pulse-cron.js +294 -27
  222. package/dist/doctor-rede.js +18 -17
  223. package/dist/doctor.js +278 -116
  224. package/dist/dsn-da-memoria.js +417 -0
  225. package/dist/entrega-por-mod.js +503 -0
  226. package/dist/entrega-pr.js +158 -57
  227. package/dist/escopo-escrita.js +10 -1
  228. package/dist/esgotamentos.js +13 -11
  229. package/dist/estado-thread.js +42 -17
  230. package/dist/evalrunner.js +35 -32
  231. package/dist/experiencia-instalacao.js +45 -25
  232. package/dist/fabrica-batida.js +323 -0
  233. package/dist/fabrica-estado.js +49 -16
  234. package/dist/fabrica-publicar.js +3 -1
  235. package/dist/fila-pesada.js +444 -0
  236. package/dist/fix.js +24 -21
  237. package/dist/forja/adaptador.js +6 -0
  238. package/dist/forja/ambiente-de-ci.js +27 -0
  239. package/dist/forja/api.js +256 -0
  240. package/dist/forja/cache.js +89 -0
  241. package/dist/forja/cli.js +60 -0
  242. package/dist/forja/contrato.js +9 -0
  243. package/dist/forja/endereco.js +43 -0
  244. package/dist/forja/estado.js +22 -0
  245. package/dist/forja/executor.js +73 -0
  246. package/dist/forja/github/ci.js +95 -0
  247. package/dist/forja/github/dono-da-rede.js +18 -0
  248. package/dist/forja/github/metadados.js +15 -0
  249. package/dist/forja/github/pedidos.js +200 -0
  250. package/dist/forja/gitlab/ci.js +141 -0
  251. package/dist/forja/gitlab/consultas.js +59 -0
  252. package/dist/forja/gitlab/dono-da-rede.js +43 -0
  253. package/dist/forja/gitlab/metadados.js +15 -0
  254. package/dist/forja/gitlab/pedidos-abertos.js +158 -0
  255. package/dist/forja/gitlab/pedidos.js +141 -0
  256. package/dist/forja/produtor.js +32 -0
  257. package/dist/forja/registro.js +31 -0
  258. package/dist/forja/resolver.js +121 -0
  259. package/dist/forja/texto.js +13 -0
  260. package/dist/forja/versao.js +71 -0
  261. package/dist/forja.js +124 -81
  262. package/dist/gates.js +3 -28
  263. package/dist/handoff.js +33 -19
  264. package/dist/hitl-contract.js +46 -43
  265. package/dist/hitl-curto.js +37 -25
  266. package/dist/hitl-gates.js +13 -11
  267. package/dist/hitl-local-receipt.js +53 -0
  268. package/dist/hitl-local.js +11 -2
  269. package/dist/hitl-lock.js +5 -11
  270. package/dist/hitl-public-receipt.js +11 -0
  271. package/dist/hitl-resumo.js +72 -3
  272. package/dist/hitl-sessions.js +62 -9
  273. package/dist/hitl-tempo-parado.js +4 -4
  274. package/dist/hitl-texto-livre.js +7 -4
  275. package/dist/hitl.js +63 -64
  276. package/dist/horario.js +30 -7
  277. package/dist/hosts.js +155 -134
  278. package/dist/impedimento.js +108 -14
  279. package/dist/index.js +1421 -1019
  280. package/dist/indice-vetorial.js +14 -12
  281. package/dist/indice.js +7 -1
  282. package/dist/init.js +54 -49
  283. package/dist/instabilidade.js +144 -0
  284. package/dist/integracoes-locais.js +4 -0
  285. package/dist/intelligence-graph-cli.js +213 -88
  286. package/dist/intelligence-graph-contexto.js +56 -17
  287. package/dist/intelligence-graph-contract.js +2 -1
  288. package/dist/intelligence-graph-extract-md.js +56 -4
  289. package/dist/intelligence-graph-extract-ts.js +71 -3
  290. package/dist/intelligence-graph-query.js +96 -34
  291. package/dist/leases.js +19 -18
  292. package/dist/ledger-stats.js +17 -16
  293. package/dist/ledger.js +46 -2
  294. package/dist/licoes.js +12 -11
  295. package/dist/liveness.js +6 -3
  296. package/dist/locale-accounts.js +220 -0
  297. package/dist/locale-adapter.js +291 -0
  298. package/dist/locale-ajuda.js +833 -0
  299. package/dist/locale-audit.js +199 -0
  300. package/dist/locale-claims.js +213 -0
  301. package/dist/locale-conducao.js +138 -0
  302. package/dist/locale-conhecimento.js +181 -0
  303. package/dist/locale-decisao.js +205 -0
  304. package/dist/locale-docs.js +230 -0
  305. package/dist/locale-estado.js +101 -0
  306. package/dist/locale-forja.js +290 -0
  307. package/dist/locale-gerados.js +165 -0
  308. package/dist/locale-grafo.js +129 -0
  309. package/dist/locale-master.js +182 -0
  310. package/dist/locale-network.js +524 -0
  311. package/dist/locale-onboarding.js +92 -0
  312. package/dist/locale-operacao-restante.js +931 -0
  313. package/dist/locale-phase.js +151 -0
  314. package/dist/locale-projetos.js +100 -0
  315. package/dist/locale-prompts.js +194 -0
  316. package/dist/locale-pulse.js +349 -0
  317. package/dist/locale-reservas.js +87 -0
  318. package/dist/locale-retry.js +524 -0
  319. package/dist/locale-roadmap.js +102 -0
  320. package/dist/locale-security-scan.js +69 -0
  321. package/dist/locale-setup.js +192 -0
  322. package/dist/locale-ship.js +597 -0
  323. package/dist/locale-thread.js +421 -0
  324. package/dist/locale-verify.js +201 -0
  325. package/dist/locale-worktree.js +246 -0
  326. package/dist/locale.js +1258 -0
  327. package/dist/maestro-runtime.js +22 -3
  328. package/dist/manifest.js +415 -13
  329. package/dist/maquina-ociosa.js +211 -0
  330. package/dist/maquina.js +31 -7
  331. package/dist/master-digest.js +6 -1
  332. package/dist/master-nota-local.js +200 -0
  333. package/dist/master-nota.js +14 -8
  334. package/dist/master.js +139 -65
  335. package/dist/mcp-artifacts.js +11 -2
  336. package/dist/mcp-conhecimento.js +52 -0
  337. package/dist/mcp-experiencia.js +26 -5
  338. package/dist/mcp-git.js +23 -6
  339. package/dist/mcp-grafo.js +7 -4
  340. package/dist/mcp-install.js +73 -8
  341. package/dist/mcp-noctum.js +101 -0
  342. package/dist/mcp-server.js +90 -16
  343. package/dist/mcp-ship-transporte.js +977 -0
  344. package/dist/mcp-ship.js +71 -25
  345. package/dist/mcp-transportes.js +17 -0
  346. package/dist/mcp-verify.js +6 -1
  347. package/dist/memoria.js +63 -58
  348. package/dist/modos-migracao.js +8 -6
  349. package/dist/modos.js +20 -24
  350. package/dist/network-roadmap.js +90 -51
  351. package/dist/noctum-aceite.js +789 -0
  352. package/dist/noctum-arco.js +1418 -0
  353. package/dist/noctum-capacidade.js +141 -0
  354. package/dist/noctum-changelog.js +399 -0
  355. package/dist/noctum-cli.js +482 -0
  356. package/dist/noctum-coordenacao.js +1225 -0
  357. package/dist/noctum-entrega.js +1169 -0
  358. package/dist/noctum-envelope.js +1046 -0
  359. package/dist/noctum-execucao.js +376 -0
  360. package/dist/noctum-fechamento.js +405 -0
  361. package/dist/noctum-fila.js +314 -0
  362. package/dist/noctum-guarda.js +256 -0
  363. package/dist/noctum-integracao.js +507 -0
  364. package/dist/noctum-maquinas.js +383 -0
  365. package/dist/noctum-medicao.js +450 -0
  366. package/dist/noctum-modo.js +362 -0
  367. package/dist/noctum-pergunta-canal.js +96 -0
  368. package/dist/noctum-pergunta.js +115 -0
  369. package/dist/noctum-provas.js +838 -0
  370. package/dist/noctum-reconciliacao.js +591 -0
  371. package/dist/noctum-registro.js +215 -0
  372. package/dist/noctum-relatorio.js +827 -0
  373. package/dist/noctum-resposta.js +207 -0
  374. package/dist/noctum-sessoes-em-voo.js +93 -0
  375. package/dist/noctum-supervisao.js +649 -0
  376. package/dist/noctum-terminal.js +459 -0
  377. package/dist/noctum-transporte.js +655 -0
  378. package/dist/noctum-vigia.js +639 -0
  379. package/dist/ocupacao.js +32 -3
  380. package/dist/onboarding.js +56 -26
  381. package/dist/orkmind.js +48 -25
  382. package/dist/orquestracao.js +44 -47
  383. package/dist/parado-no-condutor.js +174 -127
  384. package/dist/phase.js +144 -63
  385. package/dist/policies.js +37 -4
  386. package/dist/portfolio.js +4 -2
  387. package/dist/postura-local.js +235 -0
  388. package/dist/preflight.js +11 -10
  389. package/dist/procedencia.js +220 -0
  390. package/dist/projeto-alvo.js +186 -24
  391. package/dist/prompts.js +140 -42
  392. package/dist/prova-minima.js +5 -6
  393. package/dist/pulse-cadencia.js +5 -4
  394. package/dist/pulse-consentimento.js +53 -1
  395. package/dist/pulse-delivery.js +151 -24
  396. package/dist/pulse-resposta.js +368 -4
  397. package/dist/pulse.js +188 -22
  398. package/dist/ratelimit.js +16 -6
  399. package/dist/recall.js +14 -13
  400. package/dist/redacao-saida.js +63 -0
  401. package/dist/rede-adesao.js +13 -8
  402. package/dist/rede-forja.js +108 -24
  403. package/dist/rede-status.js +66 -47
  404. package/dist/rede.js +86 -46
  405. package/dist/retomada-checkpoint.js +101 -0
  406. package/dist/retry.js +451 -212
  407. package/dist/roadmap-reservas.js +45 -28
  408. package/dist/roadmap-status.js +129 -33
  409. package/dist/runtime-ambiente.js +5 -0
  410. package/dist/runtime-context.js +284 -32
  411. package/dist/runtime-escada.js +423 -0
  412. package/dist/runtime-profiles.js +103 -46
  413. package/dist/runtimes.js +2 -1
  414. package/dist/saida-segura.js +3 -2
  415. package/dist/security-scan/agil.js +355 -0
  416. package/dist/security-scan/cli.js +76 -0
  417. package/dist/security-scan/compare.js +149 -0
  418. package/dist/security-scan/config.js +93 -0
  419. package/dist/security-scan/detect.js +97 -0
  420. package/dist/security-scan/executor.js +188 -0
  421. package/dist/security-scan/guard.js +180 -0
  422. package/dist/security-scan/imagem-de-lint.js +96 -0
  423. package/dist/security-scan/normalize/actionlint.js +12 -0
  424. package/dist/security-scan/normalize/eslint.js +12 -0
  425. package/dist/security-scan/normalize/gitleaks.js +13 -0
  426. package/dist/security-scan/normalize/golangci-lint.js +13 -0
  427. package/dist/security-scan/normalize/govulncheck.js +36 -0
  428. package/dist/security-scan/normalize/index.js +25 -0
  429. package/dist/security-scan/normalize/npm-audit.js +30 -0
  430. package/dist/security-scan/normalize/osv-scanner.js +32 -0
  431. package/dist/security-scan/normalize/oxlint.js +51 -0
  432. package/dist/security-scan/normalize/pip-audit.js +16 -0
  433. package/dist/security-scan/normalize/ruff.js +12 -0
  434. package/dist/security-scan/normalize/semgrep.js +20 -0
  435. package/dist/security-scan/normalize/trivy.js +33 -0
  436. package/dist/security-scan/normalize/util.js +204 -0
  437. package/dist/security-scan/normalize/zizmor.js +19 -0
  438. package/dist/security-scan/report.js +156 -0
  439. package/dist/security-scan/run.js +448 -0
  440. package/dist/security-scan/tools.js +62 -0
  441. package/dist/security-scan/trabalhador.js +74 -0
  442. package/dist/security-scan/types.js +15 -0
  443. package/dist/session-events.js +26 -5
  444. package/dist/session-watcher-claude.js +81 -20
  445. package/dist/session-watcher.js +340 -42
  446. package/dist/sessoes-contas.js +10 -1
  447. package/dist/sessoes-inventario.js +1 -1
  448. package/dist/sessoes.js +25 -23
  449. package/dist/setup.js +59 -58
  450. package/dist/ship-publicar.js +971 -0
  451. package/dist/ship.js +243 -97
  452. package/dist/steal.js +77 -0
  453. package/dist/superficie.js +14 -11
  454. package/dist/thread-close.js +12 -11
  455. package/dist/thread.js +274 -100
  456. package/dist/tokens.js +15 -11
  457. package/dist/trabalho-thread.js +297 -0
  458. package/dist/transporte-do-canal.js +189 -0
  459. package/dist/types.js +12 -1
  460. package/dist/util.js +13 -3
  461. package/dist/varredura-acoes.js +507 -0
  462. package/dist/verify.js +608 -76
  463. package/dist/vida-da-thread.js +254 -0
  464. package/dist/worktree-local.js +167 -0
  465. package/dist/worktree.js +99 -83
  466. package/dist/yaml.js +27 -8
  467. package/eval/casos/check-quality.json +77 -0
  468. package/eval/casos/security-auditor.json +148 -0
  469. package/eval/casos/security-remediation.json +161 -0
  470. package/eval/fixtures/security-scan/README.md +8 -0
  471. package/eval/fixtures/security-scan/go/.github/workflows/ci.yml +12 -0
  472. package/eval/fixtures/security-scan/go/Dockerfile +4 -0
  473. package/eval/fixtures/security-scan/go/README.md +4 -0
  474. package/eval/fixtures/security-scan/go/config.go +4 -0
  475. package/eval/fixtures/security-scan/go/go.mod +5 -0
  476. package/eval/fixtures/security-scan/go/go.sum +2 -0
  477. package/eval/fixtures/security-scan/go/main.go +31 -0
  478. package/eval/fixtures/security-scan/js/.github/workflows/ci.yml +12 -0
  479. package/eval/fixtures/security-scan/js/Dockerfile +3 -0
  480. package/eval/fixtures/security-scan/js/README.md +4 -0
  481. package/eval/fixtures/security-scan/js/package-lock.json +844 -0
  482. package/eval/fixtures/security-scan/js/package.json +10 -0
  483. package/eval/fixtures/security-scan/js/src/config.js +4 -0
  484. package/eval/fixtures/security-scan/js/src/server.js +17 -0
  485. package/eval/fixtures/security-scan/js/src/util.ts +4 -0
  486. package/eval/fixtures/security-scan/js/tsconfig.json +4 -0
  487. package/eval/fixtures/security-scan/python/.github/workflows/ci.yml +12 -0
  488. package/eval/fixtures/security-scan/python/Dockerfile +3 -0
  489. package/eval/fixtures/security-scan/python/README.md +4 -0
  490. package/eval/fixtures/security-scan/python/app/__init__.py +0 -0
  491. package/eval/fixtures/security-scan/python/app/config.py +2 -0
  492. package/eval/fixtures/security-scan/python/app/main.py +19 -0
  493. package/eval/fixtures/security-scan/python/requirements.txt +1 -0
  494. package/package.json +9 -4
  495. package/references/security-checklist.md +3 -3
  496. package/schemas/code-artifact-graph.v1.schema.json +2 -1
  497. package/skills/README.md +1 -0
  498. package/skills/core/orkastery-bootstrap/SKILL.md +2 -2
  499. package/skills/phases/check-quality/SKILL.md +16 -0
  500. package/skills/phases/go-implementation/SKILL.md +6 -0
  501. package/skills/phases/security-remediation/SKILL.md +70 -0
  502. package/skills/reviewers/security-auditor/SKILL.md +25 -0
@@ -33,7 +33,7 @@ var __importStar = (this && this.__importStar) || (function () {
33
33
  };
34
34
  })();
35
35
  Object.defineProperty(exports, "__esModule", { value: true });
36
- exports.ENV_VARS_CODEX_MCP = exports.BRAIN_WRITE_TOOLS = exports.BRAIN_READ_TOOLS = exports.TOOLS_FILHO_CODEX = exports.TOOLS_DONO_CODEX = void 0;
36
+ exports.ENV_VARS_CODEX_MCP = exports.BRAIN_WRITE_TOOLS = exports.BRAIN_READ_TOOLS = exports.TOOLS_FILHO_CODEX = exports.TOOLS_DONO_CODEX = exports.TRANSPORTES_SHIP_MCP = void 0;
37
37
  exports.validarGrantsCodex = validarGrantsCodex;
38
38
  exports.politicasFilhoCodex = politicasFilhoCodex;
39
39
  exports.configuracaoServidorMcp = configuracaoServidorMcp;
@@ -46,6 +46,11 @@ const node_crypto_1 = require("node:crypto");
46
46
  const node_util_1 = require("node:util");
47
47
  const smol_toml_1 = require("smol-toml");
48
48
  const manifest_1 = require("./manifest");
49
+ const mcp_transportes_1 = require("./mcp-transportes");
50
+ Object.defineProperty(exports, "TRANSPORTES_SHIP_MCP", { enumerable: true, get: function () { return mcp_transportes_1.TRANSPORTES_SHIP_MCP; } });
51
+ const mcp_ship_transporte_1 = require("./mcp-ship-transporte");
52
+ const locale_1 = require("./locale");
53
+ const IMPRESSAO_SSH = /^SHA256:[A-Za-z0-9+/]{43}$/;
49
54
  exports.TOOLS_DONO_CODEX = ['ork_thread_new', 'ork_phase_run', 'ork_request_decision'];
50
55
  // RM-037 (rm037defeito, defeito 1): a decisao autonoma da sessao entra com as outras mutacoes do filho;
51
56
  // sem o grant, o codex com approval_policy never recusaria a chamada.
@@ -132,7 +137,7 @@ function ler(file) {
132
137
  function configuracaoServidorMcp(raiz, host, threadId, transporteShip = 'github-ssh', permissoesFilho = 'interactive',
133
138
  /** I-36 (D4): identidade do despacho da sessao filha; so existe junto com a thread vinculada. */
134
139
  dispatchId) {
135
- if (!['github-ssh', 'bare-local'].includes(transporteShip))
140
+ if (!(0, mcp_transportes_1.ehTransporteShipMcp)(transporteShip))
136
141
  throw Error('mcp.install.transport.invalid');
137
142
  if (!['interactive', 'worktree'].includes(permissoesFilho))
138
143
  throw Error('mcp.install.child-permissions.invalid');
@@ -199,14 +204,36 @@ function migrarEnvVarsCodex(bruto, entrada) {
199
204
  }
200
205
  return bruto.slice(0, corpoFim) + (corpo.endsWith('\n') ? '' : '\n') + `env_vars = ${valor}\n` + bruto.slice(corpoFim);
201
206
  }
207
+ /** O transporte SHIP de cada host do projeto com a entrada orkastery; config que nao se le nao conta. */
208
+ function transportesDosHosts(raiz) {
209
+ const achados = [];
210
+ for (const host of ['claude-code', 'codex']) {
211
+ const arquivo = path.join(raiz, host === 'codex' ? '.codex/config.toml' : '.mcp.json');
212
+ try {
213
+ const lido = ler(arquivo);
214
+ if (!lido)
215
+ continue;
216
+ const bruto = lido.bytes.toString('utf8'), dados = objeto(host === 'codex' ? (0, smol_toml_1.parse)(bruto) : JSON.parse(bruto));
217
+ const servidores = objeto(dados[host === 'codex' ? 'mcp_servers' : 'mcpServers']);
218
+ if (!Object.hasOwn(servidores, 'orkastery'))
219
+ continue;
220
+ const argv = objeto(servidores.orkastery).args, lista = Array.isArray(argv) ? argv : [], i = lista.indexOf('--ship-transport');
221
+ achados.push({ arquivo, transporte: i >= 0 ? String(lista[i + 1]) : 'github-ssh' });
222
+ }
223
+ catch { /* config ilegivel: nenhum servidor sobe dela */ }
224
+ }
225
+ return achados;
226
+ }
202
227
  function instalarMcp(opcoes) {
203
228
  // Ensaio da 0.5.0: os READMEs dos plugins mandavam `--project .`, recusado sem dizer como acertar.
204
229
  if (!path.isAbsolute(opcoes.projeto))
205
230
  throw Error('mcp.install.project.invalid: raiz absoluta obrigatoria; na raiz do projeto, use --project "$PWD"');
206
231
  if (!['claude-code', 'codex'].includes(opcoes.host))
207
232
  throw Error('mcp.install.host.invalid');
208
- if (opcoes.transporteShip !== undefined && !['github-ssh', 'bare-local'].includes(opcoes.transporteShip))
233
+ if (opcoes.transporteShip !== undefined && !(0, mcp_transportes_1.ehTransporteShipMcp)(opcoes.transporteShip))
209
234
  throw Error('mcp.install.transport.invalid');
235
+ if (opcoes.impressaoSsh !== undefined && (opcoes.transporteShip !== 'forja-ssh' || !IMPRESSAO_SSH.test(opcoes.impressaoSsh)))
236
+ throw Error('mcp.install.ssh-fingerprint.invalid: so com --ship-transport forja-ssh, no formato SHA256:<43 caracteres>');
210
237
  if (opcoes.permissoesFilho !== undefined && !['interactive', 'worktree'].includes(opcoes.permissoesFilho))
211
238
  throw Error('mcp.install.child-permissions.invalid');
212
239
  if (opcoes.permissoesDono !== undefined && (opcoes.host !== 'codex' || !['interactive', 'orchestrate'].includes(opcoes.permissoesDono)))
@@ -214,6 +241,32 @@ function instalarMcp(opcoes) {
214
241
  const raiz = fs.realpathSync(opcoes.projeto);
215
242
  if (fs.realpathSync((0, manifest_1.exigirManifesto)(raiz).raiz) !== raiz)
216
243
  throw Error('mcp.install.project.invalid');
244
+ // O transporte fixado sonda o origin antes de qualquer escrita; sem transporte pedido, so a proposta, sem rede.
245
+ let fixacao;
246
+ const linhas = [];
247
+ if ((0, mcp_transportes_1.ehTransporteFixado)(opcoes.transporteShip)) {
248
+ // A fixacao e uma por projeto: outro host que ainda usa a instalada nao perde a dele.
249
+ const instalada = (0, mcp_ship_transporte_1.fixacaoInstalada)(raiz);
250
+ if (instalada && instalada.transporte !== opcoes.transporteShip) {
251
+ const usa = transportesDosHosts(raiz).find(h => h.transporte === instalada.transporte);
252
+ if (usa)
253
+ throw Error(`mcp.install.conflict: transporte SHIP instalado e ${instalada.transporte} em ${usa.arquivo}; para trocar, remova a entrada orkastery de ${usa.arquivo} e reinstale; configuracao preservada`);
254
+ }
255
+ fixacao = (0, mcp_ship_transporte_1.prepararFixacao)({ raiz, transporte: opcoes.transporteShip, url: (0, mcp_ship_transporte_1.originUnicoMcp)(raiz), manifesto: (0, manifest_1.exigirManifesto)(raiz).manifesto.forja,
256
+ impressao: opcoes.impressaoSsh, sondas: opcoes.sondasDoTransporte ?? (0, mcp_ship_transporte_1.sondasPadraoDoTransporte)() });
257
+ linhas.push((0, mcp_ship_transporte_1.textoDaFixacao)(fixacao.fixacao, (0, mcp_ship_transporte_1.dirDaFixacao)(raiz), !!opcoes.dryRun));
258
+ }
259
+ else if (opcoes.transporteShip === undefined) {
260
+ let proposto = null;
261
+ try {
262
+ proposto = (0, mcp_ship_transporte_1.proporTransporte)((0, mcp_ship_transporte_1.originUnicoMcp)(raiz));
263
+ }
264
+ catch { /* sem origin unico: nada a propor */ }
265
+ if (proposto !== null && proposto !== 'github-ssh')
266
+ linhas.push((0, locale_1.msg)().forja.transporteShip.proposta(proposto));
267
+ }
268
+ const gravarFixacaoSePedida = () => { if (fixacao && !opcoes.dryRun)
269
+ (0, mcp_ship_transporte_1.gravarFixacao)((0, mcp_ship_transporte_1.dirDaFixacao)(raiz), fixacao); };
217
270
  const pasta = opcoes.host === 'codex' ? path.join(raiz, '.codex') : raiz;
218
271
  const validarPasta = () => {
219
272
  try {
@@ -253,10 +306,18 @@ function instalarMcp(opcoes) {
253
306
  }
254
307
  if (existente) {
255
308
  const legadoSSH = (opcoes.permissoesFilho ?? 'interactive') === 'interactive' && (opcoes.transporteShip ?? 'github-ssh') === 'github-ssh' && JSON.stringify(existente.args) === JSON.stringify(args.slice(0, -2));
256
- if (existente.command !== comando || (JSON.stringify(existente.args) !== JSON.stringify(args) && !legadoSSH))
309
+ if (existente.command !== comando || (JSON.stringify(existente.args) !== JSON.stringify(args) && !legadoSSH)) {
310
+ // Trocar de transporte e reinstalar: a recusa diz qual esta instalado, e a fixacao dele fica como esta.
311
+ const argv = Array.isArray(existente.args) ? existente.args : [], i = argv.indexOf('--ship-transport');
312
+ const instalado = i >= 0 ? argv[i + 1] : undefined;
313
+ if (existente.command === comando && (0, mcp_transportes_1.ehTransporteShipMcp)(instalado) && instalado !== (opcoes.transporteShip ?? 'github-ssh'))
314
+ throw Error(`mcp.install.conflict: transporte SHIP instalado e ${instalado}; para trocar, remova a entrada orkastery de ${arquivo} e reinstale; configuracao preservada`);
257
315
  throw Error('mcp.install.conflict: entrada orkastery divergente; configuracao preservada');
258
- if (faltantes.length === 0 && !faltaEnvCodex)
259
- return { arquivo, estado: 'igual', dryRun: !!opcoes.dryRun, ativacao: 'pendente-no-cliente' };
316
+ }
317
+ if (faltantes.length === 0 && !faltaEnvCodex) {
318
+ gravarFixacaoSePedida();
319
+ return { arquivo, estado: 'igual', dryRun: !!opcoes.dryRun, ativacao: 'pendente-no-cliente', transporte: linhas };
320
+ }
260
321
  }
261
322
  let proximo;
262
323
  if (opcoes.host === 'codex') {
@@ -290,6 +351,8 @@ function instalarMcp(opcoes) {
290
351
  proximo = JSON.stringify(dados, null, 2) + '\n';
291
352
  }
292
353
  if (!opcoes.dryRun) {
354
+ // A fixacao antes da config: um servidor que inicia entre as duas escritas acha a fixacao, nunca a falta dela.
355
+ gravarFixacaoSePedida();
293
356
  validarPasta();
294
357
  fs.mkdirSync(pasta, { recursive: true });
295
358
  validarPasta();
@@ -306,8 +369,10 @@ function instalarMcp(opcoes) {
306
369
  fs.rmSync(temp, { force: true });
307
370
  }
308
371
  }
309
- return { arquivo, estado: anterior ? 'atualizado' : 'novo', dryRun: !!opcoes.dryRun, ativacao: 'pendente-no-cliente' };
372
+ return { arquivo, estado: anterior ? 'atualizado' : 'novo', dryRun: !!opcoes.dryRun, ativacao: 'pendente-no-cliente', transporte: linhas };
310
373
  }
311
374
  function textoInstalacaoMcp(r) {
312
- return `${r.dryRun ? 'Simulacao: nenhuma escrita.' : 'Configuracao MCP preparada.'} ${r.arquivo} (${r.estado}).\nAbra uma nova sessao neste projeto, conclua o consentimento nativo solicitado pelo cliente e confira a descoberta das ferramentas ork_*.\nAtivacao e uso ainda pendentes de verificacao no cliente. Respostas automaticas de elicitation nao devem estar habilitadas para decisoes do dono.`;
375
+ const m = (0, locale_1.msg)().operacao.restante.mcp;
376
+ return `${r.dryRun ? m.simulacao : m.preparada} ${r.arquivo} (${r.estado}).\n${m.inicio}\n${m.ativacao}` +
377
+ (r.transporte?.length ? `\n${r.transporte.join('\n')}` : '');
313
378
  }
@@ -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
+ }
@@ -57,17 +57,22 @@ const hitl_gates_1 = require("./hitl-gates");
57
57
  const hitl_contract_1 = require("./hitl-contract");
58
58
  const hitl_presentation_1 = require("./hitl-presentation");
59
59
  const roadmap_status_1 = require("./roadmap-status");
60
+ const pulse_1 = require("./pulse");
60
61
  const network_roadmap_1 = require("./network-roadmap");
61
62
  const rede_status_1 = require("./rede-status");
62
63
  const hitl_sessions_1 = require("./hitl-sessions");
63
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");
64
67
  const mcp_artifacts_1 = require("./mcp-artifacts");
65
68
  const mcp_git_1 = require("./mcp-git");
66
69
  const preflight_1 = require("./preflight");
67
70
  const modos_1 = require("./modos");
71
+ const mcp_noctum_1 = require("./mcp-noctum");
68
72
  const versao_1 = require("./versao");
69
73
  const mcp_verify_1 = require("./mcp-verify");
70
74
  const conducao_1 = require("./conducao");
75
+ const fila_pesada_1 = require("./fila-pesada");
71
76
  const decisao_autonoma_1 = require("./decisao-autonoma");
72
77
  const conducao_texto_1 = require("./conducao-texto");
73
78
  const mcp_ship_1 = require("./mcp-ship");
@@ -79,6 +84,8 @@ const mcp_maestro_1 = require("./mcp-maestro");
79
84
  const projeto_alvo_1 = require("./projeto-alvo");
80
85
  const mcp_experiencia_1 = require("./mcp-experiencia");
81
86
  const mcp_grafo_1 = require("./mcp-grafo");
87
+ const mcp_conhecimento_1 = require("./mcp-conhecimento");
88
+ const locale_1 = require("./locale");
82
89
  const identidade = zod_1.z.string().min(1).max(80).regex(/^[a-zA-Z0-9][a-zA-Z0-9._-]*$/);
83
90
  const daThread = zod_1.z.object({ threadId: identidade }).strict();
84
91
  const daDecisao = daThread.extend({ pedidoId: identidade }).strict();
@@ -325,7 +332,7 @@ function criarServidorMcp(opcoes) {
325
332
  .describe('Nome ou abbrev do projeto pedido; este servidor atende somente o projeto fixado na instalacao');
326
333
  const ferramentas = new Map();
327
334
  function registrarTool(nome, config, executar) {
328
- if (opcoes.threadId && ['ork_thread_new', 'ork_phase_run', 'ork_request_decision', 'ork_preflight'].includes(nome))
335
+ if (opcoes.threadId && ['ork_thread_new', 'ork_phase_run', 'ork_request_decision', 'ork_request_master_note', 'ork_preflight'].includes(nome))
329
336
  return;
330
337
  const entrada = config.inputSchema.extend({ projeto: campoProjeto.optional() });
331
338
  const schema = converterSchema(entrada, { $refStrategy: 'none' });
@@ -352,7 +359,11 @@ function criarServidorMcp(opcoes) {
352
359
  return { ...resposta({ erro: e.message }), isError: true };
353
360
  }
354
361
  });
355
- const ingresso = (0, hitl_local_1.criarIngressoLocal)(raiz, { host: opcoes.host, connectionId: (0, node_crypto_1.randomUUID)() }, async (pedido, signal) => {
362
+ const conexaoLocal = (0, node_crypto_1.randomUUID)();
363
+ // RM-059 (F9, G3): a caixa de saida do Mensageiro de Sessoes so existe no servidor do dono do Claude Code, na memoria:
364
+ // a resposta a uma sessao claude-bg que entra pelo dialogo deste servidor sai por ela, e o texto nunca vai a disco.
365
+ const caixa = opcoes.host === 'claude-code' && !opcoes.threadId ? (0, entrega_por_mod_1.novaCaixaDeSaida)() : null;
366
+ const ingresso = (0, hitl_local_1.criarIngressoLocal)(raiz, { host: opcoes.host, connectionId: conexaoLocal }, async (pedido, signal) => {
356
367
  carregar();
357
368
  thread(pedido.thread);
358
369
  // D12: pergunta nativa que aceita texto NAO vira menu. Um menu sobre pergunta aberta
@@ -374,11 +385,33 @@ function criarServidorMcp(opcoes) {
374
385
  return { action: r.action };
375
386
  const parsed = zod_1.z.object({ opcao: zod_1.z.string().min(1).max(limite) }).strict().parse(r.content);
376
387
  return { action: 'accept', content: parsed };
377
- });
378
- server.onclose = () => ingresso.fechar();
388
+ }, { caixa });
389
+ // 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
390
+ // porque); sem a capacidade de formulario no cliente, a recusa vem antes de qualquer escrita.
391
+ const ingressoDaNota = (0, master_nota_local_1.criarIngressoDaNota)(raiz, { host: opcoes.host, connectionId: conexaoLocal }, async (apresentacao, signal) => {
392
+ carregar();
393
+ thread(apresentacao.thread);
394
+ const r = await server.elicitInput({ mode: 'form', message: apresentacao.mensagem,
395
+ requestedSchema: apresentacao.esquema }, { signal, timeout: 300000 });
396
+ return r.action === 'accept' ? { action: 'accept', content: r.content } : { action: r.action };
397
+ }, () => Boolean(server.getClientCapabilities()?.elicitation?.form));
398
+ server.onclose = () => { ingresso.fechar(); ingressoDaNota.fechar(); };
379
399
  (0, company_brain_mcp_1.registerBrainTools)(registrarTool, carregar, thread, opcoes.brainWrites ?? []);
380
400
  (0, mcp_experiencia_1.registrarConsultasExperiencia)(registrarTool, { raiz, carregar, transporte: opcoes.transporteShip ?? 'github-ssh' });
401
+ // RM-026 K7 (fatia 2): o conhecimento escrito, só leitura, do projeto fixado; também na sessão filha vinculada.
402
+ (0, mcp_conhecimento_1.registrarConsultasDoConhecimento)(registrarTool, carregar);
381
403
  (0, mcp_maestro_1.registerMaestro)(registrarTool, { root: raiz, threadId: opcoes.threadId, load: carregar, checkThread: thread, tools: () => [...ferramentas.keys()] });
404
+ // RM-058 N6 (D12): o arco #Noctum no host do dono, com o dialogo nativo deste servidor; nunca na sessao de fase.
405
+ if (!opcoes.threadId)
406
+ (0, mcp_noctum_1.registrarFerramentasDoNoctum)(registrarTool, { raiz, carregar, host: opcoes.host, conexao: conexaoLocal,
407
+ elicitar: async (a, signal) => {
408
+ // RM-057 (resposta curta, D7 da ork-rm057respost): a pergunta no contrato curto e o envelope inteiro abaixo dela.
409
+ const r = await server.elicitInput({ mode: 'form', message: a.mensagem,
410
+ requestedSchema: { type: 'object', properties: { opcao: { type: 'string', title: 'Sua decisão', oneOf: a.opcoes.map(x => ({ const: x, title: x })) } },
411
+ required: ['opcao'] } }, { signal, timeout: 300000 });
412
+ return r.action === 'accept' ? { action: 'accept', content: r.content } : { action: r.action };
413
+ },
414
+ temFormulario: () => Boolean(server.getClientCapabilities()?.elicitation?.form) });
382
415
  registrarTool('ork_preflight', { description: 'Preflight contextual por modo e bloco, sem inventário global/modelos. Não autoriza despacho nem comprova entrega.',
383
416
  inputSchema: zod_1.z.object({ modo: modoDeConducao }).strict(), annotations: { readOnlyHint: true } }, async ({ modo }) => {
384
417
  carregar();
@@ -411,6 +444,9 @@ function criarServidorMcp(opcoes) {
411
444
  // I-36 (T18): a mesma recusa tipada do CLI, com o mesmo texto, sem reescrever nada no host.
412
445
  if (e instanceof conducao_1.ErroDeConducao)
413
446
  return { ...resposta(e.recusa), isError: true };
447
+ // RM-058 N2 (A6 do CHECK): a fila pesada que nao deu a vez no prazo responde como a conducao.
448
+ if (e instanceof fila_pesada_1.ErroDaFilaPesada)
449
+ return { ...resposta(e.recusa), isError: true };
414
450
  throw e;
415
451
  }
416
452
  });
@@ -420,7 +456,7 @@ function criarServidorMcp(opcoes) {
420
456
  annotations: { readOnlyHint: false, destructiveHint: false } }, async (args, extra) => {
421
457
  thread(args.threadId);
422
458
  livre(args.threadId);
423
- const r = await (0, mcp_git_1.commitMcp)(raiz, args, extra.signal);
459
+ const r = await (0, mcp_git_1.commitMcp)(raiz, args, extra.signal, opcoes.dispatchId);
424
460
  return { ...resposta(r), ...(r.ok ? {} : { isError: true }) };
425
461
  });
426
462
  const documento = daThread.extend({ tipo: zod_1.z.enum(['goal', 'plan', 'check']) }).strict();
@@ -449,15 +485,18 @@ function criarServidorMcp(opcoes) {
449
485
  annotations: { readOnlyHint: false, destructiveHint: false } }, async ({ threadId, ...e }) => {
450
486
  thread(threadId);
451
487
  livre(threadId);
452
- // A sessao decide por ela: o rastro nao pode nascer assinado em nome do dono.
453
- if (/^\s*(?:o\s+|a\s+)?(?:dono|owner|builder|maestro)\b/i.test(e.quemDecidiu))
454
- throw Error('mcp.decision.author: quemDecidiu e a sessao que decidiu, nunca o dono');
488
+ const locale = (0, locale_1.resolverLocale)(carregar().manifesto.owner?.language).locale;
455
489
  let registro;
456
490
  try {
457
- registro = (0, decisao_autonoma_1.registrarDecisao)(raiz, threadId, { decidido: e.decidido, porque: e.porque, comoMudar: e.comoMudar,
458
- custoDeReverter: { agora: e.custoAgora, depois: e.custoDepois }, criterio: e.criterio, quemDecidiu: e.quemDecidiu,
459
- evidencia: e.evidencia, ...(e.razao ? { razao: e.razao } : {}), ...(e.reverte ? { reverte: e.reverte } : {}), origem: 'mcp', host: opcoes.host,
460
- despacho: opcoes.dispatchId ?? null });
491
+ registro = (0, locale_1.comLocale)(locale, () => {
492
+ // A sessao decide por ela: o rastro nao pode nascer assinado em nome do dono.
493
+ if (/^\s*(?:o\s+|a\s+)?(?:dono|owner|builder|maestro)\b/i.test(e.quemDecidiu))
494
+ throw new locale_1.ErroDoCatalogo((m) => m.decisao.autorMcp);
495
+ return (0, decisao_autonoma_1.registrarDecisao)(raiz, threadId, { decidido: e.decidido, porque: e.porque, comoMudar: e.comoMudar,
496
+ custoDeReverter: { agora: e.custoAgora, depois: e.custoDepois }, criterio: e.criterio, quemDecidiu: e.quemDecidiu,
497
+ evidencia: e.evidencia, ...(e.razao ? { razao: e.razao } : {}), ...(e.reverte ? { reverte: e.reverte } : {}), origem: 'mcp', host: opcoes.host,
498
+ despacho: opcoes.dispatchId ?? null });
499
+ });
461
500
  }
462
501
  catch (erro) {
463
502
  throw Error((0, hitl_contract_1.recusaNaSuperficie)(erro.message, hitl_contract_1.CAMPOS_DA_DECISAO_NO_MCP));
@@ -492,7 +531,8 @@ function criarServidorMcp(opcoes) {
492
531
  // RM-052: origem `instalacao`; o servidor fixado nao revela os outros projetos da maquina.
493
532
  const consulta = (0, projeto_alvo_1.consultaDoProjeto)(c, { origem: 'instalacao', outrosProjetos: false,
494
533
  lido: ['roadmap (docs/roadmap)', projeto_alvo_1.FORA_DA_CONSULTA.threadsDaMaquina], naoLido: [projeto_alvo_1.FORA_DA_CONSULTA.reservas, 'threads de outras máquinas (ork network roadmap)'] });
495
- const status = (0, roadmap_status_1.montarStatusDoRoadmap)(raiz, { projeto: c.manifesto.project.name, consulta });
534
+ // RM-063 (F2): a mesma fila do `ork pulse`; a consulta que falha e dita no fecho, nunca "Nada agora".
535
+ const status = (0, roadmap_status_1.montarStatusDoRoadmap)(raiz, { projeto: c.manifesto.project.name, consulta, fila: (quando) => (0, pulse_1.filaDoDono)(c, { quando }) });
496
536
  return resposta({ texto: (0, roadmap_status_1.textoDoStatusDoRoadmap)(status), status });
497
537
  });
498
538
  /**
@@ -501,9 +541,11 @@ function criarServidorMcp(opcoes) {
501
541
  */
502
542
  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.',
503
543
  inputSchema: zod_1.z.object({}).strict(), annotations: { readOnlyHint: true, destructiveHint: false, openWorldHint: true } }, async () => {
504
- carregar();
505
- const panorama = (0, network_roadmap_1.montarPanoramaDaRede)({ fixado: raiz });
506
- return resposta({ texto: (0, network_roadmap_1.textoDoPanoramaDaRede)(panorama), panorama });
544
+ const c = carregar();
545
+ // O panorama devolvido continua no contrato pt-BR; somente o texto humano segue o dono.
546
+ const panorama = (0, locale_1.comLocale)('pt-BR', () => (0, network_roadmap_1.montarPanoramaDaRede)({ fixado: raiz }));
547
+ const locale = (0, locale_1.resolverLocale)(c.manifesto.owner?.language).locale;
548
+ return resposta({ texto: (0, locale_1.comLocale)(locale, () => (0, network_roadmap_1.textoDoPanoramaDaRede)(panorama)), panorama });
507
549
  });
508
550
  /**
509
551
  * RM-054 (fatia 3): as maquinas da pessoa (RM-053, `ork.rede-status/v1`), com a fonte, a batida e as
@@ -558,6 +600,38 @@ function criarServidorMcp(opcoes) {
558
600
  thread(threadId);
559
601
  return resposta(await ingresso.solicitar(threadId, pedidoId, extra.signal));
560
602
  });
603
+ 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.',
604
+ inputSchema: daThread, annotations: { readOnlyHint: false, destructiveHint: false } }, async ({ threadId }, extra) => {
605
+ thread(threadId);
606
+ return resposta(await ingressoDaNota.solicitar(threadId, extra.signal));
607
+ });
608
+ // RM-059 (F9, T9.1): o Mensageiro de Sessoes nas duas pontas. Nenhuma das duas entra no --allowedTools do modelo (D8):
609
+ // quem chama e o mod ork-mensageiro, e nenhuma responde, aprova ou abre pedido.
610
+ if (caixa)
611
+ 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.',
612
+ inputSchema: zod_1.z.object({ operacao: zod_1.z.enum(['listar', 'enviada']), threadId: identidade.optional(), envioId: zod_1.z.string().uuid().optional(),
613
+ entregue: zod_1.z.boolean().optional(), motivo: zod_1.z.string().max(1000).optional() }).strict(),
614
+ annotations: { readOnlyHint: false, destructiveHint: false } }, async (args) => {
615
+ if (args.operacao === 'listar') {
616
+ carregar();
617
+ return resposta({ contrato: entrega_por_mod_1.CONTRATO_DA_ENTREGA, entregas: caixa.listar(raiz) });
618
+ }
619
+ if (!args.threadId || !args.envioId || args.entregue === undefined)
620
+ throw Error('mcp.outbox.args: enviada exige threadId, envioId e entregue');
621
+ thread(args.threadId);
622
+ return resposta({ contrato: entrega_por_mod_1.CONTRATO_DA_ENTREGA, entrega: caixa.anotarEnvio(raiz, args.threadId, args.envioId, args.entregue, args.motivo) });
623
+ });
624
+ if (opcoes.threadId && opcoes.dispatchId) {
625
+ const despacho = opcoes.dispatchId;
626
+ 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.',
627
+ inputSchema: daThread.extend({ operacao: zod_1.z.enum(['conferir', 'confirmar']), texto: zod_1.z.string().max(entrega_por_mod_1.LIMITE_DA_MENSAGEM),
628
+ envioId: zod_1.z.string().uuid().optional(), ate: zod_1.z.string().max(40).optional() }).strict(),
629
+ annotations: { readOnlyHint: false, destructiveHint: false } }, async ({ threadId, operacao, texto, envioId, ate }) => {
630
+ thread(threadId);
631
+ return resposta(operacao === 'conferir' ? (0, entrega_por_mod_1.conferirNoReceptor)(raiz, threadId, despacho, texto, ate)
632
+ : (0, entrega_por_mod_1.confirmarNoReceptor)(raiz, threadId, despacho, envioId, texto));
633
+ });
634
+ }
561
635
  // RM-031 KG5 (D2): as tools do grafo so existem com a flag do manifesto da raiz no startup; sem ela, nada muda.
562
636
  // CHECK rodada 1 (S8): o startup le so o manifesto, como antes; as conferencias de estado ficam na chamada.
563
637
  if ((0, mcp_grafo_1.grafoLigado)((0, manifest_1.exigirManifesto)(raiz).manifesto))