@orkastery/cli 0.5.3 → 0.6.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (502) hide show
  1. package/adapters/README.md +18 -0
  2. package/adapters/claude-code/.claude-plugin/plugin.json +1 -0
  3. package/adapters/claude-code/README.md +195 -5
  4. package/adapters/claude-code/agents/ork-check.md +1 -0
  5. package/adapters/claude-code/agents/ork-go.md +1 -0
  6. package/adapters/claude-code/agents/ork-goal.md +1 -0
  7. package/adapters/claude-code/agents/ork-master.md +1 -0
  8. package/adapters/claude-code/agents/ork-plan.md +1 -0
  9. package/adapters/claude-code/agents/ork-ship.md +1 -0
  10. package/adapters/claude-code/hooks/hooks.json +2 -1
  11. package/adapters/claude-code/hooks/ork-guard.js +15 -1
  12. package/adapters/claude-code/hooks/ork-resposta.js +91 -0
  13. package/adapters/claude-code/hooks/ork-sensor.js +18 -2
  14. package/adapters/claude-code/hooks/quota-signal.js +14 -0
  15. package/adapters/claude-code/mods/autoridade.json +56 -0
  16. package/adapters/claude-code/mods/ork-clima/.claude-plugin/plugin.json +14 -0
  17. package/adapters/claude-code/mods/ork-clima/hooks/contas.ts +283 -0
  18. package/adapters/claude-code/mods/ork-clima/hooks/hooks.json +3 -0
  19. package/adapters/claude-code/mods/ork-clima/hooks/previsao.ts +393 -0
  20. package/adapters/claude-code/mods/ork-clima/hooks/register.ts +205 -0
  21. package/adapters/claude-code/mods/ork-clima/orkastery-mod.json +5 -0
  22. package/adapters/claude-code/mods/ork-clima/types/index.d.ts +80 -0
  23. package/adapters/claude-code/mods/ork-freio/.claude-plugin/plugin.json +14 -0
  24. package/adapters/claude-code/mods/ork-freio/hooks/carga.ts +160 -0
  25. package/adapters/claude-code/mods/ork-freio/hooks/conferencia.ts +309 -0
  26. package/adapters/claude-code/mods/ork-freio/hooks/hooks.json +3 -0
  27. package/adapters/claude-code/mods/ork-freio/hooks/lote.ts +270 -0
  28. package/adapters/claude-code/mods/ork-freio/hooks/register.ts +285 -0
  29. package/adapters/claude-code/mods/ork-freio/orkastery-mod.json +5 -0
  30. package/adapters/claude-code/mods/ork-freio/types/index.d.ts +127 -0
  31. package/adapters/claude-code/mods/ork-mensageiro/.claude-plugin/plugin.json +14 -0
  32. package/adapters/claude-code/mods/ork-mensageiro/hooks/caixa.ts +215 -0
  33. package/adapters/claude-code/mods/ork-mensageiro/hooks/hooks.json +3 -0
  34. package/adapters/claude-code/mods/ork-mensageiro/hooks/painel.tsx +165 -0
  35. package/adapters/claude-code/mods/ork-mensageiro/hooks/recepcao.ts +256 -0
  36. package/adapters/claude-code/mods/ork-mensageiro/hooks/register.tsx +481 -0
  37. package/adapters/claude-code/mods/ork-mensageiro/orkastery-mod.json +5 -0
  38. package/adapters/claude-code/mods/ork-mensageiro/types/index.d.ts +85 -0
  39. package/adapters/claude-code/mods/ork-mesa/.claude-plugin/plugin.json +14 -0
  40. package/adapters/claude-code/mods/ork-mesa/hooks/cartoes.tsx +246 -0
  41. package/adapters/claude-code/mods/ork-mesa/hooks/decidir.ts +110 -0
  42. package/adapters/claude-code/mods/ork-mesa/hooks/fila.ts +253 -0
  43. package/adapters/claude-code/mods/ork-mesa/hooks/hooks.json +3 -0
  44. package/adapters/claude-code/mods/ork-mesa/hooks/obvia.ts +98 -0
  45. package/adapters/claude-code/mods/ork-mesa/hooks/register.tsx +493 -0
  46. package/adapters/claude-code/mods/ork-mesa/orkastery-mod.json +5 -0
  47. package/adapters/claude-code/mods/ork-mesa/types/index.d.ts +131 -0
  48. package/adapters/claude-code/mods/ork-pista/.claude-plugin/plugin.json +14 -0
  49. package/adapters/claude-code/mods/ork-pista/hooks/acoes.ts +71 -0
  50. package/adapters/claude-code/mods/ork-pista/hooks/ci.ts +121 -0
  51. package/adapters/claude-code/mods/ork-pista/hooks/hooks.json +3 -0
  52. package/adapters/claude-code/mods/ork-pista/hooks/pista.tsx +356 -0
  53. package/adapters/claude-code/mods/ork-pista/hooks/register.tsx +439 -0
  54. package/adapters/claude-code/mods/ork-pista/orkastery-mod.json +5 -0
  55. package/adapters/claude-code/mods/ork-pista/types/index.d.ts +85 -0
  56. package/adapters/claude-code/mods/ork-ponte/.claude-plugin/plugin.json +13 -0
  57. package/adapters/claude-code/mods/ork-ponte/hooks/faixa.tsx +57 -0
  58. package/adapters/claude-code/mods/ork-ponte/hooks/guarda.ts +410 -0
  59. package/adapters/claude-code/mods/ork-ponte/hooks/hooks.json +3 -0
  60. package/adapters/claude-code/mods/ork-ponte/hooks/mostrado.ts +55 -0
  61. package/adapters/claude-code/mods/ork-ponte/hooks/nucleo.ts +157 -0
  62. package/adapters/claude-code/mods/ork-ponte/hooks/papel.ts +42 -0
  63. package/adapters/claude-code/mods/ork-ponte/hooks/register.ts +331 -0
  64. package/adapters/claude-code/mods/ork-ponte/hooks/vigia.ts +76 -0
  65. package/adapters/claude-code/mods/ork-ponte/orkastery-mod.json +5 -0
  66. package/adapters/claude-code/mods/ork-ponte/types/index.d.ts +178 -0
  67. package/adapters/claude-code/mods/ork-portao/.claude-plugin/plugin.json +14 -0
  68. package/adapters/claude-code/mods/ork-portao/hooks/hooks.json +3 -0
  69. package/adapters/claude-code/mods/ork-portao/hooks/lease.ts +201 -0
  70. package/adapters/claude-code/mods/ork-portao/hooks/plano.ts +304 -0
  71. package/adapters/claude-code/mods/ork-portao/hooks/register.ts +339 -0
  72. package/adapters/claude-code/mods/ork-portao/hooks/verify.ts +152 -0
  73. package/adapters/claude-code/mods/ork-portao/orkastery-mod.json +5 -0
  74. package/adapters/claude-code/mods/ork-portao/types/index.d.ts +60 -0
  75. package/adapters/claude-code/mods/ork-radar/.claude-plugin/plugin.json +14 -0
  76. package/adapters/claude-code/mods/ork-radar/hooks/colisao.ts +420 -0
  77. package/adapters/claude-code/mods/ork-radar/hooks/hooks.json +3 -0
  78. package/adapters/claude-code/mods/ork-radar/hooks/mapa.tsx +322 -0
  79. package/adapters/claude-code/mods/ork-radar/hooks/register.tsx +470 -0
  80. package/adapters/claude-code/mods/ork-radar/orkastery-mod.json +5 -0
  81. package/adapters/claude-code/mods/ork-radar/types/index.d.ts +72 -0
  82. package/adapters/claude-code/mods/ork-ritual/.claude-plugin/plugin.json +14 -0
  83. package/adapters/claude-code/mods/ork-ritual/hooks/hooks.json +3 -0
  84. package/adapters/claude-code/mods/ork-ritual/hooks/nota.ts +88 -0
  85. package/adapters/claude-code/mods/ork-ritual/hooks/register.tsx +494 -0
  86. package/adapters/claude-code/mods/ork-ritual/hooks/replay.tsx +271 -0
  87. package/adapters/claude-code/mods/ork-ritual/hooks/ritual.ts +218 -0
  88. package/adapters/claude-code/mods/ork-ritual/orkastery-mod.json +5 -0
  89. package/adapters/claude-code/mods/ork-ritual/types/index.d.ts +106 -0
  90. package/adapters/claude-code/mods/ork-sentinela/.claude-plugin/plugin.json +14 -0
  91. package/adapters/claude-code/mods/ork-sentinela/hooks/alertas.ts +85 -0
  92. package/adapters/claude-code/mods/ork-sentinela/hooks/despacho.ts +156 -0
  93. package/adapters/claude-code/mods/ork-sentinela/hooks/hooks.json +3 -0
  94. package/adapters/claude-code/mods/ork-sentinela/hooks/register.ts +511 -0
  95. package/adapters/claude-code/mods/ork-sentinela/hooks/vigia.ts +186 -0
  96. package/adapters/claude-code/mods/ork-sentinela/orkastery-mod.json +5 -0
  97. package/adapters/claude-code/mods/ork-sentinela/types/index.d.ts +65 -0
  98. package/adapters/claude-code/mods/ork-torre/.claude-plugin/plugin.json +14 -0
  99. package/adapters/claude-code/mods/ork-torre/hooks/agenda.ts +60 -0
  100. package/adapters/claude-code/mods/ork-torre/hooks/detalhe.tsx +236 -0
  101. package/adapters/claude-code/mods/ork-torre/hooks/frases.ts +42 -0
  102. package/adapters/claude-code/mods/ork-torre/hooks/hooks.json +3 -0
  103. package/adapters/claude-code/mods/ork-torre/hooks/painel.tsx +344 -0
  104. package/adapters/claude-code/mods/ork-torre/hooks/rede.ts +97 -0
  105. package/adapters/claude-code/mods/ork-torre/hooks/register.tsx +437 -0
  106. package/adapters/claude-code/mods/ork-torre/orkastery-mod.json +5 -0
  107. package/adapters/claude-code/mods/ork-torre/types/index.d.ts +108 -0
  108. package/adapters/codex/skills/ork/SKILL.md +2 -0
  109. package/adapters/hermes/README.md +64 -1
  110. package/adapters/hermes/bin/ork-conhecimento-colecoes.sh +14 -0
  111. package/adapters/hermes/bin/ork-conhecimento-listar.sh +15 -0
  112. package/adapters/hermes/bin/ork-conhecimento-mostrar.sh +16 -0
  113. package/adapters/hermes/bin/ork-conhecimento-verificar.sh +15 -0
  114. package/adapters/hermes/bin/ork-vigia-batida.py +127 -0
  115. package/adapters/hermes/hermes.plugin.json +4 -0
  116. package/adapters/hermes/hitl-ingress/__init__.py +101 -8
  117. package/adapters/hermes/skills/orkastery-devmaster/SKILL.md +3 -3
  118. package/adapters/openclaw/README.md +83 -10
  119. package/adapters/openclaw/bin/ork-vigia-batida.js +86 -0
  120. package/adapters/openclaw/dist/hitl-ingress.js +106 -9
  121. package/adapters/openclaw/dist/index.js +86 -0
  122. package/adapters/openclaw/openclaw.plugin.json +34 -4
  123. package/adapters/openclaw/package.json +2 -2
  124. package/adapters/openclaw/src/hitl-ingress.ts +103 -9
  125. package/adapters/openclaw/src/index.ts +94 -0
  126. package/assets/adapters-en/claude-code/README.md +403 -0
  127. package/assets/adapters-en/claude-code/agents/ork-check.md +33 -0
  128. package/assets/adapters-en/claude-code/agents/ork-go.md +33 -0
  129. package/assets/adapters-en/claude-code/agents/ork-goal.md +34 -0
  130. package/assets/adapters-en/claude-code/agents/ork-master.md +35 -0
  131. package/assets/adapters-en/claude-code/agents/ork-plan.md +33 -0
  132. package/assets/adapters-en/claude-code/agents/ork-ship.md +33 -0
  133. package/assets/adapters-en/claude-code/commands/check.md +46 -0
  134. package/assets/adapters-en/claude-code/commands/go.md +46 -0
  135. package/assets/adapters-en/claude-code/commands/goal.md +55 -0
  136. package/assets/adapters-en/claude-code/commands/master.md +54 -0
  137. package/assets/adapters-en/claude-code/commands/onboarding.md +22 -0
  138. package/assets/adapters-en/claude-code/commands/ork.md +126 -0
  139. package/assets/adapters-en/claude-code/commands/plan.md +47 -0
  140. package/assets/adapters-en/claude-code/commands/ship.md +45 -0
  141. package/assets/adapters-en/codex/skills/ork/SKILL.md +85 -0
  142. package/assets/adapters-en/hermes/README.md +273 -0
  143. package/assets/adapters-en/hermes/skills/orkastery-devmaster/SKILL.md +169 -0
  144. package/assets/docs-en/markdownlint-cli2.jsonc +22 -0
  145. package/assets/docs-en/padroes/documentacao-de-produto.md +135 -0
  146. package/assets/docs-en/padroes/roadmap-de-produto.md +100 -0
  147. package/assets/docs-en/produto/README.md +14 -0
  148. package/assets/docs-en/produto/_modelo-feature.md +62 -0
  149. package/assets/docs-en/roadmap/README.md +14 -0
  150. package/assets/docs-en/roadmap/_modelo-item.md +75 -0
  151. package/assets/references-en/README.md +25 -0
  152. package/assets/references-en/code-review-axes.md +82 -0
  153. package/assets/references-en/definition-of-done.md +74 -0
  154. package/assets/references-en/performance-checklist.md +53 -0
  155. package/assets/references-en/security-checklist.md +101 -0
  156. package/assets/references-en/testing-patterns.md +51 -0
  157. package/assets/security-scan/defaults/.golangci.yml +2 -0
  158. package/assets/security-scan/defaults/eslint.config.mjs +11 -0
  159. package/assets/security-scan/defaults/gitleaks.toml +3 -0
  160. package/assets/security-scan/defaults/ruff.toml +1 -0
  161. package/assets/security-scan/tools-agil.json +87 -0
  162. package/assets/security-scan/tools.json +625 -0
  163. package/assets/skills-en/core/onboarding/SKILL.md +58 -0
  164. package/assets/skills-en/core/orkastery-bootstrap/SKILL.md +119 -0
  165. package/assets/skills-en/core/thread-state/SKILL.md +88 -0
  166. package/assets/skills-en/governance/decision-triage/SKILL.md +65 -0
  167. package/assets/skills-en/governance/narrative-guardian/SKILL.md +66 -0
  168. package/assets/skills-en/governance/roadmap-keeper/SKILL.md +60 -0
  169. package/assets/skills-en/governance/scope-check-capability-map/SKILL.md +71 -0
  170. package/assets/skills-en/observability/thread-tracing/SKILL.md +63 -0
  171. package/assets/skills-en/phases/check-quality/SKILL.md +103 -0
  172. package/assets/skills-en/phases/go-implementation/SKILL.md +78 -0
  173. package/assets/skills-en/phases/goal-definition/SKILL.md +69 -0
  174. package/assets/skills-en/phases/master-metrics/SKILL.md +72 -0
  175. package/assets/skills-en/phases/plan-specification/SKILL.md +67 -0
  176. package/assets/skills-en/phases/security-remediation/SKILL.md +70 -0
  177. package/assets/skills-en/phases/ship-release/SKILL.md +71 -0
  178. package/assets/skills-en/reviewers/code-reviewer/SKILL.md +61 -0
  179. package/assets/skills-en/reviewers/security-auditor/SKILL.md +93 -0
  180. package/assets/skills-en/reviewers/test-engineer/SKILL.md +66 -0
  181. package/assets/skills-en/reviewers/web-performance-auditor/SKILL.md +63 -0
  182. package/dist/adapters/claude-bg.js +193 -15
  183. package/dist/adapters/codex-controller-worker.js +12 -5
  184. package/dist/adapters/codex-events.js +16 -4
  185. package/dist/adapters/codex.js +13 -2
  186. package/dist/agents-md.js +24 -15
  187. package/dist/atualizar-branch.js +245 -0
  188. package/dist/auditoria.js +13 -11
  189. package/dist/auditrun.js +68 -48
  190. package/dist/autorizacao-duravel.js +327 -0
  191. package/dist/board.js +98 -43
  192. package/dist/branch-de-estado.js +39 -9
  193. package/dist/busca-semantica.js +7 -5
  194. package/dist/catalogo.js +35 -1
  195. package/dist/changelog-reconciliacao.js +290 -0
  196. package/dist/check-agil.js +500 -0
  197. package/dist/check-modo.js +41 -0
  198. package/dist/check-paralelo.js +183 -0
  199. package/dist/ci.js +255 -46
  200. package/dist/ciclos.js +8 -6
  201. package/dist/claim-lint.js +12 -8
  202. package/dist/claims-conferir.js +350 -0
  203. package/dist/claims.js +13 -10
  204. package/dist/company-brain-client.js +45 -3
  205. package/dist/company-brain-journal.js +2 -1
  206. package/dist/company-brain-migration.js +47 -6
  207. package/dist/conducao-batida.js +759 -0
  208. package/dist/conducao-sentinela.js +405 -0
  209. package/dist/conducao-texto.js +12 -18
  210. package/dist/conducao.js +206 -59
  211. package/dist/conhecimento-consulta.js +270 -0
  212. package/dist/conhecimento.js +514 -0
  213. package/dist/conta-esgotada.js +127 -0
  214. package/dist/dado-privado.js +816 -0
  215. package/dist/decisao-autonoma.js +5 -4
  216. package/dist/demo.js +14 -12
  217. package/dist/dependencias-da-worktree.js +25 -0
  218. package/dist/divida.js +38 -36
  219. package/dist/docs.js +103 -82
  220. package/dist/doctor-forja.js +345 -0
  221. package/dist/doctor-pulse-cron.js +294 -27
  222. package/dist/doctor-rede.js +18 -17
  223. package/dist/doctor.js +278 -116
  224. package/dist/dsn-da-memoria.js +417 -0
  225. package/dist/entrega-por-mod.js +503 -0
  226. package/dist/entrega-pr.js +158 -57
  227. package/dist/escopo-escrita.js +10 -1
  228. package/dist/esgotamentos.js +13 -11
  229. package/dist/estado-thread.js +42 -17
  230. package/dist/evalrunner.js +35 -32
  231. package/dist/experiencia-instalacao.js +45 -25
  232. package/dist/fabrica-batida.js +323 -0
  233. package/dist/fabrica-estado.js +49 -16
  234. package/dist/fabrica-publicar.js +3 -1
  235. package/dist/fila-pesada.js +444 -0
  236. package/dist/fix.js +24 -21
  237. package/dist/forja/adaptador.js +6 -0
  238. package/dist/forja/ambiente-de-ci.js +27 -0
  239. package/dist/forja/api.js +256 -0
  240. package/dist/forja/cache.js +89 -0
  241. package/dist/forja/cli.js +60 -0
  242. package/dist/forja/contrato.js +9 -0
  243. package/dist/forja/endereco.js +43 -0
  244. package/dist/forja/estado.js +22 -0
  245. package/dist/forja/executor.js +73 -0
  246. package/dist/forja/github/ci.js +95 -0
  247. package/dist/forja/github/dono-da-rede.js +18 -0
  248. package/dist/forja/github/metadados.js +15 -0
  249. package/dist/forja/github/pedidos.js +200 -0
  250. package/dist/forja/gitlab/ci.js +141 -0
  251. package/dist/forja/gitlab/consultas.js +59 -0
  252. package/dist/forja/gitlab/dono-da-rede.js +43 -0
  253. package/dist/forja/gitlab/metadados.js +15 -0
  254. package/dist/forja/gitlab/pedidos-abertos.js +158 -0
  255. package/dist/forja/gitlab/pedidos.js +141 -0
  256. package/dist/forja/produtor.js +32 -0
  257. package/dist/forja/registro.js +31 -0
  258. package/dist/forja/resolver.js +121 -0
  259. package/dist/forja/texto.js +13 -0
  260. package/dist/forja/versao.js +71 -0
  261. package/dist/forja.js +124 -81
  262. package/dist/gates.js +3 -28
  263. package/dist/handoff.js +33 -19
  264. package/dist/hitl-contract.js +46 -43
  265. package/dist/hitl-curto.js +37 -25
  266. package/dist/hitl-gates.js +13 -11
  267. package/dist/hitl-local-receipt.js +53 -0
  268. package/dist/hitl-local.js +11 -2
  269. package/dist/hitl-lock.js +5 -11
  270. package/dist/hitl-public-receipt.js +11 -0
  271. package/dist/hitl-resumo.js +72 -3
  272. package/dist/hitl-sessions.js +62 -9
  273. package/dist/hitl-tempo-parado.js +4 -4
  274. package/dist/hitl-texto-livre.js +7 -4
  275. package/dist/hitl.js +63 -64
  276. package/dist/horario.js +30 -7
  277. package/dist/hosts.js +155 -134
  278. package/dist/impedimento.js +108 -14
  279. package/dist/index.js +1421 -1019
  280. package/dist/indice-vetorial.js +14 -12
  281. package/dist/indice.js +7 -1
  282. package/dist/init.js +54 -49
  283. package/dist/instabilidade.js +144 -0
  284. package/dist/integracoes-locais.js +4 -0
  285. package/dist/intelligence-graph-cli.js +213 -88
  286. package/dist/intelligence-graph-contexto.js +56 -17
  287. package/dist/intelligence-graph-contract.js +2 -1
  288. package/dist/intelligence-graph-extract-md.js +56 -4
  289. package/dist/intelligence-graph-extract-ts.js +71 -3
  290. package/dist/intelligence-graph-query.js +96 -34
  291. package/dist/leases.js +19 -18
  292. package/dist/ledger-stats.js +17 -16
  293. package/dist/ledger.js +46 -2
  294. package/dist/licoes.js +12 -11
  295. package/dist/liveness.js +6 -3
  296. package/dist/locale-accounts.js +220 -0
  297. package/dist/locale-adapter.js +291 -0
  298. package/dist/locale-ajuda.js +833 -0
  299. package/dist/locale-audit.js +199 -0
  300. package/dist/locale-claims.js +213 -0
  301. package/dist/locale-conducao.js +138 -0
  302. package/dist/locale-conhecimento.js +181 -0
  303. package/dist/locale-decisao.js +205 -0
  304. package/dist/locale-docs.js +230 -0
  305. package/dist/locale-estado.js +101 -0
  306. package/dist/locale-forja.js +290 -0
  307. package/dist/locale-gerados.js +165 -0
  308. package/dist/locale-grafo.js +129 -0
  309. package/dist/locale-master.js +182 -0
  310. package/dist/locale-network.js +524 -0
  311. package/dist/locale-onboarding.js +92 -0
  312. package/dist/locale-operacao-restante.js +931 -0
  313. package/dist/locale-phase.js +151 -0
  314. package/dist/locale-projetos.js +100 -0
  315. package/dist/locale-prompts.js +194 -0
  316. package/dist/locale-pulse.js +349 -0
  317. package/dist/locale-reservas.js +87 -0
  318. package/dist/locale-retry.js +524 -0
  319. package/dist/locale-roadmap.js +102 -0
  320. package/dist/locale-security-scan.js +69 -0
  321. package/dist/locale-setup.js +192 -0
  322. package/dist/locale-ship.js +597 -0
  323. package/dist/locale-thread.js +421 -0
  324. package/dist/locale-verify.js +201 -0
  325. package/dist/locale-worktree.js +246 -0
  326. package/dist/locale.js +1258 -0
  327. package/dist/maestro-runtime.js +22 -3
  328. package/dist/manifest.js +415 -13
  329. package/dist/maquina-ociosa.js +211 -0
  330. package/dist/maquina.js +31 -7
  331. package/dist/master-digest.js +6 -1
  332. package/dist/master-nota-local.js +200 -0
  333. package/dist/master-nota.js +14 -8
  334. package/dist/master.js +139 -65
  335. package/dist/mcp-artifacts.js +11 -2
  336. package/dist/mcp-conhecimento.js +52 -0
  337. package/dist/mcp-experiencia.js +26 -5
  338. package/dist/mcp-git.js +23 -6
  339. package/dist/mcp-grafo.js +7 -4
  340. package/dist/mcp-install.js +73 -8
  341. package/dist/mcp-noctum.js +101 -0
  342. package/dist/mcp-server.js +90 -16
  343. package/dist/mcp-ship-transporte.js +977 -0
  344. package/dist/mcp-ship.js +71 -25
  345. package/dist/mcp-transportes.js +17 -0
  346. package/dist/mcp-verify.js +6 -1
  347. package/dist/memoria.js +63 -58
  348. package/dist/modos-migracao.js +8 -6
  349. package/dist/modos.js +20 -24
  350. package/dist/network-roadmap.js +90 -51
  351. package/dist/noctum-aceite.js +789 -0
  352. package/dist/noctum-arco.js +1418 -0
  353. package/dist/noctum-capacidade.js +141 -0
  354. package/dist/noctum-changelog.js +399 -0
  355. package/dist/noctum-cli.js +482 -0
  356. package/dist/noctum-coordenacao.js +1225 -0
  357. package/dist/noctum-entrega.js +1169 -0
  358. package/dist/noctum-envelope.js +1046 -0
  359. package/dist/noctum-execucao.js +376 -0
  360. package/dist/noctum-fechamento.js +405 -0
  361. package/dist/noctum-fila.js +314 -0
  362. package/dist/noctum-guarda.js +256 -0
  363. package/dist/noctum-integracao.js +507 -0
  364. package/dist/noctum-maquinas.js +383 -0
  365. package/dist/noctum-medicao.js +450 -0
  366. package/dist/noctum-modo.js +362 -0
  367. package/dist/noctum-pergunta-canal.js +96 -0
  368. package/dist/noctum-pergunta.js +115 -0
  369. package/dist/noctum-provas.js +838 -0
  370. package/dist/noctum-reconciliacao.js +591 -0
  371. package/dist/noctum-registro.js +215 -0
  372. package/dist/noctum-relatorio.js +827 -0
  373. package/dist/noctum-resposta.js +207 -0
  374. package/dist/noctum-sessoes-em-voo.js +93 -0
  375. package/dist/noctum-supervisao.js +649 -0
  376. package/dist/noctum-terminal.js +459 -0
  377. package/dist/noctum-transporte.js +655 -0
  378. package/dist/noctum-vigia.js +639 -0
  379. package/dist/ocupacao.js +32 -3
  380. package/dist/onboarding.js +56 -26
  381. package/dist/orkmind.js +48 -25
  382. package/dist/orquestracao.js +44 -47
  383. package/dist/parado-no-condutor.js +174 -127
  384. package/dist/phase.js +144 -63
  385. package/dist/policies.js +37 -4
  386. package/dist/portfolio.js +4 -2
  387. package/dist/postura-local.js +235 -0
  388. package/dist/preflight.js +11 -10
  389. package/dist/procedencia.js +220 -0
  390. package/dist/projeto-alvo.js +186 -24
  391. package/dist/prompts.js +140 -42
  392. package/dist/prova-minima.js +5 -6
  393. package/dist/pulse-cadencia.js +5 -4
  394. package/dist/pulse-consentimento.js +53 -1
  395. package/dist/pulse-delivery.js +151 -24
  396. package/dist/pulse-resposta.js +368 -4
  397. package/dist/pulse.js +188 -22
  398. package/dist/ratelimit.js +16 -6
  399. package/dist/recall.js +14 -13
  400. package/dist/redacao-saida.js +63 -0
  401. package/dist/rede-adesao.js +13 -8
  402. package/dist/rede-forja.js +108 -24
  403. package/dist/rede-status.js +66 -47
  404. package/dist/rede.js +86 -46
  405. package/dist/retomada-checkpoint.js +101 -0
  406. package/dist/retry.js +451 -212
  407. package/dist/roadmap-reservas.js +45 -28
  408. package/dist/roadmap-status.js +129 -33
  409. package/dist/runtime-ambiente.js +5 -0
  410. package/dist/runtime-context.js +284 -32
  411. package/dist/runtime-escada.js +423 -0
  412. package/dist/runtime-profiles.js +103 -46
  413. package/dist/runtimes.js +2 -1
  414. package/dist/saida-segura.js +3 -2
  415. package/dist/security-scan/agil.js +355 -0
  416. package/dist/security-scan/cli.js +76 -0
  417. package/dist/security-scan/compare.js +149 -0
  418. package/dist/security-scan/config.js +93 -0
  419. package/dist/security-scan/detect.js +97 -0
  420. package/dist/security-scan/executor.js +188 -0
  421. package/dist/security-scan/guard.js +180 -0
  422. package/dist/security-scan/imagem-de-lint.js +96 -0
  423. package/dist/security-scan/normalize/actionlint.js +12 -0
  424. package/dist/security-scan/normalize/eslint.js +12 -0
  425. package/dist/security-scan/normalize/gitleaks.js +13 -0
  426. package/dist/security-scan/normalize/golangci-lint.js +13 -0
  427. package/dist/security-scan/normalize/govulncheck.js +36 -0
  428. package/dist/security-scan/normalize/index.js +25 -0
  429. package/dist/security-scan/normalize/npm-audit.js +30 -0
  430. package/dist/security-scan/normalize/osv-scanner.js +32 -0
  431. package/dist/security-scan/normalize/oxlint.js +51 -0
  432. package/dist/security-scan/normalize/pip-audit.js +16 -0
  433. package/dist/security-scan/normalize/ruff.js +12 -0
  434. package/dist/security-scan/normalize/semgrep.js +20 -0
  435. package/dist/security-scan/normalize/trivy.js +33 -0
  436. package/dist/security-scan/normalize/util.js +204 -0
  437. package/dist/security-scan/normalize/zizmor.js +19 -0
  438. package/dist/security-scan/report.js +156 -0
  439. package/dist/security-scan/run.js +448 -0
  440. package/dist/security-scan/tools.js +62 -0
  441. package/dist/security-scan/trabalhador.js +74 -0
  442. package/dist/security-scan/types.js +15 -0
  443. package/dist/session-events.js +26 -5
  444. package/dist/session-watcher-claude.js +81 -20
  445. package/dist/session-watcher.js +340 -42
  446. package/dist/sessoes-contas.js +10 -1
  447. package/dist/sessoes-inventario.js +1 -1
  448. package/dist/sessoes.js +25 -23
  449. package/dist/setup.js +59 -58
  450. package/dist/ship-publicar.js +971 -0
  451. package/dist/ship.js +243 -97
  452. package/dist/steal.js +77 -0
  453. package/dist/superficie.js +14 -11
  454. package/dist/thread-close.js +12 -11
  455. package/dist/thread.js +274 -100
  456. package/dist/tokens.js +15 -11
  457. package/dist/trabalho-thread.js +297 -0
  458. package/dist/transporte-do-canal.js +189 -0
  459. package/dist/types.js +12 -1
  460. package/dist/util.js +13 -3
  461. package/dist/varredura-acoes.js +507 -0
  462. package/dist/verify.js +608 -76
  463. package/dist/vida-da-thread.js +254 -0
  464. package/dist/worktree-local.js +167 -0
  465. package/dist/worktree.js +99 -83
  466. package/dist/yaml.js +27 -8
  467. package/eval/casos/check-quality.json +77 -0
  468. package/eval/casos/security-auditor.json +148 -0
  469. package/eval/casos/security-remediation.json +161 -0
  470. package/eval/fixtures/security-scan/README.md +8 -0
  471. package/eval/fixtures/security-scan/go/.github/workflows/ci.yml +12 -0
  472. package/eval/fixtures/security-scan/go/Dockerfile +4 -0
  473. package/eval/fixtures/security-scan/go/README.md +4 -0
  474. package/eval/fixtures/security-scan/go/config.go +4 -0
  475. package/eval/fixtures/security-scan/go/go.mod +5 -0
  476. package/eval/fixtures/security-scan/go/go.sum +2 -0
  477. package/eval/fixtures/security-scan/go/main.go +31 -0
  478. package/eval/fixtures/security-scan/js/.github/workflows/ci.yml +12 -0
  479. package/eval/fixtures/security-scan/js/Dockerfile +3 -0
  480. package/eval/fixtures/security-scan/js/README.md +4 -0
  481. package/eval/fixtures/security-scan/js/package-lock.json +844 -0
  482. package/eval/fixtures/security-scan/js/package.json +10 -0
  483. package/eval/fixtures/security-scan/js/src/config.js +4 -0
  484. package/eval/fixtures/security-scan/js/src/server.js +17 -0
  485. package/eval/fixtures/security-scan/js/src/util.ts +4 -0
  486. package/eval/fixtures/security-scan/js/tsconfig.json +4 -0
  487. package/eval/fixtures/security-scan/python/.github/workflows/ci.yml +12 -0
  488. package/eval/fixtures/security-scan/python/Dockerfile +3 -0
  489. package/eval/fixtures/security-scan/python/README.md +4 -0
  490. package/eval/fixtures/security-scan/python/app/__init__.py +0 -0
  491. package/eval/fixtures/security-scan/python/app/config.py +2 -0
  492. package/eval/fixtures/security-scan/python/app/main.py +19 -0
  493. package/eval/fixtures/security-scan/python/requirements.txt +1 -0
  494. package/package.json +9 -4
  495. package/references/security-checklist.md +3 -3
  496. package/schemas/code-artifact-graph.v1.schema.json +2 -1
  497. package/skills/README.md +1 -0
  498. package/skills/core/orkastery-bootstrap/SKILL.md +2 -2
  499. package/skills/phases/check-quality/SKILL.md +16 -0
  500. package/skills/phases/go-implementation/SKILL.md +6 -0
  501. package/skills/phases/security-remediation/SKILL.md +70 -0
  502. package/skills/reviewers/security-auditor/SKILL.md +25 -0
@@ -33,7 +33,7 @@ var __importStar = (this && this.__importStar) || (function () {
33
33
  };
34
34
  })();
35
35
  Object.defineProperty(exports, "__esModule", { value: true });
36
- exports.ORIGENS_DO_PROJETO = exports.FORA_DA_CONSULTA = exports.OFERTA_DA_REDE = exports.ErroDeProjeto = exports.PADRAO_DO_NOME_DE_PROJETO = exports.SAIDA_DE_PROJETO = exports.ENV_PROJETO_EXPLICITO = exports.ENV_PROJETO = exports.CONTRATO_CONSULTA = exports.CONTRATO_PROJETOS = void 0;
36
+ exports.ORIGENS_DO_PROJETO = exports.FORA_DA_CONSULTA = exports.OFERTA_DA_REDE = exports.ErroDeProjeto = exports.PADRAO_DO_NOME_DE_PROJETO = exports.AMBIENTE_SEM_PROJETO_HERDADO = exports.SAIDA_DE_PROJETO = exports.ENV_PROJETO_EXPLICITO = exports.ENV_PROJETO = exports.CONTRATO_CONSULTA = exports.CONTRATO_PROJETOS = void 0;
37
37
  exports.caminhoDoRegistro = caminhoDoRegistro;
38
38
  exports.lerRegistroDeProjetos = lerRegistroDeProjetos;
39
39
  exports.listarProjetos = listarProjetos;
@@ -41,6 +41,7 @@ exports.raizCanonica = raizCanonica;
41
41
  exports.remotoSemCredencial = remotoSemCredencial;
42
42
  exports.remotoDoProjeto = remotoDoProjeto;
43
43
  exports.registrarProjeto = registrarProjeto;
44
+ exports.diretorioEfemero = diretorioEfemero;
44
45
  exports.registrarProjetoEmSilencio = registrarProjetoEmSilencio;
45
46
  exports.esquecerProjeto = esquecerProjeto;
46
47
  exports.candidatosDoHost = candidatosDoHost;
@@ -51,7 +52,12 @@ exports.raizParaExibir = raizParaExibir;
51
52
  exports.outrosProjetosConhecidos = outrosProjetosConhecidos;
52
53
  exports.semRemoto = semRemoto;
53
54
  exports.consultaDoProjeto = consultaDoProjeto;
55
+ exports.linhaDoProjeto = linhaDoProjeto;
54
56
  exports.linhasDaConsulta = linhasDaConsulta;
57
+ exports.iniciarDeclaracaoDoProjeto = iniciarDeclaracaoDoProjeto;
58
+ exports.pedirDeclaracaoDoProjeto = pedirDeclaracaoDoProjeto;
59
+ exports.remotoParaExibir = remotoParaExibir;
60
+ exports.declaracaoQueFaltou = declaracaoQueFaltou;
55
61
  /**
56
62
  * RM-052: o projeto-alvo explicito.
57
63
  *
@@ -82,6 +88,7 @@ const maquina_1 = require("./maquina");
82
88
  const policies_1 = require("./policies");
83
89
  const redacao_url_1 = require("./redacao-url");
84
90
  const util_1 = require("./util");
91
+ const locale_1 = require("./locale");
85
92
  exports.CONTRATO_PROJETOS = 'ork.projetos/v1';
86
93
  exports.CONTRATO_CONSULTA = 'ork.consulta/v1';
87
94
  /** O projeto pedido pelo ambiente, abaixo de `--projeto` e acima do cwd. */
@@ -90,6 +97,18 @@ exports.ENV_PROJETO = 'ORK_PROJETO';
90
97
  exports.ENV_PROJETO_EXPLICITO = 'ORK_PROJETO_EXPLICITO';
91
98
  /** Codigo de saida da recusa de projeto-alvo no CLI (D3). */
92
99
  exports.SAIDA_DE_PROJETO = 4;
100
+ /**
101
+ * RM-052 (fatia 2, D2): o ambiente de quem o nucleo inicia ja dentro do projeto resolvido, a sessao
102
+ * despachada na worktree da thread e o filho `fabrica publicar`. O modo host e o `ORK_PROJETO` sao do
103
+ * gateway que pediu: herdados, recusavam todo `ork` da sessao com `projeto.escolha`, ou liam outro
104
+ * projeto. Valores neutros, e nao a ausencia das variaveis: o `claude --bg` entrega a sessao a um daemon
105
+ * que guarda o ambiente de quem o iniciou, e so o `env` do `--settings` vence o herdado. Com eles, o
106
+ * projeto da sessao e o do proprio cwd.
107
+ */
108
+ exports.AMBIENTE_SEM_PROJETO_HERDADO = Object.freeze({
109
+ [exports.ENV_PROJETO]: '',
110
+ [exports.ENV_PROJETO_EXPLICITO]: '0',
111
+ });
93
112
  const ARQUIVO = 'projetos.json';
94
113
  const TRAVA = 'projetos.json.lock';
95
114
  /** Nome ou abbrev de projeto: o mesmo alfabeto dos identificadores de thread, sem barra. */
@@ -112,16 +131,18 @@ class ErroDeProjeto extends Error {
112
131
  return { erro: this.codigo, detalhe: this.detalhe, candidatos: this.candidatos, correcao: this.correcao };
113
132
  }
114
133
  get texto() {
134
+ const m = (0, locale_1.msg)().projetos;
115
135
  return [
116
136
  `${this.codigo}: ${this.detalhe}`,
117
- ...(this.candidatos.length ? ['Candidatos:', ...this.candidatos.map((c) => ` • ${linhaDoCandidato(c)}`)] : []),
137
+ ...(this.candidatos.length ? [m.candidatos, ...this.candidatos.map((c) => ` • ${linhaDoCandidato(c)}`)] : []),
118
138
  this.correcao,
119
139
  ].join('\n');
120
140
  }
121
141
  }
122
142
  exports.ErroDeProjeto = ErroDeProjeto;
123
143
  function linhaDoCandidato(c) {
124
- return `${c.nome} (${c.abbrev || '-'}) · ${c.raiz} · ${c.remoto ?? 'sem remoto'}${c.presente ? '' : ' · ausente do disco'}`;
144
+ const m = (0, locale_1.msg)().projetos;
145
+ return `${c.nome} (${c.abbrev || '-'}) · ${c.raiz} · ${c.remoto ?? m.semRemoto}${c.presente ? '' : ` · ${m.ausente}`}`;
125
146
  }
126
147
  // ---------------------------------------------------------------------------
127
148
  // O registro.
@@ -233,7 +254,7 @@ function comTrava(alterar, esperaMs = 2000) {
233
254
  continue;
234
255
  }
235
256
  if (Date.now() >= limite)
236
- throw new Error(`registro de projetos ocupado (${trava}); tente de novo`);
257
+ throw new Error((0, locale_1.msg)().projetos.ocupado(trava));
237
258
  Atomics.wait(new Int32Array(new SharedArrayBuffer(4)), 0, 0, 10);
238
259
  }
239
260
  }
@@ -260,7 +281,7 @@ function gravarRegistro(registro) {
260
281
  const conteudo = JSON.stringify(registro, null, 2) + '\n';
261
282
  // Varredura final: o arquivo nunca carrega credencial, nem por um remoto mal redigido.
262
283
  if ((0, policies_1.procurarSegredos)(conteudo).length)
263
- throw new Error('registro de projetos recusado: o conteudo parece carregar segredo');
284
+ throw new Error((0, locale_1.msg)().projetos.segredoConteudo);
264
285
  const temp = path.join(dir, `.${ARQUIVO}.${process.pid}.${Date.now()}.tmp`);
265
286
  try {
266
287
  fs.writeFileSync(temp, conteudo, { mode: 0o600, flag: 'wx' });
@@ -293,18 +314,18 @@ function projetoDoCaminho(caminho) {
293
314
  function registrarProjeto(caminho, fonte, opcoes = {}) {
294
315
  const achado = projetoDoCaminho(caminho);
295
316
  if (!achado) {
296
- throw new ErroDeProjeto('projeto.sem-manifesto', `nenhum manifesto do ork em ${raizParaExibir(path.resolve(caminho))}`, [], 'Rode `ork init` na raiz do projeto antes de registrá-lo.');
317
+ throw new ErroDeProjeto('projeto.sem-manifesto', (0, locale_1.msg)().projetos.semManifesto(raizParaExibir(path.resolve(caminho))), [], (0, locale_1.msg)().projetos.rodeInit);
297
318
  }
298
319
  const { raiz: canonica, carregado } = achado;
299
320
  if (carregado.erros.length)
300
- throw new Error(`registro de projetos: manifesto inválido em ${carregado.caminho}`);
321
+ throw new Error((0, locale_1.msg)().projetos.manifestoInvalido(carregado.caminho));
301
322
  const quando = opcoes.quando ?? new Date().toISOString();
302
323
  const novo = {
303
324
  nome: carregado.manifesto.project.name, abbrev: carregado.manifesto.project.abbrev, raiz: canonica,
304
325
  remoto: remotoDoProjeto(canonica, carregado.manifesto.fabrica?.remoto ?? 'origin'), atualizadoEm: quando, fonte,
305
326
  };
306
327
  if ((0, policies_1.procurarSegredos)(JSON.stringify(novo)).length) {
307
- throw new Error('registro de projetos recusado: a entrada parece carregar segredo');
328
+ throw new Error((0, locale_1.msg)().projetos.segredoEntrada);
308
329
  }
309
330
  return comTrava(() => {
310
331
  const registro = lerRegistroDeProjetos();
@@ -317,16 +338,52 @@ function registrarProjeto(caminho, fonte, opcoes = {}) {
317
338
  return entrada;
318
339
  }, opcoes.esperaMs);
319
340
  }
341
+ /** As pastas efemeras desta maquina: a temporaria do sistema e as que o `/tmp` costuma ter. */
342
+ function pastasTemporarias() {
343
+ const raizes = [os.tmpdir(), '/tmp', '/var/tmp', '/dev/shm'];
344
+ const job = (process.env.CLAUDE_JOB_DIR ?? '').trim();
345
+ if (job && path.isAbsolute(job))
346
+ raizes.push(job);
347
+ return [...new Set(raizes.flatMap((r) => { try {
348
+ return [path.resolve(r), fs.realpathSync(r)];
349
+ }
350
+ catch {
351
+ return [path.resolve(r)];
352
+ } }))];
353
+ }
354
+ /**
355
+ * RM-063 (fatia 3, achado b): o caminho esta numa pasta que some sozinha? A temporaria do sistema (`/tmp`, `TMPDIR`,
356
+ * `/var/tmp`, `/dev/shm`) e a pasta de um job de fundo do Claude Code (`~/.claude*\/jobs/<id>/`, ou `CLAUDE_JOB_DIR`).
357
+ */
358
+ function diretorioEfemero(caminho) {
359
+ let real = path.resolve(caminho);
360
+ try {
361
+ real = fs.realpathSync(real);
362
+ }
363
+ catch { /* o caminho que ja sumiu vale como foi escrito */ }
364
+ if (/\/\.claude[^/]*\/jobs\/[^/]+(\/|$)/.test(real))
365
+ return true;
366
+ return pastasTemporarias().some((r) => real === r || real.startsWith(r.endsWith(path.sep) ? r : r + path.sep));
367
+ }
320
368
  /**
321
369
  * D7: o registro nunca derruba o comando que o alimenta. Devolve o aviso para o terminal, ou `null`.
370
+ *
371
+ * RM-063 (fatia 3, achado b): provas e testes que rodam o `ork` em projetos de `/tmp` e da pasta dos jobs do Claude
372
+ * Code encheram o `~/.orkastery/projetos.json` real de projetos que somem. O registro automatico (init, thread new,
373
+ * fabrica entrar) nao grava projeto efemero num registro duravel: o projeto de `/tmp` so entra no registro que tambem
374
+ * e efemero (o `ORKASTERY_HOME` temporario dos testes). `ork projetos registrar`, pedido explicito, continua valendo.
322
375
  */
323
- function registrarProjetoEmSilencio(raiz, fonte) {
376
+ function registrarProjetoEmSilencio(raiz, fonte, opcoes = {}) {
377
+ const efemero = opcoes.efemero ?? diretorioEfemero;
324
378
  try {
379
+ if (efemero(raiz) && !efemero((0, maquina_1.pastaDoUsuario)())) {
380
+ return (0, locale_1.msg)().projetos.avisoTemporario(raizParaExibir(path.resolve(raiz)), caminhoDoRegistro());
381
+ }
325
382
  registrarProjeto(raiz, fonte);
326
383
  return null;
327
384
  }
328
385
  catch (e) {
329
- return `aviso: projeto não registrado em ${caminhoDoRegistro()} (${e.message})`;
386
+ return (0, locale_1.msg)().projetos.avisoRegistro(caminhoDoRegistro(), e.message);
330
387
  }
331
388
  }
332
389
  /** Tira do registro por nome, abbrev ou caminho. Nada casou e recusa, com os registrados. */
@@ -337,7 +394,7 @@ function esquecerProjeto(alvo, cwd = process.cwd()) {
337
394
  const porCaminho = ehCaminho(valor) ? caminhoPossivel(valor, cwd) : null;
338
395
  const sai = registro.projetos.filter((p) => porCaminho ? p.raiz === porCaminho : casaNome(p, valor));
339
396
  if (!sai.length) {
340
- throw new ErroDeProjeto('projeto.desconhecido', `"${valor}" não está no registro de projetos desta máquina`, registro.projetos.map(candidatoDoRegistro), 'Veja os registrados com `ork projetos`.');
397
+ throw new ErroDeProjeto('projeto.desconhecido', (0, locale_1.msg)().projetos.naoRegistrado(valor), registro.projetos.map(candidatoDoRegistro), (0, locale_1.msg)().projetos.vejaRegistrados);
341
398
  }
342
399
  registro.projetos = registro.projetos.filter((p) => !sai.includes(p));
343
400
  registro.atualizadoEm = new Date().toISOString();
@@ -375,17 +432,17 @@ function candidatoDoRegistro(p) {
375
432
  function raizPorCaminho(valor, cwd) {
376
433
  const dir = path.resolve(cwd, expandirHome(valor));
377
434
  if (!fs.existsSync(dir)) {
378
- throw new ErroDeProjeto('projeto.sem-manifesto', `o caminho ${raizParaExibir(dir)} não existe`, [], 'Informe o caminho da raiz de um projeto com orkastery.yaml, ou o nome de um projeto registrado (`ork projetos`).');
435
+ throw new ErroDeProjeto('projeto.sem-manifesto', (0, locale_1.msg)().projetos.caminhoNaoExiste(raizParaExibir(dir)), [], (0, locale_1.msg)().projetos.informeRaiz);
379
436
  }
380
437
  const achada = (0, util_1.subirAte)(dir, manifest_1.NOME_MANIFESTO) ?? (0, util_1.subirAte)(dir, manifest_1.NOME_MANIFESTO_LEGADO);
381
438
  if (!achada) {
382
- throw new ErroDeProjeto('projeto.sem-manifesto', `nenhum orkastery.yaml em ${raizParaExibir(dir)} nem acima dele`, [], 'Rode `ork init` na raiz do projeto, ou informe o nome de um projeto registrado (`ork projetos`).');
439
+ throw new ErroDeProjeto('projeto.sem-manifesto', (0, locale_1.msg)().projetos.yamlAusente(raizParaExibir(dir)), [], (0, locale_1.msg)().projetos.initOuNome);
383
440
  }
384
441
  return fs.realpathSync(achada);
385
442
  }
386
443
  function raizPorNome(valor) {
387
444
  if (!exports.PADRAO_DO_NOME_DE_PROJETO.test(valor)) {
388
- throw new ErroDeProjeto('projeto.desconhecido', `"${valor}" não é um nome de projeto válido`, lerRegistroDeProjetos().projetos.map(candidatoDoRegistro), 'Use o nome ou o abbrev de um projeto de `ork projetos`.');
445
+ throw new ErroDeProjeto('projeto.desconhecido', (0, locale_1.msg)().projetos.nomeInvalido(valor), lerRegistroDeProjetos().projetos.map(candidatoDoRegistro), (0, locale_1.msg)().projetos.useNome);
389
446
  }
390
447
  const registrados = lerRegistroDeProjetos().projetos;
391
448
  const casados = registrados.filter((p) => casaNome(p, valor));
@@ -393,9 +450,9 @@ function raizPorNome(valor) {
393
450
  if (presentes.length === 1)
394
451
  return presentes[0].raiz;
395
452
  if (presentes.length > 1) {
396
- throw new ErroDeProjeto('projeto.ambiguo', `"${valor}" casa ${presentes.length} projetos registrados nesta máquina`, presentes.map(candidatoDoRegistro), 'Repita com o caminho da raiz (`--projeto <caminho>`), ou tire a cópia que sobra com `ork projetos esquecer <caminho>`.');
453
+ throw new ErroDeProjeto('projeto.ambiguo', (0, locale_1.msg)().projetos.ambiguo(valor, presentes.length), presentes.map(candidatoDoRegistro), (0, locale_1.msg)().projetos.escolhaRaiz);
397
454
  }
398
- throw new ErroDeProjeto('projeto.desconhecido', casados.length ? `"${valor}" está registrado, mas o manifesto não está mais na raiz` : `"${valor}" não está no registro de projetos desta máquina`, registrados.map(candidatoDoRegistro), 'Veja os registrados com `ork projetos`; registre uma cópia com `ork projetos registrar <caminho>`.');
455
+ throw new ErroDeProjeto('projeto.desconhecido', casados.length ? (0, locale_1.msg)().projetos.semManifestoRegistrado(valor) : (0, locale_1.msg)().projetos.naoRegistrado(valor), registrados.map(candidatoDoRegistro), (0, locale_1.msg)().projetos.registreCopia);
399
456
  }
400
457
  /**
401
458
  * F2 do CHECK: o nome aponta a arvore principal; quem ja esta numa copia DESSE projeto (a worktree de
@@ -450,12 +507,12 @@ function resolverProjetoAlvo(entrada = {}) {
450
507
  if (entrada.opcao !== undefined && entrada.opcao !== null) {
451
508
  const valor = entrada.opcao.trim();
452
509
  if (!valor) {
453
- throw new ErroDeProjeto('projeto.desconhecido', '--projeto sem valor', lerRegistroDeProjetos().projetos.map(candidatoDoRegistro), 'Uso: --projeto <nome|caminho>; os nomes registrados estão em `ork projetos`.');
510
+ throw new ErroDeProjeto('projeto.desconhecido', (0, locale_1.msg)().projetos.opcaoSemValor, lerRegistroDeProjetos().projetos.map(candidatoDoRegistro), (0, locale_1.msg)().projetos.usoOpcao);
454
511
  }
455
512
  // D4 (F1 do CHECK): no host, quem pede escolhe entre os projetos da maquina pelo NOME. Caminho nao
456
513
  // entra por nenhuma tool, nem pela que repassa os argumentos como dados (os scripts do Hermes).
457
514
  if (host && ehCaminho(valor)) {
458
- throw new ErroDeProjeto('projeto.desconhecido', `no host o projeto vem pelo nome registrado; o caminho "${valor}" não é aceito`, lerRegistroDeProjetos().projetos.map(candidatoDoRegistro), 'Use o nome de um projeto de `ork projetos` (ex.: --projeto orkastery).');
515
+ throw new ErroDeProjeto('projeto.desconhecido', (0, locale_1.msg)().projetos.hostCaminho(valor), lerRegistroDeProjetos().projetos.map(candidatoDoRegistro), (0, locale_1.msg)().projetos.hostUseNome);
459
516
  }
460
517
  return { raiz: resolverValor(valor, cwd), origem: 'opcao', pedido: valor };
461
518
  }
@@ -467,10 +524,9 @@ function resolverProjetoAlvo(entrada = {}) {
467
524
  if (candidatos.length === 1)
468
525
  return { raiz: copiaDoCwd(candidatos[0].raiz, cwd), origem: 'unico-conhecido', pedido: null };
469
526
  if (candidatos.length > 1) {
470
- throw new ErroDeProjeto('projeto.escolha', `${candidatos.length} projetos conhecidos nesta máquina e nenhum foi pedido; o ork não escolhe pelo diretório do gateway`, candidatos.map((c) => c.candidato), `Repita com o projeto pedido: parâmetro \`projeto\` da tool, ou \`--projeto <nome>\`. ${exports.OFERTA_DA_REDE}`);
527
+ throw new ErroDeProjeto('projeto.escolha', (0, locale_1.msg)().projetos.precisaEscolher(candidatos.length), candidatos.map((c) => c.candidato), (0, locale_1.msg)().projetos.repitaEscolha((0, locale_1.msg)().projetos.ofertaRede));
471
528
  }
472
- throw new ErroDeProjeto('projeto.nenhum', 'nenhum projeto conhecido nesta máquina e nenhum foi pedido', [], 'Registre o projeto com `ork projetos registrar <caminho>` (ou `ork init` na raiz dele) e repita com o nome. ' +
473
- 'Sem clone nesta máquina, o roadmap de um projeto vem da forja: `ork network roadmap --projeto github:dono/repo` (tool ork_network_roadmap).');
529
+ throw new ErroDeProjeto('projeto.nenhum', (0, locale_1.msg)().projetos.nenhum, [], (0, locale_1.msg)().projetos.registrePrimeiro);
474
530
  }
475
531
  return null;
476
532
  }
@@ -532,6 +588,10 @@ exports.ORIGENS_DO_PROJETO = Object.freeze({
532
588
  * e nao revela os demais).
533
589
  */
534
590
  function consultaDoProjeto(carregado, opcoes) {
591
+ // Fatia 2 (D3): o comando monta o proprio cabecalho DO ALVO; a linha generica do fim nao se repete.
592
+ // A consulta de outro projeto (sugestao A3 do CHECK) nao apaga a declaracao pedida.
593
+ if (declaracao && mesmaRaiz(carregado.raiz, declaracao.alvo.raiz))
594
+ declaracao.feita = true;
535
595
  const alvo = projetoAlvoAtual();
536
596
  const origem = opcoes.origem ?? (alvo && path.resolve(alvo.raiz) === path.resolve(carregado.raiz) ? alvo.origem : 'cwd');
537
597
  const outros = opcoes.outrosProjetos === false ? 0 : outrosProjetosConhecidos(carregado.raiz);
@@ -540,16 +600,118 @@ function consultaDoProjeto(carregado, opcoes) {
540
600
  return {
541
601
  contrato: exports.CONTRATO_CONSULTA,
542
602
  projeto: { nome: carregado.manifesto.project.name, abbrev: carregado.manifesto.project.abbrev,
543
- raiz: raizParaExibir(carregado.raiz), remoto, origem },
603
+ raiz: raizParaExibir(carregado.raiz), remoto: remotoParaExibir(remoto), origem },
544
604
  lido: [...opcoes.lido],
545
605
  naoLido: [...opcoes.naoLido, ...(outros > 0 ? [`outros projetos desta máquina: ${outros} (ork projetos)`] : [])],
546
606
  };
547
607
  }
608
+ /** A linha do projeto consultado: a primeira do cabecalho e a que a declaracao da fatia 2 escreve. */
609
+ function linhaDoProjeto(p) {
610
+ return `Projeto consultado: ${p.nome} (${p.abbrev || '-'}) · ${p.raiz} · ${p.remoto ?? 'sem remoto'} · ${exports.ORIGENS_DO_PROJETO[p.origem]}`;
611
+ }
548
612
  /** As duas linhas do cabecalho em texto: o projeto consultado e o que nao foi lido. */
549
613
  function linhasDaConsulta(c) {
550
- const p = c.projeto;
551
614
  return [
552
- `Projeto consultado: ${p.nome} (${p.abbrev || '-'}) · ${p.raiz} · ${p.remoto ?? 'sem remoto'} · ${exports.ORIGENS_DO_PROJETO[p.origem]}`,
615
+ linhaDoProjeto(c.projeto),
553
616
  `Não lido: ${c.naoLido.length ? c.naoLido.join(' · ') : 'nada fora do projeto consultado'}`,
554
617
  ];
555
618
  }
619
+ // ---------------------------------------------------------------------------
620
+ // A declaracao do projeto consultado (fatia 2, D3).
621
+ // ---------------------------------------------------------------------------
622
+ /**
623
+ * Na fatia 1, so maestro, board, fabrica e roadmap status diziam qual projeto leram; dez das catorze
624
+ * tools de projeto do OpenClaw respondiam sem nomea-lo, e com um so projeto conhecido a resposta era a
625
+ * dele, sem aviso. Agora todo comando que le um projeto que o leitor nao tem como adivinhar termina com
626
+ * a linha `Projeto consultado: ...` no stderr: o OpenClaw junta stdout e stderr no texto da tool, e o
627
+ * JSON do stdout continua inteiro para quem o consome.
628
+ */
629
+ let declaracao = null;
630
+ /** Zera o pedido de declaracao do processo (os testes chamam `main` em serie no mesmo processo). */
631
+ function iniciarDeclaracaoDoProjeto() {
632
+ declaracao = null;
633
+ }
634
+ /**
635
+ * Pede a linha para o comando que vai ler `alvo`, so quando o leitor nao sabe qual projeto foi lido:
636
+ * no host (`ORK_PROJETO_EXPLICITO=1`), cuja resposta vai a um canal de conversa, ou quando o projeto nao
637
+ * e o do diretorio atual. No terminal, dentro do proprio projeto, nada muda (BR-030-02).
638
+ */
639
+ function pedirDeclaracaoDoProjeto(alvo, entrada = {}) {
640
+ declaracao = null;
641
+ if (!alvo)
642
+ return;
643
+ const ambiente = entrada.ambiente ?? process.env;
644
+ const host = (ambiente[exports.ENV_PROJETO_EXPLICITO] ?? '').trim() === '1';
645
+ if (!host && raizDoDiretorio(entrada.cwd ?? process.cwd()) === alvo.raiz)
646
+ return;
647
+ declaracao = { alvo, feita: false };
648
+ }
649
+ /** As duas raizes sao a mesma copia (caminho real; o resolvido quando o disco nao responde). */
650
+ function mesmaRaiz(a, b) {
651
+ const real = (p) => { try {
652
+ return fs.realpathSync(p);
653
+ }
654
+ catch {
655
+ return path.resolve(p);
656
+ } };
657
+ return real(a) === real(b);
658
+ }
659
+ /**
660
+ * Fatia 2 (sugestao S1 do CHECK): o remoto que vai a um canal de conversa. Ele ja chega sem usuario e
661
+ * senha (`remotoSemCredencial`); aqui sai tambem o que vem depois de `?` ou `#` na URL (token em query,
662
+ * como `?private_token=`), o caminho local mostra `~` no lugar da pasta da conta (D8) e o remoto que
663
+ * ainda parecer segredo sai omitido. So a exibicao muda: o registro guarda o remoto como sempre.
664
+ */
665
+ function remotoParaExibir(remoto) {
666
+ if (remoto === null)
667
+ return null;
668
+ let exibido = remoto;
669
+ if (/^[a-z][a-z0-9+.-]*:\/\//i.test(exibido)) {
670
+ try {
671
+ const u = new URL(exibido);
672
+ u.search = '';
673
+ u.hash = '';
674
+ exibido = u.toString();
675
+ }
676
+ catch {
677
+ exibido = exibido.replace(/[?#].*$/, '');
678
+ }
679
+ }
680
+ else if (path.isAbsolute(exibido))
681
+ exibido = raizParaExibir(exibido);
682
+ return (0, policies_1.procurarSegredos)(exibido).length ? 'remoto omitido (parece carregar segredo)' : exibido;
683
+ }
684
+ /** A raiz do manifesto que o diretorio enxerga subindo, com caminho real; `null` fora de projeto. */
685
+ function raizDoDiretorio(cwd) {
686
+ const achada = (0, util_1.subirAte)(path.resolve(cwd), manifest_1.NOME_MANIFESTO) ?? (0, util_1.subirAte)(path.resolve(cwd), manifest_1.NOME_MANIFESTO_LEGADO);
687
+ if (!achada)
688
+ return null;
689
+ try {
690
+ return fs.realpathSync(achada);
691
+ }
692
+ catch {
693
+ return null;
694
+ }
695
+ }
696
+ /**
697
+ * A linha que faltou, e consome o pedido: `null` sem pedido, ou quando o comando montou o proprio
698
+ * cabecalho (`consultaDoProjeto`).
699
+ */
700
+ function declaracaoQueFaltou() {
701
+ const d = declaracao;
702
+ declaracao = null;
703
+ if (!d || d.feita)
704
+ return null;
705
+ let carregado;
706
+ try {
707
+ carregado = (0, manifest_1.carregarManifesto)(d.alvo.raiz);
708
+ }
709
+ catch {
710
+ return null;
711
+ }
712
+ if (!carregado)
713
+ return null;
714
+ const m = carregado.manifesto;
715
+ return linhaDoProjeto({ nome: m.project.name, abbrev: m.project.abbrev, raiz: raizParaExibir(carregado.raiz),
716
+ remoto: remotoParaExibir(remotoDoProjeto(carregado.raiz, m.fabrica?.remoto ?? 'origin')), origem: d.alvo.origem });
717
+ }