expxdev 0.1.1 → 0.3.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.
- package/README.md +459 -72
- package/dist/cli/expx.d.ts +2 -0
- package/dist/cli/expx.js +55 -6
- package/dist/cli/expx.js.map +1 -1
- package/dist/cli/init.js +6 -2
- package/dist/cli/init.js.map +1 -1
- package/dist/cli/perguntar.d.ts +37 -0
- package/dist/cli/perguntar.js +76 -0
- package/dist/cli/perguntar.js.map +1 -0
- package/dist/cli/wizard.d.ts +21 -0
- package/dist/cli/wizard.js +101 -0
- package/dist/cli/wizard.js.map +1 -0
- package/dist/doctor/verificadores.js +97 -1
- package/dist/doctor/verificadores.js.map +1 -1
- package/dist/harness/hooks.d.ts +27 -0
- package/dist/harness/hooks.js +36 -0
- package/dist/harness/hooks.js.map +1 -0
- package/dist/harness/settings.d.ts +2 -1
- package/dist/harness/settings.js +40 -2
- package/dist/harness/settings.js.map +1 -1
- package/dist/nucleo/caminhos.d.ts +1 -1
- package/dist/nucleo/catalogo.d.ts +1 -1
- package/dist/nucleo/catalogo.js +7 -1
- package/dist/nucleo/catalogo.js.map +1 -1
- package/dist/nucleo/layout.d.ts +3 -2
- package/dist/nucleo/layout.js +37 -1
- package/dist/nucleo/layout.js.map +1 -1
- package/dist/nucleo/versao.d.ts +1 -1
- package/dist/parser/conformidade/regras.d.ts +1 -0
- package/dist/parser/conformidade/regras.js +24 -0
- package/dist/parser/conformidade/regras.js.map +1 -1
- package/dist/parser/esquema/enums.d.ts +19 -0
- package/dist/parser/esquema/enums.js +18 -0
- package/dist/parser/esquema/enums.js.map +1 -1
- package/dist/parser/esquema/evento.d.ts +123 -0
- package/dist/parser/esquema/evento.js +141 -0
- package/dist/parser/esquema/evento.js.map +1 -0
- package/dist/parser/leitura/rejeicao.d.ts +9 -0
- package/dist/parser/leitura/rejeicao.js +56 -0
- package/dist/parser/leitura/rejeicao.js.map +1 -1
- package/dist/parser/memoria/ler.d.ts +38 -0
- package/dist/parser/memoria/ler.js +46 -0
- package/dist/parser/memoria/ler.js.map +1 -0
- package/dist/parser/memoria/projetar.d.ts +3 -0
- package/dist/parser/memoria/projetar.js +132 -0
- package/dist/parser/memoria/projetar.js.map +1 -0
- package/dist/parser/memoria/tipos.d.ts +155 -0
- package/dist/parser/memoria/tipos.js +97 -0
- package/dist/parser/memoria/tipos.js.map +1 -0
- package/dist/parser/projeto/montar.d.ts +17 -0
- package/dist/parser/projeto/montar.js +17 -0
- package/dist/parser/projeto/montar.js.map +1 -1
- package/dist/plugin/montagem.d.ts +7 -0
- package/dist/plugin/montagem.js +22 -2
- package/dist/plugin/montagem.js.map +1 -1
- package/dist/servidor/http.js +5 -0
- package/dist/servidor/http.js.map +1 -1
- package/dist/servidor/observador.js +5 -1
- package/dist/servidor/observador.js.map +1 -1
- package/dist/teste/repo-fixture.d.ts +7 -0
- package/dist/teste/repo-fixture.js +18 -0
- package/dist/teste/repo-fixture.js.map +1 -1
- package/nucleo/README.md +79 -0
- package/nucleo/hooks/expx-rastro.sh +261 -0
- package/package.json +2 -1
- package/ui/dist/assets/index-BNE_RJrV.js +15 -0
- package/ui/dist/index.html +1 -1
- package/ui/dist/assets/index-BmDTogQZ.js +0 -14
|
@@ -0,0 +1,97 @@
|
|
|
1
|
+
import { z } from "zod";
|
|
2
|
+
/**
|
|
3
|
+
* A projeção enxuta do índice do memox.
|
|
4
|
+
*
|
|
5
|
+
* O painel NÃO serve o `indice.json` como veio do disco (decisão D-04). Duas
|
|
6
|
+
* chaves do índice ficam de fora de propósito:
|
|
7
|
+
*
|
|
8
|
+
* `por_termo` — índice invertido para a busca textual do motor. Na tela é
|
|
9
|
+
* peso morto, e o painel difunde o estado INTEIRO a cada
|
|
10
|
+
* mudança de arquivo (decisão D-28), então carregá-lo
|
|
11
|
+
* multiplicaria cada difusão sem ganho nenhum.
|
|
12
|
+
* `trabalhos` — o registro completo de cada trabalho, que o painel já monta
|
|
13
|
+
* por conta própria a partir de `docs/relatorios/`.
|
|
14
|
+
*
|
|
15
|
+
* O schema existe para validar em RUNTIME. Não é preciosismo: `tsconfig.json`
|
|
16
|
+
* exclui `**\/*.test.ts` e o vitest não faz typecheck, e a fixture da UI usa
|
|
17
|
+
* `as unknown as Estado` — nenhum dos dois acusaria um formato errado.
|
|
18
|
+
*/
|
|
19
|
+
/** Uma entrada do índice: um trabalho que tocou um arquivo ou um módulo. */
|
|
20
|
+
export const EntradaSchema = z.object({
|
|
21
|
+
trabalho_id: z.string(),
|
|
22
|
+
titulo: z.string().nullable(),
|
|
23
|
+
data: z.string().nullable(),
|
|
24
|
+
tipo: z.string().nullable(),
|
|
25
|
+
ferramenta: z.string().nullable(),
|
|
26
|
+
causa: z.string().nullable(),
|
|
27
|
+
papel: z.string(),
|
|
28
|
+
artefato: z.string(),
|
|
29
|
+
});
|
|
30
|
+
/**
|
|
31
|
+
* Uma regressão comprovada. Os dois caminhos de origem são o que torna a
|
|
32
|
+
* afirmação conferível: quem recebe o sinal pode abrir os dois e julgar.
|
|
33
|
+
*/
|
|
34
|
+
export const RegressaoSchema = z.object({
|
|
35
|
+
arquivos: z.array(z.string()),
|
|
36
|
+
trabalho_anterior: z.string(),
|
|
37
|
+
data_anterior: z.string().nullable(),
|
|
38
|
+
trabalho_posterior: z.string(),
|
|
39
|
+
data_posterior: z.string().nullable(),
|
|
40
|
+
evidencia: z.string(),
|
|
41
|
+
origem_causa: z.string().nullable(),
|
|
42
|
+
origem_alteracao: z.string().nullable(),
|
|
43
|
+
});
|
|
44
|
+
/**
|
|
45
|
+
* Um vínculo que NÃO virou regressão, com o motivo. Isso não é sobra: é a
|
|
46
|
+
* prova de que o índice não inventa relação. Dois trabalhos tocando o mesmo
|
|
47
|
+
* arquivo é um fato; dizer que um causou o outro é uma afirmação.
|
|
48
|
+
*/
|
|
49
|
+
export const CoincidenciaSchema = z.object({
|
|
50
|
+
arquivos: z.array(z.string()),
|
|
51
|
+
trabalhos: z.array(z.string()),
|
|
52
|
+
motivo: z.string(),
|
|
53
|
+
});
|
|
54
|
+
/** Um arquivo com os sinais que o índice derivou sobre ele. */
|
|
55
|
+
export const ArquivoDeRiscoSchema = z.object({
|
|
56
|
+
arquivo: z.string(),
|
|
57
|
+
trabalhos: z.number(),
|
|
58
|
+
ultimo_trabalho_em: z.string().nullable(),
|
|
59
|
+
reprovacoes_qa: z.number(),
|
|
60
|
+
regressoes: z.number(),
|
|
61
|
+
zona_de_risco: z.string().nullable(),
|
|
62
|
+
divida: z.string().nullable(),
|
|
63
|
+
risco_divida: z.string().nullable(),
|
|
64
|
+
faixa_atencao: z.string().nullable(),
|
|
65
|
+
entradas: z.array(EntradaSchema),
|
|
66
|
+
});
|
|
67
|
+
export const ModuloSchema = z.object({
|
|
68
|
+
modulo: z.string(),
|
|
69
|
+
trabalhos: z.number(),
|
|
70
|
+
ultimo_trabalho_em: z.string().nullable(),
|
|
71
|
+
reprovacoes_qa: z.number(),
|
|
72
|
+
regressoes: z.number(),
|
|
73
|
+
arquivos: z.array(z.string()),
|
|
74
|
+
});
|
|
75
|
+
/** Artefato onde o memox detectou segredo. O valor já foi redigido na origem. */
|
|
76
|
+
export const ContaminadoSchema = z.object({
|
|
77
|
+
artefato: z.string(),
|
|
78
|
+
tipos: z.array(z.string()),
|
|
79
|
+
});
|
|
80
|
+
export const MemoriaSchema = z.object({
|
|
81
|
+
gerado_em: z.string(),
|
|
82
|
+
versao: z.number(),
|
|
83
|
+
totais: z.object({
|
|
84
|
+
trabalhos: z.number(),
|
|
85
|
+
arquivos: z.number(),
|
|
86
|
+
modulos: z.number(),
|
|
87
|
+
regressoes: z.number(),
|
|
88
|
+
coincidencias: z.number(),
|
|
89
|
+
artefatos_contaminados: z.number(),
|
|
90
|
+
}),
|
|
91
|
+
arquivos_de_risco: z.array(ArquivoDeRiscoSchema),
|
|
92
|
+
regressoes: z.array(RegressaoSchema),
|
|
93
|
+
coincidencias: z.array(CoincidenciaSchema),
|
|
94
|
+
contaminados: z.array(ContaminadoSchema),
|
|
95
|
+
modulos: z.array(ModuloSchema),
|
|
96
|
+
});
|
|
97
|
+
//# sourceMappingURL=tipos.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"tipos.js","sourceRoot":"","sources":["../../../src/parser/memoria/tipos.ts"],"names":[],"mappings":"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"}
|
|
@@ -2,6 +2,7 @@ import { type Trabalho } from "../descoberta/trabalhos.js";
|
|
|
2
2
|
import type { Rejeicao } from "../leitura/rejeicao.js";
|
|
3
3
|
import type { Fase as FaseYaml, Task, Bloqueio } from "../esquema/kinds.js";
|
|
4
4
|
import type { StatusTrabalho } from "../esquema/enums.js";
|
|
5
|
+
import type { Memoria } from "../memoria/tipos.js";
|
|
5
6
|
/** Uma task já situada no seu arquivo, para a conformidade poder apontar arquivo e linha. */
|
|
6
7
|
export type TaskSituada = Task & {
|
|
7
8
|
arquivo: string;
|
|
@@ -51,12 +52,28 @@ export type EntradaHistorico = {
|
|
|
51
52
|
tecnico: Record<string, unknown> | null;
|
|
52
53
|
uso: Record<string, unknown> | null;
|
|
53
54
|
};
|
|
55
|
+
/** Uma chave que a R6 exige e que não estava no arquivo. */
|
|
56
|
+
export type ChaveOmitida = {
|
|
57
|
+
arquivo: string;
|
|
58
|
+
trabalho_id: string;
|
|
59
|
+
/** Caminho no frontmatter, ex. `tasks.0.criterio_aceite`. */
|
|
60
|
+
caminho: string;
|
|
61
|
+
linha: number | null;
|
|
62
|
+
};
|
|
54
63
|
export type Projeto = {
|
|
55
64
|
raiz: string;
|
|
56
65
|
trabalhos: TrabalhoMontado[];
|
|
57
66
|
bloqueios: BloqueioSituado[];
|
|
58
67
|
historico: EntradaHistorico[];
|
|
59
68
|
rejeicoes: Rejeicao[];
|
|
69
|
+
/** Violações da R6, colhidas na leitura (ver `colherOmitidas`). */
|
|
70
|
+
omitidas: ChaveOmitida[];
|
|
71
|
+
/**
|
|
72
|
+
* A memória do projeto, do índice que o memox grava em
|
|
73
|
+
* `.expx/memoria/indice.json`. É `null` quando não há índice — o caso comum,
|
|
74
|
+
* já que o índice é local e gitignorado (decisão D-02).
|
|
75
|
+
*/
|
|
76
|
+
memoria: Memoria | null;
|
|
60
77
|
lido_em: string;
|
|
61
78
|
};
|
|
62
79
|
export declare function montarProjeto(raiz: string, agora?: Date): Projeto;
|
|
@@ -1,5 +1,7 @@
|
|
|
1
1
|
import { basename, dirname, join } from "node:path";
|
|
2
2
|
import { descobrirTrabalhos } from "../descoberta/trabalhos.js";
|
|
3
|
+
import { lerIndice } from "../memoria/ler.js";
|
|
4
|
+
import { projetar } from "../memoria/projetar.js";
|
|
3
5
|
/** Frontmatter mais a prosa, que é o que o painel renderiza no relatório. */
|
|
4
6
|
function comCorpo(a) {
|
|
5
7
|
return a ? { ...a.dados, _corpo: a.corpo } : null;
|
|
@@ -137,12 +139,27 @@ export function montarProjeto(raiz, agora = new Date()) {
|
|
|
137
139
|
bloqueios: montarBloqueios(t, mapa),
|
|
138
140
|
};
|
|
139
141
|
});
|
|
142
|
+
const omitidas = aceitos.flatMap((a) => a.omitidas.map((caminho) => ({
|
|
143
|
+
arquivo: a.arquivo,
|
|
144
|
+
trabalho_id: String(a.dados["trabalho_id"] ?? ""),
|
|
145
|
+
caminho,
|
|
146
|
+
// A linha do campo não existe — ele não está no arquivo. Aponta para o
|
|
147
|
+
// item que deveria carregá-lo, e daí para o começo do bloco.
|
|
148
|
+
linha: a.linhas.get(caminho.split(".").slice(0, -1).join(".")) ??
|
|
149
|
+
a.linhas.get("kind") ??
|
|
150
|
+
null,
|
|
151
|
+
})));
|
|
152
|
+
// A leitura falha aberta: índice ausente ou corrompido vira `null`, nunca
|
|
153
|
+
// derruba a montagem do projeto inteiro (decisão D-05).
|
|
154
|
+
const indice = lerIndice(raiz);
|
|
140
155
|
return {
|
|
141
156
|
raiz,
|
|
142
157
|
trabalhos: montados,
|
|
143
158
|
bloqueios: montados.flatMap((t) => t.bloqueios),
|
|
144
159
|
historico: montarHistorico(aceitos),
|
|
145
160
|
rejeicoes,
|
|
161
|
+
omitidas,
|
|
162
|
+
memoria: indice === null ? null : projetar(indice),
|
|
146
163
|
lido_em: agora.toISOString(),
|
|
147
164
|
};
|
|
148
165
|
}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"montar.js","sourceRoot":"","sources":["../../../src/parser/projeto/montar.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,QAAQ,EAAE,OAAO,EAAE,IAAI,EAAE,MAAM,WAAW,CAAC;AACpD,OAAO,EAAE,kBAAkB,EAAiB,MAAM,4BAA4B,CAAC;
|
|
1
|
+
{"version":3,"file":"montar.js","sourceRoot":"","sources":["../../../src/parser/projeto/montar.ts"],"names":[],"mappings":"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"}
|
|
@@ -10,6 +10,13 @@ export type SkillMontavel = {
|
|
|
10
10
|
raizSkill: string;
|
|
11
11
|
/** Arquivos de comando da skill, no repositório de origem. */
|
|
12
12
|
comandos: readonly string[];
|
|
13
|
+
/**
|
|
14
|
+
* Arquivos de hook da skill, no repositório de origem. Opcional de propósito:
|
|
15
|
+
* `montagem.test.ts` e `opencode.test.ts` constroem este objeto por literal, e
|
|
16
|
+
* o `tsconfig` exclui `**\/*.test.ts` — um campo obrigatório não seria
|
|
17
|
+
* acusado pelo typecheck e quebraria só em runtime.
|
|
18
|
+
*/
|
|
19
|
+
hooks?: readonly string[];
|
|
13
20
|
};
|
|
14
21
|
/** Monta só o plugin, em `destino`. */
|
|
15
22
|
export declare function montarPlugin(destino: string, skills: readonly SkillMontavel[], versao: string): void;
|
package/dist/plugin/montagem.js
CHANGED
|
@@ -1,11 +1,31 @@
|
|
|
1
|
-
import { cpSync, mkdirSync, writeFileSync } from "node:fs";
|
|
2
|
-
import { basename, join } from "node:path";
|
|
1
|
+
import { cpSync, existsSync, mkdirSync, writeFileSync } from "node:fs";
|
|
2
|
+
import { basename, dirname, join } from "node:path";
|
|
3
|
+
import { fileURLToPath } from "node:url";
|
|
3
4
|
import { montarPluginJson, montarMarketplaceJson, ORIGEM_DO_PLUGIN } from "./manifestos.js";
|
|
5
|
+
/**
|
|
6
|
+
* O núcleo compartilhado (`nucleo/hooks/`), distribuído por CÓPIA.
|
|
7
|
+
*
|
|
8
|
+
* Cópia, e não dependência, porque cada projeto precisa rodar sozinho: nenhum
|
|
9
|
+
* repositório de skill tem `package.json`, então não há como depender do
|
|
10
|
+
* `expxdev` por npm. A fonte é uma só; o que chega ao projeto é um arquivo.
|
|
11
|
+
*
|
|
12
|
+
* Resolvido a partir do `dist/` em execução — daí o `../..`.
|
|
13
|
+
*/
|
|
14
|
+
function raizDoNucleo() {
|
|
15
|
+
return join(dirname(fileURLToPath(import.meta.url)), "..", "..", "nucleo");
|
|
16
|
+
}
|
|
4
17
|
/** Monta só o plugin, em `destino`. */
|
|
5
18
|
export function montarPlugin(destino, skills, versao) {
|
|
6
19
|
mkdirSync(join(destino, ".claude-plugin"), { recursive: true });
|
|
7
20
|
mkdirSync(join(destino, "skills"), { recursive: true });
|
|
8
21
|
mkdirSync(join(destino, "commands"), { recursive: true });
|
|
22
|
+
// O núcleo viaja com o plugin. Ausente (checkout parcial, empacotamento sem
|
|
23
|
+
// a pasta), a montagem segue: as skills têm a própria cópia em disco e o
|
|
24
|
+
// projeto continua funcionando — falha aberta, como todo hook.
|
|
25
|
+
const nucleo = raizDoNucleo();
|
|
26
|
+
if (existsSync(nucleo)) {
|
|
27
|
+
cpSync(nucleo, join(destino, "nucleo"), { recursive: true });
|
|
28
|
+
}
|
|
9
29
|
writeFileSync(join(destino, ".claude-plugin", "plugin.json"), `${JSON.stringify(montarPluginJson(versao), null, 2)}\n`);
|
|
10
30
|
for (const s of skills) {
|
|
11
31
|
// O nome da pasta tem que continuar igual ao `name` do frontmatter: o
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"montagem.js","sourceRoot":"","sources":["../../src/plugin/montagem.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,MAAM,EAAE,SAAS,EAAE,aAAa,EAAE,MAAM,SAAS,CAAC;
|
|
1
|
+
{"version":3,"file":"montagem.js","sourceRoot":"","sources":["../../src/plugin/montagem.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,MAAM,EAAE,UAAU,EAAE,SAAS,EAAE,aAAa,EAAE,MAAM,SAAS,CAAC;AACvE,OAAO,EAAE,QAAQ,EAAE,OAAO,EAAE,IAAI,EAAE,MAAM,WAAW,CAAC;AACpD,OAAO,EAAE,aAAa,EAAE,MAAM,UAAU,CAAC;AACzC,OAAO,EAAE,gBAAgB,EAAE,qBAAqB,EAAE,gBAAgB,EAAE,MAAM,iBAAiB,CAAC;AAwB5F;;;;;;;;GAQG;AACH,SAAS,YAAY;IACnB,OAAO,IAAI,CAAC,OAAO,CAAC,aAAa,CAAC,MAAM,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC,EAAE,IAAI,EAAE,IAAI,EAAE,QAAQ,CAAC,CAAC;AAC7E,CAAC;AAED,uCAAuC;AACvC,MAAM,UAAU,YAAY,CAC1B,OAAe,EACf,MAAgC,EAChC,MAAc;IAEd,SAAS,CAAC,IAAI,CAAC,OAAO,EAAE,gBAAgB,CAAC,EAAE,EAAE,SAAS,EAAE,IAAI,EAAE,CAAC,CAAC;IAChE,SAAS,CAAC,IAAI,CAAC,OAAO,EAAE,QAAQ,CAAC,EAAE,EAAE,SAAS,EAAE,IAAI,EAAE,CAAC,CAAC;IACxD,SAAS,CAAC,IAAI,CAAC,OAAO,EAAE,UAAU,CAAC,EAAE,EAAE,SAAS,EAAE,IAAI,EAAE,CAAC,CAAC;IAE1D,4EAA4E;IAC5E,yEAAyE;IACzE,+DAA+D;IAC/D,MAAM,MAAM,GAAG,YAAY,EAAE,CAAC;IAC9B,IAAI,UAAU,CAAC,MAAM,CAAC,EAAE,CAAC;QACvB,MAAM,CAAC,MAAM,EAAE,IAAI,CAAC,OAAO,EAAE,QAAQ,CAAC,EAAE,EAAE,SAAS,EAAE,IAAI,EAAE,CAAC,CAAC;IAC/D,CAAC;IAED,aAAa,CACX,IAAI,CAAC,OAAO,EAAE,gBAAgB,EAAE,aAAa,CAAC,EAC9C,GAAG,IAAI,CAAC,SAAS,CAAC,gBAAgB,CAAC,MAAM,CAAC,EAAE,IAAI,EAAE,CAAC,CAAC,IAAI,CACzD,CAAC;IAEF,KAAK,MAAM,CAAC,IAAI,MAAM,EAAE,CAAC;QACvB,sEAAsE;QACtE,8CAA8C;QAC9C,MAAM,CAAC,CAAC,CAAC,SAAS,EAAE,IAAI,CAAC,OAAO,EAAE,QAAQ,EAAE,CAAC,CAAC,IAAI,CAAC,EAAE,EAAE,SAAS,EAAE,IAAI,EAAE,CAAC,CAAC;QAC1E,KAAK,MAAM,CAAC,IAAI,CAAC,CAAC,QAAQ,EAAE,CAAC;YAC3B,MAAM,CAAC,CAAC,EAAE,IAAI,CAAC,OAAO,EAAE,UAAU,EAAE,QAAQ,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC;QACpD,CAAC;IACH,CAAC;AACH,CAAC;AAED;;;;;GAKG;AACH,MAAM,UAAU,iBAAiB,CAC/B,eAAuB,EACvB,MAAgC,EAChC,MAAc;IAEd,SAAS,CAAC,IAAI,CAAC,eAAe,EAAE,gBAAgB,CAAC,EAAE,EAAE,SAAS,EAAE,IAAI,EAAE,CAAC,CAAC;IACxE,aAAa,CACX,IAAI,CAAC,eAAe,EAAE,gBAAgB,EAAE,kBAAkB,CAAC,EAC3D,GAAG,IAAI,CAAC,SAAS,CAAC,qBAAqB,EAAE,EAAE,IAAI,EAAE,CAAC,CAAC,IAAI,CACxD,CAAC;IACF,YAAY,CAAC,IAAI,CAAC,eAAe,EAAE,gBAAgB,CAAC,EAAE,MAAM,EAAE,MAAM,CAAC,CAAC;AACxE,CAAC"}
|
package/dist/servidor/http.js
CHANGED
|
@@ -65,6 +65,11 @@ export async function criarServidor(op) {
|
|
|
65
65
|
case "/api/historico":
|
|
66
66
|
json(res, { historico: estado.historico });
|
|
67
67
|
return;
|
|
68
|
+
case "/api/memoria":
|
|
69
|
+
// `memoria` é `null` quando não há índice — estado legítimo, não erro:
|
|
70
|
+
// `.expx/memoria/` é gitignorado, então um clone não tem índice (D-02)
|
|
71
|
+
json(res, { memoria: estado.memoria });
|
|
72
|
+
return;
|
|
68
73
|
case "/api/saude":
|
|
69
74
|
json(res, { ok: true, raiz: estado.raiz, lido_em: estado.lido_em });
|
|
70
75
|
return;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"http.js","sourceRoot":"","sources":["../../src/servidor/http.ts"],"names":[],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"http.js","sourceRoot":"","sources":["../../src/servidor/http.ts"],"names":[],"mappings":"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"}
|
|
@@ -19,7 +19,11 @@ export async function observar(raiz, aoMudar, debounceMs = 300) {
|
|
|
19
19
|
};
|
|
20
20
|
const watcher = watch(raiz, {
|
|
21
21
|
ignoreInitial: true,
|
|
22
|
-
|
|
22
|
+
// `.expx` está aqui por um motivo próprio: é onde o memox grava o índice.
|
|
23
|
+
// Sem ignorá-lo, reindexar dispara o watcher, que recarrega o estado, que
|
|
24
|
+
// relê o índice — e uma reindexação disparada por mudança em `docs/`
|
|
25
|
+
// realimentaria a recarga sem dado novo nenhum (decisão D-06).
|
|
26
|
+
ignored: (caminho) => /(^|[/\\])(node_modules|\.git|dist|\.expx)([/\\]|$)/.test(caminho),
|
|
23
27
|
awaitWriteFinish: { stabilityThreshold: Math.max(50, debounceMs / 3), pollInterval: 20 },
|
|
24
28
|
});
|
|
25
29
|
watcher.on("add", agendar).on("change", agendar).on("unlink", agendar).on("addDir", agendar).on("unlinkDir", agendar);
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"observador.js","sourceRoot":"","sources":["../../src/servidor/observador.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,KAAK,EAAkB,MAAM,UAAU,CAAC;AAMjD;;;;;;;GAOG;AACH,MAAM,CAAC,KAAK,UAAU,QAAQ,CAC5B,IAAY,EACZ,OAAmB,EACnB,UAAU,GAAG,GAAG;IAEhB,IAAI,KAAK,GAA0B,IAAI,CAAC;IAExC,MAAM,OAAO,GAAG,GAAS,EAAE;QACzB,IAAI,KAAK;YAAE,YAAY,CAAC,KAAK,CAAC,CAAC;QAC/B,KAAK,GAAG,UAAU,CAAC,GAAG,EAAE;YACtB,KAAK,GAAG,IAAI,CAAC;YACb,OAAO,EAAE,CAAC;QACZ,CAAC,EAAE,UAAU,CAAC,CAAC;IACjB,CAAC,CAAC;IAEF,MAAM,OAAO,GAAc,KAAK,CAAC,IAAI,EAAE;QACrC,aAAa,EAAE,IAAI;QACnB,OAAO,EAAE,CAAC,OAAe,EAAE,EAAE,CAAC,
|
|
1
|
+
{"version":3,"file":"observador.js","sourceRoot":"","sources":["../../src/servidor/observador.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,KAAK,EAAkB,MAAM,UAAU,CAAC;AAMjD;;;;;;;GAOG;AACH,MAAM,CAAC,KAAK,UAAU,QAAQ,CAC5B,IAAY,EACZ,OAAmB,EACnB,UAAU,GAAG,GAAG;IAEhB,IAAI,KAAK,GAA0B,IAAI,CAAC;IAExC,MAAM,OAAO,GAAG,GAAS,EAAE;QACzB,IAAI,KAAK;YAAE,YAAY,CAAC,KAAK,CAAC,CAAC;QAC/B,KAAK,GAAG,UAAU,CAAC,GAAG,EAAE;YACtB,KAAK,GAAG,IAAI,CAAC;YACb,OAAO,EAAE,CAAC;QACZ,CAAC,EAAE,UAAU,CAAC,CAAC;IACjB,CAAC,CAAC;IAEF,MAAM,OAAO,GAAc,KAAK,CAAC,IAAI,EAAE;QACrC,aAAa,EAAE,IAAI;QACnB,0EAA0E;QAC1E,0EAA0E;QAC1E,qEAAqE;QACrE,+DAA+D;QAC/D,OAAO,EAAE,CAAC,OAAe,EAAE,EAAE,CAAC,oDAAoD,CAAC,IAAI,CAAC,OAAO,CAAC;QAChG,gBAAgB,EAAE,EAAE,kBAAkB,EAAE,IAAI,CAAC,GAAG,CAAC,EAAE,EAAE,UAAU,GAAG,CAAC,CAAC,EAAE,YAAY,EAAE,EAAE,EAAE;KACzF,CAAC,CAAC;IAEH,OAAO,CAAC,EAAE,CAAC,KAAK,EAAE,OAAO,CAAC,CAAC,EAAE,CAAC,QAAQ,EAAE,OAAO,CAAC,CAAC,EAAE,CAAC,QAAQ,EAAE,OAAO,CAAC,CAAC,EAAE,CAAC,QAAQ,EAAE,OAAO,CAAC,CAAC,EAAE,CAAC,WAAW,EAAE,OAAO,CAAC,CAAC;IACtH,0EAA0E;IAC1E,OAAO,CAAC,EAAE,CAAC,OAAO,EAAE,GAAG,EAAE,CAAC,SAAS,CAAC,CAAC;IAErC,MAAM,IAAI,OAAO,CAAO,CAAC,EAAE,EAAE,EAAE,CAAC,OAAO,CAAC,EAAE,CAAC,OAAO,EAAE,GAAG,EAAE,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC;IAEjE,OAAO;QACL,KAAK,EAAE,KAAK,IAAI,EAAE;YAChB,IAAI,KAAK;gBAAE,YAAY,CAAC,KAAK,CAAC,CAAC;YAC/B,MAAM,OAAO,CAAC,KAAK,EAAE,CAAC;QACxB,CAAC;KACF,CAAC;AACJ,CAAC"}
|
|
@@ -14,6 +14,13 @@ export type OpcoesRepo = {
|
|
|
14
14
|
layout?: Layout;
|
|
15
15
|
/** Conteúdo extra do SKILL.md, para fixtures que precisam de um corpo específico. */
|
|
16
16
|
corpo?: string;
|
|
17
|
+
/**
|
|
18
|
+
* Hooks da skill, gravados em `.claude/hooks/` com bit de execução. O memox é
|
|
19
|
+
* a primeira skill do catálogo que traz hooks; antes dele nenhuma trazia.
|
|
20
|
+
*/
|
|
21
|
+
hooks?: readonly string[];
|
|
22
|
+
/** Arquivos de `assets/` da skill, por nome. É onde mora o motor do memox. */
|
|
23
|
+
assets?: Readonly<Record<string, string>>;
|
|
17
24
|
};
|
|
18
25
|
/**
|
|
19
26
|
* Onde o SKILL.md e os comandos ficam em cada layout. `embutido` é o do
|
|
@@ -35,6 +35,24 @@ export function criarRepoSkill(op) {
|
|
|
35
35
|
`---\nname: ${op.nome}\ndescription: Skill de fixture ${op.nome} para a suite do expx-cli\n---\n\n# ${op.nome}\n\nDetalhe em \`references/01.md\`.\n`);
|
|
36
36
|
writeFileSync(join(raiz, skill, "references", "01.md"), `# referencia de ${op.nome}\n`);
|
|
37
37
|
writeFileSync(join(raiz, comandos, `${op.nome}.md`), `---\ndescription: comando ${op.nome}\n---\n\nInvoque a skill \`${op.nome}\`.\n`);
|
|
38
|
+
// Os hooks nascem executáveis: o README do memox manda `chmod +x`, e um hook
|
|
39
|
+
// sem o bit sai `0` em silêncio — indistinguível de "nada a injetar".
|
|
40
|
+
if (op.hooks !== undefined && op.hooks.length > 0) {
|
|
41
|
+
const dirHooks = join(raiz, ".claude", "hooks");
|
|
42
|
+
mkdirSync(dirHooks, { recursive: true });
|
|
43
|
+
for (const h of op.hooks) {
|
|
44
|
+
writeFileSync(join(dirHooks, h), `#!/usr/bin/env bash\n# hook de fixture ${h}\nexit 0\n`, {
|
|
45
|
+
mode: 0o755,
|
|
46
|
+
});
|
|
47
|
+
}
|
|
48
|
+
}
|
|
49
|
+
if (op.assets !== undefined) {
|
|
50
|
+
const dirAssets = join(raiz, skill, "assets");
|
|
51
|
+
mkdirSync(dirAssets, { recursive: true });
|
|
52
|
+
for (const [nome, conteudo] of Object.entries(op.assets)) {
|
|
53
|
+
writeFileSync(join(dirAssets, nome), conteudo);
|
|
54
|
+
}
|
|
55
|
+
}
|
|
38
56
|
git(raiz, "init", "-q", "-b", "main");
|
|
39
57
|
git(raiz, "add", "-A");
|
|
40
58
|
git(raiz, "commit", "-q", "-m", `${op.nome}: commit inicial`);
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"repo-fixture.js","sourceRoot":"","sources":["../../src/teste/repo-fixture.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,YAAY,EAAE,MAAM,oBAAoB,CAAC;AAClD,OAAO,EAAE,WAAW,EAAE,SAAS,EAAE,aAAa,EAAE,MAAM,SAAS,CAAC;AAChE,OAAO,EAAE,MAAM,EAAE,MAAM,SAAS,CAAC;AACjC,OAAO,EAAE,IAAI,EAAE,MAAM,WAAW,CAAC;
|
|
1
|
+
{"version":3,"file":"repo-fixture.js","sourceRoot":"","sources":["../../src/teste/repo-fixture.ts"],"names":[],"mappings":"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"}
|
package/nucleo/README.md
ADDED
|
@@ -0,0 +1,79 @@
|
|
|
1
|
+
# Núcleo compartilhado
|
|
2
|
+
|
|
3
|
+
O que as skills do método precisam ter **igual**, escrito uma vez só.
|
|
4
|
+
|
|
5
|
+
## O que tem aqui
|
|
6
|
+
|
|
7
|
+
| Arquivo | O que é |
|
|
8
|
+
|---|---|
|
|
9
|
+
| `hooks/expx-rastro.sh` | O rastro de eventos, os modos de hook e o `trabalho_id` |
|
|
10
|
+
|
|
11
|
+
## Como chega até um projeto
|
|
12
|
+
|
|
13
|
+
Por **cópia**, nunca por dependência.
|
|
14
|
+
|
|
15
|
+
Nenhum dos repositórios de skill tem `package.json` — eles são plugins
|
|
16
|
+
instalados sozinhos, e cada projeto precisa rodar de forma independente. Uma
|
|
17
|
+
biblioteca importada em tempo de execução quebraria exatamente isso.
|
|
18
|
+
|
|
19
|
+
Então: a fonte é este diretório, o `expx init` copia (`montarPlugin` leva
|
|
20
|
+
`nucleo/` junto com o plugin), e o que chega ao projeto é um arquivo em disco.
|
|
21
|
+
Sem `npm install`, sem runtime compartilhado, sem rede.
|
|
22
|
+
|
|
23
|
+
## Como usar num hook
|
|
24
|
+
|
|
25
|
+
A ferramenta é **parâmetro**, definido antes do `source`:
|
|
26
|
+
|
|
27
|
+
```sh
|
|
28
|
+
EXPX_FERRAMENTA=mergex
|
|
29
|
+
. "$(dirname "$0")/../nucleo/hooks/expx-rastro.sh"
|
|
30
|
+
|
|
31
|
+
MODO="$(expx_modo "$RAIZ" git-perigoso seguranca)"
|
|
32
|
+
[ "$MODO" = "desligado" ] && exit 0
|
|
33
|
+
|
|
34
|
+
expx_rastro_grava "$RAIZ" acao_bloqueada hook bloqueado "commit na main" '[]' \
|
|
35
|
+
'"hook":"git-perigoso"'
|
|
36
|
+
```
|
|
37
|
+
|
|
38
|
+
Variáveis que o rastro lê, todas opcionais:
|
|
39
|
+
|
|
40
|
+
| Variável | Efeito |
|
|
41
|
+
|---|---|
|
|
42
|
+
| `EXPX_FERRAMENTA` | o campo `ferramenta` da linha (**defina sempre**) |
|
|
43
|
+
| `EXPX_TRABALHO_ID` | vence a detecção automática |
|
|
44
|
+
| `EXPX_FASE` / `EXPX_TASK` | preenchem `fase` e `task` (JSON: com aspas) |
|
|
45
|
+
| `EXPX_AGENTE` | o subagente; sem ela, `principal` |
|
|
46
|
+
|
|
47
|
+
## Por que existe
|
|
48
|
+
|
|
49
|
+
Cada skill tinha a sua implementação do rastro — quatro no total, em duas
|
|
50
|
+
linguagens. Não eram cópias que divergiram: eram **reescritas**, porque o
|
|
51
|
+
`comum/rastro.sh` de cada repositório trazia o nome da ferramenta cravado no
|
|
52
|
+
código (`"ferramenta":"sprintx"`), e um arquivo que se identifica não pode ser
|
|
53
|
+
compartilhado.
|
|
54
|
+
|
|
55
|
+
E já divergiam em produção, antes mesmo de o painel ler o rastro:
|
|
56
|
+
|
|
57
|
+
- chave extra no meio do objeto, quebrando a verificação de uma skill irmã
|
|
58
|
+
- `agente` ora `null`, ora `"principal"`, para o mesmo caso
|
|
59
|
+
- três estratégias diferentes para descobrir o `trabalho_id`
|
|
60
|
+
- dois conjuntos de modos: uma skill não conhecia `desligado` e continuava
|
|
61
|
+
rodando depois de alguém pedir para desligá-la
|
|
62
|
+
- um leitor de lock com o nome do arquivo errado, falhando em silêncio
|
|
63
|
+
|
|
64
|
+
## Adoção
|
|
65
|
+
|
|
66
|
+
Incremental, uma skill por vez. Uma skill migra quando trocar o `source` do seu
|
|
67
|
+
`comum/rastro.sh` por este arquivo e renomear as chamadas (`rastro_*` →
|
|
68
|
+
`expx_*`). Enquanto não migra, continua com a cópia própria — que é o ponto de
|
|
69
|
+
distribuir por cópia: nada quebra enquanto a migração não acontece.
|
|
70
|
+
|
|
71
|
+
O que garante que as duas não divirjam no meio do caminho é o validador:
|
|
72
|
+
`expx doctor` lê `docs/eventos/*.jsonl` e aponta toda linha fora do contrato,
|
|
73
|
+
seja qual for a implementação que a escreveu.
|
|
74
|
+
|
|
75
|
+
## Contratos
|
|
76
|
+
|
|
77
|
+
- [`CONVENCOES.md`](../docs/contrato/CONVENCOES.md) — R1 a R14, o documento raiz
|
|
78
|
+
- [`CONTRATO-expx-eventos.md`](../docs/contrato/CONTRATO-expx-eventos.md) — a linha do rastro, hooks e agentes
|
|
79
|
+
- [`CONTRATO-expx-schema-v1.md`](../docs/contrato/CONTRATO-expx-schema-v1.md) — o frontmatter de estado
|