Skip to content

Commit 66eecfc

Browse files
committed
fix: client, agent and add chat history
1 parent b1310b4 commit 66eecfc

File tree

23 files changed

+572
-173
lines changed

23 files changed

+572
-173
lines changed

apps/client/app/components/ui/Header.tsx renamed to apps/client/app/components/layout/Header.tsx

Lines changed: 13 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -2,16 +2,14 @@
22
import React from 'react';
33
import { ConnectButton, useWallet } from '@suiet/wallet-kit';
44
import Image from 'next/image';
5+
56
const Header = () => {
6-
const wallet = useWallet();
7-
console.log(wallet.address, wallet.connected);
7+
const { address, connected } = useWallet();
8+
89
return (
910
<div className="w-[75dvw] grid grid-cols-1 md:flex justify-between">
10-
{/* <p style={{
11-
fontFamily:"Manrope",
12-
}} className="text-lg text-right md:text-left">Atoma's Coin Sage</p> */}
1311
<span className="flex items-center">
14-
<Image src="/coinSageLogo.png" width={50} height={50} alt="atomasage logo" />
12+
<Image src="/coinSageLogo.png" width={50} height={50} alt="atomasage logo" priority />
1513
<p
1614
style={{
1715
fontFamily: 'fantasy'
@@ -22,8 +20,15 @@ const Header = () => {
2220
</p>
2321
</span>
2422

25-
<div className="w-10 md:block z-20 hidden ">
26-
<ConnectButton className="" label="Connect Wallet" />
23+
<div className="flex items-center gap-4">
24+
{connected && (
25+
<span className="text-sm text-gray-600">
26+
{address?.slice(0, 6)}...{address?.slice(-4)}
27+
</span>
28+
)}
29+
<div className="w-40 md:block z-20">
30+
<ConnectButton label="Connect Wallet" />
31+
</div>
2732
</div>
2833
</div>
2934
);
File renamed without changes.
Lines changed: 18 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,18 @@
1+
'use client';
2+
import { useWallet } from '@suiet/wallet-kit';
3+
4+
const WalletStatus = () => {
5+
const { connected } = useWallet();
6+
7+
if (!connected) {
8+
return (
9+
<div className="text-center p-4 my-4 bg-yellow-50 border border-yellow-200 rounded-lg text-yellow-700">
10+
Please connect your wallet to start chatting and save your conversation history
11+
</div>
12+
);
13+
}
14+
15+
return null;
16+
};
17+
18+
export default WalletStatus;
Lines changed: 13 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,13 @@
1+
import React from 'react';
2+
import PulseLoader from './pulseLoader';
3+
4+
export default function LoadingPage() {
5+
return (
6+
<div className="min-h-screen flex items-center justify-center">
7+
<div className="flex flex-col items-center gap-4">
8+
<div className="w-16 h-16 border-4 border-gray-300 border-t-blue-500 rounded-full animate-spin" />
9+
<p className="text-lg text-gray-600">AtomaSage</p>
10+
</div>
11+
</div>
12+
);
13+
}
Lines changed: 9 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,9 @@
1+
const PulseLoader = () => (
2+
<div className="flex space-x-2">
3+
<div className="w-4 h-4 bg-blue-500 rounded-full animate-pulse"></div>
4+
<div className="w-4 h-4 bg-blue-500 rounded-full animate-pulse [animation-delay:0.2s]"></div>
5+
<div className="w-4 h-4 bg-blue-500 rounded-full animate-pulse [animation-delay:0.4s]"></div>
6+
</div>
7+
);
8+
9+
export default PulseLoader;

apps/client/app/globals.css

Lines changed: 8 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -44,3 +44,11 @@ button {
4444
.logo.react:hover {
4545
filter: drop-shadow(0 0 2em #61dafbaa);
4646
} */
47+
48+
.sui-wallet-kit-button {
49+
@apply px-4 py-2 rounded-lg bg-blue-600 text-white hover:bg-blue-700 transition-colors !important;
50+
}
51+
52+
.sui-wallet-kit-button span {
53+
@apply text-sm font-medium !important;
54+
}

apps/client/app/layout.tsx

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1,10 +1,10 @@
11
import './globals.css';
22
import { Manrope } from 'next/font/google';
3-
import Header from './components/ui/Header';
3+
import Header from './components/layout/Header';
44
import Providers from '@/app/providers';
55
import '@suiet/wallet-kit/style.css';
66
import './walletCustomCss.css';
7-
import Sidebar from './components/ui/Sidebar';
7+
import Sidebar from './components/layout/Sidebar';
88

99
const manrope = Manrope({ subsets: ['latin'] });
1010

apps/client/app/page.tsx

Lines changed: 35 additions & 20 deletions
Original file line numberDiff line numberDiff line change
@@ -1,46 +1,60 @@
11
'use client';
2-
import React, { useState } from 'react';
2+
import React, { useState, useEffect } from 'react';
3+
import PulseLoader from './components/ui/pulseLoader';
34
import api from './lib/api';
45
import { useWallet } from '@suiet/wallet-kit';
56
import JSONFormatter from './utils/JSONFormatter';
67

7-
import { keywords } from './data';
8-
98
import Messages from './components/sections/Messages';
109
import SampleQuestions from './components/sections/SampleQuestions';
10+
import LoadingPage from './components/ui/loadingPage';
1111

1212
export default function Home() {
1313
const [messages, setMessages] = useState<
1414
{ text: string; sender: 'user' | 'llm'; isHTML?: boolean }[]
1515
>([]);
1616
const [inputValue, setInputValue] = useState('');
1717
const [isThinking, setIsThinking] = useState(false);
18-
const { address } = useWallet();
18+
const { address, connected } = useWallet();
19+
const [isLoading, setIsLoading] = useState(false);
20+
21+
// Load chat history when wallet connects
22+
useEffect(() => {
23+
if (address && connected) {
24+
loadChatHistory();
25+
// // Send initial wallet connection message
26+
// handleSend(`Connected wallet: ${address}`);
27+
}
28+
}, [address, connected]);
29+
30+
const loadChatHistory = async () => {
31+
try {
32+
setIsLoading(true);
33+
const response = await api.get(`/query/history/${address}`);
34+
setMessages(response.data);
35+
} catch (error) {
36+
console.error('Error loading chat history:', error);
37+
} finally {
38+
setIsLoading(false);
39+
}
40+
};
1941

2042
const handleSend = async (message?: string) => {
2143
const userMessage = message || inputValue.trim();
2244

2345
if (userMessage) {
2446
setMessages((prev) => [...prev, { text: userMessage, sender: 'user' }]);
25-
setIsThinking(true);
2647
setInputValue('');
48+
setIsThinking(true);
2749

2850
try {
29-
let modifiedMessage = userMessage;
30-
31-
const containsKeywords = keywords.some((keyword) =>
32-
userMessage.toLowerCase().includes(keyword)
33-
);
51+
// Always send the wallet address with the query
52+
const response = await api.post('/query', {
53+
query: userMessage,
54+
walletAddress: address
55+
});
3456

35-
if (containsKeywords) {
36-
modifiedMessage = `${userMessage}. My wallet address is ${address}.`;
37-
}
38-
39-
console.log(modifiedMessage, 'modified');
40-
const response = await api.post('/query', { query: modifiedMessage });
41-
console.log(response);
4257
const res = response.data[0];
43-
console.log(res);
4458
let llmResponse = '';
4559

4660
if (typeof res.response === 'string') {
@@ -65,7 +79,7 @@ export default function Home() {
6579
}
6680
}
6781
};
68-
82+
if (isLoading) return <LoadingPage />;
6983
return (
7084
<div className="h-[90dvh] w-[90dvw] flex justify-center relative items-center flex-col bg-gradient-to-b from-white to-gray-100">
7185
{/* Chat messages */}
@@ -81,7 +95,8 @@ export default function Home() {
8195

8296
{isThinking && (
8397
<div className="relative mb-3 p-3 rounded-md w-fit max-w-[70%] bg-gray-300 text-black self-start mr-auto text-left">
84-
Please wait...
98+
{/* Please wait... */}
99+
<PulseLoader />
85100
</div>
86101
)}
87102
</div>

apps/web/package.json

Lines changed: 10 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -13,24 +13,26 @@
1313
},
1414
"dependencies": {
1515
"@atoma-agents/sui-agent": "workspace:*",
16+
"@types/dotenv": "^8.2.0",
1617
"cors": "^2.8.5",
1718
"dotenv": "^16.4.7",
18-
"express": "^4.21.2"
19+
"express": "^4.21.2",
20+
"mongoose": "^8.10.0"
1921
},
2022
"devDependencies": {
2123
"@types/cors": "^2.8.17",
2224
"@types/express": "^5.0.0",
25+
"@types/jest": "^29.5.12",
2326
"@types/node": "^20.11.19",
27+
"@types/supertest": "^6.0.2",
2428
"@typescript-eslint/eslint-plugin": "^5.0.0",
2529
"@typescript-eslint/parser": "^5.0.0",
2630
"eslint": "^8.57.0",
27-
"nodemon": "^3.1.9",
28-
"ts-node": "^10.9.2",
29-
"typescript": "^5.7.3",
30-
"@types/jest": "^29.5.12",
31-
"@types/supertest": "^6.0.2",
3231
"jest": "^29.7.0",
32+
"nodemon": "^3.1.9",
3333
"supertest": "^6.3.4",
34-
"ts-jest": "^29.1.2"
34+
"ts-jest": "^29.1.2",
35+
"ts-node": "^10.9.2",
36+
"typescript": "^5.7.3"
3537
}
36-
}
38+
}

apps/web/src/app.ts

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,8 @@
11
import express, { Application } from 'express';
22
import cors from 'cors';
33
import v1routes from './routes/v1';
4+
import { connectDB } from './utils/db';
5+
//import queryRouter from './routes/v1/query';
46

57
/**
68
* Express application instance.
@@ -27,6 +29,9 @@ app.use(cors()); // Enable CORS for all routes
2729
*/
2830
app.use(v1routes);
2931

32+
// Connect to MongoDB
33+
connectDB().catch(console.error);
34+
3035
/**
3136
* @exports app
3237
* @type {Application}

0 commit comments

Comments
 (0)