dd-harness 0.33.1 → 0.34.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/index.js +15 -3
- package/dist/sessao.js +18 -4
- package/package.json +1 -1
package/dist/index.js
CHANGED
|
@@ -56,7 +56,12 @@ const AJUDA = `dd-harness — a política e o Brain do projeto, no serviço
|
|
|
56
56
|
dd-harness sessao --host <host> hook de boot (stdin JSON)
|
|
57
57
|
dd-harness guarda --host <host> hook antes de ferramentas (stdin JSON)
|
|
58
58
|
dd-harness start [--host <host>] numa pasta vazia: conduz tudo (login,
|
|
59
|
-
espaço, projeto, config) numa tacada
|
|
59
|
+
espaço, projeto, config) numa tacada.
|
|
60
|
+
Instala os TRÊS hosts por padrão (claude,
|
|
61
|
+
codex, antigravity) — cada um escreve no
|
|
62
|
+
arquivo que a sua ferramenta lê, sem
|
|
63
|
+
conflito. Use --host claude,codex para
|
|
64
|
+
limitar
|
|
60
65
|
dd-harness login --token <token> [--api <url>]
|
|
61
66
|
guarda a credencial desta máquina
|
|
62
67
|
dd-harness projeto <slug> --nome "<nome>" [--tenant <t>] [--api <url>]
|
|
@@ -354,7 +359,13 @@ function mascara(token) {
|
|
|
354
359
|
* o merge cuidadoso em `escreve-config.ts`: nunca perder o que a pessoa ja tinha.
|
|
355
360
|
*/
|
|
356
361
|
async function comandoStart(argv) {
|
|
357
|
-
|
|
362
|
+
// Todos os hosts por padrao, como o `integrar` ja fazia. Instalar so o Claude obrigava
|
|
363
|
+
// quem abrisse o mesmo repositorio no Codex a descobrir sozinho que faltava um comando —
|
|
364
|
+
// e o projeto so descobre isso quando o outro host ja esta aberto e sem protocolo.
|
|
365
|
+
// Configuracao de host nao e escolha do dia da criacao: e a porta que CADA ferramenta
|
|
366
|
+
// usa, e as tres escrevem em arquivos diferentes, sem conflito. `--host` continua
|
|
367
|
+
// aceitando a lista explicita para quem quiser menos.
|
|
368
|
+
const hosts = selecionaHosts(argumento(argv, "host") ?? "todos");
|
|
358
369
|
const caminhoConfig = join(process.cwd(), CAMINHO_CONFIG);
|
|
359
370
|
try {
|
|
360
371
|
await access(caminhoConfig);
|
|
@@ -496,8 +507,9 @@ async function comandoStart(argv) {
|
|
|
496
507
|
const { escritos, conflitos } = await escrevePonteirosDeSkills(process.cwd(), skills, hosts.map(h => h === "claude" ? ".claude" : ".agents"));
|
|
497
508
|
if (conflitos.length)
|
|
498
509
|
console.log("Ponteiros preservados por conflito: " + conflitos.join(", "));
|
|
510
|
+
const destinos = [...new Set(hosts.map(h => h === "claude" ? ".claude" : ".agents"))];
|
|
499
511
|
console.log(escritos > 0
|
|
500
|
-
? `escritos ${escritos} ponteiro(s) de skill em .
|
|
512
|
+
? `escritos ${escritos} ponteiro(s) de skill em ${destinos.map(d => d + "/skills/").join(" e ")}`
|
|
501
513
|
: `${skills.length} skill(s) — ponteiros já estavam em dia`);
|
|
502
514
|
}
|
|
503
515
|
}
|
package/dist/sessao.js
CHANGED
|
@@ -126,10 +126,24 @@ export async function guardaSessao(host, entrada) {
|
|
|
126
126
|
//
|
|
127
127
|
// Nao e afrouxamento: o que passa aqui e so o que CONSTROI o contexto obrigatorio, e
|
|
128
128
|
// so enquanto ele nao existe. Na primeira politica gravada, este caminho fecha sozinho.
|
|
129
|
-
|
|
130
|
-
|
|
131
|
-
|
|
132
|
-
|
|
129
|
+
const r = await buscaPolitica(raiz).catch(() => null);
|
|
130
|
+
if (ONBOARDING.test(c.ferramenta) && r?.estado === "sem-politica")
|
|
131
|
+
return saidaDaGuarda(host);
|
|
132
|
+
// O briefing acabou de ser gravado NESTA sessao: o servico ja tem os dois, mas o boot
|
|
133
|
+
// desta sessao rodou quando nao havia nada, e o estado local ficou velho. O agente sai
|
|
134
|
+
// do onboarding direto para um segundo bloqueio, sem nada indicando o que fazer —
|
|
135
|
+
// medido no dd-playwright, onde ele concluiu sozinho que precisava reiniciar e pediu
|
|
136
|
+
// ao usuario.
|
|
137
|
+
//
|
|
138
|
+
// Continua NEGANDO, e de proposito: e o SessionStart que entrega politica e briefing ao
|
|
139
|
+
// modelo, e liberar aqui daria trabalho sem o contexto que a guarda existe para
|
|
140
|
+
// garantir. O que muda e a mensagem — quem le passa a saber que o projeto esta pronto e
|
|
141
|
+
// que falta so reabrir, em vez de procurar o que ainda estaria faltando.
|
|
142
|
+
if (r?.estado === "ok") {
|
|
143
|
+
return saidaDaGuarda(host, "dd-harness: política e briefing JÁ EXISTEM no serviço, mas o boot " +
|
|
144
|
+
"desta sessão rodou antes de eles existirem — por isso o contexto não chegou ao modelo. " +
|
|
145
|
+
"Nada falta gravar: **reabra a sessão** para o boot carregá-los. " +
|
|
146
|
+
"Enquanto isso, leitura (Read/Glob/Grep) e as ferramentas de leitura do dd-harness continuam liberadas.");
|
|
133
147
|
}
|
|
134
148
|
return saidaDaGuarda(host, "dd-harness: política e briefing não foram carregados nesta sessão/projeto. " +
|
|
135
149
|
"Se este projeto é novo, conduza o briefing e grave os dois com `escrever_artefato`; " +
|
package/package.json
CHANGED