dd-harness-mcp 0.10.0 → 0.11.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/dist/cli/src/check.js +2 -0
- package/dist/cli/src/diff.js +26 -2
- package/dist/cli/src/index.js +21 -0
- package/dist/mcp/src/index.js +5 -1
- package/package.json +1 -1
package/dist/cli/src/check.js
CHANGED
|
@@ -99,6 +99,7 @@ export async function check(raiz, commit) {
|
|
|
99
99
|
fechadas: 0,
|
|
100
100
|
tocadas,
|
|
101
101
|
reancoragens,
|
|
102
|
+
semGit: mudancas.semGit,
|
|
102
103
|
};
|
|
103
104
|
}
|
|
104
105
|
const envio = await pede(`${config.api}/api/v1/deriva`, {
|
|
@@ -127,5 +128,6 @@ export async function check(raiz, commit) {
|
|
|
127
128
|
fechadas: julgamento.fechadas ?? 0,
|
|
128
129
|
tocadas,
|
|
129
130
|
reancoragens,
|
|
131
|
+
semGit: mudancas.semGit,
|
|
130
132
|
};
|
|
131
133
|
}
|
package/dist/cli/src/diff.js
CHANGED
|
@@ -17,10 +17,34 @@ export async function caminhosDoCommit(raiz, commit) {
|
|
|
17
17
|
const { stdout } = await roda("git", ["diff-tree", "--no-commit-id", "-r", "-M", "--name-status", commit], { cwd: raiz });
|
|
18
18
|
return interpretaNameStatus(stdout);
|
|
19
19
|
}
|
|
20
|
-
catch {
|
|
21
|
-
|
|
20
|
+
catch (erro) {
|
|
21
|
+
// Continua sem lancar — o gancho `post-commit` nao pode falhar por causa de um aviso.
|
|
22
|
+
// O que muda e que a razao volta junto, para quem chamou poder dize-la em vez de
|
|
23
|
+
// mostrar "nenhuma mudanca" quando na verdade nada foi consultado.
|
|
24
|
+
return { caminhos: [], renames: [], semGit: classificaFalhaDoGit(erro) };
|
|
22
25
|
}
|
|
23
26
|
}
|
|
27
|
+
/**
|
|
28
|
+
* Traduz a falha do `git diff-tree` nos tres casos que pedem respostas diferentes de quem
|
|
29
|
+
* chamou: consertar o repositorio, conferir o SHA, ou instalar o git.
|
|
30
|
+
*
|
|
31
|
+
* A leitura e do stderr porque o `git` usa o mesmo codigo de saida (128) para "not a git
|
|
32
|
+
* repository" e para "bad object" — o texto e o unico jeito de separar os dois.
|
|
33
|
+
*/
|
|
34
|
+
function classificaFalhaDoGit(erro) {
|
|
35
|
+
const e = erro;
|
|
36
|
+
if (e.code === "ENOENT")
|
|
37
|
+
return "git-indisponivel";
|
|
38
|
+
const stderr = e.stderr ?? "";
|
|
39
|
+
if (/not a git repository/i.test(stderr))
|
|
40
|
+
return "sem-repositorio";
|
|
41
|
+
if (/bad object|unknown revision|ambiguous argument/i.test(stderr)) {
|
|
42
|
+
return "commit-desconhecido";
|
|
43
|
+
}
|
|
44
|
+
// Falha que nao sabemos nomear: ainda e melhor avisar que o cruzamento nao aconteceu do
|
|
45
|
+
// que deixar passar como silencio.
|
|
46
|
+
return "git-indisponivel";
|
|
47
|
+
}
|
|
24
48
|
/**
|
|
25
49
|
* Le a saida de `--name-status`: uma letra de status, TAB, e um ou dois caminhos.
|
|
26
50
|
*
|
package/dist/cli/src/index.js
CHANGED
|
@@ -553,8 +553,29 @@ async function comandoReancorar(argv) {
|
|
|
553
553
|
console.log(` para ${r.para}`);
|
|
554
554
|
console.log(" Rode `dd-harness check --commit <sha>` para medir a base nova.");
|
|
555
555
|
}
|
|
556
|
+
/**
|
|
557
|
+
* Pediram `--commit` e o cruzamento com o diff nao aconteceu. Avisa ANTES do resto: sem
|
|
558
|
+
* isto a saida e identica a de um commit que nao tocou em nada indexado, e quem pediu o
|
|
559
|
+
* cruzamento nao tem como saber que ele nao existiu.
|
|
560
|
+
*
|
|
561
|
+
* Aviso, nao erro: o gancho `post-commit` termina em sucesso mesmo assim, e a medicao das
|
|
562
|
+
* ancoras (que nao depende de git) continua valendo.
|
|
563
|
+
*/
|
|
564
|
+
function avisaSemGit(motivo) {
|
|
565
|
+
const texto = {
|
|
566
|
+
"sem-repositorio": "esta pasta não é um repositório git — não há diff para cruzar com as âncoras.",
|
|
567
|
+
"commit-desconhecido": "o git não reconhece este commit — confira o SHA.",
|
|
568
|
+
"git-indisponivel": "não consegui rodar o git aqui.",
|
|
569
|
+
}[motivo];
|
|
570
|
+
console.log(`AVISO: ${texto}`);
|
|
571
|
+
console.log(" As âncoras foram medidas assim mesmo; só o cruzamento com o");
|
|
572
|
+
console.log(" commit ficou de fora.");
|
|
573
|
+
console.log("");
|
|
574
|
+
}
|
|
556
575
|
async function comandoCheck(argv) {
|
|
557
576
|
const r = await check(process.cwd(), argumento(argv, "commit"));
|
|
577
|
+
if (r.semGit)
|
|
578
|
+
avisaSemGit(r.semGit);
|
|
558
579
|
if (r.medidas === 0) {
|
|
559
580
|
console.log("nenhuma âncora para medir.");
|
|
560
581
|
return;
|
package/dist/mcp/src/index.js
CHANGED
|
@@ -284,9 +284,13 @@ Conteúdo vazio é válido e significa apagar o artefato.`,
|
|
|
284
284
|
}, async ({ tipo, conteudo }) => {
|
|
285
285
|
try {
|
|
286
286
|
const r = await escreveArtefato(raiz, tipo, conteudo);
|
|
287
|
+
// Sem promessa de atraso: a politica nova ja vale para quem LER daqui em diante,
|
|
288
|
+
// inclusive nesta sessao (`ler_artefato` logo em seguida devolve o conteudo novo).
|
|
289
|
+
// O que nao muda sozinho e o que ja foi injetado no contexto pelo hook, no inicio
|
|
290
|
+
// da sessao — e essa e a distincao que a mensagem precisa fazer.
|
|
287
291
|
return texto(`${r.criou ? "Criado" : "Atualizado"} o ${r.artefato} — ${r.tamanho} caractere(s).` +
|
|
288
292
|
(tipo === "politica"
|
|
289
|
-
? "
|
|
293
|
+
? " Já vale para quem ler a partir de agora; o que foi carregado no início desta sessão não muda sozinho."
|
|
290
294
|
: ""));
|
|
291
295
|
}
|
|
292
296
|
catch (erro) {
|
package/package.json
CHANGED