@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
@@ -0,0 +1,482 @@
1
+ "use strict";
2
+ var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
3
+ if (k2 === undefined) k2 = k;
4
+ var desc = Object.getOwnPropertyDescriptor(m, k);
5
+ if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) {
6
+ desc = { enumerable: true, get: function() { return m[k]; } };
7
+ }
8
+ Object.defineProperty(o, k2, desc);
9
+ }) : (function(o, m, k, k2) {
10
+ if (k2 === undefined) k2 = k;
11
+ o[k2] = m[k];
12
+ }));
13
+ var __setModuleDefault = (this && this.__setModuleDefault) || (Object.create ? (function(o, v) {
14
+ Object.defineProperty(o, "default", { enumerable: true, value: v });
15
+ }) : function(o, v) {
16
+ o["default"] = v;
17
+ });
18
+ var __importStar = (this && this.__importStar) || (function () {
19
+ var ownKeys = function(o) {
20
+ ownKeys = Object.getOwnPropertyNames || function (o) {
21
+ var ar = [];
22
+ for (var k in o) if (Object.prototype.hasOwnProperty.call(o, k)) ar[ar.length] = k;
23
+ return ar;
24
+ };
25
+ return ownKeys(o);
26
+ };
27
+ return function (mod) {
28
+ if (mod && mod.__esModule) return mod;
29
+ var result = {};
30
+ if (mod != null) for (var k = ownKeys(mod), i = 0; i < k.length; i++) if (k[i] !== "default") __createBinding(result, mod, k[i]);
31
+ __setModuleDefault(result, mod);
32
+ return result;
33
+ };
34
+ })();
35
+ Object.defineProperty(exports, "__esModule", { value: true });
36
+ exports.USO_DO_NOCTUM = void 0;
37
+ exports.avisosDaProposta = avisosDaProposta;
38
+ exports.conduzirPeloCli = conduzirPeloCli;
39
+ exports.comandoNoctum = comandoNoctum;
40
+ /**
41
+ * RM-058, fatia N6 (D1, D12 e D13 da ork-rm058n6): o comando `ork noctum`, a porta do CLI para o arco.
42
+ *
43
+ * ork noctum propor --arquivo <envelope.json> [--json] o pedido de abertura vira proposta e pergunta ao dono; nada é autorizado
44
+ * ork noctum revogar <arco> [--json] a pergunta de revogação ao dono (RM-057); nada é revogado
45
+ * ork noctum responder <arco> --resposta-stdin ... o envelope assinado do gateway (autorizar ou revogar)
46
+ * ork noctum terminal --hook-stdin o ingresso do terminal, que o hook UserPromptSubmit chama (RM-057);
47
+ * desligado (D22): só devolve o aviso de por onde responder
48
+ * ork noctum status [<arco>] [--json] o retrato do arco, com as lacunas; sem arco, a lista
49
+ * ork noctum tique <arco> [--json] fechamento, passo e relatório: o que o cron do dono chama
50
+ * ork noctum relatorio <arco> [--json] [--reenviar C] o relatório no terminal, ou o reenvio que o dono pede
51
+ * ork noctum conduzir <arco> [--json] o condutor do arco (RM-058, integração, D9): o cron do piloto o
52
+ * relança, e a trava do kernel prova o vivo
53
+ * ork noctum aceite <arco> [--json] [--injecoes A] o aceite do piloto (D12): as medidas M1 a M10, os critérios e o
54
+ * [--limiares A] [--publicar A] veredito, o arquivo completo no estado e o publicável
55
+ *
56
+ * Nenhum subcomando autoriza pelo terminal: o dono autoriza por ingresso autenticado (o gateway assinado, que chega
57
+ * aqui pelo `responder`, ou o diálogo nativo do host pelo MCP). Recusa tipada sai na saída de erro, com código 2.
58
+ */
59
+ const fs = __importStar(require("node:fs"));
60
+ const fila_pesada_1 = require("./fila-pesada");
61
+ const hitl_gates_1 = require("./hitl-gates");
62
+ const hitl_public_receipt_1 = require("./hitl-public-receipt");
63
+ const impedimento_1 = require("./impedimento");
64
+ const noctum_aceite_1 = require("./noctum-aceite");
65
+ const horario_1 = require("./horario");
66
+ const manifest_1 = require("./manifest");
67
+ const noctum_arco_1 = require("./noctum-arco");
68
+ const noctum_pergunta_1 = require("./noctum-pergunta");
69
+ const noctum_pergunta_canal_1 = require("./noctum-pergunta-canal");
70
+ const pulse_resposta_1 = require("./pulse-resposta");
71
+ const noctum_envelope_1 = require("./noctum-envelope");
72
+ const noctum_modo_1 = require("./noctum-modo");
73
+ const noctum_relatorio_1 = require("./noctum-relatorio");
74
+ const noctum_registro_1 = require("./noctum-registro");
75
+ const noctum_supervisao_1 = require("./noctum-supervisao");
76
+ const noctum_vigia_1 = require("./noctum-vigia");
77
+ const runtime_profiles_1 = require("./runtime-profiles");
78
+ const noctum_terminal_1 = require("./noctum-terminal");
79
+ const transporte_do_canal_1 = require("./transporte-do-canal");
80
+ exports.USO_DO_NOCTUM = 'uso: ork noctum propor --arquivo <envelope.json> | revogar <arco> [--json] | responder <arco> --resposta-stdin ' +
81
+ '--origem O --canal C --por P --mensagem M [--conta X] | terminal --hook-stdin | status [<arco>] [--json] | tique <arco> [--json] | ' +
82
+ 'relatorio <arco> [--json] [--reenviar <canal>] | conduzir <arco> [--json] | aceite <arco> [--json] [--injecoes <arquivo>] ' +
83
+ '[--limiares <arquivo>] [--publicar <arquivo>]';
84
+ /** A linha da entrega da pergunta ao canal do dono, sem caminho de máquina. */
85
+ function linhaDaEntrega(e) {
86
+ if (e.entregue)
87
+ return `A pergunta também saiu no canal do dono, como a pergunta ${e.numero} (${e.detalhe}).`;
88
+ if (e.jaServida)
89
+ return `A pergunta já tinha saído no canal do dono como a pergunta ${e.numero}.`;
90
+ return `A pergunta não saiu no canal do dono: ${e.detalhe}.`;
91
+ }
92
+ /** RM-057 (resposta curta): a entrada do hook `UserPromptSubmit` tem teto, como o envelope do ingresso. */
93
+ const TETO_DA_ENTRADA_DO_HOOK = 64 * 1024;
94
+ /** A entrada do hook pela entrada padrão, ou `null` quando ela passa do teto ou não é JSON. */
95
+ function lerEntradaDoHookStdin() {
96
+ const partes = [];
97
+ let total = 0;
98
+ for (;;) {
99
+ const buf = Buffer.alloc(4096), n = fs.readSync(0, buf, 0, buf.length, null);
100
+ if (!n)
101
+ break;
102
+ total += n;
103
+ if (total > TETO_DA_ENTRADA_DO_HOOK)
104
+ return null;
105
+ partes.push(buf.subarray(0, n));
106
+ }
107
+ try {
108
+ return JSON.parse(Buffer.concat(partes).toString('utf8'));
109
+ }
110
+ catch {
111
+ return null;
112
+ }
113
+ }
114
+ /** O pedido de abertura cabe numa leitura do dono: o envelope inteiro tem teto, como o pedido de cada trabalho. */
115
+ const TETO_DO_ARQUIVO_DO_ENVELOPE = 64 * 1024;
116
+ const texto = (v) => typeof v === 'string' ? v : undefined;
117
+ /**
118
+ * Pré-voo informativo da proposta: antecipa três causas que fariam o arco esperar, mas não autoriza nem bloqueia nada.
119
+ * As dependências opcionais deixam os testes usar perfis e trust simulados sem ler contas reais.
120
+ */
121
+ function avisosDaProposta(carregado, conteudo, opcoes = {}) {
122
+ if (!(0, noctum_envelope_1.envelopeComTrabalhos)(conteudo))
123
+ return [];
124
+ const avisos = [];
125
+ let store = null;
126
+ try {
127
+ store = opcoes.store ?? (0, runtime_profiles_1.lerPerfisComContas)(carregado.raiz);
128
+ }
129
+ catch {
130
+ avisos.push({ motivo: 'noctum.proposta.contas-sem-leitura', detalhe: 'as contas do envelope não puderam ser conferidas',
131
+ correcao: 'rode ork accounts check e proponha de novo depois de corrigir a leitura' });
132
+ }
133
+ const confiar = opcoes.confianca ?? ((raiz, p) => (0, impedimento_1.impedimentoResolvido)('runtime.workspace-untrusted', { cwd: raiz, runtime: p.runtime, configDir: p.runtime === 'claude-bg' ? p.configDir : p.codexHome }));
134
+ if (store) {
135
+ for (const { conta } of conteudo.capacidade.porConta) {
136
+ const p = store.perfis.find(x => x.id === conta);
137
+ if (!p || p.estado === 'sem-auth') {
138
+ avisos.push({ motivo: 'noctum.proposta.conta-sem-login',
139
+ detalhe: `a conta ${conta} do envelope está sem login de assinatura conferido`,
140
+ correcao: `refaça o login da conta ${conta} pelo próprio CLI e rode ork accounts check ${conta}` });
141
+ }
142
+ if (p?.runtime === 'claude-bg' && confiar(carregado.raiz, p) !== true) {
143
+ avisos.push({ motivo: 'noctum.proposta.workspace-untrusted',
144
+ detalhe: `a conta ${conta} não tem o trust da pasta do projeto aceito no runtime; o despacho cairia em runtime.workspace-untrusted`,
145
+ correcao: `abra o runtime da conta ${conta} na pasta do projeto e aceite a confiança` });
146
+ }
147
+ }
148
+ }
149
+ if (conteudo.capacidade.maquina - conteudo.capacidade.revisao === 1) {
150
+ avisos.push({ motivo: 'noctum.proposta.vaga-de-execucao-unica',
151
+ detalhe: `a capacidade da máquina (${conteudo.capacidade.maquina}) menos a revisão (${conteudo.capacidade.revisao}) deixa uma vaga de execução`,
152
+ correcao: 'confirme que uma única sessão de execução por vez é suficiente ou emende a capacidade' });
153
+ }
154
+ const hostLocal = () => {
155
+ try {
156
+ const lido = JSON.parse(fs.readFileSync((0, transporte_do_canal_1.caminhoDoPulseHost)(carregado.raiz), 'utf8'));
157
+ if (!(0, transporte_do_canal_1.transporteValido)(lido))
158
+ return null;
159
+ const host = (0, transporte_do_canal_1.hostDoTransporte)(lido);
160
+ return transporte_do_canal_1.HOSTS_DO_CANAL.includes(host) ? host : null;
161
+ }
162
+ catch {
163
+ return null;
164
+ }
165
+ };
166
+ const host = opcoes.hostDoDono === undefined ? hostLocal() : opcoes.hostDoDono;
167
+ if (host && !(0, hitl_public_receipt_1.canVerifyPublicReceipt)(host, false, opcoes.env ?? process.env)) {
168
+ avisos.push({ motivo: 'noctum.proposta.sem-verificador-do-canal',
169
+ detalhe: `este processo não consegue reconferir a prova do dono recebida pelo ${host}`,
170
+ correcao: 'o cron do condutor e do tique precisa de ORK_RECEIPT_VERIFIERS com o verificador público gerado por publicHitlVerifiers; ' +
171
+ 'a chave de ingresso nunca deve ir ao ambiente dos agentes' });
172
+ }
173
+ return avisos;
174
+ }
175
+ const TERMINAIS = ['expirado', 'revogado', 'encerrado'];
176
+ /**
177
+ * O que o `ork noctum conduzir` roda: confere o arco antes da trava (o arco terminal, ou parado pela supervisão, sai 0 sem
178
+ * tomar a trava nem gravar geração) e então conduz pelo `conduzirArco`, com as dependências reais. Os testes passam as
179
+ * simuladas (o `dormir`, o `relogio`, o `maxPassos` e as do passo); o comando de terminal não tem opção de teste.
180
+ */
181
+ function conduzirPeloCli(carregado, arco, opcoes = {}) {
182
+ const { raiz } = carregado;
183
+ if (!(0, fila_pesada_1.kernelDisponivel)())
184
+ return { acao: 'sem-kernel', detalhe: 'o condutor exige /usr/bin/flock', codigo: 2 };
185
+ const estado = (0, noctum_arco_1.lerArco)(raiz, arco);
186
+ if (!estado)
187
+ return { acao: 'sem-arco', detalhe: `o arco ${arco} não tem proposta`, codigo: 2 };
188
+ if (!estado.autorizadoPor) {
189
+ return { acao: 'nunca-autorizado', motivo: 'noctum.modo.sem-envelope', detalhe: `o arco ${arco} nunca foi autorizado pelo dono: o #Noctum não vale`,
190
+ codigo: 2 };
191
+ }
192
+ if (TERMINAIS.includes(estado.situacao)) {
193
+ return { acao: 'terminal', situacao: estado.situacao, detalhe: `o arco ${arco} está ${estado.situacao}: não há o que conduzir`, codigo: 0 };
194
+ }
195
+ let parada;
196
+ try {
197
+ parada = (0, noctum_supervisao_1.lerSupervisao)(raiz, arco).parada;
198
+ }
199
+ catch (e) {
200
+ if (e instanceof noctum_supervisao_1.RecusaDaSupervisao)
201
+ return { acao: 'supervisao-ilegivel', motivo: e.motivo, detalhe: e.message, codigo: 2 };
202
+ throw e;
203
+ }
204
+ if (parada)
205
+ return { acao: 'parado', motivo: parada.motivo, detalhe: `a supervisão parou o arco ${arco}: ${parada.detalhe}`, codigo: 0 };
206
+ const r = (0, noctum_vigia_1.conduzirArco)(carregado, arco, opcoes);
207
+ const codigo = r.acao === 'outro-condutor' ? 3 : r.acao === 'saiu' ? (r.ultimo?.acao === 'geracao-vencida' ? 4 : 0) : 2;
208
+ return { ...r, codigo };
209
+ }
210
+ /** A linha do condutor no terminal: o desfecho, com o motivo. */
211
+ function textoDoCondutor(arco, r) {
212
+ if (r.acao !== 'saiu')
213
+ return `Condutor do arco ${arco}: ${r.acao}${'motivo' in r ? ` (${r.motivo})` : ''}: ${r.detalhe}`;
214
+ const u = r.ultimo;
215
+ const ultimo = !u ? 'nenhum passo' : `${u.acao}${'motivo' in u && u.motivo ? ` (${u.motivo})` : ''}${'detalhe' in u && u.detalhe ? `: ${u.detalhe}` : ''}`;
216
+ return `Condutor do arco ${arco}: saiu na geração ${r.geracao}, depois de ${r.passos} passo(s); o último: ${ultimo}`;
217
+ }
218
+ /** O aceite no terminal: o veredito, as marcas de simulação, as medidas, os critérios e onde ficou o arquivo completo. */
219
+ function textoDoAceite(r, gravado) {
220
+ const valor = (v, unidade) => v === null ? 'lacuna' : `${v} ${unidade}`;
221
+ return [`Aceite do piloto do arco ${r.arco}: ${r.veredito} (sha256 ${gravado.sha256.slice(0, 12)})`,
222
+ ...(r.simulacao.simulado ? ['Simulado, nunca vale como piloto:', ...r.simulacao.marcas.map(x => ` • ${x}`)] : []),
223
+ 'Medidas:', ...r.medidas.map(x => ` ${x.id} ${x.nome}: ${valor(x.valor, x.unidade)}${x.lacunas.length ? ` (lacunas: ${x.lacunas.join('; ')})` : ''}`),
224
+ 'Critérios:', ...r.criterios.map(c => ` ${c.id} [${c.veredito}] ${c.texto}` +
225
+ `${c.limiar ? ` (limiar ${Object.entries(c.limiar).map(([k, v]) => `${k}=${v}`).join(', ')}, ${c.origemDoLimiar})` : ''}: ${c.detalhe}`),
226
+ `Arquivo completo: ${gravado.arquivo}`].join('\n');
227
+ }
228
+ function recusado(e) {
229
+ // A recusa da supervisão (o log adulterado ou ocupado no meio do laço do condutor) também é recusa: sai 2, como o contrato diz.
230
+ if (e instanceof noctum_envelope_1.RecusaDoArco || e instanceof noctum_registro_1.RecusaDoRegistro || e instanceof noctum_aceite_1.RecusaDoAceite || e instanceof noctum_supervisao_1.RecusaDaSupervisao) {
231
+ console.error(e.message);
232
+ return 2;
233
+ }
234
+ throw e;
235
+ }
236
+ function comandoNoctum(args) {
237
+ const sub = args.posicionais[1];
238
+ const json = args.opcoes.json === true;
239
+ try {
240
+ if (sub === 'propor') {
241
+ const arquivo = texto(args.opcoes.arquivo);
242
+ if (!arquivo || args.posicionais.length !== 2) {
243
+ console.error(exports.USO_DO_NOCTUM);
244
+ return 2;
245
+ }
246
+ let st;
247
+ try {
248
+ st = fs.statSync(arquivo);
249
+ }
250
+ catch {
251
+ console.error(`noctum.envelope.invalido: o pedido de abertura ${arquivo} não se lê`);
252
+ return 2;
253
+ }
254
+ if (!st.isFile() || st.size > TETO_DO_ARQUIVO_DO_ENVELOPE) {
255
+ console.error(`noctum.envelope.invalido: o pedido de abertura é um arquivo JSON de até ${TETO_DO_ARQUIVO_DO_ENVELOPE} bytes`);
256
+ return 2;
257
+ }
258
+ let pedido;
259
+ try {
260
+ pedido = JSON.parse(fs.readFileSync(arquivo, 'utf8'));
261
+ }
262
+ catch {
263
+ console.error('noctum.envelope.invalido: o pedido de abertura não é JSON');
264
+ return 2;
265
+ }
266
+ const carregado = (0, manifest_1.exigirManifesto)();
267
+ const { raiz } = carregado;
268
+ const quando = new Date().toISOString();
269
+ const r = (0, noctum_arco_1.proporEnvelope)(raiz, pedido, quando, (0, pulse_resposta_1.codigosEmUso)(raiz));
270
+ const conteudo = (0, noctum_arco_1.lerArco)(raiz, r.arco)?.conteudo;
271
+ const fuso = conteudo?.janela.fuso ?? pedido?.janela?.fuso;
272
+ const avisos = conteudo ? avisosDaProposta(carregado, conteudo) : [];
273
+ // RM-057 (resposta curta, D4 e D9): a proposta é a pergunta ao dono, que sai também pelo canal dele quando ele tem um.
274
+ const q = r.codigo ? (0, noctum_arco_1.perguntasDoArco)(raiz, r.arco, quando).find(x => x.codigo === r.codigo && x.situacao === 'pendente') : undefined;
275
+ const entrega = q ? (0, noctum_pergunta_canal_1.entregarPerguntaDoArco)(raiz, q, { quando }) : null;
276
+ const textoDaPergunta = q ? (0, noctum_pergunta_1.textoDaPerguntaDoArco)(q, 'terminal', { quando, ...(entrega?.numero ? { numero: entrega.numero } : {}) }) : null;
277
+ const instrucoes = q ? (0, noctum_pergunta_canal_1.comoResponderAoArco)(q) : [`O envelope ${r.envelopeSha256.slice(0, 12)} já vale no arco ${r.arco}: não há o que autorizar`];
278
+ if (json) {
279
+ console.log(JSON.stringify({ ...r, autorizado: false, avisos, comoAutorizar: instrucoes,
280
+ pergunta: q ? { codigo: q.codigo, prazo: q.prazo, texto: textoDaPergunta, entrega } : null }, null, 2));
281
+ }
282
+ else {
283
+ console.log([...r.resumo, '',
284
+ ...(avisos.length ? ['Avisos (não bloqueiam a proposta):', ...avisos.map(a => `• ${a.motivo}: ${a.detalhe}. Correção: ${a.correcao}.`), ''] : []),
285
+ `Proposta ${r.versao} do arco ${r.arco}, vale até ${(0, horario_1.formatarDataHora)(r.prazo, { fuso, locale: 'pt-BR' })}.`,
286
+ 'Nada foi autorizado: o dono autoriza respondendo à pergunta, nunca por silêncio nem por este comando.',
287
+ ...(textoDaPergunta ? ['', textoDaPergunta, '', linhaDaEntrega(entrega)] : instrucoes)].join('\n'));
288
+ }
289
+ return 0;
290
+ }
291
+ if (sub === 'revogar') {
292
+ // RM-057 (resposta curta, D10): abre a pergunta de revogação e a entrega; quem revoga é a resposta do dono.
293
+ const arco = args.posicionais[2];
294
+ if (!arco || args.posicionais.length !== 3) {
295
+ console.error(exports.USO_DO_NOCTUM);
296
+ return 2;
297
+ }
298
+ const { raiz } = (0, manifest_1.exigirManifesto)();
299
+ const quando = new Date().toISOString();
300
+ const r = (0, noctum_arco_1.pedirRevogacao)(raiz, arco, quando, (0, pulse_resposta_1.codigosEmUso)(raiz));
301
+ const q = (0, noctum_arco_1.perguntasDoArco)(raiz, arco, quando).find(x => x.codigo === r.codigo);
302
+ const entrega = (0, noctum_pergunta_canal_1.entregarPerguntaDoArco)(raiz, q, { quando });
303
+ const textoDaPergunta = (0, noctum_pergunta_1.textoDaPerguntaDoArco)(q, 'terminal', { quando, ...(entrega.numero ? { numero: entrega.numero } : {}) });
304
+ if (json) {
305
+ console.log(JSON.stringify({ arco, revogado: false, comoRevogar: (0, noctum_pergunta_canal_1.comoResponderAoArco)(q),
306
+ pergunta: { codigo: q.codigo, prazo: q.prazo, nova: r.nova, texto: textoDaPergunta, entrega } }, null, 2));
307
+ }
308
+ else {
309
+ console.log([textoDaPergunta, '', linhaDaEntrega(entrega), 'Nada foi revogado: o dono revoga respondendo à pergunta.'].join('\n'));
310
+ }
311
+ return 0;
312
+ }
313
+ if (sub === 'responder') {
314
+ const arco = args.posicionais[2];
315
+ if (!arco || args.posicionais.length !== 3 || args.opcoes['resposta-stdin'] !== true || args.opcoes.resposta !== undefined) {
316
+ console.error('noctum responder exige o arco, --resposta-stdin e o envelope do ingresso autenticado na entrada');
317
+ return 2;
318
+ }
319
+ // A entrada malformada ou o argv que diverge do envelope é recusa tipada, como a do núcleo, e nunca autoriza nada.
320
+ let envelope;
321
+ try {
322
+ envelope = (0, hitl_gates_1.lerRespostaStdin)({ por: texto(args.opcoes.por), mensagem: texto(args.opcoes.mensagem), origem: texto(args.opcoes.origem),
323
+ canal: texto(args.opcoes.canal), conta: texto(args.opcoes.conta) });
324
+ }
325
+ catch (e) {
326
+ console.error(`noctum.origem.sem-prova: ${e.message.slice(0, 300)}`);
327
+ return 2;
328
+ }
329
+ console.log(JSON.stringify((0, noctum_modo_1.responderAoArco)((0, manifest_1.exigirManifesto)().raiz, arco, envelope)));
330
+ return 0;
331
+ }
332
+ if (sub === 'terminal') {
333
+ // RM-057 (resposta curta, D5): o ingresso do terminal, que o hook UserPromptSubmit do plugin chama. Sai 0 sempre: a
334
+ // decisão vai em JSON, e o hook só a transporta. GO-FIX 2 (D22): o ingresso está desligado, e este comando nunca o
335
+ // liga; a resposta curta a uma pergunta que espera o dono volta recusada, com o aviso de por onde responder.
336
+ if (args.opcoes['hook-stdin'] !== true || args.posicionais.length !== 2) {
337
+ console.error(exports.USO_DO_NOCTUM);
338
+ return 2;
339
+ }
340
+ const entrada = lerEntradaDoHookStdin();
341
+ let raiz = null;
342
+ try {
343
+ raiz = (0, manifest_1.exigirManifesto)().raiz;
344
+ }
345
+ catch {
346
+ raiz = null;
347
+ }
348
+ try {
349
+ console.log(JSON.stringify((0, noctum_terminal_1.responderPeloTerminal)(raiz, entrada, { env: process.env })));
350
+ }
351
+ catch (e) {
352
+ console.error(`noctum terminal: ${e.message.slice(0, 200)}`);
353
+ console.log(JSON.stringify({ contrato: noctum_terminal_1.CONTRATO_DO_TERMINAL, acao: 'ignorar', motivo: 'erro-interno' }));
354
+ }
355
+ return 0;
356
+ }
357
+ if (sub === 'status') {
358
+ const carregado = (0, manifest_1.exigirManifesto)();
359
+ const arco = args.posicionais[2];
360
+ if (!arco) {
361
+ const arcos = (0, noctum_modo_1.listarArcos)(carregado.raiz).map(a => {
362
+ try {
363
+ return { arco: a, situacao: (0, noctum_arco_1.lerArco)(carregado.raiz, a)?.situacao ?? 'sem-proposta' };
364
+ }
365
+ catch (e) {
366
+ return { arco: a, situacao: 'ilegivel', detalhe: e.message.slice(0, 200) };
367
+ }
368
+ });
369
+ if (json)
370
+ console.log(JSON.stringify({ arcos }, null, 2));
371
+ else
372
+ console.log(arcos.length ? arcos.map(x => `${x.arco}: ${x.situacao}`).join('\n') : 'Nenhum arco #Noctum neste projeto.');
373
+ return 0;
374
+ }
375
+ const r = (0, noctum_modo_1.retratoDoArco)(carregado, arco);
376
+ if (!r) {
377
+ console.error(`noctum.efeito.sem-autorizacao: o arco ${arco} não tem proposta`);
378
+ return 2;
379
+ }
380
+ console.log(json ? JSON.stringify(r, null, 2) : (0, noctum_modo_1.textoDoRetrato)(r));
381
+ return 0;
382
+ }
383
+ if (sub === 'tique') {
384
+ const arco = args.posicionais[2];
385
+ if (!arco || args.posicionais.length !== 3) {
386
+ console.error(exports.USO_DO_NOCTUM);
387
+ return 2;
388
+ }
389
+ const r = (0, noctum_modo_1.tiqueDoArco)((0, manifest_1.exigirManifesto)(), arco);
390
+ if (json)
391
+ console.log(JSON.stringify(r, null, 2));
392
+ else {
393
+ console.log([`Tique do arco ${arco}:`,
394
+ ` fechamento: ${r.fechamento.fechado ? `${r.fechamento.motivo}${r.fechamento.agora ? ' (agora)' : ''}` : r.fechamento.detalhe}`,
395
+ ` passo: ${r.passo ? `${r.passo.acao}${'motivo' in r.passo && r.passo.motivo ? ` (${r.passo.motivo})` : ''}` : 'nenhum'}`,
396
+ ` relatório: ${r.relatorio.acao}: ${r.relatorio.detalhe}`,
397
+ ...r.falhas.map(f => ` falha no ${f.etapa}: ${f.detalhe}`)].join('\n'));
398
+ }
399
+ // A falha de uma etapa não segura o relatório, mas o cron do dono a vê pela saída.
400
+ return r.falhas.length ? 1 : 0;
401
+ }
402
+ if (sub === 'relatorio') {
403
+ const arco = args.posicionais[2];
404
+ if (!arco || args.posicionais.length !== 3) {
405
+ console.error(exports.USO_DO_NOCTUM);
406
+ return 2;
407
+ }
408
+ const carregado = (0, manifest_1.exigirManifesto)();
409
+ const reenviar = texto(args.opcoes.reenviar);
410
+ if (args.opcoes.reenviar !== undefined) {
411
+ if (!reenviar || reenviar === 'terminal' || !noctum_envelope_1.CANAIS_DO_RELATORIO.includes(reenviar)) {
412
+ console.error('noctum relatorio --reenviar exige o canal telegram ou openclaw');
413
+ return 2;
414
+ }
415
+ const r = (0, noctum_relatorio_1.reenviarRelatorio)(carregado, arco, reenviar);
416
+ console.log(json ? JSON.stringify(r, null, 2) : `Reenvio pelo canal ${reenviar}: ${r.acao}, ${r.enviadas} página(s) confirmada(s). ${r.detalhe}`);
417
+ return r.acao === 'entregue' ? 0 : 1;
418
+ }
419
+ // O recibo do canal terminal só vem do terminal interativo, nunca de saída redirecionada nem do --json.
420
+ const r = (0, noctum_relatorio_1.relatorioNoTerminal)(carregado, arco, { interativo: !json && process.stdout.isTTY === true });
421
+ if (!r) {
422
+ console.error(`noctum.efeito.sem-autorizacao: o arco ${arco} não tem envelope autorizado`);
423
+ return 2;
424
+ }
425
+ console.log(json ? JSON.stringify(r, null, 2) : r.paginas.join('\n\n'));
426
+ return 0;
427
+ }
428
+ if (sub === 'conduzir') {
429
+ const arco = args.posicionais[2];
430
+ if (!arco || args.posicionais.length !== 3) {
431
+ console.error(exports.USO_DO_NOCTUM);
432
+ return 2;
433
+ }
434
+ const r = conduzirPeloCli((0, manifest_1.exigirManifesto)(), arco);
435
+ if (json)
436
+ console.log(JSON.stringify(r, null, 2));
437
+ else if (r.codigo === 2)
438
+ console.error(textoDoCondutor(arco, r));
439
+ else
440
+ console.log(textoDoCondutor(arco, r));
441
+ return r.codigo;
442
+ }
443
+ if (sub === 'aceite') {
444
+ const arco = args.posicionais[2];
445
+ const arquivo = (nome) => args.opcoes[nome] === undefined ? null : texto(args.opcoes[nome]) ?? false;
446
+ const [injecoes, limiares, publicar] = [arquivo('injecoes'), arquivo('limiares'), arquivo('publicar')];
447
+ if (!arco || args.posicionais.length !== 3 || injecoes === false || limiares === false || publicar === false) {
448
+ console.error(exports.USO_DO_NOCTUM);
449
+ return 2;
450
+ }
451
+ let agenda = null, doDono = null;
452
+ try {
453
+ if (injecoes)
454
+ agenda = (0, noctum_aceite_1.lerInjecoes)(fs.readFileSync(injecoes, 'utf8'));
455
+ if (limiares)
456
+ doDono = (0, noctum_aceite_1.lerLimiares)(JSON.parse(fs.readFileSync(limiares, 'utf8')));
457
+ }
458
+ catch (e) {
459
+ if (e instanceof noctum_aceite_1.RecusaDoAceite)
460
+ throw e;
461
+ console.error(`noctum.aceite.arquivo: ${e.message.slice(0, 200)}`);
462
+ return 2;
463
+ }
464
+ const carregado = (0, manifest_1.exigirManifesto)();
465
+ // RM-058, integração (T8, D12): o arquivo completo fica no estado; o publicável vai aonde o dono pedir.
466
+ const r = (0, noctum_aceite_1.aceiteDoPiloto)(carregado, arco, { injecoes: agenda, limiares: doDono });
467
+ const gravado = (0, noctum_aceite_1.gravarAceite)(carregado.raiz, r);
468
+ if (publicar)
469
+ fs.writeFileSync(publicar, `${JSON.stringify((0, noctum_aceite_1.publicavel)(r, gravado.sha256, (0, noctum_aceite_1.sensiveisDoArco)(carregado, arco)), null, 2)}\n`);
470
+ if (json)
471
+ console.log(JSON.stringify({ ...r, sha256: gravado.sha256, arquivo: gravado.arquivo }, null, 2));
472
+ else
473
+ console.log(textoDoAceite(r, gravado));
474
+ return r.veredito === 'aprovado' ? 0 : 1;
475
+ }
476
+ }
477
+ catch (e) {
478
+ return recusado(e);
479
+ }
480
+ console.error(exports.USO_DO_NOCTUM);
481
+ return 2;
482
+ }