@orkastery/cli 0.5.6 → 0.6.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (385) hide show
  1. package/adapters/README.md +18 -0
  2. package/adapters/claude-code/.claude-plugin/plugin.json +1 -0
  3. package/adapters/claude-code/README.md +37 -5
  4. package/adapters/claude-code/agents/ork-check.md +1 -0
  5. package/adapters/claude-code/agents/ork-go.md +1 -0
  6. package/adapters/claude-code/agents/ork-goal.md +1 -0
  7. package/adapters/claude-code/agents/ork-master.md +1 -0
  8. package/adapters/claude-code/agents/ork-plan.md +1 -0
  9. package/adapters/claude-code/agents/ork-ship.md +1 -0
  10. package/adapters/claude-code/hooks/hooks.json +2 -1
  11. package/adapters/claude-code/hooks/ork-guard.js +15 -1
  12. package/adapters/claude-code/hooks/ork-resposta.js +91 -0
  13. package/adapters/claude-code/hooks/ork-sensor.js +18 -2
  14. package/adapters/claude-code/hooks/quota-signal.js +14 -0
  15. package/adapters/claude-code/mods/ork-mensageiro/.claude-plugin/plugin.json +14 -0
  16. package/adapters/claude-code/mods/ork-mensageiro/hooks/caixa.ts +215 -0
  17. package/adapters/claude-code/mods/ork-mensageiro/hooks/hooks.json +3 -0
  18. package/adapters/claude-code/mods/ork-mensageiro/hooks/painel.tsx +165 -0
  19. package/adapters/claude-code/mods/ork-mensageiro/hooks/recepcao.ts +256 -0
  20. package/adapters/claude-code/mods/ork-mensageiro/hooks/register.tsx +481 -0
  21. package/adapters/claude-code/mods/ork-mensageiro/orkastery-mod.json +5 -0
  22. package/adapters/claude-code/mods/ork-mensageiro/types/index.d.ts +85 -0
  23. package/adapters/claude-code/mods/ork-pista/hooks/ci.ts +9 -5
  24. package/adapters/claude-code/mods/ork-ritual/.claude-plugin/plugin.json +14 -0
  25. package/adapters/claude-code/mods/ork-ritual/hooks/hooks.json +3 -0
  26. package/adapters/claude-code/mods/ork-ritual/hooks/nota.ts +88 -0
  27. package/adapters/claude-code/mods/ork-ritual/hooks/register.tsx +494 -0
  28. package/adapters/claude-code/mods/ork-ritual/hooks/replay.tsx +271 -0
  29. package/adapters/claude-code/mods/ork-ritual/hooks/ritual.ts +218 -0
  30. package/adapters/claude-code/mods/ork-ritual/orkastery-mod.json +5 -0
  31. package/adapters/claude-code/mods/ork-ritual/types/index.d.ts +106 -0
  32. package/adapters/claude-code/mods/ork-sentinela/hooks/vigia.ts +1 -1
  33. package/adapters/codex/skills/ork/SKILL.md +2 -0
  34. package/adapters/hermes/README.md +64 -1
  35. package/adapters/hermes/bin/ork-conhecimento-colecoes.sh +14 -0
  36. package/adapters/hermes/bin/ork-conhecimento-listar.sh +15 -0
  37. package/adapters/hermes/bin/ork-conhecimento-mostrar.sh +16 -0
  38. package/adapters/hermes/bin/ork-conhecimento-verificar.sh +15 -0
  39. package/adapters/hermes/bin/ork-vigia-batida.py +127 -0
  40. package/adapters/hermes/hermes.plugin.json +4 -0
  41. package/adapters/hermes/hitl-ingress/__init__.py +101 -8
  42. package/adapters/hermes/skills/orkastery-devmaster/SKILL.md +2 -2
  43. package/adapters/openclaw/README.md +81 -9
  44. package/adapters/openclaw/bin/ork-vigia-batida.js +86 -0
  45. package/adapters/openclaw/dist/hitl-ingress.js +106 -9
  46. package/adapters/openclaw/dist/index.js +86 -0
  47. package/adapters/openclaw/openclaw.plugin.json +34 -4
  48. package/adapters/openclaw/package.json +2 -2
  49. package/adapters/openclaw/src/hitl-ingress.ts +103 -9
  50. package/adapters/openclaw/src/index.ts +94 -0
  51. package/assets/adapters-en/claude-code/README.md +403 -0
  52. package/assets/adapters-en/claude-code/agents/ork-check.md +33 -0
  53. package/assets/adapters-en/claude-code/agents/ork-go.md +33 -0
  54. package/assets/adapters-en/claude-code/agents/ork-goal.md +34 -0
  55. package/assets/adapters-en/claude-code/agents/ork-master.md +35 -0
  56. package/assets/adapters-en/claude-code/agents/ork-plan.md +33 -0
  57. package/assets/adapters-en/claude-code/agents/ork-ship.md +33 -0
  58. package/assets/adapters-en/claude-code/commands/check.md +46 -0
  59. package/assets/adapters-en/claude-code/commands/go.md +46 -0
  60. package/assets/adapters-en/claude-code/commands/goal.md +55 -0
  61. package/assets/adapters-en/claude-code/commands/master.md +54 -0
  62. package/assets/adapters-en/claude-code/commands/onboarding.md +22 -0
  63. package/assets/adapters-en/claude-code/commands/ork.md +126 -0
  64. package/assets/adapters-en/claude-code/commands/plan.md +47 -0
  65. package/assets/adapters-en/claude-code/commands/ship.md +45 -0
  66. package/assets/adapters-en/codex/skills/ork/SKILL.md +85 -0
  67. package/assets/adapters-en/hermes/README.md +273 -0
  68. package/assets/adapters-en/hermes/skills/orkastery-devmaster/SKILL.md +169 -0
  69. package/assets/references-en/README.md +25 -0
  70. package/assets/references-en/code-review-axes.md +82 -0
  71. package/assets/references-en/definition-of-done.md +74 -0
  72. package/assets/references-en/performance-checklist.md +53 -0
  73. package/assets/references-en/security-checklist.md +101 -0
  74. package/assets/references-en/testing-patterns.md +51 -0
  75. package/assets/security-scan/defaults/.golangci.yml +2 -0
  76. package/assets/security-scan/defaults/eslint.config.mjs +11 -0
  77. package/assets/security-scan/defaults/gitleaks.toml +3 -0
  78. package/assets/security-scan/defaults/ruff.toml +1 -0
  79. package/assets/security-scan/tools-agil.json +87 -0
  80. package/assets/security-scan/tools.json +625 -0
  81. package/assets/skills-en/core/onboarding/SKILL.md +58 -0
  82. package/assets/skills-en/core/orkastery-bootstrap/SKILL.md +119 -0
  83. package/assets/skills-en/core/thread-state/SKILL.md +88 -0
  84. package/assets/skills-en/governance/decision-triage/SKILL.md +65 -0
  85. package/assets/skills-en/governance/narrative-guardian/SKILL.md +66 -0
  86. package/assets/skills-en/governance/roadmap-keeper/SKILL.md +60 -0
  87. package/assets/skills-en/governance/scope-check-capability-map/SKILL.md +71 -0
  88. package/assets/skills-en/observability/thread-tracing/SKILL.md +63 -0
  89. package/assets/skills-en/phases/check-quality/SKILL.md +103 -0
  90. package/assets/skills-en/phases/go-implementation/SKILL.md +78 -0
  91. package/assets/skills-en/phases/goal-definition/SKILL.md +69 -0
  92. package/assets/skills-en/phases/master-metrics/SKILL.md +72 -0
  93. package/assets/skills-en/phases/plan-specification/SKILL.md +67 -0
  94. package/assets/skills-en/phases/security-remediation/SKILL.md +70 -0
  95. package/assets/skills-en/phases/ship-release/SKILL.md +71 -0
  96. package/assets/skills-en/reviewers/code-reviewer/SKILL.md +61 -0
  97. package/assets/skills-en/reviewers/security-auditor/SKILL.md +93 -0
  98. package/assets/skills-en/reviewers/test-engineer/SKILL.md +66 -0
  99. package/assets/skills-en/reviewers/web-performance-auditor/SKILL.md +63 -0
  100. package/dist/adapters/claude-bg.js +118 -4
  101. package/dist/adapters/codex-controller-worker.js +12 -5
  102. package/dist/adapters/codex-events.js +16 -4
  103. package/dist/adapters/codex.js +3 -1
  104. package/dist/atualizar-branch.js +245 -0
  105. package/dist/auditoria.js +13 -11
  106. package/dist/auditrun.js +51 -46
  107. package/dist/autorizacao-duravel.js +327 -0
  108. package/dist/board.js +94 -40
  109. package/dist/branch-de-estado.js +16 -8
  110. package/dist/busca-semantica.js +7 -5
  111. package/dist/catalogo.js +2 -1
  112. package/dist/changelog-reconciliacao.js +290 -0
  113. package/dist/check-agil.js +500 -0
  114. package/dist/check-modo.js +41 -0
  115. package/dist/check-paralelo.js +183 -0
  116. package/dist/ci.js +248 -45
  117. package/dist/ciclos.js +8 -6
  118. package/dist/claim-lint.js +12 -8
  119. package/dist/claims-conferir.js +47 -39
  120. package/dist/claims.js +10 -9
  121. package/dist/company-brain-client.js +10 -3
  122. package/dist/company-brain-migration.js +11 -5
  123. package/dist/conducao-batida.js +759 -0
  124. package/dist/conducao-sentinela.js +25 -8
  125. package/dist/conducao.js +84 -29
  126. package/dist/conhecimento-consulta.js +270 -0
  127. package/dist/conhecimento.js +111 -87
  128. package/dist/conta-esgotada.js +127 -0
  129. package/dist/dado-privado.js +816 -0
  130. package/dist/decisao-autonoma.js +5 -4
  131. package/dist/demo.js +14 -12
  132. package/dist/dependencias-da-worktree.js +25 -0
  133. package/dist/divida.js +38 -36
  134. package/dist/docs.js +81 -74
  135. package/dist/doctor-forja.js +345 -0
  136. package/dist/doctor-pulse-cron.js +113 -1
  137. package/dist/doctor.js +164 -6
  138. package/dist/dsn-da-memoria.js +417 -0
  139. package/dist/entrega-por-mod.js +503 -0
  140. package/dist/entrega-pr.js +143 -43
  141. package/dist/esgotamentos.js +13 -11
  142. package/dist/estado-thread.js +21 -18
  143. package/dist/evalrunner.js +35 -32
  144. package/dist/fabrica-batida.js +34 -21
  145. package/dist/fabrica-estado.js +13 -10
  146. package/dist/fix.js +21 -19
  147. package/dist/forja/adaptador.js +6 -0
  148. package/dist/forja/ambiente-de-ci.js +27 -0
  149. package/dist/forja/api.js +256 -0
  150. package/dist/forja/cache.js +89 -0
  151. package/dist/forja/cli.js +60 -0
  152. package/dist/forja/contrato.js +9 -0
  153. package/dist/forja/endereco.js +43 -0
  154. package/dist/forja/estado.js +22 -0
  155. package/dist/forja/executor.js +73 -0
  156. package/dist/forja/github/ci.js +95 -0
  157. package/dist/forja/github/dono-da-rede.js +18 -0
  158. package/dist/forja/github/metadados.js +15 -0
  159. package/dist/forja/github/pedidos.js +200 -0
  160. package/dist/forja/gitlab/ci.js +141 -0
  161. package/dist/forja/gitlab/consultas.js +59 -0
  162. package/dist/forja/gitlab/dono-da-rede.js +43 -0
  163. package/dist/forja/gitlab/metadados.js +15 -0
  164. package/dist/forja/gitlab/pedidos-abertos.js +158 -0
  165. package/dist/forja/gitlab/pedidos.js +141 -0
  166. package/dist/forja/produtor.js +32 -0
  167. package/dist/forja/registro.js +31 -0
  168. package/dist/forja/resolver.js +121 -0
  169. package/dist/forja/texto.js +13 -0
  170. package/dist/forja/versao.js +71 -0
  171. package/dist/forja.js +123 -80
  172. package/dist/handoff.js +23 -13
  173. package/dist/hitl-contract.js +46 -43
  174. package/dist/hitl-curto.js +37 -25
  175. package/dist/hitl-gates.js +13 -11
  176. package/dist/hitl-local-receipt.js +51 -0
  177. package/dist/hitl-local.js +11 -2
  178. package/dist/hitl-lock.js +5 -11
  179. package/dist/hitl-public-receipt.js +11 -0
  180. package/dist/hitl-resumo.js +44 -1
  181. package/dist/hitl-sessions.js +62 -9
  182. package/dist/hitl-texto-livre.js +7 -4
  183. package/dist/hitl.js +34 -31
  184. package/dist/horario.js +16 -0
  185. package/dist/hosts.js +104 -134
  186. package/dist/index.js +848 -548
  187. package/dist/indice-vetorial.js +14 -12
  188. package/dist/init.js +11 -2
  189. package/dist/integracoes-locais.js +2 -0
  190. package/dist/intelligence-graph-cli.js +123 -69
  191. package/dist/intelligence-graph-query.js +37 -22
  192. package/dist/leases.js +19 -18
  193. package/dist/ledger-stats.js +17 -16
  194. package/dist/ledger.js +31 -1
  195. package/dist/licoes.js +12 -11
  196. package/dist/locale-accounts.js +220 -0
  197. package/dist/locale-adapter.js +291 -0
  198. package/dist/locale-ajuda.js +76 -4
  199. package/dist/locale-audit.js +199 -0
  200. package/dist/locale-claims.js +213 -0
  201. package/dist/locale-conducao.js +138 -0
  202. package/dist/locale-conhecimento.js +181 -0
  203. package/dist/locale-decisao.js +205 -0
  204. package/dist/locale-docs.js +230 -0
  205. package/dist/locale-estado.js +101 -0
  206. package/dist/locale-forja.js +290 -0
  207. package/dist/locale-gerados.js +5 -0
  208. package/dist/locale-grafo.js +129 -0
  209. package/dist/locale-master.js +83 -0
  210. package/dist/locale-network.js +524 -0
  211. package/dist/locale-operacao-restante.js +931 -0
  212. package/dist/locale-projetos.js +100 -0
  213. package/dist/locale-prompts.js +194 -0
  214. package/dist/locale-pulse.js +140 -2
  215. package/dist/locale-reservas.js +87 -0
  216. package/dist/locale-retry.js +145 -6
  217. package/dist/locale-security-scan.js +69 -0
  218. package/dist/locale-setup.js +192 -0
  219. package/dist/locale-ship.js +169 -66
  220. package/dist/locale-thread.js +149 -5
  221. package/dist/locale-verify.js +80 -4
  222. package/dist/locale-worktree.js +246 -0
  223. package/dist/locale.js +553 -9
  224. package/dist/maestro-runtime.js +22 -3
  225. package/dist/manifest.js +287 -11
  226. package/dist/maquina-ociosa.js +211 -0
  227. package/dist/maquina.js +10 -5
  228. package/dist/master-nota-local.js +200 -0
  229. package/dist/master-nota.js +10 -2
  230. package/dist/master.js +118 -41
  231. package/dist/mcp-conhecimento.js +52 -0
  232. package/dist/mcp-experiencia.js +26 -5
  233. package/dist/mcp-install.js +73 -8
  234. package/dist/mcp-noctum.js +101 -0
  235. package/dist/mcp-server.js +82 -14
  236. package/dist/mcp-ship-transporte.js +977 -0
  237. package/dist/mcp-ship.js +68 -24
  238. package/dist/mcp-transportes.js +17 -0
  239. package/dist/memoria.js +63 -58
  240. package/dist/modos-migracao.js +8 -6
  241. package/dist/modos.js +17 -18
  242. package/dist/network-roadmap.js +85 -49
  243. package/dist/noctum-aceite.js +789 -0
  244. package/dist/noctum-arco.js +540 -33
  245. package/dist/noctum-capacidade.js +3 -3
  246. package/dist/noctum-changelog.js +399 -0
  247. package/dist/noctum-cli.js +482 -0
  248. package/dist/noctum-coordenacao.js +1225 -0
  249. package/dist/noctum-entrega.js +1169 -0
  250. package/dist/noctum-envelope.js +252 -16
  251. package/dist/noctum-execucao.js +95 -23
  252. package/dist/noctum-fechamento.js +405 -0
  253. package/dist/noctum-fila.js +43 -9
  254. package/dist/noctum-guarda.js +256 -0
  255. package/dist/noctum-integracao.js +507 -0
  256. package/dist/noctum-maquinas.js +383 -0
  257. package/dist/noctum-medicao.js +450 -0
  258. package/dist/noctum-modo.js +362 -0
  259. package/dist/noctum-pergunta-canal.js +96 -0
  260. package/dist/noctum-pergunta.js +115 -0
  261. package/dist/noctum-provas.js +838 -0
  262. package/dist/noctum-reconciliacao.js +591 -0
  263. package/dist/noctum-registro.js +215 -0
  264. package/dist/noctum-relatorio.js +827 -0
  265. package/dist/noctum-resposta.js +207 -0
  266. package/dist/noctum-sessoes-em-voo.js +93 -0
  267. package/dist/noctum-supervisao.js +649 -0
  268. package/dist/noctum-terminal.js +459 -0
  269. package/dist/noctum-transporte.js +655 -0
  270. package/dist/noctum-vigia.js +639 -0
  271. package/dist/ocupacao.js +3 -1
  272. package/dist/onboarding.js +16 -5
  273. package/dist/orkmind.js +39 -23
  274. package/dist/orquestracao.js +31 -35
  275. package/dist/parado-no-condutor.js +146 -124
  276. package/dist/phase.js +53 -27
  277. package/dist/policies.js +33 -0
  278. package/dist/postura-local.js +4 -3
  279. package/dist/procedencia.js +9 -14
  280. package/dist/projeto-alvo.js +59 -20
  281. package/dist/prompts.js +136 -42
  282. package/dist/prova-minima.js +5 -6
  283. package/dist/pulse-cadencia.js +5 -4
  284. package/dist/pulse-consentimento.js +53 -1
  285. package/dist/pulse-delivery.js +143 -27
  286. package/dist/pulse-resposta.js +368 -4
  287. package/dist/pulse.js +136 -3
  288. package/dist/ratelimit.js +12 -4
  289. package/dist/recall.js +14 -13
  290. package/dist/rede-adesao.js +13 -8
  291. package/dist/rede-forja.js +108 -24
  292. package/dist/rede-status.js +63 -45
  293. package/dist/rede.js +86 -46
  294. package/dist/retomada-checkpoint.js +101 -0
  295. package/dist/retry.js +228 -73
  296. package/dist/roadmap-reservas.js +32 -32
  297. package/dist/runtime-ambiente.js +5 -0
  298. package/dist/runtime-context.js +117 -43
  299. package/dist/runtime-escada.js +423 -0
  300. package/dist/runtime-profiles.js +103 -46
  301. package/dist/saida-segura.js +3 -2
  302. package/dist/security-scan/agil.js +355 -0
  303. package/dist/security-scan/cli.js +76 -0
  304. package/dist/security-scan/compare.js +149 -0
  305. package/dist/security-scan/config.js +93 -0
  306. package/dist/security-scan/detect.js +97 -0
  307. package/dist/security-scan/executor.js +188 -0
  308. package/dist/security-scan/guard.js +180 -0
  309. package/dist/security-scan/imagem-de-lint.js +96 -0
  310. package/dist/security-scan/normalize/actionlint.js +12 -0
  311. package/dist/security-scan/normalize/eslint.js +12 -0
  312. package/dist/security-scan/normalize/gitleaks.js +13 -0
  313. package/dist/security-scan/normalize/golangci-lint.js +13 -0
  314. package/dist/security-scan/normalize/govulncheck.js +36 -0
  315. package/dist/security-scan/normalize/index.js +25 -0
  316. package/dist/security-scan/normalize/npm-audit.js +30 -0
  317. package/dist/security-scan/normalize/osv-scanner.js +32 -0
  318. package/dist/security-scan/normalize/oxlint.js +51 -0
  319. package/dist/security-scan/normalize/pip-audit.js +16 -0
  320. package/dist/security-scan/normalize/ruff.js +12 -0
  321. package/dist/security-scan/normalize/semgrep.js +20 -0
  322. package/dist/security-scan/normalize/trivy.js +33 -0
  323. package/dist/security-scan/normalize/util.js +204 -0
  324. package/dist/security-scan/normalize/zizmor.js +19 -0
  325. package/dist/security-scan/report.js +156 -0
  326. package/dist/security-scan/run.js +448 -0
  327. package/dist/security-scan/tools.js +62 -0
  328. package/dist/security-scan/trabalhador.js +74 -0
  329. package/dist/security-scan/types.js +15 -0
  330. package/dist/session-events.js +19 -2
  331. package/dist/session-watcher-claude.js +74 -19
  332. package/dist/session-watcher.js +156 -10
  333. package/dist/sessoes-contas.js +9 -0
  334. package/dist/sessoes-inventario.js +1 -1
  335. package/dist/sessoes.js +25 -23
  336. package/dist/setup.js +59 -58
  337. package/dist/ship-publicar.js +263 -92
  338. package/dist/ship.js +160 -17
  339. package/dist/superficie.js +14 -11
  340. package/dist/thread-close.js +9 -9
  341. package/dist/thread.js +121 -18
  342. package/dist/tokens.js +15 -11
  343. package/dist/trabalho-thread.js +297 -0
  344. package/dist/transporte-do-canal.js +189 -0
  345. package/dist/types.js +12 -1
  346. package/dist/util.js +5 -2
  347. package/dist/varredura-acoes.js +507 -0
  348. package/dist/verify.js +472 -29
  349. package/dist/worktree-local.js +12 -10
  350. package/dist/worktree.js +81 -85
  351. package/eval/casos/check-quality.json +77 -0
  352. package/eval/casos/security-auditor.json +148 -0
  353. package/eval/casos/security-remediation.json +161 -0
  354. package/eval/fixtures/security-scan/README.md +8 -0
  355. package/eval/fixtures/security-scan/go/.github/workflows/ci.yml +12 -0
  356. package/eval/fixtures/security-scan/go/Dockerfile +4 -0
  357. package/eval/fixtures/security-scan/go/README.md +4 -0
  358. package/eval/fixtures/security-scan/go/config.go +4 -0
  359. package/eval/fixtures/security-scan/go/go.mod +5 -0
  360. package/eval/fixtures/security-scan/go/go.sum +2 -0
  361. package/eval/fixtures/security-scan/go/main.go +31 -0
  362. package/eval/fixtures/security-scan/js/.github/workflows/ci.yml +12 -0
  363. package/eval/fixtures/security-scan/js/Dockerfile +3 -0
  364. package/eval/fixtures/security-scan/js/README.md +4 -0
  365. package/eval/fixtures/security-scan/js/package-lock.json +844 -0
  366. package/eval/fixtures/security-scan/js/package.json +10 -0
  367. package/eval/fixtures/security-scan/js/src/config.js +4 -0
  368. package/eval/fixtures/security-scan/js/src/server.js +17 -0
  369. package/eval/fixtures/security-scan/js/src/util.ts +4 -0
  370. package/eval/fixtures/security-scan/js/tsconfig.json +4 -0
  371. package/eval/fixtures/security-scan/python/.github/workflows/ci.yml +12 -0
  372. package/eval/fixtures/security-scan/python/Dockerfile +3 -0
  373. package/eval/fixtures/security-scan/python/README.md +4 -0
  374. package/eval/fixtures/security-scan/python/app/__init__.py +0 -0
  375. package/eval/fixtures/security-scan/python/app/config.py +2 -0
  376. package/eval/fixtures/security-scan/python/app/main.py +19 -0
  377. package/eval/fixtures/security-scan/python/requirements.txt +1 -0
  378. package/package.json +9 -4
  379. package/references/security-checklist.md +3 -3
  380. package/skills/README.md +1 -0
  381. package/skills/core/orkastery-bootstrap/SKILL.md +2 -2
  382. package/skills/phases/check-quality/SKILL.md +16 -0
  383. package/skills/phases/go-implementation/SKILL.md +6 -0
  384. package/skills/phases/security-remediation/SKILL.md +70 -0
  385. package/skills/reviewers/security-auditor/SKILL.md +25 -0
package/dist/ocupacao.js CHANGED
@@ -29,6 +29,7 @@ exports.sessaoLivreDaVaga = sessaoLivreDaVaga;
29
29
  exports.avaliarOcupacao = avaliarOcupacao;
30
30
  const ledger_1 = require("./ledger");
31
31
  const impedimento_1 = require("./impedimento");
32
+ const types_1 = require("./types");
32
33
  const sessoes_adopt_1 = require("./sessoes-adopt");
33
34
  /** Estado que o `ork phase run` grava quando o bloco despachado pausa ao fim. */
34
35
  exports.PAUSA_PREVISTA = 'prevista ao fim do bloco';
@@ -251,7 +252,8 @@ function avaliarOcupacao(thread, doLedger, opcoes) {
251
252
  };
252
253
  }
253
254
  const registro = (0, sessoes_adopt_1.ehRegistroDeAdocao)(thread);
254
- if (!registro && (sessaoEstado === 'working' || (sessaoEstado === '' && sessionId !== null))) {
255
+ // RM-063 (fatia 3, achado a): `busy` e `running` tambem sao a sessao trabalhando.
256
+ if (!registro && ((0, types_1.estadoDeTrabalho)(sessaoEstado) || (sessaoEstado === '' && sessionId !== null))) {
255
257
  return {
256
258
  ...base,
257
259
  classe: 'ativa',
@@ -51,6 +51,7 @@ const node_crypto_1 = require("node:crypto");
51
51
  const manifest_1 = require("./manifest");
52
52
  const project_state_1 = require("./project-state");
53
53
  const ledger_1 = require("./ledger");
54
+ const transporte_do_canal_1 = require("./transporte-do-canal");
54
55
  const policies_1 = require("./policies");
55
56
  const horario_1 = require("./horario");
56
57
  const experiencia_1 = require("./experiencia");
@@ -141,6 +142,9 @@ function validarConteudo(etapa, conteudo) {
141
142
  invalido();
142
143
  }
143
144
  }
145
+ // RM-063 (fatia 3, H3): o canal do dono, com o host e o chat autorizado; o transporte pronto sai dele.
146
+ if (etapa === 'maestro' && objeto(conteudo) && Object.hasOwn(conteudo, 'canal') && !(0, transporte_do_canal_1.canalValido)(conteudo.canal))
147
+ invalido();
144
148
  // Etapas sensíveis usam um formato fechado: não há espaço para texto de credenciais.
145
149
  if (etapa === 'credenciais' || etapa === 'bancos') {
146
150
  if (!objeto(conteudo))
@@ -342,16 +346,23 @@ function gravarEtapa(raiz, nome, conteudo, por = 'owner') {
342
346
  const etapa = exigirEtapa(nome);
343
347
  exigirAutor(por);
344
348
  validarConteudo(etapa, conteudo);
349
+ // RM-063 (fatia 3, H3): o transporte pronto do host do canal, resolvido nesta maquina antes de qualquer gravacao.
350
+ const transporte = etapa === 'maestro' && objeto(conteudo) && (0, transporte_do_canal_1.canalValido)(conteudo.canal)
351
+ ? (0, transporte_do_canal_1.transporteDoCanal)(raiz, conteudo.canal) : null;
345
352
  return comTrava(raiz, () => {
346
353
  const solicitadas = conteudo;
347
354
  const { estado } = lerParaMutacao(raiz), anterior = estado.etapas[etapa];
348
- // Configurar preferências não apaga objetivos ou outras respostas da etapa maestro.
349
- if (etapa === 'maestro' && objeto(conteudo) && objeto(conteudo.owner) && anterior && objeto(anterior.conteudo)) {
350
- conteudo = { ...anterior.conteudo, ...conteudo, owner: {
351
- ...(objeto(anterior.conteudo.owner) ? anterior.conteudo.owner : {}), ...conteudo.owner,
352
- } };
355
+ // Configurar preferências (ou o canal, RM-063) não apaga objetivos ou outras respostas da etapa maestro.
356
+ if (etapa === 'maestro' && objeto(conteudo) && (objeto(conteudo.owner) || objeto(conteudo.canal)) && anterior && objeto(anterior.conteudo)) {
357
+ conteudo = { ...anterior.conteudo, ...conteudo, ...(objeto(conteudo.owner) ? { owner: {
358
+ ...(objeto(anterior.conteudo.owner) ? anterior.conteudo.owner : {}), ...conteudo.owner,
359
+ } } : {}) };
353
360
  validarConteudo(etapa, conteudo);
354
361
  }
362
+ // RM-063 (fatia 3, H3): o transporte do pulse sai junto com o canal do dono, e antes da resposta: sem o host nesta
363
+ // maquina, nada e gravado. A mesma resposta de novo regrava o transporte (a maquina nunca fica sem ele).
364
+ if (transporte)
365
+ (0, transporte_do_canal_1.gravarTransporteDoCanal)(raiz, transporte);
355
366
  validarConteudo(etapa, conteudo);
356
367
  // Persistir só chaves deste pedido: uma resposta antiga não vence edição explícita do manifesto.
357
368
  validarConteudo(etapa, solicitadas);
package/dist/orkmind.js CHANGED
@@ -84,6 +84,7 @@ const node_child_process_1 = require("node:child_process");
84
84
  const node_crypto_1 = require("node:crypto");
85
85
  const node_util_1 = require("node:util");
86
86
  const node_perf_hooks_1 = require("node:perf_hooks");
87
+ const dsn_da_memoria_1 = require("./dsn-da-memoria");
87
88
  /** As colecoes do OrkMind que o `ork` grava (guia: docs/guias/memoria-e-handoff.md). */
88
89
  exports.COLECOES_DO_ORK = [
89
90
  'decision',
@@ -426,26 +427,17 @@ class DriverCliOrkMind {
426
427
  return chaveDeEmbeddingAceita(valor, this.config.dsn) ? valor : '';
427
428
  }
428
429
  contemSegredo(valor) {
429
- const segredo = this.config.dsn;
430
- const proibidos = [segredo];
430
+ // RM-069 (D6, D20, D21): a DSN e a senha dela, de qualquer tamanho, pelos fragmentos e pela barreira de domicilio unico.
431
+ const proibidos = (0, dsn_da_memoria_1.fragmentosDaDsn)(this.config.dsn);
431
432
  const nome = this.config.variavelDaChaveDeEmbedding ?? '';
432
433
  const chave = nome ? (process.env[nome] ?? '').trim() : '';
433
434
  if (chave.length >= 12)
434
435
  proibidos.push(chave);
435
- try {
436
- const senha = new URL(segredo).password;
437
- if (senha.length >= 12)
438
- proibidos.push(senha, decodeURIComponent(senha));
439
- }
440
- catch { /* DSN opaca */ }
441
- const examinar = (x) => typeof x === 'string'
442
- ? proibidos.some(p => p && x.includes(p))
443
- : !!x && typeof x === 'object' && Object.entries(x).some(([k, v]) => examinar(k) || examinar(v));
444
- return examinar(valor);
436
+ return (0, dsn_da_memoria_1.contemFragmento)(valor, proibidos);
445
437
  }
446
438
  rodar(pedido, timeoutMs = this.config.timeoutMs) {
447
439
  if (!this.config.dsn.trim())
448
- throw new Error('dsn.env-ausente');
440
+ throw new Error(this.config.falhaDaDsn ?? 'dsn.env-ausente');
449
441
  if (this.contemSegredo(pedido))
450
442
  throw new Error('memory.transport.secret: conteudo recusado');
451
443
  const [python, ...prefixo] = this.python();
@@ -920,14 +912,21 @@ class DriverEmMemoria {
920
912
  }
921
913
  }
922
914
  exports.DriverEmMemoria = DriverEmMemoria;
923
- /** Config de memoria efetiva a partir do manifesto, ja com o tenant resolvido. */
924
- function configDoManifesto(manifesto) {
925
- const variavel = manifesto.memory.database_url_env ?? '';
915
+ /**
916
+ * Config de memoria efetiva a partir do manifesto, ja com o tenant resolvido. RM-069: a DSN vem da fonte declarada
917
+ * (a variavel de `database_url_env` ou o arquivo de `database_url_file`) pelo resolvedor unico, lida a cada chamada (D12).
918
+ */
919
+ function configDoManifesto(manifesto, env = process.env) {
920
+ const fonte = (0, dsn_da_memoria_1.resolverDsn)(manifesto.memory, { env });
926
921
  return {
927
922
  modo: manifesto.memory.mode,
928
923
  cli: manifesto.memory.cli || 'orkmind',
929
- variavel,
930
- dsn: variavel ? (process.env[variavel] ?? '') : '',
924
+ variavel: fonte.fonte === 'ambiente' ? fonte.rotulo : '',
925
+ dsn: fonte.dsn,
926
+ fonteDaDsn: fonte.fonte,
927
+ rotuloDaDsn: fonte.rotulo,
928
+ falhaDaDsn: fonte.falha,
929
+ detalheDaDsn: fonte.detalhe,
931
930
  timeoutMs: manifesto.memory.timeout_ms || 15000,
932
931
  universoTimeoutMs: prazoDoUniversoMs(manifesto.memory.universo_timeout_ms),
933
932
  tenant: manifesto.memory.tenant || manifesto.project.name,
@@ -943,9 +942,18 @@ function correcaoDe(motivo, config) {
943
942
  case 'modo.desconhecido':
944
943
  return 'memory.mode aceita files ou orkmind';
945
944
  case 'dsn.nao-declarado':
946
- return 'declare memory.database_url_env com o NOME da variavel de ambiente da base do tenant';
945
+ return 'declare memory.database_url_file (arquivo 0600 em ~/.orkastery/segredos/) ou memory.database_url_env ' +
946
+ 'com o NOME da variavel de ambiente da base do tenant';
947
947
  case 'dsn.env-ausente':
948
948
  return `exporte ${config.variavel} com a DSN da base propria do tenant (o ork nao adivinha base)`;
949
+ case 'dsn.arquivo-ausente':
950
+ return `grave a DSN da base propria do tenant em ${config.rotuloDaDsn}, numa linha e com permissao 0600 (o ork nao adivinha base)`;
951
+ case 'dsn.arquivo-inseguro':
952
+ return `deixe ${config.rotuloDaDsn} como arquivo do usuario que roda o ork, numa pasta dele, com chmod 600 ` +
953
+ '(DSN que outro usuario pode ler nao e lida)';
954
+ case 'dsn.arquivo-invalido':
955
+ return `regrave ${config.rotuloDaDsn} como arquivo comum numa pasta de segredos comum, dentro da casa do usuario e ` +
956
+ 'sem link simbolico no caminho, so com a DSN (esquema://...), numa linha e sem NOME= na frente';
949
957
  case 'cli.ausente':
950
958
  return `instale o OrkMind e garanta "${config.cli}" no PATH`;
951
959
  case 'orkmind.indisponivel':
@@ -966,6 +974,9 @@ function resolverRegime(manifesto, driver) {
966
974
  dsnPresente: config.dsn.trim() !== '',
967
975
  cli: config.cli,
968
976
  tenant: config.tenant,
977
+ // RM-069 (D5): a fonte da DSN, aditiva; o arquivo so pelo rotulo com `~`.
978
+ fonteDaDsn: config.fonteDaDsn ?? 'nenhuma',
979
+ ...(config.fonteDaDsn === 'arquivo' ? { arquivoDaDsn: config.rotuloDaDsn } : {}),
969
980
  };
970
981
  const degradar = (motivo, detalhe) => ({
971
982
  estado: {
@@ -983,9 +994,13 @@ function resolverRegime(manifesto, driver) {
983
994
  if (config.modo !== 'orkmind') {
984
995
  return degradar('modo.desconhecido', `memory.mode "${config.modo}" nao e um regime conhecido`);
985
996
  }
986
- // Isolamento por tenant: sem NOME de variavel declarado nao ha base, e nao ha palpite.
987
- if (config.variavel === '') {
988
- return degradar('dsn.nao-declarado', 'memory.database_url_env vazio: sem base declarada o ork nao conecta em base nenhuma');
997
+ // Isolamento por tenant: sem fonte declarada (variavel ou arquivo) nao ha base, e nao ha palpite.
998
+ if (config.fonteDaDsn === 'nenhuma') {
999
+ return degradar('dsn.nao-declarado', 'memory.database_url_file e memory.database_url_env vazios: sem base declarada o ork nao conecta em base nenhuma');
1000
+ }
1001
+ // RM-069: o arquivo que falha degrada com o motivo dele e nunca cai para a variavel.
1002
+ if (config.dsn.trim() === '' && !driver && config.fonteDaDsn === 'arquivo') {
1003
+ return degradar(config.falhaDaDsn ?? 'dsn.arquivo-ausente', `${config.detalheDaDsn}: o ork nao cai para outra fonte (precedente memory-orkmind)`);
989
1004
  }
990
1005
  if (config.dsn.trim() === '' && !driver) {
991
1006
  return degradar('dsn.env-ausente', `${config.variavel} nao esta no ambiente: o ork nao cai para outra DSN (precedente memory-orkmind)`);
@@ -1003,7 +1018,8 @@ function resolverRegime(manifesto, driver) {
1003
1018
  ...base,
1004
1019
  efetivo: 'orkmind',
1005
1020
  motivo: null,
1006
- detalhe: `${efetivoDriver.nome} ativo na base declarada por ${config.variavel}: ${saude.detalhe}`,
1021
+ detalhe: `${efetivoDriver.nome} ativo na base declarada por ${config.fonteDaDsn === 'arquivo' ? config.rotuloDaDsn : config.variavel}: ` +
1022
+ saude.detalhe,
1007
1023
  correcao: '',
1008
1024
  },
1009
1025
  driver: efetivoDriver,
@@ -74,7 +74,9 @@ const modos_1 = require("./modos");
74
74
  const ocupacao_1 = require("./ocupacao");
75
75
  const ratelimit_1 = require("./ratelimit");
76
76
  const impedimento_1 = require("./impedimento");
77
+ const runtime_escada_1 = require("./runtime-escada");
77
78
  const thread_1 = require("./thread");
79
+ const types_1 = require("./types");
78
80
  const util_1 = require("./util");
79
81
  const horario_1 = require("./horario");
80
82
  Object.defineProperty(exports, "duracaoCurta", { enumerable: true, get: function () { return horario_1.duracaoCurta; } });
@@ -158,7 +160,8 @@ function pausasAbertas(thread, eventos, estados, quando) {
158
160
  // continua listada, e o monitor a lia como uma sessao que ainda ia terminar. Uma
159
161
  // sessao `blocked` e o contrario disso -- ela e a pausa, ja chegada.
160
162
  const sessaoEstado = estados === null ? null : estados.get(sessionId) ?? null;
161
- const sessaoViva = estados === null ? null : sessaoEstado === 'working' || sessaoEstado === '';
163
+ // RM-063 (fatia 3, achado a): `busy` e `running` tambem sao a sessao trabalhando.
164
+ const sessaoViva = estados === null ? null : (0, types_1.estadoDeTrabalho)(sessaoEstado) || sessaoEstado === '';
162
165
  const sobre = typeof e.previstaSobre === 'string' && e.previstaSobre !== ''
163
166
  ? e.previstaSobre
164
167
  : blocoDaFase(thread, fase).pausaSobre;
@@ -205,13 +208,17 @@ function pausasAbertas(thread, eventos, estados, quando) {
205
208
  return;
206
209
  const { bloco, pausaSobre } = blocoDaFase(thread, fase);
207
210
  const imp = (0, impedimento_1.ehImpedimentoDoDono)(e.motivo) ? (0, impedimento_1.impedimentoDoEvento)(e) : null;
211
+ // RM-063 (F4): a escada de recuperacao do runtime que acabou chama o dono com as alternativas e o comando que retoma.
212
+ const escada = !imp && e.motivo === 'human.pending' ? (0, runtime_escada_1.escadaDoEvento)(e) : null;
208
213
  porFase.set(chave, parada({
209
214
  natureza: 'pausa-humana',
210
215
  motivo: imp ? e.motivo : 'human.pending',
211
216
  fase,
212
217
  bloco,
213
- pausaSobre: imp ? `rodar \`${imp.comando}\` no terminal` : pausaSobre || 'autorizacao da retomada',
218
+ pausaSobre: imp ? `rodar \`${imp.comando}\` no terminal` : escada ? 'a escada de recuperacao do runtime'
219
+ : pausaSobre || 'autorizacao da retomada',
214
220
  ...(imp ? { impedimento: imp } : {}),
221
+ ...(escada ? { escada } : {}),
215
222
  detalhe: typeof e.detalhe === 'string' && e.detalhe !== ''
216
223
  ? e.detalhe
217
224
  : (0, locale_1.textoDoCatalogo)((m) => m.pulse.motivos['human.pending']),
@@ -493,61 +500,50 @@ function montarMonitor(carregado, opcoes = {}) {
493
500
  * ISO (o `--json` e o ledger nao mudam); aqui o horario sai no fuso do dono.
494
501
  */
495
502
  function linhaDaParada(p, agora) {
503
+ const m = (0, locale_1.msg)().operacao.restante.monitor;
496
504
  const local = (texto) => (0, horario_1.localizarTexto)(texto, { agora });
497
505
  const L = [];
498
- L.push(` [${p.motivo}] parada ha ${(0, horario_1.duracaoRelativa)(p.paradaHaMin)} (desde ${(0, horario_1.formatarHora)(p.desdeEm, { agora })})`);
506
+ L.push(m.parada(p.motivo, (0, horario_1.duracaoRelativa)(p.paradaHaMin), (0, horario_1.formatarHora)(p.desdeEm, { agora })));
499
507
  if (p.pausaSobre)
500
- L.push(` o humano decide: ${p.pausaSobre}`);
501
- L.push(` detalhe : ${local(p.detalhe)}`);
502
- L.push(` evidencia: ${local(p.evidencia)}`);
503
- L.push(` correcao : ${local(p.correcao)}`);
508
+ L.push(m.humanoDecide(local(p.pausaSobre)));
509
+ L.push(m.detalhe(local(p.detalhe)));
510
+ L.push(m.evidencia(local(p.evidencia)));
511
+ L.push(m.correcao(local(p.correcao)));
504
512
  return L;
505
513
  }
506
514
  /** Texto de `ork orquestracao status`. */
507
515
  function textoDoMonitor(m) {
516
+ const t = (0, locale_1.msg)().operacao.restante.monitor;
508
517
  const L = [];
509
- L.push(`Monitor de orquestracao, projeto ${m.projeto} ` +
510
- `(${m.resumo.threads} thread(s) em ${m.perfis.length} perfil(is): ${m.perfis.join(', ')})`);
511
- L.push(` aguardando humano: ${m.resumo.aguardandoHumano} | com impedimento: ${m.resumo.comImpedimento} | ` +
512
- `em andamento: ${m.resumo.emAndamento} | podem avancar: ${m.resumo.podemAvancar} | ` +
513
- `fechadas: ${m.resumo.fechadas}`);
514
- L.push(` limite de atencao: ${m.atencaoMin} min (${m.resumo.acimaDoLimite} parada(s) acima, marcadas com !)`);
518
+ L.push(t.titulo(m.projeto, m.resumo.threads, m.perfis.length, m.perfis.join(', ')));
519
+ L.push(t.resumo(m.resumo.aguardandoHumano, m.resumo.comImpedimento, m.resumo.emAndamento, m.resumo.podemAvancar, m.resumo.fechadas));
520
+ L.push(t.limite(m.atencaoMin, m.resumo.acimaDoLimite));
515
521
  L.push(` ${(0, horario_1.legendaDoFuso)(undefined, m.consultadoEm)}`);
516
522
  if (!m.runtimeConsultado) {
517
- L.push(` [warn] ${m.runtimeDetalhe}: pausa prevista e reportada como valendo`);
523
+ L.push(t.runtime(m.runtimeDetalhe));
518
524
  }
519
525
  L.push('');
520
526
  // I-36 (T17): conducao em andamento nao e parada; ela aparece antes, com a linha unica.
521
527
  const conduzidas = m.linhas.filter((l) => l.conducao);
522
528
  if (conduzidas.length > 0) {
523
- L.push('Conduzidas agora:');
529
+ L.push(t.conduzidas);
524
530
  for (const l of conduzidas)
525
531
  L.push(` ${l.thread}: ${(0, conducao_texto_1.linhaDeConducao)(l.conducao, { agora: m.consultadoEm })}`);
526
532
  L.push('');
527
533
  }
528
534
  if (m.linhas.length === 0) {
529
- L.push(' Nenhuma thread parada: ninguem esperando veredito humano nem impedido.');
535
+ L.push(t.nenhuma);
530
536
  return L.join('\n');
531
537
  }
532
- L.push((0, util_1.tabela)([
533
- 'PERFIL',
534
- 'THREAD',
535
- 'FASE',
536
- 'STATUS',
537
- 'BLOCO QUE PAUSA',
538
- 'AGUARDA DO HUMANO',
539
- 'IMPEDIMENTO',
540
- 'ULTIMO EVENTO',
541
- 'PARADA HA',
542
- ], m.linhas.map((l) => [
538
+ L.push((0, util_1.tabela)([...t.colunas], m.linhas.map((l) => [
543
539
  l.perfil,
544
540
  l.thread,
545
541
  l.faseAtual,
546
- l.situacao,
542
+ t.situacoes[l.situacao] ?? l.situacao,
547
543
  l.pausas.map((p) => p.bloco || '?').join(' ') || '-',
548
544
  l.pausas.map((p) => p.pausaSobre).filter((s) => s !== '').join('; ') || '-',
549
- l.impedimentos.map((p) => p.motivo).join(' ') || 'nao',
550
- l.ultimoEvento ? l.ultimoEvento.tipo : '(sem ledger)',
545
+ l.impedimentos.map((p) => p.motivo).join(' ') || t.nao,
546
+ l.ultimoEvento ? l.ultimoEvento.tipo : t.semLedger,
551
547
  l.paradaHaMin === null
552
548
  ? '-'
553
549
  : `${(0, horario_1.duracaoRelativa)(l.paradaHaMin)}${l.acimaDoLimite ? ' !' : ''}`,
@@ -555,7 +551,7 @@ function textoDoMonitor(m) {
555
551
  const hitl = m.linhas.filter((l) => l.precisaDeHumano);
556
552
  if (hitl.length > 0) {
557
553
  L.push('');
558
- L.push('Esperando VEREDITO HUMANO agora (o orquestrador deve avisar o humano):');
554
+ L.push(t.esperando);
559
555
  for (const l of hitl) {
560
556
  L.push(` ${l.thread} (${l.tag}, ${l.nome})`);
561
557
  for (const p of l.pausas.filter((x) => x.sessaoViva !== true))
@@ -565,7 +561,7 @@ function textoDoMonitor(m) {
565
561
  const impedidas = m.linhas.filter((l) => l.temImpedimento);
566
562
  if (impedidas.length > 0) {
567
563
  L.push('');
568
- L.push('Com IMPEDIMENTO (nao e veredito humano: e colisao, gate, limite ou janela):');
564
+ L.push(t.impedidas);
569
565
  for (const l of impedidas) {
570
566
  L.push(` ${l.thread} (${l.tag}, ${l.nome})`);
571
567
  for (const p of l.impedimentos)
@@ -575,16 +571,16 @@ function textoDoMonitor(m) {
575
571
  const emCurso = m.linhas.filter((l) => l.pausas.some((p) => p.sessaoViva === true));
576
572
  if (emCurso.length > 0) {
577
573
  L.push('');
578
- L.push('Pausa PREVISTA, sessao ainda viva (nao avise ainda, mas ja e a proxima fila):');
574
+ L.push(t.previstas);
579
575
  for (const l of emCurso) {
580
576
  for (const p of l.pausas.filter((x) => x.sessaoViva === true)) {
581
- L.push(` ${l.thread}: ${p.bloco || '?'} vai pausar sobre "${p.pausaSobre}"`);
577
+ L.push(t.vaiPausar(l.thread, p.bloco || '?', (0, horario_1.localizarTexto)(p.pausaSobre, { agora: m.consultadoEm })));
582
578
  }
583
579
  }
584
580
  }
585
581
  if (m.resumo.aguardandoHumano === 0 && m.resumo.comImpedimento === 0) {
586
582
  L.push('');
587
- L.push(' Nenhuma thread parada: ninguem esperando veredito humano nem impedido.');
583
+ L.push(t.nenhuma);
588
584
  }
589
585
  return L.join('\n');
590
586
  }