@semacode/cli 1.5.47 → 1.5.52

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 (320) hide show
  1. package/LICENSE +39 -21
  2. package/README.md +47 -48
  3. package/dist/agentContext.d.ts +2 -2
  4. package/dist/agentContext.js +1 -1
  5. package/dist/agentContextPack.d.ts +1 -1
  6. package/dist/agentContextPack.js +70 -48
  7. package/dist/agentContextTipos.d.ts +2 -2
  8. package/dist/agentContextTipos.js +7 -13
  9. package/dist/agentEntryPoints.js +311 -271
  10. package/dist/billing/index.d.ts +1 -58
  11. package/dist/billing/index.js +17 -278
  12. package/dist/cliArgs.js +0 -3
  13. package/dist/comandos.js +15 -131
  14. package/dist/contexto.d.ts +0 -9
  15. package/dist/contexto.js +59 -109
  16. package/dist/docs.part01.js +30 -51
  17. package/dist/drift.part01.d.ts +1 -1
  18. package/dist/drift.part04.d.ts +1 -1
  19. package/dist/drift.part04.js +2 -2
  20. package/dist/drift.part05.d.ts +3 -3
  21. package/dist/drift.part05.js +8 -8
  22. package/dist/drift.part06.js +15 -8
  23. package/dist/drift.part09.js +11 -7
  24. package/dist/drift.part14.js +18 -3
  25. package/dist/driftOrcamento.d.ts +11 -1
  26. package/dist/driftOrcamento.js +49 -20
  27. package/dist/index.d.ts +0 -6
  28. package/dist/index.js +0 -6
  29. package/dist/index.part01.d.ts +1 -1
  30. package/dist/index.part01.js +1 -3
  31. package/dist/index.part02.js +4 -2
  32. package/dist/index.part04.js +7 -7
  33. package/dist/index.part08.js +1 -22
  34. package/dist/initTemplatesBase.js +5 -5
  35. package/dist/profileArtefatoValidadores.js +42 -0
  36. package/dist/profileI18nCatalogo.js +2 -0
  37. package/dist/projetoConfig.js +7 -0
  38. package/dist/projetoLegado.js +10 -3
  39. package/dist/sync/index.js +1 -1
  40. package/dist/tipos.d.ts +1 -1
  41. package/docs/README.md +19 -0
  42. package/docs/ai-integration.md +90 -0
  43. package/docs/ai-onboarding.md +33 -0
  44. package/docs/ai-workflow.md +62 -0
  45. package/docs/auth.md +16 -0
  46. package/docs/cli.md +36 -95
  47. package/docs/commands.md +90 -0
  48. package/docs/database.md +15 -0
  49. package/docs/deploy.md +6 -38
  50. package/docs/documentation.md +39 -0
  51. package/docs/env.md +8 -109
  52. package/docs/frontend.md +41 -0
  53. package/docs/getting-started.md +33 -0
  54. package/docs/i18n.md +15 -0
  55. package/docs/profiles.md +43 -0
  56. package/docs/repositories.md +19 -61
  57. package/docs/rollback.md +9 -20
  58. package/docs/security.md +24 -0
  59. package/docs/support.md +8 -0
  60. package/docs/syntax.md +128 -0
  61. package/docs/testing.md +17 -0
  62. package/docs/vocabulary.md +28 -0
  63. package/node_modules/@sema/gerador-css/dist/index.part01.js +1 -0
  64. package/node_modules/@sema/gerador-css/dist/index.part01.js.map +1 -1
  65. package/node_modules/@sema/gerador-css/package.json +1 -1
  66. package/node_modules/@sema/gerador-dart/dist/index.js +1 -0
  67. package/node_modules/@sema/gerador-dart/dist/index.js.map +1 -1
  68. package/node_modules/@sema/gerador-dart/package.json +1 -1
  69. package/node_modules/@sema/gerador-html/dist/index.js +1 -0
  70. package/node_modules/@sema/gerador-html/dist/index.js.map +1 -1
  71. package/node_modules/@sema/gerador-html/package.json +1 -1
  72. package/node_modules/@sema/gerador-javascript/dist/index.js +1 -0
  73. package/node_modules/@sema/gerador-javascript/dist/index.js.map +1 -1
  74. package/node_modules/@sema/gerador-javascript/package.json +1 -1
  75. package/node_modules/@sema/gerador-lua/dist/index.js +11 -0
  76. package/node_modules/@sema/gerador-lua/dist/index.js.map +1 -1
  77. package/node_modules/@sema/gerador-lua/package.json +1 -1
  78. package/node_modules/@sema/gerador-python/dist/index.part02.js +1 -0
  79. package/node_modules/@sema/gerador-python/dist/index.part02.js.map +1 -1
  80. package/node_modules/@sema/gerador-python/package.json +1 -1
  81. package/node_modules/@sema/gerador-typescript/dist/index.part02.js +1 -0
  82. package/node_modules/@sema/gerador-typescript/dist/index.part02.js.map +1 -1
  83. package/node_modules/@sema/gerador-typescript/package.json +1 -1
  84. package/node_modules/@sema/nucleo/dist/ast/tipos.d.ts +1 -1
  85. package/node_modules/@sema/nucleo/dist/diagnosticos/melhorador.js +1 -1
  86. package/node_modules/@sema/nucleo/dist/diagnosticos/melhorador.js.map +1 -1
  87. package/node_modules/@sema/nucleo/dist/ir/conversor.part01.js +4 -0
  88. package/node_modules/@sema/nucleo/dist/ir/conversor.part01.js.map +1 -1
  89. package/node_modules/@sema/nucleo/dist/ir/conversor.part02.d.ts +1 -1
  90. package/node_modules/@sema/nucleo/dist/ir/modelos.d.ts +3 -3
  91. package/node_modules/@sema/nucleo/dist/parser/parser.declaracoes.js +3 -0
  92. package/node_modules/@sema/nucleo/dist/parser/parser.declaracoes.js.map +1 -1
  93. package/node_modules/@sema/nucleo/dist/semantico/analisador.part01.d.ts +2 -2
  94. package/node_modules/@sema/nucleo/dist/semantico/analisador.part01.js +4 -1
  95. package/node_modules/@sema/nucleo/dist/semantico/analisador.part01.js.map +1 -1
  96. package/node_modules/@sema/nucleo/dist/semantico/orcamentoSemantico.d.ts +2 -2
  97. package/node_modules/@sema/nucleo/dist/semantico/orcamentoSemantico.js +11 -5
  98. package/node_modules/@sema/nucleo/dist/semantico/orcamentoSemantico.js.map +1 -1
  99. package/node_modules/@sema/nucleo/package.json +1 -1
  100. package/node_modules/@sema/padroes/package.json +1 -1
  101. package/package.json +15 -22
  102. package/AGENTS.md +0 -324
  103. package/AGENT_CONTEXT_PACK.json +0 -470
  104. package/SEMA_BRIEF.curto.txt +0 -18
  105. package/SEMA_BRIEF.md +0 -705
  106. package/SEMA_BRIEF.micro.txt +0 -16
  107. package/SEMA_INDEX.json +0 -10759
  108. package/dist/agentContext.js.map +0 -1
  109. package/dist/agentContextPack.js.map +0 -1
  110. package/dist/agentContextTipos.js.map +0 -1
  111. package/dist/agentEntryPoints.js.map +0 -1
  112. package/dist/angular-consumer-standalone.js.map +0 -1
  113. package/dist/authorAnalise.js.map +0 -1
  114. package/dist/authorPoliticas.js.map +0 -1
  115. package/dist/billing/index.js.map +0 -1
  116. package/dist/bridge.d.ts +0 -52
  117. package/dist/bridge.js +0 -333
  118. package/dist/bridge.js.map +0 -1
  119. package/dist/carregarModulos.js.map +0 -1
  120. package/dist/cliArgs.js.map +0 -1
  121. package/dist/comandos.js.map +0 -1
  122. package/dist/contexto.js.map +0 -1
  123. package/dist/controleComercialSupabase.d.ts +0 -7
  124. package/dist/controleComercialSupabase.js +0 -6
  125. package/dist/controleComercialSupabase.js.map +0 -1
  126. package/dist/controleComercialSupabaseAdmin.d.ts +0 -7
  127. package/dist/controleComercialSupabaseAdmin.js +0 -138
  128. package/dist/controleComercialSupabaseAdmin.js.map +0 -1
  129. package/dist/controleComercialSupabaseCadastro.d.ts +0 -4
  130. package/dist/controleComercialSupabaseCadastro.js +0 -85
  131. package/dist/controleComercialSupabaseCadastro.js.map +0 -1
  132. package/dist/controleComercialSupabaseConstantes.d.ts +0 -28
  133. package/dist/controleComercialSupabaseConstantes.js +0 -44
  134. package/dist/controleComercialSupabaseConstantes.js.map +0 -1
  135. package/dist/controleComercialSupabaseConsumo.d.ts +0 -2
  136. package/dist/controleComercialSupabaseConsumo.js +0 -77
  137. package/dist/controleComercialSupabaseConsumo.js.map +0 -1
  138. package/dist/controleComercialSupabaseConta.d.ts +0 -11
  139. package/dist/controleComercialSupabaseConta.js +0 -157
  140. package/dist/controleComercialSupabaseConta.js.map +0 -1
  141. package/dist/controleComercialSupabaseProfiles.d.ts +0 -4
  142. package/dist/controleComercialSupabaseProfiles.js +0 -55
  143. package/dist/controleComercialSupabaseProfiles.js.map +0 -1
  144. package/dist/controleComercialSupabaseTipos.d.ts +0 -3
  145. package/dist/controleComercialSupabaseTipos.js +0 -2
  146. package/dist/controleComercialSupabaseTipos.js.map +0 -1
  147. package/dist/controleComercialSupabaseTiposAdmin.d.ts +0 -152
  148. package/dist/controleComercialSupabaseTiposAdmin.js +0 -2
  149. package/dist/controleComercialSupabaseTiposAdmin.js.map +0 -1
  150. package/dist/controleComercialSupabaseTiposBase.d.ts +0 -169
  151. package/dist/controleComercialSupabaseTiposBase.js +0 -2
  152. package/dist/controleComercialSupabaseTiposBase.js.map +0 -1
  153. package/dist/controleComercialSupabaseTiposConta.d.ts +0 -220
  154. package/dist/controleComercialSupabaseTiposConta.js +0 -2
  155. package/dist/controleComercialSupabaseTiposConta.js.map +0 -1
  156. package/dist/cpp-symbols.js.map +0 -1
  157. package/dist/dev/index.js.map +0 -1
  158. package/dist/dev/watcher.js.map +0 -1
  159. package/dist/docs/resolver.js.map +0 -1
  160. package/dist/docs.js.map +0 -1
  161. package/dist/docs.part01.js.map +0 -1
  162. package/dist/docs.part02.js.map +0 -1
  163. package/dist/doctorCommand.js.map +0 -1
  164. package/dist/dotnet-http.js.map +0 -1
  165. package/dist/drift.contrato.js.map +0 -1
  166. package/dist/drift.js.map +0 -1
  167. package/dist/drift.part01.js.map +0 -1
  168. package/dist/drift.part02.js.map +0 -1
  169. package/dist/drift.part03.js.map +0 -1
  170. package/dist/drift.part04.js.map +0 -1
  171. package/dist/drift.part05.js.map +0 -1
  172. package/dist/drift.part06.js.map +0 -1
  173. package/dist/drift.part07.js.map +0 -1
  174. package/dist/drift.part08.js.map +0 -1
  175. package/dist/drift.part09.js.map +0 -1
  176. package/dist/drift.part10.js.map +0 -1
  177. package/dist/drift.part11.js.map +0 -1
  178. package/dist/drift.part12.js.map +0 -1
  179. package/dist/drift.part13.js.map +0 -1
  180. package/dist/drift.part14.js.map +0 -1
  181. package/dist/driftOrcamento.js.map +0 -1
  182. package/dist/driftScore.js.map +0 -1
  183. package/dist/execucoesExternas.js.map +0 -1
  184. package/dist/exemplosOficiais.js.map +0 -1
  185. package/dist/fsGovernado.js.map +0 -1
  186. package/dist/geracaoCore.js.map +0 -1
  187. package/dist/go-http.js.map +0 -1
  188. package/dist/guard.js.map +0 -1
  189. package/dist/iaPrompts.js.map +0 -1
  190. package/dist/importador.js.map +0 -1
  191. package/dist/importador.part01.js.map +0 -1
  192. package/dist/importador.part02.js.map +0 -1
  193. package/dist/importador.part03.js.map +0 -1
  194. package/dist/importador.part04.js.map +0 -1
  195. package/dist/importador.part05.js.map +0 -1
  196. package/dist/importador.part06.js.map +0 -1
  197. package/dist/importador.part07.js.map +0 -1
  198. package/dist/importador.part08.js.map +0 -1
  199. package/dist/importador.part09.js.map +0 -1
  200. package/dist/index.js.map +0 -1
  201. package/dist/index.part01.js.map +0 -1
  202. package/dist/index.part02.js.map +0 -1
  203. package/dist/index.part03.js.map +0 -1
  204. package/dist/index.part04.js.map +0 -1
  205. package/dist/index.part05.js.map +0 -1
  206. package/dist/index.part06.js.map +0 -1
  207. package/dist/index.part07.js.map +0 -1
  208. package/dist/index.part08.js.map +0 -1
  209. package/dist/init/index.js.map +0 -1
  210. package/dist/init/templates.js.map +0 -1
  211. package/dist/init/templates.part01.js.map +0 -1
  212. package/dist/init/templates.part02.js.map +0 -1
  213. package/dist/initCommand.js.map +0 -1
  214. package/dist/initTemplatesBackend.js.map +0 -1
  215. package/dist/initTemplatesBase.js.map +0 -1
  216. package/dist/initTemplatesFlutter.js.map +0 -1
  217. package/dist/initTemplatesRuntime.js.map +0 -1
  218. package/dist/initTemplatesWeb.js.map +0 -1
  219. package/dist/java-http.js.map +0 -1
  220. package/dist/lua-symbols.js.map +0 -1
  221. package/dist/mcpInstalarChaveCommand.d.ts +0 -1
  222. package/dist/mcpInstalarChaveCommand.js +0 -168
  223. package/dist/mcpInstalarChaveCommand.js.map +0 -1
  224. package/dist/mcpRemoto.d.ts +0 -32
  225. package/dist/mcpRemoto.js +0 -61
  226. package/dist/mcpRemoto.js.map +0 -1
  227. package/dist/mcp_chave.d.ts +0 -1
  228. package/dist/mcp_chave.js +0 -4
  229. package/dist/mcp_chave.js.map +0 -1
  230. package/dist/profileArtefatoBase.js.map +0 -1
  231. package/dist/profileArtefatoValidadores.js.map +0 -1
  232. package/dist/profileAuthorCommand.js.map +0 -1
  233. package/dist/profileAuthorTipos.js.map +0 -1
  234. package/dist/profileCatalogo.js.map +0 -1
  235. package/dist/profileCommand.js.map +0 -1
  236. package/dist/profileI18nCatalogo.js.map +0 -1
  237. package/dist/profileI18nVisivel.js.map +0 -1
  238. package/dist/profileOrquestracao.js.map +0 -1
  239. package/dist/profileRegras.js.map +0 -1
  240. package/dist/profileRulePacks.js.map +0 -1
  241. package/dist/profiles/validate.js.map +0 -1
  242. package/dist/projeto.js.map +0 -1
  243. package/dist/projetoBusca.js.map +0 -1
  244. package/dist/projetoCarregar.js.map +0 -1
  245. package/dist/projetoConfig.js.map +0 -1
  246. package/dist/projetoLegado.js.map +0 -1
  247. package/dist/projetoOrigens.js.map +0 -1
  248. package/dist/projetoResolucao.js.map +0 -1
  249. package/dist/projetoTipos.js.map +0 -1
  250. package/dist/python-http.js.map +0 -1
  251. package/dist/runnerValidacaoRemota.d.ts +0 -9
  252. package/dist/runnerValidacaoRemota.js +0 -9
  253. package/dist/runnerValidacaoRemota.js.map +0 -1
  254. package/dist/runnerValidacaoRemotaBateria.d.ts +0 -10
  255. package/dist/runnerValidacaoRemotaBateria.js +0 -117
  256. package/dist/runnerValidacaoRemotaBateria.js.map +0 -1
  257. package/dist/runnerValidacaoRemotaCli.d.ts +0 -4
  258. package/dist/runnerValidacaoRemotaCli.js +0 -86
  259. package/dist/runnerValidacaoRemotaCli.js.map +0 -1
  260. package/dist/runnerValidacaoRemotaComandos.d.ts +0 -7
  261. package/dist/runnerValidacaoRemotaComandos.js +0 -123
  262. package/dist/runnerValidacaoRemotaComandos.js.map +0 -1
  263. package/dist/runnerValidacaoRemotaEscopo.d.ts +0 -4
  264. package/dist/runnerValidacaoRemotaEscopo.js +0 -79
  265. package/dist/runnerValidacaoRemotaEscopo.js.map +0 -1
  266. package/dist/runnerValidacaoRemotaExecucao.d.ts +0 -2
  267. package/dist/runnerValidacaoRemotaExecucao.js +0 -104
  268. package/dist/runnerValidacaoRemotaExecucao.js.map +0 -1
  269. package/dist/runnerValidacaoRemotaRelatorio.d.ts +0 -3
  270. package/dist/runnerValidacaoRemotaRelatorio.js +0 -95
  271. package/dist/runnerValidacaoRemotaRelatorio.js.map +0 -1
  272. package/dist/runnerValidacaoRemotaServidor.d.ts +0 -4
  273. package/dist/runnerValidacaoRemotaServidor.js +0 -185
  274. package/dist/runnerValidacaoRemotaServidor.js.map +0 -1
  275. package/dist/runnerValidacaoRemotaSnapshot.d.ts +0 -10
  276. package/dist/runnerValidacaoRemotaSnapshot.js +0 -219
  277. package/dist/runnerValidacaoRemotaSnapshot.js.map +0 -1
  278. package/dist/runnerValidacaoRemotaTipos.d.ts +0 -158
  279. package/dist/runnerValidacaoRemotaTipos.js +0 -35
  280. package/dist/runnerValidacaoRemotaTipos.js.map +0 -1
  281. package/dist/runnerValidacaoRemotaUtil.d.ts +0 -3
  282. package/dist/runnerValidacaoRemotaUtil.js +0 -18
  283. package/dist/runnerValidacaoRemotaUtil.js.map +0 -1
  284. package/dist/runnerValidacaoRemotaWorkspace.d.ts +0 -2
  285. package/dist/runnerValidacaoRemotaWorkspace.js +0 -112
  286. package/dist/runnerValidacaoRemotaWorkspace.js.map +0 -1
  287. package/dist/rust-http.js.map +0 -1
  288. package/dist/semaChatCommand.d.ts +0 -1
  289. package/dist/semaChatCommand.js +0 -43
  290. package/dist/semaChatCommand.js.map +0 -1
  291. package/dist/semaChatRuntime.d.ts +0 -23
  292. package/dist/semaChatRuntime.js +0 -202
  293. package/dist/semaChatRuntime.js.map +0 -1
  294. package/dist/sync/index.js.map +0 -1
  295. package/dist/textoListas.js.map +0 -1
  296. package/dist/tipos.js.map +0 -1
  297. package/dist/typescript-http-body.js.map +0 -1
  298. package/dist/typescript-http-expressoes.js.map +0 -1
  299. package/dist/typescript-http-modelos.js.map +0 -1
  300. package/dist/typescript-http-rotas.js.map +0 -1
  301. package/dist/typescript-http-semantica.js.map +0 -1
  302. package/dist/typescript-http.js.map +0 -1
  303. package/docs/AGENT_STARTER.md +0 -111
  304. package/docs/agentes-por-capacidade.md +0 -126
  305. package/docs/api.md +0 -82
  306. package/docs/comandos.md +0 -702
  307. package/docs/como-ensinar-a-sema-para-ia.md +0 -30
  308. package/docs/documentacao.md +0 -74
  309. package/docs/extensao-vscode.md +0 -49
  310. package/docs/fluxo-pratico-ia-sema.md +0 -215
  311. package/docs/instalacao-e-primeiro-uso.md +0 -60
  312. package/docs/integracao-com-ia.md +0 -44
  313. package/docs/mcp.md +0 -69
  314. package/docs/pagamento-ponta-a-ponta.md +0 -171
  315. package/docs/persistencia-vendor-first.md +0 -151
  316. package/docs/prompt-base-ia-sema.md +0 -111
  317. package/docs/seguranca.md +0 -126
  318. package/docs/sintaxe.md +0 -218
  319. package/llms-full.txt +0 -40
  320. package/llms.txt +0 -23
package/dist/contexto.js CHANGED
@@ -1,112 +1,79 @@
1
1
  // SEMA-GOVERNED: sema.governanca_ia_contexto
2
- // Descricao: codigo governado pelo Sema; consulte contratos/sema/governanca_ia_contexto.sema antes de editar.
3
- /**
4
- * Gerador de pacote de contexto para chats web (ChatGPT, Lovable, etc.).
5
- *
6
- * A CLI lê contratos e código selecionado do disco local e gera um pacote
7
- * compacto que o usuário cola no chat. Isso elimina o sync manual — a CLI
8
- * faz o trabalho pesado de I/O local e entrega um payload pronto.
9
- *
10
- * Contrato: contratos/sema/mcp_client_bridge.sema — task gerar_pacote_contexto_para_chat
11
- */
2
+ // Descricao: gera um pacote local de contexto Sema sem depender de servico externo.
12
3
  import { readFile, mkdir, writeFile } from "node:fs/promises";
13
4
  import path from "node:path";
14
- // ---------------------------------------------------------------------------
15
- // Constantes
16
- // ---------------------------------------------------------------------------
17
- const LIMITE_TAMANHO_INLINE = 100_000; // 100KB
5
+ const LIMITE_TAMANHO_INLINE = 100_000;
18
6
  const PADROES_SEGREDO = [
19
- /(?:api[_-]?key|secret|token|password|senha)\s*[:=]\s*["']?[A-Za-z0-9_\-]{16,}/gi,
20
- /\bsk-[A-Za-z0-9_\-]{20,}\b/g,
21
- /\beyJ[A-Za-z0-9_\-]+\.[A-Za-z0-9_\-]+\.[A-Za-z0-9_\-]+\b/g,
7
+ /(?:api[_-]?key|secret|token|password|senha)\s*[:=]\s*["']?[A-Za-z0-9_-]{16,}/gi,
8
+ /\bsk-[A-Za-z0-9_-]{20,}\b/g,
9
+ /\beyJ[A-Za-z0-9_-]+\.[A-Za-z0-9_-]+\.[A-Za-z0-9_-]+\b/g,
22
10
  ];
23
- // ---------------------------------------------------------------------------
24
- // Gerar pacote de contexto para chat
25
- // ---------------------------------------------------------------------------
26
11
  export async function gerarPacoteContextoChat(entrada, cwd = process.cwd()) {
27
12
  if (!entrada.contratos || entrada.contratos.length === 0) {
28
- throw new Error("Nenhum contrato informado. Use --contratos <arquivo1.sema> <arquivo2.sema>");
13
+ throw new Error("No contract was provided. Use --contratos <file1.sema> <file2.sema>.");
29
14
  }
30
- // Ler contratos
31
15
  const contratosConteudo = [];
32
16
  for (const contrato of entrada.contratos) {
33
17
  const absoluto = path.resolve(cwd, contrato);
34
18
  const conteudo = await readFile(absoluto, "utf8");
35
19
  contratosConteudo.push({ caminho: contrato, conteudo });
36
20
  }
37
- // Ler código selecionado (se houver)
38
21
  const codigoConteudo = [];
39
- if (entrada.codigoSelecionado) {
40
- for (const arquivo of entrada.codigoSelecionado) {
41
- try {
42
- const absoluto = path.resolve(cwd, arquivo);
43
- let conteudo = await readFile(absoluto, "utf8");
44
- conteudo = sanitizarConteudo(conteudo);
45
- codigoConteudo.push({ caminho: arquivo, conteudo });
46
- }
47
- catch {
48
- // Arquivo não existe — ignora silenciosamente
49
- }
22
+ for (const arquivo of entrada.codigoSelecionado ?? []) {
23
+ try {
24
+ const absoluto = path.resolve(cwd, arquivo);
25
+ const conteudo = sanitizarConteudo(await readFile(absoluto, "utf8"));
26
+ codigoConteudo.push({ caminho: arquivo, conteudo });
27
+ }
28
+ catch {
29
+ // Missing selected files are ignored because this helper is best-effort context assembly.
50
30
  }
51
31
  }
52
- // Montar resumo
53
- const modulos = contratosConteudo.map((c) => extrairModulo(c.conteudo)).filter(Boolean);
54
- const tarefas = contratosConteudo.flatMap((c) => extrairTarefas(c.conteudo));
55
- const rotas = contratosConteudo.flatMap((c) => extrairRotas(c.conteudo));
32
+ const modulos = contratosConteudo.map((contrato) => extrairModulo(contrato.conteudo)).filter(Boolean);
33
+ const tarefas = contratosConteudo.flatMap((contrato) => extrairTarefas(contrato.conteudo));
34
+ const rotas = contratosConteudo.flatMap((contrato) => extrairRotas(contrato.conteudo));
56
35
  const resumo = [
57
- `# Contexto Sema para Chat`,
58
- ``,
59
- `**Módulos:** ${modulos.join(", ") || "nenhum"}`,
60
- `**Tarefas:** ${tarefas.length}`,
61
- `**Rotas:** ${rotas.length}`,
62
- `**Arquivos de código:** ${codigoConteudo.length}`,
63
- ``,
64
- `## Contratos`,
65
- ...contratosConteudo.map((c) => `### ${c.caminho}\n\`\`\`sema\n${c.conteudo}\n\`\`\``),
66
- ``,
36
+ "# Sema Local Context",
37
+ "",
38
+ `Modules: ${modulos.join(", ") || "none"}`,
39
+ `Tasks: ${tarefas.length}`,
40
+ `Routes: ${rotas.length}`,
41
+ `Selected code files: ${codigoConteudo.length}`,
42
+ "",
43
+ "## Contracts",
44
+ ...contratosConteudo.map((contrato) => `### ${contrato.caminho}\n\`\`\`sema\n${contrato.conteudo}\n\`\`\``),
45
+ "",
67
46
  ].join("\n");
68
- // Código selecionado (resumido)
69
47
  const codigoResumido = codigoConteudo.length > 0
70
48
  ? [
71
- `## Código Selecionado`,
72
- ...codigoConteudo.map((c) => {
73
- const ext = path.extname(c.caminho).slice(1) || "txt";
74
- return `### ${c.caminho}\n\`\`\`${ext}\n${c.conteudo}\n\`\`\``;
49
+ "## Selected Code",
50
+ ...codigoConteudo.map((arquivo) => {
51
+ const ext = path.extname(arquivo.caminho).slice(1) || "txt";
52
+ return `### ${arquivo.caminho}\n\`\`\`${ext}\n${arquivo.conteudo}\n\`\`\``;
75
53
  }),
76
- ``,
54
+ "",
77
55
  ].join("\n")
78
56
  : "";
79
- // IR resumida
80
57
  const irResumida = [
81
- `## IR Resumida`,
82
- `- Módulos: ${modulos.join(", ") || "nenhum"}`,
83
- `- Tarefas: ${tarefas.map((t) => `\`${t}\``).join(", ") || "nenhuma"}`,
84
- `- Rotas: ${rotas.map((r) => `\`${r}\``).join(", ") || "nenhuma"}`,
85
- ``,
58
+ "## IR Summary",
59
+ `- Modules: ${modulos.join(", ") || "none"}`,
60
+ `- Tasks: ${tarefas.map((tarefa) => `\`${tarefa}\``).join(", ") || "none"}`,
61
+ `- Routes: ${rotas.map((rota) => `\`${rota}\``).join(", ") || "none"}`,
62
+ "",
86
63
  ].join("\n");
87
- // Drift resumido (placeholder — a CLI faz drift real via `sema drift`)
88
64
  const driftResumido = entrada.incluirDrift
89
- ? [
90
- `## Drift`,
91
- `⚠️ Drift real requer \`sema drift\` CLI.`,
92
- `Este pacote contém contratos e código para o MCP executar drift remoto.`,
93
- ``,
94
- ].join("\n")
95
- : `## Drift\nNão incluído (use --drift para incluir).\n`;
96
- // Impact map (placeholder)
65
+ ? "## Drift\nRun `sema drift` locally for the authoritative drift result.\n"
66
+ : "## Drift\nNot included. Run `sema drift` locally when drift evidence is required.\n";
97
67
  const impactMap = entrada.incluirImpacto
98
- ? tarefas.map((t) => `- \`${t}\`: contratos/${t}.sema → implementação`)
68
+ ? tarefas.map((tarefa) => `- \`${tarefa}\`: local contract and linked implementation must be inspected with \`sema impacto\`.`)
99
69
  : [];
100
- // Docs relevantes
101
70
  const docsRelevantes = [
102
71
  "AGENTS.md",
103
- "docs/mcp.md",
104
72
  "docs/cli.md",
105
- "docs/sintaxe.md",
73
+ "docs/syntax.md",
74
+ "docs/documentation.md",
106
75
  ];
107
- // Checksum simples
108
- const conteudoTotal = contratosConteudo.map((c) => c.conteudo).join("");
109
- const checksum = checksumSimples(conteudoTotal);
76
+ const checksum = checksumSimples(contratosConteudo.map((contrato) => contrato.conteudo).join(""));
110
77
  const pacote = {
111
78
  contratos: entrada.contratos,
112
79
  resumo,
@@ -116,7 +83,6 @@ export async function gerarPacoteContextoChat(entrada, cwd = process.cwd()) {
116
83
  docsRelevantes,
117
84
  checksum,
118
85
  };
119
- // Montar texto inline completo
120
86
  const inlineTexto = [
121
87
  `<!-- SEMA_CONTEXT_PACK v1 checksum=${checksum} -->`,
122
88
  resumo,
@@ -124,20 +90,19 @@ export async function gerarPacoteContextoChat(entrada, cwd = process.cwd()) {
124
90
  irResumida,
125
91
  driftResumido,
126
92
  impactMap.length > 0 ? `## Impact Map\n${impactMap.join("\n")}\n` : "",
127
- `## Docs Relevantes`,
128
- `Leia estes arquivos antes de agir:`,
129
- ...docsRelevantes.map((d) => `- \`${d}\``),
130
- ``,
131
- `## Instruções para o Agente`,
132
- `1. Leia os contratos acima — eles são a fonte da verdade`,
133
- `2. Código selecionado é contexto adicional, não substitui o contrato`,
134
- `3. Antes de qualquer ação: crie, edite ou remova o .sema aplicável`,
135
- `4. Use \`sema_docs_impacto\` com sua intenção declarada`,
136
- `5. Finalize com \`sema_finalizar_mudanca\``,
93
+ "## Relevant Docs",
94
+ "Read these files before acting:",
95
+ ...docsRelevantes.map((doc) => `- \`${doc}\``),
96
+ "",
97
+ "## Agent Instructions",
98
+ "1. Read the contracts above. They are the source of truth.",
99
+ "2. Treat selected code as context, not as a substitute for the contract.",
100
+ "3. Run `sema docs-impacto` with the declared intention before changing files.",
101
+ "4. Run `sema drift` and `sema impacto` locally before editing governed code.",
102
+ "5. Close with `sema finalizar-mudanca` and concrete evidence.",
137
103
  ].join("\n");
138
104
  const tamanhoBytes = Buffer.byteLength(inlineTexto, "utf8");
139
105
  const prontoParaChat = tamanhoBytes <= LIMITE_TAMANHO_INLINE;
140
- // Gerar arquivos se solicitado
141
106
  const arquivosGerados = [];
142
107
  if (entrada.formatoSaida === "arquivo" || entrada.formatoSaida === "ambos") {
143
108
  const pastaSaida = path.resolve(cwd, ".tmp", "sema-contexto-chat");
@@ -145,7 +110,6 @@ export async function gerarPacoteContextoChat(entrada, cwd = process.cwd()) {
145
110
  const arquivoContexto = path.join(pastaSaida, "SEMA_CONTEXT_CHAT.md");
146
111
  await writeFile(arquivoContexto, inlineTexto, "utf8");
147
112
  arquivosGerados.push(arquivoContexto);
148
- // Também gerar JSON estruturado
149
113
  const arquivoJson = path.join(pastaSaida, "contexto-chat.json");
150
114
  await writeFile(arquivoJson, JSON.stringify({ pacote, tamanhoBytes, prontoParaChat }, null, 2), "utf8");
151
115
  arquivosGerados.push(arquivoJson);
@@ -158,40 +122,26 @@ export async function gerarPacoteContextoChat(entrada, cwd = process.cwd()) {
158
122
  inlineTexto: entrada.formatoSaida === "inline" || entrada.formatoSaida === "ambos" ? inlineTexto : undefined,
159
123
  };
160
124
  }
161
- // ---------------------------------------------------------------------------
162
- // Helpers de extração
163
- // ---------------------------------------------------------------------------
164
125
  function extrairModulo(conteudo) {
165
126
  const match = conteudo.match(/^module\s+([\w.]+)\s*\{/m);
166
127
  return match ? match[1] : null;
167
128
  }
168
129
  function extrairTarefas(conteudo) {
169
- const tarefas = [];
170
- const regex = /^\s*task\s+(\w+)\s*\{/gm;
171
- let match;
172
- while ((match = regex.exec(conteudo)) !== null) {
173
- tarefas.push(match[1]);
174
- }
175
- return tarefas;
130
+ return [...conteudo.matchAll(/^\s*task\s+(\w+)\s*\{/gm)].map((match) => match[1]);
176
131
  }
177
132
  function extrairRotas(conteudo) {
178
- const rotas = [];
179
- const regex = /^\s*route\s+(\w+)\s*\{/gm;
180
- let match;
181
- while ((match = regex.exec(conteudo)) !== null) {
182
- rotas.push(match[1]);
183
- }
184
- return rotas;
133
+ return [...conteudo.matchAll(/^\s*route\s+(\w+)\s*\{/gm)].map((match) => match[1]);
185
134
  }
186
135
  function sanitizarConteudo(conteudo) {
136
+ let sanitizado = conteudo;
187
137
  for (const padrao of PADROES_SEGREDO) {
188
- conteudo = conteudo.replace(padrao, "[REDACTED]");
138
+ sanitizado = sanitizado.replace(padrao, "[REDACTED]");
189
139
  }
190
- return conteudo;
140
+ return sanitizado;
191
141
  }
192
142
  function checksumSimples(texto) {
193
143
  let hash = 0;
194
- for (let i = 0; i < texto.length; i++) {
144
+ for (let i = 0; i < texto.length; i += 1) {
195
145
  hash = ((hash << 5) - hash + texto.charCodeAt(i)) | 0;
196
146
  }
197
147
  return Math.abs(hash).toString(16).padStart(8, "0");
@@ -146,7 +146,7 @@ export const REGRAS_DOCUMENTACAO = [
146
146
  categoria: "author",
147
147
  padroes: [/\bauthor\b/, /autoral/, /obra/, /cliche/, /estilo/, /personagem/, /narrativa/, /sensibility/, /sensitivity/],
148
148
  docs: [
149
- { relativo: "docs/profiles-author-agents-flow.md", tipo: "documentacao", motivo: "profile Author, agents, flow e guardrails autorais", permitirCriacao: false },
149
+ { relativo: "docs/profiles.md", tipo: "documentacao", motivo: "Author profile and local validation guardrails", permitirCriacao: false },
150
150
  ],
151
151
  },
152
152
  {
@@ -154,7 +154,6 @@ export const REGRAS_DOCUMENTACAO = [
154
154
  padroes: [/\bprofiles\b/, /\bworkflow\b/, /\bn8n\b/, /\bops\b/, /\bgame\b/, /\blegal\b/, /\bresearch\b/, /pesquisa/, /juridic/, /orquestracao/, /automacao/],
155
155
  docs: [
156
156
  { relativo: "docs/profiles.md", tipo: "documentacao", motivo: "profiles oficiais, gates e fronteiras de adapter", permitirCriacao: false },
157
- { relativo: "docs/scorecard-compatibilidade.md", tipo: "documentacao", motivo: "scorecard de compatibilidade para runtimes e adapters", permitirCriacao: false },
158
157
  ],
159
158
  },
160
159
  {
@@ -162,23 +161,21 @@ export const REGRAS_DOCUMENTACAO = [
162
161
  padroes: [/(^|[^a-z0-9])auth([^a-z0-9]|$)/, /autentic/, /login/, /permiss/, /autoriz/, /token/, /oauth/, /seguranca/],
163
162
  docs: [
164
163
  { relativo: "docs/auth.md", tipo: "documentacao", motivo: "regras de autenticacao, autorizacao e tokens", permitirCriacao: true },
165
- { relativo: "docs/seguranca.md", tipo: "documentacao", motivo: "politicas de seguranca afetadas pela mudanca", permitirCriacao: true },
164
+ { relativo: "docs/security.md", tipo: "documentacao", motivo: "politicas de seguranca afetadas pela mudanca", permitirCriacao: true },
166
165
  ],
167
166
  },
168
167
  {
169
168
  categoria: "persistencia",
170
169
  padroes: [/banco/, /database/, /persist/, /migration/, /migracao/, /prisma/, /postgres/, /redis/, /mongodb/],
171
170
  docs: [
172
- { relativo: "docs/persistencia-vendor-first.md", tipo: "documentacao", motivo: "regras de persistencia vendor-first", permitirCriacao: false },
173
171
  { relativo: "docs/database.md", tipo: "runbook", motivo: "operacao de banco, migracoes e validacao de dados", permitirCriacao: true },
174
172
  ],
175
173
  },
176
174
  {
177
- categoria: "mcp",
178
- padroes: [/\bmcp\b/, /tool/, /ferramenta/, /server/, /streamable/, /sse/],
175
+ categoria: "integracao_ia",
176
+ padroes: [/tool/, /ferramenta/, /agent/, /agente/, /copilot/, /cursor/, /cline/, /roo/, /opencode/],
179
177
  docs: [
180
- { relativo: "docs/integracao-com-ia.md", tipo: "documentacao", motivo: "integracao do Sema com agentes IA", permitirCriacao: false },
181
- { relativo: "docs/mcp.md", tipo: "documentacao", motivo: "runbook do MCP privado e ferramentas remotas", permitirCriacao: true },
178
+ { relativo: "docs/ai-integration.md", tipo: "documentacao", motivo: "integracao do Sema com agentes IA", permitirCriacao: false },
182
179
  ],
183
180
  },
184
181
  {
@@ -189,20 +186,12 @@ export const REGRAS_DOCUMENTACAO = [
189
186
  { relativo: "docs/cli.md", tipo: "documentacao", motivo: "guia operacional dos comandos da CLI", permitirCriacao: false },
190
187
  ],
191
188
  },
192
- {
193
- categoria: "extensao",
194
- padroes: [/vscode/, /extension/, /extensao/, /editor/, /\blsp\b/, /language server/],
195
- docs: [
196
- { relativo: "pacotes/editor-vscode/README.md", tipo: "pacote", motivo: "documentacao publica da extensao VS Code", permitirCriacao: false },
197
- { relativo: "docs/extensao-vscode.md", tipo: "documentacao", motivo: "runbook da extensao VS Code", permitirCriacao: true },
198
- ],
199
- },
200
189
  {
201
190
  categoria: "contrato",
202
191
  padroes: [/contrato/, /\.sema/, /semant/, /\bsema\b/, /drift/, /governanca/],
203
192
  docs: [
204
- { relativo: "docs/sintaxe.md", tipo: "documentacao", motivo: "sintaxe e blocos de contrato Sema", permitirCriacao: false },
205
- { relativo: "docs/fluxo-pratico-ia-sema.md", tipo: "documentacao", motivo: "fluxo IA-first antes de editar contratos", permitirCriacao: false },
193
+ { relativo: "docs/syntax.md", tipo: "documentacao", motivo: "sintaxe e blocos de contrato Sema", permitirCriacao: false },
194
+ { relativo: "docs/ai-workflow.md", tipo: "documentacao", motivo: "fluxo IA-first antes de editar contratos", permitirCriacao: false },
206
195
  ],
207
196
  },
208
197
  {
@@ -216,7 +205,7 @@ export const REGRAS_DOCUMENTACAO = [
216
205
  categoria: "testes",
217
206
  padroes: [/teste/, /testar/, /qa/, /validacao/, /regressao/],
218
207
  docs: [
219
- { relativo: "docs/testes.md", tipo: "runbook", motivo: "estrategia de testes e regressao", permitirCriacao: true },
208
+ { relativo: "docs/testing.md", tipo: "runbook", motivo: "estrategia de testes e regressao", permitirCriacao: true },
220
209
  ],
221
210
  },
222
211
  {
@@ -224,7 +213,7 @@ export const REGRAS_DOCUMENTACAO = [
224
213
  padroes: [/doc/, /readme/, /manual/, /runbook/, /onboarding/],
225
214
  docs: [
226
215
  { relativo: "docs/README.md", tipo: "documentacao", motivo: "indice de documentacao do projeto", permitirCriacao: false },
227
- { relativo: "docs/documentacao.md", tipo: "documentacao", motivo: "politica de atualizacao documental", permitirCriacao: true },
216
+ { relativo: "docs/documentation.md", tipo: "documentacao", motivo: "politica de atualizacao documental", permitirCriacao: true },
228
217
  ],
229
218
  },
230
219
  ];
@@ -240,56 +229,46 @@ export function criarTemplateDoc(doc, intencao, categorias, arquivosAlvo) {
240
229
  const linhas = [
241
230
  `# ${titulo}`,
242
231
  "",
243
- "## English",
244
- "",
245
232
  "This document was created by Sema because an AI declared an intention that requires operational reading before action.",
246
233
  "",
247
- "## Português",
248
- "",
249
- "Documento criado pela Sema porque uma IA declarou uma intenção que exige leitura operacional antes de agir.",
250
- "",
251
- "## Español",
252
- "",
253
- "Documento creado por Sema porque una IA declaró una intención que exige lectura operativa antes de actuar.",
254
- "",
255
- "## Intenção",
234
+ "## Intention",
256
235
  "",
257
- intencao || "Descrever a intenção operacional antes de executar a mudança.",
236
+ intencao || "Describe the operational intention before making the change.",
258
237
  "",
259
- "## Escopo",
238
+ "## Scope",
260
239
  "",
261
240
  arquivosAlvo.length > 0
262
241
  ? arquivosAlvo.map((arquivo) => `- ${arquivo}`).join("\n")
263
- : "- Declarar os arquivos, serviços ou contratos afetados.",
242
+ : "- Declare the affected files, services, or contracts.",
264
243
  "",
265
- "## Leitura obrigatória antes de agir",
244
+ "## Required Reading Before Action",
266
245
  "",
267
- "- Ler este documento inteiro.",
268
- "- Ler contratos .sema relacionados antes de editar código.",
269
- "- Ler README, runbooks e docs de pacote envolvidos.",
246
+ "- Read this whole document.",
247
+ "- Read related `.sema` contracts before editing code.",
248
+ "- Read the involved README, runbooks, and package docs.",
270
249
  "",
271
- "## Procedimento",
250
+ "## Procedure",
272
251
  "",
273
- "- Descrever os comandos ou passos seguros.",
274
- "- Declarar pré-condições, variáveis e dependências.",
275
- "- Registrar como validar sucesso.",
252
+ "- Describe the safe commands or steps.",
253
+ "- Declare preconditions, variables, and dependencies.",
254
+ "- Record how success will be validated.",
276
255
  "",
277
- "## Validação",
256
+ "## Validation",
278
257
  "",
279
- "- Listar comandos de build, teste, verificação ou smoke test.",
280
- "- Registrar evidências esperadas.",
258
+ "- List build, test, verification, or smoke-check commands.",
259
+ "- Record expected evidence.",
281
260
  "",
282
261
  "## Rollback",
283
262
  "",
284
- "- Descrever como desfazer a mudança.",
285
- "- Declarar sinais que exigem rollback.",
263
+ "- Describe how to undo the change.",
264
+ "- Declare signals that require rollback.",
286
265
  "",
287
- "## Atualização documental",
266
+ "## Documentation Update",
288
267
  "",
289
- "- Atualizar este arquivo quando o fluxo operacional mudar.",
290
- "- Atualizar docs e contratos relacionados na mesma mudança.",
268
+ "- Update this file when the operational flow changes.",
269
+ "- Update related docs and contracts in the same change.",
291
270
  "",
292
- `Categorias inferidas: ${categorias.join(", ")}`,
271
+ `Inferred categories: ${categorias.join(", ")}`,
293
272
  "",
294
273
  ];
295
274
  return `${linhas.join("\n")}\n`;
@@ -1,6 +1,6 @@
1
1
  import type { EngineBanco, NivelConfiancaSemantica, NivelRiscoSemantico, TipoRecursoPersistencia } from "@sema/nucleo";
2
2
  import type { ContextoProjetoCarregado } from "./projeto.js";
3
- export type OrigemCodigoDrift = "ts" | "py" | "dart" | "lua" | "cs" | "java" | "go" | "rust" | "cpp";
3
+ export type OrigemCodigoDrift = "ts" | "js" | "py" | "dart" | "lua" | "cs" | "java" | "go" | "rust" | "cpp";
4
4
  export type OrigemSimboloDrift = OrigemCodigoDrift | "sql";
5
5
  export interface SimboloResolvido {
6
6
  origem: OrigemSimboloDrift;
@@ -41,7 +41,7 @@ export declare function listarArquivosRecursivos(diretorio: string, extensoes: s
41
41
  export declare const EXTENSOES_ARQUIVOS_RASTREAVEIS_DRIFT: string[];
42
42
  export declare function indexarArquivosRastreaveis(diretorios: string[]): Promise<string[]>;
43
43
  export declare function caminhosSimbolicos(baseDiretorio: string, arquivo: string): string[];
44
- export declare function registrarSimboloTypeScript(simbolos: Map<string, SimboloResolvido>, basesSimbolicas: string[], arquivo: string, nome: string, nomeClasse?: string): void;
44
+ export declare function registrarSimboloTypeScript(simbolos: Map<string, SimboloResolvido>, basesSimbolicas: string[], arquivo: string, nome: string, nomeClasse?: string, origem?: "ts" | "js"): void;
45
45
  export declare function desembrulharExpressaoTypeScript(expr: ts.Expression): ts.Expression;
46
46
  export declare function extrairNomePropriedadeTypeScript(nome: ts.PropertyName, sourceFile: ts.SourceFile): string | undefined;
47
47
  export declare function extrairNomeClassePrototypeTypeScript(expr: ts.Expression, sourceFile: ts.SourceFile): string | undefined;
@@ -317,13 +317,13 @@ export function caminhosSimbolicos(baseDiretorio, arquivo) {
317
317
  : [];
318
318
  return [...new Set([semPrefixo, comPrefixo, ...aliasesIndex].filter(Boolean))];
319
319
  }
320
- export function registrarSimboloTypeScript(simbolos, basesSimbolicas, arquivo, nome, nomeClasse) {
320
+ export function registrarSimboloTypeScript(simbolos, basesSimbolicas, arquivo, nome, nomeClasse, origem = "ts") {
321
321
  for (const baseSimbolica of basesSimbolicas) {
322
322
  const caminho = nomeClasse
323
323
  ? `${baseSimbolica}.${nomeClasse}.${nome}`
324
324
  : `${baseSimbolica}.${nome}`;
325
325
  simbolos.set(caminho, {
326
- origem: "ts",
326
+ origem,
327
327
  caminho,
328
328
  arquivo,
329
329
  simbolo: nomeClasse ? `${nomeClasse}.${nome}` : nome,
@@ -1,8 +1,8 @@
1
1
  import ts from "typescript";
2
2
  import { RegistroConsumerSurfaceDrift, SimboloResolvido } from "./drift.part01.js";
3
- export declare function registrarMetodoTypeScriptProtoOuObjeto(simbolos: Map<string, SimboloResolvido>, basesSimbolicas: string[], arquivo: string, nomeMetodo: string, nomeClasse?: string): void;
4
- export declare function registrarMetodosObjectAssignTypeScript(simbolos: Map<string, SimboloResolvido>, basesSimbolicas: string[], arquivo: string, objeto: ts.ObjectLiteralExpression, sourceFile: ts.SourceFile, nomeClasse?: string): void;
5
- export declare function registrarAtribuicaoPrototypeTypeScript(simbolos: Map<string, SimboloResolvido>, basesSimbolicas: string[], arquivo: string, sourceFile: ts.SourceFile, esquerda: ts.Expression, direita: ts.Expression): void;
3
+ export declare function registrarMetodoTypeScriptProtoOuObjeto(simbolos: Map<string, SimboloResolvido>, basesSimbolicas: string[], arquivo: string, nomeMetodo: string, nomeClasse?: string, origem?: "ts" | "js"): void;
4
+ export declare function registrarMetodosObjectAssignTypeScript(simbolos: Map<string, SimboloResolvido>, basesSimbolicas: string[], arquivo: string, objeto: ts.ObjectLiteralExpression, sourceFile: ts.SourceFile, nomeClasse?: string, origem?: "ts" | "js"): void;
5
+ export declare function registrarAtribuicaoPrototypeTypeScript(simbolos: Map<string, SimboloResolvido>, basesSimbolicas: string[], arquivo: string, sourceFile: ts.SourceFile, esquerda: ts.Expression, direita: ts.Expression, origem?: "ts" | "js"): void;
6
6
  export declare function normalizarRelacaoConsumer(relacaoArquivo: string): string;
7
7
  export declare function normalizarSegmentoRotaConsumer(segmento: string): string;
8
8
  export declare function montarRotaConsumer(partes: string[]): string;
@@ -4,21 +4,21 @@ import { readFile } from "node:fs/promises";
4
4
  import path from "node:path";
5
5
  import ts from "typescript";
6
6
  import { desembrulharExpressaoTypeScript, extrairNomePropriedadeTypeScript, registrarSimboloTypeScript } from "./drift.part04.js";
7
- export function registrarMetodoTypeScriptProtoOuObjeto(simbolos, basesSimbolicas, arquivo, nomeMetodo, nomeClasse) {
7
+ export function registrarMetodoTypeScriptProtoOuObjeto(simbolos, basesSimbolicas, arquivo, nomeMetodo, nomeClasse, origem = "ts") {
8
8
  if (!nomeMetodo) {
9
9
  return;
10
10
  }
11
11
  if (nomeClasse) {
12
- registrarSimboloTypeScript(simbolos, basesSimbolicas, arquivo, nomeMetodo, nomeClasse);
12
+ registrarSimboloTypeScript(simbolos, basesSimbolicas, arquivo, nomeMetodo, nomeClasse, origem);
13
13
  }
14
- registrarSimboloTypeScript(simbolos, basesSimbolicas, arquivo, nomeMetodo);
14
+ registrarSimboloTypeScript(simbolos, basesSimbolicas, arquivo, nomeMetodo, undefined, origem);
15
15
  }
16
- export function registrarMetodosObjectAssignTypeScript(simbolos, basesSimbolicas, arquivo, objeto, sourceFile, nomeClasse) {
16
+ export function registrarMetodosObjectAssignTypeScript(simbolos, basesSimbolicas, arquivo, objeto, sourceFile, nomeClasse, origem = "ts") {
17
17
  for (const propriedade of objeto.properties) {
18
18
  if (ts.isMethodDeclaration(propriedade) && propriedade.name) {
19
19
  const nomeMetodo = extrairNomePropriedadeTypeScript(propriedade.name, sourceFile);
20
20
  if (nomeMetodo) {
21
- registrarMetodoTypeScriptProtoOuObjeto(simbolos, basesSimbolicas, arquivo, nomeMetodo, nomeClasse);
21
+ registrarMetodoTypeScriptProtoOuObjeto(simbolos, basesSimbolicas, arquivo, nomeMetodo, nomeClasse, origem);
22
22
  }
23
23
  continue;
24
24
  }
@@ -28,11 +28,11 @@ export function registrarMetodosObjectAssignTypeScript(simbolos, basesSimbolicas
28
28
  const nomeMetodo = extrairNomePropriedadeTypeScript(propriedade.name, sourceFile);
29
29
  const valor = desembrulharExpressaoTypeScript(propriedade.initializer);
30
30
  if (nomeMetodo && (ts.isFunctionExpression(valor) || ts.isArrowFunction(valor))) {
31
- registrarMetodoTypeScriptProtoOuObjeto(simbolos, basesSimbolicas, arquivo, nomeMetodo, nomeClasse);
31
+ registrarMetodoTypeScriptProtoOuObjeto(simbolos, basesSimbolicas, arquivo, nomeMetodo, nomeClasse, origem);
32
32
  }
33
33
  }
34
34
  }
35
- export function registrarAtribuicaoPrototypeTypeScript(simbolos, basesSimbolicas, arquivo, sourceFile, esquerda, direita) {
35
+ export function registrarAtribuicaoPrototypeTypeScript(simbolos, basesSimbolicas, arquivo, sourceFile, esquerda, direita, origem = "ts") {
36
36
  const alvo = desembrulharExpressaoTypeScript(esquerda);
37
37
  const valor = desembrulharExpressaoTypeScript(direita);
38
38
  if (!ts.isPropertyAccessExpression(alvo) || !ts.isPropertyAccessExpression(alvo.expression)) {
@@ -46,7 +46,7 @@ export function registrarAtribuicaoPrototypeTypeScript(simbolos, basesSimbolicas
46
46
  }
47
47
  const nomeClasse = alvo.expression.expression.getText(sourceFile).trim();
48
48
  const nomeMetodo = alvo.name.getText(sourceFile).trim();
49
- registrarMetodoTypeScriptProtoOuObjeto(simbolos, basesSimbolicas, arquivo, nomeMetodo, nomeClasse || undefined);
49
+ registrarMetodoTypeScriptProtoOuObjeto(simbolos, basesSimbolicas, arquivo, nomeMetodo, nomeClasse || undefined, origem);
50
50
  }
51
51
  export function normalizarRelacaoConsumer(relacaoArquivo) {
52
52
  return relacaoArquivo.replace(/\\/g, "/");
@@ -115,7 +115,7 @@ function aplicarReexportacoesTypeScript(simbolos, reexportacoes) {
115
115
  const caminho = `${baseFacade}.${nomeExportado ?? sufixo}`;
116
116
  if (!simbolos.has(caminho)) {
117
117
  simbolos.set(caminho, {
118
- origem: "ts",
118
+ origem: simbolo.origem,
119
119
  caminho,
120
120
  arquivo: simbolo.arquivo,
121
121
  simbolo: simbolo.simbolo,
@@ -145,7 +145,14 @@ export async function indexarTypeScript(diretorios) {
145
145
  const reexportacoes = [];
146
146
  for (const arquivo of arquivos) {
147
147
  const codigo = await readFile(arquivo, "utf8");
148
- const scriptKind = arquivo.endsWith(".tsx") ? ts.ScriptKind.TSX : ts.ScriptKind.TS;
148
+ const origemArquivo = /\.(?:js|jsx|mjs|cjs)$/i.test(arquivo) ? "js" : "ts";
149
+ const scriptKind = arquivo.endsWith(".tsx")
150
+ ? ts.ScriptKind.TSX
151
+ : arquivo.endsWith(".jsx")
152
+ ? ts.ScriptKind.JSX
153
+ : origemArquivo === "js"
154
+ ? ts.ScriptKind.JS
155
+ : ts.ScriptKind.TS;
149
156
  const sourceFile = ts.createSourceFile(arquivo, codigo, ts.ScriptTarget.Latest, true, scriptKind);
150
157
  const basesSimbolicas = caminhosSimbolicos(diretorio, arquivo);
151
158
  const relacao = path.relative(diretorio, arquivo);
@@ -251,7 +258,7 @@ export async function indexarTypeScript(diretorios) {
251
258
  reexportacoes.push(reexportacao);
252
259
  }
253
260
  if (ts.isFunctionDeclaration(node) && node.name) {
254
- registrarSimboloTypeScript(simbolos, basesSimbolicas, arquivo, node.name.text);
261
+ registrarSimboloTypeScript(simbolos, basesSimbolicas, arquivo, node.name.text, undefined, origemArquivo);
255
262
  }
256
263
  if (ts.isVariableStatement(node)) {
257
264
  for (const declaracao of node.declarationList.declarations) {
@@ -259,7 +266,7 @@ export async function indexarTypeScript(diretorios) {
259
266
  continue;
260
267
  }
261
268
  if (ts.isArrowFunction(declaracao.initializer) || ts.isFunctionExpression(declaracao.initializer)) {
262
- registrarSimboloTypeScript(simbolos, basesSimbolicas, arquivo, declaracao.name.text);
269
+ registrarSimboloTypeScript(simbolos, basesSimbolicas, arquivo, declaracao.name.text, undefined, origemArquivo);
263
270
  }
264
271
  }
265
272
  }
@@ -277,12 +284,12 @@ export async function indexarTypeScript(diretorios) {
277
284
  for (const argumento of expr.arguments.slice(1)) {
278
285
  const valor = desembrulharExpressaoTypeScript(argumento);
279
286
  if (ts.isObjectLiteralExpression(valor)) {
280
- registrarMetodosObjectAssignTypeScript(simbolos, basesSimbolicas, arquivo, valor, sourceFile, nomeClasse);
287
+ registrarMetodosObjectAssignTypeScript(simbolos, basesSimbolicas, arquivo, valor, sourceFile, nomeClasse, origemArquivo);
281
288
  }
282
289
  }
283
290
  }
284
291
  else if (ts.isBinaryExpression(expr) && expr.operatorToken.kind === ts.SyntaxKind.EqualsToken) {
285
- registrarAtribuicaoPrototypeTypeScript(simbolos, basesSimbolicas, arquivo, sourceFile, expr.left, expr.right);
292
+ registrarAtribuicaoPrototypeTypeScript(simbolos, basesSimbolicas, arquivo, sourceFile, expr.left, expr.right, origemArquivo);
286
293
  }
287
294
  }
288
295
  continue;
@@ -297,12 +304,12 @@ export async function indexarTypeScript(diretorios) {
297
304
  if (nomeMetodo === "constructor") {
298
305
  continue;
299
306
  }
300
- registrarSimboloTypeScript(simbolos, basesSimbolicas, arquivo, nomeMetodo, node.name.text);
307
+ registrarSimboloTypeScript(simbolos, basesSimbolicas, arquivo, nomeMetodo, node.name.text, origemArquivo);
301
308
  const metodoEhInterno = member.modifiers?.some((m) => m.kind === ts.SyntaxKind.PrivateKeyword || m.kind === ts.SyntaxKind.ProtectedKeyword);
302
309
  for (const baseSimbolica of basesSimbolicas) {
303
310
  const caminhoMetodoDireto = `${baseSimbolica}.${nomeMetodo}`;
304
311
  if (!simbolos.has(caminhoMetodoDireto)) {
305
- simbolos.set(caminhoMetodoDireto, { origem: "ts", caminho: caminhoMetodoDireto, arquivo, simbolo: nomeMetodo });
312
+ simbolos.set(caminhoMetodoDireto, { origem: origemArquivo, caminho: caminhoMetodoDireto, arquivo, simbolo: nomeMetodo });
306
313
  }
307
314
  }
308
315
  if (controllerDecorator && !metodoEhInterno) {