fluxy-bot 0.12.6 → 0.12.7

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.
Files changed (51) hide show
  1. package/package.json +3 -1
  2. package/vite.config.ts +1 -0
  3. package/worker/prompts/fluxy-system-prompt.txt +6 -1
  4. package/workspace/.backend.log +1 -0
  5. package/workspace/client/index.html +7 -5
  6. package/workspace/client/src/App.tsx +12 -3
  7. package/workspace/client/src/components/Dashboard/DashboardPage.tsx +120 -113
  8. package/workspace/client/src/components/Layout/DashboardLayout.tsx +17 -14
  9. package/workspace/client/src/components/Layout/MobileNav.tsx +2 -2
  10. package/workspace/client/src/components/Layout/Sidebar.tsx +48 -15
  11. package/workspace/client/src/components/deleteme_onboarding/WorkspaceTour.tsx +94 -0
  12. package/workspace/client/src/components/deleteme_onboarding/tour-theme.css +75 -0
  13. package/workspace/client/src/components/ui/sheet.tsx +2 -1
  14. package/workspace/client/src/styles/globals.css +4 -1
  15. package/workspace/node_modules/.vite/deps/_metadata.json +116 -0
  16. package/workspace/node_modules/.vite/deps/clsx.js +18 -0
  17. package/workspace/node_modules/.vite/deps/clsx.js.map +1 -0
  18. package/workspace/node_modules/.vite/deps/driver__js.js +581 -0
  19. package/workspace/node_modules/.vite/deps/driver__js.js.map +1 -0
  20. package/workspace/node_modules/.vite/deps/framer-motion.js +13761 -0
  21. package/workspace/node_modules/.vite/deps/framer-motion.js.map +1 -0
  22. package/workspace/node_modules/.vite/deps/lucide-react.js +34357 -0
  23. package/workspace/node_modules/.vite/deps/lucide-react.js.map +1 -0
  24. package/workspace/node_modules/.vite/deps/package.json +3 -0
  25. package/workspace/node_modules/.vite/deps/radix-ui.js +13835 -0
  26. package/workspace/node_modules/.vite/deps/radix-ui.js.map +1 -0
  27. package/workspace/node_modules/.vite/deps/react-3_O8oni9.js +799 -0
  28. package/workspace/node_modules/.vite/deps/react-3_O8oni9.js.map +1 -0
  29. package/workspace/node_modules/.vite/deps/react-dom.js +185 -0
  30. package/workspace/node_modules/.vite/deps/react-dom.js.map +1 -0
  31. package/workspace/node_modules/.vite/deps/react-dom_client.js +14384 -0
  32. package/workspace/node_modules/.vite/deps/react-dom_client.js.map +1 -0
  33. package/workspace/node_modules/.vite/deps/react-router.js +9785 -0
  34. package/workspace/node_modules/.vite/deps/react-router.js.map +1 -0
  35. package/workspace/node_modules/.vite/deps/react.js +2 -0
  36. package/workspace/node_modules/.vite/deps/react_jsx-dev-runtime.js +204 -0
  37. package/workspace/node_modules/.vite/deps/react_jsx-dev-runtime.js.map +1 -0
  38. package/workspace/node_modules/.vite/deps/react_jsx-runtime.js +209 -0
  39. package/workspace/node_modules/.vite/deps/react_jsx-runtime.js.map +1 -0
  40. package/workspace/node_modules/.vite/deps/recharts.js +34142 -0
  41. package/workspace/node_modules/.vite/deps/recharts.js.map +1 -0
  42. package/workspace/node_modules/.vite/deps/sonner.js +943 -0
  43. package/workspace/node_modules/.vite/deps/sonner.js.map +1 -0
  44. package/workspace/node_modules/.vite/deps/tailwind-merge.js +2025 -0
  45. package/workspace/node_modules/.vite/deps/tailwind-merge.js.map +1 -0
  46. package/workspace/node_modules/.vite/deps/use-sync-external-store.js +27 -0
  47. package/workspace/node_modules/.vite/deps/use-sync-external-store.js.map +1 -0
  48. package/workspace/node_modules/.vite/deps/use-sync-external-store_shim.js +75 -0
  49. package/workspace/node_modules/.vite/deps/use-sync-external-store_shim.js.map +1 -0
  50. package/workspace/node_modules/.vite/deps/zustand.js +49 -0
  51. package/workspace/node_modules/.vite/deps/zustand.js.map +1 -0
@@ -0,0 +1,94 @@
1
+ /**
2
+ * First-time workspace onboarding tour.
3
+ * Uses driver.js to highlight key areas of the workspace.
4
+ *
5
+ * This entire folder (deleteme_onboarding) can be safely deleted
6
+ * once you no longer need the tour. Just remove the import
7
+ * from App.tsx as well.
8
+ */
9
+
10
+ import { useEffect } from 'react';
11
+ import { driver } from 'driver.js';
12
+ import 'driver.js/dist/driver.css';
13
+ import './tour-theme.css';
14
+
15
+ const TOUR_KEY = 'fluxy_workspace_tour_done';
16
+
17
+ export default function WorkspaceTour() {
18
+ useEffect(() => {
19
+ if (localStorage.getItem(TOUR_KEY)) return;
20
+
21
+ // Mark immediately to prevent StrictMode double-fire
22
+ localStorage.setItem(TOUR_KEY, 'pending');
23
+
24
+ const timer = setTimeout(() => {
25
+ const d = driver({
26
+ showProgress: true,
27
+ animate: true,
28
+ allowClose: true,
29
+ overlayColor: '#000',
30
+ overlayOpacity: 0.75,
31
+ stagePadding: 12,
32
+ stageRadius: 16,
33
+ popoverClass: 'fluxy-tour-popover',
34
+ nextBtnText: 'Next →',
35
+ prevBtnText: '← Back',
36
+ doneBtnText: 'Got it!',
37
+ onDestroyed: () => {
38
+ localStorage.setItem(TOUR_KEY, '1');
39
+ },
40
+ steps: [
41
+ {
42
+ element: '#tour-sidebar',
43
+ popover: {
44
+ title: 'Your Sidebar',
45
+ description: 'When you ask Fluxy to build something, it creates an App that shows up right here. Think of it as your personal app launcher.',
46
+ side: 'right',
47
+ align: 'start',
48
+ },
49
+ },
50
+ {
51
+ element: '#tour-dashboard',
52
+ popover: {
53
+ title: 'Your Dashboard',
54
+ description: 'Fluxy can add widgets here with a summary of your apps, the weather in your city, home automation controls... whatever you need at a glance.',
55
+ side: 'left',
56
+ align: 'start',
57
+ },
58
+ },
59
+ {
60
+ element: '#fluxy-widget-toggle',
61
+ popover: {
62
+ title: 'Chat with Fluxy',
63
+ description: 'This is where you talk to your Fluxy. Tell it what to build, ask questions, or just chat. It is always here for you.',
64
+ side: 'left',
65
+ align: 'end',
66
+ },
67
+ },
68
+ {
69
+ popover: {
70
+ title: 'A few things to know',
71
+ description: `
72
+ <div style="display:flex;flex-direction:column;gap:12px;font-size:13px;line-height:1.5">
73
+ <p><strong>Make it yours.</strong> These widgets are just examples. You own this workspace and Fluxy can transform it into anything you want.</p>
74
+ <p><strong>Set a workspace password.</strong> By default, your workspace is open. Ask Fluxy to add a password so only you can see your apps and data.</p>
75
+ <p><strong>Keep your chat password safe.</strong> It controls access to Fluxy, which has full access to this machine. Use a strong one. If you ever lose it, run <code style="background:rgba(255,255,255,0.1);padding:2px 6px;border-radius:4px;font-size:12px">fluxy password-reset</code> in your terminal.</p>
76
+ <p><strong>Fluxy does more than build apps.</strong> It can research topics, manage files, run commands, and help with just about anything. Just ask.</p>
77
+ <p><strong>Fluxy wakes up on its own.</strong> Every 30 minutes, it checks in and can take action proactively. You can adjust this anytime.</p>
78
+ <p><strong>Schedule anything.</strong> Ask things like "Every day at 6am, send me a briefing" or "In 40 minutes, remind me to call the dentist." Fluxy handles cron jobs and one-time reminders.</p>
79
+ <p><strong>Install it on your phone.</strong> Fluxy is a PWA. You can add it to your home screen and enable push notifications. It only pings you when something actually matters, and you can tune that by asking.</p>
80
+ </div>
81
+ `,
82
+ },
83
+ },
84
+ ],
85
+ });
86
+
87
+ d.drive();
88
+ }, 800);
89
+
90
+ return () => clearTimeout(timer);
91
+ }, []);
92
+
93
+ return null;
94
+ }
@@ -0,0 +1,75 @@
1
+ .fluxy-tour-popover {
2
+ background: #1A1A1A !important;
3
+ color: #f5f5f5 !important;
4
+ border: 1px solid rgba(255, 255, 255, 0.08) !important;
5
+ border-radius: 16px !important;
6
+ box-shadow: 0 24px 48px rgba(0, 0, 0, 0.5) !important;
7
+ max-width: 380px !important;
8
+ }
9
+
10
+ .fluxy-tour-popover .driver-popover-title {
11
+ color: #f5f5f5 !important;
12
+ font-size: 16px !important;
13
+ font-weight: 700 !important;
14
+ }
15
+
16
+ .fluxy-tour-popover .driver-popover-description {
17
+ color: rgba(255, 255, 255, 0.6) !important;
18
+ font-size: 13px !important;
19
+ line-height: 1.5 !important;
20
+ }
21
+
22
+ .fluxy-tour-popover .driver-popover-description p strong {
23
+ color: #f5f5f5 !important;
24
+ }
25
+
26
+ .fluxy-tour-popover .driver-popover-navigation-btns {
27
+ gap: 6px !important;
28
+ }
29
+
30
+ .fluxy-tour-popover .driver-popover-next-btn {
31
+ background: linear-gradient(to right, #4FF2FE, #BC20DE, #FE546B) !important;
32
+ color: #fff !important;
33
+ border: none !important;
34
+ border-radius: 8px !important;
35
+ font-weight: 600 !important;
36
+ font-size: 12px !important;
37
+ padding: 6px 16px !important;
38
+ text-shadow: 0 1px 2px rgba(0, 0, 0, 0.3) !important;
39
+ }
40
+
41
+ .fluxy-tour-popover .driver-popover-prev-btn {
42
+ background: rgba(255, 255, 255, 0.06) !important;
43
+ color: rgba(255, 255, 255, 0.6) !important;
44
+ border: 1px solid rgba(255, 255, 255, 0.08) !important;
45
+ border-radius: 8px !important;
46
+ font-weight: 600 !important;
47
+ font-size: 12px !important;
48
+ padding: 6px 16px !important;
49
+ white-space: nowrap !important;
50
+ }
51
+
52
+ .fluxy-tour-popover .driver-popover-prev-btn:hover {
53
+ color: #f5f5f5 !important;
54
+ background: rgba(255, 255, 255, 0.1) !important;
55
+ }
56
+
57
+ .fluxy-tour-popover .driver-popover-progress-text {
58
+ color: rgba(255, 255, 255, 0.3) !important;
59
+ font-size: 11px !important;
60
+ }
61
+
62
+ .fluxy-tour-popover .driver-popover-close-btn {
63
+ color: rgba(255, 255, 255, 0.4) !important;
64
+ }
65
+
66
+ .fluxy-tour-popover .driver-popover-close-btn:hover {
67
+ color: #f5f5f5 !important;
68
+ }
69
+
70
+ .fluxy-tour-popover .driver-popover-arrow-side-left,
71
+ .fluxy-tour-popover .driver-popover-arrow-side-right,
72
+ .fluxy-tour-popover .driver-popover-arrow-side-top,
73
+ .fluxy-tour-popover .driver-popover-arrow-side-bottom {
74
+ border-color: #1A1A1A !important;
75
+ }
@@ -57,12 +57,13 @@ function SheetContent({
57
57
  <SheetOverlay />
58
58
  <SheetPrimitive.Content
59
59
  data-slot="sheet-content"
60
+ aria-describedby={undefined}
60
61
  className={cn(
61
62
  "bg-background data-[state=open]:animate-in data-[state=closed]:animate-out fixed z-50 flex flex-col gap-4 shadow-lg transition ease-in-out data-[state=closed]:duration-300 data-[state=open]:duration-500",
62
63
  side === "right" &&
63
64
  "data-[state=closed]:slide-out-to-right data-[state=open]:slide-in-from-right inset-y-0 right-0 h-full w-3/4 border-l sm:max-w-sm",
64
65
  side === "left" &&
65
- "data-[state=closed]:slide-out-to-left data-[state=open]:slide-in-from-left inset-y-0 left-0 h-full w-3/4 border-r sm:max-w-sm",
66
+ "data-[state=closed]:slide-out-to-left data-[state=open]:slide-in-from-left inset-y-0 left-0 h-full w-3/4 sm:max-w-sm shadow-[4px_0_24px_rgba(0,0,0,0.4)]",
66
67
  side === "top" &&
67
68
  "data-[state=closed]:slide-out-to-top data-[state=open]:slide-in-from-top inset-x-0 top-0 h-auto border-b",
68
69
  side === "bottom" &&
@@ -3,7 +3,8 @@
3
3
  @custom-variant dark (&:is(.dark *));
4
4
 
5
5
  @theme inline {
6
- --color-background: #212121;
6
+ --font-sans: system-ui, -apple-system, sans-serif;
7
+ --color-background: #0A0A0A;
7
8
  --color-foreground: #f5f5f5;
8
9
  --color-card: #2a2a2a;
9
10
  --color-card-foreground: #f5f5f5;
@@ -45,6 +46,8 @@ html {
45
46
 
46
47
  body {
47
48
  background-color: var(--color-background);
49
+ background-image: radial-gradient(circle, #1f1f1f 1.2px, transparent 1.2px);
50
+ background-size: 20px 20px;
48
51
  color: var(--color-foreground);
49
52
  -webkit-font-smoothing: antialiased;
50
53
  -moz-osx-font-smoothing: grayscale;
@@ -0,0 +1,116 @@
1
+ {
2
+ "hash": "fe6af95b",
3
+ "configHash": "2863888b",
4
+ "lockfileHash": "7341d8fa",
5
+ "browserHash": "53b1edc2",
6
+ "optimized": {
7
+ "clsx": {
8
+ "src": "../../../../node_modules/clsx/dist/clsx.mjs",
9
+ "file": "clsx.js",
10
+ "fileHash": "ca467c2f",
11
+ "needsInterop": false
12
+ },
13
+ "driver.js": {
14
+ "src": "../../../../node_modules/driver.js/dist/driver.js.mjs",
15
+ "file": "driver__js.js",
16
+ "fileHash": "a5adfb86",
17
+ "needsInterop": false
18
+ },
19
+ "framer-motion": {
20
+ "src": "../../../../node_modules/framer-motion/dist/es/index.mjs",
21
+ "file": "framer-motion.js",
22
+ "fileHash": "402fc3cf",
23
+ "needsInterop": false
24
+ },
25
+ "lucide-react": {
26
+ "src": "../../../../node_modules/lucide-react/dist/esm/lucide-react.js",
27
+ "file": "lucide-react.js",
28
+ "fileHash": "98d64dfe",
29
+ "needsInterop": false
30
+ },
31
+ "radix-ui": {
32
+ "src": "../../../../node_modules/radix-ui/dist/index.mjs",
33
+ "file": "radix-ui.js",
34
+ "fileHash": "94bfd520",
35
+ "needsInterop": false
36
+ },
37
+ "react-dom": {
38
+ "src": "../../../../node_modules/react-dom/index.js",
39
+ "file": "react-dom.js",
40
+ "fileHash": "49c9164e",
41
+ "needsInterop": true
42
+ },
43
+ "react-dom/client": {
44
+ "src": "../../../../node_modules/react-dom/client.js",
45
+ "file": "react-dom_client.js",
46
+ "fileHash": "23a5e99a",
47
+ "needsInterop": true
48
+ },
49
+ "react-router": {
50
+ "src": "../../../../node_modules/react-router/dist/development/index.mjs",
51
+ "file": "react-router.js",
52
+ "fileHash": "0772ca8b",
53
+ "needsInterop": false
54
+ },
55
+ "react": {
56
+ "src": "../../../../node_modules/react/index.js",
57
+ "file": "react.js",
58
+ "fileHash": "a920d7d3",
59
+ "needsInterop": true
60
+ },
61
+ "react/jsx-dev-runtime": {
62
+ "src": "../../../../node_modules/react/jsx-dev-runtime.js",
63
+ "file": "react_jsx-dev-runtime.js",
64
+ "fileHash": "24b36689",
65
+ "needsInterop": true
66
+ },
67
+ "react/jsx-runtime": {
68
+ "src": "../../../../node_modules/react/jsx-runtime.js",
69
+ "file": "react_jsx-runtime.js",
70
+ "fileHash": "01361365",
71
+ "needsInterop": true
72
+ },
73
+ "recharts": {
74
+ "src": "../../../../node_modules/recharts/es6/index.js",
75
+ "file": "recharts.js",
76
+ "fileHash": "3d34a992",
77
+ "needsInterop": false
78
+ },
79
+ "sonner": {
80
+ "src": "../../../../node_modules/sonner/dist/index.mjs",
81
+ "file": "sonner.js",
82
+ "fileHash": "9c4b54aa",
83
+ "needsInterop": false
84
+ },
85
+ "tailwind-merge": {
86
+ "src": "../../../../node_modules/tailwind-merge/dist/bundle-mjs.mjs",
87
+ "file": "tailwind-merge.js",
88
+ "fileHash": "004e12e8",
89
+ "needsInterop": false
90
+ },
91
+ "use-sync-external-store": {
92
+ "src": "../../../../node_modules/use-sync-external-store/index.js",
93
+ "file": "use-sync-external-store.js",
94
+ "fileHash": "a7fea51c",
95
+ "needsInterop": true
96
+ },
97
+ "use-sync-external-store/shim": {
98
+ "src": "../../../../node_modules/use-sync-external-store/shim/index.js",
99
+ "file": "use-sync-external-store_shim.js",
100
+ "fileHash": "e2c3ad18",
101
+ "needsInterop": true
102
+ },
103
+ "zustand": {
104
+ "src": "../../../../node_modules/zustand/esm/index.mjs",
105
+ "file": "zustand.js",
106
+ "fileHash": "431b548e",
107
+ "needsInterop": false
108
+ }
109
+ },
110
+ "chunks": {
111
+ "react-3_O8oni9": {
112
+ "file": "react-3_O8oni9.js",
113
+ "isDynamicEntry": false
114
+ }
115
+ }
116
+ }
@@ -0,0 +1,18 @@
1
+ //#region node_modules/clsx/dist/clsx.mjs
2
+ function r(e) {
3
+ var t, f, n = "";
4
+ if ("string" == typeof e || "number" == typeof e) n += e;
5
+ else if ("object" == typeof e) if (Array.isArray(e)) {
6
+ var o = e.length;
7
+ for (t = 0; t < o; t++) e[t] && (f = r(e[t])) && (n && (n += " "), n += f);
8
+ } else for (f in e) e[f] && (n && (n += " "), n += f);
9
+ return n;
10
+ }
11
+ function clsx() {
12
+ for (var e, t, f = 0, n = "", o = arguments.length; f < o; f++) (e = arguments[f]) && (t = r(e)) && (n && (n += " "), n += t);
13
+ return n;
14
+ }
15
+ //#endregion
16
+ export { clsx, clsx as default };
17
+
18
+ //# sourceMappingURL=clsx.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"clsx.js","names":[],"sources":["../../../../node_modules/clsx/dist/clsx.mjs"],"sourcesContent":["function r(e){var t,f,n=\"\";if(\"string\"==typeof e||\"number\"==typeof e)n+=e;else if(\"object\"==typeof e)if(Array.isArray(e)){var o=e.length;for(t=0;t<o;t++)e[t]&&(f=r(e[t]))&&(n&&(n+=\" \"),n+=f)}else for(f in e)e[f]&&(n&&(n+=\" \"),n+=f);return n}export function clsx(){for(var e,t,f=0,n=\"\",o=arguments.length;f<o;f++)(e=arguments[f])&&(t=r(e))&&(n&&(n+=\" \"),n+=t);return n}export default clsx;"],"x_google_ignoreList":[0],"mappings":";AAAA,SAAS,EAAE,GAAE;CAAC,IAAI,GAAE,GAAE,IAAE;AAAG,KAAG,YAAU,OAAO,KAAG,YAAU,OAAO,EAAE,MAAG;UAAU,YAAU,OAAO,EAAE,KAAG,MAAM,QAAQ,EAAE,EAAC;EAAC,IAAI,IAAE,EAAE;AAAO,OAAI,IAAE,GAAE,IAAE,GAAE,IAAI,GAAE,OAAK,IAAE,EAAE,EAAE,GAAG,MAAI,MAAI,KAAG,MAAK,KAAG;OAAQ,MAAI,KAAK,EAAE,GAAE,OAAK,MAAI,KAAG,MAAK,KAAG;AAAG,QAAO;;AAAE,SAAgB,OAAM;AAAC,MAAI,IAAI,GAAE,GAAE,IAAE,GAAE,IAAE,IAAG,IAAE,UAAU,QAAO,IAAE,GAAE,IAAI,EAAC,IAAE,UAAU,QAAM,IAAE,EAAE,EAAE,MAAI,MAAI,KAAG,MAAK,KAAG;AAAG,QAAO"}