@semacode/cli 2.3.1 → 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 (250) hide show
  1. package/README.md +265 -217
  2. package/dist/agentContextPack.js +14 -10
  3. package/dist/agentEntryPoints.d.ts +5 -0
  4. package/dist/agentEntryPoints.js +567 -557
  5. package/dist/angular-consumer-standalone.js +1 -1
  6. package/dist/bin.d.ts +6 -0
  7. package/dist/bin.js +130 -0
  8. package/dist/cliArgs.js +4 -4
  9. package/dist/cliControlError.d.ts +12 -0
  10. package/dist/cliControlError.js +47 -0
  11. package/dist/cliGrammar.d.ts +11 -0
  12. package/dist/cliGrammar.js +551 -0
  13. package/dist/cliHelp.d.ts +13 -0
  14. package/dist/cliHelp.js +19 -0
  15. package/dist/cliHelpTexto.d.ts +3 -0
  16. package/dist/cliHelpTexto.js +168 -0
  17. package/dist/cliRuntime.d.ts +2 -0
  18. package/dist/cliRuntime.js +31 -0
  19. package/dist/comandos.js +9 -22
  20. package/dist/contexto.js +5 -5
  21. package/dist/dev/index.d.ts +1 -0
  22. package/dist/dev/index.js +51 -9
  23. package/dist/discovery/catalog.js +3 -3
  24. package/dist/distribuicao/filesystemGlobal.d.ts +63 -0
  25. package/dist/distribuicao/filesystemGlobal.js +701 -0
  26. package/dist/distribuicao/index.d.ts +7 -0
  27. package/dist/distribuicao/index.js +227 -0
  28. package/dist/distribuicao/launcherGlobal.d.ts +53 -0
  29. package/dist/distribuicao/launcherGlobal.js +643 -0
  30. package/dist/distribuicao/launcherWindows.d.ts +28 -0
  31. package/dist/distribuicao/launcherWindows.js +326 -0
  32. package/dist/distribuicao/lockContextGlobal.d.ts +10 -0
  33. package/dist/distribuicao/lockContextGlobal.js +17 -0
  34. package/dist/distribuicao/lockGlobal.d.ts +6 -0
  35. package/dist/distribuicao/lockGlobal.js +520 -0
  36. package/dist/distribuicao/skillGlobal.d.ts +48 -0
  37. package/dist/distribuicao/skillGlobal.js +652 -0
  38. package/dist/distribuicao/skillIntentPolicy.d.ts +21 -0
  39. package/dist/distribuicao/skillIntentPolicy.js +115 -0
  40. package/dist/distribuicao/tipos.d.ts +50 -0
  41. package/dist/distribuicao/tipos.js +10 -0
  42. package/dist/distribuicao/versaoSemantica.d.ts +3 -0
  43. package/dist/distribuicao/versaoSemantica.js +62 -0
  44. package/dist/drift.part01.d.ts +26 -24
  45. package/dist/drift.part01.js +2 -1
  46. package/dist/drift.part04.d.ts +12 -3
  47. package/dist/drift.part04.js +88 -17
  48. package/dist/drift.part05.d.ts +2 -2
  49. package/dist/drift.part05.js +8 -6
  50. package/dist/drift.part06.d.ts +2 -2
  51. package/dist/drift.part06.js +113 -26
  52. package/dist/drift.part07.d.ts +11 -11
  53. package/dist/drift.part07.js +261 -265
  54. package/dist/drift.part08.d.ts +2 -2
  55. package/dist/drift.part08.js +35 -26
  56. package/dist/drift.part11.js +238 -56
  57. package/dist/drift.part12.d.ts +1 -1
  58. package/dist/drift.part12.js +193 -21
  59. package/dist/drift.part13.d.ts +20 -39
  60. package/dist/drift.part13.js +601 -647
  61. package/dist/drift.part14.js +21 -7
  62. package/dist/driftCacheCas.d.ts +43 -0
  63. package/dist/driftCacheCas.js +351 -0
  64. package/dist/driftCacheFilesystem.d.ts +64 -0
  65. package/dist/driftCacheFilesystem.js +313 -0
  66. package/dist/driftCacheModes.d.ts +38 -0
  67. package/dist/driftCacheModes.js +147 -0
  68. package/dist/driftCacheStore.d.ts +80 -0
  69. package/dist/driftCacheStore.js +603 -0
  70. package/dist/driftCatalogo.d.ts +2 -28
  71. package/dist/driftCatalogo.js +143 -284
  72. package/dist/driftEscopo.d.ts +1 -3
  73. package/dist/driftEscopo.js +235 -151
  74. package/dist/driftEscopoReferencias.d.ts +5 -1
  75. package/dist/driftEscopoReferencias.js +375 -28
  76. package/dist/driftOrcamento.d.ts +0 -6
  77. package/dist/driftOrcamento.js +2 -1
  78. package/dist/execucoesExternas.js +19 -5
  79. package/dist/geracaoCore.js +4 -6
  80. package/dist/iaPrompts.d.ts +3 -3
  81. package/dist/iaPrompts.js +312 -313
  82. package/dist/index.d.ts +4 -1
  83. package/dist/index.js +6 -25
  84. package/dist/index.part01.d.ts +20 -28
  85. package/dist/index.part01.js +16 -237
  86. package/dist/index.part02.js +36 -22
  87. package/dist/index.part03.d.ts +24 -2
  88. package/dist/index.part03.js +83 -19
  89. package/dist/index.part04.d.ts +10 -2
  90. package/dist/index.part04.js +142 -120
  91. package/dist/index.part05.js +80 -78
  92. package/dist/index.part06.js +34 -17
  93. package/dist/index.part07.js +7 -3
  94. package/dist/index.part08.d.ts +1 -1
  95. package/dist/index.part08.js +22 -27
  96. package/dist/initCommand.js +5 -1
  97. package/dist/initTemplatesBase.js +81 -79
  98. package/dist/pipelineConteudo/command.d.ts +1 -0
  99. package/dist/pipelineConteudo/command.js +9 -2
  100. package/dist/pipelineConteudo/help.d.ts +2 -0
  101. package/dist/pipelineConteudo/help.js +33 -0
  102. package/dist/profileAuthorCommand.js +3 -7
  103. package/dist/profileCommand.js +3 -7
  104. package/dist/projetoCarregar.js +35 -17
  105. package/dist/projetoCatalogo.d.ts +1 -0
  106. package/dist/projetoCatalogo.js +64 -25
  107. package/dist/projetoOrigens.d.ts +2 -0
  108. package/dist/projetoOrigens.js +65 -9
  109. package/dist/projetoTipos.d.ts +1 -0
  110. package/dist/resultadoCli.d.ts +20 -0
  111. package/dist/resultadoCli.js +57 -0
  112. package/dist/saidaCli.d.ts +35 -0
  113. package/dist/saidaCli.js +118 -0
  114. package/dist/sistemasInterativos/acceptanceEvidence.d.ts +22 -0
  115. package/dist/sistemasInterativos/acceptanceEvidence.js +345 -0
  116. package/dist/sistemasInterativos/engineObservation.d.ts +12 -0
  117. package/dist/sistemasInterativos/engineObservation.js +438 -0
  118. package/dist/sistemasInterativos/jobOrchestration.d.ts +2 -0
  119. package/dist/sistemasInterativos/jobOrchestration.js +204 -0
  120. package/dist/sistemasInterativos/operationPrimitives.d.ts +21 -0
  121. package/dist/sistemasInterativos/operationPrimitives.js +194 -0
  122. package/dist/sistemasInterativos/operations.d.ts +4 -39
  123. package/dist/sistemasInterativos/operations.js +5 -1164
  124. package/dist/skillCommand.d.ts +5 -0
  125. package/dist/skillCommand.js +88 -0
  126. package/docs/README.md +34 -30
  127. package/docs/ai-integration.md +25 -12
  128. package/docs/ai-onboarding.md +37 -18
  129. package/docs/ai-workflow.md +9 -7
  130. package/docs/cli.md +125 -7
  131. package/docs/commands.md +41 -20
  132. package/docs/deploy.md +21 -8
  133. package/docs/descoberta-capacidades.md +106 -106
  134. package/docs/documentation.md +49 -39
  135. package/docs/drift-cache.md +108 -0
  136. package/docs/getting-started.md +43 -18
  137. package/docs/pipeline-conteudo.md +246 -246
  138. package/docs/profiles.md +54 -54
  139. package/docs/repositories.md +19 -2
  140. package/docs/rollback.md +15 -8
  141. package/docs/security.md +25 -3
  142. package/docs/sistemas-interativos.md +379 -374
  143. package/docs/testing.md +139 -40
  144. package/exemplos/pipeline-conteudo/README.md +44 -44
  145. package/exemplos/pipeline-conteudo/alvos.json +23 -23
  146. package/exemplos/pipeline-conteudo/definicao.json +136 -136
  147. package/exemplos/profile_simulation.sema +211 -211
  148. package/exemplos/sistemas-interativos/README.md +100 -100
  149. package/exemplos/sistemas-interativos/advanced/acceptance-context-evaluate-valid.json +5 -5
  150. package/exemplos/sistemas-interativos/advanced/acceptance-lock-valid.json +16 -16
  151. package/exemplos/sistemas-interativos/advanced/asset-provenance-valid.json +32 -32
  152. package/exemplos/sistemas-interativos/advanced/autonomy-repair-valid.json +93 -93
  153. package/exemplos/sistemas-interativos/advanced/control-run-definition-valid.json +78 -78
  154. package/exemplos/sistemas-interativos/advanced/control-run-valid.json +27 -27
  155. package/exemplos/sistemas-interativos/advanced/distributed-workers-valid.json +79 -79
  156. package/exemplos/sistemas-interativos/advanced/editor-state-valid.json +42 -42
  157. package/exemplos/sistemas-interativos/advanced/engine-snapshot-after-valid.json +32 -32
  158. package/exemplos/sistemas-interativos/advanced/engine-snapshot-before-valid.json +23 -23
  159. package/exemplos/sistemas-interativos/advanced/job-orchestration-valid.json +39 -39
  160. package/exemplos/sistemas-interativos/advanced/multimodal-evidence-valid.json +46 -46
  161. package/exemplos/sistemas-interativos/advanced/multiplayer-authority-valid.json +39 -39
  162. package/exemplos/sistemas-interativos/advanced/playtest-fuzz-valid.json +37 -37
  163. package/exemplos/sistemas-interativos/advanced/portability-valid.json +104 -104
  164. package/exemplos/sistemas-interativos/advanced/temporal-evidence-valid.json +27 -27
  165. package/exemplos/sistemas-interativos/advanced/temporal-valid.json +118 -118
  166. package/exemplos/sistemas-interativos/experience-ir-valid.json +459 -459
  167. package/exemplos/sistemas-interativos/game-2d.json +83 -83
  168. package/exemplos/sistemas-interativos/game-3d-human.json +81 -81
  169. package/exemplos/sistemas-interativos/game-pixel-16-bit.json +97 -97
  170. package/exemplos/sistemas-interativos/game-pixel-8-bit.json +94 -94
  171. package/exemplos/sistemas-interativos/game-xr-human.json +80 -80
  172. package/exemplos/sistemas-interativos/hybrid-2-5d.json +108 -108
  173. package/exemplos/sistemas-interativos/protocol-mutating-rollback-valid.json +75 -75
  174. package/exemplos/sistemas-interativos/protocol-read-only-valid.json +58 -58
  175. package/exemplos/sistemas-interativos/simulation-2d-controlled.json +97 -97
  176. package/exemplos/sistemas-interativos/simulation-3d-calibrated-autonomous.json +141 -141
  177. package/exemplos/sistemas-interativos/simulation-headless-autonomous-batch.json +112 -112
  178. package/exemplos/sistemas-interativos/simulation-pixel-16-bit.json +103 -103
  179. package/exemplos/sistemas-interativos/simulation-text-controlled.json +95 -95
  180. package/node_modules/@sema/gerador-cpp/package.json +1 -1
  181. package/node_modules/@sema/gerador-dotnet/package.json +1 -1
  182. package/node_modules/@sema/gerador-lua/dist/index.js +51 -51
  183. package/node_modules/@sema/gerador-php/dist/index.js +113 -113
  184. package/node_modules/@sema/nucleo/dist/semantico/analisador.d.ts +1 -0
  185. package/node_modules/@sema/nucleo/dist/semantico/analisador.js +1 -0
  186. package/package.json +9 -4
  187. package/scripts/postinstall.mjs +148 -0
  188. package/skills/sema/SKILL.md +199 -0
  189. package/skills/sema/agents/openai.yaml +4 -0
  190. package/dist/driftCache.d.ts +0 -49
  191. package/dist/driftCache.js +0 -311
  192. package/dist/driftCacheIncremental.d.ts +0 -98
  193. package/dist/driftCacheIncremental.js +0 -596
  194. package/dist/driftCatalogoPersistente.d.ts +0 -8
  195. package/dist/driftCatalogoPersistente.js +0 -77
  196. package/node_modules/@sema/gerador-cpp/dist/index.js.map +0 -1
  197. package/node_modules/@sema/gerador-css/dist/index.js.map +0 -1
  198. package/node_modules/@sema/gerador-css/dist/index.part01.js.map +0 -1
  199. package/node_modules/@sema/gerador-css/dist/index.part02.js.map +0 -1
  200. package/node_modules/@sema/gerador-dart/dist/index.js.map +0 -1
  201. package/node_modules/@sema/gerador-dotnet/dist/index.js.map +0 -1
  202. package/node_modules/@sema/gerador-html/dist/index.js.map +0 -1
  203. package/node_modules/@sema/gerador-javascript/dist/index.js.map +0 -1
  204. package/node_modules/@sema/gerador-lua/dist/index.js.map +0 -1
  205. package/node_modules/@sema/gerador-php/dist/index.js.map +0 -1
  206. package/node_modules/@sema/gerador-python/dist/index.js.map +0 -1
  207. package/node_modules/@sema/gerador-python/dist/index.part01.js.map +0 -1
  208. package/node_modules/@sema/gerador-python/dist/index.part02.js.map +0 -1
  209. package/node_modules/@sema/gerador-typescript/dist/index.js.map +0 -1
  210. package/node_modules/@sema/gerador-typescript/dist/index.part01.js.map +0 -1
  211. package/node_modules/@sema/gerador-typescript/dist/index.part02.js.map +0 -1
  212. package/node_modules/@sema/gerador-typescript/dist/index.part03.js.map +0 -1
  213. package/node_modules/@sema/nucleo/dist/ast/tipos.js.map +0 -1
  214. package/node_modules/@sema/nucleo/dist/diagnosticos/index.js.map +0 -1
  215. package/node_modules/@sema/nucleo/dist/diagnosticos/melhorador.js.map +0 -1
  216. package/node_modules/@sema/nucleo/dist/diagnosticos/snippets.js.map +0 -1
  217. package/node_modules/@sema/nucleo/dist/formatador/index.js.map +0 -1
  218. package/node_modules/@sema/nucleo/dist/formatador/index.part01.js.map +0 -1
  219. package/node_modules/@sema/nucleo/dist/formatador/index.part02.js.map +0 -1
  220. package/node_modules/@sema/nucleo/dist/index.js.map +0 -1
  221. package/node_modules/@sema/nucleo/dist/ir/conversor.js.map +0 -1
  222. package/node_modules/@sema/nucleo/dist/ir/conversor.part01.js.map +0 -1
  223. package/node_modules/@sema/nucleo/dist/ir/conversor.part02.js.map +0 -1
  224. package/node_modules/@sema/nucleo/dist/ir/conversor.part03.js.map +0 -1
  225. package/node_modules/@sema/nucleo/dist/ir/modelos.js.map +0 -1
  226. package/node_modules/@sema/nucleo/dist/lexer/lexer.js.map +0 -1
  227. package/node_modules/@sema/nucleo/dist/lexer/tokens.js.map +0 -1
  228. package/node_modules/@sema/nucleo/dist/parser/parser.declaracoes.js.map +0 -1
  229. package/node_modules/@sema/nucleo/dist/parser/parser.js.map +0 -1
  230. package/node_modules/@sema/nucleo/dist/parser/parser.modulo.js.map +0 -1
  231. package/node_modules/@sema/nucleo/dist/parser/parser.part01.js.map +0 -1
  232. package/node_modules/@sema/nucleo/dist/parser/parser.part02.js.map +0 -1
  233. package/node_modules/@sema/nucleo/dist/parser/parser.part03.js.map +0 -1
  234. package/node_modules/@sema/nucleo/dist/persistencia/contratos.js.map +0 -1
  235. package/node_modules/@sema/nucleo/dist/semantico/analisador.js.map +0 -1
  236. package/node_modules/@sema/nucleo/dist/semantico/analisador.part01.js.map +0 -1
  237. package/node_modules/@sema/nucleo/dist/semantico/analisador.part02.js.map +0 -1
  238. package/node_modules/@sema/nucleo/dist/semantico/analisador.part03.js.map +0 -1
  239. package/node_modules/@sema/nucleo/dist/semantico/analisador.part04.js.map +0 -1
  240. package/node_modules/@sema/nucleo/dist/semantico/analisador.part05.js.map +0 -1
  241. package/node_modules/@sema/nucleo/dist/semantico/analisador.part06.js.map +0 -1
  242. package/node_modules/@sema/nucleo/dist/semantico/analisador.part07.js.map +0 -1
  243. package/node_modules/@sema/nucleo/dist/semantico/analisador.part08.js.map +0 -1
  244. package/node_modules/@sema/nucleo/dist/semantico/estruturas.js.map +0 -1
  245. package/node_modules/@sema/nucleo/dist/semantico/estruturas.part01.js.map +0 -1
  246. package/node_modules/@sema/nucleo/dist/semantico/estruturas.part02.js.map +0 -1
  247. package/node_modules/@sema/nucleo/dist/semantico/orcamentoSemantico.js.map +0 -1
  248. package/node_modules/@sema/nucleo/dist/semantico/seguranca.js.map +0 -1
  249. package/node_modules/@sema/nucleo/dist/util/arquivos.js.map +0 -1
  250. package/node_modules/@sema/padroes/dist/index.js.map +0 -1
@@ -0,0 +1,551 @@
1
+ // SEMA-GOVERNED: sema.produto.cli_invocacao_publica.argumentos, sema.produto.cli_invocacao_publica.handlers
2
+ // Descrição: valida a gramática pública da CLI sem consultar handlers, filesystem, ambiente ou rede.
3
+ import { erroArgumentoInvalido, erroComandoDesconhecido, } from "./cliControlError.js";
4
+ const FLAGS_VERSAO = new Set(["--version", "--versao", "-v"]);
5
+ const FLAGS_JSON = ["--json"];
6
+ const COMANDOS_PUBLICOS = new Set([
7
+ "ajuda-ia", "author", "capabilities", "compilar", "conteudo", "contexto-ia",
8
+ "descobrir", "dev", "diagnosticos", "docs-impacto", "doctor", "drift",
9
+ "exemplos-prompt-ia", "finalizar-mudanca", "formatar", "gerar", "guard",
10
+ "impacto", "importar", "iniciar", "init", "inspecionar", "instalar-exemplos",
11
+ "interativo", "ir", "pipeline", "profile", "prompt-curto", "prompt-ia",
12
+ "prompt-ia-react", "prompt-ia-sema-primeiro", "prompt-ia-ui", "renomear-semantico",
13
+ "resumo", "rule-packs", "skill", "starter-ia", "sync", "sync-codex", "testar",
14
+ "validar", "verificar", "ast",
15
+ ]);
16
+ const TEMPLATES_INICIAR = new Set([
17
+ "base", "nestjs", "fastapi", "nextjs-api", "nextjs-consumer", "react-vite-consumer",
18
+ "angular-consumer", "flutter-consumer", "node-firebase-worker", "aspnet-api",
19
+ "springboot-api", "go-http-api", "rust-axum-api", "cpp-service-bridge",
20
+ ]);
21
+ const TEMPLATES_INIT = new Set([
22
+ "crud-simples", "auth-completo", "api-rest", "workflow", "pedido", "usuario", "upload",
23
+ ]);
24
+ const FONTES_IMPORTACAO = new Set([
25
+ "nestjs", "fastapi", "flask", "nextjs", "nextjs-consumer", "react-vite-consumer",
26
+ "angular-consumer", "flutter-consumer", "firebase", "typescript", "javascript",
27
+ "python", "dart", "lua", "dotnet", "java", "go", "rust", "cpp", "php",
28
+ ]);
29
+ const ALVOS_GERACAO = new Set([
30
+ "typescript", "python", "dart", "lua", "javascript", "js", "html", "css", "php",
31
+ "dotnet", "cs", "csharp", "cpp", "c++", "cxx", "cc",
32
+ ]);
33
+ const FRAMEWORKS = new Set(["base", "nestjs", "fastapi"]);
34
+ const ESTRUTURAS = new Set(["flat", "modulos", "backend"]);
35
+ const ESCOPOS = new Set(["arquivo", "modulo", "projeto"]);
36
+ const MODOS_CACHE = new Set(["none", "cache", "fresh", "off", "auto", "refresh"]);
37
+ const MODOS_RESUMO = new Set(["resumo", "onboarding", "review", "mudanca", "bug", "arquitetura"]);
38
+ const MATURIDADES = new Set([
39
+ "draft", "rascunho", "prototype", "prototipo", "production", "producao",
40
+ "critical", "critico", "critica",
41
+ ]);
42
+ const PERFIS = Object.freeze({
43
+ software: "software", codigo: "software", code: "software",
44
+ workflow: "workflow", workflow_ops: "workflow", workflows: "workflow", n8n: "workflow",
45
+ automacao: "workflow", orquestracao: "workflow",
46
+ ops: "ops", operacao: "ops", operacional: "ops", devops: "ops",
47
+ game: "game", jogo: "game", games: "game",
48
+ simulation: "simulation", simulations: "simulation", simulacao: "simulation",
49
+ simulacoes: "simulation", simulador: "simulation", simuladores: "simulation",
50
+ legal: "legal", juridico: "legal", research: "research", pesquisa: "research",
51
+ redacao: "redacao", redator: "redacao", redigir: "redacao", editorial: "redacao",
52
+ materia: "redacao", materia_seo: "redacao",
53
+ propostas: "propostas", proposta: "propostas", propostas_comerciais: "propostas",
54
+ proposta_comercial: "propostas", freela: "propostas", marketplace: "propostas",
55
+ conversas: "conversas", conversa: "conversas", atendimento: "conversas",
56
+ atendimento_conversacional: "conversas", bot: "conversas", chatbot: "conversas", chat: "conversas",
57
+ author: "author", autor: "author", escrita: "author",
58
+ });
59
+ const PRESETS_PROFILE = Object.freeze({
60
+ software: new Set(["api", "modulo", "refactor", "persistencia", "security"]),
61
+ workflow: new Set(["webhook", "fila", "n8n", "cron", "integracao"]),
62
+ ops: new Set(["deploy", "migration", "incidente", "rollback", "critical"]),
63
+ legal: new Set(["lgpd", "contrato", "dpa", "termos_uso", "privacidade", "due_diligence", "compliance"]),
64
+ research: new Set(["rapida", "tecnica", "decisoria", "critica"]),
65
+ redacao: new Set(["editorial", "materia", "blog", "seo", "reescrita"]),
66
+ propostas: new Set(["marketplace", "freela", "consultiva", "diagnostico", "score90"]),
67
+ game: new Set(["casual", "arcade", "rpg", "economia", "playtest"]),
68
+ simulation: new Set(["model", "scenario", "calibration", "deterministic", "batch", "safety"]),
69
+ conversas: new Set(["atendimento", "vendas", "suporte", "qualificacao", "retencao", "cobranca"]),
70
+ });
71
+ function chaveNormalizada(valor) {
72
+ return valor.toLowerCase().normalize("NFD").replace(/[\u0300-\u036f]/gu, "")
73
+ .replace(/[^a-z0-9]+/gu, "_").replace(/^_+|_+$/gu, "");
74
+ }
75
+ function parsearArgumentos(args, especificacao) {
76
+ const aliases = especificacao.aliases ?? {};
77
+ const opcoesPermitidas = new Set(especificacao.opcoes ?? []);
78
+ const flagsPermitidas = new Set([...(especificacao.flags ?? []), ...FLAGS_JSON]);
79
+ const repetiveis = new Set(especificacao.repetiveis ?? []);
80
+ const posicionais = [];
81
+ const opcoes = new Map();
82
+ const flags = new Set();
83
+ for (let indice = 0; indice < args.length; indice += 1) {
84
+ const token = args[indice];
85
+ if (!token.startsWith("-")) {
86
+ posicionais.push(token);
87
+ continue;
88
+ }
89
+ const separador = token.indexOf("=");
90
+ const nomeBruto = separador > 0 ? token.slice(0, separador) : token;
91
+ const nome = aliases[nomeBruto] ?? nomeBruto;
92
+ const valorInline = separador > 0 ? token.slice(separador + 1) : undefined;
93
+ if (flagsPermitidas.has(nome)) {
94
+ if (valorInline !== undefined || flags.has(nome))
95
+ return null;
96
+ flags.add(nome);
97
+ continue;
98
+ }
99
+ if (!opcoesPermitidas.has(nome))
100
+ return null;
101
+ if (!repetiveis.has(nome) && opcoes.has(nome))
102
+ return null;
103
+ const valor = valorInline ?? args[indice + 1];
104
+ if (!valor || (valorInline === undefined && valor.startsWith("-")))
105
+ return null;
106
+ if (valorInline === undefined)
107
+ indice += 1;
108
+ const valores = opcoes.get(nome) ?? [];
109
+ valores.push(valor);
110
+ opcoes.set(nome, valores);
111
+ }
112
+ const minimo = especificacao.minPosicionais ?? 0;
113
+ const maximo = especificacao.maxPosicionais ?? minimo;
114
+ if (posicionais.length < minimo || posicionais.length > maximo)
115
+ return null;
116
+ return { posicionais, opcoes, flags };
117
+ }
118
+ function valorOpcao(args, nome) {
119
+ return args.opcoes.get(nome)?.[0];
120
+ }
121
+ function usaSomenteOpcoes(args, permitidas) {
122
+ const conjunto = new Set(permitidas);
123
+ return [...args.opcoes.keys()].every((opcao) => conjunto.has(opcao));
124
+ }
125
+ function usaSomenteFlags(args, permitidas) {
126
+ const conjunto = new Set(["--json", ...permitidas]);
127
+ return [...args.flags].every((flag) => conjunto.has(flag));
128
+ }
129
+ function perfilCanonico(valor) {
130
+ if (!valor)
131
+ return null;
132
+ return PERFIS[chaveNormalizada(valor)] ?? null;
133
+ }
134
+ function validarModoCache(args, flagPermitida) {
135
+ const cache = valorOpcao(args, "--cache");
136
+ const drift = valorOpcao(args, "--drift");
137
+ if (cache && !MODOS_CACHE.has(cache))
138
+ return false;
139
+ if (drift && !MODOS_CACHE.has(drift))
140
+ return false;
141
+ if (flagPermitida === "--cache" && drift)
142
+ return false;
143
+ if (flagPermitida === "--drift" && cache)
144
+ return false;
145
+ if (cache && drift)
146
+ return false;
147
+ if (args.flags.has("--com-drift") && (cache || drift))
148
+ return false;
149
+ return true;
150
+ }
151
+ function validarSemArgumentos(args) {
152
+ return parsearArgumentos(args, { maxPosicionais: 0 }) !== null;
153
+ }
154
+ function validarIniciar(args) {
155
+ const parsed = parsearArgumentos(args, {
156
+ opcoes: ["--template"], flags: ["--force"], maxPosicionais: 0,
157
+ });
158
+ const template = parsed ? valorOpcao(parsed, "--template") : undefined;
159
+ return parsed !== null && (template === undefined || TEMPLATES_INICIAR.has(template));
160
+ }
161
+ function validarInit(args) {
162
+ const parsed = parsearArgumentos(args, {
163
+ opcoes: ["--template", "--saida", "--modulo"],
164
+ flags: ["--listar", "--force"],
165
+ aliases: { "-t": "--template", "-o": "--saida", "-m": "--modulo", "-l": "--listar", "-f": "--force" },
166
+ maxPosicionais: 0,
167
+ });
168
+ if (!parsed)
169
+ return false;
170
+ if (parsed.flags.has("--listar")) {
171
+ return parsed.opcoes.size === 0 && !parsed.flags.has("--force");
172
+ }
173
+ const template = valorOpcao(parsed, "--template");
174
+ return template !== undefined && TEMPLATES_INIT.has(template)
175
+ && valorOpcao(parsed, "--saida") !== undefined
176
+ && valorOpcao(parsed, "--modulo") !== undefined;
177
+ }
178
+ function validarDev(args) {
179
+ const parsed = parsearArgumentos(args, {
180
+ opcoes: ["--promover", "--pasta", "--modo"],
181
+ aliases: { "-p": "--promover", "-d": "--pasta", "-m": "--modo" },
182
+ maxPosicionais: 0,
183
+ });
184
+ if (!parsed)
185
+ return false;
186
+ const modo = valorOpcao(parsed, "--modo");
187
+ if (modo && modo !== "rigoroso" && modo !== "permissivo")
188
+ return false;
189
+ const promover = valorOpcao(parsed, "--promover");
190
+ if (parsed.flags.has("--json") && !promover)
191
+ return false;
192
+ return !promover || (!valorOpcao(parsed, "--pasta") && !modo);
193
+ }
194
+ function validarSync(args) {
195
+ const parsed = parsearArgumentos(args, {
196
+ flags: ["--gerar", "--importar", "--comparar"], minPosicionais: 1, maxPosicionais: 4,
197
+ });
198
+ if (!parsed || parsed.posicionais[0] !== "prisma")
199
+ return false;
200
+ const operacoes = ["--gerar", "--importar", "--comparar"].filter((flag) => parsed.flags.has(flag));
201
+ if (operacoes.length !== 1)
202
+ return false;
203
+ if (operacoes[0] === "--gerar")
204
+ return parsed.posicionais.length <= 3;
205
+ if (operacoes[0] === "--importar")
206
+ return parsed.posicionais.length >= 2 && parsed.posicionais.length <= 4;
207
+ return parsed.posicionais.length <= 3;
208
+ }
209
+ function validarGuard(args) {
210
+ const parsed = parsearArgumentos(args, { maxPosicionais: 1 });
211
+ return parsed !== null && (parsed.posicionais.length === 0
212
+ || new Set(["on", "off", "status"]).has(parsed.posicionais[0]));
213
+ }
214
+ const OPCOES_PROFILE = [
215
+ "--profile", "--arquivo", "--maturidade", "--preset", "--artefato", "--artifact",
216
+ "--artefato-arquivo", "--artifact-file",
217
+ ];
218
+ function validarProfile(args) {
219
+ const parsed = parsearArgumentos(args, { opcoes: OPCOES_PROFILE, minPosicionais: 1, maxPosicionais: 3 });
220
+ if (!parsed)
221
+ return false;
222
+ const subcomando = chaveNormalizada(parsed.posicionais[0]).replaceAll("_", "-");
223
+ if (subcomando === "help" || subcomando === "ajuda") {
224
+ return parsed.posicionais.length === 1 && parsed.opcoes.size === 0;
225
+ }
226
+ if (["capabilities", "capability-matrix", "matrix"].includes(subcomando)) {
227
+ return parsed.posicionais.length === 1 && parsed.opcoes.size === 0;
228
+ }
229
+ if (["rule-packs", "packs"].includes(subcomando)) {
230
+ const filtro = valorOpcao(parsed, "--profile");
231
+ return parsed.posicionais.length === 1
232
+ && usaSomenteOpcoes(parsed, ["--profile"])
233
+ && (filtro === undefined || perfilCanonico(filtro) !== null);
234
+ }
235
+ if (subcomando !== "validar")
236
+ return false;
237
+ const profile = perfilCanonico(parsed.posicionais[1] ?? valorOpcao(parsed, "--profile"));
238
+ const entrada = parsed.posicionais[2] ?? valorOpcao(parsed, "--arquivo");
239
+ if (!profile || profile === "author" || !entrada)
240
+ return false;
241
+ const maturidade = valorOpcao(parsed, "--maturidade");
242
+ if (maturidade && !MATURIDADES.has(chaveNormalizada(maturidade)))
243
+ return false;
244
+ const preset = valorOpcao(parsed, "--preset");
245
+ return !preset || PRESETS_PROFILE[profile]?.has(chaveNormalizada(preset)) === true;
246
+ }
247
+ const OPCOES_AUTHOR = [
248
+ "--saida", "--arquivo", "--preset", "--texto", "--texto-arquivo",
249
+ "--texto-anterior", "--texto-anterior-arquivo",
250
+ ];
251
+ function validarAuthor(args) {
252
+ const parsed = parsearArgumentos(args, {
253
+ opcoes: OPCOES_AUTHOR, flags: ["--tema-sensivel"], minPosicionais: 1, maxPosicionais: 2,
254
+ });
255
+ if (!parsed)
256
+ return false;
257
+ const subcomando = chaveNormalizada(parsed.posicionais[0]).replaceAll("_", "-");
258
+ if (subcomando === "help" || subcomando === "ajuda") {
259
+ return parsed.posicionais.length === 1 && parsed.opcoes.size === 0 && usaSomenteFlags(parsed, []);
260
+ }
261
+ if (subcomando === "iniciar") {
262
+ return parsed.posicionais.length === 1
263
+ && usaSomenteOpcoes(parsed, ["--saida"])
264
+ && usaSomenteFlags(parsed, ["--tema-sensivel"]);
265
+ }
266
+ const validos = new Set(["validar", "briefing", "revisar-cliches", "validar-narrativa", "validar-proibicoes"]);
267
+ if (!validos.has(subcomando))
268
+ return false;
269
+ if (!(parsed.posicionais[1] ?? valorOpcao(parsed, "--arquivo")))
270
+ return false;
271
+ if (parsed.flags.has("--tema-sensivel") || valorOpcao(parsed, "--saida"))
272
+ return false;
273
+ const preset = valorOpcao(parsed, "--preset");
274
+ return !preset || new Set(["conto", "romance", "roteiro", "lore", "campanha"]).has(chaveNormalizada(preset));
275
+ }
276
+ function validarRulePacks(args) {
277
+ const parsed = parsearArgumentos(args, { opcoes: ["--profile"], maxPosicionais: 1 });
278
+ if (!parsed)
279
+ return false;
280
+ const profile = valorOpcao(parsed, "--profile") ?? parsed.posicionais[0];
281
+ return profile === undefined || perfilCanonico(profile) !== null;
282
+ }
283
+ function validarSkill(args) {
284
+ const parsed = parsearArgumentos(args, { maxPosicionais: 1 });
285
+ return parsed !== null && (parsed.posicionais.length === 0
286
+ || new Set(["status", "sync"]).has(parsed.posicionais[0].toLowerCase()));
287
+ }
288
+ const OPCOES_CONTEUDO = [
289
+ "--alvos-arquivo", "--envelope-arquivo", "--confianca-arquivo", "--payload-type",
290
+ "--capability", "--scope", "--ledger-id", "--expected-head", "--politica-arquivo",
291
+ "--ledger-arquivo", "--saida", "--trust-root-digest", "--revocation-digest",
292
+ ];
293
+ function validarConteudo(args) {
294
+ const parsed = parsearArgumentos(args, {
295
+ opcoes: OPCOES_CONTEUDO, flags: ["--development-local-trust"], maxPosicionais: 2,
296
+ });
297
+ if (!parsed)
298
+ return false;
299
+ const subcomando = parsed.posicionais[0] ?? "capabilities";
300
+ if (["help", "ajuda", "capabilities"].includes(subcomando)) {
301
+ return parsed.posicionais.length <= 1 && parsed.opcoes.size === 0 && usaSomenteFlags(parsed, []);
302
+ }
303
+ if (subcomando === "validar") {
304
+ return parsed.posicionais.length === 2 && parsed.opcoes.size === 0 && usaSomenteFlags(parsed, []);
305
+ }
306
+ if (subcomando === "planejar") {
307
+ return parsed.posicionais.length === 2
308
+ && usaSomenteOpcoes(parsed, ["--alvos-arquivo"])
309
+ && valorOpcao(parsed, "--alvos-arquivo") !== undefined
310
+ && usaSomenteFlags(parsed, []);
311
+ }
312
+ if (subcomando === "validar-envelope") {
313
+ return parsed.posicionais.length === 1
314
+ && ["--envelope-arquivo", "--confianca-arquivo", "--payload-type"]
315
+ .every((opcao) => valorOpcao(parsed, opcao) !== undefined)
316
+ && usaSomenteOpcoes(parsed, ["--envelope-arquivo", "--confianca-arquivo", "--payload-type", "--trust-root-digest", "--revocation-digest", "--capability", "--scope"]);
317
+ }
318
+ if (subcomando === "registrar") {
319
+ return parsed.posicionais.length === 2
320
+ && ["--envelope-arquivo", "--politica-arquivo", "--confianca-arquivo", "--ledger-id", "--expected-head"]
321
+ .every((opcao) => valorOpcao(parsed, opcao) !== undefined)
322
+ && usaSomenteOpcoes(parsed, ["--envelope-arquivo", "--politica-arquivo", "--confianca-arquivo", "--trust-root-digest", "--revocation-digest", "--ledger-id", "--expected-head"]);
323
+ }
324
+ if (subcomando === "status" || subcomando === "projetar") {
325
+ const permitidas = ["--politica-arquivo", "--confianca-arquivo", "--trust-root-digest", "--revocation-digest", "--ledger-arquivo", "--expected-head", ...(subcomando === "projetar" ? ["--saida"] : [])];
326
+ return parsed.posicionais.length === 2
327
+ && ["--politica-arquivo", "--confianca-arquivo", "--ledger-arquivo", "--expected-head"]
328
+ .every((opcao) => valorOpcao(parsed, opcao) !== undefined)
329
+ && usaSomenteOpcoes(parsed, permitidas);
330
+ }
331
+ return false;
332
+ }
333
+ function validarDescoberta(args, comando) {
334
+ const opcoes = ["--tipo", "--id", "--dominio", "--intencao", "--limite"];
335
+ const parsed = parsearArgumentos(args, { opcoes, maxPosicionais: 2 });
336
+ if (!parsed)
337
+ return false;
338
+ if (comando === "capabilities") {
339
+ return parsed.posicionais.length === 0 && usaSomenteOpcoes(parsed, ["--tipo", "--id", "--dominio"]);
340
+ }
341
+ const subcomando = comando === "pipeline" ? parsed.posicionais[0] : parsed.posicionais[0];
342
+ if (!subcomando)
343
+ return false;
344
+ if (comando === "pipeline") {
345
+ if (subcomando === "listar")
346
+ return parsed.posicionais.length === 1 && parsed.opcoes.size === 0;
347
+ if (subcomando !== "descrever")
348
+ return false;
349
+ return parsed.posicionais.length <= 2
350
+ && usaSomenteOpcoes(parsed, ["--id"])
351
+ && Boolean(parsed.posicionais[1] ?? valorOpcao(parsed, "--id"));
352
+ }
353
+ if (subcomando === "catalogo") {
354
+ return parsed.posicionais.length === 1 && usaSomenteOpcoes(parsed, ["--tipo", "--id", "--dominio"]);
355
+ }
356
+ if (subcomando === "recomendar") {
357
+ const limite = valorOpcao(parsed, "--limite");
358
+ return parsed.posicionais.length === 1
359
+ && usaSomenteOpcoes(parsed, ["--intencao", "--limite"])
360
+ && valorOpcao(parsed, "--intencao") !== undefined
361
+ && (limite === undefined || (/^\d+$/u.test(limite) && Number(limite) >= 1 && Number(limite) <= 10));
362
+ }
363
+ if (subcomando === "explicar") {
364
+ return parsed.posicionais.length <= 2
365
+ && usaSomenteOpcoes(parsed, ["--id"])
366
+ && Boolean(parsed.posicionais[1] ?? valorOpcao(parsed, "--id"));
367
+ }
368
+ return false;
369
+ }
370
+ const REGRAS_INTERATIVO = Object.freeze({
371
+ capabilities: { posicionais: 0 }, capacidades: { posicionais: 0 }, schema: { posicionais: 0 }, esquema: { posicionais: 0 },
372
+ pipelines: { posicionais: 0, opcoes: ["--kind", "--spatial-model", "--render-mode", "--visual-profile", "--control-mode", "--fidelity"] },
373
+ adapters: { posicionais: 0, opcoes: ["--kind", "--spatial-model", "--render-mode", "--visual-profile", "--control-mode", "--fidelity", "--role", "--time-model"] },
374
+ adaptadores: { posicionais: 0, opcoes: ["--kind", "--spatial-model", "--render-mode", "--visual-profile", "--control-mode", "--fidelity", "--role", "--time-model"] },
375
+ validar: { posicionais: 1 }, planejar: { posicionais: 1 },
376
+ "validar-evidencias": { posicionais: 1, opcoes: ["--plano-arquivo", "--bundle-arquivo", "--evidencias-arquivo"] },
377
+ status: { posicionais: 1, opcoes: ["--plano-arquivo", "--bundle-arquivo", "--evidencias-arquivo"] },
378
+ "validar-protocolo": { posicionais: 1 },
379
+ "validar-control-run": { posicionais: 1, opcoes: ["--definition-arquivo", "--plano-arquivo", "--contrato-arquivo", "--entrada-arquivo", "--entrada-auxiliar-arquivo", "--evidencia-arquivo", "--resultado-arquivo"] },
380
+ "validar-ir": { posicionais: 1 }, "indexar-ir": { posicionais: 1 },
381
+ "consultar-ir": { posicionais: 1, opcoes: ["--semantic-id"], obrigatorias: ["--semantic-id"] },
382
+ "chunk-ir": { posicionais: 1, opcoes: ["--semantic-id"], flags: ["--raso"], obrigatorias: ["--semantic-id"] },
383
+ "descrever-ir": { posicionais: 0 }, "validar-engine-snapshot": { posicionais: 1 },
384
+ "diff-engine-snapshots": { posicionais: 2 }, "validar-asset-provenance": { posicionais: 1 },
385
+ "validar-editor-state": { posicionais: 1 }, "planejar-jobs": { posicionais: 1 },
386
+ "validar-acceptance": { posicionais: 1 },
387
+ "operar-acceptance": { posicionais: 1, opcoes: ["--operation", "--context-file"], obrigatorias: ["--operation", "--context-file"] },
388
+ "validar-multimodal": { posicionais: 1 }, "validar-temporal": { posicionais: 1 },
389
+ "validar-evidencia-temporal": { posicionais: 1, opcoes: ["--bundle-arquivo", "--evidencias-arquivo"] },
390
+ "validar-autonomia": { posicionais: 1 }, "validar-playtest-fuzz": { posicionais: 1 },
391
+ "validar-multiplayer": { posicionais: 1 }, "analisar-portabilidade": { posicionais: 1 },
392
+ "validar-workers": { posicionais: 1 },
393
+ });
394
+ function validarInterativo(args) {
395
+ if (args.length === 0 || (args.length === 1 && args[0] === "--json"))
396
+ return true;
397
+ const primeiroPosicional = args.find((token) => !token.startsWith("-"));
398
+ if (!primeiroPosicional)
399
+ return false;
400
+ const subcomando = primeiroPosicional.toLowerCase().replaceAll("_", "-");
401
+ const regra = REGRAS_INTERATIVO[subcomando];
402
+ if (!regra)
403
+ return false;
404
+ const indice = args.indexOf(primeiroPosicional);
405
+ const restantes = [...args.slice(0, indice), ...args.slice(indice + 1)];
406
+ const parsed = parsearArgumentos(restantes, {
407
+ opcoes: regra.opcoes, flags: regra.flags, minPosicionais: regra.posicionais, maxPosicionais: regra.posicionais,
408
+ });
409
+ if (!parsed || regra.obrigatorias?.some((opcao) => valorOpcao(parsed, opcao) === undefined))
410
+ return false;
411
+ if (subcomando === "validar-evidencia-temporal"
412
+ && !valorOpcao(parsed, "--bundle-arquivo") && !valorOpcao(parsed, "--evidencias-arquivo"))
413
+ return false;
414
+ const operacao = valorOpcao(parsed, "--operation");
415
+ return !operacao || new Set(["VALIDATE", "EVALUATE", "INVALIDATE"]).has(operacao);
416
+ }
417
+ function validarResumo(args, promptCurto) {
418
+ const parsed = parsearArgumentos(args, {
419
+ opcoes: promptCurto ? ["--para"] : ["--para", "--saida", "--drift", "--cache"],
420
+ flags: promptCurto ? ["--micro", "--curto", "--medio"] : ["--micro", "--curto", "--medio", "--raiz", "--com-drift"],
421
+ maxPosicionais: 1,
422
+ });
423
+ if (!parsed)
424
+ return false;
425
+ const tamanhos = ["--micro", "--curto", "--medio"].filter((flag) => parsed.flags.has(flag));
426
+ const modo = valorOpcao(parsed, "--para");
427
+ return tamanhos.length <= 1 && (!modo || MODOS_RESUMO.has(modo)) && (promptCurto || validarModoCache(parsed, "--drift"));
428
+ }
429
+ function validarComandoBasico(comando, args) {
430
+ const aliasesGeracao = { "-a": "--alvo", "-s": "--saida" };
431
+ switch (comando) {
432
+ case "validar": return parsearArgumentos(args, { maxPosicionais: 1 }) !== null;
433
+ case "ast":
434
+ case "ir":
435
+ case "diagnosticos": return parsearArgumentos(args, { minPosicionais: 1, maxPosicionais: 1 }) !== null;
436
+ case "contexto-ia": return parsearArgumentos(args, { opcoes: ["--saida"], minPosicionais: 1, maxPosicionais: 1 }) !== null;
437
+ case "compilar":
438
+ case "testar": {
439
+ const parsed = parsearArgumentos(args, { opcoes: ["--alvo", "--saida", "--estrutura", "--framework"], aliases: aliasesGeracao, minPosicionais: comando === "testar" ? 1 : 0, maxPosicionais: 1 });
440
+ if (!parsed)
441
+ return false;
442
+ const alvo = valorOpcao(parsed, "--alvo"), estrutura = valorOpcao(parsed, "--estrutura"), framework = valorOpcao(parsed, "--framework");
443
+ return (!alvo || ALVOS_GERACAO.has(alvo)) && (!estrutura || ESTRUTURAS.has(estrutura)) && (!framework || FRAMEWORKS.has(framework));
444
+ }
445
+ case "gerar": {
446
+ const parsed = parsearArgumentos(args, { opcoes: ["--alvo", "--saida", "--estrutura", "--framework"], aliases: aliasesGeracao, minPosicionais: 1, maxPosicionais: 2 });
447
+ if (!parsed)
448
+ return false;
449
+ const alvo = parsed.posicionais[0] ?? valorOpcao(parsed, "--alvo");
450
+ const estrutura = valorOpcao(parsed, "--estrutura"), framework = valorOpcao(parsed, "--framework");
451
+ return Boolean(alvo && ALVOS_GERACAO.has(alvo)) && (!estrutura || ESTRUTURAS.has(estrutura)) && (!framework || FRAMEWORKS.has(framework));
452
+ }
453
+ case "verificar": return parsearArgumentos(args, { opcoes: ["--saida"], maxPosicionais: 1 }) !== null;
454
+ case "formatar": return parsearArgumentos(args, { flags: ["--check"], maxPosicionais: 1 }) !== null;
455
+ case "inspecionar": {
456
+ const parsed = parsearArgumentos(args, { opcoes: ["--drift", "--cache"], flags: ["--com-drift"], maxPosicionais: 1 });
457
+ return parsed !== null && validarModoCache(parsed, "--drift");
458
+ }
459
+ case "drift": {
460
+ const parsed = parsearArgumentos(args, { opcoes: ["--escopo", "--cache", "--drift"], flags: ["--incluir-worktrees", "--incluir-consumidores-laterais"], maxPosicionais: 1 });
461
+ const escopo = parsed ? valorOpcao(parsed, "--escopo") : undefined;
462
+ return parsed !== null && (!escopo || ESCOPOS.has(escopo)) && validarModoCache(parsed, "--cache");
463
+ }
464
+ case "impacto": {
465
+ const parsed = parsearArgumentos(args, { opcoes: ["--alvo", "--mudanca", "--escopo", "--cache"], flags: ["--incluir-worktrees", "--incluir-consumidores-laterais"], maxPosicionais: 1 });
466
+ const escopo = parsed ? valorOpcao(parsed, "--escopo") : undefined;
467
+ return parsed !== null && valorOpcao(parsed, "--alvo") !== undefined && (!escopo || ESCOPOS.has(escopo)) && validarModoCache(parsed, "--cache");
468
+ }
469
+ case "renomear-semantico": {
470
+ const parsed = parsearArgumentos(args, { opcoes: ["--de", "--para", "--escopo", "--cache"], flags: ["--incluir-worktrees", "--incluir-consumidores-laterais"], maxPosicionais: 1 });
471
+ const escopo = parsed ? valorOpcao(parsed, "--escopo") : undefined;
472
+ return parsed !== null && valorOpcao(parsed, "--de") !== undefined && valorOpcao(parsed, "--para") !== undefined && (!escopo || ESCOPOS.has(escopo)) && validarModoCache(parsed, "--cache");
473
+ }
474
+ case "importar": {
475
+ const parsed = parsearArgumentos(args, { opcoes: ["--saida", "--namespace"], aliases: { "-s": "--saida" }, minPosicionais: 2, maxPosicionais: 2 });
476
+ return parsed !== null && FONTES_IMPORTACAO.has(parsed.posicionais[0]);
477
+ }
478
+ case "docs-impacto": {
479
+ const parsed = parsearArgumentos(args, { opcoes: ["--intencao", "--arquivo"], flags: ["--criar-ausentes"], repetiveis: ["--arquivo"], maxPosicionais: 64 });
480
+ return parsed !== null && Boolean(valorOpcao(parsed, "--intencao") ?? parsed.posicionais[0]);
481
+ }
482
+ case "finalizar-mudanca": {
483
+ const parsed = parsearArgumentos(args, { opcoes: ["--intencao", "--arquivo", "--doc-lida"], repetiveis: ["--arquivo", "--doc-lida"], maxPosicionais: 64 });
484
+ return parsed !== null && Boolean(valorOpcao(parsed, "--intencao") ?? parsed.posicionais[0]);
485
+ }
486
+ default: return false;
487
+ }
488
+ }
489
+ function sintaxeValida(comando, args) {
490
+ if (new Set(["doctor", "ajuda-ia", "starter-ia", "prompt-ia", "prompt-ia-ui", "prompt-ia-react", "prompt-ia-sema-primeiro", "exemplos-prompt-ia", "sync-codex", "instalar-exemplos"]).has(comando)) {
491
+ return validarSemArgumentos(args);
492
+ }
493
+ switch (comando) {
494
+ case "iniciar": return validarIniciar(args);
495
+ case "init": return validarInit(args);
496
+ case "dev": return validarDev(args);
497
+ case "sync": return validarSync(args);
498
+ case "guard": return validarGuard(args);
499
+ case "profile": return validarProfile(args);
500
+ case "author": return validarAuthor(args);
501
+ case "rule-packs": return validarRulePacks(args);
502
+ case "skill": return validarSkill(args);
503
+ case "conteudo": return validarConteudo(args);
504
+ case "descobrir": return validarDescoberta(args, "descobrir");
505
+ case "pipeline": return validarDescoberta(args, "pipeline");
506
+ case "capabilities": return validarDescoberta(args, "capabilities");
507
+ case "interativo": return validarInterativo(args);
508
+ case "resumo": return validarResumo(args, false);
509
+ case "prompt-curto": return validarResumo(args, true);
510
+ default: return validarComandoBasico(comando, args);
511
+ }
512
+ }
513
+ export function validarSintaxeInvocacaoPublica(argv) {
514
+ if (argv.length === 0) {
515
+ return {
516
+ comando: "",
517
+ sintaxeValida: true,
518
+ dispatchPermitido: false,
519
+ handlerResolvido: false,
520
+ efeitosPermitidos: false,
521
+ categoriaFalha: null,
522
+ codigoPublico: null,
523
+ };
524
+ }
525
+ if (FLAGS_VERSAO.has(argv[0]) && argv.length === 1) {
526
+ return {
527
+ comando: argv[0],
528
+ sintaxeValida: true,
529
+ dispatchPermitido: false,
530
+ handlerResolvido: false,
531
+ efeitosPermitidos: false,
532
+ categoriaFalha: null,
533
+ codigoPublico: null,
534
+ };
535
+ }
536
+ const comando = argv[0];
537
+ if (!COMANDOS_PUBLICOS.has(comando))
538
+ throw erroComandoDesconhecido();
539
+ if (!sintaxeValida(comando, argv.slice(1)))
540
+ throw erroArgumentoInvalido();
541
+ return {
542
+ comando,
543
+ sintaxeValida: true,
544
+ dispatchPermitido: true,
545
+ handlerResolvido: false,
546
+ efeitosPermitidos: true,
547
+ categoriaFalha: null,
548
+ codigoPublico: null,
549
+ };
550
+ }
551
+ //# sourceMappingURL=cliGrammar.js.map
@@ -0,0 +1,13 @@
1
+ export interface ResultadoDeteccaoHelp {
2
+ readonly ajudaSolicitada: boolean;
3
+ readonly modoJson: boolean;
4
+ readonly encerrarAntesDispatch: boolean;
5
+ readonly dispatchPermitido: boolean;
6
+ readonly handlerResolvido: boolean;
7
+ readonly codigoSaida: number;
8
+ readonly helpEmQualquerPosicaoRespeitado: boolean;
9
+ }
10
+ /**
11
+ * Esta função precisa permanecer pura: ela roda antes de parsing, cwd, registry e dispatch.
12
+ */
13
+ export declare function detectarHelpAntesDispatch(argv: readonly string[]): ResultadoDeteccaoHelp;
@@ -0,0 +1,19 @@
1
+ // SEMA-GOVERNED: sema.produto.cli_invocacao_publica
2
+ // Descrição: detecta ajuda no argv bruto sem consultar ambiente, handlers ou estado externo.
3
+ const FLAGS_AJUDA = new Set(["--help", "-h"]);
4
+ /**
5
+ * Esta função precisa permanecer pura: ela roda antes de parsing, cwd, registry e dispatch.
6
+ */
7
+ export function detectarHelpAntesDispatch(argv) {
8
+ const ajudaSolicitada = argv.some((token) => FLAGS_AJUDA.has(token));
9
+ return {
10
+ ajudaSolicitada,
11
+ modoJson: argv.includes("--json"),
12
+ encerrarAntesDispatch: ajudaSolicitada,
13
+ dispatchPermitido: !ajudaSolicitada,
14
+ handlerResolvido: false,
15
+ codigoSaida: 0,
16
+ helpEmQualquerPosicaoRespeitado: true,
17
+ };
18
+ }
19
+ //# sourceMappingURL=cliHelp.js.map
@@ -0,0 +1,3 @@
1
+ export declare function renderizarCaixaAscii(linhas: readonly string[]): string;
2
+ export declare function renderizarSecaoAscii(titulo: string, linhas: readonly string[]): string;
3
+ export declare function criarAjudaRaiz(versao: string): string;