expxdev 0.5.0 → 0.5.2
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.
- package/dist/cli/autonomo.d.ts +21 -0
- package/dist/cli/autonomo.js +37 -0
- package/dist/cli/autonomo.js.map +1 -0
- package/dist/cli/expx.js +4 -0
- package/dist/cli/expx.js.map +1 -1
- package/dist/cli/init.js +39 -5
- package/dist/cli/init.js.map +1 -1
- package/dist/cli/principal.js +10 -5
- package/dist/cli/principal.js.map +1 -1
- package/dist/cli/subcomandos.d.ts +3 -0
- package/dist/cli/subcomandos.js +6 -0
- package/dist/cli/subcomandos.js.map +1 -1
- package/dist/harness/hooks.d.ts +9 -4
- package/dist/harness/hooks.js +34 -3
- package/dist/harness/hooks.js.map +1 -1
- package/dist/harness/instalar.d.ts +19 -0
- package/dist/harness/instalar.js +42 -1
- package/dist/harness/instalar.js.map +1 -1
- package/dist/harness/settings.js +6 -0
- package/dist/harness/settings.js.map +1 -1
- package/dist/nucleo/busca.d.ts +8 -0
- package/dist/nucleo/busca.js +27 -2
- package/dist/nucleo/busca.js.map +1 -1
- package/dist/nucleo/catalogo.d.ts +7 -1
- package/dist/nucleo/catalogo.js +73 -9
- package/dist/nucleo/catalogo.js.map +1 -1
- package/dist/nucleo/layout.d.ts +8 -0
- package/dist/nucleo/layout.js +22 -0
- package/dist/nucleo/layout.js.map +1 -1
- package/dist/parser/descoberta/trabalhos.d.ts +14 -2
- package/dist/parser/descoberta/trabalhos.js +59 -0
- package/dist/parser/descoberta/trabalhos.js.map +1 -1
- package/dist/parser/esquema/cabecalho.d.ts +21 -5
- package/dist/parser/esquema/cabecalho.js +24 -5
- package/dist/parser/esquema/cabecalho.js.map +1 -1
- package/dist/parser/esquema/enums.d.ts +41 -4
- package/dist/parser/esquema/enums.js +39 -9
- package/dist/parser/esquema/enums.js.map +1 -1
- package/dist/parser/esquema/evento.d.ts +1 -0
- package/dist/parser/esquema/kinds.d.ts +288 -0
- package/dist/parser/esquema/kinds.js +84 -1
- package/dist/parser/esquema/kinds.js.map +1 -1
- package/dist/plugin/montagem.d.ts +5 -0
- package/dist/plugin/montagem.js +67 -1
- package/dist/plugin/montagem.js.map +1 -1
- package/dist/servidor/http.d.ts +5 -0
- package/dist/servidor/http.js +28 -0
- package/dist/servidor/http.js.map +1 -1
- package/dist/servidor/observador.d.ts +27 -1
- package/dist/servidor/observador.js +152 -19
- package/dist/servidor/observador.js.map +1 -1
- package/dist/servidor/painel.js +13 -3
- package/dist/servidor/painel.js.map +1 -1
- package/dist/update/comparar.js +2 -2
- package/dist/update/comparar.js.map +1 -1
- package/dist/watch/desenho/barra.d.ts +29 -0
- package/dist/watch/desenho/barra.js +111 -0
- package/dist/watch/desenho/barra.js.map +1 -0
- package/dist/watch/desenho/desenhar.d.ts +15 -2
- package/dist/watch/desenho/desenhar.js +65 -11
- package/dist/watch/desenho/desenhar.js.map +1 -1
- package/dist/watch/desenho/painel.d.ts +14 -0
- package/dist/watch/desenho/painel.js +260 -0
- package/dist/watch/desenho/painel.js.map +1 -0
- package/dist/watch/fontes/estado-schema.d.ts +7 -0
- package/dist/watch/opcoes.d.ts +2 -0
- package/dist/watch/opcoes.js +11 -4
- package/dist/watch/opcoes.js.map +1 -1
- package/dist/watch/terminal/tela.d.ts +15 -12
- package/dist/watch/terminal/tela.js +79 -3
- package/dist/watch/terminal/tela.js.map +1 -1
- package/dist/watch/visao/atividade.d.ts +70 -0
- package/dist/watch/visao/atividade.js +0 -0
- package/dist/watch/visao/atividade.js.map +1 -0
- package/dist/watch/visao/frota.d.ts +46 -0
- package/dist/watch/visao/frota.js +67 -0
- package/dist/watch/visao/frota.js.map +1 -0
- package/dist/watch/visao/projetar.d.ts +9 -0
- package/dist/watch/visao/projetar.js +55 -0
- package/dist/watch/visao/projetar.js.map +1 -1
- package/dist/watch/watch.d.ts +2 -0
- package/dist/watch/watch.js +48 -3
- package/dist/watch/watch.js.map +1 -1
- package/nucleo/hooks/expx-lembrete.sh +136 -0
- package/package.json +1 -1
|
@@ -1,10 +1,16 @@
|
|
|
1
1
|
/**
|
|
2
|
-
* As
|
|
2
|
+
* As oito skills do ecossistema Expx.
|
|
3
3
|
*
|
|
4
4
|
* Fonte única do que o CLI sabe instalar. `papel` é o texto mostrado na seleção
|
|
5
5
|
* do `init`; `camada` marca as skills que, sozinhas, não fazem nada — elas
|
|
6
6
|
* modificam o comportamento da sprintx/runx em vez de agir por conta própria
|
|
7
7
|
* (ver `docs/expx-cli/base/08-repositorios-reais.md`).
|
|
8
|
+
*
|
|
9
|
+
* A buildx não é camada, e também não é irmã das outras: ela ORQUESTRA a
|
|
10
|
+
* sprintx e a mergex feature a feature. Sem elas instaladas não roda — mas o
|
|
11
|
+
* `init` não modela dependência entre skills, e criar esse conceito por uma
|
|
12
|
+
* única aresta custaria mais do que a skill avisar em tempo de execução, que é
|
|
13
|
+
* o que ela faz.
|
|
8
14
|
*/
|
|
9
15
|
export type Skill = {
|
|
10
16
|
nome: string;
|
package/dist/nucleo/catalogo.js
CHANGED
|
@@ -1,11 +1,5 @@
|
|
|
1
|
-
|
|
2
|
-
|
|
3
|
-
*
|
|
4
|
-
* Fonte única do que o CLI sabe instalar. `papel` é o texto mostrado na seleção
|
|
5
|
-
* do `init`; `camada` marca as skills que, sozinhas, não fazem nada — elas
|
|
6
|
-
* modificam o comportamento da sprintx/runx em vez de agir por conta própria
|
|
7
|
-
* (ver `docs/expx-cli/base/08-repositorios-reais.md`).
|
|
8
|
-
*/
|
|
1
|
+
import { readdirSync, statSync } from "node:fs";
|
|
2
|
+
import { join } from "node:path";
|
|
9
3
|
export const CATALOGO = [
|
|
10
4
|
{
|
|
11
5
|
nome: "sprintx",
|
|
@@ -49,11 +43,81 @@ export const CATALOGO = [
|
|
|
49
43
|
papel: "camada de produto, decide se o pedido vira trabalho",
|
|
50
44
|
camada: true,
|
|
51
45
|
},
|
|
46
|
+
{
|
|
47
|
+
nome: "buildx",
|
|
48
|
+
repositorio: "https://github.com/bittencourtthulio/buildx",
|
|
49
|
+
papel: "orquestra um projeto inteiro, da descricao ao sistema pronto",
|
|
50
|
+
camada: false,
|
|
51
|
+
},
|
|
52
52
|
];
|
|
53
53
|
/** Os nomes na ordem em que a seleção do `init` os apresenta. */
|
|
54
54
|
export const NOMES = CATALOGO.map((s) => s.nome);
|
|
55
|
+
/**
|
|
56
|
+
* As pastas em que uma skill pode estar, dentro da raiz de desenvolvimento.
|
|
57
|
+
*
|
|
58
|
+
* Os repositórios reais não seguem uma capitalização só (`RunX`, `MemoX`,
|
|
59
|
+
* `SprintX`, mas `Legadox` e `ProdX`), e o macOS não diferencia maiúscula de
|
|
60
|
+
* minúscula enquanto o Linux diferencia. Tentar as variações torna o override
|
|
61
|
+
* previsível nos dois sistemas.
|
|
62
|
+
*/
|
|
63
|
+
function candidatasLocais(nome) {
|
|
64
|
+
const capitalizado = nome.charAt(0).toUpperCase() + nome.slice(1);
|
|
65
|
+
const camelX = capitalizado.replace(/x$/, "X");
|
|
66
|
+
return [...new Set([nome, capitalizado, camelX])];
|
|
67
|
+
}
|
|
68
|
+
/**
|
|
69
|
+
* A raiz onde procurar clones locais das skills, quando definida.
|
|
70
|
+
*
|
|
71
|
+
* Serve ao desenvolvimento das próprias skills: sem isto, testar uma alteração
|
|
72
|
+
* num projeto real exige commitar e publicar a cada tentativa, porque o `init`
|
|
73
|
+
* só sabe clonar do GitHub.
|
|
74
|
+
*
|
|
75
|
+
* EXPX_SKILLS_LOCAIS=~/Documents/Projetos npx expxdev init --skills runx --yes
|
|
76
|
+
*
|
|
77
|
+
* Não é um caminho de código novo na busca: `git clone` aceita caminho de
|
|
78
|
+
* sistema de arquivos como origem, então a skill local percorre exatamente o
|
|
79
|
+
* mesmo fluxo da remota — mesmo clone, mesmo commit registrado no lock, mesma
|
|
80
|
+
* montagem. O que muda é só a origem.
|
|
81
|
+
*/
|
|
82
|
+
function raizLocal() {
|
|
83
|
+
const v = process.env["EXPX_SKILLS_LOCAIS"];
|
|
84
|
+
return v === undefined || v.trim() === "" ? undefined : v.trim();
|
|
85
|
+
}
|
|
55
86
|
export function buscarNoCatalogo(nome) {
|
|
56
|
-
|
|
87
|
+
const s = CATALOGO.find((x) => x.nome === nome);
|
|
88
|
+
if (s === undefined)
|
|
89
|
+
return undefined;
|
|
90
|
+
const raiz = raizLocal();
|
|
91
|
+
if (raiz === undefined)
|
|
92
|
+
return s;
|
|
93
|
+
// A pasta é procurada na LISTAGEM, e não com `statSync` em cada candidata:
|
|
94
|
+
// no macOS, que não diferencia maiúscula de minúscula, `statSync("runx")`
|
|
95
|
+
// encontra a pasta `RunX` e devolveria um caminho com a grafia errada — que
|
|
96
|
+
// funciona no mac e quebra no Linux, o pior dos dois mundos.
|
|
97
|
+
let entradas;
|
|
98
|
+
try {
|
|
99
|
+
entradas = readdirSync(raiz);
|
|
100
|
+
}
|
|
101
|
+
catch {
|
|
102
|
+
return s; // raiz local inexistente: segue pelo GitHub
|
|
103
|
+
}
|
|
104
|
+
// Pasta ausente cai de volta para o GitHub em vez de falhar: a raiz local
|
|
105
|
+
// costuma ter só as skills em que se está mexendo, e uma origem inexistente
|
|
106
|
+
// produziria erro de clone — que se leria como falha de rede, escondendo a
|
|
107
|
+
// causa real.
|
|
108
|
+
for (const c of candidatasLocais(nome)) {
|
|
109
|
+
if (!entradas.includes(c))
|
|
110
|
+
continue;
|
|
111
|
+
const caminho = join(raiz, c);
|
|
112
|
+
try {
|
|
113
|
+
if (statSync(caminho).isDirectory())
|
|
114
|
+
return { ...s, repositorio: caminho };
|
|
115
|
+
}
|
|
116
|
+
catch {
|
|
117
|
+
continue;
|
|
118
|
+
}
|
|
119
|
+
}
|
|
120
|
+
return s;
|
|
57
121
|
}
|
|
58
122
|
/** Camada é skill que sozinha não faz nada: precisa de sprintx ou runx junto. */
|
|
59
123
|
export function ehCamada(nome) {
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"catalogo.js","sourceRoot":"","sources":["../../src/nucleo/catalogo.ts"],"names":[],"mappings":"AAAA
|
|
1
|
+
{"version":3,"file":"catalogo.js","sourceRoot":"","sources":["../../src/nucleo/catalogo.ts"],"names":[],"mappings":"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"}
|
package/dist/nucleo/layout.d.ts
CHANGED
|
@@ -17,6 +17,14 @@ export type Layout = {
|
|
|
17
17
|
raizSkill: string;
|
|
18
18
|
comandos: string[];
|
|
19
19
|
hooks: string[];
|
|
20
|
+
/**
|
|
21
|
+
* A pasta de hooks do repositório inteira (`.claude/hooks/`), quando ela
|
|
22
|
+
* existe. É o que o plugin precisa levar: os hooks reais das skills vivem
|
|
23
|
+
* em SUBPASTAS (`hooks/runx/`, `hooks/comum/`) e são chamados por um
|
|
24
|
+
* despachante que referencia esses caminhos. Copiar só os arquivos soltos
|
|
25
|
+
* de `hooks` deixava o plugin sem nenhum hook — medido em produção.
|
|
26
|
+
*/
|
|
27
|
+
arvoreHooks?: string;
|
|
20
28
|
} | {
|
|
21
29
|
ok: false;
|
|
22
30
|
erro: string;
|
package/dist/nucleo/layout.js
CHANGED
|
@@ -89,6 +89,26 @@ function acharHooks(raiz, nome) {
|
|
|
89
89
|
}
|
|
90
90
|
return [];
|
|
91
91
|
}
|
|
92
|
+
/**
|
|
93
|
+
* A pasta de hooks do repositório, quando existe.
|
|
94
|
+
*
|
|
95
|
+
* Devolve o DIRETÓRIO, não os arquivos: os hooks reais são chamados por um
|
|
96
|
+
* despachante com caminhos relativos (`comum/rastro`, `runx/escopo-da-task`),
|
|
97
|
+
* então a estrutura tem que chegar inteira ao plugin ou nenhum deles resolve.
|
|
98
|
+
*/
|
|
99
|
+
function acharArvoreHooks(raiz) {
|
|
100
|
+
for (const c of CANDIDATAS_HOOKS) {
|
|
101
|
+
const dir = join(raiz, c);
|
|
102
|
+
try {
|
|
103
|
+
if (statSync(dir).isDirectory())
|
|
104
|
+
return dir;
|
|
105
|
+
}
|
|
106
|
+
catch {
|
|
107
|
+
continue;
|
|
108
|
+
}
|
|
109
|
+
}
|
|
110
|
+
return undefined;
|
|
111
|
+
}
|
|
92
112
|
export function detectarLayout(raizRepo, nomeEsperado) {
|
|
93
113
|
const skillMd = acharSkillMd(raizRepo);
|
|
94
114
|
if (skillMd === undefined)
|
|
@@ -98,12 +118,14 @@ export function detectarLayout(raizRepo, nomeEsperado) {
|
|
|
98
118
|
if (nome !== nomeEsperado) {
|
|
99
119
|
return { ok: false, erro: `nome da skill e "${nome}", esperado "${nomeEsperado}"` };
|
|
100
120
|
}
|
|
121
|
+
const arvore = acharArvoreHooks(raizRepo);
|
|
101
122
|
return {
|
|
102
123
|
ok: true,
|
|
103
124
|
nome,
|
|
104
125
|
raizSkill,
|
|
105
126
|
comandos: acharComandos(raizRepo, nome),
|
|
106
127
|
hooks: acharHooks(raizRepo, nome),
|
|
128
|
+
...(arvore !== undefined ? { arvoreHooks: arvore } : {}),
|
|
107
129
|
};
|
|
108
130
|
}
|
|
109
131
|
//# sourceMappingURL=layout.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"layout.js","sourceRoot":"","sources":["../../src/nucleo/layout.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,UAAU,EAAE,WAAW,EAAE,YAAY,EAAE,QAAQ,EAAE,MAAM,SAAS,CAAC;AAC1E,OAAO,EAAE,QAAQ,EAAE,IAAI,EAAE,MAAM,WAAW,CAAC;
|
|
1
|
+
{"version":3,"file":"layout.js","sourceRoot":"","sources":["../../src/nucleo/layout.ts"],"names":[],"mappings":"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"}
|
|
@@ -6,8 +6,20 @@ import type { ExpxTool, Estagio, StatusTrabalho, TipoTrabalho, TipoOcorrencia }
|
|
|
6
6
|
* `docs/manutencao/<id>-<slug>/` descreve onde as skills gravam, não uma
|
|
7
7
|
* restrição de busca.
|
|
8
8
|
*
|
|
9
|
-
* Pasta sem ORQUESTRADOR é ignorada em silêncio
|
|
10
|
-
* pastas legítimas que não são trabalho.
|
|
9
|
+
* Pasta sem ORQUESTRADOR **nem** `00-OCORRENCIA.md` é ignorada em silêncio
|
|
10
|
+
* (decisão D-12): `docs/` tem pastas legítimas que não são trabalho.
|
|
11
|
+
*
|
|
12
|
+
* ## Por que o `00-OCORRENCIA.md` também abre trabalho
|
|
13
|
+
*
|
|
14
|
+
* O `ORQUESTRADOR.md` só nasce no E2 (`references/02-plano.md`, passo 4). Entre
|
|
15
|
+
* o E1 e o E2 a ocorrência já existe em disco, já tem id, título e ferramenta —
|
|
16
|
+
* e era invisível ao painel e ao watch, que anunciavam "nenhum trabalho aberto"
|
|
17
|
+
* enquanto a investigação rodava. Essa é justamente a janela em que a pessoa
|
|
18
|
+
* mais olha a tela, e a que mais leva tempo.
|
|
19
|
+
*
|
|
20
|
+
* O orquestrador continua sendo a fonte autoritativa: quando ele existe, é ele
|
|
21
|
+
* que descreve o trabalho. A ocorrência só preenche a lacuna do período em que
|
|
22
|
+
* ele ainda não foi escrito, com o que o próprio `00-OCORRENCIA.md` declara.
|
|
11
23
|
*/
|
|
12
24
|
export type Trabalho = {
|
|
13
25
|
trabalho_id: string;
|
|
@@ -1,10 +1,54 @@
|
|
|
1
1
|
import { basename, dirname } from "node:path";
|
|
2
2
|
import { varrerCandidatos } from "./varredura.js";
|
|
3
3
|
import { lerArquivoDeEstado } from "../leitura/arquivo.js";
|
|
4
|
+
/**
|
|
5
|
+
* O estágio de uma ocorrência ainda sem plano, deduzido do que há na pasta.
|
|
6
|
+
*
|
|
7
|
+
* Só existem dois casos possíveis aqui — com `ORQUESTRADOR.md` o trabalho nem
|
|
8
|
+
* chega nesta função. O `01-CAUSA-RAIZ.md` é o artefato que fecha o E1
|
|
9
|
+
* (`references/01-investigacao.md`), então a presença dele é a fronteira.
|
|
10
|
+
*/
|
|
11
|
+
function estagioSemPlano(pasta, aceitos) {
|
|
12
|
+
const temCausaRaiz = aceitos.some((a) => a.kind === "causa_raiz" && dirname(a.arquivo) === pasta);
|
|
13
|
+
return temCausaRaiz ? "e2" : "e1";
|
|
14
|
+
}
|
|
15
|
+
/**
|
|
16
|
+
* Constrói o trabalho a partir do `00-OCORRENCIA.md`, para o período em que o
|
|
17
|
+
* `ORQUESTRADOR.md` ainda não existe.
|
|
18
|
+
*
|
|
19
|
+
* Os campos que só o plano conhece recebem o valor de "ainda não há": nenhuma
|
|
20
|
+
* sprint declarada, nenhum caminho crítico, nada concluído. `status` é
|
|
21
|
+
* `em_andamento` porque uma ocorrência registrada e sem plano é exatamente
|
|
22
|
+
* isso — trabalho aberto, e é o que a tela precisa dizer.
|
|
23
|
+
*/
|
|
24
|
+
function daOcorrencia(a, aceitos) {
|
|
25
|
+
const d = a.dados;
|
|
26
|
+
const pasta = dirname(a.arquivo);
|
|
27
|
+
const recebido = d["recebido_em"] ?? "";
|
|
28
|
+
return {
|
|
29
|
+
trabalho_id: String(d["trabalho_id"] ?? ""),
|
|
30
|
+
titulo: String(d["titulo"] ?? ""),
|
|
31
|
+
pasta,
|
|
32
|
+
arquivo: a.arquivo,
|
|
33
|
+
expx_tool: d["expx_tool"] ?? "runx",
|
|
34
|
+
tipo_trabalho: "ocorrencia",
|
|
35
|
+
tipo_ocorrencia: d["tipo_ocorrencia"] ?? null,
|
|
36
|
+
estagio: estagioSemPlano(pasta, aceitos),
|
|
37
|
+
status: "em_andamento",
|
|
38
|
+
criado_em: recebido,
|
|
39
|
+
atualizado_em: d["atualizado_em"] ?? recebido,
|
|
40
|
+
concluido_em: null,
|
|
41
|
+
sprints: [],
|
|
42
|
+
caminho_critico: [],
|
|
43
|
+
linhas: a.linhas,
|
|
44
|
+
};
|
|
45
|
+
}
|
|
4
46
|
export function descobrirTrabalhos(raiz) {
|
|
5
47
|
const trabalhos = [];
|
|
6
48
|
const rejeicoes = [];
|
|
7
49
|
const aceitos = [];
|
|
50
|
+
/** As ocorrências vistas, para completar as pastas que não têm plano. */
|
|
51
|
+
const ocorrencias = [];
|
|
8
52
|
for (const caminho of varrerCandidatos(raiz)) {
|
|
9
53
|
const r = lerArquivoDeEstado(caminho);
|
|
10
54
|
if (r.tipo === "rejeitado") {
|
|
@@ -12,6 +56,10 @@ export function descobrirTrabalhos(raiz) {
|
|
|
12
56
|
continue;
|
|
13
57
|
}
|
|
14
58
|
aceitos.push(r);
|
|
59
|
+
if (r.kind === "ocorrencia" && basename(caminho) === "00-OCORRENCIA.md") {
|
|
60
|
+
ocorrencias.push(r);
|
|
61
|
+
continue;
|
|
62
|
+
}
|
|
15
63
|
if (r.kind !== "orquestrador" || basename(caminho) !== "ORQUESTRADOR.md")
|
|
16
64
|
continue;
|
|
17
65
|
const d = r.dados;
|
|
@@ -22,6 +70,17 @@ export function descobrirTrabalhos(raiz) {
|
|
|
22
70
|
linhas: r.linhas,
|
|
23
71
|
});
|
|
24
72
|
}
|
|
73
|
+
// O orquestrador é a fonte autoritativa: a ocorrência só entra quando a
|
|
74
|
+
// pasta dela ainda não tem plano. Comparar por PASTA, e não por
|
|
75
|
+
// `trabalho_id`, porque o id da ocorrência pode divergir do plano por erro
|
|
76
|
+
// de digitação — e nesse caso duplicar a linha na tela esconderia o defeito
|
|
77
|
+
// em vez de mostrá-lo.
|
|
78
|
+
const comPlano = new Set(trabalhos.map((t) => t.pasta));
|
|
79
|
+
for (const o of ocorrencias) {
|
|
80
|
+
if (comPlano.has(dirname(o.arquivo)))
|
|
81
|
+
continue;
|
|
82
|
+
trabalhos.push(daOcorrencia(o, aceitos));
|
|
83
|
+
}
|
|
25
84
|
trabalhos.sort((a, b) => a.trabalho_id.localeCompare(b.trabalho_id));
|
|
26
85
|
return { trabalhos, rejeicoes, aceitos };
|
|
27
86
|
}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"trabalhos.js","sourceRoot":"","sources":["../../../src/parser/descoberta/trabalhos.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,QAAQ,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AAC9C,OAAO,EAAE,gBAAgB,EAAE,MAAM,gBAAgB,CAAC;AAClD,OAAO,EAAE,kBAAkB,EAAE,MAAM,uBAAuB,CAAC;
|
|
1
|
+
{"version":3,"file":"trabalhos.js","sourceRoot":"","sources":["../../../src/parser/descoberta/trabalhos.ts"],"names":[],"mappings":"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"}
|
|
@@ -1,8 +1,8 @@
|
|
|
1
1
|
import { z } from "zod";
|
|
2
2
|
/** Versão do contrato que este painel sabe ler (decisão D-09). */
|
|
3
3
|
export declare const VERSAO_SUPORTADA = 1;
|
|
4
|
-
/** Os
|
|
5
|
-
export declare const KINDS: readonly ["orquestrador", "sprint", "fases", "tasks", "bloqueios", "decisoes", "ocorrencia", "causa_raiz", "qa", "base_indice", "relatorio_tecnico", "relatorio_uso", "relatorios_indice"];
|
|
4
|
+
/** Os dezenove kinds que o painel reconhece. */
|
|
5
|
+
export declare const KINDS: readonly ["orquestrador", "sprint", "fases", "tasks", "bloqueios", "decisoes", "ocorrencia", "causa_raiz", "qa", "base_indice", "relatorio_tecnico", "relatorio_uso", "relatorios_indice", "projeto", "premissas", "mapa", "recursao", "validacao", "relatorio"];
|
|
6
6
|
export declare const Kind: z.ZodEnum<{
|
|
7
7
|
ocorrencia: "ocorrencia";
|
|
8
8
|
causa_raiz: "causa_raiz";
|
|
@@ -17,12 +17,21 @@ export declare const Kind: z.ZodEnum<{
|
|
|
17
17
|
relatorio_tecnico: "relatorio_tecnico";
|
|
18
18
|
relatorio_uso: "relatorio_uso";
|
|
19
19
|
relatorios_indice: "relatorios_indice";
|
|
20
|
+
projeto: "projeto";
|
|
21
|
+
premissas: "premissas";
|
|
22
|
+
mapa: "mapa";
|
|
23
|
+
recursao: "recursao";
|
|
24
|
+
validacao: "validacao";
|
|
25
|
+
relatorio: "relatorio";
|
|
20
26
|
}>;
|
|
21
27
|
export type Kind = z.infer<typeof Kind>;
|
|
22
28
|
/**
|
|
23
|
-
*
|
|
24
|
-
*
|
|
25
|
-
*
|
|
29
|
+
* Kinds sem `trabalho_id`. Exigir as quatro chaves cegamente rejeitaria
|
|
30
|
+
* justamente as fontes que descrevem o sistema inteiro.
|
|
31
|
+
*
|
|
32
|
+
* Dois casos distintos: `relatorios_indice` é o índice de todos os trabalhos;
|
|
33
|
+
* os seis da buildx são o estado do PROJETO, um nível acima de trabalho, e
|
|
34
|
+
* usam `projeto_id` como chave.
|
|
26
35
|
*/
|
|
27
36
|
export declare const KINDS_SEM_TRABALHO_ID: readonly Kind[];
|
|
28
37
|
/**
|
|
@@ -35,6 +44,7 @@ export declare const Cabecalho: z.ZodObject<{
|
|
|
35
44
|
expx_tool: z.ZodEnum<{
|
|
36
45
|
sprintx: "sprintx";
|
|
37
46
|
runx: "runx";
|
|
47
|
+
buildx: "buildx";
|
|
38
48
|
}>;
|
|
39
49
|
kind: z.ZodEnum<{
|
|
40
50
|
ocorrencia: "ocorrencia";
|
|
@@ -50,6 +60,12 @@ export declare const Cabecalho: z.ZodObject<{
|
|
|
50
60
|
relatorio_tecnico: "relatorio_tecnico";
|
|
51
61
|
relatorio_uso: "relatorio_uso";
|
|
52
62
|
relatorios_indice: "relatorios_indice";
|
|
63
|
+
projeto: "projeto";
|
|
64
|
+
premissas: "premissas";
|
|
65
|
+
mapa: "mapa";
|
|
66
|
+
recursao: "recursao";
|
|
67
|
+
validacao: "validacao";
|
|
68
|
+
relatorio: "relatorio";
|
|
53
69
|
}>;
|
|
54
70
|
trabalho_id: z.ZodOptional<z.ZodString>;
|
|
55
71
|
}, z.core.$loose>;
|
|
@@ -2,7 +2,7 @@ import { z } from "zod";
|
|
|
2
2
|
import { ExpxTool } from "./enums.js";
|
|
3
3
|
/** Versão do contrato que este painel sabe ler (decisão D-09). */
|
|
4
4
|
export const VERSAO_SUPORTADA = 1;
|
|
5
|
-
/** Os
|
|
5
|
+
/** Os dezenove kinds que o painel reconhece. */
|
|
6
6
|
export const KINDS = [
|
|
7
7
|
"orquestrador",
|
|
8
8
|
"sprint",
|
|
@@ -17,14 +17,33 @@ export const KINDS = [
|
|
|
17
17
|
"relatorio_tecnico",
|
|
18
18
|
"relatorio_uso",
|
|
19
19
|
"relatorios_indice",
|
|
20
|
+
// buildx — estado do PROJETO, não de um trabalho. Por isso nenhum deles tem
|
|
21
|
+
// `trabalho_id`: a chave que os costura é `projeto_id`.
|
|
22
|
+
"projeto",
|
|
23
|
+
"premissas",
|
|
24
|
+
"mapa",
|
|
25
|
+
"recursao",
|
|
26
|
+
"validacao",
|
|
27
|
+
"relatorio",
|
|
20
28
|
];
|
|
21
29
|
export const Kind = z.enum(KINDS);
|
|
22
30
|
/**
|
|
23
|
-
*
|
|
24
|
-
*
|
|
25
|
-
*
|
|
31
|
+
* Kinds sem `trabalho_id`. Exigir as quatro chaves cegamente rejeitaria
|
|
32
|
+
* justamente as fontes que descrevem o sistema inteiro.
|
|
33
|
+
*
|
|
34
|
+
* Dois casos distintos: `relatorios_indice` é o índice de todos os trabalhos;
|
|
35
|
+
* os seis da buildx são o estado do PROJETO, um nível acima de trabalho, e
|
|
36
|
+
* usam `projeto_id` como chave.
|
|
26
37
|
*/
|
|
27
|
-
export const KINDS_SEM_TRABALHO_ID = [
|
|
38
|
+
export const KINDS_SEM_TRABALHO_ID = [
|
|
39
|
+
"relatorios_indice",
|
|
40
|
+
"projeto",
|
|
41
|
+
"premissas",
|
|
42
|
+
"mapa",
|
|
43
|
+
"recursao",
|
|
44
|
+
"validacao",
|
|
45
|
+
"relatorio",
|
|
46
|
+
];
|
|
28
47
|
/**
|
|
29
48
|
* O cabeçalho comum. `expx_schema` é validado como número; a rejeição por
|
|
30
49
|
* versão futura é tratada à parte, com motivo próprio, para dar a mensagem
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"cabecalho.js","sourceRoot":"","sources":["../../../src/parser/esquema/cabecalho.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAC;AACxB,OAAO,EAAE,QAAQ,EAAE,MAAM,YAAY,CAAC;AAEtC,kEAAkE;AAClE,MAAM,CAAC,MAAM,gBAAgB,GAAG,CAAC,CAAC;AAElC,
|
|
1
|
+
{"version":3,"file":"cabecalho.js","sourceRoot":"","sources":["../../../src/parser/esquema/cabecalho.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAC;AACxB,OAAO,EAAE,QAAQ,EAAE,MAAM,YAAY,CAAC;AAEtC,kEAAkE;AAClE,MAAM,CAAC,MAAM,gBAAgB,GAAG,CAAC,CAAC;AAElC,gDAAgD;AAChD,MAAM,CAAC,MAAM,KAAK,GAAG;IACnB,cAAc;IACd,QAAQ;IACR,OAAO;IACP,OAAO;IACP,WAAW;IACX,UAAU;IACV,YAAY;IACZ,YAAY;IACZ,IAAI;IACJ,aAAa;IACb,mBAAmB;IACnB,eAAe;IACf,mBAAmB;IACnB,4EAA4E;IAC5E,wDAAwD;IACxD,SAAS;IACT,WAAW;IACX,MAAM;IACN,UAAU;IACV,WAAW;IACX,WAAW;CACH,CAAC;AAEX,MAAM,CAAC,MAAM,IAAI,GAAG,CAAC,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC;AAGlC;;;;;;;GAOG;AACH,MAAM,CAAC,MAAM,qBAAqB,GAAoB;IACpD,mBAAmB;IACnB,SAAS;IACT,WAAW;IACX,MAAM;IACN,UAAU;IACV,WAAW;IACX,WAAW;CACZ,CAAC;AAEF;;;;GAIG;AACH,MAAM,CAAC,MAAM,SAAS,GAAG,CAAC;KACvB,MAAM,CAAC;IACN,WAAW,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,GAAG,EAAE;IAC7B,SAAS,EAAE,QAAQ;IACnB,IAAI,EAAE,IAAI;IACV,WAAW,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,IAAI,EAAE,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,QAAQ,EAAE;CACjD,CAAC;KACD,WAAW,EAAE;KACb,MAAM,CACL,CAAC,CAAC,EAAE,EAAE,CAAC,qBAAqB,CAAC,QAAQ,CAAC,CAAC,CAAC,IAAI,CAAC,IAAI,OAAO,CAAC,CAAC,WAAW,KAAK,QAAQ,EAClF,EAAE,OAAO,EAAE,sCAAsC,EAAE,IAAI,EAAE,CAAC,aAAa,CAAC,EAAE,CAC3E,CAAC;AAIJ,qFAAqF;AACrF,MAAM,UAAU,OAAO,CAAC,KAAc;IACpC,IAAI,OAAO,KAAK,KAAK,QAAQ,IAAI,KAAK,KAAK,IAAI;QAAE,OAAO,IAAI,CAAC;IAC7D,MAAM,CAAC,GAAI,KAAiC,CAAC,MAAM,CAAC,CAAC;IACrD,MAAM,CAAC,GAAG,IAAI,CAAC,SAAS,CAAC,CAAC,CAAC,CAAC;IAC5B,OAAO,CAAC,CAAC,OAAO,CAAC,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,IAAI,CAAC;AACnC,CAAC;AAED,+DAA+D;AAC/D,MAAM,UAAU,SAAS,CAAC,KAAc;IACtC,IAAI,OAAO,KAAK,KAAK,QAAQ,IAAI,KAAK,KAAK,IAAI;QAAE,OAAO,IAAI,CAAC;IAC7D,MAAM,CAAC,GAAI,KAAiC,CAAC,aAAa,CAAC,CAAC;IAC5D,OAAO,OAAO,CAAC,KAAK,QAAQ,IAAI,MAAM,CAAC,SAAS,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC;AACjE,CAAC"}
|
|
@@ -12,23 +12,31 @@ import { z } from "zod";
|
|
|
12
12
|
* status de trabalho, sprint e fase usa o masculino (`concluido`, `bloqueado`).
|
|
13
13
|
*/
|
|
14
14
|
/**
|
|
15
|
-
* `expx_tool` — quem ESCREVEU um artefato de estado.
|
|
16
|
-
* escrevem frontmatter `expx-schema`; as demais skills do método não têm
|
|
17
|
-
* próprio nesse contrato.
|
|
15
|
+
* `expx_tool` — quem ESCREVEU um artefato de estado. A sprintx, a runx e a
|
|
16
|
+
* buildx escrevem frontmatter `expx-schema`; as demais skills do método não têm
|
|
17
|
+
* kind próprio nesse contrato.
|
|
18
|
+
*
|
|
19
|
+
* A buildx entrou depois das outras duas: ela grava o estado do PROJETO
|
|
20
|
+
* (`projeto`, `mapa`, `premissas`, `recursao`, `validacao`, `relatorio`),
|
|
21
|
+
* enquanto sprintx e runx gravam o estado de um TRABALHO. São níveis
|
|
22
|
+
* diferentes, e por isso a buildx tem estágios próprios (`b1`..`b6`) em vez de
|
|
23
|
+
* reusar os de feature ou de ocorrência.
|
|
18
24
|
*
|
|
19
25
|
* Não confundir com `ferramenta`, do rastro de eventos (`Ferramenta`, abaixo),
|
|
20
|
-
* que aceita as
|
|
26
|
+
* que aceita as oito. Tratar os dois como o mesmo enum rejeita o rastro de
|
|
21
27
|
* cinco skills.
|
|
22
28
|
*/
|
|
23
29
|
export declare const ExpxTool: z.ZodEnum<{
|
|
24
30
|
sprintx: "sprintx";
|
|
25
31
|
runx: "runx";
|
|
32
|
+
buildx: "buildx";
|
|
26
33
|
}>;
|
|
27
34
|
export type ExpxTool = z.infer<typeof ExpxTool>;
|
|
28
35
|
/** `ferramenta` — quem EMITIU um evento no rastro. Todas as skills emitem. */
|
|
29
36
|
export declare const Ferramenta: z.ZodEnum<{
|
|
30
37
|
sprintx: "sprintx";
|
|
31
38
|
runx: "runx";
|
|
39
|
+
buildx: "buildx";
|
|
32
40
|
mergex: "mergex";
|
|
33
41
|
legadox: "legadox";
|
|
34
42
|
stackx: "stackx";
|
|
@@ -55,6 +63,8 @@ export type TipoOcorrencia = z.infer<typeof TipoOcorrencia>;
|
|
|
55
63
|
export declare const ESTAGIOS_SPRINTX: readonly ["f1", "f2", "f3", "f4", "f5", "f6"];
|
|
56
64
|
/** Estágios da runx: E1 investigação → E5 relatório. */
|
|
57
65
|
export declare const ESTAGIOS_RUNX: readonly ["e1", "e2", "e3", "e4", "e5"];
|
|
66
|
+
/** Estágios da buildx: B1 concepção → B6 validação. */
|
|
67
|
+
export declare const ESTAGIOS_BUILDX: readonly ["b1", "b2", "b3", "b4", "b5", "b6"];
|
|
58
68
|
export declare const Estagio: z.ZodEnum<{
|
|
59
69
|
f1: "f1";
|
|
60
70
|
f2: "f2";
|
|
@@ -67,6 +77,12 @@ export declare const Estagio: z.ZodEnum<{
|
|
|
67
77
|
e3: "e3";
|
|
68
78
|
e4: "e4";
|
|
69
79
|
e5: "e5";
|
|
80
|
+
b1: "b1";
|
|
81
|
+
b2: "b2";
|
|
82
|
+
b3: "b3";
|
|
83
|
+
b4: "b4";
|
|
84
|
+
b5: "b5";
|
|
85
|
+
b6: "b6";
|
|
70
86
|
}>;
|
|
71
87
|
export type Estagio = z.infer<typeof Estagio>;
|
|
72
88
|
/** Status de trabalho, sprint e fase — vocabulário masculino. */
|
|
@@ -102,6 +118,27 @@ export declare const Veredito: z.ZodEnum<{
|
|
|
102
118
|
reprovado: "reprovado";
|
|
103
119
|
}>;
|
|
104
120
|
export type Veredito = z.infer<typeof Veredito>;
|
|
121
|
+
/**
|
|
122
|
+
* `modo` da buildx — como o projeto inteiro é conduzido. Escolhido na pergunta
|
|
123
|
+
* única, que é a única que a buildx faz ao usuário.
|
|
124
|
+
*/
|
|
125
|
+
export declare const ModoBuildx: z.ZodEnum<{
|
|
126
|
+
autonomo: "autonomo";
|
|
127
|
+
briefing: "briefing";
|
|
128
|
+
}>;
|
|
129
|
+
export type ModoBuildx = z.infer<typeof ModoBuildx>;
|
|
130
|
+
/**
|
|
131
|
+
* `veredito` da validação da buildx (B6). Enum próprio, e não o `Veredito` de
|
|
132
|
+
* dois valores: a buildx precisa distinguir a entrega íntegra da entrega com
|
|
133
|
+
* pendência declarada, e apagar essa diferença esconderia justamente o que o
|
|
134
|
+
* relatório final existe para mostrar.
|
|
135
|
+
*/
|
|
136
|
+
export declare const VereditoBuildx: z.ZodEnum<{
|
|
137
|
+
aprovado: "aprovado";
|
|
138
|
+
reprovado: "reprovado";
|
|
139
|
+
aprovado_com_pendencia: "aprovado_com_pendencia";
|
|
140
|
+
}>;
|
|
141
|
+
export type VereditoBuildx = z.infer<typeof VereditoBuildx>;
|
|
105
142
|
export declare const Severidade: z.ZodEnum<{
|
|
106
143
|
alta: "alta";
|
|
107
144
|
media: "media";
|
|
@@ -12,15 +12,21 @@ import { z } from "zod";
|
|
|
12
12
|
* status de trabalho, sprint e fase usa o masculino (`concluido`, `bloqueado`).
|
|
13
13
|
*/
|
|
14
14
|
/**
|
|
15
|
-
* `expx_tool` — quem ESCREVEU um artefato de estado.
|
|
16
|
-
* escrevem frontmatter `expx-schema`; as demais skills do método não têm
|
|
17
|
-
* próprio nesse contrato.
|
|
15
|
+
* `expx_tool` — quem ESCREVEU um artefato de estado. A sprintx, a runx e a
|
|
16
|
+
* buildx escrevem frontmatter `expx-schema`; as demais skills do método não têm
|
|
17
|
+
* kind próprio nesse contrato.
|
|
18
|
+
*
|
|
19
|
+
* A buildx entrou depois das outras duas: ela grava o estado do PROJETO
|
|
20
|
+
* (`projeto`, `mapa`, `premissas`, `recursao`, `validacao`, `relatorio`),
|
|
21
|
+
* enquanto sprintx e runx gravam o estado de um TRABALHO. São níveis
|
|
22
|
+
* diferentes, e por isso a buildx tem estágios próprios (`b1`..`b6`) em vez de
|
|
23
|
+
* reusar os de feature ou de ocorrência.
|
|
18
24
|
*
|
|
19
25
|
* Não confundir com `ferramenta`, do rastro de eventos (`Ferramenta`, abaixo),
|
|
20
|
-
* que aceita as
|
|
26
|
+
* que aceita as oito. Tratar os dois como o mesmo enum rejeita o rastro de
|
|
21
27
|
* cinco skills.
|
|
22
28
|
*/
|
|
23
|
-
export const ExpxTool = z.enum(["sprintx", "runx"]);
|
|
29
|
+
export const ExpxTool = z.enum(["sprintx", "runx", "buildx"]);
|
|
24
30
|
/** `ferramenta` — quem EMITIU um evento no rastro. Todas as skills emitem. */
|
|
25
31
|
export const Ferramenta = z.enum([
|
|
26
32
|
"sprintx",
|
|
@@ -30,6 +36,7 @@ export const Ferramenta = z.enum([
|
|
|
30
36
|
"stackx",
|
|
31
37
|
"memox",
|
|
32
38
|
"prodx",
|
|
39
|
+
"buildx",
|
|
33
40
|
]);
|
|
34
41
|
export const TipoTrabalho = z.enum(["feature", "ocorrencia"]);
|
|
35
42
|
export const TipoOcorrencia = z.enum([
|
|
@@ -45,7 +52,9 @@ export const TipoOcorrencia = z.enum([
|
|
|
45
52
|
export const ESTAGIOS_SPRINTX = ["f1", "f2", "f3", "f4", "f5", "f6"];
|
|
46
53
|
/** Estágios da runx: E1 investigação → E5 relatório. */
|
|
47
54
|
export const ESTAGIOS_RUNX = ["e1", "e2", "e3", "e4", "e5"];
|
|
48
|
-
|
|
55
|
+
/** Estágios da buildx: B1 concepção → B6 validação. */
|
|
56
|
+
export const ESTAGIOS_BUILDX = ["b1", "b2", "b3", "b4", "b5", "b6"];
|
|
57
|
+
export const Estagio = z.enum([...ESTAGIOS_SPRINTX, ...ESTAGIOS_RUNX, ...ESTAGIOS_BUILDX]);
|
|
49
58
|
/** Status de trabalho, sprint e fase — vocabulário masculino. */
|
|
50
59
|
export const StatusTrabalho = z.enum(["nao_iniciado", "em_andamento", "bloqueado", "concluido"]);
|
|
51
60
|
/** Status de task — vocabulário feminino. */
|
|
@@ -54,6 +63,18 @@ export const StatusTask = z.enum(["pendente", "em_andamento", "concluida", "bloq
|
|
|
54
63
|
export const StatusDecisao = z.enum(["fechada", "pendente"]);
|
|
55
64
|
export const Suite = z.enum(["verde", "vermelha", "nao_executada"]);
|
|
56
65
|
export const Veredito = z.enum(["aprovado", "reprovado"]);
|
|
66
|
+
/**
|
|
67
|
+
* `modo` da buildx — como o projeto inteiro é conduzido. Escolhido na pergunta
|
|
68
|
+
* única, que é a única que a buildx faz ao usuário.
|
|
69
|
+
*/
|
|
70
|
+
export const ModoBuildx = z.enum(["autonomo", "briefing"]);
|
|
71
|
+
/**
|
|
72
|
+
* `veredito` da validação da buildx (B6). Enum próprio, e não o `Veredito` de
|
|
73
|
+
* dois valores: a buildx precisa distinguir a entrega íntegra da entrega com
|
|
74
|
+
* pendência declarada, e apagar essa diferença esconderia justamente o que o
|
|
75
|
+
* relatório final existe para mostrar.
|
|
76
|
+
*/
|
|
77
|
+
export const VereditoBuildx = z.enum(["aprovado", "aprovado_com_pendencia", "reprovado"]);
|
|
57
78
|
export const Severidade = z.enum(["alta", "media", "baixa"]);
|
|
58
79
|
export const ModoCausaRaiz = z.enum(["causa_raiz", "analise_impacto"]);
|
|
59
80
|
export const Evidencia = z.enum(["teste_falho", "log", "codigo"]);
|
|
@@ -74,10 +95,19 @@ export const DataIso = z
|
|
|
74
95
|
export const TextoUmaLinha = z.string().trim().min(1).refine((s) => !s.includes("\n"), {
|
|
75
96
|
message: "campo de texto do YAML e de uma linha",
|
|
76
97
|
});
|
|
98
|
+
/**
|
|
99
|
+
* Os estágios de cada ferramenta. Mapa explícito, e não um ternário: com três
|
|
100
|
+
* ferramentas, `tool === "sprintx" ? ... : ...` mandaria a buildx para os
|
|
101
|
+
* estágios da runx em silêncio, e a violação apareceria como estágio incoerente
|
|
102
|
+
* num arquivo correto.
|
|
103
|
+
*/
|
|
104
|
+
const ESTAGIOS_POR_TOOL = {
|
|
105
|
+
sprintx: ESTAGIOS_SPRINTX,
|
|
106
|
+
runx: ESTAGIOS_RUNX,
|
|
107
|
+
buildx: ESTAGIOS_BUILDX,
|
|
108
|
+
};
|
|
77
109
|
/** Um estágio pertence à ferramenta que gravou o arquivo? (decisão D-10) */
|
|
78
110
|
export function estagioCoerenteCom(tool, estagio) {
|
|
79
|
-
return tool
|
|
80
|
-
? ESTAGIOS_SPRINTX.includes(estagio)
|
|
81
|
-
: ESTAGIOS_RUNX.includes(estagio);
|
|
111
|
+
return ESTAGIOS_POR_TOOL[tool].includes(estagio);
|
|
82
112
|
}
|
|
83
113
|
//# sourceMappingURL=enums.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"enums.js","sourceRoot":"","sources":["../../../src/parser/esquema/enums.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAC;AAExB;;;;;;;;;;;GAWG;AAEH
|
|
1
|
+
{"version":3,"file":"enums.js","sourceRoot":"","sources":["../../../src/parser/esquema/enums.ts"],"names":[],"mappings":"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"}
|