synthesisui 0.16.359 → 0.16.360

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,7 +1,12 @@
1
1
  import { access, mkdir, readFile, writeFile } from "node:fs/promises";
2
2
  import { dirname, join } from "node:path";
3
3
  const HOOK_MATCHER = "Write|Edit|MultiEdit";
4
- const exists = (p) => access(p).then(() => true, () => false);
4
+ /**
5
+ * Exportado porque a REGRA é uma só: a pasta de uma ferramenta é a evidência de que ela é usada, e
6
+ * a mesma evidência decide o MCP daqui e a casa do bloco em `claude-md.ts`. Duas cópias deste
7
+ * predicado seriam duas chances de as duas decisões divergirem.
8
+ */
9
+ export const exists = (p) => access(p).then(() => true, () => false);
5
10
  async function readJson(path) {
6
11
  const raw = await readFile(path, "utf8").catch(() => "");
7
12
  if (!raw.trim())
package/dist/claude-md.js CHANGED
@@ -1,6 +1,6 @@
1
1
  import { mkdir, readdir, readFile, writeFile } from "node:fs/promises";
2
2
  import { dirname, join } from "node:path";
3
- import { hasHook } from "./agent-wiring.js";
3
+ import { exists, hasHook } from "./agent-wiring.js";
4
4
  import { declaredReference } from "./group-role.js";
5
5
  import { recallAvailable } from "./memory/availability.js";
6
6
  const START = "<!-- synthesisui:start -->";
@@ -573,10 +573,11 @@ _Block managed by the CLI - do not edit by hand; run \`synthesisui ${onlyAdopted
573
573
  */
574
574
  const HOMES = [
575
575
  { path: "CLAUDE.md" },
576
- { path: "AGENTS.md" },
576
+ { path: "AGENTS.md", bornWhen: ".codex" },
577
577
  {
578
578
  path: ".cursor/rules/synthesisui.mdc",
579
579
  frontmatter: "---\ndescription: Design system rules - read before writing UI\nalwaysApply: true\n---\n\n",
580
+ bornWhen: ".cursor",
580
581
  },
581
582
  ];
582
583
  export async function syncClaudeMd(projectRoot) {
@@ -594,15 +595,18 @@ export async function syncClaudeMd(projectRoot) {
594
595
  existing = null;
595
596
  }
596
597
  /**
597
- * O ARQUIVO NOVO SÓ NASCE PARA O CLAUDE.md.
598
+ * O ARQUIVO NOVO NASCE QUANDO O REPOSITÓRIO JÁ MOSTROU QUEM ELE USA - ver `bornWhen`.
598
599
  *
599
- * Criar `AGENTS.md` num repo que nunca teve um é decidir por outra pessoa qual agente ela usa, e
600
- * um arquivo que apareceu sozinho na raiz é a primeira coisa que alguém apaga com raiva. Nos
601
- * outros dois a regra é: se o arquivo existe, o bloco entra e se mantém atualizado; se não
602
- * existe, não inventamos um.
600
+ * `CLAUDE.md` sem condição, porque é a casa que a gente cria num repo que não tem nenhuma. Os
601
+ * outros dois só quando a pasta da ferramenta está lá: criar `AGENTS.md` num repo que só usa
602
+ * Claude Code continua sendo decidir por outra pessoa qual agente ela usa, e um arquivo que
603
+ * apareceu sozinho na raiz é a primeira coisa que alguém apaga com raiva.
603
604
  */
604
605
  if (existing === null) {
605
- if (home.path !== "CLAUDE.md")
606
+ const authorised = home.path === "CLAUDE.md" ||
607
+ (home.bornWhen != null &&
608
+ (await exists(join(projectRoot, home.bornWhen))));
609
+ if (!authorised)
606
610
  continue;
607
611
  await mkdir(dirname(path), { recursive: true }).catch(() => { });
608
612
  await writeFile(path, `${home.frontmatter ?? ""}${region}\n`, "utf8");
@@ -152,7 +152,17 @@
152
152
  * comentou vinha sendo escrito na pasta dele como componente de verdade. Medido em 14 arquivos
153
153
  * das duas populações o nó fantasma era a RAIZ - o elemento cujas classes viram a `base`.
154
154
  */
155
- export const MATERIALISER_SINCE = "0.16.349";
155
+ /**
156
+ * 0.16.349 -> 0.16.360 em 03/09: a casa do bloco de governança passa a NASCER da pasta da
157
+ * ferramenta. Um repositório com `.codex/` recebe `AGENTS.md`, e um com `.cursor/` recebe
158
+ * `.cursor/rules/synthesisui.mdc` - dois arquivos que o materializador antes só atualizava se a
159
+ * pessoa já os tivesse escrito à mão. São bytes NOVOS na pasta dele, então esta é a primeira vez em
160
+ * seis cobranças que o passo 1 dá SIM.
161
+ *
162
+ * O que o cliente ganha ao rodar `upgrade`: as regras do sistema passam a existir no arquivo que o
163
+ * agente DELE lê, em vez de só no do Claude Code.
164
+ */
165
+ export const MATERIALISER_SINCE = "0.16.360";
156
166
  /**
157
167
  * A ÚLTIMA VERSÃO EM QUE O QUE O HOOK RODA MUDOU.
158
168
  *
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "synthesisui",
3
- "version": "0.16.359",
3
+ "version": "0.16.360",
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": {