@easysociable/cli 0.1.33 → 0.1.35

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.33",
3
+ "version": "0.1.35",
4
4
  "mcpName": "io.github.murphywuwu/easysociable-mcp",
5
5
  "description": "Agent-first CLI for EasySociable: Content Engine, Template, Slideshow, and MCP",
6
6
  "type": "module",
@@ -20,7 +20,8 @@ What only the user has never blocks the Run; it becomes a visible, replaceable
20
20
  stand-in they fill in Studio:
21
21
 
22
22
  - their Brand (name, handle, avatar) → bound samples (step 1);
23
- - their own material (screenshots, photos) → image placeholders (step 5).
23
+ - their own material (screenshots, photos, results) → a finished stand-in now,
24
+ and one "swap in yours" line in the final message (step 5).
24
25
 
25
26
  ## Command output (`--json`)
26
27
 
@@ -35,7 +36,8 @@ Read results from these paths; don't guess:
35
36
  | `formulas get` | `data` (`beats[]`, `looks[].layouts`) |
36
37
  | `templates references` | a top-level array (`familyId`, `name`, `roles`, `style`, `requiresImage`) |
37
38
  | `templates source` | top level: `familyId`, `canvas`, `studioJson` |
38
- | `icons search --query <word>` | icon list for the word |
39
+ | `icons search --query <word>` | icon list for the word (ids, no SVG) |
40
+ | `icons get --id <id> --idempotency-key <any-unique-string>` | `canonicalSvg` to inline |
39
41
  | `images upload --path …` | `data[]` (`path`, `asset.url`, or `error`); exit 1 if any failed |
40
42
  | `slideshows create` | top level: `id`, `studioUrl` |
41
43
 
@@ -75,9 +77,12 @@ asks the user for exactly those fields and updates every page when they fill the
75
77
  Research the topic from primary sources (official announcement, docs,
76
78
  reputable press). Keep a source URL for every fact. Drop claims you can only
77
79
  find in secondary blogs. Never invent numbers, dates, quotes or features.
80
+ A first-person result ("I tested", "亲测", "it replied …") is a fact too: write
81
+ it only when the user's material or a knowledge page records it. Otherwise
82
+ write the step as an instruction ("send it this prompt"), not a report.
78
83
 
79
- While you read those sources, collect **evidence images**: real pictures that
80
- can be a page's focal point (a product screenshot, a chart, a figure from the
84
+ **Evidence images** are their own search, whatever the facts came from: real
85
+ pictures that can be a page's focal point (a product screenshot, a chart, a figure from the
81
86
  paper). Aim for 2–4 per Run, the cover first. A page built around a real image
82
87
  reads as proof and looks different from its neighbours; a text-only deck does
83
88
  neither.
@@ -87,8 +92,10 @@ neither.
87
92
  figure as its own file); openly licensed images (Wikimedia Commons, CC0/CC BY).
88
93
  Never image search, stock sites, news-site photos, other creators' posts or
89
94
  anything watermarked.
90
- - Take image URLs from pages you already opened (`og:image`, images in the
91
- body) and download them: `curl -sL -o assets/<name>.png <url>`. PNG, JPEG or
95
+ - Start from the subject itself: open its official site, docs or help pages,
96
+ launch post and launch video (a knowledge page's source links are a good
97
+ start). Take image URLs from those pages (`og:image`, images in the body)
98
+ and download them: `curl -sL -o assets/<name>.png <url>`. PNG, JPEG or
92
99
  WebP only (convert anything else to PNG), ≤ 20 MB.
93
100
  - Launch posts often show the product only in demo videos: pull frames of the
94
101
  real UI straight from the video URL, without downloading the whole file
@@ -101,12 +108,11 @@ neither.
101
108
  area, carries a watermark, or shows a recognisable person who is not the
102
109
  subject.
103
110
  - Keep each kept image's source URL for the final message.
104
- - Found nothing usable → fine, step 5 handles it. Don't spend more than a few
105
- fetches looking.
111
+ - Done when the official site, docs and launch post/video were checked.
112
+ Nothing usable → fine, step 5 still gives every page a finished image.
106
113
 
107
114
  When the user started from a Content Engine run, facts come from its knowledge
108
- pages (see `easysociable-content`). That replaces fact research only: still
109
- collect evidence images for the run's subject as above.
115
+ pages (see `easysociable-content`); evidence images are still searched as above.
110
116
 
111
117
  ### 3. Hook and structure
112
118
 
@@ -166,8 +172,9 @@ Structure (step 3) and look are chosen separately. The look comes from a
166
172
 
167
173
  Don't filter out references that need an image just because you have none:
168
174
  most covers in the library have an image area. Use one and fill that area
169
- without a photo (references/REFERENCES.md, "A reference's image area"). Keep a
170
- placeholder only where the content needs a real screenshot or photo (step 5).
175
+ without a photo (references/REFERENCES.md, "A reference's image area"). Decide
176
+ each page's image (step 5) while you pick its reference: a diagram needs the
177
+ image area, a large evidence image needs a large one.
171
178
  `--no-image` is for when you specifically want designs drawn with type alone.
172
179
  Read each chosen design with `easysociable templates source --family <familyId> --json`
173
180
  and adapt it as in `references/REFERENCES.md` ("Adapting a reference" and
@@ -190,10 +197,11 @@ Say 'same as this'. Want another look? Say 'different look'."
190
197
  - Real products, apps, people, data → real screenshots or photos only. Never
191
198
  an AI-generated picture of a real product UI.
192
199
  - Concept / mood / background → generate one if this environment has an
193
- image-generation tool; otherwise leave the page text-only.
200
+ image-generation tool; otherwise a diagram (3 below).
194
201
  - Generated images never contain text: all words stay in editable text layers.
195
202
  (A real screenshot or figure keeps its own text.)
196
- - Fill each image area in this order:
203
+ - Every image area ships finished: never a grey placeholder, never "add
204
+ later". Fill it with the first of these you can do:
197
205
  1. The user's own image, when they gave one.
198
206
  2. An evidence image from step 2. Upload it
199
207
  (all at once: `easysociable images upload --path assets/a.png assets/b.jpg --json`)
@@ -201,25 +209,19 @@ Say 'same as this'. Want another look? Say 'different look'."
201
209
  Crop and scale it (`objectFit: 'cover'`, `objectPosition`), never alter
202
210
  what it shows. To point at something in it, add a separate element on top
203
211
  (a red ellipse border, an underline bar) so the user can move or delete it.
204
- 3. A screen that exists only after doing the page's steps (a prompt and the
205
- AI's reply, a result page) and a browser tool is available → open the
206
- product's web app, do exactly what the page says, screenshot each state,
207
- crop to the phone or window. Login wall → ask the user once, for every
208
- such page together: "Log in to <product> in this browser, then say done."
209
- Never type a password yourself. Wait, then capture. They decline → 4.
210
- Never a look-alike from someone else's post.
211
- 4. Something only the user has (their app, their dashboard, their results),
212
- or a step-3 screen the user chose not to log in for → a **placeholder slot**, never
213
- a text-only layout. Size it into the composition (usually the lower half
214
- of the page) and label it with what to do and what to capture, e.g.
215
- "Add: Grok Bot app screenshot" or "Add: Doubao's reply after you say 'I
216
- goed to school' in voice mode". The user selects it in Studio and clicks
217
- the upload button to replace it. Markup and SVG in
218
- `references/REFERENCES.md` ("Image placeholder").
219
- 5. Anything else → fill the area from the content or delete it
220
- (`references/REFERENCES.md`, "A reference's image area").
221
- - List every placeholder in the final message with how to get it
222
- ("page 2: Doubao reply — say … in voice mode and screenshot the correction").
212
+ A screen you can capture yourself right now (a browser tool, no login,
213
+ no region block) counts too; never type a password or stop to ask.
214
+ 3. A diagram drawn from the page's own words (references/REFERENCES.md,
215
+ "A reference's image area"): a prompt card for a tutorial step, A vs B
216
+ cards, ✗ / ✓, a 3–4 step flow, a big number. Always possible.
217
+ - Never: a drawn imitation of a real product's UI, an invented AI reply or
218
+ screenshot, an invented number without "示例 / example" on it, an image from
219
+ someone else's post.
220
+ - What only the user can add (their screenshot after logging in, their
221
+ dashboard, their results) is an upgrade, not a gap: list it at the end of
222
+ the final message, page by page, with how to get it and what the copy may
223
+ then say ("p2–4: log in to Doubao, send the prompt, screenshot the
224
+ correction; then the caption can say '亲测'").
223
225
 
224
226
  ### 6. Check (hard gate)
225
227
 
@@ -249,7 +251,7 @@ left ("The name, handle and avatar on pages 1 and 6 are samples: fill them
249
251
  once in the bar at the top of Studio, or in Brands at
250
252
  https://my.easysociable.com/brands, and every page updates"; name only the
251
253
  fields that are samples), the sources (facts and
252
- each evidence image: "p1 image: <url>"), and each image placeholder to replace (page + what to upload). Tell them to edit in
254
+ each evidence image: "p1 image: <url>"), and the optional upgrades (step 5). Tell them to edit in
253
255
  Studio and click **Download** for the PNG ZIP.
254
256
 
255
257
  ### 8. Revise (same Run, never a copy)
@@ -29,13 +29,19 @@ 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 --query <word>` 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
+ 4a. **A reference's image area** when you have no real image: keep the area's
33
+ box and draw a diagram from the page's own words, every part editable text
34
+ or shapes:
35
+ - prompt card: the exact prompt the page tells the reader to send, in a
36
+ chat-bubble-like card with no product logo or UI chrome;
37
+ - A vs B: two cards side by side, a "vs" or arrow between;
38
+ - ✗ / ✓: the wrong and right version of the same thing;
39
+ - flow: 3–4 nodes with arrows for steps;
40
+ - a large number or keyword, a short quote with an oversized quote mark,
41
+ or an accent block carrying one word.
42
+ Icons: `easysociable icons search --query <word>`, then `icons get` for its
43
+ `canonicalSvg`. Made-up figures carry "示例 / example". Never an empty box. If
44
+ nothing fits, delete the area and give the headline its space.
39
45
  5. Brand chrome — every Run carries the Brand, bound so one Brand edit updates
40
46
  every page. The cover has a signature (avatar + name + handle); the CTA has
41
47
  avatar + handle next to the action. Inner pages keep only the Brand spots
@@ -86,29 +92,3 @@ Use one in `theme.json` as `{ "color": { "canvas", "text", "textMuted", "accent"
86
92
  | `dark` | `#06080C` / `#FFFFFF` / `#C7CBD3` / `#4C9BFF` |
87
93
  | `bold_promo` | `#F9F9F9` / `#0A0A0A` / `#555555` / `#0066DD` |
88
94
 
89
- ## Image placeholder
90
-
91
- A replaceable image slot for a real screenshot or photo the user will add.
92
- Studio shows an upload button when it is selected.
93
-
94
- ```jsx
95
- <img data-type="image" data-variable="image_0" data-image-mode="slot_default"
96
- alt="Add: <what goes here>" src="data:image/svg+xml;base64,<SVG>"
97
- style={{ position: 'absolute', left: 88, top: 760, width: 904, height: 388, objectFit: 'cover', borderRadius: 24 }} />
98
- ```
99
-
100
- `<SVG>` is base64 of a grey box with an image icon and the label, sized to the slot:
101
-
102
- ```xml
103
- <svg xmlns='http://www.w3.org/2000/svg' width='904' height='388' viewBox='0 0 904 388'>
104
- <rect width='904' height='388' fill='#DDD6CC'/>
105
- <g transform='translate(416,124)' fill='none' stroke='#8C8781' stroke-width='5' stroke-linejoin='round'>
106
- <rect width='72' height='56' rx='8'/><path d='M6 50 L26 28 L40 42 L50 34 L66 50'/><circle cx='52' cy='16' r='6'/>
107
- </g>
108
- <text x='50%' y='230' text-anchor='middle' font-family='Inter, Arial, sans-serif' font-size='32' font-weight='600' fill='#6F6A64'>Add: Grok Bot app screenshot</text>
109
- </svg>
110
- ```
111
-
112
- Put the same data URL in the page's `slots` under `image_N`. Number slots
113
- `image_0`, `image_1`, … per page. Use the style's own colours for the box
114
- (canvas-adjacent grey on light styles, `#1A1F27` on dark ones).