@semacode/cli 3.8.2 → 3.8.4

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.
@@ -153,8 +153,9 @@ Você está em um projeto governado por Sema. O contrato semântico vem antes de
153
153
  5. Este boot é para workspace local em disco; se não houver workspace local, pare bloqueado em vez de inventar caminho.
154
154
  6. Antes de criar módulo, rota, task ou contrato, inspecione o contrato \`.sema\` aplicável.
155
155
  7. Antes de editar código existente, rode \`sema drift --cache fresh\` e impacto pela CLI local.
156
- 8. Antes de criar ou corrigir \`.sema\`, use os exemplos oficiais na CLI local.
157
- 9. Se qualquer etapa falhar, pare e diga que está bloqueado.
156
+ 8. Para módulo novo com contrato validado, gere o andaime com \`sema compilar\` no alvo padrão, preencha a implementação real mantendo \`impl\`/\`vinculos\` e feche com \`sema verificar\`.
157
+ 9. Antes de criar ou corrigir \`.sema\`, use os exemplos oficiais na CLI local.
158
+ 10. Se qualquer etapa falhar, pare e diga que está bloqueado.
158
159
 
159
160
  Não substitua esse fluxo por leitura manual de \`AGENTS.md\`, \`README.md\`, busca local, inferência pelo nome do projeto, bom senso ou ferramenta não citada aqui.
160
161
 
@@ -446,10 +447,11 @@ Este workspace é governado por Sema. Antes de qualquer ação em código, contr
446
447
  5. Não use fonte externa de workspace para substituir a CLI local quando ela estiver operacional.
447
448
  6. Chame docs-impacto com a intenção declarada antes de agir.
448
449
  7. Chame inspecionar no contrato \`.sema\` aplicável.
449
- 8. Antes de editar código existente, rode \`sema drift --cache fresh\` e impacto.
450
- 9. Antes de criar ou editar \`.sema\`, use exemplos oficiais.
451
- 10. Ao concluir mudança de contrato, rode validar.
452
- 11. Antes de finalizar, use finalizar-mudanca com as docs lidas.
450
+ 8. Para módulo novo com contrato validado, gere o andaime com \`sema compilar <contrato> --alvo <alvoPadrao>\`, preencha a implementação real mantendo \`impl\`/\`vinculos\` e feche com \`sema verificar\`.
451
+ 9. Antes de editar código existente, rode \`sema drift --cache fresh\` e impacto.
452
+ 10. Antes de criar ou editar \`.sema\`, use exemplos oficiais.
453
+ 11. Ao concluir mudança de contrato, rode validar.
454
+ 12. Antes de finalizar, use finalizar-mudanca com as docs lidas.
453
455
 
454
456
  É proibido substituir esse fluxo por leitura manual de \`AGENTS.md\`, \`README.md\`, busca local por arquivos, inferência pelo nome do projeto, bom senso ou ferramenta não citada nesta lista.
455
457
 
@@ -657,8 +659,9 @@ This is the minimum workflow for Codex in a local workspace.
657
659
  7. If the right capability is unclear, run \`sema descobrir recomendar --intencao "<goal>" --json\`; do not auto-run ambiguous recommendations.
658
660
  8. Use \`exemplos/\` and \`docs/syntax.md\` before creating or editing a contract.
659
661
  9. Run \`sema drift --cache fresh\` and \`sema impacto\` before editing existing code.
660
- 10. Run \`sema formatar\` and \`sema validar\` after changing a \`.sema\` contract.
661
- 11. Run \`sema finalizar-mudanca\` with the documents read before closure.
662
+ 10. For a new module with a validated contract, scaffold with \`sema compilar <contract> --alvo <default target>\`, fill the real implementation keeping \`impl\`/\`vinculos\`, and close with \`sema verificar\`.
663
+ 11. Run \`sema formatar\` and \`sema validar\` after changing a \`.sema\` contract.
664
+ 12. Run \`sema finalizar-mudanca\` with the documents read before closure.
662
665
 
663
666
  Contract edit rule: \`.sema\` has its own size budget. Above ${LIMITE_AVISO_LINHAS_CONTRATO_SEMA} lines, plan a split by domain/capability; above ${LIMITE_BLOQUEIO_LINHAS_CONTRATO_SEMA}, do not create or edit before splitting. Do not use parte_1/parte_2 and do not force a 1:1 contract-to-file relationship; several contracts can govern the same file through \`vinculos\`.
664
667
 
@@ -277,6 +277,40 @@ function candidatosRotasDeterministicos(contexto, irs, diretoriosCodigo) {
277
277
  }
278
278
  return [...candidatos.values()];
279
279
  }
280
+ function candidatosRotasNextDeterministicos(contexto, irs, diretoriosCodigo) {
281
+ const candidatos = new Map();
282
+ const extensoes = [".ts", ".tsx", ".js", ".jsx"];
283
+ for (const ir of irs) {
284
+ for (const rota of ir.routes) {
285
+ const caminho = (rota.caminho ?? "").trim();
286
+ if (!caminho.startsWith("/")) {
287
+ continue;
288
+ }
289
+ const segmentos = caminho.split("/").filter(Boolean).map((segmento) => segmento.replace(/^\{(.+)\}$/u, "[$1]").replace(/^:(.+)$/u, "[$1]"));
290
+ if (segmentos.length === 0) {
291
+ continue;
292
+ }
293
+ const ultimo = segmentos.at(-1);
294
+ const intermediarios = segmentos.slice(0, -1);
295
+ const segmentosApi = segmentos[0] === "api" ? segmentos.slice(1) : segmentos;
296
+ const ultimoApi = segmentosApi.length > 0 ? segmentosApi.at(-1) : undefined;
297
+ const intermediariosApi = segmentosApi.length > 0 ? segmentosApi.slice(0, -1) : [];
298
+ for (const raiz of diretoriosCodigo) {
299
+ for (const extensao of extensoes) {
300
+ // Next.js App Router: src/app/<caminho>/route.ts e app/<caminho>/route.ts
301
+ adicionarCandidatoPreservandoForma(candidatos, contexto.baseProjeto, path.resolve(raiz, "src", "app", ...segmentos, `route${extensao}`));
302
+ adicionarCandidatoPreservandoForma(candidatos, contexto.baseProjeto, path.resolve(raiz, "app", ...segmentos, `route${extensao}`));
303
+ // Next.js Pages Router API: src/pages/api/<caminho>.ts e pages/api/<caminho>.ts
304
+ if (ultimoApi !== undefined) {
305
+ adicionarCandidatoPreservandoForma(candidatos, contexto.baseProjeto, path.resolve(raiz, "src", "pages", "api", ...intermediariosApi, `${ultimoApi}${extensao}`));
306
+ adicionarCandidatoPreservandoForma(candidatos, contexto.baseProjeto, path.resolve(raiz, "pages", "api", ...intermediariosApi, `${ultimoApi}${extensao}`));
307
+ }
308
+ }
309
+ }
310
+ }
311
+ }
312
+ return [...candidatos.values()];
313
+ }
280
314
  function candidatosConvencionaisEscopo(contexto, irs, diretoriosCodigo) {
281
315
  const candidatos = new Map();
282
316
  const adicionar = (caminho) => {
@@ -414,6 +448,7 @@ export async function planejarEscopoDrift(contexto, configuracao) {
414
448
  const candidatosDeterministicos = [
415
449
  ...candidatosConsumerDeterministicos(contexto, irs, configuracao.termosEscopo, raizesAncoradas),
416
450
  ...candidatosRotasDeterministicos(contexto, irs, raizesAncoradas),
451
+ ...candidatosRotasNextDeterministicos(contexto, irs, raizesAncoradas),
417
452
  ...candidatosConvencionaisEscopo(contexto, irs, raizesAncoradas),
418
453
  ];
419
454
  const sondagensDeterministicas = await sondarArquivosRegularesContidos(candidatosDeterministicos, raizReal);
@@ -12,8 +12,9 @@ This is the minimum workflow for Codex in a local workspace.
12
12
  7. If the right capability is unclear, run `sema descobrir recomendar --intencao "<goal>" --json`; do not auto-run ambiguous recommendations.
13
13
  8. Use `exemplos/` and `docs/syntax.md` before creating or editing a contract.
14
14
  9. Run `sema drift --cache fresh` and `sema impacto` before editing existing code.
15
- 10. Run `sema formatar` and `sema validar` after changing a `.sema` contract.
16
- 11. Run `sema finalizar-mudanca` with the documents read before closure.
15
+ 10. For a new module with a validated contract, scaffold with `sema compilar <contract> --alvo <default target>`, fill the real implementation keeping `impl`/`vinculos`, and close with `sema verificar`.
16
+ 11. Run `sema formatar` and `sema validar` after changing a `.sema` contract.
17
+ 12. Run `sema finalizar-mudanca` with the documents read before closure.
17
18
 
18
19
  Contract edit rule: `.sema` has its own size budget. Above 300 lines, plan a split by domain/capability; above 500, do not create or edit before splitting. Do not use parte_1/parte_2 and do not force a 1:1 contract-to-file relationship; several contracts can govern the same file through `vinculos`.
19
20
 
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@semacode/cli",
3
- "version": "3.8.2",
3
+ "version": "3.8.4",
4
4
  "description": "Local-first semantic governance CLI for AI agents, proven with Claude, Codex, zCode (GLM) and Kimi: contracts, drift, impact, docs gates, and code generation.",
5
5
  "type": "module",
6
6
  "icon": "logo.png",