@tomorrowos/sdk 1.0.1 → 1.1.1

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,90 +1,118 @@
1
- # Vercel / v0 - Verbatim question bank
2
-
3
- > **Protocol:** `vercel-questions/1.5` (pairs with `VERCEL_SETUP.md` 1.14+ / `@tomorrowos/sdk` 0.9.70+)
4
- > **For Agents:** When asking the user a setup question, **copy-paste the block below for that step EXACTLY**.
5
- > Do **not** paraphrase, reorder, rename options, or invent alternatives (no S3, no Supabase Storage, no "Blob recommended", no "disable media").
6
- > After each answer, configure per `VERCEL_SETUP.md`, then paste the **next** block.
7
- > **Q1 and Q2 are choice questions. Q3 is a form only - never a multiple-choice question.**
8
- > **HARD STOP on Q3:** show the form, then **wait** for the user's reply. Optional fields do **not** mean you may auto-skip.
9
-
10
- ---
11
-
12
- ## Q1 - Database (paste this entire block)
13
-
14
- Which database should TomorrowOS use on Vercel?
15
-
16
- **1. Supabase Postgres (recommended)** - durable pairing/playlists; use the **Session pooler** URL (`*.pooler.supabase.com:6543`).
17
-
18
- **2. Neon Postgres** - serverless Postgres native to Vercel; use Neon's **pooled** connection string from the Neon dashboard (not the direct un-pooled host for serverless).
19
-
20
- Reply with **1** or **2** (or "Supabase" / "Neon").
21
-
22
- ---
23
-
24
- ## After Q1 - agent only (do not ask the user)
25
-
26
- | Choice | You set silently | User only provides |
27
- |--------|------------------|--------------------|
28
- | 1 Supabase | `TOMORROWOS_STORE=supabase`, `DATABASE_SSL=true` | `SUPABASE_URL` (pooler) |
29
- | 2 Neon | `TOMORROWOS_STORE=postgres`, `DATABASE_SSL=true` | `DATABASE_URL` (pooled) |
30
-
31
- Never show blank Env fields for `TOMORROWOS_STORE` or `DATABASE_SSL`.
32
-
33
- ---
34
-
35
- ## Q2 - Media (paste this entire block)
36
-
37
- How should playlist media (images/videos) be stored?
38
-
39
- **1. Cloudinary (recommended)** - durable public HTTPS URLs (`https://res.cloudinary.com/...`). Works out of the box with `@tomorrowos/sdk` auto-detection. **Prefer this on Vercel.**
40
-
41
- **2. Vercel Blob** - Vercel-native object storage; durable `https://*.public.blob.vercel-storage.com/...` URLs. Use when you want media on the same Vercel project without a Cloudinary account.
42
-
43
- Reply with **1** or **2** (or "Cloudinary" / "Vercel Blob").
44
-
45
- **Forbidden replacements (never ask these):** Vercel Blob as recommended #1; Supabase Storage; S3 / R2 / B2 / `MEDIA_S3_*`; "no media storage" / disable uploads; local disk only.
46
-
47
- ---
48
-
49
- ## Q3 - Brand form (NOT a question - open this form, then WAIT)
50
-
51
- **STOP - read before doing anything for branding:**
52
-
53
- 1. Q3 is **not** a chat multiple-choice step.
54
- 2. **Do not** ask: "Want to customize branding?", "Option A / Option B", "skip or customize?", or any other choice first.
55
- 3. **Do not** open a form with only Product Name + Primary colour (or any subset).
56
- 4. **Immediately** open **one** multi-input form with **all seven fields visible at the same time**.
57
- 5. **HARD STOP and WAIT** for the user to submit the form, reply with values, or say **"skip"**.
58
- - Fields being optional means blanks keep defaults **after** the user responds.
59
- - Fields being optional does **NOT** mean you may continue scaffolding without a user reply.
60
- - **Forbidden:** "fields are optional so I'll proceed with defaults" / auto-skip / thinking past Q3 in the same turn.
61
-
62
- **Title:** Brand your TomorrowOS experience
63
- **Helper:** All fields optional. Leave blank to keep starter brand.json defaults. Submit once (or reply "skip"). I will wait for your reply before continuing setup.
64
-
65
- **Create exactly these seven controls - all on screen together (no Next / no wizard steps):**
66
-
67
- | # | Exact label | Control |
68
- |---|-------------|---------|
69
- | 1 | Product Name | text input |
70
- | 2 | Tagline | text input |
71
- | 3 | Primary colour | text input (placeholder `#FF8A3D`) |
72
- | 4 | Background colour | text input (placeholder `#FAFAF9`) |
73
- | 5 | Text colour | text input (placeholder `#0A0908`) |
74
- | 6 | Secondary colour | text input (placeholder `#F5F3EF`) |
75
- | 7 | Logo | **Upload** (file picker, SVG/PNG) **above** **Logo URL** (text input) |
76
-
77
- **Pass / fail check before showing the user:** count the text inputs. If you see fewer than **six** text fields (Product Name, Tagline, Primary, Background, Text, Secondary) plus the Logo Upload+URL row, **do not show it** - rebuild the form with all seven.
78
-
79
- **Forbidden Q3 UIs / behaviors:**
80
-
81
- - Any multiple-choice / radio / "1 or 2" / Option A vs B
82
- - A preliminary question before the form
83
- - Only Name + Primary colour (or any 1-2 field subset)
84
- - One freeform / Other box for all brand values
85
- - Field-by-field Next wizard
86
- - Auto-continuing to init/scaffold/deploy without a user Q3 reply or explicit "skip"
87
- - Interpreting "do not re-ask" as "do not wait for the first reply"
88
-
89
- After the user submits (including all-blank) or says "skip": apply `brand.json`, then continue. **Do not** re-ask Q3 a second time.
90
- Blank fields -> keep existing `brand.json`. Logo blank -> `./assets/logo.svg`.
1
+ # Vercel / v0 - Verbatim question bank
2
+
3
+ > **Protocol:** `vercel-questions/1.6` (pairs with `VERCEL_SETUP.md` 1.16+ / `@tomorrowos/sdk` 0.9.70+)
4
+ > **For Agents:** When asking the user a setup question, **copy-paste the block below for that step EXACTLY**.
5
+ > Do **not** paraphrase, reorder, rename options, or invent alternatives (no S3, no Supabase Storage, no "Blob recommended", no "disable media").
6
+ > After each answer, configure per `VERCEL_SETUP.md`, then paste the **next** block.
7
+ > **Q1 and Q2 are choice questions. Q3 is a form only - never a multiple-choice question. Q4 is optional CMS password (`CMS_PASSWORD`).**
8
+ > **HARD STOP on Q3:** show the form, then **wait** for the user's reply. Optional fields do **not** mean you may auto-skip.
9
+ > **Q4 is optional:** blank/skip is valid; they can set `CMS_PASSWORD` later.
10
+
11
+ ---
12
+
13
+ ## Q1 - Database (paste this entire block)
14
+
15
+ Which database should TomorrowOS use on Vercel?
16
+
17
+ **1. Supabase Postgres (recommended)** - durable pairing/playlists; use the **Session pooler** URL (`*.pooler.supabase.com:6543`).
18
+
19
+ **2. Neon Postgres** - serverless Postgres native to Vercel; use Neon's **pooled** connection string from the Neon dashboard (not the direct un-pooled host for serverless).
20
+
21
+ Reply with **1** or **2** (or "Supabase" / "Neon").
22
+
23
+ ---
24
+
25
+ ## After Q1 - agent only (do not ask the user)
26
+
27
+ | Choice | You set silently | User only provides |
28
+ |--------|------------------|--------------------|
29
+ | 1 Supabase | `TOMORROWOS_STORE=supabase`, `DATABASE_SSL=true` | `SUPABASE_URL` (pooler) |
30
+ | 2 Neon | `TOMORROWOS_STORE=postgres`, `DATABASE_SSL=true` | `DATABASE_URL` (pooled) |
31
+
32
+ Never show blank Env fields for `TOMORROWOS_STORE` or `DATABASE_SSL`.
33
+
34
+ ---
35
+
36
+ ## Q2 - Media (paste this entire block)
37
+
38
+ How should playlist media (images/videos) be stored?
39
+
40
+ **1. Cloudinary (recommended)** - durable public HTTPS URLs (`https://res.cloudinary.com/...`). Works out of the box with `@tomorrowos/sdk` auto-detection. **Prefer this on Vercel.**
41
+
42
+ **2. Vercel Blob** - Vercel-native object storage; durable `https://*.public.blob.vercel-storage.com/...` URLs. Use when you want media on the same Vercel project without a Cloudinary account.
43
+
44
+ Reply with **1** or **2** (or "Cloudinary" / "Vercel Blob").
45
+
46
+ **Forbidden replacements (never ask these):** Vercel Blob as recommended #1; Supabase Storage; S3 / R2 / B2 / `MEDIA_S3_*`; "no media storage" / disable uploads; local disk only.
47
+
48
+ ---
49
+
50
+ ## Q3 - Brand form (NOT a question - open this form, then WAIT)
51
+
52
+ **STOP - read before doing anything for branding:**
53
+
54
+ 1. Q3 is **not** a chat multiple-choice step.
55
+ 2. **Do not** ask: "Want to customize branding?", "Option A / Option B", "skip or customize?", or any other choice first.
56
+ 3. **Do not** open a form with only Product Name + Primary colour (or any subset).
57
+ 4. **Immediately** open **one** multi-input form with **all seven fields visible at the same time**.
58
+ 5. **HARD STOP and WAIT** for the user to submit the form, reply with values, or say **"skip"**.
59
+ - Fields being optional means blanks keep defaults **after** the user responds.
60
+ - Fields being optional does **NOT** mean you may continue scaffolding without a user reply.
61
+ - **Forbidden:** "fields are optional so I'll proceed with defaults" / auto-skip / thinking past Q3 in the same turn.
62
+
63
+ **Title:** Brand your TomorrowOS experience
64
+ **Helper:** All fields optional. Leave blank to keep starter brand.json defaults. Submit once (or reply "skip"). I will wait for your reply before continuing setup.
65
+
66
+ **Create exactly these seven controls - all on screen together (no Next / no wizard steps):**
67
+
68
+ | # | Exact label | Control |
69
+ |---|-------------|---------|
70
+ | 1 | Product Name | text input |
71
+ | 2 | Tagline | text input |
72
+ | 3 | Primary colour | text input (placeholder `#FF8A3D`) |
73
+ | 4 | Background colour | text input (placeholder `#FAFAF9`) |
74
+ | 5 | Text colour | text input (placeholder `#0A0908`) |
75
+ | 6 | Secondary colour | text input (placeholder `#F5F3EF`) |
76
+ | 7 | Logo | **Upload** (file picker, SVG/PNG) **above** **Logo URL** (text input) |
77
+
78
+ **Pass / fail check before showing the user:** count the text inputs. If you see fewer than **six** text fields (Product Name, Tagline, Primary, Background, Text, Secondary) plus the Logo Upload+URL row, **do not show it** - rebuild the form with all seven.
79
+
80
+ **Forbidden Q3 UIs / behaviors:**
81
+
82
+ - Any multiple-choice / radio / "1 or 2" / Option A vs B
83
+ - A preliminary question before the form
84
+ - Only Name + Primary colour (or any 1-2 field subset)
85
+ - One freeform / Other box for all brand values
86
+ - Field-by-field Next wizard
87
+ - Auto-continuing to init/scaffold/deploy without a user Q3 reply or explicit "skip"
88
+ - Interpreting "do not re-ask" as "do not wait for the first reply"
89
+
90
+ After the user submits (including all-blank) or says "skip": apply `brand.json`, then paste **Q4**. **Do not** re-ask Q3 a second time.
91
+ Blank fields -> keep existing `brand.json`. Logo blank -> `./assets/logo.svg`.
92
+
93
+ ---
94
+
95
+ ## Q4 - Optional CMS password (paste this entire block)
96
+
97
+ Optional: set a CMS password now?
98
+
99
+ If yes, reply with the password to store as Environment Variable **`CMS_PASSWORD`**.
100
+
101
+ Leave blank / reply **skip** / **later** / **no** to keep the panel open for now — you can add `CMS_PASSWORD` later in Vercel → Settings → Environment Variables and redeploy.
102
+
103
+ **Notes for the agent (do not invent extra UX):**
104
+ - This is **optional**. Blank/skip is a valid complete answer.
105
+ - If set: store as Vercel Env `CMS_PASSWORD` only (Control Panel auth). Never echo the password back in chat summaries.
106
+ - Do **not** enable Vercel Deployment Protection / whole-site password (breaks Tizen/BrightSign).
107
+ - Devices still use WebSocket / brand / uploads without this password.
108
+
109
+ ---
110
+
111
+ ## After Q4 - agent only (do not ask the user)
112
+
113
+ | Reply | You do |
114
+ |-------|--------|
115
+ | blank / skip / later / no | Omit `CMS_PASSWORD` |
116
+ | non-empty password | Set Env `CMS_PASSWORD` (Production + Preview as needed), then continue execution |
117
+
118
+ Never commit the password. Never enable host-wide password protection as a substitute.