@tomorrowos/sdk 0.9.32 → 0.9.33
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/VERCEL_SETUP.md
CHANGED
|
@@ -5,7 +5,10 @@
|
|
|
5
5
|
>
|
|
6
6
|
> **On Vercel, this file is the setup questionnaire** (not `REPLIT_SETUP.md`, not `LLM_PROMPT.md`).
|
|
7
7
|
>
|
|
8
|
-
> Protocol id: `vercel-setup/1.
|
|
8
|
+
> Protocol id: `vercel-setup/1.9` — pairs with `@tomorrowos/sdk` **0.9.33+** (`templates/cms-starter-v0`, Fluid Functions WebSockets).
|
|
9
|
+
>
|
|
10
|
+
> **Copy questions verbatim from this file.** Do not invent alternate Q2 options (no “Supabase Storage”, no “disable media”, no making Blob the recommended option).
|
|
11
|
+
> **`TOMORROWOS_STORE` and `DATABASE_SSL` are agent-only** — set them automatically after Q1; never put them in a user-facing Env form for the customer to type.
|
|
9
12
|
|
|
10
13
|
## User trigger (copy-paste)
|
|
11
14
|
|
|
@@ -13,15 +16,13 @@ When a human pastes a prompt like this, **read this file and start Question 1 im
|
|
|
13
16
|
|
|
14
17
|
```text
|
|
15
18
|
Follow @tomorrowos/sdk VERCEL_SETUP.md and set up my TomorrowOS CMS.
|
|
16
|
-
Ask only the questions listed in VERCEL_SETUP.md, in order. Do not use LLM_PROMPT.md or REPLIT_SETUP.md.
|
|
17
|
-
Do not ask for OpenAI / Anthropic / any LLM API keys
|
|
18
|
-
|
|
19
|
-
After
|
|
20
|
-
|
|
21
|
-
|
|
22
|
-
|
|
23
|
-
Do not put startCommand or processes in vercel.json (v0 schema rejects them).
|
|
24
|
-
Use cms-starter-v0 layout: cms-app.ts + api/index.ts (export default server) + cms-panel/ + rewrites to /api. Do not create a second TomorrowOS instance in api/ws.ts.
|
|
19
|
+
Ask only the questions listed in VERCEL_SETUP.md, in order — copy Question 1/2/3 wording verbatim. Do not use LLM_PROMPT.md or REPLIT_SETUP.md.
|
|
20
|
+
Do not ask for OpenAI / Anthropic / any LLM API keys.
|
|
21
|
+
Question 2 MUST be exactly: 1 Cloudinary (recommended), 2 Vercel Blob, 3 local disk. NEVER offer Supabase Storage, “no media storage”, or Blob as recommended.
|
|
22
|
+
After I choose a database, YOU set TOMORROWOS_STORE and DATABASE_SSL automatically — do not ask me to fill those two Env Vars.
|
|
23
|
+
If any step contradicts Vercel, adapt to settings Vercel can accept (document the adaptation). Prefer Supabase Session pooler or Neon pooled URL.
|
|
24
|
+
Question 3 only updates brand.json (website URL = brand reference only — no CMS login unless I ask).
|
|
25
|
+
Use cms-starter-v0 layout. Publish = Fluid Function (api/index.ts). Preview may use Next proxy.
|
|
25
26
|
```
|
|
26
27
|
|
|
27
28
|
Alternate triggers:
|
|
@@ -128,30 +129,43 @@ v0 Preview is often a **Next.js runtime** hardwired to `next dev`. A raw `tsx se
|
|
|
128
129
|
|
|
129
130
|
## Questionnaire scope (STRICT)
|
|
130
131
|
|
|
131
|
-
Ask **only** these questions, in **this exact order
|
|
132
|
+
Ask **only** these questions, in **this exact order**. **Copy the “Ask exactly” blocks verbatim** — do not paraphrase options.
|
|
132
133
|
|
|
133
134
|
| Step | Section | When |
|
|
134
135
|
|------|---------|------|
|
|
135
136
|
| 1 | **Question 1** — Database (Supabase → Neon → SQLite) | Always |
|
|
136
|
-
| 2 | **Question 2** — Media
|
|
137
|
+
| 2 | **Question 2** — Media (**Cloudinary recommended** → Vercel Blob → local) | Always (after Q1) |
|
|
137
138
|
| 3 | **Question 3** — Brand / TomorrowOS look (`brand.json` only) | Always last |
|
|
138
139
|
|
|
139
140
|
**That is the complete list.** Do **not** ask how many screens / devices.
|
|
140
141
|
|
|
142
|
+
**Forbidden invented Question 2 options (never offer these in chat or UI):**
|
|
143
|
+
|
|
144
|
+
- ❌ “Vercel Blob **(recommended)**” as option 1 — Blob is option **2**, not recommended over Cloudinary
|
|
145
|
+
- ❌ “Supabase Storage” / S3 bucket / `SUPABASE_SERVICE_ROLE_KEY` for media
|
|
146
|
+
- ❌ “No media storage” / “disable media uploads” / “remote URLs only” as a numbered choice
|
|
147
|
+
- ❌ Any media list that does not start with **Cloudinary (recommended)**
|
|
148
|
+
|
|
149
|
+
**Forbidden Env UX after Question 1:**
|
|
150
|
+
|
|
151
|
+
- ❌ Showing the user empty fields for `TOMORROWOS_STORE` or `DATABASE_SSL` to fill
|
|
152
|
+
- ❌ Asking in chat “what should TOMORROWOS_STORE be?”
|
|
153
|
+
- ✅ After DB choice + URL paste: **you** write those two vars silently (see Q1 Steps B/C/D)
|
|
154
|
+
|
|
141
155
|
**Forbidden extra questions (never ask, even if the user skips a step):**
|
|
142
156
|
|
|
143
157
|
- ❌ OpenAI / Anthropic / Gemini / any LLM API key (`sk-…`, etc.)
|
|
144
158
|
- ❌ “AI pairing”, “AI feature logic”, or inventing auth that needs an LLM key
|
|
145
|
-
- ❌ Asking the user to type `TOMORROWOS_STORE` or `DATABASE_SSL`
|
|
159
|
+
- ❌ Asking the user to type `TOMORROWOS_STORE` or `DATABASE_SSL`
|
|
146
160
|
- ❌ Any secret not listed in Questions 1–3 (DB URL, media credentials, brand)
|
|
147
161
|
|
|
148
162
|
TomorrowOS pairing and Control Panel logic live in `@tomorrowos/sdk`. They do **not** call OpenAI.
|
|
149
163
|
|
|
150
|
-
If the user **skips** a Question 2 option, do **not** invent a substitute question. Re-state Question 2 choices
|
|
164
|
+
If the user **skips** a Question 2 option, do **not** invent a substitute question. Re-state Question 2 choices **verbatim**, or proceed with local uploads + warning — never pivot to LLM keys or Supabase Storage.
|
|
151
165
|
|
|
152
166
|
If the user says “just set it up, don’t ask questions,” respond:
|
|
153
167
|
|
|
154
|
-
> I need a few quick answers from VERCEL_SETUP.md (database — Supabase or Neon preferred — media storage, and branding). It takes about a minute and ensures the CMS works on Vercel.
|
|
168
|
+
> I need a few quick answers from VERCEL_SETUP.md (database — Supabase or Neon preferred — media storage with Cloudinary recommended, and branding). It takes about a minute and ensures the CMS works on Vercel.
|
|
155
169
|
|
|
156
170
|
Then ask **Question 1**.
|
|
157
171
|
|
|
@@ -159,26 +173,26 @@ Then ask **Question 1**.
|
|
|
159
173
|
|
|
160
174
|
## Hard rules
|
|
161
175
|
|
|
162
|
-
1. **Ask only VERCEL_SETUP.md questions 1–3.** Never use `LLM_PROMPT.md` or `REPLIT_SETUP.md` as the questionnaire. **Never** ask for OpenAI or other LLM API keys.
|
|
163
|
-
2. **
|
|
164
|
-
3. **
|
|
165
|
-
4. **
|
|
166
|
-
5. **
|
|
167
|
-
6. **
|
|
168
|
-
7. **
|
|
169
|
-
8. **
|
|
170
|
-
9. **
|
|
171
|
-
10. **
|
|
172
|
-
11. **
|
|
173
|
-
12. **
|
|
174
|
-
13.
|
|
175
|
-
14. **
|
|
176
|
-
15.
|
|
177
|
-
16. **
|
|
178
|
-
17. **
|
|
179
|
-
18. **
|
|
180
|
-
|
|
181
|
-
**Question order:** Q1 → Q2 → Q3 → execution checklist.
|
|
176
|
+
1. **Ask only VERCEL_SETUP.md questions 1–3, verbatim.** Never use `LLM_PROMPT.md` or `REPLIT_SETUP.md` as the questionnaire. **Never** ask for OpenAI or other LLM API keys.
|
|
177
|
+
2. **Question 2 options are fixed:** (1) Cloudinary **(recommended)**, (2) Vercel Blob, (3) local disk. Do not reorder; do not invent Supabase Storage / disable-uploads.
|
|
178
|
+
3. **Cloudinary:** open **one** Vercel Env popup with **all** Cloudinary fields together. Do **not** quiz one credential at a time.
|
|
179
|
+
4. **`TOMORROWOS_STORE` + `DATABASE_SSL` = agent-owned.** After Q1 choice (and URL if needed), set them yourself in Vercel Env Vars. **Never** include them as blank fields for the customer. Mapping: Supabase → `TOMORROWOS_STORE=supabase` + `DATABASE_SSL=true`; Neon → `TOMORROWOS_STORE=postgres` + `DATABASE_SSL=true`; SQLite → `TOMORROWOS_STORE=sqlite` (no `DATABASE_SSL` required).
|
|
180
|
+
5. **Do not invent** Cloudinary credentials, database URLs, Vercel Blob tokens, brand colours, **or LLM API keys**.
|
|
181
|
+
6. **Postgres env naming:** prefer **`SUPABASE_URL`** for Supabase; prefer **`DATABASE_URL`** for Neon.
|
|
182
|
+
7. **Always prefer pooled connection strings** (Supabase Session pooler **6543**; Neon pooled host).
|
|
183
|
+
8. **Prefer `npx @tomorrowos/sdk init --hosting v0`**. For Replit/Railway use default `init`. Do not rebuild pairing / WebSocket APIs.
|
|
184
|
+
9. **Never commit secrets.** Use Vercel Environment Variables.
|
|
185
|
+
10. **Skip Replit-only files.**
|
|
186
|
+
11. **SQLite is not a production store on Vercel.**
|
|
187
|
+
12. **Enable Fluid compute** for Production WebSockets.
|
|
188
|
+
13. **Production:** `api/index.ts` exports `http.Server` from `TomorrowOS.listen`. Not `next start`. No second TomorrowOS in `api/ws.ts`.
|
|
189
|
+
14. **Preview:** Next reverse-proxy shell when v0 is Next-hardwired.
|
|
190
|
+
15. After Q&A: **configure → install → deploy → minimal verify**.
|
|
191
|
+
16. **No inventing CMS login** from a branding URL.
|
|
192
|
+
17. **Skip ≠ invent.** Stay on Q1–Q3 only.
|
|
193
|
+
18. **Publish gate:** `/status` JSON + WebSocket 101; no static `public/` trap.
|
|
194
|
+
|
|
195
|
+
**Question order:** Q1 → (auto-set store env) → Q2 → Q3 → execution checklist.
|
|
182
196
|
|
|
183
197
|
---
|
|
184
198
|
|
|
@@ -554,7 +568,18 @@ If Vercel’s UI and this file disagree on bundling, **prefer whatever keeps a s
|
|
|
554
568
|
|
|
555
569
|
## Question 1 — Database (always)
|
|
556
570
|
|
|
557
|
-
> **Do not** ask screen counts. Present all three options; recommend **Supabase** for Vercel fleets.
|
|
571
|
+
> **Do not** ask screen counts. Present all three options; recommend **Supabase** for Vercel fleets.
|
|
572
|
+
> **After the user picks a database:** collect the URL if needed, then **you** set `TOMORROWOS_STORE` + `DATABASE_SSL` (see mapping below). The customer must **never** be asked to type those two names or values.
|
|
573
|
+
|
|
574
|
+
### Agent-owned env mapping (mandatory)
|
|
575
|
+
|
|
576
|
+
| User chose | You set (silently) | User only provides |
|
|
577
|
+
|------------|--------------------|--------------------|
|
|
578
|
+
| 1 Supabase | `TOMORROWOS_STORE=supabase`, `DATABASE_SSL=true` | `SUPABASE_URL` (pooler string) |
|
|
579
|
+
| 2 Neon | `TOMORROWOS_STORE=postgres`, `DATABASE_SSL=true` | `DATABASE_URL` (pooled string) |
|
|
580
|
+
| 3 SQLite | `TOMORROWOS_STORE=sqlite` | Confirmation only |
|
|
581
|
+
|
|
582
|
+
If you open an Env configuration UI for Q1, fields visible to the user may include **only** `SUPABASE_URL` or `DATABASE_URL`. **Do not** show blank `TOMORROWOS_STORE` / `DATABASE_SSL` inputs — write those yourself in the same step.
|
|
558
583
|
|
|
559
584
|
### Step A — Ask storage choice
|
|
560
585
|
|
|
@@ -572,9 +597,9 @@ If Vercel’s UI and this file disagree on bundling, **prefer whatever keeps a s
|
|
|
572
597
|
|
|
573
598
|
### Step B — If **1 / Supabase**
|
|
574
599
|
|
|
575
|
-
**Ask exactly (connection string only):**
|
|
600
|
+
**Ask exactly (connection string only — not TOMORROWOS_STORE / DATABASE_SSL):**
|
|
576
601
|
|
|
577
|
-
> Paste your Supabase Postgres connection string. I will store it as **`SUPABASE_URL`**.
|
|
602
|
+
> Paste your Supabase Postgres connection string. I will store it as **`SUPABASE_URL`**. I will set **`TOMORROWOS_STORE`** and **`DATABASE_SSL`** for you automatically.
|
|
578
603
|
>
|
|
579
604
|
> In Supabase: **Project Settings → Database → Connection string → Connection pooling** (Session mode).
|
|
580
605
|
> Preferred shape:
|
|
@@ -582,36 +607,36 @@ If Vercel’s UI and this file disagree on bundling, **prefer whatever keeps a s
|
|
|
582
607
|
>
|
|
583
608
|
> **Do not** use the direct host `db.*.supabase.co:5432` for Vercel.
|
|
584
609
|
|
|
585
|
-
**You must then (automatic — do NOT ask the user to type
|
|
610
|
+
**You must then (automatic — do NOT ask the user to type store/ssl vars):**
|
|
586
611
|
|
|
587
|
-
1. Set Vercel Env Vars:
|
|
588
|
-
- `SUPABASE_URL=<user pooler string>`
|
|
589
|
-
- `TOMORROWOS_STORE=supabase` ← **
|
|
590
|
-
- `DATABASE_SSL=true` ← **
|
|
591
|
-
2. Wire `server.ts` as in **Runtime & Vercel deploy rules**.
|
|
612
|
+
1. Set Vercel Env Vars in one step:
|
|
613
|
+
- `SUPABASE_URL=<user pooler string>` ← from user
|
|
614
|
+
- `TOMORROWOS_STORE=supabase` ← **you set; never ask**
|
|
615
|
+
- `DATABASE_SSL=true` ← **you set; never ask**
|
|
616
|
+
2. Wire `cms-app.ts` / `server.ts` store as in **Runtime & Vercel deploy rules**.
|
|
592
617
|
3. Optional committed `.env.example` with **placeholders only**.
|
|
593
618
|
4. **Do not** commit the real connection string.
|
|
594
|
-
5. **Do not** open a
|
|
619
|
+
5. **Do not** open a form whose blank fields include `TOMORROWOS_STORE` or `DATABASE_SSL`.
|
|
595
620
|
|
|
596
621
|
### Step C — If **2 / Neon**
|
|
597
622
|
|
|
598
623
|
**Ask exactly (connection string only):**
|
|
599
624
|
|
|
600
|
-
> Paste your **Neon pooled** Postgres connection string. I will store it as **`DATABASE_URL`**.
|
|
625
|
+
> Paste your **Neon pooled** Postgres connection string. I will store it as **`DATABASE_URL`**. I will set **`TOMORROWOS_STORE`** and **`DATABASE_SSL`** for you automatically.
|
|
601
626
|
>
|
|
602
627
|
> In Neon: **Dashboard → Connection details → Pooled connection**.
|
|
603
628
|
> Typical shape:
|
|
604
629
|
> `postgresql://[user]:[password]@[endpoint]-pooler.[region].aws.neon.tech/[dbname]?sslmode=require`
|
|
605
630
|
|
|
606
|
-
**You must then (automatic
|
|
631
|
+
**You must then (automatic):**
|
|
607
632
|
|
|
608
633
|
1. Set Vercel Env Vars:
|
|
609
|
-
- `DATABASE_URL=<user pooled string>`
|
|
610
|
-
- `TOMORROWOS_STORE=postgres` ← **
|
|
611
|
-
- `DATABASE_SSL=true` ← **
|
|
612
|
-
2. Wire `
|
|
634
|
+
- `DATABASE_URL=<user pooled string>` ← from user
|
|
635
|
+
- `TOMORROWOS_STORE=postgres` ← **you set; never ask**
|
|
636
|
+
- `DATABASE_SSL=true` ← **you set; never ask**
|
|
637
|
+
2. Wire `createTomorrowOSStore` for Postgres.
|
|
613
638
|
3. **Do not** commit the real connection string.
|
|
614
|
-
4. **Do not** ask the user to fill `TOMORROWOS_STORE` or `DATABASE_SSL` in chat or
|
|
639
|
+
4. **Do not** ask the user to fill `TOMORROWOS_STORE` or `DATABASE_SSL` in chat or Env UI.
|
|
615
640
|
5. If you see `ENETUNREACH` on `:5432`, switch to Neon’s **pooled** URL.
|
|
616
641
|
|
|
617
642
|
### Step D — If **3 / SQLite**
|
|
@@ -625,7 +650,7 @@ Only proceed after the user explicitly confirms.
|
|
|
625
650
|
**You must then (automatic):**
|
|
626
651
|
|
|
627
652
|
1. Set `TOMORROWOS_STORE=sqlite` yourself (do not ask the user to type it).
|
|
628
|
-
2. Keep `sqlitePath`
|
|
653
|
+
2. Keep `sqlitePath` for `data/tomorrowos.db`.
|
|
629
654
|
3. Warn again in the final summary that they should move to Supabase or Neon for real devices.
|
|
630
655
|
|
|
631
656
|
**Later in Question 3:** set `cms.hostingTarget` to **`"vercel"`** (all Q1 branches).
|
|
@@ -635,22 +660,25 @@ Only proceed after the user explicitly confirms.
|
|
|
635
660
|
## Question 2 — Media storage
|
|
636
661
|
|
|
637
662
|
> **This question is only about media files (images/videos).**
|
|
638
|
-
> It is **not** about OpenAI, AI pairing, or LLM keys. If you are about to ask for an `sk-` key, **stop** — you are off-protocol.
|
|
663
|
+
> It is **not** about OpenAI, AI pairing, or LLM keys. If you are about to ask for an `sk-` key, **stop** — you are off-protocol.
|
|
664
|
+
> **Copy the three options below verbatim.** Wrong examples that must **never** appear: “Vercel Blob (recommended)”, “Supabase Storage”, “No media storage / disable uploads”.
|
|
639
665
|
|
|
640
666
|
### Step A — Ask storage choice
|
|
641
667
|
|
|
642
|
-
**Ask exactly:**
|
|
668
|
+
**Ask exactly (wording must match — Cloudinary is recommended):**
|
|
643
669
|
|
|
644
670
|
> How should playlist media (images/videos) be stored?
|
|
645
671
|
>
|
|
646
|
-
> **1. Cloudinary (recommended)** — durable public HTTPS URLs (`https://res.cloudinary.com/...`). Works out of the box with `@tomorrowos/sdk` auto-detection.
|
|
672
|
+
> **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.**
|
|
647
673
|
>
|
|
648
|
-
> **2. Vercel Blob** — Vercel-native object storage; durable `https://*.public.blob.vercel-storage.com/...` URLs.
|
|
674
|
+
> **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.
|
|
649
675
|
>
|
|
650
|
-
> **3. Local disk only** — `public/uploads` (OK for quick local tests; **not** for production Vercel fleets — files are ephemeral).
|
|
676
|
+
> **3. Local disk only** — `cms-panel/uploads` or `public/uploads` (OK for quick local tests; **not** for production Vercel fleets — files are ephemeral).
|
|
651
677
|
>
|
|
652
678
|
> Reply with **1**, **2**, or **3** (or “Cloudinary” / “Vercel Blob” / “local”).
|
|
653
679
|
|
|
680
|
+
If you catch yourself about to offer Blob-as-recommended, Supabase Storage, or “no media”, **stop and paste the block above instead**.
|
|
681
|
+
|
|
654
682
|
### Step B — If **1 / Cloudinary** (same Question 2 — **one Env popup**)
|
|
655
683
|
|
|
656
684
|
> **Critical UX rule:** Immediately open the **Vercel Environment Variables configuration popup / form** with **all Cloudinary fields in one UI**. Do **not** ask for cloud name, then key, then secret in separate chat messages.
|
|
@@ -837,8 +865,8 @@ Then (**Scheme A — mandatory for Publish**):
|
|
|
837
865
|
|------|----------|--------------|
|
|
838
866
|
| `SUPABASE_URL` | If Q1 = Supabase | User pastes URL |
|
|
839
867
|
| `DATABASE_URL` | If Q1 = Neon | User pastes URL |
|
|
840
|
-
| `TOMORROWOS_STORE` | Yes | **Agent auto-sets** (`supabase` / `postgres` / `sqlite`) |
|
|
841
|
-
| `DATABASE_SSL` | Yes for Postgres | **Agent auto-sets** `true` |
|
|
868
|
+
| `TOMORROWOS_STORE` | Yes | **Agent auto-sets only** — never a blank field for the user (`supabase` / `postgres` / `sqlite`) |
|
|
869
|
+
| `DATABASE_SSL` | Yes for Postgres | **Agent auto-sets only** — never a blank field for the user (`true`) |
|
|
842
870
|
| `CLOUDINARY_*` | If Q2 = Cloudinary | User via **one Env popup** (all fields) |
|
|
843
871
|
| `BLOB_READ_WRITE_TOKEN` | If Q2 = Vercel Blob | User / Blob link |
|
|
844
872
|
| `TOMORROWOS_INTERNAL_PORT` | Preview only | Agent (e.g. `3001`) |
|
|
@@ -920,7 +948,8 @@ Tell the user:
|
|
|
920
948
|
| Blob uploads 401 / missing token | Blob not linked | Vercel Storage → Blob + `BLOB_READ_WRITE_TOKEN` |
|
|
921
949
|
| WebSocket fails on Publish | Fluid off / static-only / Next as Production / no Function WS | Enable Fluid; Scheme A; test 101 upgrade |
|
|
922
950
|
| Devices fail only on Preview | Next proxy cannot upgrade `wss` | Expected — pair on Publish URL |
|
|
923
|
-
| Agent asked user to fill `TOMORROWOS_STORE` / `DATABASE_SSL` | Off-protocol | Agent must auto-set
|
|
951
|
+
| Agent asked user to fill `TOMORROWOS_STORE` / `DATABASE_SSL` | Off-protocol | Agent must auto-set after DB choice; remove those fields from user Env forms |
|
|
952
|
+
| Agent offered Blob-as-recommended / Supabase Storage / “no media” for Q2 | Invented options | Re-ask Q2 verbatim: **1 Cloudinary (recommended)**, 2 Blob, 3 local |
|
|
924
953
|
| Agent asked Cloudinary key/secret in three chat turns | Off-protocol | Use **one Env popup** with all Cloudinary fields |
|
|
925
954
|
| Agent asked for OpenAI / `sk-` key during setup | Hallucinated “AI pairing” requirement | **Refuse.** TomorrowOS does not need LLM keys. Return to Q2 media choices only |
|
|
926
955
|
| Agent built a login page after user pasted a URL | Misread brand reference as product scope | Remove login; keep starter Control Panel; apply URL only to `brand.json` |
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@tomorrowos/sdk",
|
|
3
|
-
"version": "0.9.
|
|
3
|
+
"version": "0.9.33",
|
|
4
4
|
"description": "TomorrowOS CMS server SDK - WebSocket transport, pairing, device commands, optional static CMS UI. Includes CLI (tomorrowos init / build) and starter templates.",
|
|
5
5
|
"type": "module",
|
|
6
6
|
"main": "./dist/index.js",
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "my-cms",
|
|
3
|
-
"version": "0.9.
|
|
3
|
+
"version": "0.9.33",
|
|
4
4
|
"description": "CMS server on @tomorrowos/sdk. Add your UI (React, static files, etc.) alongside this server.",
|
|
5
5
|
"private": true,
|
|
6
6
|
"type": "module",
|
|
@@ -13,7 +13,7 @@
|
|
|
13
13
|
"build-player": "tomorrowos build --platform tizen"
|
|
14
14
|
},
|
|
15
15
|
"dependencies": {
|
|
16
|
-
"@tomorrowos/sdk": "^0.9.
|
|
16
|
+
"@tomorrowos/sdk": "^0.9.33",
|
|
17
17
|
"dotenv": "^17.2.3",
|
|
18
18
|
"tsx": "^4.19.0"
|
|
19
19
|
},
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "my-cms",
|
|
3
|
-
"version": "0.9.
|
|
3
|
+
"version": "0.9.33",
|
|
4
4
|
"description": "TomorrowOS CMS for Vercel / v0 Publish (Fluid Function + WebSockets + optional Next Preview).",
|
|
5
5
|
"private": true,
|
|
6
6
|
"type": "module",
|
|
@@ -17,7 +17,7 @@
|
|
|
17
17
|
"build-player": "tomorrowos build --platform tizen"
|
|
18
18
|
},
|
|
19
19
|
"dependencies": {
|
|
20
|
-
"@tomorrowos/sdk": "^0.9.
|
|
20
|
+
"@tomorrowos/sdk": "^0.9.33",
|
|
21
21
|
"dotenv": "^17.2.3",
|
|
22
22
|
"tsx": "^4.19.0"
|
|
23
23
|
},
|