synthesisui 0.16.446 → 0.16.447

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.
@@ -1,4 +1,5 @@
1
1
  import { access, mkdir, readFile, writeFile } from "node:fs/promises";
2
+ import { homedir } from "node:os";
2
3
  import { dirname, join } from "node:path";
3
4
  import { hasCodexBlock, pinnedInCodex, withCodexBlock } from "./codex-mcp.js";
4
5
  import { wrapperSource } from "./statusline-wrapper.js";
@@ -341,7 +342,16 @@ async function wireCodexMcp(root) {
341
342
  * o `settings.json`, nem o invólucro, que guardaria o comando ERRADO se fosse regravado (ele já
342
343
  * aponta para si mesmo, e o anterior se perderia).
343
344
  */
344
- export async function wireStatusLine(root) {
345
+ export async function wireStatusLine(root,
346
+ /**
347
+ * A CASA, INJETADA - e não lida de `process.env` dentro do teste.
348
+ *
349
+ * O teste precisa de um `~/.claude/settings.json` de mentira, e a primeira versão trocava o
350
+ * `HOME` do processo para consegui-lo. Duas coisas erradas nisso: o gate de provas dependentes de
351
+ * máquina passa a ver este spec como quem lê a casa de quem roda - e ele estaria certo, porque
352
+ * trocar env é global e vaza para o que roda em paralelo ao lado.
353
+ */
354
+ home = homedir()) {
345
355
  const rel = "_synthesisui/statusline.mjs";
346
356
  const ours = `node ${rel}`;
347
357
  const dir = join(root, ".claude");
@@ -351,7 +361,23 @@ export async function wireStatusLine(root) {
351
361
  const command = typeof current?.command === "string" ? current.command : "";
352
362
  if (command.includes(rel))
353
363
  return { status: "already there", command: ours };
354
- const was = command.trim() ? command : null;
364
+ /**
365
+ * A BARRA DELE PODE MORAR NO SETTINGS GLOBAL, E QUASE SEMPRE MORA - achado em 21/09, com o print
366
+ * dele na mão e o invólucro já instalado.
367
+ *
368
+ * A primeira versão olhava só o `.claude/settings.json` DO PROJETO. No repositório dele não havia
369
+ * `statusLine` ali - o Pulse está em `~/.claude/settings.json` -, então o invólucro nasceu com
370
+ * "não havia barra anterior" e deixaria de chamar o Pulse. Na sessão seguinte ele perderia a barra
371
+ * inteira e veria só o nosso segmento: exatamente o contrário do que ele pediu.
372
+ *
373
+ * O Claude Code resolve `statusLine` do projeto SOBRE o global, então o que a gente substitui é o
374
+ * que estava valendo ali - e o que estava valendo é o global quando o projeto cala.
375
+ */
376
+ const globalPath = join(home, ".claude", "settings.json");
377
+ const globalSettings = await readJson(globalPath);
378
+ const globalLine = globalSettings.statusLine;
379
+ const fallback = typeof globalLine?.command === "string" ? globalLine.command : "";
380
+ const was = command.trim() ? command : fallback.trim() ? fallback : null;
355
381
  await mkdir(join(root, "_synthesisui"), { recursive: true });
356
382
  await writeFile(join(root, rel), wrapperSource(was), "utf8");
357
383
  await mkdir(dir, { recursive: true });
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "synthesisui",
3
- "version": "0.16.446",
3
+ "version": "0.16.447",
4
4
  "description": "Bring SynthesisUI design systems into any project - tokens, typed components, whole pages and an agent-ready CLAUDE.md manifest.",
5
5
  "type": "module",
6
6
  "bin": {