dd-harness 0.33.0 → 0.33.1
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/sessao.js +31 -3
- package/package.json +1 -1
package/dist/sessao.js
CHANGED
|
@@ -97,15 +97,43 @@ export function saidaDaGuarda(host, motivo, contexto) {
|
|
|
97
97
|
// Só ferramentas conhecidas de leitura passam quando o boot falta. Shell não é classificado por regex.
|
|
98
98
|
const LEITURA = /^(Read|Glob|Grep|view_file|list_dir|find_by_name|grep_search|ask_question|AskUserQuestion|request_user_input)$/;
|
|
99
99
|
const LEITURA_MCP = /^mcp__dd[-_]harness__(ler_artefato|ler_roadmap|ler_changelog|listar_skills|ler_skill|ler_memoria|buscar_memoria)$/;
|
|
100
|
+
/**
|
|
101
|
+
* O que um projeto SEM politica precisa para ganhar uma.
|
|
102
|
+
*
|
|
103
|
+
* `escrever_artefato` grava os dois obrigatorios; `criar_pasta`/`criar_projeto` completam
|
|
104
|
+
* o onboarding. `ToolSearch` entra porque nao toca no projeto — so descreve ferramentas —,
|
|
105
|
+
* e barra-lo tira do agente a chance de achar a que resolveria.
|
|
106
|
+
*
|
|
107
|
+
* **`Bash` fica de fora, e isso e deliberado.** O onboarding e a janela em que a guarda
|
|
108
|
+
* confia no servico em vez do boot, e shell arbitrario e superficie grande demais para
|
|
109
|
+
* entrar por ela: o codigo do projeto e justamente o que a guarda existe para proteger.
|
|
110
|
+
* Conduzir briefing se faz lendo (Read/Glob/Grep ja passam) e perguntando. Ha teste que
|
|
111
|
+
* tranca isto — se for para mudar, e decisao consciente, nao efeito colateral.
|
|
112
|
+
*/
|
|
113
|
+
const ONBOARDING = /^(ToolSearch|mcp__dd[-_]harness__(escrever_artefato|criar_pasta|criar_projeto))$/;
|
|
100
114
|
export async function guardaSessao(host, entrada) {
|
|
101
115
|
const c = normalizaEntrada(host, entrada);
|
|
102
116
|
const raiz = await achaRaiz(c.raiz);
|
|
103
117
|
const e = c.sessao ? await estadoAtual(raiz, c.sessao, host) : null;
|
|
104
118
|
if (e?.estado !== "ok") {
|
|
105
|
-
|
|
106
|
-
if (LEITURA.test(c.ferramenta) || LEITURA_MCP.test(c.ferramenta) || onboarding)
|
|
119
|
+
if (LEITURA.test(c.ferramenta) || LEITURA_MCP.test(c.ferramenta))
|
|
107
120
|
return saidaDaGuarda(host);
|
|
108
|
-
|
|
121
|
+
// O dia zero de um projeto novo trava num ciclo: gravar o briefing exige a guarda
|
|
122
|
+
// liberada, e a guarda so libera com briefing gravado. `estadoAtual` devolve `null`
|
|
123
|
+
// tanto para "projeto novo" quanto para "sessao expirada", entao o estado local nao
|
|
124
|
+
// distingue os dois — quem sabe e o SERVICO. Se ele diz que nao ha politica, este
|
|
125
|
+
// projeto ainda esta em onboarding e as ferramentas de escreve-lo passam.
|
|
126
|
+
//
|
|
127
|
+
// Nao e afrouxamento: o que passa aqui e so o que CONSTROI o contexto obrigatorio, e
|
|
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);
|
|
133
|
+
}
|
|
134
|
+
return saidaDaGuarda(host, "dd-harness: política e briefing não foram carregados nesta sessão/projeto. " +
|
|
135
|
+
"Se este projeto é novo, conduza o briefing e grave os dois com `escrever_artefato`; " +
|
|
136
|
+
"se não, reabra a sessão para o boot rodar.");
|
|
109
137
|
}
|
|
110
138
|
const edicoes = edicoesDaChamada(c);
|
|
111
139
|
const avisos = [];
|
package/package.json
CHANGED