@semacode/cli 2.3.0 → 3.0.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 (267) hide show
  1. package/LICENSE +39 -39
  2. package/README.md +112 -41
  3. package/dist/agentContextPack.js +14 -10
  4. package/dist/agentEntryPoints.d.ts +5 -0
  5. package/dist/agentEntryPoints.js +102 -91
  6. package/dist/angular-consumer-standalone.d.ts +3 -1
  7. package/dist/angular-consumer-standalone.js +12 -8
  8. package/dist/bin.d.ts +6 -0
  9. package/dist/bin.js +130 -0
  10. package/dist/cliArgs.js +4 -4
  11. package/dist/cliControlError.d.ts +12 -0
  12. package/dist/cliControlError.js +47 -0
  13. package/dist/cliGrammar.d.ts +11 -0
  14. package/dist/cliGrammar.js +551 -0
  15. package/dist/cliHelp.d.ts +13 -0
  16. package/dist/cliHelp.js +19 -0
  17. package/dist/cliHelpTexto.d.ts +3 -0
  18. package/dist/cliHelpTexto.js +168 -0
  19. package/dist/cliRuntime.d.ts +2 -0
  20. package/dist/cliRuntime.js +31 -0
  21. package/dist/comandos.js +9 -22
  22. package/dist/contexto.js +5 -5
  23. package/dist/dev/index.d.ts +1 -0
  24. package/dist/dev/index.js +51 -9
  25. package/dist/discovery/catalog.js +3 -3
  26. package/dist/distribuicao/filesystemGlobal.d.ts +63 -0
  27. package/dist/distribuicao/filesystemGlobal.js +701 -0
  28. package/dist/distribuicao/index.d.ts +7 -0
  29. package/dist/distribuicao/index.js +227 -0
  30. package/dist/distribuicao/launcherGlobal.d.ts +53 -0
  31. package/dist/distribuicao/launcherGlobal.js +643 -0
  32. package/dist/distribuicao/launcherWindows.d.ts +28 -0
  33. package/dist/distribuicao/launcherWindows.js +326 -0
  34. package/dist/distribuicao/lockContextGlobal.d.ts +10 -0
  35. package/dist/distribuicao/lockContextGlobal.js +17 -0
  36. package/dist/distribuicao/lockGlobal.d.ts +6 -0
  37. package/dist/distribuicao/lockGlobal.js +520 -0
  38. package/dist/distribuicao/skillGlobal.d.ts +48 -0
  39. package/dist/distribuicao/skillGlobal.js +652 -0
  40. package/dist/distribuicao/skillIntentPolicy.d.ts +21 -0
  41. package/dist/distribuicao/skillIntentPolicy.js +115 -0
  42. package/dist/distribuicao/tipos.d.ts +50 -0
  43. package/dist/distribuicao/tipos.js +10 -0
  44. package/dist/distribuicao/versaoSemantica.d.ts +3 -0
  45. package/dist/distribuicao/versaoSemantica.js +62 -0
  46. package/dist/drift.part01.d.ts +34 -2
  47. package/dist/drift.part01.js +3 -0
  48. package/dist/drift.part04.d.ts +12 -2
  49. package/dist/drift.part04.js +89 -15
  50. package/dist/drift.part05.d.ts +2 -1
  51. package/dist/drift.part05.js +9 -6
  52. package/dist/drift.part06.d.ts +2 -1
  53. package/dist/drift.part06.js +115 -24
  54. package/dist/drift.part07.d.ts +11 -10
  55. package/dist/drift.part07.js +261 -255
  56. package/dist/drift.part08.d.ts +2 -1
  57. package/dist/drift.part08.js +35 -25
  58. package/dist/drift.part11.js +279 -32
  59. package/dist/drift.part12.d.ts +1 -1
  60. package/dist/drift.part12.js +196 -11
  61. package/dist/drift.part13.d.ts +18 -2
  62. package/dist/drift.part13.js +654 -76
  63. package/dist/drift.part14.js +21 -7
  64. package/dist/driftCacheCas.d.ts +43 -0
  65. package/dist/driftCacheCas.js +351 -0
  66. package/dist/driftCacheFilesystem.d.ts +64 -0
  67. package/dist/driftCacheFilesystem.js +313 -0
  68. package/dist/driftCacheModes.d.ts +38 -0
  69. package/dist/driftCacheModes.js +147 -0
  70. package/dist/driftCacheStore.d.ts +80 -0
  71. package/dist/driftCacheStore.js +603 -0
  72. package/dist/driftCatalogo.d.ts +65 -0
  73. package/dist/driftCatalogo.js +516 -0
  74. package/dist/driftEscopo.d.ts +21 -0
  75. package/dist/driftEscopo.js +647 -0
  76. package/dist/driftEscopoReferencias.d.ts +8 -0
  77. package/dist/driftEscopoReferencias.js +612 -0
  78. package/dist/driftOrcamento.d.ts +6 -0
  79. package/dist/driftOrcamento.js +20 -3
  80. package/dist/geracaoCore.js +4 -6
  81. package/dist/iaPrompts.d.ts +3 -3
  82. package/dist/iaPrompts.js +13 -14
  83. package/dist/index.d.ts +4 -1
  84. package/dist/index.js +6 -25
  85. package/dist/index.part01.d.ts +21 -14
  86. package/dist/index.part01.js +20 -165
  87. package/dist/index.part02.js +57 -43
  88. package/dist/index.part03.d.ts +23 -1
  89. package/dist/index.part03.js +83 -8
  90. package/dist/index.part04.d.ts +10 -2
  91. package/dist/index.part04.js +48 -14
  92. package/dist/index.part05.d.ts +1 -1
  93. package/dist/index.part05.js +109 -30
  94. package/dist/index.part06.js +34 -16
  95. package/dist/index.part07.js +31 -27
  96. package/dist/index.part08.d.ts +1 -1
  97. package/dist/index.part08.js +23 -28
  98. package/dist/init/templates.part01.js +393 -393
  99. package/dist/init/templates.part02.js +189 -189
  100. package/dist/initCommand.js +5 -1
  101. package/dist/initTemplatesBackend.js +73 -73
  102. package/dist/initTemplatesBase.js +7 -5
  103. package/dist/initTemplatesFlutter.js +137 -137
  104. package/dist/initTemplatesRuntime.js +350 -350
  105. package/dist/initTemplatesWeb.js +309 -309
  106. package/dist/pipelineConteudo/command.d.ts +1 -0
  107. package/dist/pipelineConteudo/command.js +4 -32
  108. package/dist/pipelineConteudo/help.d.ts +2 -0
  109. package/dist/pipelineConteudo/help.js +33 -0
  110. package/dist/profileAuthorCommand.js +3 -7
  111. package/dist/profileCommand.js +3 -7
  112. package/dist/projeto.d.ts +1 -1
  113. package/dist/projetoCarregar.d.ts +2 -2
  114. package/dist/projetoCarregar.js +69 -28
  115. package/dist/projetoCatalogo.d.ts +8 -0
  116. package/dist/projetoCatalogo.js +164 -0
  117. package/dist/projetoOrigens.d.ts +2 -0
  118. package/dist/projetoOrigens.js +65 -9
  119. package/dist/projetoTipos.d.ts +15 -5
  120. package/dist/resultadoCli.d.ts +20 -0
  121. package/dist/resultadoCli.js +57 -0
  122. package/dist/saidaCli.d.ts +35 -0
  123. package/dist/saidaCli.js +118 -0
  124. package/dist/sistemasInterativos/acceptanceEvidence.d.ts +22 -0
  125. package/dist/sistemasInterativos/acceptanceEvidence.js +345 -0
  126. package/dist/sistemasInterativos/engineObservation.d.ts +12 -0
  127. package/dist/sistemasInterativos/engineObservation.js +438 -0
  128. package/dist/sistemasInterativos/jobOrchestration.d.ts +2 -0
  129. package/dist/sistemasInterativos/jobOrchestration.js +204 -0
  130. package/dist/sistemasInterativos/operationPrimitives.d.ts +21 -0
  131. package/dist/sistemasInterativos/operationPrimitives.js +194 -0
  132. package/dist/sistemasInterativos/operations.d.ts +4 -39
  133. package/dist/sistemasInterativos/operations.js +5 -1164
  134. package/dist/skillCommand.d.ts +5 -0
  135. package/dist/skillCommand.js +88 -0
  136. package/dist/sync/index.js +35 -35
  137. package/docs/README.md +11 -7
  138. package/docs/ai-integration.md +18 -11
  139. package/docs/ai-onboarding.md +81 -62
  140. package/docs/ai-workflow.md +10 -4
  141. package/docs/auth.md +26 -26
  142. package/docs/cli.md +197 -79
  143. package/docs/commands.md +30 -6
  144. package/docs/database.md +15 -15
  145. package/docs/deploy.md +54 -41
  146. package/docs/documentation.md +11 -10
  147. package/docs/drift-cache.md +108 -0
  148. package/docs/env.md +16 -16
  149. package/docs/frontend.md +41 -41
  150. package/docs/getting-started.md +82 -57
  151. package/docs/i18n.md +15 -15
  152. package/docs/repositories.md +60 -43
  153. package/docs/rollback.md +38 -31
  154. package/docs/security.md +54 -32
  155. package/docs/sistemas-interativos.md +27 -27
  156. package/docs/support.md +8 -8
  157. package/docs/testing.md +123 -17
  158. package/docs/vocabulary.md +29 -29
  159. package/exemplos/agendamento.sema +1 -1
  160. package/exemplos/assinatura.sema +1 -1
  161. package/exemplos/auditoria.sema +1 -1
  162. package/exemplos/autenticacao.sema +1 -1
  163. package/exemplos/author_obra_comum.sema +1 -1
  164. package/exemplos/author_tema_sensivel.sema +1 -1
  165. package/exemplos/automacao.sema +1 -1
  166. package/exemplos/cadastro_usuario.sema +1 -1
  167. package/exemplos/calculadora.sema +1 -1
  168. package/exemplos/crud_simples.sema +1 -1
  169. package/exemplos/estoque.sema +1 -1
  170. package/exemplos/exportacao.sema +1 -1
  171. package/exemplos/fila.sema +1 -1
  172. package/exemplos/integracao_externa.sema +1 -1
  173. package/exemplos/multi_tenant.sema +1 -1
  174. package/exemplos/notificacao.sema +1 -1
  175. package/exemplos/operacao_estrategia.sema +132 -132
  176. package/exemplos/operacao_estrategia_discovery.sema +220 -220
  177. package/exemplos/operacao_estrategia_fluxo.sema +114 -114
  178. package/exemplos/operacao_estrategia_gates.sema +106 -106
  179. package/exemplos/operacao_estrategia_quarentena.sema +133 -133
  180. package/exemplos/operacao_estrategia_rollout.sema +124 -124
  181. package/exemplos/pagamento.sema +1 -1
  182. package/exemplos/pagamento_dominio.sema +1 -1
  183. package/exemplos/pedido.sema +1 -1
  184. package/exemplos/permissao.sema +1 -1
  185. package/exemplos/persistencia_vendor_first.sema +1 -1
  186. package/exemplos/profile_conversas.sema +165 -165
  187. package/exemplos/profile_game.sema +1 -1
  188. package/exemplos/profile_legal.sema +1 -1
  189. package/exemplos/profile_ops.sema +1 -1
  190. package/exemplos/profile_research.sema +1 -1
  191. package/exemplos/profile_software.sema +1 -1
  192. package/exemplos/profile_workflow_n8n.sema +1 -1
  193. package/exemplos/relatorio.sema +1 -1
  194. package/exemplos/replica_analitica_erp.sema +1 -1
  195. package/exemplos/testes_embutidos.sema +1 -1
  196. package/exemplos/tratamento_erro.sema +1 -1
  197. package/exemplos/upload_arquivo.sema +1 -1
  198. package/exemplos/webhook.sema +1 -1
  199. package/node_modules/@sema/gerador-cpp/dist/index.js +176 -176
  200. package/node_modules/@sema/gerador-css/dist/index.part01.js +10 -10
  201. package/node_modules/@sema/gerador-css/dist/index.part02.js +460 -460
  202. package/node_modules/@sema/gerador-dotnet/dist/index.js +169 -169
  203. package/node_modules/@sema/gerador-html/dist/index.js +17 -17
  204. package/node_modules/@sema/gerador-python/dist/index.part02.js +3 -3
  205. package/node_modules/@sema/gerador-typescript/dist/index.part02.js +11 -11
  206. package/node_modules/@sema/nucleo/dist/diagnosticos/melhorador.js +42 -42
  207. package/node_modules/@sema/nucleo/dist/semantico/analisador.d.ts +1 -0
  208. package/node_modules/@sema/nucleo/dist/semantico/analisador.js +1 -0
  209. package/package.json +7 -2
  210. package/scripts/postinstall.mjs +148 -0
  211. package/skills/sema/SKILL.md +199 -0
  212. package/skills/sema/agents/openai.yaml +4 -0
  213. package/node_modules/@sema/gerador-cpp/dist/index.js.map +0 -1
  214. package/node_modules/@sema/gerador-css/dist/index.js.map +0 -1
  215. package/node_modules/@sema/gerador-css/dist/index.part01.js.map +0 -1
  216. package/node_modules/@sema/gerador-css/dist/index.part02.js.map +0 -1
  217. package/node_modules/@sema/gerador-dart/dist/index.js.map +0 -1
  218. package/node_modules/@sema/gerador-dotnet/dist/index.js.map +0 -1
  219. package/node_modules/@sema/gerador-html/dist/index.js.map +0 -1
  220. package/node_modules/@sema/gerador-javascript/dist/index.js.map +0 -1
  221. package/node_modules/@sema/gerador-lua/dist/index.js.map +0 -1
  222. package/node_modules/@sema/gerador-php/dist/index.js.map +0 -1
  223. package/node_modules/@sema/gerador-python/dist/index.js.map +0 -1
  224. package/node_modules/@sema/gerador-python/dist/index.part01.js.map +0 -1
  225. package/node_modules/@sema/gerador-python/dist/index.part02.js.map +0 -1
  226. package/node_modules/@sema/gerador-typescript/dist/index.js.map +0 -1
  227. package/node_modules/@sema/gerador-typescript/dist/index.part01.js.map +0 -1
  228. package/node_modules/@sema/gerador-typescript/dist/index.part02.js.map +0 -1
  229. package/node_modules/@sema/gerador-typescript/dist/index.part03.js.map +0 -1
  230. package/node_modules/@sema/nucleo/dist/ast/tipos.js.map +0 -1
  231. package/node_modules/@sema/nucleo/dist/diagnosticos/index.js.map +0 -1
  232. package/node_modules/@sema/nucleo/dist/diagnosticos/melhorador.js.map +0 -1
  233. package/node_modules/@sema/nucleo/dist/diagnosticos/snippets.js.map +0 -1
  234. package/node_modules/@sema/nucleo/dist/formatador/index.js.map +0 -1
  235. package/node_modules/@sema/nucleo/dist/formatador/index.part01.js.map +0 -1
  236. package/node_modules/@sema/nucleo/dist/formatador/index.part02.js.map +0 -1
  237. package/node_modules/@sema/nucleo/dist/index.js.map +0 -1
  238. package/node_modules/@sema/nucleo/dist/ir/conversor.js.map +0 -1
  239. package/node_modules/@sema/nucleo/dist/ir/conversor.part01.js.map +0 -1
  240. package/node_modules/@sema/nucleo/dist/ir/conversor.part02.js.map +0 -1
  241. package/node_modules/@sema/nucleo/dist/ir/conversor.part03.js.map +0 -1
  242. package/node_modules/@sema/nucleo/dist/ir/modelos.js.map +0 -1
  243. package/node_modules/@sema/nucleo/dist/lexer/lexer.js.map +0 -1
  244. package/node_modules/@sema/nucleo/dist/lexer/tokens.js.map +0 -1
  245. package/node_modules/@sema/nucleo/dist/parser/parser.declaracoes.js.map +0 -1
  246. package/node_modules/@sema/nucleo/dist/parser/parser.js.map +0 -1
  247. package/node_modules/@sema/nucleo/dist/parser/parser.modulo.js.map +0 -1
  248. package/node_modules/@sema/nucleo/dist/parser/parser.part01.js.map +0 -1
  249. package/node_modules/@sema/nucleo/dist/parser/parser.part02.js.map +0 -1
  250. package/node_modules/@sema/nucleo/dist/parser/parser.part03.js.map +0 -1
  251. package/node_modules/@sema/nucleo/dist/persistencia/contratos.js.map +0 -1
  252. package/node_modules/@sema/nucleo/dist/semantico/analisador.js.map +0 -1
  253. package/node_modules/@sema/nucleo/dist/semantico/analisador.part01.js.map +0 -1
  254. package/node_modules/@sema/nucleo/dist/semantico/analisador.part02.js.map +0 -1
  255. package/node_modules/@sema/nucleo/dist/semantico/analisador.part03.js.map +0 -1
  256. package/node_modules/@sema/nucleo/dist/semantico/analisador.part04.js.map +0 -1
  257. package/node_modules/@sema/nucleo/dist/semantico/analisador.part05.js.map +0 -1
  258. package/node_modules/@sema/nucleo/dist/semantico/analisador.part06.js.map +0 -1
  259. package/node_modules/@sema/nucleo/dist/semantico/analisador.part07.js.map +0 -1
  260. package/node_modules/@sema/nucleo/dist/semantico/analisador.part08.js.map +0 -1
  261. package/node_modules/@sema/nucleo/dist/semantico/estruturas.js.map +0 -1
  262. package/node_modules/@sema/nucleo/dist/semantico/estruturas.part01.js.map +0 -1
  263. package/node_modules/@sema/nucleo/dist/semantico/estruturas.part02.js.map +0 -1
  264. package/node_modules/@sema/nucleo/dist/semantico/orcamentoSemantico.js.map +0 -1
  265. package/node_modules/@sema/nucleo/dist/semantico/seguranca.js.map +0 -1
  266. package/node_modules/@sema/nucleo/dist/util/arquivos.js.map +0 -1
  267. package/node_modules/@sema/padroes/dist/index.js.map +0 -1
@@ -0,0 +1,115 @@
1
+ // SEMA-GOVERNED: sema.produto.distribuicao_global.skill.intencoes
2
+ // Descrição: materializa a matriz de intenção da skill sem executar mutações.
3
+ import { versaoSemanticaValida } from "./versaoSemantica.js";
4
+ export const INTENCOES_SKILL_SEMA = [
5
+ "INFORMAR",
6
+ "INSTALAR_GLOBAL",
7
+ "ATUALIZAR_GLOBAL",
8
+ "REPARAR_GLOBAL",
9
+ "ADOTAR_WORKSPACE",
10
+ ];
11
+ function versaoGlobalValidada(versao) {
12
+ if (versao === undefined || versao === "latest") {
13
+ return { solicitada: "latest", resolverLatest: true };
14
+ }
15
+ if (versaoSemanticaValida(versao)) {
16
+ return { solicitada: versao, resolverLatest: false };
17
+ }
18
+ throw new Error("VERSAO_GLOBAL_DEVE_SER_SEMVER_EXATA_OU_LATEST");
19
+ }
20
+ const ACOES_RESOLVER_CLI_INSTALADA = [
21
+ "provar_cli_path_com_versao_e_skill",
22
+ "provar_launcher_gerenciado_com_versao_e_skill",
23
+ "preferir_launcher_gerenciado_se_path_stale_ou_sem_skill",
24
+ ];
25
+ const ACOES_PROVAR_AMBAS_CLI = [
26
+ "provar_cli_path_com_versao_e_skill",
27
+ "provar_launcher_gerenciado_com_versao_e_skill",
28
+ ];
29
+ export function planejarIntencaoSkillSema(entrada) {
30
+ if (["INSTALAR_GLOBAL", "ATUALIZAR_GLOBAL"].includes(entrada.intencao)) {
31
+ const versao = versaoGlobalValidada(entrada.versaoSolicitada);
32
+ const acoesInstalacao = versao.resolverLatest
33
+ ? [
34
+ "npm_view_version:@semacode/cli@latest",
35
+ "validar_semver_exata_resolvida",
36
+ "npm_install_global:@semacode/cli@SEMVER_EXATA_RESOLVIDA",
37
+ ]
38
+ : [`npm_install_global:@semacode/cli@${versao.solicitada}`];
39
+ return {
40
+ instalar_pacote_global: true,
41
+ sincronizar_distribuicao_se_necessario: true,
42
+ mutar_workspace: false,
43
+ bloqueado_por_autorizacao_adocao: false,
44
+ resolver_latest_para_semver_exata: versao.resolverLatest,
45
+ provar_path_e_launcher_gerenciado: true,
46
+ exigir_prova_versao: true,
47
+ exigir_status_final_ready: true,
48
+ acoes_ordenadas: [
49
+ ...acoesInstalacao,
50
+ ...ACOES_RESOLVER_CLI_INSTALADA,
51
+ "provar_versao_instalada",
52
+ "consultar_status_distribuicao",
53
+ "sincronizar_distribuicao_se_necessario",
54
+ "consultar_status_final_ready",
55
+ ],
56
+ };
57
+ }
58
+ if (entrada.intencao === "REPARAR_GLOBAL") {
59
+ const cliDisponivel = entrada.cliDisponivel;
60
+ return {
61
+ instalar_pacote_global: false,
62
+ sincronizar_distribuicao_se_necessario: cliDisponivel,
63
+ mutar_workspace: false,
64
+ bloqueado_por_autorizacao_adocao: false,
65
+ resolver_latest_para_semver_exata: false,
66
+ provar_path_e_launcher_gerenciado: true,
67
+ exigir_prova_versao: false,
68
+ exigir_status_final_ready: cliDisponivel,
69
+ acoes_ordenadas: cliDisponivel
70
+ ? [
71
+ ...ACOES_RESOLVER_CLI_INSTALADA,
72
+ "consultar_status_distribuicao",
73
+ "sincronizar_distribuicao_se_necessario",
74
+ "consultar_status_final_ready",
75
+ ]
76
+ : [
77
+ ...ACOES_PROVAR_AMBAS_CLI,
78
+ "declarar_cli_indisponivel_apos_path_e_launcher_gerenciado_invalidos",
79
+ ],
80
+ };
81
+ }
82
+ if (entrada.intencao === "ADOTAR_WORKSPACE") {
83
+ const autorizado = entrada.adocaoAutorizada;
84
+ return {
85
+ instalar_pacote_global: false,
86
+ sincronizar_distribuicao_se_necessario: false,
87
+ mutar_workspace: autorizado,
88
+ bloqueado_por_autorizacao_adocao: !autorizado,
89
+ resolver_latest_para_semver_exata: false,
90
+ provar_path_e_launcher_gerenciado: false,
91
+ exigir_prova_versao: false,
92
+ exigir_status_final_ready: false,
93
+ acoes_ordenadas: autorizado
94
+ ? [
95
+ "descobrir_explicar_flow_project_adoption",
96
+ "iniciar_template_base",
97
+ "sync_codex",
98
+ "ler_agents_e_boot",
99
+ ]
100
+ : ["pedir_autorizacao_adocao"],
101
+ };
102
+ }
103
+ return {
104
+ instalar_pacote_global: false,
105
+ sincronizar_distribuicao_se_necessario: false,
106
+ mutar_workspace: false,
107
+ bloqueado_por_autorizacao_adocao: false,
108
+ resolver_latest_para_semver_exata: false,
109
+ provar_path_e_launcher_gerenciado: false,
110
+ exigir_prova_versao: false,
111
+ exigir_status_final_ready: false,
112
+ acoes_ordenadas: ["responder_sem_mutar"],
113
+ };
114
+ }
115
+ //# sourceMappingURL=skillIntentPolicy.js.map
@@ -0,0 +1,50 @@
1
+ export declare const ESTADOS_DISTRIBUICAO_GLOBAL: readonly ["READY", "MISSING", "STALE", "BROKEN_TARGET", "PERMISSION_DENIED"];
2
+ export type EstadoDistribuicaoGlobal = typeof ESTADOS_DISTRIBUICAO_GLOBAL[number];
3
+ export interface OpcoesAmbienteDistribuicaoGlobal {
4
+ /** Plataforma usada para escolher o formato do launcher. */
5
+ plataforma?: NodeJS.Platform;
6
+ /** Home explícita. A implementação nunca consulta outro diretório quando este valor é informado. */
7
+ diretorioUsuario?: string;
8
+ /** Executável absoluto do Node que será embutido no launcher. */
9
+ executavelNode?: string;
10
+ /** Raiz absoluta do pacote @semacode/cli instalado. */
11
+ raizPacote?: string;
12
+ }
13
+ export type CodigoDiagnosticoDistribuicaoGlobal = "AMBIENTE_INVALIDO" | "CAMINHO_FORA_DA_HOME" | "COMPONENTE_NAO_DIRETORIO" | "CONTEUDO_NAO_GERENCIADO" | "DESTINO_ALTERADO" | "DESTINO_AUSENTE" | "DESTINO_DESATUALIZADO" | "DESTINO_PRONTO" | "ERRO_PERMISSAO" | "EXECUTAVEL_NODE_INVALIDO" | "LIMPEZA_PENDENTE" | "LOCK_PERDIDO" | "LOCK_TIMEOUT" | "PACOTE_INVALIDO" | "PERMISSAO_EXECUCAO_INVALIDA" | "RECIBO_INVALIDO" | "ROLLBACK_FALHOU" | "SYMLINK_OU_JUNCTION" | "TARGET_CLI_INVALIDO";
14
+ export interface ResultadoLauncherGlobal {
15
+ estado: EstadoDistribuicaoGlobal;
16
+ alterado: boolean;
17
+ destino_simbolico: "$HOME/.sema/bin/sema" | "$HOME/.sema/bin/sema.cmd";
18
+ codigo: CodigoDiagnosticoDistribuicaoGlobal;
19
+ node_absoluto: boolean;
20
+ entrypoint_absoluto: boolean;
21
+ recibo_valido: boolean;
22
+ independente_path: boolean;
23
+ fallback_simbolico: "$HOME/.sema/bin/sema-managed.ps1" | null;
24
+ }
25
+ export type IdentificadorDestinoSkillGlobal = "agents" | "claude";
26
+ export interface ResultadoDestinoSkillGlobal {
27
+ id: IdentificadorDestinoSkillGlobal;
28
+ estado: EstadoDistribuicaoGlobal;
29
+ alterado: boolean;
30
+ destino_simbolico: "$HOME/.agents/skills/sema" | "$HOME/.claude/skills/sema";
31
+ codigo: CodigoDiagnosticoDistribuicaoGlobal;
32
+ }
33
+ export interface ResultadoSkillGlobal {
34
+ estado: EstadoDistribuicaoGlobal;
35
+ alterado: boolean;
36
+ origem_simbolica: "$PACKAGE_ROOT/skills/sema";
37
+ destino_agents: EstadoDistribuicaoGlobal;
38
+ destino_claude: EstadoDistribuicaoGlobal | "NOT_DETECTED";
39
+ espelho_claude_detectado: boolean;
40
+ ownership_valido: boolean;
41
+ digest_alinhado: boolean;
42
+ cache_plugin_intocado: true;
43
+ destinos: ResultadoDestinoSkillGlobal[];
44
+ }
45
+ export interface ResultadoDistribuicaoGlobal {
46
+ estado: EstadoDistribuicaoGlobal;
47
+ alterado: boolean;
48
+ launcher: ResultadoLauncherGlobal;
49
+ skill: ResultadoSkillGlobal;
50
+ }
@@ -0,0 +1,10 @@
1
+ // SEMA-GOVERNED: sema.produto.distribuicao_global
2
+ // Descrição: define o contrato público e injetável da distribuição local global da CLI e da skill Sema.
3
+ export const ESTADOS_DISTRIBUICAO_GLOBAL = [
4
+ "READY",
5
+ "MISSING",
6
+ "STALE",
7
+ "BROKEN_TARGET",
8
+ "PERMISSION_DENIED",
9
+ ];
10
+ //# sourceMappingURL=tipos.js.map
@@ -0,0 +1,3 @@
1
+ export declare function versaoSemanticaValida(valor: unknown): valor is string;
2
+ /** Retorna -1, 0 ou 1. Build metadata não participa da precedência SemVer. */
3
+ export declare function compararVersoesSemanticas(a: string, b: string): -1 | 0 | 1;
@@ -0,0 +1,62 @@
1
+ // SEMA-GOVERNED: sema.produto.distribuicao_global
2
+ // Descrição: valida versões SemVer de pacotes e recibos sem rede ou dependência externa.
3
+ const PADRAO_SEMVER = /^(0|[1-9]\d*)\.(0|[1-9]\d*)\.(0|[1-9]\d*)(?:-((?:0|[1-9]\d*|\d*[A-Za-z-][0-9A-Za-z-]*)(?:\.(?:0|[1-9]\d*|\d*[A-Za-z-][0-9A-Za-z-]*))*))?(?:\+([0-9A-Za-z-]+(?:\.[0-9A-Za-z-]+)*))?$/u;
4
+ function analisar(valor) {
5
+ if (valor.length > 256)
6
+ return null;
7
+ const match = valor.match(PADRAO_SEMVER);
8
+ if (!match)
9
+ return null;
10
+ return {
11
+ major: BigInt(match[1] ?? "0"),
12
+ minor: BigInt(match[2] ?? "0"),
13
+ patch: BigInt(match[3] ?? "0"),
14
+ prerelease: match[4]?.split(".") ?? null,
15
+ };
16
+ }
17
+ export function versaoSemanticaValida(valor) {
18
+ return typeof valor === "string" && analisar(valor) !== null;
19
+ }
20
+ function compararIdentificador(a, b) {
21
+ const numericoA = /^\d+$/u.test(a);
22
+ const numericoB = /^\d+$/u.test(b);
23
+ if (numericoA && numericoB) {
24
+ const inteiroA = BigInt(a);
25
+ const inteiroB = BigInt(b);
26
+ return inteiroA === inteiroB ? 0 : inteiroA > inteiroB ? 1 : -1;
27
+ }
28
+ if (numericoA !== numericoB)
29
+ return numericoA ? -1 : 1;
30
+ return a === b ? 0 : a > b ? 1 : -1;
31
+ }
32
+ /** Retorna -1, 0 ou 1. Build metadata não participa da precedência SemVer. */
33
+ export function compararVersoesSemanticas(a, b) {
34
+ const versaoA = analisar(a);
35
+ const versaoB = analisar(b);
36
+ if (!versaoA || !versaoB)
37
+ throw new Error("VERSAO_SEMANTICA_INVALIDA");
38
+ for (const chave of ["major", "minor", "patch"]) {
39
+ if (versaoA[chave] !== versaoB[chave])
40
+ return versaoA[chave] > versaoB[chave] ? 1 : -1;
41
+ }
42
+ if (versaoA.prerelease === null || versaoB.prerelease === null) {
43
+ if (versaoA.prerelease === versaoB.prerelease)
44
+ return 0;
45
+ return versaoA.prerelease === null ? 1 : -1;
46
+ }
47
+ const limite = Math.max(versaoA.prerelease.length, versaoB.prerelease.length);
48
+ for (let indice = 0; indice < limite; indice += 1) {
49
+ const itemA = versaoA.prerelease[indice];
50
+ const itemB = versaoB.prerelease[indice];
51
+ if (itemA === undefined || itemB === undefined) {
52
+ if (itemA === itemB)
53
+ return 0;
54
+ return itemA === undefined ? -1 : 1;
55
+ }
56
+ const comparacao = compararIdentificador(itemA, itemB);
57
+ if (comparacao !== 0)
58
+ return comparacao;
59
+ }
60
+ return 0;
61
+ }
62
+ //# sourceMappingURL=versaoSemantica.js.map
@@ -1,5 +1,8 @@
1
1
  import type { EngineBanco, NivelConfiancaSemantica, NivelRiscoSemantico, TipoRecursoPersistencia } from "@sema/nucleo";
2
2
  import type { ContextoProjetoCarregado } from "./projeto.js";
3
+ import type { MetricasCatalogoDrift, ObservadorOperacaoDrift } from "./driftCatalogo.js";
4
+ import type { CoberturaEscopoDrift, EstrategiaEscopoDrift } from "./driftEscopo.js";
5
+ import type { AvisoModoCacheDrift, ModoCacheDrift } from "./driftCacheModes.js";
3
6
  export type OrigemCodigoDrift = "ts" | "js" | "py" | "dart" | "lua" | "cs" | "java" | "go" | "rust" | "cpp" | "php";
4
7
  export type OrigemSimboloDrift = OrigemCodigoDrift | "sql";
5
8
  export interface SimboloResolvido {
@@ -31,9 +34,12 @@ export interface OpcoesDriftLegado {
31
34
  escopo?: EscopoDriftReal;
32
35
  ignorarWorktrees?: boolean;
33
36
  ignorarConsumidoresLaterais?: boolean;
37
+ modoCache?: ModoCacheDrift;
38
+ avisosModoCache?: readonly AvisoModoCacheDrift[];
39
+ observador?: ObservadorOperacaoDrift | undefined;
34
40
  }
35
41
  export interface DiagnosticoDrift {
36
- tipo: "impl_quebrado" | "task_sem_impl" | "rota_divergente" | "recurso_divergente" | "vinculo_quebrado" | "seguranca_frouxa" | "pontuacao_semantica_insuficiente" | "contrato_monolitico" | "codigo_monolitico" | "codigo_governado_sem_cabecalho";
42
+ tipo: "impl_quebrado" | "task_sem_impl" | "rota_divergente" | "recurso_divergente" | "vinculo_quebrado" | "seguranca_frouxa" | "pontuacao_semantica_insuficiente" | "contrato_monolitico" | "codigo_monolitico" | "codigo_governado_sem_cabecalho" | "escopo_estreito_sem_vinculos" | "escopo_estreito_ambiguo";
37
43
  modulo: string;
38
44
  task?: string;
39
45
  route?: string;
@@ -159,6 +165,30 @@ export interface ConfiguracaoEscopoDriftAplicada {
159
165
  ignorarWorktrees: boolean;
160
166
  ignorarConsumidoresLaterais: boolean;
161
167
  termosEscopo: string[];
168
+ estrategia?: EstrategiaEscopoDrift;
169
+ cobertura?: CoberturaEscopoDrift;
170
+ arquivosPlanejados?: string[];
171
+ arquivosDeclarados?: string[];
172
+ arquivosInferidos?: string[];
173
+ arquivosAusentes?: string[];
174
+ bloqueios?: string[];
175
+ catalogo?: MetricasCatalogoDrift;
176
+ cache?: EstadoCacheDriftAplicado;
177
+ }
178
+ export interface MetricasCacheDriftAplicado {
179
+ hits: number;
180
+ misses: number;
181
+ corruptos: number;
182
+ gravacoes: number;
183
+ errosGravacao: number;
184
+ }
185
+ export interface EstadoCacheDriftAplicado {
186
+ modo: ModoCacheDrift;
187
+ origem: "cache" | "calculado" | "indisponivel" | "nao_aplicavel";
188
+ schema: string;
189
+ workspaceId?: string;
190
+ metricas: MetricasCacheDriftAplicado;
191
+ avisos: readonly AvisoModoCacheDrift[];
162
192
  }
163
193
  export interface RegistroImpactoSemanticoArquivo {
164
194
  arquivo: string;
@@ -251,7 +281,9 @@ export declare function obterDiretoriosIgnoradosAtivos(): Set<string>;
251
281
  export declare function definirDiretoriosIgnoradosAtivos(diretorios: Set<string>): void;
252
282
  export declare function normalizarFragmentoArquivo(valor: string): string;
253
283
  export declare function normalizarEscopoDrift(valor?: string): EscopoDriftReal;
254
- export declare function resolverOpcoesDrift(opcoes?: OpcoesDriftLegado): Required<OpcoesDriftLegado>;
284
+ export declare function resolverOpcoesDrift(opcoes?: OpcoesDriftLegado): Omit<Required<OpcoesDriftLegado>, "observador"> & {
285
+ observador: ObservadorOperacaoDrift | undefined;
286
+ };
255
287
  export declare function resolverDiretoriosIgnoradosAtivos(opcoes?: OpcoesDriftLegado): Set<string>;
256
288
  export declare function quebrarTermosEscopo(valor: string): string[];
257
289
  export declare function quebrarTermosModuloEscopo(nomeModulo: string): string[];
@@ -91,6 +91,9 @@ export function resolverOpcoesDrift(opcoes) {
91
91
  escopo: normalizarEscopoDrift(opcoes?.escopo),
92
92
  ignorarWorktrees: opcoes?.ignorarWorktrees !== false,
93
93
  ignorarConsumidoresLaterais: opcoes?.ignorarConsumidoresLaterais !== false,
94
+ modoCache: opcoes?.modoCache ?? "none",
95
+ avisosModoCache: opcoes?.avisosModoCache ?? [],
96
+ observador: opcoes?.observador,
94
97
  };
95
98
  }
96
99
  export function resolverDiretoriosIgnoradosAtivos(opcoes) {
@@ -1,7 +1,17 @@
1
1
  import ts from "typescript";
2
2
  import type { IrModulo, IrSuperficie, IrTask, IrVinculo, NivelConfiancaSemantica, NivelRiscoSemantico } from "@sema/nucleo";
3
3
  import { ResultadoDrift, SimboloResolvido } from "./drift.part01.js";
4
+ import type { OrigemCodigoDrift } from "./drift.part01.js";
4
5
  import { type PoliticaPontuacaoSemantica } from "./driftScore.js";
6
+ export type EventoLeituraCompartilhadaDrift = "extractor.run" | "ast.create";
7
+ export interface AdaptadorLeituraCompartilhadaDrift {
8
+ listarPorRaiz(raiz: string, extensoes: readonly string[]): readonly string[] | Promise<readonly string[]>;
9
+ lerTexto(arquivo: string): Promise<string>;
10
+ emitir?(tipo: EventoLeituraCompartilhadaDrift, arquivo?: string): void;
11
+ }
12
+ export declare function chaveCaminhoCanonicoDrift(caminho: string): string;
13
+ export declare function deduplicarRaizesSobrepostasDrift(diretorios: readonly string[]): string[];
14
+ export declare function encontrarCandidatosFisicosImplementacaoDrift(simbolos: readonly SimboloResolvido[], origem: OrigemCodigoDrift, caminhoDeclarado: string): SimboloResolvido[];
5
15
  export declare function resolverArquivoOuSimboloAncora(vinculos: IrVinculo[], simbolos: SimboloResolvido[], mapaImpl: Map<string, SimboloResolvido>, arquivos: string[]): {
6
16
  arquivo?: string;
7
17
  simbolo?: string;
@@ -37,9 +47,9 @@ export declare function lerDecorator(node: ts.Node, nomes: string[]): {
37
47
  argumentos: ts.NodeArray<ts.Expression>;
38
48
  } | undefined;
39
49
  export declare function juntarCaminhoHttp(base: string | undefined, sufixo: string | undefined): string;
40
- export declare function listarArquivosRecursivos(diretorio: string, extensoes: string[]): Promise<string[]>;
50
+ export declare function listarArquivosRecursivos(diretorio: string, extensoes: string[], adaptadorLeitura?: AdaptadorLeituraCompartilhadaDrift): Promise<string[]>;
41
51
  export declare const EXTENSOES_ARQUIVOS_RASTREAVEIS_DRIFT: string[];
42
- export declare function indexarArquivosRastreaveis(diretorios: string[]): Promise<string[]>;
52
+ export declare function indexarArquivosRastreaveis(diretorios: string[], adaptadorLeitura?: AdaptadorLeituraCompartilhadaDrift): Promise<string[]>;
43
53
  export declare function caminhosSimbolicos(baseDiretorio: string, arquivo: string): string[];
44
54
  export declare function registrarSimboloTypeScript(simbolos: Map<string, SimboloResolvido>, basesSimbolicas: string[], arquivo: string, nome: string, nomeClasse?: string, origem?: "ts" | "js"): void;
45
55
  export declare function desembrulharExpressaoTypeScript(expr: ts.Expression): ts.Expression;
@@ -1,11 +1,71 @@
1
- // SEMA-GOVERNED: sema.governanca_ia_contexto
2
- // Descricao: CLI particionada; consulte contratos/sema/governanca_ia_contexto.sema antes de editar.
1
+ // SEMA-GOVERNED: sema.produto.governanca_ia.drift
2
+ // Descricao: compartilha primitivas de indexacao e leitura do drift entre linguagens.
3
+ import { AsyncLocalStorage } from "node:async_hooks";
3
4
  import { readdir } from "node:fs/promises";
4
5
  import path from "node:path";
5
6
  import ts from "typescript";
6
7
  import { diretoriosIgnoradosAtivos } from "./drift.part01.js";
7
8
  import { escolherArquivoPorVinculo, escolherSimboloPorVinculo } from "./drift.part03.js";
8
9
  import { avaliarPontuacaoSemantica, resolverPoliticaPontuacaoSemantica } from "./driftScore.js";
10
+ export function chaveCaminhoCanonicoDrift(caminho) {
11
+ const resolvido = path.resolve(caminho);
12
+ return process.platform === "win32" ? resolvido.toLowerCase() : resolvido;
13
+ }
14
+ function caminhoEstaDentroDaRaizDrift(raiz, candidato) {
15
+ const relativo = path.relative(path.resolve(raiz), path.resolve(candidato));
16
+ return relativo === "" || (!relativo.startsWith("..") && !path.isAbsolute(relativo));
17
+ }
18
+ const contextoRaizesSobrepostasDrift = new AsyncLocalStorage();
19
+ export function deduplicarRaizesSobrepostasDrift(diretorios) {
20
+ const unicas = new Map();
21
+ for (const diretorio of diretorios) {
22
+ const chave = chaveCaminhoCanonicoDrift(diretorio);
23
+ if (!unicas.has(chave)) {
24
+ unicas.set(chave, diretorio);
25
+ }
26
+ }
27
+ const candidatas = [...unicas.values()];
28
+ const raizesFisicas = candidatas.filter((candidata, indice) => !candidatas.some((outra, outroIndice) => indice !== outroIndice
29
+ && chaveCaminhoCanonicoDrift(candidata) !== chaveCaminhoCanonicoDrift(outra)
30
+ && caminhoEstaDentroDaRaizDrift(outra, candidata)));
31
+ const aliasesPorRaiz = new Map();
32
+ for (const raizFisica of raizesFisicas) {
33
+ aliasesPorRaiz.set(chaveCaminhoCanonicoDrift(raizFisica), candidatas.filter((candidata) => chaveCaminhoCanonicoDrift(candidata) !== chaveCaminhoCanonicoDrift(raizFisica)
34
+ && caminhoEstaDentroDaRaizDrift(raizFisica, candidata)));
35
+ }
36
+ contextoRaizesSobrepostasDrift.enterWith(aliasesPorRaiz);
37
+ return raizesFisicas;
38
+ }
39
+ export function encontrarCandidatosFisicosImplementacaoDrift(simbolos, origem, caminhoDeclarado) {
40
+ const caminhoNormalizado = caminhoDeclarado.trim().toLowerCase();
41
+ if (!caminhoNormalizado) {
42
+ return [];
43
+ }
44
+ const mesmaFamilia = (candidato) => candidato.origem === origem
45
+ || ((origem === "ts" || origem === "js") && (candidato.origem === "ts" || candidato.origem === "js"));
46
+ const porArquivo = new Map();
47
+ for (const candidato of simbolos) {
48
+ const caminhoCandidato = candidato.caminho.toLowerCase();
49
+ if (!mesmaFamilia(candidato)
50
+ || (caminhoCandidato !== caminhoNormalizado && !caminhoCandidato.endsWith(`.${caminhoNormalizado}`))) {
51
+ continue;
52
+ }
53
+ const chaveArquivo = chaveCaminhoCanonicoDrift(candidato.arquivo);
54
+ const anterior = porArquivo.get(chaveArquivo);
55
+ const candidatoExato = caminhoCandidato === caminhoNormalizado;
56
+ const anteriorExato = anterior?.caminho.toLowerCase() === caminhoNormalizado;
57
+ if (!anterior
58
+ || (candidatoExato && !anteriorExato)
59
+ || (candidatoExato === anteriorExato
60
+ && (candidato.caminho.length < anterior.caminho.length
61
+ || (candidato.caminho.length === anterior.caminho.length
62
+ && candidato.caminho.localeCompare(anterior.caminho, "pt-BR") < 0)))) {
63
+ porArquivo.set(chaveArquivo, candidato);
64
+ }
65
+ }
66
+ return [...porArquivo.values()].sort((a, b) => a.arquivo.localeCompare(b.arquivo, "pt-BR")
67
+ || a.caminho.localeCompare(b.caminho, "pt-BR"));
68
+ }
9
69
  export function resolverArquivoOuSimboloAncora(vinculos, simbolos, mapaImpl, arquivos) {
10
70
  for (const vinculo of vinculos) {
11
71
  if (vinculo.simbolo) {
@@ -258,7 +318,12 @@ export function juntarCaminhoHttp(base, sufixo) {
258
318
  const caminho = `/${partes.join("/")}`.replace(/\/+/g, "/");
259
319
  return caminho === "//" ? "/" : caminho;
260
320
  }
261
- export async function listarArquivosRecursivos(diretorio, extensoes) {
321
+ export async function listarArquivosRecursivos(diretorio, extensoes, adaptadorLeitura) {
322
+ if (adaptadorLeitura) {
323
+ const arquivos = await adaptadorLeitura.listarPorRaiz(diretorio, extensoes);
324
+ return [...new Map(arquivos.map((arquivo) => [chaveCaminhoCanonicoDrift(arquivo), arquivo])).values()]
325
+ .sort((a, b) => a.localeCompare(b, "pt-BR"));
326
+ }
262
327
  let entradas;
263
328
  try {
264
329
  entradas = await readdir(diretorio, { withFileTypes: true, encoding: "utf8" });
@@ -291,16 +356,19 @@ export const EXTENSOES_ARQUIVOS_RASTREAVEIS_DRIFT = [
291
356
  ".yml", ".yaml", ".toml", ".xml", ".html", ".htm", ".css",
292
357
  ".Caddyfile", ".caddyfile",
293
358
  ];
294
- export async function indexarArquivosRastreaveis(diretorios) {
295
- const arquivos = new Set();
296
- for (const diretorio of diretorios) {
297
- for (const arquivo of await listarArquivosRecursivos(diretorio, EXTENSOES_ARQUIVOS_RASTREAVEIS_DRIFT)) {
298
- arquivos.add(arquivo);
359
+ export async function indexarArquivosRastreaveis(diretorios, adaptadorLeitura) {
360
+ const arquivos = new Map();
361
+ for (const diretorio of deduplicarRaizesSobrepostasDrift(diretorios)) {
362
+ for (const arquivo of await listarArquivosRecursivos(diretorio, EXTENSOES_ARQUIVOS_RASTREAVEIS_DRIFT, adaptadorLeitura)) {
363
+ const chave = chaveCaminhoCanonicoDrift(arquivo);
364
+ if (!arquivos.has(chave)) {
365
+ arquivos.set(chave, arquivo);
366
+ }
299
367
  }
300
368
  }
301
- return [...arquivos].sort((a, b) => a.localeCompare(b, "pt-BR"));
369
+ return [...arquivos.values()].sort((a, b) => a.localeCompare(b, "pt-BR"));
302
370
  }
303
- export function caminhosSimbolicos(baseDiretorio, arquivo) {
371
+ function caminhosSimbolicosParaBaseDrift(baseDiretorio, arquivo) {
304
372
  const relativo = path.relative(baseDiretorio, arquivo).replace(/\.[^.]+$/, "");
305
373
  const semPrefixo = relativo
306
374
  .split(path.sep)
@@ -309,13 +377,19 @@ export function caminhosSimbolicos(baseDiretorio, arquivo) {
309
377
  .join(".");
310
378
  const prefixo = paraIdentificadorModulo(path.basename(baseDiretorio));
311
379
  const comPrefixo = prefixo ? [prefixo, semPrefixo].filter(Boolean).join(".") : semPrefixo;
380
+ const aliasesBase = [semPrefixo, comPrefixo].filter(Boolean);
312
381
  const aliasesIndex = path.basename(relativo) === "index"
313
- ? [
314
- semPrefixo.replace(/(?:^|\.)index$/, ""),
315
- comPrefixo.replace(/(?:^|\.)index$/, ""),
316
- ]
382
+ ? aliasesBase.map((alias) => alias.replace(/(?:^|\.)index$/, ""))
317
383
  : [];
318
- return [...new Set([semPrefixo, comPrefixo, ...aliasesIndex].filter(Boolean))];
384
+ return [...new Set([...aliasesBase, ...aliasesIndex].filter(Boolean))];
385
+ }
386
+ export function caminhosSimbolicos(baseDiretorio, arquivo) {
387
+ const aliasesConfigurados = contextoRaizesSobrepostasDrift.getStore()
388
+ ?.get(chaveCaminhoCanonicoDrift(baseDiretorio))
389
+ ?.filter((raiz) => caminhoEstaDentroDaRaizDrift(raiz, arquivo))
390
+ ?? [];
391
+ return [...new Set([baseDiretorio, ...aliasesConfigurados]
392
+ .flatMap((base) => caminhosSimbolicosParaBaseDrift(base, arquivo)))];
319
393
  }
320
394
  export function registrarSimboloTypeScript(simbolos, basesSimbolicas, arquivo, nome, nomeClasse, origem = "ts") {
321
395
  for (const baseSimbolica of basesSimbolicas) {
@@ -1,5 +1,6 @@
1
1
  import ts from "typescript";
2
2
  import { RegistroConsumerSurfaceDrift, SimboloResolvido } from "./drift.part01.js";
3
+ import { type AdaptadorLeituraCompartilhadaDrift } from "./drift.part04.js";
3
4
  export declare function registrarMetodoTypeScriptProtoOuObjeto(simbolos: Map<string, SimboloResolvido>, basesSimbolicas: string[], arquivo: string, nomeMetodo: string, nomeClasse?: string, origem?: "ts" | "js"): void;
4
5
  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
6
  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;
@@ -43,5 +44,5 @@ export declare function extrairRotasReactViteConsumer(relacaoArquivo: string, co
43
44
  export declare function normalizarRotaDeclaradaFlutter(caminhoCru: string): string;
44
45
  export declare function extrairRotasFlutterConsumer(relacaoArquivo: string, codigo: string): RotaFlutterConsumerDrift[];
45
46
  export declare function extrairRotasAngularConsumerDiretas(relacaoArquivo: string, codigo: string, prefixo?: string): RotaAngularConsumerDrift[];
46
- export declare function extrairRotasAngularConsumer(diretorioBase: string, relacaoArquivo: string, prefixo?: string, visitados?: Set<string>): Promise<RotaAngularConsumerDrift[]>;
47
+ export declare function extrairRotasAngularConsumer(diretorioBase: string, relacaoArquivo: string, prefixo?: string, visitados?: Set<string>, adaptadorLeitura?: AdaptadorLeituraCompartilhadaDrift): Promise<RotaAngularConsumerDrift[]>;
47
48
  export declare function simboloEhBridgeConsumer(caminho: string, arquivo: string): boolean;
@@ -1,9 +1,9 @@
1
- // SEMA-GOVERNED: sema.governanca_ia_contexto
2
- // Descricao: CLI particionada; consulte contratos/sema/governanca_ia_contexto.sema antes de editar.
1
+ // SEMA-GOVERNED: sema.produto.governanca_ia.drift
2
+ // Descricao: extrai rotas e superficies consumidoras dentro do escopo fisico planejado.
3
3
  import { readFile } from "node:fs/promises";
4
4
  import path from "node:path";
5
5
  import ts from "typescript";
6
- import { desembrulharExpressaoTypeScript, extrairNomePropriedadeTypeScript, registrarSimboloTypeScript } from "./drift.part04.js";
6
+ import { desembrulharExpressaoTypeScript, extrairNomePropriedadeTypeScript, registrarSimboloTypeScript, } from "./drift.part04.js";
7
7
  export function registrarMetodoTypeScriptProtoOuObjeto(simbolos, basesSimbolicas, arquivo, nomeMetodo, nomeClasse, origem = "ts") {
8
8
  if (!nomeMetodo) {
9
9
  return;
@@ -318,7 +318,7 @@ export function extrairRotasAngularConsumerDiretas(relacaoArquivo, codigo, prefi
318
318
  }
319
319
  return rotas;
320
320
  }
321
- export async function extrairRotasAngularConsumer(diretorioBase, relacaoArquivo, prefixo = "/", visitados = new Set()) {
321
+ export async function extrairRotasAngularConsumer(diretorioBase, relacaoArquivo, prefixo = "/", visitados = new Set(), adaptadorLeitura) {
322
322
  const relacaoNormalizada = normalizarRelacaoConsumer(relacaoArquivo);
323
323
  if (visitados.has(relacaoNormalizada)) {
324
324
  return [];
@@ -326,7 +326,10 @@ export async function extrairRotasAngularConsumer(diretorioBase, relacaoArquivo,
326
326
  visitados.add(relacaoNormalizada);
327
327
  let codigo = "";
328
328
  try {
329
- codigo = await readFile(path.join(diretorioBase, relacaoNormalizada), "utf8");
329
+ const arquivo = path.join(diretorioBase, relacaoNormalizada);
330
+ codigo = adaptadorLeitura
331
+ ? await adaptadorLeitura.lerTexto(arquivo)
332
+ : await readFile(arquivo, "utf8");
330
333
  }
331
334
  catch {
332
335
  return [];
@@ -337,7 +340,7 @@ export async function extrairRotasAngularConsumer(diretorioBase, relacaoArquivo,
337
340
  if (!rota.arquivoRotasFilhas) {
338
341
  continue;
339
342
  }
340
- filhas.push(...await extrairRotasAngularConsumer(diretorioBase, rota.arquivoRotasFilhas, rota.rota, visitados));
343
+ filhas.push(...await extrairRotasAngularConsumer(diretorioBase, rota.arquivoRotasFilhas, rota.rota, visitados, adaptadorLeitura));
341
344
  }
342
345
  return [...rotas, ...filhas];
343
346
  }
@@ -1,8 +1,9 @@
1
1
  import type { FonteLegado } from "./tipos.js";
2
2
  import { ConsumerFramework, RecursoResolvido, RegistroConsumerBridgeDrift, RegistroConsumerSurfaceDrift, RotaResolvida, SimboloResolvido } from "./drift.part01.js";
3
+ import { type AdaptadorLeituraCompartilhadaDrift } from "./drift.part04.js";
3
4
  export declare function inferirConsumerFrameworkPrincipal(fontesLegado: FonteLegado[], consumerSurfaces: RegistroConsumerSurfaceDrift[], consumerBridges: RegistroConsumerBridgeDrift[]): ConsumerFramework | null;
4
5
  export declare function extrairColecoesFirebase(arquivo: string, codigo: string): RecursoResolvido[];
5
- export declare function indexarTypeScript(diretorios: string[]): Promise<{
6
+ export declare function indexarTypeScript(diretorios: string[], adaptadorLeitura?: AdaptadorLeituraCompartilhadaDrift): Promise<{
6
7
  simbolos: SimboloResolvido[];
7
8
  rotas: RotaResolvida[];
8
9
  recursos: RecursoResolvido[];