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 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
- const hosts = selecionaHosts(argumento(argv, "host"));
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 .claude/skills/`
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
- if (ONBOARDING.test(c.ferramenta)) {
130
- const r = await buscaPolitica(raiz).catch(() => null);
131
- if (r?.estado === "sem-politica")
132
- return saidaDaGuarda(host);
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
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "dd-harness",
3
- "version": "0.33.1",
3
+ "version": "0.34.0",
4
4
  "type": "module",
5
5
  "description": "Política, memória e integrações de Claude Code, Codex e Antigravity. CLI sem dependências de runtime.",
6
6
  "license": "UNLICENSED",