dd-harness 0.13.0 → 0.14.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/escreve-config.d.ts +17 -6
- package/dist/escreve-config.js +25 -16
- package/dist/index.js +13 -10
- package/package.json +1 -1
package/dist/escreve-config.d.ts
CHANGED
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
/**
|
|
2
|
-
* Escrita de `.claude/settings.json`, `.mcp.json` e `AGENTS.md`, com merge.
|
|
2
|
+
* Escrita de `.claude/settings.json`, `.mcp.json`, `CLAUDE.md` e `AGENTS.md`, com merge.
|
|
3
3
|
*
|
|
4
4
|
* `init` (o comando antigo) so SUGERE esses arquivos — decisao de proposito, porque
|
|
5
5
|
* mesclar JSON alheio e onde falha silenciosa nasce. `start` (o wizard) reverte essa
|
|
@@ -31,11 +31,22 @@ export declare function escreveHook(raiz: string): Promise<ResultadoDaEscrita<"c
|
|
|
31
31
|
/** Acrescenta o servidor MCP a `.mcp.json`, sem tocar em outros servidores. */
|
|
32
32
|
export declare function escreveMcp(raiz: string): Promise<ResultadoDaEscrita<"criado" | "ja-tinha" | "acrescentado">>;
|
|
33
33
|
/**
|
|
34
|
-
*
|
|
35
|
-
*
|
|
36
|
-
*
|
|
37
|
-
*
|
|
34
|
+
* Os dois pontos de entrada do repositorio — `CLAUDE.md` (Claude Code) e `AGENTS.md`
|
|
35
|
+
* (Codex, Cursor, Gemini CLI, Windsurf) — sao ESPELHOS: o mesmo apontamento para o
|
|
36
|
+
* dd-harness, sem regra propria. Nenhum dos dois e opcional, e nao ha pergunta sobre
|
|
37
|
+
* "qual ferramenta voce usa": quem abre o repositorio encontra o protocolo pela porta
|
|
38
|
+
* que a SUA ferramenta le, e as duas dizem a mesma coisa. Regra fica no servico; aqui
|
|
39
|
+
* fica so o ponteiro — por isso espelhar nao duplica nada que possa divergir.
|
|
40
|
+
*
|
|
41
|
+
* Markdown e livre, nao JSON: nao ha "mesclar" de verdade. Se o arquivo ja existe (com
|
|
42
|
+
* qualquer conteudo), so acrescenta a instrucao no fim; nunca sobrescreve o que a pessoa
|
|
43
|
+
* escreveu, porque markdown alheio e mais dificil de separar do nosso do que uma chave
|
|
44
|
+
* de objeto.
|
|
38
45
|
*/
|
|
39
|
-
export declare function
|
|
46
|
+
export declare function escrevePonteiro(raiz: string, arquivo: "AGENTS.md" | "CLAUDE.md"): Promise<{
|
|
47
|
+
estado: "criado" | "ja-tinha" | "acrescentado";
|
|
48
|
+
}>;
|
|
49
|
+
/** Compatibilidade: `init` ainda chama pelo nome antigo. */
|
|
50
|
+
export declare const escreveAgents: (raiz: string) => Promise<{
|
|
40
51
|
estado: "criado" | "ja-tinha" | "acrescentado";
|
|
41
52
|
}>;
|
package/dist/escreve-config.js
CHANGED
|
@@ -63,13 +63,20 @@ export async function escreveMcp(raiz) {
|
|
|
63
63
|
return { ok: true, estado: eraVazio ? "criado" : "acrescentado" };
|
|
64
64
|
}
|
|
65
65
|
/**
|
|
66
|
-
*
|
|
67
|
-
*
|
|
68
|
-
*
|
|
69
|
-
*
|
|
66
|
+
* Os dois pontos de entrada do repositorio — `CLAUDE.md` (Claude Code) e `AGENTS.md`
|
|
67
|
+
* (Codex, Cursor, Gemini CLI, Windsurf) — sao ESPELHOS: o mesmo apontamento para o
|
|
68
|
+
* dd-harness, sem regra propria. Nenhum dos dois e opcional, e nao ha pergunta sobre
|
|
69
|
+
* "qual ferramenta voce usa": quem abre o repositorio encontra o protocolo pela porta
|
|
70
|
+
* que a SUA ferramenta le, e as duas dizem a mesma coisa. Regra fica no servico; aqui
|
|
71
|
+
* fica so o ponteiro — por isso espelhar nao duplica nada que possa divergir.
|
|
72
|
+
*
|
|
73
|
+
* Markdown e livre, nao JSON: nao ha "mesclar" de verdade. Se o arquivo ja existe (com
|
|
74
|
+
* qualquer conteudo), so acrescenta a instrucao no fim; nunca sobrescreve o que a pessoa
|
|
75
|
+
* escreveu, porque markdown alheio e mais dificil de separar do nosso do que uma chave
|
|
76
|
+
* de objeto.
|
|
70
77
|
*/
|
|
71
|
-
export async function
|
|
72
|
-
const caminho = join(raiz,
|
|
78
|
+
export async function escrevePonteiro(raiz, arquivo) {
|
|
79
|
+
const caminho = join(raiz, arquivo);
|
|
73
80
|
const instrucao = SUGESTAO_AGENTS;
|
|
74
81
|
let atual = null;
|
|
75
82
|
try {
|
|
@@ -88,14 +95,16 @@ export async function escreveAgents(raiz) {
|
|
|
88
95
|
await writeFile(caminho, `${atual}${separador}${instrucao}\n`, "utf8");
|
|
89
96
|
return { estado: "acrescentado" };
|
|
90
97
|
}
|
|
91
|
-
|
|
92
|
-
|
|
93
|
-
|
|
94
|
-
|
|
95
|
-
|
|
96
|
-
|
|
97
|
-
de
|
|
98
|
-
|
|
99
|
-
|
|
100
|
-
|
|
98
|
+
/** Compatibilidade: `init` ainda chama pelo nome antigo. */
|
|
99
|
+
export const escreveAgents = (raiz) => escrevePonteiro(raiz, "AGENTS.md");
|
|
100
|
+
const SUGESTAO_AGENTS = `## Protocolo do dd-harness
|
|
101
|
+
|
|
102
|
+
Este projeto tem um protocolo de trabalho que **não está neste arquivo**.
|
|
103
|
+
|
|
104
|
+
**ANTES de qualquer outra coisa**, chame a ferramenta MCP \`ler_artefato\` com
|
|
105
|
+
\`tipo: "politica"\` e siga o que ela devolver. É a primeira ação da sessão, antes
|
|
106
|
+
de ler código, responder ou planejar.
|
|
107
|
+
|
|
108
|
+
- Se a ferramenta não existir, o servidor MCP do dd-harness não está declarado:
|
|
109
|
+
avise o usuário e **não modifique nada** até ele resolver.
|
|
101
110
|
- Se ela devolver vazio, este projeto nunca foi briefado — diga isso ao usuário.`;
|
package/dist/index.js
CHANGED
|
@@ -14,7 +14,7 @@ process.removeAllListeners("warning");
|
|
|
14
14
|
import { termosDaConsulta } from "./argv.js";
|
|
15
15
|
import { check, status } from "./check.js";
|
|
16
16
|
import { CAMINHO_CONFIG, guardaConfigDaMaquina, guardaToken, leConfigDaMaquina, leConfigDoRepo, leToken, } from "./config.js";
|
|
17
|
-
import {
|
|
17
|
+
import { escreveHook, escreveMcp, escrevePonteiro } from "./escreve-config.js";
|
|
18
18
|
import { grava } from "./gravar.js";
|
|
19
19
|
import { init, SUGESTAO_AGENTS, SUGESTAO_HOOK, SUGESTAO_MCP } from "./init.js";
|
|
20
20
|
import { pergunta, escolha, fechaPerguntas } from "./pergunta.js";
|
|
@@ -287,15 +287,18 @@ async function comandoStart() {
|
|
|
287
287
|
"conexão do Claude Code pode demorar ou falhar; se falhar, abra uma nova sessão " +
|
|
288
288
|
"e tente de novo.");
|
|
289
289
|
}
|
|
290
|
-
// 6. AGENTS.md —
|
|
291
|
-
|
|
292
|
-
|
|
293
|
-
|
|
294
|
-
|
|
295
|
-
|
|
296
|
-
|
|
297
|
-
|
|
298
|
-
}
|
|
290
|
+
// 6. CLAUDE.md e AGENTS.md — os dois SEMPRE, sem perguntar. Sao espelhos: o mesmo
|
|
291
|
+
// apontamento para o servico, cada um na porta que uma familia de ferramenta le. A
|
|
292
|
+
// pergunta "usa outra ferramenta?" saiu porque a resposta nao muda nada que valha a
|
|
293
|
+
// pena — quem responde "nao" hoje abre o repositorio no Cursor semana que vem e nao
|
|
294
|
+
// encontra protocolo nenhum, e o custo de ja ter o arquivo e um ponteiro de 8 linhas.
|
|
295
|
+
console.log("");
|
|
296
|
+
for (const arquivo of ["CLAUDE.md", "AGENTS.md"]) {
|
|
297
|
+
const r = await escrevePonteiro(process.cwd(), arquivo);
|
|
298
|
+
console.log({ criado: `criado ${arquivo}`,
|
|
299
|
+
"ja-tinha": `mantido ${arquivo} — já apontava para a política`,
|
|
300
|
+
acrescentado: `atualizado ${arquivo} (apontamento acrescentado ao que já existia)`,
|
|
301
|
+
}[r.estado]);
|
|
299
302
|
}
|
|
300
303
|
// 7. Onde esta o monorepo do worker nesta maquina? So pergunta uma vez, e so importa
|
|
301
304
|
// se houver memoria na fila agora — pular aqui nao trava nada, so avisa mais vezes.
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "dd-harness",
|
|
3
|
-
"version": "0.
|
|
3
|
+
"version": "0.14.0",
|
|
4
4
|
"type": "module",
|
|
5
5
|
"description": "Cliente do dd-harness: politica no inicio da sessao, e memoria por busca — nada em disco. Sem dependencia: fetch, crypto e fs sao do Node.",
|
|
6
6
|
"license": "UNLICENSED",
|