@fluxy-chat/create-fluxy-chat 0.5.4 → 0.5.6
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/CHANGELOG.md +19 -0
- package/package.json +1 -1
- package/templates/full/README.md +13 -32
- package/templates/full/index.html +3 -0
- package/templates/full/package.json +15 -0
- package/templates/full/postcss.config.js +6 -0
- package/templates/full/scripts/fluxy-doctor.mjs +5 -2
- package/templates/full/scripts/fluxy-setup.mjs +14 -31
- package/templates/full/src/App.tsx +214 -183
- package/templates/full/src/index.css +245 -244
- package/templates/full/src/session.ts +54 -0
- package/templates/full/tailwind.config.js +41 -0
- package/templates/full/vite.config.ts +7 -0
package/CHANGELOG.md
CHANGED
|
@@ -1,5 +1,24 @@
|
|
|
1
1
|
# Changelog
|
|
2
2
|
|
|
3
|
+
## [0.5.6] - 2026-08-19
|
|
4
|
+
|
|
5
|
+
### Changed
|
|
6
|
+
|
|
7
|
+
- Hosted `full` template opens a local onboarding tour first. Clerk sign-in is the last step, then you land on a simple chat (same UI primitives as the console). Open a second tab to try realtime. Dashboard is a separate button, not the first screen.
|
|
8
|
+
|
|
9
|
+
### Fixed
|
|
10
|
+
|
|
11
|
+
- Pin Vite to `@fluxy-chat/ui/dist/index.js` and force `@fluxy-chat/sdk@0.6.2` so `pnpm install` + `pnpm dev` work without extra setup.
|
|
12
|
+
- Depend on `@fluxy-chat/ui@^0.1.3` (valid package exports).
|
|
13
|
+
|
|
14
|
+
## [0.5.5] - 2026-08-19
|
|
15
|
+
|
|
16
|
+
### Fixed
|
|
17
|
+
|
|
18
|
+
- Hosted `full` template now provisions a user project + assistant room via Clerk (no more public playground session).
|
|
19
|
+
- Hosted `full` template uses the same chat UI primitives as FluxyChat (message bubbles/composer/status) to match dashboard/rooms/onboarding styling.
|
|
20
|
+
- Remove fuorvianti "dash" UI artifacts and wire message sending through the same chat path as the dashboard.
|
|
21
|
+
|
|
3
22
|
## [0.5.4] - 2026-08-19
|
|
4
23
|
|
|
5
24
|
### Fixed
|
package/package.json
CHANGED
package/templates/full/README.md
CHANGED
|
@@ -1,66 +1,47 @@
|
|
|
1
|
-
# FluxyChat
|
|
1
|
+
# FluxyChat full stack starter
|
|
2
2
|
|
|
3
|
-
Chat + AI agent
|
|
3
|
+
Chat + AI agent in a Vite app. Hosted mode starts with a short local tour, then Clerk, then your own room.
|
|
4
4
|
|
|
5
5
|
## Quick start
|
|
6
6
|
|
|
7
7
|
**Hosted (no wrangler):**
|
|
8
8
|
|
|
9
9
|
```bash
|
|
10
|
-
npx @fluxy-chat/create-fluxy-chat my-app --mode hosted -y
|
|
10
|
+
npx @fluxy-chat/create-fluxy-chat@latest my-app --mode hosted -y
|
|
11
11
|
cd my-app
|
|
12
12
|
pnpm install
|
|
13
13
|
pnpm setup:hosted
|
|
14
14
|
pnpm dev
|
|
15
15
|
```
|
|
16
16
|
|
|
17
|
-
|
|
17
|
+
Localhost opens a 3-step tour. Last step is sign in. After Clerk you come back to a simple chat. Open a second tab to try realtime. Use Open dashboard for rooms and agents.
|
|
18
|
+
|
|
19
|
+
**Local worker:**
|
|
18
20
|
|
|
19
21
|
```bash
|
|
20
|
-
# Terminal 1 — monorepo worker
|
|
21
22
|
pnpm --filter @fluxy-chat/worker dev
|
|
22
|
-
|
|
23
|
-
# Terminal 2 — new project
|
|
24
|
-
npx create-fluxy-chat my-app --full -y
|
|
23
|
+
npx @fluxy-chat/create-fluxy-chat@latest my-app --full -y
|
|
25
24
|
cd my-app
|
|
26
25
|
pnpm install
|
|
27
26
|
pnpm setup
|
|
28
27
|
pnpm dev
|
|
29
28
|
```
|
|
30
29
|
|
|
31
|
-
Optional: `pnpm doctor` checks `.env`, worker health, room access.
|
|
32
|
-
|
|
33
|
-
## What you get
|
|
34
|
-
|
|
35
|
-
- Realtime chat (`useChat` + WebSocket)
|
|
36
|
-
- `@assistant` invoke with tool call thread in the UI
|
|
37
|
-
- Sidebar with project/room/agent metadata
|
|
38
|
-
- Link to operator console
|
|
39
|
-
|
|
40
30
|
## Scripts
|
|
41
31
|
|
|
42
32
|
| Command | Description |
|
|
43
33
|
|---------|-------------|
|
|
44
|
-
| `pnpm setup:hosted` |
|
|
45
|
-
| `pnpm setup:local` | Local `/dev/provision`
|
|
46
|
-
| `pnpm doctor` | Health check
|
|
47
|
-
| `pnpm dev` | Start Vite
|
|
48
|
-
| `pnpm dev:app` | Vite only |
|
|
34
|
+
| `pnpm setup:hosted` | Writes worker + console URLs. Auth happens in the browser via Clerk. |
|
|
35
|
+
| `pnpm setup:local` | Local `/dev/provision` |
|
|
36
|
+
| `pnpm doctor` | Health check |
|
|
37
|
+
| `pnpm dev` | Start Vite |
|
|
49
38
|
|
|
50
39
|
## Environment
|
|
51
40
|
|
|
52
|
-
|
|
53
|
-
|
|
54
|
-
- `VITE_FLUXYCHAT_WORKER_URL` — default `http://127.0.0.1:8787`
|
|
55
|
-
- `VITE_FLUXYCHAT_MEMBER_JWT` — member token with admin roles
|
|
56
|
-
- `VITE_FLUXYCHAT_ROOM_ID` — `{projectId}-general`
|
|
57
|
-
- `VITE_FLUXYCHAT_AGENT_ID` — built-in `@assistant`
|
|
58
|
-
|
|
59
|
-
## Hosted credentials
|
|
41
|
+
`.env` from `pnpm setup:hosted` only needs worker and console URLs. Member JWT, room, and agent come from Clerk after sign in.
|
|
60
42
|
|
|
61
|
-
|
|
43
|
+
Dashboard: [fluxychat.com/dashboard](https://fluxychat.com/dashboard)
|
|
62
44
|
|
|
63
45
|
## Learn more
|
|
64
46
|
|
|
65
|
-
- [One-click product roadmap](https://github.com/AlessandroFare/fluxychat/blob/main/docs/ONE-CLICK-PRODUCT-ROADMAP.md)
|
|
66
47
|
- [Docs](https://docs.fluxychat.com)
|
|
@@ -4,6 +4,9 @@
|
|
|
4
4
|
<meta charset="UTF-8" />
|
|
5
5
|
<meta name="viewport" content="width=device-width, initial-scale=1.0" />
|
|
6
6
|
<title>FluxyChat</title>
|
|
7
|
+
<link rel="preconnect" href="https://fonts.googleapis.com" />
|
|
8
|
+
<link rel="preconnect" href="https://fonts.gstatic.com" crossorigin />
|
|
9
|
+
<link href="https://fonts.googleapis.com/css2?family=Inter:wght@400;500;600;650&display=swap" rel="stylesheet" />
|
|
7
10
|
</head>
|
|
8
11
|
<body>
|
|
9
12
|
<div id="root"></div>
|
|
@@ -16,15 +16,30 @@
|
|
|
16
16
|
"dependencies": {
|
|
17
17
|
"@fluxy-chat/react": "^0.1.1",
|
|
18
18
|
"@fluxy-chat/sdk": "^0.6.2",
|
|
19
|
+
"@fluxy-chat/ui": "^0.1.3",
|
|
20
|
+
"class-variance-authority": "^0.7.1",
|
|
21
|
+
"clsx": "^2.1.1",
|
|
22
|
+
"lucide-react": "^0.511.0",
|
|
23
|
+
"radix-ui": "^1.4.3",
|
|
19
24
|
"react": "^19.0.0",
|
|
20
25
|
"react-dom": "^19.0.0",
|
|
26
|
+
"tailwind-merge": "^3.0.0",
|
|
21
27
|
"zustand": "^5.0.14"
|
|
22
28
|
},
|
|
23
29
|
"devDependencies": {
|
|
24
30
|
"@types/react": "^19.0.0",
|
|
25
31
|
"@types/react-dom": "^19.0.0",
|
|
26
32
|
"@vitejs/plugin-react": "^4.3.0",
|
|
33
|
+
"autoprefixer": "^10.4.20",
|
|
34
|
+
"postcss": "^8.5.0",
|
|
35
|
+
"tailwindcss": "^3.4.17",
|
|
27
36
|
"typescript": "^5.6.0",
|
|
28
37
|
"vite": "^6.0.0"
|
|
38
|
+
},
|
|
39
|
+
"pnpm": {
|
|
40
|
+
"overrides": {
|
|
41
|
+
"@fluxy-chat/sdk": "0.6.2",
|
|
42
|
+
"@fluxy-chat/react>@fluxy-chat/sdk": "0.6.2"
|
|
43
|
+
}
|
|
29
44
|
}
|
|
30
45
|
}
|
|
@@ -71,8 +71,11 @@ async function main() {
|
|
|
71
71
|
if (!workerUrl) fail("VITE_FLUXYCHAT_WORKER_URL unset");
|
|
72
72
|
else pass(`worker URL: ${workerUrl}`);
|
|
73
73
|
|
|
74
|
-
|
|
75
|
-
|
|
74
|
+
const hosted = (env.VITE_FLUXYCHAT_CONSOLE_URL || "").includes("fluxychat.com");
|
|
75
|
+
if (!jwt) {
|
|
76
|
+
if (hosted) warn("VITE_FLUXYCHAT_MEMBER_JWT unset — sign in from the app (Clerk)");
|
|
77
|
+
else fail("VITE_FLUXYCHAT_MEMBER_JWT unset");
|
|
78
|
+
} else pass(`JWT present (${jwt.length} chars)`);
|
|
76
79
|
|
|
77
80
|
if (!roomId) warn("VITE_FLUXYCHAT_ROOM_ID unset");
|
|
78
81
|
else pass(`room: ${roomId}`);
|
|
@@ -189,49 +189,32 @@ async function setupHosted() {
|
|
|
189
189
|
|
|
190
190
|
console.log(dim(` mode: hosted · worker: ${workerUrl}`));
|
|
191
191
|
|
|
192
|
-
const cliHeaders = { Origin: consoleUrl };
|
|
193
|
-
|
|
194
|
-
const status = await getJson(workerUrl, "/demo/status", cliHeaders).catch(() => null);
|
|
195
|
-
if (!status?.ready) {
|
|
196
|
-
fail(
|
|
197
|
-
`Public demo not available at ${workerUrl}\n` +
|
|
198
|
-
" Try: pnpm setup -- --mode local (with local worker)\n" +
|
|
199
|
-
" Or: https://fluxychat.com/demo",
|
|
200
|
-
);
|
|
201
|
-
}
|
|
202
|
-
ok("public demo ready");
|
|
203
|
-
|
|
204
|
-
const session = await getJson(workerUrl, "/demo/session", cliHeaders);
|
|
205
|
-
if (!session?.token || !session?.roomId) {
|
|
206
|
-
fail("/demo/session did not return token + roomId");
|
|
207
|
-
}
|
|
208
|
-
ok(`guest session · room ${session.roomId}`);
|
|
209
|
-
|
|
210
192
|
writeEnv({
|
|
211
193
|
workerUrl,
|
|
212
|
-
token:
|
|
213
|
-
roomId:
|
|
214
|
-
agentId:
|
|
215
|
-
agentHandle:
|
|
216
|
-
projectId: "
|
|
217
|
-
userId:
|
|
194
|
+
token: "",
|
|
195
|
+
roomId: "",
|
|
196
|
+
agentId: "",
|
|
197
|
+
agentHandle: "@assistant",
|
|
198
|
+
projectId: "",
|
|
199
|
+
userId: "",
|
|
218
200
|
consoleUrl,
|
|
219
201
|
});
|
|
220
202
|
|
|
221
203
|
writeMeta({
|
|
222
204
|
mode: "hosted",
|
|
223
205
|
workerUrl,
|
|
224
|
-
projectId:
|
|
225
|
-
roomId:
|
|
226
|
-
agentId:
|
|
227
|
-
agentHandle:
|
|
228
|
-
expiresIn: session.expiresIn ?? null,
|
|
206
|
+
projectId: null,
|
|
207
|
+
roomId: null,
|
|
208
|
+
agentId: null,
|
|
209
|
+
agentHandle: "@assistant",
|
|
229
210
|
setupAt: new Date().toISOString(),
|
|
211
|
+
auth: "clerk",
|
|
230
212
|
});
|
|
231
213
|
|
|
214
|
+
ok("wrote hosted endpoints (sign in with Clerk on pnpm dev)");
|
|
232
215
|
console.log(dim(" Run: pnpm dev"));
|
|
233
|
-
console.log(dim(
|
|
234
|
-
console.log(dim(
|
|
216
|
+
console.log(dim(" Sign in with Clerk. We create your project and assistant room."));
|
|
217
|
+
console.log(dim(` Console: ${consoleUrl}/onboarding`));
|
|
235
218
|
}
|
|
236
219
|
|
|
237
220
|
async function setupLocal() {
|