@easysociable/cli 0.1.19 → 0.1.21

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/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@easysociable/cli",
3
- "version": "0.1.19",
3
+ "version": "0.1.21",
4
4
  "description": "Agent-first CLI for EasySociable: Content Engine, Template, Slideshow, and MCP",
5
5
  "type": "module",
6
6
  "license": "MIT",
@@ -49,12 +49,34 @@ Ask only for what only the user knows:
49
49
  palette goes in `theme.json` (without a Brand or theme Studio falls back to
50
50
  its dark default).
51
51
 
52
- ### 2. Facts
52
+ ### 2. Facts and evidence
53
53
 
54
54
  Research the topic from primary sources (official announcement, docs,
55
55
  reputable press). Keep a source URL for every fact. Drop claims you can only
56
56
  find in secondary blogs. Never invent numbers, dates, quotes or features.
57
57
 
58
+ While you read those sources, collect **evidence images**: real pictures that
59
+ can be a page's focal point (a product screenshot, a chart, a figure from the
60
+ paper). Aim for 2–4 per Run, the cover first. A page built around a real image
61
+ reads as proof and looks different from its neighbours; a text-only deck does
62
+ neither.
63
+
64
+ - Sources: only the topic's own primary sources — the product's site, docs,
65
+ blog, press kit or GitHub README; the paper itself (arXiv HTML has each
66
+ figure as its own file); openly licensed images (Wikimedia Commons, CC0/CC BY).
67
+ Never image search, stock sites, news-site photos, other creators' posts or
68
+ anything watermarked.
69
+ - Take image URLs from pages you already opened (`og:image`, images in the
70
+ body) and download them: `curl -sL -o assets/<name>.png <url>`. PNG, JPEG or
71
+ WebP only (convert anything else to PNG), ≤ 20 MB.
72
+ - **Look at every file** before keeping it. Drop it when it is off-topic,
73
+ unreadable at phone size, would need more than 1.25× upscaling to fill its
74
+ area, carries a watermark, or shows a recognisable person who is not the
75
+ subject.
76
+ - Keep each kept image's source URL for the final message.
77
+ - Found nothing usable → fine, step 5 handles it. Don't spend more than a few
78
+ fetches looking.
79
+
58
80
  When the user started from a Content Engine run, facts come from its knowledge
59
81
  pages instead (see `easysociable-content`).
60
82
 
@@ -106,14 +128,19 @@ Structure (step 3) and look are chosen separately. The look comes from a
106
128
  decoration). Drop any the previous Run used, take the least conventional
107
129
  one, and pick references whose `style` fits it.
108
130
  5. Otherwise → the content decides: get candidates for the cover with
109
- `easysociable templates references --role hook,cover [--no-image] --json`
131
+ `easysociable templates references --role hook,cover --json`
110
132
  (results are shuffled) and take the first that fits the content. Its
111
133
  `style` is the deck's style; for each other page ask for that page's roles
112
134
  with `--style <style>`. A number → `metric,proof`; a list item →
113
- `point,value,steps`; a comparison → `compare`; a real product →
114
- `screenshot`. No match in that style → any style, keeping the cover's chrome.
115
-
116
- `--no-image` unless you have (or will leave a placeholder for) a real image.
135
+ `point,value,steps`; a comparison → `compare`; a page with an evidence
136
+ image (step 2) or a real product → `screenshot`. No match in that style →
137
+ any style, keeping the cover's chrome.
138
+
139
+ Don't filter out references that need an image just because you have none:
140
+ most covers in the library have an image area. Use one and fill that area
141
+ without a photo (references/REFERENCES.md, "A reference's image area"). Keep a
142
+ placeholder only where the content needs a real screenshot or photo (step 5).
143
+ `--no-image` is for when you specifically want designs drawn with type alone.
117
144
  Read each chosen design with `easysociable templates source --family <familyId> --json`
118
145
  and adapt it as in `references/REFERENCES.md` ("Adapting a reference" and
119
146
  "Avoid"). Put the result in the pack as a generated page:
@@ -136,17 +163,26 @@ Say 'same as this'. Want another look? Say 'different look'."
136
163
  an AI-generated picture of a real product UI.
137
164
  - Concept / mood / background → generate one if this environment has an
138
165
  image-generation tool; otherwise leave the page text-only.
139
- - Images never contain text: all words stay in editable text layers.
140
- - **Every page whose content needs a real image you don't have gets a
141
- placeholder slot** (as many pages as need one), never a text-only layout. Size it into the composition (usually the
142
- lower half of the page) and label it with exactly what belongs there, e.g.
143
- "Add: Grok Bot app screenshot". The user selects it in Studio and clicks
144
- the upload button to replace it. Markup and SVG in `references/REFERENCES.md`
145
- ("Image placeholder").
146
- - An image you do have: upload it
147
- (`easysociable images upload --file body.json` with
148
- `{ "file": "data:image/png;base64,…", "filename": "x.png" }`) and use the
149
- returned `asset.url` as `src`.
166
+ - Generated images never contain text: all words stay in editable text layers.
167
+ (A real screenshot or figure keeps its own text.)
168
+ - Fill each image area in this order:
169
+ 1. The user's own image, when they gave one.
170
+ 2. An evidence image from step 2. Upload it
171
+ (`easysociable images upload --file body.json` with
172
+ `{ "file": "data:image/png;base64,…", "filename": "x.png" }`; build it with
173
+ `node -e "const f=process.argv[1],t=f.match(/\.(jpe?g|webp)$/i)?(/webp/i.test(f)?'webp':'jpeg'):'png';console.log(JSON.stringify({file:'data:image/'+t+';base64,'+require('fs').readFileSync(f,'base64'),filename:require('path').basename(f)}))" assets/x.png > body.json`)
174
+ and use the returned `asset.url` as `src`.
175
+ Crop and scale it (`objectFit: 'cover'`, `objectPosition`), never alter
176
+ what it shows. To point at something in it, add a separate element on top
177
+ (a red ellipse border, an underline bar) so the user can move or delete it.
178
+ 3. Something only the user has (their app, their dashboard, their results)
179
+ → a **placeholder slot**, never a text-only layout. Size it into the
180
+ composition (usually the lower half of the page) and label it with
181
+ exactly what belongs there, e.g. "Add: Grok Bot app screenshot". The user
182
+ selects it in Studio and clicks the upload button to replace it. Markup
183
+ and SVG in `references/REFERENCES.md` ("Image placeholder").
184
+ 4. Anything else → fill the area from the content or delete it
185
+ (`references/REFERENCES.md`, "A reference's image area").
150
186
  - List every placeholder in the final message ("page 2: app screenshot").
151
187
 
152
188
  ### 6. Check (hard gate)
@@ -172,8 +208,8 @@ easysociable slideshows create --file pack.json --brand-id <brandId> --json
172
208
  # no Brand: --theme theme.json instead of --brand-id
173
209
  ```
174
210
 
175
- Reply once with: the `studioUrl`, the arc in one line, the sources, and each
176
- image placeholder to replace (page + what to upload). Tell them to edit in
211
+ Reply once with: the `studioUrl`, the arc in one line, the sources (facts and
212
+ each evidence image: "p1 image: <url>"), and each image placeholder to replace (page + what to upload). Tell them to edit in
177
213
  Studio and click **Download** for the PNG ZIP.
178
214
 
179
215
  ### 8. Revise (same Run, never a copy)
@@ -240,7 +276,7 @@ Template steps:
240
276
  roles the new content has none of.
241
277
  4. Change only text inside `data-variable` elements and send matching
242
278
  `slots`. Too long → rewrite shorter; never resize boxes or move elements.
243
- Every source image becomes a placeholder for the new topic (step 5);
279
+ Every source image is replaced for the new topic (step 5 order);
244
280
  Brand avatar/logo stay.
245
281
  5. Step 6 check, then create (step 7). In the reply, say in one line what
246
282
  differs from the source ("6 tips, so 6 point pages instead of 4") and that
@@ -9,7 +9,7 @@ no reference at all.
9
9
  Find references for a page role, shuffled, as short summaries:
10
10
 
11
11
  ```bash
12
- easysociable templates references --role hook,cover [--no-image] [--style <style>] [--exclude <familyIds>] --json
12
+ easysociable templates references --role hook,cover [--style <style>] [--exclude <familyIds>] [--no-image] --json
13
13
  easysociable templates source --family <familyId> --json # the design's Studio source
14
14
  ```
15
15
 
@@ -29,6 +29,13 @@ Roles overlap in the catalog, so pass related ones together: `hook,cover` ·
29
29
  `height` = lines × lineHeight + ~12% of fontSize for descenders.
30
30
  4. Remove what you do not need; add only elements copied from another reference
31
31
  with the same `style` (rule rows, a stat row).
32
+ 4a. **A reference's image area** when you have no image and the content does
33
+ not need a real one: keep the area's box and fill it from the content with a
34
+ large number or keyword, a short quote with an oversized quote mark, an
35
+ accent-colour block carrying one word, or one icon from
36
+ `easysociable icons search` on a tinted block. Never a grey placeholder or an
37
+ empty box on the cover. If nothing fits, delete the area and give the
38
+ headline its space.
32
39
  5. Brand chrome: the header label is the Brand name (or the topic when there is
33
40
  no Brand); the CTA names the Brand handle. Never leave a reference's original
34
41
  name or handle (e.g. "Will.AI.m") on a page. **Bind them** so a Brand change