synthesisui 0.16.413 → 0.16.414
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/agent-wiring.js +15 -8
- package/dist/codex-mcp.js +30 -6
- package/dist/commands/connect.js +6 -9
- package/dist/copy/connect.pt-BR.js +1 -1
- package/dist/install-marks.js +14 -1
- package/package.json +1 -1
package/dist/agent-wiring.js
CHANGED
|
@@ -159,7 +159,7 @@ async function wireHook(root, command) {
|
|
|
159
159
|
* arquivo de um editor que a pessoa não usa, e é a primeira coisa que alguém apaga com raiva - a
|
|
160
160
|
* mesma regra que já vale para o `AGENTS.md`.
|
|
161
161
|
*/
|
|
162
|
-
async function wireMcpAt(root,
|
|
162
|
+
async function wireMcpAt(root, rel) {
|
|
163
163
|
const path = join(root, rel);
|
|
164
164
|
const config = await readJson(path);
|
|
165
165
|
const servers = (config.mcpServers ?? {});
|
|
@@ -212,16 +212,21 @@ async function wireMcpAt(root, version, rel) {
|
|
|
212
212
|
* Os caminhos de MCP que este repo merece: sempre o do Claude Code, e o do Cursor quando `.cursor/`
|
|
213
213
|
* já existe. Devolve o que foi escrito, por caminho, para o `connect` poder dizer os nomes.
|
|
214
214
|
*/
|
|
215
|
-
|
|
215
|
+
/**
|
|
216
|
+
* E NENHUM DOS TRÊS RECEBE VERSÃO, desde 10/09 - o parâmetro morreu quando o Codex passou a seguir
|
|
217
|
+
* a régua de `@latest` (ver `codex-mcp.ts`). Os escritores de JSON nunca a usaram: a decisão de
|
|
218
|
+
* 06/08 é que o MCP flutua. Um argumento que ninguém lê é o próximo a ser lido por engano.
|
|
219
|
+
*/
|
|
220
|
+
async function wireMcp(root) {
|
|
216
221
|
const wrote = [];
|
|
217
222
|
wrote.push({
|
|
218
223
|
path: ".mcp.json",
|
|
219
|
-
status: await wireMcpAt(root,
|
|
224
|
+
status: await wireMcpAt(root, ".mcp.json"),
|
|
220
225
|
});
|
|
221
226
|
if (await exists(join(root, ".cursor")))
|
|
222
227
|
wrote.push({
|
|
223
228
|
path: ".cursor/mcp.json",
|
|
224
|
-
status: await wireMcpAt(root,
|
|
229
|
+
status: await wireMcpAt(root, ".cursor/mcp.json"),
|
|
225
230
|
});
|
|
226
231
|
/**
|
|
227
232
|
* E O CODEX, quando `.codex/` já existe - a mesma regra de evidência que decide o Cursor e a casa
|
|
@@ -234,7 +239,7 @@ async function wireMcp(root, version) {
|
|
|
234
239
|
if (await exists(join(root, ".codex")))
|
|
235
240
|
wrote.push({
|
|
236
241
|
path: ".codex/config.toml",
|
|
237
|
-
status: await wireCodexMcp(root
|
|
242
|
+
status: await wireCodexMcp(root),
|
|
238
243
|
});
|
|
239
244
|
return wrote;
|
|
240
245
|
}
|
|
@@ -256,11 +261,13 @@ let codexWas = null;
|
|
|
256
261
|
export function codexPinBefore() {
|
|
257
262
|
return codexWas;
|
|
258
263
|
}
|
|
259
|
-
async function wireCodexMcp(root
|
|
264
|
+
async function wireCodexMcp(root) {
|
|
260
265
|
const path = join(root, ".codex", "config.toml");
|
|
261
266
|
const current = await readFile(path, "utf8").catch(() => null);
|
|
262
267
|
const had = current != null && hasCodexBlock(current);
|
|
263
|
-
|
|
268
|
+
/** A MESMA pergunta que o escritor de JSON faz - ver `codexBlock`. */
|
|
269
|
+
const local = await exists(join(root, "node_modules", ".bin", "synthesisui"));
|
|
270
|
+
const next = withCodexBlock(current ?? "", local);
|
|
264
271
|
if (current === next)
|
|
265
272
|
return "already there";
|
|
266
273
|
/**
|
|
@@ -292,7 +299,7 @@ export async function wireAgent(root, version, want) {
|
|
|
292
299
|
session: want.hook
|
|
293
300
|
? await wireSessionStart(root, await alignCommand(root, version))
|
|
294
301
|
: "skipped",
|
|
295
|
-
mcp: want.mcp ? await wireMcp(root
|
|
302
|
+
mcp: want.mcp ? await wireMcp(root) : "skipped",
|
|
296
303
|
};
|
|
297
304
|
}
|
|
298
305
|
/**
|
package/dist/codex-mcp.js
CHANGED
|
@@ -36,8 +36,10 @@ export function hasCodexBlock(text) {
|
|
|
36
36
|
/**
|
|
37
37
|
* A versão pinada dentro da nossa região - `null` quando não há região ou quando ela não pina.
|
|
38
38
|
*
|
|
39
|
-
* O `connect` usa isto para dizer de ONDE
|
|
40
|
-
*
|
|
39
|
+
* O `connect` usa isto para dizer de ONDE a fiação saiu, que é a diferença entre "atualizei" e uma
|
|
40
|
+
* linha que a pessoa fecha sem ler. Desde 10/09 a região nova nunca pina (ver `codexBlock`), então
|
|
41
|
+
* o que esta função encontra é sempre PASSADO - e é exatamente aí que ela vale mais: um arquivo que
|
|
42
|
+
* ainda diz `synthesisui@0.16.413` está preso naquele leitor, e a tela pode dizer que ele saiu.
|
|
41
43
|
*/
|
|
42
44
|
export function pinnedInCodex(text) {
|
|
43
45
|
const start = text.indexOf(BEGIN);
|
|
@@ -50,14 +52,36 @@ export function pinnedInCodex(text) {
|
|
|
50
52
|
/**
|
|
51
53
|
* A REGIÃO, montada. `args` em duas partes porque é assim que o Codex quer a linha de comando:
|
|
52
54
|
* o executável em `command`, e o resto quebrado em array.
|
|
55
|
+
*
|
|
56
|
+
* A MESMA RÉGUA DE VERSÃO DO OUTRO ESCRITOR, e isto é um conserto de 10/09. Este bloco nascia
|
|
57
|
+
* PINADO na versão do `connect`, e o `.mcp.json` do Claude Code nasce em `@latest` desde 06/08 -
|
|
58
|
+
* duas ferramentas, o mesmo repositório, o mesmo servidor nosso, e respostas opostas sobre quando
|
|
59
|
+
* ele fica mais novo.
|
|
60
|
+
*
|
|
61
|
+
* A decisão está escrita em `agent-wiring.ts`, e vale para os dois pela mesma razão: *"um servidor
|
|
62
|
+
* MCP sobe UMA VEZ quando o editor abre a sessão e fica estável durante ela. Pinado, ele nunca
|
|
63
|
+
* ficava mais novo - e a regra que manda o agente comparar `ledger.cli` com a versão do servidor
|
|
64
|
+
* quase nunca disparava, porque os dois congelavam juntos no dia do `connect`"* (dono, 06/08). O
|
|
65
|
+
* hook é o caso oposto e continua pinado: ele resolve a CADA escrita, e ali flutuar custa 720ms-1,5s
|
|
66
|
+
* por edição e um comportamento que muda sob a pessoa.
|
|
67
|
+
*
|
|
68
|
+
* O QUE O CLIENTE PERCEBIA: o agente dele no Claude Code recebia o leitor publicado na sessão
|
|
69
|
+
* seguinte; o agente dele no Codex ficava na versão do dia em que ele rodou o `connect`, e nada na
|
|
70
|
+
* tela dizia que os dois estavam em versões diferentes.
|
|
71
|
+
*
|
|
72
|
+
* E O INSTALL LOCAL CONTINUA GANHANDO, também como no outro: quem tem o CLI no `node_modules`
|
|
73
|
+
* escolheu a versão, e `--no-install` respeita a escolha - inclusive a de quem seguiu a sugestão
|
|
74
|
+
* que o próprio `connect` imprime, de pôr o CLI nas `devDependencies`.
|
|
53
75
|
*/
|
|
54
|
-
export function codexBlock(
|
|
76
|
+
export function codexBlock(local) {
|
|
55
77
|
return [
|
|
56
78
|
BEGIN,
|
|
57
79
|
"# Managed by synthesisui. Edit outside this block; this region is rewritten on connect.",
|
|
58
80
|
"[mcp_servers.synthesisui]",
|
|
59
81
|
'command = "npx"',
|
|
60
|
-
|
|
82
|
+
local
|
|
83
|
+
? 'args = ["--no-install", "synthesisui", "mcp"]'
|
|
84
|
+
: 'args = ["synthesisui@latest", "mcp"]',
|
|
61
85
|
END,
|
|
62
86
|
].join("\n");
|
|
63
87
|
}
|
|
@@ -73,8 +97,8 @@ export function codexBlock(version) {
|
|
|
73
97
|
* perdeu. Aí a gente devolve o arquivo COMO ESTÁ: apagar até o fim seria destruir o que vem
|
|
74
98
|
* depois, e é a mesma decisão que o `withHook` toma no perfil de shell.
|
|
75
99
|
*/
|
|
76
|
-
export function withCodexBlock(text,
|
|
77
|
-
const block = codexBlock(
|
|
100
|
+
export function withCodexBlock(text, local) {
|
|
101
|
+
const block = codexBlock(local);
|
|
78
102
|
if (!hasCodexBlock(text))
|
|
79
103
|
return `${text.replace(/\n*$/, "")}\n\n${block}\n`.replace(/^\n+/, "");
|
|
80
104
|
const start = text.indexOf(BEGIN);
|
package/dist/commands/connect.js
CHANGED
|
@@ -367,16 +367,13 @@ export async function connect(opts) {
|
|
|
367
367
|
? `✓ ${one.path.padEnd(22)} ${fmt("{n} tools the agent can ask", { n: MCP_TOOL_COUNT })}`
|
|
368
368
|
: one.status === "updated"
|
|
369
369
|
? /**
|
|
370
|
-
*
|
|
371
|
-
*
|
|
372
|
-
*
|
|
373
|
-
*
|
|
374
|
-
* em 06/08, quando "already had it" escondia um pin antigo.
|
|
370
|
+
* O QUE MUDOU É SEMPRE A MESMA COISA AGORA: a entrada parou de segurar um leitor
|
|
371
|
+
* velho. As três ferramentas seguem a régua de 06/08 (ver `codexBlock`), então a
|
|
372
|
+
* frase é uma - e o Codex só ganha uma metade a mais, porque ele é o único cujo
|
|
373
|
+
* arquivo pode estar vindo de um PIN nosso, escrito antes de 10/09.
|
|
375
374
|
*/
|
|
376
|
-
one.path.endsWith(".toml")
|
|
377
|
-
? `✓ ${one.path.padEnd(22)} ${fmt(codexPinBefore()
|
|
378
|
-
? "the tools moved from {was} to this one"
|
|
379
|
-
: "{n} tools the agent can ask", { was: codexPinBefore() ?? "", n: MCP_TOOL_COUNT })}`
|
|
375
|
+
one.path.endsWith(".toml") && codexPinBefore()
|
|
376
|
+
? `✓ ${one.path.padEnd(22)} ${fmt("was pinned to {was} - now it follows the published reader", { was: codexPinBefore() ?? "" })}`
|
|
380
377
|
: `✓ ${one.path.padEnd(22)} ${say("unpinned - it follows the published reader")}`
|
|
381
378
|
: `· ${one.path.padEnd(22)} ${say("already had it")}`);
|
|
382
379
|
}
|
|
@@ -39,7 +39,7 @@ register("pt-BR", {
|
|
|
39
39
|
"· .claude/settings.json the session check was already there": "· .claude/settings.json a verificação de sessão já estava lá",
|
|
40
40
|
// ── o MCP e as skills ──
|
|
41
41
|
"{n} tools the agent can ask": "{n} ferramentas que o agente pode consultar",
|
|
42
|
-
"
|
|
42
|
+
"was pinned to {was} - now it follows the published reader": "estava pinado na {was} - agora acompanha o leitor publicado",
|
|
43
43
|
"unpinned - it follows the published reader": "solto - acompanha o leitor publicado",
|
|
44
44
|
"already had it": "já estava lá",
|
|
45
45
|
"already current": "já está em dia",
|
package/dist/install-marks.js
CHANGED
|
@@ -187,7 +187,20 @@
|
|
|
187
187
|
* O que o cliente ganha ao rodar `upgrade`: os componentes que ele já tem voltam a ser reescritos
|
|
188
188
|
* pelo materializador que respeita a edição dele em TODO comando, e não só em dois.
|
|
189
189
|
*/
|
|
190
|
-
|
|
190
|
+
/**
|
|
191
|
+
* 0.16.412 -> 0.16.414 em 10/09: as ferramentas do sistema param de congelar no Codex. A região que
|
|
192
|
+
* a gente escreve em `.codex/config.toml` nascia PINADA na versão do `connect`, e o `.mcp.json` do
|
|
193
|
+
* Claude Code nasce solta desde 06/08 - o agente dele numa ferramenta recebia o leitor publicado na
|
|
194
|
+
* sessão seguinte, e na outra ficava no do dia em que ele rodou o comando. Medido no repositório do
|
|
195
|
+
* dono depois de um `connect` da 0.16.413: `@latest` num arquivo, `@0.16.413` no outro.
|
|
196
|
+
*
|
|
197
|
+
* São BYTES DIFERENTES na pasta dele, e o `upgrade` chama `wireAgent`: quem já instalou sai do pin
|
|
198
|
+
* rodando o comando, e a tela diz de qual versão ele saiu.
|
|
199
|
+
*
|
|
200
|
+
* O que o cliente ganha ao rodar `upgrade`: o agente dele no Codex volta a ler o interpretador
|
|
201
|
+
* publicado, em vez do que existia no dia em que ele conectou.
|
|
202
|
+
*/
|
|
203
|
+
export const MATERIALISER_SINCE = "0.16.414";
|
|
191
204
|
/**
|
|
192
205
|
* A ÚLTIMA VERSÃO EM QUE O QUE O HOOK RODA MUDOU.
|
|
193
206
|
*
|
package/package.json
CHANGED