synthesisui 0.16.434 → 0.16.435

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.
@@ -56,7 +56,7 @@ import { consumersOf, outsideScope, } from "../outside-scope.js";
56
56
  import { phase, startProgress } from "../progress.js";
57
57
  import { repoStateOf } from "../repo-state.js";
58
58
  import { relatorioHtml, secoesDe } from "../report-html.js";
59
- import { abertura, aneis, historiaDeCor, oQueMuda } from "../report-insight.js";
59
+ import { abertura, aneis, historiaDeCor, oQueMuda, passos, } from "../report-insight.js";
60
60
  import { runtimeDeclaredVars, runtimeDeclaredVarsIn } from "../runtime-vars.js";
61
61
  import { detectStack, resolveDeps, stackVersions } from "../stack.js";
62
62
  import { desligarCaptura, ligarCaptura } from "../transcript.js";
@@ -3793,6 +3793,7 @@ async function mostrarInspecao(c, root, transcrito) {
3793
3793
  */
3794
3794
  comando: "npx synthesisui@latest import",
3795
3795
  muda: oQueMuda(c),
3796
+ passos: passos(),
3796
3797
  });
3797
3798
  console.log(section("What came out of your files"));
3798
3799
  console.log(body(`${paint.strong(`${lidos} of ${total}`)} components came out with a blueprint${pct === null
@@ -113,6 +113,7 @@ ${desenharCor(input.cor)}
113
113
  ${corpo}
114
114
 
115
115
  ${desenharMuda(input.muda ?? [], input.comando)}
116
+ ${desenharPassos(input.passos ?? [])}
116
117
 
117
118
  <footer>
118
119
  <p>Dressed by Halogen v${HALOGEN_VERSION}, a design system from the SynthesisUI gallery.</p>
@@ -124,6 +125,32 @@ ${desenharMuda(input.muda ?? [], input.comando)}
124
125
  </html>
125
126
  `;
126
127
  }
128
+ /**
129
+ * O CAMINHO INTEIRO, numerado, com o que cada comando FAZ antes do que digitar.
130
+ *
131
+ * O botão no topo do bloco não é decoração: quem leu a conta e decidiu adotar tem um alvo único
132
+ * para o olho, e o passo a passo logo abaixo para quando ele perguntar "e depois?". Ele leva para a
133
+ * primeira linha - não para fora da página, porque a página não faz requisição nenhuma.
134
+ */
135
+ function desenharPassos(passos) {
136
+ if (passos.length === 0)
137
+ return "";
138
+ const itens = passos
139
+ .map((p, i) => ` <li>
140
+ <div class="passo-topo"><b>${i + 1}</b><h3>${escapar(p.titulo)}</h3></div>
141
+ <code class="comando grande">${escapar(p.comando)}</code>
142
+ <p>${escapar(p.porque)}</p>
143
+ </li>`)
144
+ .join("\n");
145
+ return ` <section class="chapter passos" style="--ordem:12">
146
+ <h2><span>How to install it, start to finish</span></h2>
147
+ <p class="callout">Three commands, in this order. Each one says what it does before it says what to type - a command without a stated consequence is somebody pasting into their terminal on faith.</p>
148
+ <a class="botao" href="#passo-1">Install SynthesisUI</a>
149
+ <ol class="lista-passos" id="passo-1">
150
+ ${itens}
151
+ </ol>
152
+ </section>`;
153
+ }
127
154
  /**
128
155
  * A ÚLTIMA COISA QUE ELA LÊ: a conta, e não mais um inventário.
129
156
  *
@@ -398,15 +425,21 @@ body {
398
425
  .bar-in {
399
426
  max-width: 1200px;
400
427
  margin-inline: auto;
401
- padding: 11px 24px;
428
+ padding: 0 24px;
429
+ min-height: 64px;
430
+ display: grid;
431
+ grid-template-columns: 230px minmax(0, 1fr);
432
+ gap: 40px;
433
+ align-items: center;
434
+ }
435
+ .bar-repo { margin: 2px 0 0; font-weight: 600; }
436
+ .bar-fim {
402
437
  display: flex;
438
+ align-items: center;
439
+ gap: 14px;
403
440
  flex-wrap: wrap;
404
- gap: 8px 24px;
405
- align-items: baseline;
406
441
  justify-content: space-between;
407
442
  }
408
- .bar-repo { margin: 2px 0 0; font-weight: 600; }
409
- .bar-fim { display: flex; align-items: center; gap: 14px; flex-wrap: wrap; }
410
443
 
411
444
  /* O COMANDO NO TOPO, sem rolar: quem decidiu adotar no meio da leitura nao volta para procura-lo. */
412
445
  .comando {
@@ -692,10 +725,45 @@ footer { margin-top: 40px; color: var(--ds-color-semantic-muted); font-size: 13p
692
725
  @keyframes girar { from { --fatia: 0%; } }
693
726
 
694
727
  @media (max-width: 900px) {
695
- .wrap { grid-template-columns: minmax(0, 1fr); gap: 0; }
728
+ .wrap, .bar-in { grid-template-columns: minmax(0, 1fr); gap: 8px; }
729
+ .bar-in { padding-block: 10px; }
696
730
  .lado { position: static; max-height: none; padding-bottom: 20px; }
697
731
  }
698
732
 
733
+ /* O BOTAO: um alvo unico para quem leu a conta e decidiu. Ele leva para o primeiro passo DENTRO da
734
+ pagina - sair para a internet contradiria o arquivo que nao faz requisicao nenhuma. */
735
+ .botao {
736
+ display: inline-block;
737
+ margin: 4px 0 20px;
738
+ padding: 12px 22px;
739
+ border-radius: var(--ds-radius-lg, 12px);
740
+ background: var(--ds-color-semantic-accent);
741
+ color: var(--ds-color-semantic-canvas);
742
+ font-weight: 600;
743
+ font-size: 14px;
744
+ text-decoration: none;
745
+ }
746
+ .botao:hover { opacity: 0.9; }
747
+
748
+ .lista-passos { list-style: none; margin: 0; padding: 0; display: grid; gap: 22px; }
749
+ .lista-passos li {
750
+ border-left: 2px solid var(--ds-color-semantic-border);
751
+ padding-left: 18px;
752
+ }
753
+ .passo-topo { display: flex; align-items: center; gap: 10px; }
754
+ .passo-topo b {
755
+ width: 22px;
756
+ height: 22px;
757
+ border-radius: 50%;
758
+ display: grid;
759
+ place-items: center;
760
+ font-size: 12px;
761
+ background: var(--ds-color-semantic-accent);
762
+ color: var(--ds-color-semantic-canvas);
763
+ }
764
+ .passo-topo h3 { margin: 0; font-size: 15px; }
765
+ .lista-passos p { margin: 10px 0 0; color: var(--ds-color-semantic-muted); font-size: 14px; }
766
+
699
767
  @media print {
700
768
  .bar { position: static; }
701
769
  nav { display: none; }
@@ -169,3 +169,36 @@ export function oQueMuda(c) {
169
169
  linhas.push("And it stops coming back: once the system is in the repository, the check runs after every file your agent writes and catches a value that drifts off your own scale, before it ships.");
170
170
  return linhas;
171
171
  }
172
+ /**
173
+ * O PASSO A PASSO INTEIRO, do login ao import (pedido dele, 18/09).
174
+ *
175
+ * O QUE O CLIENTE GANHA: ela termina a leitura sabendo exatamente o que digitar, na ordem, sem
176
+ * abrir documentação nenhuma. Cada passo diz o que FAZ antes de dizer o que digitar - um comando
177
+ * sem consequência declarada é uma pessoa colando algo no terminal dela por fé.
178
+ *
179
+ * A ORDEM NÃO É GOSTO, é a única que funciona: o `connect` instala hook, ferramentas e skills, e um
180
+ * agente só os enxerga numa sessão iniciada DEPOIS; e o `import` precisa do token que o `login`
181
+ * deixa nesta máquina - sem ele a leitura sobe e morre num 401 três passos adiante.
182
+ *
183
+ * ELE É FIXO PORQUE A ESTEIRA É FIXA: estes três comandos são os mesmos em qualquer projeto, e é
184
+ * exatamente por isso que eles podem ser escritos aqui sem medir nada do repositório dela.
185
+ */
186
+ export function passos() {
187
+ return [
188
+ {
189
+ comando: "npx synthesisui@latest login",
190
+ titulo: "Let this machine in",
191
+ porque: "Opens a page that already knows you and leaves a token in ~/.synthesisui/ on this computer. It is one click on a code - there is no account to fill in halfway through a terminal.",
192
+ },
193
+ {
194
+ comando: "npx synthesisui@latest connect",
195
+ titulo: "Wire your agent",
196
+ porque: "Installs the check that runs after every file your agent writes, the tools it can query, and the skills that know this pipeline. Nothing of your code is touched or sent. Run it before you open the agent - a session only picks these up when it starts.",
197
+ },
198
+ {
199
+ comando: "npx synthesisui@latest import",
200
+ titulo: "Turn your code into blueprints",
201
+ porque: "Reads the same values you saw above and writes them down as your design system, in your own vocabulary. From here your agent reads them before it writes anything, so consistency becomes something the project knows rather than something you remember.",
202
+ },
203
+ ];
204
+ }
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "synthesisui",
3
- "version": "0.16.434",
3
+ "version": "0.16.435",
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": {